aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSem <sembrestels@riseup.net>2013-11-09 16:13:46 +0100
committerSem <sembrestels@riseup.net>2013-11-09 16:13:46 +0100
commite2a2fbdccaf0f48878903f448428cab5852d0870 (patch)
tree9cbe6b74c8e2e191ec65fba78d7435af35506f82
parent59448d8a9864573c05477a63a6dda404c455fdb6 (diff)
parentb603da53e13005c67d05efac67b70023dfffc450 (diff)
downloadelgg-e2a2fbdccaf0f48878903f448428cab5852d0870.tar.gz
elgg-e2a2fbdccaf0f48878903f448428cab5852d0870.tar.bz2
Add 'mod/dokuwiki/' from commit 'b603da53e13005c67d05efac67b70023dfffc450'
git-subtree-dir: mod/dokuwiki git-subtree-mainline: 59448d8a9864573c05477a63a6dda404c455fdb6 git-subtree-split: b603da53e13005c67d05efac67b70023dfffc450
-rw-r--r--mod/dokuwiki/AUTHORS2
-rwxr-xr-xmod/dokuwiki/COPYING340
-rw-r--r--mod/dokuwiki/README31
-rw-r--r--mod/dokuwiki/index.php17
-rw-r--r--mod/dokuwiki/languages/ca.php18
-rwxr-xr-xmod/dokuwiki/languages/de.php21
-rwxr-xr-xmod/dokuwiki/languages/en.php32
-rw-r--r--mod/dokuwiki/languages/es.php18
-rw-r--r--mod/dokuwiki/languages/fr.php12
-rw-r--r--mod/dokuwiki/languages/gl.php23
-rwxr-xr-xmod/dokuwiki/languages/pl.php21
-rw-r--r--mod/dokuwiki/languages/pt.php23
-rw-r--r--mod/dokuwiki/lib/dokuwiki.php60
-rw-r--r--mod/dokuwiki/manifest.xml21
-rw-r--r--mod/dokuwiki/start.php168
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/COPYING340
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/README9
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/VERSION1
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/bin/dwpage.php378
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/bin/indexer.php172
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/bin/wantedpages.php134
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/acl.auth.php24
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/acl.auth.php.dist21
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/acronyms.conf143
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/dokuwiki.php156
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/entities.conf22
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/interwiki.conf125
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/license.php40
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/local.php43
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/local.php.dist26
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/mediameta.php57
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/mime.conf52
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/msg8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/mysql.conf.php.example253
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/scheme.conf11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/smileys.conf27
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/users.auth.php10
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/users.auth.php.dist10
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/wordblock.conf8004
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/words.aspell.dist5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/data/_dummy1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/data/attic/_dummy0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/data/cache/_dummy0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/data/index/_dummy0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/data/locks/_dummy0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/data/media/wiki/dokuwiki-128.pngbin0 -> 33615 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/data/meta/_dummy0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/data/pages/playground/playground.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/data/pages/sidebar.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/data/pages/wiki/dokuwiki.txt66
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/data/pages/wiki/syntax.txt488
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/data/tmp/_dummy0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/doku.php109
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/feed.php353
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/DifferenceEngine.php1066
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/EmailAddressValidator.php146
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/FeedParser.php76
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/HTTPClient.php573
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/IXR_Library.php817
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/JSON.php624
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/JpegMeta.php3116
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/SimplePie.php10849
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/TarLib.class.php918
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/ZipLib.class.php475
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/actions.php639
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/adLDAP.php2347
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/auth.php1099
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/auth/ad.class.php205
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/auth/basic.class.php403
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/auth/elgg.class.php352
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/auth/ldap.class.php357
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/auth/mysql.class.php942
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/auth/pgsql.class.php411
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/auth/plain.class.php324
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/blowfish.php521
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/cache.php292
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/changelog.php474
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/cliopts.php361
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/common.php1549
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/confutils.php320
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/events.php202
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/feedcreator.class.php1572
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/form.php918
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/fulltext.php722
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi.php4644
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/abap.php1409
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/actionscript-french.php957
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/actionscript.php197
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/actionscript3.php473
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/ada.php133
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/apache.php480
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/applescript.php157
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/apt_sources.php144
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/asm.php225
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/asp.php164
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/autoit.php1171
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/avisynth.php194
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/bash.php282
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/basic4gl.php341
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/bf.php114
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/blitzbasic.php185
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/bnf.php110
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/boo.php217
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/c.php188
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/c_mac.php212
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/caddcl.php126
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/cadlisp.php186
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/cfdg.php124
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/cfm.php299
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/cil.php196
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/cobol.php244
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/cpp-qt.php315
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/cpp.php226
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/csharp.php250
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/css.php212
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/d.php272
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/dcs.php185
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/delphi.php289
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/diff.php196
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/div.php126
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/dos.php198
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/dot.php164
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/eiffel.php395
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/email.php209
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/fortran.php160
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/freebasic.php141
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/genero.php463
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/gettext.php97
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/glsl.php205
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/gml.php506
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/gnuplot.php296
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/groovy.php1011
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/haskell.php198
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/hq9plus.php104
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/html4strict.php203
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/idl.php123
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/ini.php128
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/inno.php212
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/intercal.php122
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/io.php138
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/java.php983
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/java5.php1031
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/javascript.php150
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/kixtart.php329
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/klonec.php282
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/klonecpp.php310
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/latex.php218
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/lisp.php144
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/locobasic.php130
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/lolcode.php152
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/lotusformulas.php318
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/lotusscript.php191
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/lscript.php387
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/lsl2.php898
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/lua.php137
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/m68k.php143
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/make.php151
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/matlab.php227
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/mirc.php171
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/modula3.php135
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/mpasm.php164
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/mxml.php145
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/mysql.php475
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/nsis.php351
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/oberon2.php135
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/objc.php358
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/ocaml-brief.php111
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/ocaml.php174
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/oobas.php135
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/oracle11.php614
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/oracle8.php496
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/pascal.php152
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/per.php302
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/perl.php213
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/php-brief.php222
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/php.php1114
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/pic16.php141
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/pixelbender.php176
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/plsql.php256
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/povray.php199
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/powershell.php277
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/progress.php485
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/prolog.php143
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/providex.php299
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/python.php237
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/qbasic.php151
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/rails.php406
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/rebol.php196
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/reg.php233
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/robots.php98
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/ruby.php226
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/sas.php290
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/scala.php122
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/scheme.php170
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/scilab.php295
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/sdlbasic.php165
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/smalltalk.php160
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/smarty.php192
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/sql.php140
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/tcl.php194
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/teraterm.php317
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/text.php84
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/thinbasic.php868
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/tsql.php375
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/typoscript.php300
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/vb.php133
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/vbnet.php201
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/verilog.php173
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/vhdl.php144
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/vim.php185
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/visualfoxpro.php456
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/visualprolog.php129
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/whitespace.php121
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/winbatch.php369
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/xml.php157
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/xorg_conf.php124
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/xpp.php436
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/z80.php144
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/html.php1608
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/httputils.php199
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/indexer.php705
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/infoutils.php385
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/init.php598
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/io.php593
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/af/lang.php75
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/admin.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/backlinks.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/conflict.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/diff.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/draft.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/index.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/lang.php223
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/norev.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/preview.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/pwconfirm.txt8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/read.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/recent.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/register.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/revisions.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/stopwords.txt29
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/subscribermail.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/admin.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/backlinks.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/draft.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/install.html25
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/lang.php247
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/mailtext.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/newpage.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/preview.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/pwconfirm.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/recent.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/registermail.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/stopwords.txt29
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/subscribermail.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/uploadmail.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/wordblock.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/backlinks.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/draft.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/install.html11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/lang.php250
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/norev.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/pwconfirm.txt15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/register.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/resendpwd.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/stopwords.txt76
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/subscribermail.txt23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/updateprofile.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/draft.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/install.html8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/lang.php247
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/mailtext.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/norev.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/pwconfirm.txt15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/stopwords.txt106
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/subscribermail.txt15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/admin.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/backlinks.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/conflict.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/draft.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/index.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/install.html23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/lang.php247
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/norev.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/preview.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/pwconfirm.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/read.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/recent.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/register.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/revisions.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/showrev.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/stopwords.txt944
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/subscribermail.txt23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/updateprofile.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/wordblock.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/conflict.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/draft.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/index.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/install.html24
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/lang.php253
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/pwconfirm.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/revisions.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/stopwords.txt87
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/subscribermail.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/wordblock.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/backlinks.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/diff.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/draft.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/edit.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/install.html27
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/lang.php249
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/locked.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/newpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/preview.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/pwconfirm.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/searchpage.txt7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/stopwords.txt125
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/subscribermail.txt23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/updateprofile.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/backlinks.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/diff.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/draft.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/edit.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/install.html27
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/lang.php257
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/locked.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/newpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/preview.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/pwconfirm.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/searchpage.txt7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/stopwords.txt125
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/subscribermail.txt23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/updateprofile.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/admin.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/backlinks.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/conflict.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/denied.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/diff.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/draft.txt7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/index.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/install.html25
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/lang.php243
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/locked.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/pwconfirm.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/read.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/recent.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/register.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/resendpwd.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/revisions.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/stopwords.txt29
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/subscribermail.txt24
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/uploadmail.txt15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/adminplugins.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/draft.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/install.html24
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/lang.php280
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/newpage.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/pwconfirm.txt15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/resendpwd.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/stopwords.txt39
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/subscribermail.txt23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/updateprofile.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/admin.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/backlinks.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/conflict.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/draft.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/index.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/install.html9
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/lang.php254
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/mailtext.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/newpage.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/norev.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/preview.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/pwconfirm.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/recent.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/revisions.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/stopwords.txt23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/subscribermail.txt23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/wordblock.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/admin.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/conflict.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/draft.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/install.html14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/lang.php262
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/pwconfirm.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/read.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/register.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/stopwords.txt171
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/subscribermail.txt23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/draft.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/editrev.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/index.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/lang.php214
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/mailtext.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/preview.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/pwconfirm.txt12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/resendpwd.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/stopwords.txt15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/subscribermail.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/updateprofile.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/admin.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/backlinks.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/conflict.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/draft.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/install.html9
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/lang.php223
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/norev.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/preview.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/pwconfirm.txt12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/read.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/recent.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/register.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/registermail.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/revisions.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/stopwords.txt26
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/subscribermail.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/uploadmail.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/wordblock.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/admin.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/backlinks.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/conflict.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/diff.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/draft.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/editrev.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/index.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/install.html12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/lang.php253
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/norev.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/preview.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/pwconfirm.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/read.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/recent.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/register.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/revisions.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/showrev.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/stopwords.txt445
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/subscribermail.txt21
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/wordblock.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/admin.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/conflict.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/diff.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/draft.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/index.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/install.html21
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/lang.php248
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/norev.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/preview.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/pwconfirm.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/read.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/recent.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/register.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/revisions.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/stopwords.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/subscribermail.txt23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/wordblock.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/conflict.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/index.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/lang.php173
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/revisions.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/stopwords.txt87
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/subscribermail.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/wordblock.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/draft.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/install.html19
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/lang.php258
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/mailtext.txt18
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/newpage.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/pwconfirm.txt15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/register.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/resendpwd.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/stopwords.txt112
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/subscribermail.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/updateprofile.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/draft.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/install.html25
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/lang.php243
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/newpage.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/pwconfirm.txt15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/stopwords.txt246
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/subscribermail.txt19
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/updateprofile.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/backlinks.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/draft.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/install.html13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/lang.php224
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/pwconfirm.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/register.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/resendpwd.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/stopwords.txt29
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/subscribermail.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/updateprofile.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hi/lang.php126
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/admin.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/backlinks.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/conflict.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/denied.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/diff.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/index.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/lang.php200
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/mailtext.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/norev.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/preview.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/read.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/recent.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/register.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/revisions.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/searchpage.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/stopwords.txt29
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/subscribermail.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/wordblock.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/admin.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/backlinks.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/conflict.txt7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/draft.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/install.html26
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/lang.php249
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/locked.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/login.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/mailtext.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/norev.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/pwconfirm.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/registermail.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/revisions.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/stopwords.txt39
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/subscribermail.txt18
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/uploadmail.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/wordblock.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id-ni/lang.php79
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/backlinks.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/draft.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/install.html25
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/lang.php210
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/pwconfirm.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/stopwords.txt37
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/subscribermail.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/is/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/is/diff.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/is/lang.php196
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/is/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/is/recent.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/is/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/is/subscribermail.txt23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/denied.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/draft.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/install.html24
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/lang.php240
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/mailtext.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/norev.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/preview.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/pwconfirm.txt15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/read.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/recent.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/revisions.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/stopwords.txt119
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/subscribermail.txt18
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/draft.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/edit.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/install.html14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/lang.php249
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/newpage.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/pwconfirm.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/resendpwd.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/stopwords.txt29
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/subscribermail.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/updateprofile.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/km/admin.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/km/backlinks.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/km/conflict.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/km/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/km/edit.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/km/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/km/index.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/km/lang.php230
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/km/login.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/km/newpage.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/km/norev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/km/pwconfirm.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/km/recent.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/km/register.txt7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/km/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/diff.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/draft.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/install.html17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/lang.php229
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/norev.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/pwconfirm.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/resendpwd.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/stopwords.txt29
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/subscribermail.txt15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/updateprofile.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/uploadmail.txt15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/index.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/lang.php163
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/preview.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/recent.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/stopwords.txt29
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/subscribermail.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/lang.php207
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/login.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/mailtext.txt18
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/newpage.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/norev.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/preview.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/read.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/subscribermail.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/updateprofile.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/admin.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/backlinks.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/conflict.txt8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/denied.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/diff.txt7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/draft.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/editrev.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/install.html12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/lang.php244
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/locked.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/mailtext.txt18
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/newpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/norev.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/preview.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/pwconfirm.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/read.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/recent.txt8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/revisions.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/searchpage.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/stopwords.txt48
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/subscribermail.txt23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/updateprofile.txt8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/backlinks.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/lang.php135
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/locked.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/preview.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/read.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/register.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/revisions.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/searchpage.txt7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/wordblock.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/admin.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/backlinks.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/conflict.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/diff.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/draft.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/index.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/install.html10
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/lang.php229
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/mailtext.txt15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/norev.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/preview.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/pwconfirm.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/read.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/recent.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/register.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/registermail.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/revisions.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/stopwords.txt39
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/subscribermail.txt21
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/uploadmail.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/wordblock.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/admin.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/backlinks.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/conflict.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/diff.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/draft.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/index.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/lang.php220
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/norev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/pwconfirm.txt12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/read.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/recent.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/searchpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/subscribermail.txt19
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/uploadmail.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/admin.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/conflict.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/diff.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/draft.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/install.html14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/lang.php253
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/pwconfirm.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/recent.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/stopwords.txt37
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/subscribermail.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/admin.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/backlinks.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/draft.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/install.html24
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/lang.php260
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/pwconfirm.txt15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/resendpwd.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/stopwords.txt130
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/subscribermail.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/updateprofile.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/draft.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/edit.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/install.html23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/lang.php248
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/mailtext.txt18
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/newpage.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/pwconfirm.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/registermail.txt15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/resendpwd.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/stopwords.txt89
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/subscribermail.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/updateprofile.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/uploadmail.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/conflict.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/diff.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/draft.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/editrev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/index.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/install.html7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/lang.php247
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/norev.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/preview.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/pwconfirm.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/read.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/recent.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/stopwords.txt55
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/subscribermail.txt24
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/updateprofile.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/admin.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/conflict.txt9
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/denied.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/diff.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/draft.txt7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/edit.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/editrev.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/index.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/install.html8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/lang.php237
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/locked.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/login.txt7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/mailtext.txt20
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/newpage.txt7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/norev.txt7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/preview.txt7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/pwconfirm.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/read.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/register.txt7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/revisions.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/searchpage.txt7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/showrev.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/stopwords.txt141
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/subscribermail.txt15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/wordblock.txt7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/admin.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/draft.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/install.html10
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/lang.php251
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/mailtext.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/pwconfirm.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/register.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/stopwords.txt29
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/subscribermail.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/conflict.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/draft.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/install.html7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/lang.php258
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/pwconfirm.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/register.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/revisions.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/stopwords.txt93
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/subscribermail.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/updateprofile.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/wordblock.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/admin.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/backlinks.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/conflict.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/draft.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/editrev.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/index.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/install.html23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/lang.php227
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/norev.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/preview.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/pwconfirm.txt15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/recent.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/register.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/resendpwd.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/revisions.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/showrev.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/stopwords.txt28
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/subscribermail.txt18
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/updateprofile.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/wordblock.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/lang.php162
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/pwconfirm.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/draft.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/install.html12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/lang.php224
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/pwconfirm.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/registermail.txt15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/stopwords.txt12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/subscribermail.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/adminplugins.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/backlinks.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/draft.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/install.html25
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/lang.php261
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/pwconfirm.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/resendpwd.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/stopwords.txt129
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/subscribermail.txt24
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/updateprofile.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/admin.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/backlinks.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/conflict.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/diff.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/draft.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/index.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/lang.php249
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/norev.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/preview.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/pwconfirm.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/read.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/recent.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/register.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/revisions.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/searchpage.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/subscribermail.txt22
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/wordblock.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/admin.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/draft.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/install.html8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/lang.php226
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/locked.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/mailtext.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/newpage.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/pwconfirm.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/registermail.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/stopwords.txt29
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/subscribermail.txt18
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/uploadmail.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/backlinks.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/conflict.txt8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/draft.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/install.html21
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/lang.php244
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/newpage.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/pwconfirm.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/recent.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/stopwords.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/subscribermail.txt22
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/updateprofile.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/admin.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/backlinks.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/conflict.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/index.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/lang.php106
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/mailtext.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/norev.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/preview.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/read.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/recent.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/register.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/revisions.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/wordblock.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/backlinks.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/conflict.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/draft.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/index.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/install.html8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/lang.php252
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/login.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/mailtext.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/pwconfirm.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/read.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/registermail.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/revisions.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/stopwords.txt31
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/subscribermail.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/updateprofile.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/uploadmail.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/admin.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/backlinks.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/conflict.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/diff.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/draft.txt7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/index.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/install.html8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/lang.php230
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/norev.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/preview.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/pwconfirm.txt15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/register.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/registermail.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/resendpwd.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/revisions.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/stopwords.txt29
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/subscribermail.txt19
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/updateprofile.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/uploadmail.txt20
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/wordblock.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/mail.php266
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/media.php1102
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/pageutils.php537
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/parser/code.php58
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/parser/handler.php1697
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/parser/lexer.php600
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/parser/metadata.php483
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/parser/parser.php956
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/parser/renderer.php322
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/parser/xhtml.php1142
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/parser/xhtmlsummary.php90
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/parserutils.php672
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/plugin.php248
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/plugincontroller.class.php172
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/pluginutils.php47
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/search.php630
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/template.php1413
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/toolbar.php241
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/utf8.php1657
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/index.php8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/install.php516
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/_fla/MultipleUpload.as329
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/_fla/README4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/_fla/index.html12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/_fla/multipleUpload.flabin0 -> 1812480 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/exe/ajax.php370
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/exe/css.php330
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/exe/detail.php58
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/exe/fetch.php173
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/exe/index.html12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/exe/indexer.php375
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/exe/js.php397
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/exe/mediamanager.php105
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/exe/multipleUpload.swfbin0 -> 64561 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/exe/opensearch.php38
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/exe/xmlrpc.php921
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/admin/README2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/admin/acl.pngbin0 -> 1336 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/admin/config.pngbin0 -> 1761 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/admin/plugin.pngbin0 -> 1415 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/admin/popularity.pngbin0 -> 1420 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/admin/revert.pngbin0 -> 1598 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/admin/usermanager.pngbin0 -> 1850 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/arrow_down.gifbin0 -> 273 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/arrow_up.gifbin0 -> 274 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/at.gifbin0 -> 57 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/blank.gifbin0 -> 42 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/close.pngbin0 -> 1345 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/del.pngbin0 -> 433 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/diff.pngbin0 -> 219 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/edit.gifbin0 -> 142 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/error.pngbin0 -> 706 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/bz2.pngbin0 -> 720 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/c.pngbin0 -> 774 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/conf.pngbin0 -> 717 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/cpp.pngbin0 -> 859 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/cs.pngbin0 -> 808 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/css.pngbin0 -> 843 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/deb.pngbin0 -> 716 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/doc.pngbin0 -> 659 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/file.pngbin0 -> 720 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/gif.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/gz.pngbin0 -> 716 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/htm.pngbin0 -> 748 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/html.pngbin0 -> 748 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/index.php50
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/java.pngbin0 -> 739 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/jpeg.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/jpg.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/js.pngbin0 -> 809 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/lua.pngbin0 -> 465 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odc.pngbin0 -> 749 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odf.pngbin0 -> 807 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odg.pngbin0 -> 788 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odi.pngbin0 -> 788 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odp.pngbin0 -> 744 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/ods.pngbin0 -> 749 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odt.pngbin0 -> 577 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/pdf.pngbin0 -> 663 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/php.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/pl.pngbin0 -> 698 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/png.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/ppt.pngbin0 -> 762 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/ps.pngbin0 -> 534 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/py.pngbin0 -> 714 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rar.pngbin0 -> 631 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rb.pngbin0 -> 828 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rpm.pngbin0 -> 638 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rtf.pngbin0 -> 474 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/swf.pngbin0 -> 843 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxc.pngbin0 -> 749 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxd.pngbin0 -> 788 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxi.pngbin0 -> 744 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxw.pngbin0 -> 577 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/tar.pngbin0 -> 747 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/tgz.pngbin0 -> 716 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/txt.pngbin0 -> 542 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/xls.pngbin0 -> 731 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/xml.pngbin0 -> 475 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/zip.pngbin0 -> 874 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/history.pngbin0 -> 202 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/index.html12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/info.pngbin0 -> 783 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki.pngbin0 -> 1089 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/amazon.de.gifbin0 -> 882 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/amazon.gifbin0 -> 882 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/amazon.uk.gifbin0 -> 882 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/coral.gifbin0 -> 85 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/doku.gifbin0 -> 257 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/dokubug.gifbin0 -> 166 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/google.gifbin0 -> 980 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/meatball.gifbin0 -> 1100 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/phpfn.gifbin0 -> 330 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/sb.gifbin0 -> 886 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wiki.gifbin0 -> 909 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wp.gifbin0 -> 680 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpde.gifbin0 -> 680 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpes.gifbin0 -> 680 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpfr.gifbin0 -> 680 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpjp.gifbin0 -> 680 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpmeta.gifbin0 -> 680 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wppl.gifbin0 -> 680 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/larger.gifbin0 -> 87 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-nc-nd.pngbin0 -> 5281 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-nc-sa.pngbin0 -> 5460 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-nc.pngbin0 -> 5145 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-nd.pngbin0 -> 4880 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-sa.pngbin0 -> 5083 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by.pngbin0 -> 4739 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc.pngbin0 -> 958 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/gnufdl.pngbin0 -> 1748 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/publicdomain.pngbin0 -> 4962 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-nc-nd.pngbin0 -> 678 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-nc-sa.pngbin0 -> 686 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-nc.pngbin0 -> 663 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-nd.pngbin0 -> 658 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-sa.pngbin0 -> 661 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by.pngbin0 -> 629 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc.pngbin0 -> 728 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/gnufdl.pngbin0 -> 839 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/publicdomain.pngbin0 -> 621 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/list-minus.gifbin0 -> 64 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/list-plus.gifbin0 -> 67 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/loading.gifbin0 -> 1876 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/magnifier.pngbin0 -> 615 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/minus.gifbin0 -> 858 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/multiupload.pngbin0 -> 698 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/notify.pngbin0 -> 789 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/ns.pngbin0 -> 853 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/page.pngbin0 -> 635 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/pencil.pngbin0 -> 450 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/plus.gifbin0 -> 860 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smaller.gifbin0 -> 86 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/delete.gifbin0 -> 1421 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/fixme.gifbin0 -> 1435 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_arrow.gifbin0 -> 170 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_biggrin.gifbin0 -> 172 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_confused.gifbin0 -> 171 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_cool.gifbin0 -> 172 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_cry.gifbin0 -> 498 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_doubt.gifbin0 -> 990 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_doubt2.gifbin0 -> 992 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_eek.gifbin0 -> 170 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_evil.gifbin0 -> 236 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_exclaim.gifbin0 -> 236 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_frown.gifbin0 -> 171 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_fun.gifbin0 -> 590 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_idea.gifbin0 -> 176 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_kaddi.gifbin0 -> 991 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_lol.gifbin0 -> 336 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_mrgreen.gifbin0 -> 349 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_neutral.gifbin0 -> 171 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_question.gifbin0 -> 248 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_razz.gifbin0 -> 176 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_redface.gifbin0 -> 650 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_rolleyes.gifbin0 -> 485 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_sad.gifbin0 -> 171 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_silenced.gifbin0 -> 231 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_smile.gifbin0 -> 174 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_smile2.gifbin0 -> 174 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_surprised.gifbin0 -> 174 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_twisted.gifbin0 -> 238 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_wink.gifbin0 -> 170 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/success.pngbin0 -> 816 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/throbber.gifbin0 -> 875 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/bold.pngbin0 -> 433 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/chars.pngbin0 -> 619 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h.pngbin0 -> 360 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h1.pngbin0 -> 420 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h2.pngbin0 -> 442 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h3.pngbin0 -> 452 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h4.pngbin0 -> 432 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h5.pngbin0 -> 440 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hequal.pngbin0 -> 426 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hminus.pngbin0 -> 538 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hplus.pngbin0 -> 520 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hr.pngbin0 -> 329 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/image.pngbin0 -> 625 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/italic.pngbin0 -> 322 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/link.pngbin0 -> 579 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/linkextern.pngbin0 -> 962 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/mono.pngbin0 -> 385 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/ol.pngbin0 -> 403 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/sig.pngbin0 -> 569 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/smiley.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/strike.pngbin0 -> 415 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/ul.pngbin0 -> 383 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/underline.pngbin0 -> 375 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/trash.pngbin0 -> 476 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/up.pngbin0 -> 376 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/wrap.gifbin0 -> 86 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/index.html12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/admin.php809
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/ajax.php62
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/af/lang.php10
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ar/lang.php24
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/bg/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/bg/lang.php36
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca-valencia/help.txt15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca-valencia/lang.php37
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca/lang.php38
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/cs/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/cs/lang.php37
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/da/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/da/lang.php42
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de-informal/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de-informal/lang.php35
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de/lang.php47
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/el/help.txt10
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/el/lang.php43
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/en/help.txt12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/en/lang.php46
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eo/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eo/lang.php40
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/es/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/es/lang.php48
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/et/lang.php23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eu/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eu/lang.php34
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fa/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fa/lang.php38
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fi/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fi/lang.php36
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fr/help.txt9
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fr/lang.php48
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/gl/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/gl/lang.php36
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/he/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/he/lang.php35
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hi/lang.php6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hr/lang.php7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hu/help.txt12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hu/lang.php36
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/id-ni/lang.php7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/id/lang.php21
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/is/lang.php15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/it/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/it/lang.php42
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ja/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ja/lang.php39
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ko/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ko/lang.php41
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/lt/lang.php22
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/lv/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/lv/lang.php35
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/mr/help.txt12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/mr/lang.php37
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ne/lang.php27
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/nl/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/nl/lang.php45
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/no/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/no/lang.php46
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pl/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pl/lang.php38
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt-br/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt-br/lang.php47
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt/help.txt9
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt/lang.php39
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ro/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ro/lang.php39
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ru/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ru/lang.php42
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sk/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sk/lang.php38
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sl/lang.php21
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sr/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sr/lang.php37
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sv/help.txt8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sv/lang.php46
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/th/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/th/lang.php27
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/tr/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/tr/lang.php40
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/uk/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/uk/lang.php39
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/vi/lang.php21
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh-tw/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh-tw/lang.php40
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh/lang.php39
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/group.pngbin0 -> 753 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/ns.pngbin0 -> 853 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/page.pngbin0 -> 635 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/user.pngbin0 -> 706 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/script.js163
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/style.css96
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/action.php26
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/admin.php49
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/box/print.css274
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/box/style.css272
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/box/syntax.php287
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/index.html12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/COPYING340
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/CREDITS58
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/VERSION.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/action.php169
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/admin.php453
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/ajax.php196
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/changelog207
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/conf/default.php19
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/conf/metadata.php18
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/edit-full.js152
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/edit.js1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/close.gifbin0 -> 64 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/base.gifbin0 -> 578 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/empty.gifbin0 -> 62 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folder.gifbin0 -> 352 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folderh.gifbin0 -> 572 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folderhopen.gifbin0 -> 577 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folderopen.gifbin0 -> 354 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/info.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/join.gifbin0 -> 69 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/joinbottom.gifbin0 -> 66 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/line.gifbin0 -> 66 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/minus.gifbin0 -> 86 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/minusbottom.gifbin0 -> 85 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/nolines_minus.gifbin0 -> 861 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/nolines_plus.gifbin0 -> 870 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/page.gifbin0 -> 565 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/plus.gifbin0 -> 89 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/plusbottom.gifbin0 -> 88 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/empty.gifbin0 -> 275 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/indexmenu_toolbar.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/larrow.gifbin0 -> 1829 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/msort.gifbin0 -> 420 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/rarrow.gifbin0 -> 81 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/toc_bullet.gifbin0 -> 74 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/inc/pclzip.lib.php5748
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/inc/repo.class.php51
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/indexmenu-full.js640
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/indexmenu.js18
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/jsmenu/admmenu.js71
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/jsmenu/menu.js56
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/jsmenu/usrmenu.js69
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/de/lang.php27
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/en/lang.php28
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/es/lang.php28
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/it/lang.php29
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/nojsindex-full.js101
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/nojsindex.js1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/script.js152
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/style.css190
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/syntax/indexmenu.php720
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/syntax/tag.php70
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/info/syntax.php259
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/important.pngbin0 -> 2250 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/note.pngbin0 -> 2520 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_important.pngbin0 -> 1366 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_note.pngbin0 -> 1461 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_tip.pngbin0 -> 1441 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_warning.pngbin0 -> 1870 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tip.pngbin0 -> 2909 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/warning.pngbin0 -> 3249 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/info.txt8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/script.js36
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/style.css41
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/syntax.php191
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/ChangeLog.txt255
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/README.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/ZipLib.class.php391
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/action.php41
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/conf/default.php7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/conf/metadata.php8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/info.txt8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/de/lang.php9
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/en/lang.php12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/es/lang.php19
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/fr/lang.php12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/it/lang.php7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/ja/lang.php12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/ru/lang.php12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/zh/lang.php12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/odt.pngbin0 -> 3320 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/renderer.php1232
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/styles.xml158
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/syntax.php96
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/admin.php202
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/af/lang.php5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ar/lang.php6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/bg/intro.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/bg/lang.php15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca-valencia/intro.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca-valencia/lang.php15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca/lang.php18
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/cs/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/cs/lang.php22
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/da/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/da/lang.php19
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/de-informal/lang.php14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/de/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/de/lang.php23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/el/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/el/lang.php20
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/en/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/en/lang.php23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eo/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eo/lang.php22
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/es/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/es/lang.php27
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eu/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eu/lang.php17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fa/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fa/lang.php19
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fi/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fi/lang.php17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fr/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fr/lang.php22
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/gl/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/gl/lang.php17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/he/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/he/lang.php16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hi/lang.php6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hr/lang.php7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hu/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hu/lang.php17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/id-ni/lang.php7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/id/lang.php7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/is/lang.php10
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/it/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/it/lang.php20
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ja/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ja/lang.php17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ko/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ko/lang.php18
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/lt/lang.php7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/lv/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/lv/lang.php15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/mr/intro.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/mr/lang.php18
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ne/lang.php16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/nl/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/nl/lang.php21
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/no/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/no/lang.php26
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pl/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pl/lang.php17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt-br/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt-br/lang.php25
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt/lang.php18
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ro/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ro/lang.php20
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ru/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ru/lang.php22
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sk/intro.txt0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sk/lang.php17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sl/lang.php7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sr/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sr/lang.php16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sv/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sv/lang.php28
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/th/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/th/lang.php19
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/tr/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/tr/lang.php19
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/uk/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/uk/lang.php18
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh-tw/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh-tw/lang.php19
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh/lang.php20
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/README20
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/conf/default.php4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/conf/metadata.php4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/lang/en/lang.php3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/lang/ru/lang.php3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/lang/sp/lang.php3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/plugin.info.txt8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/renderer.php338
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/screen.gifbin0 -> 1574 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/syntax.php72
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/license.txt29
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/null.mp3bin0 -> 2508 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/soundmanager2.js658
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/soundmanager2.swfbin0 -> 2198 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/audio_link.pngbin0 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/audio_on.pngbin0 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/audio_over.pngbin0 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/auto_link.pngbin0 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/auto_on.pngbin0 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/auto_over.pngbin0 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/backgrnd.pngbin0 -> 10257 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/bluebg.gifbin0 -> 2295 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/bluebottom.gifbin0 -> 3428 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/bluefooter.gifbin0 -> 591 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/delay_link.pngbin0 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/exit_link.pngbin0 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/exit_over.pngbin0 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/fade_link.pngbin0 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/fade_on.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/fade_over.pngbin0 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/footer.jpgbin0 -> 4451 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/header.pngbin0 -> 27487 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/last_link.pngbin0 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/last_over.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/list_link.pngbin0 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/loop_link.pngbin0 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/loop_on.pngbin0 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/loop_over.pngbin0 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/next_link.pngbin0 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/next_over.pngbin0 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/notes_link.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/notes_over.pngbin0 -> 789 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/opera.css7
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pause_link.pngbin0 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pause_on.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pause_over.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pretty.css173
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/prev_link.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/prev_over.pngbin0 -> 748 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/print.css1
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/s5-core.css9
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/toggle_link.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/toggle_over.pngbin0 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/volume_link.pngbin0 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/zero_link.pngbin0 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/zero_over.pngbin0 -> 1004 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/audio_link.pngbin0 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/audio_on.pngbin0 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/audio_over.pngbin0 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/auto_link.pngbin0 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/auto_on.pngbin0 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/auto_over.pngbin0 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/backgrnd.pngbin0 -> 10257 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/blank.gifbin0 -> 49 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/bodybg.gifbin0 -> 10119 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/delay_link.pngbin0 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/exit_link.pngbin0 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/exit_over.pngbin0 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/fade_link.pngbin0 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/fade_on.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/fade_over.pngbin0 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/footer.jpgbin0 -> 4451 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/header.pngbin0 -> 27487 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/iepngfix.htc42
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/last_link.pngbin0 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/last_over.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/list_link.pngbin0 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/loop_link.pngbin0 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/loop_on.pngbin0 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/loop_over.pngbin0 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/next_link.pngbin0 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/next_over.pngbin0 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/notes_link.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/notes_over.pngbin0 -> 789 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/opera.css7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pause_link.pngbin0 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pause_on.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pause_over.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pretty.css156
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/prev_link.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/prev_over.pngbin0 -> 748 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/print.css1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/s5-core.css9
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/toggle_link.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/toggle_over.pngbin0 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/volume_link.pngbin0 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/zero_link.pngbin0 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/zero_over.pngbin0 -> 1004 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/audio_link.pngbin0 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/audio_on.pngbin0 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/audio_over.pngbin0 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/auto_link.pngbin0 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/auto_on.pngbin0 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/auto_over.pngbin0 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/backgrnd.pngbin0 -> 10257 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/blank.gifbin0 -> 49 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/delay_link.pngbin0 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/exit_link.pngbin0 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/exit_over.pngbin0 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/fade_link.pngbin0 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/fade_on.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/fade_over.pngbin0 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/footer.jpgbin0 -> 4451 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/header.pngbin0 -> 27487 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/iepngfix.htc42
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/last_link.pngbin0 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/last_over.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/list_link.pngbin0 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/logo.pngbin0 -> 16746 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/loop_link.pngbin0 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/loop_on.pngbin0 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/loop_over.pngbin0 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/next_link.pngbin0 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/next_over.pngbin0 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/notes_link.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/notes_over.pngbin0 -> 789 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/opera.css7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pause_link.pngbin0 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pause_on.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pause_over.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pretty.css163
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/prev_link.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/prev_over.pngbin0 -> 748 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/print.css1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/s5-core.css9
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/toggle_link.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/toggle_over.pngbin0 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/volume_link.pngbin0 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/zero_link.pngbin0 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/zero_over.pngbin0 -> 1004 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/MIT-LICENSE20
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/builder.js136
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/controls.js965
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/dragdrop.js974
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/effects.js1123
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/presentacular.js153
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/prototype.js4874
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/scriptaculous.js68
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/slider.js275
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/sound.js59
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/unittest.js568
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/LEEME.txt31
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/audio_link.pngbin0 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/audio_on.pngbin0 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/audio_over.pngbin0 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/auto_link.pngbin0 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/auto_on.pngbin0 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/auto_over.pngbin0 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/backgrnd.pngbin0 -> 10257 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/blank.gifbin0 -> 49 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/delay_link.pngbin0 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/exit_link.pngbin0 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/exit_over.pngbin0 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/fade_link.pngbin0 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/fade_on.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/fade_over.pngbin0 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/footer.jpgbin0 -> 4451 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/header.pngbin0 -> 27487 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/iepngfix.htc42
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/index.html100
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/last_link.pngbin0 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/last_over.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/list_link.pngbin0 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/loop_link.pngbin0 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/loop_on.pngbin0 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/loop_over.pngbin0 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/next_link.pngbin0 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/next_over.pngbin0 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/notes_link.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/notes_over.pngbin0 -> 789 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/opera.css7
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pause_link.pngbin0 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pause_on.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pause_over.pngbin0 -> 757 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/back-handout-print.pngbin0 -> 5999 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/back-slide-print.pngbin0 -> 6487 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/back_console.pngbin0 -> 14135 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-foot.pngbin0 -> 451 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-head.pngbin0 -> 450 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-head.xcfbin0 -> 6114 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-main.pngbin0 -> 92480 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/favicon.icobin0 -> 1406 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/logo.pngbin0 -> 9760 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/table-background.pngbin0 -> 460 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/table-header.pngbin0 -> 344 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pretty.css545
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/prev_link.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/prev_over.pngbin0 -> 748 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/print.css1
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/s5-core.css9
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/toggle_link.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/toggle_over.pngbin0 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/volume_link.pngbin0 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/zero_link.pngbin0 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/zero_over.pngbin0 -> 1004 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/across.pngbin0 -> 178955 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/audio_link.pngbin0 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/audio_on.pngbin0 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/audio_over.pngbin0 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/auto_link.pngbin0 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/auto_on.pngbin0 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/auto_over.pngbin0 -> 1117 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/blank.gifbin0 -> 49 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/bottom.pngbin0 -> 41109 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/delay_link.pngbin0 -> 1943 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/druplicon.pngbin0 -> 9215 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/exit_link.pngbin0 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/exit_over.pngbin0 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/fade_link.pngbin0 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/fade_on.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/fade_over.pngbin0 -> 1093 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/framing.css65
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/iepngfix.htc42
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/last_link.pngbin0 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/last_over.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/list_link.pngbin0 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/loop_link.pngbin0 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/loop_on.pngbin0 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/loop_over.pngbin0 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/next_link.pngbin0 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/next_over.pngbin0 -> 734 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/notes.css122
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/notes_link.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/notes_over.pngbin0 -> 789 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/opera.css7
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pause_link.pngbin0 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pause_on.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pause_over.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pretty.css354
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/prev_link.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/prev_over.pngbin0 -> 748 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/print.css1
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/s5-core.css9
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/toggle_link.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/toggle_over.pngbin0 -> 1071 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/top.pngbin0 -> 74839 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/volume_link.pngbin0 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/zero_link.pngbin0 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/zero_over.pngbin0 -> 1004 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/audio_link.pngbin0 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/audio_on.pngbin0 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/audio_over.pngbin0 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/auto_link.pngbin0 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/auto_on.pngbin0 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/auto_over.pngbin0 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/backgrnd.pngbin0 -> 10257 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/blume.jpgbin0 -> 6779 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/blumerechts.jpgbin0 -> 2215 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/delay_link.pngbin0 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/exit_link.pngbin0 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/exit_over.pngbin0 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/fade_link.pngbin0 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/fade_on.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/fade_over.pngbin0 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/footer.jpgbin0 -> 4451 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/header.pngbin0 -> 27487 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/last_link.pngbin0 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/last_over.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/list_link.pngbin0 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/loop_link.pngbin0 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/loop_on.pngbin0 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/loop_over.pngbin0 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/next_link.pngbin0 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/next_over.pngbin0 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/notes_link.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/notes_over.pngbin0 -> 789 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/opera.css7
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pause_link.pngbin0 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pause_on.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pause_over.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pretty.css168
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/prev_link.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/prev_over.pngbin0 -> 748 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/print.css1
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/s5-core.css9
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/toggle_link.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/toggle_over.pngbin0 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/volume_link.pngbin0 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/zero_link.pngbin0 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/zero_over.pngbin0 -> 1004 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/audio_link.pngbin0 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/audio_on.pngbin0 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/audio_over.pngbin0 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/auto_link.pngbin0 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/auto_on.pngbin0 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/auto_over.pngbin0 -> 1117 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/bg-slide.jpgbin0 -> 48642 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/delay_link.pngbin0 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/exit_link.pngbin0 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/exit_over.pngbin0 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/fade_link.pngbin0 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/fade_on.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/fade_over.pngbin0 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/framing.css23
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/iepngfix.htc42
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/last_link.pngbin0 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/last_over.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/list_link.pngbin0 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/loop_link.pngbin0 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/loop_on.pngbin0 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/loop_over.pngbin0 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/next_link.pngbin0 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/next_over.pngbin0 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/notes_link.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/notes_over.pngbin0 -> 789 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/opera.css7
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pause_link.pngbin0 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pause_on.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pause_over.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pretty.css130
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/prev_link.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/prev_over.pngbin0 -> 748 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/print.css1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/s5-core.css9
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/toggle_link.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/toggle_over.pngbin0 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/volume_link.pngbin0 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/zero_link.pngbin0 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/zero_over.pngbin0 -> 1004 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/LEEME.txt32
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/audio_link.pngbin0 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/audio_on.pngbin0 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/audio_over.pngbin0 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/auto_link.pngbin0 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/auto_on.pngbin0 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/auto_over.pngbin0 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/backgrnd.pngbin0 -> 10257 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/blank.gifbin0 -> 49 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/delay_link.pngbin0 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/exit_link.pngbin0 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/exit_over.pngbin0 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/fade_link.pngbin0 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/fade_on.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/fade_over.pngbin0 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/footer.jpgbin0 -> 4451 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/header.pngbin0 -> 27487 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/iepngfix.htc42
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/index.html100
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/last_link.pngbin0 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/last_over.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/list_link.pngbin0 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/loop_link.pngbin0 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/loop_on.pngbin0 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/loop_over.pngbin0 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/next_link.pngbin0 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/next_over.pngbin0 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/notes_link.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/notes_over.pngbin0 -> 789 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/opera.css7
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pause_link.pngbin0 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pause_on.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pause_over.pngbin0 -> 757 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/back-handout-print.pngbin0 -> 5999 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/back-slide-print.pngbin0 -> 6487 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/back_console.pngbin0 -> 14135 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-foot.pngbin0 -> 501 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-head.pngbin0 -> 2999 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-main.pngbin0 -> 1824 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-main2.pngbin0 -> 3735 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/favicon.icobin0 -> 1406 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/logo.pngbin0 -> 16331 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/table-background.pngbin0 -> 460 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/table-header.pngbin0 -> 247 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pretty.css583
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/prev_link.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/prev_over.pngbin0 -> 748 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/print.css1
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/s5-core.css9
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/toggle_link.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/toggle_over.pngbin0 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/volume_link.pngbin0 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/zero_link.pngbin0 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/zero_over.pngbin0 -> 1004 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/blank.gifbin0 -> 49 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/finish.gifbin0 -> 1364 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/fixed.js1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/help.jpgbin0 -> 30942 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/iepngfix.htc42
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/numeric.pngbin0 -> 7144 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/progress.gifbin0 -> 4237 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/00_head.txt8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/audio_link.pngbin0 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/audio_on.pngbin0 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/audio_over.pngbin0 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/auto_link.pngbin0 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/auto_on.pngbin0 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/auto_over.pngbin0 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/backgrnd.pngbin0 -> 10257 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/bg-shade.pngbin0 -> 594 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/bg-slide.jpgbin0 -> 31239 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/delay_link.pngbin0 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/exit_link.pngbin0 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/exit_over.pngbin0 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/fade_link.pngbin0 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/fade_on.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/fade_over.pngbin0 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/footer.jpgbin0 -> 4451 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/header.pngbin0 -> 27487 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/last_link.pngbin0 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/last_over.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/list_link.pngbin0 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/loop_link.pngbin0 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/loop_on.pngbin0 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/loop_over.pngbin0 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/next_link.pngbin0 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/next_over.pngbin0 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/notes_link.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/notes_over.pngbin0 -> 789 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/opera.css7
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pause_link.pngbin0 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pause_on.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pause_over.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pretty.css139
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/prev_link.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/prev_over.pngbin0 -> 748 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/print.css1
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/s5-core.css9
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/toggle_link.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/toggle_over.pngbin0 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/volume_link.pngbin0 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/zero_link.pngbin0 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/zero_over.pngbin0 -> 1004 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/LEEME.txt31
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/audio_link.pngbin0 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/audio_on.pngbin0 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/audio_over.pngbin0 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/auto_link.pngbin0 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/auto_on.pngbin0 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/auto_over.pngbin0 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/backgrnd.pngbin0 -> 10257 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/blank.gifbin0 -> 49 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/delay_link.pngbin0 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/exit_link.pngbin0 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/exit_over.pngbin0 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/fade_link.pngbin0 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/fade_on.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/fade_over.pngbin0 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/footer.jpgbin0 -> 4451 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/header.pngbin0 -> 27487 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/iepngfix.htc42
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/index.html100
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/last_link.pngbin0 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/last_over.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/list_link.pngbin0 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/loop_link.pngbin0 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/loop_on.pngbin0 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/loop_over.pngbin0 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/next_link.pngbin0 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/next_over.pngbin0 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/notes_link.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/notes_over.pngbin0 -> 789 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/opera.css7
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pause_link.pngbin0 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pause_on.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pause_over.pngbin0 -> 757 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/back-handout-print.pngbin0 -> 5958 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/back-slide-print.pngbin0 -> 5648 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/back_console.pngbin0 -> 11708 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-foot.pngbin0 -> 397 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-head.pngbin0 -> 401 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-head.xcf.7zbin0 -> 2889 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-main.pngbin0 -> 27159 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-main2.pngbin0 -> 27171 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/favicon.icobin0 -> 1406 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/logo.pngbin0 -> 11222 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/table-background.pngbin0 -> 460 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/table-header.pngbin0 -> 654 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pretty.css584
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/prev_link.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/prev_over.pngbin0 -> 748 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/print.css1
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/s5-core.css9
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/toggle_link.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/toggle_over.pngbin0 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/volume_link.pngbin0 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/zero_link.pngbin0 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/zero_over.pngbin0 -> 1004 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/audio_link.pngbin0 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/audio_on.pngbin0 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/audio_over.pngbin0 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/auto_link.pngbin0 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/auto_on.pngbin0 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/auto_over.pngbin0 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/backgrnd.pngbin0 -> 10257 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/delay_link.pngbin0 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/exit_link.pngbin0 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/exit_over.pngbin0 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/fade_link.pngbin0 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/fade_on.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/fade_over.pngbin0 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/footer.jpgbin0 -> 4451 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/header.pngbin0 -> 27487 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/last_link.pngbin0 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/last_over.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/list_link.pngbin0 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/loop_link.pngbin0 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/loop_on.pngbin0 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/loop_over.pngbin0 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/next_link.pngbin0 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/next_over.pngbin0 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/notes_link.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/notes_over.pngbin0 -> 789 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/opera.css7
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pause_link.pngbin0 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pause_on.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pause_over.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pixelbg.gifbin0 -> 1716 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pixelheader.jpgbin0 -> 3571 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pixelslide0bg.gifbin0 -> 3180 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pretty.css166
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/prev_link.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/prev_over.pngbin0 -> 748 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/print.css1
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/s5-core.css9
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/toggle_link.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/toggle_over.pngbin0 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/volume_link.pngbin0 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/zero_link.pngbin0 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/zero_over.pngbin0 -> 1004 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/LEEME.txt31
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/audio_link.pngbin0 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/audio_on.pngbin0 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/audio_over.pngbin0 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/auto_link.pngbin0 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/auto_on.pngbin0 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/auto_over.pngbin0 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/backgrnd.pngbin0 -> 10257 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/blank.gifbin0 -> 49 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/delay_link.pngbin0 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/exit_link.pngbin0 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/exit_over.pngbin0 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/fade_link.pngbin0 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/fade_on.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/fade_over.pngbin0 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/footer.jpgbin0 -> 4451 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/header.pngbin0 -> 27487 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/iepngfix.htc42
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/index.html100
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/last_link.pngbin0 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/last_over.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/list_link.pngbin0 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/loop_link.pngbin0 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/loop_on.pngbin0 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/loop_over.pngbin0 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/next_link.pngbin0 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/next_over.pngbin0 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/notes_link.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/notes_over.pngbin0 -> 789 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/opera.css7
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pause_link.pngbin0 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pause_on.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pause_over.pngbin0 -> 757 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back-handout-print.pngbin0 -> 5999 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back-index.pngbin0 -> 15049 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back-slide-print.pngbin0 -> 6487 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back_console.pngbin0 -> 14135 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/background-foot.pngbin0 -> 389 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/background-head.pngbin0 -> 373 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/background-main.pngbin0 -> 9066 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/favicon.icobin0 -> 318 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/logo.pngbin0 -> 1312 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/table-background.pngbin0 -> 460 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/table-header.pngbin0 -> 384 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pretty.css585
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/prev_link.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/prev_over.pngbin0 -> 748 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/print.css1
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/s5-core.css9
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/toggle_link.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/toggle_over.pngbin0 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/volume_link.pngbin0 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/zero_link.pngbin0 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/zero_over.pngbin0 -> 1004 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/s5-notes.html157
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/audio_link.pngbin0 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/audio_on.pngbin0 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/audio_over.pngbin0 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/auto_link.pngbin0 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/auto_on.pngbin0 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/auto_over.pngbin0 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/backgrnd.jpgbin0 -> 3648 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/backgrnd.pngbin0 -> 10257 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/blank.gifbin0 -> 49 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/chalks.pngbin0 -> 30926 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/delay_link.pngbin0 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/exit_link.pngbin0 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/exit_over.pngbin0 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/fade_link.pngbin0 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/fade_on.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/fade_over.pngbin0 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/footer.jpgbin0 -> 4451 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/footer.pngbin0 -> 34238 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/framing.css22
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/header.pngbin0 -> 49918 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/iepngfix.htc42
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/index.html100
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/last_link.pngbin0 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/last_over.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/list_link.pngbin0 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/loop_link.pngbin0 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/loop_on.pngbin0 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/loop_over.pngbin0 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/next_link.pngbin0 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/next_over.pngbin0 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/notes_link.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/notes_over.pngbin0 -> 789 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/opera.css7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/outline.css14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pause_link.pngbin0 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pause_on.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pause_over.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pretty.css162
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/prev_link.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/prev_over.pngbin0 -> 748 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/print.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/s5-core.css8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/toggle_link.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/toggle_over.pngbin0 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/triangle.pngbin0 -> 81350 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/volume_link.pngbin0 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/zero_link.pngbin0 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/zero_over.pngbin0 -> 1004 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/audio_link.pngbin0 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/audio_on.pngbin0 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/audio_over.pngbin0 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/auto_link.pngbin0 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/auto_on.pngbin0 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/auto_over.pngbin0 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/backgrnd.pngbin0 -> 12943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/bank.pngbin0 -> 41837 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/blank.gifbin0 -> 49 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/delay_link.pngbin0 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/exit_link.pngbin0 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/exit_over.pngbin0 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/fade_link.pngbin0 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/fade_on.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/fade_over.pngbin0 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/footer.jpgbin0 -> 4451 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/footer.pngbin0 -> 62136 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/framing.css22
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/header.pngbin0 -> 27487 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/iepngfix.htc42
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/index.html100
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/last_link.pngbin0 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/last_over.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/list_link.pngbin0 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/loop_link.pngbin0 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/loop_on.pngbin0 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/loop_over.pngbin0 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/next_link.pngbin0 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/next_over.pngbin0 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/notes_link.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/notes_over.pngbin0 -> 789 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/opera.css7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/outline.css14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pattern.pngbin0 -> 226 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pause_link.pngbin0 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pause_on.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pause_over.pngbin0 -> 757 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pretty.css163
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/prev_link.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/prev_over.pngbin0 -> 748 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/print.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/s5-core.css8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/sun.pngbin0 -> 32851 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/toggle_link.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/toggle_over.pngbin0 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/volume_link.pngbin0 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/zero_link.pngbin0 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/zero_over.pngbin0 -> 1004 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/LEEME.txt31
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/audio_link.pngbin0 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/audio_on.pngbin0 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/audio_over.pngbin0 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/auto_link.pngbin0 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/auto_on.pngbin0 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/auto_over.pngbin0 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/backgrnd.pngbin0 -> 10257 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/blank.gifbin0 -> 49 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/delay_link.pngbin0 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/exit_link.pngbin0 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/exit_over.pngbin0 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/fade_link.pngbin0 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/fade_on.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/fade_over.pngbin0 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/footer.jpgbin0 -> 4451 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/header.pngbin0 -> 27487 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/iepngfix.htc42
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/index.html100
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/last_link.pngbin0 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/last_over.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/list_link.pngbin0 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/loop_link.pngbin0 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/loop_on.pngbin0 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/loop_over.pngbin0 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/next_link.pngbin0 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/next_over.pngbin0 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/notes_link.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/notes_over.pngbin0 -> 789 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/opera.css7
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pause_link.pngbin0 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pause_on.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pause_over.pngbin0 -> 757 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/back-handout-print.pngbin0 -> 5999 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/back-slide-print.pngbin0 -> 6487 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/back_console.pngbin0 -> 14135 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/background-foot.pngbin0 -> 604 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/background-head.pngbin0 -> 605 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/background-main.pngbin0 -> 51209 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/favicon.icobin0 -> 1406 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/logo.pngbin0 -> 14675 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/table-background.pngbin0 -> 460 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/table-header.pngbin0 -> 309 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pretty.css583
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/prev_link.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/prev_over.pngbin0 -> 748 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/print.css1
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/s5-core.css9
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/toggle_link.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/toggle_over.pngbin0 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/volume_link.pngbin0 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/zero_link.pngbin0 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/zero_over.pngbin0 -> 1004 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/LEEME.txt36
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/audio_link.pngbin0 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/audio_on.pngbin0 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/audio_over.pngbin0 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/auto_link.pngbin0 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/auto_on.pngbin0 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/auto_over.pngbin0 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/backgrnd.pngbin0 -> 10257 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/blank.gifbin0 -> 49 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/delay_link.pngbin0 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/exit_link.pngbin0 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/exit_over.pngbin0 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/fade_link.pngbin0 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/fade_on.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/fade_over.pngbin0 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/footer.jpgbin0 -> 4451 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/header.pngbin0 -> 27487 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/iepngfix.htc42
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/index.html100
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/last_link.pngbin0 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/last_over.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/list_link.pngbin0 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/loop_link.pngbin0 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/loop_on.pngbin0 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/loop_over.pngbin0 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/next_link.pngbin0 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/next_over.pngbin0 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/notes_link.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/notes_over.pngbin0 -> 789 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/opera.css7
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pause_link.pngbin0 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pause_on.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pause_over.pngbin0 -> 757 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/background-foot.pngbin0 -> 1705 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/background-head.pngbin0 -> 1700 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/background-main.pngbin0 -> 358052 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/favicon.icobin0 -> 1150 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/logo.pngbin0 -> 13015 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/table-background.pngbin0 -> 460 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/table-header.pngbin0 -> 309 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pretty.css583
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/prev_link.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/prev_over.pngbin0 -> 748 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/print.css1
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/s5-core.css9
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/toggle_link.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/toggle_over.pngbin0 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/volume_link.pngbin0 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/zero_link.pngbin0 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/zero_over.pngbin0 -> 1004 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/LEEME.txt31
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/audio_link.pngbin0 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/audio_on.pngbin0 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/audio_over.pngbin0 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/auto_link.pngbin0 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/auto_on.pngbin0 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/auto_over.pngbin0 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/backgrnd.pngbin0 -> 10257 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/blank.gifbin0 -> 49 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/delay_link.pngbin0 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/exit_link.pngbin0 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/exit_over.pngbin0 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/fade_link.pngbin0 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/fade_on.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/fade_over.pngbin0 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/footer.jpgbin0 -> 4451 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/header.pngbin0 -> 27487 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/iepngfix.htc42
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/index.php102
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/last_link.pngbin0 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/last_over.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/list_link.pngbin0 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/loop_link.pngbin0 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/loop_on.pngbin0 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/loop_over.pngbin0 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/next_link.pngbin0 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/next_over.pngbin0 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/notes_link.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/notes_over.pngbin0 -> 789 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/opera.css7
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pause_link.pngbin0 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pause_on.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pause_over.pngbin0 -> 757 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/back-handout-print.pngbin0 -> 5999 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/back-slide-print.pngbin0 -> 6487 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/back_console.pngbin0 -> 14135 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-foot.pngbin0 -> 451 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-head.pngbin0 -> 450 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-head.xcfbin0 -> 6114 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-main.pngbin0 -> 92480 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/favicon.icobin0 -> 1406 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/logo.jpgbin0 -> 7126 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/table-background.pngbin0 -> 460 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/table-header.pngbin0 -> 344 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pretty.css525
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/prev_link.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/prev_over.pngbin0 -> 748 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/print.css1
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/s5-core.css9
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/slides.js2846
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/toggle_link.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/toggle_over.pngbin0 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/volume_link.pngbin0 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/zero_link.pngbin0 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/zero_over.pngbin0 -> 1004 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/LEEME.txt32
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/audio_link.pngbin0 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/audio_on.pngbin0 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/audio_over.pngbin0 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/auto_link.pngbin0 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/auto_on.pngbin0 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/auto_over.pngbin0 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/backgrnd.pngbin0 -> 10257 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/blank.gifbin0 -> 49 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/delay_link.pngbin0 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/exit_link.pngbin0 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/exit_over.pngbin0 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/fade_link.pngbin0 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/fade_on.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/fade_over.pngbin0 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/footer.jpgbin0 -> 4451 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/header.pngbin0 -> 27487 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/iepngfix.htc42
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/images/favicon.icobin0 -> 3638 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/index.html100
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/last_link.pngbin0 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/last_over.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/list_link.pngbin0 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/loop_link.pngbin0 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/loop_on.pngbin0 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/loop_over.pngbin0 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/next_link.pngbin0 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/next_over.pngbin0 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/notes_link.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/notes_over.pngbin0 -> 789 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/opera.css7
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pause_link.pngbin0 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pause_on.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pause_over.pngbin0 -> 757 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/background-foot.pngbin0 -> 269 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/background-head.pngbin0 -> 273 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/background-main.pngbin0 -> 14732 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/dot.pngbin0 -> 670 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/dot2.pngbin0 -> 422 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/h1icon.pngbin0 -> 2999 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/link.pngbin0 -> 447 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/logo.pngbin0 -> 15020 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/mail.pngbin0 -> 993 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pretty.css543
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/prev_link.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/prev_over.pngbin0 -> 748 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/print.css1
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/s5-core.css9
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/toggle_link.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/toggle_over.pngbin0 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/volume_link.pngbin0 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/zero_link.pngbin0 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/zero_over.pngbin0 -> 1004 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/audio_link.pngbin0 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/audio_on.pngbin0 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/audio_over.pngbin0 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/auto_link.pngbin0 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/auto_on.pngbin0 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/auto_over.pngbin0 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/bkgr.jpgbin0 -> 9069 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/blank.gifbin0 -> 49 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/bodybg.gifbin0 -> 10119 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/buzzsaw.gifbin0 -> 5087 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/buzzsaw.pngbin0 -> 4494 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/delay_link.pngbin0 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/exit_link.pngbin0 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/exit_over.pngbin0 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/fade_link.pngbin0 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/fade_on.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/fade_over.pngbin0 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/iepngfix.htc42
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/last_link.pngbin0 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/last_over.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/list_link.pngbin0 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/loop_link.pngbin0 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/loop_on.pngbin0 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/loop_over.pngbin0 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/next_link.pngbin0 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/next_over.pngbin0 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/notes_link.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/notes_over.pngbin0 -> 789 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/opera.css7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pause_link.pngbin0 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pause_on.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pause_over.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pretty.css1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/prev_link.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/prev_over.pngbin0 -> 748 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/print.css1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/s5-core.css9
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/toggle_link.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/toggle_over.pngbin0 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/volume_link.pngbin0 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/zero_link.pngbin0 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/zero_over.pngbin0 -> 1004 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/audio_link.pngbin0 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/audio_on.pngbin0 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/audio_over.pngbin0 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/auto_link.pngbin0 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/auto_on.pngbin0 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/auto_over.pngbin0 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/backgrnd.pngbin0 -> 10257 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/bodybg.gifbin0 -> 1373 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/button.gifbin0 -> 920 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/delay_link.pngbin0 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/exit_link.pngbin0 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/exit_over.pngbin0 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/fade_link.pngbin0 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/fade_on.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/fade_over.pngbin0 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/footer.jpgbin0 -> 4451 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/head.gifbin0 -> 1373 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/header.pngbin0 -> 27487 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/last_link.pngbin0 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/last_over.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/list_link.pngbin0 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/loop_link.pngbin0 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/loop_on.pngbin0 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/loop_over.pngbin0 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/next_link.pngbin0 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/next_over.pngbin0 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/notes_link.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/notes_over.pngbin0 -> 789 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/opera.css7
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pause_link.pngbin0 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pause_on.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pause_over.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pretty.css221
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/prev_link.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/prev_over.pngbin0 -> 748 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/print.css1
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/s5-core.css9
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/slide0h1.gifbin0 -> 3143 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/toggle.gifbin0 -> 1128 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/toggle_link.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/toggle_over.pngbin0 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/volume_link.pngbin0 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/zero_link.pngbin0 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/zero_over.pngbin0 -> 1004 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/syntax.php281
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/tbt/script.js207
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/tbt/style.css7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/tbt/syntax.php79
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/admin.php627
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/images/search.pngbin0 -> 733 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/af/lang.php14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/lang.php27
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/lang.php48
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/lang.php49
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/lang.php50
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/lang.php50
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/lang.php52
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/lang.php48
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/lang.php56
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/lang.php53
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/lang.php58
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/lang.php54
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/lang.php60
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/lang.php47
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/lang.php51
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/lang.php49
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/lang.php55
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/lang.php49
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/lang.php48
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hi/lang.php6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hr/lang.php7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/add.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/delete.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/intro.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/lang.php49
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/list.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id-ni/lang.php7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/lang.php47
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/is/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/is/lang.php18
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/lang.php54
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/lang.php50
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/lang.php50
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/add.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/delete.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/intro.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/lang.php48
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/list.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/lang.php48
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/lang.php50
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/lang.php49
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/lang.php53
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/lang.php56
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/lang.php50
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/lang.php57
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/lang.php50
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/lang.php52
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/lang.php56
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/add.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/delete.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/intro.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/lang.php50
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/list.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/lang.php20
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/lang.php48
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/lang.php58
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/lang.php47
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/lang.php51
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/lang.php52
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/lang.php52
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/lang.php51
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/script.js9
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/style.css20
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/ajax.js68
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/cookie.js112
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/drag.js99
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/edit.js442
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/events.js176
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/helpers.js146
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/index.html12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/index.js116
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/linkwiz.js282
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/media.js351
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/pngbehavior.htc53
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/script.js561
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/textselection.js226
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/toolbar.js252
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/tw-sack.js136
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/styles/feed.css63
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/styles/index.html12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/styles/style.css113
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/conf/default.php8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/conf/metadata.php9
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/design.css796
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/detail.php89
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/footer.html41
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/bullet.gifbin0 -> 50 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-cc.gifbin0 -> 1231 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-css.pngbin0 -> 299 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-donate.gifbin0 -> 187 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-dw.pngbin0 -> 427 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-php.gifbin0 -> 269 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-rss.pngbin0 -> 280 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-xhtml.pngbin0 -> 321 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/buttonshadow.pngbin0 -> 257 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/closed.gifbin0 -> 54 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/favicon.icobin0 -> 7406 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/inputshadow.pngbin0 -> 155 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/link_icon.gifbin0 -> 942 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/mail_icon.gifbin0 -> 918 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/open.gifbin0 -> 54 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/sidebar-border.gifbin0 -> 34 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/tocdot2.gifbin0 -> 810 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/windows.gifbin0 -> 223 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/layout.css79
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/main.php69
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/main_index.php135
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/media.css205
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/media.php54
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/mediaedit.php88
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/mediamanager.php44
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/mediaref.php50
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/print.css238
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/rtl.css119
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/sidebar.css189
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/sidebar.php9
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/sidebar_print.css9
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/style.ini67
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/tplfn_sidebar.php98
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/_admin.css43
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/_linkwiz.css68
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/design.css835
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/detail.php89
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/footer.html41
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/UWEB.pngbin0 -> 1138 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/UWEBshadow.pngbin0 -> 1123 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/bullet.gifbin0 -> 50 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-cc.gifbin0 -> 1231 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-css.pngbin0 -> 299 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-donate.gifbin0 -> 187 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-dw.pngbin0 -> 427 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-php.gifbin0 -> 207 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-rss.pngbin0 -> 280 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-xhtml.pngbin0 -> 321 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/buttonshadow.pngbin0 -> 257 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/closed.gifbin0 -> 54 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/favicon.icobin0 -> 7406 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/inputshadow.pngbin0 -> 155 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/link_icon.gifbin0 -> 942 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/mail_icon.gifbin0 -> 918 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/open.gifbin0 -> 54 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/tocdot2.gifbin0 -> 810 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/windows.gifbin0 -> 223 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/layout.css79
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/main.php27
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/main_index.php121
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/media.css205
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/mediamanager.php44
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/print.css238
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/rtl.css119
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/style.ini67
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/index.php68
-rw-r--r--mod/dokuwiki/views/default/dokuwiki/css.php12
-rw-r--r--mod/dokuwiki/views/default/dokuwiki/grouppage.php9
-rw-r--r--mod/dokuwiki/views/default/dokuwiki/index.php13
-rw-r--r--mod/dokuwiki/views/default/dokuwiki/metatags.php5
-rw-r--r--mod/dokuwiki/views/default/dokuwiki/sidebar.php10
-rw-r--r--mod/dokuwiki/views/default/object/dokuwiki.php19
-rw-r--r--mod/dokuwiki/views/default/river/dokuwiki.php17
3651 files changed, 244800 insertions, 0 deletions
diff --git a/mod/dokuwiki/AUTHORS b/mod/dokuwiki/AUTHORS
new file mode 100644
index 000000000..83b5cf583
--- /dev/null
+++ b/mod/dokuwiki/AUTHORS
@@ -0,0 +1,2 @@
+Pablo Martin <devel@lorea.cc>
+Sem <sembrestels@n-1.cc>
diff --git a/mod/dokuwiki/COPYING b/mod/dokuwiki/COPYING
new file mode 100755
index 000000000..60549be51
--- /dev/null
+++ b/mod/dokuwiki/COPYING
@@ -0,0 +1,340 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19yy name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/mod/dokuwiki/README b/mod/dokuwiki/README
new file mode 100644
index 000000000..40e1f52ec
--- /dev/null
+++ b/mod/dokuwiki/README
@@ -0,0 +1,31 @@
+Elgg dokuwiki integration
+------------------------
+
+Adds wikis for groups, and integrates the user and permission system of elgg.
+
+NOTES:
+------------------------
+- Although the goal is to be able to use vanilla dokuwiki with maybe some extensions,
+ at the moment we provide a slightly modified version.
+- doku.php globals are not known, and had to be redeclared.
+- $_REQUEST not defined... dont know the reason but its something of elgg. -> yes elgg is mangling it... **had to comment it on elgg core**
+- acl is hardcoded, added a getACL method on the auth class to be able to generate
+ the acl on the fly... also setACL and modified the admin plugin to be able to use the auth backend.
+- uses an 'elgg' auth module, and a special dokuwiki template.
+- dokuwiki defines the javascript $ symbol, which conflicts with elgg usage of jquery, so had to change all usage inside dokuwiki (just a few instances).
+
+LICENSE:
+-----------------------
+- elgg plugin uses GPLv2. dokuwiki and mods (all under vendors/dokuwiki) go with original license to original copyright holders.
+
+REPO:
+-----------------------
+You can follow code changes or submit tickets at: https://github.com/lorea/dokuwiki
+
+TODO:
+------------------------
+- Maybe just one big wiki for the whole site using namespaces?
+
+---
+devel@lorea.cc
+
diff --git a/mod/dokuwiki/index.php b/mod/dokuwiki/index.php
new file mode 100644
index 000000000..e4e039f51
--- /dev/null
+++ b/mod/dokuwiki/index.php
@@ -0,0 +1,17 @@
+<?php
+
+ elgg_push_breadcrumb(elgg_echo('dokuwiki'));
+ $offset = (int)get_input('offset', 0);
+ $title = elgg_echo("dokuwiki:title");
+ $content = elgg_list_entities(array('subtype'=>'dokuwiki', 'offset'=>$offset, 'types'=>'object','full_view'=>false));
+ $body = elgg_view_layout('content', array(
+ 'content' => $content,
+ 'title' => $title,
+ 'filter' => '',
+ ));
+
+ // Finally draw the page
+ echo elgg_view_page($title, $body);
+
+
+?>
diff --git a/mod/dokuwiki/languages/ca.php b/mod/dokuwiki/languages/ca.php
new file mode 100644
index 000000000..ca2c0df1e
--- /dev/null
+++ b/mod/dokuwiki/languages/ca.php
@@ -0,0 +1,18 @@
+<?php
+$language = array (
+ 'dokuwiki:wiki' => 'Wiki',
+ 'dokuwiki:title' => 'Wikis',
+ 'item:object:dokuwiki' => 'Wikis',
+ 'dokuwiki:wikifrom' => 'la wiki de %s',
+ 'dokuwiki:pages' => '%s pàgines',
+ 'dokuwiki:dokuwiki' => 'Wiki',
+ 'dokuwiki:group' => 'Wiki del group',
+ 'dokuwiki:userwiki' => 'La meva Wiki',
+ 'dokuwiki:sidebar' => 'Navegació wiki',
+ 'groups:enabledokuwiki' => 'Activar la wiki del grup',
+ 'groups:enabledokuwiki_frontpage' => 'Mostra la pàgina d\'inici de la wiki a la pàgina principal del grup (només si la wiki està activada)',
+ 'groups:enabledokuwiki_frontsidebar' => 'Mostra la barra lateral de la wiki a la pàgina principal del grup (només si la wiki està activada)',
+ 'dokuwiki' => 'Wikis',
+ 'dokuwiki:river:modified' => '%s ha modificat la pàgina %s el %s',
+);
+add_translation("ca", $language); \ No newline at end of file
diff --git a/mod/dokuwiki/languages/de.php b/mod/dokuwiki/languages/de.php
new file mode 100755
index 000000000..e951d0b41
--- /dev/null
+++ b/mod/dokuwiki/languages/de.php
@@ -0,0 +1,21 @@
+<?php
+
+// Mit dem translation browser generiert
+
+$german = array(
+ 'dokuwiki:wiki' => "Wiki" ,
+ 'dokuwiki:groupwiki' => "GruppenWiki" ,
+ 'dokuwiki:userwiki' => "Mein Wiki" ,
+ 'dokuwiki' => "Wikis" ,
+ 'item:object:dokuwiki' => "Wikis" ,
+ 'dokuwiki:title' => "Wikis" ,
+ 'dokuwiki:wikifrom' => "Wiki von %s" ,
+ 'dokuwiki:pages' => "Seiten von %s" ,
+ 'dokuwiki:dokuwiki' => "Wiki" ,
+ 'groups:enabledokuwiki' => "GruppenWiki einrichten" ,
+ 'dokuwiki:river:modified' => "%s hat die Seite %s im %s bearbeitet"
+);
+
+add_translation('de', $german);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/languages/en.php b/mod/dokuwiki/languages/en.php
new file mode 100755
index 000000000..20b7cb656
--- /dev/null
+++ b/mod/dokuwiki/languages/en.php
@@ -0,0 +1,32 @@
+<?php
+/**
+ * Elgg spotlight lorea
+ *
+ * @package
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author lorea
+ * @copyright lorea
+ * @link http://lorea.cc
+ */
+
+ $english = array(
+ "dokuwiki:wiki"=>'Wiki',
+ "dokuwiki:title"=>'Wikis',
+ "item:object:dokuwiki"=>'Wikis',
+ "dokuwiki:wikifrom"=>'%s wiki',
+ "dokuwiki:pages"=>'%s pages',
+ "dokuwiki:dokuwiki"=>'Wiki',
+ "dokuwiki:group"=>'Group wiki',
+ "dokuwiki:userwiki"=>'My Wiki',
+ "dokuwiki:sidebar" => 'Wiki navigation',
+ "groups:enabledokuwiki"=>'Enable group wiki',
+ "groups:enabledokuwiki_frontpage"=>'Show main wiki page in the group front page (only if wiki is enabled)',
+ "groups:enabledokuwiki_frontsidebar"=>'Show wiki sidebar in the group front page (only if wiki is enabled)',
+ "dokuwiki"=>'Wikis',
+
+ "dokuwiki:river:modified"=>'%s modified page %s on %s',
+ );
+
+ add_translation("en",$english);
+
+?>
diff --git a/mod/dokuwiki/languages/es.php b/mod/dokuwiki/languages/es.php
new file mode 100644
index 000000000..613d79ba6
--- /dev/null
+++ b/mod/dokuwiki/languages/es.php
@@ -0,0 +1,18 @@
+<?php
+$language = array (
+ 'dokuwiki:wiki' => 'Wiki',
+ 'dokuwiki:title' => 'Wikis',
+ 'item:object:dokuwiki' => 'Wikis',
+ 'dokuwiki:wikifrom' => 'Wiki %s',
+ 'dokuwiki:pages' => 'páginas %s',
+ 'dokuwiki:dokuwiki' => 'Wiki',
+ 'dokuwiki:group' => 'Wiki del grupo',
+ 'dokuwiki:userwiki' => 'Mi wiki',
+ 'dokuwiki:sidebar' => 'Navegación wiki',
+ 'groups:enabledokuwiki' => 'Activar wiki del grupo',
+ 'groups:enabledokuwiki_frontpage' => 'Muestra la página principal de la wiki en la página principal del grupo (sólo si la wiki está activada)',
+ 'groups:enabledokuwiki_frontsidebar' => 'Muestra la barra lateral de wiki en la página principal del grupo (sólo si la wiki está activada)',
+ 'dokuwiki' => 'Wikis',
+ 'dokuwiki:river:modified' => '%s ha modificado la página %s en %s',
+);
+add_translation("es", $language); \ No newline at end of file
diff --git a/mod/dokuwiki/languages/fr.php b/mod/dokuwiki/languages/fr.php
new file mode 100644
index 000000000..dcaa14c00
--- /dev/null
+++ b/mod/dokuwiki/languages/fr.php
@@ -0,0 +1,12 @@
+<?php
+
+// Generate By translationbrowser.
+
+$french = array(
+ 'dokuwiki:userwiki' => "Mon wiki" ,
+ 'groups:enabledokuwiki' => "Habiliter le wiki groupe"
+);
+
+add_translation('fr', $french);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/languages/gl.php b/mod/dokuwiki/languages/gl.php
new file mode 100644
index 000000000..ba67b6f32
--- /dev/null
+++ b/mod/dokuwiki/languages/gl.php
@@ -0,0 +1,23 @@
+<?php
+
+// Xerado por translationbrowser
+
+$galician = array(
+ 'dokuwiki:wiki' => "Wiki" ,
+ 'dokuwiki:groupwiki' => "Wiki do grupo" ,
+ 'dokuwiki:userwiki' => "A miña Wiki" ,
+ 'dokuwiki' => "Wikis" ,
+ 'item:object:dokuwiki' => "Wikis" ,
+ 'dokuwiki:title' => "Wikis" ,
+ 'dokuwiki:wikifrom' => "%s wiki" ,
+ 'dokuwiki:pages' => "%s páxinas" ,
+ 'dokuwiki:dokuwiki' => "Wiki" ,
+ 'groups:enabledokuwiki' => "Habilitar wiki do grupo" ,
+ 'dokuwiki:river:modified' => "%s modificou a páxina %s en %s" ,
+ 'groups:enabledokuwiki_frontpage' => "Amosa la wiki na portada do grupo" ,
+ 'groups:enabledokuwiki_frontsidebar' => "Amosa la barra da wiki na portada do grupo"
+);
+
+add_translation('gl', $galician);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/languages/pl.php b/mod/dokuwiki/languages/pl.php
new file mode 100755
index 000000000..e43e14526
--- /dev/null
+++ b/mod/dokuwiki/languages/pl.php
@@ -0,0 +1,21 @@
+<?php
+
+// Generate By translationbrowser.
+
+$polish = array(
+ 'dokuwiki:wiki' => "Wiki" ,
+ 'dokuwiki:title' => "Wiki" ,
+ 'item:object:dokuwiki' => "Wiki" ,
+ 'dokuwiki:wikifrom' => "%s wiki" ,
+ 'dokuwiki:pages' => "%s strony" ,
+ 'dokuwiki:dokuwiki' => "Wiki" ,
+ 'dokuwiki:groupwiki' => "Wiki Grupy" ,
+ 'dokuwiki:userwiki' => "Twoje Wiki" ,
+ 'groups:enabledokuwiki' => "WÅ‚Ä…cz wiki grupy" ,
+ 'dokuwiki' => "Wiki" ,
+ 'dokuwiki:river:modified' => "%s modyfikacja strony %s na %s"
+);
+
+add_translation('pl', $polish);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/languages/pt.php b/mod/dokuwiki/languages/pt.php
new file mode 100644
index 000000000..4c067cd52
--- /dev/null
+++ b/mod/dokuwiki/languages/pt.php
@@ -0,0 +1,23 @@
+<?php
+
+// Gerado pelo browser de tradução.
+
+$portuguese = array(
+ 'dokuwiki:wiki' => "Wiki" ,
+ 'dokuwiki:title' => "Wikis" ,
+ 'dokuwiki:wikifrom' => "%s Wiki" ,
+ 'dokuwiki:pages' => "%s páginas" ,
+ 'dokuwiki:dokuwiki' => "Wiki" ,
+ 'dokuwiki:groupwiki' => "Wiki" ,
+ 'dokuwiki:userwiki' => "Minha Wiki" ,
+ 'groups:enabledokuwiki' => "Habilitar Wiki do grupo" ,
+ 'dokuwiki' => "Wikis" ,
+ 'dokuwiki:river:modified' => "%s modificou a página %s em %s" ,
+ 'item:object:dokuwiki' => "Wikis" ,
+ 'groups:enabledokuwiki_frontpage' => "Mostrar a página wiki principal na página principal do grupo (só se a wiki estiver habilitada)" ,
+ 'groups:enabledokuwiki_frontsidebar' => "Mostrar a barra lateral de wiki na página principal do grupo (só se a wiki estiver habilitada)"
+);
+
+add_translation('pt', $portuguese);
+
+?>
diff --git a/mod/dokuwiki/lib/dokuwiki.php b/mod/dokuwiki/lib/dokuwiki.php
new file mode 100644
index 000000000..b49e4d4ee
--- /dev/null
+++ b/mod/dokuwiki/lib/dokuwiki.php
@@ -0,0 +1,60 @@
+<?php
+
+function current_dokuwiki_entity($create = true) {
+ $page_owner = elgg_get_page_owner_guid();
+ $user = elgg_get_logged_in_user_entity();
+ //error_log($page_owner->guid);
+ //error_log($user->guid);
+ if (!$page_owner)
+ $page_owner = 0;
+ $entities = elgg_get_entities(array('types' => 'object', 'subtypes' => 'dokuwiki', 'limit' => 1, 'owner_guid' => $page_owner));
+ if ($entities) {
+ $doku = $entities[0];
+ return $doku;
+ }
+ elseif ($user && $create) {
+ elgg_set_ignore_access(true);
+ $newdoku = new ElggObject();
+ $newdoku->access_id = ACCESS_PUBLIC;
+ $newdoku->owner_guid = $page_owner;
+ $newdoku->subtype = 'dokuwiki';
+ $newdoku->container_guid = $page_owner;
+ $newdoku->save();
+ $acl = array();
+ $acl[] = "# acl.auth.php";
+ $acl[] = '# <?php exit()?\>';
+ $acl[] = "* @ALL 0";
+ $acl[] = "* @user 1";
+ $acl[] = "* @member 8";
+ $acl[] = "* @admin 16";
+ $acl[] = "* @root 255";
+ $newdoku->wiki_acl = implode("\n", $acl)."\n";
+ elgg_set_ignore_access(false);
+ return $newdoku;
+ }
+}
+
+function dokuwiki_recurse_copy($src,$dst) {
+ $dir = opendir($src);
+ @mkdir($dst);
+ while(false !== ( $file = readdir($dir)) ) {
+ if (( $file != '.' ) && ( $file != '..' )) {
+ if ( is_dir($src . '/' . $file) ) {
+ dokuwiki_recurse_copy($src . '/' . $file,$dst . '/' . $file);
+ }
+ else {
+ copy($src . '/' . $file,$dst . '/' . $file);
+ }
+ }
+ }
+ closedir($dir);
+}
+
+function dokuwiki_create_datafolder($path) {
+ if (is_dir($path)) // if it exists must be already created
+ return;
+ mkdir($path, 0700, true);
+ $orig = elgg_get_plugins_path().'dokuwiki/vendors/dokuwiki/data';
+ dokuwiki_recurse_copy($orig, $path);
+
+}
diff --git a/mod/dokuwiki/manifest.xml b/mod/dokuwiki/manifest.xml
new file mode 100644
index 000000000..ed2969216
--- /dev/null
+++ b/mod/dokuwiki/manifest.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin_manifest xmlns="http://www.elgg.org/plugin_manifest/1.8">
+ <name>Dokuwiki</name>
+ <author>Lorea developers</author>
+ <version>1.8.0</version>
+ <category>content</category>
+ <description>Dokuwiki integration for Elgg</description>
+ <website>https://lorea.org/</website>
+ <copyright>(C) Lorea 2011-2013</copyright>
+ <license>GNU General Public License, version 2 or later</license>
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8</version>
+ </requires>
+ <requires>
+ <type>priority</type>
+ <priority>after</priority>
+ <plugin>groups</plugin>
+ </requires>
+ <activate_on_install>true</activate_on_install>
+</plugin_manifest>
diff --git a/mod/dokuwiki/start.php b/mod/dokuwiki/start.php
new file mode 100644
index 000000000..05c7c01f2
--- /dev/null
+++ b/mod/dokuwiki/start.php
@@ -0,0 +1,168 @@
+<?php
+/**
+ * Elgg dokuwiki plugin
+ *
+ * @package
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author lorea
+ * @copyright lorea
+ * @link http://lorea.cc
+ */
+
+elgg_register_event_handler('init','system','dokuwiki_init');
+
+function dokuwiki_init(){
+
+ elgg_register_library('elgg:dokuwiki', elgg_get_plugins_path().'dokuwiki/lib/dokuwiki.php');
+
+ elgg_register_entity_type('object','dokuwiki');
+ elgg_register_plugin_hook_handler('entity:icon:url', 'object', 'dokuwiki_icon_hook');
+ elgg_register_entity_url_handler('object', 'dokuwiki', 'dokuwiki_url');
+
+ // add block link to
+ elgg_register_plugin_hook_handler('register', 'menu:owner_block', 'dokuwiki_owner_block_menu');
+
+ elgg_register_page_handler('dokuwiki','dokuwiki_page_handler');
+
+ add_group_tool_option('dokuwiki',elgg_echo('groups:enabledokuwiki'),false);
+ add_group_tool_option('dokuwiki_frontsidebar',elgg_echo('groups:enabledokuwiki_frontsidebar'),false);
+ add_group_tool_option('dokuwiki_frontpage',elgg_echo('groups:enabledokuwiki_frontpage'),false);
+
+ elgg_extend_view('groups/profile/summary','dokuwiki/grouppage');
+ elgg_extend_view('groups/tool_latest','dokuwiki/sidebar');
+
+ // Extending CSS
+ elgg_extend_view('css/elgg', 'dokuwiki/css');
+
+ // add a site navigation item
+ $item = new ElggMenuItem('wiki', elgg_echo('dokuwiki:title'), 'dokuwiki/all');
+ elgg_register_menu_item('site', $item);
+
+ elgg_extend_view("page/elements/head", "dokuwiki/metatags");
+}
+
+ /**
+ * Dispatches dokuwiki pages.
+ * URLs take the form of
+ * All wikis: dokuwiki/all
+ * Group wiki: dokuwiki/<guid>
+ *
+ * @param array $page
+ * @return NULL
+ */
+ function dokuwiki_page_handler($page) {
+
+ elgg_load_library('elgg:dokuwiki');
+
+ if ($page[0] === "all") {
+ elgg_set_context("search");
+ include(elgg_get_plugins_path().'dokuwiki/index.php');
+ return true;
+ }
+
+ elgg_set_context("dokuwiki");
+
+ $dokuwiki_path = elgg_get_plugins_path().'dokuwiki/vendors/dokuwiki/';
+ $doku = current_dokuwiki_entity();
+ if (!$doku) // can fail if there is no user and wiki doesnt exist
+ return false;
+ $parsed_url = parse_url(elgg_get_site_url().'dokuwiki/');
+ $url_base = $parsed_url['path'];
+ if (is_numeric($page[0])) {
+ $entity_guid = $page[0];
+ $ent = get_entity($entity_guid);
+
+ if (($ent && $ent instanceof ElggGroup) && $ent->dokuwiki_enable !== 'yes') {
+ // wiki not activated for this group. bail out.
+ elgg_pop_context();
+ return false;
+ }
+ if ($ent && (/*$ent instanceof ElggUser ||*/ $ent instanceof ElggGroup)) {
+ elgg_set_page_owner_guid($entity_guid);
+ $data_path = elgg_get_data_path().'wikis/'.$entity_guid;
+ } else {
+ // can't see the group
+ elgg_pop_context();
+ return false;
+ }
+ $page = array_slice($page, 1); // pop first element
+ define('DOKU_REL', $url_base.$entity_guid."/");
+ define('DOKU_BASE', $url_base.$entity_guid."/");
+ define('DOKU_URL', elgg_get_site_url().'dokuwiki/'.$entity_guid."/");
+
+ }
+ else {
+ $data_path = elgg_get_data_path().'wiki';
+ define('DOKU_REL', $url_base);
+ define('DOKU_BASE', $url_base);
+ define('DOKU_URL', elgg_get_site_url().'dokuwiki/');
+ }
+ define('DOKU_INC', $dokuwiki_path);
+ define('DOKU_MEDIA', elgg_get_site_url().'mod/dokuwiki/vendors/dokuwiki/');
+ define('DOKU_CONF', $dokuwiki_path."conf/");
+
+ dokuwiki_create_datafolder($data_path);
+ define('DOKU_ELGGDATA',$data_path);
+ if (empty($page) || (count($page)==1 && $page[0] == 'acl')) {
+ $page = array('doku.php');
+ }
+ else if ((count($page)==1 && $page[0] == 'usermanager')) {
+ $page = array('doku.php');
+ }
+ else if ((count($page)==1 && $page[0] == 'plugin')) {
+ $page = array('doku.php');
+ }
+ else if ((count($page)==1 && $page[0] == 'config')) {
+ $page = array('doku.php');
+ }
+ else if ((count($page)==1 && $page[0] == 'revert')) {
+ $page = array('doku.php');
+ }
+ else if ((count($page)==1 && $page[0] == 'popularity')) {
+ $page = array('doku.php');
+ }
+ if (empty($page) || (count($page)==1 && !$page[0])) {
+ $page = array('doku.php');
+ }
+ $_SERVER['PHP_AUTH_USER'] = elgg_get_logged_in_user_entity()->username;
+ $_SERVER['PHP_AUTH_PW'] = elgg_get_logged_in_user_entity()->password;
+ if (count($page) == 1) {
+ $doku_body = elgg_view('dokuwiki/index',array('page'=>$page[0]));
+ echo $doku_body;
+ }
+ else {
+ // avoid inclusion over root
+ $dest = realpath($dokuwiki_path.implode("/",$page));
+ if (strpos($dest, $dokuwiki_path) == 0)
+ $doku_body = elgg_view('dokuwiki/index',array('page'=>implode("/",$page)));
+ echo $doku_body;
+ }
+ return true;
+ }
+
+ /**
+ * Add a menu item to an ownerblock
+ */
+ function dokuwiki_owner_block_menu($hook, $type, $return, $params) {
+ if (elgg_instanceof($params['entity'], 'group') && $params['entity']->dokuwiki_enable == "yes") {
+ $url = "dokuwiki/{$params['entity']->guid}/";
+ $item = new ElggMenuItem('dokuwiki', elgg_echo('dokuwiki:group'), $url);
+ $return[] = $item;
+ }
+ return $return;
+ }
+
+ function dokuwiki_icon_hook($hook, $entity_type, $returnvalue, $params) {
+ if ($hook == 'entity:icon:url' && $params['entity']->getSubtype() == 'dokuwiki') {
+ $owner = get_entity($params['entity']->container_guid);
+ if ($owner)
+ return $owner->getIcon($params['size']);
+ }
+ return $returnvalue;
+ }
+
+ function dokuwiki_url($entity) {
+ return elgg_get_site_url() . "dokuwiki/".$entity->container_guid;
+ }
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/COPYING b/mod/dokuwiki/vendors/dokuwiki/COPYING
new file mode 100644
index 000000000..d60c31a97
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/COPYING
@@ -0,0 +1,340 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/mod/dokuwiki/vendors/dokuwiki/README b/mod/dokuwiki/vendors/dokuwiki/README
new file mode 100644
index 000000000..a000bba2b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/README
@@ -0,0 +1,9 @@
+All documentation for DokuWiki is available online
+at http://www.dokuwiki.org/
+
+For Installation Instructions see
+http://www.dokuwiki.org/install
+
+DokuWiki - 2004-2009 (c) Andreas Gohr <andi@splitbrain.org>
+See COPYING and file headers for license info
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/VERSION b/mod/dokuwiki/vendors/dokuwiki/VERSION
new file mode 100644
index 000000000..157cc6c56
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/VERSION
@@ -0,0 +1 @@
+2009-12-25c "Lemming"
diff --git a/mod/dokuwiki/vendors/dokuwiki/bin/dwpage.php b/mod/dokuwiki/vendors/dokuwiki/bin/dwpage.php
new file mode 100755
index 000000000..f664770bf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/bin/dwpage.php
@@ -0,0 +1,378 @@
+#!/usr/bin/php
+<?php
+#------------------------------------------------------------------------------
+if ('cli' != php_sapi_name()) die();
+
+ini_set('memory_limit','128M');
+if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../').'/');
+require_once DOKU_INC.'inc/init.php';
+require_once DOKU_INC.'inc/common.php';
+require_once DOKU_INC.'inc/cliopts.php';
+
+#------------------------------------------------------------------------------
+function usage($action) {
+ switch ( $action ) {
+ case 'checkout':
+ print "Usage: dwpage.php [opts] checkout <wiki:page> [working_file]
+
+ Checks out a file from the repository, using the wiki id and obtaining
+ a lock for the page.
+ If a working_file is specified, this is where the page is copied to.
+ Otherwise defaults to the same as the wiki page in the current
+ working directory.
+
+ EXAMPLE
+ $ ./dwpage.php checkout wiki:syntax ./new_syntax.txt
+
+ OPTIONS
+ -h, --help=<action>: get help
+ -f: force obtaining a lock for the page (generally bad idea)
+";
+ break;
+ case 'commit':
+ print "Usage: dwpage.php [opts] -m \"Msg\" commit <working_file> <wiki:page>
+
+ Checks in the working_file into the repository using the specified
+ wiki id, archiving the previous version.
+
+ EXAMPLE
+ $ ./dwpage.php -m \"Some message\" commit ./new_syntax.txt wiki:syntax
+
+ OPTIONS
+ -h, --help=<action>: get help
+ -f: force obtaining a lock for the page (generally bad idea)
+ -t, trivial: minor change
+ -m (required): Summary message describing the change
+";
+ break;
+ case 'lock':
+ print "Usage: dwpage.php [opts] lock <wiki:page>
+
+ Obtains or updates a lock for a wiki page
+
+ EXAMPLE
+ $ ./dwpage.php lock wiki:syntax
+
+ OPTIONS
+ -h, --help=<action>: get help
+ -f: force obtaining a lock for the page (generally bad idea)
+";
+ break;
+ case 'unlock':
+ print "Usage: dwpage.php [opts] unlock <wiki:page>
+
+ Removes a lock for a wiki page.
+
+ EXAMPLE
+ $ ./dwpage.php unlock wiki:syntax
+
+ OPTIONS
+ -h, --help=<action>: get help
+ -f: force obtaining a lock for the page (generally bad idea)
+";
+ break;
+ default:
+ print "Usage: dwpage.php [opts] <action>
+
+ Utility to help command line Dokuwiki page editing, allow
+ pages to be checked out for editing then committed after changes
+
+ Normal operation would be;
+
+
+
+ ACTIONS
+ checkout: see $ dwpage.php --help=checkout
+ commit: see $ dwpage.php --help=commit
+ lock: see $ dwpage.php --help=lock
+
+ OPTIONS
+ -h, --help=<action>: get help
+ e.g. $ ./dwpage.php -hcommit
+ e.g. $ ./dwpage.php --help=commit
+";
+ break;
+ }
+}
+
+#------------------------------------------------------------------------------
+function getUser() {
+ $user = getenv('USER');
+ if (empty ($username)) {
+ $user = getenv('USERNAME');
+ } else {
+ return $user;
+ }
+ if (empty ($username)) {
+ $user = 'admin';
+ }
+ return $user;
+}
+
+#------------------------------------------------------------------------------
+function getSuppliedArgument($OPTS, $short, $long) {
+ $arg = $OPTS->get($short);
+ if ( is_null($arg) ) {
+ $arg = $OPTS->get($long);
+ }
+ return $arg;
+}
+
+#------------------------------------------------------------------------------
+function obtainLock($WIKI_ID) {
+
+ global $USERNAME;
+
+ if ( !file_exists(wikiFN($WIKI_ID)) ) {
+ fwrite( STDERR, "$WIKI_ID does not yet exist\n");
+ }
+
+ $_SERVER['REMOTE_USER'] = $USERNAME;
+ if ( checklock($WIKI_ID) ) {
+ fwrite( STDERR, "Page $WIKI_ID is already locked by another user\n");
+ exit(1);
+ }
+
+ lock($WIKI_ID);
+
+ $_SERVER['REMOTE_USER'] = '_'.$USERNAME.'_';
+
+ if ( checklock($WIKI_ID) != $USERNAME ) {
+
+ fwrite( STDERR, "Unable to obtain lock for $WIKI_ID\n" );
+ exit(1);
+
+ }
+}
+
+#------------------------------------------------------------------------------
+function clearLock($WIKI_ID) {
+
+ global $USERNAME ;
+
+ if ( !file_exists(wikiFN($WIKI_ID)) ) {
+ fwrite( STDERR, "$WIKI_ID does not yet exist\n");
+ }
+
+ $_SERVER['REMOTE_USER'] = $USERNAME;
+ if ( checklock($WIKI_ID) ) {
+ fwrite( STDERR, "Page $WIKI_ID is locked by another user\n");
+ exit(1);
+ }
+
+ unlock($WIKI_ID);
+
+ if ( file_exists(wikiLockFN($WIKI_ID)) ) {
+ fwrite( STDERR, "Unable to clear lock for $WIKI_ID\n" );
+ exit(1);
+ }
+
+}
+
+#------------------------------------------------------------------------------
+function deleteLock($WIKI_ID) {
+
+ $wikiLockFN = wikiLockFN($WIKI_ID);
+
+ if ( file_exists($wikiLockFN) ) {
+ if ( !unlink($wikiLockFN) ) {
+ fwrite( STDERR, "Unable to delete $wikiLockFN\n" );
+ exit(1);
+ }
+ }
+
+}
+
+#------------------------------------------------------------------------------
+$USERNAME = getUser();
+$CWD = getcwd();
+$SYSTEM_ID = '127.0.0.1';
+
+#------------------------------------------------------------------------------
+$OPTS = Doku_Cli_Opts::getOptions(
+ __FILE__,
+ 'h::fm:u:s:t',
+ array(
+ 'help==',
+ 'user=',
+ 'system=',
+ 'trivial',
+ )
+);
+
+if ( $OPTS->isError() ) {
+ print $OPTS->getMessage()."\n";
+ exit(1);
+}
+
+if ( $OPTS->has('h') or $OPTS->has('help') or !$OPTS->hasArgs() ) {
+ usage(getSuppliedArgument($OPTS,'h','help'));
+ exit(0);
+}
+
+if ( $OPTS->has('u') or $OPTS->has('user') ) {
+ $USERNAME = getSuppliedArgument($OPTS,'u','user');
+}
+
+if ( $OPTS->has('s') or $OPTS->has('system') ) {
+ $SYSTEM_ID = getSuppliedArgument($OPTS,'s','system');
+}
+
+#------------------------------------------------------------------------------
+switch ( $OPTS->arg(0) ) {
+
+ #----------------------------------------------------------------------
+ case 'checkout':
+
+ $WIKI_ID = $OPTS->arg(1);
+
+ if ( !$WIKI_ID ) {
+ fwrite( STDERR, "Wiki page ID required\n");
+ exit(1);
+ }
+
+ $WIKI_FN = wikiFN($WIKI_ID);
+
+ if ( !file_exists($WIKI_FN) ) {
+ fwrite( STDERR, "$WIKI_ID does not yet exist\n");
+ exit(1);
+ }
+
+ $TARGET_FN = $OPTS->arg(2);
+
+ if ( empty($TARGET_FN) ) {
+ $TARGET_FN = getcwd().'/'.basename($WIKI_FN);
+ }
+
+ if ( !file_exists(dirname($TARGET_FN)) ) {
+ fwrite( STDERR, "Directory ".dirname($TARGET_FN)." does not exist\n");
+ exit(1);
+ }
+
+ if ( stristr( realpath(dirname($TARGET_FN)), realpath($conf['datadir']) ) !== false ) {
+ fwrite( STDERR, "Attempt to check out file into data directory - not allowed\n");
+ exit(1);
+ }
+
+ if ( $OPTS->has('f') ) {
+ deleteLock($WIKI_ID);
+ }
+
+ obtainLock($WIKI_ID);
+
+ # Need to lock the file first?
+ if ( !copy($WIKI_FN, $TARGET_FN) ) {
+ fwrite( STDERR, "Unable to copy $WIKI_FN to $TARGET_FN\n");
+ clearLock($WIKI_ID);
+ exit(1);
+ }
+
+ print "$WIKI_ID > $TARGET_FN\n";
+ exit(0);
+
+ break;
+
+ #----------------------------------------------------------------------
+ case 'commit':
+
+ $TARGET_FN = $OPTS->arg(1);
+
+ if ( !$TARGET_FN ) {
+ fwrite( STDERR, "Target filename required\n");
+ exit(1);
+ }
+
+ if ( !file_exists($TARGET_FN) ) {
+ fwrite( STDERR, "$TARGET_FN does not exist\n");
+ exit(1);
+ }
+
+ if ( !is_readable($TARGET_FN) ) {
+ fwrite( STDERR, "Cannot read from $TARGET_FN\n");
+ exit(1);
+ }
+
+ $WIKI_ID = $OPTS->arg(2);
+
+ if ( !$WIKI_ID ) {
+ fwrite( STDERR, "Wiki page ID required\n");
+ exit(1);
+ }
+
+ if ( !$OPTS->has('m') ) {
+ fwrite( STDERR, "Summary message required\n");
+ exit(1);
+ }
+
+ if ( $OPTS->has('f') ) {
+ deleteLock($WIKI_ID);
+ }
+
+ $_SERVER['REMOTE_USER'] = $USERNAME;
+ if ( checklock($WIKI_ID) ) {
+ fwrite( STDERR, "$WIKI_ID is locked by another user\n");
+ exit(1);
+ }
+
+ obtainLock($WIKI_ID);
+
+ saveWikiText($WIKI_ID, file_get_contents($TARGET_FN), $OPTS->get('m'), $OPTS->has('t'));
+
+ clearLock($WIKI_ID);
+
+ exit(0);
+
+ break;
+
+ #----------------------------------------------------------------------
+ case 'lock':
+
+ $WIKI_ID = $OPTS->arg(1);
+
+ if ( !$WIKI_ID ) {
+ fwrite( STDERR, "Wiki page ID required\n");
+ exit(1);
+ }
+
+ if ( $OPTS->has('f') ) {
+ deleteLock($WIKI_ID);
+ }
+
+ obtainLock($WIKI_ID);
+
+ print "Locked : $WIKI_ID\n";
+ exit(0);
+
+ break;
+
+ #----------------------------------------------------------------------
+ case 'unlock':
+
+ $WIKI_ID = $OPTS->arg(1);
+
+ if ( !$WIKI_ID ) {
+ fwrite( STDERR, "Wiki page ID required\n");
+ exit(1);
+ }
+
+ if ( $OPTS->has('f') ) {
+ deleteLock($WIKI_ID);
+ } else {
+ clearLock($WIKI_ID);
+ }
+
+ print "Unlocked : $WIKI_ID\n";
+ exit(0);
+
+ break;
+
+ #----------------------------------------------------------------------
+ default:
+
+ fwrite( STDERR, "Invalid action ".$OPTS->arg(0)."\n" );
+ exit(1);
+
+ break;
+
+}
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/bin/indexer.php b/mod/dokuwiki/vendors/dokuwiki/bin/indexer.php
new file mode 100755
index 000000000..55f3608d5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/bin/indexer.php
@@ -0,0 +1,172 @@
+#!/usr/bin/php
+<?php
+if ('cli' != php_sapi_name()) die();
+
+ini_set('memory_limit','128M');
+if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../').'/');
+require_once(DOKU_INC.'inc/init.php');
+require_once(DOKU_INC.'inc/common.php');
+require_once(DOKU_INC.'inc/pageutils.php');
+require_once(DOKU_INC.'inc/search.php');
+require_once(DOKU_INC.'inc/indexer.php');
+require_once(DOKU_INC.'inc/auth.php');
+require_once(DOKU_INC.'inc/cliopts.php');
+session_write_close();
+
+// Version tag used to force rebuild on upgrade
+// Need to keep in sync with lib/exe/indexer.php
+if(!defined('INDEXER_VERSION')) define('INDEXER_VERSION', 2);
+
+// handle options
+$short_opts = 'hcuq';
+$long_opts = array('help', 'clear', 'update', 'quiet');
+$OPTS = Doku_Cli_Opts::getOptions(__FILE__,$short_opts,$long_opts);
+if ( $OPTS->isError() ) {
+ fwrite( STDERR, $OPTS->getMessage() . "\n");
+ _usage();
+ exit(1);
+}
+$CLEAR = false;
+$QUIET = false;
+foreach ($OPTS->options as $key => $val) {
+ switch ($key) {
+ case 'h':
+ case 'help':
+ _usage();
+ exit;
+ case 'c':
+ case 'clear':
+ $CLEAR = true;
+ break;
+ case 'q':
+ case 'quiet':
+ $QUIET = true;
+ break;
+ }
+}
+
+#------------------------------------------------------------------------------
+# Action
+
+if($CLEAR) _clearindex();
+_update();
+
+
+
+#------------------------------------------------------------------------------
+
+function _usage() {
+ print "Usage: indexer.php <options>
+
+ Updates the searchindex by indexing all new or changed pages
+ when the -c option is given the index is cleared first.
+
+ OPTIONS
+ -h, --help show this help and exit
+ -c, --clear clear the index before updating
+ -q, --quiet don't produce any output
+";
+}
+
+function _update(){
+ global $conf;
+
+ // upgrade to version 2
+ if (!@file_exists($conf['indexdir'].'/pageword.idx')){
+ _lock();
+ idx_upgradePageWords();
+ _unlock();
+ }
+
+ $data = array();
+ _quietecho("Searching pages... ");
+ search($data,$conf['datadir'],'search_allpages',array('skipacl' => true));
+ _quietecho(count($data)." pages found.\n");
+
+ foreach($data as $val){
+ _index($val['id']);
+ }
+}
+
+function _index($id){
+ global $CLEAR;
+
+ // if not cleared only update changed and new files
+ if(!$CLEAR){
+ $idxtag = metaFN($id,'.indexed');
+ if(@file_exists($idxtag)){
+ if(io_readFile($idxtag) >= INDEXER_VERSION){
+ $last = @filemtime(metaFN($id,'.indexed'));
+ if($last > @filemtime(wikiFN($id))) return;
+ }
+ }
+ }
+
+ _lock();
+ _quietecho("$id... ");
+ idx_addPage($id);
+ io_saveFile(metaFN($id,'.indexed'),INDEXER_VERSION);
+ _quietecho("done.\n");
+ _unlock();
+}
+
+/**
+ * lock the indexer system
+ */
+function _lock(){
+ global $conf;
+ $lock = $conf['lockdir'].'/_indexer.lock';
+ $said = false;
+ while(!@mkdir($lock, $conf['dmode'])){
+ if(time()-@filemtime($lock) > 60*5){
+ // looks like a stale lock - remove it
+ @rmdir($lock);
+ }else{
+ if($said){
+ _quietecho(".");
+ }else{
+ _quietecho("Waiting for lockfile (max. 5 min)");
+ $said = true;
+ }
+ sleep(15);
+ }
+ }
+ if($conf['dperm']) chmod($lock, $conf['dperm']);
+ if($said) _quietecho("\n");
+}
+
+/**
+ * unlock the indexer sytem
+ */
+function _unlock(){
+ global $conf;
+ $lock = $conf['lockdir'].'/_indexer.lock';
+ @rmdir($lock);
+}
+
+/**
+ * Clear all index files
+ */
+function _clearindex(){
+ global $conf;
+ _lock();
+ _quietecho("Clearing index... ");
+ io_saveFile($conf['indexdir'].'/page.idx','');
+ $dir = @opendir($conf['indexdir']);
+ if($dir!==false){
+ while(($f = readdir($dir)) !== false){
+ if(substr($f,-4)=='.idx' &&
+ (substr($f,0,1)=='i' || substr($f,0,1)=='w'))
+ @unlink($conf['indexdir']."/$f");
+ }
+ }
+ _quietecho("done.\n");
+ _unlock();
+}
+
+function _quietecho($msg) {
+ global $QUIET;
+ if(!$QUIET) echo $msg;
+}
+
+//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/bin/wantedpages.php b/mod/dokuwiki/vendors/dokuwiki/bin/wantedpages.php
new file mode 100755
index 000000000..30171fc15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/bin/wantedpages.php
@@ -0,0 +1,134 @@
+#!/usr/bin/php
+<?php
+if ('cli' != php_sapi_name()) die();
+
+#------------------------------------------------------------------------------
+ini_set('memory_limit','128M');
+if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../').'/');
+require_once DOKU_INC.'inc/init.php';
+require_once DOKU_INC.'inc/common.php';
+require_once DOKU_INC.'inc/search.php';
+require_once DOKU_INC.'inc/cliopts.php';
+
+#------------------------------------------------------------------------------
+function usage() {
+ print "Usage: wantedpages.php [wiki:namespace]
+
+ Outputs a list of wanted pages (pages which have
+ internal links but do not yet exist).
+
+ If the optional [wiki:namespace] is not provided,
+ defaults to the root wiki namespace
+
+ OPTIONS
+ -h, --help get help
+";
+}
+
+#------------------------------------------------------------------------------
+define ('DW_DIR_CONTINUE',1);
+define ('DW_DIR_NS',2);
+define ('DW_DIR_PAGE',3);
+
+#------------------------------------------------------------------------------
+function dw_dir_filter($entry, $basepath) {
+ if ($entry == '.' || $entry == '..' ) {
+ return DW_DIR_CONTINUE;
+ }
+ if ( is_dir($basepath . '/' . $entry) ) {
+ if ( strpos($entry, '_') === 0 ) {
+ return DW_DIR_CONTINUE;
+ }
+ return DW_DIR_NS;
+ }
+ if ( preg_match('/\.txt$/',$entry) ) {
+ return DW_DIR_PAGE;
+ }
+ return DW_DIR_CONTINUE;
+}
+
+#------------------------------------------------------------------------------
+function dw_get_pages($dir) {
+ static $trunclen = NULL;
+ if ( !$trunclen ) {
+ global $conf;
+ $trunclen = strlen($conf['datadir'].':');
+ }
+
+ if ( !is_dir($dir) ) {
+ fwrite( STDERR, "Unable to read directory $dir\n");
+ exit(1);
+ }
+
+ $pages = array();
+ $dh = opendir($dir);
+ while ( false !== ( $entry = readdir($dh) ) ) {
+ $status = dw_dir_filter($entry, $dir);
+ if ( $status == DW_DIR_CONTINUE ) {
+ continue;
+ } else if ( $status == DW_DIR_NS ) {
+ $pages = array_merge($pages, dw_get_pages($dir . '/' . $entry));
+ } else {
+ $page = array(
+ 'id' => pathID(substr($dir.'/'.$entry,$trunclen)),
+ 'file'=> $dir.'/'.$entry,
+ );
+ $pages[] = $page;
+ }
+ }
+ closedir($dh);
+ return $pages;
+}
+
+#------------------------------------------------------------------------------
+function dw_internal_links($page) {
+ global $conf;
+ $instructions = p_get_instructions(file_get_contents($page['file']));
+ $links = array();
+ $cns = getNS($page['id']);
+ $exists = false;
+ foreach($instructions as $ins){
+ if($ins[0] == 'internallink' || ($conf['camelcase'] && $ins[0] == 'camelcaselink') ){
+ $mid = $ins[1][0];
+ resolve_pageid($cns,$mid,$exists);
+ if ( !$exists ) {
+ list($mid) = explode('#',$mid); //record pages without hashs
+ $links[] = $mid;
+ }
+ }
+ }
+ return $links;
+}
+
+#------------------------------------------------------------------------------
+$OPTS = Doku_Cli_Opts::getOptions(__FILE__,'h',array('help'));
+
+if ( $OPTS->isError() ) {
+ fwrite( STDERR, $OPTS->getMessage() . "\n");
+ exit(1);
+}
+
+if ( $OPTS->has('h') or $OPTS->has('help') ) {
+ usage();
+ exit(0);
+}
+
+$START_DIR = $conf['datadir'];
+
+if ( $OPTS->numArgs() == 1 ) {
+ $START_DIR .= '/' . $OPTS->arg(0);
+}
+
+#------------------------------------------------------------------------------
+$WANTED_PAGES = array();
+
+foreach ( dw_get_pages($START_DIR) as $WIKI_PAGE ) {
+ $WANTED_PAGES = array_merge($WANTED_PAGES,dw_internal_links($WIKI_PAGE));
+}
+$WANTED_PAGES = array_unique($WANTED_PAGES);
+sort($WANTED_PAGES);
+
+foreach ( $WANTED_PAGES as $WANTED_PAGE ) {
+ print $WANTED_PAGE."\n";
+}
+exit(0);
diff --git a/mod/dokuwiki/vendors/dokuwiki/conf/acl.auth.php b/mod/dokuwiki/vendors/dokuwiki/conf/acl.auth.php
new file mode 100644
index 000000000..7678e918e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/conf/acl.auth.php
@@ -0,0 +1,24 @@
+# acl.auth.php
+# <?php exit()?>
+# Don't modify the lines above
+#
+# Access Control Lists
+#
+# Editing this file by hand shouldn't be necessary. Use the ACL
+# Manager interface instead.
+#
+# If your auth backend allows special char like spaces in groups
+# or user names you need to urlencode them (only chars <128, leave
+# UTF-8 multibyte chars as is)
+#
+# none 0
+# read 1
+# edit 2
+# create 4
+# upload 8
+# delete 16
+
+* @ALL 0
+* @user 1
+* @member 8
+* @admin 255
diff --git a/mod/dokuwiki/vendors/dokuwiki/conf/acl.auth.php.dist b/mod/dokuwiki/vendors/dokuwiki/conf/acl.auth.php.dist
new file mode 100644
index 000000000..14344d778
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/conf/acl.auth.php.dist
@@ -0,0 +1,21 @@
+# acl.auth.php
+# <?php exit()?>
+# Don't modify the lines above
+#
+# Access Control Lists
+#
+# Editing this file by hand shouldn't be necessary. Use the ACL
+# Manager interface instead.
+#
+# If your auth backend allows special char like spaces in groups
+# or user names you need to urlencode them (only chars <128, leave
+# UTF-8 multibyte chars as is)
+#
+# none 0
+# read 1
+# edit 2
+# create 4
+# upload 8
+# delete 16
+
+* @ALL 8
diff --git a/mod/dokuwiki/vendors/dokuwiki/conf/acronyms.conf b/mod/dokuwiki/vendors/dokuwiki/conf/acronyms.conf
new file mode 100644
index 000000000..13708d2df
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/conf/acronyms.conf
@@ -0,0 +1,143 @@
+# Acronyms.
+
+ACL Access Control List
+AFAICS As far as I can see
+AFAIK As far as I know
+AFAIR As far as I remember
+AJAX Asynchronous JavaScript and XML
+AIM AOL (America Online) Instant Messenger
+AOL America Online
+API Application Programming Interface
+ASAP As soon as possible
+ASCII American Standard Code for Information Interchange
+ASP Active Server Pages
+BTW By the way
+CGI Common Gateway Interface
+CMS Content Management System
+CSS Cascading Style Sheets
+CVS Concurrent Versions System
+DBA Database Administrator
+DHCP Dynamic Host Configuration Protocol
+DHTML Dynamic HyperText Markup Language
+DMCA Digital Millenium Copyright Act
+DNS Domain Name System
+DOM Document Object Model
+DTD Document Type Definition
+EOF End of file
+EOL End of line
+EOM End of message
+EOT End of text
+ESMTP Extended Simple Mail Transfer Protocol
+FAQ Frequently Asked Questions
+FDL GNU Free Documentation License
+FTP File Transfer Protocol
+FOSS Free & Open-Source Software
+FLOSS Free/Libre and Open Source Software
+FUD Fear, Uncertainty, and Doubt
+GB Gigabyte
+GHz Gigahertz
+GIF Graphics Interchange Format
+GPL GNU General Public License
+GUI Graphical User Interface
+HTML HyperText Markup Language
+HTTP Hyper Text Transfer Protocol
+IANAL I am not a lawyer (but)
+ICANN Internet Corporation for Assigned Names and Numbers
+ICQ I seek you (Instant Messenger)
+IE5 Internet Explorer 5
+IE6 Internet Explorer 6
+IE Internet Explorer
+IIRC If I remember correctly
+IIS Internet Information Services
+IMAP Internet Message Access Protocol
+IMHO In my humble opinion
+IMO In my opinion
+IOW In other words
+IRC Internet Relay Chat
+IRL In real life
+ISO International Organization for Standardization
+ISP Internet Service Provider
+JDK Java Development Kit
+JPEG Joint Photographics Experts Group
+JPG Joint Photographics Experts Group
+JS JavaScript
+KISS Keep it simple stupid
+LDAP Lightweight Directory Access Protocol
+LGPL GNU Lesser General Public License
+LOL Laughing out loud
+MathML Mathematical Markup Language
+MB Megabyte
+MHz Megahertz
+MIME Multipurpose Internet Mail Extension
+MIT Massachusetts Institute of Technology
+MML Mathematical Markup Language
+MP3 Motion Picture Experts Group Layer 3
+MPEG Motion Picture Experts Group
+MSDN Microsoft Developer Network
+MS Microsoft
+MSIE Microsoft Internet Explorer
+NIS Network Information Service
+NS4.7 Netscape 4.7
+NS4 Netscape 4
+NS6 Netscape 6
+NS7 Netscape 7
+OMG Oh my God
+OPML Outline Processor Markup Language
+OS Operating System
+OSS Open Source Software
+OTOH On the other hand
+P2P Peer to Peer
+PDA Personal Digital Assistant
+PDF Portable Document Format
+Perl Practical Extraction and Report Language
+PERL Practical Extraction and Report Language
+PHP Hypertext Preprocessor
+PICS Platform for Internet Content Selection
+PIN Personal Identification Number
+PITA Pain in the Ass
+PNG Portable Network Graphics
+POP3 Post Office Protocol 3
+POP Post Office Protocol
+QoS Quality of Service
+RAID Redundant Array of Inexpensive Disks
+RDF Resource Description Framework
+ROTFL Rolling on the floor laughing
+RPC Remote Procedure Call
+RSS Rich Site Summary
+RTFM Read The Fine Manual
+RTF Rich Text File
+SCSI Small Computer System Interface
+SDK Software Development Kit
+SGML Standard General Markup Language
+SMIL Synchronized Multimedia Integration Language
+SMTP Simple Mail Transfer Protocol
+SOAP Simple Object Access Protocol
+spec specification
+SQL Structured Query Language
+SSH Secure Shell
+SSI Server Side Includes
+SSL Secure Sockets Layer
+SVG Scalable Vector Graphics
+TIA Thanks in advance
+TIFF Tagged Image File Format
+TLD Top Level Domain
+TOC Table of Contents
+URI Uniform Resource Identifier
+URL Uniform Resource Locator
+URN Uniform Resource Name
+VBA Visual Basic for Applications
+VB Visual Basic
+W3C World Wide Web Consortium
+WAN Wide Area Network
+WAP Wireless Access Protocol
+WML Wireless Markup Language
+WTF? What the f***
+WWW World Wide Web
+WYSIWYG What You See Is What You Get
+XHTML Extensible HyperText Markup Language
+XML Extensible Markup Language
+XSD XML (Extensible Markup Language) Schema Definition
+XSL Extensible Stylesheet Language
+XSLT Extensible Stylesheet Language Transformations
+XUL XML User Interface Language
+YMMV Your mileage may vary
diff --git a/mod/dokuwiki/vendors/dokuwiki/conf/dokuwiki.php b/mod/dokuwiki/vendors/dokuwiki/conf/dokuwiki.php
new file mode 100644
index 000000000..74d95147e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/conf/dokuwiki.php
@@ -0,0 +1,156 @@
+<?php
+/**
+ * This is DokuWiki's Main Configuration file
+ *
+ * All the default values are kept here, you should not modify it but use
+ * a local.php file instead to override the settings from here.
+ *
+ * This is a piece of PHP code so PHP syntax applies!
+ *
+ * For help with the configuration see http://www.splitbrain.org/dokuwiki/wiki:config
+ */
+
+
+/* Datastorage and Permissions */
+
+$conf['fmode'] = 0644; //set file creation mode
+$conf['dmode'] = 0755; //set directory creation mode
+$conf['lang'] = 'en'; //your language
+$conf['basedir'] = ''; //absolute dir from serveroot - blank for autodetection
+$conf['baseurl'] = ''; //URL to server including protocol - blank for autodetect
+$conf['savedir'] = './data'; //where to store all the files
+$conf['allowdebug'] = 0; //allow debug output, enable if needed 0|1
+
+/* Display Options */
+
+$conf['start'] = 'start'; //name of start page
+$conf['title'] = 'DokuWiki'; //what to show in the title
+$conf['template'] = 'default'; //see lib/tpl directory
+$conf['license'] = 'cc-by-nc-sa'; //see conf/license.php
+$conf['fullpath'] = 0; //show full path of the document or relative to datadir only? 0|1
+$conf['recent'] = 20; //how many entries to show in recent
+$conf['breadcrumbs'] = 10; //how many recent visited pages to show
+$conf['youarehere'] = 0; //show "You are here" navigation? 0|1
+$conf['typography'] = 1; //smartquote conversion 0=off, 1=doublequotes, 2=all quotes
+$conf['htmlok'] = 0; //may raw HTML be embedded? This may break layout and XHTML validity 0|1
+$conf['phpok'] = 0; //may PHP code be embedded? Never do this on the internet! 0|1
+$conf['dformat'] = '%Y/%m/%d %H:%M'; //dateformat accepted by PHPs strftime() function
+$conf['signature'] = ' --- //[[@MAIL@|@NAME@]] @DATE@//'; //signature see wiki:config for details
+$conf['toptoclevel'] = 1; //Level starting with and below to include in AutoTOC (max. 5)
+$conf['tocminheads'] = 3; //Minimum amount of headlines that determines if a TOC is built
+$conf['maxtoclevel'] = 3; //Up to which level include into AutoTOC (max. 5)
+$conf['maxseclevel'] = 3; //Up to which level create editable sections (max. 5)
+$conf['camelcase'] = 0; //Use CamelCase for linking? (I don't like it) 0|1
+$conf['deaccent'] = 1; //deaccented chars in pagenames (1) or romanize (2) or keep (0)?
+$conf['useheading'] = 0; //use the first heading in a page as its name
+$conf['refcheck'] = 1; //check for references before deleting media files
+$conf['refshow'] = 0; //how many references should be shown, 5 is a good value
+$conf['showuseras'] = 'loginname'; // 'loginname' users login name
+ // 'username' users full name
+ // 'email' e-mail address (will be obfuscated as per mailguard)
+ // 'email_link' e-mail address as a mailto: link (obfuscated)
+
+/* Antispam Features */
+
+$conf['usewordblock']= 1; //block spam based on words? 0|1
+$conf['indexdelay'] = 60*60*24*5; //allow indexing after this time (seconds) default is 5 days
+$conf['relnofollow'] = 1; //use rel="nofollow" for external links?
+$conf['mailguard'] = 'hex'; //obfuscate email addresses against spam harvesters?
+ //valid entries are:
+ // 'visible' - replace @ with [at], . with [dot] and - with [dash]
+ // 'hex' - use hex entities to encode the mail address
+ // 'none' - do not obfuscate addresses
+$conf['iexssprotect']= 1; // check for JavaScript and HTML in uploaded files 0|1
+
+/* Authentication Options - read http://www.splitbrain.org/dokuwiki/wiki:acl */
+
+$conf['useacl'] = 0; //Use Access Control Lists to restrict access?
+$conf['autopasswd'] = 1; //autogenerate passwords and email them to user
+$conf['authtype'] = 'plain'; //which authentication backend should be used
+$conf['passcrypt'] = 'smd5'; //Used crypt method (smd5,md5,sha1,ssha,crypt,mysql,my411)
+$conf['defaultgroup']= 'user'; //Default groups new Users are added to
+$conf['superuser'] = '!!not set!!'; //The admin can be user or @group or comma separated list user1,@group1,user2
+$conf['manager'] = '!!not set!!'; //The manager can be user or @group or comma separated list user1,@group1,user2
+$conf['profileconfirm'] = 1; //Require current password to confirm changes to user profile
+$conf['disableactions'] = ''; //comma separated list of actions to disable
+$conf['sneaky_index'] = 0; //check for namespace read permission in index view (0|1) (1 might cause unexpected behavior)
+$conf['auth_security_timeout'] = 900; //time (seconds) auth data is considered valid, set to 0 to recheck on every page view
+$conf['securecookie'] = 1; //never send HTTPS cookies via HTTP
+
+$conf['xmlrpc'] = 0; //Enable/disable XML-RPC interface
+$conf['xmlrpcuser'] = '!!not set!!'; //Restrict XML-RPC access to this groups/users
+
+/* Advanced Options */
+
+$conf['updatecheck'] = 1; //automatically check for new releases?
+$conf['userewrite'] = 0; //this makes nice URLs: 0: off 1: .htaccess 2: internal
+$conf['useslash'] = 0; //use slash instead of colon? only when rewrite is on
+$conf['usedraft'] = 1; //automatically save a draft while editing (0|1)
+$conf['sepchar'] = '_'; //word separator character in page names; may be a
+ // letter, a digit, '_', '-', or '.'.
+$conf['canonical'] = 0; //Should all URLs use full canonical http://... style?
+$conf['autoplural'] = 0; //try (non)plural form of nonexisting files?
+$conf['compression'] = 'gz'; //compress old revisions: (0: off) ('gz': gnuzip) ('bz2': bzip)
+ // bz2 generates smaller files, but needs more cpu-power
+$conf['cachetime'] = 60*60*24; //maximum age for cachefile in seconds (defaults to a day)
+$conf['locktime'] = 15*60; //maximum age for lockfiles (defaults to 15 minutes)
+$conf['fetchsize'] = 0; //maximum size (bytes) fetch.php may download from extern, disabled by default
+$conf['notify'] = ''; //send change info to this email (leave blank for nobody)
+$conf['registernotify'] = ''; //send info about newly registered users to this email (leave blank for nobody)
+$conf['mailfrom'] = ''; //use this email when sending mails
+$conf['gzip_output'] = 0; //use gzip content encodeing for the output xhtml (if allowed by browser)
+$conf['gdlib'] = 2; //the GDlib version (0, 1 or 2) 2 tries to autodetect
+$conf['im_convert'] = ''; //path to ImageMagicks convert (will be used instead of GD)
+$conf['jpg_quality'] = '70'; //quality of compression when scaling jpg images (0-100)
+$conf['subscribers'] = 0; //enable change notice subscription support
+$conf['compress'] = 1; //Strip whitespaces and comments from Styles and JavaScript? 1|0
+$conf['hidepages'] = ''; //Regexp for pages to be skipped from RSS, Search and Recent Changes
+$conf['send404'] = 0; //Send a HTTP 404 status for non existing pages?
+$conf['sitemap'] = 0; //Create a google sitemap? How often? In days.
+$conf['rss_type'] = 'rss1'; //type of RSS feed to provide, by default:
+ // 'rss' - RSS 0.91
+ // 'rss1' - RSS 1.0
+ // 'rss2' - RSS 2.0
+ // 'atom' - Atom 0.3
+ // 'atom1' - Atom 1.0
+$conf['rss_linkto'] = 'diff'; //what page RSS entries link to:
+ // 'diff' - page showing revision differences
+ // 'page' - the revised page itself
+ // 'rev' - page showing all revisions
+ // 'current' - most recent revision of page
+$conf['rss_content'] = 'abstract'; // what to put in the items by deafult?
+ // 'abstract' - plain text, first paragraph or so
+ // 'diff' - plain text unified diff wrapped in <pre> tags
+ // 'htmldiff' - diff as HTML table
+ // 'html' - the full page rendered in XHTML
+$conf['rss_update'] = 5*60; //Update the RSS feed every n seconds (defaults to 5 minutes)
+$conf['recent_days'] = 7; //How many days of recent changes to keep. (days)
+$conf['rss_show_summary'] = 1; //Add revision summary to title? 0|1
+$conf['broken_iua'] = 0; //Platform with broken ignore_user_abort (IIS+CGI) 0|1
+$conf['xsendfile'] = 0; //Use X-Sendfile (1 = lighttpd, 2 = standard)
+$conf['renderer_xhtml'] = 'xhtml'; //renderer to use for main page generation
+$conf['rememberme'] = 1; //Enable/disable remember me on login
+
+//Set target to use when creating links - leave empty for same window
+$conf['target']['wiki'] = '';
+$conf['target']['interwiki'] = '';
+$conf['target']['extern'] = '';
+$conf['target']['media'] = '';
+$conf['target']['windows'] = '';
+
+//Proxy setup - if your Server needs a proxy to access the web set these
+$conf['proxy']['host'] = '';
+$conf['proxy']['port'] = '';
+$conf['proxy']['user'] = '';
+$conf['proxy']['pass'] = '';
+$conf['proxy']['ssl'] = 0;
+
+/* Safemode Hack */
+
+$conf['safemodehack'] = 0; //read http://www.dokuwiki.org/config:safemodehack !
+$conf['ftp']['host'] = 'localhost';
+$conf['ftp']['port'] = '21';
+$conf['ftp']['user'] = 'user';
+$conf['ftp']['pass'] = 'password';
+$conf['ftp']['root'] = '/home/user/htdocs';
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/conf/entities.conf b/mod/dokuwiki/vendors/dokuwiki/conf/entities.conf
new file mode 100644
index 000000000..be9ed6d40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/conf/entities.conf
@@ -0,0 +1,22 @@
+# Typography replacements
+#
+# Order does matter!
+#
+# You can use HTML entities here, but it is not recomended because it may break
+# non-HTML renderers. Use UTF-8 chars directly instead.
+
+<-> ↔
+-> →
+<- â†
+<=> ⇔
+=> ⇒
+<= â‡
+>> »
+<< «
+--- —
+-- –
+(c) ©
+(tm) â„¢
+(r) ®
+... …
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/conf/interwiki.conf b/mod/dokuwiki/vendors/dokuwiki/conf/interwiki.conf
new file mode 100644
index 000000000..0e855f626
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/conf/interwiki.conf
@@ -0,0 +1,125 @@
+# Each URL may contain one of the placeholders {URL} or {NAME}
+# {URL} is replaced by the URL encoded representation of the wikiname
+# this is the right thing to do in most cases
+# {NAME} this is replaced by the wikiname as given in the document
+# no further encoding is done
+# If no placeholder is defined the urlencoded name is appended to the URL
+
+# You can add more InterWiki shortcuts here.
+
+wp http://en.wikipedia.org/wiki/{NAME}
+wpfr http://fr.wikipedia.org/wiki/{NAME}
+wpde http://de.wikipedia.org/wiki/{NAME}
+wpes http://es.wikipedia.org/wiki/{NAME}
+wppl http://pl.wikipedia.org/wiki/{NAME}
+wpjp http://ja.wikipedia.org/wiki/{NAME}
+wpmeta http://meta.wikipedia.org/wiki/{NAME}
+doku http://www.dokuwiki.org/
+dokubug http://bugs.splitbrain.org/index.php?do=details&amp;task_id=
+rfc http://www.cs.ccu.edu.tw/~chm91u/rfc2html.php?in=
+man http://man.cx/
+amazon http://www.amazon.com/exec/obidos/ASIN/{URL}/splitbrain-20/
+amazon.de http://www.amazon.de/exec/obidos/ASIN/{URL}/splitbrain-21/
+amazon.uk http://www.amazon.co.uk/exec/obidos/ASIN/
+phpfn http://www.php.net/{NAME}
+coral http://{HOST}.{PORT}.nyud.net:8090/{PATH}?{QUERY}
+freecache http://freecache.org/{NAME}
+sb http://www.splitbrain.org/go/
+google.de http://www.google.de/search?q=
+go http://www.google.com/search?q={URL}&amp;btnI=lucky
+
+# Standards from http://usemod.com/intermap.txt follow
+
+AbbeNormal http://www.ourpla.net/cgi-bin/pikie.cgi?
+AcadWiki http://xarch.tu-graz.ac.at/autocad/wiki/
+Acronym http://www.acronymfinder.com/af-query.asp?String=exact&amp;Acronym=
+Advogato http://www.advogato.org/
+AIWiki http://www.ifi.unizh.ch/ailab/aiwiki/aiw.cgi?
+ALife http://news.alife.org/wiki/index.php?
+AndStuff http://andstuff.org/wiki.php?
+Annotation http://bayle.stanford.edu/crit/nph-med.cgi/
+AnnotationWiki http://www.seedwiki.com/page.cfm?wikiid=368&amp;doc=
+AwarenessWiki http://taoriver.net/aware/
+BenefitsWiki http://www.benefitslink.com/cgi-bin/wiki.cgi?
+BridgesWiki http://c2.com/w2/bridges/
+C2find http://c2.com/cgi/wiki?FindPage&amp;value=
+Cache http://www.google.com/search?q=cache:
+CLiki http://ww.telent.net/cliki/
+CmWiki http://www.ourpla.net/cgi-bin/wiki.pl?
+CreationMatters http://www.ourpla.net/cgi-bin/wiki.pl?
+DejaNews http://www.deja.com/=dnc/getdoc.xp?AN=
+DeWikiPedia http://www.wikipedia.de/wiki.cgi?
+Dictionary http://www.dict.org/bin/Dict?Database=*&amp;Form=Dict1&amp;Strategy=*&amp;Query=
+DiveIntoOsx http://diveintoosx.org/
+DocBook http://docbook.org/wiki/moin.cgi/
+DolphinWiki http://www.object-arts.com/wiki/html/Dolphin/
+EfnetCeeWiki http://purl.net/wiki/c/
+EfnetCppWiki http://purl.net/wiki/cpp/
+EfnetPythonWiki http://purl.net/wiki/python/
+EfnetXmlWiki http://purl.net/wiki/xml/
+EljWiki http://elj.sourceforge.net/phpwiki/index.php/
+EmacsWiki http://www.emacswiki.org/cgi-bin/wiki.pl?
+FinalEmpire http://final-empire.sourceforge.net/cgi-bin/wiki.pl?
+Foldoc http://www.foldoc.org/foldoc/foldoc.cgi?
+FoxWiki http://fox.wikis.com/wc.dll?Wiki~
+FreeBSDman http://www.FreeBSD.org/cgi/man.cgi?apropos=1&amp;query=
+Google http://www.google.com/search?q=
+GoogleGroups http://groups.google.com/groups?q=
+GreenCheese http://www.greencheese.org/
+HammondWiki http://www.dairiki.org/HammondWiki/index.php3?
+Haribeau http://wiki.haribeau.de/cgi-bin/wiki.pl?
+IAWiki http://www.IAwiki.net/
+IMDB http://us.imdb.com/Title?
+JargonFile http://sunir.org/apps/meta.pl?wiki=JargonFile&amp;redirect=
+JiniWiki http://www.cdegroot.com/cgi-bin/jini?
+JspWiki http://www.ecyrd.com/JSPWiki/Wiki.jsp?page=
+KmWiki http://www.voght.com/cgi-bin/pywiki?
+KnowHow http://www2.iro.umontreal.ca/~paquetse/cgi-bin/wiki.cgi?
+LanifexWiki http://opt.lanifex.com/cgi-bin/wiki.pl?
+LegoWiki http://www.object-arts.com/wiki/html/Lego-Robotics/
+LinuxWiki http://www.linuxwiki.de/
+LugKR http://lug-kr.sourceforge.net/cgi-bin/lugwiki.pl?
+MathSongsWiki http://SeedWiki.com/page.cfm?wikiid=237&amp;doc=
+MbTest http://www.usemod.com/cgi-bin/mbtest.pl?
+MeatBall http://www.usemod.com/cgi-bin/mb.pl?
+MetaWiki http://sunir.org/apps/meta.pl?
+MetaWikiPedia http://meta.wikipedia.com/wiki/
+MoinMoin http://purl.net/wiki/moin/
+MuWeb http://www.dunstable.com/scripts/MuWebWeb?
+NetVillage http://www.netbros.com/?
+OpenWiki http://openwiki.com/?
+OrgPatterns http://www.bell-labs.com/cgi-user/OrgPatterns/OrgPatterns?
+PangalacticOrg http://www.pangalactic.org/Wiki/
+PersonalTelco http://www.personaltelco.net/index.cgi/
+PhpWiki http://phpwiki.sourceforge.net/phpwiki/index.php?
+Pikie http://pikie.darktech.org/cgi/pikie?
+PPR http://c2.com/cgi/wiki?
+PurlNet http://purl.oclc.org/NET/
+PythonInfo http://www.python.org/cgi-bin/moinmoin/
+PythonWiki http://www.pythonwiki.de/
+PyWiki http://www.voght.com/cgi-bin/pywiki?
+SeaPig http://www.seapig.org/
+SeattleWireless http://seattlewireless.net/?
+SenseisLibrary http://senseis.xmp.net/?
+Shakti http://cgi.algonet.se/htbin/cgiwrap/pgd/ShaktiWiki/
+SourceForge http://sourceforge.net/{NAME}
+Squeak http://minnow.cc.gatech.edu/squeak/
+StrikiWiki http://ch.twi.tudelft.nl/~mostert/striki/teststriki.pl?
+SVGWiki http://www.protocol7.com/svg-wiki/default.asp?
+Tavi http://tavi.sourceforge.net/index.php?
+TmNet http://www.technomanifestos.net/?
+TMwiki http://www.EasyTopicMaps.com/?page=
+TWiki http://twiki.org/cgi-bin/view/{NAME}
+TwistedWiki http://purl.net/wiki/twisted/
+Unreal http://wiki.beyondunreal.com/wiki/
+UseMod http://www.usemod.com/cgi-bin/wiki.pl?
+VisualWorks http://wiki.cs.uiuc.edu/VisualWorks/
+WebDevWikiNL http://www.promo-it.nl/WebDevWiki/index.php?page=
+WebSeitzWiki http://webseitz.fluxent.com/wiki/
+Why http://clublet.com/c/c/why?
+Wiki http://c2.com/cgi/wiki?
+WikiPedia http://www.wikipedia.com/wiki/
+WikiWorld http://WikiWorld.com/wiki/index.php/
+YpsiEyeball http://sknkwrks.dyndns.org:1957/writewiki/wiki.pl?
+ZWiki http://www.zwiki.org/
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/conf/license.php b/mod/dokuwiki/vendors/dokuwiki/conf/license.php
new file mode 100644
index 000000000..9a753baa7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/conf/license.php
@@ -0,0 +1,40 @@
+<?php
+/**
+ * This file defines multiple available licenses you can license your
+ * wiki contents under. Do not change this file, but create a
+ * license.local.php instead.
+ */
+
+$license['cc-by'] = array(
+ 'name' => 'CC Attribution 3.0 Unported',
+ 'url' => 'http://creativecommons.org/licenses/by/3.0/',
+);
+$license['cc-by-nc'] = array(
+ 'name' => 'CC Attribution-Noncommercial 3.0 Unported',
+ 'url' => 'http://creativecommons.org/licenses/by-nc/3.0/',
+);
+$license['cc-by-nc-nd'] = array(
+ 'name' => 'CC Attribution-Noncommercial-No Derivative Works 3.0 Unported',
+ 'url' => 'http://creativecommons.org/licenses/by-nc-nd/3.0/',
+);
+$license['cc-by-nc-sa'] = array(
+ 'name' => 'CC Attribution-Noncommercial-Share Alike 3.0 Unported',
+ 'url' => 'http://creativecommons.org/licenses/by-nc-sa/3.0/',
+);
+$license['cc-by-nd'] = array(
+ 'name' => 'CC Attribution-No Derivative Works 3.0 Unported',
+ 'url' => 'cc-by-nd',
+);
+$license['cc-by-sa'] = array(
+ 'name' => 'CC Attribution-Share Alike 3.0 Unported',
+ 'url' => 'http://creativecommons.org/licenses/by-sa/3.0/',
+);
+$license['publicdomain'] = array(
+ 'name' => 'Public Domain',
+ 'url' => 'http://creativecommons.org/licenses/publicdomain/',
+);
+$license['gnufdl'] = array(
+ 'name' => 'GNU Free Documentation License 1.2',
+ 'url' => 'http://www.gnu.org/licenses/fdl-1.2.html',
+);
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/conf/local.php b/mod/dokuwiki/vendors/dokuwiki/conf/local.php
new file mode 100644
index 000000000..74334812b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/conf/local.php
@@ -0,0 +1,43 @@
+<?php
+/**
+ * This is an example of how a local.php coul look like.
+ * Simply copy the options you want to change from dokuwiki.php
+ * to this file and change them.
+ *
+ * When using the installer, a correct local.php file be generated for
+ * you automatically.
+ */
+
+$conf['title'] = 'Elgg Wiki'; //what to show in the title
+$conf['basedir'] = ''; //absolute dir from serveroot - blank for autodetection
+$conf['baseurl'] = ''; //URL to server including protocol - blank for autodetect
+$conf['savedir'] = DOKU_ELGGDATA; //where to store all the files
+
+$conf['useacl'] = 1; //Use Access Control Lists to restrict access?
+$conf['disableactions'] = 'login,logout'; //comma separated list of actions to disable
+
+$conf['updatecheck'] = 0; //automatically check for new releases?
+
+// get language from elgg directly
+$conf['lang'] = get_current_language();
+
+$conf['superuser'] = '@root';
+
+$conf['license'] = 'cc-by-sa'; //see conf/license.php
+
+$conf['pluginmanager'] = 0;
+
+$conf['plugin']['indexmenu']['skip_file']="/(sidebar)/i";
+
+//$conf['superuser'] = 'joe';
+
+/**
+ * The following options are usefull, if you use a MySQL
+ * database as autentication backend. Have a look into
+ * mysql.conf.php too and adjust the options to match
+ * your database installation.
+ */
+$conf['authtype'] = 'elgg';
+//require_once ("mysql.conf.php");
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/conf/local.php.dist b/mod/dokuwiki/vendors/dokuwiki/conf/local.php.dist
new file mode 100644
index 000000000..4af6ea594
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/conf/local.php.dist
@@ -0,0 +1,26 @@
+<?php
+/**
+ * This is an example of how a local.php coul look like.
+ * Simply copy the options you want to change from dokuwiki.php
+ * to this file and change them.
+ *
+ * When using the installer, a correct local.php file be generated for
+ * you automatically.
+ */
+
+
+//$conf['title'] = 'My Wiki'; //what to show in the title
+
+//$conf['useacl'] = 1; //Use Access Control Lists to restrict access?
+//$conf['superuser'] = 'joe';
+
+/**
+ * The following options are usefull, if you use a MySQL
+ * database as autentication backend. Have a look into
+ * mysql.conf.php too and adjust the options to match
+ * your database installation.
+ */
+//$conf['authtype'] = 'mysql';
+//require_once ("mysql.conf.php");
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/conf/mediameta.php b/mod/dokuwiki/vendors/dokuwiki/conf/mediameta.php
new file mode 100644
index 000000000..ba7117643
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/conf/mediameta.php
@@ -0,0 +1,57 @@
+<?php
+/**
+ * This configures which meta data will be editable through
+ * the media manager. Each field of the array is an array with the
+ * following contents:
+ * fieldname - Where data will be saved (EXIF or IPTC field)
+ * label - key to lookup in the $lang var, if not found printed as is
+ * htmltype - 'text' or 'textarea'
+ * lookups - array additional fields to lookup the data (EXIF or IPTC fields)
+ *
+ * The fields are not ordered continously to make inserting additional items
+ * in between simpler.
+ *
+ * This is a PHP snippet, so PHP syntax applies.
+ *
+ * Note: $fields is not a global variable and will not be available to any
+ * other functions or templates later
+ *
+ * You may extend or overwrite this variable in a optional
+ * conf/mediameta.local.php file
+ *
+ * For a list of available EXIF/IPTC fields refer to
+ * http://www.dokuwiki.org/devel:templates:detail.php
+ */
+
+
+$fields = array(
+ 10 => array('Iptc.Headline',
+ 'img_title',
+ 'text'),
+
+ 20 => array('Iptc.Caption',
+ 'img_caption',
+ 'textarea',
+ array('Exif.UserComment',
+ 'Exif.TIFFImageDescription',
+ 'Exif.TIFFUserComment')),
+
+ 30 => array('Iptc.Byline',
+ 'img_artist',
+ 'text',
+ array('Exif.TIFFArtist',
+ 'Exif.Artist',
+ 'Iptc.Credit')),
+
+ 40 => array('Iptc.CopyrightNotice',
+ 'img_copyr',
+ 'text',
+ array('Exif.TIFFCopyright',
+ 'Exif.Copyright')),
+
+ 50 => array('Iptc.Keywords',
+ 'img_keywords',
+ 'text',
+ array('Exif.Category')),
+);
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/conf/mime.conf b/mod/dokuwiki/vendors/dokuwiki/conf/mime.conf
new file mode 100644
index 000000000..2e1ce6bb0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/conf/mime.conf
@@ -0,0 +1,52 @@
+# Allowed uploadable file extensions and mimetypes are defined here.
+# To extend this file it is recommended to create a mime.local.conf
+# file. Mimetypes that should be downloadable and not be opened in the
+# should be prefixed with a !
+
+jpg image/jpeg
+jpeg image/jpeg
+gif image/gif
+png image/png
+tgz !application/octet-stream
+tar !application/x-gtar
+gz !application/octet-stream
+bz2 !application/octet-stream
+zip !application/zip
+rar !application/rar
+pdf application/pdf
+ps !application/postscript
+doc !application/msword
+xls !application/msexcel
+ppt !application/mspowerpoint
+rtf !application/msword
+swf application/x-shockwave-flash
+
+rpm !application/octet-stream
+deb !application/octet-stream
+
+sxw !application/soffice
+sxc !application/soffice
+sxi !application/soffice
+sxd !application/soffice
+
+odc !application/vnd.oasis.opendocument.chart
+odf !application/vnd.oasis.opendocument.formula
+odg !application/vnd.oasis.opendocument.graphics
+odi !application/vnd.oasis.opendocument.image
+odp !application/vnd.oasis.opendocument.presentation
+ods !application/vnd.oasis.opendocument.spreadsheet
+odt !application/vnd.oasis.opendocument.text
+
+# You should enable HTML and Text uploads only for restricted Wikis.
+# Spammers are known to upload spam pages through unprotected Wikis.
+# Note: Enabling HTML opens Cross Site Scripting vulnerabilities
+# through JavaScript. Only enable this with trusted users. You
+# need to disable the iexssprotect option additionally to
+# adding the mime type here
+#html text/html
+#htm text/html
+#txt text/plain
+#conf text/plain
+#xml text/xml
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/conf/msg b/mod/dokuwiki/vendors/dokuwiki/conf/msg
new file mode 100644
index 000000000..38bbb133c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/conf/msg
@@ -0,0 +1,8 @@
+25
+The first line of this file contains a number, indicating
+which notification messages should not be displayed. This
+is the only information sent to dokuwiki.org when the
+updatecheck option is enabled. You usually don't need to
+change this number as it gets updated when you install the
+new release - but to ignore a certain message set its
+number here.
diff --git a/mod/dokuwiki/vendors/dokuwiki/conf/mysql.conf.php.example b/mod/dokuwiki/vendors/dokuwiki/conf/mysql.conf.php.example
new file mode 100644
index 000000000..bd67be82c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/conf/mysql.conf.php.example
@@ -0,0 +1,253 @@
+<?php
+/*
+ * This is an example configuration for the mysql auth module.
+ *
+ * This SQL statements are optimized for following table structure.
+ * If you use a different one you have to change them accordingly.
+ * See comments of every statement for details.
+ *
+ * TABLE users
+ * uid login pass firstname lastname email
+ *
+ * TABLE groups
+ * gid name
+ *
+ * TABLE usergroup
+ * uid gid
+ *
+ * To use this configuration you have to copy them to local.php
+ * or at least include this file in local.php.
+ */
+
+/* Options to configure database access. You need to set up this
+ * options carefully, otherwise you won't be able to access you
+ * database.
+ */
+$conf['auth']['mysql']['server'] = '';
+$conf['auth']['mysql']['user'] = '';
+$conf['auth']['mysql']['password'] = '';
+$conf['auth']['mysql']['database'] = '';
+
+/* This option enables debug messages in the mysql module. It is
+ * mostly usefull for system admins.
+ */
+$conf['auth']['mysql']['debug'] = 0;
+
+/* Normally password encryption is done by DokuWiki (recommended) but for
+ * some reasons it might be usefull to let the database do the encryption.
+ * Set 'forwardClearPass' to '1' and the cleartext password is forwarded to
+ * the database, otherwise the encrypted one.
+ */
+$conf['auth']['mysql']['forwardClearPass'] = 0;
+
+/* Multiple table operations will be protected by locks. This array tolds
+ * the module which tables to lock. If you use any aliases for table names
+ * these array must also contain these aliases. Any unamed alias will cause
+ * a warning during operation. See the example below.
+ */
+$conf['auth']['mysql']['TablesToLock']= array("users", "users AS u","groups", "groups AS g", "usergroup", "usergroup AS ug");
+
+/***********************************************************************/
+/* Basic SQL statements for user authentication (required) */
+/***********************************************************************/
+
+/* This statement is used to grant or deny access to the wiki. The result
+ * should be a table with exact one line containing at least the password
+ * of the user. If the result table is empty or contains more than one
+ * row, access will be denied.
+ *
+ * The module access the password as 'pass' so a alias might be necessary.
+ *
+ * Following patters will be replaced:
+ * %{user} user name
+ * %{pass} encrypted or clear text password (depends on 'encryptPass')
+ * %{dgroup} default group name
+ */
+$conf['auth']['mysql']['checkPass'] = "SELECT pass
+ FROM usergroup AS ug
+ JOIN users AS u ON u.uid=ug.uid
+ JOIN groups AS g ON g.gid=ug.gid
+ WHERE login='%{user}'
+ AND name='%{dgroup}'";
+
+/* This statement should return a table with exact one row containing
+ * information about one user. The field needed are:
+ * 'pass' containing the encrypted or clear text password
+ * 'name' the user's full name
+ * 'mail' the user's email address
+ *
+ * Keep in mind that Dokuwiki will access thise information through the
+ * names listed above so aliasses might be neseccary.
+ *
+ * Following patters will be replaced:
+ * %{user} user name
+ */
+$conf['auth']['mysql']['getUserInfo'] = "SELECT pass, CONCAT(firstname,' ',lastname) AS name, email AS mail
+ FROM users
+ WHERE login='%{user}'";
+
+/* This statement is used to get all groups a user is member of. The
+ * result should be a table containing all groups the given user is
+ * member of. The module access the group name as 'group' so a alias
+ * might be nessecary.
+ *
+ * Following patters will be replaced:
+ * %{user} user name
+ */
+$conf['auth']['mysql']['getGroups'] = "SELECT name as `group`
+ FROM groups g, users u, usergroup ug
+ WHERE u.uid = ug.uid
+ AND g.gid = ug.gid
+ AND u.login='%{user}'";
+
+/***********************************************************************/
+/* Additional minimum SQL statements to use the user manager */
+/***********************************************************************/
+
+/* This statement should return a table containing all user login names
+ * that meet certain filter criteria. The filter expressions will be added
+ * case dependend by the module. At the end a sort expression will be added.
+ * Important is that this list contains no double entries fo a user. Each
+ * user name is only allowed once in the table.
+ *
+ * The login name will be accessed as 'user' to a alias might be neseccary.
+ * No patterns will be replaced in this statement but following patters
+ * will be replaced in the filter expressions:
+ * %{user} in FilterLogin user's login name
+ * %{name} in FilterName user's full name
+ * %{email} in FilterEmail user's email address
+ * %{group} in FilterGroup group name
+ */
+$conf['auth']['mysql']['getUsers'] = "SELECT DISTINCT login AS user
+ FROM users AS u
+ LEFT JOIN usergroup AS ug ON u.uid=ug.uid
+ LEFT JOIN groups AS g ON ug.gid=g.gid";
+$conf['auth']['mysql']['FilterLogin'] = "login LIKE '%{user}'";
+$conf['auth']['mysql']['FilterName'] = "CONCAT(firstname,' ',lastname) LIKE '%{name}'";
+$conf['auth']['mysql']['FilterEmail'] = "email LIKE '%{email}'";
+$conf['auth']['mysql']['FilterGroup'] = "name LIKE '%{group}'";
+$conf['auth']['mysql']['SortOrder'] = "ORDER BY login";
+
+/***********************************************************************/
+/* Additional SQL statements to add new users with the user manager */
+/***********************************************************************/
+
+/* This statement should add a user to the database. Minimum information
+ * to store are: login name, password, email address and full name.
+ *
+ * Following patterns will be replaced:
+ * %{user} user's login name
+ * %{pass} password (encrypted or clear text, depends on 'encryptPass')
+ * %{email} email address
+ * %{name} user's full name
+ */
+$conf['auth']['mysql']['addUser'] = "INSERT INTO users
+ (login, pass, email, firstname, lastname)
+ VALUES ('%{user}', '%{pass}', '%{email}',
+ SUBSTRING_INDEX('%{name}',' ', 1),
+ SUBSTRING_INDEX('%{name}',' ', -1))";
+
+/* This statement should add a group to the database.
+ * Following patterns will be replaced:
+ * %{group} group name
+ */
+$conf['auth']['mysql']['addGroup'] = "INSERT INTO groups (name)
+ VALUES ('%{group}')";
+
+/* This statement should connect a user to a group (a user become member
+ * of that group).
+ * Following patterns will be replaced:
+ * %{user} user's login name
+ * %{uid} id of a user dataset
+ * %{group} group name
+ * %{gid} id of a group dataset
+ */
+$conf['auth']['mysql']['addUserGroup']= "INSERT INTO usergroup (uid, gid)
+ VALUES ('%{uid}', '%{gid}')";
+
+/* This statement should remove a group fom the database.
+ * Following patterns will be replaced:
+ * %{group} group name
+ * %{gid} id of a group dataset
+ */
+$conf['auth']['mysql']['delGroup'] = "DELETE FROM groups
+ WHERE gid='%{gid}'";
+
+/* This statement should return the database index of a given user name.
+ * The module will access the index with the name 'id' so a alias might be
+ * necessary.
+ * following patters will be replaced:
+ * %{user} user name
+ */
+$conf['auth']['mysql']['getUserID'] = "SELECT uid AS id
+ FROM users
+ WHERE login='%{user}'";
+
+/***********************************************************************/
+/* Additional SQL statements to delete users with the user manager */
+/***********************************************************************/
+
+/* This statement should remove a user fom the database.
+ * Following patterns will be replaced:
+ * %{user} user's login name
+ * %{uid} id of a user dataset
+ */
+$conf['auth']['mysql']['delUser'] = "DELETE FROM users
+ WHERE uid='%{uid}'";
+
+/* This statement should remove all connections from a user to any group
+ * (a user quits membership of all groups).
+ * Following patterns will be replaced:
+ * %{uid} id of a user dataset
+ */
+$conf['auth']['mysql']['delUserRefs'] = "DELETE FROM usergroup
+ WHERE uid='%{uid}'";
+
+/***********************************************************************/
+/* Additional SQL statements to modify users with the user manager */
+/***********************************************************************/
+
+/* This statements should modify a user entry in the database. The
+ * statements UpdateLogin, UpdatePass, UpdateEmail and UpdateName will be
+ * added to updateUser on demand. Only changed parameters will be used.
+ *
+ * Following patterns will be replaced:
+ * %{user} user's login name
+ * %{pass} password (encrypted or clear text, depends on 'encryptPass')
+ * %{email} email address
+ * %{name} user's full name
+ * %{uid} user id that should be updated
+ */
+$conf['auth']['mysql']['updateUser'] = "UPDATE users SET";
+$conf['auth']['mysql']['UpdateLogin'] = "login='%{user}'";
+$conf['auth']['mysql']['UpdatePass'] = "pass='%{pass}'";
+$conf['auth']['mysql']['UpdateEmail'] = "email='%{email}'";
+$conf['auth']['mysql']['UpdateName'] = "firstname=SUBSTRING_INDEX('%{name}',' ', 1),
+ lastname=SUBSTRING_INDEX('%{name}',' ', -1)";
+$conf['auth']['mysql']['UpdateTarget']= "WHERE uid=%{uid}";
+
+/* This statement should remove a single connection from a user to a
+ * group (a user quits membership of that group).
+ *
+ * Following patterns will be replaced:
+ * %{user} user's login name
+ * %{uid} id of a user dataset
+ * %{group} group name
+ * %{gid} id of a group dataset
+ */
+$conf['auth']['mysql']['delUserGroup']= "DELETE FROM usergroup
+ WHERE uid='%{uid}'
+ AND gid='%{gid}'";
+
+/* This statement should return the database index of a given group name.
+ * The module will access the index with the name 'id' so a alias might
+ * be necessary.
+ *
+ * Following patters will be replaced:
+ * %{group} group name
+ */
+$conf['auth']['mysql']['getGroupID'] = "SELECT gid AS id
+ FROM groups
+ WHERE name='%{group}'";
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/conf/scheme.conf b/mod/dokuwiki/vendors/dokuwiki/conf/scheme.conf
new file mode 100644
index 000000000..88cb3c44d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/conf/scheme.conf
@@ -0,0 +1,11 @@
+#Add URL schemes you want to be recognized as links here
+
+http
+https
+telnet
+gopher
+wais
+ftp
+ed2k
+irc
+ldap \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/conf/smileys.conf b/mod/dokuwiki/vendors/dokuwiki/conf/smileys.conf
new file mode 100644
index 000000000..47e4537e2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/conf/smileys.conf
@@ -0,0 +1,27 @@
+# Smileys configured here will be replaced by the
+# configured images in the smiley directory
+
+8-) icon_cool.gif
+8-O icon_eek.gif
+8-o icon_eek.gif
+:-( icon_sad.gif
+:-) icon_smile.gif
+=) icon_smile2.gif
+:-/ icon_doubt.gif
+:-\ icon_doubt2.gif
+:-? icon_confused.gif
+:-D icon_biggrin.gif
+:-P icon_razz.gif
+:-o icon_surprised.gif
+:-O icon_surprised.gif
+:-x icon_silenced.gif
+:-X icon_silenced.gif
+:-| icon_neutral.gif
+;-) icon_wink.gif
+^_^ icon_fun.gif
+:?: icon_question.gif
+:!: icon_exclaim.gif
+LOL icon_lol.gif
+FIXME fixme.gif
+DELETEME delete.gif
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/conf/users.auth.php b/mod/dokuwiki/vendors/dokuwiki/conf/users.auth.php
new file mode 100644
index 000000000..6576eeb5f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/conf/users.auth.php
@@ -0,0 +1,10 @@
+# users.auth.php
+# <?php exit()?>
+# Don't modify the lines above
+#
+# Userfile
+#
+# Format:
+#
+# user:MD5password:Real Name:email:groups,comma,seperated
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/conf/users.auth.php.dist b/mod/dokuwiki/vendors/dokuwiki/conf/users.auth.php.dist
new file mode 100644
index 000000000..6576eeb5f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/conf/users.auth.php.dist
@@ -0,0 +1,10 @@
+# users.auth.php
+# <?php exit()?>
+# Don't modify the lines above
+#
+# Userfile
+#
+# Format:
+#
+# user:MD5password:Real Name:email:groups,comma,seperated
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/conf/wordblock.conf b/mod/dokuwiki/vendors/dokuwiki/conf/wordblock.conf
new file mode 100644
index 000000000..da7143257
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/conf/wordblock.conf
@@ -0,0 +1,8004 @@
+# This is the URL blacklist from the chongqed.org database
+# it is available from http://blacklist.chongqed.org/
+# You can use each line below as a regular expression
+# that can be tested against URLs on your wiki.
+# The last spammer was added on 2008-09-11 10:14:51
+
+https?:\/\/([^\/]*\.)?-com-boob-sex-sexy\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?0--sex\.com
+https?:\/\/([^\/]*\.)?0-casinos\.org
+https?:\/\/([^\/]*\.)?0-poker\.net
+https?:\/\/([^\/]*\.)?00007\.com
+https?:\/\/([^\/]*\.)?001-mature-teacher\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?007vip\.cn
+https?:\/\/([^\/]*\.)?01incest\.za\.pl
+https?:\/\/([^\/]*\.)?021boy\.com
+https?:\/\/([^\/]*\.)?027168\.com
+https?:\/\/([^\/]*\.)?02incest\.za\.pl
+https?:\/\/([^\/]*\.)?03incest\.za\.pl
+https?:\/\/([^\/]*\.)?086books\.com
+https?:\/\/([^\/]*\.)?0esy-adult-sites\.blogspot\.com
+https?:\/\/([^\/]*\.)?0lmz-adult-sites\.blogspot\.com
+https?:\/\/([^\/]*\.)?0sxa-adult-sites\.blogspot\.com
+https?:\/\/([^\/]*\.)?0tdwrmq8\.org
+https?:\/\/([^\/]*\.)?0x009\.blogspot\.com
+https?:\/\/([^\/]*\.)?1-888-pokermon\.com
+https?:\/\/([^\/]*\.)?1-adipex\.us
+https?:\/\/([^\/]*\.)?1-cialis\.us
+https?:\/\/([^\/]*\.)?1-craps\.net
+https?:\/\/([^\/]*\.)?1-levitra\.us
+https?:\/\/([^\/]*\.)?1-poker-game\.com
+https?:\/\/([^\/]*\.)?1-xenical\.us
+https?:\/\/([^\/]*\.)?10-best-online-casinosx\.blogspot\.com
+https?:\/\/([^\/]*\.)?100-25-ebony-free\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?10med\.com
+https?:\/\/([^\/]*\.)?10pharm\.com
+https?:\/\/([^\/]*\.)?114418523\.blogspot\.com
+https?:\/\/([^\/]*\.)?117000\.com
+https?:\/\/([^\/]*\.)?1177888888\.com
+https?:\/\/([^\/]*\.)?123clips-com-cq03\.blogspot\.com
+https?:\/\/([^\/]*\.)?123clips-com-td\.blogspot\.com
+https?:\/\/([^\/]*\.)?123clips-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?123clips-tp5\.blogspot\.com
+https?:\/\/([^\/]*\.)?126hao\.com
+https?:\/\/([^\/]*\.)?163car\.com
+https?:\/\/([^\/]*\.)?163school\.com\.cn
+https?:\/\/([^\/]*\.)?168chinese\.com
+https?:\/\/([^\/]*\.)?168english\.com
+https?:\/\/([^\/]*\.)?168standard\.com
+https?:\/\/([^\/]*\.)?181st-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?18to19-com-dbo26u\.blogspot\.com
+https?:\/\/([^\/]*\.)?18to19-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?1avoro\.info
+https?:\/\/([^\/]*\.)?1c1garettes-777\.tripod\.com
+https?:\/\/([^\/]*\.)?1centpoker\.us
+https?:\/\/([^\/]*\.)?1clickpoker\.us
+https?:\/\/([^\/]*\.)?1dollarpoker\.us
+https?:\/\/([^\/]*\.)?1ebalo\.org
+https?:\/\/([^\/]*\.)?1freepoker\.us
+https?:\/\/([^\/]*\.)?1gogo\.awardspace\.com
+https?:\/\/([^\/]*\.)?1golod\.org
+https?:\/\/([^\/]*\.)?1i-casino\.com
+https?:\/\/([^\/]*\.)?1jolla\.org
+https?:\/\/([^\/]*\.)?1kaj-adult-sites\.blogspot\.com
+https?:\/\/([^\/]*\.)?1min\.us
+https?:\/\/([^\/]*\.)?1onlinepoker\.us
+https?:\/\/([^\/]*\.)?1ringtones\.fateback\.com
+https?:\/\/([^\/]*\.)?1st-in-poker\.us
+https?:\/\/([^\/]*\.)?1st-phentermine\.to\.pl
+https?:\/\/([^\/]*\.)?1st-place-poker\.com
+https?:\/\/([^\/]*\.)?1st-poker\.us
+https?:\/\/([^\/]*\.)?1stpharma\.noads\.biz
+https?:\/\/([^\/]*\.)?1stpharmacy\.rmcinfo\.fr
+https?:\/\/([^\/]*\.)?1stviagra\.coz\.in
+https?:\/\/([^\/]*\.)?1whs\.com
+https?:\/\/([^\/]*\.)?2-poker\.us
+https?:\/\/([^\/]*\.)?2008-web-hosting\.com
+https?:\/\/([^\/]*\.)?2010oa\.com
+https?:\/\/([^\/]*\.)?2228888\.com
+https?:\/\/([^\/]*\.)?24ringtonevme\.blogspot\.com
+https?:\/\/([^\/]*\.)?24x7\.soliday\.org
+https?:\/\/([^\/]*\.)?2apd-adult-sites\.blogspot\.com
+https?:\/\/([^\/]*\.)?2cpo-adult-sites\.blogspot\.com
+https?:\/\/([^\/]*\.)?30moms-com-dd8h8y1slq\.blogspot\.com
+https?:\/\/([^\/]*\.)?30moms-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?321\.cn
+https?:\/\/([^\/]*\.)?33b\.b33r\.net
+https?:\/\/([^\/]*\.)?33orgy\.org
+https?:\/\/([^\/]*\.)?3mac\.info
+https?:\/\/([^\/]*\.)?3pic-com-ai3\.blogspot\.com
+https?:\/\/([^\/]*\.)?3pic-com-kedet\.blogspot\.com
+https?:\/\/([^\/]*\.)?40inchplus-com-b4\.blogspot\.com
+https?:\/\/([^\/]*\.)?40inchplus-com-toqof\.blogspot\.com
+https?:\/\/([^\/]*\.)?40inchplus-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?4arf-adult-sites\.blogspot\.com
+https?:\/\/([^\/]*\.)?4erni-pes\.blogspot\.com
+https?:\/\/([^\/]*\.)?4mednew\.com
+https?:\/\/([^\/]*\.)?4mkat4\.com
+https?:\/\/([^\/]*\.)?4onlinecasino4\.blogspot\.com
+https?:\/\/([^\/]*\.)?4t7e\.info
+https?:\/\/([^\/]*\.)?4tsmiget\.forumzen\.com
+https?:\/\/([^\/]*\.)?4tsutmon\.forumzen\.com
+https?:\/\/([^\/]*\.)?4udf-adult-sites\.blogspot\.com
+https?:\/\/([^\/]*\.)?4x2\.net
+https?:\/\/([^\/]*\.)?510sms\.blogbus\.com
+https?:\/\/([^\/]*\.)?5188job\.com
+https?:\/\/([^\/]*\.)?51lac\.com
+https?:\/\/([^\/]*\.)?51lover\.org
+https?:\/\/([^\/]*\.)?51sms\.blogbus\.com
+https?:\/\/([^\/]*\.)?51web\.cn
+https?:\/\/([^\/]*\.)?51wisdom\.com
+https?:\/\/([^\/]*\.)?51wisdom\.com\.cn
+https?:\/\/([^\/]*\.)?51wisdom\.net
+https?:\/\/([^\/]*\.)?520sms\.blogbus\.com
+https?:\/\/([^\/]*\.)?52lac\.net
+https?:\/\/([^\/]*\.)?5417\.cn
+https?:\/\/([^\/]*\.)?54epson\.com
+https?:\/\/([^\/]*\.)?55\.2myip\.com
+https?:\/\/([^\/]*\.)?5588866\.com\.cn
+https?:\/\/([^\/]*\.)?56156\.com
+https?:\/\/([^\/]*\.)?563000\.com
+https?:\/\/([^\/]*\.)?56918\.com
+https?:\/\/([^\/]*\.)?59165\.net
+https?:\/\/([^\/]*\.)?5ijipiao\.com
+https?:\/\/([^\/]*\.)?5up-net-blmpo6qr0\.blogspot\.com
+https?:\/\/([^\/]*\.)?5up-net-wr00skgzbo\.blogspot\.com
+https?:\/\/([^\/]*\.)?63\.217\.31\.49
+https?:\/\/([^\/]*\.)?6717\.com\.cn
+https?:\/\/([^\/]*\.)?69pose\.org
+https?:\/\/([^\/]*\.)?6tvju0a\.nokedem\.com
+https?:\/\/([^\/]*\.)?70678\.com
+https?:\/\/([^\/]*\.)?7171\.blogshot\.nl
+https?:\/\/([^\/]*\.)?72\.net\.cn
+https?:\/\/([^\/]*\.)?77zhong\.com
+https?:\/\/([^\/]*\.)?78\.net\.cn
+https?:\/\/([^\/]*\.)?79179\.com
+https?:\/\/([^\/]*\.)?7982257596\.blogspot\.com
+https?:\/\/([^\/]*\.)?7dftw79\.nokedem\.com
+https?:\/\/([^\/]*\.)?7j5lj\.info
+https?:\/\/([^\/]*\.)?7shg-adult-sites\.blogspot\.com
+https?:\/\/([^\/]*\.)?7x7\.ruwe\.net
+https?:\/\/([^\/]*\.)?8-teenies\.freeinsite\.net
+https?:\/\/([^\/]*\.)?80880\.com
+https?:\/\/([^\/]*\.)?8224\.net
+https?:\/\/([^\/]*\.)?86wys\.com
+https?:\/\/([^\/]*\.)?87793798\.cn
+https?:\/\/([^\/]*\.)?888\.web\.com
+https?:\/\/([^\/]*\.)?88by88-ax4nzu\.blogspot\.com
+https?:\/\/([^\/]*\.)?88by88-com-hx06a\.blogspot\.com
+https?:\/\/([^\/]*\.)?88by88-com-nekuk\.blogspot\.com
+https?:\/\/([^\/]*\.)?88tm\.com
+https?:\/\/([^\/]*\.)?8pcg-adult-sites\.blogspot\.com
+https?:\/\/([^\/]*\.)?8teenfiles-com-dzlvk\.blogspot\.com
+https?:\/\/([^\/]*\.)?8teenfiles-com-mj6\.blogspot\.com
+https?:\/\/([^\/]*\.)?8teenfiles-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?8thstreetlatinas-com-rw48o84iwl\.blogspot\.com
+https?:\/\/([^\/]*\.)?8vwx-adult-sites\.blogspot\.com
+https?:\/\/([^\/]*\.)?90001\.cn
+https?:\/\/([^\/]*\.)?911\.x24hr\.com
+https?:\/\/([^\/]*\.)?911w\.net
+https?:\/\/([^\/]*\.)?91yg\.com
+https?:\/\/([^\/]*\.)?96china\.com
+https?:\/\/([^\/]*\.)?96china\.net
+https?:\/\/([^\/]*\.)?96d2\.com
+https?:\/\/([^\/]*\.)?98-boot-disk-japanese-window\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?99aids\.com
+https?:\/\/([^\/]*\.)?a-blonde-babe-in-bikini\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?a-milf-video-preview\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?a-onedigitizing\.com
+https?:\/\/([^\/]*\.)?a-oneemb\.com
+https?:\/\/([^\/]*\.)?a-phentermine\.us
+https?:\/\/([^\/]*\.)?a-poker-casino\.com
+https?:\/\/([^\/]*\.)?a-porn-sex-adult-xxx\.com
+https?:\/\/([^\/]*\.)?aaeon\.com\.cn
+https?:\/\/([^\/]*\.)?aalita\.com
+https?:\/\/([^\/]*\.)?aalive\.info
+https?:\/\/([^\/]*\.)?aalop\.info
+https?:\/\/([^\/]*\.)?aamjh\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?aaqqywh\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ababd1\.com
+https?:\/\/([^\/]*\.)?abasti\.com
+https?:\/\/([^\/]*\.)?abbama\.com
+https?:\/\/([^\/]*\.)?abbc\.edu
+https?:\/\/([^\/]*\.)?abbleg4\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?abca\.biz
+https?:\/\/([^\/]*\.)?abcink\.com
+https?:\/\/([^\/]*\.)?abijah\.phpbbx\.de
+https?:\/\/([^\/]*\.)?abijah\.romandie\.com
+https?:\/\/([^\/]*\.)?abito-da-sera\.bb22\.info
+https?:\/\/([^\/]*\.)?about-money-world\.com
+https?:\/\/([^\/]*\.)?aboutinfotech\.com
+https?:\/\/([^\/]*\.)?aboutmitsubishiparts\.cn
+https?:\/\/([^\/]*\.)?abriana\.phpbbx\.de
+https?:\/\/([^\/]*\.)?abrianna\.romandie\.com
+https?:\/\/([^\/]*\.)?absolutely-free-porn-clip-blogyvg\.blogspot\.com
+https?:\/\/([^\/]*\.)?absolutely-free-porn-clip-zone28k\.blogspot\.com
+https?:\/\/([^\/]*\.)?aburri\.com
+https?:\/\/([^\/]*\.)?academics\.smcvt\.edu
+https?:\/\/([^\/]*\.)?acantorr\.forumzen\.com
+https?:\/\/([^\/]*\.)?accounting-degree\.hotmail\.ru
+https?:\/\/([^\/]*\.)?accounting1degre\.chat\.ru
+https?:\/\/([^\/]*\.)?accredited-degre\.hotmail\.ru
+https?:\/\/([^\/]*\.)?accredited1degre\.chat\.ru
+https?:\/\/([^\/]*\.)?accredited2degre\.chat\.ru
+https?:\/\/([^\/]*\.)?acelacacel\.dl\.pl
+https?:\/\/([^\/]*\.)?acelalacel\.blogcu\.com
+https?:\/\/([^\/]*\.)?acelcocna\.lolbb\.com
+https?:\/\/([^\/]*\.)?aceldron\.lightbb\.com
+https?:\/\/([^\/]*\.)?acelgetric\.dl\.pl
+https?:\/\/([^\/]*\.)?acellibo\.dl\.pl
+https?:\/\/([^\/]*\.)?acellitroc\.xa\.pl
+https?:\/\/([^\/]*\.)?acelracer\.graphforum\.com
+https?:\/\/([^\/]*\.)?acelrel\.discutforum\.com
+https?:\/\/([^\/]*\.)?acgetvar\.iphorum\.com
+https?:\/\/([^\/]*\.)?achima\.phpbbx\.de
+https?:\/\/([^\/]*\.)?achima\.romandie\.com
+https?:\/\/([^\/]*\.)?achutsit\.forumzen\.com
+https?:\/\/([^\/]*\.)?acima\.phpbbx\.de
+https?:\/\/([^\/]*\.)?acima\.romandie\.com
+https?:\/\/([^\/]*\.)?acimah\.romandie\.com
+https?:\/\/([^\/]*\.)?aciphexbuy\.chip\.ms
+https?:\/\/([^\/]*\.)?aciphexcheap\.mysite\.de
+https?:\/\/([^\/]*\.)?aciphexcheapbuy\.cut\.by
+https?:\/\/([^\/]*\.)?aciphexgeneric\.redirect\.to
+https?:\/\/([^\/]*\.)?aciphexgenericbuy\.dive\.to
+https?:\/\/([^\/]*\.)?aclyulac\.forumzen\.com
+https?:\/\/([^\/]*\.)?acme-arts\.com
+https?:\/\/([^\/]*\.)?acmonno\.zikforum\.com
+https?:\/\/([^\/]*\.)?acne-medicinebco\.blogspot\.com
+https?:\/\/([^\/]*\.)?acololi\.winnerforum\.net
+https?:\/\/([^\/]*\.)?acouc\.zj\.pl
+https?:\/\/([^\/]*\.)?acrolrel\.blogcu\.com
+https?:\/\/([^\/]*\.)?acscuace\.forumzen\.com
+https?:\/\/([^\/]*\.)?actingland\.com
+https?:\/\/([^\/]*\.)?action-in-lesbian-lover\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?action36-kx8\.blogspot\.com
+https?:\/\/([^\/]*\.)?actonelbuy\.drop\.to
+https?:\/\/([^\/]*\.)?actonelcheap\.notrix\.ch
+https?:\/\/([^\/]*\.)?actonelcheapgeneric\.fanclub\.ms
+https?:\/\/([^\/]*\.)?actonelgeneric\.drop\.to
+https?:\/\/([^\/]*\.)?actonelonline\.drive\.to
+https?:\/\/([^\/]*\.)?acurahost\.cn
+https?:\/\/([^\/]*\.)?acuratrades\.cn
+https?:\/\/([^\/]*\.)?acxza\.szm\.sk
+https?:\/\/([^\/]*\.)?acyclovir\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?ad0571\.com
+https?:\/\/([^\/]*\.)?adapturl\.com
+https?:\/\/([^\/]*\.)?adault\.adultserv\.info
+https?:\/\/([^\/]*\.)?adds1\.trafflow\.com
+https?:\/\/([^\/]*\.)?adipex-08pr\.blogspot\.com
+https?:\/\/([^\/]*\.)?adipex-911\.coz\.in
+https?:\/\/([^\/]*\.)?adipex-buyvie\.blogspot\.com
+https?:\/\/([^\/]*\.)?adipex-cc\.blogspot\.com
+https?:\/\/([^\/]*\.)?adipex-phenterminepwf\.blogspot\.com
+https?:\/\/([^\/]*\.)?adipex-wiki\.com
+https?:\/\/([^\/]*\.)?adipex\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?adipex\.edu\.tf
+https?:\/\/([^\/]*\.)?adipex\.edublogs\.org
+https?:\/\/([^\/]*\.)?adipex\.health-livening\.com
+https?:\/\/([^\/]*\.)?adipexes\.blogspot\.com
+https?:\/\/([^\/]*\.)?adipexwoq\.blogspot\.com
+https?:\/\/([^\/]*\.)?adipexxdt\.blogspot\.com
+https?:\/\/([^\/]*\.)?adira\.phpbbx\.de
+https?:\/\/([^\/]*\.)?adira\.romandie\.com
+https?:\/\/([^\/]*\.)?adrienneee\.ifrance\.com
+https?:\/\/([^\/]*\.)?adrienneee\.xhostar\.com
+https?:\/\/([^\/]*\.)?adsenseready\.com
+https?:\/\/([^\/]*\.)?adult-clips-com-guqiax1tu\.blogspot\.com
+https?:\/\/([^\/]*\.)?adult-clips-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?adult-dating-free\.sexnation\.info
+https?:\/\/([^\/]*\.)?adult-dating\.sexnation\.info
+https?:\/\/([^\/]*\.)?adult-free-fucking-movie\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?adult-free-granny-video\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?adult-fx\.info
+https?:\/\/([^\/]*\.)?adult-list-com-wqf4ojq2uk\.blogspot\.com
+https?:\/\/([^\/]*\.)?adult-list-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?adult-personals\.sexnation\.info
+https?:\/\/([^\/]*\.)?adult-porn-clip-info887\.blogspot\.com
+https?:\/\/([^\/]*\.)?adult-sites-review\.beaffaired\.com
+https?:\/\/([^\/]*\.)?adult\.1foleks\.org
+https?:\/\/([^\/]*\.)?adult1clip\.blogspot\.com
+https?:\/\/([^\/]*\.)?adult1movies\.blogspot\.com
+https?:\/\/([^\/]*\.)?adult1video\.blogspot\.com
+https?:\/\/([^\/]*\.)?adult69club\.tripod\.com
+https?:\/\/([^\/]*\.)?adultbuffet-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?adultpersonalsxgj\.blogspot\.com
+https?:\/\/([^\/]*\.)?adultpersonalz\.net
+https?:\/\/([^\/]*\.)?adultsexvideo\.blogspot\.com
+https?:\/\/([^\/]*\.)?adultsitefind\.info
+https?:\/\/([^\/]*\.)?adultsiteshop\.info
+https?:\/\/([^\/]*\.)?adultsss\.cafe150\.com
+https?:\/\/([^\/]*\.)?adultsss\.freehostia\.com
+https?:\/\/([^\/]*\.)?adust\.my10gb\.com
+https?:\/\/([^\/]*\.)?advanceloanfast\.info
+https?:\/\/([^\/]*\.)?adventure-travel\.globaltr\.info
+https?:\/\/([^\/]*\.)?advice-kissing\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?adviser-financial-friendly-gay\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?adviser\.8888mb\.com
+https?:\/\/([^\/]*\.)?adwareremoval\.myinfo\.ws
+https?:\/\/([^\/]*\.)?ae\.siam\.edu
+https?:\/\/([^\/]*\.)?aebn-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?aezat\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?afdtf\.szm\.sk
+https?:\/\/([^\/]*\.)?affishe\.hostcroc\.com
+https?:\/\/([^\/]*\.)?affishe\.webmelia\.com
+https?:\/\/([^\/]*\.)?afraima\.phpbbx\.de
+https?:\/\/([^\/]*\.)?african-american-lesbian-personals\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?africanvagina-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?aftworld\.com
+https?:\/\/([^\/]*\.)?afxbmx\.info
+https?:\/\/([^\/]*\.)?agbht\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?agclore\.dl\.pl
+https?:\/\/([^\/]*\.)?agcw-com-cme2qnyzyt\.blogspot\.com
+https?:\/\/([^\/]*\.)?agcw-com-r10opb\.blogspot\.com
+https?:\/\/([^\/]*\.)?agcw-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?agentlovelette\.250free\.com
+https?:\/\/([^\/]*\.)?aghas\.info
+https?:\/\/([^\/]*\.)?agmy3\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?agrrjd4\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?agylavu\.org
+https?:\/\/([^\/]*\.)?ah-me-com-af7ipw\.blogspot\.com
+https?:\/\/([^\/]*\.)?ah-me-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?ah-me-t7o\.blogspot\.com
+https?:\/\/([^\/]*\.)?ahava\.phpbbx\.de
+https?:\/\/([^\/]*\.)?ahuva\.phpbbx\.de
+https?:\/\/([^\/]*\.)?aidlov\.com
+https?:\/\/([^\/]*\.)?aids-china\.com
+https?:\/\/([^\/]*\.)?aids\.ik8\.com
+https?:\/\/([^\/]*\.)?aids1\.zj\.com
+https?:\/\/([^\/]*\.)?aids333\.net
+https?:\/\/([^\/]*\.)?aikn3\.szm\.sk
+https?:\/\/([^\/]*\.)?air520\.com
+https?:\/\/([^\/]*\.)?airfarelowest\.net
+https?:\/\/([^\/]*\.)?airline-ticket-now\.com
+https?:\/\/([^\/]*\.)?airline-ticket\.globaltr\.info
+https?:\/\/([^\/]*\.)?ajneuas\.com
+https?:\/\/([^\/]*\.)?akbxb\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?akissbetweenthelegs-com-hesel\.blogspot\.com
+https?:\/\/([^\/]*\.)?akissbetweenthelegs-com-tsawya560\.blogspot\.com
+https?:\/\/([^\/]*\.)?akissbetweenthelegs-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?al-femminile\.freespase\.info
+https?:\/\/([^\/]*\.)?al4a-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?alabamamortgage-x\.com
+https?:\/\/([^\/]*\.)?alalal\.myrealboard\.com
+https?:\/\/([^\/]*\.)?alaldalli\.naturalforum\.net
+https?:\/\/([^\/]*\.)?alanthomashairsalon\.com
+https?:\/\/([^\/]*\.)?alarcit\.dynamicbb\.com
+https?:\/\/([^\/]*\.)?alaskamortgage-x\.com
+https?:\/\/([^\/]*\.)?alba-boob-jessica-slip\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?albergo-economici-rimini\.ll33\.info
+https?:\/\/([^\/]*\.)?albergo-parigi\.freespase\.info
+https?:\/\/([^\/]*\.)?albums-proshots\.com
+https?:\/\/([^\/]*\.)?alchita\.goodforum\.net
+https?:\/\/([^\/]*\.)?alchita\.grafbb\.com
+https?:\/\/([^\/]*\.)?aldabridgeman\.site\.io
+https?:\/\/([^\/]*\.)?aldarta\.discutforum\.com
+https?:\/\/([^\/]*\.)?aldomc\.jc\.pl
+https?:\/\/([^\/]*\.)?aldronboc\.lightbb\.com
+https?:\/\/([^\/]*\.)?aleluja\.asp2\.cz
+https?:\/\/([^\/]*\.)?alerou\.su\.pl
+https?:\/\/([^\/]*\.)?aleteta\.com
+https?:\/\/([^\/]*\.)?alexaner\.etowns\.net
+https?:\/\/([^\/]*\.)?alexmovies-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?alhilalb\.forumzen\.com
+https?:\/\/([^\/]*\.)?alias\.asp2\.cz
+https?:\/\/([^\/]*\.)?aliyah\.phpbbx\.de
+https?:\/\/([^\/]*\.)?aliza\.phpbbx\.de
+https?:\/\/([^\/]*\.)?all-rnb\.com
+https?:\/\/([^\/]*\.)?all4sexonline\.biz
+https?:\/\/([^\/]*\.)?allabout-casino\.com
+https?:\/\/([^\/]*\.)?allabout-poker\.com
+https?:\/\/([^\/]*\.)?allabout-poker\.net
+https?:\/\/([^\/]*\.)?allabout\.onplex\.de
+https?:\/\/([^\/]*\.)?allaboutx\.freeasyhost\.com
+https?:\/\/([^\/]*\.)?allaboutx\.hostingclub\.de
+https?:\/\/([^\/]*\.)?allaboutx\.m5t\.de
+https?:\/\/([^\/]*\.)?allall\.org
+https?:\/\/([^\/]*\.)?allcamsguide\.info
+https?:\/\/([^\/]*\.)?allcars\.digitalzones\.com
+https?:\/\/([^\/]*\.)?allcheapchat\.info
+https?:\/\/([^\/]*\.)?alldep\.com
+https?:\/\/([^\/]*\.)?allearjah\.com
+https?:\/\/([^\/]*\.)?alledasar\.com
+https?:\/\/([^\/]*\.)?allegra\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?allegradgeneric\.sblog\.cz
+https?:\/\/([^\/]*\.)?allen-edmonds-shoes\.info
+https?:\/\/([^\/]*\.)?allergy\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?allforsale\.org
+https?:\/\/([^\/]*\.)?allgoods\.be
+https?:\/\/([^\/]*\.)?allkinds-pills\.com
+https?:\/\/([^\/]*\.)?allkoholik\.php5\.cz
+https?:\/\/([^\/]*\.)?alllb\.com
+https?:\/\/([^\/]*\.)?alllf\.com
+https?:\/\/([^\/]*\.)?alllk\.com
+https?:\/\/([^\/]*\.)?alllm\.com
+https?:\/\/([^\/]*\.)?allln\.com
+https?:\/\/([^\/]*\.)?alllp\.com
+https?:\/\/([^\/]*\.)?allnewfilm\.com
+https?:\/\/([^\/]*\.)?allprintposters\.com
+https?:\/\/([^\/]*\.)?allsitesaccess-com-awfxbo7d\.blogspot\.com
+https?:\/\/([^\/]*\.)?alltel-ringtonedyd\.blogspot\.com
+https?:\/\/([^\/]*\.)?allvids-net-k0bdg\.blogspot\.com
+https?:\/\/([^\/]*\.)?allvids-net-kd0pe5\.blogspot\.com
+https?:\/\/([^\/]*\.)?allweb2006\.info
+https?:\/\/([^\/]*\.)?almgarc\.com
+https?:\/\/([^\/]*\.)?alneja\.goodbb\.net
+https?:\/\/([^\/]*\.)?alnm5\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?alona\.phpbbx\.de
+https?:\/\/([^\/]*\.)?alonso\.stabilt\.se
+https?:\/\/([^\/]*\.)?alphabadgirls\.info
+https?:\/\/([^\/]*\.)?alprazolam-cc\.blogspot\.com
+https?:\/\/([^\/]*\.)?alprazolam-xanax\.com
+https?:\/\/([^\/]*\.)?alpy01\.republika\.pl
+https?:\/\/([^\/]*\.)?alracmon\.zikforum\.com
+https?:\/\/([^\/]*\.)?altacebuy\.page\.to
+https?:\/\/([^\/]*\.)?altacebuycheap\.gameday\.de
+https?:\/\/([^\/]*\.)?altacebuygeneric\.cut\.by
+https?:\/\/([^\/]*\.)?altacegeneric\.dive\.to
+https?:\/\/([^\/]*\.)?altacegenericcheap\.notrix\.at
+https?:\/\/([^\/]*\.)?altazel\.blogcu\.com
+https?:\/\/([^\/]*\.)?altrocvi\.jc\.pl
+https?:\/\/([^\/]*\.)?altse\.com
+https?:\/\/([^\/]*\.)?always-credit\.com
+https?:\/\/([^\/]*\.)?always-drugs\.com
+https?:\/\/([^\/]*\.)?always-medications\.com
+https?:\/\/([^\/]*\.)?alyssa-teen\.freeinsite\.net
+https?:\/\/([^\/]*\.)?amal-fucking-movie\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?amateur-ass-free-gallery\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?amateur-atk-hairy-heather-natural\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?amateur-black-naked\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?amateur-blonde-cock\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?amateur-boob-bouncing\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?amateur-contacto-sexo\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?amateur-cum-queen\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?amateur-foto-free-nude\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?amateur-free-erotic\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?amateur-free-grannie-picture-xxx\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?amateur-free-indian-page-sex\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?amateur-free-man-naked\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?amateur-free-sex-xxx\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?amateur-fucking-milf\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?amateur-fucking-public\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?amateur-hard-com-a4w\.blogspot\.com
+https?:\/\/([^\/]*\.)?amateur-home-photo\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?amateur-index-nude\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?amateur-interracial-porn\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?amateur-man-naked\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?amateur-model-for-hire\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?amateur-nympho-wife-site\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?amateur-pages-porn\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?amateur-porn-clip-blog446\.blogspot\.com
+https?:\/\/([^\/]*\.)?amateur-porn-clip-blogqh1\.blogspot\.com
+https?:\/\/([^\/]*\.)?amateur-porn-clip-blogrv6\.blogspot\.com
+https?:\/\/([^\/]*\.)?amateur-porn-xxx\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?amateur-pussy-redhead\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?amateur-teen-movie\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?amateur-teen-sex-movie\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?amateurcurves-com-silib\.blogspot\.com
+https?:\/\/([^\/]*\.)?amateurcurves-com-t7zh3\.blogspot\.com
+https?:\/\/([^\/]*\.)?amazingcum-com-bd7uu0\.blogspot\.com
+https?:\/\/([^\/]*\.)?ambien-online\.presteert\.nl
+https?:\/\/([^\/]*\.)?ambien\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?ambien\.conto\.pl
+https?:\/\/([^\/]*\.)?ambien\.esguay\.com
+https?:\/\/([^\/]*\.)?ambien\.fws1\.com
+https?:\/\/([^\/]*\.)?ambien\.goodpharm\.info
+https?:\/\/([^\/]*\.)?ambien\.hav\.pl
+https?:\/\/([^\/]*\.)?ambien\.presteert\.nl
+https?:\/\/([^\/]*\.)?ambien\.skocz\.net
+https?:\/\/([^\/]*\.)?ambiena\.myblogvoice\.com
+https?:\/\/([^\/]*\.)?ambienpills\.coz\.in
+https?:\/\/([^\/]*\.)?ambienrx\.weboficial\.com
+https?:\/\/([^\/]*\.)?ambiens\.ru\.tf
+https?:\/\/([^\/]*\.)?amcq8\.szm\.sk
+https?:\/\/([^\/]*\.)?amenities\.8tt\.org
+https?:\/\/([^\/]*\.)?americansrebuildingneworleans\.com
+https?:\/\/([^\/]*\.)?amicizia-incontri\.bb22\.info
+https?:\/\/([^\/]*\.)?amico-maria\.freespase\.info
+https?:\/\/([^\/]*\.)?amidnitesunset\.blogspot\.com
+https?:\/\/([^\/]*\.)?amino-vera\.blogspot\.com
+https?:\/\/([^\/]*\.)?amira\.phpbbx\.de
+https?:\/\/([^\/]*\.)?amjrs\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?amoxil-500mg\.micrositehosting\.info
+https?:\/\/([^\/]*\.)?ampposo\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?amstre\.com
+https?:\/\/([^\/]*\.)?amyhunt\.com
+https?:\/\/([^\/]*\.)?amyjkb\.blogspot\.com
+https?:\/\/([^\/]*\.)?anacondasex\.info
+https?:\/\/([^\/]*\.)?anal-bareback-cum-fucking-shot\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?anal-coks-fuck-huge-mega\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?anal-cum-farting\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?anal-cum-fuck\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?anal-dildo-bondage\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?anal-ebony-free-pic\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?anal-ebony-fucking\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?anal-first-pic-time\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?anal-first-time\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?anal-free-mature-sex\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?anal-g\.com
+https?:\/\/([^\/]*\.)?anal-gang-bang-xxx\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?anal-hard-male\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?anal-hardcore-max-sex\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?anal-painful-virgin\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?anal-self-penetration\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?anal-sex-teen-tgp\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?anal-sex-video-x-g-g\.blogspot\.com
+https?:\/\/([^\/]*\.)?anal-sex-virgin\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?anal-shemale-site\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?analsexeum\.blogspot\.com
+https?:\/\/([^\/]*\.)?anath\.phpbbx\.de
+https?:\/\/([^\/]*\.)?anbipbm\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?andrewsaluk\.com
+https?:\/\/([^\/]*\.)?andy-roddick-dick\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?angelcakez\.blogspot\.com
+https?:\/\/([^\/]*\.)?angry-sister\.blogspot\.com
+https?:\/\/([^\/]*\.)?anicke\.republika\.pl
+https?:\/\/([^\/]*\.)?anime-art-gay\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?anime-free-hardcore-info-remember\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?anime-porn-clip-blog5a7\.blogspot\.com
+https?:\/\/([^\/]*\.)?ann-angel-tpi\.blogspot\.com
+https?:\/\/([^\/]*\.)?anna-morgan\.blogspot\.com
+https?:\/\/([^\/]*\.)?annqy\.szm\.sk
+https?:\/\/([^\/]*\.)?annugel--h\.blogspot\.com
+https?:\/\/([^\/]*\.)?annuncio-lavoro-milano\.host24h\.info
+https?:\/\/([^\/]*\.)?annuncio-lavoro-segretaria\.freehostss\.info
+https?:\/\/([^\/]*\.)?annuncio-online\.heroez\.info
+https?:\/\/([^\/]*\.)?anteyi\.cn
+https?:\/\/([^\/]*\.)?anthemboy8\.blogspot\.com
+https?:\/\/([^\/]*\.)?anti-aging-skin\.hotmail\.ru
+https?:\/\/([^\/]*\.)?anti_agin_skin\.chat\.ru
+https?:\/\/([^\/]*\.)?anti_aging_skin\.chat\.ru
+https?:\/\/([^\/]*\.)?antidepressants\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?anus-lick-right-way\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?anw66\.blogspot\.com
+https?:\/\/([^\/]*\.)?anxiety\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?anylight4u\.com
+https?:\/\/([^\/]*\.)?aosk\.com
+https?:\/\/([^\/]*\.)?apesapoppin\.blogspot\.com
+https?:\/\/([^\/]*\.)?apextwin\.ifrance\.com
+https?:\/\/([^\/]*\.)?apextwin\.php5\.cz
+https?:\/\/([^\/]*\.)?aponte\.net
+https?:\/\/([^\/]*\.)?appartamento-roma-vacanza\.ll11\.info
+https?:\/\/([^\/]*\.)?applyforit\.ucsd\.edu
+https?:\/\/([^\/]*\.)?apxgmlp\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?arbundar\.forumzen\.com
+https?:\/\/([^\/]*\.)?arcade\.ya\.com
+https?:\/\/([^\/]*\.)?areaseo\.com
+https?:\/\/([^\/]*\.)?arent-boot-made-these-walkin\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?argentina-gay-travel\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?ariella\.phpbbx\.de
+https?:\/\/([^\/]*\.)?arielle\.phpbbx\.de
+https?:\/\/([^\/]*\.)?arinastes\.com
+https?:\/\/([^\/]*\.)?aristocort\.4\.pl
+https?:\/\/([^\/]*\.)?arizonamortgage-x\.com
+https?:\/\/([^\/]*\.)?arjj2\.szm\.sk
+https?:\/\/([^\/]*\.)?arketon24\.blogspot\.com
+https?:\/\/([^\/]*\.)?armyanch\.galeon\.com
+https?:\/\/([^\/]*\.)?arosson\.com
+https?:\/\/([^\/]*\.)?arsrz\.szm\.sk
+https?:\/\/([^\/]*\.)?art-xxx\.com
+https?:\/\/([^\/]*\.)?artbennett\.net
+https?:\/\/([^\/]*\.)?arthuriacasino\.com
+https?:\/\/([^\/]*\.)?artnposter\.com
+https?:\/\/([^\/]*\.)?arwuudes\.forumzen\.com
+https?:\/\/([^\/]*\.)?arwuuzet\.forumzen\.com
+https?:\/\/([^\/]*\.)?aryls\.info
+https?:\/\/([^\/]*\.)?asaearh\.blogspot\.com
+https?:\/\/([^\/]*\.)?asaia\.blogspot\.com
+https?:\/\/([^\/]*\.)?asas3\.com
+https?:\/\/([^\/]*\.)?ascht\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?asdiaalr\.forumzen\.com
+https?:\/\/([^\/]*\.)?aselfbas\.forumzen\.com
+https?:\/\/([^\/]*\.)?asfreyl\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ashkenazi\.phpbbx\.de
+https?:\/\/([^\/]*\.)?ashlee--serena\.freeinsite\.net
+https?:\/\/([^\/]*\.)?ashlee-clip-free-hand-job\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?asian-bang-gang\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?asian-cum-sucker\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?asian-download-free-porn-video\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?asian-facial\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?asian-fucking-man-woman\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?asian-girl-anal\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?asian-giving-blow-job\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?asian-mmf\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?asian-porn-clip-info6g5\.blogspot\.com
+https?:\/\/([^\/]*\.)?asian-pussysjy\.blogspot\.com
+https?:\/\/([^\/]*\.)?asian-spread-leg\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?asian-teens\.freeinsite\.net
+https?:\/\/([^\/]*\.)?asiansexpvx\.blogspot\.com
+https?:\/\/([^\/]*\.)?asjnquaq\.com
+https?:\/\/([^\/]*\.)?asnmeq\.com
+https?:\/\/([^\/]*\.)?asrendes\.forumzen\.com
+https?:\/\/([^\/]*\.)?asricrac\.forumzen\.com
+https?:\/\/([^\/]*\.)?ass-bare-screensaver-sexy\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?ass-big-black-pussy\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?ass-big-free-woman\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?ass-bitch-hot\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?ass-cock-large-nice-tit\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?ass-cum-gay-hole\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?ass-cute-fat\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?ass-day-great-its-somebodys-whop\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?ass-dildo-in-man-use\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?ass-free-huge-movie-phat-tit\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?ass-free-mature-photo\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?ass-free-naked\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?ass-fucked-porn-star\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?ass-hit-up-yo\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?ass-hole-test\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?ass-lick-slut-that\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?ass-man-photo-rumprater-com-woman\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?ass-naked-pic-woman-young\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?ass-sa\.com
+https?:\/\/([^\/]*\.)?ass-traffic-thumb\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?assfilled-cofon\.blogspot\.com
+https?:\/\/([^\/]*\.)?assfucking-video\.hereandnow0\.com
+https?:\/\/([^\/]*\.)?assicurazione-moto\.freehostss\.info
+https?:\/\/([^\/]*\.)?asslick-free\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?associate1degree\.chat\.ru
+https?:\/\/([^\/]*\.)?assparade-com-cdr6rm3\.blogspot\.com
+https?:\/\/([^\/]*\.)?astmiv\.com
+https?:\/\/([^\/]*\.)?astsam\.com
+https?:\/\/([^\/]*\.)?aswsu-ddp\.wsu\.edu
+https?:\/\/([^\/]*\.)?atar5\.szm\.sk
+https?:\/\/([^\/]*\.)?atashi-tada\.blogspot\.com
+https?:\/\/([^\/]*\.)?atchina\.com\.cn
+https?:\/\/([^\/]*\.)?atenololhqs\.blogspot\.com
+https?:\/\/([^\/]*\.)?atetech\.com\.cn
+https?:\/\/([^\/]*\.)?athenaindia\.com
+https?:\/\/([^\/]*\.)?ativan\.hav\.pl
+https?:\/\/([^\/]*\.)?ativan1\.skocz\.net
+https?:\/\/([^\/]*\.)?ativans\.eu\.tf
+https?:\/\/([^\/]*\.)?atkmodels-com-g2mc2j\.blogspot\.com
+https?:\/\/([^\/]*\.)?atkmodels-h6\.blogspot\.com
+https?:\/\/([^\/]*\.)?atmoc\.com
+https?:\/\/([^\/]*\.)?atrapy\.pl
+https?:\/\/([^\/]*\.)?auabkc3\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?audibookclub\.info
+https?:\/\/([^\/]*\.)?audition-mature-sexy-video-woman\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?audx4\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?auejds\.com
+https?:\/\/([^\/]*\.)?aufx8\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?augmentin\.4\.pl
+https?:\/\/([^\/]*\.)?augmentinbuy\.megapage\.de
+https?:\/\/([^\/]*\.)?augmentinbuygeneric\.playsite\.de
+https?:\/\/([^\/]*\.)?augmentincheapbuy\.mine\.at
+https?:\/\/([^\/]*\.)?augmentincheapgeneric\.vacations\.to
+https?:\/\/([^\/]*\.)?augmentingeneric\.dive\.to
+https?:\/\/([^\/]*\.)?aumkryl\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?auntmia-ivmo1ckhbf\.blogspot\.com
+https?:\/\/([^\/]*\.)?auqkz\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?aurar\.info
+https?:\/\/([^\/]*\.)?aurney\.blogspot\.com
+https?:\/\/([^\/]*\.)?aurora-snow-double-anal\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?auto-insurance-2007\.com
+https?:\/\/([^\/]*\.)?auto-insurance-quote\.100freemb\.com
+https?:\/\/([^\/]*\.)?auto-occasioni\.bb22\.info
+https?:\/\/([^\/]*\.)?autoere\.info
+https?:\/\/([^\/]*\.)?autoinsurancevyo\.blogspot\.com
+https?:\/\/([^\/]*\.)?automobileliberty\.cn
+https?:\/\/([^\/]*\.)?ava-devine-friend-hot-mom\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?avalonhyip\.com
+https?:\/\/([^\/]*\.)?avenue-x\.cn
+https?:\/\/([^\/]*\.)?avoidcar\.info
+https?:\/\/([^\/]*\.)?awardspace\.biz
+https?:\/\/([^\/]*\.)?awardspace\.info
+https?:\/\/([^\/]*\.)?awerda\.com
+https?:\/\/([^\/]*\.)?aweu\.cabspace\.com
+https?:\/\/([^\/]*\.)?axfa5\.szm\.sk
+https?:\/\/([^\/]*\.)?axnc0\.szm\.sk
+https?:\/\/([^\/]*\.)?axqui\.szm\.sk
+https?:\/\/([^\/]*\.)?axtu7\.szm\.sk
+https?:\/\/([^\/]*\.)?ayann\.dl\.pl
+https?:\/\/([^\/]*\.)?aynippa\.blogspot\.com
+https?:\/\/([^\/]*\.)?azn-chickadee\.blogspot\.com
+https?:\/\/([^\/]*\.)?azu-erlove\.blogspot\.com
+https?:\/\/([^\/]*\.)?azur3skye\.blogspot\.com
+https?:\/\/([^\/]*\.)?azzacash\.com
+https?:\/\/([^\/]*\.)?b-b-free-hentai-movie-j\.blogspot\.com
+https?:\/\/([^\/]*\.)?b-d-download-porn-movie-n\.blogspot\.com
+https?:\/\/([^\/]*\.)?b\.cn01\.hn\.org
+https?:\/\/([^\/]*\.)?babe-cam-filipina-web\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?babe-dutch-erotic-lingerie\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?babe-forum-picture-porn-star\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?babe-hot-mature\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?babesglamour-com-jotut\.blogspot\.com
+https?:\/\/([^\/]*\.)?babesglamour-com-mp21gz\.blogspot\.com
+https?:\/\/([^\/]*\.)?babibian\.dl\.pl
+https?:\/\/([^\/]*\.)?babooth\.ifrance\.com
+https?:\/\/([^\/]*\.)?babyhere\.net
+https?:\/\/([^\/]*\.)?bachelor1degree\.chat\.ru
+https?:\/\/([^\/]*\.)?back-bare-cum-dripping-fucked-humiliated-pussy-wealthy-woman\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?backroom-facial-margarita\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?bad-butt-byron-rub\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?bad-butt-byrons-rub\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?bad-credit-home-loanksl\.blogspot\.com
+https?:\/\/([^\/]*\.)?badassteens-com-gnvrh6\.blogspot\.com
+https?:\/\/([^\/]*\.)?badassteens-com-gyhb23dyw\.blogspot\.com
+https?:\/\/([^\/]*\.)?badgirlsblog-com-dcfmx8n2p\.blogspot\.com
+https?:\/\/([^\/]*\.)?badipex\.gog\.pl
+https?:\/\/([^\/]*\.)?bahatoca\.org
+https?:\/\/([^\/]*\.)?baikal-guide\.com
+https?:\/\/([^\/]*\.)?baikal-hotel\.info
+https?:\/\/([^\/]*\.)?baikal-shop\.com
+https?:\/\/([^\/]*\.)?baikal-tour\.biz
+https?:\/\/([^\/]*\.)?baikalguide\.com
+https?:\/\/([^\/]*\.)?baikalshop\.info
+https?:\/\/([^\/]*\.)?bakadeshi\.ifrance\.com
+https?:\/\/([^\/]*\.)?bakamandy\.blogspot\.com
+https?:\/\/([^\/]*\.)?bambulka\.info
+https?:\/\/([^\/]*\.)?bamigreenhouse\.com\.cn
+https?:\/\/([^\/]*\.)?bamima\.com
+https?:\/\/([^\/]*\.)?bandaoti\.dzsc\.com
+https?:\/\/([^\/]*\.)?bang-clip-gang-gang-movie\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?bang-gallery-gang-mature-woman\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?bang-gang-sex-tokyo\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?bank-of-america-credit-cardtja\.blogspot\.com
+https?:\/\/([^\/]*\.)?bank-of-fetish-resource\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?banns\.info
+https?:\/\/([^\/]*\.)?baqaek9\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?baquma\.com
+https?:\/\/([^\/]*\.)?bareback-fuck-gay\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?barefootmaniacs-com-rpw1i1\.blogspot\.com
+https?:\/\/([^\/]*\.)?barely18-teens-com-sin\.blogspot\.com
+https?:\/\/([^\/]*\.)?barrystickets\.com
+https?:\/\/([^\/]*\.)?bartik\.asp2\.cz
+https?:\/\/([^\/]*\.)?barulena\.jconserv\.net
+https?:\/\/([^\/]*\.)?basalvar\.dl\.pl
+https?:\/\/([^\/]*\.)?basdeler\.su\.pl
+https?:\/\/([^\/]*\.)?basdombo\.dl\.pl
+https?:\/\/([^\/]*\.)?baslachi\.lightbb\.com
+https?:\/\/([^\/]*\.)?baslalhi\.myrealboard\.com
+https?:\/\/([^\/]*\.)?baslarol\.dl\.pl
+https?:\/\/([^\/]*\.)?basmonzel\.dl\.pl
+https?:\/\/([^\/]*\.)?baspaser\.zikforum\.com
+https?:\/\/([^\/]*\.)?baspasrac\.dl\.pl
+https?:\/\/([^\/]*\.)?baspasvi\.cultureforum\.net
+https?:\/\/([^\/]*\.)?basracchi\.dl\.pl
+https?:\/\/([^\/]*\.)?basteg\.com
+https?:\/\/([^\/]*\.)?bastim\.com
+https?:\/\/([^\/]*\.)?bastnecli\.frbb\.net
+https?:\/\/([^\/]*\.)?bastre\.com
+https?:\/\/([^\/]*\.)?bastru\.com
+https?:\/\/([^\/]*\.)?basuma\.com
+https?:\/\/([^\/]*\.)?bath-hardcore-teen\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?bath-product\.hotmail\.ru
+https?:\/\/([^\/]*\.)?bath-product\.pochta\.ru
+https?:\/\/([^\/]*\.)?bath_product\.chat\.ru
+https?:\/\/([^\/]*\.)?bathroom-fuck\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?bbcialis\.ovp\.pl
+https?:\/\/([^\/]*\.)?bbfast\.com
+https?:\/\/([^\/]*\.)?bbndsxtg-teensite\.blogspot\.com
+https?:\/\/([^\/]*\.)?bbs\.cuesta\.edu
+https?:\/\/([^\/]*\.)?bbsporn\.com
+https?:\/\/([^\/]*\.)?bbuybaliumonline\.ovp\.pl
+https?:\/\/([^\/]*\.)?bbuycialisonline\.ovp\.pl
+https?:\/\/([^\/]*\.)?bbuylevitraonline\.ovp\.pl
+https?:\/\/([^\/]*\.)?bbuytram\.blogcu\.com
+https?:\/\/([^\/]*\.)?bbuytramadolonline\.ovp\.pl
+https?:\/\/([^\/]*\.)?bbuyviagraonlin\.forumlivre\.com
+https?:\/\/([^\/]*\.)?bbw-busty\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?bbw-club-in-san-diego\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?bbw-old\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?bbw-porn-clip-infotir\.blogspot\.com
+https?:\/\/([^\/]*\.)?bcam8\.szm\.sk
+https?:\/\/([^\/]*\.)?bcdh\.cn
+https?:\/\/([^\/]*\.)?bcialis\.c24\.pl
+https?:\/\/([^\/]*\.)?bcxz8\.szm\.sk
+https?:\/\/([^\/]*\.)?bdsm-lesbian-video\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?bdsm-personals-houston\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?bdsm-toy\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?bdsm-video\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?bdsm-vintage\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?bdsmvideos-net-wb55nc\.blogspot\.com
+https?:\/\/([^\/]*\.)?bdsmvideos-net-wfa5qu\.blogspot\.com
+https?:\/\/([^\/]*\.)?bdsmvideos-net-wvckcgq2o\.blogspot\.com
+https?:\/\/([^\/]*\.)?beaffaired\.com
+https?:\/\/([^\/]*\.)?bear-build-gay\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?bear-chubby-young\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?bear-terry\.blogspot\.com
+https?:\/\/([^\/]*\.)?beastiality-live\.com
+https?:\/\/([^\/]*\.)?beautiful-ass-pic\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?beautiful-blonde-pole-dancer\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?beautifulzdrawing\.sex-systems\.com
+https?:\/\/([^\/]*\.)?beautyass-com-e1ca\.blogspot\.com
+https?:\/\/([^\/]*\.)?becloudsiss\.thehostcity\.com
+https?:\/\/([^\/]*\.)?bedspread-king\.keckins\.be
+https?:\/\/([^\/]*\.)?begcrucial\.justfree\.com
+https?:\/\/([^\/]*\.)?beginninghouse\.com
+https?:\/\/([^\/]*\.)?begot\.info
+https?:\/\/([^\/]*\.)?beijing-door\.cn
+https?:\/\/([^\/]*\.)?beijingimpression\.com
+https?:\/\/([^\/]*\.)?bekahboo3\.blogspot\.com
+https?:\/\/([^\/]*\.)?beldam\.dns1\.us
+https?:\/\/([^\/]*\.)?bemix\.info
+https?:\/\/([^\/]*\.)?benixon\.dl\.pl
+https?:\/\/([^\/]*\.)?benoit-r86\.blogspot\.com
+https?:\/\/([^\/]*\.)?benson-g68a\.blogspot\.com
+https?:\/\/([^\/]*\.)?benz-h51\.blogspot\.com
+https?:\/\/([^\/]*\.)?beqy\.org
+https?:\/\/([^\/]*\.)?berenupa\.info
+https?:\/\/([^\/]*\.)?berkeley-mdi56f\.blogspot\.com
+https?:\/\/([^\/]*\.)?berlin-o3g\.blogspot\.com
+https?:\/\/([^\/]*\.)?bernie-b18\.blogspot\.com
+https?:\/\/([^\/]*\.)?berrycow\.blogspot\.com
+https?:\/\/([^\/]*\.)?beryl-c3\.blogspot\.com
+https?:\/\/([^\/]*\.)?best-hotels-inns\.com
+https?:\/\/([^\/]*\.)?best-porn-clip-zone0mp\.blogspot\.com
+https?:\/\/([^\/]*\.)?best2006\.info
+https?:\/\/([^\/]*\.)?best568\.com
+https?:\/\/([^\/]*\.)?bestaftor\.com
+https?:\/\/([^\/]*\.)?bestallmed\.info
+https?:\/\/([^\/]*\.)?bestbuyonlinebooks\.com
+https?:\/\/([^\/]*\.)?bestcityhal\.com
+https?:\/\/([^\/]*\.)?bestcyberfish\.com
+https?:\/\/([^\/]*\.)?bestfreegift\.com
+https?:\/\/([^\/]*\.)?bestgames-winner\.com
+https?:\/\/([^\/]*\.)?besthallet\.com
+https?:\/\/([^\/]*\.)?bestinternetexplorer\.info
+https?:\/\/([^\/]*\.)?bestlowmortgagerates\.com
+https?:\/\/([^\/]*\.)?bestmaiden\.com
+https?:\/\/([^\/]*\.)?bestmercedesbez\.info
+https?:\/\/([^\/]*\.)?bestmitsubishiparts\.info
+https?:\/\/([^\/]*\.)?bestmp3online\.com
+https?:\/\/([^\/]*\.)?bestmp3online\.net
+https?:\/\/([^\/]*\.)?bestofe\.com
+https?:\/\/([^\/]*\.)?bestonline-medication\.com
+https?:\/\/([^\/]*\.)?bestonline-shopping\.com
+https?:\/\/([^\/]*\.)?bestorlean\.com
+https?:\/\/([^\/]*\.)?bestpricebentley\.info
+https?:\/\/([^\/]*\.)?bestsellsite\.com
+https?:\/\/([^\/]*\.)?bestxxxanal-1\.tripod\.com
+https?:\/\/([^\/]*\.)?bestyourown\.info
+https?:\/\/([^\/]*\.)?beta-dg174ivc\.blogspot\.com
+https?:\/\/([^\/]*\.)?beth-t6h6\.blogspot\.com
+https?:\/\/([^\/]*\.)?bethany-ezjn\.blogspot\.com
+https?:\/\/([^\/]*\.)?betsie-w4080\.blogspot\.com
+https?:\/\/([^\/]*\.)?betsy-rgxm2e\.blogspot\.com
+https?:\/\/([^\/]*\.)?better\.ws
+https?:\/\/([^\/]*\.)?betty-gy\.blogspot\.com
+https?:\/\/([^\/]*\.)?beverly-hax82jc3md\.blogspot\.com
+https?:\/\/([^\/]*\.)?bevjy\.szm\.sk
+https?:\/\/([^\/]*\.)?beyonce-knowles-nude\.blogspot\.com
+https?:\/\/([^\/]*\.)?bfekd\.szm\.sk
+https?:\/\/([^\/]*\.)?bfgtxs4\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?bfi-k5xk7bnu\.blogspot\.com
+https?:\/\/([^\/]*\.)?bfnh2\.szm\.sk
+https?:\/\/([^\/]*\.)?bfqn\.com
+https?:\/\/([^\/]*\.)?bfvsa\.szm\.sk
+https?:\/\/([^\/]*\.)?bgpkvcr\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?bhncvw-free-porn\.blogspot\.com
+https?:\/\/([^\/]*\.)?bhqay\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?bi-britney-spears-video-download\.blogspot\.com
+https?:\/\/([^\/]*\.)?bi-whales\.blogspot\.com
+https?:\/\/([^\/]*\.)?bi-xxx-video-download\.blogspot\.com
+https?:\/\/([^\/]*\.)?bianca-i7yj\.blogspot\.com
+https?:\/\/([^\/]*\.)?bianpinqi\.dzsc\.com
+https?:\/\/([^\/]*\.)?bicx7\.szm\.sk
+https?:\/\/([^\/]*\.)?bid-sohardcore-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?bidsex\.net
+https?:\/\/([^\/]*\.)?big-big-clit-tit\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?big-bitch-booty-fucked-getting\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?big-black-cock-movie-clip\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?big-black-cock-pic\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?big-black-dick-fat-long\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?big-blonde-mature-tit\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?big-blonde-teen-tit\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?big-body-fuck\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?big-boob-huge-large\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?big-bouncing-boob-movie\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?big-butt-shemale\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?big-cock-gay-guy-have\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?big-cock-hard-sex\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?big-cum-cum-shot\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?big-cum-movie-swallow-tit-xxx\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?big-dick-fuck-hot-love-sexy-shemale-that\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?big-ebony-free-gallery-tit\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?big-fat-boob\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?big-free-lesbian-movie-online-porn\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?big-huge-gigantic-boob\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?big-leg-babes\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?big-leg-nice\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?big-okfl\.blogspot\.com
+https?:\/\/([^\/]*\.)?big-strap-on-dildo\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?big-tit-round-ass-jasmine\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?big-tit-round-ass-maria\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?big-tit-round-ass-picture\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?big-tits\.100freemb\.com
+https?:\/\/([^\/]*\.)?big-titted-bitch\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?big-titts-round-ass\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?big-young-cock\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?big\.de\.com
+https?:\/\/([^\/]*\.)?bigapple\.dtdns\.net
+https?:\/\/([^\/]*\.)?bigassadventure-com-g4lvyk\.blogspot\.com
+https?:\/\/([^\/]*\.)?bigbird-aus\.blogspot\.com
+https?:\/\/([^\/]*\.)?bigbreastlovers-com-suqoq\.blogspot\.com
+https?:\/\/([^\/]*\.)?bigcockteenaddiction-com-km\.blogspot\.com
+https?:\/\/([^\/]*\.)?bigcockteenaddiction-com-kpqf40\.blogspot\.com
+https?:\/\/([^\/]*\.)?bigdog-b14q6mwev\.blogspot\.com
+https?:\/\/([^\/]*\.)?bigfoot-c7l\.blogspot\.com
+https?:\/\/([^\/]*\.)?bigfreesex-com-i2csy2\.blogspot\.com
+https?:\/\/([^\/]*\.)?bigfreesex-com-subub\.blogspot\.com
+https?:\/\/([^\/]*\.)?biggest-cock-thickest\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?biggest-dildo-fuck-world\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?biggiebestparis\.com
+https?:\/\/([^\/]*\.)?biglietti-auguri\.net
+https?:\/\/([^\/]*\.)?biglietto-augurio\.freehostss\.info
+https?:\/\/([^\/]*\.)?bigmac-detr0i6y\.blogspot\.com
+https?:\/\/([^\/]*\.)?bigman-tycdhe62d\.blogspot\.com
+https?:\/\/([^\/]*\.)?bigmouthfuls-com-rvl7ep\.blogspot\.com
+https?:\/\/([^\/]*\.)?bignaturals-com-w0\.blogspot\.com
+https?:\/\/([^\/]*\.)?bigpenis\.digitalzones\.com
+https?:\/\/([^\/]*\.)?bigtitpatrol-com-bub8db06d\.blogspot\.com
+https?:\/\/([^\/]*\.)?bigtitsfans-com-rxc3ya\.blogspot\.com
+https?:\/\/([^\/]*\.)?bigtitsroundasses-com-b6auqkd60\.blogspot\.com
+https?:\/\/([^\/]*\.)?bigtitsroundasses-com-redeg\.blogspot\.com
+https?:\/\/([^\/]*\.)?bigtitsroundasses-com-rj85t35x3\.blogspot\.com
+https?:\/\/([^\/]*\.)?biib4\.szm\.sk
+https?:\/\/([^\/]*\.)?bike-boot-dirt-riding\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?bike-night\.grimgoe\.be
+https?:\/\/([^\/]*\.)?bikini-wax\.phpbb2\.us
+https?:\/\/([^\/]*\.)?bikinixxx-777now\.tripod\.com
+https?:\/\/([^\/]*\.)?bilbo-ea47j\.blogspot\.com
+https?:\/\/([^\/]*\.)?billy-r4negy1zwm\.blogspot\.com
+https?:\/\/([^\/]*\.)?binky-hu\.blogspot\.com
+https?:\/\/([^\/]*\.)?bio\.research\.ucsc\.edu
+https?:\/\/([^\/]*\.)?biopharmasite\.biz
+https?:\/\/([^\/]*\.)?biperq\.com
+https?:\/\/([^\/]*\.)?bird-iay2s\.blogspot\.com
+https?:\/\/([^\/]*\.)?birdie\.101freehost\.com
+https?:\/\/([^\/]*\.)?birth-control\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?bisexual-cartoon-sex\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?bisexuals-cyber-fuck-horny-lesbian-lezzies-sex\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?bisson\.onthenet\.as
+https?:\/\/([^\/]*\.)?bit-tit-lesbian\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?bitch-fat-hot\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?bituka\.com
+https?:\/\/([^\/]*\.)?bivxr\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?bizaffiliatecenter\.com
+https?:\/\/([^\/]*\.)?bizarre-love-triangle-lyric-by-frente\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?bizarre-sex-movie\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?bizhat\.com
+https?:\/\/([^\/]*\.)?bizhome\.org
+https?:\/\/([^\/]*\.)?bj-trj\.com
+https?:\/\/([^\/]*\.)?bjaoyunhui\.com
+https?:\/\/([^\/]*\.)?bjcee\.com
+https?:\/\/([^\/]*\.)?bjicp\.com
+https?:\/\/([^\/]*\.)?bjicp\.freewebpage\.org
+https?:\/\/([^\/]*\.)?bjicp\.net
+https?:\/\/([^\/]*\.)?bjicp\.org
+https?:\/\/([^\/]*\.)?bjjinhan\.com
+https?:\/\/([^\/]*\.)?bjlzhh\.com
+https?:\/\/([^\/]*\.)?bjocmc3\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?bjqmzx\.com
+https?:\/\/([^\/]*\.)?bjrfinfo\.com
+https?:\/\/([^\/]*\.)?bjsscc\.com\.cn
+https?:\/\/([^\/]*\.)?bjtranslate\.com
+https?:\/\/([^\/]*\.)?bjwczx\.com
+https?:\/\/([^\/]*\.)?bjxiongfei\.com
+https?:\/\/([^\/]*\.)?bjxunda\.com
+https?:\/\/([^\/]*\.)?bjzktd\.com
+https?:\/\/([^\/]*\.)?bkclamcp\.t35\.com
+https?:\/\/([^\/]*\.)?bksar\.szm\.sk
+https?:\/\/([^\/]*\.)?bkzor\.szm\.sk
+https?:\/\/([^\/]*\.)?black-amateur-movie\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?black-asian-anal\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?black-boob-sex\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?black-booty-movies-com-i0\.blogspot\.com
+https?:\/\/([^\/]*\.)?black-butt-fat-gay-man\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?black-chick-fuck\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?black-chubby-ebony\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?black-clip-free-full-porn-blog4t5\.blogspot\.com
+https?:\/\/([^\/]*\.)?black-cock-facial\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?black-cock-monster\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?black-cock-white-cunt\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?black-cum-shot-movie\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?black-domination-female-free-picture-teen\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?black-ebony-free-spreading-tgp\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?black-fat-boob\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?black-free-gay-man-movie\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?black-gay-club\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?black-gay-sex-site\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?black-gay-teen-sex\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?black-hoe-hardcore-sex-gallery\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?black-hoe-that-suck-dick\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?black-jack-4u\.net
+https?:\/\/([^\/]*\.)?black-jack-black\.blogspot\.com
+https?:\/\/([^\/]*\.)?black-jacks\.us
+https?:\/\/([^\/]*\.)?black-jeweler\.org
+https?:\/\/([^\/]*\.)?black-leg-open-wide\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?black-lesbian-story\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?black-man-fucking-white-sluts\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?black-monster-boob\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?black-monster-cock-mpeg\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?black-on-blonde-sex-picture\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?black-porn-clip-news8bn\.blogspot\.com
+https?:\/\/([^\/]*\.)?black-white-boob\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?black-wide-leg-pants\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?black-woman-sucking-dick\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?blackmisheru\.50webs\.org
+https?:\/\/([^\/]*\.)?blade\.host-page\.com
+https?:\/\/([^\/]*\.)?blade1\.host-page\.com
+https?:\/\/([^\/]*\.)?blade10\.host-page\.com
+https?:\/\/([^\/]*\.)?blade2\.host-page\.com
+https?:\/\/([^\/]*\.)?blade4\.host-page\.com
+https?:\/\/([^\/]*\.)?blade5\.host-page\.com
+https?:\/\/([^\/]*\.)?blade6\.host-page\.com
+https?:\/\/([^\/]*\.)?blade7\.host-page\.com
+https?:\/\/([^\/]*\.)?blade8\.host-page\.com
+https?:\/\/([^\/]*\.)?blade9\.host-page\.com
+https?:\/\/([^\/]*\.)?blagoslovenie\.rovno\.ua
+https?:\/\/([^\/]*\.)?blanca-tf50a\.blogspot\.com
+https?:\/\/([^\/]*\.)?blapt\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?blathe\.com
+https?:\/\/([^\/]*\.)?blazer-wwn\.blogspot\.com
+https?:\/\/([^\/]*\.)?blbdg\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?blboys-com-wsq27\.blogspot\.com
+https?:\/\/([^\/]*\.)?blbthxw\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?blendermedia\.com
+https?:\/\/([^\/]*\.)?blevitra\.ovp\.pl
+https?:\/\/([^\/]*\.)?blmurphy\.dl\.pl
+https?:\/\/([^\/]*\.)?blog-broken-leg\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?blog\.chinaz\.com
+https?:\/\/([^\/]*\.)?blog\.donews\.com
+https?:\/\/([^\/]*\.)?blog\.welover\.org
+https?:\/\/([^\/]*\.)?blog\.yam\.com
+https?:\/\/([^\/]*\.)?blog67\.fc2\.com
+https?:\/\/([^\/]*\.)?blond\.12gbfree\.com
+https?:\/\/([^\/]*\.)?blonde-bald-pussy\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?blonde-blow-job-mpeg\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?blonde-blow-job-tgp\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?blonde-boob-xxx\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?blonde-color-hair-platinum\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?blonde-cunt-hair\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?blonde-dumb-not\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?blonde-firework-joke\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?blonde-lesbian-picture\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?blonde-long-mature\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?blonde-model-twin\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?blonde-model-wallpaper\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?blonde-teen-bitch\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?blonde-who-fuck\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?blonde-with-pink-dildo\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?blonde-xxx-trailer\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?blondie-g7hbdel\.blogspot\.com
+https?:\/\/([^\/]*\.)?blondy-zipper\.iespana\.es
+https?:\/\/([^\/]*\.)?blood-clots-cramp-leg\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?blotrer\.com
+https?:\/\/([^\/]*\.)?blow-deep-free-job-throat\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?blow-free-gallery-in-job-place-public\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?blow-gagging-job-pissing-sex\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?blow-job-movie-monster\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?blow-job-video-h-g-b\.blogspot\.com
+https?:\/\/([^\/]*\.)?blowy\.info
+https?:\/\/([^\/]*\.)?blskill\.dl\.pl
+https?:\/\/([^\/]*\.)?blue-phentermine\.coz\.in
+https?:\/\/([^\/]*\.)?bluebird-ki1h06\.blogspot\.com
+https?:\/\/([^\/]*\.)?bluethumbs-com-wn7zce4\.blogspot\.com
+https?:\/\/([^\/]*\.)?blurs\.info
+https?:\/\/([^\/]*\.)?blurzed\.com
+https?:\/\/([^\/]*\.)?bmoer\.szm\.sk
+https?:\/\/([^\/]*\.)?bmoon-tech\.com
+https?:\/\/([^\/]*\.)?bmzz6\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?bnhaq\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?bnme5\.szm\.sk
+https?:\/\/([^\/]*\.)?bnsal\.szm\.sk
+https?:\/\/([^\/]*\.)?bo-wheeling\.blogspot\.com
+https?:\/\/([^\/]*\.)?boatf\.hostpresso\.com
+https?:\/\/([^\/]*\.)?bob-mh5rq0\.blogspot\.com
+https?:\/\/([^\/]*\.)?bobcat-asfz\.blogspot\.com
+https?:\/\/([^\/]*\.)?bobcat-qete\.blogspot\.com
+https?:\/\/([^\/]*\.)?boboczel\.fr-bb\.com
+https?:\/\/([^\/]*\.)?boboer\.heavenforum\.com
+https?:\/\/([^\/]*\.)?bocac\.blogcu\.com
+https?:\/\/([^\/]*\.)?bocalolo\.bbgraf\.com
+https?:\/\/([^\/]*\.)?bocbasdom\.su\.pl
+https?:\/\/([^\/]*\.)?bocbasget\.bbfr\.net
+https?:\/\/([^\/]*\.)?bocchiolo\.zj\.pl
+https?:\/\/([^\/]*\.)?bocerleto\.winnerforum\.net
+https?:\/\/([^\/]*\.)?bocletoget\.cultureforum\.net
+https?:\/\/([^\/]*\.)?bocmonel\.lolforum\.net
+https?:\/\/([^\/]*\.)?boctrocleto\.xa\.pl
+https?:\/\/([^\/]*\.)?bodelel\.goodbb\.net
+https?:\/\/([^\/]*\.)?bodsforthemods-com-txb\.blogspot\.com
+https?:\/\/([^\/]*\.)?body-jewellery-piercing-4u\.com
+https?:\/\/([^\/]*\.)?bodybuilding\.ncedly\.be
+https?:\/\/([^\/]*\.)?bof-xxxvogue-net\.blogspot\.com
+https?:\/\/([^\/]*\.)?bofuno-free-amateur-video\.blogspot\.com
+https?:\/\/([^\/]*\.)?bogetric\.td\.pl
+https?:\/\/([^\/]*\.)?bolds\.info
+https?:\/\/([^\/]*\.)?bolgatalt\.naturalforum\.net
+https?:\/\/([^\/]*\.)?bolle-xeno\.keckins\.be
+https?:\/\/([^\/]*\.)?bologjack\.8tt\.org
+https?:\/\/([^\/]*\.)?bomb9\.szm\.sk
+https?:\/\/([^\/]*\.)?bon-rassi\.com
+https?:\/\/([^\/]*\.)?bondage\.coz\.in
+https?:\/\/([^\/]*\.)?bondagepaper-com-hzt1gq2iw\.blogspot\.com
+https?:\/\/([^\/]*\.)?bondich\.blogspot\.com
+https?:\/\/([^\/]*\.)?boneme-wn\.blogspot\.com
+https?:\/\/([^\/]*\.)?boneprone-com-g0h\.blogspot\.com
+https?:\/\/([^\/]*\.)?boner-dujo\.blogspot\.com
+https?:\/\/([^\/]*\.)?bong-cx0\.blogspot\.com
+https?:\/\/([^\/]*\.)?bong-tedo\.blogspot\.com
+https?:\/\/([^\/]*\.)?bonjour-toxi\.blogspot\.com
+https?:\/\/([^\/]*\.)?bonnie-pequ\.blogspot\.com
+https?:\/\/([^\/]*\.)?bonnie-t00pf3j6\.blogspot\.com
+https?:\/\/([^\/]*\.)?bonota\.blogcu\.com
+https?:\/\/([^\/]*\.)?bonozel\.dl\.pl
+https?:\/\/([^\/]*\.)?bontril\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?bontril\.1k\.pl
+https?:\/\/([^\/]*\.)?boob-dome-com-movie\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?boob-free-large-natural-teen\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?boob-little-monster-vicki\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?boob-little-monster-vicki\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?boob-movie-piqe\.blogspot\.com
+https?:\/\/([^\/]*\.)?boob-myspace-com-naked-site\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?boob-nude-pic-small\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?boob-video-bb-bb-h\.blogspot\.com
+https?:\/\/([^\/]*\.)?booble-com-orahxf\.blogspot\.com
+https?:\/\/([^\/]*\.)?booble-com-ouq\.blogspot\.com
+https?:\/\/([^\/]*\.)?booger-sure\.blogspot\.com
+https?:\/\/([^\/]*\.)?boogie-sexu\.blogspot\.com
+https?:\/\/([^\/]*\.)?boogie-wy64qty4x\.blogspot\.com
+https?:\/\/([^\/]*\.)?bookcq\.com
+https?:\/\/([^\/]*\.)?bookit-liwe\.blogspot\.com
+https?:\/\/([^\/]*\.)?boole\.cs\.iastate\.edu
+https?:\/\/([^\/]*\.)?boomer-hodo\.blogspot\.com
+https?:\/\/([^\/]*\.)?booster-leto\.blogspot\.com
+https?:\/\/([^\/]*\.)?boot-by-jessica-lyric-made-simpson-walking\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?boot-camp-fitness-georgia-summer\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?boot-camp-for-out-of-control-teen\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?boot-cranston-shoes\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?boot-davidson-harley-riding\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?boot-disk-file\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?boot-dress-womens\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?boot-i-in-like-man-rubber\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?boot-in-lancashire-maker-shoes\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?boot-made-these-video-walkin-watch\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?boot-made-these-walking-who-wrote\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?boot-outlet-timberland\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?boot-riding-supplier\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?boot-these-walking\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?bootsie-bihe\.blogspot\.com
+https?:\/\/([^\/]*\.)?bootsie-ku10yu\.blogspot\.com
+https?:\/\/([^\/]*\.)?booty-ebony-gallery\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?booty-ebony-info-remember-video\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?bootycollection-com-cf36tiy45\.blogspot\.com
+https?:\/\/([^\/]*\.)?bootycollection-com-rekiz\.blogspot\.com
+https?:\/\/([^\/]*\.)?boracboc\.su\.pl
+https?:\/\/([^\/]*\.)?borelco\.dl\.pl
+https?:\/\/([^\/]*\.)?borgshare\.org
+https?:\/\/([^\/]*\.)?borjone\.com
+https?:\/\/([^\/]*\.)?borncompany\.com
+https?:\/\/([^\/]*\.)?boryc\.com
+https?:\/\/([^\/]*\.)?boss-bitch-2\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?boss-coerced-fucking-into-wife\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?boss-suno\.blogspot\.com
+https?:\/\/([^\/]*\.)?boston-hardcore-site-myspace-com\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?boston-heqe\.blogspot\.com
+https?:\/\/([^\/]*\.)?bostvndaoe\.blogspot\.com
+https?:\/\/([^\/]*\.)?botaer\.dl\.pl
+https?:\/\/([^\/]*\.)?botast\.com
+https?:\/\/([^\/]*\.)?botrdar\.goodforum\.net
+https?:\/\/([^\/]*\.)?botrdar\.grafbb\.com
+https?:\/\/([^\/]*\.)?boulder-facial-plastic-surgery\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?bov-smut-house-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?bovaral\.naturalforum\.net
+https?:\/\/([^\/]*\.)?bowse\.info
+https?:\/\/([^\/]*\.)?bowtrol\.ventilacia\.yi\.org
+https?:\/\/([^\/]*\.)?bowtrolcoloncleanse\.vlocka\.yi\.org
+https?:\/\/([^\/]*\.)?boy-boy-gay-young\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?boysfirsttime-com-ele2y\.blogspot\.com
+https?:\/\/([^\/]*\.)?bphentermine\.c24\.pl
+https?:\/\/([^\/]*\.)?bphentermine\.ovp\.pl
+https?:\/\/([^\/]*\.)?bqtcfu7\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?braburka\.ifrance\.com
+https?:\/\/([^\/]*\.)?bradley-fitu\.blogspot\.com
+https?:\/\/([^\/]*\.)?brahma-steel-toe-boot\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?brandi-a5tds\.blogspot\.com
+https?:\/\/([^\/]*\.)?brandi-vuwi\.blogspot\.com
+https?:\/\/([^\/]*\.)?brandibelle-com-mzqj8l\.blogspot\.com
+https?:\/\/([^\/]*\.)?brandibelle-com-ti\.blogspot\.com
+https?:\/\/([^\/]*\.)?brandon-duso\.blogspot\.com
+https?:\/\/([^\/]*\.)?brandy-cnz56l\.blogspot\.com
+https?:\/\/([^\/]*\.)?brandy-dobu\.blogspot\.com
+https?:\/\/([^\/]*\.)?brasil-pire\.blogspot\.com
+https?:\/\/([^\/]*\.)?brat-nikodim\.blogspot\.com
+https?:\/\/([^\/]*\.)?braves-t7\.blogspot\.com
+https?:\/\/([^\/]*\.)?braves-tuku\.blogspot\.com
+https?:\/\/([^\/]*\.)?bravogirls-com-a7nbqd\.blogspot\.com
+https?:\/\/([^\/]*\.)?bravogirls-com-w12\.blogspot\.com
+https?:\/\/([^\/]*\.)?bravoteens-com-d0v\.blogspot\.com
+https?:\/\/([^\/]*\.)?bravovids-com-rouqs0py\.blogspot\.com
+https?:\/\/([^\/]*\.)?bravovids-r55rxyszt0\.blogspot\.com
+https?:\/\/([^\/]*\.)?brazil-butt-thong\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?brazil-gevo\.blogspot\.com
+https?:\/\/([^\/]*\.)?brazilian-butt-lift-plastic-surgery\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?brb\.pl
+https?:\/\/([^\/]*\.)?breana-foki\.blogspot\.com
+https?:\/\/([^\/]*\.)?breana-wvqscvo5u\.blogspot\.com
+https?:\/\/([^\/]*\.)?breanna-kiwu\.blogspot\.com
+https?:\/\/([^\/]*\.)?breanne-leri\.blogspot\.com
+https?:\/\/([^\/]*\.)?breeanna-quhu\.blogspot\.com
+https?:\/\/([^\/]*\.)?breiana-quhe\.blogspot\.com
+https?:\/\/([^\/]*\.)?brenda-i5z8n4zkb7\.blogspot\.com
+https?:\/\/([^\/]*\.)?brenda-rezo\.blogspot\.com
+https?:\/\/([^\/]*\.)?brenna-xivo\.blogspot\.com
+https?:\/\/([^\/]*\.)?brewster-opqnec8v\.blogspot\.com
+https?:\/\/([^\/]*\.)?brfq6\.szm\.sk
+https?:\/\/([^\/]*\.)?brian-bchd\.blogspot\.com
+https?:\/\/([^\/]*\.)?brianna-dc04k04ivu\.blogspot\.com
+https?:\/\/([^\/]*\.)?brianne-ejv40\.blogspot\.com
+https?:\/\/([^\/]*\.)?brick55\.5gbfree\.com
+https?:\/\/([^\/]*\.)?brickes\.8888mb\.com
+https?:\/\/([^\/]*\.)?bricktilemachine\.com\.cn
+https?:\/\/([^\/]*\.)?bridgette-rjc3pbx6\.blogspot\.com
+https?:\/\/([^\/]*\.)?brightflashes\.blogspot\.com
+https?:\/\/([^\/]*\.)?brionna-hl530r3fe\.blogspot\.com
+https?:\/\/([^\/]*\.)?brisbeck\.com
+https?:\/\/([^\/]*\.)?britney-spear-sexy-ass\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?britney-spears-0\.blogspot\.com
+https?:\/\/([^\/]*\.)?britney-spears-sex-video-t-j-g\.blogspot\.com
+https?:\/\/([^\/]*\.)?brittany-i7ekj3hll\.blogspot\.com
+https?:\/\/([^\/]*\.)?broadcaster-crazy-popular\.freehostss\.info
+https?:\/\/([^\/]*\.)?broadway-ow\.blogspot\.com
+https?:\/\/([^\/]*\.)?brokenbond\.blogspot\.com
+https?:\/\/([^\/]*\.)?bronc\.info
+https?:\/\/([^\/]*\.)?brooke-bejuzava\.blogspot\.com
+https?:\/\/([^\/]*\.)?brooklynn-du\.blogspot\.com
+https?:\/\/([^\/]*\.)?brooks-rare\.lkerfocu\.be
+https?:\/\/([^\/]*\.)?brplank\.ifrance\.com
+https?:\/\/([^\/]*\.)?brrddd\.org
+https?:\/\/([^\/]*\.)?bruce-egqva1m\.blogspot\.com
+https?:\/\/([^\/]*\.)?brunettesexwrl\.blogspot\.com
+https?:\/\/([^\/]*\.)?brush\.hostaim\.com
+https?:\/\/([^\/]*\.)?brutlag\.stanford\.edu
+https?:\/\/([^\/]*\.)?bryan-rdu\.blogspot\.com
+https?:\/\/([^\/]*\.)?bs21sa\.com
+https?:\/\/([^\/]*\.)?bsd-hd\.blogspot\.com
+https?:\/\/([^\/]*\.)?bsoma\.c24\.pl
+https?:\/\/([^\/]*\.)?bsoma\.ovp\.pl
+https?:\/\/([^\/]*\.)?bsri3\.szm\.sk
+https?:\/\/([^\/]*\.)?btipu\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?btix\.combasketball-tickets
+https?:\/\/([^\/]*\.)?btqvb\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?btramadol\.c24\.pl
+https?:\/\/([^\/]*\.)?bubba1-i2pblfp2m\.blogspot\.com
+https?:\/\/([^\/]*\.)?bublifuk\.php5\.cz
+https?:\/\/([^\/]*\.)?bucina\.asp2\.cz
+https?:\/\/([^\/]*\.)?buck-o1i5bt\.blogspot\.com
+https?:\/\/([^\/]*\.)?buddy-bqam83yt\.blogspot\.com
+https?:\/\/([^\/]*\.)?budget7i\.info
+https?:\/\/([^\/]*\.)?buff-com-es-gay-porn-site-l-s-g\.blogspot\.com
+https?:\/\/([^\/]*\.)?bug\.phil\.cmu\.edu
+https?:\/\/([^\/]*\.)?buildercareer\.us
+https?:\/\/([^\/]*\.)?bukicon-free-bisexual-s-b\.blogspot\.com
+https?:\/\/([^\/]*\.)?bukkake-cum-facial-shot\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?bulldog-dc86aq4l\.blogspot\.com
+https?:\/\/([^\/]*\.)?bumast\.com
+https?:\/\/([^\/]*\.)?bumins\.com
+https?:\/\/([^\/]*\.)?bunnyteens-com-clpxyq6of\.blogspot\.com
+https?:\/\/([^\/]*\.)?bunnyteens-com-gz7\.blogspot\.com
+https?:\/\/([^\/]*\.)?bupropion-hcl\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?buruan\.dl\.pl
+https?:\/\/([^\/]*\.)?business-brokers\.lkerfocu\.be
+https?:\/\/([^\/]*\.)?business-school\.hotmail\.ru
+https?:\/\/([^\/]*\.)?business-travel\.globaltr\.info
+https?:\/\/([^\/]*\.)?business1degree\.chat\.ru
+https?:\/\/([^\/]*\.)?business2school\.chat\.ru
+https?:\/\/([^\/]*\.)?businessitaly\.info
+https?:\/\/([^\/]*\.)?businesx\.atspace\.com
+https?:\/\/([^\/]*\.)?buspar\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?buspirone\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?busstopwhores-com-c0f\.blogspot\.com
+https?:\/\/([^\/]*\.)?busstopwhores-com-ki7\.blogspot\.com
+https?:\/\/([^\/]*\.)?busty-blonde-bomb-shell\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?busty-blonde-fuck\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?busty-escort-porn\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?busty-horny-milf\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?busty-little-girl\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?busty-mature-red-head\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?busty-sex-star\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?busty-super-girl\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?busty-thick-ebony\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?bustyadventures-com-oh518h8l\.blogspot\.com
+https?:\/\/([^\/]*\.)?bustyisland-com-au\.blogspot\.com
+https?:\/\/([^\/]*\.)?bustyisland-mdjgr6khy\.blogspot\.com
+https?:\/\/([^\/]*\.)?bustypassion-com-bpe84\.blogspot\.com
+https?:\/\/([^\/]*\.)?butalbital-apap\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?butalbital\.ru\.tf
+https?:\/\/([^\/]*\.)?butler-h3bpdq\.blogspot\.com
+https?:\/\/([^\/]*\.)?butseriouslyimprov\.com
+https?:\/\/([^\/]*\.)?butt-community-type-white\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?butt-face-fat-her-kong-love-picture-queen-sit\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?butt-fucking-teen\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?butt-girl-rate\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?buttons-iveta\.blogspot\.com
+https?:\/\/([^\/]*\.)?buwelch\.dl\.pl
+https?:\/\/([^\/]*\.)?buwu-admin\.blogspot\.com
+https?:\/\/([^\/]*\.)?buy-ambien-online\.presteert\.nl
+https?:\/\/([^\/]*\.)?buy-ambien\.esguay\.com
+https?:\/\/([^\/]*\.)?buy-ativan\.fil\.ph
+https?:\/\/([^\/]*\.)?buy-bontril\.contact\.cc
+https?:\/\/([^\/]*\.)?buy-carisoprodol\.presteert\.nl
+https?:\/\/([^\/]*\.)?buy-celebrex\.bigsitecity\.com
+https?:\/\/([^\/]*\.)?buy-cialis-online\.bigsitecity\.com
+https?:\/\/([^\/]*\.)?buy-cialis\.1k\.pl
+https?:\/\/([^\/]*\.)?buy-cialis\.esguay\.com
+https?:\/\/([^\/]*\.)?buy-cialis\.presteert\.nl
+https?:\/\/([^\/]*\.)?buy-cialis20\.bravehost\.com
+https?:\/\/([^\/]*\.)?buy-cialishhb\.blogspot\.com
+https?:\/\/([^\/]*\.)?buy-cialisklx\.blogspot\.com
+https?:\/\/([^\/]*\.)?buy-hydrocodone-gs\.eu\.tc
+https?:\/\/([^\/]*\.)?buy-hydrocodone-gs\.net\.tc
+https?:\/\/([^\/]*\.)?buy-hydrocodone\.esguay\.com
+https?:\/\/([^\/]*\.)?buy-hydrocodone\.presteert\.nl
+https?:\/\/([^\/]*\.)?buy-levitra\.1k\.pl
+https?:\/\/([^\/]*\.)?buy-levitra\.bravehost\.com
+https?:\/\/([^\/]*\.)?buy-lipitor\.contact\.cc
+https?:\/\/([^\/]*\.)?buy-lortab-911\.jo\.pl
+https?:\/\/([^\/]*\.)?buy-online-tramadol\.1\.forogratis\.es
+https?:\/\/([^\/]*\.)?buy-pharmacy\.blogspot\.com
+https?:\/\/([^\/]*\.)?buy-phentermine-gs\.eu\.tc
+https?:\/\/([^\/]*\.)?buy-phentermine-gs\.net\.tc
+https?:\/\/([^\/]*\.)?buy-phentermine\.esguay\.com
+https?:\/\/([^\/]*\.)?buy-phentermine\.health-livening\.com
+https?:\/\/([^\/]*\.)?buy-phentermine\.hem\.nu
+https?:\/\/([^\/]*\.)?buy-phentermine\.presteert\.nl
+https?:\/\/([^\/]*\.)?buy-phentermine20\.bravehost\.com
+https?:\/\/([^\/]*\.)?buy-prozac-online\.com
+https?:\/\/([^\/]*\.)?buy-soma\.bravehost\.com
+https?:\/\/([^\/]*\.)?buy-tennis-shoes\.info
+https?:\/\/([^\/]*\.)?buy-tramadol-gs\.eu\.tc
+https?:\/\/([^\/]*\.)?buy-tramadol-gs\.net\.tc
+https?:\/\/([^\/]*\.)?buy-tramadol-online911\.jo\.pl
+https?:\/\/([^\/]*\.)?buy-tramadol\.1\.forogratis\.es
+https?:\/\/([^\/]*\.)?buy-tramadol\.esguay\.com
+https?:\/\/([^\/]*\.)?buy-tramadol\.presteert\.nl
+https?:\/\/([^\/]*\.)?buy-tramadol20\.bravehost\.com
+https?:\/\/([^\/]*\.)?buy-ultram\.bravehost\.com
+https?:\/\/([^\/]*\.)?buy-valium\.bravehost\.com
+https?:\/\/([^\/]*\.)?buy-viagra-online\.health-livening\.com
+https?:\/\/([^\/]*\.)?buy-viagra\.esguay\.com
+https?:\/\/([^\/]*\.)?buy-viagra\.health-livening\.com
+https?:\/\/([^\/]*\.)?buy-viagra\.presteert\.nl
+https?:\/\/([^\/]*\.)?buy-viagra20\.bravehost\.com
+https?:\/\/([^\/]*\.)?buy-xanax20\.bravehost\.com
+https?:\/\/([^\/]*\.)?buy4levitra\.blogspot\.com
+https?:\/\/([^\/]*\.)?buy4viagra\.blogspot\.com
+https?:\/\/([^\/]*\.)?buyambien\.blog\.hr
+https?:\/\/([^\/]*\.)?buyambien\.guu\.pl
+https?:\/\/([^\/]*\.)?buybuspar\.4\.pl
+https?:\/\/([^\/]*\.)?buycialisonline\.forumlivre\.com
+https?:\/\/([^\/]*\.)?buycialisonline\.sprayblog\.se
+https?:\/\/([^\/]*\.)?buycialisonline\.sulekha\.com
+https?:\/\/([^\/]*\.)?buycialispills00\.blogspot\.com
+https?:\/\/([^\/]*\.)?buycialiss\.blogsome\.com
+https?:\/\/([^\/]*\.)?buycialiss\.ovp\.pl
+https?:\/\/([^\/]*\.)?buycipro\.4\.pl
+https?:\/\/([^\/]*\.)?buyeffexor\.4\.pl
+https?:\/\/([^\/]*\.)?buyhydrocodone\.blog\.hr
+https?:\/\/([^\/]*\.)?buylevitra\.blog\.hr
+https?:\/\/([^\/]*\.)?buylevitra\.forospace\.com
+https?:\/\/([^\/]*\.)?buylevitraonlin\.forumlivre\.com
+https?:\/\/([^\/]*\.)?buylevitraonline\.sprayblog\.se
+https?:\/\/([^\/]*\.)?buymeridia\.blog\.hr
+https?:\/\/([^\/]*\.)?buyonlineorder\.com
+https?:\/\/([^\/]*\.)?buypaxil\.blog\.hr
+https?:\/\/([^\/]*\.)?buyphentermine2\.livelog\.com
+https?:\/\/([^\/]*\.)?buyphenterminee\.ovp\.pl
+https?:\/\/([^\/]*\.)?buyphenterminez\.blog\.hr
+https?:\/\/([^\/]*\.)?buypropecia\.blog\.hr
+https?:\/\/([^\/]*\.)?buyprozac\.blog\.hr
+https?:\/\/([^\/]*\.)?buyrosebowltickets\.com
+https?:\/\/([^\/]*\.)?buysoma\.1majorhost\.com
+https?:\/\/([^\/]*\.)?buysoma\.cay\.pl
+https?:\/\/([^\/]*\.)?buysomaaonline\.ovp\.pl
+https?:\/\/([^\/]*\.)?buysomaonline\.forospace\.com
+https?:\/\/([^\/]*\.)?buysomaonlinez\.blogsome\.com
+https?:\/\/([^\/]*\.)?buytramadolonli\.forumlivre\.com
+https?:\/\/([^\/]*\.)?buytramadolonline\.sprayblog\.se
+https?:\/\/([^\/]*\.)?buytramadolz\.jubiiblog\.de
+https?:\/\/([^\/]*\.)?buytrazodone\.eamped\.com
+https?:\/\/([^\/]*\.)?buyultram\.forospace\.com
+https?:\/\/([^\/]*\.)?buyultram\.ir\.pl
+https?:\/\/([^\/]*\.)?buyultramonline\.ir\.pl
+https?:\/\/([^\/]*\.)?buyultramxp\.cay\.pl
+https?:\/\/([^\/]*\.)?buyvalium\.one2you\.info
+https?:\/\/([^\/]*\.)?buyvaliumonline\.forumlivre\.com
+https?:\/\/([^\/]*\.)?buyvaliumonline\.jubiiblog\.de
+https?:\/\/([^\/]*\.)?buyvaliumonline\.sprayblog\.se
+https?:\/\/([^\/]*\.)?buyviagra\.seesaa\.net
+https?:\/\/([^\/]*\.)?buyviagraa\.ovp\.pl
+https?:\/\/([^\/]*\.)?buyviagraonline\.ovp\.pl
+https?:\/\/([^\/]*\.)?buyviagraonline\.sprayblog\.se
+https?:\/\/([^\/]*\.)?buyviagraxp\.cay\.pl
+https?:\/\/([^\/]*\.)?buyvicodinxp\.cay\.pl
+https?:\/\/([^\/]*\.)?buyvvalium\.ovp\.pl
+https?:\/\/([^\/]*\.)?buyxanax\.5u\.com
+https?:\/\/([^\/]*\.)?buyxanaxxonline\.ovp\.pl
+https?:\/\/([^\/]*\.)?buyxanaxxp\.cay\.pl
+https?:\/\/([^\/]*\.)?buyxenical\.blog\.hr
+https?:\/\/([^\/]*\.)?buyxenical\.ir\.pl
+https?:\/\/([^\/]*\.)?buyxenicalonline\.ir\.pl
+https?:\/\/([^\/]*\.)?buyxxenical\.ovp\.pl
+https?:\/\/([^\/]*\.)?buyxxenicalonline\.ovp\.pl
+https?:\/\/([^\/]*\.)?buyycelexa\.ovp\.pl
+https?:\/\/([^\/]*\.)?buyycialis\.ovp\.pl
+https?:\/\/([^\/]*\.)?buyymeridiaonline\.ovp\.pl
+https?:\/\/([^\/]*\.)?buyyphentermine\.ovp\.pl
+https?:\/\/([^\/]*\.)?buyysoma\.ovp\.pl
+https?:\/\/([^\/]*\.)?buyyviagra\.ovp\.pl
+https?:\/\/([^\/]*\.)?buyyzithromax\.ovp\.pl
+https?:\/\/([^\/]*\.)?buyzoloft\.blog\.hr
+https?:\/\/([^\/]*\.)?buyzyban\.coz\.in
+https?:\/\/([^\/]*\.)?buzerave\.com
+https?:\/\/([^\/]*\.)?bvalium\.c24\.pl
+https?:\/\/([^\/]*\.)?bvalium\.fuks\.pl
+https?:\/\/([^\/]*\.)?bvalium1\.forumup\.org
+https?:\/\/([^\/]*\.)?bviagra\.ovp\.pl
+https?:\/\/([^\/]*\.)?bviagra1\.forumup\.org
+https?:\/\/([^\/]*\.)?bvse1\.szm\.sk
+https?:\/\/([^\/]*\.)?bwmi0\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?bwzf6\.szm\.sk
+https?:\/\/([^\/]*\.)?bx6\.blrf\.net
+https?:\/\/([^\/]*\.)?bxanax\.c24\.pl
+https?:\/\/([^\/]*\.)?bxanax\.gog\.pl
+https?:\/\/([^\/]*\.)?bxanax1\.forumup\.org
+https?:\/\/([^\/]*\.)?byhydrocodone\.blog\.espresso\.repubblica\.it
+https?:\/\/([^\/]*\.)?bzxs\.org\.ua
+https?:\/\/([^\/]*\.)?c-canada\.com
+https?:\/\/([^\/]*\.)?c4taldron\.uy\.pl
+https?:\/\/([^\/]*\.)?c4tcaget\.blogcu\.com
+https?:\/\/([^\/]*\.)?c4tcoli\.td\.pl
+https?:\/\/([^\/]*\.)?c4tdarrel\.dl\.pl
+https?:\/\/([^\/]*\.)?c4tdronrel\.goodforum\.net
+https?:\/\/([^\/]*\.)?c4tdronrel\.grafbb\.com
+https?:\/\/([^\/]*\.)?c4tvarcna\.dl\.pl
+https?:\/\/([^\/]*\.)?ca57sgr0h\.org
+https?:\/\/([^\/]*\.)?cable-connection\.keckins\.be
+https?:\/\/([^\/]*\.)?caboboc\.blogcu\.com
+https?:\/\/([^\/]*\.)?cacalife\.com
+https?:\/\/([^\/]*\.)?cacas\.info
+https?:\/\/([^\/]*\.)?caculall\.forumzen\.com
+https?:\/\/([^\/]*\.)?cadiucna\.forumzen\.com
+https?:\/\/([^\/]*\.)?caeserch\.com
+https?:\/\/([^\/]*\.)?cafasc\.com
+https?:\/\/([^\/]*\.)?caguyea\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?cahn\.mnsu\.edu
+https?:\/\/([^\/]*\.)?caitlyn-d66tmgwi1\.blogspot\.com
+https?:\/\/([^\/]*\.)?caked\.info
+https?:\/\/([^\/]*\.)?calciatore-nudo\.hostzz\.info
+https?:\/\/([^\/]*\.)?calcio-arbitri\.com
+https?:\/\/([^\/]*\.)?calcio-watch\.com
+https?:\/\/([^\/]*\.)?calcolo-rata-finanziamento\.ll33\.info
+https?:\/\/([^\/]*\.)?calendario-vari\.freespase\.info
+https?:\/\/([^\/]*\.)?calgary-travel\.globaltr\.info
+https?:\/\/([^\/]*\.)?californiamortgage-x\.com
+https?:\/\/([^\/]*\.)?call-kelly-com-ky\.blogspot\.com
+https?:\/\/([^\/]*\.)?call-kelly-com-tnm5k7042\.blogspot\.com
+https?:\/\/([^\/]*\.)?callie-es\.blogspot\.com
+https?:\/\/([^\/]*\.)?callsecurity\.blogspot\.com
+https?:\/\/([^\/]*\.)?camaro-r21nu37q\.blogspot\.com
+https?:\/\/([^\/]*\.)?camcrush-com-eudifxp82\.blogspot\.com
+https?:\/\/([^\/]*\.)?camcrush-com-igzig\.blogspot\.com
+https?:\/\/([^\/]*\.)?camcrush-com-my1v8l4\.blogspot\.com
+https?:\/\/([^\/]*\.)?camel-cigarettes\.s5\.com
+https?:\/\/([^\/]*\.)?camelclips-com-budun\.blogspot\.com
+https?:\/\/([^\/]*\.)?camelclips-com-d3s6o2\.blogspot\.com
+https?:\/\/([^\/]*\.)?camelclips-com-h6a5l\.blogspot\.com
+https?:\/\/([^\/]*\.)?camelmenthe\.blogspot\.com
+https?:\/\/([^\/]*\.)?cameralover\.net
+https?:\/\/([^\/]*\.)?camerascams\.info
+https?:\/\/([^\/]*\.)?cameron-h184o7b\.blogspot\.com
+https?:\/\/([^\/]*\.)?camini\.freehostss\.info
+https?:\/\/([^\/]*\.)?canada-birthday\.acb\.pl
+https?:\/\/([^\/]*\.)?canadian-pharmacyfur\.blogspot\.com
+https?:\/\/([^\/]*\.)?canadian-pharmacyyof\.blogspot\.com
+https?:\/\/([^\/]*\.)?cancer-skin\.nm\.ru
+https?:\/\/([^\/]*\.)?cancer-skin\.pochta\.ru
+https?:\/\/([^\/]*\.)?cancer_skin\.chat\.ru
+https?:\/\/([^\/]*\.)?candi-door-hot-mom-next\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?candylist-com-dib\.blogspot\.com
+https?:\/\/([^\/]*\.)?candylist-com-ip72g5\.blogspot\.com
+https?:\/\/([^\/]*\.)?canjipiao\.com
+https?:\/\/([^\/]*\.)?cantante-arabe-sexy\.hostzz\.info
+https?:\/\/([^\/]*\.)?cantor-dz1h733\.blogspot\.com
+https?:\/\/([^\/]*\.)?caorzel\.discutforum\.com
+https?:\/\/([^\/]*\.)?capasdar\.td\.pl
+https?:\/\/([^\/]*\.)?car-free-insurance-quoteqch\.blogspot\.com
+https?:\/\/([^\/]*\.)?car-insurance-\.blogspot\.com
+https?:\/\/([^\/]*\.)?car-insurance-club\.com
+https?:\/\/([^\/]*\.)?car-insurance-p4zw\.blogspot\.com
+https?:\/\/([^\/]*\.)?car-insurance-ratsvex\.blogspot\.com
+https?:\/\/([^\/]*\.)?car-loan-newdma\.blogspot\.com
+https?:\/\/([^\/]*\.)?car-loan-neweei\.blogspot\.com
+https?:\/\/([^\/]*\.)?car1home\.info
+https?:\/\/([^\/]*\.)?carabidule\.net
+https?:\/\/([^\/]*\.)?carbest2006\.info
+https?:\/\/([^\/]*\.)?cardura-rapid-heartbeat\.tlg\.pl
+https?:\/\/([^\/]*\.)?care-skin\.pochta\.ru
+https?:\/\/([^\/]*\.)?career-business\.net
+https?:\/\/([^\/]*\.)?carepharmasite\.info
+https?:\/\/([^\/]*\.)?caribxpressparts\.com
+https?:\/\/([^\/]*\.)?caricc4t\.xa\.pl
+https?:\/\/([^\/]*\.)?carinsurance-x\.com
+https?:\/\/([^\/]*\.)?carinsuranceshh\.blogspot\.com
+https?:\/\/([^\/]*\.)?carisoprodol-online\.presteert\.nl
+https?:\/\/([^\/]*\.)?carisoprodol\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?carisoprodol\.269g\.net
+https?:\/\/([^\/]*\.)?carisoprodol\.47\.pl
+https?:\/\/([^\/]*\.)?carisoprodol\.goodpharm\.info
+https?:\/\/([^\/]*\.)?carisoprodol\.hav\.pl
+https?:\/\/([^\/]*\.)?carisoprodol\.presteert\.nl
+https?:\/\/([^\/]*\.)?carisoprodol\.seesaa\.net
+https?:\/\/([^\/]*\.)?carisoprodol\.skocz\.net
+https?:\/\/([^\/]*\.)?carisoprodolrx\.weboficial\.com
+https?:\/\/([^\/]*\.)?carisoprodols\.blogspot\.com
+https?:\/\/([^\/]*\.)?carley-m3ia3\.blogspot\.com
+https?:\/\/([^\/]*\.)?carlie-a2s405\.blogspot\.com
+https?:\/\/([^\/]*\.)?carol-txxhdpnt\.blogspot\.com
+https?:\/\/([^\/]*\.)?carolina-w2aoe4xx\.blogspot\.com
+https?:\/\/([^\/]*\.)?carolyn-gp2s5\.blogspot\.com
+https?:\/\/([^\/]*\.)?carovi\.su\.pl
+https?:\/\/([^\/]*\.)?carson-ko8z7\.blogspot\.com
+https?:\/\/([^\/]*\.)?carspoker\.u288\.com
+https?:\/\/([^\/]*\.)?cartolina-pasqua\.host24h\.info
+https?:\/\/([^\/]*\.)?cartoon-free-gallery-gay\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?cartoon-porn-clip-bloghvn\.blogspot\.com
+https?:\/\/([^\/]*\.)?carxm\.info
+https?:\/\/([^\/]*\.)?casaviva\.19mb\.info
+https?:\/\/([^\/]*\.)?cascq\.szm\.sk
+https?:\/\/([^\/]*\.)?casetvar\.forumzen\.com
+https?:\/\/([^\/]*\.)?cashadvance-x\.com
+https?:\/\/([^\/]*\.)?cashing-view\.com
+https?:\/\/([^\/]*\.)?casing\.dyndns\.dk
+https?:\/\/([^\/]*\.)?casino-555\.com
+https?:\/\/([^\/]*\.)?casino-attraction\.com
+https?:\/\/([^\/]*\.)?casino-games-wiki\.com
+https?:\/\/([^\/]*\.)?casino-magyck\.mutogen\.be
+https?:\/\/([^\/]*\.)?casino-ppp\.com
+https?:\/\/([^\/]*\.)?casino-startup\.com
+https?:\/\/([^\/]*\.)?casino-theory\.com
+https?:\/\/([^\/]*\.)?casino\.requirements\.be
+https?:\/\/([^\/]*\.)?casino1\.forumup\.org
+https?:\/\/([^\/]*\.)?casinos-new\.com
+https?:\/\/([^\/]*\.)?casinostates\.com
+https?:\/\/([^\/]*\.)?casper-a3r1z2a0\.blogspot\.com
+https?:\/\/([^\/]*\.)?cassay\.net
+https?:\/\/([^\/]*\.)?casual-boots\.massioni\.be
+https?:\/\/([^\/]*\.)?catch-c-teens\.blogspot\.com
+https?:\/\/([^\/]*\.)?catherine-tu75h6w\.blogspot\.com
+https?:\/\/([^\/]*\.)?catrelet\.forumzen\.com
+https?:\/\/([^\/]*\.)?cats-wjbreb7e\.blogspot\.com
+https?:\/\/([^\/]*\.)?cayuga-g2legvldk2\.blogspot\.com
+https?:\/\/([^\/]*\.)?cazelmon\.lolforum\.net
+https?:\/\/([^\/]*\.)?cazelolo\.dl\.pl
+https?:\/\/([^\/]*\.)?cbbi\.cn
+https?:\/\/([^\/]*\.)?cbhi8\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?cbkf0\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?cbwgkm8\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?cc5f\.dnyp\.com
+https?:\/\/([^\/]*\.)?ccak1\.szm\.sk
+https?:\/\/([^\/]*\.)?ccal\.cultureforum\.net
+https?:\/\/([^\/]*\.)?ccclfak\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ccheapcelexa\.ovp\.pl
+https?:\/\/([^\/]*\.)?ccheapvaliumonline\.ovp\.pl
+https?:\/\/([^\/]*\.)?ccline\.info
+https?:\/\/([^\/]*\.)?ccnarac\.uy\.pl
+https?:\/\/([^\/]*\.)?ccobhv7\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?cdq\.dzsbcn\.com
+https?:\/\/([^\/]*\.)?cdsmart\.info
+https?:\/\/([^\/]*\.)?cdzhs\.szm\.sk
+https?:\/\/([^\/]*\.)?ceasius\.blogspot\.com
+https?:\/\/([^\/]*\.)?cecily-koj\.blogspot\.com
+https?:\/\/([^\/]*\.)?ceclor\.tlg\.pl
+https?:\/\/([^\/]*\.)?celeb-filipina-movie-site\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?celebrex-911\.coz\.in
+https?:\/\/([^\/]*\.)?celebrex-celecoxib-200mg\.tlg\.pl
+https?:\/\/([^\/]*\.)?celebrex\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?celebrity-sex-video-n-q-x\.blogspot\.com
+https?:\/\/([^\/]*\.)?celebrity-sex-video\.0800-porn\.com
+https?:\/\/([^\/]*\.)?celebrityprofiler\.com
+https?:\/\/([^\/]*\.)?celelt\.dl\.pl
+https?:\/\/([^\/]*\.)?celeste-mi8q701\.blogspot\.com
+https?:\/\/([^\/]*\.)?celexa\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?celexa\.269g\.net
+https?:\/\/([^\/]*\.)?celexafcy\.blogspot\.com
+https?:\/\/([^\/]*\.)?celexaodt\.blogspot\.com
+https?:\/\/([^\/]*\.)?celexavby\.blogspot\.com
+https?:\/\/([^\/]*\.)?celexavcc\.blogspot\.com
+https?:\/\/([^\/]*\.)?celexazer\.blogspot\.com
+https?:\/\/([^\/]*\.)?celexxaonline\.ovp\.pl
+https?:\/\/([^\/]*\.)?celine-ajha0vxo6\.blogspot\.com
+https?:\/\/([^\/]*\.)?celtic-frost-ringtonedbg\.blogspot\.com
+https?:\/\/([^\/]*\.)?celtic-frost-ringtonepxe\.blogspot\.com
+https?:\/\/([^\/]*\.)?celtic-ring\.boom\.ru
+https?:\/\/([^\/]*\.)?celtic1ring\.chat\.ru
+https?:\/\/([^\/]*\.)?cemast\.com
+https?:\/\/([^\/]*\.)?center-csy73nq1\.blogspot\.com
+https?:\/\/([^\/]*\.)?century-21\.co\.jp
+https?:\/\/([^\/]*\.)?cephalexin\.dynalias\.net
+https?:\/\/([^\/]*\.)?cephalexin\.kicks-ass\.net
+https?:\/\/([^\/]*\.)?cephalexinvyp\.blogspot\.com
+https?:\/\/([^\/]*\.)?ceremi\.com
+https?:\/\/([^\/]*\.)?cerveza\.republika\.pl
+https?:\/\/([^\/]*\.)?cetki\.blogspot\.com
+https?:\/\/([^\/]*\.)?cetuna\.com
+https?:\/\/([^\/]*\.)?cfhc2\.szm\.sk
+https?:\/\/([^\/]*\.)?cfi-tp\.blogspot\.com
+https?:\/\/([^\/]*\.)?cgj-wmkd0p54ap\.blogspot\.com
+https?:\/\/([^\/]*\.)?chain\.webmelia\.com
+https?:\/\/([^\/]*\.)?champion-ghdm2p\.blogspot\.com
+https?:\/\/([^\/]*\.)?chancec-i0\.blogspot\.com
+https?:\/\/([^\/]*\.)?chandler-ozbi2l\.blogspot\.com
+https?:\/\/([^\/]*\.)?chanel-ag2w\.blogspot\.com
+https?:\/\/([^\/]*\.)?charity-eu\.blogspot\.com
+https?:\/\/([^\/]*\.)?charles-rp7s\.blogspot\.com
+https?:\/\/([^\/]*\.)?charlie-gl3ig\.blogspot\.com
+https?:\/\/([^\/]*\.)?charming-kbatna2k\.blogspot\.com
+https?:\/\/([^\/]*\.)?charvis-mj35\.blogspot\.com
+https?:\/\/([^\/]*\.)?chase-online-bankingdir\.blogspot\.com
+https?:\/\/([^\/]*\.)?chasehunt\.com
+https?:\/\/([^\/]*\.)?chasity-oy2mgww10\.blogspot\.com
+https?:\/\/([^\/]*\.)?chat-a7gdn35u\.blogspot\.com
+https?:\/\/([^\/]*\.)?chat-gay-ohio-room\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?chat\.infty\.net
+https?:\/\/([^\/]*\.)?chatelaine-free-lipstick\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?chatou\.dzsc\.com
+https?:\/\/([^\/]*\.)?chatsky\.cn
+https?:\/\/([^\/]*\.)?chaucer\.umuc\.edu
+https?:\/\/([^\/]*\.)?chayse-c0z2untnw\.blogspot\.com
+https?:\/\/([^\/]*\.)?chazuo\.dzsc\.com
+https?:\/\/([^\/]*\.)?chazz-d86hk\.blogspot\.com
+https?:\/\/([^\/]*\.)?cheap-cialis\.presteert\.nl
+https?:\/\/([^\/]*\.)?cheap-hydrocodone\.presteert\.nl
+https?:\/\/([^\/]*\.)?cheap-phentermine\.cheapills\.info
+https?:\/\/([^\/]*\.)?cheap-phentermine\.esguay\.com
+https?:\/\/([^\/]*\.)?cheap-phentermine\.health-livening\.com
+https?:\/\/([^\/]*\.)?cheap-phentermine\.presteert\.nl
+https?:\/\/([^\/]*\.)?cheap-rocky-boot\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?cheap-soma-online\.blogspot\.com
+https?:\/\/([^\/]*\.)?cheap-tramadol-onlin\.zikforum\.com
+https?:\/\/([^\/]*\.)?cheap-tramadol\.1\.forogratis\.es
+https?:\/\/([^\/]*\.)?cheap-tramadol\.cheapills\.info
+https?:\/\/([^\/]*\.)?cheap-tramadol\.presteert\.nl
+https?:\/\/([^\/]*\.)?cheap-trashy-lingerie\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?cheap-travel-deal\.globaltr\.info
+https?:\/\/([^\/]*\.)?cheap-valium\.cheapills\.info
+https?:\/\/([^\/]*\.)?cheap-viagra\.health-livening\.com
+https?:\/\/([^\/]*\.)?cheap-viagra\.presteert\.nl
+https?:\/\/([^\/]*\.)?cheap-xanax\.us\.tf
+https?:\/\/([^\/]*\.)?cheapcialiss\.ovp\.pl
+https?:\/\/([^\/]*\.)?cheapest-pills\.org
+https?:\/\/([^\/]*\.)?cheapest-viagra-source\.com
+https?:\/\/([^\/]*\.)?cheapestlakerstickets\.com
+https?:\/\/([^\/]*\.)?cheaplakertickets\.com
+https?:\/\/([^\/]*\.)?cheappcialis\.ovp\.pl
+https?:\/\/([^\/]*\.)?cheapphentermine\.livelog\.com
+https?:\/\/([^\/]*\.)?cheapphenterminee\.ovp\.pl
+https?:\/\/([^\/]*\.)?cheapphntermine\.ovp\.pl
+https?:\/\/([^\/]*\.)?cheappvalium\.ovp\.pl
+https?:\/\/([^\/]*\.)?cheappviagra\.ovp\.pl
+https?:\/\/([^\/]*\.)?cheapsuperbowltickets\.com
+https?:\/\/([^\/]*\.)?cheaptramadol\.forospace\.com
+https?:\/\/([^\/]*\.)?cheaptramadols\.ovp\.pl
+https?:\/\/([^\/]*\.)?cheaptramadolz\.ovp\.pl
+https?:\/\/([^\/]*\.)?cheapvaliumm\.ovp\.pl
+https?:\/\/([^\/]*\.)?cheapvvalium\.ovp\.pl
+https?:\/\/([^\/]*\.)?cheapxanaxx\.ovp\.pl
+https?:\/\/([^\/]*\.)?cheapxxanax\.ovp\.pl
+https?:\/\/([^\/]*\.)?cheater-t3si78zbf\.blogspot\.com
+https?:\/\/([^\/]*\.)?cheats-e2p3o7nhm\.blogspot\.com
+https?:\/\/([^\/]*\.)?cheaviagra\.blogsome\.com
+https?:\/\/([^\/]*\.)?checkers-wn88\.blogspot\.com
+https?:\/\/([^\/]*\.)?checkproxy\.com
+https?:\/\/([^\/]*\.)?cheerleader-child-photo\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?cheerleader-dolphin\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?cheerleader-gallery-naughty\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?cheerleader-upskirt-picture\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?cheese-ratzl\.blogspot\.com
+https?:\/\/([^\/]*\.)?chellam-g2w\.blogspot\.com
+https?:\/\/([^\/]*\.)?chelsey-kifs\.blogspot\.com
+https?:\/\/([^\/]*\.)?chem-iv1c82\.blogspot\.com
+https?:\/\/([^\/]*\.)?chemistry-mrrx5e\.blogspot\.com
+https?:\/\/([^\/]*\.)?chemistry\.org\.ua
+https?:\/\/([^\/]*\.)?cheng-o08if\.blogspot\.com
+https?:\/\/([^\/]*\.)?chenglong\.com\.cn
+https?:\/\/([^\/]*\.)?cher-aorxm1s3j7\.blogspot\.com
+https?:\/\/([^\/]*\.)?cheryl-b8\.blogspot\.com
+https?:\/\/([^\/]*\.)?chess-cy\.blogspot\.com
+https?:\/\/([^\/]*\.)?chester1-tfkfl51eb\.blogspot\.com
+https?:\/\/([^\/]*\.)?chevroletcam\.cn
+https?:\/\/([^\/]*\.)?chevy-ekv8ph\.blogspot\.com
+https?:\/\/([^\/]*\.)?chevy1-wwok0ww55\.blogspot\.com
+https?:\/\/([^\/]*\.)?cheyanne-rnriiwno6l\.blogspot\.com
+https?:\/\/([^\/]*\.)?cheyenne-g3l5fa87\.blogspot\.com
+https?:\/\/([^\/]*\.)?cheyne-hm7aik5u\.blogspot\.com
+https?:\/\/([^\/]*\.)?chfielde\.ifrance\.com
+https?:\/\/([^\/]*\.)?chic-ks\.blogspot\.com
+https?:\/\/([^\/]*\.)?chicago-kou3c7e58\.blogspot\.com
+https?:\/\/([^\/]*\.)?chick-gay-kissing\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?chicken-i66t8z76\.blogspot\.com
+https?:\/\/([^\/]*\.)?chico-myg8bv\.blogspot\.com
+https?:\/\/([^\/]*\.)?chidneuer\.frbb\.net
+https?:\/\/([^\/]*\.)?chidronrac\.ephpbb\.com
+https?:\/\/([^\/]*\.)?chidronrec\.dynamicforum\.net
+https?:\/\/([^\/]*\.)?chiefs-oob\.blogspot\.com
+https?:\/\/([^\/]*\.)?chilacna\.td\.pl
+https?:\/\/([^\/]*\.)?child-leg-pain\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?chilton-b82sebrrue\.blogspot\.com
+https?:\/\/([^\/]*\.)?chimp-cu4gvwsceg\.blogspot\.com
+https?:\/\/([^\/]*\.)?china--magnet\.com
+https?:\/\/([^\/]*\.)?china-dwcuzqft6\.blogspot\.com
+https?:\/\/([^\/]*\.)?china-made-door\.com\.cn
+https?:\/\/([^\/]*\.)?china01\.52blog\.net
+https?:\/\/([^\/]*\.)?china02\.52blog\.net
+https?:\/\/([^\/]*\.)?china1\.52blog\.net
+https?:\/\/([^\/]*\.)?china1\.yculblog\.com
+https?:\/\/([^\/]*\.)?china2\.52blog\.net
+https?:\/\/([^\/]*\.)?china2\.yculblog\.com
+https?:\/\/([^\/]*\.)?china3\.yculblog\.com
+https?:\/\/([^\/]*\.)?chinacarcenter\.net
+https?:\/\/([^\/]*\.)?chinacid\.com
+https?:\/\/([^\/]*\.)?chinafoo\.com
+https?:\/\/([^\/]*\.)?chinafurnace\.net
+https?:\/\/([^\/]*\.)?chinakj\.net
+https?:\/\/([^\/]*\.)?chinalhcz\.com
+https?:\/\/([^\/]*\.)?chinaprojectors\.com
+https?:\/\/([^\/]*\.)?chinatranslation\.net
+https?:\/\/([^\/]*\.)?chinayoujiu\.com
+https?:\/\/([^\/]*\.)?chinese-google\.com
+https?:\/\/([^\/]*\.)?chineseaids\.com
+https?:\/\/([^\/]*\.)?chineseaids\.net
+https?:\/\/([^\/]*\.)?chinesezhouyi\.com
+https?:\/\/([^\/]*\.)?chip-thz\.blogspot\.com
+https?:\/\/([^\/]*\.)?chipper-eusa\.blogspot\.com
+https?:\/\/([^\/]*\.)?chippewa-work-boot\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?chiquita-wqok0t741\.blogspot\.com
+https?:\/\/([^\/]*\.)?chiricc4t\.zj\.pl
+https?:\/\/([^\/]*\.)?chiricdel\.fr-bb\.com
+https?:\/\/([^\/]*\.)?chitr\.discutforum\.com
+https?:\/\/([^\/]*\.)?chizelc\.goodforum\.net
+https?:\/\/([^\/]*\.)?chizelc\.grafbb\.com
+https?:\/\/([^\/]*\.)?chizelno\.cultureforum\.net
+https?:\/\/([^\/]*\.)?chkawai\.cn
+https?:\/\/([^\/]*\.)?chocolat-g4\.blogspot\.com
+https?:\/\/([^\/]*\.)?chocolate\.my10gb\.com
+https?:\/\/([^\/]*\.)?chongdianqi\.dzsc\.com
+https?:\/\/([^\/]*\.)?chops-hg47n04tvi\.blogspot\.com
+https?:\/\/([^\/]*\.)?choudoufu\.com
+https?:\/\/([^\/]*\.)?chris-ks6u6dj\.blogspot\.com
+https?:\/\/([^\/]*\.)?chrissy-oyo8z\.blogspot\.com
+https?:\/\/([^\/]*\.)?christ-acczbi1t\.blogspot\.com
+https?:\/\/([^\/]*\.)?christen-bttdc0kn\.blogspot\.com
+https?:\/\/([^\/]*\.)?christeta\.com
+https?:\/\/([^\/]*\.)?christia-ccf2e6\.blogspot\.com
+https?:\/\/([^\/]*\.)?christiaan-dvb\.blogspot\.com
+https?:\/\/([^\/]*\.)?christianj-t3e1j3\.blogspot\.com
+https?:\/\/([^\/]*\.)?christin-ee1qjx\.blogspot\.com
+https?:\/\/([^\/]*\.)?christina-aguilera-pic\.blogspot\.com
+https?:\/\/([^\/]*\.)?christina-wf\.blogspot\.com
+https?:\/\/([^\/]*\.)?christine-rgosvndiqw\.blogspot\.com
+https?:\/\/([^\/]*\.)?christoffe-g4e\.blogspot\.com
+https?:\/\/([^\/]*\.)?christop-hqhff\.blogspot\.com
+https?:\/\/([^\/]*\.)?christy-kflb274n\.blogspot\.com
+https?:\/\/([^\/]*\.)?chrome-it8j\.blogspot\.com
+https?:\/\/([^\/]*\.)?chrykne\.info
+https?:\/\/([^\/]*\.)?chrystian-mgxw3jyfb1\.blogspot\.com
+https?:\/\/([^\/]*\.)?chuanganqi\.dzsc\.com
+https?:\/\/([^\/]*\.)?chubby-bear-pic\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?chubby-chick\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?chubby-cum\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?chubby-teens-tus\.blogspot\.com
+https?:\/\/([^\/]*\.)?chuck-oh\.blogspot\.com
+https?:\/\/([^\/]*\.)?chucky-aklnscme\.blogspot\.com
+https?:\/\/([^\/]*\.)?chulyt\.com
+https?:\/\/([^\/]*\.)?church-b0w4\.blogspot\.com
+https?:\/\/([^\/]*\.)?chuvak-org\.blogspot\.com
+https?:\/\/([^\/]*\.)?chvpqa7\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?chyna-c2\.blogspot\.com
+https?:\/\/([^\/]*\.)?ci-video-pornograficos-download\.blogspot\.com
+https?:\/\/([^\/]*\.)?cialis-for-sale\.com
+https?:\/\/([^\/]*\.)?cialis-ok-1\.blogspot\.com
+https?:\/\/([^\/]*\.)?cialis-online\.presteert\.nl
+https?:\/\/([^\/]*\.)?cialis-pharma\.tripod\.com
+https?:\/\/([^\/]*\.)?cialis-soft-tabs\.com
+https?:\/\/([^\/]*\.)?cialis\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?cialis\.esguay\.com
+https?:\/\/([^\/]*\.)?cialis\.fws1\.com
+https?:\/\/([^\/]*\.)?cialis\.goodpharm\.info
+https?:\/\/([^\/]*\.)?cialis\.page\.tl
+https?:\/\/([^\/]*\.)?cialis\.presteert\.nl
+https?:\/\/([^\/]*\.)?cialis\.rx4\.org
+https?:\/\/([^\/]*\.)?cialis\.seesaa\.net
+https?:\/\/([^\/]*\.)?cialis\.skocz\.net
+https?:\/\/([^\/]*\.)?cialises\.us\.tf
+https?:\/\/([^\/]*\.)?cialisjiq\.blogspot\.com
+https?:\/\/([^\/]*\.)?cialispills\.blog\.hr
+https?:\/\/([^\/]*\.)?cialisrx\.weboficial\.com
+https?:\/\/([^\/]*\.)?cialisx\.host-page\.com
+https?:\/\/([^\/]*\.)?ciara-d0\.blogspot\.com
+https?:\/\/([^\/]*\.)?cierra-t1f0hy\.blogspot\.com
+https?:\/\/([^\/]*\.)?cigar-ekelo\.blogspot\.com
+https?:\/\/([^\/]*\.)?cigarettes-smoking-online\.com
+https?:\/\/([^\/]*\.)?cigarettes\.4\.pl
+https?:\/\/([^\/]*\.)?cilmer\.com
+https?:\/\/([^\/]*\.)?cinast\.com
+https?:\/\/([^\/]*\.)?cincydj\.ifrance\.com
+https?:\/\/([^\/]*\.)?cinder-w6\.blogspot\.com
+https?:\/\/([^\/]*\.)?cindi-ruo8\.blogspot\.com
+https?:\/\/([^\/]*\.)?cindy-gdhs2i21u6\.blogspot\.com
+https?:\/\/([^\/]*\.)?cinem4\.com
+https?:\/\/([^\/]*\.)?cingularringtones\.269g\.net
+https?:\/\/([^\/]*\.)?ciplactin\.tlg\.pl
+https?:\/\/([^\/]*\.)?ciprobuy\.hop\.to
+https?:\/\/([^\/]*\.)?ciprobuycheap\.firstpage\.de
+https?:\/\/([^\/]*\.)?ciprobuygeneric\.move\.to
+https?:\/\/([^\/]*\.)?ciprocheap\.dive\.to
+https?:\/\/([^\/]*\.)?ciprofloxacin\.xwiki\.com
+https?:\/\/([^\/]*\.)?ciprogeneric\.i\.am
+https?:\/\/([^\/]*\.)?citdokcna\.dynamicbb\.com
+https?:\/\/([^\/]*\.)?citeccit\.forumculture\.net
+https?:\/\/([^\/]*\.)?citpocit\.dynamicforum\.net
+https?:\/\/([^\/]*\.)?civisi\.com
+https?:\/\/([^\/]*\.)?cixingcailiao\.dzsc\.com
+https?:\/\/([^\/]*\.)?cjhx6\.szm\.sk
+https?:\/\/([^\/]*\.)?ckalv\.szm\.sk
+https?:\/\/([^\/]*\.)?ckfhhw4\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ckqabl1\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?claca\.blogcu\.com
+https?:\/\/([^\/]*\.)?claire-k6kkha\.blogspot\.com
+https?:\/\/([^\/]*\.)?clancy-i1ib\.blogspot\.com
+https?:\/\/([^\/]*\.)?clara-mj6ts\.blogspot\.com
+https?:\/\/([^\/]*\.)?clarissa-o14r\.blogspot\.com
+https?:\/\/([^\/]*\.)?clark-asa0i3mfvr\.blogspot\.com
+https?:\/\/([^\/]*\.)?classic-porn-clip-zoneykt\.blogspot\.com
+https?:\/\/([^\/]*\.)?claude-blw\.blogspot\.com
+https?:\/\/([^\/]*\.)?claudia-c7ut8jj4\.blogspot\.com
+https?:\/\/([^\/]*\.)?clay-e-facial-mask-vitamin\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?cleaner-ddiggwqy1t\.blogspot\.com
+https?:\/\/([^\/]*\.)?clearmp3\.net
+https?:\/\/([^\/]*\.)?clerk\.lir\.dk
+https?:\/\/([^\/]*\.)?cletoac\.lolbb\.com
+https?:\/\/([^\/]*\.)?cleveland-txjimr\.blogspot\.com
+https?:\/\/([^\/]*\.)?clickhere2\.net
+https?:\/\/([^\/]*\.)?clior\.graphforum\.com
+https?:\/\/([^\/]*\.)?clip-ebony-lesbian-porn\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?clip-ebony-porn\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?clip-free-hand-job-movie-movie\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?clip-free-porn-psp-newsy66\.blogspot\.com
+https?:\/\/([^\/]*\.)?clip-hentai\.dreamsuit\.net
+https?:\/\/([^\/]*\.)?clip-hunter-porn-blogctv\.blogspot\.com
+https?:\/\/([^\/]*\.)?clip-hunter-porn-zone8y6\.blogspot\.com
+https?:\/\/([^\/]*\.)?clip-malay-porn-newsgrq\.blogspot\.com
+https?:\/\/([^\/]*\.)?clip-malay-porn-zone1w3\.blogspot\.com
+https?:\/\/([^\/]*\.)?clipgalaxy-com-i4z645\.blogspot\.com
+https?:\/\/([^\/]*\.)?clipgalaxy-com-io8ncz\.blogspot\.com
+https?:\/\/([^\/]*\.)?clipper-e2buyg\.blogspot\.com
+https?:\/\/([^\/]*\.)?clirol\.dl\.pl
+https?:\/\/([^\/]*\.)?clit-huge-real\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?cllivers\.dl\.pl
+https?:\/\/([^\/]*\.)?clobetasol-propionate\.tlg\.pl
+https?:\/\/([^\/]*\.)?cloclo-w046r\.blogspot\.com
+https?:\/\/([^\/]*\.)?clonazepam\.us\.tf
+https?:\/\/([^\/]*\.)?clonazepamscz\.blogspot\.com
+https?:\/\/([^\/]*\.)?clonazepamuej\.blogspot\.com
+https?:\/\/([^\/]*\.)?clonsex\.info
+https?:\/\/([^\/]*\.)?closeout-womens-rain-boot\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?clothes-newborns\.loretic\.be
+https?:\/\/([^\/]*\.)?cloudydayshadow\.blogspot\.com
+https?:\/\/([^\/]*\.)?clover-rs04\.blogspot\.com
+https?:\/\/([^\/]*\.)?clowns-gloi\.blogspot\.com
+https?:\/\/([^\/]*\.)?clu\.cn
+https?:\/\/([^\/]*\.)?clumsy-hl0fwl1k\.blogspot\.com
+https?:\/\/([^\/]*\.)?cluster-k4ovd06ibi\.blogspot\.com
+https?:\/\/([^\/]*\.)?clwilbur\.ifrance\.com
+https?:\/\/([^\/]*\.)?clyaod2\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?cmauq\.com
+https?:\/\/([^\/]*\.)?cmnanwe\.com
+https?:\/\/([^\/]*\.)?cmsrt\.szm\.sk
+https?:\/\/([^\/]*\.)?cmubroadway\.blogspot\.com
+https?:\/\/([^\/]*\.)?cnaalget\.graphforum\.com
+https?:\/\/([^\/]*\.)?cnaalget\.highforum\.net
+https?:\/\/([^\/]*\.)?cnac4t-or\.bbgraf\.com
+https?:\/\/([^\/]*\.)?cnadel6or6\.dl\.pl
+https?:\/\/([^\/]*\.)?cnaeltbo\.discutforum\.com
+https?:\/\/([^\/]*\.)?cnaeltdron\.bb-fr\.com
+https?:\/\/([^\/]*\.)?cnapasou\.graphforum\.com
+https?:\/\/([^\/]*\.)?cnatral\.xa\.pl
+https?:\/\/([^\/]*\.)?cnbess\.com
+https?:\/\/([^\/]*\.)?cnbf2\.szm\.sk
+https?:\/\/([^\/]*\.)?cncarcenter\.com
+https?:\/\/([^\/]*\.)?cnfibernet\.com\.cn
+https?:\/\/([^\/]*\.)?cnmarketingresearch\.com
+https?:\/\/([^\/]*\.)?cnplayhome\.cn
+https?:\/\/([^\/]*\.)?cnticket\.net
+https?:\/\/([^\/]*\.)?co-alf\.blogspot\.com
+https?:\/\/([^\/]*\.)?co-video-de-sexo-gratis-download\.blogspot\.com
+https?:\/\/([^\/]*\.)?co6or6bo\.dl\.pl
+https?:\/\/([^\/]*\.)?coacdar\.bbfr\.net
+https?:\/\/([^\/]*\.)?coachescorner\.com
+https?:\/\/([^\/]*\.)?cock-and-ball-punishment\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?cock-deep-huge-throat\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?cock-love-teen\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?cock-petite-sucker\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?cock-roaches-picture\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?cock-sexy-sucker\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?cock-story-sucker\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?cocnacna\.dl\.pl
+https?:\/\/([^\/]*\.)?cocoel\.lightbb\.com
+https?:\/\/([^\/]*\.)?coconel\.frbb\.net
+https?:\/\/([^\/]*\.)?codarget\.dl\.pl
+https?:\/\/([^\/]*\.)?codigodor\.blogspot\.com
+https?:\/\/([^\/]*\.)?coiqen\.com
+https?:\/\/([^\/]*\.)?cold-hard-bitch-lyric\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?college-fucking-video-free\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?college1-degree\.boom\.ru
+https?:\/\/([^\/]*\.)?college1degree\.chat\.ru
+https?:\/\/([^\/]*\.)?college1degree1p\.chat\.ru
+https?:\/\/([^\/]*\.)?colodom\.frbb\.net
+https?:\/\/([^\/]*\.)?colorado\.edu
+https?:\/\/([^\/]*\.)?coloradomortgage-x\.com
+https?:\/\/([^\/]*\.)?com-dick-fick-n-suck\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?comic-fetish-info-remember\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?comic-hardcore-info-remember-sex\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?comicvmarriage\.spycams777\.com
+https?:\/\/([^\/]*\.)?commercialleaseonline\.info
+https?:\/\/([^\/]*\.)?communicationagency\.com
+https?:\/\/([^\/]*\.)?comontr\.bb-fr\.com
+https?:\/\/([^\/]*\.)?companyforyou\.com
+https?:\/\/([^\/]*\.)?competitio\.ifrance\.com
+https?:\/\/([^\/]*\.)?computer-desk\.fromru\.com
+https?:\/\/([^\/]*\.)?computer1degree\.chat\.ru
+https?:\/\/([^\/]*\.)?computerxchange\.com
+https?:\/\/([^\/]*\.)?comradealtmer\.blogspot\.com
+https?:\/\/([^\/]*\.)?condition-skin\.newmail\.ru
+https?:\/\/([^\/]*\.)?condition_skin\.chat\.ru
+https?:\/\/([^\/]*\.)?condom-delivered-free-free-uk\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?condom-picture-penis\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?connecticutmortgage-x\.com
+https?:\/\/([^\/]*\.)?conor2k\.007webpro\.com
+https?:\/\/([^\/]*\.)?consistmay\.tripod\.com
+https?:\/\/([^\/]*\.)?consolidation-loan-studentqdl\.blogspot\.com
+https?:\/\/([^\/]*\.)?consultanthub\.com
+https?:\/\/([^\/]*\.)?cooking-crazy\.com
+https?:\/\/([^\/]*\.)?cool-mp3\.biz
+https?:\/\/([^\/]*\.)?coolhost\.biz
+https?:\/\/([^\/]*\.)?copasleto\.zj\.pl
+https?:\/\/([^\/]*\.)?copyok\.net
+https?:\/\/([^\/]*\.)?coricidin\.tlg\.pl
+https?:\/\/([^\/]*\.)?cornut\.ipupdater\.com
+https?:\/\/([^\/]*\.)?coro-aaliyah\.blogspot\.com
+https?:\/\/([^\/]*\.)?corporategifts-guide\.com
+https?:\/\/([^\/]*\.)?corsv\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?cortech\.cn
+https?:\/\/([^\/]*\.)?cositbo\.bbgraf\.com
+https?:\/\/([^\/]*\.)?cosmiboe\.forumzen\.com
+https?:\/\/([^\/]*\.)?cosmicray\.umd\.edu
+https?:\/\/([^\/]*\.)?coswishe\.dl\.pl
+https?:\/\/([^\/]*\.)?cotton-gloves\.loretic\.be
+https?:\/\/([^\/]*\.)?counciloflight\.com
+https?:\/\/([^\/]*\.)?couple-fucking-photo\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?couple-kissing-pic\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?couponmountain\.com
+https?:\/\/([^\/]*\.)?courses\.csusm\.edu
+https?:\/\/([^\/]*\.)?courtinfroggie\.blogspot\.com
+https?:\/\/([^\/]*\.)?covarou\.su\.pl
+https?:\/\/([^\/]*\.)?cowei\.net
+https?:\/\/([^\/]*\.)?cowlist-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?cozaar\.4\.pl
+https?:\/\/([^\/]*\.)?cozaarbuy\.hello\.to
+https?:\/\/([^\/]*\.)?cozaarcheap\.mysite\.de
+https?:\/\/([^\/]*\.)?cozaarcheapgeneric\.warp9\.to
+https?:\/\/([^\/]*\.)?cozaargeneric\.everything\.at
+https?:\/\/([^\/]*\.)?cozaargenericcheap\.dive\.to
+https?:\/\/([^\/]*\.)?cpayscom\.xwiki\.com
+https?:\/\/([^\/]*\.)?cpkna\.szm\.sk
+https?:\/\/([^\/]*\.)?cpsyy\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?cpyngke\.com
+https?:\/\/([^\/]*\.)?cqbhn\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?cqfmz\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?cqjbjx1\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?cr4ix7\.com
+https?:\/\/([^\/]*\.)?crabs\.isgre\.at
+https?:\/\/([^\/]*\.)?cramp-hand-leg\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?crashdome\.info
+https?:\/\/([^\/]*\.)?crazyvirgin\.info
+https?:\/\/([^\/]*\.)?crbackus\.dl\.pl
+https?:\/\/([^\/]*\.)?crcather\.dl\.pl
+https?:\/\/([^\/]*\.)?cream-facial-pie\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?cream-hairy-mature-movie-pie-pussy\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?creampie\.coz\.in
+https?:\/\/([^\/]*\.)?creating-a-boot-cd\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?credit-dreams\.com
+https?:\/\/([^\/]*\.)?creditcards-x\.com
+https?:\/\/([^\/]*\.)?credoninc\.com
+https?:\/\/([^\/]*\.)?crestor-rx\.one2you\.info
+https?:\/\/([^\/]*\.)?crestor\.dynalias\.net
+https?:\/\/([^\/]*\.)?criminal-j-degre\.boom\.ru
+https?:\/\/([^\/]*\.)?crimson-teens\.freeinsite\.net
+https?:\/\/([^\/]*\.)?cristal-fenix\.isuisse\.com
+https?:\/\/([^\/]*\.)?crookedscud\.myfreewebs\.net
+https?:\/\/([^\/]*\.)?crossed-leg-gallery\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?crossed-leg-short-skirt-stocking-top\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?crrenee\.dl\.pl
+https?:\/\/([^\/]*\.)?crsundke\.dl\.pl
+https?:\/\/([^\/]*\.)?cruise-guide\.org
+https?:\/\/([^\/]*\.)?cruise-travel\.globaltr\.info
+https?:\/\/([^\/]*\.)?crzvh\.szm\.sk
+https?:\/\/([^\/]*\.)?cscla\.net
+https?:\/\/([^\/]*\.)?cscserver\.cc\.edu
+https?:\/\/([^\/]*\.)?csitdom\.bbgraf\.com
+https?:\/\/([^\/]*\.)?csmwui11\.com
+https?:\/\/([^\/]*\.)?csosandbox\.clemson\.edu
+https?:\/\/([^\/]*\.)?ctdq0\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?ctl\.csudh\.edu
+https?:\/\/([^\/]*\.)?ctusxc4\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?cubaka\.yi\.org
+https?:\/\/([^\/]*\.)?cufgq\.szm\.sk
+https?:\/\/([^\/]*\.)?cuicui\.monblog\.ch
+https?:\/\/([^\/]*\.)?cuiugcg\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?culinary-school\.newmail\.ru
+https?:\/\/([^\/]*\.)?culinary1school\.chat\.ru
+https?:\/\/([^\/]*\.)?cum-drenched-pantie\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?cum-drink-video\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?cum-dvd-face-private-private-rip-vcd\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?cum-ebony-face\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?cum-face-asian\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?cum-face-pic\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?cum-face-picture\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?cum-facial-messy\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?cum-facial-video-free-clip\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?cum-filled-pussy-picture\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?cum-kiss-lick-shoes-suck-worship\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?cum-mouth-ebony\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?cum-nurse-sex-shot\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?cum-se-face-sex\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?cum-shot-movie\.dreamsuit\.net
+https?:\/\/([^\/]*\.)?cum-swallow-vids\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?cuola\.goodforum\.net
+https?:\/\/([^\/]*\.)?cut-xmeup-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?cute-ebony-girl\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?cute-girldzy\.blogspot\.com
+https?:\/\/([^\/]*\.)?cutgetolo\.zikforum\.com
+https?:\/\/([^\/]*\.)?cutvili\.winnerforum\.net
+https?:\/\/([^\/]*\.)?cvep2\.szm\.sk
+https?:\/\/([^\/]*\.)?cvipm\.com
+https?:\/\/([^\/]*\.)?cxolt\.szm\.sk
+https?:\/\/([^\/]*\.)?cyberlinx\.us
+https?:\/\/([^\/]*\.)?cycleworldsuzuki\.info
+https?:\/\/([^\/]*\.)?cyclobenzaprine\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?cysrf\.szm\.sk
+https?:\/\/([^\/]*\.)?cytonrok\.forumculture\.net
+https?:\/\/([^\/]*\.)?czelvar\.su\.pl
+https?:\/\/([^\/]*\.)?czis0\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?d-z-free-lesbian-movie-h\.blogspot\.com
+https?:\/\/([^\/]*\.)?daddy-bear-gay\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?daddy-long-leg-venom\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?daily-porn-clip-news0we\.blogspot\.com
+https?:\/\/([^\/]*\.)?dailybasis-com-cky8ax\.blogspot\.com
+https?:\/\/([^\/]*\.)?dami3\.com
+https?:\/\/([^\/]*\.)?danazol\.4\.pl
+https?:\/\/([^\/]*\.)?dance-instruction\.lkerfocu\.be
+https?:\/\/([^\/]*\.)?danga4ka\.blogspot\.com
+https?:\/\/([^\/]*\.)?dansmovies-com-mu2ywho24d\.blogspot\.com
+https?:\/\/([^\/]*\.)?daractr\.goodbb\.net
+https?:\/\/([^\/]*\.)?darboboc\.dl\.pl
+https?:\/\/([^\/]*\.)?darboctroc\.dl\.pl
+https?:\/\/([^\/]*\.)?darcnaec\.dynamicbb\.com
+https?:\/\/([^\/]*\.)?darcoca\.dl\.pl
+https?:\/\/([^\/]*\.)?dardomcna\.blogcu\.com
+https?:\/\/([^\/]*\.)?dardomdom\.darkbb\.com
+https?:\/\/([^\/]*\.)?dardomzel\.blogcu\.com
+https?:\/\/([^\/]*\.)?dare-poker\.com
+https?:\/\/([^\/]*\.)?darelttr\.dl\.pl
+https?:\/\/([^\/]*\.)?dargetou\.darkbb\.com
+https?:\/\/([^\/]*\.)?darladom\.td\.pl
+https?:\/\/([^\/]*\.)?darlala\.winnerforum\.net
+https?:\/\/([^\/]*\.)?darlina-a1vds\.blogspot\.com
+https?:\/\/([^\/]*\.)?darlina-akp4\.blogspot\.com
+https?:\/\/([^\/]*\.)?darlina-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?darlina-tcifizmx\.blogspot\.com
+https?:\/\/([^\/]*\.)?darmonrol\.zj\.pl
+https?:\/\/([^\/]*\.)?darricer\.fr-bb\.com
+https?:\/\/([^\/]*\.)?darzeltroc\.dl\.pl
+https?:\/\/([^\/]*\.)?dasepluv\.dl\.pl
+https?:\/\/([^\/]*\.)?dashulya\.blogspot\.com
+https?:\/\/([^\/]*\.)?dastino\.republika\.pl
+https?:\/\/([^\/]*\.)?data-mining\.massioni\.be
+https?:\/\/([^\/]*\.)?datangid\.com
+https?:\/\/([^\/]*\.)?datasol\.org
+https?:\/\/([^\/]*\.)?dating-advice\.sexnation\.info
+https?:\/\/([^\/]*\.)?dating-direct\.sexnation\.info
+https?:\/\/([^\/]*\.)?dating\.sexnation\.info
+https?:\/\/([^\/]*\.)?dave-hollister-ringtoneezm\.blogspot\.com
+https?:\/\/([^\/]*\.)?dave-hollister-ringtonefoi\.blogspot\.com
+https?:\/\/([^\/]*\.)?dave-hollister-ringtonewqs\.blogspot\.com
+https?:\/\/([^\/]*\.)?davejackson\.com
+https?:\/\/([^\/]*\.)?davte\.info
+https?:\/\/([^\/]*\.)?dawsonanddadrealty\.com
+https?:\/\/([^\/]*\.)?dayzve4\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?dbxbqb7\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?dc-escort-gay\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?dcuoo\.szm\.sk
+https?:\/\/([^\/]*\.)?dcx\.org\.ua
+https?:\/\/([^\/]*\.)?ddfz1\.szm\.sk
+https?:\/\/([^\/]*\.)?ddlive\.info
+https?:\/\/([^\/]*\.)?ddovj\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ddpb6\.szm\.sk
+https?:\/\/([^\/]*\.)?de-foto-gay-gratis-negros\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?dead-sea-product\.com
+https?:\/\/([^\/]*\.)?deadsex\.info
+https?:\/\/([^\/]*\.)?deadums\.blogspot\.com
+https?:\/\/([^\/]*\.)?debk6\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?debt-consolidation-care\.com
+https?:\/\/([^\/]*\.)?debt-consolidation\.dd\.vg
+https?:\/\/([^\/]*\.)?debtconsolidation-today\.com
+https?:\/\/([^\/]*\.)?deepthroat\.coz\.in
+https?:\/\/([^\/]*\.)?deerdeji\.forumzen\.com
+https?:\/\/([^\/]*\.)?defacialize-com-td32\.blogspot\.com
+https?:\/\/([^\/]*\.)?defi-adrian\.blogspot\.com
+https?:\/\/([^\/]*\.)?degree-program\.hotmail\.ru
+https?:\/\/([^\/]*\.)?degree2program\.chat\.ru
+https?:\/\/([^\/]*\.)?dejablu503\.50webs\.org
+https?:\/\/([^\/]*\.)?dela88\.com
+https?:\/\/([^\/]*\.)?delacmon\.discutforum\.com
+https?:\/\/([^\/]*\.)?delawaremortgage-x\.com
+https?:\/\/([^\/]*\.)?delbocer\.dl\.pl
+https?:\/\/([^\/]*\.)?delcnacna\.lolbb\.com
+https?:\/\/([^\/]*\.)?delletopas\.su\.pl
+https?:\/\/([^\/]*\.)?delliric\.dl\.pl
+https?:\/\/([^\/]*\.)?delordel\.blogcu\.com
+https?:\/\/([^\/]*\.)?delricchi\.goodforum\.net
+https?:\/\/([^\/]*\.)?delricchi\.grafbb\.com
+https?:\/\/([^\/]*\.)?delricou\.dl\.pl
+https?:\/\/([^\/]*\.)?delserch\.com
+https?:\/\/([^\/]*\.)?deltasone\.4\.pl
+https?:\/\/([^\/]*\.)?deltnecca\.goodbb\.net
+https?:\/\/([^\/]*\.)?delzelleto\.dl\.pl
+https?:\/\/([^\/]*\.)?demingpower\.com
+https?:\/\/([^\/]*\.)?denocel\.blogcu\.com
+https?:\/\/([^\/]*\.)?dental-guide\.org
+https?:\/\/([^\/]*\.)?dental\.gulfcoast\.edu
+https?:\/\/([^\/]*\.)?dentalplans-x\.com
+https?:\/\/([^\/]*\.)?deomnoou\.jconserv\.net
+https?:\/\/([^\/]*\.)?depamu\.com
+https?:\/\/([^\/]*\.)?depstore\.milan\.jp
+https?:\/\/([^\/]*\.)?derast\.com
+https?:\/\/([^\/]*\.)?derimc\.com
+https?:\/\/([^\/]*\.)?description\.hostonmars\.com
+https?:\/\/([^\/]*\.)?desent\.8tt\.org
+https?:\/\/([^\/]*\.)?design4italy\.org
+https?:\/\/([^\/]*\.)?designatchina\.com
+https?:\/\/([^\/]*\.)?designer-purses\.blogspot\.com
+https?:\/\/([^\/]*\.)?desk-teen-d\.blogspot\.com
+https?:\/\/([^\/]*\.)?desyrel\.4\.pl
+https?:\/\/([^\/]*\.)?detriot\.dtdns\.net
+https?:\/\/([^\/]*\.)?deutschland-heute\.de\.tl
+https?:\/\/([^\/]*\.)?devine-friend-hot-mom\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?dewall\.info
+https?:\/\/([^\/]*\.)?dg\.188info\.com
+https?:\/\/([^\/]*\.)?dgvy5\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?dial3\.szm\.sk
+https?:\/\/([^\/]*\.)?diamond73\.50webs\.com
+https?:\/\/([^\/]*\.)?dianchi\.dzsc\.com
+https?:\/\/([^\/]*\.)?diandongji\.dzsc\.com
+https?:\/\/([^\/]*\.)?dianganqi\.dzsc\.com
+https?:\/\/([^\/]*\.)?dianluban\.dzsc\.com
+https?:\/\/([^\/]*\.)?dianre\.dzsc\.com
+https?:\/\/([^\/]*\.)?dianrong\.dzsc\.com
+https?:\/\/([^\/]*\.)?dianweiqi\.dzsc\.com
+https?:\/\/([^\/]*\.)?dianyuan\.dzsc\.com
+https?:\/\/([^\/]*\.)?dianziguan\.dzsc\.com
+https?:\/\/([^\/]*\.)?dianzu\.dzsc\.com
+https?:\/\/([^\/]*\.)?diazepam\.47\.pl
+https?:\/\/([^\/]*\.)?diazepam\.skocz\.net
+https?:\/\/([^\/]*\.)?diazepam2\.forospace\.com
+https?:\/\/([^\/]*\.)?diazepams\.ru\.tf
+https?:\/\/([^\/]*\.)?dick-butkus-football-player\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?dick-donkey-sucking-woman\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?dick-fat-in-pussy\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?dick-head-john-kerry\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?dick-hot-man-video\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?dicks-sporting-goods-web-site\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?didrex\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?didrex\.int\.tf
+https?:\/\/([^\/]*\.)?diebart\.asp2\.cz
+https?:\/\/([^\/]*\.)?diesite\.com
+https?:\/\/([^\/]*\.)?diet-pills-phentermine-pill-buy-cheap-online\.com
+https?:\/\/([^\/]*\.)?diet-pills911\.com
+https?:\/\/([^\/]*\.)?diffusersudan\.org
+https?:\/\/([^\/]*\.)?diflucanbuycheap\.top\.ms
+https?:\/\/([^\/]*\.)?diflucancheapbuy\.drop\.to
+https?:\/\/([^\/]*\.)?diflucancheapgeneric\.notrix\.net
+https?:\/\/([^\/]*\.)?diflucangeneric\.hey\.to
+https?:\/\/([^\/]*\.)?diflucangenericbuy\.hp\.ms
+https?:\/\/([^\/]*\.)?digilander\.libero\.it
+https?:\/\/([^\/]*\.)?digital-glamour\.com
+https?:\/\/([^\/]*\.)?digitalpoimt\.com
+https?:\/\/([^\/]*\.)?dildo-extreme-free-movie\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?dildo-in-guys-ass\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?dilhbi7\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?dionysios-r\.blogspot\.com
+https?:\/\/([^\/]*\.)?dir\.opank\.com
+https?:\/\/([^\/]*\.)?dirare\.com
+https?:\/\/([^\/]*\.)?directonlineguide\.com
+https?:\/\/([^\/]*\.)?dirty-blonde-teen\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?dirty-ru-lenta\.blogspot\.com
+https?:\/\/([^\/]*\.)?dirtyrhino-com-iy5ps48s\.blogspot\.com
+https?:\/\/([^\/]*\.)?dirtyrhino-com-rjrotse3\.blogspot\.com
+https?:\/\/([^\/]*\.)?discasegeta\.0moola\.com
+https?:\/\/([^\/]*\.)?discontinued-chanel-lipstick\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?discount-femina-lingerie\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?discount-phentermine\.health-livening\.com
+https?:\/\/([^\/]*\.)?discount-phentermine\.presteert\.nl
+https?:\/\/([^\/]*\.)?discounted-medications\.com
+https?:\/\/([^\/]*\.)?discountphentermine\.livelog\.com
+https?:\/\/([^\/]*\.)?discussions\.csbsju\.edu
+https?:\/\/([^\/]*\.)?dissected-voice\.blogspot\.com
+https?:\/\/([^\/]*\.)?diuvw\.szm\.sk
+https?:\/\/([^\/]*\.)?diva-58\.site\.voila\.fr
+https?:\/\/([^\/]*\.)?divtab\.com
+https?:\/\/([^\/]*\.)?dixe-alayna\.blogspot\.com
+https?:\/\/([^\/]*\.)?dixiecuties-com-av\.blogspot\.com
+https?:\/\/([^\/]*\.)?dixiecuties-com-wpf1g2a\.blogspot\.com
+https?:\/\/([^\/]*\.)?dka2e\.nokedem\.com
+https?:\/\/([^\/]*\.)?dlaners\.blogspot\.com
+https?:\/\/([^\/]*\.)?dljs5\.szm\.sk
+https?:\/\/([^\/]*\.)?dltz4\.szm\.sk
+https?:\/\/([^\/]*\.)?dlwlh\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?dlzgn\.szm\.sk
+https?:\/\/([^\/]*\.)?dm-cqsf\.cn
+https?:\/\/([^\/]*\.)?dm-soft\.com
+https?:\/\/([^\/]*\.)?dmnft\.net
+https?:\/\/([^\/]*\.)?dnk-design\.com
+https?:\/\/([^\/]*\.)?do-ali\.blogspot\.com
+https?:\/\/([^\/]*\.)?do-hot-video-download\.blogspot\.com
+https?:\/\/([^\/]*\.)?doctorpinkerton\.ifrance\.com
+https?:\/\/([^\/]*\.)?doenertreff\.de
+https?:\/\/([^\/]*\.)?dogdead\.50webs\.com
+https?:\/\/([^\/]*\.)?dogider-big-tit-round-a-p\.blogspot\.com
+https?:\/\/([^\/]*\.)?dogzilla30\.blogspot\.com
+https?:\/\/([^\/]*\.)?dohr\.joolo\.com
+https?:\/\/([^\/]*\.)?dokrichi\.forumculture\.net
+https?:\/\/([^\/]*\.)?dokuno-porn-clip\.blogspot\.com
+https?:\/\/([^\/]*\.)?dollmovies-com-e7lqyhq\.blogspot\.com
+https?:\/\/([^\/]*\.)?dom-or-dron\.jc\.pl
+https?:\/\/([^\/]*\.)?domdronno\.xa\.pl
+https?:\/\/([^\/]*\.)?dome-ebony-foot-herbies\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?domelc4t\.dl\.pl
+https?:\/\/([^\/]*\.)?domest1co\.info
+https?:\/\/([^\/]*\.)?domestic0\.info
+https?:\/\/([^\/]*\.)?domnoor\.blogcu\.com
+https?:\/\/([^\/]*\.)?domorca\.darkbb\.com
+https?:\/\/([^\/]*\.)?dompasvi\.alkablog\.com
+https?:\/\/([^\/]*\.)?domrelou\.discutfree\.com
+https?:\/\/([^\/]*\.)?domtadom\.blogcu\.com
+https?:\/\/([^\/]*\.)?domtael\.dl\.pl
+https?:\/\/([^\/]*\.)?don-search\.com
+https?:\/\/([^\/]*\.)?dong-sheng\.com
+https?:\/\/([^\/]*\.)?dono-alaska\.blogspot\.com
+https?:\/\/([^\/]*\.)?doodlepets\.net
+https?:\/\/([^\/]*\.)?doormat\.ncedly\.be
+https?:\/\/([^\/]*\.)?dorank\.com
+https?:\/\/([^\/]*\.)?dorintop\.9999mb\.com
+https?:\/\/([^\/]*\.)?dotbusinessbroker\.info
+https?:\/\/([^\/]*\.)?dottorstranamore\.com
+https?:\/\/([^\/]*\.)?dotwirelessinternet\.info
+https?:\/\/([^\/]*\.)?double-anal-insertion\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?doubledrilled-com-ru\.blogspot\.com
+https?:\/\/([^\/]*\.)?douglasgenetic\.org
+https?:\/\/([^\/]*\.)?download-fisting-free-movie-pussy\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?download-free-porn-clip-zone186\.blogspot\.com
+https?:\/\/([^\/]*\.)?download-free-porn-movie-bb-bb-h\.blogspot\.com
+https?:\/\/([^\/]*\.)?download-free-ringtonebso\.blogspot\.com
+https?:\/\/([^\/]*\.)?download-free-ringtonekdw\.blogspot\.com
+https?:\/\/([^\/]*\.)?download-free-ringtonekfb\.blogspot\.com
+https?:\/\/([^\/]*\.)?download-free-ringtoneoug\.blogspot\.com
+https?:\/\/([^\/]*\.)?download-free-ringtonesasd\.blogspot\.com
+https?:\/\/([^\/]*\.)?download-ringtonevnr\.blogspot\.com
+https?:\/\/([^\/]*\.)?downloadfreeringtonengp\.blogspot\.com
+https?:\/\/([^\/]*\.)?downsms\.blogbus\.com
+https?:\/\/([^\/]*\.)?dpfanatics-com-t7nqv\.blogspot\.com
+https?:\/\/([^\/]*\.)?dqezl\.szm\.sk
+https?:\/\/([^\/]*\.)?draghi\.ll11\.info
+https?:\/\/([^\/]*\.)?dragonballxxx-gratis\.19mb\.info
+https?:\/\/([^\/]*\.)?dragonmovies-dd2bm5sn\.blogspot\.com
+https?:\/\/([^\/]*\.)?dragonmovies-rwng8vm7j\.blogspot\.com
+https?:\/\/([^\/]*\.)?drbizzaro-com-r5\.blogspot\.com
+https?:\/\/([^\/]*\.)?drdos\.50webs\.org
+https?:\/\/([^\/]*\.)?dreamathk\.com
+https?:\/\/([^\/]*\.)?dreamatsh\.com
+https?:\/\/([^\/]*\.)?dreamhk\.org
+https?:\/\/([^\/]*\.)?dress-jacket\.haemati\.be
+https?:\/\/([^\/]*\.)?drithle\.com
+https?:\/\/([^\/]*\.)?driving-school\.hotmail\.ru
+https?:\/\/([^\/]*\.)?driving2school\.chat\.ru
+https?:\/\/([^\/]*\.)?dronaceldar\.darkbb\.com
+https?:\/\/([^\/]*\.)?dronc4tta\.blogcu\.com
+https?:\/\/([^\/]*\.)?droncaca\.blogcu\.com
+https?:\/\/([^\/]*\.)?dronchitr\.blogcu\.com
+https?:\/\/([^\/]*\.)?drondomrac\.bb-fr\.com
+https?:\/\/([^\/]*\.)?drondrontr\.zikforum\.com
+https?:\/\/([^\/]*\.)?dronladar\.discutfree\.com
+https?:\/\/([^\/]*\.)?dronladar\.dynamicforum\.net
+https?:\/\/([^\/]*\.)?dronrelco\.td\.pl
+https?:\/\/([^\/]*\.)?drownedmagenta\.50webs\.org
+https?:\/\/([^\/]*\.)?drug\.prtime\.ru
+https?:\/\/([^\/]*\.)?drunkgirls\.coz\.in
+https?:\/\/([^\/]*\.)?dry-skin\.boom\.ru
+https?:\/\/([^\/]*\.)?dry1skin\.chat\.ru
+https?:\/\/([^\/]*\.)?dscw0\.szm\.sk
+https?:\/\/([^\/]*\.)?dtmpdpxmsu-video\.blogspot\.com
+https?:\/\/([^\/]*\.)?du-alice\.blogspot\.com
+https?:\/\/([^\/]*\.)?duaroti\.50webs\.com
+https?:\/\/([^\/]*\.)?dub-dom-adu\.blogspot\.com
+https?:\/\/([^\/]*\.)?duckyporn-ifl4u28p\.blogspot\.com
+https?:\/\/([^\/]*\.)?ducpjo3\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?dudoctor\.com
+https?:\/\/([^\/]*\.)?dudubilz\.dl\.pl
+https?:\/\/([^\/]*\.)?dumtrric\.forumzen\.com
+https?:\/\/([^\/]*\.)?duncemoney\.com
+https?:\/\/([^\/]*\.)?dunham-hiking-boot\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?dup-xxxfolder-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?dupiwu\.com
+https?:\/\/([^\/]*\.)?duptv\.szm\.sk
+https?:\/\/([^\/]*\.)?dushen\.net\.cn
+https?:\/\/([^\/]*\.)?dusts\.info
+https?:\/\/([^\/]*\.)?dutbm\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?duxbd\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?duxfhgz\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?dvd-vergini-economici-r\.host24h\.info
+https?:\/\/([^\/]*\.)?dvdunwritten\.toplog\.nl
+https?:\/\/([^\/]*\.)?dwaeaz-free-porn\.blogspot\.com
+https?:\/\/([^\/]*\.)?dwsyv\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?dxjyb\.szm\.sk
+https?:\/\/([^\/]*\.)?dykzozqlpt-video\.blogspot\.com
+https?:\/\/([^\/]*\.)?dzb\.com\.cn
+https?:\/\/([^\/]*\.)?dzgzm\.cn
+https?:\/\/([^\/]*\.)?dzjp\.left-page\.com
+https?:\/\/([^\/]*\.)?dzjp\.zxvo\.com
+https?:\/\/([^\/]*\.)?dzsb\.com
+https?:\/\/([^\/]*\.)?dzsc\.com
+https?:\/\/([^\/]*\.)?e-dishnetworks\.com
+https?:\/\/([^\/]*\.)?e-fanyi\.org
+https?:\/\/([^\/]*\.)?e-holdem\.net
+https?:\/\/([^\/]*\.)?e\.kth\.se
+https?:\/\/([^\/]*\.)?e16\.info
+https?:\/\/([^\/]*\.)?e93\.iitalia\.com
+https?:\/\/([^\/]*\.)?eaby2\.szm\.sk
+https?:\/\/([^\/]*\.)?eacome\.com
+https?:\/\/([^\/]*\.)?eafg6\.szm\.sk
+https?:\/\/([^\/]*\.)?eaglechief\.com
+https?:\/\/([^\/]*\.)?eamon-fuck-it-video\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?eappf\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?earticlesonline\.com
+https?:\/\/([^\/]*\.)?easy-furniture\.org
+https?:\/\/([^\/]*\.)?easygals-com-h4\.blogspot\.com
+https?:\/\/([^\/]*\.)?easypic-com-if7pnmrbxd\.blogspot\.com
+https?:\/\/([^\/]*\.)?easypornstars-com-b8k4y\.blogspot\.com
+https?:\/\/([^\/]*\.)?easypornstars-com-subut\.blogspot\.com
+https?:\/\/([^\/]*\.)?easysail\.net\.cn
+https?:\/\/([^\/]*\.)?eating-free-lesbian-pussy\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?eating-lesbian-pussy\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?ebackground-checks\.com
+https?:\/\/([^\/]*\.)?ebdoc\.com
+https?:\/\/([^\/]*\.)?ebnjj\.info
+https?:\/\/([^\/]*\.)?ebony-free-woman\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?ebony-fuck-tit\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?ebony-horny-hot-woman\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?ebony-hot-outdoor\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?ebony-info-photo-remember-sexy\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?ebony-info-remember-tit\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?ebony-party-sex\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?ebony-porn-trailer\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?ebony-sex-com\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?ebony-teen-pic\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?ebony-teen-tgp\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?ebonyblack-net-gf\.blogspot\.com
+https?:\/\/([^\/]*\.)?ebonyblack-net-m3dy7kn\.blogspot\.com
+https?:\/\/([^\/]*\.)?ebonybooty\.wehostporno\.com
+https?:\/\/([^\/]*\.)?ebusiness-cards\.org
+https?:\/\/([^\/]*\.)?ecar-rentals\.com
+https?:\/\/([^\/]*\.)?eccellente\.info
+https?:\/\/([^\/]*\.)?ececu\.com
+https?:\/\/([^\/]*\.)?echayka\.com
+https?:\/\/([^\/]*\.)?eclexion\.net
+https?:\/\/([^\/]*\.)?eclissi-di-luna\.host24h\.info
+https?:\/\/([^\/]*\.)?ecomm1\.csug\.rochester\.edu
+https?:\/\/([^\/]*\.)?econtact-lens\.com
+https?:\/\/([^\/]*\.)?ed2k\.net\.ua
+https?:\/\/([^\/]*\.)?edasim\.com
+https?:\/\/([^\/]*\.)?eddiereva\.com
+https?:\/\/([^\/]*\.)?edetrali\.jconserv\.net
+https?:\/\/([^\/]*\.)?edomerna\.jconserv\.net
+https?:\/\/([^\/]*\.)?edonline\.ua\.edu
+https?:\/\/([^\/]*\.)?edqlzct\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?education\.beta\.edgewood\.edu
+https?:\/\/([^\/]*\.)?education\.uncc\.edu
+https?:\/\/([^\/]*\.)?education1degree\.chat\.ru
+https?:\/\/([^\/]*\.)?ee3\.be
+https?:\/\/([^\/]*\.)?eelive\.info
+https?:\/\/([^\/]*\.)?eenxn\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ees\.ufl\.edu
+https?:\/\/([^\/]*\.)?eesg8\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?eeshq\.com
+https?:\/\/([^\/]*\.)?eetop\.info
+https?:\/\/([^\/]*\.)?eevjgn7\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?effexor-xr\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?effexor\.b0ne\.com
+https?:\/\/([^\/]*\.)?egciz\.szm\.sk
+https?:\/\/([^\/]*\.)?egnadn-free-porn\.blogspot\.com
+https?:\/\/([^\/]*\.)?egnpgno\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?egoldhyip\.athost\.net
+https?:\/\/([^\/]*\.)?egoldhyip\.sitesfree\.com
+https?:\/\/([^\/]*\.)?egunteronline\.com
+https?:\/\/([^\/]*\.)?eightalya\.blogspot\.com
+https?:\/\/([^\/]*\.)?eighty-8088\.blogspot\.com
+https?:\/\/([^\/]*\.)?eijy7\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ejeesf2\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ejreoonster\.blogspot\.com
+https?:\/\/([^\/]*\.)?ejvyd\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?ejyt9\.szm\.sk
+https?:\/\/([^\/]*\.)?ekajl\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?ekjms\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ekttsaj\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ekviceaia\.blogspot\.com
+https?:\/\/([^\/]*\.)?ekxkfyz\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?el-ladies-com-m4ayb\.blogspot\.com
+https?:\/\/([^\/]*\.)?elacelal\.informe\.com
+https?:\/\/([^\/]*\.)?elbasbo\.dl\.pl
+https?:\/\/([^\/]*\.)?elbocboc\.bbgraf\.com
+https?:\/\/([^\/]*\.)?elbows-at\.blogspot\.com
+https?:\/\/([^\/]*\.)?elbtoy\.realpornstar\.net
+https?:\/\/([^\/]*\.)?elcnaac\.cultureforum\.net
+https?:\/\/([^\/]*\.)?electric-scooter\.hotmail\.ru
+https?:\/\/([^\/]*\.)?electric1scooter\.chat\.ru
+https?:\/\/([^\/]*\.)?electricscooterland\.com
+https?:\/\/([^\/]*\.)?elephantlist-com-hozhkwuac6\.blogspot\.com
+https?:\/\/([^\/]*\.)?elephantlist-com-kedi0pfbp\.blogspot\.com
+https?:\/\/([^\/]*\.)?elerc4t\.blogcu\.com
+https?:\/\/([^\/]*\.)?eleven-heaven0a\.blogspot\.com
+https?:\/\/([^\/]*\.)?elevtenl\.blogspot\.com
+https?:\/\/([^\/]*\.)?elishacuthbertfansite\.com
+https?:\/\/([^\/]*\.)?eliteclips-com-c0hwm3fji\.blogspot\.com
+https?:\/\/([^\/]*\.)?eliteclips-com-k5hkm6yi\.blogspot\.com
+https?:\/\/([^\/]*\.)?eliteclips-com-kzjz30a5k4\.blogspot\.com
+https?:\/\/([^\/]*\.)?elixirium\.ifrance\.com
+https?:\/\/([^\/]*\.)?eloloac\.bbgraf\.com
+https?:\/\/([^\/]*\.)?eloudar\.discutforum\.com
+https?:\/\/([^\/]*\.)?elovejob\.info
+https?:\/\/([^\/]*\.)?elpos\.szm\.sk
+https?:\/\/([^\/]*\.)?eltalchi\.bbfr\.net
+https?:\/\/([^\/]*\.)?eltalli\.zj\.pl
+https?:\/\/([^\/]*\.)?eltbuzel\.forumzen\.com
+https?:\/\/([^\/]*\.)?eltcer\.winnerforum\.net
+https?:\/\/([^\/]*\.)?eltgetric\.uy\.pl
+https?:\/\/([^\/]*\.)?eltrelboc\.bbfr\.net
+https?:\/\/([^\/]*\.)?eltrical\.uy\.pl
+https?:\/\/([^\/]*\.)?eltroboc\.lolforum\.net
+https?:\/\/([^\/]*\.)?eltrolpas\.winnerforum\.net
+https?:\/\/([^\/]*\.)?elttaacel\.heavenforum\.com
+https?:\/\/([^\/]*\.)?elttaacel\.highforum\.net
+https?:\/\/([^\/]*\.)?elttrocpas\.discutforum\.com
+https?:\/\/([^\/]*\.)?elwg0\.szm\.sk
+https?:\/\/([^\/]*\.)?elysium-ringtonebub\.blogspot\.com
+https?:\/\/([^\/]*\.)?elysium-ringtonemzb\.blogspot\.com
+https?:\/\/([^\/]*\.)?elzelchi\.cultureforum\.net
+https?:\/\/([^\/]*\.)?emails\.ncedly\.be
+https?:\/\/([^\/]*\.)?emea-consulting\.net
+https?:\/\/([^\/]*\.)?emily\.slyip\.com
+https?:\/\/([^\/]*\.)?eminem-suck-my-dick\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?eminem-veyb\.blogspot\.com
+https?:\/\/([^\/]*\.)?eminen-lyric-ass-like-that\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?empire-holdem\.com
+https?:\/\/([^\/]*\.)?empire-holdem\.net
+https?:\/\/([^\/]*\.)?empire-holdem\.us
+https?:\/\/([^\/]*\.)?empire-poker\.black-poker\.com
+https?:\/\/([^\/]*\.)?empirepoker\.u288\.com
+https?:\/\/([^\/]*\.)?emxk0\.szm\.sk
+https?:\/\/([^\/]*\.)?ena-free-show\.net
+https?:\/\/([^\/]*\.)?enchanted1312\.blogspot\.com
+https?:\/\/([^\/]*\.)?end14april\.ifrance\.com
+https?:\/\/([^\/]*\.)?enema-fetish-free-picture\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?energo\.us
+https?:\/\/([^\/]*\.)?enetdrugsonline\.org
+https?:\/\/([^\/]*\.)?enfoldrevel\.epinoy\.com
+https?:\/\/([^\/]*\.)?engineerin2degre\.chat\.ru
+https?:\/\/([^\/]*\.)?engs\.info
+https?:\/\/([^\/]*\.)?enpresse\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?enteworld\.com
+https?:\/\/([^\/]*\.)?eoglu\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?eour8\.szm\.sk
+https?:\/\/([^\/]*\.)?ephedra\.269g\.net
+https?:\/\/([^\/]*\.)?ephedraproduct\.seesaa\.net
+https?:\/\/([^\/]*\.)?epiqq\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?epointer\.freewebpage\.org
+https?:\/\/([^\/]*\.)?eprom-dresses\.com
+https?:\/\/([^\/]*\.)?epxxw\.szm\.sk
+https?:\/\/([^\/]*\.)?erasser\.8tt\.org
+https?:\/\/([^\/]*\.)?erbocco\.discutforum\.com
+https?:\/\/([^\/]*\.)?erc4tget\.blogcu\.com
+https?:\/\/([^\/]*\.)?erdomrol\.heavenforum\.com
+https?:\/\/([^\/]*\.)?erdomrol\.highforum\.net
+https?:\/\/([^\/]*\.)?ereaa\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?erealtystore\.com
+https?:\/\/([^\/]*\.)?erelleta\.forumzen\.com
+https?:\/\/([^\/]*\.)?eremat\.com
+https?:\/\/([^\/]*\.)?erjiguan\.dzsc\.com
+https?:\/\/([^\/]*\.)?erlitroc\.xa\.pl
+https?:\/\/([^\/]*\.)?ernvmf7\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?erotic-gay-male-sex-story\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?erotic-story-fem-dom\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?ertral\.alkablog\.com
+https?:\/\/([^\/]*\.)?erw1r\.info
+https?:\/\/([^\/]*\.)?escher\.isis\.vanderbilt\.edu
+https?:\/\/([^\/]*\.)?eseo\.cn
+https?:\/\/([^\/]*\.)?esgic\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?eshilzet\.forumzen\.com
+https?:\/\/([^\/]*\.)?esino\.info
+https?:\/\/([^\/]*\.)?esiti-gara\.hostzz\.info
+https?:\/\/([^\/]*\.)?esjpd\.szm\.sk
+https?:\/\/([^\/]*\.)?esmpa\.com
+https?:\/\/([^\/]*\.)?esportswave\.com
+https?:\/\/([^\/]*\.)?esraj\.com
+https?:\/\/([^\/]*\.)?esseiwer\.dl\.pl
+https?:\/\/([^\/]*\.)?estarcollector\.blogspot\.com
+https?:\/\/([^\/]*\.)?etac4\.szm\.sk
+https?:\/\/([^\/]*\.)?etcoq\.szm\.sk
+https?:\/\/([^\/]*\.)?etgelcca\.forumzen\.com
+https?:\/\/([^\/]*\.)?ethnicpassion-com-db5\.blogspot\.com
+https?:\/\/([^\/]*\.)?ethnicpassion-com-ik80lyfnd\.blogspot\.com
+https?:\/\/([^\/]*\.)?ethnicpassion-com-iqa3gt\.blogspot\.com
+https?:\/\/([^\/]*\.)?ethnicpassion-com-itw\.blogspot\.com
+https?:\/\/([^\/]*\.)?etjhechi\.forumzen\.com
+https?:\/\/([^\/]*\.)?etjhetrd\.forumzen\.com
+https?:\/\/([^\/]*\.)?etkrudom\.forumzen\.com
+https?:\/\/([^\/]*\.)?etlitvir\.forumzen\.com
+https?:\/\/([^\/]*\.)?etlurlir\.forumzen\.com
+https?:\/\/([^\/]*\.)?etmuhlie\.forumzen\.com
+https?:\/\/([^\/]*\.)?etnuidet\.forumzen\.com
+https?:\/\/([^\/]*\.)?etofas\.com
+https?:\/\/([^\/]*\.)?etrart\.com
+https?:\/\/([^\/]*\.)?etrewlia\.forumzen\.com
+https?:\/\/([^\/]*\.)?etshalir\.forumzen\.com
+https?:\/\/([^\/]*\.)?ettamlet\.forumzen\.com
+https?:\/\/([^\/]*\.)?ettimera\.forumzen\.com
+https?:\/\/([^\/]*\.)?etwhiett\.forumzen\.com
+https?:\/\/([^\/]*\.)?etwhiolo\.forumzen\.com
+https?:\/\/([^\/]*\.)?etzvg\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?etzyrpk\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?eubaspro\.com
+https?:\/\/([^\/]*\.)?eudrayv\.blogspot\.com
+https?:\/\/([^\/]*\.)?eueyniqott-video\.blogspot\.com
+https?:\/\/([^\/]*\.)?euomtrna\.jconserv\.net
+https?:\/\/([^\/]*\.)?eurosexparties-com-jezun\.blogspot\.com
+https?:\/\/([^\/]*\.)?eurosexparties-com-mmnl2m\.blogspot\.com
+https?:\/\/([^\/]*\.)?eva-irina\.isuisse\.com
+https?:\/\/([^\/]*\.)?evamiee\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?eveqx\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?everywhere-com-tpovy8exl\.blogspot\.com
+https?:\/\/([^\/]*\.)?evfegl9\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?evhp2\.szm\.sk
+https?:\/\/([^\/]*\.)?evil-gummiworm\.blogspot\.com
+https?:\/\/([^\/]*\.)?ewdnqb4\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?exchange-lingerie-link-womens\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?exciting-casino\.com
+https?:\/\/([^\/]*\.)?exhuq\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?extrarx\.kvkb\.com
+https?:\/\/([^\/]*\.)?extremeapril-com-adsm\.blogspot\.com
+https?:\/\/([^\/]*\.)?extremeapril-com-woje\.blogspot\.com
+https?:\/\/([^\/]*\.)?extremeapril-dhx1z\.blogspot\.com
+https?:\/\/([^\/]*\.)?ez\.asn\.und\.edu
+https?:\/\/([^\/]*\.)?ezjor\.com
+https?:\/\/([^\/]*\.)?ezkes\.com
+https?:\/\/([^\/]*\.)?ezxwc\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?f-download-free-sex-video\.blogspot\.com
+https?:\/\/([^\/]*\.)?f-z-a\.com
+https?:\/\/([^\/]*\.)?faadney\.dl\.pl
+https?:\/\/([^\/]*\.)?fabrizio-corona\.freehostss\.info
+https?:\/\/([^\/]*\.)?face-lick-lickable-licker-tongue\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?facial-abuse--com\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?facial-hair-remover\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?facial-paralysis-treatment\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?facial-plastic-surgery-manhattan\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?facial-whore\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?faculty\.etsu\.edu
+https?:\/\/([^\/]*\.)?faculty\.hope\.edu
+https?:\/\/([^\/]*\.)?faculty\.oxy\.edu
+https?:\/\/([^\/]*\.)?faculty\.ugf\.edu
+https?:\/\/([^\/]*\.)?faculty\.whatcom\.ctc\.edu
+https?:\/\/([^\/]*\.)?facweb\.cs\.depaul\.edu
+https?:\/\/([^\/]*\.)?fadianji\.dzsc\.com
+https?:\/\/([^\/]*\.)?fagin\.info
+https?:\/\/([^\/]*\.)?fairy\.8888mb\.com
+https?:\/\/([^\/]*\.)?faleake\.dl\.pl
+https?:\/\/([^\/]*\.)?falling-anvil\.blogspot\.com
+https?:\/\/([^\/]*\.)?family-viagra\.com
+https?:\/\/([^\/]*\.)?famouspornstars-com-o020ss18d8\.blogspot\.com
+https?:\/\/([^\/]*\.)?famvir\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?fangdaqi\.dzsc\.com
+https?:\/\/([^\/]*\.)?fantasticnudes-com-bol80a\.blogspot\.com
+https?:\/\/([^\/]*\.)?fantasticnudes-com-by8gook\.blogspot\.com
+https?:\/\/([^\/]*\.)?fantasticnudes-com-qic\.blogspot\.com
+https?:\/\/([^\/]*\.)?fantasticnudes-com-r60\.blogspot\.com
+https?:\/\/([^\/]*\.)?fantasy-hand-job-teen\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?farmius\.org
+https?:\/\/([^\/]*\.)?fascination\.my10gb\.com
+https?:\/\/([^\/]*\.)?fasnty\.com
+https?:\/\/([^\/]*\.)?fasoft\.com\.cn
+https?:\/\/([^\/]*\.)?fast-loaneqh\.blogspot\.com
+https?:\/\/([^\/]*\.)?fastmovers\.org
+https?:\/\/([^\/]*\.)?fat-banging\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?fat-blonde-woman\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?fat-fuck-video\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?fat-porn-clip-infoecm\.blogspot\.com
+https?:\/\/([^\/]*\.)?fat-porn-clip-infomyi\.blogspot\.com
+https?:\/\/([^\/]*\.)?fat-tgp-com-ee\.blogspot\.com
+https?:\/\/([^\/]*\.)?fat-tgp-com-g654ywug\.blogspot\.com
+https?:\/\/([^\/]*\.)?fatfucks-com-kdy41nn4fr\.blogspot\.com
+https?:\/\/([^\/]*\.)?fatfucks-com-t232q4\.blogspot\.com
+https?:\/\/([^\/]*\.)?fatfucks-com-tf0v115rm\.blogspot\.com
+https?:\/\/([^\/]*\.)?fatfucks-com-thr8\.blogspot\.com
+https?:\/\/([^\/]*\.)?fathut-com-db66nw2a\.blogspot\.com
+https?:\/\/([^\/]*\.)?fathut-com-hqloar2t8\.blogspot\.com
+https?:\/\/([^\/]*\.)?fattythumbs-com-el24t2\.blogspot\.com
+https?:\/\/([^\/]*\.)?fattythumbs-com-iq1\.blogspot\.com
+https?:\/\/([^\/]*\.)?fau75\.blogspot\.com
+https?:\/\/([^\/]*\.)?favorite-casino\.com
+https?:\/\/([^\/]*\.)?fawninglace\.freehostingz\.com
+https?:\/\/([^\/]*\.)?fbcjr\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?fbugy\.szm\.sk
+https?:\/\/([^\/]*\.)?fcpx5\.szm\.sk
+https?:\/\/([^\/]*\.)?fcuml\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?fcup3\.szm\.sk
+https?:\/\/([^\/]*\.)?fdjcz\.sunp\.com
+https?:\/\/([^\/]*\.)?fdxyp\.szm\.sk
+https?:\/\/([^\/]*\.)?fe-algebra\.blogspot\.com
+https?:\/\/([^\/]*\.)?fe-whateve\.blogspot\.com
+https?:\/\/([^\/]*\.)?fedems\.com
+https?:\/\/([^\/]*\.)?feeltime\.cn
+https?:\/\/([^\/]*\.)?feeltime\.com
+https?:\/\/([^\/]*\.)?fehpks4\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?feidenfurniture\.com
+https?:\/\/([^\/]*\.)?fejwh\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?fem-dom-art-and-drawing\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?female-ass-worship\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?female-condom-sex\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?female-v\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?femdog\.blogspot\.com
+https?:\/\/([^\/]*\.)?feq-tugjobs-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?ferda111\.php5\.cz
+https?:\/\/([^\/]*\.)?ferer\.superprovider\.de
+https?:\/\/([^\/]*\.)?feretuc\.forumculture\.net
+https?:\/\/([^\/]*\.)?ferrarimaser\.info
+https?:\/\/([^\/]*\.)?fest-frat-fuck\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?fetish-club-in-ipswitch-uk\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?fetish-hardcore-lesbian-more\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?fetish-heel-high-in-nylon-pretty-toe\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?fetish-pantie-white\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?fetus-free-sex-video-l\.blogspot\.com
+https?:\/\/([^\/]*\.)?ffhi7\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?fflive\.info
+https?:\/\/([^\/]*\.)?fge-teens-links-0\.blogspot\.com
+https?:\/\/([^\/]*\.)?fghrf\.8888mb\.com
+https?:\/\/([^\/]*\.)?fgvan\.info
+https?:\/\/([^\/]*\.)?fgvzq\.szm\.sk
+https?:\/\/([^\/]*\.)?fhbi5\.szm\.sk
+https?:\/\/([^\/]*\.)?fhmms\.szm\.sk
+https?:\/\/([^\/]*\.)?fhwl-com-dy1tbi5l\.blogspot\.com
+https?:\/\/([^\/]*\.)?fhwl-com-mn8ni\.blogspot\.com
+https?:\/\/([^\/]*\.)?fhwl-com-wc\.blogspot\.com
+https?:\/\/([^\/]*\.)?fhwl-com-wgrog\.blogspot\.com
+https?:\/\/([^\/]*\.)?fibiger\.org
+https?:\/\/([^\/]*\.)?fifa2007it\.org
+https?:\/\/([^\/]*\.)?fihqquj\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?filipina-lesbian-teen\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?fillchill\.mybbland\.com
+https?:\/\/([^\/]*\.)?film-da-scaricare\.host24h\.info
+https?:\/\/([^\/]*\.)?finalteens-com-c6o0080y\.blogspot\.com
+https?:\/\/([^\/]*\.)?finalteens-com-kpngsoxf\.blogspot\.com
+https?:\/\/([^\/]*\.)?finanziamento-on-line\.19mb\.info
+https?:\/\/([^\/]*\.)?finanziamento-personale\.hostzz\.info
+https?:\/\/([^\/]*\.)?finanziamento-treviso\.host24h\.info
+https?:\/\/([^\/]*\.)?findbabychick\.info
+https?:\/\/([^\/]*\.)?findbabygirl\.info
+https?:\/\/([^\/]*\.)?findvic\.com
+https?:\/\/([^\/]*\.)?fine-lingerie-online-sexy\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?finger-fuck-clip\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?fioricet\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?fioricet\.47\.pl
+https?:\/\/([^\/]*\.)?fioricet\.edu\.tf
+https?:\/\/([^\/]*\.)?fioricet\.hav\.pl
+https?:\/\/([^\/]*\.)?fioricet\.skocz\.net
+https?:\/\/([^\/]*\.)?fioricetrx\.weboficial\.com
+https?:\/\/([^\/]*\.)?fioricets\.blogspot\.com
+https?:\/\/([^\/]*\.)?firejedi\.blogspot\.com
+https?:\/\/([^\/]*\.)?first-free-fuck-time-video\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?first-lesbian-experience-story\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?first-lesbian-video-xxx\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?first-porn\.futureblog\.org
+https?:\/\/([^\/]*\.)?firstchristianbank\.info
+https?:\/\/([^\/]*\.)?firstdrugstorezone\.info
+https?:\/\/([^\/]*\.)?firstfriends\.us
+https?:\/\/([^\/]*\.)?firsthorizonmtg\.com
+https?:\/\/([^\/]*\.)?firstnightcharleston\.com
+https?:\/\/([^\/]*\.)?firsttimeauditions-com-asq5m\.blogspot\.com
+https?:\/\/([^\/]*\.)?firsttimeauditions-com-gxs\.blogspot\.com
+https?:\/\/([^\/]*\.)?fishdor\.joolo\.com
+https?:\/\/([^\/]*\.)?fishing-rod\.247ihost\.com
+https?:\/\/([^\/]*\.)?fishing-rod\.hostpresso\.com
+https?:\/\/([^\/]*\.)?fishing-rod\.joolo\.com
+https?:\/\/([^\/]*\.)?fishins\.247ihost\.com
+https?:\/\/([^\/]*\.)?fishman\.freewebhosting360\.com
+https?:\/\/([^\/]*\.)?fishmpegs-com-oet5\.blogspot\.com
+https?:\/\/([^\/]*\.)?fishmpegs-com-r5\.blogspot\.com
+https?:\/\/([^\/]*\.)?fishmpegs-com-r87f7ui\.blogspot\.com
+https?:\/\/([^\/]*\.)?fisting-gay-movie\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?fisting-group-sex\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?fisting-lesbian-movie\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?fisting-lesson-maya\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?fistinglessons-com-dmskwfs\.blogspot\.com
+https?:\/\/([^\/]*\.)?fistinglessons-com-i03p\.blogspot\.com
+https?:\/\/([^\/]*\.)?fitofarm\.com
+https?:\/\/([^\/]*\.)?fitvzj-free-porn\.blogspot\.com
+https?:\/\/([^\/]*\.)?fjp\.left-page\.com
+https?:\/\/([^\/]*\.)?fjp\.zxvo\.com
+https?:\/\/([^\/]*\.)?fkcvlna\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?fkvvp\.szm\.sk
+https?:\/\/([^\/]*\.)?flandra\.php5\.cz
+https?:\/\/([^\/]*\.)?flawformed\.hostonmars\.com
+https?:\/\/([^\/]*\.)?flexeril\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?flextra\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?flkkmex\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?fllood\.blogspot\.com
+https?:\/\/([^\/]*\.)?fllwlv6\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?flnet\.org
+https?:\/\/([^\/]*\.)?flonase\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?flooring-guide\.org
+https?:\/\/([^\/]*\.)?floridamortgage-x\.com
+https?:\/\/([^\/]*\.)?floridian-love\.blogspot\.com
+https?:\/\/([^\/]*\.)?flower\.hostonmars\.com
+https?:\/\/([^\/]*\.)?flowerdive\.info
+https?:\/\/([^\/]*\.)?flqcjnw\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?fluffy\.hostcroc\.com
+https?:\/\/([^\/]*\.)?fluoxetine\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?fnhtgggv\.t35\.com
+https?:\/\/([^\/]*\.)?fnxsj\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?foecedh3artbrat\.blogspot\.com
+https?:\/\/([^\/]*\.)?foedu-de-solnil\.blogspot\.com
+https?:\/\/([^\/]*\.)?folast\.com
+https?:\/\/([^\/]*\.)?folcan\.my10gb\.com
+https?:\/\/([^\/]*\.)?fondi-italiano\.hostzz\.info
+https?:\/\/([^\/]*\.)?for-whorevideos-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?forbestcare\.info
+https?:\/\/([^\/]*\.)?forensic1nursing\.chat\.ru
+https?:\/\/([^\/]*\.)?forex\.fasthost\.pl
+https?:\/\/([^\/]*\.)?fork-hief\.ibelgique\.com
+https?:\/\/([^\/]*\.)?formulam\.net
+https?:\/\/([^\/]*\.)?fortune-slots\.com
+https?:\/\/([^\/]*\.)?forum\.kharkiv\.edu
+https?:\/\/([^\/]*\.)?fos-sologals-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?foto-sabrina-ferilli\.host24h\.info
+https?:\/\/([^\/]*\.)?foxeykie\.iespana\.es
+https?:\/\/([^\/]*\.)?fozq6\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?fpa7kctb\.t35\.com
+https?:\/\/([^\/]*\.)?fqred\.com
+https?:\/\/([^\/]*\.)?fragolla\.blogspot\.com
+https?:\/\/([^\/]*\.)?frbarber\.dl\.pl
+https?:\/\/([^\/]*\.)?frbracco\.dl\.pl
+https?:\/\/([^\/]*\.)?freakthumbs-com-bp\.blogspot\.com
+https?:\/\/([^\/]*\.)?freakthumbs-com-hcmkk\.blogspot\.com
+https?:\/\/([^\/]*\.)?frebnet\.com
+https?:\/\/([^\/]*\.)?fredd0\.info
+https?:\/\/([^\/]*\.)?free-access\.freeinsite\.net
+https?:\/\/([^\/]*\.)?free-adult-porn-clip-info43c\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-adult-porn-clip-infopqk\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-amateur-hardcore-pic\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?free-amateur-submitted-photo\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?free-amateur-video-e2843\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-anal-blonde-sex-pic\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?free-anal-porn-clip\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?free-anal-xxx-clip\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?free-anime-porn-clip-info6tn\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-anime-porn-clips-newsyby\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-asian-lesbian-sex-video\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?free-bbw-porn-clip-blog4wm\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-big-ass-porn\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?free-big-boob-porn-movie\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?free-big-boob\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?free-bizarre-insertion-pic\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?free-bizarre-porn-pic\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?free-black-amateur\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?free-black-porn-clip-blogo7t\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-black-porn-movie-kebi\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-black-porn-video-clip-newsjqj\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-busty-asian-movie\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?free-busty-blonde-pic\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?free-busty-porn-movie\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?free-busty-redhead-pic\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?free-butt-fucking-video\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?free-cartoon-porn-clip-zoneikt\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-cartoon-porn-clip-zonewpm\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-celebrity-porn-clip-infowuz\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-celebrity-porn-video-bo\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-chubby-girl-pic\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?free-cock-sucking-slut-video\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?free-college-fuck-fest-gallery\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?free-cum-blow-job-gallery\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?free-cum-in-mouth-video\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?free-cum-swap-video\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?free-ebony-porn-clip-zonek7c\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-ebony-porn-clip-zonelcy\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-ebony-pussy-pic\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?free-ebony-sex-video-di\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-fat-porn-clip-infotno\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-fem-dom-thumb\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?free-female-orgasm-video-bb-bb-h\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-filipina-sex-movie\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?free-first-time-lesbian-sex-story\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?free-fisting-mpeg\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?free-fisting-sex-video\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?free-fucking-bitch\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?free-fucking-gallery-hardcore\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?free-fucking-sex-porn-site\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?free-full-length-porn-mov-bb-bb-w\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-gang-bang-sample\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?free-gay-hunk-male-movie-muscled-stud-video\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?free-gay-muscle\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?free-gay-picture-sex\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?free-gay-porn-clips-info35a\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-gay-porn-movie-clip-bloglor\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-gay-porn-movie-p-d-h\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-gay-porn-video-clip-newsa83\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-gay-porn-video-p-v-p\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-gay-porn-web-site\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?free-gay-sex-movie-bb-bb-s\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-gay-sex-teen-trailer\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?free-gay-trailer\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?free-granny-lesbian\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?free-granny-movie-old\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?free-granny-pic-woman\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?free-group-lesbian-preview-sex-video\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?free-hand-job-movie-bb-bb-h\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-hand-job-video-clip-bb-bb-c\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-hardcore-movie-gallery-xxx\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?free-hardcore-porn-clip-blog07a\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-hardcore-porn-clip-blogi4k\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-hardcore-porn-star-picture\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?free-hardcore-sex-mpeg\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?free-heel-high-leg-pic-stilettos-stocking\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?free-homemade-porn-clip-news22n\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-homemade-porn-clip-news7ro\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-hot-blonde-nude-pic\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?free-hot-leg-nude-wallpaper-woman\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?free-hot-mom\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?free-hot-web-cam-video-h-s-f\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-huge-black-gay-cock\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?free-in-lesbian-movie-nylons\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?free-indian-porn-clip-infok6x\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-interracial-sex-video-ko\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-latin-ass\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?free-lesbian-cam-chat\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?free-lesbian-clip-zuxi\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-lesbian-hentai-movie\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?free-lesbian-licking-pic\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?free-lesbian-mature-sex-video-young\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?free-lesbian-movie-gjqvl\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-lesbian-porn-clips-blogagm\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-lesbian-porn-video-clip-newsidt\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-lesbian-video-a7e8t\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-lesbian-xxx-picture\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?free-long-porn-clip-info2fo\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-long-porn-clip-info7pr\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-long-porn-movie-clip-blogxn2\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-long-porn-movie-clip-zoneq4f\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-long-porn-video-wi\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-male-bisexual-porn\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?free-mature-porn-clip-zone5bz\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-mature-sex-clip\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?free-mature-sex-story\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?free-mature-thumbnail-post\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?free-milf-porn-clip-zonenqn\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-milf-video-bb-bb-n\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-mmf-bisex\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?free-naked-mature-lady\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?free-nude-bitch\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?free-nude-blonde-gallery\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?free-older-woman-fucking\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?free-online-poker-000\.biz
+https?:\/\/([^\/]*\.)?free-orgasm-clip-supi\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-paris-hilton-porn-clip-infolah\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-personal-gay-links-tommys-favorite\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?free-pic-of-big-dicks\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?free-pic-of-busty-babes\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?free-pic-of-woman-kissing\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?free-picture-hardcore-anal\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?free-picture-hardcore-anal\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?free-picture-huge-clit\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?free-porn-chwd\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-porn-clip-nep\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-porn-clip-trailer-infog42\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-porn-clip-zoneil5\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-porn-clip-zonek61\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-porn-clip-zoneu7t\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-porn-clips-newsid3\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-porn-movie-to0r5\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-porn-movie-zet\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-porn-psp-video-po\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-porn-sample-clip-infodwd\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-porn-sample-clip-newsb26\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-porn-sex-clip-zoneavj\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-porn-star-movie-bb-bb-h\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-porn-star-video-clip-blog81e\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-porn-video-clip-info7km\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-porn-video-clip-infoixk\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-porn-video-clip-sample-newsw3t\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-porn-video-clips-infooem\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-porn-video-porn-clip-blogiep\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-porn-video-porn-clip-zonepqd\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-porn-video-puz\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-porn\.xa\.pl
+https?:\/\/([^\/]*\.)?free-pussy-fucking-movie\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?free-ringtones\.269g\.net
+https?:\/\/([^\/]*\.)?free-ringtones\.aqhhhh\.info
+https?:\/\/([^\/]*\.)?free-ringtoneten\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-sex-clip-ceb\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-sex-movie-pow\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-sex-video-clip-kog\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-sex-video-hup\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-sex-video\.hostithere\.org
+https?:\/\/([^\/]*\.)?free-sexy-leg-video\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?free-shemale-fucking-woman-movie\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?free-shemale-movie-w-r-s\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-skin\.newmail\.ru
+https?:\/\/([^\/]*\.)?free-skin\.pochta\.ru
+https?:\/\/([^\/]*\.)?free-spase\.info
+https?:\/\/([^\/]*\.)?free-sprint-ringtoneija\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-sprint-ringtonesrha\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-t-mobile-ringtonehvh\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-teen-movie-cock-sucking\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?free-teen-porn-clip-blogpmw\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-teen-porn-clip-infohxv\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-teen-porn-video-clip-newsi5v\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-teens-porn-com-wod\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-video-sex-chat-ki\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-xxx-amateur-web-cam\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?free-xxx-porn-clip-infoibv\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-xxx-porn-video-clip-infopij\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-young-lesbian-movie\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?free2peek-com-c1iicr\.blogspot\.com
+https?:\/\/([^\/]*\.)?free2peek-com-co8g24x0ee\.blogspot\.com
+https?:\/\/([^\/]*\.)?free2peek-com-gi6v\.blogspot\.com
+https?:\/\/([^\/]*\.)?free_skin\.chat\.ru
+https?:\/\/([^\/]*\.)?freebigmovies-com-b25i040z\.blogspot\.com
+https?:\/\/([^\/]*\.)?freebigmovies-com-bxf440\.blogspot\.com
+https?:\/\/([^\/]*\.)?freebigmovies-com-rst\.blogspot\.com
+https?:\/\/([^\/]*\.)?freebloger\.com
+https?:\/\/([^\/]*\.)?freecooktop\.info
+https?:\/\/([^\/]*\.)?freedirectoryv\.com
+https?:\/\/([^\/]*\.)?freeforumbuilder\.com
+https?:\/\/([^\/]*\.)?freegonzo-com-du\.blogspot\.com
+https?:\/\/([^\/]*\.)?freegonzo-com-e8n\.blogspot\.com
+https?:\/\/([^\/]*\.)?freegonzo-com-og5mpk\.blogspot\.com
+https?:\/\/([^\/]*\.)?freegonzo-od5evmn\.blogspot\.com
+https?:\/\/([^\/]*\.)?freeheaven-com-ap22\.blogspot\.com
+https?:\/\/([^\/]*\.)?freeheaven-com-w1kx4ymi\.blogspot\.com
+https?:\/\/([^\/]*\.)?freehost\.ag
+https?:\/\/([^\/]*\.)?freehugemovies-com-dr\.blogspot\.com
+https?:\/\/([^\/]*\.)?freehugemovies-com-hi3\.blogspot\.com
+https?:\/\/([^\/]*\.)?freeinsite\.net
+https?:\/\/([^\/]*\.)?freeinternetplus\.info
+https?:\/\/([^\/]*\.)?freenextelringtonesupf\.blogspot\.com
+https?:\/\/([^\/]*\.)?freeones-com-amrmdwb\.blogspot\.com
+https?:\/\/([^\/]*\.)?freeones-com-m1fc\.blogspot\.com
+https?:\/\/([^\/]*\.)?freeones-com-mb70w6\.blogspot\.com
+https?:\/\/([^\/]*\.)?freeones-com-mqdm\.blogspot\.com
+https?:\/\/([^\/]*\.)?freeones-com-tfirm5smvh\.blogspot\.com
+https?:\/\/([^\/]*\.)?freepaintballgun\.com
+https?:\/\/([^\/]*\.)?freepicseries-com-kb1\.blogspot\.com
+https?:\/\/([^\/]*\.)?freepicseries-com-tfct6n\.blogspot\.com
+https?:\/\/([^\/]*\.)?freeportalnow\.com
+https?:\/\/([^\/]*\.)?freeringtonedgf\.blogspot\.com
+https?:\/\/([^\/]*\.)?freeringtones\.seesaa\.net
+https?:\/\/([^\/]*\.)?freeringtonesptl\.blogspot\.com
+https?:\/\/([^\/]*\.)?freeringtoness\.fr\.funpic\.de
+https?:\/\/([^\/]*\.)?frees--123clips-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--8teenfiles-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--africanvagina-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--ah-me-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--akissbetweenthelegs-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--allsitesaccess-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--amateurcurves-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--asssupply-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--atkmodels-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--auntmia-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--bigtitspalace-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--boneme-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--bootycollection-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--bustyadventures-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--camcrush-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--camelclips-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--caughtnude-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--celebrityscandal-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--cliphunter-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--cowlist-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--dirtydaughter-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--easygals-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--ebonyblack-net\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--el-ladies-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--eurosexparties-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--fuckingfreemovies-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--gallfree-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--girlfur-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--grannyplanet-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--greentits-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--hanksgalleries-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--hereistheporn-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--hornybanana-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--idealbabes-net\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--indianpassion-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--ispycameltoe-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?freespaces\.com
+https?:\/\/([^\/]*\.)?freesprintringtoneenx\.blogspot\.com
+https?:\/\/([^\/]*\.)?freesprintringtoneswkd\.blogspot\.com
+https?:\/\/([^\/]*\.)?freestyman\.com
+https?:\/\/([^\/]*\.)?freetmobileringtonekaw\.blogspot\.com
+https?:\/\/([^\/]*\.)?freeverizonringtonevol\.blogspot\.com
+https?:\/\/([^\/]*\.)?freewebsitehosting\.net
+https?:\/\/([^\/]*\.)?freexmovies-com-i1xi8s\.blogspot\.com
+https?:\/\/([^\/]*\.)?freexmovies-com-ojxc1k\.blogspot\.com
+https?:\/\/([^\/]*\.)?freeyaho\.com
+https?:\/\/([^\/]*\.)?french-kissing-my-sister\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?french-kissing\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?french-lick-child-family-entertainment\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?french-tickler-condom\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?french168\.com
+https?:\/\/([^\/]*\.)?frenchcum-btb\.blogspot\.com
+https?:\/\/([^\/]*\.)?frenchcum-com-mzqj8hpm\.blogspot\.com
+https?:\/\/([^\/]*\.)?frenchcum-com-w07ua1w7z\.blogspot\.com
+https?:\/\/([^\/]*\.)?fresh-sex\.futureblog\.org
+https?:\/\/([^\/]*\.)?friendsgrabber\.com
+https?:\/\/([^\/]*\.)?fripcn9\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?frog-sexgtw\.blogspot\.com
+https?:\/\/([^\/]*\.)?frog-sexlfe\.blogspot\.com
+https?:\/\/([^\/]*\.)?frogm\.info
+https?:\/\/([^\/]*\.)?frogsex-com-ev4zmddt\.blogspot\.com
+https?:\/\/([^\/]*\.)?frogsex-com-ivtcaqfsx\.blogspot\.com
+https?:\/\/([^\/]*\.)?frogsex-gnle04e\.blogspot\.com
+https?:\/\/([^\/]*\.)?frt3\.org\.ua
+https?:\/\/([^\/]*\.)?fsxhl\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?fsyflower\.com
+https?:\/\/([^\/]*\.)?ft568\.com
+https?:\/\/([^\/]*\.)?ftffo\.szm\.sk
+https?:\/\/([^\/]*\.)?fthaop1\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ftntg\.szm\.sk
+https?:\/\/([^\/]*\.)?fu-alexus\.blogspot\.com
+https?:\/\/([^\/]*\.)?fuck-gallery-picture\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?fuck-her-in-mouth\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?fuck-lesbian-pussy\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?fuck-pussy-suck-swallow\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?fuck-sexy-slut\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?fuck-the-maidens\.info
+https?:\/\/([^\/]*\.)?fuckfromass\.info
+https?:\/\/([^\/]*\.)?fucking-hardcore-japanese-slut\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?fucking-lesbian-licking-pussy\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?fucking-machine-thumbnail\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?fucking-preity-sucking-zinta\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?fucking-teen-party\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?fuckingfreemovies-com-gvps\.blogspot\.com
+https?:\/\/([^\/]*\.)?fuckingfreemovies-com-gy2\.blogspot\.com
+https?:\/\/([^\/]*\.)?fuckingfreemovies-com-qogog\.blogspot\.com
+https?:\/\/([^\/]*\.)?fuckingmachines-com-b4glo\.blogspot\.com
+https?:\/\/([^\/]*\.)?fuckingmachines-com-h3\.blogspot\.com
+https?:\/\/([^\/]*\.)?fuckingmachines-com-hqrbqh4\.blogspot\.com
+https?:\/\/([^\/]*\.)?fuckk-com-ot8wc\.blogspot\.com
+https?:\/\/([^\/]*\.)?fuckk-com-r6\.blogspot\.com
+https?:\/\/([^\/]*\.)?fuckk-com-rw5485\.blogspot\.com
+https?:\/\/([^\/]*\.)?fucksakes-com-ks7uskz64\.blogspot\.com
+https?:\/\/([^\/]*\.)?fufpyl5\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?funberry-com-meft\.blogspot\.com
+https?:\/\/([^\/]*\.)?funberry-com-mkjvxl\.blogspot\.com
+https?:\/\/([^\/]*\.)?funberry-com-tz8\.blogspot\.com
+https?:\/\/([^\/]*\.)?funkall\.us
+https?:\/\/([^\/]*\.)?funny-stuff\.3ae6ucb\.info
+https?:\/\/([^\/]*\.)?funpelv\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?fuohcbq\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?furama\.dtdns\.net
+https?:\/\/([^\/]*\.)?furrysoap\.ifrance\.com
+https?:\/\/([^\/]*\.)?fuvo-aimee\.blogspot\.com
+https?:\/\/([^\/]*\.)?fuyinj\.ebloggy\.com
+https?:\/\/([^\/]*\.)?fvinc\.4t\.com
+https?:\/\/([^\/]*\.)?fvjz5\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?fwbhexo\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?fweroze\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?fwvsp\.szm\.sk
+https?:\/\/([^\/]*\.)?fx120\.com
+https?:\/\/([^\/]*\.)?fx120\.net
+https?:\/\/([^\/]*\.)?fxxb5\.szm\.sk
+https?:\/\/([^\/]*\.)?fyisy\.szm\.sk
+https?:\/\/([^\/]*\.)?fylfw\.szm\.sk
+https?:\/\/([^\/]*\.)?fyyvb\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?fzdlcfzh-teensite\.blogspot\.com
+https?:\/\/([^\/]*\.)?g-maste\.com
+https?:\/\/([^\/]*\.)?g2c2rtc\.info
+https?:\/\/([^\/]*\.)?g3eros\.info
+https?:\/\/([^\/]*\.)?g76\.be
+https?:\/\/([^\/]*\.)?gadkj\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?gaeq2\.szm\.sk
+https?:\/\/([^\/]*\.)?gafdyq9\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?gagase\.com
+https?:\/\/([^\/]*\.)?gailc\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?galleries4free-com-e1ew\.blogspot\.com
+https?:\/\/([^\/]*\.)?galleries4free-com-o8\.blogspot\.com
+https?:\/\/([^\/]*\.)?gallery-jenna-jameson-blonde\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?gallery-kissing-woman-woman\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?gallery-lesson-milf\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?gallery-lingerie-see-teen-thru\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?gallery-mature-stocking\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?gallfree-com-b0uf2q0\.blogspot\.com
+https?:\/\/([^\/]*\.)?gallfree-com-ra5f1d7\.blogspot\.com
+https?:\/\/([^\/]*\.)?gallfree-com-teruq\.blogspot\.com
+https?:\/\/([^\/]*\.)?gallview-com-a2wqsk\.blogspot\.com
+https?:\/\/([^\/]*\.)?gallview-com-ahasx\.blogspot\.com
+https?:\/\/([^\/]*\.)?gallview-com-wa6froqpl\.blogspot\.com
+https?:\/\/([^\/]*\.)?gambling-online-theory\.com
+https?:\/\/([^\/]*\.)?gamenase\.com
+https?:\/\/([^\/]*\.)?gamez4less\.com
+https?:\/\/([^\/]*\.)?gang-bang-free-pic-gallery\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?gangsheng\.home4u\.china\.com
+https?:\/\/([^\/]*\.)?gaping-ass-sex\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?gaqx6\.szm\.sk
+https?:\/\/([^\/]*\.)?garid\.biz
+https?:\/\/([^\/]*\.)?garlic\.hostonmars\.com
+https?:\/\/([^\/]*\.)?garter\.nocostwebhosting\.com
+https?:\/\/([^\/]*\.)?gastrointestinal\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?gastrw\.com
+https?:\/\/([^\/]*\.)?gatalgat\.myrealboard\.com
+https?:\/\/([^\/]*\.)?gatloral\.myrealboard\.com
+https?:\/\/([^\/]*\.)?gatx10258\.blogspot\.com
+https?:\/\/([^\/]*\.)?gay-bareback-story\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?gay-big-cock-video-clip\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?gay-black-blow-job\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?gay-blonde-twinks\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?gay-cum-eater\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?gay-gang-bang-video\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?gay-girl-kissing\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?gay-girl-video\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?gay-hispanic-man-naked\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?gay-hot-latinos\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?gay-huge-thick-cock\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?gay-hunk-sex\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?gay-man-hardcore\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?gay-man-man-sex\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?gay-man-mature-old-picture\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?gay-man-naked-wrestling\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?gay-marriage-benefit\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?gay-photo-personals\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?gay-porn-clip-zonehyx\.blogspot\.com
+https?:\/\/([^\/]*\.)?gay-porn-video-clip-news8dd\.blogspot\.com
+https?:\/\/([^\/]*\.)?gay-pride-week-in-florida\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?gay-sex-video-on-demand\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?gay-teen-man\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?gay-teen-sex-clip\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?gay-themed-movie\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?gay-twinks-fucking\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?gay-web-cam-site\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?gay-woman-chat-rooms\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?gazwc\.szm\.sk
+https?:\/\/([^\/]*\.)?gbapc\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?gbd-amy\.hostithere\.org
+https?:\/\/([^\/]*\.)?gbtw1\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?gbvgxus\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?gceaq\.szm\.sk
+https?:\/\/([^\/]*\.)?gcqqkhx\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?gd-r\.com
+https?:\/\/([^\/]*\.)?gdfea\.szm\.sk
+https?:\/\/([^\/]*\.)?geb0cs\.nokedem\.com
+https?:\/\/([^\/]*\.)?gebu-aeh\.blogspot\.com
+https?:\/\/([^\/]*\.)?geddesvicente\.info
+https?:\/\/([^\/]*\.)?geflamio\.dl\.pl
+https?:\/\/([^\/]*\.)?genaholincorporated\.com
+https?:\/\/([^\/]*\.)?generic-paxil\.contact\.cc
+https?:\/\/([^\/]*\.)?genericbuy\.o-f\.com
+https?:\/\/([^\/]*\.)?genoux\.dnsrd\.com
+https?:\/\/([^\/]*\.)?georgiamortgage-x\.com
+https?:\/\/([^\/]*\.)?germani4\.blogspot\.com
+https?:\/\/([^\/]*\.)?gesrju\.com
+https?:\/\/([^\/]*\.)?get6or6li\.dl\.pl
+https?:\/\/([^\/]*\.)?getaer\.forumculture\.net
+https?:\/\/([^\/]*\.)?getbankruptcylaw\.info
+https?:\/\/([^\/]*\.)?getdeerelt\.forumzen\.com
+https?:\/\/([^\/]*\.)?getdelsit\.zj\.pl
+https?:\/\/([^\/]*\.)?getdomsit\.blogcu\.com
+https?:\/\/([^\/]*\.)?getfemon\.dynamicforum\.net
+https?:\/\/([^\/]*\.)?getgetvi\.lolbb\.com
+https?:\/\/([^\/]*\.)?gethelp24x7\.net
+https?:\/\/([^\/]*\.)?getkuric\.blogcu\.com
+https?:\/\/([^\/]*\.)?getletovi\.winnerforum\.net
+https?:\/\/([^\/]*\.)?getlimon\.discutfree\.com
+https?:\/\/([^\/]*\.)?getowson\.dl\.pl
+https?:\/\/([^\/]*\.)?gettaer\.ephpbb\.com
+https?:\/\/([^\/]*\.)?getzelvi\.goodbb\.net
+https?:\/\/([^\/]*\.)?gezu-alaina\.blogspot\.com
+https?:\/\/([^\/]*\.)?gfd69\.tripod\.com
+https?:\/\/([^\/]*\.)?gg0\.be
+https?:\/\/([^\/]*\.)?ggfix\.com
+https?:\/\/([^\/]*\.)?gglive\.info
+https?:\/\/([^\/]*\.)?gguu\.com
+https?:\/\/([^\/]*\.)?ggww\.dtdns\.net
+https?:\/\/([^\/]*\.)?ggzhm\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?ghhdh\.szm\.sk
+https?:\/\/([^\/]*\.)?ghiacci0\.info
+https?:\/\/([^\/]*\.)?ghnakjwcjp-video\.blogspot\.com
+https?:\/\/([^\/]*\.)?ghrvu\.szm\.sk
+https?:\/\/([^\/]*\.)?ghvd7\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?giant-cock-shemale\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?giant-dick-sucking\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?giant-dildo-in-pussy\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?gifo-administrator\.blogspot\.com
+https?:\/\/([^\/]*\.)?gigablast\.republika\.pl
+https?:\/\/([^\/]*\.)?gigagalleries-com-c1ylawg\.blogspot\.com
+https?:\/\/([^\/]*\.)?gigagalleries-com-cn4\.blogspot\.com
+https?:\/\/([^\/]*\.)?gigagalleries-com-gd0a\.blogspot\.com
+https?:\/\/([^\/]*\.)?gigavids-com-wcmck\.blogspot\.com
+https?:\/\/([^\/]*\.)?gimps\.info
+https?:\/\/([^\/]*\.)?giochi-java\.heroez\.info
+https?:\/\/([^\/]*\.)?gioco-avventura-vari\.bb22\.info
+https?:\/\/([^\/]*\.)?gioco-online-picchiaduro\.nnme\.info
+https?:\/\/([^\/]*\.)?gipolit\.asp2\.cz
+https?:\/\/([^\/]*\.)?girl-butt-in-tight-jeans\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?girl-guy-kissing\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?girl-kissing-video-bb-bb-j\.blogspot\.com
+https?:\/\/([^\/]*\.)?girl-playing-with-dildo\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?girl-showing-there-boob\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?girl-with-big-dildo\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?girlfur-com-ga\.blogspot\.com
+https?:\/\/([^\/]*\.)?girlfur-com-pisij\.blogspot\.com
+https?:\/\/([^\/]*\.)?gisogenu\.org
+https?:\/\/([^\/]*\.)?give-me-baby\.info
+https?:\/\/([^\/]*\.)?gjjf\.com
+https?:\/\/([^\/]*\.)?gjjp\.left-page\.com
+https?:\/\/([^\/]*\.)?gjjp\.zxvo\.com
+https?:\/\/([^\/]*\.)?gjqgec8\.info
+https?:\/\/([^\/]*\.)?gkjxcs1\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?gkwzrz8\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?glamouronline\.info
+https?:\/\/([^\/]*\.)?glebo\.host-page\.com
+https?:\/\/([^\/]*\.)?glebo1\.host-page\.com
+https?:\/\/([^\/]*\.)?glebo2\.host-page\.com
+https?:\/\/([^\/]*\.)?glebo3\.host-page\.com
+https?:\/\/([^\/]*\.)?glebo4\.host-page\.com
+https?:\/\/([^\/]*\.)?glebo5\.host-page\.com
+https?:\/\/([^\/]*\.)?glebo6\.host-page\.com
+https?:\/\/([^\/]*\.)?glebo7\.host-page\.com
+https?:\/\/([^\/]*\.)?glebo8\.host-page\.com
+https?:\/\/([^\/]*\.)?glebo9\.host-page\.com
+https?:\/\/([^\/]*\.)?glmv6\.szm\.sk
+https?:\/\/([^\/]*\.)?globalbartertrade\.info
+https?:\/\/([^\/]*\.)?globalflights\.org
+https?:\/\/([^\/]*\.)?globalrecreationguide\.com
+https?:\/\/([^\/]*\.)?globegarment\.com\.cn
+https?:\/\/([^\/]*\.)?glodgreen\.info
+https?:\/\/([^\/]*\.)?gloryhole\.coz\.in
+https?:\/\/([^\/]*\.)?glovebox\.freewebpage\.org
+https?:\/\/([^\/]*\.)?gloveboxes\.cn
+https?:\/\/([^\/]*\.)?gloveboxes\.com\.cn
+https?:\/\/([^\/]*\.)?glover\.host-page\.com
+https?:\/\/([^\/]*\.)?glover1\.host-page\.com
+https?:\/\/([^\/]*\.)?glover2\.host-page\.com
+https?:\/\/([^\/]*\.)?glover3\.host-page\.com
+https?:\/\/([^\/]*\.)?glover4\.host-page\.com
+https?:\/\/([^\/]*\.)?glover5\.host-page\.com
+https?:\/\/([^\/]*\.)?glover6\.host-page\.com
+https?:\/\/([^\/]*\.)?glover7\.host-page\.com
+https?:\/\/([^\/]*\.)?glover8\.host-page\.com
+https?:\/\/([^\/]*\.)?glover9\.host-page\.com
+https?:\/\/([^\/]*\.)?gmldsb\.com
+https?:\/\/([^\/]*\.)?gnsgs\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?go-ansna\.ibelgique\.com
+https?:\/\/([^\/]*\.)?goaie\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?goatlist-com-dk15cne\.blogspot\.com
+https?:\/\/([^\/]*\.)?goatlist-com-hi\.blogspot\.com
+https?:\/\/([^\/]*\.)?goatlist-com-o5\.blogspot\.com
+https?:\/\/([^\/]*\.)?gobabo\.nocostwebhosting\.com
+https?:\/\/([^\/]*\.)?gobald\.dtdns\.net
+https?:\/\/([^\/]*\.)?gobu4\.szm\.sk
+https?:\/\/([^\/]*\.)?gogllefr\.125mb\.com
+https?:\/\/([^\/]*\.)?gokletvi\.dynamicbb\.com
+https?:\/\/([^\/]*\.)?goko-adeline\.blogspot\.com
+https?:\/\/([^\/]*\.)?gold-watch\.grimgoe\.be
+https?:\/\/([^\/]*\.)?gold\.fathippohosting\.com
+https?:\/\/([^\/]*\.)?goldsexcity\.info
+https?:\/\/([^\/]*\.)?goldshop\.freehostia\.com
+https?:\/\/([^\/]*\.)?golenord\.dl\.pl
+https?:\/\/([^\/]*\.)?goler-sor1z\.blogspot\.com
+https?:\/\/([^\/]*\.)?golfhq\.org
+https?:\/\/([^\/]*\.)?golfshoot\.com
+https?:\/\/([^\/]*\.)?gololed\.blogspot\.com
+https?:\/\/([^\/]*\.)?gomy0\.szm\.sk
+https?:\/\/([^\/]*\.)?gonzo-movies-com-ez\.blogspot\.com
+https?:\/\/([^\/]*\.)?gonzo-movies-rkk5jq\.blogspot\.com
+https?:\/\/([^\/]*\.)?good568\.com
+https?:\/\/([^\/]*\.)?goodhealthjobs\.info
+https?:\/\/([^\/]*\.)?goodticket\.org
+https?:\/\/([^\/]*\.)?google-pharmacy\.com
+https?:\/\/([^\/]*\.)?google110\.yculblog\.com
+https?:\/\/([^\/]*\.)?googlepaiming\.ebloggy\.com
+https?:\/\/([^\/]*\.)?googletosh\.org
+https?:\/\/([^\/]*\.)?goporn\.info
+https?:\/\/([^\/]*\.)?gopremen\.dl\.pl
+https?:\/\/([^\/]*\.)?gor-richards-realm-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?gorillalinks-com-t77\.blogspot\.com
+https?:\/\/([^\/]*\.)?gorillashaman\.blogspot\.com
+https?:\/\/([^\/]*\.)?gorlum\.t35\.com
+https?:\/\/([^\/]*\.)?gorunger\.com
+https?:\/\/([^\/]*\.)?goxzk\.szm\.sk
+https?:\/\/([^\/]*\.)?gpdmr\.szm\.sk
+https?:\/\/([^\/]*\.)?gphv0\.szm\.sk
+https?:\/\/([^\/]*\.)?gplea\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?gqnzzlu\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?graduate-schools\.hotmail\.ru
+https?:\/\/([^\/]*\.)?graduate1degree\.chat\.ru
+https?:\/\/([^\/]*\.)?graduate2schools\.chat\.ru
+https?:\/\/([^\/]*\.)?graf\.pp\.ru
+https?:\/\/([^\/]*\.)?grammatica-inglese\.bb11\.info
+https?:\/\/([^\/]*\.)?gran-roques\.forumhst\.info
+https?:\/\/([^\/]*\.)?granny-boy-free-pic\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?granny-movie-thumb\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?grannyorgies-com-o1w34\.blogspot\.com
+https?:\/\/([^\/]*\.)?grannyorgies-com-ormpubp\.blogspot\.com
+https?:\/\/([^\/]*\.)?grannyorgies-com-r2on\.blogspot\.com
+https?:\/\/([^\/]*\.)?grannypictures-com-a2w1\.blogspot\.com
+https?:\/\/([^\/]*\.)?grannypictures-com-ak6273j85t\.blogspot\.com
+https?:\/\/([^\/]*\.)?grannyplanet-com-k1bea\.blogspot\.com
+https?:\/\/([^\/]*\.)?great-ass-gallery\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?greataftorless\.com
+https?:\/\/([^\/]*\.)?greatbmwclub\.cn
+https?:\/\/([^\/]*\.)?greatbmwparts\.cn
+https?:\/\/([^\/]*\.)?greatbudgetinn\.info
+https?:\/\/([^\/]*\.)?greathal\.com
+https?:\/\/([^\/]*\.)?greatinsurancedirect\.info
+https?:\/\/([^\/]*\.)?greatmercedescar\.info
+https?:\/\/([^\/]*\.)?greatpsychology\.info
+https?:\/\/([^\/]*\.)?greatusainternet\.info
+https?:\/\/([^\/]*\.)?green-gradens\.org
+https?:\/\/([^\/]*\.)?green-tea-300\.co\.nr
+https?:\/\/([^\/]*\.)?green-tea\.co\.nr
+https?:\/\/([^\/]*\.)?greentits-com-kr3h3787pt\.blogspot\.com
+https?:\/\/([^\/]*\.)?greentits-com-t8xf3x5\.blogspot\.com
+https?:\/\/([^\/]*\.)?greentits-com-tr242sh16\.blogspot\.com
+https?:\/\/([^\/]*\.)?greet\.ipupdater\.net
+https?:\/\/([^\/]*\.)?grgul\.szm\.sk
+https?:\/\/([^\/]*\.)?griev\.ipupdater\.com
+https?:\/\/([^\/]*\.)?griffeylaw\.com
+https?:\/\/([^\/]*\.)?grimasa\.republika\.pl
+https?:\/\/([^\/]*\.)?groovybus-com-cv8ry83\.blogspot\.com
+https?:\/\/([^\/]*\.)?groovybus-com-gy1258kur3\.blogspot\.com
+https?:\/\/([^\/]*\.)?groupforums\.com
+https?:\/\/([^\/]*\.)?groups-msn-com-masturbating-site-woman\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?groups\.ku\.edu
+https?:\/\/([^\/]*\.)?grrualca\.jconserv\.net
+https?:\/\/([^\/]*\.)?gsaxz\.szm\.sk
+https?:\/\/([^\/]*\.)?gsebook\.org
+https?:\/\/([^\/]*\.)?gsloi\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?gsuyfy2\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?gsxez\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?gu-amateur-sex-video-download\.blogspot\.com
+https?:\/\/([^\/]*\.)?guangdianyuanjian\.dzsc\.com
+https?:\/\/([^\/]*\.)?gudtk\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?guess76\.blogspot\.com
+https?:\/\/([^\/]*\.)?guilty-until-proven-innocent\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?gumaxxx-com-e3748i87g\.blogspot\.com
+https?:\/\/([^\/]*\.)?gumaxxx-com-ow774pk74m\.blogspot\.com
+https?:\/\/([^\/]*\.)?gumybear\.php5\.cz
+https?:\/\/([^\/]*\.)?gunterdirect\.com
+https?:\/\/([^\/]*\.)?gunterlawoffice\.com
+https?:\/\/([^\/]*\.)?guruful\.stabilt\.se
+https?:\/\/([^\/]*\.)?guys-butt-fucking\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?gvfefn3\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?gwebsearch\.org
+https?:\/\/([^\/]*\.)?gwjsx\.szm\.sk
+https?:\/\/([^\/]*\.)?gxrd3\.szm\.sk
+https?:\/\/([^\/]*\.)?gyig3\.szm\.sk
+https?:\/\/([^\/]*\.)?gym-equipments\.org
+https?:\/\/([^\/]*\.)?gyzvpxl\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?gzmayz6\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?gzvwa\.szm\.sk
+https?:\/\/([^\/]*\.)?h0vutok\.nokedem\.com
+https?:\/\/([^\/]*\.)?h15\.ru
+https?:\/\/([^\/]*\.)?h3as88dw\.info
+https?:\/\/([^\/]*\.)?habromjw\.dl\.pl
+https?:\/\/([^\/]*\.)?haemcurio\.0moola\.com
+https?:\/\/([^\/]*\.)?hahas\.info
+https?:\/\/([^\/]*\.)?hairy-ass-hole\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?hairy-chubby-gallery\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?hairy-leg-pic-woman\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?hairy-milf-movie\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?hairydivas-com-hg2gvyc\.blogspot\.com
+https?:\/\/([^\/]*\.)?hairydivas-t150c5gmf8\.blogspot\.com
+https?:\/\/([^\/]*\.)?hairyerotica-com-i4fl2x\.blogspot\.com
+https?:\/\/([^\/]*\.)?hairypinktacos-com-djl\.blogspot\.com
+https?:\/\/([^\/]*\.)?hairypinktacos-com-hlnfq3rea2\.blogspot\.com
+https?:\/\/([^\/]*\.)?hairypussypost-com-mk0ymrj\.blogspot\.com
+https?:\/\/([^\/]*\.)?hairypussypost-com-w6\.blogspot\.com
+https?:\/\/([^\/]*\.)?hal\.engr\.smu\.edu
+https?:\/\/([^\/]*\.)?halloween2006\.info
+https?:\/\/([^\/]*\.)?halx8\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?hamalo\.com
+https?:\/\/([^\/]*\.)?hamas2007\.republika\.pl
+https?:\/\/([^\/]*\.)?hand-job-movie-x-x-d\.blogspot\.com
+https?:\/\/([^\/]*\.)?hand-stained-xx\.blogspot\.com
+https?:\/\/([^\/]*\.)?hangzhau\.cn
+https?:\/\/([^\/]*\.)?hanksgalleries-com-b73flku8\.blogspot\.com
+https?:\/\/([^\/]*\.)?hanksgalleries-com-rtuvbgdl\.blogspot\.com
+https?:\/\/([^\/]*\.)?hanry\.stabilt\.se
+https?:\/\/([^\/]*\.)?haole\.cn
+https?:\/\/([^\/]*\.)?happy-pharma\.com
+https?:\/\/([^\/]*\.)?hard-disk-esterno\.hostzz\.info
+https?:\/\/([^\/]*\.)?hard-disk-esterno\.ll11\.info
+https?:\/\/([^\/]*\.)?hardbabes-com-e061obbg\.blogspot\.com
+https?:\/\/([^\/]*\.)?hardbabes-com-e588iqk\.blogspot\.com
+https?:\/\/([^\/]*\.)?hardcore-amateur-thumbnail\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?hardcore-asian-anal\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?hardcore-dancing-site-myspace-com\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?hardcore-free-porn-xx\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?hardcore-lesbian-pussy-eating\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?hardcore-mature-sex-young\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?hardcore-porn-clip-info73q\.blogspot\.com
+https?:\/\/([^\/]*\.)?hardcore-sex-black-on-white\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?hardcore-xxx-video\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?hardcoregangstas\.hrable\.dtdns\.net
+https?:\/\/([^\/]*\.)?hardhut-com-ao8renz\.blogspot\.com
+https?:\/\/([^\/]*\.)?hardhut-com-tgi\.blogspot\.com
+https?:\/\/([^\/]*\.)?hardhut-com-wb8m8\.blogspot\.com
+https?:\/\/([^\/]*\.)?hargd\.szm\.sk
+https?:\/\/([^\/]*\.)?harley-davidson-womens-boot\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?harted\.hostpresso\.com
+https?:\/\/([^\/]*\.)?haungsanok\.com
+https?:\/\/([^\/]*\.)?hawaiimortgage-x\.com
+https?:\/\/([^\/]*\.)?hawbij4\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?hawkesnest\.com
+https?:\/\/([^\/]*\.)?hazell-keeley-sex-video-bb-bb-f\.blogspot\.com
+https?:\/\/([^\/]*\.)?hbyfq\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?hcgs\.unh\.edu
+https?:\/\/([^\/]*\.)?hclt-events\.blogspot\.com
+https?:\/\/([^\/]*\.)?hdbj\.com\.cn
+https?:\/\/([^\/]*\.)?hdchina\.com
+https?:\/\/([^\/]*\.)?hdlwc\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?hdndeuw\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?he-wells\.blogspot\.com
+https?:\/\/([^\/]*\.)?he-wendy\.blogspot\.com
+https?:\/\/([^\/]*\.)?head-masturbating-shower-woman\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?health-insurance-0\.blogspot\.com
+https?:\/\/([^\/]*\.)?health-insurance-save\.com
+https?:\/\/([^\/]*\.)?health-jack\.com
+https?:\/\/([^\/]*\.)?healthinsurance-x\.com
+https?:\/\/([^\/]*\.)?healthprocare\.info
+https?:\/\/([^\/]*\.)?hebei-railings\.cn
+https?:\/\/([^\/]*\.)?hecarabi\.info
+https?:\/\/([^\/]*\.)?hefo-adrianna\.blogspot\.com
+https?:\/\/([^\/]*\.)?hek-tshirthell-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?hellim\.3x\.ro
+https?:\/\/([^\/]*\.)?heloween\.php5\.cz
+https?:\/\/([^\/]*\.)?hemilton\.stabilt\.se
+https?:\/\/([^\/]*\.)?hengxinbanjia\.com
+https?:\/\/([^\/]*\.)?her-first-anal-fucking\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?her-first-cum\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?her-first-lesbian-sex-kylie\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?her-first-small-dick\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?her-sweet-ass\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?here\.com\.cn
+https?:\/\/([^\/]*\.)?hereandnow0\.com
+https?:\/\/([^\/]*\.)?hereistheporn-com-abg\.blogspot\.com
+https?:\/\/([^\/]*\.)?hereistheporn-com-wxu4\.blogspot\.com
+https?:\/\/([^\/]*\.)?herpes\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?herufip\.info
+https?:\/\/([^\/]*\.)?heschlos\.dl\.pl
+https?:\/\/([^\/]*\.)?hevo-alannah\.blogspot\.com
+https?:\/\/([^\/]*\.)?hexingqc\.com
+https?:\/\/([^\/]*\.)?hfpm\.com
+https?:\/\/([^\/]*\.)?hfsflm0\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?hfslink\.com
+https?:\/\/([^\/]*\.)?hgdpy\.szm\.sk
+https?:\/\/([^\/]*\.)?hgh\.rx4\.org
+https?:\/\/([^\/]*\.)?hgqz5\.szm\.sk
+https?:\/\/([^\/]*\.)?hguldxxe-teensite\.blogspot\.com
+https?:\/\/([^\/]*\.)?hgyxs\.szm\.sk
+https?:\/\/([^\/]*\.)?hhcoh\.szm\.sk
+https?:\/\/([^\/]*\.)?hhlive\.info
+https?:\/\/([^\/]*\.)?hhpump\.com
+https?:\/\/([^\/]*\.)?hiadadar\.forumzen\.com
+https?:\/\/([^\/]*\.)?higarret\.forumzen\.com
+https?:\/\/([^\/]*\.)?high-heel-western-boot\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?high-school-diploma\.hotmail\.ru
+https?:\/\/([^\/]*\.)?high1school4dipl\.chat\.ru
+https?:\/\/([^\/]*\.)?highclassblogs\.com
+https?:\/\/([^\/]*\.)?hilarykallin\.50webs\.org
+https?:\/\/([^\/]*\.)?hilipa\.com
+https?:\/\/([^\/]*\.)?hilipy\.com
+https?:\/\/([^\/]*\.)?hillery\.republika\.pl
+https?:\/\/([^\/]*\.)?himd4\.szm\.sk
+https?:\/\/([^\/]*\.)?himp3\.biz
+https?:\/\/([^\/]*\.)?hinn8\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?hioctane-com-dlmv6g7y\.blogspot\.com
+https?:\/\/([^\/]*\.)?hioctane-com-dq4opea\.blogspot\.com
+https?:\/\/([^\/]*\.)?hioctane-com-h0un\.blogspot\.com
+https?:\/\/([^\/]*\.)?hioctane-com-toxuz\.blogspot\.com
+https?:\/\/([^\/]*\.)?hipoldlady\.com
+https?:\/\/([^\/]*\.)?hirudaco\.forumzen\.com
+https?:\/\/([^\/]*\.)?his13lessings\.blogspot\.com
+https?:\/\/([^\/]*\.)?history-of-condom\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?hisyma\.dl\.pl
+https?:\/\/([^\/]*\.)?hitm4n\.blogspot\.com
+https?:\/\/([^\/]*\.)?hiv123\.com
+https?:\/\/([^\/]*\.)?hiv987\.zj\.com
+https?:\/\/([^\/]*\.)?hjia\.ebloggy\.com
+https?:\/\/([^\/]*\.)?hjolmed\.com
+https?:\/\/([^\/]*\.)?hkcompanyforyou\.cn
+https?:\/\/([^\/]*\.)?hkfeng\.com
+https?:\/\/([^\/]*\.)?hkwei\.com\.cn
+https?:\/\/([^\/]*\.)?hlemizd\.republika\.pl
+https?:\/\/([^\/]*\.)?hlusky\.republika\.pl
+https?:\/\/([^\/]*\.)?hlxn6\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?hmppbw-free-porn\.blogspot\.com
+https?:\/\/([^\/]*\.)?hnxsv\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ho-big-clip-tit-video-hox\.blogspot\.com
+https?:\/\/([^\/]*\.)?hobaysin\.ifrance\.com
+https?:\/\/([^\/]*\.)?hocohn\.dl\.pl
+https?:\/\/([^\/]*\.)?hohoo\.cn
+https?:\/\/([^\/]*\.)?hold-em-play\.com
+https?:\/\/([^\/]*\.)?hold-em-play\.net
+https?:\/\/([^\/]*\.)?hold-em-winner\.us
+https?:\/\/([^\/]*\.)?home-made-porn-clip-blogt7y\.blogspot\.com
+https?:\/\/([^\/]*\.)?home-mortgages\.bigsitecity\.com
+https?:\/\/([^\/]*\.)?home-sauna\.boom\.ru
+https?:\/\/([^\/]*\.)?home-secure\.org
+https?:\/\/([^\/]*\.)?home-sex-video-t1ux7\.blogspot\.com
+https?:\/\/([^\/]*\.)?home-spire\.com
+https?:\/\/([^\/]*\.)?home\.graffiti\.net
+https?:\/\/([^\/]*\.)?home\.sailormoon\.com
+https?:\/\/([^\/]*\.)?home2-school\.boom\.ru
+https?:\/\/([^\/]*\.)?homeequitylineofcredit-x\.com
+https?:\/\/([^\/]*\.)?homeequitylineofcreditlenders\.com
+https?:\/\/([^\/]*\.)?homeequityloan-now\.com
+https?:\/\/([^\/]*\.)?homeequityloans-now\.com
+https?:\/\/([^\/]*\.)?homeequityloans-x\.com
+https?:\/\/([^\/]*\.)?homefinance-x\.com
+https?:\/\/([^\/]*\.)?homeloan-now\.com
+https?:\/\/([^\/]*\.)?homeloanlogic\.com
+https?:\/\/([^\/]*\.)?homeloans-now\.com
+https?:\/\/([^\/]*\.)?homemade-mature-video\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?homemade-porn-clip-infoywx\.blogspot\.com
+https?:\/\/([^\/]*\.)?homesafterbankruptcy\.info
+https?:\/\/([^\/]*\.)?homesbysellers\.com
+https?:\/\/([^\/]*\.)?homesbysellers\.net
+https?:\/\/([^\/]*\.)?homesexvideo\.org
+https?:\/\/([^\/]*\.)?hometowngirls\.be
+https?:\/\/([^\/]*\.)?hometwat-com-hrmml\.blogspot\.com
+https?:\/\/([^\/]*\.)?homos\.php5\.cz
+https?:\/\/([^\/]*\.)?homunkulus\.info
+https?:\/\/([^\/]*\.)?homunkulus\.republika\.pl
+https?:\/\/([^\/]*\.)?homy\.etowns\.net
+https?:\/\/([^\/]*\.)?honba\.republika\.pl
+https?:\/\/([^\/]*\.)?honey99\.cn
+https?:\/\/([^\/]*\.)?honey99\.com
+https?:\/\/([^\/]*\.)?hongjianlaw\.com
+https?:\/\/([^\/]*\.)?hongqi120\.com
+https?:\/\/([^\/]*\.)?hoodia\.269g\.net
+https?:\/\/([^\/]*\.)?hoodiadiet\.269g\.net
+https?:\/\/([^\/]*\.)?hopemarry\.com
+https?:\/\/([^\/]*\.)?horizondrugs\.zaclona\.yi\.org
+https?:\/\/([^\/]*\.)?hornina\.net
+https?:\/\/([^\/]*\.)?horny-butt-sex\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?horny-grannysex-bipiw\.blogspot\.com
+https?:\/\/([^\/]*\.)?horny-hailey\.hostithere\.org
+https?:\/\/([^\/]*\.)?hornybanana-com-mg\.blogspot\.com
+https?:\/\/([^\/]*\.)?hornybanana-com-to0b\.blogspot\.com
+https?:\/\/([^\/]*\.)?hornycrocodile-com-c37c85\.blogspot\.com
+https?:\/\/([^\/]*\.)?hornycrocodile-com-gmb5ev\.blogspot\.com
+https?:\/\/([^\/]*\.)?hornycrocodile-com-gv3x3oxt\.blogspot\.com
+https?:\/\/([^\/]*\.)?hornyduck-com-esta\.blogspot\.com
+https?:\/\/([^\/]*\.)?hornyduck-com-oix7y2v\.blogspot\.com
+https?:\/\/([^\/]*\.)?hornykaren-com-b16sk5\.blogspot\.com
+https?:\/\/([^\/]*\.)?hornykaren-com-bl4rw4\.blogspot\.com
+https?:\/\/([^\/]*\.)?hornykaren-com-rg034\.blogspot\.com
+https?:\/\/([^\/]*\.)?hornyspanishflies-com-c0cx6a3bo\.blogspot\.com
+https?:\/\/([^\/]*\.)?hornyspanishflies-com-ks5856vf77\.blogspot\.com
+https?:\/\/([^\/]*\.)?hornytiger-com-d3\.blogspot\.com
+https?:\/\/([^\/]*\.)?hornytiger-com-il0x678fwr\.blogspot\.com
+https?:\/\/([^\/]*\.)?hornywolf-com-m27\.blogspot\.com
+https?:\/\/([^\/]*\.)?hornywolf-com-tqwaj\.blogspot\.com
+https?:\/\/([^\/]*\.)?hospitalonline\.cn
+https?:\/\/([^\/]*\.)?host-page\.com
+https?:\/\/([^\/]*\.)?hosting1999\.com
+https?:\/\/([^\/]*\.)?hosting41\.com
+https?:\/\/([^\/]*\.)?hot-anal-sex-com\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?hot-asian-cock\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?hot-ass-anal\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?hot-blonde-babe-gallery\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?hot-brazilian-ass\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?hot-bubble-butt-girl\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?hot-cheerleader-getting-fucked\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?hot-dating-chat\.ifastnet\.com
+https?:\/\/([^\/]*\.)?hot-latino-ass\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?hot-mature-sex-uk-woman\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?hot-mature-xxx\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?hot-mom-site-myspace-com\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?hot-nude-blonde-chick\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?hot-pussy-tit-ass\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?hot-sex-video-bb-bb-v\.blogspot\.com
+https?:\/\/([^\/]*\.)?hotbigmovies-com-cd\.blogspot\.com
+https?:\/\/([^\/]*\.)?hotbigmovies-com-k62que75im\.blogspot\.com
+https?:\/\/([^\/]*\.)?hotchina\.org
+https?:\/\/([^\/]*\.)?hotel-centro-benessere\.host24h\.info
+https?:\/\/([^\/]*\.)?hotel-offerta\.nnme\.info
+https?:\/\/([^\/]*\.)?hotel-shop\.info
+https?:\/\/([^\/]*\.)?hotelsaccommodations\.info
+https?:\/\/([^\/]*\.)?hotfunhouse-com-pevuv\.blogspot\.com
+https?:\/\/([^\/]*\.)?hotfunhouse-com-r5530\.blogspot\.com
+https?:\/\/([^\/]*\.)?hotgirlsplayroom-com-dl0q21\.blogspot\.com
+https?:\/\/([^\/]*\.)?hotgirlsplayroom-com-isnkeded\.blogspot\.com
+https?:\/\/([^\/]*\.)?hotmoko\.info
+https?:\/\/([^\/]*\.)?hotorange-net-ms\.blogspot\.com
+https?:\/\/([^\/]*\.)?hotpapai-com-hoc3g\.blogspot\.com
+https?:\/\/([^\/]*\.)?hotty-x\.com
+https?:\/\/([^\/]*\.)?hottystop-com-a252gugtk\.blogspot\.com
+https?:\/\/([^\/]*\.)?hottystop-com-grn\.blogspot\.com
+https?:\/\/([^\/]*\.)?house-15\.jeepsyc\.be
+https?:\/\/([^\/]*\.)?houses-bahamas\.ligamic\.be
+https?:\/\/([^\/]*\.)?housewifeaction-com-evv\.blogspot\.com
+https?:\/\/([^\/]*\.)?housewifeaction-com-o6z0yrnat\.blogspot\.com
+https?:\/\/([^\/]*\.)?housewifeaction-com-ob85\.blogspot\.com
+https?:\/\/([^\/]*\.)?hovadko\.isuisse\.com
+https?:\/\/([^\/]*\.)?hovass\.com
+https?:\/\/([^\/]*\.)?hovi-albatross\.blogspot\.com
+https?:\/\/([^\/]*\.)?how-to-catch-a-cheating-spouse\.com
+https?:\/\/([^\/]*\.)?how-to-make-a-boot-disk-on-win-xp\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?how-to-make-a-boot-disk\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?how-to-make-a-cock-ring\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?hppr7\.szm\.sk
+https?:\/\/([^\/]*\.)?hpua6\.szm\.sk
+https?:\/\/([^\/]*\.)?hpwe6\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?hq-casino\.org
+https?:\/\/([^\/]*\.)?hq-teens-com-aq\.blogspot\.com
+https?:\/\/([^\/]*\.)?hq-teens-com-w2opp2\.blogspot\.com
+https?:\/\/([^\/]*\.)?hq\.left-page\.com
+https?:\/\/([^\/]*\.)?hqgal-com-eu7gbk1o\.blogspot\.com
+https?:\/\/([^\/]*\.)?hqgal-com-ilxpxi0\.blogspot\.com
+https?:\/\/([^\/]*\.)?hqmovs-com-k31h4x37df\.blogspot\.com
+https?:\/\/([^\/]*\.)?hqmovs-com-tiou81\.blogspot\.com
+https?:\/\/([^\/]*\.)?hqmovs-com-ts5\.blogspot\.com
+https?:\/\/([^\/]*\.)?hrable\.ostabil\.nu
+https?:\/\/([^\/]*\.)?hrhbchj\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?hromotlk\.asp2\.cz
+https?:\/\/([^\/]*\.)?hrusky\.dtdns\.net
+https?:\/\/([^\/]*\.)?hscrza1\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ht120\.com
+https?:\/\/([^\/]*\.)?htejj\.szm\.sk
+https?:\/\/([^\/]*\.)?huaeq\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?huapatossu\.blogspot\.com
+https?:\/\/([^\/]*\.)?huataix\.net
+https?:\/\/([^\/]*\.)?hubo-aileen\.blogspot\.com
+https?:\/\/([^\/]*\.)?huem-polbu\.netfirms\.com
+https?:\/\/([^\/]*\.)?huge-cock-shemale\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?huge-dick-anal\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?huge-dildo-fucking\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?huge-mexican-ass\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?huge-sexy-boob\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?huge-white-dick\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?hulio\.asp2\.cz
+https?:\/\/([^\/]*\.)?hulks\.info
+https?:\/\/([^\/]*\.)?hummerworldusa\.info
+https?:\/\/([^\/]*\.)?hupa4\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?hurvinek\.isuisse\.com
+https?:\/\/([^\/]*\.)?huspinina\.com
+https?:\/\/([^\/]*\.)?hutwistina\.com
+https?:\/\/([^\/]*\.)?huynani\.mpage\.jp
+https?:\/\/([^\/]*\.)?hvebjr2\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?hver5\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?hvlnb\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?hwantiig-yg\.blogspot\.com
+https?:\/\/([^\/]*\.)?hwcw4\.szm\.sk
+https?:\/\/([^\/]*\.)?hwhhw\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?hwkxt\.szm\.sk
+https?:\/\/([^\/]*\.)?hxbqpz3\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?hxlll\.net
+https?:\/\/([^\/]*\.)?hydrochloride-tramadol\.1\.forogratis\.es
+https?:\/\/([^\/]*\.)?hydrocodone-911\.coz\.in
+https?:\/\/([^\/]*\.)?hydrocodone-cc\.blogspot\.com
+https?:\/\/([^\/]*\.)?hydrocodone-gs\.eu\.tc
+https?:\/\/([^\/]*\.)?hydrocodone-gs\.net\.tc
+https?:\/\/([^\/]*\.)?hydrocodone-online\.presteert\.nl
+https?:\/\/([^\/]*\.)?hydrocodone\.cheapills\.info
+https?:\/\/([^\/]*\.)?hydrocodone\.conto\.pl
+https?:\/\/([^\/]*\.)?hydrocodone\.esguay\.com
+https?:\/\/([^\/]*\.)?hydrocodone\.fws1\.com
+https?:\/\/([^\/]*\.)?hydrocodone\.guu\.pl
+https?:\/\/([^\/]*\.)?hydrocodone\.presteert\.nl
+https?:\/\/([^\/]*\.)?hydrocodone\.slyip\.net
+https?:\/\/([^\/]*\.)?hydrocodonebxs\.blogspot\.com
+https?:\/\/([^\/]*\.)?hydrocodoneq\.phpbbx\.de
+https?:\/\/([^\/]*\.)?hydrocodonerx\.weboficial\.com
+https?:\/\/([^\/]*\.)?hyip\.fanforum\.cc
+https?:\/\/([^\/]*\.)?hz7\.org
+https?:\/\/([^\/]*\.)?hzkap\.szm\.sk
+https?:\/\/([^\/]*\.)?hzmeitai\.com
+https?:\/\/([^\/]*\.)?hzui8\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?i-truepoker\.com
+https?:\/\/([^\/]*\.)?iactive\.com\.cn
+https?:\/\/([^\/]*\.)?iapon\.galeon\.com
+https?:\/\/([^\/]*\.)?ibizababes-com-tr\.blogspot\.com
+https?:\/\/([^\/]*\.)?ic37\.com
+https?:\/\/([^\/]*\.)?icdufetc\.forumzen\.com
+https?:\/\/([^\/]*\.)?ickaboo\.com
+https?:\/\/([^\/]*\.)?icnfr\.szm\.sk
+https?:\/\/([^\/]*\.)?ict\.188info\.com
+https?:\/\/([^\/]*\.)?idahomortgage-x\.com
+https?:\/\/([^\/]*\.)?idc2008\.cn
+https?:\/\/([^\/]*\.)?idealbabes-net-r5x1puaah0\.blogspot\.com
+https?:\/\/([^\/]*\.)?iditarodhumor\.info
+https?:\/\/([^\/]*\.)?iehf\.blogspot\.com
+https?:\/\/([^\/]*\.)?iehffy8\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?iehzup8\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ifdbx\.szm\.sk
+https?:\/\/([^\/]*\.)?ifmnqm6\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ifyj2\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?ihavenourl\.com
+https?:\/\/([^\/]*\.)?ihomebroker\.com
+https?:\/\/([^\/]*\.)?ihrd\.blogspot\.com
+https?:\/\/([^\/]*\.)?iiak2\.szm\.sk
+https?:\/\/([^\/]*\.)?iio91\.net
+https?:\/\/([^\/]*\.)?iisqvkk\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?iitop\.info
+https?:\/\/([^\/]*\.)?ikoxf\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?il4unu\.com
+https?:\/\/([^\/]*\.)?ilflz\.szm\.sk
+https?:\/\/([^\/]*\.)?ilfwvf2\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?illcom\.com
+https?:\/\/([^\/]*\.)?illinoismortgage-x\.com
+https?:\/\/([^\/]*\.)?ilove-movies-com-w5nx\.blogspot\.com
+https?:\/\/([^\/]*\.)?ilove-movies-com-wrde\.blogspot\.com
+https?:\/\/([^\/]*\.)?iloveubaby\.info
+https?:\/\/([^\/]*\.)?iltbl\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?im-really-cool\.blogspot\.com
+https?:\/\/([^\/]*\.)?imitrex\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?imitrexinjections\.sblog\.cz
+https?:\/\/([^\/]*\.)?immagine-sfondo-hello-kitty\.i111i\.info
+https?:\/\/([^\/]*\.)?imposingimo\.com
+https?:\/\/([^\/]*\.)?impossiblemale61\.blogspot\.com
+https?:\/\/([^\/]*\.)?imteen\.attacke\.ch
+https?:\/\/([^\/]*\.)?incontri-amore\.19mb\.info
+https?:\/\/([^\/]*\.)?incontri-amore\.you-bizz\.info
+https?:\/\/([^\/]*\.)?indian-porn-clip-zone5j4\.blogspot\.com
+https?:\/\/([^\/]*\.)?indian-porn-video-zo\.blogspot\.com
+https?:\/\/([^\/]*\.)?indian-sex-fuck\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?indianamortgage-x\.com
+https?:\/\/([^\/]*\.)?indienudes-com-h4owj60\.blogspot\.com
+https?:\/\/([^\/]*\.)?infinitemonies\.com
+https?:\/\/([^\/]*\.)?infinitieyewear\.info
+https?:\/\/([^\/]*\.)?infinitims\.info
+https?:\/\/([^\/]*\.)?infinitipianeta\.info
+https?:\/\/([^\/]*\.)?infoarena\.info
+https?:\/\/([^\/]*\.)?infospm\.21publish\.de
+https?:\/\/([^\/]*\.)?infty\.net
+https?:\/\/([^\/]*\.)?injecfu\.com
+https?:\/\/([^\/]*\.)?injxx\.szm\.sk
+https?:\/\/([^\/]*\.)?innocent-ass\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?innocent-busty-teen\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?innocent-eve-pic\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?innocentdream-com-da\.blogspot\.com
+https?:\/\/([^\/]*\.)?inqygjz\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?inrhqi3\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?insidethecloset\.com
+https?:\/\/([^\/]*\.)?inspectorgalleries-com-k5\.blogspot\.com
+https?:\/\/([^\/]*\.)?insurance-leader\.com
+https?:\/\/([^\/]*\.)?insurance-top\.com
+https?:\/\/([^\/]*\.)?insurance\.topforyou\.net
+https?:\/\/([^\/]*\.)?internal-ass-cum-shot\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?international-dating\.sexnation\.info
+https?:\/\/([^\/]*\.)?interracial-gang-bang-crew\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?interracial-gay-anal-sex\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?interracial-lesbian-domination\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?interracial-teen-fucking\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?interracialpicsuux\.blogspot\.com
+https?:\/\/([^\/]*\.)?intersea-fdn\.com
+https?:\/\/([^\/]*\.)?inthevip-com-bc1b0kb0\.blogspot\.com
+https?:\/\/([^\/]*\.)?inthevip-com-bvw\.blogspot\.com
+https?:\/\/([^\/]*\.)?inthevip-com-rso\.blogspot\.com
+https?:\/\/([^\/]*\.)?intll\.com
+https?:\/\/([^\/]*\.)?intra\.som\.umass\.edu
+https?:\/\/([^\/]*\.)?intranet\.education\.umn\.edu
+https?:\/\/([^\/]*\.)?invest1\.org\.ua
+https?:\/\/([^\/]*\.)?ioauaq0\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ionamin\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?ionizatorit\.info
+https?:\/\/([^\/]*\.)?iowamortgage-x\.com
+https?:\/\/([^\/]*\.)?ipeddle\.com
+https?:\/\/([^\/]*\.)?ipha4\.szm\.sk
+https?:\/\/([^\/]*\.)?ipod-application\.info
+https?:\/\/([^\/]*\.)?ipokea\.com
+https?:\/\/([^\/]*\.)?iqzyk\.szm\.sk
+https?:\/\/([^\/]*\.)?iradorame\.site\.voila\.fr
+https?:\/\/([^\/]*\.)?ircv6\.szm\.sk
+https?:\/\/([^\/]*\.)?irenefah-gijul\.blogspot\.com
+https?:\/\/([^\/]*\.)?irishlover\.info
+https?:\/\/([^\/]*\.)?iron-island\.blogspot\.com
+https?:\/\/([^\/]*\.)?ironing-boards\.haemati\.be
+https?:\/\/([^\/]*\.)?irqs8\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?isceby0\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?islands-tour\.globaltr\.info
+https?:\/\/([^\/]*\.)?isoway-yoga\.com
+https?:\/\/([^\/]*\.)?ispycameltoe-com-cugh6n\.blogspot\.com
+https?:\/\/([^\/]*\.)?ispycameltoe-com-g4s2f7vevs\.blogspot\.com
+https?:\/\/([^\/]*\.)?italiagame\.org
+https?:\/\/([^\/]*\.)?italianosito\.info
+https?:\/\/([^\/]*\.)?italika\.info
+https?:\/\/([^\/]*\.)?italizzhot\.info
+https?:\/\/([^\/]*\.)?italoman\.info
+https?:\/\/([^\/]*\.)?italytraffic\.info
+https?:\/\/([^\/]*\.)?itchy-skin\.nm\.ru
+https?:\/\/([^\/]*\.)?itchy_skin\.chat\.ru
+https?:\/\/([^\/]*\.)?itcweb\.ecsu\.edu
+https?:\/\/([^\/]*\.)?itdk0\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?item4u\.com
+https?:\/\/([^\/]*\.)?itgeecna\.forumzen\.com
+https?:\/\/([^\/]*\.)?itp\.nyu\.edu
+https?:\/\/([^\/]*\.)?itpvewa\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?itsum\.com\.cn
+https?:\/\/([^\/]*\.)?ityh1\.szm\.sk
+https?:\/\/([^\/]*\.)?iugfsvv\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?iuzjbpu\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ivana-fuck-a-lot\.hoffer\.ipupdater\.com
+https?:\/\/([^\/]*\.)?ivoyt\.blogspot\.com
+https?:\/\/([^\/]*\.)?ivs\.com\.cn
+https?:\/\/([^\/]*\.)?iwahigux\.info
+https?:\/\/([^\/]*\.)?iwantmature-com-mme\.blogspot\.com
+https?:\/\/([^\/]*\.)?iwuy8\.szm\.sk
+https?:\/\/([^\/]*\.)?ixiixi-com-guy\.blogspot\.com
+https?:\/\/([^\/]*\.)?ixllvdi\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ixnl4\.szm\.sk
+https?:\/\/([^\/]*\.)?ixth4\.szm\.sk
+https?:\/\/([^\/]*\.)?izizyu-free-porn\.blogspot\.com
+https?:\/\/([^\/]*\.)?izui7\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ja-rule-ringtonezad\.blogspot\.com
+https?:\/\/([^\/]*\.)?jablicko\.yi\.org
+https?:\/\/([^\/]*\.)?jablonec\.republika\.pl
+https?:\/\/([^\/]*\.)?jadelrel\.goodbb\.net
+https?:\/\/([^\/]*\.)?jagast\.com
+https?:\/\/([^\/]*\.)?jahmpf3\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?jaja-jak-globusy\.com
+https?:\/\/([^\/]*\.)?jajpip5\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?jamies-galleries-com-dr7itf8c\.blogspot\.com
+https?:\/\/([^\/]*\.)?jamm\.host-page\.com
+https?:\/\/([^\/]*\.)?janelolo\.fr-bb\.com
+https?:\/\/([^\/]*\.)?janet-jackson-boob-picture\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?janisy\.republika\.pl
+https?:\/\/([^\/]*\.)?jantiq\.com
+https?:\/\/([^\/]*\.)?jaoqmw1\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?japan-girl-sex\.com
+https?:\/\/([^\/]*\.)?japan-whores-com-e28dwa2vvb\.blogspot\.com
+https?:\/\/([^\/]*\.)?japan-whores-com-elay3rzsu\.blogspot\.com
+https?:\/\/([^\/]*\.)?japanese-geisha-girl\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?japanese-teacher-fuck\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?japanese158\.com
+https?:\/\/([^\/]*\.)?japanshanye\.com
+https?:\/\/([^\/]*\.)?jarella\.goodbb\.net
+https?:\/\/([^\/]*\.)?jasara-com-t6fn6k8\.blogspot\.com
+https?:\/\/([^\/]*\.)?jasara-com-two5\.blogspot\.com
+https?:\/\/([^\/]*\.)?jasara-com-wibeh\.blogspot\.com
+https?:\/\/([^\/]*\.)?jastim\.com
+https?:\/\/([^\/]*\.)?jbixc\.szm\.sk
+https?:\/\/([^\/]*\.)?jblt7\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?jcbbxb0\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?jdmz\.com\.cn
+https?:\/\/([^\/]*\.)?jeanniexong\.blogspot\.com
+https?:\/\/([^\/]*\.)?jebmd\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?jed-two-lips-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?jeffrorocks21\.blogspot\.com
+https?:\/\/([^\/]*\.)?jelatko\.republika\.pl
+https?:\/\/([^\/]*\.)?jelito\.stabilt\.se
+https?:\/\/([^\/]*\.)?jennifer-lopez-music-photo\.blogspot\.com
+https?:\/\/([^\/]*\.)?jennifer-lopez-ringtoneqnf\.blogspot\.com
+https?:\/\/([^\/]*\.)?jennysbookmarks-com-kcr\.blogspot\.com
+https?:\/\/([^\/]*\.)?jessica-alba-jly9\.blogspot\.com
+https?:\/\/([^\/]*\.)?jessiethebestie\.blogspot\.com
+https?:\/\/([^\/]*\.)?jesuisleflet\.blogspot\.com
+https?:\/\/([^\/]*\.)?jet-cold-hard-bitch-album-version-lyric\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?jetoo\.cn
+https?:\/\/([^\/]*\.)?jeun\.fr
+https?:\/\/([^\/]*\.)?jewels667\.blogspot\.com
+https?:\/\/([^\/]*\.)?jezgy\.szm\.sk
+https?:\/\/([^\/]*\.)?jfmr\.com
+https?:\/\/([^\/]*\.)?jgeqhqa\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?jhrxa\.szm\.sk
+https?:\/\/([^\/]*\.)?jhsy0\.szm\.sk
+https?:\/\/([^\/]*\.)?jiahuajipiao\.com
+https?:\/\/([^\/]*\.)?jiaju88\.com
+https?:\/\/([^\/]*\.)?jianfei\.cc
+https?:\/\/([^\/]*\.)?jianzhi168\.com
+https?:\/\/([^\/]*\.)?jiaza\.szm\.sk
+https?:\/\/([^\/]*\.)?jiboki-free-lesbian-video\.blogspot\.com
+https?:\/\/([^\/]*\.)?jichengdianlu\.dzsc\.com
+https?:\/\/([^\/]*\.)?jidianqi\.dzsc\.com
+https?:\/\/([^\/]*\.)?jieyan\.com\.cn
+https?:\/\/([^\/]*\.)?jiguang\.org
+https?:\/\/([^\/]*\.)?jijijo\.com
+https?:\/\/([^\/]*\.)?jimbo\.php5\.cz
+https?:\/\/([^\/]*\.)?jimmccarthy\.org\.uk
+https?:\/\/([^\/]*\.)?jimmini\.blogspot\.com
+https?:\/\/([^\/]*\.)?jinchengjipiao\.com
+https?:\/\/([^\/]*\.)?jinghuigift\.com
+https?:\/\/([^\/]*\.)?jingzhi-life\.com
+https?:\/\/([^\/]*\.)?jipiao\.51mp4mp3\.com
+https?:\/\/([^\/]*\.)?jipiaoweb\.co
+https?:\/\/([^\/]*\.)?jipiaoweb\.com
+https?:\/\/([^\/]*\.)?jiuwu\.com
+https?:\/\/([^\/]*\.)?jizzhut-com-oq4zf\.blogspot\.com
+https?:\/\/([^\/]*\.)?jizzonline-com-a3h52c1\.blogspot\.com
+https?:\/\/([^\/]*\.)?jizzonline-cz0h5y1nm\.blogspot\.com
+https?:\/\/([^\/]*\.)?jjfchljumf-video\.blogspot\.com
+https?:\/\/([^\/]*\.)?jjuwt\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?jkpotv-free-video\.blogspot\.com
+https?:\/\/([^\/]*\.)?jlhtj\.szm\.sk
+https?:\/\/([^\/]*\.)?jlibhe9\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?jmjx7\.szm\.sk
+https?:\/\/([^\/]*\.)?jnbxqy5\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?jnk713\.ifrance\.com
+https?:\/\/([^\/]*\.)?jnxx3\.szm\.sk
+https?:\/\/([^\/]*\.)?jobecraf\.dl\.pl
+https?:\/\/([^\/]*\.)?jobruler\.com
+https?:\/\/([^\/]*\.)?jocdy\.szm\.sk
+https?:\/\/([^\/]*\.)?jodofiv-free-fat-ass-mo-t\.blogspot\.com
+https?:\/\/([^\/]*\.)?johatch\.ifrance\.com
+https?:\/\/([^\/]*\.)?joia\.com
+https?:\/\/([^\/]*\.)?jointroompia\.com
+https?:\/\/([^\/]*\.)?jokerupot\.blogspot\.com
+https?:\/\/([^\/]*\.)?jon-a-ross\.blogspot\.com
+https?:\/\/([^\/]*\.)?jonn22\.com
+https?:\/\/([^\/]*\.)?jonsmovies-com-b23k3tx4h\.blogspot\.com
+https?:\/\/([^\/]*\.)?joperan\.org
+https?:\/\/([^\/]*\.)?journal\.eepis-its\.edu
+https?:\/\/([^\/]*\.)?joycclx\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?jozin\.php5\.cz
+https?:\/\/([^\/]*\.)?jp\.zxvo\.com
+https?:\/\/([^\/]*\.)?jpeghunter-com-h6rb6\.blogspot\.com
+https?:\/\/([^\/]*\.)?jpeghunter-com-hsa0g47vew\.blogspot\.com
+https?:\/\/([^\/]*\.)?jpha9\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?jplm\.cn
+https?:\/\/([^\/]*\.)?jptrip\.org
+https?:\/\/([^\/]*\.)?jqri2\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?jrcreations\.com
+https?:\/\/([^\/]*\.)?jrqzje5\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?jsjgdpg\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?jsyuanyang\.com
+https?:\/\/([^\/]*\.)?jtdh\.fuwuqituoguan\.com
+https?:\/\/([^\/]*\.)?jtgq3\.szm\.sk
+https?:\/\/([^\/]*\.)?jtoph\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?jtut6\.szm\.sk
+https?:\/\/([^\/]*\.)?ju-alexis\.blogspot\.com
+https?:\/\/([^\/]*\.)?ju-free-porn-video-download\.blogspot\.com
+https?:\/\/([^\/]*\.)?juanyuancailiao\.dzsc\.com
+https?:\/\/([^\/]*\.)?juggcrew-com-r4xwgs\.blogspot\.com
+https?:\/\/([^\/]*\.)?jugni\.50webs\.org
+https?:\/\/([^\/]*\.)?juicygals-com-c8o\.blogspot\.com
+https?:\/\/([^\/]*\.)?juliatalbot\.50webs\.org
+https?:\/\/([^\/]*\.)?julietsold\.info
+https?:\/\/([^\/]*\.)?jumasd\.com
+https?:\/\/([^\/]*\.)?jumtan\.com
+https?:\/\/([^\/]*\.)?junenanney\.site\.io
+https?:\/\/([^\/]*\.)?junky\.phpbb2\.us
+https?:\/\/([^\/]*\.)?junyuan\.com\.cn
+https?:\/\/([^\/]*\.)?jupka97\.blogspot\.com
+https?:\/\/([^\/]*\.)?juruortr\.jconserv\.net
+https?:\/\/([^\/]*\.)?juse-active\.blogspot\.com
+https?:\/\/([^\/]*\.)?justanotherebel\.blogspot\.com
+https?:\/\/([^\/]*\.)?justkor\.com
+https?:\/\/([^\/]*\.)?juyi6\.szm\.sk
+https?:\/\/([^\/]*\.)?jwfj8\.szm\.sk
+https?:\/\/([^\/]*\.)?jwk\.cn
+https?:\/\/([^\/]*\.)?jxxfl\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?jytpn\.szm\.sk
+https?:\/\/([^\/]*\.)?jzllteva-teensite\.blogspot\.com
+https?:\/\/([^\/]*\.)?jzoqn\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?k-teens-more\.blogspot\.com
+https?:\/\/([^\/]*\.)?k98you\.info
+https?:\/\/([^\/]*\.)?kabierac\.blogspot\.com
+https?:\/\/([^\/]*\.)?kaejsi\.com
+https?:\/\/([^\/]*\.)?kaiguan\.dzsc\.com
+https?:\/\/([^\/]*\.)?kaimitech\.com
+https?:\/\/([^\/]*\.)?kaizokukitsune\.blogspot\.com
+https?:\/\/([^\/]*\.)?kakaloo\.dtdns\.net
+https?:\/\/([^\/]*\.)?kalbongzig64\.blogspot\.com
+https?:\/\/([^\/]*\.)?kamachair\.info
+https?:\/\/([^\/]*\.)?kansasmortgage-x\.com
+https?:\/\/([^\/]*\.)?kaopowh\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?kardashian\.6\.forumer\.com
+https?:\/\/([^\/]*\.)?karwee\.com\.tw
+https?:\/\/([^\/]*\.)?katal0g\.ru
+https?:\/\/([^\/]*\.)?kates-playground-cjs61770aq\.blogspot\.com
+https?:\/\/([^\/]*\.)?kates-playground-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?katie-fey-m8inou71nk\.blogspot\.com
+https?:\/\/([^\/]*\.)?katie-fey\.hostithere\.org
+https?:\/\/([^\/]*\.)?katsmovies-com-a4k0cr\.blogspot\.com
+https?:\/\/([^\/]*\.)?kc-generator\.com
+https?:\/\/([^\/]*\.)?kc\.vanderbilt\.edu
+https?:\/\/([^\/]*\.)?kchaiguang\.com
+https?:\/\/([^\/]*\.)?kdmj1\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?kedew-free-porn-movie-c\.blogspot\.com
+https?:\/\/([^\/]*\.)?kedrp\.szm\.sk
+https?:\/\/([^\/]*\.)?keflexbuy\.easy\.to
+https?:\/\/([^\/]*\.)?keflexbuycheap\.everything\.at
+https?:\/\/([^\/]*\.)?keflexcheap\.notrix\.at
+https?:\/\/([^\/]*\.)?keflexcheapgeneric\.drop\.to
+https?:\/\/([^\/]*\.)?keflexgeneric\.firstpage\.de
+https?:\/\/([^\/]*\.)?kelley\.iu\.edu
+https?:\/\/([^\/]*\.)?kellyfind-com-i1\.blogspot\.com
+https?:\/\/([^\/]*\.)?kellyslovespells\.com
+https?:\/\/([^\/]*\.)?kelvinova\.com
+https?:\/\/([^\/]*\.)?kenji-no-sorata\.blogspot\.com
+https?:\/\/([^\/]*\.)?kentuckymortgage-x\.com
+https?:\/\/([^\/]*\.)?kenwoodexcelon\.com
+https?:\/\/([^\/]*\.)?keps\.info
+https?:\/\/([^\/]*\.)?kesdirect\.com
+https?:\/\/([^\/]*\.)?keshome\.com
+https?:\/\/([^\/]*\.)?kewl-links\.com
+https?:\/\/([^\/]*\.)?keysplus\.com
+https?:\/\/([^\/]*\.)?keyword\.net\.cn
+https?:\/\/([^\/]*\.)?kfwd7\.szm\.sk
+https?:\/\/([^\/]*\.)?kgbsearch\.org
+https?:\/\/([^\/]*\.)?khawkslaxfan51\.blogspot\.com
+https?:\/\/([^\/]*\.)?khlnbo3\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ki-westly\.blogspot\.com
+https?:\/\/([^\/]*\.)?kiboric\.net
+https?:\/\/([^\/]*\.)?kicfmaudio\.com
+https?:\/\/([^\/]*\.)?kicklikegirls\.info
+https?:\/\/([^\/]*\.)?kijub-free-porn-video-v\.blogspot\.com
+https?:\/\/([^\/]*\.)?kingdom\.webmelia\.com
+https?:\/\/([^\/]*\.)?kingofpics-com-beib6jsm5d\.blogspot\.com
+https?:\/\/([^\/]*\.)?kingofpics-com-c8f1bag\.blogspot\.com
+https?:\/\/([^\/]*\.)?kipredinstitute\.org
+https?:\/\/([^\/]*\.)?kiqi-airplane\.blogspot\.com
+https?:\/\/([^\/]*\.)?kirsten-dunst-boob-slip\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?kiska2\.com
+https?:\/\/([^\/]*\.)?kissing-foot\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?kissing-her-ass\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?kitchen-apron\.keckins\.be
+https?:\/\/([^\/]*\.)?kitchenrebuilding\.com
+https?:\/\/([^\/]*\.)?kiudcb0\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?kjbz0\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?kjor4\.szm\.sk
+https?:\/\/([^\/]*\.)?kkkpd\.szm\.sk
+https?:\/\/([^\/]*\.)?kkvalve\.com\.cn
+https?:\/\/([^\/]*\.)?klacim\.yi\.org
+https?:\/\/([^\/]*\.)?klasik111\.php5\.cz
+https?:\/\/([^\/]*\.)?kleinerachel\.blogspot\.com
+https?:\/\/([^\/]*\.)?klohy\.info
+https?:\/\/([^\/]*\.)?kmxab\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?knkbact\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?knzfpca\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ko-paris-hilton-sex-video-download\.blogspot\.com
+https?:\/\/([^\/]*\.)?koberec\.com
+https?:\/\/([^\/]*\.)?koled-porn-video-z\.blogspot\.com
+https?:\/\/([^\/]*\.)?kom4um\.com
+https?:\/\/([^\/]*\.)?koncatina\.dtdns\.net
+https?:\/\/([^\/]*\.)?konstantine01\.blogspot\.com
+https?:\/\/([^\/]*\.)?kordirect\.com
+https?:\/\/([^\/]*\.)?kos123\.dtdns\.net
+https?:\/\/([^\/]*\.)?kostya\.cabspace\.com
+https?:\/\/([^\/]*\.)?kpdsvd9\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?kpqf2\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?kpzq6\.szm\.sk
+https?:\/\/([^\/]*\.)?krakatoa\.slyip\.com
+https?:\/\/([^\/]*\.)?krakon\.republika\.pl
+https?:\/\/([^\/]*\.)?krasnota\.flnet\.org
+https?:\/\/([^\/]*\.)?krbd2\.szm\.sk
+https?:\/\/([^\/]*\.)?kreco\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ksbj5\.szm\.sk
+https?:\/\/([^\/]*\.)?ksiegagosci\.info
+https?:\/\/([^\/]*\.)?ktbug1373\.blogspot\.com
+https?:\/\/([^\/]*\.)?ktrv2\.szm\.sk
+https?:\/\/([^\/]*\.)?ku-whatnot\.blogspot\.com
+https?:\/\/([^\/]*\.)?kucitok\.forumculture\.net
+https?:\/\/([^\/]*\.)?kulhain\.blogspot\.com
+https?:\/\/([^\/]*\.)?kunshalawyer\.com
+https?:\/\/([^\/]*\.)?kvehuj8\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?kvywc\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?kwscx\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?kwvi\.com
+https?:\/\/([^\/]*\.)?kybel\.fetftp\.nu
+https?:\/\/([^\/]*\.)?kybele\.psych\.cornell\.edu
+https?:\/\/([^\/]*\.)?kyjcz\.sunp\.com
+https?:\/\/([^\/]*\.)?kymnruw\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?kymyn\.info
+https?:\/\/([^\/]*\.)?l-paris-hilton-sex-video-download\.blogspot\.com
+https?:\/\/([^\/]*\.)?l\.0s48\.info
+https?:\/\/([^\/]*\.)?l1ttleblacky\.blogspot\.com
+https?:\/\/([^\/]*\.)?la-ringtones\.com
+https?:\/\/([^\/]*\.)?laaceler\.blogcu\.com
+https?:\/\/([^\/]*\.)?labelprinter\.printer\.net\.cn
+https?:\/\/([^\/]*\.)?labladar\.forumzen\.com
+https?:\/\/([^\/]*\.)?lacchi\.lolforum\.net
+https?:\/\/([^\/]*\.)?laconia4\.info
+https?:\/\/([^\/]*\.)?ladylike\.hostcroc\.com
+https?:\/\/([^\/]*\.)?lake-baikal\.info
+https?:\/\/([^\/]*\.)?laked\.info
+https?:\/\/([^\/]*\.)?lalisit\.heavenforum\.com
+https?:\/\/([^\/]*\.)?lalisit\.highforum\.net
+https?:\/\/([^\/]*\.)?lamalinks-com-ceefq\.blogspot\.com
+https?:\/\/([^\/]*\.)?lamisilbuy\.drive\.to
+https?:\/\/([^\/]*\.)?lamisilbuygeneric\.dive\.to
+https?:\/\/([^\/]*\.)?lamisilcheap\.drink\.to
+https?:\/\/([^\/]*\.)?lamisilgeneric\.drop\.to
+https?:\/\/([^\/]*\.)?lamisilgenericcheap\.dive\.to
+https?:\/\/([^\/]*\.)?lanasbigboobs-com-mxm7\.blogspot\.com
+https?:\/\/([^\/]*\.)?lanasbigboobs-com-repif\.blogspot\.com
+https?:\/\/([^\/]*\.)?laorer\.ephpbb\.com
+https?:\/\/([^\/]*\.)?lapelcna\.forumzen\.com
+https?:\/\/([^\/]*\.)?lapoer\.dynamicforum\.net
+https?:\/\/([^\/]*\.)?large-lingerie-naughty-woman\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?las-vegas-gay-night-club\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?las-vegas-house\.nm\.ru
+https?:\/\/([^\/]*\.)?laser-drilled-diamonds\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?laser-wave\.com
+https?:\/\/([^\/]*\.)?laskai\.com
+https?:\/\/([^\/]*\.)?lasmercedessite\.info
+https?:\/\/([^\/]*\.)?lassie\.webmelia\.com
+https?:\/\/([^\/]*\.)?last-minute-travel\.ebem\.info
+https?:\/\/([^\/]*\.)?latex-ass\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?latex-dress\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?latex-foam-mattress-toppers\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?latex-mistress\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?latex-sluts\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?latex-swim-wear\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?latin\.hostaim\.com
+https?:\/\/([^\/]*\.)?latina-porn-clip-blog11q\.blogspot\.com
+https?:\/\/([^\/]*\.)?latina-porn-clip-blogden\.blogspot\.com
+https?:\/\/([^\/]*\.)?latinata\.galeon\.com
+https?:\/\/([^\/]*\.)?latoarril\.myrealboard\.com
+https?:\/\/([^\/]*\.)?laus-rmore\.blogspot\.com
+https?:\/\/([^\/]*\.)?lavemi\.com
+https?:\/\/([^\/]*\.)?lavender-dove\.blogspot\.com
+https?:\/\/([^\/]*\.)?lavor0\.info
+https?:\/\/([^\/]*\.)?law-school\.hotmail\.ru
+https?:\/\/([^\/]*\.)?law1degree\.chat\.ru
+https?:\/\/([^\/]*\.)?law2school\.chat\.ru
+https?:\/\/([^\/]*\.)?lawrencegillies\.blogspot\.com
+https?:\/\/([^\/]*\.)?lawyer\.ebloggy\.com
+https?:\/\/([^\/]*\.)?laynamarya\.blogspot\.com
+https?:\/\/([^\/]*\.)?laythekatcom\.pupava\.dtdns\.net
+https?:\/\/([^\/]*\.)?lbgetm9\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?lbrnrme\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?lczjunf\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ldrdf\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?le-alma\.blogspot\.com
+https?:\/\/([^\/]*\.)?le-big-free-movie-porn-cek\.blogspot\.com
+https?:\/\/([^\/]*\.)?leadora\.blogspot\.com
+https?:\/\/([^\/]*\.)?leannrae85\.blogspot\.com
+https?:\/\/([^\/]*\.)?lebu-adidas\.blogspot\.com
+https?:\/\/([^\/]*\.)?ledego\.com
+https?:\/\/([^\/]*\.)?ledgiest\.xhostar\.com
+https?:\/\/([^\/]*\.)?ledkrx\.com
+https?:\/\/([^\/]*\.)?ledled\.nease\.net
+https?:\/\/([^\/]*\.)?leebuc\.forumzen\.com
+https?:\/\/([^\/]*\.)?leeticarus\.blogspot\.com
+https?:\/\/([^\/]*\.)?leetvilt\.jconserv\.net
+https?:\/\/([^\/]*\.)?left-leg-numbness\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?leg-exercise\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?leg-in-stocking\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?leg-in-tan-pantie-hose\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?leg-neurontin-restless-syndrome\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?leg-preteen-spread\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?leg-shaved-spread\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?leisure-suit-larry-magna-cum-laude-nudity-patch\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?leisure-suit-larry-magna-cum-laude-uncut-and-uncensored\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?leo-the-bastet\.site\.voila\.fr
+https?:\/\/([^\/]*\.)?leopard-lady\.blogspot\.com
+https?:\/\/([^\/]*\.)?leroyhotel\.com
+https?:\/\/([^\/]*\.)?lesbian-anal-porn\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?lesbian-fisting-dvd\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?lesbian-fucking-eachother\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?lesbian-girl-scout\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?lesbian-group-masturbation\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?lesbian-oral-sex\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?lesbian-personals-ads\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?lesbian-personals-yahoo\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?lesbian-porn-clip-blog6e5\.blogspot\.com
+https?:\/\/([^\/]*\.)?lesbian-sex-teen\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?lesbian-sharing-dildo\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?lesbian-tit-bondage\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?lesbian-web-chat-and-cam\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?lesbians\.coz\.in
+https?:\/\/([^\/]*\.)?letoacel-or\.xa\.pl
+https?:\/\/([^\/]*\.)?letobocpas\.frbb\.net
+https?:\/\/([^\/]*\.)?letocvi\.goodbb\.net
+https?:\/\/([^\/]*\.)?letomon\.graphforum\.com
+https?:\/\/([^\/]*\.)?letorelpas\.xa\.pl
+https?:\/\/([^\/]*\.)?lettera-di-presentazione\.zoom4x\.info
+https?:\/\/([^\/]*\.)?lettersof-love\.blogspot\.com
+https?:\/\/([^\/]*\.)?levitra\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?levitra\.rx4\.org
+https?:\/\/([^\/]*\.)?levitra\.seesaa\.net
+https?:\/\/([^\/]*\.)?levitra\.skocz\.net
+https?:\/\/([^\/]*\.)?levitraejv\.blogspot\.com
+https?:\/\/([^\/]*\.)?levitras\.eu\.tf
+https?:\/\/([^\/]*\.)?levitraxpb\.blogspot\.com
+https?:\/\/([^\/]*\.)?lex-interracial\.hoffer\.ipupdater\.com
+https?:\/\/([^\/]*\.)?lexapro\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?lexaprobuyonline\.buzznet\.com
+https?:\/\/([^\/]*\.)?lexpov-com\.cornut\.ipupdater\.com
+https?:\/\/([^\/]*\.)?leyeager\.ifrance\.com
+https?:\/\/([^\/]*\.)?lezbomovies-com-dp3256w4cb\.blogspot\.com
+https?:\/\/([^\/]*\.)?lezbomovies-com-duvuv\.blogspot\.com
+https?:\/\/([^\/]*\.)?lezbomovies-com-dw7q2s6l\.blogspot\.com
+https?:\/\/([^\/]*\.)?lf-pm\.com
+https?:\/\/([^\/]*\.)?lfamas\.com
+https?:\/\/([^\/]*\.)?lhbtx\.szm\.sk
+https?:\/\/([^\/]*\.)?lhnzkp9\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?li-adult-video-download\.blogspot\.com
+https?:\/\/([^\/]*\.)?li6or6olo\.dl\.pl
+https?:\/\/([^\/]*\.)?lianjieqi\.dzsc\.com
+https?:\/\/([^\/]*\.)?liaozhi\.org
+https?:\/\/([^\/]*\.)?libasac\.ephpbb\.com
+https?:\/\/([^\/]*\.)?libertyliga\.com
+https?:\/\/([^\/]*\.)?library\.cshl\.edu
+https?:\/\/([^\/]*\.)?libraryofthumbs-com-oyz1qboq\.blogspot\.com
+https?:\/\/([^\/]*\.)?licecile\.dl\.pl
+https?:\/\/([^\/]*\.)?licnarol\.dl\.pl
+https?:\/\/([^\/]*\.)?lidaror\.blogcu\.com
+https?:\/\/([^\/]*\.)?lidiarac\.forumzen\.com
+https?:\/\/([^\/]*\.)?lidomca\.graphforum\.com
+https?:\/\/([^\/]*\.)?lidomca\.highforum\.net
+https?:\/\/([^\/]*\.)?lidompas\.td\.pl
+https?:\/\/([^\/]*\.)?lidomta\.frbb\.net
+https?:\/\/([^\/]*\.)?lidupett\.forumzen\.com
+https?:\/\/([^\/]*\.)?lifeinsurance-x\.com
+https?:\/\/([^\/]*\.)?lifewave\.com
+https?:\/\/([^\/]*\.)?ligettr\.dl\.pl
+https?:\/\/([^\/]*\.)?light365\.com
+https?:\/\/([^\/]*\.)?lightspeed-state\.hostithere\.org
+https?:\/\/([^\/]*\.)?lihach\.com
+https?:\/\/([^\/]*\.)?lijoho-video-porn-gratis\.blogspot\.com
+https?:\/\/([^\/]*\.)?likozrut\.stabilt\.se
+https?:\/\/([^\/]*\.)?lilaleemcrightrealty\.com
+https?:\/\/([^\/]*\.)?lilaliko\.dynamicbb\.com
+https?:\/\/([^\/]*\.)?lile\.asp2\.cz
+https?:\/\/([^\/]*\.)?lilett\.blogspot\.com
+https?:\/\/([^\/]*\.)?lilhaq\.blogspot\.com
+https?:\/\/([^\/]*\.)?lilo-n\.blogspot\.com
+https?:\/\/([^\/]*\.)?lilotu\.com
+https?:\/\/([^\/]*\.)?linarcbo\.forumzen\.com
+https?:\/\/([^\/]*\.)?lincweb\.cacs\.louisiana\.edu
+https?:\/\/([^\/]*\.)?lindsaylife\.com
+https?:\/\/([^\/]*\.)?lineance-facial-hair-removal-cream\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?linefreeinternet\.info
+https?:\/\/([^\/]*\.)?linemd\.com
+https?:\/\/([^\/]*\.)?lingerie-babes-video\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?lingerie-girl-pic\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?lingerie-guide\.org
+https?:\/\/([^\/]*\.)?lingerie-sex-photo\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?lingerie-videos-com-wcu8\.blogspot\.com
+https?:\/\/([^\/]*\.)?lingshengdown\.com
+https?:\/\/([^\/]*\.)?lingua-francese\.host24h\.info
+https?:\/\/([^\/]*\.)?link-o-rama-com-t5xhd\.blogspot\.com
+https?:\/\/([^\/]*\.)?link-o-rama-com-toz5x8i2ez\.blogspot\.com
+https?:\/\/([^\/]*\.)?linserch\.com
+https?:\/\/([^\/]*\.)?lioral\.dl\.pl
+https?:\/\/([^\/]*\.)?lioumon\.lolforum\.net
+https?:\/\/([^\/]*\.)?lipitor\.skocz\.net
+https?:\/\/([^\/]*\.)?lipstick-love\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?lipstick-mac\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?lipus\.org
+https?:\/\/([^\/]*\.)?lirolbo\.goodforum\.net
+https?:\/\/([^\/]*\.)?lirolbo\.grafbb\.com
+https?:\/\/([^\/]*\.)?lisinopril\.no-ip\.info
+https?:\/\/([^\/]*\.)?list\.eng\.utah\.edu
+https?:\/\/([^\/]*\.)?listinna772\.galeon\.com
+https?:\/\/([^\/]*\.)?listpharm\.com
+https?:\/\/([^\/]*\.)?lists\.gatech\.edu
+https?:\/\/([^\/]*\.)?litaacel\.lolforum\.net
+https?:\/\/([^\/]*\.)?litadal\.myrealboard\.com
+https?:\/\/([^\/]*\.)?litayj0\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?literotica-com-t3yx\.blogspot\.com
+https?:\/\/([^\/]*\.)?literotica-com-tkncy\.blogspot\.com
+https?:\/\/([^\/]*\.)?litrget\.jc\.pl
+https?:\/\/([^\/]*\.)?little-april-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?little-april-masturbating-movie\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?little-dicks-bay\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?little-teen-fuck\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?littledevildoubt\.com
+https?:\/\/([^\/]*\.)?littlesunshine\.50webs\.org
+https?:\/\/([^\/]*\.)?litumdet\.forumzen\.com
+https?:\/\/([^\/]*\.)?liupy\.110mb\.com
+https?:\/\/([^\/]*\.)?live-gay-video-chat\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?live-jasmine-cams\.com
+https?:\/\/([^\/]*\.)?livejasmin-com-abc\.blogspot\.com
+https?:\/\/([^\/]*\.)?livejasmin-com-abz\.blogspot\.com
+https?:\/\/([^\/]*\.)?livejasmin-com-aky\.blogspot\.com
+https?:\/\/([^\/]*\.)?livejasmin-com-qujef\.blogspot\.com
+https?:\/\/([^\/]*\.)?livescore\.esguay\.com
+https?:\/\/([^\/]*\.)?livescore\.ven\.bz
+https?:\/\/([^\/]*\.)?livesupportpal\.com
+https?:\/\/([^\/]*\.)?liviral\.myrealboard\.com
+https?:\/\/([^\/]*\.)?lixin642\.com
+https?:\/\/([^\/]*\.)?liymcc0\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?lizardofoz\.com
+https?:\/\/([^\/]*\.)?lizas\.asp2\.cz
+https?:\/\/([^\/]*\.)?lizscottrawson\.com
+https?:\/\/([^\/]*\.)?lkrzfkg\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ll-four-sterto\.blogspot\.com
+https?:\/\/([^\/]*\.)?llillith\.blogspot\.com
+https?:\/\/([^\/]*\.)?lll1l\.info
+https?:\/\/([^\/]*\.)?llline\.info
+https?:\/\/([^\/]*\.)?llpcoil\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?llsky\.net
+https?:\/\/([^\/]*\.)?lm4nmu\.com
+https?:\/\/([^\/]*\.)?lmyzm\.szm\.sk
+https?:\/\/([^\/]*\.)?lnalpas\.myrealboard\.com
+https?:\/\/([^\/]*\.)?lnki9\.szm\.sk
+https?:\/\/([^\/]*\.)?lnqfa\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?lnqixlz\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?loan-unsecuredcxp\.blogspot\.com
+https?:\/\/([^\/]*\.)?loans-insurance\.net
+https?:\/\/([^\/]*\.)?lodge\.webmelia\.com
+https?:\/\/([^\/]*\.)?lodita-com-dya6s22zu\.blogspot\.com
+https?:\/\/([^\/]*\.)?lodita-com-dz\.blogspot\.com
+https?:\/\/([^\/]*\.)?loestrin\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?logast\.com
+https?:\/\/([^\/]*\.)?logowap\.com
+https?:\/\/([^\/]*\.)?lojlo\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?lojunbas\.forumzen\.com
+https?:\/\/([^\/]*\.)?lola-providence\.blogspot\.com
+https?:\/\/([^\/]*\.)?lolabear1121\.blogspot\.com
+https?:\/\/([^\/]*\.)?lolaparris\.freetzi\.com
+https?:\/\/([^\/]*\.)?loliti-com-c5m8mt\.blogspot\.com
+https?:\/\/([^\/]*\.)?lolovi\.naturalforum\.net
+https?:\/\/([^\/]*\.)?lomsts\.com
+https?:\/\/([^\/]*\.)?londra-ristorante\.freehostss\.info
+https?:\/\/([^\/]*\.)?lonely-wolf-com-rjqlm1d6\.blogspot\.com
+https?:\/\/([^\/]*\.)?long-porn-clip-info67s\.blogspot\.com
+https?:\/\/([^\/]*\.)?long-porn-clip-infosm4\.blogspot\.com
+https?:\/\/([^\/]*\.)?longestlist-com-b6\.blogspot\.com
+https?:\/\/([^\/]*\.)?longestlist-com-b683g4ik\.blogspot\.com
+https?:\/\/([^\/]*\.)?longestlist-hb\.blogspot\.com
+https?:\/\/([^\/]*\.)?longestlist-hohen\.blogspot\.com
+https?:\/\/([^\/]*\.)?longonline\.net
+https?:\/\/([^\/]*\.)?longvideos-net-gq78qyba\.blogspot\.com
+https?:\/\/([^\/]*\.)?longxiong\.ebloggy\.com
+https?:\/\/([^\/]*\.)?lony\.info
+https?:\/\/([^\/]*\.)?look-at-his-dick\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?lookcity\.com
+https?:\/\/([^\/]*\.)?lopata\.snusk\.nu
+https?:\/\/([^\/]*\.)?lopressorhct\.sblog\.cz
+https?:\/\/([^\/]*\.)?lorazepams\.ru\.tf
+https?:\/\/([^\/]*\.)?lortab-911\.coz\.in
+https?:\/\/([^\/]*\.)?lortab\.xwiki\.com
+https?:\/\/([^\/]*\.)?losangelestickets\.org
+https?:\/\/([^\/]*\.)?lotausch\.ifrance\.com
+https?:\/\/([^\/]*\.)?loudmp3\.net
+https?:\/\/([^\/]*\.)?louisianamortgage-x\.com
+https?:\/\/([^\/]*\.)?lovefuckk-com-eg7gx\.blogspot\.com
+https?:\/\/([^\/]*\.)?lovefuckk-com-et2x2g1sk\.blogspot\.com
+https?:\/\/([^\/]*\.)?lovefuckk-com-setos\.blogspot\.com
+https?:\/\/([^\/]*\.)?lovegirlsonline\.info
+https?:\/\/([^\/]*\.)?lovejuliet3\.blogspot\.com
+https?:\/\/([^\/]*\.)?lovetgp-com-d74h1ed3o\.blogspot\.com
+https?:\/\/([^\/]*\.)?lowbudgetsuccess\.info
+https?:\/\/([^\/]*\.)?lqsbjau\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?lrff5\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?lriwaq-free-porn\.blogspot\.com
+https?:\/\/([^\/]*\.)?lrlep\.szm\.sk
+https?:\/\/([^\/]*\.)?ltfl5\.szm\.sk
+https?:\/\/([^\/]*\.)?ltntp\.szm\.sk
+https?:\/\/([^\/]*\.)?lu-porn-video-download\.blogspot\.com
+https?:\/\/([^\/]*\.)?lucking\.com\.cn
+https?:\/\/([^\/]*\.)?lucqt\.szm\.sk
+https?:\/\/([^\/]*\.)?luridess\.125mb\.com
+https?:\/\/([^\/]*\.)?lusi-ada\.blogspot\.com
+https?:\/\/([^\/]*\.)?lustjob\.info
+https?:\/\/([^\/]*\.)?lustwork\.info
+https?:\/\/([^\/]*\.)?lusvqm-free-porn\.blogspot\.com
+https?:\/\/([^\/]*\.)?lutaltli\.naturalforum\.net
+https?:\/\/([^\/]*\.)?lutrilar\.naturalforum\.net
+https?:\/\/([^\/]*\.)?lutzalvi\.naturalforum\.net
+https?:\/\/([^\/]*\.)?lvanrts\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?lvsi\.ebloggy\.com
+https?:\/\/([^\/]*\.)?lwdf2\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?lwkmewp\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?lycosss\.com
+https?:\/\/([^\/]*\.)?lyganbaili\.com
+https?:\/\/([^\/]*\.)?lyhbs\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?lying-facial-expression\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?lyndawyllie\.com
+https?:\/\/([^\/]*\.)?lzouv\.szm\.sk
+https?:\/\/([^\/]*\.)?m-i-a-s-m-a\.blogspot\.com
+https?:\/\/([^\/]*\.)?m-sr\.net
+https?:\/\/([^\/]*\.)?m-teens-000\.blogspot\.com
+https?:\/\/([^\/]*\.)?m\.domaindlx\.com
+https?:\/\/([^\/]*\.)?m2mvc\.com
+https?:\/\/([^\/]*\.)?machi-neko\.blogspot\.com
+https?:\/\/([^\/]*\.)?mackenzie-kayne\.hostingtree\.org
+https?:\/\/([^\/]*\.)?macromob\.com
+https?:\/\/([^\/]*\.)?madesukadana\.com
+https?:\/\/([^\/]*\.)?madthumbs-com-hcq1m1\.blogspot\.com
+https?:\/\/([^\/]*\.)?mafy69\.blogspot\.com
+https?:\/\/([^\/]*\.)?magical-casino\.com
+https?:\/\/([^\/]*\.)?magneticwoman88\.blogspot\.com
+https?:\/\/([^\/]*\.)?maidenpeace\.com
+https?:\/\/([^\/]*\.)?main\.g2\.bx\.psu\.edu
+https?:\/\/([^\/]*\.)?mainemortgage-x\.com
+https?:\/\/([^\/]*\.)?maitybaba\.blogspot\.com
+https?:\/\/([^\/]*\.)?makaky\.dtdns\.net
+https?:\/\/([^\/]*\.)?makblxn\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?make-my-dick-hard\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?makemoneyfast\.us
+https?:\/\/([^\/]*\.)?makeup\.ifreehosts\.net
+https?:\/\/([^\/]*\.)?male-hairy-leg\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?malinka\.b0b\.org
+https?:\/\/([^\/]*\.)?mama-rachelbeth\.blogspot\.com
+https?:\/\/([^\/]*\.)?mamaswarm\.sultryserver\.com
+https?:\/\/([^\/]*\.)?man-caught-wearing-womens-lingerie\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?man-ring\.boom\.ru
+https?:\/\/([^\/]*\.)?man-rings\.boom\.ru
+https?:\/\/([^\/]*\.)?man-skin\.nightmail\.ru
+https?:\/\/([^\/]*\.)?man-skin\.nm\.ru
+https?:\/\/([^\/]*\.)?man-woman-fucking-video-clip\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?man_skin\.chat\.ru
+https?:\/\/([^\/]*\.)?managementproperty\.us
+https?:\/\/([^\/]*\.)?manka-kapak\.blogspot\.com
+https?:\/\/([^\/]*\.)?manoke\.cn
+https?:\/\/([^\/]*\.)?map4um\.com
+https?:\/\/([^\/]*\.)?mapas6\.com
+https?:\/\/([^\/]*\.)?maradona\.stabilt\.se
+https?:\/\/([^\/]*\.)?marhula\.weedns\.com
+https?:\/\/([^\/]*\.)?marinol\.xwiki\.com
+https?:\/\/([^\/]*\.)?mario-lopez-gayfgg\.blogspot\.com
+https?:\/\/([^\/]*\.)?marketing1degree\.chat\.ru
+https?:\/\/([^\/]*\.)?marklar\.republika\.pl
+https?:\/\/([^\/]*\.)?marti-adp\.iespana\.es
+https?:\/\/([^\/]*\.)?marucollet\.jp
+https?:\/\/([^\/]*\.)?maryannec\.com
+https?:\/\/([^\/]*\.)?marylandmortgage-x\.com
+https?:\/\/([^\/]*\.)?masfac\.com
+https?:\/\/([^\/]*\.)?masiki\.110mb\.com
+https?:\/\/([^\/]*\.)?masiti\.com
+https?:\/\/([^\/]*\.)?massachusetts-hs\.newmail\.ru
+https?:\/\/([^\/]*\.)?massachusettsmortgage-x\.com
+https?:\/\/([^\/]*\.)?mast3t\.com
+https?:\/\/([^\/]*\.)?master-z-great\.blogspot\.com
+https?:\/\/([^\/]*\.)?master1degree\.chat\.ru
+https?:\/\/([^\/]*\.)?master2005degree\.chat\.ru
+https?:\/\/([^\/]*\.)?masterboat\.ru
+https?:\/\/([^\/]*\.)?mastun\.com
+https?:\/\/([^\/]*\.)?masturbating-shemale-video\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?masturbation-techniques1\.notlong\.com
+https?:\/\/([^\/]*\.)?masvit\.com
+https?:\/\/([^\/]*\.)?matching-mom-and-baby-outfit\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?matrac\.loopback\.nu
+https?:\/\/([^\/]*\.)?mattsvids-com-aqjt\.blogspot\.com
+https?:\/\/([^\/]*\.)?mature-bitches-com-ccvi3l\.blogspot\.com
+https?:\/\/([^\/]*\.)?mature-black-female\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?mature-blonde-fuck\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?mature-blonde-movie\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?mature-blonde-toying\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?mature-british-granny\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?mature-clip\.babubi\.net
+https?:\/\/([^\/]*\.)?mature-for-you-com-mt66\.blogspot\.com
+https?:\/\/([^\/]*\.)?mature-gang-bang\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?mature-gay-black\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?mature-gay-man-gallery\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?mature-man-photo\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?mature-man-picture\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?mature-milf-milfmuffin-com\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?mature-nl-kss7\.blogspot\.com
+https?:\/\/([^\/]*\.)?mature-pantie-upskirt\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?mature-pic-post\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?mature-porn-clip-newsj8c\.blogspot\.com
+https?:\/\/([^\/]*\.)?mature-porn-clip-zone5s0\.blogspot\.com
+https?:\/\/([^\/]*\.)?mature-porn-movie-sihu\.blogspot\.com
+https?:\/\/([^\/]*\.)?mature-porn-video-ku\.blogspot\.com
+https?:\/\/([^\/]*\.)?mature-post-com-iecsmld78\.blogspot\.com
+https?:\/\/([^\/]*\.)?mature-redhead\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?mature-secret-com-r6t85u5\.blogspot\.com
+https?:\/\/([^\/]*\.)?mature-sex-orgy\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?mature-sex-thumb\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?mature-throat-fuck\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?mature-wife-in-pantie-hose\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?mature-woman-vs-young\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?mature\.coz\.in
+https?:\/\/([^\/]*\.)?matureandyoung-com-bgf1\.blogspot\.com
+https?:\/\/([^\/]*\.)?maturedaily-net-oipq5\.blogspot\.com
+https?:\/\/([^\/]*\.)?maturedaily-net-oywdf7pj0\.blogspot\.com
+https?:\/\/([^\/]*\.)?maturehit-com-w8\.blogspot\.com
+https?:\/\/([^\/]*\.)?maturehit-com-zifid\.blogspot\.com
+https?:\/\/([^\/]*\.)?maximumsearch\.net
+https?:\/\/([^\/]*\.)?maybachexelero\.org
+https?:\/\/([^\/]*\.)?mayphyoe\.blogspot\.com
+https?:\/\/([^\/]*\.)?maypopmusic\.cn
+https?:\/\/([^\/]*\.)?mazda-6\.keckins\.be
+https?:\/\/([^\/]*\.)?mazdamaindealer\.cn
+https?:\/\/([^\/]*\.)?mazecreatorhosting\.net
+https?:\/\/([^\/]*\.)?mba1degree\.chat\.ru
+https?:\/\/([^\/]*\.)?mbiu1\.szm\.sk
+https?:\/\/([^\/]*\.)?mbkxs\.szm\.sk
+https?:\/\/([^\/]*\.)?mbsz0\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?mcfontai\.dl\.pl
+https?:\/\/([^\/]*\.)?mciicvn\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?mckeithl\.ifrance\.com
+https?:\/\/([^\/]*\.)?mcynwst\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?mdfo2\.szm\.sk
+https?:\/\/([^\/]*\.)?mdna8\.szm\.sk
+https?:\/\/([^\/]*\.)?mdoq5\.szm\.sk
+https?:\/\/([^\/]*\.)?meadelante\.blogspot\.com
+https?:\/\/([^\/]*\.)?med-ph\.com
+https?:\/\/([^\/]*\.)?medbig\.com
+https?:\/\/([^\/]*\.)?medgarsting\.info
+https?:\/\/([^\/]*\.)?medhls\.com
+https?:\/\/([^\/]*\.)?medic\.kilu\.de
+https?:\/\/([^\/]*\.)?medication-cheap\.com
+https?:\/\/([^\/]*\.)?meds-today\.com
+https?:\/\/([^\/]*\.)?megadyneinc\.com
+https?:\/\/([^\/]*\.)?megan-qt-cjg\.blogspot\.com
+https?:\/\/([^\/]*\.)?megaupkoad\.com
+https?:\/\/([^\/]*\.)?meindies\.com
+https?:\/\/([^\/]*\.)?melatrol\.podstavec\.yi\.org
+https?:\/\/([^\/]*\.)?melissa-doll\.cornut\.ipupdater\.com
+https?:\/\/([^\/]*\.)?melsner\.blogspot\.com
+https?:\/\/([^\/]*\.)?mens\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?menshealth\.110mb\.com
+https?:\/\/([^\/]*\.)?meoqwzr\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?meridasexo\.com
+https?:\/\/([^\/]*\.)?meridia\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?meridia\.edu\.tf
+https?:\/\/([^\/]*\.)?meridia\.hav\.pl
+https?:\/\/([^\/]*\.)?meridia\.skocz\.net
+https?:\/\/([^\/]*\.)?meridiager\.queroumforum\.com
+https?:\/\/([^\/]*\.)?meryland\.dtdns\.net
+https?:\/\/([^\/]*\.)?mesothelioma-lawyer-help\.org
+https?:\/\/([^\/]*\.)?meweb\.ecn\.purdue\.edu
+https?:\/\/([^\/]*\.)?mewqsd\.org
+https?:\/\/([^\/]*\.)?mgnzupi\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?mi-kkiechang\.ifrance\.com
+https?:\/\/([^\/]*\.)?mia-movies-com-g2g1\.blogspot\.com
+https?:\/\/([^\/]*\.)?mia-movies-e86q7ic4y7\.blogspot\.com
+https?:\/\/([^\/]*\.)?miami-cose-fare\.hostzz\.info
+https?:\/\/([^\/]*\.)?michelepug\.org
+https?:\/\/([^\/]*\.)?michiganmortgage-x\.com
+https?:\/\/([^\/]*\.)?midaslubbock\.com
+https?:\/\/([^\/]*\.)?midnis\.com
+https?:\/\/([^\/]*\.)?migree\.com
+https?:\/\/([^\/]*\.)?mihaso\.com
+https?:\/\/([^\/]*\.)?mikeinbrazil-com-k1s8higm1o\.blogspot\.com
+https?:\/\/([^\/]*\.)?mikeinbrazil-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?mikesapartment-com-iwb02e1v\.blogspot\.com
+https?:\/\/([^\/]*\.)?mikesapartment-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?mikewsd\.org
+https?:\/\/([^\/]*\.)?miks1\.szm\.sk
+https?:\/\/([^\/]*\.)?miku-thu-vilu\.110mb\.com
+https?:\/\/([^\/]*\.)?mildew\.789mb\.com
+https?:\/\/([^\/]*\.)?milf-blow-job-gallery\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?milf-busty-fucking\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?milf-hunter-kate\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?milf-mature-big-tit\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?milf-tgp-wife\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?milfhunter-com-h2a7q51\.blogspot\.com
+https?:\/\/([^\/]*\.)?milflessons-com-bh6\.blogspot\.com
+https?:\/\/([^\/]*\.)?milfnextdoor-bk23v2p4\.blogspot\.com
+https?:\/\/([^\/]*\.)?milfnextdoor-w3ii\.blogspot\.com
+https?:\/\/([^\/]*\.)?milkmanbook-com-o7\.blogspot\.com
+https?:\/\/([^\/]*\.)?milkmanbook-com-rrup5f\.blogspot\.com
+https?:\/\/([^\/]*\.)?milkmanbook-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?milkmanbook-ods016\.blogspot\.com
+https?:\/\/([^\/]*\.)?milton-twins-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?mimija\.com
+https?:\/\/([^\/]*\.)?miniurl\.pl
+https?:\/\/([^\/]*\.)?minnesotamortgage-x\.com
+https?:\/\/([^\/]*\.)?minzec\.dynamicbb\.com
+https?:\/\/([^\/]*\.)?missensign\.blogspot\.com
+https?:\/\/([^\/]*\.)?mississippimortgage-x\.com
+https?:\/\/([^\/]*\.)?missourimortgage-x\.com
+https?:\/\/([^\/]*\.)?mitsubishicarhire\.cn
+https?:\/\/([^\/]*\.)?mj-net\.jp
+https?:\/\/([^\/]*\.)?mj\.left-page\.com
+https?:\/\/([^\/]*\.)?mjlvan4\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?mjqnxn1\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?mjspb\.szm\.sk
+https?:\/\/([^\/]*\.)?mkia3\.szm\.sk
+https?:\/\/([^\/]*\.)?mkiss47346\.blogspot\.com
+https?:\/\/([^\/]*\.)?mksahf-free-porn\.blogspot\.com
+https?:\/\/([^\/]*\.)?mkzvni8\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?mlgta\.szm\.sk
+https?:\/\/([^\/]*\.)?mlm-business-leader\.com
+https?:\/\/([^\/]*\.)?mlvej\.szm\.sk
+https?:\/\/([^\/]*\.)?mmm100-com-aj\.blogspot\.com
+https?:\/\/([^\/]*\.)?mmm100-com-cisec\.blogspot\.com
+https?:\/\/([^\/]*\.)?mmm100-com-tql1xojt\.blogspot\.com
+https?:\/\/([^\/]*\.)?mnsp\.cn
+https?:\/\/([^\/]*\.)?mobfiller\.com
+https?:\/\/([^\/]*\.)?mobic\.sytes\.net
+https?:\/\/([^\/]*\.)?mobile-phone-dealoft\.blogspot\.com
+https?:\/\/([^\/]*\.)?mobile-phone-shopmgl\.blogspot\.com
+https?:\/\/([^\/]*\.)?mobile-phonegsn\.blogspot\.com
+https?:\/\/([^\/]*\.)?mobilefamilydental\.com
+https?:\/\/([^\/]*\.)?mobilewallpaperkre\.blogspot\.com
+https?:\/\/([^\/]*\.)?mobility-scooter\.hotmail\.ru
+https?:\/\/([^\/]*\.)?mobility2scooter\.chat\.ru
+https?:\/\/([^\/]*\.)?mobprofile\.com
+https?:\/\/([^\/]*\.)?modelsgroup-com-wrx\.blogspot\.com
+https?:\/\/([^\/]*\.)?modelsgroup-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?modlang\.boisestate\.edu
+https?:\/\/([^\/]*\.)?moju\.net\.cn
+https?:\/\/([^\/]*\.)?mol-ch\.com
+https?:\/\/([^\/]*\.)?mom-and-son-song\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?mom-music-video\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?mom-n-son\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?mom-vs-young\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?mommia-com-h32\.blogspot\.com
+https?:\/\/([^\/]*\.)?mommia-com-hvr6wy\.blogspot\.com
+https?:\/\/([^\/]*\.)?mommia-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?moms-teaching-teens-ceb\.blogspot\.com
+https?:\/\/([^\/]*\.)?monbocchi\.zikforum\.com
+https?:\/\/([^\/]*\.)?moncnamon\.ephpbb\.com
+https?:\/\/([^\/]*\.)?moncnamon\.forumculture\.net
+https?:\/\/([^\/]*\.)?monctr\.cultureforum\.net
+https?:\/\/([^\/]*\.)?mondelacel\.dl\.pl
+https?:\/\/([^\/]*\.)?monelal\.discutfree\.com
+https?:\/\/([^\/]*\.)?moneta-algeria\.hostzz\.info
+https?:\/\/([^\/]*\.)?monjco\.blogcu\.com
+https?:\/\/([^\/]*\.)?monletochi\.bbgraf\.com
+https?:\/\/([^\/]*\.)?monokal\.dynamicforum\.net
+https?:\/\/([^\/]*\.)?monorget\.lolbb\.com
+https?:\/\/([^\/]*\.)?monpasrel\.dl\.pl
+https?:\/\/([^\/]*\.)?monster-cock-movie-big\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?monstersofcock-com-rvdurm2\.blogspot\.com
+https?:\/\/([^\/]*\.)?montana-flugsport\.com
+https?:\/\/([^\/]*\.)?montanamortgage-x\.com
+https?:\/\/([^\/]*\.)?montessori-spielzeug\.com
+https?:\/\/([^\/]*\.)?moody-immortal2\.blogspot\.com
+https?:\/\/([^\/]*\.)?morekes\.com
+https?:\/\/([^\/]*\.)?moremoms-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?moremoms-rj8f2r\.blogspot\.com
+https?:\/\/([^\/]*\.)?mortgage-911\.net
+https?:\/\/([^\/]*\.)?mortgagebrokers-x\.com
+https?:\/\/([^\/]*\.)?mortgagecompanies-x\.com
+https?:\/\/([^\/]*\.)?mortgagelenders-x\.com
+https?:\/\/([^\/]*\.)?mortgageloan-x\.com
+https?:\/\/([^\/]*\.)?mortgageloans-x\.com
+https?:\/\/([^\/]*\.)?mortgagerates-x\.com
+https?:\/\/([^\/]*\.)?mortgagerefinance-x\.com
+https?:\/\/([^\/]*\.)?mortgagerefinancing-x\.com
+https?:\/\/([^\/]*\.)?mortgages-411\.com
+https?:\/\/([^\/]*\.)?mortgagesnrefinance\.com
+https?:\/\/([^\/]*\.)?mosquito-ringtoneaee\.blogspot\.com
+https?:\/\/([^\/]*\.)?mosquitoringtonewmf\.blogspot\.com
+https?:\/\/([^\/]*\.)?mothershope\.com
+https?:\/\/([^\/]*\.)?mothrinventor\.blogspot\.com
+https?:\/\/([^\/]*\.)?motnolado\.org
+https?:\/\/([^\/]*\.)?motor-scooter\.hotmail\.ru
+https?:\/\/([^\/]*\.)?motorized-scooter\.hotmail\.ru
+https?:\/\/([^\/]*\.)?motorizedscooter\.chat\.ru
+https?:\/\/([^\/]*\.)?motorolaringtonesfreeucq\.blogspot\.com
+https?:\/\/([^\/]*\.)?motorolaringtoneskvp\.blogspot\.com
+https?:\/\/([^\/]*\.)?motorolaringtonesym\.blogspot\.com
+https?:\/\/([^\/]*\.)?moviegalleries-com-gl8\.blogspot\.com
+https?:\/\/([^\/]*\.)?moviepost-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?moviepost-h4s2iin\.blogspot\.com
+https?:\/\/([^\/]*\.)?moviesarena-com-r42rng0\.blogspot\.com
+https?:\/\/([^\/]*\.)?moviesarena-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?moviesgold-com-ig86ukjw\.blogspot\.com
+https?:\/\/([^\/]*\.)?moviesgold-com-k0\.blogspot\.com
+https?:\/\/([^\/]*\.)?movieshark-d0vdon27\.blogspot\.com
+https?:\/\/([^\/]*\.)?moviesparade-com-a3hxnn6\.blogspot\.com
+https?:\/\/([^\/]*\.)?movietitan-com-i6shde\.blogspot\.com
+https?:\/\/([^\/]*\.)?movietitan-o6i14o0\.blogspot\.com
+https?:\/\/([^\/]*\.)?mozzarell\.republika\.pl
+https?:\/\/([^\/]*\.)?mp3ringtonerxw\.blogspot\.com
+https?:\/\/([^\/]*\.)?mp3sunrise\.com
+https?:\/\/([^\/]*\.)?mpdtbq8\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?mpeghunter-com-cyc0bec7k\.blogspot\.com
+https?:\/\/([^\/]*\.)?mqirai4\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?mrako4\.com
+https?:\/\/([^\/]*\.)?mrchewsasianbeaver-bwhmc0sk\.blogspot\.com
+https?:\/\/([^\/]*\.)?mrchewsasianbeaver-com-omazvpr\.blogspot\.com
+https?:\/\/([^\/]*\.)?mrntf\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?mrs-vette-hot-mom\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?mrwolfy49\.blogspot\.com
+https?:\/\/([^\/]*\.)?ms-dos-boot-disk\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?mster6\.com
+https?:\/\/([^\/]*\.)?mtaa5\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?mthelen\.250free\.com
+https?:\/\/([^\/]*\.)?muecst9\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?mughalbank\.com
+https?:\/\/([^\/]*\.)?mumms\.info
+https?:\/\/([^\/]*\.)?murdersoul\.blogspot\.com
+https?:\/\/([^\/]*\.)?murku-gunush\.110mb\.com
+https?:\/\/([^\/]*\.)?mus1ca\.info
+https?:\/\/([^\/]*\.)?muscle-pain-leg-cause\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?muscle-relaxers\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?music\.spacepur\.de
+https?:\/\/([^\/]*\.)?musicguild\.bc\.edu
+https?:\/\/([^\/]*\.)?mutantalias\.blogspot\.com
+https?:\/\/([^\/]*\.)?muwn9\.szm\.sk
+https?:\/\/([^\/]*\.)?muzyr\.szm\.sk
+https?:\/\/([^\/]*\.)?mvoht\.szm\.sk
+https?:\/\/([^\/]*\.)?mvsyonh\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?mwqbg\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?mwwkps6\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?mxmva\.szm\.sk
+https?:\/\/([^\/]*\.)?mxqwnn2\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?my-cashadvance\.com
+https?:\/\/([^\/]*\.)?my-first-sex-teacherlbp\.blogspot\.com
+https?:\/\/([^\/]*\.)?my-friends-hot-mom-free-pic\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?my-friends-hot-mom-lesbian\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?my-friends-hot-mom-mrs-lee\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?my-host-space\.com
+https?:\/\/([^\/]*\.)?my-land\.bravehost\.com
+https?:\/\/([^\/]*\.)?my-mortgagerates\.com
+https?:\/\/([^\/]*\.)?my-summit\.com
+https?:\/\/([^\/]*\.)?my-teensex-wikes\.blogspot\.com
+https?:\/\/([^\/]*\.)?myfgj\.info
+https?:\/\/([^\/]*\.)?myhost\.gb\.com
+https?:\/\/([^\/]*\.)?mymitsubishiparts\.cn
+https?:\/\/([^\/]*\.)?mymr\.net
+https?:\/\/([^\/]*\.)?mynet-poker\.com
+https?:\/\/([^\/]*\.)?myprintworks\.com
+https?:\/\/([^\/]*\.)?myrotunda\.com
+https?:\/\/([^\/]*\.)?mysecretmovies-com-tul73\.blogspot\.com
+https?:\/\/([^\/]*\.)?myseo\.com\.cn
+https?:\/\/([^\/]*\.)?myshcompany\.com
+https?:\/\/([^\/]*\.)?mysmetrix\.asp2\.cz
+https?:\/\/([^\/]*\.)?myspace-myspace-my\.blogspot\.com
+https?:\/\/([^\/]*\.)?myteepo-3\.blogspot\.com
+https?:\/\/([^\/]*\.)?myts\.vip\.sina\.com
+https?:\/\/([^\/]*\.)?mywaybackwhen\.blogspot\.com
+https?:\/\/([^\/]*\.)?mzaxl\.szm\.sk
+https?:\/\/([^\/]*\.)?mzayxt2\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?mzlurz8\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?mzwbifn\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?n-free-porn-video-sample\.blogspot\.com
+https?:\/\/([^\/]*\.)?n-free-video-porn\.blogspot\.com
+https?:\/\/([^\/]*\.)?na-hummer\.jot\.com
+https?:\/\/([^\/]*\.)?naacpncnetwork\.org
+https?:\/\/([^\/]*\.)?naarttrl\.forumzen\.com
+https?:\/\/([^\/]*\.)?naffpqh\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?naomiserge\.info
+https?:\/\/([^\/]*\.)?napalerd\.forumzen\.com
+https?:\/\/([^\/]*\.)?napas5\.com
+https?:\/\/([^\/]*\.)?naprosyn500mg\.sblog\.cz
+https?:\/\/([^\/]*\.)?naproxen\.zapto\.org
+https?:\/\/([^\/]*\.)?naqowp1\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?nariclet\.forumzen\.com
+https?:\/\/([^\/]*\.)?nas7fk\.com
+https?:\/\/([^\/]*\.)?nasacort\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?nasonex\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?nastyalien-com-dk0wnd58i\.blogspot\.com
+https?:\/\/([^\/]*\.)?nastyalien-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?nastyrat-b7\.blogspot\.com
+https?:\/\/([^\/]*\.)?nastyrat-com-b8mu31h87m\.blogspot\.com
+https?:\/\/([^\/]*\.)?nastyrat-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?natskam\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?natural-skin\.nm\.ru
+https?:\/\/([^\/]*\.)?natural-tit-cum\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?natural_skin\.chat\.ru
+https?:\/\/([^\/]*\.)?naughty-com-wdk\.blogspot\.com
+https?:\/\/([^\/]*\.)?naughty-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?navse\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?nbay2\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?nbikkpb\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?nbmhvbv\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?nbxc3\.szm\.sk
+https?:\/\/([^\/]*\.)?nchqqi4\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ncpx5\.szm\.sk
+https?:\/\/([^\/]*\.)?ncwash\.com
+https?:\/\/([^\/]*\.)?nd-tli\.com
+https?:\/\/([^\/]*\.)?ndarj\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ndnwrby\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?nebraskamortgage-x\.com
+https?:\/\/([^\/]*\.)?nedneutr\.goodbb\.net
+https?:\/\/([^\/]*\.)?nedpbi3\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?need-site\.com
+https?:\/\/([^\/]*\.)?nefariouswraith\.blogspot\.com
+https?:\/\/([^\/]*\.)?negozio-strumento-musicale\.19mb\.info
+https?:\/\/([^\/]*\.)?nejqssk\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?neko-adg\.blogspot\.com
+https?:\/\/([^\/]*\.)?nekoo\.cn
+https?:\/\/([^\/]*\.)?nekostar3\.blogspot\.com
+https?:\/\/([^\/]*\.)?nelaidla\.ifrance\.com
+https?:\/\/([^\/]*\.)?nelcala\.fr-bb\.com
+https?:\/\/([^\/]*\.)?nelior\.goodbb\.net
+https?:\/\/([^\/]*\.)?neri-albany\.blogspot\.com
+https?:\/\/([^\/]*\.)?neroj\.szm\.sk
+https?:\/\/([^\/]*\.)?nerve\.zyns\.com
+https?:\/\/([^\/]*\.)?net0551\.com
+https?:\/\/([^\/]*\.)?netbank\.cn
+https?:\/\/([^\/]*\.)?nethams\.pp\.ru
+https?:\/\/([^\/]*\.)?netinternetbanking\.info
+https?:\/\/([^\/]*\.)?netteak\.pp\.ru
+https?:\/\/([^\/]*\.)?nettyre\.pp\.ru
+https?:\/\/([^\/]*\.)?neux9\.szm\.sk
+https?:\/\/([^\/]*\.)?nevadamortgage-x\.com
+https?:\/\/([^\/]*\.)?nevados-hiking-boot\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?nevulo-teen-sex-video\.blogspot\.com
+https?:\/\/([^\/]*\.)?new-ringtonesou\.blogspot\.com
+https?:\/\/([^\/]*\.)?new-watches\.fasthost\.tv
+https?:\/\/([^\/]*\.)?newae\.info
+https?:\/\/([^\/]*\.)?newaf\.info
+https?:\/\/([^\/]*\.)?newah\.info
+https?:\/\/([^\/]*\.)?newai\.info
+https?:\/\/([^\/]*\.)?newaq\.info
+https?:\/\/([^\/]*\.)?newar\.info
+https?:\/\/([^\/]*\.)?newau\.info
+https?:\/\/([^\/]*\.)?newbabyface\.net
+https?:\/\/([^\/]*\.)?newboyu\.com
+https?:\/\/([^\/]*\.)?newdietpills\.bravehost\.com
+https?:\/\/([^\/]*\.)?newgals-com-ean\.blogspot\.com
+https?:\/\/([^\/]*\.)?newhampshiremortgage-x\.com
+https?:\/\/([^\/]*\.)?newjerseymortgage-x\.com
+https?:\/\/([^\/]*\.)?newmexicomortgage-x\.com
+https?:\/\/([^\/]*\.)?newnewsonline\.info
+https?:\/\/([^\/]*\.)?newob\.info
+https?:\/\/([^\/]*\.)?newoc\.info
+https?:\/\/([^\/]*\.)?newom\.info
+https?:\/\/([^\/]*\.)?newov\.info
+https?:\/\/([^\/]*\.)?newox\.info
+https?:\/\/([^\/]*\.)?newoz\.info
+https?:\/\/([^\/]*\.)?news\.101freehost\.com
+https?:\/\/([^\/]*\.)?news\.engin\.brown\.edu
+https?:\/\/([^\/]*\.)?newwesthonda\.info
+https?:\/\/([^\/]*\.)?newworldmen\.com
+https?:\/\/([^\/]*\.)?newyorkmortgage-x\.com
+https?:\/\/([^\/]*\.)?nexium\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?nexiumbuy\.on\.to
+https?:\/\/([^\/]*\.)?nexiumbuygeneric\.snap\.to
+https?:\/\/([^\/]*\.)?nexiumcheap\.notrix\.ch
+https?:\/\/([^\/]*\.)?nexiumcheapbuy\.notrix\.de
+https?:\/\/([^\/]*\.)?nexiumgeneric\.dive\.to
+https?:\/\/([^\/]*\.)?nexxx-com-r138wgeob5\.blogspot\.com
+https?:\/\/([^\/]*\.)?nexxx-kc113s775\.blogspot\.com
+https?:\/\/([^\/]*\.)?nfbwx\.szm\.sk
+https?:\/\/([^\/]*\.)?nffnj\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?nfl-cheerleader-outfit\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?nfme8\.szm\.sk
+https?:\/\/([^\/]*\.)?nfpg4\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?nfyxtime\.com
+https?:\/\/([^\/]*\.)?nggleb0\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?nginju3\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?nhqkyun\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?nibko\.info
+https?:\/\/([^\/]*\.)?nice-asian-ass-and-sex\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?nice-boob-picture\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?niche-porn-sites\.org
+https?:\/\/([^\/]*\.)?nickdarula\.com
+https?:\/\/([^\/]*\.)?nicwan\.com
+https?:\/\/([^\/]*\.)?nidarim\.com
+https?:\/\/([^\/]*\.)?niebn\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?nifedipine-solubility\.tlg\.pl
+https?:\/\/([^\/]*\.)?nifjv\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?niharpe\.dl\.pl
+https?:\/\/([^\/]*\.)?nihosi\.com
+https?:\/\/([^\/]*\.)?nika-ru\.blogspot\.com
+https?:\/\/([^\/]*\.)?nikkie-cole\.blogspot\.com
+https?:\/\/([^\/]*\.)?nimast\.com
+https?:\/\/([^\/]*\.)?nimit-zood\.ibelgique\.com
+https?:\/\/([^\/]*\.)?ninenailteen\.blogspot\.com
+https?:\/\/([^\/]*\.)?ninjasidestep\.com
+https?:\/\/([^\/]*\.)?ninostarto\.blogspot\.com
+https?:\/\/([^\/]*\.)?ninuni\.com
+https?:\/\/([^\/]*\.)?nipples-puffy-teenage\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?nipverify\.icspace\.net
+https?:\/\/([^\/]*\.)?nissan-240sx\.newmail\.ru
+https?:\/\/([^\/]*\.)?nissan-dealer\.newmail\.ru
+https?:\/\/([^\/]*\.)?nissan-frontier\.nm\.ru
+https?:\/\/([^\/]*\.)?nissan-motor\.nm\.ru
+https?:\/\/([^\/]*\.)?nissan-murano\.newmail\.ru
+https?:\/\/([^\/]*\.)?nissan-part\.nightmail\.ru
+https?:\/\/([^\/]*\.)?nissan-pathfinder\.hotmail\.ru
+https?:\/\/([^\/]*\.)?nissan-sentra\.hotmail\.ru
+https?:\/\/([^\/]*\.)?nissan-titan\.hotmail\.ru
+https?:\/\/([^\/]*\.)?nissan-truck\.hotmail\.ru
+https?:\/\/([^\/]*\.)?nissan-xterra\.hotmail\.ru
+https?:\/\/([^\/]*\.)?nissan_240sx\.chat\.ru
+https?:\/\/([^\/]*\.)?nissan_dealer\.chat\.ru
+https?:\/\/([^\/]*\.)?nissan_frontier\.chat\.ru
+https?:\/\/([^\/]*\.)?nissan_motor\.chat\.ru
+https?:\/\/([^\/]*\.)?nissan_murano1\.chat\.ru
+https?:\/\/([^\/]*\.)?nissan_part\.chat\.ru
+https?:\/\/([^\/]*\.)?nissan_pathfind\.chat\.ru
+https?:\/\/([^\/]*\.)?nissan_sentra\.chat\.ru
+https?:\/\/([^\/]*\.)?nissan_titan\.chat\.ru
+https?:\/\/([^\/]*\.)?nissan_truck\.chat\.ru
+https?:\/\/([^\/]*\.)?nissan_xterra\.chat\.ru
+https?:\/\/([^\/]*\.)?nixve\.blogspot\.com
+https?:\/\/([^\/]*\.)?njfc\.nease\.net
+https?:\/\/([^\/]*\.)?njhk\.jiuwu\.com
+https?:\/\/([^\/]*\.)?njhk\.yushantang\.com
+https?:\/\/([^\/]*\.)?njuta78\.125mb\.com
+https?:\/\/([^\/]*\.)?njzthvq\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?nkkqq\.szm\.sk
+https?:\/\/([^\/]*\.)?nkxow\.szm\.sk
+https?:\/\/([^\/]*\.)?nkzzm\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?nlexc\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?nmagiietending\.blogspot\.com
+https?:\/\/([^\/]*\.)?nmwj5\.szm\.sk
+https?:\/\/([^\/]*\.)?nnline\.info
+https?:\/\/([^\/]*\.)?no-deposit-casino-bonus\.any\.pl
+https?:\/\/([^\/]*\.)?no-faxing-payday--loan\.blogspot\.com
+https?:\/\/([^\/]*\.)?no-free-sex-video-download\.blogspot\.com
+https?:\/\/([^\/]*\.)?no1babes-com-juquj\.blogspot\.com
+https?:\/\/([^\/]*\.)?noalzel\.blogcu\.com
+https?:\/\/([^\/]*\.)?nobocli\.bbfr\.net
+https?:\/\/([^\/]*\.)?nobullhardcore-com-i7mpf5i83t\.blogspot\.com
+https?:\/\/([^\/]*\.)?nodb0\.szm\.sk
+https?:\/\/([^\/]*\.)?noelchi\.td\.pl
+https?:\/\/([^\/]*\.)?noeldar\.td\.pl
+https?:\/\/([^\/]*\.)?nofatonline\.com
+https?:\/\/([^\/]*\.)?nolamon\.naturalforum\.net
+https?:\/\/([^\/]*\.)?noletoolo\.dl\.pl
+https?:\/\/([^\/]*\.)?nomote4\.blogspot\.com
+https?:\/\/([^\/]*\.)?nopasrol\.myrealboard\.com
+https?:\/\/([^\/]*\.)?nord9maedchen73\.blogspot\.com
+https?:\/\/([^\/]*\.)?nordette\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?norflex100mg\.sblog\.cz
+https?:\/\/([^\/]*\.)?normanburke\.blogspot\.com
+https?:\/\/([^\/]*\.)?noro-alanis\.blogspot\.com
+https?:\/\/([^\/]*\.)?northcarolinamortgage-x\.com
+https?:\/\/([^\/]*\.)?northdakotamortgage-x\.com
+https?:\/\/([^\/]*\.)?norvasc\.coz\.in
+https?:\/\/([^\/]*\.)?norwichwriters\.org
+https?:\/\/([^\/]*\.)?noscudom\.forumzen\.com
+https?:\/\/([^\/]*\.)?noseypets\.com
+https?:\/\/([^\/]*\.)?nostawnevets53\.blogspot\.com
+https?:\/\/([^\/]*\.)?not-another-teen-movie-ddw5x\.blogspot\.com
+https?:\/\/([^\/]*\.)?notelymphatic\.org
+https?:\/\/([^\/]*\.)?notereport\.info
+https?:\/\/([^\/]*\.)?notrocli\.zj\.pl
+https?:\/\/([^\/]*\.)?novanasa\.php5\.cz
+https?:\/\/([^\/]*\.)?novar\.darkbb\.com
+https?:\/\/([^\/]*\.)?noviac\.jc\.pl
+https?:\/\/([^\/]*\.)?nox-teeniefiles-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?npchwp9\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?nqfahsc\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?nqkt4\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?nqllo\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?nqlp7\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?nqod6\.szm\.sk
+https?:\/\/([^\/]*\.)?nqquc\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?nqyz6\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?nsstc\.uah\.edu
+https?:\/\/([^\/]*\.)?nsxslk5\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?nthfind\.com
+https?:\/\/([^\/]*\.)?nu-alicia\.blogspot\.com
+https?:\/\/([^\/]*\.)?nucs2\.szm\.sk
+https?:\/\/([^\/]*\.)?nuddxy-free-video\.blogspot\.com
+https?:\/\/([^\/]*\.)?nude-ass-video\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?nude-lingerie-model-photo\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?nude-little-ass\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?nude-teacher\.com
+https?:\/\/([^\/]*\.)?nudecelebritypictures-c6ob080\.blogspot\.com
+https?:\/\/([^\/]*\.)?nudecelebritypictures-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?nudecelebritypictures-nu-hqb65kdn\.blogspot\.com
+https?:\/\/([^\/]*\.)?nudestarz-com-xurig\.blogspot\.com
+https?:\/\/([^\/]*\.)?nudistlog-com-oygsrji75\.blogspot\.com
+https?:\/\/([^\/]*\.)?nugo-aerobics\.blogspot\.com
+https?:\/\/([^\/]*\.)?nuje9\.szm\.sk
+https?:\/\/([^\/]*\.)?numbness-in-right-leg\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?numimb\.com
+https?:\/\/([^\/]*\.)?numr2\.szm\.sk
+https?:\/\/([^\/]*\.)?nunikal\.stabilt\.se
+https?:\/\/([^\/]*\.)?nuqfz\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?nurglesnymphs-com-nuxow\.blogspot\.com
+https?:\/\/([^\/]*\.)?nurs-employment\.boom\.ru
+https?:\/\/([^\/]*\.)?nurs2employment\.chat\.ru
+https?:\/\/([^\/]*\.)?nurse-fucking-video\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?nursi2-education\.boom\.ru
+https?:\/\/([^\/]*\.)?nursin-education\.boom\.ru
+https?:\/\/([^\/]*\.)?nursin2education\.chat\.ru
+https?:\/\/([^\/]*\.)?nursing-career\.boom\.ru
+https?:\/\/([^\/]*\.)?nursing-college\.boom\.ru
+https?:\/\/([^\/]*\.)?nursing-degree\.boom\.ru
+https?:\/\/([^\/]*\.)?nursing-degree\.fromru\.com
+https?:\/\/([^\/]*\.)?nursing-degree\.pochta\.ru
+https?:\/\/([^\/]*\.)?nursing-home\.boom\.ru
+https?:\/\/([^\/]*\.)?nursing-home\.land\.ru
+https?:\/\/([^\/]*\.)?nursing-home\.pochta\.ru
+https?:\/\/([^\/]*\.)?nursing-job\.boom\.ru
+https?:\/\/([^\/]*\.)?nursing-job\.land\.ru
+https?:\/\/([^\/]*\.)?nursing-job\.pochta\.ru
+https?:\/\/([^\/]*\.)?nursing-school\.fromru\.com
+https?:\/\/([^\/]*\.)?nursing-school\.pochta\.ru
+https?:\/\/([^\/]*\.)?nursing-scrubs\.boom\.ru
+https?:\/\/([^\/]*\.)?nursing-uniform\.boom\.ru
+https?:\/\/([^\/]*\.)?nursing1degree\.chat\.ru
+https?:\/\/([^\/]*\.)?nursing2-school\.boom\.ru
+https?:\/\/([^\/]*\.)?nursing2college\.chat\.ru
+https?:\/\/([^\/]*\.)?nursing2school\.chat\.ru
+https?:\/\/([^\/]*\.)?nursing2scrubs\.chat\.ru
+https?:\/\/([^\/]*\.)?nursing4career\.chat\.ru
+https?:\/\/([^\/]*\.)?nursing4degree\.chat\.ru
+https?:\/\/([^\/]*\.)?nursing4job\.chat\.ru
+https?:\/\/([^\/]*\.)?nursingeducation\.chat\.ru
+https?:\/\/([^\/]*\.)?nutramigen-lipil\.leg4is\.be
+https?:\/\/([^\/]*\.)?nvdwc\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?nwxnv\.szm\.sk
+https?:\/\/([^\/]*\.)?nxbbyhc\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?nxnmwlh\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?nxsq0\.szm\.sk
+https?:\/\/([^\/]*\.)?o-medic\.tripod\.com
+https?:\/\/([^\/]*\.)?o8\.aus\.cc
+https?:\/\/([^\/]*\.)?oa18\.cc
+https?:\/\/([^\/]*\.)?oa2010\.com
+https?:\/\/([^\/]*\.)?oalink\.cn
+https?:\/\/([^\/]*\.)?obesity-check\.com
+https?:\/\/([^\/]*\.)?obosra\.com
+https?:\/\/([^\/]*\.)?obrazok\.dtdns\.net
+https?:\/\/([^\/]*\.)?obsque\.cn
+https?:\/\/([^\/]*\.)?ocapk\.szm\.sk
+https?:\/\/([^\/]*\.)?oceshdes\.forumzen\.com
+https?:\/\/([^\/]*\.)?ockulpas\.forumzen\.com
+https?:\/\/([^\/]*\.)?ocleelia\.forumzen\.com
+https?:\/\/([^\/]*\.)?ocscrtro\.forumzen\.com
+https?:\/\/([^\/]*\.)?oczt4\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?odfxci8\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?odmi1\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?odqw4\.szm\.sk
+https?:\/\/([^\/]*\.)?oechnxln\.tripod\.com
+https?:\/\/([^\/]*\.)?oecx6\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?oeqls\.szm\.sk
+https?:\/\/([^\/]*\.)?offerta-volo-madrid\.19mb\.info
+https?:\/\/([^\/]*\.)?officialkes\.com
+https?:\/\/([^\/]*\.)?ogooch\.ifrance\.com
+https?:\/\/([^\/]*\.)?ogzx4\.szm\.sk
+https?:\/\/([^\/]*\.)?ohgood-com-dv8l\.blogspot\.com
+https?:\/\/([^\/]*\.)?ohgood-com-isxvi72\.blogspot\.com
+https?:\/\/([^\/]*\.)?ohgood-com-rv0\.blogspot\.com
+https?:\/\/([^\/]*\.)?ohiomortgage-x\.com
+https?:\/\/([^\/]*\.)?ohmybaby\.net
+https?:\/\/([^\/]*\.)?oilpaintingkingdom\.com
+https?:\/\/([^\/]*\.)?oily-skin\.newmail\.ru
+https?:\/\/([^\/]*\.)?oily_skin\.chat\.ru
+https?:\/\/([^\/]*\.)?oip\.org\.ua
+https?:\/\/([^\/]*\.)?oirwt\.szm\.sk
+https?:\/\/([^\/]*\.)?ojdo0\.szm\.sk
+https?:\/\/([^\/]*\.)?ojdx7\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?okayhotels\.com
+https?:\/\/([^\/]*\.)?okcompany\.org
+https?:\/\/([^\/]*\.)?oklahomamortgage-x\.com
+https?:\/\/([^\/]*\.)?okrentcar\.org
+https?:\/\/([^\/]*\.)?old-lady-fuck\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?old-lady-suck-dick\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?old69-com-mdt71k\.blogspot\.com
+https?:\/\/([^\/]*\.)?old69-k40bqc\.blogspot\.com
+https?:\/\/([^\/]*\.)?older-mature-tgp\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?oldon\.info
+https?:\/\/([^\/]*\.)?oldp9\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?oldreboc\.forumzen\.com
+https?:\/\/([^\/]*\.)?olijanko\.republika\.pl
+https?:\/\/([^\/]*\.)?olml2\.szm\.sk
+https?:\/\/([^\/]*\.)?olnnt\.szm\.sk
+https?:\/\/([^\/]*\.)?olocnamon\.cultureforum\.net
+https?:\/\/([^\/]*\.)?olocobo\.goodforum\.net
+https?:\/\/([^\/]*\.)?olocobo\.grafbb\.com
+https?:\/\/([^\/]*\.)?olodarelt\.heavenforum\.com
+https?:\/\/([^\/]*\.)?olodarelt\.highforum\.net
+https?:\/\/([^\/]*\.)?olodronric\.su\.pl
+https?:\/\/([^\/]*\.)?olodronro\.blogcu\.com
+https?:\/\/([^\/]*\.)?oloolovi\.ephpbb\.com
+https?:\/\/([^\/]*\.)?oloorrac\.blogcu\.com
+https?:\/\/([^\/]*\.)?olorelrel\.blogcu\.com
+https?:\/\/([^\/]*\.)?olorodom\.blogcu\.com
+https?:\/\/([^\/]*\.)?oltcha\.blogspot\.com
+https?:\/\/([^\/]*\.)?olyelzet\.forumzen\.com
+https?:\/\/([^\/]*\.)?omchades\.forumzen\.com
+https?:\/\/([^\/]*\.)?omega\.spb\.ru
+https?:\/\/([^\/]*\.)?omxmlvf\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?on-poteen-1-2\.blogspot\.com
+https?:\/\/([^\/]*\.)?onac2\.szm\.sk
+https?:\/\/([^\/]*\.)?one2you\.biz
+https?:\/\/([^\/]*\.)?one2you\.info
+https?:\/\/([^\/]*\.)?onfew\.szm\.sk
+https?:\/\/([^\/]*\.)?onlin-nurs-degre\.boom\.ru
+https?:\/\/([^\/]*\.)?online-blackjack-site\.com
+https?:\/\/([^\/]*\.)?online-casino-l\.blogspot\.com
+https?:\/\/([^\/]*\.)?online-casino-wiki\.com
+https?:\/\/([^\/]*\.)?online-casinos-city\.com
+https?:\/\/([^\/]*\.)?online-casinos-discovered\.com
+https?:\/\/([^\/]*\.)?online-degree-4you\.com
+https?:\/\/([^\/]*\.)?online-gambling-b\.blogspot\.com
+https?:\/\/([^\/]*\.)?online-games24x7\.com
+https?:\/\/([^\/]*\.)?online-medications24x7\.com
+https?:\/\/([^\/]*\.)?online-pharm\.zmail\.ru
+https?:\/\/([^\/]*\.)?online-pharmacy-24x7\.net
+https?:\/\/([^\/]*\.)?online-pharmacy-4u\.net
+https?:\/\/([^\/]*\.)?online-poker-game\.blogspot\.com
+https?:\/\/([^\/]*\.)?online-poker-online-poker\.net
+https?:\/\/([^\/]*\.)?online-poker\.black-poker\.com
+https?:\/\/([^\/]*\.)?online-poker\.dd\.vg
+https?:\/\/([^\/]*\.)?online-prozac\.boom\.ru
+https?:\/\/([^\/]*\.)?online-shop-24x7\.com
+https?:\/\/([^\/]*\.)?online-tramadol\.1\.forogratis\.es
+https?:\/\/([^\/]*\.)?online1-degree\.boom\.ru
+https?:\/\/([^\/]*\.)?online1course\.chat\.ru
+https?:\/\/([^\/]*\.)?online1degree\.chat\.ru
+https?:\/\/([^\/]*\.)?online3course\.chat\.ru
+https?:\/\/([^\/]*\.)?online4nursing\.chat\.ru
+https?:\/\/([^\/]*\.)?onlineglass\.siteburg\.com
+https?:\/\/([^\/]*\.)?onlinepharmacy-4u\.net
+https?:\/\/([^\/]*\.)?onlinepharmacy2004\.net
+https?:\/\/([^\/]*\.)?onlinesexcity\.info
+https?:\/\/([^\/]*\.)?only-ringtone\.com
+https?:\/\/([^\/]*\.)?only4game\.com
+https?:\/\/([^\/]*\.)?onlycuties-com\.jalovica\.dtdns\.net
+https?:\/\/([^\/]*\.)?onlymovies-com-e1tez\.blogspot\.com
+https?:\/\/([^\/]*\.)?onlymovies-com-eczm1w\.blogspot\.com
+https?:\/\/([^\/]*\.)?onlyteenstgp-com-rmn\.blogspot\.com
+https?:\/\/([^\/]*\.)?onlyteenstgp-com-rrcamwws3\.blogspot\.com
+https?:\/\/([^\/]*\.)?onlyteenstgp-we\.blogspot\.com
+https?:\/\/([^\/]*\.)?onmycrew\.blogspot\.com
+https?:\/\/([^\/]*\.)?onrueetd\.forumzen\.com
+https?:\/\/([^\/]*\.)?oogqj\.szm\.sk
+https?:\/\/([^\/]*\.)?oohsexy-com-hob8e5y8r\.blogspot\.com
+https?:\/\/([^\/]*\.)?oohsexy-com-hpemrnff\.blogspot\.com
+https?:\/\/([^\/]*\.)?oohsexy\.com
+https?:\/\/([^\/]*\.)?oohsexy000\.blogspot\.com
+https?:\/\/([^\/]*\.)?ooline\.info
+https?:\/\/([^\/]*\.)?oolive\.info
+https?:\/\/([^\/]*\.)?oonk1\.szm\.sk
+https?:\/\/([^\/]*\.)?ooooi\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ootop\.info
+https?:\/\/([^\/]*\.)?ooyy2\.szm\.sk
+https?:\/\/([^\/]*\.)?opastr\.com
+https?:\/\/([^\/]*\.)?oping\.info
+https?:\/\/([^\/]*\.)?opiytr\.com
+https?:\/\/([^\/]*\.)?opkr1\.szm\.sk
+https?:\/\/([^\/]*\.)?optbblx\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?optfzj5\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?opyfsen\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?oqaknky\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?oqfwt\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?or-drondron\.xa\.pl
+https?:\/\/([^\/]*\.)?orabc\.info
+https?:\/\/([^\/]*\.)?oracelta\.lolforum\.net
+https?:\/\/([^\/]*\.)?orasta\.com
+https?:\/\/([^\/]*\.)?orbasolo\.dl\.pl
+https?:\/\/([^\/]*\.)?orcnaac\.discutfree\.com
+https?:\/\/([^\/]*\.)?orcoc\.lolbb\.com
+https?:\/\/([^\/]*\.)?orcore\.graphforum\.com
+https?:\/\/([^\/]*\.)?orddercelexa\.ovp\.pl
+https?:\/\/([^\/]*\.)?orddercialisonline\.ovp\.pl
+https?:\/\/([^\/]*\.)?ordderlevitra\.ovp\.pl
+https?:\/\/([^\/]*\.)?orddertramadolonline\.ovp\.pl
+https?:\/\/([^\/]*\.)?orddervalium\.ovp\.pl
+https?:\/\/([^\/]*\.)?orddervaliumonline\.ovp\.pl
+https?:\/\/([^\/]*\.)?ordderviagra\.ovp\.pl
+https?:\/\/([^\/]*\.)?ordderviagraonline\.ovp\.pl
+https?:\/\/([^\/]*\.)?ordderzithromax\.ovp\.pl
+https?:\/\/([^\/]*\.)?ordeertramadol\.ovp\.pl
+https?:\/\/([^\/]*\.)?order-blue-phentermine\.coz\.in
+https?:\/\/([^\/]*\.)?order-ritalin-online\.contact\.cc
+https?:\/\/([^\/]*\.)?order-viagra\.health-livening\.com
+https?:\/\/([^\/]*\.)?orderacyclovirr\.ovp\.pl
+https?:\/\/([^\/]*\.)?orderadipexx\.ovp\.pl
+https?:\/\/([^\/]*\.)?orderalbenzaa\.ovp\.pl
+https?:\/\/([^\/]*\.)?orderalprazolamm\.ovp\.pl
+https?:\/\/([^\/]*\.)?orderambienn\.ovp\.pl
+https?:\/\/([^\/]*\.)?orderamoxicillinn\.ovp\.pl
+https?:\/\/([^\/]*\.)?orderativann\.ovp\.pl
+https?:\/\/([^\/]*\.)?orderccialiss\.ovp\.pl
+https?:\/\/([^\/]*\.)?ordercelexaa\.ovp\.pl
+https?:\/\/([^\/]*\.)?orderciaalisonline\.ovp\.pl
+https?:\/\/([^\/]*\.)?ordercialisonline\.jubiiblog\.de
+https?:\/\/([^\/]*\.)?ordercialiss\.ovp\.pl
+https?:\/\/([^\/]*\.)?ordercializ\.blogcu\.com
+https?:\/\/([^\/]*\.)?ordercializ\.spotbb\.com
+https?:\/\/([^\/]*\.)?ordercymbaltaa\.ovp\.pl
+https?:\/\/([^\/]*\.)?orderhydrocodonee\.ovp\.pl
+https?:\/\/([^\/]*\.)?orderlevitraa\.ovp\.pl
+https?:\/\/([^\/]*\.)?orderllevitra\.ovp\.pl
+https?:\/\/([^\/]*\.)?ordermeridiaa\.ovp\.pl
+https?:\/\/([^\/]*\.)?orderphentermin\.phpbbx\.de
+https?:\/\/([^\/]*\.)?orderphenterminee\.ovp\.pl
+https?:\/\/([^\/]*\.)?orderpropeciaa\.ovp\.pl
+https?:\/\/([^\/]*\.)?orderrcialisonline\.ovp\.pl
+https?:\/\/([^\/]*\.)?orderrlevitra\.ovp\.pl
+https?:\/\/([^\/]*\.)?orderrtramadoll\.ovp\.pl
+https?:\/\/([^\/]*\.)?orderrtramadolonline\.ovp\.pl
+https?:\/\/([^\/]*\.)?orderrvalium\.ovp\.pl
+https?:\/\/([^\/]*\.)?orderrviagraa\.ovp\.pl
+https?:\/\/([^\/]*\.)?orderrviagraonline\.ovp\.pl
+https?:\/\/([^\/]*\.)?ordersoma\.blogsome\.com
+https?:\/\/([^\/]*\.)?ordersomaa\.ovp\.pl
+https?:\/\/([^\/]*\.)?orderssoma\.ovp\.pl
+https?:\/\/([^\/]*\.)?ordertramadoll\.ovp\.pl
+https?:\/\/([^\/]*\.)?ordertramadollonline\.ovp\.pl
+https?:\/\/([^\/]*\.)?orderultramm\.ovp\.pl
+https?:\/\/([^\/]*\.)?ordervaliumm\.ovp\.pl
+https?:\/\/([^\/]*\.)?orderviagraa\.ovp\.pl
+https?:\/\/([^\/]*\.)?orderviagraaonline\.ovp\.pl
+https?:\/\/([^\/]*\.)?ordervvalium\.ovp\.pl
+https?:\/\/([^\/]*\.)?orderxanaxx\.ovp\.pl
+https?:\/\/([^\/]*\.)?orderxenicalonline\.ir\.pl
+https?:\/\/([^\/]*\.)?orecchino\.7god\.info
+https?:\/\/([^\/]*\.)?orecchino\.freespase\.info
+https?:\/\/([^\/]*\.)?oregonmortgage-x\.com
+https?:\/\/([^\/]*\.)?orgetacel\.discutforum\.com
+https?:\/\/([^\/]*\.)?orgeter\.cultureforum\.net
+https?:\/\/([^\/]*\.)?orgs\.indianatech\.edu
+https?:\/\/([^\/]*\.)?orletovar\.zikforum\.com
+https?:\/\/([^\/]*\.)?ormme\.com
+https?:\/\/([^\/]*\.)?ornildom\.forumzen\.com
+https?:\/\/([^\/]*\.)?orrdercialisonline\.ovp\.pl
+https?:\/\/([^\/]*\.)?orrdertramadolonline\.ovp\.pl
+https?:\/\/([^\/]*\.)?orsaverc\.forumzen\.com
+https?:\/\/([^\/]*\.)?ortar\.com
+https?:\/\/([^\/]*\.)?ortho-tri-cyclen\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?ortrocrol\.heavenforum\.com
+https?:\/\/([^\/]*\.)?ortrocrol\.highforum\.net
+https?:\/\/([^\/]*\.)?orvict\.ephpbb\.com
+https?:\/\/([^\/]*\.)?oryc0\.szm\.sk
+https?:\/\/([^\/]*\.)?orzeldron\.lightbb\.com
+https?:\/\/([^\/]*\.)?osakabondage\.info
+https?:\/\/([^\/]*\.)?osfi5\.szm\.sk
+https?:\/\/([^\/]*\.)?osthtp1\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?otqsc\.szm\.sk
+https?:\/\/([^\/]*\.)?oudomdar\.dl\.pl
+https?:\/\/([^\/]*\.)?oudomolo\.lolbb\.com
+https?:\/\/([^\/]*\.)?oudronc4t\.blogcu\.com
+https?:\/\/([^\/]*\.)?ouerco\.lightbb\.com
+https?:\/\/([^\/]*\.)?oufienoc\.forumzen\.com
+https?:\/\/([^\/]*\.)?ouglova\.blogspot\.com
+https?:\/\/([^\/]*\.)?ouhymtro\.forumzen\.com
+https?:\/\/([^\/]*\.)?ouor\.lightbb\.com
+https?:\/\/([^\/]*\.)?ouorrac\.bbfr\.net
+https?:\/\/([^\/]*\.)?ouracdron\.discutfree\.com
+https?:\/\/([^\/]*\.)?ourolal\.discutfree\.com
+https?:\/\/([^\/]*\.)?outrocvar\.zj\.pl
+https?:\/\/([^\/]*\.)?outward-dev\.com
+https?:\/\/([^\/]*\.)?ouvier\.zj\.pl
+https?:\/\/([^\/]*\.)?overseas-adventure-travel\.globaltr\.info
+https?:\/\/([^\/]*\.)?ovparnel\.dl\.pl
+https?:\/\/([^\/]*\.)?ovpn2\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ovrie\.szm\.sk
+https?:\/\/([^\/]*\.)?ovu\.edu
+https?:\/\/([^\/]*\.)?owll1\.szm\.sk
+https?:\/\/([^\/]*\.)?oxpass-com-g5\.blogspot\.com
+https?:\/\/([^\/]*\.)?oxpass-com-gt71a0\.blogspot\.com
+https?:\/\/([^\/]*\.)?oxpass-com-hurol\.blogspot\.com
+https?:\/\/([^\/]*\.)?oyspa\.szm\.sk
+https?:\/\/([^\/]*\.)?oz6soqa\.nokedem\.com
+https?:\/\/([^\/]*\.)?ozbk9\.szm\.sk
+https?:\/\/([^\/]*\.)?ozgzm\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?ozxz5\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?ozyexk2\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?p-free-sex-video-download\.blogspot\.com
+https?:\/\/([^\/]*\.)?p-n-lesbian-sex-video-d\.blogspot\.com
+https?:\/\/([^\/]*\.)?p-teens-b00\.blogspot\.com
+https?:\/\/([^\/]*\.)?p-vi\.com
+https?:\/\/([^\/]*\.)?p1v\.org
+https?:\/\/([^\/]*\.)?p2l\.info
+https?:\/\/([^\/]*\.)?pa19\.com
+https?:\/\/([^\/]*\.)?pacfic-poker\.mutogen\.be
+https?:\/\/([^\/]*\.)?pacficpoker\.xwiki\.com
+https?:\/\/([^\/]*\.)?pacific-poker\.black-poker\.com
+https?:\/\/([^\/]*\.)?paddedapex\.org
+https?:\/\/([^\/]*\.)?paeecpx\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?pafyawv\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?pain-medications\.us
+https?:\/\/([^\/]*\.)?pain-relief\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?pain-relief\.2x4\.ru
+https?:\/\/([^\/]*\.)?pain-relief\.fromru\.com
+https?:\/\/([^\/]*\.)?pain-relief\.newmail\.ru
+https?:\/\/([^\/]*\.)?pain_relief\.chat\.ru
+https?:\/\/([^\/]*\.)?paisi\.com
+https?:\/\/([^\/]*\.)?paisidesign\.com
+https?:\/\/([^\/]*\.)?pam\.freehostia\.com
+https?:\/\/([^\/]*\.)?pamlicohouse\.com
+https?:\/\/([^\/]*\.)?panama2cruise\.boom\.ru
+https?:\/\/([^\/]*\.)?panama2cruise\.chat\.ru
+https?:\/\/([^\/]*\.)?panamacruise1\.boom\.ru
+https?:\/\/([^\/]*\.)?panamacruise1\.chat\.ru
+https?:\/\/([^\/]*\.)?pandamovies-com-g6lz762n76\.blogspot\.com
+https?:\/\/([^\/]*\.)?pandamovies-com-tq32\.blogspot\.com
+https?:\/\/([^\/]*\.)?pandamovies-o4me7xqq0f\.blogspot\.com
+https?:\/\/([^\/]*\.)?panshan888\.com
+https?:\/\/([^\/]*\.)?panss\.org
+https?:\/\/([^\/]*\.)?panthersjaguar\.info
+https?:\/\/([^\/]*\.)?panty-ass-com-w1\.blogspot\.com
+https?:\/\/([^\/]*\.)?panty-ass-com-w8\.blogspot\.com
+https?:\/\/([^\/]*\.)?pantybuns-com-a6ejgve\.blogspot\.com
+https?:\/\/([^\/]*\.)?pantybuns-com-axeoa77ze5\.blogspot\.com
+https?:\/\/([^\/]*\.)?pantybuns-com-tl0\.blogspot\.com
+https?:\/\/([^\/]*\.)?pantyhose-face\.pupava\.dtdns\.net
+https?:\/\/([^\/]*\.)?pantyhose-net\.com
+https?:\/\/([^\/]*\.)?paola-e-chiara\.host24h\.info
+https?:\/\/([^\/]*\.)?paper--shredder\.boom\.ru
+https?:\/\/([^\/]*\.)?paper-s\.boom\.ru
+https?:\/\/([^\/]*\.)?paper1-shredder\.boom\.ru
+https?:\/\/([^\/]*\.)?paper1shredder\.chat\.ru
+https?:\/\/([^\/]*\.)?paper5shredder\.chat\.ru
+https?:\/\/([^\/]*\.)?paperbox\.freephpwebhosting\.net
+https?:\/\/([^\/]*\.)?paperroom\.blogspot\.com
+https?:\/\/([^\/]*\.)?papr-shredder\.boom\.ru
+https?:\/\/([^\/]*\.)?paradisenudes-com-o71a\.blogspot\.com
+https?:\/\/([^\/]*\.)?paradisenudes-com-os\.blogspot\.com
+https?:\/\/([^\/]*\.)?paralegal1degree\.chat\.ru
+https?:\/\/([^\/]*\.)?parench\.ifrance\.com
+https?:\/\/([^\/]*\.)?parigi-appartamento-vacanza\.zoom10x\.info
+https?:\/\/([^\/]*\.)?paris-hilton-huxik\.blogspot\.com
+https?:\/\/([^\/]*\.)?paris-hilton-lukuv\.blogspot\.com
+https?:\/\/([^\/]*\.)?paris-hilton-nude-tape\.blogspot\.com
+https?:\/\/([^\/]*\.)?paris-hilton-pijid\.blogspot\.com
+https?:\/\/([^\/]*\.)?paris-hilton-pojic\.blogspot\.com
+https?:\/\/([^\/]*\.)?paris-hilton-porn\.0800-porn\.com
+https?:\/\/([^\/]*\.)?paris-hilton-sex-tape-xxx\.blogspot\.com
+https?:\/\/([^\/]*\.)?paris-hilton-sex-video-gf5m5\.blogspot\.com
+https?:\/\/([^\/]*\.)?paris-hilton-sex-video-sez\.blogspot\.com
+https?:\/\/([^\/]*\.)?paris-hilton-socog\.blogspot\.com
+https?:\/\/([^\/]*\.)?paris-hilton-xidig\.blogspot\.com
+https?:\/\/([^\/]*\.)?paris\.php5\.cz
+https?:\/\/([^\/]*\.)?parishilton-paris-hilton\.blogspot\.com
+https?:\/\/([^\/]*\.)?parishilton-paris\.blogspot\.com
+https?:\/\/([^\/]*\.)?parnvf8\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?partei-deutsches-reich\.de
+https?:\/\/([^\/]*\.)?parties-supply\.jeepsyc\.be
+https?:\/\/([^\/]*\.)?party-poker\.black-poker\.com
+https?:\/\/([^\/]*\.)?pasacvi\.zikforum\.com
+https?:\/\/([^\/]*\.)?paschiel\.blogcu\.com
+https?:\/\/([^\/]*\.)?pasdronli\.winnerforum\.net
+https?:\/\/([^\/]*\.)?pashkak0marov\.blogspot\.com
+https?:\/\/([^\/]*\.)?paslibo\.myrealboard\.com
+https?:\/\/([^\/]*\.)?pasoloro\.graphforum\.com
+https?:\/\/([^\/]*\.)?pasoloro\.highforum\.net
+https?:\/\/([^\/]*\.)?pasracco\.blogcu\.com
+https?:\/\/([^\/]*\.)?pasrodron\.xa\.pl
+https?:\/\/([^\/]*\.)?passaf\.com
+https?:\/\/([^\/]*\.)?pastmagic\.blogspot\.com
+https?:\/\/([^\/]*\.)?pasviric\.td\.pl
+https?:\/\/([^\/]*\.)?patsytestis\.0moola\.com
+https?:\/\/([^\/]*\.)?pattywhack91\.ibelgique\.com
+https?:\/\/([^\/]*\.)?paulino\.greekboston\.com
+https?:\/\/([^\/]*\.)?paulino\.idilis\.ro
+https?:\/\/([^\/]*\.)?paxil-cr\.contact\.cc
+https?:\/\/([^\/]*\.)?paxil-without-prescription\.contact\.cc
+https?:\/\/([^\/]*\.)?paxil\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?paxil\.forospace\.com
+https?:\/\/([^\/]*\.)?paxilonline\.zoomshare\.com
+https?:\/\/([^\/]*\.)?payday-loan\.de\.com
+https?:\/\/([^\/]*\.)?payday-loans-4us\.com
+https?:\/\/([^\/]*\.)?payday-loans-ooo\.blogspot\.com
+https?:\/\/([^\/]*\.)?paydayloans-guide\.com
+https?:\/\/([^\/]*\.)?paydayloans-x\.com
+https?:\/\/([^\/]*\.)?pcb2002\.home4u\.china\.com
+https?:\/\/([^\/]*\.)?pcgzt\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?pdslnw6\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?peace-weasel\.blogspot\.com
+https?:\/\/([^\/]*\.)?peacedoorball\.blogspot\.com
+https?:\/\/([^\/]*\.)?pearlibuttons\.blogspot\.com
+https?:\/\/([^\/]*\.)?pebwgu0\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?pecilu-free-sex-video-clip\.blogspot\.com
+https?:\/\/([^\/]*\.)?pee-4a\.com
+https?:\/\/([^\/]*\.)?peetliel\.jconserv\.net
+https?:\/\/([^\/]*\.)?pefi-albert\.blogspot\.com
+https?:\/\/([^\/]*\.)?pelnp\.szm\.sk
+https?:\/\/([^\/]*\.)?pendant\.hostcroc\.com
+https?:\/\/([^\/]*\.)?pennsylvaniamortgage-x\.com
+https?:\/\/([^\/]*\.)?people\.msoe\.edu
+https?:\/\/([^\/]*\.)?percocet-without-prescription\.contact\.cc
+https?:\/\/([^\/]*\.)?percocet\.xwiki\.com
+https?:\/\/([^\/]*\.)?perfect-boob\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?permanentmagnet\.com
+https?:\/\/([^\/]*\.)?persiankitty-com-kcfsibt01d\.blogspot\.com
+https?:\/\/([^\/]*\.)?persiankitty-com-ksa6l1a\.blogspot\.com
+https?:\/\/([^\/]*\.)?personales\.ciudad\.com\.ar
+https?:\/\/([^\/]*\.)?personalserotic\.com
+https?:\/\/([^\/]*\.)?petite-mature-blonde\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?petite-teen-ass\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?petiteteenager-com-cm8ku8w\.blogspot\.com
+https?:\/\/([^\/]*\.)?petiteteenager-com-md6\.blogspot\.com
+https?:\/\/([^\/]*\.)?petiteteenager-com-mns4n5a4\.blogspot\.com
+https?:\/\/([^\/]*\.)?petiteteenager-g687rhasjq\.blogspot\.com
+https?:\/\/([^\/]*\.)?peuct\.szm\.sk
+https?:\/\/([^\/]*\.)?pfes7\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?pffl4\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?pgbnjja\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?pharm1\.info
+https?:\/\/([^\/]*\.)?pharmacies\.in\.ua
+https?:\/\/([^\/]*\.)?pharmacy-experts\.org
+https?:\/\/([^\/]*\.)?pharmacy-x\.ru\.ru
+https?:\/\/([^\/]*\.)?pharmacy\.sovuennir\.be
+https?:\/\/([^\/]*\.)?pharmacy\.t28\.net
+https?:\/\/([^\/]*\.)?pharmacy05\.com
+https?:\/\/([^\/]*\.)?pharmacybuy1\.angelcities\.com
+https?:\/\/([^\/]*\.)?pharmaduk\.xshorturl\.com
+https?:\/\/([^\/]*\.)?phendimetrazine\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?phendimetrazinenx\.u\.yuku\.com
+https?:\/\/([^\/]*\.)?phentermine--mine\.blogspot\.com
+https?:\/\/([^\/]*\.)?phentermine-911\.bee\.pl
+https?:\/\/([^\/]*\.)?phentermine-911\.coz\.in
+https?:\/\/([^\/]*\.)?phentermine-cc\.blogspot\.com
+https?:\/\/([^\/]*\.)?phentermine-choise\.ebloggy\.com
+https?:\/\/([^\/]*\.)?phentermine-forum\.tripod\.com
+https?:\/\/([^\/]*\.)?phentermine-gs\.eu\.tc
+https?:\/\/([^\/]*\.)?phentermine-gs\.net\.tc
+https?:\/\/([^\/]*\.)?phentermine-hcl\.org
+https?:\/\/([^\/]*\.)?phentermine-online\.cheapills\.info
+https?:\/\/([^\/]*\.)?phentermine-online\.presteert\.nl
+https?:\/\/([^\/]*\.)?phentermine-pharmacy\.fws1\.com
+https?:\/\/([^\/]*\.)?phentermine-support\.com
+https?:\/\/([^\/]*\.)?phentermine\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?phentermine\.acbox\.com
+https?:\/\/([^\/]*\.)?phentermine\.acbox\.net
+https?:\/\/([^\/]*\.)?phentermine\.arkadasi\.com
+https?:\/\/([^\/]*\.)?phentermine\.asistani\.com
+https?:\/\/([^\/]*\.)?phentermine\.bz
+https?:\/\/([^\/]*\.)?phentermine\.clubpage\.net
+https?:\/\/([^\/]*\.)?phentermine\.esguay\.com
+https?:\/\/([^\/]*\.)?phentermine\.flygande-apor\.com
+https?:\/\/([^\/]*\.)?phentermine\.goodpharm\.info
+https?:\/\/([^\/]*\.)?phentermine\.gotgeeks\.com
+https?:\/\/([^\/]*\.)?phentermine\.hallonsaft\.info
+https?:\/\/([^\/]*\.)?phentermine\.health-livening\.com
+https?:\/\/([^\/]*\.)?phentermine\.on-4\.com
+https?:\/\/([^\/]*\.)?phentermine\.ontspant\.nl
+https?:\/\/([^\/]*\.)?phentermine\.presteert\.nl
+https?:\/\/([^\/]*\.)?phentermine\.skocz\.net
+https?:\/\/([^\/]*\.)?phentermine\.su\.pl
+https?:\/\/([^\/]*\.)?phentermine\.tv
+https?:\/\/([^\/]*\.)?phentermine\.websiam\.net
+https?:\/\/([^\/]*\.)?phentermine2\.freewebsites\.com
+https?:\/\/([^\/]*\.)?phentermine7x\.forumup\.org
+https?:\/\/([^\/]*\.)?phenterminec\.phpbbx\.de
+https?:\/\/([^\/]*\.)?phentermineonline\.ds4a\.com
+https?:\/\/([^\/]*\.)?phentermineonline\.livelog\.com
+https?:\/\/([^\/]*\.)?phentermineq\.host-page\.com
+https?:\/\/([^\/]*\.)?phentermines\.int\.tf
+https?:\/\/([^\/]*\.)?phoenixbrngbrt\.blogspot\.com
+https?:\/\/([^\/]*\.)?phol8\.szm\.sk
+https?:\/\/([^\/]*\.)?phone-service\.newmail\.ru
+https?:\/\/([^\/]*\.)?phones-gsm\.haemati\.be
+https?:\/\/([^\/]*\.)?photo-of-girl-boob\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?photospacefree\.com
+https?:\/\/([^\/]*\.)?phots\.info
+https?:\/\/([^\/]*\.)?phpbbx\.de
+https?:\/\/([^\/]*\.)?phun-org-i08kd\.blogspot\.com
+https?:\/\/([^\/]*\.)?phun-org-ingg0\.blogspot\.com
+https?:\/\/([^\/]*\.)?pi-allyson\.blogspot\.com
+https?:\/\/([^\/]*\.)?pichunter-com-bkfwk\.blogspot\.com
+https?:\/\/([^\/]*\.)?pichunter-com-bzf\.blogspot\.com
+https?:\/\/([^\/]*\.)?pichunter-com-hmmcyoud8\.blogspot\.com
+https?:\/\/([^\/]*\.)?pichunter-com-kesip\.blogspot\.com
+https?:\/\/([^\/]*\.)?picpost-com-e3xqsc6a\.blogspot\.com
+https?:\/\/([^\/]*\.)?picpost-com-eu7refa3s5\.blogspot\.com
+https?:\/\/([^\/]*\.)?picture-cast-on-broken-leg\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?picture-of-gay-guys-fucking\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?picture-of-used-condom\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?picture\.8tt\.org
+https?:\/\/([^\/]*\.)?pictureheaven-com-ri7hn\.blogspot\.com
+https?:\/\/([^\/]*\.)?pictureheaven-com-rw\.blogspot\.com
+https?:\/\/([^\/]*\.)?pictures-free-org-wl0nj\.blogspot\.com
+https?:\/\/([^\/]*\.)?pictures-free-org-wmmkv2w\.blogspot\.com
+https?:\/\/([^\/]*\.)?piggy-soldier\.blogspot\.com
+https?:\/\/([^\/]*\.)?pigtime\.net\.ru
+https?:\/\/([^\/]*\.)?pigxxx-com-ctjj1\.blogspot\.com
+https?:\/\/([^\/]*\.)?pigxxx-com-ge1omxgp20\.blogspot\.com
+https?:\/\/([^\/]*\.)?pigxxx-com-geo8asd1i\.blogspot\.com
+https?:\/\/([^\/]*\.)?pigxxx-com-nevew\.blogspot\.com
+https?:\/\/([^\/]*\.)?pijjyh-free-porn\.blogspot\.com
+https?:\/\/([^\/]*\.)?pillalli\.info
+https?:\/\/([^\/]*\.)?pillnext\.com
+https?:\/\/([^\/]*\.)?pillow\.2x4\.ru
+https?:\/\/([^\/]*\.)?pills-catalog\.com
+https?:\/\/([^\/]*\.)?pills-pharmacy\.us
+https?:\/\/([^\/]*\.)?pills\.007webpro\.com
+https?:\/\/([^\/]*\.)?pills\.siemprelisto\.net
+https?:\/\/([^\/]*\.)?pills1\.org
+https?:\/\/([^\/]*\.)?pillsz\.com
+https?:\/\/([^\/]*\.)?pimpmyblackteen-com-t6ijmwbu\.blogspot\.com
+https?:\/\/([^\/]*\.)?pimpmyblackteen-com-t7d432c\.blogspot\.com
+https?:\/\/([^\/]*\.)?pindosam\.com
+https?:\/\/([^\/]*\.)?pine\.hostonmars\.com
+https?:\/\/([^\/]*\.)?pinkpornstars-com-da3njbu\.blogspot\.com
+https?:\/\/([^\/]*\.)?pinkpornstars-com-dnjx\.blogspot\.com
+https?:\/\/([^\/]*\.)?pinkpornstars-com-drm\.blogspot\.com
+https?:\/\/([^\/]*\.)?pinkworld-com-c84agv\.blogspot\.com
+https?:\/\/([^\/]*\.)?pinkworld-com-ci8e6\.blogspot\.com
+https?:\/\/([^\/]*\.)?pinkworld-com-ge4k4kmsd\.blogspot\.com
+https?:\/\/([^\/]*\.)?pinkworld-com-kp7s8i5\.blogspot\.com
+https?:\/\/([^\/]*\.)?pino-daniele\.19mb\.info
+https?:\/\/([^\/]*\.)?pinoyteens\.net
+https?:\/\/([^\/]*\.)?piomchel\.jconserv\.net
+https?:\/\/([^\/]*\.)?pisces\.8tt\.org
+https?:\/\/([^\/]*\.)?pitch\.101freehost\.com
+https?:\/\/([^\/]*\.)?pizda4\.com
+https?:\/\/([^\/]*\.)?pizza-hut\.hotmail\.ru
+https?:\/\/([^\/]*\.)?pjim6\.szm\.sk
+https?:\/\/([^\/]*\.)?pjju3\.szm\.sk
+https?:\/\/([^\/]*\.)?pjmykz8\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?pjryskur-teensite\.blogspot\.com
+https?:\/\/([^\/]*\.)?pjuibhe\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?pkufl\.szm\.sk
+https?:\/\/([^\/]*\.)?place\.sex-jet\.net
+https?:\/\/([^\/]*\.)?planetaacura\.info
+https?:\/\/([^\/]*\.)?planetwatt\.republika\.pl
+https?:\/\/([^\/]*\.)?plastictec\.net
+https?:\/\/([^\/]*\.)?plavix\.coz\.in
+https?:\/\/([^\/]*\.)?plavixbuy\.gameday\.de
+https?:\/\/([^\/]*\.)?plavixbuycheap\.dive\.to
+https?:\/\/([^\/]*\.)?plavixcheap\.hey\.to
+https?:\/\/([^\/]*\.)?plavixcheapgeneric\.go\.to
+https?:\/\/([^\/]*\.)?plavixgeneric\.change\.to
+https?:\/\/([^\/]*\.)?play-777\.com
+https?:\/\/([^\/]*\.)?play-online-casino\.de\.com
+https?:\/\/([^\/]*\.)?play-online-poker\.newmail\.ru
+https?:\/\/([^\/]*\.)?play-station-2-boot-disk\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?playandwinit777\.net
+https?:\/\/([^\/]*\.)?pleasebangmywife-com-i8zdgo1\.blogspot\.com
+https?:\/\/([^\/]*\.)?pleasebangmywife-com-iq\.blogspot\.com
+https?:\/\/([^\/]*\.)?pleasebangmywife-com-koguq\.blogspot\.com
+https?:\/\/([^\/]*\.)?pleasure\.hostonmars\.com
+https?:\/\/([^\/]*\.)?ploob\.blox\.pl
+https?:\/\/([^\/]*\.)?plugkblow\.pornomagnat\.net
+https?:\/\/([^\/]*\.)?plumper69-com-on3664rg\.blogspot\.com
+https?:\/\/([^\/]*\.)?plumper69-com-os4\.blogspot\.com
+https?:\/\/([^\/]*\.)?plumper69-com-sokis\.blogspot\.com
+https?:\/\/([^\/]*\.)?plxn1\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?pmrd2\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?pmyk8\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?po-alora\.blogspot\.com
+https?:\/\/([^\/]*\.)?pobpa\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?pocmlaq\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?podnos\.stabilt\.se
+https?:\/\/([^\/]*\.)?poeller\.dl\.pl
+https?:\/\/([^\/]*\.)?pogeh\.szm\.sk
+https?:\/\/([^\/]*\.)?pohuym\.jo\.pl
+https?:\/\/([^\/]*\.)?pointyou\.info
+https?:\/\/([^\/]*\.)?poker-0\.com
+https?:\/\/([^\/]*\.)?poker-24x7\.com
+https?:\/\/([^\/]*\.)?poker-4all\.com
+https?:\/\/([^\/]*\.)?poker-7\.com
+https?:\/\/([^\/]*\.)?poker-boulevard\.com
+https?:\/\/([^\/]*\.)?poker-check\.com
+https?:\/\/([^\/]*\.)?poker-new\.com
+https?:\/\/([^\/]*\.)?poker-party-a\.com
+https?:\/\/([^\/]*\.)?poker-places-4u\.net
+https?:\/\/([^\/]*\.)?poker-places\.net
+https?:\/\/([^\/]*\.)?poker-pro\.us
+https?:\/\/([^\/]*\.)?poker-stadium\.com
+https?:\/\/([^\/]*\.)?poker-sys\.com
+https?:\/\/([^\/]*\.)?poker-unique\.com
+https?:\/\/([^\/]*\.)?poker-valley\.com
+https?:\/\/([^\/]*\.)?poker\.black-poker\.com
+https?:\/\/([^\/]*\.)?poker\.land\.ru
+https?:\/\/([^\/]*\.)?poker1table\.chat\.ru
+https?:\/\/([^\/]*\.)?pokera\.web\.com
+https?:\/\/([^\/]*\.)?pokermaniab\.atspace\.com
+https?:\/\/([^\/]*\.)?polex\.com\.cn
+https?:\/\/([^\/]*\.)?police-motorcycle-boot\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?police\.site\.io
+https?:\/\/([^\/]*\.)?polonka\.php5\.cz
+https?:\/\/([^\/]*\.)?polott\.org
+https?:\/\/([^\/]*\.)?polyphonic-ringtoneslsh\.blogspot\.com
+https?:\/\/([^\/]*\.)?polysorb\.myoco\.be
+https?:\/\/([^\/]*\.)?polyurethane-condom\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?pool-table\.hotmail\.ru
+https?:\/\/([^\/]*\.)?poopoovi\.forumculture\.net
+https?:\/\/([^\/]*\.)?pop\.egi\.biz
+https?:\/\/([^\/]*\.)?porn-clip-blog5jc\.blogspot\.com
+https?:\/\/([^\/]*\.)?porn-clip-boj\.blogspot\.com
+https?:\/\/([^\/]*\.)?porn-clip-om16o\.blogspot\.com
+https?:\/\/([^\/]*\.)?porn-movie-clips-blogk8p\.blogspot\.com
+https?:\/\/([^\/]*\.)?porn-movie-rj8a7\.blogspot\.com
+https?:\/\/([^\/]*\.)?porn-movie-ted\.blogspot\.com
+https?:\/\/([^\/]*\.)?porn-movie\.hostingtree\.org
+https?:\/\/([^\/]*\.)?porn-samples\.com
+https?:\/\/([^\/]*\.)?porn-star-clip-info0n0\.blogspot\.com
+https?:\/\/([^\/]*\.)?porn-star-movie-clip-newsigj\.blogspot\.com
+https?:\/\/([^\/]*\.)?porn-star-video-clip-zone44f\.blogspot\.com
+https?:\/\/([^\/]*\.)?porn-teacher\.com
+https?:\/\/([^\/]*\.)?porn-teen-pic\.com
+https?:\/\/([^\/]*\.)?porn-video-clip-bb-bb-f\.blogspot\.com
+https?:\/\/([^\/]*\.)?porn-video-clip-gallery-zonehp1\.blogspot\.com
+https?:\/\/([^\/]*\.)?porn-video-clips-news5v2\.blogspot\.com
+https?:\/\/([^\/]*\.)?porn-video-jef\.blogspot\.com
+https?:\/\/([^\/]*\.)?porn1clip\.blogspot\.com
+https?:\/\/([^\/]*\.)?pornaccess-com-k58\.blogspot\.com
+https?:\/\/([^\/]*\.)?pornaccess-com-kkd1zvcobi\.blogspot\.com
+https?:\/\/([^\/]*\.)?porndirectory-com-m544ar5z47\.blogspot\.com
+https?:\/\/([^\/]*\.)?porndirectory-com-miyza\.blogspot\.com
+https?:\/\/([^\/]*\.)?porneskimo-com-hizrd2on\.blogspot\.com
+https?:\/\/([^\/]*\.)?porneskimo-com-hr1frq8hrr\.blogspot\.com
+https?:\/\/([^\/]*\.)?porneskimo-d4p5\.blogspot\.com
+https?:\/\/([^\/]*\.)?porneskimo-diheh\.blogspot\.com
+https?:\/\/([^\/]*\.)?pornfreeusa\.info
+https?:\/\/([^\/]*\.)?pornno-com-cdtkjmj\.blogspot\.com
+https?:\/\/([^\/]*\.)?pornno-com-cz5dknpwc\.blogspot\.com
+https?:\/\/([^\/]*\.)?pornogames4\.com
+https?:\/\/([^\/]*\.)?pornoho-com-d7f\.blogspot\.com
+https?:\/\/([^\/]*\.)?pornoho-com-db2ge0p\.blogspot\.com
+https?:\/\/([^\/]*\.)?pornstar-com-be1mbdy0l1\.blogspot\.com
+https?:\/\/([^\/]*\.)?pornstar-com-bsrzs22gn\.blogspot\.com
+https?:\/\/([^\/]*\.)?pornstar-com-nuvor\.blogspot\.com
+https?:\/\/([^\/]*\.)?pornstar-dz8j\.blogspot\.com
+https?:\/\/([^\/]*\.)?pornstarbook-com-ag3477t\.blogspot\.com
+https?:\/\/([^\/]*\.)?pornstarbook-com-agrpd\.blogspot\.com
+https?:\/\/([^\/]*\.)?pornstarfinder-net-wp2lsr0\.blogspot\.com
+https?:\/\/([^\/]*\.)?pornstarfinder-net-wuag8\.blogspot\.com
+https?:\/\/([^\/]*\.)?pornstargals-com-tj\.blogspot\.com
+https?:\/\/([^\/]*\.)?pornstargals-com-tk7hoxv36\.blogspot\.com
+https?:\/\/([^\/]*\.)?pornstars\.hostingtree\.org
+https?:\/\/([^\/]*\.)?pornstarvid-com-dinif\.blogspot\.com
+https?:\/\/([^\/]*\.)?pornstarvid-com-h5\.blogspot\.com
+https?:\/\/([^\/]*\.)?pornstarvid-com-h8xe\.blogspot\.com
+https?:\/\/([^\/]*\.)?pornweek-com\.isabel\.dtdns\.net
+https?:\/\/([^\/]*\.)?portal777\.com
+https?:\/\/([^\/]*\.)?portalrate\.info
+https?:\/\/([^\/]*\.)?portcityhonda\.info
+https?:\/\/([^\/]*\.)?portly\.byinter\.net
+https?:\/\/([^\/]*\.)?porzo-com-dsmefbsl\.blogspot\.com
+https?:\/\/([^\/]*\.)?porzo-com-gxo\.blogspot\.com
+https?:\/\/([^\/]*\.)?poshlo\.com
+https?:\/\/([^\/]*\.)?postdream\.org
+https?:\/\/([^\/]*\.)?potulnik\.php5\.cz
+https?:\/\/([^\/]*\.)?povicyt\.dynamicforum\.net
+https?:\/\/([^\/]*\.)?powerlevelingweb\.com
+https?:\/\/([^\/]*\.)?pozorvostoka\.250free\.com
+https?:\/\/([^\/]*\.)?pp-shredd\.boom\.ru
+https?:\/\/([^\/]*\.)?pppsp\.szm\.sk
+https?:\/\/([^\/]*\.)?ppuhldv\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?pqis2\.szm\.sk
+https?:\/\/([^\/]*\.)?prakashcommunication\.com
+https?:\/\/([^\/]*\.)?prama\.info
+https?:\/\/([^\/]*\.)?prasut\.com
+https?:\/\/([^\/]*\.)?prearnha\.dl\.pl
+https?:\/\/([^\/]*\.)?prednisone\.3d-game\.com
+https?:\/\/([^\/]*\.)?prenotazione-albergo-rimini\.host24h\.info
+https?:\/\/([^\/]*\.)?prestito-taranto\.robzz\.info
+https?:\/\/([^\/]*\.)?prettyhair24-7\.blogspot\.com
+https?:\/\/([^\/]*\.)?prettyhotbabes-com-r2lu08uojn\.blogspot\.com
+https?:\/\/([^\/]*\.)?prettyhotbabes-com-rkgrt\.blogspot\.com
+https?:\/\/([^\/]*\.)?prettymob\.com
+https?:\/\/([^\/]*\.)?prevacid\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?price-top\.com
+https?:\/\/([^\/]*\.)?price100\.info
+https?:\/\/([^\/]*\.)?prilosec\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?prilosecbuycheap\.turn\.to
+https?:\/\/([^\/]*\.)?prilosecbuygeneric\.redirect\.to
+https?:\/\/([^\/]*\.)?priloseccheap\.turn\.to
+https?:\/\/([^\/]*\.)?priloseccheapgeneric\.redirect\.to
+https?:\/\/([^\/]*\.)?prilosecgeneric\.come\.to
+https?:\/\/([^\/]*\.)?primer\.fidosoft\.de
+https?:\/\/([^\/]*\.)?primojerky\.cn
+https?:\/\/([^\/]*\.)?primonona\.info
+https?:\/\/([^\/]*\.)?princesscruises\.chat\.ru
+https?:\/\/([^\/]*\.)?princesskariboo\.blogspot\.com
+https?:\/\/([^\/]*\.)?printer\.net\.cn
+https?:\/\/([^\/]*\.)?printingok\.net
+https?:\/\/([^\/]*\.)?private-porn-clip-newsmzm\.blogspot\.com
+https?:\/\/([^\/]*\.)?proactive-facial-product\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?problem-skin\.nm\.ru
+https?:\/\/([^\/]*\.)?problem_skin\.chat\.ru
+https?:\/\/([^\/]*\.)?prodotti-cosmetico\.nnme\.info
+https?:\/\/([^\/]*\.)?projectvoyeur-com-ec15a\.blogspot\.com
+https?:\/\/([^\/]*\.)?projectvoyeur-com-eq2w\.blogspot\.com
+https?:\/\/([^\/]*\.)?projectvoyeur-com-eyyd4q\.blogspot\.com
+https?:\/\/([^\/]*\.)?projectvoyeur-t3j\.blogspot\.com
+https?:\/\/([^\/]*\.)?prom\.createforum\.us
+https?:\/\/([^\/]*\.)?propecia\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?propecia\.esguay\.com
+https?:\/\/([^\/]*\.)?propecia\.skocz\.net
+https?:\/\/([^\/]*\.)?protonixbuy\.stick\.by
+https?:\/\/([^\/]*\.)?protonixbuycheap\.redirect\.to
+https?:\/\/([^\/]*\.)?protonixcheap\.connect\.to
+https?:\/\/([^\/]*\.)?protonixcheapgeneric\.soft-ware\.de
+https?:\/\/([^\/]*\.)?protonixgenericbuy\.cut\.by
+https?:\/\/([^\/]*\.)?provigilweight\.sblog\.cz
+https?:\/\/([^\/]*\.)?prozac\.rx4\.org
+https?:\/\/([^\/]*\.)?prsl4\.szm\.sk
+https?:\/\/([^\/]*\.)?prznic\.dtdns\.net
+https?:\/\/([^\/]*\.)?psfc\.mit\.edu
+https?:\/\/([^\/]*\.)?psmorrison\.blogspot\.com
+https?:\/\/([^\/]*\.)?psnuni\.com
+https?:\/\/([^\/]*\.)?psrq4\.szm\.sk
+https?:\/\/([^\/]*\.)?psychology-degre\.boom\.ru
+https?:\/\/([^\/]*\.)?psychology1degre\.chat\.ru
+https?:\/\/([^\/]*\.)?pszdc\.szm\.sk
+https?:\/\/([^\/]*\.)?ptpm9\.szm\.sk
+https?:\/\/([^\/]*\.)?ptrip\.net
+https?:\/\/([^\/]*\.)?pttqt\.szm\.sk
+https?:\/\/([^\/]*\.)?publicinvasion-com-bhtum2\.blogspot\.com
+https?:\/\/([^\/]*\.)?publicinvasion-com-bj\.blogspot\.com
+https?:\/\/([^\/]*\.)?publicinvasion-com-furok\.blogspot\.com
+https?:\/\/([^\/]*\.)?publicsaftor\.com
+https?:\/\/([^\/]*\.)?pued-com-maxu1g7\.blogspot\.com
+https?:\/\/([^\/]*\.)?pued-com-mf3\.blogspot\.com
+https?:\/\/([^\/]*\.)?pued-com-r0078gie\.blogspot\.com
+https?:\/\/([^\/]*\.)?pued-ox5y12mn7s\.blogspot\.com
+https?:\/\/([^\/]*\.)?puffybet\.sultryserver\.com
+https?:\/\/([^\/]*\.)?pulaskiterm\.info
+https?:\/\/([^\/]*\.)?pulse-squad\.com
+https?:\/\/([^\/]*\.)?pumpthatass-com-a78juz38f2\.blogspot\.com
+https?:\/\/([^\/]*\.)?pumpthatass-com-a7ouybe\.blogspot\.com
+https?:\/\/([^\/]*\.)?pumpthatass-com-xudeb\.blogspot\.com
+https?:\/\/([^\/]*\.)?punguinodoom\.110mb\.com
+https?:\/\/([^\/]*\.)?punjqm0\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?punk-ass-bitch-wheatus\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?puppykibble-com-o7\.blogspot\.com
+https?:\/\/([^\/]*\.)?puppykibble-com-oh0w2te3k\.blogspot\.com
+https?:\/\/([^\/]*\.)?puppykibble-com-oqm7hu8d\.blogspot\.com
+https?:\/\/([^\/]*\.)?purextc-com-i8\.blogspot\.com
+https?:\/\/([^\/]*\.)?purextc-com-iy\.blogspot\.com
+https?:\/\/([^\/]*\.)?pussy-ass-bitch\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?pussy-org-kjsb51la\.blogspot\.com
+https?:\/\/([^\/]*\.)?pussy-org-km5\.blogspot\.com
+https?:\/\/([^\/]*\.)?putsta\.com
+https?:\/\/([^\/]*\.)?pvfws\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?pvqoa\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?pvsiwi7\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?pvudt\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?pvzj1\.szm\.sk
+https?:\/\/([^\/]*\.)?pwqx0\.szm\.sk
+https?:\/\/([^\/]*\.)?pymiw\.szm\.sk
+https?:\/\/([^\/]*\.)?pyr0lys1s\.blogspot\.com
+https?:\/\/([^\/]*\.)?pyrebi\.blogspot\.com
+https?:\/\/([^\/]*\.)?pyujxu0\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?pzch0\.szm\.sk
+https?:\/\/([^\/]*\.)?pzek6\.szm\.sk
+https?:\/\/([^\/]*\.)?pzif1\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?q-n-homemade-sex-video-z\.blogspot\.com
+https?:\/\/([^\/]*\.)?qbzmbwz\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?qctbue2\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?qdhr9\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?qdojv\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?qe-hentai-sex-video-sun\.blogspot\.com
+https?:\/\/([^\/]*\.)?qek-wetplace-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?qfoo7\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?qgre5\.szm\.sk
+https?:\/\/([^\/]*\.)?qgtdivl\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?qhiqu\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?qhprfm6\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?qhyvt\.szm\.sk
+https?:\/\/([^\/]*\.)?qietingqi\.ebloggy\.com
+https?:\/\/([^\/]*\.)?qingpao\.com
+https?:\/\/([^\/]*\.)?qinjq\.szm\.sk
+https?:\/\/([^\/]*\.)?qiqiu\.org
+https?:\/\/([^\/]*\.)?qite-alanna\.blogspot\.com
+https?:\/\/([^\/]*\.)?qjok9\.szm\.sk
+https?:\/\/([^\/]*\.)?qjt230\.com
+https?:\/\/([^\/]*\.)?qjvkvcd\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?qklb4\.szm\.sk
+https?:\/\/([^\/]*\.)?qklhtf0\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?qknfl\.szm\.sk
+https?:\/\/([^\/]*\.)?qknpl\.info
+https?:\/\/([^\/]*\.)?qkpple2\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?qlpkce6\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?qltx2\.szm\.sk
+https?:\/\/([^\/]*\.)?qmjrpuo\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?qnax1\.szm\.sk
+https?:\/\/([^\/]*\.)?qo-video-porn-gratis-download\.blogspot\.com
+https?:\/\/([^\/]*\.)?qoclick\.com
+https?:\/\/([^\/]*\.)?qoeg6\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?qojodeh-bdsm-post-video-f\.blogspot\.com
+https?:\/\/([^\/]*\.)?qosmwx9\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?qpdoc\.com
+https?:\/\/([^\/]*\.)?qqdaj\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?qqer6\.szm\.sk
+https?:\/\/([^\/]*\.)?qqnbon4\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?qqwgp\.szm\.sk
+https?:\/\/([^\/]*\.)?qrvkof5\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?qsc7\.org\.ua
+https?:\/\/([^\/]*\.)?qsskk\.info
+https?:\/\/([^\/]*\.)?qtru3\.szm\.sk
+https?:\/\/([^\/]*\.)?qu-free-latina-sex-vide-wiv\.blogspot\.com
+https?:\/\/([^\/]*\.)?quails\.ipupdater\.us
+https?:\/\/([^\/]*\.)?quandugift\.com
+https?:\/\/([^\/]*\.)?queryguild\.com
+https?:\/\/([^\/]*\.)?quqob\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?qutgmzbuje-video\.blogspot\.com
+https?:\/\/([^\/]*\.)?qvewr\.szm\.sk
+https?:\/\/([^\/]*\.)?qvrzi\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?qvulp\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?qwhhmaj\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?qwrn6\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?qxmk2\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?qyda0\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?qyf99\.com
+https?:\/\/([^\/]*\.)?qypv5\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?qz\.informs\.com
+https?:\/\/([^\/]*\.)?qzjeqcv\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?qzrhj\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?r-t-free-porn-video-clip-c\.blogspot\.com
+https?:\/\/([^\/]*\.)?racelleto\.dl\.pl
+https?:\/\/([^\/]*\.)?racer\.graphforum\.com
+https?:\/\/([^\/]*\.)?racerboc\.ephpbb\.com
+https?:\/\/([^\/]*\.)?rachel-hunter-as-stacys-mom\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?racnelelt\.fr-bb\.com
+https?:\/\/([^\/]*\.)?racoloboc\.graphforum\.com
+https?:\/\/([^\/]*\.)?racoloboc\.highforum\.net
+https?:\/\/([^\/]*\.)?racoloor\.dl\.pl
+https?:\/\/([^\/]*\.)?racrella\.dl\.pl
+https?:\/\/([^\/]*\.)?racsitli\.dl\.pl
+https?:\/\/([^\/]*\.)?ractrcna\.bb-fr\.com
+https?:\/\/([^\/]*\.)?racviget\.blogcu\.com
+https?:\/\/([^\/]*\.)?raezey\.blogspot\.com
+https?:\/\/([^\/]*\.)?raged\.info
+https?:\/\/([^\/]*\.)?rajzhze\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ramandrom\.com
+https?:\/\/([^\/]*\.)?randomlogik\.blogspot\.com
+https?:\/\/([^\/]*\.)?rappture\.blogspot\.com
+https?:\/\/([^\/]*\.)?raruzeol\.jconserv\.net
+https?:\/\/([^\/]*\.)?rate-boob-pic\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?ratonhteroad\.blogspot\.com
+https?:\/\/([^\/]*\.)?rawpussy-b0q\.blogspot\.com
+https?:\/\/([^\/]*\.)?rawpussy-com-t3l\.blogspot\.com
+https?:\/\/([^\/]*\.)?rawpussy-com-tawon6x\.blogspot\.com
+https?:\/\/([^\/]*\.)?raxm2\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?razor-scooter\.hotmail\.ru
+https?:\/\/([^\/]*\.)?razor2scooter\.chat\.ru
+https?:\/\/([^\/]*\.)?rboub\.szm\.sk
+https?:\/\/([^\/]*\.)?rdavisinc\.com
+https?:\/\/([^\/]*\.)?re-advertising\.boom\.ru
+https?:\/\/([^\/]*\.)?re\.rutan\.org
+https?:\/\/([^\/]*\.)?readworld\.com
+https?:\/\/([^\/]*\.)?real-gay-sex-story\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?real-ringtoneserd\.blogspot\.com
+https?:\/\/([^\/]*\.)?realitsen\.info
+https?:\/\/([^\/]*\.)?realitypassplus-com-e34pddwt1\.blogspot\.com
+https?:\/\/([^\/]*\.)?realitypassplus-com-e7y\.blogspot\.com
+https?:\/\/([^\/]*\.)?realityporn\.coz\.in
+https?:\/\/([^\/]*\.)?realtimewatches\.info
+https?:\/\/([^\/]*\.)?realtors-x\.com
+https?:\/\/([^\/]*\.)?reboteen5\.blogspot\.com
+https?:\/\/([^\/]*\.)?rebuildsanmateohighschool\.org
+https?:\/\/([^\/]*\.)?recipe4you\.info
+https?:\/\/([^\/]*\.)?recupero-dati-hard-disk\.ll11\.info
+https?:\/\/([^\/]*\.)?redder\.my-wifi\.info
+https?:\/\/([^\/]*\.)?redfxo\.blogspot\.com
+https?:\/\/([^\/]*\.)?redsex4\.info
+https?:\/\/([^\/]*\.)?redtcyw\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?reductildrug\.coz\.in
+https?:\/\/([^\/]*\.)?redway-org-d8u\.blogspot\.com
+https?:\/\/([^\/]*\.)?redway-org-dtxz0863\.blogspot\.com
+https?:\/\/([^\/]*\.)?redway-rla\.blogspot\.com
+https?:\/\/([^\/]*\.)?reeringtonesptl\.blogspot\.com
+https?:\/\/([^\/]*\.)?refinance-x\.com
+https?:\/\/([^\/]*\.)?reggdr\.org
+https?:\/\/([^\/]*\.)?regsh\.com
+https?:\/\/([^\/]*\.)?reiw9\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?rejoicing\.gigsweb\.com
+https?:\/\/([^\/]*\.)?rekara\.com
+https?:\/\/([^\/]*\.)?relagen\.orkan\.yi\.org
+https?:\/\/([^\/]*\.)?relalract\.lolforum\.net
+https?:\/\/([^\/]*\.)?relcadron\.bbgraf\.com
+https?:\/\/([^\/]*\.)?relcoli\.lightbb\.com
+https?:\/\/([^\/]*\.)?relics\.hackers-unite\.info
+https?:\/\/([^\/]*\.)?relmonric\.lolforum\.net
+https?:\/\/([^\/]*\.)?reloading-software\.lycan\.be
+https?:\/\/([^\/]*\.)?relsitelt\.darkbb\.com
+https?:\/\/([^\/]*\.)?relsitrel\.xa\.pl
+https?:\/\/([^\/]*\.)?reltaro\.lolbb\.com
+https?:\/\/([^\/]*\.)?remiza\.dtdns\.net
+https?:\/\/([^\/]*\.)?renova\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?rentbuscompany\.net
+https?:\/\/([^\/]*\.)?rentcarcenter\.com
+https?:\/\/([^\/]*\.)?rentcarok\.org
+https?:\/\/([^\/]*\.)?replacement-batteries\.loretic\.be
+https?:\/\/([^\/]*\.)?repq7\.szm\.sk
+https?:\/\/([^\/]*\.)?rerdiq4\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?reshall\.iweb\.bsu\.edu
+https?:\/\/([^\/]*\.)?responderpal\.com
+https?:\/\/([^\/]*\.)?restless-leg--com\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?restless-leg-syndrome-com\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?retin-a\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?retirement1comm\.chat\.ru
+https?:\/\/([^\/]*\.)?returboc\.forumculture\.net
+https?:\/\/([^\/]*\.)?revitolantiaging\.com
+https?:\/\/([^\/]*\.)?rfjn0\.szm\.sk
+https?:\/\/([^\/]*\.)?rgvlg\.szm\.sk
+https?:\/\/([^\/]*\.)?rhdhh\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?rhinotickets\.com
+https?:\/\/([^\/]*\.)?rhn45\.nokedem\.com
+https?:\/\/([^\/]*\.)?rhodeislandmortgage-x\.com
+https?:\/\/([^\/]*\.)?rhooh\.flnet\.org
+https?:\/\/([^\/]*\.)?ri-hardcore-video-download\.blogspot\.com
+https?:\/\/([^\/]*\.)?ricacelco\.dl\.pl
+https?:\/\/([^\/]*\.)?ricaldneu\.fr-bb\.com
+https?:\/\/([^\/]*\.)?riceltleto\.dl\.pl
+https?:\/\/([^\/]*\.)?ricetta-cucina\.host24h\.info
+https?:\/\/([^\/]*\.)?rich-r\.blogspot\.com
+https?:\/\/([^\/]*\.)?richards-realm-com-c4h\.blogspot\.com
+https?:\/\/([^\/]*\.)?richards-realm-com-cs\.blogspot\.com
+https?:\/\/([^\/]*\.)?riclarol\.dl\.pl
+https?:\/\/([^\/]*\.)?ricostruzione-unghia\.hostzz\.info
+https?:\/\/([^\/]*\.)?ricrelnel\.frbb\.net
+https?:\/\/([^\/]*\.)?rictaget\.uy\.pl
+https?:\/\/([^\/]*\.)?rictrocvar\.zikforum\.com
+https?:\/\/([^\/]*\.)?riczelur\.forumzen\.com
+https?:\/\/([^\/]*\.)?ridiaulctions\.blogspot\.com
+https?:\/\/([^\/]*\.)?right-leg-swelling\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?rigour\.info
+https?:\/\/([^\/]*\.)?rijulina\.dl\.pl
+https?:\/\/([^\/]*\.)?ring-tonecti\.blogspot\.com
+https?:\/\/([^\/]*\.)?ring2man\.chat\.ru
+https?:\/\/([^\/]*\.)?ring4man\.chat\.ru
+https?:\/\/([^\/]*\.)?ring4tel\.com
+https?:\/\/([^\/]*\.)?ringg\.info
+https?:\/\/([^\/]*\.)?ringtones-4phone\.com
+https?:\/\/([^\/]*\.)?ringtones-dir\.com
+https?:\/\/([^\/]*\.)?ringtones-dir\.net
+https?:\/\/([^\/]*\.)?ringtones-for-a-samsungtwt\.blogspot\.com
+https?:\/\/([^\/]*\.)?ringtones-rate\.com
+https?:\/\/([^\/]*\.)?ringtones\.blogharbor\.com
+https?:\/\/([^\/]*\.)?ringts\.269g\.net
+https?:\/\/([^\/]*\.)?risajno\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?risque-sexy-plus-size-lingerie\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?rit\.edu
+https?:\/\/([^\/]*\.)?ritalin-without-prescription\.contact\.cc
+https?:\/\/([^\/]*\.)?ritalin\.myvnc\.com
+https?:\/\/([^\/]*\.)?river-road-motorcycle-boot\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?river\.greatfreehosting\.com
+https?:\/\/([^\/]*\.)?rivotril\.int\.tf
+https?:\/\/([^\/]*\.)?rm-ast-pants\.blogspot\.com
+https?:\/\/([^\/]*\.)?rmsq9\.szm\.sk
+https?:\/\/([^\/]*\.)?rmuuur3\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?rndk1\.szm\.sk
+https?:\/\/([^\/]*\.)?rnmg6\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ro-westin\.blogspot\.com
+https?:\/\/([^\/]*\.)?robotqueen\.250free\.com
+https?:\/\/([^\/]*\.)?rochili\.alkablog\.com
+https?:\/\/([^\/]*\.)?rodar6or6\.dl\.pl
+https?:\/\/([^\/]*\.)?rodvww7\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?rogetou\.dl\.pl
+https?:\/\/([^\/]*\.)?rojeracr\.forumzen\.com
+https?:\/\/([^\/]*\.)?roketplanet\.weedns\.com
+https?:\/\/([^\/]*\.)?rokminric\.dynamicbb\.com
+https?:\/\/([^\/]*\.)?rokzecdok\.dynamicbb\.com
+https?:\/\/([^\/]*\.)?rolccna\.dl\.pl
+https?:\/\/([^\/]*\.)?rolcnac\.td\.pl
+https?:\/\/([^\/]*\.)?rolex\.heberg-forum\.net
+https?:\/\/([^\/]*\.)?rolexreplica\.269g\.net
+https?:\/\/([^\/]*\.)?rolica\.blogcu\.com
+https?:\/\/([^\/]*\.)?rollaolo\.blogcu\.com
+https?:\/\/([^\/]*\.)?rollatobas\.naturalforum\.net
+https?:\/\/([^\/]*\.)?rolracboc\.bb-fr\.com
+https?:\/\/([^\/]*\.)?roltrsit\.bbfr\.net
+https?:\/\/([^\/]*\.)?rom\.dl\.pl
+https?:\/\/([^\/]*\.)?romahotel\.org
+https?:\/\/([^\/]*\.)?romandie\.com
+https?:\/\/([^\/]*\.)?romanticmaui\.net
+https?:\/\/([^\/]*\.)?room-house\.jeepsyc\.be
+https?:\/\/([^\/]*\.)?root\.dns\.bz
+https?:\/\/([^\/]*\.)?roouvar\.dl\.pl
+https?:\/\/([^\/]*\.)?roricdom\.lightbb\.com
+https?:\/\/([^\/]*\.)?roseofgold52\.50webs\.com
+https?:\/\/([^\/]*\.)?rotl\.info
+https?:\/\/([^\/]*\.)?rotrocrol\.darkbb\.com
+https?:\/\/([^\/]*\.)?roundandbrown-com-bkb03g0hi\.blogspot\.com
+https?:\/\/([^\/]*\.)?roundandbrown-com-kp04\.blogspot\.com
+https?:\/\/([^\/]*\.)?roundandbrown-com-wqzj337l\.blogspot\.com
+https?:\/\/([^\/]*\.)?roundandbrown-com-wus56c\.blogspot\.com
+https?:\/\/([^\/]*\.)?routan\.org
+https?:\/\/([^\/]*\.)?roxyobsessed7\.blogspot\.com
+https?:\/\/([^\/]*\.)?rphqj\.szm\.sk
+https?:\/\/([^\/]*\.)?rqhdnj4\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?rqpwn\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?rrefr\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?rrgr4\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?rrlive\.info
+https?:\/\/([^\/]*\.)?rrsfmw7\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?rseo7\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?rshu2\.szm\.sk
+https?:\/\/([^\/]*\.)?rsmy8\.szm\.sk
+https?:\/\/([^\/]*\.)?rthl0\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?rtugwoy\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ruanjian\.cwrjcn\.com
+https?:\/\/([^\/]*\.)?rucowdena\.ifrance\.com
+https?:\/\/([^\/]*\.)?rudecomputing\.com
+https?:\/\/([^\/]*\.)?rudu-adam\.blogspot\.com
+https?:\/\/([^\/]*\.)?ruimingwei\.com\.cn
+https?:\/\/([^\/]*\.)?rulurbuc\.forumzen\.com
+https?:\/\/([^\/]*\.)?runutr\.forumzen\.com
+https?:\/\/([^\/]*\.)?russiannudesgirlszxa\.blogspot\.com
+https?:\/\/([^\/]*\.)?russiapreteen\.com
+https?:\/\/([^\/]*\.)?russiavista\.sitiasp\.it
+https?:\/\/([^\/]*\.)?rwfe5\.szm\.sk
+https?:\/\/([^\/]*\.)?rxdate\.net
+https?:\/\/([^\/]*\.)?rxdfh\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ryehfpz\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ryhgsb\.com
+https?:\/\/([^\/]*\.)?ryryj\.szm\.sk
+https?:\/\/([^\/]*\.)?ryu-jounetsu\.blogspot\.com
+https?:\/\/([^\/]*\.)?rzwj8\.szm\.sk
+https?:\/\/([^\/]*\.)?s-r-free-porn-movie-clip-x\.blogspot\.com
+https?:\/\/([^\/]*\.)?s1xbucksamonkey\.blogspot\.com
+https?:\/\/([^\/]*\.)?s32\.bilsay\.com
+https?:\/\/([^\/]*\.)?saaaaa\.52blog\.net
+https?:\/\/([^\/]*\.)?safety-product\.hotmail\.ru
+https?:\/\/([^\/]*\.)?safety-product\.pochta\.ru
+https?:\/\/([^\/]*\.)?safety_product\.chat\.ru
+https?:\/\/([^\/]*\.)?sahezzz\.blogspot\.com
+https?:\/\/([^\/]*\.)?saibon\.com\.cn
+https?:\/\/([^\/]*\.)?sakura-watanuki\.blogspot\.com
+https?:\/\/([^\/]*\.)?salewroughtiron\.cn
+https?:\/\/([^\/]*\.)?sample-porn-clip-newst1x\.blogspot\.com
+https?:\/\/([^\/]*\.)?sample-porn-clip-zoneapa\.blogspot\.com
+https?:\/\/([^\/]*\.)?samsung-ringtonedta\.blogspot\.com
+https?:\/\/([^\/]*\.)?sand-stars\.blogspot\.com
+https?:\/\/([^\/]*\.)?sandra-teen-model-qux\.blogspot\.com
+https?:\/\/([^\/]*\.)?sangrandy\.com
+https?:\/\/([^\/]*\.)?sanhy\.com
+https?:\/\/([^\/]*\.)?sanpaulo\.flnet\.org
+https?:\/\/([^\/]*\.)?santjhon\.php5\.cz
+https?:\/\/([^\/]*\.)?sapphiceroticacom\.klose\.ipupdater\.com
+https?:\/\/([^\/]*\.)?sapphicparadise-com-r00asy\.blogspot\.com
+https?:\/\/([^\/]*\.)?sarobo\.com
+https?:\/\/([^\/]*\.)?satellite-tv\.hotmail\.ru
+https?:\/\/([^\/]*\.)?sauna-eq\.boom\.ru
+https?:\/\/([^\/]*\.)?sauna-heater\.boom\.ru
+https?:\/\/([^\/]*\.)?sauna-kit\.boom\.ru
+https?:\/\/([^\/]*\.)?sauna-room\.boom\.ru
+https?:\/\/([^\/]*\.)?saunaguide\.org
+https?:\/\/([^\/]*\.)?save-on-auto-insurance\.info
+https?:\/\/([^\/]*\.)?saved\.ddns\.info
+https?:\/\/([^\/]*\.)?sbarzn3\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?scanthenet\.com
+https?:\/\/([^\/]*\.)?scat-fetish-story\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?school-driving\.info
+https?:\/\/([^\/]*\.)?school-girl-butt\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?school2home\.chat\.ru
+https?:\/\/([^\/]*\.)?sciensezero\.republika\.pl
+https?:\/\/([^\/]*\.)?scnh6\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?scooter11\.chat\.ru
+https?:\/\/([^\/]*\.)?scooter2\.hotmail\.ru
+https?:\/\/([^\/]*\.)?screwedupmovies-com-a5wj\.blogspot\.com
+https?:\/\/([^\/]*\.)?screwedupmovies-com-ax\.blogspot\.com
+https?:\/\/([^\/]*\.)?scripts-cert\.mit\.edu
+https?:\/\/([^\/]*\.)?scscj\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?sdao7\.szm\.sk
+https?:\/\/([^\/]*\.)?sdfr0\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?sdfsfssss\.com
+https?:\/\/([^\/]*\.)?se4u\.net
+https?:\/\/([^\/]*\.)?seafordmed\.info
+https?:\/\/([^\/]*\.)?seainsurancegroup\.info
+https?:\/\/([^\/]*\.)?search4sex\.us
+https?:\/\/([^\/]*\.)?searchbigtits-com-apxd1hwatd\.blogspot\.com
+https?:\/\/([^\/]*\.)?searchbigtits-com-obraj\.blogspot\.com
+https?:\/\/([^\/]*\.)?searcheng\.com
+https?:\/\/([^\/]*\.)?searcheon\.com
+https?:\/\/([^\/]*\.)?searchgalleries-com-i7\.blogspot\.com
+https?:\/\/([^\/]*\.)?searchgalleries-com-ib2bi6on5\.blogspot\.com
+https?:\/\/([^\/]*\.)?searchgals-com-gu1810j\.blogspot\.com
+https?:\/\/([^\/]*\.)?searcholdies-com-msa\.blogspot\.com
+https?:\/\/([^\/]*\.)?searchsuperhit\.com
+https?:\/\/([^\/]*\.)?searchvids-com-h47g8mf\.blogspot\.com
+https?:\/\/([^\/]*\.)?seasonale\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?secure-network\.info
+https?:\/\/([^\/]*\.)?seeallhomes\.com
+https?:\/\/([^\/]*\.)?seeallnatural\.com
+https?:\/\/([^\/]*\.)?seeallsite\.com
+https?:\/\/([^\/]*\.)?seecomplete\.com
+https?:\/\/([^\/]*\.)?seehersquirt-com-k0\.blogspot\.com
+https?:\/\/([^\/]*\.)?seehersquirt-com-k3\.blogspot\.com
+https?:\/\/([^\/]*\.)?seekcounty\.com
+https?:\/\/([^\/]*\.)?seeyo\.info
+https?:\/\/([^\/]*\.)?segbqj1\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?sege-addison\.blogspot\.com
+https?:\/\/([^\/]*\.)?seho-aiyana\.blogspot\.com
+https?:\/\/([^\/]*\.)?sekapad\.info
+https?:\/\/([^\/]*\.)?sekbad\.info
+https?:\/\/([^\/]*\.)?selfbuying\.com
+https?:\/\/([^\/]*\.)?semarqua\.dl\.pl
+https?:\/\/([^\/]*\.)?senapier\.dl\.pl
+https?:\/\/([^\/]*\.)?send-flowers\.acb\.pl
+https?:\/\/([^\/]*\.)?sendon\.net\.cn
+https?:\/\/([^\/]*\.)?senlu\.com
+https?:\/\/([^\/]*\.)?sensorscity\.marshall\.edu
+https?:\/\/([^\/]*\.)?seo\.ohsu\.edu
+https?:\/\/([^\/]*\.)?seo88\.com
+https?:\/\/([^\/]*\.)?seomdahi\.jconserv\.net
+https?:\/\/([^\/]*\.)?seozone\.net
+https?:\/\/([^\/]*\.)?seranton\.blogspot\.com
+https?:\/\/([^\/]*\.)?sercheng\.com
+https?:\/\/([^\/]*\.)?serchlid\.com
+https?:\/\/([^\/]*\.)?serious-skin\.boom\.ru
+https?:\/\/([^\/]*\.)?serts\.blogshot\.nl
+https?:\/\/([^\/]*\.)?servemp3\.com
+https?:\/\/([^\/]*\.)?serversolutions\.us
+https?:\/\/([^\/]*\.)?servitch\.com
+https?:\/\/([^\/]*\.)?ses1\.info
+https?:\/\/([^\/]*\.)?sestrenish\.biografi\.org
+https?:\/\/([^\/]*\.)?setara\.dl\.pl
+https?:\/\/([^\/]*\.)?seventeenlive-com-bado3i\.blogspot\.com
+https?:\/\/([^\/]*\.)?seventeenlive-com-bmg\.blogspot\.com
+https?:\/\/([^\/]*\.)?seventeenlive-com-h4dw652dzl\.blogspot\.com
+https?:\/\/([^\/]*\.)?severnfollow\.info
+https?:\/\/([^\/]*\.)?sevtentoe\.blogspot\.com
+https?:\/\/([^\/]*\.)?sewingmachinesusa\.com
+https?:\/\/([^\/]*\.)?sex--x\.com
+https?:\/\/([^\/]*\.)?sex-clip-ce872\.blogspot\.com
+https?:\/\/([^\/]*\.)?sex-dating\.sexnation\.info
+https?:\/\/([^\/]*\.)?sex-movie-e8qbm\.blogspot\.com
+https?:\/\/([^\/]*\.)?sex-movie-qig\.blogspot\.com
+https?:\/\/([^\/]*\.)?sex-video-clip-haq3r\.blogspot\.com
+https?:\/\/([^\/]*\.)?sex-video-juz\.blogspot\.com
+https?:\/\/([^\/]*\.)?sex-without-condom\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?sex-woman-only-fuck\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?sex-xxx-free\.100freemb\.com
+https?:\/\/([^\/]*\.)?sex\.yeahost\.com
+https?:\/\/([^\/]*\.)?sex1movie\.blogspot\.com
+https?:\/\/([^\/]*\.)?sexadultdating\.com
+https?:\/\/([^\/]*\.)?sexape-bpb0\.blogspot\.com
+https?:\/\/([^\/]*\.)?sexape-com-chdaj7\.blogspot\.com
+https?:\/\/([^\/]*\.)?sexape-com-cz4z44iud3\.blogspot\.com
+https?:\/\/([^\/]*\.)?sexape-com-kw7623jxvd\.blogspot\.com
+https?:\/\/([^\/]*\.)?sexape-com-qipil\.blogspot\.com
+https?:\/\/([^\/]*\.)?sexape-mte7jm\.blogspot\.com
+https?:\/\/([^\/]*\.)?sexdirectory-com-tbt0\.blogspot\.com
+https?:\/\/([^\/]*\.)?sexegirls\.net
+https?:\/\/([^\/]*\.)?sexgrannies-com-d17v0sa\.blogspot\.com
+https?:\/\/([^\/]*\.)?sexgrannies-com-dvg3lh0\.blogspot\.com
+https?:\/\/([^\/]*\.)?sexmaxx-com-w2aoe7q\.blogspot\.com
+https?:\/\/([^\/]*\.)?sexmaxx-com-w7\.blogspot\.com
+https?:\/\/([^\/]*\.)?sexmaxx-com-wy23e2588\.blogspot\.com
+https?:\/\/([^\/]*\.)?sexmaxx-kvhilzx76\.blogspot\.com
+https?:\/\/([^\/]*\.)?sexnemo-com-joxud\.blogspot\.com
+https?:\/\/([^\/]*\.)?sexnemo-com-r7iv5\.blogspot\.com
+https?:\/\/([^\/]*\.)?sexnemo-com-rpj18ot\.blogspot\.com
+https?:\/\/([^\/]*\.)?sexo-anal-teen\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?sexoasis-a00r68ac\.blogspot\.com
+https?:\/\/([^\/]*\.)?sexoasis-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?sexoasis-hkz6z4fmr6\.blogspot\.com
+https?:\/\/([^\/]*\.)?sexocean-b00\.blogspot\.com
+https?:\/\/([^\/]*\.)?sexocean-com-e2zci5\.blogspot\.com
+https?:\/\/([^\/]*\.)?sexocean-com-ew426c7qej\.blogspot\.com
+https?:\/\/([^\/]*\.)?sexocean-com-itvux\.blogspot\.com
+https?:\/\/([^\/]*\.)?sexocean-com-r6fjn1dz\.blogspot\.com
+https?:\/\/([^\/]*\.)?sexocean-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?sexocean-ibf53b\.blogspot\.com
+https?:\/\/([^\/]*\.)?sexocean000\.blogspot\.com
+https?:\/\/([^\/]*\.)?sexy-ass-and-leg\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?sexy-blonde-big-tit\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?sexy-busty-hot\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?sexy-knee-high-boot\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?sexy-leg-xxx\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?sexy-lesbian-having-sex\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?sexy-models-net-g13hqljr0\.blogspot\.com
+https?:\/\/([^\/]*\.)?sexy-teacher\.net
+https?:\/\/([^\/]*\.)?sexy\.dastish\.org
+https?:\/\/([^\/]*\.)?sexyst\.info
+https?:\/\/([^\/]*\.)?sfjo7\.szm\.sk
+https?:\/\/([^\/]*\.)?sftic\.szm\.sk
+https?:\/\/([^\/]*\.)?sfzone\.cn
+https?:\/\/([^\/]*\.)?sgkr3\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?shaffelrecords\.com
+https?:\/\/([^\/]*\.)?shahang\.net
+https?:\/\/([^\/]*\.)?shakira-pa3t\.blogspot\.com
+https?:\/\/([^\/]*\.)?shakirafortner\.hostingweb\.us
+https?:\/\/([^\/]*\.)?shampoo\.moistri\.be
+https?:\/\/([^\/]*\.)?shavedgoat-com-hlfai1dvfb\.blogspot\.com
+https?:\/\/([^\/]*\.)?shbuscenter\.com
+https?:\/\/([^\/]*\.)?shcarcenter\.com
+https?:\/\/([^\/]*\.)?shdianjiang\.cn
+https?:\/\/([^\/]*\.)?sheji\.paim123\.com
+https?:\/\/([^\/]*\.)?shemale-action\.net
+https?:\/\/([^\/]*\.)?shemale-ebony-fuck\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?shemale-fuck-guys-com\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?shemale-no-cock\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?shemalefuckguy\.isabel\.dtdns\.net
+https?:\/\/([^\/]*\.)?shemales\.coz\.in
+https?:\/\/([^\/]*\.)?shemp-com-k1yng8\.blogspot\.com
+https?:\/\/([^\/]*\.)?shemp-com-kcutd\.blogspot\.com
+https?:\/\/([^\/]*\.)?shemp-com-zuhig\.blogspot\.com
+https?:\/\/([^\/]*\.)?shenzhenjp\.com
+https?:\/\/([^\/]*\.)?shesexy-b00\.blogspot\.com
+https?:\/\/([^\/]*\.)?shesexy-com-i1xf\.blogspot\.com
+https?:\/\/([^\/]*\.)?shesexy-com-rugok\.blogspot\.com
+https?:\/\/([^\/]*\.)?shesexy-com-w0dffbvzz\.blogspot\.com
+https?:\/\/([^\/]*\.)?shesexy-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?shesexy-gogub\.blogspot\.com
+https?:\/\/([^\/]*\.)?shesexy000\.blogspot\.com
+https?:\/\/([^\/]*\.)?shetelel\.jconserv\.net
+https?:\/\/([^\/]*\.)?shexpo2010\.com
+https?:\/\/([^\/]*\.)?shijiren\.com
+https?:\/\/([^\/]*\.)?shinylights\.org
+https?:\/\/([^\/]*\.)?shipeng\.net
+https?:\/\/([^\/]*\.)?shmoorge\.tripod\.com
+https?:\/\/([^\/]*\.)?shoesnike\.cn
+https?:\/\/([^\/]*\.)?shoesorder\.biz
+https?:\/\/([^\/]*\.)?shoesshop\.biz
+https?:\/\/([^\/]*\.)?shop24x7\.net
+https?:\/\/([^\/]*\.)?short-porn-clip-news8rj\.blogspot\.com
+https?:\/\/([^\/]*\.)?shoujicaixin\.com
+https?:\/\/([^\/]*\.)?shplaycenter\.cn
+https?:\/\/([^\/]*\.)?shredder-4paper\.boom\.ru
+https?:\/\/([^\/]*\.)?shredder-paper\.boom\.ru
+https?:\/\/([^\/]*\.)?shredder\.boom\.ru
+https?:\/\/([^\/]*\.)?shredder4paper\.chat\.ru
+https?:\/\/([^\/]*\.)?shrentcar\.com
+https?:\/\/([^\/]*\.)?shrudant\.jconserv\.net
+https?:\/\/([^\/]*\.)?shticketcenter\.com
+https?:\/\/([^\/]*\.)?shtiklmiaou\.fizwig\.com
+https?:\/\/([^\/]*\.)?shtranslate\.com
+https?:\/\/([^\/]*\.)?shufflequince\.org
+https?:\/\/([^\/]*\.)?siamforum\.com
+https?:\/\/([^\/]*\.)?siek2\.szm\.sk
+https?:\/\/([^\/]*\.)?sifa600\.com
+https?:\/\/([^\/]*\.)?sigla-cartoni-animati\.19mb\.info
+https?:\/\/([^\/]*\.)?sijalik\.blogspot\.com
+https?:\/\/([^\/]*\.)?sik-sapphicparadise-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?sildenafil-citrate\.perso\.tc
+https?:\/\/([^\/]*\.)?siliconpulse\.info
+https?:\/\/([^\/]*\.)?silly-n\.blogspot\.com
+https?:\/\/([^\/]*\.)?simply-gamine\.hostingweb\.us
+https?:\/\/([^\/]*\.)?simtershrapnel\.blogspot\.com
+https?:\/\/([^\/]*\.)?sinbiom\.blogspot\.com
+https?:\/\/([^\/]*\.)?sindyhalliday\.com
+https?:\/\/([^\/]*\.)?sinequanwithdrawal\.sblog\.cz
+https?:\/\/([^\/]*\.)?sineto\.net
+https?:\/\/([^\/]*\.)?sinfulcurves-com-obh\.blogspot\.com
+https?:\/\/([^\/]*\.)?singova\.org
+https?:\/\/([^\/]*\.)?siq-xxlmovies-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?sirloincentury\.org
+https?:\/\/([^\/]*\.)?sisus\.org
+https?:\/\/([^\/]*\.)?sitacsit\.goodforum\.net
+https?:\/\/([^\/]*\.)?sitacsit\.grafbb\.com
+https?:\/\/([^\/]*\.)?sitchi-or\.xa\.pl
+https?:\/\/([^\/]*\.)?sitdelcna\.lightbb\.com
+https?:\/\/([^\/]*\.)?sitdelta\.jc\.pl
+https?:\/\/([^\/]*\.)?sitdeltroc\.bbfr\.net
+https?:\/\/([^\/]*\.)?site\.voila\.fr
+https?:\/\/([^\/]*\.)?siteapts\.info
+https?:\/\/([^\/]*\.)?sitedating\.org
+https?:\/\/([^\/]*\.)?sitel\.goodforum\.net
+https?:\/\/([^\/]*\.)?sitel\.grafbb\.com
+https?:\/\/([^\/]*\.)?sitladar\.dl\.pl
+https?:\/\/([^\/]*\.)?sitorsit\.discutfree\.com
+https?:\/\/([^\/]*\.)?sittazel\.bb-fr\.com
+https?:\/\/([^\/]*\.)?sj-qh\.com
+https?:\/\/([^\/]*\.)?sjzwz\.com
+https?:\/\/([^\/]*\.)?skbrql5\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?skelaxin\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?skelaxin800mg\.sblog\.cz
+https?:\/\/([^\/]*\.)?skin-care-tip\.boom\.ru
+https?:\/\/([^\/]*\.)?skin-care\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?skin-diseas\.boom\.ru
+https?:\/\/([^\/]*\.)?skin-disease\.boom\.ru
+https?:\/\/([^\/]*\.)?skin-disease\.fromru\.com
+https?:\/\/([^\/]*\.)?skin-disease\.newmail\.ru
+https?:\/\/([^\/]*\.)?skin-product\.hotmail\.ru
+https?:\/\/([^\/]*\.)?skin-treat\.boom\.ru
+https?:\/\/([^\/]*\.)?skin-treatm\.boom\.ru
+https?:\/\/([^\/]*\.)?skin-treatment\.boom\.ru
+https?:\/\/([^\/]*\.)?skin-trt\.boom\.ru
+https?:\/\/([^\/]*\.)?skin1-disease\.boom\.ru
+https?:\/\/([^\/]*\.)?skin1disease\.chat\.ru
+https?:\/\/([^\/]*\.)?skin1tip4care\.chat\.ru
+https?:\/\/([^\/]*\.)?skin1treatment\.chat\.ru
+https?:\/\/([^\/]*\.)?skin_product\.chat\.ru
+https?:\/\/([^\/]*\.)?skincare\.ixdm\.info
+https?:\/\/([^\/]*\.)?skodasite\.info
+https?:\/\/([^\/]*\.)?skvonk\.blogspot\.com
+https?:\/\/([^\/]*\.)?skvvdm2\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?sleep-aids\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?sleepingsex\.coz\.in
+https?:\/\/([^\/]*\.)?slickgalleries-b00\.blogspot\.com
+https?:\/\/([^\/]*\.)?slickgalleries-com-acf4a01s86\.blogspot\.com
+https?:\/\/([^\/]*\.)?slots-wiki\.com
+https?:\/\/([^\/]*\.)?slutsvideos-com-mwnyvb2\.blogspot\.com
+https?:\/\/([^\/]*\.)?smack-dvd\.mutogen\.be
+https?:\/\/([^\/]*\.)?smackinghotlips\.blogspot\.com
+https?:\/\/([^\/]*\.)?smal\.php5\.cz
+https?:\/\/([^\/]*\.)?small-bubble-butt\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?smart\.45\.kg
+https?:\/\/([^\/]*\.)?smbay\.cn
+https?:\/\/([^\/]*\.)?smithtownelementarypta\.org
+https?:\/\/([^\/]*\.)?smkpe\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?smlwqj2\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?smnvapnd-teensite\.blogspot\.com
+https?:\/\/([^\/]*\.)?smolyak\.isuisse\.com
+https?:\/\/([^\/]*\.)?sms\.bjicp\.net
+https?:\/\/([^\/]*\.)?smsdown\.blogbus\.com
+https?:\/\/([^\/]*\.)?smut-house-com-c6t8hcv1be\.blogspot\.com
+https?:\/\/([^\/]*\.)?smutgremlins-com-a46sull\.blogspot\.com
+https?:\/\/([^\/]*\.)?smutgremlins-com-w6d7m6ji\.blogspot\.com
+https?:\/\/([^\/]*\.)?smutmaestro\.net
+https?:\/\/([^\/]*\.)?snafusurfer\.net
+https?:\/\/([^\/]*\.)?snakesworld-com-bye\.blogspot\.com
+https?:\/\/([^\/]*\.)?sneakercool\.com
+https?:\/\/([^\/]*\.)?sneakernice\.com
+https?:\/\/([^\/]*\.)?sneck\.info
+https?:\/\/([^\/]*\.)?snkfbl1\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?snmcq\.szm\.sk
+https?:\/\/([^\/]*\.)?snorting-ritalin\.contact\.cc
+https?:\/\/([^\/]*\.)?snymk\.szm\.sk
+https?:\/\/([^\/]*\.)?so-big-tit-video-clip-kos\.blogspot\.com
+https?:\/\/([^\/]*\.)?so-home-sex-clip-god\.blogspot\.com
+https?:\/\/([^\/]*\.)?so-so-young-com-kk727o82n\.blogspot\.com
+https?:\/\/([^\/]*\.)?so1di\.info
+https?:\/\/([^\/]*\.)?soafacil\.com
+https?:\/\/([^\/]*\.)?socalmovies-com-enr61t\.blogspot\.com
+https?:\/\/([^\/]*\.)?socalmovies-com-oy08pp72i\.blogspot\.com
+https?:\/\/([^\/]*\.)?soccer-mom-sticker\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?socialsciencedeg\.chat\.ru
+https?:\/\/([^\/]*\.)?socsci\.mccneb\.edu
+https?:\/\/([^\/]*\.)?sodo0\.szm\.sk
+https?:\/\/([^\/]*\.)?sofiefie\.blogspot\.com
+https?:\/\/([^\/]*\.)?soft17-com-d1577f\.blogspot\.com
+https?:\/\/([^\/]*\.)?softcore-erotica\.net
+https?:\/\/([^\/]*\.)?software-engine\.org
+https?:\/\/([^\/]*\.)?softwarematrix\.org
+https?:\/\/([^\/]*\.)?sohardcore-com-r56bt\.blogspot\.com
+https?:\/\/([^\/]*\.)?soho0\.szm\.sk
+https?:\/\/([^\/]*\.)?solacemysoul\.blogspot\.com
+https?:\/\/([^\/]*\.)?solder\.lowestprices\.at
+https?:\/\/([^\/]*\.)?soler\.net\.cn
+https?:\/\/([^\/]*\.)?sologals-com-hs2xad\.blogspot\.com
+https?:\/\/([^\/]*\.)?sologals-grr5g3\.blogspot\.com
+https?:\/\/([^\/]*\.)?soma\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?soma\.homelinux\.com
+https?:\/\/([^\/]*\.)?soma\.int\.tf
+https?:\/\/([^\/]*\.)?soma\.php5\.cz
+https?:\/\/([^\/]*\.)?soma1\.skocz\.net
+https?:\/\/([^\/]*\.)?someshit\.ru
+https?:\/\/([^\/]*\.)?somqyxli-teensite\.blogspot\.com
+https?:\/\/([^\/]*\.)?sonata\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?sonr4\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?sotremont\.ru
+https?:\/\/([^\/]*\.)?soulswallo\.blogspot\.com
+https?:\/\/([^\/]*\.)?soundandmossl\.com
+https?:\/\/([^\/]*\.)?southcarolinamortgage-x\.com
+https?:\/\/([^\/]*\.)?southdakotamortgage-x\.com
+https?:\/\/([^\/]*\.)?southtecrepair\.com
+https?:\/\/([^\/]*\.)?spacedim68\.blogspot\.com
+https?:\/\/([^\/]*\.)?spamim\.net
+https?:\/\/([^\/]*\.)?spawww\.info
+https?:\/\/([^\/]*\.)?spcw3\.szm\.sk
+https?:\/\/([^\/]*\.)?special-ringtones\.net
+https?:\/\/([^\/]*\.)?specific911\.biz
+https?:\/\/([^\/]*\.)?specific911\.org
+https?:\/\/([^\/]*\.)?speed-casino\.com
+https?:\/\/([^\/]*\.)?speens\.pass\.as
+https?:\/\/([^\/]*\.)?spermicide-trojan-condom\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?spermshack-al\.blogspot\.com
+https?:\/\/([^\/]*\.)?spermshack-com-bef\.blogspot\.com
+https?:\/\/([^\/]*\.)?spermshack-com-gee1\.blogspot\.com
+https?:\/\/([^\/]*\.)?spermshack-com-gtafrogps\.blogspot\.com
+https?:\/\/([^\/]*\.)?spermshack-g01u1\.blogspot\.com
+https?:\/\/([^\/]*\.)?spewie-com-mbntjlrkk\.blogspot\.com
+https?:\/\/([^\/]*\.)?spfwq\.zhengstar\.com
+https?:\/\/([^\/]*\.)?spice-girlpkg\.blogspot\.com
+https?:\/\/([^\/]*\.)?spirit-of-llama\.blogspot\.com
+https?:\/\/([^\/]*\.)?spirit-psyki\.ifrance\.com
+https?:\/\/([^\/]*\.)?spiserch\.com
+https?:\/\/([^\/]*\.)?splashka\.xhostar\.com
+https?:\/\/([^\/]*\.)?splendid-casino\.com
+https?:\/\/([^\/]*\.)?spoilzone\.epinoy\.com
+https?:\/\/([^\/]*\.)?spqi6\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?sprint-ringtonenot\.blogspot\.com
+https?:\/\/([^\/]*\.)?sprintringtonesxvt\.blogspot\.com
+https?:\/\/([^\/]*\.)?sprintringtoneuad\.blogspot\.com
+https?:\/\/([^\/]*\.)?spstestfree\.com\.com
+https?:\/\/([^\/]*\.)?spunkmonster\.net
+https?:\/\/([^\/]*\.)?spwnk\.szm\.sk
+https?:\/\/([^\/]*\.)?spxqly9\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?spyware-adware-killer\.com
+https?:\/\/([^\/]*\.)?sqoi8\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?squall\.my10gb\.com
+https?:\/\/([^\/]*\.)?sqvde\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?sralua\.com
+https?:\/\/([^\/]*\.)?srarware\.com
+https?:\/\/([^\/]*\.)?srkyyca\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?srtongje\.republika\.pl
+https?:\/\/([^\/]*\.)?sruqsz3\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ssdcard\.info
+https?:\/\/([^\/]*\.)?sslive\.info
+https?:\/\/([^\/]*\.)?sspwye7\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?sswingersss-777\.tripod\.com
+https?:\/\/([^\/]*\.)?st-pharmacy\.com
+https?:\/\/([^\/]*\.)?staa8\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?staff\.jccc\.edu
+https?:\/\/([^\/]*\.)?stainlesssteelpipe\.net
+https?:\/\/([^\/]*\.)?stampa-foto-digitale\.ll11\.info
+https?:\/\/([^\/]*\.)?starcelebs-com-ewe5\.blogspot\.com
+https?:\/\/([^\/]*\.)?starcelebs-com-i3a2mxf\.blogspot\.com
+https?:\/\/([^\/]*\.)?starcelebs-wihuk\.blogspot\.com
+https?:\/\/([^\/]*\.)?starryland\.com\.cn
+https?:\/\/([^\/]*\.)?startchicks\.info
+https?:\/\/([^\/]*\.)?state-gay-marriage-legal\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?state-of-germany\.com
+https?:\/\/([^\/]*\.)?statisticpal\.com
+https?:\/\/([^\/]*\.)?stcc9\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?steeen-s-bl\.blogspot\.com
+https?:\/\/([^\/]*\.)?steel-table-leg\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?stocking-fetish-video\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?stocking-movies-com-du1\.blogspot\.com
+https?:\/\/([^\/]*\.)?stocking-tease-b7gl\.blogspot\.com
+https?:\/\/([^\/]*\.)?stocking-tease-com-bm6h145g\.blogspot\.com
+https?:\/\/([^\/]*\.)?stockings\.coz\.in
+https?:\/\/([^\/]*\.)?stop-smoking\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?stpetersburg\.it
+https?:\/\/([^\/]*\.)?stphipps\.dl\.pl
+https?:\/\/([^\/]*\.)?strakac\.dtdns\.net
+https?:\/\/([^\/]*\.)?strange-bizarre-things\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?stranieriinitalia\.org
+https?:\/\/([^\/]*\.)?straponpost\.net
+https?:\/\/([^\/]*\.)?street-poker\.com
+https?:\/\/([^\/]*\.)?streetmp3\.com
+https?:\/\/([^\/]*\.)?strega\.us
+https?:\/\/([^\/]*\.)?strip-tease-video-bb-bb-z\.blogspot\.com
+https?:\/\/([^\/]*\.)?strongsong\.republika\.pl
+https?:\/\/([^\/]*\.)?structure-settlement\.hotmail\.ru
+https?:\/\/([^\/]*\.)?sts\.ucsd\.edu
+https?:\/\/([^\/]*\.)?students\.hsc\.unt\.edu
+https?:\/\/([^\/]*\.)?study-us\.cn
+https?:\/\/([^\/]*\.)?stvincent\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?stydx\.szm\.sk
+https?:\/\/([^\/]*\.)?sublimedirectory-com-otb\.blogspot\.com
+https?:\/\/([^\/]*\.)?sublimemovies-com-wdvh2wmm3\.blogspot\.com
+https?:\/\/([^\/]*\.)?sublimepie-com-e8g3dw2\.blogspot\.com
+https?:\/\/([^\/]*\.)?sudanportal\.mrcc\.aast\.edu
+https?:\/\/([^\/]*\.)?suede-cowboy-boot\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?suicidexlove\.blogspot\.com
+https?:\/\/([^\/]*\.)?sumeshi0206\.dyndns\.org
+https?:\/\/([^\/]*\.)?sunaseth\.blogspot\.com
+https?:\/\/([^\/]*\.)?sunp\.com
+https?:\/\/([^\/]*\.)?sunporno-com-avbxn\.blogspot\.com
+https?:\/\/([^\/]*\.)?sunporno-com-go5\.blogspot\.com
+https?:\/\/([^\/]*\.)?sunsetdreamscondo\.com
+https?:\/\/([^\/]*\.)?sunsky365\.net
+https?:\/\/([^\/]*\.)?superadultdirect\.info
+https?:\/\/([^\/]*\.)?supercalcinhas-com-rij\.blogspot\.com
+https?:\/\/([^\/]*\.)?superdiosas-com-tm5k7f1v3\.blogspot\.com
+https?:\/\/([^\/]*\.)?superfinancesolutions\.com
+https?:\/\/([^\/]*\.)?supergirls\.pochta\.ru
+https?:\/\/([^\/]*\.)?superha\.angelcities\.com
+https?:\/\/([^\/]*\.)?superinsuranceworld\.info
+https?:\/\/([^\/]*\.)?superinternetexplorer\.info
+https?:\/\/([^\/]*\.)?supershare\.cn
+https?:\/\/([^\/]*\.)?suphost\.info
+https?:\/\/([^\/]*\.)?supplements\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?supplements\.mylonso\.be
+https?:\/\/([^\/]*\.)?supplierlist\.com
+https?:\/\/([^\/]*\.)?surfacing\.101freehost\.com
+https?:\/\/([^\/]*\.)?surmontil\.sblog\.cz
+https?:\/\/([^\/]*\.)?suxwyj-free-porn\.blogspot\.com
+https?:\/\/([^\/]*\.)?suzoro-amateur-sex-video\.blogspot\.com
+https?:\/\/([^\/]*\.)?suzulan\.blogspot\.com
+https?:\/\/([^\/]*\.)?svetys9i\.125mb\.com
+https?:\/\/([^\/]*\.)?svike\.info
+https?:\/\/([^\/]*\.)?swdella\.ifrance\.com
+https?:\/\/([^\/]*\.)?swechat\.republika\.pl
+https?:\/\/([^\/]*\.)?sweet-krissy\.babubi\.net
+https?:\/\/([^\/]*\.)?sweetpniangel87\.blogspot\.com
+https?:\/\/([^\/]*\.)?swingersadult\.net
+https?:\/\/([^\/]*\.)?sx\.nazari\.org
+https?:\/\/([^\/]*\.)?sx\.z0rz\.com
+https?:\/\/([^\/]*\.)?sxwliwe\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?sy-casino\.com
+https?:\/\/([^\/]*\.)?sygz\.51mp4mp3\.com
+https?:\/\/([^\/]*\.)?sylvan-queen\.iespana\.es
+https?:\/\/([^\/]*\.)?symphony\.8tt\.org
+https?:\/\/([^\/]*\.)?symptom-of-allergic-reaction-to-latex-condom\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?symy\.jp
+https?:\/\/([^\/]*\.)?synnin-viemaa\.blogspot\.com
+https?:\/\/([^\/]*\.)?sz-cj\.com
+https?:\/\/([^\/]*\.)?sz-dongtai\.com
+https?:\/\/([^\/]*\.)?sz-tianyicn\.com
+https?:\/\/([^\/]*\.)?sz4a\.cn
+https?:\/\/([^\/]*\.)?szarts\.com
+https?:\/\/([^\/]*\.)?szbeiyang\.net
+https?:\/\/([^\/]*\.)?szhangkong\.com
+https?:\/\/([^\/]*\.)?szhjc\.net
+https?:\/\/([^\/]*\.)?szhowfine\.com
+https?:\/\/([^\/]*\.)?szhx\.ebloggy\.com
+https?:\/\/([^\/]*\.)?szhxseo\.com
+https?:\/\/([^\/]*\.)?szjiuli\.com
+https?:\/\/([^\/]*\.)?szjiuli\.ebloggy\.com
+https?:\/\/([^\/]*\.)?szjpnet\.ebloggy\.com
+https?:\/\/([^\/]*\.)?szjyhk\.com
+https?:\/\/([^\/]*\.)?szlawyer\.home4u\.china\.com
+https?:\/\/([^\/]*\.)?szlichuang\.cn
+https?:\/\/([^\/]*\.)?szlszx\.com
+https?:\/\/([^\/]*\.)?sznuts\.cn
+https?:\/\/([^\/]*\.)?szpptc\.com
+https?:\/\/([^\/]*\.)?szsc-car\.com
+https?:\/\/([^\/]*\.)?szsfbq\.com
+https?:\/\/([^\/]*\.)?szyongjin\.ebloggy\.com
+https?:\/\/([^\/]*\.)?szzhuce\.home4u\.china\.com
+https?:\/\/([^\/]*\.)?t-sonnaya\.blogspot\.com
+https?:\/\/([^\/]*\.)?t-teens-for\.blogspot\.com
+https?:\/\/([^\/]*\.)?t\.tl
+https?:\/\/([^\/]*\.)?tabarlie\.forumzen\.com
+https?:\/\/([^\/]*\.)?tabgand\.info
+https?:\/\/([^\/]*\.)?tablitki\.xwiki\.com
+https?:\/\/([^\/]*\.)?taboo-porn-clip-blogeq2\.blogspot\.com
+https?:\/\/([^\/]*\.)?tackle\.247ihost\.com
+https?:\/\/([^\/]*\.)?tacomanissansubaru\.info
+https?:\/\/([^\/]*\.)?tactroc\.dl\.pl
+https?:\/\/([^\/]*\.)?tadalafil-\.ql\.st
+https?:\/\/([^\/]*\.)?tadalafil\.scanthenet\.com
+https?:\/\/([^\/]*\.)?tadalafil\.skocz\.net
+https?:\/\/([^\/]*\.)?tadalafil35\.lookscool\.com
+https?:\/\/([^\/]*\.)?taefis\.com
+https?:\/\/([^\/]*\.)?tagetboc\.darkbb\.com
+https?:\/\/([^\/]*\.)?talj5\.szm\.sk
+https?:\/\/([^\/]*\.)?tanoli\.su\.pl
+https?:\/\/([^\/]*\.)?tanorol\.dl\.pl
+https?:\/\/([^\/]*\.)?taouolo\.dl\.pl
+https?:\/\/([^\/]*\.)?tapz3\.szm\.sk
+https?:\/\/([^\/]*\.)?taracdom\.heavenforum\.com
+https?:\/\/([^\/]*\.)?tarfol\.com
+https?:\/\/([^\/]*\.)?target-oo6qbtx\.blogspot\.com
+https?:\/\/([^\/]*\.)?taria-m4j\.blogspot\.com
+https?:\/\/([^\/]*\.)?taricdam\.dynamicbb\.com
+https?:\/\/([^\/]*\.)?tarkupu\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?taroelt\.bb-fr\.com
+https?:\/\/([^\/]*\.)?tarra-i6vqa54v\.blogspot\.com
+https?:\/\/([^\/]*\.)?tart0938\.blogspot\.com
+https?:\/\/([^\/]*\.)?taryn-hgxikm27y\.blogspot\.com
+https?:\/\/([^\/]*\.)?tarzuf\.com
+https?:\/\/([^\/]*\.)?tasculio\.forumzen\.com
+https?:\/\/([^\/]*\.)?tasha-rup0n3a\.blogspot\.com
+https?:\/\/([^\/]*\.)?tashia-w1evjakk7\.blogspot\.com
+https?:\/\/([^\/]*\.)?tasia-emtoy\.blogspot\.com
+https?:\/\/([^\/]*\.)?tasimd\.com
+https?:\/\/([^\/]*\.)?tasizuwann-tm7y\.blogspot\.com
+https?:\/\/([^\/]*\.)?tasnin\.com
+https?:\/\/([^\/]*\.)?tate-dt\.blogspot\.com
+https?:\/\/([^\/]*\.)?tateyana-c8s1ms4ai\.blogspot\.com
+https?:\/\/([^\/]*\.)?tateyona-br48\.blogspot\.com
+https?:\/\/([^\/]*\.)?tatrocbas\.dl\.pl
+https?:\/\/([^\/]*\.)?tatrocmon\.dl\.pl
+https?:\/\/([^\/]*\.)?tattoo-ojqmc35d\.blogspot\.com
+https?:\/\/([^\/]*\.)?tatum-mlzsfqw\.blogspot\.com
+https?:\/\/([^\/]*\.)?tatumn-i4anj15\.blogspot\.com
+https?:\/\/([^\/]*\.)?tatyiana-kwg0ud8fqf\.blogspot\.com
+https?:\/\/([^\/]*\.)?tauntianna-h6\.blogspot\.com
+https?:\/\/([^\/]*\.)?taurus-gx\.blogspot\.com
+https?:\/\/([^\/]*\.)?tayamarn\.blogspot\.com
+https?:\/\/([^\/]*\.)?taydem-wdm6rxd328\.blogspot\.com
+https?:\/\/([^\/]*\.)?taydra-ejk45\.blogspot\.com
+https?:\/\/([^\/]*\.)?tayla-t7b\.blogspot\.com
+https?:\/\/([^\/]*\.)?tayler-cfez\.blogspot\.com
+https?:\/\/([^\/]*\.)?taylor-bof5\.blogspot\.com
+https?:\/\/([^\/]*\.)?taylorbow-com-il3f4ae\.blogspot\.com
+https?:\/\/([^\/]*\.)?taylorbow-com-inbg2nw\.blogspot\.com
+https?:\/\/([^\/]*\.)?taynafrates\.freetzi\.com
+https?:\/\/([^\/]*\.)?taysha-avsm8\.blogspot\.com
+https?:\/\/([^\/]*\.)?tazman-m6\.blogspot\.com
+https?:\/\/([^\/]*\.)?tbgbnt5\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?tbns\.net
+https?:\/\/([^\/]*\.)?tbrgxjv\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?tcsgn\.szm\.sk
+https?:\/\/([^\/]*\.)?tczxwwz\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?tczxxm6\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?tdzkzkt\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?tdzl\.sunp\.com
+https?:\/\/([^\/]*\.)?tea-imk7ry1\.blogspot\.com
+https?:\/\/([^\/]*\.)?tea-pot\.keckins\.be
+https?:\/\/([^\/]*\.)?teacher-fucking-free\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?teacher-km\.blogspot\.com
+https?:\/\/([^\/]*\.)?teaching1degree\.chat\.ru
+https?:\/\/([^\/]*\.)?teainfo\.org
+https?:\/\/([^\/]*\.)?teamsquirt-com-kjcj3u3i\.blogspot\.com
+https?:\/\/([^\/]*\.)?tear\.hostcroc\.com
+https?:\/\/([^\/]*\.)?tech-txyvo8\.blogspot\.com
+https?:\/\/([^\/]*\.)?tech\.china\.com
+https?:\/\/([^\/]*\.)?techinpet\.blogspot\.com
+https?:\/\/([^\/]*\.)?technical-school\.fromru\.com
+https?:\/\/([^\/]*\.)?technical-school\.hotmail\.ru
+https?:\/\/([^\/]*\.)?technical-school\.newmail\.ru
+https?:\/\/([^\/]*\.)?technical1school\.chat\.ru
+https?:\/\/([^\/]*\.)?teen-anal-cum-shot\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?teen-blonde-beauty\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?teen-blow-job-movie\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?teen-boob-fuck\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?teen-boob-porn\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?teen-buff\.net
+https?:\/\/([^\/]*\.)?teen-chick-masturbating\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?teen-facial-fuck\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?teen-feet-bew\.blogspot\.com
+https?:\/\/([^\/]*\.)?teen-internal-cum-shot\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?teen-kelly-lesbian\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?teen-movie\.freeinsite\.net
+https?:\/\/([^\/]*\.)?teen-porn-clip-newsyk6\.blogspot\.com
+https?:\/\/([^\/]*\.)?teen-sex-movie-f-d-t\.blogspot\.com
+https?:\/\/([^\/]*\.)?teen-sex-video-w8jpk\.blogspot\.com
+https?:\/\/([^\/]*\.)?teen-zips\.babubi\.net
+https?:\/\/([^\/]*\.)?teen6\.vdforum\.ru
+https?:\/\/([^\/]*\.)?teenax-b00\.blogspot\.com
+https?:\/\/([^\/]*\.)?teenax-com-pidoq\.blogspot\.com
+https?:\/\/([^\/]*\.)?teenax-com-rh0ssu62yh\.blogspot\.com
+https?:\/\/([^\/]*\.)?teenax-com-rke6\.blogspot\.com
+https?:\/\/([^\/]*\.)?teenbe-com-bdp\.blogspot\.com
+https?:\/\/([^\/]*\.)?teenbe-com-mb6x\.blogspot\.com
+https?:\/\/([^\/]*\.)?teenbe-com-mh03o\.blogspot\.com
+https?:\/\/([^\/]*\.)?teenblowjobs\.vdforum\.ru
+https?:\/\/([^\/]*\.)?teenboat-com-g6\.blogspot\.com
+https?:\/\/([^\/]*\.)?teenboat-com-g6f103r\.blogspot\.com
+https?:\/\/([^\/]*\.)?teenboat-com-mu1s7p\.blogspot\.com
+https?:\/\/([^\/]*\.)?teenboat-e76l\.blogspot\.com
+https?:\/\/([^\/]*\.)?teenboys-wel\.blogspot\.com
+https?:\/\/([^\/]*\.)?teenel-com-hhd\.blogspot\.com
+https?:\/\/([^\/]*\.)?teenel-com-hq0sgbm\.blogspot\.com
+https?:\/\/([^\/]*\.)?teeniefiles-com-g84lu\.blogspot\.com
+https?:\/\/([^\/]*\.)?teeniefiles-com-o43\.blogspot\.com
+https?:\/\/([^\/]*\.)?teeniefiles-com-ob782u\.blogspot\.com
+https?:\/\/([^\/]*\.)?teeniemovies-com-aptqg\.blogspot\.com
+https?:\/\/([^\/]*\.)?teeniemovies-com-as\.blogspot\.com
+https?:\/\/([^\/]*\.)?teeniemovies-com-hinof\.blogspot\.com
+https?:\/\/([^\/]*\.)?teeniesxxx-b00\.blogspot\.com
+https?:\/\/([^\/]*\.)?teenmodels\.hostingtree\.org
+https?:\/\/([^\/]*\.)?teenporn\.vdforum\.ru
+https?:\/\/([^\/]*\.)?teenpornrur\.blogspot\.com
+https?:\/\/([^\/]*\.)?teenpussyfhv\.blogspot\.com
+https?:\/\/([^\/]*\.)?teens-chat\.info
+https?:\/\/([^\/]*\.)?teens-list-b-all\.blogspot\.com
+https?:\/\/([^\/]*\.)?teenseven-com-c0jvb2z\.blogspot\.com
+https?:\/\/([^\/]*\.)?teensex-com-c4w3g\.blogspot\.com
+https?:\/\/([^\/]*\.)?teensex-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?teensex\.adultserv\.info
+https?:\/\/([^\/]*\.)?teensss-com-b8s44\.blogspot\.com
+https?:\/\/([^\/]*\.)?teensss-com-tds\.blogspot\.com
+https?:\/\/([^\/]*\.)?teensss-com-thrd\.blogspot\.com
+https?:\/\/([^\/]*\.)?teentera-com-d5j3qqs\.blogspot\.com
+https?:\/\/([^\/]*\.)?teentera-com-dyty5cv\.blogspot\.com
+https?:\/\/([^\/]*\.)?teentera-com-w65\.blogspot\.com
+https?:\/\/([^\/]*\.)?teentiger-com-e4e6i2f\.blogspot\.com
+https?:\/\/([^\/]*\.)?teentiger-com-eo602\.blogspot\.com
+https?:\/\/([^\/]*\.)?teentiger-com-fozol\.blogspot\.com
+https?:\/\/([^\/]*\.)?teeny-boppers-club-beg\.blogspot\.com
+https?:\/\/([^\/]*\.)?teenybopperclub-com-bgqk6ejjv\.blogspot\.com
+https?:\/\/([^\/]*\.)?teenybopperclub-com-bukb\.blogspot\.com
+https?:\/\/([^\/]*\.)?teenybopperclub-segod\.blogspot\.com
+https?:\/\/([^\/]*\.)?tegan-d1yagb\.blogspot\.com
+https?:\/\/([^\/]*\.)?tehxm\.szm\.sk
+https?:\/\/([^\/]*\.)?tehya-csxo8\.blogspot\.com
+https?:\/\/([^\/]*\.)?tehyana-bg3\.blogspot\.com
+https?:\/\/([^\/]*\.)?tekd8\.szm\.sk
+https?:\/\/([^\/]*\.)?tekiartur\.xhostar\.com
+https?:\/\/([^\/]*\.)?tekila-a5x7\.blogspot\.com
+https?:\/\/([^\/]*\.)?tela-ou3khz\.blogspot\.com
+https?:\/\/([^\/]*\.)?telenglish\.com\.cn
+https?:\/\/([^\/]*\.)?telephone-ip\.blogspot\.com
+https?:\/\/([^\/]*\.)?telnushka\.blogspot\.com
+https?:\/\/([^\/]*\.)?temazepam\.xwiki\.com
+https?:\/\/([^\/]*\.)?temma-k1n03ege\.blogspot\.com
+https?:\/\/([^\/]*\.)?temp-h33\.blogspot\.com
+https?:\/\/([^\/]*\.)?temptation-gujlu2\.blogspot\.com
+https?:\/\/([^\/]*\.)?ten-ra66722hs5\.blogspot\.com
+https?:\/\/([^\/]*\.)?tenea-w1\.blogspot\.com
+https?:\/\/([^\/]*\.)?tenisha-e6f\.blogspot\.com
+https?:\/\/([^\/]*\.)?tennasa-ttk2oqe4m\.blogspot\.com
+https?:\/\/([^\/]*\.)?tennesseemortgage-x\.com
+https?:\/\/([^\/]*\.)?tennille-dm\.blogspot\.com
+https?:\/\/([^\/]*\.)?tennis-ca8swtk\.blogspot\.com
+https?:\/\/([^\/]*\.)?tenor-saxophone-fingering\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?tenuate\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?teopoo\.dynamicforum\.net
+https?:\/\/([^\/]*\.)?teplomer\.dtdns\.net
+https?:\/\/([^\/]*\.)?tequila-be5\.blogspot\.com
+https?:\/\/([^\/]*\.)?teresanict-oorzzsxmjd\.blogspot\.com
+https?:\/\/([^\/]*\.)?teri-m84ywv38\.blogspot\.com
+https?:\/\/([^\/]*\.)?terika-i10\.blogspot\.com
+https?:\/\/([^\/]*\.)?term-paper\.fromru\.com
+https?:\/\/([^\/]*\.)?term-paper\.nm\.ru
+https?:\/\/([^\/]*\.)?term_paper\.chat\.ru
+https?:\/\/([^\/]*\.)?terminal-h0o2cfsibt\.blogspot\.com
+https?:\/\/([^\/]*\.)?terri-gqdjfrm33d\.blogspot\.com
+https?:\/\/([^\/]*\.)?terrianna-ru\.blogspot\.com
+https?:\/\/([^\/]*\.)?terrin-wmwxu3v\.blogspot\.com
+https?:\/\/([^\/]*\.)?terriona-erbvdaj\.blogspot\.com
+https?:\/\/([^\/]*\.)?terry-tqzto0ek\.blogspot\.com
+https?:\/\/([^\/]*\.)?terryikah-dhw46164c2\.blogspot\.com
+https?:\/\/([^\/]*\.)?terryiona-czcng\.blogspot\.com
+https?:\/\/([^\/]*\.)?terryn-b8p04mxhn2\.blogspot\.com
+https?:\/\/([^\/]*\.)?tess-oybaa0ng\.blogspot\.com
+https?:\/\/([^\/]*\.)?tessa-mugg\.blogspot\.com
+https?:\/\/([^\/]*\.)?test1\.com
+https?:\/\/([^\/]*\.)?test123-kpgwe3vie4\.blogspot\.com
+https?:\/\/([^\/]*\.)?test2-h6qofysx\.blogspot\.com
+https?:\/\/([^\/]*\.)?test2\.com
+https?:\/\/([^\/]*\.)?test3\.com
+https?:\/\/([^\/]*\.)?testmutherfucker\.com
+https?:\/\/([^\/]*\.)?testtest-g14\.blogspot\.com
+https?:\/\/([^\/]*\.)?tetteteent\.blogspot\.com
+https?:\/\/([^\/]*\.)?tettgwk\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?texas-hold-em-winner\.net
+https?:\/\/([^\/]*\.)?texas-hold-em\.black-poker\.com
+https?:\/\/([^\/]*\.)?texas-holdem-poker\.us\.com
+https?:\/\/([^\/]*\.)?texas-holdem-winner\.com
+https?:\/\/([^\/]*\.)?texas-holdem\.black-poker\.com
+https?:\/\/([^\/]*\.)?texas-rvmu1a0\.blogspot\.com
+https?:\/\/([^\/]*\.)?texas-va-loan\.com
+https?:\/\/([^\/]*\.)?texasdad\.com
+https?:\/\/([^\/]*\.)?texasholdem2\.com
+https?:\/\/([^\/]*\.)?texasholdemcenteral\.com
+https?:\/\/([^\/]*\.)?texasholdemsite\.net
+https?:\/\/([^\/]*\.)?texasmortgage-x\.com
+https?:\/\/([^\/]*\.)?teyana-wtpu\.blogspot\.com
+https?:\/\/([^\/]*\.)?teylore-ew24\.blogspot\.com
+https?:\/\/([^\/]*\.)?tez-teenybopperclub-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?tgao2\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?tgksg\.szm\.sk
+https?:\/\/([^\/]*\.)?tgp-movie-facial\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?tgpprincess\.net
+https?:\/\/([^\/]*\.)?tgpseeker\.net
+https?:\/\/([^\/]*\.)?thailand-t865\.blogspot\.com
+https?:\/\/([^\/]*\.)?thalia-d125yh\.blogspot\.com
+https?:\/\/([^\/]*\.)?thalya-cgjm\.blogspot\.com
+https?:\/\/([^\/]*\.)?thbxg\.szm\.sk
+https?:\/\/([^\/]*\.)?the-amberlady\.blogspot\.com
+https?:\/\/([^\/]*\.)?the-craftman\.blogspot\.com
+https?:\/\/([^\/]*\.)?the-female-orgasm-com-h1sx\.blogspot\.com
+https?:\/\/([^\/]*\.)?the-female-orgasm-com-h8qf5l27j\.blogspot\.com
+https?:\/\/([^\/]*\.)?the-most-biggest-boob-in-the-world\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?the-murderer\.blogspot\.com
+https?:\/\/([^\/]*\.)?the-roulette\.net
+https?:\/\/([^\/]*\.)?theaddedtouch\.net
+https?:\/\/([^\/]*\.)?theaf\.info
+https?:\/\/([^\/]*\.)?theaftor\.com
+https?:\/\/([^\/]*\.)?theag\.info
+https?:\/\/([^\/]*\.)?theap\.info
+https?:\/\/([^\/]*\.)?theas\.info
+https?:\/\/([^\/]*\.)?theat\.info
+https?:\/\/([^\/]*\.)?theaw\.info
+https?:\/\/([^\/]*\.)?thebestjaguar\.info
+https?:\/\/([^\/]*\.)?thebigswallow-com-khcs\.blogspot\.com
+https?:\/\/([^\/]*\.)?thebigswallow-com-kp3hmbl2e\.blogspot\.com
+https?:\/\/([^\/]*\.)?thebondbroker\.info
+https?:\/\/([^\/]*\.)?thecardinaleempire\.com
+https?:\/\/([^\/]*\.)?thechryslerjeep\.info
+https?:\/\/([^\/]*\.)?thedailywash\.blogspot\.com
+https?:\/\/([^\/]*\.)?thedrivingsite\.info
+https?:\/\/([^\/]*\.)?theente\.com
+https?:\/\/([^\/]*\.)?thefiatspider\.info
+https?:\/\/([^\/]*\.)?thehomeworkco\.com
+https?:\/\/([^\/]*\.)?theiconclub\.info
+https?:\/\/([^\/]*\.)?theillegalcause\.blogspot\.com
+https?:\/\/([^\/]*\.)?thejaguarracing\.cn
+https?:\/\/([^\/]*\.)?thejaguarracing\.info
+https?:\/\/([^\/]*\.)?theking-ox0p87\.blogspot\.com
+https?:\/\/([^\/]*\.)?theluckyman\.magnesia\.dtdns\.net
+https?:\/\/([^\/]*\.)?theman-mbvc\.blogspot\.com
+https?:\/\/([^\/]*\.)?themazdaspeed\.info
+https?:\/\/([^\/]*\.)?themoblogs\.com
+https?:\/\/([^\/]*\.)?theofe\.com
+https?:\/\/([^\/]*\.)?theorless\.com
+https?:\/\/([^\/]*\.)?theorrent\.com
+https?:\/\/([^\/]*\.)?thepartyplaza\.info
+https?:\/\/([^\/]*\.)?theresa-ipvfeka0y\.blogspot\.com
+https?:\/\/([^\/]*\.)?thesam118\.blogspot\.com
+https?:\/\/([^\/]*\.)?theseeall\.com
+https?:\/\/([^\/]*\.)?theslots\.biz
+https?:\/\/([^\/]*\.)?thesmart-casino\.com
+https?:\/\/([^\/]*\.)?thesportspark\.net
+https?:\/\/([^\/]*\.)?thessaloni-ka8qpmq7\.blogspot\.com
+https?:\/\/([^\/]*\.)?thestartrekuniverse\.net
+https?:\/\/([^\/]*\.)?thetexasholdpoker\.com
+https?:\/\/([^\/]*\.)?thetrafficproject\.com
+https?:\/\/([^\/]*\.)?thetruevoyeur-com-gkjz2m\.blogspot\.com
+https?:\/\/([^\/]*\.)?thetruevoyeur-com-gy0\.blogspot\.com
+https?:\/\/([^\/]*\.)?thetruevoyeur-com-iuswifnlo\.blogspot\.com
+https?:\/\/([^\/]*\.)?thewarhal\.com
+https?:\/\/([^\/]*\.)?thexe\.info
+https?:\/\/([^\/]*\.)?thexo\.info
+https?:\/\/([^\/]*\.)?thg\.org\.ua
+https?:\/\/([^\/]*\.)?thick-ass-movie\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?thick-ass-stripper\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?thick-black-ass-pic\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?thigh-boot-movie\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?thiyanna-hl74o5m\.blogspot\.com
+https?:\/\/([^\/]*\.)?thomarina-gt\.blogspot\.com
+https?:\/\/([^\/]*\.)?thomas-r6ik\.blogspot\.com
+https?:\/\/([^\/]*\.)?thomasina-wpcw\.blogspot\.com
+https?:\/\/([^\/]*\.)?thongbattle-com-rtrllksm\.blogspot\.com
+https?:\/\/([^\/]*\.)?thongbattle-com-rx2f2tcqrm\.blogspot\.com
+https?:\/\/([^\/]*\.)?thongdreams-com-w0r16sf\.blogspot\.com
+https?:\/\/([^\/]*\.)?thongdreams-com-wq50\.blogspot\.com
+https?:\/\/([^\/]*\.)?thongdreams-com-wx67\.blogspot\.com
+https?:\/\/([^\/]*\.)?thongdreams-com-xehiw\.blogspot\.com
+https?:\/\/([^\/]*\.)?thornblack-eq3a55o4\.blogspot\.com
+https?:\/\/([^\/]*\.)?three-to8p73\.blogspot\.com
+https?:\/\/([^\/]*\.)?threesforest\.blogspot\.com
+https?:\/\/([^\/]*\.)?thugs-djaox\.blogspot\.com
+https?:\/\/([^\/]*\.)?thugz-cqi0x7wkb6\.blogspot\.com
+https?:\/\/([^\/]*\.)?thumbzilla-com-mq\.blogspot\.com
+https?:\/\/([^\/]*\.)?thumbzilla-com-mqtw65e\.blogspot\.com
+https?:\/\/([^\/]*\.)?thumper-bs3t1\.blogspot\.com
+https?:\/\/([^\/]*\.)?thunder-aq\.blogspot\.com
+https?:\/\/([^\/]*\.)?thunder\.hostonmars\.com
+https?:\/\/([^\/]*\.)?thursday-om2jka\.blogspot\.com
+https?:\/\/([^\/]*\.)?thusqus\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?thx1138-mh86v55t2\.blogspot\.com
+https?:\/\/([^\/]*\.)?tia-icc0gbqhya\.blogspot\.com
+https?:\/\/([^\/]*\.)?tiahaat\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?tiahnna-kf24x7i4n\.blogspot\.com
+https?:\/\/([^\/]*\.)?tiaja-hr4ci\.blogspot\.com
+https?:\/\/([^\/]*\.)?tiana-g12f0\.blogspot\.com
+https?:\/\/([^\/]*\.)?tianna-r4s2r44e50\.blogspot\.com
+https?:\/\/([^\/]*\.)?tianti\.com\.cn
+https?:\/\/([^\/]*\.)?tiava-com-i60\.blogspot\.com
+https?:\/\/([^\/]*\.)?tiava-com-i73ph\.blogspot\.com
+https?:\/\/([^\/]*\.)?tiava-fiduh\.blogspot\.com
+https?:\/\/([^\/]*\.)?tiava-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?tiava-tqfgkv74\.blogspot\.com
+https?:\/\/([^\/]*\.)?tibisa-e5d1w5g\.blogspot\.com
+https?:\/\/([^\/]*\.)?ticket\.hostaim\.com
+https?:\/\/([^\/]*\.)?ticketcenter\.cn
+https?:\/\/([^\/]*\.)?tied-gay-bondage\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?tiepin\.my10gb\.com
+https?:\/\/([^\/]*\.)?tieteler\.jconserv\.net
+https?:\/\/([^\/]*\.)?tiffani-dvy3\.blogspot\.com
+https?:\/\/([^\/]*\.)?tiffany-b5arc\.blogspot\.com
+https?:\/\/([^\/]*\.)?tiffany-teen-video-ces\.blogspot\.com
+https?:\/\/([^\/]*\.)?tiffanyteen-a75atrdr\.blogspot\.com
+https?:\/\/([^\/]*\.)?tigers-ows\.blogspot\.com
+https?:\/\/([^\/]*\.)?tigger-muhul2h8\.blogspot\.com
+https?:\/\/([^\/]*\.)?tight-ik340a6f\.blogspot\.com
+https?:\/\/([^\/]*\.)?tight-tranny-ass\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?tightdelights-com-bayzdrm4r\.blogspot\.com
+https?:\/\/([^\/]*\.)?tightdelights-com-bproar5r\.blogspot\.com
+https?:\/\/([^\/]*\.)?tigre-k0qdp\.blogspot\.com
+https?:\/\/([^\/]*\.)?tijldebie\.net
+https?:\/\/([^\/]*\.)?tilneshia-r1\.blogspot\.com
+https?:\/\/([^\/]*\.)?timank\.com
+https?:\/\/([^\/]*\.)?timelee\.pp\.ru
+https?:\/\/([^\/]*\.)?timetopaynow\.com
+https?:\/\/([^\/]*\.)?timewill\.pp\.ru
+https?:\/\/([^\/]*\.)?timex-ironman\.leg4is\.be
+https?:\/\/([^\/]*\.)?timothy-tkd\.blogspot\.com
+https?:\/\/([^\/]*\.)?timsmovies-com-ck0iq6v\.blogspot\.com
+https?:\/\/([^\/]*\.)?timsmovies-com-cui64k6qv\.blogspot\.com
+https?:\/\/([^\/]*\.)?timyra-dy\.blogspot\.com
+https?:\/\/([^\/]*\.)?tina-ce\.blogspot\.com
+https?:\/\/([^\/]*\.)?tinman-bb4k610\.blogspot\.com
+https?:\/\/([^\/]*\.)?tintin-abz\.blogspot\.com
+https?:\/\/([^\/]*\.)?tiny-cock-blow-job\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?tiny18-net-e5zw0x8\.blogspot\.com
+https?:\/\/([^\/]*\.)?tiny18-net-thb44\.blogspot\.com
+https?:\/\/([^\/]*\.)?tiny18-net-tq5qwp\.blogspot\.com
+https?:\/\/([^\/]*\.)?tinyeve-net-d8ejy5\.blogspot\.com
+https?:\/\/([^\/]*\.)?tinyeve-net-dzjflb1\.blogspot\.com
+https?:\/\/([^\/]*\.)?tinysblackadventures-com-a61px\.blogspot\.com
+https?:\/\/([^\/]*\.)?tinysblackadventures-com-a638lqrud\.blogspot\.com
+https?:\/\/([^\/]*\.)?tipw\.org\.ua
+https?:\/\/([^\/]*\.)?tise2\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?titanium-ring\.boom\.ru
+https?:\/\/([^\/]*\.)?titanium-rings\.boom\.ru
+https?:\/\/([^\/]*\.)?titanium1ring\.chat\.ru
+https?:\/\/([^\/]*\.)?titanium4ring\.chat\.ru
+https?:\/\/([^\/]*\.)?titkis\.com
+https?:\/\/([^\/]*\.)?tittypalace-com-o352hny\.blogspot\.com
+https?:\/\/([^\/]*\.)?tiye-e5rhl\.blogspot\.com
+https?:\/\/([^\/]*\.)?tiyona-t4m7cq\.blogspot\.com
+https?:\/\/([^\/]*\.)?tizanidine\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?tj-d04qczfk\.blogspot\.com
+https?:\/\/([^\/]*\.)?tjbb1\.szm\.sk
+https?:\/\/([^\/]*\.)?tjjp\.left-page\.com
+https?:\/\/([^\/]*\.)?tjjp\.zxvo\.com
+https?:\/\/([^\/]*\.)?tjzhh\.com\.cn
+https?:\/\/([^\/]*\.)?tjzrr\.com
+https?:\/\/([^\/]*\.)?tkml\.tblog\.com
+https?:\/\/([^\/]*\.)?tknani\.50webs\.com
+https?:\/\/([^\/]*\.)?tkzrb\.szm\.sk
+https?:\/\/([^\/]*\.)?tladies\.net
+https?:\/\/([^\/]*\.)?tlchjhs\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?tldley4\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?tlhd3\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?tljsrq\.com
+https?:\/\/([^\/]*\.)?tlkdb\.szm\.sk
+https?:\/\/([^\/]*\.)?tmhbj\.com
+https?:\/\/([^\/]*\.)?tmobilenfn\.blogspot\.com
+https?:\/\/([^\/]*\.)?tmooeen-six\.blogspot\.com
+https?:\/\/([^\/]*\.)?tneccotnec\.fr-bb\.com
+https?:\/\/([^\/]*\.)?tnt163\.com
+https?:\/\/([^\/]*\.)?toggle-c0t3\.blogspot\.com
+https?:\/\/([^\/]*\.)?tohj3\.szm\.sk
+https?:\/\/([^\/]*\.)?tohqy\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?tokuctro\.forumzen\.com
+https?:\/\/([^\/]*\.)?tom-b56vx6b48\.blogspot\.com
+https?:\/\/([^\/]*\.)?tomato-a7e\.blogspot\.com
+https?:\/\/([^\/]*\.)?tomems\.125mb\.com
+https?:\/\/([^\/]*\.)?tommys-bookmarks-com-eeb0\.blogspot\.com
+https?:\/\/([^\/]*\.)?tommys-bookmarks-com-ev\.blogspot\.com
+https?:\/\/([^\/]*\.)?tomng\.info
+https?:\/\/([^\/]*\.)?tomsthumbs-com-ihj\.blogspot\.com
+https?:\/\/([^\/]*\.)?tomsthumbs-com-iqkobr\.blogspot\.com
+https?:\/\/([^\/]*\.)?ton4all\.com
+https?:\/\/([^\/]*\.)?tonea-m3t\.blogspot\.com
+https?:\/\/([^\/]*\.)?tonegativeone\.blogspot\.com
+https?:\/\/([^\/]*\.)?toniann-kr3\.blogspot\.com
+https?:\/\/([^\/]*\.)?tony-h3xs1\.blogspot\.com
+https?:\/\/([^\/]*\.)?tonya-g0x1\.blogspot\.com
+https?:\/\/([^\/]*\.)?toons-fuck-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?toor3\.szm\.sk
+https?:\/\/([^\/]*\.)?tootsie-rjg323oj2\.blogspot\.com
+https?:\/\/([^\/]*\.)?top-hold-em\.us
+https?:\/\/([^\/]*\.)?top-holdem\.com
+https?:\/\/([^\/]*\.)?top-holdem\.us
+https?:\/\/([^\/]*\.)?top-mp3\.biz
+https?:\/\/([^\/]*\.)?top\.pcanywhere\.net
+https?:\/\/([^\/]*\.)?topacio-w3fpzg\.blogspot\.com
+https?:\/\/([^\/]*\.)?topairlines\.ifrance\.com
+https?:\/\/([^\/]*\.)?topcelebs-com-hf34tmj\.blogspot\.com
+https?:\/\/([^\/]*\.)?topdasar\.com
+https?:\/\/([^\/]*\.)?topee\.info
+https?:\/\/([^\/]*\.)?topege\.com
+https?:\/\/([^\/]*\.)?topfarmasearch\.info
+https?:\/\/([^\/]*\.)?topgun-ef7gc204\.blogspot\.com
+https?:\/\/([^\/]*\.)?topless-babes-com-mq6hbe5uvq\.blogspot\.com
+https?:\/\/([^\/]*\.)?topo20\.org
+https?:\/\/([^\/]*\.)?topography-tuowheetle\.blogspot\.com
+https?:\/\/([^\/]*\.)?topozo\.org
+https?:\/\/([^\/]*\.)?topworldauto\.info
+https?:\/\/([^\/]*\.)?torey-dr343r\.blogspot\.com
+https?:\/\/([^\/]*\.)?tori-cmg8\.blogspot\.com
+https?:\/\/([^\/]*\.)?toriana-baui\.blogspot\.com
+https?:\/\/([^\/]*\.)?tornado-axe8uch1ar\.blogspot\.com
+https?:\/\/([^\/]*\.)?toronto-ox7aprp\.blogspot\.com
+https?:\/\/([^\/]*\.)?toropiz\.125mb\.com
+https?:\/\/([^\/]*\.)?torri-mrmj\.blogspot\.com
+https?:\/\/([^\/]*\.)?tortoise-iz\.blogspot\.com
+https?:\/\/([^\/]*\.)?torucnro\.jconserv\.net
+https?:\/\/([^\/]*\.)?tosuralz\.forumzen\.com
+https?:\/\/([^\/]*\.)?tottiona-k1zx8juj\.blogspot\.com
+https?:\/\/([^\/]*\.)?touya012\.blogspot\.com
+https?:\/\/([^\/]*\.)?town-china\.cn
+https?:\/\/([^\/]*\.)?toxic-h8jasyqt1\.blogspot\.com
+https?:\/\/([^\/]*\.)?toyota-g8\.blogspot\.com
+https?:\/\/([^\/]*\.)?tpwyc\.szm\.sk
+https?:\/\/([^\/]*\.)?tqdd7\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?tqnkaoi\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?tqrkf\.szm\.sk
+https?:\/\/([^\/]*\.)?traci-r30narn\.blogspot\.com
+https?:\/\/([^\/]*\.)?tracie-wskg17md\.blogspot\.com
+https?:\/\/([^\/]*\.)?trackting\.com
+https?:\/\/([^\/]*\.)?tractor-etae7hau1y\.blogspot\.com
+https?:\/\/([^\/]*\.)?tracy-kae\.babubi\.net
+https?:\/\/([^\/]*\.)?tracy-toe7\.blogspot\.com
+https?:\/\/([^\/]*\.)?traesha-d8u3731bb6\.blogspot\.com
+https?:\/\/([^\/]*\.)?traffit\.info
+https?:\/\/([^\/]*\.)?tralina-bvqz366sv\.blogspot\.com
+https?:\/\/([^\/]*\.)?tramadol-4u\.net
+https?:\/\/([^\/]*\.)?tramadol-911\.coz\.in
+https?:\/\/([^\/]*\.)?tramadol-bznz\.blogspot\.com
+https?:\/\/([^\/]*\.)?tramadol-cc\.blogspot\.com
+https?:\/\/([^\/]*\.)?tramadol-gs\.eu\.tc
+https?:\/\/([^\/]*\.)?tramadol-gs\.net\.tc
+https?:\/\/([^\/]*\.)?tramadol-online\.presteert\.nl
+https?:\/\/([^\/]*\.)?tramadol-wiki\.com
+https?:\/\/([^\/]*\.)?tramadol\.1\.forogratis\.es
+https?:\/\/([^\/]*\.)?tramadol\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?tramadol\.esguay\.com
+https?:\/\/([^\/]*\.)?tramadol\.fws1\.com
+https?:\/\/([^\/]*\.)?tramadol\.goodpharm\.info
+https?:\/\/([^\/]*\.)?tramadol\.knopkabablo\.info
+https?:\/\/([^\/]*\.)?tramadol\.presteert\.nl
+https?:\/\/([^\/]*\.)?tramadol\.skocz\.net
+https?:\/\/([^\/]*\.)?tramadol\.su\.pl
+https?:\/\/([^\/]*\.)?tramadol\.weboficial\.com
+https?:\/\/([^\/]*\.)?tramadol7\.php5\.cz
+https?:\/\/([^\/]*\.)?tramadolnx\.u\.yuku\.com
+https?:\/\/([^\/]*\.)?tramadolonline\.ovp\.pl
+https?:\/\/([^\/]*\.)?tramadolonlinez\.blogsome\.com
+https?:\/\/([^\/]*\.)?tramadolq\.bloggingmylife\.com
+https?:\/\/([^\/]*\.)?tramadols\.us\.tf
+https?:\/\/([^\/]*\.)?trami-a7oq4k1\.blogspot\.com
+https?:\/\/([^\/]*\.)?tramika-o4no\.blogspot\.com
+https?:\/\/([^\/]*\.)?tran-ma86bq3\.blogspot\.com
+https?:\/\/([^\/]*\.)?tranici\.info
+https?:\/\/([^\/]*\.)?tranlaura-ktn\.blogspot\.com
+https?:\/\/([^\/]*\.)?trannysurprise-com-ghn6k4r88\.blogspot\.com
+https?:\/\/([^\/]*\.)?trannysurprise-com-gq\.blogspot\.com
+https?:\/\/([^\/]*\.)?trannysurprise-com-i05csl\.blogspot\.com
+https?:\/\/([^\/]*\.)?transbiding\.com
+https?:\/\/([^\/]*\.)?transchinese\.com
+https?:\/\/([^\/]*\.)?transfer-h56d4zxl4\.blogspot\.com
+https?:\/\/([^\/]*\.)?translateatsh\.cn
+https?:\/\/([^\/]*\.)?translatebbs\.com
+https?:\/\/([^\/]*\.)?translateforcompany\.cn
+https?:\/\/([^\/]*\.)?traore-guh68nn\.blogspot\.com
+https?:\/\/([^\/]*\.)?trashnx\.datadiri\.cc
+https?:\/\/([^\/]*\.)?trastian-r1\.blogspot\.com
+https?:\/\/([^\/]*\.)?travel-blast\.com
+https?:\/\/([^\/]*\.)?travel-wa4g2\.blogspot\.com
+https?:\/\/([^\/]*\.)?travel\.globaltr\.info
+https?:\/\/([^\/]*\.)?travel2nursing\.chat\.ru
+https?:\/\/([^\/]*\.)?travelmarket\.mytravelsearch\.info
+https?:\/\/([^\/]*\.)?travis-ez8v\.blogspot\.com
+https?:\/\/([^\/]*\.)?tray-t5\.blogspot\.com
+https?:\/\/([^\/]*\.)?trbodel\.frbb\.net
+https?:\/\/([^\/]*\.)?trbusget\.forumzen\.com
+https?:\/\/([^\/]*\.)?trcchi\.td\.pl
+https?:\/\/([^\/]*\.)?trcota\.bb-fr\.com
+https?:\/\/([^\/]*\.)?trdombas\.blogcu\.com
+https?:\/\/([^\/]*\.)?trerdron\.discutfree\.com
+https?:\/\/([^\/]*\.)?trerdron\.dynamicforum\.net
+https?:\/\/([^\/]*\.)?tressa-a7w83sb\.blogspot\.com
+https?:\/\/([^\/]*\.)?tretinoingelbuy\.move\.to
+https?:\/\/([^\/]*\.)?tretinoingelbuycheap\.move\.to
+https?:\/\/([^\/]*\.)?tretinoingelbuygeneric\.drive\.to
+https?:\/\/([^\/]*\.)?tretinoingelcheap\.rulestheweb\.com
+https?:\/\/([^\/]*\.)?tretinoingelgeneric\.germany\.ms
+https?:\/\/([^\/]*\.)?trevisos\.org
+https?:\/\/([^\/]*\.)?trevor-obp5qlgdb\.blogspot\.com
+https?:\/\/([^\/]*\.)?trhlina\.republika\.pl
+https?:\/\/([^\/]*\.)?tribuna\.asp2\.cz
+https?:\/\/([^\/]*\.)?trident-m6wm\.blogspot\.com
+https?:\/\/([^\/]*\.)?trinbagoauto\.com
+https?:\/\/([^\/]*\.)?trinity-ikvstb\.blogspot\.com
+https?:\/\/([^\/]*\.)?triobuy\.vtost\.com
+https?:\/\/([^\/]*\.)?triphasil\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?tripto\.com
+https?:\/\/([^\/]*\.)?trisha-ksmv\.blogspot\.com
+https?:\/\/([^\/]*\.)?tristen-h2b1b1\.blogspot\.com
+https?:\/\/([^\/]*\.)?trivial-gk13on\.blogspot\.com
+https?:\/\/([^\/]*\.)?trixie-rkn\.blogspot\.com
+https?:\/\/([^\/]*\.)?trkucorc\.forumzen\.com
+https?:\/\/([^\/]*\.)?trlicut\.winnerforum\.net
+https?:\/\/([^\/]*\.)?trocacsit\.dl\.pl
+https?:\/\/([^\/]*\.)?troccvi\.darkbb\.com
+https?:\/\/([^\/]*\.)?trocdarc\.bb-fr\.com
+https?:\/\/([^\/]*\.)?troceltolo\.dl\.pl
+https?:\/\/([^\/]*\.)?trocoches\.info
+https?:\/\/([^\/]*\.)?trocrolac\.dl\.pl
+https?:\/\/([^\/]*\.)?troctrocro\.zj\.pl
+https?:\/\/([^\/]*\.)?trombone-wafnt\.blogspot\.com
+https?:\/\/([^\/]*\.)?trorolo\.ephpbb\.com
+https?:\/\/([^\/]*\.)?trorta\.blogcu\.com
+https?:\/\/([^\/]*\.)?trte2\.szm\.sk
+https?:\/\/([^\/]*\.)?trtrocli\.uy\.pl
+https?:\/\/([^\/]*\.)?trucks-t5rikxk1yk\.blogspot\.com
+https?:\/\/([^\/]*\.)?trumpet-d5846b6u\.blogspot\.com
+https?:\/\/([^\/]*\.)?trumst\.com
+https?:\/\/([^\/]*\.)?trzelor\.bbfr\.net
+https?:\/\/([^\/]*\.)?ts998\.com
+https?:\/\/([^\/]*\.)?tsc-clara\.hostingtree\.org
+https?:\/\/([^\/]*\.)?tsfzia5\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?tshirthell-com-h4dd14cx0g\.blogspot\.com
+https?:\/\/([^\/]*\.)?tshirthell-com-wbc\.blogspot\.com
+https?:\/\/([^\/]*\.)?tshirthell-com-wvayrpu2\.blogspot\.com
+https?:\/\/([^\/]*\.)?tslist-com-rwwi8zl\.blogspot\.com
+https?:\/\/([^\/]*\.)?tslist-com-ry\.blogspot\.com
+https?:\/\/([^\/]*\.)?tsoy7\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?tss-car\.com
+https?:\/\/([^\/]*\.)?tssuih5\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?tsvibak\.blogspot\.com
+https?:\/\/([^\/]*\.)?tt001\.com
+https?:\/\/([^\/]*\.)?tt002\.com
+https?:\/\/([^\/]*\.)?tt003\.com
+https?:\/\/([^\/]*\.)?tt004\.com
+https?:\/\/([^\/]*\.)?tt005\.com
+https?:\/\/([^\/]*\.)?tthumvir\.forumzen\.com
+https?:\/\/([^\/]*\.)?ttjpm\.szm\.sk
+https?:\/\/([^\/]*\.)?ttlive\.info
+https?:\/\/([^\/]*\.)?ttrgb\.szm\.sk
+https?:\/\/([^\/]*\.)?ttvpkp0\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?tu-wendi\.blogspot\.com
+https?:\/\/([^\/]*\.)?tubas-bc45h\.blogspot\.com
+https?:\/\/([^\/]*\.)?tuesday-anx780we1\.blogspot\.com
+https?:\/\/([^\/]*\.)?tufa\.info
+https?:\/\/([^\/]*\.)?tugjobs-com-kmr4pm\.blogspot\.com
+https?:\/\/([^\/]*\.)?tuhe-advil\.blogspot\.com
+https?:\/\/([^\/]*\.)?tulip123456\.ifrance\.com
+https?:\/\/([^\/]*\.)?turbo-o3f520u0jd\.blogspot\.com
+https?:\/\/([^\/]*\.)?turl\.jp
+https?:\/\/([^\/]*\.)?turtle-m6pr6y\.blogspot\.com
+https?:\/\/([^\/]*\.)?tuttle-i5\.blogspot\.com
+https?:\/\/([^\/]*\.)?tuttosport\.freespase\.info
+https?:\/\/([^\/]*\.)?tuubu\.szm\.sk
+https?:\/\/([^\/]*\.)?tv-bazzar\.com
+https?:\/\/([^\/]*\.)?twam0\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?tweety-k8z4spyz\.blogspot\.com
+https?:\/\/([^\/]*\.)?twelvalve\.blogspot\.com
+https?:\/\/([^\/]*\.)?twilightsex-cixeh\.blogspot\.com
+https?:\/\/([^\/]*\.)?twilightsex-com-o31qd\.blogspot\.com
+https?:\/\/([^\/]*\.)?twilightsex-com-op\.blogspot\.com
+https?:\/\/([^\/]*\.)?twins-hzhz\.blogspot\.com
+https?:\/\/([^\/]*\.)?twist-ga\.blogspot\.com
+https?:\/\/([^\/]*\.)?twister-r4\.blogspot\.com
+https?:\/\/([^\/]*\.)?two-lips-com-cfvn7fu3\.blogspot\.com
+https?:\/\/([^\/]*\.)?two-lips-com-cwk\.blogspot\.com
+https?:\/\/([^\/]*\.)?two-teen-kissing\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?two-wgn3t3\.blogspot\.com
+https?:\/\/([^\/]*\.)?twoq5\.szm\.sk
+https?:\/\/([^\/]*\.)?twxtbqn\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?txnpgc2\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?txvfpo7\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?tyepobv\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?tyj\.cwrjcn\.com
+https?:\/\/([^\/]*\.)?tyra-dna0lnjav\.blogspot\.com
+https?:\/\/([^\/]*\.)?tytiana-bjag\.blogspot\.com
+https?:\/\/([^\/]*\.)?tyvj5\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?uaobs\.szm\.sk
+https?:\/\/([^\/]*\.)?ub-mongolia\.mn
+https?:\/\/([^\/]*\.)?ubasak\.stabilt\.se
+https?:\/\/([^\/]*\.)?ubpmr\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ucdrun\.forumzen\.com
+https?:\/\/([^\/]*\.)?ucol2\.szm\.sk
+https?:\/\/([^\/]*\.)?udqhh\.szm\.sk
+https?:\/\/([^\/]*\.)?udtm7\.szm\.sk
+https?:\/\/([^\/]*\.)?uemhpgv\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?uglyjezz\.asp2\.cz
+https?:\/\/([^\/]*\.)?ugmhq\.szm\.sk
+https?:\/\/([^\/]*\.)?ukbettingweb\.com
+https?:\/\/([^\/]*\.)?ukek-hin\.isuisse\.com
+https?:\/\/([^\/]*\.)?ukrosi\.com
+https?:\/\/([^\/]*\.)?uksr9\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?ulqj9\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ultimateairpurifier\.com
+https?:\/\/([^\/]*\.)?ultimatesurrender-com-bkio\.blogspot\.com
+https?:\/\/([^\/]*\.)?ultimatesurrender-com-bm8z1b\.blogspot\.com
+https?:\/\/([^\/]*\.)?ultimatesurrender-com-c75r71j2e\.blogspot\.com
+https?:\/\/([^\/]*\.)?ultracet\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?ultradonkey-com-acp\.blogspot\.com
+https?:\/\/([^\/]*\.)?ultradonkey-com-ag0\.blogspot\.com
+https?:\/\/([^\/]*\.)?ultram-cc\.blogspot\.com
+https?:\/\/([^\/]*\.)?ultram\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?ultram\.47\.pl
+https?:\/\/([^\/]*\.)?ultram\.goodpharm\.info
+https?:\/\/([^\/]*\.)?ultram\.hav\.pl
+https?:\/\/([^\/]*\.)?ultram\.is-a-geek\.com
+https?:\/\/([^\/]*\.)?ultram\.serveftp\.com
+https?:\/\/([^\/]*\.)?ultram\.skocz\.net
+https?:\/\/([^\/]*\.)?ultrameds\.dtdns\.net
+https?:\/\/([^\/]*\.)?ultrams\.eu\.tf
+https?:\/\/([^\/]*\.)?ultrasexmovies-com-dm2dmh\.blogspot\.com
+https?:\/\/([^\/]*\.)?ultrasexmovies-com-dz02q7\.blogspot\.com
+https?:\/\/([^\/]*\.)?ultrasexmovies-com-zujuz\.blogspot\.com
+https?:\/\/([^\/]*\.)?umax-forum\.com
+https?:\/\/([^\/]*\.)?umax-ppc\.com
+https?:\/\/([^\/]*\.)?umax-se\.com
+https?:\/\/([^\/]*\.)?umax-se\.info
+https?:\/\/([^\/]*\.)?umax-search-ppc-se-board\.com
+https?:\/\/([^\/]*\.)?umax-search-se\.com
+https?:\/\/([^\/]*\.)?umax-search\.net
+https?:\/\/([^\/]*\.)?umaxppc\.com
+https?:\/\/([^\/]*\.)?umaxse\.net
+https?:\/\/([^\/]*\.)?umaxse\.org
+https?:\/\/([^\/]*\.)?umaxsearch-search-engine\.com
+https?:\/\/([^\/]*\.)?umojucd\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?umsbm\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?un-fois\.blogspot\.com
+https?:\/\/([^\/]*\.)?un-nachrichten\.de
+https?:\/\/([^\/]*\.)?unbelievable-poker\.com
+https?:\/\/([^\/]*\.)?uncledeadly83\.blogspot\.com
+https?:\/\/([^\/]*\.)?understandish\.50webs\.org
+https?:\/\/([^\/]*\.)?unglaublichkeiten\.com
+https?:\/\/([^\/]*\.)?unicom\.027168\.com
+https?:\/\/([^\/]*\.)?uniform2nursing\.chat\.ru
+https?:\/\/([^\/]*\.)?unit01\.com
+https?:\/\/([^\/]*\.)?united-airline\.boom\.ru
+https?:\/\/([^\/]*\.)?united24\.com
+https?:\/\/([^\/]*\.)?unitedinchristchurch\.org
+https?:\/\/([^\/]*\.)?universal-hosting\.net
+https?:\/\/([^\/]*\.)?university-degre\.boom\.ru
+https?:\/\/([^\/]*\.)?university1degre\.chat\.ru
+https?:\/\/([^\/]*\.)?unixbrewers\.org
+https?:\/\/([^\/]*\.)?unka\.su\.pl
+https?:\/\/([^\/]*\.)?unseenoyster\.blogspot\.com
+https?:\/\/([^\/]*\.)?unwqs\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?uobasdel\.fr-bb\.com
+https?:\/\/([^\/]*\.)?uokx8\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?uous6\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?up-skirt-butt\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?updatenames\.dtdns\.net
+https?:\/\/([^\/]*\.)?upskirt-ebony-teen\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?upskirt-gallery-leg\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?upskirtsexxfh\.blogspot\.com
+https?:\/\/([^\/]*\.)?upwaldru\.ifrance\.com
+https?:\/\/([^\/]*\.)?uraharaben1hime\.blogspot\.com
+https?:\/\/([^\/]*\.)?urkrdh5\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?urky5\.szm\.sk
+https?:\/\/([^\/]*\.)?us-senator-dick-durbin\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?us-viagra\.us
+https?:\/\/([^\/]*\.)?us\.kopuz\.com
+https?:\/\/([^\/]*\.)?usa-online-pharmacy\.net
+https?:\/\/([^\/]*\.)?usa568\.com
+https?:\/\/([^\/]*\.)?usaah\.com
+https?:\/\/([^\/]*\.)?usbestlawyer\.org
+https?:\/\/([^\/]*\.)?usbuorl\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?usednotebooks\.ru
+https?:\/\/([^\/]*\.)?ushoh\.szm\.sk
+https?:\/\/([^\/]*\.)?uskbbb9\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?usuc\.us
+https?:\/\/([^\/]*\.)?uszfp\.szm\.sk
+https?:\/\/([^\/]*\.)?utahmortgage-x\.com
+https?:\/\/([^\/]*\.)?utranslate\.org
+https?:\/\/([^\/]*\.)?utranslation\.net
+https?:\/\/([^\/]*\.)?uucwsw7\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?uulitr\.forumzen\.com
+https?:\/\/([^\/]*\.)?uulive\.info
+https?:\/\/([^\/]*\.)?uvfotuc\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?uvgpy\.szm\.sk
+https?:\/\/([^\/]*\.)?uvndhxh\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?uwacadweb\.uwyo\.edu
+https?:\/\/([^\/]*\.)?uwek\.info
+https?:\/\/([^\/]*\.)?uxyei\.szm\.sk
+https?:\/\/([^\/]*\.)?uyjdrg3\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?uzfde\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?uzzclm9\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?v-f-sex-video-clip-g\.blogspot\.com
+https?:\/\/([^\/]*\.)?v-j-big-movie-tit-v\.blogspot\.com
+https?:\/\/([^\/]*\.)?v1h\.com
+https?:\/\/([^\/]*\.)?v5wednesday\.info
+https?:\/\/([^\/]*\.)?v7njlwgd\.nokedem\.com
+https?:\/\/([^\/]*\.)?vacanza-barcellona\.zoom10x\.info
+https?:\/\/([^\/]*\.)?vacanza-montagna\.freespase\.info
+https?:\/\/([^\/]*\.)?vacanza-neve\.zoom4x\.info
+https?:\/\/([^\/]*\.)?vacanza-toscana\.host24h\.info
+https?:\/\/([^\/]*\.)?vacuums\.be
+https?:\/\/([^\/]*\.)?vahitchc\.dl\.pl
+https?:\/\/([^\/]*\.)?valiubusines\.blogcu\.com
+https?:\/\/([^\/]*\.)?valium-911\.coz\.in
+https?:\/\/([^\/]*\.)?valium-cc\.blogspot\.com
+https?:\/\/([^\/]*\.)?valium-cheap\.18\.to
+https?:\/\/([^\/]*\.)?valium-online\.cheapills\.info
+https?:\/\/([^\/]*\.)?valium-qrxo\.blogspot\.com
+https?:\/\/([^\/]*\.)?valium\.269g\.net
+https?:\/\/([^\/]*\.)?valium\.47\.pl
+https?:\/\/([^\/]*\.)?valium\.goodpharm\.info
+https?:\/\/([^\/]*\.)?valium\.skocz\.net
+https?:\/\/([^\/]*\.)?valium\.su\.pl
+https?:\/\/([^\/]*\.)?valiumnx\.u\.yuku\.com
+https?:\/\/([^\/]*\.)?valiums\.eu\.tf
+https?:\/\/([^\/]*\.)?valleyswap\.info
+https?:\/\/([^\/]*\.)?valtrex\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?vametase\.com
+https?:\/\/([^\/]*\.)?vands88\.blogspot\.com
+https?:\/\/([^\/]*\.)?vanhelsingsgirl\.datadiri\.cc
+https?:\/\/([^\/]*\.)?vaniqa\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?varac\.heavenforum\.com
+https?:\/\/([^\/]*\.)?varac\.highforum\.net
+https?:\/\/([^\/]*\.)?varelvi\.discutfree\.com
+https?:\/\/([^\/]*\.)?varnish\.8888mb\.com
+https?:\/\/([^\/]*\.)?varnotr\.naturalforum\.net
+https?:\/\/([^\/]*\.)?varoracel\.bbfr\.net
+https?:\/\/([^\/]*\.)?varracleto\.dl\.pl
+https?:\/\/([^\/]*\.)?vazicoj\.info
+https?:\/\/([^\/]*\.)?vboya\.9999mb\.com
+https?:\/\/([^\/]*\.)?vcjwc\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?vcpk9\.szm\.sk
+https?:\/\/([^\/]*\.)?vcsps\.com
+https?:\/\/([^\/]*\.)?vdpf4\.szm\.sk
+https?:\/\/([^\/]*\.)?ve-alisa\.blogspot\.com
+https?:\/\/([^\/]*\.)?vegetnuks\.blogspot\.com
+https?:\/\/([^\/]*\.)?veggis\.org\.cn
+https?:\/\/([^\/]*\.)?vehal\.com
+https?:\/\/([^\/]*\.)?vek-xxxpower-net\.blogspot\.com
+https?:\/\/([^\/]*\.)?velvetimalice\.ibelgique\.com
+https?:\/\/([^\/]*\.)?vemiles\.ifrance\.com
+https?:\/\/([^\/]*\.)?verba\.dyndns\.dk
+https?:\/\/([^\/]*\.)?verfolva\.blogspot\.com
+https?:\/\/([^\/]*\.)?veriel\.dl\.pl
+https?:\/\/([^\/]*\.)?verizonringtonersy\.blogspot\.com
+https?:\/\/([^\/]*\.)?verizonringtonesdvf\.blogspot\.com
+https?:\/\/([^\/]*\.)?vermontmortgage-x\.com
+https?:\/\/([^\/]*\.)?vertyg\.org
+https?:\/\/([^\/]*\.)?veryge\.com
+https?:\/\/([^\/]*\.)?veryprivatebanking\.info
+https?:\/\/([^\/]*\.)?vestuk\.com
+https?:\/\/([^\/]*\.)?veterinar\.spb\.ru
+https?:\/\/([^\/]*\.)?vets\.appliedphysics\.swri\.edu
+https?:\/\/([^\/]*\.)?vfrkiv6\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?vfrrto\.org
+https?:\/\/([^\/]*\.)?vhuekxi\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?vi-allo\.blogspot\.com
+https?:\/\/([^\/]*\.)?viadele\.dl\.pl
+https?:\/\/([^\/]*\.)?viagaravaegra\.com
+https?:\/\/([^\/]*\.)?viaggi-del-ventaglio\.forumhst\.info
+https?:\/\/([^\/]*\.)?viagra-4u\.us
+https?:\/\/([^\/]*\.)?viagra-online\.presteert\.nl
+https?:\/\/([^\/]*\.)?viagra-soft-tabs\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?viagra\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?viagra\.cheapills\.info
+https?:\/\/([^\/]*\.)?viagra\.edu\.tf
+https?:\/\/([^\/]*\.)?viagra\.esguay\.com
+https?:\/\/([^\/]*\.)?viagra\.inc5\.com
+https?:\/\/([^\/]*\.)?viagra\.rx4\.org
+https?:\/\/([^\/]*\.)?viagra\.skocz\.net
+https?:\/\/([^\/]*\.)?viagrai\.blogspot\.com
+https?:\/\/([^\/]*\.)?viagraorder\.mail15\.com
+https?:\/\/([^\/]*\.)?viagraq\.bloggingmylife\.com
+https?:\/\/([^\/]*\.)?viagrarx\.weboficial\.com
+https?:\/\/([^\/]*\.)?vicodin-pharm\.fws1\.com
+https?:\/\/([^\/]*\.)?vicodin\.269g\.net
+https?:\/\/([^\/]*\.)?vicodin\.conto\.pl
+https?:\/\/([^\/]*\.)?vicodin\.esguay\.com
+https?:\/\/([^\/]*\.)?vicodin\.guu\.pl
+https?:\/\/([^\/]*\.)?vicodin88\.tblog\.com
+https?:\/\/([^\/]*\.)?victoria-silvstedt\.freehostss\.info
+https?:\/\/([^\/]*\.)?videlric\.dl\.pl
+https?:\/\/([^\/]*\.)?video-comico\.host24h\.info
+https?:\/\/([^\/]*\.)?video-porn-caseros-ju\.blogspot\.com
+https?:\/\/([^\/]*\.)?video-porn-gratis-sod\.blogspot\.com
+https?:\/\/([^\/]*\.)?video-post-com-bejiq\.blogspot\.com
+https?:\/\/([^\/]*\.)?video-post-com-bfoybt\.blogspot\.com
+https?:\/\/([^\/]*\.)?video-post-com-my\.blogspot\.com
+https?:\/\/([^\/]*\.)?video-post-com-thumbview-rehif\.blogspot\.com
+https?:\/\/([^\/]*\.)?video-spot-sexy\.19mb\.info
+https?:\/\/([^\/]*\.)?video-spot-sexy\.you-bizz\.info
+https?:\/\/([^\/]*\.)?video-whore-bb-bb-b\.blogspot\.com
+https?:\/\/([^\/]*\.)?videosection-com-h0xon\.blogspot\.com
+https?:\/\/([^\/]*\.)?videosection-com-w1w\.blogspot\.com
+https?:\/\/([^\/]*\.)?videosection-com-w62l\.blogspot\.com
+https?:\/\/([^\/]*\.)?videosharez\.com
+https?:\/\/([^\/]*\.)?vidgals-com-e13sc4yv0\.blogspot\.com
+https?:\/\/([^\/]*\.)?vidgals-com-e6ig7a\.blogspot\.com
+https?:\/\/([^\/]*\.)?vidgals-com-edvo\.blogspot\.com
+https?:\/\/([^\/]*\.)?vidronla\.blogcu\.com
+https?:\/\/([^\/]*\.)?vielsit\.su\.pl
+https?:\/\/([^\/]*\.)?vietnamparadisetravel\.com
+https?:\/\/([^\/]*\.)?viewerswives-net-c4\.blogspot\.com
+https?:\/\/([^\/]*\.)?viewerswives-net-oc\.blogspot\.com
+https?:\/\/([^\/]*\.)?viewgals-com-ah\.blogspot\.com
+https?:\/\/([^\/]*\.)?viewgals-com-il253r\.blogspot\.com
+https?:\/\/([^\/]*\.)?vigduk30\.xshorturl\.com
+https?:\/\/([^\/]*\.)?vigetleto\.heavenforum\.com
+https?:\/\/([^\/]*\.)?vihl6\.szm\.sk
+https?:\/\/([^\/]*\.)?viliolo\.winnerforum\.net
+https?:\/\/([^\/]*\.)?village\.asp2\.cz
+https?:\/\/([^\/]*\.)?villaggio-ischia\.ll11\.info
+https?:\/\/([^\/]*\.)?vinnie-1-hit\.blogspot\.com
+https?:\/\/([^\/]*\.)?vintage\.sexcluborgy\.net
+https?:\/\/([^\/]*\.)?vioxx\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?vioxx\.3d-game\.com
+https?:\/\/([^\/]*\.)?vipasrel\.cultureforum\.net
+https?:\/\/([^\/]*\.)?vipcrew-com-bj\.blogspot\.com
+https?:\/\/([^\/]*\.)?vipcrew-com-r0w\.blogspot\.com
+https?:\/\/([^\/]*\.)?vipcrew-com-rs74r7iy5\.blogspot\.com
+https?:\/\/([^\/]*\.)?viphls\.com
+https?:\/\/([^\/]*\.)?vipliz\.com
+https?:\/\/([^\/]*\.)?vipmsite\.com
+https?:\/\/([^\/]*\.)?virgin-porn\.futureblog\.org
+https?:\/\/([^\/]*\.)?virgin-sexy\.com
+https?:\/\/([^\/]*\.)?virginfucked-com-h200n1lxcg\.blogspot\.com
+https?:\/\/([^\/]*\.)?virginiamortgage-x\.com
+https?:\/\/([^\/]*\.)?viricrel\.lolbb\.com
+https?:\/\/([^\/]*\.)?virinok\.dynamicforum\.net
+https?:\/\/([^\/]*\.)?virtualeinfiniti\.cn
+https?:\/\/([^\/]*\.)?vitalitymax\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?vivino\.ephpbb\.com
+https?:\/\/([^\/]*\.)?vizelvar\.frbb\.net
+https?:\/\/([^\/]*\.)?vjkavu6\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?vjsgby0\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?vjuk7\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?vjwm2\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?vkblq\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?vksfucm\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?vmdes\.com
+https?:\/\/([^\/]*\.)?vmpi4\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?vmvip\.com
+https?:\/\/([^\/]*\.)?vmvip\.net
+https?:\/\/([^\/]*\.)?vmvip\.org
+https?:\/\/([^\/]*\.)?vo-free-oral-movie-clip-toc\.blogspot\.com
+https?:\/\/([^\/]*\.)?voip-guide\.org
+https?:\/\/([^\/]*\.)?vol-soft17-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?voli-amsterdam\.freespase\.info
+https?:\/\/([^\/]*\.)?voli-argentina\.zoom10x\.info
+https?:\/\/([^\/]*\.)?voli-londra\.freespase\.info
+https?:\/\/([^\/]*\.)?voli-spagna\.freespase\.info
+https?:\/\/([^\/]*\.)?volume5\.8888mb\.com
+https?:\/\/([^\/]*\.)?voxn2\.szm\.sk
+https?:\/\/([^\/]*\.)?voyeur-video-amateur-free\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?voyeurzine-com-af2\.blogspot\.com
+https?:\/\/([^\/]*\.)?voyeurzine-com-dbhx1q\.blogspot\.com
+https?:\/\/([^\/]*\.)?voyiu\.szm\.sk
+https?:\/\/([^\/]*\.)?vpbu1\.szm\.sk
+https?:\/\/([^\/]*\.)?vrlw9\.szm\.sk
+https?:\/\/([^\/]*\.)?vrnjgk1\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?vstqfs3\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?vtop\.fateback\.com
+https?:\/\/([^\/]*\.)?vtop\.kilu\.de
+https?:\/\/([^\/]*\.)?vtop\.topcities\.com
+https?:\/\/([^\/]*\.)?vtrxzzwj-teensite\.blogspot\.com
+https?:\/\/([^\/]*\.)?vttolldd\.org
+https?:\/\/([^\/]*\.)?vttthtgg\.org
+https?:\/\/([^\/]*\.)?vtwm7\.szm\.sk
+https?:\/\/([^\/]*\.)?vu-alias\.blogspot\.com
+https?:\/\/([^\/]*\.)?vu-aliases\.blogspot\.com
+https?:\/\/([^\/]*\.)?vu-free-big-sex-movie-fen\.blogspot\.com
+https?:\/\/([^\/]*\.)?vud-vipcrew-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?vue\.uit\.tufts\.edu
+https?:\/\/([^\/]*\.)?vulgarisprime\.50webs\.org
+https?:\/\/([^\/]*\.)?vuqi-alana\.blogspot\.com
+https?:\/\/([^\/]*\.)?vutwwd6\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?vuzeq-sex-video-d\.blogspot\.com
+https?:\/\/([^\/]*\.)?vvaliumonline\.ovp\.pl
+https?:\/\/([^\/]*\.)?vvline\.info
+https?:\/\/([^\/]*\.)?vwjr2\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?vwzm6\.szm\.sk
+https?:\/\/([^\/]*\.)?vyqdvf1\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?vyuf9\.szm\.sk
+https?:\/\/([^\/]*\.)?vzevz\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?w-q-elmo-extreme-video-n\.blogspot\.com
+https?:\/\/([^\/]*\.)?w-s-free-gay-sex-video-l\.blogspot\.com
+https?:\/\/([^\/]*\.)?w2\.ftpcn\.cn
+https?:\/\/([^\/]*\.)?w528\.com
+https?:\/\/([^\/]*\.)?wacks\.info
+https?:\/\/([^\/]*\.)?wak1ngmel0dies\.blogspot\.com
+https?:\/\/([^\/]*\.)?walker-ross\.com
+https?:\/\/([^\/]*\.)?walkerproconsulting\.com
+https?:\/\/([^\/]*\.)?walt-disney-world-travel\.globaltr\.info
+https?:\/\/([^\/]*\.)?wanadoo-fr-eyn6u1yt0\.blogspot\.com
+https?:\/\/([^\/]*\.)?wanadoo-fr-gsz\.blogspot\.com
+https?:\/\/([^\/]*\.)?wanadoo-fr-i0iq\.blogspot\.com
+https?:\/\/([^\/]*\.)?wannawatch-com-k1rckf8\.blogspot\.com
+https?:\/\/([^\/]*\.)?wannawatch-com-krz7dxd5a\.blogspot\.com
+https?:\/\/([^\/]*\.)?wannawatch-com-oaeedr\.blogspot\.com
+https?:\/\/([^\/]*\.)?wapzhijia\.com
+https?:\/\/([^\/]*\.)?waserk\.com
+https?:\/\/([^\/]*\.)?washingtonmortgage-x\.com
+https?:\/\/([^\/]*\.)?watch-free-porn-clip-zone43l\.blogspot\.com
+https?:\/\/([^\/]*\.)?watch-free-porn-clip-zonekjl\.blogspot\.com
+https?:\/\/([^\/]*\.)?watch-free-porn-video-bu\.blogspot\.com
+https?:\/\/([^\/]*\.)?watchersweb-com-t61o4wrr4h\.blogspot\.com
+https?:\/\/([^\/]*\.)?watchersweb-com-tnwrlyoqk\.blogspot\.com
+https?:\/\/([^\/]*\.)?watchingthetube\.com
+https?:\/\/([^\/]*\.)?water\.toxhost\.com
+https?:\/\/([^\/]*\.)?waxen\.kwik\.to
+https?:\/\/([^\/]*\.)?wbun7\.szm\.sk
+https?:\/\/([^\/]*\.)?wc1\.worldcrossing\.com
+https?:\/\/([^\/]*\.)?we-alfred\.blogspot\.com
+https?:\/\/([^\/]*\.)?we-alondra\.blogspot\.com
+https?:\/\/([^\/]*\.)?we-lesbian-video-download\.blogspot\.com
+https?:\/\/([^\/]*\.)?web\.missouri\.edu
+https?:\/\/([^\/]*\.)?web\.scc\.losrios\.edu
+https?:\/\/([^\/]*\.)?web\.skku\.edu
+https?:\/\/([^\/]*\.)?web55\.info
+https?:\/\/([^\/]*\.)?webhost11\.com
+https?:\/\/([^\/]*\.)?webhosting-x\.com
+https?:\/\/([^\/]*\.)?weblog\.xanga\.com
+https?:\/\/([^\/]*\.)?webmd-drugs\.com
+https?:\/\/([^\/]*\.)?websz\.com
+https?:\/\/([^\/]*\.)?wedding-knot\.com
+https?:\/\/([^\/]*\.)?weddingactions\.com
+https?:\/\/([^\/]*\.)?wedner\.info
+https?:\/\/([^\/]*\.)?weekly-pay\.com
+https?:\/\/([^\/]*\.)?weersa\.com
+https?:\/\/([^\/]*\.)?weight-loss\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?weixing\.hk\.cn
+https?:\/\/([^\/]*\.)?welisi\.hk
+https?:\/\/([^\/]*\.)?welivetogether-com-ek6boac\.blogspot\.com
+https?:\/\/([^\/]*\.)?welivetogether-com-oc7yzd4ev\.blogspot\.com
+https?:\/\/([^\/]*\.)?welivetogether-com-wcu8\.blogspot\.com
+https?:\/\/([^\/]*\.)?wellbutrin\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?wellbutrin\.php5\.cz
+https?:\/\/([^\/]*\.)?wenmasterworld\.com
+https?:\/\/([^\/]*\.)?werdq\.com
+https?:\/\/([^\/]*\.)?wess\.250free\.com
+https?:\/\/([^\/]*\.)?westvirginiamortgage-x\.com
+https?:\/\/([^\/]*\.)?wet-mature-slut\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?wet-pussy-cum-shot\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?wet-teen-panties-wen\.blogspot\.com
+https?:\/\/([^\/]*\.)?wetplace-com-g16jfp6\.blogspot\.com
+https?:\/\/([^\/]*\.)?wfkd3\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?wgxq2\.szm\.sk
+https?:\/\/([^\/]*\.)?whipped-ass-slut\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?whipsnorkel\.275mb\.com
+https?:\/\/([^\/]*\.)?white-guys-fucking-black-teen\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?whitehole\.republika\.pl
+https?:\/\/([^\/]*\.)?wholesale-scooter\.hotmail\.ru
+https?:\/\/([^\/]*\.)?whorevideos-com-hj8shgp\.blogspot\.com
+https?:\/\/([^\/]*\.)?whorevideos-com-wddx\.blogspot\.com
+https?:\/\/([^\/]*\.)?whorevideos-txe5g0x\.blogspot\.com
+https?:\/\/([^\/]*\.)?whpsjw1\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?whss0\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?wierdporno-com-kur70yvrl0\.blogspot\.com
+https?:\/\/([^\/]*\.)?wifi-planet\.org
+https?:\/\/([^\/]*\.)?wiku-aikman\.blogspot\.com
+https?:\/\/([^\/]*\.)?wild-party-fuck\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?wild-poker\.com
+https?:\/\/([^\/]*\.)?willeyfordmazda\.info
+https?:\/\/([^\/]*\.)?win-for-italy\.info
+https?:\/\/([^\/]*\.)?wind\.8888mb\.com
+https?:\/\/([^\/]*\.)?winter-gossamer\.blogspot\.com
+https?:\/\/([^\/]*\.)?winter\.12gbfree\.com
+https?:\/\/([^\/]*\.)?wired-shemales\.lampa\.ipupdater\.com
+https?:\/\/([^\/]*\.)?wiremesh-guanda\.com
+https?:\/\/([^\/]*\.)?wisconsinmortgage-x\.com
+https?:\/\/([^\/]*\.)?wisdom123\.com
+https?:\/\/([^\/]*\.)?wisewomanguide\.com
+https?:\/\/([^\/]*\.)?wisnp\.szm\.sk
+https?:\/\/([^\/]*\.)?wix-timsmovies-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?wizingsh\.dl\.pl
+https?:\/\/([^\/]*\.)?wjch5\.szm\.sk
+https?:\/\/([^\/]*\.)?wjhh9\.szm\.sk
+https?:\/\/([^\/]*\.)?wjjk0\.szm\.sk
+https?:\/\/([^\/]*\.)?wjsueg-free-video\.blogspot\.com
+https?:\/\/([^\/]*\.)?wkelleylucas\.com
+https?:\/\/([^\/]*\.)?wkfsi774k\.org
+https?:\/\/([^\/]*\.)?wljp9\.szm\.sk
+https?:\/\/([^\/]*\.)?wm-u\.com
+https?:\/\/([^\/]*\.)?wmis\.com\.cn
+https?:\/\/([^\/]*\.)?wmlpv\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?wmtnd\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?wnwr5\.szm\.sk
+https?:\/\/([^\/]*\.)?woilco6\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?wolflist-com-rkj7d3\.blogspot\.com
+https?:\/\/([^\/]*\.)?wolverine-steel-toe-work-boot\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?woman-masturbating-man\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?woman-who-can-lick-their-own-pussy\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?woman-who-fuck-donkey\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?woman-with-prosthetic-leg\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?womansmith\.com
+https?:\/\/([^\/]*\.)?women-fitness\.org
+https?:\/\/([^\/]*\.)?womens-hard-nipples\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?womens-snake-boot\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?woolygrrl\.blogspot\.com
+https?:\/\/([^\/]*\.)?worldsex-com-byzv1xjl\.blogspot\.com
+https?:\/\/([^\/]*\.)?worldsex-com-eqn4b\.blogspot\.com
+https?:\/\/([^\/]*\.)?worldtalktv\.net\.ru
+https?:\/\/([^\/]*\.)?worldufo\.net\.ru
+https?:\/\/([^\/]*\.)?worldwide-games\.net
+https?:\/\/([^\/]*\.)?worldwide-online-pharmacy\.net
+https?:\/\/([^\/]*\.)?worldwide-tramadol\.net
+https?:\/\/([^\/]*\.)?woro-adriana\.blogspot\.com
+https?:\/\/([^\/]*\.)?wot-smutgremlins-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?wow-gold\.dinmo\.cn
+https?:\/\/([^\/]*\.)?wow-powerleveling-wow\.com
+https?:\/\/([^\/]*\.)?wowgold\.org\.cn
+https?:\/\/([^\/]*\.)?wowtgp-com-ap4y\.blogspot\.com
+https?:\/\/([^\/]*\.)?wowvids-com-ooiofshz5\.blogspot\.com
+https?:\/\/([^\/]*\.)?woww0\.szm\.sk
+https?:\/\/([^\/]*\.)?wpgt1\.szm\.sk
+https?:\/\/([^\/]*\.)?wpnvjk9\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?wqhnog2\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?wqr\.cn
+https?:\/\/([^\/]*\.)?wrnf9\.szm\.sk
+https?:\/\/([^\/]*\.)?wshcroq\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?wsuonline\.weber\.edu
+https?:\/\/([^\/]*\.)?wszqc\.szm\.sk
+https?:\/\/([^\/]*\.)?wtrpfpa\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?wuconweb\.wustl\.edu
+https?:\/\/([^\/]*\.)?wujin\.dzsc\.com
+https?:\/\/([^\/]*\.)?wulzi\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?wvuf0\.szm\.sk
+https?:\/\/([^\/]*\.)?wvwd6\.szm\.sk
+https?:\/\/([^\/]*\.)?wwfedgechristian\.com
+https?:\/\/([^\/]*\.)?wwlive\.info
+https?:\/\/([^\/]*\.)?wwtop\.info
+https?:\/\/([^\/]*\.)?www-girlygangbang-com\.magnesia\.dtdns\.net
+https?:\/\/([^\/]*\.)?www-loadmymouth-com\.klose\.ipupdater\.com
+https?:\/\/([^\/]*\.)?www-shemales-from-hell-com\.magnesia\.dtdns\.net
+https?:\/\/([^\/]*\.)?www\.aet\.cup\.edu
+https?:\/\/([^\/]*\.)?www\.ags\.uci\.edu
+https?:\/\/([^\/]*\.)?www\.chaco\.gov\.ar
+https?:\/\/([^\/]*\.)?www\.coe\.ohio-state\.edu
+https?:\/\/([^\/]*\.)?www\.csulb\.edu
+https?:\/\/([^\/]*\.)?www\.cucsur\.udg\.mx
+https?:\/\/([^\/]*\.)?www\.depts\.ttu\.edu
+https?:\/\/([^\/]*\.)?www\.elie\.com\.cn
+https?:\/\/([^\/]*\.)?www\.forourbano\.gov\.ar
+https?:\/\/([^\/]*\.)?www\.grad\.english\.ttu\.edu
+https?:\/\/([^\/]*\.)?www\.hcs\.harvard\.edu
+https?:\/\/([^\/]*\.)?www\.health-livening\.com
+https?:\/\/([^\/]*\.)?www\.imperial\.edu
+https?:\/\/([^\/]*\.)?www\.isis\.vanderbilt\.edu
+https?:\/\/([^\/]*\.)?www\.leal-alfa\.upc\.edu
+https?:\/\/([^\/]*\.)?www\.ns\.ui\.edu
+https?:\/\/([^\/]*\.)?www\.oswego\.edu
+https?:\/\/([^\/]*\.)?www\.oznet\.ksu\.edu
+https?:\/\/([^\/]*\.)?www\.polisci\.berkeley\.edu
+https?:\/\/([^\/]*\.)?www\.redwingnet\.com
+https?:\/\/([^\/]*\.)?www\.rit\.edu
+https?:\/\/([^\/]*\.)?www\.rso\.cmich\.edu
+https?:\/\/([^\/]*\.)?www\.sccs\.swarthmore\.edu
+https?:\/\/([^\/]*\.)?www\.sportsbackers\.org
+https?:\/\/([^\/]*\.)?www\.tamug\.edu
+https?:\/\/([^\/]*\.)?www\.ug\.it\.usyd\.edu\.au
+https?:\/\/([^\/]*\.)?www\.uky\.edu
+https?:\/\/([^\/]*\.)?www\.wvup\.edu
+https?:\/\/([^\/]*\.)?www1\.freehostingguru\.com
+https?:\/\/([^\/]*\.)?www2\.cs\.washington\.edu
+https?:\/\/([^\/]*\.)?www3\.ddns\.ms
+https?:\/\/([^\/]*\.)?www4\.epac\.to
+https?:\/\/([^\/]*\.)?www4\.nau\.edu
+https?:\/\/([^\/]*\.)?www4\.vjc\.edu
+https?:\/\/([^\/]*\.)?www6\.ezua\.com
+https?:\/\/([^\/]*\.)?www6\.ns1\.name
+https?:\/\/([^\/]*\.)?www69\.bestdeals\.at
+https?:\/\/([^\/]*\.)?www69\.byinter\.net
+https?:\/\/([^\/]*\.)?www69\.dynu\.com
+https?:\/\/([^\/]*\.)?www69\.findhere\.org
+https?:\/\/([^\/]*\.)?www69\.fw\.nu
+https?:\/\/([^\/]*\.)?www69\.ugly\.as
+https?:\/\/([^\/]*\.)?www7\.25u\.com
+https?:\/\/([^\/]*\.)?www7\.ygto\.com
+https?:\/\/([^\/]*\.)?www8\.ns01\.us
+https?:\/\/([^\/]*\.)?www9\.servequake\.com
+https?:\/\/([^\/]*\.)?www9\.trickip\.org
+https?:\/\/([^\/]*\.)?www99\.bounceme\.net
+https?:\/\/([^\/]*\.)?www99\.zapto\.org
+https?:\/\/([^\/]*\.)?wwweazol\.znamka\.yi\.org
+https?:\/\/([^\/]*\.)?wwwmenozac\.gumaky\.yi\.org
+https?:\/\/([^\/]*\.)?wwwpeterscumshotscom\.jalovica\.dtdns\.net
+https?:\/\/([^\/]*\.)?wwwpornweekcom\.lampa\.ipupdater\.com
+https?:\/\/([^\/]*\.)?wwwtheluckymancom\.hrable\.dtdns\.net
+https?:\/\/([^\/]*\.)?wxcl6\.szm\.sk
+https?:\/\/([^\/]*\.)?wxmbv\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?wxsbjx\.com
+https?:\/\/([^\/]*\.)?wxzgyb\.com
+https?:\/\/([^\/]*\.)?wy-ls\.com
+https?:\/\/([^\/]*\.)?wyeax\.szm\.sk
+https?:\/\/([^\/]*\.)?wyloguj\.php5\.cz
+https?:\/\/([^\/]*\.)?wyomingmortgage-x\.com
+https?:\/\/([^\/]*\.)?wywurxj\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?wzcub\.szm\.sk
+https?:\/\/([^\/]*\.)?wzhj\.com\.cn
+https?:\/\/([^\/]*\.)?wzhjom6\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?wzlsx\.com
+https?:\/\/([^\/]*\.)?x-cialis\.be
+https?:\/\/([^\/]*\.)?x-ho-com-m23lsy\.blogspot\.com
+https?:\/\/([^\/]*\.)?x-ho-com-mlk2tai422\.blogspot\.com
+https?:\/\/([^\/]*\.)?x-orgy-com-in7nn0o1\.blogspot\.com
+https?:\/\/([^\/]*\.)?x24\.xxuz\.com
+https?:\/\/([^\/]*\.)?x25\.2mydns\.com
+https?:\/\/([^\/]*\.)?x25\.plorp\.com
+https?:\/\/([^\/]*\.)?x4\.lov3\.net
+https?:\/\/([^\/]*\.)?x6x\.a\.la
+https?:\/\/([^\/]*\.)?x888x\.myserver\.org
+https?:\/\/([^\/]*\.)?x8x\.trickip\.net
+https?:\/\/([^\/]*\.)?xadultpersonals\.com
+https?:\/\/([^\/]*\.)?xafengyuan\.com
+https?:\/\/([^\/]*\.)?xaltc\.szm\.sk
+https?:\/\/([^\/]*\.)?xanax-911\.coz\.in
+https?:\/\/([^\/]*\.)?xanax-acpq\.blogspot\.com
+https?:\/\/([^\/]*\.)?xanax-ccc\.blogspot\.com
+https?:\/\/([^\/]*\.)?xanax-lyiy\.blogspot\.com
+https?:\/\/([^\/]*\.)?xanax-online\.cheapills\.info
+https?:\/\/([^\/]*\.)?xanax\.esguay\.com
+https?:\/\/([^\/]*\.)?xanax\.goodpharm\.info
+https?:\/\/([^\/]*\.)?xanax\.skocz\.net
+https?:\/\/([^\/]*\.)?xanax\.su\.pl
+https?:\/\/([^\/]*\.)?xanaxnx\.u\.yuku\.com
+https?:\/\/([^\/]*\.)?xawcj\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?xboct13\.blogspot\.com
+https?:\/\/([^\/]*\.)?xbyzkngo-teensite\.blogspot\.com
+https?:\/\/([^\/]*\.)?xcp\.51mp4mp3\.com
+https?:\/\/([^\/]*\.)?xd-fw\.com
+https?:\/\/([^\/]*\.)?xdwxs\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?xdzs\.com\.cn
+https?:\/\/([^\/]*\.)?xef-publicinvasion-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?xejedot-sophie-marceau-c\.blogspot\.com
+https?:\/\/([^\/]*\.)?xelby0\.blogspot\.com
+https?:\/\/([^\/]*\.)?xenical\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?xenical\.1k\.pl
+https?:\/\/([^\/]*\.)?xenicallem\.queroumforum\.com
+https?:\/\/([^\/]*\.)?xfdr7\.szm\.sk
+https?:\/\/([^\/]*\.)?xfokcw0\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?xgdlfj\.com
+https?:\/\/([^\/]*\.)?xhttp\.net
+https?:\/\/([^\/]*\.)?xian-hua\.nease\.net
+https?:\/\/([^\/]*\.)?xiangyujipiao\.com
+https?:\/\/([^\/]*\.)?xibch\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?xih-snakesworld-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?xih-topless-babes-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?xihdl\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?xionny\.cn
+https?:\/\/([^\/]*\.)?xitokiry\.blogspot\.com
+https?:\/\/([^\/]*\.)?xiwhr\.szm\.sk
+https?:\/\/([^\/]*\.)?xjenhx\.blogspot\.com
+https?:\/\/([^\/]*\.)?xlala\.com
+https?:\/\/([^\/]*\.)?xlale\.com
+https?:\/\/([^\/]*\.)?xlalu\.com
+https?:\/\/([^\/]*\.)?xlvc3\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?xlxx-com-i0xeru\.blogspot\.com
+https?:\/\/([^\/]*\.)?xlxx-fokiq\.blogspot\.com
+https?:\/\/([^\/]*\.)?xlxx-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?xmail\.net
+https?:\/\/([^\/]*\.)?xmodem-mal\.blogspot\.com
+https?:\/\/([^\/]*\.)?xnbs1\.szm\.sk
+https?:\/\/([^\/]*\.)?xnews\.soad\.umich\.edu
+https?:\/\/([^\/]*\.)?xnxx-com-e06t\.blogspot\.com
+https?:\/\/([^\/]*\.)?xnxx-crcdfs0jy6\.blogspot\.com
+https?:\/\/([^\/]*\.)?xnxxmovies-com-bv10g2\.blogspot\.com
+https?:\/\/([^\/]*\.)?xnxxmovies-com-wv\.blogspot\.com
+https?:\/\/([^\/]*\.)?xo-whatever\.blogspot\.com
+https?:\/\/([^\/]*\.)?xolz4\.szm\.sk
+https?:\/\/([^\/]*\.)?xometi\.com
+https?:\/\/([^\/]*\.)?xonlinedating\.com
+https?:\/\/([^\/]*\.)?xoomer\.alice\.it
+https?:\/\/([^\/]*\.)?xparamacy\.org
+https?:\/\/([^\/]*\.)?xpharmacy\.org
+https?:\/\/([^\/]*\.)?xqnqh\.szm\.sk
+https?:\/\/([^\/]*\.)?xr\.bz
+https?:\/\/([^\/]*\.)?xsecrets-com-kyms\.blogspot\.com
+https?:\/\/([^\/]*\.)?xsgr7\.szm\.sk
+https?:\/\/([^\/]*\.)?xshorturl\.info
+https?:\/\/([^\/]*\.)?xsyvh\.szm\.sk
+https?:\/\/([^\/]*\.)?xt168\.com
+https?:\/\/([^\/]*\.)?xudo-akira\.blogspot\.com
+https?:\/\/([^\/]*\.)?xujwy\.szm\.sk
+https?:\/\/([^\/]*\.)?xun-screwedupmovies-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?xvbbols\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?xvec\.com
+https?:\/\/([^\/]*\.)?xvnj5\.szm\.sk
+https?:\/\/([^\/]*\.)?xwsdr\.szm\.sk
+https?:\/\/([^\/]*\.)?xxellaxx\.250free\.com
+https?:\/\/([^\/]*\.)?xxhk2\.szm\.sk
+https?:\/\/([^\/]*\.)?xxlmovies-com-gswie\.blogspot\.com
+https?:\/\/([^\/]*\.)?xxlmovies-com-m7rg0g8viu\.blogspot\.com
+https?:\/\/([^\/]*\.)?xxlmovies-mcorb4\.blogspot\.com
+https?:\/\/([^\/]*\.)?xxufdm-free-video\.blogspot\.com
+https?:\/\/([^\/]*\.)?xxx-mature-movie-gallery\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?xxx-pic-blonde\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?xxx-porn-clip-blogn0y\.blogspot\.com
+https?:\/\/([^\/]*\.)?xxx0movie\.info
+https?:\/\/([^\/]*\.)?xxx1adult1video\.blogspot\.com
+https?:\/\/([^\/]*\.)?xxx1clip\.blogspot\.com
+https?:\/\/([^\/]*\.)?xxx1movie\.blogspot\.com
+https?:\/\/([^\/]*\.)?xxx1video\.blogspot\.com
+https?:\/\/([^\/]*\.)?xxxdessert-com-rl7e3\.blogspot\.com
+https?:\/\/([^\/]*\.)?xxxfolder-com-h3126\.blogspot\.com
+https?:\/\/([^\/]*\.)?xxxkey-com-ma\.blogspot\.com
+https?:\/\/([^\/]*\.)?xxxlost\.info
+https?:\/\/([^\/]*\.)?xxxphenterm1nen0w\.tripod\.com
+https?:\/\/([^\/]*\.)?xxxpornstarclassics-com-cezx51lw8\.blogspot\.com
+https?:\/\/([^\/]*\.)?xxxpornstarclassics-com-d2ttwy\.blogspot\.com
+https?:\/\/([^\/]*\.)?xxxpower-net-aped3c1xa\.blogspot\.com
+https?:\/\/([^\/]*\.)?xxxproposal-com-b06etpw\.blogspot\.com
+https?:\/\/([^\/]*\.)?xxxvogue-hux\.blogspot\.com
+https?:\/\/([^\/]*\.)?xxxvogue-net-oe2t1p081c\.blogspot\.com
+https?:\/\/([^\/]*\.)?xxxvogue-net-qerij\.blogspot\.com
+https?:\/\/([^\/]*\.)?xyz-i2\.blogspot\.com
+https?:\/\/([^\/]*\.)?xyzzy-k7c37b5tuw\.blogspot\.com
+https?:\/\/([^\/]*\.)?xzc\.org\.ua
+https?:\/\/([^\/]*\.)?xzgang-bangorgy\.hav\.pl
+https?:\/\/([^\/]*\.)?xznylonlycra\.hav\.pl
+https?:\/\/([^\/]*\.)?xzrapeextreme\.hav\.pl
+https?:\/\/([^\/]*\.)?xzzoodogsex\.hav\.pl
+https?:\/\/([^\/]*\.)?y--e--s\.com
+https?:\/\/([^\/]*\.)?ya\.ru
+https?:\/\/([^\/]*\.)?yaahoeu\.com
+https?:\/\/([^\/]*\.)?yaco-hbkklx6ltp\.blogspot\.com
+https?:\/\/([^\/]*\.)?yahia-g3x\.blogspot\.com
+https?:\/\/([^\/]*\.)?yaho-rei6\.blogspot\.com
+https?:\/\/([^\/]*\.)?yahoochat-w11g7\.blogspot\.com
+https?:\/\/([^\/]*\.)?yale-eui5rgcu\.blogspot\.com
+https?:\/\/([^\/]*\.)?yamaha-scooter\.hotmail\.ru
+https?:\/\/([^\/]*\.)?yamaha-t46nzou\.blogspot\.com
+https?:\/\/([^\/]*\.)?yamaha2scooter\.chat\.ru
+https?:\/\/([^\/]*\.)?yamel-da\.blogspot\.com
+https?:\/\/([^\/]*\.)?yamil-c1n2ob52\.blogspot\.com
+https?:\/\/([^\/]*\.)?yamonee-bqcyojq\.blogspot\.com
+https?:\/\/([^\/]*\.)?yang-as\.blogspot\.com
+https?:\/\/([^\/]*\.)?yankees-o3\.blogspot\.com
+https?:\/\/([^\/]*\.)?yasashisa\.blogspot\.com
+https?:\/\/([^\/]*\.)?yashun-i63\.blogspot\.com
+https?:\/\/([^\/]*\.)?yasin-kfn0g\.blogspot\.com
+https?:\/\/([^\/]*\.)?yaskap\.com
+https?:\/\/([^\/]*\.)?yasmin-hovn5q\.blogspot\.com
+https?:\/\/([^\/]*\.)?yasmin\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?yazar-rnzt\.blogspot\.com
+https?:\/\/([^\/]*\.)?yblwoh-free-video\.blogspot\.com
+https?:\/\/([^\/]*\.)?ycft3\.szm\.sk
+https?:\/\/([^\/]*\.)?ycixxgt\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ycsv1\.szm\.sk
+https?:\/\/([^\/]*\.)?ydyofrj\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ydyp\.left-web\.com
+https?:\/\/([^\/]*\.)?ydyp\.zxvo\.com
+https?:\/\/([^\/]*\.)?yehuo\.cn
+https?:\/\/([^\/]*\.)?yell0w-n1njaman\.blogspot\.com
+https?:\/\/([^\/]*\.)?yellow-wc4pxnc\.blogspot\.com
+https?:\/\/([^\/]*\.)?yellowstone-e4b\.blogspot\.com
+https?:\/\/([^\/]*\.)?yes-t2cfk28\.blogspot\.com
+https?:\/\/([^\/]*\.)?yesenia-dip5700iq\.blogspot\.com
+https?:\/\/([^\/]*\.)?yessenia-c0ue443\.blogspot\.com
+https?:\/\/([^\/]*\.)?yetbarek-b31fe\.blogspot\.com
+https?:\/\/([^\/]*\.)?yfojo\.szm\.sk
+https?:\/\/([^\/]*\.)?yfxy2\.szm\.sk
+https?:\/\/([^\/]*\.)?yhmh\.vip\.myrice\.com
+https?:\/\/([^\/]*\.)?yi-gan\.com
+https?:\/\/([^\/]*\.)?yicloqd\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?yiqiyibiao\.dzsc\.com
+https?:\/\/([^\/]*\.)?yisroel-a5dk2rzyvx\.blogspot\.com
+https?:\/\/([^\/]*\.)?yjyvm\.szm\.sk
+https?:\/\/([^\/]*\.)?ymaby\.info
+https?:\/\/([^\/]*\.)?yncharm\.com
+https?:\/\/([^\/]*\.)?ynij1\.szm\.sk
+https?:\/\/([^\/]*\.)?ynkbb\.szm\.sk
+https?:\/\/([^\/]*\.)?ynndy\.szm\.sk
+https?:\/\/([^\/]*\.)?ynztp\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?yoda-oz08ueg\.blogspot\.com
+https?:\/\/([^\/]*\.)?yoel-mu5ej\.blogspot\.com
+https?:\/\/([^\/]*\.)?yogee\.info
+https?:\/\/([^\/]*\.)?yojany-iu3bpg2\.blogspot\.com
+https?:\/\/([^\/]*\.)?yolanda-k1\.blogspot\.com
+https?:\/\/([^\/]*\.)?yomama-hmsa\.blogspot\.com
+https?:\/\/([^\/]*\.)?yongxun\.net
+https?:\/\/([^\/]*\.)?yosemite-gf77c0ggp\.blogspot\.com
+https?:\/\/([^\/]*\.)?yoshi-in-black\.blogspot\.com
+https?:\/\/([^\/]*\.)?yosuke-r8aua1\.blogspot\.com
+https?:\/\/([^\/]*\.)?young-anal-fuck\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?young-anal-sex\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?young-blonde-slut\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?young-britney\.babubi\.net
+https?:\/\/([^\/]*\.)?young-cheerleader-pic\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?young-chubby-pussy\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?young-ffm\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?young-lesbian-having-sex\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?young-sex\.futureblog\.org
+https?:\/\/([^\/]*\.)?young-teen-girl-anal\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?young-tender\.info
+https?:\/\/([^\/]*\.)?young-wqn\.blogspot\.com
+https?:\/\/([^\/]*\.)?youngerbabes-com-d1fem\.blogspot\.com
+https?:\/\/([^\/]*\.)?youngerbabes-com-dpdc\.blogspot\.com
+https?:\/\/([^\/]*\.)?youngerbabes-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?youngleafs-eh2a6kcze\.blogspot\.com
+https?:\/\/([^\/]*\.)?youngpervs-com-wdh\.blogspot\.com
+https?:\/\/([^\/]*\.)?youngshemalesex\.com
+https?:\/\/([^\/]*\.)?your-online-health\.com
+https?:\/\/([^\/]*\.)?your-starry-sky\.blogspot\.com
+https?:\/\/([^\/]*\.)?yourbudgetcar\.info
+https?:\/\/([^\/]*\.)?yourbusinesshouston\.info
+https?:\/\/([^\/]*\.)?yourchryslersebring\.info
+https?:\/\/([^\/]*\.)?yourgunter\.com
+https?:\/\/([^\/]*\.)?yourhealthypharmacy\.com
+https?:\/\/([^\/]*\.)?yourlust-com-rttu8a0a\.blogspot\.com
+https?:\/\/([^\/]*\.)?yourmazdacar\.info
+https?:\/\/([^\/]*\.)?yourmerchandise\.org
+https?:\/\/([^\/]*\.)?yourofe\.com
+https?:\/\/([^\/]*\.)?yrada\.flnet\.org
+https?:\/\/([^\/]*\.)?yrecnfz\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?yrgs2\.szm\.sk
+https?:\/\/([^\/]*\.)?yronc\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ysvc0\.szm\.sk
+https?:\/\/([^\/]*\.)?ytdebao\.com
+https?:\/\/([^\/]*\.)?ytgf84j\.nokedem\.com
+https?:\/\/([^\/]*\.)?ythsq\.com
+https?:\/\/([^\/]*\.)?ytifexil\.org
+https?:\/\/([^\/]*\.)?ytlmc\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ytwoqlj\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?yucaibooks\.com
+https?:\/\/([^\/]*\.)?yuebing\.com
+https?:\/\/([^\/]*\.)?yume-taira\.blogspot\.com
+https?:\/\/([^\/]*\.)?yuniel-ebyd5\.blogspot\.com
+https?:\/\/([^\/]*\.)?yunmak\.com
+https?:\/\/([^\/]*\.)?yushantang\.com
+https?:\/\/([^\/]*\.)?yvette-tshq577\.blogspot\.com
+https?:\/\/([^\/]*\.)?yvonte-dyv02l\.blogspot\.com
+https?:\/\/([^\/]*\.)?yvpwh\.szm\.sk
+https?:\/\/([^\/]*\.)?ywnid\.szm\.sk
+https?:\/\/([^\/]*\.)?ywuyuan\.com
+https?:\/\/([^\/]*\.)?ywxjm\.com
+https?:\/\/([^\/]*\.)?yycp\.com
+https?:\/\/([^\/]*\.)?yylive\.info
+https?:\/\/([^\/]*\.)?yyys\.com\.cn
+https?:\/\/([^\/]*\.)?z411\.net
+https?:\/\/([^\/]*\.)?za\.spamim\.net
+https?:\/\/([^\/]*\.)?zabavna9sy4ka\.biografi\.org
+https?:\/\/([^\/]*\.)?zaccary-ciworog\.blogspot\.com
+https?:\/\/([^\/]*\.)?zachariah-bebg88d2x\.blogspot\.com
+https?:\/\/([^\/]*\.)?zacharias-a0kmh1em7\.blogspot\.com
+https?:\/\/([^\/]*\.)?zacharygen-okno4540\.blogspot\.com
+https?:\/\/([^\/]*\.)?zacherie-m82qs0617\.blogspot\.com
+https?:\/\/([^\/]*\.)?zack-ir368\.blogspot\.com
+https?:\/\/([^\/]*\.)?zackari-kkcdz8\.blogspot\.com
+https?:\/\/([^\/]*\.)?zackarylee-h4qu\.blogspot\.com
+https?:\/\/([^\/]*\.)?zackerize-ge\.blogspot\.com
+https?:\/\/([^\/]*\.)?zahtavia-riy3\.blogspot\.com
+https?:\/\/([^\/]*\.)?zaid-wi0g\.blogspot\.com
+https?:\/\/([^\/]*\.)?zaidimar-ej\.blogspot\.com
+https?:\/\/([^\/]*\.)?zainab-t46we0w3y\.blogspot\.com
+https?:\/\/([^\/]*\.)?zakaria-c5j57crpj7\.blogspot\.com
+https?:\/\/([^\/]*\.)?zanaflex\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?zanuda-juja\.blogspot\.com
+https?:\/\/([^\/]*\.)?zap-ar2fzu\.blogspot\.com
+https?:\/\/([^\/]*\.)?zara-oze5dt\.blogspot\.com
+https?:\/\/([^\/]*\.)?zarat\.php5\.cz
+https?:\/\/([^\/]*\.)?zatowana-m5hsah3h\.blogspot\.com
+https?:\/\/([^\/]*\.)?zaxswq\.com
+https?:\/\/([^\/]*\.)?zayfa\.com
+https?:\/\/([^\/]*\.)?zazu-ikzc0402\.blogspot\.com
+https?:\/\/([^\/]*\.)?zbbi8\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?zbifhoep\.t35\.com
+https?:\/\/([^\/]*\.)?zbjyzm1\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?zbrown\.org
+https?:\/\/([^\/]*\.)?zbwk\.com
+https?:\/\/([^\/]*\.)?zcld\.net
+https?:\/\/([^\/]*\.)?zdei\.nokedem\.com
+https?:\/\/([^\/]*\.)?zdpid\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?ze-sex-video-download\.blogspot\.com
+https?:\/\/([^\/]*\.)?zebbiejohnson\.blogspot\.com
+https?:\/\/([^\/]*\.)?zebra-ka8g\.blogspot\.com
+https?:\/\/([^\/]*\.)?zebutal\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?zeds\.info
+https?:\/\/([^\/]*\.)?zeku-airhead\.blogspot\.com
+https?:\/\/([^\/]*\.)?zelalal\.darkbb\.com
+https?:\/\/([^\/]*\.)?zelalli\.blogcu\.com
+https?:\/\/([^\/]*\.)?zelbasleto\.heavenforum\.com
+https?:\/\/([^\/]*\.)?zeldomric\.dl\.pl
+https?:\/\/([^\/]*\.)?zelekah-h5u4yo\.blogspot\.com
+https?:\/\/([^\/]*\.)?zella\.grafbb\.com
+https?:\/\/([^\/]*\.)?zelladar\.bb-fr\.com
+https?:\/\/([^\/]*\.)?zellapask\.lolbb\.com
+https?:\/\/([^\/]*\.)?zelpasacel\.dl\.pl
+https?:\/\/([^\/]*\.)?zelrelacel\.su\.pl
+https?:\/\/([^\/]*\.)?zelrelli\.zj\.pl
+https?:\/\/([^\/]*\.)?zelrelzel\.blogcu\.com
+https?:\/\/([^\/]*\.)?zelrictr\.lolforum\.net
+https?:\/\/([^\/]*\.)?zelvaracel\.zikforum\.com
+https?:\/\/([^\/]*\.)?zelviacel\.frbb\.net
+https?:\/\/([^\/]*\.)?zelvicat\.fr-bb\.com
+https?:\/\/([^\/]*\.)?zemiacik\.yi\.org
+https?:\/\/([^\/]*\.)?zena-grmhf3shi\.blogspot\.com
+https?:\/\/([^\/]*\.)?zenaidalee-rm0p6t8md\.blogspot\.com
+https?:\/\/([^\/]*\.)?zenda-wszf1\.blogspot\.com
+https?:\/\/([^\/]*\.)?zennie-ey5i633f\.blogspot\.com
+https?:\/\/([^\/]*\.)?zenw7\.szm\.sk
+https?:\/\/([^\/]*\.)?zephyr-tk1\.blogspot\.com
+https?:\/\/([^\/]*\.)?zepporah-dypvn5g3\.blogspot\.com
+https?:\/\/([^\/]*\.)?zerks\.info
+https?:\/\/([^\/]*\.)?zfbfbs9\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?zfkmaei\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?zghy2\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?zgzr\.com
+https?:\/\/([^\/]*\.)?zhenrong\.com\.cn
+https?:\/\/([^\/]*\.)?zhihehotel\.com
+https?:\/\/([^\/]*\.)?zhiju\.home4u\.china\.com
+https?:\/\/([^\/]*\.)?zhkaw\.com
+https?:\/\/([^\/]*\.)?zhkuj\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?zhopaitalii\.info
+https?:\/\/([^\/]*\.)?zhuxg\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?zhw35iida\.org
+https?:\/\/([^\/]*\.)?ziahya-cbqb\.blogspot\.com
+https?:\/\/([^\/]*\.)?zimg4\.szm\.sk
+https?:\/\/([^\/]*\.)?zimmerman-a4shi\.blogspot\.com
+https?:\/\/([^\/]*\.)?zippedurl\.com
+https?:\/\/([^\/]*\.)?zisai\.com\.cn
+https?:\/\/([^\/]*\.)?ziseq-sex-movie-x\.blogspot\.com
+https?:\/\/([^\/]*\.)?zithromaxbuycheap\.drive\.to
+https?:\/\/([^\/]*\.)?zithromaxbuygeneric\.cut\.by
+https?:\/\/([^\/]*\.)?zithromaxcheap\.drive\.to
+https?:\/\/([^\/]*\.)?zithromaxgenericbuy\.drive\.to
+https?:\/\/([^\/]*\.)?zithromaxgenericcheap\.dive\.to
+https?:\/\/([^\/]*\.)?zithromaxxonline\.ovp\.pl
+https?:\/\/([^\/]*\.)?zivuc-free-sex-movie-l\.blogspot\.com
+https?:\/\/([^\/]*\.)?zjeyu\.com
+https?:\/\/([^\/]*\.)?zjpgxo4\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?zjudeyah-m2r38d\.blogspot\.com
+https?:\/\/([^\/]*\.)?zjww\.com
+https?:\/\/([^\/]*\.)?zlid3\.szm\.sk
+https?:\/\/([^\/]*\.)?zljekr8\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?zlocztw\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?zmga3\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?zmodem-isjrjd\.blogspot\.com
+https?:\/\/([^\/]*\.)?zocor\.bad-food\.net
+https?:\/\/([^\/]*\.)?zocor\.barnkalas\.net
+https?:\/\/([^\/]*\.)?zocor\.blomberg\.nu
+https?:\/\/([^\/]*\.)?zocor\.bokmarke\.nu
+https?:\/\/([^\/]*\.)?zocor\.bredbandsfabriken\.nu
+https?:\/\/([^\/]*\.)?zocor\.center\.nu
+https?:\/\/([^\/]*\.)?zocor\.hellstrom\.nu
+https?:\/\/([^\/]*\.)?zocor\.hem\.nu
+https?:\/\/([^\/]*\.)?zocor\.infosajt\.net
+https?:\/\/([^\/]*\.)?zocor\.internetreklam\.nu
+https?:\/\/([^\/]*\.)?zocor\.jacobson\.nu
+https?:\/\/([^\/]*\.)?zoe-ktd\.blogspot\.com
+https?:\/\/([^\/]*\.)?zofarl\.com
+https?:\/\/([^\/]*\.)?zofia-hkn\.blogspot\.com
+https?:\/\/([^\/]*\.)?zoie-g2h02z5mta\.blogspot\.com
+https?:\/\/([^\/]*\.)?zoklaku\.forumculture\.net
+https?:\/\/([^\/]*\.)?zoklapec\.dynamicbb\.com
+https?:\/\/([^\/]*\.)?zoloft\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?zoloft\.1k\.pl
+https?:\/\/([^\/]*\.)?zoloft\.skocz\.net
+https?:\/\/([^\/]*\.)?zombie-r7ye\.blogspot\.com
+https?:\/\/([^\/]*\.)?zovirax\.esdemasiado\.com
+https?:\/\/([^\/]*\.)?zovirax\.inicioya\.com
+https?:\/\/([^\/]*\.)?zovirax\.ole\.to
+https?:\/\/([^\/]*\.)?zovirax\.redireccion\.com
+https?:\/\/([^\/]*\.)?zoya-w1tebgqbtr\.blogspot\.com
+https?:\/\/([^\/]*\.)?zpbvsng\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?zpco4\.szm\.sk
+https?:\/\/([^\/]*\.)?zpykbi9\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?zqit6\.szm\.sk
+https?:\/\/([^\/]*\.)?zqxss\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?zsbupdo\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?zswok\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?zsxqgv2\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ztauk\.szm\.sk
+https?:\/\/([^\/]*\.)?ztkvz\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ztlztpj\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ztnqok7\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?zuleima-epbxv\.blogspot\.com
+https?:\/\/([^\/]*\.)?zulema-tsaieb\.blogspot\.com
+https?:\/\/([^\/]*\.)?zulmarie-dk8\.blogspot\.com
+https?:\/\/([^\/]*\.)?zuri-ch0\.blogspot\.com
+https?:\/\/([^\/]*\.)?zurysarai-bykp\.blogspot\.com
+https?:\/\/([^\/]*\.)?zusette-ai2\.blogspot\.com
+https?:\/\/([^\/]*\.)?zvcqr\.szm\.sk
+https?:\/\/([^\/]*\.)?zvnaw\.szm\.sk
+https?:\/\/([^\/]*\.)?zvoh2\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?zvzsxqw\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?zxtpets\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?zya9\.info
+https?:\/\/([^\/]*\.)?zyban\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?zyban\.controlando\.com
+https?:\/\/([^\/]*\.)?zybans\.blogspot\.com
+https?:\/\/([^\/]*\.)?zyrtec\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?zyrtec\.1k\.pl
+https?:\/\/([^\/]*\.)?zyrtec\.coz\.in
+https?:\/\/([^\/]*\.)?zywyn\.info
+https?:\/\/([^\/]*\.)?zzcwj\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?zzdx\.com
diff --git a/mod/dokuwiki/vendors/dokuwiki/conf/words.aspell.dist b/mod/dokuwiki/vendors/dokuwiki/conf/words.aspell.dist
new file mode 100644
index 000000000..a49138fcb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/conf/words.aspell.dist
@@ -0,0 +1,5 @@
+personal_ws-1.1 en 4 utf-8
+DokuWiki
+Wiki
+WikiWiki
+Gohr
diff --git a/mod/dokuwiki/vendors/dokuwiki/data/_dummy b/mod/dokuwiki/vendors/dokuwiki/data/_dummy
new file mode 100644
index 000000000..37ed18a63
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/data/_dummy
@@ -0,0 +1 @@
+data directory
diff --git a/mod/dokuwiki/vendors/dokuwiki/data/attic/_dummy b/mod/dokuwiki/vendors/dokuwiki/data/attic/_dummy
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/data/attic/_dummy
diff --git a/mod/dokuwiki/vendors/dokuwiki/data/cache/_dummy b/mod/dokuwiki/vendors/dokuwiki/data/cache/_dummy
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/data/cache/_dummy
diff --git a/mod/dokuwiki/vendors/dokuwiki/data/index/_dummy b/mod/dokuwiki/vendors/dokuwiki/data/index/_dummy
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/data/index/_dummy
diff --git a/mod/dokuwiki/vendors/dokuwiki/data/locks/_dummy b/mod/dokuwiki/vendors/dokuwiki/data/locks/_dummy
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/data/locks/_dummy
diff --git a/mod/dokuwiki/vendors/dokuwiki/data/media/wiki/dokuwiki-128.png b/mod/dokuwiki/vendors/dokuwiki/data/media/wiki/dokuwiki-128.png
new file mode 100644
index 000000000..b2306ac95
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/data/media/wiki/dokuwiki-128.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/data/meta/_dummy b/mod/dokuwiki/vendors/dokuwiki/data/meta/_dummy
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/data/meta/_dummy
diff --git a/mod/dokuwiki/vendors/dokuwiki/data/pages/playground/playground.txt b/mod/dokuwiki/vendors/dokuwiki/data/pages/playground/playground.txt
new file mode 100644
index 000000000..a2274bda4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/data/pages/playground/playground.txt
@@ -0,0 +1 @@
+====== PlayGround ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/data/pages/sidebar.txt b/mod/dokuwiki/vendors/dokuwiki/data/pages/sidebar.txt
new file mode 100644
index 000000000..090a66349
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/data/pages/sidebar.txt
@@ -0,0 +1,2 @@
+{{indexmenu>..#1|js#thread navbar}}
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/data/pages/wiki/dokuwiki.txt b/mod/dokuwiki/vendors/dokuwiki/data/pages/wiki/dokuwiki.txt
new file mode 100644
index 000000000..2cede366f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/data/pages/wiki/dokuwiki.txt
@@ -0,0 +1,66 @@
+[[http://www.dokuwiki.org/es:dokuwiki|es]] [[http://www.dokuwiki.org/ca:dokuwiki|ca]] [[http://www.dokuwiki.org/fr:dokuwiki|fr]] [[http://www.dokuwiki.org/dokuwiki|more]]
+
+====== DokuWiki ======
+
+[[doku>wiki:dokuwiki|{{wiki:dokuwiki-128.png }}]] DokuWiki is a standards compliant, simple to use [[wp>Wiki]], mainly aimed at creating documentation of any kind. It is targeted at developer teams, workgroups and small companies. It has a simple but powerful [[wiki:syntax]] which makes sure the datafiles remain readable outside the Wiki and eases the creation of structured texts. All data is stored in plain text files -- no database is required.
+
+Read the [[doku>manual|DokuWiki Manual]] to unleash the full power of DokuWiki.
+
+===== Download =====
+
+DokuWiki is available at http://www.splitbrain.org/go/dokuwiki
+
+
+===== Read More =====
+
+All documentation and additional information besides the [[syntax|syntax description]] is maintained in the DokuWiki at [[doku>|www.dokuwiki.org]].
+
+**About DokuWiki**
+
+ * [[doku>features|A feature list]] :!:
+ * [[doku>users|Happy Users]]
+ * [[doku>press|Who wrote about it]]
+ * [[doku>blogroll|What Bloggers think]]
+ * [[http://www.wikimatrix.org/show/DokuWiki|Compare it with other wiki software]]
+
+**Installing DokuWiki**
+
+ * [[doku>requirements|System Requirements]]
+ * [[http://www.splitbrain.org/go/dokuwiki|Download DokuWiki]] :!:
+ * [[doku>changes|Change Log]]
+ * [[doku>Install|How to install or upgrade]] :!:
+ * [[doku>config|Configuration]]
+
+**Using DokuWiki**
+
+ * [[doku>syntax|Wiki Syntax]]
+ * [[doku>manual|The manual]] :!:
+ * [[doku>FAQ|Frequently Asked Questions (FAQ)]]
+ * [[doku>glossary|Glossary]]
+ * [[http://search.dokuwiki.org|Search for DokuWiki help and documentation]]
+
+**Customizing DokuWiki**
+
+ * [[doku>tips|Tips and Tricks]]
+ * [[doku>Template|How to create and use templates]]
+ * [[doku>plugins|Installing plugins]]
+ * [[doku>development|Development Resources]]
+
+**DokuWiki Feedback and Community**
+
+ * [[doku>newsletter|Subscribe to the newsletter]] :!:
+ * [[doku>mailinglist|Join the mailing list]]
+ * [[http://forum.dokuwiki.org|Check out the user forum]]
+ * [[doku>irc|Talk to other users in the IRC channel]]
+ * [[http://bugs.splitbrain.org/index.php?project=1|Submit bugs and feature wishes]]
+ * [[http://www.wikimatrix.org/forum/viewforum.php?id=10|Share your experiences in the WikiMatrix forum]]
+ * [[doku>thanks|Some humble thanks]]
+
+
+===== Copyright =====
+
+2004-2009 (c) Andreas Gohr <andi@splitbrain.org>((Please do not contact me for help and support -- use the [[doku>mailinglist]] or [[http://forum.dokuwiki.org|forum]] instead))
+
+The DokuWiki engine is licensed under [[http://www.gnu.org/licenses/gpl.html|GNU General Public License]] Version 2. If you use DokuWiki in your company, consider [[doku>donate|donating]] a few bucks ;-).
+
+Not sure what this means? See the [[doku>faq:license|FAQ on the Licenses]].
diff --git a/mod/dokuwiki/vendors/dokuwiki/data/pages/wiki/syntax.txt b/mod/dokuwiki/vendors/dokuwiki/data/pages/wiki/syntax.txt
new file mode 100644
index 000000000..7dad453db
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/data/pages/wiki/syntax.txt
@@ -0,0 +1,488 @@
+[[http://www.dokuwiki.org/es:syntax|es]] [[http://www.dokuwiki.org/ca:syntax|ca]] [[http://www.dokuwiki.org/fr:syntax|fr]] [[http://www.dokuwiki.org/syntax|more]]
+
+====== Formatting Syntax ======
+
+[[doku>DokuWiki]] supports some simple markup language, which tries to make the datafiles to be as readable as possible. This page contains all possible syntax you may use when editing the pages. Simply have a look at the source of this page by pressing the //Edit this page// button at the top or bottom of the page. If you want to try something, just use the [[playground:playground|playground]] page. The simpler markup is easily accessible via [[doku>toolbar|quickbuttons]], too.
+
+===== Basic Text Formatting =====
+
+DokuWiki supports **bold**, //italic//, __underlined__ and ''monospaced'' texts. Of course you can **__//''combine''//__** all these.
+
+ DokuWiki supports **bold**, //italic//, __underlined__ and ''monospaced'' texts.
+ Of course you can **__//''combine''//__** all these.
+
+You can use <sub>subscript</sub> and <sup>superscript</sup>, too.
+
+ You can use <sub>subscript</sub> and <sup>superscript</sup>, too.
+
+You can mark something as <del>deleted</del> as well.
+
+ You can mark something as <del>deleted</del> as well.
+
+**Paragraphs** are created from blank lines. If you want to **force a newline** without a paragraph, you can use two backslashes followed by a whitespace or the end of line.
+
+This is some text with some linebreaks\\ Note that the
+two backslashes are only recognized at the end of a line\\
+or followed by\\ a whitespace \\this happens without it.
+
+ This is some text with some linebreaks\\ Note that the
+ two backslashes are only recognized at the end of a line\\
+ or followed by\\ a whitespace \\this happens without it.
+
+You should use forced newlines only if really needed.
+
+===== Links =====
+
+DokuWiki supports multiple ways of creating links.
+
+==== External ====
+
+External links are recognized automagically: http://www.google.com or simply www.google.com - You can set the link text as well: [[http://www.google.com|This Link points to google]]. Email addresses like this one: <andi@splitbrain.org> are recognized, too.
+
+ DokuWiki supports multiple ways of creating links. External links are recognized
+ automagically: http://www.google.com or simply www.google.com - You can set
+ link text as well: [[http://www.google.com|This Link points to google]]. Email
+ addresses like this one: <andi@splitbrain.org> are recognized, too.
+
+==== Internal ====
+
+Internal links are created by using square brackets. You can either just give a [[pagename]] or use an additional [[pagename|link text]].
+
+ Internal links are created by using square brackets. You can either just give
+ a [[pagename]] or use an additional [[pagename|link text]].
+
+[[doku>pagename|Wiki pagenames]] are converted to lowercase automatically, special characters are not allowed.
+
+You can use [[some:namespaces]] by using a colon in the pagename.
+
+ You can use [[some:namespaces]] by using a colon in the pagename.
+
+For details about namespaces see [[doku>namespaces]].
+
+Linking to a specific section is possible, too. Just add the section name behind a hash character as known from HTML. This links to [[syntax#internal|this Section]].
+
+ This links to [[syntax#internal|this Section]].
+
+Notes:
+
+ * Links to [[syntax|existing pages]] are shown in a different style from [[nonexisting]] ones.
+ * DokuWiki does not use [[wp>CamelCase]] to automatically create links by default, but this behavior can be enabled in the [[doku>config]] file. Hint: If DokuWiki is a link, then it's enabled.
+ * When a section's heading is changed, its bookmark changes, too. So don't rely on section linking too much.
+
+==== Interwiki ====
+
+DokuWiki supports [[doku>Interwiki]] links. These are quick links to other Wikis. For example this is a link to Wikipedia's page about Wikis: [[wp>Wiki]].
+
+ DokuWiki supports [[doku>Interwiki]] links. These are quick links to other Wikis.
+ For example this is a link to Wikipedia's page about Wikis: [[wp>Wiki]].
+
+
+==== Windows Shares ====
+
+Windows shares like [[\\server\share|this]] are recognized, too. Please note that these only make sense in a homogeneous user group like a corporate [[wp>Intranet]].
+
+ Windows Shares like [[\\server\share|this]] are recognized, too.
+
+Notes:
+
+ * For security reasons direct browsing of windows shares only works in Microsoft Internet Explorer per default (and only in the "local zone").
+ * For Mozilla and Firefox it can be enabled through different workaround mentioned in the [[http://kb.mozillazine.org/Links_to_local_pages_don't_work|Mozilla Knowledge Base]].
+
+
+==== Image Links ====
+
+You can also use an image to link to another internal or external page by combining the syntax for links and [[#images_and_other_files|images]] (see below) like this:
+
+ [[http://www.php.net|{{wiki:dokuwiki-128.png}}]]
+
+[[http://www.php.net|{{wiki:dokuwiki-128.png}}]]
+
+Please note: The image formatting is the only formatting syntax accepted in link names.
+
+The whole [[#images_and_other_files|image]] and [[#links|link]] syntax is supported (including image resizing, internal and external images and URLs and interwiki links).
+
+===== Footnotes =====
+
+You can add footnotes ((This is a footnote)) by using double parentheses.
+
+ You can add footnotes ((This is a footnote)) by using double parentheses.
+
+===== Sectioning =====
+
+You can use up to five different levels of headlines to structure your content. If you have more than three headlines, a table of contents is generated automatically -- this can be disabled by including the string ''<nowiki>~~NOTOC~~</nowiki>'' in the document.
+
+==== Headline Level 3 ====
+=== Headline Level 4 ===
+== Headline Level 5 ==
+
+ ==== Headline Level 3 ====
+ === Headline Level 4 ===
+ == Headline Level 5 ==
+
+By using four or more dashes, you can make a horizontal line:
+
+----
+
+===== Images and Other Files =====
+
+You can include external and internal [[doku>images]] with curly brackets. Optionally you can specify the size of them.
+
+Real size: {{wiki:dokuwiki-128.png}}
+
+Resize to given width: {{wiki:dokuwiki-128.png?50}}
+
+Resize to given width and height((when the aspect ratio of the given width and height doesn't match that of the image, it will be cropped to the new ratio before resizing)): {{wiki:dokuwiki-128.png?200x50}}
+
+Resized external image: {{http://de3.php.net/images/php.gif?200x50}}
+
+ Real size: {{wiki:dokuwiki-128.png}}
+ Resize to given width: {{wiki:dokuwiki-128.png?50}}
+ Resize to given width and height: {{wiki:dokuwiki-128.png?200x50}}
+ Resized external image: {{http://de3.php.net/images/php.gif?200x50}}
+
+
+By using left or right whitespaces you can choose the alignment.
+
+{{ wiki:dokuwiki-128.png}}
+
+{{wiki:dokuwiki-128.png }}
+
+{{ wiki:dokuwiki-128.png }}
+
+ {{ wiki:dokuwiki-128.png}}
+ {{wiki:dokuwiki-128.png }}
+ {{ wiki:dokuwiki-128.png }}
+
+Of course, you can add a title (displayed as a tooltip by most browsers), too.
+
+{{ wiki:dokuwiki-128.png |This is the caption}}
+
+ {{ wiki:dokuwiki-128.png |This is the caption}}
+
+If you specify a filename (external or internal) that is not an image (''gif, jpeg, png''), then it will be displayed as a link instead.
+
+For linking an image to another page see [[#Image Links]] above.
+
+===== Lists =====
+
+Dokuwiki supports ordered and unordered lists. To create a list item, indent your text by two spaces and use a ''*'' for unordered lists or a ''-'' for ordered ones.
+
+ * This is a list
+ * The second item
+ * You may have different levels
+ * Another item
+
+ - The same list but ordered
+ - Another item
+ - Just use indention for deeper levels
+ - That's it
+
+<code>
+ * This is a list
+ * The second item
+ * You may have different levels
+ * Another item
+
+ - The same list but ordered
+ - Another item
+ - Just use indention for deeper levels
+ - That's it
+</code>
+
+Also take a look at the [[doku>faq:lists|FAQ on list items]].
+
+===== Text Conversions =====
+
+DokuWiki can convert certain pre-defined characters or strings into images or other text or HTML.
+
+The text to image conversion is mainly done for smileys. And the text to HTML conversion is used for typography replacements, but can be configured to use other HTML as well.
+
+==== Text to Image Conversions ====
+
+DokuWiki converts commonly used [[wp>emoticon]]s to their graphical equivalents. Those [[doku>Smileys]] and other images can be configured and extended. Here is an overview of Smileys included in DokuWiki:
+
+ * 8-) %% 8-) %%
+ * 8-O %% 8-O %%
+ * :-( %% :-( %%
+ * :-) %% :-) %%
+ * =) %% =) %%
+ * :-/ %% :-/ %%
+ * :-\ %% :-\ %%
+ * :-? %% :-? %%
+ * :-D %% :-D %%
+ * :-P %% :-P %%
+ * :-O %% :-O %%
+ * :-X %% :-X %%
+ * :-| %% :-| %%
+ * ;-) %% ;-) %%
+ * ^_^ %% ^_^ %%
+ * :?: %% :?: %%
+ * :!: %% :!: %%
+ * LOL %% LOL %%
+ * FIXME %% FIXME %%
+ * DELETEME %% DELETEME %%
+
+==== Text to HTML Conversions ====
+
+Typography: [[DokuWiki]] can convert simple text characters to their typographically correct entities. Here is an example of recognized characters.
+
+-> <- <-> => <= <=> >> << -- --- 640x480 (c) (tm) (r)
+"He thought 'It's a man's world'..."
+
+<code>
+-> <- <-> => <= <=> >> << -- --- 640x480 (c) (tm) (r)
+"He thought 'It's a man's world'..."
+</code>
+
+The same can be done to produce any kind of HTML, it just needs to be added to the [[doku>entities|pattern file]].
+
+There are three exceptions which do not come from that pattern file: multiplication entity (640x480), 'single' and "double quotes". They can be turned off through a [[doku>config:typography|config option]].
+
+===== Quoting =====
+
+Some times you want to mark some text to show it's a reply or comment. You can use the following syntax:
+
+ I think we should do it
+
+ > No we shouldn't
+
+ >> Well, I say we should
+
+ > Really?
+
+ >> Yes!
+
+ >>> Then lets do it!
+
+I think we should do it
+
+> No we shouldn't
+
+>> Well, I say we should
+
+> Really?
+
+>> Yes!
+
+>>> Then lets do it!
+
+===== Tables =====
+
+DokuWiki supports a simple syntax to create tables.
+
+^ Heading 1 ^ Heading 2 ^ Heading 3 ^
+| Row 1 Col 1 | Row 1 Col 2 | Row 1 Col 3 |
+| Row 2 Col 1 | some colspan (note the double pipe) ||
+| Row 3 Col 1 | Row 3 Col 2 | Row 3 Col 3 |
+
+Table rows have to start and end with a ''|'' for normal rows or a ''^'' for headers.
+
+ ^ Heading 1 ^ Heading 2 ^ Heading 3 ^
+ | Row 1 Col 1 | Row 1 Col 2 | Row 1 Col 3 |
+ | Row 2 Col 1 | some colspan (note the double pipe) ||
+ | Row 3 Col 1 | Row 3 Col 2 | Row 3 Col 3 |
+
+To connect cells horizontally, just make the next cell completely empty as shown above. Be sure to have always the same amount of cell separators!
+
+Vertical tableheaders are possible, too.
+
+| ^ Heading 1 ^ Heading 2 ^
+^ Heading 3 | Row 1 Col 2 | Row 1 Col 3 |
+^ Heading 4 | no colspan this time | |
+^ Heading 5 | Row 2 Col 2 | Row 2 Col 3 |
+
+As you can see, it's the cell separator before a cell which decides about the formatting:
+
+ | ^ Heading 1 ^ Heading 2 ^
+ ^ Heading 3 | Row 1 Col 2 | Row 1 Col 3 |
+ ^ Heading 4 | no colspan this time | |
+ ^ Heading 5 | Row 2 Col 2 | Row 2 Col 3 |
+
+You can have rowspans (vertically connected cells) by adding '':::'' into the cells below the one to which they should connect.
+
+^ Heading 1 ^ Heading 2 ^ Heading 3 ^
+| Row 1 Col 1 | this cell spans vertically | Row 1 Col 3 |
+| Row 2 Col 1 | ::: | Row 2 Col 3 |
+| Row 3 Col 1 | ::: | Row 2 Col 3 |
+
+Apart from the rowspan syntax those cells should not contain anything else.
+
+ ^ Heading 1 ^ Heading 2 ^ Heading 3 ^
+ | Row 1 Col 1 | this cell spans vertically | Row 1 Col 3 |
+ | Row 2 Col 1 | ::: | Row 2 Col 3 |
+ | Row 3 Col 1 | ::: | Row 2 Col 3 |
+
+You can align the table contents, too. Just add at least two whitespaces at the opposite end of your text: Add two spaces on the left to align right, two spaces on the right to align left and two spaces at least at both ends for centered text.
+
+^ Table with alignment ^^^
+| right| center |left |
+|left | right| center |
+| xxxxxxxxxxxx | xxxxxxxxxxxx | xxxxxxxxxxxx |
+
+This is how it looks in the source:
+
+ ^ Table with alignment ^^^
+ | right| center |left |
+ |left | right| center |
+ | xxxxxxxxxxxx | xxxxxxxxxxxx | xxxxxxxxxxxx |
+
+Note: Vertical alignment is not supported.
+
+===== No Formatting =====
+
+If you need to display text exactly like it is typed (without any formatting), enclose the area either with ''%%<nowiki>%%'' tags or even simpler, with double percent signs ''<nowiki>%%</nowiki>''.
+
+<nowiki>
+This is some text which contains addresses like this: http://www.splitbrain.org and **formatting**, but nothing is done with it.
+</nowiki>
+The same is true for %%//__this__ text// with a smiley ;-)%%.
+
+ <nowiki>
+ This is some text which contains addresses like this: http://www.splitbrain.org and **formatting**, but nothing is done with it.
+ </nowiki>
+ The same is true for %%//__this__ text// with a smiley ;-)%%.
+
+===== Code Blocks =====
+
+You can include code blocks into your documents by either indenting them by at least two spaces (like used for the previous examples) or by using the tags ''%%<code>%%'' or ''%%<file>%%''.
+
+ This is text is indented by two spaces.
+
+<code>
+This is preformatted code all spaces are preserved: like <-this
+</code>
+
+<file>
+This is pretty much the same, but you could use it to show that you quoted a file.
+</file>
+
+Those blocks were created by this source:
+
+ This is text is indented by two spaces.
+
+ <code>
+ This is preformatted code all spaces are preserved: like <-this
+ </code>
+
+ <file>
+ This is pretty much the same, but you could use it to show that you quoted a file.
+ </file>
+
+==== Syntax Highlighting ====
+
+[[wiki:DokuWiki]] can highlight sourcecode, which makes it easier to read. It uses the [[http://qbnz.com/highlighter/|GeSHi]] Generic Syntax Highlighter -- so any language supported by GeSHi is supported. The syntax is the same like in the code and file blocks in the previous section, but this time the name of the used language is inserted inside the tag. Eg. ''<nowiki><code java></nowiki>'' or ''<nowiki><file java></nowiki>''.
+
+<code java>
+/**
+ * The HelloWorldApp class implements an application that
+ * simply displays "Hello World!" to the standard output.
+ */
+class HelloWorldApp {
+ public static void main(String[] args) {
+ System.out.println("Hello World!"); //Display the string.
+ }
+}
+</code>
+
+The following language strings are currently recognized: //abap, actionscript-french, actionscript, actionscript3, ada, apache, applescript, asm, asp, autoit, avisynth, bash, basic4gl, bf, bibtex, blitzbasic, bnf, boo, c, c_mac, caddcl, cadlisp, cfdg, cfm, cil, cmake, cobol, cpp, cpp-qt, csharp, css, d, dcs, delphi, diff, div, dos, dot, eiffel, email, erlang, fo, fortran, freebasic, genero, glsl, gml, gnuplot, groovy, gettext, haskell, hq9plus, html, idl, ini, inno, intercal, io, java5, java, javascript, kixtart, klonec, klonecpp, latex, lisp, locobasic, lolcode, lotusformulas, lotusscript, lscript, lsl2, lua, m68k, make, matlab, mirc, modula3, mpasm, mxml, mysql, nsis, oberon2, objc, ocaml-brief, ocaml, oobas, oracle8, oracle11, pascal, perl, per, php-brief, php, pic16, pixelbender, plsql, povray, powershell, progress, prolog, properties, providex, python, qbasic, rails, rebol, reg, robots, ruby, sas, scala, scheme, scilab, sdlbasic, smalltalk, smarty, sql, tcl, teraterm, text, thinbasic, tsql, typoscript, vbnet, vb, verilog, vhdl, vim, visualfoxpro, visualprolog, whitespace, winbatch, whois, xml, xorg_conf, xpp, z80//
+
+==== Downloadable Code Blocks ====
+
+When you use the ''%%<code>%%'' or ''%%<file>%%'' syntax as above, you might want to make the shown code available for download as well. You can to this by specifying a file name after language code like this:
+
+<code>
+<file php myexample.php>
+<?php echo "hello world!"; ?>
+</file>
+</code>
+
+<file php myexample.php>
+<?php echo "hello world!"; ?>
+</file>
+
+If you don't want any highlighting but want a downloadable file, specify a dash (''-'') as the language code: ''%%<code - myfile.foo>%%''.
+
+
+===== Embedding HTML and PHP =====
+
+You can embed raw HTML or PHP code into your documents by using the ''%%<html>%%'' or ''%%<php>%%'' tags. (Use uppercase tags if you need to enclose block level elements.)
+
+HTML example:
+
+<code>
+<html>
+This is some <span style="color:red;font-size:150%;">inline HTML</span>
+</html>
+<HTML>
+<p style="border:2px dashed red;">And this is some block HTML</p>
+</HTML>
+</code>
+
+<html>
+This is some <span style="color:red;font-size:150%;">inline HTML</span>
+</html>
+<HTML>
+<p style="border:2px dashed red;">And this is some block HTML</p>
+</HTML>
+
+PHP example:
+
+<code>
+<php>
+echo 'A logo generated by PHP:';
+echo '<img src="' . $_SERVER['PHP_SELF'] . '?=' . php_logo_guid() . '" alt="PHP Logo !" />';
+echo '(generated inline HTML)';
+</php>
+<PHP>
+echo '<table class="inline"><tr><td>The same, but inside a block level element:</td>';
+echo '<td><img src="' . $_SERVER['PHP_SELF'] . '?=' . php_logo_guid() . '" alt="PHP Logo !" /></td>';
+echo '</tr></table>';
+</PHP>
+</code>
+
+<php>
+echo 'A logo generated by PHP:';
+echo '<img src="' . $_SERVER['PHP_SELF'] . '?=' . php_logo_guid() . '" alt="PHP Logo !" />';
+echo '(inline HTML)';
+</php>
+<PHP>
+echo '<table class="inline"><tr><td>The same, but inside a block level element:</td>';
+echo '<td><img src="' . $_SERVER['PHP_SELF'] . '?=' . php_logo_guid() . '" alt="PHP Logo !" /></td>';
+echo '</tr></table>';
+</PHP>
+
+**Please Note**: HTML and PHP embedding is disabled by default in the configuration. If disabled, the code is displayed instead of executed.
+
+===== RSS/ATOM Feed Aggregation =====
+[[DokuWiki]] can integrate data from external XML feeds. For parsing the XML feeds, [[http://simplepie.org/|SimplePie]] is used. All formats understood by SimplePie can be used in DokuWiki as well. You can influence the rendering by multiple additional space separated parameters:
+
+^ Parameter ^ Description ^
+| any number | will be used as maximum number items to show, defaults to 8 |
+| reverse | display the last items in the feed first |
+| author | show item authors names |
+| date | show item dates |
+| description| show the item description. If [[doku>config:htmlok|HTML]] is disabled all tags will be stripped |
+| //n//[dhm] | refresh period, where d=days, h=hours, m=minutes. (e.g. 12h = 12 hours). |
+
+The refresh period defaults to 4 hours. Any value below 10 minutes will be treated as 10 minutes. [[wiki:DokuWiki]] will generally try to supply a cached version of a page, obviously this is inappropriate when the page contains dynamic external content. The parameter tells [[wiki:DokuWiki]] to re-render the page if it is more than //refresh period// since the page was last rendered.
+
+**Example:**
+
+ {{rss>http://slashdot.org/index.rss 5 author date 1h }}
+
+{{rss>http://slashdot.org/index.rss 5 author date 1h }}
+
+
+===== Control Macros =====
+
+Some syntax influences how DokuWiki renders a page without creating any output it self. The following control macros are availble:
+
+^ Macro ^ Description |
+| %%~~NOTOC~~%% | If this macro is found on the page, no table of contents will be created |
+| %%~~NOCACHE~~%% | DokuWiki caches all output by default. Sometimes this might not be wanted (eg. when the %%<php>%% syntax above is used), adding this macro will force DokuWiki to rerender a page on every call |
+
+===== Syntax Plugins =====
+
+DokuWiki's syntax can be extended by [[doku>plugins|Plugins]]. How the installed plugins are used is described on their appropriate description pages. The following syntax plugins are available in this particular DokuWiki installation:
+
+~~INFO:syntaxplugins~~
diff --git a/mod/dokuwiki/vendors/dokuwiki/data/tmp/_dummy b/mod/dokuwiki/vendors/dokuwiki/data/tmp/_dummy
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/data/tmp/_dummy
diff --git a/mod/dokuwiki/vendors/dokuwiki/doku.php b/mod/dokuwiki/vendors/dokuwiki/doku.php
new file mode 100644
index 000000000..5566577f6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/doku.php
@@ -0,0 +1,109 @@
+<?php
+/**
+ * DokuWiki mainscript
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+// xdebug_start_profiling();
+
+if(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/');
+global $ACT;
+global $conf;
+
+if (isset($_SERVER['HTTP_X_DOKUWIKI_DO'])){
+ $ACT = trim(strtolower($_SERVER['HTTP_X_DOKUWIKI_DO']));
+} elseif (!empty($IDX)) {
+ $ACT = 'index';
+} elseif (get_input('do')) {
+ $ACT = get_input('do');
+} else {
+ $ACT = 'show';
+}
+
+global $QUERY;
+global $ID;
+global $NS;
+global $REV;
+global $IDX;
+global $DATE;
+global $RANGE;
+global $HIGH;
+global $TEXT;
+global $PRE;
+global $SUF;
+global $SUM;
+global $REV;
+global $INFO;
+global $JSINFO;
+
+
+require_once(DOKU_INC.'inc/init.php');
+require_once(DOKU_INC.'inc/common.php');
+require_once(DOKU_INC.'inc/events.php');
+require_once(DOKU_INC.'inc/pageutils.php');
+require_once(DOKU_INC.'inc/html.php');
+require_once(DOKU_INC.'inc/auth.php');
+require_once(DOKU_INC.'inc/actions.php');
+
+//import variables
+$QUERY = trim(get_input('id'));
+$ID = getID();
+$NS = getNS($ID);
+$REV = get_input('rev');
+$IDX = get_input('idx');
+$DATE = get_input('date');
+$RANGE = get_input('lines');
+$HIGH = get_input('s');
+if(empty($HIGH)) $HIGH = getGoogleQuery();
+
+$TEXT = cleanText($_POST['wikitext']);
+$PRE = cleanText($_POST['prefix']);
+$SUF = cleanText($_POST['suffix']);
+$SUM = get_input('summary');
+
+//sanitize revision
+$REV = preg_replace('/[^0-9]/','',$REV);
+
+//make infos about the selected page available
+$INFO = pageinfo();
+
+//export minimal infos to JS, plugins can add more
+$JSINFO['id'] = $ID;
+$JSINFO['namespace'] = (string) $INFO['namespace'];
+
+
+// handle debugging
+if($conf['allowdebug'] && $ACT == 'debug'){
+ html_debug();
+ exit;
+}
+
+//send 404 for missing pages if configured or ID has special meaning to bots
+if(!$INFO['exists'] &&
+ ($conf['send404'] || preg_match('/^(robots\.txt|sitemap\.xml(\.gz)?|favicon\.ico|crossdomain\.xml)$/',$ID)) &&
+ ($ACT == 'show' || substr($ACT,0,7) == 'export_') ){
+ header('HTTP/1.0 404 Not Found');
+}
+
+//prepare breadcrumbs (initialize a static var)
+if ($conf['breadcrumbs']) breadcrumbs();
+
+// check upstream
+checkUpdateMessages();
+
+$tmp = array(); // No event data
+trigger_event('DOKUWIKI_STARTED',$tmp);
+
+//close session
+session_write_close();
+
+//do the work
+act_dispatch($ACT);
+
+$tmp = array(); // No event data
+trigger_event('DOKUWIKI_DONE', $tmp);
+
+// xdebug_dump_function_profile(1);
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/feed.php b/mod/dokuwiki/vendors/dokuwiki/feed.php
new file mode 100644
index 000000000..e7ea5808c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/feed.php
@@ -0,0 +1,353 @@
+<?php
+/**
+ * XML feed export
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+if(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/');
+require_once(DOKU_INC.'inc/init.php');
+require_once(DOKU_INC.'inc/common.php');
+require_once(DOKU_INC.'inc/events.php');
+require_once(DOKU_INC.'inc/parserutils.php');
+require_once(DOKU_INC.'inc/feedcreator.class.php');
+require_once(DOKU_INC.'inc/auth.php');
+require_once(DOKU_INC.'inc/pageutils.php');
+require_once(DOKU_INC.'inc/httputils.php');
+
+//close session
+session_write_close();
+
+// get params
+$opt = rss_parseOptions();
+
+// the feed is dynamic - we need a cache for each combo
+// (but most people just use the default feed so it's still effective)
+$cache = getCacheName(join('',array_values($opt)).$_SERVER['REMOTE_USER'],'.feed');
+$key = join('', array_values($opt)) . $_SERVER['REMOTE_USER'];
+$cache = new cache($key, '.feed');
+
+// prepare cache depends
+$depends['files'] = getConfigFiles('main');
+$depends['age'] = $conf['rss_update'];
+$depends['purge'] = ($_REQUEST['purge']) ? true : false;
+
+// check cacheage and deliver if nothing has changed since last
+// time or the update interval has not passed, also handles conditional requests
+header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
+header('Pragma: public');
+header('Content-Type: application/xml; charset=utf-8');
+header('X-Robots-Tag: noindex');
+if($cache->useCache($depends)) {
+ http_conditionalRequest($cache->_time);
+ if($conf['allowdebug']) header("X-CacheUsed: $cache->cache");
+ print $cache->retrieveCache();
+ exit;
+} else {
+ http_conditionalRequest(time());
+ }
+
+// create new feed
+$rss = new DokuWikiFeedCreator();
+$rss->title = $conf['title'].(($opt['namespace']) ? ' '.$opt['namespace'] : '');
+$rss->link = DOKU_URL;
+$rss->syndicationURL = DOKU_URL.'feed.php';
+$rss->cssStyleSheet = DOKU_URL.'lib/exe/css.php?s=feed';
+
+$image = new FeedImage();
+$image->title = $conf['title'];
+$image->url = DOKU_URL."lib/images/favicon.ico";
+$image->link = DOKU_URL;
+$rss->image = $image;
+
+$data = null;
+if($opt['feed_mode'] == 'list'){
+ $data = rssListNamespace($opt);
+}elseif($opt['feed_mode'] == 'search'){
+ $data = rssSearch($opt);
+}else{
+ $eventData = array(
+ 'opt' => &$opt,
+ 'data' => &$data,
+ );
+ $event = new Doku_Event('FEED_MODE_UNKNOWN', $eventData);
+ if ($event->advise_before(true)) {
+ $data = rssRecentChanges($opt);
+ }
+ $event->advise_after();
+}
+
+rss_buildItems($rss, $data, $opt);
+$feed = $rss->createFeed($opt['feed_type'],'utf-8');
+
+// save cachefile
+$cache->storeCache($feed);
+
+// finally deliver
+print $feed;
+
+// ---------------------------------------------------------------- //
+
+/**
+ * Get URL parameters and config options and return a initialized option array
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function rss_parseOptions(){
+ global $conf;
+
+ $opt['items'] = (int) $_REQUEST['num'];
+ $opt['feed_type'] = $_REQUEST['type'];
+ $opt['feed_mode'] = $_REQUEST['mode'];
+ $opt['show_minor'] = $_REQUEST['minor'];
+ $opt['namespace'] = $_REQUEST['ns'];
+ $opt['link_to'] = $_REQUEST['linkto'];
+ $opt['item_content'] = $_REQUEST['content'];
+ $opt['search_query'] = $_REQUEST['q'];
+
+ if(!$opt['feed_type']) $opt['feed_type'] = $conf['rss_type'];
+ if(!$opt['item_content']) $opt['item_content'] = $conf['rss_content'];
+ if(!$opt['link_to']) $opt['link_to'] = $conf['rss_linkto'];
+ if(!$opt['items']) $opt['items'] = $conf['recent'];
+ $opt['guardmail'] = ($conf['mailguard'] != '' && $conf['mailguard'] != 'none');
+
+ switch ($opt['feed_type']){
+ case 'rss':
+ $opt['feed_type'] = 'RSS0.91';
+ $opt['mime_type'] = 'text/xml';
+ break;
+ case 'rss2':
+ $opt['feed_type'] = 'RSS2.0';
+ $opt['mime_type'] = 'text/xml';
+ break;
+ case 'atom':
+ $opt['feed_type'] = 'ATOM0.3';
+ $opt['mime_type'] = 'application/xml';
+ break;
+ case 'atom1':
+ $opt['feed_type'] = 'ATOM1.0';
+ $opt['mime_type'] = 'application/atom+xml';
+ break;
+ default:
+ $opt['feed_type'] = 'RSS1.0';
+ $opt['mime_type'] = 'application/xml';
+ }
+
+ $eventData = array(
+ 'opt' => &$opt,
+ );
+ trigger_event('FEED_OPTS_POSTPROCESS', $eventData);
+ return $opt;
+}
+
+/**
+ * Add recent changed pages to a feed object
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @param object $rss - the FeedCreator Object
+ * @param array $data - the items to add
+ * @param array $opt - the feed options
+ */
+function rss_buildItems(&$rss,&$data,$opt){
+ global $conf;
+ global $lang;
+ global $auth;
+
+ $eventData = array(
+ 'rss' => &$rss,
+ 'data' => &$data,
+ 'opt' => &$opt,
+ );
+ $event = new Doku_Event('FEED_DATA_PROCESS', $eventData);
+ if ($event->advise_before(false)){
+ foreach($data as $ditem){
+ if(!is_array($ditem)){
+ // not an array? then only a list of IDs was given
+ $ditem = array( 'id' => $ditem );
+ }
+
+ $item = new FeedItem();
+ $id = $ditem['id'];
+ $meta = p_get_metadata($id);
+
+ // add date
+ if($ditem['date']){
+ $date = $ditem['date'];
+ }elseif($meta['date']['modified']){
+ $date = $meta['date']['modified'];
+ }else{
+ $date = @filemtime(wikiFN($id));
+ }
+ if($date) $item->date = date('r',$date);
+
+ // add title
+ if($conf['useheading'] && $meta['title']){
+ $item->title = $meta['title'];
+ }else{
+ $item->title = $ditem['id'];
+ }
+ if($conf['rss_show_summary'] && !empty($ditem['sum'])){
+ $item->title .= ' - '.strip_tags($ditem['sum']);
+ }
+
+ // add item link
+ switch ($opt['link_to']){
+ case 'page':
+ $item->link = wl($id,'rev='.$date,true,'&');
+ break;
+ case 'rev':
+ $item->link = wl($id,'do=revisions&rev='.$date,true,'&');
+ break;
+ case 'current':
+ $item->link = wl($id, '', true,'&');
+ break;
+ case 'diff':
+ default:
+ $item->link = wl($id,'rev='.$date.'&do=diff',true,'&');
+ }
+
+ // add item content
+ switch ($opt['item_content']){
+ case 'diff':
+ case 'htmldiff':
+ require_once(DOKU_INC.'inc/DifferenceEngine.php');
+ $revs = getRevisions($id, 0, 1);
+ $rev = $revs[0];
+
+ if($rev){
+ $df = new Diff(explode("\n",htmlspecialchars(rawWiki($id,$rev))),
+ explode("\n",htmlspecialchars(rawWiki($id,''))));
+ }else{
+ $df = new Diff(array(''),
+ explode("\n",htmlspecialchars(rawWiki($id,''))));
+ }
+
+ if($opt['item_content'] == 'htmldiff'){
+ $tdf = new TableDiffFormatter();
+ $content = '<table>';
+ $content .= '<tr><th colspan="2" width="50%">'.$rev.'</th>';
+ $content .= '<th colspan="2" width="50%">'.$lang['current'].'</th></tr>';
+ $content .= $tdf->format($df);
+ $content .= '</table>';
+ }else{
+ $udf = new UnifiedDiffFormatter();
+ $content = "<pre>\n".$udf->format($df)."\n</pre>";
+ }
+ break;
+ case 'html':
+ $content = p_wiki_xhtml($id,$date,false);
+ // no TOC in feeds
+ $content = preg_replace('/(<!-- TOC START -->).*(<!-- TOC END -->)/s','',$content);
+
+ // make URLs work when canonical is not set, regexp instead of rerendering!
+ if(!$conf['canonical']){
+ $base = preg_quote(DOKU_REL,'/');
+ $content = preg_replace('/(<a href|<img src)="('.$base.')/s','$1="'.DOKU_URL,$content);
+ }
+
+ break;
+ case 'abstract':
+ default:
+ $content = $meta['description']['abstract'];
+ }
+ $item->description = $content; //FIXME a plugin hook here could be senseful
+
+ // add user
+ # FIXME should the user be pulled from metadata as well?
+ $user = null;
+ $user = @$ditem['user']; // the @ spares time repeating lookup
+ $item->author = '';
+ if($user && $conf['useacl'] && $auth){
+ $userInfo = $auth->getUserData($user);
+ $item->author = $userInfo['name'];
+ if($userInfo && !$opt['guardmail']){
+ $item->authorEmail = $userInfo['mail'];
+ }else{
+ //cannot obfuscate because some RSS readers may check validity
+ $item->authorEmail = $user.'@'.$ditem['ip'];
+ }
+ }elseif($user){
+ // this happens when no ACL but some Apache auth is used
+ $item->author = $user;
+ $item->authorEmail = $user.'@'.$ditem['ip'];
+ }else{
+ $item->authorEmail = 'anonymous@'.$ditem['ip'];
+ }
+
+ // add category
+ if($meta['subject']){
+ $item->category = $meta['subject'];
+ }else{
+ $cat = getNS($id);
+ if($cat) $item->category = $cat;
+ }
+
+ // finally add the item to the feed object, after handing it to registered plugins
+ $evdata = array('item' => &$item,
+ 'opt' => &$opt,
+ 'ditem' => &$ditem,
+ 'rss' => &$rss);
+ $evt = new Doku_Event('FEED_ITEM_ADD', $evdata);
+ if ($evt->advise_before()){
+ $rss->addItem($item);
+ }
+ $evt->advise_after(); // for completeness
+ }
+ }
+ $event->advise_after();
+}
+
+
+/**
+ * Add recent changed pages to the feed object
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function rssRecentChanges($opt){
+ global $conf;
+ global $auth;
+
+ $flags = RECENTS_SKIP_DELETED;
+ if(!$opt['show_minor']) $flags += RECENTS_SKIP_MINORS;
+
+ $recents = getRecents(0,$opt['items'],$opt['namespace'],$flags);
+ return $recents;
+}
+
+/**
+ * Add all pages of a namespace to the feed object
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function rssListNamespace($opt){
+ require_once(DOKU_INC.'inc/search.php');
+ global $conf;
+
+ $ns=':'.cleanID($opt['namespace']);
+ $ns=str_replace(':','/',$ns);
+
+ $data = array();
+ sort($data);
+ search($data,$conf['datadir'],'search_list','',$ns);
+
+ return $data;
+}
+
+/**
+ * Add the result of a full text search to the feed object
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function rssSearch($opt){
+ if(!$opt['search_query']) return;
+
+ require_once(DOKU_INC.'inc/fulltext.php');
+ $data = array();
+ $data = ft_pageSearch($opt['search_query'],$poswords);
+ $data = array_keys($data);
+
+ return $data;
+}
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/DifferenceEngine.php b/mod/dokuwiki/vendors/dokuwiki/inc/DifferenceEngine.php
new file mode 100644
index 000000000..e28826c1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/DifferenceEngine.php
@@ -0,0 +1,1066 @@
+<?php
+/**
+ * A PHP diff engine for phpwiki. (Taken from phpwiki-1.3.3)
+ *
+ * Additions by Axel Boldt for MediaWiki
+ *
+ * @copyright (C) 2000, 2001 Geoffrey T. Dairiki <dairiki@dairiki.org>
+ * @license You may copy this code freely under the conditions of the GPL.
+ */
+define('USE_ASSERTS', function_exists('assert'));
+
+class _DiffOp {
+ var $type;
+ var $orig;
+ var $closing;
+
+ function reverse() {
+ trigger_error("pure virtual", E_USER_ERROR);
+ }
+
+ function norig() {
+ return $this->orig ? sizeof($this->orig) : 0;
+ }
+
+ function nclosing() {
+ return $this->closing ? sizeof($this->closing) : 0;
+ }
+}
+
+class _DiffOp_Copy extends _DiffOp {
+ var $type = 'copy';
+
+ function _DiffOp_Copy ($orig, $closing = false) {
+ if (!is_array($closing))
+ $closing = $orig;
+ $this->orig = $orig;
+ $this->closing = $closing;
+ }
+
+ function reverse() {
+ return new _DiffOp_Copy($this->closing, $this->orig);
+ }
+}
+
+class _DiffOp_Delete extends _DiffOp {
+ var $type = 'delete';
+
+ function _DiffOp_Delete ($lines) {
+ $this->orig = $lines;
+ $this->closing = false;
+ }
+
+ function reverse() {
+ return new _DiffOp_Add($this->orig);
+ }
+}
+
+class _DiffOp_Add extends _DiffOp {
+ var $type = 'add';
+
+ function _DiffOp_Add ($lines) {
+ $this->closing = $lines;
+ $this->orig = false;
+ }
+
+ function reverse() {
+ return new _DiffOp_Delete($this->closing);
+ }
+}
+
+class _DiffOp_Change extends _DiffOp {
+ var $type = 'change';
+
+ function _DiffOp_Change ($orig, $closing) {
+ $this->orig = $orig;
+ $this->closing = $closing;
+ }
+
+ function reverse() {
+ return new _DiffOp_Change($this->closing, $this->orig);
+ }
+}
+
+
+/**
+ * Class used internally by Diff to actually compute the diffs.
+ *
+ * The algorithm used here is mostly lifted from the perl module
+ * Algorithm::Diff (version 1.06) by Ned Konz, which is available at:
+ * http://www.perl.com/CPAN/authors/id/N/NE/NEDKONZ/Algorithm-Diff-1.06.zip
+ *
+ * More ideas are taken from:
+ * http://www.ics.uci.edu/~eppstein/161/960229.html
+ *
+ * Some ideas are (and a bit of code) are from from analyze.c, from GNU
+ * diffutils-2.7, which can be found at:
+ * ftp://gnudist.gnu.org/pub/gnu/diffutils/diffutils-2.7.tar.gz
+ *
+ * closingly, some ideas (subdivision by NCHUNKS > 2, and some optimizations)
+ * are my own.
+ *
+ * @author Geoffrey T. Dairiki
+ * @access private
+ */
+class _DiffEngine
+{
+ function diff ($from_lines, $to_lines) {
+ $n_from = sizeof($from_lines);
+ $n_to = sizeof($to_lines);
+
+ $this->xchanged = $this->ychanged = array();
+ $this->xv = $this->yv = array();
+ $this->xind = $this->yind = array();
+ unset($this->seq);
+ unset($this->in_seq);
+ unset($this->lcs);
+
+ // Skip leading common lines.
+ for ($skip = 0; $skip < $n_from && $skip < $n_to; $skip++) {
+ if ($from_lines[$skip] != $to_lines[$skip])
+ break;
+ $this->xchanged[$skip] = $this->ychanged[$skip] = false;
+ }
+ // Skip trailing common lines.
+ $xi = $n_from; $yi = $n_to;
+ for ($endskip = 0; --$xi > $skip && --$yi > $skip; $endskip++) {
+ if ($from_lines[$xi] != $to_lines[$yi])
+ break;
+ $this->xchanged[$xi] = $this->ychanged[$yi] = false;
+ }
+
+ // Ignore lines which do not exist in both files.
+ for ($xi = $skip; $xi < $n_from - $endskip; $xi++)
+ $xhash[$from_lines[$xi]] = 1;
+ for ($yi = $skip; $yi < $n_to - $endskip; $yi++) {
+ $line = $to_lines[$yi];
+ if ( ($this->ychanged[$yi] = empty($xhash[$line])) )
+ continue;
+ $yhash[$line] = 1;
+ $this->yv[] = $line;
+ $this->yind[] = $yi;
+ }
+ for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
+ $line = $from_lines[$xi];
+ if ( ($this->xchanged[$xi] = empty($yhash[$line])) )
+ continue;
+ $this->xv[] = $line;
+ $this->xind[] = $xi;
+ }
+
+ // Find the LCS.
+ $this->_compareseq(0, sizeof($this->xv), 0, sizeof($this->yv));
+
+ // Merge edits when possible
+ $this->_shift_boundaries($from_lines, $this->xchanged, $this->ychanged);
+ $this->_shift_boundaries($to_lines, $this->ychanged, $this->xchanged);
+
+ // Compute the edit operations.
+ $edits = array();
+ $xi = $yi = 0;
+ while ($xi < $n_from || $yi < $n_to) {
+ USE_ASSERTS && assert($yi < $n_to || $this->xchanged[$xi]);
+ USE_ASSERTS && assert($xi < $n_from || $this->ychanged[$yi]);
+
+ // Skip matching "snake".
+ $copy = array();
+ while ( $xi < $n_from && $yi < $n_to
+ && !$this->xchanged[$xi] && !$this->ychanged[$yi]) {
+ $copy[] = $from_lines[$xi++];
+ ++$yi;
+ }
+ if ($copy)
+ $edits[] = new _DiffOp_Copy($copy);
+
+ // Find deletes & adds.
+ $delete = array();
+ while ($xi < $n_from && $this->xchanged[$xi])
+ $delete[] = $from_lines[$xi++];
+
+ $add = array();
+ while ($yi < $n_to && $this->ychanged[$yi])
+ $add[] = $to_lines[$yi++];
+
+ if ($delete && $add)
+ $edits[] = new _DiffOp_Change($delete, $add);
+ elseif ($delete)
+ $edits[] = new _DiffOp_Delete($delete);
+ elseif ($add)
+ $edits[] = new _DiffOp_Add($add);
+ }
+ return $edits;
+ }
+
+
+ /**
+ * Divide the Largest Common Subsequence (LCS) of the sequences
+ * [XOFF, XLIM) and [YOFF, YLIM) into NCHUNKS approximately equally
+ * sized segments.
+ *
+ * Returns (LCS, PTS). LCS is the length of the LCS. PTS is an
+ * array of NCHUNKS+1 (X, Y) indexes giving the diving points between
+ * sub sequences. The first sub-sequence is contained in [X0, X1),
+ * [Y0, Y1), the second in [X1, X2), [Y1, Y2) and so on. Note
+ * that (X0, Y0) == (XOFF, YOFF) and
+ * (X[NCHUNKS], Y[NCHUNKS]) == (XLIM, YLIM).
+ *
+ * This function assumes that the first lines of the specified portions
+ * of the two files do not match, and likewise that the last lines do not
+ * match. The caller must trim matching lines from the beginning and end
+ * of the portions it is going to specify.
+ */
+ function _diag ($xoff, $xlim, $yoff, $ylim, $nchunks) {
+ $flip = false;
+
+ if ($xlim - $xoff > $ylim - $yoff) {
+ // Things seems faster (I'm not sure I understand why)
+ // when the shortest sequence in X.
+ $flip = true;
+ list ($xoff, $xlim, $yoff, $ylim)
+ = array( $yoff, $ylim, $xoff, $xlim);
+ }
+
+ if ($flip)
+ for ($i = $ylim - 1; $i >= $yoff; $i--)
+ $ymatches[$this->xv[$i]][] = $i;
+ else
+ for ($i = $ylim - 1; $i >= $yoff; $i--)
+ $ymatches[$this->yv[$i]][] = $i;
+
+ $this->lcs = 0;
+ $this->seq[0]= $yoff - 1;
+ $this->in_seq = array();
+ $ymids[0] = array();
+
+ $numer = $xlim - $xoff + $nchunks - 1;
+ $x = $xoff;
+ for ($chunk = 0; $chunk < $nchunks; $chunk++) {
+ if ($chunk > 0)
+ for ($i = 0; $i <= $this->lcs; $i++)
+ $ymids[$i][$chunk-1] = $this->seq[$i];
+
+ $x1 = $xoff + (int)(($numer + ($xlim-$xoff)*$chunk) / $nchunks);
+ for ( ; $x < $x1; $x++) {
+ $line = $flip ? $this->yv[$x] : $this->xv[$x];
+ if (empty($ymatches[$line]))
+ continue;
+ $matches = $ymatches[$line];
+ reset($matches);
+ while (list ($junk, $y) = each($matches))
+ if (empty($this->in_seq[$y])) {
+ $k = $this->_lcs_pos($y);
+ USE_ASSERTS && assert($k > 0);
+ $ymids[$k] = $ymids[$k-1];
+ break;
+ }
+ while (list ($junk, $y) = each($matches)) {
+ if ($y > $this->seq[$k-1]) {
+ USE_ASSERTS && assert($y < $this->seq[$k]);
+ // Optimization: this is a common case:
+ // next match is just replacing previous match.
+ $this->in_seq[$this->seq[$k]] = false;
+ $this->seq[$k] = $y;
+ $this->in_seq[$y] = 1;
+ }
+ else if (empty($this->in_seq[$y])) {
+ $k = $this->_lcs_pos($y);
+ USE_ASSERTS && assert($k > 0);
+ $ymids[$k] = $ymids[$k-1];
+ }
+ }
+ }
+ }
+
+ $seps[] = $flip ? array($yoff, $xoff) : array($xoff, $yoff);
+ $ymid = $ymids[$this->lcs];
+ for ($n = 0; $n < $nchunks - 1; $n++) {
+ $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $n) / $nchunks);
+ $y1 = $ymid[$n] + 1;
+ $seps[] = $flip ? array($y1, $x1) : array($x1, $y1);
+ }
+ $seps[] = $flip ? array($ylim, $xlim) : array($xlim, $ylim);
+
+ return array($this->lcs, $seps);
+ }
+
+ function _lcs_pos ($ypos) {
+ $end = $this->lcs;
+ if ($end == 0 || $ypos > $this->seq[$end]) {
+ $this->seq[++$this->lcs] = $ypos;
+ $this->in_seq[$ypos] = 1;
+ return $this->lcs;
+ }
+
+ $beg = 1;
+ while ($beg < $end) {
+ $mid = (int)(($beg + $end) / 2);
+ if ( $ypos > $this->seq[$mid] )
+ $beg = $mid + 1;
+ else
+ $end = $mid;
+ }
+
+ USE_ASSERTS && assert($ypos != $this->seq[$end]);
+
+ $this->in_seq[$this->seq[$end]] = false;
+ $this->seq[$end] = $ypos;
+ $this->in_seq[$ypos] = 1;
+ return $end;
+ }
+
+ /**
+ * Find LCS of two sequences.
+ *
+ * The results are recorded in the vectors $this->{x,y}changed[], by
+ * storing a 1 in the element for each line that is an insertion
+ * or deletion (ie. is not in the LCS).
+ *
+ * The subsequence of file 0 is [XOFF, XLIM) and likewise for file 1.
+ *
+ * Note that XLIM, YLIM are exclusive bounds.
+ * All line numbers are origin-0 and discarded lines are not counted.
+ */
+ function _compareseq ($xoff, $xlim, $yoff, $ylim) {
+ // Slide down the bottom initial diagonal.
+ while ($xoff < $xlim && $yoff < $ylim
+ && $this->xv[$xoff] == $this->yv[$yoff]) {
+ ++$xoff;
+ ++$yoff;
+ }
+
+ // Slide up the top initial diagonal.
+ while ($xlim > $xoff && $ylim > $yoff
+ && $this->xv[$xlim - 1] == $this->yv[$ylim - 1]) {
+ --$xlim;
+ --$ylim;
+ }
+
+ if ($xoff == $xlim || $yoff == $ylim)
+ $lcs = 0;
+ else {
+ // This is ad hoc but seems to work well.
+ //$nchunks = sqrt(min($xlim - $xoff, $ylim - $yoff) / 2.5);
+ //$nchunks = max(2,min(8,(int)$nchunks));
+ $nchunks = min(7, $xlim - $xoff, $ylim - $yoff) + 1;
+ list ($lcs, $seps)
+ = $this->_diag($xoff,$xlim,$yoff, $ylim,$nchunks);
+ }
+
+ if ($lcs == 0) {
+ // X and Y sequences have no common subsequence:
+ // mark all changed.
+ while ($yoff < $ylim)
+ $this->ychanged[$this->yind[$yoff++]] = 1;
+ while ($xoff < $xlim)
+ $this->xchanged[$this->xind[$xoff++]] = 1;
+ }
+ else {
+ // Use the partitions to split this problem into subproblems.
+ reset($seps);
+ $pt1 = $seps[0];
+ while ($pt2 = next($seps)) {
+ $this->_compareseq ($pt1[0], $pt2[0], $pt1[1], $pt2[1]);
+ $pt1 = $pt2;
+ }
+ }
+ }
+
+ /**
+ * Adjust inserts/deletes of identical lines to join changes
+ * as much as possible.
+ *
+ * We do something when a run of changed lines include a
+ * line at one end and has an excluded, identical line at the other.
+ * We are free to choose which identical line is included.
+ * `compareseq' usually chooses the one at the beginning,
+ * but usually it is cleaner to consider the following identical line
+ * to be the "change".
+ *
+ * This is extracted verbatim from analyze.c (GNU diffutils-2.7).
+ */
+ function _shift_boundaries ($lines, &$changed, $other_changed) {
+ $i = 0;
+ $j = 0;
+
+ USE_ASSERTS && assert('sizeof($lines) == sizeof($changed)');
+ $len = sizeof($lines);
+ $other_len = sizeof($other_changed);
+
+ while (1) {
+ /*
+ * Scan forwards to find beginning of another run of changes.
+ * Also keep track of the corresponding point in the other file.
+ *
+ * Throughout this code, $i and $j are adjusted together so that
+ * the first $i elements of $changed and the first $j elements
+ * of $other_changed both contain the same number of zeros
+ * (unchanged lines).
+ * Furthermore, $j is always kept so that $j == $other_len or
+ * $other_changed[$j] == false.
+ */
+ while ($j < $other_len && $other_changed[$j])
+ $j++;
+
+ while ($i < $len && ! $changed[$i]) {
+ USE_ASSERTS && assert('$j < $other_len && ! $other_changed[$j]');
+ $i++; $j++;
+ while ($j < $other_len && $other_changed[$j])
+ $j++;
+ }
+
+ if ($i == $len)
+ break;
+
+ $start = $i;
+
+ // Find the end of this run of changes.
+ while (++$i < $len && $changed[$i])
+ continue;
+
+ do {
+ /*
+ * Record the length of this run of changes, so that
+ * we can later determine whether the run has grown.
+ */
+ $runlength = $i - $start;
+
+ /*
+ * Move the changed region back, so long as the
+ * previous unchanged line matches the last changed one.
+ * This merges with previous changed regions.
+ */
+ while ($start > 0 && $lines[$start - 1] == $lines[$i - 1]) {
+ $changed[--$start] = 1;
+ $changed[--$i] = false;
+ while ($start > 0 && $changed[$start - 1])
+ $start--;
+ USE_ASSERTS && assert('$j > 0');
+ while ($other_changed[--$j])
+ continue;
+ USE_ASSERTS && assert('$j >= 0 && !$other_changed[$j]');
+ }
+
+ /*
+ * Set CORRESPONDING to the end of the changed run, at the last
+ * point where it corresponds to a changed run in the other file.
+ * CORRESPONDING == LEN means no such point has been found.
+ */
+ $corresponding = $j < $other_len ? $i : $len;
+
+ /*
+ * Move the changed region forward, so long as the
+ * first changed line matches the following unchanged one.
+ * This merges with following changed regions.
+ * Do this second, so that if there are no merges,
+ * the changed region is moved forward as far as possible.
+ */
+ while ($i < $len && $lines[$start] == $lines[$i]) {
+ $changed[$start++] = false;
+ $changed[$i++] = 1;
+ while ($i < $len && $changed[$i])
+ $i++;
+
+ USE_ASSERTS && assert('$j < $other_len && ! $other_changed[$j]');
+ $j++;
+ if ($j < $other_len && $other_changed[$j]) {
+ $corresponding = $i;
+ while ($j < $other_len && $other_changed[$j])
+ $j++;
+ }
+ }
+ } while ($runlength != $i - $start);
+
+ /*
+ * If possible, move the fully-merged run of changes
+ * back to a corresponding run in the other file.
+ */
+ while ($corresponding < $i) {
+ $changed[--$start] = 1;
+ $changed[--$i] = 0;
+ USE_ASSERTS && assert('$j > 0');
+ while ($other_changed[--$j])
+ continue;
+ USE_ASSERTS && assert('$j >= 0 && !$other_changed[$j]');
+ }
+ }
+ }
+}
+
+/**
+ * Class representing a 'diff' between two sequences of strings.
+ */
+class Diff
+{
+ var $edits;
+
+ /**
+ * Constructor.
+ * Computes diff between sequences of strings.
+ *
+ * @param $from_lines array An array of strings.
+ * (Typically these are lines from a file.)
+ * @param $to_lines array An array of strings.
+ */
+ function Diff($from_lines, $to_lines) {
+ $eng = new _DiffEngine;
+ $this->edits = $eng->diff($from_lines, $to_lines);
+ //$this->_check($from_lines, $to_lines);
+ }
+
+ /**
+ * Compute reversed Diff.
+ *
+ * SYNOPSIS:
+ *
+ * $diff = new Diff($lines1, $lines2);
+ * $rev = $diff->reverse();
+ * @return object A Diff object representing the inverse of the
+ * original diff.
+ */
+ function reverse () {
+ $rev = $this;
+ $rev->edits = array();
+ foreach ($this->edits as $edit) {
+ $rev->edits[] = $edit->reverse();
+ }
+ return $rev;
+ }
+
+ /**
+ * Check for empty diff.
+ *
+ * @return bool True iff two sequences were identical.
+ */
+ function isEmpty () {
+ foreach ($this->edits as $edit) {
+ if ($edit->type != 'copy')
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * Compute the length of the Longest Common Subsequence (LCS).
+ *
+ * This is mostly for diagnostic purposed.
+ *
+ * @return int The length of the LCS.
+ */
+ function lcs () {
+ $lcs = 0;
+ foreach ($this->edits as $edit) {
+ if ($edit->type == 'copy')
+ $lcs += sizeof($edit->orig);
+ }
+ return $lcs;
+ }
+
+ /**
+ * Get the original set of lines.
+ *
+ * This reconstructs the $from_lines parameter passed to the
+ * constructor.
+ *
+ * @return array The original sequence of strings.
+ */
+ function orig() {
+ $lines = array();
+
+ foreach ($this->edits as $edit) {
+ if ($edit->orig)
+ array_splice($lines, sizeof($lines), 0, $edit->orig);
+ }
+ return $lines;
+ }
+
+ /**
+ * Get the closing set of lines.
+ *
+ * This reconstructs the $to_lines parameter passed to the
+ * constructor.
+ *
+ * @return array The sequence of strings.
+ */
+ function closing() {
+ $lines = array();
+
+ foreach ($this->edits as $edit) {
+ if ($edit->closing)
+ array_splice($lines, sizeof($lines), 0, $edit->closing);
+ }
+ return $lines;
+ }
+
+ /**
+ * Check a Diff for validity.
+ *
+ * This is here only for debugging purposes.
+ */
+ function _check ($from_lines, $to_lines) {
+ if (serialize($from_lines) != serialize($this->orig()))
+ trigger_error("Reconstructed original doesn't match", E_USER_ERROR);
+ if (serialize($to_lines) != serialize($this->closing()))
+ trigger_error("Reconstructed closing doesn't match", E_USER_ERROR);
+
+ $rev = $this->reverse();
+ if (serialize($to_lines) != serialize($rev->orig()))
+ trigger_error("Reversed original doesn't match", E_USER_ERROR);
+ if (serialize($from_lines) != serialize($rev->closing()))
+ trigger_error("Reversed closing doesn't match", E_USER_ERROR);
+
+
+ $prevtype = 'none';
+ foreach ($this->edits as $edit) {
+ if ( $prevtype == $edit->type )
+ trigger_error("Edit sequence is non-optimal", E_USER_ERROR);
+ $prevtype = $edit->type;
+ }
+
+ $lcs = $this->lcs();
+ trigger_error("Diff okay: LCS = $lcs", E_USER_NOTICE);
+ }
+}
+
+/**
+ * FIXME: bad name.
+ */
+class MappedDiff
+extends Diff
+{
+ /**
+ * Constructor.
+ *
+ * Computes diff between sequences of strings.
+ *
+ * This can be used to compute things like
+ * case-insensitve diffs, or diffs which ignore
+ * changes in white-space.
+ *
+ * @param $from_lines array An array of strings.
+ * (Typically these are lines from a file.)
+ *
+ * @param $to_lines array An array of strings.
+ *
+ * @param $mapped_from_lines array This array should
+ * have the same size number of elements as $from_lines.
+ * The elements in $mapped_from_lines and
+ * $mapped_to_lines are what is actually compared
+ * when computing the diff.
+ *
+ * @param $mapped_to_lines array This array should
+ * have the same number of elements as $to_lines.
+ */
+ function MappedDiff($from_lines, $to_lines,
+ $mapped_from_lines, $mapped_to_lines) {
+
+ assert(sizeof($from_lines) == sizeof($mapped_from_lines));
+ assert(sizeof($to_lines) == sizeof($mapped_to_lines));
+
+ $this->Diff($mapped_from_lines, $mapped_to_lines);
+
+ $xi = $yi = 0;
+ for ($i = 0; $i < sizeof($this->edits); $i++) {
+ $orig = &$this->edits[$i]->orig;
+ if (is_array($orig)) {
+ $orig = array_slice($from_lines, $xi, sizeof($orig));
+ $xi += sizeof($orig);
+ }
+
+ $closing = &$this->edits[$i]->closing;
+ if (is_array($closing)) {
+ $closing = array_slice($to_lines, $yi, sizeof($closing));
+ $yi += sizeof($closing);
+ }
+ }
+ }
+}
+
+/**
+ * A class to format Diffs
+ *
+ * This class formats the diff in classic diff format.
+ * It is intended that this class be customized via inheritance,
+ * to obtain fancier outputs.
+ */
+class DiffFormatter
+{
+ /**
+ * Number of leading context "lines" to preserve.
+ *
+ * This should be left at zero for this class, but subclasses
+ * may want to set this to other values.
+ */
+ var $leading_context_lines = 0;
+
+ /**
+ * Number of trailing context "lines" to preserve.
+ *
+ * This should be left at zero for this class, but subclasses
+ * may want to set this to other values.
+ */
+ var $trailing_context_lines = 0;
+
+ /**
+ * Format a diff.
+ *
+ * @param $diff object A Diff object.
+ * @return string The formatted output.
+ */
+ function format($diff) {
+
+ $xi = $yi = 1;
+ $block = false;
+ $context = array();
+
+ $nlead = $this->leading_context_lines;
+ $ntrail = $this->trailing_context_lines;
+
+ $this->_start_diff();
+
+ foreach ($diff->edits as $edit) {
+ if ($edit->type == 'copy') {
+ if (is_array($block)) {
+ if (sizeof($edit->orig) <= $nlead + $ntrail) {
+ $block[] = $edit;
+ }
+ else{
+ if ($ntrail) {
+ $context = array_slice($edit->orig, 0, $ntrail);
+ $block[] = new _DiffOp_Copy($context);
+ }
+ $this->_block($x0, $ntrail + $xi - $x0,
+ $y0, $ntrail + $yi - $y0,
+ $block);
+ $block = false;
+ }
+ }
+ $context = $edit->orig;
+ }
+ else {
+ if (! is_array($block)) {
+ $context = array_slice($context, sizeof($context) - $nlead);
+ $x0 = $xi - sizeof($context);
+ $y0 = $yi - sizeof($context);
+ $block = array();
+ if ($context)
+ $block[] = new _DiffOp_Copy($context);
+ }
+ $block[] = $edit;
+ }
+
+ if ($edit->orig)
+ $xi += sizeof($edit->orig);
+ if ($edit->closing)
+ $yi += sizeof($edit->closing);
+ }
+
+ if (is_array($block))
+ $this->_block($x0, $xi - $x0,
+ $y0, $yi - $y0,
+ $block);
+
+ return $this->_end_diff();
+ }
+
+ function _block($xbeg, $xlen, $ybeg, $ylen, &$edits) {
+ $this->_start_block($this->_block_header($xbeg, $xlen, $ybeg, $ylen));
+ foreach ($edits as $edit) {
+ if ($edit->type == 'copy')
+ $this->_context($edit->orig);
+ elseif ($edit->type == 'add')
+ $this->_added($edit->closing);
+ elseif ($edit->type == 'delete')
+ $this->_deleted($edit->orig);
+ elseif ($edit->type == 'change')
+ $this->_changed($edit->orig, $edit->closing);
+ else
+ trigger_error("Unknown edit type", E_USER_ERROR);
+ }
+ $this->_end_block();
+ }
+
+ function _start_diff() {
+ ob_start();
+ }
+
+ function _end_diff() {
+ $val = ob_get_contents();
+ ob_end_clean();
+ return $val;
+ }
+
+ function _block_header($xbeg, $xlen, $ybeg, $ylen) {
+ if ($xlen > 1)
+ $xbeg .= "," . ($xbeg + $xlen - 1);
+ if ($ylen > 1)
+ $ybeg .= "," . ($ybeg + $ylen - 1);
+
+ return $xbeg . ($xlen ? ($ylen ? 'c' : 'd') : 'a') . $ybeg;
+ }
+
+ function _start_block($header) {
+ echo $header;
+ }
+
+ function _end_block() {
+ }
+
+ function _lines($lines, $prefix = ' ') {
+ foreach ($lines as $line)
+ echo "$prefix $line\n";
+ }
+
+ function _context($lines) {
+ $this->_lines($lines);
+ }
+
+ function _added($lines) {
+ $this->_lines($lines, ">");
+ }
+ function _deleted($lines) {
+ $this->_lines($lines, "<");
+ }
+
+ function _changed($orig, $closing) {
+ $this->_deleted($orig);
+ echo "---\n";
+ $this->_added($closing);
+ }
+}
+
+
+/**
+ * Additions by Axel Boldt follow, partly taken from diff.php, phpwiki-1.3.3
+ *
+ */
+
+define('NBSP', "\xC2\xA0"); // utf-8 non-breaking space.
+
+class _HWLDF_WordAccumulator {
+ function _HWLDF_WordAccumulator () {
+ $this->_lines = array();
+ $this->_line = '';
+ $this->_group = '';
+ $this->_tag = '';
+ }
+
+ function _flushGroup ($new_tag) {
+ if ($this->_group !== '') {
+ if ($this->_tag == 'mark')
+ $this->_line .= '<strong>'.$this->_group.'</strong>';
+ else
+ $this->_line .= $this->_group;
+ }
+ $this->_group = '';
+ $this->_tag = $new_tag;
+ }
+
+ function _flushLine ($new_tag) {
+ $this->_flushGroup($new_tag);
+ if ($this->_line != '')
+ $this->_lines[] = $this->_line;
+ $this->_line = '';
+ }
+
+ function addWords ($words, $tag = '') {
+ if ($tag != $this->_tag)
+ $this->_flushGroup($tag);
+
+ foreach ($words as $word) {
+ // new-line should only come as first char of word.
+ if ($word == '')
+ continue;
+ if ($word[0] == "\n") {
+ $this->_group .= NBSP;
+ $this->_flushLine($tag);
+ $word = substr($word, 1);
+ }
+ assert(!strstr($word, "\n"));
+ $this->_group .= $word;
+ }
+ }
+
+ function getLines() {
+ $this->_flushLine('~done');
+ return $this->_lines;
+ }
+}
+
+class WordLevelDiff extends MappedDiff
+{
+ function WordLevelDiff ($orig_lines, $closing_lines) {
+ list ($orig_words, $orig_stripped) = $this->_split($orig_lines);
+ list ($closing_words, $closing_stripped) = $this->_split($closing_lines);
+
+
+ $this->MappedDiff($orig_words, $closing_words,
+ $orig_stripped, $closing_stripped);
+ }
+
+ function _split($lines) {
+ // FIXME: fix POSIX char class.
+# if (!preg_match_all('/ ( [^\S\n]+ | [[:alnum:]]+ | . ) (?: (?!< \n) [^\S\n])? /xs',
+ if (!preg_match_all('/ ( [^\S\n]+ | [0-9_A-Za-z\x80-\xff]+ | . ) (?: (?!< \n) [^\S\n])? /xs',
+ implode("\n", $lines),
+ $m)) {
+ return array(array(''), array(''));
+ }
+ return array($m[0], $m[1]);
+ }
+
+ function orig () {
+ $orig = new _HWLDF_WordAccumulator;
+
+ foreach ($this->edits as $edit) {
+ if ($edit->type == 'copy')
+ $orig->addWords($edit->orig);
+ elseif ($edit->orig)
+ $orig->addWords($edit->orig, 'mark');
+ }
+ return $orig->getLines();
+ }
+
+ function closing () {
+ $closing = new _HWLDF_WordAccumulator;
+
+ foreach ($this->edits as $edit) {
+ if ($edit->type == 'copy')
+ $closing->addWords($edit->closing);
+ elseif ($edit->closing)
+ $closing->addWords($edit->closing, 'mark');
+ }
+ return $closing->getLines();
+ }
+}
+
+/**
+ * "Unified" diff formatter.
+ *
+ * This class formats the diff in classic "unified diff" format.
+ */
+class UnifiedDiffFormatter extends DiffFormatter
+{
+ function UnifiedDiffFormatter($context_lines = 4) {
+ $this->leading_context_lines = $context_lines;
+ $this->trailing_context_lines = $context_lines;
+ }
+
+ function _block_header($xbeg, $xlen, $ybeg, $ylen) {
+ if ($xlen != 1)
+ $xbeg .= "," . $xlen;
+ if ($ylen != 1)
+ $ybeg .= "," . $ylen;
+ return "@@ -$xbeg +$ybeg @@\n";
+ }
+
+ function _added($lines) {
+ $this->_lines($lines, "+");
+ }
+ function _deleted($lines) {
+ $this->_lines($lines, "-");
+ }
+ function _changed($orig, $final) {
+ $this->_deleted($orig);
+ $this->_added($final);
+ }
+}
+
+/**
+ * Wikipedia Table style diff formatter.
+ *
+ */
+class TableDiffFormatter extends DiffFormatter
+{
+ function TableDiffFormatter() {
+ $this->leading_context_lines = 2;
+ $this->trailing_context_lines = 2;
+ }
+
+ function _pre($text){
+ $text = htmlspecialchars($text);
+ $text = str_replace(' ',' &nbsp;',$text);
+ if($text{0} == ' ') $text = '&nbsp;'.substr($text,1);
+ return $text;
+ }
+
+ function _block_header( $xbeg, $xlen, $ybeg, $ylen ) {
+ global $lang;
+ $l1 = $lang['line'].' '.$xbeg;
+ $l2 = $lang['line'].' '.$ybeg;
+ $r = '<tr><td class="diff-blockheader" colspan="2">'.$l1.":</td>\n" .
+ '<td class="diff-blockheader" colspan="2">'.$l2.":</td></tr>\n";
+ return $r;
+ }
+
+ function _start_block( $header ) {
+ print( $header );
+ }
+
+ function _end_block() {
+ }
+
+ function _lines( $lines, $prefix=' ', $color="white" ) {
+ }
+
+ function addedLine( $line ) {
+ $line = str_replace(' ',' &nbsp;',$line);
+ if($line{0} == ' ') $line = '&nbsp;'.substr($line,1);
+ return '<td>+</td><td class="diff-addedline">' .
+ $line.'</td>';
+ }
+
+ function deletedLine( $line ) {
+ $line = str_replace(' ',' &nbsp;',$line);
+ if($line{0} == ' ') $line = '&nbsp;'.substr($line,1);
+ return '<td>-</td><td class="diff-deletedline">' .
+ $line.'</td>';
+ }
+
+ function emptyLine() {
+ //$line = str_replace(' ','&nbsp; ',$line);
+ return '<td colspan="2">&nbsp;</td>';
+ }
+
+ function contextLine( $line ) {
+ $line = str_replace(' ',' &nbsp;',$line);
+ if($line{0} == ' ') $line = '&nbsp;'.substr($line,1);
+ return '<td> </td><td class="diff-context">'.$line.'</td>';
+ }
+
+ function _added($lines) {
+ foreach ($lines as $line) {
+ print( '<tr>' . $this->emptyLine() .
+ $this->addedLine( $line ) . "</tr>\n" );
+ }
+ }
+
+ function _deleted($lines) {
+ foreach ($lines as $line) {
+ print( '<tr>' . $this->deletedLine( $line ) .
+ $this->emptyLine() . "</tr>\n" );
+ }
+ }
+
+ function _context( $lines ) {
+ foreach ($lines as $line) {
+ print( '<tr>' . $this->contextLine( $line ) .
+ $this->contextLine( $line ) . "</tr>\n" );
+ }
+ }
+
+ function _changed( $orig, $closing ) {
+ $diff = new WordLevelDiff( $orig, $closing );
+ $del = $diff->orig();
+ $add = $diff->closing();
+
+ while ( $line = array_shift( $del ) ) {
+ $aline = array_shift( $add );
+ print( '<tr>' . $this->deletedLine( $line ) .
+ $this->addedLine( $aline ) . "</tr>\n" );
+ }
+ $this->_added( $add ); # If any leftovers
+ }
+}
+
+
+//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/EmailAddressValidator.php b/mod/dokuwiki/vendors/dokuwiki/inc/EmailAddressValidator.php
new file mode 100644
index 000000000..2ce2093e2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/EmailAddressValidator.php
@@ -0,0 +1,146 @@
+<?php
+/**
+ * EmailAddressValidator Class
+ *
+ * @author Dave Child <dave@addedbytes.com>
+ * @link http://code.google.com/p/php-email-address-validation/
+ * @license http://www.opensource.org/licenses/bsd-license.php
+ */
+class EmailAddressValidator {
+
+ /**
+ * Check email address validity
+ * @param strEmailAddress Email address to be checked
+ * @return True if email is valid, false if not
+ */
+ function check_email_address($strEmailAddress) {
+
+ // Control characters are not allowed
+ if (preg_match('/[\x00-\x1F\x7F-\xFF]/', $strEmailAddress)) {
+ return false;
+ }
+
+ // Split it into sections using last instance of "@"
+ $intAtSymbol = strrpos($strEmailAddress, '@');
+ if ($intAtSymbol === false) {
+ // No "@" symbol in email.
+ return false;
+ }
+ $arrEmailAddress[0] = substr($strEmailAddress, 0, $intAtSymbol);
+ $arrEmailAddress[1] = substr($strEmailAddress, $intAtSymbol + 1);
+
+ // Count the "@" symbols. Only one is allowed, except where
+ // contained in quote marks in the local part. Quickest way to
+ // check this is to remove anything in quotes.
+ $arrTempAddress[0] = preg_replace('/"[^"]+"/'
+ ,''
+ ,$arrEmailAddress[0]);
+ $arrTempAddress[1] = $arrEmailAddress[1];
+ $strTempAddress = $arrTempAddress[0] . $arrTempAddress[1];
+ // Then check - should be no "@" symbols.
+ if (strrpos($strTempAddress, '@') !== false) {
+ // "@" symbol found
+ return false;
+ }
+
+ // Check local portion
+ if (!$this->check_local_portion($arrEmailAddress[0])) {
+ return false;
+ }
+
+ // Check domain portion
+ if (!$this->check_domain_portion($arrEmailAddress[1])) {
+ return false;
+ }
+
+ // If we're still here, all checks above passed. Email is valid.
+ return true;
+
+ }
+
+ /**
+ * Checks email section before "@" symbol for validity
+ * @param strLocalPortion Text to be checked
+ * @return True if local portion is valid, false if not
+ */
+ function check_local_portion($strLocalPortion) {
+ // Local portion can only be from 1 to 64 characters, inclusive.
+ // Please note that servers are encouraged to accept longer local
+ // parts than 64 characters.
+ if (!$this->check_text_length($strLocalPortion, 1, 64)) {
+ return false;
+ }
+ // Local portion must be:
+ // 1) a dot-atom (strings separated by periods)
+ // 2) a quoted string
+ // 3) an obsolete format string (combination of the above)
+ $arrLocalPortion = explode('.', $strLocalPortion);
+ for ($i = 0, $max = sizeof($arrLocalPortion); $i < $max; $i++) {
+ if (!preg_match('.^('
+ . '([A-Za-z0-9!#$%&\'*+/=?^_`{|}~-]'
+ . '[A-Za-z0-9!#$%&\'*+/=?^_`{|}~-]{0,63})'
+ .'|'
+ . '("[^\\\"]{0,62}")'
+ .')$.'
+ ,$arrLocalPortion[$i])) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Checks email section after "@" symbol for validity
+ * @param strDomainPortion Text to be checked
+ * @return True if domain portion is valid, false if not
+ */
+ function check_domain_portion($strDomainPortion) {
+ // Total domain can only be from 1 to 255 characters, inclusive
+ if (!$this->check_text_length($strDomainPortion, 1, 255)) {
+ return false;
+ }
+ // Check if domain is IP, possibly enclosed in square brackets.
+ if (preg_match('/^(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])'
+ .'(\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])){3}$/'
+ ,$strDomainPortion) ||
+ preg_match('/^\[(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])'
+ .'(\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])){3}\]$/'
+ ,$strDomainPortion)) {
+ return true;
+ } else {
+ $arrDomainPortion = explode('.', $strDomainPortion);
+ if (sizeof($arrDomainPortion) < 2) {
+ return false; // Not enough parts to domain
+ }
+ for ($i = 0, $max = sizeof($arrDomainPortion); $i < $max; $i++) {
+ // Each portion must be between 1 and 63 characters, inclusive
+ if (!$this->check_text_length($arrDomainPortion[$i], 1, 63)) {
+ return false;
+ }
+ if (!preg_match('/^(([A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])|'
+ .'([A-Za-z0-9]+))$/', $arrDomainPortion[$i])) {
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Check given text length is between defined bounds
+ * @param strText Text to be checked
+ * @param intMinimum Minimum acceptable length
+ * @param intMaximum Maximum acceptable length
+ * @return True if string is within bounds (inclusive), false if not
+ */
+ function check_text_length($strText, $intMinimum, $intMaximum) {
+ // Minimum and maximum are both inclusive
+ $intTextLength = strlen($strText);
+ if (($intTextLength < $intMinimum) || ($intTextLength > $intMaximum)) {
+ return false;
+ } else {
+ return true;
+ }
+ }
+}
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/FeedParser.php b/mod/dokuwiki/vendors/dokuwiki/inc/FeedParser.php
new file mode 100644
index 000000000..f37888f01
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/FeedParser.php
@@ -0,0 +1,76 @@
+<?php
+/**
+ * Class used to parse RSS and ATOM feeds
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+if(!defined('DOKU_INC')) die('meh.');
+require_once(DOKU_INC.'inc/HTTPClient.php');
+require_once(DOKU_INC.'inc/SimplePie.php');
+
+
+/**
+ * We override some methods of the original SimplePie class here
+ */
+class FeedParser extends SimplePie {
+
+ /**
+ * Constructor. Set some defaults
+ */
+ function FeedParser(){
+ $this->SimplePie();
+ $this->enable_cache(false);
+ $this->set_file_class('FeedParser_File');
+ }
+
+ /**
+ * Backward compatibility for older plugins
+ */
+ function feed_url($url){
+ $this->set_feed_url($url);
+ }
+}
+
+/**
+ * Fetch an URL using our own HTTPClient
+ *
+ * Replaces SimplePie's own class
+ */
+class FeedParser_File extends SimplePie_File {
+ var $http;
+ var $useragent;
+ var $success = true;
+ var $headers = array();
+ var $body;
+ var $error;
+
+ /**
+ * Inititializes the HTTPClient
+ *
+ * We ignore all given parameters - they are set in DokuHTTPClient
+ */
+ function FeedParser_File($url, $timeout=10, $redirects=5,
+ $headers=null, $useragent=null, $force_fsockopen=false) {
+ $this->http = new DokuHTTPClient();
+ $this->success = $this->http->sendRequest($url);
+
+ $this->headers = $this->http->resp_headers;
+ $this->body = $this->http->resp_body;
+ $this->error = $this->http->error;
+ return $this->success;
+ }
+
+ function headers(){
+ return $this->headers;
+ }
+
+ function body(){
+ return $this->body;
+ }
+
+ function close(){
+ return true;
+ }
+
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/HTTPClient.php b/mod/dokuwiki/vendors/dokuwiki/inc/HTTPClient.php
new file mode 100644
index 000000000..578d7e7cd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/HTTPClient.php
@@ -0,0 +1,573 @@
+<?php
+/**
+ * HTTP Client
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Goetz <cpuidle@gmx.de>
+ */
+
+
+define('HTTP_NL',"\r\n");
+
+
+/**
+ * Adds DokuWiki specific configs to the HTTP client
+ *
+ * @author Andreas Goetz <cpuidle@gmx.de>
+ */
+class DokuHTTPClient extends HTTPClient {
+
+ /**
+ * Constructor.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function DokuHTTPClient(){
+ global $conf;
+
+ // call parent constructor
+ $this->HTTPClient();
+
+ // set some values from the config
+ $this->proxy_host = $conf['proxy']['host'];
+ $this->proxy_port = $conf['proxy']['port'];
+ $this->proxy_user = $conf['proxy']['user'];
+ $this->proxy_pass = conf_decodeString($conf['proxy']['pass']);
+ $this->proxy_ssl = $conf['proxy']['ssl'];
+ }
+
+
+ /**
+ * Wraps an event around the parent function
+ *
+ * @triggers HTTPCLIENT_REQUEST_SEND
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function sendRequest($url,$data='',$method='GET'){
+ $httpdata = array('url' => $url,
+ 'data' => $data,
+ 'method' => $method);
+ $evt = new Doku_Event('HTTPCLIENT_REQUEST_SEND',$httpdata);
+ if($evt->advise_before()){
+ $url = $httpdata['url'];
+ $data = $httpdata['data'];
+ $method = $httpdata['method'];
+ }
+ $evt->advise_after();
+ unset($evt);
+ return parent::sendRequest($url,$data,$method);
+ }
+
+}
+
+/**
+ * This class implements a basic HTTP client
+ *
+ * It supports POST and GET, Proxy usage, basic authentication,
+ * handles cookies and referers. It is based upon the httpclient
+ * function from the VideoDB project.
+ *
+ * @link http://www.splitbrain.org/go/videodb
+ * @author Andreas Goetz <cpuidle@gmx.de>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+class HTTPClient {
+ //set these if you like
+ var $agent; // User agent
+ var $http; // HTTP version defaults to 1.0
+ var $timeout; // read timeout (seconds)
+ var $cookies;
+ var $referer;
+ var $max_redirect;
+ var $max_bodysize;
+ var $max_bodysize_abort = true; // if set, abort if the response body is bigger than max_bodysize
+ var $header_regexp; // if set this RE must match against the headers, else abort
+ var $headers;
+ var $debug;
+ var $start = 0; // for timings
+
+ // don't set these, read on error
+ var $error;
+ var $redirect_count;
+
+ // read these after a successful request
+ var $resp_status;
+ var $resp_body;
+ var $resp_headers;
+
+ // set these to do basic authentication
+ var $user;
+ var $pass;
+
+ // set these if you need to use a proxy
+ var $proxy_host;
+ var $proxy_port;
+ var $proxy_user;
+ var $proxy_pass;
+ var $proxy_ssl; //boolean set to true if your proxy needs SSL
+
+ // what we use as boundary on multipart/form-data posts
+ var $boundary = '---DokuWikiHTTPClient--4523452351';
+
+ /**
+ * Constructor.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function HTTPClient(){
+ $this->agent = 'Mozilla/4.0 (compatible; DokuWiki HTTP Client; '.PHP_OS.')';
+ $this->timeout = 15;
+ $this->cookies = array();
+ $this->referer = '';
+ $this->max_redirect = 3;
+ $this->redirect_count = 0;
+ $this->status = 0;
+ $this->headers = array();
+ $this->http = '1.0';
+ $this->debug = false;
+ $this->max_bodysize = 0;
+ $this->header_regexp= '';
+ if(extension_loaded('zlib')) $this->headers['Accept-encoding'] = 'gzip';
+ $this->headers['Accept'] = 'text/xml,application/xml,application/xhtml+xml,'.
+ 'text/html,text/plain,image/png,image/jpeg,image/gif,*/*';
+ $this->headers['Accept-Language'] = 'en-us';
+ }
+
+
+ /**
+ * Simple function to do a GET request
+ *
+ * Returns the wanted page or false on an error;
+ *
+ * @param string $url The URL to fetch
+ * @param bool $sloppy304 Return body on 304 not modified
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function get($url,$sloppy304=false){
+ if(!$this->sendRequest($url)) return false;
+ if($this->status == 304 && $sloppy304) return $this->resp_body;
+ if($this->status < 200 || $this->status > 206) return false;
+ return $this->resp_body;
+ }
+
+ /**
+ * Simple function to do a POST request
+ *
+ * Returns the resulting page or false on an error;
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function post($url,$data){
+ if(!$this->sendRequest($url,$data,'POST')) return false;
+ if($this->status < 200 || $this->status > 206) return false;
+ return $this->resp_body;
+ }
+
+ /**
+ * Send an HTTP request
+ *
+ * This method handles the whole HTTP communication. It respects set proxy settings,
+ * builds the request headers, follows redirects and parses the response.
+ *
+ * Post data should be passed as associative array. When passed as string it will be
+ * sent as is. You will need to setup your own Content-Type header then.
+ *
+ * @param string $url - the complete URL
+ * @param mixed $data - the post data either as array or raw data
+ * @param string $method - HTTP Method usually GET or POST.
+ * @return bool - true on success
+ * @author Andreas Goetz <cpuidle@gmx.de>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function sendRequest($url,$data='',$method='GET'){
+ $this->start = $this->_time();
+ $this->error = '';
+ $this->status = 0;
+
+ // don't accept gzip if truncated bodies might occur
+ if($this->max_bodysize &&
+ !$this->max_bodysize_abort &&
+ $this->headers['Accept-encoding'] == 'gzip'){
+ unset($this->headers['Accept-encoding']);
+ }
+
+ // parse URL into bits
+ $uri = parse_url($url);
+ $server = $uri['host'];
+ $path = $uri['path'];
+ if(empty($path)) $path = '/';
+ if(!empty($uri['query'])) $path .= '?'.$uri['query'];
+ $port = $uri['port'];
+ if(isset($uri['user'])) $this->user = $uri['user'];
+ if(isset($uri['pass'])) $this->pass = $uri['pass'];
+
+ // proxy setup
+ if($this->proxy_host){
+ $request_url = $url;
+ $server = $this->proxy_host;
+ $port = $this->proxy_port;
+ if (empty($port)) $port = 8080;
+ }else{
+ $request_url = $path;
+ $server = $server;
+ if (empty($port)) $port = ($uri['scheme'] == 'https') ? 443 : 80;
+ }
+
+ // add SSL stream prefix if needed - needs SSL support in PHP
+ if($port == 443 || $this->proxy_ssl) $server = 'ssl://'.$server;
+
+ // prepare headers
+ $headers = $this->headers;
+ $headers['Host'] = $uri['host'];
+ $headers['User-Agent'] = $this->agent;
+ $headers['Referer'] = $this->referer;
+ $headers['Connection'] = 'Close';
+ if($method == 'POST'){
+ if(is_array($data)){
+ if($headers['Content-Type'] == 'multipart/form-data'){
+ $headers['Content-Type'] = 'multipart/form-data; boundary='.$this->boundary;
+ $data = $this->_postMultipartEncode($data);
+ }else{
+ $headers['Content-Type'] = 'application/x-www-form-urlencoded';
+ $data = $this->_postEncode($data);
+ }
+ }
+ $headers['Content-Length'] = strlen($data);
+ $rmethod = 'POST';
+ }elseif($method == 'GET'){
+ $data = ''; //no data allowed on GET requests
+ }
+ if($this->user) {
+ $headers['Authorization'] = 'Basic '.base64_encode($this->user.':'.$this->pass);
+ }
+ if($this->proxy_user) {
+ $headers['Proxy-Authorization'] = 'Basic '.base64_encode($this->proxy_user.':'.$this->proxy_pass);
+ }
+
+ // stop time
+ $start = time();
+
+ // open socket
+ $socket = @fsockopen($server,$port,$errno, $errstr, $this->timeout);
+ if (!$socket){
+ $resp->status = '-100';
+ $this->error = "Could not connect to $server:$port\n$errstr ($errno)";
+ return false;
+ }
+ //set non blocking
+ stream_set_blocking($socket,0);
+
+ // build request
+ $request = "$method $request_url HTTP/".$this->http.HTTP_NL;
+ $request .= $this->_buildHeaders($headers);
+ $request .= $this->_getCookies();
+ $request .= HTTP_NL;
+ $request .= $data;
+
+ $this->_debug('request',$request);
+
+ // send request
+ $towrite = strlen($request);
+ $written = 0;
+ while($written < $towrite){
+ $ret = fwrite($socket, substr($request,$written));
+ if($ret === false){
+ $this->status = -100;
+ $this->error = 'Failed writing to socket';
+ return false;
+ }
+ $written += $ret;
+ }
+
+
+ // read headers from socket
+ $r_headers = '';
+ do{
+ if(time()-$start > $this->timeout){
+ $this->status = -100;
+ $this->error = sprintf('Timeout while reading headers (%.3fs)',$this->_time() - $this->start);
+ return false;
+ }
+ if(feof($socket)){
+ $this->error = 'Premature End of File (socket)';
+ return false;
+ }
+ $r_headers .= fgets($socket,1024);
+ }while(!preg_match('/\r?\n\r?\n$/',$r_headers));
+
+ $this->_debug('response headers',$r_headers);
+
+ // check if expected body size exceeds allowance
+ if($this->max_bodysize && preg_match('/\r?\nContent-Length:\s*(\d+)\r?\n/i',$r_headers,$match)){
+ if($match[1] > $this->max_bodysize){
+ $this->error = 'Reported content length exceeds allowed response size';
+ if ($this->max_bodysize_abort)
+ return false;
+ }
+ }
+
+ // get Status
+ if (!preg_match('/^HTTP\/(\d\.\d)\s*(\d+).*?\n/', $r_headers, $m)) {
+ $this->error = 'Server returned bad answer';
+ return false;
+ }
+ $this->status = $m[2];
+
+ // handle headers and cookies
+ $this->resp_headers = $this->_parseHeaders($r_headers);
+ if(isset($this->resp_headers['set-cookie'])){
+ foreach ((array) $this->resp_headers['set-cookie'] as $cookie){
+ list($cookie) = explode(';',$cookie,2);
+ list($key,$val) = explode('=',$cookie,2);
+ $key = trim($key);
+ if($val == 'deleted'){
+ if(isset($this->cookies[$key])){
+ unset($this->cookies[$key]);
+ }
+ }elseif($key){
+ $this->cookies[$key] = $val;
+ }
+ }
+ }
+
+ $this->_debug('Object headers',$this->resp_headers);
+
+ // check server status code to follow redirect
+ if($this->status == 301 || $this->status == 302 ){
+ if (empty($this->resp_headers['location'])){
+ $this->error = 'Redirect but no Location Header found';
+ return false;
+ }elseif($this->redirect_count == $this->max_redirect){
+ $this->error = 'Maximum number of redirects exceeded';
+ return false;
+ }else{
+ $this->redirect_count++;
+ $this->referer = $url;
+ // handle non-RFC-compliant relative redirects
+ if (!preg_match('/^http/i', $this->resp_headers['location'])){
+ if($this->resp_headers['location'][0] != '/'){
+ $this->resp_headers['location'] = $uri['scheme'].'://'.$uri['host'].':'.$uri['port'].
+ dirname($uri['path']).'/'.$this->resp_headers['location'];
+ }else{
+ $this->resp_headers['location'] = $uri['scheme'].'://'.$uri['host'].':'.$uri['port'].
+ $this->resp_headers['location'];
+ }
+ }
+ // perform redirected request, always via GET (required by RFC)
+ return $this->sendRequest($this->resp_headers['location'],array(),'GET');
+ }
+ }
+
+ // check if headers are as expected
+ if($this->header_regexp && !preg_match($this->header_regexp,$r_headers)){
+ $this->error = 'The received headers did not match the given regexp';
+ return false;
+ }
+
+ //read body (with chunked encoding if needed)
+ $r_body = '';
+ if(preg_match('/transfer\-(en)?coding:\s*chunked\r\n/i',$r_headers)){
+ do {
+ unset($chunk_size);
+ do {
+ if(feof($socket)){
+ $this->error = 'Premature End of File (socket)';
+ return false;
+ }
+ if(time()-$start > $this->timeout){
+ $this->status = -100;
+ $this->error = sprintf('Timeout while reading chunk (%.3fs)',$this->_time() - $this->start);
+ return false;
+ }
+ $byte = fread($socket,1);
+ $chunk_size .= $byte;
+ } while (preg_match('/[a-zA-Z0-9]/',$byte)); // read chunksize including \r
+
+ $byte = fread($socket,1); // readtrailing \n
+ $chunk_size = hexdec($chunk_size);
+ if ($chunk_size) {
+ $this_chunk = fread($socket,$chunk_size);
+ $r_body .= $this_chunk;
+ $byte = fread($socket,2); // read trailing \r\n
+ }
+
+ if($this->max_bodysize && strlen($r_body) > $this->max_bodysize){
+ $this->error = 'Allowed response size exceeded';
+ if ($this->max_bodysize_abort)
+ return false;
+ else
+ break;
+ }
+ } while ($chunk_size);
+ }else{
+ // read entire socket
+ while (!feof($socket)) {
+ if(time()-$start > $this->timeout){
+ $this->status = -100;
+ $this->error = sprintf('Timeout while reading response (%.3fs)',$this->_time() - $this->start);
+ return false;
+ }
+ $r_body .= fread($socket,4096);
+ $r_size = strlen($r_body);
+ if($this->max_bodysize && $r_size > $this->max_bodysize){
+ $this->error = 'Allowed response size exceeded';
+ if ($this->max_bodysize_abort)
+ return false;
+ else
+ break;
+ }
+ if(isset($this->resp_headers['content-length']) &&
+ !isset($this->resp_headers['transfer-encoding']) &&
+ $this->resp_headers['content-length'] == $r_size){
+ // we read the content-length, finish here
+ break;
+ }
+ }
+ }
+
+ // close socket
+ $status = socket_get_status($socket);
+ fclose($socket);
+
+ // decode gzip if needed
+ if(isset($this->resp_headers['content-encoding']) &&
+ $this->resp_headers['content-encoding'] == 'gzip' &&
+ strlen($r_body) > 10 && substr($r_body,0,3)=="\x1f\x8b\x08"){
+ $this->resp_body = @gzinflate(substr($r_body, 10));
+ }else{
+ $this->resp_body = $r_body;
+ }
+
+ $this->_debug('response body',$this->resp_body);
+ $this->redirect_count = 0;
+ return true;
+ }
+
+ /**
+ * print debug info
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _debug($info,$var=null){
+ if(!$this->debug) return;
+ print '<b>'.$info.'</b> '.($this->_time() - $this->start).'s<br />';
+ if(!is_null($var)){
+ ob_start();
+ print_r($var);
+ $content = htmlspecialchars(ob_get_contents());
+ ob_end_clean();
+ print '<pre>'.$content.'</pre>';
+ }
+ }
+
+ /**
+ * Return current timestamp in microsecond resolution
+ */
+ function _time(){
+ list($usec, $sec) = explode(" ", microtime());
+ return ((float)$usec + (float)$sec);
+ }
+
+ /**
+ * convert given header string to Header array
+ *
+ * All Keys are lowercased.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _parseHeaders($string){
+ $headers = array();
+ $lines = explode("\n",$string);
+ foreach($lines as $line){
+ list($key,$val) = explode(':',$line,2);
+ $key = strtolower(trim($key));
+ $val = trim($val);
+ if(empty($val)) continue;
+ if(isset($headers[$key])){
+ if(is_array($headers[$key])){
+ $headers[$key][] = $val;
+ }else{
+ $headers[$key] = array($headers[$key],$val);
+ }
+ }else{
+ $headers[$key] = $val;
+ }
+ }
+ return $headers;
+ }
+
+ /**
+ * convert given header array to header string
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _buildHeaders($headers){
+ $string = '';
+ foreach($headers as $key => $value){
+ if(empty($value)) continue;
+ $string .= $key.': '.$value.HTTP_NL;
+ }
+ return $string;
+ }
+
+ /**
+ * get cookies as http header string
+ *
+ * @author Andreas Goetz <cpuidle@gmx.de>
+ */
+ function _getCookies(){
+ $headers = '';
+ foreach ($this->cookies as $key => $val){
+ $headers .= "$key=$val; ";
+ }
+ $headers = substr($headers, 0, -2);
+ if ($headers !== '') $headers = "Cookie: $headers".HTTP_NL;
+ return $headers;
+ }
+
+ /**
+ * Encode data for posting
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _postEncode($data){
+ foreach($data as $key => $val){
+ if($url) $url .= '&';
+ $url .= urlencode($key).'='.urlencode($val);
+ }
+ return $url;
+ }
+
+ /**
+ * Encode data for posting using multipart encoding
+ *
+ * @fixme use of urlencode might be wrong here
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _postMultipartEncode($data){
+ $boundary = '--'.$this->boundary;
+ $out = '';
+ foreach($data as $key => $val){
+ $out .= $boundary.HTTP_NL;
+ if(!is_array($val)){
+ $out .= 'Content-Disposition: form-data; name="'.urlencode($key).'"'.HTTP_NL;
+ $out .= HTTP_NL; // end of headers
+ $out .= $val;
+ $out .= HTTP_NL;
+ }else{
+ $out .= 'Content-Disposition: form-data; name="'.urlencode($key).'"';
+ if($val['filename']) $out .= '; filename="'.urlencode($val['filename']).'"';
+ $out .= HTTP_NL;
+ if($val['mimetype']) $out .= 'Content-Type: '.$val['mimetype'].HTTP_NL;
+ $out .= HTTP_NL; // end of headers
+ $out .= $val['body'];
+ $out .= HTTP_NL;
+ }
+ }
+ $out .= "$boundary--".HTTP_NL;
+ return $out;
+ }
+
+}
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/IXR_Library.php b/mod/dokuwiki/vendors/dokuwiki/inc/IXR_Library.php
new file mode 100644
index 000000000..2752e31f2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/IXR_Library.php
@@ -0,0 +1,817 @@
+<?php
+/**
+ * IXR - The Inutio XML-RPC Library - (c) Incutio Ltd 2002
+ *
+ * @version 1.61
+ * @author Simon Willison
+ * @date 11th July 2003
+ * @link http://scripts.incutio.com/xmlrpc/
+ * @link http://scripts.incutio.com/xmlrpc/manual.php
+ * @license Artistic License http://www.opensource.org/licenses/artistic-license.php
+ *
+ * Modified for DokuWiki
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+
+class IXR_Value {
+ var $data;
+ var $type;
+ function IXR_Value ($data, $type = false) {
+ $this->data = $data;
+ if (!$type) {
+ $type = $this->calculateType();
+ }
+ $this->type = $type;
+ if ($type == 'struct') {
+ /* Turn all the values in the array in to new IXR_Value objects */
+ foreach ($this->data as $key => $value) {
+ $this->data[$key] = new IXR_Value($value);
+ }
+ }
+ if ($type == 'array') {
+ for ($i = 0, $j = count($this->data); $i < $j; $i++) {
+ $this->data[$i] = new IXR_Value($this->data[$i]);
+ }
+ }
+ }
+ function calculateType() {
+ if ($this->data === true || $this->data === false) {
+ return 'boolean';
+ }
+ if (is_integer($this->data)) {
+ return 'int';
+ }
+ if (is_double($this->data)) {
+ return 'double';
+ }
+ // Deal with IXR object types base64 and date
+ if (is_object($this->data) && is_a($this->data, 'IXR_Date')) {
+ return 'date';
+ }
+ if (is_object($this->data) && is_a($this->data, 'IXR_Base64')) {
+ return 'base64';
+ }
+ // If it is a normal PHP object convert it in to a struct
+ if (is_object($this->data)) {
+
+ $this->data = get_object_vars($this->data);
+ return 'struct';
+ }
+ if (!is_array($this->data)) {
+ return 'string';
+ }
+ /* We have an array - is it an array or a struct ? */
+ if ($this->isStruct($this->data)) {
+ return 'struct';
+ } else {
+ return 'array';
+ }
+ }
+ function getXml() {
+ /* Return XML for this value */
+ switch ($this->type) {
+ case 'boolean':
+ return '<boolean>'.(($this->data) ? '1' : '0').'</boolean>';
+ break;
+ case 'int':
+ return '<int>'.$this->data.'</int>';
+ break;
+ case 'double':
+ return '<double>'.$this->data.'</double>';
+ break;
+ case 'string':
+ return '<string>'.htmlspecialchars($this->data).'</string>';
+ break;
+ case 'array':
+ $return = '<array><data>'."\n";
+ foreach ($this->data as $item) {
+ $return .= ' <value>'.$item->getXml()."</value>\n";
+ }
+ $return .= '</data></array>';
+ return $return;
+ break;
+ case 'struct':
+ $return = '<struct>'."\n";
+ foreach ($this->data as $name => $value) {
+ $return .= " <member><name>$name</name><value>";
+ $return .= $value->getXml()."</value></member>\n";
+ }
+ $return .= '</struct>';
+ return $return;
+ break;
+ case 'date':
+ case 'base64':
+ return $this->data->getXml();
+ break;
+ }
+ return false;
+ }
+ function isStruct($array) {
+ /* Nasty function to check if an array is a struct or not */
+ $expected = 0;
+ foreach ($array as $key => $value) {
+ if ((string)$key != (string)$expected) {
+ return true;
+ }
+ $expected++;
+ }
+ return false;
+ }
+}
+
+
+class IXR_Message {
+ var $message;
+ var $messageType; // methodCall / methodResponse / fault
+ var $faultCode;
+ var $faultString;
+ var $methodName;
+ var $params;
+ // Current variable stacks
+ var $_arraystructs = array(); // The stack used to keep track of the current array/struct
+ var $_arraystructstypes = array(); // Stack keeping track of if things are structs or array
+ var $_currentStructName = array(); // A stack as well
+ var $_param;
+ var $_value;
+ var $_currentTag;
+ var $_currentTagContents;
+ // The XML parser
+ var $_parser;
+ function IXR_Message ($message) {
+ $this->message = $message;
+ }
+ function parse() {
+ // first remove the XML declaration
+ $this->message = preg_replace('/<\?xml(.*)?\?'.'>/', '', $this->message);
+ // workaround for a bug in PHP/libxml2, see http://bugs.php.net/bug.php?id=45996
+ $this->message = str_replace('&lt;', '&#60;', $this->message);
+ $this->message = str_replace('&gt;', '&#62;', $this->message);
+ $this->message = str_replace('&amp;', '&#38;', $this->message);
+ $this->message = str_replace('&apos;', '&#39;', $this->message);
+ $this->message = str_replace('&quot;', '&#34;', $this->message);
+ if (trim($this->message) == '') {
+ return false;
+ }
+ $this->_parser = xml_parser_create();
+ // Set XML parser to take the case of tags in to account
+ xml_parser_set_option($this->_parser, XML_OPTION_CASE_FOLDING, false);
+ // Set XML parser callback functions
+ xml_set_object($this->_parser, $this);
+ xml_set_element_handler($this->_parser, 'tag_open', 'tag_close');
+ xml_set_character_data_handler($this->_parser, 'cdata');
+ if (!xml_parse($this->_parser, $this->message)) {
+ /* die(sprintf('XML error: %s at line %d',
+ xml_error_string(xml_get_error_code($this->_parser)),
+ xml_get_current_line_number($this->_parser))); */
+ return false;
+ }
+ xml_parser_free($this->_parser);
+ // Grab the error messages, if any
+ if ($this->messageType == 'fault') {
+ $this->faultCode = $this->params[0]['faultCode'];
+ $this->faultString = $this->params[0]['faultString'];
+ }
+ return true;
+ }
+ function tag_open($parser, $tag, $attr) {
+ $this->currentTag = $tag;
+ $this->_currentTagContents = '';
+ switch($tag) {
+ case 'methodCall':
+ case 'methodResponse':
+ case 'fault':
+ $this->messageType = $tag;
+ break;
+ /* Deal with stacks of arrays and structs */
+ case 'data': // data is to all intents and puposes more interesting than array
+ $this->_arraystructstypes[] = 'array';
+ $this->_arraystructs[] = array();
+ break;
+ case 'struct':
+ $this->_arraystructstypes[] = 'struct';
+ $this->_arraystructs[] = array();
+ break;
+ }
+ }
+ function cdata($parser, $cdata) {
+ $this->_currentTagContents .= $cdata;
+ }
+ function tag_close($parser, $tag) {
+ $valueFlag = false;
+ switch($tag) {
+ case 'int':
+ case 'i4':
+ $value = (int)trim($this->_currentTagContents);
+ $this->_currentTagContents = '';
+ $valueFlag = true;
+ break;
+ case 'double':
+ $value = (double)trim($this->_currentTagContents);
+ $this->_currentTagContents = '';
+ $valueFlag = true;
+ break;
+ case 'string':
+ $value = (string)$this->_currentTagContents;
+ $this->_currentTagContents = '';
+ $valueFlag = true;
+ break;
+ case 'dateTime.iso8601':
+ $value = new IXR_Date(trim($this->_currentTagContents));
+ // $value = $iso->getTimestamp();
+ $this->_currentTagContents = '';
+ $valueFlag = true;
+ break;
+ case 'value':
+ // "If no type is indicated, the type is string."
+ if (trim($this->_currentTagContents) != '') {
+ $value = (string)$this->_currentTagContents;
+ $this->_currentTagContents = '';
+ $valueFlag = true;
+ }
+ break;
+ case 'boolean':
+ $value = (boolean)trim($this->_currentTagContents);
+ $this->_currentTagContents = '';
+ $valueFlag = true;
+ break;
+ case 'base64':
+ $value = base64_decode($this->_currentTagContents);
+ $this->_currentTagContents = '';
+ $valueFlag = true;
+ break;
+ /* Deal with stacks of arrays and structs */
+ case 'data':
+ case 'struct':
+ $value = array_pop($this->_arraystructs);
+ array_pop($this->_arraystructstypes);
+ $valueFlag = true;
+ break;
+ case 'member':
+ array_pop($this->_currentStructName);
+ break;
+ case 'name':
+ $this->_currentStructName[] = trim($this->_currentTagContents);
+ $this->_currentTagContents = '';
+ break;
+ case 'methodName':
+ $this->methodName = trim($this->_currentTagContents);
+ $this->_currentTagContents = '';
+ break;
+ }
+ if ($valueFlag) {
+ /*
+ if (!is_array($value) && !is_object($value)) {
+ $value = trim($value);
+ }
+ */
+ if (count($this->_arraystructs) > 0) {
+ // Add value to struct or array
+ if ($this->_arraystructstypes[count($this->_arraystructstypes)-1] == 'struct') {
+ // Add to struct
+ $this->_arraystructs[count($this->_arraystructs)-1][$this->_currentStructName[count($this->_currentStructName)-1]] = $value;
+ } else {
+ // Add to array
+ $this->_arraystructs[count($this->_arraystructs)-1][] = $value;
+ }
+ } else {
+ // Just add as a paramater
+ $this->params[] = $value;
+ }
+ }
+ }
+}
+
+
+class IXR_Server {
+ var $data;
+ var $callbacks = array();
+ var $message;
+ var $capabilities;
+ function IXR_Server($callbacks = false, $data = false) {
+ $this->setCapabilities();
+ if ($callbacks) {
+ $this->callbacks = $callbacks;
+ }
+ $this->setCallbacks();
+ $this->serve($data);
+ }
+ function serve($data = false) {
+ if (!$data) {
+ global $HTTP_RAW_POST_DATA;
+ if (!$HTTP_RAW_POST_DATA) {
+ die('XML-RPC server accepts POST requests only.');
+ }
+ $data = $HTTP_RAW_POST_DATA;
+ }
+ $this->message = new IXR_Message($data);
+ if (!$this->message->parse()) {
+ $this->error(-32700, 'parse error. not well formed');
+ }
+ if ($this->message->messageType != 'methodCall') {
+ $this->error(-32600, 'server error. invalid xml-rpc. not conforming to spec. Request must be a methodCall');
+ }
+ $result = $this->call($this->message->methodName, $this->message->params);
+ // Is the result an error?
+ if (is_a($result, 'IXR_Error')) {
+ $this->error($result);
+ }
+ // Encode the result
+ $r = new IXR_Value($result);
+ $resultxml = $r->getXml();
+ // Create the XML
+ $xml = <<<EOD
+<methodResponse>
+ <params>
+ <param>
+ <value>
+ $resultxml
+ </value>
+ </param>
+ </params>
+</methodResponse>
+
+EOD;
+ // Send it
+ $this->output($xml);
+ }
+ function call($methodname, $args) {
+ if (!$this->hasMethod($methodname)) {
+ return new IXR_Error(-32601, 'server error. requested method '.$methodname.' does not exist.');
+ }
+ $method = $this->callbacks[$methodname];
+ // Perform the callback and send the response
+
+# Removed for DokuWiki to have a more consistent interface
+# if (count($args) == 1) {
+# // If only one paramater just send that instead of the whole array
+# $args = $args[0];
+# }
+
+
+# Adjusted for DokuWiki to use call_user_func_array
+
+ // args need to be an array
+ $args = (array) $args;
+
+ // Are we dealing with a function or a method?
+ if (substr($method, 0, 5) == 'this:') {
+ // It's a class method - check it exists
+ $method = substr($method, 5);
+ if (!method_exists($this, $method)) {
+ return new IXR_Error(-32601, 'server error. requested class method "'.$method.'" does not exist.');
+ }
+ // Call the method
+ #$result = $this->$method($args);
+ $result = call_user_func_array(array(&$this,$method),$args);
+ } elseif (substr($method, 0, 7) == 'plugin:') {
+ require_once(DOKU_INC.'inc/pluginutils.php');
+ list($pluginname, $callback) = explode(':', substr($method, 7), 2);
+ if(!plugin_isdisabled($pluginname)) {
+ $plugin = plugin_load('action', $pluginname);
+ return call_user_func_array(array($plugin, $callback), $args);
+ } else {
+ return new IXR_Error(-99999, 'server error');
+ }
+ } else {
+ // It's a function - does it exist?
+ if (!function_exists($method)) {
+ return new IXR_Error(-32601, 'server error. requested function "'.$method.'" does not exist.');
+ }
+ // Call the function
+ #$result = $method($args);
+ $result = call_user_func_array($method,$args);
+ }
+ return $result;
+ }
+
+ function error($error, $message = false) {
+ // Accepts either an error object or an error code and message
+ if ($message && !is_object($error)) {
+ $error = new IXR_Error($error, $message);
+ }
+ $this->output($error->getXml());
+ }
+ function output($xml) {
+ $xml = '<?xml version="1.0"?>'."\n".$xml;
+ $length = strlen($xml);
+ header('Connection: close');
+ header('Content-Length: '.$length);
+ header('Content-Type: text/xml');
+ header('Date: '.date('r'));
+ echo $xml;
+ exit;
+ }
+ function hasMethod($method) {
+ return in_array($method, array_keys($this->callbacks));
+ }
+ function setCapabilities() {
+ // Initialises capabilities array
+ $this->capabilities = array(
+ 'xmlrpc' => array(
+ 'specUrl' => 'http://www.xmlrpc.com/spec',
+ 'specVersion' => 1
+ ),
+ 'faults_interop' => array(
+ 'specUrl' => 'http://xmlrpc-epi.sourceforge.net/specs/rfc.fault_codes.php',
+ 'specVersion' => 20010516
+ ),
+ 'system.multicall' => array(
+ 'specUrl' => 'http://www.xmlrpc.com/discuss/msgReader$1208',
+ 'specVersion' => 1
+ ),
+ );
+ }
+ function getCapabilities() {
+ return $this->capabilities;
+ }
+ function setCallbacks() {
+ $this->callbacks['system.getCapabilities'] = 'this:getCapabilities';
+ $this->callbacks['system.listMethods'] = 'this:listMethods';
+ $this->callbacks['system.multicall'] = 'this:multiCall';
+ }
+ function listMethods() {
+ // Returns a list of methods - uses array_reverse to ensure user defined
+ // methods are listed before server defined methods
+ return array_reverse(array_keys($this->callbacks));
+ }
+ function multiCall($methodcalls) {
+ // See http://www.xmlrpc.com/discuss/msgReader$1208
+ $return = array();
+ foreach ($methodcalls as $call) {
+ $method = $call['methodName'];
+ $params = $call['params'];
+ if ($method == 'system.multicall') {
+ $result = new IXR_Error(-32600, 'Recursive calls to system.multicall are forbidden');
+ } else {
+ $result = $this->call($method, $params);
+ }
+ if (is_a($result, 'IXR_Error')) {
+ $return[] = array(
+ 'faultCode' => $result->code,
+ 'faultString' => $result->message
+ );
+ } else {
+ $return[] = array($result);
+ }
+ }
+ return $return;
+ }
+}
+
+class IXR_Request {
+ var $method;
+ var $args;
+ var $xml;
+ function IXR_Request($method, $args) {
+ $this->method = $method;
+ $this->args = $args;
+ $this->xml = <<<EOD
+<?xml version="1.0"?>
+<methodCall>
+<methodName>{$this->method}</methodName>
+<params>
+
+EOD;
+ foreach ($this->args as $arg) {
+ $this->xml .= '<param><value>';
+ $v = new IXR_Value($arg);
+ $this->xml .= $v->getXml();
+ $this->xml .= "</value></param>\n";
+ }
+ $this->xml .= '</params></methodCall>';
+ }
+ function getLength() {
+ return strlen($this->xml);
+ }
+ function getXml() {
+ return $this->xml;
+ }
+}
+
+/**
+ * Changed for DokuWiki to use DokuHTTPClient
+ *
+ * This should be compatible to the original class, but uses DokuWiki's
+ * HTTP client library which will respect proxy settings
+ *
+ * Because the XMLRPC client is not used in DokuWiki currently this is completely
+ * untested
+ */
+class IXR_Client extends DokuHTTPClient {
+ var $posturl = '';
+ var $message = false;
+ var $xmlerror = false;
+
+ function IXR_Client($server, $path = false, $port = 80) {
+ $this->DokuHTTPClient();
+ if (!$path) {
+ // Assume we have been given a URL instead
+ $this->posturl = $server;
+ }else{
+ $this->posturl = 'http://'.$server.':'.$port.$path;
+ }
+ }
+
+ function query() {
+ $args = func_get_args();
+ $method = array_shift($args);
+ $request = new IXR_Request($method, $args);
+ $xml = $request->getXml();
+
+ $this->headers['Content-Type'] = 'text/xml';
+ if(!$this->sendRequest($this->posturl,$xml,'POST')){
+ $this->xmlerror = new IXR_Error(-32300, 'transport error - '.$this->error);
+ return false;
+ }
+
+ // Check HTTP Response code
+ if($this->status < 200 || $this->status > 206){
+ $this->xmlerror = new IXR_Error(-32300, 'transport error - HTTP status '.$this->status);
+ return false;
+ }
+
+ // Now parse what we've got back
+ $this->message = new IXR_Message($this->resp_body);
+ if (!$this->message->parse()) {
+ // XML error
+ $this->xmlerror = new IXR_Error(-32700, 'parse error. not well formed');
+ return false;
+ }
+ // Is the message a fault?
+ if ($this->message->messageType == 'fault') {
+ $this->xmlerror = new IXR_Error($this->message->faultCode, $this->message->faultString);
+ return false;
+ }
+ // Message must be OK
+ return true;
+ }
+ function getResponse() {
+ // methodResponses can only have one param - return that
+ return $this->message->params[0];
+ }
+ function isError() {
+ return (is_object($this->xmlerror));
+ }
+ function getErrorCode() {
+ return $this->xmlerror->code;
+ }
+ function getErrorMessage() {
+ return $this->xmlerror->message;
+ }
+}
+
+
+class IXR_Error {
+ var $code;
+ var $message;
+ function IXR_Error($code, $message) {
+ $this->code = $code;
+ $this->message = $message;
+ }
+ function getXml() {
+ $xml = <<<EOD
+<methodResponse>
+ <fault>
+ <value>
+ <struct>
+ <member>
+ <name>faultCode</name>
+ <value><int>{$this->code}</int></value>
+ </member>
+ <member>
+ <name>faultString</name>
+ <value><string>{$this->message}</string></value>
+ </member>
+ </struct>
+ </value>
+ </fault>
+</methodResponse>
+
+EOD;
+ return $xml;
+ }
+}
+
+
+class IXR_Date {
+ var $year;
+ var $month;
+ var $day;
+ var $hour;
+ var $minute;
+ var $second;
+ function IXR_Date($time) {
+ // $time can be a PHP timestamp or an ISO one
+ if (is_numeric($time)) {
+ $this->parseTimestamp($time);
+ } else {
+ $this->parseIso($time);
+ }
+ }
+ function parseTimestamp($timestamp) {
+ $this->year = gmdate('Y', $timestamp);
+ $this->month = gmdate('m', $timestamp);
+ $this->day = gmdate('d', $timestamp);
+ $this->hour = gmdate('H', $timestamp);
+ $this->minute = gmdate('i', $timestamp);
+ $this->second = gmdate('s', $timestamp);
+ }
+ function parseIso($iso) {
+ $this->year = substr($iso, 0, 4);
+ $this->month = substr($iso, 5, 2);
+ $this->day = substr($iso, 8, 2);
+ $this->hour = substr($iso, 11, 2);
+ $this->minute = substr($iso, 14, 2);
+ $this->second = substr($iso, 17, 2);
+ }
+ function getIso() {
+ return $this->year.'-'.$this->month.'-'.$this->day.'T'.$this->hour.':'.$this->minute.':'.$this->second;
+ }
+ function getXml() {
+ return '<dateTime.iso8601>'.$this->getIso().'</dateTime.iso8601>';
+ }
+ function getTimestamp() {
+ return gmmktime($this->hour, $this->minute, $this->second, $this->month, $this->day, $this->year);
+ }
+}
+
+
+class IXR_Base64 {
+ var $data;
+ function IXR_Base64($data) {
+ $this->data = $data;
+ }
+ function getXml() {
+ return '<base64>'.base64_encode($this->data).'</base64>';
+ }
+}
+
+
+class IXR_IntrospectionServer extends IXR_Server {
+ var $signatures;
+ var $help;
+ function IXR_IntrospectionServer() {
+ $this->setCallbacks();
+ $this->setCapabilities();
+ $this->capabilities['introspection'] = array(
+ 'specUrl' => 'http://xmlrpc.usefulinc.com/doc/reserved.html',
+ 'specVersion' => 1
+ );
+ $this->addCallback(
+ 'system.methodSignature',
+ 'this:methodSignature',
+ array('array', 'string'),
+ 'Returns an array describing the return type and required parameters of a method'
+ );
+ $this->addCallback(
+ 'system.getCapabilities',
+ 'this:getCapabilities',
+ array('struct'),
+ 'Returns a struct describing the XML-RPC specifications supported by this server'
+ );
+ $this->addCallback(
+ 'system.listMethods',
+ 'this:listMethods',
+ array('array'),
+ 'Returns an array of available methods on this server'
+ );
+ $this->addCallback(
+ 'system.methodHelp',
+ 'this:methodHelp',
+ array('string', 'string'),
+ 'Returns a documentation string for the specified method'
+ );
+ }
+ function addCallback($method, $callback, $args, $help) {
+ $this->callbacks[$method] = $callback;
+ $this->signatures[$method] = $args;
+ $this->help[$method] = $help;
+ }
+ function call($methodname, $args) {
+ // Make sure it's in an array
+ if ($args && !is_array($args)) {
+ $args = array($args);
+ }
+ // Over-rides default call method, adds signature check
+ if (!$this->hasMethod($methodname)) {
+ return new IXR_Error(-32601, 'server error. requested method "'.$this->message->methodName.'" not specified.');
+ }
+ $method = $this->callbacks[$methodname];
+ $signature = $this->signatures[$methodname];
+ $returnType = array_shift($signature);
+ // Check the number of arguments. Check only, if the minimum count of parameters is specified. More parameters are possible.
+ // This is a hack to allow optional parameters...
+ if (count($args) < count($signature)) {
+ // print 'Num of args: '.count($args).' Num in signature: '.count($signature);
+ return new IXR_Error(-32602, 'server error. wrong number of method parameters');
+ }
+ // Check the argument types
+ $ok = true;
+ $argsbackup = $args;
+ for ($i = 0, $j = count($args); $i < $j; $i++) {
+ $arg = array_shift($args);
+ $type = array_shift($signature);
+ switch ($type) {
+ case 'int':
+ case 'i4':
+ if (is_array($arg) || !is_int($arg)) {
+ $ok = false;
+ }
+ break;
+ case 'base64':
+ case 'string':
+ if (!is_string($arg)) {
+ $ok = false;
+ }
+ break;
+ case 'boolean':
+ if ($arg !== false && $arg !== true) {
+ $ok = false;
+ }
+ break;
+ case 'float':
+ case 'double':
+ if (!is_float($arg)) {
+ $ok = false;
+ }
+ break;
+ case 'date':
+ case 'dateTime.iso8601':
+ if (!is_a($arg, 'IXR_Date')) {
+ $ok = false;
+ }
+ break;
+ }
+ if (!$ok) {
+ return new IXR_Error(-32602, 'server error. invalid method parameters');
+ }
+ }
+ // It passed the test - run the "real" method call
+ return parent::call($methodname, $argsbackup);
+ }
+ function methodSignature($method) {
+ if (!$this->hasMethod($method)) {
+ return new IXR_Error(-32601, 'server error. requested method "'.$method.'" not specified.');
+ }
+ // We should be returning an array of types
+ $types = $this->signatures[$method];
+ $return = array();
+ foreach ($types as $type) {
+ switch ($type) {
+ case 'string':
+ $return[] = 'string';
+ break;
+ case 'int':
+ case 'i4':
+ $return[] = 42;
+ break;
+ case 'double':
+ $return[] = 3.1415;
+ break;
+ case 'dateTime.iso8601':
+ $return[] = new IXR_Date(time());
+ break;
+ case 'boolean':
+ $return[] = true;
+ break;
+ case 'base64':
+ $return[] = new IXR_Base64('base64');
+ break;
+ case 'array':
+ $return[] = array('array');
+ break;
+ case 'struct':
+ $return[] = array('struct' => 'struct');
+ break;
+ }
+ }
+ return $return;
+ }
+ function methodHelp($method) {
+ return $this->help[$method];
+ }
+}
+
+
+class IXR_ClientMulticall extends IXR_Client {
+ var $calls = array();
+ function IXR_ClientMulticall($server, $path = false, $port = 80) {
+ parent::IXR_Client($server, $path, $port);
+ //$this->useragent = 'The Incutio XML-RPC PHP Library (multicall client)';
+ }
+ function addCall() {
+ $args = func_get_args();
+ $methodName = array_shift($args);
+ $struct = array(
+ 'methodName' => $methodName,
+ 'params' => $args
+ );
+ $this->calls[] = $struct;
+ }
+ function query() {
+ // Prepare multicall, then call the parent::query() method
+ return parent::query('system.multicall', $this->calls);
+ }
+}
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/JSON.php b/mod/dokuwiki/vendors/dokuwiki/inc/JSON.php
new file mode 100644
index 000000000..ea66c9c32
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/JSON.php
@@ -0,0 +1,624 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Converts to and from JSON format.
+ *
+ * JSON (JavaScript Object Notation) is a lightweight data-interchange
+ * format. It is easy for humans to read and write. It is easy for machines
+ * to parse and generate. It is based on a subset of the JavaScript
+ * Programming Language, Standard ECMA-262 3rd Edition - December 1999.
+ * This feature can also be found in Python. JSON is a text format that is
+ * completely language independent but uses conventions that are familiar
+ * to programmers of the C-family of languages, including C, C++, C#, Java,
+ * JavaScript, Perl, TCL, and many others. These properties make JSON an
+ * ideal data-interchange language.
+ *
+ * This package provides a simple encoder and decoder for JSON notation. It
+ * is intended for use with client-side Javascript applications that make
+ * use of HTTPRequest to perform server communication functions - data can
+ * be encoded into JSON notation for use in a client-side javascript, or
+ * decoded from incoming Javascript requests. JSON format is native to
+ * Javascript, and can be directly eval()'ed with no further parsing
+ * overhead
+ *
+ * All strings should be in ASCII or UTF-8 format!
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: Redistribution and use in source and binary forms, with or
+ * without modification, are permitted provided that the following
+ * conditions are met: Redistributions of source code must retain the
+ * above copyright notice, this list of conditions and the following
+ * disclaimer. Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
+ * NO EVENT SHALL CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
+ * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * @category
+ * @package
+ * @author Michal Migurski <mike-json@teczno.com>
+ * @author Matt Knapp <mdknapp[at]gmail[dot]com>
+ * @author Brett Stimmerman <brettstimmerman[at]gmail[dot]com>
+ * @copyright 2005 Michal Migurski
+ * @license http://www.freebsd.org/copyright/freebsd-license.html
+ * @link http://pear.php.net/pepr/pepr-proposal-show.php?id=198
+ */
+
+// for DokuWiki
+if(!defined('DOKU_INC')) die('meh.');
+require_once(DOKU_INC.'inc/utf8.php');
+
+/**
+ * Marker constant for JSON::decode(), used to flag stack state
+ */
+define('JSON_SLICE', 1);
+
+/**
+ * Marker constant for JSON::decode(), used to flag stack state
+ */
+define('JSON_IN_STR', 2);
+
+/**
+ * Marker constant for JSON::decode(), used to flag stack state
+ */
+define('JSON_IN_ARR', 4);
+
+/**
+ * Marker constant for JSON::decode(), used to flag stack state
+ */
+define('JSON_IN_OBJ', 8);
+
+/**
+ * Marker constant for JSON::decode(), used to flag stack state
+ */
+define('JSON_IN_CMT', 16);
+
+/**
+ * Behavior switch for JSON::decode()
+ */
+define('JSON_LOOSE_TYPE', 10);
+
+/**
+ * Behavior switch for JSON::decode()
+ */
+define('JSON_STRICT_TYPE', 11);
+
+/**
+ * Converts to and from JSON format.
+ *
+ * @category
+ * @package
+ * @author Michal Migurski <mike-json@teczno.com>
+ * @author Matt Knapp <mdknapp[at]gmail[dot]com>
+ * @author Brett Stimmerman <brettstimmerman[at]gmail[dot]com>
+ * @copyright 2005 Michal Migurski
+ * @license http://www.php.net/license/3_0.txt PHP License 3.0
+ * @version
+ * @link
+ * @see
+ * @since
+ * @deprecated
+ */
+class JSON
+{
+ /**
+ * constructs a new JSON instance
+ *
+ * @param int $use object behavior: when encoding or decoding,
+ * be loose or strict about object/array usage
+ *
+ * possible values:
+ * JSON_STRICT_TYPE - strict typing, default
+ * "{...}" syntax creates objects in decode.
+ * JSON_LOOSE_TYPE - loose typing
+ * "{...}" syntax creates associative arrays in decode.
+ */
+ function JSON($use=JSON_STRICT_TYPE)
+ {
+ $this->use = $use;
+ }
+
+ /**
+ * encodes an arbitrary variable into JSON format
+ *
+ * @param mixed $var any number, boolean, string, array, or object to be encoded.
+ * see argument 1 to JSON() above for array-parsing behavior.
+ * if var is a strng, note that encode() always expects it
+ * to be in ASCII or UTF-8 format!
+ *
+ * @return string JSON string representation of input var
+ * @access public
+ */
+ function encode($var)
+ {
+ switch (gettype($var)) {
+ case 'boolean':
+ return $var ? 'true' : 'false';
+
+ case 'NULL':
+ return 'null';
+
+ case 'integer':
+ return sprintf('%d', $var);
+
+ case 'double':
+ case 'float':
+ return sprintf('%f', $var);
+
+ case 'string':
+ // STRINGS ARE EXPECTED TO BE IN ASCII OR UTF-8 FORMAT
+ $ascii = '';
+ $strlen_var = strlen($var);
+
+ /*
+ * Iterate over every character in the string,
+ * escaping with a slash or encoding to UTF-8 where necessary
+ */
+ for ($c = 0; $c < $strlen_var; ++$c) {
+
+ $ord_var_c = ord($var{$c});
+
+ switch ($ord_var_c) {
+ case 0x08: $ascii .= '\b'; break;
+ case 0x09: $ascii .= '\t'; break;
+ case 0x0A: $ascii .= '\n'; break;
+ case 0x0C: $ascii .= '\f'; break;
+ case 0x0D: $ascii .= '\r'; break;
+
+ case 0x22:
+ case 0x2F:
+ case 0x5C:
+ // double quote, slash, slosh
+ $ascii .= '\\'.$var{$c};
+ break;
+
+ case (($ord_var_c >= 0x20) && ($ord_var_c <= 0x7F)):
+ // characters U-00000000 - U-0000007F (same as ASCII)
+ $ascii .= $var{$c};
+ break;
+
+ case (($ord_var_c & 0xE0) == 0xC0):
+ // characters U-00000080 - U-000007FF, mask 110XXXXX
+ // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+ $char = pack('C*', $ord_var_c, ord($var{$c+1}));
+ $c+=1;
+ //$utf16 = mb_convert_encoding($char, 'UTF-16', 'UTF-8');
+ $utf16 = utf8_to_utf16be($char);
+ $ascii .= sprintf('\u%04s', bin2hex($utf16));
+ break;
+
+ case (($ord_var_c & 0xF0) == 0xE0):
+ // characters U-00000800 - U-0000FFFF, mask 1110XXXX
+ // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+ $char = pack('C*', $ord_var_c,
+ ord($var{$c+1}),
+ ord($var{$c+2}));
+ $c+=2;
+ //$utf16 = mb_convert_encoding($char, 'UTF-16', 'UTF-8');
+ $utf16 = utf8_to_utf16be($char);
+ $ascii .= sprintf('\u%04s', bin2hex($utf16));
+ break;
+
+ case (($ord_var_c & 0xF8) == 0xF0):
+ // characters U-00010000 - U-001FFFFF, mask 11110XXX
+ // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+ $char = pack('C*', $ord_var_c,
+ ord($var{$c+1}),
+ ord($var{$c+2}),
+ ord($var{$c+3}));
+ $c+=3;
+ //$utf16 = mb_convert_encoding($char, 'UTF-16', 'UTF-8');
+ $utf16 = utf8_to_utf16be($char);
+ $ascii .= sprintf('\u%04s', bin2hex($utf16));
+ break;
+
+ case (($ord_var_c & 0xFC) == 0xF8):
+ // characters U-00200000 - U-03FFFFFF, mask 111110XX
+ // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+ $char = pack('C*', $ord_var_c,
+ ord($var{$c+1}),
+ ord($var{$c+2}),
+ ord($var{$c+3}),
+ ord($var{$c+4}));
+ $c+=4;
+ //$utf16 = mb_convert_encoding($char, 'UTF-16', 'UTF-8');
+ $utf16 = utf8_to_utf16be($char);
+ $ascii .= sprintf('\u%04s', bin2hex($utf16));
+ break;
+
+ case (($ord_var_c & 0xFE) == 0xFC):
+ // characters U-04000000 - U-7FFFFFFF, mask 1111110X
+ // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+ $char = pack('C*', $ord_var_c,
+ ord($var{$c+1}),
+ ord($var{$c+2}),
+ ord($var{$c+3}),
+ ord($var{$c+4}),
+ ord($var{$c+5}));
+ $c+=5;
+ //$utf16 = mb_convert_encoding($char, 'UTF-16', 'UTF-8');
+ $utf16 = utf8_to_utf16be($char);
+ $ascii .= sprintf('\u%04s', bin2hex($utf16));
+ break;
+ }
+ }
+
+ return '"'.$ascii.'"';
+
+ case 'array':
+ /*
+ * As per JSON spec if any array key is not an integer
+ * we must treat the the whole array as an object. We
+ * also try to catch a sparsely populated associative
+ * array with numeric keys here because some JS engines
+ * will create an array with empty indexes up to
+ * max_index which can cause memory issues and because
+ * the keys, which may be relevant, will be remapped
+ * otherwise.
+ *
+ * As per the ECMA and JSON specification an object may
+ * have any string as a property. Unfortunately due to
+ * a hole in the ECMA specification if the key is a
+ * ECMA reserved word or starts with a digit the
+ * parameter is only accessible using ECMAScript's
+ * bracket notation.
+ */
+
+ // treat as a JSON object
+ if (is_array($var) && count($var) && (array_keys($var) !== range(0, sizeof($var) - 1))) {
+ return sprintf('{%s}', join(',', array_map(array($this, 'name_value'),
+ array_keys($var),
+ array_values($var))));
+ }
+
+ // treat it like a regular array
+ return sprintf('[%s]', join(',', array_map(array($this, 'encode'), $var)));
+
+ case 'object':
+ $vars = get_object_vars($var);
+ return sprintf('{%s}', join(',', array_map(array($this, 'name_value'),
+ array_keys($vars),
+ array_values($vars))));
+
+ default:
+ return '';
+ }
+ }
+
+ /**
+ * encodes an arbitrary variable into JSON format, alias for encode()
+ */
+ function enc($var)
+ {
+ return $this->encode($var);
+ }
+
+ /** function name_value
+ * array-walking function for use in generating JSON-formatted name-value pairs
+ *
+ * @param string $name name of key to use
+ * @param mixed $value reference to an array element to be encoded
+ *
+ * @return string JSON-formatted name-value pair, like '"name":value'
+ * @access private
+ */
+ function name_value($name, $value)
+ {
+ return (sprintf("%s:%s", $this->encode(strval($name)), $this->encode($value)));
+ }
+
+ /**
+ * reduce a string by removing leading and trailing comments and whitespace
+ *
+ * @param $str string string value to strip of comments and whitespace
+ *
+ * @return string string value stripped of comments and whitespace
+ * @access private
+ */
+ function reduce_string($str)
+ {
+ $str = preg_replace(array(
+
+ // eliminate single line comments in '// ...' form
+ '#^\s*//(.+)$#m',
+
+ // eliminate multi-line comments in '/* ... */' form, at start of string
+ '#^\s*/\*(.+)\*/#Us',
+
+ // eliminate multi-line comments in '/* ... */' form, at end of string
+ '#/\*(.+)\*/\s*$#Us'
+
+ ), '', $str);
+
+ // eliminate extraneous space
+ return trim($str);
+ }
+
+ /**
+ * decodes a JSON string into appropriate variable
+ *
+ * @param string $str JSON-formatted string
+ *
+ * @return mixed number, boolean, string, array, or object
+ * corresponding to given JSON input string.
+ * See argument 1 to JSON() above for object-output behavior.
+ * Note that decode() always returns strings
+ * in ASCII or UTF-8 format!
+ * @access public
+ */
+ function decode($str)
+ {
+ $str = $this->reduce_string($str);
+
+ switch (strtolower($str)) {
+ case 'true':
+ return true;
+
+ case 'false':
+ return false;
+
+ case 'null':
+ return null;
+
+ default:
+ if (is_numeric($str)) {
+ // Lookie-loo, it's a number
+
+ // This would work on its own, but I'm trying to be
+ // good about returning integers where appropriate:
+ // return (float)$str;
+
+ // Return float or int, as appropriate
+ return ((float)$str == (integer)$str)
+ ? (integer)$str
+ : (float)$str;
+
+ } elseif (preg_match('/^("|\').+("|\')$/s', $str, $m) && $m[1] == $m[2]) {
+ // STRINGS RETURNED IN UTF-8 FORMAT
+ $delim = substr($str, 0, 1);
+ $chrs = substr($str, 1, -1);
+ $utf8 = '';
+ $strlen_chrs = strlen($chrs);
+
+ for ($c = 0; $c < $strlen_chrs; ++$c) {
+
+ $substr_chrs_c_2 = substr($chrs, $c, 2);
+ $ord_chrs_c = ord($chrs{$c});
+
+ switch ($substr_chrs_c_2) {
+ case '\b': $utf8 .= chr(0x08); $c+=1; break;
+ case '\t': $utf8 .= chr(0x09); $c+=1; break;
+ case '\n': $utf8 .= chr(0x0A); $c+=1; break;
+ case '\f': $utf8 .= chr(0x0C); $c+=1; break;
+ case '\r': $utf8 .= chr(0x0D); $c+=1; break;
+
+ case '\\"':
+ case '\\\'':
+ case '\\\\':
+ case '\\/':
+ if (($delim == '"' && $substr_chrs_c_2 != '\\\'') ||
+ ($delim == "'" && $substr_chrs_c_2 != '\\"')) {
+ $utf8 .= $chrs{++$c};
+ }
+ break;
+
+ default:
+ if (preg_match('/\\\u[0-9A-F]{4}/i', substr($chrs, $c, 6))) {
+ // single, escaped unicode character
+ $utf16 = chr(hexdec(substr($chrs, ($c+2), 2)))
+ . chr(hexdec(substr($chrs, ($c+4), 2)));
+ //$utf8 .= mb_convert_encoding($utf16, 'UTF-8', 'UTF-16');
+ $utf8 .= utf16be_to_utf8($utf16);
+ $c+=5;
+
+ } elseif(($ord_chrs_c >= 0x20) && ($ord_chrs_c <= 0x7F)) {
+ $utf8 .= $chrs{$c};
+
+ } elseif(($ord_chrs_c & 0xE0) == 0xC0) {
+ // characters U-00000080 - U-000007FF, mask 110XXXXX
+ //see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+ $utf8 .= substr($chrs, $c, 2); $c += 1;
+
+ } elseif(($ord_chrs_c & 0xF0) == 0xE0) {
+ // characters U-00000800 - U-0000FFFF, mask 1110XXXX
+ // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+ $utf8 .= substr($chrs, $c, 3); $c += 2;
+
+ } elseif(($ord_chrs_c & 0xF8) == 0xF0) {
+ // characters U-00010000 - U-001FFFFF, mask 11110XXX
+ // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+ $utf8 .= substr($chrs, $c, 4); $c += 3;
+
+ } elseif(($ord_chrs_c & 0xFC) == 0xF8) {
+ // characters U-00200000 - U-03FFFFFF, mask 111110XX
+ // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+ $utf8 .= substr($chrs, $c, 5); $c += 4;
+
+ } elseif(($ord_chrs_c & 0xFE) == 0xFC) {
+ // characters U-04000000 - U-7FFFFFFF, mask 1111110X
+ // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+ $utf8 .= substr($chrs, $c, 6); $c += 5;
+
+ }
+ break;
+
+ }
+
+ }
+
+ return $utf8;
+
+ } elseif (preg_match('/^\[.*\]$/s', $str) || preg_match('/^\{.*\}$/s', $str)) {
+ // array, or object notation
+
+ if ($str{0} == '[') {
+ $stk = array(JSON_IN_ARR);
+ $arr = array();
+ } else {
+ if ($this->use == JSON_LOOSE_TYPE) {
+ $stk = array(JSON_IN_OBJ);
+ $obj = array();
+ } else {
+ $stk = array(JSON_IN_OBJ);
+ $obj = new stdClass();
+ }
+ }
+
+ array_push($stk, array('what' => JSON_SLICE,
+ 'where' => 0,
+ 'delim' => false));
+
+ $chrs = substr($str, 1, -1);
+ $chrs = $this->reduce_string($chrs);
+
+ if ($chrs == '') {
+ if (reset($stk) == JSON_IN_ARR) {
+ return $arr;
+
+ } else {
+ return $obj;
+
+ }
+ }
+
+ //print("\nparsing {$chrs}\n");
+
+ $strlen_chrs = strlen($chrs);
+
+ for ($c = 0; $c <= $strlen_chrs; ++$c) {
+
+ $top = end($stk);
+ $substr_chrs_c_2 = substr($chrs, $c, 2);
+
+ if (($c == $strlen_chrs) || (($chrs{$c} == ',') && ($top['what'] == JSON_SLICE))) {
+ // found a comma that is not inside a string, array, etc.,
+ // OR we've reached the end of the character list
+ $slice = substr($chrs, $top['where'], ($c - $top['where']));
+ array_push($stk, array('what' => JSON_SLICE, 'where' => ($c + 1), 'delim' => false));
+ //print("Found split at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n");
+
+ if (reset($stk) == JSON_IN_ARR) {
+ // we are in an array, so just push an element onto the stack
+ array_push($arr, $this->decode($slice));
+
+ } elseif (reset($stk) == JSON_IN_OBJ) {
+ // we are in an object, so figure
+ // out the property name and set an
+ // element in an associative array,
+ // for now
+ if (preg_match('/^\s*(["\'].*[^\\\]["\'])\s*:\s*(\S.*),?$/Uis', $slice, $parts)) {
+ // "name":value pair
+ $key = $this->decode($parts[1]);
+ $val = $this->decode($parts[2]);
+
+ if ($this->use == JSON_LOOSE_TYPE) {
+ $obj[$key] = $val;
+ } else {
+ $obj->$key = $val;
+ }
+ } elseif (preg_match('/^\s*(\w+)\s*:\s*(\S.*),?$/Uis', $slice, $parts)) {
+ // name:value pair, where name is unquoted
+ $key = $parts[1];
+ $val = $this->decode($parts[2]);
+
+ if ($this->use == JSON_LOOSE_TYPE) {
+ $obj[$key] = $val;
+ } else {
+ $obj->$key = $val;
+ }
+ }
+
+ }
+
+ } elseif ((($chrs{$c} == '"') || ($chrs{$c} == "'")) &&
+ in_array($top['what'], array(JSON_SLICE, JSON_IN_ARR, JSON_IN_OBJ))) {
+ // found a quote, and we are not inside a string
+ array_push($stk, array('what' => JSON_IN_STR, 'where' => $c, 'delim' => $chrs{$c}));
+ //print("Found start of string at {$c}\n");
+
+ } elseif (($chrs{$c} == $top['delim']) &&
+ ($top['what'] == JSON_IN_STR) &&
+ (($chrs{$c - 1} != "\\") ||
+ ($chrs{$c - 1} == "\\" && $chrs{$c - 2} == "\\"))) {
+ // found a quote, we're in a string, and it's not escaped
+ array_pop($stk);
+ //print("Found end of string at {$c}: ".substr($chrs, $top['where'], (1 + 1 + $c - $top['where']))."\n");
+
+ } elseif (($chrs{$c} == '[') &&
+ in_array($top['what'], array(JSON_SLICE, JSON_IN_ARR, JSON_IN_OBJ))) {
+ // found a left-bracket, and we are in an array, object, or slice
+ array_push($stk, array('what' => JSON_IN_ARR, 'where' => $c, 'delim' => false));
+ //print("Found start of array at {$c}\n");
+
+ } elseif (($chrs{$c} == ']') && ($top['what'] == JSON_IN_ARR)) {
+ // found a right-bracket, and we're in an array
+ array_pop($stk);
+ //print("Found end of array at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n");
+
+ } elseif (($chrs{$c} == '{') &&
+ in_array($top['what'], array(JSON_SLICE, JSON_IN_ARR, JSON_IN_OBJ))) {
+ // found a left-brace, and we are in an array, object, or slice
+ array_push($stk, array('what' => JSON_IN_OBJ, 'where' => $c, 'delim' => false));
+ //print("Found start of object at {$c}\n");
+
+ } elseif (($chrs{$c} == '}') && ($top['what'] == JSON_IN_OBJ)) {
+ // found a right-brace, and we're in an object
+ array_pop($stk);
+ //print("Found end of object at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n");
+
+ } elseif (($substr_chrs_c_2 == '/*') &&
+ in_array($top['what'], array(JSON_SLICE, JSON_IN_ARR, JSON_IN_OBJ))) {
+ // found a comment start, and we are in an array, object, or slice
+ array_push($stk, array('what' => JSON_IN_CMT, 'where' => $c, 'delim' => false));
+ $c++;
+ //print("Found start of comment at {$c}\n");
+
+ } elseif (($substr_chrs_c_2 == '*/') && ($top['what'] == JSON_IN_CMT)) {
+ // found a comment end, and we're in one now
+ array_pop($stk);
+ $c++;
+
+ for ($i = $top['where']; $i <= $c; ++$i)
+ $chrs = substr_replace($chrs, ' ', $i, 1);
+
+ //print("Found end of comment at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n");
+
+ }
+
+ }
+
+ if (reset($stk) == JSON_IN_ARR) {
+ return $arr;
+
+ } elseif (reset($stk) == JSON_IN_OBJ) {
+ return $obj;
+
+ }
+
+ }
+ }
+ }
+
+ /**
+ * decodes a JSON string into appropriate variable; alias for decode()
+ */
+ function dec($var)
+ {
+ return $this->decode($var);
+ }
+
+}
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/JpegMeta.php b/mod/dokuwiki/vendors/dokuwiki/inc/JpegMeta.php
new file mode 100644
index 000000000..cb1d7d694
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/JpegMeta.php
@@ -0,0 +1,3116 @@
+<?php
+/**
+ * JPEG metadata reader/writer
+ *
+ * @license PHP license 2.0 (http://www.php.net/license/2_02.txt)
+ * @link http://www.zonageek.com/software/php/jpeg/index.php
+ * @author Sebastian Delmont <sdelmont@zonageek.com>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Hakan Sandell <hakan.sandell@mydata.se>
+ * @todo Add support for Maker Notes, Extend for GIF and PNG metadata
+ */
+
+// This class is a modified and enhanced version of the JPEG class by
+// Sebastian Delmont. Original Copyright notice follows:
+//
+// +----------------------------------------------------------------------+
+// | PHP version 4.0 |
+// +----------------------------------------------------------------------+
+// | Copyright (c) 1997, 1998, 1999, 2000, 2001 The PHP Group |
+// +----------------------------------------------------------------------+
+// | This source file is subject to version 2.0 of the PHP license, |
+// | that is bundled with this package in the file LICENSE, and is |
+// | available at through the world-wide-web at |
+// | http://www.php.net/license/2_02.txt. |
+// | If you did not receive a copy of the PHP license and are unable to |
+// | obtain it through the world-wide-web, please send a note to |
+// | license@php.net so we can mail you a copy immediately. |
+// +----------------------------------------------------------------------+
+// | Authors: Sebastian Delmont <sdelmont@zonageek.com> |
+// +----------------------------------------------------------------------+
+
+class JpegMeta
+{
+ var $_fileName;
+ var $_fp = null;
+ var $_type = 'unknown';
+
+ var $_markers;
+ var $_info;
+
+
+ /**
+ * Constructor
+ *
+ * @author Sebastian Delmont <sdelmont@zonageek.com>
+ */
+ function JpegMeta($fileName)
+ {
+
+ $this->_fileName = $fileName;
+
+ $this->_fp = null;
+ $this->_type = 'unknown';
+
+ unset($this->_info);
+ unset($this->_markers);
+ }
+
+ /**
+ * Returns all gathered info as multidim array
+ *
+ * @author Sebastian Delmont <sdelmont@zonageek.com>
+ */
+ function & getRawInfo()
+ {
+ $this->_parseAll();
+
+ if ($this->_markers == null) {
+ return false;
+ }
+
+ return $this->_info;
+ }
+
+ /**
+ * Returns basic image info
+ *
+ * @author Sebastian Delmont <sdelmont@zonageek.com>
+ */
+ function & getBasicInfo()
+ {
+ $this->_parseAll();
+
+ $info = array();
+
+ if ($this->_markers == null) {
+ return false;
+ }
+
+ $info['Name'] = $this->_info['file']['Name'];
+ if (isset($this->_info['file']['Url'])) {
+ $info['Url'] = $this->_info['file']['Url'];
+ $info['NiceSize'] = "???KB";
+ }
+ else {
+ $info['Size'] = $this->_info['file']['Size'];
+ $info['NiceSize'] = $this->_info['file']['NiceSize'];
+ }
+
+ if (@isset($this->_info['sof']['Format'])) {
+ $info['Format'] = $this->_info['sof']['Format'] . " JPEG";
+ }
+ else {
+ $info['Format'] = $this->_info['sof']['Format'] . " JPEG";
+ }
+
+ if (@isset($this->_info['sof']['ColorChannels'])) {
+ $info['ColorMode'] = ($this->_info['sof']['ColorChannels'] > 1) ? "Color" : "B&W";
+ }
+
+ $info['Width'] = $this->getWidth();
+ $info['Height'] = $this->getHeight();
+ $info['DimStr'] = $this->getDimStr();
+
+ $dates = $this->getDates();
+
+ $info['DateTime'] = $dates['EarliestTime'];
+ $info['DateTimeStr'] = $dates['EarliestTimeStr'];
+
+ $info['HasThumbnail'] = $this->hasThumbnail();
+
+ return $info;
+ }
+
+
+ /**
+ * Convinience function to access nearly all available Data
+ * through one function
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function getField($fields)
+ {
+ if(!is_array($fields)) $fields = array($fields);
+ $info = false;
+ foreach($fields as $field){
+ if(strtolower(substr($field,0,5)) == 'iptc.'){
+ $info = $this->getIPTCField(substr($field,5));
+ }elseif(strtolower(substr($field,0,5)) == 'exif.'){
+ $info = $this->getExifField(substr($field,5));
+ }elseif(strtolower(substr($field,0,4)) == 'xmp.'){
+ $info = $this->getXmpField(substr($field,4));
+ }elseif(strtolower(substr($field,0,5)) == 'file.'){
+ $info = $this->getFileField(substr($field,5));
+ }elseif(strtolower(substr($field,0,5)) == 'date.'){
+ $info = $this->getDateField(substr($field,5));
+ }elseif(strtolower($field) == 'simple.camera'){
+ $info = $this->getCamera();
+ }elseif(strtolower($field) == 'simple.raw'){
+ return $this->getRawInfo();
+ }elseif(strtolower($field) == 'simple.title'){
+ $info = $this->getTitle();
+ }elseif(strtolower($field) == 'simple.shutterspeed'){
+ $info = $this->getShutterSpeed();
+ }else{
+ $info = $this->getExifField($field);
+ }
+ if($info != false) break;
+ }
+
+ if($info === false) $info = $alt;
+ if(is_array($info)){
+ if(isset($info['val'])){
+ $info = $info['val'];
+ }else{
+ $info = join(', ',$info);
+ }
+ }
+ return trim($info);
+ }
+
+ /**
+ * Convinience function to set nearly all available Data
+ * through one function
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function setField($field, $value)
+ {
+ if(strtolower(substr($field,0,5)) == 'iptc.'){
+ return $this->setIPTCField(substr($field,5),$value);
+ }elseif(strtolower(substr($field,0,5)) == 'exif.'){
+ return $this->setExifField(substr($field,5),$value);
+ }else{
+ return $this->setExifField($field,$value);
+ }
+ }
+
+ /**
+ * Convinience function to delete nearly all available Data
+ * through one function
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function deleteField($field)
+ {
+ if(strtolower(substr($field,0,5)) == 'iptc.'){
+ return $this->deleteIPTCField(substr($field,5));
+ }elseif(strtolower(substr($field,0,5)) == 'exif.'){
+ return $this->deleteExifField(substr($field,5));
+ }else{
+ return $this->deleteExifField($field);
+ }
+ }
+
+ /**
+ * Return a date field
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function getDateField($field)
+ {
+ if (!isset($this->_info['dates'])) {
+ $this->_info['dates'] = $this->getDates();
+ }
+
+ if (isset($this->_info['dates'][$field])) {
+ return $this->_info['dates'][$field];
+ }
+
+ return false;
+ }
+
+ /**
+ * Return a file info field
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function getFileField($field)
+ {
+ if (!isset($this->_info['file'])) {
+ $this->_parseFileInfo();
+ }
+
+ if (isset($this->_info['file'][$field])) {
+ return $this->_info['file'][$field];
+ }
+
+ return false;
+ }
+
+ /**
+ * Return the camera info (Maker and Model)
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @todo handle makernotes
+ */
+ function getCamera(){
+ $make = $this->getField(array('Exif.Make','Exif.TIFFMake'));
+ $model = $this->getField(array('Exif.Model','Exif.TIFFModel'));
+ $cam = trim("$make $model");
+ if(empty($cam)) return false;
+ return $cam;
+ }
+
+ /**
+ * Return shutter speed as a ratio
+ *
+ * @author Joe Lapp <joe.lapp@pobox.com>
+ */
+ function getShutterSpeed()
+ {
+ if (!isset($this->_info['exif'])) {
+ $this->_parseMarkerExif();
+ }
+ if(!isset($this->_info['exif']['ExposureTime'])){
+ return '';
+ }
+
+ $field = $this->_info['exif']['ExposureTime'];
+ if($field['den'] == 1) return $field['num'];
+ return $field['num'].'/'.$field['den'];
+ }
+
+ /**
+ * Return an EXIF field
+ *
+ * @author Sebastian Delmont <sdelmont@zonageek.com>
+ */
+ function getExifField($field)
+ {
+ if (!isset($this->_info['exif'])) {
+ $this->_parseMarkerExif();
+ }
+
+ if ($this->_markers == null) {
+ return false;
+ }
+
+ if (isset($this->_info['exif'][$field])) {
+ return $this->_info['exif'][$field];
+ }
+
+ return false;
+ }
+
+ /**
+ * Return an XMP field
+ *
+ * @author Hakan Sandell <hakan.sandell@mydata.se>
+ */
+ function getXmpField($field)
+ {
+ if (!isset($this->_info['xmp'])) {
+ $this->_parseMarkerXmp();
+ }
+
+ if ($this->_markers == null) {
+ return false;
+ }
+
+ if (isset($this->_info['xmp'][$field])) {
+ return $this->_info['xmp'][$field];
+ }
+
+ return false;
+ }
+
+ /**
+ * Return an Adobe Field
+ *
+ * @author Sebastian Delmont <sdelmont@zonageek.com>
+ */
+ function getAdobeField($field)
+ {
+ if (!isset($this->_info['adobe'])) {
+ $this->_parseMarkerAdobe();
+ }
+
+ if ($this->_markers == null) {
+ return false;
+ }
+
+ if (isset($this->_info['adobe'][$field])) {
+ return $this->_info['adobe'][$field];
+ }
+
+ return false;
+ }
+
+ /**
+ * Return an IPTC field
+ *
+ * @author Sebastian Delmont <sdelmont@zonageek.com>
+ */
+ function getIPTCField($field)
+ {
+ if (!isset($this->_info['iptc'])) {
+ $this->_parseMarkerAdobe();
+ }
+
+ if ($this->_markers == null) {
+ return false;
+ }
+
+ if (isset($this->_info['iptc'][$field])) {
+ return $this->_info['iptc'][$field];
+ }
+
+ return false;
+ }
+
+ /**
+ * Set an EXIF field
+ *
+ * @author Sebastian Delmont <sdelmont@zonageek.com>
+ * @author Joe Lapp <joe.lapp@pobox.com>
+ */
+ function setExifField($field, $value)
+ {
+ if (!isset($this->_info['exif'])) {
+ $this->_parseMarkerExif();
+ }
+
+ if ($this->_markers == null) {
+ return false;
+ }
+
+ if ($this->_info['exif'] == false) {
+ $this->_info['exif'] = array();
+ }
+
+ // make sure datetimes are in correct format
+ if(strlen($field) >= 8 && strtolower(substr($field, 0, 8)) == 'datetime') {
+ if(strlen($value) < 8 || $value{4} != ':' || $value{7} != ':') {
+ $value = date('Y:m:d H:i:s', strtotime($value));
+ }
+ }
+
+ $this->_info['exif'][$field] = $value;
+
+ return true;
+ }
+
+ /**
+ * Set an Adobe Field
+ *
+ * @author Sebastian Delmont <sdelmont@zonageek.com>
+ */
+ function setAdobeField($field, $value)
+ {
+ if (!isset($this->_info['adobe'])) {
+ $this->_parseMarkerAdobe();
+ }
+
+ if ($this->_markers == null) {
+ return false;
+ }
+
+ if ($this->_info['adobe'] == false) {
+ $this->_info['adobe'] = array();
+ }
+
+ $this->_info['adobe'][$field] = $value;
+
+ return true;
+ }
+
+ /**
+ * Calculates the multiplier needed to resize the image to the given
+ * dimensions
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function getResizeRatio($maxwidth,$maxheight=0){
+ if(!$maxheight) $maxheight = $maxwidth;
+
+ $w = $this->getField('File.Width');
+ $h = $this->getField('File.Height');
+
+ $ratio = 1;
+ if($w >= $h){
+ if($w >= $maxwidth){
+ $ratio = $maxwidth/$w;
+ }elseif($h > $maxheight){
+ $ratio = $maxheight/$h;
+ }
+ }else{
+ if($h >= $maxheight){
+ $ratio = $maxheight/$h;
+ }elseif($w > $maxwidth){
+ $ratio = $maxwidth/$w;
+ }
+ }
+ return $ratio;
+ }
+
+
+ /**
+ * Set an IPTC field
+ *
+ * @author Sebastian Delmont <sdelmont@zonageek.com>
+ */
+ function setIPTCField($field, $value)
+ {
+ if (!isset($this->_info['iptc'])) {
+ $this->_parseMarkerAdobe();
+ }
+
+ if ($this->_markers == null) {
+ return false;
+ }
+
+ if ($this->_info['iptc'] == false) {
+ $this->_info['iptc'] = array();
+ }
+
+ $this->_info['iptc'][$field] = $value;
+
+ return true;
+ }
+
+ /**
+ * Delete an EXIF field
+ *
+ * @author Sebastian Delmont <sdelmont@zonageek.com>
+ */
+ function deleteExifField($field)
+ {
+ if (!isset($this->_info['exif'])) {
+ $this->_parseMarkerAdobe();
+ }
+
+ if ($this->_markers == null) {
+ return false;
+ }
+
+ if ($this->_info['exif'] != false) {
+ unset($this->_info['exif'][$field]);
+ }
+
+ return true;
+ }
+
+ /**
+ * Delete an Adobe field
+ *
+ * @author Sebastian Delmont <sdelmont@zonageek.com>
+ */
+ function deleteAdobeField($field)
+ {
+ if (!isset($this->_info['adobe'])) {
+ $this->_parseMarkerAdobe();
+ }
+
+ if ($this->_markers == null) {
+ return false;
+ }
+
+ if ($this->_info['adobe'] != false) {
+ unset($this->_info['adobe'][$field]);
+ }
+
+ return true;
+ }
+
+ /**
+ * Delete an IPTC field
+ *
+ * @author Sebastian Delmont <sdelmont@zonageek.com>
+ */
+ function deleteIPTCField($field)
+ {
+ if (!isset($this->_info['iptc'])) {
+ $this->_parseMarkerAdobe();
+ }
+
+ if ($this->_markers == null) {
+ return false;
+ }
+
+ if ($this->_info['iptc'] != false) {
+ unset($this->_info['iptc'][$field]);
+ }
+
+ return true;
+ }
+
+ /**
+ * Get the image's title, tries various fields
+ *
+ * @param int $max maximum number chars (keeps words)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function getTitle($max=80){
+ $cap = '';
+
+ // try various fields
+ $cap = $this->getField(array('Iptc.Headline',
+ 'Iptc.Caption',
+ 'Xmp.dc:title',
+ 'Exif.UserComment',
+ 'Exif.TIFFUserComment',
+ 'Exif.TIFFImageDescription',
+ 'File.Name'));
+ if (empty($cap)) return false;
+
+ if(!$max) return $cap;
+ // Shorten to 80 chars (keeping words)
+ $new = preg_replace('/\n.+$/','',wordwrap($cap, $max));
+ if($new != $cap) $new .= '...';
+
+ return $new;
+ }
+
+ /**
+ * Gather various date fields
+ *
+ * @author Sebastian Delmont <sdelmont@zonageek.com>
+ */
+ function getDates()
+ {
+ $this->_parseAll();
+ if ($this->_markers == null) {
+ if (@isset($this->_info['file']['UnixTime'])) {
+ $dates['FileModified'] = $this->_info['file']['UnixTime'];
+ $dates['Time'] = $this->_info['file']['UnixTime'];
+ $dates['TimeSource'] = 'FileModified';
+ $dates['TimeStr'] = date("Y-m-d H:i:s", $this->_info['file']['UnixTime']);
+ $dates['EarliestTime'] = $this->_info['file']['UnixTime'];
+ $dates['EarliestTimeSource'] = 'FileModified';
+ $dates['EarliestTimeStr'] = date("Y-m-d H:i:s", $this->_info['file']['UnixTime']);
+ $dates['LatestTime'] = $this->_info['file']['UnixTime'];
+ $dates['LatestTimeSource'] = 'FileModified';
+ $dates['LatestTimeStr'] = date("Y-m-d H:i:s", $this->_info['file']['UnixTime']);
+ return $dates;
+ }
+ return false;
+ }
+
+ $dates = array();
+
+ $latestTime = 0;
+ $latestTimeSource = "";
+ $earliestTime = time();
+ $earliestTimeSource = "";
+
+ if (@isset($this->_info['exif']['DateTime'])) {
+ $dates['ExifDateTime'] = $this->_info['exif']['DateTime'];
+
+ $aux = $this->_info['exif']['DateTime'];
+ $aux{4} = "-";
+ $aux{7} = "-";
+ $t = strtotime($aux);
+
+ if ($t && $t > $latestTime) {
+ $latestTime = $t;
+ $latestTimeSource = "ExifDateTime";
+ }
+
+ if ($t && $t < $earliestTime) {
+ $earliestTime = $t;
+ $earliestTimeSource = "ExifDateTime";
+ }
+ }
+
+ if (@isset($this->_info['exif']['DateTimeOriginal'])) {
+ $dates['ExifDateTimeOriginal'] = $this->_info['exif']['DateTime'];
+
+ $aux = $this->_info['exif']['DateTimeOriginal'];
+ $aux{4} = "-";
+ $aux{7} = "-";
+ $t = strtotime($aux);
+
+ if ($t && $t > $latestTime) {
+ $latestTime = $t;
+ $latestTimeSource = "ExifDateTimeOriginal";
+ }
+
+ if ($t && $t < $earliestTime) {
+ $earliestTime = $t;
+ $earliestTimeSource = "ExifDateTimeOriginal";
+ }
+ }
+
+ if (@isset($this->_info['exif']['DateTimeDigitized'])) {
+ $dates['ExifDateTimeDigitized'] = $this->_info['exif']['DateTime'];
+
+ $aux = $this->_info['exif']['DateTimeDigitized'];
+ $aux{4} = "-";
+ $aux{7} = "-";
+ $t = strtotime($aux);
+
+ if ($t && $t > $latestTime) {
+ $latestTime = $t;
+ $latestTimeSource = "ExifDateTimeDigitized";
+ }
+
+ if ($t && $t < $earliestTime) {
+ $earliestTime = $t;
+ $earliestTimeSource = "ExifDateTimeDigitized";
+ }
+ }
+
+ if (@isset($this->_info['iptc']['DateCreated'])) {
+ $dates['IPTCDateCreated'] = $this->_info['iptc']['DateCreated'];
+
+ $aux = $this->_info['iptc']['DateCreated'];
+ $aux = substr($aux, 0, 4) . "-" . substr($aux, 4, 2) . "-" . substr($aux, 6, 2);
+ $t = strtotime($aux);
+
+ if ($t && $t > $latestTime) {
+ $latestTime = $t;
+ $latestTimeSource = "IPTCDateCreated";
+ }
+
+ if ($t && $t < $earliestTime) {
+ $earliestTime = $t;
+ $earliestTimeSource = "IPTCDateCreated";
+ }
+ }
+
+ if (@isset($this->_info['file']['UnixTime'])) {
+ $dates['FileModified'] = $this->_info['file']['UnixTime'];
+
+ $t = $this->_info['file']['UnixTime'];
+
+ if ($t && $t > $latestTime) {
+ $latestTime = $t;
+ $latestTimeSource = "FileModified";
+ }
+
+ if ($t && $t < $earliestTime) {
+ $earliestTime = $t;
+ $earliestTimeSource = "FileModified";
+ }
+ }
+
+ $dates['Time'] = $earliestTime;
+ $dates['TimeSource'] = $earliestTimeSource;
+ $dates['TimeStr'] = date("Y-m-d H:i:s", $earliestTime);
+ $dates['EarliestTime'] = $earliestTime;
+ $dates['EarliestTimeSource'] = $earliestTimeSource;
+ $dates['EarliestTimeStr'] = date("Y-m-d H:i:s", $earliestTime);
+ $dates['LatestTime'] = $latestTime;
+ $dates['LatestTimeSource'] = $latestTimeSource;
+ $dates['LatestTimeStr'] = date("Y-m-d H:i:s", $latestTime);
+
+ return $dates;
+ }
+
+ /**
+ * Get the image width, tries various fields
+ *
+ * @author Sebastian Delmont <sdelmont@zonageek.com>
+ */
+ function getWidth()
+ {
+ if (!isset($this->_info['sof'])) {
+ $this->_parseMarkerSOF();
+ }
+
+ if ($this->_markers == null) {
+ return false;
+ }
+
+ if (isset($this->_info['sof']['ImageWidth'])) {
+ return $this->_info['sof']['ImageWidth'];
+ }
+
+ if (!isset($this->_info['exif'])) {
+ $this->_parseMarkerExif();
+ }
+
+ if (isset($this->_info['exif']['PixelXDimension'])) {
+ return $this->_info['exif']['PixelXDimension'];
+ }
+
+ return false;
+ }
+
+ /**
+ * Get the image height, tries various fields
+ *
+ * @author Sebastian Delmont <sdelmont@zonageek.com>
+ */
+ function getHeight()
+ {
+ if (!isset($this->_info['sof'])) {
+ $this->_parseMarkerSOF();
+ }
+
+ if ($this->_markers == null) {
+ return false;
+ }
+
+ if (isset($this->_info['sof']['ImageHeight'])) {
+ return $this->_info['sof']['ImageHeight'];
+ }
+
+ if (!isset($this->_info['exif'])) {
+ $this->_parseMarkerExif();
+ }
+
+ if (isset($this->_info['exif']['PixelYDimension'])) {
+ return $this->_info['exif']['PixelYDimension'];
+ }
+
+ return false;
+ }
+
+ /**
+ * Get an dimension string for use in img tag
+ *
+ * @author Sebastian Delmont <sdelmont@zonageek.com>
+ */
+ function getDimStr()
+ {
+ if ($this->_markers == null) {
+ return false;
+ }
+
+ $w = $this->getWidth();
+ $h = $this->getHeight();
+
+ return "width='" . $w . "' height='" . $h . "'";
+ }
+
+ /**
+ * Checks for an embedded thumbnail
+ *
+ * @author Sebastian Delmont <sdelmont@zonageek.com>
+ */
+ function hasThumbnail($which = 'any')
+ {
+ if (($which == 'any') || ($which == 'exif')) {
+ if (!isset($this->_info['exif'])) {
+ $this->_parseMarkerExif();
+ }
+
+ if ($this->_markers == null) {
+ return false;
+ }
+
+ if (isset($this->_info['exif']) && is_array($this->_info['exif'])) {
+ if (isset($this->_info['exif']['JFIFThumbnail'])) {
+ return 'exif';
+ }
+ }
+ }
+
+ if ($which == 'adobe') {
+ if (!isset($this->_info['adobe'])) {
+ $this->_parseMarkerAdobe();
+ }
+
+ if ($this->_markers == null) {
+ return false;
+ }
+
+ if (isset($this->_info['adobe']) && is_array($this->_info['adobe'])) {
+ if (isset($this->_info['adobe']['ThumbnailData'])) {
+ return 'exif';
+ }
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Send embedded thumbnail to browser
+ *
+ * @author Sebastian Delmont <sdelmont@zonageek.com>
+ */
+ function sendThumbnail($which = 'any')
+ {
+ $data = null;
+
+ if (($which == 'any') || ($which == 'exif')) {
+ if (!isset($this->_info['exif'])) {
+ $this->_parseMarkerExif();
+ }
+
+ if ($this->_markers == null) {
+ return false;
+ }
+
+ if (isset($this->_info['exif']) && is_array($this->_info['exif'])) {
+ if (isset($this->_info['exif']['JFIFThumbnail'])) {
+ $data =& $this->_info['exif']['JFIFThumbnail'];
+ }
+ }
+ }
+
+ if (($which == 'adobe') || ($data == null)){
+ if (!isset($this->_info['adobe'])) {
+ $this->_parseMarkerAdobe();
+ }
+
+ if ($this->_markers == null) {
+ return false;
+ }
+
+ if (isset($this->_info['adobe']) && is_array($this->_info['adobe'])) {
+ if (isset($this->_info['adobe']['ThumbnailData'])) {
+ $data =& $this->_info['adobe']['ThumbnailData'];
+ }
+ }
+ }
+
+ if ($data != null) {
+ header("Content-type: image/jpeg");
+ echo $data;
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Save changed Metadata
+ *
+ * @author Sebastian Delmont <sdelmont@zonageek.com>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function save($fileName = "") {
+ if ($fileName == "") {
+ $tmpName = tempnam(dirname($this->_fileName),'_metatemp_');
+ $this->_writeJPEG($tmpName);
+ if (@file_exists($tmpName)) {
+ return io_rename($tmpName, $this->_fileName);
+ }
+ } else {
+ return $this->_writeJPEG($fileName);
+ }
+ return false;
+ }
+
+ /*************************************************************/
+ /* PRIVATE FUNCTIONS (Internal Use Only!) */
+ /*************************************************************/
+
+ /*************************************************************/
+ function _dispose()
+ {
+ $this->_fileName = $fileName;
+
+ $this->_fp = null;
+ $this->_type = 'unknown';
+
+ unset($this->_markers);
+ unset($this->_info);
+ }
+
+ /*************************************************************/
+ function _readJPEG()
+ {
+ unset($this->_markers);
+ //unset($this->_info);
+ $this->_markers = array();
+ //$this->_info = array();
+
+ $this->_fp = @fopen($this->_fileName, 'rb');
+ if ($this->_fp) {
+ if (file_exists($this->_fileName)) {
+ $this->_type = 'file';
+ }
+ else {
+ $this->_type = 'url';
+ }
+ }
+ else {
+ $this->_fp = null;
+ return false; // ERROR: Can't open file
+ }
+
+ // Check for the JPEG signature
+ $c1 = ord(fgetc($this->_fp));
+ $c2 = ord(fgetc($this->_fp));
+
+ if ($c1 != 0xFF || $c2 != 0xD8) { // (0xFF + SOI)
+ $this->_markers = null;
+ return false; // ERROR: File is not a JPEG
+ }
+
+ $count = 0;
+
+ $done = false;
+ $ok = true;
+
+ while (!$done) {
+ $capture = false;
+
+ // First, skip any non 0xFF bytes
+ $discarded = 0;
+ $c = ord(fgetc($this->_fp));
+ while (!feof($this->_fp) && ($c != 0xFF)) {
+ $discarded++;
+ $c = ord(fgetc($this->_fp));
+ }
+ // Then skip all 0xFF until the marker byte
+ do {
+ $marker = ord(fgetc($this->_fp));
+ } while (!feof($this->_fp) && ($marker == 0xFF));
+
+ if (feof($this->_fp)) {
+ return false; // ERROR: Unexpected EOF
+ }
+ if ($discarded != 0) {
+ return false; // ERROR: Extraneous data
+ }
+
+ $length = ord(fgetc($this->_fp)) * 256 + ord(fgetc($this->_fp));
+ if (feof($this->_fp)) {
+ return false; // ERROR: Unexpected EOF
+ }
+ if ($length < 2) {
+ return false; // ERROR: Extraneous data
+ }
+ $length = $length - 2; // The length we got counts itself
+
+ switch ($marker) {
+ case 0xC0: // SOF0
+ case 0xC1: // SOF1
+ case 0xC2: // SOF2
+ case 0xC9: // SOF9
+ case 0xE0: // APP0: JFIF data
+ case 0xE1: // APP1: EXIF or XMP data
+ case 0xED: // APP13: IPTC / Photoshop data
+ $capture = true;
+ break;
+ case 0xDA: // SOS: Start of scan... the image itself and the last block on the file
+ $capture = false;
+ $length = -1; // This field has no length... it includes all data until EOF
+ $done = true;
+ break;
+ default:
+ $capture = true;//false;
+ break;
+ }
+
+ $this->_markers[$count] = array();
+ $this->_markers[$count]['marker'] = $marker;
+ $this->_markers[$count]['length'] = $length;
+
+ if ($capture) {
+ if ($length)
+ $this->_markers[$count]['data'] =& fread($this->_fp, $length);
+ else
+ $this->_markers[$count]['data'] = "";
+ }
+ elseif (!$done) {
+ $result = @fseek($this->_fp, $length, SEEK_CUR);
+ // fseek doesn't seem to like HTTP 'files', but fgetc has no problem
+ if (!($result === 0)) {
+ for ($i = 0; $i < $length; $i++) {
+ fgetc($this->_fp);
+ }
+ }
+ }
+ $count++;
+ }
+
+ if ($this->_fp) {
+ fclose($this->_fp);
+ $this->_fp = null;
+ }
+
+ return $ok;
+ }
+
+ /*************************************************************/
+ function _parseAll()
+ {
+ if (!isset($this->_info['file'])) {
+ $this->_parseFileInfo();
+ }
+ if (!isset($this->_markers)) {
+ $this->_readJPEG();
+ }
+
+ if ($this->_markers == null) {
+ return false;
+ }
+
+ if (!isset($this->_info['jfif'])) {
+ $this->_parseMarkerJFIF();
+ }
+ if (!isset($this->_info['jpeg'])) {
+ $this->_parseMarkerSOF();
+ }
+ if (!isset($this->_info['exif'])) {
+ $this->_parseMarkerExif();
+ }
+ if (!isset($this->_info['xmp'])) {
+ $this->_parseMarkerXmp();
+ }
+ if (!isset($this->_info['adobe'])) {
+ $this->_parseMarkerAdobe();
+ }
+ }
+
+ /*************************************************************/
+ function _writeJPEG($outputName)
+ {
+ $this->_parseAll();
+
+ $wroteEXIF = false;
+ $wroteAdobe = false;
+
+ $this->_fp = @fopen($this->_fileName, 'r');
+ if ($this->_fp) {
+ if (file_exists($this->_fileName)) {
+ $this->_type = 'file';
+ }
+ else {
+ $this->_type = 'url';
+ }
+ }
+ else {
+ $this->_fp = null;
+ return false; // ERROR: Can't open file
+ }
+
+ $this->_fpout = fopen($outputName, 'wb');
+ if ($this->_fpout) {
+ }
+ else {
+ $this->_fpout = null;
+ fclose($this->_fp);
+ $this->_fp = null;
+ return false; // ERROR: Can't open output file
+ }
+
+ // Check for the JPEG signature
+ $c1 = ord(fgetc($this->_fp));
+ $c2 = ord(fgetc($this->_fp));
+
+ if ($c1 != 0xFF || $c2 != 0xD8) { // (0xFF + SOI)
+ return false; // ERROR: File is not a JPEG
+ }
+
+ fputs($this->_fpout, chr(0xFF), 1);
+ fputs($this->_fpout, chr(0xD8), 1); // (0xFF + SOI)
+
+ $count = 0;
+
+ $done = false;
+ $ok = true;
+
+ while (!$done) {
+ // First, skip any non 0xFF bytes
+ $discarded = 0;
+ $c = ord(fgetc($this->_fp));
+ while (!feof($this->_fp) && ($c != 0xFF)) {
+ $discarded++;
+ $c = ord(fgetc($this->_fp));
+ }
+ // Then skip all 0xFF until the marker byte
+ do {
+ $marker = ord(fgetc($this->_fp));
+ } while (!feof($this->_fp) && ($marker == 0xFF));
+
+ if (feof($this->_fp)) {
+ $ok = false;
+ break; // ERROR: Unexpected EOF
+ }
+ if ($discarded != 0) {
+ $ok = false;
+ break; // ERROR: Extraneous data
+ }
+
+ $length = ord(fgetc($this->_fp)) * 256 + ord(fgetc($this->_fp));
+ if (feof($this->_fp)) {
+ $ok = false;
+ break; // ERROR: Unexpected EOF
+ }
+ if ($length < 2) {
+ $ok = false;
+ break; // ERROR: Extraneous data
+ }
+ $length = $length - 2; // The length we got counts itself
+
+ unset($data);
+ if ($marker == 0xE1) { // APP1: EXIF data
+ $data =& $this->_createMarkerEXIF();
+ $wroteEXIF = true;
+ }
+ elseif ($marker == 0xED) { // APP13: IPTC / Photoshop data
+ $data =& $this->_createMarkerAdobe();
+ $wroteAdobe = true;
+ }
+ elseif ($marker == 0xDA) { // SOS: Start of scan... the image itself and the last block on the file
+ $done = true;
+ }
+
+ if (!$wroteEXIF && (($marker < 0xE0) || ($marker > 0xEF))) {
+ if (isset($this->_info['exif']) && is_array($this->_info['exif'])) {
+ $exif =& $this->_createMarkerEXIF();
+ $this->_writeJPEGMarker(0xE1, strlen($exif), $exif, 0);
+ unset($exif);
+ }
+ $wroteEXIF = true;
+ }
+
+ if (!$wroteAdobe && (($marker < 0xE0) || ($marker > 0xEF))) {
+ if ((isset($this->_info['adobe']) && is_array($this->_info['adobe']))
+ || (isset($this->_info['iptc']) && is_array($this->_info['iptc']))) {
+ $adobe =& $this->_createMarkerAdobe();
+ $this->_writeJPEGMarker(0xED, strlen($adobe), $adobe, 0);
+ unset($adobe);
+ }
+ $wroteAdobe = true;
+ }
+
+ $origLength = $length;
+ if (isset($data)) {
+ $length = strlen($data);
+ }
+
+ if ($marker != -1) {
+ $this->_writeJPEGMarker($marker, $length, $data, $origLength);
+ }
+ }
+
+ if ($this->_fp) {
+ fclose($this->_fp);
+ $this->_fp = null;
+ }
+
+ if ($this->_fpout) {
+ fclose($this->_fpout);
+ $this->_fpout = null;
+ }
+
+ return $ok;
+ }
+
+ /*************************************************************/
+ function _writeJPEGMarker($marker, $length, &$data, $origLength)
+ {
+ if ($length <= 0) {
+ return false;
+ }
+
+ fputs($this->_fpout, chr(0xFF), 1);
+ fputs($this->_fpout, chr($marker), 1);
+ fputs($this->_fpout, chr((($length + 2) & 0x0000FF00) >> 8), 1);
+ fputs($this->_fpout, chr((($length + 2) & 0x000000FF) >> 0), 1);
+
+ if (isset($data)) {
+ // Copy the generated data
+ fputs($this->_fpout, $data, $length);
+
+ if ($origLength > 0) { // Skip the original data
+ $result = @fseek($this->_fp, $origLength, SEEK_CUR);
+ // fseek doesn't seem to like HTTP 'files', but fgetc has no problem
+ if ($result != 0) {
+ for ($i = 0; $i < $origLength; $i++) {
+ fgetc($this->_fp);
+ }
+ }
+ }
+ }
+ else {
+ if ($marker == 0xDA) { // Copy until EOF
+ while (!feof($this->_fp)) {
+ $data = fread($this->_fp, 1024 * 16);
+ fputs($this->_fpout, $data, strlen($data));
+ }
+ }
+ else { // Copy only $length bytes
+ $data = @fread($this->_fp, $length);
+ fputs($this->_fpout, $data, $length);
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Gets basic info from the file - should work with non-JPEGs
+ *
+ * @author Sebastian Delmont <sdelmont@zonageek.com>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _parseFileInfo()
+ {
+ if (file_exists($this->_fileName)) {
+ $this->_info['file'] = array();
+ $this->_info['file']['Name'] = basename($this->_fileName);
+ $this->_info['file']['Path'] = fullpath($this->_fileName);
+ $this->_info['file']['Size'] = filesize($this->_fileName);
+ if ($this->_info['file']['Size'] < 1024) {
+ $this->_info['file']['NiceSize'] = $this->_info['file']['Size'] . 'B';
+ }
+ elseif ($this->_info['file']['Size'] < (1024 * 1024)) {
+ $this->_info['file']['NiceSize'] = round($this->_info['file']['Size'] / 1024) . 'KB';
+ }
+ elseif ($this->_info['file']['Size'] < (1024 * 1024 * 1024)) {
+ $this->_info['file']['NiceSize'] = round($this->_info['file']['Size'] / (1024*1024)) . 'MB';
+ }
+ else {
+ $this->_info['file']['NiceSize'] = $this->_info['file']['Size'] . 'B';
+ }
+ $this->_info['file']['UnixTime'] = filemtime($this->_fileName);
+
+ // get image size directly from file
+ $size = getimagesize($this->_fileName);
+ $this->_info['file']['Width'] = $size[0];
+ $this->_info['file']['Height'] = $size[1];
+ // set mime types and formats
+ // http://www.php.net/manual/en/function.getimagesize.php
+ // http://www.php.net/manual/en/function.image-type-to-mime-type.php
+ switch ($size[2]){
+ case 1:
+ $this->_info['file']['Mime'] = 'image/gif';
+ $this->_info['file']['Format'] = 'GIF';
+ break;
+ case 2:
+ $this->_info['file']['Mime'] = 'image/jpeg';
+ $this->_info['file']['Format'] = 'JPEG';
+ break;
+ case 3:
+ $this->_info['file']['Mime'] = 'image/png';
+ $this->_info['file']['Format'] = 'PNG';
+ break;
+ case 4:
+ $this->_info['file']['Mime'] = 'application/x-shockwave-flash';
+ $this->_info['file']['Format'] = 'SWF';
+ break;
+ case 5:
+ $this->_info['file']['Mime'] = 'image/psd';
+ $this->_info['file']['Format'] = 'PSD';
+ break;
+ case 6:
+ $this->_info['file']['Mime'] = 'image/bmp';
+ $this->_info['file']['Format'] = 'BMP';
+ break;
+ case 7:
+ $this->_info['file']['Mime'] = 'image/tiff';
+ $this->_info['file']['Format'] = 'TIFF (Intel)';
+ break;
+ case 8:
+ $this->_info['file']['Mime'] = 'image/tiff';
+ $this->_info['file']['Format'] = 'TIFF (Motorola)';
+ break;
+ case 9:
+ $this->_info['file']['Mime'] = 'application/octet-stream';
+ $this->_info['file']['Format'] = 'JPC';
+ break;
+ case 10:
+ $this->_info['file']['Mime'] = 'image/jp2';
+ $this->_info['file']['Format'] = 'JP2';
+ break;
+ case 11:
+ $this->_info['file']['Mime'] = 'application/octet-stream';
+ $this->_info['file']['Format'] = 'JPX';
+ break;
+ case 12:
+ $this->_info['file']['Mime'] = 'application/octet-stream';
+ $this->_info['file']['Format'] = 'JB2';
+ break;
+ case 13:
+ $this->_info['file']['Mime'] = 'application/x-shockwave-flash';
+ $this->_info['file']['Format'] = 'SWC';
+ break;
+ case 14:
+ $this->_info['file']['Mime'] = 'image/iff';
+ $this->_info['file']['Format'] = 'IFF';
+ break;
+ case 15:
+ $this->_info['file']['Mime'] = 'image/vnd.wap.wbmp';
+ $this->_info['file']['Format'] = 'WBMP';
+ break;
+ case 16:
+ $this->_info['file']['Mime'] = 'image/xbm';
+ $this->_info['file']['Format'] = 'XBM';
+ break;
+ default:
+ $this->_info['file']['Mime'] = 'image/unknown';
+ }
+ }
+ else {
+ $this->_info['file'] = array();
+ $this->_info['file']['Name'] = basename($this->_fileName);
+ $this->_info['file']['Url'] = $this->_fileName;
+ }
+
+ return true;
+ }
+
+ /*************************************************************/
+ function _parseMarkerJFIF()
+ {
+ if (!isset($this->_markers)) {
+ $this->_readJPEG();
+ }
+
+ if ($this->_markers == null) {
+ return false;
+ }
+
+ $data = null;
+ $count = count($this->_markers);
+ for ($i = 0; $i < $count; $i++) {
+ if ($this->_markers[$i]['marker'] == 0xE0) {
+ $signature = $this->_getFixedString($this->_markers[$i]['data'], 0, 4);
+ if ($signature == 'JFIF') {
+ $data =& $this->_markers[$i]['data'];
+ break;
+ }
+ }
+ }
+
+ if ($data == null) {
+ $this->_info['jfif'] = false;
+ return false;
+ }
+
+ $pos = 0;
+ $this->_info['jfif'] = array();
+
+
+ $vmaj = $this->_getByte($data, 5);
+ $vmin = $this->_getByte($data, 6);
+
+ $this->_info['jfif']['Version'] = sprintf('%d.%02d', $vmaj, $vmin);
+
+ $units = $this->_getByte($data, 7);
+ switch ($units) {
+ case 0:
+ $this->_info['jfif']['Units'] = 'pixels';
+ break;
+ case 1:
+ $this->_info['jfif']['Units'] = 'dpi';
+ break;
+ case 2:
+ $this->_info['jfif']['Units'] = 'dpcm';
+ break;
+ default:
+ $this->_info['jfif']['Units'] = 'unknown';
+ break;
+ }
+
+ $xdens = $this->_getShort($data, 8);
+ $ydens = $this->_getShort($data, 10);
+
+ $this->_info['jfif']['XDensity'] = $xdens;
+ $this->_info['jfif']['YDensity'] = $ydens;
+
+ $thumbx = $this->_getByte($data, 12);
+ $thumby = $this->_getByte($data, 13);
+
+ $this->_info['jfif']['ThumbnailWidth'] = $thumbx;
+ $this->_info['jfif']['ThumbnailHeight'] = $thumby;
+
+ return true;
+ }
+
+ /*************************************************************/
+ function _parseMarkerSOF()
+ {
+ if (!isset($this->_markers)) {
+ $this->_readJPEG();
+ }
+
+ if ($this->_markers == null) {
+ return false;
+ }
+
+ $data = null;
+ $count = count($this->_markers);
+ for ($i = 0; $i < $count; $i++) {
+ switch ($this->_markers[$i]['marker']) {
+ case 0xC0: // SOF0
+ case 0xC1: // SOF1
+ case 0xC2: // SOF2
+ case 0xC9: // SOF9
+ $data =& $this->_markers[$i]['data'];
+ $marker = $this->_markers[$i]['marker'];
+ break;
+ }
+ }
+
+ if ($data == null) {
+ $this->_info['sof'] = false;
+ return false;
+ }
+
+ $pos = 0;
+ $this->_info['sof'] = array();
+
+
+ switch ($marker) {
+ case 0xC0: // SOF0
+ $format = 'Baseline';
+ break;
+ case 0xC1: // SOF1
+ $format = 'Progessive';
+ break;
+ case 0xC2: // SOF2
+ $format = 'Non-baseline';
+ break;
+ case 0xC9: // SOF9
+ $format = 'Arithmetic';
+ break;
+ default:
+ return false;
+ break;
+ }
+
+
+ $this->_info['sof']['Format'] = $format;
+
+ $this->_info['sof']['SamplePrecision'] = $this->_getByte($data, $pos + 0);
+ $this->_info['sof']['ImageHeight'] = $this->_getShort($data, $pos + 1);
+ $this->_info['sof']['ImageWidth'] = $this->_getShort($data, $pos + 3);
+ $this->_info['sof']['ColorChannels'] = $this->_getByte($data, $pos + 5);
+
+ return true;
+ }
+
+ /**
+ * Parses the XMP data
+ *
+ * @author Hakan Sandell <hakan.sandell@mydata.se>
+ */
+ function _parseMarkerXmp()
+ {
+ if (!isset($this->_markers)) {
+ $this->_readJPEG();
+ }
+
+ if ($this->_markers == null) {
+ return false;
+ }
+
+ $data = null;
+ $count = count($this->_markers);
+ for ($i = 0; $i < $count; $i++) {
+ if ($this->_markers[$i]['marker'] == 0xE1) {
+ $signature = $this->_getFixedString($this->_markers[$i]['data'], 0, 29);
+ if ($signature == "http://ns.adobe.com/xap/1.0/\0") {
+ $data =& substr($this->_markers[$i]['data'], 29);
+ break;
+ }
+ }
+ }
+
+ if ($data == null) {
+ $this->_info['xmp'] = false;
+ return false;
+ }
+
+ $parser = xml_parser_create();
+ xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
+ xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
+ xml_parse_into_struct($parser, $data, $values, $tags);
+ xml_parser_free($parser);
+
+ $this->_info['xmp'] = array();
+ $count = count($values);
+ for ($i = 0; $i < $count; $i++) {
+ if ($values[$i][tag] == 'rdf:Description' && $values[$i][type] == 'open') {
+
+ while ($values[++$i][tag] != 'rdf:Description') {
+ $this->_parseXmpNode($values, $i, $this->_info['xmp'][$values[$i][tag]]);
+ }
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Parses XMP nodes by recursion
+ *
+ * @author Hakan Sandell <hakan.sandell@mydata.se>
+ */
+ function _parseXmpNode($values, &$i, &$meta)
+ {
+ if ($values[$i][type] == 'complete') {
+ // Simple Type property
+ $meta = $values[$i][value];
+ return;
+ }
+
+ $i++;
+ if ($values[$i][tag] == 'rdf:Bag' || $values[$i][tag] == 'rdf:Seq') {
+ // Array property
+ $meta = array();
+ while ($values[++$i][tag] == 'rdf:li') {
+ $this->_parseXmpNode($values, $i, $meta[]);
+ }
+ $i++; // skip closing tag
+
+ } elseif ($values[$i][tag] == 'rdf:Alt') {
+ // Language Alternative property, only the first (default) value is used
+ $i++;
+ $this->_parseXmpNode($values, $i, $meta);
+ while ($values[++$i][tag] != 'rdf:Alt');
+ $i++; // skip closing tag
+
+ } else {
+ // Structure property
+ $meta = array();
+ $startTag = $values[$i-1][tag];
+ do {
+ $this->_parseXmpNode($values, $i, $meta[$values[$i][tag]]);
+ } while ($values[++$i][tag] != $startTag);
+ }
+ }
+
+ /*************************************************************/
+ function _parseMarkerExif()
+ {
+ if (!isset($this->_markers)) {
+ $this->_readJPEG();
+ }
+
+ if ($this->_markers == null) {
+ return false;
+ }
+
+ $data = null;
+ $count = count($this->_markers);
+ for ($i = 0; $i < $count; $i++) {
+ if ($this->_markers[$i]['marker'] == 0xE1) {
+ $signature = $this->_getFixedString($this->_markers[$i]['data'], 0, 6);
+ if ($signature == "Exif\0\0") {
+ $data =& $this->_markers[$i]['data'];
+ break;
+ }
+ }
+ }
+
+ if ($data == null) {
+ $this->_info['exif'] = false;
+ return false;
+ }
+ $pos = 6;
+ $this->_info['exif'] = array();
+
+ // We don't increment $pos after this because Exif uses offsets relative to this point
+
+ $byteAlign = $this->_getShort($data, $pos + 0);
+
+ if ($byteAlign == 0x4949) { // "II"
+ $isBigEndian = false;
+ }
+ elseif ($byteAlign == 0x4D4D) { // "MM"
+ $isBigEndian = true;
+ }
+ else {
+ return false; // Unexpected data
+ }
+
+ $alignCheck = $this->_getShort($data, $pos + 2, $isBigEndian);
+ if ($alignCheck != 0x002A) // That's the expected value
+ return false; // Unexpected data
+
+ if ($isBigEndian) {
+ $this->_info['exif']['ByteAlign'] = "Big Endian";
+ }
+ else {
+ $this->_info['exif']['ByteAlign'] = "Little Endian";
+ }
+
+ $offsetIFD0 = $this->_getLong($data, $pos + 4, $isBigEndian);
+ if ($offsetIFD0 < 8)
+ return false; // Unexpected data
+
+ $offsetIFD1 = $this->_readIFD($data, $pos, $offsetIFD0, $isBigEndian, 'ifd0');
+ if ($offsetIFD1 != 0)
+ $this->_readIFD($data, $pos, $offsetIFD1, $isBigEndian, 'ifd1');
+
+ return true;
+ }
+
+ /*************************************************************/
+ function _readIFD($data, $base, $offset, $isBigEndian, $mode)
+ {
+ $EXIFTags = $this->_exifTagNames($mode);
+
+ $numEntries = $this->_getShort($data, $base + $offset, $isBigEndian);
+ $offset += 2;
+
+ $exifTIFFOffset = 0;
+ $exifTIFFLength = 0;
+ $exifThumbnailOffset = 0;
+ $exifThumbnailLength = 0;
+
+ for ($i = 0; $i < $numEntries; $i++) {
+ $tag = $this->_getShort($data, $base + $offset, $isBigEndian);
+ $offset += 2;
+ $type = $this->_getShort($data, $base + $offset, $isBigEndian);
+ $offset += 2;
+ $count = $this->_getLong($data, $base + $offset, $isBigEndian);
+ $offset += 4;
+
+ if (($type < 1) || ($type > 12))
+ return false; // Unexpected Type
+
+ $typeLengths = array( -1, 1, 1, 2, 4, 8, 1, 1, 2, 4, 8, 4, 8 );
+
+ $dataLength = $typeLengths[$type] * $count;
+ if ($dataLength > 4) {
+ $dataOffset = $this->_getLong($data, $base + $offset, $isBigEndian);
+ $rawValue = $this->_getFixedString($data, $base + $dataOffset, $dataLength);
+ }
+ else {
+ $rawValue = $this->_getFixedString($data, $base + $offset, $dataLength);
+ }
+ $offset += 4;
+
+ switch ($type) {
+ case 1: // UBYTE
+ if ($count == 1) {
+ $value = $this->_getByte($rawValue, 0);
+ }
+ else {
+ $value = array();
+ for ($j = 0; $j < $count; $j++)
+ $value[$j] = $this->_getByte($rawValue, $j);
+ }
+ break;
+ case 2: // ASCII
+ $value = $rawValue;
+ break;
+ case 3: // USHORT
+ if ($count == 1) {
+ $value = $this->_getShort($rawValue, 0, $isBigEndian);
+ }
+ else {
+ $value = array();
+ for ($j = 0; $j < $count; $j++)
+ $value[$j] = $this->_getShort($rawValue, $j * 2, $isBigEndian);
+ }
+ break;
+ case 4: // ULONG
+ if ($count == 1) {
+ $value = $this->_getLong($rawValue, 0, $isBigEndian);
+ }
+ else {
+ $value = array();
+ for ($j = 0; $j < $count; $j++)
+ $value[$j] = $this->_getLong($rawValue, $j * 4, $isBigEndian);
+ }
+ break;
+ case 5: // URATIONAL
+ if ($count == 1) {
+ $a = $this->_getLong($rawValue, 0, $isBigEndian);
+ $b = $this->_getLong($rawValue, 4, $isBigEndian);
+ $value = array();
+ $value['val'] = 0;
+ $value['num'] = $a;
+ $value['den'] = $b;
+ if (($a != 0) && ($b != 0)) {
+ $value['val'] = $a / $b;
+ }
+ }
+ else {
+ $value = array();
+ for ($j = 0; $j < $count; $j++) {
+ $a = $this->_getLong($rawValue, $j * 8, $isBigEndian);
+ $b = $this->_getLong($rawValue, ($j * 8) + 4, $isBigEndian);
+ $value = array();
+ $value[$j]['val'] = 0;
+ $value[$j]['num'] = $a;
+ $value[$j]['den'] = $b;
+ if (($a != 0) && ($b != 0))
+ $value[$j]['val'] = $a / $b;
+ }
+ }
+ break;
+ case 6: // SBYTE
+ if ($count == 1) {
+ $value = $this->_getByte($rawValue, 0);
+ }
+ else {
+ $value = array();
+ for ($j = 0; $j < $count; $j++)
+ $value[$j] = $this->_getByte($rawValue, $j);
+ }
+ break;
+ case 7: // UNDEFINED
+ $value = $rawValue;
+ break;
+ case 8: // SSHORT
+ if ($count == 1) {
+ $value = $this->_getShort($rawValue, 0, $isBigEndian);
+ }
+ else {
+ $value = array();
+ for ($j = 0; $j < $count; $j++)
+ $value[$j] = $this->_getShort($rawValue, $j * 2, $isBigEndian);
+ }
+ break;
+ case 9: // SLONG
+ if ($count == 1) {
+ $value = $this->_getLong($rawValue, 0, $isBigEndian);
+ }
+ else {
+ $value = array();
+ for ($j = 0; $j < $count; $j++)
+ $value[$j] = $this->_getLong($rawValue, $j * 4, $isBigEndian);
+ }
+ break;
+ case 10: // SRATIONAL
+ if ($count == 1) {
+ $a = $this->_getLong($rawValue, 0, $isBigEndian);
+ $b = $this->_getLong($rawValue, 4, $isBigEndian);
+ $value = array();
+ $value['val'] = 0;
+ $value['num'] = $a;
+ $value['den'] = $b;
+ if (($a != 0) && ($b != 0))
+ $value['val'] = $a / $b;
+ }
+ else {
+ $value = array();
+ for ($j = 0; $j < $count; $j++) {
+ $a = $this->_getLong($rawValue, $j * 8, $isBigEndian);
+ $b = $this->_getLong($rawValue, ($j * 8) + 4, $isBigEndian);
+ $value = array();
+ $value[$j]['val'] = 0;
+ $value[$j]['num'] = $a;
+ $value[$j]['den'] = $b;
+ if (($a != 0) && ($b != 0))
+ $value[$j]['val'] = $a / $b;
+ }
+ }
+ break;
+ case 11: // FLOAT
+ $value = $rawValue;
+ break;
+
+ case 12: // DFLOAT
+ $value = $rawValue;
+ break;
+ default:
+ return false; // Unexpected Type
+ }
+
+ $tagName = '';
+ if (($mode == 'ifd0') && ($tag == 0x8769)) { // ExifIFDOffset
+ $this->_readIFD($data, $base, $value, $isBigEndian, 'exif');
+ }
+ elseif (($mode == 'ifd0') && ($tag == 0x8825)) { // GPSIFDOffset
+ $this->_readIFD($data, $base, $value, $isBigEndian, 'gps');
+ }
+ elseif (($mode == 'ifd1') && ($tag == 0x0111)) { // TIFFStripOffsets
+ $exifTIFFOffset = $value;
+ }
+ elseif (($mode == 'ifd1') && ($tag == 0x0117)) { // TIFFStripByteCounts
+ $exifTIFFLength = $value;
+ }
+ elseif (($mode == 'ifd1') && ($tag == 0x0201)) { // TIFFJFIFOffset
+ $exifThumbnailOffset = $value;
+ }
+ elseif (($mode == 'ifd1') && ($tag == 0x0202)) { // TIFFJFIFLength
+ $exifThumbnailLength = $value;
+ }
+ elseif (($mode == 'exif') && ($tag == 0xA005)) { // InteropIFDOffset
+ $this->_readIFD($data, $base, $value, $isBigEndian, 'interop');
+ }
+ // elseif (($mode == 'exif') && ($tag == 0x927C)) { // MakerNote
+ // }
+ else {
+ if (isset($EXIFTags[$tag])) {
+ $tagName = $EXIFTags[$tag];
+ if (isset($this->_info['exif'][$tagName])) {
+ if (!is_array($this->_info['exif'][$tagName])) {
+ $aux = array();
+ $aux[0] = $this->_info['exif'][$tagName];
+ $this->_info['exif'][$tagName] = $aux;
+ }
+
+ $this->_info['exif'][$tagName][count($this->_info['exif'][$tagName])] = $value;
+ }
+ else {
+ $this->_info['exif'][$tagName] = $value;
+ }
+ }
+ else {
+#echo sprintf("<h1>Unknown tag %02x (t: %d l: %d) %s in %s</h1>", $tag, $type, $count, $mode, $this->_fileName);
+ // Unknown Tags will be ignored!!!
+ // That's because the tag might be a pointer (like the Exif tag)
+ // and saving it without saving the data it points to might
+ // create an invalid file.
+ }
+ }
+ }
+
+ if (($exifThumbnailOffset > 0) && ($exifThumbnailLength > 0)) {
+ $this->_info['exif']['JFIFThumbnail'] = $this->_getFixedString($data, $base + $exifThumbnailOffset, $exifThumbnailLength);
+ }
+
+ if (($exifTIFFOffset > 0) && ($exifTIFFLength > 0)) {
+ $this->_info['exif']['TIFFStrips'] = $this->_getFixedString($data, $base + $exifTIFFOffset, $exifTIFFLength);
+ }
+
+ $nextOffset = $this->_getLong($data, $base + $offset, $isBigEndian);
+ return $nextOffset;
+ }
+
+ /*************************************************************/
+ function & _createMarkerExif()
+ {
+ $data = null;
+ $count = count($this->_markers);
+ for ($i = 0; $i < $count; $i++) {
+ if ($this->_markers[$i]['marker'] == 0xE1) {
+ $signature = $this->_getFixedString($this->_markers[$i]['data'], 0, 6);
+ if ($signature == "Exif\0\0") {
+ $data =& $this->_markers[$i]['data'];
+ break;
+ }
+ }
+ }
+
+ if (!isset($this->_info['exif'])) {
+ return false;
+ }
+
+ $data = "Exif\0\0";
+ $pos = 6;
+ $offsetBase = 6;
+
+ if (isset($this->_info['exif']['ByteAlign']) && ($this->_info['exif']['ByteAlign'] == "Big Endian")) {
+ $isBigEndian = true;
+ $aux = "MM";
+ $pos = $this->_putString($data, $pos, $aux);
+ }
+ else {
+ $isBigEndian = false;
+ $aux = "II";
+ $pos = $this->_putString($data, $pos, $aux);
+ }
+ $pos = $this->_putShort($data, $pos, 0x002A, $isBigEndian);
+ $pos = $this->_putLong($data, $pos, 0x00000008, $isBigEndian); // IFD0 Offset is always 8
+
+ $ifd0 =& $this->_getIFDEntries($isBigEndian, 'ifd0');
+ $ifd1 =& $this->_getIFDEntries($isBigEndian, 'ifd1');
+
+ $pos = $this->_writeIFD($data, $pos, $offsetBase, $ifd0, $isBigEndian, true);
+ $pos = $this->_writeIFD($data, $pos, $offsetBase, $ifd1, $isBigEndian, false);
+
+ return $data;
+ }
+
+ /*************************************************************/
+ function _writeIFD(&$data, $pos, $offsetBase, &$entries, $isBigEndian, $hasNext)
+ {
+ $tiffData = null;
+ $tiffDataOffsetPos = -1;
+
+ $entryCount = count($entries);
+
+ $dataPos = $pos + 2 + ($entryCount * 12) + 4;
+ $pos = $this->_putShort($data, $pos, $entryCount, $isBigEndian);
+
+ for ($i = 0; $i < $entryCount; $i++) {
+ $tag = $entries[$i]['tag'];
+ $type = $entries[$i]['type'];
+
+ if ($type == -99) { // SubIFD
+ $pos = $this->_putShort($data, $pos, $tag, $isBigEndian);
+ $pos = $this->_putShort($data, $pos, 0x04, $isBigEndian); // LONG
+ $pos = $this->_putLong($data, $pos, 0x01, $isBigEndian); // Count = 1
+ $pos = $this->_putLong($data, $pos, $dataPos - $offsetBase, $isBigEndian);
+
+ $dataPos = $this->_writeIFD($data, $dataPos, $offsetBase, $entries[$i]['value'], $isBigEndian, false);
+ }
+ elseif ($type == -98) { // TIFF Data
+ $pos = $this->_putShort($data, $pos, $tag, $isBigEndian);
+ $pos = $this->_putShort($data, $pos, 0x04, $isBigEndian); // LONG
+ $pos = $this->_putLong($data, $pos, 0x01, $isBigEndian); // Count = 1
+ $tiffDataOffsetPos = $pos;
+ $pos = $this->_putLong($data, $pos, 0x00, $isBigEndian); // For Now
+ $tiffData =& $entries[$i]['value'] ;
+ }
+ else { // Regular Entry
+ $pos = $this->_putShort($data, $pos, $tag, $isBigEndian);
+ $pos = $this->_putShort($data, $pos, $type, $isBigEndian);
+ $pos = $this->_putLong($data, $pos, $entries[$i]['count'], $isBigEndian);
+ if (strlen($entries[$i]['value']) > 4) {
+ $pos = $this->_putLong($data, $pos, $dataPos - $offsetBase, $isBigEndian);
+ $dataPos = $this->_putString($data, $dataPos, $entries[$i]['value']);
+ }
+ else {
+ $val = str_pad($entries[$i]['value'], 4, "\0");
+ $pos = $this->_putString($data, $pos, $val);
+ }
+ }
+ }
+
+ if ($tiffData != null) {
+ $this->_putLong($data, $tiffDataOffsetPos, $dataPos - $offsetBase, $isBigEndian);
+ $dataPos = $this->_putString($data, $dataPos, $tiffData);
+ }
+
+ if ($hasNext) {
+ $pos = $this->_putLong($data, $pos, $dataPos - $offsetBase, $isBigEndian);
+ }
+ else {
+ $pos = $this->_putLong($data, $pos, 0, $isBigEndian);
+ }
+
+ return $dataPos;
+ }
+
+ /*************************************************************/
+ function & _getIFDEntries($isBigEndian, $mode)
+ {
+ $EXIFNames = $this->_exifTagNames($mode);
+ $EXIFTags = $this->_exifNameTags($mode);
+ $EXIFTypeInfo = $this->_exifTagTypes($mode);
+
+ $ifdEntries = array();
+ $entryCount = 0;
+
+ reset($EXIFNames);
+ while (list($tag, $name) = each($EXIFNames)) {
+ $type = $EXIFTypeInfo[$tag][0];
+ $count = $EXIFTypeInfo[$tag][1];
+ $value = null;
+
+ if (($mode == 'ifd0') && ($tag == 0x8769)) { // ExifIFDOffset
+ if (isset($this->_info['exif']['EXIFVersion'])) {
+ $value =& $this->_getIFDEntries($isBigEndian, "exif");
+ $type = -99;
+ }
+ else {
+ $value = null;
+ }
+ }
+ elseif (($mode == 'ifd0') && ($tag == 0x8825)) { // GPSIFDOffset
+ if (isset($this->_info['exif']['GPSVersionID'])) {
+ $value =& $this->_getIFDEntries($isBigEndian, "gps");
+ $type = -99;
+ }
+ else {
+ $value = null;
+ }
+ }
+ elseif (($mode == 'ifd1') && ($tag == 0x0111)) { // TIFFStripOffsets
+ if (isset($this->_info['exif']['TIFFStrips'])) {
+ $value =& $this->_info['exif']['TIFFStrips'];
+ $type = -98;
+ }
+ else {
+ $value = null;
+ }
+ }
+ elseif (($mode == 'ifd1') && ($tag == 0x0117)) { // TIFFStripByteCounts
+ if (isset($this->_info['exif']['TIFFStrips'])) {
+ $value = strlen($this->_info['exif']['TIFFStrips']);
+ }
+ else {
+ $value = null;
+ }
+ }
+ elseif (($mode == 'ifd1') && ($tag == 0x0201)) { // TIFFJFIFOffset
+ if (isset($this->_info['exif']['JFIFThumbnail'])) {
+ $value =& $this->_info['exif']['JFIFThumbnail'];
+ $type = -98;
+ }
+ else {
+ $value = null;
+ }
+ }
+ elseif (($mode == 'ifd1') && ($tag == 0x0202)) { // TIFFJFIFLength
+ if (isset($this->_info['exif']['JFIFThumbnail'])) {
+ $value = strlen($this->_info['exif']['JFIFThumbnail']);
+ }
+ else {
+ $value = null;
+ }
+ }
+ elseif (($mode == 'exif') && ($tag == 0xA005)) { // InteropIFDOffset
+ if (isset($this->_info['exif']['InteroperabilityIndex'])) {
+ $value =& $this->_getIFDEntries($isBigEndian, "interop");
+ $type = -99;
+ }
+ else {
+ $value = null;
+ }
+ }
+ elseif (isset($this->_info['exif'][$name])) {
+ $origValue =& $this->_info['exif'][$name];
+
+ // This makes it easier to process variable size elements
+ if (!is_array($origValue) || isset($origValue['val'])) {
+ unset($origValue); // Break the reference
+ $origValue = array($this->_info['exif'][$name]);
+ }
+ $origCount = count($origValue);
+
+ if ($origCount == 0 ) {
+ $type = -1; // To ignore this field
+ }
+
+ $value = " ";
+
+ switch ($type) {
+ case 1: // UBYTE
+ if ($count == 0) {
+ $count = $origCount;
+ }
+
+ $j = 0;
+ while (($j < $count) && ($j < $origCount)) {
+
+ $this->_putByte($value, $j, $origValue[$j]);
+ $j++;
+ }
+
+ while ($j < $count) {
+ $this->_putByte($value, $j, 0);
+ $j++;
+ }
+ break;
+ case 2: // ASCII
+ $v = strval($origValue[0]);
+ if (($count != 0) && (strlen($v) > $count)) {
+ $v = substr($v, 0, $count);
+ }
+ elseif (($count > 0) && (strlen($v) < $count)) {
+ $v = str_pad($v, $count, "\0");
+ }
+
+ $count = strlen($v);
+
+ $this->_putString($value, 0, $v);
+ break;
+ case 3: // USHORT
+ if ($count == 0) {
+ $count = $origCount;
+ }
+
+ $j = 0;
+ while (($j < $count) && ($j < $origCount)) {
+ $this->_putShort($value, $j * 2, $origValue[$j], $isBigEndian);
+ $j++;
+ }
+
+ while ($j < $count) {
+ $this->_putShort($value, $j * 2, 0, $isBigEndian);
+ $j++;
+ }
+ break;
+ case 4: // ULONG
+ if ($count == 0) {
+ $count = $origCount;
+ }
+
+ $j = 0;
+ while (($j < $count) && ($j < $origCount)) {
+ $this->_putLong($value, $j * 4, $origValue[$j], $isBigEndian);
+ $j++;
+ }
+
+ while ($j < $count) {
+ $this->_putLong($value, $j * 4, 0, $isBigEndian);
+ $j++;
+ }
+ break;
+ case 5: // URATIONAL
+ if ($count == 0) {
+ $count = $origCount;
+ }
+
+ $j = 0;
+ while (($j < $count) && ($j < $origCount)) {
+ $v = $origValue[$j];
+ if (is_array($v)) {
+ $a = $v['num'];
+ $b = $v['den'];
+ }
+ else {
+ $a = 0;
+ $b = 0;
+ // TODO: Allow other types and convert them
+ }
+ $this->_putLong($value, $j * 8, $a, $isBigEndian);
+ $this->_putLong($value, ($j * 8) + 4, $b, $isBigEndian);
+ $j++;
+ }
+
+ while ($j < $count) {
+ $this->_putLong($value, $j * 8, 0, $isBigEndian);
+ $this->_putLong($value, ($j * 8) + 4, 0, $isBigEndian);
+ $j++;
+ }
+ break;
+ case 6: // SBYTE
+ if ($count == 0) {
+ $count = $origCount;
+ }
+
+ $j = 0;
+ while (($j < $count) && ($j < $origCount)) {
+ $this->_putByte($value, $j, $origValue[$j]);
+ $j++;
+ }
+
+ while ($j < $count) {
+ $this->_putByte($value, $j, 0);
+ $j++;
+ }
+ break;
+ case 7: // UNDEFINED
+ $v = strval($origValue[0]);
+ if (($count != 0) && (strlen($v) > $count)) {
+ $v = substr($v, 0, $count);
+ }
+ elseif (($count > 0) && (strlen($v) < $count)) {
+ $v = str_pad($v, $count, "\0");
+ }
+
+ $count = strlen($v);
+
+ $this->_putString($value, 0, $v);
+ break;
+ case 8: // SSHORT
+ if ($count == 0) {
+ $count = $origCount;
+ }
+
+ $j = 0;
+ while (($j < $count) && ($j < $origCount)) {
+ $this->_putShort($value, $j * 2, $origValue[$j], $isBigEndian);
+ $j++;
+ }
+
+ while ($j < $count) {
+ $this->_putShort($value, $j * 2, 0, $isBigEndian);
+ $j++;
+ }
+ break;
+ case 9: // SLONG
+ if ($count == 0) {
+ $count = $origCount;
+ }
+
+ $j = 0;
+ while (($j < $count) && ($j < $origCount)) {
+ $this->_putLong($value, $j * 4, $origValue[$j], $isBigEndian);
+ $j++;
+ }
+
+ while ($j < $count) {
+ $this->_putLong($value, $j * 4, 0, $isBigEndian);
+ $j++;
+ }
+ break;
+ case 10: // SRATIONAL
+ if ($count == 0) {
+ $count = $origCount;
+ }
+
+ $j = 0;
+ while (($j < $count) && ($j < $origCount)) {
+ $v = $origValue[$j];
+ if (is_array($v)) {
+ $a = $v['num'];
+ $b = $v['den'];
+ }
+ else {
+ $a = 0;
+ $b = 0;
+ // TODO: Allow other types and convert them
+ }
+
+ $this->_putLong($value, $j * 8, $a, $isBigEndian);
+ $this->_putLong($value, ($j * 8) + 4, $b, $isBigEndian);
+ $j++;
+ }
+
+ while ($j < $count) {
+ $this->_putLong($value, $j * 8, 0, $isBigEndian);
+ $this->_putLong($value, ($j * 8) + 4, 0, $isBigEndian);
+ $j++;
+ }
+ break;
+ case 11: // FLOAT
+ if ($count == 0) {
+ $count = $origCount;
+ }
+
+ $j = 0;
+ while (($j < $count) && ($j < $origCount)) {
+ $v = strval($origValue[$j]);
+ if (strlen($v) > 4) {
+ $v = substr($v, 0, 4);
+ }
+ elseif (strlen($v) < 4) {
+ $v = str_pad($v, 4, "\0");
+ }
+ $this->_putString($value, $j * 4, $v);
+ $j++;
+ }
+
+ while ($j < $count) {
+ $this->_putString($value, $j * 4, "\0\0\0\0");
+ $j++;
+ }
+ break;
+ case 12: // DFLOAT
+ if ($count == 0) {
+ $count = $origCount;
+ }
+
+ $j = 0;
+ while (($j < $count) && ($j < $origCount)) {
+ $v = strval($origValue[$j]);
+ if (strlen($v) > 8) {
+ $v = substr($v, 0, 8);
+ }
+ elseif (strlen($v) < 8) {
+ $v = str_pad($v, 8, "\0");
+ }
+ $this->_putString($value, $j * 8, $v);
+ $j++;
+ }
+
+ while ($j < $count) {
+ $this->_putString($value, $j * 8, "\0\0\0\0\0\0\0\0");
+ $j++;
+ }
+ break;
+ default:
+ $value = null;
+ break;
+ }
+ }
+
+ if ($value != null) {
+ $ifdEntries[$entryCount] = array();
+ $ifdEntries[$entryCount]['tag'] = $tag;
+ $ifdEntries[$entryCount]['type'] = $type;
+ $ifdEntries[$entryCount]['count'] = $count;
+ $ifdEntries[$entryCount]['value'] = $value;
+
+ $entryCount++;
+ }
+ }
+
+ return $ifdEntries;
+ }
+
+ /*************************************************************/
+ function _parseMarkerAdobe()
+ {
+ if (!isset($this->_markers)) {
+ $this->_readJPEG();
+ }
+
+ if ($this->_markers == null) {
+ return false;
+ }
+
+ $data = null;
+ $count = count($this->_markers);
+ for ($i = 0; $i < $count; $i++) {
+ if ($this->_markers[$i]['marker'] == 0xED) {
+ $signature = $this->_getFixedString($this->_markers[$i]['data'], 0, 14);
+ if ($signature == "Photoshop 3.0\0") {
+ $data =& $this->_markers[$i]['data'];
+ break;
+ }
+ }
+ }
+
+ if ($data == null) {
+ $this->_info['adobe'] = false;
+ $this->_info['iptc'] = false;
+ return false;
+ }
+ $pos = 14;
+ $this->_info['adobe'] = array();
+ $this->_info['adobe']['raw'] = array();
+ $this->_info['iptc'] = array();
+
+ $datasize = strlen($data);
+
+ while ($pos < $datasize) {
+ $signature = $this->_getFixedString($data, $pos, 4);
+ if ($signature != '8BIM')
+ return false;
+ $pos += 4;
+
+ $type = $this->_getShort($data, $pos);
+ $pos += 2;
+
+ $strlen = $this->_getByte($data, $pos);
+ $pos += 1;
+ $header = '';
+ for ($i = 0; $i < $strlen; $i++) {
+ $header .= $data{$pos + $i};
+ }
+ $pos += $strlen + 1 - ($strlen % 2); // The string is padded to even length, counting the length byte itself
+
+ $length = $this->_getLong($data, $pos);
+ $pos += 4;
+
+ $basePos = $pos;
+
+ switch ($type) {
+ case 0x0404: // Caption (IPTC Data)
+ $pos = $this->_readIPTC($data, $pos);
+ if ($pos == false)
+ return false;
+ break;
+ case 0x040A: // CopyrightFlag
+ $this->_info['adobe']['CopyrightFlag'] = $this->_getByte($data, $pos);
+ $pos += $length;
+ break;
+ case 0x040B: // ImageURL
+ $this->_info['adobe']['ImageURL'] = $this->_getFixedString($data, $pos, $length);
+ $pos += $length;
+ break;
+ case 0x040C: // Thumbnail
+ $aux = $this->_getLong($data, $pos);
+ $pos += 4;
+ if ($aux == 1) {
+ $this->_info['adobe']['ThumbnailWidth'] = $this->_getLong($data, $pos);
+ $pos += 4;
+ $this->_info['adobe']['ThumbnailHeight'] = $this->_getLong($data, $pos);
+ $pos += 4;
+
+ $pos += 16; // Skip some data
+
+ $this->_info['adobe']['ThumbnailData'] = $this->_getFixedString($data, $pos, $length - 28);
+ $pos += $length - 28;
+ }
+ break;
+ default:
+ break;
+ }
+
+ // We save all blocks, even those we recognized
+ $label = sprintf('8BIM_0x%04x', $type);
+ $this->_info['adobe']['raw'][$label] = array();
+ $this->_info['adobe']['raw'][$label]['type'] = $type;
+ $this->_info['adobe']['raw'][$label]['header'] = $header;
+ $this->_info['adobe']['raw'][$label]['data'] =& $this->_getFixedString($data, $basePos, $length);
+
+ $pos = $basePos + $length + ($length % 2); // Even padding
+ }
+
+ }
+
+ /*************************************************************/
+ function _readIPTC(&$data, $pos = 0)
+ {
+ $totalLength = strlen($data);
+
+ $IPTCTags =& $this->_iptcTagNames();
+
+ while ($pos < ($totalLength - 5)) {
+ $signature = $this->_getShort($data, $pos);
+ if ($signature != 0x1C02)
+ return $pos;
+ $pos += 2;
+
+ $type = $this->_getByte($data, $pos);
+ $pos += 1;
+ $length = $this->_getShort($data, $pos);
+ $pos += 2;
+
+ $basePos = $pos;
+ $label = '';
+
+ if (isset($IPTCTags[$type])) {
+ $label = $IPTCTags[$type];
+ }
+ else {
+ $label = sprintf('IPTC_0x%02x', $type);
+ }
+
+ if ($label != '') {
+ if (isset($this->_info['iptc'][$label])) {
+ if (!is_array($this->_info['iptc'][$label])) {
+ $aux = array();
+ $aux[0] = $this->_info['iptc'][$label];
+ $this->_info['iptc'][$label] = $aux;
+ }
+ $this->_info['iptc'][$label][ count($this->_info['iptc'][$label]) ] = $this->_getFixedString($data, $pos, $length);
+ }
+ else {
+ $this->_info['iptc'][$label] = $this->_getFixedString($data, $pos, $length);
+ }
+ }
+
+ $pos = $basePos + $length; // No padding
+ }
+ return $pos;
+ }
+
+ /*************************************************************/
+ function & _createMarkerAdobe()
+ {
+ if (isset($this->_info['iptc'])) {
+ if (!isset($this->_info['adobe'])) {
+ $this->_info['adobe'] = array();
+ }
+ if (!isset($this->_info['adobe']['raw'])) {
+ $this->_info['adobe']['raw'] = array();
+ }
+ if (!isset($this->_info['adobe']['raw']['8BIM_0x0404'])) {
+ $this->_info['adobe']['raw']['8BIM_0x0404'] = array();
+ }
+ $this->_info['adobe']['raw']['8BIM_0x0404']['type'] = 0x0404;
+ $this->_info['adobe']['raw']['8BIM_0x0404']['header'] = "Caption";
+ $this->_info['adobe']['raw']['8BIM_0x0404']['data'] =& $this->_writeIPTC();
+ }
+
+ if (isset($this->_info['adobe']['raw']) && (count($this->_info['adobe']['raw']) > 0)) {
+ $data = "Photoshop 3.0\0";
+ $pos = 14;
+
+ reset($this->_info['adobe']['raw']);
+ while (list($key) = each($this->_info['adobe']['raw'])) {
+ $pos = $this->_write8BIM(
+ $data,
+ $pos,
+ $this->_info['adobe']['raw'][$key]['type'],
+ $this->_info['adobe']['raw'][$key]['header'],
+ $this->_info['adobe']['raw'][$key]['data'] );
+ }
+ }
+
+ return $data;
+ }
+
+ /*************************************************************/
+ function _write8BIM(&$data, $pos, $type, $header, &$value)
+ {
+ $signature = "8BIM";
+
+ $pos = $this->_putString($data, $pos, $signature);
+ $pos = $this->_putShort($data, $pos, $type);
+
+ $len = strlen($header);
+
+ $pos = $this->_putByte($data, $pos, $len);
+ $pos = $this->_putString($data, $pos, $header);
+ if (($len % 2) == 0) { // Even padding, including the length byte
+ $pos = $this->_putByte($data, $pos, 0);
+ }
+
+ $len = strlen($value);
+ $pos = $this->_putLong($data, $pos, $len);
+ $pos = $this->_putString($data, $pos, $value);
+ if (($len % 2) != 0) { // Even padding
+ $pos = $this->_putByte($data, $pos, 0);
+ }
+ return $pos;
+ }
+
+ /*************************************************************/
+ function & _writeIPTC()
+ {
+ $data = " ";
+ $pos = 0;
+
+ $IPTCNames =& $this->_iptcNameTags();
+
+ reset($this->_info['iptc']);
+
+
+ while (list($label) = each($this->_info['iptc'])) {
+ $value =& $this->_info['iptc'][$label];
+ $type = -1;
+
+ if (isset($IPTCNames[$label])) {
+ $type = $IPTCNames[$label];
+ }
+ elseif (substr($label, 0, 7) == "IPTC_0x") {
+ $type = hexdec(substr($label, 7, 2));
+ }
+
+ if ($type != -1) {
+ if (is_array($value)) {
+ for ($i = 0; $i < count($value); $i++) {
+ $pos = $this->_writeIPTCEntry($data, $pos, $type, $value[$i]);
+ }
+ }
+ else {
+ $pos = $this->_writeIPTCEntry($data, $pos, $type, $value);
+ }
+ }
+ }
+
+ return $data;
+ }
+
+ /*************************************************************/
+ function _writeIPTCEntry(&$data, $pos, $type, &$value)
+ {
+ $pos = $this->_putShort($data, $pos, 0x1C02);
+ $pos = $this->_putByte($data, $pos, $type);
+ $pos = $this->_putShort($data, $pos, strlen($value));
+ $pos = $this->_putString($data, $pos, $value);
+
+ return $pos;
+ }
+
+ /*************************************************************/
+ function _exifTagNames($mode)
+ {
+ $tags = array();
+
+ if ($mode == 'ifd0') {
+ $tags[0x010E] = 'ImageDescription';
+ $tags[0x010F] = 'Make';
+ $tags[0x0110] = 'Model';
+ $tags[0x0112] = 'Orientation';
+ $tags[0x011A] = 'XResolution';
+ $tags[0x011B] = 'YResolution';
+ $tags[0x0128] = 'ResolutionUnit';
+ $tags[0x0131] = 'Software';
+ $tags[0x0132] = 'DateTime';
+ $tags[0x013B] = 'Artist';
+ $tags[0x013E] = 'WhitePoint';
+ $tags[0x013F] = 'PrimaryChromaticities';
+ $tags[0x0211] = 'YCbCrCoefficients';
+ $tags[0x0212] = 'YCbCrSubSampling';
+ $tags[0x0213] = 'YCbCrPositioning';
+ $tags[0x0214] = 'ReferenceBlackWhite';
+ $tags[0x8298] = 'Copyright';
+ $tags[0x8769] = 'ExifIFDOffset';
+ $tags[0x8825] = 'GPSIFDOffset';
+ }
+ if ($mode == 'ifd1') {
+ $tags[0x00FE] = 'TIFFNewSubfileType';
+ $tags[0x00FF] = 'TIFFSubfileType';
+ $tags[0x0100] = 'TIFFImageWidth';
+ $tags[0x0101] = 'TIFFImageHeight';
+ $tags[0x0102] = 'TIFFBitsPerSample';
+ $tags[0x0103] = 'TIFFCompression';
+ $tags[0x0106] = 'TIFFPhotometricInterpretation';
+ $tags[0x0107] = 'TIFFThreshholding';
+ $tags[0x0108] = 'TIFFCellWidth';
+ $tags[0x0109] = 'TIFFCellLength';
+ $tags[0x010A] = 'TIFFFillOrder';
+ $tags[0x010E] = 'TIFFImageDescription';
+ $tags[0x010F] = 'TIFFMake';
+ $tags[0x0110] = 'TIFFModel';
+ $tags[0x0111] = 'TIFFStripOffsets';
+ $tags[0x0112] = 'TIFFOrientation';
+ $tags[0x0115] = 'TIFFSamplesPerPixel';
+ $tags[0x0116] = 'TIFFRowsPerStrip';
+ $tags[0x0117] = 'TIFFStripByteCounts';
+ $tags[0x0118] = 'TIFFMinSampleValue';
+ $tags[0x0119] = 'TIFFMaxSampleValue';
+ $tags[0x011A] = 'TIFFXResolution';
+ $tags[0x011B] = 'TIFFYResolution';
+ $tags[0x011C] = 'TIFFPlanarConfiguration';
+ $tags[0x0122] = 'TIFFGrayResponseUnit';
+ $tags[0x0123] = 'TIFFGrayResponseCurve';
+ $tags[0x0128] = 'TIFFResolutionUnit';
+ $tags[0x0131] = 'TIFFSoftware';
+ $tags[0x0132] = 'TIFFDateTime';
+ $tags[0x013B] = 'TIFFArtist';
+ $tags[0x013C] = 'TIFFHostComputer';
+ $tags[0x0140] = 'TIFFColorMap';
+ $tags[0x0152] = 'TIFFExtraSamples';
+ $tags[0x0201] = 'TIFFJFIFOffset';
+ $tags[0x0202] = 'TIFFJFIFLength';
+ $tags[0x0211] = 'TIFFYCbCrCoefficients';
+ $tags[0x0212] = 'TIFFYCbCrSubSampling';
+ $tags[0x0213] = 'TIFFYCbCrPositioning';
+ $tags[0x0214] = 'TIFFReferenceBlackWhite';
+ $tags[0x8298] = 'TIFFCopyright';
+ $tags[0x9286] = 'TIFFUserComment';
+ }
+ elseif ($mode == 'exif') {
+ $tags[0x829A] = 'ExposureTime';
+ $tags[0x829D] = 'FNumber';
+ $tags[0x8822] = 'ExposureProgram';
+ $tags[0x8824] = 'SpectralSensitivity';
+ $tags[0x8827] = 'ISOSpeedRatings';
+ $tags[0x8828] = 'OECF';
+ $tags[0x9000] = 'EXIFVersion';
+ $tags[0x9003] = 'DatetimeOriginal';
+ $tags[0x9004] = 'DatetimeDigitized';
+ $tags[0x9101] = 'ComponentsConfiguration';
+ $tags[0x9102] = 'CompressedBitsPerPixel';
+ $tags[0x9201] = 'ShutterSpeedValue';
+ $tags[0x9202] = 'ApertureValue';
+ $tags[0x9203] = 'BrightnessValue';
+ $tags[0x9204] = 'ExposureBiasValue';
+ $tags[0x9205] = 'MaxApertureValue';
+ $tags[0x9206] = 'SubjectDistance';
+ $tags[0x9207] = 'MeteringMode';
+ $tags[0x9208] = 'LightSource';
+ $tags[0x9209] = 'Flash';
+ $tags[0x920A] = 'FocalLength';
+ $tags[0x927C] = 'MakerNote';
+ $tags[0x9286] = 'UserComment';
+ $tags[0x9290] = 'SubSecTime';
+ $tags[0x9291] = 'SubSecTimeOriginal';
+ $tags[0x9292] = 'SubSecTimeDigitized';
+ $tags[0xA000] = 'FlashPixVersion';
+ $tags[0xA001] = 'ColorSpace';
+ $tags[0xA002] = 'PixelXDimension';
+ $tags[0xA003] = 'PixelYDimension';
+ $tags[0xA004] = 'RelatedSoundFile';
+ $tags[0xA005] = 'InteropIFDOffset';
+ $tags[0xA20B] = 'FlashEnergy';
+ $tags[0xA20C] = 'SpatialFrequencyResponse';
+ $tags[0xA20E] = 'FocalPlaneXResolution';
+ $tags[0xA20F] = 'FocalPlaneYResolution';
+ $tags[0xA210] = 'FocalPlaneResolutionUnit';
+ $tags[0xA214] = 'SubjectLocation';
+ $tags[0xA215] = 'ExposureIndex';
+ $tags[0xA217] = 'SensingMethod';
+ $tags[0xA300] = 'FileSource';
+ $tags[0xA301] = 'SceneType';
+ $tags[0xA302] = 'CFAPattern';
+ }
+ elseif ($mode == 'interop') {
+ $tags[0x0001] = 'InteroperabilityIndex';
+ $tags[0x0002] = 'InteroperabilityVersion';
+ $tags[0x1000] = 'RelatedImageFileFormat';
+ $tags[0x1001] = 'RelatedImageWidth';
+ $tags[0x1002] = 'RelatedImageLength';
+ }
+ elseif ($mode == 'gps') {
+ $tags[0x0000] = 'GPSVersionID';
+ $tags[0x0001] = 'GPSLatitudeRef';
+ $tags[0x0002] = 'GPSLatitude';
+ $tags[0x0003] = 'GPSLongitudeRef';
+ $tags[0x0004] = 'GPSLongitude';
+ $tags[0x0005] = 'GPSAltitudeRef';
+ $tags[0x0006] = 'GPSAltitude';
+ $tags[0x0007] = 'GPSTimeStamp';
+ $tags[0x0008] = 'GPSSatellites';
+ $tags[0x0009] = 'GPSStatus';
+ $tags[0x000A] = 'GPSMeasureMode';
+ $tags[0x000B] = 'GPSDOP';
+ $tags[0x000C] = 'GPSSpeedRef';
+ $tags[0x000D] = 'GPSSpeed';
+ $tags[0x000E] = 'GPSTrackRef';
+ $tags[0x000F] = 'GPSTrack';
+ $tags[0x0010] = 'GPSImgDirectionRef';
+ $tags[0x0011] = 'GPSImgDirection';
+ $tags[0x0012] = 'GPSMapDatum';
+ $tags[0x0013] = 'GPSDestLatitudeRef';
+ $tags[0x0014] = 'GPSDestLatitude';
+ $tags[0x0015] = 'GPSDestLongitudeRef';
+ $tags[0x0016] = 'GPSDestLongitude';
+ $tags[0x0017] = 'GPSDestBearingRef';
+ $tags[0x0018] = 'GPSDestBearing';
+ $tags[0x0019] = 'GPSDestDistanceRef';
+ $tags[0x001A] = 'GPSDestDistance';
+ }
+
+ return $tags;
+ }
+
+ /*************************************************************/
+ function _exifTagTypes($mode)
+ {
+ $tags = array();
+
+ if ($mode == 'ifd0') {
+ $tags[0x010E] = array(2, 0); // ImageDescription -> ASCII, Any
+ $tags[0x010F] = array(2, 0); // Make -> ASCII, Any
+ $tags[0x0110] = array(2, 0); // Model -> ASCII, Any
+ $tags[0x0112] = array(3, 1); // Orientation -> SHORT, 1
+ $tags[0x011A] = array(5, 1); // XResolution -> RATIONAL, 1
+ $tags[0x011B] = array(5, 1); // YResolution -> RATIONAL, 1
+ $tags[0x0128] = array(3, 1); // ResolutionUnit -> SHORT
+ $tags[0x0131] = array(2, 0); // Software -> ASCII, Any
+ $tags[0x0132] = array(2, 20); // DateTime -> ASCII, 20
+ $tags[0x013B] = array(2, 0); // Artist -> ASCII, Any
+ $tags[0x013E] = array(5, 2); // WhitePoint -> RATIONAL, 2
+ $tags[0x013F] = array(5, 6); // PrimaryChromaticities -> RATIONAL, 6
+ $tags[0x0211] = array(5, 3); // YCbCrCoefficients -> RATIONAL, 3
+ $tags[0x0212] = array(3, 2); // YCbCrSubSampling -> SHORT, 2
+ $tags[0x0213] = array(3, 1); // YCbCrPositioning -> SHORT, 1
+ $tags[0x0214] = array(5, 6); // ReferenceBlackWhite -> RATIONAL, 6
+ $tags[0x8298] = array(2, 0); // Copyright -> ASCII, Any
+ $tags[0x8769] = array(4, 1); // ExifIFDOffset -> LONG, 1
+ $tags[0x8825] = array(4, 1); // GPSIFDOffset -> LONG, 1
+ }
+ if ($mode == 'ifd1') {
+ $tags[0x00FE] = array(4, 1); // TIFFNewSubfileType -> LONG, 1
+ $tags[0x00FF] = array(3, 1); // TIFFSubfileType -> SHORT, 1
+ $tags[0x0100] = array(4, 1); // TIFFImageWidth -> LONG (or SHORT), 1
+ $tags[0x0101] = array(4, 1); // TIFFImageHeight -> LONG (or SHORT), 1
+ $tags[0x0102] = array(3, 3); // TIFFBitsPerSample -> SHORT, 3
+ $tags[0x0103] = array(3, 1); // TIFFCompression -> SHORT, 1
+ $tags[0x0106] = array(3, 1); // TIFFPhotometricInterpretation -> SHORT, 1
+ $tags[0x0107] = array(3, 1); // TIFFThreshholding -> SHORT, 1
+ $tags[0x0108] = array(3, 1); // TIFFCellWidth -> SHORT, 1
+ $tags[0x0109] = array(3, 1); // TIFFCellLength -> SHORT, 1
+ $tags[0x010A] = array(3, 1); // TIFFFillOrder -> SHORT, 1
+ $tags[0x010E] = array(2, 0); // TIFFImageDescription -> ASCII, Any
+ $tags[0x010F] = array(2, 0); // TIFFMake -> ASCII, Any
+ $tags[0x0110] = array(2, 0); // TIFFModel -> ASCII, Any
+ $tags[0x0111] = array(4, 0); // TIFFStripOffsets -> LONG (or SHORT), Any (one per strip)
+ $tags[0x0112] = array(3, 1); // TIFFOrientation -> SHORT, 1
+ $tags[0x0115] = array(3, 1); // TIFFSamplesPerPixel -> SHORT, 1
+ $tags[0x0116] = array(4, 1); // TIFFRowsPerStrip -> LONG (or SHORT), 1
+ $tags[0x0117] = array(4, 0); // TIFFStripByteCounts -> LONG (or SHORT), Any (one per strip)
+ $tags[0x0118] = array(3, 0); // TIFFMinSampleValue -> SHORT, Any (SamplesPerPixel)
+ $tags[0x0119] = array(3, 0); // TIFFMaxSampleValue -> SHORT, Any (SamplesPerPixel)
+ $tags[0x011A] = array(5, 1); // TIFFXResolution -> RATIONAL, 1
+ $tags[0x011B] = array(5, 1); // TIFFYResolution -> RATIONAL, 1
+ $tags[0x011C] = array(3, 1); // TIFFPlanarConfiguration -> SHORT, 1
+ $tags[0x0122] = array(3, 1); // TIFFGrayResponseUnit -> SHORT, 1
+ $tags[0x0123] = array(3, 0); // TIFFGrayResponseCurve -> SHORT, Any (2^BitsPerSample)
+ $tags[0x0128] = array(3, 1); // TIFFResolutionUnit -> SHORT, 1
+ $tags[0x0131] = array(2, 0); // TIFFSoftware -> ASCII, Any
+ $tags[0x0132] = array(2, 20); // TIFFDateTime -> ASCII, 20
+ $tags[0x013B] = array(2, 0); // TIFFArtist -> ASCII, Any
+ $tags[0x013C] = array(2, 0); // TIFFHostComputer -> ASCII, Any
+ $tags[0x0140] = array(3, 0); // TIFFColorMap -> SHORT, Any (3 * 2^BitsPerSample)
+ $tags[0x0152] = array(3, 0); // TIFFExtraSamples -> SHORT, Any (SamplesPerPixel - 3)
+ $tags[0x0201] = array(4, 1); // TIFFJFIFOffset -> LONG, 1
+ $tags[0x0202] = array(4, 1); // TIFFJFIFLength -> LONG, 1
+ $tags[0x0211] = array(5, 3); // TIFFYCbCrCoefficients -> RATIONAL, 3
+ $tags[0x0212] = array(3, 2); // TIFFYCbCrSubSampling -> SHORT, 2
+ $tags[0x0213] = array(3, 1); // TIFFYCbCrPositioning -> SHORT, 1
+ $tags[0x0214] = array(5, 6); // TIFFReferenceBlackWhite -> RATIONAL, 6
+ $tags[0x8298] = array(2, 0); // TIFFCopyright -> ASCII, Any
+ $tags[0x9286] = array(2, 0); // TIFFUserComment -> ASCII, Any
+ }
+ elseif ($mode == 'exif') {
+ $tags[0x829A] = array(5, 1); // ExposureTime -> RATIONAL, 1
+ $tags[0x829D] = array(5, 1); // FNumber -> RATIONAL, 1
+ $tags[0x8822] = array(3, 1); // ExposureProgram -> SHORT, 1
+ $tags[0x8824] = array(2, 0); // SpectralSensitivity -> ASCII, Any
+ $tags[0x8827] = array(3, 0); // ISOSpeedRatings -> SHORT, Any
+ $tags[0x8828] = array(7, 0); // OECF -> UNDEFINED, Any
+ $tags[0x9000] = array(7, 4); // EXIFVersion -> UNDEFINED, 4
+ $tags[0x9003] = array(2, 20); // DatetimeOriginal -> ASCII, 20
+ $tags[0x9004] = array(2, 20); // DatetimeDigitized -> ASCII, 20
+ $tags[0x9101] = array(7, 4); // ComponentsConfiguration -> UNDEFINED, 4
+ $tags[0x9102] = array(5, 1); // CompressedBitsPerPixel -> RATIONAL, 1
+ $tags[0x9201] = array(10, 1); // ShutterSpeedValue -> SRATIONAL, 1
+ $tags[0x9202] = array(5, 1); // ApertureValue -> RATIONAL, 1
+ $tags[0x9203] = array(10, 1); // BrightnessValue -> SRATIONAL, 1
+ $tags[0x9204] = array(10, 1); // ExposureBiasValue -> SRATIONAL, 1
+ $tags[0x9205] = array(5, 1); // MaxApertureValue -> RATIONAL, 1
+ $tags[0x9206] = array(5, 1); // SubjectDistance -> RATIONAL, 1
+ $tags[0x9207] = array(3, 1); // MeteringMode -> SHORT, 1
+ $tags[0x9208] = array(3, 1); // LightSource -> SHORT, 1
+ $tags[0x9209] = array(3, 1); // Flash -> SHORT, 1
+ $tags[0x920A] = array(5, 1); // FocalLength -> RATIONAL, 1
+ $tags[0x927C] = array(7, 0); // MakerNote -> UNDEFINED, Any
+ $tags[0x9286] = array(7, 0); // UserComment -> UNDEFINED, Any
+ $tags[0x9290] = array(2, 0); // SubSecTime -> ASCII, Any
+ $tags[0x9291] = array(2, 0); // SubSecTimeOriginal -> ASCII, Any
+ $tags[0x9292] = array(2, 0); // SubSecTimeDigitized -> ASCII, Any
+ $tags[0xA000] = array(7, 4); // FlashPixVersion -> UNDEFINED, 4
+ $tags[0xA001] = array(3, 1); // ColorSpace -> SHORT, 1
+ $tags[0xA002] = array(4, 1); // PixelXDimension -> LONG (or SHORT), 1
+ $tags[0xA003] = array(4, 1); // PixelYDimension -> LONG (or SHORT), 1
+ $tags[0xA004] = array(2, 13); // RelatedSoundFile -> ASCII, 13
+ $tags[0xA005] = array(4, 1); // InteropIFDOffset -> LONG, 1
+ $tags[0xA20B] = array(5, 1); // FlashEnergy -> RATIONAL, 1
+ $tags[0xA20C] = array(7, 0); // SpatialFrequencyResponse -> UNDEFINED, Any
+ $tags[0xA20E] = array(5, 1); // FocalPlaneXResolution -> RATIONAL, 1
+ $tags[0xA20F] = array(5, 1); // FocalPlaneYResolution -> RATIONAL, 1
+ $tags[0xA210] = array(3, 1); // FocalPlaneResolutionUnit -> SHORT, 1
+ $tags[0xA214] = array(3, 2); // SubjectLocation -> SHORT, 2
+ $tags[0xA215] = array(5, 1); // ExposureIndex -> RATIONAL, 1
+ $tags[0xA217] = array(3, 1); // SensingMethod -> SHORT, 1
+ $tags[0xA300] = array(7, 1); // FileSource -> UNDEFINED, 1
+ $tags[0xA301] = array(7, 1); // SceneType -> UNDEFINED, 1
+ $tags[0xA302] = array(7, 0); // CFAPattern -> UNDEFINED, Any
+ }
+ elseif ($mode == 'interop') {
+ $tags[0x0001] = array(2, 0); // InteroperabilityIndex -> ASCII, Any
+ $tags[0x0002] = array(7, 4); // InteroperabilityVersion -> UNKNOWN, 4
+ $tags[0x1000] = array(2, 0); // RelatedImageFileFormat -> ASCII, Any
+ $tags[0x1001] = array(4, 1); // RelatedImageWidth -> LONG (or SHORT), 1
+ $tags[0x1002] = array(4, 1); // RelatedImageLength -> LONG (or SHORT), 1
+ }
+ elseif ($mode == 'gps') {
+ $tags[0x0000] = array(1, 4); // GPSVersionID -> BYTE, 4
+ $tags[0x0001] = array(2, 2); // GPSLatitudeRef -> ASCII, 2
+ $tags[0x0002] = array(5, 3); // GPSLatitude -> RATIONAL, 3
+ $tags[0x0003] = array(2, 2); // GPSLongitudeRef -> ASCII, 2
+ $tags[0x0004] = array(5, 3); // GPSLongitude -> RATIONAL, 3
+ $tags[0x0005] = array(2, 2); // GPSAltitudeRef -> ASCII, 2
+ $tags[0x0006] = array(5, 1); // GPSAltitude -> RATIONAL, 1
+ $tags[0x0007] = array(5, 3); // GPSTimeStamp -> RATIONAL, 3
+ $tags[0x0008] = array(2, 0); // GPSSatellites -> ASCII, Any
+ $tags[0x0009] = array(2, 2); // GPSStatus -> ASCII, 2
+ $tags[0x000A] = array(2, 2); // GPSMeasureMode -> ASCII, 2
+ $tags[0x000B] = array(5, 1); // GPSDOP -> RATIONAL, 1
+ $tags[0x000C] = array(2, 2); // GPSSpeedRef -> ASCII, 2
+ $tags[0x000D] = array(5, 1); // GPSSpeed -> RATIONAL, 1
+ $tags[0x000E] = array(2, 2); // GPSTrackRef -> ASCII, 2
+ $tags[0x000F] = array(5, 1); // GPSTrack -> RATIONAL, 1
+ $tags[0x0010] = array(2, 2); // GPSImgDirectionRef -> ASCII, 2
+ $tags[0x0011] = array(5, 1); // GPSImgDirection -> RATIONAL, 1
+ $tags[0x0012] = array(2, 0); // GPSMapDatum -> ASCII, Any
+ $tags[0x0013] = array(2, 2); // GPSDestLatitudeRef -> ASCII, 2
+ $tags[0x0014] = array(5, 3); // GPSDestLatitude -> RATIONAL, 3
+ $tags[0x0015] = array(2, 2); // GPSDestLongitudeRef -> ASCII, 2
+ $tags[0x0016] = array(5, 3); // GPSDestLongitude -> RATIONAL, 3
+ $tags[0x0017] = array(2, 2); // GPSDestBearingRef -> ASCII, 2
+ $tags[0x0018] = array(5, 1); // GPSDestBearing -> RATIONAL, 1
+ $tags[0x0019] = array(2, 2); // GPSDestDistanceRef -> ASCII, 2
+ $tags[0x001A] = array(5, 1); // GPSDestDistance -> RATIONAL, 1
+ }
+
+ return $tags;
+ }
+
+ /*************************************************************/
+ function _exifNameTags($mode)
+ {
+ $tags = $this->_exifTagNames($mode);
+ return $this->_names2Tags($tags);
+ }
+
+ /*************************************************************/
+ function _iptcTagNames()
+ {
+ $tags = array();
+ $tags[0x14] = 'SuplementalCategories';
+ $tags[0x19] = 'Keywords';
+ $tags[0x78] = 'Caption';
+ $tags[0x7A] = 'CaptionWriter';
+ $tags[0x69] = 'Headline';
+ $tags[0x28] = 'SpecialInstructions';
+ $tags[0x0F] = 'Category';
+ $tags[0x50] = 'Byline';
+ $tags[0x55] = 'BylineTitle';
+ $tags[0x6E] = 'Credit';
+ $tags[0x73] = 'Source';
+ $tags[0x74] = 'CopyrightNotice';
+ $tags[0x05] = 'ObjectName';
+ $tags[0x5A] = 'City';
+ $tags[0x5C] = 'Sublocation';
+ $tags[0x5F] = 'ProvinceState';
+ $tags[0x65] = 'CountryName';
+ $tags[0x67] = 'OriginalTransmissionReference';
+ $tags[0x37] = 'DateCreated';
+ $tags[0x0A] = 'CopyrightFlag';
+
+ return $tags;
+ }
+
+ /*************************************************************/
+ function & _iptcNameTags()
+ {
+ $tags = $this->_iptcTagNames();
+ return $this->_names2Tags($tags);
+ }
+
+ /*************************************************************/
+ function _names2Tags($tags2Names)
+ {
+ $names2Tags = array();
+ reset($tags2Names);
+ while (list($tag, $name) = each($tags2Names)) {
+ $names2Tags[$name] = $tag;
+ }
+
+ return $names2Tags;
+ }
+
+ /*************************************************************/
+ function _getByte(&$data, $pos)
+ {
+ return ord($data{$pos});
+ }
+
+ /*************************************************************/
+ function _putByte(&$data, $pos, $val)
+ {
+ $val = intval($val);
+
+ $data{$pos} = chr($val);
+
+ return $pos + 1;
+ }
+
+ /*************************************************************/
+ function _getShort(&$data, $pos, $bigEndian = true)
+ {
+ if ($bigEndian) {
+ return (ord($data{$pos}) << 8)
+ + ord($data{$pos + 1});
+ }
+ else {
+ return ord($data{$pos})
+ + (ord($data{$pos + 1}) << 8);
+ }
+ }
+
+ /*************************************************************/
+ function _putShort(&$data, $pos = 0, $val, $bigEndian = true)
+ {
+ $val = intval($val);
+
+ if ($bigEndian) {
+ $data{$pos + 0} = chr(($val & 0x0000FF00) >> 8);
+ $data{$pos + 1} = chr(($val & 0x000000FF) >> 0);
+ }
+ else {
+ $data{$pos + 0} = chr(($val & 0x00FF) >> 0);
+ $data{$pos + 1} = chr(($val & 0xFF00) >> 8);
+ }
+
+ return $pos + 2;
+ }
+
+ /*************************************************************/
+ function _getLong(&$data, $pos, $bigEndian = true)
+ {
+ if ($bigEndian) {
+ return (ord($data{$pos}) << 24)
+ + (ord($data{$pos + 1}) << 16)
+ + (ord($data{$pos + 2}) << 8)
+ + ord($data{$pos + 3});
+ }
+ else {
+ return ord($data{$pos})
+ + (ord($data{$pos + 1}) << 8)
+ + (ord($data{$pos + 2}) << 16)
+ + (ord($data{$pos + 3}) << 24);
+ }
+ }
+
+ /*************************************************************/
+ function _putLong(&$data, $pos, $val, $bigEndian = true)
+ {
+ $val = intval($val);
+
+ if ($bigEndian) {
+ $data{$pos + 0} = chr(($val & 0xFF000000) >> 24);
+ $data{$pos + 1} = chr(($val & 0x00FF0000) >> 16);
+ $data{$pos + 2} = chr(($val & 0x0000FF00) >> 8);
+ $data{$pos + 3} = chr(($val & 0x000000FF) >> 0);
+ }
+ else {
+ $data{$pos + 0} = chr(($val & 0x000000FF) >> 0);
+ $data{$pos + 1} = chr(($val & 0x0000FF00) >> 8);
+ $data{$pos + 2} = chr(($val & 0x00FF0000) >> 16);
+ $data{$pos + 3} = chr(($val & 0xFF000000) >> 24);
+ }
+
+ return $pos + 4;
+ }
+
+ /*************************************************************/
+ function & _getNullString(&$data, $pos)
+ {
+ $str = '';
+ $max = strlen($data);
+
+ while ($pos < $max) {
+ if (ord($data{$pos}) == 0) {
+ return $str;
+ }
+ else {
+ $str .= $data{$pos};
+ }
+ $pos++;
+ }
+
+ return $str;
+ }
+
+ /*************************************************************/
+ function & _getFixedString(&$data, $pos, $length = -1)
+ {
+ if ($length == -1) {
+ $length = strlen($data) - $pos;
+ }
+
+ return substr($data, $pos, $length);
+ }
+
+ /*************************************************************/
+ function _putString(&$data, $pos, &$str)
+ {
+ $len = strlen($str);
+ for ($i = 0; $i < $len; $i++) {
+ $data{$pos + $i} = $str{$i};
+ }
+
+ return $pos + $len;
+ }
+
+ /*************************************************************/
+ function _hexDump(&$data, $start = 0, $length = -1)
+ {
+ if (($length == -1) || (($length + $start) > strlen($data))) {
+ $end = strlen($data);
+ }
+ else {
+ $end = $start + $length;
+ }
+
+ $ascii = '';
+ $count = 0;
+
+ echo "<tt>\n";
+
+ while ($start < $end) {
+ if (($count % 16) == 0) {
+ echo sprintf('%04d', $count) . ': ';
+ }
+
+ $c = ord($data{$start});
+ $count++;
+ $start++;
+
+ $aux = dechex($c);
+ if (strlen($aux) == 1)
+ echo '0';
+ echo $aux . ' ';
+
+ if ($c == 60)
+ $ascii .= '&lt;';
+ elseif ($c == 62)
+ $ascii .= '&gt;';
+ elseif ($c == 32)
+ $ascii .= '&nbsp;';
+ elseif ($c > 32)
+ $ascii .= chr($c);
+ else
+ $ascii .= '.';
+
+ if (($count % 4) == 0) {
+ echo ' - ';
+ }
+
+ if (($count % 16) == 0) {
+ echo ': ' . $ascii . "<br>\n";
+ $ascii = '';
+ }
+ }
+
+ if ($ascii != '') {
+ while (($count % 16) != 0) {
+ echo '-- ';
+ $count++;
+ if (($count % 4) == 0) {
+ echo ' - ';
+ }
+ }
+ echo ': ' . $ascii . "<br>\n";
+ }
+
+ echo "</tt>\n";
+ }
+
+/*****************************************************************/
+}
+
+/* vim: set expandtab tabstop=4 shiftwidth=4: */
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/SimplePie.php b/mod/dokuwiki/vendors/dokuwiki/inc/SimplePie.php
new file mode 100644
index 000000000..1c97e2384
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/SimplePie.php
@@ -0,0 +1,10849 @@
+<?php
+/**
+ * SimplePie
+ *
+ * A PHP-Based RSS and Atom Feed Framework.
+ * Takes the hard work out of managing a complete RSS/Atom solution.
+ *
+ * Copyright (c) 2004-2007, Ryan Parman and Geoffrey Sneddon
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are
+ * permitted provided that the following conditions are met:
+ *
+ * * Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * * Neither the name of the SimplePie Team nor the names of its contributors may be used
+ * to endorse or promote products derived from this software without specific prior
+ * written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
+ * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @package SimplePie
+ * @version "Razzleberry"
+ * @copyright 2004-2007 Ryan Parman, Geoffrey Sneddon
+ * @author Ryan Parman
+ * @author Geoffrey Sneddon
+ * @link http://simplepie.org/ SimplePie
+ * @link http://simplepie.org/support/ Please submit all bug reports and feature requests to the SimplePie forums
+ * @license http://www.opensource.org/licenses/bsd-license.php BSD License
+ * @todo phpDoc comments
+ */
+
+/**
+ * SimplePie Name
+ */
+define('SIMPLEPIE_NAME', 'SimplePie');
+
+/**
+ * SimplePie Version
+ */
+define('SIMPLEPIE_VERSION', '1.0.1');
+
+/**
+ * SimplePie Build
+ * @todo Hardcode for release (there's no need to have to call SimplePie_Misc::parse_date() only every load of simplepie.inc)
+ */
+define('SIMPLEPIE_BUILD', 20070719221955);
+
+/**
+ * SimplePie Website URL
+ */
+define('SIMPLEPIE_URL', 'http://simplepie.org/');
+
+/**
+ * SimplePie Useragent
+ * @see SimplePie::set_useragent()
+ */
+define('SIMPLEPIE_USERAGENT', SIMPLEPIE_NAME . '/' . SIMPLEPIE_VERSION . ' (Feed Parser; ' . SIMPLEPIE_URL . '; Allow like Gecko) Build/' . SIMPLEPIE_BUILD);
+
+/**
+ * SimplePie Linkback
+ */
+define('SIMPLEPIE_LINKBACK', '<a href="' . SIMPLEPIE_URL . '" title="' . SIMPLEPIE_NAME . ' ' . SIMPLEPIE_VERSION . '">' . SIMPLEPIE_NAME . '</a>');
+
+/**
+ * No Autodiscovery
+ * @see SimplePie::set_autodiscovery_level()
+ */
+define('SIMPLEPIE_LOCATOR_NONE', 0);
+
+/**
+ * Feed Link Element Autodiscovery
+ * @see SimplePie::set_autodiscovery_level()
+ */
+define('SIMPLEPIE_LOCATOR_AUTODISCOVERY', 1);
+
+/**
+ * Local Feed Extension Autodiscovery
+ * @see SimplePie::set_autodiscovery_level()
+ */
+define('SIMPLEPIE_LOCATOR_LOCAL_EXTENSION', 2);
+
+/**
+ * Local Feed Body Autodiscovery
+ * @see SimplePie::set_autodiscovery_level()
+ */
+define('SIMPLEPIE_LOCATOR_LOCAL_BODY', 4);
+
+/**
+ * Remote Feed Extension Autodiscovery
+ * @see SimplePie::set_autodiscovery_level()
+ */
+define('SIMPLEPIE_LOCATOR_REMOTE_EXTENSION', 8);
+
+/**
+ * Remote Feed Body Autodiscovery
+ * @see SimplePie::set_autodiscovery_level()
+ */
+define('SIMPLEPIE_LOCATOR_REMOTE_BODY', 16);
+
+/**
+ * All Feed Autodiscovery
+ * @see SimplePie::set_autodiscovery_level()
+ */
+define('SIMPLEPIE_LOCATOR_ALL', 31);
+
+/**
+ * No known feed type
+ */
+define('SIMPLEPIE_TYPE_NONE', 0);
+
+/**
+ * RSS 0.90
+ */
+define('SIMPLEPIE_TYPE_RSS_090', 1);
+
+/**
+ * RSS 0.91 (Netscape)
+ */
+define('SIMPLEPIE_TYPE_RSS_091_NETSCAPE', 2);
+
+/**
+ * RSS 0.91 (Userland)
+ */
+define('SIMPLEPIE_TYPE_RSS_091_USERLAND', 4);
+
+/**
+ * RSS 0.91 (both Netscape and Userland)
+ */
+define('SIMPLEPIE_TYPE_RSS_091', 6);
+
+/**
+ * RSS 0.92
+ */
+define('SIMPLEPIE_TYPE_RSS_092', 8);
+
+/**
+ * RSS 0.93
+ */
+define('SIMPLEPIE_TYPE_RSS_093', 16);
+
+/**
+ * RSS 0.94
+ */
+define('SIMPLEPIE_TYPE_RSS_094', 32);
+
+/**
+ * RSS 1.0
+ */
+define('SIMPLEPIE_TYPE_RSS_10', 64);
+
+/**
+ * RSS 2.0
+ */
+define('SIMPLEPIE_TYPE_RSS_20', 128);
+
+/**
+ * RDF-based RSS
+ */
+define('SIMPLEPIE_TYPE_RSS_RDF', 65);
+
+/**
+ * Non-RDF-based RSS (truly intended as syndication format)
+ */
+define('SIMPLEPIE_TYPE_RSS_SYNDICATION', 190);
+
+/**
+ * All RSS
+ */
+define('SIMPLEPIE_TYPE_RSS_ALL', 255);
+
+/**
+ * Atom 0.3
+ */
+define('SIMPLEPIE_TYPE_ATOM_03', 256);
+
+/**
+ * Atom 1.0
+ */
+define('SIMPLEPIE_TYPE_ATOM_10', 512);
+
+/**
+ * All Atom
+ */
+define('SIMPLEPIE_TYPE_ATOM_ALL', 768);
+
+/**
+ * All feed types
+ */
+define('SIMPLEPIE_TYPE_ALL', 1023);
+
+/**
+ * No construct
+ */
+define('SIMPLEPIE_CONSTRUCT_NONE', 0);
+
+/**
+ * Text construct
+ */
+define('SIMPLEPIE_CONSTRUCT_TEXT', 1);
+
+/**
+ * HTML construct
+ */
+define('SIMPLEPIE_CONSTRUCT_HTML', 2);
+
+/**
+ * XHTML construct
+ */
+define('SIMPLEPIE_CONSTRUCT_XHTML', 4);
+
+/**
+ * base64-encoded construct
+ */
+define('SIMPLEPIE_CONSTRUCT_BASE64', 8);
+
+/**
+ * IRI construct
+ */
+define('SIMPLEPIE_CONSTRUCT_IRI', 16);
+
+/**
+ * A construct that might be HTML
+ */
+define('SIMPLEPIE_CONSTRUCT_MAYBE_HTML', 32);
+
+/**
+ * All constructs
+ */
+define('SIMPLEPIE_CONSTRUCT_ALL', 63);
+
+/**
+ * PCRE for HTML attributes
+ */
+define('SIMPLEPIE_PCRE_HTML_ATTRIBUTE', '((?:\s+(?:(?:[^\s:]+:)?[^\s:]+)(?:\s*=\s*(?:"(?:[^"]*)"|\'(?:[^\']*)\'|(?:[a-z0-9\-._:]*)))?)*)\s*');
+
+/**
+ * PCRE for XML attributes
+ */
+define('SIMPLEPIE_PCRE_XML_ATTRIBUTE', '((?:\s+(?:(?:[^\s:]+:)?[^\s:]+)\s*=\s*(?:"(?:[^"]*)"|\'(?:[^\']*)\'))*)\s*');
+
+/**
+ * XML Namespace
+ */
+define('SIMPLEPIE_NAMESPACE_XML', 'http://www.w3.org/XML/1998/namespace');
+
+/**
+ * Atom 1.0 Namespace
+ */
+define('SIMPLEPIE_NAMESPACE_ATOM_10', 'http://www.w3.org/2005/Atom');
+
+/**
+ * Atom 0.3 Namespace
+ */
+define('SIMPLEPIE_NAMESPACE_ATOM_03', 'http://purl.org/atom/ns#');
+
+/**
+ * RDF Namespace
+ */
+define('SIMPLEPIE_NAMESPACE_RDF', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#');
+
+/**
+ * RSS 0.90 Namespace
+ */
+define('SIMPLEPIE_NAMESPACE_RSS_090', 'http://my.netscape.com/rdf/simple/0.9/');
+
+/**
+ * RSS 1.0 Namespace
+ */
+define('SIMPLEPIE_NAMESPACE_RSS_10', 'http://purl.org/rss/1.0/');
+
+/**
+ * RSS 1.0 Content Module Namespace
+ */
+define('SIMPLEPIE_NAMESPACE_RSS_10_MODULES_CONTENT', 'http://purl.org/rss/1.0/modules/content/');
+
+/**
+ * DC 1.0 Namespace
+ */
+define('SIMPLEPIE_NAMESPACE_DC_10', 'http://purl.org/dc/elements/1.0/');
+
+/**
+ * DC 1.1 Namespace
+ */
+define('SIMPLEPIE_NAMESPACE_DC_11', 'http://purl.org/dc/elements/1.1/');
+
+/**
+ * W3C Basic Geo (WGS84 lat/long) Vocabulary Namespace
+ */
+define('SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO', 'http://www.w3.org/2003/01/geo/wgs84_pos#');
+
+/**
+ * GeoRSS Namespace
+ */
+define('SIMPLEPIE_NAMESPACE_GEORSS', 'http://www.georss.org/georss');
+
+/**
+ * Media RSS Namespace
+ */
+define('SIMPLEPIE_NAMESPACE_MEDIARSS', 'http://search.yahoo.com/mrss/');
+
+/**
+ * iTunes RSS Namespace
+ */
+define('SIMPLEPIE_NAMESPACE_ITUNES', 'http://www.itunes.com/dtds/podcast-1.0.dtd');
+
+/**
+ * XHTML Namespace
+ */
+define('SIMPLEPIE_NAMESPACE_XHTML', 'http://www.w3.org/1999/xhtml');
+
+/**
+ * IANA Link Relations Registry
+ */
+define('SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY', 'http://www.iana.org/assignments/relation/');
+
+/**
+ * Whether we're running on PHP5
+ */
+define('SIMPLEPIE_PHP5', version_compare(PHP_VERSION, '5.0.0', '>='));
+
+/**
+ * SimplePie
+ *
+ * @package SimplePie
+ * @version "Razzleberry"
+ * @copyright 2004-2007 Ryan Parman, Geoffrey Sneddon
+ * @author Ryan Parman
+ * @author Geoffrey Sneddon
+ * @todo Option for type of fetching (cache, not modified header, fetch, etc.)
+ */
+class SimplePie
+{
+ /**
+ * @var array Raw data
+ * @access private
+ */
+ var $data = array();
+
+ /**
+ * @var mixed Error string
+ * @access private
+ */
+ var $error;
+
+ /**
+ * @var object Instance of SimplePie_Sanitize (or other class)
+ * @see SimplePie::set_sanitize_class()
+ * @access private
+ */
+ var $sanitize;
+
+ /**
+ * @var string SimplePie Useragent
+ * @see SimplePie::set_useragent()
+ * @access private
+ */
+ var $useragent = SIMPLEPIE_USERAGENT;
+
+ /**
+ * @var string Feed URL
+ * @see SimplePie::set_feed_url()
+ * @access private
+ */
+ var $feed_url;
+
+ /**
+ * @var object Instance of SimplePie_File to use as a feed
+ * @see SimplePie::set_file()
+ * @access private
+ */
+ var $file;
+
+ /**
+ * @var string Raw feed data
+ * @see SimplePie::set_raw_data()
+ * @access private
+ */
+ var $raw_data;
+
+ /**
+ * @var int Timeout for fetching remote files
+ * @see SimplePie::set_timeout()
+ * @access private
+ */
+ var $timeout = 10;
+
+ /**
+ * @var bool Forces fsockopen() to be used for remote files instead
+ * of cURL, even if a new enough version is installed
+ * @see SimplePie::force_fsockopen()
+ * @access private
+ */
+ var $force_fsockopen = false;
+
+ /**
+ * @var bool Enable/Disable XML dump
+ * @see SimplePie::enable_xml_dump()
+ * @access private
+ */
+ var $xml_dump = false;
+
+ /**
+ * @var bool Enable/Disable Caching
+ * @see SimplePie::enable_cache()
+ * @access private
+ */
+ var $cache = true;
+
+ /**
+ * @var int Cache duration (in seconds)
+ * @see SimplePie::set_cache_duration()
+ * @access private
+ */
+ var $cache_duration = 3600;
+
+ /**
+ * @var int Auto-discovery cache duration (in seconds)
+ * @see SimplePie::set_autodiscovery_cache_duration()
+ * @access private
+ */
+ var $autodiscovery_cache_duration = 604800; // 7 Days.
+
+ /**
+ * @var string Cache location (relative to executing script)
+ * @see SimplePie::set_cache_location()
+ * @access private
+ */
+ var $cache_location = './cache';
+
+ /**
+ * @var string Function that creates the cache filename
+ * @see SimplePie::set_cache_name_function()
+ * @access private
+ */
+ var $cache_name_function = 'md5';
+
+ /**
+ * @var bool Reorder feed by date descending
+ * @see SimplePie::enable_order_by_date()
+ * @access private
+ */
+ var $order_by_date = true;
+
+ /**
+ * @var mixed Force input encoding to be set to the follow value
+ * (false, or anything type-cast to false, disables this feature)
+ * @see SimplePie::set_input_encoding()
+ * @access private
+ */
+ var $input_encoding = false;
+
+ /**
+ * @var int Feed Autodiscovery Level
+ * @see SimplePie::set_autodiscovery_level()
+ * @access private
+ */
+ var $autodiscovery = SIMPLEPIE_LOCATOR_ALL;
+
+ /**
+ * @var string Class used for caching feeds
+ * @see SimplePie::set_cache_class()
+ * @access private
+ */
+ var $cache_class = 'SimplePie_Cache';
+
+ /**
+ * @var string Class used for locating feeds
+ * @see SimplePie::set_locator_class()
+ * @access private
+ */
+ var $locator_class = 'SimplePie_Locator';
+
+ /**
+ * @var string Class used for parsing feeds
+ * @see SimplePie::set_parser_class()
+ * @access private
+ */
+ var $parser_class = 'SimplePie_Parser';
+
+ /**
+ * @var string Class used for fetching feeds
+ * @see SimplePie::set_file_class()
+ * @access private
+ */
+ var $file_class = 'SimplePie_File';
+
+ /**
+ * @var string Class used for items
+ * @see SimplePie::set_item_class()
+ * @access private
+ */
+ var $item_class = 'SimplePie_Item';
+
+ /**
+ * @var string Class used for authors
+ * @see SimplePie::set_author_class()
+ * @access private
+ */
+ var $author_class = 'SimplePie_Author';
+
+ /**
+ * @var string Class used for categories
+ * @see SimplePie::set_category_class()
+ * @access private
+ */
+ var $category_class = 'SimplePie_Category';
+
+ /**
+ * @var string Class used for enclosures
+ * @see SimplePie::set_enclosures_class()
+ * @access private
+ */
+ var $enclosure_class = 'SimplePie_Enclosure';
+
+ /**
+ * @var string Class used for Media RSS <media:text> captions
+ * @see SimplePie::set_caption_class()
+ * @access private
+ */
+ var $caption_class = 'SimplePie_Caption';
+
+ /**
+ * @var string Class used for Media RSS <media:copyright>
+ * @see SimplePie::set_copyright_class()
+ * @access private
+ */
+ var $copyright_class = 'SimplePie_Copyright';
+
+ /**
+ * @var string Class used for Media RSS <media:credit>
+ * @see SimplePie::set_credit_class()
+ * @access private
+ */
+ var $credit_class = 'SimplePie_Credit';
+
+ /**
+ * @var string Class used for Media RSS <media:rating>
+ * @see SimplePie::set_rating_class()
+ * @access private
+ */
+ var $rating_class = 'SimplePie_Rating';
+
+ /**
+ * @var string Class used for Media RSS <media:restriction>
+ * @see SimplePie::set_restriction_class()
+ * @access private
+ */
+ var $restriction_class = 'SimplePie_Restriction';
+
+ /**
+ * @var mixed Set javascript query string parameter (false, or
+ * anything type-cast to false, disables this feature)
+ * @see SimplePie::set_javascript()
+ * @access private
+ */
+ var $javascript = 'js';
+
+ /**
+ * @var int Maximum number of feeds to check with autodiscovery
+ * @see SimplePie::set_max_checked_feeds()
+ * @access private
+ */
+ var $max_checked_feeds = 10;
+
+ /**
+ * @var string Web-accessible path to the handler_favicon.php file.
+ * @see SimplePie::set_favicon_handler()
+ * @access private
+ */
+ var $favicon_handler = '';
+
+ /**
+ * @var string Web-accessible path to the handler_image.php file.
+ * @see SimplePie::set_image_handler()
+ * @access private
+ */
+ var $image_handler = '';
+
+ /**
+ * @var array Stores the URLs when multiple feeds are being initialized.
+ * @see SimplePie::set_feed_url()
+ * @access private
+ */
+ var $multifeed_url = array();
+
+ /**
+ * @var array Stores SimplePie objects when multiple feeds initialized.
+ * @access private
+ */
+ var $multifeed_objects = array();
+
+ /**
+ * @var array Stores the get_object_vars() array for use with multifeeds.
+ * @see SimplePie::set_feed_url()
+ * @access private
+ */
+ var $config_settings = null;
+
+ /**
+ * @var array Stores the default attributes to be stripped by strip_attributes().
+ * @see SimplePie::strip_attributes()
+ * @access private
+ */
+ var $strip_attributes = array('bgsound', 'class', 'expr', 'id', 'style', 'onclick', 'onerror', 'onfinish', 'onmouseover', 'onmouseout', 'onfocus', 'onblur', 'lowsrc', 'dynsrc');
+
+ /**
+ * @var array Stores the default tags to be stripped by strip_htmltags().
+ * @see SimplePie::strip_htmltags()
+ * @access private
+ */
+ var $strip_htmltags = array('base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'iframe', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style');
+
+ /**
+ * The SimplePie class contains feed level data and options
+ *
+ * There are two ways that you can create a new SimplePie object. The first
+ * is by passing a feed URL as a parameter to the SimplePie constructor
+ * (as well as optionally setting the cache location and cache expiry). This
+ * will initialise the whole feed with all of the default settings, and you
+ * can begin accessing methods and properties immediately.
+ *
+ * The second way is to create the SimplePie object with no parameters
+ * at all. This will enable you to set configuration options. After setting
+ * them, you must initialise the feed using $feed->init(). At that point the
+ * object's methods and properties will be available to you. This format is
+ * what is used throughout this documentation.
+ *
+ * @access public
+ * @since 1.0 Preview Release
+ * @param string $feed_url This is the URL you want to parse.
+ * @param string $cache_location This is where you want the cache to be stored.
+ * @param int $cache_duration This is the number of seconds that you want to store the cache file for.
+ */
+ function SimplePie($feed_url = null, $cache_location = null, $cache_duration = null)
+ {
+ // Other objects, instances created here so we can set options on them
+ $this->sanitize =& new SimplePie_Sanitize;
+
+ // Set options if they're passed to the constructor
+ if ($cache_location !== null)
+ {
+ $this->set_cache_location($cache_location);
+ }
+
+ if ($cache_duration !== null)
+ {
+ $this->set_cache_duration($cache_duration);
+ }
+
+ // Only init the script if we're passed a feed URL
+ if ($feed_url !== null)
+ {
+ $this->set_feed_url($feed_url);
+ $this->init();
+ }
+ }
+
+ /**
+ * Used for converting object to a string
+ */
+ function __toString()
+ {
+ return md5(serialize($this->data));
+ }
+
+ /**
+ * This is the URL of the feed you want to parse.
+ *
+ * This allows you to enter the URL of the feed you want to parse, or the
+ * website you want to try to use auto-discovery on. This takes priority
+ * over any set raw data.
+ *
+ * You can set multiple feeds to mash together by passing an array instead
+ * of a string for the $url. Remember that with each additional feed comes
+ * additional processing and resources.
+ *
+ * @access public
+ * @since 1.0 Preview Release
+ * @param mixed $url This is the URL (or array of URLs) that you want to parse.
+ * @see SimplePie::set_raw_data()
+ */
+ function set_feed_url($url)
+ {
+ if (is_array($url))
+ {
+ $this->multifeed_url = array();
+ foreach ($url as $value)
+ {
+ $this->multifeed_url[] = SimplePie_Misc::fix_protocol($value, 1);
+ }
+ }
+ else
+ {
+ $this->feed_url = SimplePie_Misc::fix_protocol($url, 1);
+ }
+ }
+
+ /**
+ * Provides an instance of SimplePie_File to use as a feed
+ *
+ * @access public
+ * @param object &$file Instance of SimplePie_File (or subclass)
+ * @return bool True on success, false on failure
+ */
+ function set_file(&$file)
+ {
+ if (SimplePie_Misc::is_a($file, 'SimplePie_File'))
+ {
+ $this->feed_url = $file->url;
+ $this->file =& $file;
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Allows you to use a string of RSS/Atom data instead of a remote feed.
+ *
+ * If you have a feed available as a string in PHP, you can tell SimplePie
+ * to parse that data string instead of a remote feed. Any set feed URL
+ * takes precedence.
+ *
+ * @access public
+ * @since 1.0 Beta 3
+ * @param string $data RSS or Atom data as a string.
+ * @see SimplePie::set_feed_url()
+ */
+ function set_raw_data($data)
+ {
+ $this->raw_data = trim($data);
+ }
+
+ /**
+ * Allows you to override the default timeout for fetching remote feeds.
+ *
+ * This allows you to change the maximum time the feed's server to respond
+ * and send the feed back.
+ *
+ * @access public
+ * @since 1.0 Beta 3
+ * @param int $timeout The maximum number of seconds to spend waiting to retrieve a feed.
+ */
+ function set_timeout($timeout = 10)
+ {
+ $this->timeout = (int) $timeout;
+ }
+
+ /**
+ * Forces SimplePie to use fsockopen() instead of the preferred cURL
+ * functions.
+ *
+ * @access public
+ * @since 1.0 Beta 3
+ * @param bool $enable Force fsockopen() to be used
+ */
+ function force_fsockopen($enable = false)
+ {
+ $this->force_fsockopen = (bool) $enable;
+ }
+
+ /**
+ * Outputs the raw XML content of the feed, after it has gone through
+ * SimplePie's filters.
+ *
+ * Used only for debugging, this function will output the XML content as
+ * text/xml. When SimplePie reads in a feed, it does a bit of cleaning up
+ * before trying to parse it. Many parts of the feed are re-written in
+ * memory, and in the end, you have a parsable feed. XML dump shows you the
+ * actual XML that SimplePie tries to parse, which may or may not be very
+ * different from the original feed.
+ *
+ * @access public
+ * @since 1.0 Preview Release
+ * @param bool $enable Enable XML dump
+ */
+ function enable_xml_dump($enable = false)
+ {
+ $this->xml_dump = (bool) $enable;
+ }
+
+ /**
+ * Enables/disables caching in SimplePie.
+ *
+ * This option allows you to disable caching all-together in SimplePie.
+ * However, disabling the cache can lead to longer load times.
+ *
+ * @access public
+ * @since 1.0 Preview Release
+ * @param bool $enable Enable caching
+ */
+ function enable_cache($enable = true)
+ {
+ $this->cache = (bool) $enable;
+ }
+
+ /**
+ * Set the length of time (in seconds) that the contents of a feed
+ * will be cached.
+ *
+ * @access public
+ * @param int $seconds The feed content cache duration.
+ */
+ function set_cache_duration($seconds = 3600)
+ {
+ $this->cache_duration = (int) $seconds;
+ }
+
+ /**
+ * Set the length of time (in seconds) that the autodiscovered feed
+ * URL will be cached.
+ *
+ * @access public
+ * @param int $seconds The autodiscovered feed URL cache duration.
+ */
+ function set_autodiscovery_cache_duration($seconds = 604800)
+ {
+ $this->autodiscovery_cache_duration = (int) $seconds;
+ }
+
+ /**
+ * Set the file system location where the cached files should be stored.
+ *
+ * @access public
+ * @param string $location The file system location.
+ */
+ function set_cache_location($location = './cache')
+ {
+ $this->cache_location = (string) $location;
+ }
+
+ /**
+ * Determines whether feed items should be sorted into reverse chronological order.
+ *
+ * @access public
+ * @param bool $enable Sort as reverse chronological order.
+ */
+ function enable_order_by_date($enable = true)
+ {
+ $this->order_by_date = (bool) $enable;
+ }
+
+ /**
+ * Allows you to override the character encoding reported by the feed.
+ *
+ * @access public
+ * @param string $encoding Character encoding.
+ */
+ function set_input_encoding($encoding = false)
+ {
+ if ($encoding)
+ {
+ $this->input_encoding = (string) $encoding;
+ }
+ else
+ {
+ $this->input_encoding = false;
+ }
+ }
+
+ /**
+ * Set how much feed autodiscovery to do
+ *
+ * @access public
+ * @see SIMPLEPIE_LOCATOR_NONE
+ * @see SIMPLEPIE_LOCATOR_AUTODISCOVERY
+ * @see SIMPLEPIE_LOCATOR_LOCAL_EXTENSION
+ * @see SIMPLEPIE_LOCATOR_LOCAL_BODY
+ * @see SIMPLEPIE_LOCATOR_REMOTE_EXTENSION
+ * @see SIMPLEPIE_LOCATOR_REMOTE_BODY
+ * @see SIMPLEPIE_LOCATOR_ALL
+ * @param int $level Feed Autodiscovery Level (level can be a
+ * combination of the above constants, see bitwise OR operator)
+ */
+ function set_autodiscovery_level($level = SIMPLEPIE_LOCATOR_ALL)
+ {
+ $this->autodiscovery = (int) $level;
+ }
+
+ /**
+ * Allows you to change which class SimplePie uses for caching.
+ * Useful when you are overloading or extending SimplePie's default classes.
+ *
+ * @access public
+ * @param string $class Name of custom class.
+ * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
+ * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+ */
+ function set_cache_class($class = 'SimplePie_Cache')
+ {
+ if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Cache'))
+ {
+ $this->cache_class = $class;
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Allows you to change which class SimplePie uses for auto-discovery.
+ * Useful when you are overloading or extending SimplePie's default classes.
+ *
+ * @access public
+ * @param string $class Name of custom class.
+ * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
+ * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+ */
+ function set_locator_class($class = 'SimplePie_Locator')
+ {
+ if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Locator'))
+ {
+ $this->locator_class = $class;
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Allows you to change which class SimplePie uses for XML parsing.
+ * Useful when you are overloading or extending SimplePie's default classes.
+ *
+ * @access public
+ * @param string $class Name of custom class.
+ * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
+ * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+ */
+ function set_parser_class($class = 'SimplePie_Parser')
+ {
+ if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Parser'))
+ {
+ $this->parser_class = $class;
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Allows you to change which class SimplePie uses for remote file fetching.
+ * Useful when you are overloading or extending SimplePie's default classes.
+ *
+ * @access public
+ * @param string $class Name of custom class.
+ * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
+ * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+ */
+ function set_file_class($class = 'SimplePie_File')
+ {
+ if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_File'))
+ {
+ $this->file_class = $class;
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Allows you to change which class SimplePie uses for data sanitization.
+ * Useful when you are overloading or extending SimplePie's default classes.
+ *
+ * @access public
+ * @param string $class Name of custom class.
+ * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
+ * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+ */
+ function set_sanitize_class($class = 'SimplePie_Sanitize')
+ {
+ if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Sanitize'))
+ {
+ $this->sanitize =& new $class;
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Allows you to change which class SimplePie uses for handling feed items.
+ * Useful when you are overloading or extending SimplePie's default classes.
+ *
+ * @access public
+ * @param string $class Name of custom class.
+ * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
+ * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+ */
+ function set_item_class($class = 'SimplePie_Item')
+ {
+ if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Item'))
+ {
+ $this->item_class = $class;
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Allows you to change which class SimplePie uses for handling author data.
+ * Useful when you are overloading or extending SimplePie's default classes.
+ *
+ * @access public
+ * @param string $class Name of custom class.
+ * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
+ * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+ */
+ function set_author_class($class = 'SimplePie_Author')
+ {
+ if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Author'))
+ {
+ $this->author_class = $class;
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Allows you to change which class SimplePie uses for handling category data.
+ * Useful when you are overloading or extending SimplePie's default classes.
+ *
+ * @access public
+ * @param string $class Name of custom class.
+ * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
+ * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+ */
+ function set_category_class($class = 'SimplePie_Category')
+ {
+ if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Category'))
+ {
+ $this->category_class = $class;
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Allows you to change which class SimplePie uses for feed enclosures.
+ * Useful when you are overloading or extending SimplePie's default classes.
+ *
+ * @access public
+ * @param string $class Name of custom class.
+ * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
+ * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+ */
+ function set_enclosure_class($class = 'SimplePie_Enclosure')
+ {
+ if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Enclosure'))
+ {
+ $this->enclosure_class = $class;
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Allows you to change which class SimplePie uses for <media:text> captions
+ * Useful when you are overloading or extending SimplePie's default classes.
+ *
+ * @access public
+ * @param string $class Name of custom class.
+ * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
+ * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+ */
+ function set_caption_class($class = 'SimplePie_Caption')
+ {
+ if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Caption'))
+ {
+ $this->caption_class = $class;
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Allows you to change which class SimplePie uses for <media:copyright>
+ * Useful when you are overloading or extending SimplePie's default classes.
+ *
+ * @access public
+ * @param string $class Name of custom class.
+ * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
+ * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+ */
+ function set_copyright_class($class = 'SimplePie_Copyright')
+ {
+ if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Copyright'))
+ {
+ $this->copyright_class = $class;
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Allows you to change which class SimplePie uses for <media:credit>
+ * Useful when you are overloading or extending SimplePie's default classes.
+ *
+ * @access public
+ * @param string $class Name of custom class.
+ * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
+ * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+ */
+ function set_credit_class($class = 'SimplePie_Credit')
+ {
+ if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Credit'))
+ {
+ $this->credit_class = $class;
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Allows you to change which class SimplePie uses for <media:rating>
+ * Useful when you are overloading or extending SimplePie's default classes.
+ *
+ * @access public
+ * @param string $class Name of custom class.
+ * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
+ * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+ */
+ function set_rating_class($class = 'SimplePie_Rating')
+ {
+ if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Rating'))
+ {
+ $this->rating_class = $class;
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Allows you to change which class SimplePie uses for <media:restriction>
+ * Useful when you are overloading or extending SimplePie's default classes.
+ *
+ * @access public
+ * @param string $class Name of custom class.
+ * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
+ * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+ */
+ function set_restriction_class($class = 'SimplePie_Restriction')
+ {
+ if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Restriction'))
+ {
+ $this->restriction_class = $class;
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Allows you to override the default user agent string.
+ *
+ * @access public
+ * @param string $ua New user agent string.
+ */
+ function set_useragent($ua = SIMPLEPIE_USERAGENT)
+ {
+ $this->useragent = (string) $ua;
+ }
+
+ /**
+ * Set callback function to create cache filename with
+ *
+ * @access public
+ * @param mixed $function Callback function
+ */
+ function set_cache_name_function($function = 'md5')
+ {
+ if (is_callable($function))
+ {
+ $this->cache_name_function = $function;
+ }
+ }
+
+ /**
+ * Set javascript query string parameter
+ *
+ * @access public
+ * @param mixed $get Javascript query string parameter
+ */
+ function set_javascript($get = 'js')
+ {
+ if ($get)
+ {
+ $this->javascript = (string) $get;
+ }
+ else
+ {
+ $this->javascript = false;
+ }
+ }
+
+ /**
+ * Set options to make SP as fast as possible. Forgoes a
+ * substantial amount of data sanitization in favor of speed.
+ *
+ * @access public
+ * @param bool $set Whether to set them or not
+ */
+ function set_stupidly_fast($set = false)
+ {
+ if ($set)
+ {
+ $this->enable_order_by_date(false);
+ $this->remove_div(false);
+ $this->strip_comments(false);
+ $this->strip_htmltags(false);
+ $this->strip_attributes(false);
+ $this->set_image_handler(false);
+ }
+ }
+
+ /**
+ * Set maximum number of feeds to check with autodiscovery
+ *
+ * @access public
+ * @param int $max Maximum number of feeds to check
+ */
+ function set_max_checked_feeds($max = 10)
+ {
+ $this->max_checked_feeds = (int) $max;
+ }
+
+ function remove_div($enable = true)
+ {
+ $this->sanitize->remove_div($enable);
+ }
+
+ function strip_htmltags($tags = '', $encode = null)
+ {
+ if ($tags === '')
+ {
+ $tags = $this->strip_htmltags;
+ }
+ $this->sanitize->strip_htmltags($tags);
+ if ($encode !== null)
+ {
+ $this->sanitize->encode_instead_of_strip($tags);
+ }
+ }
+
+ function encode_instead_of_strip($enable = true)
+ {
+ $this->sanitize->encode_instead_of_strip($enable);
+ }
+
+ function strip_attributes($attribs = '')
+ {
+ if ($attribs === '')
+ {
+ $attribs = $this->strip_attributes;
+ }
+ $this->sanitize->strip_attributes($attribs);
+ }
+
+ function set_output_encoding($encoding = 'UTF-8')
+ {
+ $this->sanitize->set_output_encoding($encoding);
+ }
+
+ function strip_comments($strip = false)
+ {
+ $this->sanitize->strip_comments($strip);
+ }
+
+ /**
+ * Set element/attribute key/value pairs of HTML attributes
+ * containing URLs that need to be resolved relative to the feed
+ *
+ * @access public
+ * @since 1.0
+ * @param array $element_attribute Element/attribute key/value pairs
+ */
+ function set_url_replacements($element_attribute = array('a' => 'href', 'area' => 'href', 'blockquote' => 'cite', 'del' => 'cite', 'form' => 'action', 'img' => array('longdesc', 'src'), 'input' => 'src', 'ins' => 'cite', 'q' => 'cite'))
+ {
+ $this->sanitize->set_url_replacements($element_attribute);
+ }
+
+ /**
+ * Set the handler to enable the display of cached favicons.
+ *
+ * @access public
+ * @param str $page Web-accessible path to the handler_favicon.php file.
+ * @param str $qs The query string that the value should be passed to.
+ */
+ function set_favicon_handler($page = false, $qs = 'i')
+ {
+ if ($page != false)
+ {
+ $this->favicon_handler = $page . '?' . $qs . '=';
+ }
+ else
+ {
+ $this->favicon_handler = '';
+ }
+ }
+
+ /**
+ * Set the handler to enable the display of cached images.
+ *
+ * @access public
+ * @param str $page Web-accessible path to the handler_image.php file.
+ * @param str $qs The query string that the value should be passed to.
+ */
+ function set_image_handler($page = false, $qs = 'i')
+ {
+ if ($page != false)
+ {
+ $this->sanitize->set_image_handler($page . '?' . $qs . '=');
+ }
+ else
+ {
+ $this->image_handler = '';
+ }
+ }
+
+ function init()
+ {
+ if ((function_exists('version_compare') && version_compare(PHP_VERSION, '4.1.0', '<')) || !extension_loaded('xml') || !extension_loaded('pcre'))
+ {
+ return false;
+ }
+ if (isset($_GET[$this->javascript]))
+ {
+ if (function_exists('ob_gzhandler'))
+ {
+ ob_start('ob_gzhandler');
+ }
+ header('Content-type: text/javascript; charset: UTF-8');
+ header('Cache-Control: must-revalidate');
+ header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 604800) . ' GMT'); // 7 days
+ ?>
+function embed_odeo(link) {
+ document.writeln('<embed src="http://odeo.com/flash/audio_player_fullsize.swf" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" quality="high" width="440" height="80" wmode="transparent" allowScriptAccess="any" flashvars="valid_sample_rate=true&external_url='+link+'"></embed>');
+}
+
+function embed_quicktime(type, bgcolor, width, height, link, placeholder, loop) {
+ if (placeholder != '') {
+ document.writeln('<embed type="'+type+'" style="cursor:hand; cursor:pointer;" href="'+link+'" src="'+placeholder+'" width="'+width+'" height="'+height+'" autoplay="false" target="myself" controller="false" loop="'+loop+'" scale="aspect" bgcolor="'+bgcolor+'" pluginspage="http://www.apple.com/quicktime/download/"></embed>');
+ }
+ else {
+ document.writeln('<embed type="'+type+'" style="cursor:hand; cursor:pointer;" src="'+link+'" width="'+width+'" height="'+height+'" autoplay="false" target="myself" controller="true" loop="'+loop+'" scale="aspect" bgcolor="'+bgcolor+'" pluginspage="http://www.apple.com/quicktime/download/"></embed>');
+ }
+}
+
+function embed_flash(bgcolor, width, height, link, loop, type) {
+ document.writeln('<embed src="'+link+'" pluginspage="http://www.macromedia.com/go/getflashplayer" type="'+type+'" quality="high" width="'+width+'" height="'+height+'" bgcolor="'+bgcolor+'" loop="'+loop+'"></embed>');
+}
+
+function embed_flv(width, height, link, placeholder, loop, player) {
+ document.writeln('<embed src="'+player+'" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" quality="high" width="'+width+'" height="'+height+'" wmode="transparent" flashvars="file='+link+'&autostart=false&repeat='+loop+'&showdigits=true&showfsbutton=false"></embed>');
+}
+
+function embed_wmedia(width, height, link) {
+ document.writeln('<embed type="application/x-mplayer2" src="'+link+'" autosize="1" width="'+width+'" height="'+height+'" showcontrols="1" showstatusbar="0" showdisplay="0" autostart="0"></embed>');
+}
+ <?php
+ exit;
+ }
+
+ // Pass whatever was set with config options over to the sanitizer.
+ $this->sanitize->pass_cache_data($this->cache, $this->cache_location, $this->cache_name_function, $this->cache_class);
+ $this->sanitize->pass_file_data($this->file_class, $this->timeout, $this->useragent, $this->force_fsockopen);
+
+ if ($this->feed_url !== null || $this->raw_data !== null)
+ {
+ $this->data = array();
+ $this->multifeed_objects = array();
+ $cache = false;
+
+ if ($this->feed_url !== null)
+ {
+ $parsed_feed_url = SimplePie_Misc::parse_url($this->feed_url);
+ // Decide whether to enable caching
+ if ($this->cache && $parsed_feed_url['scheme'] !== '')
+ {
+ $cache =& new $this->cache_class($this->cache_location, call_user_func($this->cache_name_function, $this->feed_url), 'spc');
+ }
+ // If it's enabled and we don't want an XML dump, use the cache
+ if ($cache && !$this->xml_dump)
+ {
+ // Load the Cache
+ $this->data = $cache->load();
+ if (!empty($this->data))
+ {
+ // If the cache is for an outdated build of SimplePie
+ if (!isset($this->data['build']) || $this->data['build'] != SIMPLEPIE_BUILD)
+ {
+ $cache->unlink();
+ $this->data = array();
+ }
+ // If we've hit a collision just rerun it with caching disabled
+ elseif (isset($this->data['url']) && $this->data['url'] != $this->feed_url)
+ {
+ $cache = false;
+ $this->data = array();
+ }
+ // If we've got a non feed_url stored (if the page isn't actually a feed, or is a redirect) use that URL.
+ elseif (isset($this->data['feed_url']))
+ {
+ // If the autodiscovery cache is still valid use it.
+ if ($cache->mtime() + $this->autodiscovery_cache_duration > time())
+ {
+ // Do not need to do feed autodiscovery yet.
+ if ($this->data['feed_url'] == $this->data['url'])
+ {
+ $cache->unlink();
+ $this->data = array();
+ }
+ else
+ {
+ $this->set_feed_url($this->data['feed_url']);
+ return $this->init();
+ }
+ }
+ }
+ // Check if the cache has been updated
+ elseif ($cache->mtime() + $this->cache_duration < time())
+ {
+ // If we have last-modified and/or etag set
+ if (isset($this->data['headers']['last-modified']) || isset($this->data['headers']['etag']))
+ {
+ $headers = array();
+ if (isset($this->data['headers']['last-modified']))
+ {
+ $headers['if-modified-since'] = $this->data['headers']['last-modified'];
+ }
+ if (isset($this->data['headers']['etag']))
+ {
+ $headers['if-none-match'] = $this->data['headers']['etag'];
+ }
+ $file =& new $this->file_class($this->feed_url, $this->timeout/10, 5, $headers, $this->useragent, $this->force_fsockopen);
+ if ($file->success)
+ {
+ if ($file->status_code == 304)
+ {
+ $cache->touch();
+ return true;
+ }
+ else
+ {
+ $headers = $file->headers;
+ }
+ }
+ else
+ {
+ unset($file);
+ }
+ }
+ }
+ // If the cache is still valid, just return true
+ else
+ {
+ return true;
+ }
+ }
+ // If the cache is empty, delete it
+ else
+ {
+ $cache->unlink();
+ $this->data = array();
+ }
+ }
+ // If we don't already have the file (it'll only exist if we've opened it to check if the cache has been modified), open it.
+ if (!isset($file))
+ {
+ if (SimplePie_Misc::is_a($this->file, 'SimplePie_File') && $this->file->url == $this->feed_url)
+ {
+ $file =& $this->file;
+ }
+ else
+ {
+ $file =& new $this->file_class($this->feed_url, $this->timeout, 5, null, $this->useragent, $this->force_fsockopen);
+ }
+ }
+ // If the file connection has an error, set SimplePie::error to that and quit
+ if (!$file->success)
+ {
+ $this->error = $file->error;
+ if (!empty($this->data))
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ // Check if the supplied URL is a feed, if it isn't, look for it.
+ $locate =& new $this->locator_class($file, $this->timeout, $this->useragent, $this->file_class, $this->max_checked_feeds);
+ if (!$locate->is_feed($file))
+ {
+ // We need to unset this so that if SimplePie::set_file() has been called that object is untouched
+ unset($file);
+ if ($file = $locate->find($this->autodiscovery))
+ {
+ if ($cache)
+ {
+ if (!$cache->save(array('url' => $this->feed_url, 'feed_url' => $file->url, 'build' => SIMPLEPIE_BUILD)))
+ {
+ trigger_error("$cache->name is not writeable", E_USER_WARNING);
+ }
+ $cache =& new $this->cache_class($this->cache_location, call_user_func($this->cache_name_function, $file->url), 'spc');
+ }
+ $this->feed_url = $file->url;
+ }
+ else
+ {
+ $this->error = "A feed could not be found at $this->feed_url";
+ SimplePie_Misc::error($this->error, E_USER_NOTICE, __FILE__, __LINE__);
+ return false;
+ }
+ }
+ $locate = null;
+
+ $headers = $file->headers;
+ $data = trim($file->body);
+ unset($file);
+ }
+ else
+ {
+ $data = $this->raw_data;
+ }
+
+ // First check to see if input has been overridden.
+ if ($this->input_encoding !== false)
+ {
+ $encoding = $this->input_encoding;
+ }
+ // Second try HTTP headers
+ elseif (isset($headers['content-type']) && preg_match('/;[\x09\x20]*charset=([^;]*)/i', $headers['content-type'], $charset))
+ {
+ $encoding = $charset[1];
+ }
+ // Then prolog, if at the very start of the document
+ elseif (preg_match("/^<\?xml[\x20\x9\xD\xA]+version([\x20\x9\xD\xA]+)?=([\x20\x9\xD\xA]+)?(\"1.0\"|'1.0'|\"1.1\"|'1.1')[\x20\x9\xD\xA]+encoding([\x20\x9\xD\xA]+)?=([\x20\x9\xD\xA]+)?(\"[A-Za-z][A-Za-z0-9._\-]*\"|'[A-Za-z][A-Za-z0-9._\-]*')([\x20\x9\xD\xA]+standalone([\x20\x9\xD\xA]+)?=([\x20\x9\xD\xA]+)?(\"(yes|no)\"|'(yes|no)'))?([\x20\x9\xD\xA]+)?\?>/", $data, $prolog))
+ {
+ $encoding = substr($prolog[6], 1, -1);
+ }
+ // UTF-32 Big Endian BOM
+ elseif (strpos($data, "\x0\x0\xFE\xFF") === 0)
+ {
+ $encoding = 'UTF-32be';
+ }
+ // UTF-32 Little Endian BOM
+ elseif (strpos($data, "\xFF\xFE\x0\x0") === 0)
+ {
+ $encoding = 'UTF-32';
+ }
+ // UTF-16 Big Endian BOM
+ elseif (strpos($data, "\xFE\xFF") === 0)
+ {
+ $encoding = 'UTF-16be';
+ }
+ // UTF-16 Little Endian BOM
+ elseif (strpos($data, "\xFF\xFE") === 0)
+ {
+ $encoding = 'UTF-16le';
+ }
+ // UTF-8 BOM
+ elseif (strpos($data, "\xEF\xBB\xBF") === 0)
+ {
+ $encoding = 'UTF-8';
+ }
+ // Fallback to the default (US-ASCII for text/xml, ISO-8859-1 for text/* MIME types, UTF-8 otherwise)
+ elseif (isset($headers['content-type']) && strtolower(SimplePie_Misc::parse_mime($headers['content-type'])) == 'text/xml')
+ {
+ $encoding = 'US-ASCII';
+ }
+ elseif (isset($headers['content-type']) && SimplePie_Misc::stripos(SimplePie_Misc::parse_mime($headers['content-type']), 'text/') === 0)
+ {
+ $encoding = 'ISO-8859-1';
+ }
+ else
+ {
+ $encoding = 'UTF-8';
+ }
+
+ // Change the encoding to UTF-8 (as we always use UTF-8 internally)
+ if ($encoding != 'UTF-8')
+ {
+ $data = SimplePie_Misc::change_encoding($data, $encoding, 'UTF-8');
+ }
+
+ // Strip illegal characters
+ $data = SimplePie_Misc::utf8_bad_replace($data);
+
+ $parser =& new $this->parser_class();
+ $parser->pre_process($data, 'UTF-8');
+ // If we want the XML, just output that and quit
+ if ($this->xml_dump)
+ {
+ header('Content-type: text/xml; charset=UTF-8');
+ echo $data;
+ exit;
+ }
+ // If it's parsed fine
+ elseif ($parser->parse($data))
+ {
+ unset($data);
+ $this->data = $parser->get_data();
+ if (isset($this->data['child']))
+ {
+ if (isset($headers))
+ {
+ $this->data['headers'] = $headers;
+ }
+ $this->data['build'] = SIMPLEPIE_BUILD;
+
+ // Cache the file if caching is enabled
+ if ($cache && !$cache->save($this->data))
+ {
+ trigger_error("$cache->name is not writeable", E_USER_WARNING);
+ }
+ return true;
+ }
+ else
+ {
+ $this->error = "A feed could not be found at $this->feed_url";
+ SimplePie_Misc::error($this->error, E_USER_NOTICE, __FILE__, __LINE__);
+ return false;
+ }
+ }
+ // If we have an error, just set SimplePie::error to it and quit
+ else
+ {
+ $this->error = sprintf('XML error: %s at line %d, column %d', $parser->get_error_string(), $parser->get_current_line(), $parser->get_current_column());
+ SimplePie_Misc::error($this->error, E_USER_NOTICE, __FILE__, __LINE__);
+ return false;
+ }
+ }
+ elseif (!empty($this->multifeed_url))
+ {
+ $i = 0;
+ $success = 0;
+ $this->multifeed_objects = array();
+ foreach ($this->multifeed_url as $url)
+ {
+ if (SIMPLEPIE_PHP5)
+ {
+ // This keyword needs to defy coding standards for PHP4 compatibility
+ $this->multifeed_objects[$i] = clone($this);
+ }
+ else
+ {
+ $this->multifeed_objects[$i] = $this;
+ }
+ $this->multifeed_objects[$i]->set_feed_url($url);
+ $success |= $this->multifeed_objects[$i]->init();
+ $i++;
+ }
+ return (bool) $success;
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ /**
+ * Return the error message for the occured error
+ *
+ * @access public
+ * @return string Error message
+ */
+ function error()
+ {
+ return $this->error;
+ }
+
+ function get_encoding()
+ {
+ return $this->sanitize->output_encoding;
+ }
+
+ function handle_content_type($mime = 'text/html')
+ {
+ if (!headers_sent())
+ {
+ $header = "Content-type: $mime;";
+ if ($this->get_encoding())
+ {
+ $header .= ' charset=' . $this->get_encoding();
+ }
+ else
+ {
+ $header .= ' charset=UTF-8';
+ }
+ header($header);
+ }
+ }
+
+ function get_type()
+ {
+ if (!isset($this->data['type']))
+ {
+ $this->data['type'] = SIMPLEPIE_TYPE_ALL;
+ if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed']))
+ {
+ $this->data['type'] &= SIMPLEPIE_TYPE_ATOM_10;
+ }
+ elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed']))
+ {
+ $this->data['type'] &= SIMPLEPIE_TYPE_ATOM_03;
+ }
+ elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF']))
+ {
+ if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_10]['channel'])
+ || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_10]['image'])
+ || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_10]['item'])
+ || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_10]['textinput']))
+ {
+ $this->data['type'] &= SIMPLEPIE_TYPE_RSS_10;
+ }
+ if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_090]['channel'])
+ || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_090]['image'])
+ || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_090]['item'])
+ || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_090]['textinput']))
+ {
+ $this->data['type'] &= SIMPLEPIE_TYPE_RSS_090;
+ }
+ }
+ elseif (isset($this->data['child']['']['rss']))
+ {
+ $this->data['type'] &= SIMPLEPIE_TYPE_RSS_ALL;
+ if (isset($this->data['child']['']['rss'][0]['attribs']['']['version']))
+ {
+ switch (trim($this->data['child']['']['rss'][0]['attribs']['']['version']))
+ {
+ case '0.91':
+ $this->data['type'] &= SIMPLEPIE_TYPE_RSS_091;
+ if (isset($this->data['child']['']['rss'][0]['child']['']['skiphours']['hour'][0]['data']))
+ {
+ switch (trim($this->data['child']['']['rss'][0]['child']['']['skiphours']['hour'][0]['data']))
+ {
+ case '0':
+ $this->data['type'] &= SIMPLEPIE_TYPE_RSS_091_NETSCAPE;
+ break;
+
+ case '24':
+ $this->data['type'] &= SIMPLEPIE_TYPE_RSS_091_USERLAND;
+ break;
+ }
+ }
+ break;
+
+ case '0.92':
+ $this->data['type'] &= SIMPLEPIE_TYPE_RSS_092;
+ break;
+
+ case '0.93':
+ $this->data['type'] &= SIMPLEPIE_TYPE_RSS_093;
+ break;
+
+ case '0.94':
+ $this->data['type'] &= SIMPLEPIE_TYPE_RSS_094;
+ break;
+
+ case '2.0':
+ $this->data['type'] &= SIMPLEPIE_TYPE_RSS_20;
+ break;
+ }
+ }
+ }
+ else
+ {
+ $this->data['type'] = SIMPLEPIE_TYPE_NONE;
+ }
+ }
+ return $this->data['type'];
+ }
+
+ /**
+ * Returns the URL for the favicon of the feed's website.
+ *
+ * @access public
+ * @since 1.0
+ */
+ function get_favicon()
+ {
+ if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'icon'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0]));
+ }
+ elseif (($url = $this->get_link()) !== null && preg_match('/^http(s)?:\/\//i', $url))
+ {
+ $favicon = SimplePie_Misc::absolutize_url('/favicon.ico', $url);
+
+ if ($this->cache && $this->favicon_handler)
+ {
+ $cache =& new $this->cache_class($this->cache_location, call_user_func($this->cache_name_function, $favicon), 'spi');
+
+ if ($cache->load())
+ {
+ return $this->sanitize($this->favicon_handler . rawurlencode($favicon), SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ else
+ {
+ $file =& new $this->file_class($favicon, $this->timeout / 10, 5, array('X-FORWARDED-FOR' => $_SERVER['REMOTE_ADDR']), $this->useragent, $this->force_fsockopen);
+
+ if ($file->success && ($file->status_code == 200 || ($file->status_code > 206 && $file->status_code < 300)) && strlen($file->body) > 0)
+ {
+ if ($cache->save(array('headers' => $file->headers, 'body' => $file->body)))
+ {
+ return $this->sanitize($this->favicon_handler . rawurlencode($favicon), SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ else
+ {
+ trigger_error("$cache->name is not writeable", E_USER_WARNING);
+ return $this->sanitize($favicon, SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ }
+ }
+ }
+ else
+ {
+ return $this->sanitize($favicon, SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ }
+ return false;
+ }
+
+ /**
+ * @todo If we have a perm redirect we should return the new URL
+ * @todo When we make the above change, let's support <itunes:new-feed-url> as well
+ * @todo Also, |atom:link|@rel=self
+ */
+ function subscribe_url()
+ {
+ if ($this->feed_url !== null)
+ {
+ return $this->sanitize($this->feed_url, SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function subscribe_feed()
+ {
+ if ($this->feed_url !== null)
+ {
+ return $this->sanitize(SimplePie_Misc::fix_protocol($this->feed_url, 2), SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function subscribe_outlook()
+ {
+ if ($this->feed_url !== null)
+ {
+ return 'outlook' . $this->sanitize(SimplePie_Misc::fix_protocol($this->feed_url, 2), SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function subscribe_podcast()
+ {
+ if ($this->feed_url !== null)
+ {
+ return $this->sanitize(SimplePie_Misc::fix_protocol($this->feed_url, 3), SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function subscribe_itunes()
+ {
+ if ($this->feed_url !== null)
+ {
+ return $this->sanitize(SimplePie_Misc::fix_protocol($this->feed_url, 4), SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ /**
+ * Creates the subscribe_* methods' return data
+ *
+ * @access private
+ * @param string $feed_url String to prefix to the feed URL
+ * @param string $site_url String to prefix to the site URL (and
+ * suffix to the feed URL)
+ * @return mixed URL if feed exists, false otherwise
+ */
+ function subscribe_service($feed_url, $site_url = null)
+ {
+ if ($this->subscribe_url())
+ {
+ $return = $this->sanitize($feed_url, SIMPLEPIE_CONSTRUCT_IRI) . rawurlencode($this->subscribe_url());
+ if ($site_url !== null && $this->get_link() !== null)
+ {
+ $return .= $this->sanitize($site_url, SIMPLEPIE_CONSTRUCT_IRI) . rawurlencode($this->get_link());
+ }
+ return $return;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function subscribe_aol()
+ {
+ return $this->subscribe_service('http://feeds.my.aol.com/add.jsp?url=');
+ }
+
+ function subscribe_bloglines()
+ {
+ return urldecode($this->subscribe_service('http://www.bloglines.com/sub/'));
+ }
+
+ function subscribe_eskobo()
+ {
+ return $this->subscribe_service('http://www.eskobo.com/?AddToMyPage=');
+ }
+
+ function subscribe_feedfeeds()
+ {
+ return $this->subscribe_service('http://www.feedfeeds.com/add?feed=');
+ }
+
+ function subscribe_feedster()
+ {
+ return $this->subscribe_service('http://www.feedster.com/myfeedster.php?action=addrss&confirm=no&rssurl=');
+ }
+
+ function subscribe_google()
+ {
+ return $this->subscribe_service('http://fusion.google.com/add?feedurl=');
+ }
+
+ function subscribe_gritwire()
+ {
+ return $this->subscribe_service('http://my.gritwire.com/feeds/addExternalFeed.aspx?FeedUrl=');
+ }
+
+ function subscribe_msn()
+ {
+ return $this->subscribe_service('http://my.msn.com/addtomymsn.armx?id=rss&ut=', '&ru=');
+ }
+
+ function subscribe_netvibes()
+ {
+ return $this->subscribe_service('http://www.netvibes.com/subscribe.php?url=');
+ }
+
+ function subscribe_newsburst()
+ {
+ return $this->subscribe_service('http://www.newsburst.com/Source/?add=');
+ }
+
+ function subscribe_newsgator()
+ {
+ return $this->subscribe_service('http://www.newsgator.com/ngs/subscriber/subext.aspx?url=');
+ }
+
+ function subscribe_odeo()
+ {
+ return $this->subscribe_service('http://www.odeo.com/listen/subscribe?feed=');
+ }
+
+ function subscribe_podnova()
+ {
+ return $this->subscribe_service('http://www.podnova.com/index_your_podcasts.srf?action=add&url=');
+ }
+
+ function subscribe_rojo()
+ {
+ return $this->subscribe_service('http://www.rojo.com/add-subscription?resource=');
+ }
+
+ function subscribe_yahoo()
+ {
+ return $this->subscribe_service('http://add.my.yahoo.com/rss?url=');
+ }
+
+ function get_feed_tags($namespace, $tag)
+ {
+ $type = $this->get_type();
+ if ($type & SIMPLEPIE_TYPE_ATOM_10)
+ {
+ if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0]['child'][$namespace][$tag]))
+ {
+ return $this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0]['child'][$namespace][$tag];
+ }
+ }
+ if ($type & SIMPLEPIE_TYPE_ATOM_03)
+ {
+ if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0]['child'][$namespace][$tag]))
+ {
+ return $this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0]['child'][$namespace][$tag];
+ }
+ }
+ if ($type & SIMPLEPIE_TYPE_RSS_RDF)
+ {
+ if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][$namespace][$tag]))
+ {
+ return $this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][$namespace][$tag];
+ }
+ }
+ if ($type & SIMPLEPIE_TYPE_RSS_SYNDICATION)
+ {
+ if (isset($this->data['child']['']['rss'][0]['child'][$namespace][$tag]))
+ {
+ return $this->data['child']['']['rss'][0]['child'][$namespace][$tag];
+ }
+ }
+ return null;
+ }
+
+ function get_channel_tags($namespace, $tag)
+ {
+ $type = $this->get_type();
+ if ($type & SIMPLEPIE_TYPE_ATOM_ALL)
+ {
+ if ($return = $this->get_feed_tags($namespace, $tag))
+ {
+ return $return;
+ }
+ }
+ if ($type & SIMPLEPIE_TYPE_RSS_10)
+ {
+ if ($channel = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'channel'))
+ {
+ if (isset($channel[0]['child'][$namespace][$tag]))
+ {
+ return $channel[0]['child'][$namespace][$tag];
+ }
+ }
+ }
+ if ($type & SIMPLEPIE_TYPE_RSS_090)
+ {
+ if ($channel = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'channel'))
+ {
+ if (isset($channel[0]['child'][$namespace][$tag]))
+ {
+ return $channel[0]['child'][$namespace][$tag];
+ }
+ }
+ }
+ if ($type & SIMPLEPIE_TYPE_RSS_SYNDICATION)
+ {
+ if ($channel = $this->get_feed_tags('', 'channel'))
+ {
+ if (isset($channel[0]['child'][$namespace][$tag]))
+ {
+ return $channel[0]['child'][$namespace][$tag];
+ }
+ }
+ }
+ return null;
+ }
+
+ function get_image_tags($namespace, $tag)
+ {
+ $type = $this->get_type();
+ if ($type & SIMPLEPIE_TYPE_RSS_10)
+ {
+ if ($image = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'image'))
+ {
+ if (isset($image[0]['child'][$namespace][$tag]))
+ {
+ return $image[0]['child'][$namespace][$tag];
+ }
+ }
+ }
+ if ($type & SIMPLEPIE_TYPE_RSS_090)
+ {
+ if ($image = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'image'))
+ {
+ if (isset($image[0]['child'][$namespace][$tag]))
+ {
+ return $image[0]['child'][$namespace][$tag];
+ }
+ }
+ }
+ if ($type & SIMPLEPIE_TYPE_RSS_SYNDICATION)
+ {
+ if ($image = $this->get_channel_tags('', 'image'))
+ {
+ if (isset($image[0]['child'][$namespace][$tag]))
+ {
+ return $image[0]['child'][$namespace][$tag];
+ }
+ }
+ }
+ return null;
+ }
+
+ function get_base($element = array())
+ {
+ if (!($this->get_type() & SIMPLEPIE_TYPE_RSS_SYNDICATION) && !empty($element['xml_base_explicit']) && isset($element['xml_base']))
+ {
+ return $element['xml_base'];
+ }
+ elseif ($this->get_link() !== null)
+ {
+ return $this->get_link();
+ }
+ elseif (isset($this->data['headers']['content-location']))
+ {
+ return SimplePie_Misc::absolutize_url($this->data['headers']['content-location'], $this->subscribe_url());
+ }
+ else
+ {
+ return $this->subscribe_url();
+ }
+ }
+
+ function sanitize($data, $type, $base = '')
+ {
+ return $this->sanitize->sanitize($data, $type, $base);
+ }
+
+ function get_title()
+ {
+ if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'title'))
+ {
+ return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'title'))
+ {
+ return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'title'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'title'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_channel_tags('', 'title'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'title'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_10, 'title'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_link($key = 0, $rel = 'alternate')
+ {
+ $links = $this->get_links($rel);
+ if (isset($links[$key]))
+ {
+ return $links[$key];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ /**
+ * Added for parity between the parent-level and the item/entry-level.
+ */
+ function get_permalink()
+ {
+ return $this->get_link(0);
+ }
+
+ function get_links($rel = 'alternate')
+ {
+ if (!isset($this->data['links']))
+ {
+ $this->data['links'] = array();
+ if ($links = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'link'))
+ {
+ foreach ($links as $link)
+ {
+ if (isset($link['attribs']['']['href']))
+ {
+ $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate';
+ $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link));
+ }
+ }
+ }
+ if ($links = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'link'))
+ {
+ foreach ($links as $link)
+ {
+ if (isset($link['attribs']['']['href']))
+ {
+ $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate';
+ $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link));
+
+ }
+ }
+ }
+ if ($links = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'link'))
+ {
+ $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
+ }
+ if ($links = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'link'))
+ {
+ $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
+ }
+ if ($links = $this->get_channel_tags('', 'link'))
+ {
+ $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
+ }
+
+ $keys = array_keys($this->data['links']);
+ foreach ($keys as $key)
+ {
+ if (SimplePie_Misc::is_isegment_nz_nc($key))
+ {
+ if (isset($this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]))
+ {
+ $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] = array_merge($this->data['links'][$key], $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]);
+ $this->data['links'][$key] =& $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key];
+ }
+ else
+ {
+ $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] =& $this->data['links'][$key];
+ }
+ }
+ elseif (substr($key, 0, 41) == SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY)
+ {
+ $this->data['links'][substr($key, 41)] =& $this->data['links'][$key];
+ }
+ $this->data['links'][$key] = array_unique($this->data['links'][$key]);
+ }
+ }
+
+ if (isset($this->data['links'][$rel]))
+ {
+ return $this->data['links'][$rel];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_description()
+ {
+ if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'subtitle'))
+ {
+ return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'tagline'))
+ {
+ return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'description'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'description'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_channel_tags('', 'description'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'description'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_10, 'description'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'summary'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'subtitle'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0]));
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_copyright()
+ {
+ if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'rights'))
+ {
+ return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_channel_tags('', 'copyright'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'rights'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_10, 'rights'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_language()
+ {
+ if ($return = $this->get_channel_tags('', 'language'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'language'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_10, 'language'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0]['xml_lang']))
+ {
+ return $this->sanitize($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0]['xml_lang'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0]['xml_lang']))
+ {
+ return $this->sanitize($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0]['xml_lang'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['xml_lang']))
+ {
+ return $this->sanitize($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['xml_lang'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif (isset($this->data['headers']['content-language']))
+ {
+ return $this->sanitize($this->data['headers']['content-language'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_latitude()
+ {
+ if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lat'))
+ {
+ return (float) $return[0]['data'];
+ }
+ elseif (($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', $return[0]['data'], $match))
+ {
+ return (float) $match[1];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_longitude()
+ {
+ if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'long'))
+ {
+ return (float) $return[0]['data'];
+ }
+ elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lon'))
+ {
+ return (float) $return[0]['data'];
+ }
+ elseif (($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', $return[0]['data'], $match))
+ {
+ return (float) $match[2];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_image_title()
+ {
+ if ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'title'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'title'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_image_tags('', 'title'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_DC_11, 'title'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_DC_10, 'title'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_image_url()
+ {
+ if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'image'))
+ {
+ return $this->sanitize($return[0]['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'logo'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'icon'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'url'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'url'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_image_tags('', 'url'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0]));
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_image_link()
+ {
+ if ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'link'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'link'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_image_tags('', 'link'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0]));
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_image_width()
+ {
+ if ($return = $this->get_image_tags('', 'width'))
+ {
+ return round($return[0]['data']);
+ }
+ elseif ($this->get_type() & SIMPLEPIE_TYPE_RSS_SYNDICATION && $this->get_image_tags('', 'url'))
+ {
+ return 88.0;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_image_height()
+ {
+ if ($return = $this->get_image_tags('', 'height'))
+ {
+ return round($return[0]['data']);
+ }
+ elseif ($this->get_type() & SIMPLEPIE_TYPE_RSS_SYNDICATION && $this->get_image_tags('', 'url'))
+ {
+ return 31.0;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_item_quantity($max = 0)
+ {
+ $qty = count($this->get_items());
+ if ($max == 0)
+ {
+ return $qty;
+ }
+ else
+ {
+ return ($qty > $max) ? $max : $qty;
+ }
+ }
+
+ function get_item($key = 0)
+ {
+ $items = $this->get_items();
+ if (isset($items[$key]))
+ {
+ return $items[$key];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_items($start = 0, $end = 0)
+ {
+ if (!empty($this->multifeed_objects))
+ {
+ return SimplePie::merge_items($this->multifeed_objects, $start, $end);
+ }
+ elseif (!isset($this->data['items']))
+ {
+ if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'entry'))
+ {
+ $keys = array_keys($items);
+ foreach ($keys as $key)
+ {
+ $this->data['items'][] =& new $this->item_class($this, $items[$key]);
+ }
+ }
+ if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'entry'))
+ {
+ $keys = array_keys($items);
+ foreach ($keys as $key)
+ {
+ $this->data['items'][] =& new $this->item_class($this, $items[$key]);
+ }
+ }
+ if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'item'))
+ {
+ $keys = array_keys($items);
+ foreach ($keys as $key)
+ {
+ $this->data['items'][] =& new $this->item_class($this, $items[$key]);
+ }
+ }
+ if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'item'))
+ {
+ $keys = array_keys($items);
+ foreach ($keys as $key)
+ {
+ $this->data['items'][] =& new $this->item_class($this, $items[$key]);
+ }
+ }
+ if ($items = $this->get_channel_tags('', 'item'))
+ {
+ $keys = array_keys($items);
+ foreach ($keys as $key)
+ {
+ $this->data['items'][] =& new $this->item_class($this, $items[$key]);
+ }
+ }
+ }
+
+ if (!empty($this->data['items']))
+ {
+ // If we want to order it by date, check if all items have a date, and then sort it
+ if ($this->order_by_date)
+ {
+ if (!isset($this->data['ordered_items']))
+ {
+ $do_sort = true;
+ foreach ($this->data['items'] as $item)
+ {
+ if (!$item->get_date('U'))
+ {
+ $do_sort = false;
+ break;
+ }
+ }
+ $item = null;
+ $this->data['ordered_items'] = $this->data['items'];
+ if ($do_sort)
+ {
+ usort($this->data['ordered_items'], array(&$this, 'sort_items'));
+ }
+ }
+ $items = $this->data['ordered_items'];
+ }
+ else
+ {
+ $items = $this->data['items'];
+ }
+
+ // Slice the data as desired
+ if ($end == 0)
+ {
+ return array_slice($items, $start);
+ }
+ else
+ {
+ return array_slice($items, $start, $end);
+ }
+ }
+ else
+ {
+ return array();
+ }
+ }
+
+ function sort_items($a, $b)
+ {
+ return $a->get_date('U') <= $b->get_date('U');
+ }
+
+ function merge_items($urls, $start = 0, $end = 0)
+ {
+ if (is_array($urls) && sizeof($urls) > 0)
+ {
+ $items = array();
+ foreach ($urls as $arg)
+ {
+ if (SimplePie_Misc::is_a($arg, 'SimplePie'))
+ {
+ $items = array_merge($items, $arg->get_items());
+ }
+ else
+ {
+ trigger_error('Arguments must be SimplePie objects', E_USER_WARNING);
+ }
+ }
+
+ $do_sort = true;
+ foreach ($items as $item)
+ {
+ if (!$item->get_date('U'))
+ {
+ $do_sort = false;
+ break;
+ }
+ }
+ $item = null;
+ if ($do_sort)
+ {
+ usort($items, array('SimplePie', 'sort_items'));
+ }
+
+ if ($end == 0)
+ {
+ return array_slice($items, $start);
+ }
+ else
+ {
+ return array_slice($items, $start, $end);
+ }
+ }
+ else
+ {
+ trigger_error('Cannot merge zero SimplePie objects', E_USER_WARNING);
+ return array();
+ }
+ }
+}
+
+class SimplePie_Item
+{
+ var $feed;
+ var $data = array();
+
+ function SimplePie_Item($feed, $data)
+ {
+ $this->feed = $feed;
+ $this->data = $data;
+ }
+
+ function __toString()
+ {
+ return md5(serialize($this->data));
+ }
+
+ function get_item_tags($namespace, $tag)
+ {
+ if (isset($this->data['child'][$namespace][$tag]))
+ {
+ return $this->data['child'][$namespace][$tag];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_base($element = array())
+ {
+ return $this->feed->get_base($element);
+ }
+
+ function sanitize($data, $type, $base = '')
+ {
+ return $this->feed->sanitize($data, $type, $base);
+ }
+
+ function get_feed()
+ {
+ return $this->feed;
+ }
+
+ function get_id($hash = false)
+ {
+ if ($hash)
+ {
+ return $this->__toString();
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'id'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'id'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_item_tags('', 'guid'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'identifier'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'identifier'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif (($return = $this->get_permalink()) !== null)
+ {
+ return $return;
+ }
+ elseif (($return = $this->get_title()) !== null)
+ {
+ return $return;
+ }
+ else
+ {
+ return $this->__toString();
+ }
+ }
+
+ function get_title()
+ {
+ if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'title'))
+ {
+ return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'title'))
+ {
+ return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'title'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'title'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_item_tags('', 'title'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'title'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'title'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_description($description_only = false)
+ {
+ if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'summary'))
+ {
+ return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'summary'))
+ {
+ return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'description'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_item_tags('', 'description'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'description'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'description'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'summary'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'subtitle'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif (!$description_only)
+ {
+ return $this->get_content(true);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_content($content_only = false)
+ {
+ if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'content'))
+ {
+ return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_content_construct_type($return[0]['attribs']), $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'content'))
+ {
+ return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10_MODULES_CONTENT, 'encoded'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0]));
+ }
+ elseif (!$content_only)
+ {
+ return $this->get_description(true);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_category($key = 0)
+ {
+ $categories = $this->get_categories();
+ if (isset($categories[$key]))
+ {
+ return $categories[$key];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_categories()
+ {
+ $categories = array();
+
+ foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'category') as $category)
+ {
+ $term = null;
+ $scheme = null;
+ $label = null;
+ if (isset($category['attribs']['']['term']))
+ {
+ $term = $this->sanitize($category['attribs']['']['term'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($category['attribs']['']['scheme']))
+ {
+ $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($category['attribs']['']['label']))
+ {
+ $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $categories[] =& new $this->feed->category_class($term, $scheme, $label);
+ }
+ foreach ((array) $this->get_item_tags('', 'category') as $category)
+ {
+ $categories[] =& new $this->feed->category_class($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null);
+ }
+ foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'subject') as $category)
+ {
+ $categories[] =& new $this->feed->category_class($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null);
+ }
+ foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'subject') as $category)
+ {
+ $categories[] =& new $this->feed->category_class($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null);
+ }
+
+ if (!empty($categories))
+ {
+ return SimplePie_Misc::array_unique($categories);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_author($key = 0)
+ {
+ $authors = $this->get_authors();
+ if (isset($authors[$key]))
+ {
+ return $authors[$key];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ /**
+ * @todo Atom inheritance (item author, source author, feed author)
+ */
+ function get_authors()
+ {
+ $authors = array();
+ foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'author') as $author)
+ {
+ $name = null;
+ $uri = null;
+ $email = null;
+ if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data']))
+ {
+ $name = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data']))
+ {
+ $uri = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]));
+ }
+ if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data']))
+ {
+ $email = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if ($name !== null || $email !== null || $uri !== null)
+ {
+ $authors[] =& new $this->feed->author_class($name, $uri, $email);
+ }
+ }
+ if ($author = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'author'))
+ {
+ $name = null;
+ $url = null;
+ $email = null;
+ if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data']))
+ {
+ $name = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data']))
+ {
+ $uri = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]));
+ }
+ if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data']))
+ {
+ $email = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if ($name !== null || $email !== null || $uri !== null)
+ {
+ $authors[] =& new $this->feed->author_class($name, $url, $email);
+ }
+ }
+ if ($author = $this->get_item_tags('', 'author'))
+ {
+ $authors[] =& new $this->feed->author_class(null, null, $this->sanitize($author[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
+ }
+ foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'creator') as $author)
+ {
+ $authors[] =& new $this->feed->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null);
+ }
+ foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'creator') as $author)
+ {
+ $authors[] =& new $this->feed->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null);
+ }
+ foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'author') as $author)
+ {
+ $authors[] =& new $this->feed->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null);
+ }
+
+ if (!empty($authors))
+ {
+ return SimplePie_Misc::array_unique($authors);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_date($date_format = 'j F Y, g:i a')
+ {
+ if (!isset($this->data['date']))
+ {
+ if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'published'))
+ {
+ $this->data['date']['raw'] = $return[0]['data'];
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'updated'))
+ {
+ $this->data['date']['raw'] = $return[0]['data'];
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'issued'))
+ {
+ $this->data['date']['raw'] = $return[0]['data'];
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'created'))
+ {
+ $this->data['date']['raw'] = $return[0]['data'];
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'modified'))
+ {
+ $this->data['date']['raw'] = $return[0]['data'];
+ }
+ elseif ($return = $this->get_item_tags('', 'pubDate'))
+ {
+ $this->data['date']['raw'] = $return[0]['data'];
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'date'))
+ {
+ $this->data['date']['raw'] = $return[0]['data'];
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'date'))
+ {
+ $this->data['date']['raw'] = $return[0]['data'];
+ }
+
+ if (!empty($this->data['date']['raw']))
+ {
+ $this->data['date']['parsed'] = SimplePie_Misc::parse_date($this->data['date']['raw']);
+ }
+ else
+ {
+ $this->data['date'] = null;
+ }
+ }
+ if ($this->data['date'])
+ {
+ $date_format = (string) $date_format;
+ switch ($date_format)
+ {
+ case '':
+ return $this->sanitize($this->data['date']['raw'], SIMPLEPIE_CONSTRUCT_TEXT);
+
+ case 'U':
+ return $this->data['date']['parsed'];
+
+ default:
+ return date($date_format, $this->data['date']['parsed']);
+ }
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_local_date($date_format = '%c')
+ {
+ if (!$date_format)
+ {
+ return $this->sanitize($this->get_date(''), SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif (($date = $this->get_date('U')) !== null)
+ {
+ return strftime($date_format, $date);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_permalink()
+ {
+ $link = $this->get_link();
+ $enclosure = $this->get_enclosure(0);
+ if ($link !== null)
+ {
+ return $link;
+ }
+ elseif ($enclosure !== null)
+ {
+ return $enclosure->get_link();
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_link($key = 0, $rel = 'alternate')
+ {
+ $links = $this->get_links($rel);
+ if ($links[$key] !== null)
+ {
+ return $links[$key];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_links($rel = 'alternate')
+ {
+ if (!isset($this->data['links']))
+ {
+ $this->data['links'] = array();
+ foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'link') as $link)
+ {
+ if (isset($link['attribs']['']['href']))
+ {
+ $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate';
+ $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link));
+
+ }
+ }
+ foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'link') as $link)
+ {
+ if (isset($link['attribs']['']['href']))
+ {
+ $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate';
+ $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link));
+ }
+ }
+ if ($links = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'link'))
+ {
+ $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
+ }
+ if ($links = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'link'))
+ {
+ $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
+ }
+ if ($links = $this->get_item_tags('', 'link'))
+ {
+ $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
+ }
+ if ($links = $this->get_item_tags('', 'guid'))
+ {
+ if (!isset($links[0]['attribs']['']['isPermaLink']) || strtolower(trim($links[0]['attribs']['']['isPermaLink'])) == 'true')
+ {
+ $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
+ }
+ }
+
+ $keys = array_keys($this->data['links']);
+ foreach ($keys as $key)
+ {
+ if (SimplePie_Misc::is_isegment_nz_nc($key))
+ {
+ if (isset($this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]))
+ {
+ $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] = array_merge($this->data['links'][$key], $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]);
+ $this->data['links'][$key] =& $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key];
+ }
+ else
+ {
+ $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] =& $this->data['links'][$key];
+ }
+ }
+ elseif (substr($key, 0, 41) == SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY)
+ {
+ $this->data['links'][substr($key, 41)] =& $this->data['links'][$key];
+ }
+ $this->data['links'][$key] = array_unique($this->data['links'][$key]);
+ }
+ }
+ if (isset($this->data['links'][$rel]))
+ {
+ return $this->data['links'][$rel];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ /**
+ * @todo Add ability to prefer one type of content over another (in a media group).
+ */
+ function get_enclosure($key = 0, $prefer = null)
+ {
+ $enclosures = $this->get_enclosures();
+ if (isset($enclosures[$key]))
+ {
+ return $enclosures[$key];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ /**
+ * Grabs all available enclosures (podcasts, etc.)
+ *
+ * Supports the <enclosure> RSS tag, as well as Media RSS and iTunes RSS.
+ *
+ * At this point, we're pretty much assuming that all enclosures for an item are the same content. Anything else is too complicated to properly support.
+ *
+ * @todo Add support for end-user defined sorting of enclosures by type/handler (so we can prefer the faster-loading FLV over MP4).
+ * @todo Add support for itunes: tags. These should be relatively simple compared to media:.
+ * @todo If an element exists at a level, but it's value is empty, we should fall back to the value from the parent (if it exists).
+ */
+ function get_enclosures()
+ {
+ if (!isset($this->data['enclosures']))
+ {
+ $this->data['enclosures'] = array();
+
+ // Elements
+ $captions_parent = null;
+ $categories_parent = null;
+ $copyrights_parent = null;
+ $credits_parent = null;
+ $description_parent = null;
+ $duration_parent = null;
+ $hashes_parent = null;
+ $keywords_parent = null;
+ $player_parent = null;
+ $ratings_parent = null;
+ $restrictions_parent = null;
+ $thumbnails_parent = null;
+ $title_parent = null;
+
+ // Let's do the channel and item-level ones first, and just re-use them if we need to.
+ $parent = $this->get_feed();
+
+ // CAPTIONS
+ if ($captions = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'text'))
+ {
+ foreach ($captions as $caption)
+ {
+ $caption_type = null;
+ $caption_lang = null;
+ $caption_startTime = null;
+ $caption_endTime = null;
+ $caption_text = null;
+ if (isset($caption['attribs']['']['type']))
+ {
+ $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($caption['attribs']['']['lang']))
+ {
+ $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($caption['attribs']['']['start']))
+ {
+ $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($caption['attribs']['']['end']))
+ {
+ $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($caption['data']))
+ {
+ $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $captions_parent[] =& new $this->feed->caption_class($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text);
+ }
+ }
+ elseif ($captions = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'text'))
+ {
+ foreach ($captions as $caption)
+ {
+ $caption_type = null;
+ $caption_lang = null;
+ $caption_startTime = null;
+ $caption_endTime = null;
+ $caption_text = null;
+ if (isset($caption['attribs']['']['type']))
+ {
+ $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($caption['attribs']['']['lang']))
+ {
+ $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($caption['attribs']['']['start']))
+ {
+ $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($caption['attribs']['']['end']))
+ {
+ $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($caption['data']))
+ {
+ $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $captions_parent[] =& new $this->feed->caption_class($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text);
+ }
+ }
+ if (is_array($captions_parent))
+ {
+ $captions_parent = array_values(SimplePie_Misc::array_unique($captions_parent));
+ }
+
+ // CATEGORIES
+ foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'category') as $category)
+ {
+ $term = null;
+ $scheme = null;
+ $label = null;
+ if (isset($category['data']))
+ {
+ $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($category['attribs']['']['scheme']))
+ {
+ $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $scheme = 'http://search.yahoo.com/mrss/category_schema';
+ }
+ if (isset($category['attribs']['']['label']))
+ {
+ $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $categories_parent[] =& new $this->feed->category_class($term, $scheme, $label);
+ }
+ foreach ((array) $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'category') as $category)
+ {
+ $term = null;
+ $scheme = null;
+ $label = null;
+ if (isset($category['data']))
+ {
+ $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($category['attribs']['']['scheme']))
+ {
+ $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $scheme = 'http://search.yahoo.com/mrss/category_schema';
+ }
+ if (isset($category['attribs']['']['label']))
+ {
+ $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $categories_parent[] =& new $this->feed->category_class($term, $scheme, $label);
+ }
+ foreach ((array) $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'category') as $category)
+ {
+ $term = null;
+ $scheme = 'http://www.itunes.com/dtds/podcast-1.0.dtd';
+ $label = null;
+ if (isset($category['attribs']['']['text']))
+ {
+ $label = $this->sanitize($category['attribs']['']['text'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $categories_parent[] =& new $this->feed->category_class($term, $scheme, $label);
+
+ if (isset($category['child'][SIMPLEPIE_NAMESPACE_ITUNES]['category']))
+ {
+ foreach ((array) $category['child'][SIMPLEPIE_NAMESPACE_ITUNES]['category'] as $subcategory)
+ {
+ if (isset($subcategory['attribs']['']['text']))
+ {
+ $label = $this->sanitize($subcategory['attribs']['']['text'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $categories_parent[] =& new $this->feed->category_class($term, $scheme, $label);
+ }
+ }
+ }
+ if (is_array($categories_parent))
+ {
+ $categories_parent = array_values(SimplePie_Misc::array_unique($categories_parent));
+ }
+
+ // COPYRIGHT
+ if ($copyright = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'copyright'))
+ {
+ $copyright_url = null;
+ $copyright_label = null;
+ if (isset($copyright[0]['attribs']['']['url']))
+ {
+ $copyright_url = $this->sanitize($copyright[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($copyright[0]['data']))
+ {
+ $copyright_label = $this->sanitize($copyright[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $copyrights_parent =& new $this->feed->copyright_class($copyright_url, $copyright_label);
+ }
+ elseif ($copyright = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'copyright'))
+ {
+ $copyright_url = null;
+ $copyright_label = null;
+ if (isset($copyright[0]['attribs']['']['url']))
+ {
+ $copyright_url = $this->sanitize($copyright[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($copyright[0]['data']))
+ {
+ $copyright_label = $this->sanitize($copyright[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $copyrights_parent =& new $this->feed->copyright_class($copyright_url, $copyright_label);
+ }
+
+ // CREDITS
+ if ($credits = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'credit'))
+ {
+ foreach ($credits as $credit)
+ {
+ $credit_role = null;
+ $credit_scheme = null;
+ $credit_name = null;
+ if (isset($credit['attribs']['']['role']))
+ {
+ $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($credit['attribs']['']['scheme']))
+ {
+ $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $credit_scheme = 'urn:ebu';
+ }
+ if (isset($credit['data']))
+ {
+ $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $credits_parent[] =& new $this->feed->credit_class($credit_role, $credit_scheme, $credit_name);
+ }
+ }
+ elseif ($credits = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'credit'))
+ {
+ foreach ($credits as $credit)
+ {
+ $credit_role = null;
+ $credit_scheme = null;
+ $credit_name = null;
+ if (isset($credit['attribs']['']['role']))
+ {
+ $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($credit['attribs']['']['scheme']))
+ {
+ $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $credit_scheme = 'urn:ebu';
+ }
+ if (isset($credit['data']))
+ {
+ $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $credits_parent[] =& new $this->feed->credit_class($credit_role, $credit_scheme, $credit_name);
+ }
+ }
+ if (is_array($credits_parent))
+ {
+ $credits_parent = array_values(SimplePie_Misc::array_unique($credits_parent));
+ }
+
+ // DESCRIPTION
+ if ($description_parent = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'description'))
+ {
+ if (isset($description_parent[0]['data']))
+ {
+ $description_parent = $this->sanitize($description_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ }
+ elseif ($description_parent = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'description'))
+ {
+ if (isset($description_parent[0]['data']))
+ {
+ $description_parent = $this->sanitize($description_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ }
+
+ // DURATION
+ if ($duration_parent = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'duration'))
+ {
+ $seconds = null;
+ $minutes = null;
+ $hours = null;
+ if (isset($duration_parent[0]['data']))
+ {
+ $temp = explode(':', $this->sanitize($duration_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
+ if (sizeof($temp) > 0)
+ {
+ (int) $seconds = array_pop($temp);
+ }
+ if (sizeof($temp) > 0)
+ {
+ (int) $minutes = array_pop($temp);
+ $seconds += $minutes * 60;
+ }
+ if (sizeof($temp) > 0)
+ {
+ (int) $hours = array_pop($temp);
+ $seconds += $hours * 3600;
+ }
+ unset($temp);
+ $duration_parent = $seconds;
+ }
+ }
+
+ // HASHES
+ if ($hashes_iterator = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'hash'))
+ {
+ foreach ($hashes_iterator as $hash)
+ {
+ $value = null;
+ $algo = null;
+ if (isset($hash['data']))
+ {
+ $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($hash['attribs']['']['algo']))
+ {
+ $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $algo = 'md5';
+ }
+ $hashes_parent[] = $algo.':'.$value;
+ }
+ }
+ elseif ($hashes_iterator = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'hash'))
+ {
+ foreach ($hashes_iterator as $hash)
+ {
+ $value = null;
+ $algo = null;
+ if (isset($hash['data']))
+ {
+ $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($hash['attribs']['']['algo']))
+ {
+ $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $algo = 'md5';
+ }
+ $hashes_parent[] = $algo.':'.$value;
+ }
+ }
+ if (is_array($hashes_parent))
+ {
+ $hashes_parent = array_values(SimplePie_Misc::array_unique($hashes_parent));
+ }
+
+ // KEYWORDS
+ if ($keywords = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'keywords'))
+ {
+ if (isset($keywords[0]['data']))
+ {
+ $temp = explode(',', $this->sanitize($keywords[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
+ foreach ($temp as $word)
+ {
+ $keywords_parent[] = trim($word);
+ }
+ }
+ unset($temp);
+ }
+ elseif ($keywords = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'keywords'))
+ {
+ if (isset($keywords[0]['data']))
+ {
+ $temp = explode(',', $this->sanitize($keywords[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
+ foreach ($temp as $word)
+ {
+ $keywords_parent[] = trim($word);
+ }
+ }
+ unset($temp);
+ }
+ elseif ($keywords = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'keywords'))
+ {
+ if (isset($keywords[0]['data']))
+ {
+ $temp = explode(',', $this->sanitize($keywords[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
+ foreach ($temp as $word)
+ {
+ $keywords_parent[] = trim($word);
+ }
+ }
+ unset($temp);
+ }
+ elseif ($keywords = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'keywords'))
+ {
+ if (isset($keywords[0]['data']))
+ {
+ $temp = explode(',', $this->sanitize($keywords[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
+ foreach ($temp as $word)
+ {
+ $keywords_parent[] = trim($word);
+ }
+ }
+ unset($temp);
+ }
+ if (is_array($keywords_parent))
+ {
+ $keywords_parent = array_values(SimplePie_Misc::array_unique($keywords_parent));
+ }
+
+ // PLAYER
+ if ($player_parent = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'player'))
+ {
+ if (isset($player_parent[0]['attribs']['']['url']))
+ {
+ $player_parent = $this->sanitize($player_parent[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ }
+ elseif ($player_parent = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'player'))
+ {
+ if (isset($player_parent[0]['attribs']['']['url']))
+ {
+ $player_parent = $this->sanitize($player_parent[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ }
+
+ // RATINGS
+ if ($ratings = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'rating'))
+ {
+ foreach ($ratings as $rating)
+ {
+ $rating_scheme = null;
+ $rating_value = null;
+ if (isset($rating['attribs']['']['scheme']))
+ {
+ $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $rating_scheme = 'urn:simple';
+ }
+ if (isset($rating['data']))
+ {
+ $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $ratings_parent[] =& new $this->feed->rating_class($rating_scheme, $rating_value);
+ }
+ }
+ elseif ($ratings = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'explicit'))
+ {
+ foreach ($ratings as $rating)
+ {
+ $rating_scheme = 'urn:itunes';
+ $rating_value = null;
+ if (isset($rating['data']))
+ {
+ $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $ratings_parent[] =& new $this->feed->rating_class($rating_scheme, $rating_value);
+ }
+ }
+ elseif ($ratings = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'rating'))
+ {
+ foreach ($ratings as $rating)
+ {
+ $rating_scheme = null;
+ $rating_value = null;
+ if (isset($rating['attribs']['']['scheme']))
+ {
+ $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $rating_scheme = 'urn:simple';
+ }
+ if (isset($rating['data']))
+ {
+ $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $ratings_parent[] =& new $this->feed->rating_class($rating_scheme, $rating_value);
+ }
+ }
+ elseif ($ratings = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'explicit'))
+ {
+ foreach ($ratings as $rating)
+ {
+ $rating_scheme = 'urn:itunes';
+ $rating_value = null;
+ if (isset($rating['data']))
+ {
+ $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $ratings_parent[] =& new $this->feed->rating_class($rating_scheme, $rating_value);
+ }
+ }
+ if (is_array($ratings_parent))
+ {
+ $ratings_parent = array_values(SimplePie_Misc::array_unique($ratings_parent));
+ }
+
+ // RESTRICTIONS
+ if ($restrictions = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'restriction'))
+ {
+ foreach ($restrictions as $restriction)
+ {
+ $restriction_relationship = null;
+ $restriction_type = null;
+ $restriction_value = null;
+ if (isset($restriction['attribs']['']['relationship']))
+ {
+ $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($restriction['attribs']['']['type']))
+ {
+ $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($restriction['data']))
+ {
+ $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $restrictions_parent[] =& new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value);
+ }
+ }
+ elseif ($restrictions = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'block'))
+ {
+ foreach ($restrictions as $restriction)
+ {
+ $restriction_relationship = 'allow';
+ $restriction_type = null;
+ $restriction_value = 'itunes';
+ if (isset($restriction['data']) && strtolower($restriction['data']) == 'yes')
+ {
+ $restriction_relationship = 'deny';
+ }
+ $restrictions_parent[] =& new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value);
+ }
+ }
+ elseif ($restrictions = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'restriction'))
+ {
+ foreach ($restrictions as $restriction)
+ {
+ $restriction_relationship = null;
+ $restriction_type = null;
+ $restriction_value = null;
+ if (isset($restriction['attribs']['']['relationship']))
+ {
+ $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($restriction['attribs']['']['type']))
+ {
+ $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($restriction['data']))
+ {
+ $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $restrictions_parent[] =& new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value);
+ }
+ }
+ elseif ($restrictions = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'block'))
+ {
+ foreach ($restrictions as $restriction)
+ {
+ $restriction_relationship = 'allow';
+ $restriction_type = null;
+ $restriction_value = 'itunes';
+ if (isset($restriction['data']) && strtolower($restriction['data']) == 'yes')
+ {
+ $restriction_relationship = 'deny';
+ }
+ $restrictions_parent[] =& new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value);
+ }
+ }
+ if (is_array($restrictions_parent))
+ {
+ $restrictions_parent = array_values(SimplePie_Misc::array_unique($restrictions_parent));
+ }
+
+ // THUMBNAILS
+ if ($thumbnails = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'thumbnail'))
+ {
+ foreach ($thumbnails as $thumbnail)
+ {
+ if (isset($thumbnail['attribs']['']['url']))
+ {
+ $thumbnails_parent[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ }
+ }
+ elseif ($thumbnails = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'thumbnail'))
+ {
+ foreach ($thumbnails as $thumbnail)
+ {
+ if (isset($thumbnail['attribs']['']['url']))
+ {
+ $thumbnails_parent[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ }
+ }
+
+ // TITLES
+ if ($title_parent = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'title'))
+ {
+ if (isset($title_parent[0]['data']))
+ {
+ $title_parent = $this->sanitize($title_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ }
+ elseif ($title_parent = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'title'))
+ {
+ if (isset($title_parent[0]['data']))
+ {
+ $title_parent = $this->sanitize($title_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ }
+
+ // Clear the memory
+ unset($parent);
+
+ // If we have media:group tags, loop through them.
+ foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'group') as $group)
+ {
+ // If we have media:content tags, loop through them.
+ foreach ((array) $group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content'] as $content)
+ {
+ if (isset($content['attribs']['']['url']))
+ {
+ // Attributes
+ $bitrate = null;
+ $channels = null;
+ $duration = null;
+ $expression = null;
+ $framerate = null;
+ $height = null;
+ $javascript = null;
+ $lang = null;
+ $length = null;
+ $medium = null;
+ $samplingrate = null;
+ $type = null;
+ $url = null;
+ $width = null;
+
+ // Elements
+ $captions = null;
+ $categories = null;
+ $copyrights = null;
+ $credits = null;
+ $description = null;
+ $hashes = null;
+ $keywords = null;
+ $player = null;
+ $ratings = null;
+ $restrictions = null;
+ $thumbnails = null;
+ $title = null;
+
+ // Start checking the attributes of media:content
+ if (isset($content['attribs']['']['bitrate']))
+ {
+ $bitrate = $this->sanitize($content['attribs']['']['bitrate'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($content['attribs']['']['channels']))
+ {
+ $channels = $this->sanitize($content['attribs']['']['channels'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($content['attribs']['']['duration']))
+ {
+ $duration = $this->sanitize($content['attribs']['']['duration'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $duration = $duration_parent;
+ }
+ if (isset($content['attribs']['']['expression']))
+ {
+ $expression = $this->sanitize($content['attribs']['']['expression'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($content['attribs']['']['framerate']))
+ {
+ $framerate = $this->sanitize($content['attribs']['']['framerate'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($content['attribs']['']['height']))
+ {
+ $height = $this->sanitize($content['attribs']['']['height'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($content['attribs']['']['lang']))
+ {
+ $lang = $this->sanitize($content['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($content['attribs']['']['fileSize']))
+ {
+ $length = ceil($content['attribs']['']['fileSize']);
+ }
+ if (isset($content['attribs']['']['medium']))
+ {
+ $medium = $this->sanitize($content['attribs']['']['medium'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($content['attribs']['']['samplingrate']))
+ {
+ $samplingrate = $this->sanitize($content['attribs']['']['samplingrate'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($content['attribs']['']['type']))
+ {
+ $type = $this->sanitize($content['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($content['attribs']['']['width']))
+ {
+ $width = $this->sanitize($content['attribs']['']['width'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $url = $this->sanitize($content['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
+
+ // Checking the other optional media: elements. Priority: media:content, media:group, item, channel
+
+ // CAPTIONS
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text']))
+ {
+ foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'] as $caption)
+ {
+ $caption_type = null;
+ $caption_lang = null;
+ $caption_startTime = null;
+ $caption_endTime = null;
+ $caption_text = null;
+ if (isset($caption['attribs']['']['type']))
+ {
+ $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($caption['attribs']['']['lang']))
+ {
+ $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($caption['attribs']['']['start']))
+ {
+ $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($caption['attribs']['']['end']))
+ {
+ $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($caption['data']))
+ {
+ $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $captions[] =& new $this->feed->caption_class($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text);
+ }
+ if (is_array($captions))
+ {
+ $captions = array_values(SimplePie_Misc::array_unique($captions));
+ }
+ }
+ elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text']))
+ {
+ foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'] as $caption)
+ {
+ $caption_type = null;
+ $caption_lang = null;
+ $caption_startTime = null;
+ $caption_endTime = null;
+ $caption_text = null;
+ if (isset($caption['attribs']['']['type']))
+ {
+ $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($caption['attribs']['']['lang']))
+ {
+ $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($caption['attribs']['']['start']))
+ {
+ $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($caption['attribs']['']['end']))
+ {
+ $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($caption['data']))
+ {
+ $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $captions[] =& new $this->feed->caption_class($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text);
+ }
+ if (is_array($captions))
+ {
+ $captions = array_values(SimplePie_Misc::array_unique($captions));
+ }
+ }
+ else
+ {
+ $captions = $captions_parent;
+ }
+
+ // CATEGORIES
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category']))
+ {
+ foreach ((array) $content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'] as $category)
+ {
+ $term = null;
+ $scheme = null;
+ $label = null;
+ if (isset($category['data']))
+ {
+ $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($category['attribs']['']['scheme']))
+ {
+ $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $scheme = 'http://search.yahoo.com/mrss/category_schema';
+ }
+ if (isset($category['attribs']['']['label']))
+ {
+ $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $categories[] =& new $this->feed->category_class($term, $scheme, $label);
+ }
+ }
+ if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category']))
+ {
+ foreach ((array) $group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'] as $category)
+ {
+ $term = null;
+ $scheme = null;
+ $label = null;
+ if (isset($category['data']))
+ {
+ $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($category['attribs']['']['scheme']))
+ {
+ $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $scheme = 'http://search.yahoo.com/mrss/category_schema';
+ }
+ if (isset($category['attribs']['']['label']))
+ {
+ $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $categories[] =& new $this->feed->category_class($term, $scheme, $label);
+ }
+ }
+ if (is_array($categories) && is_array($categories_parent))
+ {
+ $categories = array_values(SimplePie_Misc::array_unique(array_merge($categories, $categories_parent)));
+ }
+ elseif (is_array($categories))
+ {
+ $categories = array_values(SimplePie_Misc::array_unique($categories));
+ }
+ elseif (is_array($categories_parent))
+ {
+ $categories = array_values(SimplePie_Misc::array_unique($categories_parent));
+ }
+
+ // COPYRIGHTS
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright']))
+ {
+ $copyright_url = null;
+ $copyright_label = null;
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url']))
+ {
+ $copyright_url = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data']))
+ {
+ $copyright_label = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $copyrights =& new $this->feed->copyright_class($copyright_url, $copyright_label);
+ }
+ elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright']))
+ {
+ $copyright_url = null;
+ $copyright_label = null;
+ if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url']))
+ {
+ $copyright_url = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data']))
+ {
+ $copyright_label = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $copyrights =& new $this->feed->copyright_class($copyright_url, $copyright_label);
+ }
+ else
+ {
+ $copyrights = $copyrights_parent;
+ }
+
+ // CREDITS
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit']))
+ {
+ foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'] as $credit)
+ {
+ $credit_role = null;
+ $credit_scheme = null;
+ $credit_name = null;
+ if (isset($credit['attribs']['']['role']))
+ {
+ $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($credit['attribs']['']['scheme']))
+ {
+ $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $credit_scheme = 'urn:ebu';
+ }
+ if (isset($credit['data']))
+ {
+ $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $credits[] =& new $this->feed->credit_class($credit_role, $credit_scheme, $credit_name);
+ }
+ if (is_array($credits))
+ {
+ $credits = array_values(SimplePie_Misc::array_unique($credits));
+ }
+ }
+ elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit']))
+ {
+ foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'] as $credit)
+ {
+ $credit_role = null;
+ $credit_scheme = null;
+ $credit_name = null;
+ if (isset($credit['attribs']['']['role']))
+ {
+ $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($credit['attribs']['']['scheme']))
+ {
+ $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $credit_scheme = 'urn:ebu';
+ }
+ if (isset($credit['data']))
+ {
+ $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $credits[] =& new $this->feed->credit_class($credit_role, $credit_scheme, $credit_name);
+ }
+ if (is_array($credits))
+ {
+ $credits = array_values(SimplePie_Misc::array_unique($credits));
+ }
+ }
+ else
+ {
+ $credits = $credits_parent;
+ }
+
+ // DESCRIPTION
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description']))
+ {
+ $description = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description']))
+ {
+ $description = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $description = $description_parent;
+ }
+
+ // HASHES
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash']))
+ {
+ foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'] as $hash)
+ {
+ $value = null;
+ $algo = null;
+ if (isset($hash['data']))
+ {
+ $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($hash['attribs']['']['algo']))
+ {
+ $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $algo = 'md5';
+ }
+ $hashes[] = $algo.':'.$value;
+ }
+ if (is_array($hashes))
+ {
+ $hashes = array_values(SimplePie_Misc::array_unique($hashes));
+ }
+ }
+ elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash']))
+ {
+ foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'] as $hash)
+ {
+ $value = null;
+ $algo = null;
+ if (isset($hash['data']))
+ {
+ $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($hash['attribs']['']['algo']))
+ {
+ $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $algo = 'md5';
+ }
+ $hashes[] = $algo.':'.$value;
+ }
+ if (is_array($hashes))
+ {
+ $hashes = array_values(SimplePie_Misc::array_unique($hashes));
+ }
+ }
+ else
+ {
+ $hashes = $hashes_parent;
+ }
+
+ // KEYWORDS
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords']))
+ {
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data']))
+ {
+ $temp = explode(',', $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
+ foreach ($temp as $word)
+ {
+ $keywords[] = trim($word);
+ }
+ unset($temp);
+ }
+ if (is_array($keywords))
+ {
+ $keywords = array_values(SimplePie_Misc::array_unique($keywords));
+ }
+ }
+ elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords']))
+ {
+ if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data']))
+ {
+ $temp = explode(',', $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
+ foreach ($temp as $word)
+ {
+ $keywords[] = trim($word);
+ }
+ unset($temp);
+ }
+ if (is_array($keywords))
+ {
+ $keywords = array_values(SimplePie_Misc::array_unique($keywords));
+ }
+ }
+ else
+ {
+ $keywords = $keywords_parent;
+ }
+
+ // PLAYER
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player']))
+ {
+ $player = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player']))
+ {
+ $player = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ else
+ {
+ $player = $player_parent;
+ }
+
+ // RATINGS
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating']))
+ {
+ foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'] as $rating)
+ {
+ $rating_scheme = null;
+ $rating_value = null;
+ if (isset($rating['attribs']['']['scheme']))
+ {
+ $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $rating_scheme = 'urn:simple';
+ }
+ if (isset($rating['data']))
+ {
+ $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $ratings[] =& new $this->feed->rating_class($rating_scheme, $rating_value);
+ }
+ if (is_array($ratings))
+ {
+ $ratings = array_values(SimplePie_Misc::array_unique($ratings));
+ }
+ }
+ elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating']))
+ {
+ foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'] as $rating)
+ {
+ $rating_scheme = null;
+ $rating_value = null;
+ if (isset($rating['attribs']['']['scheme']))
+ {
+ $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $rating_scheme = 'urn:simple';
+ }
+ if (isset($rating['data']))
+ {
+ $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $ratings[] =& new $this->feed->rating_class($rating_scheme, $rating_value);
+ }
+ if (is_array($ratings))
+ {
+ $ratings = array_values(SimplePie_Misc::array_unique($ratings));
+ }
+ }
+ else
+ {
+ $ratings = $ratings_parent;
+ }
+
+ // RESTRICTIONS
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction']))
+ {
+ foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'] as $restriction)
+ {
+ $restriction_relationship = null;
+ $restriction_type = null;
+ $restriction_value = null;
+ if (isset($restriction['attribs']['']['relationship']))
+ {
+ $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($restriction['attribs']['']['type']))
+ {
+ $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($restriction['data']))
+ {
+ $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $restrictions[] =& new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value);
+ }
+ if (is_array($restrictions))
+ {
+ $restrictions = array_values(SimplePie_Misc::array_unique($restrictions));
+ }
+ }
+ elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction']))
+ {
+ foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'] as $restriction)
+ {
+ $restriction_relationship = null;
+ $restriction_type = null;
+ $restriction_value = null;
+ if (isset($restriction['attribs']['']['relationship']))
+ {
+ $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($restriction['attribs']['']['type']))
+ {
+ $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($restriction['data']))
+ {
+ $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $restrictions[] =& new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value);
+ }
+ if (is_array($restrictions))
+ {
+ $restrictions = array_values(SimplePie_Misc::array_unique($restrictions));
+ }
+ }
+ else
+ {
+ $restrictions = $restrictions_parent;
+ }
+
+ // THUMBNAILS
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail']))
+ {
+ foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'] as $thumbnail)
+ {
+ $thumbnails[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ if (is_array($thumbnails))
+ {
+ $thumbnails = array_values(SimplePie_Misc::array_unique($thumbnails));
+ }
+ }
+ elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail']))
+ {
+ foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'] as $thumbnail)
+ {
+ $thumbnails[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ if (is_array($thumbnails))
+ {
+ $thumbnails = array_values(SimplePie_Misc::array_unique($thumbnails));
+ }
+ }
+ else
+ {
+ $thumbnails = $thumbnails_parent;
+ }
+
+ // TITLES
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title']))
+ {
+ $title = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title']))
+ {
+ $title = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $title = $title_parent;
+ }
+
+ $this->data['enclosures'][] =& new $this->feed->enclosure_class($url, $type, $length, $this->feed->javascript, $bitrate, $captions, $categories, $channels, $copyrights, $credits, $description, $duration, $expression, $framerate, $hashes, $height, $keywords, $lang, $medium, $player, $ratings, $restrictions, $samplingrate, $thumbnails, $title, $width);
+ }
+ }
+ }
+
+ // If we have standalone media:content tags, loop through them.
+ if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content']))
+ {
+ foreach ((array) $this->data['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content'] as $content)
+ {
+ if (isset($content['attribs']['']['url']))
+ {
+ // Attributes
+ $bitrate = null;
+ $channels = null;
+ $duration = null;
+ $expression = null;
+ $framerate = null;
+ $height = null;
+ $javascript = null;
+ $lang = null;
+ $length = null;
+ $medium = null;
+ $samplingrate = null;
+ $type = null;
+ $url = null;
+ $width = null;
+
+ // Elements
+ $captions = null;
+ $categories = null;
+ $copyrights = null;
+ $credits = null;
+ $description = null;
+ $hashes = null;
+ $keywords = null;
+ $player = null;
+ $ratings = null;
+ $restrictions = null;
+ $thumbnails = null;
+ $title = null;
+
+ // Start checking the attributes of media:content
+ if (isset($content['attribs']['']['bitrate']))
+ {
+ $bitrate = $this->sanitize($content['attribs']['']['bitrate'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($content['attribs']['']['channels']))
+ {
+ $channels = $this->sanitize($content['attribs']['']['channels'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($content['attribs']['']['duration']))
+ {
+ $duration = $this->sanitize($content['attribs']['']['duration'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $duration = $duration_parent;
+ }
+ if (isset($content['attribs']['']['expression']))
+ {
+ $expression = $this->sanitize($content['attribs']['']['expression'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($content['attribs']['']['framerate']))
+ {
+ $framerate = $this->sanitize($content['attribs']['']['framerate'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($content['attribs']['']['height']))
+ {
+ $height = $this->sanitize($content['attribs']['']['height'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($content['attribs']['']['lang']))
+ {
+ $lang = $this->sanitize($content['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($content['attribs']['']['fileSize']))
+ {
+ $length = ceil($content['attribs']['']['fileSize']);
+ }
+ if (isset($content['attribs']['']['medium']))
+ {
+ $medium = $this->sanitize($content['attribs']['']['medium'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($content['attribs']['']['samplingrate']))
+ {
+ $samplingrate = $this->sanitize($content['attribs']['']['samplingrate'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($content['attribs']['']['type']))
+ {
+ $type = $this->sanitize($content['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($content['attribs']['']['width']))
+ {
+ $width = $this->sanitize($content['attribs']['']['width'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $url = $this->sanitize($content['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
+
+ // Checking the other optional media: elements. Priority: media:content, media:group, item, channel
+
+ // CAPTIONS
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text']))
+ {
+ foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'] as $caption)
+ {
+ $caption_type = null;
+ $caption_lang = null;
+ $caption_startTime = null;
+ $caption_endTime = null;
+ $caption_text = null;
+ if (isset($caption['attribs']['']['type']))
+ {
+ $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($caption['attribs']['']['lang']))
+ {
+ $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($caption['attribs']['']['start']))
+ {
+ $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($caption['attribs']['']['end']))
+ {
+ $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($caption['data']))
+ {
+ $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $captions[] =& new $this->feed->caption_class($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text);
+ }
+ if (is_array($captions))
+ {
+ $captions = array_values(SimplePie_Misc::array_unique($captions));
+ }
+ }
+ else
+ {
+ $captions = $captions_parent;
+ }
+
+ // CATEGORIES
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category']))
+ {
+ foreach ((array) $content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'] as $category)
+ {
+ $term = null;
+ $scheme = null;
+ $label = null;
+ if (isset($category['data']))
+ {
+ $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($category['attribs']['']['scheme']))
+ {
+ $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $scheme = 'http://search.yahoo.com/mrss/category_schema';
+ }
+ if (isset($category['attribs']['']['label']))
+ {
+ $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $categories[] =& new $this->feed->category_class($term, $scheme, $label);
+ }
+ }
+ if (is_array($categories) && is_array($categories_parent))
+ {
+ $categories = array_values(SimplePie_Misc::array_unique(array_merge($categories, $categories_parent)));
+ }
+ elseif (is_array($categories))
+ {
+ $categories = array_values(SimplePie_Misc::array_unique($categories));
+ }
+ elseif (is_array($categories_parent))
+ {
+ $categories = array_values(SimplePie_Misc::array_unique($categories_parent));
+ }
+ else
+ {
+ $categories = null;
+ }
+
+ // COPYRIGHTS
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright']))
+ {
+ $copyright_url = null;
+ $copyright_label = null;
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url']))
+ {
+ $copyright_url = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data']))
+ {
+ $copyright_label = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $copyrights =& new $this->feed->copyright_class($copyright_url, $copyright_label);
+ }
+ else
+ {
+ $copyrights = $copyrights_parent;
+ }
+
+ // CREDITS
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit']))
+ {
+ foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'] as $credit)
+ {
+ $credit_role = null;
+ $credit_scheme = null;
+ $credit_name = null;
+ if (isset($credit['attribs']['']['role']))
+ {
+ $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($credit['attribs']['']['scheme']))
+ {
+ $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $credit_scheme = 'urn:ebu';
+ }
+ if (isset($credit['data']))
+ {
+ $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $credits[] =& new $this->feed->credit_class($credit_role, $credit_scheme, $credit_name);
+ }
+ if (is_array($credits))
+ {
+ $credits = array_values(SimplePie_Misc::array_unique($credits));
+ }
+ }
+ else
+ {
+ $credits = $credits_parent;
+ }
+
+ // DESCRIPTION
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description']))
+ {
+ $description = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $description = $description_parent;
+ }
+
+ // HASHES
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash']))
+ {
+ foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'] as $hash)
+ {
+ $value = null;
+ $algo = null;
+ if (isset($hash['data']))
+ {
+ $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($hash['attribs']['']['algo']))
+ {
+ $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $algo = 'md5';
+ }
+ $hashes[] = $algo.':'.$value;
+ }
+ if (is_array($hashes))
+ {
+ $hashes = array_values(SimplePie_Misc::array_unique($hashes));
+ }
+ }
+ else
+ {
+ $hashes = $hashes_parent;
+ }
+
+ // KEYWORDS
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords']))
+ {
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data']))
+ {
+ $temp = explode(',', $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
+ foreach ($temp as $word)
+ {
+ $keywords[] = trim($word);
+ }
+ unset($temp);
+ }
+ if (is_array($keywords))
+ {
+ $keywords = array_values(SimplePie_Misc::array_unique($keywords));
+ }
+ }
+ else
+ {
+ $keywords = $keywords_parent;
+ }
+
+ // PLAYER
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player']))
+ {
+ $player = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ else
+ {
+ $player = $player_parent;
+ }
+
+ // RATINGS
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating']))
+ {
+ foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'] as $rating)
+ {
+ $rating_scheme = null;
+ $rating_value = null;
+ if (isset($rating['attribs']['']['scheme']))
+ {
+ $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $rating_scheme = 'urn:simple';
+ }
+ if (isset($rating['data']))
+ {
+ $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $ratings[] =& new $this->feed->rating_class($rating_scheme, $rating_value);
+ }
+ if (is_array($ratings))
+ {
+ $ratings = array_values(SimplePie_Misc::array_unique($ratings));
+ }
+ }
+ else
+ {
+ $ratings = $ratings_parent;
+ }
+
+ // RESTRICTIONS
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction']))
+ {
+ foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'] as $restriction)
+ {
+ $restriction_relationship = null;
+ $restriction_type = null;
+ $restriction_value = null;
+ if (isset($restriction['attribs']['']['relationship']))
+ {
+ $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($restriction['attribs']['']['type']))
+ {
+ $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($restriction['data']))
+ {
+ $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $restrictions[] =& new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value);
+ }
+ if (is_array($restrictions))
+ {
+ $restrictions = array_values(SimplePie_Misc::array_unique($restrictions));
+ }
+ }
+ else
+ {
+ $restrictions = $restrictions_parent;
+ }
+
+ // THUMBNAILS
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail']))
+ {
+ foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'] as $thumbnail)
+ {
+ $thumbnails[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ if (is_array($thumbnails))
+ {
+ $thumbnails = array_values(SimplePie_Misc::array_unique($thumbnails));
+ }
+ }
+ else
+ {
+ $thumbnails = $thumbnails_parent;
+ }
+
+ // TITLES
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title']))
+ {
+ $title = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $title = $title_parent;
+ }
+
+ $this->data['enclosures'][] =& new $this->feed->enclosure_class($url, $type, $length, $this->feed->javascript, $bitrate, $captions, $categories, $channels, $copyrights, $credits, $description, $duration, $expression, $framerate, $hashes, $height, $keywords, $lang, $medium, $player, $ratings, $restrictions, $samplingrate, $thumbnails, $title, $width);
+ }
+ }
+ }
+
+ foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'link') as $link)
+ {
+ if (isset($link['attribs']['']['href']) && !empty($link['attribs']['']['rel']) && $link['attribs']['']['rel'] == 'enclosure')
+ {
+ // Attributes
+ $bitrate = null;
+ $channels = null;
+ $duration = null;
+ $expression = null;
+ $framerate = null;
+ $height = null;
+ $javascript = null;
+ $lang = null;
+ $length = null;
+ $medium = null;
+ $samplingrate = null;
+ $type = null;
+ $url = null;
+ $width = null;
+
+ $url = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link));
+ if (isset($link['attribs']['']['type']))
+ {
+ $type = $this->sanitize($link['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($link['attribs']['']['length']))
+ {
+ $length = ceil($link['attribs']['']['length']);
+ }
+
+ // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor
+ $this->data['enclosures'][] =& new $this->feed->enclosure_class($url, $type, $length, $this->feed->javascript, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width);
+ }
+ }
+
+ foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'link') as $link)
+ {
+ if (isset($link['attribs']['']['href']) && !empty($link['attribs']['']['rel']) && $link['attribs']['']['rel'] == 'enclosure')
+ {
+ // Attributes
+ $bitrate = null;
+ $channels = null;
+ $duration = null;
+ $expression = null;
+ $framerate = null;
+ $height = null;
+ $javascript = null;
+ $lang = null;
+ $length = null;
+ $medium = null;
+ $samplingrate = null;
+ $type = null;
+ $url = null;
+ $width = null;
+
+ $url = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link));
+ if (isset($link['attribs']['']['type']))
+ {
+ $type = $this->sanitize($link['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($link['attribs']['']['length']))
+ {
+ $length = ceil($link['attribs']['']['length']);
+ }
+
+ // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor
+ $this->data['enclosures'][] =& new $this->feed->enclosure_class($url, $type, $length, $this->feed->javascript, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width);
+ }
+ }
+
+ if ($enclosure = $this->get_item_tags('', 'enclosure'))
+ {
+ if (isset($enclosure[0]['attribs']['']['url']))
+ {
+ // Attributes
+ $bitrate = null;
+ $channels = null;
+ $duration = null;
+ $expression = null;
+ $framerate = null;
+ $height = null;
+ $javascript = null;
+ $lang = null;
+ $length = null;
+ $medium = null;
+ $samplingrate = null;
+ $type = null;
+ $url = null;
+ $width = null;
+
+ $url = $this->sanitize($enclosure[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($enclosure[0]));
+ if (isset($enclosure[0]['attribs']['']['type']))
+ {
+ $type = $this->sanitize($enclosure[0]['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($enclosure[0]['attribs']['']['length']))
+ {
+ $length = ceil($enclosure[0]['attribs']['']['length']);
+ }
+
+ // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor
+ $this->data['enclosures'][] =& new $this->feed->enclosure_class($url, $type, $length, $this->feed->javascript, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width);
+ }
+ }
+ $this->data['enclosures'] = array_values(SimplePie_Misc::array_unique($this->data['enclosures']));
+ }
+ if (!empty($this->data['enclosures']))
+ {
+ return $this->data['enclosures'];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_latitude()
+ {
+ if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lat'))
+ {
+ return (float) $return[0]['data'];
+ }
+ elseif (($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', $return[0]['data'], $match))
+ {
+ return (float) $match[1];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_longitude()
+ {
+ if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'long'))
+ {
+ return (float) $return[0]['data'];
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lon'))
+ {
+ return (float) $return[0]['data'];
+ }
+ elseif (($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', $return[0]['data'], $match))
+ {
+ return (float) $match[2];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ /**
+ * Creates the add_to_* methods' return data
+ *
+ * @access private
+ * @param string $item_url String to prefix to the item permalink
+ * @param string $title_url String to prefix to the item title
+ * (and suffix to the item permalink)
+ * @return mixed URL if feed exists, false otherwise
+ */
+ function add_to_service($item_url, $title_url = null)
+ {
+ if ($this->get_permalink() !== null)
+ {
+ $return = $this->sanitize($item_url, SIMPLEPIE_CONSTRUCT_IRI) . rawurlencode($this->get_permalink());
+ if ($title_url !== null && $this->get_title() !== null)
+ {
+ $return .= $this->sanitize($title_url, SIMPLEPIE_CONSTRUCT_IRI) . rawurlencode($this->get_title());
+ }
+ return $return;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function add_to_blinklist()
+ {
+ return $this->add_to_service('http://www.blinklist.com/index.php?Action=Blink/addblink.php&Description=&Url=', '&Title=');
+ }
+
+ function add_to_blogmarks()
+ {
+ return $this->add_to_service('http://blogmarks.net/my/new.php?mini=1&simple=1&url=', '&title=');
+ }
+
+ function add_to_delicious()
+ {
+ return $this->add_to_service('http://del.icio.us/post/?v=3&url=', '&title=');
+ }
+
+ function add_to_digg()
+ {
+ return $this->add_to_service('http://digg.com/submit?phase=2&URL=');
+ }
+
+ function add_to_furl()
+ {
+ return $this->add_to_service('http://www.furl.net/storeIt.jsp?u=', '&t=');
+ }
+
+ function add_to_magnolia()
+ {
+ return $this->add_to_service('http://ma.gnolia.com/bookmarklet/add?url=', '&title=');
+ }
+
+ function add_to_myweb20()
+ {
+ return $this->add_to_service('http://myweb2.search.yahoo.com/myresults/bookmarklet?u=', '&t=');
+ }
+
+ function add_to_newsvine()
+ {
+ return $this->add_to_service('http://www.newsvine.com/_wine/save?u=', '&h=');
+ }
+
+ function add_to_reddit()
+ {
+ return $this->add_to_service('http://reddit.com/submit?url=', '&title=');
+ }
+
+ function add_to_segnalo()
+ {
+ return $this->add_to_service('http://segnalo.com/post.html.php?url=', '&title=');
+ }
+
+ function add_to_simpy()
+ {
+ return $this->add_to_service('http://www.simpy.com/simpy/LinkAdd.do?href=', '&title=');
+ }
+
+ function add_to_spurl()
+ {
+ return $this->add_to_service('http://www.spurl.net/spurl.php?v=3&url=', '&title=');
+ }
+
+ function add_to_wists()
+ {
+ return $this->add_to_service('http://wists.com/r.php?c=&r=', '&title=');
+ }
+
+ function search_technorati()
+ {
+ return $this->add_to_service('http://www.technorati.com/search/');
+ }
+}
+
+class SimplePie_Author
+{
+ var $name;
+ var $link;
+ var $email;
+
+ // Constructor, used to input the data
+ function SimplePie_Author($name = null, $link = null, $email = null)
+ {
+ $this->name = $name;
+ $this->link = $link;
+ $this->email = $email;
+ }
+
+ function __toString()
+ {
+ // There is no $this->data here
+ return md5(serialize($this));
+ }
+
+ function get_name()
+ {
+ if ($this->name !== null)
+ {
+ return $this->name;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_link()
+ {
+ if ($this->link !== null)
+ {
+ return $this->link;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_email()
+ {
+ if ($this->email !== null)
+ {
+ return $this->email;
+ }
+ else
+ {
+ return null;
+ }
+ }
+}
+
+class SimplePie_Category
+{
+ var $term;
+ var $scheme;
+ var $label;
+
+ // Constructor, used to input the data
+ function SimplePie_Category($term = null, $scheme = null, $label = null)
+ {
+ $this->term = $term;
+ $this->scheme = $scheme;
+ $this->label = $label;
+ }
+
+ function __toString()
+ {
+ // There is no $this->data here
+ return md5(serialize($this));
+ }
+
+ function get_term()
+ {
+ if ($this->term !== null)
+ {
+ return $this->term;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_scheme()
+ {
+ if ($this->scheme !== null)
+ {
+ return $this->scheme;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_label()
+ {
+ if ($this->label !== null)
+ {
+ return $this->label;
+ }
+ else
+ {
+ return $this->get_term();
+ }
+ }
+}
+
+class SimplePie_Enclosure
+{
+ var $bitrate;
+ var $captions;
+ var $categories;
+ var $channels;
+ var $copyright;
+ var $credits;
+ var $description;
+ var $duration;
+ var $expression;
+ var $framerate;
+ var $handler;
+ var $hashes;
+ var $height;
+ var $javascript;
+ var $keywords;
+ var $lang;
+ var $length;
+ var $link;
+ var $medium;
+ var $player;
+ var $ratings;
+ var $restrictions;
+ var $samplingrate;
+ var $thumbnails;
+ var $title;
+ var $type;
+ var $width;
+
+ // Constructor, used to input the data
+ function SimplePie_Enclosure($link = null, $type = null, $length = null, $javascript = null, $bitrate = null, $captions = null, $categories = null, $channels = null, $copyright = null, $credits = null, $description = null, $duration = null, $expression = null, $framerate = null, $hashes = null, $height = null, $keywords = null, $lang = null, $medium = null, $player = null, $ratings = null, $restrictions = null, $samplingrate = null, $thumbnails = null, $title = null, $width = null)
+ {
+ $this->bitrate = $bitrate;
+ $this->captions = $captions;
+ $this->categories = $categories;
+ $this->channels = $channels;
+ $this->copyright = $copyright;
+ $this->credits = $credits;
+ $this->description = $description;
+ $this->duration = $duration;
+ $this->expression = $expression;
+ $this->framerate = $framerate;
+ $this->hashes = $hashes;
+ $this->height = $height;
+ $this->javascript = $javascript;
+ $this->keywords = $keywords;
+ $this->lang = $lang;
+ $this->length = $length;
+ $this->link = $link;
+ $this->medium = $medium;
+ $this->player = $player;
+ $this->ratings = $ratings;
+ $this->restrictions = $restrictions;
+ $this->samplingrate = $samplingrate;
+ $this->thumbnails = $thumbnails;
+ $this->title = $title;
+ $this->type = $type;
+ $this->width = $width;
+ if (class_exists('idna_convert'))
+ {
+ $idn =& new idna_convert;
+ $parsed = SimplePie_Misc::parse_url($link);
+ $this->link = SimplePie_Misc::compress_parse_url($parsed['scheme'], $idn->encode($parsed['authority']), $parsed['path'], $parsed['query'], $parsed['fragment']);
+ }
+ $this->handler = $this->get_handler(); // Needs to load last
+ }
+
+ function __toString()
+ {
+ // There is no $this->data here
+ return md5(serialize($this));
+ }
+
+ function get_bitrate()
+ {
+ if ($this->bitrate !== null)
+ {
+ return $this->bitrate;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_caption($key = 0)
+ {
+ $captions = $this->get_captions();
+ if (isset($captions[$key]))
+ {
+ return $captions[$key];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_captions()
+ {
+ if ($this->captions !== null)
+ {
+ return $this->captions;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_category($key = 0)
+ {
+ $categories = $this->get_categories();
+ if (isset($categories[$key]))
+ {
+ return $categories[$key];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_categories()
+ {
+ if ($this->categories !== null)
+ {
+ return $this->categories;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_channels()
+ {
+ if ($this->channels !== null)
+ {
+ return $this->channels;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_copyright()
+ {
+ if ($this->copyright !== null)
+ {
+ return $this->copyright;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_credit($key = 0)
+ {
+ $credits = $this->get_credits();
+ if (isset($credits[$key]))
+ {
+ return $credits[$key];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_credits()
+ {
+ if ($this->credits !== null)
+ {
+ return $this->credits;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_description()
+ {
+ if ($this->description !== null)
+ {
+ return $this->description;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_duration($convert = false)
+ {
+ if ($this->duration !== null)
+ {
+ if ($convert)
+ {
+ $time = SimplePie_Misc::time_hms($this->duration);
+ return $time;
+ }
+ else
+ {
+ return $this->duration;
+ }
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_expression()
+ {
+ if ($this->expression !== null)
+ {
+ return $this->expression;
+ }
+ else
+ {
+ return 'full';
+ }
+ }
+
+ function get_extension()
+ {
+ if ($this->link !== null)
+ {
+ $url = SimplePie_Misc::parse_url($this->link);
+ if ($url['path'] !== '')
+ {
+ return pathinfo($url['path'], PATHINFO_EXTENSION);
+ }
+ }
+ return null;
+ }
+
+ function get_framerate()
+ {
+ if ($this->framerate !== null)
+ {
+ return $this->framerate;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_handler()
+ {
+ return $this->get_real_type(true);
+ }
+
+ function get_hash($key = 0)
+ {
+ $hashes = $this->get_hashes();
+ if (isset($hashes[$key]))
+ {
+ return $hashes[$key];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_hashes()
+ {
+ if ($this->hashes !== null)
+ {
+ return $this->hashes;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_height()
+ {
+ if ($this->height !== null)
+ {
+ return $this->height;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_language()
+ {
+ if ($this->lang !== null)
+ {
+ return $this->lang;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_keyword($key = 0)
+ {
+ $keywords = $this->get_keywords();
+ if (isset($keywords[$key]))
+ {
+ return $keywords[$key];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_keywords()
+ {
+ if ($this->keywords !== null)
+ {
+ return $this->keywords;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_length()
+ {
+ if ($this->length !== null)
+ {
+ return $this->length;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_link()
+ {
+ if ($this->link !== null)
+ {
+ return urldecode($this->link);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_medium()
+ {
+ if ($this->medium !== null)
+ {
+ return $this->medium;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_player()
+ {
+ if ($this->player !== null)
+ {
+ return $this->player;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_rating($key = 0)
+ {
+ $ratings = $this->get_ratings();
+ if (isset($ratings[$key]))
+ {
+ return $ratings[$key];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_ratings()
+ {
+ if ($this->ratings !== null)
+ {
+ return $this->ratings;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_restriction($key = 0)
+ {
+ $restrictions = $this->get_restrictions();
+ if (isset($restrictions[$key]))
+ {
+ return $restrictions[$key];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_restrictions()
+ {
+ if ($this->restrictions !== null)
+ {
+ return $this->restrictions;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_sampling_rate()
+ {
+ if ($this->samplingrate !== null)
+ {
+ return $this->samplingrate;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_size()
+ {
+ $length = $this->get_length();
+ if ($length !== null)
+ {
+ return round($length/1048576, 2);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_thumbnail($key = 0)
+ {
+ $thumbnails = $this->get_thumbnails();
+ if (isset($thumbnails[$key]))
+ {
+ return $thumbnails[$key];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_thumbnails()
+ {
+ if ($this->thumbnails !== null)
+ {
+ return $this->thumbnails;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_title()
+ {
+ if ($this->title !== null)
+ {
+ return $this->title;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_type()
+ {
+ if ($this->type !== null)
+ {
+ return $this->type;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_width()
+ {
+ if ($this->width !== null)
+ {
+ return $this->width;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function native_embed($options='')
+ {
+ return $this->embed($options, true);
+ }
+
+ /**
+ * @todo If the dimensions for media:content are defined, use them when width/height are set to 'auto'.
+ */
+ function embed($options = '', $native = false)
+ {
+ // Set up defaults
+ $audio = '';
+ $video = '';
+ $alt = '';
+ $altclass = '';
+ $loop = 'false';
+ $width = 'auto';
+ $height = 'auto';
+ $bgcolor = '#ffffff';
+ $mediaplayer = '';
+ $widescreen = false;
+ $handler = $this->get_handler();
+ $type = $this->get_real_type();
+
+ // Process options and reassign values as necessary
+ if (is_array($options))
+ {
+ extract($options);
+ }
+ else
+ {
+ $options = explode(',', $options);
+ foreach($options as $option)
+ {
+ $opt = explode(':', $option, 2);
+ if (isset($opt[0], $opt[1]))
+ {
+ $opt[0] = trim($opt[0]);
+ $opt[1] = trim($opt[1]);
+ switch ($opt[0])
+ {
+ case 'audio':
+ $audio = $opt[1];
+ break;
+
+ case 'video':
+ $video = $opt[1];
+ break;
+
+ case 'alt':
+ $alt = $opt[1];
+ break;
+
+ case 'altclass':
+ $altclass = $opt[1];
+ break;
+
+ case 'loop':
+ $loop = $opt[1];
+ break;
+
+ case 'width':
+ $width = $opt[1];
+ break;
+
+ case 'height':
+ $height = $opt[1];
+ break;
+
+ case 'bgcolor':
+ $bgcolor = $opt[1];
+ break;
+
+ case 'mediaplayer':
+ $mediaplayer = $opt[1];
+ break;
+
+ case 'widescreen':
+ $widescreen = $opt[1];
+ break;
+ }
+ }
+ }
+ }
+
+ $mime = explode('/', $type, 2);
+ $mime = $mime[0];
+
+ // Process values for 'auto'
+ if ($width == 'auto')
+ {
+ if ($mime == 'video')
+ {
+ if ($height == 'auto')
+ {
+ $width = 480;
+ }
+ elseif ($widescreen)
+ {
+ $width = round((intval($height)/9)*16);
+ }
+ else
+ {
+ $width = round((intval($height)/3)*4);
+ }
+ }
+ else
+ {
+ $width = '100%';
+ }
+ }
+
+ if ($height == 'auto')
+ {
+ if ($mime == 'audio')
+ {
+ $height = 0;
+ }
+ elseif ($mime == 'video')
+ {
+ if ($width == 'auto')
+ {
+ if ($widescreen)
+ {
+ $height = 270;
+ }
+ else
+ {
+ $height = 360;
+ }
+ }
+ elseif ($widescreen)
+ {
+ $height = round((intval($width)/16)*9);
+ }
+ else
+ {
+ $height = round((intval($width)/4)*3);
+ }
+ }
+ else
+ {
+ $height = 376;
+ }
+ }
+ elseif ($mime == 'audio')
+ {
+ $height = 0;
+ }
+
+ // Set proper placeholder value
+ if ($mime == 'audio')
+ {
+ $placeholder = $audio;
+ }
+ elseif ($mime == 'video')
+ {
+ $placeholder = $video;
+ }
+
+ $embed = '';
+
+ // Make sure the JS library is included
+ if (!$native)
+ {
+ static $javascript_outputted = null;
+ if (!$javascript_outputted && $this->javascript)
+ {
+ $embed .= '<script type="text/javascript" src="?' . htmlspecialchars($this->javascript) . '"></script>';
+ $javascript_outputted = true;
+ }
+ }
+
+ // Odeo Feed MP3's
+ if ($handler == 'odeo')
+ {
+ if ($native)
+ {
+ $embed .= '<embed src="http://odeo.com/flash/audio_player_fullsize.swf" pluginspage="http://adobe.com/go/getflashplayer" type="application/x-shockwave-flash" quality="high" width="440" height="80" wmode="transparent" allowScriptAccess="any" flashvars="valid_sample_rate=true&external_url=' . $this->get_link() . '"></embed>';
+ }
+ else
+ {
+ $embed .= '<script type="text/javascript">embed_odeo("' . $this->get_link() . '");</script>';
+ }
+ }
+
+ // Flash
+ elseif ($handler == 'flash')
+ {
+ if ($native)
+ {
+ $embed .= "<embed src=\"" . $this->get_link() . "\" pluginspage=\"http://adobe.com/go/getflashplayer\" type=\"$type\" quality=\"high\" width=\"$width\" height=\"$height\" bgcolor=\"$bgcolor\" loop=\"$loop\"></embed>";
+ }
+ else
+ {
+ $embed .= "<script type='text/javascript'>embed_flash('$bgcolor', '$width', '$height', '" . $this->get_link() . "', '$loop', '$type');</script>";
+ }
+ }
+
+ // Flash Media Player file types.
+ // Preferred handler for MP3 file types.
+ elseif ($handler == 'fmedia' || ($handler == 'mp3' && $mediaplayer != ''))
+ {
+ $height += 20;
+ if ($native)
+ {
+ $embed .= "<embed src=\"$mediaplayer\" pluginspage=\"http://adobe.com/go/getflashplayer\" type=\"application/x-shockwave-flash\" quality=\"high\" width=\"$width\" height=\"$height\" wmode=\"transparent\" flashvars=\"file=" . rawurlencode($this->get_link().'?file_extension=.'.$this->get_extension()) . "&autostart=false&repeat=$loop&showdigits=true&showfsbutton=false\"></embed>";
+ }
+ else
+ {
+ $embed .= "<script type='text/javascript'>embed_flv('$width', '$height', '" . rawurlencode($this->get_link().'?file_extension=.'.$this->get_extension()) . "', '$placeholder', '$loop', '$mediaplayer');</script>";
+ }
+ }
+
+ // QuickTime 7 file types. Need to test with QuickTime 6.
+ // Only handle MP3's if the Flash Media Player is not present.
+ elseif ($handler == 'quicktime' || ($handler == 'mp3' && $mediaplayer == ''))
+ {
+ $height += 16;
+ if ($native)
+ {
+ if ($placeholder != ""){
+ $embed .= "<embed type=\"$type\" style=\"cursor:hand; cursor:pointer;\" href=\"" . $this->get_link() . "\" src=\"$placeholder\" width=\"$width\" height=\"$height\" autoplay=\"false\" target=\"myself\" controller=\"false\" loop=\"$loop\" scale=\"aspect\" bgcolor=\"$bgcolor\" pluginspage=\"http://apple.com/quicktime/download/\"></embed>";
+ }
+ else {
+ $embed .= "<embed type=\"$type\" style=\"cursor:hand; cursor:pointer;\" src=\"" . $this->get_link() . "\" width=\"$width\" height=\"$height\" autoplay=\"false\" target=\"myself\" controller=\"true\" loop=\"$loop\" scale=\"aspect\" bgcolor=\"$bgcolor\" pluginspage=\"http://apple.com/quicktime/download/\"></embed>";
+ }
+ }
+ else
+ {
+ $embed .= "<script type='text/javascript'>embed_quicktime('$type', '$bgcolor', '$width', '$height', '" . $this->get_link() . "', '$placeholder', '$loop');</script>";
+ }
+ }
+
+ // Windows Media
+ elseif ($handler == 'wmedia')
+ {
+ $height += 45;
+ if ($native)
+ {
+ $embed .= "<embed type=\"application/x-mplayer2\" src=\"" . $this->get_link() . "\" autosize=\"1\" width=\"$width\" height=\"$height\" showcontrols=\"1\" showstatusbar=\"0\" showdisplay=\"0\" autostart=\"0\"></embed>";
+ }
+ else
+ {
+ $embed .= "<script type='text/javascript'>embed_wmedia('$width', '$height', '" . $this->get_link() . "');</script>";
+ }
+ }
+
+ // Everything else
+ else $embed .= '<a href="' . $this->get_link() . '" class="' . $altclass . '">' . $alt . '</a>';
+
+ return $embed;
+ }
+
+ function get_real_type($find_handler = false)
+ {
+ // If it's Odeo, let's get it out of the way.
+ if (substr(strtolower($this->get_link()), 0, 15) == 'http://odeo.com')
+ {
+ return 'odeo';
+ }
+
+ // Mime-types by handler.
+ $types_flash = array('application/x-shockwave-flash', 'application/futuresplash'); // Flash
+ $types_fmedia = array('video/flv', 'video/x-flv'); // Flash Media Player
+ $types_quicktime = array('audio/3gpp', 'audio/3gpp2', 'audio/aac', 'audio/x-aac', 'audio/aiff', 'audio/x-aiff', 'audio/mid', 'audio/midi', 'audio/x-midi', 'audio/mp4', 'audio/m4a', 'audio/x-m4a', 'audio/wav', 'audio/x-wav', 'video/3gpp', 'video/3gpp2', 'video/m4v', 'video/x-m4v', 'video/mp4', 'video/mpeg', 'video/x-mpeg', 'video/quicktime', 'video/sd-video'); // QuickTime
+ $types_wmedia = array('application/asx', 'application/x-mplayer2', 'audio/x-ms-wma', 'audio/x-ms-wax', 'video/x-ms-asf-plugin', 'video/x-ms-asf', 'video/x-ms-wm', 'video/x-ms-wmv', 'video/x-ms-wvx'); // Windows Media
+ $types_mp3 = array('audio/mp3', 'audio/x-mp3', 'audio/mpeg', 'audio/x-mpeg'); // MP3
+
+ if ($this->get_type() !== null)
+ {
+ $type = strtolower($this->type);
+ }
+ else
+ {
+ $type = null;
+ }
+
+ // If we encounter an unsupported mime-type, check the file extension and guess intelligently.
+ if (!in_array($type, array_merge($types_flash, $types_fmedia, $types_quicktime, $types_wmedia, $types_mp3)))
+ {
+ switch (strtolower($this->get_extension()))
+ {
+ // Audio mime-types
+ case 'aac':
+ case 'adts':
+ $type = 'audio/acc';
+ break;
+
+ case 'aif':
+ case 'aifc':
+ case 'aiff':
+ case 'cdda':
+ $type = 'audio/aiff';
+ break;
+
+ case 'bwf':
+ $type = 'audio/wav';
+ break;
+
+ case 'kar':
+ case 'mid':
+ case 'midi':
+ case 'smf':
+ $type = 'audio/midi';
+ break;
+
+ case 'm4a':
+ $type = 'audio/x-m4a';
+ break;
+
+ case 'mp3':
+ case 'swa':
+ $type = 'audio/mp3';
+ break;
+
+ case 'wav':
+ $type = 'audio/wav';
+ break;
+
+ case 'wax':
+ $type = 'audio/x-ms-wax';
+ break;
+
+ case 'wma':
+ $type = 'audio/x-ms-wma';
+ break;
+
+ // Video mime-types
+ case '3gp':
+ case '3gpp':
+ $type = 'video/3gpp';
+ break;
+
+ case '3g2':
+ case '3gp2':
+ $type = 'video/3gpp2';
+ break;
+
+ case 'asf':
+ $type = 'video/x-ms-asf';
+ break;
+
+ case 'flv':
+ $type = 'video/x-flv';
+ break;
+
+ case 'm1a':
+ case 'm1s':
+ case 'm1v':
+ case 'm15':
+ case 'm75':
+ case 'mp2':
+ case 'mpa':
+ case 'mpeg':
+ case 'mpg':
+ case 'mpm':
+ case 'mpv':
+ $type = 'video/mpeg';
+ break;
+
+ case 'm4v':
+ $type = 'video/x-m4v';
+ break;
+
+ case 'mov':
+ case 'qt':
+ $type = 'video/quicktime';
+ break;
+
+ case 'mp4':
+ case 'mpg4':
+ $type = 'video/mp4';
+ break;
+
+ case 'sdv':
+ $type = 'video/sd-video';
+ break;
+
+ case 'wm':
+ $type = 'video/x-ms-wm';
+ break;
+
+ case 'wmv':
+ $type = 'video/x-ms-wmv';
+ break;
+
+ case 'wvx':
+ $type = 'video/x-ms-wvx';
+ break;
+
+ // Flash mime-types
+ case 'spl':
+ $type = 'application/futuresplash';
+ break;
+
+ case 'swf':
+ $type = 'application/x-shockwave-flash';
+ break;
+ }
+ }
+
+ if ($find_handler)
+ {
+ if (in_array($type, $types_flash))
+ {
+ return 'flash';
+ }
+ elseif (in_array($type, $types_fmedia))
+ {
+ return 'fmedia';
+ }
+ elseif (in_array($type, $types_quicktime))
+ {
+ return 'quicktime';
+ }
+ elseif (in_array($type, $types_wmedia))
+ {
+ return 'wmedia';
+ }
+ elseif (in_array($type, $types_mp3))
+ {
+ return 'mp3';
+ }
+ else
+ {
+ return null;
+ }
+ }
+ else
+ {
+ return $type;
+ }
+ }
+}
+
+class SimplePie_Caption
+{
+ var $type;
+ var $lang;
+ var $startTime;
+ var $endTime;
+ var $text;
+
+ // Constructor, used to input the data
+ function SimplePie_Caption($type = null, $lang = null, $startTime = null, $endTime = null, $text = null)
+ {
+ $this->type = $type;
+ $this->lang = $lang;
+ $this->startTime = $startTime;
+ $this->endTime = $endTime;
+ $this->text = $text;
+ }
+
+ function __toString()
+ {
+ // There is no $this->data here
+ return md5(serialize($this));
+ }
+
+ function get_endtime()
+ {
+ if ($this->endTime !== null)
+ {
+ return $this->endTime;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_language()
+ {
+ if ($this->language !== null)
+ {
+ return $this->language;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_starttime()
+ {
+ if ($this->startTime !== null)
+ {
+ return $this->startTime;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_text()
+ {
+ if ($this->text !== null)
+ {
+ return $this->text;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_type()
+ {
+ if ($this->type !== null)
+ {
+ return $this->type;
+ }
+ else
+ {
+ return null;
+ }
+ }
+}
+
+class SimplePie_Credit
+{
+ var $role;
+ var $scheme;
+ var $name;
+
+ // Constructor, used to input the data
+ function SimplePie_Credit($role = null, $scheme = null, $name = null)
+ {
+ $this->role = $role;
+ $this->scheme = $scheme;
+ $this->name = $name;
+ }
+
+ function __toString()
+ {
+ // There is no $this->data here
+ return md5(serialize($this));
+ }
+
+ function get_role()
+ {
+ if ($this->role !== null)
+ {
+ return $this->role;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_scheme()
+ {
+ if ($this->scheme !== null)
+ {
+ return $this->scheme;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_name()
+ {
+ if ($this->name !== null)
+ {
+ return $this->name;
+ }
+ else
+ {
+ return null;
+ }
+ }
+}
+
+class SimplePie_Copyright
+{
+ var $url;
+ var $label;
+
+ // Constructor, used to input the data
+ function SimplePie_Copyright($url = null, $label = null)
+ {
+ $this->url = $url;
+ $this->label = $label;
+ }
+
+ function __toString()
+ {
+ // There is no $this->data here
+ return md5(serialize($this));
+ }
+
+ function get_url()
+ {
+ if ($this->url !== null)
+ {
+ return $this->url;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_attribution()
+ {
+ if ($this->label !== null)
+ {
+ return $this->label;
+ }
+ else
+ {
+ return null;
+ }
+ }
+}
+
+class SimplePie_Rating
+{
+ var $scheme;
+ var $value;
+
+ // Constructor, used to input the data
+ function SimplePie_Rating($scheme = null, $value = null)
+ {
+ $this->scheme = $scheme;
+ $this->value = $value;
+ }
+
+ function __toString()
+ {
+ // There is no $this->data here
+ return md5(serialize($this));
+ }
+
+ function get_scheme()
+ {
+ if ($this->scheme !== null)
+ {
+ return $this->scheme;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_value()
+ {
+ if ($this->value !== null)
+ {
+ return $this->value;
+ }
+ else
+ {
+ return null;
+ }
+ }
+}
+
+class SimplePie_Restriction
+{
+ var $relationship;
+ var $type;
+ var $value;
+
+ // Constructor, used to input the data
+ function SimplePie_Restriction($relationship = null, $type = null, $value = null)
+ {
+ $this->relationship = $relationship;
+ $this->type = $type;
+ $this->value = $value;
+ }
+
+ function __toString()
+ {
+ // There is no $this->data here
+ return md5(serialize($this));
+ }
+
+ function get_relationship()
+ {
+ if ($this->relationship !== null)
+ {
+ return $this->relationship;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_type()
+ {
+ if ($this->type !== null)
+ {
+ return $this->type;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_value()
+ {
+ if ($this->value !== null)
+ {
+ return $this->value;
+ }
+ else
+ {
+ return null;
+ }
+ }
+}
+
+/**
+ * @todo Move to properly supporting RFC2616 (HTTP/1.1)
+ */
+class SimplePie_File
+{
+ var $url;
+ var $useragent;
+ var $success = true;
+ var $headers = array();
+ var $body;
+ var $status_code;
+ var $redirects = 0;
+ var $error;
+ var $method;
+
+ function SimplePie_File($url, $timeout = 10, $redirects = 5, $headers = null, $useragent = null, $force_fsockopen = false)
+ {
+ if (class_exists('idna_convert'))
+ {
+ $idn =& new idna_convert;
+ $parsed = SimplePie_Misc::parse_url($url);
+ $url = SimplePie_Misc::compress_parse_url($parsed['scheme'], $idn->encode($parsed['authority']), $parsed['path'], $parsed['query'], $parsed['fragment']);
+ }
+ $this->url = $url;
+ $this->useragent = $useragent;
+ if (preg_match('/^http(s)?:\/\//i', $url))
+ {
+ if ($useragent === null)
+ {
+ $useragent = ini_get('user_agent');
+ $this->useragent = $useragent;
+ }
+ if (!is_array($headers))
+ {
+ $headers = array();
+ }
+ if (!$force_fsockopen && extension_loaded('curl'))
+ {
+ $this->method = 'curl';
+ $fp = curl_init();
+ $headers2 = array();
+ foreach ($headers as $key => $value)
+ {
+ $headers2[] = "$key: $value";
+ }
+ if (version_compare(SimplePie_Misc::get_curl_version(), '7.10.5', '>='))
+ {
+ curl_setopt($fp, CURLOPT_ENCODING, '');
+ }
+ curl_setopt($fp, CURLOPT_URL, $url);
+ curl_setopt($fp, CURLOPT_HEADER, 1);
+ curl_setopt($fp, CURLOPT_RETURNTRANSFER, 1);
+ curl_setopt($fp, CURLOPT_TIMEOUT, $timeout);
+ curl_setopt($fp, CURLOPT_CONNECTTIMEOUT, $timeout);
+ curl_setopt($fp, CURLOPT_REFERER, $url);
+ curl_setopt($fp, CURLOPT_USERAGENT, $useragent);
+ curl_setopt($fp, CURLOPT_HTTPHEADER, $headers2);
+ if (!ini_get('open_basedir') && !ini_get('safe_mode') && version_compare(SimplePie_Misc::get_curl_version(), '7.15.2', '>='))
+ {
+ curl_setopt($fp, CURLOPT_FOLLOWLOCATION, 1);
+ curl_setopt($fp, CURLOPT_MAXREDIRS, $redirects);
+ }
+
+ $this->headers = curl_exec($fp);
+ if (curl_errno($fp) == 23 || curl_errno($fp) == 61)
+ {
+ curl_setopt($fp, CURLOPT_ENCODING, 'none');
+ $this->headers = curl_exec($fp);
+ }
+ if (curl_errno($fp))
+ {
+ $this->error = 'cURL error ' . curl_errno($fp) . ': ' . curl_error($fp);
+ $this->success = false;
+ }
+ else
+ {
+ $info = curl_getinfo($fp);
+ curl_close($fp);
+ $this->headers = explode("\r\n\r\n", $this->headers, $info['redirect_count'] + 1);
+ $this->headers = array_pop($this->headers);
+ $parser =& new SimplePie_HTTP_Parser($this->headers);
+ if ($parser->parse())
+ {
+ $this->headers = $parser->headers;
+ $this->body = $parser->body;
+ $this->status_code = $parser->status_code;
+ if (($this->status_code == 300 || $this->status_code == 301 || $this->status_code == 302 || $this->status_code == 303 || $this->status_code == 307 || $this->status_code > 307 && $this->status_code < 400) && isset($this->headers['location']) && $this->redirects < $redirects)
+ {
+ $this->redirects++;
+ if (isset($this->headers['content-location']))
+ {
+ $location = SimplePie_Misc::absolutize_url($this->headers['location'], SimplePie_Misc::absolutize_url($this->headers['content-location'], $url));
+ }
+ else
+ {
+ $location = SimplePie_Misc::absolutize_url($this->headers['location'], $url);
+ }
+ return $this->SimplePie_File($location, $timeout, $redirects, $headers, $useragent, $force_fsockopen);
+ }
+ }
+ }
+ }
+ else
+ {
+ $this->method = 'fsockopen';
+ $url_parts = parse_url($url);
+ if (isset($url_parts['scheme']) && strtolower($url_parts['scheme']) == 'https')
+ {
+ $url_parts['host'] = "ssl://$url_parts[host]";
+ $url_parts['port'] = 443;
+ }
+ if (!isset($url_parts['port']))
+ {
+ $url_parts['port'] = 80;
+ }
+ $fp = fsockopen($url_parts['host'], $url_parts['port'], $errno, $errstr, $timeout);
+ if (!$fp)
+ {
+ $this->error = 'fsockopen error: ' . $errstr;
+ $this->success = false;
+ }
+ else
+ {
+ if (function_exists('stream_set_timeout'))
+ {
+ stream_set_timeout($fp, $timeout);
+ }
+ else
+ {
+ socket_set_timeout($fp, $timeout);
+ }
+ if (isset($url_parts['path']))
+ {
+ if (isset($url_parts['query']))
+ {
+ $get = "$url_parts[path]?$url_parts[query]";
+ }
+ else
+ {
+ $get = $url_parts['path'];
+ }
+ }
+ else
+ {
+ $get = '/';
+ }
+ $out = "GET $get HTTP/1.0\r\n";
+ $out .= "Host: $url_parts[host]\r\n";
+ $out .= "User-Agent: $useragent\r\n";
+ if (function_exists('gzinflate'))
+ {
+ $out .= "Accept-Encoding: gzip,deflate\r\n";
+ }
+
+ if (isset($url_parts['user']) && isset($url_parts['pass']))
+ {
+ $out .= "Authorization: Basic " . base64_encode("$url_parts[user]:$url_parts[pass]") . "\r\n";
+ }
+ foreach ($headers as $key => $value)
+ {
+ $out .= "$key: $value\r\n";
+ }
+ $out .= "Connection: Close\r\n\r\n";
+ fwrite($fp, $out);
+
+ if (function_exists('stream_get_meta_data'))
+ {
+ $info = stream_get_meta_data($fp);
+ }
+ else
+ {
+ $info = socket_get_status($fp);
+ }
+
+ $this->headers = '';
+ while (!$info['eof'] && !$info['timed_out'])
+ {
+ $this->headers .= fread($fp, 1160);
+ if (function_exists('stream_get_meta_data'))
+ {
+ $info = stream_get_meta_data($fp);
+ }
+ else
+ {
+ $info = socket_get_status($fp);
+ }
+ }
+ if (!$info['timed_out'])
+ {
+ $parser =& new SimplePie_HTTP_Parser($this->headers);
+ if ($parser->parse())
+ {
+ $this->headers = $parser->headers;
+ $this->body = $parser->body;
+ $this->status_code = $parser->status_code;
+ if (($this->status_code == 300 || $this->status_code == 301 || $this->status_code == 302 || $this->status_code == 303 || $this->status_code == 307 || $this->status_code > 307 && $this->status_code < 400) && isset($this->headers['location']) && $this->redirects < $redirects)
+ {
+ $this->redirects++;
+ if (isset($this->headers['content-location']))
+ {
+ $location = SimplePie_Misc::absolutize_url($this->headers['location'], SimplePie_Misc::absolutize_url($this->headers['content-location'], $url));
+ }
+ else
+ {
+ $location = SimplePie_Misc::absolutize_url($this->headers['location'], $url);
+ }
+ return $this->SimplePie_File($location, $timeout, $redirects, $headers, $useragent, $force_fsockopen);
+ }
+ if (isset($this->headers['content-encoding']) && ($this->headers['content-encoding'] == 'gzip' || $this->headers['content-encoding'] == 'deflate'))
+ {
+ if (substr($this->body, 0, 8) == "\x1f\x8b\x08\x00\x00\x00\x00\x00")
+ {
+ $this->body = substr($this->body, 10);
+ }
+ $this->body = gzinflate($this->body);
+ }
+ }
+ }
+ else
+ {
+ $this->error = 'fsocket timed out';
+ $this->success = false;
+ }
+ fclose($fp);
+ }
+ }
+ }
+ elseif (function_exists('file_get_contents'))
+ {
+ $this->method = 'file_get_contents';
+ if (!$this->body = file_get_contents($url))
+ {
+ $this->error = 'file_get_contents could not read the file';
+ $this->success = false;
+ }
+ }
+ else
+ {
+ $this->method = 'fopen';
+ if (($fp = fopen($url, 'rb')) === false)
+ {
+ $this->error = 'failed to open stream: No such file or directory';
+ $this->success = false;
+ }
+ else
+ {
+ $this->body = '';
+ while (!feof($fp))
+ {
+ $this->body .= fread($fp, 8192);
+ }
+ fclose($fp);
+ }
+ }
+ }
+}
+
+/**
+ * HTTP Response Parser
+ *
+ * @package SimplePie
+ * @todo Support HTTP Requests
+ */
+class SimplePie_HTTP_Parser
+{
+ /**
+ * HTTP Version
+ *
+ * @access public
+ * @var string
+ */
+ var $http_version = '';
+
+ /**
+ * Status code
+ *
+ * @access public
+ * @var string
+ */
+ var $status_code = '';
+
+ /**
+ * Reason phrase
+ *
+ * @access public
+ * @var string
+ */
+ var $reason = '';
+
+ /**
+ * Key/value pairs of the headers
+ *
+ * @access public
+ * @var array
+ */
+ var $headers = array();
+
+ /**
+ * Body of the response
+ *
+ * @access public
+ * @var string
+ */
+ var $body = '';
+
+ /**
+ * Current state of the state machine
+ *
+ * @access private
+ * @var string
+ */
+ var $state = 'start';
+
+ /**
+ * Input data
+ *
+ * @access private
+ * @var string
+ */
+ var $data = '';
+
+ /**
+ * Input data length (to avoid calling strlen() everytime this is needed)
+ *
+ * @access private
+ * @var int
+ */
+ var $data_length = 0;
+
+ /**
+ * Current position of the pointer
+ *
+ * @access private
+ * @var int
+ */
+ var $position = 0;
+
+ /**
+ * Name of the hedaer currently being parsed
+ *
+ * @access private
+ * @var string
+ */
+ var $name = '';
+
+ /**
+ * Value of the hedaer currently being parsed
+ *
+ * @access private
+ * @var string
+ */
+ var $value = '';
+
+ /**
+ * Create an instance of the class with the input data
+ *
+ * @access public
+ * @param string $data Input data
+ */
+ function SimplePie_HTTP_Parser($data)
+ {
+ $this->data = $data;
+ $this->data_length = strlen($this->data);
+ }
+
+ /**
+ * Parse the input data
+ *
+ * @access public
+ * @return bool true on success, false on failure
+ */
+ function parse()
+ {
+ while ($this->state && $this->state != 'emit' && $this->has_data())
+ {
+ $state = $this->state;
+ $this->$state();
+ }
+ $this->data = '';
+ if ($this->state == 'emit')
+ {
+ return true;
+ }
+ else
+ {
+ $this->http_version = '';
+ $this->status_code = '';
+ $this->headers = array();
+ $this->body = '';
+ return false;
+ }
+ }
+
+ /**
+ * Check whether there is data beyond the pointer
+ *
+ * @access private
+ * @return bool true if there is further data, false if not
+ */
+ function has_data()
+ {
+ return (bool) ($this->position < $this->data_length);
+ }
+
+ /**
+ * See if the next character is LWS
+ *
+ * @access private
+ * @return bool true if the next character is LWS, false if not
+ */
+ function is_linear_whitespace()
+ {
+ return (bool) (strspn($this->data, "\x09\x20", $this->position, 1)
+ || (substr($this->data, $this->position, 2) == "\r\n" && strspn($this->data, "\x09\x20", $this->position + 2, 1))
+ || (strspn($this->data, "\r\n", $this->position, 1) && strspn($this->data, "\x09\x20", $this->position + 1, 1)));
+ }
+
+ /**
+ * The starting state of the state machine, see if the data is a response or request
+ *
+ * @access private
+ */
+ function start()
+ {
+ $this->state = 'http_version_response';
+ }
+
+ /**
+ * Parse an HTTP-version string
+ *
+ * @access private
+ */
+ function http_version()
+ {
+ if (preg_match('/^HTTP\/([0-9]+\.[0-9]+)/i', substr($this->data, $this->position, strcspn($this->data, "\r\n", $this->position)), $match))
+ {
+ $this->position += strlen($match[0]);
+ $this->http_version = $match[1];
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ /**
+ * Parse LWS, replacing consecutive characters with a single space
+ *
+ * @access private
+ */
+ function linear_whitespace()
+ {
+ do
+ {
+ if (substr($this->data, $this->position, 2) == "\r\n")
+ {
+ $this->position += 2;
+ }
+ elseif (strspn($this->data, "\r\n", $this->position, 1))
+ {
+ $this->position++;
+ }
+ $this->position += strspn($this->data, "\x09\x20", $this->position);
+ } while ($this->is_linear_whitespace());
+ $this->value .= "\x20";
+ }
+
+ /**
+ * Parse an HTTP-version string within a response
+ *
+ * @access private
+ */
+ function http_version_response()
+ {
+ if ($this->http_version() && $this->data[$this->position] == "\x20")
+ {
+ $this->state = 'status_code';
+ $this->position++;
+ }
+ else
+ {
+ $this->state = false;
+ }
+ }
+
+ /**
+ * Parse a status code
+ *
+ * @access private
+ */
+ function status_code()
+ {
+ if (strspn($this->data, '1234567890', $this->position, 3) == 3)
+ {
+ $this->status_code = substr($this->data, $this->position, 3);
+ $this->state = 'reason_phrase';
+ $this->position += 3;
+ }
+ else
+ {
+ $this->state = false;
+ }
+ }
+
+ /**
+ * Skip over the reason phrase (it has no normative value, and you can send absolutely anything here)
+ *
+ * @access private
+ */
+ function reason_phrase()
+ {
+ $len = strcspn($this->data, "\r\n", $this->position);
+ $this->reason = substr($this->data, $this->position, $len);
+ $this->position += $len;
+ if ($this->has_data())
+ {
+ if (substr($this->data, $this->position, 2) == "\r\n")
+ {
+ $this->position += 2;
+ }
+ elseif (strspn($this->data, "\r\n", $this->position, 1))
+ {
+ $this->position++;
+ }
+ $this->state = 'name';
+ }
+ }
+
+ /**
+ * Parse a header name
+ *
+ * @access private
+ */
+ function name()
+ {
+ $len = strcspn($this->data, ':', $this->position);
+ $this->name = substr($this->data, $this->position, $len);
+ $this->position += $len;
+
+ if ($this->has_data() && $this->data[$this->position] == ':')
+ {
+ $this->state = 'value_next';
+ $this->position++;
+ }
+ else
+ {
+ $this->state = false;
+ }
+ }
+
+ /**
+ * See what state to move the state machine to while within non-quoted header values
+ *
+ * @access private
+ */
+ function value_next()
+ {
+ if ($this->is_linear_whitespace())
+ {
+ $this->state = 'value_linear_whitespace';
+ }
+ elseif ($this->data[$this->position] == '"')
+ {
+ $this->state = 'value_quote_next';
+ $this->position++;
+ }
+ elseif (substr($this->data, $this->position, 2) == "\r\n")
+ {
+ $this->state = 'end_crlf';
+ $this->position += 2;
+ }
+ elseif (strspn($this->data, "\r\n", $this->position, 1))
+ {
+ $this->state = 'end_crlf';
+ $this->position++;
+ }
+ else
+ {
+ $this->state = 'value_no_quote';
+ }
+ }
+
+ /**
+ * Parse a header value while outside quotes
+ *
+ * @access private
+ */
+ function value_no_quote()
+ {
+ $len = strcspn($this->data, "\x09\x20\r\n\"", $this->position);
+ $this->value .= substr($this->data, $this->position, $len);
+ $this->state = 'value_next';
+ $this->position += $len;
+ }
+
+ /**
+ * Parse LWS outside quotes
+ *
+ * @access private
+ */
+ function value_linear_whitespace()
+ {
+ $this->linear_whitespace();
+ $this->state = 'value_next';
+ }
+
+ /**
+ * See what state to move the state machine to while within quoted header values
+ *
+ * @access private
+ */
+ function value_quote_next()
+ {
+ if ($this->is_linear_whitespace())
+ {
+ $this->state = 'value_linear_whitespace_quote';
+ }
+ else
+ {
+ switch ($this->data[$this->position])
+ {
+ case '"':
+ $this->state = 'value_next';
+ $this->position++;
+ break;
+
+ case '\\':
+ $this->state = 'value_quote_char';
+ $this->position++;
+ break;
+
+ default:
+ $this->state = 'value_quote';
+ break;
+ }
+ }
+ }
+
+ /**
+ * Parse a header value while within quotes
+ *
+ * @access private
+ */
+ function value_quote()
+ {
+ $len = strcspn($this->data, "\x09\x20\r\n\"\\", $this->position);
+ $this->value .= substr($this->data, $this->position, $len);
+ $this->position += $len;
+ $this->state = 'value_quote_next';
+ }
+
+ /**
+ * Parse an escaped character within quotes
+ *
+ * @access private
+ */
+ function value_quote_char()
+ {
+ $this->value .= $this->data[$this->position];
+ $this->state = 'value_quote_next';
+ $this->position++;
+ }
+
+ /**
+ * Parse LWS within quotes
+ *
+ * @access private
+ */
+ function value_linear_whitespace_quote()
+ {
+ $this->linear_whitespace();
+ $this->state = 'value_quote_next';
+ }
+
+ /**
+ * Parse a CRLF, and see whether we have a further header, or whether we are followed by the body
+ *
+ * @access private
+ */
+ function end_crlf()
+ {
+ $this->name = strtolower($this->name);
+ $this->value = trim($this->value, "\x20");
+ if (isset($this->headers[$this->name]))
+ {
+ $this->headers[$this->name] .= ', ' . $this->value;
+ }
+ else
+ {
+ $this->headers[$this->name] = $this->value;
+ }
+
+ if (substr($this->data, $this->position, 2) == "\r\n")
+ {
+ $this->body = substr($this->data, $this->position + 2);
+ $this->state = 'emit';
+ }
+ elseif (strspn($this->data, "\r\n", $this->position, 1))
+ {
+ $this->body = substr($this->data, $this->position + 1);
+ $this->state = 'emit';
+ }
+ else
+ {
+ $this->name = '';
+ $this->value = '';
+ $this->state = 'name';
+ }
+ }
+}
+
+class SimplePie_Cache
+{
+ var $location;
+ var $filename;
+ var $extension;
+ var $name;
+
+ function SimplePie_Cache($location, $filename, $extension)
+ {
+ $this->location = $location;
+ $this->filename = rawurlencode($filename);
+ $this->extension = rawurlencode($extension);
+ $this->name = "$location/$this->filename.$this->extension";
+ }
+
+ function save($data)
+ {
+ if (file_exists($this->name) && is_writeable($this->name) || file_exists($this->location) && is_writeable($this->location))
+ {
+ if (function_exists('file_put_contents'))
+ {
+ return (bool) file_put_contents($this->name, serialize($data));
+ }
+ else
+ {
+ $fp = fopen($this->name, 'wb');
+ if ($fp)
+ {
+ fwrite($fp, serialize($data));
+ fclose($fp);
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ function load()
+ {
+ if (file_exists($this->name) && is_readable($this->name))
+ {
+ if (function_exists('file_get_contents'))
+ {
+ return unserialize(file_get_contents($this->name));
+ }
+ elseif (($fp = fopen($this->name, 'rb')) !== false)
+ {
+ $data = '';
+ while (!feof($fp))
+ {
+ $data .= fread($fp, 8192);
+ }
+ fclose($fp);
+ return unserialize($data);
+ }
+ }
+ return false;
+ }
+
+ function mtime()
+ {
+ if (file_exists($this->name))
+ {
+ return filemtime($this->name);
+ }
+ return false;
+ }
+
+ function touch()
+ {
+ if (file_exists($this->name))
+ {
+ return touch($this->name);
+ }
+ return false;
+ }
+
+ function unlink()
+ {
+ if (file_exists($this->name))
+ {
+ return unlink($this->name);
+ }
+ return false;
+ }
+}
+
+class SimplePie_Misc
+{
+ function time_hms($seconds)
+ {
+ $time = '';
+
+ $hours = floor($seconds / 3600);
+ $remainder = $seconds % 3600;
+ if ($hours > 0)
+ {
+ $time .= $hours.':';
+ }
+
+ $minutes = floor($remainder / 60);
+ $seconds = $remainder % 60;
+ if ($minutes < 10 && $hours > 0)
+ {
+ $minutes = '0' . $minutes;
+ }
+ if ($seconds < 10)
+ {
+ $seconds = '0' . $seconds;
+ }
+
+ $time .= $minutes.':';
+ $time .= $seconds;
+
+ return $time;
+ }
+
+ function absolutize_url($relative, $base)
+ {
+ if ($relative !== '')
+ {
+ $relative = SimplePie_Misc::parse_url($relative);
+ if ($relative['scheme'] !== '')
+ {
+ $target = $relative;
+ }
+ elseif ($base !== '')
+ {
+ $base = SimplePie_Misc::parse_url($base);
+ $target = SimplePie_Misc::parse_url('');
+ if ($relative['authority'] !== '')
+ {
+ $target = $relative;
+ $target['scheme'] = $base['scheme'];
+ }
+ else
+ {
+ $target['scheme'] = $base['scheme'];
+ $target['authority'] = $base['authority'];
+ if ($relative['path'] !== '')
+ {
+ if (strpos($relative['path'], '/') === 0)
+ {
+ $target['path'] = $relative['path'];
+ }
+ elseif (($target['path'] = dirname("$base[path].")) == '/')
+ {
+ $target['path'] .= $relative['path'];
+ }
+ else
+ {
+ $target['path'] .= '/' . $relative['path'];
+ }
+ if ($relative['query'] !== '')
+ {
+ $target['query'] = $relative['query'];
+ }
+ }
+ else
+ {
+ if ($base['path'] !== '')
+ {
+ $target['path'] = $base['path'];
+ }
+ else
+ {
+ $target['path'] = '/';
+ }
+ if ($relative['query'] !== '')
+ {
+ $target['query'] = $relative['query'];
+ }
+ elseif ($base['query'] !== '')
+ {
+ $target['query'] = $base['query'];
+ }
+ }
+ }
+ if ($relative['fragment'] !== '')
+ {
+ $target['fragment'] = $relative['fragment'];
+ }
+ }
+ else
+ {
+ // No base URL, just return the relative URL
+ $target = $relative;
+ }
+ $return = SimplePie_Misc::compress_parse_url($target['scheme'], $target['authority'], $target['path'], $target['query'], $target['fragment']);
+ }
+ else
+ {
+ $return = $base;
+ }
+ $return = SimplePie_Misc::normalize_url($return);
+ return $return;
+ }
+
+ function remove_dot_segments($input)
+ {
+ $output = '';
+ while (strpos($input, './') !== false || strpos($input, '/.') !== false || $input == '.' || $input == '..')
+ {
+ // A: If the input buffer begins with a prefix of "../" or "./", then remove that prefix from the input buffer; otherwise,
+ if (strpos($input, '../') === 0)
+ {
+ $input = substr($input, 3);
+ }
+ elseif (strpos($input, './') === 0)
+ {
+ $input = substr($input, 2);
+ }
+ // B: if the input buffer begins with a prefix of "/./" or "/.", where "." is a complete path segment, then replace that prefix with "/" in the input buffer; otherwise,
+ elseif (strpos($input, '/./') === 0)
+ {
+ $input = substr_replace($input, '/', 0, 3);
+ }
+ elseif ($input == '/.')
+ {
+ $input = '/';
+ }
+ // C: if the input buffer begins with a prefix of "/../" or "/..", where ".." is a complete path segment, then replace that prefix with "/" in the input buffer and remove the last segment and its preceding "/" (if any) from the output buffer; otherwise,
+ elseif (strpos($input, '/../') === 0)
+ {
+ $input = substr_replace($input, '/', 0, 4);
+ $output = substr_replace($output, '', strrpos($output, '/'));
+ }
+ elseif ($input == '/..')
+ {
+ $input = '/';
+ $output = substr_replace($output, '', strrpos($output, '/'));
+ }
+ // D: if the input buffer consists only of "." or "..", then remove that from the input buffer; otherwise,
+ elseif ($input == '.' || $input == '..')
+ {
+ $input = '';
+ }
+ // E: move the first path segment in the input buffer to the end of the output buffer, including the initial "/" character (if any) and any subsequent characters up to, but not including, the next "/" character or the end of the input buffer
+ elseif (($pos = strpos($input, '/', 1)) !== false)
+ {
+ $output .= substr($input, 0, $pos);
+ $input = substr_replace($input, '', 0, $pos);
+ }
+ else
+ {
+ $output .= $input;
+ $input = '';
+ }
+ }
+ return $output . $input;
+ }
+
+ function get_element($realname, $string)
+ {
+ $return = array();
+ $name = preg_quote($realname, '/');
+ if (preg_match_all("/<($name)" . SIMPLEPIE_PCRE_HTML_ATTRIBUTE . "(>(.*)<\/$name>|(\/)?>)/siU", $string, $matches, PREG_SET_ORDER | PREG_OFFSET_CAPTURE))
+ {
+ for ($i = 0, $total_matches = count($matches); $i < $total_matches; $i++)
+ {
+ $return[$i]['tag'] = $realname;
+ $return[$i]['full'] = $matches[$i][0][0];
+ $return[$i]['offset'] = $matches[$i][0][1];
+ if (strlen($matches[$i][3][0]) <= 2)
+ {
+ $return[$i]['self_closing'] = true;
+ }
+ else
+ {
+ $return[$i]['self_closing'] = false;
+ $return[$i]['content'] = $matches[$i][4][0];
+ }
+ $return[$i]['attribs'] = array();
+ if (isset($matches[$i][2][0]) && preg_match_all('/((?:[^\s:]+:)?[^\s:]+)(?:\s*=\s*(?:"([^"]*)"|\'([^\']*)\'|([a-z0-9\-._:]*)))?\s/U', ' ' . $matches[$i][2][0] . ' ', $attribs, PREG_SET_ORDER))
+ {
+ for ($j = 0, $total_attribs = count($attribs); $j < $total_attribs; $j++)
+ {
+ if (count($attribs[$j]) == 2)
+ {
+ $attribs[$j][2] = $attribs[$j][1];
+ }
+ $return[$i]['attribs'][strtolower($attribs[$j][1])]['data'] = SimplePie_Misc::entities_decode(end($attribs[$j]), 'UTF-8');
+ }
+ }
+ }
+ }
+ return $return;
+ }
+
+ function element_implode($element)
+ {
+ $full = "<$element[tag]";
+ foreach ($element['attribs'] as $key => $value)
+ {
+ $key = strtolower($key);
+ $full .= " $key=\"" . htmlspecialchars($value['data']) . '"';
+ }
+ if ($element['self_closing'])
+ {
+ $full .= ' />';
+ }
+ else
+ {
+ $full .= ">$element[content]</$element[tag]>";
+ }
+ return $full;
+ }
+
+ function error($message, $level, $file, $line)
+ {
+ switch ($level)
+ {
+ case E_USER_ERROR:
+ $note = 'PHP Error';
+ break;
+ case E_USER_WARNING:
+ $note = 'PHP Warning';
+ break;
+ case E_USER_NOTICE:
+ $note = 'PHP Notice';
+ break;
+ default:
+ $note = 'Unknown Error';
+ break;
+ }
+ error_log("$note: $message in $file on line $line", 0);
+ return $message;
+ }
+
+ /**
+ * If a file has been cached, retrieve and display it.
+ *
+ * This is most useful for caching images (get_favicon(), etc.),
+ * however it works for all cached files. This WILL NOT display ANY
+ * file/image/page/whatever, but rather only display what has already
+ * been cached by SimplePie.
+ *
+ * @access public
+ * @see SimplePie::get_favicon()
+ * @param str $identifier_url URL that is used to identify the content.
+ * This may or may not be the actual URL of the live content.
+ * @param str $cache_location Location of SimplePie's cache. Defaults
+ * to './cache'.
+ * @param str $cache_extension The file extension that the file was
+ * cached with. Defaults to 'spc'.
+ * @param str $cache_class Name of the cache-handling class being used
+ * in SimplePie. Defaults to 'SimplePie_Cache', and should be left
+ * as-is unless you've overloaded the class.
+ * @param str $cache_name_function Function that converts the filename
+ * for saving. Defaults to 'md5'.
+ */
+ function display_cached_file($identifier_url, $cache_location = './cache', $cache_extension = 'spc', $cache_class = 'SimplePie_Cache', $cache_name_function = 'md5')
+ {
+ $cache =& new $cache_class($cache_location, call_user_func($cache_name_function, $identifier_url), $cache_extension);
+
+ if ($file = $cache->load())
+ {
+ header('Content-type:' . $file['headers']['content-type']);
+ header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 604800) . ' GMT'); // 7 days
+ echo $file['body'];
+ exit;
+ }
+
+ die('Cached file for ' . $identifier_url . ' cannot be found.');
+ }
+
+ function fix_protocol($url, $http = 1)
+ {
+ $url = SimplePie_Misc::normalize_url($url);
+ $parsed = SimplePie_Misc::parse_url($url);
+ if ($parsed['scheme'] !== '' && $parsed['scheme'] != 'http' && $parsed['scheme'] != 'https')
+ {
+ return SimplePie_Misc::fix_protocol(SimplePie_Misc::compress_parse_url('http', $parsed['authority'], $parsed['path'], $parsed['query'], $parsed['fragment']), $http);
+ }
+
+ if ($parsed['scheme'] === '' && $parsed['authority'] === '' && !file_exists($url))
+ {
+ return SimplePie_Misc::fix_protocol(SimplePie_Misc::compress_parse_url('http', $parsed['path'], '', $parsed['query'], $parsed['fragment']), $http);
+ }
+
+ if ($http == 2 && $parsed['scheme'] !== '')
+ {
+ return "feed:$url";
+ }
+ elseif ($http == 3 && strtolower($parsed['scheme']) == 'http')
+ {
+ return substr_replace($url, 'podcast', 0, 4);
+ }
+ elseif ($http == 4 && strtolower($parsed['scheme']) == 'http')
+ {
+ return substr_replace($url, 'itpc', 0, 4);
+ }
+ else
+ {
+ return $url;
+ }
+ }
+
+ function parse_url($url)
+ {
+ static $cache = array();
+ if (isset($cache[$url]))
+ {
+ return $cache[$url];
+ }
+ elseif (preg_match('/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/', $url, $match))
+ {
+ for ($i = count($match); $i <= 9; $i++)
+ {
+ $match[$i] = '';
+ }
+ return $cache[$url] = array('scheme' => $match[2], 'authority' => $match[4], 'path' => $match[5], 'query' => $match[7], 'fragment' => $match[9]);
+ }
+ else
+ {
+ return $cache[$url] = array('scheme' => '', 'authority' => '', 'path' => '', 'query' => '', 'fragment' => '');
+ }
+ }
+
+ function compress_parse_url($scheme = '', $authority = '', $path = '', $query = '', $fragment = '')
+ {
+ $return = '';
+ if ($scheme !== '')
+ {
+ $return .= "$scheme:";
+ }
+ if ($authority !== '')
+ {
+ $return .= "//$authority";
+ }
+ if ($path !== '')
+ {
+ $return .= $path;
+ }
+ if ($query !== '')
+ {
+ $return .= "?$query";
+ }
+ if ($fragment !== '')
+ {
+ $return .= "#$fragment";
+ }
+ return $return;
+ }
+
+ function normalize_url($url)
+ {
+ $url = preg_replace_callback('/%([0-9A-Fa-f]{2})/', array('SimplePie_Misc', 'percent_encoding_normalization'), $url);
+ $url = SimplePie_Misc::parse_url($url);
+ $url['scheme'] = strtolower($url['scheme']);
+ if ($url['authority'] !== '')
+ {
+ $url['authority'] = strtolower($url['authority']);
+ $url['path'] = SimplePie_Misc::remove_dot_segments($url['path']);
+ }
+ return SimplePie_Misc::compress_parse_url($url['scheme'], $url['authority'], $url['path'], $url['query'], $url['fragment']);
+ }
+
+ function percent_encoding_normalization($match)
+ {
+ $integer = hexdec($match[1]);
+ if ($integer >= 0x41 && $integer <= 0x5A || $integer >= 0x61 && $integer <= 0x7A || $integer >= 0x30 && $integer <= 0x39 || $integer == 0x2D || $integer == 0x2E || $integer == 0x5F || $integer == 0x7E)
+ {
+ return chr($integer);
+ }
+ else
+ {
+ return strtoupper($match[0]);
+ }
+ }
+
+ /**
+ * Remove bad UTF-8 bytes
+ *
+ * PCRE Pattern to locate bad bytes in a UTF-8 string comes from W3C
+ * FAQ: Multilingual Forms (modified to include full ASCII range)
+ *
+ * @author Geoffrey Sneddon
+ * @see http://www.w3.org/International/questions/qa-forms-utf-8
+ * @param string $str String to remove bad UTF-8 bytes from
+ * @return string UTF-8 string
+ */
+ function utf8_bad_replace($str)
+ {
+ if (function_exists('iconv'))
+ {
+ $out = iconv('UTF-8', 'UTF-8//IGNORE', $str);
+ if($out !== false) return $out;
+ }
+ if (function_exists('mb_convert_encoding'))
+ {
+ return mb_convert_encoding($str, 'UTF-8', 'UTF-8');
+ }
+ elseif (preg_match_all('/([\x00-\x7F]|[\xC2-\xDF][\x80-\xBF]|\xE0[\xA0-\xBF][\x80-\xBF]|[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}|\xED[\x80-\x9F][\x80-\xBF]|\xF0[\x90-\xBF][\x80-\xBF]{2}|[\xF1-\xF3][\x80-\xBF]{3}|\xF4[\x80-\x8F][\x80-\xBF]{2})/', $str, $matches))
+ {
+ return implode("\xEF\xBF\xBD", $matches[0]);
+ }
+ elseif ($str !== '')
+ {
+ return "\xEF\xBF\xBD";
+ }
+ else
+ {
+ return '';
+ }
+ }
+
+ function change_encoding($data, $input, $output)
+ {
+ $input = SimplePie_Misc::encoding($input);
+ $output = SimplePie_Misc::encoding($output);
+
+ if (function_exists('iconv') && ($return = @iconv($input, "$output//IGNORE", $data)))
+ {
+ return $return;
+ }
+ elseif (function_exists('iconv') && ($return = @iconv($input, $output, $data)))
+ {
+ return $return;
+ }
+ elseif (function_exists('mb_convert_encoding') && ($return = @mb_convert_encoding($data, $output, $input)))
+ {
+ return $return;
+ }
+ elseif ($input == 'ISO-8859-1' && $output == 'UTF-8')
+ {
+ return utf8_encode($data);
+ }
+ elseif ($input == 'UTF-8' && $output == 'ISO-8859-1')
+ {
+ return utf8_decode($data);
+ }
+ return $data;
+ }
+
+ function encoding($encoding)
+ {
+ // Character sets are case-insensitive (though we'll return them in the form given in their registration)
+ switch (strtoupper($encoding))
+ {
+ case 'ANSI_X3.4-1968':
+ case 'ISO-IR-6':
+ case 'ANSI_X3.4-1986':
+ case 'ISO_646.IRV:1991':
+ case 'ASCII':
+ case 'ISO646-US':
+ case 'US-ASCII':
+ case 'US':
+ case 'IBM367':
+ case 'CP367':
+ case 'CSASCII':
+ return 'US-ASCII';
+
+ case 'ISO_8859-1:1987':
+ case 'ISO-IR-100':
+ case 'ISO_8859-1':
+ case 'ISO-8859-1':
+ case 'LATIN1':
+ case 'L1':
+ case 'IBM819':
+ case 'CP819':
+ case 'CSISOLATIN1':
+ return 'ISO-8859-1';
+
+ case 'ISO_8859-2:1987':
+ case 'ISO-IR-101':
+ case 'ISO_8859-2':
+ case 'ISO-8859-2':
+ case 'LATIN2':
+ case 'L2':
+ case 'CSISOLATIN2':
+ return 'ISO-8859-2';
+
+ case 'ISO_8859-3:1988':
+ case 'ISO-IR-109':
+ case 'ISO_8859-3':
+ case 'ISO-8859-3':
+ case 'LATIN3':
+ case 'L3':
+ case 'CSISOLATIN3':
+ return 'ISO-8859-3';
+
+ case 'ISO_8859-4:1988':
+ case 'ISO-IR-110':
+ case 'ISO_8859-4':
+ case 'ISO-8859-4':
+ case 'LATIN4':
+ case 'L4':
+ case 'CSISOLATIN4':
+ return 'ISO-8859-4';
+
+ case 'ISO_8859-5:1988':
+ case 'ISO-IR-144':
+ case 'ISO_8859-5':
+ case 'ISO-8859-5':
+ case 'CYRILLIC':
+ case 'CSISOLATINCYRILLIC':
+ return 'ISO-8859-5';
+
+ case 'ISO_8859-6:1987':
+ case 'ISO-IR-127':
+ case 'ISO_8859-6':
+ case 'ISO-8859-6':
+ case 'ECMA-114':
+ case 'ASMO-708':
+ case 'ARABIC':
+ case 'CSISOLATINARABIC':
+ return 'ISO-8859-6';
+
+ case 'ISO_8859-7:1987':
+ case 'ISO-IR-126':
+ case 'ISO_8859-7':
+ case 'ISO-8859-7':
+ case 'ELOT_928':
+ case 'ECMA-118':
+ case 'GREEK':
+ case 'GREEK8':
+ case 'CSISOLATINGREEK':
+ return 'ISO-8859-7';
+
+ case 'ISO_8859-8:1988':
+ case 'ISO-IR-138':
+ case 'ISO_8859-8':
+ case 'ISO-8859-8':
+ case 'HEBREW':
+ case 'CSISOLATINHEBREW':
+ return 'ISO-8859-8';
+
+ case 'ISO_8859-9:1989':
+ case 'ISO-IR-148':
+ case 'ISO_8859-9':
+ case 'ISO-8859-9':
+ case 'LATIN5':
+ case 'L5':
+ case 'CSISOLATIN5':
+ return 'ISO-8859-9';
+
+ case 'ISO-8859-10':
+ case 'ISO-IR-157':
+ case 'L6':
+ case 'ISO_8859-10:1992':
+ case 'CSISOLATIN6':
+ case 'LATIN6':
+ return 'ISO-8859-10';
+
+ case 'ISO_6937-2-ADD':
+ case 'ISO-IR-142':
+ case 'CSISOTEXTCOMM':
+ return 'ISO_6937-2-add';
+
+ case 'JIS_X0201':
+ case 'X0201':
+ case 'CSHALFWIDTHKATAKANA':
+ return 'JIS_X0201';
+
+ case 'JIS_ENCODING':
+ case 'CSJISENCODING':
+ return 'JIS_Encoding';
+
+ case 'SHIFT_JIS':
+ case 'MS_KANJI':
+ case 'CSSHIFTJIS':
+ return 'Shift_JIS';
+
+ case 'EXTENDED_UNIX_CODE_PACKED_FORMAT_FOR_JAPANESE':
+ case 'CSEUCPKDFMTJAPANESE':
+ case 'EUC-JP':
+ return 'EUC-JP';
+
+ case 'EXTENDED_UNIX_CODE_FIXED_WIDTH_FOR_JAPANESE':
+ case 'CSEUCFIXWIDJAPANESE':
+ return 'Extended_UNIX_Code_Fixed_Width_for_Japanese';
+
+ case 'BS_4730':
+ case 'ISO-IR-4':
+ case 'ISO646-GB':
+ case 'GB':
+ case 'UK':
+ case 'CSISO4UNITEDKINGDOM':
+ return 'BS_4730';
+
+ case 'SEN_850200_C':
+ case 'ISO-IR-11':
+ case 'ISO646-SE2':
+ case 'SE2':
+ case 'CSISO11SWEDISHFORNAMES':
+ return 'SEN_850200_C';
+
+ case 'IT':
+ case 'ISO-IR-15':
+ case 'ISO646-IT':
+ case 'CSISO15ITALIAN':
+ return 'IT';
+
+ case 'ES':
+ case 'ISO-IR-17':
+ case 'ISO646-ES':
+ case 'CSISO17SPANISH':
+ return 'ES';
+
+ case 'DIN_66003':
+ case 'ISO-IR-21':
+ case 'DE':
+ case 'ISO646-DE':
+ case 'CSISO21GERMAN':
+ return 'DIN_66003';
+
+ case 'NS_4551-1':
+ case 'ISO-IR-60':
+ case 'ISO646-NO':
+ case 'NO':
+ case 'CSISO60DANISHNORWEGIAN':
+ case 'CSISO60NORWEGIAN1':
+ return 'NS_4551-1';
+
+ case 'NF_Z_62-010':
+ case 'ISO-IR-69':
+ case 'ISO646-FR':
+ case 'FR':
+ case 'CSISO69FRENCH':
+ return 'NF_Z_62-010';
+
+ case 'ISO-10646-UTF-1':
+ case 'CSISO10646UTF1':
+ return 'ISO-10646-UTF-1';
+
+ case 'ISO_646.BASIC:1983':
+ case 'REF':
+ case 'CSISO646BASIC1983':
+ return 'ISO_646.basic:1983';
+
+ case 'INVARIANT':
+ case 'CSINVARIANT':
+ return 'INVARIANT';
+
+ case 'ISO_646.IRV:1983':
+ case 'ISO-IR-2':
+ case 'IRV':
+ case 'CSISO2INTLREFVERSION':
+ return 'ISO_646.irv:1983';
+
+ case 'NATS-SEFI':
+ case 'ISO-IR-8-1':
+ case 'CSNATSSEFI':
+ return 'NATS-SEFI';
+
+ case 'NATS-SEFI-ADD':
+ case 'ISO-IR-8-2':
+ case 'CSNATSSEFIADD':
+ return 'NATS-SEFI-ADD';
+
+ case 'NATS-DANO':
+ case 'ISO-IR-9-1':
+ case 'CSNATSDANO':
+ return 'NATS-DANO';
+
+ case 'NATS-DANO-ADD':
+ case 'ISO-IR-9-2':
+ case 'CSNATSDANOADD':
+ return 'NATS-DANO-ADD';
+
+ case 'SEN_850200_B':
+ case 'ISO-IR-10':
+ case 'FI':
+ case 'ISO646-FI':
+ case 'ISO646-SE':
+ case 'SE':
+ case 'CSISO10SWEDISH':
+ return 'SEN_850200_B';
+
+ case 'KS_C_5601-1987':
+ case 'ISO-IR-149':
+ case 'KS_C_5601-1989':
+ case 'KSC_5601':
+ case 'KOREAN':
+ case 'CSKSC56011987':
+ return 'KS_C_5601-1987';
+
+ case 'ISO-2022-KR':
+ case 'CSISO2022KR':
+ return 'ISO-2022-KR';
+
+ case 'EUC-KR':
+ case 'CSEUCKR':
+ return 'EUC-KR';
+
+ case 'ISO-2022-JP':
+ case 'CSISO2022JP':
+ return 'ISO-2022-JP';
+
+ case 'ISO-2022-JP-2':
+ case 'CSISO2022JP2':
+ return 'ISO-2022-JP-2';
+
+ case 'JIS_C6220-1969-JP':
+ case 'JIS_C6220-1969':
+ case 'ISO-IR-13':
+ case 'KATAKANA':
+ case 'X0201-7':
+ case 'CSISO13JISC6220JP':
+ return 'JIS_C6220-1969-jp';
+
+ case 'JIS_C6220-1969-RO':
+ case 'ISO-IR-14':
+ case 'JP':
+ case 'ISO646-JP':
+ case 'CSISO14JISC6220RO':
+ return 'JIS_C6220-1969-ro';
+
+ case 'PT':
+ case 'ISO-IR-16':
+ case 'ISO646-PT':
+ case 'CSISO16PORTUGUESE':
+ return 'PT';
+
+ case 'GREEK7-OLD':
+ case 'ISO-IR-18':
+ case 'CSISO18GREEK7OLD':
+ return 'greek7-old';
+
+ case 'LATIN-GREEK':
+ case 'ISO-IR-19':
+ case 'CSISO19LATINGREEK':
+ return 'latin-greek';
+
+ case 'NF_Z_62-010_(1973)':
+ case 'ISO-IR-25':
+ case 'ISO646-FR1':
+ case 'CSISO25FRENCH':
+ return 'NF_Z_62-010_(1973)';
+
+ case 'LATIN-GREEK-1':
+ case 'ISO-IR-27':
+ case 'CSISO27LATINGREEK1':
+ return 'Latin-greek-1';
+
+ case 'ISO_5427':
+ case 'ISO-IR-37':
+ case 'CSISO5427CYRILLIC':
+ return 'ISO_5427';
+
+ case 'JIS_C6226-1978':
+ case 'ISO-IR-42':
+ case 'CSISO42JISC62261978':
+ return 'JIS_C6226-1978';
+
+ case 'BS_VIEWDATA':
+ case 'ISO-IR-47':
+ case 'CSISO47BSVIEWDATA':
+ return 'BS_viewdata';
+
+ case 'INIS':
+ case 'ISO-IR-49':
+ case 'CSISO49INIS':
+ return 'INIS';
+
+ case 'INIS-8':
+ case 'ISO-IR-50':
+ case 'CSISO50INIS8':
+ return 'INIS-8';
+
+ case 'INIS-CYRILLIC':
+ case 'ISO-IR-51':
+ case 'CSISO51INISCYRILLIC':
+ return 'INIS-cyrillic';
+
+ case 'ISO_5427:1981':
+ case 'ISO-IR-54':
+ case 'ISO5427CYRILLIC1981':
+ return 'ISO_5427:1981';
+
+ case 'ISO_5428:1980':
+ case 'ISO-IR-55':
+ case 'CSISO5428GREEK':
+ return 'ISO_5428:1980';
+
+ case 'GB_1988-80':
+ case 'ISO-IR-57':
+ case 'CN':
+ case 'ISO646-CN':
+ case 'CSISO57GB1988':
+ return 'GB_1988-80';
+
+ case 'GB_2312-80':
+ case 'ISO-IR-58':
+ case 'CHINESE':
+ case 'CSISO58GB231280':
+ return 'GB_2312-80';
+
+ case 'NS_4551-2':
+ case 'ISO646-NO2':
+ case 'ISO-IR-61':
+ case 'NO2':
+ case 'CSISO61NORWEGIAN2':
+ return 'NS_4551-2';
+
+ case 'VIDEOTEX-SUPPL':
+ case 'ISO-IR-70':
+ case 'CSISO70VIDEOTEXSUPP1':
+ return 'videotex-suppl';
+
+ case 'PT2':
+ case 'ISO-IR-84':
+ case 'ISO646-PT2':
+ case 'CSISO84PORTUGUESE2':
+ return 'PT2';
+
+ case 'ES2':
+ case 'ISO-IR-85':
+ case 'ISO646-ES2':
+ case 'CSISO85SPANISH2':
+ return 'ES2';
+
+ case 'MSZ_7795.3':
+ case 'ISO-IR-86':
+ case 'ISO646-HU':
+ case 'HU':
+ case 'CSISO86HUNGARIAN':
+ return 'MSZ_7795.3';
+
+ case 'JIS_C6226-1983':
+ case 'ISO-IR-87':
+ case 'X0208':
+ case 'JIS_X0208-1983':
+ case 'CSISO87JISX0208':
+ return 'JIS_C6226-1983';
+
+ case 'GREEK7':
+ case 'ISO-IR-88':
+ case 'CSISO88GREEK7':
+ return 'greek7';
+
+ case 'ASMO_449':
+ case 'ISO_9036':
+ case 'ARABIC7':
+ case 'ISO-IR-89':
+ case 'CSISO89ASMO449':
+ return 'ASMO_449';
+
+ case 'ISO-IR-90':
+ case 'CSISO90':
+ return 'iso-ir-90';
+
+ case 'JIS_C6229-1984-A':
+ case 'ISO-IR-91':
+ case 'JP-OCR-A':
+ case 'CSISO91JISC62291984A':
+ return 'JIS_C6229-1984-a';
+
+ case 'JIS_C6229-1984-B':
+ case 'ISO-IR-92':
+ case 'ISO646-JP-OCR-B':
+ case 'JP-OCR-B':
+ case 'CSISO92JISC62991984B':
+ return 'JIS_C6229-1984-b';
+
+ case 'JIS_C6229-1984-B-ADD':
+ case 'ISO-IR-93':
+ case 'JP-OCR-B-ADD':
+ case 'CSISO93JIS62291984BADD':
+ return 'JIS_C6229-1984-b-add';
+
+ case 'JIS_C6229-1984-HAND':
+ case 'ISO-IR-94':
+ case 'JP-OCR-HAND':
+ case 'CSISO94JIS62291984HAND':
+ return 'JIS_C6229-1984-hand';
+
+ case 'JIS_C6229-1984-HAND-ADD':
+ case 'ISO-IR-95':
+ case 'JP-OCR-HAND-ADD':
+ case 'CSISO95JIS62291984HANDADD':
+ return 'JIS_C6229-1984-hand-add';
+
+ case 'JIS_C6229-1984-KANA':
+ case 'ISO-IR-96':
+ case 'CSISO96JISC62291984KANA':
+ return 'JIS_C6229-1984-kana';
+
+ case 'ISO_2033-1983':
+ case 'ISO-IR-98':
+ case 'E13B':
+ case 'CSISO2033':
+ return 'ISO_2033-1983';
+
+ case 'ANSI_X3.110-1983':
+ case 'ISO-IR-99':
+ case 'CSA_T500-1983':
+ case 'NAPLPS':
+ case 'CSISO99NAPLPS':
+ return 'ANSI_X3.110-1983';
+
+ case 'T.61-7BIT':
+ case 'ISO-IR-102':
+ case 'CSISO102T617BIT':
+ return 'T.61-7bit';
+
+ case 'T.61-8BIT':
+ case 'T.61':
+ case 'ISO-IR-103':
+ case 'CSISO103T618BIT':
+ return 'T.61-8bit';
+
+ case 'ECMA-CYRILLIC':
+ case 'ISO-IR-111':
+ case 'KOI8-E':
+ case 'CSISO111ECMACYRILLIC':
+ return 'ECMA-cyrillic';
+
+ case 'CSA_Z243.4-1985-1':
+ case 'ISO-IR-121':
+ case 'ISO646-CA':
+ case 'CSA7-1':
+ case 'CA':
+ case 'CSISO121CANADIAN1':
+ return 'CSA_Z243.4-1985-1';
+
+ case 'CSA_Z243.4-1985-2':
+ case 'ISO-IR-122':
+ case 'ISO646-CA2':
+ case 'CSA7-2':
+ case 'CSISO122CANADIAN2':
+ return 'CSA_Z243.4-1985-2';
+
+ case 'CSA_Z243.4-1985-GR':
+ case 'ISO-IR-123':
+ case 'CSISO123CSAZ24341985GR':
+ return 'CSA_Z243.4-1985-gr';
+
+ case 'ISO_8859-6-E':
+ case 'CSISO88596E':
+ case 'ISO-8859-6-E':
+ return 'ISO-8859-6-E';
+
+ case 'ISO_8859-6-I':
+ case 'CSISO88596I':
+ case 'ISO-8859-6-I':
+ return 'ISO-8859-6-I';
+
+ case 'T.101-G2':
+ case 'ISO-IR-128':
+ case 'CSISO128T101G2':
+ return 'T.101-G2';
+
+ case 'ISO_8859-8-E':
+ case 'CSISO88598E':
+ case 'ISO-8859-8-E':
+ return 'ISO-8859-8-E';
+
+ case 'ISO_8859-8-I':
+ case 'CSISO88598I':
+ case 'ISO-8859-8-I':
+ return 'ISO-8859-8-I';
+
+ case 'CSN_369103':
+ case 'ISO-IR-139':
+ case 'CSISO139CSN369103':
+ return 'CSN_369103';
+
+ case 'JUS_I.B1.002':
+ case 'ISO-IR-141':
+ case 'ISO646-YU':
+ case 'JS':
+ case 'YU':
+ case 'CSISO141JUSIB1002':
+ return 'JUS_I.B1.002';
+
+ case 'IEC_P27-1':
+ case 'ISO-IR-143':
+ case 'CSISO143IECP271':
+ return 'IEC_P27-1';
+
+ case 'JUS_I.B1.003-SERB':
+ case 'ISO-IR-146':
+ case 'SERBIAN':
+ case 'CSISO146SERBIAN':
+ return 'JUS_I.B1.003-serb';
+
+ case 'JUS_I.B1.003-MAC':
+ case 'MACEDONIAN':
+ case 'ISO-IR-147':
+ case 'CSISO147MACEDONIAN':
+ return 'JUS_I.B1.003-mac';
+
+ case 'GREEK-CCITT':
+ case 'ISO-IR-150':
+ case 'CSISO150':
+ case 'CSISO150GREEKCCITT':
+ return 'greek-ccitt';
+
+ case 'NC_NC00-10:81':
+ case 'CUBA':
+ case 'ISO-IR-151':
+ case 'ISO646-CU':
+ case 'CSISO151CUBA':
+ return 'NC_NC00-10:81';
+
+ case 'ISO_6937-2-25':
+ case 'ISO-IR-152':
+ case 'CSISO6937ADD':
+ return 'ISO_6937-2-25';
+
+ case 'GOST_19768-74':
+ case 'ST_SEV_358-88':
+ case 'ISO-IR-153':
+ case 'CSISO153GOST1976874':
+ return 'GOST_19768-74';
+
+ case 'ISO_8859-SUPP':
+ case 'ISO-IR-154':
+ case 'LATIN1-2-5':
+ case 'CSISO8859SUPP':
+ return 'ISO_8859-supp';
+
+ case 'ISO_10367-BOX':
+ case 'ISO-IR-155':
+ case 'CSISO10367BOX':
+ return 'ISO_10367-box';
+
+ case 'LATIN-LAP':
+ case 'LAP':
+ case 'ISO-IR-158':
+ case 'CSISO158LAP':
+ return 'latin-lap';
+
+ case 'JIS_X0212-1990':
+ case 'X0212':
+ case 'ISO-IR-159':
+ case 'CSISO159JISX02121990':
+ return 'JIS_X0212-1990';
+
+ case 'DS_2089':
+ case 'DS2089':
+ case 'ISO646-DK':
+ case 'DK':
+ case 'CSISO646DANISH':
+ return 'DS_2089';
+
+ case 'US-DK':
+ case 'CSUSDK':
+ return 'us-dk';
+
+ case 'DK-US':
+ case 'CSDKUS':
+ return 'dk-us';
+
+ case 'KSC5636':
+ case 'ISO646-KR':
+ case 'CSKSC5636':
+ return 'KSC5636';
+
+ case 'UNICODE-1-1-UTF-7':
+ case 'CSUNICODE11UTF7':
+ return 'UNICODE-1-1-UTF-7';
+
+ case 'ISO-2022-CN':
+ return 'ISO-2022-CN';
+
+ case 'ISO-2022-CN-EXT':
+ return 'ISO-2022-CN-EXT';
+
+ case 'UTF-8':
+ return 'UTF-8';
+
+ case 'ISO-8859-13':
+ return 'ISO-8859-13';
+
+ case 'ISO-8859-14':
+ case 'ISO-IR-199':
+ case 'ISO_8859-14:1998':
+ case 'ISO_8859-14':
+ case 'LATIN8':
+ case 'ISO-CELTIC':
+ case 'L8':
+ return 'ISO-8859-14';
+
+ case 'ISO-8859-15':
+ case 'ISO_8859-15':
+ case 'LATIN-9':
+ return 'ISO-8859-15';
+
+ case 'ISO-8859-16':
+ case 'ISO-IR-226':
+ case 'ISO_8859-16:2001':
+ case 'ISO_8859-16':
+ case 'LATIN10':
+ case 'L10':
+ return 'ISO-8859-16';
+
+ case 'GBK':
+ case 'CP936':
+ case 'MS936':
+ case 'WINDOWS-936':
+ return 'GBK';
+
+ case 'GB18030':
+ return 'GB18030';
+
+ case 'OSD_EBCDIC_DF04_15':
+ return 'OSD_EBCDIC_DF04_15';
+
+ case 'OSD_EBCDIC_DF03_IRV':
+ return 'OSD_EBCDIC_DF03_IRV';
+
+ case 'OSD_EBCDIC_DF04_1':
+ return 'OSD_EBCDIC_DF04_1';
+
+ case 'ISO-11548-1':
+ case 'ISO_11548-1':
+ case 'ISO_TR_11548-1':
+ case 'CSISO115481':
+ return 'ISO-11548-1';
+
+ case 'KZ-1048':
+ case 'STRK1048-2002':
+ case 'RK1048':
+ case 'CSKZ1048':
+ return 'KZ-1048';
+
+ case 'ISO-10646-UCS-2':
+ case 'CSUNICODE':
+ return 'ISO-10646-UCS-2';
+
+ case 'ISO-10646-UCS-4':
+ case 'CSUCS4':
+ return 'ISO-10646-UCS-4';
+
+ case 'ISO-10646-UCS-BASIC':
+ case 'CSUNICODEASCII':
+ return 'ISO-10646-UCS-Basic';
+
+ case 'ISO-10646-UNICODE-LATIN1':
+ case 'CSUNICODELATIN1':
+ case 'ISO-10646':
+ return 'ISO-10646-Unicode-Latin1';
+
+ case 'ISO-10646-J-1':
+ return 'ISO-10646-J-1';
+
+ case 'ISO-UNICODE-IBM-1261':
+ case 'CSUNICODEIBM1261':
+ return 'ISO-Unicode-IBM-1261';
+
+ case 'ISO-UNICODE-IBM-1268':
+ case 'CSUNICODEIBM1268':
+ return 'ISO-Unicode-IBM-1268';
+
+ case 'ISO-UNICODE-IBM-1276':
+ case 'CSUNICODEIBM1276':
+ return 'ISO-Unicode-IBM-1276';
+
+ case 'ISO-UNICODE-IBM-1264':
+ case 'CSUNICODEIBM1264':
+ return 'ISO-Unicode-IBM-1264';
+
+ case 'ISO-UNICODE-IBM-1265':
+ case 'CSUNICODEIBM1265':
+ return 'ISO-Unicode-IBM-1265';
+
+ case 'UNICODE-1-1':
+ case 'CSUNICODE11':
+ return 'UNICODE-1-1';
+
+ case 'SCSU':
+ return 'SCSU';
+
+ case 'UTF-7':
+ return 'UTF-7';
+
+ case 'UTF-16BE':
+ return 'UTF-16BE';
+
+ case 'UTF-16LE':
+ return 'UTF-16LE';
+
+ case 'UTF-16':
+ return 'UTF-16';
+
+ case 'CESU-8':
+ case 'CSCESU-8':
+ return 'CESU-8';
+
+ case 'UTF-32':
+ return 'UTF-32';
+
+ case 'UTF-32BE':
+ return 'UTF-32BE';
+
+ case 'UTF-32LE':
+ return 'UTF-32LE';
+
+ case 'BOCU-1':
+ case 'CSBOCU-1':
+ return 'BOCU-1';
+
+ case 'ISO-8859-1-WINDOWS-3.0-LATIN-1':
+ case 'CSWINDOWS30LATIN1':
+ return 'ISO-8859-1-Windows-3.0-Latin-1';
+
+ case 'ISO-8859-1-WINDOWS-3.1-LATIN-1':
+ case 'CSWINDOWS31LATIN1':
+ return 'ISO-8859-1-Windows-3.1-Latin-1';
+
+ case 'ISO-8859-2-WINDOWS-LATIN-2':
+ case 'CSWINDOWS31LATIN2':
+ return 'ISO-8859-2-Windows-Latin-2';
+
+ case 'ISO-8859-9-WINDOWS-LATIN-5':
+ case 'CSWINDOWS31LATIN5':
+ return 'ISO-8859-9-Windows-Latin-5';
+
+ case 'HP-ROMAN8':
+ case 'ROMAN8':
+ case 'R8':
+ case 'CSHPROMAN8':
+ return 'hp-roman8';
+
+ case 'ADOBE-STANDARD-ENCODING':
+ case 'CSADOBESTANDARDENCODING':
+ return 'Adobe-Standard-Encoding';
+
+ case 'VENTURA-US':
+ case 'CSVENTURAUS':
+ return 'Ventura-US';
+
+ case 'VENTURA-INTERNATIONAL':
+ case 'CSVENTURAINTERNATIONAL':
+ return 'Ventura-International';
+
+ case 'DEC-MCS':
+ case 'DEC':
+ case 'CSDECMCS':
+ return 'DEC-MCS';
+
+ case 'IBM850':
+ case 'CP850':
+ case '850':
+ case 'CSPC850MULTILINGUAL':
+ return 'IBM850';
+
+ case 'PC8-DANISH-NORWEGIAN':
+ case 'CSPC8DANISHNORWEGIAN':
+ return 'PC8-Danish-Norwegian';
+
+ case 'IBM862':
+ case 'CP862':
+ case '862':
+ case 'CSPC862LATINHEBREW':
+ return 'IBM862';
+
+ case 'PC8-TURKISH':
+ case 'CSPC8TURKISH':
+ return 'PC8-Turkish';
+
+ case 'IBM-SYMBOLS':
+ case 'CSIBMSYMBOLS':
+ return 'IBM-Symbols';
+
+ case 'IBM-THAI':
+ case 'CSIBMTHAI':
+ return 'IBM-Thai';
+
+ case 'HP-LEGAL':
+ case 'CSHPLEGAL':
+ return 'HP-Legal';
+
+ case 'HP-PI-FONT':
+ case 'CSHPPIFONT':
+ return 'HP-Pi-font';
+
+ case 'HP-MATH8':
+ case 'CSHPMATH8':
+ return 'HP-Math8';
+
+ case 'ADOBE-SYMBOL-ENCODING':
+ case 'CSHPPSMATH':
+ return 'Adobe-Symbol-Encoding';
+
+ case 'HP-DESKTOP':
+ case 'CSHPDESKTOP':
+ return 'HP-DeskTop';
+
+ case 'VENTURA-MATH':
+ case 'CSVENTURAMATH':
+ return 'Ventura-Math';
+
+ case 'MICROSOFT-PUBLISHING':
+ case 'CSMICROSOFTPUBLISHING':
+ return 'Microsoft-Publishing';
+
+ case 'WINDOWS-31J':
+ case 'CSWINDOWS31J':
+ return 'Windows-31J';
+
+ case 'GB2312':
+ case 'CSGB2312':
+ return 'GB2312';
+
+ case 'BIG5':
+ case 'CSBIG5':
+ return 'Big5';
+
+ case 'MACINTOSH':
+ case 'MAC':
+ case 'CSMACINTOSH':
+ return 'macintosh';
+
+ case 'IBM037':
+ case 'CP037':
+ case 'EBCDIC-CP-US':
+ case 'EBCDIC-CP-CA':
+ case 'EBCDIC-CP-WT':
+ case 'EBCDIC-CP-NL':
+ case 'CSIBM037':
+ return 'IBM037';
+
+ case 'IBM038':
+ case 'EBCDIC-INT':
+ case 'CP038':
+ case 'CSIBM038':
+ return 'IBM038';
+
+ case 'IBM273':
+ case 'CP273':
+ case 'CSIBM273':
+ return 'IBM273';
+
+ case 'IBM274':
+ case 'EBCDIC-BE':
+ case 'CP274':
+ case 'CSIBM274':
+ return 'IBM274';
+
+ case 'IBM275':
+ case 'EBCDIC-BR':
+ case 'CP275':
+ case 'CSIBM275':
+ return 'IBM275';
+
+ case 'IBM277':
+ case 'EBCDIC-CP-DK':
+ case 'EBCDIC-CP-NO':
+ case 'CSIBM277':
+ return 'IBM277';
+
+ case 'IBM278':
+ case 'CP278':
+ case 'EBCDIC-CP-FI':
+ case 'EBCDIC-CP-SE':
+ case 'CSIBM278':
+ return 'IBM278';
+
+ case 'IBM280':
+ case 'CP280':
+ case 'EBCDIC-CP-IT':
+ case 'CSIBM280':
+ return 'IBM280';
+
+ case 'IBM281':
+ case 'EBCDIC-JP-E':
+ case 'CP281':
+ case 'CSIBM281':
+ return 'IBM281';
+
+ case 'IBM284':
+ case 'CP284':
+ case 'EBCDIC-CP-ES':
+ case 'CSIBM284':
+ return 'IBM284';
+
+ case 'IBM285':
+ case 'CP285':
+ case 'EBCDIC-CP-GB':
+ case 'CSIBM285':
+ return 'IBM285';
+
+ case 'IBM290':
+ case 'CP290':
+ case 'EBCDIC-JP-KANA':
+ case 'CSIBM290':
+ return 'IBM290';
+
+ case 'IBM297':
+ case 'CP297':
+ case 'EBCDIC-CP-FR':
+ case 'CSIBM297':
+ return 'IBM297';
+
+ case 'IBM420':
+ case 'CP420':
+ case 'EBCDIC-CP-AR1':
+ case 'CSIBM420':
+ return 'IBM420';
+
+ case 'IBM423':
+ case 'CP423':
+ case 'EBCDIC-CP-GR':
+ case 'CSIBM423':
+ return 'IBM423';
+
+ case 'IBM424':
+ case 'CP424':
+ case 'EBCDIC-CP-HE':
+ case 'CSIBM424':
+ return 'IBM424';
+
+ case 'IBM437':
+ case 'CP437':
+ case '437':
+ case 'CSPC8CODEPAGE437':
+ return 'IBM437';
+
+ case 'IBM500':
+ case 'CP500':
+ case 'EBCDIC-CP-BE':
+ case 'EBCDIC-CP-CH':
+ case 'CSIBM500':
+ return 'IBM500';
+
+ case 'IBM851':
+ case 'CP851':
+ case '851':
+ case 'CSIBM851':
+ return 'IBM851';
+
+ case 'IBM852':
+ case 'CP852':
+ case '852':
+ case 'CSPCP852':
+ return 'IBM852';
+
+ case 'IBM855':
+ case 'CP855':
+ case '855':
+ case 'CSIBM855':
+ return 'IBM855';
+
+ case 'IBM857':
+ case 'CP857':
+ case '857':
+ case 'CSIBM857':
+ return 'IBM857';
+
+ case 'IBM860':
+ case 'CP860':
+ case '860':
+ case 'CSIBM860':
+ return 'IBM860';
+
+ case 'IBM861':
+ case 'CP861':
+ case '861':
+ case 'CP-IS':
+ case 'CSIBM861':
+ return 'IBM861';
+
+ case 'IBM863':
+ case 'CP863':
+ case '863':
+ case 'CSIBM863':
+ return 'IBM863';
+
+ case 'IBM864':
+ case 'CP864':
+ case 'CSIBM864':
+ return 'IBM864';
+
+ case 'IBM865':
+ case 'CP865':
+ case '865':
+ case 'CSIBM865':
+ return 'IBM865';
+
+ case 'IBM868':
+ case 'CP868':
+ case 'CP-AR':
+ case 'CSIBM868':
+ return 'IBM868';
+
+ case 'IBM869':
+ case 'CP869':
+ case '869':
+ case 'CP-GR':
+ case 'CSIBM869':
+ return 'IBM869';
+
+ case 'IBM870':
+ case 'CP870':
+ case 'EBCDIC-CP-ROECE':
+ case 'EBCDIC-CP-YU':
+ case 'CSIBM870':
+ return 'IBM870';
+
+ case 'IBM871':
+ case 'CP871':
+ case 'EBCDIC-CP-IS':
+ case 'CSIBM871':
+ return 'IBM871';
+
+ case 'IBM880':
+ case 'CP880':
+ case 'EBCDIC-CYRILLIC':
+ case 'CSIBM880':
+ return 'IBM880';
+
+ case 'IBM891':
+ case 'CP891':
+ case 'CSIBM891':
+ return 'IBM891';
+
+ case 'IBM903':
+ case 'CP903':
+ case 'CSIBM903':
+ return 'IBM903';
+
+ case 'IBM904':
+ case 'CP904':
+ case '904':
+ case 'CSIBBM904':
+ return 'IBM904';
+
+ case 'IBM905':
+ case 'CP905':
+ case 'EBCDIC-CP-TR':
+ case 'CSIBM905':
+ return 'IBM905';
+
+ case 'IBM918':
+ case 'CP918':
+ case 'EBCDIC-CP-AR2':
+ case 'CSIBM918':
+ return 'IBM918';
+
+ case 'IBM1026':
+ case 'CP1026':
+ case 'CSIBM1026':
+ return 'IBM1026';
+
+ case 'EBCDIC-AT-DE':
+ case 'CSIBMEBCDICATDE':
+ return 'EBCDIC-AT-DE';
+
+ case 'EBCDIC-AT-DE-A':
+ case 'CSEBCDICATDEA':
+ return 'EBCDIC-AT-DE-A';
+
+ case 'EBCDIC-CA-FR':
+ case 'CSEBCDICCAFR':
+ return 'EBCDIC-CA-FR';
+
+ case 'EBCDIC-DK-NO':
+ case 'CSEBCDICDKNO':
+ return 'EBCDIC-DK-NO';
+
+ case 'EBCDIC-DK-NO-A':
+ case 'CSEBCDICDKNOA':
+ return 'EBCDIC-DK-NO-A';
+
+ case 'EBCDIC-FI-SE':
+ case 'CSEBCDICFISE':
+ return 'EBCDIC-FI-SE';
+
+ case 'EBCDIC-FI-SE-A':
+ case 'CSEBCDICFISEA':
+ return 'EBCDIC-FI-SE-A';
+
+ case 'EBCDIC-FR':
+ case 'CSEBCDICFR':
+ return 'EBCDIC-FR';
+
+ case 'EBCDIC-IT':
+ case 'CSEBCDICIT':
+ return 'EBCDIC-IT';
+
+ case 'EBCDIC-PT':
+ case 'CSEBCDICPT':
+ return 'EBCDIC-PT';
+
+ case 'EBCDIC-ES':
+ case 'CSEBCDICES':
+ return 'EBCDIC-ES';
+
+ case 'EBCDIC-ES-A':
+ case 'CSEBCDICESA':
+ return 'EBCDIC-ES-A';
+
+ case 'EBCDIC-ES-S':
+ case 'CSEBCDICESS':
+ return 'EBCDIC-ES-S';
+
+ case 'EBCDIC-UK':
+ case 'CSEBCDICUK':
+ return 'EBCDIC-UK';
+
+ case 'EBCDIC-US':
+ case 'CSEBCDICUS':
+ return 'EBCDIC-US';
+
+ case 'UNKNOWN-8BIT':
+ case 'CSUNKNOWN8BIT':
+ return 'UNKNOWN-8BIT';
+
+ case 'MNEMONIC':
+ case 'CSMNEMONIC':
+ return 'MNEMONIC';
+
+ case 'MNEM':
+ case 'CSMNEM':
+ return 'MNEM';
+
+ case 'VISCII':
+ case 'CSVISCII':
+ return 'VISCII';
+
+ case 'VIQR':
+ case 'CSVIQR':
+ return 'VIQR';
+
+ case 'KOI8-R':
+ case 'CSKOI8R':
+ return 'KOI8-R';
+
+ case 'HZ-GB-2312':
+ return 'HZ-GB-2312';
+
+ case 'IBM866':
+ case 'CP866':
+ case '866':
+ case 'CSIBM866':
+ return 'IBM866';
+
+ case 'IBM775':
+ case 'CP775':
+ case 'CSPC775BALTIC':
+ return 'IBM775';
+
+ case 'KOI8-U':
+ return 'KOI8-U';
+
+ case 'IBM00858':
+ case 'CCSID00858':
+ case 'CP00858':
+ case 'PC-MULTILINGUAL-850+EURO':
+ return 'IBM00858';
+
+ case 'IBM00924':
+ case 'CCSID00924':
+ case 'CP00924':
+ case 'EBCDIC-LATIN9--EURO':
+ return 'IBM00924';
+
+ case 'IBM01140':
+ case 'CCSID01140':
+ case 'CP01140':
+ case 'EBCDIC-US-37+EURO':
+ return 'IBM01140';
+
+ case 'IBM01141':
+ case 'CCSID01141':
+ case 'CP01141':
+ case 'EBCDIC-DE-273+EURO':
+ return 'IBM01141';
+
+ case 'IBM01142':
+ case 'CCSID01142':
+ case 'CP01142':
+ case 'EBCDIC-DK-277+EURO':
+ case 'EBCDIC-NO-277+EURO':
+ return 'IBM01142';
+
+ case 'IBM01143':
+ case 'CCSID01143':
+ case 'CP01143':
+ case 'EBCDIC-FI-278+EURO':
+ case 'EBCDIC-SE-278+EURO':
+ return 'IBM01143';
+
+ case 'IBM01144':
+ case 'CCSID01144':
+ case 'CP01144':
+ case 'EBCDIC-IT-280+EURO':
+ return 'IBM01144';
+
+ case 'IBM01145':
+ case 'CCSID01145':
+ case 'CP01145':
+ case 'EBCDIC-ES-284+EURO':
+ return 'IBM01145';
+
+ case 'IBM01146':
+ case 'CCSID01146':
+ case 'CP01146':
+ case 'EBCDIC-GB-285+EURO':
+ return 'IBM01146';
+
+ case 'IBM01147':
+ case 'CCSID01147':
+ case 'CP01147':
+ case 'EBCDIC-FR-297+EURO':
+ return 'IBM01147';
+
+ case 'IBM01148':
+ case 'CCSID01148':
+ case 'CP01148':
+ case 'EBCDIC-INTERNATIONAL-500+EURO':
+ return 'IBM01148';
+
+ case 'IBM01149':
+ case 'CCSID01149':
+ case 'CP01149':
+ case 'EBCDIC-IS-871+EURO':
+ return 'IBM01149';
+
+ case 'BIG5-HKSCS':
+ return 'Big5-HKSCS';
+
+ case 'IBM1047':
+ case 'IBM-1047':
+ return 'IBM1047';
+
+ case 'PTCP154':
+ case 'CSPTCP154':
+ case 'PT154':
+ case 'CP154':
+ case 'CYRILLIC-ASIAN':
+ return 'PTCP154';
+
+ case 'AMIGA-1251':
+ case 'AMI1251':
+ case 'AMIGA1251':
+ case 'AMI-1251':
+ return 'Amiga-1251';
+
+ case 'KOI7-SWITCHED':
+ return 'KOI7-switched';
+
+ case 'BRF':
+ case 'CSBRF':
+ return 'BRF';
+
+ case 'TSCII':
+ case 'CSTSCII':
+ return 'TSCII';
+
+ case 'WINDOWS-1250':
+ return 'windows-1250';
+
+ case 'WINDOWS-1251':
+ return 'windows-1251';
+
+ case 'WINDOWS-1252':
+ return 'windows-1252';
+
+ case 'WINDOWS-1253':
+ return 'windows-1253';
+
+ case 'WINDOWS-1254':
+ return 'windows-1254';
+
+ case 'WINDOWS-1255':
+ return 'windows-1255';
+
+ case 'WINDOWS-1256':
+ return 'windows-1256';
+
+ case 'WINDOWS-1257':
+ return 'windows-1257';
+
+ case 'WINDOWS-1258':
+ return 'windows-1258';
+
+ default:
+ return (string) $encoding;
+ }
+ }
+
+ function get_curl_version()
+ {
+ if (is_array($curl = curl_version()))
+ {
+ $curl = $curl['version'];
+ }
+ elseif (substr($curl, 0, 5) == 'curl/')
+ {
+ $curl = substr($curl, 5, strcspn($curl, "\x09\x0A\x0B\x0C\x0D", 5));
+ }
+ elseif (substr($curl, 0, 8) == 'libcurl/')
+ {
+ $curl = substr($curl, 8, strcspn($curl, "\x09\x0A\x0B\x0C\x0D", 8));
+ }
+ else
+ {
+ $curl = 0;
+ }
+ return $curl;
+ }
+
+ function is_subclass_of($class1, $class2)
+ {
+ if (func_num_args() != 2)
+ {
+ trigger_error('Wrong parameter count for SimplePie_Misc::is_subclass_of()', E_USER_WARNING);
+ }
+ elseif (version_compare(PHP_VERSION, '5.0.3', '>=') || is_object($class1))
+ {
+ return is_subclass_of($class1, $class2);
+ }
+ elseif (is_string($class1) && is_string($class2))
+ {
+ if (class_exists($class1))
+ {
+ if (class_exists($class2))
+ {
+ $class2 = strtolower($class2);
+ while ($class1 = strtolower(get_parent_class($class1)))
+ {
+ if ($class1 == $class2)
+ {
+ return true;
+ }
+ }
+ }
+ }
+ else
+ {
+ trigger_error('Unknown class passed as parameter', E_USER_WARNNG);
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Strip HTML comments
+ *
+ * @access public
+ * @param string $data Data to strip comments from
+ * @return string Comment stripped string
+ */
+ function strip_comments($data)
+ {
+ $output = '';
+ while (($start = strpos($data, '<!--')) !== false)
+ {
+ $output .= substr($data, 0, $start);
+ if (($end = strpos($data, '-->', $start)) !== false)
+ {
+ $data = substr_replace($data, '', 0, $end + 3);
+ }
+ else
+ {
+ $data = '';
+ }
+ }
+ return $output . $data;
+ }
+
+ function parse_date($dt, $rfc822_tz = true)
+ {
+ static $cache = array();
+ if (!isset($cache[$dt][$rfc822_tz]))
+ {
+ $dt = SimplePie_Misc::uncomment_rfc822($dt);
+ /*
+ Capturing subpatterns:
+ 1: RFC 822 date
+ 2: RFC 822 day
+ 3: RFC 822 month
+ 4: RFC 822 year
+ 5: ISO 8601 date
+ 6: ISO 8601 century
+ 7: ISO 8601 year
+ 8: ISO 8601 month
+ 9: ISO 8601 day
+ 10: ISO 8601 ordinal day
+ 11: ISO 8601 month
+ 12: ISO 8601 day
+ 13: ISO 8601 week
+ 14: ISO 8601 day of week
+ 15: Time
+ 16: Hour
+ 17: Hour Decimal
+ 18: Minute
+ 19: Minute Decimal
+ 20: Second
+ 21: Second Decimal
+ 22: Timezone
+ 23: Diff ±
+ 24: Hour
+ 25: Hour Decimal
+ 26: Minute
+ 27: Minute Decimal
+ 28: Alphabetic Timezone
+ */
+ if (preg_match('/^(?:(?:(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun)[,\s]+)?(([0-9]{1,2})\s*(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s*([0-9]{4}|[0-9]{2}))|(([0-9]{2})(?:([0-9]{2})(?:(?:-|\s)*(?:([0-9]{2})([0-9]{2})|([0-9]{3})|([0-9]{2})(?:(?:-|\s)*([0-9]{2}))?|W([0-9]{2})(?:(?:-|\s)*([0-9]))?))?)?))((?:T|\s)+([0-9]{2})(?:(?:,|\.)([0-9]*)|(?:\:|\s)*([0-9]{2})(?:(?:,|\.)([0-9]*)|(?:\:|\s)*([0-9]{2})(?:(?:,|\.)([0-9]*))?)?)?(?:\s)*((?:(\+|-)([0-9]{2})(?:(?:,|\.)([0-9]*)|(?:\:|\s)*(?:([0-9]{2})(?:(?:,|\.)([0-9]*))?))?)|(UTC|GMT|EST|CST|MST|PST|EDT|CDT|MDT|PDT|UT|[A-IK-Z]))?)?$/i', $dt, $match))
+ {
+ // Fill all matches
+ for ($i = count($match); $i <= 28; $i++)
+ {
+ $match[$i] = '';
+ }
+
+ // Set blank vars
+ $year = 1970;
+ $month = 1;
+ $day = 1;
+ $hour = 0;
+ $minute = 0;
+ $second = 0;
+ $timezone = false;
+
+ // RFC 822
+ if ($match[1] !== '')
+ {
+ if (strlen($match[4]) == 2)
+ {
+ $year = ($match[4] < 70) ? "20$match[4]" : "19$match[4]";
+ }
+ else
+ {
+ $year = $match[4];
+ }
+ switch (strtolower($match[3]))
+ {
+ case 'jan':
+ $month = 1;
+ break;
+
+ case 'feb':
+ $month = 2;
+ break;
+
+ case 'mar':
+ $month = 3;
+ break;
+
+ case 'apr':
+ $month = 4;
+ break;
+
+ case 'may':
+ $month = 5;
+ break;
+
+ case 'jun':
+ $month = 6;
+ break;
+
+ case 'jul':
+ $month = 7;
+ break;
+
+ case 'aug':
+ $month = 8;
+ break;
+
+ case 'sep':
+ $month = 9;
+ break;
+
+ case 'oct':
+ $month = 10;
+ break;
+
+ case 'nov':
+ $month = 11;
+ break;
+
+ case 'dec':
+ $month = 12;
+ break;
+ }
+ $day = $match[2];
+ }
+ // ISO 8601
+ else
+ {
+ // Year
+ if ($match[7] !== '')
+ {
+ $year = "$match[6]$match[7]";
+
+ // Two Digit Month/Day
+ if ($match[11] !== '')
+ {
+ $month = $match[11];
+ if ($match[12] !== '')
+ {
+ $day = $match[12];
+ }
+ }
+
+ // Four Digit Month/Day
+ elseif ($match[8] !== '')
+ {
+ $month = $match[8];
+ $day = $match[9];
+ }
+
+ // Ordinal Day
+ elseif ($match[10] !== '')
+ {
+ $day = $match[10];
+ }
+
+ // Week Date
+ elseif ($match[13] !== '')
+ {
+ // Week Day
+ if ($match[14] !== '')
+ {
+ $day = $match[14];
+ }
+
+ $first_day_of_year = date('w', mktime(0, 0, 0, 1, 1, $year));
+ if ($first_day_of_year == 0)
+ {
+ $first_day_of_year = 7;
+ }
+
+ $day = 7 * ($match[13] - 1) + $day - ($first_day_of_year - 1);
+ }
+ }
+ else
+ {
+ $year = "$match[6]00";
+ }
+ }
+ // Time
+ if ($match[15] !== '')
+ {
+ $time = 0;
+ $time += ($match[16] + ('.' . $match[17])) * 3600;
+ $time += ($match[18] + ('.' . $match[19])) * 60;
+ $time += $match[20] + ('.' . $match[21]);
+ $hour = floor($time / 3600);
+ $time -= $hour * 3600;
+ $minute = floor($time / 60);
+ $time -= $minute * 60;
+ $second = round($time);
+
+ // Timezone
+ if ($match[22] !== '')
+ {
+ // Alphabetic Timezone
+ if ($match[28] !== '')
+ {
+ // Military
+ if (strlen($match[28]) == 1)
+ {
+ if ($match[28] == 'Z' || $match[28] == 'z' || !$rfc822_tz)
+ {
+ $timezone = 0;
+ }
+ else
+ {
+ $timezone = ord(strtoupper($match[28]));
+
+ if ($timezone > 74)
+ {
+ $timezone--;
+ }
+
+ if ($timezone <= 76)
+ {
+ $timezone = -($timezone - 64);
+ }
+ else
+ {
+ $timezone -= 76;
+ }
+
+ $timezone *= 3600;
+ }
+ }
+ // Code
+ else
+ {
+ switch (strtoupper($match[28]))
+ {
+ case 'UT':
+ case 'UTC':
+ case 'GMT':
+ $timezone = 0;
+ break;
+
+ case 'EST':
+ $timezone = -18000;
+ break;
+
+ case 'CST':
+ $timezone = -21600;
+ break;
+
+ case 'MST':
+ $timezone = -25200;
+ break;
+
+ case 'PST':
+ $timezone = -28800;
+ break;
+
+ case 'EDT':
+ $timezone = -14400;
+ break;
+
+ case 'CDT':
+ $timezone = -18000;
+ break;
+
+ case 'MDT':
+ $timezone = -21600;
+ break;
+
+ case 'PDT':
+ $timezone = -25200;
+ break;
+ }
+ }
+ }
+ // Timezone difference from UTC
+ else
+ {
+ $timezone = 0;
+ $timezone += ($match[24] + ('.' . $match[25])) * 3600;
+ $timezone += ($match[26] + ('.' . $match[27])) * 60;
+ $timezone = (int) round($timezone);
+
+ if ($match[23] == '-')
+ {
+ $timezone = -$timezone;
+ }
+ }
+ }
+ }
+ if ($timezone === false)
+ {
+ $cache[$dt][$rfc822_tz] = mktime($hour, $minute, $second, $month, $day, $year);
+ }
+ else
+ {
+ $cache[$dt][$rfc822_tz] = gmmktime($hour, $minute, $second, $month, $day, $year) - $timezone;
+ }
+ }
+ elseif (($time = strtotime($dt)) > 0)
+ {
+ $cache[$dt][$rfc822_tz] = $time;
+ }
+ else
+ {
+ $cache[$dt][$rfc822_tz] = false;
+ }
+ }
+ return $cache[$dt][$rfc822_tz];
+ }
+
+ /**
+ * Decode HTML entities
+ *
+ * @static
+ * @access public
+ * @param string $data Input data
+ * @return string Output data
+ */
+ function entities_decode($data)
+ {
+ $decoder = new SimplePie_Decode_HTML_Entities($data);
+ return $decoder->parse();
+ }
+
+ /**
+ * Remove RFC822 comments
+ *
+ * @author Tomas V.V.Cox <cox@idecnet.com>
+ * @author Pierre-Alain Joye <pajoye@php.net>
+ * @author Amir Mohammad Saied <amir@php.net>
+ * @copyright 1997-2006 Pierre-Alain Joye,Tomas V.V.Cox,Amir Mohammad Saied
+ * @license http://www.opensource.org/licenses/bsd-license.php New BSD License
+ * @version CVS: $Id: Validate.php,v 1.104 2006/11/17 16:32:06 amir Exp $
+ * @link http://pear.php.net/package/Validate
+ * @access public
+ * @param string $data Data to strip comments from
+ * @return string Comment stripped string
+ */
+ function uncomment_rfc822($data)
+ {
+ if ((version_compare(PHP_VERSION, '4.4.6', '>=') && version_compare(PHP_VERSION, '5', '<')) || version_compare(PHP_VERSION, '5.2.2', '>='))
+ {
+ return $data;
+ }
+ else
+ {
+ return preg_replace('/((?:(?:\\\\"|[^("])*(?:"(?:[^"\\\\\r]|\\\\.)*"\s*)?)*)((?<!\\\\)\((?:(?2)|.)*?(?<!\\\\)\))/', '$1', $data);
+ }
+ }
+
+ function parse_mime($mime)
+ {
+ if (($pos = strpos($mime, ';')) === false)
+ {
+ return trim($mime);
+ }
+ else
+ {
+ return trim(substr($mime, 0, $pos));
+ }
+ }
+
+ function htmlspecialchars_decode($string, $quote_style)
+ {
+ if (function_exists('htmlspecialchars_decode'))
+ {
+ return htmlspecialchars_decode($string, $quote_style);
+ }
+ else
+ {
+ return strtr($string, array_flip(get_html_translation_table(HTML_SPECIALCHARS, $quote_style)));
+ }
+ }
+
+ function atom_03_construct_type($attribs)
+ {
+ if (isset($attribs['']['mode']) && strtolower(trim($attribs['']['mode']) == 'base64'))
+ {
+ $mode = SIMPLEPIE_CONSTRUCT_BASE64;
+ }
+ else
+ {
+ $mode = SIMPLEPIE_CONSTRUCT_NONE;
+ }
+ if (isset($attribs['']['type']))
+ {
+ switch (strtolower(trim($attribs['']['type'])))
+ {
+ case 'text':
+ case 'text/plain':
+ return SIMPLEPIE_CONSTRUCT_TEXT | $mode;
+
+ case 'html':
+ case 'text/html':
+ return SIMPLEPIE_CONSTRUCT_HTML | $mode;
+
+ case 'xhtml':
+ case 'application/xhtml+xml':
+ return SIMPLEPIE_CONSTRUCT_XHTML | $mode;
+
+ default:
+ return SIMPLEPIE_CONSTRUCT_NONE | $mode;
+ }
+ }
+ else
+ {
+ return SIMPLEPIE_CONSTRUCT_TEXT | $mode;
+ }
+ }
+
+ function atom_10_construct_type($attribs)
+ {
+ if (isset($attribs['']['type']))
+ {
+ switch (strtolower(trim($attribs['']['type'])))
+ {
+ case 'text':
+ return SIMPLEPIE_CONSTRUCT_TEXT;
+
+ case 'html':
+ return SIMPLEPIE_CONSTRUCT_HTML;
+
+ case 'xhtml':
+ return SIMPLEPIE_CONSTRUCT_XHTML;
+
+ default:
+ return SIMPLEPIE_CONSTRUCT_NONE;
+ }
+ }
+ return SIMPLEPIE_CONSTRUCT_TEXT;
+ }
+
+ function atom_10_content_construct_type($attribs)
+ {
+ if (isset($attribs['']['type']))
+ {
+ $type = strtolower(trim($attribs['']['type']));
+ switch ($type)
+ {
+ case 'text':
+ return SIMPLEPIE_CONSTRUCT_TEXT;
+
+ case 'html':
+ return SIMPLEPIE_CONSTRUCT_HTML;
+
+ case 'xhtml':
+ return SIMPLEPIE_CONSTRUCT_XHTML;
+ }
+ if (in_array(substr($type, -4), array('+xml', '/xml')) || substr($type, 0, 5) == 'text/')
+ {
+ return SIMPLEPIE_CONSTRUCT_NONE;
+ }
+ else
+ {
+ return SIMPLEPIE_CONSTRUCT_BASE64;
+ }
+ }
+ else
+ {
+ return SIMPLEPIE_CONSTRUCT_TEXT;
+ }
+ }
+
+ function is_isegment_nz_nc($string)
+ {
+ return (bool) preg_match('/^([A-Za-z0-9\-._~\x{A0}-\x{D7FF}\x{F900}-\x{FDCF}\x{FDF0}-\x{FFEF}\x{10000}-\x{1FFFD}\x{20000}-\x{2FFFD}\x{30000}-\x{3FFFD}\x{40000}-\x{4FFFD}\x{50000}-\x{5FFFD}\x{60000}-\x{6FFFD}\x{70000}-\x{7FFFD}\x{80000}-\x{8FFFD}\x{90000}-\x{9FFFD}\x{A0000}-\x{AFFFD}\x{B0000}-\x{BFFFD}\x{C0000}-\x{CFFFD}\x{D0000}-\x{DFFFD}\x{E1000}-\x{EFFFD}!$&\'()*+,;=@]|(%[0-9ABCDEF]{2}))+$/u', $string);
+ }
+
+ function space_seperated_tokens($string)
+ {
+ $space_characters = "\x20\x09\x0A\x0B\x0C\x0D";
+ $string_length = strlen($string);
+
+ $position = strspn($string, $space_characters);
+ $tokens = array();
+
+ while ($position < $string_length)
+ {
+ $len = strcspn($string, $space_characters, $position);
+ $tokens[] = substr($string, $position, $len);
+ $position += $len;
+ $position += strspn($string, $space_characters, $position);
+ }
+
+ return $tokens;
+ }
+
+ function array_unique($array)
+ {
+ if (version_compare(PHP_VERSION, '5.2', '>='))
+ {
+ return array_unique($array);
+ }
+ else
+ {
+ $array = (array) $array;
+ $new_array = array();
+ $new_array_strings = array();
+ foreach ($array as $key => $value)
+ {
+ if (is_object($value))
+ {
+ if (method_exists($value, '__toString'))
+ {
+ $cmp = $value->__toString();
+ }
+ else
+ {
+ trigger_error('Object of class ' . get_class($value) . ' could not be converted to string', E_USER_ERROR);
+ }
+ }
+ elseif (is_array($value))
+ {
+ $cmp = (string) reset($value);
+ }
+ else
+ {
+ $cmp = (string) $value;
+ }
+ if (!in_array($cmp, $new_array_strings))
+ {
+ $new_array[$key] = $value;
+ $new_array_strings[] = $cmp;
+ }
+ }
+ return $new_array;
+ }
+ }
+
+ /**
+ * Converts a unicode codepoint to a UTF-8 character
+ *
+ * @static
+ * @access public
+ * @param int $codepoint Unicode codepoint
+ * @return string UTF-8 character
+ */
+ function codepoint_to_utf8($codepoint)
+ {
+ static $cache = array();
+ $codepoint = (int) $codepoint;
+ if (isset($cache[$codepoint]))
+ {
+ return $cache[$codepoint];
+ }
+ elseif ($codepoint < 0)
+ {
+ return $cache[$codepoint] = false;
+ }
+ else if ($codepoint <= 0x7f)
+ {
+ return $cache[$codepoint] = chr($codepoint);
+ }
+ else if ($codepoint <= 0x7ff)
+ {
+ return $cache[$codepoint] = chr(0xc0 | ($codepoint >> 6)) . chr(0x80 | ($codepoint & 0x3f));
+ }
+ else if ($codepoint <= 0xffff)
+ {
+ return $cache[$codepoint] = chr(0xe0 | ($codepoint >> 12)) . chr(0x80 | (($codepoint >> 6) & 0x3f)) . chr(0x80 | ($codepoint & 0x3f));
+ }
+ else if ($codepoint <= 0x10ffff)
+ {
+ return $cache[$codepoint] = chr(0xf0 | ($codepoint >> 18)) . chr(0x80 | (($codepoint >> 12) & 0x3f)) . chr(0x80 | (($codepoint >> 6) & 0x3f)) . chr(0x80 | ($codepoint & 0x3f));
+ }
+ else
+ {
+ // U+FFFD REPLACEMENT CHARACTER
+ return $cache[$codepoint] = "\xEF\xBF\xBD";
+ }
+ }
+
+ /**
+ * Re-implementation of PHP 4.2.0's is_a()
+ *
+ * @static
+ * @access public
+ * @param object $object The tested object
+ * @param string $class_name The class name
+ * @return bool Returns true if the object is of this class or has this class as one of its parents, false otherwise
+ */
+ function is_a($object, $class_name)
+ {
+ if (function_exists('is_a'))
+ {
+ return is_a($object, $class_name);
+ }
+ elseif (!is_object($object))
+ {
+ return false;
+ }
+ elseif (get_class($object) == strtolower($class_name))
+ {
+ return true;
+ }
+ else
+ {
+ return is_subclass_of($object, $class_name);
+ }
+ }
+
+ /**
+ * Re-implementation of PHP 5's stripos()
+ *
+ * Returns the numeric position of the first occurrence of needle in the
+ * haystack string.
+ *
+ * @static
+ * @access string
+ * @param object $haystack
+ * @param string $needle Note that the needle may be a string of one or more
+ * characters. If needle is not a string, it is converted to an integer
+ * and applied as the ordinal value of a character.
+ * @param int $offset The optional offset parameter allows you to specify which
+ * character in haystack to start searching. The position returned is still
+ * relative to the beginning of haystack.
+ * @return bool If needle is not found, stripos() will return boolean false.
+ */
+ function stripos($haystack, $needle, $offset = 0)
+ {
+ if (function_exists('stripos'))
+ {
+ return stripos($haystack, $needle, $offset);
+ }
+ else
+ {
+ if (is_string($needle))
+ {
+ $needle = strtolower($needle);
+ }
+ elseif (is_int($needle) || is_bool($needle) || is_double($needle))
+ {
+ $needle = strtolower(chr($needle));
+ }
+ else
+ {
+ trigger_error('needle is not a string or an integer', E_USER_WARNING);
+ return false;
+ }
+
+ return strpos(strtolower($haystack), $needle, $offset);
+ }
+ }
+}
+
+/**
+ * Decode HTML Entities
+ *
+ * This implements HTML5 as of revision 967 (2007-06-28)
+ *
+ * @package SimplePie
+ */
+class SimplePie_Decode_HTML_Entities
+{
+ /**
+ * Data to be parsed
+ *
+ * @access private
+ * @var string
+ */
+ var $data = '';
+
+ /**
+ * Currently consumed bytes
+ *
+ * @access private
+ * @var string
+ */
+ var $consumed = '';
+
+ /**
+ * Position of the current byte being parsed
+ *
+ * @access private
+ * @var int
+ */
+ var $position = 0;
+
+ /**
+ * Create an instance of the class with the input data
+ *
+ * @access public
+ * @param string $data Input data
+ */
+ function SimplePie_Decode_HTML_Entities($data)
+ {
+ $this->data = $data;
+ }
+
+ /**
+ * Parse the input data
+ *
+ * @access public
+ * @return string Output data
+ */
+ function parse()
+ {
+ while (($this->position = strpos($this->data, '&', $this->position)) !== false)
+ {
+ $this->consume();
+ $this->entity();
+ $this->consumed = '';
+ }
+ return $this->data;
+ }
+
+ /**
+ * Consume the next byte
+ *
+ * @access private
+ * @return mixed The next byte, or false, if there is no more data
+ */
+ function consume()
+ {
+ if (isset($this->data[$this->position]))
+ {
+ $this->consumed .= $this->data[$this->position];
+ return $this->data[$this->position++];
+ }
+ else
+ {
+ $this->consumed = false;
+ return false;
+ }
+ }
+
+ /**
+ * Consume a range of characters
+ *
+ * @access private
+ * @param string $chars Characters to consume
+ * @return mixed A series of characters that match the range, or false
+ */
+ function consume_range($chars)
+ {
+ if ($len = strspn($this->data, $chars, $this->position))
+ {
+ $data = substr($this->data, $this->position, $len);
+ $this->consumed .= $data;
+ $this->position += $len;
+ return $data;
+ }
+ else
+ {
+ $this->consumed = false;
+ return false;
+ }
+ }
+
+ /**
+ * Unconsume one byte
+ *
+ * @access private
+ */
+ function unconsume()
+ {
+ $this->consumed = substr($this->consumed, 0, -1);
+ $this->position--;
+ }
+
+ /**
+ * Decode an entity
+ *
+ * @access private
+ */
+ function entity()
+ {
+ switch ($this->consume())
+ {
+ case "\x09":
+ case "\x0A":
+ case "\x0B":
+ case "\x0B":
+ case "\x0C":
+ case "\x20":
+ case "\x3C":
+ case "\x26":
+ case false:
+ break;
+
+ case "\x23":
+ switch ($this->consume())
+ {
+ case "\x78":
+ case "\x58":
+ $range = '0123456789ABCDEFabcdef';
+ $hex = true;
+ break;
+
+ default:
+ $range = '0123456789';
+ $hex = false;
+ $this->unconsume();
+ break;
+ }
+
+ if ($codepoint = $this->consume_range($range))
+ {
+ static $windows_1252_specials = array(0x0D => "\x0A", 0x80 => "\xE2\x82\xAC", 0x81 => "\xEF\xBF\xBD", 0x82 => "\xE2\x80\x9A", 0x83 => "\xC6\x92", 0x84 => "\xE2\x80\x9E", 0x85 => "\xE2\x80\xA6", 0x86 => "\xE2\x80\xA0", 0x87 => "\xE2\x80\xA1", 0x88 => "\xCB\x86", 0x89 => "\xE2\x80\xB0", 0x8A => "\xC5\xA0", 0x8B => "\xE2\x80\xB9", 0x8C => "\xC5\x92", 0x8D => "\xEF\xBF\xBD", 0x8E => "\xC5\xBD", 0x8F => "\xEF\xBF\xBD", 0x90 => "\xEF\xBF\xBD", 0x91 => "\xE2\x80\x98", 0x92 => "\xE2\x80\x99", 0x93 => "\xE2\x80\x9C", 0x94 => "\xE2\x80\x9D", 0x95 => "\xE2\x80\xA2", 0x96 => "\xE2\x80\x93", 0x97 => "\xE2\x80\x94", 0x98 => "\xCB\x9C", 0x99 => "\xE2\x84\xA2", 0x9A => "\xC5\xA1", 0x9B => "\xE2\x80\xBA", 0x9C => "\xC5\x93", 0x9D => "\xEF\xBF\xBD", 0x9E => "\xC5\xBE", 0x9F => "\xC5\xB8");
+
+ if ($hex)
+ {
+ $codepoint = hexdec($codepoint);
+ }
+ else
+ {
+ $codepoint = intval($codepoint);
+ }
+
+ if (isset($windows_1252_specials[$codepoint]))
+ {
+ $replacement = $windows_1252_specials[$codepoint];
+ }
+ else
+ {
+ $replacement = SimplePie_Misc::codepoint_to_utf8($codepoint);
+ }
+
+ if ($this->consume() != ';')
+ {
+ $this->unconsume();
+ }
+
+ $consumed_length = strlen($this->consumed);
+ $this->data = substr_replace($this->data, $replacement, $this->position - $consumed_length, $consumed_length);
+ $this->position += strlen($replacement) - $consumed_length;
+ }
+ break;
+
+ default:
+ static $entities = array('Aacute' => "\xC3\x81", 'aacute' => "\xC3\xA1", 'Aacute;' => "\xC3\x81", 'aacute;' => "\xC3\xA1", 'Acirc' => "\xC3\x82", 'acirc' => "\xC3\xA2", 'Acirc;' => "\xC3\x82", 'acirc;' => "\xC3\xA2", 'acute' => "\xC2\xB4", 'acute;' => "\xC2\xB4", 'AElig' => "\xC3\x86", 'aelig' => "\xC3\xA6", 'AElig;' => "\xC3\x86", 'aelig;' => "\xC3\xA6", 'Agrave' => "\xC3\x80", 'agrave' => "\xC3\xA0", 'Agrave;' => "\xC3\x80", 'agrave;' => "\xC3\xA0", 'alefsym;' => "\xE2\x84\xB5", 'Alpha;' => "\xCE\x91", 'alpha;' => "\xCE\xB1", 'AMP' => "\x26", 'amp' => "\x26", 'AMP;' => "\x26", 'amp;' => "\x26", 'and;' => "\xE2\x88\xA7", 'ang;' => "\xE2\x88\xA0", 'apos;' => "\x27", 'Aring' => "\xC3\x85", 'aring' => "\xC3\xA5", 'Aring;' => "\xC3\x85", 'aring;' => "\xC3\xA5", 'asymp;' => "\xE2\x89\x88", 'Atilde' => "\xC3\x83", 'atilde' => "\xC3\xA3", 'Atilde;' => "\xC3\x83", 'atilde;' => "\xC3\xA3", 'Auml' => "\xC3\x84", 'auml' => "\xC3\xA4", 'Auml;' => "\xC3\x84", 'auml;' => "\xC3\xA4", 'bdquo;' => "\xE2\x80\x9E", 'Beta;' => "\xCE\x92", 'beta;' => "\xCE\xB2", 'brvbar' => "\xC2\xA6", 'brvbar;' => "\xC2\xA6", 'bull;' => "\xE2\x80\xA2", 'cap;' => "\xE2\x88\xA9", 'Ccedil' => "\xC3\x87", 'ccedil' => "\xC3\xA7", 'Ccedil;' => "\xC3\x87", 'ccedil;' => "\xC3\xA7", 'cedil' => "\xC2\xB8", 'cedil;' => "\xC2\xB8", 'cent' => "\xC2\xA2", 'cent;' => "\xC2\xA2", 'Chi;' => "\xCE\xA7", 'chi;' => "\xCF\x87", 'circ;' => "\xCB\x86", 'clubs;' => "\xE2\x99\xA3", 'cong;' => "\xE2\x89\x85", 'COPY' => "\xC2\xA9", 'copy' => "\xC2\xA9", 'COPY;' => "\xC2\xA9", 'copy;' => "\xC2\xA9", 'crarr;' => "\xE2\x86\xB5", 'cup;' => "\xE2\x88\xAA", 'curren' => "\xC2\xA4", 'curren;' => "\xC2\xA4", 'Dagger;' => "\xE2\x80\xA1", 'dagger;' => "\xE2\x80\xA0", 'dArr;' => "\xE2\x87\x93", 'darr;' => "\xE2\x86\x93", 'deg' => "\xC2\xB0", 'deg;' => "\xC2\xB0", 'Delta;' => "\xCE\x94", 'delta;' => "\xCE\xB4", 'diams;' => "\xE2\x99\xA6", 'divide' => "\xC3\xB7", 'divide;' => "\xC3\xB7", 'Eacute' => "\xC3\x89", 'eacute' => "\xC3\xA9", 'Eacute;' => "\xC3\x89", 'eacute;' => "\xC3\xA9", 'Ecirc' => "\xC3\x8A", 'ecirc' => "\xC3\xAA", 'Ecirc;' => "\xC3\x8A", 'ecirc;' => "\xC3\xAA", 'Egrave' => "\xC3\x88", 'egrave' => "\xC3\xA8", 'Egrave;' => "\xC3\x88", 'egrave;' => "\xC3\xA8", 'empty;' => "\xE2\x88\x85", 'emsp;' => "\xE2\x80\x83", 'ensp;' => "\xE2\x80\x82", 'Epsilon;' => "\xCE\x95", 'epsilon;' => "\xCE\xB5", 'equiv;' => "\xE2\x89\xA1", 'Eta;' => "\xCE\x97", 'eta;' => "\xCE\xB7", 'ETH' => "\xC3\x90", 'eth' => "\xC3\xB0", 'ETH;' => "\xC3\x90", 'eth;' => "\xC3\xB0", 'Euml' => "\xC3\x8B", 'euml' => "\xC3\xAB", 'Euml;' => "\xC3\x8B", 'euml;' => "\xC3\xAB", 'euro;' => "\xE2\x82\xAC", 'exist;' => "\xE2\x88\x83", 'fnof;' => "\xC6\x92", 'forall;' => "\xE2\x88\x80", 'frac12' => "\xC2\xBD", 'frac12;' => "\xC2\xBD", 'frac14' => "\xC2\xBC", 'frac14;' => "\xC2\xBC", 'frac34' => "\xC2\xBE", 'frac34;' => "\xC2\xBE", 'frasl;' => "\xE2\x81\x84", 'Gamma;' => "\xCE\x93", 'gamma;' => "\xCE\xB3", 'ge;' => "\xE2\x89\xA5", 'GT' => "\x3E", 'gt' => "\x3E", 'GT;' => "\x3E", 'gt;' => "\x3E", 'hArr;' => "\xE2\x87\x94", 'harr;' => "\xE2\x86\x94", 'hearts;' => "\xE2\x99\xA5", 'hellip;' => "\xE2\x80\xA6", 'Iacute' => "\xC3\x8D", 'iacute' => "\xC3\xAD", 'Iacute;' => "\xC3\x8D", 'iacute;' => "\xC3\xAD", 'Icirc' => "\xC3\x8E", 'icirc' => "\xC3\xAE", 'Icirc;' => "\xC3\x8E", 'icirc;' => "\xC3\xAE", 'iexcl' => "\xC2\xA1", 'iexcl;' => "\xC2\xA1", 'Igrave' => "\xC3\x8C", 'igrave' => "\xC3\xAC", 'Igrave;' => "\xC3\x8C", 'igrave;' => "\xC3\xAC", 'image;' => "\xE2\x84\x91", 'infin;' => "\xE2\x88\x9E", 'int;' => "\xE2\x88\xAB", 'Iota;' => "\xCE\x99", 'iota;' => "\xCE\xB9", 'iquest' => "\xC2\xBF", 'iquest;' => "\xC2\xBF", 'isin;' => "\xE2\x88\x88", 'Iuml' => "\xC3\x8F", 'iuml' => "\xC3\xAF", 'Iuml;' => "\xC3\x8F", 'iuml;' => "\xC3\xAF", 'Kappa;' => "\xCE\x9A", 'kappa;' => "\xCE\xBA", 'Lambda;' => "\xCE\x9B", 'lambda;' => "\xCE\xBB", 'lang;' => "\xE3\x80\x88", 'laquo' => "\xC2\xAB", 'laquo;' => "\xC2\xAB", 'lArr;' => "\xE2\x87\x90", 'larr;' => "\xE2\x86\x90", 'lceil;' => "\xE2\x8C\x88", 'ldquo;' => "\xE2\x80\x9C", 'le;' => "\xE2\x89\xA4", 'lfloor;' => "\xE2\x8C\x8A", 'lowast;' => "\xE2\x88\x97", 'loz;' => "\xE2\x97\x8A", 'lrm;' => "\xE2\x80\x8E", 'lsaquo;' => "\xE2\x80\xB9", 'lsquo;' => "\xE2\x80\x98", 'LT' => "\x3C", 'lt' => "\x3C", 'LT;' => "\x3C", 'lt;' => "\x3C", 'macr' => "\xC2\xAF", 'macr;' => "\xC2\xAF", 'mdash;' => "\xE2\x80\x94", 'micro' => "\xC2\xB5", 'micro;' => "\xC2\xB5", 'middot' => "\xC2\xB7", 'middot;' => "\xC2\xB7", 'minus;' => "\xE2\x88\x92", 'Mu;' => "\xCE\x9C", 'mu;' => "\xCE\xBC", 'nabla;' => "\xE2\x88\x87", 'nbsp' => "\xC2\xA0", 'nbsp;' => "\xC2\xA0", 'ndash;' => "\xE2\x80\x93", 'ne;' => "\xE2\x89\xA0", 'ni;' => "\xE2\x88\x8B", 'not' => "\xC2\xAC", 'not;' => "\xC2\xAC", 'notin;' => "\xE2\x88\x89", 'nsub;' => "\xE2\x8A\x84", 'Ntilde' => "\xC3\x91", 'ntilde' => "\xC3\xB1", 'Ntilde;' => "\xC3\x91", 'ntilde;' => "\xC3\xB1", 'Nu;' => "\xCE\x9D", 'nu;' => "\xCE\xBD", 'Oacute' => "\xC3\x93", 'oacute' => "\xC3\xB3", 'Oacute;' => "\xC3\x93", 'oacute;' => "\xC3\xB3", 'Ocirc' => "\xC3\x94", 'ocirc' => "\xC3\xB4", 'Ocirc;' => "\xC3\x94", 'ocirc;' => "\xC3\xB4", 'OElig;' => "\xC5\x92", 'oelig;' => "\xC5\x93", 'Ograve' => "\xC3\x92", 'ograve' => "\xC3\xB2", 'Ograve;' => "\xC3\x92", 'ograve;' => "\xC3\xB2", 'oline;' => "\xE2\x80\xBE", 'Omega;' => "\xCE\xA9", 'omega;' => "\xCF\x89", 'Omicron;' => "\xCE\x9F", 'omicron;' => "\xCE\xBF", 'oplus;' => "\xE2\x8A\x95", 'or;' => "\xE2\x88\xA8", 'ordf' => "\xC2\xAA", 'ordf;' => "\xC2\xAA", 'ordm' => "\xC2\xBA", 'ordm;' => "\xC2\xBA", 'Oslash' => "\xC3\x98", 'oslash' => "\xC3\xB8", 'Oslash;' => "\xC3\x98", 'oslash;' => "\xC3\xB8", 'Otilde' => "\xC3\x95", 'otilde' => "\xC3\xB5", 'Otilde;' => "\xC3\x95", 'otilde;' => "\xC3\xB5", 'otimes;' => "\xE2\x8A\x97", 'Ouml' => "\xC3\x96", 'ouml' => "\xC3\xB6", 'Ouml;' => "\xC3\x96", 'ouml;' => "\xC3\xB6", 'para' => "\xC2\xB6", 'para;' => "\xC2\xB6", 'part;' => "\xE2\x88\x82", 'permil;' => "\xE2\x80\xB0", 'perp;' => "\xE2\x8A\xA5", 'Phi;' => "\xCE\xA6", 'phi;' => "\xCF\x86", 'Pi;' => "\xCE\xA0", 'pi;' => "\xCF\x80", 'piv;' => "\xCF\x96", 'plusmn' => "\xC2\xB1", 'plusmn;' => "\xC2\xB1", 'pound' => "\xC2\xA3", 'pound;' => "\xC2\xA3", 'Prime;' => "\xE2\x80\xB3", 'prime;' => "\xE2\x80\xB2", 'prod;' => "\xE2\x88\x8F", 'prop;' => "\xE2\x88\x9D", 'Psi;' => "\xCE\xA8", 'psi;' => "\xCF\x88", 'QUOT' => "\x22", 'quot' => "\x22", 'QUOT;' => "\x22", 'quot;' => "\x22", 'radic;' => "\xE2\x88\x9A", 'rang;' => "\xE3\x80\x89", 'raquo' => "\xC2\xBB", 'raquo;' => "\xC2\xBB", 'rArr;' => "\xE2\x87\x92", 'rarr;' => "\xE2\x86\x92", 'rceil;' => "\xE2\x8C\x89", 'rdquo;' => "\xE2\x80\x9D", 'real;' => "\xE2\x84\x9C", 'REG' => "\xC2\xAE", 'reg' => "\xC2\xAE", 'REG;' => "\xC2\xAE", 'reg;' => "\xC2\xAE", 'rfloor;' => "\xE2\x8C\x8B", 'Rho;' => "\xCE\xA1", 'rho;' => "\xCF\x81", 'rlm;' => "\xE2\x80\x8F", 'rsaquo;' => "\xE2\x80\xBA", 'rsquo;' => "\xE2\x80\x99", 'sbquo;' => "\xE2\x80\x9A", 'Scaron;' => "\xC5\xA0", 'scaron;' => "\xC5\xA1", 'sdot;' => "\xE2\x8B\x85", 'sect' => "\xC2\xA7", 'sect;' => "\xC2\xA7", 'shy' => "\xC2\xAD", 'shy;' => "\xC2\xAD", 'Sigma;' => "\xCE\xA3", 'sigma;' => "\xCF\x83", 'sigmaf;' => "\xCF\x82", 'sim;' => "\xE2\x88\xBC", 'spades;' => "\xE2\x99\xA0", 'sub;' => "\xE2\x8A\x82", 'sube;' => "\xE2\x8A\x86", 'sum;' => "\xE2\x88\x91", 'sup;' => "\xE2\x8A\x83", 'sup1' => "\xC2\xB9", 'sup1;' => "\xC2\xB9", 'sup2' => "\xC2\xB2", 'sup2;' => "\xC2\xB2", 'sup3' => "\xC2\xB3", 'sup3;' => "\xC2\xB3", 'supe;' => "\xE2\x8A\x87", 'szlig' => "\xC3\x9F", 'szlig;' => "\xC3\x9F", 'Tau;' => "\xCE\xA4", 'tau;' => "\xCF\x84", 'there4;' => "\xE2\x88\xB4", 'Theta;' => "\xCE\x98", 'theta;' => "\xCE\xB8", 'thetasym;' => "\xCF\x91", 'thinsp;' => "\xE2\x80\x89", 'THORN' => "\xC3\x9E", 'thorn' => "\xC3\xBE", 'THORN;' => "\xC3\x9E", 'thorn;' => "\xC3\xBE", 'tilde;' => "\xCB\x9C", 'times' => "\xC3\x97", 'times;' => "\xC3\x97", 'TRADE;' => "\xE2\x84\xA2", 'trade;' => "\xE2\x84\xA2", 'Uacute' => "\xC3\x9A", 'uacute' => "\xC3\xBA", 'Uacute;' => "\xC3\x9A", 'uacute;' => "\xC3\xBA", 'uArr;' => "\xE2\x87\x91", 'uarr;' => "\xE2\x86\x91", 'Ucirc' => "\xC3\x9B", 'ucirc' => "\xC3\xBB", 'Ucirc;' => "\xC3\x9B", 'ucirc;' => "\xC3\xBB", 'Ugrave' => "\xC3\x99", 'ugrave' => "\xC3\xB9", 'Ugrave;' => "\xC3\x99", 'ugrave;' => "\xC3\xB9", 'uml' => "\xC2\xA8", 'uml;' => "\xC2\xA8", 'upsih;' => "\xCF\x92", 'Upsilon;' => "\xCE\xA5", 'upsilon;' => "\xCF\x85", 'Uuml' => "\xC3\x9C", 'uuml' => "\xC3\xBC", 'Uuml;' => "\xC3\x9C", 'uuml;' => "\xC3\xBC", 'weierp;' => "\xE2\x84\x98", 'Xi;' => "\xCE\x9E", 'xi;' => "\xCE\xBE", 'Yacute' => "\xC3\x9D", 'yacute' => "\xC3\xBD", 'Yacute;' => "\xC3\x9D", 'yacute;' => "\xC3\xBD", 'yen' => "\xC2\xA5", 'yen;' => "\xC2\xA5", 'yuml' => "\xC3\xBF", 'Yuml;' => "\xC5\xB8", 'yuml;' => "\xC3\xBF", 'Zeta;' => "\xCE\x96", 'zeta;' => "\xCE\xB6", 'zwj;' => "\xE2\x80\x8D", 'zwnj;' => "\xE2\x80\x8C");
+
+ for ($i = 0, $match = null; $i < 9 && $this->consume(); $i++)
+ {
+ $consumed = substr($this->consumed, 1);
+ if (isset($entities[$consumed]))
+ {
+ $match = $consumed;
+ }
+ }
+
+ if ($match !== null)
+ {
+ $this->data = substr_replace($this->data, $entities[$match], $this->position - strlen($consumed) - 1, strlen($match) + 1);
+ $this->position += strlen($entities[$match]) - strlen($consumed) - 1;
+ }
+ break;
+ }
+ }
+}
+
+class SimplePie_Locator
+{
+ var $useragent;
+ var $timeout;
+ var $file;
+ var $local = array();
+ var $elsewhere = array();
+ var $file_class = 'SimplePie_File';
+ var $cached_entities = array();
+ var $http_base;
+ var $base;
+ var $base_location = 0;
+ var $checked_feeds = 0;
+ var $max_checked_feeds = 10;
+
+ function SimplePie_Locator(&$file, $timeout = 10, $useragent = null, $file_class = 'SimplePie_File', $max_checked_feeds = 10)
+ {
+ $this->file =& $file;
+ $this->file_class = $file_class;
+ $this->useragent = $useragent;
+ $this->timeout = $timeout;
+ $this->max_checked_feeds = $max_checked_feeds;
+ }
+
+ function find($type = SIMPLEPIE_LOCATOR_ALL)
+ {
+ if ($this->is_feed($this->file))
+ {
+ return $this->file;
+ }
+
+ if ($type & ~SIMPLEPIE_LOCATOR_NONE)
+ {
+ $this->get_base();
+ }
+
+ if ($type & SIMPLEPIE_LOCATOR_AUTODISCOVERY && $working = $this->autodiscovery())
+ {
+ return $working;
+ }
+
+ if ($type & (SIMPLEPIE_LOCATOR_LOCAL_EXTENSION | SIMPLEPIE_LOCATOR_LOCAL_BODY | SIMPLEPIE_LOCATOR_REMOTE_EXTENSION | SIMPLEPIE_LOCATOR_REMOTE_BODY) && $this->get_links())
+ {
+ if ($type & SIMPLEPIE_LOCATOR_LOCAL_EXTENSION && $working = $this->extension($this->local))
+ {
+ return $working;
+ }
+
+ if ($type & SIMPLEPIE_LOCATOR_LOCAL_BODY && $working = $this->body($this->local))
+ {
+ return $working;
+ }
+
+ if ($type & SIMPLEPIE_LOCATOR_REMOTE_EXTENSION && $working = $this->extension($this->elsewhere))
+ {
+ return $working;
+ }
+
+ if ($type & SIMPLEPIE_LOCATOR_REMOTE_BODY && $working = $this->body($this->elsewhere))
+ {
+ return $working;
+ }
+ }
+ return null;
+ }
+
+ function is_feed(&$file)
+ {
+ $body = SimplePie_Misc::strip_comments($file->body);
+ if (preg_match('/<([^\s:]+:)?(rss|RDF|feed)' . SIMPLEPIE_PCRE_XML_ATTRIBUTE . '>/i', $body))
+ {
+ return true;
+ }
+ return false;
+ }
+
+ function get_base()
+ {
+ if (isset($this->file->headers['content-location']))
+ {
+ $this->http_base = SimplePie_Misc::absolutize_url(trim($this->file->headers['content-location']), $this->file->url);
+ }
+ else
+ {
+ $this->http_base = $this->file->url;
+ }
+ $this->base = $this->http_base;
+ $elements = SimplePie_Misc::get_element('base', $this->file->body);
+ foreach ($elements as $element)
+ {
+ if ($element['attribs']['href']['data'] !== '')
+ {
+ $this->base = SimplePie_Misc::absolutize_url(trim($element['attribs']['href']['data']), $this->http_base);
+ $this->base_location = $element['offset'];
+ break;
+ }
+ }
+ }
+
+ function autodiscovery()
+ {
+ $links = array_merge(SimplePie_Misc::get_element('link', $this->file->body), SimplePie_Misc::get_element('a', $this->file->body), SimplePie_Misc::get_element('area', $this->file->body));
+ $done = array();
+ foreach ($links as $link)
+ {
+ if ($this->checked_feeds == $this->max_checked_feeds)
+ {
+ break;
+ }
+ if (isset($link['attribs']['href']['data']) && isset($link['attribs']['rel']['data']))
+ {
+ $rel = array_unique(SimplePie_Misc::space_seperated_tokens(strtolower($link['attribs']['rel']['data'])));
+
+ if ($this->base_location < $link['offset'])
+ {
+ $href = SimplePie_Misc::absolutize_url(trim($link['attribs']['href']['data']), $this->base);
+ }
+ else
+ {
+ $href = SimplePie_Misc::absolutize_url(trim($link['attribs']['href']['data']), $this->http_base);
+ }
+
+ if (!in_array($href, $done) && in_array('feed', $rel) || (in_array('alternate', $rel) && !empty($link['attribs']['type']['data']) && in_array(strtolower(SimplePie_Misc::parse_mime($link['attribs']['type']['data'])), array('application/rss+xml', 'application/atom+xml'))))
+ {
+ $this->checked_feeds++;
+ $feed =& new $this->file_class($href, $this->timeout, 5, null, $this->useragent);
+ if ($this->is_feed($feed))
+ {
+ return $feed;
+ }
+ }
+ $done[] = $href;
+ }
+ }
+ return null;
+ }
+
+ function get_links()
+ {
+ $links = SimplePie_Misc::get_element('a', $this->file->body);
+ foreach ($links as $link)
+ {
+ if (isset($link['attribs']['href']['data']))
+ {
+ $href = trim($link['attribs']['href']['data']);
+ $parsed = SimplePie_Misc::parse_url($href);
+ if ($parsed['scheme'] === '' || preg_match('/^(http(s)|feed)?$/i', $parsed['scheme']))
+ {
+ if ($this->base_location < $link['offset'])
+ {
+ $href = SimplePie_Misc::absolutize_url(trim($link['attribs']['href']['data']), $this->base);
+ }
+ else
+ {
+ $href = SimplePie_Misc::absolutize_url(trim($link['attribs']['href']['data']), $this->http_base);
+ }
+
+ $current = SimplePie_Misc::parse_url($this->file->url);
+
+ if ($parsed['authority'] === '' || $parsed['authority'] == $current['authority'])
+ {
+ $this->local[] = $href;
+ }
+ else
+ {
+ $this->elsewhere[] = $href;
+ }
+ }
+ }
+ }
+ $this->local = array_unique($this->local);
+ $this->elsewhere = array_unique($this->elsewhere);
+ if (!empty($this->local) || !empty($this->elsewhere))
+ {
+ return true;
+ }
+ return null;
+ }
+
+ function extension(&$array)
+ {
+ foreach ($array as $key => $value)
+ {
+ if ($this->checked_feeds == $this->max_checked_feeds)
+ {
+ break;
+ }
+ if (in_array(strtolower(strrchr($value, '.')), array('.rss', '.rdf', '.atom', '.xml')))
+ {
+ $this->checked_feeds++;
+ $feed =& new $this->file_class($value, $this->timeout, 5, null, $this->useragent);
+ if ($this->is_feed($feed))
+ {
+ return $feed;
+ }
+ else
+ {
+ unset($array[$key]);
+ }
+ }
+ }
+ return null;
+ }
+
+ function body(&$array)
+ {
+ foreach ($array as $key => $value)
+ {
+ if ($this->checked_feeds == $this->max_checked_feeds)
+ {
+ break;
+ }
+ if (preg_match('/(rss|rdf|atom|xml)/i', $value))
+ {
+ $this->checked_feeds++;
+ $feed =& new $this->file_class($value, $this->timeout, 5, null, $this->useragent);
+ if ($this->is_feed($feed))
+ {
+ return $feed;
+ }
+ else
+ {
+ unset($array[$key]);
+ }
+ }
+ }
+ return null;
+ }
+}
+
+class SimplePie_Parser
+{
+ var $xml;
+ var $error_code;
+ var $error_string;
+ var $current_line;
+ var $current_column;
+ var $current_byte;
+ var $separator = ' ';
+ var $feed = false;
+ var $namespace = array('');
+ var $element = array('');
+ var $xml_base = array('');
+ var $xml_base_explicit = array(false);
+ var $xml_lang = array('');
+ var $data = array();
+ var $datas = array(array());
+ var $current_xhtml_construct = -1;
+ var $encoding;
+
+ function pre_process(&$data, $encoding)
+ {
+ // Use UTF-8 if we get passed US-ASCII, as every US-ASCII character is a UTF-8 character
+ if (strtoupper($encoding) == 'US-ASCII')
+ {
+ $this->encoding = 'UTF-8';
+ }
+ else
+ {
+ $this->encoding = $encoding;
+ }
+
+ // Strip BOM:
+ // UTF-32 Big Endian BOM
+ if (strpos($data, "\x0\x0\xFE\xFF") === 0)
+ {
+ $data = substr($data, 4);
+ }
+ // UTF-32 Little Endian BOM
+ elseif (strpos($data, "\xFF\xFE\x0\x0") === 0)
+ {
+ $data = substr($data, 4);
+ }
+ // UTF-16 Big Endian BOM
+ elseif (strpos($data, "\xFE\xFF") === 0)
+ {
+ $data = substr($data, 2);
+ }
+ // UTF-16 Little Endian BOM
+ elseif (strpos($data, "\xFF\xFE") === 0)
+ {
+ $data = substr($data, 2);
+ }
+ // UTF-8 BOM
+ elseif (strpos($data, "\xEF\xBB\xBF") === 0)
+ {
+ $data = substr($data, 3);
+ }
+
+ // Make sure the XML prolog is sane and has the correct encoding
+ $data = preg_replace("/^<\?xml[\x20\x9\xD\xA]+version([\x20\x9\xD\xA]+)?=([\x20\x9\xD\xA]+)?(\"1.0\"|'1.0'|\"1.1\"|'1.1')([\x20\x9\xD\xA]+encoding([\x20\x9\xD\xA]+)?=([\x20\x9\xD\xA]+)?(\"[A-Za-z][A-Za-z0-9._\-]*\"|'[A-Za-z][A-Za-z0-9._\-]*'))?([\x20\x9\xD\xA]+standalone([\x20\x9\xD\xA]+)?=([\x20\x9\xD\xA]+)?(\"(yes|no)\"|'(yes|no)'))?([\x20\x9\xD\xA]+)?\?>/", '', $data);
+ $data = "<?xml version='1.0' encoding='$encoding'?>\n" . $data;
+ }
+
+ function parse(&$data)
+ {
+ $return = true;
+
+ // Create the parser
+ $this->xml = xml_parser_create_ns($this->encoding, $this->separator);
+ xml_parser_set_option($this->xml, XML_OPTION_SKIP_WHITE, 1);
+ xml_parser_set_option($this->xml, XML_OPTION_CASE_FOLDING, 0);
+ xml_set_object($this->xml, $this);
+ xml_set_character_data_handler($this->xml, 'cdata');
+ xml_set_element_handler($this->xml, 'tag_open', 'tag_close');
+
+ // workound for a bug in PHP/libxml2 as described on http://bugs.simplepie.org/issues/show/101
+ $data = str_replace('&lt;', '&#60;', $data);
+ $data = str_replace('&gt;', '&#62;', $data);
+ $data = str_replace('&amp;', '&#38;', $data);
+ $data = str_replace('&apos;', '&#39;', $data);
+ $data = str_replace('&quot;', '&#34;', $data);
+
+ // Parse!
+ if (!xml_parse($this->xml, $data, true))
+ {
+ $this->data = null;
+ $this->error_code = xml_get_error_code($this->xml);
+ $this->error_string = xml_error_string($this->error_code);
+ $return = false;
+ }
+ $this->current_line = xml_get_current_line_number($this->xml);
+ $this->current_column = xml_get_current_column_number($this->xml);
+ $this->current_byte = xml_get_current_byte_index($this->xml);
+ xml_parser_free($this->xml);
+ return $return;
+ }
+
+ function get_error_code()
+ {
+ return $this->error_code;
+ }
+
+ function get_error_string()
+ {
+ return $this->error_string;
+ }
+
+ function get_current_line()
+ {
+ return $this->current_line;
+ }
+
+ function get_current_column()
+ {
+ return $this->current_column;
+ }
+
+ function get_current_byte()
+ {
+ return $this->current_byte;
+ }
+
+ function get_data()
+ {
+ return $this->data;
+ }
+
+ function tag_open($parser, $tag, $attributes)
+ {
+ if ($this->feed === 0)
+ {
+ return;
+ }
+ elseif ($this->feed == false)
+ {
+ if (in_array($tag, array(
+ SIMPLEPIE_NAMESPACE_ATOM_10 . $this->separator . 'feed',
+ SIMPLEPIE_NAMESPACE_ATOM_03 . $this->separator . 'feed',
+ 'rss',
+ SIMPLEPIE_NAMESPACE_RDF . $this->separator . 'RDF'
+ )))
+ {
+ $this->feed = 1;
+ }
+ }
+ else
+ {
+ $this->feed++;
+ }
+
+ list($this->namespace[], $this->element[]) = $this->split_ns($tag);
+
+ $attribs = array();
+ foreach ($attributes as $name => $value)
+ {
+ list($attrib_namespace, $attribute) = $this->split_ns($name);
+ $attribs[$attrib_namespace][$attribute] = $value;
+ }
+
+ if (isset($attribs[SIMPLEPIE_NAMESPACE_XML]['base']))
+ {
+ $this->xml_base[] = SimplePie_Misc::absolutize_url($attribs[SIMPLEPIE_NAMESPACE_XML]['base'], end($this->xml_base));
+ $this->xml_base_explicit[] = true;
+ }
+ else
+ {
+ $this->xml_base[] = end($this->xml_base);
+ $this->xml_base_explicit[] = end($this->xml_base_explicit);
+ }
+
+ if (isset($attribs[SIMPLEPIE_NAMESPACE_XML]['lang']))
+ {
+ $this->xml_lang[] = $attribs[SIMPLEPIE_NAMESPACE_XML]['lang'];
+ }
+ else
+ {
+ $this->xml_lang[] = end($this->xml_lang);
+ }
+
+ if ($this->current_xhtml_construct >= 0)
+ {
+ $this->current_xhtml_construct++;
+ if (end($this->namespace) == SIMPLEPIE_NAMESPACE_XHTML)
+ {
+ $this->data['data'] .= '<' . end($this->element);
+ if (isset($attribs['']))
+ {
+ foreach ($attribs[''] as $name => $value)
+ {
+ $this->data['data'] .= ' ' . $name . '="' . htmlspecialchars($value, ENT_COMPAT, $this->encoding) . '"';
+ }
+ }
+ $this->data['data'] .= '>';
+ }
+ }
+ else
+ {
+ $this->datas[] =& $this->data;
+ $this->data =& $this->data['child'][end($this->namespace)][end($this->element)][];
+ $this->data = array('data' => '', 'attribs' => $attribs, 'xml_base' => end($this->xml_base), 'xml_base_explicit' => end($this->xml_base_explicit), 'xml_lang' => end($this->xml_lang));
+ if ((end($this->namespace) == SIMPLEPIE_NAMESPACE_ATOM_03 && in_array(end($this->element), array('title', 'tagline', 'copyright', 'info', 'summary', 'content')) && isset($attribs['']['mode']) && $attribs['']['mode'] == 'xml')
+ || (end($this->namespace) == SIMPLEPIE_NAMESPACE_ATOM_10 && in_array(end($this->element), array('rights', 'subtitle', 'summary', 'info', 'title', 'content')) && isset($attribs['']['type']) && $attribs['']['type'] == 'xhtml'))
+ {
+ $this->current_xhtml_construct = 0;
+ }
+ }
+ }
+
+ function cdata($parser, $cdata)
+ {
+ if ($this->current_xhtml_construct >= 0)
+ {
+ $this->data['data'] .= htmlspecialchars($cdata, ENT_QUOTES, $this->encoding);
+ }
+ elseif ($this->feed > 1)
+ {
+ $this->data['data'] .= $cdata;
+ }
+ }
+
+ function tag_close($parser, $tag)
+ {
+ if (!$this->feed)
+ {
+ return;
+ }
+
+ if ($this->current_xhtml_construct >= 0)
+ {
+ $this->current_xhtml_construct--;
+ if (end($this->namespace) == SIMPLEPIE_NAMESPACE_XHTML && !in_array(end($this->element), array('area', 'base', 'basefont', 'br', 'col', 'frame', 'hr', 'img', 'input', 'isindex', 'link', 'meta', 'param')))
+ {
+ $this->data['data'] .= '</' . end($this->element) . '>';
+ }
+ }
+ if ($this->current_xhtml_construct == -1)
+ {
+ $this->data =& $this->datas[$this->feed];
+ array_pop($this->datas);
+ }
+
+ array_pop($this->element);
+ array_pop($this->namespace);
+ array_pop($this->xml_base);
+ array_pop($this->xml_base_explicit);
+ array_pop($this->xml_lang);
+ $this->feed--;
+ }
+
+ function split_ns($string)
+ {
+ static $cache = array();
+ if (!isset($cache[$string]))
+ {
+ if ($pos = strpos($string, $this->separator))
+ {
+ static $separator_length;
+ if (!$separator_length)
+ {
+ $separator_length = strlen($this->separator);
+ }
+ $cache[$string] = array(substr($string, 0, $pos), substr($string, $pos + $separator_length));
+ }
+ else
+ {
+ $cache[$string] = array('', $string);
+ }
+ }
+ return $cache[$string];
+ }
+}
+
+/**
+ * @todo Move to using an actual HTML parser (this will allow tags to be properly stripped, and to switch between HTML and XHTML), this will also make it easier to shortern a string while preserving HTML tags
+ */
+class SimplePie_Sanitize
+{
+ // Private vars
+ var $base;
+
+ // Options
+ var $remove_div = true;
+ var $image_handler = '';
+ var $strip_htmltags = array('base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'iframe', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style');
+ var $encode_instead_of_strip = false;
+ var $strip_attributes = array('bgsound', 'class', 'expr', 'id', 'style', 'onclick', 'onerror', 'onfinish', 'onmouseover', 'onmouseout', 'onfocus', 'onblur', 'lowsrc', 'dynsrc');
+ var $strip_comments = false;
+ var $output_encoding = 'UTF-8';
+ var $enable_cache = true;
+ var $cache_location = './cache';
+ var $cache_name_function = 'md5';
+ var $cache_class = 'SimplePie_Cache';
+ var $file_class = 'SimplePie_File';
+ var $timeout = 10;
+ var $useragent = '';
+ var $force_fsockopen = false;
+
+ var $replace_url_attributes = array(
+ 'a' => 'href',
+ 'area' => 'href',
+ 'blockquote' => 'cite',
+ 'del' => 'cite',
+ 'form' => 'action',
+ 'img' => array('longdesc', 'src'),
+ 'input' => 'src',
+ 'ins' => 'cite',
+ 'q' => 'cite'
+ );
+
+ function remove_div($enable = true)
+ {
+ $this->remove_div = (bool) $enable;
+ }
+
+ function set_image_handler($page = false)
+ {
+ if ($page)
+ {
+ $this->image_handler = (string) $page;
+ }
+ else
+ {
+ $this->image_handler = false;
+ }
+ }
+
+ function pass_cache_data($enable_cache = true, $cache_location = './cache', $cache_name_function = 'md5', $cache_class = 'SimplePie_Cache')
+ {
+ if (isset($enable_cache))
+ {
+ $this->enable_cache = (bool) $enable_cache;
+ }
+
+ if ($cache_location)
+ {
+ $this->cache_location = (string) $cache_location;
+ }
+
+ if ($cache_name_function)
+ {
+ $this->cache_name_function = (string) $cache_name_function;
+ }
+
+ if ($cache_class)
+ {
+ $this->cache_class = (string) $cache_class;
+ }
+ }
+
+ function pass_file_data($file_class = 'SimplePie_File', $timeout = 10, $useragent = '', $force_fsockopen = false)
+ {
+ if ($file_class)
+ {
+ $this->file_class = (string) $file_class;
+ }
+
+ if ($timeout)
+ {
+ $this->timeout = (string) $timeout;
+ }
+
+ if ($useragent)
+ {
+ $this->useragent = (string) $useragent;
+ }
+
+ if ($force_fsockopen)
+ {
+ $this->force_fsockopen = (string) $force_fsockopen;
+ }
+ }
+
+ function strip_htmltags($tags = array('base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'iframe', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style'))
+ {
+ if ($tags)
+ {
+ if (is_array($tags))
+ {
+ $this->strip_htmltags = $tags;
+ }
+ else
+ {
+ $this->strip_htmltags = explode(',', $tags);
+ }
+ }
+ else
+ {
+ $this->strip_htmltags = false;
+ }
+ }
+
+ function encode_instead_of_strip($encode = false)
+ {
+ $this->encode_instead_of_strip = (bool) $encode;
+ }
+
+ function strip_attributes($attribs = array('bgsound', 'class', 'expr', 'id', 'style', 'onclick', 'onerror', 'onfinish', 'onmouseover', 'onmouseout', 'onfocus', 'onblur', 'lowsrc', 'dynsrc'))
+ {
+ if ($attribs)
+ {
+ if (is_array($attribs))
+ {
+ $this->strip_attributes = $attribs;
+ }
+ else
+ {
+ $this->strip_attributes = explode(',', $attribs);
+ }
+ }
+ else
+ {
+ $this->strip_attributes = false;
+ }
+ }
+
+ function strip_comments($strip = false)
+ {
+ $this->strip_comments = (bool) $strip;
+ }
+
+ function set_output_encoding($encoding = 'UTF-8')
+ {
+ $this->output_encoding = (string) $encoding;
+ }
+
+ /**
+ * Set element/attribute key/value pairs of HTML attributes
+ * containing URLs that need to be resolved relative to the feed
+ *
+ * @access public
+ * @since 1.0
+ * @param array $element_attribute Element/attribute key/value pairs
+ */
+ function set_url_replacements($element_attribute = array('a' => 'href', 'area' => 'href', 'blockquote' => 'cite', 'del' => 'cite', 'form' => 'action', 'img' => array('longdesc', 'src'), 'input' => 'src', 'ins' => 'cite', 'q' => 'cite'))
+ {
+ $this->replace_url_attributes = (array) $element_attribute;
+ }
+
+ function sanitize($data, $type, $base = '')
+ {
+ $data = trim($data);
+ if ($data !== '' || $type & SIMPLEPIE_CONSTRUCT_IRI)
+ {
+ if ($type & SIMPLEPIE_CONSTRUCT_MAYBE_HTML)
+ {
+ if (preg_match('/(&(#(x[0-9a-fA-F]+|[0-9]+)|[a-zA-Z0-9]+)|<\/(\w+)' . SIMPLEPIE_PCRE_HTML_ATTRIBUTE . '>)/', $data))
+ {
+ $type |= SIMPLEPIE_CONSTRUCT_HTML;
+ }
+ else
+ {
+ $type |= SIMPLEPIE_CONSTRUCT_TEXT;
+ }
+ }
+
+ if ($type & SIMPLEPIE_CONSTRUCT_BASE64)
+ {
+ $data = base64_decode($data);
+ }
+
+ if ($type & SIMPLEPIE_CONSTRUCT_XHTML)
+ {
+ if ($this->remove_div)
+ {
+ $data = preg_replace('/^<div' . SIMPLEPIE_PCRE_XML_ATTRIBUTE . '>/', '', $data);
+ $data = preg_replace('/<\/div>$/', '', $data);
+ }
+ else
+ {
+ $data = preg_replace('/^<div' . SIMPLEPIE_PCRE_XML_ATTRIBUTE . '>/', '<div>', $data);
+ }
+ }
+
+ if ($type & (SIMPLEPIE_CONSTRUCT_HTML | SIMPLEPIE_CONSTRUCT_XHTML))
+ {
+ // Strip comments
+ if ($this->strip_comments)
+ {
+ $data = SimplePie_Misc::strip_comments($data);
+ }
+
+ // Strip out HTML tags and attributes that might cause various security problems.
+ // Based on recommendations by Mark Pilgrim at:
+ // http://diveintomark.org/archives/2003/06/12/how_to_consume_rss_safely
+ if ($this->strip_htmltags)
+ {
+ foreach ($this->strip_htmltags as $tag)
+ {
+ $pcre = "/<($tag)" . SIMPLEPIE_PCRE_HTML_ATTRIBUTE . "(>(.*)<\/$tag" . SIMPLEPIE_PCRE_HTML_ATTRIBUTE . '>|(\/)?>)/siU';
+ while (preg_match($pcre, $data))
+ {
+ $data = preg_replace_callback($pcre, array(&$this, 'do_strip_htmltags'), $data);
+ }
+ }
+ }
+
+ if ($this->strip_attributes)
+ {
+ foreach ($this->strip_attributes as $attrib)
+ {
+ $data = preg_replace('/ '. trim($attrib) .'=("|&quot;)(\w|\s|=|-|:|;|\/|\.|\?|&|,|#|!|\(|\)|\'|&apos;|<|>|\+|{|})*("|&quot;)/i', '', $data);
+ $data = preg_replace('/ '. trim($attrib) .'=(\'|&apos;)(\w|\s|=|-|:|;|\/|\.|\?|&|,|#|!|\(|\)|"|&quot;|<|>|\+|{|})*(\'|&apos;)/i', '', $data);
+ $data = preg_replace('/ '. trim($attrib) .'=(\w|\s|=|-|:|;|\/|\.|\?|&|,|#|!|\(|\)|\+|{|})*/i', '', $data);
+ }
+ }
+
+ // Replace relative URLs
+ $this->base = $base;
+ foreach ($this->replace_url_attributes as $element => $attributes)
+ {
+ $data = $this->replace_urls($data, $element, $attributes);
+ }
+
+ // If image handling (caching, etc.) is enabled, cache and rewrite all the image tags.
+ if (isset($this->image_handler) && ((string) $this->image_handler) !== '' && $this->enable_cache)
+ {
+ $images = SimplePie_Misc::get_element('img', $data);
+ foreach ($images as $img)
+ {
+ if (isset($img['attribs']['src']['data']))
+ {
+ $image_url = $img['attribs']['src']['data'];
+ $cache =& new $this->cache_class($this->cache_location, call_user_func($this->cache_name_function, $image_url), 'spi');
+
+ if ($cache->load())
+ {
+ $img['attribs']['src']['data'] = $this->image_handler . rawurlencode($img['attribs']['src']['data']);
+ $data = str_replace($img['full'], SimplePie_Misc::element_implode($img), $data);
+ }
+ else
+ {
+ $file =& new $this->file_class($image_url, $this->timeout, 5, array('X-FORWARDED-FOR' => $_SERVER['REMOTE_ADDR']), $this->useragent, $this->force_fsockopen);
+ $headers = $file->headers;
+
+ if ($file->success && ($file->status_code == 200 || ($file->status_code > 206 && $file->status_code < 300)))
+ {
+ if (!$cache->save(array('headers' => $file->headers, 'body' => $file->body)))
+ {
+ trigger_error("$cache->name is not writeable", E_USER_WARNING);
+ }
+ $img['attribs']['src']['data'] = $this->image_handler . rawurlencode($img['attribs']['src']['data']);
+ $data = str_replace($img['full'], SimplePie_Misc::element_implode($img), $data);
+ }
+ }
+ }
+ }
+ }
+
+ // Having (possibly) taken stuff out, there may now be whitespace at the beginning/end of the data
+ $data = trim($data);
+ }
+
+ if ($type & SIMPLEPIE_CONSTRUCT_IRI)
+ {
+ $data = SimplePie_Misc::absolutize_url($data, $base);
+ }
+
+ if ($type & (SIMPLEPIE_CONSTRUCT_TEXT | SIMPLEPIE_CONSTRUCT_IRI))
+ {
+ $data = htmlspecialchars($data, ENT_COMPAT, 'UTF-8');
+ }
+
+ if ($this->output_encoding != 'UTF-8')
+ {
+ $data = SimplePie_Misc::change_encoding($data, 'UTF-8', $this->output_encoding);
+ }
+ }
+ return $data;
+ }
+
+ function replace_urls($data, $tag, $attributes)
+ {
+ if (!is_array($this->strip_htmltags) || !in_array($tag, $this->strip_htmltags))
+ {
+ $elements = SimplePie_Misc::get_element($tag, $data);
+ foreach ($elements as $element)
+ {
+ if (is_array($attributes))
+ {
+ foreach ($attributes as $attribute)
+ {
+ if (isset($element['attribs'][$attribute]['data']))
+ {
+ $element['attribs'][$attribute]['data'] = SimplePie_Misc::absolutize_url($element['attribs'][$attribute]['data'], $this->base);
+ $data = str_replace($element['full'], SimplePie_Misc::element_implode($element), $data);
+ }
+ }
+ }
+ elseif (isset($element['attribs'][$attributes]['data']))
+ {
+ $element['attribs'][$attributes]['data'] = SimplePie_Misc::absolutize_url($element['attribs'][$attributes]['data'], $this->base);
+ $data = str_replace($element['full'], SimplePie_Misc::element_implode($element), $data);
+ }
+ }
+ }
+ return $data;
+ }
+
+ function do_strip_htmltags($match)
+ {
+ if ($this->encode_instead_of_strip)
+ {
+ if (isset($match[4]) && !in_array(strtolower($match[1]), array('script', 'style')))
+ {
+ $match[1] = htmlspecialchars($match[1], ENT_COMPAT, 'UTF-8');
+ $match[2] = htmlspecialchars($match[2], ENT_COMPAT, 'UTF-8');
+ return "&lt;$match[1]$match[2]&gt;$match[3]&lt;/$match[1]&gt;";
+ }
+ else
+ {
+ return htmlspecialchars($match[0], ENT_COMPAT, 'UTF-8');
+ }
+ }
+ elseif (isset($match[4]) && !in_array(strtolower($match[1]), array('script', 'style')))
+ {
+ return $match[4];
+ }
+ else
+ {
+ return '';
+ }
+ }
+}
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/TarLib.class.php b/mod/dokuwiki/vendors/dokuwiki/inc/TarLib.class.php
new file mode 100644
index 000000000..ab802163b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/TarLib.class.php
@@ -0,0 +1,918 @@
+<?php
+/**
+ * TAR format class - Creates TAR archives
+ *
+ * This class is part or the MaxgComp suite and originally named
+ * MaxgTar class.
+ *
+ * Modified for Dokuwiki
+ *
+ * @license GPL
+ * @link http://docs.maxg.info
+ * @author Bouchon <tarlib@bouchon.org> (Maxg)
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ */
+
+
+/**
+ * Those constants represent the compression method to use.
+ * COMPRESS_GZIP is used for the GZIP compression; COMPRESS_BZIP for
+ * BZIP2 and COMPRESS_NONE for no compression.
+ *
+ * On the other hand, COMPRESS_AUTO is a bit harder. It will first check
+ * if the zlib extensions are loaded.
+ * If it is, GZIP will be used. Else it will check if the bz2 extensions
+ * are loaded. If it is, BZIP2 will be used. Else no compression will be
+ * performed.
+ *
+ * You can then use getCompression() to know the compression chosen.
+ *
+ * If you selected a compression which can't be used (i.e extension not
+ * present), it will be just disabled, and won't produce any error !
+ * As a consequence, getCompression() will return COMPRESS_NONE
+ *
+ * ARCHIVE_DYNAMIC can be passed as the first argument of the constructor, to
+ * create an archive in memory instead of a file. See also: MaxgTar(),
+ * getDynamicArchive() and writeArchive()
+ *
+ * ARCHIVE_RENAMECOMP is a flag that can be multiplied by the compression method
+ * (i.e COMPRESS_AUTO * ARCHIVE_RENAMECOMP). This will add the correct extension
+ * to the archive name, which is useful with COMPRESS_AUTO, ie .bz2 if you gave
+ * COMPRESS_BZIP. See also getCompression(TRUE) which does exactly the
+ * same
+ *
+ * COMPRESS_DETECT does exactly the opposite and try to detect the
+ * compression to use to read the archive depending on its extension. (i.e if
+ * the archive ends with .tar.gz TarLib will try to decompress it with
+ * GZIP). See also setCompression()
+ *
+ * FULL_ARCHIVE is a -1 constant that means "the complete archive" when
+ * extracting. This is explained in Extract()
+ */
+define('COMPRESS_GZIP',1);
+define('COMPRESS_BZIP',2);
+define('COMPRESS_AUTO',3);
+define('COMPRESS_NONE',0);
+define('TARLIB_VERSION','1.2');
+define('FULL_ARCHIVE',-1);
+define('ARCHIVE_DYNAMIC',0);
+define('ARCHIVE_RENAMECOMP',5);
+define('COMPRESS_DETECT',-1);
+
+class TarLib
+{
+ var $_comptype;
+ var $_compzlevel;
+ var $_fp;
+ var $_memdat;
+ var $_nomf;
+ var $_result;
+ var $_initerror;
+
+ /**
+ * constructor, initialize the class
+ *
+ * The constructor initialize the variables and prepare the class for the
+ * archive, and return the object created. Note that you can use multiple
+ * instances of the MaxgTar class, if you call this function another time and
+ * store the object in an other variable.
+ *
+ * In fact, MaxgTar accepts the following arguments (all are optional) :
+ *
+ * filename can be either a file name (absolute or relative). In this
+ * case, it can be used both for reading and writing. You can also open
+ * remote archive if you add a protocole name at the beginning of the file
+ * (ie https://host.dom/archive.tar.gz), but for reading only and if the
+ * directive allow_url_fopen is enabled in PHP.INI (this can be checked with
+ * TarInfo()). If you pass a file that doesn't exist, the script
+ * will try to create it. If the archive already exists and contains files,
+ * you can use Add() to append files.But by default this parameter
+ * is ARCHIVE_DYNAMIC (write only) so the archive is created in memory and
+ * can be sent to a file [writeArchive()] or to the client
+ * [sendClient()]
+ *
+ * compression_type should be a constant that represents a type of
+ * compression, or its integer value. The different values are described in
+ * the constants.
+ *
+ * compression_level is an integer between 1 and 9 (by default) an
+ * represent the GZIP or BZIP compression level. 1 produce fast compression,
+ * and 9 produce smaller files. See the RFC 1952 for more infos.
+ */
+ function tarlib($p_filen = ARCHIVE_DYNAMIC , $p_comptype = COMPRESS_AUTO, $p_complevel = 9)
+ {
+ $this->_initerror = 0;
+ $this->_nomf = $p_filen; $flag=0;
+ if($p_comptype && $p_comptype % 5 == 0){$p_comptype /= ARCHIVE_RENAMECOMP; $flag=1;}
+
+ if($p_complevel > 0 && $p_complevel <= 9) $this->_compzlevel = $p_complevel;
+ else $p_complevel = 9;
+
+ if($p_comptype == COMPRESS_DETECT)
+ {
+ if(strtolower(substr($p_filen,-3)) == '.gz') $p_comptype = COMPRESS_GZIP;
+ elseif(strtolower(substr($p_filen,-4)) == '.bz2') $p_comptype = COMPRESS_BZIP;
+ else $p_comptype = COMPRESS_NONE;
+ }
+
+ switch($p_comptype)
+ {
+ case COMPRESS_GZIP:
+ if(!extension_loaded('zlib')) $this->_initerror = -1;
+ $this->_comptype = COMPRESS_GZIP;
+ break;
+
+ case COMPRESS_BZIP:
+ if(!extension_loaded('bz2')) $this->_inierror = -2;
+ $this->_comptype = COMPRESS_BZIP;
+ break;
+
+ case COMPRESS_AUTO:
+ if(extension_loaded('zlib'))
+ $this->_comptype = COMPRESS_GZIP;
+ elseif(extension_loaded('bz2'))
+ $this->_comptype = COMPRESS_BZIP;
+ else
+ $this->_comptype = COMPRESS_NONE;
+ break;
+
+ default:
+ $this->_comptype = COMPRESS_NONE;
+ }
+
+ if($this->_init_error < 0) $this->_comptype = COMPRESS_NONE;
+
+ if($flag) $this->_nomf.= '.'.$this->getCompression(1);
+ $this->_result = true;
+ }
+
+ /**
+ * Recycle a TAR object.
+ *
+ * This function does exactly the same as TarLib (constructor), except it
+ * returns a status code.
+ */
+ function setArchive($p_name='', $p_comp = COMPRESS_AUTO, $p_level=9)
+ {
+ $this->_CompTar();
+ $this->TarLib($p_name, $p_comp, $p_level);
+ return $this->_result;
+ }
+
+ /**
+ * Get the compression used to generate the archive
+ *
+ * This is a very useful function when you're using dynamical archives.
+ * Besides, if you let the script chose which compression to use, you'll have
+ * a problem when you'll want to send it to the client if you don't know
+ * which compression was used.
+ *
+ * There are two ways to call this function : if you call it without argument
+ * or with FALSE, it will return the compression constants, explained on the
+ * MaxgTar Constants. If you call it with GetExtension on TRUE it will
+ * return the extension without starting dot (ie "tar" or "tar.bz2" or
+ * "tar.gz")
+ *
+ * NOTE: This can be done with the flag ARCHIVE_RENAMECOMP, see the
+ * MaxgTar Constants
+ */
+ function getCompression($ext = false)
+ {
+ $exts = Array('tar','tar.gz','tar.bz2');
+ if($ext) return $exts[$this->_comptype];
+ return $this->_comptype;
+ }
+
+ /**
+ * Change the compression mode.
+ *
+ * This function will change the compression methode to read or write
+ * the archive. See the MaxgTar Constants to see which constants you can use.
+ * It may look strange, but it returns the GZIP compression level.
+ */
+ function setCompression($p_comp = COMPRESS_AUTO)
+ {
+ $this->setArchive($this->_nomf, $p_comp, $this->_compzlevel);
+ return $this->_compzlevel;
+ }
+
+ /**
+ * Returns the compressed dynamic archive.
+ *
+ * When you're working with dynamic archives, use this function to grab
+ * the final compressed archive in a string ready to be put in a SQL table or
+ * in a file.
+ */
+ function getDynamicArchive()
+ {
+ return $this->_encode($this->_memdat);
+ }
+
+ /**
+ * Write a dynamical archive into a file
+ *
+ * This function attempts to write a dynamicaly-genrated archive into
+ * TargetFile on the webserver. It returns a TarErrorStr() status
+ * code.
+ *
+ * To know the extension to add to the file if you're using AUTO_DETECT
+ * compression, you can use getCompression().
+ */
+ function writeArchive($p_archive) {
+ if(!$this->_memdat) return -7;
+ $fp = @fopen($p_archive, 'wb');
+ if(!$fp) return -6;
+
+ fwrite($fp, $this->_memdat);
+ fclose($fp);
+
+ return true;
+ }
+
+ /**
+ * Send a TAR archive to the client browser.
+ *
+ * This function will send an archive to the client, and return a status
+ * code, but can behave differently depending on the arguments you give. All
+ * arguments are optional.
+ *
+ * ClientName is used to specify the archive name to give to the browser. If
+ * you don't give one, it will send the constructor filename or return an
+ * error code in case of dynamical archive.
+ *
+ * FileName is optional and used to send a specific archive. Leave it blank
+ * to send dynamical archives or the current working archive.
+ *
+ * If SendHeaders is enabled (by default), the library will send the HTTP
+ * headers itself before it sends the contents. This headers are :
+ * Content-Type, Content-Disposition, Content-Length and Accept-Range.
+ *
+ * Please note that this function DOES NOT stops the script so don't forget
+ * to exit() to avoid your script sending other data and corrupt the archive.
+ * Another note : for AUTO_DETECT dynamical archives you can know the
+ * extension to add to the name with getCompression()
+ */
+ function sendClient($name = '', $archive = '', $headers = true)
+ {
+ if(!$name && !$this->_nomf) return -9;
+ if(!$archive && !$this->_memdat) return -10;
+ if(!$name) $name = basename($this->_nomf);
+
+ if($archive){ if(!file_exists($archive)) return -11; }
+ else $decoded = $this->getDynamicArchive();
+
+ if($headers)
+ {
+ header('Content-Type: application/x-gtar');
+ header('Content-Disposition: attachment; filename='.basename($name));
+ header('Accept-Ranges: bytes');
+ header('Content-Length: '.($archive ? filesize($archive) : strlen($decoded)));
+ }
+
+ if($archive)
+ {
+ $fp = @fopen($archive,'rb');
+ if(!$fp) return -4;
+
+ while(!feof($fp)) echo fread($fp,2048);
+ }
+ else
+ {
+ echo $decoded;
+ }
+
+ return true;
+ }
+
+ /**
+ * Extract part or totality of the archive.
+ *
+ * This function can extract files from an archive, and returns then a
+ * status codes that can be converted with TarErrorStr() into a
+ * human readable message.
+ *
+ * Only the first argument is required, What and it can be either the
+ * constant FULL_ARCHIVE or an indexed array containing each file you want to
+ * extract.
+ *
+ * To contains the target folder to extract the archive. It is optional and
+ * the default value is '.' which means the current folder. If the target
+ * folder doesn't exist, the script attempts to create it and give it
+ * permissions 0777 by default.
+ *
+ * RemovePath is very usefull when you want to extract files from a subfoler
+ * in the archive to a root folder. For instance, if you have a file in the
+ * archive called some/sub/folder/test.txt and you want to extract it to the
+ * script folder, you can call Extract with To = '.' and RemovePath =
+ * 'some/sub/folder/'
+ *
+ * FileMode is optional and its default value is 0755. It is in fact the UNIX
+ * permission in octal mode (prefixed with a 0) that will be given on each
+ * extracted file.
+ */
+ function Extract($p_what = FULL_ARCHIVE, $p_to = '.', $p_remdir='', $p_mode = 0755)
+ {
+ if(!$this->_OpenRead()) return -4;
+// if(!@is_dir($p_to)) if(!@mkdir($p_to, 0777)) return -8; --CS
+ if(!@is_dir($p_to)) if(!$this->_dirApp($p_to)) return -8; //--CS (route through correct dir fn)
+
+ $ok = $this->_extractList($p_to, $p_what, $p_remdir, $p_mode);
+ $this->_CompTar();
+
+ return $ok;
+ }
+
+ /**
+ * Create a new package with the given files
+ *
+ * This function will attempt to create a new archive with global headers
+ * then add the given files into. If the archive is a real file, the
+ * contents are written directly into the file, if it is a dynamic archive
+ * contents are only stored in memory. This function should not be used to
+ * add files to an existing archive, you should use Add() instead.
+ *
+ * The FileList actually supports three different modes :
+ *
+ * - You can pass a string containing filenames separated by pipes '|'.
+ * In this case the file are read from the webserver filesystem and the
+ * root folder is the folder where the script using the MaxgTar is called.
+ *
+ * - You can also give a unidimensional indexed array containing the
+ * filenames. The behaviour for the content reading is the same that a
+ * '|'ed string.
+ *
+ * - The more useful usage is to pass bidimensional arrays, where the
+ * first element contains the filename and the second contains the file
+ * contents. You can even add empty folders to the package if the filename
+ * has a leading '/'. Once again, have a look at the exemples to understand
+ * better.
+ *
+ * Note you can also give arrays with both dynamic contents and static files.
+ *
+ * The optional parameter RemovePath can be used to delete a part of the tree
+ * of the filename you're adding, for instance if you're adding in the root
+ * of a package a file that is stored somewhere in the server tree.
+ *
+ * On the contrary the parameter AddPath can be used to add a prefix folder
+ * to the file you store. Note also that the RemovePath is applied before the
+ * AddPath is added, so it HAS a sense to use both parameters together.
+ */
+ function Create($p_filelist,$p_add='',$p_rem='')
+ {
+ if(!$fl = $this->_fetchFilelist($p_filelist)) return -5;
+ if(!$this->_OpenWrite()) return -6;
+
+ $ok = $this->_addFileList($fl,$p_add,$p_rem);
+
+ if($ok) $this->_writeFooter();
+ else{ $this->_CompTar(); @unlink($this->_nomf); }
+
+ return $ok;
+ }
+
+ /**
+ * Add files to an existing package.
+ *
+ * This function does exactly the same than Create() exept it
+ * will append the given files at the end of the archive. Please not the is
+ * safe to call Add() on a newly created archive whereas the
+ * contrary will fail !
+ *
+ * This function returns a status code, you can use TarErrorStr() on
+ * it to get the human-readable description of the error.
+ */
+ function Add($p_filelist, $p_add = '', $p_rem = '') { if (($this->_nomf
+!= ARCHIVE_DYNAMIC && @is_file($this->_nomf)) || ($this->_nomf ==
+ARCHIVE_DYNAMIC && !$this->_memdat)) return $this->Create($p_filelist,
+$p_add, $p_rem);
+
+ if(!$fl = $this->_fetchFilelist($p_filelist)) return -5;
+ return $this->_append($fl, $p_add, $p_rem);
+ }
+
+ /**
+ * Read the contents of a TAR archive
+ *
+ * This function attempts to get the list of the files stored in the
+ * archive, and return either an error code or an indexed array of
+ * associative array containing for each file the following informations :
+ *
+ * checksum Tar Checksum of the file
+ * filename The full name of the stored file (up to 100 c.)
+ * mode UNIX permissions in DECIMAL, not octal
+ * uid The Owner ID
+ * gid The Group ID
+ * size Uncompressed filesize
+ * mtime Timestamp of last modification
+ * typeflag Empty for files, set for folders
+ * link For the links, did you guess it ?
+ * uname Owner name
+ * gname Group name
+ */
+ function ListContents()
+ {
+ if(!$this->_nomf) return -3;
+ if(!$this->_OpenRead()) return -4;
+
+ $result = Array();
+
+ while ($dat = $this->_read(512))
+ {
+ $dat = $this->_readHeader($dat);
+ if(!is_array($dat)) continue;
+
+ $this->_seek(ceil($dat['size']/512)*512,1);
+ $result[] = $dat;
+ }
+
+ return $result;
+ }
+
+ /**
+ * Convert a status code into a human readable message
+ *
+ * Some MaxgTar functions like Create(), Add() ... return numerical
+ * status code. You can pass them to this function to grab their english
+ * equivalent.
+ */
+ function TarErrorStr($i)
+ {
+ $ecodes = Array(
+ 1 => true,
+ 0 => "Undocumented error",
+ -1 => "Can't use COMPRESS_GZIP compression : ZLIB extensions are not loaded !",
+ -2 => "Can't use COMPRESS_BZIP compression : BZ2 extensions are not loaded !",
+ -3 => "You must set a archive file to read the contents !",
+ -4 => "Can't open the archive file for read !",
+ -5 => "Invalide file list !",
+ -6 => "Can't open the archive in write mode !",
+ -7 => "There is no ARCHIVE_DYNAMIC to write !",
+ -8 => "Can't create the directory to extract files !",
+ -9 => "Please pass a archive name to send if you made created an ARCHIVE_DYNAMIC !",
+ -10 => "You didn't pass an archive filename and there is no stored ARCHIVE_DYNAMIC !",
+ -11 => "Given archive doesn't exist !"
+ );
+
+ return isset($ecodes[$i]) ? $ecodes[$i] : $ecodes[0];
+ }
+
+ /**
+ * Display informations about the MaxgTar Class.
+ *
+ * This function will display vaious informations about the server
+ * MaxgTar is running on.
+ *
+ * The optional parameter DispHeaders is used to generate a full page with
+ * HTML headers (TRUE by default) or just the table with the informations
+ * (FALSE). Note that the HTML page generated is verified compatible XHTML
+ * 1.0, but not HTML 4.0 compatible.
+ */
+ function TarInfo($headers = true)
+ {
+ if($headers)
+ {
+ ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html>
+
+<head>
+ <title>MaxgComp TAR</title>
+ <style type="text/css">
+ body{margin: 20px;}
+ body,td{font-size:10pt;font-family: arial;}
+ </style>
+ <meta name="Author" content="The Maxg Network, http://maxg.info" />
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
+</head>
+
+<body bgcolor="#EFEFEF">
+<?php
+ }
+?>
+<table border="0" align="center" width="500" cellspacing="4" cellpadding="5" style="border:1px dotted black;">
+<tr>
+ <td align="center" bgcolor="#DFDFEF" colspan="3" style="font-size:15pt;font-color:#330000;border:1px solid black;">MaxgComp TAR</td>
+</tr>
+<tr>
+ <td colspan="2" bgcolor="#EFEFFE" style="border:1px solid black;">This software was created by the Maxg Network, <a href="http://maxg.info" target="_blank" style="text-decoration:none;color:#333366;">http://maxg.info</a>
+ <br />It is distributed under the GNU <a href="http://www.gnu.org/copyleft/lesser.html" target="_blank" style="text-decoration:none;color:#333366;">Lesser General Public License</a>
+ <br />You can find the documentation of this class <a href="http://docs.maxg.info" target="_blank" style="text-decoration:none;color:#333366;">here</a></td>
+ <td width="60" bgcolor="#EFEFFE" style="border:1px solid black;" align="center"><img src="http://img.maxg.info/menu/tar.gif" border="0" alt="MaxgComp TAR" /></td>
+</tr>
+<tr>
+ <td width="50%" align="center" style="border:1px solid black;" bgcolor="#DFDFEF">MaxgComp TAR version</td>
+ <td colspan="2" align="center" bgcolor="#EFEFFE" style="border:1px solid black;"><?=TARLIB_VERSION?></td>
+</tr>
+<tr>
+ <td width="50%" align="center" style="border:1px solid black;" bgcolor="#DFDFEF">ZLIB extensions</td>
+ <td colspan="2" align="center" bgcolor="#EFEFFE" style="border:1px solid black;"><?=(extension_loaded('zlib') ? '<b>Yes</b>' : '<i>No</i>')?></td>
+</tr>
+<tr>
+ <td width="50%" align="center" style="border:1px solid black;" bgcolor="#DFDFEF">BZ2 extensions</td>
+ <td colspan="2" align="center" bgcolor="#EFEFFE" style="border:1px solid black;"><?=(extension_loaded('bz2') ? '<b>Yes</b>' : '<i>No</i>')?></td>
+</tr>
+<tr>
+ <td width="50%" align="center" style="border:1px solid black;" bgcolor="#DFDFEF">Allow URL fopen</td>
+ <td colspan="2" align="center" bgcolor="#EFEFFE" style="border:1px solid black;"><?=(ini_get('allow_url_fopen') ? '<b>Yes</b>' : '<i>No</i>')?></td>
+</tr>
+<tr>
+ <td width="50%" align="center" style="border:1px solid black;" bgcolor="#DFDFEF">Time limit</td>
+ <td colspan="2" align="center" bgcolor="#EFEFFE" style="border:1px solid black;"><?=ini_get('max_execution_time')?></td>
+</tr>
+<tr>
+ <td width="50%" align="center" style="border:1px solid black;" bgcolor="#DFDFEF">PHP Version</td>
+ <td colspan="2" align="center" bgcolor="#EFEFFE" style="border:1px solid black;"><?=phpversion()?></td>
+</tr>
+<tr>
+ <td colspan="3" align="center" bgcolor="#EFEFFE" style="border:1px solid black;">
+ <i>Special thanks to &laquo; Vincent Blavet &raquo; for his PEAR::Archive_Tar class</i>
+ </td>
+</tr>
+</table>
+<?php
+ if($headers) echo '</body></html>';
+ }
+
+ function _seek($p_flen, $tell=0)
+ {
+ if($this->_nomf === ARCHIVE_DYNAMIC)
+ $this->_memdat=substr($this->_memdat,0,($tell ? strlen($this->_memdat) : 0) + $p_flen);
+ elseif($this->_comptype == COMPRESS_GZIP)
+ @gzseek($this->_fp, ($tell ? @gztell($this->_fp) : 0)+$p_flen);
+ elseif($this->_comptype == COMPRESS_BZIP)
+ @fseek($this->_fp, ($tell ? @ftell($this->_fp) : 0)+$p_flen);
+ else
+ @fseek($this->_fp, ($tell ? @ftell($this->_fp) : 0)+$p_flen);
+ }
+
+ function _OpenRead()
+ {
+ if($this->_comptype == COMPRESS_GZIP)
+ $this->_fp = @gzopen($this->_nomf, 'rb');
+ elseif($this->_comptype == COMPRESS_BZIP)
+ $this->_fp = @bzopen($this->_nomf, 'rb');
+ else
+ $this->_fp = @fopen($this->_nomf, 'rb');
+
+ return ($this->_fp ? true : false);
+ }
+
+ function _OpenWrite($add = 'w')
+ {
+ if($this->_nomf === ARCHIVE_DYNAMIC) return true;
+
+ if($this->_comptype == COMPRESS_GZIP)
+ $this->_fp = @gzopen($this->_nomf, $add.'b'.$this->_compzlevel);
+ elseif($this->_comptype == COMPRESS_BZIP)
+ $this->_fp = @bzopen($this->_nomf, $add.'b');
+ else
+ $this->_fp = @fopen($this->_nomf, $add.'b');
+
+ return ($this->_fp ? true : false);
+ }
+
+ function _CompTar()
+ {
+ if($this->_nomf === ARCHIVE_DYNAMIC || !$this->_fp) return;
+
+ if($this->_comptype == COMPRESS_GZIP) @gzclose($this->_fp);
+ elseif($this->_comptype == COMPRESS_BZIP) @bzclose($this->_fp);
+ else @fclose($this->_fp);
+ }
+
+ function _read($p_len)
+ {
+ if($this->_comptype == COMPRESS_GZIP)
+ return @gzread($this->_fp,$p_len);
+ elseif($this->_comptype == COMPRESS_BZIP)
+ return @bzread($this->_fp,$p_len);
+ else
+ return @fread($this->_fp,$p_len);
+ }
+
+ function _write($p_data)
+ {
+ if($this->_nomf === ARCHIVE_DYNAMIC) $this->_memdat .= $p_data;
+ elseif($this->_comptype == COMPRESS_GZIP)
+ return @gzwrite($this->_fp,$p_data);
+
+ elseif($this->_comptype == COMPRESS_BZIP)
+ return @bzwrite($this->_fp,$p_data);
+
+ else
+ return @fwrite($this->_fp,$p_data);
+ }
+
+ function _encode($p_dat)
+ {
+ if($this->_comptype == COMPRESS_GZIP)
+ return gzencode($p_dat, $this->_compzlevel);
+ elseif($this->_comptype == COMPRESS_BZIP)
+ return bzcompress($p_dat, $this->_compzlevel);
+ else return $p_dat;
+ }
+
+ function _readHeader($p_dat)
+ {
+ if (!$p_dat || strlen($p_dat) != 512) return false;
+
+ for ($i=0, $chks=0; $i<148; $i++)
+ $chks += ord($p_dat[$i]);
+
+ for ($i=156,$chks+=256; $i<512; $i++)
+ $chks += ord($p_dat[$i]);
+
+ $headers = @unpack("a100filename/a8mode/a8uid/a8gid/a12size/a12mtime/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor", $p_dat);
+ if(!$headers) return false;
+
+ $return['checksum'] = OctDec(trim($headers['checksum']));
+ if ($return['checksum'] != $chks) return false;
+
+ $return['filename'] = trim($headers['filename']);
+ $return['mode'] = OctDec(trim($headers['mode']));
+ $return['uid'] = OctDec(trim($headers['uid']));
+ $return['gid'] = OctDec(trim($headers['gid']));
+ $return['size'] = OctDec(trim($headers['size']));
+ $return['mtime'] = OctDec(trim($headers['mtime']));
+ $return['typeflag'] = $headers['typeflag'];
+ $return['link'] = trim($headers['link']);
+ $return['uname'] = trim($headers['uname']);
+ $return['gname'] = trim($headers['gname']);
+
+ return $return;
+ }
+
+ function _fetchFilelist($p_filelist)
+ {
+ if(!$p_filelist || (is_array($p_filelist) && !@count($p_filelist))) return false;
+
+ if(is_string($p_filelist))
+ {
+ $p_filelist = explode('|',$p_filelist);
+ if(!is_array($p_filelist)) $p_filelist = Array($p_filelist);
+ }
+
+ return $p_filelist;
+ }
+
+ function _addFileList($p_fl, $p_addir, $p_remdir)
+ {
+ foreach($p_fl as $file)
+ {
+ if(($file == $this->_nomf && $this->_nomf != ARCHIVE_DYNAMIC) || !$file || (!file_exists($file) && !is_array($file)))
+ continue;
+
+ if (!$this->_addFile($file, $p_addir, $p_remdir))
+ continue;
+
+ if (@is_dir($file))
+ {
+ $d = @opendir($file);
+
+ if(!$d) continue;
+ readdir($d); readdir($d);
+
+ while($f = readdir($d))
+ {
+ if($file != ".") $tmplist[0] = "$file/$f";
+ else $tmplist[0] = $d;
+
+ $this->_addFileList($tmplist, $p_addir, $p_remdir);
+ }
+
+ closedir($d); unset($tmplist,$f);
+ }
+ }
+ return true;
+ }
+
+ function _addFile($p_fn, $p_addir = '', $p_remdir = '')
+ {
+ if(is_array($p_fn)) list($p_fn, $data) = $p_fn;
+ $sname = $p_fn;
+
+ if($p_remdir)
+ {
+ if(substr($p_remdir,-1) != '/') $p_remdir .= "/";
+
+ if(substr($sname, 0, strlen($p_remdir)) == $p_remdir)
+ $sname = substr($sname, strlen($p_remdir));
+ }
+
+ if($p_addir) $sname = $p_addir.(substr($p_addir,-1) == '/' ? '' : "/").$sname;
+
+ if(strlen($sname) > 99) return;
+
+ if(@is_dir($p_fn))
+ {
+ if(!$this->_writeFileHeader($p_fn, $sname)) return false;
+ }
+ else
+ {
+ if(!$data)
+ {
+ $fp = fopen($p_fn, 'rb');
+ if(!$fp) return false;
+ }
+
+ if(!$this->_writeFileHeader($p_fn, $sname, ($data ? strlen($data) : false))) return false;
+
+ if(!$data)
+ {
+ while(!feof($fp))
+ {
+ $packed = pack("a512", fread($fp,512));
+ $this->_write($packed);
+ }
+ fclose($fp);
+ }
+ else
+ {
+ for($s = 0; $s < strlen($data); $s += 512)
+ $this->_write(pack("a512",substr($data,$s,512)));
+ }
+ }
+
+ return true;
+ }
+
+ function _writeFileHeader($p_file, $p_sname, $p_data=false)
+ {
+ if(!$p_data)
+ {
+ if (!$p_sname) $p_sname = $p_file;
+ $p_sname = $this->_pathTrans($p_sname);
+
+ $h_info = stat($p_file);
+ $h[0] = sprintf("%6s ", DecOct($h_info[4]));
+ $h[] = sprintf("%6s ", DecOct($h_info[5]));
+ $h[] = sprintf("%6s ", DecOct(fileperms($p_file)));
+ clearstatcache();
+ $h[] = sprintf("%11s ", DecOct(filesize($p_file)));
+ $h[] = sprintf("%11s", DecOct(filemtime($p_file)));
+
+ $dir = @is_dir($p_file) ? '5' : '';
+ }
+ else
+ {
+ $dir = '';
+ $p_data = sprintf("%11s ", DecOct($p_data));
+ $time = sprintf("%11s ", DecOct(time()));
+ $h = Array(" 0 "," 0 "," 40777 ",$p_data,$time);
+ }
+
+ $data_first = pack("a100a8a8a8a12A12", $p_sname, $h[2], $h[0], $h[1], $h[3], $h[4]);
+ $data_last = pack("a1a100a6a2a32a32a8a8a155a12", $dir, '', '', '', '', '', '', '', '', "");
+
+ for ($i=0,$chks=0; $i<148; $i++)
+ $chks += ord($data_first[$i]);
+
+ for ($i=156, $chks+=256, $j=0; $i<512; $i++, $j++)
+ $chks += ord($data_last[$j]);
+
+ $this->_write($data_first);
+
+ $chks = pack("a8",sprintf("%6s ", DecOct($chks)));
+ $this->_write($chks.$data_last);
+
+ return true;
+ }
+
+ function _append($p_filelist, $p_addir="", $p_remdir="")
+ {
+ if(!$this->_fp) if(!$this->_OpenWrite('a')) return -6;
+
+ if($this->_nomf == ARCHIVE_DYNAMIC)
+ {
+ $s = strlen($this->_memdat);
+ $this->_memdat = substr($this->_memdat,0,-512);
+ }
+ else
+ {
+ $s = filesize($this->_nomf);
+ $this->_seek($s-512);
+ }
+
+ $ok = $this->_addFileList($p_filelist, $p_addir, $p_remdir);
+ $this->_writeFooter();
+
+ return $ok;
+ }
+
+ function _pathTrans($p_dir)
+ {
+ if ($p_dir)
+ {
+ $subf = explode("/", $p_dir); $r='';
+
+ for ($i=count($subf)-1; $i>=0; $i--)
+ {
+ if ($subf[$i] == ".") {}
+ else if ($subf[$i] == "..") $i--;
+ else if (!$subf[$i] && $i!=count($subf)-1 && $i) {}
+ else $r = $subf[$i].($i!=(count($subf)-1) ? "/".$r : "");
+ }
+ }
+ return $r;
+ }
+
+ function _writeFooter()
+ {
+ $this->_write(pack("a512", ""));
+ }
+
+ function _extractList($p_to, $p_files, $p_remdir, $p_mode = 0755)
+ {
+ if (!$p_to || ($p_to[0]!="/"&&substr($p_to,0,3)!="../"&&substr($p_to,1,3)!=":\\"&&substr($p_to,1,2)!=":/")) /*" // <- PHP Coder bug */
+ $p_to = "./$p_to";
+
+ if ($p_remdir && substr($p_remdir,-1)!='/') $p_remdir .= '/';
+ $p_remdirs = strlen($p_remdir);
+ while($dat = $this->_read(512))
+ {
+ $headers = $this->_readHeader($dat);
+ if(!$headers['filename']) continue;
+
+ if($p_files == -1 || $p_files[0] == -1) $extract = true;
+ else
+ {
+ $extract = false;
+
+ foreach($p_files as $f)
+ {
+ if(substr($f,-1) == "/") {
+ if((strlen($headers['filename']) > strlen($f)) && (substr($headers['filename'],0,strlen($f))==$f)) {
+ $extract = true; break;
+ }
+ }
+ elseif($f == $headers['filename']) {
+ $extract = true; break;
+ }
+ }
+ }
+
+ if ($extract)
+ {
+ $det[] = $headers;
+ if ($p_remdir && substr($headers['filename'],0,$p_remdirs)==$p_remdir)
+ $headers['filename'] = substr($headers['filename'],$p_remdirs);
+
+ if($headers['filename'].'/' == $p_remdir && $headers['typeflag']=='5') continue;
+
+ if ($p_to != "./" && $p_to != "/")
+ {
+ while($p_to{-1}=="/") $p_to = substr($p_to,0,-1);
+
+ if($headers['filename']{0} == "/")
+ $headers['filename'] = $p_to.$headers['filename'];
+ else
+ $headers['filename'] = $p_to."/".$headers['filename'];
+ }
+
+ $ok = $this->_dirApp($headers['typeflag']=="5" ? $headers['filename'] : dirname($headers['filename']));
+ if($ok < 0) return $ok;
+
+ if (!$headers['typeflag'])
+ {
+ if (!$fp = @fopen($headers['filename'], "wb")) return -6;
+ $n = floor($headers['size']/512);
+
+ for ($i=0; $i<$n; $i++) fwrite($fp, $this->_read(512),512);
+ if (($headers['size'] % 512) != 0) fwrite($fp, $this->_read(512), $headers['size'] % 512);
+
+ fclose($fp);
+ touch($headers['filename'], $headers['mtime']);
+ chmod($headers['filename'], $p_mode);
+ }
+ else
+ {
+ $this->_seek(ceil($headers['size']/512)*512,1);
+ }
+ }else $this->_seek(ceil($headers['size']/512)*512,1);
+ }
+ return $det;
+ }
+
+function _dirApp($d)
+ {
+// map to dokuwiki function (its more robust)
+ return io_mkdir_p($d);
+/*
+ $d = explode('/', $d);
+ $base = '';
+
+ foreach($d as $f)
+ {
+ if(!is_dir($base.$f))
+ {
+ $ok = @mkdir($base.$f, 0777);
+ if(!$ok) return false;
+ }
+ $base .= "$f/";
+ }
+*/
+ }
+
+}
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/ZipLib.class.php b/mod/dokuwiki/vendors/dokuwiki/inc/ZipLib.class.php
new file mode 100644
index 000000000..836e9d9e6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/ZipLib.class.php
@@ -0,0 +1,475 @@
+<?php
+
+/**
+ * @author bouchon
+ * @link http://dev.maxg.info
+ * @link http://forum.maxg.info
+ *
+ * Modified for Dokuwiki
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ */
+class ZipLib
+{
+
+ var $datasec, $ctrl_dir = array();
+ var $eof_ctrl_dir = "\x50\x4b\x05\x06\x00\x00\x00\x00";
+ var $old_offset = 0; var $dirs = Array(".");
+
+ function get_List($zip_name)
+ {
+ $zip = @fopen($zip_name, 'rb');
+ if(!$zip) return(0);
+ $centd = $this->ReadCentralDir($zip,$zip_name);
+
+ @rewind($zip);
+ @fseek($zip, $centd['offset']);
+
+ for ($i=0; $i<$centd['entries']; $i++)
+ {
+ $header = $this->ReadCentralFileHeaders($zip);
+ $header['index'] = $i;$info['filename'] = $header['filename'];
+ $info['stored_filename'] = $header['stored_filename'];
+ $info['size'] = $header['size'];$info['compressed_size']=$header['compressed_size'];
+ $info['crc'] = strtoupper(dechex( $header['crc'] ));
+ $info['mtime'] = $header['mtime']; $info['comment'] = $header['comment'];
+ $info['folder'] = ($header['external']==0x41FF0010||$header['external']==16)?1:0;
+ $info['index'] = $header['index'];$info['status'] = $header['status'];
+ $ret[]=$info; unset($header);
+ }
+ return $ret;
+ }
+
+ function Add($files,$compact)
+ {
+ if(!is_array($files[0])) $files=Array($files);
+
+ for($i=0;$files[$i];$i++){
+ $fn = $files[$i];
+ if(!in_Array(dirname($fn[0]),$this->dirs))
+ $this->add_Dir(dirname($fn[0]));
+ if(basename($fn[0]))
+ $ret[basename($fn[0])]=$this->add_File($fn[1],$fn[0],$compact);
+ }
+ return $ret;
+ }
+
+ /**
+ * Zips recursively the $folder directory, from the $basedir directory
+ */
+ function Compress($folder, $basedir=null, $parent=null)
+ {
+ $full_path = $basedir."/".$parent.$folder;
+ $zip_path = $parent.$folder;
+ if ($zip_path) {
+ $zip_path .= "/";
+ $this->add_dir($zip_path);
+ }
+ $dir = new DirectoryIterator($full_path);
+ foreach($dir as $file) {
+ if(!$file->isDot()) {
+ $filename = $file->getFilename();
+ if($file->isDir()) {
+ $this->Compress($filename, $basedir, $zip_path);
+ } else {
+ $content = join('', file($full_path.'/'.$filename));
+ $this->add_File($content, $zip_path.$filename);
+ }
+ }
+ }
+ }
+
+ /**
+ * Returns the Zip file
+ */
+ function get_file()
+ {
+ $data = implode('', $this -> datasec);
+ $ctrldir = implode('', $this -> ctrl_dir);
+
+ return $data . $ctrldir . $this -> eof_ctrl_dir .
+ pack('v', sizeof($this -> ctrl_dir)).pack('v', sizeof($this -> ctrl_dir)).
+ pack('V', strlen($ctrldir)) . pack('V', strlen($data)) . "\x00\x00";
+ }
+
+ function add_dir($name)
+ {
+ $name = str_replace("\\", "/", $name);
+ $fr = "\x50\x4b\x03\x04\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00";
+
+ $fr .= pack("V",0).pack("V",0).pack("V",0).pack("v", strlen($name) );
+ $fr .= pack("v", 0 ).$name.pack("V", 0).pack("V", 0).pack("V", 0);
+ $this -> datasec[] = $fr;
+
+ $new_offset = strlen(implode("", $this->datasec));
+
+ $cdrec = "\x50\x4b\x01\x02\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00";
+ $cdrec .= pack("V",0).pack("V",0).pack("V",0).pack("v", strlen($name) );
+ $cdrec .= pack("v", 0 ).pack("v", 0 ).pack("v", 0 ).pack("v", 0 );
+ $ext = "\xff\xff\xff\xff";
+ $cdrec .= pack("V", 16 ).pack("V", $this -> old_offset ).$name;
+
+ $this -> ctrl_dir[] = $cdrec;
+ $this -> old_offset = $new_offset;
+ $this -> dirs[] = $name;
+ }
+
+ /**
+ * Add a file named $name from a string $data
+ */
+ function add_File($data, $name, $compact = 1)
+ {
+ $name = str_replace('\\', '/', $name);
+ $dtime = dechex($this->DosTime());
+
+ $hexdtime = '\x' . $dtime[6] . $dtime[7].'\x'.$dtime[4] . $dtime[5]
+ . '\x' . $dtime[2] . $dtime[3].'\x'.$dtime[0].$dtime[1];
+ eval('$hexdtime = "' . $hexdtime . '";');
+
+ if($compact)
+ $fr = "\x50\x4b\x03\x04\x14\x00\x00\x00\x08\x00".$hexdtime;
+ else $fr = "\x50\x4b\x03\x04\x0a\x00\x00\x00\x00\x00".$hexdtime;
+ $unc_len = strlen($data); $crc = crc32($data);
+
+ if($compact){
+ $zdata = gzcompress($data); $c_len = strlen($zdata);
+ $zdata = substr(substr($zdata, 0, strlen($zdata) - 4), 2);
+ }else{
+ $zdata = $data;
+ }
+ $c_len=strlen($zdata);
+ $fr .= pack('V', $crc).pack('V', $c_len).pack('V', $unc_len);
+ $fr .= pack('v', strlen($name)).pack('v', 0).$name.$zdata;
+
+ $fr .= pack('V', $crc).pack('V', $c_len).pack('V', $unc_len);
+
+ $this -> datasec[] = $fr;
+ $new_offset = strlen(implode('', $this->datasec));
+ if($compact)
+ $cdrec = "\x50\x4b\x01\x02\x00\x00\x14\x00\x00\x00\x08\x00";
+ else $cdrec = "\x50\x4b\x01\x02\x14\x00\x0a\x00\x00\x00\x00\x00";
+ $cdrec .= $hexdtime.pack('V', $crc).pack('V', $c_len).pack('V', $unc_len);
+ $cdrec .= pack('v', strlen($name) ).pack('v', 0 ).pack('v', 0 );
+ $cdrec .= pack('v', 0 ).pack('v', 0 ).pack('V', 32 );
+ $cdrec .= pack('V', $this -> old_offset );
+
+ $this -> old_offset = $new_offset;
+ $cdrec .= $name;
+ $this -> ctrl_dir[] = $cdrec;
+ return true;
+ }
+
+ function DosTime() {
+ $timearray = getdate();
+ if ($timearray['year'] < 1980) {
+ $timearray['year'] = 1980; $timearray['mon'] = 1;
+ $timearray['mday'] = 1; $timearray['hours'] = 0;
+ $timearray['minutes'] = 0; $timearray['seconds'] = 0;
+ }
+ return (($timearray['year'] - 1980) << 25) | ($timearray['mon'] << 21) | ($timearray['mday'] << 16) | ($timearray['hours'] << 11) |
+ ($timearray['minutes'] << 5) | ($timearray['seconds'] >> 1);
+ }
+
+ /**
+ * Extract a zip file $zn to the $to directory
+ */
+ function Extract ( $zn, $to, $index = Array(-1) )
+ {
+ if(!@is_dir($to)) $this->_mkdir($to);
+ $ok = 0; $zip = @fopen($zn,'rb');
+ if(!$zip) return(-1);
+ $cdir = $this->ReadCentralDir($zip,$zn);
+ $pos_entry = $cdir['offset'];
+
+ if(!is_array($index)){ $index = array($index); }
+ for($i=0; isset($index[$i]);$i++){
+ if(intval($index[$i])!=$index[$i]||$index[$i]>$cdir['entries'])
+ return(-1);
+ }
+
+ for ($i=0; $i<$cdir['entries']; $i++)
+ {
+ @fseek($zip, $pos_entry);
+ $header = $this->ReadCentralFileHeaders($zip);
+ $header['index'] = $i; $pos_entry = ftell($zip);
+ @rewind($zip); fseek($zip, $header['offset']);
+ if(in_array("-1",$index)||in_array($i,$index))
+ $stat[$header['filename']]=$this->ExtractFile($header, $to, $zip);
+
+ }
+ fclose($zip);
+ return $stat;
+ }
+
+ function ReadFileHeader($zip, $header)
+ {
+ $binary_data = fread($zip, 30);
+ $data = unpack('vchk/vid/vversion/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len', $binary_data);
+
+ $header['filename'] = fread($zip, $data['filename_len']);
+ if ($data['extra_len'] != 0) {
+ $header['extra'] = fread($zip, $data['extra_len']);
+ } else { $header['extra'] = ''; }
+
+ $header['compression'] = $data['compression'];
+ foreach (array('size','compressed_size','crc') as $hd) { // On ODT files, these headers are 0. Keep the previous value.
+ if ($data[$hd] != 0) $header[$hd] = $data[$hd];
+ }
+ $header['flag'] = $data['flag'];
+ $header['mdate'] = $data['mdate'];$header['mtime'] = $data['mtime'];
+
+ if ($header['mdate'] && $header['mtime']){
+ $hour=($header['mtime']&0xF800)>>11;$minute=($header['mtime']&0x07E0)>>5;
+ $seconde=($header['mtime']&0x001F)*2;$year=(($header['mdate']&0xFE00)>>9)+1980;
+ $month=($header['mdate']&0x01E0)>>5;$day=$header['mdate']&0x001F;
+ $header['mtime'] = mktime($hour, $minute, $seconde, $month, $day, $year);
+ }else{$header['mtime'] = time();}
+
+ $header['stored_filename'] = $header['filename'];
+ $header['status'] = "ok";
+ return $header;
+ }
+
+ function ReadCentralFileHeaders($zip){
+ $binary_data = fread($zip, 46);
+ $header = unpack('vchkid/vid/vversion/vversion_extracted/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len/vcomment_len/vdisk/vinternal/Vexternal/Voffset', $binary_data);
+
+ if ($header['filename_len'] != 0)
+ $header['filename'] = fread($zip,$header['filename_len']);
+ else $header['filename'] = '';
+
+ if ($header['extra_len'] != 0)
+ $header['extra'] = fread($zip, $header['extra_len']);
+ else $header['extra'] = '';
+
+ if ($header['comment_len'] != 0)
+ $header['comment'] = fread($zip, $header['comment_len']);
+ else $header['comment'] = '';
+
+ if ($header['mdate'] && $header['mtime'])
+ {
+ $hour = ($header['mtime'] & 0xF800) >> 11;
+ $minute = ($header['mtime'] & 0x07E0) >> 5;
+ $seconde = ($header['mtime'] & 0x001F)*2;
+ $year = (($header['mdate'] & 0xFE00) >> 9) + 1980;
+ $month = ($header['mdate'] & 0x01E0) >> 5;
+ $day = $header['mdate'] & 0x001F;
+ $header['mtime'] = mktime($hour, $minute, $seconde, $month, $day, $year);
+ } else {
+ $header['mtime'] = time();
+ }
+ $header['stored_filename'] = $header['filename'];
+ $header['status'] = 'ok';
+ if (substr($header['filename'], -1) == '/')
+ $header['external'] = 0x41FF0010;
+ return $header;
+ }
+
+ function ReadCentralDir($zip,$zip_name)
+ {
+ $size = filesize($zip_name);
+ if ($size < 277) $maximum_size = $size;
+ else $maximum_size=277;
+
+ @fseek($zip, $size-$maximum_size);
+ $pos = ftell($zip); $bytes = 0x00000000;
+
+ while ($pos < $size)
+ {
+ $byte = @fread($zip, 1);
+ $bytes=(($bytes << 8) & 0xFFFFFFFF) | Ord($byte);
+ if ($bytes == 0x504b0506){ $pos++; break; } $pos++;
+ }
+
+ $data=unpack('vdisk/vdisk_start/vdisk_entries/ventries/Vsize/Voffset/vcomment_size',
+ fread($zip, 18));
+
+ if ($data['comment_size'] != 0)
+ $centd['comment'] = fread($zip, $data['comment_size']);
+ else $centd['comment'] = ''; $centd['entries'] = $data['entries'];
+ $centd['disk_entries'] = $data['disk_entries'];
+ $centd['offset'] = $data['offset'];$centd['disk_start'] = $data['disk_start'];
+ $centd['size'] = $data['size']; $centd['disk'] = $data['disk'];
+ return $centd;
+ }
+
+ function ExtractFile($header,$to,$zip)
+ {
+ $header = $this->readfileheader($zip, $header);
+
+ if(substr($to,-1)!="/") $to.="/";
+ if(substr($header['filename'],-1)=="/")
+ {
+// @mkdir($to.$header['filename']); --CS
+ $this->_mkdir($to.$header['filename']); //-- CS
+ return +2;
+ }
+
+// $pth = explode("/",dirname($header['filename']));
+// for($i=0,$tmp="";isset($pth[$i]);$i++){
+// if(!$pth[$i]) continue;
+// if(!is_dir($to.$tmp.$pth[$i])) @mkdir($to.$pth[$i],0777);
+// $tmp.=$pth[$i]."/";
+// }
+ if (!$this->_mkdir($to.dirname($header['filename']))) return (-1); //--CS
+
+ if (!array_key_exists("external", $header) || (!($header['external']==0x41FF0010)&&!($header['external']==16)))
+ {
+ if ($header['compression']==0)
+ {
+ $fp = @fopen($to.$header['filename'], 'wb');
+ if(!$fp) return(-1);
+ $size = $header['compressed_size'];
+
+ while ($size != 0)
+ {
+ $read_size = ($size < 2048 ? $size : 2048);
+ $buffer = fread($zip, $read_size);
+ $binary_data = pack('a'.$read_size, $buffer);
+ @fwrite($fp, $binary_data, $read_size);
+ $size -= $read_size;
+ }
+ fclose($fp);
+ touch($to.$header['filename'], $header['mtime']);
+
+ }else{
+ if (!is_dir(dirname($to.$header['filename']))) $this->_mkdir(dirname($to.$header['filename'])); //-CS
+ $fp = fopen($to.$header['filename'].'.gz','wb');
+ if(!$fp) return(-1);
+ $binary_data = pack('va1a1Va1a1', 0x8b1f, Chr($header['compression']),
+ Chr(0x00), time(), Chr(0x00), Chr(3));
+
+ fwrite($fp, $binary_data, 10);
+ $size = $header['compressed_size'];
+
+ while ($size != 0)
+ {
+ $read_size = ($size < 1024 ? $size : 1024);
+ $buffer = fread($zip, $read_size);
+ $binary_data = pack('a'.$read_size, $buffer);
+ @fwrite($fp, $binary_data, $read_size);
+ $size -= $read_size;
+ }
+
+ $binary_data = pack('VV', $header['crc'], $header['size']);
+ fwrite($fp, $binary_data,8); fclose($fp);
+
+ $gzp = @gzopen($to.$header['filename'].'.gz','rb');
+ if(!$gzp){
+ @gzclose($gzp); @unlink($to.$header['filename']);
+ die("Archive is compressed whereas ZLIB is not enabled.");
+ }
+ $fp = @fopen($to.$header['filename'],'wb');
+ if(!$fp) return(-1);
+ $size = $header['size'];
+
+ while ($size != 0)
+ {
+ $read_size = ($size < 2048 ? $size : 2048);
+ $buffer = gzread($gzp, $read_size);
+ $binary_data = pack('a'.$read_size, $buffer);
+ @fwrite($fp, $binary_data, $read_size);
+ $size -= $read_size;
+ }
+ fclose($fp); gzclose($gzp);
+
+ touch($to.$header['filename'], $header['mtime']);
+ @unlink($to.$header['filename'].'.gz');
+
+ }}
+ return true;
+ }
+
+ //--CS start
+ // centralize mkdir calls and use dokuwiki io functions
+ function _mkdir($d) {
+ return io_mkdir_p($d);
+ }
+ //--CS end
+
+
+ function ExtractStr($zn, $name) {
+ $ok = 0;
+ $zip = @fopen($zn,'rb');
+ if(!$zip) return(NULL);
+ $cdir = $this->ReadCentralDir($zip,$zn);
+ $pos_entry = $cdir['offset'];
+
+ for ($i=0; $i<$cdir['entries']; $i++)
+ {
+ @fseek($zip, $pos_entry);
+ $header = $this->ReadCentralFileHeaders($zip);
+ $header['index'] = $i;
+ $pos_entry = ftell($zip);
+ @rewind($zip);
+ fseek($zip, $header['offset']);
+ if ($name == $header['stored_filename'] || $name == $header['filename']) {
+ $str = $this->ExtractStrFile($header, $zip);
+ fclose($zip);
+ return $str;
+ }
+
+ }
+ fclose($zip);
+ return null;
+ }
+
+ function ExtractStrFile($header,$zip) {
+ $hdr = $this->readfileheader($zip);
+ $binary_data = '';
+ if (!($header['external']==0x41FF0010) && !($header['external']==16))
+ {
+ if ($header['compression']==0)
+ {
+ while ($size != 0)
+ {
+ $read_size = ($size < 2048 ? $size : 2048);
+ $buffer = fread($zip, $read_size);
+ $binary_data .= pack('a'.$read_size, $buffer);
+ $size -= $read_size;
+ }
+ return $binary_data;
+ } else {
+ $size = $header['compressed_size'];
+ if ($size == 0) {
+ return '';
+ }
+ //Just in case
+ if ($size > ($this->_ret_bytes(ini_get('memory_limit'))/2)) {
+ die("Compressed file is to huge to be uncompress in memory.");
+ }
+ while ($size != 0)
+ {
+ $read_size = ($size < 2048 ? $size : 2048);
+ $buffer = fread($zip, $read_size);
+ $binary_data .= pack('a'.$read_size, $buffer);
+ $size -= $read_size;
+ }
+ $str = gzinflate($binary_data, $header['size']);
+ if ($header['crc'] == crc32($str)) {
+ return $str;
+ } else {
+ die("Crc Error");
+ }
+ }
+ }
+ return NULL;
+ }
+
+ function _ret_bytes($val) {
+ $val = trim($val);
+ $last = $val{strlen($val)-1};
+ switch($last) {
+ case 'k':
+ case 'K':
+ return (int) $val * 1024;
+ break;
+ case 'm':
+ case 'M':
+ return (int) $val * 1048576;
+ break;
+ default:
+ return $val;
+ }
+ }
+}
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/actions.php b/mod/dokuwiki/vendors/dokuwiki/inc/actions.php
new file mode 100644
index 000000000..ed3c12666
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/actions.php
@@ -0,0 +1,639 @@
+<?php
+/**
+ * DokuWiki Actions
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+if(!defined('DOKU_INC')) die('meh.');
+require_once(DOKU_INC.'inc/template.php');
+
+
+/**
+ * Call the needed action handlers
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @triggers ACTION_ACT_PREPROCESS
+ * @triggers ACTION_HEADERS_SEND
+ */
+function act_dispatch(){
+ global $INFO;
+ global $ACT;
+ global $ID;
+ global $QUERY;
+ global $lang;
+ global $conf;
+ global $license;
+
+ $preact = $ACT;
+
+ //error_log("dokuact:".$ACT);
+ // give plugins an opportunity to process the action
+ $evt = new Doku_Event('ACTION_ACT_PREPROCESS',$ACT);
+ if ($evt->advise_before()) {
+
+ //sanitize $ACT
+ $ACT = act_clean($ACT);
+
+ //check if searchword was given - else just show
+ $s = cleanID($QUERY);
+ if($ACT == 'search' && empty($s)){
+ $ACT = 'show';
+ }
+
+ //login stuff
+ if(in_array($ACT,array('login','logout'))){
+ $ACT = act_auth($ACT);
+ }
+
+ //check if user is asking to (un)subscribe a page
+ if($ACT == 'subscribe' || $ACT == 'unsubscribe')
+ $ACT = act_subscription($ACT);
+
+ //check if user is asking to (un)subscribe a namespace
+ if($ACT == 'subscribens' || $ACT == 'unsubscribens')
+ $ACT = act_subscriptionns($ACT);
+
+ //check permissions
+ $ACT = act_permcheck($ACT);
+
+ //register
+ $nil = array();
+ if($ACT == 'register' && $_POST['save'] && register()){
+ $ACT = 'login';
+ }
+
+ if ($ACT == 'resendpwd' && act_resendpwd()) {
+ $ACT = 'login';
+ }
+
+ //update user profile
+ if ($ACT == 'profile') {
+ if(!$_SERVER['REMOTE_USER']) {
+ $ACT = 'login';
+ } else {
+ if(updateprofile()) {
+ msg($lang['profchanged'],1);
+ $ACT = 'show';
+ }
+ }
+ }
+
+ //revert
+ if($ACT == 'revert'){
+ if(checkSecurityToken()){
+ $ACT = act_revert($ACT);
+ }else{
+ $ACT = 'show';
+ }
+ }
+
+ //save
+ if($ACT == 'save'){
+ if(checkSecurityToken()){
+ $ACT = act_save($ACT);
+ }else{
+ $ACT = 'show';
+ }
+ }
+
+ //cancel conflicting edit
+ if($ACT == 'cancel')
+ $ACT = 'show';
+
+ //draft deletion
+ if($ACT == 'draftdel')
+ $ACT = act_draftdel($ACT);
+
+ //draft saving on preview
+ if($ACT == 'preview')
+ $ACT = act_draftsave($ACT);
+
+ //edit
+ if(($ACT == 'edit' || $ACT == 'preview') && $INFO['editable']){
+ $ACT = act_edit($ACT);
+ }else{
+ unlock($ID); //try to unlock
+ }
+
+ //handle export
+ if(substr($ACT,0,7) == 'export_')
+ $ACT = act_export($ACT);
+
+ //display some infos
+ if($ACT == 'check'){
+ check();
+ $ACT = 'show';
+ }
+
+ //handle admin tasks
+ if($ACT == 'admin'){
+ // retrieve admin plugin name from $_REQUEST['page']
+ $page = get_input('dokupage');
+ if (!empty($page)) {
+ $pluginlist = plugin_list('admin');
+ if (in_array($page, $pluginlist)) {
+ // attempt to load the plugin
+ if ($plugin =& plugin_load('admin',$page) !== NULL)
+ $plugin->handle();
+ }
+ }
+ }
+
+ // check permissions again - the action may have changed
+ $ACT = act_permcheck($ACT);
+ } // end event ACTION_ACT_PREPROCESS default action
+ $evt->advise_after();
+ unset($evt);
+ if ($ACT == 'save') {
+ $user = elgg_get_logged_in_user_entity();
+ $doku = current_dokuwiki_entity();
+ $group = get_entity($doku->container_guid);
+ add_to_river('river/dokuwiki', 'wiki/'.$ACT.'/'.$QUERY, $user->getGUID(), $doku->getGUID(), $group->access_id);
+ }
+ // when action 'show', the intial not 'show' and POST, do a redirect
+ if($ACT == 'show' && $preact != 'show' && strtolower($_SERVER['REQUEST_METHOD']) == 'post'){
+ act_redirect($ID,$preact);
+ }
+
+ //call template FIXME: all needed vars available?
+ $headers[] = 'Content-Type: text/html; charset=utf-8';
+ trigger_event('ACTION_HEADERS_SEND',$headers,'act_sendheaders');
+
+ include(template('main.php'));
+ // output for the commands is now handled in inc/templates.php
+ // in function tpl_content()
+}
+
+function act_sendheaders($headers) {
+ foreach ($headers as $hdr) header($hdr);
+}
+
+/**
+ * Sanitize the action command
+ *
+ * Add all allowed commands here.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function act_clean($act){
+ global $lang;
+ global $conf;
+
+ // check if the action was given as array key
+ if(is_array($act)){
+ list($act) = array_keys($act);
+ }
+
+ //remove all bad chars
+ $act = strtolower($act);
+ $act = preg_replace('/[^1-9a-z_]+/','',$act);
+
+ if($act == 'export_html') $act = 'export_xhtml';
+ if($act == 'export_htmlbody') $act = 'export_xhtmlbody';
+
+ // check if action is disabled
+ if(!actionOK($act)){
+ msg('Command disabled: '.htmlspecialchars($act),-1);
+ return 'show';
+ }
+
+ //disable all acl related commands if ACL is disabled
+ if(!$conf['useacl'] && in_array($act,array('login','logout','register','admin',
+ 'subscribe','unsubscribe','profile','revert',
+ 'resendpwd','subscribens','unsubscribens',))){
+ msg('Command unavailable: '.htmlspecialchars($act),-1);
+ return 'show';
+ }
+
+ if(!in_array($act,array('login','logout','register','save','cancel','edit','draft',
+ 'preview','search','show','check','index','revisions',
+ 'diff','recent','backlink','admin','subscribe','revert',
+ 'unsubscribe','profile','resendpwd','recover','wordblock',
+ 'draftdel','subscribens','unsubscribens',)) && substr($act,0,7) != 'export_' ) {
+ msg('Command unknown: '.htmlspecialchars($act),-1);
+ return 'show';
+ }
+ return $act;
+}
+
+/**
+ * Run permissionchecks
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function act_permcheck($act){
+ global $INFO;
+ global $conf;
+//error_log("dokuwiki act:".$act.$INFO['perm']);
+ if(in_array($act,array('save','preview','edit','recover'))){
+ if($INFO['exists']){
+ if($act == 'edit'){
+ //the edit function will check again and do a source show
+ //when no AUTH_EDIT available
+ $permneed = AUTH_READ;
+ }else{
+ $permneed = AUTH_EDIT;
+ }
+ }else{
+ $permneed = AUTH_CREATE;
+ }
+ }elseif(in_array($act,array('login','search','recent','profile'))){
+ $permneed = AUTH_NONE;
+ }elseif($act == 'revert'){
+ $permneed = AUTH_ADMIN;
+ if($INFO['ismanager']) $permneed = AUTH_EDIT;
+ }elseif($act == 'register'){
+ $permneed = AUTH_NONE;
+ }elseif($act == 'resendpwd'){
+ $permneed = AUTH_NONE;
+ }elseif($act == 'admin'){
+ if($INFO['ismanager']){
+ //error_log("is manager");
+ // if the manager has the needed permissions for a certain admin
+ // action is checked later
+ $permneed = AUTH_READ;
+ }else{
+ //error_log("is admin");
+ $permneed = AUTH_ADMIN;
+ }
+ }else{
+ $permneed = AUTH_READ;
+ }
+ if($INFO['perm'] >= $permneed) return $act;
+
+ return 'denied';
+}
+
+/**
+ * Handle 'draftdel'
+ *
+ * Deletes the draft for the current page and user
+ */
+function act_draftdel($act){
+ global $INFO;
+ @unlink($INFO['draft']);
+ $INFO['draft'] = null;
+ return 'show';
+}
+
+/**
+ * Saves a draft on preview
+ *
+ * @todo this currently duplicates code from ajax.php :-/
+ */
+function act_draftsave($act){
+ global $INFO;
+ global $ID;
+ global $conf;
+ if($conf['usedraft'] && $_POST['wikitext']){
+ $draft = array('id' => $ID,
+ 'prefix' => $_POST['prefix'],
+ 'text' => $_POST['wikitext'],
+ 'suffix' => $_POST['suffix'],
+ 'date' => $_POST['date'],
+ 'client' => $INFO['client'],
+ );
+ $cname = getCacheName($draft['client'].$ID,'.draft');
+ if(io_saveFile($cname,serialize($draft))){
+ $INFO['draft'] = $cname;
+ }
+ }
+ return $act;
+}
+
+/**
+ * Handle 'save'
+ *
+ * Checks for spam and conflicts and saves the page.
+ * Does a redirect to show the page afterwards or
+ * returns a new action.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function act_save($act){
+ global $ID;
+ global $DATE;
+ global $PRE;
+ global $TEXT;
+ global $SUF;
+ global $SUM;
+
+ //spam check
+ if(checkwordblock())
+ return 'wordblock';
+ //conflict check //FIXME use INFO
+ if($DATE != 0 && @filemtime(wikiFN($ID)) > $DATE )
+ return 'conflict';
+
+ //save it
+ saveWikiText($ID,con($PRE,$TEXT,$SUF,1),$SUM,get_input('minor')); //use pretty mode for con
+ //unlock it
+ unlock($ID);
+
+ //delete draft
+ act_draftdel($act);
+ session_write_close();
+
+ // when done, show page
+ return 'show';
+}
+
+/**
+ * Revert to a certain revision
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function act_revert($act){
+ global $ID;
+ global $REV;
+ global $lang;
+
+ // when no revision is given, delete current one
+ // FIXME this feature is not exposed in the GUI currently
+ $text = '';
+ $sum = $lang['deleted'];
+ if($REV){
+ $text = rawWiki($ID,$REV);
+ if(!$text) return 'show'; //something went wrong
+ $sum = $lang['restored'];
+ }
+
+ // spam check
+ if(checkwordblock($Text))
+ return 'wordblock';
+
+ saveWikiText($ID,$text,$sum,false);
+ msg($sum,1);
+
+ //delete any draft
+ act_draftdel($act);
+ session_write_close();
+
+ // when done, show current page
+ $_SERVER['REQUEST_METHOD'] = 'post'; //should force a redirect
+ $REV = '';
+ return 'show';
+}
+
+/**
+ * Do a redirect after receiving post data
+ *
+ * Tries to add the section id as hash mark after section editing
+ */
+function act_redirect($id,$preact){
+ global $PRE;
+ global $TEXT;
+ global $MSG;
+
+ //are there any undisplayed messages? keep them in session for display
+ //on the next page
+ if(isset($MSG) && count($MSG)){
+ //reopen session, store data and close session again
+ @session_start();
+ $_SESSION[DOKU_COOKIE]['msg'] = $MSG;
+ session_write_close();
+ }
+
+ $opts = array(
+ 'id' => $id,
+ 'preact' => $preact
+ );
+ //get section name when coming from section edit
+ if($PRE && preg_match('/^\s*==+([^=\n]+)/',$TEXT,$match)){
+ $check = false; //Byref
+ $opts['fragment'] = sectionID($match[0], $check);
+ }
+
+ trigger_event('ACTION_SHOW_REDIRECT',$opts,'act_redirect_execute');
+}
+
+function act_redirect_execute($opts){
+ $go = wl($opts['id'],'',true);
+ if(isset($opts['fragment'])) $go .= '#'.$opts['fragment'];
+
+ //show it
+ send_redirect($go);
+}
+
+/**
+ * Handle 'login', 'logout'
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function act_auth($act){
+ global $ID;
+ global $INFO;
+
+ //already logged in?
+ if(isset($_SERVER['REMOTE_USER']) && $act=='login'){
+ return 'show';
+ }
+
+ //handle logout
+ if($act=='logout'){
+ $lockedby = checklock($ID); //page still locked?
+ if($lockedby == $_SERVER['REMOTE_USER'])
+ unlock($ID); //try to unlock
+
+ // do the logout stuff
+ auth_logoff();
+
+ // rebuild info array
+ $INFO = pageinfo();
+
+ act_redirect($ID,'login');
+ }
+
+ return $act;
+}
+
+/**
+ * Handle 'edit', 'preview'
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function act_edit($act){
+ global $ID;
+ global $INFO;
+
+ //check if locked by anyone - if not lock for my self
+ $lockedby = checklock($ID);
+ if($lockedby) return 'locked';
+
+ lock($ID);
+ return $act;
+}
+
+/**
+ * Export a wiki page for various formats
+ *
+ * Triggers ACTION_EXPORT_POSTPROCESS
+ *
+ * Event data:
+ * data['id'] -- page id
+ * data['mode'] -- requested export mode
+ * data['headers'] -- export headers
+ * data['output'] -- export output
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Michael Klier <chi@chimeric.de>
+ */
+function act_export($act){
+ global $ID;
+ global $REV;
+ global $conf;
+ global $lang;
+
+ $pre = '';
+ $post = '';
+ $output = '';
+ $headers = array();
+
+ // search engines: never cache exported docs! (Google only currently)
+ $headers['X-Robots-Tag'] = 'noindex';
+
+ $mode = substr($act,7);
+ switch($mode) {
+ case 'raw':
+ $headers['Content-Type'] = 'text/plain; charset=utf-8';
+ $headers['Content-Disposition'] = 'attachment; filename='.noNS($ID).'.txt';
+ $output = rawWiki($ID,$REV);
+ break;
+ case 'xhtml':
+ $pre .= '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"' . DOKU_LF;
+ $pre .= ' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">' . DOKU_LF;
+ $pre .= '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="'.$conf['lang'].'"' . DOKU_LF;
+ $pre .= ' lang="'.$conf['lang'].'" dir="'.$lang['direction'].'">' . DOKU_LF;
+ $pre .= '<head>' . DOKU_LF;
+ $pre .= ' <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />' . DOKU_LF;
+ $pre .= ' <title>'.$ID.'</title>' . DOKU_LF;
+
+ // get metaheaders
+ ob_start();
+ tpl_metaheaders();
+ $pre .= ob_get_clean();
+
+ $pre .= '</head>' . DOKU_LF;
+ $pre .= '<body>' . DOKU_LF;
+ $pre .= '<div class="dokuwiki export">' . DOKU_LF;
+
+ // get toc
+ $pre .= tpl_toc(true);
+
+ $headers['Content-Type'] = 'text/html; charset=utf-8';
+ $output = p_wiki_xhtml($ID,$REV,false);
+
+ $post .= '</div>' . DOKU_LF;
+ $post .= '</body>' . DOKU_LF;
+ $post .= '</html>' . DOKU_LF;
+ break;
+ case 'xhtmlbody':
+ $headers['Content-Type'] = 'text/html; charset=utf-8';
+ $output = p_wiki_xhtml($ID,$REV,false);
+ break;
+ default:
+ $output = p_cached_output(wikiFN($ID,$REV), $mode);
+ $headers = p_get_metadata($ID,"format $mode");
+ break;
+ }
+
+ // prepare event data
+ $data = array();
+ $data['id'] = $ID;
+ $data['mode'] = $mode;
+ $data['headers'] = $headers;
+ $data['output'] =& $output;
+
+ trigger_event('ACTION_EXPORT_POSTPROCESS', $data);
+
+ if(!empty($data['output'])){
+ if(is_array($data['headers'])) foreach($data['headers'] as $key => $val){
+ header("$key: $val");
+ }
+ print $pre.$data['output'].$post;
+ exit;
+ }
+ return 'show';
+}
+
+/**
+ * Handle page 'subscribe', 'unsubscribe'
+ *
+ * @author Steven Danz <steven-danz@kc.rr.com>
+ * @todo localize
+ */
+function act_subscription($act){
+ global $ID;
+ global $INFO;
+ global $lang;
+
+ $file=metaFN($ID,'.mlist');
+ if ($act=='subscribe' && !$INFO['subscribed']){
+ if ($INFO['userinfo']['mail']){
+ if (io_saveFile($file,$_SERVER['REMOTE_USER']."\n",true)) {
+ $INFO['subscribed'] = true;
+ msg(sprintf($lang[$act.'_success'], $INFO['userinfo']['name'], $ID),1);
+ } else {
+ msg(sprintf($lang[$act.'_error'], $INFO['userinfo']['name'], $ID),1);
+ }
+ } else {
+ msg($lang['subscribe_noaddress']);
+ }
+ } elseif ($act=='unsubscribe' && $INFO['subscribed']){
+ if (io_deleteFromFile($file,$_SERVER['REMOTE_USER']."\n")) {
+ $INFO['subscribed'] = false;
+ msg(sprintf($lang[$act.'_success'], $INFO['userinfo']['name'], $ID),1);
+ } else {
+ msg(sprintf($lang[$act.'_error'], $INFO['userinfo']['name'], $ID),1);
+ }
+ }
+
+ return 'show';
+}
+
+/**
+ * Handle namespace 'subscribe', 'unsubscribe'
+ *
+ */
+function act_subscriptionns($act){
+ global $ID;
+ global $INFO;
+ global $lang;
+
+ if(!getNS($ID)) {
+ $file = metaFN(getNS($ID),'.mlist');
+ $ns = "root";
+ } else {
+ $file = metaFN(getNS($ID),'/.mlist');
+ $ns = getNS($ID);
+ }
+
+ // reuse strings used to display the status of the subscribe action
+ $act_msg = rtrim($act, 'ns');
+
+ if ($act=='subscribens' && !$INFO['subscribedns']){
+ if ($INFO['userinfo']['mail']){
+ if (io_saveFile($file,$_SERVER['REMOTE_USER']."\n",true)) {
+ $INFO['subscribedns'] = true;
+ msg(sprintf($lang[$act_msg.'_success'], $INFO['userinfo']['name'], $ns),1);
+ } else {
+ msg(sprintf($lang[$act_msg.'_error'], $INFO['userinfo']['name'], $ns),1);
+ }
+ } else {
+ msg($lang['subscribe_noaddress']);
+ }
+ } elseif ($act=='unsubscribens' && $INFO['subscribedns']){
+ if (io_deleteFromFile($file,$_SERVER['REMOTE_USER']."\n")) {
+ $INFO['subscribedns'] = false;
+ msg(sprintf($lang[$act_msg.'_success'], $INFO['userinfo']['name'], $ns),1);
+ } else {
+ msg(sprintf($lang[$act_msg.'_error'], $INFO['userinfo']['name'], $ns),1);
+ }
+ }
+
+ return 'show';
+}
+
+//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/adLDAP.php b/mod/dokuwiki/vendors/dokuwiki/inc/adLDAP.php
new file mode 100644
index 000000000..94cd8a50d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/adLDAP.php
@@ -0,0 +1,2347 @@
+<?php
+/**
+ * PHP LDAP CLASS FOR MANIPULATING ACTIVE DIRECTORY
+ * Version 3.3.1
+ *
+ * PHP Version 5 with SSL and LDAP support
+ *
+ * Written by Scott Barnett, Richard Hyland
+ * email: scott@wiggumworld.com, adldap@richardhyland.com
+ * http://adldap.sourceforge.net/
+ *
+ * Copyright (c) 2006-2009 Scott Barnett, Richard Hyland
+ *
+ * We'd appreciate any improvements or additions to be submitted back
+ * to benefit the entire community :)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * @category ToolsAndUtilities
+ * @package adLDAP
+ * @author Scott Barnett, Richard Hyland
+ * @copyright (c) 2006-2009 Scott Barnett, Richard Hyland
+ * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html LGPLv2.1
+ * @revision $Revision: 67 $
+ * @version 3.3.1
+ * @link http://adldap.sourceforge.net/
+ */
+
+/**
+ * Define the different types of account in AD
+ */
+define ('ADLDAP_NORMAL_ACCOUNT', 805306368);
+define ('ADLDAP_WORKSTATION_TRUST', 805306369);
+define ('ADLDAP_INTERDOMAIN_TRUST', 805306370);
+define ('ADLDAP_SECURITY_GLOBAL_GROUP', 268435456);
+define ('ADLDAP_DISTRIBUTION_GROUP', 268435457);
+define ('ADLDAP_SECURITY_LOCAL_GROUP', 536870912);
+define ('ADLDAP_DISTRIBUTION_LOCAL_GROUP', 536870913);
+define ('ADLDAP_FOLDER', 'OU');
+define ('ADLDAP_CONTAINER', 'CN');
+
+/**
+* Main adLDAP class
+*
+* Can be initialised using $adldap = new adLDAP();
+*
+* Something to keep in mind is that Active Directory is a permissions
+* based directory. If you bind as a domain user, you can't fetch as
+* much information on other users as you could as a domain admin.
+*
+* Before asking questions, please read the Documentation at
+* http://adldap.sourceforge.net/wiki/doku.php?id=api
+*/
+class adLDAP {
+ /**
+ * The account suffix for your domain, can be set when the class is invoked
+ *
+ * @var string
+ */
+ protected $_account_suffix = "@mydomain.local";
+
+ /**
+ * The base dn for your domain
+ *
+ * @var string
+ */
+ protected $_base_dn = "DC=mydomain,DC=local";
+
+ /**
+ * Array of domain controllers. Specifiy multiple controllers if you
+ * would like the class to balance the LDAP queries amongst multiple servers
+ *
+ * @var array
+ */
+ protected $_domain_controllers = array ("dc01.mydomain.local");
+
+ /**
+ * Optional account with higher privileges for searching
+ * This should be set to a domain admin account
+ *
+ * @var string
+ * @var string
+ */
+ protected $_ad_username=NULL;
+ protected $_ad_password=NULL;
+
+ /**
+ * AD does not return the primary group. http://support.microsoft.com/?kbid=321360
+ * This tweak will resolve the real primary group.
+ * Setting to false will fudge "Domain Users" and is much faster. Keep in mind though that if
+ * someone's primary group is NOT domain users, this is obviously going to mess up the results
+ *
+ * @var bool
+ */
+ protected $_real_primarygroup=true;
+
+ /**
+ * Use SSL (LDAPS), your server needs to be setup, please see
+ * http://adldap.sourceforge.net/wiki/doku.php?id=ldap_over_ssl
+ *
+ * @var bool
+ */
+ protected $_use_ssl=false;
+
+ /**
+ * Use TLS
+ * If you wish to use TLS you should ensure that $_use_ssl is set to false and vice-versa
+ *
+ * @var bool
+ */
+ protected $_use_tls=false;
+
+ /**
+ * When querying group memberships, do it recursively
+ * eg. User Fred is a member of Group A, which is a member of Group B, which is a member of Group C
+ * user_ingroup("Fred","C") will returns true with this option turned on, false if turned off
+ *
+ * @var bool
+ */
+ protected $_recursive_groups=true;
+
+ // You should not need to edit anything below this line
+ //******************************************************************************************
+
+ /**
+ * Connection and bind default variables
+ *
+ * @var mixed
+ * @var mixed
+ */
+ protected $_conn;
+ protected $_bind;
+
+ /**
+ * Getters and Setters
+ */
+
+ /**
+ * Set the account suffix
+ *
+ * @param string $_account_suffix
+ * @return void
+ */
+ public function set_account_suffix($_account_suffix)
+ {
+ $this->_account_suffix = $_account_suffix;
+ }
+
+ /**
+ * Get the account suffix
+ *
+ * @return string
+ */
+ public function get_account_suffix()
+ {
+ return $this->_account_suffix;
+ }
+
+ /**
+ * Set the domain controllers array
+ *
+ * @param array $_domain_controllers
+ * @return void
+ */
+ public function set_domain_controllers(array $_domain_controllers)
+ {
+ $this->_domain_controllers = $_domain_controllers;
+ }
+
+ /**
+ * Get the list of domain controllers
+ *
+ * @return void
+ */
+ public function get_domain_controllers()
+ {
+ return $this->_domain_controllers;
+ }
+
+ /**
+ * Set the username of an account with higher priviledges
+ *
+ * @param string $_ad_username
+ * @return void
+ */
+ public function set_ad_username($_ad_username)
+ {
+ $this->_ad_username = $_ad_username;
+ }
+
+ /**
+ * Get the username of the account with higher priviledges
+ *
+ * This will throw an exception for security reasons
+ */
+ public function get_ad_username()
+ {
+ throw new adLDAPException('For security reasons you cannot access the domain administrator account details');
+ }
+
+ /**
+ * Set the password of an account with higher priviledges
+ *
+ * @param string $_ad_password
+ * @return void
+ */
+ public function set_ad_password($_ad_password)
+ {
+ $this->_ad_password = $_ad_password;
+ }
+
+ /**
+ * Get the password of the account with higher priviledges
+ *
+ * This will throw an exception for security reasons
+ */
+ public function get_ad_password()
+ {
+ throw new adLDAPException('For security reasons you cannot access the domain administrator account details');
+ }
+
+ /**
+ * Set whether to detect the true primary group
+ *
+ * @param bool $_real_primary_group
+ * @return void
+ */
+ public function set_real_primarygroup($_real_primarygroup)
+ {
+ $this->_real_primarygroup = $_real_primarygroup;
+ }
+
+ /**
+ * Get the real primary group setting
+ *
+ * @return bool
+ */
+ public function get_real_primarygroup()
+ {
+ return $this->_real_primarygroup;
+ }
+
+ /**
+ * Set whether to use SSL
+ *
+ * @param bool $_use_ssl
+ * @return void
+ */
+ public function set_use_ssl($_use_ssl)
+ {
+ $this->_use_ssl = $_use_ssl;
+ }
+
+ /**
+ * Get the SSL setting
+ *
+ * @return bool
+ */
+ public function get_use_ssl()
+ {
+ return $this->_use_ssl;
+ }
+
+ /**
+ * Set whether to use TLS
+ *
+ * @param bool $_use_tls
+ * @return void
+ */
+ public function set_use_tls($_use_tls)
+ {
+ $this->_use_tls = $_use_tls;
+ }
+
+ /**
+ * Get the TLS setting
+ *
+ * @return bool
+ */
+ public function get_use_tls()
+ {
+ return $this->_use_tls;
+ }
+
+ /**
+ * Set whether to lookup recursive groups
+ *
+ * @param bool $_recursive_groups
+ * @return void
+ */
+ public function set_recursive_groups($_recursive_groups)
+ {
+ $this->_recursive_groups = $_recursive_groups;
+ }
+
+ /**
+ * Get the recursive groups setting
+ *
+ * @return bool
+ */
+ public function get_recursive_groups()
+ {
+ return $this->_recursive_groups;
+ }
+
+ /**
+ * Default Constructor
+ *
+ * Tries to bind to the AD domain over LDAP or LDAPs
+ *
+ * @param array $options Array of options to pass to the constructor
+ * @throws Exception - if unable to bind to Domain Controller
+ * @return bool
+ */
+ function __construct($options=array()){
+ // You can specifically overide any of the default configuration options setup above
+ if (count($options)>0){
+ if (array_key_exists("account_suffix",$options)){ $this->_account_suffix=$options["account_suffix"]; }
+ if (array_key_exists("base_dn",$options)){ $this->_base_dn=$options["base_dn"]; }
+ if (array_key_exists("domain_controllers",$options)){ $this->_domain_controllers=$options["domain_controllers"]; }
+ if (array_key_exists("ad_username",$options)){ $this->_ad_username=$options["ad_username"]; }
+ if (array_key_exists("ad_password",$options)){ $this->_ad_password=$options["ad_password"]; }
+ if (array_key_exists("real_primarygroup",$options)){ $this->_real_primarygroup=$options["real_primarygroup"]; }
+ if (array_key_exists("use_ssl",$options)){ $this->_use_ssl=$options["use_ssl"]; }
+ if (array_key_exists("use_tls",$options)){ $this->_use_tls=$options["use_tls"]; }
+ if (array_key_exists("recursive_groups",$options)){ $this->_recursive_groups=$options["recursive_groups"]; }
+ }
+
+ if ($this->ldap_supported() === false) {
+ throw new adLDAPException('No LDAP support for PHP. See: http://www.php.net/ldap');
+ }
+
+ return $this->connect();
+ }
+
+ /**
+ * Default Destructor
+ *
+ * Closes the LDAP connection
+ *
+ * @return void
+ */
+ function __destruct(){ $this->close(); }
+
+ /**
+ * Connects and Binds to the Domain Controller
+ *
+ * @return bool
+ */
+ public function connect() {
+ // Connect to the AD/LDAP server as the username/password
+ $dc=$this->random_controller();
+ if ($this->_use_ssl){
+ $this->_conn = ldap_connect("ldaps://".$dc, 636);
+ } else {
+ $this->_conn = ldap_connect($dc);
+ }
+
+ // Set some ldap options for talking to AD
+ ldap_set_option($this->_conn, LDAP_OPT_PROTOCOL_VERSION, 3);
+ ldap_set_option($this->_conn, LDAP_OPT_REFERRALS, 0);
+
+ if ($this->_use_tls) {
+ ldap_start_tls($this->_conn);
+ }
+
+ // Bind as a domain admin if they've set it up
+ if ($this->_ad_username!=NULL && $this->_ad_password!=NULL){
+ $this->_bind = @ldap_bind($this->_conn,$this->_ad_username.$this->_account_suffix,$this->_ad_password);
+ if (!$this->_bind){
+ if ($this->_use_ssl && !$this->_use_tls){
+ // If you have problems troubleshooting, remove the @ character from the ldap_bind command above to get the actual error message
+ throw new adLDAPException('Bind to Active Directory failed. Either the LDAPs connection failed or the login credentials are incorrect. AD said: ' . $this->get_last_error());
+ } else {
+ throw new adLDAPException('Bind to Active Directory failed. Check the login credentials and/or server details. AD said: ' . $this->get_last_error());
+ }
+ }
+ }
+
+ if ($this->_base_dn == NULL) {
+ $this->_base_dn = $this->find_base_dn();
+ }
+
+ return (true);
+ }
+
+ /**
+ * Closes the LDAP connection
+ *
+ * @return void
+ */
+ public function close() {
+ ldap_close ($this->_conn);
+ }
+
+ /**
+ * Validate a user's login credentials
+ *
+ * @param string $username A user's AD username
+ * @param string $password A user's AD password
+ * @param bool optional $prevent_rebind
+ * @return bool
+ */
+ public function authenticate($username,$password,$prevent_rebind=false){
+ // Prevent null binding
+ if ($username===NULL || $password===NULL){ return (false); }
+ if (empty($username) || empty($password)){ return (false); }
+
+ // Bind as the user
+ $this->_bind = @ldap_bind($this->_conn,$username.$this->_account_suffix,$password);
+ if (!$this->_bind){ return (false); }
+
+ // Cnce we've checked their details, kick back into admin mode if we have it
+ if ($this->_ad_username!=NULL && !$prevent_rebind){
+ $this->_bind = @ldap_bind($this->_conn,$this->_ad_username.$this->_account_suffix,$this->_ad_password);
+ if (!$this->_bind){
+ // This should never happen in theory
+ throw new adLDAPException('Rebind to Active Directory failed. AD said: ' . $this->get_last_error());
+ }
+ }
+
+ return (true);
+ }
+
+ //*****************************************************************************************************************
+ // GROUP FUNCTIONS
+
+ /**
+ * Add a group to a group
+ *
+ * @param string $parent The parent group name
+ * @param string $child The child group name
+ * @return bool
+ */
+ public function group_add_group($parent,$child){
+
+ // Find the parent group's dn
+ $parent_group=$this->group_info($parent,array("cn"));
+ if ($parent_group[0]["dn"]===NULL){ return (false); }
+ $parent_dn=$parent_group[0]["dn"];
+
+ // Find the child group's dn
+ $child_group=$this->group_info($child,array("cn"));
+ if ($child_group[0]["dn"]===NULL){ return (false); }
+ $child_dn=$child_group[0]["dn"];
+
+ $add=array();
+ $add["member"] = $child_dn;
+
+ $result=@ldap_mod_add($this->_conn,$parent_dn,$add);
+ if ($result==false){ return (false); }
+ return (true);
+ }
+
+ /**
+ * Add a user to a group
+ *
+ * @param string $group The group to add the user to
+ * @param string $user The user to add to the group
+ * @param bool $isGUID Is the username passed a GUID or a samAccountName
+ * @return bool
+ */
+ public function group_add_user($group,$user,$isGUID=false){
+ // Adding a user is a bit fiddly, we need to get the full DN of the user
+ // and add it using the full DN of the group
+
+ // Find the user's dn
+ $user_dn=$this->user_dn($user,$isGUID);
+ if ($user_dn===false){ return (false); }
+
+ // Find the group's dn
+ $group_info=$this->group_info($group,array("cn"));
+ if ($group_info[0]["dn"]===NULL){ return (false); }
+ $group_dn=$group_info[0]["dn"];
+
+ $add=array();
+ $add["member"] = $user_dn;
+
+ $result=@ldap_mod_add($this->_conn,$group_dn,$add);
+ if ($result==false){ return (false); }
+ return (true);
+ }
+
+ /**
+ * Add a contact to a group
+ *
+ * @param string $group The group to add the contact to
+ * @param string $contact_dn The DN of the contact to add
+ * @return bool
+ */
+ public function group_add_contact($group,$contact_dn){
+ // To add a contact we take the contact's DN
+ // and add it using the full DN of the group
+
+ // Find the group's dn
+ $group_info=$this->group_info($group,array("cn"));
+ if ($group_info[0]["dn"]===NULL){ return (false); }
+ $group_dn=$group_info[0]["dn"];
+
+ $add=array();
+ $add["member"] = $contact_dn;
+
+ $result=@ldap_mod_add($this->_conn,$group_dn,$add);
+ if ($result==false){ return (false); }
+ return (true);
+ }
+
+ /**
+ * Create a group
+ *
+ * @param array $attributes Default attributes of the group
+ * @return bool
+ */
+ public function group_create($attributes){
+ if (!is_array($attributes)){ return ("Attributes must be an array"); }
+ if (!array_key_exists("group_name",$attributes)){ return ("Missing compulsory field [group_name]"); }
+ if (!array_key_exists("container",$attributes)){ return ("Missing compulsory field [container]"); }
+ if (!array_key_exists("description",$attributes)){ return ("Missing compulsory field [description]"); }
+ if (!is_array($attributes["container"])){ return ("Container attribute must be an array."); }
+ $attributes["container"]=array_reverse($attributes["container"]);
+
+ //$member_array = array();
+ //$member_array[0] = "cn=user1,cn=Users,dc=yourdomain,dc=com";
+ //$member_array[1] = "cn=administrator,cn=Users,dc=yourdomain,dc=com";
+
+ $add=array();
+ $add["cn"] = $attributes["group_name"];
+ $add["samaccountname"] = $attributes["group_name"];
+ $add["objectClass"] = "Group";
+ $add["description"] = $attributes["description"];
+ //$add["member"] = $member_array; UNTESTED
+
+ $container="OU=".implode(",OU=",$attributes["container"]);
+ $result=ldap_add($this->_conn,"CN=".$add["cn"].", ".$container.",".$this->_base_dn,$add);
+ if ($result!=true){ return (false); }
+
+ return (true);
+ }
+
+ /**
+ * Remove a group from a group
+ *
+ * @param string $parent The parent group name
+ * @param string $child The child group name
+ * @return bool
+ */
+ public function group_del_group($parent,$child){
+
+ // Find the parent dn
+ $parent_group=$this->group_info($parent,array("cn"));
+ if ($parent_group[0]["dn"]===NULL){ return (false); }
+ $parent_dn=$parent_group[0]["dn"];
+
+ // Find the child dn
+ $child_group=$this->group_info($child,array("cn"));
+ if ($child_group[0]["dn"]===NULL){ return (false); }
+ $child_dn=$child_group[0]["dn"];
+
+ $del=array();
+ $del["member"] = $child_dn;
+
+ $result=@ldap_mod_del($this->_conn,$parent_dn,$del);
+ if ($result==false){ return (false); }
+ return (true);
+ }
+
+ /**
+ * Remove a user from a group
+ *
+ * @param string $group The group to remove a user from
+ * @param string $user The AD user to remove from the group
+ * @param bool $isGUID Is the username passed a GUID or a samAccountName
+ * @return bool
+ */
+ public function group_del_user($group,$user,$isGUID=false){
+
+ // Find the parent dn
+ $group_info=$this->group_info($group,array("cn"));
+ if ($group_info[0]["dn"]===NULL){ return (false); }
+ $group_dn=$group_info[0]["dn"];
+
+ // Find the users dn
+ $user_dn=$this->user_dn($user,$isGUID);
+ if ($user_dn===false){ return (false); }
+
+ $del=array();
+ $del["member"] = $user_dn;
+
+ $result=@ldap_mod_del($this->_conn,$group_dn,$del);
+ if ($result==false){ return (false); }
+ return (true);
+ }
+
+ /**
+ * Remove a contact from a group
+ *
+ * @param string $group The group to remove a user from
+ * @param string $contact_dn The DN of a contact to remove from the group
+ * @return bool
+ */
+ public function group_del_contact($group,$contact_dn){
+
+ // Find the parent dn
+ $group_info=$this->group_info($group,array("cn"));
+ if ($group_info[0]["dn"]===NULL){ return (false); }
+ $group_dn=$group_info[0]["dn"];
+
+ $del=array();
+ $del["member"] = $contact_dn;
+
+ $result=@ldap_mod_del($this->_conn,$group_dn,$del);
+ if ($result==false){ return (false); }
+ return (true);
+ }
+
+ /**
+ * Return a list of groups in a group
+ *
+ * @param string $group The group to query
+ * @param bool $recursive Recursively get groups
+ * @return array
+ */
+ public function groups_in_group($group, $recursive = NULL){
+ if (!$this->_bind){ return (false); }
+ if ($recursive===NULL){ $recursive=$this->_recursive_groups; } // Use the default option if they haven't set it
+
+ // Search the directory for the members of a group
+ $info=$this->group_info($group,array("member","cn"));
+ $groups=$info[0]["member"];
+ if (!is_array($groups)) {
+ return (false);
+ }
+
+ $group_array=array();
+
+ for ($i=0; $i<$groups["count"]; $i++){
+ $filter="(&(objectCategory=group)(distinguishedName=".$this->ldap_slashes($groups[$i])."))";
+ $fields = array("samaccountname", "distinguishedname", "objectClass");
+ $sr=ldap_search($this->_conn,$this->_base_dn,$filter,$fields);
+ $entries = ldap_get_entries($this->_conn, $sr);
+
+ // not a person, look for a group
+ if ($entries['count'] == 0 && $recursive == true) {
+ $filter="(&(objectCategory=group)(distinguishedName=".$this->ldap_slashes($groups[$i])."))";
+ $fields = array("distinguishedname");
+ $sr=ldap_search($this->_conn,$this->_base_dn,$filter,$fields);
+ $entries = ldap_get_entries($this->_conn, $sr);
+ if (!isset($entries[0]['distinguishedname'][0])) {
+ continue;
+ }
+ $sub_groups = $this->groups_in_group($entries[0]['distinguishedname'][0], $recursive);
+ if (is_array($sub_groups)) {
+ $group_array = array_merge($group_array, $sub_groups);
+ $group_array = array_unique($group_array);
+ }
+ continue;
+ }
+
+ $group_array[] = $entries[0]['distinguishedname'][0];
+ }
+ return ($group_array);
+ }
+
+ /**
+ * Return a list of members in a group
+ *
+ * @param string $group The group to query
+ * @param bool $recursive Recursively get group members
+ * @return array
+ */
+ public function group_members($group, $recursive = NULL){
+ if (!$this->_bind){ return (false); }
+ if ($recursive===NULL){ $recursive=$this->_recursive_groups; } // Use the default option if they haven't set it
+ // Search the directory for the members of a group
+ $info=$this->group_info($group,array("member","cn"));
+ $users=$info[0]["member"];
+ if (!is_array($users)) {
+ return (false);
+ }
+
+ $user_array=array();
+
+ for ($i=0; $i<$users["count"]; $i++){
+ $filter="(&(objectCategory=person)(distinguishedName=".$this->ldap_slashes($users[$i])."))";
+ $fields = array("samaccountname", "distinguishedname", "objectClass");
+ $sr=ldap_search($this->_conn,$this->_base_dn,$filter,$fields);
+ $entries = ldap_get_entries($this->_conn, $sr);
+
+ // not a person, look for a group
+ if ($entries['count'] == 0 && $recursive == true) {
+ $filter="(&(objectCategory=group)(distinguishedName=".$this->ldap_slashes($users[$i])."))";
+ $fields = array("samaccountname");
+ $sr=ldap_search($this->_conn,$this->_base_dn,$filter,$fields);
+ $entries = ldap_get_entries($this->_conn, $sr);
+ if (!isset($entries[0]['samaccountname'][0])) {
+ continue;
+ }
+ $sub_users = $this->group_members($entries[0]['samaccountname'][0], $recursive);
+ if (is_array($sub_users)) {
+ $user_array = array_merge($user_array, $sub_users);
+ $user_array = array_unique($user_array);
+ }
+ continue;
+ }
+
+ if ($entries[0]['samaccountname'][0] === NULL && $entries[0]['distinguishedname'][0] !== NULL) {
+ $user_array[] = $entries[0]['distinguishedname'][0];
+ }
+ elseif ($entries[0]['samaccountname'][0] !== NULL) {
+ $user_array[] = $entries[0]['samaccountname'][0];
+ }
+ }
+ return ($user_array);
+ }
+
+ /**
+ * Group Information. Returns an array of information about a group.
+ * The group name is case sensitive
+ *
+ * @param string $group_name The group name to retrieve info about
+ * @param array $fields Fields to retrieve
+ * @return array
+ */
+ public function group_info($group_name,$fields=NULL){
+ if ($group_name===NULL){ return (false); }
+ if (!$this->_bind){ return (false); }
+
+ if (stristr($group_name, '+')) {
+ $group_name=stripslashes($group_name);
+ }
+
+ $filter="(&(objectCategory=group)(name=".$this->ldap_slashes($group_name)."))";
+ //echo ($filter."!!!<br>");
+ if ($fields===NULL){ $fields=array("member","memberof","cn","description","distinguishedname","objectcategory","samaccountname"); }
+ $sr=ldap_search($this->_conn,$this->_base_dn,$filter,$fields);
+ $entries = ldap_get_entries($this->_conn, $sr);
+ //print_r($entries);
+ return ($entries);
+ }
+
+ /**
+ * Return a complete list of "groups in groups"
+ *
+ * @param string $group The group to get the list from
+ * @return array
+ */
+ public function recursive_groups($group){
+ if ($group===NULL){ return (false); }
+
+ $ret_groups=array();
+
+ $groups=$this->group_info($group,array("memberof"));
+ if (is_array($groups[0]["memberof"])) {
+ $groups=$groups[0]["memberof"];
+
+ if ($groups){
+ $group_names=$this->nice_names($groups);
+ $ret_groups=array_merge($ret_groups,$group_names); //final groups to return
+
+ foreach ($group_names as $id => $group_name){
+ $child_groups=$this->recursive_groups($group_name);
+ $ret_groups=array_merge($ret_groups,$child_groups);
+ }
+ }
+ }
+
+ return ($ret_groups);
+ }
+
+ /**
+ * Returns a complete list of the groups in AD based on a SAM Account Type
+ *
+ * @param string $samaccounttype The account type to return
+ * @param bool $include_desc Whether to return a description
+ * @param string $search Search parameters
+ * @param bool $sorted Whether to sort the results
+ * @return array
+ */
+ public function search_groups($samaccounttype = ADLDAP_SECURITY_GLOBAL_GROUP, $include_desc = false, $search = "*", $sorted = true) {
+ if (!$this->_bind){ return (false); }
+
+ $filter = '(&(objectCategory=group)';
+ if ($samaccounttype !== null) {
+ $filter .= '(samaccounttype='. $samaccounttype .')';
+ }
+ $filter .= '(cn='.$search.'))';
+ // Perform the search and grab all their details
+ $fields=array("samaccountname","description");
+ $sr=ldap_search($this->_conn,$this->_base_dn,$filter,$fields);
+ $entries = ldap_get_entries($this->_conn, $sr);
+
+ $groups_array = array();
+ for ($i=0; $i<$entries["count"]; $i++){
+ if ($include_desc && strlen($entries[$i]["description"][0]) > 0 ){
+ $groups_array[ $entries[$i]["samaccountname"][0] ] = $entries[$i]["description"][0];
+ } elseif ($include_desc){
+ $groups_array[ $entries[$i]["samaccountname"][0] ] = $entries[$i]["samaccountname"][0];
+ } else {
+ array_push($groups_array, $entries[$i]["samaccountname"][0]);
+ }
+ }
+ if( $sorted ){ asort($groups_array); }
+ return ($groups_array);
+ }
+
+ /**
+ * Returns a complete list of all groups in AD
+ *
+ * @param bool $include_desc Whether to return a description
+ * @param string $search Search parameters
+ * @param bool $sorted Whether to sort the results
+ * @return array
+ */
+ public function all_groups($include_desc = false, $search = "*", $sorted = true){
+ $groups_array = $this->search_groups(null, $include_desc, $search, $sorted);
+ return ($groups_array);
+ }
+
+ /**
+ * Returns a complete list of security groups in AD
+ *
+ * @param bool $include_desc Whether to return a description
+ * @param string $search Search parameters
+ * @param bool $sorted Whether to sort the results
+ * @return array
+ */
+ public function all_security_groups($include_desc = false, $search = "*", $sorted = true){
+ $groups_array = $this->search_groups(ADLDAP_SECURITY_GLOBAL_GROUP, $include_desc, $search, $sorted);
+ return ($groups_array);
+ }
+
+ /**
+ * Returns a complete list of distribution lists in AD
+ *
+ * @param bool $include_desc Whether to return a description
+ * @param string $search Search parameters
+ * @param bool $sorted Whether to sort the results
+ * @return array
+ */
+ public function all_distribution_groups($include_desc = false, $search = "*", $sorted = true){
+ $groups_array = $this->search_groups(ADLDAP_DISTRIBUTION_GROUP, $include_desc, $search, $sorted);
+ return ($groups_array);
+ }
+
+ //*****************************************************************************************************************
+ // USER FUNCTIONS
+
+ /**
+ * Create a user
+ *
+ * If you specify a password here, this can only be performed over SSL
+ *
+ * @param array $attributes The attributes to set to the user account
+ * @return bool
+ */
+ public function user_create($attributes){
+ // Check for compulsory fields
+ if (!array_key_exists("username",$attributes)){ return ("Missing compulsory field [username]"); }
+ if (!array_key_exists("firstname",$attributes)){ return ("Missing compulsory field [firstname]"); }
+ if (!array_key_exists("surname",$attributes)){ return ("Missing compulsory field [surname]"); }
+ if (!array_key_exists("email",$attributes)){ return ("Missing compulsory field [email]"); }
+ if (!array_key_exists("container",$attributes)){ return ("Missing compulsory field [container]"); }
+ if (!is_array($attributes["container"])){ return ("Container attribute must be an array."); }
+
+ if (array_key_exists("password",$attributes) && (!$this->_use_ssl && !$this->_use_tls)){
+ throw new adLDAPException('SSL must be configured on your webserver and enabled in the class to set passwords.');
+ }
+
+ if (!array_key_exists("display_name",$attributes)){ $attributes["display_name"]=$attributes["firstname"]." ".$attributes["surname"]; }
+
+ // Translate the schema
+ $add=$this->adldap_schema($attributes);
+
+ // Additional stuff only used for adding accounts
+ $add["cn"][0]=$attributes["display_name"];
+ $add["samaccountname"][0]=$attributes["username"];
+ $add["objectclass"][0]="top";
+ $add["objectclass"][1]="person";
+ $add["objectclass"][2]="organizationalPerson";
+ $add["objectclass"][3]="user"; //person?
+ //$add["name"][0]=$attributes["firstname"]." ".$attributes["surname"];
+
+ // Set the account control attribute
+ $control_options=array("NORMAL_ACCOUNT");
+ if (!$attributes["enabled"]){ $control_options[]="ACCOUNTDISABLE"; }
+ $add["userAccountControl"][0]=$this->account_control($control_options);
+ //echo ("<pre>"); print_r($add);
+
+ // Determine the container
+ $attributes["container"]=array_reverse($attributes["container"]);
+ $container="OU=".implode(",OU=",$attributes["container"]);
+
+ // Add the entry
+ $result=@ldap_add($this->_conn, "CN=".$add["cn"][0].", ".$container.",".$this->_base_dn, $add);
+ if ($result!=true){ return (false); }
+
+ return (true);
+ }
+
+ /**
+ * Delete a user account
+ *
+ * @param string $username The username to delete (please be careful here!)
+ * @param bool $isGUID Is the username a GUID or a samAccountName
+ * @return array
+ */
+ public function user_delete($username,$isGUID=false) {
+ $userinfo = $this->user_info($username, array("*"),$isGUID);
+ $dn = $userinfo[0]['distinguishedname'][0];
+ $result=$this->dn_delete($dn);
+ if ($result!=true){ return (false); }
+ return (true);
+ }
+
+ /**
+ * Groups the user is a member of
+ *
+ * @param string $username The username to query
+ * @param bool $recursive Recursive list of groups
+ * @param bool $isGUID Is the username passed a GUID or a samAccountName
+ * @return array
+ */
+ public function user_groups($username,$recursive=NULL,$isGUID=false){
+ if ($username===NULL){ return (false); }
+ if ($recursive===NULL){ $recursive=$this->_recursive_groups; } // Use the default option if they haven't set it
+ if (!$this->_bind){ return (false); }
+
+ // Search the directory for their information
+ $info=@$this->user_info($username,array("memberof","primarygroupid"),$isGUID);
+ $groups=$this->nice_names($info[0]["memberof"]); // Presuming the entry returned is our guy (unique usernames)
+
+ if ($recursive === true){
+ foreach ($groups as $id => $group_name){
+ $extra_groups=$this->recursive_groups($group_name);
+ $groups=array_merge($groups,$extra_groups);
+ }
+ }
+
+ return ($groups);
+ }
+
+ /**
+ * Find information about the users
+ *
+ * @param string $username The username to query
+ * @param array $fields Array of parameters to query
+ * @param bool $isGUID Is the username passed a GUID or a samAccountName
+ * @return array
+ */
+ public function user_info($username,$fields=NULL,$isGUID=false){
+ if ($username===NULL){ return (false); }
+ if (!$this->_bind){ return (false); }
+
+ if ($isGUID === true) {
+ $username = $this->strguid2hex($username);
+ $filter="objectguid=".$username;
+ }
+ else {
+ $filter="samaccountname=".$username;
+ }
+ if ($fields===NULL){ $fields=array("samaccountname","mail","memberof","department","displayname","telephonenumber","primarygroupid","objectsid"); }
+ $sr=ldap_search($this->_conn,$this->_base_dn,$filter,$fields);
+ $entries = ldap_get_entries($this->_conn, $sr);
+
+ if ($entries[0]['count'] >= 1) {
+ // AD does not return the primary group in the ldap query, we may need to fudge it
+ if ($this->_real_primarygroup && isset($entries[0]["primarygroupid"][0]) && isset($entries[0]["objectsid"][0])){
+ //$entries[0]["memberof"][]=$this->group_cn($entries[0]["primarygroupid"][0]);
+ $entries[0]["memberof"][]=$this->get_primary_group($entries[0]["primarygroupid"][0], $entries[0]["objectsid"][0]);
+ } else {
+ $entries[0]["memberof"][]="CN=Domain Users,CN=Users,".$this->_base_dn;
+ }
+ }
+
+ $entries[0]["memberof"]["count"]++;
+ return ($entries);
+ }
+
+ /**
+ * Determine if a user is in a specific group
+ *
+ * @param string $username The username to query
+ * @param string $group The name of the group to check against
+ * @param bool $recursive Check groups recursively
+ * @param bool $isGUID Is the username passed a GUID or a samAccountName
+ * @return bool
+ */
+ public function user_ingroup($username,$group,$recursive=NULL,$isGUID=false){
+ if ($username===NULL){ return (false); }
+ if ($group===NULL){ return (false); }
+ if (!$this->_bind){ return (false); }
+ if ($recursive===NULL){ $recursive=$this->_recursive_groups; } // Use the default option if they haven't set it
+
+ // Get a list of the groups
+ $groups=$this->user_groups($username,$recursive,$isGUID);
+
+ // Return true if the specified group is in the group list
+ if (in_array($group,$groups)){ return (true); }
+
+ return (false);
+ }
+
+ /**
+ * Determine a user's password expiry date
+ *
+ * @param string $username The username to query
+ * @param book $isGUID Is the username passed a GUID or a samAccountName
+ * @requires bcmath http://www.php.net/manual/en/book.bc.php
+ * @return array
+ */
+ public function user_password_expiry($username,$isGUID=false) {
+ if ($username===NULL){ return ("Missing compulsory field [username]"); }
+ if (!$this->_bind){ return (false); }
+ if (!function_exists('bcmod')) { return ("Missing function support [bcmod] http://www.php.net/manual/en/book.bc.php"); };
+
+ $userinfo = $this->user_info($username, array("pwdlastset", "useraccountcontrol"), $isGUID);
+ $pwdlastset = $userinfo[0]['pwdlastset'][0];
+ $status = array();
+
+ if ($userinfo[0]['useraccountcontrol'][0] == '66048') {
+ // Password does not expire
+ return "Does not expire";
+ }
+ if ($pwdlastset === '0') {
+ // Password has already expired
+ return "Password has expired";
+ }
+
+ // Password expiry in AD can be calculated from TWO values:
+ // - User's own pwdLastSet attribute: stores the last time the password was changed
+ // - Domain's maxPwdAge attribute: how long passwords last in the domain
+ //
+ // Although Microsoft chose to use a different base and unit for time measurements.
+ // This function will convert them to Unix timestamps
+ $sr = ldap_read($this->_conn, $this->_base_dn, 'objectclass=*', array('maxPwdAge'));
+ if (!$sr) {
+ return false;
+ }
+ $info = ldap_get_entries($this->_conn, $sr);
+ $maxpwdage = $info[0]['maxpwdage'][0];
+
+
+ // See MSDN: http://msdn.microsoft.com/en-us/library/ms974598.aspx
+ //
+ // pwdLastSet contains the number of 100 nanosecond intervals since January 1, 1601 (UTC),
+ // stored in a 64 bit integer.
+ //
+ // The number of seconds between this date and Unix epoch is 11644473600.
+ //
+ // maxPwdAge is stored as a large integer that represents the number of 100 nanosecond
+ // intervals from the time the password was set before the password expires.
+ //
+ // We also need to scale this to seconds but also this value is a _negative_ quantity!
+ //
+ // If the low 32 bits of maxPwdAge are equal to 0 passwords do not expire
+ //
+ // Unfortunately the maths involved are too big for PHP integers, so I've had to require
+ // BCMath functions to work with arbitrary precision numbers.
+ if (bcmod($maxpwdage, 4294967296) === '0') {
+ return "Domain does not expire passwords";
+ }
+
+ // Add maxpwdage and pwdlastset and we get password expiration time in Microsoft's
+ // time units. Because maxpwd age is negative we need to subtract it.
+ $pwdexpire = bcsub($pwdlastset, $maxpwdage);
+
+ // Convert MS's time to Unix time
+ $status['expiryts'] = bcsub(bcdiv($pwdexpire, '10000000'), '11644473600');
+ $status['expiryformat'] = date('Y-m-d H:i:s', bcsub(bcdiv($pwdexpire, '10000000'), '11644473600'));
+
+ return $status;
+ }
+
+ /**
+ * Modify a user
+ *
+ * @param string $username The username to query
+ * @param array $attributes The attributes to modify. Note if you set the enabled attribute you must not specify any other attributes
+ * @param bool $isGUID Is the username passed a GUID or a samAccountName
+ * @return bool
+ */
+ public function user_modify($username,$attributes,$isGUID=false){
+ if ($username===NULL){ return ("Missing compulsory field [username]"); }
+ if (array_key_exists("password",$attributes) && !$this->_use_ssl){
+ throw new adLDAPException('SSL must be configured on your webserver and enabled in the class to set passwords.');
+ }
+
+ // Find the dn of the user
+ $user_dn=$this->user_dn($username,$isGUID);
+ if ($user_dn===false){ return (false); }
+
+ // Translate the update to the LDAP schema
+ $mod=$this->adldap_schema($attributes);
+
+ // Check to see if this is an enabled status update
+ if (!$mod && !array_key_exists("enabled", $attributes)){ return (false); }
+
+ // Set the account control attribute (only if specified)
+ if (array_key_exists("enabled",$attributes)){
+ if ($attributes["enabled"]){ $control_options=array("NORMAL_ACCOUNT"); }
+ else { $control_options=array("NORMAL_ACCOUNT","ACCOUNTDISABLE"); }
+ $mod["userAccountControl"][0]=$this->account_control($control_options);
+ }
+
+ // Do the update
+ $result=@ldap_modify($this->_conn,$user_dn,$mod);
+ if ($result==false){ return (false); }
+
+ return (true);
+ }
+
+ /**
+ * Disable a user account
+ *
+ * @param string $username The username to disable
+ * @param bool $isGUID Is the username passed a GUID or a samAccountName
+ * @return bool
+ */
+ public function user_disable($username,$isGUID=false){
+ if ($username===NULL){ return ("Missing compulsory field [username]"); }
+ $attributes=array("enabled"=>0);
+ $result = $this->user_modify($username, $attributes, $isGUID);
+ if ($result==false){ return (false); }
+
+ return (true);
+ }
+
+ /**
+ * Enable a user account
+ *
+ * @param string $username The username to enable
+ * @param bool $isGUID Is the username passed a GUID or a samAccountName
+ * @return bool
+ */
+ public function user_enable($username,$isGUID=false){
+ if ($username===NULL){ return ("Missing compulsory field [username]"); }
+ $attributes=array("enabled"=>1);
+ $result = $this->user_modify($username, $attributes, $isGUID);
+ if ($result==false){ return (false); }
+
+ return (true);
+ }
+
+ /**
+ * Set the password of a user - This must be performed over SSL
+ *
+ * @param string $username The username to modify
+ * @param string $password The new password
+ * @param bool $isGUID Is the username passed a GUID or a samAccountName
+ * @return bool
+ */
+ public function user_password($username,$password,$isGUID=false){
+ if ($username===NULL){ return (false); }
+ if ($password===NULL){ return (false); }
+ if (!$this->_bind){ return (false); }
+ if (!$this->_use_ssl && !$this->_use_tls){
+ throw new adLDAPException('SSL must be configured on your webserver and enabled in the class to set passwords.');
+ }
+
+ $user_dn=$this->user_dn($username,$isGUID);
+ if ($user_dn===false){ return (false); }
+
+ $add=array();
+ $add["unicodePwd"][0]=$this->encode_password($password);
+
+ $result=ldap_mod_replace($this->_conn,$user_dn,$add);
+ if ($result==false){ return (false); }
+
+ return (true);
+ }
+
+ /**
+ * Return a list of all users in AD
+ *
+ * @param bool $include_desc Return a description of the user
+ * @param string $search Search parameter
+ * @param bool $sorted Sort the user accounts
+ * @return array
+ */
+ public function all_users($include_desc = false, $search = "*", $sorted = true){
+ if (!$this->_bind){ return (false); }
+
+ // Perform the search and grab all their details
+ $filter = "(&(objectClass=user)(samaccounttype=". ADLDAP_NORMAL_ACCOUNT .")(objectCategory=person)(cn=".$search."))";
+ $fields=array("samaccountname","displayname");
+ $sr=ldap_search($this->_conn,$this->_base_dn,$filter,$fields);
+ $entries = ldap_get_entries($this->_conn, $sr);
+
+ $users_array = array();
+ for ($i=0; $i<$entries["count"]; $i++){
+ if ($include_desc && strlen($entries[$i]["displayname"][0])>0){
+ $users_array[ $entries[$i]["samaccountname"][0] ] = $entries[$i]["displayname"][0];
+ } elseif ($include_desc){
+ $users_array[ $entries[$i]["samaccountname"][0] ] = $entries[$i]["samaccountname"][0];
+ } else {
+ array_push($users_array, $entries[$i]["samaccountname"][0]);
+ }
+ }
+ if ($sorted){ asort($users_array); }
+ return ($users_array);
+ }
+
+ /**
+ * Converts a username (samAccountName) to a GUID
+ *
+ * @param string $username The username to query
+ * @return string
+ */
+ public function username2guid($username) {
+ if (!$this->_bind){ return (false); }
+ if ($username === null){ return ("Missing compulsory field [username]"); }
+
+ $filter = "samaccountname=" . $username;
+ $fields = array("objectGUID");
+ $sr = @ldap_search($this->_conn, $this->_base_dn, $filter, $fields);
+ if (ldap_count_entries($this->_conn, $sr) > 0) {
+ $entry = @ldap_first_entry($this->_conn, $sr);
+ $guid = @ldap_get_values_len($this->_conn, $entry, 'objectGUID');
+ $strGUID = $this->binary2text($guid[0]);
+ return ($strGUID);
+ }
+ else {
+ return (false);
+ }
+ }
+
+ //*****************************************************************************************************************
+ // CONTACT FUNCTIONS
+ // * Still work to do in this area, and new functions to write
+
+ /**
+ * Create a contact
+ *
+ * @param array $attributes The attributes to set to the contact
+ * @return bool
+ */
+ public function contact_create($attributes){
+ // Check for compulsory fields
+ if (!array_key_exists("display_name",$attributes)){ return ("Missing compulsory field [display_name]"); }
+ if (!array_key_exists("email",$attributes)){ return ("Missing compulsory field [email]"); }
+ if (!array_key_exists("container",$attributes)){ return ("Missing compulsory field [container]"); }
+ if (!is_array($attributes["container"])){ return ("Container attribute must be an array."); }
+
+ // Translate the schema
+ $add=$this->adldap_schema($attributes);
+
+ // Additional stuff only used for adding contacts
+ $add["cn"][0]=$attributes["display_name"];
+ $add["objectclass"][0]="top";
+ $add["objectclass"][1]="person";
+ $add["objectclass"][2]="organizationalPerson";
+ $add["objectclass"][3]="contact";
+ if (!isset($attributes['exchange_hidefromlists'])) {
+ $add["msExchHideFromAddressLists"][0]="TRUE";
+ }
+
+ // Determine the container
+ $attributes["container"]=array_reverse($attributes["container"]);
+ $container="OU=".implode(",OU=",$attributes["container"]);
+
+ // Add the entry
+ $result=@ldap_add($this->_conn, "CN=".$add["cn"][0].", ".$container.",".$this->_base_dn, $add);
+ if ($result!=true){ return (false); }
+
+ return (true);
+ }
+
+ /**
+ * Determine the list of groups a contact is a member of
+ *
+ * @param string $distinguisedname The full DN of a contact
+ * @param bool $recursive Recursively check groups
+ * @return array
+ */
+ public function contact_groups($distinguishedname,$recursive=NULL){
+ if ($distinguishedname===NULL){ return (false); }
+ if ($recursive===NULL){ $recursive=$this->_recursive_groups; } //use the default option if they haven't set it
+ if (!$this->_bind){ return (false); }
+
+ // Search the directory for their information
+ $info=@$this->contact_info($distinguishedname,array("memberof","primarygroupid"));
+ $groups=$this->nice_names($info[0]["memberof"]); //presuming the entry returned is our contact
+
+ if ($recursive === true){
+ foreach ($groups as $id => $group_name){
+ $extra_groups=$this->recursive_groups($group_name);
+ $groups=array_merge($groups,$extra_groups);
+ }
+ }
+
+ return ($groups);
+ }
+
+ /**
+ * Get contact information
+ *
+ * @param string $distinguisedname The full DN of a contact
+ * @param array $fields Attributes to be returned
+ * @return array
+ */
+ public function contact_info($distinguishedname,$fields=NULL){
+ if ($distinguishedname===NULL){ return (false); }
+ if (!$this->_bind){ return (false); }
+
+ $filter="distinguishedName=".$distinguishedname;
+ if ($fields===NULL){ $fields=array("distinguishedname","mail","memberof","department","displayname","telephonenumber","primarygroupid","objectsid"); }
+ $sr=ldap_search($this->_conn,$this->_base_dn,$filter,$fields);
+ $entries = ldap_get_entries($this->_conn, $sr);
+
+ if ($entries[0]['count'] >= 1) {
+ // AD does not return the primary group in the ldap query, we may need to fudge it
+ if ($this->_real_primarygroup && isset($entries[0]["primarygroupid"][0]) && isset($entries[0]["primarygroupid"][0])){
+ //$entries[0]["memberof"][]=$this->group_cn($entries[0]["primarygroupid"][0]);
+ $entries[0]["memberof"][]=$this->get_primary_group($entries[0]["primarygroupid"][0], $entries[0]["objectsid"][0]);
+ } else {
+ $entries[0]["memberof"][]="CN=Domain Users,CN=Users,".$this->_base_dn;
+ }
+ }
+
+ $entries[0]["memberof"]["count"]++;
+ return ($entries);
+ }
+
+ /**
+ * Determine if a contact is a member of a group
+ *
+ * @param string $distinguisedname The full DN of a contact
+ * @param string $group The group name to query
+ * @param bool $recursive Recursively check groups
+ * @return bool
+ */
+ public function contact_ingroup($distinguisedname,$group,$recursive=NULL){
+ if ($distinguisedname===NULL){ return (false); }
+ if ($group===NULL){ return (false); }
+ if (!$this->_bind){ return (false); }
+ if ($recursive===NULL){ $recursive=$this->_recursive_groups; } //use the default option if they haven't set it
+
+ // Get a list of the groups
+ $groups=$this->contact_groups($distinguisedname,array("memberof"),$recursive);
+
+ // Return true if the specified group is in the group list
+ if (in_array($group,$groups)){ return (true); }
+
+ return (false);
+ }
+
+ /**
+ * Modify a contact
+ *
+ * @param string $distinguishedname The contact to query
+ * @param array $attributes The attributes to modify. Note if you set the enabled attribute you must not specify any other attributes
+ * @return bool
+ */
+ public function contact_modify($distinguishedname,$attributes){
+ if ($distinguishedname===NULL){ return ("Missing compulsory field [distinguishedname]"); }
+
+ // Translate the update to the LDAP schema
+ $mod=$this->adldap_schema($attributes);
+
+ // Check to see if this is an enabled status update
+ if (!$mod){ return (false); }
+
+ // Do the update
+ $result=ldap_modify($this->_conn,$distinguishedname,$mod);
+ if ($result==false){ return (false); }
+
+ return (true);
+ }
+
+ /**
+ * Delete a contact
+ *
+ * @param string $distinguishedname The contact dn to delete (please be careful here!)
+ * @return array
+ */
+ public function contact_delete($distinguishedname) {
+ $result = $this->dn_delete($distinguishedname);
+ if ($result!=true){ return (false); }
+ return (true);
+ }
+
+ /**
+ * Return a list of all contacts
+ *
+ * @param bool $include_desc Include a description of a contact
+ * @param string $search The search parameters
+ * @param bool $sorted Whether to sort the results
+ * @return array
+ */
+ public function all_contacts($include_desc = false, $search = "*", $sorted = true){
+ if (!$this->_bind){ return (false); }
+
+ // Perform the search and grab all their details
+ $filter = "(&(objectClass=contact)(cn=".$search."))";
+ $fields=array("displayname","distinguishedname");
+ $sr=ldap_search($this->_conn,$this->_base_dn,$filter,$fields);
+ $entries = ldap_get_entries($this->_conn, $sr);
+
+ $users_array = array();
+ for ($i=0; $i<$entries["count"]; $i++){
+ if ($include_desc && strlen($entries[$i]["displayname"][0])>0){
+ $users_array[ $entries[$i]["distinguishedname"][0] ] = $entries[$i]["displayname"][0];
+ } elseif ($include_desc){
+ $users_array[ $entries[$i]["distinguishedname"][0] ] = $entries[$i]["distinguishedname"][0];
+ } else {
+ array_push($users_array, $entries[$i]["distinguishedname"][0]);
+ }
+ }
+ if ($sorted){ asort($users_array); }
+ return ($users_array);
+ }
+
+ //*****************************************************************************************************************
+ // FOLDER FUNCTIONS
+
+ /**
+ * Returns a folder listing for a specific OU
+ * See http://adldap.sourceforge.net/wiki/doku.php?id=api_folder_functions
+ *
+ * @param array $folder_name An array to the OU you wish to list.
+ * If set to NULL will list the root, strongly recommended to set
+ * $recursive to false in that instance!
+ * @param string $dn_type The type of record to list. This can be ADLDAP_FOLDER or ADLDAP_CONTAINER.
+ * @param bool $recursive Recursively search sub folders
+ * @param bool $type Specify a type of object to search for
+ * @return array
+ */
+ public function folder_list($folder_name = NULL, $dn_type = ADLDAP_FOLDER, $recursive = NULL, $type = NULL) {
+ if ($recursive===NULL){ $recursive=$this->_recursive_groups; } //use the default option if they haven't set it
+ if (!$this->_bind){ return (false); }
+
+ $filter = '(&';
+ if ($type !== NULL) {
+ switch ($type) {
+ case 'contact':
+ $filter .= '(objectClass=contact)';
+ break;
+ case 'computer':
+ $filter .= '(objectClass=computer)';
+ break;
+ case 'group':
+ $filter .= '(objectClass=group)';
+ break;
+ case 'folder':
+ $filter .= '(objectClass=organizationalUnit)';
+ break;
+ case 'container':
+ $filter .= '(objectClass=container)';
+ break;
+ case 'domain':
+ $filter .= '(objectClass=builtinDomain)';
+ break;
+ default:
+ $filter .= '(objectClass=user)';
+ break;
+ }
+ }
+ else {
+ $filter .= '(objectClass=*)';
+ }
+ // If the folder name is null then we will search the root level of AD
+ // This requires us to not have an OU= part, just the base_dn
+ $searchou = $this->_base_dn;
+ if (is_array($folder_name)) {
+ $ou = $dn_type . "=".implode("," . $dn_type . "=",$folder_name);
+ $filter .= '(!(distinguishedname=' . $ou . ',' . $this->_base_dn . ')))';
+ $searchou = $ou . ',' . $this->_base_dn;
+ }
+ else {
+ $filter .= '(!(distinguishedname=' . $this->_base_dn . ')))';
+ }
+
+ if ($recursive === true) {
+ $sr=ldap_search($this->_conn, $searchou, $filter, array('objectclass', 'distinguishedname', 'samaccountname'));
+ $entries = @ldap_get_entries($this->_conn, $sr);
+ if (is_array($entries)) {
+ return $entries;
+ }
+ }
+ else {
+ $sr=ldap_list($this->_conn, $searchou, $filter, array('objectclass', 'distinguishedname', 'samaccountname'));
+ $entries = @ldap_get_entries($this->_conn, $sr);
+ if (is_array($entries)) {
+ return $entries;
+ }
+ }
+
+ return false;
+ }
+
+ //*****************************************************************************************************************
+ // COMPUTER FUNCTIONS
+
+ /**
+ * Get information about a specific computer
+ *
+ * @param string $computer_name The name of the computer
+ * @param array $fields Attributes to return
+ * @return array
+ */
+ public function computer_info($computer_name,$fields=NULL){
+ if ($computer_name===NULL){ return (false); }
+ if (!$this->_bind){ return (false); }
+
+ $filter="(&(objectClass=computer)(cn=".$computer_name."))";
+ if ($fields===NULL){ $fields=array("memberof","cn","displayname","dnshostname","distinguishedname","objectcategory","operatingsystem","operatingsystemservicepack","operatingsystemversion"); }
+ $sr=ldap_search($this->_conn,$this->_base_dn,$filter,$fields);
+ $entries = ldap_get_entries($this->_conn, $sr);
+
+ return ($entries);
+ }
+
+ /**
+ * Check if a computer is in a group
+ *
+ * @param string $computer_name The name of the computer
+ * @param string $group The group to check
+ * @param bool $recursive Whether to check recursively
+ * @return array
+ */
+ public function computer_ingroup($computer_name,$group,$recursive=NULL){
+ if ($computer_name===NULL){ return (false); }
+ if ($group===NULL){ return (false); }
+ if (!$this->_bind){ return (false); }
+ if ($recursive===NULL){ $recursive=$this->_recursive_groups; } // use the default option if they haven't set it
+
+ //get a list of the groups
+ $groups=$this->computer_groups($computer_name,array("memberof"),$recursive);
+
+ //return true if the specified group is in the group list
+ if (in_array($group,$groups)){ return (true); }
+
+ return (false);
+ }
+
+ /**
+ * Get the groups a computer is in
+ *
+ * @param string $computer_name The name of the computer
+ * @param bool $recursive Whether to check recursively
+ * @return array
+ */
+ public function computer_groups($computer_name,$recursive=NULL){
+ if ($computer_name===NULL){ return (false); }
+ if ($recursive===NULL){ $recursive=$this->_recursive_groups; } //use the default option if they haven't set it
+ if (!$this->_bind){ return (false); }
+
+ //search the directory for their information
+ $info=@$this->computer_info($computer_name,array("memberof","primarygroupid"));
+ $groups=$this->nice_names($info[0]["memberof"]); //presuming the entry returned is our guy (unique usernames)
+
+ if ($recursive === true){
+ foreach ($groups as $id => $group_name){
+ $extra_groups=$this->recursive_groups($group_name);
+ $groups=array_merge($groups,$extra_groups);
+ }
+ }
+
+ return ($groups);
+ }
+
+ //************************************************************************************************************
+ // EXCHANGE FUNCTIONS
+
+ /**
+ * Create an Exchange account
+ *
+ * @param string $username The username of the user to add the Exchange account to
+ * @param array $storagegroup The mailbox, Exchange Storage Group, for the user account, this must be a full CN
+ * If the storage group has a different base_dn to the adLDAP configuration, set it using $base_dn
+ * @param string $emailaddress The primary email address to add to this user
+ * @param string $mailnickname The mail nick name. If mail nickname is blank, the username will be used
+ * @param bool $usedefaults Indicates whether the store should use the default quota, rather than the per-mailbox quota.
+ * @param string $base_dn Specify an alternative base_dn for the Exchange storage group
+ * @param bool $isGUID Is the username passed a GUID or a samAccountName
+ * @return bool
+ */
+ public function exchange_create_mailbox($username, $storagegroup, $emailaddress, $mailnickname=NULL, $usedefaults=TRUE, $base_dn=NULL, $isGUID=false){
+ if ($username===NULL){ return ("Missing compulsory field [username]"); }
+ if ($storagegroup===NULL){ return ("Missing compulsory array [storagegroup]"); }
+ if (!is_array($storagegroup)){ return ("[storagegroup] must be an array"); }
+ if ($emailaddress===NULL){ return ("Missing compulsory field [emailaddress]"); }
+
+ if ($base_dn===NULL) {
+ $base_dn = $this->_base_dn;
+ }
+
+ $container="CN=".implode(",CN=",$storagegroup);
+
+ if ($mailnickname===NULL) { $mailnickname=$username; }
+ $mdbUseDefaults = $this->bool2str($usedefaults);
+
+ $attributes = array(
+ 'exchange_homemdb'=>$container.",".$base_dn,
+ 'exchange_proxyaddress'=>'SMTP:' . $emailaddress,
+ 'exchange_mailnickname'=>$mailnickname,
+ 'exchange_usedefaults'=>$mdbUseDefaults
+ );
+ $result = $this->user_modify($username,$attributes,$isGUID);
+ if ($result==false){ return (false); }
+ return (true);
+ }
+
+ /**
+ * Add an X400 address to Exchange
+ * See http://tools.ietf.org/html/rfc1685 for more information.
+ * An X400 Address looks similar to this X400:c=US;a= ;p=Domain;o=Organization;s=Doe;g=John;
+ *
+ * @param string $username The username of the user to add the X400 to to
+ * @param string $country Country
+ * @param string $admd Administration Management Domain
+ * @param string $pdmd Private Management Domain (often your AD domain)
+ * @param string $org Organization
+ * @param string $surname Surname
+ * @param string $givenName Given name
+ * @param bool $isGUID Is the username passed a GUID or a samAccountName
+ * @return bool
+ */
+ public function exchange_add_X400($username, $country, $admd, $pdmd, $org, $surname, $givenname, $isGUID=false) {
+ if ($username===NULL){ return ("Missing compulsory field [username]"); }
+
+ $proxyvalue = 'X400:';
+
+ // Find the dn of the user
+ $user=$this->user_info($username,array("cn","proxyaddresses"), $isGUID);
+ if ($user[0]["dn"]===NULL){ return (false); }
+ $user_dn=$user[0]["dn"];
+
+ // We do not have to demote an email address from the default so we can just add the new proxy address
+ $attributes['exchange_proxyaddress'] = $proxyvalue . 'c=' . $country . ';a=' . $admd . ';p=' . $pdmd . ';o=' . $org . ';s=' . $surname . ';g=' . $givenname . ';';
+
+ // Translate the update to the LDAP schema
+ $add=$this->adldap_schema($attributes);
+
+ if (!$add){ return (false); }
+
+ // Do the update
+ // Take out the @ to see any errors, usually this error might occur because the address already
+ // exists in the list of proxyAddresses
+ $result=@ldap_mod_add($this->_conn,$user_dn,$add);
+ if ($result==false){ return (false); }
+
+ return (true);
+ }
+
+ /**
+ * Add an address to Exchange
+ *
+ * @param string $username The username of the user to add the Exchange account to
+ * @param string $emailaddress The email address to add to this user
+ * @param bool $default Make this email address the default address, this is a bit more intensive as we have to demote any existing default addresses
+ * @param bool $isGUID Is the username passed a GUID or a samAccountName
+ * @return bool
+ */
+ public function exchange_add_address($username, $emailaddress, $default=FALSE, $isGUID=false) {
+ if ($username===NULL){ return ("Missing compulsory field [username]"); }
+ if ($emailaddress===NULL) { return ("Missing compulsory fields [emailaddress]"); }
+
+ $proxyvalue = 'smtp:';
+ if ($default === true) {
+ $proxyvalue = 'SMTP:';
+ }
+
+ // Find the dn of the user
+ $user=$this->user_info($username,array("cn","proxyaddresses"),$isGUID);
+ if ($user[0]["dn"]===NULL){ return (false); }
+ $user_dn=$user[0]["dn"];
+
+ // We need to scan existing proxy addresses and demote the default one
+ if (is_array($user[0]["proxyaddresses"]) && $default===true) {
+ $modaddresses = array();
+ for ($i=0;$i<sizeof($user[0]['proxyaddresses']);$i++) {
+ if (strstr($user[0]['proxyaddresses'][$i], 'SMTP:') !== false) {
+ $user[0]['proxyaddresses'][$i] = str_replace('SMTP:', 'smtp:', $user[0]['proxyaddresses'][$i]);
+ }
+ if ($user[0]['proxyaddresses'][$i] != '') {
+ $modaddresses['proxyAddresses'][$i] = $user[0]['proxyaddresses'][$i];
+ }
+ }
+ $modaddresses['proxyAddresses'][(sizeof($user[0]['proxyaddresses'])-1)] = 'SMTP:' . $emailaddress;
+
+ $result=@ldap_mod_replace($this->_conn,$user_dn,$modaddresses);
+ if ($result==false){ return (false); }
+
+ return (true);
+ }
+ else {
+ // We do not have to demote an email address from the default so we can just add the new proxy address
+ $attributes['exchange_proxyaddress'] = $proxyvalue . $emailaddress;
+
+ // Translate the update to the LDAP schema
+ $add=$this->adldap_schema($attributes);
+
+ if (!$add){ return (false); }
+
+ // Do the update
+ // Take out the @ to see any errors, usually this error might occur because the address already
+ // exists in the list of proxyAddresses
+ $result=@ldap_mod_add($this->_conn,$user_dn,$add);
+ if ($result==false){ return (false); }
+
+ return (true);
+ }
+ }
+
+ /**
+ * Remove an address to Exchange
+ * If you remove a default address the account will no longer have a default,
+ * we recommend changing the default address first
+ *
+ * @param string $username The username of the user to add the Exchange account to
+ * @param string $emailaddress The email address to add to this user
+ * @param bool $isGUID Is the username passed a GUID or a samAccountName
+ * @return bool
+ */
+ public function exchange_del_address($username, $emailaddress, $isGUID=false) {
+ if ($username===NULL){ return ("Missing compulsory field [username]"); }
+ if ($emailaddress===NULL) { return ("Missing compulsory fields [emailaddress]"); }
+
+ // Find the dn of the user
+ $user=$this->user_info($username,array("cn","proxyaddresses"),$isGUID);
+ if ($user[0]["dn"]===NULL){ return (false); }
+ $user_dn=$user[0]["dn"];
+
+ if (is_array($user[0]["proxyaddresses"])) {
+ $mod = array();
+ for ($i=0;$i<sizeof($user[0]['proxyaddresses']);$i++) {
+ if (strstr($user[0]['proxyaddresses'][$i], 'SMTP:') !== false && $user[0]['proxyaddresses'][$i] == 'SMTP:' . $emailaddress) {
+ $mod['proxyAddresses'][0] = 'SMTP:' . $emailaddress;
+ }
+ elseif (strstr($user[0]['proxyaddresses'][$i], 'smtp:') !== false && $user[0]['proxyaddresses'][$i] == 'smtp:' . $emailaddress) {
+ $mod['proxyAddresses'][0] = 'smtp:' . $emailaddress;
+ }
+ }
+
+ $result=@ldap_mod_del($this->_conn,$user_dn,$mod);
+ if ($result==false){ return (false); }
+
+ return (true);
+ }
+ else {
+ return (false);
+ }
+ }
+ /**
+ * Change the default address
+ *
+ * @param string $username The username of the user to add the Exchange account to
+ * @param string $emailaddress The email address to make default
+ * @param bool $isGUID Is the username passed a GUID or a samAccountName
+ * @return bool
+ */
+ public function exchange_primary_address($username, $emailaddress, $isGUID=false) {
+ if ($username===NULL){ return ("Missing compulsory field [username]"); }
+ if ($emailaddress===NULL) { return ("Missing compulsory fields [emailaddress]"); }
+
+ // Find the dn of the user
+ $user=$this->user_info($username,array("cn","proxyaddresses"), $isGUID);
+ if ($user[0]["dn"]===NULL){ return (false); }
+ $user_dn=$user[0]["dn"];
+
+ if (is_array($user[0]["proxyaddresses"])) {
+ $modaddresses = array();
+ for ($i=0;$i<sizeof($user[0]['proxyaddresses']);$i++) {
+ if (strstr($user[0]['proxyaddresses'][$i], 'SMTP:') !== false) {
+ $user[0]['proxyaddresses'][$i] = str_replace('SMTP:', 'smtp:', $user[0]['proxyaddresses'][$i]);
+ }
+ if ($user[0]['proxyaddresses'][$i] == 'smtp:' . $emailaddress) {
+ $user[0]['proxyaddresses'][$i] = str_replace('smtp:', 'SMTP:', $user[0]['proxyaddresses'][$i]);
+ }
+ if ($user[0]['proxyaddresses'][$i] != '') {
+ $modaddresses['proxyAddresses'][$i] = $user[0]['proxyaddresses'][$i];
+ }
+ }
+
+ $result=@ldap_mod_replace($this->_conn,$user_dn,$modaddresses);
+ if ($result==false){ return (false); }
+
+ return (true);
+ }
+
+ }
+
+ /**
+ * Mail enable a contact
+ * Allows email to be sent to them through Exchange
+ *
+ * @param string $distinguishedname The contact to mail enable
+ * @param string $emailaddress The email address to allow emails to be sent through
+ * @param string $mailnickname The mailnickname for the contact in Exchange. If NULL this will be set to the display name
+ * @return bool
+ */
+ public function exchange_contact_mailenable($distinguishedname, $emailaddress, $mailnickname=NULL){
+ if ($distinguishedname===NULL){ return ("Missing compulsory field [distinguishedname]"); }
+ if ($emailaddress===NULL){ return ("Missing compulsory field [emailaddress]"); }
+
+ if ($mailnickname !== NULL) {
+ // Find the dn of the user
+ $user=$this->contact_info($distinguishedname,array("cn","displayname"));
+ if ($user[0]["displayname"]===NULL){ return (false); }
+ $mailnickname = $user[0]['displayname'][0];
+ }
+
+ $attributes = array("email"=>$emailaddress,"contact_email"=>"SMTP:" . $emailaddress,"exchange_proxyaddress"=>"SMTP:" . $emailaddress,"exchange_mailnickname"=>$mailnickname);
+
+ // Translate the update to the LDAP schema
+ $mod=$this->adldap_schema($attributes);
+
+ // Check to see if this is an enabled status update
+ if (!$mod){ return (false); }
+
+ // Do the update
+ $result=ldap_modify($this->_conn,$distinguishedname,$mod);
+ if ($result==false){ return (false); }
+
+ return (true);
+ }
+
+ /**
+ * Returns a list of Exchange Servers in the ConfigurationNamingContext of the domain
+ *
+ * @param array $attributes An array of the AD attributes you wish to return
+ * @return array
+ */
+ public function exchange_servers($attributes = array('cn','distinguishedname','serialnumber')) {
+ if (!$this->_bind){ return (false); }
+
+ $configurationNamingContext = $this->get_root_dse(array('configurationnamingcontext'));
+ $sr = @ldap_search($this->_conn,$configurationNamingContext[0]['configurationnamingcontext'][0],'(&(objectCategory=msExchExchangeServer))',$attributes);
+ $entries = @ldap_get_entries($this->_conn, $sr);
+ return $entries;
+ }
+
+ /**
+ * Returns a list of Storage Groups in Exchange for a given mail server
+ *
+ * @param string $exchangeServer The full DN of an Exchange server. You can use exchange_servers() to find the DN for your server
+ * @param array $attributes An array of the AD attributes you wish to return
+ * @param bool $recursive If enabled this will automatically query the databases within a storage group
+ * @return array
+ */
+ public function exchange_storage_groups($exchangeServer, $attributes = array('cn','distinguishedname'), $recursive = NULL) {
+ if (!$this->_bind){ return (false); }
+ if ($exchangeServer===NULL){ return ("Missing compulsory field [exchangeServer]"); }
+ if ($recursive===NULL){ $recursive=$this->_recursive_groups; }
+
+ $filter = '(&(objectCategory=msExchStorageGroup))';
+ $sr=@ldap_search($this->_conn, $exchangeServer, $filter, $attributes);
+ $entries = @ldap_get_entries($this->_conn, $sr);
+
+ if ($recursive === true) {
+ for ($i=0; $i<$entries['count']; $i++) {
+ $entries[$i]['msexchprivatemdb'] = $this->exchange_storage_databases($entries[$i]['distinguishedname'][0]);
+ }
+ }
+
+ return $entries;
+ }
+
+ /**
+ * Returns a list of Databases within any given storage group in Exchange for a given mail server
+ *
+ * @param string $storageGroup The full DN of an Storage Group. You can use exchange_storage_groups() to find the DN
+ * @param array $attributes An array of the AD attributes you wish to return
+ * @return array
+ */
+ public function exchange_storage_databases($storageGroup, $attributes = array('cn','distinguishedname','displayname')) {
+ if (!$this->_bind){ return (false); }
+ if ($storageGroup===NULL){ return ("Missing compulsory field [storageGroup]"); }
+
+ $filter = '(&(objectCategory=msExchPrivateMDB))';
+ $sr=@ldap_search($this->_conn, $storageGroup, $filter, $attributes);
+ $entries = @ldap_get_entries($this->_conn, $sr);
+ return $entries;
+ }
+
+ //************************************************************************************************************
+ // SERVER FUNCTIONS
+
+ /**
+ * Find the Base DN of your domain controller
+ *
+ * @return string
+ */
+ public function find_base_dn() {
+ $namingContext = $this->get_root_dse(array('defaultnamingcontext'));
+ return $namingContext[0]['defaultnamingcontext'][0];
+ }
+
+ /**
+ * Get the RootDSE properties from a domain controller
+ *
+ * @param array $attributes The attributes you wish to query e.g. defaultnamingcontext
+ * @return array
+ */
+ public function get_root_dse($attributes = array("*", "+")) {
+ if (!$this->_bind){ return (false); }
+
+ $sr = @ldap_read($this->_conn, NULL, 'objectClass=*', $attributes);
+ $entries = @ldap_get_entries($this->_conn, $sr);
+ return $entries;
+ }
+
+ //************************************************************************************************************
+ // UTILITY FUNCTIONS (Many of these functions are protected and can only be called from within the class)
+
+ /**
+ * Get last error from Active Directory
+ *
+ * This function gets the last message from Active Directory
+ * This may indeed be a 'Success' message but if you get an unknown error
+ * it might be worth calling this function to see what errors were raised
+ *
+ * return string
+ */
+ public function get_last_error() {
+ return @ldap_error($this->_conn);
+ }
+
+ /**
+ * Detect LDAP support in php
+ *
+ * @return bool
+ */
+ protected function ldap_supported() {
+ if (!function_exists('ldap_connect')) {
+ return (false);
+ }
+ return (true);
+ }
+
+ /**
+ * Schema
+ *
+ * @param array $attributes Attributes to be queried
+ * @return array
+ */
+ protected function adldap_schema($attributes){
+
+ // LDAP doesn't like NULL attributes, only set them if they have values
+ // If you wish to remove an attribute you should set it to a space
+ // TO DO: Adapt user_modify to use ldap_mod_delete to remove a NULL attribute
+ $mod=array();
+
+ // Check every attribute to see if it contains 8bit characters and then UTF8 encode them
+ array_walk($attributes, array($this, 'encode8bit'));
+
+ if ($attributes["address_city"]){ $mod["l"][0]=$attributes["address_city"]; }
+ if ($attributes["address_code"]){ $mod["postalCode"][0]=$attributes["address_code"]; }
+ //if ($attributes["address_country"]){ $mod["countryCode"][0]=$attributes["address_country"]; } // use country codes?
+ if ($attributes["address_country"]){ $mod["c"][0]=$attributes["address_country"]; }
+ if ($attributes["address_pobox"]){ $mod["postOfficeBox"][0]=$attributes["address_pobox"]; }
+ if ($attributes["address_state"]){ $mod["st"][0]=$attributes["address_state"]; }
+ if ($attributes["address_street"]){ $mod["streetAddress"][0]=$attributes["address_street"]; }
+ if ($attributes["company"]){ $mod["company"][0]=$attributes["company"]; }
+ if ($attributes["change_password"]){ $mod["pwdLastSet"][0]=0; }
+ if ($attributes["department"]){ $mod["department"][0]=$attributes["department"]; }
+ if ($attributes["description"]){ $mod["description"][0]=$attributes["description"]; }
+ if ($attributes["display_name"]){ $mod["displayName"][0]=$attributes["display_name"]; }
+ if ($attributes["email"]){ $mod["mail"][0]=$attributes["email"]; }
+ if ($attributes["expires"]){ $mod["accountExpires"][0]=$attributes["expires"]; } //unix epoch format?
+ if ($attributes["firstname"]){ $mod["givenName"][0]=$attributes["firstname"]; }
+ if ($attributes["home_directory"]){ $mod["homeDirectory"][0]=$attributes["home_directory"]; }
+ if ($attributes["home_drive"]){ $mod["homeDrive"][0]=$attributes["home_drive"]; }
+ if ($attributes["initials"]){ $mod["initials"][0]=$attributes["initials"]; }
+ if ($attributes["logon_name"]){ $mod["userPrincipalName"][0]=$attributes["logon_name"]; }
+ if ($attributes["manager"]){ $mod["manager"][0]=$attributes["manager"]; } //UNTESTED ***Use DistinguishedName***
+ if ($attributes["office"]){ $mod["physicalDeliveryOfficeName"][0]=$attributes["office"]; }
+ if ($attributes["password"]){ $mod["unicodePwd"][0]=$this->encode_password($attributes["password"]); }
+ if ($attributes["profile_path"]){ $mod["profilepath"][0]=$attributes["profile_path"]; }
+ if ($attributes["script_path"]){ $mod["scriptPath"][0]=$attributes["script_path"]; }
+ if ($attributes["surname"]){ $mod["sn"][0]=$attributes["surname"]; }
+ if ($attributes["title"]){ $mod["title"][0]=$attributes["title"]; }
+ if ($attributes["telephone"]){ $mod["telephoneNumber"][0]=$attributes["telephone"]; }
+ if ($attributes["mobile"]){ $mod["mobile"][0]=$attributes["mobile"]; }
+ if ($attributes["pager"]){ $mod["pager"][0]=$attributes["pager"]; }
+ if ($attributes["ipphone"]){ $mod["ipphone"][0]=$attributes["ipphone"]; }
+ if ($attributes["web_page"]){ $mod["wWWHomePage"][0]=$attributes["web_page"]; }
+ if ($attributes["fax"]){ $mod["facsimileTelephoneNumber"][0]=$attributes["fax"]; }
+ if ($attributes["enabled"]){ $mod["userAccountControl"][0]=$attributes["enabled"]; }
+
+ // Distribution List specific schema
+ if ($attributes["group_sendpermission"]){ $mod["dlMemSubmitPerms"][0]=$attributes["group_sendpermission"]; }
+ if ($attributes["group_rejectpermission"]){ $mod["dlMemRejectPerms"][0]=$attributes["group_rejectpermission"]; }
+
+ // Exchange Schema
+ if ($attributes["exchange_homemdb"]){ $mod["homeMDB"][0]=$attributes["exchange_homemdb"]; }
+ if ($attributes["exchange_mailnickname"]){ $mod["mailNickname"][0]=$attributes["exchange_mailnickname"]; }
+ if ($attributes["exchange_proxyaddress"]){ $mod["proxyAddresses"][0]=$attributes["exchange_proxyaddress"]; }
+ if ($attributes["exchange_usedefaults"]){ $mod["mDBUseDefaults"][0]=$attributes["exchange_usedefaults"]; }
+ if ($attributes["exchange_policyexclude"]){ $mod["msExchPoliciesExcluded"][0]=$attributes["exchange_policyexclude"]; }
+ if ($attributes["exchange_policyinclude"]){ $mod["msExchPoliciesIncluded"][0]=$attributes["exchange_policyinclude"]; }
+
+ // This schema is designed for contacts
+ if ($attributes["exchange_hidefromlists"]){ $mod["msExchHideFromAddressLists"][0]=$attributes["exchange_hidefromlists"]; }
+ if ($attributes["contact_email"]){ $mod["targetAddress"][0]=$attributes["contact_email"]; }
+
+ //echo ("<pre>"); print_r($mod);
+ /*
+ // modifying a name is a bit fiddly
+ if ($attributes["firstname"] && $attributes["surname"]){
+ $mod["cn"][0]=$attributes["firstname"]." ".$attributes["surname"];
+ $mod["displayname"][0]=$attributes["firstname"]." ".$attributes["surname"];
+ $mod["name"][0]=$attributes["firstname"]." ".$attributes["surname"];
+ }
+ */
+
+ if (count($mod)==0){ return (false); }
+ return ($mod);
+ }
+
+ /**
+ * Coping with AD not returning the primary group
+ * http://support.microsoft.com/?kbid=321360
+ *
+ * For some reason it's not possible to search on primarygrouptoken=XXX
+ * If someone can show otherwise, I'd like to know about it :)
+ * this way is resource intensive and generally a pain in the @#%^
+ *
+ * @deprecated deprecated since version 3.1, see get get_primary_group
+ * @param string $gid Group ID
+ * @return string
+ */
+ protected function group_cn($gid){
+ if ($gid===NULL){ return (false); }
+ $r=false;
+
+ $filter="(&(objectCategory=group)(samaccounttype=". ADLDAP_SECURITY_GLOBAL_GROUP ."))";
+ $fields=array("primarygrouptoken","samaccountname","distinguishedname");
+ $sr=ldap_search($this->_conn,$this->_base_dn,$filter,$fields);
+ $entries = ldap_get_entries($this->_conn, $sr);
+
+ for ($i=0; $i<$entries["count"]; $i++){
+ if ($entries[$i]["primarygrouptoken"][0]==$gid){
+ $r=$entries[$i]["distinguishedname"][0];
+ $i=$entries["count"];
+ }
+ }
+
+ return ($r);
+ }
+
+ /**
+ * Coping with AD not returning the primary group
+ * http://support.microsoft.com/?kbid=321360
+ *
+ * This is a re-write based on code submitted by Bruce which prevents the
+ * need to search each security group to find the true primary group
+ *
+ * @param string $gid Group ID
+ * @param string $usersid User's Object SID
+ * @return string
+ */
+ protected function get_primary_group($gid, $usersid){
+ if ($gid===NULL || $usersid===NULL){ return (false); }
+ $r=false;
+
+ $gsid = substr_replace($usersid,pack('V',$gid),strlen($usersid)-4,4);
+ $filter='(objectsid='.$this->getTextSID($gsid).')';
+ $fields=array("samaccountname","distinguishedname");
+ $sr=ldap_search($this->_conn,$this->_base_dn,$filter,$fields);
+ $entries = ldap_get_entries($this->_conn, $sr);
+
+ return $entries[0]['distinguishedname'][0];
+ }
+
+ /**
+ * Convert a binary SID to a text SID
+ *
+ * @param string $binsid A Binary SID
+ * @return string
+ */
+ protected function getTextSID($binsid) {
+ $hex_sid = bin2hex($binsid);
+ $rev = hexdec(substr($hex_sid, 0, 2));
+ $subcount = hexdec(substr($hex_sid, 2, 2));
+ $auth = hexdec(substr($hex_sid, 4, 12));
+ $result = "$rev-$auth";
+
+ for ($x=0;$x < $subcount; $x++) {
+ $subauth[$x] =
+ hexdec($this->little_endian(substr($hex_sid, 16 + ($x * 8), 8)));
+ $result .= "-" . $subauth[$x];
+ }
+
+ // Cheat by tacking on the S-
+ return 'S-' . $result;
+ }
+
+ /**
+ * Converts a little-endian hex number to one that hexdec() can convert
+ *
+ * @param string $hex A hex code
+ * @return string
+ */
+ protected function little_endian($hex) {
+ $result = '';
+ for ($x = strlen($hex) - 2; $x >= 0; $x = $x - 2) {
+ $result .= substr($hex, $x, 2);
+ }
+ return $result;
+ }
+
+ /**
+ * Converts a binary attribute to a string
+ *
+ * @param string $bin A binary LDAP attribute
+ * @return string
+ */
+ protected function binary2text($bin) {
+ $hex_guid = bin2hex($bin);
+ $hex_guid_to_guid_str = '';
+ for($k = 1; $k <= 4; ++$k) {
+ $hex_guid_to_guid_str .= substr($hex_guid, 8 - 2 * $k, 2);
+ }
+ $hex_guid_to_guid_str .= '-';
+ for($k = 1; $k <= 2; ++$k) {
+ $hex_guid_to_guid_str .= substr($hex_guid, 12 - 2 * $k, 2);
+ }
+ $hex_guid_to_guid_str .= '-';
+ for($k = 1; $k <= 2; ++$k) {
+ $hex_guid_to_guid_str .= substr($hex_guid, 16 - 2 * $k, 2);
+ }
+ $hex_guid_to_guid_str .= '-' . substr($hex_guid, 16, 4);
+ $hex_guid_to_guid_str .= '-' . substr($hex_guid, 20);
+ return strtoupper($hex_guid_to_guid_str);
+ }
+
+ /**
+ * Converts a binary GUID to a string GUID
+ *
+ * @param string $binaryGuid The binary GUID attribute to convert
+ * @return string
+ */
+ public function decodeGuid($binaryGuid) {
+ if ($binaryGuid === null){ return ("Missing compulsory field [binaryGuid]"); }
+
+ $strGUID = $this->binary2text($binaryGuid);
+ return ($strGUID);
+ }
+
+ /**
+ * Converts a string GUID to a hexdecimal value so it can be queried
+ *
+ * @param string $strGUID A string representation of a GUID
+ * @return string
+ */
+ protected function strguid2hex($strGUID) {
+ $strGUID = str_replace('-', '', $strGUID);
+
+ $octet_str = '\\' . substr($strGUID, 6, 2);
+ $octet_str .= '\\' . substr($strGUID, 4, 2);
+ $octet_str .= '\\' . substr($strGUID, 2, 2);
+ $octet_str .= '\\' . substr($strGUID, 0, 2);
+ $octet_str .= '\\' . substr($strGUID, 10, 2);
+ $octet_str .= '\\' . substr($strGUID, 8, 2);
+ $octet_str .= '\\' . substr($strGUID, 14, 2);
+ $octet_str .= '\\' . substr($strGUID, 12, 2);
+ //$octet_str .= '\\' . substr($strGUID, 16, strlen($strGUID));
+ for ($i=16; $i<=(strlen($strGUID)-2); $i++) {
+ if (($i % 2) == 0) {
+ $octet_str .= '\\' . substr($strGUID, $i, 2);
+ }
+ }
+
+ return $octet_str;
+ }
+
+ /**
+ * Obtain the user's distinguished name based on their userid
+ *
+ *
+ * @param string $username The username
+ * @param bool $isGUID Is the username passed a GUID or a samAccountName
+ * @return string
+ */
+ protected function user_dn($username,$isGUID=false){
+ $user=$this->user_info($username,array("cn"),$isGUID);
+ if ($user[0]["dn"]===NULL){ return (false); }
+ $user_dn=$user[0]["dn"];
+ return ($user_dn);
+ }
+
+ /**
+ * Encode a password for transmission over LDAP
+ *
+ * @param string $password The password to encode
+ * @return string
+ */
+ protected function encode_password($password){
+ $password="\"".$password."\"";
+ $encoded="";
+ for ($i=0; $i <strlen($password); $i++){ $encoded.="{$password{$i}}\000"; }
+ return ($encoded);
+ }
+
+ /**
+ * Escape strings for the use in LDAP filters
+ *
+ * DEVELOPERS SHOULD BE DOING PROPER FILTERING IF THEY'RE ACCEPTING USER INPUT
+ * Ported from Perl's Net::LDAP::Util escape_filter_value
+ *
+ * @param string $str The string the parse
+ * @author Port by Andreas Gohr <andi@splitbrain.org>
+ * @return string
+ */
+ protected function ldap_slashes($str){
+ return preg_replace('/([\x00-\x1F\*\(\)\\\\])/e',
+ '"\\\\\".join("",unpack("H2","$1"))',
+ $str);
+ }
+
+ /**
+ * Select a random domain controller from your domain controller array
+ *
+ * @return string
+ */
+ protected function random_controller(){
+ mt_srand(doubleval(microtime()) * 100000000); // For older PHP versions
+ return ($this->_domain_controllers[array_rand($this->_domain_controllers)]);
+ }
+
+ /**
+ * Account control options
+ *
+ * @param array $options The options to convert to int
+ * @return int
+ */
+ protected function account_control($options){
+ $val=0;
+
+ if (is_array($options)){
+ if (in_array("SCRIPT",$options)){ $val=$val+1; }
+ if (in_array("ACCOUNTDISABLE",$options)){ $val=$val+2; }
+ if (in_array("HOMEDIR_REQUIRED",$options)){ $val=$val+8; }
+ if (in_array("LOCKOUT",$options)){ $val=$val+16; }
+ if (in_array("PASSWD_NOTREQD",$options)){ $val=$val+32; }
+ //PASSWD_CANT_CHANGE Note You cannot assign this permission by directly modifying the UserAccountControl attribute.
+ //For information about how to set the permission programmatically, see the "Property flag descriptions" section.
+ if (in_array("ENCRYPTED_TEXT_PWD_ALLOWED",$options)){ $val=$val+128; }
+ if (in_array("TEMP_DUPLICATE_ACCOUNT",$options)){ $val=$val+256; }
+ if (in_array("NORMAL_ACCOUNT",$options)){ $val=$val+512; }
+ if (in_array("INTERDOMAIN_TRUST_ACCOUNT",$options)){ $val=$val+2048; }
+ if (in_array("WORKSTATION_TRUST_ACCOUNT",$options)){ $val=$val+4096; }
+ if (in_array("SERVER_TRUST_ACCOUNT",$options)){ $val=$val+8192; }
+ if (in_array("DONT_EXPIRE_PASSWORD",$options)){ $val=$val+65536; }
+ if (in_array("MNS_LOGON_ACCOUNT",$options)){ $val=$val+131072; }
+ if (in_array("SMARTCARD_REQUIRED",$options)){ $val=$val+262144; }
+ if (in_array("TRUSTED_FOR_DELEGATION",$options)){ $val=$val+524288; }
+ if (in_array("NOT_DELEGATED",$options)){ $val=$val+1048576; }
+ if (in_array("USE_DES_KEY_ONLY",$options)){ $val=$val+2097152; }
+ if (in_array("DONT_REQ_PREAUTH",$options)){ $val=$val+4194304; }
+ if (in_array("PASSWORD_EXPIRED",$options)){ $val=$val+8388608; }
+ if (in_array("TRUSTED_TO_AUTH_FOR_DELEGATION",$options)){ $val=$val+16777216; }
+ }
+ return ($val);
+ }
+
+ /**
+ * Take an LDAP query and return the nice names, without all the LDAP prefixes (eg. CN, DN)
+ *
+ * @param array $groups
+ * @return array
+ */
+ protected function nice_names($groups){
+
+ $group_array=array();
+ for ($i=0; $i<$groups["count"]; $i++){ // For each group
+ $line=$groups[$i];
+
+ if (strlen($line)>0){
+ // More presumptions, they're all prefixed with CN=
+ // so we ditch the first three characters and the group
+ // name goes up to the first comma
+ $bits=explode(",",$line);
+ $group_array[]=substr($bits[0],3,(strlen($bits[0])-3));
+ }
+ }
+ return ($group_array);
+ }
+
+ /**
+ * Delete a distinguished name from Active Directory
+ * You should never need to call this yourself, just use the wrapper functions user_delete and contact_delete
+ *
+ * @param string $dn The distinguished name to delete
+ * @return bool
+ */
+ protected function dn_delete($dn){
+ $result=ldap_delete($this->_conn, $dn);
+ if ($result!=true){ return (false); }
+ return (true);
+ }
+
+ /**
+ * Convert a boolean value to a string
+ * You should never need to call this yourself
+ *
+ * @param bool $bool Boolean value
+ * @return string
+ */
+ protected function bool2str($bool) {
+ return ($bool) ? 'TRUE' : 'FALSE';
+ }
+
+ /**
+ * Convert 8bit characters e.g. accented characters to UTF8 encoded characters
+ */
+ protected function encode8bit(&$item, $key) {
+ $encode = false;
+ if (is_string($item)) {
+ for ($i=0; $i<strlen($item); $i++) {
+ if (ord($item[$i]) >> 7) {
+ $encode = true;
+ }
+ }
+ }
+ if ($encode === true && $key != 'password') {
+ $item = utf8_encode($item);
+ }
+ }
+}
+
+/**
+* adLDAP Exception Handler
+*
+* Exceptions of this type are thrown on bind failure or when SSL is required but not configured
+* Example:
+* try {
+* $adldap = new adLDAP();
+* }
+* catch (adLDAPException $e) {
+* echo $e;
+* exit();
+* }
+*/
+class adLDAPException extends Exception {}
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/auth.php b/mod/dokuwiki/vendors/dokuwiki/inc/auth.php
new file mode 100644
index 000000000..587e7c4e6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/auth.php
@@ -0,0 +1,1099 @@
+<?php
+/**
+ * Authentication library
+ *
+ * Including this file will automatically try to login
+ * a user by calling auth_login()
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+if(!defined('DOKU_INC')) die('meh.');
+require_once(DOKU_INC.'inc/common.php');
+require_once(DOKU_INC.'inc/io.php');
+
+// some ACL level defines
+define('AUTH_NONE',0);
+define('AUTH_READ',1);
+define('AUTH_EDIT',2);
+define('AUTH_CREATE',4);
+define('AUTH_UPLOAD',8);
+define('AUTH_DELETE',16);
+define('AUTH_ADMIN',255);
+
+global $conf;
+
+if($conf['useacl']){
+ require_once(DOKU_INC.'inc/blowfish.php');
+ require_once(DOKU_INC.'inc/mail.php');
+
+ global $auth;
+
+ // load the the backend auth functions and instantiate the auth object
+ if (@file_exists(DOKU_INC.'inc/auth/'.$conf['authtype'].'.class.php')) {
+ require_once(DOKU_INC.'inc/auth/basic.class.php');
+ require_once(DOKU_INC.'inc/auth/'.$conf['authtype'].'.class.php');
+
+ $auth_class = "auth_".$conf['authtype'];
+ if (class_exists($auth_class)) {
+ $auth = new $auth_class();
+ if ($auth->success == false) {
+ // degrade to unauthenticated user
+ unset($auth);
+ auth_logoff();
+ msg($lang['authtempfail'], -1);
+ }
+ } else {
+ nice_die($lang['authmodfailed']);
+ }
+ } else {
+ nice_die($lang['authmodfailed']);
+ }
+}
+
+// do the login either by cookie or provided credentials
+if($conf['useacl']){
+ if($auth){
+ if (!isset($_REQUEST['u'])) $_REQUEST['u'] = '';
+ if (!isset($_REQUEST['p'])) $_REQUEST['p'] = '';
+ if (!isset($_REQUEST['r'])) $_REQUEST['r'] = '';
+ $_REQUEST['http_credentials'] = false;
+ if (!$conf['rememberme']) $_REQUEST['r'] = false;
+
+ // streamline HTTP auth credentials (IIS/rewrite -> mod_php)
+ if(isset($_SERVER['HTTP_AUTHORIZATION'])){
+ list($_SERVER['PHP_AUTH_USER'],$_SERVER['PHP_AUTH_PW']) =
+ explode(':', base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));
+ }
+
+ // if no credentials were given try to use HTTP auth (for SSO)
+ if(empty($_REQUEST['u']) && empty($_COOKIE[DOKU_COOKIE]) && !empty($_SERVER['PHP_AUTH_USER'])){
+ $_REQUEST['u'] = $_SERVER['PHP_AUTH_USER'];
+ $_REQUEST['p'] = $_SERVER['PHP_AUTH_PW'];
+ $_REQUEST['http_credentials'] = true;
+ }
+
+ // apply cleaning
+ $_REQUEST['u'] = $auth->cleanUser($_REQUEST['u']);
+
+ if(isset($_REQUEST['authtok'])){
+ // when an authentication token is given, trust the session
+ auth_validateToken($_REQUEST['authtok']);
+ }elseif(!is_null($auth) && $auth->canDo('external')){
+ // external trust mechanism in place
+ $auth->trustExternal($_REQUEST['u'],$_REQUEST['p'],$_REQUEST['r']);
+ }else{
+ $evdata = array(
+ 'user' => $_REQUEST['u'],
+ 'password' => $_REQUEST['p'],
+ 'sticky' => $_REQUEST['r'],
+ 'silent' => $_REQUEST['http_credentials'],
+ );
+ $evt = new Doku_Event('AUTH_LOGIN_CHECK',$evdata);
+ if($evt->advise_before()){
+ auth_login($evdata['user'],
+ $evdata['password'],
+ $evdata['sticky'],
+ $evdata['silent']);
+ }
+ }
+ }
+
+ //load ACL into a global array
+ global $AUTH_ACL;
+ if($auth->cando['getACL']) {
+ $AUTH_ACL = $auth->getACL();
+ //support user wildcard
+ if(isset($_SERVER['REMOTE_USER'])){
+ $AUTH_ACL = str_replace('%USER%',$_SERVER['REMOTE_USER'],$AUTH_ACL);
+ $AUTH_ACL = str_replace('@USER@',$_SERVER['REMOTE_USER'],$AUTH_ACL); //legacy
+ }
+ }
+ elseif(is_readable(DOKU_CONF.'acl.auth.php')){
+ $AUTH_ACL = file(DOKU_CONF.'acl.auth.php');
+ //support user wildcard
+ if(isset($_SERVER['REMOTE_USER'])){
+ $AUTH_ACL = str_replace('%USER%',$_SERVER['REMOTE_USER'],$AUTH_ACL);
+ $AUTH_ACL = str_replace('@USER@',$_SERVER['REMOTE_USER'],$AUTH_ACL); //legacy
+ }
+ }else{
+ $AUTH_ACL = array();
+ }
+}
+
+/**
+ * This tries to login the user based on the sent auth credentials
+ *
+ * The authentication works like this: if a username was given
+ * a new login is assumed and user/password are checked. If they
+ * are correct the password is encrypted with blowfish and stored
+ * together with the username in a cookie - the same info is stored
+ * in the session, too. Additonally a browserID is stored in the
+ * session.
+ *
+ * If no username was given the cookie is checked: if the username,
+ * crypted password and browserID match between session and cookie
+ * no further testing is done and the user is accepted
+ *
+ * If a cookie was found but no session info was availabe the
+ * blowfish encrypted password from the cookie is decrypted and
+ * together with username rechecked by calling this function again.
+ *
+ * On a successful login $_SERVER[REMOTE_USER] and $USERINFO
+ * are set.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ *
+ * @param string $user Username
+ * @param string $pass Cleartext Password
+ * @param bool $sticky Cookie should not expire
+ * @param bool $silent Don't show error on bad auth
+ * @return bool true on successful auth
+ */
+function auth_login($user,$pass,$sticky=false,$silent=false){
+ global $USERINFO;
+ global $conf;
+ global $lang;
+ global $auth;
+ $sticky ? $sticky = true : $sticky = false; //sanity check
+
+ if (!$auth) return false;
+
+ if(!empty($user)){
+ //usual login
+ if ($auth->checkPass($user,$pass)){
+ // make logininfo globally available
+ $_SERVER['REMOTE_USER'] = $user;
+ auth_setCookie($user,PMA_blowfish_encrypt($pass,auth_cookiesalt()),$sticky);
+ return true;
+ }else{
+ //invalid credentials - log off
+ if(!$silent) msg($lang['badlogin'],-1);
+ auth_logoff();
+ return false;
+ }
+ }else{
+ // read cookie information
+ list($user,$sticky,$pass) = auth_getCookie();
+ // get session info
+ $session = $_SESSION[DOKU_COOKIE]['auth'];
+ if($user && $pass){
+ // we got a cookie - see if we can trust it
+ if(isset($session) &&
+ $auth->useSessionCache($user) &&
+ ($session['time'] >= time()-$conf['auth_security_timeout']) &&
+ ($session['user'] == $user) &&
+ ($session['pass'] == $pass) && //still crypted
+ ($session['buid'] == auth_browseruid()) ){
+ // he has session, cookie and browser right - let him in
+ $_SERVER['REMOTE_USER'] = $user;
+ $USERINFO = $session['info']; //FIXME move all references to session
+ return true;
+ }
+ // no we don't trust it yet - recheck pass but silent
+ $pass = PMA_blowfish_decrypt($pass,auth_cookiesalt());
+ return auth_login($user,$pass,$sticky,true);
+ }
+ }
+ //just to be sure
+ auth_logoff(true);
+ return false;
+}
+
+/**
+ * Checks if a given authentication token was stored in the session
+ *
+ * Will setup authentication data using data from the session if the
+ * token is correct. Will exit with a 401 Status if not.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @param string $token The authentication token
+ * @return boolean true (or will exit on failure)
+ */
+function auth_validateToken($token){
+ if(!$token || $token != $_SESSION[DOKU_COOKIE]['auth']['token']){
+ // bad token
+ header("HTTP/1.0 401 Unauthorized");
+ print 'Invalid auth token - maybe the session timed out';
+ unset($_SESSION[DOKU_COOKIE]['auth']['token']); // no second chance
+ exit;
+ }
+ // still here? trust the session data
+ global $USERINFO;
+ $_SERVER['REMOTE_USER'] = $_SESSION[DOKU_COOKIE]['auth']['user'];
+ $USERINFO = $_SESSION[DOKU_COOKIE]['auth']['info'];
+ return true;
+}
+
+/**
+ * Create an auth token and store it in the session
+ *
+ * NOTE: this is completely unrelated to the getSecurityToken() function
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @return string The auth token
+ */
+function auth_createToken(){
+ $token = md5(mt_rand());
+ @session_start(); // reopen the session if needed
+ $_SESSION[DOKU_COOKIE]['auth']['token'] = $token;
+ session_write_close();
+ return $token;
+}
+
+/**
+ * Builds a pseudo UID from browser and IP data
+ *
+ * This is neither unique nor unfakable - still it adds some
+ * security. Using the first part of the IP makes sure
+ * proxy farms like AOLs are stil okay.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ *
+ * @return string a MD5 sum of various browser headers
+ */
+function auth_browseruid(){
+ $ip = clientIP(true);
+ $uid = '';
+ $uid .= $_SERVER['HTTP_USER_AGENT'];
+ $uid .= $_SERVER['HTTP_ACCEPT_ENCODING'];
+ $uid .= $_SERVER['HTTP_ACCEPT_LANGUAGE'];
+ $uid .= $_SERVER['HTTP_ACCEPT_CHARSET'];
+ $uid .= substr($ip,0,strpos($ip,'.'));
+ return md5($uid);
+}
+
+/**
+ * Creates a random key to encrypt the password in cookies
+ *
+ * This function tries to read the password for encrypting
+ * cookies from $conf['metadir'].'/_htcookiesalt'
+ * if no such file is found a random key is created and
+ * and stored in this file.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ *
+ * @return string
+ */
+function auth_cookiesalt(){
+ global $conf;
+ $file = $conf['metadir'].'/_htcookiesalt';
+ $salt = io_readFile($file);
+ if(empty($salt)){
+ $salt = uniqid(rand(),true);
+ io_saveFile($file,$salt);
+ }
+ return $salt;
+}
+
+/**
+ * Log out the current user
+ *
+ * This clears all authentication data and thus log the user
+ * off. It also clears session data.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @param bool $keepbc - when true, the breadcrumb data is not cleared
+ */
+function auth_logoff($keepbc=false){
+ global $conf;
+ global $USERINFO;
+ global $INFO, $ID;
+ global $auth;
+
+ // make sure the session is writable (it usually is)
+ @session_start();
+
+ if(isset($_SESSION[DOKU_COOKIE]['auth']['user']))
+ unset($_SESSION[DOKU_COOKIE]['auth']['user']);
+ if(isset($_SESSION[DOKU_COOKIE]['auth']['pass']))
+ unset($_SESSION[DOKU_COOKIE]['auth']['pass']);
+ if(isset($_SESSION[DOKU_COOKIE]['auth']['info']))
+ unset($_SESSION[DOKU_COOKIE]['auth']['info']);
+ if(!$keepbc && isset($_SESSION[DOKU_COOKIE]['bc']))
+ unset($_SESSION[DOKU_COOKIE]['bc']);
+ if(isset($_SERVER['REMOTE_USER']))
+ unset($_SERVER['REMOTE_USER']);
+ $USERINFO=null; //FIXME
+
+ if (version_compare(PHP_VERSION, '5.2.0', '>')) {
+ setcookie(DOKU_COOKIE,'',time()-600000,DOKU_REL,'',($conf['securecookie'] && is_ssl()),true);
+ }else{
+ setcookie(DOKU_COOKIE,'',time()-600000,DOKU_REL,'',($conf['securecookie'] && is_ssl()));
+ }
+
+ if($auth && $auth->canDo('logoff')){
+ $auth->logOff();
+ }
+}
+
+/**
+ * Check if a user is a manager
+ *
+ * Should usually be called without any parameters to check the current
+ * user.
+ *
+ * The info is available through $INFO['ismanager'], too
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @see auth_isadmin
+ * @param string user - Username
+ * @param array groups - List of groups the user is in
+ * @param bool adminonly - when true checks if user is admin
+ */
+function auth_ismanager($user=null,$groups=null,$adminonly=false){
+ global $conf;
+ global $USERINFO;
+ global $auth;
+
+ if (!$auth) return false;
+ if(is_null($user)) {
+ if (!isset($_SERVER['REMOTE_USER'])) {
+ return false;
+ } else {
+ $user = $_SERVER['REMOTE_USER'];
+ }
+ }
+ $user = $auth->cleanUser($user);
+ if(is_null($groups)) $groups = (array) $USERINFO['grps'];
+ $groups = array_map(array($auth,'cleanGroup'),$groups);
+ $user = auth_nameencode($user);
+
+ // check username against superuser and manager
+ $superusers = explode(',', $conf['superuser']);
+ $superusers = array_unique($superusers);
+ $superusers = array_map('trim', $superusers);
+ // prepare an array containing only true values for array_map call
+ $alltrue = array_fill(0, count($superusers), true);
+ $superusers = array_map('auth_nameencode', $superusers, $alltrue);
+
+ // case insensitive?
+ if(!$auth->isCaseSensitive()){
+ $superusers = array_map('utf8_strtolower',$superusers);
+ $user = utf8_strtolower($user);
+ }
+
+ // check user match
+ if(in_array($user, $superusers)) return true;
+
+ // check managers
+ if(!$adminonly){
+ $managers = explode(',', $conf['manager']);
+ $managers = array_unique($managers);
+ $managers = array_map('trim', $managers);
+ // prepare an array containing only true values for array_map call
+ $alltrue = array_fill(0, count($managers), true);
+ $managers = array_map('auth_nameencode', $managers, $alltrue);
+ if(!$auth->isCaseSensitive()) $managers = array_map('utf8_strtolower',$managers);
+ if(in_array($user, $managers)) return true;
+ }
+
+ // check user's groups against superuser and manager
+ if (!empty($groups)) {
+
+ //prepend groups with @ and nameencode
+ $cnt = count($groups);
+ for($i=0; $i<$cnt; $i++){
+ $groups[$i] = '@'.auth_nameencode($groups[$i]);
+ if(!$auth->isCaseSensitive()){
+ $groups[$i] = utf8_strtolower($groups[$i]);
+ }
+ }
+
+ // check groups against superuser and manager
+ foreach($superusers as $supu)
+ if(in_array($supu, $groups)) return true;
+ if(!$adminonly){
+ foreach($managers as $mana)
+ if(in_array($mana, $groups)) return true;
+ }
+ }
+
+ return false;
+}
+
+/**
+ * Check if a user is admin
+ *
+ * Alias to auth_ismanager with adminonly=true
+ *
+ * The info is available through $INFO['isadmin'], too
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @see auth_ismanager
+ */
+function auth_isadmin($user=null,$groups=null){
+ return auth_ismanager($user,$groups,true);
+}
+
+/**
+ * Convinience function for auth_aclcheck()
+ *
+ * This checks the permissions for the current user
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ *
+ * @param string $id page ID (needs to be resolved and cleaned)
+ * @return int permission level
+ */
+function auth_quickaclcheck($id){
+ global $conf;
+ global $USERINFO;
+ # if no ACL is used always return upload rights
+ if(!$conf['useacl']) return AUTH_UPLOAD;
+ //error_log("DOKUWIKI: auth_quickaclcheck:".$_SERVER['REMOTE_USER'].":".$id.json_encode($USERINFO));
+ return auth_aclcheck($id,$_SERVER['REMOTE_USER'],$USERINFO['grps']);
+}
+
+/**
+ * Returns the maximum rights a user has for
+ * the given ID or its namespace
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ *
+ * @param string $id page ID (needs to be resolved and cleaned)
+ * @param string $user Username
+ * @param array $groups Array of groups the user is in
+ * @return int permission level
+ */
+function auth_aclcheck($id,$user,$groups){
+ global $conf;
+ global $AUTH_ACL;
+ global $auth;
+
+ // if no ACL is used always return upload rights
+ if(!$conf['useacl']) return AUTH_UPLOAD;
+ if (!$auth) return AUTH_NONE;
+
+ //make sure groups is an array
+ if(!is_array($groups)) $groups = array();
+
+ //if user is superuser or in superusergroup return 255 (acl_admin)
+ if(auth_isadmin($user,$groups)) { return AUTH_ADMIN; }
+
+ $ci = '';
+ if(!$auth->isCaseSensitive()) $ci = 'ui';
+
+ $user = $auth->cleanUser($user);
+ $groups = array_map(array($auth,'cleanGroup'),(array)$groups);
+ $user = auth_nameencode($user);
+
+ //prepend groups with @ and nameencode
+ $cnt = count($groups);
+ for($i=0; $i<$cnt; $i++){
+ $groups[$i] = '@'.auth_nameencode($groups[$i]);
+ }
+
+ $ns = getNS($id);
+ $perm = -1;
+
+ if($user || count($groups)){
+ //add ALL group
+ $groups[] = '@ALL';
+ //add User
+ if($user) $groups[] = $user;
+ //build regexp
+ $regexp = join('|',$groups);
+ }else{
+ $regexp = '@ALL';
+ }
+
+ //check exact match first
+ $matches = preg_grep('/^'.preg_quote($id,'/').'\s+('.$regexp.')\s+/'.$ci,$AUTH_ACL);
+ if(count($matches)){
+ foreach($matches as $match){
+ $match = preg_replace('/#.*$/','',$match); //ignore comments
+ $acl = preg_split('/\s+/',$match);
+ if($acl[2] > AUTH_DELETE) $acl[2] = AUTH_DELETE; //no admins in the ACL!
+ if($acl[2] > $perm){
+ $perm = $acl[2];
+ }
+ }
+ if($perm > -1){
+ //we had a match - return it
+ return $perm;
+ }
+ }
+
+ //still here? do the namespace checks
+ if($ns){
+ $path = $ns.':\*';
+ }else{
+ $path = '\*'; //root document
+ }
+
+ do{
+ $matches = preg_grep('/^'.$path.'\s+('.$regexp.')\s+/'.$ci,$AUTH_ACL);
+ if(count($matches)){
+ foreach($matches as $match){
+ $match = preg_replace('/#.*$/','',$match); //ignore comments
+ $acl = preg_split('/\s+/',$match);
+ if($acl[2] > AUTH_DELETE) $acl[2] = AUTH_DELETE; //no admins in the ACL!
+ if($acl[2] > $perm){
+ $perm = $acl[2];
+ }
+ }
+ //we had a match - return it
+ return $perm;
+ }
+
+ //get next higher namespace
+ $ns = getNS($ns);
+
+ if($path != '\*'){
+ $path = $ns.':\*';
+ if($path == ':\*') $path = '\*';
+ }else{
+ //we did this already
+ //looks like there is something wrong with the ACL
+ //break here
+ msg('No ACL setup yet! Denying access to everyone.');
+ return AUTH_NONE;
+ }
+ }while(1); //this should never loop endless
+
+ //still here? return no permissions
+ return AUTH_NONE;
+}
+
+/**
+ * Encode ASCII special chars
+ *
+ * Some auth backends allow special chars in their user and groupnames
+ * The special chars are encoded with this function. Only ASCII chars
+ * are encoded UTF-8 multibyte are left as is (different from usual
+ * urlencoding!).
+ *
+ * Decoding can be done with rawurldecode
+ *
+ * @author Andreas Gohr <gohr@cosmocode.de>
+ * @see rawurldecode()
+ */
+function auth_nameencode($name,$skip_group=false){
+ global $cache_authname;
+ $cache =& $cache_authname;
+ $name = (string) $name;
+
+ if (!isset($cache[$name][$skip_group])) {
+ if($skip_group && $name{0} =='@'){
+ $cache[$name][$skip_group] = '@'.preg_replace('/([\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f])/e',
+ "'%'.dechex(ord(substr('\\1',-1)))",substr($name,1));
+ }else{
+ $cache[$name][$skip_group] = preg_replace('/([\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f])/e',
+ "'%'.dechex(ord(substr('\\1',-1)))",$name);
+ }
+ }
+
+ return $cache[$name][$skip_group];
+}
+
+/**
+ * Create a pronouncable password
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @link http://www.phpbuilder.com/annotate/message.php3?id=1014451
+ *
+ * @return string pronouncable password
+ */
+function auth_pwgen(){
+ $pw = '';
+ $c = 'bcdfghjklmnprstvwz'; //consonants except hard to speak ones
+ $v = 'aeiou'; //vowels
+ $a = $c.$v; //both
+
+ //use two syllables...
+ for($i=0;$i < 2; $i++){
+ $pw .= $c[rand(0, strlen($c)-1)];
+ $pw .= $v[rand(0, strlen($v)-1)];
+ $pw .= $a[rand(0, strlen($a)-1)];
+ }
+ //... and add a nice number
+ $pw .= rand(10,99);
+
+ return $pw;
+}
+
+/**
+ * Sends a password to the given user
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ *
+ * @return bool true on success
+ */
+function auth_sendPassword($user,$password){
+ global $conf;
+ global $lang;
+ global $auth;
+ if (!$auth) return false;
+
+ $hdrs = '';
+ $user = $auth->cleanUser($user);
+ $userinfo = $auth->getUserData($user);
+
+ if(!$userinfo['mail']) return false;
+
+ $text = rawLocale('password');
+ $text = str_replace('@DOKUWIKIURL@',DOKU_URL,$text);
+ $text = str_replace('@FULLNAME@',$userinfo['name'],$text);
+ $text = str_replace('@LOGIN@',$user,$text);
+ $text = str_replace('@PASSWORD@',$password,$text);
+ $text = str_replace('@TITLE@',$conf['title'],$text);
+
+ return mail_send($userinfo['name'].' <'.$userinfo['mail'].'>',
+ $lang['regpwmail'],
+ $text,
+ $conf['mailfrom']);
+}
+
+/**
+ * Register a new user
+ *
+ * This registers a new user - Data is read directly from $_POST
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ *
+ * @return bool true on success, false on any error
+ */
+function register(){
+ global $lang;
+ global $conf;
+ global $auth;
+
+ if (!$auth) return false;
+ if(!$_POST['save']) return false;
+ if(!$auth->canDo('addUser')) return false;
+
+ //clean username
+ $_POST['login'] = trim($auth->cleanUser($_POST['login']));
+
+ //clean fullname and email
+ $_POST['fullname'] = trim(preg_replace('/[\x00-\x1f:<>&%,;]+/','',$_POST['fullname']));
+ $_POST['email'] = trim(preg_replace('/[\x00-\x1f:<>&%,;]+/','',$_POST['email']));
+
+ if( empty($_POST['login']) ||
+ empty($_POST['fullname']) ||
+ empty($_POST['email']) ){
+ msg($lang['regmissing'],-1);
+ return false;
+ }
+
+ if ($conf['autopasswd']) {
+ $pass = auth_pwgen(); // automatically generate password
+ } elseif (empty($_POST['pass']) ||
+ empty($_POST['passchk'])) {
+ msg($lang['regmissing'], -1); // complain about missing passwords
+ return false;
+ } elseif ($_POST['pass'] != $_POST['passchk']) {
+ msg($lang['regbadpass'], -1); // complain about misspelled passwords
+ return false;
+ } else {
+ $pass = $_POST['pass']; // accept checked and valid password
+ }
+
+ //check mail
+ if(!mail_isvalid($_POST['email'])){
+ msg($lang['regbadmail'],-1);
+ return false;
+ }
+
+ //okay try to create the user
+ if(!$auth->triggerUserMod('create', array($_POST['login'],$pass,$_POST['fullname'],$_POST['email']))){
+ msg($lang['reguexists'],-1);
+ return false;
+ }
+
+ // create substitutions for use in notification email
+ $substitutions = array(
+ 'NEWUSER' => $_POST['login'],
+ 'NEWNAME' => $_POST['fullname'],
+ 'NEWEMAIL' => $_POST['email'],
+ );
+
+ if (!$conf['autopasswd']) {
+ msg($lang['regsuccess2'],1);
+ notify('', 'register', '', $_POST['login'], false, $substitutions);
+ return true;
+ }
+
+ // autogenerated password? then send him the password
+ if (auth_sendPassword($_POST['login'],$pass)){
+ msg($lang['regsuccess'],1);
+ notify('', 'register', '', $_POST['login'], false, $substitutions);
+ return true;
+ }else{
+ msg($lang['regmailfail'],-1);
+ return false;
+ }
+}
+
+/**
+ * Update user profile
+ *
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ */
+function updateprofile() {
+ global $conf;
+ global $INFO;
+ global $lang;
+ global $auth;
+
+ if (!$auth) return false;
+ if(empty($_POST['save'])) return false;
+ if(!checkSecurityToken()) return false;
+
+ // should not be able to get here without Profile being possible...
+ if(!$auth->canDo('Profile')) {
+ msg($lang['profna'],-1);
+ return false;
+ }
+
+ if ($_POST['newpass'] != $_POST['passchk']) {
+ msg($lang['regbadpass'], -1); // complain about misspelled passwords
+ return false;
+ }
+
+ //clean fullname and email
+ $_POST['fullname'] = trim(preg_replace('/[\x00-\x1f:<>&%,;]+/','',$_POST['fullname']));
+ $_POST['email'] = trim(preg_replace('/[\x00-\x1f:<>&%,;]+/','',$_POST['email']));
+
+ if ((empty($_POST['fullname']) && $auth->canDo('modName')) ||
+ (empty($_POST['email']) && $auth->canDo('modMail'))) {
+ msg($lang['profnoempty'],-1);
+ return false;
+ }
+
+ if (!mail_isvalid($_POST['email']) && $auth->canDo('modMail')){
+ msg($lang['regbadmail'],-1);
+ return false;
+ }
+
+ if ($_POST['fullname'] != $INFO['userinfo']['name'] && $auth->canDo('modName')) $changes['name'] = $_POST['fullname'];
+ if ($_POST['email'] != $INFO['userinfo']['mail'] && $auth->canDo('modMail')) $changes['mail'] = $_POST['email'];
+ if (!empty($_POST['newpass']) && $auth->canDo('modPass')) $changes['pass'] = $_POST['newpass'];
+
+ if (!count($changes)) {
+ msg($lang['profnochange'], -1);
+ return false;
+ }
+
+ if ($conf['profileconfirm']) {
+ if (!$auth->checkPass($_SERVER['REMOTE_USER'], $_POST['oldpass'])) {
+ msg($lang['badlogin'],-1);
+ return false;
+ }
+ }
+
+ if ($result = $auth->triggerUserMod('modify', array($_SERVER['REMOTE_USER'], $changes))) {
+ // update cookie and session with the changed data
+ $cookie = base64_decode($_COOKIE[DOKU_COOKIE]);
+ list($user,$sticky,$pass) = explode('|',$cookie,3);
+ if ($changes['pass']) $pass = PMA_blowfish_encrypt($changes['pass'],auth_cookiesalt());
+
+ auth_setCookie($_SERVER['REMOTE_USER'],$pass,(bool)$sticky);
+ return true;
+ }
+}
+
+/**
+ * Send a new password
+ *
+ * This function handles both phases of the password reset:
+ *
+ * - handling the first request of password reset
+ * - validating the password reset auth token
+ *
+ * @author Benoit Chesneau <benoit@bchesneau.info>
+ * @author Chris Smith <chris@jalakai.co.uk>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ *
+ * @return bool true on success, false on any error
+ */
+function act_resendpwd(){
+ global $lang;
+ global $conf;
+ global $auth;
+
+ if(!actionOK('resendpwd')) return false;
+ if (!$auth) return false;
+
+ // should not be able to get here without modPass being possible...
+ if(!$auth->canDo('modPass')) {
+ msg($lang['resendna'],-1);
+ return false;
+ }
+
+ $token = preg_replace('/[^a-f0-9]+/','',$_REQUEST['pwauth']);
+
+ if($token){
+ // we're in token phase
+
+ $tfile = $conf['cachedir'].'/'.$token{0}.'/'.$token.'.pwauth';
+ if(!@file_exists($tfile)){
+ msg($lang['resendpwdbadauth'],-1);
+ return false;
+ }
+ $user = io_readfile($tfile);
+ @unlink($tfile);
+ $userinfo = $auth->getUserData($user);
+ if(!$userinfo['mail']) {
+ msg($lang['resendpwdnouser'], -1);
+ return false;
+ }
+
+ $pass = auth_pwgen();
+ if (!$auth->triggerUserMod('modify', array($user,array('pass' => $pass)))) {
+ msg('error modifying user data',-1);
+ return false;
+ }
+
+ if (auth_sendPassword($user,$pass)) {
+ msg($lang['resendpwdsuccess'],1);
+ } else {
+ msg($lang['regmailfail'],-1);
+ }
+ return true;
+
+ } else {
+ // we're in request phase
+
+ if(!$_POST['save']) return false;
+
+ if (empty($_POST['login'])) {
+ msg($lang['resendpwdmissing'], -1);
+ return false;
+ } else {
+ $user = trim($auth->cleanUser($_POST['login']));
+ }
+
+ $userinfo = $auth->getUserData($user);
+ if(!$userinfo['mail']) {
+ msg($lang['resendpwdnouser'], -1);
+ return false;
+ }
+
+ // generate auth token
+ $token = md5(auth_cookiesalt().$user); //secret but user based
+ $tfile = $conf['cachedir'].'/'.$token{0}.'/'.$token.'.pwauth';
+ $url = wl('',array('do'=>'resendpwd','pwauth'=>$token),true,'&');
+
+ io_saveFile($tfile,$user);
+
+ $text = rawLocale('pwconfirm');
+ $text = str_replace('@DOKUWIKIURL@',DOKU_URL,$text);
+ $text = str_replace('@FULLNAME@',$userinfo['name'],$text);
+ $text = str_replace('@LOGIN@',$user,$text);
+ $text = str_replace('@TITLE@',$conf['title'],$text);
+ $text = str_replace('@CONFIRM@',$url,$text);
+
+ if(mail_send($userinfo['name'].' <'.$userinfo['mail'].'>',
+ $lang['regpwmail'],
+ $text,
+ $conf['mailfrom'])){
+ msg($lang['resendpwdconfirm'],1);
+ }else{
+ msg($lang['regmailfail'],-1);
+ }
+ return true;
+ }
+
+ return false; // never reached
+}
+
+/**
+ * Encrypts a password using the given method and salt
+ *
+ * If the selected method needs a salt and none was given, a random one
+ * is chosen.
+ *
+ * The following methods are understood:
+ *
+ * smd5 - Salted MD5 hashing
+ * apr1 - Apache salted MD5 hashing
+ * md5 - Simple MD5 hashing
+ * sha1 - SHA1 hashing
+ * ssha - Salted SHA1 hashing
+ * crypt - Unix crypt
+ * mysql - MySQL password (old method)
+ * my411 - MySQL 4.1.1 password
+ * kmd5 - Salted MD5 hashing as used by UNB
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @return string The crypted password
+ */
+function auth_cryptPassword($clear,$method='',$salt=null){
+ global $conf;
+ if(empty($method)) $method = $conf['passcrypt'];
+
+ //prepare a salt
+ if(is_null($salt)) $salt = md5(uniqid(rand(), true));
+
+ switch(strtolower($method)){
+ case 'smd5':
+ if(defined('CRYPT_MD5') && CRYPT_MD5) return crypt($clear,'$1$'.substr($salt,0,8).'$');
+ // when crypt can't handle SMD5, falls through to pure PHP implementation
+ $magic = '1';
+ case 'apr1':
+ //from http://de.php.net/manual/en/function.crypt.php#73619 comment by <mikey_nich at hotmail dot com>
+ if(!$magic) $magic = 'apr1';
+ $salt = substr($salt,0,8);
+ $len = strlen($clear);
+ $text = $clear.'$'.$magic.'$'.$salt;
+ $bin = pack("H32", md5($clear.$salt.$clear));
+ for($i = $len; $i > 0; $i -= 16) {
+ $text .= substr($bin, 0, min(16, $i));
+ }
+ for($i = $len; $i > 0; $i >>= 1) {
+ $text .= ($i & 1) ? chr(0) : $clear{0};
+ }
+ $bin = pack("H32", md5($text));
+ for($i = 0; $i < 1000; $i++) {
+ $new = ($i & 1) ? $clear : $bin;
+ if ($i % 3) $new .= $salt;
+ if ($i % 7) $new .= $clear;
+ $new .= ($i & 1) ? $bin : $clear;
+ $bin = pack("H32", md5($new));
+ }
+ $tmp = '';
+ for ($i = 0; $i < 5; $i++) {
+ $k = $i + 6;
+ $j = $i + 12;
+ if ($j == 16) $j = 5;
+ $tmp = $bin[$i].$bin[$k].$bin[$j].$tmp;
+ }
+ $tmp = chr(0).chr(0).$bin[11].$tmp;
+ $tmp = strtr(strrev(substr(base64_encode($tmp), 2)),
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",
+ "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz");
+ return '$'.$magic.'$'.$salt.'$'.$tmp;
+ case 'md5':
+ return md5($clear);
+ case 'sha1':
+ return sha1($clear);
+ case 'ssha':
+ $salt=substr($salt,0,4);
+ return '{SSHA}'.base64_encode(pack("H*", sha1($clear.$salt)).$salt);
+ case 'crypt':
+ return crypt($clear,substr($salt,0,2));
+ case 'mysql':
+ //from http://www.php.net/mysql comment by <soren at byu dot edu>
+ $nr=0x50305735;
+ $nr2=0x12345671;
+ $add=7;
+ $charArr = preg_split("//", $clear);
+ foreach ($charArr as $char) {
+ if (($char == '') || ($char == ' ') || ($char == '\t')) continue;
+ $charVal = ord($char);
+ $nr ^= ((($nr & 63) + $add) * $charVal) + ($nr << 8);
+ $nr2 += ($nr2 << 8) ^ $nr;
+ $add += $charVal;
+ }
+ return sprintf("%08x%08x", ($nr & 0x7fffffff), ($nr2 & 0x7fffffff));
+ case 'my411':
+ return '*'.sha1(pack("H*", sha1($clear)));
+ case 'kmd5':
+ $key = substr($salt, 16, 2);
+ $hash1 = strtolower(md5($key . md5($clear)));
+ $hash2 = substr($hash1, 0, 16) . $key . substr($hash1, 16);
+ return $hash2;
+ default:
+ msg("Unsupported crypt method $method",-1);
+ }
+}
+
+/**
+ * Verifies a cleartext password against a crypted hash
+ *
+ * The method and salt used for the crypted hash is determined automatically
+ * then the clear text password is crypted using the same method. If both hashs
+ * match true is is returned else false
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @return bool
+ */
+function auth_verifyPassword($clear,$crypt){
+ $method='';
+ $salt='';
+
+ //determine the used method and salt
+ $len = strlen($crypt);
+ if(preg_match('/^\$1\$([^\$]{0,8})\$/',$crypt,$m)){
+ $method = 'smd5';
+ $salt = $m[1];
+ }elseif(preg_match('/^\$apr1\$([^\$]{0,8})\$/',$crypt,$m)){
+ $method = 'apr1';
+ $salt = $m[1];
+ }elseif(substr($crypt,0,6) == '{SSHA}'){
+ $method = 'ssha';
+ $salt = substr(base64_decode(substr($crypt, 6)),20);
+ }elseif($len == 32){
+ $method = 'md5';
+ }elseif($len == 40){
+ $method = 'sha1';
+ }elseif($len == 16){
+ $method = 'mysql';
+ }elseif($len == 41 && $crypt[0] == '*'){
+ $method = 'my411';
+ }elseif($len == 34){
+ $method = 'kmd5';
+ $salt = $crypt;
+ }else{
+ $method = 'crypt';
+ $salt = substr($crypt,0,2);
+ }
+
+ //crypt and compare
+ if(auth_cryptPassword($clear,$method,$salt) === $crypt){
+ return true;
+ }
+ return false;
+}
+
+/**
+ * Set the authentication cookie and add user identification data to the session
+ *
+ * @param string $user username
+ * @param string $pass encrypted password
+ * @param bool $sticky whether or not the cookie will last beyond the session
+ */
+function auth_setCookie($user,$pass,$sticky) {
+ global $conf;
+ global $auth;
+ global $USERINFO;
+
+ if (!$auth) return false;
+ $USERINFO = $auth->getUserData($user);
+
+ // set cookie
+ $cookie = base64_encode($user).'|'.((int) $sticky).'|'.base64_encode($pass);
+ $time = $sticky ? (time()+60*60*24*365) : 0; //one year
+ if (version_compare(PHP_VERSION, '5.2.0', '>')) {
+ setcookie(DOKU_COOKIE,$cookie,$time,DOKU_REL,'',($conf['securecookie'] && is_ssl()),true);
+ }else{
+ setcookie(DOKU_COOKIE,$cookie,$time,DOKU_REL,'',($conf['securecookie'] && is_ssl()));
+ }
+ // set session
+ $_SESSION[DOKU_COOKIE]['auth']['user'] = $user;
+ $_SESSION[DOKU_COOKIE]['auth']['pass'] = $pass;
+ $_SESSION[DOKU_COOKIE]['auth']['buid'] = auth_browseruid();
+ $_SESSION[DOKU_COOKIE]['auth']['info'] = $USERINFO;
+ $_SESSION[DOKU_COOKIE]['auth']['time'] = time();
+}
+
+/**
+ * Returns the user, (encrypted) password and sticky bit from cookie
+ *
+ * @returns array
+ */
+function auth_getCookie(){
+ if (!isset($_COOKIE[DOKU_COOKIE])) {
+ return array(null, null, null);
+ }
+ list($user,$sticky,$pass) = explode('|',$_COOKIE[DOKU_COOKIE],3);
+ $sticky = (bool) $sticky;
+ $pass = base64_decode($pass);
+ $user = base64_decode($user);
+ return array($user,$sticky,$pass);
+}
+
+//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/auth/ad.class.php b/mod/dokuwiki/vendors/dokuwiki/inc/auth/ad.class.php
new file mode 100644
index 000000000..9915b9f11
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/auth/ad.class.php
@@ -0,0 +1,205 @@
+<?php
+/**
+ * Active Directory authentication backend for DokuWiki
+ *
+ * This makes authentication with a Active Directory server much easier
+ * than when using the normal LDAP backend by utilizing the adLDAP library
+ *
+ * Usage:
+ * Set DokuWiki's local.protected.php auth setting to read
+ *
+ * $conf['useacl'] = 1;
+ * $conf['disableactions'] = 'register';
+ * $conf['autopasswd'] = 0;
+ * $conf['authtype'] = 'ad';
+ * $conf['passcrypt'] = 'ssha';
+ *
+ * $conf['auth']['ad']['account_suffix'] = '@my.domain.org';
+ * $conf['auth']['ad']['base_dn'] = 'DC=my,DC=domain,DC=org';
+ * $conf['auth']['ad']['domain_controllers'] = 'srv1.domain.org,srv2.domain.org';
+ *
+ * //optional:
+ * $conf['auth']['ad']['sso'] = 1;
+ * $conf['auth']['ad']['ad_username'] = 'root';
+ * $conf['auth']['ad']['ad_password'] = 'pass';
+ * $conf['auth']['ad']['real_primarygroup'] = 1;
+ * $conf['auth']['ad']['use_ssl'] = 1;
+ * $conf['auth']['ad']['debug'] = 1;
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author James Van Lommel <jamesvl@gmail.com>
+ * @link http://www.nosq.com/blog/2005/08/ldap-activedirectory-and-dokuwiki/
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+require_once(DOKU_INC.'inc/adLDAP.php');
+
+class auth_ad extends auth_basic {
+ var $cnf = null;
+ var $opts = null;
+ var $adldap = null;
+
+ /**
+ * Constructor
+ */
+ function auth_ad() {
+ global $conf;
+ $this->cnf = $conf['auth']['ad'];
+
+ // ldap extension is needed
+ if (!function_exists('ldap_connect')) {
+ if ($this->cnf['debug'])
+ msg("LDAP err: PHP LDAP extension not found.",-1);
+ $this->success = false;
+ return;
+ }
+
+ // Prepare SSO
+ if($_SERVER['REMOTE_USER'] && $this->cnf['sso']){
+ // remove possible NTLM domain
+ list($dom,$usr) = explode('\\',$_SERVER['REMOTE_USER'],2);
+ if(!$usr) $usr = $dom;
+
+ // remove possible Kerberos domain
+ list($usr,$dom) = explode('@',$usr);
+
+ $dom = strtolower($dom);
+ $_SERVER['REMOTE_USER'] = $usr;
+
+ // we need to simulate a login
+ if(empty($_COOKIE[DOKU_COOKIE])){
+ $_REQUEST['u'] = $_SERVER['REMOTE_USER'];
+ $_REQUEST['p'] = 'sso_only';
+ }
+ }
+
+ // prepare adLDAP standard configuration
+ $this->opts = $this->cnf;
+
+ // add possible domain specific configuration
+ if($dom && is_array($this->cnf[$dom])) foreach($this->cnf[$dom] as $key => $val){
+ $this->opts[$key] = $val;
+ }
+
+ // handle multiple AD servers
+ $this->opts['domain_controllers'] = explode(',',$this->opts['domain_controllers']);
+ $this->opts['domain_controllers'] = array_map('trim',$this->opts['domain_controllers']);
+ $this->opts['domain_controllers'] = array_filter($this->opts['domain_controllers']);
+
+ // we currently just handle authentication, so no capabilities are set
+ }
+
+ /**
+ * Check user+password [required auth function]
+ *
+ * Checks if the given user exists and the given
+ * plaintext password is correct by trying to bind
+ * to the LDAP server
+ *
+ * @author James Van Lommel <james@nosq.com>
+ * @return bool
+ */
+ function checkPass($user, $pass){
+ if($_SERVER['REMOTE_USER'] &&
+ $_SERVER['REMOTE_USER'] == $user &&
+ $this->cnf['sso']) return true;
+
+ if(!$this->_init()) return false;
+ return $this->adldap->authenticate($user, $pass);
+ }
+
+ /**
+ * Return user info [required auth function]
+ *
+ * Returns info about the given user needs to contain
+ * at least these fields:
+ *
+ * name string full name of the user
+ * mail string email addres of the user
+ * grps array list of groups the user is in
+ *
+ * This LDAP specific function returns the following
+ * addional fields:
+ *
+ * dn string distinguished name (DN)
+ * uid string Posix User ID
+ *
+ * @author James Van Lommel <james@nosq.com>
+ */
+ function getUserData($user){
+ global $conf;
+ if(!$this->_init()) return false;
+
+ //get info for given user
+ $result = $this->adldap->user_info($user);
+
+ //general user info
+ $info['name'] = $result[0]['displayname'][0];
+ $info['mail'] = $result[0]['mail'][0];
+ $info['uid'] = $result[0]['samaccountname'][0];
+ $info['dn'] = $result[0]['dn'];
+
+ // handle ActiveDirectory memberOf
+ $info['grps'] = $this->adldap->user_groups($user,(bool) $this->opts['recursive_groups']);
+
+ if (is_array($info['grps'])) {
+ foreach ($info['grps'] as $ndx => $group) {
+ $info['grps'][$ndx] = $this->cleanGroup($group);
+ }
+ }
+
+ // always add the default group to the list of groups
+ if(!is_array($info['grps']) || !in_array($conf['defaultgroup'],$info['grps'])){
+ $info['grps'][] = $conf['defaultgroup'];
+ }
+
+ return $info;
+ }
+
+ /**
+ * Make AD group names usable by DokuWiki.
+ *
+ * Removes backslashes ('\'), pound signs ('#'), and converts spaces to underscores.
+ *
+ * @author James Van Lommel (jamesvl@gmail.com)
+ */
+ function cleanGroup($name) {
+ $sName = str_replace('\\', '', $name);
+ $sName = str_replace('#', '', $sName);
+ $sName = preg_replace('[\s]', '_', $sName);
+ return $sName;
+ }
+
+ /**
+ * Sanitize user names
+ */
+ function cleanUser($name) {
+ return $this->cleanGroup($name);
+ }
+
+ /**
+ * Most values in LDAP are case-insensitive
+ */
+ function isCaseSensitive(){
+ return false;
+ }
+
+ /**
+ * Initialize the AdLDAP library and connect to the server
+ */
+ function _init(){
+ if(!is_null($this->adldap)) return true;
+
+ // connect
+ try {
+ $this->adldap = new adLDAP($this->opts);
+ return true;
+ } catch (adLDAPException $e) {
+ $this->success = false;
+ $this->adldap = null;
+ }
+ return false;
+ }
+}
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/auth/basic.class.php b/mod/dokuwiki/vendors/dokuwiki/inc/auth/basic.class.php
new file mode 100644
index 000000000..c08422488
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/auth/basic.class.php
@@ -0,0 +1,403 @@
+<?php
+/**
+ * auth/basic.class.php
+ *
+ * foundation authorisation class
+ * all auth classes should inherit from this class
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ */
+
+class auth_basic {
+
+ var $success = true;
+
+
+ /**
+ * Posible things an auth backend module may be able to
+ * do. The things a backend can do need to be set to true
+ * in the constructor.
+ */
+ var $cando = array (
+ 'addUser' => false, // can Users be created?
+ 'delUser' => false, // can Users be deleted?
+ 'modLogin' => false, // can login names be changed?
+ 'modPass' => false, // can passwords be changed?
+ 'modName' => false, // can real names be changed?
+ 'modMail' => false, // can emails be changed?
+ 'modGroups' => false, // can groups be changed?
+ 'getUsers' => false, // can a (filtered) list of users be retrieved?
+ 'getUserCount'=> false, // can the number of users be retrieved?
+ 'getGroups' => false, // can a list of available groups be retrieved?
+ 'external' => false, // does the module do external auth checking?
+ 'logoff' => false, // has the module some special logoff method?
+ );
+
+
+ /**
+ * Constructor.
+ *
+ * Carry out sanity checks to ensure the object is
+ * able to operate. Set capabilities in $this->cando
+ * array here
+ *
+ * Set $this->success to false if checks fail
+ *
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ */
+ function auth_basic() {
+ // the base class constructor does nothing, derived class
+ // constructors do the real work
+ }
+
+ /**
+ * Capability check. [ DO NOT OVERRIDE ]
+ *
+ * Checks the capabilities set in the $this->cando array and
+ * some pseudo capabilities (shortcutting access to multiple
+ * ones)
+ *
+ * ususal capabilities start with lowercase letter
+ * shortcut capabilities start with uppercase letter
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @return bool
+ */
+ function canDo($cap) {
+ switch($cap){
+ case 'Profile':
+ // can at least one of the user's properties be changed?
+ return ( $this->cando['modPass'] ||
+ $this->cando['modName'] ||
+ $this->cando['modMail'] );
+ break;
+ case 'UserMod':
+ // can at least anything be changed?
+ return ( $this->cando['modPass'] ||
+ $this->cando['modName'] ||
+ $this->cando['modMail'] ||
+ $this->cando['modLogin'] ||
+ $this->cando['modGroups'] ||
+ $this->cando['modMail'] );
+ break;
+ default:
+ // print a helping message for developers
+ if(!isset($this->cando[$cap])){
+ msg("Check for unknown capability '$cap' - Do you use an outdated Plugin?",-1);
+ }
+ return $this->cando[$cap];
+ }
+ }
+
+ /**
+ * Trigger the AUTH_USERDATA_CHANGE event and call the modification function. [ DO NOT OVERRIDE ]
+ *
+ * You should use this function instead of calling createUser, modifyUser or
+ * deleteUsers directly. The event handlers can prevent the modification, for
+ * example for enforcing a user name schema.
+ *
+ * @author Gabriel Birke <birke@d-scribe.de>
+ * @param string $type Modification type ('create', 'modify', 'delete')
+ * @param array $params Parameters for the createUser, modifyUser or deleteUsers method. The content of this array depends on the modification type
+ * @return mixed Result from the modification function or false if an event handler has canceled the action
+ */
+ function triggerUserMod($type, $params)
+ {
+ $validTypes = array(
+ 'create' => 'createUser',
+ 'modify' => 'modifyUser',
+ 'delete' => 'deleteUsers'
+ );
+ if(empty($validTypes[$type]))
+ return false;
+ $eventdata = array('type' => $type, 'params' => $params, 'modification_result' => null);
+ $evt = new Doku_Event('AUTH_USER_CHANGE', $eventdata);
+ if ($evt->advise_before(true)) {
+ $result = call_user_func_array(array($this, $validTypes[$type]), $params);
+ $evt->data['modification_result'] = $result;
+ }
+ $evt->advise_after();
+ unset($evt);
+ return $result;
+ }
+
+ /**
+ * Log off the current user [ OPTIONAL ]
+ *
+ * Is run in addition to the ususal logoff method. Should
+ * only be needed when trustExternal is implemented.
+ *
+ * @see auth_logoff()
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function logOff(){
+ }
+
+ /**
+ * Do all authentication [ OPTIONAL ]
+ *
+ * Set $this->cando['external'] = true when implemented
+ *
+ * If this function is implemented it will be used to
+ * authenticate a user - all other DokuWiki internals
+ * will not be used for authenticating, thus
+ * implementing the checkPass() function is not needed
+ * anymore.
+ *
+ * The function can be used to authenticate against third
+ * party cookies or Apache auth mechanisms and replaces
+ * the auth_login() function
+ *
+ * The function will be called with or without a set
+ * username. If the Username is given it was called
+ * from the login form and the given credentials might
+ * need to be checked. If no username was given it
+ * the function needs to check if the user is logged in
+ * by other means (cookie, environment).
+ *
+ * The function needs to set some globals needed by
+ * DokuWiki like auth_login() does.
+ *
+ * @see auth_login()
+ * @author Andreas Gohr <andi@splitbrain.org>
+ *
+ * @param string $user Username
+ * @param string $pass Cleartext Password
+ * @param bool $sticky Cookie should not expire
+ * @return bool true on successful auth
+ */
+ function trustExternal($user,$pass,$sticky=false){
+# // some example:
+#
+# global $USERINFO;
+# global $conf;
+# $sticky ? $sticky = true : $sticky = false; //sanity check
+#
+# // do the checking here
+#
+# // set the globals if authed
+# $USERINFO['name'] = 'FIXME';
+# $USERINFO['mail'] = 'FIXME';
+# $USERINFO['grps'] = array('FIXME');
+# $_SERVER['REMOTE_USER'] = $user;
+# $_SESSION[DOKU_COOKIE]['auth']['user'] = $user;
+# $_SESSION[DOKU_COOKIE]['auth']['pass'] = $pass;
+# $_SESSION[DOKU_COOKIE]['auth']['info'] = $USERINFO;
+# return true;
+ }
+
+ /**
+ * Check user+password [ MUST BE OVERRIDDEN ]
+ *
+ * Checks if the given user exists and the given
+ * plaintext password is correct
+ *
+ * May be ommited if trustExternal is used.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @return bool
+ */
+ function checkPass($user,$pass){
+ msg("no valid authorisation system in use", -1);
+ return false;
+ }
+
+ /**
+ * Return user info [ MUST BE OVERRIDDEN ]
+ *
+ * Returns info about the given user needs to contain
+ * at least these fields:
+ *
+ * name string full name of the user
+ * mail string email addres of the user
+ * grps array list of groups the user is in
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @return array containing user data or false
+ */
+ function getUserData($user) {
+ if(!$this->cando['external']) msg("no valid authorisation system in use", -1);
+ return false;
+ }
+
+ /**
+ * Create a new User [implement only where required/possible]
+ *
+ * Returns false if the user already exists, null when an error
+ * occurred and true if everything went well.
+ *
+ * The new user HAS TO be added to the default group by this
+ * function!
+ *
+ * Set addUser capability when implemented
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function createUser($user,$pass,$name,$mail,$grps=null){
+ msg("authorisation method does not allow creation of new users", -1);
+ return null;
+ }
+
+ /**
+ * Modify user data [implement only where required/possible]
+ *
+ * Set the mod* capabilities according to the implemented features
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ * @param $user nick of the user to be changed
+ * @param $changes array of field/value pairs to be changed (password will be clear text)
+ * @return bool
+ */
+ function modifyUser($user, $changes) {
+ msg("authorisation method does not allow modifying of user data", -1);
+ return false;
+ }
+
+ /**
+ * Delete one or more users [implement only where required/possible]
+ *
+ * Set delUser capability when implemented
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ * @param array $users
+ * @return int number of users deleted
+ */
+ function deleteUsers($users) {
+ msg("authorisation method does not allow deleting of users", -1);
+ return false;
+ }
+
+ /**
+ * Return a count of the number of user which meet $filter criteria
+ * [should be implemented whenever retrieveUsers is implemented]
+ *
+ * Set getUserCount capability when implemented
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ */
+ function getUserCount($filter=array()) {
+ msg("authorisation method does not provide user counts", -1);
+ return 0;
+ }
+
+ /**
+ * Bulk retrieval of user data [implement only where required/possible]
+ *
+ * Set getUsers capability when implemented
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ * @param start index of first user to be returned
+ * @param limit max number of users to be returned
+ * @param filter array of field/pattern pairs, null for no filter
+ * @return array of userinfo (refer getUserData for internal userinfo details)
+ */
+ function retrieveUsers($start=0,$limit=-1,$filter=null) {
+ msg("authorisation method does not support mass retrieval of user data", -1);
+ return array();
+ }
+
+ /**
+ * Define a group [implement only where required/possible]
+ *
+ * Set addGroup capability when implemented
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ * @return bool
+ */
+ function addGroup($group) {
+ msg("authorisation method does not support independent group creation", -1);
+ return false;
+ }
+
+ /**
+ * Retrieve groups [implement only where required/possible]
+ *
+ * Set getGroups capability when implemented
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ * @return array
+ */
+ function retrieveGroups($start=0,$limit=0) {
+ msg("authorisation method does not support group list retrieval", -1);
+ return array();
+ }
+
+ /**
+ * Return case sensitivity of the backend [OPTIONAL]
+ *
+ * When your backend is caseinsensitive (eg. you can login with USER and
+ * user) then you need to overwrite this method and return false
+ */
+ function isCaseSensitive(){
+ return true;
+ }
+
+ /**
+ * Sanitize a given username [OPTIONAL]
+ *
+ * This function is applied to any user name that is given to
+ * the backend and should also be applied to any user name within
+ * the backend before returning it somewhere.
+ *
+ * This should be used to enforce username restrictions.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @param string $user - username
+ * @param string - the cleaned username
+ */
+ function cleanUser($user){
+ return $user;
+ }
+
+ /**
+ * Sanitize a given groupname [OPTIONAL]
+ *
+ * This function is applied to any groupname that is given to
+ * the backend and should also be applied to any groupname within
+ * the backend before returning it somewhere.
+ *
+ * This should be used to enforce groupname restrictions.
+ *
+ * Groupnames are to be passed without a leading '@' here.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @param string $group - groupname
+ * @param string - the cleaned groupname
+ */
+ function cleanGroup($group){
+ return $group;
+ }
+
+
+ /**
+ * Check Session Cache validity [implement only where required/possible]
+ *
+ * DokuWiki caches user info in the user's session for the timespan defined
+ * in $conf['auth_security_timeout'].
+ *
+ * This makes sure slow authentication backends do not slow down DokuWiki.
+ * This also means that changes to the user database will not be reflected
+ * on currently logged in users.
+ *
+ * To accommodate for this, the user manager plugin will touch a reference
+ * file whenever a change is submitted. This function compares the filetime
+ * of this reference file with the time stored in the session.
+ *
+ * This reference file mechanism does not reflect changes done directly in
+ * the backend's database through other means than the user manager plugin.
+ *
+ * Fast backends might want to return always false, to force rechecks on
+ * each page load. Others might want to use their own checking here. If
+ * unsure, do not override.
+ *
+ * @param string $user - The username
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @return bool
+ */
+ function useSessionCache($user){
+ global $conf;
+ return ($_SESSION[DOKU_COOKIE]['auth']['time'] >= @filemtime($conf['cachedir'].'/sessionpurge'));
+ }
+
+}
+//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/auth/elgg.class.php b/mod/dokuwiki/vendors/dokuwiki/inc/auth/elgg.class.php
new file mode 100644
index 000000000..c0a291832
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/auth/elgg.class.php
@@ -0,0 +1,352 @@
+<?php
+/**
+ * Plaintext authentication backend
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Chris Smith <chris@jalakai.co.uk>
+ */
+
+define('DOKU_AUTH', dirname(__FILE__));
+require_once(DOKU_AUTH.'/basic.class.php');
+
+//define('AUTH_USERFILE',DOKU_CONF.'users.auth.php');
+
+class auth_elgg extends auth_basic {
+
+ var $users = null;
+ var $_pattern = array();
+
+ /**
+ * Constructor
+ *
+ * Carry out sanity checks to ensure the object is
+ * able to operate. Set capabilities.
+ *
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ */
+ function auth_elgg() {
+ // $this->cando['addUser'] = true;
+ // $this->cando['delUser'] = true;
+ // $this->cando['modLogin'] = true;
+ // $this->cando['modPass'] = true;
+ // $this->cando['modName'] = true;
+ // $this->cando['modMail'] = true;
+ $this->cando['getACL'] = true;
+ $this->cando['modGroups'] = true;
+ // $this->cando['getUsers'] = true;
+ $this->cando['getUserCount'] = true;
+ }
+
+ /**
+ * Check user+password [required auth function]
+ *
+ * Checks if the given user exists and the given
+ * plaintext password is correct
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @return bool
+ */
+ function checkPass($user,$pass){
+ $user = get_user_by_username($user);
+ if ($user && $user->password == $pass)
+ return true;
+ /*if (authenticate($user, $pass)) {
+ return true;
+ }*/
+ return false;
+ }
+
+ /**
+ * Return user info
+ *
+ * Returns info about the given user needs to contain
+ * at least these fields:
+ *
+ * name string full name of the user
+ * mail string email addres of the user
+ * grps array list of groups the user is in
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function getUserData($username){
+ $user = get_user_by_username($username);
+ //error_log("getUserData:".$username);
+ if (!$user)
+ return false;
+ //error_log("getUserData:".$username);
+ $page_owner = elgg_get_page_owner_entity();
+ $grps = array();
+ if ($page_owner instanceof ElggGroup) {
+ if ($page_owner->canEdit($user->getGUID())) {
+ $grps[] = "admin";
+ $grps[] = "root";
+ //error_log('operator');
+ }
+ elseif ($page_owner->isMember($user)) {
+ $grps[] = "member";
+ }
+ }
+ elseif ($page_owner instanceof ElggUser) {
+ if ($page_owner == $user) {
+ $grps[] = "admin";
+ }
+ elseif ($page_owner->isFriendsWith($user->getGUID())) {
+ $grps[] = "member";
+ }
+ }
+ if ($user->isAdmin()) {
+ $grps[] = "root";
+ $grps[] = "admin";
+ }
+ $groups = elgg_get_entities_from_relationship(array('relationship' => 'member', 'relationship_guid' => $user->getGUID(), 'inverse_relationship' => FALSE, 'limit'=>0));
+ foreach($groups as $group) {
+ $grps[] = $this->cleanUser($group->name);
+ }
+ return array('name'=>$user->name, 'mail'=>$user->email, 'grps'=>$grps);
+ }
+
+ /**
+ * Create a new User
+ *
+ * Returns false if the user already exists, null when an error
+ * occurred and true if everything went well.
+ *
+ * The new user will be added to the default group by this
+ * function if grps are not specified (default behaviour).
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Chris Smith <chris@jalakai.co.uk>
+ */
+ function createUser($user,$pwd,$name,$mail,$grps=null){
+ global $conf;
+
+ // user mustn't already exist
+ if ($this->getUserData($user) !== false) return false;
+
+ $pass = auth_cryptPassword($pwd);
+
+ // set default group if no groups specified
+ if (!is_array($grps)) $grps = array($conf['defaultgroup']);
+
+ // prepare user line
+ $groups = join(',',$grps);
+ $userline = join(':',array($user,$pass,$name,$mail,$groups))."\n";
+
+ if (io_saveFile(AUTH_USERFILE,$userline,true)) {
+ $this->users[$user] = compact('pass','name','mail','grps');
+ return $pwd;
+ }
+
+ msg('The '.AUTH_USERFILE.' file is not writable. Please inform the Wiki-Admin',-1);
+ return null;
+ }
+
+ /**
+ * Modify user data
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ * @param $user nick of the user to be changed
+ * @param $changes array of field/value pairs to be changed (password will be clear text)
+ * @return bool
+ */
+ function modifyUser($user, $changes) {
+ global $conf;
+ global $ACT;
+ global $INFO;
+
+ // sanity checks, user must already exist and there must be something to change
+ if (($userinfo = $this->getUserData($user)) === false) return false;
+ if (!is_array($changes) || !count($changes)) return true;
+
+ // update userinfo with new data, remembering to encrypt any password
+ $newuser = $user;
+ foreach ($changes as $field => $value) {
+ if ($field == 'user') {
+ $newuser = $value;
+ continue;
+ }
+ if ($field == 'pass') $value = auth_cryptPassword($value);
+ $userinfo[$field] = $value;
+ }
+
+ $groups = join(',',$userinfo['grps']);
+ $userline = join(':',array($newuser, $userinfo['pass'], $userinfo['name'], $userinfo['mail'], $groups))."\n";
+
+ if (!$this->deleteUsers(array($user))) {
+ msg('Unable to modify user data. Please inform the Wiki-Admin',-1);
+ return false;
+ }
+
+ if (!io_saveFile(AUTH_USERFILE,$userline,true)) {
+ msg('There was an error modifying your user data. You should register again.',-1);
+ // FIXME, user has been deleted but not recreated, should force a logout and redirect to login page
+ $ACT == 'register';
+ return false;
+ }
+
+ $this->users[$newuser] = $userinfo;
+ return true;
+ }
+
+ /**
+ * Remove one or more users from the list of registered users
+ *
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ * @param array $users array of users to be deleted
+ * @return int the number of users deleted
+ */
+ function deleteUsers($users) {
+
+ if (!is_array($users) || empty($users)) return 0;
+
+ if ($this->users === null) $this->_loadUserData();
+
+ $deleted = array();
+ foreach ($users as $user) {
+ if (isset($this->users[$user])) $deleted[] = preg_quote($user,'/');
+ }
+
+ if (empty($deleted)) return 0;
+
+ $pattern = '/^('.join('|',$deleted).'):/';
+
+ if (io_deleteFromFile(AUTH_USERFILE,$pattern,true)) {
+ foreach ($deleted as $user) unset($this->users[$user]);
+ return count($deleted);
+ }
+
+ // problem deleting, reload the user list and count the difference
+ $count = count($this->users);
+ $this->_loadUserData();
+ $count -= count($this->users);
+ return $count;
+ }
+
+ /**
+ * Return a count of the number of user which meet $filter criteria
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ */
+ function getUserCount($filter=array()) {
+ return get_number_users(true);
+ }
+
+ /**
+ * Bulk retrieval of user data
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ * @param start index of first user to be returned
+ * @param limit max number of users to be returned
+ * @param filter array of field/pattern pairs
+ * @return array of userinfo (refer getUserData for internal userinfo details)
+ */
+ function retrieveUsers($start=0,$limit=0,$filter=array()) {
+ $entities = elgg_get_entities(array('types'=>'user','limit'=>$limit, 'offset'=>$start));
+ $allusers = array();
+ foreach ($entities as $entity) {
+ $allusers[$entity->username] = getUserData($entity->username);
+ }
+ return $allusers;
+ }
+
+ /**
+ * Only valid pageid's (no namespaces) for usernames
+ */
+ function cleanUser($user){
+ global $conf;
+ return cleanID(str_replace(':',$conf['sepchar'],$user));
+ }
+
+ function getACL(){
+ $doku = current_dokuwiki_entity();
+ elgg_set_ignore_access(true);
+ $acl = explode("\n" ,$doku->wiki_acl);
+ //error_log(json_encode($acl));
+ elgg_set_ignore_access(false);
+ return $acl;
+ global $conf;
+ $acl = array();
+ $acl[] = "# acl.auth.php";
+ $acl[] = '# <?php exit()?\>';
+ $acl[] = "* @ALL 0";
+ $acl[] = "* @user 1";
+ $acl[] = "* @member 8";
+ $acl[] = "* @admin 16";
+ $acl[] = "* @root 255";
+ $acl[] = "* @testers_de_la_red_social 8";
+ return $acl;
+ }
+ function setACL($newacl){
+ $doku = current_dokuwiki_entity();
+ elgg_set_ignore_access(true);
+ $doku->wiki_acl = $newacl;
+ elgg_set_ignore_access(false);
+ }
+
+ /**
+ * Only valid pageid's (no namespaces) for groupnames
+ */
+ function cleanGroup($group){
+ global $conf;
+ return cleanID(str_replace(':',$conf['sepchar'],$group));
+ }
+
+ /**
+ * Load all user data
+ *
+ * loads the user file into a datastructure
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _loadUserData(){
+ //error_log("getUserData:");
+ $this->users = array();
+
+ if(!@file_exists(AUTH_USERFILE)) return;
+
+ $lines = file(AUTH_USERFILE);
+ foreach($lines as $line){
+ $line = preg_replace('/#.*$/','',$line); //ignore comments
+ $line = trim($line);
+ if(empty($line)) continue;
+
+ $row = explode(":",$line,5);
+ $groups = array_values(array_filter(explode(",",$row[4])));
+
+ $this->users[$row[0]]['pass'] = $row[1];
+ $this->users[$row[0]]['name'] = urldecode($row[2]);
+ $this->users[$row[0]]['mail'] = $row[3];
+ $this->users[$row[0]]['grps'] = $groups;
+ }
+ }
+
+ /**
+ * return 1 if $user + $info match $filter criteria, 0 otherwise
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ */
+ function _filter($user, $info) {
+ // FIXME
+ foreach ($this->_pattern as $item => $pattern) {
+ if ($item == 'user') {
+ if (!preg_match($pattern, $user)) return 0;
+ } else if ($item == 'grps') {
+ if (!count(preg_grep($pattern, $info['grps']))) return 0;
+ } else {
+ if (!preg_match($pattern, $info[$item])) return 0;
+ }
+ }
+ return 1;
+ }
+
+ function _constructPattern($filter) {
+ $this->_pattern = array();
+ foreach ($filter as $item => $pattern) {
+// $this->_pattern[$item] = '/'.preg_quote($pattern,"/").'/i'; // don't allow regex characters
+ $this->_pattern[$item] = '/'.str_replace('/','\/',$pattern).'/i'; // allow regex characters
+ }
+ }
+}
+
+//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/auth/ldap.class.php b/mod/dokuwiki/vendors/dokuwiki/inc/auth/ldap.class.php
new file mode 100644
index 000000000..c51924135
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/auth/ldap.class.php
@@ -0,0 +1,357 @@
+<?php
+/**
+ * LDAP authentication backend
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Chris Smith <chris@jalakaic.co.uk>
+ */
+
+class auth_ldap extends auth_basic {
+ var $cnf = null;
+ var $con = null;
+ var $bound = 0; // 0: anonymous, 1: user, 2: superuser
+
+ /**
+ * Constructor
+ */
+ function auth_ldap(){
+ global $conf;
+ $this->cnf = $conf['auth']['ldap'];
+
+ // ldap extension is needed
+ if(!function_exists('ldap_connect')) {
+ if ($this->cnf['debug'])
+ msg("LDAP err: PHP LDAP extension not found.",-1,__LINE__,__FILE__);
+ $this->success = false;
+ return;
+ }
+
+ if(empty($this->cnf['groupkey'])) $this->cnf['groupkey'] = 'cn';
+
+ // auth_ldap currently just handles authentication, so no
+ // capabilities are set
+ }
+
+ /**
+ * Check user+password
+ *
+ * Checks if the given user exists and the given
+ * plaintext password is correct by trying to bind
+ * to the LDAP server
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @return bool
+ */
+ function checkPass($user,$pass){
+ // reject empty password
+ if(empty($pass)) return false;
+ if(!$this->_openLDAP()) return false;
+
+ // indirect user bind
+ if($this->cnf['binddn'] && $this->cnf['bindpw']){
+ // use superuser credentials
+ if(!@ldap_bind($this->con,$this->cnf['binddn'],$this->cnf['bindpw'])){
+ if($this->cnf['debug'])
+ msg('LDAP bind as superuser: '.htmlspecialchars(ldap_error($this->con)),0,__LINE__,__FILE__);
+ return false;
+ }
+ $this->bound = 2;
+ }else if($this->cnf['binddn'] &&
+ $this->cnf['usertree'] &&
+ $this->cnf['userfilter']) {
+ // special bind string
+ $dn = $this->_makeFilter($this->cnf['binddn'],
+ array('user'=>$user,'server'=>$this->cnf['server']));
+
+ }else if(strpos($this->cnf['usertree'], '%{user}')) {
+ // direct user bind
+ $dn = $this->_makeFilter($this->cnf['usertree'],
+ array('user'=>$user,'server'=>$this->cnf['server']));
+
+ }else{
+ // Anonymous bind
+ if(!@ldap_bind($this->con)){
+ msg("LDAP: can not bind anonymously",-1);
+ if($this->cnf['debug'])
+ msg('LDAP anonymous bind: '.htmlspecialchars(ldap_error($this->con)),0,__LINE__,__FILE__);
+ return false;
+ }
+ }
+
+ // Try to bind to with the dn if we have one.
+ if(!empty($dn)) {
+ // User/Password bind
+ if(!@ldap_bind($this->con,$dn,$pass)){
+ if($this->cnf['debug']){
+ msg("LDAP: bind with $dn failed", -1,__LINE__,__FILE__);
+ msg('LDAP user dn bind: '.htmlspecialchars(ldap_error($this->con)),0);
+ }
+ return false;
+ }
+ $this->bound = 1;
+ return true;
+ }else{
+ // See if we can find the user
+ $info = $this->getUserData($user,true);
+ if(empty($info['dn'])) {
+ return false;
+ } else {
+ $dn = $info['dn'];
+ }
+
+ // Try to bind with the dn provided
+ if(!@ldap_bind($this->con,$dn,$pass)){
+ if($this->cnf['debug']){
+ msg("LDAP: bind with $dn failed", -1,__LINE__,__FILE__);
+ msg('LDAP user bind: '.htmlspecialchars(ldap_error($this->con)),0);
+ }
+ return false;
+ }
+ $this->bound = 1;
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Return user info
+ *
+ * Returns info about the given user needs to contain
+ * at least these fields:
+ *
+ * name string full name of the user
+ * mail string email addres of the user
+ * grps array list of groups the user is in
+ *
+ * This LDAP specific function returns the following
+ * addional fields:
+ *
+ * dn string distinguished name (DN)
+ * uid string Posix User ID
+ * inbind bool for internal use - avoid loop in binding
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Trouble
+ * @author Dan Allen <dan.j.allen@gmail.com>
+ * @author <evaldas.auryla@pheur.org>
+ * @author Stephane Chazelas <stephane.chazelas@emerson.com>
+ * @return array containing user data or false
+ */
+ function getUserData($user,$inbind=false) {
+ global $conf;
+ if(!$this->_openLDAP()) return false;
+
+ // force superuser bind if wanted and not bound as superuser yet
+ if($this->cnf['binddn'] && $this->cnf['bindpw'] && $this->bound < 2){
+ // use superuser credentials
+ if(!@ldap_bind($this->con,$this->cnf['binddn'],$this->cnf['bindpw'])){
+ if($this->cnf['debug'])
+ msg('LDAP bind as superuser: '.htmlspecialchars(ldap_error($this->con)),0,__LINE__,__FILE__);
+ return false;
+ }
+ $this->bound = 2;
+ }elseif($this->bound == 0 && !$inbind) {
+ // in some cases getUserData is called outside the authentication workflow
+ // eg. for sending email notification on subscribed pages. This data might not
+ // be accessible anonymously, so we try to rebind the current user here
+ $pass = PMA_blowfish_decrypt($_SESSION[DOKU_COOKIE]['auth']['pass'],auth_cookiesalt());
+ $this->checkPass($_SESSION[DOKU_COOKIE]['auth']['user'], $pass);
+ }
+
+ $info['user'] = $user;
+ $info['server'] = $this->cnf['server'];
+
+ //get info for given user
+ $base = $this->_makeFilter($this->cnf['usertree'], $info);
+ if(!empty($this->cnf['userfilter'])) {
+ $filter = $this->_makeFilter($this->cnf['userfilter'], $info);
+ } else {
+ $filter = "(ObjectClass=*)";
+ }
+
+ $sr = @ldap_search($this->con, $base, $filter);
+ $result = @ldap_get_entries($this->con, $sr);
+ if($this->cnf['debug']){
+ msg('LDAP user search: '.htmlspecialchars(ldap_error($this->con)),0,__LINE__,__FILE__);
+ msg('LDAP search at: '.htmlspecialchars($base.' '.$filter),0,__LINE__,__FILE__);
+ }
+
+ // Don't accept more or less than one response
+ if(!is_array($result) || $result['count'] != 1){
+ return false; //user not found
+ }
+
+ $user_result = $result[0];
+ ldap_free_result($sr);
+
+ // general user info
+ $info['dn'] = $user_result['dn'];
+ $info['gid'] = $user_result['gidnumber'][0];
+ $info['mail'] = $user_result['mail'][0];
+ $info['name'] = $user_result['cn'][0];
+ $info['grps'] = array();
+
+ // overwrite if other attribs are specified.
+ if(is_array($this->cnf['mapping'])){
+ foreach($this->cnf['mapping'] as $localkey => $key) {
+ if(is_array($key)) {
+ // use regexp to clean up user_result
+ list($key, $regexp) = each($key);
+ if($user_result[$key]) foreach($user_result[$key] as $grp){
+ if (preg_match($regexp,$grp,$match)) {
+ if($localkey == 'grps') {
+ $info[$localkey][] = $match[1];
+ } else {
+ $info[$localkey] = $match[1];
+ }
+ }
+ }
+ } else {
+ $info[$localkey] = $user_result[$key][0];
+ }
+ }
+ }
+ $user_result = array_merge($info,$user_result);
+
+ //get groups for given user if grouptree is given
+ if ($this->cnf['grouptree'] && $this->cnf['groupfilter']) {
+ $base = $this->_makeFilter($this->cnf['grouptree'], $user_result);
+ $filter = $this->_makeFilter($this->cnf['groupfilter'], $user_result);
+ $sr = @ldap_search($this->con, $base, $filter, array($this->cnf['groupkey']));
+ if(!$sr){
+ msg("LDAP: Reading group memberships failed",-1);
+ if($this->cnf['debug']){
+ msg('LDAP group search: '.htmlspecialchars(ldap_error($this->con)),0,__LINE__,__FILE__);
+ msg('LDAP search at: '.htmlspecialchars($base.' '.$filter),0,__LINE__,__FILE__);
+ }
+ return false;
+ }
+ $result = ldap_get_entries($this->con, $sr);
+ ldap_free_result($sr);
+
+ if(is_array($result)) foreach($result as $grp){
+ if(!empty($grp[$this->cnf['groupkey']][0])){
+ if($this->cnf['debug'])
+ msg('LDAP usergroup: '.htmlspecialchars($grp[$this->cnf['groupkey']][0]),0,__LINE__,__FILE__);
+ $info['grps'][] = $grp[$this->cnf['groupkey']][0];
+ }
+ }
+ }
+
+ // always add the default group to the list of groups
+ if(!in_array($conf['defaultgroup'],$info['grps'])){
+ $info['grps'][] = $conf['defaultgroup'];
+ }
+ return $info;
+ }
+
+ /**
+ * Most values in LDAP are case-insensitive
+ */
+ function isCaseSensitive(){
+ return false;
+ }
+
+ /**
+ * Make LDAP filter strings.
+ *
+ * Used by auth_getUserData to make the filter
+ * strings for grouptree and groupfilter
+ *
+ * filter string ldap search filter with placeholders
+ * placeholders array array with the placeholders
+ *
+ * @author Troels Liebe Bentsen <tlb@rapanden.dk>
+ * @return string
+ */
+ function _makeFilter($filter, $placeholders) {
+ preg_match_all("/%{([^}]+)/", $filter, $matches, PREG_PATTERN_ORDER);
+ //replace each match
+ foreach ($matches[1] as $match) {
+ //take first element if array
+ if(is_array($placeholders[$match])) {
+ $value = $placeholders[$match][0];
+ } else {
+ $value = $placeholders[$match];
+ }
+ $value = $this->_filterEscape($value);
+ $filter = str_replace('%{'.$match.'}', $value, $filter);
+ }
+ return $filter;
+ }
+
+ /**
+ * Escape a string to be used in a LDAP filter
+ *
+ * Ported from Perl's Net::LDAP::Util escape_filter_value
+ *
+ * @author Andreas Gohr
+ */
+ function _filterEscape($string){
+ return preg_replace('/([\x00-\x1F\*\(\)\\\\])/e',
+ '"\\\\\".join("",unpack("H2","$1"))',
+ $string);
+ }
+
+ /**
+ * Opens a connection to the configured LDAP server and sets the wanted
+ * option on the connection
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _openLDAP(){
+ if($this->con) return true; // connection already established
+
+ $this->bound = 0;
+
+ $port = ($this->cnf['port']) ? $this->cnf['port'] : 389;
+ $this->con = @ldap_connect($this->cnf['server'],$port);
+ if(!$this->con){
+ msg("LDAP: couldn't connect to LDAP server",-1);
+ return false;
+ }
+
+ //set protocol version and dependend options
+ if($this->cnf['version']){
+ if(!@ldap_set_option($this->con, LDAP_OPT_PROTOCOL_VERSION,
+ $this->cnf['version'])){
+ msg('Setting LDAP Protocol version '.$this->cnf['version'].' failed',-1);
+ if($this->cnf['debug'])
+ msg('LDAP version set: '.htmlspecialchars(ldap_error($this->con)),0,__LINE__,__FILE__);
+ }else{
+ //use TLS (needs version 3)
+ if($this->cnf['starttls']) {
+ if (!@ldap_start_tls($this->con)){
+ msg('Starting TLS failed',-1);
+ if($this->cnf['debug'])
+ msg('LDAP TLS set: '.htmlspecialchars(ldap_error($this->con)),0,__LINE__,__FILE__);
+ }
+ }
+ // needs version 3
+ if(isset($this->cnf['referrals'])) {
+ if(!@ldap_set_option($this->con, LDAP_OPT_REFERRALS,
+ $this->cnf['referrals'])){
+ msg('Setting LDAP referrals to off failed',-1);
+ if($this->cnf['debug'])
+ msg('LDAP referal set: '.htmlspecialchars(ldap_error($this->con)),0,__LINE__,__FILE__);
+ }
+ }
+ }
+ }
+
+ //set deref mode
+ if($this->cnf['deref']){
+ if(!@ldap_set_option($this->con, LDAP_OPT_DEREF, $this->cnf['deref'])){
+ msg('Setting LDAP Deref mode '.$this->cnf['deref'].' failed',-1);
+ if($this->cnf['debug'])
+ msg('LDAP deref set: '.htmlspecialchars(ldap_error($this->con)),0,__LINE__,__FILE__);
+ }
+ }
+
+ return true;
+ }
+}
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/auth/mysql.class.php b/mod/dokuwiki/vendors/dokuwiki/inc/auth/mysql.class.php
new file mode 100644
index 000000000..b1c6a3a52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/auth/mysql.class.php
@@ -0,0 +1,942 @@
+<?php
+/**
+ * MySQLP authentication backend
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Chris Smith <chris@jalakai.co.uk>
+ * @author Matthias Grimm <matthias.grimmm@sourceforge.net>
+*/
+
+define('DOKU_AUTH', dirname(__FILE__));
+require_once(DOKU_AUTH.'/basic.class.php');
+
+class auth_mysql extends auth_basic {
+
+ var $dbcon = 0;
+ var $dbver = 0; // database version
+ var $dbrev = 0; // database revision
+ var $dbsub = 0; // database subrevision
+ var $cnf = null;
+ var $defaultgroup = "";
+
+ /**
+ * Constructor
+ *
+ * checks if the mysql interface is available, otherwise it will
+ * set the variable $success of the basis class to false
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function auth_mysql() {
+ global $conf;
+ $this->cnf = $conf['auth']['mysql'];
+
+ if (method_exists($this, 'auth_basic'))
+ parent::auth_basic();
+
+ if(!function_exists('mysql_connect')) {
+ if ($this->cnf['debug'])
+ msg("MySQL err: PHP MySQL extension not found.",-1,__LINE__,__FILE__);
+ $this->success = false;
+ return;
+ }
+
+ // default to UTF-8, you rarely want something else
+ if(!isset($this->cnf['charset'])) $this->cnf['charset'] = 'utf8';
+
+ $this->defaultgroup = $conf['defaultgroup'];
+
+ // set capabilities based upon config strings set
+ if (empty($this->cnf['server']) || empty($this->cnf['user']) ||
+ empty($this->cnf['password']) || empty($this->cnf['database'])){
+ if ($this->cnf['debug'])
+ msg("MySQL err: insufficient configuration.",-1,__LINE__,__FILE__);
+ $this->success = false;
+ return;
+ }
+
+ $this->cando['addUser'] = $this->_chkcnf(array('getUserInfo',
+ 'getGroups',
+ 'addUser',
+ 'getUserID',
+ 'getGroupID',
+ 'addGroup',
+ 'addUserGroup'),true);
+ $this->cando['delUser'] = $this->_chkcnf(array('getUserID',
+ 'delUser',
+ 'delUserRefs'),true);
+ $this->cando['modLogin'] = $this->_chkcnf(array('getUserID',
+ 'updateUser',
+ 'UpdateTarget'),true);
+ $this->cando['modPass'] = $this->cando['modLogin'];
+ $this->cando['modName'] = $this->cando['modLogin'];
+ $this->cando['modMail'] = $this->cando['modLogin'];
+ $this->cando['modGroups'] = $this->_chkcnf(array('getUserID',
+ 'getGroups',
+ 'getGroupID',
+ 'addGroup',
+ 'addUserGroup',
+ 'delGroup',
+ 'getGroupID',
+ 'delUserGroup'),true);
+ /* getGroups is not yet supported
+ $this->cando['getGroups'] = $this->_chkcnf(array('getGroups',
+ 'getGroupID'),false); */
+ $this->cando['getUsers'] = $this->_chkcnf(array('getUsers',
+ 'getUserInfo',
+ 'getGroups'),false);
+ $this->cando['getUserCount'] = $this->_chkcnf(array('getUsers'),false);
+ }
+
+ /**
+ * Check if the given config strings are set
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ * @return bool
+ */
+ function _chkcnf($keys, $wop=false){
+ foreach ($keys as $key){
+ if (empty($this->cnf[$key])) return false;
+ }
+
+ /* write operation and lock array filled with tables names? */
+ if ($wop && (!is_array($this->cnf['TablesToLock']) ||
+ !count($this->cnf['TablesToLock']))){
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Checks if the given user exists and the given plaintext password
+ * is correct. Furtheron it might be checked wether the user is
+ * member of the right group
+ *
+ * Depending on which SQL string is defined in the config, password
+ * checking is done here (getpass) or by the database (passcheck)
+ *
+ * @param $user user who would like access
+ * @param $pass user's clear text password to check
+ * @return bool
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function checkPass($user,$pass){
+ $rc = false;
+
+ if($this->_openDB()) {
+ $sql = str_replace('%{user}',$this->_escape($user),$this->cnf['checkPass']);
+ $sql = str_replace('%{pass}',$this->_escape($pass),$sql);
+ $sql = str_replace('%{dgroup}',$this->_escape($this->defaultgroup),$sql);
+ $result = $this->_queryDB($sql);
+
+ if($result !== false && count($result) == 1) {
+ if($this->cnf['forwardClearPass'] == 1)
+ $rc = true;
+ else
+ $rc = auth_verifyPassword($pass,$result[0]['pass']);
+ }
+ $this->_closeDB();
+ }
+ return $rc;
+ }
+
+ /**
+ * [public function]
+ *
+ * Returns info about the given user needs to contain
+ * at least these fields:
+ * name string full name of the user
+ * mail string email addres of the user
+ * grps array list of groups the user is in
+ *
+ * @param $user user's nick to get data for
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function getUserData($user){
+ if($this->_openDB()) {
+ $this->_lockTables("READ");
+ $info = $this->_getUserInfo($user);
+ $this->_unlockTables();
+ $this->_closeDB();
+ } else
+ $info = false;
+ return $info;
+ }
+
+ /**
+ * [public function]
+ *
+ * Create a new User. Returns false if the user already exists,
+ * null when an error occurred and true if everything went well.
+ *
+ * The new user will be added to the default group by this
+ * function if grps are not specified (default behaviour).
+ *
+ * @param $user nick of the user
+ * @param $pwd clear text password
+ * @param $name full name of the user
+ * @param $mail email address
+ * @param $grps array of groups the user should become member of
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Chris Smith <chris@jalakai.co.uk>
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function createUser($user,$pwd,$name,$mail,$grps=null){
+ if($this->_openDB()) {
+ if (($info = $this->_getUserInfo($user)) !== false)
+ return false; // user already exists
+
+ // set defaultgroup if no groups were given
+ if ($grps == null)
+ $grps = array($this->defaultgroup);
+
+ $this->_lockTables("WRITE");
+ $pwd = $this->cnf['forwardClearPass'] ? $pwd : auth_cryptPassword($pwd);
+ $rc = $this->_addUser($user,$pwd,$name,$mail,$grps);
+ $this->_unlockTables();
+ $this->_closeDB();
+ if ($rc) return true;
+ }
+ return null; // return error
+ }
+
+ /**
+ * Modify user data [public function]
+ *
+ * An existing user dataset will be modified. Changes are given in an array.
+ *
+ * The dataset update will be rejected if the user name should be changed
+ * to an already existing one.
+ *
+ * The password must be provides unencrypted. Pasword cryption is done
+ * automatically if configured.
+ *
+ * If one or more groups could't be updated, an error would be set. In
+ * this case the dataset might already be changed and we can't rollback
+ * the changes. Transactions would be really usefull here.
+ *
+ * modifyUser() may be called without SQL statements defined that are
+ * needed to change group membership (for example if only the user profile
+ * should be modified). In this case we asure that we don't touch groups
+ * even $changes['grps'] is set by mistake.
+ *
+ * @param $user nick of the user to be changed
+ * @param $changes array of field/value pairs to be changed (password
+ * will be clear text)
+ * @return bool true on success, false on error
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function modifyUser($user, $changes) {
+ $rc = false;
+
+ if (!is_array($changes) || !count($changes))
+ return true; // nothing to change
+
+ if($this->_openDB()) {
+ $this->_lockTables("WRITE");
+
+ if (($uid = $this->_getUserID($user))) {
+ $rc = $this->_updateUserInfo($changes, $uid);
+
+ if ($rc && isset($changes['grps']) && $this->cando['modGroups']) {
+ $groups = $this->_getGroups($user);
+ $grpadd = array_diff($changes['grps'], $groups);
+ $grpdel = array_diff($groups, $changes['grps']);
+
+ foreach($grpadd as $group)
+ if (($this->_addUserToGroup($user, $group, 1)) == false)
+ $rc = false;
+
+ foreach($grpdel as $group)
+ if (($this->_delUserFromGroup($user, $group)) == false)
+ $rc = false;
+ }
+ }
+
+ $this->_unlockTables();
+ $this->_closeDB();
+ }
+ return $rc;
+ }
+
+ /**
+ * [public function]
+ *
+ * Remove one or more users from the list of registered users
+ *
+ * @param array $users array of users to be deleted
+ * @return int the number of users deleted
+ *
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function deleteUsers($users) {
+ $count = 0;
+
+ if($this->_openDB()) {
+ if (is_array($users) && count($users)) {
+ $this->_lockTables("WRITE");
+ foreach ($users as $user) {
+ if ($this->_delUser($user))
+ $count++;
+ }
+ $this->_unlockTables();
+ }
+ $this->_closeDB();
+ }
+ return $count;
+ }
+
+ /**
+ * [public function]
+ *
+ * Counts users which meet certain $filter criteria.
+ *
+ * @param array $filter filter criteria in item/pattern pairs
+ * @return count of found users.
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function getUserCount($filter=array()) {
+ $rc = 0;
+
+ if($this->_openDB()) {
+ $sql = $this->_createSQLFilter($this->cnf['getUsers'], $filter);
+
+ if ($this->dbver >= 4) {
+ $sql = substr($sql, 6); /* remove 'SELECT' or 'select' */
+ $sql = "SELECT SQL_CALC_FOUND_ROWS".$sql." LIMIT 1";
+ $this->_queryDB($sql);
+ $result = $this->_queryDB("SELECT FOUND_ROWS()");
+ $rc = $result[0]['FOUND_ROWS()'];
+ } else if (($result = $this->_queryDB($sql)))
+ $rc = count($result);
+
+ $this->_closeDB();
+ }
+ return $rc;
+ }
+
+ /**
+ * Bulk retrieval of user data. [public function]
+ *
+ * @param first index of first user to be returned
+ * @param limit max number of users to be returned
+ * @param filter array of field/pattern pairs
+ * @return array of userinfo (refer getUserData for internal userinfo details)
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function retrieveUsers($first=0,$limit=10,$filter=array()) {
+ $out = array();
+
+ if($this->_openDB()) {
+ $this->_lockTables("READ");
+ $sql = $this->_createSQLFilter($this->cnf['getUsers'], $filter);
+ $sql .= " ".$this->cnf['SortOrder']." LIMIT $first, $limit";
+ $result = $this->_queryDB($sql);
+
+ if (!empty($result)) {
+ foreach ($result as $user)
+ if (($info = $this->_getUserInfo($user['user'])))
+ $out[$user['user']] = $info;
+ }
+
+ $this->_unlockTables();
+ $this->_closeDB();
+ }
+ return $out;
+ }
+
+ /**
+ * Give user membership of a group [public function]
+ *
+ * @param $user
+ * @param $group
+ * @return bool true on success, false on error
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function joinGroup($user, $group) {
+ $rc = false;
+
+ if ($this->_openDB()) {
+ $this->_lockTables("WRITE");
+ $rc = $this->_addUserToGroup($user, $group);
+ $this->_unlockTables();
+ $this->_closeDB();
+ }
+ return $rc;
+ }
+
+ /**
+ * Remove user from a group [public function]
+ *
+ * @param $user user that leaves a group
+ * @param $group group to leave
+ * @return bool
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function leaveGroup($user, $group) {
+ $rc = false;
+
+ if ($this->_openDB()) {
+ $this->_lockTables("WRITE");
+ $uid = $this->_getUserID($user);
+ $rc = $this->_delUserFromGroup($user, $group);
+ $this->_unlockTables();
+ $this->_closeDB();
+ }
+ return $rc;
+ }
+
+ /**
+ * MySQL is case-insensitive
+ */
+ function isCaseSensitive(){
+ return false;
+ }
+
+ /**
+ * Adds a user to a group.
+ *
+ * If $force is set to '1' non existing groups would be created.
+ *
+ * The database connection must already be established. Otherwise
+ * this function does nothing and returns 'false'. It is strongly
+ * recommended to call this function only after all participating
+ * tables (group and usergroup) have been locked.
+ *
+ * @param $user user to add to a group
+ * @param $group name of the group
+ * @param $force '1' create missing groups
+ * @return bool 'true' on success, 'false' on error
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function _addUserToGroup($user, $group, $force=0) {
+ $newgroup = 0;
+
+ if (($this->dbcon) && ($user)) {
+ $gid = $this->_getGroupID($group);
+ if (!$gid) {
+ if ($force) { // create missing groups
+ $sql = str_replace('%{group}',$this->_escape($group),$this->cnf['addGroup']);
+ $gid = $this->_modifyDB($sql);
+ $newgroup = 1; // group newly created
+ }
+ if (!$gid) return false; // group didn't exist and can't be created
+ }
+
+ $sql = $this->cnf['addUserGroup'];
+ if(strpos($sql,'%{uid}') !== false){
+ $uid = $this->_getUserID($user);
+ $sql = str_replace('%{uid}', $this->_escape($uid),$sql);
+ }
+ $sql = str_replace('%{user}', $this->_escape($user),$sql);
+ $sql = str_replace('%{gid}', $this->_escape($gid),$sql);
+ $sql = str_replace('%{group}',$this->_escape($group),$sql);
+ if ($this->_modifyDB($sql) !== false) return true;
+
+ if ($newgroup) { // remove previously created group on error
+ $sql = str_replace('%{gid}', $this->_escape($gid),$this->cnf['delGroup']);
+ $sql = str_replace('%{group}',$this->_escape($group),$sql);
+ $this->_modifyDB($sql);
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Remove user from a group
+ *
+ * @param $user user that leaves a group
+ * @param $group group to leave
+ * @return bool true on success, false on error
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function _delUserFromGroup($user, $group) {
+ $rc = false;
+
+
+ if (($this->dbcon) && ($user)) {
+ $sql = $this->cnf['delUserGroup'];
+ if(strpos($sql,'%{uid}') !== false){
+ $uid = $this->_getUserID($user);
+ $sql = str_replace('%{uid}', $this->_escape($uid),$sql);
+ }
+ $gid = $this->_getGroupID($group);
+ if ($gid) {
+ $sql = str_replace('%{user}', $this->_escape($user),$sql);
+ $sql = str_replace('%{gid}', $this->_escape($gid),$sql);
+ $sql = str_replace('%{group}',$this->_escape($group),$sql);
+ $rc = $this->_modifyDB($sql) == 0 ? true : false;
+ }
+ }
+ return $rc;
+ }
+
+ /**
+ * Retrieves a list of groups the user is a member off.
+ *
+ * The database connection must already be established
+ * for this function to work. Otherwise it will return
+ * 'false'.
+ *
+ * @param $user user whose groups should be listed
+ * @return bool false on error
+ * @return array array containing all groups on success
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function _getGroups($user) {
+ $groups = array();
+
+ if($this->dbcon) {
+ $sql = str_replace('%{user}',$this->_escape($user),$this->cnf['getGroups']);
+ $result = $this->_queryDB($sql);
+
+ if($result !== false && count($result)) {
+ foreach($result as $row)
+ $groups[] = $row['group'];
+ }
+ return $groups;
+ }
+ return false;
+ }
+
+ /**
+ * Retrieves the user id of a given user name
+ *
+ * The database connection must already be established
+ * for this function to work. Otherwise it will return
+ * 'false'.
+ *
+ * @param $user user whose id is desired
+ * @return user id
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function _getUserID($user) {
+ if($this->dbcon) {
+ $sql = str_replace('%{user}',$this->_escape($user),$this->cnf['getUserID']);
+ $result = $this->_queryDB($sql);
+ return $result === false ? false : $result[0]['id'];
+ }
+ return false;
+ }
+
+ /**
+ * Adds a new User to the database.
+ *
+ * The database connection must already be established
+ * for this function to work. Otherwise it will return
+ * 'false'.
+ *
+ * @param $user login of the user
+ * @param $pwd encrypted password
+ * @param $name full name of the user
+ * @param $mail email address
+ * @param $grps array of groups the user should become member of
+ * @return bool
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Chris Smith <chris@jalakai.co.uk>
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function _addUser($user,$pwd,$name,$mail,$grps){
+ if($this->dbcon && is_array($grps)) {
+ $sql = str_replace('%{user}', $this->_escape($user),$this->cnf['addUser']);
+ $sql = str_replace('%{pass}', $this->_escape($pwd),$sql);
+ $sql = str_replace('%{name}', $this->_escape($name),$sql);
+ $sql = str_replace('%{email}',$this->_escape($mail),$sql);
+ $uid = $this->_modifyDB($sql);
+
+ if ($uid) {
+ foreach($grps as $group) {
+ $gid = $this->_addUserToGroup($user, $group, 1);
+ if ($gid === false) break;
+ }
+
+ if ($gid) return true;
+ else {
+ /* remove the new user and all group relations if a group can't
+ * be assigned. Newly created groups will remain in the database
+ * and won't be removed. This might create orphaned groups but
+ * is not a big issue so we ignore this problem here.
+ */
+ $this->_delUser($user);
+ if ($this->cnf['debug'])
+ msg ("MySQL err: Adding user '$user' to group '$group' failed.",-1,__LINE__,__FILE__);
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Deletes a given user and all his group references.
+ *
+ * The database connection must already be established
+ * for this function to work. Otherwise it will return
+ * 'false'.
+ *
+ * @param $user user whose id is desired
+ * @return bool
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function _delUser($user) {
+ if($this->dbcon) {
+ $uid = $this->_getUserID($user);
+ if ($uid) {
+ $sql = str_replace('%{uid}',$this->_escape($uid),$this->cnf['delUserRefs']);
+ $this->_modifyDB($sql);
+ $sql = str_replace('%{uid}',$this->_escape($uid),$this->cnf['delUser']);
+ $sql = str_replace('%{user}', $this->_escape($user),$sql);
+ $this->_modifyDB($sql);
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * getUserInfo
+ *
+ * Gets the data for a specific user The database connection
+ * must already be established for this function to work.
+ * Otherwise it will return 'false'.
+ *
+ * @param $user user's nick to get data for
+ * @return bool false on error
+ * @return array user info on success
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function _getUserInfo($user){
+ $sql = str_replace('%{user}',$this->_escape($user),$this->cnf['getUserInfo']);
+ $result = $this->_queryDB($sql);
+ if($result !== false && count($result)) {
+ $info = $result[0];
+ $info['grps'] = $this->_getGroups($user);
+ return $info;
+ }
+ return false;
+ }
+
+ /**
+ * Updates the user info in the database
+ *
+ * Update a user data structure in the database according changes
+ * given in an array. The user name can only be changes if it didn't
+ * exists already. If the new user name exists the update procedure
+ * will be aborted. The database keeps unchanged.
+ *
+ * The database connection has already to be established for this
+ * function to work. Otherwise it will return 'false'.
+ *
+ * The password will be crypted if necessary.
+ *
+ * @param $changes array of items to change as pairs of item and value
+ * @param $uid user id of dataset to change, must be unique in DB
+ * @return true on success or false on error
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function _updateUserInfo($changes, $uid) {
+ $sql = $this->cnf['updateUser']." ";
+ $cnt = 0;
+ $err = 0;
+
+ if($this->dbcon) {
+ foreach ($changes as $item => $value) {
+ if ($item == 'user') {
+ if (($this->_getUserID($changes['user']))) {
+ $err = 1; /* new username already exists */
+ break; /* abort update */
+ }
+ if ($cnt++ > 0) $sql .= ", ";
+ $sql .= str_replace('%{user}',$value,$this->cnf['UpdateLogin']);
+ } else if ($item == 'name') {
+ if ($cnt++ > 0) $sql .= ", ";
+ $sql .= str_replace('%{name}',$value,$this->cnf['UpdateName']);
+ } else if ($item == 'pass') {
+ if (!$this->cnf['forwardClearPass'])
+ $value = auth_cryptPassword($value);
+ if ($cnt++ > 0) $sql .= ", ";
+ $sql .= str_replace('%{pass}',$value,$this->cnf['UpdatePass']);
+ } else if ($item == 'mail') {
+ if ($cnt++ > 0) $sql .= ", ";
+ $sql .= str_replace('%{email}',$value,$this->cnf['UpdateEmail']);
+ }
+ }
+
+ if ($err == 0) {
+ if ($cnt > 0) {
+ $sql .= " ".str_replace('%{uid}', $uid, $this->cnf['UpdateTarget']);
+ if(get_class($this) == 'auth_mysql') $sql .= " LIMIT 1"; //some PgSQL inheritance comp.
+ $this->_modifyDB($sql);
+ }
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Retrieves the group id of a given group name
+ *
+ * The database connection must already be established
+ * for this function to work. Otherwise it will return
+ * 'false'.
+ *
+ * @param $group group name which id is desired
+ * @return group id
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function _getGroupID($group) {
+ if($this->dbcon) {
+ $sql = str_replace('%{group}',$this->_escape($group),$this->cnf['getGroupID']);
+ $result = $this->_queryDB($sql);
+ return $result === false ? false : $result[0]['id'];
+ }
+ return false;
+ }
+
+ /**
+ * Opens a connection to a database and saves the handle for further
+ * usage in the object. The successful call to this functions is
+ * essential for most functions in this object.
+ *
+ * @return bool
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function _openDB() {
+ if (!$this->dbcon) {
+ $con = @mysql_connect ($this->cnf['server'], $this->cnf['user'], $this->cnf['password']);
+ if ($con) {
+ if ((mysql_select_db($this->cnf['database'], $con))) {
+ if ((preg_match("/^(\d+)\.(\d+)\.(\d+).*/", mysql_get_server_info ($con), $result)) == 1) {
+ $this->dbver = $result[1];
+ $this->dbrev = $result[2];
+ $this->dbsub = $result[3];
+ }
+ $this->dbcon = $con;
+ if(!empty($this->cnf['charset'])){
+ mysql_query('SET CHARACTER SET "' . $this->cnf['charset'] . '"', $con);
+ }
+ return true; // connection and database successfully opened
+ } else {
+ mysql_close ($con);
+ if ($this->cnf['debug'])
+ msg("MySQL err: No access to database {$this->cnf['database']}.",-1,__LINE__,__FILE__);
+ }
+ } else if ($this->cnf['debug'])
+ msg ("MySQL err: Connection to {$this->cnf['user']}@{$this->cnf['server']} not possible.",
+ -1,__LINE__,__FILE__);
+
+ return false; // connection failed
+ }
+ return true; // connection already open
+ }
+
+ /**
+ * Closes a database connection.
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function _closeDB() {
+ if ($this->dbcon) {
+ mysql_close ($this->dbcon);
+ $this->dbcon = 0;
+ }
+ }
+
+ /**
+ * Sends a SQL query to the database and transforms the result into
+ * an associative array.
+ *
+ * This function is only able to handle queries that returns a
+ * table such as SELECT.
+ *
+ * @param $query SQL string that contains the query
+ * @return array with the result table
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function _queryDB($query) {
+ if($this->cnf['debug'] >= 2){
+ msg('MySQL query: '.hsc($query),0,__LINE__,__FILE__);
+ }
+
+ $resultarray = array();
+ if ($this->dbcon) {
+ $result = @mysql_query($query,$this->dbcon);
+ if ($result) {
+ while (($t = mysql_fetch_assoc($result)) !== false)
+ $resultarray[]=$t;
+ mysql_free_result ($result);
+ return $resultarray;
+ }
+ if ($this->cnf['debug'])
+ msg('MySQL err: '.mysql_error($this->dbcon),-1,__LINE__,__FILE__);
+ }
+ return false;
+ }
+
+ /**
+ * Sends a SQL query to the database
+ *
+ * This function is only able to handle queries that returns
+ * either nothing or an id value such as INPUT, DELETE, UPDATE, etc.
+ *
+ * @param $query SQL string that contains the query
+ * @return insert id or 0, false on error
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function _modifyDB($query) {
+ if ($this->dbcon) {
+ $result = @mysql_query($query,$this->dbcon);
+ if ($result) {
+ $rc = mysql_insert_id($this->dbcon); //give back ID on insert
+ if ($rc !== false) return $rc;
+ }
+ if ($this->cnf['debug'])
+ msg('MySQL err: '.mysql_error($this->dbcon),-1,__LINE__,__FILE__);
+ }
+ return false;
+ }
+
+ /**
+ * Locked a list of tables for exclusive access so that modifications
+ * to the database can't be disturbed by other threads. The list
+ * could be set with $conf['auth']['mysql']['TablesToLock'] = array()
+ *
+ * If aliases for tables are used in SQL statements, also this aliases
+ * must be locked. For eg. you use a table 'user' and the alias 'u' in
+ * some sql queries, the array must looks like this (order is important):
+ * array("user", "user AS u");
+ *
+ * MySQL V3 is not able to handle transactions with COMMIT/ROLLBACK
+ * so that this functionality is simulated by this function. Nevertheless
+ * it is not as powerful as transactions, it is a good compromise in safty.
+ *
+ * @param $mode could be 'READ' or 'WRITE'
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function _lockTables($mode) {
+ if ($this->dbcon) {
+ if (is_array($this->cnf['TablesToLock']) && !empty($this->cnf['TablesToLock'])) {
+ if ($mode == "READ" || $mode == "WRITE") {
+ $sql = "LOCK TABLES ";
+ $cnt = 0;
+ foreach ($this->cnf['TablesToLock'] as $table) {
+ if ($cnt++ != 0) $sql .= ", ";
+ $sql .= "$table $mode";
+ }
+ $this->_modifyDB($sql);
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Unlock locked tables. All existing locks of this thread will be
+ * abrogated.
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function _unlockTables() {
+ if ($this->dbcon) {
+ $this->_modifyDB("UNLOCK TABLES");
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Transforms the filter settings in an filter string for a SQL database
+ * The database connection must already be established, otherwise the
+ * original SQL string without filter criteria will be returned.
+ *
+ * @param $sql SQL string to which the $filter criteria should be added
+ * @param $filter array of filter criteria as pairs of item and pattern
+ * @return SQL string with attached $filter criteria on success
+ * @return the original SQL string on error.
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function _createSQLFilter($sql, $filter) {
+ $SQLfilter = "";
+ $cnt = 0;
+
+ if ($this->dbcon) {
+ foreach ($filter as $item => $pattern) {
+ $tmp = '%'.$this->_escape($pattern).'%';
+ if ($item == 'user') {
+ if ($cnt++ > 0) $SQLfilter .= " AND ";
+ $SQLfilter .= str_replace('%{user}',$tmp,$this->cnf['FilterLogin']);
+ } else if ($item == 'name') {
+ if ($cnt++ > 0) $SQLfilter .= " AND ";
+ $SQLfilter .= str_replace('%{name}',$tmp,$this->cnf['FilterName']);
+ } else if ($item == 'mail') {
+ if ($cnt++ > 0) $SQLfilter .= " AND ";
+ $SQLfilter .= str_replace('%{email}',$tmp,$this->cnf['FilterEmail']);
+ } else if ($item == 'grps') {
+ if ($cnt++ > 0) $SQLfilter .= " AND ";
+ $SQLfilter .= str_replace('%{group}',$tmp,$this->cnf['FilterGroup']);
+ }
+ }
+
+ // we have to check SQLfilter here and must not use $cnt because if
+ // any of cnf['Filter????'] is not defined, a malformed SQL string
+ // would be generated.
+
+ if (strlen($SQLfilter)) {
+ $glue = strpos(strtolower($sql),"where") ? " AND " : " WHERE ";
+ $sql = $sql.$glue.$SQLfilter;
+ }
+ }
+
+ return $sql;
+ }
+
+ /**
+ * Escape a string for insertion into the database
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @param string $string The string to escape
+ * @param boolean $like Escape wildcard chars as well?
+ */
+ function _escape($string,$like=false){
+ if($this->dbcon){
+ $string = mysql_real_escape_string($string, $this->dbcon);
+ }else{
+ $string = addslashes($string);
+ }
+ if($like){
+ $string = addcslashes($string,'%_');
+ }
+ return $string;
+ }
+}
+
+//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/auth/pgsql.class.php b/mod/dokuwiki/vendors/dokuwiki/inc/auth/pgsql.class.php
new file mode 100644
index 000000000..a6da56af5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/auth/pgsql.class.php
@@ -0,0 +1,411 @@
+<?php
+/**
+ * PgSQL authentication backend
+ *
+ * This class inherits much functionality from the MySQL class
+ * and just reimplements the Postgres specific parts.
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Chris Smith <chris@jalakai.co.uk>
+ * @author Matthias Grimm <matthias.grimmm@sourceforge.net>
+*/
+
+define('DOKU_AUTH', dirname(__FILE__));
+require_once(DOKU_AUTH.'/mysql.class.php');
+
+class auth_pgsql extends auth_mysql {
+
+ /**
+ * Constructor
+ *
+ * checks if the pgsql interface is available, otherwise it will
+ * set the variable $success of the basis class to false
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function auth_pgsql() {
+ global $conf;
+ $this->cnf = $conf['auth']['pgsql'];
+ if(!$this->cnf['port']) $this->cnf['port'] = 5432;
+
+ if (method_exists($this, 'auth_basic'))
+ parent::auth_basic();
+
+ if(!function_exists('pg_connect')) {
+ if ($this->cnf['debug'])
+ msg("PgSQL err: PHP Postgres extension not found.",-1);
+ $this->success = false;
+ return;
+ }
+
+ $this->defaultgroup = $conf['defaultgroup'];
+
+ // set capabilities based upon config strings set
+ if (empty($this->cnf['user']) ||
+ empty($this->cnf['password']) || empty($this->cnf['database'])){
+ if ($this->cnf['debug'])
+ msg("PgSQL err: insufficient configuration.",-1,__LINE__,__FILE__);
+ $this->success = false;
+ return;
+ }
+
+ $this->cando['addUser'] = $this->_chkcnf(array('getUserInfo',
+ 'getGroups',
+ 'addUser',
+ 'getUserID',
+ 'getGroupID',
+ 'addGroup',
+ 'addUserGroup'));
+ $this->cando['delUser'] = $this->_chkcnf(array('getUserID',
+ 'delUser',
+ 'delUserRefs'));
+ $this->cando['modLogin'] = $this->_chkcnf(array('getUserID',
+ 'updateUser',
+ 'UpdateTarget'));
+ $this->cando['modPass'] = $this->cando['modLogin'];
+ $this->cando['modName'] = $this->cando['modLogin'];
+ $this->cando['modMail'] = $this->cando['modLogin'];
+ $this->cando['modGroups'] = $this->_chkcnf(array('getUserID',
+ 'getGroups',
+ 'getGroupID',
+ 'addGroup',
+ 'addUserGroup',
+ 'delGroup',
+ 'getGroupID',
+ 'delUserGroup'));
+ /* getGroups is not yet supported
+ $this->cando['getGroups'] = $this->_chkcnf(array('getGroups',
+ 'getGroupID')); */
+ $this->cando['getUsers'] = $this->_chkcnf(array('getUsers',
+ 'getUserInfo',
+ 'getGroups'));
+ $this->cando['getUserCount'] = $this->_chkcnf(array('getUsers'));
+ }
+
+ /**
+ * Check if the given config strings are set
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ * @return bool
+ */
+ function _chkcnf($keys, $wop=false){
+ foreach ($keys as $key){
+ if (empty($this->cnf[$key])) return false;
+ }
+ return true;
+ }
+
+ // @inherit function checkPass($user,$pass)
+ // @inherit function getUserData($user)
+ // @inherit function createUser($user,$pwd,$name,$mail,$grps=null)
+ // @inherit function modifyUser($user, $changes)
+ // @inherit function deleteUsers($users)
+
+
+ /**
+ * [public function]
+ *
+ * Counts users which meet certain $filter criteria.
+ *
+ * @param array $filter filter criteria in item/pattern pairs
+ * @return count of found users.
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function getUserCount($filter=array()) {
+ $rc = 0;
+
+ if($this->_openDB()) {
+ $sql = $this->_createSQLFilter($this->cnf['getUsers'], $filter);
+
+ // no equivalent of SQL_CALC_FOUND_ROWS in pgsql?
+ if (($result = $this->_queryDB($sql))){
+ $rc = count($result);
+ }
+ $this->_closeDB();
+ }
+ return $rc;
+ }
+
+ /**
+ * Bulk retrieval of user data. [public function]
+ *
+ * @param first index of first user to be returned
+ * @param limit max number of users to be returned
+ * @param filter array of field/pattern pairs
+ * @return array of userinfo (refer getUserData for internal userinfo details)
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function retrieveUsers($first=0,$limit=10,$filter=array()) {
+ $out = array();
+
+ if($this->_openDB()) {
+ $this->_lockTables("READ");
+ $sql = $this->_createSQLFilter($this->cnf['getUsers'], $filter);
+ $sql .= " ".$this->cnf['SortOrder']." LIMIT $limit OFFSET $first";
+ $result = $this->_queryDB($sql);
+
+ foreach ($result as $user)
+ if (($info = $this->_getUserInfo($user['user'])))
+ $out[$user['user']] = $info;
+
+ $this->_unlockTables();
+ $this->_closeDB();
+ }
+ return $out;
+ }
+
+ // @inherit function joinGroup($user, $group)
+ // @inherit function leaveGroup($user, $group) {
+
+ /**
+ * Adds a user to a group.
+ *
+ * If $force is set to '1' non existing groups would be created.
+ *
+ * The database connection must already be established. Otherwise
+ * this function does nothing and returns 'false'.
+ *
+ * @param $user user to add to a group
+ * @param $group name of the group
+ * @param $force '1' create missing groups
+ * @return bool 'true' on success, 'false' on error
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _addUserToGroup($user, $group, $force=0) {
+ $newgroup = 0;
+
+ if (($this->dbcon) && ($user)) {
+ $gid = $this->_getGroupID($group);
+ if (!$gid) {
+ if ($force) { // create missing groups
+ $sql = str_replace('%{group}',addslashes($group),$this->cnf['addGroup']);
+ $this->_modifyDB($sql);
+ //group should now exists try again to fetch it
+ $gid = $this->_getGroupID($group);
+ $newgroup = 1; // group newly created
+ }
+ }
+ if (!$gid) return false; // group didn't exist and can't be created
+
+ $sql = $this->cnf['addUserGroup'];
+ if(strpos($sql,'%{uid}') !== false){
+ $uid = $this->_getUserID($user);
+ $sql = str_replace('%{uid}', addslashes($uid), $sql);
+ }
+ $sql = str_replace('%{user}', addslashes($user),$sql);
+ $sql = str_replace('%{gid}', addslashes($gid),$sql);
+ $sql = str_replace('%{group}',addslashes($group),$sql);
+ if ($this->_modifyDB($sql) !== false) return true;
+
+ if ($newgroup) { // remove previously created group on error
+ $sql = str_replace('%{gid}', addslashes($gid),$this->cnf['delGroup']);
+ $sql = str_replace('%{group}',addslashes($group),$sql);
+ $this->_modifyDB($sql);
+ }
+ }
+ return false;
+ }
+
+ // @inherit function _delUserFromGroup($user $group)
+ // @inherit function _getGroups($user)
+ // @inherit function _getUserID($user)
+
+ /**
+ * Adds a new User to the database.
+ *
+ * The database connection must already be established
+ * for this function to work. Otherwise it will return
+ * 'false'.
+ *
+ * @param $user login of the user
+ * @param $pwd encrypted password
+ * @param $name full name of the user
+ * @param $mail email address
+ * @param $grps array of groups the user should become member of
+ * @return bool
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Chris Smith <chris@jalakai.co.uk>
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function _addUser($user,$pwd,$name,$mail,$grps){
+ if($this->dbcon && is_array($grps)) {
+ $sql = str_replace('%{user}', addslashes($user),$this->cnf['addUser']);
+ $sql = str_replace('%{pass}', addslashes($pwd),$sql);
+ $sql = str_replace('%{name}', addslashes($name),$sql);
+ $sql = str_replace('%{email}',addslashes($mail),$sql);
+ if($this->_modifyDB($sql)){
+ $uid = $this->_getUserID($user);
+ }else{
+ return false;
+ }
+
+ if ($uid) {
+ foreach($grps as $group) {
+ $gid = $this->_addUserToGroup($user, $group, 1);
+ if ($gid === false) break;
+ }
+
+ if ($gid) return true;
+ else {
+ /* remove the new user and all group relations if a group can't
+ * be assigned. Newly created groups will remain in the database
+ * and won't be removed. This might create orphaned groups but
+ * is not a big issue so we ignore this problem here.
+ */
+ $this->_delUser($user);
+ if ($this->cnf['debug'])
+ msg("PgSQL err: Adding user '$user' to group '$group' failed.",-1,__LINE__,__FILE__);
+ }
+ }
+ }
+ return false;
+ }
+
+ // @inherit function _delUser($user)
+ // @inherit function _getUserInfo($user)
+ // @inherit function _updateUserInfo($changes, $uid)
+ // @inherit function _getGroupID($group)
+
+ /**
+ * Opens a connection to a database and saves the handle for further
+ * usage in the object. The successful call to this functions is
+ * essential for most functions in this object.
+ *
+ * @return bool
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function _openDB() {
+ if (!$this->dbcon) {
+ $dsn = $this->cnf['server'] ? 'host='.$this->cnf['server'] : '';
+ $dsn .= ' port='.$this->cnf['port'];
+ $dsn .= ' dbname='.$this->cnf['database'];
+ $dsn .= ' user='.$this->cnf['user'];
+ $dsn .= ' password='.$this->cnf['password'];
+
+ $con = @pg_connect($dsn);
+ if ($con) {
+ $this->dbcon = $con;
+ return true; // connection and database successfully opened
+ } else if ($this->cnf['debug']){
+ msg ("PgSQL err: Connection to {$this->cnf['user']}@{$this->cnf['server']} not possible.",
+ -1,__LINE__,__FILE__);
+ }
+ return false; // connection failed
+ }
+ return true; // connection already open
+ }
+
+ /**
+ * Closes a database connection.
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function _closeDB() {
+ if ($this->dbcon) {
+ pg_close ($this->dbcon);
+ $this->dbcon = 0;
+ }
+ }
+
+ /**
+ * Sends a SQL query to the database and transforms the result into
+ * an associative array.
+ *
+ * This function is only able to handle queries that returns a
+ * table such as SELECT.
+ *
+ * @param $query SQL string that contains the query
+ * @return array with the result table
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function _queryDB($query) {
+ if ($this->dbcon) {
+ $result = @pg_query($this->dbcon,$query);
+ if ($result) {
+ while (($t = pg_fetch_assoc($result)) !== false)
+ $resultarray[]=$t;
+ pg_free_result ($result);
+ return $resultarray;
+ }elseif ($this->cnf['debug'])
+ msg('PgSQL err: '.pg_last_error($this->dbcon),-1,__LINE__,__FILE__);
+ }
+ return false;
+ }
+
+ /**
+ * Executes an update or insert query. This differs from the
+ * MySQL one because it does NOT return the last insertID
+ *
+ * @author Andreas Gohr
+ */
+ function _modifyDB($query) {
+ if ($this->dbcon) {
+ $result = @pg_query($this->dbcon,$query);
+ if ($result) {
+ pg_free_result ($result);
+ return true;
+ }
+ if ($this->cnf['debug']){
+ msg('PgSQL err: '.pg_last_error($this->dbcon),-1,__LINE__,__FILE__);
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Start a transaction
+ *
+ * @param $mode could be 'READ' or 'WRITE'
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function _lockTables($mode) {
+ if ($this->dbcon) {
+ $this->_modifyDB('BEGIN');
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Commit a transaction
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function _unlockTables() {
+ if ($this->dbcon) {
+ $this->_modifyDB('COMMIT');
+ return true;
+ }
+ return false;
+ }
+
+ // @inherit function _createSQLFilter($sql, $filter)
+
+
+ /**
+ * Escape a string for insertion into the database
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @param string $string The string to escape
+ * @param boolean $like Escape wildcard chars as well?
+ */
+ function _escape($string,$like=false){
+ $string = pg_escape_string($string);
+ if($like){
+ $string = addcslashes($string,'%_');
+ }
+ return $string;
+ }
+
+}
+
+//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/auth/plain.class.php b/mod/dokuwiki/vendors/dokuwiki/inc/auth/plain.class.php
new file mode 100644
index 000000000..94e0c6bc2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/auth/plain.class.php
@@ -0,0 +1,324 @@
+<?php
+/**
+ * Plaintext authentication backend
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Chris Smith <chris@jalakai.co.uk>
+ */
+
+define('DOKU_AUTH', dirname(__FILE__));
+require_once(DOKU_AUTH.'/basic.class.php');
+
+define('AUTH_USERFILE',DOKU_CONF.'users.auth.php');
+
+class auth_plain extends auth_basic {
+
+ var $users = null;
+ var $_pattern = array();
+
+ /**
+ * Constructor
+ *
+ * Carry out sanity checks to ensure the object is
+ * able to operate. Set capabilities.
+ *
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ */
+ function auth_plain() {
+ if (!@is_readable(AUTH_USERFILE)){
+ $this->success = false;
+ }else{
+ if(@is_writable(AUTH_USERFILE)){
+ $this->cando['addUser'] = true;
+ $this->cando['delUser'] = true;
+ $this->cando['modLogin'] = true;
+ $this->cando['modPass'] = true;
+ $this->cando['modName'] = true;
+ $this->cando['modMail'] = true;
+ $this->cando['modGroups'] = true;
+ }
+ $this->cando['getUsers'] = true;
+ $this->cando['getUserCount'] = true;
+ }
+ }
+
+ /**
+ * Check user+password [required auth function]
+ *
+ * Checks if the given user exists and the given
+ * plaintext password is correct
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @return bool
+ */
+ function checkPass($user,$pass){
+
+ $userinfo = $this->getUserData($user);
+ if ($userinfo === false) return false;
+
+ return auth_verifyPassword($pass,$this->users[$user]['pass']);
+ }
+
+ /**
+ * Return user info
+ *
+ * Returns info about the given user needs to contain
+ * at least these fields:
+ *
+ * name string full name of the user
+ * mail string email addres of the user
+ * grps array list of groups the user is in
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function getUserData($user){
+
+ if($this->users === null) $this->_loadUserData();
+ return isset($this->users[$user]) ? $this->users[$user] : false;
+ }
+
+ /**
+ * Create a new User
+ *
+ * Returns false if the user already exists, null when an error
+ * occurred and true if everything went well.
+ *
+ * The new user will be added to the default group by this
+ * function if grps are not specified (default behaviour).
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Chris Smith <chris@jalakai.co.uk>
+ */
+ function createUser($user,$pwd,$name,$mail,$grps=null){
+ global $conf;
+
+ // user mustn't already exist
+ if ($this->getUserData($user) !== false) return false;
+
+ $pass = auth_cryptPassword($pwd);
+
+ // set default group if no groups specified
+ if (!is_array($grps)) $grps = array($conf['defaultgroup']);
+
+ // prepare user line
+ $groups = join(',',$grps);
+ $userline = join(':',array($user,$pass,$name,$mail,$groups))."\n";
+
+ if (io_saveFile(AUTH_USERFILE,$userline,true)) {
+ $this->users[$user] = compact('pass','name','mail','grps');
+ return $pwd;
+ }
+
+ msg('The '.AUTH_USERFILE.' file is not writable. Please inform the Wiki-Admin',-1);
+ return null;
+ }
+
+ /**
+ * Modify user data
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ * @param $user nick of the user to be changed
+ * @param $changes array of field/value pairs to be changed (password will be clear text)
+ * @return bool
+ */
+ function modifyUser($user, $changes) {
+ global $conf;
+ global $ACT;
+ global $INFO;
+
+ // sanity checks, user must already exist and there must be something to change
+ if (($userinfo = $this->getUserData($user)) === false) return false;
+ if (!is_array($changes) || !count($changes)) return true;
+
+ // update userinfo with new data, remembering to encrypt any password
+ $newuser = $user;
+ foreach ($changes as $field => $value) {
+ if ($field == 'user') {
+ $newuser = $value;
+ continue;
+ }
+ if ($field == 'pass') $value = auth_cryptPassword($value);
+ $userinfo[$field] = $value;
+ }
+
+ $groups = join(',',$userinfo['grps']);
+ $userline = join(':',array($newuser, $userinfo['pass'], $userinfo['name'], $userinfo['mail'], $groups))."\n";
+
+ if (!$this->deleteUsers(array($user))) {
+ msg('Unable to modify user data. Please inform the Wiki-Admin',-1);
+ return false;
+ }
+
+ if (!io_saveFile(AUTH_USERFILE,$userline,true)) {
+ msg('There was an error modifying your user data. You should register again.',-1);
+ // FIXME, user has been deleted but not recreated, should force a logout and redirect to login page
+ $ACT == 'register';
+ return false;
+ }
+
+ $this->users[$newuser] = $userinfo;
+ return true;
+ }
+
+ /**
+ * Remove one or more users from the list of registered users
+ *
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ * @param array $users array of users to be deleted
+ * @return int the number of users deleted
+ */
+ function deleteUsers($users) {
+
+ if (!is_array($users) || empty($users)) return 0;
+
+ if ($this->users === null) $this->_loadUserData();
+
+ $deleted = array();
+ foreach ($users as $user) {
+ if (isset($this->users[$user])) $deleted[] = preg_quote($user,'/');
+ }
+
+ if (empty($deleted)) return 0;
+
+ $pattern = '/^('.join('|',$deleted).'):/';
+
+ if (io_deleteFromFile(AUTH_USERFILE,$pattern,true)) {
+ foreach ($deleted as $user) unset($this->users[$user]);
+ return count($deleted);
+ }
+
+ // problem deleting, reload the user list and count the difference
+ $count = count($this->users);
+ $this->_loadUserData();
+ $count -= count($this->users);
+ return $count;
+ }
+
+ /**
+ * Return a count of the number of user which meet $filter criteria
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ */
+ function getUserCount($filter=array()) {
+ if($this->users === null) $this->_loadUserData();
+
+ if (!count($filter)) return count($this->users);
+
+ $count = 0;
+ $this->_constructPattern($filter);
+
+ foreach ($this->users as $user => $info) {
+ $count += $this->_filter($user, $info);
+ }
+
+ return $count;
+ }
+
+ /**
+ * Bulk retrieval of user data
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ * @param start index of first user to be returned
+ * @param limit max number of users to be returned
+ * @param filter array of field/pattern pairs
+ * @return array of userinfo (refer getUserData for internal userinfo details)
+ */
+ function retrieveUsers($start=0,$limit=0,$filter=array()) {
+
+ if ($this->users === null) $this->_loadUserData();
+
+ ksort($this->users);
+
+ $i = 0;
+ $count = 0;
+ $out = array();
+ $this->_constructPattern($filter);
+
+ foreach ($this->users as $user => $info) {
+ if ($this->_filter($user, $info)) {
+ if ($i >= $start) {
+ $out[$user] = $info;
+ $count++;
+ if (($limit > 0) && ($count >= $limit)) break;
+ }
+ $i++;
+ }
+ }
+
+ return $out;
+ }
+
+ /**
+ * Only valid pageid's (no namespaces) for usernames
+ */
+ function cleanUser($user){
+ global $conf;
+ return cleanID(str_replace(':',$conf['sepchar'],$user));
+ }
+
+ /**
+ * Only valid pageid's (no namespaces) for groupnames
+ */
+ function cleanGroup($group){
+ global $conf;
+ return cleanID(str_replace(':',$conf['sepchar'],$group));
+ }
+
+ /**
+ * Load all user data
+ *
+ * loads the user file into a datastructure
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _loadUserData(){
+ $this->users = array();
+
+ if(!@file_exists(AUTH_USERFILE)) return;
+
+ $lines = file(AUTH_USERFILE);
+ foreach($lines as $line){
+ $line = preg_replace('/#.*$/','',$line); //ignore comments
+ $line = trim($line);
+ if(empty($line)) continue;
+
+ $row = explode(":",$line,5);
+ $groups = array_values(array_filter(explode(",",$row[4])));
+
+ $this->users[$row[0]]['pass'] = $row[1];
+ $this->users[$row[0]]['name'] = urldecode($row[2]);
+ $this->users[$row[0]]['mail'] = $row[3];
+ $this->users[$row[0]]['grps'] = $groups;
+ }
+ }
+
+ /**
+ * return 1 if $user + $info match $filter criteria, 0 otherwise
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ */
+ function _filter($user, $info) {
+ // FIXME
+ foreach ($this->_pattern as $item => $pattern) {
+ if ($item == 'user') {
+ if (!preg_match($pattern, $user)) return 0;
+ } else if ($item == 'grps') {
+ if (!count(preg_grep($pattern, $info['grps']))) return 0;
+ } else {
+ if (!preg_match($pattern, $info[$item])) return 0;
+ }
+ }
+ return 1;
+ }
+
+ function _constructPattern($filter) {
+ $this->_pattern = array();
+ foreach ($filter as $item => $pattern) {
+// $this->_pattern[$item] = '/'.preg_quote($pattern,"/").'/i'; // don't allow regex characters
+ $this->_pattern[$item] = '/'.str_replace('/','\/',$pattern).'/i'; // allow regex characters
+ }
+ }
+}
+
+//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/blowfish.php b/mod/dokuwiki/vendors/dokuwiki/inc/blowfish.php
new file mode 100644
index 000000000..42e3a589a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/blowfish.php
@@ -0,0 +1,521 @@
+<?php
+/* vim: set expandtab sw=4 ts=4 sts=4: */
+/**
+ * The Cipher_blowfish:: class implements the Cipher interface enryption data
+ * using the Blowfish algorithm.
+ *
+ * $Horde: horde/lib/Cipher/blowfish.php,v 1.2.2.3 2003/01/03 13:23:22 jan Exp $
+ *
+ * Copyright 2002-2003 Mike Cochrane <mike@graftonhall.co.nz>
+ *
+ * See the enclosed file COPYING for license information (LGPL). If you
+ * did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
+ *
+ * @author Mike Cochrane <mike@graftonhall.co.nz>
+ * @version $Id: blowfish.php 11081 2008-01-25 09:35:48Z cybot_tm $
+ * @since Horde 2.2
+ * @package horde.cipher
+ */
+
+// Change for phpMyAdmin by lem9:
+//class Horde_Cipher_blowfish extends Horde_Cipher {
+class Horde_Cipher_blowfish
+{
+ /* Pi Array */
+ var $p = array(
+ 0x243F6A88, 0x85A308D3, 0x13198A2E, 0x03707344,
+ 0xA4093822, 0x299F31D0, 0x082EFA98, 0xEC4E6C89,
+ 0x452821E6, 0x38D01377, 0xBE5466CF, 0x34E90C6C,
+ 0xC0AC29B7, 0xC97C50DD, 0x3F84D5B5, 0xB5470917,
+ 0x9216D5D9, 0x8979FB1B);
+
+ /* S Boxes */
+ var $s1 = array(
+ 0xD1310BA6, 0x98DFB5AC, 0x2FFD72DB, 0xD01ADFB7,
+ 0xB8E1AFED, 0x6A267E96, 0xBA7C9045, 0xF12C7F99,
+ 0x24A19947, 0xB3916CF7, 0x0801F2E2, 0x858EFC16,
+ 0x636920D8, 0x71574E69, 0xA458FEA3, 0xF4933D7E,
+ 0x0D95748F, 0x728EB658, 0x718BCD58, 0x82154AEE,
+ 0x7B54A41D, 0xC25A59B5, 0x9C30D539, 0x2AF26013,
+ 0xC5D1B023, 0x286085F0, 0xCA417918, 0xB8DB38EF,
+ 0x8E79DCB0, 0x603A180E, 0x6C9E0E8B, 0xB01E8A3E,
+ 0xD71577C1, 0xBD314B27, 0x78AF2FDA, 0x55605C60,
+ 0xE65525F3, 0xAA55AB94, 0x57489862, 0x63E81440,
+ 0x55CA396A, 0x2AAB10B6, 0xB4CC5C34, 0x1141E8CE,
+ 0xA15486AF, 0x7C72E993, 0xB3EE1411, 0x636FBC2A,
+ 0x2BA9C55D, 0x741831F6, 0xCE5C3E16, 0x9B87931E,
+ 0xAFD6BA33, 0x6C24CF5C, 0x7A325381, 0x28958677,
+ 0x3B8F4898, 0x6B4BB9AF, 0xC4BFE81B, 0x66282193,
+ 0x61D809CC, 0xFB21A991, 0x487CAC60, 0x5DEC8032,
+ 0xEF845D5D, 0xE98575B1, 0xDC262302, 0xEB651B88,
+ 0x23893E81, 0xD396ACC5, 0x0F6D6FF3, 0x83F44239,
+ 0x2E0B4482, 0xA4842004, 0x69C8F04A, 0x9E1F9B5E,
+ 0x21C66842, 0xF6E96C9A, 0x670C9C61, 0xABD388F0,
+ 0x6A51A0D2, 0xD8542F68, 0x960FA728, 0xAB5133A3,
+ 0x6EEF0B6C, 0x137A3BE4, 0xBA3BF050, 0x7EFB2A98,
+ 0xA1F1651D, 0x39AF0176, 0x66CA593E, 0x82430E88,
+ 0x8CEE8619, 0x456F9FB4, 0x7D84A5C3, 0x3B8B5EBE,
+ 0xE06F75D8, 0x85C12073, 0x401A449F, 0x56C16AA6,
+ 0x4ED3AA62, 0x363F7706, 0x1BFEDF72, 0x429B023D,
+ 0x37D0D724, 0xD00A1248, 0xDB0FEAD3, 0x49F1C09B,
+ 0x075372C9, 0x80991B7B, 0x25D479D8, 0xF6E8DEF7,
+ 0xE3FE501A, 0xB6794C3B, 0x976CE0BD, 0x04C006BA,
+ 0xC1A94FB6, 0x409F60C4, 0x5E5C9EC2, 0x196A2463,
+ 0x68FB6FAF, 0x3E6C53B5, 0x1339B2EB, 0x3B52EC6F,
+ 0x6DFC511F, 0x9B30952C, 0xCC814544, 0xAF5EBD09,
+ 0xBEE3D004, 0xDE334AFD, 0x660F2807, 0x192E4BB3,
+ 0xC0CBA857, 0x45C8740F, 0xD20B5F39, 0xB9D3FBDB,
+ 0x5579C0BD, 0x1A60320A, 0xD6A100C6, 0x402C7279,
+ 0x679F25FE, 0xFB1FA3CC, 0x8EA5E9F8, 0xDB3222F8,
+ 0x3C7516DF, 0xFD616B15, 0x2F501EC8, 0xAD0552AB,
+ 0x323DB5FA, 0xFD238760, 0x53317B48, 0x3E00DF82,
+ 0x9E5C57BB, 0xCA6F8CA0, 0x1A87562E, 0xDF1769DB,
+ 0xD542A8F6, 0x287EFFC3, 0xAC6732C6, 0x8C4F5573,
+ 0x695B27B0, 0xBBCA58C8, 0xE1FFA35D, 0xB8F011A0,
+ 0x10FA3D98, 0xFD2183B8, 0x4AFCB56C, 0x2DD1D35B,
+ 0x9A53E479, 0xB6F84565, 0xD28E49BC, 0x4BFB9790,
+ 0xE1DDF2DA, 0xA4CB7E33, 0x62FB1341, 0xCEE4C6E8,
+ 0xEF20CADA, 0x36774C01, 0xD07E9EFE, 0x2BF11FB4,
+ 0x95DBDA4D, 0xAE909198, 0xEAAD8E71, 0x6B93D5A0,
+ 0xD08ED1D0, 0xAFC725E0, 0x8E3C5B2F, 0x8E7594B7,
+ 0x8FF6E2FB, 0xF2122B64, 0x8888B812, 0x900DF01C,
+ 0x4FAD5EA0, 0x688FC31C, 0xD1CFF191, 0xB3A8C1AD,
+ 0x2F2F2218, 0xBE0E1777, 0xEA752DFE, 0x8B021FA1,
+ 0xE5A0CC0F, 0xB56F74E8, 0x18ACF3D6, 0xCE89E299,
+ 0xB4A84FE0, 0xFD13E0B7, 0x7CC43B81, 0xD2ADA8D9,
+ 0x165FA266, 0x80957705, 0x93CC7314, 0x211A1477,
+ 0xE6AD2065, 0x77B5FA86, 0xC75442F5, 0xFB9D35CF,
+ 0xEBCDAF0C, 0x7B3E89A0, 0xD6411BD3, 0xAE1E7E49,
+ 0x00250E2D, 0x2071B35E, 0x226800BB, 0x57B8E0AF,
+ 0x2464369B, 0xF009B91E, 0x5563911D, 0x59DFA6AA,
+ 0x78C14389, 0xD95A537F, 0x207D5BA2, 0x02E5B9C5,
+ 0x83260376, 0x6295CFA9, 0x11C81968, 0x4E734A41,
+ 0xB3472DCA, 0x7B14A94A, 0x1B510052, 0x9A532915,
+ 0xD60F573F, 0xBC9BC6E4, 0x2B60A476, 0x81E67400,
+ 0x08BA6FB5, 0x571BE91F, 0xF296EC6B, 0x2A0DD915,
+ 0xB6636521, 0xE7B9F9B6, 0xFF34052E, 0xC5855664,
+ 0x53B02D5D, 0xA99F8FA1, 0x08BA4799, 0x6E85076A);
+ var $s2 = array(
+ 0x4B7A70E9, 0xB5B32944, 0xDB75092E, 0xC4192623,
+ 0xAD6EA6B0, 0x49A7DF7D, 0x9CEE60B8, 0x8FEDB266,
+ 0xECAA8C71, 0x699A17FF, 0x5664526C, 0xC2B19EE1,
+ 0x193602A5, 0x75094C29, 0xA0591340, 0xE4183A3E,
+ 0x3F54989A, 0x5B429D65, 0x6B8FE4D6, 0x99F73FD6,
+ 0xA1D29C07, 0xEFE830F5, 0x4D2D38E6, 0xF0255DC1,
+ 0x4CDD2086, 0x8470EB26, 0x6382E9C6, 0x021ECC5E,
+ 0x09686B3F, 0x3EBAEFC9, 0x3C971814, 0x6B6A70A1,
+ 0x687F3584, 0x52A0E286, 0xB79C5305, 0xAA500737,
+ 0x3E07841C, 0x7FDEAE5C, 0x8E7D44EC, 0x5716F2B8,
+ 0xB03ADA37, 0xF0500C0D, 0xF01C1F04, 0x0200B3FF,
+ 0xAE0CF51A, 0x3CB574B2, 0x25837A58, 0xDC0921BD,
+ 0xD19113F9, 0x7CA92FF6, 0x94324773, 0x22F54701,
+ 0x3AE5E581, 0x37C2DADC, 0xC8B57634, 0x9AF3DDA7,
+ 0xA9446146, 0x0FD0030E, 0xECC8C73E, 0xA4751E41,
+ 0xE238CD99, 0x3BEA0E2F, 0x3280BBA1, 0x183EB331,
+ 0x4E548B38, 0x4F6DB908, 0x6F420D03, 0xF60A04BF,
+ 0x2CB81290, 0x24977C79, 0x5679B072, 0xBCAF89AF,
+ 0xDE9A771F, 0xD9930810, 0xB38BAE12, 0xDCCF3F2E,
+ 0x5512721F, 0x2E6B7124, 0x501ADDE6, 0x9F84CD87,
+ 0x7A584718, 0x7408DA17, 0xBC9F9ABC, 0xE94B7D8C,
+ 0xEC7AEC3A, 0xDB851DFA, 0x63094366, 0xC464C3D2,
+ 0xEF1C1847, 0x3215D908, 0xDD433B37, 0x24C2BA16,
+ 0x12A14D43, 0x2A65C451, 0x50940002, 0x133AE4DD,
+ 0x71DFF89E, 0x10314E55, 0x81AC77D6, 0x5F11199B,
+ 0x043556F1, 0xD7A3C76B, 0x3C11183B, 0x5924A509,
+ 0xF28FE6ED, 0x97F1FBFA, 0x9EBABF2C, 0x1E153C6E,
+ 0x86E34570, 0xEAE96FB1, 0x860E5E0A, 0x5A3E2AB3,
+ 0x771FE71C, 0x4E3D06FA, 0x2965DCB9, 0x99E71D0F,
+ 0x803E89D6, 0x5266C825, 0x2E4CC978, 0x9C10B36A,
+ 0xC6150EBA, 0x94E2EA78, 0xA5FC3C53, 0x1E0A2DF4,
+ 0xF2F74EA7, 0x361D2B3D, 0x1939260F, 0x19C27960,
+ 0x5223A708, 0xF71312B6, 0xEBADFE6E, 0xEAC31F66,
+ 0xE3BC4595, 0xA67BC883, 0xB17F37D1, 0x018CFF28,
+ 0xC332DDEF, 0xBE6C5AA5, 0x65582185, 0x68AB9802,
+ 0xEECEA50F, 0xDB2F953B, 0x2AEF7DAD, 0x5B6E2F84,
+ 0x1521B628, 0x29076170, 0xECDD4775, 0x619F1510,
+ 0x13CCA830, 0xEB61BD96, 0x0334FE1E, 0xAA0363CF,
+ 0xB5735C90, 0x4C70A239, 0xD59E9E0B, 0xCBAADE14,
+ 0xEECC86BC, 0x60622CA7, 0x9CAB5CAB, 0xB2F3846E,
+ 0x648B1EAF, 0x19BDF0CA, 0xA02369B9, 0x655ABB50,
+ 0x40685A32, 0x3C2AB4B3, 0x319EE9D5, 0xC021B8F7,
+ 0x9B540B19, 0x875FA099, 0x95F7997E, 0x623D7DA8,
+ 0xF837889A, 0x97E32D77, 0x11ED935F, 0x16681281,
+ 0x0E358829, 0xC7E61FD6, 0x96DEDFA1, 0x7858BA99,
+ 0x57F584A5, 0x1B227263, 0x9B83C3FF, 0x1AC24696,
+ 0xCDB30AEB, 0x532E3054, 0x8FD948E4, 0x6DBC3128,
+ 0x58EBF2EF, 0x34C6FFEA, 0xFE28ED61, 0xEE7C3C73,
+ 0x5D4A14D9, 0xE864B7E3, 0x42105D14, 0x203E13E0,
+ 0x45EEE2B6, 0xA3AAABEA, 0xDB6C4F15, 0xFACB4FD0,
+ 0xC742F442, 0xEF6ABBB5, 0x654F3B1D, 0x41CD2105,
+ 0xD81E799E, 0x86854DC7, 0xE44B476A, 0x3D816250,
+ 0xCF62A1F2, 0x5B8D2646, 0xFC8883A0, 0xC1C7B6A3,
+ 0x7F1524C3, 0x69CB7492, 0x47848A0B, 0x5692B285,
+ 0x095BBF00, 0xAD19489D, 0x1462B174, 0x23820E00,
+ 0x58428D2A, 0x0C55F5EA, 0x1DADF43E, 0x233F7061,
+ 0x3372F092, 0x8D937E41, 0xD65FECF1, 0x6C223BDB,
+ 0x7CDE3759, 0xCBEE7460, 0x4085F2A7, 0xCE77326E,
+ 0xA6078084, 0x19F8509E, 0xE8EFD855, 0x61D99735,
+ 0xA969A7AA, 0xC50C06C2, 0x5A04ABFC, 0x800BCADC,
+ 0x9E447A2E, 0xC3453484, 0xFDD56705, 0x0E1E9EC9,
+ 0xDB73DBD3, 0x105588CD, 0x675FDA79, 0xE3674340,
+ 0xC5C43465, 0x713E38D8, 0x3D28F89E, 0xF16DFF20,
+ 0x153E21E7, 0x8FB03D4A, 0xE6E39F2B, 0xDB83ADF7);
+ var $s3 = array(
+ 0xE93D5A68, 0x948140F7, 0xF64C261C, 0x94692934,
+ 0x411520F7, 0x7602D4F7, 0xBCF46B2E, 0xD4A20068,
+ 0xD4082471, 0x3320F46A, 0x43B7D4B7, 0x500061AF,
+ 0x1E39F62E, 0x97244546, 0x14214F74, 0xBF8B8840,
+ 0x4D95FC1D, 0x96B591AF, 0x70F4DDD3, 0x66A02F45,
+ 0xBFBC09EC, 0x03BD9785, 0x7FAC6DD0, 0x31CB8504,
+ 0x96EB27B3, 0x55FD3941, 0xDA2547E6, 0xABCA0A9A,
+ 0x28507825, 0x530429F4, 0x0A2C86DA, 0xE9B66DFB,
+ 0x68DC1462, 0xD7486900, 0x680EC0A4, 0x27A18DEE,
+ 0x4F3FFEA2, 0xE887AD8C, 0xB58CE006, 0x7AF4D6B6,
+ 0xAACE1E7C, 0xD3375FEC, 0xCE78A399, 0x406B2A42,
+ 0x20FE9E35, 0xD9F385B9, 0xEE39D7AB, 0x3B124E8B,
+ 0x1DC9FAF7, 0x4B6D1856, 0x26A36631, 0xEAE397B2,
+ 0x3A6EFA74, 0xDD5B4332, 0x6841E7F7, 0xCA7820FB,
+ 0xFB0AF54E, 0xD8FEB397, 0x454056AC, 0xBA489527,
+ 0x55533A3A, 0x20838D87, 0xFE6BA9B7, 0xD096954B,
+ 0x55A867BC, 0xA1159A58, 0xCCA92963, 0x99E1DB33,
+ 0xA62A4A56, 0x3F3125F9, 0x5EF47E1C, 0x9029317C,
+ 0xFDF8E802, 0x04272F70, 0x80BB155C, 0x05282CE3,
+ 0x95C11548, 0xE4C66D22, 0x48C1133F, 0xC70F86DC,
+ 0x07F9C9EE, 0x41041F0F, 0x404779A4, 0x5D886E17,
+ 0x325F51EB, 0xD59BC0D1, 0xF2BCC18F, 0x41113564,
+ 0x257B7834, 0x602A9C60, 0xDFF8E8A3, 0x1F636C1B,
+ 0x0E12B4C2, 0x02E1329E, 0xAF664FD1, 0xCAD18115,
+ 0x6B2395E0, 0x333E92E1, 0x3B240B62, 0xEEBEB922,
+ 0x85B2A20E, 0xE6BA0D99, 0xDE720C8C, 0x2DA2F728,
+ 0xD0127845, 0x95B794FD, 0x647D0862, 0xE7CCF5F0,
+ 0x5449A36F, 0x877D48FA, 0xC39DFD27, 0xF33E8D1E,
+ 0x0A476341, 0x992EFF74, 0x3A6F6EAB, 0xF4F8FD37,
+ 0xA812DC60, 0xA1EBDDF8, 0x991BE14C, 0xDB6E6B0D,
+ 0xC67B5510, 0x6D672C37, 0x2765D43B, 0xDCD0E804,
+ 0xF1290DC7, 0xCC00FFA3, 0xB5390F92, 0x690FED0B,
+ 0x667B9FFB, 0xCEDB7D9C, 0xA091CF0B, 0xD9155EA3,
+ 0xBB132F88, 0x515BAD24, 0x7B9479BF, 0x763BD6EB,
+ 0x37392EB3, 0xCC115979, 0x8026E297, 0xF42E312D,
+ 0x6842ADA7, 0xC66A2B3B, 0x12754CCC, 0x782EF11C,
+ 0x6A124237, 0xB79251E7, 0x06A1BBE6, 0x4BFB6350,
+ 0x1A6B1018, 0x11CAEDFA, 0x3D25BDD8, 0xE2E1C3C9,
+ 0x44421659, 0x0A121386, 0xD90CEC6E, 0xD5ABEA2A,
+ 0x64AF674E, 0xDA86A85F, 0xBEBFE988, 0x64E4C3FE,
+ 0x9DBC8057, 0xF0F7C086, 0x60787BF8, 0x6003604D,
+ 0xD1FD8346, 0xF6381FB0, 0x7745AE04, 0xD736FCCC,
+ 0x83426B33, 0xF01EAB71, 0xB0804187, 0x3C005E5F,
+ 0x77A057BE, 0xBDE8AE24, 0x55464299, 0xBF582E61,
+ 0x4E58F48F, 0xF2DDFDA2, 0xF474EF38, 0x8789BDC2,
+ 0x5366F9C3, 0xC8B38E74, 0xB475F255, 0x46FCD9B9,
+ 0x7AEB2661, 0x8B1DDF84, 0x846A0E79, 0x915F95E2,
+ 0x466E598E, 0x20B45770, 0x8CD55591, 0xC902DE4C,
+ 0xB90BACE1, 0xBB8205D0, 0x11A86248, 0x7574A99E,
+ 0xB77F19B6, 0xE0A9DC09, 0x662D09A1, 0xC4324633,
+ 0xE85A1F02, 0x09F0BE8C, 0x4A99A025, 0x1D6EFE10,
+ 0x1AB93D1D, 0x0BA5A4DF, 0xA186F20F, 0x2868F169,
+ 0xDCB7DA83, 0x573906FE, 0xA1E2CE9B, 0x4FCD7F52,
+ 0x50115E01, 0xA70683FA, 0xA002B5C4, 0x0DE6D027,
+ 0x9AF88C27, 0x773F8641, 0xC3604C06, 0x61A806B5,
+ 0xF0177A28, 0xC0F586E0, 0x006058AA, 0x30DC7D62,
+ 0x11E69ED7, 0x2338EA63, 0x53C2DD94, 0xC2C21634,
+ 0xBBCBEE56, 0x90BCB6DE, 0xEBFC7DA1, 0xCE591D76,
+ 0x6F05E409, 0x4B7C0188, 0x39720A3D, 0x7C927C24,
+ 0x86E3725F, 0x724D9DB9, 0x1AC15BB4, 0xD39EB8FC,
+ 0xED545578, 0x08FCA5B5, 0xD83D7CD3, 0x4DAD0FC4,
+ 0x1E50EF5E, 0xB161E6F8, 0xA28514D9, 0x6C51133C,
+ 0x6FD5C7E7, 0x56E14EC4, 0x362ABFCE, 0xDDC6C837,
+ 0xD79A3234, 0x92638212, 0x670EFA8E, 0x406000E0);
+ var $s4 = array(
+ 0x3A39CE37, 0xD3FAF5CF, 0xABC27737, 0x5AC52D1B,
+ 0x5CB0679E, 0x4FA33742, 0xD3822740, 0x99BC9BBE,
+ 0xD5118E9D, 0xBF0F7315, 0xD62D1C7E, 0xC700C47B,
+ 0xB78C1B6B, 0x21A19045, 0xB26EB1BE, 0x6A366EB4,
+ 0x5748AB2F, 0xBC946E79, 0xC6A376D2, 0x6549C2C8,
+ 0x530FF8EE, 0x468DDE7D, 0xD5730A1D, 0x4CD04DC6,
+ 0x2939BBDB, 0xA9BA4650, 0xAC9526E8, 0xBE5EE304,
+ 0xA1FAD5F0, 0x6A2D519A, 0x63EF8CE2, 0x9A86EE22,
+ 0xC089C2B8, 0x43242EF6, 0xA51E03AA, 0x9CF2D0A4,
+ 0x83C061BA, 0x9BE96A4D, 0x8FE51550, 0xBA645BD6,
+ 0x2826A2F9, 0xA73A3AE1, 0x4BA99586, 0xEF5562E9,
+ 0xC72FEFD3, 0xF752F7DA, 0x3F046F69, 0x77FA0A59,
+ 0x80E4A915, 0x87B08601, 0x9B09E6AD, 0x3B3EE593,
+ 0xE990FD5A, 0x9E34D797, 0x2CF0B7D9, 0x022B8B51,
+ 0x96D5AC3A, 0x017DA67D, 0xD1CF3ED6, 0x7C7D2D28,
+ 0x1F9F25CF, 0xADF2B89B, 0x5AD6B472, 0x5A88F54C,
+ 0xE029AC71, 0xE019A5E6, 0x47B0ACFD, 0xED93FA9B,
+ 0xE8D3C48D, 0x283B57CC, 0xF8D56629, 0x79132E28,
+ 0x785F0191, 0xED756055, 0xF7960E44, 0xE3D35E8C,
+ 0x15056DD4, 0x88F46DBA, 0x03A16125, 0x0564F0BD,
+ 0xC3EB9E15, 0x3C9057A2, 0x97271AEC, 0xA93A072A,
+ 0x1B3F6D9B, 0x1E6321F5, 0xF59C66FB, 0x26DCF319,
+ 0x7533D928, 0xB155FDF5, 0x03563482, 0x8ABA3CBB,
+ 0x28517711, 0xC20AD9F8, 0xABCC5167, 0xCCAD925F,
+ 0x4DE81751, 0x3830DC8E, 0x379D5862, 0x9320F991,
+ 0xEA7A90C2, 0xFB3E7BCE, 0x5121CE64, 0x774FBE32,
+ 0xA8B6E37E, 0xC3293D46, 0x48DE5369, 0x6413E680,
+ 0xA2AE0810, 0xDD6DB224, 0x69852DFD, 0x09072166,
+ 0xB39A460A, 0x6445C0DD, 0x586CDECF, 0x1C20C8AE,
+ 0x5BBEF7DD, 0x1B588D40, 0xCCD2017F, 0x6BB4E3BB,
+ 0xDDA26A7E, 0x3A59FF45, 0x3E350A44, 0xBCB4CDD5,
+ 0x72EACEA8, 0xFA6484BB, 0x8D6612AE, 0xBF3C6F47,
+ 0xD29BE463, 0x542F5D9E, 0xAEC2771B, 0xF64E6370,
+ 0x740E0D8D, 0xE75B1357, 0xF8721671, 0xAF537D5D,
+ 0x4040CB08, 0x4EB4E2CC, 0x34D2466A, 0x0115AF84,
+ 0xE1B00428, 0x95983A1D, 0x06B89FB4, 0xCE6EA048,
+ 0x6F3F3B82, 0x3520AB82, 0x011A1D4B, 0x277227F8,
+ 0x611560B1, 0xE7933FDC, 0xBB3A792B, 0x344525BD,
+ 0xA08839E1, 0x51CE794B, 0x2F32C9B7, 0xA01FBAC9,
+ 0xE01CC87E, 0xBCC7D1F6, 0xCF0111C3, 0xA1E8AAC7,
+ 0x1A908749, 0xD44FBD9A, 0xD0DADECB, 0xD50ADA38,
+ 0x0339C32A, 0xC6913667, 0x8DF9317C, 0xE0B12B4F,
+ 0xF79E59B7, 0x43F5BB3A, 0xF2D519FF, 0x27D9459C,
+ 0xBF97222C, 0x15E6FC2A, 0x0F91FC71, 0x9B941525,
+ 0xFAE59361, 0xCEB69CEB, 0xC2A86459, 0x12BAA8D1,
+ 0xB6C1075E, 0xE3056A0C, 0x10D25065, 0xCB03A442,
+ 0xE0EC6E0E, 0x1698DB3B, 0x4C98A0BE, 0x3278E964,
+ 0x9F1F9532, 0xE0D392DF, 0xD3A0342B, 0x8971F21E,
+ 0x1B0A7441, 0x4BA3348C, 0xC5BE7120, 0xC37632D8,
+ 0xDF359F8D, 0x9B992F2E, 0xE60B6F47, 0x0FE3F11D,
+ 0xE54CDA54, 0x1EDAD891, 0xCE6279CF, 0xCD3E7E6F,
+ 0x1618B166, 0xFD2C1D05, 0x848FD2C5, 0xF6FB2299,
+ 0xF523F357, 0xA6327623, 0x93A83531, 0x56CCCD02,
+ 0xACF08162, 0x5A75EBB5, 0x6E163697, 0x88D273CC,
+ 0xDE966292, 0x81B949D0, 0x4C50901B, 0x71C65614,
+ 0xE6C6C7BD, 0x327A140A, 0x45E1D006, 0xC3F27B9A,
+ 0xC9AA53FD, 0x62A80F00, 0xBB25BFE2, 0x35BDD2F6,
+ 0x71126905, 0xB2040222, 0xB6CBCF7C, 0xCD769C2B,
+ 0x53113EC0, 0x1640E3D3, 0x38ABBD60, 0x2547ADF0,
+ 0xBA38209C, 0xF746CE76, 0x77AFA1C5, 0x20756060,
+ 0x85CBFE4E, 0x8AE88DD8, 0x7AAAF9B0, 0x4CF9AA7E,
+ 0x1948C25C, 0x02FB8A8C, 0x01C36AE4, 0xD6EBE1F9,
+ 0x90D4F869, 0xA65CDEA0, 0x3F09252D, 0xC208E69F,
+ 0xB74E6132, 0xCE77E25B, 0x578FDFE3, 0x3AC372E6);
+
+ /* The number of rounds to do */
+ var $_rounds = 16;
+
+ /**
+ * Set the key to be used for en/decryption
+ *
+ * @param String $key The key to use
+ */
+ function setKey($key)
+ {
+ $key = $this->_formatKey($key);
+ $keyPos = $keyXor = 0;
+
+ $iMax = count($this->p);
+ $keyLen = count($key);
+ for ($i = 0; $i < $iMax; $i++) {
+ for ($t = 0; $t < 4; $t++) {
+ $keyXor = ($keyXor << 8) | (($key[$keyPos]) & 0x0ff);
+ if (++$keyPos == $keyLen) {
+ $keyPos = 0;
+ }
+ }
+ $this->p[$i] = $this->p[$i] ^ $keyXor;
+ }
+
+ $encZero = array('L' => 0, 'R' => 0);
+ for ($i = 0; $i + 1 < $iMax; $i += 2) {
+ $encZero = $this->_encryptBlock($encZero['L'], $encZero['R']);
+ $this->p[$i] = $encZero['L'];
+ $this->p[$i + 1] = $encZero['R'];
+ }
+
+ $iMax = count($this->s1);
+ for ($i = 0; $i < $iMax; $i += 2) {
+ $encZero = $this->_encryptBlock($encZero['L'], $encZero['R']);
+ $this->s1[$i] = $encZero['L'];
+ $this->s1[$i + 1] = $encZero['R'];
+ }
+
+ $iMax = count($this->s2);
+ for ($i = 0; $i < $iMax; $i += 2) {
+ $encZero = $this->_encryptBlock($encZero['L'], $encZero['R']);
+ $this->s2[$i] = $encZero['L'];
+ $this->s2[$i + 1] = $encZero['R'];
+ }
+
+ $iMax = count($this->s3);
+ for ($i = 0; $i < $iMax; $i += 2) {
+ $encZero = $this->_encryptBlock($encZero['L'], $encZero['R']);
+ $this->s3[$i] = $encZero['L'];
+ $this->s3[$i + 1] = $encZero['R'];
+ }
+
+ $iMax = count($this->s4);
+ for ($i = 0; $i < $iMax; $i += 2) {
+ $encZero = $this->_encryptBlock($encZero['L'], $encZero['R']);
+ $this->s4[$i] = $encZero['L'];
+ $this->s4[$i + 1] = $encZero['R'];
+ }
+
+ }
+
+ /**
+ * Encrypt a block on data.
+ *
+ * @param String $block The data to encrypt
+ * @param optional String $key The key to use
+ *
+ * @return String the encrypted output
+ */
+ function encryptBlock($block, $key = null)
+ {
+ if (!is_null($key)) {
+ $this->setKey($key);
+ }
+
+ list($L, $R) = array_values(unpack('N*', $block));
+ $parts = $this->_encryptBlock($L, $R);
+ return pack("NN", $parts['L'], $parts['R']);
+ }
+
+ /**
+ * Encrypt a block on data.
+ *
+ * @param String $L The data to encrypt.
+ * @param String $R The data to encrypt.
+ *
+ * @return String The encrypted output.
+ */
+ function _encryptBlock($L, $R)
+ {
+ $L ^= $this->p[0];
+ $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[1];
+ $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[2];
+ $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[3];
+ $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[4];
+ $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[5];
+ $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[6];
+ $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[7];
+ $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[8];
+ $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[9];
+ $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[10];
+ $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[11];
+ $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[12];
+ $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[13];
+ $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[14];
+ $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[15];
+ $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[16];
+ $R ^= $this->p[17];
+
+ return array('L' => $R, 'R' => $L);
+ }
+
+ /**
+ * Decrypt a block on data.
+ *
+ * @param String $block The data to decrypt
+ * @param optional String $key The key to use
+ *
+ * @return String the decrypted output
+ */
+ function decryptBlock($block, $key = null)
+ {
+ if (!is_null($key)) {
+ $this->setKey($key);
+ }
+
+// change for phpMyAdmin
+ $L = null;
+ $R = null;
+
+ $retarray = array_values(unpack('N*', $block));
+ if (isset($retarray[0])) {
+ $L = $retarray[0];
+ }
+ if (isset($retarray[1])) {
+ $R = $retarray[1];
+ }
+// end change for phpMyAdmin
+
+ $L ^= $this->p[17];
+ $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[16];
+ $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[15];
+ $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[14];
+ $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[13];
+ $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[12];
+ $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[11];
+ $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[10];
+ $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[9];
+ $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[8];
+ $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[7];
+ $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[6];
+ $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[5];
+ $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[4];
+ $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[3];
+ $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[2];
+ $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[1];
+
+ $decrypted = pack("NN", $R ^ $this->p[0], $L);
+ return $decrypted;
+ }
+
+ /**
+ * Converts a text key into an array.
+ *
+ * @return array The key.
+ */
+ function _formatKey($key)
+ {
+ return array_values(unpack('C*', $key));
+ }
+
+}
+
+// higher-level functions:
+/**
+ * Encryption using blowfish algorithm
+ *
+ * @param string original data
+ * @param string the secret
+ *
+ * @return string the encrypted result
+ *
+ * @access public
+ *
+ * @author lem9
+ */
+function PMA_blowfish_encrypt($data, $secret)
+{
+ $pma_cipher = new Horde_Cipher_blowfish;
+ $encrypt = '';
+
+ $data .= '_'; // triming fixed for DokuWiki FS#1690 FS#1713
+ $mod = strlen($data) % 8;
+
+ if ($mod > 0) {
+ $data .= str_repeat("\0", 8 - $mod);
+ }
+
+ foreach (str_split($data, 8) as $chunk) {
+ $encrypt .= $pma_cipher->encryptBlock($chunk, $secret);
+ }
+ return base64_encode($encrypt);
+}
+
+/**
+ * Decryption using blowfish algorithm
+ *
+ * @param string encrypted data
+ * @param string the secret
+ *
+ * @return string original data
+ *
+ * @access public
+ *
+ * @author lem9
+ */
+function PMA_blowfish_decrypt($encdata, $secret)
+{
+ $pma_cipher = new Horde_Cipher_blowfish;
+ $decrypt = '';
+ $data = base64_decode($encdata);
+
+ foreach (str_split($data, 8) as $chunk) {
+ $decrypt .= $pma_cipher->decryptBlock($chunk, $secret);
+ }
+ return substr(rtrim($decrypt, "\0"), 0, -1); // triming fixed for DokuWiki FS#1690 FS#1713
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/cache.php b/mod/dokuwiki/vendors/dokuwiki/inc/cache.php
new file mode 100644
index 000000000..8e8adfd6d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/cache.php
@@ -0,0 +1,292 @@
+<?php
+/**
+ * Generic class to handle caching
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Chris Smith <chris@jalakai.co.uk>
+ */
+
+if(!defined('DOKU_INC')) die('meh.');
+require_once(DOKU_INC.'inc/io.php');
+require_once(DOKU_INC.'inc/pageutils.php');
+require_once(DOKU_INC.'inc/parserutils.php');
+
+class cache {
+ var $key = ''; // primary identifier for this item
+ var $ext = ''; // file ext for cache data, secondary identifier for this item
+ var $cache = ''; // cache file name
+ var $depends = array(); // array containing cache dependency information,
+ // used by _useCache to determine cache validity
+
+ var $_event = ''; // event to be triggered during useCache
+
+ function cache($key,$ext) {
+ $this->key = $key;
+ $this->ext = $ext;
+ $this->cache = getCacheName($key,$ext);
+ }
+
+ /**
+ * public method to determine whether the cache can be used
+ *
+ * to assist in cetralisation of event triggering and calculation of cache statistics,
+ * don't override this function override _useCache()
+ *
+ * @param array $depends array of cache dependencies, support dependecies:
+ * 'age' => max age of the cache in seconds
+ * 'files' => cache must be younger than mtime of each file
+ * (nb. dependency passes if file doesn't exist)
+ *
+ * @return bool true if cache can be used, false otherwise
+ */
+ function useCache($depends=array()) {
+ $this->depends = $depends;
+ $this->_addDependencies();
+
+ if ($this->_event) {
+ return $this->_stats(trigger_event($this->_event,$this,array($this,'_useCache')));
+ } else {
+ return $this->_stats($this->_useCache());
+ }
+ }
+
+ /**
+ * private method containing cache use decision logic
+ *
+ * this function processes the following keys in the depends array
+ * purge - force a purge on any non empty value
+ * age - expire cache if older than age (seconds)
+ * files - expire cache if any file in this array was updated more recently than the cache
+ *
+ * can be overridden
+ *
+ * @return bool see useCache()
+ */
+ function _useCache() {
+
+ if (!empty($this->depends['purge'])) return false; // purge requested?
+ if (!($this->_time = @filemtime($this->cache))) return false; // cache exists?
+
+ // cache too old?
+ if (!empty($this->depends['age']) && ((time() - $this->_time) > $this->depends['age'])) return false;
+
+ if (!empty($this->depends['files'])) {
+ foreach ($this->depends['files'] as $file) {
+ if ($this->_time < @filemtime($file)) return false; // cache older than files it depends on?
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * add dependencies to the depends array
+ *
+ * this method should only add dependencies,
+ * it should not remove any existing dependencies and
+ * it should only overwrite a dependency when the new value is more stringent than the old
+ */
+ function _addDependencies() {
+ if (isset($_REQUEST['purge'])) $this->depends['purge'] = true; // purge requested
+ }
+
+ /**
+ * retrieve the cached data
+ *
+ * @param bool $clean true to clean line endings, false to leave line endings alone
+ * @return string cache contents
+ */
+ function retrieveCache($clean=true) {
+ return io_readFile($this->cache, $clean);
+ }
+
+ /**
+ * cache $data
+ *
+ * @param string $data the data to be cached
+ * @return bool true on success, false otherwise
+ */
+ function storeCache($data) {
+ return io_savefile($this->cache, $data);
+ }
+
+ /**
+ * remove any cached data associated with this cache instance
+ */
+ function removeCache() {
+ @unlink($this->cache);
+ }
+
+ /**
+ * Record cache hits statistics.
+ * (Only when debugging allowed, to reduce overhead.)
+ *
+ * @param bool $success result of this cache use attempt
+ * @return bool pass-thru $success value
+ */
+ function _stats($success) {
+ global $conf;
+ static $stats = NULL;
+ static $file;
+
+ if (!$conf['allowdebug']) { return $success; }
+
+ if (is_null($stats)) {
+ $file = $conf['cachedir'].'/cache_stats.txt';
+ $lines = explode("\n",io_readFile($file));
+
+ foreach ($lines as $line) {
+ $i = strpos($line,',');
+ $stats[substr($line,0,$i)] = $line;
+ }
+ }
+
+ if (isset($stats[$this->ext])) {
+ list($ext,$count,$hits) = explode(',',$stats[$this->ext]);
+ } else {
+ $ext = $this->ext;
+ $count = 0;
+ $hits = 0;
+ }
+
+ $count++;
+ if ($success) $hits++;
+ $stats[$this->ext] = "$ext,$count,$hits";
+
+ io_saveFile($file,join("\n",$stats));
+
+ return $success;
+ }
+}
+
+class cache_parser extends cache {
+
+ var $file = ''; // source file for cache
+ var $mode = ''; // input mode (represents the processing the input file will undergo)
+
+ var $_event = 'PARSER_CACHE_USE';
+
+ function cache_parser($id, $file, $mode) {
+ if ($id) $this->page = $id;
+ $this->file = $file;
+ $this->mode = $mode;
+
+ parent::cache($file.$_SERVER['HTTP_HOST'].$_SERVER['SERVER_PORT'],'.'.$mode);
+ }
+
+ function _useCache() {
+
+ if (!@file_exists($this->file)) return false; // source exists?
+ return parent::_useCache();
+ }
+
+ function _addDependencies() {
+ global $conf, $config_cascade;
+
+ $this->depends['age'] = isset($this->depends['age']) ?
+ min($this->depends['age'],$conf['cachetime']) : $conf['cachetime'];
+
+ // parser cache file dependencies ...
+ $files = array($this->file, // ... source
+ DOKU_INC.'inc/parser/parser.php', // ... parser
+ DOKU_INC.'inc/parser/handler.php', // ... handler
+ );
+ $files = array_merge($files, getConfigFiles('main')); // ... wiki settings
+
+ $this->depends['files'] = !empty($this->depends['files']) ? array_merge($files, $this->depends['files']) : $files;
+ parent::_addDependencies();
+ }
+
+}
+
+class cache_renderer extends cache_parser {
+
+ function useCache($depends=array()) {
+ $use = parent::useCache($depends);
+
+ // meta data needs to be kept in step with the cache
+ if (!$use && isset($this->page)) {
+ p_set_metadata($this->page,array(),true);
+ }
+
+ return $use;
+ }
+
+ function _useCache() {
+ global $conf;
+
+ if (!parent::_useCache()) return false;
+
+ if (!isset($this->page)) {
+ return true;
+ }
+
+ // check current link existence is consistent with cache version
+ // first check the purgefile
+ // - if the cache is more recent than the purgefile we know no links can have been updated
+ if ($this->_time >= @filemtime($conf['cachedir'].'/purgefile')) {
+ return true;
+ }
+
+ // for wiki pages, check metadata dependencies
+ $metadata = p_get_metadata($this->page);
+
+ if (!isset($metadata['relation']['references']) ||
+ empty($metadata['relation']['references'])) {
+ return true;
+ }
+
+ foreach ($metadata['relation']['references'] as $id => $exists) {
+ if ($exists != page_exists($id,'',false)) return false;
+ }
+
+ return true;
+ }
+
+ function _addDependencies() {
+
+ // renderer cache file dependencies ...
+ $files = array(
+ DOKU_INC.'inc/parser/'.$this->mode.'.php', // ... the renderer
+ );
+
+ // page implies metadata and possibly some other dependencies
+ if (isset($this->page)) {
+
+ $metafile = metaFN($this->page,'.meta');
+ if (@file_exists($metafile)) {
+ $files[] = $metafile; // ... the page's own metadata
+ $files[] = DOKU_INC.'inc/parser/metadata.php'; // ... the metadata renderer
+
+ $valid = p_get_metadata($this->page, 'date valid');
+ if (!empty($valid['age'])) {
+ $this->depends['age'] = isset($this->depends['age']) ?
+ min($this->depends['age'],$valid['age']) : $valid['age'];
+ }
+
+ } else {
+ $this->depends['purge'] = true; // ... purging cache will generate metadata
+ return;
+ }
+ }
+
+ $this->depends['files'] = !empty($this->depends['files']) ? array_merge($files, $this->depends['files']) : $files;
+ parent::_addDependencies();
+ }
+}
+
+class cache_instructions extends cache_parser {
+
+ function cache_instructions($id, $file) {
+ parent::cache_parser($id, $file, 'i');
+ }
+
+ function retrieveCache($clean=true) {
+ $contents = io_readFile($this->cache, false);
+ return !empty($contents) ? unserialize($contents) : array();
+ }
+
+ function storeCache($instructions) {
+ return io_savefile($this->cache,serialize($instructions));
+ }
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/changelog.php b/mod/dokuwiki/vendors/dokuwiki/inc/changelog.php
new file mode 100644
index 000000000..bc2af2de3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/changelog.php
@@ -0,0 +1,474 @@
+<?php
+/**
+ * Changelog handling functions
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+// Constants for known core changelog line types.
+// Use these in place of string literals for more readable code.
+define('DOKU_CHANGE_TYPE_CREATE', 'C');
+define('DOKU_CHANGE_TYPE_EDIT', 'E');
+define('DOKU_CHANGE_TYPE_MINOR_EDIT', 'e');
+define('DOKU_CHANGE_TYPE_DELETE', 'D');
+define('DOKU_CHANGE_TYPE_REVERT', 'R');
+
+/**
+ * parses a changelog line into it's components
+ *
+ * @author Ben Coburn <btcoburn@silicodon.net>
+ */
+function parseChangelogLine($line) {
+ $tmp = explode("\t", $line);
+ if ($tmp!==false && count($tmp)>1) {
+ $info = array();
+ $info['date'] = (int)$tmp[0]; // unix timestamp
+ $info['ip'] = $tmp[1]; // IPv4 address (127.0.0.1)
+ $info['type'] = $tmp[2]; // log line type
+ $info['id'] = $tmp[3]; // page id
+ $info['user'] = $tmp[4]; // user name
+ $info['sum'] = $tmp[5]; // edit summary (or action reason)
+ $info['extra'] = rtrim($tmp[6], "\n"); // extra data (varies by line type)
+ return $info;
+ } else { return false; }
+}
+
+/**
+ * Add's an entry to the changelog and saves the metadata for the page
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Esther Brunner <wikidesign@gmail.com>
+ * @author Ben Coburn <btcoburn@silicodon.net>
+ */
+function addLogEntry($date, $id, $type=DOKU_CHANGE_TYPE_EDIT, $summary='', $extra='', $flags=null){
+ global $conf, $INFO;
+
+ // check for special flags as keys
+ if (!is_array($flags)) { $flags = array(); }
+ $flagExternalEdit = isset($flags['ExternalEdit']);
+
+ $id = cleanid($id);
+ $file = wikiFN($id);
+ $created = @filectime($file);
+ $minor = ($type===DOKU_CHANGE_TYPE_MINOR_EDIT);
+ $wasRemoved = ($type===DOKU_CHANGE_TYPE_DELETE);
+
+ if(!$date) $date = time(); //use current time if none supplied
+ $remote = (!$flagExternalEdit)?clientIP(true):'127.0.0.1';
+ $user = (!$flagExternalEdit)?$_SERVER['REMOTE_USER']:'';
+
+ $strip = array("\t", "\n");
+ $logline = array(
+ 'date' => $date,
+ 'ip' => $remote,
+ 'type' => str_replace($strip, '', $type),
+ 'id' => $id,
+ 'user' => $user,
+ 'sum' => str_replace($strip, '', $summary),
+ 'extra' => str_replace($strip, '', $extra)
+ );
+
+ // update metadata
+ if (!$wasRemoved) {
+ $oldmeta = p_read_metadata($id);
+ $meta = array();
+ if (!$INFO['exists'] && empty($oldmeta['persistent']['date']['created'])){ // newly created
+ $meta['date']['created'] = $created;
+ if ($user) $meta['creator'] = $INFO['userinfo']['name'];
+ } elseif (!$INFO['exists'] && !empty($oldmeta['persistent']['date']['created'])) { // re-created / restored
+ $meta['date']['created'] = $oldmeta['persistent']['date']['created'];
+ $meta['date']['modified'] = $created; // use the files ctime here
+ $meta['creator'] = $oldmeta['persistent']['creator'];
+ if ($user) $meta['contributor'][$user] = $INFO['userinfo']['name'];
+ } elseif (!$minor) { // non-minor modification
+ $meta['date']['modified'] = $date;
+ if ($user) $meta['contributor'][$user] = $INFO['userinfo']['name'];
+ }
+ $meta['last_change'] = $logline;
+ p_set_metadata($id, $meta, true);
+ }
+
+ // add changelog lines
+ $logline = implode("\t", $logline)."\n";
+ io_saveFile(metaFN($id,'.changes'),$logline,true); //page changelog
+ io_saveFile($conf['changelog'],$logline,true); //global changelog cache
+}
+
+/**
+ * Add's an entry to the media changelog
+ *
+ * @author Michael Hamann <michael@content-space.de>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Esther Brunner <wikidesign@gmail.com>
+ * @author Ben Coburn <btcoburn@silicodon.net>
+ */
+function addMediaLogEntry($date, $id, $type=DOKU_CHANGE_TYPE_EDIT, $summary='', $extra='', $flags=null){
+ global $conf, $INFO;
+
+ $id = cleanid($id);
+
+ if(!$date) $date = time(); //use current time if none supplied
+ $remote = clientIP(true);
+ $user = $_SERVER['REMOTE_USER'];
+
+ $strip = array("\t", "\n");
+ $logline = array(
+ 'date' => $date,
+ 'ip' => $remote,
+ 'type' => str_replace($strip, '', $type),
+ 'id' => $id,
+ 'user' => $user,
+ 'sum' => str_replace($strip, '', $summary),
+ 'extra' => str_replace($strip, '', $extra)
+ );
+
+ // add changelog lines
+ $logline = implode("\t", $logline)."\n";
+ io_saveFile($conf['media_changelog'],$logline,true); //global media changelog cache
+}
+
+/**
+ * returns an array of recently changed files using the
+ * changelog
+ *
+ * The following constants can be used to control which changes are
+ * included. Add them together as needed.
+ *
+ * RECENTS_SKIP_DELETED - don't include deleted pages
+ * RECENTS_SKIP_MINORS - don't include minor changes
+ * RECENTS_SKIP_SUBSPACES - don't include subspaces
+ * RECENTS_MEDIA_CHANGES - return media changes instead of page changes
+ *
+ * @param int $first number of first entry returned (for paginating
+ * @param int $num return $num entries
+ * @param string $ns restrict to given namespace
+ * @param bool $flags see above
+ *
+ * @author Ben Coburn <btcoburn@silicodon.net>
+ */
+function getRecents($first,$num,$ns='',$flags=0){
+ global $conf;
+ $recent = array();
+ $count = 0;
+
+ if(!$num)
+ return $recent;
+
+ // read all recent changes. (kept short)
+ if ($flags & RECENTS_MEDIA_CHANGES) {
+ $lines = @file($conf['media_changelog']);
+ } else {
+ $lines = @file($conf['changelog']);
+ }
+
+
+ // handle lines
+ $seen = array(); // caches seen lines, _handleRecent() skips them
+ for($i = count($lines)-1; $i >= 0; $i--){
+ $rec = _handleRecent($lines[$i], $ns, $flags, $seen);
+ if($rec !== false) {
+ if(--$first >= 0) continue; // skip first entries
+ $recent[] = $rec;
+ $count++;
+ // break when we have enough entries
+ if($count >= $num){ break; }
+ }
+ }
+
+ return $recent;
+}
+
+/**
+ * returns an array of files changed since a given time using the
+ * changelog
+ *
+ * The following constants can be used to control which changes are
+ * included. Add them together as needed.
+ *
+ * RECENTS_SKIP_DELETED - don't include deleted pages
+ * RECENTS_SKIP_MINORS - don't include minor changes
+ * RECENTS_SKIP_SUBSPACES - don't include subspaces
+ * RECENTS_MEDIA_CHANGES - return media changes instead of page changes
+ *
+ * @param int $from date of the oldest entry to return
+ * @param int $to date of the newest entry to return (for pagination, optional)
+ * @param string $ns restrict to given namespace (optional)
+ * @param bool $flags see above (optional)
+ *
+ * @author Michael Hamann <michael@content-space.de>
+ * @author Ben Coburn <btcoburn@silicodon.net>
+ */
+function getRecentsSince($from,$to=null,$ns='',$flags=0){
+ global $conf;
+ $recent = array();
+
+ if($to && $to < $from)
+ return $recent;
+
+ // read all recent changes. (kept short)
+ if ($flags & RECENTS_MEDIA_CHANGES) {
+ $lines = @file($conf['media_changelog']);
+ } else {
+ $lines = @file($conf['changelog']);
+ }
+
+ // we start searching at the end of the list
+ $lines = array_reverse($lines);
+
+ // handle lines
+ $seen = array(); // caches seen lines, _handleRecent() skips them
+
+ foreach($lines as $line){
+ $rec = _handleRecent($line, $ns, $flags, $seen);
+ if($rec !== false) {
+ if ($rec['date'] >= $from) {
+ if (!$to || $rec['date'] <= $to) {
+ $recent[] = $rec;
+ }
+ } else {
+ break;
+ }
+ }
+ }
+
+ return array_reverse($recent);
+}
+
+/**
+ * Internal function used by getRecents
+ *
+ * don't call directly
+ *
+ * @see getRecents()
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Ben Coburn <btcoburn@silicodon.net>
+ */
+function _handleRecent($line,$ns,$flags,&$seen){
+ if(empty($line)) return false; //skip empty lines
+
+ // split the line into parts
+ $recent = parseChangelogLine($line);
+ if ($recent===false) { return false; }
+
+ // skip seen ones
+ if(isset($seen[$recent['id']])) return false;
+
+ // skip minors
+ if($recent['type']===DOKU_CHANGE_TYPE_MINOR_EDIT && ($flags & RECENTS_SKIP_MINORS)) return false;
+
+ // remember in seen to skip additional sights
+ $seen[$recent['id']] = 1;
+
+ // check if it's a hidden page
+ if(isHiddenPage($recent['id'])) return false;
+
+ // filter namespace
+ if (($ns) && (strpos($recent['id'],$ns.':') !== 0)) return false;
+
+ // exclude subnamespaces
+ if (($flags & RECENTS_SKIP_SUBSPACES) && (getNS($recent['id']) != $ns)) return false;
+
+ // check ACL
+ $recent['perms'] = auth_quickaclcheck($recent['id']);
+ if ($recent['perms'] < AUTH_READ) return false;
+
+ // check existance
+ $fn = (($flags & RECENTS_MEDIA_CHANGES) ? mediaFN($recent['id']) : wikiFN($recent['id']));
+ if((!@file_exists($fn)) && ($flags & RECENTS_SKIP_DELETED)) return false;
+
+ return $recent;
+}
+
+/**
+ * Get the changelog information for a specific page id
+ * and revision (timestamp). Adjacent changelog lines
+ * are optimistically parsed and cached to speed up
+ * consecutive calls to getRevisionInfo. For large
+ * changelog files, only the chunk containing the
+ * requested changelog line is read.
+ *
+ * @author Ben Coburn <btcoburn@silicodon.net>
+ */
+function getRevisionInfo($id, $rev, $chunk_size=8192) {
+ global $cache_revinfo;
+ $cache =& $cache_revinfo;
+ if (!isset($cache[$id])) { $cache[$id] = array(); }
+ $rev = max($rev, 0);
+
+ // check if it's already in the memory cache
+ if (isset($cache[$id]) && isset($cache[$id][$rev])) {
+ return $cache[$id][$rev];
+ }
+
+ $file = metaFN($id, '.changes');
+ if (!@file_exists($file)) { return false; }
+ if (filesize($file)<$chunk_size || $chunk_size==0) {
+ // read whole file
+ $lines = file($file);
+ if ($lines===false) { return false; }
+ } else {
+ // read by chunk
+ $fp = fopen($file, 'rb'); // "file pointer"
+ if ($fp===false) { return false; }
+ $head = 0;
+ fseek($fp, 0, SEEK_END);
+ $tail = ftell($fp);
+ $finger = 0;
+ $finger_rev = 0;
+
+ // find chunk
+ while ($tail-$head>$chunk_size) {
+ $finger = $head+floor(($tail-$head)/2.0);
+ fseek($fp, $finger);
+ fgets($fp); // slip the finger forward to a new line
+ $finger = ftell($fp);
+ $tmp = fgets($fp); // then read at that location
+ $tmp = parseChangelogLine($tmp);
+ $finger_rev = $tmp['date'];
+ if ($finger==$head || $finger==$tail) { break; }
+ if ($finger_rev>$rev) {
+ $tail = $finger;
+ } else {
+ $head = $finger;
+ }
+ }
+
+ if ($tail-$head<1) {
+ // cound not find chunk, assume requested rev is missing
+ fclose($fp);
+ return false;
+ }
+
+ // read chunk
+ $chunk = '';
+ $chunk_size = max($tail-$head, 0); // found chunk size
+ $got = 0;
+ fseek($fp, $head);
+ while ($got<$chunk_size && !feof($fp)) {
+ $tmp = @fread($fp, max($chunk_size-$got, 0));
+ if ($tmp===false) { break; } //error state
+ $got += strlen($tmp);
+ $chunk .= $tmp;
+ }
+ $lines = explode("\n", $chunk);
+ array_pop($lines); // remove trailing newline
+ fclose($fp);
+ }
+
+ // parse and cache changelog lines
+ foreach ($lines as $value) {
+ $tmp = parseChangelogLine($value);
+ if ($tmp!==false) {
+ $cache[$id][$tmp['date']] = $tmp;
+ }
+ }
+ if (!isset($cache[$id][$rev])) { return false; }
+ return $cache[$id][$rev];
+}
+
+/**
+ * Return a list of page revisions numbers
+ * Does not guarantee that the revision exists in the attic,
+ * only that a line with the date exists in the changelog.
+ * By default the current revision is skipped.
+ *
+ * id: the page of interest
+ * first: skip the first n changelog lines
+ * num: number of revisions to return
+ *
+ * The current revision is automatically skipped when the page exists.
+ * See $INFO['meta']['last_change'] for the current revision.
+ *
+ * For efficiency, the log lines are parsed and cached for later
+ * calls to getRevisionInfo. Large changelog files are read
+ * backwards in chunks until the requested number of changelog
+ * lines are recieved.
+ *
+ * @author Ben Coburn <btcoburn@silicodon.net>
+ */
+function getRevisions($id, $first, $num, $chunk_size=8192) {
+ global $cache_revinfo;
+ $cache =& $cache_revinfo;
+ if (!isset($cache[$id])) { $cache[$id] = array(); }
+
+ $revs = array();
+ $lines = array();
+ $count = 0;
+ $file = metaFN($id, '.changes');
+ $num = max($num, 0);
+ $chunk_size = max($chunk_size, 0);
+ if ($first<0) { $first = 0; }
+ else if (@file_exists(wikiFN($id))) {
+ // skip current revision if the page exists
+ $first = max($first+1, 0);
+ }
+
+ if (!@file_exists($file)) { return $revs; }
+ if (filesize($file)<$chunk_size || $chunk_size==0) {
+ // read whole file
+ $lines = file($file);
+ if ($lines===false) { return $revs; }
+ } else {
+ // read chunks backwards
+ $fp = fopen($file, 'rb'); // "file pointer"
+ if ($fp===false) { return $revs; }
+ fseek($fp, 0, SEEK_END);
+ $tail = ftell($fp);
+
+ // chunk backwards
+ $finger = max($tail-$chunk_size, 0);
+ while ($count<$num+$first) {
+ fseek($fp, $finger);
+ if ($finger>0) {
+ fgets($fp); // slip the finger forward to a new line
+ $finger = ftell($fp);
+ }
+
+ // read chunk
+ if ($tail<=$finger) { break; }
+ $chunk = '';
+ $read_size = max($tail-$finger, 0); // found chunk size
+ $got = 0;
+ while ($got<$read_size && !feof($fp)) {
+ $tmp = @fread($fp, max($read_size-$got, 0));
+ if ($tmp===false) { break; } //error state
+ $got += strlen($tmp);
+ $chunk .= $tmp;
+ }
+ $tmp = explode("\n", $chunk);
+ array_pop($tmp); // remove trailing newline
+
+ // combine with previous chunk
+ $count += count($tmp);
+ $lines = array_merge($tmp, $lines);
+
+ // next chunk
+ if ($finger==0) { break; } // already read all the lines
+ else {
+ $tail = $finger;
+ $finger = max($tail-$chunk_size, 0);
+ }
+ }
+ fclose($fp);
+ }
+
+ // skip parsing extra lines
+ $num = max(min(count($lines)-$first, $num), 0);
+ if ($first>0 && $num>0) { $lines = array_slice($lines, max(count($lines)-$first-$num, 0), $num); }
+ else if ($first>0 && $num==0) { $lines = array_slice($lines, 0, max(count($lines)-$first, 0)); }
+ else if ($first==0 && $num>0) { $lines = array_slice($lines, max(count($lines)-$num, 0)); }
+
+ // handle lines in reverse order
+ for ($i = count($lines)-1; $i >= 0; $i--) {
+ $tmp = parseChangelogLine($lines[$i]);
+ if ($tmp!==false) {
+ $cache[$id][$tmp['date']] = $tmp;
+ $revs[] = $tmp['date'];
+ }
+ }
+
+ return $revs;
+}
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/cliopts.php b/mod/dokuwiki/vendors/dokuwiki/inc/cliopts.php
new file mode 100644
index 000000000..a3698ab24
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/cliopts.php
@@ -0,0 +1,361 @@
+<?php
+/**
+* Brutally chopped and modified from http://pear.php.net/package/Console_Getopts
+*/
+// +----------------------------------------------------------------------+
+// | PHP Version 4 |
+// +----------------------------------------------------------------------+
+// | Copyright (c) 1997-2003 The PHP Group |
+// +----------------------------------------------------------------------+
+// | This source file is subject to version 3.0 of the PHP license, |
+// | that is bundled with this package in the file LICENSE, and is |
+// | available through the world-wide-web at the following url: |
+// | http://www.php.net/license/3_0.txt. |
+// | If you did not receive a copy of the PHP license and are unable to |
+// | obtain it through the world-wide-web, please send a note to |
+// | license@php.net so we can mail you a copy immediately. |
+// +----------------------------------------------------------------------+
+// | Author: Andrei Zmievski <andrei@php.net> |
+// | Modified: Harry Fuecks hfuecks gmail.com |
+// +----------------------------------------------------------------------+
+//
+
+
+//------------------------------------------------------------------------------
+/**
+* Sets up CLI environment based on SAPI and PHP version
+* Helps resolve some issues between the CGI and CLI SAPIs
+* as well is inconsistencies between PHP 4.3+ and older versions
+*/
+if (version_compare(phpversion(), '4.3.0', '<') || php_sapi_name() == 'cgi') {
+ // Handle output buffering
+ @ob_end_flush();
+ ob_implicit_flush(true);
+
+ // PHP ini settings
+ set_time_limit(0);
+ ini_set('track_errors', true);
+ ini_set('html_errors', false);
+ ini_set('magic_quotes_runtime', false);
+
+ // Define stream constants
+ define('STDIN', fopen('php://stdin', 'r'));
+ define('STDOUT', fopen('php://stdout', 'w'));
+ define('STDERR', fopen('php://stderr', 'w'));
+
+ // Close the streams on script termination
+ register_shutdown_function(
+ create_function('',
+ 'fclose(STDIN); fclose(STDOUT); fclose(STDERR); return true;')
+ );
+}
+
+//------------------------------------------------------------------------------
+/**
+* Error codes
+*/
+define('DOKU_CLI_OPTS_UNKNOWN_OPT',1); //Unrecognized option
+define('DOKU_CLI_OPTS_OPT_ARG_REQUIRED',2); //Option requires argument
+define('DOKU_CLI_OPTS_OPT_ARG_DENIED',3); //Option not allowed argument
+define('DOKU_CLI_OPTS_OPT_ABIGUOUS',4);//Option abiguous
+define('DOKU_CLI_OPTS_ARG_READ',5);//Could not read argv
+
+//------------------------------------------------------------------------------
+/**
+ * Command-line options parsing class.
+ *
+ * @author Andrei Zmievski <andrei@php.net>
+ *
+ */
+ class Doku_Cli_Opts {
+
+ /**
+ * <?php ?>
+ * @see http://www.sitepoint.com/article/php-command-line-1/3
+ * @param string executing file name - this MUST be passed the __FILE__ constant
+ * @param string short options
+ * @param array (optional) long options
+ * @return Doku_Cli_Opts_Container or Doku_Cli_Opts_Error
+ */
+ function & getOptions($bin_file, $short_options, $long_options = null) {
+ $args = Doku_Cli_Opts::readPHPArgv();
+
+ if ( Doku_Cli_Opts::isError($args) ) {
+ return $args;
+ }
+
+ // Compatibility between "php extensions.php" and "./extensions.php"
+ if ( realpath($_SERVER['argv'][0]) == $bin_file ) {
+ $options = Doku_Cli_Opts::getOpt($args,$short_options,$long_options);
+ } else {
+ $options = Doku_Cli_Opts::getOpt2($args,$short_options,$long_options);
+ }
+
+ if ( Doku_Cli_Opts::isError($options) ) {
+ return $options;
+ }
+
+ $container = new Doku_Cli_Opts_Container($options);
+ return $container;
+ }
+
+ function getopt2($args, $short_options, $long_options = null) {
+ return Doku_Cli_Opts::doGetopt(
+ 2, $args, $short_options, $long_options
+ );
+ }
+
+ function getopt($args, $short_options, $long_options = null) {
+ return Doku_Cli_Opts::doGetopt(
+ 1, $args, $short_options, $long_options
+ );
+ }
+
+ function doGetopt($version, $args, $short_options, $long_options = null) {
+
+ // in case you pass directly readPHPArgv() as the first arg
+ if (Doku_Cli_Opts::isError($args)) {
+ return $args;
+ }
+ if (empty($args)) {
+ return array(array(), array());
+ }
+ $opts = array();
+ $non_opts = array();
+
+ settype($args, 'array');
+
+ if ($long_options && is_array($long_options)) {
+ sort($long_options);
+ }
+
+ /*
+ * Preserve backwards compatibility with callers that relied on
+ * erroneous POSIX fix.
+ */
+ if ($version < 2) {
+ if (isset($args[0]{0}) && $args[0]{0} != '-') {
+ array_shift($args);
+ }
+ }
+
+ reset($args);
+ while (list($i, $arg) = each($args)) {
+
+ /* The special element '--' means explicit end of
+ options. Treat the rest of the arguments as non-options
+ and end the loop. */
+ if ($arg == '--') {
+ $non_opts = array_merge($non_opts, array_slice($args, $i + 1));
+ break;
+ }
+
+ if ($arg{0} != '-' || (strlen($arg) > 1 && $arg{1} == '-' && !$long_options)) {
+ $non_opts = array_merge($non_opts, array_slice($args, $i));
+ break;
+ } elseif (strlen($arg) > 1 && $arg{1} == '-') {
+ $error = Doku_Cli_Opts::_parseLongOption(substr($arg, 2), $long_options, $opts, $args);
+ if (Doku_Cli_Opts::isError($error))
+ return $error;
+ } else {
+ $error = Doku_Cli_Opts::_parseShortOption(substr($arg, 1), $short_options, $opts, $args);
+ if (Doku_Cli_Opts::isError($error))
+ return $error;
+ }
+ }
+
+ return array($opts, $non_opts);
+ }
+
+ function _parseShortOption($arg, $short_options, &$opts, &$args) {
+ for ($i = 0; $i < strlen($arg); $i++) {
+ $opt = $arg{$i};
+ $opt_arg = null;
+
+ /* Try to find the short option in the specifier string. */
+ if (($spec = strstr($short_options, $opt)) === false || $arg{$i} == ':')
+ {
+ return Doku_Cli_Opts::raiseError(
+ DOKU_CLI_OPTS_UNKNOWN_OPT,
+ "Unrecognized option -- $opt"
+ );
+ }
+
+ if (strlen($spec) > 1 && $spec{1} == ':') {
+ if (strlen($spec) > 2 && $spec{2} == ':') {
+ if ($i + 1 < strlen($arg)) {
+ /* Option takes an optional argument. Use the remainder of
+ the arg string if there is anything left. */
+ $opts[] = array($opt, substr($arg, $i + 1));
+ break;
+ }
+ } else {
+ /* Option requires an argument. Use the remainder of the arg
+ string if there is anything left. */
+ if ($i + 1 < strlen($arg)) {
+ $opts[] = array($opt, substr($arg, $i + 1));
+ break;
+ } else if (list(, $opt_arg) = each($args))
+ /* Else use the next argument. */;
+ else
+ return Doku_Cli_Opts::raiseError(
+ DOKU_CLI_OPTS_OPT_ARG_REQUIRED,
+ "Option requires an argument -- $opt"
+ );
+ }
+ }
+
+ $opts[] = array($opt, $opt_arg);
+ }
+ }
+
+ function _parseLongOption($arg, $long_options, &$opts, &$args) {
+ @list($opt, $opt_arg) = explode('=', $arg);
+ $opt_len = strlen($opt);
+
+ for ($i = 0; $i < count($long_options); $i++) {
+ $long_opt = $long_options[$i];
+ $opt_start = substr($long_opt, 0, $opt_len);
+
+ /* Option doesn't match. Go on to the next one. */
+ if ($opt_start != $opt)
+ continue;
+
+ $opt_rest = substr($long_opt, $opt_len);
+
+ /* Check that the options uniquely matches one of the allowed
+ options. */
+ if ($opt_rest != '' && $opt{0} != '=' &&
+ $i + 1 < count($long_options) &&
+ $opt == substr($long_options[$i+1], 0, $opt_len)) {
+ return Doku_Cli_Opts::raiseError(
+ DOKU_CLI_OPTS_OPT_ABIGUOUS,
+ "Option --$opt is ambiguous"
+ );
+ }
+
+ if (substr($long_opt, -1) == '=') {
+ if (substr($long_opt, -2) != '==') {
+ /* Long option requires an argument.
+ Take the next argument if one wasn't specified. */;
+ if (!strlen($opt_arg) && !(list(, $opt_arg) = each($args))) {
+ return Doku_Cli_Opts::raiseError(
+ DOKU_CLI_OPTS_OPT_ARG_REQUIRED,
+ "Option --$opt requires an argument"
+ );
+ }
+ }
+ } else if ($opt_arg) {
+ return Doku_Cli_Opts::raiseError(
+ DOKU_CLI_OPTS_OPT_ARG_DENIED,
+ "Option --$opt doesn't allow an argument"
+ );
+ }
+
+ $opts[] = array('--' . $opt, $opt_arg);
+ return;
+ }
+
+ return Doku_Cli_Opts::raiseError(
+ DOKU_CLI_OPTS_UNKNOWN_OPT,
+ "Unrecognized option --$opt"
+ );
+ }
+
+ function readPHPArgv() {
+ global $argv;
+ if (!is_array($argv)) {
+ if (!@is_array($_SERVER['argv'])) {
+ if (!@is_array($GLOBALS['HTTP_SERVER_VARS']['argv'])) {
+ return Doku_Cli_Opts::raiseError(
+ DOKU_CLI_OPTS_ARG_READ,
+ "Could not read cmd args (register_argc_argv=Off?)"
+ );
+ }
+ return $GLOBALS['HTTP_SERVER_VARS']['argv'];
+ }
+ return $_SERVER['argv'];
+ }
+ return $argv;
+ }
+
+ function raiseError($code, $msg) {
+ return new Doku_Cli_Opts_Error($code, $msg);
+ }
+
+ function isError($obj) {
+ return is_a($obj, 'Doku_Cli_Opts_Error');
+ }
+
+}
+
+//------------------------------------------------------------------------------
+class Doku_Cli_Opts_Error {
+
+ var $code;
+ var $msg;
+
+ function Doku_Cli_Opts_Error($code, $msg) {
+ $this->code = $code;
+ $this->msg = $msg;
+ }
+
+ function getMessage() {
+ return $this->msg;
+ }
+
+ function isError() {
+ return true;
+ }
+
+}
+
+//------------------------------------------------------------------------------
+class Doku_Cli_Opts_Container {
+
+ var $options = array();
+ var $args = array();
+
+ function Doku_Cli_Opts_Container($options) {
+ foreach ( $options[0] as $option ) {
+ if ( false !== ( strpos($option[0], '--') ) ) {
+ $opt_name = substr($option[0], 2);
+ } else {
+ $opt_name = $option[0];
+ }
+ $this->options[$opt_name] = $option[1];
+ }
+
+
+ $this->args = $options[1];
+ }
+
+ function has($option) {
+ return array_key_exists($option, $this->options);
+ }
+
+ function get($option) {
+ if ( isset($this->options[$option]) ) {
+ return ( $this->options[$option] ) ;
+ }
+ }
+
+ function arg($index) {
+ if ( isset($this->args[$index]) ) {
+ return $this->args[$index];
+ }
+ }
+
+ function numArgs() {
+ return count($this->args);
+ }
+
+ function hasArgs() {
+ return count($this->args) !== 0;
+ }
+
+ function isError() {
+ return false;
+ }
+
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/common.php b/mod/dokuwiki/vendors/dokuwiki/inc/common.php
new file mode 100644
index 000000000..610bd8de6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/common.php
@@ -0,0 +1,1549 @@
+<?php
+/**
+ * Common DokuWiki functions
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+if(!defined('DOKU_INC')) die('meh.');
+require_once(DOKU_INC.'inc/io.php');
+require_once(DOKU_INC.'inc/changelog.php');
+require_once(DOKU_INC.'inc/utf8.php');
+require_once(DOKU_INC.'inc/mail.php');
+require_once(DOKU_INC.'inc/parserutils.php');
+require_once(DOKU_INC.'inc/infoutils.php');
+
+/**
+ * These constants are used with the recents function
+ */
+define('RECENTS_SKIP_DELETED',2);
+define('RECENTS_SKIP_MINORS',4);
+define('RECENTS_SKIP_SUBSPACES',8);
+define('RECENTS_MEDIA_CHANGES',16);
+
+/**
+ * Wrapper around htmlspecialchars()
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @see htmlspecialchars()
+ */
+function hsc($string){
+ return htmlspecialchars($string, ENT_QUOTES, 'UTF-8');
+}
+
+/**
+ * print a newline terminated string
+ *
+ * You can give an indention as optional parameter
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function ptln($string,$indent=0){
+ echo str_repeat(' ', $indent)."$string\n";
+}
+
+/**
+ * strips control characters (<32) from the given string
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function stripctl($string){
+ return preg_replace('/[\x00-\x1F]+/s','',$string);
+}
+
+/**
+ * Return a secret token to be used for CSRF attack prevention
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @link http://en.wikipedia.org/wiki/Cross-site_request_forgery
+ * @link http://christ1an.blogspot.com/2007/04/preventing-csrf-efficiently.html
+ * @return string
+ */
+function getSecurityToken(){
+ return md5(auth_cookiesalt().session_id());
+}
+
+/**
+ * Check the secret CSRF token
+ */
+function checkSecurityToken($token=null){
+ if(!$_SERVER['REMOTE_USER']) return true; // no logged in user, no need for a check
+
+ if(is_null($token)) $token = $_REQUEST['sectok'];
+ if(getSecurityToken() != $token){
+ msg('Security Token did not match. Possible CSRF attack.',-1);
+ return false;
+ }
+ return true;
+}
+
+/**
+ * Print a hidden form field with a secret CSRF token
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function formSecurityToken($print=true){
+ $ret = '<div class="no"><input type="hidden" name="sectok" value="'.getSecurityToken().'" /></div>'."\n";
+ if($print){
+ echo $ret;
+ }else{
+ return $ret;
+ }
+}
+
+/**
+ * Return info about the current document as associative
+ * array.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function pageinfo(){
+ global $ID;
+ global $REV;
+ global $RANGE;
+ global $USERINFO;
+ global $conf;
+ global $lang;
+
+ // include ID & REV not redundant, as some parts of DokuWiki may temporarily change $ID, e.g. p_wiki_xhtml
+ // FIXME ... perhaps it would be better to ensure the temporary changes weren't necessary
+ $info['id'] = $ID;
+ $info['rev'] = $REV;
+
+ // set info about manager/admin status.
+ $info['isadmin'] = false;
+ $info['ismanager'] = false;
+ if(isset($_SERVER['REMOTE_USER'])){
+ $info['userinfo'] = $USERINFO;
+ $info['perm'] = auth_quickaclcheck($ID);
+ $info['subscribed'] = is_subscribed($ID,$_SERVER['REMOTE_USER'],false);
+ $info['subscribedns'] = is_subscribed($ID,$_SERVER['REMOTE_USER'],true);
+ $info['client'] = $_SERVER['REMOTE_USER'];
+
+ if($info['perm'] == AUTH_ADMIN){
+ $info['isadmin'] = true;
+ $info['ismanager'] = true;
+ }elseif(auth_ismanager()){
+ $info['ismanager'] = true;
+ }
+
+ // if some outside auth were used only REMOTE_USER is set
+ if(!$info['userinfo']['name']){
+ $info['userinfo']['name'] = $_SERVER['REMOTE_USER'];
+ }
+
+ }else{
+ $info['perm'] = auth_aclcheck($ID,'',null);
+ $info['subscribed'] = false;
+ $info['client'] = clientIP(true);
+ }
+
+ //error_log("dokuwiki actpageinfo!!".$info['perm']);
+ $info['namespace'] = getNS($ID);
+ $info['locked'] = checklock($ID);
+ $info['filepath'] = fullpath(wikiFN($ID));
+ $info['exists'] = @file_exists($info['filepath']);
+ if($REV){
+ //check if current revision was meant
+ if($info['exists'] && (@filemtime($info['filepath'])==$REV)){
+ $REV = '';
+ }elseif($RANGE){
+ //section editing does not work with old revisions!
+ $REV = '';
+ $RANGE = '';
+ msg($lang['nosecedit'],0);
+ }else{
+ //really use old revision
+ $info['filepath'] = fullpath(wikiFN($ID,$REV));
+ $info['exists'] = @file_exists($info['filepath']);
+ }
+ }
+ $info['rev'] = $REV;
+ if($info['exists']){
+ $info['writable'] = (is_writable($info['filepath']) &&
+ ($info['perm'] >= AUTH_EDIT));
+ }else{
+ $info['writable'] = ($info['perm'] >= AUTH_CREATE);
+ }
+ $info['editable'] = ($info['writable'] && empty($info['lock']));
+ $info['lastmod'] = @filemtime($info['filepath']);
+
+ //load page meta data
+ $info['meta'] = p_get_metadata($ID);
+
+ //who's the editor
+ if($REV){
+ $revinfo = getRevisionInfo($ID, $REV, 1024);
+ }else{
+ if (is_array($info['meta']['last_change'])) {
+ $revinfo = $info['meta']['last_change'];
+ } else {
+ $revinfo = getRevisionInfo($ID, $info['lastmod'], 1024);
+ // cache most recent changelog line in metadata if missing and still valid
+ if ($revinfo!==false) {
+ $info['meta']['last_change'] = $revinfo;
+ p_set_metadata($ID, array('last_change' => $revinfo));
+ }
+ }
+ }
+ //and check for an external edit
+ if($revinfo!==false && $revinfo['date']!=$info['lastmod']){
+ // cached changelog line no longer valid
+ $revinfo = false;
+ $info['meta']['last_change'] = $revinfo;
+ p_set_metadata($ID, array('last_change' => $revinfo));
+ }
+
+ $info['ip'] = $revinfo['ip'];
+ $info['user'] = $revinfo['user'];
+ $info['sum'] = $revinfo['sum'];
+ // See also $INFO['meta']['last_change'] which is the most recent log line for page $ID.
+ // Use $INFO['meta']['last_change']['type']===DOKU_CHANGE_TYPE_MINOR_EDIT in place of $info['minor'].
+
+ if($revinfo['user']){
+ $info['editor'] = $revinfo['user'];
+ }else{
+ $info['editor'] = $revinfo['ip'];
+ }
+
+ // draft
+ $draft = getCacheName($info['client'].$ID,'.draft');
+ if(@file_exists($draft)){
+ if(@filemtime($draft) < @filemtime(wikiFN($ID))){
+ // remove stale draft
+ @unlink($draft);
+ }else{
+ $info['draft'] = $draft;
+ }
+ }
+
+ // mobile detection
+ $info['ismobile'] = clientismobile();
+
+ return $info;
+}
+
+/**
+ * Build an string of URL parameters
+ *
+ * @author Andreas Gohr
+ */
+function buildURLparams($params, $sep='&amp;'){
+ $url = '';
+ $amp = false;
+ foreach($params as $key => $val){
+ if($amp) $url .= $sep;
+
+ $url .= $key.'=';
+ $url .= rawurlencode((string)$val);
+ $amp = true;
+ }
+ return $url;
+}
+
+/**
+ * Build an string of html tag attributes
+ *
+ * Skips keys starting with '_', values get HTML encoded
+ *
+ * @author Andreas Gohr
+ */
+function buildAttributes($params,$skipempty=false){
+ $url = '';
+ foreach($params as $key => $val){
+ if($key{0} == '_') continue;
+ if($val === '' && $skipempty) continue;
+
+ $url .= $key.'="';
+ $url .= htmlspecialchars ($val);
+ $url .= '" ';
+ }
+ return $url;
+}
+
+
+/**
+ * This builds the breadcrumb trail and returns it as array
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function breadcrumbs(){
+ // we prepare the breadcrumbs early for quick session closing
+ static $crumbs = null;
+ if($crumbs != null) return $crumbs;
+
+ global $ID;
+ global $ACT;
+ global $conf;
+
+ //first visit?
+ $crumbs = isset($_SESSION[DOKU_COOKIE]['bc']) ? $_SESSION[DOKU_COOKIE]['bc'] : array();
+ //we only save on show and existing wiki documents
+ $file = wikiFN($ID);
+ if($ACT != 'show' || !@file_exists($file)){
+ $_SESSION[DOKU_COOKIE]['bc'] = $crumbs;
+ return $crumbs;
+ }
+
+ // page names
+ $name = noNSorNS($ID);
+ if (useHeading('navigation')) {
+ // get page title
+ $title = p_get_first_heading($ID,true);
+ if ($title) {
+ $name = $title;
+ }
+ }
+
+ //remove ID from array
+ if (isset($crumbs[$ID])) {
+ unset($crumbs[$ID]);
+ }
+
+ //add to array
+ $crumbs[$ID] = $name;
+ //reduce size
+ while(count($crumbs) > $conf['breadcrumbs']){
+ array_shift($crumbs);
+ }
+ //save to session
+ $_SESSION[DOKU_COOKIE]['bc'] = $crumbs;
+ return $crumbs;
+}
+
+/**
+ * Filter for page IDs
+ *
+ * This is run on a ID before it is outputted somewhere
+ * currently used to replace the colon with something else
+ * on Windows systems and to have proper URL encoding
+ *
+ * Urlencoding is ommitted when the second parameter is false
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function idfilter($id,$ue=true){
+ global $conf;
+ if ($conf['useslash'] && $conf['userewrite']){
+ $id = strtr($id,':','/');
+ }elseif (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN' &&
+ $conf['userewrite']) {
+ $id = strtr($id,':',';');
+ }
+ if($ue){
+ $id = rawurlencode($id);
+ $id = str_replace('%3A',':',$id); //keep as colon
+ $id = str_replace('%2F','/',$id); //keep as slash
+ }
+ return $id;
+}
+
+/**
+ * This builds a link to a wikipage
+ *
+ * It handles URL rewriting and adds additional parameter if
+ * given in $more
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function wl($id='',$more='',$abs=false,$sep='&amp;'){
+ global $conf;
+ if(is_array($more)){
+ $more = buildURLparams($more,$sep);
+ }else{
+ $more = str_replace(',',$sep,$more);
+ }
+
+ $id = idfilter($id);
+ if($abs){
+ $xlink = DOKU_URL;
+ }else{
+ $xlink = DOKU_BASE;
+ }
+
+ if($conf['userewrite'] == 2){
+ $xlink .= DOKU_SCRIPT.'/'.$id;
+ if($more) $xlink .= '?'.$more;
+ }elseif($conf['userewrite']){
+ $xlink .= $id;
+ if($more) $xlink .= '?'.$more;
+ }elseif($id){
+ $xlink .= DOKU_SCRIPT.'?id='.$id;
+ if($more) $xlink .= $sep.$more;
+ }else{
+ $xlink .= DOKU_SCRIPT;
+ if($more) $xlink .= '?'.$more;
+ }
+
+ return $xlink;
+}
+
+/**
+ * This builds a link to an alternate page format
+ *
+ * Handles URL rewriting if enabled. Follows the style of wl().
+ *
+ * @author Ben Coburn <btcoburn@silicodon.net>
+ */
+function exportlink($id='',$format='raw',$more='',$abs=false,$sep='&amp;'){
+ global $conf;
+ if(is_array($more)){
+ $more = buildURLparams($more,$sep);
+ }else{
+ $more = str_replace(',',$sep,$more);
+ }
+
+ $format = rawurlencode($format);
+ $id = idfilter($id);
+ if($abs){
+ $xlink = DOKU_URL;
+ }else{
+ $xlink = DOKU_BASE;
+ }
+
+ if($conf['userewrite'] == 2){
+ $xlink .= DOKU_SCRIPT.'/'.$id.'?do=export_'.$format;
+ if($more) $xlink .= $sep.$more;
+ }elseif($conf['userewrite'] == 1){
+ $xlink .= '_export/'.$format.'/'.$id;
+ if($more) $xlink .= '?'.$more;
+ }else{
+ $xlink .= DOKU_SCRIPT.'?do=export_'.$format.$sep.'id='.$id;
+ if($more) $xlink .= $sep.$more;
+ }
+
+ return $xlink;
+}
+
+/**
+ * Build a link to a media file
+ *
+ * Will return a link to the detail page if $direct is false
+ *
+ * The $more parameter should always be given as array, the function then
+ * will strip default parameters to produce even cleaner URLs
+ *
+ * @param string $id - the media file id or URL
+ * @param mixed $more - string or array with additional parameters
+ * @param boolean $direct - link to detail page if false
+ * @param string $sep - URL parameter separator
+ * @param boolean $abs - Create an absolute URL
+ */
+function ml($id='',$more='',$direct=true,$sep='&amp;',$abs=false){
+ global $conf;
+ if(is_array($more)){
+ // strip defaults for shorter URLs
+ if(isset($more['cache']) && $more['cache'] == 'cache') unset($more['cache']);
+ if(!$more['w']) unset($more['w']);
+ if(!$more['h']) unset($more['h']);
+ if(isset($more['id']) && $direct) unset($more['id']);
+ $more = buildURLparams($more,$sep);
+ }else{
+ $more = str_replace('cache=cache','',$more); //skip default
+ $more = str_replace(',,',',',$more);
+ $more = str_replace(',',$sep,$more);
+ }
+
+ if($abs){
+ $xlink = DOKU_URL;
+ }else{
+ $xlink = DOKU_BASE;
+ }
+
+ // external URLs are always direct without rewriting
+ if(preg_match('#^(https?|ftp)://#i',$id)){
+ $xlink .= 'lib/exe/fetch.php';
+ // add hash:
+ $xlink .= '?hash='.substr(md5(auth_cookiesalt().$id),0,6);
+ if($more){
+ $xlink .= $sep.$more;
+ $xlink .= $sep.'media='.rawurlencode($id);
+ }else{
+ $xlink .= $sep.'media='.rawurlencode($id);
+ }
+ return $xlink;
+ }
+
+ $id = idfilter($id);
+
+ // decide on scriptname
+ if($direct){
+ if($conf['userewrite'] == 1){
+ $script = '_media';
+ }else{
+ $script = 'lib/exe/fetch.php';
+ }
+ }else{
+ if($conf['userewrite'] == 1){
+ $script = '_detail';
+ }else{
+ $script = 'lib/exe/detail.php';
+ }
+ }
+
+ // build URL based on rewrite mode
+ if($conf['userewrite']){
+ $xlink .= $script.'/'.$id;
+ if($more) $xlink .= '?'.$more;
+ }else{
+ if($more){
+ $xlink .= $script.'?'.$more;
+ $xlink .= $sep.'media='.$id;
+ }else{
+ $xlink .= $script.'?media='.$id;
+ }
+ }
+
+ return $xlink;
+}
+
+
+
+/**
+ * Just builds a link to a script
+ *
+ * @todo maybe obsolete
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function script($script='doku.php'){
+# $link = getBaseURL();
+# $link .= $script;
+# return $link;
+ return DOKU_BASE.DOKU_SCRIPT;
+}
+
+/**
+ * Spamcheck against wordlist
+ *
+ * Checks the wikitext against a list of blocked expressions
+ * returns true if the text contains any bad words
+ *
+ * Triggers COMMON_WORDBLOCK_BLOCKED
+ *
+ * Action Plugins can use this event to inspect the blocked data
+ * and gain information about the user who was blocked.
+ *
+ * Event data:
+ * data['matches'] - array of matches
+ * data['userinfo'] - information about the blocked user
+ * [ip] - ip address
+ * [user] - username (if logged in)
+ * [mail] - mail address (if logged in)
+ * [name] - real name (if logged in)
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Michael Klier <chi@chimeric.de>
+ * @param string $text - optional text to check, if not given the globals are used
+ * @return bool - true if a spam word was found
+ */
+function checkwordblock($text=''){
+ global $TEXT;
+ global $PRE;
+ global $SUF;
+ global $conf;
+ global $INFO;
+
+ if(!$conf['usewordblock']) return false;
+
+ if(!$text) $text = "$PRE $TEXT $SUF";
+
+ // we prepare the text a tiny bit to prevent spammers circumventing URL checks
+ $text = preg_replace('!(\b)(www\.[\w.:?\-;,]+?\.[\w.:?\-;,]+?[\w/\#~:.?+=&%@\!\-.:?\-;,]+?)([.:?\-;,]*[^\w/\#~:.?+=&%@\!\-.:?\-;,])!i','\1http://\2 \2\3',$text);
+
+ $wordblocks = getWordblocks();
+ //how many lines to read at once (to work around some PCRE limits)
+ if(version_compare(phpversion(),'4.3.0','<')){
+ //old versions of PCRE define a maximum of parenthesises even if no
+ //backreferences are used - the maximum is 99
+ //this is very bad performancewise and may even be too high still
+ $chunksize = 40;
+ }else{
+ //read file in chunks of 200 - this should work around the
+ //MAX_PATTERN_SIZE in modern PCRE
+ $chunksize = 200;
+ }
+ while($blocks = array_splice($wordblocks,0,$chunksize)){
+ $re = array();
+ #build regexp from blocks
+ foreach($blocks as $block){
+ $block = preg_replace('/#.*$/','',$block);
+ $block = trim($block);
+ if(empty($block)) continue;
+ $re[] = $block;
+ }
+ if(count($re) && preg_match('#('.join('|',$re).')#si',$text,$matches)) {
+ //prepare event data
+ $data['matches'] = $matches;
+ $data['userinfo']['ip'] = $_SERVER['REMOTE_ADDR'];
+ if($_SERVER['REMOTE_USER']) {
+ $data['userinfo']['user'] = $_SERVER['REMOTE_USER'];
+ $data['userinfo']['name'] = $INFO['userinfo']['name'];
+ $data['userinfo']['mail'] = $INFO['userinfo']['mail'];
+ }
+ $callback = create_function('', 'return true;');
+ return trigger_event('COMMON_WORDBLOCK_BLOCKED', $data, $callback, true);
+ }
+ }
+ return false;
+}
+
+/**
+ * Return the IP of the client
+ *
+ * Honours X-Forwarded-For and X-Real-IP Proxy Headers
+ *
+ * It returns a comma separated list of IPs if the above mentioned
+ * headers are set. If the single parameter is set, it tries to return
+ * a routable public address, prefering the ones suplied in the X
+ * headers
+ *
+ * @param boolean $single If set only a single IP is returned
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function clientIP($single=false){
+ $ip = array();
+ $ip[] = $_SERVER['REMOTE_ADDR'];
+ if(!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
+ $ip = array_merge($ip,explode(',',$_SERVER['HTTP_X_FORWARDED_FOR']));
+ if(!empty($_SERVER['HTTP_X_REAL_IP']))
+ $ip = array_merge($ip,explode(',',$_SERVER['HTTP_X_REAL_IP']));
+
+ // some IPv4/v6 regexps borrowed from Feyd
+ // see: http://forums.devnetwork.net/viewtopic.php?f=38&t=53479
+ $dec_octet = '(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|[0-9])';
+ $hex_digit = '[A-Fa-f0-9]';
+ $h16 = "{$hex_digit}{1,4}";
+ $IPv4Address = "$dec_octet\\.$dec_octet\\.$dec_octet\\.$dec_octet";
+ $ls32 = "(?:$h16:$h16|$IPv4Address)";
+ $IPv6Address =
+ "(?:(?:{$IPv4Address})|(?:".
+ "(?:$h16:){6}$ls32" .
+ "|::(?:$h16:){5}$ls32" .
+ "|(?:$h16)?::(?:$h16:){4}$ls32" .
+ "|(?:(?:$h16:){0,1}$h16)?::(?:$h16:){3}$ls32" .
+ "|(?:(?:$h16:){0,2}$h16)?::(?:$h16:){2}$ls32" .
+ "|(?:(?:$h16:){0,3}$h16)?::(?:$h16:){1}$ls32" .
+ "|(?:(?:$h16:){0,4}$h16)?::$ls32" .
+ "|(?:(?:$h16:){0,5}$h16)?::$h16" .
+ "|(?:(?:$h16:){0,6}$h16)?::" .
+ ")(?:\\/(?:12[0-8]|1[0-1][0-9]|[1-9][0-9]|[0-9]))?)";
+
+ // remove any non-IP stuff
+ $cnt = count($ip);
+ $match = array();
+ for($i=0; $i<$cnt; $i++){
+ if(preg_match("/^$IPv4Address$/",$ip[$i],$match) || preg_match("/^$IPv6Address$/",$ip[$i],$match)) {
+ $ip[$i] = $match[0];
+ } else {
+ $ip[$i] = '';
+ }
+ if(empty($ip[$i])) unset($ip[$i]);
+ }
+ $ip = array_values(array_unique($ip));
+ if(!$ip[0]) $ip[0] = '0.0.0.0'; // for some strange reason we don't have a IP
+
+ if(!$single) return join(',',$ip);
+
+ // decide which IP to use, trying to avoid local addresses
+ $ip = array_reverse($ip);
+ foreach($ip as $i){
+ if(preg_match('/^(127\.|10\.|192\.168\.|172\.((1[6-9])|(2[0-9])|(3[0-1]))\.)/',$i)){
+ continue;
+ }else{
+ return $i;
+ }
+ }
+ // still here? just use the first (last) address
+ return $ip[0];
+}
+
+/**
+ * Check if the browser is on a mobile device
+ *
+ * Adapted from the example code at url below
+ *
+ * @link http://www.brainhandles.com/2007/10/15/detecting-mobile-browsers/#code
+ */
+function clientismobile(){
+
+ if(isset($_SERVER['HTTP_X_WAP_PROFILE'])) return true;
+
+ if(preg_match('/wap\.|\.wap/i',$_SERVER['HTTP_ACCEPT'])) return true;
+
+ if(!isset($_SERVER['HTTP_USER_AGENT'])) return false;
+
+ $uamatches = 'midp|j2me|avantg|docomo|novarra|palmos|palmsource|240x320|opwv|chtml|pda|windows ce|mmp\/|blackberry|mib\/|symbian|wireless|nokia|hand|mobi|phone|cdm|up\.b|audio|SIE\-|SEC\-|samsung|HTC|mot\-|mitsu|sagem|sony|alcatel|lg|erics|vx|NEC|philips|mmm|xx|panasonic|sharp|wap|sch|rover|pocket|benq|java|pt|pg|vox|amoi|bird|compal|kg|voda|sany|kdd|dbt|sendo|sgh|gradi|jb|\d\d\di|moto';
+
+ if(preg_match("/$uamatches/i",$_SERVER['HTTP_USER_AGENT'])) return true;
+
+ return false;
+}
+
+
+/**
+ * Convert one or more comma separated IPs to hostnames
+ *
+ * @author Glen Harris <astfgl@iamnota.org>
+ * @returns a comma separated list of hostnames
+ */
+function gethostsbyaddrs($ips){
+ $hosts = array();
+ $ips = explode(',',$ips);
+
+ if(is_array($ips)) {
+ foreach($ips as $ip){
+ $hosts[] = gethostbyaddr(trim($ip));
+ }
+ return join(',',$hosts);
+ } else {
+ return gethostbyaddr(trim($ips));
+ }
+}
+
+/**
+ * Checks if a given page is currently locked.
+ *
+ * removes stale lockfiles
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function checklock($id){
+ global $conf;
+ $lock = wikiLockFN($id);
+
+ //no lockfile
+ if(!@file_exists($lock)) return false;
+
+ //lockfile expired
+ if((time() - filemtime($lock)) > $conf['locktime']){
+ @unlink($lock);
+ return false;
+ }
+
+ //my own lock
+ $ip = io_readFile($lock);
+ if( ($ip == clientIP()) || ($ip == $_SERVER['REMOTE_USER']) ){
+ return false;
+ }
+
+ return $ip;
+}
+
+/**
+ * Lock a page for editing
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function lock($id){
+ $lock = wikiLockFN($id);
+ if($_SERVER['REMOTE_USER']){
+ io_saveFile($lock,$_SERVER['REMOTE_USER']);
+ }else{
+ io_saveFile($lock,clientIP());
+ }
+}
+
+/**
+ * Unlock a page if it was locked by the user
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @return bool true if a lock was removed
+ */
+function unlock($id){
+ $lock = wikiLockFN($id);
+ if(@file_exists($lock)){
+ $ip = io_readFile($lock);
+ if( ($ip == clientIP()) || ($ip == $_SERVER['REMOTE_USER']) ){
+ @unlink($lock);
+ return true;
+ }
+ }
+ return false;
+}
+
+/**
+ * convert line ending to unix format
+ *
+ * @see formText() for 2crlf conversion
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function cleanText($text){
+ $text = preg_replace("/(\015\012)|(\015)/","\012",$text);
+ return $text;
+}
+
+/**
+ * Prepares text for print in Webforms by encoding special chars.
+ * It also converts line endings to Windows format which is
+ * pseudo standard for webforms.
+ *
+ * @see cleanText() for 2unix conversion
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function formText($text){
+ $text = str_replace("\012","\015\012",$text);
+ return htmlspecialchars($text);
+}
+
+/**
+ * Returns the specified local text in raw format
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function rawLocale($id){
+ return io_readFile(localeFN($id));
+}
+
+/**
+ * Returns the raw WikiText
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function rawWiki($id,$rev=''){
+ return io_readWikiPage(wikiFN($id, $rev), $id, $rev);
+}
+
+/**
+ * Returns the pagetemplate contents for the ID's namespace
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function pageTemplate($data){
+ $id = $data[0];
+ global $conf;
+ global $INFO;
+
+ $path = dirname(wikiFN($id));
+
+ if(@file_exists($path.'/_template.txt')){
+ $tpl = io_readFile($path.'/_template.txt');
+ }else{
+ // search upper namespaces for templates
+ $len = strlen(rtrim($conf['datadir'],'/'));
+ while (strlen($path) >= $len){
+ if(@file_exists($path.'/__template.txt')){
+ $tpl = io_readFile($path.'/__template.txt');
+ break;
+ }
+ $path = substr($path, 0, strrpos($path, '/'));
+ }
+ }
+ if(!$tpl) return '';
+
+ // replace placeholders
+ $file = noNS($id);
+ $page = strtr($file,'_',' ');
+
+ $tpl = str_replace(array(
+ '@ID@',
+ '@NS@',
+ '@FILE@',
+ '@!FILE@',
+ '@!FILE!@',
+ '@PAGE@',
+ '@!PAGE@',
+ '@!!PAGE@',
+ '@!PAGE!@',
+ '@USER@',
+ '@NAME@',
+ '@MAIL@',
+ '@DATE@',
+ ),
+ array(
+ $id,
+ getNS($id),
+ $file,
+ utf8_ucfirst($file),
+ utf8_strtoupper($file),
+ $page,
+ utf8_ucfirst($page),
+ utf8_ucwords($page),
+ utf8_strtoupper($page),
+ $_SERVER['REMOTE_USER'],
+ $INFO['userinfo']['name'],
+ $INFO['userinfo']['mail'],
+ $conf['dformat'],
+ ), $tpl);
+
+ // we need the callback to work around strftime's char limit
+ $tpl = preg_replace_callback('/%./',create_function('$m','return strftime($m[0]);'),$tpl);
+
+ return $tpl;
+}
+
+
+/**
+ * Returns the raw Wiki Text in three slices.
+ *
+ * The range parameter needs to have the form "from-to"
+ * and gives the range of the section in bytes - no
+ * UTF-8 awareness is needed.
+ * The returned order is prefix, section and suffix.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function rawWikiSlices($range,$id,$rev=''){
+ list($from,$to) = explode('-',$range,2);
+ $text = io_readWikiPage(wikiFN($id, $rev), $id, $rev);
+ if(!$from) $from = 0;
+ if(!$to) $to = strlen($text)+1;
+
+ $slices[0] = substr($text,0,$from-1);
+ $slices[1] = substr($text,$from-1,$to-$from);
+ $slices[2] = substr($text,$to);
+
+ return $slices;
+}
+
+/**
+ * Joins wiki text slices
+ *
+ * function to join the text slices with correct lineendings again.
+ * When the pretty parameter is set to true it adds additional empty
+ * lines between sections if needed (used on saving).
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function con($pre,$text,$suf,$pretty=false){
+
+ if($pretty){
+ if($pre && substr($pre,-1) != "\n") $pre .= "\n";
+ if($suf && substr($text,-1) != "\n") $text .= "\n";
+ }
+
+ // Avoid double newline above section when saving section edit
+ //if($pre) $pre .= "\n";
+ if($suf) $text .= "\n";
+ return $pre.$text.$suf;
+}
+
+/**
+ * Saves a wikitext by calling io_writeWikiPage.
+ * Also directs changelog and attic updates.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Ben Coburn <btcoburn@silicodon.net>
+ */
+function saveWikiText($id,$text,$summary,$minor=false){
+ /* Note to developers:
+ This code is subtle and delicate. Test the behavior of
+ the attic and changelog with dokuwiki and external edits
+ after any changes. External edits change the wiki page
+ directly without using php or dokuwiki.
+ */
+ global $conf;
+ global $lang;
+ global $REV;
+ // ignore if no changes were made
+ if($text == rawWiki($id,'')){
+ return;
+ }
+
+ $file = wikiFN($id);
+ $old = @filemtime($file); // from page
+ $wasRemoved = empty($text);
+ $wasCreated = !@file_exists($file);
+ $wasReverted = ($REV==true);
+ $newRev = false;
+ $oldRev = getRevisions($id, -1, 1, 1024); // from changelog
+ $oldRev = (int)(empty($oldRev)?0:$oldRev[0]);
+ if(!@file_exists(wikiFN($id, $old)) && @file_exists($file) && $old>=$oldRev) {
+ // add old revision to the attic if missing
+ saveOldRevision($id);
+ // add a changelog entry if this edit came from outside dokuwiki
+ if ($old>$oldRev) {
+ addLogEntry($old, $id, DOKU_CHANGE_TYPE_EDIT, $lang['external_edit'], '', array('ExternalEdit'=>true));
+ // remove soon to be stale instructions
+ $cache = new cache_instructions($id, $file);
+ $cache->removeCache();
+ }
+ }
+
+ if ($wasRemoved){
+ // Send "update" event with empty data, so plugins can react to page deletion
+ $data = array(array($file, '', false), getNS($id), noNS($id), false);
+ trigger_event('IO_WIKIPAGE_WRITE', $data);
+ // pre-save deleted revision
+ @touch($file);
+ clearstatcache();
+ $newRev = saveOldRevision($id);
+ // remove empty file
+ @unlink($file);
+ // remove old meta info...
+ $mfiles = metaFiles($id);
+ $changelog = metaFN($id, '.changes');
+ $metadata = metaFN($id, '.meta');
+ foreach ($mfiles as $mfile) {
+ // but keep per-page changelog to preserve page history and keep meta data
+ if (@file_exists($mfile) && $mfile!==$changelog && $mfile!==$metadata) { @unlink($mfile); }
+ }
+ // purge meta data
+ p_purge_metadata($id);
+ $del = true;
+ // autoset summary on deletion
+ if(empty($summary)) $summary = $lang['deleted'];
+ // remove empty namespaces
+ io_sweepNS($id, 'datadir');
+ io_sweepNS($id, 'mediadir');
+ }else{
+ // save file (namespace dir is created in io_writeWikiPage)
+ io_writeWikiPage($file, $text, $id);
+ // pre-save the revision, to keep the attic in sync
+ $newRev = saveOldRevision($id);
+ $del = false;
+ }
+
+ // select changelog line type
+ $extra = '';
+ $type = DOKU_CHANGE_TYPE_EDIT;
+ if ($wasReverted) {
+ $type = DOKU_CHANGE_TYPE_REVERT;
+ $extra = $REV;
+ }
+ else if ($wasCreated) { $type = DOKU_CHANGE_TYPE_CREATE; }
+ else if ($wasRemoved) { $type = DOKU_CHANGE_TYPE_DELETE; }
+ else if ($minor && $conf['useacl'] && $_SERVER['REMOTE_USER']) { $type = DOKU_CHANGE_TYPE_MINOR_EDIT; } //minor edits only for logged in users
+
+ addLogEntry($newRev, $id, $type, $summary, $extra);
+ // send notify mails
+ notify($id,'admin',$old,$summary,$minor);
+ notify($id,'subscribers',$old,$summary,$minor);
+
+ // update the purgefile (timestamp of the last time anything within the wiki was changed)
+ io_saveFile($conf['cachedir'].'/purgefile',time());
+
+ // if useheading is enabled, purge the cache of all linking pages
+ if(useHeading('content')){
+ require_once(DOKU_INC.'inc/fulltext.php');
+ $pages = ft_backlinks($id);
+ foreach ($pages as $page) {
+ $cache = new cache_renderer($page, wikiFN($page), 'xhtml');
+ $cache->removeCache();
+ }
+ }
+}
+
+/**
+ * moves the current version to the attic and returns its
+ * revision date
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function saveOldRevision($id){
+ global $conf;
+ $oldf = wikiFN($id);
+ if(!@file_exists($oldf)) return '';
+ $date = filemtime($oldf);
+ $newf = wikiFN($id,$date);
+ io_writeWikiPage($newf, rawWiki($id), $id, $date);
+ return $date;
+}
+
+/**
+ * Sends a notify mail on page change or registration
+ *
+ * @param string $id The changed page
+ * @param string $who Who to notify (admin|subscribers|register)
+ * @param int $rev Old page revision
+ * @param string $summary What changed
+ * @param boolean $minor Is this a minor edit?
+ * @param array $replace Additional string substitutions, @KEY@ to be replaced by value
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function notify($id,$who,$rev='',$summary='',$minor=false,$replace=array()){
+ global $lang;
+ global $conf;
+ global $INFO;
+
+ // decide if there is something to do
+ if($who == 'admin'){
+ if(empty($conf['notify'])) return; //notify enabled?
+ $text = rawLocale('mailtext');
+ $to = $conf['notify'];
+ $bcc = '';
+ }elseif($who == 'subscribers'){
+ if(!$conf['subscribers']) return; //subscribers enabled?
+ if($conf['useacl'] && $_SERVER['REMOTE_USER'] && $minor) return; //skip minors
+ $bcc = subscriber_addresslist($id,false);
+ if(empty($bcc)) return;
+ $to = '';
+ $text = rawLocale('subscribermail');
+ }elseif($who == 'register'){
+ if(empty($conf['registernotify'])) return;
+ $text = rawLocale('registermail');
+ $to = $conf['registernotify'];
+ $bcc = '';
+ }else{
+ return; //just to be safe
+ }
+
+ $ip = clientIP();
+ $text = str_replace('@DATE@',dformat(),$text);
+ $text = str_replace('@BROWSER@',$_SERVER['HTTP_USER_AGENT'],$text);
+ $text = str_replace('@IPADDRESS@',$ip,$text);
+ $text = str_replace('@HOSTNAME@',gethostsbyaddrs($ip),$text);
+ $text = str_replace('@NEWPAGE@',wl($id,'',true,'&'),$text);
+ $text = str_replace('@PAGE@',$id,$text);
+ $text = str_replace('@TITLE@',$conf['title'],$text);
+ $text = str_replace('@DOKUWIKIURL@',DOKU_URL,$text);
+ $text = str_replace('@SUMMARY@',$summary,$text);
+ $text = str_replace('@USER@',$_SERVER['REMOTE_USER'],$text);
+
+ foreach ($replace as $key => $substitution) {
+ $text = str_replace('@'.strtoupper($key).'@',$substitution, $text);
+ }
+
+ if($who == 'register'){
+ $subject = $lang['mail_new_user'].' '.$summary;
+ }elseif($rev){
+ $subject = $lang['mail_changed'].' '.$id;
+ $text = str_replace('@OLDPAGE@',wl($id,"rev=$rev",true,'&'),$text);
+ require_once(DOKU_INC.'inc/DifferenceEngine.php');
+ $df = new Diff(explode("\n",rawWiki($id,$rev)),
+ explode("\n",rawWiki($id)));
+ $dformat = new UnifiedDiffFormatter();
+ $diff = $dformat->format($df);
+ }else{
+ $subject=$lang['mail_newpage'].' '.$id;
+ $text = str_replace('@OLDPAGE@','none',$text);
+ $diff = rawWiki($id);
+ }
+ $text = str_replace('@DIFF@',$diff,$text);
+ $subject = '['.$conf['title'].'] '.$subject;
+
+ $from = $conf['mailfrom'];
+ $from = str_replace('@USER@',$_SERVER['REMOTE_USER'],$from);
+ $from = str_replace('@NAME@',$INFO['userinfo']['name'],$from);
+ $from = str_replace('@MAIL@',$INFO['userinfo']['mail'],$from);
+
+ mail_send($to,$subject,$text,$from,'',$bcc);
+}
+
+/**
+ * extracts the query from a search engine referrer
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Todd Augsburger <todd@rollerorgans.com>
+ */
+function getGoogleQuery(){
+ if (!isset($_SERVER['HTTP_REFERER'])) {
+ return '';
+ }
+ $url = parse_url($_SERVER['HTTP_REFERER']);
+
+ $query = array();
+
+ // temporary workaround against PHP bug #49733
+ // see http://bugs.php.net/bug.php?id=49733
+ if(UTF8_MBSTRING) $enc = mb_internal_encoding();
+ parse_str($url['query'],$query);
+ if(UTF8_MBSTRING) mb_internal_encoding($enc);
+
+ $q = '';
+ if(isset($query['q']))
+ $q = $query['q']; // google, live/msn, aol, ask, altavista, alltheweb, gigablast
+ elseif(isset($query['p']))
+ $q = $query['p']; // yahoo
+ elseif(isset($query['query']))
+ $q = $query['query']; // lycos, netscape, clusty, hotbot
+ elseif(preg_match("#a9\.com#i",$url['host'])) // a9
+ $q = urldecode(ltrim($url['path'],'/'));
+
+ if($q === '') return '';
+ $q = preg_split('/[\s\'"\\\\`()\]\[?:!\.{};,#+*<>\\/]+/',$q,-1,PREG_SPLIT_NO_EMPTY);
+ return $q;
+}
+
+/**
+ * Try to set correct locale
+ *
+ * @deprecated No longer used
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function setCorrectLocale(){
+ global $conf;
+ global $lang;
+
+ $enc = strtoupper($lang['encoding']);
+ foreach ($lang['locales'] as $loc){
+ //try locale
+ if(@setlocale(LC_ALL,$loc)) return;
+ //try loceale with encoding
+ if(@setlocale(LC_ALL,"$loc.$enc")) return;
+ }
+ //still here? try to set from environment
+ @setlocale(LC_ALL,"");
+}
+
+/**
+ * Return the human readable size of a file
+ *
+ * @param int $size A file size
+ * @param int $dec A number of decimal places
+ * @author Martin Benjamin <b.martin@cybernet.ch>
+ * @author Aidan Lister <aidan@php.net>
+ * @version 1.0.0
+ */
+function filesize_h($size, $dec = 1){
+ $sizes = array('B', 'KB', 'MB', 'GB');
+ $count = count($sizes);
+ $i = 0;
+
+ while ($size >= 1024 && ($i < $count - 1)) {
+ $size /= 1024;
+ $i++;
+ }
+
+ return round($size, $dec) . ' ' . $sizes[$i];
+}
+
+/**
+ * Return the given timestamp as human readable, fuzzy age
+ *
+ * @author Andreas Gohr <gohr@cosmocode.de>
+ */
+function datetime_h($dt){
+ global $lang;
+
+ $ago = time() - $dt;
+ if($ago > 24*60*60*30*12*2){
+ return sprintf($lang['years'], round($ago/(24*60*60*30*12)));
+ }
+ if($ago > 24*60*60*30*2){
+ return sprintf($lang['months'], round($ago/(24*60*60*30)));
+ }
+ if($ago > 24*60*60*7*2){
+ return sprintf($lang['weeks'], round($ago/(24*60*60*7)));
+ }
+ if($ago > 24*60*60*2){
+ return sprintf($lang['days'], round($ago/(24*60*60)));
+ }
+ if($ago > 60*60*2){
+ return sprintf($lang['hours'], round($ago/(60*60)));
+ }
+ if($ago > 60*2){
+ return sprintf($lang['minutes'], round($ago/(60)));
+ }
+ return sprintf($lang['seconds'], $ago);
+
+}
+
+/**
+ * Wraps around strftime but provides support for fuzzy dates
+ *
+ * The format default to $conf['dformat']. It is passed to
+ * strftime - %f can be used to get the value from datetime_h()
+ *
+ * @see datetime_h
+ * @author Andreas Gohr <gohr@cosmocode.de>
+ */
+function dformat($dt=null,$format=''){
+ global $conf;
+
+ if(is_null($dt)) $dt = time();
+ $dt = (int) $dt;
+ if(!$format) $format = $conf['dformat'];
+
+ $format = str_replace('%f',datetime_h($dt),$format);
+ return strftime($format,$dt);
+}
+
+/**
+ * return an obfuscated email address in line with $conf['mailguard'] setting
+ *
+ * @author Harry Fuecks <hfuecks@gmail.com>
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ */
+function obfuscate($email) {
+ global $conf;
+
+ switch ($conf['mailguard']) {
+ case 'visible' :
+ $obfuscate = array('@' => ' [at] ', '.' => ' [dot] ', '-' => ' [dash] ');
+ return strtr($email, $obfuscate);
+
+ case 'hex' :
+ $encode = '';
+ for ($x=0; $x < strlen($email); $x++) $encode .= '&#x' . bin2hex($email{$x}).';';
+ return $encode;
+
+ case 'none' :
+ default :
+ return $email;
+ }
+}
+
+/**
+ * Let us know if a user is tracking a page or a namespace
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function is_subscribed($id,$uid,$ns=false){
+ if(!$ns) {
+ $file=metaFN($id,'.mlist');
+ } else {
+ if(!getNS($id)) {
+ $file = metaFN(getNS($id),'.mlist');
+ } else {
+ $file = metaFN(getNS($id),'/.mlist');
+ }
+ }
+ if (@file_exists($file)) {
+ $mlist = file($file);
+ $pos = array_search($uid."\n",$mlist);
+ return is_int($pos);
+ }
+
+ return false;
+}
+
+/**
+ * Return a string with the email addresses of all the
+ * users subscribed to a page
+ *
+ * @author Steven Danz <steven-danz@kc.rr.com>
+ */
+function subscriber_addresslist($id,$self=true){
+ global $conf;
+ global $auth;
+
+ if (!$conf['subscribers']) return '';
+
+ $users = array();
+ $emails = array();
+
+ // load the page mlist file content
+ $mlist = array();
+ $file=metaFN($id,'.mlist');
+ if (@file_exists($file)) {
+ $mlist = file($file);
+ foreach ($mlist as $who) {
+ $who = rtrim($who);
+ if(!$self && $who == $_SERVER['REMOTE_USER']) continue;
+ $users[$who] = true;
+ }
+ }
+
+ // load also the namespace mlist file content
+ $ns = getNS($id);
+ while ($ns) {
+ $nsfile = metaFN($ns,'/.mlist');
+ if (@file_exists($nsfile)) {
+ $mlist = file($nsfile);
+ foreach ($mlist as $who) {
+ $who = rtrim($who);
+ if(!$self && $who == $_SERVER['REMOTE_USER']) continue;
+ $users[$who] = true;
+ }
+ }
+ $ns = getNS($ns);
+ }
+ // root namespace
+ $nsfile = metaFN('','.mlist');
+ if (@file_exists($nsfile)) {
+ $mlist = file($nsfile);
+ foreach ($mlist as $who) {
+ $who = rtrim($who);
+ if(!$self && $who == $_SERVER['REMOTE_USER']) continue;
+ $users[$who] = true;
+ }
+ }
+ if(!empty($users)) {
+ foreach (array_keys($users) as $who) {
+ $info = $auth->getUserData($who);
+ if($info === false) continue;
+ $level = auth_aclcheck($id,$who,$info['grps']);
+ if ($level >= AUTH_READ) {
+ if (strcasecmp($info['mail'],$conf['notify']) != 0) {
+ $emails[] = $info['mail'];
+ }
+ }
+ }
+ }
+
+ return implode(',',$emails);
+}
+
+/**
+ * Removes quoting backslashes
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function unslash($string,$char="'"){
+ return str_replace('\\'.$char,$char,$string);
+}
+
+/**
+ * Convert php.ini shorthands to byte
+ *
+ * @author <gilthans dot NO dot SPAM at gmail dot com>
+ * @link http://de3.php.net/manual/en/ini.core.php#79564
+ */
+function php_to_byte($v){
+ $l = substr($v, -1);
+ $ret = substr($v, 0, -1);
+ switch(strtoupper($l)){
+ case 'P':
+ $ret *= 1024;
+ case 'T':
+ $ret *= 1024;
+ case 'G':
+ $ret *= 1024;
+ case 'M':
+ $ret *= 1024;
+ case 'K':
+ $ret *= 1024;
+ break;
+ }
+ return $ret;
+}
+
+/**
+ * Wrapper around preg_quote adding the default delimiter
+ */
+function preg_quote_cb($string){
+ return preg_quote($string,'/');
+}
+
+/**
+ * Shorten a given string by removing data from the middle
+ *
+ * You can give the string in two parts, the first part $keep
+ * will never be shortened. The second part $short will be cut
+ * in the middle to shorten but only if at least $min chars are
+ * left to display it. Otherwise it will be left off.
+ *
+ * @param string $keep the part to keep
+ * @param string $short the part to shorten
+ * @param int $max maximum chars you want for the whole string
+ * @param int $min minimum number of chars to have left for middle shortening
+ * @param string $char the shortening character to use
+ */
+function shorten($keep,$short,$max,$min=9,$char='…'){
+ $max = $max - utf8_strlen($keep);
+ if($max < $min) return $keep;
+ $len = utf8_strlen($short);
+ if($len <= $max) return $keep.$short;
+ $half = floor($max/2);
+ return $keep.utf8_substr($short,0,$half-1).$char.utf8_substr($short,$len-$half);
+}
+
+/**
+ * Return the users realname or e-mail address for use
+ * in page footer and recent changes pages
+ *
+ * @author Andy Webber <dokuwiki AT andywebber DOT com>
+ */
+function editorinfo($username){
+ global $conf;
+ global $auth;
+
+ switch($conf['showuseras']){
+ case 'username':
+ case 'email':
+ case 'email_link':
+ if($auth) $info = $auth->getUserData($username);
+ break;
+ default:
+ return hsc($username);
+ }
+
+ if(isset($info) && $info) {
+ switch($conf['showuseras']){
+ case 'username':
+ return hsc($info['name']);
+ case 'email':
+ return obfuscate($info['mail']);
+ case 'email_link':
+ $mail=obfuscate($info['mail']);
+ return '<a href="mailto:'.$mail.'">'.$mail.'</a>';
+ default:
+ return hsc($username);
+ }
+ } else {
+ return hsc($username);
+ }
+}
+
+/**
+ * Returns the path to a image file for the currently chosen license.
+ * When no image exists, returns an empty string
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @param string $type - type of image 'badge' or 'button'
+ */
+function license_img($type){
+ global $license;
+ global $conf;
+ if(!$conf['license']) return '';
+ if(!is_array($license[$conf['license']])) return '';
+ $lic = $license[$conf['license']];
+ $try = array();
+ $try[] = 'lib/images/license/'.$type.'/'.$conf['license'].'.png';
+ $try[] = 'lib/images/license/'.$type.'/'.$conf['license'].'.gif';
+ if(substr($conf['license'],0,3) == 'cc-'){
+ $try[] = 'lib/images/license/'.$type.'/cc.png';
+ }
+ foreach($try as $src){
+ if(@file_exists(DOKU_INC.$src)) return $src;
+ }
+ return '';
+}
+
+/**
+ * Checks if the given amount of memory is available
+ *
+ * If the memory_get_usage() function is not available the
+ * function just assumes $bytes of already allocated memory
+ *
+ * @param int $mem Size of memory you want to allocate in bytes
+ * @param int $used already allocated memory (see above)
+ * @author Filip Oscadal <webmaster@illusionsoftworks.cz>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function is_mem_available($mem,$bytes=1048576){
+ $limit = trim(ini_get('memory_limit'));
+ if(empty($limit)) return true; // no limit set!
+
+ // parse limit to bytes
+ $limit = php_to_byte($limit);
+
+ // get used memory if possible
+ if(function_exists('memory_get_usage')){
+ $used = memory_get_usage();
+ }
+
+ if($used+$mem > $limit){
+ return false;
+ }
+
+ return true;
+}
+
+/**
+ * Send a HTTP redirect to the browser
+ *
+ * Works arround Microsoft IIS cookie sending bug. Exits the script.
+ *
+ * @link http://support.microsoft.com/kb/q176113/
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function send_redirect($url){
+ // always close the session
+ session_write_close();
+
+ // check if running on IIS < 6 with CGI-PHP
+ if( isset($_SERVER['SERVER_SOFTWARE']) && isset($_SERVER['GATEWAY_INTERFACE']) &&
+ (strpos($_SERVER['GATEWAY_INTERFACE'],'CGI') !== false) &&
+ (preg_match('|^Microsoft-IIS/(\d)\.\d$|', trim($_SERVER['SERVER_SOFTWARE']), $matches)) &&
+ $matches[1] < 6 ){
+ header('Refresh: 0;url='.$url);
+ }else{
+ header('Location: '.$url);
+ }
+ exit;
+}
+
+//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/confutils.php b/mod/dokuwiki/vendors/dokuwiki/inc/confutils.php
new file mode 100644
index 000000000..9ec7a551e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/confutils.php
@@ -0,0 +1,320 @@
+<?php
+/**
+ * Utilities for collecting data from config files
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Harry Fuecks <hfuecks@gmail.com>
+ */
+
+
+/**
+ * Returns the (known) extension and mimetype of a given filename
+ *
+ * If $knownonly is true (the default), then only known extensions
+ * are returned.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function mimetype($file, $knownonly=true){
+ $ret = array(false,false,false); // return array
+ $mtypes = getMimeTypes(); // known mimetypes
+ $exts = join('|',array_keys($mtypes)); // known extensions (regexp)
+ if(!$knownonly){
+ $exts = $exts.'|[_\-A-Za-z0-9]+'; // any extension
+ }
+ if(preg_match('#\.('.$exts.')$#i',$file,$matches)){
+ $ext = strtolower($matches[1]);
+ }
+
+ if($ext){
+ if (isset($mtypes[$ext])){
+ if($mtypes[$ext][0] == '!'){
+ $ret = array($ext, substr($mtypes[$ext],1), true);
+ }else{
+ $ret = array($ext, $mtypes[$ext], false);
+ }
+ }elseif(!$knownonly){
+ $ret = array($ext, 'application/octet-stream', true);
+ }
+ }
+
+ return $ret;
+}
+
+/**
+ * returns a hash of mimetypes
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function getMimeTypes() {
+ static $mime = NULL;
+ if ( !$mime ) {
+ $mime = retrieveConfig('mime','confToHash');
+ }
+ return $mime;
+}
+
+/**
+ * returns a hash of acronyms
+ *
+ * @author Harry Fuecks <hfuecks@gmail.com>
+ */
+function getAcronyms() {
+ static $acronyms = NULL;
+ if ( !$acronyms ) {
+ $acronyms = retrieveConfig('acronyms','confToHash');
+ }
+ return $acronyms;
+}
+
+/**
+ * returns a hash of smileys
+ *
+ * @author Harry Fuecks <hfuecks@gmail.com>
+ */
+function getSmileys() {
+ static $smileys = NULL;
+ if ( !$smileys ) {
+ $smileys = retrieveConfig('smileys','confToHash');
+ }
+ return $smileys;
+}
+
+/**
+ * returns a hash of entities
+ *
+ * @author Harry Fuecks <hfuecks@gmail.com>
+ */
+function getEntities() {
+ static $entities = NULL;
+ if ( !$entities ) {
+ $entities = retrieveConfig('entities','confToHash');
+ }
+ return $entities;
+}
+
+/**
+ * returns a hash of interwikilinks
+ *
+ * @author Harry Fuecks <hfuecks@gmail.com>
+ */
+function getInterwiki() {
+ static $wikis = NULL;
+ if ( !$wikis ) {
+ $wikis = retrieveConfig('interwiki','confToHash',array(true));
+ }
+ //add sepecial case 'this'
+ $wikis['this'] = DOKU_URL.'{NAME}';
+ return $wikis;
+}
+
+/**
+ * returns array of wordblock patterns
+ *
+ */
+function getWordblocks() {
+ static $wordblocks = NULL;
+ if ( !$wordblocks ) {
+ $wordblocks = retrieveConfig('wordblock','file');
+ }
+ return $wordblocks;
+}
+
+
+function getSchemes() {
+ static $schemes = NULL;
+ if ( !$schemes ) {
+ $schemes = retrieveConfig('scheme','file');
+ }
+ $schemes = array_map('trim', $schemes);
+ $schemes = preg_replace('/^#.*/', '', $schemes);
+ $schemes = array_filter($schemes);
+ return $schemes;
+}
+
+/**
+ * Builds a hash from an array of lines
+ *
+ * If $lower is set to true all hash keys are converted to
+ * lower case.
+ *
+ * @author Harry Fuecks <hfuecks@gmail.com>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Gina Haeussge <gina@foosel.net>
+ */
+function linesToHash($lines, $lower=false) {
+ foreach ( $lines as $line ) {
+ //ignore comments (except escaped ones)
+ $line = preg_replace('/(?<![&\\\\])#.*$/','',$line);
+ $line = str_replace('\\#','#',$line);
+ $line = trim($line);
+ if(empty($line)) continue;
+ $line = preg_split('/\s+/',$line,2);
+ // Build the associative array
+ if($lower){
+ $conf[strtolower($line[0])] = $line[1];
+ }else{
+ $conf[$line[0]] = $line[1];
+ }
+ }
+
+ return $conf;
+}
+
+/**
+ * Builds a hash from a configfile
+ *
+ * If $lower is set to true all hash keys are converted to
+ * lower case.
+ *
+ * @author Harry Fuecks <hfuecks@gmail.com>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Gina Haeussge <gina@foosel.net>
+ */
+function confToHash($file,$lower=false) {
+ $conf = array();
+ $lines = @file( $file );
+ if ( !$lines ) return $conf;
+
+ return linesToHash($lines, $lower);
+}
+
+/**
+ * Retrieve the requested configuration information
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ *
+ * @param string $type the configuration settings to be read, must correspond to a key/array in $config_cascade
+ * @param callback $fn the function used to process the configuration file into an array
+ * @param array $param optional additional params to pass to the callback
+ * @return array configuration values
+ */
+function retrieveConfig($type,$fn,$params=null) {
+ global $config_cascade;
+
+ if(!is_array($params)) $params = array();
+
+ $combined = array();
+ if (!is_array($config_cascade[$type])) trigger_error('Missing config cascade for "'.$type.'"',E_USER_WARNING);
+ foreach (array('default','local','protected') as $config_group) {
+ if (empty($config_cascade[$type][$config_group])) continue;
+ foreach ($config_cascade[$type][$config_group] as $file) {
+ if (@file_exists($file)) {
+ $config = call_user_func_array($fn,array_merge(array($file),$params));
+ $combined = array_merge($combined, $config);
+ }
+ }
+ }
+
+ return $combined;
+}
+
+/**
+ * Include the requested configuration information
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ *
+ * @param string $type the configuration settings to be read, must correspond to a key/array in $config_cascade
+ * @return array list of files, default before local before protected
+ */
+function getConfigFiles($type) {
+ global $config_cascade;
+ $files = array();
+
+ if (!is_array($config_cascade[$type])) trigger_error('Missing config cascade for "'.$type.'"',E_USER_WARNING);
+ foreach (array('default','local','protected') as $config_group) {
+ if (empty($config_cascade[$type][$config_group])) continue;
+ $files = array_merge($files, $config_cascade[$type][$config_group]);
+ }
+
+ return $files;
+}
+
+/**
+ * check if the given action was disabled in config
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @returns boolean true if enabled, false if disabled
+ */
+function actionOK($action){
+ static $disabled = null;
+ if(is_null($disabled)){
+ global $conf;
+
+ // prepare disabled actions array and handle legacy options
+ $disabled = explode(',',$conf['disableactions']);
+ $disabled = array_map('trim',$disabled);
+ if(isset($conf['openregister']) && !$conf['openregister']) $disabled[] = 'register';
+ if(isset($conf['resendpasswd']) && !$conf['resendpasswd']) $disabled[] = 'resendpwd';
+ if(isset($conf['subscribers']) && !$conf['subscribers']) {
+ $disabled[] = 'subscribe';
+ $disabled[] = 'subscribens';
+ }
+ $disabled = array_unique($disabled);
+ }
+
+ return !in_array($action,$disabled);
+}
+
+/**
+ * check if headings should be used as link text for the specified link type
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ *
+ * @param string $linktype 'content'|'navigation', content applies to links in wiki text
+ * navigation applies to all other links
+ * @returns boolean true if headings should be used for $linktype, false otherwise
+ */
+function useHeading($linktype) {
+ static $useHeading = null;
+
+ if (is_null($useHeading)) {
+ global $conf;
+
+ if (!empty($conf['useheading'])) {
+ switch ($conf['useheading']) {
+ case 'content' : $useHeading['content'] = true; break;
+ case 'navigation' : $useHeading['navigation'] = true; break;
+ default:
+ $useHeading['content'] = true;
+ $useHeading['navigation'] = true;
+ }
+ } else {
+ $useHeading = array();
+ }
+ }
+
+ return (!empty($useHeading[$linktype]));
+}
+
+/**
+ * obscure config data so information isn't plain text
+ *
+ * @param string $str data to be encoded
+ * @param string $code encoding method, values: plain, base64, uuencode.
+ * @return string the encoded value
+ */
+function conf_encodeString($str,$code) {
+ switch ($code) {
+ case 'base64' : return '<b>'.base64_encode($str);
+ case 'uuencode' : return '<u>'.convert_uuencode($str);
+ case 'plain':
+ default:
+ return $str;
+ }
+}
+/**
+ * return obscured data as plain text
+ *
+ * @param string $str encoded data
+ * @return string plain text
+ */
+function conf_decodeString($str) {
+ switch (substr($str,0,3)) {
+ case '<b>' : return base64_decode(substr($str,3));
+ case '<u>' : return convert_uudecode(substr($str,3));
+ default: // not encode (or unknown)
+ return $str;
+ }
+}
+//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/events.php b/mod/dokuwiki/vendors/dokuwiki/inc/events.php
new file mode 100644
index 000000000..1604c73c6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/events.php
@@ -0,0 +1,202 @@
+<?php
+/**
+ * DokuWiki Events
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ */
+
+if(!defined('DOKU_INC')) die('meh.');
+require_once(DOKU_INC.'inc/pluginutils.php');
+
+class Doku_Event {
+
+ // public properties
+ var $name = ''; // READONLY event name, objects must register against this name to see the event
+ var $data = NULL; // READWRITE data relevant to the event, no standardised format (YET!)
+ var $result = NULL; // READWRITE the results of the event action, only relevant in "_AFTER" advise
+ // event handlers may modify this if they are preventing the default action
+ // to provide the after event handlers with event results
+ var $canPreventDefault = true; // READONLY if true, event handlers can prevent the events default action
+
+ // private properties, event handlers can effect these through the provided methods
+ var $_default = true; // whether or not to carry out the default action associated with the event
+ var $_continue = true; // whether or not to continue propagating the event to other handlers
+
+ /**
+ * event constructor
+ */
+ function Doku_Event($name, &$data) {
+
+ $this->name = $name;
+ $this->data =& $data;
+
+ }
+
+ /**
+ * advise functions
+ *
+ * advise all registered handlers of this event
+ *
+ * if these methods are used by functions outside of this object, they must
+ * properly handle correct processing of any default action and issue an
+ * advise_after() signal. e.g.
+ * $evt = new Doku_Event(name, data);
+ * if ($evt->advise_before(canPreventDefault) {
+ * // default action code block
+ * }
+ * $evt->advise_after();
+ * unset($evt);
+ *
+ * @return results of processing the event, usually $this->_default
+ */
+ function advise_before($enablePreventDefault=true) {
+ global $EVENT_HANDLER;
+
+ $this->canPreventDefault = $enablePreventDefault;
+ $EVENT_HANDLER->process_event($this,'BEFORE');
+
+ return (!$enablePreventDefault || $this->_default);
+ }
+
+ function advise_after() {
+ global $EVENT_HANDLER;
+
+ $this->_continue = true;
+ $EVENT_HANDLER->process_event($this,'AFTER');
+ }
+
+ /**
+ * trigger
+ *
+ * - advise all registered (<event>_BEFORE) handlers that this event is about to take place
+ * - carry out the default action using $this->data based on $enablePrevent and
+ * $this->_default, all of which may have been modified by the event handlers.
+ * - advise all registered (<event>_AFTER) handlers that the event has taken place
+ *
+ * @return $event->results
+ * the value set by any <event>_before or <event> handlers if the default action is prevented
+ * or the results of the default action (as modified by <event>_after handlers)
+ * or NULL no action took place and no handler modified the value
+ */
+ function trigger($action=NULL, $enablePrevent=true) {
+
+ if (!is_callable($action)) $enablePrevent = false;
+
+ if ($this->advise_before($enablePrevent) && is_callable($action)) {
+ if (is_array($action)) {
+ list($obj,$method) = $action;
+ $this->result = $obj->$method($this->data);
+ } else {
+ $this->result = $action($this->data);
+ }
+ }
+
+ $this->advise_after();
+
+ return $this->result;
+ }
+
+ /**
+ * stopPropagation
+ *
+ * stop any further processing of the event by event handlers
+ * this function does not prevent the default action taking place
+ */
+ function stopPropagation() { $this->_continue = false; }
+
+ /**
+ * preventDefault
+ *
+ * prevent the default action taking place
+ */
+ function preventDefault() { $this->_default = false; }
+}
+
+class Doku_Event_Handler {
+
+ // public properties: none
+
+ // private properties
+ var $_hooks = array(); // array of events and their registered handlers
+
+ /**
+ * event_handler
+ *
+ * constructor, loads all action plugins and calls their register() method giving them
+ * an opportunity to register any hooks they require
+ */
+ function Doku_Event_Handler() {
+
+ // load action plugins
+ $plugin = NULL;
+ $pluginlist = plugin_list('action');
+
+ foreach ($pluginlist as $plugin_name) {
+ $plugin =& plugin_load('action',$plugin_name);
+
+ if ($plugin !== NULL) $plugin->register($this);
+ }
+ }
+
+ /**
+ * register_hook
+ *
+ * register a hook for an event
+ *
+ * @PARAM $event (string) name used by the event, (incl '_before' or '_after' for triggers)
+ * @PARAM $obj (obj) object in whose scope method is to be executed,
+ * if NULL, method is assumed to be a globally available function
+ * @PARAM $method (function) event handler function
+ * @PARAM $param (mixed) data passed to the event handler
+ */
+ function register_hook($event, $advise, &$obj, $method, $param=NULL) {
+ $this->_hooks[$event.'_'.$advise][] = array(&$obj, $method, $param);
+ }
+
+ function process_event(&$event,$advise='') {
+
+ $evt_name = $event->name . ($advise ? '_'.$advise : '_BEFORE');
+
+ if (!empty($this->_hooks[$evt_name])) {
+ $hook = reset($this->_hooks[$evt_name]);
+ do {
+// list($obj, $method, $param) = $hook;
+ $obj =& $hook[0];
+ $method = $hook[1];
+ $param = $hook[2];
+
+ if (is_null($obj)) {
+ $method($event, $param);
+ } else {
+ $obj->$method($event, $param);
+ }
+
+ } while ($event->_continue && $hook = next($this->_hooks[$evt_name]));
+ }
+ }
+}
+
+/**
+ * trigger_event
+ *
+ * function wrapper to process (create, trigger and destroy) an event
+ *
+ * @PARAM $name (string) name for the event
+ * @PARAM $data (mixed) event data
+ * @PARAM $action (callback) (optional, default=NULL) default action, a php callback function
+ * @PARAM $canPreventDefault (bool) (optional, default=true) can hooks prevent the default action
+ *
+ * @RETURN (mixed) the event results value after all event processing is complete
+ * by default this is the return value of the default action however
+ * it can be set or modified by event handler hooks
+ */
+function trigger_event($name, &$data, $action=NULL, $canPreventDefault=true) {
+
+ $evt = new Doku_Event($name, $data);
+ return $evt->trigger($action, $canPreventDefault);
+}
+
+// create the event handler
+global $EVENT_HANDLER;
+$EVENT_HANDLER = new Doku_Event_Handler();
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/feedcreator.class.php b/mod/dokuwiki/vendors/dokuwiki/inc/feedcreator.class.php
new file mode 100644
index 000000000..86113e8c3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/feedcreator.class.php
@@ -0,0 +1,1572 @@
+<?php
+/***************************************************************************
+ * FeedCreator class v1.7.2-ppt
+ * originally (c) Kai Blankenhorn
+ * www.bitfolge.de
+ * kaib@bitfolge.de
+ * v1.3 work by Scott Reynen (scott@randomchaos.com) and Kai Blankenhorn
+ * v1.5 OPML support by Dirk Clemens
+ * v1.7.2-mod on-the-fly feed generation by Fabian Wolf (info@f2w.de)
+ * v1.7.2-ppt ATOM 1.0 support by Mohammad Hafiz bin Ismail (mypapit@gmail.com)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * @author www.bitfolge.de
+ *
+ * Changelog:
+ *
+ * this version contains some smaller modifications for DokuWiki as well
+ *
+ * v1.7.2-ppt 11-21-05
+ * added Atom 1.0 support
+ * added enclosure support for RSS 2.0/ATOM 1.0
+ * added docs for v1.7.2-ppt only!
+ *
+ * v1.7.2-mod 03-12-05
+ * added output function outputFeed for on-the-fly feed generation
+ *
+ * v1.7.2 10-11-04
+ * license changed to LGPL
+ *
+ * v1.7.1
+ * fixed a syntax bug
+ * fixed left over debug code
+ *
+ * v1.7 07-18-04
+ * added HTML and JavaScript feeds (configurable via CSS) (thanks to Pascal Van Hecke)
+ * added HTML descriptions for all feed formats (thanks to Pascal Van Hecke)
+ * added a switch to select an external stylesheet (thanks to Pascal Van Hecke)
+ * changed default content-type to application/xml
+ * added character encoding setting
+ * fixed numerous smaller bugs (thanks to Sören Fuhrmann of golem.de)
+ * improved changing ATOM versions handling (thanks to August Trometer)
+ * improved the UniversalFeedCreator's useCached method (thanks to Sören Fuhrmann of golem.de)
+ * added charset output in HTTP headers (thanks to Sören Fuhrmann of golem.de)
+ * added Slashdot namespace to RSS 1.0 (thanks to Sören Fuhrmann of golem.de)
+ *
+ * See www.bitfolge.de for additional changelog info
+ */
+// your local timezone, set to "" to disable or for GMT
+define("TIME_ZONE",date("O", time()));
+
+
+
+
+/**
+ * Version string.
+ **/
+
+define("FEEDCREATOR_VERSION", "FeedCreator 1.7.2-ppt DokuWiki");
+
+
+
+/**
+ * A FeedItem is a part of a FeedCreator feed.
+ *
+ * @author Kai Blankenhorn <kaib@bitfolge.de>
+ * @since 1.3
+ */
+class FeedItem extends HtmlDescribable {
+ /**
+ * Mandatory attributes of an item.
+ */
+ var $title, $description, $link;
+
+ /**
+ * Optional attributes of an item.
+ */
+ var $author, $authorEmail, $image, $category, $comments, $guid, $source, $creator;
+
+ /**
+ * Publishing date of an item. May be in one of the following formats:
+ *
+ * RFC 822:
+ * "Mon, 20 Jan 03 18:05:41 +0400"
+ * "20 Jan 03 18:05:41 +0000"
+ *
+ * ISO 8601:
+ * "2003-01-20T18:05:41+04:00"
+ *
+ * Unix:
+ * 1043082341
+ */
+ var $date;
+
+ /**
+ * Add <enclosure> element tag RSS 2.0
+ * modified by : Mohammad Hafiz bin Ismail (mypapit@gmail.com)
+ *
+ *
+ * display :
+ * <enclosure length="17691" url="http://something.com/picture.jpg" type="image/jpeg" />
+ *
+ */
+ var $enclosure;
+
+ /**
+ * Any additional elements to include as an assiciated array. All $key => $value pairs
+ * will be included unencoded in the feed item in the form
+ * <$key>$value</$key>
+ * Again: No encoding will be used! This means you can invalidate or enhance the feed
+ * if $value contains markup. This may be abused to embed tags not implemented by
+ * the FeedCreator class used.
+ */
+ var $additionalElements = Array();
+
+ // on hold
+ // var $source;
+}
+
+class EnclosureItem extends HtmlDescribable {
+ /*
+ *
+ * core variables
+ *
+ **/
+ var $url,$length,$type;
+
+ /*
+ * For use with another extension like Yahoo mRSS
+ * Warning :
+ * These variables might not show up in
+ * later release / not finalize yet!
+ *
+ */
+ var $width, $height, $title, $description, $keywords, $thumburl;
+
+ var $additionalElements = Array();
+
+}
+
+
+/**
+ * An FeedImage may be added to a FeedCreator feed.
+ * @author Kai Blankenhorn <kaib@bitfolge.de>
+ * @since 1.3
+ */
+class FeedImage extends HtmlDescribable {
+ /**
+ * Mandatory attributes of an image.
+ */
+ var $title, $url, $link;
+
+ /**
+ * Optional attributes of an image.
+ */
+ var $width, $height, $description;
+}
+
+
+
+/**
+ * An HtmlDescribable is an item within a feed that can have a description that may
+ * include HTML markup.
+ */
+class HtmlDescribable {
+ /**
+ * Indicates whether the description field should be rendered in HTML.
+ */
+ var $descriptionHtmlSyndicated;
+
+ /**
+ * Indicates whether and to how many characters a description should be truncated.
+ */
+ var $descriptionTruncSize;
+
+ /**
+ * Returns a formatted description field, depending on descriptionHtmlSyndicated and
+ * $descriptionTruncSize properties
+ * @return string the formatted description
+ */
+ function getDescription() {
+ $descriptionField = new FeedHtmlField($this->description);
+ $descriptionField->syndicateHtml = $this->descriptionHtmlSyndicated;
+ $descriptionField->truncSize = $this->descriptionTruncSize;
+ return $descriptionField->output();
+ }
+
+}
+
+
+
+/**
+ * An FeedHtmlField describes and generates
+ * a feed, item or image html field (probably a description). Output is
+ * generated based on $truncSize, $syndicateHtml properties.
+ * @author Pascal Van Hecke <feedcreator.class.php@vanhecke.info>
+ * @version 1.6
+ */
+class FeedHtmlField {
+ /**
+ * Mandatory attributes of a FeedHtmlField.
+ */
+ var $rawFieldContent;
+
+ /**
+ * Optional attributes of a FeedHtmlField.
+ *
+ */
+ var $truncSize, $syndicateHtml;
+
+ /**
+ * Creates a new instance of FeedHtmlField.
+ * @param $string: if given, sets the rawFieldContent property
+ */
+ function FeedHtmlField($parFieldContent) {
+ if ($parFieldContent) {
+ $this->rawFieldContent = $parFieldContent;
+ }
+ }
+
+
+ /**
+ * Creates the right output, depending on $truncSize, $syndicateHtml properties.
+ * @return string the formatted field
+ */
+ function output() {
+ // when field available and syndicated in html we assume
+ // - valid html in $rawFieldContent and we enclose in CDATA tags
+ // - no truncation (truncating risks producing invalid html)
+ if (!$this->rawFieldContent) {
+ $result = "";
+ } elseif ($this->syndicateHtml) {
+ $result = "<![CDATA[".$this->rawFieldContent."]]>";
+ } else {
+ if ($this->truncSize and is_int($this->truncSize)) {
+ $result = FeedCreator::iTrunc(htmlspecialchars($this->rawFieldContent),$this->truncSize);
+ } else {
+ $result = htmlspecialchars($this->rawFieldContent);
+ }
+ }
+ return $result;
+ }
+
+}
+
+
+
+/**
+ * UniversalFeedCreator lets you choose during runtime which
+ * format to build.
+ * For general usage of a feed class, see the FeedCreator class
+ * below or the example above.
+ *
+ * @since 1.3
+ * @author Kai Blankenhorn <kaib@bitfolge.de>
+ */
+class UniversalFeedCreator extends FeedCreator {
+ var $_feed;
+
+ function _setFormat($format) {
+ switch (strtoupper($format)) {
+
+ case "2.0":
+ // fall through
+ case "RSS2.0":
+ $this->_feed = new RSSCreator20();
+ break;
+
+ case "1.0":
+ // fall through
+ case "RSS1.0":
+ $this->_feed = new RSSCreator10();
+ break;
+
+ case "0.91":
+ // fall through
+ case "RSS0.91":
+ $this->_feed = new RSSCreator091();
+ break;
+
+ case "PIE0.1":
+ $this->_feed = new PIECreator01();
+ break;
+
+ case "MBOX":
+ $this->_feed = new MBOXCreator();
+ break;
+
+ case "OPML":
+ $this->_feed = new OPMLCreator();
+ break;
+
+ case "ATOM":
+ // fall through: always the latest ATOM version
+ case "ATOM1.0":
+ $this->_feed = new AtomCreator10();
+ break;
+
+ case "ATOM0.3":
+ $this->_feed = new AtomCreator03();
+ break;
+
+ case "HTML":
+ $this->_feed = new HTMLCreator();
+ break;
+
+ case "JS":
+ // fall through
+ case "JAVASCRIPT":
+ $this->_feed = new JSCreator();
+ break;
+
+ default:
+ $this->_feed = new RSSCreator091();
+ break;
+ }
+
+ $vars = get_object_vars($this);
+ foreach ($vars as $key => $value) {
+ // prevent overwriting of properties "contentType", "encoding"; do not copy "_feed" itself
+ if (!in_array($key, array("_feed", "contentType", "encoding"))) {
+ $this->_feed->{$key} = $this->{$key};
+ }
+ }
+ }
+
+ function _sendMIME($format) {
+ header('Content-Type: '.$this->contentType.'; charset='.$this->encoding, true);
+ }
+
+ /**
+ * Creates a syndication feed based on the items previously added.
+ *
+ * @see FeedCreator::addItem()
+ * @param string format format the feed should comply to. Valid values are:
+ * "PIE0.1", "mbox", "RSS0.91", "RSS1.0", "RSS2.0", "OPML", "ATOM0.3", "HTML", "JS"
+ * @return string the contents of the feed.
+ */
+ function createFeed($format = "RSS0.91") {
+ $this->_setFormat($format);
+ return $this->_feed->createFeed();
+ }
+
+ /**
+ * Saves this feed as a file on the local disk. After the file is saved, an HTTP redirect
+ * header may be sent to redirect the use to the newly created file.
+ * @since 1.4
+ *
+ * @param string format format the feed should comply to. Valid values are:
+ * "PIE0.1" (deprecated), "mbox", "RSS0.91", "RSS1.0", "RSS2.0", "OPML", "ATOM", "ATOM0.3", "HTML", "JS"
+ * @param string filename optional the filename where a recent version of the feed is saved. If not specified, the filename is $_SERVER["PHP_SELF"] with the extension changed to .xml (see _generateFilename()).
+ * @param boolean displayContents optional send the content of the file or not. If true, the file will be sent in the body of the response.
+ */
+ function saveFeed($format="RSS0.91", $filename="", $displayContents=true) {
+ $this->_setFormat($format);
+ $this->_feed->saveFeed($filename, $displayContents);
+ }
+
+
+ /**
+ * Turns on caching and checks if there is a recent version of this feed in the cache.
+ * If there is, an HTTP redirect header is sent.
+ * To effectively use caching, you should create the FeedCreator object and call this method
+ * before anything else, especially before you do the time consuming task to build the feed
+ * (web fetching, for example).
+ *
+ * @param string format format the feed should comply to. Valid values are:
+ * "PIE0.1" (deprecated), "mbox", "RSS0.91", "RSS1.0", "RSS2.0", "OPML", "ATOM0.3".
+ * @param filename string optional the filename where a recent version of the feed is saved. If not specified, the filename is $_SERVER["PHP_SELF"] with the extension changed to .xml (see _generateFilename()).
+ * @param timeout int optional the timeout in seconds before a cached version is refreshed (defaults to 3600 = 1 hour)
+ */
+ function useCached($format="RSS0.91", $filename="", $timeout=3600) {
+ $this->_setFormat($format);
+ $this->_feed->useCached($filename, $timeout);
+ }
+
+
+ /**
+ * Outputs feed to the browser - needed for on-the-fly feed generation (like it is done in WordPress, etc.)
+ *
+ * @param format string format the feed should comply to. Valid values are:
+ * "PIE0.1" (deprecated), "mbox", "RSS0.91", "RSS1.0", "RSS2.0", "OPML", "ATOM0.3".
+ */
+ function outputFeed($format='RSS0.91') {
+ $this->_setFormat($format);
+ $this->_sendMIME($format);
+ $this->_feed->outputFeed();
+ }
+
+
+}
+
+
+/**
+ * FeedCreator is the abstract base implementation for concrete
+ * implementations that implement a specific format of syndication.
+ *
+ * @abstract
+ * @author Kai Blankenhorn <kaib@bitfolge.de>
+ * @since 1.4
+ */
+class FeedCreator extends HtmlDescribable {
+
+ /**
+ * Mandatory attributes of a feed.
+ */
+ var $title, $description, $link;
+
+
+ /**
+ * Optional attributes of a feed.
+ */
+ var $syndicationURL, $image, $language, $copyright, $pubDate, $lastBuildDate, $editor, $editorEmail, $webmaster, $category, $docs, $ttl, $rating, $skipHours, $skipDays;
+
+ /**
+ * The url of the external xsl stylesheet used to format the naked rss feed.
+ * Ignored in the output when empty.
+ */
+ var $xslStyleSheet = "";
+
+
+ /**
+ * @access private
+ */
+ var $items = Array();
+
+
+ /**
+ * This feed's MIME content type.
+ * @since 1.4
+ * @access private
+ */
+ var $contentType = "application/xml";
+
+
+ /**
+ * This feed's character encoding.
+ * @since 1.6.1
+ **/
+ var $encoding = "utf-8";
+
+
+ /**
+ * Any additional elements to include as an assiciated array. All $key => $value pairs
+ * will be included unencoded in the feed in the form
+ * <$key>$value</$key>
+ * Again: No encoding will be used! This means you can invalidate or enhance the feed
+ * if $value contains markup. This may be abused to embed tags not implemented by
+ * the FeedCreator class used.
+ */
+ var $additionalElements = Array();
+
+
+ /**
+ * Adds an FeedItem to the feed.
+ *
+ * @param object FeedItem $item The FeedItem to add to the feed.
+ * @access public
+ */
+ function addItem($item) {
+ $this->items[] = $item;
+ }
+
+
+ /**
+ * Truncates a string to a certain length at the most sensible point.
+ * First, if there's a '.' character near the end of the string, the string is truncated after this character.
+ * If there is no '.', the string is truncated after the last ' ' character.
+ * If the string is truncated, " ..." is appended.
+ * If the string is already shorter than $length, it is returned unchanged.
+ *
+ * @static
+ * @param string string A string to be truncated.
+ * @param int length the maximum length the string should be truncated to
+ * @return string the truncated string
+ */
+ function iTrunc($string, $length) {
+ if (strlen($string)<=$length) {
+ return $string;
+ }
+
+ $pos = strrpos($string,".");
+ if ($pos>=$length-4) {
+ $string = substr($string,0,$length-4);
+ $pos = strrpos($string,".");
+ }
+ if ($pos>=$length*0.4) {
+ return substr($string,0,$pos+1)." ...";
+ }
+
+ $pos = strrpos($string," ");
+ if ($pos>=$length-4) {
+ $string = substr($string,0,$length-4);
+ $pos = strrpos($string," ");
+ }
+ if ($pos>=$length*0.4) {
+ return substr($string,0,$pos)." ...";
+ }
+
+ return substr($string,0,$length-4)." ...";
+
+ }
+
+
+ /**
+ * Creates a comment indicating the generator of this feed.
+ * The format of this comment seems to be recognized by
+ * Syndic8.com.
+ */
+ function _createGeneratorComment() {
+ return "<!-- generator=\"".FEEDCREATOR_VERSION."\" -->\n";
+ }
+
+
+ /**
+ * Creates a string containing all additional elements specified in
+ * $additionalElements.
+ * @param elements array an associative array containing key => value pairs
+ * @param indentString string a string that will be inserted before every generated line
+ * @return string the XML tags corresponding to $additionalElements
+ */
+ function _createAdditionalElements($elements, $indentString="") {
+ $ae = "";
+ if (is_array($elements)) {
+ foreach($elements AS $key => $value) {
+ $ae.= $indentString."<$key>$value</$key>\n";
+ }
+ }
+ return $ae;
+ }
+
+ function _createStylesheetReferences() {
+ $xml = "";
+ if ($this->cssStyleSheet) $xml .= "<?xml-stylesheet href=\"".$this->cssStyleSheet."\" type=\"text/css\"?>\n";
+ if ($this->xslStyleSheet) $xml .= "<?xml-stylesheet href=\"".$this->xslStyleSheet."\" type=\"text/xsl\"?>\n";
+ return $xml;
+ }
+
+
+ /**
+ * Builds the feed's text.
+ * @abstract
+ * @return string the feed's complete text
+ */
+ function createFeed() {
+ }
+
+ /**
+ * Generate a filename for the feed cache file. The result will be $_SERVER["PHP_SELF"] with the extension changed to .xml.
+ * For example:
+ *
+ * echo $_SERVER["PHP_SELF"]."\n";
+ * echo FeedCreator::_generateFilename();
+ *
+ * would produce:
+ *
+ * /rss/latestnews.php
+ * latestnews.xml
+ *
+ * @return string the feed cache filename
+ * @since 1.4
+ * @access private
+ */
+ function _generateFilename() {
+ $fileInfo = pathinfo($_SERVER["PHP_SELF"]);
+ return substr($fileInfo["basename"],0,-(strlen($fileInfo["extension"])+1)).".xml";
+ }
+
+
+ /**
+ * @since 1.4
+ * @access private
+ */
+ function _redirect($filename) {
+ // attention, heavily-commented-out-area
+
+ // maybe use this in addition to file time checking
+ //Header("Expires: ".date("r",time()+$this->_timeout));
+
+ /* no caching at all, doesn't seem to work as good:
+ Header("Cache-Control: no-cache");
+ Header("Pragma: no-cache");
+ */
+
+ // HTTP redirect, some feed readers' simple HTTP implementations don't follow it
+ //Header("Location: ".$filename);
+
+ header("Content-Type: ".$this->contentType."; charset=".$this->encoding."; filename=".basename($filename));
+ header("Content-Disposition: inline; filename=".basename($filename));
+ readfile($filename, "r");
+ die();
+ }
+
+ /**
+ * Turns on caching and checks if there is a recent version of this feed in the cache.
+ * If there is, an HTTP redirect header is sent.
+ * To effectively use caching, you should create the FeedCreator object and call this method
+ * before anything else, especially before you do the time consuming task to build the feed
+ * (web fetching, for example).
+ * @since 1.4
+ * @param filename string optional the filename where a recent version of the feed is saved. If not specified, the filename is $_SERVER["PHP_SELF"] with the extension changed to .xml (see _generateFilename()).
+ * @param timeout int optional the timeout in seconds before a cached version is refreshed (defaults to 3600 = 1 hour)
+ */
+ function useCached($filename="", $timeout=3600) {
+ $this->_timeout = $timeout;
+ if ($filename=="") {
+ $filename = $this->_generateFilename();
+ }
+ if (file_exists($filename) AND (time()-filemtime($filename) < $timeout)) {
+ $this->_redirect($filename);
+ }
+ }
+
+
+ /**
+ * Saves this feed as a file on the local disk. After the file is saved, a redirect
+ * header may be sent to redirect the user to the newly created file.
+ * @since 1.4
+ *
+ * @param filename string optional the filename where a recent version of the feed is saved. If not specified, the filename is $_SERVER["PHP_SELF"] with the extension changed to .xml (see _generateFilename()).
+ * @param redirect boolean optional send an HTTP redirect header or not. If true, the user will be automatically redirected to the created file.
+ */
+ function saveFeed($filename="", $displayContents=true) {
+ if ($filename=="") {
+ $filename = $this->_generateFilename();
+ }
+ $feedFile = fopen($filename, "w+");
+ if ($feedFile) {
+ fputs($feedFile,$this->createFeed());
+ fclose($feedFile);
+ if ($displayContents) {
+ $this->_redirect($filename);
+ }
+ } else {
+ echo "<br /><b>Error creating feed file, please check write permissions.</b><br />";
+ }
+ }
+
+ /**
+ * Outputs this feed directly to the browser - for on-the-fly feed generation
+ * @since 1.7.2-mod
+ *
+ * still missing: proper header output - currently you have to add it manually
+ */
+ function outputFeed() {
+ echo $this->createFeed();
+ }
+
+
+}
+
+
+/**
+ * FeedDate is an internal class that stores a date for a feed or feed item.
+ * Usually, you won't need to use this.
+ */
+class FeedDate {
+ var $unix;
+
+ /**
+ * Creates a new instance of FeedDate representing a given date.
+ * Accepts RFC 822, ISO 8601 date formats as well as unix time stamps.
+ * @param mixed $dateString optional the date this FeedDate will represent. If not specified, the current date and time is used.
+ */
+ function FeedDate($dateString="") {
+ if ($dateString=="") $dateString = date("r");
+
+ if (is_numeric($dateString)) {
+ $this->unix = $dateString;
+ return;
+ }
+ if (preg_match("~(?:(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun),\\s+)?(\\d{1,2})\\s+([a-zA-Z]{3})\\s+(\\d{4})\\s+(\\d{2}):(\\d{2}):(\\d{2})\\s+(.*)~",$dateString,$matches)) {
+ $months = Array("Jan"=>1,"Feb"=>2,"Mar"=>3,"Apr"=>4,"May"=>5,"Jun"=>6,"Jul"=>7,"Aug"=>8,"Sep"=>9,"Oct"=>10,"Nov"=>11,"Dec"=>12);
+ $this->unix = mktime($matches[4],$matches[5],$matches[6],$months[$matches[2]],$matches[1],$matches[3]);
+ if (substr($matches[7],0,1)=='+' OR substr($matches[7],0,1)=='-') {
+ $tzOffset = (substr($matches[7],0,3) * 60 + substr($matches[7],-2)) * 60;
+ } else {
+ if (strlen($matches[7])==1) {
+ $oneHour = 3600;
+ $ord = ord($matches[7]);
+ if ($ord < ord("M")) {
+ $tzOffset = (ord("A") - $ord - 1) * $oneHour;
+ } elseif ($ord >= ord("M") AND $matches[7]!="Z") {
+ $tzOffset = ($ord - ord("M")) * $oneHour;
+ } elseif ($matches[7]=="Z") {
+ $tzOffset = 0;
+ }
+ }
+ switch ($matches[7]) {
+ case "UT":
+ case "GMT": $tzOffset = 0;
+ }
+ }
+ $this->unix += $tzOffset;
+ return;
+ }
+ if (preg_match("~(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})(.*)~",$dateString,$matches)) {
+ $this->unix = mktime($matches[4],$matches[5],$matches[6],$matches[2],$matches[3],$matches[1]);
+ if (substr($matches[7],0,1)=='+' OR substr($matches[7],0,1)=='-') {
+ $tzOffset = (substr($matches[7],0,3) * 60 + substr($matches[7],-2)) * 60;
+ } else {
+ if ($matches[7]=="Z") {
+ $tzOffset = 0;
+ }
+ }
+ $this->unix += $tzOffset;
+ return;
+ }
+ $this->unix = 0;
+ }
+
+ /**
+ * Gets the date stored in this FeedDate as an RFC 822 date.
+ *
+ * @return a date in RFC 822 format
+ */
+ function rfc822() {
+ //return gmdate("r",$this->unix);
+ $date = gmdate("D, d M Y H:i:s", $this->unix);
+ if (TIME_ZONE!="") $date .= " ".str_replace(":","",TIME_ZONE);
+ return $date;
+ }
+
+ /**
+ * Gets the date stored in this FeedDate as an ISO 8601 date.
+ *
+ * @return a date in ISO 8601 (RFC 3339) format
+ */
+ function iso8601() {
+ $date = gmdate("Y-m-d\TH:i:sO",$this->unix);
+ if (TIME_ZONE!="") $date = str_replace("+0000",TIME_ZONE,$date);
+ $date = substr($date,0,22) . ':' . substr($date,-2);
+ return $date;
+ }
+
+
+ /**
+ * Gets the date stored in this FeedDate as unix time stamp.
+ *
+ * @return a date as a unix time stamp
+ */
+ function unix() {
+ return $this->unix;
+ }
+}
+
+
+/**
+ * RSSCreator10 is a FeedCreator that implements RDF Site Summary (RSS) 1.0.
+ *
+ * @see http://www.purl.org/rss/1.0/
+ * @since 1.3
+ * @author Kai Blankenhorn <kaib@bitfolge.de>
+ */
+class RSSCreator10 extends FeedCreator {
+
+ /**
+ * Builds the RSS feed's text. The feed will be compliant to RDF Site Summary (RSS) 1.0.
+ * The feed will contain all items previously added in the same order.
+ * @return string the feed's complete text
+ */
+ function createFeed() {
+ $feed = "<?xml version=\"1.0\" encoding=\"".$this->encoding."\"?>\n";
+ $feed.= $this->_createGeneratorComment();
+ if ($this->cssStyleSheet=="") {
+ $cssStyleSheet = "http://www.w3.org/2000/08/w3c-synd/style.css";
+ }
+ $feed.= $this->_createStylesheetReferences();
+ $feed.= "<rdf:RDF\n";
+ $feed.= " xmlns=\"http://purl.org/rss/1.0/\"\n";
+ $feed.= " xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"\n";
+ $feed.= " xmlns:slash=\"http://purl.org/rss/1.0/modules/slash/\"\n";
+ $feed.= " xmlns:dc=\"http://purl.org/dc/elements/1.1/\">\n";
+ $feed.= " <channel rdf:about=\"".$this->syndicationURL."\">\n";
+ $feed.= " <title>".htmlspecialchars($this->title)."</title>\n";
+ $feed.= " <description>".htmlspecialchars($this->description)."</description>\n";
+ $feed.= " <link>".$this->link."</link>\n";
+ if ($this->image!=null) {
+ $feed.= " <image rdf:resource=\"".$this->image->url."\" />\n";
+ }
+ $now = new FeedDate();
+ $feed.= " <dc:date>".htmlspecialchars($now->iso8601())."</dc:date>\n";
+ $feed.= " <items>\n";
+ $feed.= " <rdf:Seq>\n";
+ for ($i=0;$i<count($this->items);$i++) {
+ $feed.= " <rdf:li rdf:resource=\"".htmlspecialchars($this->items[$i]->link)."\"/>\n";
+ }
+ $feed.= " </rdf:Seq>\n";
+ $feed.= " </items>\n";
+ $feed.= " </channel>\n";
+ if ($this->image!=null) {
+ $feed.= " <image rdf:about=\"".$this->image->url."\">\n";
+ $feed.= " <title>".htmlspecialchars($this->image->title)."</title>\n";
+ $feed.= " <link>".$this->image->link."</link>\n";
+ $feed.= " <url>".$this->image->url."</url>\n";
+ $feed.= " </image>\n";
+ }
+ $feed.= $this->_createAdditionalElements($this->additionalElements, " ");
+
+ for ($i=0;$i<count($this->items);$i++) {
+ $feed.= " <item rdf:about=\"".htmlspecialchars($this->items[$i]->link)."\">\n";
+ //$feed.= " <dc:type>Posting</dc:type>\n";
+ $feed.= " <dc:format>text/html</dc:format>\n";
+ if ($this->items[$i]->date!=null) {
+ $itemDate = new FeedDate($this->items[$i]->date);
+ $feed.= " <dc:date>".htmlspecialchars($itemDate->iso8601())."</dc:date>\n";
+ }
+ if ($this->items[$i]->source!="") {
+ $feed.= " <dc:source>".htmlspecialchars($this->items[$i]->source)."</dc:source>\n";
+ }
+ if ($this->items[$i]->author!="") {
+ $feed.= " <dc:creator>".htmlspecialchars($this->items[$i]->author)."</dc:creator>\n";
+ }
+ $feed.= " <title>".htmlspecialchars(strip_tags(strtr($this->items[$i]->title,"\n\r"," ")))."</title>\n";
+ $feed.= " <link>".htmlspecialchars($this->items[$i]->link)."</link>\n";
+ $feed.= " <description>".htmlspecialchars($this->items[$i]->description)."</description>\n";
+ $feed.= $this->_createAdditionalElements($this->items[$i]->additionalElements, " ");
+ $feed.= " </item>\n";
+ }
+ $feed.= "</rdf:RDF>\n";
+ return $feed;
+ }
+}
+
+
+
+/**
+ * RSSCreator091 is a FeedCreator that implements RSS 0.91 Spec, revision 3.
+ *
+ * @see http://my.netscape.com/publish/formats/rss-spec-0.91.html
+ * @since 1.3
+ * @author Kai Blankenhorn <kaib@bitfolge.de>
+ */
+class RSSCreator091 extends FeedCreator {
+
+ /**
+ * Stores this RSS feed's version number.
+ * @access private
+ */
+ var $RSSVersion;
+
+ function RSSCreator091() {
+ $this->_setRSSVersion("0.91");
+ $this->contentType = "application/rss+xml";
+ }
+
+ /**
+ * Sets this RSS feed's version number.
+ * @access private
+ */
+ function _setRSSVersion($version) {
+ $this->RSSVersion = $version;
+ }
+
+ /**
+ * Builds the RSS feed's text. The feed will be compliant to RDF Site Summary (RSS) 1.0.
+ * The feed will contain all items previously added in the same order.
+ * @return string the feed's complete text
+ */
+ function createFeed() {
+ $feed = "<?xml version=\"1.0\" encoding=\"".$this->encoding."\"?>\n";
+ $feed.= $this->_createGeneratorComment();
+ $feed.= $this->_createStylesheetReferences();
+ $feed.= "<rss version=\"".$this->RSSVersion."\">\n";
+ $feed.= " <channel>\n";
+ $feed.= " <title>".FeedCreator::iTrunc(htmlspecialchars($this->title),100)."</title>\n";
+ $this->descriptionTruncSize = 500;
+ $feed.= " <description>".$this->getDescription()."</description>\n";
+ $feed.= " <link>".$this->link."</link>\n";
+ $now = new FeedDate();
+ $feed.= " <lastBuildDate>".htmlspecialchars($now->rfc822())."</lastBuildDate>\n";
+ $feed.= " <generator>".FEEDCREATOR_VERSION."</generator>\n";
+
+ if ($this->image!=null) {
+ $feed.= " <image>\n";
+ $feed.= " <url>".$this->image->url."</url>\n";
+ $feed.= " <title>".FeedCreator::iTrunc(htmlspecialchars($this->image->title),100)."</title>\n";
+ $feed.= " <link>".$this->image->link."</link>\n";
+ if ($this->image->width!="") {
+ $feed.= " <width>".$this->image->width."</width>\n";
+ }
+ if ($this->image->height!="") {
+ $feed.= " <height>".$this->image->height."</height>\n";
+ }
+ if ($this->image->description!="") {
+ $feed.= " <description>".$this->image->getDescription()."</description>\n";
+ }
+ $feed.= " </image>\n";
+ }
+ if ($this->language!="") {
+ $feed.= " <language>".$this->language."</language>\n";
+ }
+ if ($this->copyright!="") {
+ $feed.= " <copyright>".FeedCreator::iTrunc(htmlspecialchars($this->copyright),100)."</copyright>\n";
+ }
+ if ($this->editor!="") {
+ $feed.= " <managingEditor>".FeedCreator::iTrunc(htmlspecialchars($this->editor),100)."</managingEditor>\n";
+ }
+ if ($this->webmaster!="") {
+ $feed.= " <webMaster>".FeedCreator::iTrunc(htmlspecialchars($this->webmaster),100)."</webMaster>\n";
+ }
+ if ($this->pubDate!="") {
+ $pubDate = new FeedDate($this->pubDate);
+ $feed.= " <pubDate>".htmlspecialchars($pubDate->rfc822())."</pubDate>\n";
+ }
+ if ($this->category!="") {
+ // Changed for DokuWiki: multiple categories are possible
+ if(is_array($this->category)) foreach($this->category as $cat){
+ $feed.= " <category>".htmlspecialchars($cat)."</category>\n";
+ }else{
+ $feed.= " <category>".htmlspecialchars($this->category)."</category>\n";
+ }
+ }
+ if ($this->docs!="") {
+ $feed.= " <docs>".FeedCreator::iTrunc(htmlspecialchars($this->docs),500)."</docs>\n";
+ }
+ if ($this->ttl!="") {
+ $feed.= " <ttl>".htmlspecialchars($this->ttl)."</ttl>\n";
+ }
+ if ($this->rating!="") {
+ $feed.= " <rating>".FeedCreator::iTrunc(htmlspecialchars($this->rating),500)."</rating>\n";
+ }
+ if ($this->skipHours!="") {
+ $feed.= " <skipHours>".htmlspecialchars($this->skipHours)."</skipHours>\n";
+ }
+ if ($this->skipDays!="") {
+ $feed.= " <skipDays>".htmlspecialchars($this->skipDays)."</skipDays>\n";
+ }
+ $feed.= $this->_createAdditionalElements($this->additionalElements, " ");
+
+ for ($i=0;$i<count($this->items);$i++) {
+ $feed.= " <item>\n";
+ $feed.= " <title>".FeedCreator::iTrunc(htmlspecialchars(strip_tags($this->items[$i]->title)),100)."</title>\n";
+ $feed.= " <link>".htmlspecialchars($this->items[$i]->link)."</link>\n";
+ $feed.= " <description>".$this->items[$i]->getDescription()."</description>\n";
+
+ if ($this->items[$i]->author!="") {
+ $feed.= " <author>".htmlspecialchars($this->items[$i]->author)."</author>\n";
+ }
+ /*
+ // on hold
+ if ($this->items[$i]->source!="") {
+ $feed.= " <source>".htmlspecialchars($this->items[$i]->source)."</source>\n";
+ }
+ */
+ if ($this->items[$i]->category!="") {
+ // Changed for DokuWiki: multiple categories are possible
+ if(is_array($this->items[$i]->category)) foreach($this->items[$i]->category as $cat){
+ $feed.= " <category>".htmlspecialchars($cat)."</category>\n";
+ }else{
+ $feed.= " <category>".htmlspecialchars($this->items[$i]->category)."</category>\n";
+ }
+ }
+
+ if ($this->items[$i]->comments!="") {
+ $feed.= " <comments>".htmlspecialchars($this->items[$i]->comments)."</comments>\n";
+ }
+ if ($this->items[$i]->date!="") {
+ $itemDate = new FeedDate($this->items[$i]->date);
+ $feed.= " <pubDate>".htmlspecialchars($itemDate->rfc822())."</pubDate>\n";
+ }
+ if ($this->items[$i]->guid!="") {
+ $feed.= " <guid>".htmlspecialchars($this->items[$i]->guid)."</guid>\n";
+ }
+ $feed.= $this->_createAdditionalElements($this->items[$i]->additionalElements, " ");
+
+ if ($this->RSSVersion == "2.0" && $this->items[$i]->enclosure != NULL)
+ {
+ $feed.= " <enclosure url=\"";
+ $feed.= $this->items[$i]->enclosure->url;
+ $feed.= "\" length=\"";
+ $feed.= $this->items[$i]->enclosure->length;
+ $feed.= "\" type=\"";
+ $feed.= $this->items[$i]->enclosure->type;
+ $feed.= "\"/>\n";
+ }
+
+
+
+ $feed.= " </item>\n";
+ }
+
+ $feed.= " </channel>\n";
+ $feed.= "</rss>\n";
+ return $feed;
+ }
+}
+
+
+
+/**
+ * RSSCreator20 is a FeedCreator that implements RDF Site Summary (RSS) 2.0.
+ *
+ * @see http://backend.userland.com/rss
+ * @since 1.3
+ * @author Kai Blankenhorn <kaib@bitfolge.de>
+ */
+class RSSCreator20 extends RSSCreator091 {
+
+ function RSSCreator20() {
+ parent::_setRSSVersion("2.0");
+ }
+
+}
+
+
+/**
+ * PIECreator01 is a FeedCreator that implements the emerging PIE specification,
+ * as in http://intertwingly.net/wiki/pie/Syntax.
+ *
+ * @deprecated
+ * @since 1.3
+ * @author Scott Reynen <scott@randomchaos.com> and Kai Blankenhorn <kaib@bitfolge.de>
+ */
+class PIECreator01 extends FeedCreator {
+
+ function PIECreator01() {
+ $this->encoding = "utf-8";
+ }
+
+ function createFeed() {
+ $feed = "<?xml version=\"1.0\" encoding=\"".$this->encoding."\"?>\n";
+ $feed.= $this->_createStylesheetReferences();
+ $feed.= "<feed version=\"0.1\" xmlns=\"http://example.com/newformat#\">\n";
+ $feed.= " <title>".FeedCreator::iTrunc(htmlspecialchars($this->title),100)."</title>\n";
+ $this->truncSize = 500;
+ $feed.= " <subtitle>".$this->getDescription()."</subtitle>\n";
+ $feed.= " <link>".$this->link."</link>\n";
+ for ($i=0;$i<count($this->items);$i++) {
+ $feed.= " <entry>\n";
+ $feed.= " <title>".FeedCreator::iTrunc(htmlspecialchars(strip_tags($this->items[$i]->title)),100)."</title>\n";
+ $feed.= " <link>".htmlspecialchars($this->items[$i]->link)."</link>\n";
+ $itemDate = new FeedDate($this->items[$i]->date);
+ $feed.= " <created>".htmlspecialchars($itemDate->iso8601())."</created>\n";
+ $feed.= " <issued>".htmlspecialchars($itemDate->iso8601())."</issued>\n";
+ $feed.= " <modified>".htmlspecialchars($itemDate->iso8601())."</modified>\n";
+ $feed.= " <id>".htmlspecialchars($this->items[$i]->guid)."</id>\n";
+ if ($this->items[$i]->author!="") {
+ $feed.= " <author>\n";
+ $feed.= " <name>".htmlspecialchars($this->items[$i]->author)."</name>\n";
+ if ($this->items[$i]->authorEmail!="") {
+ $feed.= " <email>".$this->items[$i]->authorEmail."</email>\n";
+ }
+ $feed.=" </author>\n";
+ }
+ $feed.= " <content type=\"text/html\" xml:lang=\"en-us\">\n";
+ $feed.= " <div xmlns=\"http://www.w3.org/1999/xhtml\">".$this->items[$i]->getDescription()."</div>\n";
+ $feed.= " </content>\n";
+ $feed.= " </entry>\n";
+ }
+ $feed.= "</feed>\n";
+ return $feed;
+ }
+}
+
+/**
+ * AtomCreator10 is a FeedCreator that implements the atom specification,
+ * as in http://www.atomenabled.org/developers/syndication/atom-format-spec.php
+ * Please note that just by using AtomCreator10 you won't automatically
+ * produce valid atom files. For example, you have to specify either an editor
+ * for the feed or an author for every single feed item.
+ *
+ * Some elements have not been implemented yet. These are (incomplete list):
+ * author URL, item author's email and URL, item contents, alternate links,
+ * other link content types than text/html. Some of them may be created with
+ * AtomCreator10::additionalElements.
+ *
+ * @see FeedCreator#additionalElements
+ * @since 1.7.2-mod (modified)
+ * @author Mohammad Hafiz Ismail (mypapit@gmail.com)
+ */
+ class AtomCreator10 extends FeedCreator {
+
+ function AtomCreator10() {
+ $this->contentType = "application/atom+xml";
+ $this->encoding = "utf-8";
+ }
+
+ function createFeed() {
+ $feed = "<?xml version=\"1.0\" encoding=\"".$this->encoding."\"?>\n";
+ $feed.= $this->_createGeneratorComment();
+ $feed.= $this->_createStylesheetReferences();
+ $feed.= "<feed xmlns=\"http://www.w3.org/2005/Atom\"";
+ if ($this->language!="") {
+ $feed.= " xml:lang=\"".$this->language."\"";
+ }
+ $feed.= ">\n";
+ $feed.= " <title>".htmlspecialchars($this->title)."</title>\n";
+ $feed.= " <subtitle>".htmlspecialchars($this->description)."</subtitle>\n";
+ $feed.= " <link rel=\"alternate\" type=\"text/html\" href=\"".htmlspecialchars($this->link)."\"/>\n";
+ $feed.= " <id>".htmlspecialchars($this->link)."</id>\n";
+ $now = new FeedDate();
+ $feed.= " <updated>".htmlspecialchars($now->iso8601())."</updated>\n";
+ if ($this->editor!="") {
+ $feed.= " <author>\n";
+ $feed.= " <name>".$this->editor."</name>\n";
+ if ($this->editorEmail!="") {
+ $feed.= " <email>".$this->editorEmail."</email>\n";
+ }
+ $feed.= " </author>\n";
+ }
+ $feed.= " <generator>".FEEDCREATOR_VERSION."</generator>\n";
+ $feed.= "<link rel=\"self\" type=\"application/atom+xml\" href=\"". $this->syndicationURL . "\" />\n";
+ $feed.= $this->_createAdditionalElements($this->additionalElements, " ");
+ for ($i=0;$i<count($this->items);$i++) {
+ $feed.= " <entry>\n";
+ $feed.= " <title>".htmlspecialchars(strip_tags($this->items[$i]->title))."</title>\n";
+ $feed.= " <link rel=\"alternate\" type=\"text/html\" href=\"".htmlspecialchars($this->items[$i]->link)."\"/>\n";
+ if ($this->items[$i]->date=="") {
+ $this->items[$i]->date = time();
+ }
+ $itemDate = new FeedDate($this->items[$i]->date);
+ $feed.= " <published>".htmlspecialchars($itemDate->iso8601())."</published>\n";
+ $feed.= " <updated>".htmlspecialchars($itemDate->iso8601())."</updated>\n";
+ $feed.= " <id>".htmlspecialchars($this->items[$i]->link)."</id>\n";
+ $feed.= $this->_createAdditionalElements($this->items[$i]->additionalElements, " ");
+ if ($this->items[$i]->author!="") {
+ $feed.= " <author>\n";
+ $feed.= " <name>".htmlspecialchars($this->items[$i]->author)."</name>\n";
+ $feed.= " </author>\n";
+ }
+ if ($this->items[$i]->description!="") {
+ $feed.= " <summary>".htmlspecialchars($this->items[$i]->description)."</summary>\n";
+ }
+ if ($this->items[$i]->enclosure != NULL) {
+ $feed.=" <link rel=\"enclosure\" href=\"". $this->items[$i]->enclosure->url ."\" type=\"". $this->items[$i]->enclosure->type."\" length=\"". $this->items[$i]->enclosure->length . "\" />\n";
+ }
+ $feed.= " </entry>\n";
+ }
+ $feed.= "</feed>\n";
+ return $feed;
+ }
+
+
+}
+
+
+/**
+ * AtomCreator03 is a FeedCreator that implements the atom specification,
+ * as in http://www.intertwingly.net/wiki/pie/FrontPage.
+ * Please note that just by using AtomCreator03 you won't automatically
+ * produce valid atom files. For example, you have to specify either an editor
+ * for the feed or an author for every single feed item.
+ *
+ * Some elements have not been implemented yet. These are (incomplete list):
+ * author URL, item author's email and URL, item contents, alternate links,
+ * other link content types than text/html. Some of them may be created with
+ * AtomCreator03::additionalElements.
+ *
+ * @see FeedCreator#additionalElements
+ * @since 1.6
+ * @author Kai Blankenhorn <kaib@bitfolge.de>, Scott Reynen <scott@randomchaos.com>
+ */
+class AtomCreator03 extends FeedCreator {
+
+ function AtomCreator03() {
+ $this->contentType = "application/atom+xml";
+ $this->encoding = "utf-8";
+ }
+
+ function createFeed() {
+ $feed = "<?xml version=\"1.0\" encoding=\"".$this->encoding."\"?>\n";
+ $feed.= $this->_createGeneratorComment();
+ $feed.= $this->_createStylesheetReferences();
+ $feed.= "<feed version=\"0.3\" xmlns=\"http://purl.org/atom/ns#\"";
+ if ($this->language!="") {
+ $feed.= " xml:lang=\"".$this->language."\"";
+ }
+ $feed.= ">\n";
+ $feed.= " <title>".htmlspecialchars($this->title)."</title>\n";
+ $feed.= " <tagline>".htmlspecialchars($this->description)."</tagline>\n";
+ $feed.= " <link rel=\"alternate\" type=\"text/html\" href=\"".htmlspecialchars($this->link)."\"/>\n";
+ $feed.= " <id>".htmlspecialchars($this->link)."</id>\n";
+ $now = new FeedDate();
+ $feed.= " <modified>".htmlspecialchars($now->iso8601())."</modified>\n";
+ if ($this->editor!="") {
+ $feed.= " <author>\n";
+ $feed.= " <name>".$this->editor."</name>\n";
+ if ($this->editorEmail!="") {
+ $feed.= " <email>".$this->editorEmail."</email>\n";
+ }
+ $feed.= " </author>\n";
+ }
+ $feed.= " <generator>".FEEDCREATOR_VERSION."</generator>\n";
+ $feed.= $this->_createAdditionalElements($this->additionalElements, " ");
+ for ($i=0;$i<count($this->items);$i++) {
+ $feed.= " <entry>\n";
+ $feed.= " <title>".htmlspecialchars(strip_tags($this->items[$i]->title))."</title>\n";
+ $feed.= " <link rel=\"alternate\" type=\"text/html\" href=\"".htmlspecialchars($this->items[$i]->link)."\"/>\n";
+ if ($this->items[$i]->date=="") {
+ $this->items[$i]->date = time();
+ }
+ $itemDate = new FeedDate($this->items[$i]->date);
+ $feed.= " <created>".htmlspecialchars($itemDate->iso8601())."</created>\n";
+ $feed.= " <issued>".htmlspecialchars($itemDate->iso8601())."</issued>\n";
+ $feed.= " <modified>".htmlspecialchars($itemDate->iso8601())."</modified>\n";
+ $feed.= " <id>".htmlspecialchars($this->items[$i]->link)."</id>\n";
+ $feed.= $this->_createAdditionalElements($this->items[$i]->additionalElements, " ");
+ if ($this->items[$i]->author!="") {
+ $feed.= " <author>\n";
+ $feed.= " <name>".htmlspecialchars($this->items[$i]->author)."</name>\n";
+ $feed.= " </author>\n";
+ }
+ if ($this->items[$i]->description!="") {
+ $feed.= " <summary>".htmlspecialchars($this->items[$i]->description)."</summary>\n";
+ }
+ $feed.= " </entry>\n";
+ }
+ $feed.= "</feed>\n";
+ return $feed;
+ }
+}
+
+
+/**
+ * MBOXCreator is a FeedCreator that implements the mbox format
+ * as described in http://www.qmail.org/man/man5/mbox.html
+ *
+ * @since 1.3
+ * @author Kai Blankenhorn <kaib@bitfolge.de>
+ */
+class MBOXCreator extends FeedCreator {
+
+ function MBOXCreator() {
+ $this->contentType = "text/plain";
+ $this->encoding = "utf-8";
+ }
+
+ function qp_enc($input = "", $line_max = 76) {
+ $hex = array('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');
+ $lines = preg_split("/(?:\r\n|\r|\n)/", $input);
+ $eol = "\r\n";
+ $escape = "=";
+ $output = "";
+ while( list(, $line) = each($lines) ) {
+ //$line = rtrim($line); // remove trailing white space -> no =20\r\n necessary
+ $linlen = strlen($line);
+ $newline = "";
+ for($i = 0; $i < $linlen; $i++) {
+ $c = substr($line, $i, 1);
+ $dec = ord($c);
+ if ( ($dec == 32) && ($i == ($linlen - 1)) ) { // convert space at eol only
+ $c = "=20";
+ } elseif ( ($dec == 61) || ($dec < 32 ) || ($dec > 126) ) { // always encode "\t", which is *not* required
+ $h2 = floor($dec/16); $h1 = floor($dec%16);
+ $c = $escape.$hex["$h2"].$hex["$h1"];
+ }
+ if ( (strlen($newline) + strlen($c)) >= $line_max ) { // CRLF is not counted
+ $output .= $newline.$escape.$eol; // soft line break; " =\r\n" is okay
+ $newline = "";
+ }
+ $newline .= $c;
+ } // end of for
+ $output .= $newline.$eol;
+ }
+ return trim($output);
+ }
+
+
+ /**
+ * Builds the MBOX contents.
+ * @return string the feed's complete text
+ */
+ function createFeed() {
+ for ($i=0;$i<count($this->items);$i++) {
+ if ($this->items[$i]->author!="") {
+ $from = $this->items[$i]->author;
+ } else {
+ $from = $this->title;
+ }
+ $itemDate = new FeedDate($this->items[$i]->date);
+ $feed.= "From ".strtr(MBOXCreator::qp_enc($from)," ","_")." ".date("D M d H:i:s Y",$itemDate->unix())."\n";
+ $feed.= "Content-Type: text/plain;\n";
+ $feed.= " charset=\"".$this->encoding."\"\n";
+ $feed.= "Content-Transfer-Encoding: quoted-printable\n";
+ $feed.= "Content-Type: text/plain\n";
+ $feed.= "From: \"".MBOXCreator::qp_enc($from)."\"\n";
+ $feed.= "Date: ".$itemDate->rfc822()."\n";
+ $feed.= "Subject: ".MBOXCreator::qp_enc(FeedCreator::iTrunc($this->items[$i]->title,100))."\n";
+ $feed.= "\n";
+ $body = chunk_split(MBOXCreator::qp_enc($this->items[$i]->description));
+ $feed.= preg_replace("~\nFrom ([^\n]*)(\n?)~","\n>From $1$2\n",$body);
+ $feed.= "\n";
+ $feed.= "\n";
+ }
+ return $feed;
+ }
+
+ /**
+ * Generate a filename for the feed cache file. Overridden from FeedCreator to prevent XML data types.
+ * @return string the feed cache filename
+ * @since 1.4
+ * @access private
+ */
+ function _generateFilename() {
+ $fileInfo = pathinfo($_SERVER["PHP_SELF"]);
+ return substr($fileInfo["basename"],0,-(strlen($fileInfo["extension"])+1)).".mbox";
+ }
+}
+
+
+/**
+ * OPMLCreator is a FeedCreator that implements OPML 1.0.
+ *
+ * @see http://opml.scripting.com/spec
+ * @author Dirk Clemens, Kai Blankenhorn
+ * @since 1.5
+ */
+class OPMLCreator extends FeedCreator {
+
+ function OPMLCreator() {
+ $this->encoding = "utf-8";
+ }
+
+ function createFeed() {
+ $feed = "<?xml version=\"1.0\" encoding=\"".$this->encoding."\"?>\n";
+ $feed.= $this->_createGeneratorComment();
+ $feed.= $this->_createStylesheetReferences();
+ $feed.= "<opml xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n";
+ $feed.= " <head>\n";
+ $feed.= " <title>".htmlspecialchars($this->title)."</title>\n";
+ if ($this->pubDate!="") {
+ $date = new FeedDate($this->pubDate);
+ $feed.= " <dateCreated>".$date->rfc822()."</dateCreated>\n";
+ }
+ if ($this->lastBuildDate!="") {
+ $date = new FeedDate($this->lastBuildDate);
+ $feed.= " <dateModified>".$date->rfc822()."</dateModified>\n";
+ }
+ if ($this->editor!="") {
+ $feed.= " <ownerName>".$this->editor."</ownerName>\n";
+ }
+ if ($this->editorEmail!="") {
+ $feed.= " <ownerEmail>".$this->editorEmail."</ownerEmail>\n";
+ }
+ $feed.= " </head>\n";
+ $feed.= " <body>\n";
+ for ($i=0;$i<count($this->items);$i++) {
+ $feed.= " <outline type=\"rss\" ";
+ $title = htmlspecialchars(strip_tags(strtr($this->items[$i]->title,"\n\r"," ")));
+ $feed.= " title=\"".$title."\"";
+ $feed.= " text=\"".$title."\"";
+ //$feed.= " description=\"".htmlspecialchars($this->items[$i]->description)."\"";
+ $feed.= " url=\"".htmlspecialchars($this->items[$i]->link)."\"";
+ $feed.= "/>\n";
+ }
+ $feed.= " </body>\n";
+ $feed.= "</opml>\n";
+ return $feed;
+ }
+}
+
+
+
+/**
+ * HTMLCreator is a FeedCreator that writes an HTML feed file to a specific
+ * location, overriding the createFeed method of the parent FeedCreator.
+ * The HTML produced can be included over http by scripting languages, or serve
+ * as the source for an IFrame.
+ * All output by this class is embedded in <div></div> tags to enable formatting
+ * using CSS.
+ *
+ * @author Pascal Van Hecke
+ * @since 1.7
+ */
+class HTMLCreator extends FeedCreator {
+
+ var $contentType = "text/html";
+
+ /**
+ * Contains HTML to be output at the start of the feed's html representation.
+ */
+ var $header;
+
+ /**
+ * Contains HTML to be output at the end of the feed's html representation.
+ */
+ var $footer ;
+
+ /**
+ * Contains HTML to be output between entries. A separator is only used in
+ * case of multiple entries.
+ */
+ var $separator;
+
+ /**
+ * Used to prefix the stylenames to make sure they are unique
+ * and do not clash with stylenames on the users' page.
+ */
+ var $stylePrefix;
+
+ /**
+ * Determines whether the links open in a new window or not.
+ */
+ var $openInNewWindow = true;
+
+ var $imageAlign ="right";
+
+ /**
+ * In case of very simple output you may want to get rid of the style tags,
+ * hence this variable. There's no equivalent on item level, but of course you can
+ * add strings to it while iterating over the items ($this->stylelessOutput .= ...)
+ * and when it is non-empty, ONLY the styleless output is printed, the rest is ignored
+ * in the function createFeed().
+ */
+ var $stylelessOutput ="";
+
+ /**
+ * Writes the HTML.
+ * @return string the scripts's complete text
+ */
+ function createFeed() {
+ // if there is styleless output, use the content of this variable and ignore the rest
+ if ($this->stylelessOutput!="") {
+ return $this->stylelessOutput;
+ }
+
+ //if no stylePrefix is set, generate it yourself depending on the script name
+ if ($this->stylePrefix=="") {
+ $this->stylePrefix = str_replace(".", "_", $this->_generateFilename())."_";
+ }
+
+ //set an openInNewWindow_token_to be inserted or not
+ if ($this->openInNewWindow) {
+ $targetInsert = " target='_blank'";
+ }
+
+ // use this array to put the lines in and implode later with "document.write" javascript
+ $feedArray = array();
+ if ($this->image!=null) {
+ $imageStr = "<a href='".$this->image->link."'".$targetInsert.">".
+ "<img src='".$this->image->url."' border='0' alt='".
+ FeedCreator::iTrunc(htmlspecialchars($this->image->title),100).
+ "' align='".$this->imageAlign."' ";
+ if ($this->image->width) {
+ $imageStr .=" width='".$this->image->width. "' ";
+ }
+ if ($this->image->height) {
+ $imageStr .=" height='".$this->image->height."' ";
+ }
+ $imageStr .="/></a>";
+ $feedArray[] = $imageStr;
+ }
+
+ if ($this->title) {
+ $feedArray[] = "<div class='".$this->stylePrefix."title'><a href='".$this->link."' ".$targetInsert." class='".$this->stylePrefix."title'>".
+ FeedCreator::iTrunc(htmlspecialchars($this->title),100)."</a></div>";
+ }
+ if ($this->getDescription()) {
+ $feedArray[] = "<div class='".$this->stylePrefix."description'>".
+ str_replace("]]>", "", str_replace("<![CDATA[", "", $this->getDescription())).
+ "</div>";
+ }
+
+ if ($this->header) {
+ $feedArray[] = "<div class='".$this->stylePrefix."header'>".$this->header."</div>";
+ }
+
+ for ($i=0;$i<count($this->items);$i++) {
+ if ($this->separator and $i > 0) {
+ $feedArray[] = "<div class='".$this->stylePrefix."separator'>".$this->separator."</div>";
+ }
+
+ if ($this->items[$i]->title) {
+ if ($this->items[$i]->link) {
+ $feedArray[] =
+ "<div class='".$this->stylePrefix."item_title'><a href='".$this->items[$i]->link."' class='".$this->stylePrefix.
+ "item_title'".$targetInsert.">".FeedCreator::iTrunc(htmlspecialchars(strip_tags($this->items[$i]->title)),100).
+ "</a></div>";
+ } else {
+ $feedArray[] =
+ "<div class='".$this->stylePrefix."item_title'>".
+ FeedCreator::iTrunc(htmlspecialchars(strip_tags($this->items[$i]->title)),100).
+ "</div>";
+ }
+ }
+ if ($this->items[$i]->getDescription()) {
+ $feedArray[] =
+ "<div class='".$this->stylePrefix."item_description'>".
+ str_replace("]]>", "", str_replace("<![CDATA[", "", $this->items[$i]->getDescription())).
+ "</div>";
+ }
+ }
+ if ($this->footer) {
+ $feedArray[] = "<div class='".$this->stylePrefix."footer'>".$this->footer."</div>";
+ }
+
+ $feed= "".join($feedArray, "\r\n");
+ return $feed;
+ }
+
+ /**
+ * Overrrides parent to produce .html extensions
+ *
+ * @return string the feed cache filename
+ * @since 1.4
+ * @access private
+ */
+ function _generateFilename() {
+ $fileInfo = pathinfo($_SERVER["PHP_SELF"]);
+ return substr($fileInfo["basename"],0,-(strlen($fileInfo["extension"])+1)).".html";
+ }
+}
+
+
+/**
+ * JSCreator is a class that writes a js file to a specific
+ * location, overriding the createFeed method of the parent HTMLCreator.
+ *
+ * @author Pascal Van Hecke
+ */
+class JSCreator extends HTMLCreator {
+ var $contentType = "text/javascript";
+
+ /**
+ * writes the javascript
+ * @return string the scripts's complete text
+ */
+ function createFeed()
+ {
+ $feed = parent::createFeed();
+ $feedArray = explode("\n",$feed);
+
+ $jsFeed = "";
+ foreach ($feedArray as $value) {
+ $jsFeed .= "document.write('".trim(addslashes($value))."');\n";
+ }
+ return $jsFeed;
+ }
+
+ /**
+ * Overrrides parent to produce .js extensions
+ *
+ * @return string the feed cache filename
+ * @since 1.4
+ * @access private
+ */
+ function _generateFilename() {
+ $fileInfo = pathinfo($_SERVER["PHP_SELF"]);
+ return substr($fileInfo["basename"],0,-(strlen($fileInfo["extension"])+1)).".js";
+ }
+
+}
+
+/**
+ * This class allows to override the hardcoded charset
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+class DokuWikiFeedCreator extends UniversalFeedCreator{
+ function createFeed($format = "RSS0.91",$encoding='iso-8859-15') {
+ $this->_setFormat($format);
+ $this->_feed->encoding = $encoding;
+ return $this->_feed->createFeed();
+ }
+}
+
+
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/form.php b/mod/dokuwiki/vendors/dokuwiki/inc/form.php
new file mode 100644
index 000000000..a514526b7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/form.php
@@ -0,0 +1,918 @@
+<?php
+/**
+ * DokuWiki XHTML Form
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+
+if(!defined('DOKU_INC')) die('meh.');
+require_once(DOKU_INC.'inc/html.php');
+
+/**
+ * Class for creating simple HTML forms.
+ *
+ * The forms is built from a list of pseudo-tags (arrays with expected keys).
+ * Every pseudo-tag must have the key '_elem' set to the name of the element.
+ * When printed, the form class calls functions named 'form_$type' for each
+ * element it contains.
+ *
+ * Standard practice is for non-attribute keys in a pseudo-element to start
+ * with '_'. Other keys are HTML attributes that will be included in the element
+ * tag. That way, the element output functions can pass the pseudo-element
+ * directly to buildAttributes.
+ *
+ * See the form_make* functions later in this file.
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+class Doku_Form {
+
+ // Form id attribute
+ var $params = array();
+
+ // Draw a border around form fields.
+ // Adds <fieldset></fieldset> around the elements
+ var $_infieldset = false;
+
+ // Hidden form fields.
+ var $_hidden = array();
+
+ // Array of pseudo-tags
+ var $_content = array();
+
+ /**
+ * Constructor
+ *
+ * Sets parameters and autoadds a security token. The old calling convention
+ * with up to four parameters is deprecated, instead the first parameter
+ * should be an array with parameters.
+ *
+ * @param mixed $params Parameters for the HTML form element; Using the
+ * deprecated calling convention this is the ID
+ * attribute of the form
+ * @param string $action (optional, deprecated) submit URL, defaults to
+ * current page
+ * @param string $method (optional, deprecated) 'POST' or 'GET', default
+ * is POST
+ * @param string $enctype (optional, deprecated) Encoding type of the
+ * data
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+ function Doku_Form($params, $action=false, $method=false, $enctype=false) {
+ if(!is_array($params)) {
+ $this->params = array('id' => $params);
+ if ($action !== false) $this->params['action'] = $action;
+ if ($method !== false) $this->params['method'] = strtolower($method);
+ if ($enctype !== false) $this->params['enctype'] = $enctype;
+ } else {
+ $this->params = $params;
+ }
+
+ if (!isset($this->params['method'])) {
+ $this->params['method'] = 'post';
+ } else {
+ $this->params['method'] = strtolower($this->params['method']);
+ }
+
+ if (!isset($this->params['action'])) {
+ $this->params['action'] = '';
+ }
+
+ $this->addHidden('sectok', getSecurityToken());
+ }
+
+ /**
+ * startFieldset
+ *
+ * Add <fieldset></fieldset> tags around fields.
+ * Usually results in a border drawn around the form.
+ *
+ * @param string $legend Label that will be printed with the border.
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+ function startFieldset($legend) {
+ if ($this->_infieldset) {
+ $this->addElement(array('_elem'=>'closefieldset'));
+ }
+ $this->addElement(array('_elem'=>'openfieldset', '_legend'=>$legend));
+ $this->_infieldset = true;
+ }
+
+ /**
+ * endFieldset
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+ function endFieldset() {
+ if ($this->_infieldset) {
+ $this->addElement(array('_elem'=>'closefieldset'));
+ }
+ $this->_infieldset = false;
+ }
+
+ /**
+ * addHidden
+ *
+ * Adds a name/value pair as a hidden field.
+ * The value of the field (but not the name) will be passed to
+ * formText() before printing.
+ *
+ * @param string $name Field name.
+ * @param string $value Field value. If null, remove a previously added field.
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+ function addHidden($name, $value) {
+ if (is_null($value))
+ unset($this->_hidden[$name]);
+ else
+ $this->_hidden[$name] = $value;
+ }
+
+ /**
+ * addElement
+ *
+ * Appends a content element to the form.
+ * The element can be either a pseudo-tag or string.
+ * If string, it is printed without escaping special chars. *
+ *
+ * @param string $elem Pseudo-tag or string to add to the form.
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+ function addElement($elem) {
+ $this->_content[] = $elem;
+ }
+
+ /**
+ * insertElement
+ *
+ * Inserts a content element at a position.
+ *
+ * @param string $pos 0-based index where the element will be inserted.
+ * @param string $elem Pseudo-tag or string to add to the form.
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+ function insertElement($pos, $elem) {
+ array_splice($this->_content, $pos, 0, array($elem));
+ }
+
+ /**
+ * replaceElement
+ *
+ * Replace with NULL to remove an element.
+ *
+ * @param int $pos 0-based index the element will be placed at.
+ * @param string $elem Pseudo-tag or string to add to the form.
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+ function replaceElement($pos, $elem) {
+ $rep = array();
+ if (!is_null($elem)) $rep[] = $elem;
+ array_splice($this->_content, $pos, 1, $rep);
+ }
+
+ /**
+ * findElementByType
+ *
+ * Gets the position of the first of a type of element.
+ *
+ * @param string $type Element type to look for.
+ * @return array pseudo-element if found, false otherwise
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+ function findElementByType($type) {
+ foreach ($this->_content as $pos=>$elem) {
+ if (is_array($elem) && $elem['_elem'] == $type)
+ return $pos;
+ }
+ return false;
+ }
+
+ /**
+ * findElementById
+ *
+ * Gets the position of the element with an ID attribute.
+ *
+ * @param string $id ID of the element to find.
+ * @return array pseudo-element if found, false otherwise
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+ function findElementById($id) {
+ foreach ($this->_content as $pos=>$elem) {
+ if (is_array($elem) && isset($elem['id']) && $elem['id'] == $id)
+ return $pos;
+ }
+ return false;
+ }
+
+ /**
+ * findElementByAttribute
+ *
+ * Gets the position of the first element with a matching attribute value.
+ *
+ * @param string $name Attribute name.
+ * @param string $value Attribute value.
+ * @return array pseudo-element if found, false otherwise
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+ function findElementByAttribute($name, $value) {
+ foreach ($this->_content as $pos=>$elem) {
+ if (is_array($elem) && isset($elem[$name]) && $elem[$name] == $value)
+ return $pos;
+ }
+ return false;
+ }
+
+ /**
+ * getElementAt
+ *
+ * Returns a reference to the element at a position.
+ * A position out-of-bounds will return either the
+ * first (underflow) or last (overflow) element.
+ *
+ * @param int $pos 0-based index
+ * @return arrayreference pseudo-element
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+ function &getElementAt($pos) {
+ if ($pos < 0) $pos = count($this->_content) + $pos;
+ if ($pos < 0) $pos = 0;
+ if ($pos >= count($this->_content)) $pos = count($this->_content) - 1;
+ return $this->_content[$pos];
+ }
+
+ /**
+ * Return the assembled HTML for the form.
+ *
+ * Each element in the form will be passed to a function named
+ * 'form_$type'. The function should return the HTML to be printed.
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+ function getForm() {
+ global $lang;
+ $form = '';
+ $this->params['accept-charset'] = $lang['encoding'];
+ $form .= '<form ' . html_attbuild($this->params) . '><div class="no">' . DOKU_LF;
+ if (!empty($this->_hidden)) {
+ foreach ($this->_hidden as $name=>$value)
+ $form .= form_hidden(array('name'=>$name, 'value'=>$value));
+ }
+ foreach ($this->_content as $element) {
+ if (is_array($element)) {
+ $elem_type = $element['_elem'];
+ if (function_exists('form_'.$elem_type)) {
+ $form .= call_user_func('form_'.$elem_type, $element).DOKU_LF;
+ }
+ } else {
+ $form .= $element;
+ }
+ }
+ if ($this->_infieldset) $form .= form_closefieldset().DOKU_LF;
+ $form .= '</div></form>'.DOKU_LF;
+
+ return $form;
+ }
+
+ /**
+ * Print the assembled form
+ *
+ * wraps around getForm()
+ */
+ function printForm(){
+ echo $this->getForm();
+ }
+
+}
+
+/**
+ * form_makeTag
+ *
+ * Create a form element for a non-specific empty tag.
+ *
+ * @param string $tag Tag name.
+ * @param array $attrs Optional attributes.
+ * @return array pseudo-tag
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function form_makeTag($tag, $attrs=array()) {
+ $elem = array('_elem'=>'tag', '_tag'=>$tag);
+ return array_merge($elem, $attrs);
+}
+
+/**
+ * form_makeOpenTag
+ *
+ * Create a form element for a non-specific opening tag.
+ * Remember to put a matching close tag after this as well.
+ *
+ * @param string $tag Tag name.
+ * @param array $attrs Optional attributes.
+ * @return array pseudo-tag
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function form_makeOpenTag($tag, $attrs=array()) {
+ $elem = array('_elem'=>'opentag', '_tag'=>$tag);
+ return array_merge($elem, $attrs);
+}
+
+/**
+ * form_makeCloseTag
+ *
+ * Create a form element for a non-specific closing tag.
+ * Careless use of this will result in invalid XHTML.
+ *
+ * @param string $tag Tag name.
+ * @return array pseudo-tag
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function form_makeCloseTag($tag) {
+ return array('_elem'=>'closetag', '_tag'=>$tag);
+}
+
+/**
+ * form_makeWikiText
+ *
+ * Create a form element for a textarea containing wiki text.
+ * Only one wikitext element is allowed on a page. It will have
+ * a name of 'wikitext' and id 'wiki__text'. The text will
+ * be passed to formText() before printing.
+ *
+ * @param string $text Text to fill the field with.
+ * @param array $attrs Optional attributes.
+ * @return array pseudo-tag
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function form_makeWikiText($text, $attrs=array()) {
+ $elem = array('_elem'=>'wikitext', '_text'=>$text,
+ 'class'=>'edit', 'cols'=>'80', 'rows'=>'10');
+ return array_merge($elem, $attrs);
+}
+
+/**
+ * form_makeButton
+ *
+ * Create a form element for an action button.
+ * A title will automatically be generated using the value and
+ * accesskey attributes, unless you provide one.
+ *
+ * @param string $type Type attribute. 'submit' or 'cancel'
+ * @param string $act Wiki action of the button, will be used as the do= parameter
+ * @param string $value (optional) Displayed label. Uses $act if not provided.
+ * @param array $attrs Optional attributes.
+ * @return array pseudo-tag
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function form_makeButton($type, $act, $value='', $attrs=array()) {
+ if ($value == '') $value = $act;
+ $elem = array('_elem'=>'button', 'type'=>$type, '_action'=>$act,
+ 'value'=>$value, 'class'=>'button');
+ if (!empty($attrs['accesskey']) && empty($attrs['title'])) {
+ $attrs['title'] = $value . ' ['.strtoupper($attrs['accesskey']).']';
+ }
+ return array_merge($elem, $attrs);
+}
+
+/**
+ * form_makeField
+ *
+ * Create a form element for a labelled input element.
+ * The label text will be printed before the input.
+ *
+ * @param string $type Type attribute of input.
+ * @param string $name Name attribute of the input.
+ * @param string $value (optional) Default value.
+ * @param string $class Class attribute of the label. If this is 'block',
+ * then a line break will be added after the field.
+ * @param string $label Label that will be printed before the input.
+ * @param string $id ID attribute of the input. If set, the label will
+ * reference it with a 'for' attribute.
+ * @param array $attrs Optional attributes.
+ * @return array pseudo-tag
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function form_makeField($type, $name, $value='', $label=null, $id='', $class='', $attrs=array()) {
+ if (is_null($label)) $label = $name;
+ $elem = array('_elem'=>'field', '_text'=>$label, '_class'=>$class,
+ 'type'=>$type, 'id'=>$id, 'name'=>$name, 'value'=>$value);
+ return array_merge($elem, $attrs);
+}
+
+/**
+ * form_makeFieldRight
+ *
+ * Create a form element for a labelled input element.
+ * The label text will be printed after the input.
+ *
+ * @see form_makeField
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function form_makeFieldRight($type, $name, $value='', $label=null, $id='', $class='', $attrs=array()) {
+ if (is_null($label)) $label = $name;
+ $elem = array('_elem'=>'fieldright', '_text'=>$label, '_class'=>$class,
+ 'type'=>$type, 'id'=>$id, 'name'=>$name, 'value'=>$value);
+ return array_merge($elem, $attrs);
+}
+
+/**
+ * form_makeTextField
+ *
+ * Create a form element for a text input element with label.
+ *
+ * @see form_makeField
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function form_makeTextField($name, $value='', $label=null, $id='', $class='', $attrs=array()) {
+ if (is_null($label)) $label = $name;
+ $elem = array('_elem'=>'textfield', '_text'=>$label, '_class'=>$class,
+ 'id'=>$id, 'name'=>$name, 'value'=>$value, 'class'=>'edit');
+ return array_merge($elem, $attrs);
+}
+
+/**
+ * form_makePasswordField
+ *
+ * Create a form element for a password input element with label.
+ * Password elements have no default value, for obvious reasons.
+ *
+ * @see form_makeField
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function form_makePasswordField($name, $label=null, $id='', $class='', $attrs=array()) {
+ if (is_null($label)) $label = $name;
+ $elem = array('_elem'=>'passwordfield', '_text'=>$label, '_class'=>$class,
+ 'id'=>$id, 'name'=>$name, 'class'=>'edit');
+ return array_merge($elem, $attrs);
+}
+
+/**
+ * form_makeFileField
+ *
+ * Create a form element for a file input element with label
+ *
+ * @see form_makeField
+ * @author Michael Klier <chi@chimeric.de>
+ */
+function form_makeFileField($name, $label=null, $id='', $class='', $attrs=array()) {
+ if (is_null($label)) $label = $name;
+ $elem = array('_elem'=>'filefield', '_text'=>$label, '_class'=>$class,
+ 'id'=>$id, 'name'=>$name, 'class'=>'edit');
+ return array_merge($elem, $attrs);
+}
+
+/**
+ * form_makeCheckboxField
+ *
+ * Create a form element for a checkbox input element with label.
+ *
+ * @see form_makeFieldRight
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function form_makeCheckboxField($name, $value='1', $label=null, $id='', $class='', $attrs=array()) {
+ if (is_null($label)) $label = $name;
+ if (is_null($value) || $value=='') $value='0';
+ $elem = array('_elem'=>'checkboxfield', '_text'=>$label, '_class'=>$class,
+ 'id'=>$id, 'name'=>$name, 'value'=>$value);
+ return array_merge($elem, $attrs);
+}
+
+/**
+ * form_makeRadioField
+ *
+ * Create a form element for a radio button input element with label.
+ *
+ * @see form_makeFieldRight
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function form_makeRadioField($name, $value='1', $label=null, $id='', $class='', $attrs=array()) {
+ if (is_null($label)) $label = $name;
+ if (is_null($value) || $value=='') $value='0';
+ $elem = array('_elem'=>'radiofield', '_text'=>$label, '_class'=>$class,
+ 'id'=>$id, 'name'=>$name, 'value'=>$value);
+ return array_merge($elem, $attrs);
+}
+
+/**
+ * form_makeMenuField
+ *
+ * Create a form element for a drop-down menu with label.
+ * The list of values can be strings, arrays of (value,text),
+ * or an associative array with the values as keys and labels as values.
+ * An item is selected by supplying its value or integer index.
+ * If the list of values is an associative array, the selected item must be
+ * a string.
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function form_makeMenuField($name, $values, $selected='', $label=null, $id='', $class='', $attrs=array()) {
+ if (is_null($label)) $label = $name;
+ $options = array();
+ reset($values);
+ // FIXME: php doesn't know the difference between a string and an integer
+ if (is_string(key($values))) {
+ foreach ($values as $val=>$text) {
+ $options[] = array($val,$text, (!is_null($selected) && $val==$selected));
+ }
+ } else {
+ if (is_integer($selected)) $selected = $values[$selected];
+ foreach ($values as $val) {
+ if (is_array($val))
+ @list($val,$text) = $val;
+ else
+ $text = null;
+ $options[] = array($val,$text,$val===$selected);
+ }
+ }
+ $elem = array('_elem'=>'menufield', '_options'=>$options, '_text'=>$label, '_class'=>$class,
+ 'id'=>$id, 'name'=>$name);
+ return array_merge($elem, $attrs);
+}
+
+/**
+ * form_makeListboxField
+ *
+ * Create a form element for a list box with label.
+ * The list of values can be strings, arrays of (value,text),
+ * or an associative array with the values as keys and labels as values.
+ * Items are selected by supplying its value or an array of values.
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function form_makeListboxField($name, $values, $selected='', $label=null, $id='', $class='', $attrs=array()) {
+ if (is_null($label)) $label = $name;
+ $options = array();
+ reset($values);
+ if (is_null($selected) || $selected == '')
+ $selected = array();
+ elseif (!is_array($selected))
+ $selected = array($selected);
+ // FIXME: php doesn't know the difference between a string and an integer
+ if (is_string(key($values))) {
+ foreach ($values as $val=>$text) {
+ $options[] = array($val,$text,in_array($val,$selected));
+ }
+ } else {
+ foreach ($values as $val) {
+ if (is_array($val))
+ @list($val,$text) = $val;
+ else
+ $text = null;
+ $options[] = array($val,$text,in_array($val,$selected));
+ }
+ }
+ $elem = array('_elem'=>'listboxfield', '_options'=>$options, '_text'=>$label, '_class'=>$class,
+ 'id'=>$id, 'name'=>$name);
+ return array_merge($elem, $attrs);
+}
+
+/**
+ * form_tag
+ *
+ * Print the HTML for a generic empty tag.
+ * Requires '_tag' key with name of the tag.
+ * Attributes are passed to buildAttributes()
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function form_tag($attrs) {
+ return '<'.$attrs['_tag'].' '.buildAttributes($attrs).'/>';
+}
+
+/**
+ * form_opentag
+ *
+ * Print the HTML for a generic opening tag.
+ * Requires '_tag' key with name of the tag.
+ * Attributes are passed to buildAttributes()
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function form_opentag($attrs) {
+ return '<'.$attrs['_tag'].' '.buildAttributes($attrs,true).'>';
+}
+
+/**
+ * form_closetag
+ *
+ * Print the HTML for a generic closing tag.
+ * Requires '_tag' key with name of the tag.
+ * There are no attributes.
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function form_closetag($attrs) {
+ return '</'.$attrs['_tag'].'>';
+}
+
+/**
+ * form_openfieldset
+ *
+ * Print the HTML for an opening fieldset tag.
+ * Uses the '_legend' key.
+ * Attributes are passed to buildAttributes()
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function form_openfieldset($attrs) {
+ $s = '<fieldset '.buildAttributes($attrs,true).'>';
+ if (!is_null($attrs['_legend'])) $s .= '<legend>'.$attrs['_legend'].'</legend>';
+ return $s;
+}
+
+/**
+ * form_closefieldset
+ *
+ * Print the HTML for a closing fieldset tag.
+ * There are no attributes.
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function form_closefieldset() {
+ return '</fieldset>';
+}
+
+/**
+ * form_hidden
+ *
+ * Print the HTML for a hidden input element.
+ * Uses only 'name' and 'value' attributes.
+ * Value is passed to formText()
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function form_hidden($attrs) {
+ return '<input type="hidden" name="'.$attrs['name'].'" value="'.formText($attrs['value']).'" />';
+}
+
+/**
+ * form_wikitext
+ *
+ * Print the HTML for the wiki textarea.
+ * Requires '_text' with default text of the field.
+ * Text will be passed to formText(), attributes to buildAttributes()
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function form_wikitext($attrs) {
+ // mandatory attributes
+ unset($attrs['name']);
+ unset($attrs['id']);
+ return '<textarea name="wikitext" id="wiki__text" '
+ .buildAttributes($attrs,true).'>'.DOKU_LF
+ .formText($attrs['_text'])
+ .'</textarea>';
+}
+
+/**
+ * form_button
+ *
+ * Print the HTML for a form button.
+ * If '_action' is set, the button name will be "do[_action]".
+ * Other attributes are passed to buildAttributes()
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function form_button($attrs) {
+ $p = (!empty($attrs['_action'])) ? 'name="do['.$attrs['_action'].']" ' : '';
+ return '<input '.$p.buildAttributes($attrs,true).'/>';
+}
+
+/**
+ * form_field
+ *
+ * Print the HTML for a form input field.
+ * _class : class attribute used on the label tag
+ * _text : Text to display before the input. Not escaped.
+ * Other attributes are passed to buildAttributes() for the input tag.
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function form_field($attrs) {
+ $s = '<label';
+ if ($attrs['_class']) $s .= ' class="'.$attrs['_class'].'"';
+ if (!empty($attrs['id'])) $s .= ' for="'.$attrs['id'].'"';
+ $s .= '><span>'.$attrs['_text'].'</span>';
+ $s .= ' <input '.buildAttributes($attrs,true).'/></label>';
+ if (preg_match('/(^| )block($| )/', $attrs['_class']))
+ $s .= '<br />';
+ return $s;
+}
+
+/**
+ * form_fieldright
+ *
+ * Print the HTML for a form input field. (right-aligned)
+ * _class : class attribute used on the label tag
+ * _text : Text to display after the input. Not escaped.
+ * Other attributes are passed to buildAttributes() for the input tag.
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function form_fieldright($attrs) {
+ $s = '<label';
+ if ($attrs['_class']) $s .= ' class="'.$attrs['_class'].'"';
+ if (!empty($attrs['id'])) $s .= ' for="'.$attrs['id'].'"';
+ $s .= '><input '.buildAttributes($attrs,true).'/>';
+ $s .= ' <span>'.$attrs['_text'].'</span></label>';
+ if (preg_match('/(^| )block($| )/', $attrs['_class']))
+ $s .= '<br />';
+ return $s;
+}
+
+/**
+ * form_textfield
+ *
+ * Print the HTML for a text input field.
+ * _class : class attribute used on the label tag
+ * _text : Text to display before the input. Not escaped.
+ * Other attributes are passed to buildAttributes() for the input tag.
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function form_textfield($attrs) {
+ // mandatory attributes
+ unset($attrs['type']);
+ $s = '<label';
+ if ($attrs['_class']) $s .= ' class="'.$attrs['_class'].'"';
+ if (!empty($attrs['id'])) $s .= ' for="'.$attrs['id'].'"';
+ $s .= '><span>'.$attrs['_text'].'</span> ';
+ $s .= '<input type="text" '.buildAttributes($attrs,true).'/></label>';
+ if (preg_match('/(^| )block($| )/', $attrs['_class']))
+ $s .= '<br />';
+ return $s;
+}
+
+/**
+ * form_passwordfield
+ *
+ * Print the HTML for a password input field.
+ * _class : class attribute used on the label tag
+ * _text : Text to display before the input. Not escaped.
+ * Other attributes are passed to buildAttributes() for the input tag.
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function form_passwordfield($attrs) {
+ // mandatory attributes
+ unset($attrs['type']);
+ $s = '<label';
+ if ($attrs['_class']) $s .= ' class="'.$attrs['_class'].'"';
+ if (!empty($attrs['id'])) $s .= ' for="'.$attrs['id'].'"';
+ $s .= '><span>'.$attrs['_text'].'</span> ';
+ $s .= '<input type="password" '.buildAttributes($attrs,true).'/></label>';
+ if (preg_match('/(^| )block($| )/', $attrs['_class']))
+ $s .= '<br />';
+ return $s;
+}
+
+/**
+ * form_filefield
+ *
+ * Print the HTML for a file input field.
+ * _class : class attribute used on the label tag
+ * _text : Text to display before the input. Not escaped
+ * _maxlength : Allowed size in byte
+ * _accept : Accepted mime-type
+ * Other attributes are passed to buildAttributes() for the input tag
+ *
+ * @author Michael Klier <chi@chimeric.de>
+ */
+function form_filefield($attrs) {
+ $s = '<label';
+ if ($attrs['_class']) $s .= ' class="'.$attrs['_class'].'"';
+ if (!empty($attrs['id'])) $s .= ' for="'.$attrs['id'].'"';
+ $s .= '><span>'.$attrs['_text'].'</span> ';
+ $s .= '<input type="file" '.buildAttributes($attrs,true);
+ if (!empty($attrs['_maxlength'])) $s .= ' maxlength="'.$attrs['_maxlength'].'"';
+ if (!empty($attrs['_accept'])) $s .= ' accept="'.$attrs['_accept'].'"';
+ $s .= '/></label>';
+ if (preg_match('/(^| )block($| )/', $attrs['_class']))
+ $s .= '<br />';
+ return $s;
+}
+
+/**
+ * form_checkboxfield
+ *
+ * Print the HTML for a checkbox input field.
+ * _class : class attribute used on the label tag
+ * _text : Text to display after the input. Not escaped.
+ * Other attributes are passed to buildAttributes() for the input tag.
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function form_checkboxfield($attrs) {
+ // mandatory attributes
+ unset($attrs['type']);
+ $s = '<label';
+ if ($attrs['_class']) $s .= ' class="'.$attrs['_class'].'"';
+ if (!empty($attrs['id'])) $s .= ' for="'.$attrs['id'].'"';
+ $s .= '><input type="checkbox" '.buildAttributes($attrs,true).'/>';
+ $s .= ' <span>'.$attrs['_text'].'</span></label>';
+ if (preg_match('/(^| )block($| )/', $attrs['_class']))
+ $s .= '<br />';
+ return $s;
+}
+
+/**
+ * form_radiofield
+ *
+ * Print the HTML for a radio button input field.
+ * _class : class attribute used on the label tag
+ * _text : Text to display after the input. Not escaped.
+ * Other attributes are passed to buildAttributes() for the input tag.
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function form_radiofield($attrs) {
+ // mandatory attributes
+ unset($attrs['type']);
+ $s = '<label';
+ if ($attrs['_class']) $s .= ' class="'.$attrs['_class'].'"';
+ if (!empty($attrs['id'])) $s .= ' for="'.$attrs['id'].'"';
+ $s .= '><input type="radio" '.buildAttributes($attrs,true).'/>';
+ $s .= ' <span>'.$attrs['_text'].'</span></label>';
+ if (preg_match('/(^| )block($| )/', $attrs['_class']))
+ $s .= '<br />';
+ return $s;
+}
+
+/**
+ * form_menufield
+ *
+ * Print the HTML for a drop-down menu.
+ * _options : Array of (value,text,selected) for the menu.
+ * Text can be omitted. Text and value are passed to formText()
+ * Only one item can be selected.
+ * _class : class attribute used on the label tag
+ * _text : Text to display before the menu. Not escaped.
+ * Other attributes are passed to buildAttributes() for the input tag.
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function form_menufield($attrs) {
+ $attrs['size'] = '1';
+ $s = '<label';
+ if ($attrs['_class']) $s .= ' class="'.$attrs['_class'].'"';
+ if (!empty($attrs['id'])) $s .= ' for="'.$attrs['id'].'"';
+ $s .= '><span>'.$attrs['_text'].'</span>';
+ $s .= ' <select '.buildAttributes($attrs,true).'>'.DOKU_LF;
+ if (!empty($attrs['_options'])) {
+ $selected = false;
+ for($n=0;$n<count($attrs['_options']);$n++){
+ @list($value,$text,$select) = $attrs['_options'][$n];
+ $p = '';
+ if (!is_null($text))
+ $p .= ' value="'.formText($value).'"';
+ else
+ $text = $value;
+ if (!empty($select) && !$selected) {
+ $p .= ' selected="selected"';
+ $selected = true;
+ }
+ $s .= '<option'.$p.'>'.formText($text).'</option>';
+ }
+ } else {
+ $s .= '<option></option>';
+ }
+ $s .= DOKU_LF.'</select></label>';
+ if (preg_match('/(^| )block($| )/', $attrs['_class']))
+ $s .= '<br />';
+ return $s;
+}
+
+/**
+ * form_listboxfield
+ *
+ * Print the HTML for a list box.
+ * _options : Array of (value,text,selected) for the list.
+ * Text can be omitted. Text and value are passed to formText()
+ * _class : class attribute used on the label tag
+ * _text : Text to display before the menu. Not escaped.
+ * Other attributes are passed to buildAttributes() for the input tag.
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function form_listboxfield($attrs) {
+ $s = '<label';
+ if ($attrs['_class']) $s .= ' class="'.$attrs['_class'].'"';
+ if (!empty($attrs['id'])) $s .= ' for="'.$attrs['id'].'"';
+ $s .= '><span>'.$attrs['_text'].'</span> ';
+ $s .= '<select '.buildAttributes($attrs,true).'>'.DOKU_LF;
+ if (!empty($attrs['_options'])) {
+ foreach ($attrs['_options'] as $opt) {
+ @list($value,$text,$select) = $opt;
+ $p = '';
+ if(is_null($text)) $text = $value;
+ $p .= ' value="'.formText($value).'"';
+ if (!empty($select)) $p .= ' selected="selected"';
+ $s .= '<option'.$p.'>'.formText($text).'</option>';
+ }
+ } else {
+ $s .= '<option></option>';
+ }
+ $s .= DOKU_LF.'</select></label>';
+ if (preg_match('/(^| )block($| )/', $attrs['_class']))
+ $s .= '<br />';
+ return $s;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/fulltext.php b/mod/dokuwiki/vendors/dokuwiki/inc/fulltext.php
new file mode 100644
index 000000000..c8236e1d4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/fulltext.php
@@ -0,0 +1,722 @@
+<?php
+/**
+ * DokuWiki fulltextsearch functions using the index
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+if(!defined('DOKU_INC')) die('meh.');
+require_once(DOKU_INC.'inc/indexer.php');
+
+
+/**
+ * The fulltext search
+ *
+ * Returns a list of matching documents for the given query
+ *
+ * refactored into ft_pageSearch(), _ft_pageSearch() and trigger_event()
+ *
+ */
+function ft_pageSearch($query,&$highlight){
+
+ $data['query'] = $query;
+ $data['highlight'] =& $highlight;
+
+ return trigger_event('SEARCH_QUERY_FULLPAGE', $data, '_ft_pageSearch');
+}
+
+/**
+ * Returns a list of matching documents for the given query
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Kazutaka Miyasaka <kazmiya@gmail.com>
+ */
+function _ft_pageSearch(&$data) {
+ // parse the given query
+ $q = ft_queryParser($data['query']);
+ $data['highlight'] = $q['highlight'];
+
+ if (empty($q['parsed_ary'])) return array();
+
+ // lookup all words found in the query
+ $lookup = idx_lookup($q['words']);
+
+ // get all pages in this dokuwiki site (!: includes nonexistent pages)
+ $pages_all = array();
+ foreach (idx_getIndex('page', '') as $id) {
+ $pages_all[trim($id)] = 0; // base: 0 hit
+ }
+
+ // process the query
+ $stack = array();
+ foreach ($q['parsed_ary'] as $token) {
+ switch (substr($token, 0, 3)) {
+ case 'W+:':
+ case 'W-:':
+ case 'W_:': // word
+ $word = substr($token, 3);
+ $stack[] = (array) $lookup[$word];
+ break;
+ case 'P+:':
+ case 'P-:': // phrase
+ $phrase = substr($token, 3);
+ // since phrases are always parsed as ((W1)(W2)...(P)),
+ // the end($stack) always points the pages that contain
+ // all words in this phrase
+ $pages = end($stack);
+ $pages_matched = array();
+ foreach(array_keys($pages) as $id){
+ $text = utf8_strtolower(rawWiki($id));
+ if (strpos($text, $phrase) !== false) {
+ $pages_matched[$id] = 0; // phrase: always 0 hit
+ }
+ }
+ $stack[] = $pages_matched;
+ break;
+ case 'N+:':
+ case 'N-:': // namespace
+ $ns = substr($token, 3);
+ $pages_matched = array();
+ foreach (array_keys($pages_all) as $id) {
+ if (strpos($id, $ns) === 0) {
+ $pages_matched[$id] = 0; // namespace: always 0 hit
+ }
+ }
+ $stack[] = $pages_matched;
+ break;
+ case 'AND': // and operation
+ list($pages1, $pages2) = array_splice($stack, -2);
+ $stack[] = ft_resultCombine(array($pages1, $pages2));
+ break;
+ case 'OR': // or operation
+ list($pages1, $pages2) = array_splice($stack, -2);
+ $stack[] = ft_resultUnite(array($pages1, $pages2));
+ break;
+ case 'NOT': // not operation (unary)
+ $pages = array_pop($stack);
+ $stack[] = ft_resultComplement(array($pages_all, $pages));
+ break;
+ }
+ }
+ $docs = array_pop($stack);
+
+ if (empty($docs)) return array();
+
+ // check: settings, acls, existence
+ foreach (array_keys($docs) as $id) {
+ if (isHiddenPage($id) || auth_quickaclcheck($id) < AUTH_READ || !page_exists($id, '', false)) {
+ unset($docs[$id]);
+ }
+ }
+
+ // sort docs by count
+ arsort($docs);
+
+ return $docs;
+}
+
+/**
+ * Returns the backlinks for a given page
+ *
+ * Does a quick lookup with the fulltext index, then
+ * evaluates the instructions of the found pages
+ */
+function ft_backlinks($id){
+ global $conf;
+ $swfile = DOKU_INC.'inc/lang/'.$conf['lang'].'/stopwords.txt';
+ $stopwords = @file_exists($swfile) ? file($swfile) : array();
+
+ $result = array();
+
+ // quick lookup of the pagename
+ $page = noNS($id);
+ $matches = idx_lookup(idx_tokenizer($page,$stopwords)); // pagename may contain specials (_ or .)
+ $docs = array_keys(ft_resultCombine(array_values($matches)));
+ $docs = array_filter($docs,'isVisiblePage'); // discard hidden pages
+ if(!count($docs)) return $result;
+ require_once(DOKU_INC.'inc/parserutils.php');
+
+ // check metadata for matching links
+ foreach($docs as $match){
+ // metadata relation reference links are already resolved
+ $links = p_get_metadata($match,'relation references');
+ if (isset($links[$id])) $result[] = $match;
+ }
+
+ if(!count($result)) return $result;
+
+ // check ACL permissions
+ foreach(array_keys($result) as $idx){
+ if(auth_quickaclcheck($result[$idx]) < AUTH_READ){
+ unset($result[$idx]);
+ }
+ }
+
+ sort($result);
+ return $result;
+}
+
+/**
+ * Returns the pages that use a given media file
+ *
+ * Does a quick lookup with the fulltext index, then
+ * evaluates the instructions of the found pages
+ *
+ * Aborts after $max found results
+ */
+function ft_mediause($id,$max){
+ global $conf;
+ $swfile = DOKU_INC.'inc/lang/'.$conf['lang'].'/stopwords.txt';
+ $stopwords = @file_exists($swfile) ? file($swfile) : array();
+
+ if(!$max) $max = 1; // need to find at least one
+
+ $result = array();
+
+ // quick lookup of the mediafile
+ $media = noNS($id);
+ $matches = idx_lookup(idx_tokenizer($media,$stopwords));
+ $docs = array_keys(ft_resultCombine(array_values($matches)));
+ if(!count($docs)) return $result;
+
+ // go through all found pages
+ $found = 0;
+ $pcre = preg_quote($media,'/');
+ foreach($docs as $doc){
+ $ns = getNS($doc);
+ preg_match_all('/\{\{([^|}]*'.$pcre.'[^|}]*)(|[^}]+)?\}\}/i',rawWiki($doc),$matches);
+ foreach($matches[1] as $img){
+ $img = trim($img);
+ if(preg_match('/^https?:\/\//i',$img)) continue; // skip external images
+ list($img) = explode('?',$img); // remove any parameters
+ resolve_mediaid($ns,$img,$exists); // resolve the possibly relative img
+
+ if($img == $id){ // we have a match
+ $result[] = $doc;
+ $found++;
+ break;
+ }
+ }
+ if($found >= $max) break;
+ }
+
+ sort($result);
+ return $result;
+}
+
+
+
+/**
+ * Quicksearch for pagenames
+ *
+ * By default it only matches the pagename and ignores the
+ * namespace. This can be changed with the second parameter
+ *
+ * refactored into ft_pageLookup(), _ft_pageLookup() and trigger_event()
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function ft_pageLookup($id,$pageonly=true){
+ $data = array('id' => $id, 'pageonly' => $pageonly);
+ return trigger_event('SEARCH_QUERY_PAGELOOKUP',$data,'_ft_pageLookup');
+}
+
+function _ft_pageLookup(&$data){
+ // split out original parameterrs
+ $id = $data['id'];
+ $pageonly = $data['pageonly'];
+
+ global $conf;
+ $id = preg_quote($id,'/');
+ $pages = file($conf['indexdir'].'/page.idx');
+ if($id) $pages = array_values(preg_grep('/'.$id.'/',$pages));
+
+ $cnt = count($pages);
+ for($i=0; $i<$cnt; $i++){
+ if($pageonly){
+ if(!preg_match('/'.$id.'/',noNS($pages[$i]))){
+ unset($pages[$i]);
+ continue;
+ }
+ }
+ if(!page_exists($pages[$i])){
+ unset($pages[$i]);
+ continue;
+ }
+ }
+
+ $pages = array_filter($pages,'isVisiblePage'); // discard hidden pages
+ if(!count($pages)) return array();
+
+ // check ACL permissions
+ foreach(array_keys($pages) as $idx){
+ if(auth_quickaclcheck(trim($pages[$idx])) < AUTH_READ){
+ unset($pages[$idx]);
+ }
+ }
+
+ $pages = array_map('trim',$pages);
+ usort($pages,'ft_pagesorter');
+ return $pages;
+}
+
+/**
+ * Sort pages based on their namespace level first, then on their string
+ * values. This makes higher hierarchy pages rank higher than lower hierarchy
+ * pages.
+ */
+function ft_pagesorter($a, $b){
+ $ac = count(explode(':',$a));
+ $bc = count(explode(':',$b));
+ if($ac < $bc){
+ return -1;
+ }elseif($ac > $bc){
+ return 1;
+ }
+ return strcmp ($a,$b);
+}
+
+/**
+ * Creates a snippet extract
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @triggers FULLTEXT_SNIPPET_CREATE
+ */
+function ft_snippet($id,$highlight){
+ $text = rawWiki($id);
+ $evdata = array(
+ 'id' => $id,
+ 'text' => &$text,
+ 'highlight' => &$highlight,
+ 'snippet' => '',
+ );
+
+ $evt = new Doku_Event('FULLTEXT_SNIPPET_CREATE',$evdata);
+ if ($evt->advise_before()) {
+ $match = array();
+ $snippets = array();
+ $utf8_offset = $offset = $end = 0;
+ $len = utf8_strlen($text);
+
+ // build a regexp from the phrases to highlight
+ $re1 = '('.join('|',array_map('preg_quote_cb',array_filter((array) $highlight))).')';
+ $re2 = "$re1.{0,75}(?!\\1)$re1";
+ $re3 = "$re1.{0,45}(?!\\1)$re1.{0,45}(?!\\1)(?!\\2)$re1";
+
+ for ($cnt=4; $cnt--;) {
+ if (0) {
+ } else if (preg_match('/'.$re3.'/iu',$text,$match,PREG_OFFSET_CAPTURE,$offset)) {
+ } else if (preg_match('/'.$re2.'/iu',$text,$match,PREG_OFFSET_CAPTURE,$offset)) {
+ } else if (preg_match('/'.$re1.'/iu',$text,$match,PREG_OFFSET_CAPTURE,$offset)) {
+ } else {
+ break;
+ }
+
+ list($str,$idx) = $match[0];
+
+ // convert $idx (a byte offset) into a utf8 character offset
+ $utf8_idx = utf8_strlen(substr($text,0,$idx));
+ $utf8_len = utf8_strlen($str);
+
+ // establish context, 100 bytes surrounding the match string
+ // first look to see if we can go 100 either side,
+ // then drop to 50 adding any excess if the other side can't go to 50,
+ $pre = min($utf8_idx-$utf8_offset,100);
+ $post = min($len-$utf8_idx-$utf8_len,100);
+
+ if ($pre>50 && $post>50) {
+ $pre = $post = 50;
+ } else if ($pre>50) {
+ $pre = min($pre,100-$post);
+ } else if ($post>50) {
+ $post = min($post, 100-$pre);
+ } else {
+ // both are less than 50, means the context is the whole string
+ // make it so and break out of this loop - there is no need for the
+ // complex snippet calculations
+ $snippets = array($text);
+ break;
+ }
+
+ // establish context start and end points, try to append to previous
+ // context if possible
+ $start = $utf8_idx - $pre;
+ $append = ($start < $end) ? $end : false; // still the end of the previous context snippet
+ $end = $utf8_idx + $utf8_len + $post; // now set it to the end of this context
+
+ if ($append) {
+ $snippets[count($snippets)-1] .= utf8_substr($text,$append,$end-$append);
+ } else {
+ $snippets[] = utf8_substr($text,$start,$end-$start);
+ }
+
+ // set $offset for next match attempt
+ // substract strlen to avoid splitting a potential search success,
+ // this is an approximation as the search pattern may match strings
+ // of varying length and it will fail if the context snippet
+ // boundary breaks a matching string longer than the current match
+ $utf8_offset = $utf8_idx + $post;
+ $offset = $idx + strlen(utf8_substr($text,$utf8_idx,$post));
+ $offset = utf8_correctIdx($text,$offset);
+ }
+
+ $m = "\1";
+ $snippets = preg_replace('/'.$re1.'/iu',$m.'$1'.$m,$snippets);
+ $snippet = preg_replace('/'.$m.'([^'.$m.']*?)'.$m.'/iu','<strong class="search_hit">$1</strong>',hsc(join('... ',$snippets)));
+
+ $evdata['snippet'] = $snippet;
+ }
+ $evt->advise_after();
+ unset($evt);
+
+ return $evdata['snippet'];
+}
+
+/**
+ * Combine found documents and sum up their scores
+ *
+ * This function is used to combine searched words with a logical
+ * AND. Only documents available in all arrays are returned.
+ *
+ * based upon PEAR's PHP_Compat function for array_intersect_key()
+ *
+ * @param array $args An array of page arrays
+ */
+function ft_resultCombine($args){
+ $array_count = count($args);
+ if($array_count == 1){
+ return $args[0];
+ }
+
+ $result = array();
+ if ($array_count > 1) {
+ foreach ($args[0] as $key => $value) {
+ $result[$key] = $value;
+ for ($i = 1; $i !== $array_count; $i++) {
+ if (!isset($args[$i][$key])) {
+ unset($result[$key]);
+ break;
+ }
+ $result[$key] += $args[$i][$key];
+ }
+ }
+ }
+ return $result;
+}
+
+/**
+ * Unites found documents and sum up their scores
+ *
+ * based upon ft_resultCombine() function
+ *
+ * @param array $args An array of page arrays
+ * @author Kazutaka Miyasaka <kazmiya@gmail.com>
+ */
+function ft_resultUnite($args) {
+ $array_count = count($args);
+ if ($array_count === 1) {
+ return $args[0];
+ }
+
+ $result = $args[0];
+ for ($i = 1; $i !== $array_count; $i++) {
+ foreach (array_keys($args[$i]) as $id) {
+ $result[$id] += $args[$i][$id];
+ }
+ }
+ return $result;
+}
+
+/**
+ * Computes the difference of documents using page id for comparison
+ *
+ * nearly identical to PHP5's array_diff_key()
+ *
+ * @param array $args An array of page arrays
+ * @author Kazutaka Miyasaka <kazmiya@gmail.com>
+ */
+function ft_resultComplement($args) {
+ $array_count = count($args);
+ if ($array_count === 1) {
+ return $args[0];
+ }
+
+ $result = $args[0];
+ foreach (array_keys($result) as $id) {
+ for ($i = 1; $i !== $array_count; $i++) {
+ if (isset($args[$i][$id])) unset($result[$id]);
+ }
+ }
+ return $result;
+}
+
+/**
+ * Parses a search query and builds an array of search formulas
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Kazutaka Miyasaka <kazmiya@gmail.com>
+ */
+function ft_queryParser($query){
+ global $conf;
+ $swfile = DOKU_INC.'inc/lang/'.$conf['lang'].'/stopwords.txt';
+ $stopwords = @file_exists($swfile) ? file($swfile) : array();
+
+ /**
+ * parse a search query and transform it into intermediate representation
+ *
+ * in a search query, you can use the following expressions:
+ *
+ * words:
+ * include
+ * -exclude
+ * phrases:
+ * "phrase to be included"
+ * -"phrase you want to exclude"
+ * namespaces:
+ * @include:namespace (or ns:include:namespace)
+ * ^exclude:namespace (or -ns:exclude:namespace)
+ * groups:
+ * ()
+ * -()
+ * operators:
+ * and ('and' is the default operator: you can always omit this)
+ * or (or pipe symbol '|', lower precedence than 'and')
+ *
+ * e.g. a query [ aa "bb cc" @dd:ee ] means "search pages which contain
+ * a word 'aa', a phrase 'bb cc' and are within a namespace 'dd:ee'".
+ * this query is equivalent to [ -(-aa or -"bb cc" or -ns:dd:ee) ]
+ * as long as you don't mind hit counts.
+ *
+ * intermediate representation consists of the following parts:
+ *
+ * ( ) - group
+ * AND - logical and
+ * OR - logical or
+ * NOT - logical not
+ * W+:, W-:, W_: - word (underscore: no need to highlight)
+ * P+:, P-: - phrase (minus sign: logically in NOT group)
+ * N+:, N-: - namespace
+ */
+ $parsed_query = '';
+ $parens_level = 0;
+ $terms = preg_split('/(-?".*?")/u', utf8_strtolower($query), -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
+
+ foreach ($terms as $term) {
+ $parsed = '';
+ if (preg_match('/^(-?)"(.+)"$/u', $term, $matches)) {
+ // phrase-include and phrase-exclude
+ $not = $matches[1] ? 'NOT' : '';
+ $parsed = $not.ft_termParser($matches[2], $stopwords, false, true);
+ } else {
+ // fix incomplete phrase
+ $term = str_replace('"', ' ', $term);
+
+ // fix parentheses
+ $term = str_replace(')' , ' ) ', $term);
+ $term = str_replace('(' , ' ( ', $term);
+ $term = str_replace('- (', ' -(', $term);
+
+ // treat pipe symbols as 'OR' operators
+ $term = str_replace('|', ' or ', $term);
+
+ // treat ideographic spaces (U+3000) as search term separators
+ // FIXME: some more separators?
+ $term = preg_replace('/[ \x{3000}]+/u', ' ', $term);
+ $term = trim($term);
+ if ($term === '') continue;
+
+ $tokens = explode(' ', $term);
+ foreach ($tokens as $token) {
+ if ($token === '(') {
+ // parenthesis-include-open
+ $parsed .= '(';
+ ++$parens_level;
+ } elseif ($token === '-(') {
+ // parenthesis-exclude-open
+ $parsed .= 'NOT(';
+ ++$parens_level;
+ } elseif ($token === ')') {
+ // parenthesis-any-close
+ if ($parens_level === 0) continue;
+ $parsed .= ')';
+ $parens_level--;
+ } elseif ($token === 'and') {
+ // logical-and (do nothing)
+ } elseif ($token === 'or') {
+ // logical-or
+ $parsed .= 'OR';
+ } elseif (preg_match('/^(?:\^|-ns:)(.+)$/u', $token, $matches)) {
+ // namespace-exclude
+ $parsed .= 'NOT(N+:'.$matches[1].')';
+ } elseif (preg_match('/^(?:@|ns:)(.+)$/u', $token, $matches)) {
+ // namespace-include
+ $parsed .= '(N+:'.$matches[1].')';
+ } elseif (preg_match('/^-(.+)$/', $token, $matches)) {
+ // word-exclude
+ $parsed .= 'NOT('.ft_termParser($matches[1], $stopwords).')';
+ } else {
+ // word-include
+ $parsed .= ft_termParser($token, $stopwords);
+ }
+ }
+ }
+ $parsed_query .= $parsed;
+ }
+
+ // cleanup (very sensitive)
+ $parsed_query .= str_repeat(')', $parens_level);
+ do {
+ $parsed_query_old = $parsed_query;
+ $parsed_query = preg_replace('/(NOT)?\(\)/u', '', $parsed_query);
+ } while ($parsed_query !== $parsed_query_old);
+ $parsed_query = preg_replace('/(NOT|OR)+\)/u', ')' , $parsed_query);
+ $parsed_query = preg_replace('/(OR)+/u' , 'OR' , $parsed_query);
+ $parsed_query = preg_replace('/\(OR/u' , '(' , $parsed_query);
+ $parsed_query = preg_replace('/^OR|OR$/u' , '' , $parsed_query);
+ $parsed_query = preg_replace('/\)(NOT)?\(/u' , ')AND$1(', $parsed_query);
+
+ // adjustment: make highlightings right
+ $parens_level = 0;
+ $notgrp_levels = array();
+ $parsed_query_new = '';
+ $tokens = preg_split('/(NOT\(|[()])/u', $parsed_query, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
+ foreach ($tokens as $token) {
+ if ($token === 'NOT(') {
+ $notgrp_levels[] = ++$parens_level;
+ } elseif ($token === '(') {
+ ++$parens_level;
+ } elseif ($token === ')') {
+ if ($parens_level-- === end($notgrp_levels)) array_pop($notgrp_levels);
+ } elseif (count($notgrp_levels) % 2 === 1) {
+ // turn highlight-flag off if terms are logically in "NOT" group
+ $token = preg_replace('/([WPN])\+\:/u', '$1-:', $token);
+ }
+ $parsed_query_new .= $token;
+ }
+ $parsed_query = $parsed_query_new;
+
+ /**
+ * convert infix notation string into postfix (Reverse Polish notation) array
+ * by Shunting-yard algorithm
+ *
+ * see: http://en.wikipedia.org/wiki/Reverse_Polish_notation
+ * see: http://en.wikipedia.org/wiki/Shunting-yard_algorithm
+ */
+ $parsed_ary = array();
+ $ope_stack = array();
+ $ope_precedence = array(')' => 1, 'OR' => 2, 'AND' => 3, 'NOT' => 4, '(' => 5);
+ $ope_regex = '/([()]|OR|AND|NOT)/u';
+
+ $tokens = preg_split($ope_regex, $parsed_query, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
+ foreach ($tokens as $token) {
+ if (preg_match($ope_regex, $token)) {
+ // operator
+ $last_ope = end($ope_stack);
+ while ($ope_precedence[$token] <= $ope_precedence[$last_ope] && $last_ope != '(') {
+ $parsed_ary[] = array_pop($ope_stack);
+ $last_ope = end($ope_stack);
+ }
+ if ($token == ')') {
+ array_pop($ope_stack); // this array_pop always deletes '('
+ } else {
+ $ope_stack[] = $token;
+ }
+ } else {
+ // operand
+ $token_decoded = str_replace(array('OP', 'CP'), array('(', ')'), $token);
+ $parsed_ary[] = $token_decoded;
+ }
+ }
+ $parsed_ary = array_values(array_merge($parsed_ary, array_reverse($ope_stack)));
+
+ // cleanup: each double "NOT" in RPN array actually does nothing
+ $parsed_ary_count = count($parsed_ary);
+ for ($i = 1; $i < $parsed_ary_count; ++$i) {
+ if ($parsed_ary[$i] === 'NOT' && $parsed_ary[$i - 1] === 'NOT') {
+ unset($parsed_ary[$i], $parsed_ary[$i - 1]);
+ }
+ }
+ $parsed_ary = array_values($parsed_ary);
+
+ // build return value
+ $q = array();
+ $q['query'] = $query;
+ $q['parsed_str'] = $parsed_query;
+ $q['parsed_ary'] = $parsed_ary;
+
+ foreach ($q['parsed_ary'] as $token) {
+ if ($token[2] !== ':') continue;
+ $body = substr($token, 3);
+
+ switch (substr($token, 0, 3)) {
+ case 'N+:':
+ $q['ns'][] = $body; // for backward compatibility
+ break;
+ case 'N-:':
+ $q['notns'][] = $body; // for backward compatibility
+ break;
+ case 'W_:':
+ $q['words'][] = $body;
+ break;
+ case 'W-:':
+ $q['words'][] = $body;
+ $q['not'][] = $body; // for backward compatibility
+ break;
+ case 'W+:':
+ $q['words'][] = $body;
+ $q['highlight'][] = str_replace('*', '', $body);
+ $q['and'][] = $body; // for backward compatibility
+ break;
+ case 'P-:':
+ $q['phrases'][] = $body;
+ break;
+ case 'P+:':
+ $q['phrases'][] = $body;
+ $q['highlight'][] = str_replace('*', '', $body);
+ break;
+ }
+ }
+ foreach (array('words', 'phrases', 'highlight', 'ns', 'notns', 'and', 'not') as $key) {
+ $q[$key] = empty($q[$key]) ? array() : array_values(array_unique($q[$key]));
+ }
+
+ return $q;
+}
+
+/**
+ * Transforms given search term into intermediate representation
+ *
+ * This function is used in ft_queryParser() and not for general purpose use.
+ *
+ * @author Kazutaka Miyasaka <kazmiya@gmail.com>
+ */
+function ft_termParser($term, &$stopwords, $consider_asian = true, $phrase_mode = false) {
+ $parsed = '';
+ if ($consider_asian) {
+ // successive asian characters need to be searched as a phrase
+ $words = preg_split('/('.IDX_ASIAN.'+)/u', $term, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
+ foreach ($words as $word) {
+ if (preg_match('/'.IDX_ASIAN.'/u', $word)) $phrase_mode = true;
+ $parsed .= ft_termParser($word, $stopwords, false, $phrase_mode);
+ }
+ } else {
+ $term_noparen = str_replace(array('(', ')'), ' ', $term);
+ $words = idx_tokenizer($term_noparen, $stopwords, true);
+
+ // W_: no need to highlight
+ if (empty($words)) {
+ $parsed = '()'; // important: do not remove
+ } elseif ($words[0] === $term) {
+ $parsed = '(W+:'.$words[0].')';
+ } elseif ($phrase_mode) {
+ $term_encoded = str_replace(array('(', ')'), array('OP', 'CP'), $term);
+ $parsed = '((W_:'.implode(')(W_:', $words).')(P+:'.$term_encoded.'))';
+ } else {
+ $parsed = '((W+:'.implode(')(W+:', $words).'))';
+ }
+ }
+ return $parsed;
+}
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi.php
new file mode 100644
index 000000000..abe69a2bd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi.php
@@ -0,0 +1,4644 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * The GeSHi class for Generic Syntax Highlighting. Please refer to the
+ * documentation at http://qbnz.com/highlighter/documentation.php for more
+ * information about how to use this class.
+ *
+ * For changes, release notes, TODOs etc, see the relevant files in the docs/
+ * directory.
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * @package geshi
+ * @subpackage core
+ * @author Nigel McNie <nigel@geshi.org>, Benny Baumann <BenBE@omorphia.de>
+ * @copyright (C) 2004 - 2007 Nigel McNie, (C) 2007 - 2008 Benny Baumann
+ * @license http://gnu.org/copyleft/gpl.html GNU GPL
+ *
+ */
+
+//
+// GeSHi Constants
+// You should use these constant names in your programs instead of
+// their values - you never know when a value may change in a future
+// version
+//
+
+/** The version of this GeSHi file */
+define('GESHI_VERSION', '1.0.8.4');
+
+// Define the root directory for the GeSHi code tree
+if (!defined('GESHI_ROOT')) {
+ /** The root directory for GeSHi */
+ define('GESHI_ROOT', dirname(__FILE__) . DIRECTORY_SEPARATOR);
+}
+/** The language file directory for GeSHi
+ @access private */
+define('GESHI_LANG_ROOT', GESHI_ROOT . 'geshi' . DIRECTORY_SEPARATOR);
+
+// Define if GeSHi should be paranoid about security
+if (!defined('GESHI_SECURITY_PARANOID')) {
+ /** Tells GeSHi to be paranoid about security settings */
+ define('GESHI_SECURITY_PARANOID', false);
+}
+
+// Line numbers - use with enable_line_numbers()
+/** Use no line numbers when building the result */
+define('GESHI_NO_LINE_NUMBERS', 0);
+/** Use normal line numbers when building the result */
+define('GESHI_NORMAL_LINE_NUMBERS', 1);
+/** Use fancy line numbers when building the result */
+define('GESHI_FANCY_LINE_NUMBERS', 2);
+
+// Container HTML type
+/** Use nothing to surround the source */
+define('GESHI_HEADER_NONE', 0);
+/** Use a "div" to surround the source */
+define('GESHI_HEADER_DIV', 1);
+/** Use a "pre" to surround the source */
+define('GESHI_HEADER_PRE', 2);
+/** Use a pre to wrap lines when line numbers are enabled or to wrap the whole code. */
+define('GESHI_HEADER_PRE_VALID', 3);
+/**
+ * Use a "table" to surround the source:
+ *
+ * <table>
+ * <thead><tr><td colspan="2">$header</td></tr></thead>
+ * <tbody><tr><td><pre>$linenumbers</pre></td><td><pre>$code></pre></td></tr></tbody>
+ * <tfooter><tr><td colspan="2">$footer</td></tr></tfoot>
+ * </table>
+ *
+ * this is essentially only a workaround for Firefox, see sf#1651996 or take a look at
+ * https://bugzilla.mozilla.org/show_bug.cgi?id=365805
+ * @note when linenumbers are disabled this is essentially the same as GESHI_HEADER_PRE
+ */
+define('GESHI_HEADER_PRE_TABLE', 4);
+
+// Capatalisation constants
+/** Lowercase keywords found */
+define('GESHI_CAPS_NO_CHANGE', 0);
+/** Uppercase keywords found */
+define('GESHI_CAPS_UPPER', 1);
+/** Leave keywords found as the case that they are */
+define('GESHI_CAPS_LOWER', 2);
+
+// Link style constants
+/** Links in the source in the :link state */
+define('GESHI_LINK', 0);
+/** Links in the source in the :hover state */
+define('GESHI_HOVER', 1);
+/** Links in the source in the :active state */
+define('GESHI_ACTIVE', 2);
+/** Links in the source in the :visited state */
+define('GESHI_VISITED', 3);
+
+// Important string starter/finisher
+// Note that if you change these, they should be as-is: i.e., don't
+// write them as if they had been run through htmlentities()
+/** The starter for important parts of the source */
+define('GESHI_START_IMPORTANT', '<BEGIN GeSHi>');
+/** The ender for important parts of the source */
+define('GESHI_END_IMPORTANT', '<END GeSHi>');
+
+/**#@+
+ * @access private
+ */
+// When strict mode applies for a language
+/** Strict mode never applies (this is the most common) */
+define('GESHI_NEVER', 0);
+/** Strict mode *might* apply, and can be enabled or
+ disabled by {@link GeSHi->enable_strict_mode()} */
+define('GESHI_MAYBE', 1);
+/** Strict mode always applies */
+define('GESHI_ALWAYS', 2);
+
+// Advanced regexp handling constants, used in language files
+/** The key of the regex array defining what to search for */
+define('GESHI_SEARCH', 0);
+/** The key of the regex array defining what bracket group in a
+ matched search to use as a replacement */
+define('GESHI_REPLACE', 1);
+/** The key of the regex array defining any modifiers to the regular expression */
+define('GESHI_MODIFIERS', 2);
+/** The key of the regex array defining what bracket group in a
+ matched search to put before the replacement */
+define('GESHI_BEFORE', 3);
+/** The key of the regex array defining what bracket group in a
+ matched search to put after the replacement */
+define('GESHI_AFTER', 4);
+/** The key of the regex array defining a custom keyword to use
+ for this regexp's html tag class */
+define('GESHI_CLASS', 5);
+
+/** Used in language files to mark comments */
+define('GESHI_COMMENTS', 0);
+
+/** Used to work around missing PHP features **/
+define('GESHI_PHP_PRE_433', !(version_compare(PHP_VERSION, '4.3.3') === 1));
+
+/** make sure we can call stripos **/
+if (!function_exists('stripos')) {
+ // the offset param of preg_match is not supported below PHP 4.3.3
+ if (GESHI_PHP_PRE_433) {
+ /**
+ * @ignore
+ */
+ function stripos($haystack, $needle, $offset = null) {
+ if (!is_null($offset)) {
+ $haystack = substr($haystack, $offset);
+ }
+ if (preg_match('/'. preg_quote($needle, '/') . '/', $haystack, $match, PREG_OFFSET_CAPTURE)) {
+ return $match[0][1];
+ }
+ return false;
+ }
+ }
+ else {
+ /**
+ * @ignore
+ */
+ function stripos($haystack, $needle, $offset = null) {
+ if (preg_match('/'. preg_quote($needle, '/') . '/', $haystack, $match, PREG_OFFSET_CAPTURE, $offset)) {
+ return $match[0][1];
+ }
+ return false;
+ }
+ }
+}
+
+/** some old PHP / PCRE subpatterns only support up to xxx subpatterns in
+ regular expressions. Set this to false if your PCRE lib is up to date
+ @see GeSHi->optimize_regexp_list()
+ **/
+define('GESHI_MAX_PCRE_SUBPATTERNS', 500);
+/** it's also important not to generate too long regular expressions
+ be generous here... but keep in mind, that when reaching this limit we
+ still have to close open patterns. 12k should do just fine on a 16k limit.
+ @see GeSHi->optimize_regexp_list()
+ **/
+define('GESHI_MAX_PCRE_LENGTH', 12288);
+
+//Number format specification
+/** Basic number format for integers */
+define('GESHI_NUMBER_INT_BASIC', 1); //Default integers \d+
+/** Enhanced number format for integers like seen in C */
+define('GESHI_NUMBER_INT_CSTYLE', 2); //Default C-Style \d+[lL]?
+/** Number format to highlight binary numbers with a suffix "b" */
+define('GESHI_NUMBER_BIN_SUFFIX', 16); //[01]+[bB]
+/** Number format to highlight binary numbers with a prefix % */
+define('GESHI_NUMBER_BIN_PREFIX_PERCENT', 32); //%[01]+
+/** Number format to highlight binary numbers with a prefix 0b (C) */
+define('GESHI_NUMBER_BIN_PREFIX_0B', 64); //0b[01]+
+/** Number format to highlight octal numbers with a leading zero */
+define('GESHI_NUMBER_OCT_PREFIX', 256); //0[0-7]+
+/** Number format to highlight octal numbers with a suffix of o */
+define('GESHI_NUMBER_OCT_SUFFIX', 512); //[0-7]+[oO]
+/** Number format to highlight hex numbers with a prefix 0x */
+define('GESHI_NUMBER_HEX_PREFIX', 4096); //0x[0-9a-fA-F]+
+/** Number format to highlight hex numbers with a suffix of h */
+define('GESHI_NUMBER_HEX_SUFFIX', 8192); //[0-9][0-9a-fA-F]*h
+/** Number format to highlight floating-point numbers without support for scientific notation */
+define('GESHI_NUMBER_FLT_NONSCI', 65536); //\d+\.\d+
+/** Number format to highlight floating-point numbers without support for scientific notation */
+define('GESHI_NUMBER_FLT_NONSCI_F', 131072); //\d+(\.\d+)?f
+/** Number format to highlight floating-point numbers with support for scientific notation (E) and optional leading zero */
+define('GESHI_NUMBER_FLT_SCI_SHORT', 262144); //\.\d+e\d+
+/** Number format to highlight floating-point numbers with support for scientific notation (E) and required leading digit */
+define('GESHI_NUMBER_FLT_SCI_ZERO', 524288); //\d+(\.\d+)?e\d+
+//Custom formats are passed by RX array
+
+// Error detection - use these to analyse faults
+/** No sourcecode to highlight was specified
+ * @deprecated
+ */
+define('GESHI_ERROR_NO_INPUT', 1);
+/** The language specified does not exist */
+define('GESHI_ERROR_NO_SUCH_LANG', 2);
+/** GeSHi could not open a file for reading (generally a language file) */
+define('GESHI_ERROR_FILE_NOT_READABLE', 3);
+/** The header type passed to {@link GeSHi->set_header_type()} was invalid */
+define('GESHI_ERROR_INVALID_HEADER_TYPE', 4);
+/** The line number type passed to {@link GeSHi->enable_line_numbers()} was invalid */
+define('GESHI_ERROR_INVALID_LINE_NUMBER_TYPE', 5);
+/**#@-*/
+
+
+/**
+ * The GeSHi Class.
+ *
+ * Please refer to the documentation for GeSHi 1.0.X that is available
+ * at http://qbnz.com/highlighter/documentation.php for more information
+ * about how to use this class.
+ *
+ * @package geshi
+ * @author Nigel McNie <nigel@geshi.org>, Benny Baumann <BenBE@omorphia.de>
+ * @copyright (C) 2004 - 2007 Nigel McNie, (C) 2007 - 2008 Benny Baumann
+ */
+class GeSHi {
+ /**#@+
+ * @access private
+ */
+ /**
+ * The source code to highlight
+ * @var string
+ */
+ var $source = '';
+
+ /**
+ * The language to use when highlighting
+ * @var string
+ */
+ var $language = '';
+
+ /**
+ * The data for the language used
+ * @var array
+ */
+ var $language_data = array();
+
+ /**
+ * The path to the language files
+ * @var string
+ */
+ var $language_path = GESHI_LANG_ROOT;
+
+ /**
+ * The error message associated with an error
+ * @var string
+ * @todo check err reporting works
+ */
+ var $error = false;
+
+ /**
+ * Possible error messages
+ * @var array
+ */
+ var $error_messages = array(
+ GESHI_ERROR_NO_SUCH_LANG => 'GeSHi could not find the language {LANGUAGE} (using path {PATH})',
+ GESHI_ERROR_FILE_NOT_READABLE => 'The file specified for load_from_file was not readable',
+ GESHI_ERROR_INVALID_HEADER_TYPE => 'The header type specified is invalid',
+ GESHI_ERROR_INVALID_LINE_NUMBER_TYPE => 'The line number type specified is invalid'
+ );
+
+ /**
+ * Whether highlighting is strict or not
+ * @var boolean
+ */
+ var $strict_mode = false;
+
+ /**
+ * Whether to use CSS classes in output
+ * @var boolean
+ */
+ var $use_classes = false;
+
+ /**
+ * The type of header to use. Can be one of the following
+ * values:
+ *
+ * - GESHI_HEADER_PRE: Source is outputted in a "pre" HTML element.
+ * - GESHI_HEADER_DIV: Source is outputted in a "div" HTML element.
+ * - GESHI_HEADER_NONE: No header is outputted.
+ *
+ * @var int
+ */
+ var $header_type = GESHI_HEADER_PRE;
+
+ /**
+ * Array of permissions for which lexics should be highlighted
+ * @var array
+ */
+ var $lexic_permissions = array(
+ 'KEYWORDS' => array(),
+ 'COMMENTS' => array('MULTI' => true),
+ 'REGEXPS' => array(),
+ 'ESCAPE_CHAR' => true,
+ 'BRACKETS' => true,
+ 'SYMBOLS' => false,
+ 'STRINGS' => true,
+ 'NUMBERS' => true,
+ 'METHODS' => true,
+ 'SCRIPT' => true
+ );
+
+ /**
+ * The time it took to parse the code
+ * @var double
+ */
+ var $time = 0;
+
+ /**
+ * The content of the header block
+ * @var string
+ */
+ var $header_content = '';
+
+ /**
+ * The content of the footer block
+ * @var string
+ */
+ var $footer_content = '';
+
+ /**
+ * The style of the header block
+ * @var string
+ */
+ var $header_content_style = '';
+
+ /**
+ * The style of the footer block
+ * @var string
+ */
+ var $footer_content_style = '';
+
+ /**
+ * Tells if a block around the highlighted source should be forced
+ * if not using line numbering
+ * @var boolean
+ */
+ var $force_code_block = false;
+
+ /**
+ * The styles for hyperlinks in the code
+ * @var array
+ */
+ var $link_styles = array();
+
+ /**
+ * Whether important blocks should be recognised or not
+ * @var boolean
+ * @deprecated
+ * @todo REMOVE THIS FUNCTIONALITY!
+ */
+ var $enable_important_blocks = false;
+
+ /**
+ * Styles for important parts of the code
+ * @var string
+ * @deprecated
+ * @todo As above - rethink the whole idea of important blocks as it is buggy and
+ * will be hard to implement in 1.2
+ */
+ var $important_styles = 'font-weight: bold; color: red;'; // Styles for important parts of the code
+
+ /**
+ * Whether CSS IDs should be added to the code
+ * @var boolean
+ */
+ var $add_ids = false;
+
+ /**
+ * Lines that should be highlighted extra
+ * @var array
+ */
+ var $highlight_extra_lines = array();
+
+ /**
+ * Styles of lines that should be highlighted extra
+ * @var array
+ */
+ var $highlight_extra_lines_styles = array();
+
+ /**
+ * Styles of extra-highlighted lines
+ * @var string
+ */
+ var $highlight_extra_lines_style = 'background-color: #ffc;';
+
+ /**
+ * The line ending
+ * If null, nl2br() will be used on the result string.
+ * Otherwise, all instances of \n will be replaced with $line_ending
+ * @var string
+ */
+ var $line_ending = null;
+
+ /**
+ * Number at which line numbers should start at
+ * @var int
+ */
+ var $line_numbers_start = 1;
+
+ /**
+ * The overall style for this code block
+ * @var string
+ */
+ var $overall_style = 'font-family:monospace;';
+
+ /**
+ * The style for the actual code
+ * @var string
+ */
+ var $code_style = 'font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;';
+
+ /**
+ * The overall class for this code block
+ * @var string
+ */
+ var $overall_class = '';
+
+ /**
+ * The overall ID for this code block
+ * @var string
+ */
+ var $overall_id = '';
+
+ /**
+ * Line number styles
+ * @var string
+ */
+ var $line_style1 = 'font-weight: normal; vertical-align:top;';
+
+ /**
+ * Line number styles for fancy lines
+ * @var string
+ */
+ var $line_style2 = 'font-weight: bold; vertical-align:top;';
+
+ /**
+ * Style for line numbers when GESHI_HEADER_PRE_TABLE is chosen
+ * @var string
+ */
+ var $table_linenumber_style = 'width:1px;text-align:right;margin:0;padding:0 2px;vertical-align:top;';
+
+ /**
+ * Flag for how line numbers are displayed
+ * @var boolean
+ */
+ var $line_numbers = GESHI_NO_LINE_NUMBERS;
+
+ /**
+ * Flag to decide if multi line spans are allowed. Set it to false to make sure
+ * each tag is closed before and reopened after each linefeed.
+ * @var boolean
+ */
+ var $allow_multiline_span = true;
+
+ /**
+ * The "nth" value for fancy line highlighting
+ * @var int
+ */
+ var $line_nth_row = 0;
+
+ /**
+ * The size of tab stops
+ * @var int
+ */
+ var $tab_width = 8;
+
+ /**
+ * Should we use language-defined tab stop widths?
+ * @var int
+ */
+ var $use_language_tab_width = false;
+
+ /**
+ * Default target for keyword links
+ * @var string
+ */
+ var $link_target = '';
+
+ /**
+ * The encoding to use for entity encoding
+ * NOTE: Used with Escape Char Sequences to fix UTF-8 handling (cf. SF#2037598)
+ * @var string
+ */
+ var $encoding = 'utf-8';
+
+ /**
+ * Should keywords be linked?
+ * @var boolean
+ */
+ var $keyword_links = true;
+
+ /**
+ * Currently loaded language file
+ * @var string
+ * @since 1.0.7.22
+ */
+ var $loaded_language = '';
+
+ /**
+ * Wether the caches needed for parsing are built or not
+ *
+ * @var bool
+ * @since 1.0.8
+ */
+ var $parse_cache_built = false;
+
+ /**
+ * Work around for Suhosin Patch with disabled /e modifier
+ *
+ * Note from suhosins author in config file:
+ * <blockquote>
+ * The /e modifier inside <code>preg_replace()</code> allows code execution.
+ * Often it is the cause for remote code execution exploits. It is wise to
+ * deactivate this feature and test where in the application it is used.
+ * The developer using the /e modifier should be made aware that he should
+ * use <code>preg_replace_callback()</code> instead
+ * </blockquote>
+ *
+ * @var array
+ * @since 1.0.8
+ */
+ var $_kw_replace_group = 0;
+ var $_rx_key = 0;
+
+ /**
+ * some "callback parameters" for handle_multiline_regexps
+ *
+ * @since 1.0.8
+ * @access private
+ * @var string
+ */
+ var $_hmr_before = '';
+ var $_hmr_replace = '';
+ var $_hmr_after = '';
+ var $_hmr_key = 0;
+
+ /**#@-*/
+
+ /**
+ * Creates a new GeSHi object, with source and language
+ *
+ * @param string The source code to highlight
+ * @param string The language to highlight the source with
+ * @param string The path to the language file directory. <b>This
+ * is deprecated!</b> I've backported the auto path
+ * detection from the 1.1.X dev branch, so now it
+ * should be automatically set correctly. If you have
+ * renamed the language directory however, you will
+ * still need to set the path using this parameter or
+ * {@link GeSHi->set_language_path()}
+ * @since 1.0.0
+ */
+ function GeSHi($source = '', $language = '', $path = '') {
+ if (!empty($source)) {
+ $this->set_source($source);
+ }
+ if (!empty($language)) {
+ $this->set_language($language);
+ }
+ $this->set_language_path($path);
+ }
+
+ /**
+ * Returns an error message associated with the last GeSHi operation,
+ * or false if no error has occured
+ *
+ * @return string|false An error message if there has been an error, else false
+ * @since 1.0.0
+ */
+ function error() {
+ if ($this->error) {
+ //Put some template variables for debugging here ...
+ $debug_tpl_vars = array(
+ '{LANGUAGE}' => $this->language,
+ '{PATH}' => $this->language_path
+ );
+ $msg = str_replace(
+ array_keys($debug_tpl_vars),
+ array_values($debug_tpl_vars),
+ $this->error_messages[$this->error]);
+
+ return "<br /><strong>GeSHi Error:</strong> $msg (code {$this->error})<br />";
+ }
+ return false;
+ }
+
+ /**
+ * Gets a human-readable language name (thanks to Simon Patterson
+ * for the idea :))
+ *
+ * @return string The name for the current language
+ * @since 1.0.2
+ */
+ function get_language_name() {
+ if (GESHI_ERROR_NO_SUCH_LANG == $this->error) {
+ return $this->language_data['LANG_NAME'] . ' (Unknown Language)';
+ }
+ return $this->language_data['LANG_NAME'];
+ }
+
+ /**
+ * Sets the source code for this object
+ *
+ * @param string The source code to highlight
+ * @since 1.0.0
+ */
+ function set_source($source) {
+ $this->source = $source;
+ $this->highlight_extra_lines = array();
+ }
+
+ /**
+ * Sets the language for this object
+ *
+ * @note since 1.0.8 this function won't reset language-settings by default anymore!
+ * if you need this set $force_reset = true
+ *
+ * @param string The name of the language to use
+ * @since 1.0.0
+ */
+ function set_language($language, $force_reset = false) {
+ if ($force_reset) {
+ $this->loaded_language = false;
+ }
+
+ //Clean up the language name to prevent malicious code injection
+ $language = preg_replace('#[^a-zA-Z0-9\-_]#', '', $language);
+
+ $language = strtolower($language);
+
+ //Retreive the full filename
+ $file_name = $this->language_path . $language . '.php';
+ if ($file_name == $this->loaded_language) {
+ // this language is already loaded!
+ return;
+ }
+
+ $this->language = $language;
+
+ $this->error = false;
+ $this->strict_mode = GESHI_NEVER;
+
+ //Check if we can read the desired file
+ if (!is_readable($file_name)) {
+ $this->error = GESHI_ERROR_NO_SUCH_LANG;
+ return;
+ }
+
+ // Load the language for parsing
+ $this->load_language($file_name);
+ }
+
+ /**
+ * Sets the path to the directory containing the language files. Note
+ * that this path is relative to the directory of the script that included
+ * geshi.php, NOT geshi.php itself.
+ *
+ * @param string The path to the language directory
+ * @since 1.0.0
+ * @deprecated The path to the language files should now be automatically
+ * detected, so this method should no longer be needed. The
+ * 1.1.X branch handles manual setting of the path differently
+ * so this method will disappear in 1.2.0.
+ */
+ function set_language_path($path) {
+ if(strpos($path,':')) {
+ //Security Fix to prevent external directories using fopen wrappers.
+ if(DIRECTORY_SEPARATOR == "\\") {
+ if(!preg_match('#^[a-zA-Z]:#', $path) || false !== strpos($path, ':', 2)) {
+ return;
+ }
+ } else {
+ return;
+ }
+ }
+ if(preg_match('#[^/a-zA-Z0-9_\.\-\\\s:]#', $path)) {
+ //Security Fix to prevent external directories using fopen wrappers.
+ return;
+ }
+ if(GESHI_SECURITY_PARANOID && false !== strpos($path, '/.')) {
+ //Security Fix to prevent external directories using fopen wrappers.
+ return;
+ }
+ if(GESHI_SECURITY_PARANOID && false !== strpos($path, '..')) {
+ //Security Fix to prevent external directories using fopen wrappers.
+ return;
+ }
+ if ($path) {
+ $this->language_path = ('/' == $path[strlen($path) - 1]) ? $path : $path . '/';
+ $this->set_language($this->language); // otherwise set_language_path has no effect
+ }
+ }
+
+ /**
+ * Sets the type of header to be used.
+ *
+ * If GESHI_HEADER_DIV is used, the code is surrounded in a "div".This
+ * means more source code but more control over tab width and line-wrapping.
+ * GESHI_HEADER_PRE means that a "pre" is used - less source, but less
+ * control. Default is GESHI_HEADER_PRE.
+ *
+ * From 1.0.7.2, you can use GESHI_HEADER_NONE to specify that no header code
+ * should be outputted.
+ *
+ * @param int The type of header to be used
+ * @since 1.0.0
+ */
+ function set_header_type($type) {
+ //Check if we got a valid header type
+ if (!in_array($type, array(GESHI_HEADER_NONE, GESHI_HEADER_DIV,
+ GESHI_HEADER_PRE, GESHI_HEADER_PRE_VALID, GESHI_HEADER_PRE_TABLE))) {
+ $this->error = GESHI_ERROR_INVALID_HEADER_TYPE;
+ return;
+ }
+
+ //Set that new header type
+ $this->header_type = $type;
+ }
+
+ /**
+ * Sets the styles for the code that will be outputted
+ * when this object is parsed. The style should be a
+ * string of valid stylesheet declarations
+ *
+ * @param string The overall style for the outputted code block
+ * @param boolean Whether to merge the styles with the current styles or not
+ * @since 1.0.0
+ */
+ function set_overall_style($style, $preserve_defaults = false) {
+ if (!$preserve_defaults) {
+ $this->overall_style = $style;
+ } else {
+ $this->overall_style .= $style;
+ }
+ }
+
+ /**
+ * Sets the overall classname for this block of code. This
+ * class can then be used in a stylesheet to style this object's
+ * output
+ *
+ * @param string The class name to use for this block of code
+ * @since 1.0.0
+ */
+ function set_overall_class($class) {
+ $this->overall_class = $class;
+ }
+
+ /**
+ * Sets the overall id for this block of code. This id can then
+ * be used in a stylesheet to style this object's output
+ *
+ * @param string The ID to use for this block of code
+ * @since 1.0.0
+ */
+ function set_overall_id($id) {
+ $this->overall_id = $id;
+ }
+
+ /**
+ * Sets whether CSS classes should be used to highlight the source. Default
+ * is off, calling this method with no arguments will turn it on
+ *
+ * @param boolean Whether to turn classes on or not
+ * @since 1.0.0
+ */
+ function enable_classes($flag = true) {
+ $this->use_classes = ($flag) ? true : false;
+ }
+
+ /**
+ * Sets the style for the actual code. This should be a string
+ * containing valid stylesheet declarations. If $preserve_defaults is
+ * true, then styles are merged with the default styles, with the
+ * user defined styles having priority
+ *
+ * Note: Use this method to override any style changes you made to
+ * the line numbers if you are using line numbers, else the line of
+ * code will have the same style as the line number! Consult the
+ * GeSHi documentation for more information about this.
+ *
+ * @param string The style to use for actual code
+ * @param boolean Whether to merge the current styles with the new styles
+ * @since 1.0.2
+ */
+ function set_code_style($style, $preserve_defaults = false) {
+ if (!$preserve_defaults) {
+ $this->code_style = $style;
+ } else {
+ $this->code_style .= $style;
+ }
+ }
+
+ /**
+ * Sets the styles for the line numbers.
+ *
+ * @param string The style for the line numbers that are "normal"
+ * @param string|boolean If a string, this is the style of the line
+ * numbers that are "fancy", otherwise if boolean then this
+ * defines whether the normal styles should be merged with the
+ * new normal styles or not
+ * @param boolean If set, is the flag for whether to merge the "fancy"
+ * styles with the current styles or not
+ * @since 1.0.2
+ */
+ function set_line_style($style1, $style2 = '', $preserve_defaults = false) {
+ //Check if we got 2 or three parameters
+ if (is_bool($style2)) {
+ $preserve_defaults = $style2;
+ $style2 = '';
+ }
+
+ //Actually set the new styles
+ if (!$preserve_defaults) {
+ $this->line_style1 = $style1;
+ $this->line_style2 = $style2;
+ } else {
+ $this->line_style1 .= $style1;
+ $this->line_style2 .= $style2;
+ }
+ }
+
+ /**
+ * Sets whether line numbers should be displayed.
+ *
+ * Valid values for the first parameter are:
+ *
+ * - GESHI_NO_LINE_NUMBERS: Line numbers will not be displayed
+ * - GESHI_NORMAL_LINE_NUMBERS: Line numbers will be displayed
+ * - GESHI_FANCY_LINE_NUMBERS: Fancy line numbers will be displayed
+ *
+ * For fancy line numbers, the second parameter is used to signal which lines
+ * are to be fancy. For example, if the value of this parameter is 5 then every
+ * 5th line will be fancy.
+ *
+ * @param int How line numbers should be displayed
+ * @param int Defines which lines are fancy
+ * @since 1.0.0
+ */
+ function enable_line_numbers($flag, $nth_row = 5) {
+ if (GESHI_NO_LINE_NUMBERS != $flag && GESHI_NORMAL_LINE_NUMBERS != $flag
+ && GESHI_FANCY_LINE_NUMBERS != $flag) {
+ $this->error = GESHI_ERROR_INVALID_LINE_NUMBER_TYPE;
+ }
+ $this->line_numbers = $flag;
+ $this->line_nth_row = $nth_row;
+ }
+
+ /**
+ * Sets wether spans and other HTML markup generated by GeSHi can
+ * span over multiple lines or not. Defaults to true to reduce overhead.
+ * Set it to false if you want to manipulate the output or manually display
+ * the code in an ordered list.
+ *
+ * @param boolean Wether multiline spans are allowed or not
+ * @since 1.0.7.22
+ */
+ function enable_multiline_span($flag) {
+ $this->allow_multiline_span = (bool) $flag;
+ }
+
+ /**
+ * Get current setting for multiline spans, see GeSHi->enable_multiline_span().
+ *
+ * @see enable_multiline_span
+ * @return bool
+ */
+ function get_multiline_span() {
+ return $this->allow_multiline_span;
+ }
+
+ /**
+ * Sets the style for a keyword group. If $preserve_defaults is
+ * true, then styles are merged with the default styles, with the
+ * user defined styles having priority
+ *
+ * @param int The key of the keyword group to change the styles of
+ * @param string The style to make the keywords
+ * @param boolean Whether to merge the new styles with the old or just
+ * to overwrite them
+ * @since 1.0.0
+ */
+ function set_keyword_group_style($key, $style, $preserve_defaults = false) {
+ //Set the style for this keyword group
+ if (!$preserve_defaults) {
+ $this->language_data['STYLES']['KEYWORDS'][$key] = $style;
+ } else {
+ $this->language_data['STYLES']['KEYWORDS'][$key] .= $style;
+ }
+
+ //Update the lexic permissions
+ if (!isset($this->lexic_permissions['KEYWORDS'][$key])) {
+ $this->lexic_permissions['KEYWORDS'][$key] = true;
+ }
+ }
+
+ /**
+ * Turns highlighting on/off for a keyword group
+ *
+ * @param int The key of the keyword group to turn on or off
+ * @param boolean Whether to turn highlighting for that group on or off
+ * @since 1.0.0
+ */
+ function set_keyword_group_highlighting($key, $flag = true) {
+ $this->lexic_permissions['KEYWORDS'][$key] = ($flag) ? true : false;
+ }
+
+ /**
+ * Sets the styles for comment groups. If $preserve_defaults is
+ * true, then styles are merged with the default styles, with the
+ * user defined styles having priority
+ *
+ * @param int The key of the comment group to change the styles of
+ * @param string The style to make the comments
+ * @param boolean Whether to merge the new styles with the old or just
+ * to overwrite them
+ * @since 1.0.0
+ */
+ function set_comments_style($key, $style, $preserve_defaults = false) {
+ if (!$preserve_defaults) {
+ $this->language_data['STYLES']['COMMENTS'][$key] = $style;
+ } else {
+ $this->language_data['STYLES']['COMMENTS'][$key] .= $style;
+ }
+ }
+
+ /**
+ * Turns highlighting on/off for comment groups
+ *
+ * @param int The key of the comment group to turn on or off
+ * @param boolean Whether to turn highlighting for that group on or off
+ * @since 1.0.0
+ */
+ function set_comments_highlighting($key, $flag = true) {
+ $this->lexic_permissions['COMMENTS'][$key] = ($flag) ? true : false;
+ }
+
+ /**
+ * Sets the styles for escaped characters. If $preserve_defaults is
+ * true, then styles are merged with the default styles, with the
+ * user defined styles having priority
+ *
+ * @param string The style to make the escape characters
+ * @param boolean Whether to merge the new styles with the old or just
+ * to overwrite them
+ * @since 1.0.0
+ */
+ function set_escape_characters_style($style, $preserve_defaults = false, $group = 0) {
+ if (!$preserve_defaults) {
+ $this->language_data['STYLES']['ESCAPE_CHAR'][$group] = $style;
+ } else {
+ $this->language_data['STYLES']['ESCAPE_CHAR'][$group] .= $style;
+ }
+ }
+
+ /**
+ * Turns highlighting on/off for escaped characters
+ *
+ * @param boolean Whether to turn highlighting for escape characters on or off
+ * @since 1.0.0
+ */
+ function set_escape_characters_highlighting($flag = true) {
+ $this->lexic_permissions['ESCAPE_CHAR'] = ($flag) ? true : false;
+ }
+
+ /**
+ * Sets the styles for brackets. If $preserve_defaults is
+ * true, then styles are merged with the default styles, with the
+ * user defined styles having priority
+ *
+ * This method is DEPRECATED: use set_symbols_style instead.
+ * This method will be removed in 1.2.X
+ *
+ * @param string The style to make the brackets
+ * @param boolean Whether to merge the new styles with the old or just
+ * to overwrite them
+ * @since 1.0.0
+ * @deprecated In favour of set_symbols_style
+ */
+ function set_brackets_style($style, $preserve_defaults = false) {
+ if (!$preserve_defaults) {
+ $this->language_data['STYLES']['BRACKETS'][0] = $style;
+ } else {
+ $this->language_data['STYLES']['BRACKETS'][0] .= $style;
+ }
+ }
+
+ /**
+ * Turns highlighting on/off for brackets
+ *
+ * This method is DEPRECATED: use set_symbols_highlighting instead.
+ * This method will be remove in 1.2.X
+ *
+ * @param boolean Whether to turn highlighting for brackets on or off
+ * @since 1.0.0
+ * @deprecated In favour of set_symbols_highlighting
+ */
+ function set_brackets_highlighting($flag) {
+ $this->lexic_permissions['BRACKETS'] = ($flag) ? true : false;
+ }
+
+ /**
+ * Sets the styles for symbols. If $preserve_defaults is
+ * true, then styles are merged with the default styles, with the
+ * user defined styles having priority
+ *
+ * @param string The style to make the symbols
+ * @param boolean Whether to merge the new styles with the old or just
+ * to overwrite them
+ * @param int Tells the group of symbols for which style should be set.
+ * @since 1.0.1
+ */
+ function set_symbols_style($style, $preserve_defaults = false, $group = 0) {
+ // Update the style of symbols
+ if (!$preserve_defaults) {
+ $this->language_data['STYLES']['SYMBOLS'][$group] = $style;
+ } else {
+ $this->language_data['STYLES']['SYMBOLS'][$group] .= $style;
+ }
+
+ // For backward compatibility
+ if (0 == $group) {
+ $this->set_brackets_style ($style, $preserve_defaults);
+ }
+ }
+
+ /**
+ * Turns highlighting on/off for symbols
+ *
+ * @param boolean Whether to turn highlighting for symbols on or off
+ * @since 1.0.0
+ */
+ function set_symbols_highlighting($flag) {
+ // Update lexic permissions for this symbol group
+ $this->lexic_permissions['SYMBOLS'] = ($flag) ? true : false;
+
+ // For backward compatibility
+ $this->set_brackets_highlighting ($flag);
+ }
+
+ /**
+ * Sets the styles for strings. If $preserve_defaults is
+ * true, then styles are merged with the default styles, with the
+ * user defined styles having priority
+ *
+ * @param string The style to make the escape characters
+ * @param boolean Whether to merge the new styles with the old or just
+ * to overwrite them
+ * @since 1.0.0
+ */
+ function set_strings_style($style, $preserve_defaults = false) {
+ if (!$preserve_defaults) {
+ $this->language_data['STYLES']['STRINGS'][0] = $style;
+ } else {
+ $this->language_data['STYLES']['STRINGS'][0] .= $style;
+ }
+ }
+
+ /**
+ * Turns highlighting on/off for strings
+ *
+ * @param boolean Whether to turn highlighting for strings on or off
+ * @since 1.0.0
+ */
+ function set_strings_highlighting($flag) {
+ $this->lexic_permissions['STRINGS'] = ($flag) ? true : false;
+ }
+
+ /**
+ * Sets the styles for strict code blocks. If $preserve_defaults is
+ * true, then styles are merged with the default styles, with the
+ * user defined styles having priority
+ *
+ * @param string The style to make the script blocks
+ * @param boolean Whether to merge the new styles with the old or just
+ * to overwrite them
+ * @param int Tells the group of script blocks for which style should be set.
+ * @since 1.0.8.4
+ */
+ function set_script_style($style, $preserve_defaults = false, $group = 0) {
+ // Update the style of symbols
+ if (!$preserve_defaults) {
+ $this->language_data['STYLES']['SCRIPT'][$group] = $style;
+ } else {
+ $this->language_data['STYLES']['SCRIPT'][$group] .= $style;
+ }
+ }
+
+ /**
+ * Sets the styles for numbers. If $preserve_defaults is
+ * true, then styles are merged with the default styles, with the
+ * user defined styles having priority
+ *
+ * @param string The style to make the numbers
+ * @param boolean Whether to merge the new styles with the old or just
+ * to overwrite them
+ * @since 1.0.0
+ */
+ function set_numbers_style($style, $preserve_defaults = false) {
+ if (!$preserve_defaults) {
+ $this->language_data['STYLES']['NUMBERS'][0] = $style;
+ } else {
+ $this->language_data['STYLES']['NUMBERS'][0] .= $style;
+ }
+ }
+
+ /**
+ * Turns highlighting on/off for numbers
+ *
+ * @param boolean Whether to turn highlighting for numbers on or off
+ * @since 1.0.0
+ */
+ function set_numbers_highlighting($flag) {
+ $this->lexic_permissions['NUMBERS'] = ($flag) ? true : false;
+ }
+
+ /**
+ * Sets the styles for methods. $key is a number that references the
+ * appropriate "object splitter" - see the language file for the language
+ * you are highlighting to get this number. If $preserve_defaults is
+ * true, then styles are merged with the default styles, with the
+ * user defined styles having priority
+ *
+ * @param int The key of the object splitter to change the styles of
+ * @param string The style to make the methods
+ * @param boolean Whether to merge the new styles with the old or just
+ * to overwrite them
+ * @since 1.0.0
+ */
+ function set_methods_style($key, $style, $preserve_defaults = false) {
+ if (!$preserve_defaults) {
+ $this->language_data['STYLES']['METHODS'][$key] = $style;
+ } else {
+ $this->language_data['STYLES']['METHODS'][$key] .= $style;
+ }
+ }
+
+ /**
+ * Turns highlighting on/off for methods
+ *
+ * @param boolean Whether to turn highlighting for methods on or off
+ * @since 1.0.0
+ */
+ function set_methods_highlighting($flag) {
+ $this->lexic_permissions['METHODS'] = ($flag) ? true : false;
+ }
+
+ /**
+ * Sets the styles for regexps. If $preserve_defaults is
+ * true, then styles are merged with the default styles, with the
+ * user defined styles having priority
+ *
+ * @param string The style to make the regular expression matches
+ * @param boolean Whether to merge the new styles with the old or just
+ * to overwrite them
+ * @since 1.0.0
+ */
+ function set_regexps_style($key, $style, $preserve_defaults = false) {
+ if (!$preserve_defaults) {
+ $this->language_data['STYLES']['REGEXPS'][$key] = $style;
+ } else {
+ $this->language_data['STYLES']['REGEXPS'][$key] .= $style;
+ }
+ }
+
+ /**
+ * Turns highlighting on/off for regexps
+ *
+ * @param int The key of the regular expression group to turn on or off
+ * @param boolean Whether to turn highlighting for the regular expression group on or off
+ * @since 1.0.0
+ */
+ function set_regexps_highlighting($key, $flag) {
+ $this->lexic_permissions['REGEXPS'][$key] = ($flag) ? true : false;
+ }
+
+ /**
+ * Sets whether a set of keywords are checked for in a case sensitive manner
+ *
+ * @param int The key of the keyword group to change the case sensitivity of
+ * @param boolean Whether to check in a case sensitive manner or not
+ * @since 1.0.0
+ */
+ function set_case_sensitivity($key, $case) {
+ $this->language_data['CASE_SENSITIVE'][$key] = ($case) ? true : false;
+ }
+
+ /**
+ * Sets the case that keywords should use when found. Use the constants:
+ *
+ * - GESHI_CAPS_NO_CHANGE: leave keywords as-is
+ * - GESHI_CAPS_UPPER: convert all keywords to uppercase where found
+ * - GESHI_CAPS_LOWER: convert all keywords to lowercase where found
+ *
+ * @param int A constant specifying what to do with matched keywords
+ * @since 1.0.1
+ */
+ function set_case_keywords($case) {
+ if (in_array($case, array(
+ GESHI_CAPS_NO_CHANGE, GESHI_CAPS_UPPER, GESHI_CAPS_LOWER))) {
+ $this->language_data['CASE_KEYWORDS'] = $case;
+ }
+ }
+
+ /**
+ * Sets how many spaces a tab is substituted for
+ *
+ * Widths below zero are ignored
+ *
+ * @param int The tab width
+ * @since 1.0.0
+ */
+ function set_tab_width($width) {
+ $this->tab_width = intval($width);
+
+ //Check if it fit's the constraints:
+ if ($this->tab_width < 1) {
+ //Return it to the default
+ $this->tab_width = 8;
+ }
+ }
+
+ /**
+ * Sets whether or not to use tab-stop width specifed by language
+ *
+ * @param boolean Whether to use language-specific tab-stop widths
+ * @since 1.0.7.20
+ */
+ function set_use_language_tab_width($use) {
+ $this->use_language_tab_width = (bool) $use;
+ }
+
+ /**
+ * Returns the tab width to use, based on the current language and user
+ * preference
+ *
+ * @return int Tab width
+ * @since 1.0.7.20
+ */
+ function get_real_tab_width() {
+ if (!$this->use_language_tab_width ||
+ !isset($this->language_data['TAB_WIDTH'])) {
+ return $this->tab_width;
+ } else {
+ return $this->language_data['TAB_WIDTH'];
+ }
+ }
+
+ /**
+ * Enables/disables strict highlighting. Default is off, calling this
+ * method without parameters will turn it on. See documentation
+ * for more details on strict mode and where to use it.
+ *
+ * @param boolean Whether to enable strict mode or not
+ * @since 1.0.0
+ */
+ function enable_strict_mode($mode = true) {
+ if (GESHI_MAYBE == $this->language_data['STRICT_MODE_APPLIES']) {
+ $this->strict_mode = ($mode) ? GESHI_ALWAYS : GESHI_NEVER;
+ }
+ }
+
+ /**
+ * Disables all highlighting
+ *
+ * @since 1.0.0
+ * @todo Rewrite with array traversal
+ * @deprecated In favour of enable_highlighting
+ */
+ function disable_highlighting() {
+ $this->enable_highlighting(false);
+ }
+
+ /**
+ * Enables all highlighting
+ *
+ * The optional flag parameter was added in version 1.0.7.21 and can be used
+ * to enable (true) or disable (false) all highlighting.
+ *
+ * @since 1.0.0
+ * @param boolean A flag specifying whether to enable or disable all highlighting
+ * @todo Rewrite with array traversal
+ */
+ function enable_highlighting($flag = true) {
+ $flag = $flag ? true : false;
+ foreach ($this->lexic_permissions as $key => $value) {
+ if (is_array($value)) {
+ foreach ($value as $k => $v) {
+ $this->lexic_permissions[$key][$k] = $flag;
+ }
+ } else {
+ $this->lexic_permissions[$key] = $flag;
+ }
+ }
+
+ // Context blocks
+ $this->enable_important_blocks = $flag;
+ }
+
+ /**
+ * Given a file extension, this method returns either a valid geshi language
+ * name, or the empty string if it couldn't be found
+ *
+ * @param string The extension to get a language name for
+ * @param array A lookup array to use instead of the default one
+ * @since 1.0.5
+ * @todo Re-think about how this method works (maybe make it private and/or make it
+ * a extension->lang lookup?)
+ * @todo static?
+ */
+ function get_language_name_from_extension( $extension, $lookup = array() ) {
+ if ( !is_array($lookup) || empty($lookup)) {
+ $lookup = array(
+ 'abap' => array('abap'),
+ 'actionscript' => array('as'),
+ 'ada' => array('a', 'ada', 'adb', 'ads'),
+ 'apache' => array('conf'),
+ 'asm' => array('ash', 'asm', 'inc'),
+ 'asp' => array('asp'),
+ 'bash' => array('sh'),
+ 'bf' => array('bf'),
+ 'c' => array('c', 'h'),
+ 'c_mac' => array('c', 'h'),
+ 'caddcl' => array(),
+ 'cadlisp' => array(),
+ 'cdfg' => array('cdfg'),
+ 'cobol' => array('cbl'),
+ 'cpp' => array('cpp', 'hpp', 'C', 'H', 'CPP', 'HPP'),
+ 'csharp' => array('cs'),
+ 'css' => array('css'),
+ 'd' => array('d'),
+ 'delphi' => array('dpk', 'dpr', 'pp', 'pas'),
+ 'diff' => array('diff', 'patch'),
+ 'dos' => array('bat', 'cmd'),
+ 'gettext' => array('po', 'pot'),
+ 'gml' => array('gml'),
+ 'gnuplot' => array('plt'),
+ 'groovy' => array('groovy'),
+ 'haskell' => array('hs'),
+ 'html4strict' => array('html', 'htm'),
+ 'ini' => array('ini', 'desktop'),
+ 'java' => array('java'),
+ 'javascript' => array('js'),
+ 'klonec' => array('kl1'),
+ 'klonecpp' => array('klx'),
+ 'latex' => array('tex'),
+ 'lisp' => array('lisp'),
+ 'lua' => array('lua'),
+ 'matlab' => array('m'),
+ 'mpasm' => array(),
+ 'mysql' => array('sql'),
+ 'nsis' => array(),
+ 'objc' => array(),
+ 'oobas' => array(),
+ 'oracle8' => array(),
+ 'oracle10' => array(),
+ 'pascal' => array('pas'),
+ 'perl' => array('pl', 'pm'),
+ 'php' => array('php', 'php5', 'phtml', 'phps'),
+ 'povray' => array('pov'),
+ 'providex' => array('pvc', 'pvx'),
+ 'prolog' => array('pl'),
+ 'python' => array('py'),
+ 'qbasic' => array('bi'),
+ 'reg' => array('reg'),
+ 'ruby' => array('rb'),
+ 'sas' => array('sas'),
+ 'scala' => array('scala'),
+ 'scheme' => array('scm'),
+ 'scilab' => array('sci'),
+ 'smalltalk' => array('st'),
+ 'smarty' => array(),
+ 'tcl' => array('tcl'),
+ 'vb' => array('bas'),
+ 'vbnet' => array(),
+ 'visualfoxpro' => array(),
+ 'whitespace' => array('ws'),
+ 'xml' => array('xml', 'svg', 'xrc'),
+ 'z80' => array('z80', 'asm', 'inc')
+ );
+ }
+
+ foreach ($lookup as $lang => $extensions) {
+ if (in_array($extension, $extensions)) {
+ return $lang;
+ }
+ }
+ return '';
+ }
+
+ /**
+ * Given a file name, this method loads its contents in, and attempts
+ * to set the language automatically. An optional lookup table can be
+ * passed for looking up the language name. If not specified a default
+ * table is used
+ *
+ * The language table is in the form
+ * <pre>array(
+ * 'lang_name' => array('extension', 'extension', ...),
+ * 'lang_name' ...
+ * );</pre>
+ *
+ * @param string The filename to load the source from
+ * @param array A lookup array to use instead of the default one
+ * @todo Complete rethink of this and above method
+ * @since 1.0.5
+ */
+ function load_from_file($file_name, $lookup = array()) {
+ if (is_readable($file_name)) {
+ $this->set_source(file_get_contents($file_name));
+ $this->set_language($this->get_language_name_from_extension(substr(strrchr($file_name, '.'), 1), $lookup));
+ } else {
+ $this->error = GESHI_ERROR_FILE_NOT_READABLE;
+ }
+ }
+
+ /**
+ * Adds a keyword to a keyword group for highlighting
+ *
+ * @param int The key of the keyword group to add the keyword to
+ * @param string The word to add to the keyword group
+ * @since 1.0.0
+ */
+ function add_keyword($key, $word) {
+ if (!in_array($word, $this->language_data['KEYWORDS'][$key])) {
+ $this->language_data['KEYWORDS'][$key][] = $word;
+
+ //NEW in 1.0.8 don't recompile the whole optimized regexp, simply append it
+ if ($this->parse_cache_built) {
+ $subkey = count($this->language_data['CACHED_KEYWORD_LISTS'][$key]) - 1;
+ $this->language_data['CACHED_KEYWORD_LISTS'][$key][$subkey] .= '|' . preg_quote($word, '/');
+ }
+ }
+ }
+
+ /**
+ * Removes a keyword from a keyword group
+ *
+ * @param int The key of the keyword group to remove the keyword from
+ * @param string The word to remove from the keyword group
+ * @param bool Wether to automatically recompile the optimized regexp list or not.
+ * Note: if you set this to false and @see GeSHi->parse_code() was already called once,
+ * for the current language, you have to manually call @see GeSHi->optimize_keyword_group()
+ * or the removed keyword will stay in cache and still be highlighted! On the other hand
+ * it might be too expensive to recompile the regexp list for every removal if you want to
+ * remove a lot of keywords.
+ * @since 1.0.0
+ */
+ function remove_keyword($key, $word, $recompile = true) {
+ $key_to_remove = array_search($word, $this->language_data['KEYWORDS'][$key]);
+ if ($key_to_remove !== false) {
+ unset($this->language_data['KEYWORDS'][$key][$key_to_remove]);
+
+ //NEW in 1.0.8, optionally recompile keyword group
+ if ($recompile && $this->parse_cache_built) {
+ $this->optimize_keyword_group($key);
+ }
+ }
+ }
+
+ /**
+ * Creates a new keyword group
+ *
+ * @param int The key of the keyword group to create
+ * @param string The styles for the keyword group
+ * @param boolean Whether the keyword group is case sensitive ornot
+ * @param array The words to use for the keyword group
+ * @since 1.0.0
+ */
+ function add_keyword_group($key, $styles, $case_sensitive = true, $words = array()) {
+ $words = (array) $words;
+ if (empty($words)) {
+ // empty word lists mess up highlighting
+ return false;
+ }
+
+ //Add the new keyword group internally
+ $this->language_data['KEYWORDS'][$key] = $words;
+ $this->lexic_permissions['KEYWORDS'][$key] = true;
+ $this->language_data['CASE_SENSITIVE'][$key] = $case_sensitive;
+ $this->language_data['STYLES']['KEYWORDS'][$key] = $styles;
+
+ //NEW in 1.0.8, cache keyword regexp
+ if ($this->parse_cache_built) {
+ $this->optimize_keyword_group($key);
+ }
+ }
+
+ /**
+ * Removes a keyword group
+ *
+ * @param int The key of the keyword group to remove
+ * @since 1.0.0
+ */
+ function remove_keyword_group ($key) {
+ //Remove the keyword group internally
+ unset($this->language_data['KEYWORDS'][$key]);
+ unset($this->lexic_permissions['KEYWORDS'][$key]);
+ unset($this->language_data['CASE_SENSITIVE'][$key]);
+ unset($this->language_data['STYLES']['KEYWORDS'][$key]);
+
+ //NEW in 1.0.8
+ unset($this->language_data['CACHED_KEYWORD_LISTS'][$key]);
+ }
+
+ /**
+ * compile optimized regexp list for keyword group
+ *
+ * @param int The key of the keyword group to compile & optimize
+ * @since 1.0.8
+ */
+ function optimize_keyword_group($key) {
+ $this->language_data['CACHED_KEYWORD_LISTS'][$key] =
+ $this->optimize_regexp_list($this->language_data['KEYWORDS'][$key]);
+ $space_as_whitespace = false;
+ if(isset($this->language_data['PARSER_CONTROL'])) {
+ if(isset($this->language_data['PARSER_CONTROL']['KEYWORDS'])) {
+ if(isset($this->language_data['PARSER_CONTROL']['KEYWORDS']['SPACE_AS_WHITESPACE'])) {
+ $space_as_whitespace = $this->language_data['PARSER_CONTROL']['KEYWORDS']['SPACE_AS_WHITESPACE'];
+ }
+ if(isset($this->language_data['PARSER_CONTROL']['KEYWORDS'][$key]['SPACE_AS_WHITESPACE'])) {
+ if(isset($this->language_data['PARSER_CONTROL']['KEYWORDS'][$key]['SPACE_AS_WHITESPACE'])) {
+ $space_as_whitespace = $this->language_data['PARSER_CONTROL']['KEYWORDS'][$key]['SPACE_AS_WHITESPACE'];
+ }
+ }
+ }
+ }
+ if($space_as_whitespace) {
+ foreach($this->language_data['CACHED_KEYWORD_LISTS'][$key] as $rxk => $rxv) {
+ $this->language_data['CACHED_KEYWORD_LISTS'][$key][$rxk] =
+ str_replace(" ", "\\s+", $rxv);
+ }
+ }
+ }
+
+ /**
+ * Sets the content of the header block
+ *
+ * @param string The content of the header block
+ * @since 1.0.2
+ */
+ function set_header_content($content) {
+ $this->header_content = $content;
+ }
+
+ /**
+ * Sets the content of the footer block
+ *
+ * @param string The content of the footer block
+ * @since 1.0.2
+ */
+ function set_footer_content($content) {
+ $this->footer_content = $content;
+ }
+
+ /**
+ * Sets the style for the header content
+ *
+ * @param string The style for the header content
+ * @since 1.0.2
+ */
+ function set_header_content_style($style) {
+ $this->header_content_style = $style;
+ }
+
+ /**
+ * Sets the style for the footer content
+ *
+ * @param string The style for the footer content
+ * @since 1.0.2
+ */
+ function set_footer_content_style($style) {
+ $this->footer_content_style = $style;
+ }
+
+ /**
+ * Sets whether to force a surrounding block around
+ * the highlighted code or not
+ *
+ * @param boolean Tells whether to enable or disable this feature
+ * @since 1.0.7.20
+ */
+ function enable_inner_code_block($flag) {
+ $this->force_code_block = (bool)$flag;
+ }
+
+ /**
+ * Sets the base URL to be used for keywords
+ *
+ * @param int The key of the keyword group to set the URL for
+ * @param string The URL to set for the group. If {FNAME} is in
+ * the url somewhere, it is replaced by the keyword
+ * that the URL is being made for
+ * @since 1.0.2
+ */
+ function set_url_for_keyword_group($group, $url) {
+ $this->language_data['URLS'][$group] = $url;
+ }
+
+ /**
+ * Sets styles for links in code
+ *
+ * @param int A constant that specifies what state the style is being
+ * set for - e.g. :hover or :visited
+ * @param string The styles to use for that state
+ * @since 1.0.2
+ */
+ function set_link_styles($type, $styles) {
+ $this->link_styles[$type] = $styles;
+ }
+
+ /**
+ * Sets the target for links in code
+ *
+ * @param string The target for links in the code, e.g. _blank
+ * @since 1.0.3
+ */
+ function set_link_target($target) {
+ if (!$target) {
+ $this->link_target = '';
+ } else {
+ $this->link_target = ' target="' . $target . '"';
+ }
+ }
+
+ /**
+ * Sets styles for important parts of the code
+ *
+ * @param string The styles to use on important parts of the code
+ * @since 1.0.2
+ */
+ function set_important_styles($styles) {
+ $this->important_styles = $styles;
+ }
+
+ /**
+ * Sets whether context-important blocks are highlighted
+ *
+ * @param boolean Tells whether to enable or disable highlighting of important blocks
+ * @todo REMOVE THIS SHIZ FROM GESHI!
+ * @deprecated
+ * @since 1.0.2
+ */
+ function enable_important_blocks($flag) {
+ $this->enable_important_blocks = ( $flag ) ? true : false;
+ }
+
+ /**
+ * Whether CSS IDs should be added to each line
+ *
+ * @param boolean If true, IDs will be added to each line.
+ * @since 1.0.2
+ */
+ function enable_ids($flag = true) {
+ $this->add_ids = ($flag) ? true : false;
+ }
+
+ /**
+ * Specifies which lines to highlight extra
+ *
+ * The extra style parameter was added in 1.0.7.21.
+ *
+ * @param mixed An array of line numbers to highlight, or just a line
+ * number on its own.
+ * @param string A string specifying the style to use for this line.
+ * If null is specified, the default style is used.
+ * If false is specified, the line will be removed from
+ * special highlighting
+ * @since 1.0.2
+ * @todo Some data replication here that could be cut down on
+ */
+ function highlight_lines_extra($lines, $style = null) {
+ if (is_array($lines)) {
+ //Split up the job using single lines at a time
+ foreach ($lines as $line) {
+ $this->highlight_lines_extra($line, $style);
+ }
+ } else {
+ //Mark the line as being highlighted specially
+ $lines = intval($lines);
+ $this->highlight_extra_lines[$lines] = $lines;
+
+ //Decide on which style to use
+ if ($style === null) { //Check if we should use default style
+ unset($this->highlight_extra_lines_styles[$lines]);
+ } else if ($style === false) { //Check if to remove this line
+ unset($this->highlight_extra_lines[$lines]);
+ unset($this->highlight_extra_lines_styles[$lines]);
+ } else {
+ $this->highlight_extra_lines_styles[$lines] = $style;
+ }
+ }
+ }
+
+ /**
+ * Sets the style for extra-highlighted lines
+ *
+ * @param string The style for extra-highlighted lines
+ * @since 1.0.2
+ */
+ function set_highlight_lines_extra_style($styles) {
+ $this->highlight_extra_lines_style = $styles;
+ }
+
+ /**
+ * Sets the line-ending
+ *
+ * @param string The new line-ending
+ * @since 1.0.2
+ */
+ function set_line_ending($line_ending) {
+ $this->line_ending = (string)$line_ending;
+ }
+
+ /**
+ * Sets what number line numbers should start at. Should
+ * be a positive integer, and will be converted to one.
+ *
+ * <b>Warning:</b> Using this method will add the "start"
+ * attribute to the &lt;ol&gt; that is used for line numbering.
+ * This is <b>not</b> valid XHTML strict, so if that's what you
+ * care about then don't use this method. Firefox is getting
+ * support for the CSS method of doing this in 1.1 and Opera
+ * has support for the CSS method, but (of course) IE doesn't
+ * so it's not worth doing it the CSS way yet.
+ *
+ * @param int The number to start line numbers at
+ * @since 1.0.2
+ */
+ function start_line_numbers_at($number) {
+ $this->line_numbers_start = abs(intval($number));
+ }
+
+ /**
+ * Sets the encoding used for htmlspecialchars(), for international
+ * support.
+ *
+ * NOTE: This is not needed for now because htmlspecialchars() is not
+ * being used (it has a security hole in PHP4 that has not been patched).
+ * Maybe in a future version it may make a return for speed reasons, but
+ * I doubt it.
+ *
+ * @param string The encoding to use for the source
+ * @since 1.0.3
+ */
+ function set_encoding($encoding) {
+ if ($encoding) {
+ $this->encoding = strtolower($encoding);
+ }
+ }
+
+ /**
+ * Turns linking of keywords on or off.
+ *
+ * @param boolean If true, links will be added to keywords
+ * @since 1.0.2
+ */
+ function enable_keyword_links($enable = true) {
+ $this->keyword_links = (bool) $enable;
+ }
+
+ /**
+ * Setup caches needed for styling. This is automatically called in
+ * parse_code() and get_stylesheet() when appropriate. This function helps
+ * stylesheet generators as they rely on some style information being
+ * preprocessed
+ *
+ * @since 1.0.8
+ * @access private
+ */
+ function build_style_cache() {
+ //Build the style cache needed to highlight numbers appropriate
+ if($this->lexic_permissions['NUMBERS']) {
+ //First check what way highlighting information for numbers are given
+ if(!isset($this->language_data['NUMBERS'])) {
+ $this->language_data['NUMBERS'] = 0;
+ }
+
+ if(is_array($this->language_data['NUMBERS'])) {
+ $this->language_data['NUMBERS_CACHE'] = $this->language_data['NUMBERS'];
+ } else {
+ $this->language_data['NUMBERS_CACHE'] = array();
+ if(!$this->language_data['NUMBERS']) {
+ $this->language_data['NUMBERS'] =
+ GESHI_NUMBER_INT_BASIC |
+ GESHI_NUMBER_FLT_NONSCI;
+ }
+
+ for($i = 0, $j = $this->language_data['NUMBERS']; $j > 0; ++$i, $j>>=1) {
+ //Rearrange style indices if required ...
+ if(isset($this->language_data['STYLES']['NUMBERS'][1<<$i])) {
+ $this->language_data['STYLES']['NUMBERS'][$i] =
+ $this->language_data['STYLES']['NUMBERS'][1<<$i];
+ unset($this->language_data['STYLES']['NUMBERS'][1<<$i]);
+ }
+
+ //Check if this bit is set for highlighting
+ if($j&1) {
+ //So this bit is set ...
+ //Check if it belongs to group 0 or the actual stylegroup
+ if(isset($this->language_data['STYLES']['NUMBERS'][$i])) {
+ $this->language_data['NUMBERS_CACHE'][$i] = 1 << $i;
+ } else {
+ if(!isset($this->language_data['NUMBERS_CACHE'][0])) {
+ $this->language_data['NUMBERS_CACHE'][0] = 0;
+ }
+ $this->language_data['NUMBERS_CACHE'][0] |= 1 << $i;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Setup caches needed for parsing. This is automatically called in parse_code() when appropriate.
+ * This function makes stylesheet generators much faster as they do not need these caches.
+ *
+ * @since 1.0.8
+ * @access private
+ */
+ function build_parse_cache() {
+ // cache symbol regexp
+ //As this is a costy operation, we avoid doing it for multiple groups ...
+ //Instead we perform it for all symbols at once.
+ //
+ //For this to work, we need to reorganize the data arrays.
+ if ($this->lexic_permissions['SYMBOLS'] && !empty($this->language_data['SYMBOLS'])) {
+ $this->language_data['MULTIPLE_SYMBOL_GROUPS'] = count($this->language_data['STYLES']['SYMBOLS']) > 1;
+
+ $this->language_data['SYMBOL_DATA'] = array();
+ $symbol_preg_multi = array(); // multi char symbols
+ $symbol_preg_single = array(); // single char symbols
+ foreach ($this->language_data['SYMBOLS'] as $key => $symbols) {
+ if (is_array($symbols)) {
+ foreach ($symbols as $sym) {
+ $sym = $this->hsc($sym);
+ if (!isset($this->language_data['SYMBOL_DATA'][$sym])) {
+ $this->language_data['SYMBOL_DATA'][$sym] = $key;
+ if (isset($sym[1])) { // multiple chars
+ $symbol_preg_multi[] = preg_quote($sym, '/');
+ } else { // single char
+ if ($sym == '-') {
+ // don't trigger range out of order error
+ $symbol_preg_single[] = '\-';
+ } else {
+ $symbol_preg_single[] = preg_quote($sym, '/');
+ }
+ }
+ }
+ }
+ } else {
+ $symbols = $this->hsc($symbols);
+ if (!isset($this->language_data['SYMBOL_DATA'][$symbols])) {
+ $this->language_data['SYMBOL_DATA'][$symbols] = 0;
+ if (isset($symbols[1])) { // multiple chars
+ $symbol_preg_multi[] = preg_quote($symbols, '/');
+ } else if ($symbols == '-') {
+ // don't trigger range out of order error
+ $symbol_preg_single[] = '\-';
+ } else { // single char
+ $symbol_preg_single[] = preg_quote($symbols, '/');
+ }
+ }
+ }
+ }
+
+ //Now we have an array with each possible symbol as the key and the style as the actual data.
+ //This way we can set the correct style just the moment we highlight ...
+ //
+ //Now we need to rewrite our array to get a search string that
+ $symbol_preg = array();
+ if (!empty($symbol_preg_multi)) {
+ rsort($symbol_preg_multi);
+ $symbol_preg[] = implode('|', $symbol_preg_multi);
+ }
+ if (!empty($symbol_preg_single)) {
+ rsort($symbol_preg_single);
+ $symbol_preg[] = '[' . implode('', $symbol_preg_single) . ']';
+ }
+ $this->language_data['SYMBOL_SEARCH'] = implode("|", $symbol_preg);
+ }
+
+ // cache optimized regexp for keyword matching
+ // remove old cache
+ $this->language_data['CACHED_KEYWORD_LISTS'] = array();
+ foreach (array_keys($this->language_data['KEYWORDS']) as $key) {
+ if (!isset($this->lexic_permissions['KEYWORDS'][$key]) ||
+ $this->lexic_permissions['KEYWORDS'][$key]) {
+ $this->optimize_keyword_group($key);
+ }
+ }
+
+ // brackets
+ if ($this->lexic_permissions['BRACKETS']) {
+ $this->language_data['CACHE_BRACKET_MATCH'] = array('[', ']', '(', ')', '{', '}');
+ if (!$this->use_classes && isset($this->language_data['STYLES']['BRACKETS'][0])) {
+ $this->language_data['CACHE_BRACKET_REPLACE'] = array(
+ '<| style="' . $this->language_data['STYLES']['BRACKETS'][0] . '">&#91;|>',
+ '<| style="' . $this->language_data['STYLES']['BRACKETS'][0] . '">&#93;|>',
+ '<| style="' . $this->language_data['STYLES']['BRACKETS'][0] . '">&#40;|>',
+ '<| style="' . $this->language_data['STYLES']['BRACKETS'][0] . '">&#41;|>',
+ '<| style="' . $this->language_data['STYLES']['BRACKETS'][0] . '">&#123;|>',
+ '<| style="' . $this->language_data['STYLES']['BRACKETS'][0] . '">&#125;|>',
+ );
+ }
+ else {
+ $this->language_data['CACHE_BRACKET_REPLACE'] = array(
+ '<| class="br0">&#91;|>',
+ '<| class="br0">&#93;|>',
+ '<| class="br0">&#40;|>',
+ '<| class="br0">&#41;|>',
+ '<| class="br0">&#123;|>',
+ '<| class="br0">&#125;|>',
+ );
+ }
+ }
+
+ //Build the parse cache needed to highlight numbers appropriate
+ if($this->lexic_permissions['NUMBERS']) {
+ //Check if the style rearrangements have been processed ...
+ //This also does some preprocessing to check which style groups are useable ...
+ if(!isset($this->language_data['NUMBERS_CACHE'])) {
+ $this->build_style_cache();
+ }
+
+ //Number format specification
+ //All this formats are matched case-insensitively!
+ static $numbers_format = array(
+ GESHI_NUMBER_INT_BASIC =>
+ '(?<![0-9a-z_\.%])(?<![\d\.]e[+\-])([1-9]\d*?|0)(?![0-9a-z]|\.(?!(?m:$)))',
+ GESHI_NUMBER_INT_CSTYLE =>
+ '(?<![0-9a-z_\.%])(?<![\d\.]e[+\-])([1-9]\d*?|0)l(?![0-9a-z\.])',
+ GESHI_NUMBER_BIN_SUFFIX =>
+ '(?<![0-9a-z_\.])(?<![\d\.]e[+\-])[01]+?b(?![0-9a-z\.])',
+ GESHI_NUMBER_BIN_PREFIX_PERCENT =>
+ '(?<![0-9a-z_\.%])(?<![\d\.]e[+\-])%[01]+?(?![0-9a-z\.])',
+ GESHI_NUMBER_BIN_PREFIX_0B =>
+ '(?<![0-9a-z_\.%])(?<![\d\.]e[+\-])0b[01]+?(?![0-9a-z\.])',
+ GESHI_NUMBER_OCT_PREFIX =>
+ '(?<![0-9a-z_\.])(?<![\d\.]e[+\-])0[0-7]+?(?![0-9a-z\.])',
+ GESHI_NUMBER_OCT_SUFFIX =>
+ '(?<![0-9a-z_\.])(?<![\d\.]e[+\-])[0-7]+?o(?![0-9a-z\.])',
+ GESHI_NUMBER_HEX_PREFIX =>
+ '(?<![0-9a-z_\.])(?<![\d\.]e[+\-])0x[0-9a-f]+?(?![0-9a-z\.])',
+ GESHI_NUMBER_HEX_SUFFIX =>
+ '(?<![0-9a-z_\.])(?<![\d\.]e[+\-])\d[0-9a-f]*?h(?![0-9a-z\.])',
+ GESHI_NUMBER_FLT_NONSCI =>
+ '(?<![0-9a-z_\.])(?<![\d\.]e[+\-])\d+?\.\d+?(?![0-9a-z\.])',
+ GESHI_NUMBER_FLT_NONSCI_F =>
+ '(?<![0-9a-z_\.])(?<![\d\.]e[+\-])(?:\d+?(?:\.\d*?)?|\.\d+?)f(?![0-9a-z\.])',
+ GESHI_NUMBER_FLT_SCI_SHORT =>
+ '(?<![0-9a-z_\.])(?<![\d\.]e[+\-])\.\d+?(?:e[+\-]?\d+?)?(?![0-9a-z\.])',
+ GESHI_NUMBER_FLT_SCI_ZERO =>
+ '(?<![0-9a-z_\.])(?<![\d\.]e[+\-])(?:\d+?(?:\.\d*?)?|\.\d+?)(?:e[+\-]?\d+?)?(?![0-9a-z\.])'
+ );
+
+ //At this step we have an associative array with flag groups for a
+ //specific style or an string denoting a regexp given its index.
+ $this->language_data['NUMBERS_RXCACHE'] = array();
+ foreach($this->language_data['NUMBERS_CACHE'] as $key => $rxdata) {
+ if(is_string($rxdata)) {
+ $regexp = $rxdata;
+ } else {
+ //This is a bitfield of number flags to highlight:
+ //Build an array, implode them together and make this the actual RX
+ $rxuse = array();
+ for($i = 1; $i <= $rxdata; $i<<=1) {
+ if($rxdata & $i) {
+ $rxuse[] = $numbers_format[$i];
+ }
+ }
+ $regexp = implode("|", $rxuse);
+ }
+
+ $this->language_data['NUMBERS_RXCACHE'][$key] =
+ "/(?<!<\|\/)(?<!<\|!REG3XP)(?<!<\|\/NUM!)(?<!\d\/>)($regexp)(?!\|>)(?![^\"\|\>\<]+<)/i";
+ }
+ }
+
+ $this->parse_cache_built = true;
+ }
+
+ /**
+ * Returns the code in $this->source, highlighted and surrounded by the
+ * nessecary HTML.
+ *
+ * This should only be called ONCE, cos it's SLOW! If you want to highlight
+ * the same source multiple times, you're better off doing a whole lot of
+ * str_replaces to replace the &lt;span&gt;s
+ *
+ * @since 1.0.0
+ */
+ function parse_code () {
+ // Start the timer
+ $start_time = microtime();
+
+ // Firstly, if there is an error, we won't highlight
+ if ($this->error) {
+ //Escape the source for output
+ $result = $this->hsc($this->source);
+
+ //This fix is related to SF#1923020, but has to be applied regardless of
+ //actually highlighting symbols.
+ $result = str_replace(array('<SEMI>', '<PIPE>'), array(';', '|'), $result);
+
+ // Timing is irrelevant
+ $this->set_time($start_time, $start_time);
+ $this->finalise($result);
+ return $result;
+ }
+
+ // make sure the parse cache is up2date
+ if (!$this->parse_cache_built) {
+ $this->build_parse_cache();
+ }
+
+ // Replace all newlines to a common form.
+ $code = str_replace("\r\n", "\n", $this->source);
+ $code = str_replace("\r", "\n", $code);
+
+ // Add spaces for regular expression matching and line numbers
+// $code = "\n" . $code . "\n";
+
+ // Initialise various stuff
+ $length = strlen($code);
+ $COMMENT_MATCHED = false;
+ $stuff_to_parse = '';
+ $endresult = '';
+
+ // "Important" selections are handled like multiline comments
+ // @todo GET RID OF THIS SHIZ
+ if ($this->enable_important_blocks) {
+ $this->language_data['COMMENT_MULTI'][GESHI_START_IMPORTANT] = GESHI_END_IMPORTANT;
+ }
+
+ if ($this->strict_mode) {
+ // Break the source into bits. Each bit will be a portion of the code
+ // within script delimiters - for example, HTML between < and >
+ $k = 0;
+ $parts = array();
+ $matches = array();
+ $next_match_pointer = null;
+ // we use a copy to unset delimiters on demand (when they are not found)
+ $delim_copy = $this->language_data['SCRIPT_DELIMITERS'];
+ $i = 0;
+ while ($i < $length) {
+ $next_match_pos = $length + 1; // never true
+ foreach ($delim_copy as $dk => $delimiters) {
+ if(is_array($delimiters)) {
+ foreach ($delimiters as $open => $close) {
+ // make sure the cache is setup properly
+ if (!isset($matches[$dk][$open])) {
+ $matches[$dk][$open] = array(
+ 'next_match' => -1,
+ 'dk' => $dk,
+
+ 'open' => $open, // needed for grouping of adjacent code blocks (see below)
+ 'open_strlen' => strlen($open),
+
+ 'close' => $close,
+ 'close_strlen' => strlen($close),
+ );
+ }
+ // Get the next little bit for this opening string
+ if ($matches[$dk][$open]['next_match'] < $i) {
+ // only find the next pos if it was not already cached
+ $open_pos = strpos($code, $open, $i);
+ if ($open_pos === false) {
+ // no match for this delimiter ever
+ unset($delim_copy[$dk][$open]);
+ continue;
+ }
+ $matches[$dk][$open]['next_match'] = $open_pos;
+ }
+ if ($matches[$dk][$open]['next_match'] < $next_match_pos) {
+ //So we got a new match, update the close_pos
+ $matches[$dk][$open]['close_pos'] =
+ strpos($code, $close, $matches[$dk][$open]['next_match']+1);
+
+ $next_match_pointer =& $matches[$dk][$open];
+ $next_match_pos = $matches[$dk][$open]['next_match'];
+ }
+ }
+ } else {
+ //So we should match an RegExp as Strict Block ...
+ /**
+ * The value in $delimiters is expected to be an RegExp
+ * containing exactly 2 matching groups:
+ * - Group 1 is the opener
+ * - Group 2 is the closer
+ */
+ if(!GESHI_PHP_PRE_433 && //Needs proper rewrite to work with PHP >=4.3.0; 4.3.3 is guaranteed to work.
+ preg_match($delimiters, $code, $matches_rx, PREG_OFFSET_CAPTURE, $i)) {
+ //We got a match ...
+ if(isset($matches_rx['start']) && isset($matches_rx['end']))
+ {
+ $matches[$dk] = array(
+ 'next_match' => $matches_rx['start'][1],
+ 'dk' => $dk,
+
+ 'close_strlen' => strlen($matches_rx['end'][0]),
+ 'close_pos' => $matches_rx['end'][1],
+ );
+ } else {
+ $matches[$dk] = array(
+ 'next_match' => $matches_rx[1][1],
+ 'dk' => $dk,
+
+ 'close_strlen' => strlen($matches_rx[2][0]),
+ 'close_pos' => $matches_rx[2][1],
+ );
+ }
+ } else {
+ // no match for this delimiter ever
+ unset($delim_copy[$dk]);
+ continue;
+ }
+
+ if ($matches[$dk]['next_match'] <= $next_match_pos) {
+ $next_match_pointer =& $matches[$dk];
+ $next_match_pos = $matches[$dk]['next_match'];
+ }
+ }
+ }
+
+ // non-highlightable text
+ $parts[$k] = array(
+ 1 => substr($code, $i, $next_match_pos - $i)
+ );
+ ++$k;
+
+ if ($next_match_pos > $length) {
+ // out of bounds means no next match was found
+ break;
+ }
+
+ // highlightable code
+ $parts[$k][0] = $next_match_pointer['dk'];
+
+ //Only combine for non-rx script blocks
+ if(is_array($delim_copy[$next_match_pointer['dk']])) {
+ // group adjacent script blocks, e.g. <foobar><asdf> should be one block, not three!
+ $i = $next_match_pos + $next_match_pointer['open_strlen'];
+ while (true) {
+ $close_pos = strpos($code, $next_match_pointer['close'], $i);
+ if ($close_pos == false) {
+ break;
+ }
+ $i = $close_pos + $next_match_pointer['close_strlen'];
+ if ($i == $length) {
+ break;
+ }
+ if ($code[$i] == $next_match_pointer['open'][0] && ($next_match_pointer['open_strlen'] == 1 ||
+ substr($code, $i, $next_match_pointer['open_strlen']) == $next_match_pointer['open'])) {
+ // merge adjacent but make sure we don't merge things like <tag><!-- comment -->
+ foreach ($matches as $submatches) {
+ foreach ($submatches as $match) {
+ if ($match['next_match'] == $i) {
+ // a different block already matches here!
+ break 3;
+ }
+ }
+ }
+ } else {
+ break;
+ }
+ }
+ } else {
+ $close_pos = $next_match_pointer['close_pos'] + $next_match_pointer['close_strlen'];
+ $i = $close_pos;
+ }
+
+ if ($close_pos === false) {
+ // no closing delimiter found!
+ $parts[$k][1] = substr($code, $next_match_pos);
+ ++$k;
+ break;
+ } else {
+ $parts[$k][1] = substr($code, $next_match_pos, $i - $next_match_pos);
+ ++$k;
+ }
+ }
+ unset($delim_copy, $next_match_pointer, $next_match_pos, $matches);
+ $num_parts = $k;
+
+ if ($num_parts == 1 && $this->strict_mode == GESHI_MAYBE) {
+ // when we have only one part, we don't have anything to highlight at all.
+ // if we have a "maybe" strict language, this should be handled as highlightable code
+ $parts = array(
+ 0 => array(
+ 0 => '',
+ 1 => ''
+ ),
+ 1 => array(
+ 0 => null,
+ 1 => $parts[0][1]
+ )
+ );
+ $num_parts = 2;
+ }
+
+ } else {
+ // Not strict mode - simply dump the source into
+ // the array at index 1 (the first highlightable block)
+ $parts = array(
+ 0 => array(
+ 0 => '',
+ 1 => ''
+ ),
+ 1 => array(
+ 0 => null,
+ 1 => $code
+ )
+ );
+ $num_parts = 2;
+ }
+
+ //Unset variables we won't need any longer
+ unset($code);
+
+ //Preload some repeatedly used values regarding hardquotes ...
+ $hq = isset($this->language_data['HARDQUOTE']) ? $this->language_data['HARDQUOTE'][0] : false;
+ $hq_strlen = strlen($hq);
+
+ //Preload if line numbers are to be generated afterwards
+ //Added a check if line breaks should be forced even without line numbers, fixes SF#1727398
+ $check_linenumbers = $this->line_numbers != GESHI_NO_LINE_NUMBERS ||
+ !empty($this->highlight_extra_lines) || !$this->allow_multiline_span;
+
+ //preload the escape char for faster checking ...
+ $escaped_escape_char = $this->hsc($this->language_data['ESCAPE_CHAR']);
+
+ // this is used for single-line comments
+ $sc_disallowed_before = "";
+ $sc_disallowed_after = "";
+
+ if (isset($this->language_data['PARSER_CONTROL'])) {
+ if (isset($this->language_data['PARSER_CONTROL']['COMMENTS'])) {
+ if (isset($this->language_data['PARSER_CONTROL']['COMMENTS']['DISALLOWED_BEFORE'])) {
+ $sc_disallowed_before = $this->language_data['PARSER_CONTROL']['COMMENTS']['DISALLOWED_BEFORE'];
+ }
+ if (isset($this->language_data['PARSER_CONTROL']['COMMENTS']['DISALLOWED_AFTER'])) {
+ $sc_disallowed_after = $this->language_data['PARSER_CONTROL']['COMMENTS']['DISALLOWED_AFTER'];
+ }
+ }
+ }
+
+ //Fix for SF#1932083: Multichar Quotemarks unsupported
+ $is_string_starter = array();
+ if ($this->lexic_permissions['STRINGS']) {
+ foreach ($this->language_data['QUOTEMARKS'] as $quotemark) {
+ if (!isset($is_string_starter[$quotemark[0]])) {
+ $is_string_starter[$quotemark[0]] = (string)$quotemark;
+ } else if (is_string($is_string_starter[$quotemark[0]])) {
+ $is_string_starter[$quotemark[0]] = array(
+ $is_string_starter[$quotemark[0]],
+ $quotemark);
+ } else {
+ $is_string_starter[$quotemark[0]][] = $quotemark;
+ }
+ }
+ }
+
+ // Now we go through each part. We know that even-indexed parts are
+ // code that shouldn't be highlighted, and odd-indexed parts should
+ // be highlighted
+ for ($key = 0; $key < $num_parts; ++$key) {
+ $STRICTATTRS = '';
+
+ // If this block should be highlighted...
+ if (!($key & 1)) {
+ // Else not a block to highlight
+ $endresult .= $this->hsc($parts[$key][1]);
+ unset($parts[$key]);
+ continue;
+ }
+
+ $result = '';
+ $part = $parts[$key][1];
+
+ $highlight_part = true;
+ if ($this->strict_mode && !is_null($parts[$key][0])) {
+ // get the class key for this block of code
+ $script_key = $parts[$key][0];
+ $highlight_part = $this->language_data['HIGHLIGHT_STRICT_BLOCK'][$script_key];
+ if ($this->language_data['STYLES']['SCRIPT'][$script_key] != '' &&
+ $this->lexic_permissions['SCRIPT']) {
+ // Add a span element around the source to
+ // highlight the overall source block
+ if (!$this->use_classes &&
+ $this->language_data['STYLES']['SCRIPT'][$script_key] != '') {
+ $attributes = ' style="' . $this->language_data['STYLES']['SCRIPT'][$script_key] . '"';
+ } else {
+ $attributes = ' class="sc' . $script_key . '"';
+ }
+ $result .= "<span$attributes>";
+ $STRICTATTRS = $attributes;
+ }
+ }
+
+ if ($highlight_part) {
+ // Now, highlight the code in this block. This code
+ // is really the engine of GeSHi (along with the method
+ // parse_non_string_part).
+
+ // cache comment regexps incrementally
+ $next_comment_regexp_key = '';
+ $next_comment_regexp_pos = -1;
+ $next_comment_multi_pos = -1;
+ $next_comment_single_pos = -1;
+ $comment_regexp_cache_per_key = array();
+ $comment_multi_cache_per_key = array();
+ $comment_single_cache_per_key = array();
+ $next_open_comment_multi = '';
+ $next_comment_single_key = '';
+ $escape_regexp_cache_per_key = array();
+ $next_escape_regexp_key = '';
+ $next_escape_regexp_pos = -1;
+
+ $length = strlen($part);
+ for ($i = 0; $i < $length; ++$i) {
+ // Get the next char
+ $char = $part[$i];
+ $char_len = 1;
+
+ // update regexp comment cache if needed
+ if (isset($this->language_data['COMMENT_REGEXP']) && $next_comment_regexp_pos < $i) {
+ $next_comment_regexp_pos = $length;
+ foreach ($this->language_data['COMMENT_REGEXP'] as $comment_key => $regexp) {
+ $match_i = false;
+ if (isset($comment_regexp_cache_per_key[$comment_key]) &&
+ ($comment_regexp_cache_per_key[$comment_key]['pos'] >= $i ||
+ $comment_regexp_cache_per_key[$comment_key]['pos'] === false)) {
+ // we have already matched something
+ if ($comment_regexp_cache_per_key[$comment_key]['pos'] === false) {
+ // this comment is never matched
+ continue;
+ }
+ $match_i = $comment_regexp_cache_per_key[$comment_key]['pos'];
+ } else if (
+ //This is to allow use of the offset parameter in preg_match and stay as compatible with older PHP versions as possible
+ (GESHI_PHP_PRE_433 && preg_match($regexp, substr($part, $i), $match, PREG_OFFSET_CAPTURE)) ||
+ (!GESHI_PHP_PRE_433 && preg_match($regexp, $part, $match, PREG_OFFSET_CAPTURE, $i))
+ ) {
+ $match_i = $match[0][1];
+ if (GESHI_PHP_PRE_433) {
+ $match_i += $i;
+ }
+
+ $comment_regexp_cache_per_key[$comment_key] = array(
+ 'key' => $comment_key,
+ 'length' => strlen($match[0][0]),
+ 'pos' => $match_i
+ );
+ } else {
+ $comment_regexp_cache_per_key[$comment_key]['pos'] = false;
+ continue;
+ }
+
+ if ($match_i !== false && $match_i < $next_comment_regexp_pos) {
+ $next_comment_regexp_pos = $match_i;
+ $next_comment_regexp_key = $comment_key;
+ if ($match_i === $i) {
+ break;
+ }
+ }
+ }
+ }
+
+ $string_started = false;
+
+ if (isset($is_string_starter[$char])) {
+ // Possibly the start of a new string ...
+
+ //Check which starter it was ...
+ //Fix for SF#1932083: Multichar Quotemarks unsupported
+ if (is_array($is_string_starter[$char])) {
+ $char_new = '';
+ foreach ($is_string_starter[$char] as $testchar) {
+ if ($testchar === substr($part, $i, strlen($testchar)) &&
+ strlen($testchar) > strlen($char_new)) {
+ $char_new = $testchar;
+ $string_started = true;
+ }
+ }
+ if ($string_started) {
+ $char = $char_new;
+ }
+ } else {
+ $testchar = $is_string_starter[$char];
+ if ($testchar === substr($part, $i, strlen($testchar))) {
+ $char = $testchar;
+ $string_started = true;
+ }
+ }
+ $char_len = strlen($char);
+ }
+
+ if ($string_started && ($i != $next_comment_regexp_pos)) {
+ // Hand out the correct style information for this string
+ $string_key = array_search($char, $this->language_data['QUOTEMARKS']);
+ if (!isset($this->language_data['STYLES']['STRINGS'][$string_key]) ||
+ !isset($this->language_data['STYLES']['ESCAPE_CHAR'][$string_key])) {
+ $string_key = 0;
+ }
+
+ // parse the stuff before this
+ $result .= $this->parse_non_string_part($stuff_to_parse);
+ $stuff_to_parse = '';
+
+ if (!$this->use_classes) {
+ $string_attributes = ' style="' . $this->language_data['STYLES']['STRINGS'][$string_key] . '"';
+ } else {
+ $string_attributes = ' class="st'.$string_key.'"';
+ }
+
+ // now handle the string
+ $string = "<span$string_attributes>" . GeSHi::hsc($char);
+ $start = $i + $char_len;
+ $string_open = true;
+
+ if(empty($this->language_data['ESCAPE_REGEXP'])) {
+ $next_escape_regexp_pos = $length;
+ }
+
+ do {
+ //Get the regular ending pos ...
+ $close_pos = strpos($part, $char, $start);
+ if(false === $close_pos) {
+ $close_pos = $length;
+ }
+
+ if($this->lexic_permissions['ESCAPE_CHAR']) {
+ // update escape regexp cache if needed
+ if (isset($this->language_data['ESCAPE_REGEXP']) && $next_escape_regexp_pos < $start) {
+ $next_escape_regexp_pos = $length;
+ foreach ($this->language_data['ESCAPE_REGEXP'] as $escape_key => $regexp) {
+ $match_i = false;
+ if (isset($escape_regexp_cache_per_key[$escape_key]) &&
+ ($escape_regexp_cache_per_key[$escape_key]['pos'] >= $start ||
+ $escape_regexp_cache_per_key[$escape_key]['pos'] === false)) {
+ // we have already matched something
+ if ($escape_regexp_cache_per_key[$escape_key]['pos'] === false) {
+ // this comment is never matched
+ continue;
+ }
+ $match_i = $escape_regexp_cache_per_key[$escape_key]['pos'];
+ } else if (
+ //This is to allow use of the offset parameter in preg_match and stay as compatible with older PHP versions as possible
+ (GESHI_PHP_PRE_433 && preg_match($regexp, substr($part, $start), $match, PREG_OFFSET_CAPTURE)) ||
+ (!GESHI_PHP_PRE_433 && preg_match($regexp, $part, $match, PREG_OFFSET_CAPTURE, $start))
+ ) {
+ $match_i = $match[0][1];
+ if (GESHI_PHP_PRE_433) {
+ $match_i += $start;
+ }
+
+ $escape_regexp_cache_per_key[$escape_key] = array(
+ 'key' => $escape_key,
+ 'length' => strlen($match[0][0]),
+ 'pos' => $match_i
+ );
+ } else {
+ $escape_regexp_cache_per_key[$escape_key]['pos'] = false;
+ continue;
+ }
+
+ if ($match_i !== false && $match_i < $next_escape_regexp_pos) {
+ $next_escape_regexp_pos = $match_i;
+ $next_escape_regexp_key = $escape_key;
+ if ($match_i === $start) {
+ break;
+ }
+ }
+ }
+ }
+
+ //Find the next simple escape position
+ if('' != $this->language_data['ESCAPE_CHAR']) {
+ $simple_escape = strpos($part, $this->language_data['ESCAPE_CHAR'], $start);
+ if(false === $simple_escape) {
+ $simple_escape = $length;
+ }
+ } else {
+ $simple_escape = $length;
+ }
+ } else {
+ $next_escape_regexp_pos = $length;
+ $simple_escape = $length;
+ }
+
+ if($simple_escape < $next_escape_regexp_pos &&
+ $simple_escape < $length &&
+ $simple_escape < $close_pos) {
+ //The nexxt escape sequence is a simple one ...
+ $es_pos = $simple_escape;
+
+ //Add the stuff not in the string yet ...
+ $string .= $this->hsc(substr($part, $start, $es_pos - $start));
+
+ //Get the style for this escaped char ...
+ if (!$this->use_classes) {
+ $escape_char_attributes = ' style="' . $this->language_data['STYLES']['ESCAPE_CHAR'][0] . '"';
+ } else {
+ $escape_char_attributes = ' class="es0"';
+ }
+
+ //Add the style for the escape char ...
+ $string .= "<span$escape_char_attributes>" .
+ GeSHi::hsc($this->language_data['ESCAPE_CHAR']);
+
+ //Get the byte AFTER the ESCAPE_CHAR we just found
+ $es_char = $part[$es_pos + 1];
+ if ($es_char == "\n") {
+ // don't put a newline around newlines
+ $string .= "</span>\n";
+ $start = $es_pos + 2;
+ } else if (ord($es_char) >= 128) {
+ //This is an non-ASCII char (UTF8 or single byte)
+ //This code tries to work around SF#2037598 ...
+ if(function_exists('mb_substr')) {
+ $es_char_m = mb_substr(substr($part, $es_pos+1, 16), 0, 1, $this->encoding);
+ $string .= $es_char_m . '</span>';
+ } else if (!GESHI_PHP_PRE_433 && 'utf-8' == $this->encoding) {
+ if(preg_match("/[\xC2-\xDF][\x80-\xBF]".
+ "|\xE0[\xA0-\xBF][\x80-\xBF]".
+ "|[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}".
+ "|\xED[\x80-\x9F][\x80-\xBF]".
+ "|\xF0[\x90-\xBF][\x80-\xBF]{2}".
+ "|[\xF1-\xF3][\x80-\xBF]{3}".
+ "|\xF4[\x80-\x8F][\x80-\xBF]{2}/s",
+ $part, $es_char_m, null, $es_pos + 1)) {
+ $es_char_m = $es_char_m[0];
+ } else {
+ $es_char_m = $es_char;
+ }
+ $string .= $this->hsc($es_char_m) . '</span>';
+ } else {
+ $es_char_m = $this->hsc($es_char);
+ }
+ $start = $es_pos + strlen($es_char_m) + 1;
+ } else {
+ $string .= $this->hsc($es_char) . '</span>';
+ $start = $es_pos + 2;
+ }
+ } else if ($next_escape_regexp_pos < $length &&
+ $next_escape_regexp_pos < $close_pos) {
+ $es_pos = $next_escape_regexp_pos;
+ //Add the stuff not in the string yet ...
+ $string .= $this->hsc(substr($part, $start, $es_pos - $start));
+
+ //Get the key and length of this match ...
+ $escape = $escape_regexp_cache_per_key[$next_escape_regexp_key];
+ $escape_str = substr($part, $es_pos, $escape['length']);
+ $escape_key = $escape['key'];
+
+ //Get the style for this escaped char ...
+ if (!$this->use_classes) {
+ $escape_char_attributes = ' style="' . $this->language_data['STYLES']['ESCAPE_CHAR'][$escape_key] . '"';
+ } else {
+ $escape_char_attributes = ' class="es' . $escape_key . '"';
+ }
+
+ //Add the style for the escape char ...
+ $string .= "<span$escape_char_attributes>" .
+ $this->hsc($escape_str) . '</span>';
+
+ $start = $es_pos + $escape['length'];
+ } else {
+ //Copy the remainder of the string ...
+ $string .= $this->hsc(substr($part, $start, $close_pos - $start + $char_len)) . '</span>';
+ $start = $close_pos + $char_len;
+ $string_open = false;
+ }
+ } while($string_open);
+
+ if ($check_linenumbers) {
+ // Are line numbers used? If, we should end the string before
+ // the newline and begin it again (so when <li>s are put in the source
+ // remains XHTML compliant)
+ // note to self: This opens up possibility of config files specifying
+ // that languages can/cannot have multiline strings???
+ $string = str_replace("\n", "</span>\n<span$string_attributes>", $string);
+ }
+
+ $result .= $string;
+ $string = '';
+ $i = $start - 1;
+ continue;
+ } else if ($this->lexic_permissions['STRINGS'] && $hq && $hq[0] == $char &&
+ substr($part, $i, $hq_strlen) == $hq && ($i != $next_comment_regexp_pos)) {
+ // The start of a hard quoted string
+ if (!$this->use_classes) {
+ $string_attributes = ' style="' . $this->language_data['STYLES']['STRINGS']['HARD'] . '"';
+ $escape_char_attributes = ' style="' . $this->language_data['STYLES']['ESCAPE_CHAR']['HARD'] . '"';
+ } else {
+ $string_attributes = ' class="st_h"';
+ $escape_char_attributes = ' class="es_h"';
+ }
+ // parse the stuff before this
+ $result .= $this->parse_non_string_part($stuff_to_parse);
+ $stuff_to_parse = '';
+
+ // now handle the string
+ $string = '';
+
+ // look for closing quote
+ $start = $i + $hq_strlen;
+ while ($close_pos = strpos($part, $this->language_data['HARDQUOTE'][1], $start)) {
+ $start = $close_pos + 1;
+ if ($this->lexic_permissions['ESCAPE_CHAR'] && $part[$close_pos - 1] == $this->language_data['HARDCHAR']) {
+ // make sure this quote is not escaped
+ foreach ($this->language_data['HARDESCAPE'] as $hardescape) {
+ if (substr($part, $close_pos - 1, strlen($hardescape)) == $hardescape) {
+ // check wether this quote is escaped or if it is something like '\\'
+ $escape_char_pos = $close_pos - 1;
+ while ($escape_char_pos > 0
+ && $part[$escape_char_pos - 1] == $this->language_data['HARDCHAR']) {
+ --$escape_char_pos;
+ }
+ if (($close_pos - $escape_char_pos) & 1) {
+ // uneven number of escape chars => this quote is escaped
+ continue 2;
+ }
+ }
+ }
+ }
+
+ // found closing quote
+ break;
+ }
+
+ //Found the closing delimiter?
+ if (!$close_pos) {
+ // span till the end of this $part when no closing delimiter is found
+ $close_pos = $length;
+ }
+
+ //Get the actual string
+ $string = substr($part, $i, $close_pos - $i + 1);
+ $i = $close_pos;
+
+ // handle escape chars and encode html chars
+ // (special because when we have escape chars within our string they may not be escaped)
+ if ($this->lexic_permissions['ESCAPE_CHAR'] && $this->language_data['ESCAPE_CHAR']) {
+ $start = 0;
+ $new_string = '';
+ while ($es_pos = strpos($string, $this->language_data['ESCAPE_CHAR'], $start)) {
+ // hmtl escape stuff before
+ $new_string .= $this->hsc(substr($string, $start, $es_pos - $start));
+ // check if this is a hard escape
+ foreach ($this->language_data['HARDESCAPE'] as $hardescape) {
+ if (substr($string, $es_pos, strlen($hardescape)) == $hardescape) {
+ // indeed, this is a hardescape
+ $new_string .= "<span$escape_char_attributes>" .
+ $this->hsc($hardescape) . '</span>';
+ $start = $es_pos + strlen($hardescape);
+ continue 2;
+ }
+ }
+ // not a hard escape, but a normal escape
+ // they come in pairs of two
+ $c = 0;
+ while (isset($string[$es_pos + $c]) && isset($string[$es_pos + $c + 1])
+ && $string[$es_pos + $c] == $this->language_data['ESCAPE_CHAR']
+ && $string[$es_pos + $c + 1] == $this->language_data['ESCAPE_CHAR']) {
+ $c += 2;
+ }
+ if ($c) {
+ $new_string .= "<span$escape_char_attributes>" .
+ str_repeat($escaped_escape_char, $c) .
+ '</span>';
+ $start = $es_pos + $c;
+ } else {
+ // this is just a single lonely escape char...
+ $new_string .= $escaped_escape_char;
+ $start = $es_pos + 1;
+ }
+ }
+ $string = $new_string . $this->hsc(substr($string, $start));
+ } else {
+ $string = $this->hsc($string);
+ }
+
+ if ($check_linenumbers) {
+ // Are line numbers used? If, we should end the string before
+ // the newline and begin it again (so when <li>s are put in the source
+ // remains XHTML compliant)
+ // note to self: This opens up possibility of config files specifying
+ // that languages can/cannot have multiline strings???
+ $string = str_replace("\n", "</span>\n<span$string_attributes>", $string);
+ }
+
+ $result .= "<span$string_attributes>" . $string . '</span>';
+ $string = '';
+ continue;
+ } else {
+ //Have a look for regexp comments
+ if ($i == $next_comment_regexp_pos) {
+ $COMMENT_MATCHED = true;
+ $comment = $comment_regexp_cache_per_key[$next_comment_regexp_key];
+ $test_str = $this->hsc(substr($part, $i, $comment['length']));
+
+ //@todo If remove important do remove here
+ if ($this->lexic_permissions['COMMENTS']['MULTI']) {
+ if (!$this->use_classes) {
+ $attributes = ' style="' . $this->language_data['STYLES']['COMMENTS'][$comment['key']] . '"';
+ } else {
+ $attributes = ' class="co' . $comment['key'] . '"';
+ }
+
+ $test_str = "<span$attributes>" . $test_str . "</span>";
+
+ // Short-cut through all the multiline code
+ if ($check_linenumbers) {
+ // strreplace to put close span and open span around multiline newlines
+ $test_str = str_replace(
+ "\n", "</span>\n<span$attributes>",
+ str_replace("\n ", "\n&nbsp;", $test_str)
+ );
+ }
+ }
+
+ $i += $comment['length'] - 1;
+
+ // parse the rest
+ $result .= $this->parse_non_string_part($stuff_to_parse);
+ $stuff_to_parse = '';
+ }
+
+ // If we haven't matched a regexp comment, try multi-line comments
+ if (!$COMMENT_MATCHED) {
+ // Is this a multiline comment?
+ if (!empty($this->language_data['COMMENT_MULTI']) && $next_comment_multi_pos < $i) {
+ $next_comment_multi_pos = $length;
+ foreach ($this->language_data['COMMENT_MULTI'] as $open => $close) {
+ $match_i = false;
+ if (isset($comment_multi_cache_per_key[$open]) &&
+ ($comment_multi_cache_per_key[$open] >= $i ||
+ $comment_multi_cache_per_key[$open] === false)) {
+ // we have already matched something
+ if ($comment_multi_cache_per_key[$open] === false) {
+ // this comment is never matched
+ continue;
+ }
+ $match_i = $comment_multi_cache_per_key[$open];
+ } else if (($match_i = stripos($part, $open, $i)) !== false) {
+ $comment_multi_cache_per_key[$open] = $match_i;
+ } else {
+ $comment_multi_cache_per_key[$open] = false;
+ continue;
+ }
+ if ($match_i !== false && $match_i < $next_comment_multi_pos) {
+ $next_comment_multi_pos = $match_i;
+ $next_open_comment_multi = $open;
+ if ($match_i === $i) {
+ break;
+ }
+ }
+ }
+ }
+ if ($i == $next_comment_multi_pos) {
+ $open = $next_open_comment_multi;
+ $close = $this->language_data['COMMENT_MULTI'][$open];
+ $open_strlen = strlen($open);
+ $close_strlen = strlen($close);
+ $COMMENT_MATCHED = true;
+ $test_str_match = $open;
+ //@todo If remove important do remove here
+ if ($this->lexic_permissions['COMMENTS']['MULTI'] ||
+ $open == GESHI_START_IMPORTANT) {
+ if ($open != GESHI_START_IMPORTANT) {
+ if (!$this->use_classes) {
+ $attributes = ' style="' . $this->language_data['STYLES']['COMMENTS']['MULTI'] . '"';
+ } else {
+ $attributes = ' class="coMULTI"';
+ }
+ $test_str = "<span$attributes>" . $this->hsc($open);
+ } else {
+ if (!$this->use_classes) {
+ $attributes = ' style="' . $this->important_styles . '"';
+ } else {
+ $attributes = ' class="imp"';
+ }
+
+ // We don't include the start of the comment if it's an
+ // "important" part
+ $test_str = "<span$attributes>";
+ }
+ } else {
+ $test_str = $this->hsc($open);
+ }
+
+ $close_pos = strpos( $part, $close, $i + $open_strlen );
+
+ if ($close_pos === false) {
+ $close_pos = $length;
+ }
+
+ // Short-cut through all the multiline code
+ $rest_of_comment = $this->hsc(substr($part, $i + $open_strlen, $close_pos - $i - $open_strlen + $close_strlen));
+ if (($this->lexic_permissions['COMMENTS']['MULTI'] ||
+ $test_str_match == GESHI_START_IMPORTANT) &&
+ $check_linenumbers) {
+
+ // strreplace to put close span and open span around multiline newlines
+ $test_str .= str_replace(
+ "\n", "</span>\n<span$attributes>",
+ str_replace("\n ", "\n&nbsp;", $rest_of_comment)
+ );
+ } else {
+ $test_str .= $rest_of_comment;
+ }
+
+ if ($this->lexic_permissions['COMMENTS']['MULTI'] ||
+ $test_str_match == GESHI_START_IMPORTANT) {
+ $test_str .= '</span>';
+ }
+
+ $i = $close_pos + $close_strlen - 1;
+
+ // parse the rest
+ $result .= $this->parse_non_string_part($stuff_to_parse);
+ $stuff_to_parse = '';
+ }
+ }
+
+ // If we haven't matched a multiline comment, try single-line comments
+ if (!$COMMENT_MATCHED) {
+ // cache potential single line comment occurances
+ if (!empty($this->language_data['COMMENT_SINGLE']) && $next_comment_single_pos < $i) {
+ $next_comment_single_pos = $length;
+ foreach ($this->language_data['COMMENT_SINGLE'] as $comment_key => $comment_mark) {
+ $match_i = false;
+ if (isset($comment_single_cache_per_key[$comment_key]) &&
+ ($comment_single_cache_per_key[$comment_key] >= $i ||
+ $comment_single_cache_per_key[$comment_key] === false)) {
+ // we have already matched something
+ if ($comment_single_cache_per_key[$comment_key] === false) {
+ // this comment is never matched
+ continue;
+ }
+ $match_i = $comment_single_cache_per_key[$comment_key];
+ } else if (
+ // case sensitive comments
+ ($this->language_data['CASE_SENSITIVE'][GESHI_COMMENTS] &&
+ ($match_i = stripos($part, $comment_mark, $i)) !== false) ||
+ // non case sensitive
+ (!$this->language_data['CASE_SENSITIVE'][GESHI_COMMENTS] &&
+ (($match_i = strpos($part, $comment_mark, $i)) !== false))) {
+ $comment_single_cache_per_key[$comment_key] = $match_i;
+ } else {
+ $comment_single_cache_per_key[$comment_key] = false;
+ continue;
+ }
+ if ($match_i !== false && $match_i < $next_comment_single_pos) {
+ $next_comment_single_pos = $match_i;
+ $next_comment_single_key = $comment_key;
+ if ($match_i === $i) {
+ break;
+ }
+ }
+ }
+ }
+ if ($next_comment_single_pos == $i) {
+ $comment_key = $next_comment_single_key;
+ $comment_mark = $this->language_data['COMMENT_SINGLE'][$comment_key];
+ $com_len = strlen($comment_mark);
+
+ // This check will find special variables like $# in bash
+ // or compiler directives of Delphi beginning {$
+ if ((empty($sc_disallowed_before) || ($i == 0) ||
+ (false === strpos($sc_disallowed_before, $part[$i-1]))) &&
+ (empty($sc_disallowed_after) || ($length <= $i + $com_len) ||
+ (false === strpos($sc_disallowed_after, $part[$i + $com_len]))))
+ {
+ // this is a valid comment
+ $COMMENT_MATCHED = true;
+ if ($this->lexic_permissions['COMMENTS'][$comment_key]) {
+ if (!$this->use_classes) {
+ $attributes = ' style="' . $this->language_data['STYLES']['COMMENTS'][$comment_key] . '"';
+ } else {
+ $attributes = ' class="co' . $comment_key . '"';
+ }
+ $test_str = "<span$attributes>" . $this->hsc($this->change_case($comment_mark));
+ } else {
+ $test_str = $this->hsc($comment_mark);
+ }
+
+ //Check if this comment is the last in the source
+ $close_pos = strpos($part, "\n", $i);
+ $oops = false;
+ if ($close_pos === false) {
+ $close_pos = $length;
+ $oops = true;
+ }
+ $test_str .= $this->hsc(substr($part, $i + $com_len, $close_pos - $i - $com_len));
+ if ($this->lexic_permissions['COMMENTS'][$comment_key]) {
+ $test_str .= "</span>";
+ }
+
+ // Take into account that the comment might be the last in the source
+ if (!$oops) {
+ $test_str .= "\n";
+ }
+
+ $i = $close_pos;
+
+ // parse the rest
+ $result .= $this->parse_non_string_part($stuff_to_parse);
+ $stuff_to_parse = '';
+ }
+ }
+ }
+ }
+
+ // Where are we adding this char?
+ if (!$COMMENT_MATCHED) {
+ $stuff_to_parse .= $char;
+ } else {
+ $result .= $test_str;
+ unset($test_str);
+ $COMMENT_MATCHED = false;
+ }
+ }
+ // Parse the last bit
+ $result .= $this->parse_non_string_part($stuff_to_parse);
+ $stuff_to_parse = '';
+ } else {
+ $result .= $this->hsc($part);
+ }
+ // Close the <span> that surrounds the block
+ if ($STRICTATTRS != '') {
+ $result = str_replace("\n", "</span>\n<span$STRICTATTRS>", $result);
+ $result .= '</span>';
+ }
+
+ $endresult .= $result;
+ unset($part, $parts[$key], $result);
+ }
+
+ //This fix is related to SF#1923020, but has to be applied regardless of
+ //actually highlighting symbols.
+ /** NOTE: memorypeak #3 */
+ $endresult = str_replace(array('<SEMI>', '<PIPE>'), array(';', '|'), $endresult);
+
+// // Parse the last stuff (redundant?)
+// $result .= $this->parse_non_string_part($stuff_to_parse);
+
+ // Lop off the very first and last spaces
+// $result = substr($result, 1, -1);
+
+ // We're finished: stop timing
+ $this->set_time($start_time, microtime());
+
+ $this->finalise($endresult);
+ return $endresult;
+ }
+
+ /**
+ * Swaps out spaces and tabs for HTML indentation. Not needed if
+ * the code is in a pre block...
+ *
+ * @param string The source to indent (reference!)
+ * @since 1.0.0
+ * @access private
+ */
+ function indent(&$result) {
+ /// Replace tabs with the correct number of spaces
+ if (false !== strpos($result, "\t")) {
+ $lines = explode("\n", $result);
+ $result = null;//Save memory while we process the lines individually
+ $tab_width = $this->get_real_tab_width();
+ $tab_string = '&nbsp;' . str_repeat(' ', $tab_width);
+
+ for ($key = 0, $n = count($lines); $key < $n; $key++) {
+ $line = $lines[$key];
+ if (false === strpos($line, "\t")) {
+ continue;
+ }
+
+ $pos = 0;
+ $length = strlen($line);
+ $lines[$key] = ''; // reduce memory
+
+ $IN_TAG = false;
+ for ($i = 0; $i < $length; ++$i) {
+ $char = $line[$i];
+ // Simple engine to work out whether we're in a tag.
+ // If we are we modify $pos. This is so we ignore HTML
+ // in the line and only workout the tab replacement
+ // via the actual content of the string
+ // This test could be improved to include strings in the
+ // html so that < or > would be allowed in user's styles
+ // (e.g. quotes: '<' '>'; or similar)
+ if ($IN_TAG) {
+ if ('>' == $char) {
+ $IN_TAG = false;
+ }
+ $lines[$key] .= $char;
+ } else if ('<' == $char) {
+ $IN_TAG = true;
+ $lines[$key] .= '<';
+ } else if ('&' == $char) {
+ $substr = substr($line, $i + 3, 5);
+ $posi = strpos($substr, ';');
+ if (false === $posi) {
+ ++$pos;
+ } else {
+ $pos -= $posi+2;
+ }
+ $lines[$key] .= $char;
+ } else if ("\t" == $char) {
+ $str = '';
+ // OPTIMISE - move $strs out. Make an array:
+ // $tabs = array(
+ // 1 => '&nbsp;',
+ // 2 => '&nbsp; ',
+ // 3 => '&nbsp; &nbsp;' etc etc
+ // to use instead of building a string every time
+ $tab_end_width = $tab_width - ($pos % $tab_width); //Moved out of the look as it doesn't change within the loop
+ if (($pos & 1) || 1 == $tab_end_width) {
+ $str .= substr($tab_string, 6, $tab_end_width);
+ } else {
+ $str .= substr($tab_string, 0, $tab_end_width+5);
+ }
+ $lines[$key] .= $str;
+ $pos += $tab_end_width;
+
+ if (false === strpos($line, "\t", $i + 1)) {
+ $lines[$key] .= substr($line, $i + 1);
+ break;
+ }
+ } else if (0 == $pos && ' ' == $char) {
+ $lines[$key] .= '&nbsp;';
+ ++$pos;
+ } else {
+ $lines[$key] .= $char;
+ ++$pos;
+ }
+ }
+ }
+ $result = implode("\n", $lines);
+ unset($lines);//We don't need the lines separated beyond this --- free them!
+ }
+ // Other whitespace
+ // BenBE: Fix to reduce the number of replacements to be done
+ $result = preg_replace('/^ /m', '&nbsp;', $result);
+ $result = str_replace(' ', ' &nbsp;', $result);
+
+ if ($this->line_numbers == GESHI_NO_LINE_NUMBERS) {
+ if ($this->line_ending === null) {
+ $result = nl2br($result);
+ } else {
+ $result = str_replace("\n", $this->line_ending, $result);
+ }
+ }
+ }
+
+ /**
+ * Changes the case of a keyword for those languages where a change is asked for
+ *
+ * @param string The keyword to change the case of
+ * @return string The keyword with its case changed
+ * @since 1.0.0
+ * @access private
+ */
+ function change_case($instr) {
+ switch ($this->language_data['CASE_KEYWORDS']) {
+ case GESHI_CAPS_UPPER:
+ return strtoupper($instr);
+ case GESHI_CAPS_LOWER:
+ return strtolower($instr);
+ default:
+ return $instr;
+ }
+ }
+
+ /**
+ * Handles replacements of keywords to include markup and links if requested
+ *
+ * @param string The keyword to add the Markup to
+ * @return The HTML for the match found
+ * @since 1.0.8
+ * @access private
+ *
+ * @todo Get rid of ender in keyword links
+ */
+ function handle_keyword_replace($match) {
+ $k = $this->_kw_replace_group;
+ $keyword = $match[0];
+
+ $before = '';
+ $after = '';
+
+ if ($this->keyword_links) {
+ // Keyword links have been ebabled
+
+ if (isset($this->language_data['URLS'][$k]) &&
+ $this->language_data['URLS'][$k] != '') {
+ // There is a base group for this keyword
+
+ // Old system: strtolower
+ //$keyword = ( $this->language_data['CASE_SENSITIVE'][$group] ) ? $keyword : strtolower($keyword);
+ // New system: get keyword from language file to get correct case
+ if (!$this->language_data['CASE_SENSITIVE'][$k] &&
+ strpos($this->language_data['URLS'][$k], '{FNAME}') !== false) {
+ foreach ($this->language_data['KEYWORDS'][$k] as $word) {
+ if (strcasecmp($word, $keyword) == 0) {
+ break;
+ }
+ }
+ } else {
+ $word = $keyword;
+ }
+
+ $before = '<|UR1|"' .
+ str_replace(
+ array(
+ '{FNAME}',
+ '{FNAMEL}',
+ '{FNAMEU}',
+ '.'),
+ array(
+ str_replace('+', '%20', urlencode($this->hsc($word))),
+ str_replace('+', '%20', urlencode($this->hsc(strtolower($word)))),
+ str_replace('+', '%20', urlencode($this->hsc(strtoupper($word)))),
+ '<DOT>'),
+ $this->language_data['URLS'][$k]
+ ) . '">';
+ $after = '</a>';
+ }
+ }
+
+ return $before . '<|/'. $k .'/>' . $this->change_case($keyword) . '|>' . $after;
+ }
+
+ /**
+ * handles regular expressions highlighting-definitions with callback functions
+ *
+ * @note this is a callback, don't use it directly
+ *
+ * @param array the matches array
+ * @return The highlighted string
+ * @since 1.0.8
+ * @access private
+ */
+ function handle_regexps_callback($matches) {
+ // before: "' style=\"' . call_user_func(\"$func\", '\\1') . '\"\\1|>'",
+ return ' style="' . call_user_func($this->language_data['STYLES']['REGEXPS'][$this->_rx_key], $matches[1]) . '"'. $matches[1] . '|>';
+ }
+
+ /**
+ * handles newlines in REGEXPS matches. Set the _hmr_* vars before calling this
+ *
+ * @note this is a callback, don't use it directly
+ *
+ * @param array the matches array
+ * @return string
+ * @since 1.0.8
+ * @access private
+ */
+ function handle_multiline_regexps($matches) {
+ $before = $this->_hmr_before;
+ $after = $this->_hmr_after;
+ if ($this->_hmr_replace) {
+ $replace = $this->_hmr_replace;
+ $search = array();
+
+ foreach (array_keys($matches) as $k) {
+ $search[] = '\\' . $k;
+ }
+
+ $before = str_replace($search, $matches, $before);
+ $after = str_replace($search, $matches, $after);
+ $replace = str_replace($search, $matches, $replace);
+ } else {
+ $replace = $matches[0];
+ }
+ return $before
+ . '<|!REG3XP' . $this->_hmr_key .'!>'
+ . str_replace("\n", "|>\n<|!REG3XP" . $this->_hmr_key . '!>', $replace)
+ . '|>'
+ . $after;
+ }
+
+ /**
+ * Takes a string that has no strings or comments in it, and highlights
+ * stuff like keywords, numbers and methods.
+ *
+ * @param string The string to parse for keyword, numbers etc.
+ * @since 1.0.0
+ * @access private
+ * @todo BUGGY! Why? Why not build string and return?
+ */
+ function parse_non_string_part($stuff_to_parse) {
+ $stuff_to_parse = ' ' . $this->hsc($stuff_to_parse);
+
+ // Highlight keywords
+ $disallowed_before = "(?<![a-zA-Z0-9\$_\|\#;>|^&";
+ $disallowed_after = "(?![a-zA-Z0-9_\|%\\-&;";
+ if ($this->lexic_permissions['STRINGS']) {
+ $quotemarks = preg_quote(implode($this->language_data['QUOTEMARKS']), '/');
+ $disallowed_before .= $quotemarks;
+ $disallowed_after .= $quotemarks;
+ }
+ $disallowed_before .= "])";
+ $disallowed_after .= "])";
+
+ $parser_control_pergroup = false;
+ if (isset($this->language_data['PARSER_CONTROL'])) {
+ if (isset($this->language_data['PARSER_CONTROL']['KEYWORDS'])) {
+ $x = 0; // check wether per-keyword-group parser_control is enabled
+ if (isset($this->language_data['PARSER_CONTROL']['KEYWORDS']['DISALLOWED_BEFORE'])) {
+ $disallowed_before = $this->language_data['PARSER_CONTROL']['KEYWORDS']['DISALLOWED_BEFORE'];
+ ++$x;
+ }
+ if (isset($this->language_data['PARSER_CONTROL']['KEYWORDS']['DISALLOWED_AFTER'])) {
+ $disallowed_after = $this->language_data['PARSER_CONTROL']['KEYWORDS']['DISALLOWED_AFTER'];
+ ++$x;
+ }
+ $parser_control_pergroup = (count($this->language_data['PARSER_CONTROL']['KEYWORDS']) - $x) > 0;
+ }
+ }
+
+ foreach (array_keys($this->language_data['KEYWORDS']) as $k) {
+ if (!isset($this->lexic_permissions['KEYWORDS'][$k]) ||
+ $this->lexic_permissions['KEYWORDS'][$k]) {
+
+ $case_sensitive = $this->language_data['CASE_SENSITIVE'][$k];
+ $modifiers = $case_sensitive ? '' : 'i';
+
+ // NEW in 1.0.8 - per-keyword-group parser control
+ $disallowed_before_local = $disallowed_before;
+ $disallowed_after_local = $disallowed_after;
+ if ($parser_control_pergroup && isset($this->language_data['PARSER_CONTROL']['KEYWORDS'][$k])) {
+ if (isset($this->language_data['PARSER_CONTROL']['KEYWORDS'][$k]['DISALLOWED_BEFORE'])) {
+ $disallowed_before_local =
+ $this->language_data['PARSER_CONTROL']['KEYWORDS'][$k]['DISALLOWED_BEFORE'];
+ }
+
+ if (isset($this->language_data['PARSER_CONTROL']['KEYWORDS'][$k]['DISALLOWED_AFTER'])) {
+ $disallowed_after_local =
+ $this->language_data['PARSER_CONTROL']['KEYWORDS'][$k]['DISALLOWED_AFTER'];
+ }
+ }
+
+ $this->_kw_replace_group = $k;
+
+ //NEW in 1.0.8, the cached regexp list
+ // since we don't want PHP / PCRE to crash due to too large patterns we split them into smaller chunks
+ for ($set = 0, $set_length = count($this->language_data['CACHED_KEYWORD_LISTS'][$k]); $set < $set_length; ++$set) {
+ $keywordset =& $this->language_data['CACHED_KEYWORD_LISTS'][$k][$set];
+ // Might make a more unique string for putting the number in soon
+ // Basically, we don't put the styles in yet because then the styles themselves will
+ // get highlighted if the language has a CSS keyword in it (like CSS, for example ;))
+ $stuff_to_parse = preg_replace_callback(
+ "/$disallowed_before_local({$keywordset})(?!\<DOT\>(?:htm|php))$disallowed_after_local/$modifiers",
+ array($this, 'handle_keyword_replace'),
+ $stuff_to_parse
+ );
+ }
+ }
+ }
+
+ // Regular expressions
+ foreach ($this->language_data['REGEXPS'] as $key => $regexp) {
+ if ($this->lexic_permissions['REGEXPS'][$key]) {
+ if (is_array($regexp)) {
+ if ($this->line_numbers != GESHI_NO_LINE_NUMBERS) {
+ // produce valid HTML when we match multiple lines
+ $this->_hmr_replace = $regexp[GESHI_REPLACE];
+ $this->_hmr_before = $regexp[GESHI_BEFORE];
+ $this->_hmr_key = $key;
+ $this->_hmr_after = $regexp[GESHI_AFTER];
+ $stuff_to_parse = preg_replace_callback(
+ "/" . $regexp[GESHI_SEARCH] . "/{$regexp[GESHI_MODIFIERS]}",
+ array($this, 'handle_multiline_regexps'),
+ $stuff_to_parse);
+ $this->_hmr_replace = false;
+ $this->_hmr_before = '';
+ $this->_hmr_after = '';
+ } else {
+ $stuff_to_parse = preg_replace(
+ '/' . $regexp[GESHI_SEARCH] . '/' . $regexp[GESHI_MODIFIERS],
+ $regexp[GESHI_BEFORE] . '<|!REG3XP'. $key .'!>' . $regexp[GESHI_REPLACE] . '|>' . $regexp[GESHI_AFTER],
+ $stuff_to_parse);
+ }
+ } else {
+ if ($this->line_numbers != GESHI_NO_LINE_NUMBERS) {
+ // produce valid HTML when we match multiple lines
+ $this->_hmr_key = $key;
+ $stuff_to_parse = preg_replace_callback( "/(" . $regexp . ")/",
+ array($this, 'handle_multiline_regexps'), $stuff_to_parse);
+ $this->_hmr_key = '';
+ } else {
+ $stuff_to_parse = preg_replace( "/(" . $regexp . ")/", "<|!REG3XP$key!>\\1|>", $stuff_to_parse);
+ }
+ }
+ }
+ }
+
+ // Highlight numbers. As of 1.0.8 we support different types of numbers
+ $numbers_found = false;
+ if ($this->lexic_permissions['NUMBERS'] && preg_match('#\d#', $stuff_to_parse )) {
+ $numbers_found = true;
+
+ //For each of the formats ...
+ foreach($this->language_data['NUMBERS_RXCACHE'] as $id => $regexp) {
+ //Check if it should be highlighted ...
+ $stuff_to_parse = preg_replace($regexp, "<|/NUM!$id/>\\1|>", $stuff_to_parse);
+ }
+ }
+
+ //
+ // Now that's all done, replace /[number]/ with the correct styles
+ //
+ foreach (array_keys($this->language_data['KEYWORDS']) as $k) {
+ if (!$this->use_classes) {
+ $attributes = ' style="' .
+ (isset($this->language_data['STYLES']['KEYWORDS'][$k]) ?
+ $this->language_data['STYLES']['KEYWORDS'][$k] : "") . '"';
+ } else {
+ $attributes = ' class="kw' . $k . '"';
+ }
+ $stuff_to_parse = str_replace("<|/$k/>", "<|$attributes>", $stuff_to_parse);
+ }
+
+ if ($numbers_found) {
+ // Put number styles in
+ foreach($this->language_data['NUMBERS_RXCACHE'] as $id => $regexp) {
+ //Commented out for now, as this needs some review ...
+ // if ($numbers_permissions & $id) {
+ //Get the appropriate style ...
+ //Checking for unset styles is done by the style cache builder ...
+ if (!$this->use_classes) {
+ $attributes = ' style="' . $this->language_data['STYLES']['NUMBERS'][$id] . '"';
+ } else {
+ $attributes = ' class="nu'.$id.'"';
+ }
+
+ //Set in the correct styles ...
+ $stuff_to_parse = str_replace("/NUM!$id/", $attributes, $stuff_to_parse);
+ // }
+ }
+ }
+
+ // Highlight methods and fields in objects
+ if ($this->lexic_permissions['METHODS'] && $this->language_data['OOLANG']) {
+ $oolang_spaces = "[\s]*";
+ $oolang_before = "";
+ $oolang_after = "[a-zA-Z][a-zA-Z0-9_]*";
+ if (isset($this->language_data['PARSER_CONTROL'])) {
+ if (isset($this->language_data['PARSER_CONTROL']['OOLANG'])) {
+ if (isset($this->language_data['PARSER_CONTROL']['OOLANG']['MATCH_BEFORE'])) {
+ $oolang_before = $this->language_data['PARSER_CONTROL']['OOLANG']['MATCH_BEFORE'];
+ }
+ if (isset($this->language_data['PARSER_CONTROL']['OOLANG']['MATCH_AFTER'])) {
+ $oolang_after = $this->language_data['PARSER_CONTROL']['OOLANG']['MATCH_AFTER'];
+ }
+ if (isset($this->language_data['PARSER_CONTROL']['OOLANG']['MATCH_SPACES'])) {
+ $oolang_spaces = $this->language_data['PARSER_CONTROL']['OOLANG']['MATCH_SPACES'];
+ }
+ }
+ }
+
+ foreach ($this->language_data['OBJECT_SPLITTERS'] as $key => $splitter) {
+ if (false !== strpos($stuff_to_parse, $splitter)) {
+ if (!$this->use_classes) {
+ $attributes = ' style="' . $this->language_data['STYLES']['METHODS'][$key] . '"';
+ } else {
+ $attributes = ' class="me' . $key . '"';
+ }
+ $stuff_to_parse = preg_replace("/($oolang_before)(" . preg_quote($this->language_data['OBJECT_SPLITTERS'][$key], '/') . ")($oolang_spaces)($oolang_after)/", "\\1\\2\\3<|$attributes>\\4|>", $stuff_to_parse);
+ }
+ }
+ }
+
+ //
+ // Highlight brackets. Yes, I've tried adding a semi-colon to this list.
+ // You try it, and see what happens ;)
+ // TODO: Fix lexic permissions not converting entities if shouldn't
+ // be highlighting regardless
+ //
+ if ($this->lexic_permissions['BRACKETS']) {
+ $stuff_to_parse = str_replace( $this->language_data['CACHE_BRACKET_MATCH'],
+ $this->language_data['CACHE_BRACKET_REPLACE'], $stuff_to_parse );
+ }
+
+
+ //FIX for symbol highlighting ...
+ if ($this->lexic_permissions['SYMBOLS'] && !empty($this->language_data['SYMBOLS'])) {
+ //Get all matches and throw away those witin a block that is already highlighted... (i.e. matched by a regexp)
+ $n_symbols = preg_match_all("/<\|(?:<DOT>|[^>])+>(?:(?!\|>).*?)\|>|<\/a>|(?:" . $this->language_data['SYMBOL_SEARCH'] . ")+/", $stuff_to_parse, $pot_symbols, PREG_OFFSET_CAPTURE | PREG_SET_ORDER);
+ $global_offset = 0;
+ for ($s_id = 0; $s_id < $n_symbols; ++$s_id) {
+ $symbol_match = $pot_symbols[$s_id][0][0];
+ if (strpos($symbol_match, '<') !== false || strpos($symbol_match, '>') !== false) {
+ // already highlighted blocks _must_ include either < or >
+ // so if this conditional applies, we have to skip this match
+ // BenBE: UNLESS the block contains <SEMI> or <PIPE>
+ if(strpos($symbol_match, '<SEMI>') === false &&
+ strpos($symbol_match, '<PIPE>') === false) {
+ continue;
+ }
+ }
+
+ // if we reach this point, we have a valid match which needs to be highlighted
+
+ $symbol_length = strlen($symbol_match);
+ $symbol_offset = $pot_symbols[$s_id][0][1];
+ unset($pot_symbols[$s_id]);
+ $symbol_end = $symbol_length + $symbol_offset;
+ $symbol_hl = "";
+
+ // if we have multiple styles, we have to handle them properly
+ if ($this->language_data['MULTIPLE_SYMBOL_GROUPS']) {
+ $old_sym = -1;
+ // Split the current stuff to replace into its atomic symbols ...
+ preg_match_all("/" . $this->language_data['SYMBOL_SEARCH'] . "/", $symbol_match, $sym_match_syms, PREG_PATTERN_ORDER);
+ foreach ($sym_match_syms[0] as $sym_ms) {
+ //Check if consequtive symbols belong to the same group to save output ...
+ if (isset($this->language_data['SYMBOL_DATA'][$sym_ms])
+ && ($this->language_data['SYMBOL_DATA'][$sym_ms] != $old_sym)) {
+ if (-1 != $old_sym) {
+ $symbol_hl .= "|>";
+ }
+ $old_sym = $this->language_data['SYMBOL_DATA'][$sym_ms];
+ if (!$this->use_classes) {
+ $symbol_hl .= '<| style="' . $this->language_data['STYLES']['SYMBOLS'][$old_sym] . '">';
+ } else {
+ $symbol_hl .= '<| class="sy' . $old_sym . '">';
+ }
+ }
+ $symbol_hl .= $sym_ms;
+ }
+ unset($sym_match_syms);
+
+ //Close remaining tags and insert the replacement at the right position ...
+ //Take caution if symbol_hl is empty to avoid doubled closing spans.
+ if (-1 != $old_sym) {
+ $symbol_hl .= "|>";
+ }
+ } else {
+ if (!$this->use_classes) {
+ $symbol_hl = '<| style="' . $this->language_data['STYLES']['SYMBOLS'][0] . '">';
+ } else {
+ $symbol_hl = '<| class="sy0">';
+ }
+ $symbol_hl .= $symbol_match . '|>';
+ }
+
+ $stuff_to_parse = substr_replace($stuff_to_parse, $symbol_hl, $symbol_offset + $global_offset, $symbol_length);
+
+ // since we replace old text with something of different size,
+ // we'll have to keep track of the differences
+ $global_offset += strlen($symbol_hl) - $symbol_length;
+ }
+ }
+ //FIX for symbol highlighting ...
+
+ // Add class/style for regexps
+ foreach (array_keys($this->language_data['REGEXPS']) as $key) {
+ if ($this->lexic_permissions['REGEXPS'][$key]) {
+ if (is_callable($this->language_data['STYLES']['REGEXPS'][$key])) {
+ $this->_rx_key = $key;
+ $stuff_to_parse = preg_replace_callback("/!REG3XP$key!(.*)\|>/U",
+ array($this, 'handle_regexps_callback'),
+ $stuff_to_parse);
+ } else {
+ if (!$this->use_classes) {
+ $attributes = ' style="' . $this->language_data['STYLES']['REGEXPS'][$key] . '"';
+ } else {
+ if (is_array($this->language_data['REGEXPS'][$key]) &&
+ array_key_exists(GESHI_CLASS, $this->language_data['REGEXPS'][$key])) {
+ $attributes = ' class="' .
+ $this->language_data['REGEXPS'][$key][GESHI_CLASS] . '"';
+ } else {
+ $attributes = ' class="re' . $key . '"';
+ }
+ }
+ $stuff_to_parse = str_replace("!REG3XP$key!", "$attributes", $stuff_to_parse);
+ }
+ }
+ }
+
+ // Replace <DOT> with . for urls
+ $stuff_to_parse = str_replace('<DOT>', '.', $stuff_to_parse);
+ // Replace <|UR1| with <a href= for urls also
+ if (isset($this->link_styles[GESHI_LINK])) {
+ if ($this->use_classes) {
+ $stuff_to_parse = str_replace('<|UR1|', '<a' . $this->link_target . ' href=', $stuff_to_parse);
+ } else {
+ $stuff_to_parse = str_replace('<|UR1|', '<a' . $this->link_target . ' style="' . $this->link_styles[GESHI_LINK] . '" href=', $stuff_to_parse);
+ }
+ } else {
+ $stuff_to_parse = str_replace('<|UR1|', '<a' . $this->link_target . ' href=', $stuff_to_parse);
+ }
+
+ //
+ // NOW we add the span thingy ;)
+ //
+
+ $stuff_to_parse = str_replace('<|', '<span', $stuff_to_parse);
+ $stuff_to_parse = str_replace ( '|>', '</span>', $stuff_to_parse );
+ return substr($stuff_to_parse, 1);
+ }
+
+ /**
+ * Sets the time taken to parse the code
+ *
+ * @param microtime The time when parsing started
+ * @param microtime The time when parsing ended
+ * @since 1.0.2
+ * @access private
+ */
+ function set_time($start_time, $end_time) {
+ $start = explode(' ', $start_time);
+ $end = explode(' ', $end_time);
+ $this->time = $end[0] + $end[1] - $start[0] - $start[1];
+ }
+
+ /**
+ * Gets the time taken to parse the code
+ *
+ * @return double The time taken to parse the code
+ * @since 1.0.2
+ */
+ function get_time() {
+ return $this->time;
+ }
+
+ /**
+ * Merges arrays recursively, overwriting values of the first array with values of later arrays
+ *
+ * @since 1.0.8
+ * @access private
+ */
+ function merge_arrays() {
+ $arrays = func_get_args();
+ $narrays = count($arrays);
+
+ // check arguments
+ // comment out if more performance is necessary (in this case the foreach loop will trigger a warning if the argument is not an array)
+ for ($i = 0; $i < $narrays; $i ++) {
+ if (!is_array($arrays[$i])) {
+ // also array_merge_recursive returns nothing in this case
+ trigger_error('Argument #' . ($i+1) . ' is not an array - trying to merge array with scalar! Returning false!', E_USER_WARNING);
+ return false;
+ }
+ }
+
+ // the first array is in the output set in every case
+ $ret = $arrays[0];
+
+ // merege $ret with the remaining arrays
+ for ($i = 1; $i < $narrays; $i ++) {
+ foreach ($arrays[$i] as $key => $value) {
+ if (is_array($value) && isset($ret[$key])) {
+ // if $ret[$key] is not an array you try to merge an scalar value with an array - the result is not defined (incompatible arrays)
+ // in this case the call will trigger an E_USER_WARNING and the $ret[$key] will be false.
+ $ret[$key] = $this->merge_arrays($ret[$key], $value);
+ } else {
+ $ret[$key] = $value;
+ }
+ }
+ }
+
+ return $ret;
+ }
+
+ /**
+ * Gets language information and stores it for later use
+ *
+ * @param string The filename of the language file you want to load
+ * @since 1.0.0
+ * @access private
+ * @todo Needs to load keys for lexic permissions for keywords, regexps etc
+ */
+ function load_language($file_name) {
+ if ($file_name == $this->loaded_language) {
+ // this file is already loaded!
+ return;
+ }
+
+ //Prepare some stuff before actually loading the language file
+ $this->loaded_language = $file_name;
+ $this->parse_cache_built = false;
+ $this->enable_highlighting();
+ $language_data = array();
+
+ //Load the language file
+ require $file_name;
+
+ // Perhaps some checking might be added here later to check that
+ // $language data is a valid thing but maybe not
+ $this->language_data = $language_data;
+
+ // Set strict mode if should be set
+ $this->strict_mode = $this->language_data['STRICT_MODE_APPLIES'];
+
+ // Set permissions for all lexics to true
+ // so they'll be highlighted by default
+ foreach (array_keys($this->language_data['KEYWORDS']) as $key) {
+ if (!empty($this->language_data['KEYWORDS'][$key])) {
+ $this->lexic_permissions['KEYWORDS'][$key] = true;
+ } else {
+ $this->lexic_permissions['KEYWORDS'][$key] = false;
+ }
+ }
+
+ foreach (array_keys($this->language_data['COMMENT_SINGLE']) as $key) {
+ $this->lexic_permissions['COMMENTS'][$key] = true;
+ }
+ foreach (array_keys($this->language_data['REGEXPS']) as $key) {
+ $this->lexic_permissions['REGEXPS'][$key] = true;
+ }
+
+ // for BenBE and future code reviews:
+ // we can use empty here since we only check for existance and emptiness of an array
+ // if it is not an array at all but rather false or null this will work as intended as well
+ // even if $this->language_data['PARSER_CONTROL'] is undefined this won't trigger a notice
+ if (!empty($this->language_data['PARSER_CONTROL']['ENABLE_FLAGS'])) {
+ foreach ($this->language_data['PARSER_CONTROL']['ENABLE_FLAGS'] as $flag => $value) {
+ // it's either true or false and maybe is true as well
+ $perm = $value !== GESHI_NEVER;
+ if ($flag == 'ALL') {
+ $this->enable_highlighting($perm);
+ continue;
+ }
+ if (!isset($this->lexic_permissions[$flag])) {
+ // unknown lexic permission
+ continue;
+ }
+ if (is_array($this->lexic_permissions[$flag])) {
+ foreach ($this->lexic_permissions[$flag] as $key => $val) {
+ $this->lexic_permissions[$flag][$key] = $perm;
+ }
+ } else {
+ $this->lexic_permissions[$flag] = $perm;
+ }
+ }
+ unset($this->language_data['PARSER_CONTROL']['ENABLE_FLAGS']);
+ }
+
+ //Fix: Problem where hardescapes weren't handled if no ESCAPE_CHAR was given
+ //You need to set one for HARDESCAPES only in this case.
+ if(!isset($this->language_data['HARDCHAR'])) {
+ $this->language_data['HARDCHAR'] = $this->language_data['ESCAPE_CHAR'];
+ }
+
+ //NEW in 1.0.8: Allow styles to be loaded from a separate file to override defaults
+ $style_filename = substr($file_name, 0, -4) . '.style.php';
+ if (is_readable($style_filename)) {
+ //Clear any style_data that could have been set before ...
+ if (isset($style_data)) {
+ unset($style_data);
+ }
+
+ //Read the Style Information from the style file
+ include $style_filename;
+
+ //Apply the new styles to our current language styles
+ if (isset($style_data) && is_array($style_data)) {
+ $this->language_data['STYLES'] =
+ $this->merge_arrays($this->language_data['STYLES'], $style_data);
+ }
+ }
+ }
+
+ /**
+ * Takes the parsed code and various options, and creates the HTML
+ * surrounding it to make it look nice.
+ *
+ * @param string The code already parsed (reference!)
+ * @since 1.0.0
+ * @access private
+ */
+ function finalise(&$parsed_code) {
+ // Remove end parts of important declarations
+ // This is BUGGY!! My fault for bad code: fix coming in 1.2
+ // @todo Remove this crap
+ if ($this->enable_important_blocks &&
+ (strpos($parsed_code, $this->hsc(GESHI_START_IMPORTANT)) === false)) {
+ $parsed_code = str_replace($this->hsc(GESHI_END_IMPORTANT), '', $parsed_code);
+ }
+
+ // Add HTML whitespace stuff if we're using the <div> header
+ if ($this->header_type != GESHI_HEADER_PRE && $this->header_type != GESHI_HEADER_PRE_VALID) {
+ $this->indent($parsed_code);
+ }
+
+ // purge some unnecessary stuff
+ /** NOTE: memorypeak #1 */
+ $parsed_code = preg_replace('#<span[^>]+>(\s*)</span>#', '\\1', $parsed_code);
+
+ // If we are using IDs for line numbers, there needs to be an overall
+ // ID set to prevent collisions.
+ if ($this->add_ids && !$this->overall_id) {
+ $this->overall_id = 'geshi-' . substr(md5(microtime()), 0, 4);
+ }
+
+ // Get code into lines
+ /** NOTE: memorypeak #2 */
+ $code = explode("\n", $parsed_code);
+ $parsed_code = $this->header();
+
+ // If we're using line numbers, we insert <li>s and appropriate
+ // markup to style them (otherwise we don't need to do anything)
+ if ($this->line_numbers != GESHI_NO_LINE_NUMBERS && $this->header_type != GESHI_HEADER_PRE_TABLE) {
+ // If we're using the <pre> header, we shouldn't add newlines because
+ // the <pre> will line-break them (and the <li>s already do this for us)
+ $ls = ($this->header_type != GESHI_HEADER_PRE && $this->header_type != GESHI_HEADER_PRE_VALID) ? "\n" : '';
+
+ // Set vars to defaults for following loop
+ $i = 0;
+
+ // Foreach line...
+ for ($i = 0, $n = count($code); $i < $n;) {
+ //Reset the attributes for a new line ...
+ $attrs = array();
+
+ // Make lines have at least one space in them if they're empty
+ // BenBE: Checking emptiness using trim instead of relying on blanks
+ if ('' == trim($code[$i])) {
+ $code[$i] = '&nbsp;';
+ }
+
+ // If this is a "special line"...
+ if ($this->line_numbers == GESHI_FANCY_LINE_NUMBERS &&
+ $i % $this->line_nth_row == ($this->line_nth_row - 1)) {
+ // Set the attributes to style the line
+ if ($this->use_classes) {
+ //$attr = ' class="li2"';
+ $attrs['class'][] = 'li2';
+ $def_attr = ' class="de2"';
+ } else {
+ //$attr = ' style="' . $this->line_style2 . '"';
+ $attrs['style'][] = $this->line_style2;
+ // This style "covers up" the special styles set for special lines
+ // so that styles applied to special lines don't apply to the actual
+ // code on that line
+ $def_attr = ' style="' . $this->code_style . '"';
+ }
+ } else {
+ if ($this->use_classes) {
+ //$attr = ' class="li1"';
+ $attrs['class'][] = 'li1';
+ $def_attr = ' class="de1"';
+ } else {
+ //$attr = ' style="' . $this->line_style1 . '"';
+ $attrs['style'][] = $this->line_style1;
+ $def_attr = ' style="' . $this->code_style . '"';
+ }
+ }
+
+ //Check which type of tag to insert for this line
+ if ($this->header_type == GESHI_HEADER_PRE_VALID) {
+ $start = "<pre$def_attr>";
+ $end = '</pre>';
+ } else {
+ // Span or div?
+ $start = "<div$def_attr>";
+ $end = '</div>';
+ }
+
+ ++$i;
+
+ // Are we supposed to use ids? If so, add them
+ if ($this->add_ids) {
+ $attrs['id'][] = "$this->overall_id-$i";
+ }
+
+ //Is this some line with extra styles???
+ if (in_array($i, $this->highlight_extra_lines)) {
+ if ($this->use_classes) {
+ if (isset($this->highlight_extra_lines_styles[$i])) {
+ $attrs['class'][] = "lx$i";
+ } else {
+ $attrs['class'][] = "ln-xtra";
+ }
+ } else {
+ array_push($attrs['style'], $this->get_line_style($i));
+ }
+ }
+
+ // Add in the line surrounded by appropriate list HTML
+ $attr_string = '';
+ foreach ($attrs as $key => $attr) {
+ $attr_string .= ' ' . $key . '="' . implode(' ', $attr) . '"';
+ }
+
+ $parsed_code .= "<li$attr_string>$start{$code[$i-1]}$end</li>$ls";
+ unset($code[$i - 1]);
+ }
+ } else {
+ $n = count($code);
+ if ($this->use_classes) {
+ $attributes = ' class="de1"';
+ } else {
+ $attributes = ' style="'. $this->code_style .'"';
+ }
+ if ($this->header_type == GESHI_HEADER_PRE_VALID) {
+ $parsed_code .= '<pre'. $attributes .'>';
+ } elseif ($this->header_type == GESHI_HEADER_PRE_TABLE) {
+ if ($this->line_numbers != GESHI_NO_LINE_NUMBERS) {
+ if ($this->use_classes) {
+ $attrs = ' class="ln"';
+ } else {
+ $attrs = ' style="'. $this->table_linenumber_style .'"';
+ }
+ $parsed_code .= '<td'.$attrs.'><pre'.$attributes.'>';
+ // get linenumbers
+ // we don't merge it with the for below, since it should be better for
+ // memory consumption this way
+ // @todo: but... actually it would still be somewhat nice to merge the two loops
+ // the mem peaks are at different positions
+ for ($i = 0; $i < $n; ++$i) {
+ $close = 0;
+ // fancy lines
+ if ($this->line_numbers == GESHI_FANCY_LINE_NUMBERS &&
+ $i % $this->line_nth_row == ($this->line_nth_row - 1)) {
+ // Set the attributes to style the line
+ if ($this->use_classes) {
+ $parsed_code .= '<span class="xtra li2"><span class="de2">';
+ } else {
+ // This style "covers up" the special styles set for special lines
+ // so that styles applied to special lines don't apply to the actual
+ // code on that line
+ $parsed_code .= '<span style="display:block;' . $this->line_style2 . '">'
+ .'<span style="' . $this->code_style .'">';
+ }
+ $close += 2;
+ }
+ //Is this some line with extra styles???
+ if (in_array($i + 1, $this->highlight_extra_lines)) {
+ if ($this->use_classes) {
+ if (isset($this->highlight_extra_lines_styles[$i])) {
+ $parsed_code .= "<span class=\"xtra lx$i\">";
+ } else {
+ $parsed_code .= "<span class=\"xtra ln-xtra\">";
+ }
+ } else {
+ $parsed_code .= "<span style=\"display:block;" . $this->get_line_style($i) . "\">";
+ }
+ ++$close;
+ }
+ $parsed_code .= $this->line_numbers_start + $i;
+ if ($close) {
+ $parsed_code .= str_repeat('</span>', $close);
+ } else if ($i != $n) {
+ $parsed_code .= "\n";
+ }
+ }
+ $parsed_code .= '</pre></td><td'.$attributes.'>';
+ }
+ $parsed_code .= '<pre'. $attributes .'>';
+ }
+ // No line numbers, but still need to handle highlighting lines extra.
+ // Have to use divs so the full width of the code is highlighted
+ $close = 0;
+ for ($i = 0; $i < $n; ++$i) {
+ // Make lines have at least one space in them if they're empty
+ // BenBE: Checking emptiness using trim instead of relying on blanks
+ if ('' == trim($code[$i])) {
+ $code[$i] = '&nbsp;';
+ }
+ // fancy lines
+ if ($this->line_numbers == GESHI_FANCY_LINE_NUMBERS &&
+ $i % $this->line_nth_row == ($this->line_nth_row - 1)) {
+ // Set the attributes to style the line
+ if ($this->use_classes) {
+ $parsed_code .= '<span class="xtra li2"><span class="de2">';
+ } else {
+ // This style "covers up" the special styles set for special lines
+ // so that styles applied to special lines don't apply to the actual
+ // code on that line
+ $parsed_code .= '<span style="display:block;' . $this->line_style2 . '">'
+ .'<span style="' . $this->code_style .'">';
+ }
+ $close += 2;
+ }
+ //Is this some line with extra styles???
+ if (in_array($i + 1, $this->highlight_extra_lines)) {
+ if ($this->use_classes) {
+ if (isset($this->highlight_extra_lines_styles[$i])) {
+ $parsed_code .= "<span class=\"xtra lx$i\">";
+ } else {
+ $parsed_code .= "<span class=\"xtra ln-xtra\">";
+ }
+ } else {
+ $parsed_code .= "<span style=\"display:block;" . $this->get_line_style($i) . "\">";
+ }
+ ++$close;
+ }
+
+ $parsed_code .= $code[$i];
+
+ if ($close) {
+ $parsed_code .= str_repeat('</span>', $close);
+ $close = 0;
+ }
+ elseif ($i + 1 < $n) {
+ $parsed_code .= "\n";
+ }
+ unset($code[$i]);
+ }
+
+ if ($this->header_type == GESHI_HEADER_PRE_VALID || $this->header_type == GESHI_HEADER_PRE_TABLE) {
+ $parsed_code .= '</pre>';
+ }
+ if ($this->header_type == GESHI_HEADER_PRE_TABLE && $this->line_numbers != GESHI_NO_LINE_NUMBERS) {
+ $parsed_code .= '</td>';
+ }
+ }
+
+ $parsed_code .= $this->footer();
+ }
+
+ /**
+ * Creates the header for the code block (with correct attributes)
+ *
+ * @return string The header for the code block
+ * @since 1.0.0
+ * @access private
+ */
+ function header() {
+ // Get attributes needed
+ /**
+ * @todo Document behaviour change - class is outputted regardless of whether
+ * we're using classes or not. Same with style
+ */
+ $attributes = ' class="' . $this->language;
+ if ($this->overall_class != '') {
+ $attributes .= " ".$this->overall_class;
+ }
+ $attributes .= '"';
+
+ if ($this->overall_id != '') {
+ $attributes .= " id=\"{$this->overall_id}\"";
+ }
+ if ($this->overall_style != '') {
+ $attributes .= ' style="' . $this->overall_style . '"';
+ }
+
+ $ol_attributes = '';
+
+ if ($this->line_numbers_start != 1) {
+ $ol_attributes .= ' start="' . $this->line_numbers_start . '"';
+ }
+
+ // Get the header HTML
+ $header = $this->header_content;
+ if ($header) {
+ if ($this->header_type == GESHI_HEADER_PRE || $this->header_type == GESHI_HEADER_PRE_VALID) {
+ $header = str_replace("\n", '', $header);
+ }
+ $header = $this->replace_keywords($header);
+
+ if ($this->use_classes) {
+ $attr = ' class="head"';
+ } else {
+ $attr = " style=\"{$this->header_content_style}\"";
+ }
+ if ($this->header_type == GESHI_HEADER_PRE_TABLE && $this->line_numbers != GESHI_NO_LINE_NUMBERS) {
+ $header = "<thead><tr><td colspan=\"2\" $attr>$header</td></tr></thead>";
+ } else {
+ $header = "<div$attr>$header</div>";
+ }
+ }
+
+ if (GESHI_HEADER_NONE == $this->header_type) {
+ if ($this->line_numbers != GESHI_NO_LINE_NUMBERS) {
+ return "$header<ol$attributes$ol_attributes>";
+ }
+ return $header . ($this->force_code_block ? '<div>' : '');
+ }
+
+ // Work out what to return and do it
+ if ($this->line_numbers != GESHI_NO_LINE_NUMBERS) {
+ if ($this->header_type == GESHI_HEADER_PRE) {
+ return "<pre$attributes>$header<ol$ol_attributes>";
+ } else if ($this->header_type == GESHI_HEADER_DIV ||
+ $this->header_type == GESHI_HEADER_PRE_VALID) {
+ return "<div$attributes>$header<ol$ol_attributes>";
+ } else if ($this->header_type == GESHI_HEADER_PRE_TABLE) {
+ return "<table$attributes>$header<tbody><tr class=\"li1\">";
+ }
+ } else {
+ if ($this->header_type == GESHI_HEADER_PRE) {
+ return "<pre$attributes>$header" .
+ ($this->force_code_block ? '<div>' : '');
+ } else {
+ return "<div$attributes>$header" .
+ ($this->force_code_block ? '<div>' : '');
+ }
+ }
+ }
+
+ /**
+ * Returns the footer for the code block.
+ *
+ * @return string The footer for the code block
+ * @since 1.0.0
+ * @access private
+ */
+ function footer() {
+ $footer = $this->footer_content;
+ if ($footer) {
+ if ($this->header_type == GESHI_HEADER_PRE) {
+ $footer = str_replace("\n", '', $footer);;
+ }
+ $footer = $this->replace_keywords($footer);
+
+ if ($this->use_classes) {
+ $attr = ' class="foot"';
+ } else {
+ $attr = " style=\"{$this->footer_content_style}\"";
+ }
+ if ($this->header_type == GESHI_HEADER_PRE_TABLE && $this->line_numbers != GESHI_NO_LINE_NUMBERS) {
+ $footer = "<tfoot><tr><td colspan=\"2\">$footer</td></tr></tfoot>";
+ } else {
+ $footer = "<div$attr>$footer</div>";
+ }
+ }
+
+ if (GESHI_HEADER_NONE == $this->header_type) {
+ return ($this->line_numbers != GESHI_NO_LINE_NUMBERS) ? '</ol>' . $footer : $footer;
+ }
+
+ if ($this->header_type == GESHI_HEADER_DIV || $this->header_type == GESHI_HEADER_PRE_VALID) {
+ if ($this->line_numbers != GESHI_NO_LINE_NUMBERS) {
+ return "</ol>$footer</div>";
+ }
+ return ($this->force_code_block ? '</div>' : '') .
+ "$footer</div>";
+ }
+ elseif ($this->header_type == GESHI_HEADER_PRE_TABLE) {
+ if ($this->line_numbers != GESHI_NO_LINE_NUMBERS) {
+ return "</tr></tbody>$footer</table>";
+ }
+ return ($this->force_code_block ? '</div>' : '') .
+ "$footer</div>";
+ }
+ else {
+ if ($this->line_numbers != GESHI_NO_LINE_NUMBERS) {
+ return "</ol>$footer</pre>";
+ }
+ return ($this->force_code_block ? '</div>' : '') .
+ "$footer</pre>";
+ }
+ }
+
+ /**
+ * Replaces certain keywords in the header and footer with
+ * certain configuration values
+ *
+ * @param string The header or footer content to do replacement on
+ * @return string The header or footer with replaced keywords
+ * @since 1.0.2
+ * @access private
+ */
+ function replace_keywords($instr) {
+ $keywords = $replacements = array();
+
+ $keywords[] = '<TIME>';
+ $keywords[] = '{TIME}';
+ $replacements[] = $replacements[] = number_format($time = $this->get_time(), 3);
+
+ $keywords[] = '<LANGUAGE>';
+ $keywords[] = '{LANGUAGE}';
+ $replacements[] = $replacements[] = $this->language_data['LANG_NAME'];
+
+ $keywords[] = '<VERSION>';
+ $keywords[] = '{VERSION}';
+ $replacements[] = $replacements[] = GESHI_VERSION;
+
+ $keywords[] = '<SPEED>';
+ $keywords[] = '{SPEED}';
+ if ($time <= 0) {
+ $speed = 'N/A';
+ } else {
+ $speed = strlen($this->source) / $time;
+ if ($speed >= 1024) {
+ $speed = sprintf("%.2f KB/s", $speed / 1024.0);
+ } else {
+ $speed = sprintf("%.0f B/s", $speed);
+ }
+ }
+ $replacements[] = $replacements[] = $speed;
+
+ return str_replace($keywords, $replacements, $instr);
+ }
+
+ /**
+ * Secure replacement for PHP built-in function htmlspecialchars().
+ *
+ * See ticket #427 (http://wush.net/trac/wikka/ticket/427) for the rationale
+ * for this replacement function.
+ *
+ * The INTERFACE for this function is almost the same as that for
+ * htmlspecialchars(), with the same default for quote style; however, there
+ * is no 'charset' parameter. The reason for this is as follows:
+ *
+ * The PHP docs say:
+ * "The third argument charset defines character set used in conversion."
+ *
+ * I suspect PHP's htmlspecialchars() is working at the byte-value level and
+ * thus _needs_ to know (or asssume) a character set because the special
+ * characters to be replaced could exist at different code points in
+ * different character sets. (If indeed htmlspecialchars() works at
+ * byte-value level that goes some way towards explaining why the
+ * vulnerability would exist in this function, too, and not only in
+ * htmlentities() which certainly is working at byte-value level.)
+ *
+ * This replacement function however works at character level and should
+ * therefore be "immune" to character set differences - so no charset
+ * parameter is needed or provided. If a third parameter is passed, it will
+ * be silently ignored.
+ *
+ * In the OUTPUT there is a minor difference in that we use '&#39;' instead
+ * of PHP's '&#039;' for a single quote: this provides compatibility with
+ * get_html_translation_table(HTML_SPECIALCHARS, ENT_QUOTES)
+ * (see comment by mikiwoz at yahoo dot co dot uk on
+ * http://php.net/htmlspecialchars); it also matches the entity definition
+ * for XML 1.0
+ * (http://www.w3.org/TR/xhtml1/dtds.html#a_dtd_Special_characters).
+ * Like PHP we use a numeric character reference instead of '&apos;' for the
+ * single quote. For the other special characters we use the named entity
+ * references, as PHP is doing.
+ *
+ * @author {@link http://wikkawiki.org/JavaWoman Marjolein Katsma}
+ *
+ * @license http://www.gnu.org/copyleft/lgpl.html
+ * GNU Lesser General Public License
+ * @copyright Copyright 2007, {@link http://wikkawiki.org/CreditsPage
+ * Wikka Development Team}
+ *
+ * @access private
+ * @param string $string string to be converted
+ * @param integer $quote_style
+ * - ENT_COMPAT: escapes &, <, > and double quote (default)
+ * - ENT_NOQUOTES: escapes only &, < and >
+ * - ENT_QUOTES: escapes &, <, >, double and single quotes
+ * @return string converted string
+ * @since 1.0.7.18
+ */
+ function hsc($string, $quote_style = ENT_COMPAT) {
+ // init
+ static $aTransSpecchar = array(
+ '&' => '&amp;',
+ '"' => '&quot;',
+ '<' => '&lt;',
+ '>' => '&gt;',
+
+ //This fix is related to SF#1923020, but has to be applied
+ //regardless of actually highlighting symbols.
+
+ //Circumvent a bug with symbol highlighting
+ //This is required as ; would produce undesirable side-effects if it
+ //was not to be processed as an entity.
+ ';' => '<SEMI>', // Force ; to be processed as entity
+ '|' => '<PIPE>' // Force | to be processed as entity
+ ); // ENT_COMPAT set
+
+ switch ($quote_style) {
+ case ENT_NOQUOTES: // don't convert double quotes
+ unset($aTransSpecchar['"']);
+ break;
+ case ENT_QUOTES: // convert single quotes as well
+ $aTransSpecchar["'"] = '&#39;'; // (apos) htmlspecialchars() uses '&#039;'
+ break;
+ }
+
+ // return translated string
+ return strtr($string, $aTransSpecchar);
+ }
+
+ /**
+ * Returns a stylesheet for the highlighted code. If $economy mode
+ * is true, we only return the stylesheet declarations that matter for
+ * this code block instead of the whole thing
+ *
+ * @param boolean Whether to use economy mode or not
+ * @return string A stylesheet built on the data for the current language
+ * @since 1.0.0
+ */
+ function get_stylesheet($economy_mode = true) {
+ // If there's an error, chances are that the language file
+ // won't have populated the language data file, so we can't
+ // risk getting a stylesheet...
+ if ($this->error) {
+ return '';
+ }
+
+ //Check if the style rearrangements have been processed ...
+ //This also does some preprocessing to check which style groups are useable ...
+ if(!isset($this->language_data['NUMBERS_CACHE'])) {
+ $this->build_style_cache();
+ }
+
+ // First, work out what the selector should be. If there's an ID,
+ // that should be used, the same for a class. Otherwise, a selector
+ // of '' means that these styles will be applied anywhere
+ if ($this->overall_id) {
+ $selector = '#' . $this->overall_id;
+ } else {
+ $selector = '.' . $this->language;
+ if ($this->overall_class) {
+ $selector .= '.' . $this->overall_class;
+ }
+ }
+ $selector .= ' ';
+
+ // Header of the stylesheet
+ if (!$economy_mode) {
+ $stylesheet = "/**\n".
+ " * GeSHi Dynamically Generated Stylesheet\n".
+ " * --------------------------------------\n".
+ " * Dynamically generated stylesheet for {$this->language}\n".
+ " * CSS class: {$this->overall_class}, CSS id: {$this->overall_id}\n".
+ " * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann\n" .
+ " * (http://qbnz.com/highlighter/ and http://geshi.org/)\n".
+ " * --------------------------------------\n".
+ " */\n";
+ } else {
+ $stylesheet = "/**\n".
+ " * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann\n" .
+ " * (http://qbnz.com/highlighter/ and http://geshi.org/)\n".
+ " */\n";
+ }
+
+ // Set the <ol> to have no effect at all if there are line numbers
+ // (<ol>s have margins that should be destroyed so all layout is
+ // controlled by the set_overall_style method, which works on the
+ // <pre> or <div> container). Additionally, set default styles for lines
+ if (!$economy_mode || $this->line_numbers != GESHI_NO_LINE_NUMBERS) {
+ //$stylesheet .= "$selector, {$selector}ol, {$selector}ol li {margin: 0;}\n";
+ $stylesheet .= "$selector.de1, $selector.de2 {{$this->code_style}}\n";
+ }
+
+ // Add overall styles
+ // note: neglect economy_mode, empty styles are meaningless
+ if ($this->overall_style != '') {
+ $stylesheet .= "$selector {{$this->overall_style}}\n";
+ }
+
+ // Add styles for links
+ // note: economy mode does not make _any_ sense here
+ // either the style is empty and thus no selector is needed
+ // or the appropriate key is given.
+ foreach ($this->link_styles as $key => $style) {
+ if ($style != '') {
+ switch ($key) {
+ case GESHI_LINK:
+ $stylesheet .= "{$selector}a:link {{$style}}\n";
+ break;
+ case GESHI_HOVER:
+ $stylesheet .= "{$selector}a:hover {{$style}}\n";
+ break;
+ case GESHI_ACTIVE:
+ $stylesheet .= "{$selector}a:active {{$style}}\n";
+ break;
+ case GESHI_VISITED:
+ $stylesheet .= "{$selector}a:visited {{$style}}\n";
+ break;
+ }
+ }
+ }
+
+ // Header and footer
+ // note: neglect economy_mode, empty styles are meaningless
+ if ($this->header_content_style != '') {
+ $stylesheet .= "$selector.head {{$this->header_content_style}}\n";
+ }
+ if ($this->footer_content_style != '') {
+ $stylesheet .= "$selector.foot {{$this->footer_content_style}}\n";
+ }
+
+ // Styles for important stuff
+ // note: neglect economy_mode, empty styles are meaningless
+ if ($this->important_styles != '') {
+ $stylesheet .= "$selector.imp {{$this->important_styles}}\n";
+ }
+
+ // Simple line number styles
+ if ((!$economy_mode || $this->line_numbers != GESHI_NO_LINE_NUMBERS) && $this->line_style1 != '') {
+ $stylesheet .= "{$selector}li, {$selector}.li1 {{$this->line_style1}}\n";
+ }
+ if ((!$economy_mode || $this->line_numbers != GESHI_NO_LINE_NUMBERS) && $this->table_linenumber_style != '') {
+ $stylesheet .= "{$selector}.ln {{$this->table_linenumber_style}}\n";
+ }
+ // If there is a style set for fancy line numbers, echo it out
+ if ((!$economy_mode || $this->line_numbers == GESHI_FANCY_LINE_NUMBERS) && $this->line_style2 != '') {
+ $stylesheet .= "{$selector}.li2 {{$this->line_style2}}\n";
+ }
+
+ // note: empty styles are meaningless
+ foreach ($this->language_data['STYLES']['KEYWORDS'] as $group => $styles) {
+ if ($styles != '' && (!$economy_mode ||
+ (isset($this->lexic_permissions['KEYWORDS'][$group]) &&
+ $this->lexic_permissions['KEYWORDS'][$group]))) {
+ $stylesheet .= "$selector.kw$group {{$styles}}\n";
+ }
+ }
+ foreach ($this->language_data['STYLES']['COMMENTS'] as $group => $styles) {
+ if ($styles != '' && (!$economy_mode ||
+ (isset($this->lexic_permissions['COMMENTS'][$group]) &&
+ $this->lexic_permissions['COMMENTS'][$group]) ||
+ (!empty($this->language_data['COMMENT_REGEXP']) &&
+ !empty($this->language_data['COMMENT_REGEXP'][$group])))) {
+ $stylesheet .= "$selector.co$group {{$styles}}\n";
+ }
+ }
+ foreach ($this->language_data['STYLES']['ESCAPE_CHAR'] as $group => $styles) {
+ if ($styles != '' && (!$economy_mode || $this->lexic_permissions['ESCAPE_CHAR'])) {
+ // NEW: since 1.0.8 we have to handle hardescapes
+ if ($group === 'HARD') {
+ $group = '_h';
+ }
+ $stylesheet .= "$selector.es$group {{$styles}}\n";
+ }
+ }
+ foreach ($this->language_data['STYLES']['BRACKETS'] as $group => $styles) {
+ if ($styles != '' && (!$economy_mode || $this->lexic_permissions['BRACKETS'])) {
+ $stylesheet .= "$selector.br$group {{$styles}}\n";
+ }
+ }
+ foreach ($this->language_data['STYLES']['SYMBOLS'] as $group => $styles) {
+ if ($styles != '' && (!$economy_mode || $this->lexic_permissions['SYMBOLS'])) {
+ $stylesheet .= "$selector.sy$group {{$styles}}\n";
+ }
+ }
+ foreach ($this->language_data['STYLES']['STRINGS'] as $group => $styles) {
+ if ($styles != '' && (!$economy_mode || $this->lexic_permissions['STRINGS'])) {
+ // NEW: since 1.0.8 we have to handle hardquotes
+ if ($group === 'HARD') {
+ $group = '_h';
+ }
+ $stylesheet .= "$selector.st$group {{$styles}}\n";
+ }
+ }
+ foreach ($this->language_data['STYLES']['NUMBERS'] as $group => $styles) {
+ if ($styles != '' && (!$economy_mode || $this->lexic_permissions['NUMBERS'])) {
+ $stylesheet .= "$selector.nu$group {{$styles}}\n";
+ }
+ }
+ foreach ($this->language_data['STYLES']['METHODS'] as $group => $styles) {
+ if ($styles != '' && (!$economy_mode || $this->lexic_permissions['METHODS'])) {
+ $stylesheet .= "$selector.me$group {{$styles}}\n";
+ }
+ }
+ // note: neglect economy_mode, empty styles are meaningless
+ foreach ($this->language_data['STYLES']['SCRIPT'] as $group => $styles) {
+ if ($styles != '') {
+ $stylesheet .= "$selector.sc$group {{$styles}}\n";
+ }
+ }
+ foreach ($this->language_data['STYLES']['REGEXPS'] as $group => $styles) {
+ if ($styles != '' && (!$economy_mode ||
+ (isset($this->lexic_permissions['REGEXPS'][$group]) &&
+ $this->lexic_permissions['REGEXPS'][$group]))) {
+ if (is_array($this->language_data['REGEXPS'][$group]) &&
+ array_key_exists(GESHI_CLASS, $this->language_data['REGEXPS'][$group])) {
+ $stylesheet .= "$selector.";
+ $stylesheet .= $this->language_data['REGEXPS'][$group][GESHI_CLASS];
+ $stylesheet .= " {{$styles}}\n";
+ } else {
+ $stylesheet .= "$selector.re$group {{$styles}}\n";
+ }
+ }
+ }
+ // Styles for lines being highlighted extra
+ if (!$economy_mode || (count($this->highlight_extra_lines)!=count($this->highlight_extra_lines_styles))) {
+ $stylesheet .= "{$selector}.ln-xtra, {$selector}li.ln-xtra, {$selector}div.ln-xtra {{$this->highlight_extra_lines_style}}\n";
+ }
+ $stylesheet .= "{$selector}span.xtra { display:block; }\n";
+ foreach ($this->highlight_extra_lines_styles as $lineid => $linestyle) {
+ $stylesheet .= "{$selector}.lx$lineid, {$selector}li.lx$lineid, {$selector}div.lx$lineid {{$linestyle}}\n";
+ }
+
+ return $stylesheet;
+ }
+
+ /**
+ * Get's the style that is used for the specified line
+ *
+ * @param int The line number information is requested for
+ * @access private
+ * @since 1.0.7.21
+ */
+ function get_line_style($line) {
+ //$style = null;
+ $style = null;
+ if (isset($this->highlight_extra_lines_styles[$line])) {
+ $style = $this->highlight_extra_lines_styles[$line];
+ } else { // if no "extra" style assigned
+ $style = $this->highlight_extra_lines_style;
+ }
+
+ return $style;
+ }
+
+ /**
+ * this functions creates an optimized regular expression list
+ * of an array of strings.
+ *
+ * Example:
+ * <code>$list = array('faa', 'foo', 'foobar');
+ * => string 'f(aa|oo(bar)?)'</code>
+ *
+ * @param $list array of (unquoted) strings
+ * @param $regexp_delimiter your regular expression delimiter, @see preg_quote()
+ * @return string for regular expression
+ * @author Milian Wolff <mail@milianw.de>
+ * @since 1.0.8
+ * @access private
+ */
+ function optimize_regexp_list($list, $regexp_delimiter = '/') {
+ $regex_chars = array('.', '\\', '+', '*', '?', '[', '^', ']', '$',
+ '(', ')', '{', '}', '=', '!', '<', '>', '|', ':', $regexp_delimiter);
+ sort($list);
+ $regexp_list = array('');
+ $num_subpatterns = 0;
+ $list_key = 0;
+
+ // the tokens which we will use to generate the regexp list
+ $tokens = array();
+ $prev_keys = array();
+ // go through all entries of the list and generate the token list
+ $cur_len = 0;
+ for ($i = 0, $i_max = count($list); $i < $i_max; ++$i) {
+ if ($cur_len > GESHI_MAX_PCRE_LENGTH) {
+ // seems like the length of this pcre is growing exorbitantly
+ $regexp_list[++$list_key] = $this->_optimize_regexp_list_tokens_to_string($tokens);
+ $num_subpatterns = substr_count($regexp_list[$list_key], '(?:');
+ $tokens = array();
+ $cur_len = 0;
+ }
+ $level = 0;
+ $entry = preg_quote((string) $list[$i], $regexp_delimiter);
+ $pointer = &$tokens;
+ // properly assign the new entry to the correct position in the token array
+ // possibly generate smaller common denominator keys
+ while (true) {
+ // get the common denominator
+ if (isset($prev_keys[$level])) {
+ if ($prev_keys[$level] == $entry) {
+ // this is a duplicate entry, skip it
+ continue 2;
+ }
+ $char = 0;
+ while (isset($entry[$char]) && isset($prev_keys[$level][$char])
+ && $entry[$char] == $prev_keys[$level][$char]) {
+ ++$char;
+ }
+ if ($char > 0) {
+ // this entry has at least some chars in common with the current key
+ if ($char == strlen($prev_keys[$level])) {
+ // current key is totally matched, i.e. this entry has just some bits appended
+ $pointer = &$pointer[$prev_keys[$level]];
+ } else {
+ // only part of the keys match
+ $new_key_part1 = substr($prev_keys[$level], 0, $char);
+ $new_key_part2 = substr($prev_keys[$level], $char);
+
+ if (in_array($new_key_part1[0], $regex_chars)
+ || in_array($new_key_part2[0], $regex_chars)) {
+ // this is bad, a regex char as first character
+ $pointer[$entry] = array('' => true);
+ array_splice($prev_keys, $level, count($prev_keys), $entry);
+ $cur_len += strlen($entry);
+ continue;
+ } else {
+ // relocate previous tokens
+ $pointer[$new_key_part1] = array($new_key_part2 => $pointer[$prev_keys[$level]]);
+ unset($pointer[$prev_keys[$level]]);
+ $pointer = &$pointer[$new_key_part1];
+ // recreate key index
+ array_splice($prev_keys, $level, count($prev_keys), array($new_key_part1, $new_key_part2));
+ $cur_len += strlen($new_key_part2);
+ }
+ }
+ ++$level;
+ $entry = substr($entry, $char);
+ continue;
+ }
+ // else: fall trough, i.e. no common denominator was found
+ }
+ if ($level == 0 && !empty($tokens)) {
+ // we can dump current tokens into the string and throw them away afterwards
+ $new_entry = $this->_optimize_regexp_list_tokens_to_string($tokens);
+ $new_subpatterns = substr_count($new_entry, '(?:');
+ if (GESHI_MAX_PCRE_SUBPATTERNS && $num_subpatterns + $new_subpatterns > GESHI_MAX_PCRE_SUBPATTERNS) {
+ $regexp_list[++$list_key] = $new_entry;
+ $num_subpatterns = $new_subpatterns;
+ } else {
+ if (!empty($regexp_list[$list_key])) {
+ $new_entry = '|' . $new_entry;
+ }
+ $regexp_list[$list_key] .= $new_entry;
+ $num_subpatterns += $new_subpatterns;
+ }
+ $tokens = array();
+ $cur_len = 0;
+ }
+ // no further common denominator found
+ $pointer[$entry] = array('' => true);
+ array_splice($prev_keys, $level, count($prev_keys), $entry);
+
+ $cur_len += strlen($entry);
+ break;
+ }
+ unset($list[$i]);
+ }
+ // make sure the last tokens get converted as well
+ $new_entry = $this->_optimize_regexp_list_tokens_to_string($tokens);
+ if (GESHI_MAX_PCRE_SUBPATTERNS && $num_subpatterns + substr_count($new_entry, '(?:') > GESHI_MAX_PCRE_SUBPATTERNS) {
+ $regexp_list[++$list_key] = $new_entry;
+ } else {
+ if (!empty($regexp_list[$list_key])) {
+ $new_entry = '|' . $new_entry;
+ }
+ $regexp_list[$list_key] .= $new_entry;
+ }
+ return $regexp_list;
+ }
+ /**
+ * this function creates the appropriate regexp string of an token array
+ * you should not call this function directly, @see $this->optimize_regexp_list().
+ *
+ * @param &$tokens array of tokens
+ * @param $recursed bool to know wether we recursed or not
+ * @return string
+ * @author Milian Wolff <mail@milianw.de>
+ * @since 1.0.8
+ * @access private
+ */
+ function _optimize_regexp_list_tokens_to_string(&$tokens, $recursed = false) {
+ $list = '';
+ foreach ($tokens as $token => $sub_tokens) {
+ $list .= $token;
+ $close_entry = isset($sub_tokens['']);
+ unset($sub_tokens['']);
+ if (!empty($sub_tokens)) {
+ $list .= '(?:' . $this->_optimize_regexp_list_tokens_to_string($sub_tokens, true) . ')';
+ if ($close_entry) {
+ // make sub_tokens optional
+ $list .= '?';
+ }
+ }
+ $list .= '|';
+ }
+ if (!$recursed) {
+ // do some optimizations
+ // common trailing strings
+ // BUGGY!
+ //$list = preg_replace_callback('#(?<=^|\:|\|)\w+?(\w+)(?:\|.+\1)+(?=\|)#', create_function(
+ // '$matches', 'return "(?:" . preg_replace("#" . preg_quote($matches[1], "#") . "(?=\||$)#", "", $matches[0]) . ")" . $matches[1];'), $list);
+ // (?:p)? => p?
+ $list = preg_replace('#\(\?\:(.)\)\?#', '\1?', $list);
+ // (?:a|b|c|d|...)? => [abcd...]?
+ // TODO: a|bb|c => [ac]|bb
+ static $callback_2;
+ if (!isset($callback_2)) {
+ $callback_2 = create_function('$matches', 'return "[" . str_replace("|", "", $matches[1]) . "]";');
+ }
+ $list = preg_replace_callback('#\(\?\:((?:.\|)+.)\)#', $callback_2, $list);
+ }
+ // return $list without trailing pipe
+ return substr($list, 0, -1);
+ }
+} // End Class GeSHi
+
+
+if (!function_exists('geshi_highlight')) {
+ /**
+ * Easy way to highlight stuff. Behaves just like highlight_string
+ *
+ * @param string The code to highlight
+ * @param string The language to highlight the code in
+ * @param string The path to the language files. You can leave this blank if you need
+ * as from version 1.0.7 the path should be automatically detected
+ * @param boolean Whether to return the result or to echo
+ * @return string The code highlighted (if $return is true)
+ * @since 1.0.2
+ */
+ function geshi_highlight($string, $language, $path = null, $return = false) {
+ $geshi = new GeSHi($string, $language, $path);
+ $geshi->set_header_type(GESHI_HEADER_NONE);
+
+ if ($return) {
+ return '<code>' . $geshi->parse_code() . '</code>';
+ }
+
+ echo '<code>' . $geshi->parse_code() . '</code>';
+
+ if ($geshi->error()) {
+ return false;
+ }
+ return true;
+ }
+}
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/abap.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/abap.php
new file mode 100644
index 000000000..229de9891
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/abap.php
@@ -0,0 +1,1409 @@
+<?php
+/*************************************************************************************
+ * abap.php
+ * --------
+ * Author: Andres Picazo (andres@andrespicazo.com)
+ * Contributors:
+ * - Sandra Rossi (sandra.rossi@gmail.com)
+ * - Jacob Laursen (jlu@kmd.dk)
+ * Copyright: (c) 2007 Andres Picazo
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/06/04
+ *
+ * ABAP language file for GeSHi.
+ *
+ * Reference abap language documentation (abap 7.1) : http://help.sap.com/abapdocu/en/ABENABAP_INDEX.htm
+ *
+ * ABAP syntax is highly complex, several problems could not be addressed, see TODO below if you dare ;-)
+ * Be aware that in ABAP language, keywords may be composed of several tokens,
+ * separated by one or more spaces or carriage returns
+ * (for example CONCATENATE 'hello' 'world' INTO string SEPARATED BY ' ')
+ * it's why we must decode them with REGEXPS. As there are many keywords with several tokens,
+ * I had to create a separate section in the code to simplify the reading.
+ * Be aware that some words may be highlighted several times like for "ref to data", which is first
+ * highlighted for "ref to data", then secondly for "ref to". It is very important to
+ * position "ref to" after "ref to data" otherwise "data" wouldn't be highlighted because
+ * of the previous highlight.
+ * Control, declarative and other statements are assigned URLs to sap documentation website:
+ * http://help.sap.com/abapdocu/en/ABAP<statement_name>.htm
+ *
+ * CHANGES
+ * -------
+ * 2009/02/25 (1.0.8.3)
+ * - Some more rework of the language file
+ * 2009/01/04 (1.0.8.2)
+ * - Major Release, more than 1000 statements and keywords added = whole abap 7.1 (Sandra Rossi)
+ * 2007/06/27 (1.0.0)
+ * - First Release
+ *
+ * TODO
+ * ----
+ * - in DATA data TYPE type, 2nd "data" and 2nd "type" are highlighted with data
+ * style, but should be ignored. Same problem for all words!!! This is quite impossible to
+ * solve it as we should define syntaxes of all statements (huge effort!) and use a lex
+ * or something like that instead of regexp I guess.
+ * - Some words are considered as being statement names (report, tables, etc.) though they
+ * are used as keyword in some statements. For example: FORM xxxx TABLES itab. It was
+ * arbitrary decided to define them as statement instead of keyword, because it may be
+ * useful to have the URL to SAP help for some of them.
+ * - if a comment is between 2 words of a keyword (for example SEPARATED "comment \n BY),
+ * it is not considered as a keyword, but it should!
+ * - for statements like "READ DATASET", GeSHi does not allow to set URLs because these
+ * statements are determined by REGEXPS. For "READ DATASET", the URL should be
+ * ABAPREAD_DATASET.htm. If a technical solution is found, be careful : URLs
+ * are sometimes not valid because the URL does not exist. For example, for "AT NEW"
+ * statement, the URL should be ABAPAT_ITAB.htm (not ABAPAT_NEW.htm).
+ * There are many other exceptions.
+ * Note: for adding this functionality within your php program, you can execute this code:
+ * function add_urls_to_multi_tokens( $matches ) {
+ * $url = preg_replace( "/[ \n]+/" , "_" , $matches[3] );
+ * if( $url == $matches[3] ) return $matches[0] ;
+ * else return $matches[1]."<a href=\"http://help.sap.com/abapdocu/en/ABAP".strtoupper($url).".htm\">".$matches[3]."</a>".$matches[4];
+ * }
+ * $html = $geshi->parse_code();
+ * $html = preg_replace_callback( "£(zzz:(control|statement|data);\">)(.+?)(</span>)£s", "add_urls_to_multi_tokens", $html );
+ * echo $html;
+ * - Numbers followed by a dot terminating the statement are not properly recognized
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array(
+ 'LANG_NAME' => 'ABAP',
+ 'COMMENT_SINGLE' => array(
+ 1 => '"'
+ ),
+ 'COMMENT_MULTI' => array(),
+ 'COMMENT_REGEXP' => array(
+ // lines beginning with star at 1st position are comments
+ // (star anywhere else is not a comment, especially be careful with
+ // "assign dref->* to <fs>" statement)
+ 2 => '/^\*.*?$/m'
+ ),
+ 'CASE_KEYWORDS' => 0,
+ 'QUOTEMARKS' => array(
+ 1 => "'",
+ 2 => "`"
+ ),
+ 'ESCAPE_CHAR' => '',
+
+ 'KEYWORDS' => array(
+ //***********************************************
+ // Section 2 : process sequences of several tokens
+ //***********************************************
+
+ 7 => array(
+ 'at new',
+ 'at end of',
+ 'at first',
+ 'at last',
+ 'loop at',
+ 'loop at screen',
+ ),
+
+ 8 => array(
+ 'private section',
+ 'protected section',
+ 'public section',
+ 'at line-selection',
+ 'at selection-screen',
+ 'at user-command',
+ 'assign component',
+ 'assign table field',
+ 'call badi',
+ 'call customer-function',
+ 'call customer subscreen',
+ 'call dialog',
+ 'call function',
+ 'call method',
+ 'call screen',
+ 'call selection-screen',
+ 'call transaction',
+ 'call transformation',
+ 'close cursor',
+ 'close dataset',
+ 'commit work',
+ 'convert date',
+ 'convert text',
+ 'convert time stamp',
+ 'create data',
+ 'create object',
+ 'delete dataset',
+ 'delete from',
+ 'describe distance',
+ 'describe field',
+ 'describe list',
+ 'describe table',
+ 'exec sql',
+ 'exit from sql',
+ 'exit from step-loop',
+ 'export dynpro',
+ 'export nametab',
+ 'free memory',
+ 'generate subroutine-pool',
+ 'get badi',
+ 'get bit',
+ 'get cursor',
+ 'get dataset',
+ 'get locale',
+ 'get parameter',
+ 'get pf-status',
+ 'get property',
+ 'get reference',
+ 'get run time',
+ 'get time',
+ 'get time stamp',
+ 'import directory',
+ 'insert report',
+ 'insert text-pool',
+ 'leave list-processing',
+ 'leave program',
+ 'leave screen',
+ 'leave to list-processing',
+ 'leave to transaction',
+ 'modify line',
+ 'modify screen',
+ 'move percentage',
+ 'open cursor',
+ 'open dataset',
+ 'raise event',
+ 'raise exception',
+ 'read dataset',
+ 'read line',
+ 'read report',
+ 'read table',
+ 'read textpool',
+ 'receive results from function',
+ 'refresh control',
+ 'rollback work',
+ 'set bit',
+ 'set blank lines',
+ 'set country',
+ 'set cursor',
+ 'set dataset',
+ 'set extended check',
+ 'set handler',
+ 'set hold data',
+ 'set language',
+ 'set left scroll-boundary',
+ 'set locale',
+ 'set margin',
+ 'set parameter',
+ 'set pf-status',
+ 'set property',
+ 'set run time analyzer',
+ 'set run time clock',
+ 'set screen',
+ 'set titlebar',
+ 'set update task',
+ 'set user-command',
+ 'suppress dialog',
+ 'truncate dataset',
+ 'wait until',
+ 'wait up to',
+ ),
+
+ 9 => array(
+ 'accepting duplicate keys',
+ 'accepting padding',
+ 'accepting truncation',
+ 'according to',
+ 'actual length',
+ 'adjacent duplicates',
+ 'after input',
+ 'all blob columns',
+ 'all clob columns',
+ 'all fields',
+ 'all methods',
+ 'all other columns',
+ 'and mark',
+ 'and return to screen',
+ 'and return',
+ 'and skip first screen',
+ 'and wait',
+ 'any table',
+ 'appendage type',
+ 'archive mode',
+ 'archiving parameters',
+ 'area handle',
+ 'as checkbox',
+ 'as icon',
+ 'as line',
+ 'as listbox',
+ 'as person table',
+ 'as search patterns',
+ 'as separate unit',
+ 'as subscreen',
+ 'as symbol',
+ 'as text',
+ 'as window',
+ 'at cursor-selection',
+ 'at exit-command',
+ 'at next application statement',
+ 'at position',
+
+ 'backup into',
+ 'before output',
+ 'before unwind',
+ 'begin of block',
+ 'begin of common part',
+ 'begin of line',
+ 'begin of screen',
+ 'begin of tabbed block',
+ 'begin of version',
+ 'begin of',
+ 'big endian',
+ 'binary mode',
+ 'binary search',
+ 'by kernel module',
+ 'bypassing buffer',
+
+ 'client specified',
+ 'code page',
+ 'code page hint',
+ 'code page into',
+ 'color black',
+ 'color blue',
+ 'color green',
+ 'color pink',
+ 'color red',
+ 'color yellow',
+ 'compression off',
+ 'compression on',
+ 'connect to',
+ 'corresponding fields of table',
+ 'corresponding fields of',
+ 'cover page',
+ 'cover text',
+ 'create package',
+ 'create private',
+ 'create protected',
+ 'create public',
+ 'current position',
+
+ 'data buffer',
+ 'data values',
+ 'dataset expiration',
+ 'daylight saving time',
+ 'default key',
+ 'default program',
+ 'default screen',
+ 'defining database',
+ 'deleting leading',
+ 'deleting trailing',
+ 'directory entry',
+ 'display like',
+ 'display offset',
+ 'during line-selection',
+ 'dynamic selections',
+
+ 'edit mask',
+ 'end of block',
+ 'end of common part',
+ 'end of file',
+ 'end of line',
+ 'end of screen',
+ 'end of tabbed block',
+ 'end of version',
+ 'end of',
+ 'endian into',
+ 'ending at',
+ 'enhancement options into',
+ 'enhancement into',
+ 'environment time format',
+ 'execute procedure',
+ 'exporting list to memory',
+ 'extension type',
+
+ 'field format',
+ 'field selection',
+ 'field value into',
+ 'final methods',
+ 'first occurrence of',
+ 'fixed-point arithmetic',
+ 'for all entries',
+ 'for all instances',
+ 'for appending',
+ 'for columns',
+ 'for event of',
+ 'for field',
+ 'for high',
+ 'for input',
+ 'for lines',
+ 'for low',
+ 'for node',
+ 'for output',
+ 'for select',
+ 'for table',
+ 'for testing',
+ 'for update',
+ 'for user',
+ 'frame entry',
+ 'frame program from',
+ 'from code page',
+ 'from context',
+ 'from database',
+ 'from logfile id',
+ 'from number format',
+ 'from screen',
+ 'from table',
+ 'function key',
+
+ 'get connection',
+ 'global friends',
+ 'group by',
+
+ 'hashed table of',
+ 'hashed table',
+
+ 'if found',
+ 'ignoring case',
+ 'ignoring conversion errors',
+ 'ignoring structure boundaries',
+ 'implementations from',
+ 'in background',
+ 'in background task',
+ 'in background unit',
+ 'in binary mode',
+ 'in byte mode',
+ 'in char-to-hex mode',
+ 'in character mode',
+ 'in group',
+ 'in legacy binary mode',
+ 'in legacy text mode',
+ 'in program',
+ 'in remote task',
+ 'in text mode',
+ 'in table',
+ 'in update task',
+ 'include bound',
+ 'include into',
+ 'include program from',
+ 'include structure',
+ 'include type',
+ 'including gaps',
+ 'index table',
+ 'inheriting from',
+ 'init destination',
+ 'initial line of',
+ 'initial line',
+ 'initial size',
+ 'internal table',
+ 'into sortable code',
+
+ 'keep in spool',
+ 'keeping directory entry',
+ 'keeping logical unit of work',
+ 'keeping task',
+ 'keywords from',
+
+ 'left margin',
+ 'left outer',
+ 'levels into',
+ 'line format',
+ 'line into',
+ 'line of',
+ 'line page',
+ 'line value from',
+ 'line value into',
+ 'lines of',
+ 'list authority',
+ 'list dataset',
+ 'list name',
+ 'little endian',
+ 'lob handle for',
+ 'local friends',
+ 'locator for',
+ 'lower case',
+
+ 'main table field',
+ 'match count',
+ 'match length',
+ 'match line',
+ 'match offset',
+ 'matchcode object',
+ 'maximum length',
+ 'maximum width into',
+ 'memory id',
+ 'message into',
+ 'messages into',
+ 'modif id',
+
+ 'nesting level',
+ 'new list identification',
+ 'next cursor',
+ 'no database selection',
+ 'no dialog',
+ 'no end of line',
+ 'no fields',
+ 'no flush',
+ 'no intervals',
+ 'no intervals off',
+ 'no standard page heading',
+ 'no-extension off',
+ 'non-unique key',
+ 'non-unique sorted key',
+ 'not at end of mode',
+ 'number of lines',
+ 'number of pages',
+
+ 'object key',
+ 'obligatory off',
+ 'of current page',
+ 'of page',
+ 'of program',
+ 'offset into',
+ 'on block',
+ 'on commit',
+ 'on end of task',
+ 'on end of',
+ 'on exit-command',
+ 'on help-request for',
+ 'on radiobutton group',
+ 'on rollback',
+ 'on value-request for',
+ 'open for package',
+ 'option class-coding',
+ 'option class',
+ 'option coding',
+ 'option expand',
+ 'option syncpoints',
+ 'options from',
+ 'order by',
+ 'overflow into',
+
+ 'package section',
+ 'package size',
+ 'preferred parameter',
+ 'preserving identifier escaping',
+ 'primary key',
+ 'print off',
+ 'print on',
+ 'program from',
+ 'program type',
+
+ 'radiobutton groups',
+ 'radiobutton group',
+ 'range of',
+ 'reader for',
+ 'receive buffer',
+ 'reduced functionality',
+ 'ref to data',
+ 'ref to object',
+ 'ref to',
+
+ 'reference into',
+ 'renaming with suffix',
+ 'replacement character',
+ 'replacement count',
+ 'replacement length',
+ 'replacement line',
+ 'replacement offset',
+ 'respecting blanks',
+ 'respecting case',
+ 'result into',
+ 'risk level',
+
+ 'sap cover page',
+ 'search fkeq',
+ 'search fkge',
+ 'search gkeq',
+ 'search gkge',
+ 'section of',
+ 'send buffer',
+ 'separated by',
+ 'shared buffer',
+ 'shared memory',
+ 'shared memory enabled',
+ 'skipping byte-order mark',
+ 'sorted by',
+ 'sorted table of',
+ 'sorted table',
+ 'spool parameters',
+ 'standard table of',
+ 'standard table',
+ 'starting at',
+ 'starting new task',
+ 'statements into',
+ 'structure default',
+ 'structures into',
+
+ 'table field',
+ 'table of',
+ 'text mode',
+ 'time stamp',
+ 'time zone',
+ 'to code page',
+ 'to column',
+ 'to context',
+ 'to first page',
+ 'to last page',
+ 'to last line',
+ 'to line',
+ 'to lower case',
+ 'to number format',
+ 'to page',
+ 'to sap spool',
+ 'to upper case',
+ 'tokens into',
+ 'transporting no fields',
+ 'type tableview',
+ 'type tabstrip',
+
+ 'unicode enabling',
+ 'up to',
+ 'upper case',
+ 'using edit mask',
+ 'using key',
+ 'using no edit mask',
+ 'using screen',
+ 'using selection-screen',
+ 'using selection-set',
+ 'using selection-sets of program',
+
+ 'valid between',
+ 'valid from',
+ 'value check',
+ 'via job',
+ 'via selection-screen',
+ 'visible length',
+
+ 'whenever found',
+ 'with analysis',
+ 'with byte-order mark',
+ 'with comments',
+ 'with current switchstates',
+ 'with explicit enhancements',
+ 'with frame',
+ 'with free selections',
+ 'with further secondary keys',
+ 'with header line',
+ 'with hold',
+ 'with implicit enhancements',
+ 'with inactive enhancements',
+ 'with includes',
+ 'with key',
+ 'with linefeed',
+ 'with list tokenization',
+ 'with native linefeed',
+ 'with non-unique key',
+ 'with null',
+ 'with pragmas',
+ 'with precompiled headers',
+ 'with selection-table',
+ 'with smart linefeed',
+ 'with table key',
+ 'with test code',
+ 'with type-pools',
+ 'with unique key',
+ 'with unix linefeed',
+ 'with windows linefeed',
+ 'without further secondary keys',
+ 'without selection-screen',
+ 'without spool dynpro',
+ 'without trmac',
+ 'word into',
+ 'writer for'
+ ),
+
+ //**********************************************************
+ // Other abap statements
+ //**********************************************************
+ 3 => array(
+ 'add',
+ 'add-corresponding',
+ 'aliases',
+ 'append',
+ 'assign',
+ 'at',
+ 'authority-check',
+
+ 'break-point',
+
+ 'clear',
+ 'collect',
+ 'compute',
+ 'concatenate',
+ 'condense',
+ 'class',
+ 'class-events',
+ 'class-methods',
+ 'class-pool',
+
+ 'define',
+ 'delete',
+ 'demand',
+ 'detail',
+ 'divide',
+ 'divide-corresponding',
+
+ 'editor-call',
+ 'end-of-file',
+ 'end-enhancement-section',
+ 'end-of-definition',
+ 'end-of-page',
+ 'end-of-selection',
+ 'endclass',
+ 'endenhancement',
+ 'endexec',
+ 'endform',
+ 'endfunction',
+ 'endinterface',
+ 'endmethod',
+ 'endmodule',
+ 'endon',
+ 'endprovide',
+ 'endselect',
+ 'enhancement',
+ 'enhancement-point',
+ 'enhancement-section',
+ 'export',
+ 'extract',
+ 'events',
+
+ 'fetch',
+ 'field-groups',
+ 'find',
+ 'format',
+ 'form',
+ 'free',
+ 'function-pool',
+ 'function',
+
+ 'get',
+
+ 'hide',
+
+ 'import',
+ 'infotypes',
+ 'input',
+ 'insert',
+ 'include',
+ 'initialization',
+ 'interface',
+ 'interface-pool',
+ 'interfaces',
+
+ 'leave',
+ 'load-of-program',
+ 'log-point',
+
+ 'maximum',
+ 'message',
+ 'methods',
+ 'method',
+ 'minimum',
+ 'modify',
+ 'move',
+ 'move-corresponding',
+ 'multiply',
+ 'multiply-corresponding',
+
+ 'new-line',
+ 'new-page',
+ 'new-section',
+
+ 'overlay',
+
+ 'pack',
+ 'perform',
+ 'position',
+ 'print-control',
+ 'program',
+ 'provide',
+ 'put',
+
+ 'raise',
+ 'refresh',
+ 'reject',
+ 'replace',
+ 'report',
+ 'reserve',
+
+ 'scroll',
+ 'search',
+ 'select',
+ 'selection-screen',
+ 'shift',
+ 'skip',
+ 'sort',
+ 'split',
+ 'start-of-selection',
+ 'submit',
+ 'subtract',
+ 'subtract-corresponding',
+ 'sum',
+ 'summary',
+ 'summing',
+ 'supply',
+ 'syntax-check',
+
+ 'top-of-page',
+ 'transfer',
+ 'translate',
+ 'type-pool',
+
+ 'uline',
+ 'unpack',
+ 'update',
+
+ 'window',
+ 'write'
+
+ ),
+
+ //**********************************************************
+ // keywords
+ //**********************************************************
+
+ 4 => array(
+ 'abbreviated',
+ 'abstract',
+ 'accept',
+ 'acos',
+ 'activation',
+ 'alias',
+ 'align',
+ 'all',
+ 'allocate',
+ 'and',
+ 'assigned',
+ 'any',
+ 'appending',
+ 'area',
+ 'as',
+ 'ascending',
+ 'asin',
+ 'assigning',
+ 'atan',
+ 'attributes',
+ 'avg',
+
+ 'backward',
+ 'between',
+ 'bit-and',
+ 'bit-not',
+ 'bit-or',
+ 'bit-set',
+ 'bit-xor',
+ 'boolc',
+ 'boolx',
+ 'bound',
+ 'bt',
+ 'blocks',
+ 'bounds',
+ 'boxed',
+ 'by',
+ 'byte-ca',
+ 'byte-cn',
+ 'byte-co',
+ 'byte-cs',
+ 'byte-na',
+ 'byte-ns',
+
+ 'ca',
+ 'calling',
+ 'casting',
+ 'ceil',
+ 'center',
+ 'centered',
+ 'changing',
+ 'char_off',
+ 'charlen',
+ 'circular',
+ 'class_constructor',
+ 'client',
+ 'clike',
+ 'close',
+ 'cmax',
+ 'cmin',
+ 'cn',
+ 'cnt',
+ 'co',
+ 'col_background',
+ 'col_group',
+ 'col_heading',
+ 'col_key',
+ 'col_negative',
+ 'col_normal',
+ 'col_positive',
+ 'col_total',
+ 'color',
+ 'column',
+ 'comment',
+ 'comparing',
+ 'components',
+ 'condition',
+ 'context',
+ 'copies',
+ 'count',
+ 'country',
+ 'cpi',
+ 'creating',
+ 'critical',
+ 'concat_lines_of',
+ 'cos',
+ 'cosh',
+ 'count_any_not_of',
+ 'count_any_of',
+ 'cp',
+ 'cs',
+ 'csequence',
+ 'currency',
+ 'current',
+ 'cx_static_check',
+ 'cx_root',
+ 'cx_dynamic_check',
+
+ 'dangerous',
+ 'database',
+ 'datainfo',
+ 'date',
+ 'dbmaxlen',
+ 'dd/mm/yy',
+ 'dd/mm/yyyy',
+ 'ddmmyy',
+ 'deallocate',
+ 'decfloat',
+ 'decfloat16',
+ 'decfloat34',
+ 'decimals',
+ 'default',
+ 'deferred',
+ 'definition',
+ 'department',
+ 'descending',
+ 'destination',
+ 'disconnect',
+ 'display-mode',
+ 'distance',
+ 'distinct',
+ 'div',
+ 'dummy',
+
+ 'encoding',
+ 'end-lines',
+ 'engineering',
+ 'environment',
+ 'eq',
+ 'equiv',
+ 'error_message',
+ 'errormessage',
+ 'escape',
+ 'exact',
+ 'exception-table',
+ 'exceptions',
+ 'exclude',
+ 'excluding',
+ 'exists',
+ 'exp',
+ 'exponent',
+ 'exporting',
+ 'extended_monetary',
+
+ 'field',
+ 'filter-table',
+ 'filters',
+ 'filter',
+ 'final',
+ 'find_any_not_of',
+ 'find_any_of',
+ 'find_end',
+ 'floor',
+ 'first-line',
+ 'font',
+ 'forward',
+ 'for',
+ 'frac',
+ 'from_mixed',
+ 'friends',
+ 'from',
+
+ 'giving',
+ 'ge',
+ 'gt',
+
+ 'handle',
+ 'harmless',
+ 'having',
+ 'head-lines',
+ 'help-id',
+ 'help-request',
+ 'high',
+ 'hold',
+ 'hotspot',
+
+ 'id',
+ 'ids',
+ 'immediately',
+ 'implementation',
+ 'importing',
+ 'in',
+ 'initial',
+ 'incl',
+ 'including',
+ 'increment',
+ 'index',
+ 'index-line',
+ 'inner',
+ 'inout',
+ 'intensified',
+ 'into',
+ 'inverse',
+ 'is',
+ 'iso',
+
+ 'join',
+
+ 'key',
+ 'kind',
+
+ 'log10',
+ 'language',
+ 'late',
+ 'layout',
+ 'le',
+ 'lt',
+ 'left-justified',
+ 'leftplus',
+ 'leftspace',
+ 'left',
+ 'length',
+ 'level',
+ 'like',
+ 'line-count',
+ 'line-size',
+ 'lines',
+ 'line',
+ 'load',
+ 'long',
+ 'lower',
+ 'low',
+ 'lpi',
+
+ 'matches',
+ 'match',
+ 'mail',
+ 'major-id',
+ 'max',
+ 'medium',
+ 'memory',
+ 'message-id',
+ 'module',
+ 'minor-id',
+ 'min',
+ 'mm/dd/yyyy',
+ 'mm/dd/yy',
+ 'mmddyy',
+ 'mode',
+ 'modifier',
+ 'mod',
+ 'monetary',
+
+ 'name',
+ 'nb',
+ 'ne',
+ 'next',
+ 'no-display',
+ 'no-extension',
+ 'no-gap',
+ 'no-gaps',
+ 'no-grouping',
+ 'no-heading',
+ 'no-scrolling',
+ 'no-sign',
+ 'no-title',
+ 'no-topofpage',
+ 'no-zero',
+ 'nodes',
+ 'non-unicode',
+ 'no',
+ 'number',
+ 'nmax',
+ 'nmin',
+ 'not',
+ 'null',
+ 'numeric',
+ 'numofchar',
+
+ 'o',
+ 'objects',
+ 'obligatory',
+ 'occurs',
+ 'offset',
+ 'off',
+ 'of',
+ 'only',
+ 'open',
+ 'option',
+ 'optional',
+ 'options',
+ 'output-length',
+ 'output',
+ 'out',
+ 'on change of',
+ 'or',
+ 'others',
+
+ 'pad',
+ 'page',
+ 'pages',
+ 'parameter-table',
+ 'part',
+ 'performing',
+ 'pos_high',
+ 'pos_low',
+ 'priority',
+ 'public',
+ 'pushbutton',
+
+ 'queue-only',
+ 'quickinfo',
+
+ 'raising',
+ 'range',
+ 'read-only',
+ 'received',
+ 'receiver',
+ 'receiving',
+ 'redefinition',
+ 'reference',
+ 'regex',
+ 'replacing',
+ 'reset',
+ 'responsible',
+ 'result',
+ 'results',
+ 'resumable',
+ 'returncode',
+ 'returning',
+ 'right',
+ 'right-specified',
+ 'rightplus',
+ 'rightspace',
+ 'round',
+ 'rows',
+ 'repeat',
+ 'requested',
+ 'rescale',
+ 'reverse',
+
+ 'scale_preserving',
+ 'scale_preserving_scientific',
+ 'scientific',
+ 'scientific_with_leading_zero',
+ 'screen',
+ 'scrolling',
+ 'seconds',
+ 'segment',
+ 'shift_left',
+ 'shift_right',
+ 'sign',
+ 'simple',
+ 'sin',
+ 'sinh',
+ 'short',
+ 'shortdump-id',
+ 'sign_as_postfix',
+ 'single',
+ 'size',
+ 'some',
+ 'source',
+ 'space',
+ 'spots',
+ 'stable',
+ 'state',
+ 'static',
+ 'statusinfo',
+ 'sqrt',
+ 'string',
+ 'strlen',
+ 'structure',
+ 'style',
+ 'subkey',
+ 'submatches',
+ 'substring',
+ 'substring_after',
+ 'substring_before',
+ 'substring_from',
+ 'substring_to',
+ 'super',
+ 'supplied',
+ 'switch',
+
+ 'tan',
+ 'tanh',
+ 'table_line',
+ 'table',
+ 'tab',
+ 'then',
+ 'timestamp',
+ 'times',
+ 'time',
+ 'timezone',
+ 'title-lines',
+ 'title',
+ 'top-lines',
+ 'to',
+ 'to_lower',
+ 'to_mixed',
+ 'to_upper',
+ 'trace-file',
+ 'trace-table',
+ 'transporting',
+ 'trunc',
+ 'type',
+
+ 'under',
+ 'unique',
+ 'unit',
+ 'user-command',
+ 'using',
+ 'utf-8',
+
+ 'valid',
+ 'value',
+ 'value-request',
+ 'values',
+ 'vary',
+ 'varying',
+ 'version',
+
+ 'warning',
+ 'where',
+ 'width',
+ 'with',
+ 'word',
+ 'with-heading',
+ 'with-title',
+
+ 'xsequence',
+ 'xstring',
+ 'xstrlen',
+
+ 'yes',
+ 'yymmdd',
+
+ 'z',
+ 'zero'
+
+ ),
+
+ //**********************************************************
+ // screen statements
+ //**********************************************************
+
+ 5 => array(
+ 'call subscreen',
+ 'chain',
+ 'endchain',
+ 'on chain-input',
+ 'on chain-request',
+ 'on help-request',
+ 'on input',
+ 'on request',
+ 'on value-request',
+ 'process'
+ ),
+
+ //**********************************************************
+ // internal statements
+ //**********************************************************
+
+ 6 => array(
+ 'generate dynpro',
+ 'generate report',
+ 'import dynpro',
+ 'import nametab',
+ 'include methods',
+ 'load report',
+ 'scan abap-source',
+ 'scan and check abap-source',
+ 'syntax-check for dynpro',
+ 'syntax-check for program',
+ 'syntax-trace',
+ 'system-call',
+ 'system-exit',
+ 'verification-message'
+ ),
+
+ //**********************************************************
+ // Control statements
+ //**********************************************************
+
+ 1 => array(
+ 'assert',
+ 'case',
+ 'catch',
+ 'check',
+ 'cleanup',
+ 'continue',
+ 'do',
+ 'else',
+ 'elseif',
+ 'endat',
+ 'endcase',
+ 'endcatch',
+ 'endif',
+ 'enddo',
+ 'endloop',
+ 'endtry',
+ 'endwhile',
+ 'exit',
+ 'if',
+ 'loop',
+ 'resume',
+ 'retry',
+ 'return',
+ 'stop',
+ 'try',
+ 'when',
+ 'while'
+
+ ),
+
+ //**********************************************************
+ // variable declaration statements
+ //**********************************************************
+
+ 2 => array(
+ 'class-data',
+ 'controls',
+ 'constants',
+ 'data',
+ 'field-symbols',
+ 'fields',
+ 'local',
+ 'parameters',
+ 'ranges',
+ 'select-options',
+ 'statics',
+ 'tables',
+ 'type-pools',
+ 'types'
+ )
+ ),
+ 'SYMBOLS' => array(
+ 0 => array(
+ '->*', '->', '=>',
+ '(', ')', '{', '}', '[', ']', '+', '-', '*', '/', '!', '%', '^', '&', ':', ',', '.'
+ ),
+ 1 => array(
+ '>=', '<=', '<', '>', '='
+ ),
+ 2 => array(
+ '?='
+ )
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false,
+ 6 => false,
+ 7 => false,
+ 8 => false,
+ 9 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #000066; text-transform: uppercase; font-weight: bold; zzz:control;', //control statements
+ 2 => 'color: #cc4050; text-transform: uppercase; font-weight: bold; zzz:data;', //data statements
+ 3 => 'color: #005066; text-transform: uppercase; font-weight: bold; zzz:statement;', //first token of other statements
+ 4 => 'color: #500066; text-transform: uppercase; font-weight: bold; zzz:keyword;', // next tokens of other statements ("keywords")
+ 5 => 'color: #005066; text-transform: uppercase; font-weight: bold; zzz:statement;',
+ 6 => 'color: #000066; text-transform: uppercase; font-weight: bold; zzz:control;',
+ 7 => 'color: #000066; text-transform: uppercase; font-weight: bold; zzz:control;',
+ 8 => 'color: #005066; text-transform: uppercase; font-weight: bold; zzz:statement;',
+ 9 => 'color: #500066; text-transform: uppercase; font-weight: bold; zzz:keyword;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080; font-style: italic;',
+ 2 => 'color: #339933;',
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #808080;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #4da619;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #3399ff;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #202020;',
+ 2 => 'color: #202020;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #808080;',
+ 1 => 'color: #800080;',
+ 2 => 'color: #0000ff;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => 'http://help.sap.com/abapdocu/en/ABAP{FNAMEU}.htm',
+ 2 => 'http://help.sap.com/abapdocu/en/ABAP{FNAMEU}.htm',
+ 3 => 'http://help.sap.com/abapdocu/en/ABAP{FNAMEU}.htm',
+ 4 => '',
+ 5 => '',
+ 6 => '',
+ 7 => '',
+ 8 => '',
+ 9 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '-&gt;',
+ 2 => '=&gt;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'PARSER_CONTROL' => array(
+ 'KEYWORDS' => array(
+ 7 => array(
+ 'SPACE_AS_WHITESPACE' => true
+ ),
+ 8 => array(
+ 'SPACE_AS_WHITESPACE' => true
+ ),
+ 9 => array(
+ 'SPACE_AS_WHITESPACE' => true
+ )
+ )
+ ),
+ 'TAB_WIDTH' => 4
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/actionscript-french.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/actionscript-french.php
new file mode 100644
index 000000000..e81605098
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/actionscript-french.php
@@ -0,0 +1,957 @@
+<?php
+/*************************************************************************************
+ * actionscript.php
+ * ----------------
+ * Author: Steffen Krause (Steffen.krause@muse.de)
+ * Copyright: (c) 2004 Steffen Krause, Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.7.9
+ * CVS Revision Version: $Revision: 1.9 $
+ * Date Started: 2004/06/20
+ * Last Modified: $Date: 2006/04/23 01:14:41 $
+ *
+ * Actionscript language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2005/08/25 (1.0.2)
+ * Author [ NikO ] - http://niko.informatif.org
+ * - add full link for myInstance.methods to http://wiki.media-box.net/documentation/flash
+ * 2004/11/27 (1.0.1)
+ * - Added support for multiple object splitters
+ * 2004/10/27 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Actionscript',
+ 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ '#include',
+ 'for',
+ 'foreach',
+ 'if',
+ 'elseif',
+ 'else',
+ 'while',
+ 'do',
+ 'dowhile',
+ 'endwhile',
+ 'endif',
+ 'switch',
+ 'case',
+ 'endswitch',
+ 'break',
+ 'continue',
+ 'in',
+ 'null',
+ 'false',
+ 'true',
+ 'var',
+ 'default',
+ 'new',
+ '_global',
+ 'undefined',
+ 'super'
+ ),
+ 2 => array(
+ 'static',
+ 'private',
+ 'public',
+ 'class',
+ 'extends',
+ 'implements',
+ 'import',
+ 'return',
+ 'trace',
+ '_quality',
+ '_root',
+ 'set',
+ 'setInterval',
+ 'setProperty',
+ 'stopAllSounds',
+ 'targetPath',
+ 'this',
+ 'typeof',
+ 'unescape',
+ 'updateAfterEvent'
+ ),
+ 3 => array (
+ 'Accessibility',
+ 'Array',
+ 'Boolean',
+ 'Button',
+ 'Camera',
+ 'Color',
+ 'ContextMenuItem',
+ 'ContextMenu',
+ 'Cookie',
+ 'Date',
+ 'Error',
+ 'function',
+ 'FWEndCommand',
+ 'FWJavascript',
+ 'Key',
+ 'LoadMovieNum',
+ 'LoadMovie',
+ 'LoadVariablesNum',
+ 'LoadVariables',
+ 'LoadVars',
+ 'LocalConnection',
+ 'Math',
+ 'Microphone',
+ 'MMExecute',
+ 'MMEndCommand',
+ 'MMSave',
+ 'Mouse',
+ 'MovieClipLoader',
+ 'MovieClip',
+ 'NetConnexion',
+ 'NetStream',
+ 'Number',
+ 'Object',
+ 'printAsBitmapNum',
+ 'printNum',
+ 'printAsBitmap',
+ 'printJob',
+ 'print',
+ 'Selection',
+ 'SharedObject',
+ 'Sound',
+ 'Stage',
+ 'String',
+ 'System',
+ 'TextField',
+ 'TextFormat',
+ 'Tween',
+ 'Video',
+ 'XMLUI',
+ 'XMLNode',
+ 'XMLSocket',
+ 'XML'
+ ),
+ 4 => array (
+ 'isactive',
+ 'updateProperties'
+ ),
+ 5 => array (
+ 'callee',
+ 'caller',
+ ),
+ 6 => array (
+ 'concat',
+ 'join',
+ 'pop',
+ 'push',
+ 'reverse',
+ 'shift',
+ 'slice',
+ 'sort',
+ 'sortOn',
+ 'splice',
+ 'toString',
+ 'unshift'
+ ),
+ 7 => array (
+ 'valueOf'
+ ),
+ 8 => array (
+ 'onDragOut',
+ 'onDragOver',
+ 'onKeyUp',
+ 'onKillFocus',
+ 'onPress',
+ 'onRelease',
+ 'onReleaseOutside',
+ 'onRollOut',
+ 'onRollOver',
+ 'onSetFocus'
+ ),
+ 9 => array (
+ 'setMode',
+ 'setMotionLevel',
+ 'setQuality',
+ 'activityLevel',
+ 'bandwidth',
+ 'currentFps',
+ 'fps',
+ 'index',
+ 'motionLevel',
+ 'motionTimeOut',
+ 'muted',
+ 'names',
+ 'quality',
+ 'onActivity',
+ 'onStatus'
+ ),
+ 10 => array (
+ 'getRGB',
+ 'setRGB',
+ 'getTransform',
+ 'setTransform'
+ ),
+ 11 => array (
+ 'caption',
+ 'enabled',
+ 'separatorBefore',
+ 'visible',
+ 'onSelect'
+ ),
+ 12 => array (
+ 'setCookie',
+ 'getcookie'
+ ),
+ 13 => array (
+ 'hideBuiltInItems',
+ 'builtInItems',
+ 'customItems',
+ 'onSelect'
+ ),
+ 14 => array (
+ 'CustomActions.get',
+ 'CustomActions.install',
+ 'CustomActions.list',
+ 'CustomActions.uninstall',
+ ),
+ 15 => array (
+ 'getDate',
+ 'getDay',
+ 'getFullYear',
+ 'getHours',
+ 'getMilliseconds',
+ 'getMinutes',
+ 'getMonth',
+ 'getSeconds',
+ 'getTime',
+ 'getTimezoneOffset',
+ 'getUTCDate',
+ 'getUTCDay',
+ 'getUTCFullYear',
+ 'getUTCHours',
+ 'getUTCMinutes',
+ 'getUTCMilliseconds',
+ 'getUTCMonth',
+ 'getUTCSeconds',
+ 'getYear',
+ 'setDate',
+ 'setFullYear',
+ 'setHours',
+ 'setMilliseconds',
+ 'setMinutes',
+ 'setMonth',
+ 'setSeconds',
+ 'setTime',
+ 'setUTCDate',
+ 'setUTCDay',
+ 'setUTCFullYear',
+ 'setUTCHours',
+ 'setUTCMinutes',
+ 'setUTCMilliseconds',
+ 'setUTCMonth',
+ 'setUTCSeconds',
+ 'setYear',
+ 'UTC'
+ ),
+ 16 => array (
+ 'message',
+ 'name',
+ 'throw',
+ 'try',
+ 'catch',
+ 'finally'
+ ),
+ 17 => array (
+ 'apply',
+ 'call'
+ ),
+ 18 => array (
+ 'BACKSPACE',
+ 'CAPSLOCK',
+ 'CONTROL',
+ 'DELETEKEY',
+ 'DOWN',
+ 'END',
+ 'ENTER',
+ 'ESCAPE',
+ 'getAscii',
+ 'getCode',
+ 'HOME',
+ 'INSERT',
+ 'isDown',
+ 'isToggled',
+ 'LEFT',
+ 'onKeyDown',
+ 'onKeyUp',
+ 'PGDN',
+ 'PGUP',
+ 'RIGHT',
+ 'SPACE',
+ 'TAB',
+ 'UP'
+ ),
+ 19 => array (
+ 'addRequestHeader',
+ 'contentType',
+ 'decode'
+ ),
+ 20 => array (
+ 'allowDomain',
+ 'allowInsecureDomain',
+ 'close',
+ 'domain'
+ ),
+ 21 => array (
+ 'abs',
+ 'acos',
+ 'asin',
+ 'atan',
+ 'atan2',
+ 'ceil',
+ 'cos',
+ 'exp',
+ 'floor',
+ 'log',
+ 'LN2',
+ 'LN10',
+ 'LOG2E',
+ 'LOG10E',
+ 'max',
+ 'min',
+ 'PI',
+ 'pow',
+ 'random',
+ 'sin',
+ 'SQRT1_2',
+ 'sqrt',
+ 'tan',
+ 'round',
+ 'SQRT2'
+ ),
+ 22 => array (
+ 'activityLevel',
+ 'muted',
+ 'names',
+ 'onActivity',
+ 'onStatus',
+ 'setRate',
+ 'setGain',
+ 'gain',
+ 'rate',
+ 'setSilenceLevel',
+ 'setUseEchoSuppression',
+ 'silenceLevel',
+ 'silenceTimeOut',
+ 'useEchoSuppression'
+ ),
+ 23 => array (
+ 'hide',
+ 'onMouseDown',
+ 'onMouseMove',
+ 'onMouseUp',
+ 'onMouseWeel',
+ 'show'
+ ),
+ 24 => array (
+ '_alpha',
+ 'attachAudio',
+ 'attachMovie',
+ 'beginFill',
+ 'beginGradientFill',
+ 'clear',
+ 'createEmptyMovieClip',
+ 'createTextField',
+ '_current',
+ 'curveTo',
+ '_dropTarget',
+ 'duplicateMovieClip',
+ 'endFill',
+ 'focusEnabled',
+ 'enabled',
+ '_focusrec',
+ '_framesLoaded',
+ 'getBounds',
+ 'getBytesLoaded',
+ 'getBytesTotal',
+ 'getDepth',
+ 'getInstanceAtDepth',
+ 'getNextHighestDepth',
+ 'getSWFVersion',
+ 'getTextSnapshot',
+ 'getURL',
+ 'globalToLocal',
+ 'gotoAndPlay',
+ 'gotoAndStop',
+ '_height',
+ 'hitArea',
+ 'hitTest',
+ 'lineStyle',
+ 'lineTo',
+ 'localToGlobal',
+ '_lockroot',
+ 'menu',
+ 'onUnload',
+ '_parent',
+ 'play',
+ 'prevFrame',
+ '_quality',
+ 'removeMovieClip',
+ '_rotation',
+ 'setMask',
+ '_soundbuftime',
+ 'startDrag',
+ 'stopDrag',
+ 'stop',
+ 'swapDepths',
+ 'tabChildren',
+ '_target',
+ '_totalFrames',
+ 'trackAsMenu',
+ 'unloadMovie',
+ 'useHandCursor',
+ '_visible',
+ '_width',
+ '_xmouse',
+ '_xscale',
+ '_x',
+ '_ymouse',
+ '_yscale',
+ '_y'
+ ),
+ 25 => array (
+ 'getProgress',
+ 'loadClip',
+ 'onLoadComplete',
+ 'onLoadError',
+ 'onLoadInit',
+ 'onLoadProgress',
+ 'onLoadStart'
+ ),
+ 26 => array (
+ 'bufferLength',
+ 'currentFps',
+ 'seek',
+ 'setBufferTime',
+ 'bufferTime',
+ 'time',
+ 'pause'
+ ),
+ 27 => array (
+ 'MAX_VALUE',
+ 'MIN_VALUE',
+ 'NEGATIVE_INFINITY',
+ 'POSITIVE_INFINITY'
+ ),
+ 28 => array (
+ 'addProperty',
+ 'constructor',
+ '__proto__',
+ 'registerClass',
+ '__resolve',
+ 'unwatch',
+ 'watch',
+ 'onUpDate'
+ ),
+ 29 => array (
+ 'addPage'
+ ),
+ 30 => array (
+ 'getBeginIndex',
+ 'getCaretIndex',
+ 'getEndIndex',
+ 'setSelection'
+ ),
+ 31 => array (
+ 'flush',
+ 'getLocal',
+ 'getSize'
+ ),
+ 32 => array (
+ 'attachSound',
+ 'duration',
+ 'getPan',
+ 'getVolume',
+ 'onID3',
+ 'loadSound',
+ 'id3',
+ 'onSoundComplete',
+ 'position',
+ 'setPan',
+ 'setVolume'
+ ),
+ 33 => array (
+ 'getBeginIndex',
+ 'getCaretIndex',
+ 'getEndIndex',
+ 'setSelection'
+ ),
+ 34 => array (
+ 'getEndIndex',
+ ),
+ 35 => array (
+ 'align',
+ 'height',
+ 'width',
+ 'onResize',
+ 'scaleMode',
+ 'showMenu'
+ ),
+ 36 => array (
+ 'charAt',
+ 'charCodeAt',
+ 'concat',
+ 'fromCharCode',
+ 'indexOf',
+ 'lastIndexOf',
+ 'substr',
+ 'substring',
+ 'toLowerCase',
+ 'toUpperCase'
+ ),
+ 37 => array (
+ 'avHardwareDisable',
+ 'hasAccessibility',
+ 'hasAudioEncoder',
+ 'hasAudio',
+ 'hasEmbeddedVideo',
+ 'hasMP3',
+ 'hasPrinting',
+ 'hasScreenBroadcast',
+ 'hasScreenPlayback',
+ 'hasStreamingAudio',
+ 'hasStreamingVideo',
+ 'hasVideoEncoder',
+ 'isDebugger',
+ 'language',
+ 'localFileReadDisable',
+ 'manufacturer',
+ 'os',
+ 'pixelAspectRatio',
+ 'playerType',
+ 'screenColor',
+ 'screenDPI',
+ 'screenResolutionX',
+ 'screenResolutionY',
+ 'serverString',
+ 'version'
+ ),
+ 38 => array (
+ 'allowDomain',
+ 'allowInsecureDomain',
+ 'loadPolicyFile'
+ ),
+ 39 => array (
+ 'exactSettings',
+ 'setClipboard',
+ 'showSettings',
+ 'useCodepage'
+ ),
+ 40 => array (
+ 'getStyle',
+ 'getStyleNames',
+ 'parseCSS',
+ 'setStyle',
+ 'transform'
+ ),
+ 41 => array (
+ 'autoSize',
+ 'background',
+ 'backgroundColor',
+ 'border',
+ 'borderColor',
+ 'bottomScroll',
+ 'condenseWhite',
+ 'embedFonts',
+ 'getFontList',
+ 'getNewTextFormat',
+ 'getTextFormat',
+ 'hscroll',
+ 'htmlText',
+ 'html',
+ 'maxChars',
+ 'maxhscroll',
+ 'maxscroll',
+ 'mouseWheelEnabled',
+ 'multiline',
+ 'onScroller',
+ 'password',
+ 'removeTextField',
+ 'replaceSel',
+ 'replaceText',
+ 'restrict',
+ 'scroll',
+ 'selectable',
+ 'setNewTextFormat',
+ 'setTextFormat',
+ 'styleSheet',
+ 'tabEnabled',
+ 'tabIndex',
+ 'textColor',
+ 'textHeight',
+ 'textWidth',
+ 'text',
+ 'type',
+ '_url',
+ 'variable',
+ 'wordWrap'
+ ),
+ 42 => array (
+ 'blockIndent',
+ 'bold',
+ 'bullet',
+ 'font',
+ 'getTextExtent',
+ 'indent',
+ 'italic',
+ 'leading',
+ 'leftMargin',
+ 'rightMargin',
+ 'size',
+ 'tabStops',
+ 'underline'
+ ),
+ 43 => array (
+ 'findText',
+ 'getCount',
+ 'getSelected',
+ 'getSelectedText',
+ 'getText',
+ 'hitTestTextNearPos',
+ 'setSelectColor',
+ 'setSelected'
+ ),
+ 44 => array (
+ 'begin',
+ 'change',
+ 'continueTo',
+ 'fforward',
+ 'finish',
+ 'func',
+ 'FPS',
+ 'getPosition',
+ 'isPlaying',
+ 'looping',
+ 'obj',
+ 'onMotionChanged',
+ 'onMotionFinished',
+ 'onMotionLooped',
+ 'onMotionStarted',
+ 'onMotionResumed',
+ 'onMotionStopped',
+ 'prop',
+ 'rewind',
+ 'resume',
+ 'setPosition',
+ 'time',
+ 'userSeconds',
+ 'yoyo'
+ ),
+ 45 => array (
+ 'attachVideo',
+ 'deblocking',
+ 'smoothing'
+ ),
+ 46 => array (
+ 'addRequestHeader',
+ 'appendChild',
+ 'attributes',
+ 'childNodes',
+ 'cloneNode',
+ 'contentType',
+ 'createElement',
+ 'createTextNode',
+ 'docTypeDecl',
+ 'firstChild',
+ 'hasChildNodes',
+ 'ignoreWhite',
+ 'insertBefore',
+ 'lastChild',
+ 'nextSibling',
+ 'nodeName',
+ 'nodeType',
+ 'nodeValue',
+ 'parentNode',
+ 'parseXML',
+ 'previousSibling',
+ 'removeNode',
+ 'xmlDecl'
+ ),
+ 47 => array (
+ 'onClose',
+ 'onXML'
+ ),
+ 48 => array (
+ 'add',
+ 'and',
+ '_highquality',
+ 'chr',
+ 'eq',
+ 'ge',
+ 'ifFrameLoaded',
+ 'int',
+ 'le',
+ 'it',
+ 'mbchr',
+ 'mblength',
+ 'mbord',
+ 'ne',
+ 'not',
+ 'or',
+ 'ord',
+ 'tellTarget',
+ 'toggleHighQuality'
+ ),
+ 49 => array (
+ 'ASSetPropFlags',
+ 'ASnative',
+ 'ASconstructor',
+ 'AsSetupError',
+ 'FWEndCommand',
+ 'FWJavascript',
+ 'MMEndCommand',
+ 'MMSave',
+ 'XMLUI'
+ ),
+ 50 => array (
+ 'System.capabilities'
+ ),
+ 51 => array (
+ 'System.security'
+ ),
+ 52 => array (
+ 'TextField.StyleSheet'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '[', ']', '{', '}', '!', '@', '%', '&', '*', '|', '/', '<', '>','='
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ 2 => true,
+ 3 => true,
+ 4 => true,
+ 5 => true,
+ 6 => true,
+ 7 => true,
+ 8 => true,
+ 9 => true,
+ 10 => true,
+ 11 => true,
+ 12 => true,
+ 13 => true,
+ 14 => true,
+ 15 => true,
+ 16 => true,
+ 17 => true,
+ 18 => true,
+ 19 => true,
+ 20 => true,
+ 21 => true,
+ 22 => true,
+ 23 => true,
+ 24 => true,
+ 25 => true,
+ 26 => true,
+ 27 => true,
+ 28 => true,
+ 29 => true,
+ 30 => true,
+ 31 => true,
+ 32 => true,
+ 33 => true,
+ 34 => true,
+ 35 => true,
+ 36 => true,
+ 37 => true,
+ 38 => true,
+ 39 => true,
+ 40 => true,
+ 41 => true,
+ 42 => true,
+ 43 => true,
+ 44 => true,
+ 45 => true,
+ 46 => true,
+ 47 => true,
+ 48 => true,
+ 49 => true,
+ 50 => true,
+ 51 => true,
+ 52 => true
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #0000ff;',
+ 2 => 'color: #006600;',
+ 3 => 'color: #000080;',
+ 4 => 'color: #006600;',
+ 5 => 'color: #006600;',
+ 6 => 'color: #006600;',
+ 7 => 'color: #006600;',
+ 8 => 'color: #006600;',
+ 9 => 'color: #006600;',
+ 10 => 'color: #006600;',
+ 11 => 'color: #006600;',
+ 12 => 'color: #006600;',
+ 13 => 'color: #006600;',
+ 14 => 'color: #006600;',
+ 15 => 'color: #006600;',
+ 16 => 'color: #006600;',
+ 17 => 'color: #006600;',
+ 18 => 'color: #006600;',
+ 19 => 'color: #006600;',
+ 20 => 'color: #006600;',
+ 21 => 'color: #006600;',
+ 22 => 'color: #006600;',
+ 23 => 'color: #006600;',
+ 24 => 'color: #006600;',
+ 25 => 'color: #006600;',
+ 26 => 'color: #006600;',
+ 27 => 'color: #006600;',
+ 28 => 'color: #006600;',
+ 29 => 'color: #006600;',
+ 30 => 'color: #006600;',
+ 31 => 'color: #006600;',
+ 32 => 'color: #006600;',
+ 33 => 'color: #006600;',
+ 34 => 'color: #006600;',
+ 35 => 'color: #006600;',
+ 36 => 'color: #006600;',
+ 37 => 'color: #006600;',
+ 38 => 'color: #006600;',
+ 39 => 'color: #006600;',
+ 40 => 'color: #006600;',
+ 41 => 'color: #006600;',
+ 42 => 'color: #006600;',
+ 43 => 'color: #006600;',
+ 44 => 'color: #006600;',
+ 45 => 'color: #006600;',
+ 46 => 'color: #006600;',
+ 47 => 'color: #006600;',
+ 48 => 'color: #CC0000;',
+ 49 => 'color: #5700d1;',
+ 50 => 'color: #006600;',
+ 51 => 'color: #006600;',
+ 52 => 'color: #CC0000;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #ff8000; font-style: italic;',
+ 2 => 'color: #ff8000; font-style: italic;',
+ 'MULTI' => 'color: #ff8000; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #333333;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #333333; background-color: #eeeeee;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #c50000;'
+ ),
+
+ 'SYMBOLS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #006600;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => 'http://wiki.media-box.net/documentation/flash/{FNAME}',
+ 2 => 'http://wiki.media-box.net/documentation/flash/{FNAME}',
+ 3 => 'http://wiki.media-box.net/documentation/flash/{FNAME}',
+ 4 => 'http://wiki.media-box.net/documentation/flash/accessibility/{FNAME}',
+ 5 => 'http://wiki.media-box.net/documentation/flash/arguments/{FNAME}',
+ 6 => 'http://wiki.media-box.net/documentation/flash/array/{FNAME}',
+ 7 => 'http://wiki.media-box.net/documentation/flash/boolean/{FNAME}',
+ 8 => 'http://wiki.media-box.net/documentation/flash/button/{FNAME}',
+ 9 => 'http://wiki.media-box.net/documentation/flash/camera/{FNAME}',
+ 10 => 'http://wiki.media-box.net/documentation/flash/color/{FNAME}',
+ 11 => 'http://wiki.media-box.net/documentation/flash/contextmenuitem/{FNAME}',
+ 12 => 'http://wiki.media-box.net/documentation/flash/contextmenu/{FNAME}',
+ 13 => 'http://wiki.media-box.net/documentation/flash/cookie/{FNAME}',
+ 14 => 'http://wiki.media-box.net/documentation/flash/customactions/{FNAME}',
+ 15 => 'http://wiki.media-box.net/documentation/flash/date/{FNAME}',
+ 16 => 'http://wiki.media-box.net/documentation/flash/error/{FNAME}',
+ 17 => 'http://wiki.media-box.net/documentation/flash/function/{FNAME}',
+ 18 => 'http://wiki.media-box.net/documentation/flash/key/{FNAME}',
+ 19 => 'http://wiki.media-box.net/documentation/flash/loadvars/{FNAME}',
+ 20 => 'http://wiki.media-box.net/documentation/flash/localconnection/{FNAME}',
+ 21 => 'http://wiki.media-box.net/documentation/flash/math/{FNAME}',
+ 22 => 'http://wiki.media-box.net/documentation/flash/microphone/{FNAME}',
+ 23 => 'http://wiki.media-box.net/documentation/flash/mouse/{FNAME}',
+ 24 => 'http://wiki.media-box.net/documentation/flash/movieclip/{FNAME}',
+ 25 => 'http://wiki.media-box.net/documentation/flash/moviecliploader/{FNAME}',
+ 26 => 'http://wiki.media-box.net/documentation/flash/netstream/{FNAME}',
+ 27 => 'http://wiki.media-box.net/documentation/flash/number/{FNAME}',
+ 28 => 'http://wiki.media-box.net/documentation/flash/object/{FNAME}',
+ 29 => 'http://wiki.media-box.net/documentation/flash/printJob/{FNAME}',
+ 30 => 'http://wiki.media-box.net/documentation/flash/selection/{FNAME}',
+ 31 => 'http://wiki.media-box.net/documentation/flash/sharedobject/{FNAME}',
+ 32 => 'http://wiki.media-box.net/documentation/flash/sound/{FNAME}',
+ 33 => 'http://wiki.media-box.net/documentation/flash/selection/{FNAME}',
+ 34 => 'http://wiki.media-box.net/documentation/flash/sharedobject/{FNAME}',
+ 35 => 'http://wiki.media-box.net/documentation/flash/stage/{FNAME}',
+ 36 => 'http://wiki.media-box.net/documentation/flash/string/{FNAME}',
+ 37 => 'http://wiki.media-box.net/documentation/flash/system/capabilities/{FNAME}',
+ 38 => 'http://wiki.media-box.net/documentation/flash/system/security/{FNAME}',
+ 39 => 'http://wiki.media-box.net/documentation/flash/system/{FNAME}',
+ 40 => 'http://wiki.media-box.net/documentation/flash/textfield/stylesheet/{FNAME}',
+ 41 => 'http://wiki.media-box.net/documentation/flash/textfield/{FNAME}',
+ 42 => 'http://wiki.media-box.net/documentation/flash/textformat/{FNAME}',
+ 43 => 'http://wiki.media-box.net/documentation/flash/textsnapshot/{FNAME}',
+ 44 => 'http://wiki.media-box.net/documentation/flash/tween/{FNAME}',
+ 45 => 'http://wiki.media-box.net/documentation/flash/video/{FNAME}',
+ 46 => 'http://wiki.media-box.net/documentation/flash/xml/{FNAME}',
+ 47 => 'http://wiki.media-box.net/documentation/flash/xmlsocket/{FNAME}',
+ 48 => 'http://wiki.media-box.net/documentation/flash/{FNAME}',
+ 49 => 'http://wiki.media-box.net/documentation/flash/{FNAME}',
+ 50 => 'http://wiki.media-box.net/documentation/flash/system/capabilities',
+ 51 => 'http://wiki.media-box.net/documentation/flash/system/security',
+ 52 => 'http://wiki.media-box.net/documentation/flash/textfield/stylesheet'
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(),
+ 'HIGHLIGHT_STRICT_BLOCK' => array()
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/actionscript.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/actionscript.php
new file mode 100644
index 000000000..016dc8e90
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/actionscript.php
@@ -0,0 +1,197 @@
+<?php
+/*************************************************************************************
+ * actionscript.php
+ * ----------------
+ * Author: Steffen Krause (Steffen.krause@muse.de)
+ * Copyright: (c) 2004 Steffen Krause, Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/06/20
+ *
+ * Actionscript language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2004/11/27 (1.0.1)
+ * - Added support for multiple object splitters
+ * 2004/10/27 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'ActionScript',
+ 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ '#include', 'for', 'foreach', 'each', 'if', 'elseif', 'else', 'while', 'do', 'dowhile',
+ 'endwhile', 'endif', 'switch', 'case', 'endswitch', 'return', 'break', 'continue', 'in'
+ ),
+ 2 => array(
+ 'null', 'false', 'true', 'var',
+ 'default', 'function', 'class',
+ 'new', '_global'
+ ),
+ 3 => array(
+ '#endinitclip', '#initclip', '__proto__', '_accProps', '_alpha', '_currentframe',
+ '_droptarget', '_focusrect', '_framesloaded', '_height', '_highquality', '_lockroot',
+ '_name', '_parent', '_quality', '_root', '_rotation', '_soundbuftime', '_target', '_totalframes',
+ '_url', '_visible', '_width', '_x', '_xmouse', '_xscale', '_y', '_ymouse', '_yscale', 'abs',
+ 'Accessibility', 'acos', 'activityLevel', 'add', 'addListener', 'addPage', 'addProperty',
+ 'addRequestHeader', 'align', 'allowDomain', 'allowInsecureDomain', 'and', 'appendChild',
+ 'apply', 'Arguments', 'Array', 'asfunction', 'asin', 'atan', 'atan2', 'attachAudio', 'attachMovie',
+ 'attachSound', 'attachVideo', 'attributes', 'autosize', 'avHardwareDisable', 'background',
+ 'backgroundColor', 'BACKSPACE', 'bandwidth', 'beginFill', 'beginGradientFill', 'blockIndent',
+ 'bold', 'Boolean', 'border', 'borderColor', 'bottomScroll', 'bufferLength', 'bufferTime',
+ 'builtInItems', 'bullet', 'Button', 'bytesLoaded', 'bytesTotal', 'call', 'callee', 'caller',
+ 'Camera', 'capabilities', 'CAPSLOCK', 'caption', 'catch', 'ceil', 'charAt', 'charCodeAt',
+ 'childNodes', 'chr', 'clear', 'clearInterval', 'cloneNode', 'close', 'Color', 'concat',
+ 'connect', 'condenseWhite', 'constructor', 'contentType', 'ContextMenu', 'ContextMenuItem',
+ 'CONTROL', 'copy', 'cos', 'createElement', 'createEmptyMovieClip', 'createTextField',
+ 'createTextNode', 'currentFps', 'curveTo', 'CustomActions', 'customItems', 'data', 'Date',
+ 'deblocking', 'delete', 'DELETEKEY', 'docTypeDecl', 'domain', 'DOWN',
+ 'duplicateMovieClip', 'duration', 'dynamic', 'E', 'embedFonts', 'enabled',
+ 'END', 'endFill', 'ENTER', 'eq', 'Error', 'ESCAPE(Konstante)', 'escape(Funktion)', 'eval',
+ 'exactSettings', 'exp', 'extends', 'finally', 'findText', 'firstChild', 'floor',
+ 'flush', 'focusEnabled', 'font', 'fps', 'fromCharCode', 'fscommand',
+ 'gain', 'ge', 'get', 'getAscii', 'getBeginIndex', 'getBounds', 'getBytesLoaded', 'getBytesTotal',
+ 'getCaretIndex', 'getCode', 'getCount', 'getDate', 'getDay', 'getDepth', 'getEndIndex', 'getFocus',
+ 'getFontList', 'getFullYear', 'getHours', 'getInstanceAtDepth', 'getLocal', 'getMilliseconds',
+ 'getMinutes', 'getMonth', 'getNewTextFormat', 'getNextHighestDepth', 'getPan', 'getProgress',
+ 'getProperty', 'getRGB', 'getSeconds', 'getSelected', 'getSelectedText', 'getSize', 'getStyle',
+ 'getStyleNames', 'getSWFVersion', 'getText', 'getTextExtent', 'getTextFormat', 'getTextSnapshot',
+ 'getTime', 'getTimer', 'getTimezoneOffset', 'getTransform', 'getURL', 'getUTCDate', 'getUTCDay',
+ 'getUTCFullYear', 'getUTCHours', 'getUTCMilliseconds', 'getUTCMinutes', 'getUTCMonth', 'getUTCSeconds',
+ 'getVersion', 'getVolume', 'getYear', 'globalToLocal', 'goto', 'gotoAndPlay', 'gotoAndStop',
+ 'hasAccessibility', 'hasAudio', 'hasAudioEncoder', 'hasChildNodes', 'hasEmbeddedVideo', 'hasMP3',
+ 'hasPrinting', 'hasScreenBroadcast', 'hasScreenPlayback', 'hasStreamingAudio', 'hasStreamingVideo',
+ 'hasVideoEncoder', 'height', 'hide', 'hideBuiltInItems', 'hitArea', 'hitTest', 'hitTestTextNearPos',
+ 'HOME', 'hscroll', 'html', 'htmlText', 'ID3', 'ifFrameLoaded', 'ignoreWhite', 'implements',
+ 'import', 'indent', 'index', 'indexOf', 'Infinity', '-Infinity', 'INSERT', 'insertBefore', 'install',
+ 'instanceof', 'int', 'interface', 'isActive', 'isDebugger', 'isDown', 'isFinite', 'isNaN', 'isToggled',
+ 'italic', 'join', 'Key', 'language', 'lastChild', 'lastIndexOf', 'le', 'leading', 'LEFT', 'leftMargin',
+ 'length', 'level', 'lineStyle', 'lineTo', 'list', 'LN10', 'LN2', 'load', 'loadClip', 'loaded', 'loadMovie',
+ 'loadMovieNum', 'loadSound', 'loadVariables', 'loadVariablesNum', 'LoadVars', 'LocalConnection',
+ 'localFileReadDisable', 'localToGlobal', 'log', 'LOG10E', 'LOG2E', 'manufacturer', 'Math', 'max',
+ 'MAX_VALUE', 'maxChars', 'maxhscroll', 'maxscroll', 'mbchr', 'mblength', 'mbord', 'mbsubstring', 'menu',
+ 'message', 'Microphone', 'min', 'MIN_VALUE', 'MMExecute', 'motionLevel', 'motionTimeOut', 'Mouse',
+ 'mouseWheelEnabled', 'moveTo', 'Movieclip', 'MovieClipLoader', 'multiline', 'muted', 'name', 'names', 'NaN',
+ 'ne', 'NEGATIVE_INFINITY', 'NetConnection', 'NetStream', 'newline', 'nextFrame',
+ 'nextScene', 'nextSibling', 'nodeName', 'nodeType', 'nodeValue', 'not', 'Number', 'Object',
+ 'on', 'onActivity', 'onChanged', 'onClipEvent', 'onClose', 'onConnect', 'onData', 'onDragOut',
+ 'onDragOver', 'onEnterFrame', 'onID3', 'onKeyDown', 'onKeyUp', 'onKillFocus', 'onLoad', 'onLoadComplete',
+ 'onLoadError', 'onLoadInit', 'onLoadProgress', 'onLoadStart', 'onMouseDown', 'onMouseMove', 'onMouseUp',
+ 'onMouseWheel', 'onPress', 'onRelease', 'onReleaseOutside', 'onResize', 'onRollOut', 'onRollOver',
+ 'onScroller', 'onSelect', 'onSetFocus', 'onSoundComplete', 'onStatus', 'onUnload', 'onUpdate', 'onXML',
+ 'or(logischesOR)', 'ord', 'os', 'parentNode', 'parseCSS', 'parseFloat', 'parseInt', 'parseXML', 'password',
+ 'pause', 'PGDN', 'PGUP', 'PI', 'pixelAspectRatio', 'play', 'playerType', 'pop', 'position',
+ 'POSITIVE_INFINITY', 'pow', 'prevFrame', 'previousSibling', 'prevScene', 'print', 'printAsBitmap',
+ 'printAsBitmapNum', 'PrintJob', 'printNum', 'private', 'prototype', 'public', 'push', 'quality',
+ 'random', 'rate', 'registerClass', 'removeListener', 'removeMovieClip', 'removeNode', 'removeTextField',
+ 'replaceSel', 'replaceText', 'resolutionX', 'resolutionY', 'restrict', 'reverse', 'RIGHT',
+ 'rightMargin', 'round', 'scaleMode', 'screenColor', 'screenDPI', 'screenResolutionX', 'screenResolutionY',
+ 'scroll', 'seek', 'selectable', 'Selection', 'send', 'sendAndLoad', 'separatorBefore', 'serverString',
+ 'set', 'setvariable', 'setBufferTime', 'setClipboard', 'setDate', 'setFocus', 'setFullYear', 'setGain',
+ 'setHours', 'setInterval', 'setMask', 'setMilliseconds', 'setMinutes', 'setMode', 'setMonth',
+ 'setMotionLevel', 'setNewTextFormat', 'setPan', 'setProperty', 'setQuality', 'setRate', 'setRGB',
+ 'setSeconds', 'setSelectColor', 'setSelected', 'setSelection', 'setSilenceLevel', 'setStyle',
+ 'setTextFormat', 'setTime', 'setTransform', 'setUseEchoSuppression', 'setUTCDate', 'setUTCFullYear',
+ 'setUTCHours', 'setUTCMilliseconds', 'setUTCMinutes', 'setUTCMonth', 'setUTCSeconds', 'setVolume',
+ 'setYear', 'SharedObject', 'SHIFT(Konstante)', 'shift(Methode)', 'show', 'showMenu', 'showSettings',
+ 'silenceLevel', 'silenceTimeout', 'sin', 'size', 'slice', 'smoothing', 'sort', 'sortOn', 'Sound', 'SPACE',
+ 'splice', 'split', 'sqrt', 'SQRT1_2', 'SQRT2', 'Stage', 'start', 'startDrag', 'static', 'status', 'stop',
+ 'stopAllSounds', 'stopDrag', 'String', 'StyleSheet(Klasse)', 'styleSheet(Eigenschaft)', 'substr',
+ 'substring', 'super', 'swapDepths', 'System', 'TAB', 'tabChildren', 'tabEnabled', 'tabIndex',
+ 'tabStops', 'tan', 'target', 'targetPath', 'tellTarget', 'text', 'textColor', 'TextField', 'TextFormat',
+ 'textHeight', 'TextSnapshot', 'textWidth', 'this', 'throw', 'time', 'toggleHighQuality', 'toLowerCase',
+ 'toString', 'toUpperCase', 'trace', 'trackAsMenu', 'try', 'type', 'typeof', 'undefined',
+ 'underline', 'unescape', 'uninstall', 'unloadClip', 'unloadMovie', 'unLoadMovieNum', 'unshift', 'unwatch',
+ 'UP', 'updateAfterEvent', 'updateProperties', 'url', 'useCodePage', 'useEchoSuppression', 'useHandCursor',
+ 'UTC', 'valueOf', 'variable', 'version', 'Video', 'visible', 'void', 'watch', 'width',
+ 'with', 'wordwrap', 'XML', 'xmlDecl', 'XMLNode', 'XMLSocket'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '[', ']', '{', '}', '!', '@', '%', '&', '*', '|', '/', '<', '>'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #b1b100;',
+ 2 => 'color: #000000; font-weight: bold;',
+ 3 => 'color: #0066CC;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080; font-style: italic;',
+ 2 => 'color: #808080; font-style: italic;',
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #006600;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(),
+ 'HIGHLIGHT_STRICT_BLOCK' => array()
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/actionscript3.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/actionscript3.php
new file mode 100644
index 000000000..a54e9d4df
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/actionscript3.php
@@ -0,0 +1,473 @@
+<?php
+/*************************************************************************************
+ * actionscript3.php
+ * ----------------
+ * Author: Jordi Boggiano (j.boggiano@seld.be)
+ * Copyright: (c) 2007 Jordi Boggiano (http://www.seld.be/), Benny Baumann (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2007/11/26
+ *
+ * ActionScript3 language file for GeSHi.
+ *
+ * All keywords scraped from the Flex 2.0.1 Documentation
+ *
+ * The default style is based on FlexBuilder2 coloring, with the addition of class, package, method and
+ * constant names that are highlighted to help identifying problem when used on public pastebins.
+ *
+ * For styling, keywords data from 0 to 1 (accessible through .kw1, etc.) are described here :
+ *
+ * 1 : operators
+ * 2 : 'var' keyword
+ * 3 : 'function' keyword
+ * 4 : 'class' and 'package' keywords
+ * 5 : all flash.* class names plus Top Level classes, mx are excluded
+ * 6 : all flash.* package names, mx are excluded
+ * 7 : valid flash method names and properties (there is no type checks sadly, for example String().x will be highlighted as 'x' is valid, but obviously strings don't have a x property)
+ * 8 : valid flash constant names (again, no type check)
+ *
+ *
+ * CHANGES
+ * -------
+ * 2007/12/06 (1.0.7.22)
+ * - Added the 'this' keyword (oops)
+ *
+ * TODO (updated 2007/11/30)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'ActionScript 3',
+ 'COMMENT_SINGLE' => array(1 => '//'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'COMMENT_REGEXP' => array(
+ //Regular expressions
+ 2 => "/(?<=[\\s^])(s|tr|y)\\/(?:\\\\.|(?!\n)[^\\/\\\\])+\\/(?:\\\\.|(?!\n)[^\\/\\\\])*\\/[msixpogcde]*(?=[\\s$\\.\\;])|(?<=[\\s^(=])(m|q[qrwx]?)?\\/(?:\\\\.|(?!\n)[^\\/\\\\])+\\/[msixpogc]*(?=[\\s$\\.\\,\\;\\)])/iU",
+ ),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'with', 'while', 'void', 'undefined', 'typeof', 'try', 'true',
+ 'throw', 'this', 'switch', 'super', 'set', 'return', 'public', 'protected',
+ 'private', 'null', 'new', 'is', 'internal', 'instanceof', 'in',
+ 'import', 'if', 'get', 'for', 'false', 'else', 'each', 'do',
+ 'delete', 'default', 'continue', 'catch', 'case', 'break', 'as',
+ 'extends'
+ ),
+ 2 => array(
+ 'var'
+ ),
+ 3 => array(
+ 'function'
+ ),
+ 4 => array(
+ 'class', 'package'
+ ),
+ 6 => array(
+ 'flash.xml', 'flash.utils', 'flash.ui', 'flash.text',
+ 'flash.system', 'flash.profiler', 'flash.printing', 'flash.net',
+ 'flash.media', 'flash.geom', 'flash.filters', 'flash.external',
+ 'flash.events', 'flash.errors', 'flash.display',
+ 'flash.accessibility'
+ ),
+ 7 => array(
+ 'zoom', 'year', 'y', 'xmlDecl', 'x', 'writeUnsignedInt',
+ 'writeUTFBytes', 'writeUTF', 'writeShort', 'writeObject',
+ 'writeMultiByte', 'writeInt', 'writeFloat', 'writeExternal',
+ 'writeDynamicProperty', 'writeDynamicProperties', 'writeDouble',
+ 'writeBytes', 'writeByte', 'writeBoolean', 'wordWrap',
+ 'willTrigger', 'width', 'volume', 'visible', 'videoWidth',
+ 'videoHeight', 'version', 'valueOf', 'value', 'usingTLS',
+ 'useRichTextClipboard', 'useHandCursor', 'useEchoSuppression',
+ 'useCodePage', 'url', 'uri', 'uploadCompleteData', 'upload',
+ 'updateProperties', 'updateAfterEvent', 'upState', 'unshift',
+ 'unlock', 'unload', 'union', 'unescapeMultiByte', 'unescape',
+ 'underline', 'uncompress', 'type', 'ty', 'tx', 'transparent',
+ 'translate', 'transformPoint', 'transform', 'trackAsMenu', 'track',
+ 'trace', 'totalMemory', 'totalFrames', 'topLeft', 'top',
+ 'togglePause', 'toXMLString', 'toUpperCase', 'toUTCString',
+ 'toTimeString', 'toString', 'toPrecision', 'toLowerCase',
+ 'toLocaleUpperCase', 'toLocaleTimeString', 'toLocaleString',
+ 'toLocaleLowerCase', 'toLocaleDateString', 'toFixed',
+ 'toExponential', 'toDateString', 'timezoneOffset', 'timerComplete',
+ 'timer', 'time', 'threshold', 'thickness', 'textWidth',
+ 'textSnapshot', 'textInput', 'textHeight', 'textColor', 'text',
+ 'test', 'target', 'tan', 'tabStops', 'tabIndexChange', 'tabIndex',
+ 'tabEnabledChange', 'tabEnabled', 'tabChildrenChange',
+ 'tabChildren', 'sync', 'swfVersion', 'swapChildrenAt',
+ 'swapChildren', 'subtract', 'substring', 'substr', 'styleSheet',
+ 'styleNames', 'strength', 'stopPropagation',
+ 'stopImmediatePropagation', 'stopDrag', 'stopAll', 'stop', 'status',
+ 'startDrag', 'start', 'stageY', 'stageX', 'stageWidth',
+ 'stageHeight', 'stageFocusRect', 'stage', 'sqrt', 'split', 'splice',
+ 'source', 'soundTransform', 'soundComplete', 'sortOn', 'sort',
+ 'songName', 'some', 'socketData', 'smoothing', 'slice', 'size',
+ 'sin', 'silent', 'silenceTimeout', 'silenceLevel', 'showSettings',
+ 'showRedrawRegions', 'showDefaultContextMenu', 'show', 'shortcut',
+ 'shiftKey', 'shift', 'sharpness', 'sharedEvents', 'shadowColor',
+ 'shadowAlpha', 'settings', 'setUseEchoSuppression', 'setUTCSeconds',
+ 'setUTCMonth', 'setUTCMinutes', 'setUTCMilliseconds', 'setUTCHours',
+ 'setUTCFullYear', 'setUTCDate', 'setTimeout', 'setTime',
+ 'setTextFormat', 'setStyle', 'setSilenceLevel', 'setSettings',
+ 'setSelection', 'setSelected', 'setSelectColor', 'setSeconds',
+ 'setQuality', 'setPropertyIsEnumerable', 'setProperty', 'setPixels',
+ 'setPixel32', 'setPixel', 'setNamespace', 'setName',
+ 'setMotionLevel', 'setMonth', 'setMode', 'setMinutes',
+ 'setMilliseconds', 'setLoopback', 'setLoopBack', 'setLocalName',
+ 'setKeyFrameInterval', 'setInterval', 'setHours', 'setFullYear',
+ 'setEmpty', 'setDirty', 'setDate', 'setCompositionString',
+ 'setClipboard', 'setChildren', 'setChildIndex',
+ 'setAdvancedAntiAliasingTable', 'serverString', 'separatorBefore',
+ 'sendToURL', 'send', 'selectionEndIndex', 'selectionBeginIndex',
+ 'selectable', 'select', 'seek', 'securityError', 'securityDomain',
+ 'secondsUTC', 'seconds', 'search', 'scrollV', 'scrollRect',
+ 'scrollH', 'scroll', 'screenResolutionY', 'screenResolutionX',
+ 'screenDPI', 'screenColor', 'scenes', 'scaleY', 'scaleX',
+ 'scaleMode', 'scale9Grid', 'scale', 'save', 'sandboxType',
+ 'sameDomain', 'running', 'round', 'rotation', 'rotate', 'root',
+ 'rollOver', 'rollOut', 'rightToRight', 'rightToLeft', 'rightPeak',
+ 'rightMargin', 'right', 'rewind', 'reverse', 'resume', 'restrict',
+ 'resize', 'reset', 'requestHeaders', 'replaceText',
+ 'replaceSelectedText', 'replace', 'repeatCount', 'render',
+ 'removedFromStage', 'removed', 'removeNode', 'removeNamespace',
+ 'removeEventListener', 'removeChildAt', 'removeChild',
+ 'relatedObject', 'registerFont', 'registerClassAlias', 'redOffset',
+ 'redMultiplier', 'rect', 'receiveVideo', 'receiveAudio',
+ 'readUnsignedShort', 'readUnsignedInt', 'readUnsignedByte',
+ 'readUTFBytes', 'readUTF', 'readShort', 'readObject',
+ 'readMultiByte', 'readInt', 'readFloat', 'readExternal',
+ 'readDouble', 'readBytes', 'readByte', 'readBoolean', 'ratios',
+ 'rate', 'random', 'quality', 'push', 'publish', 'proxyType',
+ 'prototype', 'propertyIsEnumerable', 'progress',
+ 'processingInstructions', 'printAsBitmap', 'print',
+ 'previousSibling', 'preventDefault', 'prevScene', 'prevFrame',
+ 'prettyPrinting', 'prettyIndent', 'preserveAlpha', 'prependChild',
+ 'prefix', 'pow', 'position', 'pop', 'polar', 'playerType', 'play',
+ 'pixelSnapping', 'pixelDissolve', 'pixelBounds', 'pixelAspectRatio',
+ 'perlinNoise', 'pause', 'parseXML', 'parseInt', 'parseFloat',
+ 'parseCSS', 'parse', 'parentNode', 'parentDomain',
+ 'parentAllowsChild', 'parent', 'parameters', 'paperWidth',
+ 'paperHeight', 'pan', 'paletteMap', 'pageWidth', 'pageHeight',
+ 'overState', 'outsideCutoff', 'os', 'orientation', 'open',
+ 'opaqueBackground', 'onPlayStatus', 'onMetaData', 'onCuePoint',
+ 'offsetPoint', 'offset', 'objectID', 'objectEncoding', 'numLock',
+ 'numLines', 'numFrames', 'numChildren', 'normalize', 'noise',
+ 'nodeValue', 'nodeType', 'nodeName', 'nodeKind', 'noAutoLabeling',
+ 'nextValue', 'nextSibling', 'nextScene', 'nextNameIndex',
+ 'nextName', 'nextFrame', 'netStatus', 'navigateToURL',
+ 'namespaceURI', 'namespaceDeclarations', 'namespace', 'names',
+ 'name', 'muted', 'multiline', 'moveTo', 'mouseY', 'mouseX',
+ 'mouseWheelEnabled', 'mouseWheel', 'mouseUp', 'mouseTarget',
+ 'mouseOver', 'mouseOut', 'mouseMove', 'mouseLeave',
+ 'mouseFocusChange', 'mouseEnabled', 'mouseDown', 'mouseChildren',
+ 'motionTimeout', 'motionLevel', 'monthUTC', 'month',
+ 'modificationDate', 'mode', 'minutesUTC', 'minutes', 'min',
+ 'millisecondsUTC', 'milliseconds', 'method', 'message', 'merge',
+ 'menuSelect', 'menuItemSelect', 'maxScrollV', 'maxScrollH',
+ 'maxLevel', 'maxChars', 'max', 'matrixY', 'matrixX', 'matrix',
+ 'match', 'mask', 'mapPoint', 'mapBitmap', 'map', 'manufacturer',
+ 'macType', 'loopback', 'loop', 'log', 'lock', 'localeCompare',
+ 'localY', 'localX', 'localToGlobal', 'localName',
+ 'localFileReadDisable', 'loaderURL', 'loaderInfo', 'loader',
+ 'loadPolicyFile', 'loadBytes', 'load', 'liveDelay', 'link',
+ 'lineTo', 'lineStyle', 'lineGradientStyle', 'level',
+ 'letterSpacing', 'length', 'leftToRight', 'leftToLeft', 'leftPeak',
+ 'leftMargin', 'left', 'leading', 'lastIndexOf', 'lastIndex',
+ 'lastChild', 'language', 'labels', 'knockout', 'keyUp',
+ 'keyLocation', 'keyFrameInterval', 'keyFocusChange', 'keyDown',
+ 'keyCode', 'kerning', 'join', 'italic', 'isXMLName',
+ 'isPrototypeOf', 'isNaN', 'isFocusInaccessible', 'isFinite',
+ 'isEmpty', 'isDefaultPrevented', 'isDebugger', 'isBuffering',
+ 'isAttribute', 'isAccessible', 'ioError', 'invert', 'invalidate',
+ 'intersects', 'intersection', 'interpolate', 'insideCutoff',
+ 'insertChildBefore', 'insertChildAfter', 'insertBefore', 'inner',
+ 'init', 'info', 'inflatePoint', 'inflate', 'indexOf', 'index',
+ 'indent', 'inScopeNamespaces', 'imeComposition', 'ime',
+ 'ignoreWhitespace', 'ignoreWhite', 'ignoreProcessingInstructions',
+ 'ignoreComments', 'ignoreCase', 'identity', 'idMap', 'id3',
+ 'httpStatus', 'htmlText', 'hoursUTC', 'hours', 'hitTestTextNearPos',
+ 'hitTestState', 'hitTestPoint', 'hitTestObject', 'hitTest',
+ 'hitArea', 'highlightColor', 'highlightAlpha', 'hideObject',
+ 'hideBuiltInItems', 'hide', 'height', 'hasVideoEncoder', 'hasTLS',
+ 'hasStreamingVideo', 'hasStreamingAudio', 'hasSimpleContent',
+ 'hasScreenPlayback', 'hasScreenBroadcast', 'hasProperty',
+ 'hasPrinting', 'hasOwnProperty', 'hasMP3', 'hasIME', 'hasGlyphs',
+ 'hasEventListener', 'hasEmbeddedVideo', 'hasDefinition',
+ 'hasComplexContent', 'hasChildNodes', 'hasAudioEncoder', 'hasAudio',
+ 'hasAccessibility', 'gridFitType', 'greenOffset', 'greenMultiplier',
+ 'graphics', 'gotoAndStop', 'gotoAndPlay', 'globalToLocal', 'global',
+ 'getUTCSeconds', 'getUTCMonth', 'getUTCMinutes',
+ 'getUTCMilliseconds', 'getUTCHours', 'getUTCFullYear', 'getUTCDay',
+ 'getUTCDate', 'getTimezoneOffset', 'getTimer', 'getTime',
+ 'getTextRunInfo', 'getTextFormat', 'getText', 'getStyle',
+ 'getStackTrace', 'getSelectedText', 'getSelected', 'getSeconds',
+ 'getRemote', 'getRect', 'getQualifiedSuperclassName',
+ 'getQualifiedClassName', 'getProperty', 'getPrefixForNamespace',
+ 'getPixels', 'getPixel32', 'getPixel', 'getParagraphLength',
+ 'getObjectsUnderPoint', 'getNamespaceForPrefix', 'getMonth',
+ 'getMinutes', 'getMilliseconds', 'getMicrophone', 'getLocal',
+ 'getLineText', 'getLineOffset', 'getLineMetrics', 'getLineLength',
+ 'getLineIndexOfChar', 'getLineIndexAtPoint', 'getImageReference',
+ 'getHours', 'getFullYear', 'getFirstCharInParagraph',
+ 'getDescendants', 'getDefinitionByName', 'getDefinition', 'getDay',
+ 'getDate', 'getColorBoundsRect', 'getClassByAlias', 'getChildIndex',
+ 'getChildByName', 'getChildAt', 'getCharIndexAtPoint',
+ 'getCharBoundaries', 'getCamera', 'getBounds', 'genre',
+ 'generateFilterRect', 'gain', 'fullYearUTC', 'fullYear',
+ 'fullScreen', 'fscommand', 'fromCharCode', 'framesLoaded',
+ 'frameRate', 'frame', 'fps', 'forwardAndBack', 'formatToString',
+ 'forceSimple', 'forEach', 'fontType', 'fontStyle', 'fontSize',
+ 'fontName', 'font', 'focusRect', 'focusOut', 'focusIn', 'focus',
+ 'flush', 'floor', 'floodFill', 'firstChild', 'findText', 'filters',
+ 'filter', 'fillRect', 'fileList', 'extension', 'extended', 'exp',
+ 'exec', 'exactSettings', 'every', 'eventPhase', 'escapeMultiByte',
+ 'escape', 'errorID', 'error', 'equals', 'enumerateFonts',
+ 'enterFrame', 'endian', 'endFill', 'encodeURIComponent',
+ 'encodeURI', 'enabled', 'embedFonts', 'elements',
+ 'dynamicPropertyWriter', 'dropTarget', 'drawRoundRect', 'drawRect',
+ 'drawEllipse', 'drawCircle', 'draw', 'download', 'downState',
+ 'doubleClickEnabled', 'doubleClick', 'dotall', 'domain',
+ 'docTypeDecl', 'doConversion', 'divisor', 'distance', 'dispose',
+ 'displayState', 'displayMode', 'displayAsPassword', 'dispatchEvent',
+ 'description', 'describeType', 'descent', 'descendants',
+ 'deltaTransformPoint', 'delta', 'deleteProperty', 'delay',
+ 'defaultTextFormat', 'defaultSettings', 'defaultObjectEncoding',
+ 'decodeURIComponent', 'decodeURI', 'decode', 'deblocking',
+ 'deactivate', 'dayUTC', 'day', 'dateUTC', 'date', 'dataFormat',
+ 'data', 'd', 'customItems', 'curveTo', 'currentTarget',
+ 'currentScene', 'currentLabels', 'currentLabel', 'currentFrame',
+ 'currentFPS', 'currentDomain', 'currentCount', 'ctrlKey', 'creator',
+ 'creationDate', 'createTextNode', 'createGradientBox',
+ 'createElement', 'createBox', 'cos', 'copyPixels', 'copyChannel',
+ 'copy', 'conversionMode', 'contextMenuOwner', 'contextMenu',
+ 'contentType', 'contentLoaderInfo', 'content', 'containsRect',
+ 'containsPoint', 'contains', 'constructor', 'connectedProxyType',
+ 'connected', 'connect', 'condenseWhite', 'concatenatedMatrix',
+ 'concatenatedColorTransform', 'concat', 'computeSpectrum',
+ 'compress', 'componentY', 'componentX', 'complete', 'compare',
+ 'comments', 'comment', 'colors', 'colorTransform', 'color', 'code',
+ 'close', 'cloneNode', 'clone', 'client', 'click', 'clearTimeout',
+ 'clearInterval', 'clear', 'clamp', 'children', 'childNodes',
+ 'childIndex', 'childAllowsParent', 'child', 'checkPolicyFile',
+ 'charCount', 'charCodeAt', 'charCode', 'charAt', 'changeList',
+ 'change', 'ceil', 'caretIndex', 'caption', 'capsLock', 'cancelable',
+ 'cancel', 'callee', 'callProperty', 'call', 'cacheAsBitmap', 'c',
+ 'bytesTotal', 'bytesLoaded', 'bytesAvailable', 'buttonMode',
+ 'buttonDown', 'bullet', 'builtInItems', 'bufferTime',
+ 'bufferLength', 'bubbles', 'browse', 'bottomScrollV', 'bottomRight',
+ 'bottom', 'borderColor', 'border', 'bold', 'blurY', 'blurX',
+ 'blueOffset', 'blueMultiplier', 'blockIndent', 'blendMode',
+ 'bitmapData', 'bias', 'beginGradientFill', 'beginFill',
+ 'beginBitmapFill', 'bandwidth', 'backgroundColor', 'background',
+ 'b', 'available', 'avHardwareDisable', 'autoSize', 'attributes',
+ 'attribute', 'attachNetStream', 'attachCamera', 'attachAudio',
+ 'atan2', 'atan', 'asyncError', 'asin', 'ascent', 'artist',
+ 'areSoundsInaccessible', 'areInaccessibleObjectsUnderPoint',
+ 'applyFilter', 'apply', 'applicationDomain', 'appendText',
+ 'appendChild', 'antiAliasType', 'angle', 'alwaysShowSelection',
+ 'altKey', 'alphas', 'alphaOffset', 'alphaMultiplier', 'alpha',
+ 'allowInsecureDomain', 'allowDomain', 'align', 'album',
+ 'addedToStage', 'added', 'addPage', 'addNamespace', 'addHeader',
+ 'addEventListener', 'addChildAt', 'addChild', 'addCallback', 'add',
+ 'activityLevel', 'activity', 'active', 'activating', 'activate',
+ 'actionScriptVersion', 'acos', 'accessibilityProperties', 'abs'
+ ),
+ 8 => array(
+ 'WRAP', 'VERTICAL', 'VARIABLES',
+ 'UTC', 'UPLOAD_COMPLETE_DATA', 'UP', 'UNLOAD', 'UNKNOWN',
+ 'UNIQUESORT', 'TOP_RIGHT', 'TOP_LEFT', 'TOP', 'TIMER_COMPLETE',
+ 'TIMER', 'TEXT_NODE', 'TEXT_INPUT', 'TEXT', 'TAB_INDEX_CHANGE',
+ 'TAB_ENABLED_CHANGE', 'TAB_CHILDREN_CHANGE', 'TAB', 'SYNC',
+ 'SUBTRACT', 'SUBPIXEL', 'STATUS', 'STANDARD', 'SQUARE', 'SQRT2',
+ 'SQRT1_2', 'SPACE', 'SOUND_COMPLETE', 'SOCKET_DATA', 'SHOW_ALL',
+ 'SHIFT', 'SETTINGS_MANAGER', 'SELECT', 'SECURITY_ERROR', 'SCROLL',
+ 'SCREEN', 'ROUND', 'ROLL_OVER', 'ROLL_OUT', 'RIGHT', 'RGB',
+ 'RETURNINDEXEDARRAY', 'RESIZE', 'REPEAT', 'RENDER',
+ 'REMOVED_FROM_STAGE', 'REMOVED', 'REMOTE', 'REGULAR', 'REFLECT',
+ 'RED', 'RADIAL', 'PROGRESS', 'PRIVACY', 'POST', 'POSITIVE_INFINITY',
+ 'PORTRAIT', 'PIXEL', 'PI', 'PENDING', 'PAGE_UP', 'PAGE_DOWN', 'PAD',
+ 'OVERLAY', 'OUTER', 'OPEN', 'NaN', 'NUM_PAD', 'NUMPAD_SUBTRACT',
+ 'NUMPAD_MULTIPLY', 'NUMPAD_ENTER', 'NUMPAD_DIVIDE',
+ 'NUMPAD_DECIMAL', 'NUMPAD_ADD', 'NUMPAD_9', 'NUMPAD_8', 'NUMPAD_7',
+ 'NUMPAD_6', 'NUMPAD_5', 'NUMPAD_4', 'NUMPAD_3', 'NUMPAD_2',
+ 'NUMPAD_1', 'NUMPAD_0', 'NUMERIC', 'NO_SCALE', 'NO_BORDER',
+ 'NORMAL', 'NONE', 'NEVER', 'NET_STATUS', 'NEGATIVE_INFINITY',
+ 'MULTIPLY', 'MOUSE_WHEEL', 'MOUSE_UP', 'MOUSE_OVER', 'MOUSE_OUT',
+ 'MOUSE_MOVE', 'MOUSE_LEAVE', 'MOUSE_FOCUS_CHANGE', 'MOUSE_DOWN',
+ 'MITER', 'MIN_VALUE', 'MICROPHONE', 'MENU_SELECT',
+ 'MENU_ITEM_SELECT', 'MEDIUM', 'MAX_VALUE', 'LOW', 'LOG2E', 'LOG10E',
+ 'LOCAL_WITH_NETWORK', 'LOCAL_WITH_FILE', 'LOCAL_TRUSTED',
+ 'LOCAL_STORAGE', 'LN2', 'LN10', 'LITTLE_ENDIAN', 'LINK',
+ 'LINEAR_RGB', 'LINEAR', 'LIGHT_COLOR', 'LIGHTEN', 'LEFT', 'LCD',
+ 'LAYER', 'LANDSCAPE', 'KOREAN', 'KEY_UP', 'KEY_FOCUS_CHANGE',
+ 'KEY_DOWN', 'JUSTIFY', 'JAPANESE_KATAKANA_HALF',
+ 'JAPANESE_KATAKANA_FULL', 'JAPANESE_HIRAGANA', 'Infinity', 'ITALIC',
+ 'IO_ERROR', 'INVERT', 'INSERT', 'INPUT', 'INNER', 'INIT',
+ 'IME_COMPOSITION', 'IGNORE', 'ID3', 'HTTP_STATUS', 'HORIZONTAL',
+ 'HOME', 'HIGH', 'HARDLIGHT', 'GREEN', 'GET', 'FULLSCREEN', 'FULL',
+ 'FOCUS_OUT', 'FOCUS_IN', 'FLUSHED', 'FLASH9', 'FLASH8', 'FLASH7',
+ 'FLASH6', 'FLASH5', 'FLASH4', 'FLASH3', 'FLASH2', 'FLASH1', 'F9',
+ 'F8', 'F7', 'F6', 'F5', 'F4', 'F3', 'F2', 'F15', 'F14', 'F13',
+ 'F12', 'F11', 'F10', 'F1', 'EXACT_FIT', 'ESCAPE', 'ERROR', 'ERASE',
+ 'ENTER_FRAME', 'ENTER', 'END', 'EMBEDDED', 'ELEMENT_NODE', 'E',
+ 'DYNAMIC', 'DOWN', 'DOUBLE_CLICK', 'DIFFERENCE', 'DEVICE',
+ 'DESCENDING', 'DELETE', 'DEFAULT', 'DEACTIVATE', 'DATA',
+ 'DARK_COLOR', 'DARKEN', 'CRT', 'CONTROL', 'CONNECT', 'COMPLETE',
+ 'COLOR', 'CLOSE', 'CLICK', 'CLAMP', 'CHINESE', 'CHANGE', 'CENTER',
+ 'CASEINSENSITIVE', 'CAPTURING_PHASE', 'CAPS_LOCK', 'CANCEL',
+ 'CAMERA', 'BUBBLING_PHASE', 'BOTTOM_RIGHT', 'BOTTOM_LEFT', 'BOTTOM',
+ 'BOLD_ITALIC', 'BOLD', 'BLUE', 'BINARY', 'BIG_ENDIAN', 'BEVEL',
+ 'BEST', 'BACKSPACE', 'AUTO', 'AT_TARGET', 'ASYNC_ERROR', 'AMF3',
+ 'AMF0', 'ALWAYS', 'ALPHANUMERIC_HALF', 'ALPHANUMERIC_FULL', 'ALPHA',
+ 'ADVANCED', 'ADDED_TO_STAGE', 'ADDED', 'ADD', 'ACTIVITY',
+ 'ACTIONSCRIPT3', 'ACTIONSCRIPT2'
+ ),
+ //FIX: Must be last in order to avoid conflicts with keywords present
+ //in other keyword groups, that might get highlighted as part of the URL.
+ //I know this is not a proper work-around, but should do just fine.
+ 5 => array(
+ 'uint', 'int', 'arguments', 'XMLSocket', 'XMLNodeType', 'XMLNode',
+ 'XMLList', 'XMLDocument', 'XML', 'Video', 'VerifyError',
+ 'URLVariables', 'URLStream', 'URLRequestMethod', 'URLRequestHeader',
+ 'URLRequest', 'URLLoaderDataFormat', 'URLLoader', 'URIError',
+ 'TypeError', 'Transform', 'TimerEvent', 'Timer', 'TextSnapshot',
+ 'TextRenderer', 'TextLineMetrics', 'TextFormatAlign', 'TextFormat',
+ 'TextFieldType', 'TextFieldAutoSize', 'TextField', 'TextEvent',
+ 'TextDisplayMode', 'TextColorType', 'System', 'SyntaxError',
+ 'SyncEvent', 'StyleSheet', 'String', 'StatusEvent', 'StaticText',
+ 'StageScaleMode', 'StageQuality', 'StageAlign', 'Stage',
+ 'StackOverflowError', 'Sprite', 'SpreadMethod', 'SoundTransform',
+ 'SoundMixer', 'SoundLoaderContext', 'SoundChannel', 'Sound',
+ 'Socket', 'SimpleButton', 'SharedObjectFlushStatus', 'SharedObject',
+ 'Shape', 'SecurityPanel', 'SecurityErrorEvent', 'SecurityError',
+ 'SecurityDomain', 'Security', 'ScriptTimeoutError', 'Scene',
+ 'SWFVersion', 'Responder', 'RegExp', 'ReferenceError', 'Rectangle',
+ 'RangeError', 'QName', 'Proxy', 'ProgressEvent',
+ 'PrintJobOrientation', 'PrintJobOptions', 'PrintJob', 'Point',
+ 'PixelSnapping', 'ObjectEncoding', 'Object', 'Number', 'NetStream',
+ 'NetStatusEvent', 'NetConnection', 'Namespace', 'MovieClip',
+ 'MouseEvent', 'Mouse', 'MorphShape', 'Microphone', 'MemoryError',
+ 'Matrix', 'Math', 'LocalConnection', 'LoaderInfo', 'LoaderContext',
+ 'Loader', 'LineScaleMode', 'KeyboardEvent', 'Keyboard',
+ 'KeyLocation', 'JointStyle', 'InvalidSWFError',
+ 'InterpolationMethod', 'InteractiveObject', 'IllegalOperationError',
+ 'IOErrorEvent', 'IOError', 'IMEEvent', 'IMEConversionMode', 'IME',
+ 'IExternalizable', 'IEventDispatcher', 'IDynamicPropertyWriter',
+ 'IDynamicPropertyOutput', 'IDataOutput', 'IDataInput', 'ID3Info',
+ 'IBitmapDrawable', 'HTTPStatusEvent', 'GridFitType', 'Graphics',
+ 'GradientType', 'GradientGlowFilter', 'GradientBevelFilter',
+ 'GlowFilter', 'Function', 'FrameLabel', 'FontType', 'FontStyle',
+ 'Font', 'FocusEvent', 'FileReferenceList', 'FileReference',
+ 'FileFilter', 'ExternalInterface', 'EventPhase', 'EventDispatcher',
+ 'Event', 'EvalError', 'ErrorEvent', 'Error', 'Endian', 'EOFError',
+ 'DropShadowFilter', 'DisplayObjectContainer', 'DisplayObject',
+ 'DisplacementMapFilterMode', 'DisplacementMapFilter', 'Dictionary',
+ 'DefinitionError', 'Date', 'DataEvent', 'ConvolutionFilter',
+ 'ContextMenuItem', 'ContextMenuEvent', 'ContextMenuBuiltInItems',
+ 'ContextMenu', 'ColorTransform', 'ColorMatrixFilter', 'Class',
+ 'CapsStyle', 'Capabilities', 'Camera', 'CSMSettings', 'ByteArray',
+ 'Boolean', 'BlurFilter', 'BlendMode', 'BitmapFilterType',
+ 'BitmapFilterQuality', 'BitmapFilter', 'BitmapDataChannel',
+ 'BitmapData', 'Bitmap', 'BevelFilter', 'AsyncErrorEvent', 'Array',
+ 'ArgumentError', 'ApplicationDomain', 'AntiAliasType',
+ 'ActivityEvent', 'ActionScriptVersion', 'AccessibilityProperties',
+ 'Accessibility', 'AVM1Movie'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '[', ']', '{', '}', '!', '%', '&', '*', '|', '/', '<', '>', '^', '-', '+', '~', '?', ':', ';', '.', ','
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ 2 => true,
+ 3 => true,
+ 4 => true,
+ 5 => true,
+ 6 => true,
+ 7 => true,
+ 8 => true
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #0033ff; font-weight: bold;',
+ 2 => 'color: #6699cc; font-weight: bold;',
+ 3 => 'color: #339966; font-weight: bold;',
+ 4 => 'color: #9900cc; font-weight: bold;',
+ 5 => 'color: #004993;',
+ 6 => 'color: #004993;',
+ 7 => 'color: #004993;',
+ 8 => 'color: #004993;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #009900; font-style: italic;',
+ 2 => 'color: #009966; font-style: italic;',
+ 'MULTI' => 'color: #3f5fbf;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => ''
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #990000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #000000; font-weight:bold;'
+ ),
+ 'METHODS' => array(
+ 0 => 'color: #000000;',
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #000066; font-weight: bold;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => '',
+ 5 => 'http://www.google.com/search?q={FNAMEL}%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:{FNAMEL}.html',
+ 6 => '',
+ 7 => '',
+ 8 => ''
+ ),
+ 'OOLANG' => false,//Save some time as OO identifiers aren't used
+ 'OBJECT_SPLITTERS' => array(
+ // commented out because it's not very relevant for AS, as all properties, methods and constants are dot-accessed.
+ // I believe it's preferable to have package highlighting for example, which is not possible with this enabled.
+ // 0 => '.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(),
+ 'HIGHLIGHT_STRICT_BLOCK' => array()
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/ada.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/ada.php
new file mode 100644
index 000000000..530ed5e4c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/ada.php
@@ -0,0 +1,133 @@
+<?php
+/*************************************************************************************
+ * ada.php
+ * -------
+ * Author: Tux (tux@inmail.cz)
+ * Copyright: (c) 2004 Tux (http://tux.a4.cz/), Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/07/29
+ *
+ * Ada language file for GeSHi.
+ * Words are from SciTe configuration file
+ *
+ * CHANGES
+ * -------
+ * 2004/11/27 (1.0.2)
+ * - Added support for multiple object splitters
+ * 2004/10/27 (1.0.1)
+ * - Removed apostrophe as string delimiter
+ * - Added URL support
+ * 2004/08/05 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Ada',
+ 'COMMENT_SINGLE' => array(1 => '--'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'begin', 'declare', 'do', 'else', 'elsif', 'exception', 'for', 'if',
+ 'is', 'loop', 'while', 'then', 'end', 'select', 'case', 'until',
+ 'goto', 'return'
+ ),
+ 2 => array(
+ 'abs', 'and', 'mod', 'not', 'or', 'rem', 'xor'
+ ),
+ 3 => array(
+ 'abort', 'abstract', 'accept', 'access', 'aliased', 'all', 'array', 'at', 'body',
+ 'constant', 'delay', 'delta', 'digits', 'entry', 'exit',
+ 'function', 'generic', 'in', 'limited', 'new', 'null', 'of', 'others', 'out', 'package', 'pragma',
+ 'private', 'procedure', 'protected', 'raise', 'range', 'record', 'renames', 'requeue', 'reverse',
+ 'separate', 'subtype', 'tagged', 'task', 'terminate', 'type', 'use', 'when', 'with'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #00007f;',
+ 2 => 'color: #0000ff;',
+ 3 => 'color: #46aa03; font-weight:bold;',
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #adadad; font-style: italic;',
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #7f007f;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #202020;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/apache.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/apache.php
new file mode 100644
index 000000000..f319e3e3c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/apache.php
@@ -0,0 +1,480 @@
+<?php
+/*************************************************************************************
+ * apache.php
+ * ----------
+ * Author: Tux (tux@inmail.cz)
+ * Copyright: (c) 2004 Tux (http://tux.a4.cz/), Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/29/07
+ *
+ * Apache language file for GeSHi.
+ * Words are from SciTe configuration file
+ *
+ * CHANGES
+ * -------
+ * 2008/17/06 (1.0.8)
+ * - Added support for apache configuration sections (milian)
+ * - Added missing php keywords (milian)
+ * - Added some more keywords
+ * - Disabled highlighting of brackets by default
+ * 2004/11/27 (1.0.2)
+ * - Added support for multiple object splitters
+ * 2004/10/27 (1.0.1)
+ * - Added support for URLs
+ * 2004/08/05 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/07/29)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Apache configuration',
+ 'COMMENT_SINGLE' => array(1 => '#'),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ /*keywords*/
+ 1 => array(
+ //core.c
+ 'AcceptFilter','AcceptPathInfo','AccessConfig','AccessFileName',
+ 'AddDefaultCharset','AddOutputFilterByType','AllowEncodedSlashes',
+ 'AllowOverride','AuthName','AuthType','ContentDigest',
+ 'CoreDumpDirectory','DefaultType','DocumentRoot','EnableMMAP',
+ 'EnableSendfile','ErrorDocument','ErrorLog','FileETag','ForceType',
+ 'HostnameLookups','Include','LimitInternalRecursion',
+ 'LimitRequestBody','LimitRequestFields','LimitRequestFieldsize',
+ 'LimitRequestLine','LimitXMLRequestBody','LogLevel','MaxMemFree',
+ 'MaxRequestsPerChild','NameVirtualHost','Options','PidFile','Port',
+ 'Protocol','Require','RLimitCPU','RLimitMEM','RLimitNPROC',
+ 'Satisfy','ScoreBoardFile','ServerAdmin','ServerAlias','ServerName',
+ 'ServerPath','ServerRoot','ServerSignature','ServerTokens',
+ 'SetHandler','SetInputFilter','SetOutputFilter','ThreadStackSize',
+ 'Timeout','TraceEnable','UseCanonicalName',
+ 'UseCanonicalPhysicalPort',
+
+ //http_core.c
+ 'KeepAlive','KeepAliveTimeout','MaxKeepAliveRequests',
+
+ //mod_actions.c
+ 'Action','Script',
+
+ //mod_alias.c
+ 'Alias','AliasMatch','Redirect','RedirectMatch','RedirectPermanent',
+ 'RedirectTemp','ScriptAlias','ScriptAliasMatch',
+
+ //mod_asis.c
+
+ //mod_auth_basic.c
+ 'AuthBasicAuthoritative','AuthBasicProvider',
+
+ //mod_auth_digest.c
+ 'AuthDigestAlgorithm','AuthDigestDomain','AuthDigestNcCheck',
+ 'AuthDigestNonceFormat','AuthDigestNonceLifetime',
+ 'AuthDigestProvider','AuthDigestQop','AuthDigestShmemSize',
+
+ //mod_authn_alias.c
+
+ //mod_authn_anon.c
+ 'Anonymous','Anonymous_LogEmail','Anonymous_MustGiveEmail',
+ 'Anonymous_NoUserId','Anonymous_VerifyEmail',
+
+ //mod_authn_dbd.c
+ 'AuthDBDUserPWQuery','AuthDBDUserRealmQuery',
+
+ //mod_authn_dbm.c
+ 'AuthDBMType','AuthDBMUserFile',
+
+ //mod_authn_default.c
+ 'AuthDefaultAuthoritative',
+
+ //mod_authn_file.c
+ 'AuthUserFile',
+
+ //mod_authnz_ldap.c
+ 'AuthLDAPBindDN','AuthLDAPBindPassword','AuthLDAPCharsetConfig',
+ 'AuthLDAPCompareDNOnServer','AuthLDAPDereferenceAliases',
+ 'AuthLDAPGroupAttribute','AuthLDAPGroupAttributeIsDN',
+ 'AuthLDAPRemoteUserAttribute','AuthLDAPRemoteUserIsDN',
+ 'AuthLDAPURL','AuthzLDAPAuthoritative',
+
+ //mod_authz_dbm.c
+ 'AuthDBMGroupFile','AuthzDBMAuthoritative','AuthzDBMType',
+
+ //mod_authz_default.c
+ 'AuthzDefaultAuthoritative',
+
+ //mod_authz_groupfile.c
+ 'AuthGroupFile','AuthzGroupFileAuthoritative',
+
+ //mod_authz_host.c
+ 'Allow','Deny','Order',
+
+ //mod_authz_owner.c
+ 'AuthzOwnerAuthoritative',
+
+ //mod_authz_svn.c
+ 'AuthzForceUsernameCase','AuthzSVNAccessFile','AuthzSVNAnonymous',
+ 'AuthzSVNAuthoritative','AuthzSVNNoAuthWhenAnonymousAllowed',
+
+ //mod_authz_user.c
+ 'AuthzUserAuthoritative',
+
+ //mod_autoindex.c
+ 'AddAlt','AddAltByEncoding','AddAltByType','AddDescription',
+ 'AddIcon','AddIconByEncoding','AddIconByType','DefaultIcon',
+ 'FancyIndexing','HeaderName','IndexHeadInsert','IndexIgnore',
+ 'IndexOptions','IndexOrderDefault','IndexStyleSheet','ReadmeName',
+
+ //mod_bt.c
+ 'Tracker','TrackerDetailURL','TrackerFlags','TrackerHashMaxAge',
+ 'TrackerHashMinAge','TrackerHashWatermark','TrackerHome',
+ 'TrackerReturnInterval','TrackerReturnMax',
+ 'TrackerReturnPeerFactor','TrackerReturnPeers','TrackerRootInclude',
+ 'TrackerStyleSheet',
+
+ //mod_bw.c
+ 'BandWidth','BandWidthError','BandWidthModule','BandWidthPacket',
+ 'ForceBandWidthModule','LargeFileLimit','MaxConnection',
+ 'MinBandWidth',
+
+ //mod_cache.c
+ 'CacheDefaultExpire','CacheDisable','CacheEnable',
+ 'CacheIgnoreCacheControl','CacheIgnoreHeaders',
+ 'CacheIgnoreNoLastMod','CacheIgnoreQueryString',
+ 'CacheLastModifiedFactor','CacheMaxExpire','CacheStoreNoStore',
+ 'CacheStorePrivate',
+
+ //mod_cern_meta.c
+ 'MetaDir','MetaFiles','MetaSuffix',
+
+ //mod_cgi.c
+ 'ScriptLog','ScriptLogBuffer','ScriptLogLength',
+
+ //mod_charset_lite.c
+ 'CharsetDefault','CharsetOptions','CharsetSourceEnc',
+
+ //mod_dav.c
+ 'DAV','DAVDepthInfinity','DAVMinTimeout',
+
+ //mod_dav_fs.c
+ 'DAVLockDB',
+
+ //mod_dav_lock.c
+ 'DAVGenericLockDB',
+
+ //mod_dav_svn.c
+ 'SVNActivitiesDB','SVNAllowBulkUpdates','SVNAutoversioning',
+ 'SVNIndexXSLT','SVNListParentPath','SVNMasterURI','SVNParentPath',
+ 'SVNPath','SVNPathAuthz','SVNReposName','SVNSpecialURI',
+
+ //mod_dbd.c
+ 'DBDExptime','DBDKeep','DBDMax','DBDMin','DBDParams','DBDPersist',
+ 'DBDPrepareSQL','DBDriver',
+
+ //mod_deflate.c
+ 'DeflateBufferSize','DeflateCompressionLevel','DeflateFilterNote',
+ 'DeflateMemLevel','DeflateWindowSize',
+
+ //mod_dir.c
+ 'DirectoryIndex','DirectorySlash',
+
+ //mod_disk_cache.c
+ 'CacheDirLength','CacheDirLevels','CacheMaxFileSize',
+ 'CacheMinFileSize','CacheRoot',
+
+ //mod_dumpio.c
+ 'DumpIOInput','DumpIOLogLevel','DumpIOOutput',
+
+ //mod_env.c
+ 'PassEnv','SetEnv','UnsetEnv',
+
+ //mod_expires.c
+ 'ExpiresActive','ExpiresByType','ExpiresDefault',
+
+ //mod_ext_filter.c
+ 'ExtFilterDefine','ExtFilterOptions',
+
+ //mod_file_cache.c
+ 'cachefile','mmapfile',
+
+ //mod_filter.c
+ 'FilterChain','FilterDeclare','FilterProtocol','FilterProvider',
+ 'FilterTrace',
+
+ //mod_gnutls.c
+ 'GnuTLSCache','GnuTLSCacheTimeout','GnuTLSCertificateFile',
+ 'GnuTLSKeyFile','GnuTLSPGPCertificateFile','GnuTLSPGPKeyFile',
+ 'GnuTLSClientVerify','GnuTLSClientCAFile','GnuTLSPGPKeyringFile',
+ 'GnuTLSEnable','GnuTLSDHFile','GnuTLSRSAFile','GnuTLSSRPPasswdFile',
+ 'GnuTLSSRPPasswdConfFile','GnuTLSPriorities',
+ 'GnuTLSExportCertificates',
+
+ //mod_headers.c
+ 'Header','RequestHeader',
+
+ //mod_imagemap.c
+ 'ImapBase','ImapDefault','ImapMenu',
+
+ //mod_include.c
+ 'SSIAccessEnable','SSIEndTag','SSIErrorMsg','SSIStartTag',
+ 'SSITimeFormat','SSIUndefinedEcho','XBitHack',
+
+ //mod_ident.c
+ 'IdentityCheck','IdentityCheckTimeout',
+
+ //mod_info.c
+ 'AddModuleInfo',
+
+ //mod_isapi.c
+ 'ISAPIAppendLogToErrors','ISAPIAppendLogToQuery','ISAPICacheFile',
+ 'ISAPIFakeAsync','ISAPILogNotSupported','ISAPIReadAheadBuffer',
+
+ //mod_log_config.c
+ 'BufferedLogs','CookieLog','CustomLog','LogFormat','TransferLog',
+
+ //mod_log_forensic.c
+ 'ForensicLog',
+
+ //mod_log_rotate.c
+ 'RotateInterval','RotateLogs','RotateLogsLocalTime',
+
+ //mod_logio.c
+
+ //mod_mem_cache.c
+ 'MCacheMaxObjectCount','MCacheMaxObjectSize',
+ 'MCacheMaxStreamingBuffer','MCacheMinObjectSize',
+ 'MCacheRemovalAlgorithm','MCacheSize',
+
+ //mod_mime.c
+ 'AddCharset','AddEncoding','AddHandler','AddInputFilter',
+ 'AddLanguage','AddOutputFilter','AddType','DefaultLanguage',
+ 'ModMimeUsePathInfo','MultiviewsMatch','RemoveCharset',
+ 'RemoveEncoding','RemoveHandler','RemoveInputFilter',
+ 'RemoveLanguage','RemoveOutputFilter','RemoveType','TypesConfig',
+
+ //mod_mime_magic.c
+ 'MimeMagicFile',
+
+ //mod_negotiation.c
+ 'CacheNegotiatedDocs','ForceLanguagePriority','LanguagePriority',
+
+ //mod_php5.c
+ 'php_admin_flag','php_admin_value','php_flag','php_value',
+ 'PHPINIDir',
+
+ //mod_proxy.c
+ 'AllowCONNECT','BalancerMember','NoProxy','ProxyBadHeader',
+ 'ProxyBlock','ProxyDomain','ProxyErrorOverride',
+ 'ProxyFtpDirCharset','ProxyIOBufferSize','ProxyMaxForwards',
+ 'ProxyPass','ProxyPassInterpolateEnv','ProxyPassMatch',
+ 'ProxyPassReverse','ProxyPassReverseCookieDomain',
+ 'ProxyPassReverseCookiePath','ProxyPreserveHost',
+ 'ProxyReceiveBufferSize','ProxyRemote','ProxyRemoteMatch',
+ 'ProxyRequests','ProxySet','ProxyStatus','ProxyTimeout','ProxyVia',
+
+ //mod_proxy_ajp.c
+
+ //mod_proxy_balancer.c
+
+ //mod_proxy_connect.c
+
+ //mod_proxy_ftp.c
+
+ //mod_proxy_http.c
+
+ //mod_rewrite.c
+ 'RewriteBase','RewriteCond','RewriteEngine','RewriteLock',
+ 'RewriteLog','RewriteLogLevel','RewriteMap','RewriteOptions',
+ 'RewriteRule',
+
+ //mod_setenvif.c
+ 'BrowserMatch','BrowserMatchNoCase','SetEnvIf','SetEnvIfNoCase',
+
+ //mod_so.c
+ 'LoadFile','LoadModule',
+
+ //mod_speling.c
+ 'CheckCaseOnly','CheckSpelling',
+
+ //mod_ssl.c
+ 'SSLCACertificateFile','SSLCACertificatePath','SSLCADNRequestFile',
+ 'SSLCADNRequestPath','SSLCARevocationFile','SSLCARevocationPath',
+ 'SSLCertificateChainFile','SSLCertificateFile',
+ 'SSLCertificateKeyFile','SSLCipherSuite','SSLCryptoDevice',
+ 'SSLEngine','SSLHonorCipherOrder','SSLMutex','SSLOptions',
+ 'SSLPassPhraseDialog','SSLProtocol','SSLProxyCACertificateFile',
+ 'SSLProxyCACertificatePath','SSLProxyCARevocationFile',
+ 'SSLProxyCARevocationPath','SSLProxyCipherSuite','SSLProxyEngine',
+ 'SSLProxyMachineCertificateFile','SSLProxyMachineCertificatePath',
+ 'SSLProxyProtocol','SSLProxyVerify','SSLProxyVerifyDepth',
+ 'SSLRandomSeed','SSLRenegBufferSize','SSLRequire','SSLRequireSSL',
+ 'SSLSessionCache','SSLSessionCacheTimeout','SSLUserName',
+ 'SSLVerifyClient','SSLVerifyDepth',
+
+ //mod_status.c
+ 'ExtendedStatus','SeeRequestTail',
+
+ //mod_substitute.c
+ 'Substitute',
+
+ //mod_suexec.c
+ 'SuexecUserGroup',
+
+ //mod_unique_id.c
+
+ //mod_userdir.c
+ 'UserDir',
+
+ //mod_usertrack.c
+ 'CookieDomain','CookieExpires','CookieName','CookieStyle',
+ 'CookieTracking',
+
+ //mod_version.c
+
+ //mod_vhost_alias.c
+ 'VirtualDocumentRoot','VirtualDocumentRootIP',
+ 'VirtualScriptAlias','VirtualScriptAliasIP',
+
+ //mod_view.c
+ 'ViewEnable',
+
+ //mod_win32.c
+ 'ScriptInterpreterSource',
+
+ //mpm_winnt.c
+ 'Listen','ListenBacklog','ReceiveBufferSize','SendBufferSize',
+ 'ThreadLimit','ThreadsPerChild','Win32DisableAcceptEx',
+
+ //mpm_common.c
+ 'AcceptMutex','AddModule','ClearModuleList','EnableExceptionHook',
+ 'Group','LockFile','MaxClients','MaxSpareServers','MaxSpareThreads',
+ 'MinSpareServers','MinSpareThreads','ServerLimit','StartServers',
+ 'StartThreads','User',
+
+ //util_ldap.c
+ 'LDAPCacheEntries','LDAPCacheTTL','LDAPConnectionTimeout',
+ 'LDAPOpCacheEntries','LDAPOpCacheTTL','LDAPSharedCacheFile',
+ 'LDAPSharedCacheSize','LDAPTrustedClientCert',
+ 'LDAPTrustedGlobalCert','LDAPTrustedMode','LDAPVerifyServerCert',
+
+ //Unknown Mods ...
+ 'AgentLog','BindAddress','bs2000account','CacheForceCompletion',
+ 'CacheGCInterval','CacheSize','NoCache','qsc','RefererIgnore',
+ 'RefererLog','Resourceconfig','ServerType','SingleListen'
+ ),
+ /*keywords 2*/
+ 2 => array(
+ 'all','on','off','standalone','inetd','indexes',
+ 'force-response-1.0','downgrade-1.0','nokeepalive',
+ 'includes','followsymlinks','none',
+ 'x-compress','x-gzip'
+ ),
+ /*keywords 3*/
+ 3 => array(
+ //core.c
+ 'Directory','DirectoryMatch','Files','FilesMatch','IfDefine',
+ 'IfModule','Limit','LimitExcept','Location','LocationMatch',
+ 'VirtualHost',
+
+ //mod_authn_alias.c
+ 'AuthnProviderAlias',
+
+ //mod_proxy.c
+ 'Proxy','ProxyMatch',
+
+ //mod_version.c
+ 'IfVersion'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '+', '-'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #00007f;',
+ 2 => 'color: #0000ff;',
+ 3 => 'color: #000000; font-weight:bold;',
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #adadad; font-style: italic;',
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #339933;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #7f007f;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #008000;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'PARSER_CONTROL' => array(
+ 'ENABLE_FLAGS' => array(
+ 'BRACKETS' => GESHI_NEVER,
+ 'SYMBOLS' => GESHI_NEVER
+ ),
+ 'KEYWORDS' => array(
+ 3 => array(
+ 'DISALLOWED_BEFORE' => '(?<=&lt;|&lt;\/)',
+ 'DISALLOWED_AFTER' => '(?=\s|\/|&gt;)',
+ )
+ )
+ )
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/applescript.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/applescript.php
new file mode 100644
index 000000000..85e3d6d0d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/applescript.php
@@ -0,0 +1,157 @@
+<?php
+/*************************************************************************************
+ * applescript.php
+ * --------
+ * Author: Stephan Klimek (http://www.initware.org)
+ * Copyright: Stephan Klimek (http://www.initware.org)
+ * Release Version: 1.0.8.4
+ * Date Started: 2005/07/20
+ *
+ * AppleScript language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ *
+ * TODO
+ * -------------------------
+ * URL settings to references
+ *
+ **************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'AppleScript',
+ 'COMMENT_SINGLE' => array(1 => '--'),
+ 'COMMENT_MULTI' => array( '(*' => '*)'),
+ 'COMMENT_REGEXP' => array(
+ 2 => '/(?<=[a-z])\'/i',
+ 3 => '/(?<![a-z])\'.*?\'/i',
+ ),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'application','close','count','delete','duplicate','exists','launch','make','move','open',
+ 'print','quit','reopen','run','save','saving', 'idle', 'path to', 'number', 'alias', 'list', 'text', 'string',
+ 'integer', 'it','me','version','pi','result','space','tab','anything','case','diacriticals','expansion',
+ 'hyphens','punctuation','bold','condensed','expanded','hidden','italic','outline','plain',
+ 'shadow','strikethrough','subscript','superscript','underline','ask','no','yes','false', 'id',
+ 'true','weekday','monday','mon','tuesday','tue','wednesday','wed','thursday','thu','friday',
+ 'fri','saturday','sat','sunday','sun','month','january','jan','february','feb','march',
+ 'mar','april','apr','may','june','jun','july','jul','august','aug','september', 'quote', 'do JavaScript',
+ 'sep','october','oct','november','nov','december','dec','minutes','hours', 'name', 'default answer',
+ 'days','weeks', 'folder', 'folders', 'file', 'files', 'window', 'eject', 'disk', 'reveal', 'sleep',
+ 'shut down', 'restart', 'display dialog', 'buttons', 'invisibles', 'item', 'items', 'delimiters', 'offset of',
+ 'AppleScript\'s', 'choose file', 'choose folder', 'choose from list', 'beep', 'contents', 'do shell script',
+ 'paragraph', 'paragraphs', 'missing value', 'quoted form', 'desktop', 'POSIX path', 'POSIX file',
+ 'activate', 'document', 'adding', 'receiving', 'content', 'new', 'properties', 'info for', 'bounds',
+ 'selection', 'extension', 'into', 'onto', 'by', 'between', 'against', 'set the clipboard to', 'the clipboard'
+ ),
+ 2 => array(
+ 'each','some','every','whose','where','index','first','second','third','fourth',
+ 'fifth','sixth','seventh','eighth','ninth','tenth','last','front','back','st','nd',
+ 'rd','th','middle','named','through','thru','before','after','beginning','the', 'as',
+ 'div','mod','and','not','or','contains','equal','equals','isnt', 'less', 'greater'
+ ),
+ 3 => array(
+ 'script','property','prop','end','to','set','global','local','on','of',
+ 'in','given','with','without','return','continue','tell','if','then','else','repeat',
+ 'times','while','until','from','exit','try','error','considering','ignoring','timeout',
+ 'transaction','my','get','put','is', 'copy'
+ )
+ ),
+ 'SYMBOLS' => array(
+ ')','+','-','^','*','/','&','<','>=','<','<=','=','�'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #0066ff;',
+ 2 => 'color: #ff0033;',
+ 3 => 'color: #ff0033; font-weight: bold;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080; font-style: italic;',
+ 2 => '',
+ 3 => 'color: #ff0000;',
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000000; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #009900;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #006600;',
+ 2 => 'color: #006600;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #339933;',
+ 4 => 'color: #0066ff;',
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => ',+-=&lt;&gt;/?^&amp;*'
+ ),
+ 'REGEXPS' => array(
+ //Variables
+ 0 => '[\\$%@]+[a-zA-Z_][a-zA-Z0-9_]*',
+ //File descriptors
+ 4 => '&lt;[a-zA-Z_][a-zA-Z0-9_]*&gt;',
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'PARSER_CONTROL' => array(
+ 'KEYWORDS' => array(
+ 'SPACE_AS_WHITESPACE' => true
+ )
+ )
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/apt_sources.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/apt_sources.php
new file mode 100644
index 000000000..891c10e5e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/apt_sources.php
@@ -0,0 +1,144 @@
+<?php
+/*************************************************************************************
+ * apt_sources.php
+ * ----------
+ * Author: Milian Wolff (mail@milianw.de)
+ * Copyright: (c) 2008 Milian Wolff (http://milianw.de)
+ * Release Version: 1.0.8.4
+ * Date Started: 2008/06/17
+ *
+ * Apt sources.list language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/06/17 (1.0.8)
+ * - Initial import
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Apt sources',
+ 'COMMENT_SINGLE' => array(1 => '#'),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array(),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ /*keywords*/
+ 1 => array(
+ 'deb-src', 'deb'
+ ),
+ 2 => array(
+ //Generic
+ 'stable', 'old-stable', 'testing', 'testing-proposed-updates',
+ 'unstable', 'unstable-proposed-updates', 'experimental',
+ 'non-US', 'security', 'volatile', 'volatile-sloppy',
+ 'apt-build',
+ 'stable/updates',
+ //Debian
+ 'buzz', 'rex', 'bo', 'hamm', 'slink', 'potato', 'woody', 'sarge',
+ 'etch', 'lenny', 'sid',
+ //Ubuntu
+ 'warty', 'warty-updates', 'warty-security', 'warty-proposed', 'warty-backports',
+ 'hoary', 'hoary-updates', 'hoary-security', 'hoary-proposed', 'hoary-backports',
+ 'breezy', 'breezy-updates', 'breezy-security', 'breezy-proposed', 'breezy-backports',
+ 'dapper', 'dapper-updates', 'dapper-security', 'dapper-proposed', 'dapper-backports',
+ 'edgy', 'edgy-updates', 'edgy-security', 'edgy-proposed', 'edgy-backports',
+ 'feisty', 'feisty-updates', 'feisty-security', 'feisty-proposed', 'feisty-backports',
+ 'gutsy', 'gutsy-updates', 'gutsy-security', 'gutsy-proposed', 'gutsy-backports',
+ 'hardy', 'hardy-updates', 'hardy-security', 'hardy-proposed', 'hardy-backports',
+ 'intrepid', 'intrepid-updates', 'intrepid-security', 'intrepid-proposed', 'intrepid-backports'
+ ),
+ 3 => array(
+ 'main', 'restricted', 'preview', 'contrib', 'non-free',
+ 'commercial', 'universe', 'multiverse'
+ )
+ ),
+ 'REGEXPS' => array(
+ 0 => "(((http|ftp):\/\/|file:\/)[^\s]+)|(cdrom:\[[^\]]*\][^\s]*)",
+ ),
+ 'SYMBOLS' => array(
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => true,
+ 3 => true
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #00007f;',
+ 2 => 'color: #b1b100;',
+ 3 => 'color: #b16000;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #adadad; font-style: italic;',
+ ),
+ 'ESCAPE_CHAR' => array(
+ ),
+ 'BRACKETS' => array(
+ ),
+ 'STRINGS' => array(
+ ),
+ 'NUMBERS' => array(
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #009900;',
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'PARSER_CONTROL' => array(
+ 'ENABLE_FLAGS' => array(
+ 'NUMBERS' => GESHI_NEVER,
+ 'METHODS' => GESHI_NEVER,
+ 'SCRIPT' => GESHI_NEVER,
+ 'SYMBOLS' => GESHI_NEVER,
+ 'ESCAPE_CHAR' => GESHI_NEVER,
+ 'BRACKETS' => GESHI_NEVER,
+ 'STRINGS' => GESHI_NEVER,
+ ),
+ 'KEYWORDS' => array(
+ 'DISALLOWED_BEFORE' => '(?<![a-zA-Z0-9\$_\|\#;>|^\/])',
+ 'DISALLOWED_AFTER' => '(?![a-zA-Z0-9_\|%\\-&\.])'
+ )
+ ),
+ 'TAB_WIDTH' => 4
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/asm.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/asm.php
new file mode 100644
index 000000000..2efeac9dc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/asm.php
@@ -0,0 +1,225 @@
+<?php
+/*************************************************************************************
+ * asm.php
+ * -------
+ * Author: Tux (tux@inmail.cz)
+ * Copyright: (c) 2004 Tux (http://tux.a4.cz/), Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/07/27
+ *
+ * x86 Assembler language file for GeSHi.
+ * Words are from SciTe configuration file (based on NASM syntax)
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * 2004/11/27 (1.0.2)
+ * - Added support for multiple object splitters
+ * 2004/10/27 (1.0.1)
+ * - Added support for URLs
+ * - Added binary and hexadecimal regexps
+ * 2004/08/05 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'ASM',
+ 'COMMENT_SINGLE' => array(1 => ';'),
+ 'COMMENT_MULTI' => array(),
+ //Line address prefix suppression
+ 'COMMENT_REGEXP' => array(2 => "/^(?:[0-9a-f]{0,4}:)?[0-9a-f]{4}(?:[0-9a-f]{4})?/mi"),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ /*CPU*/
+ 1 => array(
+ 'aaa','aad','aam','aas','adc','add','and','call','cbw','clc','cld','cli','cmc','cmp',
+ 'cmps','cmpsb','cmpsw','cwd','daa','das','dec','div','esc','hlt','idiv','imul','in','inc',
+ 'int','into','iret','ja','jae','jb','jbe','jc','jcxz','je','jg','jge','jl','jle','jmp',
+ 'jna','jnae','jnb','jnbe','jnc','jne','jng','jnge','jnl','jnle','jno','jnp','jns','jnz',
+ 'jo','jp','jpe','jpo','js','jz','lahf','lds','lea','les','lods','lodsb','lodsw','loop',
+ 'loope','loopew','loopne','loopnew','loopnz','loopnzw','loopw','loopz','loopzw','mov',
+ 'movs','movsb','movsw','mul','neg','nop','not','or','out','pop','popf','push','pushf',
+ 'rcl','rcr','ret','retf','retn','rol','ror','sahf','sal','sar','sbb','scas','scasb','scasw',
+ 'shl','shr','stc','std','sti','stos','stosb','stosw','sub','test','wait','xchg','xlat',
+ 'xlatb','xor','bound','enter','ins','insb','insw','leave','outs','outsb','outsw','popa','pusha','pushw',
+ 'arpl','lar','lsl','sgdt','sidt','sldt','smsw','str','verr','verw','clts','lgdt','lidt','lldt','lmsw','ltr',
+ 'bsf','bsr','bt','btc','btr','bts','cdq','cmpsd','cwde','insd','iretd','iretdf','iretf',
+ 'jecxz','lfs','lgs','lodsd','loopd','looped','loopned','loopnzd','loopzd','lss','movsd',
+ 'movsx','movzx','outsd','popad','popfd','pushad','pushd','pushfd','scasd','seta','setae',
+ 'setb','setbe','setc','sete','setg','setge','setl','setle','setna','setnae','setnb','setnbe',
+ 'setnc','setne','setng','setnge','setnl','setnle','setno','setnp','setns','setnz','seto','setp',
+ 'setpe','setpo','sets','setz','shld','shrd','stosd','bswap','cmpxchg','invd','invlpg','wbinvd','xadd','lock',
+ 'rep','repe','repne','repnz','repz'
+ ),
+ /*FPU*/
+ 2 => array(
+ 'f2xm1','fabs','fadd','faddp','fbld','fbstp','fchs','fclex','fcom','fcomp','fcompp','fdecstp',
+ 'fdisi','fdiv','fdivp','fdivr','fdivrp','feni','ffree','fiadd','ficom','ficomp','fidiv',
+ 'fidivr','fild','fimul','fincstp','finit','fist','fistp','fisub','fisubr','fld','fld1',
+ 'fldcw','fldenv','fldenvw','fldl2e','fldl2t','fldlg2','fldln2','fldpi','fldz','fmul',
+ 'fmulp','fnclex','fndisi','fneni','fninit','fnop','fnsave','fnsavew','fnstcw','fnstenv',
+ 'fnstenvw','fnstsw','fpatan','fprem','fptan','frndint','frstor','frstorw','fsave',
+ 'fsavew','fscale','fsqrt','fst','fstcw','fstenv','fstenvw','fstp','fstsw','fsub','fsubp',
+ 'fsubr','fsubrp','ftst','fwait','fxam','fxch','fxtract','fyl2x','fyl2xp1',
+ 'fsetpm','fcos','fldenvd','fnsaved','fnstenvd','fprem1','frstord','fsaved','fsin','fsincos',
+ 'fstenvd','fucom','fucomp','fucompp'
+ ),
+ /*registers*/
+ 3 => array(
+ 'ah','al','ax','bh','bl','bp','bx','ch','cl','cr0','cr2','cr3','cs','cx','dh','di','dl',
+ 'dr0','dr1','dr2','dr3','dr6','dr7','ds','dx','eax','ebp','ebx','ecx','edi','edx',
+ 'es','esi','esp','fs','gs','si','sp','ss','st','tr3','tr4','tr5','tr6','tr7'
+ ),
+ /*Directive*/
+ 4 => array(
+ '186','286','286c','286p','287','386','386c','386p','387','486','486p',
+ '8086','8087','alpha','break','code','const','continue','cref','data','data?',
+ 'dosseg','else','elseif','endif','endw','err','err1','err2','errb',
+ 'errdef','errdif','errdifi','erre','erridn','erridni','errnb','errndef',
+ 'errnz','exit','fardata','fardata?','if','lall','lfcond','list','listall',
+ 'listif','listmacro','listmacroall',' model','no87','nocref','nolist',
+ 'nolistif','nolistmacro','radix','repeat','sall','seq','sfcond','stack',
+ 'startup','tfcond','type','until','untilcxz','while','xall','xcref',
+ 'xlist','alias','align','assume','catstr','comm','comment','db','dd','df','dq',
+ 'dt','dup','dw','echo','elseif1','elseif2','elseifb','elseifdef','elseifdif',
+ 'elseifdifi','elseife','elseifidn','elseifidni','elseifnb','elseifndef','end',
+ 'endm','endp','ends','eq',' equ','even','exitm','extern','externdef','extrn','for',
+ 'forc','ge','goto','group','high','highword','if1','if2','ifb','ifdef','ifdif',
+ 'ifdifi','ife',' ifidn','ifidni','ifnb','ifndef','include','includelib','instr','invoke',
+ 'irp','irpc','label','le','length','lengthof','local','low','lowword','lroffset',
+ 'macro','mask','mod','msfloat','name','ne','offset','opattr','option','org','%out',
+ 'page','popcontext','private','proc','proto','ptr','public','purge','pushcontext','record',
+ 'rept','seg','segment','short','size','sizeof','sizestr','struc','struct',
+ 'substr','subtitle','subttl','textequ','this','title','typedef','union','width',
+ '.model', '.stack', '.code', '.data'
+ ),
+ /*Operands*/
+ 5 => array(
+ '@b','@f','addr','basic','byte','c','carry?','dword',
+ 'far','far16','fortran','fword','near','near16','overflow?','parity?','pascal','qword',
+ 'real4',' real8','real10','sbyte','sdword','sign?','stdcall','sword','syscall','tbyte',
+ 'vararg','word','zero?','flat','near32','far32',
+ 'abs','all','assumes','at','casemap','common','compact',
+ 'cpu','dotname','emulator','epilogue','error','export','expr16','expr32','farstack',
+ 'forceframe','huge','language','large','listing','ljmp','loadds','m510','medium','memory',
+ 'nearstack','nodotname','noemulator','nokeyword','noljmp','nom510','none','nonunique',
+ 'nooldmacros','nooldstructs','noreadonly','noscoped','nosignextend','nothing',
+ 'notpublic','oldmacros','oldstructs','os_dos','para','prologue',
+ 'readonly','req','scoped','setif2','smallstack','tiny','use16','use32','uses'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '[', ']', '(', ')',
+ '+', '-', '*', '/', '%',
+ '.', ',', ';', ':'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #00007f; font-weight: bold;',
+ 2 => 'color: #0000ff; font-weight: bold;',
+ 3 => 'color: #00007f;',
+ 4 => 'color: #000000; font-weight: bold;',
+ 5 => 'color: #000000; font-weight: bold;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #666666; font-style: italic;',
+ 2 => 'color: #adadad; font-style: italic;',
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #009900; font-weight: bold;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #7f007f;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #0000ff;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #339933;'
+ ),
+ 'REGEXPS' => array(
+// 0 => 'color: #0000ff;',
+// 1 => 'color: #0000ff;'
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => '',
+ 5 => ''
+ ),
+ 'NUMBERS' =>
+ GESHI_NUMBER_BIN_PREFIX_PERCENT |
+ GESHI_NUMBER_BIN_SUFFIX |
+ GESHI_NUMBER_HEX_PREFIX |
+ GESHI_NUMBER_HEX_SUFFIX |
+ GESHI_NUMBER_OCT_SUFFIX |
+ GESHI_NUMBER_INT_BASIC |
+ GESHI_NUMBER_FLT_NONSCI |
+ GESHI_NUMBER_FLT_NONSCI_F |
+ GESHI_NUMBER_FLT_SCI_ZERO,
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ //Hex numbers
+// 0 => /* */ "(?<=([\\s\\(\\)\\[\\],;.:+\\-\\/*]))(?:[0-9][0-9a-fA-F]{0,31}[hH]|0x[0-9a-fA-F]{1,32})(?=([\\s\\(\\)\\[\\],;.:+\\-\\/*]))",
+ //Binary numbers
+// 1 => "(?<=([\\s\\(\\)\\[\\],;.:+\\-\\/*]))[01]{1,64}[bB](?=([\\s\\(\\)\\[\\],;.:+\\-\\/*]))"
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 8,
+ 'PARSER_CONTROL' => array(
+ 'KEYWORDS' => array(
+ 'DISALLOWED_BEFORE' => "(?<![a-zA-Z0-9\$_\|\#>|^])",
+ 'DISALLOWED_AFTER' => "(?![a-zA-Z0-9_<\|%])"
+ )
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/asp.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/asp.php
new file mode 100644
index 000000000..7bfec11e1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/asp.php
@@ -0,0 +1,164 @@
+<?php
+/*************************************************************************************
+ * asp.php
+ * --------
+ * Author: Amit Gupta (http://blog.igeek.info/)
+ * Copyright: (c) 2004 Amit Gupta (http://blog.igeek.info/), Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/08/13
+ *
+ * ASP language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2005/12/30 (1.0.3)
+ * - Strings only delimited by ", comments by '
+ * 2004/11/27 (1.0.2)
+ * - Added support for multiple object splitters
+ * 2004/10/27 (1.0.1)
+ * - Added support for URLs
+ * 2004/08/13 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ * * Include all the functions, keywords etc that I have missed
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'ASP',
+ 'COMMENT_SINGLE' => array(1 => "'", 2 => '//'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'include', 'file', 'Const', 'Dim', 'Option', 'Explicit', 'Implicit', 'Set', 'Select', 'ReDim', 'Preserve',
+ 'ByVal', 'ByRef', 'End', 'Private', 'Public', 'If', 'Then', 'Else', 'ElseIf', 'Case', 'With', 'NOT',
+ 'While', 'Wend', 'For', 'Loop', 'Do', 'Request', 'Response', 'Server', 'ADODB', 'Session', 'Application',
+ 'Each', 'In', 'Get', 'Next', 'INT', 'CINT', 'CBOOL', 'CDATE', 'CBYTE', 'CCUR', 'CDBL', 'CLNG', 'CSNG',
+ 'CSTR', 'Fix', 'Is', 'Sgn', 'String', 'Boolean', 'Currency', 'Me', 'Single', 'Long', 'Integer', 'Byte',
+ 'Variant', 'Double', 'To', 'Let', 'Xor', 'Resume', 'On', 'Error', 'Imp', 'GoTo', 'Call', 'Global'
+ ),
+ 2 => array(
+ 'Null', 'Nothing', 'And',
+ 'False',
+ 'True', 'var', 'Or', 'BOF', 'EOF', 'xor',
+ 'Function', 'Class', 'New', 'Sub'
+ ),
+ 3 => array(
+ 'CreateObject', 'Write', 'Redirect', 'Cookies', 'BinaryRead', 'ClientCertificate', 'Form', 'QueryString',
+ 'ServerVariables', 'TotalBytes', 'AddHeader', 'AppendToLog', 'BinaryWrite', 'Buffer', 'CacheControl',
+ 'Charset', 'Clear', 'ContentType', 'End()', 'Expires', 'ExpiresAbsolute', 'Flush()', 'IsClientConnected',
+ 'PICS', 'Status', 'Connection', 'Recordset', 'Execute', 'Abandon', 'Lock', 'UnLock', 'Command', 'Fields',
+ 'Properties', 'Property', 'Send', 'Replace', 'InStr', 'TRIM', 'NOW', 'Day', 'Month', 'Hour', 'Minute', 'Second',
+ 'Year', 'MonthName', 'LCase', 'UCase', 'Abs', 'Array', 'As', 'LEN', 'MoveFirst', 'MoveLast', 'MovePrevious',
+ 'MoveNext', 'LBound', 'UBound', 'Transfer', 'Open', 'Close', 'MapPath', 'FileExists', 'OpenTextFile', 'ReadAll'
+ )
+ ),
+ 'SYMBOLS' => array(
+ 1 => array(
+ '<%', '%>'
+ ),
+ 0 => array(
+ '(', ')', '[', ']', '!', '@', '%', '&', '*', '|', '/', '<', '>',
+ ';', ':', '?', '='),
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #990099; font-weight: bold;',
+ 2 => 'color: #0000ff; font-weight: bold;',
+ 3 => 'color: #330066;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #008000;',
+ 2 => 'color: #ff6600;',
+ 'MULTI' => 'color: #008000;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #006600; font-weight:bold;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #cc0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #800000;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #9900cc;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #006600; font-weight: bold;',
+ 1 => 'color: #000000; font-weight: bold;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ 0 => '',
+ 1 => '',
+ 2 => '',
+ 3 => ''
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_MAYBE,
+ 'SCRIPT_DELIMITERS' => array(
+ 0 => array(
+ '<%' => '%>'
+ ),
+ 1 => array(
+ '<script language="vbscript" runat="server">' => '</script>'
+ ),
+ 2 => array(
+ '<script language="javascript" runat="server">' => '</script>'
+ ),
+ 3 => "/(?<start><%=?)(?:\"[^\"]*?\"|\/\*(?!\*\/).*?\*\/|.)*?(?<end>%>|\Z)/sm"
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ 0 => true,
+ 1 => true,
+ 2 => true,
+ 3 => true
+ )
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/autoit.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/autoit.php
new file mode 100644
index 000000000..526fe5d99
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/autoit.php
@@ -0,0 +1,1171 @@
+<?php
+/*************************************************************************************
+ * autoit.php
+ * --------
+ * Author: big_daddy (robert.i.anthony@gmail.com)
+ * Copyright: (c) 2006 and to GESHi ;)
+ * Release Version: 1.0.8.4
+ * Date Started: 2006/01/26
+ *
+ * AutoIT language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * Release 1.0.8.1 (2008/09/15)
+ * - Updated on 22.03.2008 By Tlem (tlem@tuxolem.fr)
+ * - The link on functions will now correctly re-direct to
+ * - http://www.autoitscript.com/autoit3/docs/functions/{FNAME}.htm
+ * - Updated whith au3.api (09.02.2008).
+ * - Updated - 16 Mai 2008 - v3.2.12.0
+ * - Updated - 12 June 2008 - v3.2.12.1
+ * Release 1.0.7.20 (2006/01/26)
+ * - First Release
+ *
+ * Current bugs & todo:
+ * ----------
+ * - not sure how to get sendkeys to work " {!}, {SPACE} etc... "
+ * - just copyied the regexp for variable from php so this HAVE to be checked and fixed to a better one ;)
+ *
+ * Reference: http://www.autoitscript.com/autoit3/docs/
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License,
+or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not,
+write to the Free Software
+ * Foundation,
+Inc.,
+59 Temple Place,
+Suite 330,
+Boston,
+MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'AutoIt',
+ 'COMMENT_SINGLE' => array(';'),
+ 'COMMENT_MULTI' => array(
+ '#comments-start' => '#comments-end',
+ '#cs' => '#ce'),
+ 'COMMENT_REGEXP' => array(0 => '/(?<!#)#(\s.*)?$/m'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'And','ByRef','Case','Const','ContinueCase','ContinueLoop',
+ 'Default','Dim','Do','Else','ElseIf','EndFunc','EndIf','EndSelect',
+ 'EndSwitch','EndWith','Enum','Exit','ExitLoop','False','For','Func',
+ 'Global','If','In','Local','Next','Not','Or','ReDim','Return',
+ 'Select','Step','Switch','Then','To','True','Until','WEnd','While',
+ 'With'
+ ),
+ 2 => array(
+ '@AppDataCommonDir','@AppDataDir','@AutoItExe','@AutoItPID',
+ '@AutoItUnicode','@AutoItVersion','@AutoItX64','@COM_EventObj',
+ '@CommonFilesDir','@Compiled','@ComputerName','@ComSpec','@CR',
+ '@CRLF','@DesktopCommonDir','@DesktopDepth','@DesktopDir',
+ '@DesktopHeight','@DesktopRefresh','@DesktopWidth',
+ '@DocumentsCommonDir','@error','@exitCode','@exitMethod',
+ '@extended','@FavoritesCommonDir','@FavoritesDir','@GUI_CtrlHandle',
+ '@GUI_CtrlId','@GUI_DragFile','@GUI_DragId','@GUI_DropId',
+ '@GUI_WinHandle','@HomeDrive','@HomePath','@HomeShare',
+ '@HotKeyPressed','@HOUR','@InetGetActive','@InetGetBytesRead',
+ '@IPAddress1','@IPAddress2','@IPAddress3','@IPAddress4','@KBLayout',
+ '@LF','@LogonDNSDomain','@LogonDomain','@LogonServer','@MDAY',
+ '@MIN','@MON','@MyDocumentsDir','@NumParams','@OSBuild','@OSLang',
+ '@OSServicePack','@OSTYPE','@OSVersion','@ProcessorArch',
+ '@ProgramFilesDir','@ProgramsCommonDir','@ProgramsDir','@ScriptDir',
+ '@ScriptFullPath','@ScriptLineNumber','@ScriptName','@SEC',
+ '@StartMenuCommonDir','@StartMenuDir','@StartupCommonDir',
+ '@StartupDir','@SW_DISABLE','@SW_ENABLE','@SW_HIDE','@SW_LOCK',
+ '@SW_MAXIMIZE','@SW_MINIMIZE','@SW_RESTORE','@SW_SHOW',
+ '@SW_SHOWDEFAULT','@SW_SHOWMAXIMIZED','@SW_SHOWMINIMIZED',
+ '@SW_SHOWMINNOACTIVE','@SW_SHOWNA','@SW_SHOWNOACTIVATE',
+ '@SW_SHOWNORMAL','@SW_UNLOCK','@SystemDir','@TAB','@TempDir',
+ '@TRAY_ID','@TrayIconFlashing','@TrayIconVisible','@UserName',
+ '@UserProfileDir','@WDAY','@WindowsDir','@WorkingDir','@YDAY',
+ '@YEAR'
+ ),
+ 3 => array(
+ 'Abs','ACos','AdlibDisable','AdlibEnable','Asc','AscW','ASin',
+ 'Assign','ATan','AutoItSetOption','AutoItWinGetTitle',
+ 'AutoItWinSetTitle','Beep','Binary','BinaryLen','BinaryMid',
+ 'BinaryToString','BitAND','BitNOT','BitOR','BitRotate','BitShift',
+ 'BitXOR','BlockInput','Break','Call','CDTray','Ceiling','Chr',
+ 'ChrW','ClipGet','ClipPut','ConsoleRead','ConsoleWrite',
+ 'ConsoleWriteError','ControlClick','ControlCommand',
+ 'ControlDisable','ControlEnable','ControlFocus','ControlGetFocus',
+ 'ControlGetHandle','ControlGetPos','ControlGetText','ControlHide',
+ 'ControlListView','ControlMove','ControlSend','ControlSetText',
+ 'ControlShow','ControlTreeView','Cos','Dec','DirCopy','DirCreate',
+ 'DirGetSize','DirMove','DirRemove','DllCall','DllCallbackFree',
+ 'DllCallbackGetPtr','DllCallbackRegister','DllClose','DllOpen',
+ 'DllStructCreate','DllStructGetData','DllStructGetPtr',
+ 'DllStructGetSize','DllStructSetData','DriveGetDrive',
+ 'DriveGetFileSystem','DriveGetLabel','DriveGetSerial',
+ 'DriveGetType','DriveMapAdd','DriveMapDel','DriveMapGet',
+ 'DriveSetLabel','DriveSpaceFree','DriveSpaceTotal','DriveStatus',
+ 'EnvGet','EnvSet','EnvUpdate','Eval','Execute','Exp',
+ 'FileChangeDir','FileClose','FileCopy','FileCreateNTFSLink',
+ 'FileCreateShortcut','FileDelete','FileExists','FileFindFirstFile',
+ 'FileFindNextFile','FileGetAttrib','FileGetLongName',
+ 'FileGetShortcut','FileGetShortName','FileGetSize','FileGetTime',
+ 'FileGetVersion','FileInstall','FileMove','FileOpen',
+ 'FileOpenDialog','FileRead','FileReadLine','FileRecycle',
+ 'FileRecycleEmpty','FileSaveDialog','FileSelectFolder',
+ 'FileSetAttrib','FileSetTime','FileWrite','FileWriteLine','Floor',
+ 'FtpSetProxy','GUICreate','GUICtrlCreateAvi','GUICtrlCreateButton',
+ 'GUICtrlCreateCheckbox','GUICtrlCreateCombo',
+ 'GUICtrlCreateContextMenu','GUICtrlCreateDate','GUICtrlCreateDummy',
+ 'GUICtrlCreateEdit','GUICtrlCreateGraphic','GUICtrlCreateGroup',
+ 'GUICtrlCreateIcon','GUICtrlCreateInput','GUICtrlCreateLabel',
+ 'GUICtrlCreateList','GUICtrlCreateListView',
+ 'GUICtrlCreateListViewItem','GUICtrlCreateMenu',
+ 'GUICtrlCreateMenuItem','GUICtrlCreateMonthCal','GUICtrlCreateObj',
+ 'GUICtrlCreatePic','GUICtrlCreateProgress','GUICtrlCreateRadio',
+ 'GUICtrlCreateSlider','GUICtrlCreateTab','GUICtrlCreateTabItem',
+ 'GUICtrlCreateTreeView','GUICtrlCreateTreeViewItem',
+ 'GUICtrlCreateUpdown','GUICtrlDelete','GUICtrlGetHandle',
+ 'GUICtrlGetState','GUICtrlRead','GUICtrlRecvMsg',
+ 'GUICtrlRegisterListViewSort','GUICtrlSendMsg','GUICtrlSendToDummy',
+ 'GUICtrlSetBkColor','GUICtrlSetColor','GUICtrlSetCursor',
+ 'GUICtrlSetData','GUICtrlSetFont','GUICtrlSetDefColor',
+ 'GUICtrlSetDefBkColor','GUICtrlSetGraphic','GUICtrlSetImage',
+ 'GUICtrlSetLimit','GUICtrlSetOnEvent','GUICtrlSetPos',
+ 'GUICtrlSetResizing','GUICtrlSetState','GUICtrlSetStyle',
+ 'GUICtrlSetTip','GUIDelete','GUIGetCursorInfo','GUIGetMsg',
+ 'GUIGetStyle','GUIRegisterMsg','GUISetAccelerators()',
+ 'GUISetBkColor','GUISetCoord','GUISetCursor','GUISetFont',
+ 'GUISetHelp','GUISetIcon','GUISetOnEvent','GUISetState',
+ 'GUISetStyle','GUIStartGroup','GUISwitch','Hex','HotKeySet',
+ 'HttpSetProxy','HWnd','InetGet','InetGetSize','IniDelete','IniRead',
+ 'IniReadSection','IniReadSectionNames','IniRenameSection',
+ 'IniWrite','IniWriteSection','InputBox','Int','IsAdmin','IsArray',
+ 'IsBinary','IsBool','IsDeclared','IsDllStruct','IsFloat','IsHWnd',
+ 'IsInt','IsKeyword','IsNumber','IsObj','IsPtr','IsString','Log',
+ 'MemGetStats','Mod','MouseClick','MouseClickDrag','MouseDown',
+ 'MouseGetCursor','MouseGetPos','MouseMove','MouseUp','MouseWheel',
+ 'MsgBox','Number','ObjCreate','ObjEvent','ObjGet','ObjName','Opt',
+ 'Ping','PixelChecksum','PixelGetColor','PixelSearch','PluginClose',
+ 'PluginOpen','ProcessClose','ProcessExists','ProcessGetStats',
+ 'ProcessList','ProcessSetPriority','ProcessWait','ProcessWaitClose',
+ 'ProgressOff','ProgressOn','ProgressSet','Ptr','Random','RegDelete',
+ 'RegEnumKey','RegEnumVal','RegRead','RegWrite','Round','Run',
+ 'RunAs','RunAsWait','RunWait','Send','SendKeepActive','SetError',
+ 'SetExtended','ShellExecute','ShellExecuteWait','Shutdown','Sin',
+ 'Sleep','SoundPlay','SoundSetWaveVolume','SplashImageOn',
+ 'SplashOff','SplashTextOn','Sqrt','SRandom','StatusbarGetText',
+ 'StderrRead','StdinWrite','StdioClose','StdoutRead','String',
+ 'StringAddCR','StringCompare','StringFormat','StringInStr',
+ 'StringIsAlNum','StringIsAlpha','StringIsASCII','StringIsDigit',
+ 'StringIsFloat','StringIsInt','StringIsLower','StringIsSpace',
+ 'StringIsUpper','StringIsXDigit','StringLeft','StringLen',
+ 'StringLower','StringMid','StringRegExp','StringRegExpReplace',
+ 'StringReplace','StringRight','StringSplit','StringStripCR',
+ 'StringStripWS','StringToBinary','StringTrimLeft','StringTrimRight',
+ 'StringUpper','Tan','TCPAccept','TCPCloseSocket','TCPConnect',
+ 'TCPListen','TCPNameToIP','TCPRecv','TCPSend','TCPShutdown',
+ 'TCPStartup','TimerDiff','TimerInit','ToolTip','TrayCreateItem',
+ 'TrayCreateMenu','TrayGetMsg','TrayItemDelete','TrayItemGetHandle',
+ 'TrayItemGetState','TrayItemGetText','TrayItemSetOnEvent',
+ 'TrayItemSetState','TrayItemSetText','TraySetClick','TraySetIcon',
+ 'TraySetOnEvent','TraySetPauseIcon','TraySetState','TraySetToolTip',
+ 'TrayTip','UBound','UDPBind','UDPCloseSocket','UDPOpen','UDPRecv',
+ 'UDPSend','UDPShutdown','UDPStartup','VarGetType','WinActivate',
+ 'WinActive','WinClose','WinExists','WinFlash','WinGetCaretPos',
+ 'WinGetClassList','WinGetClientSize','WinGetHandle','WinGetPos',
+ 'WinGetProcess','WinGetState','WinGetText','WinGetTitle','WinKill',
+ 'WinList','WinMenuSelectItem','WinMinimizeAll','WinMinimizeAllUndo',
+ 'WinMove','WinSetOnTop','WinSetState','WinSetTitle','WinSetTrans',
+ 'WinWait','WinWaitActive','WinWaitClose','WinWaitNotActive'
+ ),
+ 4 => array(
+ 'ArrayAdd','ArrayBinarySearch','ArrayConcatenate','ArrayDelete',
+ 'ArrayDisplay','ArrayFindAll','ArrayInsert','ArrayMax',
+ 'ArrayMaxIndex','ArrayMin','ArrayMinIndex','ArrayPop','ArrayPush',
+ 'ArrayReverse','ArraySearch','ArraySort','ArraySwap','ArrayToClip',
+ 'ArrayToString','ArrayTrim','ChooseColor','ChooseFont',
+ 'ClipBoard_ChangeChain','ClipBoard_Close','ClipBoard_CountFormats',
+ 'ClipBoard_Empty','ClipBoard_EnumFormats','ClipBoard_FormatStr',
+ 'ClipBoard_GetData','ClipBoard_GetDataEx','ClipBoard_GetFormatName',
+ 'ClipBoard_GetOpenWindow','ClipBoard_GetOwner',
+ 'ClipBoard_GetPriorityFormat','ClipBoard_GetSequenceNumber',
+ 'ClipBoard_GetViewer','ClipBoard_IsFormatAvailable',
+ 'ClipBoard_Open','ClipBoard_RegisterFormat','ClipBoard_SetData',
+ 'ClipBoard_SetDataEx','ClipBoard_SetViewer','ClipPutFile',
+ 'ColorConvertHSLtoRGB','ColorConvertRGBtoHSL','ColorGetBlue',
+ 'ColorGetGreen','ColorGetRed','Date_Time_CompareFileTime',
+ 'Date_Time_DOSDateTimeToArray','Date_Time_DOSDateTimeToFileTime',
+ 'Date_Time_DOSDateTimeToStr','Date_Time_DOSDateToArray',
+ 'Date_Time_DOSDateToStr','Date_Time_DOSTimeToArray',
+ 'Date_Time_DOSTimeToStr','Date_Time_EncodeFileTime',
+ 'Date_Time_EncodeSystemTime','Date_Time_FileTimeToArray',
+ 'Date_Time_FileTimeToDOSDateTime',
+ 'Date_Time_FileTimeToLocalFileTime','Date_Time_FileTimeToStr',
+ 'Date_Time_FileTimeToSystemTime','Date_Time_GetFileTime',
+ 'Date_Time_GetLocalTime','Date_Time_GetSystemTime',
+ 'Date_Time_GetSystemTimeAdjustment',
+ 'Date_Time_GetSystemTimeAsFileTime',
+ 'Date_Time_GetSystemTimes','Date_Time_GetTickCount',
+ 'Date_Time_GetTimeZoneInformation',
+ 'Date_Time_LocalFileTimeToFileTime','Date_Time_SetFileTime',
+ 'Date_Time_SetLocalTime','Date_Time_SetSystemTime',
+ 'Date_Time_SetSystemTimeAdjustment',
+ 'Date_Time_SetTimeZoneInformation','Date_Time_SystemTimeToArray',
+ 'Date_Time_SystemTimeToDateStr','Date_Time_SystemTimeToDateTimeStr',
+ 'Date_Time_SystemTimeToFileTime','Date_Time_SystemTimeToTimeStr',
+ 'Date_Time_SystemTimeToTzSpecificLocalTime',
+ 'Date_Time_TzSpecificLocalTimeToSystemTime','DateAdd',
+ 'DateDayOfWeek','DateDaysInMonth','DateDiff','DateIsLeapYear',
+ 'DateIsValid','DateTimeFormat','DateTimeSplit','DateToDayOfWeek',
+ 'DateToDayOfWeekISO','DateToDayValue','DateToMonth',
+ 'DayValueToDate','DebugBugReportEnv','DebugOut','DebugSetup',
+ 'Degree','EventLog__Backup','EventLog__Clear','EventLog__Close',
+ 'EventLog__Count','EventLog__DeregisterSource','EventLog__Full',
+ 'EventLog__Notify','EventLog__Oldest','EventLog__Open',
+ 'EventLog__OpenBackup','EventLog__Read','EventLog__RegisterSource',
+ 'EventLog__Report','FileCountLines','FileCreate','FileListToArray',
+ 'FilePrint','FileReadToArray','FileWriteFromArray',
+ 'FileWriteLog','FileWriteToLine','GDIPlus_ArrowCapCreate',
+ 'GDIPlus_ArrowCapDispose','GDIPlus_ArrowCapGetFillState',
+ 'GDIPlus_ArrowCapGetHeight','GDIPlus_ArrowCapGetMiddleInset',
+ 'GDIPlus_ArrowCapGetWidth','GDIPlus_ArrowCapSetFillState',
+ 'GDIPlus_ArrowCapSetHeight','GDIPlus_ArrowCapSetMiddleInset',
+ 'GDIPlus_ArrowCapSetWidth','GDIPlus_BitmapCloneArea',
+ 'GDIPlus_BitmapCreateFromFile','GDIPlus_BitmapCreateFromGraphics',
+ 'GDIPlus_BitmapCreateFromHBITMAP',
+ 'GDIPlus_BitmapCreateHBITMAPFromBitmap','GDIPlus_BitmapDispose',
+ 'GDIPlus_BitmapLockBits','GDIPlus_BitmapUnlockBits',
+ 'GDIPlus_BrushClone','GDIPlus_BrushCreateSolid',
+ 'GDIPlus_BrushDispose','GDIPlus_BrushGetType',
+ 'GDIPlus_CustomLineCapDispose','GDIPlus_Decoders',
+ 'GDIPlus_DecodersGetCount','GDIPlus_DecodersGetSize',
+ 'GDIPlus_Encoders','GDIPlus_EncodersGetCLSID',
+ 'GDIPlus_EncodersGetCount','GDIPlus_EncodersGetParamList',
+ 'GDIPlus_EncodersGetParamListSize','GDIPlus_EncodersGetSize',
+ 'GDIPlus_FontCreate','GDIPlus_FontDispose',
+ 'GDIPlus_FontFamilyCreate','GDIPlus_FontFamilyDispose',
+ 'GDIPlus_GraphicsClear','GDIPlus_GraphicsCreateFromHDC',
+ 'GDIPlus_GraphicsCreateFromHWND','GDIPlus_GraphicsDispose',
+ 'GDIPlus_GraphicsDrawArc','GDIPlus_GraphicsDrawBezier',
+ 'GDIPlus_GraphicsDrawClosedCurve','GDIPlus_GraphicsDrawCurve',
+ 'GDIPlus_GraphicsDrawEllipse','GDIPlus_GraphicsDrawImage',
+ 'GDIPlus_GraphicsDrawImageRect','GDIPlus_GraphicsDrawImageRectRect',
+ 'GDIPlus_GraphicsDrawLine','GDIPlus_GraphicsDrawPie',
+ 'GDIPlus_GraphicsDrawPolygon','GDIPlus_GraphicsDrawRect',
+ 'GDIPlus_GraphicsDrawString','GDIPlus_GraphicsDrawStringEx',
+ 'GDIPlus_GraphicsFillClosedCurve','GDIPlus_GraphicsFillEllipse',
+ 'GDIPlus_GraphicsFillPie','GDIPlus_GraphicsFillRect',
+ 'GDIPlus_GraphicsGetDC','GDIPlus_GraphicsGetSmoothingMode',
+ 'GDIPlus_GraphicsMeasureString','GDIPlus_GraphicsReleaseDC',
+ 'GDIPlus_GraphicsSetSmoothingMode','GDIPlus_GraphicsSetTransform',
+ 'GDIPlus_ImageDispose','GDIPlus_ImageGetGraphicsContext',
+ 'GDIPlus_ImageGetHeight','GDIPlus_ImageGetWidth',
+ 'GDIPlus_ImageLoadFromFile','GDIPlus_ImageSaveToFile',
+ 'GDIPlus_ImageSaveToFileEx','GDIPlus_MatrixCreate',
+ 'GDIPlus_MatrixDispose','GDIPlus_MatrixRotate','GDIPlus_ParamAdd',
+ 'GDIPlus_ParamInit','GDIPlus_PenCreate','GDIPlus_PenDispose',
+ 'GDIPlus_PenGetAlignment','GDIPlus_PenGetColor',
+ 'GDIPlus_PenGetCustomEndCap','GDIPlus_PenGetDashCap',
+ 'GDIPlus_PenGetDashStyle','GDIPlus_PenGetEndCap',
+ 'GDIPlus_PenGetWidth','GDIPlus_PenSetAlignment',
+ 'GDIPlus_PenSetColor','GDIPlus_PenSetCustomEndCap',
+ 'GDIPlus_PenSetDashCap','GDIPlus_PenSetDashStyle',
+ 'GDIPlus_PenSetEndCap','GDIPlus_PenSetWidth','GDIPlus_RectFCreate',
+ 'GDIPlus_Shutdown','GDIPlus_Startup','GDIPlus_StringFormatCreate',
+ 'GDIPlus_StringFormatDispose','GetIP','GUICtrlAVI_Close',
+ 'GUICtrlAVI_Create','GUICtrlAVI_Destroy','GUICtrlAVI_Open',
+ 'GUICtrlAVI_OpenEx','GUICtrlAVI_Play','GUICtrlAVI_Seek',
+ 'GUICtrlAVI_Show','GUICtrlAVI_Stop','GUICtrlButton_Click',
+ 'GUICtrlButton_Create','GUICtrlButton_Destroy',
+ 'GUICtrlButton_Enable','GUICtrlButton_GetCheck',
+ 'GUICtrlButton_GetFocus','GUICtrlButton_GetIdealSize',
+ 'GUICtrlButton_GetImage','GUICtrlButton_GetImageList',
+ 'GUICtrlButton_GetState','GUICtrlButton_GetText',
+ 'GUICtrlButton_GetTextMargin','GUICtrlButton_SetCheck',
+ 'GUICtrlButton_SetFocus','GUICtrlButton_SetImage',
+ 'GUICtrlButton_SetImageList','GUICtrlButton_SetSize',
+ 'GUICtrlButton_SetState','GUICtrlButton_SetStyle',
+ 'GUICtrlButton_SetText','GUICtrlButton_SetTextMargin',
+ 'GUICtrlButton_Show','GUICtrlComboBox_AddDir',
+ 'GUICtrlComboBox_AddString','GUICtrlComboBox_AutoComplete',
+ 'GUICtrlComboBox_BeginUpdate','GUICtrlComboBox_Create',
+ 'GUICtrlComboBox_DeleteString','GUICtrlComboBox_Destroy',
+ 'GUICtrlComboBox_EndUpdate','GUICtrlComboBox_FindString',
+ 'GUICtrlComboBox_FindStringExact','GUICtrlComboBox_GetComboBoxInfo',
+ 'GUICtrlComboBox_GetCount','GUICtrlComboBox_GetCurSel',
+ 'GUICtrlComboBox_GetDroppedControlRect',
+ 'GUICtrlComboBox_GetDroppedControlRectEx',
+ 'GUICtrlComboBox_GetDroppedState','GUICtrlComboBox_GetDroppedWidth',
+ 'GUICtrlComboBox_GetEditSel','GUICtrlComboBox_GetEditText',
+ 'GUICtrlComboBox_GetExtendedUI',
+ 'GUICtrlComboBox_GetHorizontalExtent',
+ 'GUICtrlComboBox_GetItemHeight','GUICtrlComboBox_GetLBText',
+ 'GUICtrlComboBox_GetLBTextLen','GUICtrlComboBox_GetList',
+ 'GUICtrlComboBox_GetListArray','GUICtrlComboBox_GetLocale',
+ 'GUICtrlComboBox_GetLocaleCountry','GUICtrlComboBox_GetLocaleLang',
+ 'GUICtrlComboBox_GetLocalePrimLang',
+ 'GUICtrlComboBox_GetLocaleSubLang','GUICtrlComboBox_GetMinVisible',
+ 'GUICtrlComboBox_GetTopIndex','GUICtrlComboBox_InitStorage',
+ 'GUICtrlComboBox_InsertString','GUICtrlComboBox_LimitText',
+ 'GUICtrlComboBox_ReplaceEditSel','GUICtrlComboBox_ResetContent',
+ 'GUICtrlComboBox_SelectString','GUICtrlComboBox_SetCurSel',
+ 'GUICtrlComboBox_SetDroppedWidth','GUICtrlComboBox_SetEditSel',
+ 'GUICtrlComboBox_SetEditText','GUICtrlComboBox_SetExtendedUI',
+ 'GUICtrlComboBox_SetHorizontalExtent',
+ 'GUICtrlComboBox_SetItemHeight','GUICtrlComboBox_SetMinVisible',
+ 'GUICtrlComboBox_SetTopIndex','GUICtrlComboBox_ShowDropDown',
+ 'GUICtrlComboBoxEx_AddDir','GUICtrlComboBoxEx_AddString',
+ 'GUICtrlComboBoxEx_BeginUpdate','GUICtrlComboBoxEx_Create',
+ 'GUICtrlComboBoxEx_CreateSolidBitMap',
+ 'GUICtrlComboBoxEx_DeleteString','GUICtrlComboBoxEx_Destroy',
+ 'GUICtrlComboBoxEx_EndUpdate','GUICtrlComboBoxEx_FindStringExact',
+ 'GUICtrlComboBoxEx_GetComboBoxInfo',
+ 'GUICtrlComboBoxEx_GetComboControl','GUICtrlComboBoxEx_GetCount',
+ 'GUICtrlComboBoxEx_GetCurSel',
+ 'GUICtrlComboBoxEx_GetDroppedControlRect',
+ 'GUICtrlComboBoxEx_GetDroppedControlRectEx',
+ 'GUICtrlComboBoxEx_GetDroppedState',
+ 'GUICtrlComboBoxEx_GetDroppedWidth',
+ 'GUICtrlComboBoxEx_GetEditControl','GUICtrlComboBoxEx_GetEditSel',
+ 'GUICtrlComboBoxEx_GetEditText',
+ 'GUICtrlComboBoxEx_GetExtendedStyle',
+ 'GUICtrlComboBoxEx_GetExtendedUI','GUICtrlComboBoxEx_GetImageList',
+ 'GUICtrlComboBoxEx_GetItem','GUICtrlComboBoxEx_GetItemEx',
+ 'GUICtrlComboBoxEx_GetItemHeight','GUICtrlComboBoxEx_GetItemImage',
+ 'GUICtrlComboBoxEx_GetItemIndent',
+ 'GUICtrlComboBoxEx_GetItemOverlayImage',
+ 'GUICtrlComboBoxEx_GetItemParam',
+ 'GUICtrlComboBoxEx_GetItemSelectedImage',
+ 'GUICtrlComboBoxEx_GetItemText','GUICtrlComboBoxEx_GetItemTextLen',
+ 'GUICtrlComboBoxEx_GetList','GUICtrlComboBoxEx_GetListArray',
+ 'GUICtrlComboBoxEx_GetLocale','GUICtrlComboBoxEx_GetLocaleCountry',
+ 'GUICtrlComboBoxEx_GetLocaleLang',
+ 'GUICtrlComboBoxEx_GetLocalePrimLang',
+ 'GUICtrlComboBoxEx_GetLocaleSubLang',
+ 'GUICtrlComboBoxEx_GetMinVisible','GUICtrlComboBoxEx_GetTopIndex',
+ 'GUICtrlComboBoxEx_InitStorage','GUICtrlComboBoxEx_InsertString',
+ 'GUICtrlComboBoxEx_LimitText','GUICtrlComboBoxEx_ReplaceEditSel',
+ 'GUICtrlComboBoxEx_ResetContent','GUICtrlComboBoxEx_SetCurSel',
+ 'GUICtrlComboBoxEx_SetDroppedWidth','GUICtrlComboBoxEx_SetEditSel',
+ 'GUICtrlComboBoxEx_SetEditText',
+ 'GUICtrlComboBoxEx_SetExtendedStyle',
+ 'GUICtrlComboBoxEx_SetExtendedUI','GUICtrlComboBoxEx_SetImageList',
+ 'GUICtrlComboBoxEx_SetItem','GUICtrlComboBoxEx_SetItemEx',
+ 'GUICtrlComboBoxEx_SetItemHeight','GUICtrlComboBoxEx_SetItemImage',
+ 'GUICtrlComboBoxEx_SetItemIndent',
+ 'GUICtrlComboBoxEx_SetItemOverlayImage',
+ 'GUICtrlComboBoxEx_SetItemParam',
+ 'GUICtrlComboBoxEx_SetItemSelectedImage',
+ 'GUICtrlComboBoxEx_SetMinVisible','GUICtrlComboBoxEx_SetTopIndex',
+ 'GUICtrlComboBoxEx_ShowDropDown','GUICtrlDTP_Create',
+ 'GUICtrlDTP_Destroy','GUICtrlDTP_GetMCColor','GUICtrlDTP_GetMCFont',
+ 'GUICtrlDTP_GetMonthCal','GUICtrlDTP_GetRange',
+ 'GUICtrlDTP_GetRangeEx','GUICtrlDTP_GetSystemTime',
+ 'GUICtrlDTP_GetSystemTimeEx','GUICtrlDTP_SetFormat',
+ 'GUICtrlDTP_SetMCColor','GUICtrlDTP_SetMCFont',
+ 'GUICtrlDTP_SetRange','GUICtrlDTP_SetRangeEx',
+ 'GUICtrlDTP_SetSystemTime','GUICtrlDTP_SetSystemTimeEx',
+ 'GUICtrlEdit_AppendText','GUICtrlEdit_BeginUpdate',
+ 'GUICtrlEdit_CanUndo','GUICtrlEdit_CharFromPos',
+ 'GUICtrlEdit_Create','GUICtrlEdit_Destroy',
+ 'GUICtrlEdit_EmptyUndoBuffer','GUICtrlEdit_EndUpdate',
+ 'GUICtrlEdit_Find','GUICtrlEdit_FmtLines',
+ 'GUICtrlEdit_GetFirstVisibleLine','GUICtrlEdit_GetLimitText',
+ 'GUICtrlEdit_GetLine','GUICtrlEdit_GetLineCount',
+ 'GUICtrlEdit_GetMargins','GUICtrlEdit_GetModify',
+ 'GUICtrlEdit_GetPasswordChar','GUICtrlEdit_GetRECT',
+ 'GUICtrlEdit_GetRECTEx','GUICtrlEdit_GetSel','GUICtrlEdit_GetText',
+ 'GUICtrlEdit_GetTextLen','GUICtrlEdit_HideBalloonTip',
+ 'GUICtrlEdit_InsertText','GUICtrlEdit_LineFromChar',
+ 'GUICtrlEdit_LineIndex','GUICtrlEdit_LineLength',
+ 'GUICtrlEdit_LineScroll','GUICtrlEdit_PosFromChar',
+ 'GUICtrlEdit_ReplaceSel','GUICtrlEdit_Scroll',
+ 'GUICtrlEdit_SetLimitText','GUICtrlEdit_SetMargins',
+ 'GUICtrlEdit_SetModify','GUICtrlEdit_SetPasswordChar',
+ 'GUICtrlEdit_SetReadOnly','GUICtrlEdit_SetRECT',
+ 'GUICtrlEdit_SetRECTEx','GUICtrlEdit_SetRECTNP',
+ 'GUICtrlEdit_SetRectNPEx','GUICtrlEdit_SetSel',
+ 'GUICtrlEdit_SetTabStops','GUICtrlEdit_SetText',
+ 'GUICtrlEdit_ShowBalloonTip','GUICtrlEdit_Undo',
+ 'GUICtrlHeader_AddItem','GUICtrlHeader_ClearFilter',
+ 'GUICtrlHeader_ClearFilterAll','GUICtrlHeader_Create',
+ 'GUICtrlHeader_CreateDragImage','GUICtrlHeader_DeleteItem',
+ 'GUICtrlHeader_Destroy','GUICtrlHeader_EditFilter',
+ 'GUICtrlHeader_GetBitmapMargin','GUICtrlHeader_GetImageList',
+ 'GUICtrlHeader_GetItem','GUICtrlHeader_GetItemAlign',
+ 'GUICtrlHeader_GetItemBitmap','GUICtrlHeader_GetItemCount',
+ 'GUICtrlHeader_GetItemDisplay','GUICtrlHeader_GetItemFlags',
+ 'GUICtrlHeader_GetItemFormat','GUICtrlHeader_GetItemImage',
+ 'GUICtrlHeader_GetItemOrder','GUICtrlHeader_GetItemParam',
+ 'GUICtrlHeader_GetItemRect','GUICtrlHeader_GetItemRectEx',
+ 'GUICtrlHeader_GetItemText','GUICtrlHeader_GetItemWidth',
+ 'GUICtrlHeader_GetOrderArray','GUICtrlHeader_GetUnicodeFormat',
+ 'GUICtrlHeader_HitTest','GUICtrlHeader_InsertItem',
+ 'GUICtrlHeader_Layout','GUICtrlHeader_OrderToIndex',
+ 'GUICtrlHeader_SetBitmapMargin',
+ 'GUICtrlHeader_SetFilterChangeTimeout',
+ 'GUICtrlHeader_SetHotDivider','GUICtrlHeader_SetImageList',
+ 'GUICtrlHeader_SetItem','GUICtrlHeader_SetItemAlign',
+ 'GUICtrlHeader_SetItemBitmap','GUICtrlHeader_SetItemDisplay',
+ 'GUICtrlHeader_SetItemFlags','GUICtrlHeader_SetItemFormat',
+ 'GUICtrlHeader_SetItemImage','GUICtrlHeader_SetItemOrder',
+ 'GUICtrlHeader_SetItemParam','GUICtrlHeader_SetItemText',
+ 'GUICtrlHeader_SetItemWidth','GUICtrlHeader_SetOrderArray',
+ 'GUICtrlHeader_SetUnicodeFormat','GUICtrlIpAddress_ClearAddress',
+ 'GUICtrlIpAddress_Create','GUICtrlIpAddress_Destroy',
+ 'GUICtrlIpAddress_Get','GUICtrlIpAddress_GetArray',
+ 'GUICtrlIpAddress_GetEx','GUICtrlIpAddress_IsBlank',
+ 'GUICtrlIpAddress_Set','GUICtrlIpAddress_SetArray',
+ 'GUICtrlIpAddress_SetEx','GUICtrlIpAddress_SetFocus',
+ 'GUICtrlIpAddress_SetFont','GUICtrlIpAddress_SetRange',
+ 'GUICtrlIpAddress_ShowHide','GUICtrlListBox_AddFile',
+ 'GUICtrlListBox_AddString','GUICtrlListBox_BeginUpdate',
+ 'GUICtrlListBox_Create','GUICtrlListBox_DeleteString',
+ 'GUICtrlListBox_Destroy','GUICtrlListBox_Dir',
+ 'GUICtrlListBox_EndUpdate','GUICtrlListBox_FindInText',
+ 'GUICtrlListBox_FindString','GUICtrlListBox_GetAnchorIndex',
+ 'GUICtrlListBox_GetCaretIndex','GUICtrlListBox_GetCount',
+ 'GUICtrlListBox_GetCurSel','GUICtrlListBox_GetHorizontalExtent',
+ 'GUICtrlListBox_GetItemData','GUICtrlListBox_GetItemHeight',
+ 'GUICtrlListBox_GetItemRect','GUICtrlListBox_GetItemRectEx',
+ 'GUICtrlListBox_GetListBoxInfo','GUICtrlListBox_GetLocale',
+ 'GUICtrlListBox_GetLocaleCountry','GUICtrlListBox_GetLocaleLang',
+ 'GUICtrlListBox_GetLocalePrimLang',
+ 'GUICtrlListBox_GetLocaleSubLang','GUICtrlListBox_GetSel',
+ 'GUICtrlListBox_GetSelCount','GUICtrlListBox_GetSelItems',
+ 'GUICtrlListBox_GetSelItemsText','GUICtrlListBox_GetText',
+ 'GUICtrlListBox_GetTextLen','GUICtrlListBox_GetTopIndex',
+ 'GUICtrlListBox_InitStorage','GUICtrlListBox_InsertString',
+ 'GUICtrlListBox_ItemFromPoint','GUICtrlListBox_ReplaceString',
+ 'GUICtrlListBox_ResetContent','GUICtrlListBox_SelectString',
+ 'GUICtrlListBox_SelItemRange','GUICtrlListBox_SelItemRangeEx',
+ 'GUICtrlListBox_SetAnchorIndex','GUICtrlListBox_SetCaretIndex',
+ 'GUICtrlListBox_SetColumnWidth','GUICtrlListBox_SetCurSel',
+ 'GUICtrlListBox_SetHorizontalExtent','GUICtrlListBox_SetItemData',
+ 'GUICtrlListBox_SetItemHeight','GUICtrlListBox_SetLocale',
+ 'GUICtrlListBox_SetSel','GUICtrlListBox_SetTabStops',
+ 'GUICtrlListBox_SetTopIndex','GUICtrlListBox_Sort',
+ 'GUICtrlListBox_SwapString','GUICtrlListBox_UpdateHScroll',
+ 'GUICtrlListView_AddArray','GUICtrlListView_AddColumn',
+ 'GUICtrlListView_AddItem','GUICtrlListView_AddSubItem',
+ 'GUICtrlListView_ApproximateViewHeight',
+ 'GUICtrlListView_ApproximateViewRect',
+ 'GUICtrlListView_ApproximateViewWidth','GUICtrlListView_Arrange',
+ 'GUICtrlListView_BeginUpdate','GUICtrlListView_CancelEditLabel',
+ 'GUICtrlListView_ClickItem','GUICtrlListView_CopyItems',
+ 'GUICtrlListView_Create','GUICtrlListView_CreateDragImage',
+ 'GUICtrlListView_CreateSolidBitMap',
+ 'GUICtrlListView_DeleteAllItems','GUICtrlListView_DeleteColumn',
+ 'GUICtrlListView_DeleteItem','GUICtrlListView_DeleteItemsSelected',
+ 'GUICtrlListView_Destroy','GUICtrlListView_DrawDragImage',
+ 'GUICtrlListView_EditLabel','GUICtrlListView_EnableGroupView',
+ 'GUICtrlListView_EndUpdate','GUICtrlListView_EnsureVisible',
+ 'GUICtrlListView_FindInText','GUICtrlListView_FindItem',
+ 'GUICtrlListView_FindNearest','GUICtrlListView_FindParam',
+ 'GUICtrlListView_FindText','GUICtrlListView_GetBkColor',
+ 'GUICtrlListView_GetBkImage','GUICtrlListView_GetCallbackMask',
+ 'GUICtrlListView_GetColumn','GUICtrlListView_GetColumnCount',
+ 'GUICtrlListView_GetColumnOrder',
+ 'GUICtrlListView_GetColumnOrderArray',
+ 'GUICtrlListView_GetColumnWidth','GUICtrlListView_GetCounterPage',
+ 'GUICtrlListView_GetEditControl',
+ 'GUICtrlListView_GetExtendedListViewStyle',
+ 'GUICtrlListView_GetGroupInfo',
+ 'GUICtrlListView_GetGroupViewEnabled','GUICtrlListView_GetHeader',
+ 'GUICtrlListView_GetHotCursor','GUICtrlListView_GetHotItem',
+ 'GUICtrlListView_GetHoverTime','GUICtrlListView_GetImageList',
+ 'GUICtrlListView_GetISearchString','GUICtrlListView_GetItem',
+ 'GUICtrlListView_GetItemChecked','GUICtrlListView_GetItemCount',
+ 'GUICtrlListView_GetItemCut','GUICtrlListView_GetItemDropHilited',
+ 'GUICtrlListView_GetItemEx','GUICtrlListView_GetItemFocused',
+ 'GUICtrlListView_GetItemGroupID','GUICtrlListView_GetItemImage',
+ 'GUICtrlListView_GetItemIndent','GUICtrlListView_GetItemParam',
+ 'GUICtrlListView_GetItemPosition',
+ 'GUICtrlListView_GetItemPositionX',
+ 'GUICtrlListView_GetItemPositionY','GUICtrlListView_GetItemRect',
+ 'GUICtrlListView_GetItemRectEx','GUICtrlListView_GetItemSelected',
+ 'GUICtrlListView_GetItemSpacing','GUICtrlListView_GetItemSpacingX',
+ 'GUICtrlListView_GetItemSpacingY','GUICtrlListView_GetItemState',
+ 'GUICtrlListView_GetItemStateImage','GUICtrlListView_GetItemText',
+ 'GUICtrlListView_GetItemTextArray',
+ 'GUICtrlListView_GetItemTextString','GUICtrlListView_GetNextItem',
+ 'GUICtrlListView_GetNumberOfWorkAreas','GUICtrlListView_GetOrigin',
+ 'GUICtrlListView_GetOriginX','GUICtrlListView_GetOriginY',
+ 'GUICtrlListView_GetOutlineColor',
+ 'GUICtrlListView_GetSelectedColumn',
+ 'GUICtrlListView_GetSelectedCount',
+ 'GUICtrlListView_GetSelectedIndices',
+ 'GUICtrlListView_GetSelectionMark','GUICtrlListView_GetStringWidth',
+ 'GUICtrlListView_GetSubItemRect','GUICtrlListView_GetTextBkColor',
+ 'GUICtrlListView_GetTextColor','GUICtrlListView_GetToolTips',
+ 'GUICtrlListView_GetTopIndex','GUICtrlListView_GetUnicodeFormat',
+ 'GUICtrlListView_GetView','GUICtrlListView_GetViewDetails',
+ 'GUICtrlListView_GetViewLarge','GUICtrlListView_GetViewList',
+ 'GUICtrlListView_GetViewRect','GUICtrlListView_GetViewSmall',
+ 'GUICtrlListView_GetViewTile','GUICtrlListView_HideColumn',
+ 'GUICtrlListView_HitTest','GUICtrlListView_InsertColumn',
+ 'GUICtrlListView_InsertGroup','GUICtrlListView_InsertItem',
+ 'GUICtrlListView_JustifyColumn','GUICtrlListView_MapIDToIndex',
+ 'GUICtrlListView_MapIndexToID','GUICtrlListView_RedrawItems',
+ 'GUICtrlListView_RegisterSortCallBack',
+ 'GUICtrlListView_RemoveAllGroups','GUICtrlListView_RemoveGroup',
+ 'GUICtrlListView_Scroll','GUICtrlListView_SetBkColor',
+ 'GUICtrlListView_SetBkImage','GUICtrlListView_SetCallBackMask',
+ 'GUICtrlListView_SetColumn','GUICtrlListView_SetColumnOrder',
+ 'GUICtrlListView_SetColumnOrderArray',
+ 'GUICtrlListView_SetColumnWidth',
+ 'GUICtrlListView_SetExtendedListViewStyle',
+ 'GUICtrlListView_SetGroupInfo','GUICtrlListView_SetHotItem',
+ 'GUICtrlListView_SetHoverTime','GUICtrlListView_SetIconSpacing',
+ 'GUICtrlListView_SetImageList','GUICtrlListView_SetItem',
+ 'GUICtrlListView_SetItemChecked','GUICtrlListView_SetItemCount',
+ 'GUICtrlListView_SetItemCut','GUICtrlListView_SetItemDropHilited',
+ 'GUICtrlListView_SetItemEx','GUICtrlListView_SetItemFocused',
+ 'GUICtrlListView_SetItemGroupID','GUICtrlListView_SetItemImage',
+ 'GUICtrlListView_SetItemIndent','GUICtrlListView_SetItemParam',
+ 'GUICtrlListView_SetItemPosition',
+ 'GUICtrlListView_SetItemPosition32',
+ 'GUICtrlListView_SetItemSelected','GUICtrlListView_SetItemState',
+ 'GUICtrlListView_SetItemStateImage','GUICtrlListView_SetItemText',
+ 'GUICtrlListView_SetOutlineColor',
+ 'GUICtrlListView_SetSelectedColumn',
+ 'GUICtrlListView_SetSelectionMark','GUICtrlListView_SetTextBkColor',
+ 'GUICtrlListView_SetTextColor','GUICtrlListView_SetToolTips',
+ 'GUICtrlListView_SetUnicodeFormat','GUICtrlListView_SetView',
+ 'GUICtrlListView_SetWorkAreas','GUICtrlListView_SimpleSort',
+ 'GUICtrlListView_SortItems','GUICtrlListView_SubItemHitTest',
+ 'GUICtrlListView_UnRegisterSortCallBack',
+ 'GUICtrlMenu_AddMenuItem','GUICtrlMenu_AppendMenu',
+ 'GUICtrlMenu_CheckMenuItem','GUICtrlMenu_CheckRadioItem',
+ 'GUICtrlMenu_CreateMenu','GUICtrlMenu_CreatePopup',
+ 'GUICtrlMenu_DeleteMenu','GUICtrlMenu_DestroyMenu',
+ 'GUICtrlMenu_DrawMenuBar','GUICtrlMenu_EnableMenuItem',
+ 'GUICtrlMenu_FindItem','GUICtrlMenu_FindParent',
+ 'GUICtrlMenu_GetItemBmp','GUICtrlMenu_GetItemBmpChecked',
+ 'GUICtrlMenu_GetItemBmpUnchecked','GUICtrlMenu_GetItemChecked',
+ 'GUICtrlMenu_GetItemCount','GUICtrlMenu_GetItemData',
+ 'GUICtrlMenu_GetItemDefault','GUICtrlMenu_GetItemDisabled',
+ 'GUICtrlMenu_GetItemEnabled','GUICtrlMenu_GetItemGrayed',
+ 'GUICtrlMenu_GetItemHighlighted','GUICtrlMenu_GetItemID',
+ 'GUICtrlMenu_GetItemInfo','GUICtrlMenu_GetItemRect',
+ 'GUICtrlMenu_GetItemRectEx','GUICtrlMenu_GetItemState',
+ 'GUICtrlMenu_GetItemStateEx','GUICtrlMenu_GetItemSubMenu',
+ 'GUICtrlMenu_GetItemText','GUICtrlMenu_GetItemType',
+ 'GUICtrlMenu_GetMenu','GUICtrlMenu_GetMenuBackground',
+ 'GUICtrlMenu_GetMenuBarInfo','GUICtrlMenu_GetMenuContextHelpID',
+ 'GUICtrlMenu_GetMenuData','GUICtrlMenu_GetMenuDefaultItem',
+ 'GUICtrlMenu_GetMenuHeight','GUICtrlMenu_GetMenuInfo',
+ 'GUICtrlMenu_GetMenuStyle','GUICtrlMenu_GetSystemMenu',
+ 'GUICtrlMenu_InsertMenuItem','GUICtrlMenu_InsertMenuItemEx',
+ 'GUICtrlMenu_IsMenu','GUICtrlMenu_LoadMenu',
+ 'GUICtrlMenu_MapAccelerator','GUICtrlMenu_MenuItemFromPoint',
+ 'GUICtrlMenu_RemoveMenu','GUICtrlMenu_SetItemBitmaps',
+ 'GUICtrlMenu_SetItemBmp','GUICtrlMenu_SetItemBmpChecked',
+ 'GUICtrlMenu_SetItemBmpUnchecked','GUICtrlMenu_SetItemChecked',
+ 'GUICtrlMenu_SetItemData','GUICtrlMenu_SetItemDefault',
+ 'GUICtrlMenu_SetItemDisabled','GUICtrlMenu_SetItemEnabled',
+ 'GUICtrlMenu_SetItemGrayed','GUICtrlMenu_SetItemHighlighted',
+ 'GUICtrlMenu_SetItemID','GUICtrlMenu_SetItemInfo',
+ 'GUICtrlMenu_SetItemState','GUICtrlMenu_SetItemSubMenu',
+ 'GUICtrlMenu_SetItemText','GUICtrlMenu_SetItemType',
+ 'GUICtrlMenu_SetMenu','GUICtrlMenu_SetMenuBackground',
+ 'GUICtrlMenu_SetMenuContextHelpID','GUICtrlMenu_SetMenuData',
+ 'GUICtrlMenu_SetMenuDefaultItem','GUICtrlMenu_SetMenuHeight',
+ 'GUICtrlMenu_SetMenuInfo','GUICtrlMenu_SetMenuStyle',
+ 'GUICtrlMenu_TrackPopupMenu','GUICtrlMonthCal_Create',
+ 'GUICtrlMonthCal_Destroy','GUICtrlMonthCal_GetColor',
+ 'GUICtrlMonthCal_GetColorArray','GUICtrlMonthCal_GetCurSel',
+ 'GUICtrlMonthCal_GetCurSelStr','GUICtrlMonthCal_GetFirstDOW',
+ 'GUICtrlMonthCal_GetFirstDOWStr','GUICtrlMonthCal_GetMaxSelCount',
+ 'GUICtrlMonthCal_GetMaxTodayWidth',
+ 'GUICtrlMonthCal_GetMinReqHeight','GUICtrlMonthCal_GetMinReqRect',
+ 'GUICtrlMonthCal_GetMinReqRectArray',
+ 'GUICtrlMonthCal_GetMinReqWidth','GUICtrlMonthCal_GetMonthDelta',
+ 'GUICtrlMonthCal_GetMonthRange','GUICtrlMonthCal_GetMonthRangeMax',
+ 'GUICtrlMonthCal_GetMonthRangeMaxStr',
+ 'GUICtrlMonthCal_GetMonthRangeMin',
+ 'GUICtrlMonthCal_GetMonthRangeMinStr',
+ 'GUICtrlMonthCal_GetMonthRangeSpan','GUICtrlMonthCal_GetRange',
+ 'GUICtrlMonthCal_GetRangeMax','GUICtrlMonthCal_GetRangeMaxStr',
+ 'GUICtrlMonthCal_GetRangeMin','GUICtrlMonthCal_GetRangeMinStr',
+ 'GUICtrlMonthCal_GetSelRange','GUICtrlMonthCal_GetSelRangeMax',
+ 'GUICtrlMonthCal_GetSelRangeMaxStr',
+ 'GUICtrlMonthCal_GetSelRangeMin',
+ 'GUICtrlMonthCal_GetSelRangeMinStr','GUICtrlMonthCal_GetToday',
+ 'GUICtrlMonthCal_GetTodayStr','GUICtrlMonthCal_GetUnicodeFormat',
+ 'GUICtrlMonthCal_HitTest','GUICtrlMonthCal_SetColor',
+ 'GUICtrlMonthCal_SetCurSel','GUICtrlMonthCal_SetDayState',
+ 'GUICtrlMonthCal_SetFirstDOW','GUICtrlMonthCal_SetMaxSelCount',
+ 'GUICtrlMonthCal_SetMonthDelta','GUICtrlMonthCal_SetRange',
+ 'GUICtrlMonthCal_SetSelRange','GUICtrlMonthCal_SetToday',
+ 'GUICtrlMonthCal_SetUnicodeFormat','GUICtrlRebar_AddBand',
+ 'GUICtrlRebar_AddToolBarBand','GUICtrlRebar_BeginDrag',
+ 'GUICtrlRebar_Create','GUICtrlRebar_DeleteBand',
+ 'GUICtrlRebar_Destroy','GUICtrlRebar_DragMove',
+ 'GUICtrlRebar_EndDrag','GUICtrlRebar_GetBandBackColor',
+ 'GUICtrlRebar_GetBandBorders','GUICtrlRebar_GetBandBordersEx',
+ 'GUICtrlRebar_GetBandChildHandle','GUICtrlRebar_GetBandChildSize',
+ 'GUICtrlRebar_GetBandCount','GUICtrlRebar_GetBandForeColor',
+ 'GUICtrlRebar_GetBandHeaderSize','GUICtrlRebar_GetBandID',
+ 'GUICtrlRebar_GetBandIdealSize','GUICtrlRebar_GetBandLength',
+ 'GUICtrlRebar_GetBandLParam','GUICtrlRebar_GetBandMargins',
+ 'GUICtrlRebar_GetBandMarginsEx','GUICtrlRebar_GetBandRect',
+ 'GUICtrlRebar_GetBandRectEx','GUICtrlRebar_GetBandStyle',
+ 'GUICtrlRebar_GetBandStyleBreak',
+ 'GUICtrlRebar_GetBandStyleChildEdge',
+ 'GUICtrlRebar_GetBandStyleFixedBMP',
+ 'GUICtrlRebar_GetBandStyleFixedSize',
+ 'GUICtrlRebar_GetBandStyleGripperAlways',
+ 'GUICtrlRebar_GetBandStyleHidden',
+ 'GUICtrlRebar_GetBandStyleHideTitle',
+ 'GUICtrlRebar_GetBandStyleNoGripper',
+ 'GUICtrlRebar_GetBandStyleTopAlign',
+ 'GUICtrlRebar_GetBandStyleUseChevron',
+ 'GUICtrlRebar_GetBandStyleVariableHeight',
+ 'GUICtrlRebar_GetBandText','GUICtrlRebar_GetBarHeight',
+ 'GUICtrlRebar_GetBKColor','GUICtrlRebar_GetColorScheme',
+ 'GUICtrlRebar_GetRowCount','GUICtrlRebar_GetRowHeight',
+ 'GUICtrlRebar_GetTextColor','GUICtrlRebar_GetToolTips',
+ 'GUICtrlRebar_GetUnicodeFormat','GUICtrlRebar_HitTest',
+ 'GUICtrlRebar_IDToIndex','GUICtrlRebar_MaximizeBand',
+ 'GUICtrlRebar_MinimizeBand','GUICtrlRebar_MoveBand',
+ 'GUICtrlRebar_SetBandBackColor','GUICtrlRebar_SetBandForeColor',
+ 'GUICtrlRebar_SetBandHeaderSize','GUICtrlRebar_SetBandID',
+ 'GUICtrlRebar_SetBandIdealSize','GUICtrlRebar_SetBandLength',
+ 'GUICtrlRebar_SetBandLParam','GUICtrlRebar_SetBandStyle',
+ 'GUICtrlRebar_SetBandStyleBreak',
+ 'GUICtrlRebar_SetBandStyleChildEdge',
+ 'GUICtrlRebar_SetBandStyleFixedBMP',
+ 'GUICtrlRebar_SetBandStyleFixedSize',
+ 'GUICtrlRebar_SetBandStyleGripperAlways',
+ 'GUICtrlRebar_SetBandStyleHidden',
+ 'GUICtrlRebar_SetBandStyleHideTitle',
+ 'GUICtrlRebar_SetBandStyleNoGripper',
+ 'GUICtrlRebar_SetBandStyleTopAlign',
+ 'GUICtrlRebar_SetBandStyleUseChevron',
+ 'GUICtrlRebar_SetBandStyleVariableHeight',
+ 'GUICtrlRebar_SetBandText','GUICtrlRebar_SetBKColor',
+ 'GUICtrlRebar_SetColorScheme','GUICtrlRebar_SetTextColor',
+ 'GUICtrlRebar_SetToolTips','GUICtrlRebar_SetUnicodeFormat',
+ 'GUICtrlRebar_ShowBand','GUICtrlSlider_ClearSel',
+ 'GUICtrlSlider_ClearTics','GUICtrlSlider_Create',
+ 'GUICtrlSlider_Destroy','GUICtrlSlider_GetBuddy',
+ 'GUICtrlSlider_GetChannelRect','GUICtrlSlider_GetLineSize',
+ 'GUICtrlSlider_GetNumTics','GUICtrlSlider_GetPageSize',
+ 'GUICtrlSlider_GetPos','GUICtrlSlider_GetPTics',
+ 'GUICtrlSlider_GetRange','GUICtrlSlider_GetRangeMax',
+ 'GUICtrlSlider_GetRangeMin','GUICtrlSlider_GetSel',
+ 'GUICtrlSlider_GetSelEnd','GUICtrlSlider_GetSelStart',
+ 'GUICtrlSlider_GetThumbLength','GUICtrlSlider_GetThumbRect',
+ 'GUICtrlSlider_GetThumbRectEx','GUICtrlSlider_GetTic',
+ 'GUICtrlSlider_GetTicPos','GUICtrlSlider_GetToolTips',
+ 'GUICtrlSlider_GetUnicodeFormat','GUICtrlSlider_SetBuddy',
+ 'GUICtrlSlider_SetLineSize','GUICtrlSlider_SetPageSize',
+ 'GUICtrlSlider_SetPos','GUICtrlSlider_SetRange',
+ 'GUICtrlSlider_SetRangeMax','GUICtrlSlider_SetRangeMin',
+ 'GUICtrlSlider_SetSel','GUICtrlSlider_SetSelEnd',
+ 'GUICtrlSlider_SetSelStart','GUICtrlSlider_SetThumbLength',
+ 'GUICtrlSlider_SetTic','GUICtrlSlider_SetTicFreq',
+ 'GUICtrlSlider_SetTipSide','GUICtrlSlider_SetToolTips',
+ 'GUICtrlSlider_SetUnicodeFormat','GUICtrlStatusBar_Create',
+ 'GUICtrlStatusBar_Destroy','GUICtrlStatusBar_EmbedControl',
+ 'GUICtrlStatusBar_GetBorders','GUICtrlStatusBar_GetBordersHorz',
+ 'GUICtrlStatusBar_GetBordersRect','GUICtrlStatusBar_GetBordersVert',
+ 'GUICtrlStatusBar_GetCount','GUICtrlStatusBar_GetHeight',
+ 'GUICtrlStatusBar_GetIcon','GUICtrlStatusBar_GetParts',
+ 'GUICtrlStatusBar_GetRect','GUICtrlStatusBar_GetRectEx',
+ 'GUICtrlStatusBar_GetText','GUICtrlStatusBar_GetTextFlags',
+ 'GUICtrlStatusBar_GetTextLength','GUICtrlStatusBar_GetTextLengthEx',
+ 'GUICtrlStatusBar_GetTipText','GUICtrlStatusBar_GetUnicodeFormat',
+ 'GUICtrlStatusBar_GetWidth','GUICtrlStatusBar_IsSimple',
+ 'GUICtrlStatusBar_Resize','GUICtrlStatusBar_SetBkColor',
+ 'GUICtrlStatusBar_SetIcon','GUICtrlStatusBar_SetMinHeight',
+ 'GUICtrlStatusBar_SetParts','GUICtrlStatusBar_SetSimple',
+ 'GUICtrlStatusBar_SetText','GUICtrlStatusBar_SetTipText',
+ 'GUICtrlStatusBar_SetUnicodeFormat','GUICtrlStatusBar_ShowHide',
+ 'GUICtrlTab_Create','GUICtrlTab_DeleteAllItems',
+ 'GUICtrlTab_DeleteItem','GUICtrlTab_DeselectAll',
+ 'GUICtrlTab_Destroy','GUICtrlTab_FindTab','GUICtrlTab_GetCurFocus',
+ 'GUICtrlTab_GetCurSel','GUICtrlTab_GetDisplayRect',
+ 'GUICtrlTab_GetDisplayRectEx','GUICtrlTab_GetExtendedStyle',
+ 'GUICtrlTab_GetImageList','GUICtrlTab_GetItem',
+ 'GUICtrlTab_GetItemCount','GUICtrlTab_GetItemImage',
+ 'GUICtrlTab_GetItemParam','GUICtrlTab_GetItemRect',
+ 'GUICtrlTab_GetItemRectEx','GUICtrlTab_GetItemState',
+ 'GUICtrlTab_GetItemText','GUICtrlTab_GetRowCount',
+ 'GUICtrlTab_GetToolTips','GUICtrlTab_GetUnicodeFormat',
+ 'GUICtrlTab_HighlightItem','GUICtrlTab_HitTest',
+ 'GUICtrlTab_InsertItem','GUICtrlTab_RemoveImage',
+ 'GUICtrlTab_SetCurFocus','GUICtrlTab_SetCurSel',
+ 'GUICtrlTab_SetExtendedStyle','GUICtrlTab_SetImageList',
+ 'GUICtrlTab_SetItem','GUICtrlTab_SetItemImage',
+ 'GUICtrlTab_SetItemParam','GUICtrlTab_SetItemSize',
+ 'GUICtrlTab_SetItemState','GUICtrlTab_SetItemText',
+ 'GUICtrlTab_SetMinTabWidth','GUICtrlTab_SetPadding',
+ 'GUICtrlTab_SetToolTips','GUICtrlTab_SetUnicodeFormat',
+ 'GUICtrlToolbar_AddBitmap','GUICtrlToolbar_AddButton',
+ 'GUICtrlToolbar_AddButtonSep','GUICtrlToolbar_AddString',
+ 'GUICtrlToolbar_ButtonCount','GUICtrlToolbar_CheckButton',
+ 'GUICtrlToolbar_ClickAccel','GUICtrlToolbar_ClickButton',
+ 'GUICtrlToolbar_ClickIndex','GUICtrlToolbar_CommandToIndex',
+ 'GUICtrlToolbar_Create','GUICtrlToolbar_Customize',
+ 'GUICtrlToolbar_DeleteButton','GUICtrlToolbar_Destroy',
+ 'GUICtrlToolbar_EnableButton','GUICtrlToolbar_FindToolbar',
+ 'GUICtrlToolbar_GetAnchorHighlight','GUICtrlToolbar_GetBitmapFlags',
+ 'GUICtrlToolbar_GetButtonBitmap','GUICtrlToolbar_GetButtonInfo',
+ 'GUICtrlToolbar_GetButtonInfoEx','GUICtrlToolbar_GetButtonParam',
+ 'GUICtrlToolbar_GetButtonRect','GUICtrlToolbar_GetButtonRectEx',
+ 'GUICtrlToolbar_GetButtonSize','GUICtrlToolbar_GetButtonState',
+ 'GUICtrlToolbar_GetButtonStyle','GUICtrlToolbar_GetButtonText',
+ 'GUICtrlToolbar_GetColorScheme',
+ 'GUICtrlToolbar_GetDisabledImageList',
+ 'GUICtrlToolbar_GetExtendedStyle','GUICtrlToolbar_GetHotImageList',
+ 'GUICtrlToolbar_GetHotItem','GUICtrlToolbar_GetImageList',
+ 'GUICtrlToolbar_GetInsertMark','GUICtrlToolbar_GetInsertMarkColor',
+ 'GUICtrlToolbar_GetMaxSize','GUICtrlToolbar_GetMetrics',
+ 'GUICtrlToolbar_GetPadding','GUICtrlToolbar_GetRows',
+ 'GUICtrlToolbar_GetString','GUICtrlToolbar_GetStyle',
+ 'GUICtrlToolbar_GetStyleAltDrag',
+ 'GUICtrlToolbar_GetStyleCustomErase','GUICtrlToolbar_GetStyleFlat',
+ 'GUICtrlToolbar_GetStyleList','GUICtrlToolbar_GetStyleRegisterDrop',
+ 'GUICtrlToolbar_GetStyleToolTips',
+ 'GUICtrlToolbar_GetStyleTransparent',
+ 'GUICtrlToolbar_GetStyleWrapable','GUICtrlToolbar_GetTextRows',
+ 'GUICtrlToolbar_GetToolTips','GUICtrlToolbar_GetUnicodeFormat',
+ 'GUICtrlToolbar_HideButton','GUICtrlToolbar_HighlightButton',
+ 'GUICtrlToolbar_HitTest','GUICtrlToolbar_IndexToCommand',
+ 'GUICtrlToolbar_InsertButton','GUICtrlToolbar_InsertMarkHitTest',
+ 'GUICtrlToolbar_IsButtonChecked','GUICtrlToolbar_IsButtonEnabled',
+ 'GUICtrlToolbar_IsButtonHidden',
+ 'GUICtrlToolbar_IsButtonHighlighted',
+ 'GUICtrlToolbar_IsButtonIndeterminate',
+ 'GUICtrlToolbar_IsButtonPressed','GUICtrlToolbar_LoadBitmap',
+ 'GUICtrlToolbar_LoadImages','GUICtrlToolbar_MapAccelerator',
+ 'GUICtrlToolbar_MoveButton','GUICtrlToolbar_PressButton',
+ 'GUICtrlToolbar_SetAnchorHighlight','GUICtrlToolbar_SetBitmapSize',
+ 'GUICtrlToolbar_SetButtonBitMap','GUICtrlToolbar_SetButtonInfo',
+ 'GUICtrlToolbar_SetButtonInfoEx','GUICtrlToolbar_SetButtonParam',
+ 'GUICtrlToolbar_SetButtonSize','GUICtrlToolbar_SetButtonState',
+ 'GUICtrlToolbar_SetButtonStyle','GUICtrlToolbar_SetButtonText',
+ 'GUICtrlToolbar_SetButtonWidth','GUICtrlToolbar_SetCmdID',
+ 'GUICtrlToolbar_SetColorScheme',
+ 'GUICtrlToolbar_SetDisabledImageList',
+ 'GUICtrlToolbar_SetDrawTextFlags','GUICtrlToolbar_SetExtendedStyle',
+ 'GUICtrlToolbar_SetHotImageList','GUICtrlToolbar_SetHotItem',
+ 'GUICtrlToolbar_SetImageList','GUICtrlToolbar_SetIndent',
+ 'GUICtrlToolbar_SetIndeterminate','GUICtrlToolbar_SetInsertMark',
+ 'GUICtrlToolbar_SetInsertMarkColor','GUICtrlToolbar_SetMaxTextRows',
+ 'GUICtrlToolbar_SetMetrics','GUICtrlToolbar_SetPadding',
+ 'GUICtrlToolbar_SetParent','GUICtrlToolbar_SetRows',
+ 'GUICtrlToolbar_SetStyle','GUICtrlToolbar_SetStyleAltDrag',
+ 'GUICtrlToolbar_SetStyleCustomErase','GUICtrlToolbar_SetStyleFlat',
+ 'GUICtrlToolbar_SetStyleList','GUICtrlToolbar_SetStyleRegisterDrop',
+ 'GUICtrlToolbar_SetStyleToolTips',
+ 'GUICtrlToolbar_SetStyleTransparent',
+ 'GUICtrlToolbar_SetStyleWrapable','GUICtrlToolbar_SetToolTips',
+ 'GUICtrlToolbar_SetUnicodeFormat','GUICtrlToolbar_SetWindowTheme',
+ 'GUICtrlTreeView_Add','GUICtrlTreeView_AddChild',
+ 'GUICtrlTreeView_AddChildFirst','GUICtrlTreeView_AddFirst',
+ 'GUICtrlTreeView_BeginUpdate','GUICtrlTreeView_ClickItem',
+ 'GUICtrlTreeView_Create','GUICtrlTreeView_CreateDragImage',
+ 'GUICtrlTreeView_CreateSolidBitMap','GUICtrlTreeView_Delete',
+ 'GUICtrlTreeView_DeleteAll','GUICtrlTreeView_DeleteChildren',
+ 'GUICtrlTreeView_Destroy','GUICtrlTreeView_DisplayRect',
+ 'GUICtrlTreeView_DisplayRectEx','GUICtrlTreeView_EditText',
+ 'GUICtrlTreeView_EndEdit','GUICtrlTreeView_EndUpdate',
+ 'GUICtrlTreeView_EnsureVisible','GUICtrlTreeView_Expand',
+ 'GUICtrlTreeView_ExpandedOnce','GUICtrlTreeView_FindItem',
+ 'GUICtrlTreeView_FindItemEx','GUICtrlTreeView_GetBkColor',
+ 'GUICtrlTreeView_GetBold','GUICtrlTreeView_GetChecked',
+ 'GUICtrlTreeView_GetChildCount','GUICtrlTreeView_GetChildren',
+ 'GUICtrlTreeView_GetCount','GUICtrlTreeView_GetCut',
+ 'GUICtrlTreeView_GetDropTarget','GUICtrlTreeView_GetEditControl',
+ 'GUICtrlTreeView_GetExpanded','GUICtrlTreeView_GetFirstChild',
+ 'GUICtrlTreeView_GetFirstItem','GUICtrlTreeView_GetFirstVisible',
+ 'GUICtrlTreeView_GetFocused','GUICtrlTreeView_GetHeight',
+ 'GUICtrlTreeView_GetImageIndex',
+ 'GUICtrlTreeView_GetImageListIconHandle',
+ 'GUICtrlTreeView_GetIndent','GUICtrlTreeView_GetInsertMarkColor',
+ 'GUICtrlTreeView_GetISearchString','GUICtrlTreeView_GetItemByIndex',
+ 'GUICtrlTreeView_GetItemHandle','GUICtrlTreeView_GetItemParam',
+ 'GUICtrlTreeView_GetLastChild','GUICtrlTreeView_GetLineColor',
+ 'GUICtrlTreeView_GetNext','GUICtrlTreeView_GetNextChild',
+ 'GUICtrlTreeView_GetNextSibling','GUICtrlTreeView_GetNextVisible',
+ 'GUICtrlTreeView_GetNormalImageList',
+ 'GUICtrlTreeView_GetParentHandle','GUICtrlTreeView_GetParentParam',
+ 'GUICtrlTreeView_GetPrev','GUICtrlTreeView_GetPrevChild',
+ 'GUICtrlTreeView_GetPrevSibling','GUICtrlTreeView_GetPrevVisible',
+ 'GUICtrlTreeView_GetScrollTime','GUICtrlTreeView_GetSelected',
+ 'GUICtrlTreeView_GetSelectedImageIndex',
+ 'GUICtrlTreeView_GetSelection','GUICtrlTreeView_GetSiblingCount',
+ 'GUICtrlTreeView_GetState','GUICtrlTreeView_GetStateImageIndex',
+ 'GUICtrlTreeView_GetStateImageList','GUICtrlTreeView_GetText',
+ 'GUICtrlTreeView_GetTextColor','GUICtrlTreeView_GetToolTips',
+ 'GUICtrlTreeView_GetTree','GUICtrlTreeView_GetUnicodeFormat',
+ 'GUICtrlTreeView_GetVisible','GUICtrlTreeView_GetVisibleCount',
+ 'GUICtrlTreeView_HitTest','GUICtrlTreeView_HitTestEx',
+ 'GUICtrlTreeView_HitTestItem','GUICtrlTreeView_Index',
+ 'GUICtrlTreeView_InsertItem','GUICtrlTreeView_IsFirstItem',
+ 'GUICtrlTreeView_IsParent','GUICtrlTreeView_Level',
+ 'GUICtrlTreeView_SelectItem','GUICtrlTreeView_SelectItemByIndex',
+ 'GUICtrlTreeView_SetBkColor','GUICtrlTreeView_SetBold',
+ 'GUICtrlTreeView_SetChecked','GUICtrlTreeView_SetCheckedByIndex',
+ 'GUICtrlTreeView_SetChildren','GUICtrlTreeView_SetCut',
+ 'GUICtrlTreeView_SetDropTarget','GUICtrlTreeView_SetFocused',
+ 'GUICtrlTreeView_SetHeight','GUICtrlTreeView_SetIcon',
+ 'GUICtrlTreeView_SetImageIndex','GUICtrlTreeView_SetIndent',
+ 'GUICtrlTreeView_SetInsertMark',
+ 'GUICtrlTreeView_SetInsertMarkColor',
+ 'GUICtrlTreeView_SetItemHeight','GUICtrlTreeView_SetItemParam',
+ 'GUICtrlTreeView_SetLineColor','GUICtrlTreeView_SetNormalImageList',
+ 'GUICtrlTreeView_SetScrollTime','GUICtrlTreeView_SetSelected',
+ 'GUICtrlTreeView_SetSelectedImageIndex','GUICtrlTreeView_SetState',
+ 'GUICtrlTreeView_SetStateImageIndex',
+ 'GUICtrlTreeView_SetStateImageList','GUICtrlTreeView_SetText',
+ 'GUICtrlTreeView_SetTextColor','GUICtrlTreeView_SetToolTips',
+ 'GUICtrlTreeView_SetUnicodeFormat','GUICtrlTreeView_Sort',
+ 'GUIImageList_Add','GUIImageList_AddBitmap','GUIImageList_AddIcon',
+ 'GUIImageList_AddMasked','GUIImageList_BeginDrag',
+ 'GUIImageList_Copy','GUIImageList_Create','GUIImageList_Destroy',
+ 'GUIImageList_DestroyIcon','GUIImageList_DragEnter',
+ 'GUIImageList_DragLeave','GUIImageList_DragMove',
+ 'GUIImageList_Draw','GUIImageList_DrawEx','GUIImageList_Duplicate',
+ 'GUIImageList_EndDrag','GUIImageList_GetBkColor',
+ 'GUIImageList_GetIcon','GUIImageList_GetIconHeight',
+ 'GUIImageList_GetIconSize','GUIImageList_GetIconSizeEx',
+ 'GUIImageList_GetIconWidth','GUIImageList_GetImageCount',
+ 'GUIImageList_GetImageInfoEx','GUIImageList_Remove',
+ 'GUIImageList_ReplaceIcon','GUIImageList_SetBkColor',
+ 'GUIImageList_SetIconSize','GUIImageList_SetImageCount',
+ 'GUIImageList_Swap','GUIScrollBars_EnableScrollBar',
+ 'GUIScrollBars_GetScrollBarInfoEx','GUIScrollBars_GetScrollBarRect',
+ 'GUIScrollBars_GetScrollBarRGState',
+ 'GUIScrollBars_GetScrollBarXYLineButton',
+ 'GUIScrollBars_GetScrollBarXYThumbBottom',
+ 'GUIScrollBars_GetScrollBarXYThumbTop',
+ 'GUIScrollBars_GetScrollInfo','GUIScrollBars_GetScrollInfoEx',
+ 'GUIScrollBars_GetScrollInfoMax','GUIScrollBars_GetScrollInfoMin',
+ 'GUIScrollBars_GetScrollInfoPage','GUIScrollBars_GetScrollInfoPos',
+ 'GUIScrollBars_GetScrollInfoTrackPos','GUIScrollBars_GetScrollPos',
+ 'GUIScrollBars_GetScrollRange','GUIScrollBars_Init',
+ 'GUIScrollBars_ScrollWindow','GUIScrollBars_SetScrollInfo',
+ 'GUIScrollBars_SetScrollInfoMax','GUIScrollBars_SetScrollInfoMin',
+ 'GUIScrollBars_SetScrollInfoPage','GUIScrollBars_SetScrollInfoPos',
+ 'GUIScrollBars_SetScrollRange','GUIScrollBars_ShowScrollBar',
+ 'GUIToolTip_Activate','GUIToolTip_AddTool','GUIToolTip_AdjustRect',
+ 'GUIToolTip_BitsToTTF','GUIToolTip_Create','GUIToolTip_DelTool',
+ 'GUIToolTip_Destroy','GUIToolTip_EnumTools',
+ 'GUIToolTip_GetBubbleHeight','GUIToolTip_GetBubbleSize',
+ 'GUIToolTip_GetBubbleWidth','GUIToolTip_GetCurrentTool',
+ 'GUIToolTip_GetDelayTime','GUIToolTip_GetMargin',
+ 'GUIToolTip_GetMarginEx','GUIToolTip_GetMaxTipWidth',
+ 'GUIToolTip_GetText','GUIToolTip_GetTipBkColor',
+ 'GUIToolTip_GetTipTextColor','GUIToolTip_GetTitleBitMap',
+ 'GUIToolTip_GetTitleText','GUIToolTip_GetToolCount',
+ 'GUIToolTip_GetToolInfo','GUIToolTip_HitTest',
+ 'GUIToolTip_NewToolRect','GUIToolTip_Pop','GUIToolTip_PopUp',
+ 'GUIToolTip_SetDelayTime','GUIToolTip_SetMargin',
+ 'GUIToolTip_SetMaxTipWidth','GUIToolTip_SetTipBkColor',
+ 'GUIToolTip_SetTipTextColor','GUIToolTip_SetTitle',
+ 'GUIToolTip_SetToolInfo','GUIToolTip_SetWindowTheme',
+ 'GUIToolTip_ToolExists','GUIToolTip_ToolToArray',
+ 'GUIToolTip_TrackActivate','GUIToolTip_TrackPosition',
+ 'GUIToolTip_TTFToBits','GUIToolTip_Update',
+ 'GUIToolTip_UpdateTipText','HexToString','IE_Example',
+ 'IE_Introduction','IE_VersionInfo','IEAction','IEAttach',
+ 'IEBodyReadHTML','IEBodyReadText','IEBodyWriteHTML','IECreate',
+ 'IECreateEmbedded','IEDocGetObj','IEDocInsertHTML',
+ 'IEDocInsertText','IEDocReadHTML','IEDocWriteHTML',
+ 'IEErrorHandlerDeRegister','IEErrorHandlerRegister','IEErrorNotify',
+ 'IEFormElementCheckBoxSelect','IEFormElementGetCollection',
+ 'IEFormElementGetObjByName','IEFormElementGetValue',
+ 'IEFormElementOptionSelect','IEFormElementRadioSelect',
+ 'IEFormElementSetValue','IEFormGetCollection','IEFormGetObjByName',
+ 'IEFormImageClick','IEFormReset','IEFormSubmit',
+ 'IEFrameGetCollection','IEFrameGetObjByName','IEGetObjById',
+ 'IEGetObjByName','IEHeadInsertEventScript','IEImgClick',
+ 'IEImgGetCollection','IEIsFrameSet','IELinkClickByIndex',
+ 'IELinkClickByText','IELinkGetCollection','IELoadWait',
+ 'IELoadWaitTimeout','IENavigate','IEPropertyGet','IEPropertySet',
+ 'IEQuit','IETableGetCollection','IETableWriteToArray',
+ 'IETagNameAllGetCollection','IETagNameGetCollection','Iif',
+ 'INetExplorerCapable','INetGetSource','INetMail','INetSmtpMail',
+ 'IsPressed','MathCheckDiv','Max','MemGlobalAlloc','MemGlobalFree',
+ 'MemGlobalLock','MemGlobalSize','MemGlobalUnlock','MemMoveMemory',
+ 'MemMsgBox','MemShowError','MemVirtualAlloc','MemVirtualAllocEx',
+ 'MemVirtualFree','MemVirtualFreeEx','Min','MouseTrap',
+ 'NamedPipes_CallNamedPipe','NamedPipes_ConnectNamedPipe',
+ 'NamedPipes_CreateNamedPipe','NamedPipes_CreatePipe',
+ 'NamedPipes_DisconnectNamedPipe',
+ 'NamedPipes_GetNamedPipeHandleState','NamedPipes_GetNamedPipeInfo',
+ 'NamedPipes_PeekNamedPipe','NamedPipes_SetNamedPipeHandleState',
+ 'NamedPipes_TransactNamedPipe','NamedPipes_WaitNamedPipe',
+ 'Net_Share_ConnectionEnum','Net_Share_FileClose',
+ 'Net_Share_FileEnum','Net_Share_FileGetInfo','Net_Share_PermStr',
+ 'Net_Share_ResourceStr','Net_Share_SessionDel',
+ 'Net_Share_SessionEnum','Net_Share_SessionGetInfo',
+ 'Net_Share_ShareAdd','Net_Share_ShareCheck','Net_Share_ShareDel',
+ 'Net_Share_ShareEnum','Net_Share_ShareGetInfo',
+ 'Net_Share_ShareSetInfo','Net_Share_StatisticsGetSvr',
+ 'Net_Share_StatisticsGetWrk','Now','NowCalc','NowCalcDate',
+ 'NowDate','NowTime','PathFull','PathMake','PathSplit',
+ 'ProcessGetName','ProcessGetPriority','Radian',
+ 'ReplaceStringInFile','RunDOS','ScreenCapture_Capture',
+ 'ScreenCapture_CaptureWnd','ScreenCapture_SaveImage',
+ 'ScreenCapture_SetBMPFormat','ScreenCapture_SetJPGQuality',
+ 'ScreenCapture_SetTIFColorDepth','ScreenCapture_SetTIFCompression',
+ 'Security__AdjustTokenPrivileges','Security__GetAccountSid',
+ 'Security__GetLengthSid','Security__GetTokenInformation',
+ 'Security__ImpersonateSelf','Security__IsValidSid',
+ 'Security__LookupAccountName','Security__LookupAccountSid',
+ 'Security__LookupPrivilegeValue','Security__OpenProcessToken',
+ 'Security__OpenThreadToken','Security__OpenThreadTokenEx',
+ 'Security__SetPrivilege','Security__SidToStringSid',
+ 'Security__SidTypeStr','Security__StringSidToSid','SendMessage',
+ 'SendMessageA','SetDate','SetTime','Singleton','SoundClose',
+ 'SoundLength','SoundOpen','SoundPause','SoundPlay','SoundPos',
+ 'SoundResume','SoundSeek','SoundStatus','SoundStop',
+ 'SQLite_Changes','SQLite_Close','SQLite_Display2DResult',
+ 'SQLite_Encode','SQLite_ErrCode','SQLite_ErrMsg','SQLite_Escape',
+ 'SQLite_Exec','SQLite_FetchData','SQLite_FetchNames',
+ 'SQLite_GetTable','SQLite_GetTable2d','SQLite_LastInsertRowID',
+ 'SQLite_LibVersion','SQLite_Open','SQLite_Query',
+ 'SQLite_QueryFinalize','SQLite_QueryReset','SQLite_QuerySingleRow',
+ 'SQLite_SaveMode','SQLite_SetTimeout','SQLite_Shutdown',
+ 'SQLite_SQLiteExe','SQLite_Startup','SQLite_TotalChanges',
+ 'StringAddComma','StringBetween','StringEncrypt','StringInsert',
+ 'StringProper','StringRepeat','StringReverse','StringSplit',
+ 'StringToHex','TCPIpToName','TempFile','TicksToTime','Timer_Diff',
+ 'Timer_GetTimerID','Timer_Init','Timer_KillAllTimers',
+ 'Timer_KillTimer','Timer_SetTimer','TimeToTicks','VersionCompare',
+ 'viClose','viExecCommand','viFindGpib','viGpibBusReset','viGTL',
+ 'viOpen','viSetAttribute','viSetTimeout','WeekNumberISO',
+ 'WinAPI_AttachConsole','WinAPI_AttachThreadInput','WinAPI_Beep',
+ 'WinAPI_BitBlt','WinAPI_CallNextHookEx','WinAPI_Check',
+ 'WinAPI_ClientToScreen','WinAPI_CloseHandle',
+ 'WinAPI_CommDlgExtendedError','WinAPI_CopyIcon',
+ 'WinAPI_CreateBitmap','WinAPI_CreateCompatibleBitmap',
+ 'WinAPI_CreateCompatibleDC','WinAPI_CreateEvent',
+ 'WinAPI_CreateFile','WinAPI_CreateFont','WinAPI_CreateFontIndirect',
+ 'WinAPI_CreateProcess','WinAPI_CreateSolidBitmap',
+ 'WinAPI_CreateSolidBrush','WinAPI_CreateWindowEx',
+ 'WinAPI_DefWindowProc','WinAPI_DeleteDC','WinAPI_DeleteObject',
+ 'WinAPI_DestroyIcon','WinAPI_DestroyWindow','WinAPI_DrawEdge',
+ 'WinAPI_DrawFrameControl','WinAPI_DrawIcon','WinAPI_DrawIconEx',
+ 'WinAPI_DrawText','WinAPI_EnableWindow','WinAPI_EnumDisplayDevices',
+ 'WinAPI_EnumWindows','WinAPI_EnumWindowsPopup',
+ 'WinAPI_EnumWindowsTop','WinAPI_ExpandEnvironmentStrings',
+ 'WinAPI_ExtractIconEx','WinAPI_FatalAppExit','WinAPI_FillRect',
+ 'WinAPI_FindExecutable','WinAPI_FindWindow','WinAPI_FlashWindow',
+ 'WinAPI_FlashWindowEx','WinAPI_FloatToInt',
+ 'WinAPI_FlushFileBuffers','WinAPI_FormatMessage','WinAPI_FrameRect',
+ 'WinAPI_FreeLibrary','WinAPI_GetAncestor','WinAPI_GetAsyncKeyState',
+ 'WinAPI_GetClassName','WinAPI_GetClientHeight',
+ 'WinAPI_GetClientRect','WinAPI_GetClientWidth',
+ 'WinAPI_GetCurrentProcess','WinAPI_GetCurrentProcessID',
+ 'WinAPI_GetCurrentThread','WinAPI_GetCurrentThreadId',
+ 'WinAPI_GetCursorInfo','WinAPI_GetDC','WinAPI_GetDesktopWindow',
+ 'WinAPI_GetDeviceCaps','WinAPI_GetDIBits','WinAPI_GetDlgCtrlID',
+ 'WinAPI_GetDlgItem','WinAPI_GetFileSizeEx','WinAPI_GetFocus',
+ 'WinAPI_GetForegroundWindow','WinAPI_GetIconInfo',
+ 'WinAPI_GetLastError','WinAPI_GetLastErrorMessage',
+ 'WinAPI_GetModuleHandle','WinAPI_GetMousePos','WinAPI_GetMousePosX',
+ 'WinAPI_GetMousePosY','WinAPI_GetObject','WinAPI_GetOpenFileName',
+ 'WinAPI_GetOverlappedResult','WinAPI_GetParent',
+ 'WinAPI_GetProcessAffinityMask','WinAPI_GetSaveFileName',
+ 'WinAPI_GetStdHandle','WinAPI_GetStockObject','WinAPI_GetSysColor',
+ 'WinAPI_GetSysColorBrush','WinAPI_GetSystemMetrics',
+ 'WinAPI_GetTextExtentPoint32','WinAPI_GetWindow',
+ 'WinAPI_GetWindowDC','WinAPI_GetWindowHeight',
+ 'WinAPI_GetWindowLong','WinAPI_GetWindowRect',
+ 'WinAPI_GetWindowText','WinAPI_GetWindowThreadProcessId',
+ 'WinAPI_GetWindowWidth','WinAPI_GetXYFromPoint',
+ 'WinAPI_GlobalMemStatus','WinAPI_GUIDFromString',
+ 'WinAPI_GUIDFromStringEx','WinAPI_HiWord','WinAPI_InProcess',
+ 'WinAPI_IntToFloat','WinAPI_InvalidateRect','WinAPI_IsClassName',
+ 'WinAPI_IsWindow','WinAPI_IsWindowVisible','WinAPI_LoadBitmap',
+ 'WinAPI_LoadImage','WinAPI_LoadLibrary','WinAPI_LoadLibraryEx',
+ 'WinAPI_LoadShell32Icon','WinAPI_LoadString','WinAPI_LocalFree',
+ 'WinAPI_LoWord','WinAPI_MakeDWord','WinAPI_MAKELANGID',
+ 'WinAPI_MAKELCID','WinAPI_MakeLong','WinAPI_MessageBeep',
+ 'WinAPI_Mouse_Event','WinAPI_MoveWindow','WinAPI_MsgBox',
+ 'WinAPI_MulDiv','WinAPI_MultiByteToWideChar',
+ 'WinAPI_MultiByteToWideCharEx','WinAPI_OpenProcess',
+ 'WinAPI_PointFromRect','WinAPI_PostMessage','WinAPI_PrimaryLangId',
+ 'WinAPI_PtInRect','WinAPI_ReadFile','WinAPI_ReadProcessMemory',
+ 'WinAPI_RectIsEmpty','WinAPI_RedrawWindow',
+ 'WinAPI_RegisterWindowMessage','WinAPI_ReleaseCapture',
+ 'WinAPI_ReleaseDC','WinAPI_ScreenToClient','WinAPI_SelectObject',
+ 'WinAPI_SetBkColor','WinAPI_SetCapture','WinAPI_SetCursor',
+ 'WinAPI_SetDefaultPrinter','WinAPI_SetDIBits','WinAPI_SetEvent',
+ 'WinAPI_SetFocus','WinAPI_SetFont','WinAPI_SetHandleInformation',
+ 'WinAPI_SetLastError','WinAPI_SetParent',
+ 'WinAPI_SetProcessAffinityMask','WinAPI_SetSysColors',
+ 'WinAPI_SetTextColor','WinAPI_SetWindowLong','WinAPI_SetWindowPos',
+ 'WinAPI_SetWindowsHookEx','WinAPI_SetWindowText',
+ 'WinAPI_ShowCursor','WinAPI_ShowError','WinAPI_ShowMsg',
+ 'WinAPI_ShowWindow','WinAPI_StringFromGUID','WinAPI_SubLangId',
+ 'WinAPI_SystemParametersInfo','WinAPI_TwipsPerPixelX',
+ 'WinAPI_TwipsPerPixelY','WinAPI_UnhookWindowsHookEx',
+ 'WinAPI_UpdateLayeredWindow','WinAPI_UpdateWindow',
+ 'WinAPI_ValidateClassName','WinAPI_WaitForInputIdle',
+ 'WinAPI_WaitForMultipleObjects','WinAPI_WaitForSingleObject',
+ 'WinAPI_WideCharToMultiByte','WinAPI_WindowFromPoint',
+ 'WinAPI_WriteConsole','WinAPI_WriteFile',
+ 'WinAPI_WriteProcessMemory','WinNet_AddConnection',
+ 'WinNet_AddConnection2','WinNet_AddConnection3',
+ 'WinNet_CancelConnection','WinNet_CancelConnection2',
+ 'WinNet_CloseEnum','WinNet_ConnectionDialog',
+ 'WinNet_ConnectionDialog1','WinNet_DisconnectDialog',
+ 'WinNet_DisconnectDialog1','WinNet_EnumResource',
+ 'WinNet_GetConnection','WinNet_GetConnectionPerformance',
+ 'WinNet_GetLastError','WinNet_GetNetworkInformation',
+ 'WinNet_GetProviderName','WinNet_GetResourceInformation',
+ 'WinNet_GetResourceParent','WinNet_GetUniversalName',
+ 'WinNet_GetUser','WinNet_OpenEnum','WinNet_RestoreConnection',
+ 'WinNet_UseConnection','Word_VersionInfo','WordAttach','WordCreate',
+ 'WordDocAdd','WordDocAddLink','WordDocAddPicture','WordDocClose',
+ 'WordDocFindReplace','WordDocGetCollection',
+ 'WordDocLinkGetCollection','WordDocOpen','WordDocPrint',
+ 'WordDocPropertyGet','WordDocPropertySet','WordDocSave',
+ 'WordDocSaveAs','WordErrorHandlerDeRegister',
+ 'WordErrorHandlerRegister','WordErrorNotify','WordMacroRun',
+ 'WordPropertyGet','WordPropertySet','WordQuit'
+ ),
+ 5 => array(
+ 'ce','comments-end','comments-start','cs','include','include-once',
+ 'NoTrayIcon','RequireAdmin'
+ ),
+ 6 => array(
+ 'AutoIt3Wrapper_Au3Check_Parameters',
+ 'AutoIt3Wrapper_Au3Check_Stop_OnWarning',
+ 'AutoIt3Wrapper_Change2CUI','AutoIt3Wrapper_Compression',
+ 'AutoIt3Wrapper_cvsWrapper_Parameters','AutoIt3Wrapper_Icon',
+ 'AutoIt3Wrapper_Outfile','AutoIt3Wrapper_Outfile_Type',
+ 'AutoIt3Wrapper_Plugin_Funcs','AutoIt3Wrapper_Res_Comment',
+ 'AutoIt3Wrapper_Res_Description','AutoIt3Wrapper_Res_Field',
+ 'AutoIt3Wrapper_Res_File_Add','AutoIt3Wrapper_Res_Fileversion',
+ 'AutoIt3Wrapper_Res_FileVersion_AutoIncrement',
+ 'AutoIt3Wrapper_Res_Icon_Add','AutoIt3Wrapper_Res_Language',
+ 'AutoIt3Wrapper_Res_LegalCopyright',
+ 'AutoIt3Wrapper_res_requestedExecutionLevel',
+ 'AutoIt3Wrapper_Res_SaveSource','AutoIt3Wrapper_Run_After',
+ 'AutoIt3Wrapper_Run_Au3check','AutoIt3Wrapper_Run_Before',
+ 'AutoIt3Wrapper_Run_cvsWrapper','AutoIt3Wrapper_Run_Debug_Mode',
+ 'AutoIt3Wrapper_Run_Obfuscator','AutoIt3Wrapper_Run_Tidy',
+ 'AutoIt3Wrapper_Tidy_Stop_OnError','AutoIt3Wrapper_UseAnsi',
+ 'AutoIt3Wrapper_UseUpx','AutoIt3Wrapper_UseX64',
+ 'AutoIt3Wrapper_Version','EndRegion','forceref',
+ 'Obfuscator_Ignore_Funcs','Obfuscator_Ignore_Variables',
+ 'Obfuscator_Parameters','Region','Tidy_Parameters'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(',')','[',']',
+ '+','-','*','/','&','^',
+ '=','+=','-=','*=','/=','&=',
+ '==','<','<=','>','>=',
+ ',','.'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false,
+ 6 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #0000FF; font-weight: bold;',
+ 2 => 'color: #800000; font-weight: bold;',
+ 3 => 'color: #000080; font-style: italic; font-weight: bold;',
+ 4 => 'color: #0080FF; font-style: italic; font-weight: bold;',
+ 5 => 'color: #F000FF; font-style: italic;',
+ 6 => 'color: #A00FF0; font-style: italic;'
+ ),
+ 'COMMENTS' => array(
+ 0 => 'font-style: italic; color: #009933;',
+ 'MULTI' => 'font-style: italic; color: #669900;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => ''
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #FF0000; font-weight: bold;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'font-weight: bold; color: #008080;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #AC00A9; font-style: italic; font-weight: bold;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #0000FF; font-style: italic; font-weight: bold;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #FF0000; font-weight: bold;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'font-weight: bold; color: #AA0000;'
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => 'http://www.autoitscript.com/autoit3/docs/keywords.htm',
+ 2 => 'http://www.autoitscript.com/autoit3/docs/macros.htm',
+ 3 => 'http://www.autoitscript.com/autoit3/docs/functions/{FNAME}.htm',
+ 4 => '',
+ 5 => '',
+ 6 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ //Variables
+ 0 => '[\\$%@]+[a-zA-Z_][a-zA-Z0-9_]*'
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_MAYBE,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ 0 => true,
+ 1 => true,
+ 2 => true,
+ 3 => true
+ ),
+ 'PARSER_CONTROL' => array(
+ 'KEYWORDS' => array(
+ 4 => array(
+ 'DISALLOWED_BEFORE' => '(?<!\w)\_'
+ ),
+ 5 => array(
+ 'DISALLOWED_BEFORE' => '(?<!\w)\#'
+ ),
+ 6 => array(
+ 'DISALLOWED_BEFORE' => '(?<!\w)\#'
+ )
+ )
+ )
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/avisynth.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/avisynth.php
new file mode 100644
index 000000000..c0526e956
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/avisynth.php
@@ -0,0 +1,194 @@
+<?php
+/*************************************************************************************
+ * avisynth.php
+ * --------
+ * Author: Ryan Jones (sciguyryan@gmail.com)
+ * Copyright: (c) 2008 Ryan Jones
+ * Release Version: 1.0.8.4
+ * Date Started: 2008/10/08
+ *
+ * AviSynth language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/10/08 (1.0.8.1)
+ * - First Release
+ *
+ * TODO (updated 2008/10/08)
+ * -------------------------
+ * * There are also some special words that can't currently be specified directly in GeSHi as they may
+ * also be used as variables which would really mess things up.
+ * * Also there is an issue with the escape character as this language uses a muti-character escape system. Escape char should be """ but has been left
+ * as empty due to this restiction.
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'AviSynth',
+ 'COMMENT_SINGLE' => array(1 => '#'),
+ 'COMMENT_MULTI' => array('/*' => '*/', '[*' => '*]'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ // Reserved words.
+ 1 => array(
+ 'try', 'cache', 'function', 'global', 'return'
+ ),
+ // Constants / special variables.
+ 2 => array(
+ 'true', 'yes', 'false', 'no', '__END__'
+ ),
+ // Internal Filters.
+ 3 => array(
+ 'AviSource', 'AviFileSource', 'AddBorders', 'AlignedSplice', 'AssumeFPS', 'AssumeScaledFPS',
+ 'AssumeFrameBased', 'AssumeFieldBased', 'AssumeBFF', 'AssumeTFF', 'Amplify', 'AmplifydB',
+ 'AssumeSampleRate', 'AudioDub', 'AudioDubEx', 'Animate', 'ApplyRange',
+ 'BicubicResize', 'BilinearResize', 'BlackmanResize', 'Blur', 'Bob', 'BlankClip', 'Blackness',
+ 'ColorYUV', 'ConvertBackToYUY2', 'ConvertToRGB', 'ConvertToRGB24', 'ConvertToRGB32',
+ 'ConvertToYUY2', 'ConvertToY8', 'ConvertToYV411', 'ConvertToYV12', 'ConvertToYV16', 'ConvertToYV24',
+ 'ColorKeyMask', 'Crop', 'CropBottom', 'ChangeFPS', 'ConvertFPS', 'ComplementParity', 'ConvertAudioTo8bit',
+ 'ConvertAudioTo16bit', 'ConvertAudioTo24bit', 'ConvertAudioTo32bit', 'ConvertAudioToFloat', 'ConvertToMono',
+ 'ConditionalFilter', 'ConditionalReader', 'ColorBars', 'Compare',
+ 'DirectShowSource', 'DeleteFrame', 'Dissolve', 'DuplicateFrame', 'DoubleWeave', 'DelayAudio',
+ 'EnsureVBRMP3Sync',
+ 'FixLuminance', 'FlipHorizontal', 'FlipVertical', 'FixBrokenChromaUpsampling', 'FadeIn0', 'FadeIn',
+ 'FadeIn2', 'FadeOut0', 'FadeOut', 'FadeOut2', 'FadeIO0', 'FadeIO', 'FadeIO2', 'FreezeFrame', 'FrameEvaluate',
+ 'GreyScale', 'GaussResize', 'GeneralConvolution', 'GetChannel', 'GetLeftChannel', 'GetRightChannel',
+ 'HorizontalReduceBy2', 'Histogram',
+ 'ImageReader', 'ImageSource', 'ImageWriter', 'Invert', 'Interleave', 'Info',
+ 'KillAudio', 'KillVideo',
+ 'Levels', 'Limiter', 'Layer', 'Letterbox', 'LanczosResize', 'Lanczos4Resize', 'Loop',
+ 'MergeARGB', 'MergeRGB', 'MergeChroma', 'MergeLuma', 'Merge', 'Mask', 'MaskHS', 'MergeChannels', 'MixAudio',
+ 'MonoToStereo', 'MessageClip',
+ 'Normalize',
+ 'OpenDMLSource', 'Overlay',
+ 'PointResize', 'PeculiarBlend', 'Pulldown',
+ 'RGBAdjust', 'ResetMask', 'Reverse', 'ResampleAudio', 'ReduceBy2',
+ 'SegmentedAviSource', 'SegmentedDirectShowSource', 'SoundOut', 'ShowAlpha', 'ShowRed', 'ShowGreen',
+ 'ShowBlue', 'SwapUV', 'Subtract', 'SincResize', 'Spline16Resize', 'Spline36Resize', 'Spline64Resize',
+ 'SelectEven', 'SelectOdd', 'SelectEvery', 'SelectRangeEvery', 'Sharpen', 'SpatialSoften', 'SeparateFields',
+ 'ShowFiveVersions', 'ShowFrameNumber', 'ShowSMPTE', 'ShowTime', 'StackHorizontal', 'StackVertical', 'Subtitle',
+ 'SwapFields', 'SuperEQ', 'SSRC', 'ScriptClip',
+ 'Tweak', 'TurnLeft', 'TurnRight', 'Turn180', 'TemporalSoften', 'TimeStretch', 'TCPServer', 'TCPSource', 'Trim',
+ 'Tone',
+ 'UToY', 'UToY8', 'UnalignedSplice',
+ 'VToY', 'VToY8', 'VerticalReduceBy2', 'Version',
+ 'WavSource', 'Weave', 'WriteFile', 'WriteFileIf', 'WriteFileStart', 'WriteFileEnd',
+ 'YToUV'
+ ),
+ // Internal functions.
+ 4 => array(
+ 'Abs', 'Apply', 'Assert', 'AverageLuma', 'AverageChromaU', 'AverageChromaV',
+ 'Ceil', 'Cos', 'Chr', 'ChromaUDifference', 'ChromaVDifference',
+ 'Defined', 'Default',
+ 'Exp', 'Exist', 'Eval',
+ 'Floor', 'Frac', 'Float', 'Findstr', 'GetMTMode',
+ 'HexValue',
+ 'Int', 'IsBool', 'IsClip', 'IsFloat', 'IsInt', 'IsString', 'Import',
+ 'LoadPlugin', 'Log', 'LCase', 'LeftStr', 'LumaDifference', 'LoadVirtualDubPlugin', 'LoadVFAPIPlugin',
+ 'LoadCPlugin', 'Load_Stdcall_Plugin',
+ 'Max', 'MulDiv', 'MidStr',
+ 'NOP',
+ 'OPT_AllowFloatAudio', 'OPT_UseWaveExtensible',
+ 'Pi', 'Pow',
+ 'Round', 'Rand', 'RevStr', 'RightStr', 'RGBDifference', 'RGBDifferenceFromPrevious', 'RGBDifferenceToNext',
+ 'Sin', 'Sqrt', 'Sign', 'Spline', 'StrLen', 'String', 'Select', 'SetMemoryMax', 'SetWorkingDir', 'SetMTMode',
+ 'SetPlanarLegacyAlignment',
+ 'Time',
+ 'UCase', 'UDifferenceFromPrevious', 'UDifferenceToNext', 'UPlaneMax', 'UPlaneMin', 'UPlaneMedian',
+ 'UPlaneMinMaxDifference',
+ 'Value', 'VersionNumber', 'VersionString', 'VDifferenceFromPrevious', 'VDifferenceToNext', 'VPlaneMax',
+ 'VPlaneMin', 'VPlaneMedian', 'VPlaneMinMaxDifference',
+ 'YDifferenceFromPrevious', 'YDifferenceToNext', 'YPlaneMax', 'YPlaneMin', 'YPlaneMedian',
+ 'YPlaneMinMaxDifference'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '+', '++', '-', '--', '/', '*', '%',
+ '=', '==', '<', '<=', '>', '>=', '<>', '!=',
+ '!', '?', ':',
+ '|', '||', '&&',
+ '\\',
+ '(', ')', '{', '}',
+ '.', ','
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => true,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color:#9966CC; font-weight:bold;',
+ 2 => 'color:#0000FF; font-weight:bold;',
+ 3 => 'color:#CC3300; font-weight:bold;',
+ 4 => 'color:#660000; font-weight:bold;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color:#008000; font-style:italic;',
+ 'MULTI' => 'color:#000080; font-style:italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color:#000099;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color:#006600; font-weight:bold;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color:#996600;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color:#006666;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color:#9900CC;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color:#006600; font-weight:bold;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => 'http://avisynth.org/mediawiki/{FNAME}',
+ 4 => ''
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_MAYBE,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 4
+);
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/bash.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/bash.php
new file mode 100644
index 000000000..bb0a571ba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/bash.php
@@ -0,0 +1,282 @@
+<?php
+/*************************************************************************************
+ * bash.php
+ * --------
+ * Author: Andreas Gohr (andi@splitbrain.org)
+ * Copyright: (c) 2004 Andreas Gohr, Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/08/20
+ *
+ * BASH language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/06/21 (1.0.8)
+ * - Added loads of keywords and commands of GNU/Linux
+ * - Added support for parameters starting with a dash
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * 2007/09/05 (1.0.7.21)
+ * - PARSER_CONTROL patch using SF #1788408 (BenBE)
+ * 2007/06/11 (1.0.7.20)
+ * - Added a lot of keywords (BenBE / Jan G)
+ * 2004/11/27 (1.0.2)
+ * - Added support for multiple object splitters
+ * 2004/10/27 (1.0.1)
+ * - Added support for URLs
+ * 2004/08/20 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ * * Get symbols working
+ * * Highlight builtin vars
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Bash',
+ // Bash DOES have single line comments with # markers. But bash also has
+ // the $# variable, so comments need special handling (see sf.net
+ // 1564839)
+ 'COMMENT_SINGLE' => array('#'),
+ 'COMMENT_MULTI' => array(),
+ 'COMMENT_REGEXP' => array(
+ //Variables
+ 1 => "/\\$\\{[^\\n\\}]*?\\}/i",
+ //BASH-style Heredoc
+ 2 => '/<<-?\s*?(\'?)([a-zA-Z0-9]+)\1\\n.*\\n\\2(?![a-zA-Z0-9])/siU',
+ //Escaped String Starters
+ 3 => "/\\\\['\"]/siU"
+ ),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'HARDQUOTE' => array("'", "'"),
+ 'HARDESCAPE' => array("\'"),
+ 'ESCAPE_CHAR' => '',
+ 'ESCAPE_REGEXP' => array(
+ //Simple Single Char Escapes
+ 1 => "#\\\\[nfrtv\\$\\\"\n]#i",
+ // $var
+ 2 => "#\\$[a-z_][a-z0-9_]*#i",
+ // ${...}
+ 3 => "/\\$\\{[^\\n\\}]*?\\}/i",
+ // $(...)
+ 4 => "/\\$\\([^\\n\\)]*?\\)/i",
+ // `...`
+ 5 => "/`[^`]*`/"
+ ),
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'case', 'do', 'done', 'elif', 'else', 'esac', 'fi', 'for', 'function',
+ 'if', 'in', 'select', 'set', 'then', 'until', 'while', 'time'
+ ),
+ 2 => array(
+ 'aclocal', 'aconnect', 'aplay', 'apm', 'apmsleep', 'apropos',
+ 'apt-cache', 'apt-get', 'apt-key', 'aptitude',
+ 'ar', 'arch', 'arecord', 'as', 'as86', 'ash', 'autoconf',
+ 'autoheader', 'automake', 'awk',
+
+ 'basename', 'bash', 'bc', 'bison', 'bunzip2', 'bzcat',
+ 'bzcmp', 'bzdiff', 'bzegrep', 'bzfgrep', 'bzgrep',
+ 'bzip2', 'bzip2recover', 'bzless', 'bzmore',
+
+ 'c++', 'cal', 'cat', 'chattr', 'cc', 'cdda2wav', 'cdparanoia',
+ 'cdrdao', 'cd-read', 'cdrecord', 'chfn', 'chgrp', 'chmod',
+ 'chown', 'chroot', 'chsh', 'chvt', 'clear', 'cmp', 'comm', 'co',
+ 'col', 'cp', 'cpio', 'cpp', 'csh', 'cut', 'cvs', 'cvs-pserver',
+
+ 'dash', 'date', 'dd', 'dc', 'dcop', 'deallocvt', 'df', 'dialog',
+ 'diff', 'diff3', 'dir', 'dircolors', 'directomatic', 'dirname',
+ 'dmesg', 'dnsdomainname', 'domainname', 'dpkg', 'dselect', 'du',
+ 'dumpkeys',
+
+ 'ed', 'egrep', 'env', 'expr',
+
+ 'false', 'fbset', 'ffmpeg', 'fgconsole','fgrep', 'file', 'find',
+ 'flex', 'flex++', 'fmt', 'free', 'ftp', 'funzip', 'fuser',
+
+ 'g++', 'gawk', 'gc','gcc', 'gdb', 'getent', 'getkeycodes',
+ 'getopt', 'gettext', 'gettextize', 'gimp', 'gimp-remote',
+ 'gimptool', 'gmake', 'gocr', 'grep', 'groups', 'gs', 'gunzip',
+ 'gzexe', 'gzip',
+
+ 'head', 'hexdump', 'hostname',
+
+ 'id', 'ifconfig', 'igawk', 'install',
+
+ 'join',
+
+ 'kbd_mode','kbdrate', 'kdialog', 'kfile', 'kill', 'killall',
+
+ 'lame', 'last', 'lastb', 'ld', 'ld86', 'ldd', 'less', 'lex', 'link',
+ 'ln', 'loadkeys', 'loadunimap', 'locate', 'lockfile', 'login',
+ 'logname', 'lp', 'lpr', 'ls', 'lsattr', 'lsmod', 'lsmod.old',
+ 'lspci', 'ltrace', 'lynx',
+
+ 'm4', 'make', 'man', 'mapscrn', 'mesg', 'mkdir', 'mkfifo',
+ 'mknod', 'mktemp', 'more', 'mount', 'mplayer', 'msgfmt', 'mv',
+
+ 'namei', 'nano', 'nasm', 'nawk', 'netstat', 'nice',
+ 'nisdomainname', 'nl', 'nm', 'nm86', 'nmap', 'nohup', 'nop',
+
+ 'od', 'openvt',
+
+ 'passwd', 'patch', 'pcregrep', 'pcretest', 'perl', 'perror',
+ 'pgawk', 'pidof', 'ping', 'pr', 'procmail', 'prune', 'ps', 'pstree',
+ 'ps2ascii', 'ps2epsi', 'ps2frag', 'ps2pdf', 'ps2ps', 'psbook',
+ 'psmerge', 'psnup', 'psresize', 'psselect', 'pstops',
+
+ 'rbash', 'rcs', 'rcs2log', 'read', 'readlink', 'red', 'resizecons',
+ 'rev', 'rm', 'rmdir', 'rsh', 'run-parts',
+
+ 'sash', 'scp', 'screen', 'sed', 'seq', 'sendmail', 'setfont',
+ 'setkeycodes', 'setleds', 'setmetamode', 'setserial', 'setterm',
+ 'sh', 'showkey', 'shred', 'size', 'size86', 'skill', 'sleep',
+ 'slogin', 'snice', 'sort', 'sox', 'split', 'ssed', 'ssh', 'ssh-add',
+ 'ssh-agent', 'ssh-keygen', 'ssh-keyscan', 'stat', 'strace',
+ 'strings', 'strip', 'stty', 'su', 'sudo', 'suidperl', 'sum', 'svn',
+ 'svnadmin', 'svndumpfilter', 'svnlook', 'svnmerge', 'svnmucc',
+ 'svnserve', 'svnshell', 'svnsync', 'svnversion', 'svnwrap', 'sync',
+
+ 'tac', 'tail', 'tar', 'tee', 'tempfile', 'touch', 'tr', 'tree',
+ 'true',
+
+ 'umount', 'uname', 'unicode_start', 'unicode_stop', 'uniq',
+ 'unlink', 'unzip', 'updatedb', 'updmap', 'uptime', 'users',
+ 'utmpdump', 'uuidgen',
+
+ 'valgrind', 'vdir', 'vi', 'vim', 'vmstat',
+
+ 'w', 'wall', 'wc', 'wget', 'whatis', 'whereis', 'which', 'whiptail',
+ 'who', 'whoami', 'write',
+
+ 'xargs', 'xhost', 'xmodmap', 'xset',
+
+ 'yacc', 'yes', 'ypdomainname',
+
+ 'zcat', 'zcmp', 'zdiff', 'zdump', 'zegrep', 'zfgrep', 'zforce',
+ 'zgrep', 'zip', 'zipgrep', 'zipinfo', 'zless', 'zmore', 'znew',
+ 'zsh', 'zsoelim'
+ ),
+ 3 => array(
+ 'alias', 'bg', 'bind', 'break', 'builtin', 'cd', 'command',
+ 'compgen', 'complete', 'continue', 'declare', 'dirs', 'disown',
+ 'echo', 'enable', 'eval', 'exec', 'exit', 'export', 'fc',
+ 'fg', 'getopts', 'hash', 'help', 'history', 'jobs', 'let',
+ 'local', 'logout', 'popd', 'printf', 'pushd', 'pwd', 'readonly',
+ 'return', 'shift', 'shopt', 'source', 'suspend', 'test', 'times',
+ 'trap', 'type', 'typeset', 'ulimit', 'umask', 'unalias', 'unset',
+ 'wait'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '[', ']', '!', '@', '%', '&', '*', '|', '/', '<', '>', ';;', '`'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ 2 => true,
+ 3 => true
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #000000; font-weight: bold;',
+ 2 => 'color: #c20cb9; font-weight: bold;',
+ 3 => 'color: #7a0874; font-weight: bold;'
+ ),
+ 'COMMENTS' => array(
+ 0 => 'color: #666666; font-style: italic;',
+ 1 => 'color: #800000;',
+ 2 => 'color: #cc0000; font-style: italic;',
+ 3 => 'color: #000000; font-weight: bold;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 1 => 'color: #000099; font-weight: bold;',
+ 2 => 'color: #007800;',
+ 3 => 'color: #007800;',
+ 4 => 'color: #007800;',
+ 5 => 'color: #780078;',
+ 'HARD' => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #7a0874; font-weight: bold;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;',
+ 'HARD' => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #000000; font-weight: bold;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #007800;',
+ 1 => 'color: #007800;',
+ 2 => 'color: #007800;',
+ 4 => 'color: #007800;',
+ 5 => 'color: #660033;'
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ //Variables (will be handled by comment_regexps)
+ 0 => "\\$\\{[a-zA-Z_][a-zA-Z0-9_]*?\\}",
+ //Variables without braces
+ 1 => "\\$[a-zA-Z_][a-zA-Z0-9_]*",
+ //Variable assignment
+ 2 => "(?<![\.a-zA-Z_\-])([a-zA-Z_][a-zA-Z0-9_]*?)(?==)",
+ //Shorthand shell variables
+ 4 => "\\$[*#\$\\-\\?!]",
+ //Parameters of commands
+ 5 => "(?<=\s)--?[0-9a-zA-Z\-]+(?=[\s=]|$)"
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 4,
+ 'PARSER_CONTROL' => array(
+ 'COMMENTS' => array(
+ 'DISALLOWED_BEFORE' => '$'
+ ),
+ 'KEYWORDS' => array(
+ 'DISALLOWED_BEFORE' => "(?<![\.\-a-zA-Z0-9_\$\#])",
+ 'DISALLOWED_AFTER' => "(?![\.\-a-zA-Z0-9_%\\/])"
+ )
+ )
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/basic4gl.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/basic4gl.php
new file mode 100644
index 000000000..5e3330930
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/basic4gl.php
@@ -0,0 +1,341 @@
+<?php
+/*************************************************************************************
+ * basic4gl.php
+ * ---------------------------------
+ * Author: Matthew Webb (bmatthew1@blueyonder.co.uk)
+ * Copyright: (c) 2004 Matthew Webb (http://matthew-4gl.wikispaces.com)
+ * Release Version: 1.0.8.4
+ * Date Started: 2007/09/15
+ *
+ * Basic4GL language file for GeSHi.
+ *
+ * You can find the Basic4GL Website at (http://www.basic4gl.net/)
+ *
+ * CHANGES
+ * -------
+ * 2007/09/17 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2007/09/17)
+ * -------------------------
+ * Make sure all the OpenGL and Basic4GL commands have been added and are complete.
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Basic4GL',
+ 'COMMENT_SINGLE' => array(1 => "'"),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ 1 => array(
+
+ // Navy Blue Bold Keywords
+
+ 'true','rnd_max','m_pi','m_e','false','VK_ZOOM','VK_UP','VK_TAB','VK_SUBTRACT','VK_SPACE','VK_SNAPSHOT',
+ 'VK_SHIFT','VK_SEPARATOR','VK_SELECT','VK_SCROLL','VK_RWIN','VK_RSHIFT','VK_RMENU','VK_RIGHT','VK_RETURN',
+ 'VK_RCONTROL','VK_RBUTTON','VK_PROCESSKEY','VK_PRIOR','VK_PRINT','VK_PLAY','VK_PAUSE','VK_NUMPAD9','VK_NUMPAD8',
+ 'VK_NUMPAD7','VK_NUMPAD6','VK_NUMPAD5','VK_NUMPAD4','VK_NUMPAD3','VK_NUMPAD2','VK_NUMPAD1','VK_NUMPAD0',
+ 'VK_NUMLOCK','VK_NONCONVERT','VK_NEXT','VK_MULTIPLY','VK_MODECHANGE','VK_MENU','VK_MBUTTON','VK_LWIN',
+ 'VK_LSHIFT','VK_LMENU','VK_LEFT','VK_LCONTROL','VK_LBUTTON','VK_KANJI','VK_KANA','VK_JUNJA','VK_INSERT',
+ 'VK_HOME','VK_HELP','VK_HANJA','VK_HANGUL','VK_HANGEUL','VK_FINAL','VK_F9','VK_F8','VK_F7','VK_F6','VK_F5',
+ 'VK_F4','VK_F3','VK_F24','VK_F23','VK_F22','VK_F21','VK_F20','VK_F2','VK_F19','VK_F18','VK_F17','VK_F16',
+ 'VK_F15','VK_F14','VK_F13','VK_F12','VK_F11','VK_F10','VK_F1','VK_EXSEL','VK_EXECUTE','VK_ESCAPE','VK_EREOF',
+ 'VK_END','VK_DOWN','VK_DIVIDE','VK_DELETE','VK_DECIMAL','VK_CRSEL','VK_CONVERT','VK_CONTROL','VK_CLEAR',
+ 'VK_CAPITAL','VK_CANCEL','VK_BACK','VK_ATTN','VK_APPS','VK_ADD','VK_ACCEPT','TEXT_SIMPLE','TEXT_OVERLAID',
+ 'TEXT_BUFFERED','SPR_TILEMAP','SPR_SPRITE','SPR_INVALID','MOUSE_RBUTTON','MOUSE_MBUTTON','MOUSE_LBUTTON',
+ 'GL_ZOOM_Y','GL_ZOOM_X','GL_ZERO','GL_XOR','GL_WIN_swap_hint','GL_WIN_draw_range_elements','GL_VIEWPORT_BIT',
+ 'GL_VIEWPORT','GL_VERTEX_ARRAY_TYPE_EXT','GL_VERTEX_ARRAY_TYPE','GL_VERTEX_ARRAY_STRIDE_EXT','GL_VERTEX_ARRAY_STRIDE',
+ 'GL_VERTEX_ARRAY_SIZE_EXT','GL_VERTEX_ARRAY_SIZE','GL_VERTEX_ARRAY_POINTER_EXT','GL_VERTEX_ARRAY_POINTER',
+ 'GL_VERTEX_ARRAY_EXT','GL_VERTEX_ARRAY_COUNT_EXT','GL_VERTEX_ARRAY','GL_VERSION_1_1','GL_VERSION','GL_VENDOR',
+ 'GL_V3F','GL_V2F','GL_UNSIGNED_SHORT','GL_UNSIGNED_INT','GL_UNSIGNED_BYTE','GL_UNPACK_SWAP_BYTES','GL_UNPACK_SKIP_ROWS',
+ 'GL_UNPACK_SKIP_PIXELS','GL_UNPACK_ROW_LENGTH','GL_UNPACK_LSB_FIRST','GL_UNPACK_ALIGNMENT','GL_TRUE','GL_TRIANGLE_STRIP',
+ 'GL_TRIANGLE_FAN','GL_TRIANGLES','GL_TRANSFORM_BIT','GL_TEXTURE_WRAP_T','GL_TEXTURE_WRAP_S','GL_TEXTURE_WIDTH',
+ 'GL_TEXTURE_STACK_DEPTH','GL_TEXTURE_RESIDENT','GL_TEXTURE_RED_SIZE','GL_TEXTURE_PRIORITY','GL_TEXTURE_MIN_FILTER',
+ 'GL_TEXTURE_MATRIX','GL_TEXTURE_MAG_FILTER','GL_TEXTURE_LUMINANCE_SIZE','GL_TEXTURE_INTERNAL_FORMAT','GL_TEXTURE_INTENSITY_SIZE',
+ 'GL_TEXTURE_HEIGHT','GL_TEXTURE_GREEN_SIZE','GL_TEXTURE_GEN_T','GL_TEXTURE_GEN_S','GL_TEXTURE_GEN_R','GL_TEXTURE_GEN_Q',
+ 'GL_TEXTURE_GEN_MODE','GL_TEXTURE_ENV_MODE','GL_TEXTURE_ENV_COLOR','GL_TEXTURE_ENV','GL_TEXTURE_COORD_ARRAY_TYPE_EXT',
+ 'GL_TEXTURE_COORD_ARRAY_TYPE','GL_TEXTURE_COORD_ARRAY_STRIDE_EXT','GL_TEXTURE_COORD_ARRAY_STRIDE','GL_TEXTURE_COORD_ARRAY_SIZE_EXT',
+ 'GL_TEXTURE_COORD_ARRAY_SIZE','GL_TEXTURE_COORD_ARRAY_POINTER_EXT','GL_TEXTURE_COORD_ARRAY_POINTER','GL_TEXTURE_COORD_ARRAY_EXT',
+ 'GL_TEXTURE_COORD_ARRAY_COUNT_EXT','GL_TEXTURE_COORD_ARRAY','GL_TEXTURE_COMPONENTS','GL_TEXTURE_BORDER_COLOR','GL_TEXTURE_BORDER',
+ 'GL_TEXTURE_BLUE_SIZE','GL_TEXTURE_BIT','GL_TEXTURE_BINDING_2D','GL_TEXTURE_BINDING_1D','GL_TEXTURE_ALPHA_SIZE',
+ 'GL_TEXTURE_2D','GL_TEXTURE_1D','GL_TEXTURE9_ARB','GL_TEXTURE9','GL_TEXTURE8_ARB','GL_TEXTURE8','GL_TEXTURE7_ARB',
+ 'GL_TEXTURE7','GL_TEXTURE6_ARB','GL_TEXTURE6','GL_TEXTURE5_ARB','GL_TEXTURE5','GL_TEXTURE4_ARB','GL_TEXTURE4',
+ 'GL_TEXTURE3_ARB','GL_TEXTURE31_ARB','GL_TEXTURE31','GL_TEXTURE30_ARB','GL_TEXTURE30','GL_TEXTURE3','GL_TEXTURE2_ARB',
+ 'GL_TEXTURE29_ARB','GL_TEXTURE29','GL_TEXTURE28_ARB','GL_TEXTURE28','GL_TEXTURE27_ARB','GL_TEXTURE27','GL_TEXTURE26_ARB',
+ 'GL_TEXTURE26','GL_TEXTURE25_ARB','GL_TEXTURE25','GL_TEXTURE24_ARB','GL_TEXTURE24','GL_TEXTURE23_ARB','GL_TEXTURE23',
+ 'GL_TEXTURE22_ARB','GL_TEXTURE22','GL_TEXTURE21_ARB','GL_TEXTURE21','GL_TEXTURE20_ARB','GL_TEXTURE20','GL_TEXTURE2',
+ 'GL_TEXTURE1_ARB','GL_TEXTURE19_ARB','GL_TEXTURE19','GL_TEXTURE18_ARB','GL_TEXTURE18','GL_TEXTURE17_ARB',
+ 'GL_TEXTURE17','GL_TEXTURE16_ARB','GL_TEXTURE16','GL_TEXTURE15_ARB','GL_TEXTURE15','GL_TEXTURE14_ARB','GL_TEXTURE14',
+ 'GL_TEXTURE13_ARB','GL_TEXTURE13','GL_TEXTURE12_ARB','GL_TEXTURE12','GL_TEXTURE11_ARB','GL_TEXTURE11','GL_TEXTURE10_ARB',
+ 'GL_TEXTURE10','GL_TEXTURE1','GL_TEXTURE0_ARB','GL_TEXTURE0','GL_TEXTURE','GL_T4F_V4F','GL_T4F_C4F_N3F_V4F','GL_T2F_V3F',
+ 'GL_T2F_N3F_V3F','GL_T2F_C4UB_V3F','GL_T2F_C4F_N3F_V3F','GL_T2F_C3F_V3F','GL_T','GL_SUBPIXEL_BITS','GL_STEREO',
+ 'GL_STENCIL_WRITEMASK','GL_STENCIL_VALUE_MASK','GL_STENCIL_TEST','GL_STENCIL_REF','GL_STENCIL_PASS_DEPTH_PASS',
+ 'GL_STENCIL_PASS_DEPTH_FAIL','GL_STENCIL_INDEX','GL_STENCIL_FUNC','GL_STENCIL_FAIL','GL_STENCIL_CLEAR_VALUE',
+ 'GL_STENCIL_BUFFER_BIT','GL_STENCIL_BITS','GL_STENCIL','GL_STACK_UNDERFLOW','GL_STACK_OVERFLOW','GL_SRC_COLOR',
+ 'GL_SRC_ALPHA_SATURATE','GL_SRC_ALPHA','GL_SPOT_EXPONENT','GL_SPOT_DIRECTION','GL_SPOT_CUTOFF','GL_SPHERE_MAP',
+ 'GL_SPECULAR','GL_SOURCE2_RGB_EXT','GL_SOURCE2_RGB','GL_SOURCE2_ALPHA_EXT','GL_SOURCE2_ALPHA','GL_SOURCE1_RGB_EXT',
+ 'GL_SOURCE1_RGB','GL_SOURCE1_ALPHA_EXT','GL_SOURCE1_ALPHA','GL_SOURCE0_RGB_EXT','GL_SOURCE0_RGB','GL_SOURCE0_ALPHA_EXT',
+ 'GL_SOURCE0_ALPHA','GL_SMOOTH','GL_SHORT','GL_SHININESS','GL_SHADE_MODEL','GL_SET','GL_SELECTION_BUFFER_SIZE',
+ 'GL_SELECTION_BUFFER_POINTER','GL_SELECT','GL_SCISSOR_TEST','GL_SCISSOR_BOX','GL_SCISSOR_BIT','GL_S','GL_RIGHT',
+ 'GL_RGB_SCALE_EXT','GL_RGB_SCALE','GL_RGBA_MODE','GL_RGBA8','GL_RGBA4','GL_RGBA2','GL_RGBA16','GL_RGBA12','GL_RGBA',
+ 'GL_RGB8','GL_RGB5_A1','GL_RGB5','GL_RGB4','GL_RGB16','GL_RGB12','GL_RGB10_A2','GL_RGB10','GL_RGB','GL_RETURN',
+ 'GL_REPLACE','GL_REPEAT','GL_RENDER_MODE','GL_RENDERER','GL_RENDER','GL_RED_SCALE','GL_RED_BITS','GL_RED_BIAS',
+ 'GL_RED','GL_READ_BUFFER','GL_R3_G3_B2','GL_R','GL_QUAD_STRIP','GL_QUADS','GL_QUADRATIC_ATTENUATION','GL_Q',
+ 'GL_PROXY_TEXTURE_2D','GL_PROXY_TEXTURE_1D','GL_PROJECTION_STACK_DEPTH','GL_PROJECTION_MATRIX','GL_PROJECTION',
+ 'GL_PRIMARY_COLOR_EXT','GL_PRIMARY_COLOR','GL_PREVIOUS_EXT','GL_PREVIOUS','GL_POSITION','GL_POLYGON_TOKEN',
+ 'GL_POLYGON_STIPPLE_BIT','GL_POLYGON_STIPPLE','GL_POLYGON_SMOOTH_HINT','GL_POLYGON_SMOOTH','GL_POLYGON_OFFSET_UNITS',
+ 'GL_POLYGON_OFFSET_POINT','GL_POLYGON_OFFSET_LINE','GL_POLYGON_OFFSET_FILL','GL_POLYGON_OFFSET_FACTOR','GL_POLYGON_MODE',
+ 'GL_POLYGON_BIT','GL_POLYGON','GL_POINT_TOKEN','GL_POINT_SMOOTH_HINT','GL_POINT_SMOOTH','GL_POINT_SIZE_RANGE',
+ 'GL_POINT_SIZE_GRANULARITY','GL_POINT_SIZE','GL_POINT_BIT','GL_POINTS','GL_POINT','GL_PIXEL_MODE_BIT',
+ 'GL_PIXEL_MAP_S_TO_S_SIZE','GL_PIXEL_MAP_S_TO_S','GL_PIXEL_MAP_R_TO_R_SIZE','GL_PIXEL_MAP_R_TO_R','GL_PIXEL_MAP_I_TO_R_SIZE',
+ 'GL_PIXEL_MAP_I_TO_R','GL_PIXEL_MAP_I_TO_I_SIZE','GL_PIXEL_MAP_I_TO_I','GL_PIXEL_MAP_I_TO_G_SIZE','GL_PIXEL_MAP_I_TO_G',
+ 'GL_PIXEL_MAP_I_TO_B_SIZE','GL_PIXEL_MAP_I_TO_B','GL_PIXEL_MAP_I_TO_A_SIZE','GL_PIXEL_MAP_I_TO_A','GL_PIXEL_MAP_G_TO_G_SIZE',
+ 'GL_PIXEL_MAP_G_TO_G','GL_PIXEL_MAP_B_TO_B_SIZE','GL_PIXEL_MAP_B_TO_B','GL_PIXEL_MAP_A_TO_A_SIZE','GL_PIXEL_MAP_A_TO_A',
+ 'GL_PHONG_WIN','GL_PHONG_HINT_WIN','GL_PERSPECTIVE_CORRECTION_HINT','GL_PASS_THROUGH_TOKEN','GL_PACK_SWAP_BYTES',
+ 'GL_PACK_SKIP_ROWS','GL_PACK_SKIP_PIXELS','GL_PACK_ROW_LENGTH','GL_PACK_LSB_FIRST','GL_PACK_ALIGNMENT','GL_OUT_OF_MEMORY',
+ 'GL_OR_REVERSE','GL_OR_INVERTED','GL_ORDER','GL_OR','GL_OPERAND2_RGB_EXT','GL_OPERAND2_RGB','GL_OPERAND2_ALPHA_EXT',
+ 'GL_OPERAND2_ALPHA','GL_OPERAND1_RGB_EXT','GL_OPERAND1_RGB','GL_OPERAND1_ALPHA_EXT','GL_OPERAND1_ALPHA','GL_OPERAND0_RGB_EXT',
+ 'GL_OPERAND0_RGB','GL_OPERAND0_ALPHA_EXT','GL_OPERAND0_ALPHA','GL_ONE_MINUS_SRC_COLOR','GL_ONE_MINUS_SRC_ALPHA',
+ 'GL_ONE_MINUS_DST_COLOR','GL_ONE_MINUS_DST_ALPHA','GL_ONE','GL_OBJECT_PLANE','GL_OBJECT_LINEAR','GL_NO_ERROR',
+ 'GL_NOTEQUAL','GL_NORMAL_ARRAY_TYPE_EXT','GL_NORMAL_ARRAY_TYPE','GL_NORMAL_ARRAY_STRIDE_EXT','GL_NORMAL_ARRAY_STRIDE',
+ 'GL_NORMAL_ARRAY_POINTER_EXT','GL_NORMAL_ARRAY_POINTER','GL_NORMAL_ARRAY_EXT','GL_NORMAL_ARRAY_COUNT_EXT',
+ 'GL_NORMAL_ARRAY','GL_NORMALIZE','GL_NOR','GL_NOOP','GL_NONE','GL_NICEST','GL_NEVER','GL_NEAREST_MIPMAP_NEAREST','GL_NEAREST_MIPMAP_LINEAR',
+ 'GL_NEAREST','GL_NAND','GL_NAME_STACK_DEPTH','GL_N3F_V3F','GL_MULT','GL_MODULATE','GL_MODELVIEW_STACK_DEPTH','GL_MODELVIEW_MATRIX',
+ 'GL_MODELVIEW','GL_MAX_VIEWPORT_DIMS','GL_MAX_TEXTURE_UNITS_ARB','GL_MAX_TEXTURE_UNITS','GL_MAX_TEXTURE_STACK_DEPTH',
+ 'GL_MAX_TEXTURE_SIZE','GL_MAX_PROJECTION_STACK_DEPTH','GL_MAX_PIXEL_MAP_TABLE','GL_MAX_NAME_STACK_DEPTH','GL_MAX_MODELVIEW_STACK_DEPTH',
+ 'GL_MAX_LIST_NESTING','GL_MAX_LIGHTS','GL_MAX_EVAL_ORDER','GL_MAX_ELEMENTS_VERTICES_WIN','GL_MAX_ELEMENTS_INDICES_WIN',
+ 'GL_MAX_CLIP_PLANES','GL_MAX_CLIENT_ATTRIB_STACK_DEPTH','GL_MAX_ATTRIB_STACK_DEPTH','GL_MATRIX_MODE','GL_MAP_STENCIL',
+ 'GL_MAP_COLOR','GL_MAP2_VERTEX_4','GL_MAP2_VERTEX_3','GL_MAP2_TEXTURE_COORD_4','GL_MAP2_TEXTURE_COORD_3','GL_MAP2_TEXTURE_COORD_2',
+ 'GL_MAP2_TEXTURE_COORD_1','GL_MAP2_NORMAL','GL_MAP2_INDEX','GL_MAP2_GRID_SEGMENTS','GL_MAP2_GRID_DOMAIN','GL_MAP2_COLOR_4',
+ 'GL_MAP1_VERTEX_4','GL_MAP1_VERTEX_3','GL_MAP1_TEXTURE_COORD_4','GL_MAP1_TEXTURE_COORD_3','GL_MAP1_TEXTURE_COORD_2',
+ 'GL_MAP1_TEXTURE_COORD_1','GL_MAP1_NORMAL','GL_MAP1_INDEX','GL_MAP1_GRID_SEGMENTS','GL_MAP1_GRID_DOMAIN',
+ 'GL_MAP1_COLOR_4','GL_LUMINANCE_ALPHA','GL_LUMINANCE8_ALPHA8','GL_LUMINANCE8','GL_LUMINANCE6_ALPHA2','GL_LUMINANCE4_ALPHA4',
+ 'GL_LUMINANCE4','GL_LUMINANCE16_ALPHA16','GL_LUMINANCE16','GL_LUMINANCE12_ALPHA4','GL_LUMINANCE12_ALPHA12','GL_LUMINANCE12',
+ 'GL_LUMINANCE','GL_LOGIC_OP_MODE','GL_LOGIC_OP','GL_LOAD','GL_LIST_MODE','GL_LIST_INDEX','GL_LIST_BIT',
+ 'GL_LIST_BASE','GL_LINE_WIDTH_RANGE','GL_LINE_WIDTH_GRANULARITY','GL_LINE_WIDTH','GL_LINE_TOKEN','GL_LINE_STRIP','GL_LINE_STIPPLE_REPEAT',
+ 'GL_LINE_STIPPLE_PATTERN','GL_LINE_STIPPLE','GL_LINE_SMOOTH_HINT','GL_LINE_SMOOTH','GL_LINE_RESET_TOKEN','GL_LINE_LOOP',
+ 'GL_LINE_BIT','GL_LINES','GL_LINEAR_MIPMAP_NEAREST','GL_LINEAR_MIPMAP_LINEAR','GL_LINEAR_ATTENUATION','GL_LINEAR',
+ 'GL_LINE','GL_LIGHT_MODEL_TWO_SIDE','GL_LIGHT_MODEL_LOCAL_VIEWER','GL_LIGHT_MODEL_AMBIENT','GL_LIGHTING_BIT',
+ 'GL_LIGHTING','GL_LIGHT7','GL_LIGHT6','GL_LIGHT5','GL_LIGHT4','GL_LIGHT3','GL_LIGHT2','GL_LIGHT1','GL_LIGHT0',
+ 'GL_LESS','GL_LEQUAL','GL_LEFT','GL_KEEP','GL_INVERT','GL_INVALID_VALUE','GL_INVALID_OPERATION','GL_INVALID_ENUM','GL_INTERPOLATE_EXT',
+ 'GL_INTERPOLATE','GL_INTENSITY8','GL_INTENSITY4','GL_INTENSITY16','GL_INTENSITY12','GL_INTENSITY','GL_INT',
+ 'GL_INDEX_WRITEMASK','GL_INDEX_SHIFT','GL_INDEX_OFFSET','GL_INDEX_MODE','GL_INDEX_LOGIC_OP','GL_INDEX_CLEAR_VALUE','GL_INDEX_BITS',
+ 'GL_INDEX_ARRAY_TYPE_EXT','GL_INDEX_ARRAY_TYPE','GL_INDEX_ARRAY_STRIDE_EXT','GL_INDEX_ARRAY_STRIDE','GL_INDEX_ARRAY_POINTER_EXT',
+ 'GL_INDEX_ARRAY_POINTER','GL_INDEX_ARRAY_EXT','GL_INDEX_ARRAY_COUNT_EXT','GL_INDEX_ARRAY','GL_INCR','GL_HINT_BIT',
+ 'GL_GREEN_SCALE','GL_GREEN_BITS','GL_GREEN_BIAS','GL_GREEN','GL_GREATER','GL_GEQUAL','GL_FRONT_RIGHT','GL_FRONT_LEFT',
+ 'GL_FRONT_FACE','GL_FRONT_AND_BACK','GL_FRONT','GL_FOG_START','GL_FOG_SPECULAR_TEXTURE_WIN','GL_FOG_MODE','GL_FOG_INDEX',
+ 'GL_FOG_HINT','GL_FOG_END','GL_FOG_DENSITY','GL_FOG_COLOR','GL_FOG_BIT','GL_FOG','GL_FLOAT','GL_FLAT','GL_FILL',
+ 'GL_FEEDBACK_BUFFER_TYPE','GL_FEEDBACK_BUFFER_SIZE','GL_FEEDBACK_BUFFER_POINTER','GL_FEEDBACK','GL_FASTEST','GL_FALSE',
+ 'GL_EYE_PLANE','GL_EYE_LINEAR','GL_EXT_vertex_array','GL_EXT_paletted_texture','GL_EXT_bgra','GL_EXTENSIONS','GL_EXP2',
+ 'GL_EXP','GL_EVAL_BIT','GL_EQUIV','GL_EQUAL','GL_ENABLE_BIT','GL_EMISSION','GL_EDGE_FLAG_ARRAY_STRIDE_EXT','GL_EDGE_FLAG_ARRAY_STRIDE',
+ 'GL_EDGE_FLAG_ARRAY_POINTER_EXT','GL_EDGE_FLAG_ARRAY_POINTER','GL_EDGE_FLAG_ARRAY_EXT','GL_EDGE_FLAG_ARRAY_COUNT_EXT','GL_EDGE_FLAG_ARRAY',
+ 'GL_EDGE_FLAG','GL_DST_COLOR','GL_DST_ALPHA','GL_DRAW_PIXEL_TOKEN','GL_DRAW_BUFFER','GL_DOUBLE_EXT','GL_DOUBLEBUFFER',
+ 'GL_DOUBLE','GL_DONT_CARE','GL_DOMAIN','GL_DITHER','GL_DIFFUSE','GL_DEPTH_WRITEMASK','GL_DEPTH_TEST','GL_DEPTH_SCALE',
+ 'GL_DEPTH_RANGE','GL_DEPTH_FUNC','GL_DEPTH_COMPONENT','GL_DEPTH_CLEAR_VALUE','GL_DEPTH_BUFFER_BIT','GL_DEPTH_BITS',
+ 'GL_DEPTH_BIAS','GL_DEPTH','GL_DECR','GL_DECAL','GL_CW','GL_CURRENT_TEXTURE_COORDS','GL_CURRENT_RASTER_TEXTURE_COORDS','GL_CURRENT_RASTER_POSITION_VALID',
+ 'GL_CURRENT_RASTER_POSITION','GL_CURRENT_RASTER_INDEX','GL_CURRENT_RASTER_DISTANCE','GL_CURRENT_RASTER_COLOR','GL_CURRENT_NORMAL',
+ 'GL_CURRENT_INDEX','GL_CURRENT_COLOR','GL_CURRENT_BIT','GL_CULL_FACE_MODE','GL_CULL_FACE','GL_COPY_PIXEL_TOKEN',
+ 'GL_COPY_INVERTED','GL_COPY','GL_CONSTANT_EXT','GL_CONSTANT_ATTENUATION','GL_CONSTANT','GL_COMPILE_AND_EXECUTE','GL_COMPILE','GL_COMBINE_RGB_EXT',
+ 'GL_COMBINE_RGB','GL_COMBINE_EXT','GL_COMBINE_ALPHA_EXT','GL_COMBINE_ALPHA','GL_COMBINE','GL_COLOR_WRITEMASK',
+ 'GL_COLOR_TABLE_WIDTH_EXT','GL_COLOR_TABLE_RED_SIZE_EXT','GL_COLOR_TABLE_LUMINANCE_SIZE_EXT','GL_COLOR_TABLE_INTENSITY_SIZE_EXT',
+ 'GL_COLOR_TABLE_GREEN_SIZE_EXT','GL_COLOR_TABLE_FORMAT_EXT','GL_COLOR_TABLE_BLUE_SIZE_EXT','GL_COLOR_TABLE_ALPHA_SIZE_EXT',
+ 'GL_COLOR_MATERIAL_PARAMETER','GL_COLOR_MATERIAL_FACE','GL_COLOR_MATERIAL','GL_COLOR_LOGIC_OP','GL_COLOR_INDEXES',
+ 'GL_COLOR_INDEX8_EXT','GL_COLOR_INDEX4_EXT','GL_COLOR_INDEX2_EXT','GL_COLOR_INDEX1_EXT','GL_COLOR_INDEX16_EXT',
+ 'GL_COLOR_INDEX12_EXT','GL_COLOR_INDEX','GL_COLOR_CLEAR_VALUE','GL_COLOR_BUFFER_BIT','GL_COLOR_ARRAY_TYPE_EXT',
+ 'GL_COLOR_ARRAY_TYPE','GL_COLOR_ARRAY_STRIDE_EXT','GL_COLOR_ARRAY_STRIDE','GL_COLOR_ARRAY_SIZE_EXT','GL_COLOR_ARRAY_SIZE',
+ 'GL_COLOR_ARRAY_POINTER_EXT','GL_COLOR_ARRAY_POINTER','GL_COLOR_ARRAY_EXT','GL_COLOR_ARRAY_COUNT_EXT','GL_COLOR_ARRAY',
+ 'GL_COLOR','GL_COEFF','GL_CLIP_PLANE5','GL_CLIP_PLANE4','GL_CLIP_PLANE3','GL_CLIP_PLANE2','GL_CLIP_PLANE1','GL_CLIP_PLANE0',
+ 'GL_CLIENT_VERTEX_ARRAY_BIT','GL_CLIENT_PIXEL_STORE_BIT','GL_CLIENT_ATTRIB_STACK_DEPTH','GL_CLIENT_ALL_ATTRIB_BITS',
+ 'GL_CLIENT_ACTIVE_TEXTURE_ARB','GL_CLIENT_ACTIVE_TEXTURE','GL_CLEAR','GL_CLAMP','GL_CCW','GL_C4UB_V3F','GL_C4UB_V2F',
+ 'GL_C4F_N3F_V3F','GL_C3F_V3F','GL_BYTE','GL_BLUE_SCALE','GL_BLUE_BITS','GL_BLUE_BIAS','GL_BLUE','GL_BLEND_SRC','GL_BLEND_DST',
+ 'GL_BLEND','GL_BITMAP_TOKEN','GL_BITMAP','GL_BGR_EXT','GL_BGRA_EXT','GL_BACK_RIGHT','GL_BACK_LEFT','GL_BACK',
+ 'GL_AUX_BUFFERS','GL_AUX3','GL_AUX2','GL_AUX1','GL_AUX0','GL_AUTO_NORMAL','GL_ATTRIB_STACK_DEPTH','GL_AND_REVERSE',
+ 'GL_AND_INVERTED','GL_AND','GL_AMBIENT_AND_DIFFUSE','GL_AMBIENT','GL_ALWAYS','GL_ALPHA_TEST_REF','GL_ALPHA_TEST_FUNC',
+ 'GL_ALPHA_TEST','GL_ALPHA_SCALE','GL_ALPHA_BITS','GL_ALPHA_BIAS','GL_ALPHA8','GL_ALPHA4','GL_ALPHA16','GL_ALPHA12',
+ 'GL_ALPHA','GL_ALL_ATTRIB_BITS','GL_ADD_SIGNED_EXT','GL_ADD_SIGNED','GL_ADD','GL_ACTIVE_TEXTURE_ARB','GL_ACTIVE_TEXTURE',
+ 'GL_ACCUM_RED_BITS','GL_ACCUM_GREEN_BITS','GL_ACCUM_CLEAR_VALUE','GL_ACCUM_BUFFER_BIT','GL_ACCUM_BLUE_BITS','GL_ACCUM_ALPHA_BITS',
+ 'GL_ACCUM','GL_4_BYTES','GL_4D_COLOR_TEXTURE','GL_3_BYTES','GL_3D_COLOR_TEXTURE','GL_3D_COLOR','GL_3D','GL_2_BYTES',
+ 'GL_2D','GLU_V_STEP','GLU_VERTEX','GLU_VERSION_1_2','GLU_VERSION_1_1','GLU_VERSION','GLU_U_STEP','GLU_UNKNOWN','GLU_TRUE',
+ 'GLU_TESS_WINDING_RULE','GLU_TESS_WINDING_POSITIVE','GLU_TESS_WINDING_ODD','GLU_TESS_WINDING_NONZERO','GLU_TESS_WINDING_NEGATIVE',
+ 'GLU_TESS_WINDING_ABS_GEQ_TWO','GLU_TESS_VERTEX_DATA','GLU_TESS_VERTEX','GLU_TESS_TOLERANCE','GLU_TESS_NEED_COMBINE_CALLBACK','GLU_TESS_MISSING_END_POLYGON',
+ 'GLU_TESS_MISSING_END_CONTOUR','GLU_TESS_MISSING_BEGIN_POLYGON','GLU_TESS_MISSING_BEGIN_CONTOUR','GLU_TESS_ERROR_DATA',
+ 'GLU_TESS_ERROR8','GLU_TESS_ERROR7','GLU_TESS_ERROR6','GLU_TESS_ERROR5','GLU_TESS_ERROR4','GLU_TESS_ERROR3','GLU_TESS_ERROR2',
+ 'GLU_TESS_ERROR1','GLU_TESS_ERROR','GLU_TESS_END_DATA','GLU_TESS_END','GLU_TESS_EDGE_FLAG_DATA','GLU_TESS_EDGE_FLAG',
+ 'GLU_TESS_COORD_TOO_LARGE','GLU_TESS_COMBINE_DATA','GLU_TESS_COMBINE','GLU_TESS_BOUNDARY_ONLY','GLU_TESS_BEGIN_DATA',
+ 'GLU_TESS_BEGIN','GLU_SMOOTH','GLU_SILHOUETTE','GLU_SAMPLING_TOLERANCE','GLU_SAMPLING_METHOD','GLU_POINT','GLU_PATH_LENGTH',
+ 'GLU_PARAMETRIC_TOLERANCE','GLU_PARAMETRIC_ERROR','GLU_OUT_OF_MEMORY','GLU_OUTSIDE','GLU_OUTLINE_POLYGON','GLU_OUTLINE_PATCH',
+ 'GLU_NURBS_ERROR9','GLU_NURBS_ERROR8','GLU_NURBS_ERROR7','GLU_NURBS_ERROR6','GLU_NURBS_ERROR5','GLU_NURBS_ERROR4',
+ 'GLU_NURBS_ERROR37','GLU_NURBS_ERROR36','GLU_NURBS_ERROR35','GLU_NURBS_ERROR34','GLU_NURBS_ERROR33','GLU_NURBS_ERROR32',
+ 'GLU_NURBS_ERROR31','GLU_NURBS_ERROR30','GLU_NURBS_ERROR3','GLU_NURBS_ERROR29','GLU_NURBS_ERROR28','GLU_NURBS_ERROR27','GLU_NURBS_ERROR26',
+ 'GLU_NURBS_ERROR25','GLU_NURBS_ERROR24','GLU_NURBS_ERROR23','GLU_NURBS_ERROR22','GLU_NURBS_ERROR21','GLU_NURBS_ERROR20',
+ 'GLU_NURBS_ERROR2','GLU_NURBS_ERROR19','GLU_NURBS_ERROR18','GLU_NURBS_ERROR17','GLU_NURBS_ERROR16','GLU_NURBS_ERROR15','GLU_NURBS_ERROR14',
+ 'GLU_NURBS_ERROR13','GLU_NURBS_ERROR12','GLU_NURBS_ERROR11','GLU_NURBS_ERROR10','GLU_NURBS_ERROR1','GLU_NONE',
+ 'GLU_MAP1_TRIM_3','GLU_MAP1_TRIM_2','GLU_LINE','GLU_INVALID_VALUE','GLU_INVALID_ENUM','GLU_INTERIOR','GLU_INSIDE','GLU_INCOMPATIBLE_GL_VERSION',
+ 'GLU_FLAT','GLU_FILL','GLU_FALSE','GLU_EXTERIOR','GLU_EXTENSIONS','GLU_ERROR','GLU_END','GLU_EDGE_FLAG','GLU_DOMAIN_DISTANCE',
+ 'GLU_DISPLAY_MODE','GLU_CW','GLU_CULLING','GLU_CCW','GLU_BEGIN','GLU_AUTO_LOAD_MATRIX','CHANNEL_UNORDERED','CHANNEL_ORDERED',
+ 'CHANNEL_MAX'
+ ),
+ 2 => array(
+
+ // Red Lowercase Keywords
+
+ 'WriteWord','WriteString','WriteReal','WriteLine','WriteInt','WriteFloat','WriteDouble','WriteChar','WriteByte',
+ 'windowwidth','windowheight','waittimer','Vec4','Vec3','Vec2','val','UpdateJoystick','ucase$','Transpose','tickcount',
+ 'textscroll','textrows','textmode','textcols','tanh','tand','tan','synctimercatchup','synctimer','swapbuffers',
+ 'str$','stopsoundvoice','stopsounds','stopmusic','sqrt','sqr','sprzorder','spryvel','sprytiles','sprysize','spryrepeat',
+ 'spryflip','sprycentre','spry','sprxvel','sprxtiles','sprxsize','sprxrepeat','sprxflip','sprxcentre','sprx',
+ 'sprvisible','sprvel','sprtype','sprtop','sprspin','sprsolid','sprsetzorder','sprsetyvel','sprsetysize','sprsetyrepeat',
+ 'sprsetyflip','sprsetycentre','sprsety','sprsetxvel','sprsetxsize','sprsetxrepeat','sprsetxflip','sprsetxcentre',
+ 'sprsetx','sprsetvisible','sprsetvel','sprsettiles','sprsettextures','sprsettexture','sprsetspin','sprsetsolid',
+ 'sprsetsize','sprsetscale','sprsetpos','sprsetparallax','sprsetframe','sprsetcolor','sprsetanimspeed','sprsetanimloop',
+ 'sprsetangle','sprsetalpha','sprscale','sprright','sprpos','sprparallax','sprleft','spriteareawidth','spriteareaheight',
+ 'sprframe','sprcolor','sprcameraz','sprcameray','sprcamerax','sprcamerasetz','sprcamerasety','sprcamerasetx',
+ 'sprcamerasetpos','sprcamerasetfov','sprcamerasetangle','sprcamerapos','sprcamerafov','sprcameraangle',
+ 'sprbottom','spranimspeed','spranimloop','spranimdone','sprangle','spralpha','spraddtextures','spraddtexture',
+ 'sounderror','sleep','sind','sin','showcursor','sgn','settextscroll','setmusicvolume','SendMessage','Seek',
+ 'scankeydown','RTInvert','rnd','right$','resizetext','resizespritearea','RejectConnection','ReceiveMessage','ReadWord',
+ 'ReadText','ReadReal','ReadLine','ReadInt','ReadFloat','ReadDouble','ReadChar','ReadByte','randomize','printr',
+ 'print','pow','playsound','playmusic','performancecounter','Orthonormalize','OpenFileWrite','OpenFileRead','Normalize',
+ 'newtilemap','newsprite','NewServer','NewConnection','musicplaying','mouse_yd','mouse_y','mouse_xd','mouse_x',
+ 'mouse_wheel','mouse_button','mid$','MessageSmoothed','MessageReliable','MessagePending','MessageChannel','maxtextureunits',
+ 'MatrixZero','MatrixTranslate','MatrixScale','MatrixRotateZ','MatrixRotateY','MatrixRotateX','MatrixRotate','MatrixIdentity',
+ 'MatrixCrossProduct','MatrixBasis','log','locate','loadtexture','loadsound','loadmipmaptexture','loadmipmapimagestrip',
+ 'loadimagestrip','loadimage','Length','len','left$','lcase$','keydown','Joy_Y','Joy_X','Joy_Up','Joy_Right','Joy_Left',
+ 'Joy_Keys','Joy_Down','Joy_Button','Joy_3','Joy_2','Joy_1','Joy_0','int','inscankey','input$','inkey$','inittimer',
+ 'imagewidth','imagestripframes','imageheight','imageformat','imagedatatype','hidecursor','glViewport','glVertex4sv',
+ 'glVertex4s','glVertex4iv','glVertex4i','glVertex4fv','glVertex4f','glVertex4dv','glVertex4d','glVertex3sv','glVertex3s',
+ 'glVertex3iv','glVertex3i','glVertex3fv','glVertex3f','glVertex3dv','glVertex3d','glVertex2sv','glVertex2s','glVertex2iv',
+ 'glVertex2i','glVertex2fv','glVertex2f','glVertex2dv','glVertex2d','gluPerspective','gluOrtho2D','gluLookAt',
+ 'glubuild2dmipmaps','glTranslatef','glTranslated','gltexsubimage2d','glTexParameteriv','glTexParameteri',
+ 'glTexParameterfv','glTexParameterf','glteximage2d','glTexGeniv','glTexGeni','glTexGenfv','glTexGenf','glTexGendv',
+ 'glTexGend','glTexEnviv','glTexEnvi','glTexEnvfv','glTexEnvf','glTexCoord4sv','glTexCoord4s','glTexCoord4iv','glTexCoord4i',
+ 'glTexCoord4fv','glTexCoord4f','glTexCoord4dv','glTexCoord4d','glTexCoord3sv','glTexCoord3s','glTexCoord3iv','glTexCoord3i',
+ 'glTexCoord3fv','glTexCoord3f','glTexCoord3dv','glTexCoord3d','glTexCoord2sv','glTexCoord2s','glTexCoord2iv','glTexCoord2i',
+ 'glTexCoord2fv','glTexCoord2f','glTexCoord2dv','glTexCoord2d','glTexCoord1sv','glTexCoord1s','glTexCoord1iv','glTexCoord1i','glTexCoord1fv',
+ 'glTexCoord1f','glTexCoord1dv','glTexCoord1d','glStencilOp','glStencilMask','glStencilFunc','glShadeModel','glSelectBuffer',
+ 'glScissor','glScalef','glScaled','glRotatef','glRotated','glRenderMode','glRectsv','glRects','glRectiv','glRecti',
+ 'glRectfv','glRectf','glRectdv','glRectd','glReadBuffer','glRasterPos4sv','glRasterPos4s','glRasterPos4iv',
+ 'glRasterPos4i','glRasterPos4fv','glRasterPos4f','glRasterPos4dv','glRasterPos4d','glRasterPos3sv','glRasterPos3s',
+ 'glRasterPos3iv','glRasterPos3i','glRasterPos3fv','glRasterPos3f','glRasterPos3dv','glRasterPos3d','glRasterPos2sv',
+ 'glRasterPos2s','glRasterPos2iv','glRasterPos2i','glRasterPos2fv','glRasterPos2f','glRasterPos2dv','glRasterPos2d',
+ 'glPushName','glPushMatrix','glPushClientAttrib','glPushAttrib','glPrioritizeTextures','glPopName','glPopMatrix',
+ 'glPopClientAttrib','glPopAttrib','glpolygonstipple','glPolygonOffset','glPolygonMode','glPointSize','glPixelZoom',
+ 'glPixelTransferi','glPixelTransferf','glPixelStorei','glPixelStoref','glPassThrough','glOrtho','glNormal3sv','glNormal3s',
+ 'glNormal3iv','glNormal3i','glNormal3fv','glNormal3f','glNormal3dv','glNormal3d','glNormal3bv','glNormal3b','glNewList',
+ 'glMultMatrixf','glMultMatrixd','glmultitexcoord2f','glmultitexcoord2d','glMatrixMode','glMaterialiv','glMateriali',
+ 'glMaterialfv','glMaterialf','glMapGrid2f','glMapGrid2d','glMapGrid1f','glMapGrid1d','glLogicOp','glLoadName','glLoadMatrixf',
+ 'glLoadMatrixd','glLoadIdentity','glListBase','glLineWidth','glLineStipple','glLightModeliv','glLightModeli','glLightModelfv',
+ 'glLightModelf','glLightiv','glLighti','glLightfv','glLightf','glIsTexture','glIsList','glIsEnabled','glInitNames',
+ 'glIndexubv','glIndexub','glIndexsv','glIndexs','glIndexMask','glIndexiv','glIndexi','glIndexfv','glIndexf','glIndexdv',
+ 'glIndexd','glHint','glGetTexParameteriv','glGetTexParameterfv','glGetTexLevelParameteriv','glGetTexLevelParameterfv',
+ 'glGetTexGeniv','glGetTexGenfv','glGetTexGendv','glGetTexEnviv','glGetTexEnvfv','glgetstring','glgetpolygonstipple','glGetPixelMapuiv',
+ 'glGetMaterialiv','glGetMaterialfv','glGetLightiv','glGetLightfv','glGetIntegerv','glGetFloatv',
+ 'glGetError','glGetDoublev','glGetClipPlane','glGetBooleanv','glgentextures','glgentexture',
+ 'glgenlists','glFrustum','glFrontFace','glFogiv','glFogi','glFogfv','glFogf','glFlush','glFinish','glFeedbackBuffer',
+ 'glEvalPoint2','glEvalPoint1','glEvalMesh2','glEvalMesh1','glEvalCoord2fv','glEvalCoord2f','glEvalCoord2dv','glEvalCoord2d',
+ 'glEvalCoord1fv','glEvalCoord1f','glEvalCoord1dv','glEvalCoord1d','glEndList','glEnd','glEnableClientState','glEnable',
+ 'glEdgeFlagv','glEdgeFlag','glDrawBuffer','glDrawArrays','glDisableClientState','glDisable','glDepthRange','glDepthMask',
+ 'glDepthFunc','gldeletetextures','gldeletetexture','gldeletelists','glCullFace','glCopyTexSubImage2D','glCopyTexSubImage1D',
+ 'glCopyTexImage2D','glCopyTexImage1D','glColorMaterial','glColorMask','glColor4usv','glColor4us','glColor4uiv','glColor4ui',
+ 'glColor4ubv','glColor4ub','glColor4sv','glColor4s','glColor4iv','glColor4i','glColor4fv','glColor4f','glColor4dv',
+ 'glColor4d','glColor4bv','glColor4b','glColor3usv','glColor3us','glColor3uiv','glColor3ui','glColor3ubv','glColor3ub',
+ 'glColor3sv','glColor3s','glColor3iv','glColor3i','glColor3fv','glColor3f','glColor3dv','glColor3d','glColor3bv',
+ 'glColor3b','glClipPlane','glClearStencil','glClearIndex','glClearDepth','glClearColor','glClearAccum','glClear',
+ 'glcalllists','glCallList','glBlendFunc','glBindTexture','glBegin','glArrayElement','glAreTexturesResident',
+ 'glAlphaFunc','glactivetexture','glAccum','font','FindNextFile','FindFirstFile','FindClose','FileError',
+ 'extensionsupported','exp','execute','EndOfFile','drawtext','divbyzero','Determinant','deletesprite','deletesound',
+ 'DeleteServer','deleteimage','DeleteConnection','defaultfont','CrossProduct','cosd','cos','copysprite','ConnectionPending',
+ 'ConnectionHandShaking','ConnectionConnected','ConnectionAddress','compilererrorline','compilererrorcol','compilererror',
+ 'compilefile','compile','color','cls','CloseFile','clearregion','clearline','clearkeys','chr$','charat$','bindsprite',
+ 'beep','atnd','atn2d','atn2','atn','atand','asc','argcount','arg','animatesprites','AcceptConnection','abs'
+ ),
+ 3 => array(
+
+ // Blue Lowercase Keywords
+
+ 'xor','while','wend','until','type','traditional_print','traditional','to','then','struc','string','step','single',
+ 'run','return','reset','read','or','null','not','next','lor','loop','language','land','integer','input','if',
+ 'goto','gosub','for','endstruc','endif','end','elseif','else','double','do','dim','data','const','basic4gl','as',
+ 'and','alloc'
+ )
+
+ ),
+ 'SYMBOLS' => array(
+ '=', '<', '>', '>=', '<=', '+', '-', '*', '/', '%', '(', ')', '{', '}', '[', ']', '&', ';', ':', '$'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #000080; font-weight: bold;',
+ 2 => 'color: #FF0000;',
+ 3 => 'color: #0000FF;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #657CC4; font-style: italic;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #000080;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #008000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #000080; font-weight: bold;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #0000FF;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 4
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/bf.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/bf.php
new file mode 100644
index 000000000..c4be922e0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/bf.php
@@ -0,0 +1,114 @@
+<?php
+/*************************************************************************************
+ * bf.php
+ * ----------
+ * Author: Benny Baumann (BenBE@geshi.org)
+ * Copyright: (c) 2008 Benny Baumann (http://qbnz.com/highlighter/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2009/10/31
+ *
+ * Brainfuck language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/10/31 (1.0.8.1)
+ * - First Release
+ *
+ * TODO
+ * ----
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+$language_data = array (
+ 'LANG_NAME' => 'Brainfuck',
+ 'COMMENT_SINGLE' => array(),
+ 'COMMENT_MULTI' => array(),
+ 'COMMENT_REGEXP' => array(1 => '/[^\n+\-<>\[\]\.\,Y]+/s'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_UPPER,
+ 'QUOTEMARKS' => array(),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => array('+', '-'),
+ 1 => array('[', ']'),
+ 2 => array('<', '>'),
+ 3 => array('.', ','),
+ 4 => array('Y') //Brainfork Extension ;-)
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #666666; font-style: italic;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #006600;',
+ 1 => 'color: #660000;',
+ 2 => 'color: #000066;',
+ 3 => 'color: #660066;',
+ 4 => 'color: #666600;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ )
+ ),
+ 'URLS' => array(
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 4,
+ 'PARSER_CONTROL' => array(
+ 'ENABLE_FLAGS' => array(
+ 'STRINGS' => GESHI_NEVER,
+ 'NUMBERS' => GESHI_NEVER
+ ),
+ 'KEYWORDS' => array(
+ 'DISALLOW_BEFORE' => '',
+ 'DISALLOW_AFTER' => ''
+ )
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/blitzbasic.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/blitzbasic.php
new file mode 100644
index 000000000..3ad5eabf0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/blitzbasic.php
@@ -0,0 +1,185 @@
+<?php
+/*************************************************************************************
+ * blitzbasic.php
+ * --------------
+ * Author: P�draig O`Connel (info@moonsword.info)
+ * Copyright: (c) 2005 P�draig O`Connel (http://moonsword.info)
+ * Release Version: 1.0.8.4
+ * Date Started: 16.10.2005
+ *
+ * BlitzBasic language file for GeSHi.
+ *
+ * It is a simple Basic dialect. Released for Games and Network Connections.
+ * In this Language File are all functions included (2D BB and 3D BB)
+ *
+ *
+ * CHANGES
+ * -------
+ * 2005/12/28 (1.0.1)
+ * - Remove unnecessary style index for regexps
+ * 2005/10/22 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2005/10/22)
+ * -------------------------
+ * * Sort out the Basic commands for splitting up.
+ * * To set up the right colors.
+ * (the colors are ok, but not the correct ones)
+ * * Split to BlitzBasic 2D and BlitzBasic 3D.
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'BlitzBasic',
+ 'COMMENT_SINGLE' => array(1 => ';'),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'If','EndIf','ElseIf','Else If','Else','While','Wend','Return','Next','Include','End Type','End Select','End If','End Function','End','Select',
+ 'Type','Forever','For','Or','And','AppTitle','Case','Goto','Gosub','Step','Stop','Int','Last','False','Then','To','True','Until','Float',
+ 'String','Before','Not'
+ ),
+ 2 => array(
+ // All Functions - 2D BB and 3D BB
+ 'Xor','WriteString','WriteShort','WritePixelFast','WritePixel','WriteLine','WriteInt','WriteFloat','WriteFile','WriteBytes',
+ 'WriteByte','Write','WaitTimer','WaitMouse','WaitKey','WaitJoy','VWait','Viewport',
+ 'Upper','UpdateGamma','UnlockBuffer','UDPTimeouts','UDPStreamPort','UDPStreamIP','UDPMsgPort','UDPMsgIP',
+ 'Trim','TotalVidMem','TileImage','TileBlock','TFormImage','TFormFilter','Text',
+ 'TCPTimeouts','TCPStreamPort','TCPStreamIP','Tan','SystemProperty','StringWidth','StringHeight','Str','StopNetGame',
+ 'StopChannel','StartNetGame','Sqr','SoundVolume','SoundPitch','SoundPan','Sin','Shr',
+ 'ShowPointer','Shl','Sgn','SetGfxDriver','SetGamma','SetFont','SetEnv','SetBuffer','SendUDPMsg','SendNetMsg',
+ 'SeekFile','SeedRnd','ScanLine','ScaleImage','SaveImage','SaveBuffer','Sar','RuntimeError','RSet',
+ 'RotateImage','RndSeed','Rnd','Right','ResumeChannel','Restore','ResizeImage','ResizeBank','Replace',
+ 'Repeat','RecvUDPMsg','RecvNetMsg','RectsOverlap','Rect','ReadString','ReadShort','ReadPixelFast','ReadPixel','ReadLine',
+ 'ReadInt','ReadFloat','ReadFile','ReadDir','ReadBytes','ReadByte','ReadAvail','Read','Rand','Print',
+ 'PokeShort','PokeInt','PokeFloat','PokeByte','Plot','PlaySound','PlayMusic','PlayCDTrack','Pi','PeekShort',
+ 'PeekInt','PeekFloat','PeekByte','PauseChannel','Oval','Origin','OpenTCPStream','OpenMovie','OpenFile',
+ 'Null','NextFile','New','NetPlayerName','NetPlayerLocal','NetMsgType','NetMsgTo','NetMsgFrom',
+ 'NetMsgData','MovieWidth','MoviePlaying','MovieHeight','MoveMouse','MouseZSpeed','MouseZ','MouseYSpeed','MouseY','MouseXSpeed',
+ 'MouseX','MouseHit','MouseDown','Mod','Millisecs','MidHandle','Mid','MaskImage','LSet','Lower',
+ 'LoopSound','Log10','Log','LockBuffer','Locate','Local','LoadSound','LoadImage','LoadFont','LoadBuffer',
+ 'LoadAnimImage','Line','Len','Left','KeyHit','KeyDown','JoyZDir','JoyZ','JoyYDir',
+ 'JoyYaw','JoyY','JoyXDir','JoyX','JoyVDir','JoyV','JoyUDir','JoyU','JoyType','JoyRoll',
+ 'JoyPitch','JoyHit','JoyHat','JoyDown','JoinNetGame','Instr','Insert','Input',
+ 'ImageYHandle','ImageXHandle','ImageWidth','ImagesOverlap','ImagesCollide','ImageRectOverlap','ImageRectCollide','ImageHeight','ImageBuffer',
+ 'HostNetGame','HostIP','HidePointer','Hex','HandleImage','GraphicsWidth','GraphicsHeight','GraphicsDepth','GraphicsBuffer','Graphics',
+ 'GrabImage','Global','GFXModeWidth','GFXModeHeight','GfxModeExists','GFXModeDepth','GfxDriverName','GetMouse',
+ 'GetKey','GetJoy','GetEnv','GetColor','GammaRed','GammaGreen','GammaBlue','Function','FrontBuffer','FreeTimer',
+ 'FreeSound','FreeImage','FreeFont','FreeBank','FontWidth','FontHeight','FlushMouse','FlushKeys',
+ 'FlushJoy','Floor','Flip','First','FileType','FileSize','FilePos','Field',
+ 'Exp','Exit','ExecFile','Eof','EndGraphics','Each','DrawMovie','DrawImageRect','DrawImage','DrawBlockRect','DrawBlock',
+ 'DottedIP','Dim','DeleteNetPlayer','DeleteFile','DeleteDir','Delete','Delay','Default','DebugLog','Data',
+ 'CurrentTime','CurrentDir','CurrentDate','CreateUDPStream','CreateTimer','CreateTCPServer','CreateNetPlayer','CreateImage','CreateDir','CreateBank',
+ 'CountHostIPs','CountGFXModes','CountGfxDrivers','Cos','CopyStream','CopyRect','CopyPixelFast','CopyPixel','CopyImage','CopyFile',
+ 'CopyBank','Const','CommandLine','ColorRed','ColorGreen','ColorBlue','Color','ClsColor','Cls','CloseUDPStream',
+ 'CloseTCPStream','CloseTCPServer','CloseMovie','CloseFile','CloseDir','Chr','ChannelVolume','ChannelPlaying','ChannelPitch','ChannelPan',
+ 'ChangeDir','Ceil','CallDLL','Bin','BankSize','BackBuffer','AvailVidMem','AutoMidHandle',
+ 'ATan2','ATan','ASin','Asc','After','ACos','AcceptTCPStream','Abs',
+ // 3D Commands
+ 'Wireframe','Windowed3D','WBuffer','VertexZ','VertexY',
+ 'VertexX','VertexW','VertexV','VertexU','VertexTexCoords','VertexRed','VertexNZ','VertexNY','VertexNX','VertexNormal',
+ 'VertexGreen','VertexCoords','VertexColor','VertexBlue','VertexAlpha','VectorYaw','VectorPitch','UpdateWorld','UpdateNormals','TurnEntity',
+ 'TrisRendered','TriangleVertex','TranslateEntity','TFormVector','TFormPoint','TFormNormal','TFormedZ','TFormedY','TFormedX','TextureWidth',
+ 'TextureName','TextureHeight','TextureFilter','TextureCoords','TextureBuffer','TextureBlend','TerrainZ','TerrainY','TerrainX','TerrainSize',
+ 'TerrainShading','TerrainHeight','TerrainDetail','SpriteViewMode','ShowEntity','SetCubeFace','SetAnimTime','SetAnimKey','ScaleTexture','ScaleSprite',
+ 'ScaleMesh','ScaleEntity','RotateTexture','RotateSprite','RotateMesh','RotateEntity','ResetEntity','RenderWorld','ProjectedZ','ProjectedY',
+ 'ProjectedX','PositionTexture','PositionMesh','PositionEntity','PointEntity','PickedZ','PickedY','PickedX','PickedTriangle','PickedTime',
+ 'PickedSurface','PickedNZ','PickedNY','PickedNX','PickedEntity','PaintSurface','PaintMesh','PaintEntity','NameEntity','MoveEntity',
+ 'ModifyTerrain','MeshWidth','MeshHeight','MeshesIntersect','MeshDepth','MD2AnimTime','MD2AnimLength','MD2Animating','LoadTexture','LoadTerrain',
+ 'LoadSprite','LoadMesh','LoadMD2','LoaderMatrix','LoadBSP','LoadBrush','LoadAnimTexture','LoadAnimSeq','LoadAnimMesh','Load3DSound',
+ 'LinePick','LightRange','LightMesh','LightConeAngles','LightColor','HWMultiTex','HideEntity','HandleSprite','Graphics3D','GfxMode3DExists',
+ 'GfxMode3D','GfxDriverCaps3D','GfxDriver3D','GetSurfaceBrush','GetSurface','GetParent','GetMatElement','GetEntityType','GetEntityBrush','GetChild',
+ 'GetBrushTexture','FreeTexture','FreeEntity','FreeBrush','FlipMesh','FitMesh','FindSurface','FindChild','ExtractAnimSeq','EntityZ',
+ 'EntityYaw','EntityY','EntityX','EntityVisible','EntityType','EntityTexture','EntityShininess','EntityRoll','EntityRadius','EntityPitch',
+ 'EntityPickMode','EntityPick','EntityParent','EntityOrder','EntityName','EntityInView','EntityFX','EntityDistance','EntityColor','EntityCollided',
+ 'EntityBox','EntityBlend','EntityAutoFade','EntityAlpha','EmitSound','Dither','DeltaYaw','DeltaPitch','CreateTexture','CreateTerrain',
+ 'CreateSurface','CreateSprite','CreateSphere','CreatePlane','CreatePivot','CreateMirror','CreateMesh','CreateListener','CreateLight','CreateCylinder',
+ 'CreateCube','CreateCone','CreateCamera','CreateBrush','CountVertices','CountTriangles','CountSurfaces','CountGfxModes3D','CountCollisions','CountChildren',
+ 'CopyMesh','CopyEntity','CollisionZ','CollisionY','CollisionX','CollisionTriangle','CollisionTime','CollisionSurface','Collisions','CollisionNZ',
+ 'CollisionNY','CollisionNX','CollisionEntity','ClearWorld','ClearTextureFilters','ClearSurface','ClearCollisions','CaptureWorld','CameraZoom','CameraViewport',
+ 'CameraRange','CameraProjMode','CameraProject','CameraPick','CameraFogRange','CameraFogMode','CameraFogColor','CameraClsMode','CameraClsColor','BSPLighting',
+ 'BSPAmbientLight','BrushTexture','BrushShininess','BrushFX','BrushColor','BrushBlend','BrushAlpha','AntiAlias','AnimTime','AnimSeq',
+ 'AnimLength','Animating','AnimateMD2','Animate','AmbientLight','AlignToVector','AddVertex','AddTriangle','AddMesh','AddAnimSeq',
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(',')'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #000066; font-weight: bold;',
+ 2 => 'color: #0000ff;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #D9D100; font-style: italic;',
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #000066;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #009900;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #CC0000;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #006600;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #000066;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ 0 => '',
+ 1 => '',
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '\\'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ 0 => false,
+ 1 => false
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/bnf.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/bnf.php
new file mode 100644
index 000000000..0032acf48
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/bnf.php
@@ -0,0 +1,110 @@
+<?php
+/*************************************************************************************
+ * bnf.php
+ * --------
+ * Author: Rowan Rodrik van der Molen (rowan@bigsmoke.us)
+ * Copyright: (c) 2006 Rowan Rodrik van der Molen (http://www.bigsmoke.us/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2006/09/28
+ *
+ * BNF (Backus-Naur form) language file for GeSHi.
+ *
+ * See http://en.wikipedia.org/wiki/Backus-Naur_form for more info on BNF.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * - Removed superflicious regexps
+ * 2006/09/18 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2006/09/18)
+ * -------------------------
+ * * Nothing I can think of
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'bnf',
+ 'COMMENT_SINGLE' => array(),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"', "'"),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(),
+ 'SYMBOLS' => array(
+ '(', ')', '<', '>', '::=', '|'
+ ),
+ 'CASE_SENSITIVE' => array(
+ //GESHI_COMMENTS => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(),
+ 'COMMENTS' => array(
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => ''
+ ),
+ 'BRACKETS' => array(
+ 0 => ''
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #a00;',
+ 1 => 'color: #a00;'
+ ),
+ 'NUMBERS' => array(
+ 0 => ''
+ ),
+ 'METHODS' => array(
+ 0 => ''
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #000066; font-weight: bold;', // Unused
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #007;',
+ ),
+ 'SCRIPT' => array(
+ 0 => ''
+ )
+ ),
+ 'URLS' => array(),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(),
+ 'REGEXPS' => array(
+ //terminal symbols
+ 0 => array(
+ GESHI_SEARCH => '(&lt;)([^&]+?)(&gt;)',
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => '\\3'
+ ),
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/boo.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/boo.php
new file mode 100644
index 000000000..d555dd4a2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/boo.php
@@ -0,0 +1,217 @@
+<?php
+/*************************************************************************************
+ * boo.php
+ * --------
+ * Author: Marcus Griep (neoeinstein+GeSHi@gmail.com)
+ * Copyright: (c) 2007 Marcus Griep (http://www.xpdm.us)
+ * Release Version: 1.0.8.4
+ * Date Started: 2007/09/10
+ *
+ * Boo language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2004/09/10 (1.0.8)
+ * - First Release
+ *
+ * TODO (updated 2007/09/10)
+ * -------------------------
+ * Regular Expression Literal matching
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Boo',
+ 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'''", "'", '"""', '"'),
+ 'HARDQUOTE' => array('"""', '"""'),
+ 'HARDESCAPE' => array('\"""'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(//Namespace
+ 'namespace', 'import', 'from'
+ ),
+ 2 => array(//Jump
+ 'yield', 'return', 'goto', 'continue', 'break'
+ ),
+ 3 => array(//Conditional
+ 'while', 'unless', 'then', 'in', 'if', 'for', 'else', 'elif'
+ ),
+ 4 => array(//Property
+ 'set', 'get'
+ ),
+ 5 => array(//Exception
+ 'try', 'raise', 'failure', 'except', 'ensure'
+ ),
+ 6 => array(//Visibility
+ 'public', 'private', 'protected', 'internal'
+ ),
+ 7 => array(//Define
+ 'struct', 'ref', 'of', 'interface', 'event', 'enum', 'do', 'destructor', 'def', 'constructor', 'class'
+ ),
+ 8 => array(//Cast
+ 'typeof', 'cast', 'as'
+ ),
+ 9 => array(//BiMacro
+ 'yieldAll', 'using', 'unchecked', 'rawArayIndexing', 'print', 'normalArrayIndexing', 'lock',
+ 'debug', 'checked', 'assert'
+ ),
+ 10 => array(//BiAttr
+ 'required', 'property', 'meta', 'getter', 'default'
+ ),
+ 11 => array(//BiFunc
+ 'zip', 'shellp', 'shellm', 'shell', 'reversed', 'range', 'prompt',
+ 'matrix', 'map', 'len', 'join', 'iterator', 'gets', 'enumerate', 'cat', 'array'
+ ),
+ 12 => array(//HiFunc
+ '__switch__', '__initobj__', '__eval__', '__addressof__', 'quack'
+ ),
+ 13 => array(//Primitive
+ 'void', 'ushort', 'ulong', 'uint', 'true', 'timespan', 'string', 'single',
+ 'short', 'sbyte', 'regex', 'object', 'null', 'long', 'int', 'false', 'duck',
+ 'double', 'decimal', 'date', 'char', 'callable', 'byte', 'bool'
+ ),
+ 14 => array(//Operator
+ 'not', 'or', 'and', 'is', 'isa',
+ ),
+ 15 => array(//Modifier
+ 'virtual', 'transient', 'static', 'partial', 'override', 'final', 'abstract'
+ ),
+ 16 => array(//Access
+ 'super', 'self'
+ ),
+ 17 => array(//Pass
+ 'pass'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '[|', '|]', '${', '(', ')', '[', ']', '{', '}', '!', '@', '%', '&', '*', '|', '/', '<', '>', '+', '-', ';'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ 2 => true,
+ 3 => true,
+ 4 => true,
+ 5 => true,
+ 6 => true,
+ 7 => true,
+ 8 => true,
+ 9 => true,
+ 10 => true,
+ 11 => true,
+ 12 => true,
+ 13 => true,
+ 14 => true,
+ 15 => true,
+ 16 => true,
+ 17 => true
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color:green;font-weight:bold;',
+ 2 => 'color:navy;',
+ 3 => 'color:blue;font-weight:bold;',
+ 4 => 'color:#8B4513;',
+ 5 => 'color:teal;font-weight:bold;',
+ 6 => 'color:blue;font-weight:bold;',
+ 7 => 'color:blue;font-weight:bold;',
+ 8 => 'color:blue;font-weight:bold;',
+ 9 => 'color:maroon;',
+ 10 => 'color:maroon;',
+ 11 => 'color:purple;',
+ 12 => 'color:#4B0082;',
+ 13 => 'color:purple;font-weight:bold;',
+ 14 => 'color:#008B8B;font-weight:bold;',
+ 15 => 'color:brown;',
+ 16 => 'color:black;font-weight:bold;',
+ 17 => 'color:gray;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #999999; font-style: italic;',
+ 2 => 'color: #999999; font-style: italic;',
+ 'MULTI' => 'color: #008000; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #0000FF; font-weight: bold;',
+ 'HARD' => 'color: #0000FF; font-weight: bold;',
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #006400;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #008000;',
+ 'HARD' => 'color: #008000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #00008B;'
+ ),
+ 'METHODS' => array(
+ 0 => 'color: 000000;',
+ 1 => 'color: 000000;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #006400;'
+ ),
+ 'REGEXPS' => array(
+ #0 => 'color: #0066ff;'
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => '',
+ 5 => '',
+ 6 => '',
+ 7 => '',
+ 8 => '',
+ 9 => '',
+ 10 => '',
+ 11 => '',
+ 12 => '',
+ 13 => '',
+ 14 => '',
+ 15 => '',
+ 16 => '',
+ 17 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 0 => '.',
+ 1 => '::'
+ ),
+ 'REGEXPS' => array(
+ #0 => '%(@)?\/(?:(?(1)[^\/\\\\\r\n]+|[^\/\\\\\r\n \t]+)|\\\\[\/\\\\\w+()|.*?$^[\]{}\d])+\/%'
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 4
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/c.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/c.php
new file mode 100644
index 000000000..86f576ef6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/c.php
@@ -0,0 +1,188 @@
+<?php
+/*************************************************************************************
+ * c.php
+ * -----
+ * Author: Nigel McNie (nigel@geshi.org)
+ * Contributors:
+ * - Jack Lloyd (lloyd@randombit.net)
+ * - Michael Mol (mikemol@gmail.com)
+ * Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/06/04
+ *
+ * C language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2009/01/22 (1.0.8.3)
+ * - Made keywords case-sensitive.
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * 2004/XX/XX (1.0.4)
+ * - Added a couple of new keywords (Jack Lloyd)
+ * 2004/11/27 (1.0.3)
+ * - Added support for multiple object splitters
+ * 2004/10/27 (1.0.2)
+ * - Added support for URLs
+ * 2004/08/05 (1.0.1)
+ * - Added support for symbols
+ * 2004/07/14 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2009/02/08)
+ * -------------------------
+ * - Get a list of inbuilt functions to add (and explore C more
+ * to complete this rather bare language file
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'C',
+ 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'COMMENT_REGEXP' => array(
+ //Multiline-continued single-line comments
+ 1 => '/\/\/(?:\\\\\\\\|\\\\\\n|.)*$/m',
+ //Multiline-continued preprocessor define
+ 2 => '/#(?:\\\\\\\\|\\\\\\n|.)*$/m'
+ ),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '',
+ 'ESCAPE_REGEXP' => array(
+ //Simple Single Char Escapes
+ 1 => "#\\\\[\\\\abfnrtv\'\"?\n]#i",
+ //Hexadecimal Char Specs
+ 2 => "#\\\\x[\da-fA-F]{2}#",
+ //Hexadecimal Char Specs
+ 3 => "#\\\\u[\da-fA-F]{4}#",
+ //Hexadecimal Char Specs
+ 4 => "#\\\\U[\da-fA-F]{8}#",
+ //Octal Char Specs
+ 5 => "#\\\\[0-7]{1,3}#"
+ ),
+ 'NUMBERS' =>
+ GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_INT_CSTYLE | GESHI_NUMBER_BIN_PREFIX_0B |
+ GESHI_NUMBER_OCT_PREFIX | GESHI_NUMBER_HEX_PREFIX | GESHI_NUMBER_FLT_NONSCI |
+ GESHI_NUMBER_FLT_NONSCI_F | GESHI_NUMBER_FLT_SCI_SHORT | GESHI_NUMBER_FLT_SCI_ZERO,
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'if', 'return', 'while', 'case', 'continue', 'default',
+ 'do', 'else', 'for', 'switch', 'goto'
+ ),
+ 2 => array(
+ 'null', 'false', 'break', 'true', 'function', 'enum', 'extern', 'inline'
+ ),
+ 3 => array(
+ 'printf', 'cout'
+ ),
+ 4 => array(
+ 'auto', 'char', 'const', 'double', 'float', 'int', 'long',
+ 'register', 'short', 'signed', 'sizeof', 'static', 'string', 'struct',
+ 'typedef', 'union', 'unsigned', 'void', 'volatile', 'wchar_t'
+ ),
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '{', '}', '[', ']',
+ '+', '-', '*', '/', '%',
+ '=', '<', '>',
+ '!', '^', '&', '|',
+ '?', ':',
+ ';', ','
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ 2 => true,
+ 3 => true,
+ 4 => true,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #b1b100;',
+ 2 => 'color: #000000; font-weight: bold;',
+ 3 => 'color: #000066;',
+ 4 => 'color: #993333;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #666666; font-style: italic;',
+ 2 => 'color: #339933;',
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;',
+ 1 => 'color: #000099; font-weight: bold;',
+ 2 => 'color: #660099; font-weight: bold;',
+ 3 => 'color: #660099; font-weight: bold;',
+ 4 => 'color: #660099; font-weight: bold;',
+ 5 => 'color: #006699; font-weight: bold;',
+ 'HARD' => '',
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #009900;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #0000dd;',
+ GESHI_NUMBER_BIN_PREFIX_0B => 'color: #208080;',
+ GESHI_NUMBER_OCT_PREFIX => 'color: #208080;',
+ GESHI_NUMBER_HEX_PREFIX => 'color: #208080;',
+ GESHI_NUMBER_FLT_SCI_SHORT => 'color:#800080;',
+ GESHI_NUMBER_FLT_SCI_ZERO => 'color:#800080;',
+ GESHI_NUMBER_FLT_NONSCI_F => 'color:#800080;',
+ GESHI_NUMBER_FLT_NONSCI => 'color:#800080;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #202020;',
+ 2 => 'color: #202020;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #339933;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => 'http://www.opengroup.org/onlinepubs/009695399/functions/{FNAMEL}.html',
+ 4 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.',
+ 2 => '::'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 4
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/c_mac.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/c_mac.php
new file mode 100644
index 000000000..46a3600fe
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/c_mac.php
@@ -0,0 +1,212 @@
+<?php
+/*************************************************************************************
+ * c_mac.php
+ * ---------
+ * Author: M. Uli Kusterer (witness.of.teachtext@gmx.net)
+ * Copyright: (c) 2004 M. Uli Kusterer, Nigel McNie (http://qbnz.com/highlighter/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/06/04
+ *
+ * C for Macs language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * 2004/11/27
+ * - First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'C (Mac)',
+ 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'COMMENT_REGEXP' => array(
+ //Multiline-continued single-line comments
+ 1 => '/\/\/(?:\\\\\\\\|\\\\\\n|.)*$/m',
+ //Multiline-continued preprocessor define
+ 2 => '/#(?:\\\\\\\\|\\\\\\n|.)*$/m'
+ ),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '',
+ 'ESCAPE_REGEXP' => array(
+ //Simple Single Char Escapes
+ 1 => "#\\\\[\\\\abfnrtv\'\"?\n]#i",
+ //Hexadecimal Char Specs
+ 2 => "#\\\\x[\da-fA-F]{2}#",
+ //Hexadecimal Char Specs
+ 3 => "#\\\\u[\da-fA-F]{4}#",
+ //Hexadecimal Char Specs
+ 4 => "#\\\\U[\da-fA-F]{8}#",
+ //Octal Char Specs
+ 5 => "#\\\\[0-7]{1,3}#"
+ ),
+ 'NUMBERS' =>
+ GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_INT_CSTYLE | GESHI_NUMBER_BIN_PREFIX_0B |
+ GESHI_NUMBER_OCT_PREFIX | GESHI_NUMBER_HEX_PREFIX | GESHI_NUMBER_FLT_NONSCI |
+ GESHI_NUMBER_FLT_NONSCI_F | GESHI_NUMBER_FLT_SCI_SHORT | GESHI_NUMBER_FLT_SCI_ZERO,
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'if', 'return', 'while', 'case', 'continue', 'default',
+ 'do', 'else', 'for', 'switch', 'goto'
+ ),
+ 2 => array(
+ 'NULL', 'false', 'break', 'true', 'enum', 'errno', 'EDOM',
+ 'ERANGE', 'FLT_RADIX', 'FLT_ROUNDS', 'FLT_DIG', 'DBL_DIG', 'LDBL_DIG',
+ 'FLT_EPSILON', 'DBL_EPSILON', 'LDBL_EPSILON', 'FLT_MANT_DIG', 'DBL_MANT_DIG',
+ 'LDBL_MANT_DIG', 'FLT_MAX', 'DBL_MAX', 'LDBL_MAX', 'FLT_MAX_EXP', 'DBL_MAX_EXP',
+ 'LDBL_MAX_EXP', 'FLT_MIN', 'DBL_MIN', 'LDBL_MIN', 'FLT_MIN_EXP', 'DBL_MIN_EXP',
+ 'LDBL_MIN_EXP', 'CHAR_BIT', 'CHAR_MAX', 'CHAR_MIN', 'SCHAR_MAX', 'SCHAR_MIN',
+ 'UCHAR_MAX', 'SHRT_MAX', 'SHRT_MIN', 'USHRT_MAX', 'INT_MAX', 'INT_MIN',
+ 'UINT_MAX', 'LONG_MAX', 'LONG_MIN', 'ULONG_MAX', 'HUGE_VAL', 'SIGABRT',
+ 'SIGFPE', 'SIGILL', 'SIGINT', 'SIGSEGV', 'SIGTERM', 'SIG_DFL', 'SIG_ERR',
+ 'SIG_IGN', 'BUFSIZ', 'EOF', 'FILENAME_MAX', 'FOPEN_MAX', 'L_tmpnam',
+ 'SEEK_CUR', 'SEEK_END', 'SEEK_SET', 'TMP_MAX', 'stdin', 'stdout', 'stderr',
+ 'EXIT_FAILURE', 'EXIT_SUCCESS', 'RAND_MAX', 'CLOCKS_PER_SEC',
+ // Mac-specific constants:
+ 'kCFAllocatorDefault'
+ ),
+ 3 => array(
+ 'printf', 'fprintf', 'snprintf', 'sprintf', 'assert',
+ 'isalnum', 'isalpha', 'isdigit', 'iscntrl', 'isgraph', 'islower', 'isprint',
+ 'ispunct', 'isspace', 'isupper', 'isxdigit', 'tolower', 'toupper',
+ 'exp', 'log', 'log10', 'pow', 'sqrt', 'ceil', 'floor', 'fabs', 'ldexp',
+ 'frexp', 'modf', 'fmod', 'sin', 'cos', 'tan', 'asin', 'acos', 'atan', 'atan2',
+ 'sinh', 'cosh', 'tanh', 'setjmp', 'longjmp',
+ 'va_start', 'va_arg', 'va_end', 'offsetof', 'sizeof', 'fopen', 'freopen',
+ 'fflush', 'fclose', 'remove', 'rename', 'tmpfile', 'tmpname', 'setvbuf',
+ 'setbuf', 'vfprintf', 'vprintf', 'vsprintf', 'fscanf', 'scanf', 'sscanf',
+ 'fgetc', 'fgets', 'fputc', 'fputs', 'getc', 'getchar', 'gets', 'putc',
+ 'putchar', 'puts', 'ungetc', 'fread', 'fwrite', 'fseek', 'ftell', 'rewind',
+ 'fgetpos', 'fsetpos', 'clearerr', 'feof', 'ferror', 'perror', 'abs', 'labs',
+ 'div', 'ldiv', 'atof', 'atoi', 'atol', 'strtod', 'strtol', 'strtoul', 'calloc',
+ 'malloc', 'realloc', 'free', 'abort', 'exit', 'atexit', 'system', 'getenv',
+ 'bsearch', 'qsort', 'rand', 'srand', 'strcpy', 'strncpy', 'strcat', 'strncat',
+ 'strcmp', 'strncmp', 'strcoll', 'strchr', 'strrchr', 'strspn', 'strcspn',
+ 'strpbrk', 'strstr', 'strlen', 'strerror', 'strtok', 'strxfrm', 'memcpy',
+ 'memmove', 'memcmp', 'memchr', 'memset', 'clock', 'time', 'difftime', 'mktime',
+ 'asctime', 'ctime', 'gmtime', 'localtime', 'strftime'
+ ),
+ 4 => array(
+ 'auto', 'char', 'const', 'double', 'float', 'int', 'long',
+ 'register', 'short', 'signed', 'static', 'string', 'struct',
+ 'typedef', 'union', 'unsigned', 'void', 'volatile', 'extern', 'jmp_buf',
+ 'signal', 'raise', 'va_list', 'ptrdiff_t', 'size_t', 'FILE', 'fpos_t',
+ 'div_t', 'ldiv_t', 'clock_t', 'time_t', 'tm',
+ // Mac-specific types:
+ 'CFArrayRef', 'CFDictionaryRef', 'CFMutableDictionaryRef', 'CFBundleRef', 'CFSetRef', 'CFStringRef',
+ 'CFURLRef', 'CFLocaleRef', 'CFDateFormatterRef', 'CFNumberFormatterRef', 'CFPropertyListRef',
+ 'CFTreeRef', 'CFWriteStreamRef', 'CFCharacterSetRef', 'CFMutableStringRef', 'CFNotificationRef',
+ 'CFReadStreamRef', 'CFNull', 'CFAllocatorRef', 'CFBagRef', 'CFBinaryHeapRef',
+ 'CFBitVectorRef', 'CFBooleanRef', 'CFDataRef', 'CFDateRef', 'CFMachPortRef', 'CFMessagePortRef',
+ 'CFMutableArrayRef', 'CFMutableBagRef', 'CFMutableBitVectorRef', 'CFMutableCharacterSetRef',
+ 'CFMutableDataRef', 'CFMutableSetRef', 'CFNumberRef', 'CFPlugInRef', 'CFPlugInInstanceRef',
+ 'CFRunLoopRef', 'CFRunLoopObserverRef', 'CFRunLoopSourceRef', 'CFRunLoopTimerRef', 'CFSocketRef',
+ 'CFTimeZoneRef', 'CFTypeRef', 'CFUserNotificationRef', 'CFUUIDRef', 'CFXMLNodeRef', 'CFXMLParserRef',
+ 'CFXMLTreeRef'
+ ),
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '{', '}', '[', ']', '=', '+', '-', '*', '/', '!', '%', '^', '&', ':'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ 2 => true,
+ 3 => true,
+ 4 => true,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #0000ff;',
+ 2 => 'color: #0000ff;',
+ 3 => 'color: #0000dd;',
+ 4 => 'color: #0000ff;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #ff0000;',
+ 2 => 'color: #339900;',
+ 'MULTI' => 'color: #ff0000; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;',
+ 1 => 'color: #000099; font-weight: bold;',
+ 2 => 'color: #660099; font-weight: bold;',
+ 3 => 'color: #660099; font-weight: bold;',
+ 4 => 'color: #660099; font-weight: bold;',
+ 5 => 'color: #006699; font-weight: bold;',
+ 'HARD' => '',
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #666666;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #0000dd;',
+ GESHI_NUMBER_BIN_PREFIX_0B => 'color: #208080;',
+ GESHI_NUMBER_OCT_PREFIX => 'color: #208080;',
+ GESHI_NUMBER_HEX_PREFIX => 'color: #208080;',
+ GESHI_NUMBER_FLT_SCI_SHORT => 'color:#800080;',
+ GESHI_NUMBER_FLT_SCI_ZERO => 'color:#800080;',
+ GESHI_NUMBER_FLT_NONSCI_F => 'color:#800080;',
+ GESHI_NUMBER_FLT_NONSCI => 'color:#800080;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #00eeff;',
+ 2 => 'color: #00eeff;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => 'http://www.opengroup.org/onlinepubs/009695399/functions/{FNAMEL}.html',
+ 4 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.',
+ 2 => '::'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 4
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/caddcl.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/caddcl.php
new file mode 100644
index 000000000..12e1d3b75
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/caddcl.php
@@ -0,0 +1,126 @@
+<?php
+/*************************************************************************************
+ * caddcl.php
+ * ----------
+ * Author: Roberto Rossi (rsoftware@altervista.org)
+ * Copyright: (c) 2004 Roberto Rossi (http://rsoftware.altervista.org), Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/08/30
+ *
+ * CAD DCL (Dialog Control Language) language file for GeSHi.
+ *
+ * DCL for AutoCAD 12 or later and IntelliCAD all versions.
+ *
+ * CHANGES
+ * -------
+ * 2004/11/27 (1.0.1)
+ * - Added support for multiple object splitters
+ * 2004/1!/27 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'CAD DCL',
+ 'COMMENT_SINGLE' => array(1 => '//'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'boxed_column','boxed_radio_column','boxed_radio_row','boxed_row',
+ 'column','concatenation','button','dialog','edit_box','image','image_button',
+ 'errtile','list_box','ok_cancel','ok_cancel_help','ok_cancel_help_errtile',
+ 'ok_cancel_help_info','ok_only','paragraph','popup_list','radio_button',
+ 'radio_column','radio_row','row','slider','spacer','spacer_0','spacer_1','text',
+ 'text_part','toggle',
+ 'action','alignment','allow_accept','aspect_ratio','big_increment',
+ 'children_alignment','children_fixed_height',
+ 'children_fixed_width','color',
+ 'edit_limit','edit_width','fixed_height','fixed_width',
+ 'height','initial_focus','is_cancel','is_default',
+ 'is_enabled','is_tab_stop','is-bold','key','label','layout','list',
+ 'max_value','min_value','mnemonic','multiple_select','password_char',
+ 'small_increment','tabs','tab_truncate','value','width',
+ 'false','true','left','right','centered','top','bottom',
+ 'dialog_line','dialog_foreground','dialog_background',
+ 'graphics_background','black','red','yellow','green','cyan',
+ 'blue','magenta','whitegraphics_foreground',
+ 'horizontal','vertical'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '{', '}', '[', ']', '=', '+', '-', '*', '/', '!', '%', '^', '&', ':'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #b1b100;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080; font-style: italic;',
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/cadlisp.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/cadlisp.php
new file mode 100644
index 000000000..c537370d5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/cadlisp.php
@@ -0,0 +1,186 @@
+<?php
+/*************************************************************************************
+ * cadlisp.php
+ * -----------
+ * Author: Roberto Rossi (rsoftware@altervista.org)
+ * Copyright: (c) 2004 Roberto Rossi (http://rsoftware.altervista.org), Nigel McNie (http://qbnz.com/blog)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/08/30
+ *
+ * AutoCAD/IntelliCAD Lisp language file for GeSHi.
+ *
+ * For AutoCAD V.12..2005 and IntelliCAD all versions.
+ *
+ * CHANGES
+ * -------
+ * 2004/11/27 (1.0.1)
+ * - Added support for multiple object splitters
+ * 2004/10/27 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'CAD Lisp',
+ 'COMMENT_SINGLE' => array(1 => ";"),
+ 'COMMENT_MULTI' => array(";|" => "|;"),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'abs','acad_colordlg','acad_helpdlg','acad_strlsort','action_tile',
+ 'add_list','alert','alloc','and','angle','angtof','angtos','append','apply',
+ 'arx','arxload','arxunload','ascii','assoc','atan','atof','atoi','atom',
+ 'atoms-family','autoarxload','autoload','Boole','boundp','caddr',
+ 'cadr','car','cdr','chr','client_data_tile','close','command','cond',
+ 'cons','cos','cvunit','defun','defun-q','defun-q-list-ref',
+ 'defun-q-list-set','dictadd','dictnext','dictremove','dictrename',
+ 'dictsearch','dimx_tile','dimy_tile','distance','distof','done_dialog',
+ 'end_image','end_list','entdel','entget','entlast','entmake',
+ 'entmakex','entmod','entnext','entsel','entupd','eq','equal','eval','exit',
+ 'exp','expand','expt','fill_image','findfile','fix','float','foreach','function',
+ 'gc','gcd','get_attr','get_tile','getangle','getcfg','getcname','getcorner',
+ 'getdist','getenv','getfiled','getint','getkword','getorient','getpoint',
+ 'getreal','getstring','getvar','graphscr','grclear','grdraw','grread','grtext',
+ 'grvecs','handent','help','if','initdia','initget','inters','itoa','lambda','last',
+ 'layoutlist','length','list','listp','load','load_dialog','log','logand','logior',
+ 'lsh','mapcar','max','mem','member','menucmd','menugroup','min','minusp','mode_tile',
+ 'namedobjdict','nentsel','nentselp','new_dialog','nil','not','nth','null',
+ 'numberp','open','or','osnap','polar','prin1','princ','print','progn','prompt',
+ 'quit','quote','read','read-char','read-line','redraw','regapp','rem','repeat',
+ 'reverse','rtos','set','set_tile','setcfg','setenv','setfunhelp','setq','setvar',
+ 'setview','sin','slide_image','snvalid','sqrt','ssadd','ssdel','ssget','ssgetfirst',
+ 'sslength','ssmemb','ssname','ssnamex','sssetfirst','start_dialog','start_image',
+ 'start_list','startapp','strcase','strcat','strlen','subst','substr','t','tablet',
+ 'tblnext','tblobjname','tblsearch','term_dialog','terpri','textbox','textpage',
+ 'textscr','trace','trans','type','unload_dialog','untrace','vector_image','ver',
+ 'vports','wcmatch','while','write-char','write-line','xdroom','xdsize','zerop',
+ 'vl-acad-defun','vl-acad-undefun','vl-arx-import','vlax-3D-point',
+ 'vlax-add-cmd','vlax-create-object','vlax-curve-getArea',
+ 'vlax-curve-getClosestPointTo','vlax-curve-getClosestPointToProjection',
+ 'vlax-curve-getDistAtParam','vlax-curve-getDistAtPoint',
+ 'vlax-curve-getEndParam','vlax-curve-getEndPoint',
+ 'vlax-curve-getFirstDeriv','vlax-curve-getParamAtDist',
+ 'vlax-curve-getParamAtPoint','vlax-curve-getPointAtDist',
+ 'vlax-curve-getPointAtParam','vlax-curve-getSecondDeriv',
+ 'vlax-curve-getStartParam','vlax-curve-getStartPoint',
+ 'vlax-curve-isClosed','vlax-curve-isPeriodic','vlax-curve-isPlanar',
+ 'vlax-dump-object','vlax-erased-p','vlax-for','vlax-get-acad-object',
+ 'vlax-get-object','vlax-get-or-create-object','vlax-get-property',
+ 'vlax-import-type-library','vlax-invoke-method','vlax-ldata-delete',
+ 'vlax-ldata-get','vlax-ldata-list','vlax-ldata-put','vlax-ldata-test',
+ 'vlax-make-safearray','vlax-make-variant','vlax-map-collection',
+ 'vlax-method-applicable-p','vlax-object-released-p','vlax-product-key',
+ 'vlax-property-available-p','vlax-put-property','vlax-read-enabled-p',
+ 'vlax-release-object','vlax-remove-cmd','vlax-safearray-fill',
+ 'vlax-safearray-get-dim','vlax-safearray-get-element',
+ 'vlax-safearray-get-l-bound','vlax-safearray-get-u-bound',
+ 'vlax-safearray-put-element','vlax-safearray-type','vlax-tmatrix',
+ 'vlax-typeinfo-available-p','vlax-variant-change-type',
+ 'vlax-variant-type','vlax-variant-value','vlax-write-enabled-p',
+ 'vl-bb-ref','vl-bb-set','vl-catch-all-apply','vl-catch-all-error-message',
+ 'vl-catch-all-error-p','vl-cmdf','vl-consp','vl-directory-files','vl-doc-export',
+ 'vl-doc-import','vl-doc-ref','vl-doc-set','vl-every','vl-exit-with-error',
+ 'vl-exit-with-value','vl-file-copy','vl-file-delete','vl-file-directory-p',
+ 'vl-filename-base','vl-filename-directory','vl-filename-extension',
+ 'vl-filename-mktemp','vl-file-rename','vl-file-size','vl-file-systime',
+ 'vl-get-resource','vlisp-compile','vl-list-exported-functions',
+ 'vl-list-length','vl-list-loaded-vlx','vl-load-all','vl-load-com',
+ 'vl-load-reactors','vl-member-if','vl-member-if-not','vl-position',
+ 'vl-prin1-to-string','vl-princ-to-string','vl-propagate','vlr-acdb-reactor',
+ 'vlr-add','vlr-added-p','vlr-beep-reaction','vlr-command-reactor',
+ 'vlr-current-reaction-name','vlr-data','vlr-data-set',
+ 'vlr-deepclone-reactor','vlr-docmanager-reactor','vlr-dwg-reactor',
+ 'vlr-dxf-reactor','vlr-editor-reactor','vl-registry-delete',
+ 'vl-registry-descendents','vl-registry-read','vl-registry-write',
+ 'vl-remove','vl-remove-if','vl-remove-if-not','vlr-insert-reactor',
+ 'vlr-linker-reactor','vlr-lisp-reactor','vlr-miscellaneous-reactor',
+ 'vlr-mouse-reactor','vlr-notification','vlr-object-reactor',
+ 'vlr-owner-add','vlr-owner-remove','vlr-owners','vlr-pers','vlr-pers-list',
+ 'vlr-pers-p','vlr-pers-release','vlr-reaction-names','vlr-reactions',
+ 'vlr-reaction-set','vlr-reactors','vlr-remove','vlr-remove-all',
+ 'vlr-set-notification','vlr-sysvar-reactor','vlr-toolbar-reactor',
+ 'vlr-trace-reaction','vlr-type','vlr-types','vlr-undo-reactor',
+ 'vlr-wblock-reactor','vlr-window-reactor','vlr-xref-reactor',
+ 'vl-some','vl-sort','vl-sort-i','vl-string-elt','vl-string-left-trim',
+ 'vl-string-mismatch','vl-string-position','vl-string-right-trim',
+ 'vl-string-search','vl-string-subst','vl-string-translate','vl-string-trim',
+ 'vl-symbol-name','vl-symbolp','vl-symbol-value','vl-unload-vlx','vl-vbaload',
+ 'vl-vbarun','vl-vlx-loaded-p'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '{', '}', '[', ']', '!', '%', '^', '&', '/','+','-','*','=','<','>'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #b1b100;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080; font-style: italic;',
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/cfdg.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/cfdg.php
new file mode 100644
index 000000000..5091ffa4c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/cfdg.php
@@ -0,0 +1,124 @@
+<?php
+/*************************************************************************************
+ * cfdg.php
+ * --------
+ * Author: John Horigan <john@glyphic.com>
+ * Copyright: (c) 2006 John Horigan http://www.ozonehouse.com/john/
+ * Release Version: 1.0.8.4
+ * Date Started: 2006/03/11
+ *
+ * CFDG language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2006/03/11 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2006/03/11)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'CFDG',
+ 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'include', 'startshape', 'rule', 'background'
+ ),
+ 2 => array(
+ 'SQUARE', 'CIRCLE', 'TRIANGLE',
+ ),
+ 3 => array(
+ 'b','brightness','h','hue','sat','saturation',
+ 'a','alpha','x','y','z','s','size',
+ 'r','rotate','f','flip','skew','xml_set_object'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '[', ']', '{', '}', '*', '|'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #717100;',
+ 2 => 'color: #000000; font-weight: bold;',
+ 3 => 'color: #006666;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080; font-style: italic;',
+ 2 => 'color: #808080; font-style: italic;',
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #006600;',
+ 2 => 'color: #006600;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ 0 => '',
+ 1 => '',
+ 2 => '',
+ 3 => ''
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/cfm.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/cfm.php
new file mode 100644
index 000000000..ac81695ab
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/cfm.php
@@ -0,0 +1,299 @@
+<?php
+/*************************************************************************************
+ * cfm.php
+ * -------
+ * Author: Diego
+ * Copyright: (c) 2006 Diego
+ * Release Version: 1.0.8.4
+ * Date Started: 2006/02/25
+ *
+ * ColdFusion language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2006/02/25 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2006/02/25)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'ColdFusion',
+ 'COMMENT_SINGLE' => array(1 => '//'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ /* CFM Tags */
+ 1 => array(
+ 'cfabort', 'cfapplet', 'cfapplication', 'cfargument', 'cfassociate',
+ 'cfbreak', 'cfcache', 'cfcase', 'cfcatch', 'cfchart', 'cfchartdata',
+ 'cfchartseries', 'cfcol', 'cfcollection', 'cfcomponent',
+ 'cfcontent', 'cfcookie', 'cfdefaultcase', 'cfdirectory',
+ 'cfdocument', 'cfdocumentitem', 'cfdocumentsection', 'cfdump',
+ 'cfelse', 'cfelseif', 'cferror', 'cfexecute', 'cfexit', 'cffile',
+ 'cfflush', 'cfform', 'cfformgroup', 'cfformitem', 'cfftp',
+ 'cffunction', 'cfgrid', 'cfgridcolumn', 'cfgridrow', 'cfgridupdate',
+ 'cfheader', 'cfhtmlhead', 'cfhttp', 'cfhttpparam', 'cfif',
+ 'cfimport', 'cfinclude', 'cfindex', 'cfinput', 'cfinsert',
+ 'cfinvoke', 'cfinvokeargument', 'cfldap', 'cflocation', 'cflock',
+ 'cflog', 'cflogin', 'cfloginuser', 'cflogout', 'cfloop', 'cfmail',
+ 'cfmailparam', 'cfmailpart', 'cfmodule', 'cfNTauthenticate',
+ 'cfobject', 'cfobjectcache', 'cfoutput', 'cfparam', 'cfpop',
+ 'cfprocessingdirective', 'cfprocparam',
+ 'cfprocresult', 'cfproperty', 'cfquery', 'cfqueryparam',
+ 'cfregistry', 'cfreport', 'cfreportparam', 'cfrethrow', 'cfreturn',
+ 'cfsavecontent', 'cfschedule', 'cfscript', 'cfsearch', 'cfselect',
+ 'cfset', 'cfsetting', 'cfsilent', 'cfstoredproc',
+ 'cfswitch', 'cftable', 'cftextarea', 'cfthrow', 'cftimer',
+ 'cftrace', 'cftransaction', 'cftree', 'cftreeitem', 'cftry',
+ 'cfupdate', 'cfwddx'
+ ),
+ /* HTML Tags */
+ 2 => array(
+ 'a', 'abbr', 'acronym', 'address', 'applet',
+
+ 'base', 'basefont', 'bdo', 'big', 'blockquote', 'body', 'br', 'button', 'b',
+
+ 'caption', 'center', 'cite', 'code', 'colgroup', 'col',
+
+ 'dd', 'del', 'dfn', 'dir', 'div', 'dl', 'dt',
+
+ 'em',
+
+ 'fieldset', 'font', 'form', 'frame', 'frameset',
+
+ 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'hr', 'html',
+
+ 'iframe', 'ilayer', 'img', 'input', 'ins', 'isindex', 'i',
+
+ 'kbd',
+
+ 'label', 'legend', 'link', 'li',
+
+ 'map', 'meta',
+
+ 'noframes', 'noscript',
+
+ 'object', 'ol', 'optgroup', 'option',
+
+ 'param', 'pre', 'p',
+
+ 'q',
+
+ 'samp', 'script', 'select', 'small', 'span', 'strike', 'strong', 'style', 'sub', 'sup', 's',
+
+ 'table', 'tbody', 'td', 'textarea', 'text', 'tfoot', 'thead', 'th', 'title', 'tr', 'tt',
+
+ 'ul', 'u',
+
+ 'var',
+ ),
+ /* HTML attributes */
+ 3 => array(
+ 'abbr', 'accept-charset', 'accept', 'accesskey', 'action', 'align', 'alink', 'alt', 'archive', 'axis',
+ 'background', 'bgcolor', 'border',
+ 'cellpadding', 'cellspacing', 'char', 'charoff', 'charset', 'checked', 'cite', 'class', 'classid', 'clear', 'code', 'codebase', 'codetype', 'color', 'cols', 'colspan', 'compact', 'content', 'coords',
+ 'data', 'datetime', 'declare', 'defer', 'dir', 'disabled',
+ 'enctype',
+ 'face', 'for', 'frame', 'frameborder',
+ 'headers', 'height', 'href', 'hreflang', 'hspace', 'http-equiv',
+ 'id', 'ismap',
+ 'label', 'lang', 'language', 'link', 'longdesc',
+ 'marginheight', 'marginwidth', 'maxlength', 'media', 'method', 'multiple',
+ 'name', 'nohref', 'noresize', 'noshade', 'nowrap',
+ 'object', 'onblur', 'onchange', 'onclick', 'ondblclick', 'onfocus', 'onkeydown', 'onkeypress', 'onkeyup', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onreset', 'onselect', 'onsubmit', 'onunload',
+ 'profile', 'prompt',
+ 'readonly', 'rel', 'rev', 'rowspan', 'rows', 'rules',
+ 'scheme', 'scope', 'scrolling', 'selected', 'shape', 'size', 'span', 'src', 'standby', 'start', 'style', 'summary',
+ 'tabindex', 'target', 'text', 'title', 'type',
+ 'usemap',
+ 'valign', 'value', 'valuetype', 'version', 'vlink', 'vspace',
+ 'width'
+ ),
+ /* CFM Script delimeters */
+ 4 => array(
+ 'var', 'function', 'while', 'if','else'
+ ),
+ /* CFM Functions */
+ 5 => array(
+ 'Abs', 'GetFunctionList', 'LSTimeFormat','ACos','GetGatewayHelper','LTrim','AddSOAPRequestHeader','GetHttpRequestData',
+ 'Max','AddSOAPResponseHeader','GetHttpTimeString','Mid','ArrayAppend','GetLocale','Min','ArrayAvg','GetLocaleDisplayName',
+ 'Minute','ArrayClear','GetMetaData','Month','ArrayDeleteAt','GetMetricData','MonthAsString','ArrayInsertAt','GetPageContext',
+ 'Now','ArrayIsEmpty','GetProfileSections','NumberFormat','ArrayLen','GetProfileString','ParagraphFormat','ArrayMax',
+ 'GetLocalHostIP','ParseDateTime','ArrayMin','GetSOAPRequest','Pi','ArrayNew','GetSOAPRequestHeader','PreserveSingleQuotes',
+ 'ArrayPrepend','GetSOAPResponse','Quarter','ArrayResize','GetSOAPResponseHeader','QueryAddColumn','ArraySet',
+ 'GetTempDirectory','QueryAddRow','ArraySort','QueryNew','ArraySum','GetTempFile','QuerySetCell',
+ 'ArraySwap','GetTickCount','QuotedValueList','ArrayToList','GetTimeZoneInfo','Rand','Asc','GetToken','Randomize',
+ 'ASin','Hash','RandRange','Atn','Hour','REFind','BinaryDecode','HTMLCodeFormat','REFindNoCase','BinaryEncode',
+ 'HTMLEditFormat','ReleaseComObject','BitAnd','IIf','RemoveChars','BitMaskClear','IncrementValue','RepeatString',
+ 'BitMaskRead','InputBaseN','Replace','BitMaskSet','Insert','ReplaceList','BitNot','Int','ReplaceNoCase','BitOr',
+ 'IsArray','REReplace','BitSHLN','IsBinary','REReplaceNoCase','BitSHRN','IsBoolean','Reverse','BitXor','IsCustomFunction',
+ 'Right','Ceiling','IsDate','RJustify','CharsetDecode','IsDebugMode','Round','CharsetEncode','IsDefined','RTrim',
+ 'Chr','IsLeapYear','Second','CJustify','IsLocalHost','SendGatewayMessage','Compare','IsNumeric','SetEncoding',
+ 'CompareNoCase','IsNumericDate','SetLocale','Cos','IsObject','SetProfileString','CreateDate','IsQuery','SetVariable',
+ 'CreateDateTime','IsSimpleValue','Sgn','CreateObject','IsSOAPRequest','Sin','CreateODBCDate','IsStruct','SpanExcluding',
+ 'CreateODBCDateTime','IsUserInRole','SpanIncluding','CreateODBCTime','IsValid','Sqr','CreateTime','IsWDDX','StripCR',
+ 'CreateTimeSpan','IsXML','StructAppend','CreateUUID','IsXmlAttribute','StructClear','DateAdd','IsXmlDoc','StructCopy',
+ 'DateCompare','IsXmlElem','StructCount','DateConvert','IsXmlNode','StructDelete','DateDiff','IsXmlRoot','StructFind',
+ 'DateFormat','JavaCast','StructFindKey','DatePart','JSStringFormat','StructFindValue','Day','LCase','StructGet',
+ 'DayOfWeek','Left','StructInsert','DayOfWeekAsString','Len','StructIsEmpty','DayOfYear','ListAppend','StructKeyArray',
+ 'DaysInMonth','ListChangeDelims','StructKeyExists','DaysInYear','ListContains','StructKeyList','DE','ListContainsNoCase',
+ 'StructNew','DecimalFormat','ListDeleteAt','StructSort','DecrementValue','ListFind','StructUpdate','Decrypt','ListFindNoCase',
+ 'Tan','DecryptBinary','ListFirst','TimeFormat','DeleteClientVariable','ListGetAt','ToBase64','DirectoryExists',
+ 'ListInsertAt','ToBinary','DollarFormat','ListLast','ToScript','Duplicate','ListLen','ToString','Encrypt','ListPrepend',
+ 'Trim','EncryptBinary','ListQualify','UCase','Evaluate','ListRest','URLDecode','Exp','ListSetAt','URLEncodedFormat',
+ 'ExpandPath','ListSort','URLSessionFormat','FileExists','ListToArray','Val','Find','ListValueCount','ValueList',
+ 'FindNoCase','ListValueCountNoCase','Week','FindOneOf','LJustify','Wrap','FirstDayOfMonth','Log','WriteOutput',
+ 'Fix','Log10','XmlChildPos','FormatBaseN','LSCurrencyFormat','XmlElemNew','GetAuthUser','LSDateFormat','XmlFormat',
+ 'GetBaseTagData','LSEuroCurrencyFormat','XmlGetNodeType','GetBaseTagList','LSIsCurrency','XmlNew','GetBaseTemplatePath',
+ 'LSIsDate','XmlParse','GetClientVariablesList','LSIsNumeric','XmlSearch','GetCurrentTemplatePath','LSNumberFormat',
+ 'XmlTransform','GetDirectoryFromPath','LSParseCurrency','XmlValidate','GetEncoding','LSParseDateTime','Year',
+ 'GetException','LSParseEuroCurrency','YesNoFormat','GetFileFromPath','LSParseNumber'
+ ),
+ /* CFM Attributes */
+ 6 => array(
+ 'dbtype','connectstring','datasource','username','password','query','delimeter','description','required','hint','default','access','from','to','list','index'
+ ),
+ 7 => array(
+ 'EQ', 'GT', 'LT', 'GTE', 'LTE', 'IS', 'LIKE', 'NEQ'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '/', '=', '{', '}', '(', ')', '[', ']', '<', '>', '&'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false,
+ 6 => false,
+ 7 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #990000; font-weight: bold;',
+ 2 => 'color: #000000; font-weight: bold;',
+ 3 => 'color: #0000FF;',
+ 4 => 'color: #000000; font-weight: bold;',
+ 5 => 'color: #0000FF;',
+ 6 => 'color: #0000FF;',
+ 7 => 'color: #0000FF;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080; font-style: italic;',
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #0000FF;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #009900;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #FF0000;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #0000FF;'
+ ),
+ 'SCRIPT' => array(
+ 0 => 'color: #808080; font-style: italic;',
+ 1 => 'color: #00bbdd;',
+ 2 => 'color: #0000FF;',
+ 3 => 'color: #000099;',
+ 4 => 'color: #333333;',
+ 5 => 'color: #333333;'
+ ),
+ 'REGEXPS' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => 'http://december.com/html/4/element/{FNAMEL}.html',
+ 3 => '',
+ 4 => '',
+ 5 => '',
+ 6 => '',
+ 7 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_ALWAYS,
+ 'SCRIPT_DELIMITERS' => array(
+ 0 => array(
+ '<!--' => '-->'
+ ),
+ 1 => array(
+ '<!DOCTYPE' => '>'
+ ),
+ 2 => "/(?!<#)(?:(?:##)*)(#)[a-zA-Z0-9_\.\(\)]+(#)/",
+ 3 => array(
+ '<cfscript>' => '</cfscript>'
+ ),
+ 4 => array(
+ '<' => '>'
+ ),
+ 5 => '/((?!<!)<)(?:"[^"]*"|\'[^\']*\'|(?R)|[^">])+?(>)/si'
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ 0 => false,
+ 1 => false,
+ 2 => true,
+ 3 => true,
+ 4 => true,
+ 5 => true
+ ),
+ 'PARSER_CONTROL' => array(
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'DISALLOWED_BEFORE' => '(?<=&lt;|&lt;\/)',
+ 'DISALLOWED_AFTER' => '(?=\s|\/|&gt;)',
+ ),
+ 2 => array(
+ 'DISALLOWED_BEFORE' => '(?<=&lt;|&lt;\/)',
+ 'DISALLOWED_AFTER' => '(?=\s|\/|&gt;)',
+ ),
+ 3 => array(
+ 'DISALLOWED_BEFORE' => '(?<![a-zA-Z0-9\$_\|\#>|^])', // allow ; before keywords
+ 'DISALLOWED_AFTER' => '(?![a-zA-Z0-9_\|%\\-])', // allow & after keywords
+ ),
+ 7 => array(
+ 'DISALLOWED_BEFORE' => '(?<![a-zA-Z0-9\$_\|\#>&|^])', // allow ; before keywords
+ 'DISALLOWED_AFTER' => '(?![a-zA-Z0-9_\|%\\-])', // allow & after keywords
+ )
+ )
+ )
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/cil.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/cil.php
new file mode 100644
index 000000000..994f86316
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/cil.php
@@ -0,0 +1,196 @@
+<?php
+/*************************************************************************************
+ * cil.php
+ * --------
+ * Author: Marcus Griep (neoeinstein+GeSHi@gmail.com)
+ * Copyright: (c) 2007 Marcus Griep (http://www.xpdm.us)
+ * Release Version: 1.0.8.4
+ * Date Started: 2007/10/24
+ *
+ * CIL (Common Intermediate Language) language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2004/10/24 (1.0.8)
+ * - First Release
+ *
+ * TODO (updated 2007/10/24)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'CIL',
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'COMMENT_SINGLE' => array('//'),
+ 'COMMENT_MULTI' => array(),
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(//Dotted
+ '.zeroinit', '.vtfixup', '.vtentry', '.vtable', '.ver', '.try', '.subsystem', '.size', '.set', '.removeon',
+ '.publickeytoken', '.publickey', '.property', '.permissionset', '.permission', '.pdirect', '.param', '.pack',
+ '.override', '.other', '.namespace', '.mresource', '.module', '.method', '.maxstack', '.manifestres', '.locals',
+ '.localized', '.locale', '.line', '.language', '.import', '.imagebase', '.hash', '.get', '.fire', '.file', '.field',
+ '.export', '.event', '.entrypoint', '.emitbyte', '.data', '.custom', '.culture', '.ctor', '.corflags', '.class',
+ '.cctor', '.assembly', '.addon'
+ ),
+ 2 => array(//Attributes
+ 'wrapper', 'with', 'winapi', 'virtual', 'vector', 'vararg', 'value', 'userdefined', 'unused', 'unmanagedexp',
+ 'unmanaged', 'unicode', 'to', 'tls', 'thiscall', 'synchronized', 'struct', 'strict', 'storage', 'stdcall',
+ 'static', 'specialname', 'special', 'serializable', 'sequential', 'sealed', 'runtime', 'rtspecialname', 'request',
+ 'reqsecobj', 'reqrefuse', 'reqopt', 'reqmin', 'record', 'public', 'privatescope', 'private', 'preservesig',
+ 'prejitgrant', 'prejitdeny', 'platformapi', 'pinvokeimpl', 'pinned', 'permitonly', 'out', 'optil', 'opt',
+ 'notserialized', 'notremotable', 'not_in_gc_heap', 'noprocess', 'noncaslinkdemand', 'noncasinheritance',
+ 'noncasdemand', 'nometadata', 'nomangle', 'nomachine', 'noinlining', 'noappdomain', 'newslot', 'nested', 'native',
+ 'modreq', 'modopt', 'marshal', 'managed', 'literal', 'linkcheck', 'lcid', 'lasterr', 'internalcall', 'interface',
+ 'instance', 'initonly', 'init', 'inheritcheck', 'in', 'import', 'implicitres', 'implicitcom', 'implements',
+ 'illegal', 'il', 'hidebysig', 'handler', 'fromunmanaged', 'forwardref', 'fixed', 'finally', 'final', 'filter',
+ 'filetime', 'field', 'fault', 'fastcall', 'famorassem', 'family', 'famandassem', 'extern', 'extends', 'explicit',
+ 'error', 'enum', 'endmac', 'deny', 'demand', 'default', 'custom', 'compilercontrolled', 'clsid', 'class', 'cil',
+ 'cf', 'cdecl', 'catch', 'beforefieldinit', 'autochar', 'auto', 'at', 'assert', 'assembly', 'as', 'any', 'ansi',
+ 'alignment', 'algorithm', 'abstract'
+ ),
+ 3 => array(//Types
+ 'wchar', 'void', 'variant', 'unsigned', 'valuetype', 'typedref', 'tbstr', 'sysstring', 'syschar', 'string',
+ 'streamed_object', 'stream', 'stored_object', 'safearray', 'objectref', 'object', 'nullref', 'method', 'lpwstr',
+ 'lpvoid', 'lptstr', 'lpstruct', 'lpstr', 'iunknown', 'int64', 'int32', 'int16', 'int8', 'int', 'idispatch',
+ 'hresult', 'float64', 'float32', 'float', 'decimal', 'date', 'currency', 'char', 'carray', 'byvalstr',
+ 'bytearray', 'boxed', 'bool', 'blob_object', 'blob', 'array'
+ ),
+ 4 => array(//Prefix
+ 'volatile', 'unaligned', 'tail', 'readonly', 'no', 'constrained'
+ ),
+ 5 => array(//Suffix
+ 'un', 'u8', 'u4', 'u2', 'u1', 'u', 's', 'ref', 'r8', 'r4', 'm1', 'i8', 'i4', 'i2', 'i1', 'i'#, '.8', '.7', '.6', '.5', '.4', '.3', '.2', '.1', '.0'
+ ),
+ 6 => array(//Base
+ 'xor', 'switch', 'sub', 'stloc',
+ 'stind', 'starg',
+ 'shr', 'shl', 'ret', 'rem', 'pop', 'or', 'not', 'nop', 'neg', 'mul',
+ 'localloc', 'leave', 'ldnull', 'ldloca',
+ 'ldloc', 'ldind', 'ldftn', 'ldc', 'ldarga',
+ 'ldarg', 'jmp', 'initblk', 'endfinally', 'endfilter',
+ 'endfault', 'dup', 'div', 'cpblk', 'conv', 'clt', 'ckfinite', 'cgt', 'ceq', 'calli',
+ 'call', 'brzero', 'brtrue', 'brnull', 'brinst',
+ 'brfalse', 'break', 'br', 'bne', 'blt', 'ble', 'bgt', 'bge', 'beq', 'arglist',
+ 'and', 'add'
+ ),
+ 7 => array(//Object
+ 'unbox.any', 'unbox', 'throw', 'stsfld', 'stobj', 'stfld', 'stelem', 'sizeof', 'rethrow', 'refanyval', 'refanytype', 'newobj',
+ 'newarr', 'mkrefany', 'ldvirtftn', 'ldtoken', 'ldstr', 'ldsflda', 'ldsfld', 'ldobj', 'ldlen', 'ldflda', 'ldfld',
+ 'ldelema', 'ldelem', 'isinst', 'initobj', 'cpobj', 'castclass',
+ 'callvirt', 'callmostderived', 'box'
+ ),
+ 8 => array(//Other
+ 'prefixref', 'prefix7', 'prefix6', 'prefix5', 'prefix4', 'prefix3', 'prefix2', 'prefix1', 'prefix0'
+ ),
+ 9 => array(//Literal
+ 'true', 'null', 'false'
+ ),
+ 10 => array(//Comment-like
+ '#line', '^THE_END^'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '[', ']', '{', '}', '!', '!!'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ 2 => true,
+ 3 => true,
+ 4 => true,
+ 5 => true,
+ 6 => true,
+ 7 => true,
+ 8 => true,
+ 9 => true,
+ 10 => true
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color:maroon;font-weight:bold;',
+ 2 => 'color:blue;font-weight:bold;',
+ 3 => 'color:purple;font-weight:bold;',
+ 4 => 'color:teal;',
+ 5 => 'color:blue;',
+ 6 => 'color:blue;',
+ 7 => 'color:blue;',
+ 8 => 'color:blue;',
+ 9 => 'color:00008B',
+ 10 => 'color:gray'
+ ),
+ 'COMMENTS' => array(
+ 0 => 'color:gray;font-style:italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #008000; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #006400;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #008000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #00008B;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #000033;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #006400;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color:blue;'
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => '',
+ 5 => '',
+ 6 => '',
+ 7 => '',
+ 8 => '',
+ 9 => '',
+ 10 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '::'
+ ),
+ 'REGEXPS' => array(
+ 0 => '(?<=ldc\\.i4\\.)[0-8]|(?<=(?:ldarg|ldloc|stloc)\\.)[0-3]' # Pickup the opcodes that end with integers
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 4
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/cobol.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/cobol.php
new file mode 100644
index 000000000..9adae16e3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/cobol.php
@@ -0,0 +1,244 @@
+<?php
+/*************************************************************************************
+ * cobol.php
+ * ----------
+ * Author: BenBE (BenBE@omorphia.org)
+ * Copyright: (c) 2007-2008 BenBE (http://www.omorphia.de/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2007/07/02
+ *
+ * COBOL language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ *
+ * TODO (updated 2007/07/02)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'COBOL',
+ 'COMMENT_SINGLE' => array(),
+ 'COMMENT_MULTI' => array(),
+ 'COMMENT_REGEXP' => array(1 => '/^\*.*?$/m'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"', "'"),
+ 'ESCAPE_CHAR' => '\\',
+ 'NUMBERS' =>
+ GESHI_NUMBER_INT_BASIC |
+ GESHI_NUMBER_FLT_NONSCI |
+ GESHI_NUMBER_FLT_SCI_SHORT |
+ GESHI_NUMBER_FLT_SCI_ZERO,
+ 'KEYWORDS' => array(
+ 1 => array( //Compiler Directives
+ 'ANSI', 'BLANK', 'NOBLANK', 'CALL-SHARED', 'CANCEL', 'NOCANCEL',
+ 'CHECK', 'CODE', 'NOCODE', 'COLUMNS', 'COMPACT', 'NOCOMPACT',
+ 'COMPILE', 'CONSULT', 'NOCONSULT', 'CROSSREF', 'NOCROSSREF',
+ 'DIAGNOSE-74', 'NODIAGNOSE-74', 'DIAGNOSE-85', 'NODIAGNOSE-85',
+ 'DIAGNOSEALL', 'NODIAGNOSEALL', 'ENDIF', 'ENDUNIT', 'ENV',
+ 'ERRORFILE', 'ERRORS', 'FIPS', 'NOFIPS', 'FMAP', 'HEADING', 'HEAP',
+ 'HIGHPIN', 'HIGHREQUESTERS', 'ICODE', 'NOICODE', 'IF', 'IFNOT',
+ 'INNERLIST', 'NOINNERLIST', 'INSPECT', 'NOINSPECT', 'LARGEDATA',
+ 'LD', 'LESS-CODE', 'LIBRARY', 'LINES', 'LIST', 'NOLIST', 'LMAP',
+ 'NOLMAP', 'MAIN', 'MAP', 'NOMAP', 'NLD', 'NONSTOP', 'NON-SHARED',
+ 'OPTIMIZE', 'PERFORM-TRACE', 'PORT', 'NOPORT', 'RESETTOG',
+ 'RUNNABLE', 'RUNNAMED', 'SAVE', 'SAVEABEND', 'NOSAVEABEND',
+ 'SEARCH', 'NOSEARCH', 'SECTION', 'SETTOG', 'SHARED', 'SHOWCOPY',
+ 'NOSHOWCOPY', 'SHOWFILE', 'NOSHOWFILE', 'SOURCE', 'SQL', 'NOSQL',
+ 'SQLMEM', 'SUBSET', 'SUBTYPE', 'SUPPRESS', 'NOSUPPRESS', 'SYMBOLS',
+ 'NOSYMBOLS', 'SYNTAX', 'TANDEM', 'TRAP2', 'NOTRAP2', 'TRAP2-74',
+ 'NOTRAP2-74', 'UL', 'WARN', 'NOWARN'
+ ),
+ 2 => array( //Statement Keywords
+ 'ACCEPT', 'ADD', 'TO', 'GIVING', 'CORRESPONDING', 'ALTER', 'CALL',
+ 'CHECKPOINT', 'CLOSE', 'COMPUTE', 'CONTINUE', 'COPY',
+ 'DELETE', 'DISPLAY', 'DIVIDE', 'INTO', 'REMAINDER', 'ENTER',
+ 'COBOL', 'EVALUATE', 'EXIT', 'GO', 'INITIALIZE',
+ 'TALLYING', 'REPLACING', 'CONVERTING', 'LOCKFILE', 'MERGE', 'MOVE',
+ 'MULTIPLY', 'OPEN', 'PERFORM', 'TIMES',
+ 'UNTIL', 'VARYING', 'RETURN',
+ ),
+ 3 => array( //Reserved in some contexts
+ 'ACCESS', 'ADDRESS', 'ADVANCING', 'AFTER', 'ALL',
+ 'ALPHABET', 'ALPHABETIC', 'ALPHABETIC-LOWER', 'ALPHABETIC-UPPER',
+ 'ALPHANUMERIC', 'ALPHANUMERIC-EDITED', 'ALSO', 'ALTERNATE',
+ 'AND', 'ANY', 'APPROXIMATE', 'AREA', 'AREAS', 'ASCENDING', 'ASSIGN',
+ 'AT', 'AUTHOR', 'BEFORE', 'BINARY', 'BLOCK', 'BOTTOM', 'BY',
+ 'CD', 'CF', 'CH', 'CHARACTER', 'CHARACTERS',
+ 'CHARACTER-SET', 'CLASS', 'CLOCK-UNITS',
+ 'CODE-SET', 'COLLATING', 'COLUMN', 'COMMA',
+ 'COMMON', 'COMMUNICATION', 'COMP', 'COMP-3', 'COMP-5',
+ 'COMPUTATIONAL', 'COMPUTATIONAL-3', 'COMPUTATIONAL-5',
+ 'CONFIGURATION', 'CONTAINS', 'CONTENT', 'CONTROL',
+ 'CONTROLS', 'CORR', 'COUNT',
+ 'CURRENCY', 'DATA', 'DATE', 'DATE-COMPILED', 'DATE-WRITTEN', 'DAY',
+ 'DAY-OF-WEEK', 'DE', 'DEBUG-CONTENTS', 'DEBUG-ITEM', 'DEBUG-LINE',
+ 'DEBUG-SUB-2', 'DEBUG-SUB-3', 'DEBUGGING', 'DECIMAL-POINT',
+ 'DECLARATIVES', 'DEBUG-NAME', 'DEBUG-SUB-1', 'DELIMITED',
+ 'DELIMITER', 'DEPENDING', 'DESCENDING', 'DESTINATION', 'DETAIL',
+ 'DISABLE', 'DIVISION', 'DOWN', 'DUPLICATES',
+ 'DYNAMIC', 'EGI', 'ELSE', 'EMI', 'ENABLE', 'END', 'END-ADD',
+ 'END-COMPUTE', 'END-DELETE', 'END-DIVIDE', 'END-EVALUATE', 'END-IF',
+ 'END-MULTIPLY', 'END-OF-PAGE', 'END-PERFORM', 'END-READ',
+ 'END-RECEIVE', 'END-RETURN', 'END-REWRITE', 'END-SEARCH',
+ 'END-START', 'END-STRING', 'END-SUBTRACT', 'END-UNSTRING',
+ 'END-WRITE', 'EOP', 'EQUAL', 'ERROR', 'ESI',
+ 'EVERY', 'EXCEPTION', 'EXCLUSIVE', 'EXTEND',
+ 'EXTENDED-STORAGE', 'EXTERNAL', 'FALSE', 'FD', 'FILE',
+ 'FILE-CONTROL', 'FILLER', 'FINAL', 'FIRST', 'FOOTING', 'FOR',
+ 'FROM', 'FUNCTION', 'GENERATE', 'GENERIC', 'GLOBAL',
+ 'GREATER', 'GROUP', 'GUARDIAN-ERR', 'HIGH-VALUE',
+ 'HIGH-VALUES', 'I-O', 'I-O-CONTROL', 'IDENTIFICATION', 'IN',
+ 'INDEX', 'INDEXED', 'INDICATE', 'INITIAL', 'INITIATE',
+ 'INPUT', 'INPUT-OUTPUT', 'INSTALLATION',
+ 'INVALID', 'IS', 'JUST', 'JUSTIFIED', 'KEY', 'LABEL', 'LAST',
+ 'LEADING', 'LEFT', 'LESS', 'LIMIT', 'LIMITS', 'LINAGE',
+ 'LINAGE-COUNTER', 'LINE', 'LINE-COUNTER', 'LINKAGE', 'LOCK',
+ 'LOW-VALUE', 'LOW-VALUES', 'MEMORY', 'MESSAGE',
+ 'MODE', 'MODULES', 'MULTIPLE', 'NATIVE',
+ 'NEGATIVE', 'NEXT', 'NO', 'NOT', 'NULL', 'NULLS', 'NUMBER',
+ 'NUMERIC', 'NUMERIC-EDITED', 'OBJECT-COMPUTER', 'OCCURS', 'OF',
+ 'OFF', 'OMITTED', 'ON', 'OPTIONAL', 'OR', 'ORDER',
+ 'ORGANIZATION', 'OTHER', 'OUTPUT', 'OVERFLOW', 'PACKED-DECIMAL',
+ 'PADDING', 'PAGE', 'PAGE-COUNTER', 'PF', 'PH', 'PIC',
+ 'PICTURE', 'PLUS', 'POINTER', 'POSITION', 'POSITIVE', 'PRINTING',
+ 'PROCEDURE', 'PROCEDURES', 'PROCEED', 'PROGRAM', 'PROGRAM-ID',
+ 'PROGRAM-STATUS', 'PROGRAM-STATUS-1', 'PROGRAM-STATUS-2', 'PROMPT',
+ 'PROTECTED', 'PURGE', 'QUEUE', 'QUOTE', 'QUOTES', 'RD',
+ 'RECEIVE', 'RECEIVE-CONTROL', 'RECORD', 'RECORDS',
+ 'REDEFINES', 'REEL', 'REFERENCE', 'REFERENCES', 'RELATIVE',
+ 'REMOVAL', 'RENAMES', 'REPLACE',
+ 'REPLY', 'REPORT', 'REPORTING', 'REPORTS', 'RERUN',
+ 'RESERVE', 'RESET', 'REVERSED', 'REWIND', 'REWRITE', 'RF',
+ 'RH', 'RIGHT', 'ROUNDED', 'RUN', 'SAME', 'SD',
+ 'SECURITY', 'SEGMENT', 'SEGMENT-LIMIT', 'SELECT', 'SEND',
+ 'SENTENCE', 'SEPARATE', 'SEQUENCE', 'SEQUENTIAL', 'SET',
+ 'SIGN', 'SIZE', 'SORT', 'SORT-MERGE', 'SOURCE-COMPUTER',
+ 'SPACE', 'SPACES', 'SPECIAL-NAMES', 'STANDARD', 'STANDARD-1',
+ 'STANDARD-2', 'START', 'STARTBACKUP', 'STATUS', 'STOP', 'STRING',
+ 'SUB-QUEUE-1', 'SUB-QUEUE-2', 'SUB-QUEUE-3', 'SUBTRACT',
+ 'SYMBOLIC', 'SYNC', 'SYNCDEPTH', 'SYNCHRONIZED',
+ 'TABLE', 'TAL', 'TAPE', 'TERMINAL', 'TERMINATE', 'TEST',
+ 'TEXT', 'THAN', 'THEN', 'THROUGH', 'THRU', 'TIME',
+ 'TOP', 'TRAILING', 'TRUE', 'TYPE', 'UNIT', 'UNLOCK', 'UNLOCKFILE',
+ 'UNLOCKRECORD', 'UNSTRING', 'UP', 'UPON', 'USAGE', 'USE',
+ 'USING', 'VALUE', 'VALUES', 'WHEN', 'WITH', 'WORDS',
+ 'WORKING-STORAGE', 'WRITE', 'ZERO', 'ZEROES'
+ ),
+ 4 => array( //Standard functions
+ 'ACOS', 'ANNUITY', 'ASIN', 'ATAN', 'CHAR', 'COS', 'CURRENT-DATE',
+ 'DATE-OF-INTEGER', 'DAY-OF-INTEGER', 'FACTORIAL', 'INTEGER',
+ 'INTEGER-OF-DATE', 'INTEGER-OF-DAY', 'INTEGER-PART', 'LENGTH',
+ 'LOG', 'LOG10', 'LOWER-CASE', 'MAX', 'MEAN', 'MEDIAN', 'MIDRANGE',
+ 'MIN', 'MOD', 'NUMVAL', 'NUMVAL-C', 'ORD', 'ORD-MAX', 'ORD-MIN',
+ 'PRESENT-VALUE', 'RANDOM', 'RANGE', 'REM', 'REVERSE', 'SIN', 'SQRT',
+ 'STANDARD-DEVIATION', 'SUM', 'TAN', 'UPPER-CASE', 'VARIANCE',
+ 'WHEN-COMPILED'
+ ),
+ 5 => array( //Privileged Built-in Functions
+ '#IN', '#OUT', '#TERM', '#TEMP', '#DYNAMIC', 'COBOL85^ARMTRAP',
+ 'COBOL85^COMPLETION', 'COBOL_COMPLETION_', 'COBOL_CONTROL_',
+ 'COBOL_GETENV_', 'COBOL_PUTENV_', 'COBOL85^RETURN^SORT^ERRORS',
+ 'COBOL_RETURN_SORT_ERRORS_', 'COBOL85^REWIND^SEQUENTIAL',
+ 'COBOL_REWIND_SEQUENTIAL_', 'COBOL85^SET^SORT^PARAM^TEXT',
+ 'COBOL_SET_SORT_PARAM_TEXT_', 'COBOL85^SET^SORT^PARAM^VALUE',
+ 'COBOL_SET_SORT_PARAM_VALUE_', 'COBOL_SET_MAX_RECORD_',
+ 'COBOL_SETMODE_', 'COBOL85^SPECIAL^OPEN', 'COBOL_SPECIAL_OPEN_',
+ 'COBOLASSIGN', 'COBOL_ASSIGN_', 'COBOLFILEINFO', 'COBOL_FILE_INFO_',
+ 'COBOLSPOOLOPEN', 'CREATEPROCESS', 'ALTERPARAMTEXT',
+ 'CHECKLOGICALNAME', 'CHECKMESSAGE', 'DELETEASSIGN', 'DELETEPARAM',
+ 'DELETESTARTUP', 'GETASSIGNTEXT', 'GETASSIGNVALUE', 'GETBACKUPCPU',
+ 'GETPARAMTEXT', 'GETSTARTUPTEXT', 'PUTASSIGNTEXT', 'PUTASSIGNVALUE',
+ 'PUTPARAMTEXT', 'PUTSTARTUPTEXT'
+ )
+ ),
+ 'SYMBOLS' => array(
+ //Avoid having - in identifiers marked as symbols
+ ' + ', ' - ', ' * ', ' / ', ' ** ',
+ '.', ',',
+ '=',
+ '(', ')', '[', ']'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #000080; font-weight: bold;',
+ 2 => 'color: #000000; font-weight: bold;',
+ 3 => 'color: #008000; font-weight: bold;',
+ 4 => 'color: #000080;',
+ 5 => 'color: #008000;',
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #a0a0a0; font-style: italic;',
+ 'MULTI' => 'color: #a0a0a0; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #339933;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #993399;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #202020;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #000066;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => '',
+ 5 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 4
+ );
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/cpp-qt.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/cpp-qt.php
new file mode 100644
index 000000000..43105de3d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/cpp-qt.php
@@ -0,0 +1,315 @@
+<?php
+/*************************************************************************************
+ * cpp.php
+ * -------
+ * Author: Iulian M
+ * Copyright: (c) 2006 Iulian M
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/09/27
+ *
+ * C++ (with QT extensions) language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ *
+ * TODO
+ * ----
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'C++ (QT)',
+ 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'COMMENT_REGEXP' => array(
+ //Multiline-continued single-line comments
+ 1 => '/\/\/(?:\\\\\\\\|\\\\\\n|.)*$/m',
+ //Multiline-continued preprocessor define
+ 2 => '/#(?:\\\\\\\\|\\\\\\n|.)*$/m'
+ ),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '',
+ 'ESCAPE_REGEXP' => array(
+ //Simple Single Char Escapes
+ 1 => "#\\\\[\\\\abfnrtv\'\"?\n]#i",
+ //Hexadecimal Char Specs
+ 2 => "#\\\\x[\da-fA-F]{2}#",
+ //Hexadecimal Char Specs
+ 3 => "#\\\\u[\da-fA-F]{4}#",
+ //Hexadecimal Char Specs
+ 4 => "#\\\\U[\da-fA-F]{8}#",
+ //Octal Char Specs
+ 5 => "#\\\\[0-7]{1,3}#"
+ ),
+ 'NUMBERS' =>
+ GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_INT_CSTYLE | GESHI_NUMBER_BIN_PREFIX_0B |
+ GESHI_NUMBER_OCT_PREFIX | GESHI_NUMBER_HEX_PREFIX | GESHI_NUMBER_FLT_NONSCI |
+ GESHI_NUMBER_FLT_NONSCI_F | GESHI_NUMBER_FLT_SCI_SHORT | GESHI_NUMBER_FLT_SCI_ZERO,
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'case', 'continue', 'default', 'do', 'else', 'for', 'goto', 'if', 'return',
+ 'switch', 'while', 'delete', 'new', 'this'
+ ),
+ 2 => array(
+ 'NULL', 'false', 'break', 'true', 'enum', 'errno', 'EDOM',
+ 'ERANGE', 'FLT_RADIX', 'FLT_ROUNDS', 'FLT_DIG', 'DBL_DIG', 'LDBL_DIG',
+ 'FLT_EPSILON', 'DBL_EPSILON', 'LDBL_EPSILON', 'FLT_MANT_DIG', 'DBL_MANT_DIG',
+ 'LDBL_MANT_DIG', 'FLT_MAX', 'DBL_MAX', 'LDBL_MAX', 'FLT_MAX_EXP', 'DBL_MAX_EXP',
+ 'LDBL_MAX_EXP', 'FLT_MIN', 'DBL_MIN', 'LDBL_MIN', 'FLT_MIN_EXP', 'DBL_MIN_EXP',
+ 'LDBL_MIN_EXP', 'CHAR_BIT', 'CHAR_MAX', 'CHAR_MIN', 'SCHAR_MAX', 'SCHAR_MIN',
+ 'UCHAR_MAX', 'SHRT_MAX', 'SHRT_MIN', 'USHRT_MAX', 'INT_MAX', 'INT_MIN',
+ 'UINT_MAX', 'LONG_MAX', 'LONG_MIN', 'ULONG_MAX', 'HUGE_VAL', 'SIGABRT',
+ 'SIGFPE', 'SIGILL', 'SIGINT', 'SIGSEGV', 'SIGTERM', 'SIG_DFL', 'SIG_ERR',
+ 'SIG_IGN', 'BUFSIZ', 'EOF', 'FILENAME_MAX', 'FOPEN_MAX', 'L_tmpnam',
+ 'SEEK_CUR', 'SEEK_END', 'SEEK_SET', 'TMP_MAX', 'stdin', 'stdout', 'stderr',
+ 'EXIT_FAILURE', 'EXIT_SUCCESS', 'RAND_MAX', 'CLOCKS_PER_SEC',
+ 'virtual', 'public', 'private', 'protected', 'template', 'using', 'namespace',
+ 'try', 'catch', 'inline', 'dynamic_cast', 'const_cast', 'reinterpret_cast',
+ 'static_cast', 'explicit', 'friend', 'wchar_t', 'typename', 'typeid', 'class' ,
+ 'foreach','connect', 'Q_OBJECT' , 'slots' , 'signals'
+ ),
+ 3 => array(
+ 'cin', 'cerr', 'clog', 'cout',
+ 'printf', 'fprintf', 'snprintf', 'sprintf', 'assert',
+ 'isalnum', 'isalpha', 'isdigit', 'iscntrl', 'isgraph', 'islower', 'isprint',
+ 'ispunct', 'isspace', 'isupper', 'isxdigit', 'tolower', 'toupper',
+ 'exp', 'log', 'log10', 'pow', 'sqrt', 'ceil', 'floor', 'fabs', 'ldexp',
+ 'frexp', 'modf', 'fmod', 'sin', 'cos', 'tan', 'asin', 'acos', 'atan', 'atan2',
+ 'sinh', 'cosh', 'tanh', 'setjmp', 'longjmp',
+ 'va_start', 'va_arg', 'va_end', 'offsetof', 'sizeof', 'fopen', 'freopen',
+ 'fflush', 'fclose', 'remove', 'rename', 'tmpfile', 'tmpname', 'setvbuf',
+ 'setbuf', 'vfprintf', 'vprintf', 'vsprintf', 'fscanf', 'scanf', 'sscanf',
+ 'fgetc', 'fgets', 'fputc', 'fputs', 'getc', 'getchar', 'gets', 'putc',
+ 'putchar', 'puts', 'ungetc', 'fread', 'fwrite', 'fseek', 'ftell', 'rewind',
+ 'fgetpos', 'fsetpos', 'clearerr', 'feof', 'ferror', 'perror', 'abs', 'labs',
+ 'div', 'ldiv', 'atof', 'atoi', 'atol', 'strtod', 'strtol', 'strtoul', 'calloc',
+ 'malloc', 'realloc', 'free', 'abort', 'exit', 'atexit', 'system', 'getenv',
+ 'bsearch', 'qsort', 'rand', 'srand', 'strcpy', 'strncpy', 'strcat', 'strncat',
+ 'strcmp', 'strncmp', 'strcoll', 'strchr', 'strrchr', 'strspn', 'strcspn',
+ 'strpbrk', 'strstr', 'strlen', 'strerror', 'strtok', 'strxfrm', 'memcpy',
+ 'memmove', 'memcmp', 'memchr', 'memset', 'clock', 'time', 'difftime', 'mktime',
+ 'asctime', 'ctime', 'gmtime', 'localtime', 'strftime'
+ ),
+ 4 => array(
+ 'auto', 'bool', 'char', 'const', 'double', 'float', 'int', 'long', 'longint',
+ 'register', 'short', 'shortint', 'signed', 'static', 'struct',
+ 'typedef', 'union', 'unsigned', 'void', 'volatile', 'extern', 'jmp_buf',
+ 'signal', 'raise', 'va_list', 'ptrdiff_t', 'size_t', 'FILE', 'fpos_t',
+ 'div_t', 'ldiv_t', 'clock_t', 'time_t', 'tm',
+ ),
+ 5 => array(
+ 'QAbstractButton','QDir','QIntValidator','QRegExpValidator','QTabWidget','QAbstractEventDispatcher',
+ 'QDirectPainter','QIODevice','QRegion','QTcpServer','QAbstractExtensionFactory','QDirModel',
+ 'QItemDelegate','QResizeEvent','QTcpSocket','QAbstractExtensionManager','QDockWidget',
+ 'QItemEditorCreatorBase','QResource','QTemporaryFile','QAbstractFileEngine','QDomAttr',
+ 'QItemEditorFactory','QRubberBand','QTestEventList','QAbstractFileEngineHandler','QDomCDATASection',
+ 'QItemSelection','QScreen','QTextBlock','QAbstractFormBuilder','QDomCharacterData','QItemSelectionModel',
+ 'QScreenCursor','QTextBlockFormat','QAbstractGraphicsShapeItem','QDomComment','QItemSelectionRange',
+ 'QScreenDriverFactory','QTextBlockGroup','QAbstractItemDelegate','QDomDocument','QKbdDriverFactory',
+ 'QScreenDriverPlugin','QTextBlockUserData','QAbstractItemModel','QDomDocumentFragment','QKbdDriverPlugin',
+ 'QScrollArea','QTextBrowser','QAbstractItemView','QDomDocumentType','QKeyEvent','QScrollBar',
+ 'QTextCharFormat','QAbstractListModel','QDomElement','QKeySequence','QSemaphore','QTextCodec',
+ 'QAbstractPrintDialog','QDomEntity','QLabel','QSessionManager','QTextCodecPlugin','QAbstractProxyModel',
+ 'QDomEntityReference','QLatin1Char','QSet','QTextCursor','QAbstractScrollArea','QDomImplementation',
+ 'QLatin1String','QSetIterator','QTextDecoder','QAbstractSlider','QDomNamedNodeMap','QLayout','QSettings',
+ 'QTextDocument','QAbstractSocket','QDomNode','QLayoutItem','QSharedData','QTextDocumentFragment',
+ 'QAbstractSpinBox','QDomNodeList','QLCDNumber','QSharedDataPointer','QTextEdit','QAbstractTableModel',
+ 'QDomNotation','QLibrary','QShortcut','QTextEncoder','QAbstractTextDocumentLayout',
+ 'QDomProcessingInstruction','QLibraryInfo','QShortcutEvent','QTextFormat','QAccessible','QDomText',
+ 'QLine','QShowEvent','QTextFragment','QAccessibleBridge','QDoubleSpinBox','QLinearGradient',
+ 'QSignalMapper','QTextFrame','QAccessibleBridgePlugin','QDoubleValidator','QLineEdit','QSignalSpy',
+ 'QTextFrameFormat','QAccessibleEvent','QDrag','QLineF','QSize','QTextImageFormat','QAccessibleInterface',
+ 'QDragEnterEvent','QLinkedList','QSizeF','QTextInlineObject','QAccessibleObject','QDragLeaveEvent',
+ 'QLinkedListIterator','QSizeGrip','QTextLayout','QAccessiblePlugin','QDragMoveEvent','QLinuxFbScreen',
+ 'QSizePolicy','QTextLength','QAccessibleWidget','QDropEvent','QList','QSlider','QTextLine','QAction',
+ 'QDynamicPropertyChangeEvent','QListIterator','QSocketNotifier','QTextList','QActionEvent','QErrorMessage',
+ 'QListView','QSortFilterProxyModel','QTextListFormat','QActionGroup','QEvent','QListWidget','QSound',
+ 'QTextObject','QApplication','QEventLoop','QListWidgetItem','QSpacerItem','QTextOption','QAssistantClient',
+ 'QExtensionFactory','QLocale','QSpinBox','QTextStream','QAxAggregated','QExtensionManager',
+ 'QMacPasteboardMime','QSplashScreen','QTextTable','QAxBase','QFile','QMacStyle','QSplitter',
+ 'QTextTableCell','QAxBindable','QFileDialog','QMainWindow','QSplitterHandle','QTextTableFormat',
+ 'QAxFactory','QFileIconProvider','QMap','QSqlDatabase','QThread','QAxObject','QFileInfo','QMapIterator',
+ 'QSqlDriver','QThreadStorage','QAxScript','QFileOpenEvent','QMatrix','QSqlDriverCreator','QTime',
+ 'QAxScriptEngine','QFileSystemWatcher','QMenu','QSqlDriverCreatorBase','QTimeEdit','QAxScriptManager',
+ 'QFlag','QMenuBar','QSqlDriverPlugin','QTimeLine','QAxWidget','QFlags','QMessageBox','QSqlError','QTimer',
+ 'QBasicTimer','QFocusEvent','QMetaClassInfo','QSqlField','QTimerEvent','QBitArray','QFocusFrame',
+ 'QMetaEnum','QSqlIndex','QToolBar','QBitmap','QFont','QMetaMethod','QSqlQuery','QToolBox','QBoxLayout',
+ 'QFontComboBox','QMetaObject','QSqlQueryModel','QToolButton','QBrush','QFontDatabase','QMetaProperty',
+ 'QSqlRecord','QToolTip','QBuffer','QFontDialog','QMetaType','QSqlRelation','QTransformedScreen',
+ 'QButtonGroup','QFontInfo','QMimeData','QSqlRelationalDelegate','QTranslator','QByteArray','QFontMetrics',
+ 'QMimeSource','QSqlRelationalTableModel','QTreeView','QByteArrayMatcher','QFontMetricsF','QModelIndex',
+ 'QSqlResult','QTreeWidget','QCache','QFormBuilder','QMotifStyle','QSqlTableModel','QTreeWidgetItem',
+ 'QCalendarWidget','QFrame','QMouseDriverFactory','QStack','QTreeWidgetItemIterator','QCDEStyle',
+ 'QFSFileEngine','QMouseDriverPlugin','QStackedLayout','QUdpSocket','QChar','QFtp','QMouseEvent',
+ 'QStackedWidget','QUiLoader','QCheckBox','QGenericArgument','QMoveEvent','QStandardItem','QUndoCommand',
+ 'QChildEvent','QGenericReturnArgument','QMovie','QStandardItemEditorCreator','QUndoGroup',
+ 'QCleanlooksStyle','QGLColormap','QMultiHash','QStandardItemModel','QUndoStack','QClipboard',
+ 'QGLContext','QMultiMap','QStatusBar','QUndoView','QCloseEvent','QGLFormat','QMutableHashIterator',
+ 'QStatusTipEvent','QUrl','QColor','QGLFramebufferObject','QMutableLinkedListIterator','QString',
+ 'QUrlInfo','QColorDialog','QGLPixelBuffer','QMutableListIterator','QStringList','QUuid','QColormap',
+ 'QGLWidget','QMutableMapIterator','QStringListModel','QValidator','QComboBox','QGradient',
+ 'QMutableSetIterator','QStringMatcher','QVariant','QCommonStyle','QGraphicsEllipseItem',
+ 'QMutableVectorIterator','QStyle','QVarLengthArray','QCompleter','QGraphicsItem','QMutex',
+ 'QStyleFactory','QVBoxLayout','QConicalGradient','QGraphicsItemAnimation','QMutexLocker',
+ 'QStyleHintReturn','QVector','QContextMenuEvent','QGraphicsItemGroup','QNetworkAddressEntry',
+ 'QStyleHintReturnMask','QVectorIterator','QCopChannel','QGraphicsLineItem','QNetworkInterface',
+ 'QStyleOption','QVFbScreen','QCoreApplication','QGraphicsPathItem','QNetworkProxy','QStyleOptionButton',
+ 'QVNCScreen','QCursor','QGraphicsPixmapItem','QObject','QStyleOptionComboBox','QWaitCondition',
+ 'QCustomRasterPaintDevice','QGraphicsPolygonItem','QObjectCleanupHandler','QStyleOptionComplex',
+ 'QWhatsThis','QDataStream','QGraphicsRectItem','QPageSetupDialog','QStyleOptionDockWidget',
+ 'QWhatsThisClickedEvent','QDataWidgetMapper','QGraphicsScene','QPaintDevice','QStyleOptionFocusRect',
+ 'QWheelEvent','QDate','QGraphicsSceneContextMenuEvent','QPaintEngine','QStyleOptionFrame','QWidget',
+ 'QDateEdit','QGraphicsSceneEvent','QPaintEngineState','QStyleOptionFrameV2','QWidgetAction','QDateTime',
+ 'QGraphicsSceneHoverEvent','QPainter','QStyleOptionGraphicsItem','QWidgetItem','QDateTimeEdit',
+ 'QGraphicsSceneMouseEvent','QPainterPath','QStyleOptionGroupBox','QWindowsMime','QDBusAbstractAdaptor',
+ 'QGraphicsSceneWheelEvent','QPainterPathStroker','QStyleOptionHeader','QWindowsStyle',
+ 'QDBusAbstractInterface','QGraphicsSimpleTextItem','QPaintEvent','QStyleOptionMenuItem',
+ 'QWindowStateChangeEvent','QDBusArgument','QGraphicsSvgItem','QPair','QStyleOptionProgressBar',
+ 'QWindowsXPStyle','QDBusConnection','QGraphicsTextItem','QPalette','QStyleOptionProgressBarV2',
+ 'QWorkspace','QDBusConnectionInterface','QGraphicsView','QPen','QStyleOptionQ3DockWindow','QWriteLocker',
+ 'QDBusError','QGridLayout','QPersistentModelIndex','QStyleOptionQ3ListView','QWSCalibratedMouseHandler',
+ 'QDBusInterface','QGroupBox','QPicture','QStyleOptionQ3ListViewItem','QWSClient','QDBusMessage','QHash',
+ 'QPictureFormatPlugin','QStyleOptionRubberBand','QWSEmbedWidget','QDBusObjectPath','QHashIterator',
+ 'QPictureIO','QStyleOptionSizeGrip','QWSEvent','QDBusReply','QHBoxLayout','QPixmap','QStyleOptionSlider',
+ 'QWSInputMethod','QDBusServer','QHeaderView','QPixmapCache','QStyleOptionSpinBox','QWSKeyboardHandler',
+ 'QDBusSignature','QHelpEvent','QPlastiqueStyle','QStyleOptionTab','QWSMouseHandler','QDBusVariant',
+ 'QHideEvent','QPluginLoader','QStyleOptionTabBarBase','QWSPointerCalibrationData','QDecoration',
+ 'QHostAddress','QPoint','QStyleOptionTabV2','QWSScreenSaver','QDecorationFactory','QHostInfo','QPointer',
+ 'QStyleOptionTabWidgetFrame','QWSServer','QDecorationPlugin','QHoverEvent','QPointF','QStyleOptionTitleBar',
+ 'QWSTslibMouseHandler','QDesignerActionEditorInterface','QHttp','QPolygon','QStyleOptionToolBar','QWSWindow',
+ 'QDesignerContainerExtension','QHttpHeader','QPolygonF','QStyleOptionToolBox','QWSWindowSurface',
+ 'QDesignerCustomWidgetCollectionInterface','QHttpRequestHeader','QPrintDialog','QStyleOptionToolButton',
+ 'QX11EmbedContainer','QDesignerCustomWidgetInterface','QHttpResponseHeader','QPrintEngine',
+ 'QStyleOptionViewItem','QX11EmbedWidget','QDesignerFormEditorInterface','QIcon','QPrinter',
+ 'QStyleOptionViewItemV2','QX11Info','QDesignerFormWindowCursorInterface','QIconDragEvent','QProcess',
+ 'QStylePainter','QXmlAttributes','QDesignerFormWindowInterface','QIconEngine','QProgressBar',
+ 'QStylePlugin','QXmlContentHandler','QDesignerFormWindowManagerInterface','QIconEnginePlugin',
+ 'QProgressDialog','QSvgRenderer','QXmlDeclHandler','QDesignerMemberSheetExtension','QImage',
+ 'QProxyModel','QSvgWidget','QXmlDefaultHandler','QDesignerObjectInspectorInterface','QImageIOHandler',
+ 'QPushButton','QSyntaxHighlighter','QXmlDTDHandler','QDesignerPropertyEditorInterface','QImageIOPlugin',
+ 'QQueue','QSysInfo','QXmlEntityResolver','QDesignerPropertySheetExtension','QImageReader','QRadialGradient',
+ 'QSystemLocale','QXmlErrorHandler','QDesignerTaskMenuExtension','QImageWriter','QRadioButton',
+ 'QSystemTrayIcon','QXmlInputSource','QDesignerWidgetBoxInterface','QInputContext','QRasterPaintEngine',
+ 'QTabBar','QXmlLexicalHandler','QDesktopServices','QInputContextFactory','QReadLocker','QTabletEvent',
+ 'QXmlLocator','QDesktopWidget','QInputContextPlugin','QReadWriteLock','QTableView','QXmlNamespaceSupport',
+ 'QDial','QInputDialog','QRect','QTableWidget','QXmlParseException','QDialog','QInputEvent','QRectF',
+ 'QTableWidgetItem','QXmlReader','QDialogButtonBox','QInputMethodEvent','QRegExp',
+ 'QTableWidgetSelectionRange','QXmlSimpleReader'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '{', '}', '[', ']', '=', '+', '-', '*', '/', '!', '%', '^', '&', ':', ',', ';', '|', '<', '>'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ 2 => true,
+ 3 => true,
+ 4 => true,
+ 5 => true,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #000000; font-weight:bold;',
+ 2 => 'color: #0057AE;',
+ 3 => 'color: #2B74C7;',
+ 4 => 'color: #0057AE;',
+ 5 => 'color: #22aadd;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #888888;',
+ 2 => 'color: #006E28;',
+ 'MULTI' => 'color: #888888; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;',
+ 1 => 'color: #000099; font-weight: bold;',
+ 2 => 'color: #660099; font-weight: bold;',
+ 3 => 'color: #660099; font-weight: bold;',
+ 4 => 'color: #660099; font-weight: bold;',
+ 5 => 'color: #006699; font-weight: bold;',
+ 'HARD' => '',
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #006E28;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #BF0303;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #B08000;',
+ GESHI_NUMBER_BIN_PREFIX_0B => 'color: #208080;',
+ GESHI_NUMBER_OCT_PREFIX => 'color: #208080;',
+ GESHI_NUMBER_HEX_PREFIX => 'color: #208080;',
+ GESHI_NUMBER_FLT_SCI_SHORT => 'color:#800080;',
+ GESHI_NUMBER_FLT_SCI_ZERO => 'color:#800080;',
+ GESHI_NUMBER_FLT_NONSCI_F => 'color:#800080;',
+ GESHI_NUMBER_FLT_NONSCI => 'color:#800080;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #2B74C7;',
+ 2 => 'color: #2B74C7;',
+ 3 => 'color: #2B74C7;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #006E28;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => '',
+ 5 => 'http://doc.trolltech.com/latest/{FNAMEL}.html'
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.',
+ 2 => '::',
+ 3 => '-&gt;',
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 4,
+ 'PARSER_CONTROL' => array(
+ 'KEYWORDS' => array(
+ 'DISALLOWED_BEFORE' => "(?<![a-zA-Z0-9\$_\|\#>|^])",
+ 'DISALLOWED_AFTER' => "(?![a-zA-Z0-9_<\|%\\-])"
+ ),
+ 'OOLANG' => array(
+ 'MATCH_AFTER' => '~?[a-zA-Z][a-zA-Z0-9_]*',
+ )
+ )
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/cpp.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/cpp.php
new file mode 100644
index 000000000..264ef638d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/cpp.php
@@ -0,0 +1,226 @@
+<?php
+/*************************************************************************************
+ * cpp.php
+ * -------
+ * Author: Dennis Bayer (Dennis.Bayer@mnifh-giessen.de)
+ * Contributors:
+ * - M. Uli Kusterer (witness.of.teachtext@gmx.net)
+ * - Jack Lloyd (lloyd@randombit.net)
+ * Copyright: (c) 2004 Dennis Bayer, Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/09/27
+ *
+ * C++ language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * 2004/XX/XX (1.0.2)
+ * - Added several new keywords (Jack Lloyd)
+ * 2004/11/27 (1.0.1)
+ * - Added StdCLib function and constant names, changed color scheme to
+ * a cleaner one. (M. Uli Kusterer)
+ * - Added support for multiple object splitters
+ * 2004/10/27 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'C++',
+ 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'COMMENT_REGEXP' => array(
+ //Multiline-continued single-line comments
+ 1 => '/\/\/(?:\\\\\\\\|\\\\\\n|.)*$/m',
+ //Multiline-continued preprocessor define
+ 2 => '/#(?:\\\\\\\\|\\\\\\n|.)*$/m'
+ ),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '',
+ 'ESCAPE_REGEXP' => array(
+ //Simple Single Char Escapes
+ 1 => "#\\\\[\\\\abfnrtv\'\"?\n]#i",
+ //Hexadecimal Char Specs
+ 2 => "#\\\\x[\da-fA-F]{2}#",
+ //Hexadecimal Char Specs
+ 3 => "#\\\\u[\da-fA-F]{4}#",
+ //Hexadecimal Char Specs
+ 4 => "#\\\\U[\da-fA-F]{8}#",
+ //Octal Char Specs
+ 5 => "#\\\\[0-7]{1,3}#"
+ ),
+ 'NUMBERS' =>
+ GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_INT_CSTYLE | GESHI_NUMBER_BIN_PREFIX_0B |
+ GESHI_NUMBER_OCT_PREFIX | GESHI_NUMBER_HEX_PREFIX | GESHI_NUMBER_FLT_NONSCI |
+ GESHI_NUMBER_FLT_NONSCI_F | GESHI_NUMBER_FLT_SCI_SHORT | GESHI_NUMBER_FLT_SCI_ZERO,
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'break', 'case', 'continue', 'default', 'do', 'else', 'for', 'goto', 'if', 'return',
+ 'switch', 'throw', 'while'
+ ),
+ 2 => array(
+ 'NULL', 'false', 'true', 'enum', 'errno', 'EDOM',
+ 'ERANGE', 'FLT_RADIX', 'FLT_ROUNDS', 'FLT_DIG', 'DBL_DIG', 'LDBL_DIG',
+ 'FLT_EPSILON', 'DBL_EPSILON', 'LDBL_EPSILON', 'FLT_MANT_DIG', 'DBL_MANT_DIG',
+ 'LDBL_MANT_DIG', 'FLT_MAX', 'DBL_MAX', 'LDBL_MAX', 'FLT_MAX_EXP', 'DBL_MAX_EXP',
+ 'LDBL_MAX_EXP', 'FLT_MIN', 'DBL_MIN', 'LDBL_MIN', 'FLT_MIN_EXP', 'DBL_MIN_EXP',
+ 'LDBL_MIN_EXP', 'CHAR_BIT', 'CHAR_MAX', 'CHAR_MIN', 'SCHAR_MAX', 'SCHAR_MIN',
+ 'UCHAR_MAX', 'SHRT_MAX', 'SHRT_MIN', 'USHRT_MAX', 'INT_MAX', 'INT_MIN',
+ 'UINT_MAX', 'LONG_MAX', 'LONG_MIN', 'ULONG_MAX', 'HUGE_VAL', 'SIGABRT',
+ 'SIGFPE', 'SIGILL', 'SIGINT', 'SIGSEGV', 'SIGTERM', 'SIG_DFL', 'SIG_ERR',
+ 'SIG_IGN', 'BUFSIZ', 'EOF', 'FILENAME_MAX', 'FOPEN_MAX', 'L_tmpnam',
+ 'SEEK_CUR', 'SEEK_END', 'SEEK_SET', 'TMP_MAX', 'stdin', 'stdout', 'stderr',
+ 'EXIT_FAILURE', 'EXIT_SUCCESS', 'RAND_MAX', 'CLOCKS_PER_SEC',
+ 'virtual', 'public', 'private', 'protected', 'template', 'using', 'namespace',
+ 'try', 'catch', 'inline', 'dynamic_cast', 'const_cast', 'reinterpret_cast',
+ 'static_cast', 'explicit', 'friend', 'wchar_t', 'typename', 'typeid', 'class'
+ ),
+ 3 => array(
+ 'cin', 'cerr', 'clog', 'cout', 'delete', 'new', 'this',
+ 'printf', 'fprintf', 'snprintf', 'sprintf', 'assert',
+ 'isalnum', 'isalpha', 'isdigit', 'iscntrl', 'isgraph', 'islower', 'isprint',
+ 'ispunct', 'isspace', 'isupper', 'isxdigit', 'tolower', 'toupper',
+ 'exp', 'log', 'log10', 'pow', 'sqrt', 'ceil', 'floor', 'fabs', 'ldexp',
+ 'frexp', 'modf', 'fmod', 'sin', 'cos', 'tan', 'asin', 'acos', 'atan', 'atan2',
+ 'sinh', 'cosh', 'tanh', 'setjmp', 'longjmp',
+ 'va_start', 'va_arg', 'va_end', 'offsetof', 'sizeof', 'fopen', 'freopen',
+ 'fflush', 'fclose', 'remove', 'rename', 'tmpfile', 'tmpname', 'setvbuf',
+ 'setbuf', 'vfprintf', 'vprintf', 'vsprintf', 'fscanf', 'scanf', 'sscanf',
+ 'fgetc', 'fgets', 'fputc', 'fputs', 'getc', 'getchar', 'gets', 'putc',
+ 'putchar', 'puts', 'ungetc', 'fread', 'fwrite', 'fseek', 'ftell', 'rewind',
+ 'fgetpos', 'fsetpos', 'clearerr', 'feof', 'ferror', 'perror', 'abs', 'labs',
+ 'div', 'ldiv', 'atof', 'atoi', 'atol', 'strtod', 'strtol', 'strtoul', 'calloc',
+ 'malloc', 'realloc', 'free', 'abort', 'exit', 'atexit', 'system', 'getenv',
+ 'bsearch', 'qsort', 'rand', 'srand', 'strcpy', 'strncpy', 'strcat', 'strncat',
+ 'strcmp', 'strncmp', 'strcoll', 'strchr', 'strrchr', 'strspn', 'strcspn',
+ 'strpbrk', 'strstr', 'strlen', 'strerror', 'strtok', 'strxfrm', 'memcpy',
+ 'memmove', 'memcmp', 'memchr', 'memset', 'clock', 'time', 'difftime', 'mktime',
+ 'asctime', 'ctime', 'gmtime', 'localtime', 'strftime'
+ ),
+ 4 => array(
+ 'auto', 'bool', 'char', 'const', 'double', 'float', 'int', 'long', 'longint',
+ 'register', 'short', 'shortint', 'signed', 'static', 'struct',
+ 'typedef', 'union', 'unsigned', 'void', 'volatile', 'extern', 'jmp_buf',
+ 'signal', 'raise', 'va_list', 'ptrdiff_t', 'size_t', 'FILE', 'fpos_t',
+ 'div_t', 'ldiv_t', 'clock_t', 'time_t', 'tm',
+ ),
+ ),
+ 'SYMBOLS' => array(
+ 0 => array('(', ')', '{', '}', '[', ']'),
+ 1 => array('<', '>','='),
+ 2 => array('+', '-', '*', '/', '%'),
+ 3 => array('!', '^', '&', '|'),
+ 4 => array('?', ':', ';')
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ 2 => true,
+ 3 => true,
+ 4 => true,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #0000ff;',
+ 2 => 'color: #0000ff;',
+ 3 => 'color: #0000dd;',
+ 4 => 'color: #0000ff;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #666666;',
+ 2 => 'color: #339900;',
+ 'MULTI' => 'color: #ff0000; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;',
+ 1 => 'color: #000099; font-weight: bold;',
+ 2 => 'color: #660099; font-weight: bold;',
+ 3 => 'color: #660099; font-weight: bold;',
+ 4 => 'color: #660099; font-weight: bold;',
+ 5 => 'color: #006699; font-weight: bold;',
+ 'HARD' => '',
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #008000;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #FF0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #0000dd;',
+ GESHI_NUMBER_BIN_PREFIX_0B => 'color: #208080;',
+ GESHI_NUMBER_OCT_PREFIX => 'color: #208080;',
+ GESHI_NUMBER_HEX_PREFIX => 'color: #208080;',
+ GESHI_NUMBER_FLT_SCI_SHORT => 'color:#800080;',
+ GESHI_NUMBER_FLT_SCI_ZERO => 'color:#800080;',
+ GESHI_NUMBER_FLT_NONSCI_F => 'color:#800080;',
+ GESHI_NUMBER_FLT_NONSCI => 'color:#800080;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #007788;',
+ 2 => 'color: #007788;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #008000;',
+ 1 => 'color: #000080;',
+ 2 => 'color: #000040;',
+ 3 => 'color: #000040;',
+ 4 => 'color: #008080;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.',
+ 2 => '::'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 4,
+ 'PARSER_CONTROL' => array(
+ 'KEYWORDS' => array(
+ 'DISALLOWED_BEFORE' => "(?<![a-zA-Z0-9\$_\|\#])",
+ 'DISALLOWED_AFTER' => "(?![a-zA-Z0-9_\|%\\-])"
+ )
+ )
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/csharp.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/csharp.php
new file mode 100644
index 000000000..0f8a5e2a3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/csharp.php
@@ -0,0 +1,250 @@
+<?php
+/*************************************************************************************
+ * csharp.php
+ * ----------
+ * Author: Alan Juden (alan@judenware.org)
+ * Copyright: (c) 2004 Alan Juden, Nigel McNie (http://qbnz.com/highlighter/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/06/04
+ *
+ * C# language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/25 (1.0.7.22)
+ * - Added highlighting of using and namespace directives as non-OOP
+ * 2005/01/05 (1.0.1)
+ * - Used hardquote support for @"..." strings (Cliff Stanford)
+ * 2004/11/27 (1.0.0)
+ * - Initial release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'C#',
+ 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'COMMENT_REGEXP' => array(
+ //Using and Namespace directives (basic support)
+ //Please note that the alias syntax for using is not supported
+ 3 => '/(?:(?<=using[\\n\\s])|(?<=namespace[\\n\\s]))[\\n\\s]*([a-zA-Z0-9_]+\\.)*[a-zA-Z0-9_]+[\n\s]*(?=[;=])/i'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'HARDQUOTE' => array('@"', '"'),
+ 'HARDESCAPE' => array('"'),
+ 'HARDCHAR' => '"',
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'as', 'auto', 'base', 'break', 'case', 'catch', 'const', 'continue',
+ 'default', 'do', 'else', 'event', 'explicit', 'extern', 'false',
+ 'finally', 'fixed', 'for', 'foreach', 'goto', 'if', 'implicit',
+ 'in', 'internal', 'lock', 'namespace', 'null', 'operator', 'out',
+ 'override', 'params', 'partial', 'private', 'protected', 'public',
+ 'readonly', 'ref', 'return', 'sealed', 'stackalloc', 'static',
+ 'switch', 'this', 'throw', 'true', 'try', 'unsafe', 'using',
+ 'virtual', 'void', 'while'
+ ),
+ 2 => array(
+ '#elif', '#endif', '#endregion', '#else', '#error', '#define', '#if',
+ '#line', '#region', '#undef', '#warning'
+ ),
+ 3 => array(
+ 'checked', 'is', 'new', 'sizeof', 'typeof', 'unchecked'
+ ),
+ 4 => array(
+ 'bool', 'byte', 'char', 'class', 'decimal', 'delegate', 'double',
+ 'enum', 'float', 'int', 'interface', 'long', 'object', 'sbyte',
+ 'short', 'string', 'struct', 'uint', 'ulong', 'ushort'
+ ),
+ 5 => array(
+ 'Microsoft.Win32',
+ 'System',
+ 'System.CodeDOM',
+ 'System.CodeDOM.Compiler',
+ 'System.Collections',
+ 'System.Collections.Bases',
+ 'System.ComponentModel',
+ 'System.ComponentModel.Design',
+ 'System.ComponentModel.Design.CodeModel',
+ 'System.Configuration',
+ 'System.Configuration.Assemblies',
+ 'System.Configuration.Core',
+ 'System.Configuration.Install',
+ 'System.Configuration.Interceptors',
+ 'System.Configuration.Schema',
+ 'System.Configuration.Web',
+ 'System.Core',
+ 'System.Data',
+ 'System.Data.ADO',
+ 'System.Data.Design',
+ 'System.Data.Internal',
+ 'System.Data.SQL',
+ 'System.Data.SQLTypes',
+ 'System.Data.XML',
+ 'System.Data.XML.DOM',
+ 'System.Data.XML.XPath',
+ 'System.Data.XML.XSLT',
+ 'System.Diagnostics',
+ 'System.Diagnostics.SymbolStore',
+ 'System.DirectoryServices',
+ 'System.Drawing',
+ 'System.Drawing.Design',
+ 'System.Drawing.Drawing2D',
+ 'System.Drawing.Imaging',
+ 'System.Drawing.Printing',
+ 'System.Drawing.Text',
+ 'System.Globalization',
+ 'System.IO',
+ 'System.IO.IsolatedStorage',
+ 'System.Messaging',
+ 'System.Net',
+ 'System.Net.Sockets',
+ 'System.NewXml',
+ 'System.NewXml.XPath',
+ 'System.NewXml.Xsl',
+ 'System.Reflection',
+ 'System.Reflection.Emit',
+ 'System.Resources',
+ 'System.Runtime.InteropServices',
+ 'System.Runtime.InteropServices.Expando',
+ 'System.Runtime.Remoting',
+ 'System.Runtime.Serialization',
+ 'System.Runtime.Serialization.Formatters',
+ 'System.Runtime.Serialization.Formatters.Binary',
+ 'System.Security',
+ 'System.Security.Cryptography',
+ 'System.Security.Cryptography.X509Certificates',
+ 'System.Security.Permissions',
+ 'System.Security.Policy',
+ 'System.Security.Principal',
+ 'System.ServiceProcess',
+ 'System.Text',
+ 'System.Text.RegularExpressions',
+ 'System.Threading',
+ 'System.Timers',
+ 'System.Web',
+ 'System.Web.Caching',
+ 'System.Web.Configuration',
+ 'System.Web.Security',
+ 'System.Web.Services',
+ 'System.Web.Services.Description',
+ 'System.Web.Services.Discovery',
+ 'System.Web.Services.Protocols',
+ 'System.Web.UI',
+ 'System.Web.UI.Design',
+ 'System.Web.UI.Design.WebControls',
+ 'System.Web.UI.Design.WebControls.ListControls',
+ 'System.Web.UI.HtmlControls',
+ 'System.Web.UI.WebControls',
+ 'System.WinForms',
+ 'System.WinForms.ComponentModel',
+ 'System.WinForms.Design',
+ 'System.Xml',
+ 'System.Xml.Serialization',
+ 'System.Xml.Serialization.Code',
+ 'System.Xml.Serialization.Schema'
+ ),
+ ),
+ 'SYMBOLS' => array(
+ '+', '-', '*', '?', '=', '/', '%', '&', '>', '<', '^', '!', ':', ';',
+ '(', ')', '{', '}', '[', ']', '|'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #0600FF;',
+ 2 => 'color: #FF8000; font-weight: bold;',
+ 3 => 'color: #008000;',
+ 4 => 'color: #FF0000;',
+ 5 => 'color: #000000;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #008080; font-style: italic;',
+ 2 => 'color: #008080;',
+ 3 => 'color: #008080;',
+ 'MULTI' => 'color: #008080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #008080; font-weight: bold;',
+ 'HARD' => 'color: #008080; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #666666;',
+ 'HARD' => 'color: #666666;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #FF0000;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #0000FF;',
+ 2 => 'color: #0000FF;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #008000;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => 'http://www.google.com/search?q={FNAMEL}+msdn.microsoft.com',
+ 4 => '',
+ 5 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.',
+ 2 => '::'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 4,
+ 'PARSER_CONTROL' => array(
+ 'KEYWORDS' => array(
+ 'DISALLOWED_BEFORE' => "(?<![a-zA-Z0-9\$_\|\#>|^])",
+ 'DISALLOWED_AFTER' => "(?![a-zA-Z0-9_<\|%\\-])"
+ )
+ )
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/css.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/css.php
new file mode 100644
index 000000000..f6386bdc0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/css.php
@@ -0,0 +1,212 @@
+<?php
+/*************************************************************************************
+ * css.php
+ * -------
+ * Author: Nigel McNie (nigel@geshi.org)
+ * Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/06/18
+ *
+ * CSS language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * 2004/11/27 (1.0.3)
+ * - Added support for multiple object splitters
+ * 2004/10/27 (1.0.2)
+ * - Changed regexps to catch "-" symbols
+ * - Added support for URLs
+ * 2004/08/05 (1.0.1)
+ * - Added support for symbols
+ * 2004/07/14 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ * * Improve or drop regexps for class/id/psuedoclass highlighting
+ * * Re-look at keywords - possibly to make several CSS language
+ * files, all with different versions of CSS in them
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'CSS',
+ 'COMMENT_SINGLE' => array(1 => '@'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'COMMENT_REGEXP' => array(
+ 2 => "/(?<=\\()\\s*(?:(?:[a-z0-9]+?:\\/\\/)?[a-z0-9_\\-\\.\\/:]+?)?[a-z]+?\\.[a-z]+?(\\?[^\)]+?)?\\s*?(?=\\))/i"
+ ),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"', "'"),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'aqua', 'azimuth', 'background-attachment', 'background-color',
+ 'background-image', 'background-position', 'background-repeat',
+ 'background', 'black', 'blue', 'border-bottom-color',
+ 'border-bottom-style', 'border-bottom-width', 'border-left-color',
+ 'border-left-style', 'border-left-width', 'border-right',
+ 'border-right-color', 'border-right-style', 'border-right-width',
+ 'border-top-color', 'border-top-style',
+ 'border-top-width','border-bottom', 'border-collapse',
+ 'border-left', 'border-width', 'border-color', 'border-spacing',
+ 'border-style', 'border-top', 'border', 'caption-side', 'clear',
+ 'clip', 'color', 'content', 'counter-increment', 'counter-reset',
+ 'cue-after', 'cue-before', 'cue', 'cursor', 'direction', 'display',
+ 'elevation', 'empty-cells', 'float', 'font-family', 'font-size',
+ 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant',
+ 'font-weight', 'font', 'line-height', 'letter-spacing',
+ 'list-style', 'list-style-image', 'list-style-position',
+ 'list-style-type', 'margin-bottom', 'margin-left', 'margin-right',
+ 'margin-top', 'margin', 'marker-offset', 'marks', 'max-height',
+ 'max-width', 'min-height', 'min-width', 'orphans', 'outline',
+ 'outline-color', 'outline-style', 'outline-width', 'overflow',
+ 'padding-bottom', 'padding-left', 'padding-right', 'padding-top',
+ 'padding', 'page', 'page-break-after', 'page-break-before',
+ 'page-break-inside', 'pause-after', 'pause-before', 'pause',
+ 'pitch', 'pitch-range', 'play-during', 'position', 'quotes',
+ 'richness', 'right', 'size', 'speak-header', 'speak-numeral',
+ 'speak-punctuation', 'speak', 'speech-rate', 'stress',
+ 'table-layout', 'text-align', 'text-decoration', 'text-indent',
+ 'text-shadow', 'text-transform', 'top', 'unicode-bidi',
+ 'vertical-align', 'visibility', 'voice-family', 'volume',
+ 'white-space', 'widows', 'width', 'word-spacing', 'z-index',
+ 'bottom', 'left', 'height'
+ ),
+ 2 => array(
+ 'above', 'absolute', 'always', 'armenian', 'aural', 'auto',
+ 'avoid', 'baseline', 'behind', 'below', 'bidi-override', 'blink',
+ 'block', 'bold', 'bolder', 'both', 'capitalize', 'center-left',
+ 'center-right', 'center', 'circle', 'cjk-ideographic',
+ 'close-quote', 'collapse', 'condensed', 'continuous', 'crop',
+ 'crosshair', 'cross', 'cursive', 'dashed', 'decimal-leading-zero',
+ 'decimal', 'default', 'digits', 'disc', 'dotted', 'double',
+ 'e-resize', 'embed', 'extra-condensed', 'extra-expanded',
+ 'expanded', 'fantasy', 'far-left', 'far-right', 'faster', 'fast',
+ 'fixed', 'fuchsia', 'georgian', 'gray', 'green', 'groove',
+ 'hebrew', 'help', 'hidden', 'hide', 'higher', 'high',
+ 'hiragana-iroha', 'hiragana', 'icon', 'inherit', 'inline-table',
+ 'inline', 'inset', 'inside', 'invert', 'italic', 'justify',
+ 'katakana-iroha', 'katakana', 'landscape', 'larger', 'large',
+ 'left-side', 'leftwards', 'level', 'lighter', 'lime',
+ 'line-through', 'list-item', 'loud', 'lower-alpha', 'lower-greek',
+ 'lower-roman', 'lowercase', 'ltr', 'lower', 'low', 'maroon',
+ 'medium', 'message-box', 'middle', 'mix', 'monospace', 'n-resize',
+ 'narrower', 'navy', 'ne-resize', 'no-close-quote',
+ 'no-open-quote', 'no-repeat', 'none', 'normal', 'nowrap',
+ 'nw-resize', 'oblique', 'olive', 'once', 'open-quote', 'outset',
+ 'outside', 'overline', 'pointer', 'portrait', 'purple', 'px',
+ 'red', 'relative', 'repeat-x', 'repeat-y', 'repeat', 'rgb',
+ 'ridge', 'right-side', 'rightwards', 's-resize', 'sans-serif',
+ 'scroll', 'se-resize', 'semi-condensed', 'semi-expanded',
+ 'separate', 'serif', 'show', 'silent', 'silver', 'slow', 'slower',
+ 'small-caps', 'small-caption', 'smaller', 'soft', 'solid',
+ 'spell-out', 'square', 'static', 'status-bar', 'super',
+ 'sw-resize', 'table-caption', 'table-cell', 'table-column',
+ 'table-column-group', 'table-footer-group', 'table-header-group',
+ 'table-row', 'table-row-group', 'teal', 'text', 'text-bottom',
+ 'text-top', 'thick', 'thin', 'transparent', 'ultra-condensed',
+ 'ultra-expanded', 'underline', 'upper-alpha', 'upper-latin',
+ 'upper-roman', 'uppercase', 'url', 'visible', 'w-resize', 'wait',
+ 'white', 'wider', 'x-fast', 'x-high', 'x-large', 'x-loud',
+ 'x-low', 'x-small', 'x-soft', 'xx-large', 'xx-small', 'yellow',
+ 'yes'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '{', '}', ':', ';',
+ '>', '+', '*', ',', '^', '='
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ 2 => true
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #000000; font-weight: bold;',
+ 2 => 'color: #993333;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #a1a100;',
+ 2 => 'color: #ff0000; font-style: italic;',
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #00AA00;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #00AA00;'
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #cc00cc;',
+ 1 => 'color: #6666ff;',
+ 2 => 'color: #3333ff;',
+ 3 => 'color: #933;'
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ //DOM Node ID
+ 0 => '\#[a-zA-Z0-9\-_]+(?:\\\\:[a-zA-Z0-9\-_]+)*',
+ //CSS classname
+ 1 => '\.(?!\d)[a-zA-Z0-9\-_]+(?:\\\\:[a-zA-Z0-9\-_]+)*\b(?=[\{\.#\s,:].|<\|)',
+ //CSS Pseudo classes
+ //note: & is needed for &gt; (i.e. > )
+ 2 => '(?<!\\\\):(?!\d)[a-zA-Z0-9\-]+\b(?:\s*(?=[\{\.#a-zA-Z,:+*&](.|\n)|<\|))',
+ //Measurements
+ 3 => '[+\-]?(\d+|(\d*\.\d+))(em|ex|pt|px|cm|in|%)',
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 4,
+ 'PARSER_CONTROL' => array(
+ 'KEYWORDS' => array(
+ 'DISALLOWED_AFTER' => '(?![a-zA-Z0-9_\|%\\-&\.])'
+ )
+ )
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/d.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/d.php
new file mode 100644
index 000000000..691091809
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/d.php
@@ -0,0 +1,272 @@
+<?php
+/*************************************************************************************
+ * d.php
+ * -----
+ * Author: Thomas Kuehne (thomas@kuehne.cn)
+ * Copyright: (c) 2005 Thomas Kuehne (http://thomas.kuehne.cn/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2005/04/22
+ *
+ * D language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2005/04/22 (0.0.2)
+ * - added _d_* and sizeof/ptrdiff_t
+ * 2005/04/20 (0.0.1)
+ * - First release
+ *
+ * TODO (updated 2005/04/22)
+ * -------------------------
+ * * nested comments
+ * * correct handling of r"" and ``
+ * * correct handling of ... and ..
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'D',
+ 'COMMENT_SINGLE' => array(2 => '///', 1 => '//'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'COMMENT_REGEXP' => array(
+ // doxygen comments
+ 3 => '#/\*\*(?![\*\/]).*\*/#sU',
+ // raw strings
+ 4 => '#r"[^"]*"#s',
+ // Script Style interpreter comment
+ 5 => "/\A#!(?=\\/).*?$/m"
+ ),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"', "'"),
+ 'ESCAPE_CHAR' => '',
+ 'ESCAPE_REGEXP' => array(
+ //Simple Single Char Escapes
+ 1 => "#\\\\[abfnrtv\\'\"?\n\\\\]#i",
+ //Hexadecimal Char Specs
+ 2 => "#\\\\x[\da-fA-F]{2}#",
+ //Hexadecimal Char Specs
+ 3 => "#\\\\u[\da-fA-F]{4}#",
+ //Hexadecimal Char Specs
+ 4 => "#\\\\U[\da-fA-F]{8}#",
+ //Octal Char Specs
+ 5 => "#\\\\[0-7]{1,3}#",
+ //Named entity escapes
+ /*6 => "#\\\\&(?:quot|amp|lt|gt|OElig|oelig|Scaron|scaron|Yuml|circ|tilde|".
+ "ensp|emsp|thinsp|zwnj|zwj|lrm|rlm|ndash|mdash|lsquo|rsquo|sbquo|".
+ "ldquo|rdquo|bdquo|dagger|Dagger|permil|lsaquo|rsaquo|euro|nbsp|".
+ "iexcl|cent|pound|curren|yen|brvbar|sect|uml|copy|ordf|laquo|not|".
+ "shy|reg|macr|deg|plusmn|sup2|sup3|acute|micro|para|middot|cedil|".
+ "sup1|ordm|raquo|frac14|frac12|frac34|iquest|Agrave|Aacute|Acirc|".
+ "Atilde|Auml|Aring|AElig|Ccedil|Egrave|Eacute|Ecirc|Euml|Igrave|".
+ "Iacute|Icirc|Iuml|ETH|Ntilde|Ograve|Oacute|Ocirc|Otilde|Ouml|".
+ "times|Oslash|Ugrave|Uacute|Ucirc|Uuml|Yacute|THORN|szlig|agrave|".
+ "aacute|acirc|atilde|auml|aring|aelig|ccedil|egrave|eacute|ecirc|".
+ "euml|igrave|iacute|icirc|iuml|eth|ntilde|ograve|oacute|ocirc|".
+ "otilde|ouml|divide|oslash|ugrave|uacute|ucirc|uuml|yacute|thorn|".
+ "yuml|fnof|Alpha|Beta|Gamma|Delta|Epsilon|Zeta|Eta|Theta|Iota|".
+ "Kappa|Lambda|Mu|Nu|Xi|Omicron|Pi|Rho|Sigma|Tau|Upsilon|Phi|Chi|".
+ "Psi|Omega|alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|".
+ "kappa|lambda|mu|nu|xi|omicron|pi|rho|sigmaf|sigma|tau|upsilon|".
+ "phi|chi|psi|omega|thetasym|upsih|piv|bull|hellip|prime|Prime|".
+ "oline|frasl|weierp|image|real|trade|alefsym|larr|uarr|rarr|darr|".
+ "harr|crarr|lArr|uArr|rArr|dArr|hArr|forall|part|exist|empty|".
+ "nabla|isin|notin|ni|prod|sum|minus|lowast|radic|prop|infin|ang|".
+ "and|or|cap|cup|int|there4|sim|cong|asymp|ne|equiv|le|ge|sub|sup|".
+ "nsub|sube|supe|oplus|otimes|perp|sdot|lceil|rceil|lfloor|rfloor|".
+ "lang|rang|loz|spades|clubs|hearts|diams);#",*/
+ // optimized:
+ 6 => "#\\\\&(?:A(?:Elig|acute|circ|grave|lpha|ring|tilde|uml)|Beta|".
+ "C(?:cedil|hi)|D(?:agger|elta)|E(?:TH|acute|circ|grave|psilon|ta|uml)|".
+ "Gamma|I(?:acute|circ|grave|ota|uml)|Kappa|Lambda|Mu|N(?:tilde|u)|".
+ "O(?:Elig|acute|circ|grave|m(?:ega|icron)|slash|tilde|uml)|".
+ "P(?:hi|i|rime|si)|Rho|S(?:caron|igma)|T(?:HORN|au|heta)|".
+ "U(?:acute|circ|grave|psilon|uml)|Xi|Y(?:acute|uml)|Zeta|".
+ "a(?:acute|c(?:irc|ute)|elig|grave|l(?:efsym|pha)|mp|n[dg]|ring|".
+ "symp|tilde|uml)|b(?:dquo|eta|rvbar|ull)|c(?:ap|cedil|e(?:dil|nt)|".
+ "hi|irc|lubs|o(?:ng|py)|rarr|u(?:p|rren))|d(?:Arr|a(?:gger|rr)|".
+ "e(?:g|lta)|i(?:ams|vide))|e(?:acute|circ|grave|m(?:pty|sp)|nsp|".
+ "psilon|quiv|t[ah]|u(?:ml|ro)|xist)|f(?:nof|orall|ra(?:c(?:1[24]|34)|sl))|".
+ "g(?:amma|e|t)|h(?:Arr|arr|e(?:arts|llip))|i(?:acute|circ|excl|grave|mage|".
+ "n(?:fin|t)|ota|quest|sin|uml)|kappa|l(?:Arr|a(?:mbda|ng|quo|rr)|ceil|".
+ "dquo|e|floor|o(?:wast|z)|rm|s(?:aquo|quo)|t)|m(?:acr|dash|".
+ "i(?:cro|ddot|nus)|u)|n(?:abla|bsp|dash|e|i|ot(?:in)?|sub|tilde|u)|".
+ "o(?:acute|circ|elig|grave|line|m(?:ega|icron)|plus|r(?:d[fm])?|".
+ "slash|ti(?:lde|mes)|uml)|p(?:ar[at]|er(?:mil|p)|hi|iv?|lusmn|ound|".
+ "r(?:ime|o[dp])|si)|quot|r(?:Arr|a(?:dic|ng|quo|rr)|ceil|dquo|e(?:al|g)|".
+ "floor|ho|lm|s(?:aquo|quo))|s(?:bquo|caron|dot|ect|hy|i(?:gmaf?|m)|".
+ "pades|u(?:be?|m|p[123e]?)|zlig)|t(?:au|h(?:e(?:re4|ta(?:sym)?)|insp|".
+ "orn)|i(?:lde|mes)|rade)|u(?:Arr|a(?:cute|rr)|circ|grave|ml|".
+ "psi(?:h|lon)|uml)|weierp|xi|y(?:acute|en|uml)|z(?:eta|w(?:j|nj)));#",
+ ),
+ 'HARDQUOTE' => array('`', '`'),
+ 'HARDESCAPE' => array(),
+ 'NUMBERS' =>
+ GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_INT_CSTYLE | GESHI_NUMBER_BIN_PREFIX_0B |
+ GESHI_NUMBER_OCT_PREFIX | GESHI_NUMBER_HEX_PREFIX | GESHI_NUMBER_FLT_NONSCI |
+ GESHI_NUMBER_FLT_NONSCI_F | GESHI_NUMBER_FLT_SCI_SHORT | GESHI_NUMBER_FLT_SCI_ZERO,
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'break', 'case', 'continue', 'do', 'else',
+ 'for', 'foreach', 'goto', 'if', 'return',
+ 'switch', 'while'
+ ),
+ 2 => array(
+ 'alias', 'asm', 'assert', 'body', 'cast',
+ 'catch', 'default', 'delegate', 'delete',
+ 'extern', 'false', 'finally', 'function',
+ 'import', 'in', 'inout', 'interface',
+ 'invariant', 'is', 'mixin', 'module', 'new',
+ 'null', 'out', 'pragma', 'ref', 'super', 'this',
+ 'throw', 'true', 'try', 'typedef', 'typeid',
+ 'typeof', 'union', 'with'
+ ),
+ 3 => array(
+ 'ArrayBoundsError', 'AssertError',
+ 'ClassInfo', 'Error', 'Exception',
+ 'Interface', 'ModuleInfo', 'Object',
+ 'OutOfMemoryException', 'SwitchError',
+ 'TypeInfo', '_d_arrayappend',
+ '_d_arrayappendb', '_d_arrayappendc',
+ '_d_arrayappendcb', '_d_arraycast',
+ '_d_arraycast_frombit', '_d_arraycat',
+ '_d_arraycatb', '_d_arraycatn',
+ '_d_arraycopy', '_d_arraycopybit',
+ '_d_arraysetbit', '_d_arraysetbit2',
+ '_d_arraysetlength', '_d_arraysetlengthb',
+ '_d_callfinalizer',
+ '_d_create_exception_object',
+ '_d_criticalenter', '_d_criticalexit',
+ '_d_delarray', '_d_delclass',
+ '_d_delinterface', '_d_delmemory',
+ '_d_dynamic_cast', '_d_exception',
+ '_d_exception_filter', '_d_framehandler',
+ '_d_interface_cast', '_d_interface_vtbl',
+ '_d_invariant', '_d_isbaseof',
+ '_d_isbaseof2', '_d_local_unwind',
+ '_d_monitorenter', '_d_monitorexit',
+ '_d_monitorrelease', '_d_monitor_epilog',
+ '_d_monitor_handler', '_d_monitor_prolog',
+ '_d_new', '_d_newarrayi', '_d_newbitarray',
+ '_d_newclass', '_d_obj_cmp', '_d_obj_eq',
+ '_d_OutOfMemory', '_d_switch_dstring',
+ '_d_switch_string', '_d_switch_ustring',
+ '_d_throw',
+ ),
+ 4 => array(
+ 'abstract', 'align', 'auto', 'bit', 'bool',
+ 'byte', 'cdouble', 'cent', 'cfloat', 'char',
+ 'class', 'const', 'creal', 'dchar', 'debug',
+ 'deprecated', 'double', 'enum', 'export',
+ 'final', 'float', 'idouble', 'ifloat', 'int',
+ 'ireal', 'long', 'override', 'package',
+ 'private', 'protected', 'ptrdiff_t',
+ 'public', 'real', 'short', 'size_t',
+ 'static', 'struct', 'synchronized',
+ 'template', 'ubyte', 'ucent', 'uint',
+ 'ulong', 'unittest', 'ushort', 'version',
+ 'void', 'volatile', 'wchar'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '[', ']', '{', '}', '?', '!', ';', ':', ',', '...', '..',
+ '+', '-', '*', '/', '%', '&', '|', '^', '<', '>', '=', '~',
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ 2 => true,
+ 3 => true,
+ 4 => true
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #b1b100;',
+ 2 => 'color: #000000; font-weight: bold;',
+ 3 => 'color: #aaaadd; font-weight: bold;',
+ 4 => 'color: #993333;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080; font-style: italic;',
+ 2 => 'color: #009933; font-style: italic;',
+ 3 => 'color: #009933; font-style: italic;',
+ 4 => 'color: #ff0000;',
+ 5 => 'color: #0040ff;',
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;',
+ 1 => 'color: #000099; font-weight: bold;',
+ 2 => 'color: #660099; font-weight: bold;',
+ 3 => 'color: #660099; font-weight: bold;',
+ 4 => 'color: #660099; font-weight: bold;',
+ 5 => 'color: #006699; font-weight: bold;',
+ 6 => 'color: #666699; font-weight: bold; font-style: italic;',
+ 'HARD' => '',
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;',
+ 'HARD' => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #0000dd;',
+ GESHI_NUMBER_BIN_PREFIX_0B => 'color: #208080;',
+ GESHI_NUMBER_OCT_PREFIX => 'color: #208080;',
+ GESHI_NUMBER_HEX_PREFIX => 'color: #208080;',
+ GESHI_NUMBER_FLT_SCI_SHORT => 'color:#800080;',
+ GESHI_NUMBER_FLT_SCI_ZERO => 'color:#800080;',
+ GESHI_NUMBER_FLT_NONSCI_F => 'color:#800080;',
+ GESHI_NUMBER_FLT_NONSCI => 'color:#800080;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #006600;',
+ 2 => 'color: #006600;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.',
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/dcs.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/dcs.php
new file mode 100644
index 000000000..0f6bad372
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/dcs.php
@@ -0,0 +1,185 @@
+<?php
+/*************************************************************************************
+ * dcs.php
+ * ---------------------------------
+ * Author: Stelio Passaris (GeSHi@stelio.net)
+ * Copyright: (c) 2009 Stelio Passaris (http://stelio.net/stiki/GeSHi)
+ * Release Version: 1.0.8.4
+ * Date Started: 2009/01/20
+ *
+ * DCS language file for GeSHi.
+ *
+ * DCS (Data Conversion System) is part of Sungard iWorks' Prophet suite and is used
+ * to convert external data files into a format that Prophet and Glean can read.
+ * See http://www.prophet-web.com/Products/DCS for product information.
+ * This language file is current for DCS version 7.3.2.
+ *
+ * Note that the DCS IDE does not handle escape characters correctly. The IDE thinks
+ * that a backslash '\' is an escape character, but in practice the backslash does
+ * not escape the string delimiter character '"' when the program runs. A '\\' is
+ * escaped to '\' when the program runs, but '\"' is treated as '\' at the end of a
+ * string. Therefore in this language file, we do not recognise the backslash as an
+ * escape character. For the purposes of GeSHi, there is no character escaping.
+ *
+ * CHANGES
+ * -------
+ * 2009/02/21 (1.0.8.3)
+ * - First Release
+ *
+ * TODO (updated 2009/02/21)
+ * -------------------------
+ * * Add handling for embedded C code. Note that the DCS IDE does not highlight C code
+ * correctly, but that doesn't mean that we can't! This will be included for a
+ * stable release of GeSHi of version 1.1.x (or later) that allows for highlighting
+ * embedded code using that code's appropriate language file.
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'DCS',
+ 'COMMENT_SINGLE' => array(
+ 1 => ';'
+ ),
+ 'COMMENT_MULTI' => array(
+ ),
+ 'HARDQUOTE' => array(
+ ),
+ 'HARDESCAPE' => '',
+ 'COMMENT_REGEXP' => array(
+ // Highlight embedded C code in a separate color:
+ 2 => '/\bINSERT_C_CODE\b.*?\bEND_C_CODE\b/ims'
+ ),
+ 'CASE_KEYWORDS' => GESHI_CAPS_UPPER,
+ 'QUOTEMARKS' => array(
+ '"'
+ ),
+ 'ESCAPE_CHAR' => '',
+ 'ESCAPE_REGEXP' => '',
+ 'NUMBERS' =>
+ GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_FLT_SCI_ZERO,
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'abs', 'ascii_value', 'bit_value', 'blank_date', 'calc_unit_values', 'cm',
+ 'complete_months', 'complete_years', 'correct', 'create_input_file', 'cy',
+ 'date_convert', 'day', 'del_output_separator',
+ 'delete_existing_output_files', 'div', 'ex', 'exact_years', 'exp',
+ 'extract_date', 'failed_validation', 'file_number', 'first_record',
+ 'fract', 'fund_fac_a', 'fund_fac_b', 'fund_fac_c', 'fund_fac_d',
+ 'fund_fac_e', 'fund_fac_f', 'fund_fac_g', 'fund_fac_h', 'fund_fac_i',
+ 'fund_fac_j', 'fund_fac_k', 'fund_fac_l', 'fund_fac_m', 'fund_fac_n',
+ 'fund_fac_o', 'fund_fac_p', 'fund_fac_q', 'fund_fac_r', 'fund_fac_s',
+ 'fund_fac_t', 'fund_fac_u', 'fund_fac_v', 'fund_fac_w', 'fund_fac_x',
+ 'fund_fac_y', 'fund_fac_z', 'group', 'group_record',
+ 'input_file_date_time', 'input_file_extension', 'input_file_location',
+ 'input_file_name', 'int', 'invalid', 'last_record', 'leap_year', 'len',
+ 'ln', 'log', 'main_format_name', 'max', 'max_num_subrecords', 'message',
+ 'min', 'mod', 'month', 'months_add', 'months_sub', 'nearest_months',
+ 'nearest_years', 'next_record', 'nm', 'no_of_current_records',
+ 'no_of_records', 'numval', 'ny', 'output', 'output_array_as_constants',
+ 'output_file_path', 'output_record', 'pmdf_output', 'previous', 'rand',
+ 're_start', 'read_generic_table', 'read_generic_table_text',
+ 'read_input_footer', 'read_input_footer_text', 'read_input_header',
+ 'read_input_header_text', 'record_count', 'record_suppressed', 'round',
+ 'round_down', 'round_near', 'round_up', 'run_dcs_program', 'run_parameter',
+ 'run_parameter_text', 'set_main_record', 'set_num_subrecords',
+ 'sort_array', 'sort_current_records', 'sort_input', 'strval', 'substr',
+ 'summarise', 'summarise_record', 'summarise_units',
+ 'summarise_units_record', 'suppress_record', 'table_correct',
+ 'table_validate', 'terminate', 'time', 'today', 'trim', 'ubound', 'year',
+ 'years_add', 'years_sub'
+ ),
+ 2 => array(
+ 'and', 'as', 'begin', 'boolean', 'byref', 'byval', 'call', 'case', 'date',
+ 'default', 'do', 'else', 'elseif', 'end_c_code', 'endfor', 'endfunction',
+ 'endif', 'endproc', 'endswitch', 'endwhile', 'eq',
+ 'explicit_declarations', 'false', 'for', 'from', 'function', 'ge', 'gt',
+ 'if', 'insert_c_code', 'integer', 'le', 'loop', 'lt', 'ne', 'not',
+ 'number', 'or', 'private', 'proc', 'public', 'quitloop', 'return',
+ 'short', 'step', 'switch', 'text', 'then', 'to', 'true', 'while'
+ ),
+ 3 => array(
+ // These keywords are not highlighted by the DCS IDE but we may as well
+ // keep track of them anyway:
+ 'mp_file', 'odbc_file'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '[', ']',
+ '=', '<', '>',
+ '+', '-', '*', '/', '^',
+ ':', ','
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: red;',
+ 2 => 'color: blue;',
+ 3 => 'color: black;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: black; background-color: silver;',
+ // Colors for highlighting embedded C code:
+ 2 => 'color: maroon; background-color: pink;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: black;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: green;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: green;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: black;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ ),
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 4
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/delphi.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/delphi.php
new file mode 100644
index 000000000..9d7ad7e7d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/delphi.php
@@ -0,0 +1,289 @@
+<?php
+/*************************************************************************************
+ * delphi.php
+ * ----------
+ * Author: J�rja Norbert (jnorbi@vipmail.hu), Benny Baumann (BenBE@omorphia.de)
+ * Copyright: (c) 2004 J�rja Norbert, Benny Baumann (BenBE@omorphia.de), Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/07/26
+ *
+ * Delphi (Object Pascal) language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * 2005/11/19 (1.0.3)
+ * - Updated the very incomplete keyword and type lists
+ * 2005/09/03 (1.0.2)
+ * - Added support for hex numbers and string entities
+ * 2004/11/27 (1.0.1)
+ * - Added support for multiple object splitters
+ * 2004/10/27 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Delphi',
+ 'COMMENT_SINGLE' => array(1 => '//'),
+ 'COMMENT_MULTI' => array('(*' => '*)', '{' => '}'),
+ //Compiler directives
+ 'COMMENT_REGEXP' => array(2 => '/\\{\\$.*?}|\\(\\*\\$.*?\\*\\)/U'),
+ 'CASE_KEYWORDS' => 0,
+ 'QUOTEMARKS' => array("'"),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'Abstract', 'And', 'Array', 'As', 'Asm', 'At', 'Begin', 'Case',
+ 'Class', 'Const', 'Constructor', 'Contains', 'Destructor',
+ 'DispInterface', 'Div', 'Do', 'DownTo', 'Else', 'End', 'Except',
+ 'Export', 'Exports', 'External', 'File', 'Finalization', 'Finally',
+ 'For', 'Function', 'Goto', 'If', 'Implementation', 'In', 'Inherited',
+ 'Initialization', 'Inline', 'Interface', 'Is', 'Label', 'Library',
+ 'Mod', 'Not', 'Object', 'Of', 'On', 'Or', 'Overload', 'Override',
+ 'Package', 'Packed', 'Private', 'Procedure', 'Program', 'Property',
+ 'Protected', 'Public', 'Published', 'Raise', 'Record', 'Register',
+ 'Repeat', 'Requires', 'Resourcestring', 'Set', 'Shl', 'Shr', 'Then',
+ 'ThreadVar', 'To', 'Try', 'Type', 'Unit', 'Until', 'Uses', 'Var',
+ 'Virtual', 'While', 'With', 'Xor', 'assembler', 'far',
+ 'near', 'pascal', 'register', 'cdecl', 'safecall', 'stdcall', 'varargs'
+ ),
+ 2 => array(
+ 'nil', 'false', 'self', 'true', 'var', 'type', 'const'
+ ),
+ 3 => array(
+ 'Abs', 'AcquireExceptionObject', 'Addr', 'AnsiToUtf8', 'Append', 'ArcTan',
+ 'Assert', 'AssignFile', 'Assigned', 'BeginThread', 'BlockRead',
+ 'BlockWrite', 'Break', 'ChDir', 'Chr', 'Close', 'CloseFile',
+ 'CompToCurrency', 'CompToDouble', 'Concat', 'Continue', 'Copy', 'Cos',
+ 'Dec', 'Delete', 'Dispose', 'DoubleToComp', 'EndThread', 'EnumModules',
+ 'EnumResourceModules', 'Eof', 'Eoln', 'Erase', 'ExceptAddr',
+ 'ExceptObject', 'Exclude', 'Exit', 'Exp', 'FilePos', 'FileSize',
+ 'FillChar', 'Finalize', 'FindClassHInstance', 'FindHInstance',
+ 'FindResourceHInstance', 'Flush', 'Frac', 'FreeMem', 'Get8087CW',
+ 'GetDir', 'GetLastError', 'GetMem', 'GetMemoryManager',
+ 'GetModuleFileName', 'GetVariantManager', 'Halt', 'Hi', 'High',
+ 'IOResult', 'Inc', 'Include', 'Initialize', 'Insert', 'Int',
+ 'IsMemoryManagerSet', 'IsVariantManagerSet', 'Length', 'Ln', 'Lo', 'Low',
+ 'MkDir', 'Move', 'New', 'Odd', 'OleStrToStrVar', 'OleStrToString', 'Ord',
+ 'PUCS4Chars', 'ParamCount', 'ParamStr', 'Pi', 'Pos', 'Pred', 'Ptr',
+ 'Random', 'Randomize', 'Read', 'ReadLn', 'ReallocMem',
+ 'ReleaseExceptionObject', 'Rename', 'Reset', 'Rewrite', 'RmDir', 'Round',
+ 'RunError', 'Seek', 'SeekEof', 'SeekEoln', 'Set8087CW', 'SetLength',
+ 'SetLineBreakStyle', 'SetMemoryManager', 'SetString', 'SetTextBuf',
+ 'SetVariantManager', 'Sin', 'SizeOf', 'Slice', 'Sqr', 'Sqrt', 'Str',
+ 'StringOfChar', 'StringToOleStr', 'StringToWideChar', 'Succ', 'Swap',
+ 'Trunc', 'Truncate', 'TypeInfo', 'UCS4StringToWideString', 'UTF8Decode',
+ 'UTF8Encode', 'UnicodeToUtf8', 'UniqueString', 'UpCase', 'Utf8ToAnsi',
+ 'Utf8ToUnicode', 'Val', 'VarArrayRedim', 'VarClear',
+ 'WideCharLenToStrVar', 'WideCharLenToString', 'WideCharToStrVar',
+ 'WideCharToString', 'WideStringToUCS4String', 'Write', 'WriteLn',
+
+ 'Abort', 'AddExitProc', 'AddTerminateProc', 'AdjustLineBreaks', 'AllocMem',
+ 'AnsiCompareFileName', 'AnsiCompareStr', 'AnsiCompareText',
+ 'AnsiDequotedStr', 'AnsiExtractQuotedStr', 'AnsiLastChar',
+ 'AnsiLowerCase', 'AnsiLowerCaseFileName', 'AnsiPos', 'AnsiQuotedStr',
+ 'AnsiSameStr', 'AnsiSameText', 'AnsiStrComp', 'AnsiStrIComp',
+ 'AnsiStrLComp', 'AnsiStrLIComp', 'AnsiStrLastChar', 'AnsiStrLower',
+ 'AnsiStrPos', 'AnsiStrRScan', 'AnsiStrScan', 'AnsiStrUpper',
+ 'AnsiUpperCase', 'AnsiUpperCaseFileName', 'AppendStr', 'AssignStr',
+ 'Beep', 'BoolToStr', 'ByteToCharIndex', 'ByteToCharLen', 'ByteType',
+ 'CallTerminateProcs', 'ChangeFileExt', 'CharLength', 'CharToByteIndex',
+ 'CharToByteLen', 'CompareMem', 'CompareStr', 'CompareText', 'CreateDir',
+ 'CreateGUID', 'CurrToStr', 'CurrToStrF', 'CurrentYear', 'Date',
+ 'DateTimeToFileDate', 'DateTimeToStr', 'DateTimeToString',
+ 'DateTimeToSystemTime', 'DateTimeToTimeStamp', 'DateToStr', 'DayOfWeek',
+ 'DecodeDate', 'DecodeDateFully', 'DecodeTime', 'DeleteFile',
+ 'DirectoryExists', 'DiskFree', 'DiskSize', 'DisposeStr', 'EncodeDate',
+ 'EncodeTime', 'ExceptionErrorMessage', 'ExcludeTrailingBackslash',
+ 'ExcludeTrailingPathDelimiter', 'ExpandFileName', 'ExpandFileNameCase',
+ 'ExpandUNCFileName', 'ExtractFileDir', 'ExtractFileDrive',
+ 'ExtractFileExt', 'ExtractFileName', 'ExtractFilePath',
+ 'ExtractRelativePath', 'ExtractShortPathName', 'FileAge', 'FileClose',
+ 'FileCreate', 'FileDateToDateTime', 'FileExists', 'FileGetAttr',
+ 'FileGetDate', 'FileIsReadOnly', 'FileOpen', 'FileRead', 'FileSearch',
+ 'FileSeek', 'FileSetAttr', 'FileSetDate', 'FileSetReadOnly', 'FileWrite',
+ 'FinalizePackage', 'FindClose', 'FindCmdLineSwitch', 'FindFirst',
+ 'FindNext', 'FloatToCurr', 'FloatToDateTime', 'FloatToDecimal',
+ 'FloatToStr', 'FloatToStrF', 'FloatToText', 'FloatToTextFmt',
+ 'FmtLoadStr', 'FmtStr', 'ForceDirectories', 'Format', 'FormatBuf',
+ 'FormatCurr', 'FormatDateTime', 'FormatFloat', 'FreeAndNil',
+ 'GUIDToString', 'GetCurrentDir', 'GetEnvironmentVariable',
+ 'GetFileVersion', 'GetFormatSettings', 'GetLocaleFormatSettings',
+ 'GetModuleName', 'GetPackageDescription', 'GetPackageInfo', 'GetTime',
+ 'IncAMonth', 'IncMonth', 'IncludeTrailingBackslash',
+ 'IncludeTrailingPathDelimiter', 'InitializePackage', 'IntToHex',
+ 'IntToStr', 'InterlockedDecrement', 'InterlockedExchange',
+ 'InterlockedExchangeAdd', 'InterlockedIncrement', 'IsDelimiter',
+ 'IsEqualGUID', 'IsLeapYear', 'IsPathDelimiter', 'IsValidIdent',
+ 'Languages', 'LastDelimiter', 'LoadPackage', 'LoadStr', 'LowerCase',
+ 'MSecsToTimeStamp', 'NewStr', 'NextCharIndex', 'Now', 'OutOfMemoryError',
+ 'QuotedStr', 'RaiseLastOSError', 'RaiseLastWin32Error', 'RemoveDir',
+ 'RenameFile', 'ReplaceDate', 'ReplaceTime', 'SafeLoadLibrary',
+ 'SameFileName', 'SameText', 'SetCurrentDir', 'ShowException', 'Sleep',
+ 'StrAlloc', 'StrBufSize', 'StrByteType', 'StrCat', 'StrCharLength',
+ 'StrComp', 'StrCopy', 'StrDispose', 'StrECopy', 'StrEnd', 'StrFmt',
+ 'StrIComp', 'StrLCat', 'StrLComp', 'StrLCopy', 'StrLFmt', 'StrLIComp',
+ 'StrLen', 'StrLower', 'StrMove', 'StrNew', 'StrNextChar', 'StrPCopy',
+ 'StrPLCopy', 'StrPas', 'StrPos', 'StrRScan', 'StrScan', 'StrToBool',
+ 'StrToBoolDef', 'StrToCurr', 'StrToCurrDef', 'StrToDate', 'StrToDateDef',
+ 'StrToDateTime', 'StrToDateTimeDef', 'StrToFloat', 'StrToFloatDef',
+ 'StrToInt', 'StrToInt64', 'StrToInt64Def', 'StrToIntDef', 'StrToTime',
+ 'StrToTimeDef', 'StrUpper', 'StringReplace', 'StringToGUID', 'Supports',
+ 'SysErrorMessage', 'SystemTimeToDateTime', 'TextToFloat', 'Time',
+ 'TimeStampToDateTime', 'TimeStampToMSecs', 'TimeToStr', 'Trim',
+ 'TrimLeft', 'TrimRight', 'TryEncodeDate', 'TryEncodeTime',
+ 'TryFloatToCurr', 'TryFloatToDateTime', 'TryStrToBool', 'TryStrToCurr',
+ 'TryStrToDate', 'TryStrToDateTime', 'TryStrToFloat', 'TryStrToInt',
+ 'TryStrToInt64', 'TryStrToTime', 'UnloadPackage', 'UpperCase',
+ 'WideCompareStr', 'WideCompareText', 'WideFmtStr', 'WideFormat',
+ 'WideFormatBuf', 'WideLowerCase', 'WideSameStr', 'WideSameText',
+ 'WideUpperCase', 'Win32Check', 'WrapText',
+
+ 'ActivateClassGroup', 'AllocateHwnd', 'BinToHex', 'CheckSynchronize',
+ 'CollectionsEqual', 'CountGenerations', 'DeallocateHwnd', 'EqualRect',
+ 'ExtractStrings', 'FindClass', 'FindGlobalComponent', 'GetClass',
+ 'GroupDescendantsWith', 'HexToBin', 'IdentToInt',
+ 'InitInheritedComponent', 'IntToIdent', 'InvalidPoint',
+ 'IsUniqueGlobalComponentName', 'LineStart', 'ObjectBinaryToText',
+ 'ObjectResourceToText', 'ObjectTextToBinary', 'ObjectTextToResource',
+ 'PointsEqual', 'ReadComponentRes', 'ReadComponentResEx',
+ 'ReadComponentResFile', 'Rect', 'RegisterClass', 'RegisterClassAlias',
+ 'RegisterClasses', 'RegisterComponents', 'RegisterIntegerConsts',
+ 'RegisterNoIcon', 'RegisterNonActiveX', 'SmallPoint', 'StartClassGroup',
+ 'TestStreamFormat', 'UnregisterClass', 'UnregisterClasses',
+ 'UnregisterIntegerConsts', 'UnregisterModuleClasses',
+ 'WriteComponentResFile',
+
+ 'ArcCos', 'ArcCosh', 'ArcCot', 'ArcCotH', 'ArcCsc', 'ArcCscH', 'ArcSec',
+ 'ArcSecH', 'ArcSin', 'ArcSinh', 'ArcTan2', 'ArcTanh', 'Ceil',
+ 'CompareValue', 'Cosecant', 'Cosh', 'Cot', 'CotH', 'Cotan', 'Csc', 'CscH',
+ 'CycleToDeg', 'CycleToGrad', 'CycleToRad', 'DegToCycle', 'DegToGrad',
+ 'DegToRad', 'DivMod', 'DoubleDecliningBalance', 'EnsureRange', 'Floor',
+ 'Frexp', 'FutureValue', 'GetExceptionMask', 'GetPrecisionMode',
+ 'GetRoundMode', 'GradToCycle', 'GradToDeg', 'GradToRad', 'Hypot',
+ 'InRange', 'IntPower', 'InterestPayment', 'InterestRate',
+ 'InternalRateOfReturn', 'IsInfinite', 'IsNan', 'IsZero', 'Ldexp', 'LnXP1',
+ 'Log10', 'Log2', 'LogN', 'Max', 'MaxIntValue', 'MaxValue', 'Mean',
+ 'MeanAndStdDev', 'Min', 'MinIntValue', 'MinValue', 'MomentSkewKurtosis',
+ 'NetPresentValue', 'Norm', 'NumberOfPeriods', 'Payment', 'PeriodPayment',
+ 'Poly', 'PopnStdDev', 'PopnVariance', 'Power', 'PresentValue',
+ 'RadToCycle', 'RadToDeg', 'RadToGrad', 'RandG', 'RandomRange', 'RoundTo',
+ 'SLNDepreciation', 'SYDDepreciation', 'SameValue', 'Sec', 'SecH',
+ 'Secant', 'SetExceptionMask', 'SetPrecisionMode', 'SetRoundMode', 'Sign',
+ 'SimpleRoundTo', 'SinCos', 'Sinh', 'StdDev', 'Sum', 'SumInt',
+ 'SumOfSquares', 'SumsAndSquares', 'Tan', 'Tanh', 'TotalVariance',
+ 'Variance'
+ ),
+ 4 => array(
+ 'AnsiChar', 'AnsiString', 'Bool', 'Boolean', 'Byte', 'ByteBool', 'Cardinal', 'Char',
+ 'Comp', 'Currency', 'DWORD', 'Double', 'Extended', 'Int64', 'Integer', 'IUnknown',
+ 'LongBool', 'LongInt', 'LongWord', 'PAnsiChar', 'PAnsiString', 'PBool', 'PBoolean', 'PByte',
+ 'PByteArray', 'PCardinal', 'PChar', 'PComp', 'PCurrency', 'PDWORD', 'PDate', 'PDateTime',
+ 'PDouble', 'PExtended', 'PInt64', 'PInteger', 'PLongInt', 'PLongWord', 'Pointer', 'PPointer',
+ 'PShortInt', 'PShortString', 'PSingle', 'PSmallInt', 'PString', 'PHandle', 'PVariant', 'PWord',
+ 'PWordArray', 'PWordBool', 'PWideChar', 'PWideString', 'Real', 'Real48', 'ShortInt', 'ShortString',
+ 'Single', 'SmallInt', 'String', 'TClass', 'TDate', 'TDateTime', 'TextFile', 'THandle',
+ 'TObject', 'TTime', 'Variant', 'WideChar', 'WideString', 'Word', 'WordBool'
+ ),
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ ),
+ 'SYMBOLS' => array(
+ 0 => array('(', ')', '[', ']'),
+ 1 => array('.', ',', ':', ';'),
+ 2 => array('@', '^'),
+ 3 => array('=', '+', '-', '*', '/')
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #000000; font-weight: bold;',
+ 2 => 'color: #000000; font-weight: bold;',
+ 3 => 'color: #000066;',
+ 4 => 'color: #000066; font-weight: bold;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080; font-style: italic;',
+ 2 => 'color: #008000; font-style: italic;',
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #ff0000; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #000066;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #0000ff;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #006600;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #9ac;',
+ 1 => 'color: #ff0000;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #000066;',
+ 1 => 'color: #000066;',
+ 2 => 'color: #000066;',
+ 3 => 'color: #000066;'
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ //Hex numbers
+ 0 => '\$[0-9a-fA-F]+',
+ //Characters
+ 1 => '\#(?:\$[0-9a-fA-F]{1,2}|\d{1,3})'
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 2
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/diff.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/diff.php
new file mode 100644
index 000000000..b4703c1d2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/diff.php
@@ -0,0 +1,196 @@
+<?php
+/*************************************************************************************
+ * diff.php
+ * --------
+ * Author: Conny Brunnkvist (conny@fuchsia.se), W. Tasin (tasin@fhm.edu)
+ * Copyright: (c) 2004 Fuchsia Open Source Solutions (http://www.fuchsia.se/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/12/29
+ *
+ * Diff-output language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * 2006/02/27
+ * - changing language file to use matching of start (^) and end ($) (wt)
+ * 2004/12/29 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2006/02/27)
+ * -------------------------
+ *
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+
+$language_data = array (
+ 'LANG_NAME' => 'Diff',
+ 'COMMENT_SINGLE' => array(),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array(),
+ 'ESCAPE_CHAR' => ' ',
+ 'KEYWORDS' => array(
+ 1 => array(
+ '\ No newline at end of file'
+ ),
+// 2 => array(
+// '***************' /* This only seems to works in some cases? */
+// ),
+ ),
+ 'SYMBOLS' => array(
+ ),
+ 'CASE_SENSITIVE' => array(
+ 1 => false,
+// 2 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #aaaaaa; font-style: italic;',
+// 2 => 'color: #dd6611;',
+ ),
+ 'COMMENTS' => array(
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => ''
+ ),
+ 'BRACKETS' => array(
+ 0 => ''
+ ),
+ 'STRINGS' => array(
+ 0 => ''
+ ),
+ 'NUMBERS' => array(
+ 0 => ''
+ ),
+ 'METHODS' => array(
+ 0 => ''
+ ),
+ 'SYMBOLS' => array(
+ 0 => ''
+ ),
+ 'SCRIPT' => array(
+ 0 => ''
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #440088;',
+ 1 => 'color: #991111;',
+ 2 => 'color: #00b000;',
+ 3 => 'color: #888822;',
+ 4 => 'color: #888822;',
+ 5 => 'color: #0011dd;',
+ 6 => 'color: #440088;',
+ 7 => 'color: #991111;',
+ 8 => 'color: #00b000;',
+ 9 => 'color: #888822;',
+ ),
+ ),
+ 'URLS' => array(
+ 1 => '',
+// 2 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(),
+ 'REGEXPS' => array(
+ 0 => "[0-9,]+[acd][0-9,]+",
+ //Removed lines
+ 1 => array(
+ GESHI_SEARCH => '^\\&lt;.*$',
+ GESHI_REPLACE => '\\0',
+ GESHI_MODIFIERS => 'm',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
+ ),
+ //Inserted lines
+ 2 => array(
+ GESHI_SEARCH => '^\\&gt;.*$',
+ GESHI_REPLACE => '\\0',
+ GESHI_MODIFIERS => 'm',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
+ ),
+ //Location line
+ 3 => array(
+ GESHI_SEARCH => '^[\\-]{3}\\s.*$',
+ GESHI_REPLACE => '\\0',
+ GESHI_MODIFIERS => 'm',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
+ ),
+ //Inserted line
+ 4 => array(
+ GESHI_SEARCH => '^(\\+){3}\\s.*$',
+ GESHI_REPLACE => '\\0',
+ GESHI_MODIFIERS => 'm',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
+ ),
+ //Modified line
+ 5 => array(
+ GESHI_SEARCH => '^\\!.*$',
+ GESHI_REPLACE => '\\0',
+ GESHI_MODIFIERS => 'm',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
+ ),
+ //File specification
+ 6 => array(
+ GESHI_SEARCH => '^[\\@]{2}.*$',
+ GESHI_REPLACE => '\\0',
+ GESHI_MODIFIERS => 'm',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
+ ),
+ //Removed line
+ 7 => array(
+ GESHI_SEARCH => '^\\-.*$',
+ GESHI_REPLACE => '\\0',
+ GESHI_MODIFIERS => 'm',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
+ ),
+ //Inserted line
+ 8 => array(
+ GESHI_SEARCH => '^\\+.*$',
+ GESHI_REPLACE => '\\0',
+ GESHI_MODIFIERS => 'm',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
+ ),
+ //File specification
+ 9 => array(
+ GESHI_SEARCH => '^(\\*){3}\\s.*$',
+ GESHI_REPLACE => '\\0',
+ GESHI_MODIFIERS => 'm',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
+ ),
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/div.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/div.php
new file mode 100644
index 000000000..0e249740c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/div.php
@@ -0,0 +1,126 @@
+<?php
+/*************************************************************************************
+ * div.php
+ * ---------------------------------
+ * Author: Gabriel Lorenzo (ermakina@gmail.com)
+ * Copyright: (c) 2005 Gabriel Lorenzo (http://ermakina.gazpachito.net)
+ * Release Version: 1.0.8.4
+ * Date Started: 2005/06/19
+ *
+ * DIV language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2005/06/22 (1.0.0)
+ * - First Release, includes "2nd gen" ELSEIF statement
+ *
+ * TODO (updated 2005/06/22)
+ * -------------------------
+ * - I'm pretty satisfied with this, so nothing for now... :P
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'DIV',
+ 'COMMENT_SINGLE' => array(1 => '//'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_UPPER,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'while','until','to','switch','step','return','repeat','loop','if','from','frame','for','end','elseif',
+ 'else','default','debug','continue','clone','case','break','begin'
+ ),
+ 2 => array(
+ 'xor','whoami','type','sizeof','pointer','or','offset','not','neg','mod','id','dup','and','_ne','_lt',
+ '_le','_gt','_ge','_eq'
+ ),
+ 3 => array(
+ 'setup_program','program','process','private','local','import','global','function','const',
+ 'compiler_options'
+ ),
+ 4 => array(
+ 'word','struct','string','int','byte'
+ ),
+ ),
+ 'SYMBOLS' => array(
+ '(',')','[',']','=','+','-','*','/','!','%','^','&',':',';',',','<','>'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #0040b1;',
+ 2 => 'color: #000000;',
+ 3 => 'color: #000066; font-weight: bold;',
+ 4 => 'color: #993333;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080; font-style: italic;',
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => ''
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #44aa44;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ 0 => 'color: #202020;',
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #44aa44;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/dos.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/dos.php
new file mode 100644
index 000000000..bec3de129
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/dos.php
@@ -0,0 +1,198 @@
+<?php
+/*************************************************************************************
+ * dos.php
+ * -------
+ * Author: Alessandro Staltari (staltari@geocities.com)
+ * Copyright: (c) 2005 Alessandro Staltari (http://www.geocities.com/SiliconValley/Vista/8155/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2005/07/05
+ *
+ * DOS language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * 2005/07/05 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2005/07/05)
+ * -------------------------
+ *
+ * - Highlight pipes and redirection (do we really need this?)
+ * - Add missing keywords.
+ * - Find a good hyperlink for keywords.
+ * - Improve styles.
+ *
+ * KNOWN ISSUES (updated 2005/07/07)
+ * ---------------------------------
+ *
+ * - Doesn't even try to handle spaces in variables name or labels (I can't
+ * find a reliable way to establish if a sting is a name or not, in some
+ * cases it depends on the contex or enviroment status).
+ * - Doesn't handle %%[letter] pseudo variable used inside FOR constructs
+ * (it should be done only into its scope: how to handle variable it?).
+ * - Doesn't handle %~[something] pseudo arguments.
+ * - If the same keyword is placed at the end of the line and the
+ * beginning of the next, the second occourrence is not highlighted
+ * (this should be a GeSHi bug, not related to the language definition).
+ * - I can't avoid to have keyword highlighted even when they are not used
+ * as keywords but, for example, as arguments to the echo command.
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'DOS',
+ 'COMMENT_SINGLE' => array(),
+ 'COMMENT_MULTI' => array(),
+ //DOS comment lines
+ 'COMMENT_REGEXP' => array(1 => "/^\s*@?REM.*$/mi"),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array(),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ /* Flow control keywords */
+ 1 => array(
+ 'if', 'else', 'goto', 'shift',
+ 'for', 'in', 'do',
+ 'call', 'exit'
+ ),
+ /* IF statement keywords */
+ 2 => array(
+ 'not', 'exist', 'errorlevel',
+ 'defined',
+ 'equ', 'neq', 'lss', 'leq', 'gtr', 'geq'
+ ),
+ /* Internal commands */
+ 3 => array(
+ 'cd', 'md', 'rd', 'chdir', 'mkdir', 'rmdir', 'dir',
+ 'del', 'copy', 'move', 'ren', 'rename',
+ 'echo',
+ 'setlocal', 'endlocal', 'set',
+ 'pause',
+ 'pushd', 'popd', 'title', 'verify'
+ ),
+ /* Special files */
+ 4 => array(
+ 'prn', 'nul', 'lpt3', 'lpt2', 'lpt1', 'con',
+ 'com4', 'com3', 'com2', 'com1', 'aux'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '@', '%'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #00b100; font-weight: bold;',
+ 2 => 'color: #000000; font-weight: bold;',
+ 3 => 'color: #b1b100; font-weight: bold;',
+ 4 => 'color: #0000ff; font-weight: bold;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #ff0000; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #33cc33;',
+ 1 => 'color: #33cc33;'
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #b100b1; font-weight: bold;',
+ 1 => 'color: #448844;',
+ 2 => 'color: #448888;'
+ )
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'URLS' => array(
+ 1 => 'http://www.ss64.com/nt/{FNAMEL}.html',
+ 2 => 'http://www.ss64.com/nt/{FNAMEL}.html',
+ 3 => 'http://www.ss64.com/nt/{FNAMEL}.html',
+ 4 => 'http://www.ss64.com/nt/{FNAMEL}.html'
+ ),
+ 'REGEXPS' => array(
+ /* Label */
+ 0 => array(
+/* GESHI_SEARCH => '((?si:[@\s]+GOTO\s+|\s+:)[\s]*)((?<!\n)[^\s\n]*)',*/
+ GESHI_SEARCH => '((?si:[@\s]+GOTO\s+|\s+:)[\s]*)((?<!\n)[^\n]*)',
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => 'si',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => ''
+ ),
+ /* Variable assignement */
+ 1 => array(
+/* GESHI_SEARCH => '(SET[\s]+(?si:\/A[\s]+|\/P[\s]+|))([^=\s\n]+)([\s]*=)',*/
+ GESHI_SEARCH => '(SET[\s]+(?si:\/A[\s]+|\/P[\s]+|))([^=\n]+)([\s]*=)',
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => 'si',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => '\\3'
+ ),
+ /* Arguments or variable evaluation */
+ 2 => array(
+/* GESHI_SEARCH => '(%)([\d*]|[^%\s]*(?=%))((?<!%\d)%|)',*/
+ GESHI_SEARCH => '(%(?:%(?=[a-z0-9]))?)([\d*]|(?:~[adfnpstxz]*(?:$\w+:)?)?[a-z0-9](?!\w)|[^%\n]*(?=%))((?<!%\d)%|)',
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => 'si',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => '\\3'
+ )
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 4,
+ 'PARSER_CONTROL' => array(
+ 'KEYWORDS' => array(
+ 4 => array(
+ 'DISALLOWED_BEFORE' => '(?<!\w)'
+ )
+ )
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/dot.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/dot.php
new file mode 100644
index 000000000..c45a74af7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/dot.php
@@ -0,0 +1,164 @@
+<?php
+/*************************************************************************************
+ * dot.php
+ * ---------------------------------
+ * Author: Adrien Friggeri (adrien@friggeri.net)
+ * Copyright: (c) 2007 Adrien Friggeri (http://www.friggeri.net)
+ * Release Version: 1.0.8.4
+ * Date Started: 2007/05/30
+ *
+ * dot language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2007/05/30 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2007/05/30)
+ * -------------------------
+ * Everything
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'dot',
+ 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'URL', 'arrowhead', 'arrowsize', 'arrowtail', 'bb', 'bgcolor', 'bottomlabel',
+ 'center', 'clusterrank', 'color', 'comment', 'constraint', 'decorate',
+ 'dir', 'distortion', 'fillcolor', 'fixedsize', 'fontcolor',
+ 'fontname', 'fontsize', 'group', 'headclip', 'headlabel', 'headport',
+ 'height', 'id', 'label', 'labelangle', 'labeldistance', 'labelfontcolor',
+ 'labelfontname', 'labelfontsize', 'layer', 'layers', 'margin', 'mclimit',
+ 'minlen', 'nodesep', 'nslimit', 'ordering', 'orientation', 'page',
+ 'pagedir', 'peripheries', 'port_label_distance', 'quantum', 'rank', 'rankdir',
+ 'ranksep', 'ratio', 'regular', 'rotate', 'samehead', 'sametail', 'searchsize',
+ 'shape', 'shapefile', 'showboxes', 'sides', 'size', 'skew', 'style',
+ 'tailclip', 'taillabel', 'tailport', 'toplabel', 'weight', 'width'
+ ),
+ 2 => array(
+ 'node', 'graph', 'digraph', 'strict', 'edge', 'subgraph'
+ ),
+ 3 => array(
+ 'Mcircle', 'Mdiamond', 'Mrecord', 'Msquare', 'TRUE', 'auto', 'back',
+ 'bold', 'both', 'box', 'circle', 'compress', 'dashed', 'diamond', 'dot',
+ 'dotted', 'doublecircle', 'doubleoctagon', 'egg', 'ellipse', 'epsf', 'false',
+ 'fill', 'filled', 'forward', 'global', 'hexagon', 'house', 'inv', 'invdot',
+ 'invhouse', 'invis', 'invodot', 'invtrapezium', 'invtriangle', 'local', 'max',
+ 'min', 'none', 'normal', 'octagon', 'odot', 'out', 'parallelogram', 'plaintext',
+ 'polygon', 'record', 'same', 'solid', 'trapezium', 'triangle', 'tripleoctagon',
+ 'true'
+ ),
+ 4 => array(
+ 'aliceblue', 'antiquewhite', 'aquamarine', 'azure', 'beige', 'bisque', 'black',
+ 'blanchedalmond', 'blue', 'blueviolet', 'brown', 'burlywood', 'cadetblue',
+ 'chartreuse', 'chocolate', 'coral', 'cornflowerblue', 'cornsilk', 'crimson',
+ 'cyan', 'darkgoldenrod', 'darkgreen', 'darkkhaki', 'darkolivegreen',
+ 'darkorange', 'darkorchid', 'darksalmon', 'darkseagreen', 'darkslateblue',
+ 'darkslategray', 'darkturquoise', 'darkviolet', 'deeppink', 'deepskyblue',
+ 'dimgray', 'dodgerblue', 'firebrick', 'forestgreen', 'gainsboro', 'ghostwhite',
+ 'gold', 'goldenrod', 'gray', 'green', 'greenyellow', 'honeydew', 'hotpink',
+ 'indianred', 'indigo', 'ivory', 'khaki', 'lavender', 'lavenderblush',
+ 'lawngreen', 'lemonchiffon', 'lightblue', 'lightcyan', 'lightgoldenrod',
+ 'lightgoldenrodyellow', 'lightgray', 'lightpink', 'lightsalmon',
+ 'lightseagreen', 'lightskyblue', 'lightslateblue', 'lightslategray',
+ 'lightyellow', 'limegreen', 'linen', 'magenta', 'maroon', 'mediumaquamarine',
+ 'mediumblue', 'mediumorchid', 'mediumpurple', 'mediumseagreen',
+ 'mediumslateblue', 'mediumspringgreen', 'mediumturquoise', 'mediumvioletred',
+ 'midnightblue', 'mintcream', 'mistyrose', 'moccasin', 'navajowhite', 'navy',
+ 'navyblue', 'oldlace', 'olivedrab', 'oralwhite', 'orange', 'orangered',
+ 'orchid', 'palegoldenrod', 'palegreen', 'paleturquoise', 'palevioletred',
+ 'papayawhip', 'peachpuff', 'peru', 'pink', 'plum', 'powderblue', 'purple',
+ 'red', 'rosybrown', 'royalblue', 'saddlebrown', 'salmon', 'salmon2', 'sandybrown',
+ 'seagreen', 'seashell', 'sienna', 'skyblue', 'slateblue', 'slategray', 'snow',
+ 'springgreen', 'steelblue', 'tan', 'thistle', 'tomato', 'turquoise', 'violet',
+ 'violetred', 'wheat', 'white', 'whitesmoke', 'yellow', 'yellowgreen'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '[', ']', '{', '}', '-', '+', '*', '/', '<', '>', '!', '~', '%', '&', '|', '='
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #000066;',
+ 2 => 'color: #000000; font-weight: bold;',
+ 3 => 'color: #993333;',
+ 4 => 'color: #b1b100;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080; font-style: italic;',
+ 2 => 'color: #339933;',
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #af624d; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ ),
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(),
+ 'REGEXPS' => array(),
+ 'STRICT_MODE_APPLIES' => GESHI_MAYBE,
+ 'SCRIPT_DELIMITERS' => array(),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ 0 => true,
+ 1 => true,
+ 2 => true,
+ 3 => true
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/eiffel.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/eiffel.php
new file mode 100644
index 000000000..ab7abf974
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/eiffel.php
@@ -0,0 +1,395 @@
+<?php
+/*************************************************************************************
+ * eiffel.php
+ * ----------
+ * Author: Zoran Simic (zsimic@axarosenberg.com)
+ * Copyright: (c) 2005 Zoran Simic
+ * Release Version: 1.0.8.4
+ * Date Started: 2005/06/30
+ *
+ * Eiffel language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2005/06/30 (1.0.7)
+ * - Initial release
+ *
+ * TODO (updated 2005/06/30)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Eiffel',
+ 'COMMENT_SINGLE' => array(1 => '--'),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '%',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'separate',
+ 'invariant',
+ 'inherit',
+ 'indexing',
+ 'feature',
+ 'expanded',
+ 'deferred',
+ 'class'
+ ),
+ 2 => array(
+ 'xor',
+ 'when',
+ 'variant',
+ 'until',
+ 'unique',
+ 'undefine',
+ 'then',
+ 'strip',
+ 'select',
+ 'retry',
+ 'rescue',
+ 'require',
+ 'rename',
+ 'reference',
+ 'redefine',
+ 'prefix',
+ 'or',
+ 'once',
+ 'old',
+ 'obsolete',
+ 'not',
+ 'loop',
+ 'local',
+ 'like',
+ 'is',
+ 'inspect',
+ 'infix',
+ 'include',
+ 'implies',
+ 'if',
+ 'frozen',
+ 'from',
+ 'external',
+ 'export',
+ 'ensure',
+ 'end',
+ 'elseif',
+ 'else',
+ 'do',
+ 'creation',
+ 'create',
+ 'check',
+ 'as',
+ 'and',
+ 'alias',
+ 'agent'
+ ),
+ 3 => array(
+ 'Void',
+ 'True',
+ 'Result',
+ 'Precursor',
+ 'False',
+ 'Current'
+ ),
+ 4 => array(
+ 'UNIX_SIGNALS',
+ 'UNIX_FILE_INFO',
+ 'UNBOUNDED',
+ 'TWO_WAY_TREE_CURSOR',
+ 'TWO_WAY_TREE',
+ 'TWO_WAY_SORTED_SET',
+ 'TWO_WAY_LIST',
+ 'TWO_WAY_CURSOR_TREE',
+ 'TWO_WAY_CIRCULAR',
+ 'TWO_WAY_CHAIN_ITERATOR',
+ 'TUPLE',
+ 'TREE',
+ 'TRAVERSABLE',
+ 'TO_SPECIAL',
+ 'THREAD_CONTROL',
+ 'THREAD_ATTRIBUTES',
+ 'THREAD',
+ 'TABLE',
+ 'SUBSET',
+ 'STRING_HANDLER',
+ 'STRING',
+ 'STREAM',
+ 'STORABLE',
+ 'STD_FILES',
+ 'STACK',
+ 'SPECIAL',
+ 'SORTED_TWO_WAY_LIST',
+ 'SORTED_STRUCT',
+ 'SORTED_LIST',
+ 'SINGLE_MATH',
+ 'SET',
+ 'SEQUENCE',
+ 'SEQ_STRING',
+ 'SEMAPHORE',
+ 'ROUTINE',
+ 'RESIZABLE',
+ 'RECURSIVE_TREE_CURSOR',
+ 'RECURSIVE_CURSOR_TREE',
+ 'REAL_REF',
+ 'REAL',
+ 'RAW_FILE',
+ 'RANDOM',
+ 'QUEUE',
+ 'PROXY',
+ 'PROFILING_SETTING',
+ 'PROCEDURE',
+ 'PRIORITY_QUEUE',
+ 'PRIMES',
+ 'PRECOMP',
+ 'POINTER_REF',
+ 'POINTER',
+ 'PLATFORM',
+ 'PLAIN_TEXT_FILE',
+ 'PATH_NAME',
+ 'PART_SORTED_TWO_WAY_LIST',
+ 'PART_SORTED_SET',
+ 'PART_SORTED_LIST',
+ 'PART_COMPARABLE',
+ 'OPERATING_ENVIRONMENT',
+ 'ONCE_CONTROL',
+ 'OBJECT_OWNER',
+ 'OBJECT_CONTROL',
+ 'NUMERIC',
+ 'NONE',
+ 'MUTEX',
+ 'MULTI_ARRAY_LIST',
+ 'MULTAR_LIST_CURSOR',
+ 'MEMORY',
+ 'MEM_INFO',
+ 'MEM_CONST',
+ 'MATH_CONST',
+ 'LIST',
+ 'LINKED_TREE_CURSOR',
+ 'LINKED_TREE',
+ 'LINKED_STACK',
+ 'LINKED_SET',
+ 'LINKED_QUEUE',
+ 'LINKED_PRIORITY_QUEUE',
+ 'LINKED_LIST_CURSOR',
+ 'LINKED_LIST',
+ 'LINKED_CURSOR_TREE',
+ 'LINKED_CIRCULAR',
+ 'LINKABLE',
+ 'LINEAR_ITERATOR',
+ 'LINEAR',
+ 'ITERATOR',
+ 'IO_MEDIUM',
+ 'INTERNAL',
+ 'INTEGER_REF',
+ 'INTEGER_INTERVAL',
+ 'INTEGER',
+ 'INFINITE',
+ 'INDEXABLE',
+ 'IDENTIFIED_CONTROLLER',
+ 'IDENTIFIED',
+ 'HIERARCHICAL',
+ 'HEAP_PRIORITY_QUEUE',
+ 'HASHABLE',
+ 'HASH_TABLE_CURSOR',
+ 'HASH_TABLE',
+ 'GENERAL',
+ 'GC_INFO',
+ 'FUNCTION',
+ 'FORMAT_INTEGER',
+ 'FORMAT_DOUBLE',
+ 'FIXED_TREE',
+ 'FIXED_LIST',
+ 'FIXED',
+ 'FINITE',
+ 'FILE_NAME',
+ 'FILE',
+ 'FIBONACCI',
+ 'EXECUTION_ENVIRONMENT',
+ 'EXCEPTIONS',
+ 'EXCEP_CONST',
+ 'DYNAMIC_TREE',
+ 'DYNAMIC_LIST',
+ 'DYNAMIC_CIRCULAR',
+ 'DYNAMIC_CHAIN',
+ 'DOUBLE_REF',
+ 'DOUBLE_MATH',
+ 'DOUBLE',
+ 'DISPENSER',
+ 'DIRECTORY_NAME',
+ 'DIRECTORY',
+ 'DECLARATOR',
+ 'DEBUG_OUTPUT',
+ 'CURSOR_TREE_ITERATOR',
+ 'CURSOR_TREE',
+ 'CURSOR_STRUCTURE',
+ 'CURSOR',
+ 'COUNTABLE_SEQUENCE',
+ 'COUNTABLE',
+ 'CONTAINER',
+ 'CONSOLE',
+ 'CONDITION_VARIABLE',
+ 'COMPARABLE_STRUCT',
+ 'COMPARABLE_SET',
+ 'COMPARABLE',
+ 'COMPACT_TREE_CURSOR',
+ 'COMPACT_CURSOR_TREE',
+ 'COLLECTION',
+ 'CIRCULAR_CURSOR',
+ 'CIRCULAR',
+ 'CHARACTER_REF',
+ 'CHARACTER',
+ 'CHAIN',
+ 'CELL',
+ 'BOX',
+ 'BOUNDED_STACK',
+ 'BOUNDED_QUEUE',
+ 'BOUNDED',
+ 'BOOLEAN_REF',
+ 'BOOLEAN',
+ 'BOOL_STRING',
+ 'BIT_REF',
+ 'BINARY_TREE',
+ 'BINARY_SEARCH_TREE_SET',
+ 'BINARY_SEARCH_TREE',
+ 'BILINEAR',
+ 'BI_LINKABLE',
+ 'BASIC_ROUTINES',
+ 'BAG',
+ 'ASCII',
+ 'ARRAYED_TREE',
+ 'ARRAYED_STACK',
+ 'ARRAYED_QUEUE',
+ 'ARRAYED_LIST_CURSOR',
+ 'ARRAYED_LIST',
+ 'ARRAYED_CIRCULAR',
+ 'ARRAY2',
+ 'ARRAY',
+ 'ARGUMENTS',
+ 'ANY',
+ 'ACTIVE'
+ ),
+ 5 => array(
+ 'yes',
+ 'visible',
+ 'trace',
+ 'system',
+ 'root',
+ 'profile',
+ 'override_cluster',
+ 'object',
+ 'no',
+ 'multithreaded',
+ 'msil_generation_type',
+ 'line_generation',
+ 'library',
+ 'inlining_size',
+ 'inlining',
+ 'include_path',
+ 'il_verifiable',
+ 'exclude',
+ 'exception_trace',
+ 'dynamic_runtime',
+ 'dotnet_naming_convention',
+ 'disabled_debug',
+ 'default',
+ 'debug',
+ 'dead_code_removal',
+ 'console_application',
+ 'cluster',
+ 'cls_compliant',
+ 'check_vape',
+ 'assertion',
+ 'array_optimization',
+ 'all',
+ 'address_expression'
+ ),
+ ),
+ 'SYMBOLS' => array(
+ '+', '-', '*', '?', '=', '/', '%', '&', '>', '<', '^', '!', '|', ':',
+ '(', ')', '{', '}', '[', ']', '#'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => true,
+ 5 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #0600FF; font-weight: bold;',
+ 2 => 'color: #0600FF; font-weight: bold;',
+ 3 => 'color: #800080;',
+ 4 => 'color: #800000',
+ 5 => 'color: #603000;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #008000; font-style: italic;',
+ 'MULTI' => ''
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #005070; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #FF0000;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #0080A0;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #FF0000;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #000060;',
+ 2 => 'color: #000050;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #600000;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => 'http://www.google.com/search?q=site%3Ahttp%3A%2F%2Fdocs.eiffel.com%2Feiffelstudio%2Flibraries+{FNAMEL}&amp;btnI=I%27m+Feeling+Lucky',
+ 5 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/email.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/email.php
new file mode 100644
index 000000000..a0a744c6d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/email.php
@@ -0,0 +1,209 @@
+<?php
+/*************************************************************************************
+ * email.php
+ * ---------------
+ * Author: Benny Baumann (BenBE@geshi.org)
+ * Copyright: (c) 2008 Benny Baumann (http://qbnz.com/highlighter/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2008/10/19
+ *
+ * Email (mbox \ eml \ RFC format) language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/10/19 (1.0.8.1)
+ * - First Release
+ *
+ * TODO (updated 2008/10/19)
+ * -------------------------
+ * * Better checks when a header field should be expected
+ * * Fix the bound checks for kw groups 2 and 3, as well as rx group 1
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'eMail (mbox)',
+ 'COMMENT_SINGLE' => array(),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'HTTP', 'SMTP', 'ASMTP', 'ESMTP'
+ ),
+ 2 => array(
+ 'Content-Type','Content-Transfer-Encoding','Content-Disposition',
+ 'Delivered-To','Dkim-Signature','Domainkey-Signature','In-Reply-To',
+ 'Message-Id','MIME-Version','Received','Received-SPF','References',
+ 'Resend-From','Resend-To','Return-Path'
+ ),
+ 3 => array(
+ 'Date','From','Subject','To',
+ ),
+ 4 => array(
+ 'by', 'for', 'from', 'id', 'with'
+ )
+ ),
+ 'SYMBOLS' => array(
+ ':', ';', '<', '>', '[', ']'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ 2 => false,
+ 3 => false,
+ 4 => true
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #0000FF; font-weight: bold;',
+ 2 => 'color: #000000; font-weight: bold;',
+ 3 => 'color: #800000; font-weight: bold;',
+ 4 => 'font-weight: bold;',
+ ),
+ 'COMMENTS' => array(
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'SCRIPT' => array(
+ 0 => 'color: #000040;',
+ ),
+ 'REGEXPS' => array(
+ 1 => 'color: #000000; font-weight: bold;',
+ 2 => 'color: #0000FF;',
+ 3 => 'color: #008000;',
+ 4 => 'color: #0000FF; font-weight: bold;',
+ 5 => 'font-weight: bold;',
+ 6 => 'color: #400080;'
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ // Non-Standard-Header
+ 1 => array(
+ GESHI_SEARCH => "(?<=\A\x20|\n)x-[a-z0-9\-]*(?=\s*:|\s*<)",
+ GESHI_REPLACE => "\\0",
+ GESHI_MODIFIERS => "smi",
+ GESHI_BEFORE => "",
+ GESHI_AFTER => ""
+ ),
+ //Email-Adresses or Mail-IDs
+ 2 => array(
+ GESHI_SEARCH => "\b[\w\.]+@\w+(?:(?:\.\w+)*\.\w{2,4})?",
+ GESHI_REPLACE => "\\0",
+ GESHI_MODIFIERS => "mi",
+ GESHI_BEFORE => "",
+ GESHI_AFTER => ""
+ ),
+ //Date values in RFC format
+ 3 => array(
+ GESHI_SEARCH => "\b(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun),\s+\d\d?\s+" .
+ "(?:Jan|Feb|Mar|apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s+" .
+ "\d{4}\s+\d\d?:\d\d:\d\d\s+[+\-]\d{4}(?:\s+\(\w+\))?",
+ GESHI_REPLACE => "\\0",
+ GESHI_MODIFIERS => "mi",
+ GESHI_BEFORE => "",
+ GESHI_AFTER => ""
+ ),
+ //IP addresses
+ 4 => array(
+ GESHI_SEARCH => "(?<=\s)\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(?=\s)|".
+ "(?<=\[)\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(?=\])|".
+ "(?<==)\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(?=<)",
+ GESHI_REPLACE => "\\0",
+ GESHI_MODIFIERS => "i",
+ GESHI_BEFORE => "",
+ GESHI_AFTER => ""
+ ),
+ //Field-Assignments
+ 5 => array(
+ GESHI_SEARCH => "(?<=\s)[A-Z0-9\-]+(?==(?!\s|$))",
+ GESHI_REPLACE => "\\0",
+ GESHI_MODIFIERS => "mi",
+ GESHI_BEFORE => "",
+ GESHI_AFTER => ""
+ ),
+ //MIME type
+ 6 => array(
+ GESHI_SEARCH => "(?<=\s)(?:audio|application|image|multipart|text|".
+ "video|x-[a-z0-9\-]+)\/[a-z0-9][a-z0-9\-]*(?=\s|<|$)",
+ GESHI_REPLACE => "\\0",
+ GESHI_MODIFIERS => "m",
+ GESHI_BEFORE => "",
+ GESHI_AFTER => ""
+ )
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_ALWAYS,
+ 'SCRIPT_DELIMITERS' => array(
+ 0 => "/(?<start>^)[A-Z][a-zA-Z0-9\-]*\s*:\s*(?:.|(?=\n\s)\n)*(?<end>$)/m"
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ 0 => true,
+ ),
+ 'TAB_WIDTH' => 4,
+ 'PARSER_CONTROL' => array(
+ 'KEYWORDS' => array(
+ 2 => array(
+ 'DISALLOWED_BEFORE' => '(?<=\A\x20|\n)',
+ 'DISALLOWED_AFTER' => '(?=\s*:)',
+ ),
+ 3 => array(
+ 'DISALLOWED_BEFORE' => '(?<=\A\x20|\n)',
+ 'DISALLOWED_AFTER' => '(?=\s*:)',
+ ),
+ 4 => array(
+ 'DISALLOWED_BEFORE' => '(?<=\s)',
+ 'DISALLOWED_AFTER' => '(?=\s|\b)',
+ )
+ ),
+ 'ENABLE_FLAGS' => array(
+ 'BRACKETS' => GESHI_NEVER,
+ 'COMMENTS' => GESHI_NEVER,
+ 'NUMBERS' => GESHI_NEVER
+ )
+ )
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/fortran.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/fortran.php
new file mode 100644
index 000000000..26dc9b19d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/fortran.php
@@ -0,0 +1,160 @@
+<?php
+/*************************************************************************************
+ * fortran.php
+ * -----------
+ * Author: Cedric Arrabie (cedric.arrabie@univ-pau.fr)
+ * Copyright: (C) 2006 Cetric Arrabie
+ * Release Version: 1.0.8.4
+ * Date Started: 2006/04/22
+ *
+ * Fortran language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * 2006/04/20 (1.0.0)
+ * - First Release
+ *
+ * TODO
+ * -------------------------
+ * - Get a list of inbuilt functions to add (and explore fortran more
+ * to complete this rather bare language file)
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME'=>'Fortran',
+ 'COMMENT_SINGLE'=> array(1 =>'!',2=>'Cf2py'),
+ 'COMMENT_MULTI'=> array(),
+ //Fortran Comments
+ 'COMMENT_REGEXP' => array(1 => '/^C.*?$/mi'),
+ 'CASE_KEYWORDS'=> GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS'=> array("'",'"'),
+ 'ESCAPE_CHAR'=>'\\',
+ 'KEYWORDS'=> array(
+ 1 => array(
+ 'allocate','block','call','case','contains','continue','cycle','deallocate',
+ 'default','do','else','elseif','elsewhere','end','enddo','endif','endwhere',
+ 'entry','exit','function','go','goto','if','interface','module','nullify','only',
+ 'operator','procedure','program','recursive','return','select','stop',
+ 'subroutine','then','to','where','while',
+ 'access','action','advance','blank','blocksize','carriagecontrol',
+ 'delim','direct','eor','err','exist','file','flen','fmt','form','formatted',
+ 'iostat','name','named','nextrec','nml','number','opened','pad','position',
+ 'readwrite','recl','sequential','status','unformatted','unit'
+ ),
+ 2 => array(
+ '.AND.','.EQ.','.EQV.','.GE.','.GT.','.LE.','.LT.','.NE.','.NEQV.','.NOT.',
+ '.OR.','.TRUE.','.FALSE.'
+ ),
+ 3 => array(
+ 'allocatable','character','common','complex','data','dimension','double',
+ 'equivalence','external','implicit','in','inout','integer','intent','intrinsic',
+ 'kind','logical','namelist','none','optional','out','parameter','pointer',
+ 'private','public','real','result','save','sequence','target','type','use'
+ ),
+ 4 => array(
+ 'abs','achar','acos','adjustl','adjustr','aimag','aint','all','allocated',
+ 'anint','any','asin','atan','atan2','bit_size','break','btest','carg',
+ 'ceiling','char','cmplx','conjg','cos','cosh','cpu_time','count','cshift',
+ 'date_and_time','dble','digits','dim','dot_product','dprod dvchk',
+ 'eoshift','epsilon','error','exp','exponent','floor','flush','fraction',
+ 'getcl','huge','iachar','iand','ibclr','ibits','ibset','ichar','ieor','index',
+ 'int','intrup','invalop','ior','iostat_msg','ishft','ishftc','lbound',
+ 'len','len_trim','lge','lgt','lle','llt','log','log10','matmul','max','maxexponent',
+ 'maxloc','maxval','merge','min','minexponent','minloc','minval','mod','modulo',
+ 'mvbits','nbreak','ndperr','ndpexc','nearest','nint','not','offset','ovefl',
+ 'pack','precfill','precision','present','product','prompt','radix',
+ 'random_number','random_seed','range','repeat','reshape','rrspacing',
+ 'scale','scan','segment','selected_int_kind','selected_real_kind',
+ 'set_exponent','shape','sign','sin','sinh','size','spacing','spread','sqrt',
+ 'sum system','system_clock','tan','tanh','timer','tiny','transfer','transpose',
+ 'trim','ubound','undfl','unpack','val','verify'
+ ),
+ ),
+ 'SYMBOLS'=> array(
+ '(',')','{','}','[',']','=','+','-','*','/','!','%','^','&',':'
+ ),
+ 'CASE_SENSITIVE'=> array(
+ GESHI_COMMENTS => true,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ ),
+ 'STYLES'=> array(
+ 'KEYWORDS'=> array(
+ 1 =>'color: #b1b100;',
+ 2 =>'color: #000000; font-weight: bold;',
+ 3 =>'color: #000066;',
+ 4 =>'color: #993333;'
+ ),
+ 'COMMENTS'=> array(
+ 1 =>'color: #666666; font-style: italic;',
+ 2 =>'color: #339933;',
+ 'MULTI'=>'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR'=> array(
+ 0 =>'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS'=> array(
+ 0 =>'color: #009900;'
+ ),
+ 'STRINGS'=> array(
+ 0 =>'color: #ff0000;'
+ ),
+ 'NUMBERS'=> array(
+ 0 =>'color: #cc66cc;'
+ ),
+ 'METHODS'=> array(
+ 1 =>'color: #202020;',
+ 2 =>'color: #202020;'
+ ),
+ 'SYMBOLS'=> array(
+ 0 =>'color: #339933;'
+ ),
+ 'REGEXPS'=> array(
+ ),
+ 'SCRIPT'=> array(
+ )
+ ),
+ 'URLS'=> array(
+ 1 =>'',
+ 2 =>'',
+ 3 =>'',
+ 4 =>''
+ ),
+ 'OOLANG'=> true,
+ 'OBJECT_SPLITTERS'=> array(
+ 1 =>'.',
+ 2 =>'::'
+ ),
+ 'REGEXPS'=> array(
+ ),
+ 'STRICT_MODE_APPLIES'=> GESHI_NEVER,
+ 'SCRIPT_DELIMITERS'=> array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK'=> array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/freebasic.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/freebasic.php
new file mode 100644
index 000000000..780305ba3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/freebasic.php
@@ -0,0 +1,141 @@
+<?php
+/*************************************************************************************
+ * freebasic.php
+ * -------------
+ * Author: Roberto Rossi
+ * Copyright: (c) 2005 Roberto Rossi (http://rsoftware.altervista.org)
+ * Release Version: 1.0.8.4
+ * Date Started: 2005/08/19
+ *
+ * FreeBasic (http://www.freebasic.net/) language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2005/08/19 (1.0.0)
+ * - First Release
+ *
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'FreeBasic',
+ 'COMMENT_SINGLE' => array(1 => "'", 2 => '#'),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ "append", "as", "asc", "asin", "asm", "atan2", "atn", "beep", "bin", "binary", "bit",
+ "bitreset", "bitset", "bload", "bsave", "byref", "byte", "byval", "call",
+ "callocate", "case", "cbyte", "cdbl", "cdecl", "chain", "chdir", "chr", "cint",
+ "circle", "clear", "clng", "clngint", "close", "cls", "color", "command",
+ "common", "cons", "const", "continue", "cos", "cshort", "csign", "csng",
+ "csrlin", "cubyte", "cuint", "culngint", "cunsg", "curdir", "cushort", "custom",
+ "cvd", "cvi", "cvl", "cvlongint", "cvs", "cvshort", "data", "date",
+ "deallocate", "declare", "defbyte", "defdbl", "defined", "defint", "deflng",
+ "deflngint", "defshort", "defsng", "defstr", "defubyte", "defuint",
+ "defulngint", "defushort", "dim", "dir", "do", "double", "draw", "dylibload",
+ "dylibsymbol", "else", "elseif", "end", "enum", "environ", 'environ$', "eof",
+ "eqv", "erase", "err", "error", "exec", "exepath", "exit", "exp", "export",
+ "extern", "field", "fix", "flip", "for", "fre", "freefile", "function", "get",
+ "getjoystick", "getkey", "getmouse", "gosub", "goto", "hex", "hibyte", "hiword",
+ "if", "iif", "imagecreate", "imagedestroy", "imp", "inkey", "inp", "input",
+ "instr", "int", "integer", "is", "kill", "lbound", "lcase", "left", "len",
+ "let", "lib", "line", "lobyte", "loc", "local", "locate", "lock", "lof", "log",
+ "long", "longint", "loop", "loword", "lset", "ltrim", "mid", "mkd", "mkdir",
+ "mki", "mkl", "mklongint", "mks", "mkshort", "mod", "multikey", "mutexcreate",
+ "mutexdestroy", "mutexlock", "mutexunlock", "name", "next", "not", "oct", "on",
+ "once", "open", "option", "or", "out", "output", "overload", "paint", "palette",
+ "pascal", "pcopy", "peek", "peeki", "peeks", "pipe", "pmap", "point", "pointer",
+ "poke", "pokei", "pokes", "pos", "preserve", "preset", "print", "private",
+ "procptr", "pset", "ptr", "public", "put", "random", "randomize", "read",
+ "reallocate", "redim", "rem", "reset", "restore", "resume",
+ "return", "rgb", "rgba", "right", "rmdir", "rnd", "rset", "rtrim", "run",
+ "sadd", "screen", "screencopy", "screeninfo", "screenlock", "screenptr",
+ "screenres", "screenset", "screensync", "screenunlock", "seek", "statement",
+ "selectcase", "setdate", "setenviron", "setmouse",
+ "settime", "sgn", "shared", "shell", "shl", "short", "shr", "sin", "single",
+ "sizeof", "sleep", "space", "spc", "sqr", "static", "stdcall", "step", "stop",
+ "str", "string", "strptr", "sub", "swap", "system", "tab", "tan",
+ "then", "threadcreate", "threadwait", "time", "timer", "to", "trans",
+ "trim", "type", "ubound", "ubyte", "ucase", "uinteger", "ulongint", "union",
+ "unlock", "unsigned", "until", "ushort", "using", "va_arg", "va_first",
+ "va_next", "val", "val64", "valint", "varptr", "view", "viewprint", "wait",
+ "wend", "while", "width", "window", "windowtitle", "with", "write", "xor",
+ "zstring", "explicit", "escape", "true", "false"
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #b1b100;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080;',
+ 2 => 'color: #339933;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099;'
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/genero.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/genero.php
new file mode 100644
index 000000000..1e3d7efb6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/genero.php
@@ -0,0 +1,463 @@
+<?php
+/*************************************************************************************
+ * genero.php
+ * ----------
+ * Author: Lars Gersmann (lars.gersmann@gmail.com)
+ * Copyright: (c) 2007 Lars Gersmann, Nigel McNie (http://qbnz.com/highlighter/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2007/07/01
+ *
+ * Genero (FOURJ's Genero 4GL) language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2007/07/01 (1.0.0)
+ * - Initial release
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'genero',
+ 'COMMENT_SINGLE' => array(1 => '--', 2 => '#'),
+ 'COMMENT_MULTI' => array('{' => '}'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ "ABSOLUTE",
+ "ACCEPT",
+ "ACTION",
+ "ADD",
+ "AFTER",
+ "ALL",
+ "ALTER",
+ "AND",
+ "ANY",
+ "APPEND",
+ "APPLICATION",
+ "AS",
+ "AT",
+ "ATTRIBUTE",
+ "ATTRIBUTES",
+ "AUDIT",
+ "AVG",
+ "BEFORE",
+ "BEGIN",
+ "BETWEEN",
+ "BORDER",
+ "BOTTOM",
+ "BREAKPOINT",
+ "BUFFER",
+ "BUFFERED",
+ "BY",
+ "CALL",
+ "CANCEL",
+ "CASE",
+ "CENTURY",
+ "CHANGE",
+ "CHECK",
+ "CLEAR",
+ "CLIPPED",
+ "CLOSE",
+ "CLUSTER",
+ "COLUMN",
+ "COLUMNS",
+ "COMMAND",
+ "COMMENT",
+ "COMMIT",
+ "COMMITTED",
+ "CONCURRENT ",
+ "CONNECT",
+ "CONNECTION",
+ "CONSTANT",
+ "CONSTRAINED",
+ "CONSTRAINT",
+ "CONSTRUCT",
+ "CONTINUE",
+ "CONTROL",
+ "COUNT",
+ "CREATE",
+ "CROSS",
+ "CURRENT",
+ "DATABASE",
+ "DBA",
+ "DEC",
+ "DECLARE",
+ "DEFAULT",
+ "DEFAULTS",
+ "DEFER",
+ "DEFINE",
+ "DELETE",
+ "DELIMITER",
+ "DESCRIBE",
+ "DESTINATION",
+ "DIM",
+ "DIALOG",
+ "DIMENSION",
+ "DIRTY",
+ "DISCONNECT",
+ "DISPLAY",
+ "DISTINCT",
+ "DORMANT",
+ "DOWN",
+ "DROP",
+ "DYNAMIC",
+ "ELSE",
+ "END",
+ "ERROR",
+ "ESCAPE",
+ "EVERY",
+ "EXCLUSIVE",
+ "EXECUTE",
+ "EXISTS",
+ "EXIT",
+ "EXPLAIN",
+ "EXTEND",
+ "EXTENT",
+ "EXTERNAL",
+ "FETCH",
+ "FGL_DRAWBOX",
+ "FIELD",
+ "FIELD_TOUCHED",
+ "FILE",
+ "FILL",
+ "FINISH",
+ "FIRST",
+ "FLOAT",
+ "FLUSH",
+ "FOR",
+ "FOREACH",
+ "FORM",
+ "FORMAT",
+ "FOUND",
+ "FRACTION",
+ "FREE",
+ "FROM",
+ "FULL",
+ "FUNCTION",
+ "GET_FLDBUF",
+ "GLOBALS",
+ "GO",
+ "GOTO",
+ "GRANT",
+ "GROUP",
+ "HAVING",
+ "HEADER",
+ "HELP",
+ "HIDE",
+ "HOLD",
+ "HOUR",
+ "IDLE",
+ "IF",
+ "IMAGE",
+ "IMMEDIATE",
+ "IN",
+ "INDEX",
+ "INFIELD",
+ "INITIALIZE",
+ "INNER",
+ "INPUT",
+ "INSERT",
+ "INTERRUPT",
+ "INTERVAL",
+ "INTO",
+ "INVISIBLE",
+ "IS",
+ "ISOLATION",
+ "JOIN",
+ "KEEP",
+ "KEY",
+ "LABEL",
+ "LAST",
+ "LEFT",
+ "LENGTH",
+ "LET",
+ "LIKE",
+ "LINE",
+ "LINENO",
+ "LINES",
+ "LOAD",
+ "LOCATE",
+ "LOCK",
+ "LOG",
+ "LSTR",
+ "MAIN",
+ "MARGIN",
+ "MATCHES",
+ "MAX",
+ "MAXCOUNT",
+ "MDY",
+ "MEMORY",
+ "MENU",
+ "MESSAGE",
+ "MIN",
+ "MINUTE",
+ "MOD",
+ "MODE",
+ "MODIFY",
+ "MONEY",
+ "NAME",
+ "NEED",
+ "NEXT",
+ "NO",
+ "NORMAL",
+ "NOT",
+ "NOTFOUND",
+ "NULL",
+ "NUMERIC",
+ "OF",
+ "ON",
+ "OPEN",
+ "OPTION",
+ "OPTIONS",
+ "OR",
+ "ORDER",
+ "OTHERWISE",
+ "OUTER",
+ "OUTPUT",
+ "PAGE",
+ "PAGENO",
+ "PAUSE",
+ "PERCENT",
+ "PICTURE",
+ "PIPE",
+ "PRECISION",
+ "PREPARE",
+ "PREVIOUS",
+ "PRINT",
+ "PRINTER",
+ "PRINTX",
+ "PRIOR",
+ "PRIVILEGES",
+ "PROCEDURE",
+ "PROGRAM",
+ "PROMPT",
+ "PUBLIC",
+ "PUT",
+ "QUIT",
+ "READ",
+ "REAL",
+ "RECORD",
+ "RECOVER",
+ "RED ",
+ "RELATIVE",
+ "RENAME",
+ "REOPTIMIZATION",
+ "REPEATABLE",
+ "REPORT",
+ "RESOURCE",
+ "RETURN",
+ "RETURNING",
+ "REVERSE",
+ "REVOKE",
+ "RIGHT",
+ "ROLLBACK",
+ "ROLLFORWARD",
+ "ROW",
+ "ROWS",
+ "RUN",
+ "SCHEMA",
+ "SCREEN",
+ "SCROLL",
+ "SECOND",
+ "SELECT",
+ "SERIAL",
+ "SET",
+ "SFMT",
+ "SHARE",
+ "SHIFT",
+ "SHOW",
+ "SIGNAL ",
+ "SIZE",
+ "SKIP",
+ "SLEEP",
+ "SOME",
+ "SPACE",
+ "SPACES",
+ "SQL",
+ "SQLERRMESSAGE",
+ "SQLERROR",
+ "SQLSTATE",
+ "STABILITY",
+ "START",
+ "STATISTICS",
+ "STEP",
+ "STOP",
+ "STYLE",
+ "SUM",
+ "SYNONYM",
+ "TABLE",
+ "TEMP",
+ "TERMINATE",
+ "TEXT",
+ "THEN",
+ "THROUGH",
+ "THRU",
+ "TO",
+ "TODAY",
+ "TOP",
+ "TRAILER",
+ "TRANSACTION ",
+ "UNBUFFERED",
+ "UNCONSTRAINED",
+ "UNDERLINE",
+ "UNION",
+ "UNIQUE",
+ "UNITS",
+ "UNLOAD",
+ "UNLOCK",
+ "UP",
+ "UPDATE",
+ "USE",
+ "USER",
+ "USING",
+ "VALIDATE",
+ "VALUE",
+ "VALUES",
+ "VARCHAR",
+ "VIEW",
+ "WAIT",
+ "WAITING",
+ "WARNING",
+ "WHEN",
+ "WHENEVER",
+ "WHERE",
+ "WHILE",
+ "WINDOW",
+ "WITH",
+ "WITHOUT",
+ "WORDWRAP",
+ "WORK",
+ "WRAP"
+ ),
+ 2 => array(
+ '&amp;IFDEF', '&amp;ENDIF'
+ ),
+ 3 => array(
+ "ARRAY",
+ "BYTE",
+ "CHAR",
+ "CHARACTER",
+ "CURSOR",
+ "DATE",
+ "DATETIME",
+ "DECIMAL",
+ "DOUBLE",
+ "FALSE",
+ "INT",
+ "INTEGER",
+ "SMALLFLOAT",
+ "SMALLINT",
+ "STRING",
+ "TIME",
+ "TRUE"
+ ),
+ 4 => array(
+ "BLACK",
+ "BLINK",
+ "BLUE",
+ "BOLD",
+ "ANSI",
+ "ASC",
+ "ASCENDING",
+ "ASCII",
+ "CYAN",
+ "DESC",
+ "DESCENDING",
+ "GREEN",
+ "MAGENTA",
+ "OFF",
+ "WHITE",
+ "YELLOW",
+ "YEAR",
+ "DAY",
+ "MONTH",
+ "WEEKDAY"
+ ),
+ ),
+ 'SYMBOLS' => array(
+ '+', '-', '*', '?', '=', '/', '%', '>', '<', '^', '!', '|', ':',
+ '(', ')', '[', ']'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #0600FF;',
+ 2 => 'color: #0000FF; font-weight: bold;',
+ 3 => 'color: #008000;',
+ 4 => 'color: #FF0000;',
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #008080; font-style: italic;',
+ 2 => 'color: #008080;',
+ 'MULTI' => 'color: #008080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #008080; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #808080;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #FF0000;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #0000FF;',
+ 2 => 'color: #0000FF;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #008000;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/gettext.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/gettext.php
new file mode 100644
index 000000000..a1dcd8c8a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/gettext.php
@@ -0,0 +1,97 @@
+<?php
+/*************************************************************************************
+ * gettext.php
+ * --------
+ * Author: Milian Wolff (mail@milianw.de)
+ * Copyright: (c) 2008 Milian Wolff
+ * Release Version: 1.0.8.4
+ * Date Started: 2008/05/25
+ *
+ * GNU Gettext .po/.pot language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/08/02 (1.0.8)
+ * - New comments: flags and previous-fields
+ * - New keywords: msgctxt, msgid_plural
+ * - Msgstr array indices
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'GNU Gettext',
+ 'COMMENT_SINGLE' => array('#:', '#.', '#,', '#|', '#'),
+ 'COMMENT_MULTI' => array(),
+ 'COMMENT_REGEXP' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array('msgctxt', 'msgid_plural', 'msgid', 'msgstr'),
+ ),
+ 'SYMBOLS' => array(),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #000000; font-weight: bold;'
+ ),
+ 'COMMENTS' => array(
+ 0 => 'color: #000099;',
+ 1 => 'color: #000099;',
+ 2 => 'color: #000099;',
+ 3 => 'color: #006666;',
+ 4 => 'color: #666666; font-style: italic;',
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'REGEXPS' => array(),
+ 'SYMBOLS' => array(),
+ 'NUMBERS' => array(
+ 0 => 'color: #000099;'
+ ),
+ 'METHODS' => array(),
+ 'SCRIPT' => array(),
+ 'BRACKETS' => array(
+ 0 => 'color: #000099;'
+ ),
+ ),
+ 'URLS' => array(
+ 1 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(),
+ 'REGEXPS' => array(),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 4,
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/glsl.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/glsl.php
new file mode 100644
index 000000000..9b31fa482
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/glsl.php
@@ -0,0 +1,205 @@
+<?php
+/*************************************************************************************
+ * glsl.php
+ * -----
+ * Author: Benny Baumann (BenBE@omorphia.de)
+ * Copyright: (c) 2008 Benny Baumann (BenBE@omorphia.de)
+ * Release Version: 1.0.8.4
+ * Date Started: 2008/03/20
+ *
+ * glSlang language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/03/20 (1.0.7.21)
+ * - First Release
+ *
+ * TODO
+ * ----
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'glSlang',
+ 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'COMMENT_REGEXP' => array(
+ //Multiline-continued single-line comments
+ 1 => '/\/\/(?:\\\\\\\\|\\\\\\n|.)*$/m',
+ //Multiline-continued preprocessor define
+ 2 => '/#(?:\\\\\\\\|\\\\\\n|.)*$/m'
+ ),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'if', 'else', 'for', 'while', 'do', 'break', 'continue', 'asm',
+ 'switch', 'case', 'default', 'return', 'discard',
+ 'namespace', 'using', 'sizeof', 'cast'
+ ),
+ 2 => array(
+ 'const', 'uniform', 'attribute', 'centroid', 'varying', 'invariant',
+ 'in', 'out', 'inout', 'input', 'output', 'typedef', 'volatile',
+ 'public', 'static', 'extern', 'external', 'packed',
+ 'inline', 'noinline', 'noperspective', 'flat'
+ ),
+ 3 => array(
+ 'void', 'bool', 'int', 'long', 'short', 'float', 'half', 'fixed',
+ 'unsigned', 'lowp', 'mediump', 'highp', 'precision',
+ 'vec2', 'vec3', 'vec4', 'bvec2', 'bvec3', 'bvec4',
+ 'dvec2', 'dvec3', 'dvec4', 'fvec2', 'fvec3', 'fvec4',
+ 'hvec2', 'hvec3', 'hvec4', 'ivec2', 'ivec3', 'ivec4',
+ 'mat2', 'mat3', 'mat4', 'mat2x2', 'mat3x2', 'mat4x2',
+ 'mat2x3', 'mat3x3', 'mat4x3', 'mat2x4', 'mat3x4', 'mat4x4',
+ 'sampler1D', 'sampler2D', 'sampler3D', 'samplerCube',
+ 'sampler1DShadow', 'sampler2DShadow',
+ 'struct', 'class', 'union', 'enum', 'interface', 'template'
+ ),
+ 4 => array(
+ 'this', 'false', 'true'
+ ),
+ 5 => array(
+ 'radians', 'degrees', 'sin', 'cos', 'tan', 'asin', 'acos', 'atan',
+ 'pow', 'exp2', 'log2', 'sqrt', 'inversesqrt', 'abs', 'sign', 'ceil',
+ 'floor', 'fract', 'mod', 'min', 'max', 'clamp', 'mix', 'step',
+ 'smoothstep', 'length', 'distance', 'dot', 'cross', 'normalize',
+ 'ftransform', 'faceforward', 'reflect', 'matrixCompMult', 'equal',
+ 'lessThan', 'lessThanEqual', 'greaterThan', 'greaterThanEqual',
+ 'notEqual', 'any', 'all', 'not', 'texture1D', 'texture1DProj',
+ 'texture1DLod', 'texture1DProjLod', 'texture2D', 'texture2DProj',
+ 'texture2DLod', 'texture2DProjLod', 'texture3D', 'texture3DProj',
+ 'texture3DLod', 'texture3DProjLod', 'textureCube', 'textureCubeLod',
+ 'shadow1D', 'shadow1DProj', 'shadow1DLod', 'shadow1DProjLod',
+ 'shadow2D', 'shadow2DProj', 'shadow2DLod', 'shadow2DProjLod',
+ 'noise1', 'noise2', 'noise3', 'noise4'
+ ),
+ 6 => array(
+ 'gl_Position', 'gl_PointSize', 'gl_ClipVertex', 'gl_FragColor',
+ 'gl_FragData', 'gl_FragDepth', 'gl_FragCoord', 'gl_FrontFacing',
+ 'gl_Color', 'gl_SecondaryColor', 'gl_Normal', 'gl_Vertex',
+ 'gl_MultiTexCoord0', 'gl_MultiTexCoord1', 'gl_MultiTexCoord2',
+ 'gl_MultiTexCoord3', 'gl_MultiTexCoord4', 'gl_MultiTexCoord5',
+ 'gl_MultiTexCoord6', 'gl_MultiTexCoord7', 'gl_FogCoord',
+ 'gl_MaxLights', 'gl_MaxClipPlanes', 'gl_MaxTextureUnits',
+ 'gl_MaxTextureCoords', 'gl_MaxVertexAttribs', 'gl_MaxVaryingFloats',
+ 'gl_MaxVertexUniformComponents', 'gl_MaxVertexTextureImageUnits',
+ 'gl_MaxCombinedTextureImageUnits', 'gl_MaxTextureImageUnits',
+ 'gl_MaxFragmentUniformComponents', 'gl_MaxDrawBuffers', 'gl_Point',
+ 'gl_ModelViewMatrix', 'gl_ProjectionMatrix', 'gl_FrontMaterial',
+ 'gl_ModelViewProjectionMatrix', 'gl_TextureMatrix', 'gl_ClipPlane',
+ 'gl_NormalMatrix', 'gl_ModelViewMatrixInverse', 'gl_BackMaterial',
+ 'gl_ProjectionMatrixInverse', 'gl_ModelViewProjectionMatrixInverse',
+ 'gl_TextureMatrixInverse', 'gl_ModelViewMatrixTranspose', 'gl_Fog',
+ 'gl_ProjectionMatrixTranspose', 'gl_NormalScale', 'gl_DepthRange',
+ 'gl_odelViewProjectionMatrixTranspose', 'gl_TextureMatrixTranspose',
+ 'gl_ModelViewMatrixInverseTranspose', 'gl_LightSource',
+ 'gl_ProjectionMatrixInverseTranspose', 'gl_LightModel',
+ 'gl_ModelViewProjectionMatrixInverseTranspose', 'gl_TexCoord',
+ 'gl_TextureMatrixInverseTranspose', 'gl_TextureEnvColor',
+ 'gl_FrontLightModelProduct', 'gl_BackLightModelProduct',
+ 'gl_FrontLightProduct', 'gl_BackLightProduct', 'gl_ObjectPlaneS',
+ 'gl_ObjectPlaneT', 'gl_ObjectPlaneR', 'gl_ObjectPlaneQ',
+ 'gl_EyePlaneS', 'gl_EyePlaneT', 'gl_EyePlaneR', 'gl_EyePlaneQ',
+ 'gl_FrontColor', 'gl_BackColor', 'gl_FrontSecondaryColor',
+ 'gl_BackSecondaryColor', 'gl_FogFragCoord', 'gl_PointCoord'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '{', '}', '[', ']', '=', '+', '-', '*', '/', '!', '%', '^',
+ '&', '?', ':', '.', '|', ';', ',', '<', '>'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ 2 => true,
+ 3 => true,
+ 4 => true,
+ 5 => true,
+ 6 => true,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #000000; font-weight: bold;',
+ 2 => 'color: #333399; font-weight: bold;',
+ 3 => 'color: #000066; font-weight: bold;',
+ 4 => 'color: #333399; font-weight: bold;',
+ 5 => 'color: #993333; font-weight: bold;',
+ 6 => 'color: #551111;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #666666; font-style: italic;',
+ 2 => 'color: #009900;',
+ 'MULTI' => 'color: #666666; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #000066;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #0000ff;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #006600;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #000066;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => '',
+ 5 => '',
+ 6 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 4,
+ 'PARSER_CONTROL' => array(
+ 'OOLANG' => array(
+ 'MATCH_BEFORE' => '',
+ 'MATCH_AFTER' => '[a-zA-Z_][a-zA-Z0-9_]*',
+ 'MATCH_SPACES' => '[\s]*'
+ )
+ )
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/gml.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/gml.php
new file mode 100644
index 000000000..da3d3a8e8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/gml.php
@@ -0,0 +1,506 @@
+<?php
+/*************************************************************************************
+ * gml.php
+ * --------
+ * Author: Jos� Jorge Enr�quez (jenriquez@users.sourceforge.net)
+ * Copyright: (c) 2005 Jos� Jorge Enr�quez Rodr�guez (http://www.zonamakers.com)
+ * Release Version: 1.0.8.4
+ * Date Started: 2005/06/21
+ *
+ * GML language file for GeSHi.
+ *
+ * GML (Game Maker Language) is a script language that is built-in into Game Maker,
+ * a game creation program, more info about Game Maker can be found at
+ * http://www.gamemaker.nl/
+ * All GML keywords were extracted from the Game Maker HTML Help file using a PHP
+ * script (one section at a time). I love PHP for saving me that bunch of work :P!.
+ * I think all GML functions have been indexed here, but I'm not sure about it, so
+ * please let me know of any issue you may find.
+ *
+ * CHANGES
+ * -------
+ * 2005/11/11
+ * - Changed 'CASE_KEYWORDS' fom 'GESHI_CAPS_LOWER' to 'GESHI_CAPS_NO_CHANGE',
+ * so that MCI_command appears correctly (the only GML function using capitals).
+ * - Changed 'CASE_SENSITIVE' options, 'GESHI_COMMENTS' from true to false and all
+ * of the others from false to true.
+ * - Deleted repeated entries.
+ * - div and mod are language keywords, moved (from symbols) to the appropiate section (1).
+ * - Moved self, other, all, noone and global identifiers to language keywords section 1.
+ * - Edited this file lines to a maximum width of 100 characters (as stated in
+ * the GeSHi docs). Well, not strictly to 100 but around it.
+ * - Corrected some minor issues (the vk_f1...vk_f12 keys and similar).
+ * - Deleted the KEYWORDS=>5 and KEYWORDS=>6 sections (actually, they were empty).
+ * I was planning of using those for the GML functions available only in the
+ * registered version of the program, but not anymore.
+ *
+ * 2005/06/26 (1.0.3)
+ * - First Release.
+ *
+ * TODO (updated 2005/11/11)
+ * -------------------------
+ * - Test it for a while and make the appropiate corrections.
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'GML',
+ 'COMMENT_SINGLE' => array(1 => '//'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'"),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ // language keywords
+ 1 => array(
+ 'break', 'continue', 'do', 'until', 'if', 'else',
+ 'exit', 'for', 'repeat', 'return', 'switch',
+ 'case', 'default', 'var', 'while', 'with', 'div', 'mod',
+ // GML Language overview
+ 'self', 'other', 'all', 'noone', 'global',
+ ),
+ // modifiers and built-in variables
+ 2 => array(
+ // Game play
+ 'x','y','xprevious','yprevious','xstart','ystart','hspeed','vspeed','direction','speed',
+ 'friction','gravity','gravity_direction',
+ 'path_index','path_position','path_positionprevious','path_speed','path_orientation',
+ 'path_endaction',
+ 'object_index','id','mask_index','solid','persistent','instance_count','instance_id',
+ 'room_speed','fps','current_time','current_year','current_month','current_day','current_weekday',
+ 'current_hour','current_minute','current_second','alarm','timeline_index','timeline_position',
+ 'timeline_speed',
+ 'room','room_first','room_last','room_width','room_height','room_caption','room_persistent',
+ 'score','lives','health','show_score','show_lives','show_health','caption_score','caption_lives',
+ 'caption_health',
+ 'event_type','event_number','event_object','event_action',
+ 'error_occurred','error_last',
+ // User interaction
+ 'keyboard_lastkey','keyboard_key','keyboard_lastchar','keyboard_string',
+ 'mouse_x','mouse_y','mouse_button','mouse_lastbutton',
+ // Game Graphics
+ 'sprite_index','sprite_width','sprite_height','sprite_xoffset','sprite_yoffset',
+ 'image_number','image_index','image_speed','image_xscale','image_yscale','image_angle',
+ 'image_alpha','image_blend','bbox_left','bbox_right','bbox_top','bbox_bottom',
+ 'background_color','background_showcolor','background_visible','background_foreground',
+ 'background_index','background_x','background_y','background_width','background_height',
+ 'background_htiled','background_vtiled','background_xscale','background_yscale',
+ 'background_hspeed','background_vspeed','background_blend','background_alpha',
+ 'background','left, top, width, height','depth','visible','xscale','yscale','blend','alpha',
+ 'view_enabled','view_current','view_visible','view_yview','view_wview','view_hview','view_xport',
+ 'view_yport','view_wport','view_hport','view_angle','view_hborder','view_vborder','view_hspeed',
+ 'view_vspeed','view_object',
+ 'transition_kind',
+ // Files, registry and executing programs
+ 'game_id','working_directory','temp_directory',
+ 'secure_mode',
+ // Creating particles
+ 'xmin', 'xmax', 'ymin', 'ymax','shape','distribution','particle type','number',
+ 'force','dist','kind','additive', 'parttype1', 'parttype2'
+ ),
+ // functions
+ 3 => array(
+ // Computing things
+ 'random','choose','abs','sign','round','floor','ceil','frac','sqrt','sqr','power','exp','ln',
+ 'log2','log10','logn','sin','cos','tan','arcsin','arccos','arctan','arctan2','degtorad',
+ 'radtodeg','min','max','mean','median','point_distance','point_direction','lengthdir_x',
+ 'lengthdir_y','is_real','is_string',
+ 'chr','ord','real','string','string_format','string_length','string_pos','string_copy',
+ 'string_char_at','string_delete','string_insert','string_replace','string_replace_all',
+ 'string_count','string_lower','string_upper','string_repeat','string_letters','string_digits',
+ 'string_lettersdigits','clipboard_has_text','clipboard_get_text','clipboard_set_text',
+ 'date_current_datetime','date_current_date','date_current_time','date_create_datetime',
+ 'date_create_date','date_create_time','date_valid_datetime','date_valid_date','date_valid_time',
+ 'date_inc_year','date_inc_month','date_inc_week','date_inc_day','date_inc_hour',
+ 'date_inc_minute','date_inc_second','date_get_year','date_get_month','date_get_week',
+ 'date_get_day','date_get_hour', 'date_get_minute','date_get_second','date_get_weekday',
+ 'date_get_day_of_year','date_get_hour_of_year','date_get_minute_of_year',
+ 'date_get_second_of_year','date_year_span','date_month_span','date_week_span','date_day_span',
+ 'date_hour_span','date_minute_span','date_second_span','date_compare_datetime',
+ 'date_compare_date','date_compare_time','date_date_of','date_time_of','date_datetime_string',
+ 'date_date_string','date_time_string','date_days_in_month','date_days_in_year','date_leap_year',
+ 'date_is_today',
+ // Game play
+ 'motion_set','motion_add','place_free','place_empty','place_meeting','place_snapped',
+ 'move_random','move_snap','move_wrap','move_towards_point','move_bounce_solid','move_bounce_all',
+ 'move_contact_solid','move_contact_all','move_outside_solid','move_outside_all',
+ 'distance_to_point','distance_to_object','position_empty','position_meeting',
+ 'path_start','path_end',
+ 'mp_linear_step','mp_linear_step_object','mp_potential_step','mp_potential_step_object',
+ 'mp_potential_settings','mp_linear_path','mp_linear_path_object', 'mp_potential_path',
+ 'mp_potential_path_object','mp_grid_create','mp_grid_destroy','mp_grid_clear_all',
+ 'mp_grid_clear_cell','mp_grid_clear_rectangle','mp_grid_add_cell','mp_grid_add_rectangle',
+ 'mp_grid_add_instances','mp_grid_path','mp_grid_draw',
+ 'collision_point','collision_rectangle','collision_circle','collision_ellipse','collision_line',
+ 'instance_find','instance_exists','instance_number','instance_position','instance_nearest',
+ 'instance_furthest','instance_place','instance_create','instance_copy','instance_destroy',
+ 'instance_change','position_destroy','position_change',
+ 'instance_deactivate_all','instance_deactivate_object','instance_deactivate_region',
+ 'instance_activate_all','instance_activate_object','instance_activate_region',
+ 'sleep',
+ 'room_goto','room_goto_previous','room_goto_next','room_restart','room_previous','room_next',
+ 'game_end','game_restart','game_save','game_load',
+ 'event_perform', 'event_perform_object','event_user','event_inherited',
+ 'show_debug_message','variable_global_exists','variable_local_exists','variable_global_get',
+ 'variable_global_array_get','variable_global_array2_get','variable_local_get',
+ 'variable_local_array_get','variable_local_array2_get','variable_global_set',
+ 'variable_global_array_set','variable_global_array2_set','variable_local_set',
+ 'variable_local_array_set','variable_local_array2_set','set_program_priority',
+ // User interaction
+ 'keyboard_set_map','keyboard_get_map','keyboard_unset_map','keyboard_check',
+ 'keyboard_check_pressed','keyboard_check_released','keyboard_check_direct',
+ 'keyboard_get_numlock','keyboard_set_numlock','keyboard_key_press','keyboard_key_release',
+ 'keyboard_clear','io_clear','io_handle','keyboard_wait',
+ 'mouse_check_button','mouse_check_button_pressed','mouse_check_button_released','mouse_clear',
+ 'mouse_wait',
+ 'joystick_exists','joystick_name','joystick_axes','joystick_buttons','joystick_has_pov',
+ 'joystick_direction','joystick_check_button','joystick_xpos','joystick_ypos','joystick_zpos',
+ 'joystick_rpos','joystick_upos','joystick_vpos','joystick_pov',
+ // Game Graphics
+ 'draw_sprite','draw_sprite_stretched','draw_sprite_tiled','draw_sprite_part','draw_background',
+ 'draw_background_stretched','draw_background_tiled','draw_background_part','draw_sprite_ext',
+ 'draw_sprite_stretched_ext','draw_sprite_tiled_ext','draw_sprite_part_ext','draw_sprite_general',
+ 'draw_background_ext','draw_background_stretched_ext','draw_background_tiled_ext',
+ 'draw_background_part_ext','draw_background_general',
+ 'draw_clear','draw_clear_alpha','draw_point','draw_line','draw_rectangle','draw_roundrect',
+ 'draw_triangle','draw_circle','draw_ellipse','draw_arrow','draw_button','draw_path',
+ 'draw_healthbar','draw_set_color','draw_set_alpha','draw_get_color','draw_get_alpha',
+ 'make_color_rgb','make_color_hsv','color_get_red','color_get_green','color_get_blue',
+ 'color_get_hue','color_get_saturation','color_get_value','merge_color','draw_getpixel',
+ 'screen_save','screen_save_part',
+ 'draw_set_font','draw_set_halign','draw_set_valign','draw_text','draw_text_ext','string_width',
+ 'string_height','string_width_ext','string_height_ext','draw_text_transformed',
+ 'draw_text_ext_transformed','draw_text_color','draw_text_ext_color',
+ 'draw_text_transformed_color','draw_text_ext_transformed_color',
+ 'draw_point_color','draw_line_color','draw_rectangle_color','draw_roundrect_color',
+ 'draw_triangle_color','draw_circle_color','draw_ellipse_color','draw_primitive_begin',
+ 'draw_vertex','draw_vertex_color','draw_primitive_end','sprite_get_texture',
+ 'background_get_texture','texture_preload','texture_set_priority',
+ 'texture_get_width','texture_get_height','draw_primitive_begin_texture','draw_vertex_texture',
+ 'draw_vertex_texture_color','texture_set_interpolation',
+ 'texture_set_blending','texture_set_repeat','draw_set_blend_mode','draw_set_blend_mode_ext',
+ 'surface_create','surface_free','surface_exists','surface_get_width','surface_get_height',
+ 'surface_get_texture','surface_set_target','surface_reset_target','surface_getpixel',
+ 'surface_save','surface_save_part','draw_surface','draw_surface_stretched','draw_surface_tiled',
+ 'draw_surface_part','draw_surface_ext','draw_surface_stretched_ext','draw_surface_tiled_ext',
+ 'draw_surface_part_ext','draw_surface_general','surface_copy','surface_copy_part',
+ 'tile_add','tile_delete','tile_exists','tile_get_x','tile_get_y','tile_get_left','tile_get_top',
+ 'tile_get_width','tile_get_height','tile_get_depth','tile_get_visible','tile_get_xscale',
+ 'tile_get_yscale','tile_get_background','tile_get_blend','tile_get_alpha','tile_set_position',
+ 'tile_set_region','tile_set_background','tile_set_visible','tile_set_depth','tile_set_scale',
+ 'tile_set_blend','tile_set_alpha','tile_layer_hide','tile_layer_show','tile_layer_delete',
+ 'tile_layer_shift','tile_layer_find','tile_layer_delete_at','tile_layer_depth',
+ 'display_get_width','display_get_height','display_get_colordepth','display_get_frequency',
+ 'display_set_size','display_set_colordepth','display_set_frequency','display_set_all',
+ 'display_test_all','display_reset','display_mouse_get_x','display_mouse_get_y','display_mouse_set',
+ 'window_set_visible','window_get_visible','window_set_fullscreen','window_get_fullscreen',
+ 'window_set_showborder','window_get_showborder','window_set_showicons','window_get_showicons',
+ 'window_set_stayontop','window_get_stayontop','window_set_sizeable','window_get_sizeable',
+ 'window_set_caption','window_get_caption','window_set_cursor', 'window_get_cursor',
+ 'window_set_color','window_get_color','window_set_region_scale','window_get_region_scale',
+ 'window_set_position','window_set_size','window_set_rectangle','window_center','window_default',
+ 'window_get_x','window_get_y','window_get_width','window_get_height','window_mouse_get_x',
+ 'window_mouse_get_y','window_mouse_set',
+ 'window_set_region_size','window_get_region_width','window_get_region_height',
+ 'window_view_mouse_get_x','window_view_mouse_get_y','window_view_mouse_set',
+ 'window_views_mouse_get_x','window_views_mouse_get_y','window_views_mouse_set',
+ 'screen_redraw','screen_refresh','set_automatic_draw','set_synchronization','screen_wait_vsync',
+ // Sound and music)
+ 'sound_play','sound_loop','sound_stop','sound_stop_all','sound_isplaying','sound_volume',
+ 'sound_global_volume','sound_fade','sound_pan','sound_background_tempo','sound_set_search_directory',
+ 'sound_effect_set','sound_effect_chorus','sound_effect_echo', 'sound_effect_flanger',
+ 'sound_effect_gargle','sound_effect_reverb','sound_effect_compressor','sound_effect_equalizer',
+ 'sound_3d_set_sound_position','sound_3d_set_sound_velocity','sound_3d_set_sound_distance',
+ 'sound_3d_set_sound_cone',
+ 'cd_init','cd_present','cd_number','cd_playing','cd_paused','cd_track','cd_length',
+ 'cd_track_length','cd_position','cd_track_position','cd_play','cd_stop','cd_pause','cd_resume',
+ 'cd_set_position','cd_set_track_position','cd_open_door','cd_close_door','MCI_command',
+ // Splash screens, highscores, and other pop-ups
+ 'show_text','show_image','show_video','show_info','load_info',
+ 'show_message','show_message_ext','show_question','get_integer','get_string',
+ 'message_background','message_alpha','message_button','message_text_font','message_button_font',
+ 'message_input_font','message_mouse_color','message_input_color','message_caption',
+ 'message_position','message_size','show_menu','show_menu_pos','get_color','get_open_filename',
+ 'get_save_filename','get_directory','get_directory_alt','show_error',
+ 'highscore_show','highscore_set_background','highscore_set_border','highscore_set_font',
+ 'highscore_set_colors','highscore_set_strings','highscore_show_ext','highscore_clear',
+ 'highscore_add','highscore_add_current','highscore_value','highscore_name','draw_highscore',
+ // Resources
+ 'sprite_exists','sprite_get_name','sprite_get_number','sprite_get_width','sprite_get_height',
+ 'sprite_get_transparent','sprite_get_smooth','sprite_get_preload','sprite_get_xoffset',
+ 'sprite_get_yoffset','sprite_get_bbox_left','sprite_get_bbox_right','sprite_get_bbox_top',
+ 'sprite_get_bbox_bottom','sprite_get_bbox_mode','sprite_get_precise',
+ 'sound_exists','sound_get_name','sound_get_kind','sound_get_preload','sound_discard',
+ 'sound_restore',
+ 'background_exists','background_get_name','background_get_width','background_get_height',
+ 'background_get_transparent','background_get_smooth','background_get_preload',
+ 'font_exists','font_get_name','font_get_fontname','font_get_bold','font_get_italic',
+ 'font_get_first','font_get_last',
+ 'path_exists','path_get_name','path_get_length','path_get_kind','path_get_closed',
+ 'path_get_precision','path_get_number','path_get_point_x','path_get_point_y',
+ 'path_get_point_speed','path_get_x','path_get_y','path_get_speed',
+ 'script_exists','script_get_name','script_get_text',
+ 'timeline_exists','timeline_get_name',
+ 'object_exists','object_get_name','object_get_sprite','object_get_solid','object_get_visible',
+ 'object_get_depth','object_get_persistent','object_get_mask','object_get_parent',
+ 'object_is_ancestor',
+ 'room_exists','room_get_name',
+ // Changing resources
+ 'sprite_set_offset','sprite_set_bbox_mode','sprite_set_bbox','sprite_set_precise',
+ 'sprite_duplicate','sprite_assign','sprite_merge','sprite_add','sprite_replace',
+ 'sprite_create_from_screen','sprite_add_from_screen','sprite_create_from_surface',
+ 'sprite_add_from_surface','sprite_delete','sprite_set_alpha_from_sprite',
+ 'sound_add','sound_replace','sound_delete',
+ 'background_duplicate','background_assign','background_add','background_replace',
+ 'background_create_color','background_create_gradient','background_create_from_screen',
+ 'background_create_from_surface','background_delete','background_set_alpha_from_background',
+ 'font_add','font_add_sprite','font_replace_sprite','font_delete',
+ 'path_set_kind','path_set_closed','path_set_precision','path_add','path_delete','path_duplicate',
+ 'path_assign','path_append','path_add_point','path_insert_point','path_change_point',
+ 'path_delete_point','path_clear_points','path_reverse','path_mirror','path_flip','path_rotate',
+ 'path_scale','path_shift',
+ 'execute_string','execute_file','script_execute',
+ 'timeline_add','timeline_delete','timeline_moment_add','timeline_moment_clear',
+ 'object_set_sprite','object_set_solid','object_set_visible','object_set_depth',
+ 'object_set_persistent','object_set_mask','object_set_parent','object_add','object_delete',
+ 'object_event_add','object_event_clear',
+ 'room_set_width','room_set_height','room_set_caption','room_set_persistent','room_set_code',
+ 'room_set_background_color','room_set_background','room_set_view','room_set_view_enabled',
+ 'room_add','room_duplicate','room_assign','room_instance_add','room_instance_clear',
+ 'room_tile_add','room_tile_add_ext','room_tile_clear',
+ // Files, registry and executing programs
+ 'file_text_open_read','file_text_open_write','file_text_open_append','file_text_close',
+ 'file_text_write_string','file_text_write_real','file_text_writeln','file_text_read_string',
+ 'file_text_read_real','file_text_readln','file_text_eof','file_exists','file_delete',
+ 'file_rename','file_copy','directory_exists','directory_create','file_find_first',
+ 'file_find_next','file_find_close','file_attributes', 'filename_name','filename_path',
+ 'filename_dir','filename_drive','filename_ext','filename_change_ext','file_bin_open',
+ 'file_bin_rewrite','file_bin_close','file_bin_size','file_bin_position','file_bin_seek',
+ 'file_bin_write_byte','file_bin_read_byte','parameter_count','parameter_string',
+ 'environment_get_variable',
+ 'registry_write_string','registry_write_real','registry_read_string','registry_read_real',
+ 'registry_exists','registry_write_string_ext','registry_write_real_ext',
+ 'registry_read_string_ext','registry_read_real_ext','registry_exists_ext','registry_set_root',
+ 'ini_open','ini_close','ini_read_string','ini_read_real','ini_write_string','ini_write_real',
+ 'ini_key_exists','ini_section_exists','ini_key_delete','ini_section_delete',
+ 'execute_program','execute_shell',
+ // Data structures
+ 'ds_stack_create','ds_stack_destroy','ds_stack_clear','ds_stack_size','ds_stack_empty',
+ 'ds_stack_push','ds_stack_pop','ds_stack_top',
+ 'ds_queue_create','ds_queue_destroy','ds_queue_clear','ds_queue_size','ds_queue_empty',
+ 'ds_queue_enqueue','ds_queue_dequeue','ds_queue_head','ds_queue_tail',
+ 'ds_list_create','ds_list_destroy','ds_list_clear','ds_list_size','ds_list_empty','ds_list_add',
+ 'ds_list_insert','ds_list_replace','ds_list_delete','ds_list_find_index','ds_list_find_value',
+ 'ds_list_sort',
+ 'ds_map_create','ds_map_destroy','ds_map_clear','ds_map_size','ds_map_empty','ds_map_add',
+ 'ds_map_replace','ds_map_delete','ds_map_exists','ds_map_find_value','ds_map_find_previous',
+ 'ds_map_find_next','ds_map_find_first','ds_map_find_last',
+ 'ds_priority_create','ds_priority_destroy','ds_priority_clear','ds_priority_size',
+ 'ds_priority_empty','ds_priority_add','ds_priority_change_priority','ds_priority_find_priority',
+ 'ds_priority_delete_value','ds_priority_delete_min','ds_priority_find_min',
+ 'ds_priority_delete_max','ds_priority_find_max',
+ 'ds_grid_create','ds_grid_destroy','ds_grid_resize','ds_grid_width','ds_grid_height',
+ 'ds_grid_clear','ds_grid_set','ds_grid_add','ds_grid_multiply','ds_grid_set_region',
+ 'ds_grid_add_region','ds_grid_multiply_region','ds_grid_set_disk','ds_grid_add_disk',
+ 'ds_grid_multiply_disk','ds_grid_get','ds_grid_get_sum','ds_grid_get_max','ds_grid_get_min',
+ 'ds_grid_get_mean','ds_grid_get_disk_sum','ds_grid_get_disk_min','ds_grid_get_disk_max',
+ 'ds_grid_get_disk_mean','ds_grid_value_exists','ds_grid_value_x','ds_grid_value_y',
+ 'ds_grid_value_disk_exists','ds_grid_value_disk_x','ds_grid_value_disk_y',
+ // Creating particles
+ 'effect_create_below','effect_create_above','effect_clear',
+ 'part_type_create','part_type_destroy','part_type_exists','part_type_clear','part_type_shape',
+ 'part_type_sprite','part_type_size','part_type_scale',
+ 'part_type_orientation','part_type_color1','part_type_color2','part_type_color3',
+ 'part_type_color_mix','part_type_color_rgb','part_type_color_hsv',
+ 'part_type_alpha1','part_type_alpha2','part_type_alpha3','part_type_blend','part_type_life',
+ 'part_type_step','part_type_death','part_type_speed','part_type_direction','part_type_gravity',
+ 'part_system_create','part_system_destroy','part_system_exists','part_system_clear',
+ 'part_system_draw_order','part_system_depth','part_system_position',
+ 'part_system_automatic_update','part_system_automatic_draw','part_system_update',
+ 'part_system_drawit','part_particles_create','part_particles_create_color',
+ 'part_particles_clear','part_particles_count',
+ 'part_emitter_create','part_emitter_destroy','part_emitter_destroy_all','part_emitter_exists',
+ 'part_emitter_clear','part_emitter_region','part_emitter_burst','part_emitter_stream',
+ 'part_attractor_create','part_attractor_destroy','part_attractor_destroy_all',
+ 'part_attractor_exists','part_attractor_clear','part_attractor_position','part_attractor_force',
+ 'part_destroyer_create','part_destroyer_destroy','part_destroyer_destroy_all',
+ 'part_destroyer_exists','part_destroyer_clear','part_destroyer_region',
+ 'part_deflector_create','part_deflector_destroy','part_deflector_destroy_all',
+ 'part_deflector_exists','part_deflector_clear','part_deflector_region','part_deflector_kind',
+ 'part_deflector_friction',
+ 'part_changer_create','part_changer_destroy','part_changer_destroy_all','part_changer_exists',
+ 'part_changer_clear','part_changer_region','part_changer_types','part_changer_kind',
+ // Multiplayer games
+ 'mplay_init_ipx','mplay_init_tcpip','mplay_init_modem','mplay_init_serial',
+ 'mplay_connect_status','mplay_end','mplay_ipaddress',
+ 'mplay_session_create','mplay_session_find','mplay_session_name','mplay_session_join',
+ 'mplay_session_mode','mplay_session_status','mplay_session_end',
+ 'mplay_player_find','mplay_player_name','mplay_player_id',
+ 'mplay_data_write','mplay_data_read','mplay_data_mode',
+ 'mplay_message_send','mplay_message_send_guaranteed','mplay_message_receive','mplay_message_id',
+ 'mplay_message_value','mplay_message_player','mplay_message_name','mplay_message_count',
+ 'mplay_message_clear',
+ // Using DLL's
+ 'external_define','external_call','external_free','window_handle',
+ // 3D Graphics
+ 'd3d_start','d3d_end','d3d_set_hidden','d3d_set_perspective',
+ 'd3d_set_depth',
+ 'd3d_primitive_begin','d3d_vertex','d3d_vertex_color','d3d_primitive_end',
+ 'd3d_primitive_begin_texture','d3d_vertex_texture','d3d_vertex_texture_color','d3d_set_culling',
+ 'd3d_draw_block','d3d_draw_cylinder','d3d_draw_cone','d3d_draw_ellipsoid','d3d_draw_wall',
+ 'd3d_draw_floor',
+ 'd3d_set_projection','d3d_set_projection_ext','d3d_set_projection_ortho',
+ 'd3d_set_projection_perspective',
+ 'd3d_transform_set_identity','d3d_transform_set_translation','d3d_transform_set_scaling',
+ 'd3d_transform_set_rotation_x','d3d_transform_set_rotation_y','d3d_transform_set_rotation_z',
+ 'd3d_transform_set_rotation_axis','d3d_transform_add_translation','d3d_transform_add_scaling',
+ 'd3d_transform_add_rotation_x','d3d_transform_add_rotation_y','d3d_transform_add_rotation_z',
+ 'd3d_transform_add_rotation_axis','d3d_transform_stack_clear','d3d_transform_stack_empty',
+ 'd3d_transform_stack_push','d3d_transform_stack_pop','d3d_transform_stack_top',
+ 'd3d_transform_stack_discard',
+ 'd3d_set_fog',
+ 'd3d_set_lighting','d3d_set_shading','d3d_light_define_direction','d3d_light_define_point',
+ 'd3d_light_enable','d3d_vertex_normal','d3d_vertex_normal_color','d3d_vertex_normal_texture',
+ 'd3d_vertex_normal_texture_color',
+ 'd3d_model_create','d3d_model_destroy','d3d_model_clear','d3d_model_save','d3d_model_load',
+ 'd3d_model_draw','d3d_model_primitive_begin','d3d_model_vertex','d3d_model_vertex_color',
+ 'd3d_model_vertex_texture','d3d_model_vertex_texture_color','d3d_model_vertex_normal',
+ 'd3d_model_vertex_normal_color','d3d_model_vertex_normal_texture',
+ 'd3d_model_vertex_normal_texture_color','d3d_model_primitive_end','d3d_model_block',
+ 'd3d_model_cylinder','d3d_model_cone','d3d_model_ellipsoid','d3d_model_wall','d3d_model_floor'
+ ),
+ // constants
+ 4 => array(
+ 'true', 'false', 'pi',
+ 'ev_destroy','ev_step','ev_alarm','ev_keyboard','ev_mouse','ev_collision','ev_other','ev_draw',
+ 'ev_keypress','ev_keyrelease','ev_left_button','ev_right_button','ev_middle_button',
+ 'ev_no_button','ev_left_press','ev_right_press','ev_middle_press','ev_left_release',
+ 'ev_right_release','ev_middle_release','ev_mouse_enter','ev_mouse_leave','ev_mouse_wheel_up',
+ 'ev_mouse_wheel_down','ev_global_left_button','ev_global_right_button','ev_global_middle_button',
+ 'ev_global_left_press','ev_global_right_press','ev_global_middle_press','ev_global_left_release',
+ 'ev_global_right_release','ev_global_middle_release','ev_joystick1_left','ev_joystick1_right',
+ 'ev_joystick1_up','ev_joystick1_down','ev_joystick1_button1','ev_joystick1_button2',
+ 'ev_joystick1_button3','ev_joystick1_button4','ev_joystick1_button5','ev_joystick1_button6',
+ 'ev_joystick1_button7','ev_joystick1_button8','ev_joystick2_left','ev_joystick2_right',
+ 'ev_joystick2_up','ev_joystick2_down','ev_joystick2_button1','ev_joystick2_button2',
+ 'ev_joystick2_button3','ev_joystick2_button4','ev_joystick2_button5','ev_joystick2_button6',
+ 'ev_joystick2_button7','ev_joystick2_button8',
+ 'ev_outside','ev_boundary','ev_game_start','ev_game_end','ev_room_start','ev_room_end',
+ 'ev_no_more_lives','ev_no_more_health','ev_animation_end','ev_end_of_path','ev_user0','ev_user1',
+ 'ev_user2','ev_user3','ev_user4','ev_user5','ev_user6','ev_user7','ev_user8','ev_user9',
+ 'ev_user10','ev_user11','ev_user12','ev_user13','ev_user14','ev_user15','ev_step_normal',
+ 'ev_step_begin','ev_step_end',
+ 'vk_nokey','vk_anykey','vk_left','vk_right','vk_up','vk_down','vk_enter','vk_escape','vk_space',
+ 'vk_shift','vk_control','vk_alt','vk_backspace','vk_tab','vk_home','vk_end','vk_delete',
+ 'vk_insert','vk_pageup','vk_pagedown','vk_pause','vk_printscreen',
+ 'vk_f1','vk_f2','vk_f3','vk_f4','vk_f5','vk_f6','vk_f7','vk_f8','vk_f9','vk_f10','vk_f11','vk_f12',
+ 'vk_numpad0','vk_numpad1','vk_numpad2','vk_numpad3','vk_numpad4','vk_numpad5','vk_numpad6',
+ 'vk_numpad7','vk_numpad8','vk_numpad9', 'vk_multiply','vk_divide','vk_add','vk_subtract',
+ 'vk_decimal','vk_lshift','vk_lcontrol','vk_lalt','vk_rshift','vk_rcontrol','vk_ralt',
+ 'c_aqua','c_black','c_blue','c_dkgray','c_fuchsia','c_gray','c_green','c_lime','c_ltgray',
+ 'c_maroon','c_navy','c_olive','c_purple','c_red','c_silver','c_teal','c_white','c_yellow',
+ 'fa_left', 'fa_center','fa_right','fa_top','fa_middle','fa_bottom',
+ 'pr_pointlist','pr_linelist','pr_linestrip','pr_trianglelist','pr_trianglestrip',
+ 'pr_trianglefan',
+ 'cr_none','cr_arrow','cr_cross','cr_beam','cr_size_nesw','cr_size_ns','cr_size_nwse',
+ 'cr_size_we','cr_uparrow','cr_hourglass','cr_drag','cr_nodrop','cr_hsplit','cr_vsplit',
+ 'cr_multidrag','cr_sqlwait','cr_no','cr_appstart','cr_help','cr_handpoint','cr_size_all',
+ 'se_chorus','se_echo','se_flanger','se_gargle','se_reverb','se_compressor','se_equalizer',
+ 'fa_readonly','fa_hidden','fa_sysfile','fa_volumeid','fa_directory','fa_archive',
+ 'pt_shape_pixel','pt_shape_disk','pt_shape_square','pt_shape_line','pt_shape_star',
+ 'pt_shape_circle','pt_shape_ring','pt_shape_sphere','pt_shape_flare','pt_shape_spark',
+ 'pt_shape_explosion','pt_shape_cloud','pt_shape_smoke','pt_shape_snow',
+ 'ps_shape_rectangle','ps_shape_ellipse ','ps_shape_diamond','ps_shape_line',
+ 'ps_distr_linear','ps_distr_gaussian','ps_force_constant','ps_force_linear','ps_force_quadratic',
+ 'ps_deflect_horizontal', 'ps_deflect_vertical',
+ 'ps_change_motion','ps_change_shape','ps_change_all'
+ ),
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '{', '}', '[', ']',
+ '&&', '||', '^^', '&', '|', '^',
+ '<', '<=', '==', '!=', '>', '>=', '=',
+ '<<', '>>',
+ '+=', '-=', '*=', '/=',
+ '+', '-', '*', '/',
+ '!', '~', ',', ';'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ 2 => true,
+ 3 => true,
+ 4 => true,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'font-weight: bold; color: #000000;',
+ 2 => 'font-weight: bold; color: #000000;',
+ 3 => 'color: navy;',
+ 4 => 'color: #663300;',
+ ),
+ 'COMMENTS' => array(
+ 1 => 'font-style: italic; color: green;',
+ 'MULTI' => 'font-style: italic; color: green;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #000000;' //'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #202020;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66; font-weight: bold;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/gnuplot.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/gnuplot.php
new file mode 100644
index 000000000..863d0dbd6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/gnuplot.php
@@ -0,0 +1,296 @@
+<?php
+/*************************************************************************************
+ * gnuplot.php
+ * ----------
+ * Author: Milian Wolff (mail@milianw.de)
+ * Copyright: (c) 2008 Milian Wolff (http://milianw.de)
+ * Release Version: 1.0.8.4
+ * Date Started: 2008/07/07
+ *
+ * Gnuplot script language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/07/07 (1.0.8)
+ * - Initial import
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Gnuplot',
+ 'COMMENT_SINGLE' => array(1 => '#'),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('`', '"', "'"),
+ 'ESCAPE_CHAR' => '\\',
+ 'NUMBERS' =>
+ GESHI_NUMBER_INT_BASIC |
+ GESHI_NUMBER_FLT_NONSCI |
+ GESHI_NUMBER_FLT_SCI_SHORT |
+ GESHI_NUMBER_FLT_SCI_ZERO,
+ 'KEYWORDS' => array(
+ // copy output of help command, indent properly and use this replace regexp:
+ // ([a-z0-9_\-]+)(( )+|$) => '\1',\3
+
+ // commands as found in `help commands`
+ 1 => array(
+ 'bind', 'call', 'cd', 'clear',
+ 'exit', 'fit', 'help', 'history',
+ 'if', 'load', 'lower', 'pause',
+ 'plot', 'print', 'pwd', 'quit',
+ 'raise', 'replot', 'reread', 'reset',
+ 'save', 'set', 'shell', 'show',
+ 'splot', 'system', 'test', 'unset',
+ 'update'
+ ),
+ 2 => array(
+ // set commands as returned by `help set`
+ 'angles', 'arrow', 'autoscale', 'bars',
+ 'bmargin', 'border', 'boxwidth', 'cbdata',
+ 'cbdtics', 'cblabel', 'cbmtics', 'cbrange',
+ 'cbtics', 'clabel', 'clip', 'cntrparam',
+ 'colorbox', 'contour', 'datafile', 'date_specifiers',
+ 'decimalsign', 'dgrid3d', 'dummy', 'encoding',
+ 'fontpath', 'format', 'grid',
+ 'hidden3d', 'historysize', 'isosamples', 'key',
+ 'label', 'lmargin', 'loadpath', 'locale',
+ 'log', 'logscale', 'macros', 'mapping',
+ 'margin', 'missing', 'mouse', 'multiplot',
+ 'mx2tics', 'mxtics', 'my2tics', 'mytics',
+ 'mztics', 'object', 'offsets', 'origin',
+ 'output', 'palette', 'parametric', 'pm3d',
+ 'pointsize', 'polar', 'rmargin',
+ 'rrange', 'samples', 'size', 'style',
+ 'surface', 'table', 'term', 'terminal',
+ 'termoption', 'tics', 'ticscale', 'ticslevel',
+ 'time_specifiers', 'timefmt', 'timestamp', 'title',
+ 'trange', 'urange', 'view',
+ 'vrange', 'x2data', 'x2dtics', 'x2label',
+ 'x2mtics', 'x2range', 'x2tics', 'x2zeroaxis',
+ 'xdata', 'xdtics', 'xlabel', 'xmtics',
+ 'xrange', 'xtics', 'xyplane', 'xzeroaxis',
+ 'y2data', 'y2dtics', 'y2label', 'y2mtics',
+ 'y2range', 'y2tics', 'y2zeroaxis', 'ydata',
+ 'ydtics', 'ylabel', 'ymtics', 'yrange',
+ 'ytics', 'yzeroaxis', 'zdata', 'zdtics',
+ 'zero', 'zeroaxis', 'zlabel', 'zmtics',
+ 'zrange', 'ztics', 'zzeroaxis',
+ // same but with leading no
+ 'noangles', 'noarrow', 'noautoscale', 'nobars',
+ 'nobmargin', 'noborder', 'noboxwidth', 'nocbdata',
+ 'nocbdtics', 'nocblabel', 'nocbmtics', 'nocbrange',
+ 'nocbtics', 'noclabel', 'noclip', 'nocntrparam',
+ 'nocolorbox', 'nocontour', 'nodatafile', 'nodate_specifiers',
+ 'nodecimalsign', 'nodgrid3d', 'nodummy', 'noencoding',
+ 'nofit', 'nofontpath', 'noformat', 'nogrid',
+ 'nohidden3d', 'nohistorysize', 'noisosamples', 'nokey',
+ 'nolabel', 'nolmargin', 'noloadpath', 'nolocale',
+ 'nolog', 'nologscale', 'nomacros', 'nomapping',
+ 'nomargin', 'nomissing', 'nomouse', 'nomultiplot',
+ 'nomx2tics', 'nomxtics', 'nomy2tics', 'nomytics',
+ 'nomztics', 'noobject', 'nooffsets', 'noorigin',
+ 'nooutput', 'nopalette', 'noparametric', 'nopm3d',
+ 'nopointsize', 'nopolar', 'noprint', 'normargin',
+ 'norrange', 'nosamples', 'nosize', 'nostyle',
+ 'nosurface', 'notable', 'noterm', 'noterminal',
+ 'notermoption', 'notics', 'noticscale', 'noticslevel',
+ 'notime_specifiers', 'notimefmt', 'notimestamp', 'notitle',
+ 'notmargin', 'notrange', 'nourange', 'noview',
+ 'novrange', 'nox2data', 'nox2dtics', 'nox2label',
+ 'nox2mtics', 'nox2range', 'nox2tics', 'nox2zeroaxis',
+ 'noxdata', 'noxdtics', 'noxlabel', 'noxmtics',
+ 'noxrange', 'noxtics', 'noxyplane', 'noxzeroaxis',
+ 'noy2data', 'noy2dtics', 'noy2label', 'noy2mtics',
+ 'noy2range', 'noy2tics', 'noy2zeroaxis', 'noydata',
+ 'noydtics', 'noylabel', 'noymtics', 'noyrange',
+ 'noytics', 'noyzeroaxis', 'nozdata', 'nozdtics',
+ 'nozero', 'nozeroaxis', 'nozlabel', 'nozmtics',
+ 'nozrange', 'noztics', 'nozzeroaxis',
+ ),
+ 3 => array(
+ // predefined variables
+ 'pi', 'NaN', 'GNUTERM',
+ 'GPVAL_X_MIN', 'GPVAL_X_MAX', 'GPVAL_Y_MIN', 'GPVAL_Y_MAX',
+ 'GPVAL_TERM', 'GPVAL_TERMOPTIONS', 'GPVAL_OUTPUT',
+ 'GPVAL_VERSION', 'GPVAL_PATcHLEVEL', 'GPVAL_COMPILE_OPTIONS',
+ 'MOUSE_KEY', 'MOUSE_X', 'MOUSE_X2', 'MOUSE_Y', 'MOUSE_Y2',
+ 'MOUSE_BUTTON', 'MOUSE_SHIFT', 'MOUSE_ALT', 'MOUSE_CTRL'
+ ),
+ 4 => array(
+ // predefined functions `help functions`
+ 'abs', 'acos', 'acosh', 'arg',
+ 'asin', 'asinh', 'atan', 'atan2',
+ 'atanh', 'besj0', 'besj1', 'besy0',
+ 'besy1', 'ceil', 'column', 'cos',
+ 'cosh', 'defined', 'erf', 'erfc',
+ 'exists', 'exp', 'floor', 'gamma',
+ 'gprintf', 'ibeta', 'igamma', 'imag',
+ 'int', 'inverf', 'invnorm', 'lambertw',
+ 'lgamma', 'log10', 'norm',
+ 'rand', 'random', 'real', 'sgn',
+ 'sin', 'sinh', 'sprintf', 'sqrt',
+ 'stringcolumn', 'strlen', 'strstrt', 'substr',
+ 'tan', 'tanh', 'timecolumn',
+ 'tm_hour', 'tm_mday', 'tm_min', 'tm_mon',
+ 'tm_sec', 'tm_wday', 'tm_yday', 'tm_year',
+ 'valid', 'word', 'words',
+ ),
+ 5 => array(
+ // mixed arguments
+ // there is no sane way to get these ones easily...
+ 'autofreq', 'x', 'y', 'z',
+ 'lt', 'linetype', 'lw', 'linewidth', 'ls', 'linestyle',
+ 'out', 'rotate by', 'screen',
+ 'enhanced', 'via',
+ // `help set key`
+ 'on', 'off', 'default', 'inside', 'outside', 'tmargin',
+ 'at', 'left', 'right', 'center', 'top', 'bottom', 'vertical', 'horizontal', 'Left', 'Right',
+ 'noreverse', 'reverse', 'noinvert', 'invert', 'samplen', 'spacing', 'width', 'height',
+ 'noautotitle', 'autotitle', 'noenhanced', 'nobox', 'box',
+
+ // help set terminal postscript
+ 'landscape', 'portrait', 'eps', 'defaultplex', 'simplex', 'duplex',
+ 'fontfile', 'add', 'delete', 'nofontfiles', 'level1', 'leveldefault',
+ 'color', 'colour', 'monochrome', 'solid', 'dashed', 'dashlength', 'dl',
+ 'rounded', 'butt', 'palfuncparam', 'blacktext', 'colortext', 'colourtext',
+ 'font',
+
+ // help set terminal png
+ 'notransparent', 'transparent', 'nointerlace', 'interlace',
+ 'notruecolor', 'truecolor', 'tiny', 'small', 'medium', 'large', 'giant',
+ 'nocrop', 'crop',
+
+ // `help plot`
+ 'acsplines', 'bezier', 'binary', 'csplines',
+ 'every',
+ 'example', 'frequency', 'index', 'matrix',
+ 'ranges', 'sbezier', 'smooth',
+ 'special-filenames', 'thru',
+ 'unique', 'using', 'with',
+
+ // `help plotting styles`
+ 'boxerrorbars', 'boxes', 'boxxyerrorbars', 'candlesticks',
+ 'dots', 'errorbars', 'errorlines', 'filledcurves',
+ 'financebars', 'fsteps', 'histeps', 'histograms',
+ 'image', 'impulses', 'labels', 'lines',
+ 'linespoints', 'points', 'rgbimage', 'steps',
+ 'vectors', 'xerrorbars', 'xerrorlines', 'xyerrorbars',
+ 'xyerrorlines', 'yerrorbars', 'yerrorlines',
+
+
+ // terminals `help terminals`
+ 'aed512', 'aed767', 'aifm', 'bitgraph',
+ 'cgm', 'corel', 'dumb', 'dxf',
+ 'eepic', 'emf', 'emtex', 'epslatex',
+ 'epson-180dpi', 'epson-60dpi', 'epson-lx800', 'fig',
+ 'gif', 'gpic', 'hp2623a', 'hp2648',
+ 'hp500c', 'hpdj', 'hpgl', 'hpljii',
+ 'hppj', 'imagen', 'jpeg', 'kc-tek40xx',
+ 'km-tek40xx', 'latex', 'mf', 'mif',
+ 'mp', 'nec-cp6', 'okidata', 'pbm',
+ 'pcl5', 'png', 'pop', 'postscript',
+ 'pslatex', 'pstex', 'pstricks', 'push',
+ 'qms', 'regis', 'selanar', 'starc',
+ 'svg', 'tandy-60dpi', 'tek40xx', 'tek410x',
+ 'texdraw', 'tgif', 'tkcanvas', 'tpic',
+ 'vttek', 'x11', 'xlib',
+ )
+ ),
+ 'REGEXPS' => array(
+ //Variable assignment
+ 0 => "(?<![?;>\w])([a-zA-Z_][a-zA-Z0-9_]*)\s*=",
+ //Numbers with unit
+ 1 => "(?<=^|\s)([0-9]*\.?[0-9]+\s*cm)"
+ ),
+ 'SYMBOLS' => array(
+ '-', '+', '~', '!', '$',
+ '*', '/', '%', '=', '<', '>', '&',
+ '^', '|', '.', 'eq', 'ne', '?:', ':', '`', ','
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ 2 => true,
+ 3 => true,
+ 4 => true,
+ 5 => true
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #b1b100;',
+ 2 => 'color: #990000;',
+ 3 => 'color: #550000;',
+ 4 => 'color: #7a0874;',
+ 5 => 'color: #448888;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #adadad; font-style: italic;',
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight:bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #000099; font-weight:bold;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #0000ff;',
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #000; font-weight: bold;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #007800;',
+ 1 => 'color: #cc66cc;'
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => 'http://www.google.com/search?q=%22set+{FNAME}%22+site%3Ahttp%3A%2F%2Fwww.gnuplot.info%2Fdocs%2F&amp;btnI=lucky',
+ 3 => '',
+ 4 => '',
+ 5 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'PARSER_CONTROL' => array(
+ 'KEYWORDS' => array(
+ 4 => array(
+ 'DISALLOWED_AFTER' => "(?![\.\-a-zA-Z0-9_%])"
+ )
+ )
+ ),
+ 'TAB_WIDTH' => 4
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/groovy.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/groovy.php
new file mode 100644
index 000000000..7db153c75
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/groovy.php
@@ -0,0 +1,1011 @@
+<?php
+/*************************************************************************************
+ * groovy.php
+ * ----------
+ * Author: Ivan F. Villanueva B. (geshi_groovy@artificialidea.com)
+ * Copyright: (c) 2006 Ivan F. Villanueva B.(http://www.artificialidea.com)
+ * Release Version: 1.0.8.4
+ * Date Started: 2006/04/29
+ *
+ * Groovy language file for GeSHi.
+ *
+ * Keywords from http: http://docs.codehaus.org/download/attachments/2715/groovy-reference-card.pdf?version=1
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * 2006/04/29 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2006/04/29)
+ * -------------------------
+ * Testing
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Groovy',
+ 'COMMENT_SINGLE' => array(1 => '//', 3 => '#'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'COMMENT_REGEXP' => array(
+ //Import and Package directives (Basic Support only)
+ 2 => '/(?:(?<=import[\\n\\s])|(?<=package[\\n\\s]))[\\n\\s]*([a-zA-Z0-9_]+\\.)*([a-zA-Z0-9_]+|\*)(?=[\n\s;])/i',
+ ),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'''", '"""', "'", '"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'case', 'do', 'else', 'for', 'foreach', 'if', 'in', 'switch',
+ 'while',
+ ),
+ 2 => array(
+ 'abstract', 'as', 'assert', 'break', 'catch', 'class', 'const',
+ 'continue', 'def', 'default', 'enum', 'extends',
+ 'false', 'final', 'finally', 'goto', 'implements', 'import',
+ 'instanceof', 'interface', 'native', 'new', 'null',
+ 'package', 'private', 'property', 'protected',
+ 'public', 'return', 'static', 'strictfp', 'super',
+ 'synchronized', 'this', 'throw', 'throws',
+ 'transient', 'true', 'try', 'volatile'
+ ),
+ 3 => array(
+ 'AbstractAction', 'AbstractBorder', 'AbstractButton',
+ 'AbstractCellEditor', 'AbstractCollection',
+ 'AbstractColorChooserPanel', 'AbstractDocument',
+ 'AbstractDocument.AttributeContext',
+ 'AbstractDocument.Content',
+ 'AbstractDocument.ElementEdit',
+ 'AbstractLayoutCache',
+ 'AbstractLayoutCache.NodeDimensions', 'AbstractList',
+ 'AbstractListModel', 'AbstractMap',
+ 'AbstractMethodError', 'AbstractSequentialList',
+ 'AbstractSet', 'AbstractTableModel',
+ 'AbstractUndoableEdit', 'AbstractWriter',
+ 'AccessControlContext', 'AccessControlException',
+ 'AccessController', 'AccessException', 'Accessible',
+ 'AccessibleAction', 'AccessibleBundle',
+ 'AccessibleComponent', 'AccessibleContext',
+ 'AccessibleHyperlink', 'AccessibleHypertext',
+ 'AccessibleIcon', 'AccessibleObject',
+ 'AccessibleRelation', 'AccessibleRelationSet',
+ 'AccessibleResourceBundle', 'AccessibleRole',
+ 'AccessibleSelection', 'AccessibleState',
+ 'AccessibleStateSet', 'AccessibleTable',
+ 'AccessibleTableModelChange', 'AccessibleText',
+ 'AccessibleValue', 'Acl', 'AclEntry',
+ 'AclNotFoundException', 'Action', 'ActionEvent',
+ 'ActionListener', 'ActionMap', 'ActionMapUIResource',
+ 'Activatable', 'ActivateFailedException',
+ 'ActivationDesc', 'ActivationException',
+ 'ActivationGroup', 'ActivationGroupDesc',
+ 'ActivationGroupDesc.CommandEnvironment',
+ 'ActivationGroupID', 'ActivationID',
+ 'ActivationInstantiator', 'ActivationMonitor',
+ 'ActivationSystem', 'Activator', 'ActiveEvent',
+ 'Adjustable', 'AdjustmentEvent',
+ 'AdjustmentListener', 'Adler32', 'AffineTransform',
+ 'AffineTransformOp', 'AlgorithmParameterGenerator',
+ 'AlgorithmParameterGeneratorSpi',
+ 'AlgorithmParameters', 'AlgorithmParameterSpec',
+ 'AlgorithmParametersSpi', 'AllPermission',
+ 'AlphaComposite', 'AlreadyBound',
+ 'AlreadyBoundException', 'AlreadyBoundHelper',
+ 'AlreadyBoundHolder', 'AncestorEvent',
+ 'AncestorListener', 'Annotation', 'Any', 'AnyHolder',
+ 'AnySeqHelper', 'AnySeqHolder', 'Applet',
+ 'AppletContext', 'AppletInitializer', 'AppletStub',
+ 'ApplicationException', 'Arc2D', 'Arc2D.Double',
+ 'Arc2D.Float', 'Area', 'AreaAveragingScaleFilter',
+ 'ARG_IN', 'ARG_INOUT', 'ARG_OUT',
+ 'ArithmeticException', 'Array',
+ 'ArrayIndexOutOfBoundsException', 'ArrayList',
+ 'Arrays', 'ArrayStoreException', 'AsyncBoxView',
+ 'Attribute', 'AttributedCharacterIterator',
+ 'AttributedCharacterIterator.Attribute',
+ 'AttributedString', 'AttributeInUseException',
+ 'AttributeList', 'AttributeModificationException',
+ 'Attributes', 'Attributes.Name', 'AttributeSet',
+ 'AttributeSet.CharacterAttribute',
+ 'AttributeSet.ColorAttribute',
+ 'AttributeSet.FontAttribute',
+ 'AttributeSet.ParagraphAttribute', 'AudioClip',
+ 'AudioFileFormat', 'AudioFileFormat.Type',
+ 'AudioFileReader', 'AudioFileWriter', 'AudioFormat',
+ 'AudioFormat.Encoding', 'AudioInputStream',
+ 'AudioPermission', 'AudioSystem',
+ 'AuthenticationException',
+ 'AuthenticationNotSupportedException',
+ 'Authenticator', 'Autoscroll', 'AWTError',
+ 'AWTEvent', 'AWTEventListener',
+ 'AWTEventMulticaster', 'AWTException',
+ 'AWTPermission', 'BadKind', 'BadLocationException',
+ 'BAD_CONTEXT', 'BAD_INV_ORDER', 'BAD_OPERATION',
+ 'BAD_PARAM', 'BAD_POLICY', 'BAD_POLICY_TYPE',
+ 'BAD_POLICY_VALUE', 'BAD_TYPECODE', 'BandCombineOp',
+ 'BandedSampleModel', 'BasicArrowButton',
+ 'BasicAttribute', 'BasicAttributes', 'BasicBorders',
+ 'BasicBorders.ButtonBorder',
+ 'BasicBorders.FieldBorder',
+ 'BasicBorders.MarginBorder',
+ 'BasicBorders.MenuBarBorder',
+ 'BasicBorders.RadioButtonBorder',
+ 'BasicBorders.SplitPaneBorder',
+ 'BasicBorders.ToggleButtonBorder',
+ 'BasicButtonListener', 'BasicButtonUI',
+ 'BasicCheckBoxMenuItemUI', 'BasicCheckBoxUI',
+ 'BasicColorChooserUI', 'BasicComboBoxEditor',
+ 'BasicComboBoxEditor.UIResource',
+ 'BasicComboBoxRenderer',
+ 'BasicComboBoxRenderer.UIResource',
+ 'BasicComboBoxUI', 'BasicComboPopup',
+ 'BasicDesktopIconUI', 'BasicDesktopPaneUI',
+ 'BasicDirectoryModel', 'BasicEditorPaneUI',
+ 'BasicFileChooserUI', 'BasicGraphicsUtils',
+ 'BasicHTML', 'BasicIconFactory',
+ 'BasicInternalFrameTitlePane',
+ 'BasicInternalFrameUI', 'BasicLabelUI',
+ 'BasicListUI', 'BasicLookAndFeel', 'BasicMenuBarUI',
+ 'BasicMenuItemUI', 'BasicMenuUI',
+ 'BasicOptionPaneUI',
+ 'BasicOptionPaneUI.ButtonAreaLayout', 'BasicPanelUI',
+ 'BasicPasswordFieldUI', 'BasicPermission',
+ 'BasicPopupMenuSeparatorUI', 'BasicPopupMenuUI',
+ 'BasicProgressBarUI', 'BasicRadioButtonMenuItemUI',
+ 'BasicRadioButtonUI', 'BasicRootPaneUI',
+ 'BasicScrollBarUI', 'BasicScrollPaneUI',
+ 'BasicSeparatorUI', 'BasicSliderUI',
+ 'BasicSplitPaneDivider', 'BasicSplitPaneUI',
+ 'BasicStroke', 'BasicTabbedPaneUI',
+ 'BasicTableHeaderUI', 'BasicTableUI',
+ 'BasicTextAreaUI', 'BasicTextFieldUI',
+ 'BasicTextPaneUI', 'BasicTextUI',
+ 'BasicTextUI.BasicCaret',
+ 'BasicTextUI.BasicHighlighter',
+ 'BasicToggleButtonUI', 'BasicToolBarSeparatorUI',
+ 'BasicToolBarUI', 'BasicToolTipUI', 'BasicTreeUI',
+ 'BasicViewportUI', 'BatchUpdateException',
+ 'BeanContext', 'BeanContextChild',
+ 'BeanContextChildComponentProxy',
+ 'BeanContextChildSupport',
+ 'BeanContextContainerProxy', 'BeanContextEvent',
+ 'BeanContextMembershipEvent',
+ 'BeanContextMembershipListener', 'BeanContextProxy',
+ 'BeanContextServiceAvailableEvent',
+ 'BeanContextServiceProvider',
+ 'BeanContextServiceProviderBeanInfo',
+ 'BeanContextServiceRevokedEvent',
+ 'BeanContextServiceRevokedListener',
+ 'BeanContextServices', 'BeanContextServicesListener',
+ 'BeanContextServicesSupport',
+ 'BeanContextServicesSupport.BCSSServiceProvider',
+ 'BeanContextSupport',
+ 'BeanContextSupport.BCSIterator', 'BeanDescriptor',
+ 'BeanInfo', 'Beans', 'BevelBorder', 'BigDecimal',
+ 'BigInteger', 'BinaryRefAddr', 'BindException',
+ 'Binding', 'BindingHelper', 'BindingHolder',
+ 'BindingIterator', 'BindingIteratorHelper',
+ 'BindingIteratorHolder', 'BindingIteratorOperations',
+ 'BindingListHelper', 'BindingListHolder',
+ 'BindingType', 'BindingTypeHelper',
+ 'BindingTypeHolder', 'BitSet', 'Blob', 'BlockView',
+ 'Book', 'Boolean', 'BooleanControl',
+ 'BooleanControl.Type', 'BooleanHolder',
+ 'BooleanSeqHelper', 'BooleanSeqHolder', 'Border',
+ 'BorderFactory', 'BorderLayout', 'BorderUIResource',
+ 'BorderUIResource.BevelBorderUIResource',
+ 'BorderUIResource.CompoundBorderUIResource',
+ 'BorderUIResource.EmptyBorderUIResource',
+ 'BorderUIResource.EtchedBorderUIResource',
+ 'BorderUIResource.LineBorderUIResource',
+ 'BorderUIResource.MatteBorderUIResource',
+ 'BorderUIResource.TitledBorderUIResource',
+ 'BoundedRangeModel', 'Bounds', 'Box', 'Box.Filler',
+ 'BoxedValueHelper', 'BoxLayout', 'BoxView',
+ 'BreakIterator', 'BufferedImage',
+ 'BufferedImageFilter', 'BufferedImageOp',
+ 'BufferedInputStream', 'BufferedOutputStream',
+ 'BufferedReader', 'BufferedWriter', 'Button',
+ 'ButtonGroup', 'ButtonModel', 'ButtonUI', 'Byte',
+ 'ByteArrayInputStream', 'ByteArrayOutputStream',
+ 'ByteHolder', 'ByteLookupTable', 'Calendar',
+ 'CallableStatement', 'CannotProceed',
+ 'CannotProceedException', 'CannotProceedHelper',
+ 'CannotProceedHolder', 'CannotRedoException',
+ 'CannotUndoException', 'Canvas', 'CardLayout',
+ 'Caret', 'CaretEvent', 'CaretListener', 'CellEditor',
+ 'CellEditorListener', 'CellRendererPane',
+ 'Certificate', 'Certificate.CertificateRep',
+ 'CertificateEncodingException',
+ 'CertificateException',
+ 'CertificateExpiredException', 'CertificateFactory',
+ 'CertificateFactorySpi',
+ 'CertificateNotYetValidException',
+ 'CertificateParsingException',
+ 'ChangedCharSetException', 'ChangeEvent',
+ 'ChangeListener', 'Character', 'Character.Subset',
+ 'Character.UnicodeBlock', 'CharacterIterator',
+ 'CharArrayReader', 'CharArrayWriter',
+ 'CharConversionException', 'CharHolder',
+ 'CharSeqHelper', 'CharSeqHolder', 'Checkbox',
+ 'CheckboxGroup', 'CheckboxMenuItem',
+ 'CheckedInputStream', 'CheckedOutputStream',
+ 'Checksum', 'Choice', 'ChoiceFormat', 'Class',
+ 'ClassCastException', 'ClassCircularityError',
+ 'ClassDesc', 'ClassFormatError', 'ClassLoader',
+ 'ClassNotFoundException', 'Clip', 'Clipboard',
+ 'ClipboardOwner', 'Clob', 'Cloneable',
+ 'CloneNotSupportedException', 'CMMException',
+ 'CodeSource', 'CollationElementIterator',
+ 'CollationKey', 'Collator', 'Collection',
+ 'Collections', 'Color',
+ 'ColorChooserComponentFactory', 'ColorChooserUI',
+ 'ColorConvertOp', 'ColorModel',
+ 'ColorSelectionModel', 'ColorSpace',
+ 'ColorUIResource', 'ComboBoxEditor', 'ComboBoxModel',
+ 'ComboBoxUI', 'ComboPopup', 'CommunicationException',
+ 'COMM_FAILURE', 'Comparable', 'Comparator',
+ 'Compiler', 'CompletionStatus',
+ 'CompletionStatusHelper', 'Component',
+ 'ComponentAdapter', 'ComponentColorModel',
+ 'ComponentEvent', 'ComponentInputMap',
+ 'ComponentInputMapUIResource', 'ComponentListener',
+ 'ComponentOrientation', 'ComponentSampleModel',
+ 'ComponentUI', 'ComponentView', 'Composite',
+ 'CompositeContext', 'CompositeName', 'CompositeView',
+ 'CompoundBorder', 'CompoundControl',
+ 'CompoundControl.Type', 'CompoundEdit',
+ 'CompoundName', 'ConcurrentModificationException',
+ 'ConfigurationException', 'ConnectException',
+ 'ConnectIOException', 'Connection', 'Constructor',
+ 'Container', 'ContainerAdapter', 'ContainerEvent',
+ 'ContainerListener', 'ContentHandler',
+ 'ContentHandlerFactory', 'ContentModel', 'Context',
+ 'ContextList', 'ContextNotEmptyException',
+ 'ContextualRenderedImageFactory', 'Control',
+ 'Control.Type', 'ControlFactory',
+ 'ControllerEventListener', 'ConvolveOp', 'CRC32',
+ 'CRL', 'CRLException', 'CropImageFilter', 'CSS',
+ 'CSS.Attribute', 'CTX_RESTRICT_SCOPE',
+ 'CubicCurve2D', 'CubicCurve2D.Double',
+ 'CubicCurve2D.Float', 'Current', 'CurrentHelper',
+ 'CurrentHolder', 'CurrentOperations', 'Cursor',
+ 'Customizer', 'CustomMarshal', 'CustomValue',
+ 'DatabaseMetaData', 'DataBuffer', 'DataBufferByte',
+ 'DataBufferInt', 'DataBufferShort',
+ 'DataBufferUShort', 'DataFlavor',
+ 'DataFormatException', 'DatagramPacket',
+ 'DatagramSocket', 'DatagramSocketImpl',
+ 'DatagramSocketImplFactory', 'DataInput',
+ 'DataInputStream', 'DataLine', 'DataLine.Info',
+ 'DataOutput', 'DataOutputStream', 'DataTruncation',
+ 'DATA_CONVERSION', 'Date', 'DateFormat',
+ 'DateFormatSymbols', 'DebugGraphics',
+ 'DecimalFormat', 'DecimalFormatSymbols',
+ 'DefaultBoundedRangeModel', 'DefaultButtonModel',
+ 'DefaultCaret', 'DefaultCellEditor',
+ 'DefaultColorSelectionModel', 'DefaultComboBoxModel',
+ 'DefaultDesktopManager', 'DefaultEditorKit',
+ 'DefaultEditorKit.BeepAction',
+ 'DefaultEditorKit.CopyAction',
+ 'DefaultEditorKit.CutAction',
+ 'DefaultEditorKit.DefaultKeyTypedAction',
+ 'DefaultEditorKit.InsertBreakAction',
+ 'DefaultEditorKit.InsertContentAction',
+ 'DefaultEditorKit.InsertTabAction',
+ 'DefaultEditorKit.PasteAction,',
+ 'DefaultFocusManager', 'DefaultHighlighter',
+ 'DefaultHighlighter.DefaultHighlightPainter',
+ 'DefaultListCellRenderer',
+ 'DefaultListCellRenderer.UIResource',
+ 'DefaultListModel', 'DefaultListSelectionModel',
+ 'DefaultMenuLayout', 'DefaultMetalTheme',
+ 'DefaultMutableTreeNode',
+ 'DefaultSingleSelectionModel',
+ 'DefaultStyledDocument',
+ 'DefaultStyledDocument.AttributeUndoableEdit',
+ 'DefaultStyledDocument.ElementSpec',
+ 'DefaultTableCellRenderer',
+ 'DefaultTableCellRenderer.UIResource',
+ 'DefaultTableColumnModel', 'DefaultTableModel',
+ 'DefaultTextUI', 'DefaultTreeCellEditor',
+ 'DefaultTreeCellRenderer', 'DefaultTreeModel',
+ 'DefaultTreeSelectionModel', 'DefinitionKind',
+ 'DefinitionKindHelper', 'Deflater',
+ 'DeflaterOutputStream', 'Delegate', 'DesignMode',
+ 'DesktopIconUI', 'DesktopManager', 'DesktopPaneUI',
+ 'DGC', 'Dialog', 'Dictionary', 'DigestException',
+ 'DigestInputStream', 'DigestOutputStream',
+ 'Dimension', 'Dimension2D', 'DimensionUIResource',
+ 'DirContext', 'DirectColorModel', 'DirectoryManager',
+ 'DirObjectFactory', 'DirStateFactory',
+ 'DirStateFactory.Result', 'DnDConstants', 'Document',
+ 'DocumentEvent', 'DocumentEvent.ElementChange',
+ 'DocumentEvent.EventType', 'DocumentListener',
+ 'DocumentParser', 'DomainCombiner', 'DomainManager',
+ 'DomainManagerOperations', 'Double', 'DoubleHolder',
+ 'DoubleSeqHelper', 'DoubleSeqHolder',
+ 'DragGestureEvent', 'DragGestureListener',
+ 'DragGestureRecognizer', 'DragSource',
+ 'DragSourceContext', 'DragSourceDragEvent',
+ 'DragSourceDropEvent', 'DragSourceEvent',
+ 'DragSourceListener', 'Driver', 'DriverManager',
+ 'DriverPropertyInfo', 'DropTarget',
+ 'DropTarget.DropTargetAutoScroller',
+ 'DropTargetContext', 'DropTargetDragEvent',
+ 'DropTargetDropEvent', 'DropTargetEvent',
+ 'DropTargetListener', 'DSAKey',
+ 'DSAKeyPairGenerator', 'DSAParameterSpec',
+ 'DSAParams', 'DSAPrivateKey', 'DSAPrivateKeySpec',
+ 'DSAPublicKey', 'DSAPublicKeySpec', 'DTD',
+ 'DTDConstants', 'DynamicImplementation', 'DynAny',
+ 'DynArray', 'DynEnum', 'DynFixed', 'DynSequence',
+ 'DynStruct', 'DynUnion', 'DynValue', 'EditorKit',
+ 'Element', 'ElementIterator', 'Ellipse2D',
+ 'Ellipse2D.Double', 'Ellipse2D.Float', 'EmptyBorder',
+ 'EmptyStackException', 'EncodedKeySpec', 'Entity',
+ 'EnumControl', 'EnumControl.Type', 'Enumeration',
+ 'Environment', 'EOFException', 'Error',
+ 'EtchedBorder', 'Event', 'EventContext',
+ 'EventDirContext', 'EventListener',
+ 'EventListenerList', 'EventObject', 'EventQueue',
+ 'EventSetDescriptor', 'Exception',
+ 'ExceptionInInitializerError', 'ExceptionList',
+ 'ExpandVetoException', 'ExportException',
+ 'ExtendedRequest', 'ExtendedResponse',
+ 'Externalizable', 'FeatureDescriptor', 'Field',
+ 'FieldNameHelper', 'FieldPosition', 'FieldView',
+ 'File', 'FileChooserUI', 'FileDescriptor',
+ 'FileDialog', 'FileFilter', 'FileInputStream',
+ 'FilenameFilter', 'FileNameMap',
+ 'FileNotFoundException', 'FileOutputStream',
+ 'FilePermission', 'FileReader', 'FileSystemView',
+ 'FileView', 'FileWriter', 'FilteredImageSource',
+ 'FilterInputStream', 'FilterOutputStream',
+ 'FilterReader', 'FilterWriter',
+ 'FixedHeightLayoutCache', 'FixedHolder',
+ 'FlatteningPathIterator', 'FlavorMap', 'Float',
+ 'FloatControl', 'FloatControl.Type', 'FloatHolder',
+ 'FloatSeqHelper', 'FloatSeqHolder', 'FlowLayout',
+ 'FlowView', 'FlowView.FlowStrategy', 'FocusAdapter',
+ 'FocusEvent', 'FocusListener', 'FocusManager',
+ 'Font', 'FontFormatException', 'FontMetrics',
+ 'FontRenderContext', 'FontUIResource', 'Format',
+ 'FormatConversionProvider', 'FormView', 'Frame',
+ 'FREE_MEM', 'GapContent', 'GeneralPath',
+ 'GeneralSecurityException', 'GlyphJustificationInfo',
+ 'GlyphMetrics', 'GlyphVector', 'GlyphView',
+ 'GlyphView.GlyphPainter', 'GradientPaint',
+ 'GraphicAttribute', 'Graphics', 'Graphics2D',
+ 'GraphicsConfigTemplate', 'GraphicsConfiguration',
+ 'GraphicsDevice', 'GraphicsEnvironment',
+ 'GrayFilter', 'GregorianCalendar',
+ 'GridBagConstraints', 'GridBagLayout', 'GridLayout',
+ 'Group', 'Guard', 'GuardedObject', 'GZIPInputStream',
+ 'GZIPOutputStream', 'HasControls', 'HashMap',
+ 'HashSet', 'Hashtable', 'HierarchyBoundsAdapter',
+ 'HierarchyBoundsListener', 'HierarchyEvent',
+ 'HierarchyListener', 'Highlighter',
+ 'Highlighter.Highlight',
+ 'Highlighter.HighlightPainter', 'HTML',
+ 'HTML.Attribute', 'HTML.Tag', 'HTML.UnknownTag',
+ 'HTMLDocument', 'HTMLDocument.Iterator',
+ 'HTMLEditorKit', 'HTMLEditorKit.HTMLFactory',
+ 'HTMLEditorKit.HTMLTextAction',
+ 'HTMLEditorKit.InsertHTMLTextAction',
+ 'HTMLEditorKit.LinkController',
+ 'HTMLEditorKit.Parser',
+ 'HTMLEditorKit.ParserCallback',
+ 'HTMLFrameHyperlinkEvent', 'HTMLWriter',
+ 'HttpURLConnection', 'HyperlinkEvent',
+ 'HyperlinkEvent.EventType', 'HyperlinkListener',
+ 'ICC_ColorSpace', 'ICC_Profile', 'ICC_ProfileGray',
+ 'ICC_ProfileRGB', 'Icon', 'IconUIResource',
+ 'IconView', 'IdentifierHelper', 'Identity',
+ 'IdentityScope', 'IDLEntity', 'IDLType',
+ 'IDLTypeHelper', 'IDLTypeOperations',
+ 'IllegalAccessError', 'IllegalAccessException',
+ 'IllegalArgumentException',
+ 'IllegalComponentStateException',
+ 'IllegalMonitorStateException',
+ 'IllegalPathStateException', 'IllegalStateException',
+ 'IllegalThreadStateException', 'Image',
+ 'ImageConsumer', 'ImageFilter',
+ 'ImageGraphicAttribute', 'ImageIcon',
+ 'ImageObserver', 'ImageProducer',
+ 'ImagingOpException', 'IMP_LIMIT',
+ 'IncompatibleClassChangeError',
+ 'InconsistentTypeCode', 'IndexColorModel',
+ 'IndexedPropertyDescriptor',
+ 'IndexOutOfBoundsException', 'IndirectionException',
+ 'InetAddress', 'Inflater', 'InflaterInputStream',
+ 'InheritableThreadLocal', 'InitialContext',
+ 'InitialContextFactory',
+ 'InitialContextFactoryBuilder', 'InitialDirContext',
+ 'INITIALIZE', 'Initializer', 'InitialLdapContext',
+ 'InlineView', 'InputContext', 'InputEvent',
+ 'InputMap', 'InputMapUIResource', 'InputMethod',
+ 'InputMethodContext', 'InputMethodDescriptor',
+ 'InputMethodEvent', 'InputMethodHighlight',
+ 'InputMethodListener', 'InputMethodRequests',
+ 'InputStream', 'InputStreamReader', 'InputSubset',
+ 'InputVerifier', 'Insets', 'InsetsUIResource',
+ 'InstantiationError', 'InstantiationException',
+ 'Instrument', 'InsufficientResourcesException',
+ 'Integer', 'INTERNAL', 'InternalError',
+ 'InternalFrameAdapter', 'InternalFrameEvent',
+ 'InternalFrameListener', 'InternalFrameUI',
+ 'InterruptedException', 'InterruptedIOException',
+ 'InterruptedNamingException', 'INTF_REPOS',
+ 'IntHolder', 'IntrospectionException',
+ 'Introspector', 'Invalid',
+ 'InvalidAlgorithmParameterException',
+ 'InvalidAttributeIdentifierException',
+ 'InvalidAttributesException',
+ 'InvalidAttributeValueException',
+ 'InvalidClassException',
+ 'InvalidDnDOperationException',
+ 'InvalidKeyException', 'InvalidKeySpecException',
+ 'InvalidMidiDataException', 'InvalidName',
+ 'InvalidNameException', 'InvalidNameHelper',
+ 'InvalidNameHolder', 'InvalidObjectException',
+ 'InvalidParameterException',
+ 'InvalidParameterSpecException',
+ 'InvalidSearchControlsException',
+ 'InvalidSearchFilterException', 'InvalidSeq',
+ 'InvalidTransactionException', 'InvalidValue',
+ 'INVALID_TRANSACTION', 'InvocationEvent',
+ 'InvocationHandler', 'InvocationTargetException',
+ 'InvokeHandler', 'INV_FLAG', 'INV_IDENT',
+ 'INV_OBJREF', 'INV_POLICY', 'IOException',
+ 'IRObject', 'IRObjectOperations', 'IstringHelper',
+ 'ItemEvent', 'ItemListener', 'ItemSelectable',
+ 'Iterator', 'JApplet', 'JarEntry', 'JarException',
+ 'JarFile', 'JarInputStream', 'JarOutputStream',
+ 'JarURLConnection', 'JButton', 'JCheckBox',
+ 'JCheckBoxMenuItem', 'JColorChooser', 'JComboBox',
+ 'JComboBox.KeySelectionManager', 'JComponent',
+ 'JDesktopPane', 'JDialog', 'JEditorPane',
+ 'JFileChooser', 'JFrame', 'JInternalFrame',
+ 'JInternalFrame.JDesktopIcon', 'JLabel',
+ 'JLayeredPane', 'JList', 'JMenu', 'JMenuBar',
+ 'JMenuItem', 'JobAttributes',
+ 'JobAttributes.DefaultSelectionType',
+ 'JobAttributes.DestinationType',
+ 'JobAttributes.DialogType',
+ 'JobAttributes.MultipleDocumentHandlingType',
+ 'JobAttributes.SidesType', 'JOptionPane', 'JPanel',
+ 'JPasswordField', 'JPopupMenu',
+ 'JPopupMenu.Separator', 'JProgressBar',
+ 'JRadioButton', 'JRadioButtonMenuItem', 'JRootPane',
+ 'JScrollBar', 'JScrollPane', 'JSeparator', 'JSlider',
+ 'JSplitPane', 'JTabbedPane', 'JTable',
+ 'JTableHeader', 'JTextArea', 'JTextComponent',
+ 'JTextComponent.KeyBinding', 'JTextField',
+ 'JTextPane', 'JToggleButton',
+ 'JToggleButton.ToggleButtonModel', 'JToolBar',
+ 'JToolBar.Separator', 'JToolTip', 'JTree',
+ 'JTree.DynamicUtilTreeNode',
+ 'JTree.EmptySelectionModel', 'JViewport', 'JWindow',
+ 'Kernel', 'Key', 'KeyAdapter', 'KeyEvent',
+ 'KeyException', 'KeyFactory', 'KeyFactorySpi',
+ 'KeyListener', 'KeyManagementException', 'Keymap',
+ 'KeyPair', 'KeyPairGenerator', 'KeyPairGeneratorSpi',
+ 'KeySpec', 'KeyStore', 'KeyStoreException',
+ 'KeyStoreSpi', 'KeyStroke', 'Label', 'LabelUI',
+ 'LabelView', 'LastOwnerException',
+ 'LayeredHighlighter',
+ 'LayeredHighlighter.LayerPainter', 'LayoutManager',
+ 'LayoutManager2', 'LayoutQueue', 'LdapContext',
+ 'LdapReferralException', 'Lease',
+ 'LimitExceededException', 'Line', 'Line.Info',
+ 'Line2D', 'Line2D.Double', 'Line2D.Float',
+ 'LineBorder', 'LineBreakMeasurer', 'LineEvent',
+ 'LineEvent.Type', 'LineListener', 'LineMetrics',
+ 'LineNumberInputStream', 'LineNumberReader',
+ 'LineUnavailableException', 'LinkageError',
+ 'LinkedList', 'LinkException', 'LinkLoopException',
+ 'LinkRef', 'List', 'ListCellRenderer',
+ 'ListDataEvent', 'ListDataListener', 'ListIterator',
+ 'ListModel', 'ListResourceBundle',
+ 'ListSelectionEvent', 'ListSelectionListener',
+ 'ListSelectionModel', 'ListUI', 'ListView',
+ 'LoaderHandler', 'Locale', 'LocateRegistry',
+ 'LogStream', 'Long', 'LongHolder',
+ 'LongLongSeqHelper', 'LongLongSeqHolder',
+ 'LongSeqHelper', 'LongSeqHolder', 'LookAndFeel',
+ 'LookupOp', 'LookupTable', 'MalformedLinkException',
+ 'MalformedURLException', 'Manifest', 'Map',
+ 'Map.Entry', 'MARSHAL', 'MarshalException',
+ 'MarshalledObject', 'Math', 'MatteBorder',
+ 'MediaTracker', 'Member', 'MemoryImageSource',
+ 'Menu', 'MenuBar', 'MenuBarUI', 'MenuComponent',
+ 'MenuContainer', 'MenuDragMouseEvent',
+ 'MenuDragMouseListener', 'MenuElement', 'MenuEvent',
+ 'MenuItem', 'MenuItemUI', 'MenuKeyEvent',
+ 'MenuKeyListener', 'MenuListener',
+ 'MenuSelectionManager', 'MenuShortcut',
+ 'MessageDigest', 'MessageDigestSpi', 'MessageFormat',
+ 'MetaEventListener', 'MetalBorders',
+ 'MetalBorders.ButtonBorder',
+ 'MetalBorders.Flush3DBorder',
+ 'MetalBorders.InternalFrameBorder',
+ 'MetalBorders.MenuBarBorder',
+ 'MetalBorders.MenuItemBorder',
+ 'MetalBorders.OptionDialogBorder',
+ 'MetalBorders.PaletteBorder',
+ 'MetalBorders.PopupMenuBorder',
+ 'MetalBorders.RolloverButtonBorder',
+ 'MetalBorders.ScrollPaneBorder',
+ 'MetalBorders.TableHeaderBorder',
+ 'MetalBorders.TextFieldBorder',
+ 'MetalBorders.ToggleButtonBorder',
+ 'MetalBorders.ToolBarBorder', 'MetalButtonUI',
+ 'MetalCheckBoxIcon', 'MetalCheckBoxUI',
+ 'MetalComboBoxButton', 'MetalComboBoxEditor',
+ 'MetalComboBoxEditor.UIResource',
+ 'MetalComboBoxIcon', 'MetalComboBoxUI',
+ 'MetalDesktopIconUI', 'MetalFileChooserUI',
+ 'MetalIconFactory', 'MetalIconFactory.FileIcon16',
+ 'MetalIconFactory.FolderIcon16',
+ 'MetalIconFactory.PaletteCloseIcon',
+ 'MetalIconFactory.TreeControlIcon',
+ 'MetalIconFactory.TreeFolderIcon',
+ 'MetalIconFactory.TreeLeafIcon',
+ 'MetalInternalFrameTitlePane',
+ 'MetalInternalFrameUI', 'MetalLabelUI',
+ 'MetalLookAndFeel', 'MetalPopupMenuSeparatorUI',
+ 'MetalProgressBarUI', 'MetalRadioButtonUI',
+ 'MetalScrollBarUI', 'MetalScrollButton',
+ 'MetalScrollPaneUI', 'MetalSeparatorUI',
+ 'MetalSliderUI', 'MetalSplitPaneUI',
+ 'MetalTabbedPaneUI', 'MetalTextFieldUI',
+ 'MetalTheme', 'MetalToggleButtonUI',
+ 'MetalToolBarUI', 'MetalToolTipUI', 'MetalTreeUI',
+ 'MetaMessage', 'Method', 'MethodDescriptor',
+ 'MidiChannel', 'MidiDevice', 'MidiDevice.Info',
+ 'MidiDeviceProvider', 'MidiEvent', 'MidiFileFormat',
+ 'MidiFileReader', 'MidiFileWriter', 'MidiMessage',
+ 'MidiSystem', 'MidiUnavailableException',
+ 'MimeTypeParseException', 'MinimalHTMLWriter',
+ 'MissingResourceException', 'Mixer', 'Mixer.Info',
+ 'MixerProvider', 'ModificationItem', 'Modifier',
+ 'MouseAdapter', 'MouseDragGestureRecognizer',
+ 'MouseEvent', 'MouseInputAdapter',
+ 'MouseInputListener', 'MouseListener',
+ 'MouseMotionAdapter', 'MouseMotionListener',
+ 'MultiButtonUI', 'MulticastSocket',
+ 'MultiColorChooserUI', 'MultiComboBoxUI',
+ 'MultiDesktopIconUI', 'MultiDesktopPaneUI',
+ 'MultiFileChooserUI', 'MultiInternalFrameUI',
+ 'MultiLabelUI', 'MultiListUI', 'MultiLookAndFeel',
+ 'MultiMenuBarUI', 'MultiMenuItemUI',
+ 'MultiOptionPaneUI', 'MultiPanelUI',
+ 'MultiPixelPackedSampleModel', 'MultipleMaster',
+ 'MultiPopupMenuUI', 'MultiProgressBarUI',
+ 'MultiScrollBarUI', 'MultiScrollPaneUI',
+ 'MultiSeparatorUI', 'MultiSliderUI',
+ 'MultiSplitPaneUI', 'MultiTabbedPaneUI',
+ 'MultiTableHeaderUI', 'MultiTableUI', 'MultiTextUI',
+ 'MultiToolBarUI', 'MultiToolTipUI', 'MultiTreeUI',
+ 'MultiViewportUI', 'MutableAttributeSet',
+ 'MutableComboBoxModel', 'MutableTreeNode', 'Name',
+ 'NameAlreadyBoundException', 'NameClassPair',
+ 'NameComponent', 'NameComponentHelper',
+ 'NameComponentHolder', 'NamedValue', 'NameHelper',
+ 'NameHolder', 'NameNotFoundException', 'NameParser',
+ 'NamespaceChangeListener', 'NameValuePair',
+ 'NameValuePairHelper', 'Naming', 'NamingContext',
+ 'NamingContextHelper', 'NamingContextHolder',
+ 'NamingContextOperations', 'NamingEnumeration',
+ 'NamingEvent', 'NamingException',
+ 'NamingExceptionEvent', 'NamingListener',
+ 'NamingManager', 'NamingSecurityException',
+ 'NegativeArraySizeException', 'NetPermission',
+ 'NoClassDefFoundError', 'NoInitialContextException',
+ 'NoninvertibleTransformException',
+ 'NoPermissionException', 'NoRouteToHostException',
+ 'NoSuchAlgorithmException',
+ 'NoSuchAttributeException', 'NoSuchElementException',
+ 'NoSuchFieldError', 'NoSuchFieldException',
+ 'NoSuchMethodError', 'NoSuchMethodException',
+ 'NoSuchObjectException', 'NoSuchProviderException',
+ 'NotActiveException', 'NotBoundException',
+ 'NotContextException', 'NotEmpty', 'NotEmptyHelper',
+ 'NotEmptyHolder', 'NotFound', 'NotFoundHelper',
+ 'NotFoundHolder', 'NotFoundReason',
+ 'NotFoundReasonHelper', 'NotFoundReasonHolder',
+ 'NotOwnerException', 'NotSerializableException',
+ 'NO_IMPLEMENT', 'NO_MEMORY', 'NO_PERMISSION',
+ 'NO_RESOURCES', 'NO_RESPONSE',
+ 'NullPointerException', 'Number', 'NumberFormat',
+ 'NumberFormatException', 'NVList', 'Object',
+ 'ObjectChangeListener', 'ObjectFactory',
+ 'ObjectFactoryBuilder', 'ObjectHelper',
+ 'ObjectHolder', 'ObjectImpl', 'ObjectInput',
+ 'ObjectInputStream', 'ObjectInputStream.GetField',
+ 'ObjectInputValidation', 'ObjectOutput',
+ 'ObjectOutputStream', 'ObjectOutputStream.PutField',
+ 'ObjectStreamClass', 'ObjectStreamConstants',
+ 'ObjectStreamException', 'ObjectStreamField',
+ 'ObjectView', 'OBJECT_NOT_EXIST', 'ObjID',
+ 'OBJ_ADAPTER', 'Observable', 'Observer',
+ 'OctetSeqHelper', 'OctetSeqHolder', 'OMGVMCID',
+ 'OpenType', 'Operation',
+ 'OperationNotSupportedException', 'Option',
+ 'OptionalDataException', 'OptionPaneUI', 'ORB',
+ 'OutOfMemoryError', 'OutputStream',
+ 'OutputStreamWriter', 'OverlayLayout', 'Owner',
+ 'Package', 'PackedColorModel', 'Pageable',
+ 'PageAttributes', 'PageAttributes.ColorType',
+ 'PageAttributes.MediaType',
+ 'PageAttributes.OrientationRequestedType',
+ 'PageAttributes.OriginType',
+ 'PageAttributes.PrintQualityType', 'PageFormat',
+ 'Paint', 'PaintContext', 'PaintEvent', 'Panel',
+ 'PanelUI', 'Paper', 'ParagraphView',
+ 'ParameterBlock', 'ParameterDescriptor',
+ 'ParseException', 'ParsePosition', 'Parser',
+ 'ParserDelegator', 'PartialResultException',
+ 'PasswordAuthentication', 'PasswordView', 'Patch',
+ 'PathIterator', 'Permission', 'PermissionCollection',
+ 'Permissions', 'PERSIST_STORE', 'PhantomReference',
+ 'PipedInputStream', 'PipedOutputStream',
+ 'PipedReader', 'PipedWriter', 'PixelGrabber',
+ 'PixelInterleavedSampleModel', 'PKCS8EncodedKeySpec',
+ 'PlainDocument', 'PlainView', 'Point', 'Point2D',
+ 'Point2D.Double', 'Point2D.Float', 'Policy',
+ 'PolicyError', 'PolicyHelper', 'PolicyHolder',
+ 'PolicyListHelper', 'PolicyListHolder',
+ 'PolicyOperations', 'PolicyTypeHelper', 'Polygon',
+ 'PopupMenu', 'PopupMenuEvent', 'PopupMenuListener',
+ 'PopupMenuUI', 'Port', 'Port.Info',
+ 'PortableRemoteObject',
+ 'PortableRemoteObjectDelegate', 'Position',
+ 'Position.Bias', 'PreparedStatement', 'Principal',
+ 'PrincipalHolder', 'Printable',
+ 'PrinterAbortException', 'PrinterException',
+ 'PrinterGraphics', 'PrinterIOException',
+ 'PrinterJob', 'PrintGraphics', 'PrintJob',
+ 'PrintStream', 'PrintWriter', 'PrivateKey',
+ 'PRIVATE_MEMBER', 'PrivilegedAction',
+ 'PrivilegedActionException',
+ 'PrivilegedExceptionAction', 'Process',
+ 'ProfileDataException', 'ProgressBarUI',
+ 'ProgressMonitor', 'ProgressMonitorInputStream',
+ 'Properties', 'PropertyChangeEvent',
+ 'PropertyChangeListener', 'PropertyChangeSupport',
+ 'PropertyDescriptor', 'PropertyEditor',
+ 'PropertyEditorManager', 'PropertyEditorSupport',
+ 'PropertyPermission', 'PropertyResourceBundle',
+ 'PropertyVetoException', 'ProtectionDomain',
+ 'ProtocolException', 'Provider', 'ProviderException',
+ 'Proxy', 'PublicKey', 'PUBLIC_MEMBER',
+ 'PushbackInputStream', 'PushbackReader',
+ 'QuadCurve2D', 'QuadCurve2D.Double',
+ 'QuadCurve2D.Float', 'Random', 'RandomAccessFile',
+ 'Raster', 'RasterFormatException', 'RasterOp',
+ 'Reader', 'Receiver', 'Rectangle', 'Rectangle2D',
+ 'Rectangle2D.Double', 'Rectangle2D.Float',
+ 'RectangularShape', 'Ref', 'RefAddr', 'Reference',
+ 'Referenceable', 'ReferenceQueue',
+ 'ReferralException', 'ReflectPermission', 'Registry',
+ 'RegistryHandler', 'RemarshalException', 'Remote',
+ 'RemoteCall', 'RemoteException', 'RemoteObject',
+ 'RemoteRef', 'RemoteServer', 'RemoteStub',
+ 'RenderableImage', 'RenderableImageOp',
+ 'RenderableImageProducer', 'RenderContext',
+ 'RenderedImage', 'RenderedImageFactory', 'Renderer',
+ 'RenderingHints', 'RenderingHints.Key',
+ 'RepaintManager', 'ReplicateScaleFilter',
+ 'Repository', 'RepositoryIdHelper', 'Request',
+ 'RescaleOp', 'Resolver', 'ResolveResult',
+ 'ResourceBundle', 'ResponseHandler', 'ResultSet',
+ 'ResultSetMetaData', 'ReverbType', 'RGBImageFilter',
+ 'RMIClassLoader', 'RMIClientSocketFactory',
+ 'RMIFailureHandler', 'RMISecurityException',
+ 'RMISecurityManager', 'RMIServerSocketFactory',
+ 'RMISocketFactory', 'Robot', 'RootPaneContainer',
+ 'RootPaneUI', 'RoundRectangle2D',
+ 'RoundRectangle2D.Double', 'RoundRectangle2D.Float',
+ 'RowMapper', 'RSAKey', 'RSAKeyGenParameterSpec',
+ 'RSAPrivateCrtKey', 'RSAPrivateCrtKeySpec',
+ 'RSAPrivateKey', 'RSAPrivateKeySpec', 'RSAPublicKey',
+ 'RSAPublicKeySpec', 'RTFEditorKit',
+ 'RuleBasedCollator', 'Runnable', 'Runtime',
+ 'RunTime', 'RuntimeException', 'RunTimeOperations',
+ 'RuntimePermission', 'SampleModel',
+ 'SchemaViolationException', 'Scrollable',
+ 'Scrollbar', 'ScrollBarUI', 'ScrollPane',
+ 'ScrollPaneConstants', 'ScrollPaneLayout',
+ 'ScrollPaneLayout.UIResource', 'ScrollPaneUI',
+ 'SearchControls', 'SearchResult',
+ 'SecureClassLoader', 'SecureRandom',
+ 'SecureRandomSpi', 'Security', 'SecurityException',
+ 'SecurityManager', 'SecurityPermission', 'Segment',
+ 'SeparatorUI', 'Sequence', 'SequenceInputStream',
+ 'Sequencer', 'Sequencer.SyncMode', 'Serializable',
+ 'SerializablePermission', 'ServantObject',
+ 'ServerCloneException', 'ServerError',
+ 'ServerException', 'ServerNotActiveException',
+ 'ServerRef', 'ServerRequest',
+ 'ServerRuntimeException', 'ServerSocket',
+ 'ServiceDetail', 'ServiceDetailHelper',
+ 'ServiceInformation', 'ServiceInformationHelper',
+ 'ServiceInformationHolder',
+ 'ServiceUnavailableException', 'Set',
+ 'SetOverrideType', 'SetOverrideTypeHelper', 'Shape',
+ 'ShapeGraphicAttribute', 'Short', 'ShortHolder',
+ 'ShortLookupTable', 'ShortMessage', 'ShortSeqHelper',
+ 'ShortSeqHolder', 'Signature', 'SignatureException',
+ 'SignatureSpi', 'SignedObject', 'Signer',
+ 'SimpleAttributeSet', 'SimpleBeanInfo',
+ 'SimpleDateFormat', 'SimpleTimeZone',
+ 'SinglePixelPackedSampleModel',
+ 'SingleSelectionModel', 'SizeLimitExceededException',
+ 'SizeRequirements', 'SizeSequence', 'Skeleton',
+ 'SkeletonMismatchException',
+ 'SkeletonNotFoundException', 'SliderUI', 'Socket',
+ 'SocketException', 'SocketImpl', 'SocketImplFactory',
+ 'SocketOptions', 'SocketPermission',
+ 'SocketSecurityException', 'SoftBevelBorder',
+ 'SoftReference', 'SortedMap', 'SortedSet',
+ 'Soundbank', 'SoundbankReader', 'SoundbankResource',
+ 'SourceDataLine', 'SplitPaneUI', 'SQLData',
+ 'SQLException', 'SQLInput', 'SQLOutput',
+ 'SQLPermission', 'SQLWarning', 'Stack',
+ 'StackOverflowError', 'StateEdit', 'StateEditable',
+ 'StateFactory', 'Statement', 'Streamable',
+ 'StreamableValue', 'StreamCorruptedException',
+ 'StreamTokenizer', 'StrictMath', 'String',
+ 'StringBuffer', 'StringBufferInputStream',
+ 'StringCharacterIterator', 'StringContent',
+ 'StringHolder', 'StringIndexOutOfBoundsException',
+ 'StringReader', 'StringRefAddr', 'StringSelection',
+ 'StringTokenizer', 'StringValueHelper',
+ 'StringWriter', 'Stroke', 'Struct', 'StructMember',
+ 'StructMemberHelper', 'Stub', 'StubDelegate',
+ 'StubNotFoundException', 'Style', 'StyleConstants',
+ 'StyleConstants.CharacterConstants',
+ 'StyleConstants.ColorConstants',
+ 'StyleConstants.FontConstants',
+ 'StyleConstants.ParagraphConstants', 'StyleContext',
+ 'StyledDocument', 'StyledEditorKit',
+ 'StyledEditorKit.AlignmentAction',
+ 'StyledEditorKit.BoldAction',
+ 'StyledEditorKit.FontFamilyAction',
+ 'StyledEditorKit.FontSizeAction',
+ 'StyledEditorKit.ForegroundAction',
+ 'StyledEditorKit.ItalicAction',
+ 'StyledEditorKit.StyledTextAction',
+ 'StyledEditorKit.UnderlineAction', 'StyleSheet',
+ 'StyleSheet.BoxPainter', 'StyleSheet.ListPainter',
+ 'SwingConstants', 'SwingPropertyChangeSupport',
+ 'SwingUtilities', 'SyncFailedException',
+ 'Synthesizer', 'SysexMessage', 'System',
+ 'SystemColor', 'SystemException', 'SystemFlavorMap',
+ 'TabableView', 'TabbedPaneUI', 'TabExpander',
+ 'TableCellEditor', 'TableCellRenderer',
+ 'TableColumn', 'TableColumnModel',
+ 'TableColumnModelEvent', 'TableColumnModelListener',
+ 'TableHeaderUI', 'TableModel', 'TableModelEvent',
+ 'TableModelListener', 'TableUI', 'TableView',
+ 'TabSet', 'TabStop', 'TagElement', 'TargetDataLine',
+ 'TCKind', 'TextAction', 'TextArea', 'TextAttribute',
+ 'TextComponent', 'TextEvent', 'TextField',
+ 'TextHitInfo', 'TextLayout',
+ 'TextLayout.CaretPolicy', 'TextListener',
+ 'TextMeasurer', 'TextUI', 'TexturePaint', 'Thread',
+ 'ThreadDeath', 'ThreadGroup', 'ThreadLocal',
+ 'Throwable', 'Tie', 'TileObserver', 'Time',
+ 'TimeLimitExceededException', 'Timer', 'TimerTask',
+ 'Timestamp', 'TimeZone', 'TitledBorder', 'ToolBarUI',
+ 'Toolkit', 'ToolTipManager', 'ToolTipUI',
+ 'TooManyListenersException', 'Track',
+ 'TransactionRequiredException',
+ 'TransactionRolledbackException',
+ 'TRANSACTION_REQUIRED', 'TRANSACTION_ROLLEDBACK',
+ 'Transferable', 'TransformAttribute', 'TRANSIENT',
+ 'Transmitter', 'Transparency', 'TreeCellEditor',
+ 'TreeCellRenderer', 'TreeExpansionEvent',
+ 'TreeExpansionListener', 'TreeMap', 'TreeModel',
+ 'TreeModelEvent', 'TreeModelListener', 'TreeNode',
+ 'TreePath', 'TreeSelectionEvent',
+ 'TreeSelectionListener', 'TreeSelectionModel',
+ 'TreeSet', 'TreeUI', 'TreeWillExpandListener',
+ 'TypeCode', 'TypeCodeHolder', 'TypeMismatch',
+ 'Types', 'UID', 'UIDefaults',
+ 'UIDefaults.ActiveValue', 'UIDefaults.LazyInputMap',
+ 'UIDefaults.LazyValue', 'UIDefaults.ProxyLazyValue',
+ 'UIManager', 'UIManager.LookAndFeelInfo',
+ 'UIResource', 'ULongLongSeqHelper',
+ 'ULongLongSeqHolder', 'ULongSeqHelper',
+ 'ULongSeqHolder', 'UndeclaredThrowableException',
+ 'UndoableEdit', 'UndoableEditEvent',
+ 'UndoableEditListener', 'UndoableEditSupport',
+ 'UndoManager', 'UnexpectedException',
+ 'UnicastRemoteObject', 'UnionMember',
+ 'UnionMemberHelper', 'UNKNOWN', 'UnknownError',
+ 'UnknownException', 'UnknownGroupException',
+ 'UnknownHostException', 'UnknownObjectException',
+ 'UnknownServiceException', 'UnknownUserException',
+ 'UnmarshalException', 'UnrecoverableKeyException',
+ 'Unreferenced', 'UnresolvedPermission',
+ 'UnsatisfiedLinkError', 'UnsolicitedNotification',
+ 'UnsolicitedNotificationEvent',
+ 'UnsolicitedNotificationListener',
+ 'UnsupportedAudioFileException',
+ 'UnsupportedClassVersionError',
+ 'UnsupportedEncodingException',
+ 'UnsupportedFlavorException',
+ 'UnsupportedLookAndFeelException',
+ 'UnsupportedOperationException',
+ 'UNSUPPORTED_POLICY', 'UNSUPPORTED_POLICY_VALUE',
+ 'URL', 'URLClassLoader', 'URLConnection',
+ 'URLDecoder', 'URLEncoder', 'URLStreamHandler',
+ 'URLStreamHandlerFactory', 'UserException',
+ 'UShortSeqHelper', 'UShortSeqHolder',
+ 'UTFDataFormatException', 'Util', 'UtilDelegate',
+ 'Utilities', 'ValueBase', 'ValueBaseHelper',
+ 'ValueBaseHolder', 'ValueFactory', 'ValueHandler',
+ 'ValueMember', 'ValueMemberHelper',
+ 'VariableHeightLayoutCache', 'Vector', 'VerifyError',
+ 'VersionSpecHelper', 'VetoableChangeListener',
+ 'VetoableChangeSupport', 'View', 'ViewFactory',
+ 'ViewportLayout', 'ViewportUI',
+ 'VirtualMachineError', 'Visibility',
+ 'VisibilityHelper', 'VMID', 'VM_ABSTRACT',
+ 'VM_CUSTOM', 'VM_NONE', 'VM_TRUNCATABLE',
+ 'VoiceStatus', 'Void', 'WCharSeqHelper',
+ 'WCharSeqHolder', 'WeakHashMap', 'WeakReference',
+ 'Window', 'WindowAdapter', 'WindowConstants',
+ 'WindowEvent', 'WindowListener', 'WrappedPlainView',
+ 'WritableRaster', 'WritableRenderedImage',
+ 'WriteAbortedException', 'Writer',
+ 'WrongTransaction', 'WStringValueHelper',
+ 'X509Certificate', 'X509CRL', 'X509CRLEntry',
+ 'X509EncodedKeySpec', 'X509Extension', 'ZipEntry',
+ 'ZipException', 'ZipFile', 'ZipInputStream',
+ 'ZipOutputStream', 'ZoneView',
+ '_BindingIteratorImplBase', '_BindingIteratorStub',
+ '_IDLTypeStub', '_NamingContextImplBase',
+ '_NamingContextStub', '_PolicyStub', '_Remote_Stub'
+ ),
+ 4 => array(
+ 'boolean', 'byte', 'char', 'double', 'float', 'int', 'long',
+ 'short', 'void'
+ ),
+ 5 => array(
+ 'allProperties', 'asImmutable', 'asSynchronized', 'collect',
+ 'count', 'each', 'eachProperty', 'eachPropertyName',
+ 'eachWithIndex', 'find', 'findAll', 'findIndexOf',
+ 'flatten', 'get', 'grep', 'inject', 'intersect',
+ 'join', 'max', 'min', 'pop', 'reverse',
+ 'reverseEach', 'size', 'sort', 'subMap', 'toList'
+ ),
+ 6 => array(
+ 'center', 'contains', 'eachMatch', 'padLeft', 'padRight',
+ 'toCharacter', 'tokenize', 'toLong', 'toURL'
+ ),
+ 7 => array(
+ 'append', 'eachByte', 'eachFile', 'eachFileRecurse', 'eachLine',
+ 'eachLines', 'encodeBase64', 'filterLine', 'getText',
+ 'splitEachLine', 'transformChar', 'transformLine',
+ 'withOutputStream', 'withPrintWriter', 'withReader',
+ 'withStream', 'withStreams', 'withWriter',
+ 'withWriterAppend', 'write', 'writeLine'
+ ),
+ 8 => array(
+ 'dump', 'getLastMatcher', 'inspect', 'invokeMethod', 'print',
+ 'println', 'start', 'startDaemon', 'step', 'times',
+ 'upto', 'use'
+ ),
+ 9 => array(
+ 'call', 'close', 'eachRow', 'execute', 'executeUpdate', 'Sql'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '[', ']', '{', '}', '*', '&', '%', '!', ';', '<', '>', '?', '|', '=',
+ '=>', '||', '-', '+', '<<', '<<<', '&&'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => true,
+ 1 => false,
+ 2 => false,
+ 3 => true,
+ 4 => true,
+ 5 => true,
+ 6 => true,
+ 7 => true,
+ 8 => true,
+ 9 => true
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #b1b100;',
+ 2 => 'color: #000000; font-weight: bold;',
+ 3 => 'color: #aaaadd; font-weight: bold;',
+ 4 => 'color: #993333;',
+ 5 => 'color: #663399;',
+ 6 => 'color: #CC0099;',
+ 7 => 'color: #FFCC33;',
+ 8 => 'color: #993399;',
+ 9 => 'color: #993399; font-weight: bold;'
+ ),
+ 'COMMENTS' => array(
+ 1=> 'color: #808080; font-style: italic;',
+ 2=> 'color: #a1a100;',
+ 3=> 'color: #808080; font-style: italic;',
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #006600;',
+ 2 => 'color: #006600;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #0000ff;'
+ )
+ ),
+ 'URLS' => array(
+ 1 => 'http://www.google.de/search?q=site%3Adocs.codehaus.org/%20{FNAMEL}',
+ 2 => 'http://www.google.de/search?q=site%3Adocs.codehaus.org/%20{FNAMEL}',
+ 3 => 'http://www.google.de/search?as_q={FNAME}&amp;num=100&amp;hl=en&amp;as_occt=url&amp;as_sitesearch=java.sun.com%2Fj2se%2F1.5.0%2Fdocs%2Fapi%2F',
+ 4 => 'http://www.google.de/search?q=site%3Adocs.codehaus.org/%20{FNAME}',
+ 5 => 'http://www.google.de/search?q=site%3Adocs.codehaus.org/%20{FNAME}',
+ 6 => 'http://www.google.de/search?q=site%3Adocs.codehaus.org/%20{FNAME}',
+ 7 => 'http://www.google.de/search?q=site%3Adocs.codehaus.org/%20{FNAME}',
+ 8 => 'http://www.google.de/search?q=site%3Adocs.codehaus.org/%20{FNAME}',
+ 9 => 'http://www.google.de/search?q=site%3Adocs.codehaus.org/%20{FNAME}'
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ //Variables
+ 0 => '\\$\\{[a-zA-Z_][a-zA-Z0-9_]*\\}'
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/haskell.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/haskell.php
new file mode 100644
index 000000000..f0e570f1c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/haskell.php
@@ -0,0 +1,198 @@
+<?php
+/*************************************************************************************
+ * haskell.php
+ * ----------
+ * Author: Jason Dagit (dagit@codersbase.com) based on ocaml.php by Flaie (fireflaie@gmail.com)
+ * Copyright: (c) 2005 Flaie, Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2005/08/27
+ *
+ * Haskell language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2005/08/27 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2005/08/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Haskell',
+ 'COMMENT_SINGLE' => array( 1 => '--'),
+ 'COMMENT_MULTI' => array('{-' => '-}'),
+ 'COMMENT_REGEXP' => array(2 => "/-->/"),
+ 'CASE_KEYWORDS' => 0,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => "\\",
+ 'KEYWORDS' => array(
+ /* main haskell keywords */
+ 1 => array(
+ 'as',
+ 'case', 'of', 'class', 'data', 'default',
+ 'deriving', 'do', 'forall', 'hiding', 'if', 'then',
+ 'else', 'import', 'infix', 'infixl', 'infixr',
+ 'instance', 'let', 'in', 'module', 'newtype',
+ 'qualified', 'type', 'where'
+ ),
+ /* define names of main librarys, so we can link to it */
+ 2 => array(
+ 'Foreign', 'Numeric', 'Prelude'
+ ),
+ /* just link to Prelude functions, cause it's the default opened library when starting Haskell */
+ 3 => array(
+ 'not', 'otherwise', 'maybe',
+ 'either', 'fst', 'snd', 'curry', 'uncurry',
+ 'compare',
+ 'max', 'min', 'succ', 'pred', 'toEnum', 'fromEnum',
+ 'enumFrom', 'enumFromThen', 'enumFromTo',
+ 'enumFromThenTo', 'minBound', 'maxBound',
+ 'negate', 'abs', 'signum',
+ 'fromInteger', 'toRational', 'quot', 'rem',
+ 'div', 'mod', 'quotRem', 'divMod', 'toInteger',
+ 'recip', 'fromRational', 'pi', 'exp',
+ 'log', 'sqrt', 'logBase', 'sin', 'cos',
+ 'tan', 'asin', 'acos', 'atan', 'sinh', 'cosh',
+ 'tanh', 'asinh', 'acosh', 'atanh',
+ 'properFraction', 'truncate', 'round', 'ceiling',
+ 'floor', 'floatRadix', 'floatDigits', 'floatRange',
+ 'decodeFloat', 'encodeFloat', 'exponent',
+ 'significand', 'scaleFloat', 'isNaN', 'isInfinite',
+ 'isDenomalized', 'isNegativeZero', 'isIEEE',
+ 'atan2', 'subtract', 'even', 'odd', 'gcd',
+ 'lcm', 'fromIntegral', 'realToFrac',
+ 'return', 'fail', 'fmap',
+ 'mapM', 'mapM_', 'sequence', 'sequence_',
+ 'id', 'const','flip',
+ 'until', 'asTypeOf', 'error', 'undefined',
+ 'seq','map','filter', 'head',
+ 'last', 'tail', 'init', 'null', 'length',
+ 'reverse', 'foldl', 'foldl1', 'foldr',
+ 'foldr1', 'and', 'or', 'any', 'all', 'sum',
+ 'product', 'concat', 'concatMap', 'maximum',
+ 'minimum', 'scanl', 'scanl1', 'scanr', 'scanr1',
+ 'iterate', 'repeat', 'cycle', 'take', 'drop',
+ 'splitAt', 'teakWhile', 'dropWhile', 'span',
+ 'break', 'elem', 'notElem', 'lookup', 'zip',
+ 'zip3', 'zipWith', 'zipWith3', 'unzip', 'unzip3',
+ 'lines', 'words', 'unlines',
+ 'unwords', 'showPrec', 'show', 'showList',
+ 'shows', 'showChar', 'showString', 'showParen',
+ 'readsPrec', 'readList', 'reads', 'readParen',
+ 'read', 'lex', 'putChar', 'putStr', 'putStrLn',
+ 'print', 'getChar', 'getLine', 'getContents',
+ 'interact', 'readFile', 'writeFile', 'appendFile',
+ 'readIO', 'readLn', 'ioError', 'userError', 'catch'
+ ),
+ /* here Prelude Types */
+ 4 => array (
+ 'Bool', 'Maybe', 'Either', 'Ord', 'Ordering',
+ 'Char', 'String', 'Eq', 'Enum', 'Bounded',
+ 'Int', 'Integer', 'Float', 'Double', 'Rational',
+ 'Num', 'Real', 'Integral', 'Fractional',
+ 'Floating', 'RealFrac', 'RealFloat', 'Monad',
+ 'Functor', 'Show', 'ShowS', 'Read', 'ReadS',
+ 'IO'
+ ),
+ /* finally Prelude Exceptions */
+ 5 => array (
+ 'IOError', 'IOException'
+ )
+ ),
+ /* highlighting symbols is really important in Haskell */
+ 'SYMBOLS' => array(
+ '|', '->', '<-', '@', '!', '::', '_', '~', '=', '?',
+ '&&', '||', '==', '/=', '<', '<=', '>',
+ '>=','+', '-', '*','/', '%', '**', '^', '^^',
+ '>>=', '>>', '=<<', '$', '.', ',', '$!',
+ '++', '!!'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ 2 => true, /* functions name are case seinsitive */
+ 3 => true, /* types name too */
+ 4 => true, /* finally exceptions too */
+ 5 => true
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #06c; font-weight: bold;', /* nice blue */
+ 2 => 'color: #06c; font-weight: bold;', /* blue as well */
+ 3 => 'font-weight: bold;', /* make the preduled functions bold */
+ 4 => 'color: #cccc00; font-weight: bold;', /* give types a different bg */
+ 5 => 'color: maroon;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #5d478b; font-style: italic;',
+ 2 => 'color: #339933; font-weight: bold;',
+ 'MULTI' => 'color: #5d478b; font-style: italic;' /* light purpHle */
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'background-color: #3cb371; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: green;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'background-color: #3cb371;' /* nice green */
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: red;' /* pink */
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #060;' /* dark green */
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #339933; font-weight: bold;'
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ /* some of keywords are Prelude functions */
+ 1 => '',
+ /* link to the wanted library */
+ 2 => 'http://haskell.org/ghc/docs/latest/html/libraries/base/{FNAME}.html',
+ /* link to Prelude functions */
+ 3 => 'http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v:{FNAME}',
+ /* link to Prelude types */
+ 4 => 'http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#t:{FNAME}',
+ /* link to Prelude exceptions */
+ 5 => 'http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#t:{FNAME}',
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/hq9plus.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/hq9plus.php
new file mode 100644
index 000000000..2a5c429ca
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/hq9plus.php
@@ -0,0 +1,104 @@
+<?php
+/*************************************************************************************
+ * hq9plus.php
+ * ----------
+ * Author: Benny Baumann (BenBE@geshi.org)
+ * Copyright: (c) 2008 Benny Baumann (http://qbnz.com/highlighter/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2009/10/31
+ *
+ * HQ9+ language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/10/31 (1.0.8.1)
+ * - First Release
+ *
+ * TODO
+ * ----
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+$language_data = array (
+ 'LANG_NAME' => 'HQ9+',
+ 'COMMENT_SINGLE' => array(),
+ 'COMMENT_MULTI' => array(),
+ 'COMMENT_REGEXP' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_UPPER,
+ 'QUOTEMARKS' => array(),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 'H', 'Q', '9', '+', 'h', 'q'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ ),
+ 'COMMENTS' => array(
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #a16000;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ )
+ ),
+ 'URLS' => array(
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 4,
+ 'PARSER_CONTROL' => array(
+ 'ENABLE_FLAGS' => array(
+ 'KEYWORDS' => GESHI_NEVER,
+ 'COMMENTS' => GESHI_NEVER,
+ 'STRINGS' => GESHI_NEVER,
+ 'REGEXPS' => GESHI_NEVER,
+ 'NUMBERS' => GESHI_NEVER
+ )
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/html4strict.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/html4strict.php
new file mode 100644
index 000000000..314351523
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/html4strict.php
@@ -0,0 +1,203 @@
+<?php
+/*************************************************************************************
+ * html4strict.php
+ * ---------------
+ * Author: Nigel McNie (nigel@geshi.org)
+ * Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/07/10
+ *
+ * HTML 4.01 strict language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2005/12/28 (1.0.4)
+ * - Removed escape character for strings
+ * 2004/11/27 (1.0.3)
+ * - Added support for multiple object splitters
+ * 2004/10/27 (1.0.2)
+ * - Added support for URLs
+ * 2004/08/05 (1.0.1)
+ * - Added INS and DEL
+ * - Removed the background colour from tags' styles
+ * 2004/07/14 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ * * Check that only HTML4 strict attributes are highlighted
+ * * Eliminate empty tags that aren't allowed in HTML4 strict
+ * * Split to several files - html4trans, xhtml1 etc
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'HTML',
+ 'COMMENT_SINGLE' => array(),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ 2 => array(
+ 'a', 'abbr', 'acronym', 'address', 'applet',
+
+ 'base', 'basefont', 'bdo', 'big', 'blockquote', 'body', 'br', 'button', 'b',
+
+ 'caption', 'center', 'cite', 'code', 'colgroup', 'col',
+
+ 'dd', 'del', 'dfn', 'dir', 'div', 'dl', 'dt',
+
+ 'em',
+
+ 'fieldset', 'font', 'form', 'frame', 'frameset',
+
+ 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'hr', 'html',
+
+ 'iframe', 'ilayer', 'img', 'input', 'ins', 'isindex', 'i',
+
+ 'kbd',
+
+ 'label', 'legend', 'link', 'li',
+
+ 'map', 'meta',
+
+ 'noframes', 'noscript',
+
+ 'object', 'ol', 'optgroup', 'option',
+
+ 'param', 'pre', 'p',
+
+ 'q',
+
+ 'samp', 'script', 'select', 'small', 'span', 'strike', 'strong', 'style', 'sub', 'sup', 's',
+
+ 'table', 'tbody', 'td', 'textarea', 'text', 'tfoot', 'thead', 'th', 'title', 'tr', 'tt',
+
+ 'ul', 'u',
+
+ 'var',
+ ),
+ 3 => array(
+ 'abbr', 'accept-charset', 'accept', 'accesskey', 'action', 'align', 'alink', 'alt', 'archive', 'axis',
+ 'background', 'bgcolor', 'border',
+ 'cellpadding', 'cellspacing', 'char', 'charoff', 'charset', 'checked', 'cite', 'class', 'classid', 'clear', 'code', 'codebase', 'codetype', 'color', 'cols', 'colspan', 'compact', 'content', 'coords',
+ 'data', 'datetime', 'declare', 'defer', 'dir', 'disabled',
+ 'enctype',
+ 'face', 'for', 'frame', 'frameborder',
+ 'headers', 'height', 'href', 'hreflang', 'hspace', 'http-equiv',
+ 'id', 'ismap',
+ 'label', 'lang', 'language', 'link', 'longdesc',
+ 'marginheight', 'marginwidth', 'maxlength', 'media', 'method', 'multiple',
+ 'name', 'nohref', 'noresize', 'noshade', 'nowrap',
+ 'object', 'onblur', 'onchange', 'onclick', 'ondblclick', 'onfocus', 'onkeydown', 'onkeypress', 'onkeyup', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onreset', 'onselect', 'onsubmit', 'onunload',
+ 'profile', 'prompt',
+ 'readonly', 'rel', 'rev', 'rowspan', 'rows', 'rules',
+ 'scheme', 'scope', 'scrolling', 'selected', 'shape', 'size', 'span', 'src', 'standby', 'start', 'style', 'summary',
+ 'tabindex', 'target', 'text', 'title', 'type',
+ 'usemap',
+ 'valign', 'value', 'valuetype', 'version', 'vlink', 'vspace',
+ 'width'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '/', '='
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 2 => false,
+ 3 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 2 => 'color: #000000; font-weight: bold;',
+ 3 => 'color: #000066;'
+ ),
+ 'COMMENTS' => array(
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'SCRIPT' => array(
+ -1 => 'color: #808080; font-style: italic;', // comments
+ 0 => 'color: #00bbdd;',
+ 1 => 'color: #ddbb00;',
+ 2 => 'color: #009900;'
+ ),
+ 'REGEXPS' => array(
+ )
+ ),
+ 'URLS' => array(
+ 2 => 'http://december.com/html/4/element/{FNAMEL}.html',
+ 3 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_ALWAYS,
+ 'SCRIPT_DELIMITERS' => array(
+ -1 => array(
+ '<!--' => '-->'
+ ),
+ 0 => array(
+ '<!DOCTYPE' => '>'
+ ),
+ 1 => array(
+ '&' => ';'
+ ),
+ 2 => array(
+ '<' => '>'
+ )
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ -1 => false,
+ 0 => false,
+ 1 => false,
+ 2 => true
+ ),
+ 'TAB_WIDTH' => 4,
+ 'PARSER_CONTROL' => array(
+ 'KEYWORDS' => array(
+ 2 => array(
+ 'DISALLOWED_BEFORE' => '(?<=&lt;|&lt;\/)',
+ 'DISALLOWED_AFTER' => '(?=\s|\/|&gt;)',
+ )
+ )
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/idl.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/idl.php
new file mode 100644
index 000000000..9160fd150
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/idl.php
@@ -0,0 +1,123 @@
+<?php
+/*************************************************************************************
+ * idl.php
+ * -------
+ * Author: Cedric Bosdonnat (cedricbosdo@openoffice.org)
+ * Copyright: (c) 2006 Cedric Bosdonnat
+ * Release Version: 1.0.8.4
+ * Date Started: 2006/08/20
+ *
+ * Unoidl language file for GeSHi.
+ *
+ * 2006/08/20 (1.0.0)
+ * - First Release
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+
+$language_data = array (
+ 'LANG_NAME' => 'Uno Idl',
+ 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'published', 'get', 'set', 'service', 'singleton', 'type', 'module', 'interface', 'struct',
+ 'const', 'constants', 'exception', 'enum', 'raises', 'typedef'
+ ),
+ 2 => array(
+ 'bound', 'maybeambiguous', 'maybedefault', 'maybevoid', 'oneway', 'optional',
+ 'readonly', 'in', 'out', 'inout', 'attribute', 'transient', 'removable'
+ ),
+ 3 => array(
+ 'True', 'False', 'TRUE', 'FALSE'
+ ),
+ 4 => array(
+ 'string', 'long', 'byte', 'hyper', 'boolean', 'any', 'char', 'double',
+ 'void', 'sequence', 'unsigned'
+ ),
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '{', '}', '[', ']', '=', '+', '-', '*', '/', '!', '%', '^', '&', ':', ';', '...'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ 2 => true,
+ 3 => true,
+ 4 => true,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #990078; font-weight: bold',
+ 2 => 'color: #36dd1c;',
+ 3 => 'color: #990078; font-weight: bold',
+ 4 => 'color: #0000ec;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #3f7f5f;',
+ 2 => 'color: #808080;',
+ 'MULTI' => 'color: #4080ff; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #666666; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #808080;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #0000dd;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '::'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/ini.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/ini.php
new file mode 100644
index 000000000..365b4d6f8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/ini.php
@@ -0,0 +1,128 @@
+<?php
+/*************************************************************************************
+ * ini.php
+ * --------
+ * Author: deguix (cevo_deguix@yahoo.com.br)
+ * Copyright: (c) 2005 deguix
+ * Release Version: 1.0.8.4
+ * Date Started: 2005/03/27
+ *
+ * INI language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * 2005/12/28 (1.0.1)
+ * - Removed unnecessary keyword style index
+ * - Added support for " strings
+ * 2005/04/05 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2005/03/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'INI',
+ 'COMMENT_SINGLE' => array(0 => ';'),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ ),
+ 'SYMBOLS' => array(
+ '[', ']', '='
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ ),
+ 'COMMENTS' => array(
+ 0 => 'color: #666666; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => ''
+ ),
+ 'BRACKETS' => array(
+ 0 => ''
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #933;'
+ ),
+ 'NUMBERS' => array(
+ 0 => ''
+ ),
+ 'METHODS' => array(
+ 0 => ''
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #000066; font-weight:bold;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #000066; font-weight:bold;',
+ 1 => 'color: #000099;',
+ 2 => 'color: #660066;'
+ ),
+ 'SCRIPT' => array(
+ 0 => ''
+ )
+ ),
+ 'URLS' => array(
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ //Section names
+ 0 => '\[.+\]',
+ //Entry names
+ 1 => array(
+ GESHI_SEARCH => '^(\s*)([a-zA-Z0-9_\-]+)(\s*=)',
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => 'm',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => '\\3'
+ ),
+ //Entry values
+ 2 => array(
+ // Evil hackery to get around GeSHi bug: <>" and ; are added so <span>s can be matched
+ // Explicit match on variable names because if a comment is before the first < of the span
+ // gets chewed up...
+ GESHI_SEARCH => '([<>";a-zA-Z0-9_]+\s*)=(.*)',
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '\\1=',
+ GESHI_AFTER => ''
+ )
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/inno.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/inno.php
new file mode 100644
index 000000000..99563514d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/inno.php
@@ -0,0 +1,212 @@
+<?php
+/*************************************************************************************
+ * Inno.php
+ * ----------
+ * Author: Thomas Klingler (hotline@theratech.de) based on delphi.php from J�rja Norbert (jnorbi@vipmail.hu)
+ * Copyright: (c) 2004 J�rja Norbert, Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2005/07/29
+ *
+ * Inno Script language inkl. Delphi (Object Pascal) language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2005/09/03
+ * - First Release
+ *
+ * TODO (updated 2005/07/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Inno',
+ 'COMMENT_SINGLE' => array(1 => '//'),
+ 'COMMENT_MULTI' => array('(*' => '*)'),
+ 'CASE_KEYWORDS' => 0,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'Setup','Types','Components','Tasks','Dirs','Files','Icons','INI',
+ 'InstallDelete','Languages','Messages','CustomMessage',
+ 'LangOptions','Registry','RUN','UninstallDelete','UninstallRun',
+ 'app','win','sys','syswow64','src','sd','pf','pf32','pf64','cf',
+ 'cf32','cf64','tmp','fonts','dao','group','localappdata','sendto',
+ 'userappdata','commonappdata','userdesktop','commondesktop',
+ 'userdocs','commondocs','userfavorites','commonfavorites',
+ 'userprograms','commonprograms','userstartmenu','commonstartmenu',
+ 'userstartup','commonstartup','usertemplates','commontemplates'
+ ),
+ 2 => array(
+ 'nil', 'false', 'true', 'var', 'type', 'const','And', 'Array', 'As', 'Begin', 'Case', 'Class', 'Constructor', 'Destructor', 'Div', 'Do', 'DownTo', 'Else',
+ 'End', 'Except', 'File', 'Finally', 'For', 'Function', 'Goto', 'If', 'Implementation', 'In', 'Inherited', 'Interface',
+ 'Is', 'Mod', 'Not', 'Object', 'Of', 'On', 'Or', 'Packed', 'Procedure', 'Property', 'Raise', 'Record',
+ 'Repeat', 'Set', 'Shl', 'Shr', 'Then', 'ThreadVar', 'To', 'Try', 'Unit', 'Until', 'Uses', 'While', 'With', 'Xor',
+
+ 'HKCC','HKCR','HKCU','HKLM','HKU','alwaysoverwrite','alwaysskipifsameorolder','append',
+ 'binary','classic','closeonexit','comparetimestamp','confirmoverwrite',
+ 'createkeyifdoesntexist','createonlyiffileexists','createvalueifdoesntexist',
+ 'deleteafterinstall','deletekey','deletevalue','dirifempty','dontcloseonexit',
+ 'dontcopy','dontcreatekey','disablenouninstallwarning','dword','exclusive','expandsz',
+ 'external','files','filesandordirs','fixed','fontisnttruetype','ignoreversion','iscustom','isreadme',
+ 'modern','multisz','new','noerror','none','normal','nowait','onlyifdestfileexists',
+ 'onlyifdoesntexist','onlyifnewer','overwrite','overwritereadonly','postinstall',
+ 'preservestringtype','promptifolder','regserver','regtypelib','restart','restartreplace',
+ 'runhidden','runmaximized','runminimized','sharedfile','shellexec','showcheckbox',
+ 'skipifnotsilent','skipifsilent','silent','skipifdoesntexist',
+ 'skipifsourcedoesntexist','sortfilesbyextension','unchecked','uninsalwaysuninstall',
+ 'uninsclearvalue','uninsdeleteentry','uninsdeletekey','uninsdeletekeyifempty',
+ 'uninsdeletesection','uninsdeletesectionifempty','uninsdeletevalue',
+ 'uninsneveruninstall','useapppaths','verysilent','waituntilidle'
+ ),
+ 3 => array(
+ 'Abs', 'Addr', 'AnsiCompareStr', 'AnsiCompareText', 'AnsiContainsStr', 'AnsiEndsStr', 'AnsiIndexStr', 'AnsiLeftStr',
+ 'AnsiLowerCase', 'AnsiMatchStr', 'AnsiMidStr', 'AnsiPos', 'AnsiReplaceStr', 'AnsiReverseString', 'AnsiRightStr',
+ 'AnsiStartsStr', 'AnsiUpperCase', 'ArcCos', 'ArcSin', 'ArcTan', 'Assigned', 'BeginThread', 'Bounds', 'CelsiusToFahrenheit',
+ 'ChangeFileExt', 'Chr', 'CompareStr', 'CompareText', 'Concat', 'Convert', 'Copy', 'Cos', 'CreateDir', 'CurrToStr',
+ 'CurrToStrF', 'Date', 'DateTimeToFileDate', 'DateTimeToStr', 'DateToStr', 'DayOfTheMonth', 'DayOfTheWeek', 'DayOfTheYear',
+ 'DayOfWeek', 'DaysBetween', 'DaysInAMonth', 'DaysInAYear', 'DaySpan', 'DegToRad', 'DeleteFile', 'DiskFree', 'DiskSize',
+ 'DupeString', 'EncodeDate', 'EncodeDateTime', 'EncodeTime', 'EndOfADay', 'EndOfAMonth', 'Eof', 'Eoln', 'Exp', 'ExtractFileDir',
+ 'ExtractFileDrive', 'ExtractFileExt', 'ExtractFileName', 'ExtractFilePath', 'FahrenheitToCelsius', 'FileAge',
+ 'FileDateToDateTime', 'FileExists', 'FilePos', 'FileSearch', 'FileSetDate', 'FileSize', 'FindClose', 'FindCmdLineSwitch',
+ 'FindFirst', 'FindNext', 'FloatToStr', 'FloatToStrF', 'Format', 'FormatCurr', 'FormatDateTime', 'FormatFloat', 'Frac',
+ 'GetCurrentDir', 'GetLastError', 'GetMem', 'High', 'IncDay', 'IncMinute', 'IncMonth', 'IncYear', 'InputBox',
+ 'InputQuery', 'Int', 'IntToHex', 'IntToStr', 'IOResult', 'IsInfinite', 'IsLeapYear', 'IsMultiThread', 'IsNaN',
+ 'LastDelimiter', 'Length', 'Ln', 'Lo', 'Log10', 'Low', 'LowerCase', 'Max', 'Mean', 'MessageDlg', 'MessageDlgPos',
+ 'MonthOfTheYear', 'Now', 'Odd', 'Ord', 'ParamCount', 'ParamStr', 'Pi', 'Point', 'PointsEqual', 'Pos', 'Pred',
+ 'Printer', 'PromptForFileName', 'PtInRect', 'RadToDeg', 'Random', 'RandomRange', 'RecodeDate', 'RecodeTime', 'Rect',
+ 'RemoveDir', 'RenameFile', 'Round', 'SeekEof', 'SeekEoln', 'SelectDirectory', 'SetCurrentDir', 'Sin', 'SizeOf',
+ 'Slice', 'Sqr', 'Sqrt', 'StringOfChar', 'StringReplace', 'StringToWideChar', 'StrToCurr', 'StrToDate', 'StrToDateTime',
+ 'StrToFloat', 'StrToInt', 'StrToInt64', 'StrToInt64Def', 'StrToIntDef', 'StrToTime', 'StuffString', 'Succ', 'Sum', 'Tan',
+ 'Time', 'TimeToStr', 'Tomorrow', 'Trunc', 'UpCase', 'UpperCase', 'VarType', 'WideCharToString', 'WrapText', 'Yesterday',
+ 'Append', 'AppendStr', 'Assign', 'AssignFile', 'AssignPrn', 'Beep', 'BlockRead', 'BlockWrite', 'Break',
+ 'ChDir', 'Close', 'CloseFile', 'Continue', 'DateTimeToString', 'Dec', 'DecodeDate', 'DecodeDateTime',
+ 'DecodeTime', 'Delete', 'Dispose', 'EndThread', 'Erase', 'Exclude', 'Exit', 'FillChar', 'Flush', 'FreeAndNil',
+ 'FreeMem', 'GetDir', 'GetLocaleFormatSettings', 'Halt', 'Inc', 'Include', 'Insert', 'MkDir', 'Move', 'New',
+ 'ProcessPath', 'Randomize', 'Read', 'ReadLn', 'ReallocMem', 'Rename', 'ReplaceDate', 'ReplaceTime',
+ 'Reset', 'ReWrite', 'RmDir', 'RunError', 'Seek', 'SetLength', 'SetString', 'ShowMessage', 'ShowMessageFmt',
+ 'ShowMessagePos', 'Str', 'Truncate', 'Val', 'Write', 'WriteLn',
+
+ 'AdminPrivilegesRequired','AfterInstall','AllowCancelDuringInstall','AllowNoIcons','AllowRootDirectory','AllowUNCPath','AlwaysRestart','AlwaysShowComponentsList','AlwaysShowDirOnReadyPage','AlwaysShowGroupOnReadyPage ','AlwaysUsePersonalGroup','AppComments','AppContact','AppCopyright','AppendDefaultDirName',
+ 'AppendDefaultGroupName','AppId','AppModifyPath','AppMutex','AppName','AppPublisher',
+ 'AppPublisherURL','AppReadmeFile','AppSupportURL','AppUpdatesURL','AppVerName','AppVersion',
+ 'Attribs','BackColor','BackColor2','BackColorDirection','BackSolid','BeforeInstall',
+ 'ChangesAssociations','ChangesEnvironment','Check','CodeFile','Comment','Compression','CopyMode',
+ 'CreateAppDir','CreateUninstallRegKey','DefaultDirName','DefaultGroupName',
+ 'DefaultUserInfoName','DefaultUserInfoOrg','DefaultUserInfoSerial',
+ 'Description','DestDir','DestName','DirExistsWarning',
+ 'DisableDirPage','DisableFinishedPage',
+ 'DisableProgramGroupPage','DisableReadyMemo','DisableReadyPage',
+ 'DisableStartupPrompt','DiskClusterSize','DiskSliceSize','DiskSpaceMBLabel',
+ 'DiskSpanning','DontMergeDuplicateFiles','EnableDirDoesntExistWarning','Encryption',
+ 'Excludes','ExtraDiskSpaceRequired','Filename','Flags','FlatComponentsList','FontInstall',
+ 'GroupDescription','HotKey','IconFilename','IconIndex','InfoAfterFile','InfoBeforeFile',
+ 'InternalCompressLevel','Key','LanguageDetectionMethod',
+ 'LicenseFile','MergeDuplicateFiles','MessagesFile','MinVersion','Name',
+ 'OnlyBelowVersion','OutputBaseFilename','OutputManifestFile','OutputDir',
+ 'Parameters','Password','Permissions','PrivilegesRequired','ReserveBytes',
+ 'RestartIfNeededByRun','Root','RunOnceId','Section','SetupIconFile',
+ 'ShowComponentSizes','ShowLanguageDialog','ShowTasksTreeLines','SlicesPerDisk',
+ 'SolidCompression','Source','SourceDir','StatusMsg','Subkey',
+ 'TimeStampRounding','TimeStampsInUTC','TouchDate','TouchTime','Type',
+ 'UninstallDisplayIcon','UninstallDisplayName','UninstallFilesDir','UninstallIconFile',
+ 'UninstallLogMode','UninstallRestartComputer','UninstallStyle','Uninstallable',
+ 'UpdateUninstallLogAppName','UsePreviousAppDir','UsePreviousGroup',
+ 'UsePreviousTasks','UsePreviousSetupType','UsePreviousUserInfo',
+ 'UserInfoPage','UseSetupLdr','ValueData','ValueName','ValueType',
+ 'VersionInfoVersion','VersionInfoCompany','VersionInfoDescription','VersionInfoTextVersion',
+ 'WindowResizable','WindowShowCaption','WindowStartMaximized',
+ 'WindowVisible','WizardImageBackColor','WizardImageFile','WizardImageStretch','WizardSmallImageBackColor','WizardSmallImageFile','WizardStyle','WorkingDir'
+ ),
+ 4 => array(
+ 'AnsiChar', 'AnsiString', 'Boolean', 'Byte', 'Cardinal', 'Char', 'Comp', 'Currency', 'Double', 'Extended',
+ 'Int64', 'Integer', 'LongInt', 'LongWord', 'PAnsiChar', 'PAnsiString', 'PChar', 'PCurrency', 'PDateTime',
+ 'PExtended', 'PInt64', 'Pointer', 'PShortString', 'PString', 'PVariant', 'PWideChar', 'PWideString',
+ 'Real', 'Real48', 'ShortInt', 'ShortString', 'Single', 'SmallInt', 'String', 'TBits', 'TConvType', 'TDateTime',
+ 'Text', 'TextFile', 'TFloatFormat', 'TFormatSettings', 'TList', 'TObject', 'TOpenDialog', 'TPoint',
+ 'TPrintDialog', 'TRect', 'TReplaceFlags', 'TSaveDialog', 'TSearchRec', 'TStringList', 'TSysCharSet',
+ 'TThreadFunc', 'Variant', 'WideChar', 'WideString', 'Word'
+ ),
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '[', ']', '{', '}', '@', '%', '&', '*', '|', '/', '<', '>'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #000000; font-weight: bold;',/*bold Black*/
+ 2 => 'color: #000000;font-style: italic;',/*Black*/
+ 3 => 'color: #0000FF;',/*blue*/
+ 4 => 'color: #CC0000;'/*red*/
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #33FF00; font-style: italic;',
+ 'MULTI' => 'color: #33FF00; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #006600;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #000000; font-weight: bold;',
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/intercal.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/intercal.php
new file mode 100644
index 000000000..a58960089
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/intercal.php
@@ -0,0 +1,122 @@
+<?php
+/*************************************************************************************
+ * intercal.php
+ * ----------
+ * Author: Benny Baumann (BenBE@geshi.org)
+ * Copyright: (c) 2008 Benny Baumann (http://qbnz.com/highlighter/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2009/10/31
+ *
+ * INTERCAL language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/10/31 (1.0.8.1)
+ * - First Release
+ *
+ * TODO
+ * ----
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+$language_data = array (
+ 'LANG_NAME' => 'INTERCAL',
+ 'COMMENT_SINGLE' => array(),
+ 'COMMENT_MULTI' => array(),
+ 'COMMENT_REGEXP' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_UPPER,
+ 'QUOTEMARKS' => array(),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ //Politeness
+ 1 => array(
+ 'DO', 'DOES', 'DONT', 'DON\'T', 'NOT', 'PLEASE', 'PLEASENT', 'PLEASEN\'T', 'MAYBE'
+ ),
+ //Statements
+ 2 => array(
+ 'STASH', 'RETRIEVE', 'NEXT', 'RESUME', 'FORGET', 'ABSTAIN', 'ABSTAINING',
+ 'COME', 'FROM', 'CALCULATING', 'REINSTATE', 'IGNORE', 'REMEMBER',
+ 'WRITE', 'IN', 'READ', 'OUT', 'GIVE', 'UP'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '.', ',', ':', ';', '#',
+ '~', '$', '&', '?',
+ '\'', '"', '<-'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #000080; font-weight: bold;',
+ 2 => 'color: #000080; font-weight: bold;'
+ ),
+ 'COMMENTS' => array(
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ 1 => 'color: #808080; font-style: italic;'
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ 1 => '^\(\d+\)'
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 4,
+ 'PARSER_CONTROL' => array(
+ 'ENABLE_FLAGS' => array(
+ 'COMMENTS' => GESHI_NEVER,
+ 'STRINGS' => GESHI_NEVER,
+ 'NUMBERS' => GESHI_NEVER
+ )
+ )
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/io.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/io.php
new file mode 100644
index 000000000..7ec53a881
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/io.php
@@ -0,0 +1,138 @@
+<?php
+/*************************************************************************************
+ * io.php
+ * -------
+ * Author: Nigel McNie (nigel@geshi.org)
+ * Copyright: (c) 2006 Nigel McNie (http://qbnz.com/highlighter/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2006/09/23
+ *
+ * Io language file for GeSHi. Thanks to Johnathan Wright for the suggestion and help
+ * with this language :)
+ *
+ * CHANGES
+ * -------
+ * 2006/09/23(1.0.0)
+ * - First Release
+ *
+ * TODO
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Io',
+ 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'and', 'break', 'else', 'elseif', 'exit', 'for', 'foreach', 'if', 'ifFalse', 'ifNil',
+ 'ifTrue', 'or', 'pass', 'raise', 'return', 'then', 'try', 'wait', 'while', 'yield'
+ ),
+ 2 => array(
+ 'activate', 'activeCoroCount', 'asString', 'block', 'catch', 'clone', 'collectGarbage',
+ 'compileString', 'continue', 'do', 'doFile', 'doMessage', 'doString', 'forward',
+ 'getSlot', 'getenv', 'hasSlot', 'isActive', 'isNil', 'isResumable', 'list', 'message',
+ 'method', 'parent', 'pause', 'perform', 'performWithArgList', 'print', 'proto',
+ 'raiseResumable', 'removeSlot', 'resend', 'resume', 'schedulerSleepSeconds', 'self',
+ 'sender', 'setSchedulerSleepSeconds', 'setSlot', 'shallowCopy', 'slotNames', 'super',
+ 'system', 'thisBlock', 'thisContext', 'thisMessage', 'type', 'uniqueId', 'updateSlot',
+ 'write'
+ ),
+ 3 => array(
+ 'Array', 'AudioDevice', 'AudioMixer', 'Block', 'Box', 'Buffer', 'CFunction', 'CGI',
+ 'Color', 'Curses', 'DBM', 'DNSResolver', 'DOConnection', 'DOProxy', 'DOServer',
+ 'Date', 'Directory', 'Duration', 'DynLib', 'Error', 'Exception', 'FFT', 'File',
+ 'Fnmatch', 'Font', 'Future', 'GL', 'GLE', 'GLScissor', 'GLU', 'GLUCylinder',
+ 'GLUQuadric', 'GLUSphere', 'GLUT', 'Host', 'Image', 'Importer', 'LinkList', 'List',
+ 'Lobby', 'Locals', 'MD5', 'MP3Decoder', 'MP3Encoder', 'Map', 'Message', 'Movie',
+ 'NULL', 'Nil', 'Nop', 'Notifiction', 'Number', 'Object', 'OpenGL', 'Point', 'Protos',
+ 'Regex', 'SGMLTag', 'SQLite', 'Server', 'ShowMessage', 'SleepyCat', 'SleepyCatCursor',
+ 'Socket', 'SocketManager', 'Sound', 'Soup', 'Store', 'String', 'Tree', 'UDPSender',
+ 'UDPReceiver', 'URL', 'User', 'Warning', 'WeakLink'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '[', ']', '{', '}', '!', '@', '%', '&', '*', '|', '/', '<', '>'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #b1b100;',
+ 2 => 'color: #000000; font-weight: bold;',
+ 3 => 'color: #000066;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080; font-style: italic;',
+ 2 => 'color: #808080; font-style: italic;',
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #006600;',
+ 2 => 'color: #006600;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ 0 => ''
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/java.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/java.php
new file mode 100644
index 000000000..d8a2d5e4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/java.php
@@ -0,0 +1,983 @@
+<?php
+/*************************************************************************************
+ * java.php
+ * --------
+ * Author: Nigel McNie (nigel@geshi.org)
+ * Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/07/10
+ *
+ * Java language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/25 (1.0.7.22)
+ * - Added highlighting of import and package directives as non-OOP
+ * 2005/12/28 (1.0.4)
+ * - Added instanceof keyword
+ * 2004/11/27 (1.0.3)
+ * - Added support for multiple object splitters
+ * 2004/08/05 (1.0.2)
+ * - Added URL support
+ * - Added keyword "this", as bugs in GeSHi class ironed out
+ * 2004/08/05 (1.0.1)
+ * - Added support for symbols
+ * - Added extra missed keywords
+ * 2004/07/14 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ * * Compact the class names like the first few have been
+ * and eliminate repeats
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Java',
+ 'COMMENT_SINGLE' => array(1 => '//'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'COMMENT_REGEXP' => array(
+ //Import and Package directives (Basic Support only)
+ 2 => '/(?:(?<=import[\\n\\s])|(?<=package[\\n\\s]))[\\n\\s]*([a-zA-Z0-9_]+\\.)*([a-zA-Z0-9_]+|\*)(?=[\n\s;])/i',
+ // javadoc comments
+ 3 => '#/\*\*(?![\*\/]).*\*/#sU'
+ ),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'for', 'foreach', 'if', 'else', 'while', 'do',
+ 'switch', 'case', 'return', 'public',
+ 'private', 'protected', 'extends', 'break', 'class',
+ 'new', 'try', 'catch', 'throws', 'finally', 'implements',
+ 'interface', 'throw', 'final', 'native', 'synchronized', 'this',
+ 'abstract', 'transient', 'instanceof', 'assert', 'continue',
+ 'default', 'enum', 'package', 'static', 'strictfp', 'super',
+ 'volatile', 'const', 'goto', 'import'
+ ),
+ 2 => array(
+ 'null', 'false', 'true'
+ ),
+ 3 => array(
+ 'AbstractAction', 'AbstractBorder', 'AbstractButton',
+ 'AbstractCellEditor', 'AbstractCollection',
+ 'AbstractColorChooserPanel', 'AbstractDocument',
+ 'AbstractDocument.AttributeContext',
+ 'AbstractDocument.Content',
+ 'AbstractDocument.ElementEdit',
+ 'AbstractLayoutCache',
+ 'AbstractLayoutCache.NodeDimensions', 'AbstractList',
+ 'AbstractListModel', 'AbstractMap',
+ 'AbstractMethodError', 'AbstractSequentialList',
+ 'AbstractSet', 'AbstractTableModel',
+ 'AbstractUndoableEdit', 'AbstractWriter',
+ 'AccessControlContext', 'AccessControlException',
+ 'AccessController', 'AccessException', 'Accessible',
+ 'AccessibleAction', 'AccessibleBundle',
+ 'AccessibleComponent', 'AccessibleContext',
+ 'AccessibleHyperlink', 'AccessibleHypertext',
+ 'AccessibleIcon', 'AccessibleObject',
+ 'AccessibleRelation', 'AccessibleRelationSet',
+ 'AccessibleResourceBundle', 'AccessibleRole',
+ 'AccessibleSelection', 'AccessibleState',
+ 'AccessibleStateSet', 'AccessibleTable',
+ 'AccessibleTableModelChange', 'AccessibleText',
+ 'AccessibleValue', 'Acl', 'AclEntry',
+ 'AclNotFoundException', 'Action', 'ActionEvent',
+ 'ActionListener', 'ActionMap', 'ActionMapUIResource',
+ 'Activatable', 'ActivateFailedException',
+ 'ActivationDesc', 'ActivationException',
+ 'ActivationGroup', 'ActivationGroupDesc',
+ 'ActivationGroupDesc.CommandEnvironment',
+ 'ActivationGroupID', 'ActivationID',
+ 'ActivationInstantiator', 'ActivationMonitor',
+ 'ActivationSystem', 'Activator', 'ActiveEvent',
+ 'Adjustable', 'AdjustmentEvent',
+ 'AdjustmentListener', 'Adler32', 'AffineTransform',
+ 'AffineTransformOp', 'AlgorithmParameterGenerator',
+ 'AlgorithmParameterGeneratorSpi',
+ 'AlgorithmParameters', 'AlgorithmParameterSpec',
+ 'AlgorithmParametersSpi', 'AllPermission',
+ 'AlphaComposite', 'AlreadyBound',
+ 'AlreadyBoundException', 'AlreadyBoundHelper',
+ 'AlreadyBoundHolder', 'AncestorEvent',
+ 'AncestorListener', 'Annotation', 'Any', 'AnyHolder',
+ 'AnySeqHelper', 'AnySeqHolder', 'Applet',
+ 'AppletContext', 'AppletInitializer', 'AppletStub',
+ 'ApplicationException', 'Arc2D', 'Arc2D.Double',
+ 'Arc2D.Float', 'Area', 'AreaAveragingScaleFilter',
+ 'ARG_IN', 'ARG_INOUT', 'ARG_OUT',
+ 'ArithmeticException', 'Array',
+ 'ArrayIndexOutOfBoundsException', 'ArrayList',
+ 'Arrays', 'ArrayStoreException', 'AsyncBoxView',
+ 'Attribute', 'AttributedCharacterIterator',
+ 'AttributedCharacterIterator.Attribute',
+ 'AttributedString', 'AttributeInUseException',
+ 'AttributeList', 'AttributeModificationException',
+ 'Attributes', 'Attributes.Name', 'AttributeSet',
+ 'AttributeSet.CharacterAttribute',
+ 'AttributeSet.ColorAttribute',
+ 'AttributeSet.FontAttribute',
+ 'AttributeSet.ParagraphAttribute', 'AudioClip',
+ 'AudioFileFormat', 'AudioFileFormat.Type',
+ 'AudioFileReader', 'AudioFileWriter', 'AudioFormat',
+ 'AudioFormat.Encoding', 'AudioInputStream',
+ 'AudioPermission', 'AudioSystem',
+ 'AuthenticationException',
+ 'AuthenticationNotSupportedException',
+ 'Authenticator', 'Autoscroll', 'AWTError',
+ 'AWTEvent', 'AWTEventListener',
+ 'AWTEventMulticaster', 'AWTException',
+ 'AWTPermission', 'BadKind', 'BadLocationException',
+ 'BAD_CONTEXT', 'BAD_INV_ORDER', 'BAD_OPERATION',
+ 'BAD_PARAM', 'BAD_POLICY', 'BAD_POLICY_TYPE',
+ 'BAD_POLICY_VALUE', 'BAD_TYPECODE', 'BandCombineOp',
+ 'BandedSampleModel', 'BasicArrowButton',
+ 'BasicAttribute', 'BasicAttributes', 'BasicBorders',
+ 'BasicBorders.ButtonBorder',
+ 'BasicBorders.FieldBorder',
+ 'BasicBorders.MarginBorder',
+ 'BasicBorders.MenuBarBorder',
+ 'BasicBorders.RadioButtonBorder',
+ 'BasicBorders.SplitPaneBorder',
+ 'BasicBorders.ToggleButtonBorder',
+ 'BasicButtonListener', 'BasicButtonUI',
+ 'BasicCheckBoxMenuItemUI', 'BasicCheckBoxUI',
+ 'BasicColorChooserUI', 'BasicComboBoxEditor',
+ 'BasicComboBoxEditor.UIResource',
+ 'BasicComboBoxRenderer',
+ 'BasicComboBoxRenderer.UIResource',
+ 'BasicComboBoxUI', 'BasicComboPopup',
+ 'BasicDesktopIconUI', 'BasicDesktopPaneUI',
+ 'BasicDirectoryModel', 'BasicEditorPaneUI',
+ 'BasicFileChooserUI', 'BasicGraphicsUtils',
+ 'BasicHTML', 'BasicIconFactory',
+ 'BasicInternalFrameTitlePane',
+ 'BasicInternalFrameUI', 'BasicLabelUI',
+ 'BasicListUI', 'BasicLookAndFeel', 'BasicMenuBarUI',
+ 'BasicMenuItemUI', 'BasicMenuUI',
+ 'BasicOptionPaneUI',
+ 'BasicOptionPaneUI.ButtonAreaLayout', 'BasicPanelUI',
+ 'BasicPasswordFieldUI', 'BasicPermission',
+ 'BasicPopupMenuSeparatorUI', 'BasicPopupMenuUI',
+ 'BasicProgressBarUI', 'BasicRadioButtonMenuItemUI',
+ 'BasicRadioButtonUI', 'BasicRootPaneUI',
+ 'BasicScrollBarUI', 'BasicScrollPaneUI',
+ 'BasicSeparatorUI', 'BasicSliderUI',
+ 'BasicSplitPaneDivider', 'BasicSplitPaneUI',
+ 'BasicStroke', 'BasicTabbedPaneUI',
+ 'BasicTableHeaderUI', 'BasicTableUI',
+ 'BasicTextAreaUI', 'BasicTextFieldUI',
+ 'BasicTextPaneUI', 'BasicTextUI',
+ 'BasicTextUI.BasicCaret',
+ 'BasicTextUI.BasicHighlighter',
+ 'BasicToggleButtonUI', 'BasicToolBarSeparatorUI',
+ 'BasicToolBarUI', 'BasicToolTipUI', 'BasicTreeUI',
+ 'BasicViewportUI', 'BatchUpdateException',
+ 'BeanContext', 'BeanContextChild',
+ 'BeanContextChildComponentProxy',
+ 'BeanContextChildSupport',
+ 'BeanContextContainerProxy', 'BeanContextEvent',
+ 'BeanContextMembershipEvent',
+ 'BeanContextMembershipListener', 'BeanContextProxy',
+ 'BeanContextServiceAvailableEvent',
+ 'BeanContextServiceProvider',
+ 'BeanContextServiceProviderBeanInfo',
+ 'BeanContextServiceRevokedEvent',
+ 'BeanContextServiceRevokedListener',
+ 'BeanContextServices', 'BeanContextServicesListener',
+ 'BeanContextServicesSupport',
+ 'BeanContextServicesSupport.BCSSServiceProvider',
+ 'BeanContextSupport',
+ 'BeanContextSupport.BCSIterator', 'BeanDescriptor',
+ 'BeanInfo', 'Beans', 'BevelBorder', 'BigDecimal',
+ 'BigInteger', 'BinaryRefAddr', 'BindException',
+ 'Binding', 'BindingHelper', 'BindingHolder',
+ 'BindingIterator', 'BindingIteratorHelper',
+ 'BindingIteratorHolder', 'BindingIteratorOperations',
+ 'BindingListHelper', 'BindingListHolder',
+ 'BindingType', 'BindingTypeHelper',
+ 'BindingTypeHolder', 'BitSet', 'Blob', 'BlockView',
+ 'Book', 'Boolean', 'BooleanControl',
+ 'BooleanControl.Type', 'BooleanHolder',
+ 'BooleanSeqHelper', 'BooleanSeqHolder', 'Border',
+ 'BorderFactory', 'BorderLayout', 'BorderUIResource',
+ 'BorderUIResource.BevelBorderUIResource',
+ 'BorderUIResource.CompoundBorderUIResource',
+ 'BorderUIResource.EmptyBorderUIResource',
+ 'BorderUIResource.EtchedBorderUIResource',
+ 'BorderUIResource.LineBorderUIResource',
+ 'BorderUIResource.MatteBorderUIResource',
+ 'BorderUIResource.TitledBorderUIResource',
+ 'BoundedRangeModel', 'Bounds', 'Box', 'Box.Filler',
+ 'BoxedValueHelper', 'BoxLayout', 'BoxView',
+ 'BreakIterator', 'BufferedImage',
+ 'BufferedImageFilter', 'BufferedImageOp',
+ 'BufferedInputStream', 'BufferedOutputStream',
+ 'BufferedReader', 'BufferedWriter', 'Button',
+ 'ButtonGroup', 'ButtonModel', 'ButtonUI', 'Byte',
+ 'ByteArrayInputStream', 'ByteArrayOutputStream',
+ 'ByteHolder', 'ByteLookupTable', 'Calendar',
+ 'CallableStatement', 'CannotProceed',
+ 'CannotProceedException', 'CannotProceedHelper',
+ 'CannotProceedHolder', 'CannotRedoException',
+ 'CannotUndoException', 'Canvas', 'CardLayout',
+ 'Caret', 'CaretEvent', 'CaretListener', 'CellEditor',
+ 'CellEditorListener', 'CellRendererPane',
+ 'Certificate', 'Certificate.CertificateRep',
+ 'CertificateEncodingException',
+ 'CertificateException',
+ 'CertificateExpiredException', 'CertificateFactory',
+ 'CertificateFactorySpi',
+ 'CertificateNotYetValidException',
+ 'CertificateParsingException',
+ 'ChangedCharSetException', 'ChangeEvent',
+ 'ChangeListener', 'Character', 'Character.Subset',
+ 'Character.UnicodeBlock', 'CharacterIterator',
+ 'CharArrayReader', 'CharArrayWriter',
+ 'CharConversionException', 'CharHolder',
+ 'CharSeqHelper', 'CharSeqHolder', 'Checkbox',
+ 'CheckboxGroup', 'CheckboxMenuItem',
+ 'CheckedInputStream', 'CheckedOutputStream',
+ 'Checksum', 'Choice', 'ChoiceFormat', 'Class',
+ 'ClassCastException', 'ClassCircularityError',
+ 'ClassDesc', 'ClassFormatError', 'ClassLoader',
+ 'ClassNotFoundException', 'Clip', 'Clipboard',
+ 'ClipboardOwner', 'Clob', 'Cloneable',
+ 'CloneNotSupportedException', 'CMMException',
+ 'CodeSource', 'CollationElementIterator',
+ 'CollationKey', 'Collator', 'Collection',
+ 'Collections', 'Color',
+ 'ColorChooserComponentFactory', 'ColorChooserUI',
+ 'ColorConvertOp', 'ColorModel',
+ 'ColorSelectionModel', 'ColorSpace',
+ 'ColorUIResource', 'ComboBoxEditor', 'ComboBoxModel',
+ 'ComboBoxUI', 'ComboPopup', 'CommunicationException',
+ 'COMM_FAILURE', 'Comparable', 'Comparator',
+ 'Compiler', 'CompletionStatus',
+ 'CompletionStatusHelper', 'Component',
+ 'ComponentAdapter', 'ComponentColorModel',
+ 'ComponentEvent', 'ComponentInputMap',
+ 'ComponentInputMapUIResource', 'ComponentListener',
+ 'ComponentOrientation', 'ComponentSampleModel',
+ 'ComponentUI', 'ComponentView', 'Composite',
+ 'CompositeContext', 'CompositeName', 'CompositeView',
+ 'CompoundBorder', 'CompoundControl',
+ 'CompoundControl.Type', 'CompoundEdit',
+ 'CompoundName', 'ConcurrentModificationException',
+ 'ConfigurationException', 'ConnectException',
+ 'ConnectIOException', 'Connection', 'Constructor', 'Container',
+ 'ContainerAdapter', 'ContainerEvent',
+ 'ContainerListener', 'ContentHandler',
+ 'ContentHandlerFactory', 'ContentModel', 'Context',
+ 'ContextList', 'ContextNotEmptyException',
+ 'ContextualRenderedImageFactory', 'Control',
+ 'Control.Type', 'ControlFactory',
+ 'ControllerEventListener', 'ConvolveOp', 'CRC32',
+ 'CRL', 'CRLException', 'CropImageFilter', 'CSS',
+ 'CSS.Attribute', 'CTX_RESTRICT_SCOPE',
+ 'CubicCurve2D', 'CubicCurve2D.Double',
+ 'CubicCurve2D.Float', 'Current', 'CurrentHelper',
+ 'CurrentHolder', 'CurrentOperations', 'Cursor',
+ 'Customizer', 'CustomMarshal', 'CustomValue',
+ 'DatabaseMetaData', 'DataBuffer', 'DataBufferByte',
+ 'DataBufferInt', 'DataBufferShort',
+ 'DataBufferUShort', 'DataFlavor',
+ 'DataFormatException', 'DatagramPacket',
+ 'DatagramSocket', 'DatagramSocketImpl',
+ 'DatagramSocketImplFactory', 'DataInput',
+ 'DataInputStream', 'DataLine', 'DataLine.Info',
+ 'DataOutput', 'DataOutputStream',
+ 'DataTruncation', 'DATA_CONVERSION', 'Date',
+ 'DateFormat', 'DateFormatSymbols', 'DebugGraphics',
+ 'DecimalFormat', 'DecimalFormatSymbols',
+ 'DefaultBoundedRangeModel', 'DefaultButtonModel',
+ 'DefaultCaret', 'DefaultCellEditor',
+ 'DefaultColorSelectionModel', 'DefaultComboBoxModel',
+ 'DefaultDesktopManager', 'DefaultEditorKit',
+ 'DefaultEditorKit.BeepAction',
+ 'DefaultEditorKit.CopyAction',
+ 'DefaultEditorKit.CutAction',
+ 'DefaultEditorKit.DefaultKeyTypedAction',
+ 'DefaultEditorKit.InsertBreakAction',
+ 'DefaultEditorKit.InsertContentAction',
+ 'DefaultEditorKit.InsertTabAction',
+ 'DefaultEditorKit.PasteAction,',
+ 'DefaultFocusManager', 'DefaultHighlighter',
+ 'DefaultHighlighter.DefaultHighlightPainter',
+ 'DefaultListCellRenderer',
+ 'DefaultListCellRenderer.UIResource',
+ 'DefaultListModel', 'DefaultListSelectionModel',
+ 'DefaultMenuLayout', 'DefaultMetalTheme',
+ 'DefaultMutableTreeNode',
+ 'DefaultSingleSelectionModel',
+ 'DefaultStyledDocument',
+ 'DefaultStyledDocument.AttributeUndoableEdit',
+ 'DefaultStyledDocument.ElementSpec',
+ 'DefaultTableCellRenderer',
+ 'DefaultTableCellRenderer.UIResource',
+ 'DefaultTableColumnModel', 'DefaultTableModel',
+ 'DefaultTextUI', 'DefaultTreeCellEditor',
+ 'DefaultTreeCellRenderer', 'DefaultTreeModel',
+ 'DefaultTreeSelectionModel', 'DefinitionKind',
+ 'DefinitionKindHelper', 'Deflater',
+ 'DeflaterOutputStream', 'Delegate', 'DesignMode',
+ 'DesktopIconUI', 'DesktopManager', 'DesktopPaneUI',
+ 'DGC', 'Dialog', 'Dictionary', 'DigestException',
+ 'DigestInputStream', 'DigestOutputStream',
+ 'Dimension', 'Dimension2D', 'DimensionUIResource',
+ 'DirContext', 'DirectColorModel', 'DirectoryManager',
+ 'DirObjectFactory', 'DirStateFactory',
+ 'DirStateFactory.Result', 'DnDConstants', 'Document',
+ 'DocumentEvent', 'DocumentEvent.ElementChange',
+ 'DocumentEvent.EventType', 'DocumentListener',
+ 'DocumentParser', 'DomainCombiner', 'DomainManager',
+ 'DomainManagerOperations', 'Double', 'DoubleHolder',
+ 'DoubleSeqHelper', 'DoubleSeqHolder',
+ 'DragGestureEvent', 'DragGestureListener',
+ 'DragGestureRecognizer', 'DragSource',
+ 'DragSourceContext', 'DragSourceDragEvent',
+ 'DragSourceDropEvent', 'DragSourceEvent',
+ 'DragSourceListener', 'Driver', 'DriverManager',
+ 'DriverPropertyInfo', 'DropTarget',
+ 'DropTarget.DropTargetAutoScroller',
+ 'DropTargetContext', 'DropTargetDragEvent',
+ 'DropTargetDropEvent', 'DropTargetEvent',
+ 'DropTargetListener', 'DSAKey',
+ 'DSAKeyPairGenerator', 'DSAParameterSpec',
+ 'DSAParams', 'DSAPrivateKey', 'DSAPrivateKeySpec',
+ 'DSAPublicKey', 'DSAPublicKeySpec', 'DTD',
+ 'DTDConstants', 'DynamicImplementation', 'DynAny',
+ 'DynArray', 'DynEnum', 'DynFixed', 'DynSequence',
+ 'DynStruct', 'DynUnion', 'DynValue', 'EditorKit',
+ 'Element', 'ElementIterator', 'Ellipse2D',
+ 'Ellipse2D.Double', 'Ellipse2D.Float', 'EmptyBorder',
+ 'EmptyStackException', 'EncodedKeySpec', 'Entity',
+ 'EnumControl', 'EnumControl.Type', 'Enumeration',
+ 'Environment', 'EOFException', 'Error',
+ 'EtchedBorder', 'Event', 'EventContext',
+ 'EventDirContext', 'EventListener',
+ 'EventListenerList', 'EventObject', 'EventQueue',
+ 'EventSetDescriptor', 'Exception',
+ 'ExceptionInInitializerError', 'ExceptionList',
+ 'ExpandVetoException', 'ExportException',
+ 'ExtendedRequest', 'ExtendedResponse',
+ 'Externalizable', 'FeatureDescriptor', 'Field',
+ 'FieldNameHelper', 'FieldPosition', 'FieldView',
+ 'File', 'FileChooserUI', 'FileDescriptor',
+ 'FileDialog', 'FileFilter',
+ 'FileInputStream', 'FilenameFilter', 'FileNameMap',
+ 'FileNotFoundException', 'FileOutputStream',
+ 'FilePermission', 'FileReader', 'FileSystemView',
+ 'FileView', 'FileWriter', 'FilteredImageSource',
+ 'FilterInputStream', 'FilterOutputStream',
+ 'FilterReader', 'FilterWriter',
+ 'FixedHeightLayoutCache', 'FixedHolder',
+ 'FlatteningPathIterator', 'FlavorMap', 'Float',
+ 'FloatControl', 'FloatControl.Type', 'FloatHolder',
+ 'FloatSeqHelper', 'FloatSeqHolder', 'FlowLayout',
+ 'FlowView', 'FlowView.FlowStrategy', 'FocusAdapter',
+ 'FocusEvent', 'FocusListener', 'FocusManager',
+ 'Font', 'FontFormatException', 'FontMetrics',
+ 'FontRenderContext', 'FontUIResource', 'Format',
+ 'FormatConversionProvider', 'FormView', 'Frame',
+ 'FREE_MEM', 'GapContent', 'GeneralPath',
+ 'GeneralSecurityException', 'GlyphJustificationInfo',
+ 'GlyphMetrics', 'GlyphVector', 'GlyphView',
+ 'GlyphView.GlyphPainter', 'GradientPaint',
+ 'GraphicAttribute', 'Graphics', 'Graphics2D',
+ 'GraphicsConfigTemplate', 'GraphicsConfiguration',
+ 'GraphicsDevice', 'GraphicsEnvironment',
+ 'GrayFilter', 'GregorianCalendar',
+ 'GridBagConstraints', 'GridBagLayout', 'GridLayout',
+ 'Group', 'Guard', 'GuardedObject', 'GZIPInputStream',
+ 'GZIPOutputStream', 'HasControls', 'HashMap',
+ 'HashSet', 'Hashtable', 'HierarchyBoundsAdapter',
+ 'HierarchyBoundsListener', 'HierarchyEvent',
+ 'HierarchyListener', 'Highlighter',
+ 'Highlighter.Highlight',
+ 'Highlighter.HighlightPainter', 'HTML',
+ 'HTML.Attribute', 'HTML.Tag', 'HTML.UnknownTag',
+ 'HTMLDocument', 'HTMLDocument.Iterator',
+ 'HTMLEditorKit', 'HTMLEditorKit.HTMLFactory',
+ 'HTMLEditorKit.HTMLTextAction',
+ 'HTMLEditorKit.InsertHTMLTextAction',
+ 'HTMLEditorKit.LinkController',
+ 'HTMLEditorKit.Parser',
+ 'HTMLEditorKit.ParserCallback',
+ 'HTMLFrameHyperlinkEvent', 'HTMLWriter',
+ 'HttpURLConnection', 'HyperlinkEvent',
+ 'HyperlinkEvent.EventType', 'HyperlinkListener',
+ 'ICC_ColorSpace', 'ICC_Profile', 'ICC_ProfileGray',
+ 'ICC_ProfileRGB', 'Icon', 'IconUIResource',
+ 'IconView', 'IdentifierHelper', 'Identity',
+ 'IdentityScope', 'IDLEntity', 'IDLType',
+ 'IDLTypeHelper', 'IDLTypeOperations',
+ 'IllegalAccessError', 'IllegalAccessException',
+ 'IllegalArgumentException',
+ 'IllegalComponentStateException',
+ 'IllegalMonitorStateException',
+ 'IllegalPathStateException', 'IllegalStateException',
+ 'IllegalThreadStateException', 'Image',
+ 'ImageConsumer', 'ImageFilter',
+ 'ImageGraphicAttribute', 'ImageIcon',
+ 'ImageObserver', 'ImageProducer',
+ 'ImagingOpException', 'IMP_LIMIT',
+ 'IncompatibleClassChangeError',
+ 'InconsistentTypeCode', 'IndexColorModel',
+ 'IndexedPropertyDescriptor',
+ 'IndexOutOfBoundsException', 'IndirectionException',
+ 'InetAddress', 'Inflater', 'InflaterInputStream',
+ 'InheritableThreadLocal', 'InitialContext',
+ 'InitialContextFactory',
+ 'InitialContextFactoryBuilder', 'InitialDirContext',
+ 'INITIALIZE', 'Initializer', 'InitialLdapContext',
+ 'InlineView', 'InputContext', 'InputEvent',
+ 'InputMap', 'InputMapUIResource', 'InputMethod',
+ 'InputMethodContext', 'InputMethodDescriptor',
+ 'InputMethodEvent', 'InputMethodHighlight',
+ 'InputMethodListener', 'InputMethodRequests',
+ 'InputStream',
+ 'InputStreamReader', 'InputSubset', 'InputVerifier',
+ 'Insets', 'InsetsUIResource', 'InstantiationError',
+ 'InstantiationException', 'Instrument',
+ 'InsufficientResourcesException', 'Integer',
+ 'INTERNAL', 'InternalError', 'InternalFrameAdapter',
+ 'InternalFrameEvent', 'InternalFrameListener',
+ 'InternalFrameUI', 'InterruptedException',
+ 'InterruptedIOException',
+ 'InterruptedNamingException', 'INTF_REPOS',
+ 'IntHolder', 'IntrospectionException',
+ 'Introspector', 'Invalid',
+ 'InvalidAlgorithmParameterException',
+ 'InvalidAttributeIdentifierException',
+ 'InvalidAttributesException',
+ 'InvalidAttributeValueException',
+ 'InvalidClassException',
+ 'InvalidDnDOperationException',
+ 'InvalidKeyException', 'InvalidKeySpecException',
+ 'InvalidMidiDataException', 'InvalidName',
+ 'InvalidNameException',
+ 'InvalidNameHelper', 'InvalidNameHolder',
+ 'InvalidObjectException',
+ 'InvalidParameterException',
+ 'InvalidParameterSpecException',
+ 'InvalidSearchControlsException',
+ 'InvalidSearchFilterException', 'InvalidSeq',
+ 'InvalidTransactionException', 'InvalidValue',
+ 'INVALID_TRANSACTION', 'InvocationEvent',
+ 'InvocationHandler', 'InvocationTargetException',
+ 'InvokeHandler', 'INV_FLAG', 'INV_IDENT',
+ 'INV_OBJREF', 'INV_POLICY', 'IOException',
+ 'IRObject', 'IRObjectOperations', 'IstringHelper',
+ 'ItemEvent', 'ItemListener', 'ItemSelectable',
+ 'Iterator', 'JApplet', 'JarEntry', 'JarException',
+ 'JarFile', 'JarInputStream', 'JarOutputStream',
+ 'JarURLConnection', 'JButton', 'JCheckBox',
+ 'JCheckBoxMenuItem', 'JColorChooser', 'JComboBox',
+ 'JComboBox.KeySelectionManager', 'JComponent',
+ 'JDesktopPane', 'JDialog', 'JEditorPane',
+ 'JFileChooser', 'JFrame', 'JInternalFrame',
+ 'JInternalFrame.JDesktopIcon', 'JLabel',
+ 'JLayeredPane', 'JList', 'JMenu', 'JMenuBar',
+ 'JMenuItem', 'JobAttributes',
+ 'JobAttributes.DefaultSelectionType',
+ 'JobAttributes.DestinationType',
+ 'JobAttributes.DialogType',
+ 'JobAttributes.MultipleDocumentHandlingType',
+ 'JobAttributes.SidesType', 'JOptionPane', 'JPanel',
+ 'JPasswordField', 'JPopupMenu',
+ 'JPopupMenu.Separator', 'JProgressBar',
+ 'JRadioButton', 'JRadioButtonMenuItem', 'JRootPane',
+ 'JScrollBar', 'JScrollPane', 'JSeparator', 'JSlider',
+ 'JSplitPane', 'JTabbedPane', 'JTable',
+ 'JTableHeader', 'JTextArea', 'JTextComponent',
+ 'JTextComponent.KeyBinding', 'JTextField',
+ 'JTextPane', 'JToggleButton',
+ 'JToggleButton.ToggleButtonModel', 'JToolBar',
+ 'JToolBar.Separator', 'JToolTip', 'JTree',
+ 'JTree.DynamicUtilTreeNode',
+ 'JTree.EmptySelectionModel', 'JViewport', 'JWindow',
+ 'Kernel', 'Key', 'KeyAdapter', 'KeyEvent',
+ 'KeyException', 'KeyFactory', 'KeyFactorySpi',
+ 'KeyListener', 'KeyManagementException', 'Keymap',
+ 'KeyPair', 'KeyPairGenerator', 'KeyPairGeneratorSpi',
+ 'KeySpec', 'KeyStore', 'KeyStoreException',
+ 'KeyStoreSpi', 'KeyStroke', 'Label', 'LabelUI',
+ 'LabelView', 'LastOwnerException',
+ 'LayeredHighlighter',
+ 'LayeredHighlighter.LayerPainter', 'LayoutManager',
+ 'LayoutManager2', 'LayoutQueue', 'LdapContext',
+ 'LdapReferralException', 'Lease',
+ 'LimitExceededException', 'Line', 'Line.Info',
+ 'Line2D', 'Line2D.Double', 'Line2D.Float',
+ 'LineBorder', 'LineBreakMeasurer', 'LineEvent',
+ 'LineEvent.Type', 'LineListener', 'LineMetrics',
+ 'LineNumberInputStream', 'LineNumberReader',
+ 'LineUnavailableException', 'LinkageError',
+ 'LinkedList', 'LinkException', 'LinkLoopException',
+ 'LinkRef', 'List', 'ListCellRenderer',
+ 'ListDataEvent', 'ListDataListener', 'ListIterator',
+ 'ListModel', 'ListResourceBundle',
+ 'ListSelectionEvent', 'ListSelectionListener',
+ 'ListSelectionModel', 'ListUI', 'ListView',
+ 'LoaderHandler', 'Locale', 'LocateRegistry',
+ 'LogStream', 'Long', 'LongHolder',
+ 'LongLongSeqHelper', 'LongLongSeqHolder',
+ 'LongSeqHelper', 'LongSeqHolder', 'LookAndFeel',
+ 'LookupOp', 'LookupTable', 'MalformedLinkException',
+ 'MalformedURLException', 'Manifest', 'Map',
+ 'Map.Entry', 'MARSHAL', 'MarshalException',
+ 'MarshalledObject', 'Math', 'MatteBorder',
+ 'MediaTracker', 'Member', 'MemoryImageSource',
+ 'Menu', 'MenuBar', 'MenuBarUI', 'MenuComponent',
+ 'MenuContainer', 'MenuDragMouseEvent',
+ 'MenuDragMouseListener', 'MenuElement', 'MenuEvent',
+ 'MenuItem', 'MenuItemUI', 'MenuKeyEvent',
+ 'MenuKeyListener', 'MenuListener',
+ 'MenuSelectionManager', 'MenuShortcut',
+ 'MessageDigest', 'MessageDigestSpi', 'MessageFormat',
+ 'MetaEventListener', 'MetalBorders',
+ 'MetalBorders.ButtonBorder',
+ 'MetalBorders.Flush3DBorder',
+ 'MetalBorders.InternalFrameBorder',
+ 'MetalBorders.MenuBarBorder',
+ 'MetalBorders.MenuItemBorder',
+ 'MetalBorders.OptionDialogBorder',
+ 'MetalBorders.PaletteBorder',
+ 'MetalBorders.PopupMenuBorder',
+ 'MetalBorders.RolloverButtonBorder',
+ 'MetalBorders.ScrollPaneBorder',
+ 'MetalBorders.TableHeaderBorder',
+ 'MetalBorders.TextFieldBorder',
+ 'MetalBorders.ToggleButtonBorder',
+ 'MetalBorders.ToolBarBorder', 'MetalButtonUI',
+ 'MetalCheckBoxIcon', 'MetalCheckBoxUI',
+ 'MetalComboBoxButton', 'MetalComboBoxEditor',
+ 'MetalComboBoxEditor.UIResource',
+ 'MetalComboBoxIcon', 'MetalComboBoxUI',
+ 'MetalDesktopIconUI', 'MetalFileChooserUI',
+ 'MetalIconFactory', 'MetalIconFactory.FileIcon16',
+ 'MetalIconFactory.FolderIcon16',
+ 'MetalIconFactory.PaletteCloseIcon',
+ 'MetalIconFactory.TreeControlIcon',
+ 'MetalIconFactory.TreeFolderIcon',
+ 'MetalIconFactory.TreeLeafIcon',
+ 'MetalInternalFrameTitlePane',
+ 'MetalInternalFrameUI', 'MetalLabelUI',
+ 'MetalLookAndFeel', 'MetalPopupMenuSeparatorUI',
+ 'MetalProgressBarUI', 'MetalRadioButtonUI',
+ 'MetalScrollBarUI', 'MetalScrollButton',
+ 'MetalScrollPaneUI', 'MetalSeparatorUI',
+ 'MetalSliderUI', 'MetalSplitPaneUI',
+ 'MetalTabbedPaneUI', 'MetalTextFieldUI',
+ 'MetalTheme', 'MetalToggleButtonUI',
+ 'MetalToolBarUI', 'MetalToolTipUI', 'MetalTreeUI',
+ 'MetaMessage', 'Method', 'MethodDescriptor',
+ 'MidiChannel', 'MidiDevice', 'MidiDevice.Info',
+ 'MidiDeviceProvider', 'MidiEvent', 'MidiFileFormat',
+ 'MidiFileReader', 'MidiFileWriter', 'MidiMessage',
+ 'MidiSystem', 'MidiUnavailableException',
+ 'MimeTypeParseException', 'MinimalHTMLWriter',
+ 'MissingResourceException', 'Mixer', 'Mixer.Info',
+ 'MixerProvider', 'ModificationItem', 'Modifier',
+ 'MouseAdapter', 'MouseDragGestureRecognizer',
+ 'MouseEvent', 'MouseInputAdapter',
+ 'MouseInputListener', 'MouseListener',
+ 'MouseMotionAdapter', 'MouseMotionListener',
+ 'MultiButtonUI', 'MulticastSocket',
+ 'MultiColorChooserUI', 'MultiComboBoxUI',
+ 'MultiDesktopIconUI', 'MultiDesktopPaneUI',
+ 'MultiFileChooserUI', 'MultiInternalFrameUI',
+ 'MultiLabelUI', 'MultiListUI', 'MultiLookAndFeel',
+ 'MultiMenuBarUI', 'MultiMenuItemUI',
+ 'MultiOptionPaneUI', 'MultiPanelUI',
+ 'MultiPixelPackedSampleModel', 'MultipleMaster',
+ 'MultiPopupMenuUI', 'MultiProgressBarUI',
+ 'MultiScrollBarUI', 'MultiScrollPaneUI',
+ 'MultiSeparatorUI', 'MultiSliderUI',
+ 'MultiSplitPaneUI', 'MultiTabbedPaneUI',
+ 'MultiTableHeaderUI', 'MultiTableUI', 'MultiTextUI',
+ 'MultiToolBarUI', 'MultiToolTipUI', 'MultiTreeUI',
+ 'MultiViewportUI', 'MutableAttributeSet',
+ 'MutableComboBoxModel', 'MutableTreeNode', 'Name',
+ 'NameAlreadyBoundException', 'NameClassPair',
+ 'NameComponent', 'NameComponentHelper',
+ 'NameComponentHolder', 'NamedValue', 'NameHelper',
+ 'NameHolder', 'NameNotFoundException', 'NameParser',
+ 'NamespaceChangeListener', 'NameValuePair',
+ 'NameValuePairHelper', 'Naming', 'NamingContext',
+ 'NamingContextHelper', 'NamingContextHolder',
+ 'NamingContextOperations', 'NamingEnumeration',
+ 'NamingEvent', 'NamingException',
+ 'NamingExceptionEvent', 'NamingListener',
+ 'NamingManager', 'NamingSecurityException',
+ 'NegativeArraySizeException', 'NetPermission',
+ 'NoClassDefFoundError', 'NoInitialContextException',
+ 'NoninvertibleTransformException',
+ 'NoPermissionException', 'NoRouteToHostException',
+ 'NoSuchAlgorithmException',
+ 'NoSuchAttributeException', 'NoSuchElementException',
+ 'NoSuchFieldError', 'NoSuchFieldException',
+ 'NoSuchMethodError', 'NoSuchMethodException',
+ 'NoSuchObjectException', 'NoSuchProviderException',
+ 'NotActiveException', 'NotBoundException',
+ 'NotContextException', 'NotEmpty', 'NotEmptyHelper',
+ 'NotEmptyHolder', 'NotFound', 'NotFoundHelper',
+ 'NotFoundHolder', 'NotFoundReason',
+ 'NotFoundReasonHelper', 'NotFoundReasonHolder',
+ 'NotOwnerException', 'NotSerializableException',
+ 'NO_IMPLEMENT', 'NO_MEMORY', 'NO_PERMISSION',
+ 'NO_RESOURCES', 'NO_RESPONSE',
+ 'NullPointerException', 'Number', 'NumberFormat',
+ 'NumberFormatException', 'NVList', 'Object',
+ 'ObjectChangeListener', 'ObjectFactory',
+ 'ObjectFactoryBuilder', 'ObjectHelper',
+ 'ObjectHolder', 'ObjectImpl',
+ 'ObjectInput', 'ObjectInputStream',
+ 'ObjectInputStream.GetField',
+ 'ObjectInputValidation', 'ObjectOutput',
+ 'ObjectOutputStream', 'ObjectOutputStream.PutField',
+ 'ObjectStreamClass', 'ObjectStreamConstants',
+ 'ObjectStreamException', 'ObjectStreamField',
+ 'ObjectView', 'OBJECT_NOT_EXIST', 'ObjID',
+ 'OBJ_ADAPTER', 'Observable', 'Observer',
+ 'OctetSeqHelper', 'OctetSeqHolder', 'OMGVMCID',
+ 'OpenType', 'Operation',
+ 'OperationNotSupportedException', 'Option',
+ 'OptionalDataException', 'OptionPaneUI', 'ORB',
+ 'OutOfMemoryError', 'OutputStream',
+ 'OutputStreamWriter', 'OverlayLayout', 'Owner',
+ 'Package', 'PackedColorModel', 'Pageable',
+ 'PageAttributes', 'PageAttributes.ColorType',
+ 'PageAttributes.MediaType',
+ 'PageAttributes.OrientationRequestedType',
+ 'PageAttributes.OriginType',
+ 'PageAttributes.PrintQualityType', 'PageFormat',
+ 'Paint', 'PaintContext', 'PaintEvent', 'Panel',
+ 'PanelUI', 'Paper', 'ParagraphView',
+ 'ParameterBlock', 'ParameterDescriptor',
+ 'ParseException', 'ParsePosition', 'Parser',
+ 'ParserDelegator', 'PartialResultException',
+ 'PasswordAuthentication', 'PasswordView', 'Patch',
+ 'PathIterator', 'Permission',
+ 'PermissionCollection', 'Permissions',
+ 'PERSIST_STORE', 'PhantomReference',
+ 'PipedInputStream', 'PipedOutputStream',
+ 'PipedReader', 'PipedWriter', 'PixelGrabber',
+ 'PixelInterleavedSampleModel', 'PKCS8EncodedKeySpec',
+ 'PlainDocument', 'PlainView', 'Point', 'Point2D',
+ 'Point2D.Double', 'Point2D.Float', 'Policy',
+ 'PolicyError', 'PolicyHelper',
+ 'PolicyHolder', 'PolicyListHelper',
+ 'PolicyListHolder', 'PolicyOperations',
+ 'PolicyTypeHelper', 'Polygon', 'PopupMenu',
+ 'PopupMenuEvent', 'PopupMenuListener', 'PopupMenuUI',
+ 'Port', 'Port.Info', 'PortableRemoteObject',
+ 'PortableRemoteObjectDelegate', 'Position',
+ 'Position.Bias', 'PreparedStatement', 'Principal',
+ 'PrincipalHolder', 'Printable',
+ 'PrinterAbortException', 'PrinterException',
+ 'PrinterGraphics', 'PrinterIOException',
+ 'PrinterJob', 'PrintGraphics', 'PrintJob',
+ 'PrintStream', 'PrintWriter', 'PrivateKey',
+ 'PRIVATE_MEMBER', 'PrivilegedAction',
+ 'PrivilegedActionException',
+ 'PrivilegedExceptionAction', 'Process',
+ 'ProfileDataException', 'ProgressBarUI',
+ 'ProgressMonitor', 'ProgressMonitorInputStream',
+ 'Properties', 'PropertyChangeEvent',
+ 'PropertyChangeListener', 'PropertyChangeSupport',
+ 'PropertyDescriptor', 'PropertyEditor',
+ 'PropertyEditorManager', 'PropertyEditorSupport',
+ 'PropertyPermission', 'PropertyResourceBundle',
+ 'PropertyVetoException', 'ProtectionDomain',
+ 'ProtocolException', 'Provider', 'ProviderException',
+ 'Proxy', 'PublicKey', 'PUBLIC_MEMBER',
+ 'PushbackInputStream', 'PushbackReader',
+ 'QuadCurve2D', 'QuadCurve2D.Double',
+ 'QuadCurve2D.Float', 'Random', 'RandomAccessFile',
+ 'Raster', 'RasterFormatException', 'RasterOp',
+ 'Reader', 'Receiver', 'Rectangle', 'Rectangle2D',
+ 'Rectangle2D.Double', 'Rectangle2D.Float',
+ 'RectangularShape', 'Ref', 'RefAddr', 'Reference',
+ 'Referenceable', 'ReferenceQueue',
+ 'ReferralException', 'ReflectPermission', 'Registry',
+ 'RegistryHandler', 'RemarshalException', 'Remote',
+ 'RemoteCall', 'RemoteException', 'RemoteObject',
+ 'RemoteRef', 'RemoteServer', 'RemoteStub',
+ 'RenderableImage', 'RenderableImageOp',
+ 'RenderableImageProducer', 'RenderContext',
+ 'RenderedImage', 'RenderedImageFactory', 'Renderer',
+ 'RenderingHints', 'RenderingHints.Key',
+ 'RepaintManager', 'ReplicateScaleFilter',
+ 'Repository', 'RepositoryIdHelper', 'Request',
+ 'RescaleOp', 'Resolver', 'ResolveResult',
+ 'ResourceBundle', 'ResponseHandler', 'ResultSet',
+ 'ResultSetMetaData', 'ReverbType', 'RGBImageFilter',
+ 'RMIClassLoader', 'RMIClientSocketFactory',
+ 'RMIFailureHandler', 'RMISecurityException',
+ 'RMISecurityManager', 'RMIServerSocketFactory',
+ 'RMISocketFactory', 'Robot', 'RootPaneContainer',
+ 'RootPaneUI', 'RoundRectangle2D',
+ 'RoundRectangle2D.Double', 'RoundRectangle2D.Float',
+ 'RowMapper', 'RSAKey', 'RSAKeyGenParameterSpec',
+ 'RSAPrivateCrtKey', 'RSAPrivateCrtKeySpec',
+ 'RSAPrivateKey', 'RSAPrivateKeySpec', 'RSAPublicKey',
+ 'RSAPublicKeySpec', 'RTFEditorKit',
+ 'RuleBasedCollator', 'Runnable', 'RunTime',
+ 'Runtime', 'RuntimeException', 'RunTimeOperations',
+ 'RuntimePermission', 'SampleModel',
+ 'SchemaViolationException', 'Scrollable',
+ 'Scrollbar', 'ScrollBarUI', 'ScrollPane',
+ 'ScrollPaneConstants', 'ScrollPaneLayout',
+ 'ScrollPaneLayout.UIResource', 'ScrollPaneUI',
+ 'SearchControls', 'SearchResult',
+ 'SecureClassLoader', 'SecureRandom',
+ 'SecureRandomSpi', 'Security', 'SecurityException',
+ 'SecurityManager', 'SecurityPermission', 'Segment',
+ 'SeparatorUI', 'Sequence', 'SequenceInputStream',
+ 'Sequencer', 'Sequencer.SyncMode', 'Serializable',
+ 'SerializablePermission', 'ServantObject',
+ 'ServerCloneException', 'ServerError',
+ 'ServerException', 'ServerNotActiveException',
+ 'ServerRef', 'ServerRequest',
+ 'ServerRuntimeException', 'ServerSocket',
+ 'ServiceDetail', 'ServiceDetailHelper',
+ 'ServiceInformation', 'ServiceInformationHelper',
+ 'ServiceInformationHolder',
+ 'ServiceUnavailableException', 'Set',
+ 'SetOverrideType', 'SetOverrideTypeHelper', 'Shape',
+ 'ShapeGraphicAttribute', 'Short', 'ShortHolder',
+ 'ShortLookupTable', 'ShortMessage', 'ShortSeqHelper',
+ 'ShortSeqHolder', 'Signature', 'SignatureException',
+ 'SignatureSpi', 'SignedObject', 'Signer',
+ 'SimpleAttributeSet', 'SimpleBeanInfo',
+ 'SimpleDateFormat', 'SimpleTimeZone',
+ 'SinglePixelPackedSampleModel',
+ 'SingleSelectionModel', 'SizeLimitExceededException',
+ 'SizeRequirements', 'SizeSequence', 'Skeleton',
+ 'SkeletonMismatchException',
+ 'SkeletonNotFoundException', 'SliderUI', 'Socket',
+ 'SocketException', 'SocketImpl', 'SocketImplFactory',
+ 'SocketOptions', 'SocketPermission',
+ 'SocketSecurityException', 'SoftBevelBorder',
+ 'SoftReference', 'SortedMap', 'SortedSet',
+ 'Soundbank', 'SoundbankReader', 'SoundbankResource',
+ 'SourceDataLine', 'SplitPaneUI', 'SQLData',
+ 'SQLException', 'SQLInput', 'SQLOutput',
+ 'SQLPermission', 'SQLWarning', 'Stack',
+ 'StackOverflowError', 'StateEdit', 'StateEditable',
+ 'StateFactory', 'Statement', 'Streamable',
+ 'StreamableValue', 'StreamCorruptedException',
+ 'StreamTokenizer', 'StrictMath', 'String',
+ 'StringBuffer', 'StringBufferInputStream',
+ 'StringCharacterIterator', 'StringContent',
+ 'StringHolder', 'StringIndexOutOfBoundsException',
+ 'StringReader', 'StringRefAddr', 'StringSelection',
+ 'StringTokenizer', 'StringValueHelper',
+ 'StringWriter', 'Stroke', 'Struct', 'StructMember',
+ 'StructMemberHelper', 'Stub', 'StubDelegate',
+ 'StubNotFoundException', 'Style', 'StyleConstants',
+ 'StyleConstants.CharacterConstants',
+ 'StyleConstants.ColorConstants',
+ 'StyleConstants.FontConstants',
+ 'StyleConstants.ParagraphConstants', 'StyleContext',
+ 'StyledDocument', 'StyledEditorKit',
+ 'StyledEditorKit.AlignmentAction',
+ 'StyledEditorKit.BoldAction',
+ 'StyledEditorKit.FontFamilyAction',
+ 'StyledEditorKit.FontSizeAction',
+ 'StyledEditorKit.ForegroundAction',
+ 'StyledEditorKit.ItalicAction',
+ 'StyledEditorKit.StyledTextAction',
+ 'StyledEditorKit.UnderlineAction', 'StyleSheet',
+ 'StyleSheet.BoxPainter', 'StyleSheet.ListPainter',
+ 'SwingConstants', 'SwingPropertyChangeSupport',
+ 'SwingUtilities', 'SyncFailedException',
+ 'Synthesizer', 'SysexMessage', 'System',
+ 'SystemColor', 'SystemException', 'SystemFlavorMap',
+ 'TabableView', 'TabbedPaneUI', 'TabExpander',
+ 'TableCellEditor', 'TableCellRenderer',
+ 'TableColumn', 'TableColumnModel',
+ 'TableColumnModelEvent', 'TableColumnModelListener',
+ 'TableHeaderUI', 'TableModel', 'TableModelEvent',
+ 'TableModelListener', 'TableUI', 'TableView',
+ 'TabSet', 'TabStop', 'TagElement', 'TargetDataLine',
+ 'TCKind', 'TextAction', 'TextArea', 'TextAttribute',
+ 'TextComponent', 'TextEvent', 'TextField',
+ 'TextHitInfo', 'TextLayout',
+ 'TextLayout.CaretPolicy', 'TextListener',
+ 'TextMeasurer', 'TextUI', 'TexturePaint', 'Thread',
+ 'ThreadDeath', 'ThreadGroup', 'ThreadLocal',
+ 'Throwable', 'Tie', 'TileObserver', 'Time',
+ 'TimeLimitExceededException', 'Timer',
+ 'TimerTask', 'Timestamp', 'TimeZone', 'TitledBorder',
+ 'ToolBarUI', 'Toolkit', 'ToolTipManager',
+ 'ToolTipUI', 'TooManyListenersException', 'Track',
+ 'TransactionRequiredException',
+ 'TransactionRolledbackException',
+ 'TRANSACTION_REQUIRED', 'TRANSACTION_ROLLEDBACK',
+ 'Transferable', 'TransformAttribute', 'TRANSIENT',
+ 'Transmitter', 'Transparency', 'TreeCellEditor',
+ 'TreeCellRenderer', 'TreeExpansionEvent',
+ 'TreeExpansionListener', 'TreeMap', 'TreeModel',
+ 'TreeModelEvent', 'TreeModelListener', 'TreeNode',
+ 'TreePath', 'TreeSelectionEvent',
+ 'TreeSelectionListener', 'TreeSelectionModel',
+ 'TreeSet', 'TreeUI', 'TreeWillExpandListener',
+ 'TypeCode', 'TypeCodeHolder', 'TypeMismatch',
+ 'Types', 'UID', 'UIDefaults',
+ 'UIDefaults.ActiveValue', 'UIDefaults.LazyInputMap',
+ 'UIDefaults.LazyValue', 'UIDefaults.ProxyLazyValue',
+ 'UIManager', 'UIManager.LookAndFeelInfo',
+ 'UIResource', 'ULongLongSeqHelper',
+ 'ULongLongSeqHolder', 'ULongSeqHelper',
+ 'ULongSeqHolder', 'UndeclaredThrowableException',
+ 'UndoableEdit', 'UndoableEditEvent',
+ 'UndoableEditListener', 'UndoableEditSupport',
+ 'UndoManager', 'UnexpectedException',
+ 'UnicastRemoteObject', 'UnionMember',
+ 'UnionMemberHelper', 'UNKNOWN', 'UnknownError',
+ 'UnknownException', 'UnknownGroupException',
+ 'UnknownHostException',
+ 'UnknownObjectException', 'UnknownServiceException',
+ 'UnknownUserException', 'UnmarshalException',
+ 'UnrecoverableKeyException', 'Unreferenced',
+ 'UnresolvedPermission', 'UnsatisfiedLinkError',
+ 'UnsolicitedNotification',
+ 'UnsolicitedNotificationEvent',
+ 'UnsolicitedNotificationListener',
+ 'UnsupportedAudioFileException',
+ 'UnsupportedClassVersionError',
+ 'UnsupportedEncodingException',
+ 'UnsupportedFlavorException',
+ 'UnsupportedLookAndFeelException',
+ 'UnsupportedOperationException',
+ 'UNSUPPORTED_POLICY', 'UNSUPPORTED_POLICY_VALUE',
+ 'URL', 'URLClassLoader', 'URLConnection',
+ 'URLDecoder', 'URLEncoder', 'URLStreamHandler',
+ 'URLStreamHandlerFactory', 'UserException',
+ 'UShortSeqHelper', 'UShortSeqHolder',
+ 'UTFDataFormatException', 'Util', 'UtilDelegate',
+ 'Utilities', 'ValueBase', 'ValueBaseHelper',
+ 'ValueBaseHolder', 'ValueFactory', 'ValueHandler',
+ 'ValueMember', 'ValueMemberHelper',
+ 'VariableHeightLayoutCache', 'Vector', 'VerifyError',
+ 'VersionSpecHelper', 'VetoableChangeListener',
+ 'VetoableChangeSupport', 'View', 'ViewFactory',
+ 'ViewportLayout', 'ViewportUI',
+ 'VirtualMachineError', 'Visibility',
+ 'VisibilityHelper', 'VMID', 'VM_ABSTRACT',
+ 'VM_CUSTOM', 'VM_NONE', 'VM_TRUNCATABLE',
+ 'VoiceStatus', 'Void', 'WCharSeqHelper',
+ 'WCharSeqHolder', 'WeakHashMap', 'WeakReference',
+ 'Window', 'WindowAdapter', 'WindowConstants',
+ 'WindowEvent', 'WindowListener', 'WrappedPlainView',
+ 'WritableRaster', 'WritableRenderedImage',
+ 'WriteAbortedException', 'Writer',
+ 'WrongTransaction', 'WStringValueHelper',
+ 'X509Certificate', 'X509CRL', 'X509CRLEntry',
+ 'X509EncodedKeySpec', 'X509Extension', 'ZipEntry',
+ 'ZipException', 'ZipFile', 'ZipInputStream',
+ 'ZipOutputStream', 'ZoneView',
+ '_BindingIteratorImplBase', '_BindingIteratorStub',
+ '_IDLTypeStub', '_NamingContextImplBase',
+ '_NamingContextStub', '_PolicyStub', '_Remote_Stub'
+ ),
+ 4 => array(
+ 'void', 'double', 'int', 'boolean', 'byte', 'short', 'long', 'char', 'float'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '[', ']', '{', '}',
+ '+', '-', '*', '/', '%',
+ '!', '&', '|', '^',
+ '<', '>', '=',
+ '?', ':', ';',
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => true,
+ 4 => true
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #000000; font-weight: bold;',
+ 2 => 'color: #000066; font-weight: bold;',
+ 3 => 'color: #003399;',
+ 4 => 'color: #000066; font-weight: bold;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #666666; font-style: italic;',
+ 2 => 'color: #006699;',
+ 3 => 'color: #008000; font-style: italic; font-weight: bold;',
+ 3 => 'color: #008000; font-style: italic; font-weight: bold;',
+ 'MULTI' => 'color: #666666; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #009900;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #0000ff;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #006633;',
+ 2 => 'color: #006633;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #339933;'
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => 'http://www.google.com/search?hl=en&amp;q=allinurl%3A{FNAMEL}+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky',
+ 4 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/java5.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/java5.php
new file mode 100644
index 000000000..34696d760
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/java5.php
@@ -0,0 +1,1031 @@
+<?php
+/*************************************************************************************
+ * java.php
+ * --------
+ * Author: Nigel McNie (nigel@geshi.org)
+ * Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/07/10
+ *
+ * Java language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/25 (1.0.7.22)
+ * - Added highlighting of import and package directives as non-OOP
+ * 2005/12/28 (1.0.4)
+ * - Added instanceof keyword
+ * 2004/11/27 (1.0.3)
+ * - Added support for multiple object splitters
+ * 2004/08/05 (1.0.2)
+ * - Added URL support
+ * - Added keyword "this", as bugs in GeSHi class ironed out
+ * 2004/08/05 (1.0.1)
+ * - Added support for symbols
+ * - Added extra missed keywords
+ * 2004/07/14 (1.0.0)
+ * - First Release
+ *
+ * TODO
+ * -------------------------
+ * *
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Java(TM) 2 Platform Standard Edition 5.0',
+ 'COMMENT_SINGLE' => array(1 => '//'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'COMMENT_REGEXP' => array(
+ //Import and Package directives (Basic Support only)
+ 2 => '/(?:(?<=import[\\n\\s])|(?<=package[\\n\\s]))[\\n\\s]*([a-zA-Z0-9_]+\\.)*([a-zA-Z0-9_]+|\*)(?=[\n\s;])/i',
+ // javadoc comments
+ 3 => '#/\*\*(?![\*\/]).*\*/#sU'
+ ),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ /* see the authoritative list of all 50 Java keywords at */
+ /* http://java.sun.com/docs/books/jls/third_edition/html/lexical.html#229308 */
+
+ /* java keywords, part 1: control flow */
+ 'case', 'default', 'do', 'else', 'for',
+ 'goto', 'if', 'switch', 'while'
+
+ /* IMO 'break', 'continue', 'return' and 'throw' */
+ /* should also be added to this group, as they */
+ /* also manage the control flow, */
+ /* arguably 'try'/'catch'/'finally' as well */
+ ),
+ 2 => array(
+ /* java keywords, part 2 */
+
+ 'break', 'continue', 'return', 'throw',
+ 'try', 'catch', 'finally',
+
+ 'abstract', 'assert', 'class', 'const', 'enum', 'extends',
+ 'final', 'implements', 'import', 'instanceof', 'interface',
+ 'native', 'new', 'package', 'private', 'protected',
+ 'public', 'static', 'strictfp', 'super', 'synchronized',
+ 'this', 'throws', 'transient', 'volatile'
+ ),
+ 3 => array(
+ /* Java keywords, part 3: primitive data types and 'void' */
+ 'boolean', 'byte', 'char', 'double',
+ 'float', 'int', 'long', 'short', 'void'
+ ),
+ 4 => array(
+ /* other reserved words in Java: literals */
+ /* should be styled to look similar to numbers and Strings */
+ 'false', 'null', 'true'
+ ),
+ 5 => array (
+ 'Applet', 'AppletContext', 'AppletStub', 'AudioClip'
+ ),
+ 6 => array (
+ 'AWTError', 'AWTEvent', 'AWTEventMulticaster', 'AWTException', 'AWTKeyStroke', 'AWTPermission', 'ActiveEvent', 'Adjustable', 'AlphaComposite', 'BasicStroke', 'BorderLayout', 'BufferCapabilities', 'BufferCapabilities.FlipContents', 'Button', 'Canvas', 'CardLayout', 'Checkbox', 'CheckboxGroup', 'CheckboxMenuItem', 'Choice', 'Color', 'Component', 'ComponentOrientation', 'Composite', 'CompositeContext', 'Container', 'ContainerOrderFocusTraversalPolicy', 'Cursor', 'DefaultFocusTraversalPolicy', 'DefaultKeyboardFocusManager', 'Dialog', 'Dimension', 'DisplayMode', 'EventQueue', 'FileDialog', 'FlowLayout', 'FocusTraversalPolicy', 'Font', 'FontFormatException', 'FontMetrics', 'Frame', 'GradientPaint', 'Graphics', 'Graphics2D', 'GraphicsConfigTemplate', 'GraphicsConfiguration', 'GraphicsDevice', 'GraphicsEnvironment', 'GridBagConstraints', 'GridBagLayout', 'GridLayout', 'HeadlessException', 'IllegalComponentStateException', 'Image', 'ImageCapabilities', 'Insets', 'ItemSelectable', 'JobAttributes',
+ 'JobAttributes.DefaultSelectionType', 'JobAttributes.DestinationType', 'JobAttributes.DialogType', 'JobAttributes.MultipleDocumentHandlingType', 'JobAttributes.SidesType', 'KeyEventDispatcher', 'KeyEventPostProcessor', 'KeyboardFocusManager', 'Label', 'LayoutManager', 'LayoutManager2', 'MediaTracker', 'Menu', 'MenuBar', 'MenuComponent', 'MenuContainer', 'MenuItem', 'MenuShortcut', 'MouseInfo', 'PageAttributes', 'PageAttributes.ColorType', 'PageAttributes.MediaType', 'PageAttributes.OrientationRequestedType', 'PageAttributes.OriginType', 'PageAttributes.PrintQualityType', 'Paint', 'PaintContext', 'Panel', 'Point', 'PointerInfo', 'Polygon', 'PopupMenu', 'PrintGraphics', 'PrintJob', 'Rectangle', 'RenderingHints', 'RenderingHints.Key', 'Robot', 'ScrollPane', 'ScrollPaneAdjustable', 'Scrollbar', 'Shape', 'Stroke', 'SystemColor', 'TextArea', 'TextComponent', 'TextField', 'TexturePaint', 'Toolkit', 'Transparency', 'Window'
+ ),
+ 7 => array (
+ 'CMMException', 'ColorSpace', 'ICC_ColorSpace', 'ICC_Profile', 'ICC_ProfileGray', 'ICC_ProfileRGB', 'ProfileDataException'
+ ),
+ 8 => array (
+ 'Clipboard', 'ClipboardOwner', 'DataFlavor', 'FlavorEvent', 'FlavorListener', 'FlavorMap', 'FlavorTable', 'MimeTypeParseException', 'StringSelection', 'SystemFlavorMap', 'Transferable', 'UnsupportedFlavorException'
+ ),
+ 9 => array (
+ 'Autoscroll', 'DnDConstants', 'DragGestureEvent', 'DragGestureListener', 'DragGestureRecognizer', 'DragSource', 'DragSourceAdapter', 'DragSourceContext', 'DragSourceDragEvent', 'DragSourceDropEvent', 'DragSourceEvent', 'DragSourceListener', 'DragSourceMotionListener', 'DropTarget', 'DropTarget.DropTargetAutoScroller', 'DropTargetAdapter', 'DropTargetContext', 'DropTargetDragEvent', 'DropTargetDropEvent', 'DropTargetEvent', 'DropTargetListener', 'InvalidDnDOperationException', 'MouseDragGestureRecognizer'
+ ),
+ 10 => array (
+ 'AWTEventListener', 'AWTEventListenerProxy', 'ActionEvent', 'ActionListener', 'AdjustmentEvent', 'AdjustmentListener', 'ComponentAdapter', 'ComponentEvent', 'ComponentListener', 'ContainerAdapter', 'ContainerEvent', 'ContainerListener', 'FocusAdapter', 'FocusEvent', 'FocusListener', 'HierarchyBoundsAdapter', 'HierarchyBoundsListener', 'HierarchyEvent', 'HierarchyListener', 'InputEvent', 'InputMethodEvent', 'InputMethodListener', 'InvocationEvent', 'ItemEvent', 'ItemListener', 'KeyAdapter', 'KeyEvent', 'KeyListener', 'MouseAdapter', 'MouseListener', 'MouseMotionAdapter', 'MouseMotionListener', 'MouseWheelEvent', 'MouseWheelListener', 'PaintEvent', 'TextEvent', 'TextListener', 'WindowAdapter', 'WindowEvent', 'WindowFocusListener', 'WindowListener', 'WindowStateListener'
+ ),
+ 11 => array (
+ 'FontRenderContext', 'GlyphJustificationInfo', 'GlyphMetrics', 'GlyphVector', 'GraphicAttribute', 'ImageGraphicAttribute', 'LineBreakMeasurer', 'LineMetrics', 'MultipleMaster', 'NumericShaper', 'ShapeGraphicAttribute', 'TextAttribute', 'TextHitInfo', 'TextLayout', 'TextLayout.CaretPolicy', 'TextMeasurer', 'TransformAttribute'
+ ),
+ 12 => array (
+ 'AffineTransform', 'Arc2D', 'Arc2D.Double', 'Arc2D.Float', 'Area', 'CubicCurve2D', 'CubicCurve2D.Double', 'CubicCurve2D.Float', 'Dimension2D', 'Ellipse2D', 'Ellipse2D.Double', 'Ellipse2D.Float', 'FlatteningPathIterator', 'GeneralPath', 'IllegalPathStateException', 'Line2D', 'Line2D.Double', 'Line2D.Float', 'NoninvertibleTransformException', 'PathIterator', 'Point2D', 'Point2D.Double', 'Point2D.Float', 'QuadCurve2D', 'QuadCurve2D.Double', 'QuadCurve2D.Float', 'Rectangle2D', 'Rectangle2D.Double', 'Rectangle2D.Float', 'RectangularShape', 'RoundRectangle2D', 'RoundRectangle2D.Double', 'RoundRectangle2D.Float'
+ ),
+ 13 => array (
+ 'InputContext', 'InputMethodHighlight', 'InputMethodRequests', 'InputSubset'
+ ),
+ 14 => array (
+ 'InputMethod', 'InputMethodContext', 'InputMethodDescriptor'
+ ),
+ 15 => array (
+ 'AffineTransformOp', 'AreaAveragingScaleFilter', 'BandCombineOp', 'BandedSampleModel', 'BufferStrategy', 'BufferedImage', 'BufferedImageFilter', 'BufferedImageOp', 'ByteLookupTable', 'ColorConvertOp', 'ColorModel', 'ComponentColorModel', 'ComponentSampleModel', 'ConvolveOp', 'CropImageFilter', 'DataBuffer', 'DataBufferByte', 'DataBufferDouble', 'DataBufferFloat', 'DataBufferInt', 'DataBufferShort', 'DataBufferUShort', 'DirectColorModel', 'FilteredImageSource', 'ImageConsumer', 'ImageFilter', 'ImageObserver', 'ImageProducer', 'ImagingOpException', 'IndexColorModel', 'Kernel', 'LookupOp', 'LookupTable', 'MemoryImageSource', 'MultiPixelPackedSampleModel', 'PackedColorModel', 'PixelGrabber', 'PixelInterleavedSampleModel', 'RGBImageFilter', 'Raster', 'RasterFormatException', 'RasterOp', 'RenderedImage', 'ReplicateScaleFilter', 'RescaleOp', 'SampleModel', 'ShortLookupTable', 'SinglePixelPackedSampleModel', 'TileObserver', 'VolatileImage', 'WritableRaster', 'WritableRenderedImage'
+ ),
+ 16 => array (
+ 'ContextualRenderedImageFactory', 'ParameterBlock', 'RenderContext', 'RenderableImage', 'RenderableImageOp', 'RenderableImageProducer', 'RenderedImageFactory'
+ ),
+ 17 => array (
+ 'Book', 'PageFormat', 'Pageable', 'Paper', 'Printable', 'PrinterAbortException', 'PrinterException', 'PrinterGraphics', 'PrinterIOException', 'PrinterJob'
+ ),
+ 18 => array (
+ 'AppletInitializer', 'BeanDescriptor', 'BeanInfo', 'Beans', 'Customizer', 'DefaultPersistenceDelegate', 'DesignMode', 'Encoder', 'EventHandler', 'EventSetDescriptor', 'ExceptionListener', 'Expression', 'FeatureDescriptor', 'IndexedPropertyChangeEvent', 'IndexedPropertyDescriptor', 'Introspector', 'MethodDescriptor', 'ParameterDescriptor', 'PersistenceDelegate', 'PropertyChangeEvent', 'PropertyChangeListener', 'PropertyChangeListenerProxy', 'PropertyChangeSupport', 'PropertyDescriptor', 'PropertyEditor', 'PropertyEditorManager', 'PropertyEditorSupport', 'PropertyVetoException', 'SimpleBeanInfo', 'VetoableChangeListener', 'VetoableChangeListenerProxy', 'VetoableChangeSupport', 'Visibility', 'XMLDecoder', 'XMLEncoder'
+ ),
+ 19 => array (
+ 'BeanContext', 'BeanContextChild', 'BeanContextChildComponentProxy', 'BeanContextChildSupport', 'BeanContextContainerProxy', 'BeanContextEvent', 'BeanContextMembershipEvent', 'BeanContextMembershipListener', 'BeanContextProxy', 'BeanContextServiceAvailableEvent', 'BeanContextServiceProvider', 'BeanContextServiceProviderBeanInfo', 'BeanContextServiceRevokedEvent', 'BeanContextServiceRevokedListener', 'BeanContextServices', 'BeanContextServicesListener', 'BeanContextServicesSupport', 'BeanContextServicesSupport.BCSSServiceProvider', 'BeanContextSupport', 'BeanContextSupport.BCSIterator'
+ ),
+ 20 => array (
+ 'BufferedInputStream', 'BufferedOutputStream', 'BufferedReader', 'BufferedWriter', 'ByteArrayInputStream', 'ByteArrayOutputStream', 'CharArrayReader', 'CharArrayWriter', 'CharConversionException', 'Closeable', 'DataInput', 'DataOutput', 'EOFException', 'Externalizable', 'File', 'FileDescriptor', 'FileInputStream', 'FileNotFoundException', 'FileOutputStream', 'FilePermission', 'FileReader', 'FileWriter', 'FilenameFilter', 'FilterInputStream', 'FilterOutputStream', 'FilterReader', 'FilterWriter', 'Flushable', 'IOException', 'InputStreamReader', 'InterruptedIOException', 'InvalidClassException', 'InvalidObjectException', 'LineNumberInputStream', 'LineNumberReader', 'NotActiveException', 'NotSerializableException', 'ObjectInput', 'ObjectInputStream', 'ObjectInputStream.GetField', 'ObjectInputValidation', 'ObjectOutput', 'ObjectOutputStream', 'ObjectOutputStream.PutField', 'ObjectStreamClass', 'ObjectStreamConstants', 'ObjectStreamException', 'ObjectStreamField', 'OptionalDataException', 'OutputStreamWriter',
+ 'PipedInputStream', 'PipedOutputStream', 'PipedReader', 'PipedWriter', 'PrintStream', 'PrintWriter', 'PushbackInputStream', 'PushbackReader', 'RandomAccessFile', 'Reader', 'SequenceInputStream', 'Serializable', 'SerializablePermission', 'StreamCorruptedException', 'StreamTokenizer', 'StringBufferInputStream', 'StringReader', 'StringWriter', 'SyncFailedException', 'UTFDataFormatException', 'UnsupportedEncodingException', 'WriteAbortedException', 'Writer'
+ ),
+ 21 => array (
+ 'AbstractMethodError', 'Appendable', 'ArithmeticException', 'ArrayIndexOutOfBoundsException', 'ArrayStoreException', 'AssertionError', 'Boolean', 'Byte', 'CharSequence', 'Character', 'Character.Subset', 'Character.UnicodeBlock', 'Class', 'ClassCastException', 'ClassCircularityError', 'ClassFormatError', 'ClassLoader', 'ClassNotFoundException', 'CloneNotSupportedException', 'Cloneable', 'Comparable', 'Compiler', 'Deprecated', 'Double', 'Enum', 'EnumConstantNotPresentException', 'Error', 'Exception', 'ExceptionInInitializerError', 'Float', 'IllegalAccessError', 'IllegalAccessException', 'IllegalArgumentException', 'IllegalMonitorStateException', 'IllegalStateException', 'IllegalThreadStateException', 'IncompatibleClassChangeError', 'IndexOutOfBoundsException', 'InheritableThreadLocal', 'InstantiationError', 'InstantiationException', 'Integer', 'InternalError', 'InterruptedException', 'Iterable', 'LinkageError', 'Long', 'Math', 'NegativeArraySizeException', 'NoClassDefFoundError', 'NoSuchFieldError',
+ 'NoSuchFieldException', 'NoSuchMethodError', 'NoSuchMethodException', 'NullPointerException', 'Number', 'NumberFormatException', 'OutOfMemoryError', 'Override', 'Package', 'Process', 'ProcessBuilder', 'Readable', 'Runnable', 'Runtime', 'RuntimeException', 'RuntimePermission', 'SecurityException', 'SecurityManager', 'Short', 'StackOverflowError', 'StackTraceElement', 'StrictMath', 'String', 'StringBuffer', 'StringBuilder', 'StringIndexOutOfBoundsException', 'SuppressWarnings', 'System', 'Thread', 'Thread.State', 'Thread.UncaughtExceptionHandler', 'ThreadDeath', 'ThreadGroup', 'ThreadLocal', 'Throwable', 'TypeNotPresentException', 'UnknownError', 'UnsatisfiedLinkError', 'UnsupportedClassVersionError', 'UnsupportedOperationException', 'VerifyError', 'VirtualMachineError', 'Void'
+ ),
+ 22 => array (
+ 'AnnotationFormatError', 'AnnotationTypeMismatchException', 'Documented', 'ElementType', 'IncompleteAnnotationException', 'Inherited', 'Retention', 'RetentionPolicy', 'Target'
+ ),
+ 23 => array (
+ 'ClassDefinition', 'ClassFileTransformer', 'IllegalClassFormatException', 'Instrumentation', 'UnmodifiableClassException'
+ ),
+ 24 => array (
+ 'ClassLoadingMXBean', 'CompilationMXBean', 'GarbageCollectorMXBean', 'ManagementFactory', 'ManagementPermission', 'MemoryMXBean', 'MemoryManagerMXBean', 'MemoryNotificationInfo', 'MemoryPoolMXBean', 'MemoryType', 'MemoryUsage', 'OperatingSystemMXBean', 'RuntimeMXBean', 'ThreadInfo', 'ThreadMXBean'
+ ),
+ 25 => array (
+ 'PhantomReference', 'ReferenceQueue', 'SoftReference', 'WeakReference'
+ ),
+ 26 => array (
+ 'AccessibleObject', 'AnnotatedElement', 'Constructor', 'Field', 'GenericArrayType', 'GenericDeclaration', 'GenericSignatureFormatError', 'InvocationHandler', 'InvocationTargetException', 'MalformedParameterizedTypeException', 'Member', 'Method', 'Modifier', 'ParameterizedType', 'ReflectPermission', 'Type', 'TypeVariable', 'UndeclaredThrowableException', 'WildcardType'
+ ),
+ 27 => array (
+ 'BigDecimal', 'BigInteger', 'MathContext', 'RoundingMode'
+ ),
+ 28 => array (
+ 'Authenticator', 'Authenticator.RequestorType', 'BindException', 'CacheRequest', 'CacheResponse', 'ContentHandlerFactory', 'CookieHandler', 'DatagramPacket', 'DatagramSocket', 'DatagramSocketImpl', 'DatagramSocketImplFactory', 'FileNameMap', 'HttpRetryException', 'HttpURLConnection', 'Inet4Address', 'Inet6Address', 'InetAddress', 'InetSocketAddress', 'JarURLConnection', 'MalformedURLException', 'MulticastSocket', 'NetPermission', 'NetworkInterface', 'NoRouteToHostException', 'PasswordAuthentication', 'PortUnreachableException', 'ProtocolException', 'Proxy.Type', 'ProxySelector', 'ResponseCache', 'SecureCacheResponse', 'ServerSocket', 'Socket', 'SocketAddress', 'SocketException', 'SocketImpl', 'SocketImplFactory', 'SocketOptions', 'SocketPermission', 'SocketTimeoutException', 'URI', 'URISyntaxException', 'URL', 'URLClassLoader', 'URLConnection', 'URLDecoder', 'URLEncoder', 'URLStreamHandler', 'URLStreamHandlerFactory', 'UnknownServiceException'
+ ),
+ 29 => array (
+ 'Buffer', 'BufferOverflowException', 'BufferUnderflowException', 'ByteBuffer', 'ByteOrder', 'CharBuffer', 'DoubleBuffer', 'FloatBuffer', 'IntBuffer', 'InvalidMarkException', 'LongBuffer', 'MappedByteBuffer', 'ReadOnlyBufferException', 'ShortBuffer'
+ ),
+ 30 => array (
+ 'AlreadyConnectedException', 'AsynchronousCloseException', 'ByteChannel', 'CancelledKeyException', 'Channel', 'Channels', 'ClosedByInterruptException', 'ClosedChannelException', 'ClosedSelectorException', 'ConnectionPendingException', 'DatagramChannel', 'FileChannel', 'FileChannel.MapMode', 'FileLock', 'FileLockInterruptionException', 'GatheringByteChannel', 'IllegalBlockingModeException', 'IllegalSelectorException', 'InterruptibleChannel', 'NoConnectionPendingException', 'NonReadableChannelException', 'NonWritableChannelException', 'NotYetBoundException', 'NotYetConnectedException', 'OverlappingFileLockException', 'Pipe', 'Pipe.SinkChannel', 'Pipe.SourceChannel', 'ReadableByteChannel', 'ScatteringByteChannel', 'SelectableChannel', 'SelectionKey', 'Selector', 'ServerSocketChannel', 'SocketChannel', 'UnresolvedAddressException', 'UnsupportedAddressTypeException', 'WritableByteChannel'
+ ),
+ 31 => array (
+ 'AbstractInterruptibleChannel', 'AbstractSelectableChannel', 'AbstractSelectionKey', 'AbstractSelector', 'SelectorProvider'
+ ),
+ 32 => array (
+ 'CharacterCodingException', 'Charset', 'CharsetDecoder', 'CharsetEncoder', 'CoderMalfunctionError', 'CoderResult', 'CodingErrorAction', 'IllegalCharsetNameException', 'MalformedInputException', 'UnmappableCharacterException', 'UnsupportedCharsetException'
+ ),
+ 33 => array (
+ 'CharsetProvider'
+ ),
+ 34 => array (
+ 'AccessException', 'AlreadyBoundException', 'ConnectIOException', 'MarshalException', 'MarshalledObject', 'Naming', 'NoSuchObjectException', 'NotBoundException', 'RMISecurityException', 'RMISecurityManager', 'Remote', 'RemoteException', 'ServerError', 'ServerException', 'ServerRuntimeException', 'StubNotFoundException', 'UnexpectedException', 'UnmarshalException'
+ ),
+ 35 => array (
+ 'Activatable', 'ActivateFailedException', 'ActivationDesc', 'ActivationException', 'ActivationGroup', 'ActivationGroupDesc', 'ActivationGroupDesc.CommandEnvironment', 'ActivationGroupID', 'ActivationGroup_Stub', 'ActivationID', 'ActivationInstantiator', 'ActivationMonitor', 'ActivationSystem', 'Activator', 'UnknownGroupException', 'UnknownObjectException'
+ ),
+ 36 => array (
+ 'DGC', 'Lease', 'VMID'
+ ),
+ 37 => array (
+ 'LocateRegistry', 'Registry', 'RegistryHandler'
+ ),
+ 38 => array (
+ 'ExportException', 'LoaderHandler', 'LogStream', 'ObjID', 'Operation', 'RMIClassLoader', 'RMIClassLoaderSpi', 'RMIClientSocketFactory', 'RMIFailureHandler', 'RMIServerSocketFactory', 'RMISocketFactory', 'RemoteCall', 'RemoteObject', 'RemoteObjectInvocationHandler', 'RemoteRef', 'RemoteServer', 'RemoteStub', 'ServerCloneException', 'ServerNotActiveException', 'ServerRef', 'Skeleton', 'SkeletonMismatchException', 'SkeletonNotFoundException', 'SocketSecurityException', 'UID', 'UnicastRemoteObject', 'Unreferenced'
+ ),
+ 39 => array (
+ 'AccessControlContext', 'AccessControlException', 'AccessController', 'AlgorithmParameterGenerator', 'AlgorithmParameterGeneratorSpi', 'AlgorithmParameters', 'AlgorithmParametersSpi', 'AllPermission', 'AuthProvider', 'BasicPermission', 'CodeSigner', 'CodeSource', 'DigestException', 'DigestInputStream', 'DigestOutputStream', 'DomainCombiner', 'GeneralSecurityException', 'Guard', 'GuardedObject', 'Identity', 'IdentityScope', 'InvalidAlgorithmParameterException', 'InvalidParameterException', 'Key', 'KeyException', 'KeyFactory', 'KeyFactorySpi', 'KeyManagementException', 'KeyPair', 'KeyPairGenerator', 'KeyPairGeneratorSpi', 'KeyRep', 'KeyRep.Type', 'KeyStore', 'KeyStore.Builder', 'KeyStore.CallbackHandlerProtection', 'KeyStore.Entry', 'KeyStore.LoadStoreParameter', 'KeyStore.PasswordProtection', 'KeyStore.PrivateKeyEntry', 'KeyStore.ProtectionParameter', 'KeyStore.SecretKeyEntry', 'KeyStore.TrustedCertificateEntry', 'KeyStoreException', 'KeyStoreSpi', 'MessageDigest', 'MessageDigestSpi',
+ 'NoSuchAlgorithmException', 'NoSuchProviderException', 'PermissionCollection', 'Permissions', 'PrivateKey', 'PrivilegedAction', 'PrivilegedActionException', 'PrivilegedExceptionAction', 'ProtectionDomain', 'Provider', 'Provider.Service', 'ProviderException', 'PublicKey', 'SecureClassLoader', 'SecureRandom', 'SecureRandomSpi', 'Security', 'SecurityPermission', 'Signature', 'SignatureException', 'SignatureSpi', 'SignedObject', 'Signer', 'UnrecoverableEntryException', 'UnrecoverableKeyException', 'UnresolvedPermission'
+ ),
+ 40 => array (
+ 'Acl', 'AclEntry', 'AclNotFoundException', 'Group', 'LastOwnerException', 'NotOwnerException', 'Owner'
+ ),
+ 41 => array (
+ 'CRL', 'CRLException', 'CRLSelector', 'CertPath', 'CertPath.CertPathRep', 'CertPathBuilder', 'CertPathBuilderException', 'CertPathBuilderResult', 'CertPathBuilderSpi', 'CertPathParameters', 'CertPathValidator', 'CertPathValidatorException', 'CertPathValidatorResult', 'CertPathValidatorSpi', 'CertSelector', 'CertStore', 'CertStoreException', 'CertStoreParameters', 'CertStoreSpi', 'Certificate.CertificateRep', 'CertificateFactory', 'CertificateFactorySpi', 'CollectionCertStoreParameters', 'LDAPCertStoreParameters', 'PKIXBuilderParameters', 'PKIXCertPathBuilderResult', 'PKIXCertPathChecker', 'PKIXCertPathValidatorResult', 'PKIXParameters', 'PolicyNode', 'PolicyQualifierInfo', 'TrustAnchor', 'X509CRL', 'X509CRLEntry', 'X509CRLSelector', 'X509CertSelector', 'X509Extension'
+ ),
+ 42 => array (
+ 'DSAKey', 'DSAKeyPairGenerator', 'DSAParams', 'DSAPrivateKey', 'DSAPublicKey', 'ECKey', 'ECPrivateKey', 'ECPublicKey', 'RSAKey', 'RSAMultiPrimePrivateCrtKey', 'RSAPrivateCrtKey', 'RSAPrivateKey', 'RSAPublicKey'
+ ),
+ 43 => array (
+ 'AlgorithmParameterSpec', 'DSAParameterSpec', 'DSAPrivateKeySpec', 'DSAPublicKeySpec', 'ECField', 'ECFieldF2m', 'ECFieldFp', 'ECGenParameterSpec', 'ECParameterSpec', 'ECPoint', 'ECPrivateKeySpec', 'ECPublicKeySpec', 'EllipticCurve', 'EncodedKeySpec', 'InvalidKeySpecException', 'InvalidParameterSpecException', 'KeySpec', 'MGF1ParameterSpec', 'PKCS8EncodedKeySpec', 'PSSParameterSpec', 'RSAKeyGenParameterSpec', 'RSAMultiPrimePrivateCrtKeySpec', 'RSAOtherPrimeInfo', 'RSAPrivateCrtKeySpec', 'RSAPrivateKeySpec', 'RSAPublicKeySpec', 'X509EncodedKeySpec'
+ ),
+ 44 => array (
+ 'BatchUpdateException', 'Blob', 'CallableStatement', 'Clob', 'Connection', 'DataTruncation', 'DatabaseMetaData', 'Driver', 'DriverManager', 'DriverPropertyInfo', 'ParameterMetaData', 'PreparedStatement', 'Ref', 'ResultSet', 'ResultSetMetaData', 'SQLData', 'SQLException', 'SQLInput', 'SQLOutput', 'SQLPermission', 'SQLWarning', 'Savepoint', 'Struct', 'Time', 'Types'
+ ),
+ 45 => array (
+ 'AttributedCharacterIterator', 'AttributedCharacterIterator.Attribute', 'AttributedString', 'Bidi', 'BreakIterator', 'CharacterIterator', 'ChoiceFormat', 'CollationElementIterator', 'CollationKey', 'Collator', 'DateFormat', 'DateFormat.Field', 'DateFormatSymbols', 'DecimalFormat', 'DecimalFormatSymbols', 'FieldPosition', 'Format', 'Format.Field', 'MessageFormat', 'MessageFormat.Field', 'NumberFormat', 'NumberFormat.Field', 'ParseException', 'ParsePosition', 'RuleBasedCollator', 'SimpleDateFormat', 'StringCharacterIterator'
+ ),
+ 46 => array (
+ 'AbstractCollection', 'AbstractList', 'AbstractMap', 'AbstractQueue', 'AbstractSequentialList', 'AbstractSet', 'ArrayList', 'Arrays', 'BitSet', 'Calendar', 'Collection', 'Collections', 'Comparator', 'ConcurrentModificationException', 'Currency', 'Dictionary', 'DuplicateFormatFlagsException', 'EmptyStackException', 'EnumMap', 'EnumSet', 'Enumeration', 'EventListenerProxy', 'EventObject', 'FormatFlagsConversionMismatchException', 'Formattable', 'FormattableFlags', 'Formatter.BigDecimalLayoutForm', 'FormatterClosedException', 'GregorianCalendar', 'HashMap', 'HashSet', 'Hashtable', 'IdentityHashMap', 'IllegalFormatCodePointException', 'IllegalFormatConversionException', 'IllegalFormatException', 'IllegalFormatFlagsException', 'IllegalFormatPrecisionException', 'IllegalFormatWidthException', 'InputMismatchException', 'InvalidPropertiesFormatException', 'Iterator', 'LinkedHashMap', 'LinkedHashSet', 'LinkedList', 'ListIterator', 'ListResourceBundle', 'Locale', 'Map', 'Map.Entry', 'MissingFormatArgumentException',
+ 'MissingFormatWidthException', 'MissingResourceException', 'NoSuchElementException', 'Observable', 'Observer', 'PriorityQueue', 'Properties', 'PropertyPermission', 'PropertyResourceBundle', 'Queue', 'Random', 'RandomAccess', 'ResourceBundle', 'Scanner', 'Set', 'SimpleTimeZone', 'SortedMap', 'SortedSet', 'Stack', 'StringTokenizer', 'TimeZone', 'TimerTask', 'TooManyListenersException', 'TreeMap', 'TreeSet', 'UUID', 'UnknownFormatConversionException', 'UnknownFormatFlagsException', 'Vector', 'WeakHashMap'
+ ),
+ 47 => array (
+ 'AbstractExecutorService', 'ArrayBlockingQueue', 'BlockingQueue', 'BrokenBarrierException', 'Callable', 'CancellationException', 'CompletionService', 'ConcurrentHashMap', 'ConcurrentLinkedQueue', 'ConcurrentMap', 'CopyOnWriteArrayList', 'CopyOnWriteArraySet', 'CountDownLatch', 'CyclicBarrier', 'DelayQueue', 'Delayed', 'Exchanger', 'ExecutionException', 'Executor', 'ExecutorCompletionService', 'ExecutorService', 'Executors', 'Future', 'FutureTask', 'LinkedBlockingQueue', 'PriorityBlockingQueue', 'RejectedExecutionException', 'RejectedExecutionHandler', 'ScheduledExecutorService', 'ScheduledFuture', 'ScheduledThreadPoolExecutor', 'Semaphore', 'SynchronousQueue', 'ThreadFactory', 'ThreadPoolExecutor', 'ThreadPoolExecutor.AbortPolicy', 'ThreadPoolExecutor.CallerRunsPolicy', 'ThreadPoolExecutor.DiscardOldestPolicy', 'ThreadPoolExecutor.DiscardPolicy', 'TimeUnit', 'TimeoutException'
+ ),
+ 48 => array (
+ 'AtomicBoolean', 'AtomicInteger', 'AtomicIntegerArray', 'AtomicIntegerFieldUpdater', 'AtomicLong', 'AtomicLongArray', 'AtomicLongFieldUpdater', 'AtomicMarkableReference', 'AtomicReference', 'AtomicReferenceArray', 'AtomicReferenceFieldUpdater', 'AtomicStampedReference'
+ ),
+ 49 => array (
+ 'AbstractQueuedSynchronizer', 'Condition', 'Lock', 'LockSupport', 'ReadWriteLock', 'ReentrantLock', 'ReentrantReadWriteLock', 'ReentrantReadWriteLock.ReadLock', 'ReentrantReadWriteLock.WriteLock'
+ ),
+ 50 => array (
+ 'Attributes.Name', 'JarEntry', 'JarException', 'JarFile', 'JarInputStream', 'JarOutputStream', 'Manifest', 'Pack200', 'Pack200.Packer', 'Pack200.Unpacker'
+ ),
+ 51 => array (
+ 'ConsoleHandler', 'ErrorManager', 'FileHandler', 'Filter', 'Handler', 'Level', 'LogManager', 'LogRecord', 'Logger', 'LoggingMXBean', 'LoggingPermission', 'MemoryHandler', 'SimpleFormatter', 'SocketHandler', 'StreamHandler', 'XMLFormatter'
+ ),
+ 52 => array (
+ 'AbstractPreferences', 'BackingStoreException', 'InvalidPreferencesFormatException', 'NodeChangeEvent', 'NodeChangeListener', 'PreferenceChangeEvent', 'PreferenceChangeListener', 'Preferences', 'PreferencesFactory'
+ ),
+ 53 => array (
+ 'MatchResult', 'Matcher', 'Pattern', 'PatternSyntaxException'
+ ),
+ 54 => array (
+ 'Adler32', 'CRC32', 'CheckedInputStream', 'CheckedOutputStream', 'Checksum', 'DataFormatException', 'Deflater', 'DeflaterOutputStream', 'GZIPInputStream', 'GZIPOutputStream', 'Inflater', 'InflaterInputStream', 'ZipEntry', 'ZipException', 'ZipFile', 'ZipInputStream', 'ZipOutputStream'
+ ),
+ 55 => array (
+ 'Accessible', 'AccessibleAction', 'AccessibleAttributeSequence', 'AccessibleBundle', 'AccessibleComponent', 'AccessibleContext', 'AccessibleEditableText', 'AccessibleExtendedComponent', 'AccessibleExtendedTable', 'AccessibleExtendedText', 'AccessibleHyperlink', 'AccessibleHypertext', 'AccessibleIcon', 'AccessibleKeyBinding', 'AccessibleRelation', 'AccessibleRelationSet', 'AccessibleResourceBundle', 'AccessibleRole', 'AccessibleSelection', 'AccessibleState', 'AccessibleStateSet', 'AccessibleStreamable', 'AccessibleTable', 'AccessibleTableModelChange', 'AccessibleText', 'AccessibleTextSequence', 'AccessibleValue'
+ ),
+ 56 => array (
+ 'ActivityCompletedException', 'ActivityRequiredException', 'InvalidActivityException'
+ ),
+ 57 => array (
+ 'BadPaddingException', 'Cipher', 'CipherInputStream', 'CipherOutputStream', 'CipherSpi', 'EncryptedPrivateKeyInfo', 'ExemptionMechanism', 'ExemptionMechanismException', 'ExemptionMechanismSpi', 'IllegalBlockSizeException', 'KeyAgreement', 'KeyAgreementSpi', 'KeyGenerator', 'KeyGeneratorSpi', 'Mac', 'MacSpi', 'NoSuchPaddingException', 'NullCipher', 'SealedObject', 'SecretKey', 'SecretKeyFactory', 'SecretKeyFactorySpi', 'ShortBufferException'
+ ),
+ 58 => array (
+ 'DHKey', 'DHPrivateKey', 'DHPublicKey', 'PBEKey'
+ ),
+ 59 => array (
+ 'DESKeySpec', 'DESedeKeySpec', 'DHGenParameterSpec', 'DHParameterSpec', 'DHPrivateKeySpec', 'DHPublicKeySpec', 'IvParameterSpec', 'OAEPParameterSpec', 'PBEKeySpec', 'PBEParameterSpec', 'PSource', 'PSource.PSpecified', 'RC2ParameterSpec', 'RC5ParameterSpec', 'SecretKeySpec'
+ ),
+ 60 => array (
+ 'IIOException', 'IIOImage', 'IIOParam', 'IIOParamController', 'ImageIO', 'ImageReadParam', 'ImageReader', 'ImageTranscoder', 'ImageTypeSpecifier', 'ImageWriteParam', 'ImageWriter'
+ ),
+ 61 => array (
+ 'IIOReadProgressListener', 'IIOReadUpdateListener', 'IIOReadWarningListener', 'IIOWriteProgressListener', 'IIOWriteWarningListener'
+ ),
+ 62 => array (
+ 'IIOInvalidTreeException', 'IIOMetadata', 'IIOMetadataController', 'IIOMetadataFormat', 'IIOMetadataFormatImpl', 'IIOMetadataNode'
+ ),
+ 63 => array (
+ 'BMPImageWriteParam'
+ ),
+ 64 => array (
+ 'JPEGHuffmanTable', 'JPEGImageReadParam', 'JPEGImageWriteParam', 'JPEGQTable'
+ ),
+ 65 => array (
+ 'IIORegistry', 'IIOServiceProvider', 'ImageInputStreamSpi', 'ImageOutputStreamSpi', 'ImageReaderSpi', 'ImageReaderWriterSpi', 'ImageTranscoderSpi', 'ImageWriterSpi', 'RegisterableService', 'ServiceRegistry', 'ServiceRegistry.Filter'
+ ),
+ 66 => array (
+ 'FileCacheImageInputStream', 'FileCacheImageOutputStream', 'FileImageInputStream', 'FileImageOutputStream', 'IIOByteBuffer', 'ImageInputStream', 'ImageInputStreamImpl', 'ImageOutputStream', 'ImageOutputStreamImpl', 'MemoryCacheImageInputStream', 'MemoryCacheImageOutputStream'
+ ),
+ 67 => array (
+ 'AttributeChangeNotification', 'AttributeChangeNotificationFilter', 'AttributeNotFoundException', 'AttributeValueExp', 'BadAttributeValueExpException', 'BadBinaryOpValueExpException', 'BadStringOperationException', 'Descriptor', 'DescriptorAccess', 'DynamicMBean', 'InstanceAlreadyExistsException', 'InstanceNotFoundException', 'InvalidApplicationException', 'JMException', 'JMRuntimeException', 'ListenerNotFoundException', 'MBeanAttributeInfo', 'MBeanConstructorInfo', 'MBeanException', 'MBeanFeatureInfo', 'MBeanInfo', 'MBeanNotificationInfo', 'MBeanOperationInfo', 'MBeanParameterInfo', 'MBeanPermission', 'MBeanRegistration', 'MBeanRegistrationException', 'MBeanServer', 'MBeanServerBuilder', 'MBeanServerConnection', 'MBeanServerDelegate', 'MBeanServerDelegateMBean', 'MBeanServerFactory', 'MBeanServerInvocationHandler', 'MBeanServerNotification', 'MBeanServerPermission', 'MBeanTrustPermission', 'MalformedObjectNameException', 'NotCompliantMBeanException', 'Notification', 'NotificationBroadcaster',
+ 'NotificationBroadcasterSupport', 'NotificationEmitter', 'NotificationFilter', 'NotificationFilterSupport', 'NotificationListener', 'ObjectInstance', 'ObjectName', 'OperationsException', 'PersistentMBean', 'Query', 'QueryEval', 'QueryExp', 'ReflectionException', 'RuntimeErrorException', 'RuntimeMBeanException', 'RuntimeOperationsException', 'ServiceNotFoundException', 'StandardMBean', 'StringValueExp', 'ValueExp'
+ ),
+ 68 => array (
+ 'ClassLoaderRepository', 'MLet', 'MLetMBean', 'PrivateClassLoader', 'PrivateMLet'
+ ),
+ 69 => array (
+ 'DescriptorSupport', 'InvalidTargetObjectTypeException', 'ModelMBean', 'ModelMBeanAttributeInfo', 'ModelMBeanConstructorInfo', 'ModelMBeanInfo', 'ModelMBeanInfoSupport', 'ModelMBeanNotificationBroadcaster', 'ModelMBeanNotificationInfo', 'ModelMBeanOperationInfo', 'RequiredModelMBean', 'XMLParseException'
+ ),
+ 70 => array (
+ 'CounterMonitor', 'CounterMonitorMBean', 'GaugeMonitor', 'GaugeMonitorMBean', 'Monitor', 'MonitorMBean', 'MonitorNotification', 'MonitorSettingException', 'StringMonitor', 'StringMonitorMBean'
+ ),
+ 71 => array (
+ 'ArrayType', 'CompositeData', 'CompositeDataSupport', 'CompositeType', 'InvalidOpenTypeException', 'KeyAlreadyExistsException', 'OpenDataException', 'OpenMBeanAttributeInfo', 'OpenMBeanAttributeInfoSupport', 'OpenMBeanConstructorInfo', 'OpenMBeanConstructorInfoSupport', 'OpenMBeanInfo', 'OpenMBeanInfoSupport', 'OpenMBeanOperationInfo', 'OpenMBeanOperationInfoSupport', 'OpenMBeanParameterInfo', 'OpenMBeanParameterInfoSupport', 'SimpleType', 'TabularData', 'TabularDataSupport', 'TabularType'
+ ),
+ 72 => array (
+ 'InvalidRelationIdException', 'InvalidRelationServiceException', 'InvalidRelationTypeException', 'InvalidRoleInfoException', 'InvalidRoleValueException', 'MBeanServerNotificationFilter', 'Relation', 'RelationException', 'RelationNotFoundException', 'RelationNotification', 'RelationService', 'RelationServiceMBean', 'RelationServiceNotRegisteredException', 'RelationSupport', 'RelationSupportMBean', 'RelationType', 'RelationTypeNotFoundException', 'RelationTypeSupport', 'Role', 'RoleInfo', 'RoleInfoNotFoundException', 'RoleList', 'RoleNotFoundException', 'RoleResult', 'RoleStatus', 'RoleUnresolved', 'RoleUnresolvedList'
+ ),
+ 73 => array (
+ 'JMXAuthenticator', 'JMXConnectionNotification', 'JMXConnector', 'JMXConnectorFactory', 'JMXConnectorProvider', 'JMXConnectorServer', 'JMXConnectorServerFactory', 'JMXConnectorServerMBean', 'JMXConnectorServerProvider', 'JMXPrincipal', 'JMXProviderException', 'JMXServerErrorException', 'JMXServiceURL', 'MBeanServerForwarder', 'NotificationResult', 'SubjectDelegationPermission', 'TargetedNotification'
+ ),
+ 74 => array (
+ 'RMIConnection', 'RMIConnectionImpl', 'RMIConnectionImpl_Stub', 'RMIConnector', 'RMIConnectorServer', 'RMIIIOPServerImpl', 'RMIJRMPServerImpl', 'RMIServer', 'RMIServerImpl', 'RMIServerImpl_Stub'
+ ),
+ 75 => array (
+ 'TimerAlarmClockNotification', 'TimerMBean', 'TimerNotification'
+ ),
+ 76 => array (
+ 'AuthenticationNotSupportedException', 'BinaryRefAddr', 'CannotProceedException', 'CommunicationException', 'CompositeName', 'CompoundName', 'ConfigurationException', 'ContextNotEmptyException', 'InitialContext', 'InsufficientResourcesException', 'InterruptedNamingException', 'InvalidNameException', 'LimitExceededException', 'LinkException', 'LinkLoopException', 'LinkRef', 'MalformedLinkException', 'Name', 'NameAlreadyBoundException', 'NameClassPair', 'NameNotFoundException', 'NameParser', 'NamingEnumeration', 'NamingException', 'NamingSecurityException', 'NoInitialContextException', 'NoPermissionException', 'NotContextException', 'OperationNotSupportedException', 'PartialResultException', 'RefAddr', 'Referenceable', 'ReferralException', 'ServiceUnavailableException', 'SizeLimitExceededException', 'StringRefAddr', 'TimeLimitExceededException'
+ ),
+ 77 => array (
+ 'AttributeInUseException', 'AttributeModificationException', 'BasicAttribute', 'BasicAttributes', 'DirContext', 'InitialDirContext', 'InvalidAttributeIdentifierException', 'InvalidAttributesException', 'InvalidSearchControlsException', 'InvalidSearchFilterException', 'ModificationItem', 'NoSuchAttributeException', 'SchemaViolationException', 'SearchControls', 'SearchResult'
+ ),
+ 78 => array (
+ 'EventContext', 'EventDirContext', 'NamespaceChangeListener', 'NamingEvent', 'NamingExceptionEvent', 'NamingListener', 'ObjectChangeListener'
+ ),
+ 79 => array (
+ 'BasicControl', 'ControlFactory', 'ExtendedRequest', 'ExtendedResponse', 'HasControls', 'InitialLdapContext', 'LdapContext', 'LdapName', 'LdapReferralException', 'ManageReferralControl', 'PagedResultsControl', 'PagedResultsResponseControl', 'Rdn', 'SortControl', 'SortKey', 'SortResponseControl', 'StartTlsRequest', 'StartTlsResponse', 'UnsolicitedNotification', 'UnsolicitedNotificationEvent', 'UnsolicitedNotificationListener'
+ ),
+ 80 => array (
+ 'DirObjectFactory', 'DirStateFactory', 'DirStateFactory.Result', 'DirectoryManager', 'InitialContextFactory', 'InitialContextFactoryBuilder', 'NamingManager', 'ObjectFactory', 'ObjectFactoryBuilder', 'ResolveResult', 'Resolver', 'StateFactory'
+ ),
+ 81 => array (
+ 'ServerSocketFactory', 'SocketFactory'
+ ),
+ 82 => array (
+ 'CertPathTrustManagerParameters', 'HandshakeCompletedEvent', 'HandshakeCompletedListener', 'HostnameVerifier', 'HttpsURLConnection', 'KeyManager', 'KeyManagerFactory', 'KeyManagerFactorySpi', 'KeyStoreBuilderParameters', 'ManagerFactoryParameters', 'SSLContext', 'SSLContextSpi', 'SSLEngine', 'SSLEngineResult', 'SSLEngineResult.HandshakeStatus', 'SSLEngineResult.Status', 'SSLException', 'SSLHandshakeException', 'SSLKeyException', 'SSLPeerUnverifiedException', 'SSLPermission', 'SSLProtocolException', 'SSLServerSocket', 'SSLServerSocketFactory', 'SSLSession', 'SSLSessionBindingEvent', 'SSLSessionBindingListener', 'SSLSessionContext', 'SSLSocket', 'SSLSocketFactory', 'TrustManager', 'TrustManagerFactory', 'TrustManagerFactorySpi', 'X509ExtendedKeyManager', 'X509KeyManager', 'X509TrustManager'
+ ),
+ 83 => array (
+ 'AttributeException', 'CancelablePrintJob', 'Doc', 'DocFlavor', 'DocFlavor.BYTE_ARRAY', 'DocFlavor.CHAR_ARRAY', 'DocFlavor.INPUT_STREAM', 'DocFlavor.READER', 'DocFlavor.SERVICE_FORMATTED', 'DocFlavor.STRING', 'DocFlavor.URL', 'DocPrintJob', 'FlavorException', 'MultiDoc', 'MultiDocPrintJob', 'MultiDocPrintService', 'PrintException', 'PrintService', 'PrintServiceLookup', 'ServiceUI', 'ServiceUIFactory', 'SimpleDoc', 'StreamPrintService', 'StreamPrintServiceFactory', 'URIException'
+ ),
+ 84 => array (
+ 'AttributeSetUtilities', 'DateTimeSyntax', 'DocAttribute', 'DocAttributeSet', 'EnumSyntax', 'HashAttributeSet', 'HashDocAttributeSet', 'HashPrintJobAttributeSet', 'HashPrintRequestAttributeSet', 'HashPrintServiceAttributeSet', 'IntegerSyntax', 'PrintJobAttribute', 'PrintJobAttributeSet', 'PrintRequestAttribute', 'PrintRequestAttributeSet', 'PrintServiceAttribute', 'PrintServiceAttributeSet', 'ResolutionSyntax', 'SetOfIntegerSyntax', 'Size2DSyntax', 'SupportedValuesAttribute', 'TextSyntax', 'URISyntax', 'UnmodifiableSetException'
+ ),
+ 85 => array (
+ 'Chromaticity', 'ColorSupported', 'Compression', 'Copies', 'CopiesSupported', 'DateTimeAtCompleted', 'DateTimeAtCreation', 'DateTimeAtProcessing', 'Destination', 'DocumentName', 'Fidelity', 'Finishings', 'JobHoldUntil', 'JobImpressions', 'JobImpressionsCompleted', 'JobImpressionsSupported', 'JobKOctets', 'JobKOctetsProcessed', 'JobKOctetsSupported', 'JobMediaSheets', 'JobMediaSheetsCompleted', 'JobMediaSheetsSupported', 'JobMessageFromOperator', 'JobName', 'JobOriginatingUserName', 'JobPriority', 'JobPrioritySupported', 'JobSheets', 'JobState', 'JobStateReason', 'JobStateReasons', 'Media', 'MediaName', 'MediaPrintableArea', 'MediaSize', 'MediaSize.Engineering', 'MediaSize.ISO', 'MediaSize.JIS', 'MediaSize.NA', 'MediaSize.Other', 'MediaSizeName', 'MediaTray', 'MultipleDocumentHandling', 'NumberOfDocuments', 'NumberOfInterveningJobs', 'NumberUp', 'NumberUpSupported', 'OrientationRequested', 'OutputDeviceAssigned', 'PDLOverrideSupported', 'PageRanges', 'PagesPerMinute', 'PagesPerMinuteColor',
+ 'PresentationDirection', 'PrintQuality', 'PrinterInfo', 'PrinterIsAcceptingJobs', 'PrinterLocation', 'PrinterMakeAndModel', 'PrinterMessageFromOperator', 'PrinterMoreInfo', 'PrinterMoreInfoManufacturer', 'PrinterName', 'PrinterResolution', 'PrinterState', 'PrinterStateReason', 'PrinterStateReasons', 'PrinterURI', 'QueuedJobCount', 'ReferenceUriSchemesSupported', 'RequestingUserName', 'Severity', 'SheetCollate', 'Sides'
+ ),
+ 86 => array (
+ 'PrintEvent', 'PrintJobAdapter', 'PrintJobAttributeEvent', 'PrintJobAttributeListener', 'PrintJobEvent', 'PrintJobListener', 'PrintServiceAttributeEvent', 'PrintServiceAttributeListener'
+ ),
+ 87 => array (
+ 'PortableRemoteObject'
+ ),
+ 88 => array (
+ 'ClassDesc', 'PortableRemoteObjectDelegate', 'Stub', 'StubDelegate', 'Tie', 'Util', 'UtilDelegate', 'ValueHandler', 'ValueHandlerMultiFormat'
+ ),
+ 89 => array (
+ 'SslRMIClientSocketFactory', 'SslRMIServerSocketFactory'
+ ),
+ 90 => array (
+ 'AuthPermission', 'DestroyFailedException', 'Destroyable', 'PrivateCredentialPermission', 'RefreshFailedException', 'Refreshable', 'Subject', 'SubjectDomainCombiner'
+ ),
+ 91 => array (
+ 'Callback', 'CallbackHandler', 'ChoiceCallback', 'ConfirmationCallback', 'LanguageCallback', 'NameCallback', 'PasswordCallback', 'TextInputCallback', 'TextOutputCallback', 'UnsupportedCallbackException'
+ ),
+ 92 => array (
+ 'DelegationPermission', 'KerberosKey', 'KerberosPrincipal', 'KerberosTicket', 'ServicePermission'
+ ),
+ 93 => array (
+ 'AccountException', 'AccountExpiredException', 'AccountLockedException', 'AccountNotFoundException', 'AppConfigurationEntry', 'AppConfigurationEntry.LoginModuleControlFlag', 'Configuration', 'CredentialException', 'CredentialExpiredException', 'CredentialNotFoundException', 'FailedLoginException', 'LoginContext', 'LoginException'
+ ),
+ 94 => array (
+ 'LoginModule'
+ ),
+ 95 => array (
+ 'X500Principal', 'X500PrivateCredential'
+ ),
+ 96 => array (
+ 'AuthorizeCallback', 'RealmCallback', 'RealmChoiceCallback', 'Sasl', 'SaslClient', 'SaslClientFactory', 'SaslException', 'SaslServer', 'SaslServerFactory'
+ ),
+ 97 => array (
+ 'ControllerEventListener', 'Instrument', 'InvalidMidiDataException', 'MetaEventListener', 'MetaMessage', 'MidiChannel', 'MidiDevice', 'MidiDevice.Info', 'MidiEvent', 'MidiFileFormat', 'MidiMessage', 'MidiSystem', 'MidiUnavailableException', 'Patch', 'Receiver', 'Sequence', 'Sequencer', 'Sequencer.SyncMode', 'ShortMessage', 'Soundbank', 'SoundbankResource', 'Synthesizer', 'SysexMessage', 'Track', 'Transmitter', 'VoiceStatus'
+ ),
+ 98 => array (
+ 'MidiDeviceProvider', 'MidiFileReader', 'MidiFileWriter', 'SoundbankReader'
+ ),
+ 99 => array (
+ 'AudioFileFormat', 'AudioFileFormat.Type', 'AudioFormat', 'AudioFormat.Encoding', 'AudioInputStream', 'AudioPermission', 'AudioSystem', 'BooleanControl', 'BooleanControl.Type', 'Clip', 'CompoundControl', 'CompoundControl.Type', 'Control.Type', 'DataLine', 'DataLine.Info', 'EnumControl', 'EnumControl.Type', 'FloatControl', 'FloatControl.Type', 'Line', 'Line.Info', 'LineEvent', 'LineEvent.Type', 'LineListener', 'LineUnavailableException', 'Mixer', 'Mixer.Info', 'Port', 'Port.Info', 'ReverbType', 'SourceDataLine', 'TargetDataLine', 'UnsupportedAudioFileException'
+ ),
+ 100 => array (
+ 'AudioFileReader', 'AudioFileWriter', 'FormatConversionProvider', 'MixerProvider'
+ ),
+ 101 => array (
+ 'ConnectionEvent', 'ConnectionEventListener', 'ConnectionPoolDataSource', 'DataSource', 'PooledConnection', 'RowSet', 'RowSetEvent', 'RowSetInternal', 'RowSetListener', 'RowSetMetaData', 'RowSetReader', 'RowSetWriter', 'XAConnection', 'XADataSource'
+ ),
+ 102 => array (
+ 'BaseRowSet', 'CachedRowSet', 'FilteredRowSet', 'JdbcRowSet', 'JoinRowSet', 'Joinable', 'Predicate', 'RowSetMetaDataImpl', 'RowSetWarning', 'WebRowSet'
+ ),
+ 103 => array (
+ 'SQLInputImpl', 'SQLOutputImpl', 'SerialArray', 'SerialBlob', 'SerialClob', 'SerialDatalink', 'SerialException', 'SerialJavaObject', 'SerialRef', 'SerialStruct'
+ ),
+ 104 => array (
+ 'SyncFactory', 'SyncFactoryException', 'SyncProvider', 'SyncProviderException', 'SyncResolver', 'TransactionalWriter', 'XmlReader', 'XmlWriter'
+ ),
+ 105 => array (
+ 'AbstractAction', 'AbstractButton', 'AbstractCellEditor', 'AbstractListModel', 'AbstractSpinnerModel', 'Action', 'ActionMap', 'BorderFactory', 'BoundedRangeModel', 'Box', 'Box.Filler', 'BoxLayout', 'ButtonGroup', 'ButtonModel', 'CellEditor', 'CellRendererPane', 'ComboBoxEditor', 'ComboBoxModel', 'ComponentInputMap', 'DebugGraphics', 'DefaultBoundedRangeModel', 'DefaultButtonModel', 'DefaultCellEditor', 'DefaultComboBoxModel', 'DefaultDesktopManager', 'DefaultFocusManager', 'DefaultListCellRenderer', 'DefaultListCellRenderer.UIResource', 'DefaultListModel', 'DefaultListSelectionModel', 'DefaultSingleSelectionModel', 'DesktopManager', 'FocusManager', 'GrayFilter', 'Icon', 'ImageIcon', 'InputMap', 'InputVerifier', 'InternalFrameFocusTraversalPolicy', 'JApplet', 'JButton', 'JCheckBox', 'JCheckBoxMenuItem', 'JColorChooser', 'JComboBox', 'JComboBox.KeySelectionManager', 'JComponent', 'JDesktopPane', 'JDialog', 'JEditorPane', 'JFileChooser', 'JFormattedTextField', 'JFormattedTextField.AbstractFormatter',
+ 'JFormattedTextField.AbstractFormatterFactory', 'JFrame', 'JInternalFrame', 'JInternalFrame.JDesktopIcon', 'JLabel', 'JLayeredPane', 'JList', 'JMenu', 'JMenuBar', 'JMenuItem', 'JOptionPane', 'JPanel', 'JPasswordField', 'JPopupMenu', 'JPopupMenu.Separator', 'JProgressBar', 'JRadioButton', 'JRadioButtonMenuItem', 'JRootPane', 'JScrollBar', 'JScrollPane', 'JSeparator', 'JSlider', 'JSpinner', 'JSpinner.DateEditor', 'JSpinner.DefaultEditor', 'JSpinner.ListEditor', 'JSpinner.NumberEditor', 'JSplitPane', 'JTabbedPane', 'JTable', 'JTable.PrintMode', 'JTextArea', 'JTextField', 'JTextPane', 'JToggleButton', 'JToggleButton.ToggleButtonModel', 'JToolBar', 'JToolBar.Separator', 'JToolTip', 'JTree', 'JTree.DynamicUtilTreeNode', 'JTree.EmptySelectionModel', 'JViewport', 'JWindow', 'KeyStroke', 'LayoutFocusTraversalPolicy', 'ListCellRenderer', 'ListModel', 'ListSelectionModel', 'LookAndFeel', 'MenuElement', 'MenuSelectionManager', 'MutableComboBoxModel', 'OverlayLayout', 'Popup', 'PopupFactory', 'ProgressMonitor',
+ 'ProgressMonitorInputStream', 'Renderer', 'RepaintManager', 'RootPaneContainer', 'ScrollPaneConstants', 'ScrollPaneLayout', 'ScrollPaneLayout.UIResource', 'Scrollable', 'SingleSelectionModel', 'SizeRequirements', 'SizeSequence', 'SortingFocusTraversalPolicy', 'SpinnerDateModel', 'SpinnerListModel', 'SpinnerModel', 'SpinnerNumberModel', 'Spring', 'SpringLayout', 'SpringLayout.Constraints', 'SwingConstants', 'SwingUtilities', 'ToolTipManager', 'TransferHandler', 'UIDefaults', 'UIDefaults.ActiveValue', 'UIDefaults.LazyInputMap', 'UIDefaults.LazyValue', 'UIDefaults.ProxyLazyValue', 'UIManager', 'UIManager.LookAndFeelInfo', 'UnsupportedLookAndFeelException', 'ViewportLayout', 'WindowConstants'
+ ),
+ 106 => array (
+ 'AbstractBorder', 'BevelBorder', 'Border', 'CompoundBorder', 'EmptyBorder', 'EtchedBorder', 'LineBorder', 'MatteBorder', 'SoftBevelBorder', 'TitledBorder'
+ ),
+ 107 => array (
+ 'AbstractColorChooserPanel', 'ColorChooserComponentFactory', 'ColorSelectionModel', 'DefaultColorSelectionModel'
+ ),
+ 108 => array (
+ 'AncestorEvent', 'AncestorListener', 'CaretEvent', 'CaretListener', 'CellEditorListener', 'ChangeEvent', 'ChangeListener', 'DocumentEvent.ElementChange', 'DocumentEvent.EventType', 'DocumentListener', 'EventListenerList', 'HyperlinkEvent', 'HyperlinkEvent.EventType', 'HyperlinkListener', 'InternalFrameAdapter', 'InternalFrameEvent', 'InternalFrameListener', 'ListDataEvent', 'ListDataListener', 'ListSelectionEvent', 'ListSelectionListener', 'MenuDragMouseEvent', 'MenuDragMouseListener', 'MenuEvent', 'MenuKeyEvent', 'MenuKeyListener', 'MenuListener', 'MouseInputAdapter', 'MouseInputListener', 'PopupMenuEvent', 'PopupMenuListener', 'SwingPropertyChangeSupport', 'TableColumnModelEvent', 'TableColumnModelListener', 'TableModelEvent', 'TableModelListener', 'TreeExpansionEvent', 'TreeExpansionListener', 'TreeModelEvent', 'TreeModelListener', 'TreeSelectionEvent', 'TreeSelectionListener', 'TreeWillExpandListener', 'UndoableEditEvent', 'UndoableEditListener'
+ ),
+ 109 => array (
+ 'FileSystemView', 'FileView'
+ ),
+ 110 => array (
+ 'ActionMapUIResource', 'BorderUIResource', 'BorderUIResource.BevelBorderUIResource', 'BorderUIResource.CompoundBorderUIResource', 'BorderUIResource.EmptyBorderUIResource', 'BorderUIResource.EtchedBorderUIResource', 'BorderUIResource.LineBorderUIResource', 'BorderUIResource.MatteBorderUIResource', 'BorderUIResource.TitledBorderUIResource', 'ButtonUI', 'ColorChooserUI', 'ColorUIResource', 'ComboBoxUI', 'ComponentInputMapUIResource', 'ComponentUI', 'DesktopIconUI', 'DesktopPaneUI', 'DimensionUIResource', 'FileChooserUI', 'FontUIResource', 'IconUIResource', 'InputMapUIResource', 'InsetsUIResource', 'InternalFrameUI', 'LabelUI', 'ListUI', 'MenuBarUI', 'MenuItemUI', 'OptionPaneUI', 'PanelUI', 'PopupMenuUI', 'ProgressBarUI', 'RootPaneUI', 'ScrollBarUI', 'ScrollPaneUI', 'SeparatorUI', 'SliderUI', 'SpinnerUI', 'SplitPaneUI', 'TabbedPaneUI', 'TableHeaderUI', 'TableUI', 'TextUI', 'ToolBarUI', 'ToolTipUI', 'TreeUI', 'UIResource', 'ViewportUI'
+ ),
+ 111 => array (
+ 'BasicArrowButton', 'BasicBorders', 'BasicBorders.ButtonBorder', 'BasicBorders.FieldBorder', 'BasicBorders.MarginBorder', 'BasicBorders.MenuBarBorder', 'BasicBorders.RadioButtonBorder', 'BasicBorders.RolloverButtonBorder', 'BasicBorders.SplitPaneBorder', 'BasicBorders.ToggleButtonBorder', 'BasicButtonListener', 'BasicButtonUI', 'BasicCheckBoxMenuItemUI', 'BasicCheckBoxUI', 'BasicColorChooserUI', 'BasicComboBoxEditor', 'BasicComboBoxEditor.UIResource', 'BasicComboBoxRenderer', 'BasicComboBoxRenderer.UIResource', 'BasicComboBoxUI', 'BasicComboPopup', 'BasicDesktopIconUI', 'BasicDesktopPaneUI', 'BasicDirectoryModel', 'BasicEditorPaneUI', 'BasicFileChooserUI', 'BasicFormattedTextFieldUI', 'BasicGraphicsUtils', 'BasicHTML', 'BasicIconFactory', 'BasicInternalFrameTitlePane', 'BasicInternalFrameUI', 'BasicLabelUI', 'BasicListUI', 'BasicLookAndFeel', 'BasicMenuBarUI', 'BasicMenuItemUI', 'BasicMenuUI', 'BasicOptionPaneUI', 'BasicOptionPaneUI.ButtonAreaLayout', 'BasicPanelUI', 'BasicPasswordFieldUI',
+ 'BasicPopupMenuSeparatorUI', 'BasicPopupMenuUI', 'BasicProgressBarUI', 'BasicRadioButtonMenuItemUI', 'BasicRadioButtonUI', 'BasicRootPaneUI', 'BasicScrollBarUI', 'BasicScrollPaneUI', 'BasicSeparatorUI', 'BasicSliderUI', 'BasicSpinnerUI', 'BasicSplitPaneDivider', 'BasicSplitPaneUI', 'BasicTabbedPaneUI', 'BasicTableHeaderUI', 'BasicTableUI', 'BasicTextAreaUI', 'BasicTextFieldUI', 'BasicTextPaneUI', 'BasicTextUI', 'BasicTextUI.BasicCaret', 'BasicTextUI.BasicHighlighter', 'BasicToggleButtonUI', 'BasicToolBarSeparatorUI', 'BasicToolBarUI', 'BasicToolTipUI', 'BasicTreeUI', 'BasicViewportUI', 'ComboPopup', 'DefaultMenuLayout'
+ ),
+ 112 => array (
+ 'DefaultMetalTheme', 'MetalBorders', 'MetalBorders.ButtonBorder', 'MetalBorders.Flush3DBorder', 'MetalBorders.InternalFrameBorder', 'MetalBorders.MenuBarBorder', 'MetalBorders.MenuItemBorder', 'MetalBorders.OptionDialogBorder', 'MetalBorders.PaletteBorder', 'MetalBorders.PopupMenuBorder', 'MetalBorders.RolloverButtonBorder', 'MetalBorders.ScrollPaneBorder', 'MetalBorders.TableHeaderBorder', 'MetalBorders.TextFieldBorder', 'MetalBorders.ToggleButtonBorder', 'MetalBorders.ToolBarBorder', 'MetalButtonUI', 'MetalCheckBoxIcon', 'MetalCheckBoxUI', 'MetalComboBoxButton', 'MetalComboBoxEditor', 'MetalComboBoxEditor.UIResource', 'MetalComboBoxIcon', 'MetalComboBoxUI', 'MetalDesktopIconUI', 'MetalFileChooserUI', 'MetalIconFactory', 'MetalIconFactory.FileIcon16', 'MetalIconFactory.FolderIcon16', 'MetalIconFactory.PaletteCloseIcon', 'MetalIconFactory.TreeControlIcon', 'MetalIconFactory.TreeFolderIcon', 'MetalIconFactory.TreeLeafIcon', 'MetalInternalFrameTitlePane', 'MetalInternalFrameUI', 'MetalLabelUI',
+ 'MetalLookAndFeel', 'MetalMenuBarUI', 'MetalPopupMenuSeparatorUI', 'MetalProgressBarUI', 'MetalRadioButtonUI', 'MetalRootPaneUI', 'MetalScrollBarUI', 'MetalScrollButton', 'MetalScrollPaneUI', 'MetalSeparatorUI', 'MetalSliderUI', 'MetalSplitPaneUI', 'MetalTabbedPaneUI', 'MetalTextFieldUI', 'MetalTheme', 'MetalToggleButtonUI', 'MetalToolBarUI', 'MetalToolTipUI', 'MetalTreeUI', 'OceanTheme'
+ ),
+ 113 => array (
+ 'MultiButtonUI', 'MultiColorChooserUI', 'MultiComboBoxUI', 'MultiDesktopIconUI', 'MultiDesktopPaneUI', 'MultiFileChooserUI', 'MultiInternalFrameUI', 'MultiLabelUI', 'MultiListUI', 'MultiLookAndFeel', 'MultiMenuBarUI', 'MultiMenuItemUI', 'MultiOptionPaneUI', 'MultiPanelUI', 'MultiPopupMenuUI', 'MultiProgressBarUI', 'MultiRootPaneUI', 'MultiScrollBarUI', 'MultiScrollPaneUI', 'MultiSeparatorUI', 'MultiSliderUI', 'MultiSpinnerUI', 'MultiSplitPaneUI', 'MultiTabbedPaneUI', 'MultiTableHeaderUI', 'MultiTableUI', 'MultiTextUI', 'MultiToolBarUI', 'MultiToolTipUI', 'MultiTreeUI', 'MultiViewportUI'
+ ),
+ 114 => array (
+ 'ColorType', 'Region', 'SynthConstants', 'SynthContext', 'SynthGraphicsUtils', 'SynthLookAndFeel', 'SynthPainter', 'SynthStyle', 'SynthStyleFactory'
+ ),
+ 115 => array (
+ 'AbstractTableModel', 'DefaultTableCellRenderer', 'DefaultTableCellRenderer.UIResource', 'DefaultTableColumnModel', 'DefaultTableModel', 'JTableHeader', 'TableCellEditor', 'TableCellRenderer', 'TableColumn', 'TableColumnModel', 'TableModel'
+ ),
+ 116 => array (
+ 'AbstractDocument', 'AbstractDocument.AttributeContext', 'AbstractDocument.Content', 'AbstractDocument.ElementEdit', 'AbstractWriter', 'AsyncBoxView', 'AttributeSet.CharacterAttribute', 'AttributeSet.ColorAttribute', 'AttributeSet.FontAttribute', 'AttributeSet.ParagraphAttribute', 'BadLocationException', 'BoxView', 'Caret', 'ChangedCharSetException', 'ComponentView', 'CompositeView', 'DateFormatter', 'DefaultCaret', 'DefaultEditorKit', 'DefaultEditorKit.BeepAction', 'DefaultEditorKit.CopyAction', 'DefaultEditorKit.CutAction', 'DefaultEditorKit.DefaultKeyTypedAction', 'DefaultEditorKit.InsertBreakAction', 'DefaultEditorKit.InsertContentAction', 'DefaultEditorKit.InsertTabAction', 'DefaultEditorKit.PasteAction', 'DefaultFormatter', 'DefaultFormatterFactory', 'DefaultHighlighter', 'DefaultHighlighter.DefaultHighlightPainter', 'DefaultStyledDocument', 'DefaultStyledDocument.AttributeUndoableEdit', 'DefaultStyledDocument.ElementSpec', 'DefaultTextUI', 'DocumentFilter', 'DocumentFilter.FilterBypass',
+ 'EditorKit', 'ElementIterator', 'FieldView', 'FlowView', 'FlowView.FlowStrategy', 'GapContent', 'GlyphView', 'GlyphView.GlyphPainter', 'Highlighter', 'Highlighter.Highlight', 'Highlighter.HighlightPainter', 'IconView', 'InternationalFormatter', 'JTextComponent', 'JTextComponent.KeyBinding', 'Keymap', 'LabelView', 'LayeredHighlighter', 'LayeredHighlighter.LayerPainter', 'LayoutQueue', 'MaskFormatter', 'MutableAttributeSet', 'NavigationFilter', 'NavigationFilter.FilterBypass', 'NumberFormatter', 'PasswordView', 'PlainDocument', 'PlainView', 'Position', 'Position.Bias', 'Segment', 'SimpleAttributeSet', 'StringContent', 'Style', 'StyleConstants', 'StyleConstants.CharacterConstants', 'StyleConstants.ColorConstants', 'StyleConstants.FontConstants', 'StyleConstants.ParagraphConstants', 'StyleContext', 'StyledDocument', 'StyledEditorKit', 'StyledEditorKit.AlignmentAction', 'StyledEditorKit.BoldAction', 'StyledEditorKit.FontFamilyAction', 'StyledEditorKit.FontSizeAction', 'StyledEditorKit.ForegroundAction',
+ 'StyledEditorKit.ItalicAction', 'StyledEditorKit.StyledTextAction', 'StyledEditorKit.UnderlineAction', 'TabExpander', 'TabSet', 'TabStop', 'TabableView', 'TableView', 'TextAction', 'Utilities', 'View', 'ViewFactory', 'WrappedPlainView', 'ZoneView'
+ ),
+ 117 => array (
+ 'BlockView', 'CSS', 'CSS.Attribute', 'FormSubmitEvent', 'FormSubmitEvent.MethodType', 'FormView', 'HTML', 'HTML.Attribute', 'HTML.Tag', 'HTML.UnknownTag', 'HTMLDocument', 'HTMLDocument.Iterator', 'HTMLEditorKit', 'HTMLEditorKit.HTMLFactory', 'HTMLEditorKit.HTMLTextAction', 'HTMLEditorKit.InsertHTMLTextAction', 'HTMLEditorKit.LinkController', 'HTMLEditorKit.Parser', 'HTMLEditorKit.ParserCallback', 'HTMLFrameHyperlinkEvent', 'HTMLWriter', 'ImageView', 'InlineView', 'ListView', 'MinimalHTMLWriter', 'ObjectView', 'Option', 'StyleSheet', 'StyleSheet.BoxPainter', 'StyleSheet.ListPainter'
+ ),
+ 118 => array (
+ 'ContentModel', 'DTD', 'DTDConstants', 'DocumentParser', 'ParserDelegator', 'TagElement'
+ ),
+ 119 => array (
+ 'RTFEditorKit'
+ ),
+ 120 => array (
+ 'AbstractLayoutCache', 'AbstractLayoutCache.NodeDimensions', 'DefaultMutableTreeNode', 'DefaultTreeCellEditor', 'DefaultTreeCellRenderer', 'DefaultTreeModel', 'DefaultTreeSelectionModel', 'ExpandVetoException', 'FixedHeightLayoutCache', 'MutableTreeNode', 'RowMapper', 'TreeCellEditor', 'TreeCellRenderer', 'TreeModel', 'TreeNode', 'TreePath', 'TreeSelectionModel', 'VariableHeightLayoutCache'
+ ),
+ 121 => array (
+ 'AbstractUndoableEdit', 'CannotRedoException', 'CannotUndoException', 'CompoundEdit', 'StateEdit', 'StateEditable', 'UndoManager', 'UndoableEdit', 'UndoableEditSupport'
+ ),
+ 122 => array (
+ 'InvalidTransactionException', 'TransactionRequiredException', 'TransactionRolledbackException'
+ ),
+ 123 => array (
+ 'XAException', 'XAResource', 'Xid'
+ ),
+ 124 => array (
+ 'XMLConstants'
+ ),
+ 125 => array (
+ 'DatatypeConfigurationException', 'DatatypeConstants', 'DatatypeConstants.Field', 'DatatypeFactory', 'Duration', 'XMLGregorianCalendar'
+ ),
+ 126 => array (
+ 'NamespaceContext', 'QName'
+ ),
+ 127 => array (
+ 'DocumentBuilder', 'DocumentBuilderFactory', 'FactoryConfigurationError', 'ParserConfigurationException', 'SAXParser', 'SAXParserFactory'
+ ),
+ 128 => array (
+ 'ErrorListener', 'OutputKeys', 'Result', 'Source', 'SourceLocator', 'Templates', 'Transformer', 'TransformerConfigurationException', 'TransformerException', 'TransformerFactory', 'TransformerFactoryConfigurationError', 'URIResolver'
+ ),
+ 129 => array (
+ 'DOMResult', 'DOMSource'
+ ),
+ 130 => array (
+ 'SAXResult', 'SAXSource', 'SAXTransformerFactory', 'TemplatesHandler', 'TransformerHandler'
+ ),
+ 131 => array (
+ 'StreamResult', 'StreamSource'
+ ),
+ 132 => array (
+ 'Schema', 'SchemaFactory', 'SchemaFactoryLoader', 'TypeInfoProvider', 'Validator', 'ValidatorHandler'
+ ),
+ 133 => array (
+ 'XPath', 'XPathConstants', 'XPathException', 'XPathExpression', 'XPathExpressionException', 'XPathFactory', 'XPathFactoryConfigurationException', 'XPathFunction', 'XPathFunctionException', 'XPathFunctionResolver', 'XPathVariableResolver'
+ ),
+ 134 => array (
+ 'ChannelBinding', 'GSSContext', 'GSSCredential', 'GSSException', 'GSSManager', 'GSSName', 'MessageProp', 'Oid'
+ ),
+ 135 => array (
+ 'ACTIVITY_COMPLETED', 'ACTIVITY_REQUIRED', 'ARG_IN', 'ARG_INOUT', 'ARG_OUT', 'Any', 'AnyHolder', 'AnySeqHolder', 'BAD_CONTEXT', 'BAD_INV_ORDER', 'BAD_OPERATION', 'BAD_PARAM', 'BAD_POLICY', 'BAD_POLICY_TYPE', 'BAD_POLICY_VALUE', 'BAD_QOS', 'BAD_TYPECODE', 'BooleanHolder', 'BooleanSeqHelper', 'BooleanSeqHolder', 'ByteHolder', 'CODESET_INCOMPATIBLE', 'COMM_FAILURE', 'CTX_RESTRICT_SCOPE', 'CharHolder', 'CharSeqHelper', 'CharSeqHolder', 'CompletionStatus', 'CompletionStatusHelper', 'ContextList', 'CurrentHolder', 'CustomMarshal', 'DATA_CONVERSION', 'DefinitionKind', 'DefinitionKindHelper', 'DomainManager', 'DomainManagerOperations', 'DoubleHolder', 'DoubleSeqHelper', 'DoubleSeqHolder', 'Environment', 'ExceptionList', 'FREE_MEM', 'FixedHolder', 'FloatHolder', 'FloatSeqHelper', 'FloatSeqHolder', 'IDLType', 'IDLTypeHelper', 'IDLTypeOperations', 'IMP_LIMIT', 'INITIALIZE', 'INTERNAL', 'INTF_REPOS', 'INVALID_ACTIVITY', 'INVALID_TRANSACTION', 'INV_FLAG', 'INV_IDENT', 'INV_OBJREF', 'INV_POLICY', 'IRObject',
+ 'IRObjectOperations', 'IdentifierHelper', 'IntHolder', 'LocalObject', 'LongHolder', 'LongLongSeqHelper', 'LongLongSeqHolder', 'LongSeqHelper', 'LongSeqHolder', 'MARSHAL', 'NO_IMPLEMENT', 'NO_MEMORY', 'NO_PERMISSION', 'NO_RESOURCES', 'NO_RESPONSE', 'NVList', 'NamedValue', 'OBJECT_NOT_EXIST', 'OBJ_ADAPTER', 'OMGVMCID', 'ObjectHelper', 'ObjectHolder', 'OctetSeqHelper', 'OctetSeqHolder', 'PERSIST_STORE', 'PRIVATE_MEMBER', 'PUBLIC_MEMBER', 'ParameterMode', 'ParameterModeHelper', 'ParameterModeHolder', 'PolicyError', 'PolicyErrorCodeHelper', 'PolicyErrorHelper', 'PolicyErrorHolder', 'PolicyHelper', 'PolicyHolder', 'PolicyListHelper', 'PolicyListHolder', 'PolicyOperations', 'PolicyTypeHelper', 'PrincipalHolder', 'REBIND', 'RepositoryIdHelper', 'Request', 'ServerRequest', 'ServiceDetail', 'ServiceDetailHelper', 'ServiceInformation', 'ServiceInformationHelper', 'ServiceInformationHolder', 'SetOverrideType', 'SetOverrideTypeHelper', 'ShortHolder', 'ShortSeqHelper', 'ShortSeqHolder', 'StringHolder',
+ 'StringSeqHelper', 'StringSeqHolder', 'StringValueHelper', 'StructMember', 'StructMemberHelper', 'SystemException', 'TCKind', 'TIMEOUT', 'TRANSACTION_MODE', 'TRANSACTION_REQUIRED', 'TRANSACTION_ROLLEDBACK', 'TRANSACTION_UNAVAILABLE', 'TRANSIENT', 'TypeCode', 'TypeCodeHolder', 'ULongLongSeqHelper', 'ULongLongSeqHolder', 'ULongSeqHelper', 'ULongSeqHolder', 'UNSUPPORTED_POLICY', 'UNSUPPORTED_POLICY_VALUE', 'UShortSeqHelper', 'UShortSeqHolder', 'UnionMember', 'UnionMemberHelper', 'UnknownUserException', 'UnknownUserExceptionHelper', 'UnknownUserExceptionHolder', 'UserException', 'VM_ABSTRACT', 'VM_CUSTOM', 'VM_NONE', 'VM_TRUNCATABLE', 'ValueBaseHelper', 'ValueBaseHolder', 'ValueMember', 'ValueMemberHelper', 'VersionSpecHelper', 'VisibilityHelper', 'WCharSeqHelper', 'WCharSeqHolder', 'WStringSeqHelper', 'WStringSeqHolder', 'WStringValueHelper', 'WrongTransaction', 'WrongTransactionHelper', 'WrongTransactionHolder', '_IDLTypeStub', '_PolicyStub'
+ ),
+ 136 => array (
+ 'Invalid', 'InvalidSeq'
+ ),
+ 137 => array (
+ 'BadKind'
+ ),
+ 138 => array (
+ 'ApplicationException', 'BoxedValueHelper', 'CustomValue', 'IDLEntity', 'IndirectionException', 'InvokeHandler', 'RemarshalException', 'ResponseHandler', 'ServantObject', 'Streamable', 'StreamableValue', 'UnknownException', 'ValueBase', 'ValueFactory', 'ValueInputStream', 'ValueOutputStream'
+ ),
+ 139 => array (
+ 'BindingHelper', 'BindingHolder', 'BindingIterator', 'BindingIteratorHelper', 'BindingIteratorHolder', 'BindingIteratorOperations', 'BindingIteratorPOA', 'BindingListHelper', 'BindingListHolder', 'BindingType', 'BindingTypeHelper', 'BindingTypeHolder', 'IstringHelper', 'NameComponent', 'NameComponentHelper', 'NameComponentHolder', 'NameHelper', 'NameHolder', 'NamingContext', 'NamingContextExt', 'NamingContextExtHelper', 'NamingContextExtHolder', 'NamingContextExtOperations', 'NamingContextExtPOA', 'NamingContextHelper', 'NamingContextHolder', 'NamingContextOperations', 'NamingContextPOA', '_BindingIteratorImplBase', '_BindingIteratorStub', '_NamingContextExtStub', '_NamingContextImplBase', '_NamingContextStub'
+ ),
+ 140 => array (
+ 'AddressHelper', 'InvalidAddress', 'InvalidAddressHelper', 'InvalidAddressHolder', 'StringNameHelper', 'URLStringHelper'
+ ),
+ 141 => array (
+ 'AlreadyBound', 'AlreadyBoundHelper', 'AlreadyBoundHolder', 'CannotProceed', 'CannotProceedHelper', 'CannotProceedHolder', 'InvalidNameHolder', 'NotEmpty', 'NotEmptyHelper', 'NotEmptyHolder', 'NotFound', 'NotFoundHelper', 'NotFoundHolder', 'NotFoundReason', 'NotFoundReasonHelper', 'NotFoundReasonHolder'
+ ),
+ 142 => array (
+ 'Parameter'
+ ),
+ 143 => array (
+ 'DynAnyFactory', 'DynAnyFactoryHelper', 'DynAnyFactoryOperations', 'DynAnyHelper', 'DynAnyOperations', 'DynAnySeqHelper', 'DynArrayHelper', 'DynArrayOperations', 'DynEnumHelper', 'DynEnumOperations', 'DynFixedHelper', 'DynFixedOperations', 'DynSequenceHelper', 'DynSequenceOperations', 'DynStructHelper', 'DynStructOperations', 'DynUnionHelper', 'DynUnionOperations', 'DynValueBox', 'DynValueBoxOperations', 'DynValueCommon', 'DynValueCommonOperations', 'DynValueHelper', 'DynValueOperations', 'NameDynAnyPair', 'NameDynAnyPairHelper', 'NameDynAnyPairSeqHelper', 'NameValuePairSeqHelper', '_DynAnyFactoryStub', '_DynAnyStub', '_DynArrayStub', '_DynEnumStub', '_DynFixedStub', '_DynSequenceStub', '_DynStructStub', '_DynUnionStub', '_DynValueStub'
+ ),
+ 144 => array (
+ 'InconsistentTypeCodeHelper'
+ ),
+ 145 => array (
+ 'InvalidValueHelper'
+ ),
+ 146 => array (
+ 'CodeSets', 'Codec', 'CodecFactory', 'CodecFactoryHelper', 'CodecFactoryOperations', 'CodecOperations', 'ComponentIdHelper', 'ENCODING_CDR_ENCAPS', 'Encoding', 'ExceptionDetailMessage', 'IOR', 'IORHelper', 'IORHolder', 'MultipleComponentProfileHelper', 'MultipleComponentProfileHolder', 'ProfileIdHelper', 'RMICustomMaxStreamFormat', 'ServiceContext', 'ServiceContextHelper', 'ServiceContextHolder', 'ServiceContextListHelper', 'ServiceContextListHolder', 'ServiceIdHelper', 'TAG_ALTERNATE_IIOP_ADDRESS', 'TAG_CODE_SETS', 'TAG_INTERNET_IOP', 'TAG_JAVA_CODEBASE', 'TAG_MULTIPLE_COMPONENTS', 'TAG_ORB_TYPE', 'TAG_POLICIES', 'TAG_RMI_CUSTOM_MAX_STREAM_FORMAT', 'TaggedComponent', 'TaggedComponentHelper', 'TaggedComponentHolder', 'TaggedProfile', 'TaggedProfileHelper', 'TaggedProfileHolder', 'TransactionService'
+ ),
+ 147 => array (
+ 'UnknownEncoding', 'UnknownEncodingHelper'
+ ),
+ 148 => array (
+ 'FormatMismatch', 'FormatMismatchHelper', 'InvalidTypeForEncoding', 'InvalidTypeForEncodingHelper'
+ ),
+ 149 => array (
+ 'SYNC_WITH_TRANSPORT', 'SyncScopeHelper'
+ ),
+ 150 => array (
+ 'ACTIVE', 'AdapterManagerIdHelper', 'AdapterNameHelper', 'AdapterStateHelper', 'ClientRequestInfo', 'ClientRequestInfoOperations', 'ClientRequestInterceptor', 'ClientRequestInterceptorOperations', 'DISCARDING', 'HOLDING', 'INACTIVE', 'IORInfo', 'IORInfoOperations', 'IORInterceptor', 'IORInterceptorOperations', 'IORInterceptor_3_0', 'IORInterceptor_3_0Helper', 'IORInterceptor_3_0Holder', 'IORInterceptor_3_0Operations', 'Interceptor', 'InterceptorOperations', 'InvalidSlot', 'InvalidSlotHelper', 'LOCATION_FORWARD', 'NON_EXISTENT', 'ORBIdHelper', 'ORBInitInfo', 'ORBInitInfoOperations', 'ORBInitializer', 'ORBInitializerOperations', 'ObjectReferenceFactory', 'ObjectReferenceFactoryHelper', 'ObjectReferenceFactoryHolder', 'ObjectReferenceTemplate', 'ObjectReferenceTemplateHelper', 'ObjectReferenceTemplateHolder', 'ObjectReferenceTemplateSeqHelper', 'ObjectReferenceTemplateSeqHolder', 'PolicyFactory', 'PolicyFactoryOperations', 'RequestInfo', 'RequestInfoOperations', 'SUCCESSFUL', 'SYSTEM_EXCEPTION',
+ 'ServerIdHelper', 'ServerRequestInfo', 'ServerRequestInfoOperations', 'ServerRequestInterceptor', 'ServerRequestInterceptorOperations', 'TRANSPORT_RETRY', 'USER_EXCEPTION'
+ ),
+ 151 => array (
+ 'DuplicateName', 'DuplicateNameHelper'
+ ),
+ 152 => array (
+ 'AdapterActivator', 'AdapterActivatorOperations', 'ID_ASSIGNMENT_POLICY_ID', 'ID_UNIQUENESS_POLICY_ID', 'IMPLICIT_ACTIVATION_POLICY_ID', 'IdAssignmentPolicy', 'IdAssignmentPolicyOperations', 'IdAssignmentPolicyValue', 'IdUniquenessPolicy', 'IdUniquenessPolicyOperations', 'IdUniquenessPolicyValue', 'ImplicitActivationPolicy', 'ImplicitActivationPolicyOperations', 'ImplicitActivationPolicyValue', 'LIFESPAN_POLICY_ID', 'LifespanPolicy', 'LifespanPolicyOperations', 'LifespanPolicyValue', 'POA', 'POAHelper', 'POAManager', 'POAManagerOperations', 'POAOperations', 'REQUEST_PROCESSING_POLICY_ID', 'RequestProcessingPolicy', 'RequestProcessingPolicyOperations', 'RequestProcessingPolicyValue', 'SERVANT_RETENTION_POLICY_ID', 'Servant', 'ServantActivator', 'ServantActivatorHelper', 'ServantActivatorOperations', 'ServantActivatorPOA', 'ServantLocator', 'ServantLocatorHelper', 'ServantLocatorOperations', 'ServantLocatorPOA', 'ServantManager', 'ServantManagerOperations', 'ServantRetentionPolicy',
+ 'ServantRetentionPolicyOperations', 'ServantRetentionPolicyValue', 'THREAD_POLICY_ID', 'ThreadPolicy', 'ThreadPolicyOperations', 'ThreadPolicyValue', '_ServantActivatorStub', '_ServantLocatorStub'
+ ),
+ 153 => array (
+ 'NoContext', 'NoContextHelper'
+ ),
+ 154 => array (
+ 'AdapterInactive', 'AdapterInactiveHelper', 'State'
+ ),
+ 155 => array (
+ 'AdapterAlreadyExists', 'AdapterAlreadyExistsHelper', 'AdapterNonExistent', 'AdapterNonExistentHelper', 'InvalidPolicy', 'InvalidPolicyHelper', 'NoServant', 'NoServantHelper', 'ObjectAlreadyActive', 'ObjectAlreadyActiveHelper', 'ObjectNotActive', 'ObjectNotActiveHelper', 'ServantAlreadyActive', 'ServantAlreadyActiveHelper', 'ServantNotActive', 'ServantNotActiveHelper', 'WrongAdapter', 'WrongAdapterHelper', 'WrongPolicy', 'WrongPolicyHelper'
+ ),
+ 156 => array (
+ 'CookieHolder'
+ ),
+ 157 => array (
+ 'RunTime', 'RunTimeOperations'
+ ),
+ 158 => array (
+ '_Remote_Stub'
+ ),
+ 159 => array (
+ 'Attr', 'CDATASection', 'CharacterData', 'Comment', 'DOMConfiguration', 'DOMError', 'DOMErrorHandler', 'DOMException', 'DOMImplementation', 'DOMImplementationList', 'DOMImplementationSource', 'DOMStringList', 'DocumentFragment', 'DocumentType', 'EntityReference', 'NameList', 'NamedNodeMap', 'Node', 'NodeList', 'Notation', 'ProcessingInstruction', 'Text', 'TypeInfo', 'UserDataHandler'
+ ),
+ 160 => array (
+ 'DOMImplementationRegistry'
+ ),
+ 161 => array (
+ 'EventException', 'EventTarget', 'MutationEvent', 'UIEvent'
+ ),
+ 162 => array (
+ 'DOMImplementationLS', 'LSException', 'LSInput', 'LSLoadEvent', 'LSOutput', 'LSParser', 'LSParserFilter', 'LSProgressEvent', 'LSResourceResolver', 'LSSerializer', 'LSSerializerFilter'
+ ),
+ 163 => array (
+ 'DTDHandler', 'DocumentHandler', 'EntityResolver', 'ErrorHandler', 'HandlerBase', 'InputSource', 'Locator', 'SAXException', 'SAXNotRecognizedException', 'SAXNotSupportedException', 'SAXParseException', 'XMLFilter', 'XMLReader'
+ ),
+ 164 => array (
+ 'Attributes2', 'Attributes2Impl', 'DeclHandler', 'DefaultHandler2', 'EntityResolver2', 'LexicalHandler', 'Locator2', 'Locator2Impl'
+ ),
+ 165 => array (
+ 'AttributeListImpl', 'AttributesImpl', 'DefaultHandler', 'LocatorImpl', 'NamespaceSupport', 'ParserAdapter', 'ParserFactory', 'XMLFilterImpl', 'XMLReaderAdapter', 'XMLReaderFactory'
+ ),
+ /* ambiguous class names (appear in more than one package) */
+ 166 => array (
+ 'Annotation', 'AnySeqHelper', 'Array', 'Attribute', 'AttributeList', 'AttributeSet', 'Attributes', 'AuthenticationException', 'Binding', 'Bounds', 'Certificate', 'CertificateEncodingException', 'CertificateException', 'CertificateExpiredException', 'CertificateNotYetValidException', 'CertificateParsingException', 'ConnectException', 'ContentHandler', 'Context', 'Control', 'Current', 'CurrentHelper', 'CurrentOperations', 'DOMLocator', 'DataInputStream', 'DataOutputStream', 'Date', 'DefaultLoaderRepository', 'Delegate', 'Document', 'DocumentEvent', 'DynAny', 'DynArray', 'DynEnum', 'DynFixed', 'DynSequence', 'DynStruct', 'DynUnion', 'DynValue', 'DynamicImplementation', 'Element', 'Entity', 'Event', 'EventListener', 'FieldNameHelper', 'FileFilter', 'Formatter', 'ForwardRequest', 'ForwardRequestHelper', 'InconsistentTypeCode', 'InputStream', 'IntrospectionException', 'InvalidAttributeValueException', 'InvalidKeyException', 'InvalidName', 'InvalidNameHelper', 'InvalidValue', 'List', 'MouseEvent',
+ 'NameValuePair', 'NameValuePairHelper', 'ORB', 'Object', 'ObjectIdHelper', 'ObjectImpl', 'OpenType', 'OutputStream', 'ParagraphView', 'Parser', 'Permission', 'Policy', 'Principal', 'Proxy', 'Reference', 'Statement', 'Timer', 'Timestamp', 'TypeMismatch', 'TypeMismatchHelper', 'UNKNOWN', 'UnknownHostException', 'X509Certificate'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '[', ']', '{', '}', '*', '&', '%', '!', ';', '<', '>', '?'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ /* all Java keywords are case sensitive */
+ 1 => true, 2 => true, 3 => true, 4 => true,
+ 5 => true, 6 => true, 7 => true, 8 => true, 9 => true,
+ 10 => true, 11 => true, 12 => true, 13 => true, 14 => true,
+ 15 => true, 16 => true, 17 => true, 18 => true, 19 => true,
+ 20 => true, 21 => true, 22 => true, 23 => true, 24 => true,
+ 25 => true, 26 => true, 27 => true, 28 => true, 29 => true,
+ 30 => true, 31 => true, 32 => true, 33 => true, 34 => true,
+ 35 => true, 36 => true, 37 => true, 38 => true, 39 => true,
+ 40 => true, 41 => true, 42 => true, 43 => true, 44 => true,
+ 45 => true, 46 => true, 47 => true, 48 => true, 49 => true,
+ 50 => true, 51 => true, 52 => true, 53 => true, 54 => true,
+ 55 => true, 56 => true, 57 => true, 58 => true, 59 => true,
+ 60 => true, 61 => true, 62 => true, 63 => true, 64 => true,
+ 65 => true, 66 => true, 67 => true, 68 => true, 69 => true,
+ 70 => true, 71 => true, 72 => true, 73 => true, 74 => true,
+ 75 => true, 76 => true, 77 => true, 78 => true, 79 => true,
+ 80 => true, 81 => true, 82 => true, 83 => true, 84 => true,
+ 85 => true, 86 => true, 87 => true, 88 => true, 89 => true,
+ 90 => true, 91 => true, 92 => true, 93 => true, 94 => true,
+ 95 => true, 96 => true, 97 => true, 98 => true, 99 => true,
+ 100 => true, 101 => true, 102 => true, 103 => true, 104 => true,
+ 105 => true, 106 => true, 107 => true, 108 => true, 109 => true,
+ 110 => true, 111 => true, 112 => true, 113 => true, 114 => true,
+ 115 => true, 116 => true, 117 => true, 118 => true, 119 => true,
+ 120 => true, 121 => true, 122 => true, 123 => true, 124 => true,
+ 125 => true, 126 => true, 127 => true, 128 => true, 129 => true,
+ 130 => true, 131 => true, 132 => true, 133 => true, 134 => true,
+ 135 => true, 136 => true, 137 => true, 138 => true, 139 => true,
+ 140 => true, 141 => true, 142 => true, 143 => true, 144 => true,
+ 145 => true, 146 => true, 147 => true, 148 => true, 149 => true,
+ 150 => true, 151 => true, 152 => true, 153 => true, 154 => true,
+ 155 => true, 156 => true, 157 => true, 158 => true, 159 => true,
+ 160 => true, 161 => true, 162 => true, 163 => true, 164 => true,
+ 165 => true, 166 => true
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #000000; font-weight: bold;',
+ 2 => 'color: #000000; font-weight: bold;',
+ 3 => 'color: #006600; font-weight: bold;',
+ 4 => 'color: #006600; font-weight: bold;',
+ 5 => 'color: #003399; font-weight: bold;',
+ 6 => 'color: #003399; font-weight: bold;',
+ 7 => 'color: #003399; font-weight: bold;',
+ 8 => 'color: #003399; font-weight: bold;',
+ 9 => 'color: #003399; font-weight: bold;',
+ 10 => 'color: #003399; font-weight: bold;',
+ 11 => 'color: #003399; font-weight: bold;',
+ 12 => 'color: #003399; font-weight: bold;',
+ 13 => 'color: #003399; font-weight: bold;',
+ 14 => 'color: #003399; font-weight: bold;',
+ 15 => 'color: #003399; font-weight: bold;',
+ 16 => 'color: #003399; font-weight: bold;',
+ 17 => 'color: #003399; font-weight: bold;',
+ 18 => 'color: #003399; font-weight: bold;',
+ 19 => 'color: #003399; font-weight: bold;',
+ 20 => 'color: #003399; font-weight: bold;',
+ 21 => 'color: #003399; font-weight: bold;',
+ 22 => 'color: #003399; font-weight: bold;',
+ 23 => 'color: #003399; font-weight: bold;',
+ 24 => 'color: #003399; font-weight: bold;',
+ 25 => 'color: #003399; font-weight: bold;',
+ 26 => 'color: #003399; font-weight: bold;',
+ 27 => 'color: #003399; font-weight: bold;',
+ 28 => 'color: #003399; font-weight: bold;',
+ 29 => 'color: #003399; font-weight: bold;',
+ 30 => 'color: #003399; font-weight: bold;',
+ 31 => 'color: #003399; font-weight: bold;',
+ 32 => 'color: #003399; font-weight: bold;',
+ 33 => 'color: #003399; font-weight: bold;',
+ 34 => 'color: #003399; font-weight: bold;',
+ 35 => 'color: #003399; font-weight: bold;',
+ 36 => 'color: #003399; font-weight: bold;',
+ 37 => 'color: #003399; font-weight: bold;',
+ 38 => 'color: #003399; font-weight: bold;',
+ 39 => 'color: #003399; font-weight: bold;',
+ 40 => 'color: #003399; font-weight: bold;',
+ 41 => 'color: #003399; font-weight: bold;',
+ 42 => 'color: #003399; font-weight: bold;',
+ 43 => 'color: #003399; font-weight: bold;',
+ 44 => 'color: #003399; font-weight: bold;',
+ 45 => 'color: #003399; font-weight: bold;',
+ 46 => 'color: #003399; font-weight: bold;',
+ 47 => 'color: #003399; font-weight: bold;',
+ 48 => 'color: #003399; font-weight: bold;',
+ 49 => 'color: #003399; font-weight: bold;',
+ 50 => 'color: #003399; font-weight: bold;',
+ 51 => 'color: #003399; font-weight: bold;',
+ 52 => 'color: #003399; font-weight: bold;',
+ 53 => 'color: #003399; font-weight: bold;',
+ 54 => 'color: #003399; font-weight: bold;',
+ 55 => 'color: #003399; font-weight: bold;',
+ 56 => 'color: #003399; font-weight: bold;',
+ 57 => 'color: #003399; font-weight: bold;',
+ 58 => 'color: #003399; font-weight: bold;',
+ 59 => 'color: #003399; font-weight: bold;',
+ 60 => 'color: #003399; font-weight: bold;',
+ 61 => 'color: #003399; font-weight: bold;',
+ 62 => 'color: #003399; font-weight: bold;',
+ 63 => 'color: #003399; font-weight: bold;',
+ 64 => 'color: #003399; font-weight: bold;',
+ 65 => 'color: #003399; font-weight: bold;',
+ 66 => 'color: #003399; font-weight: bold;',
+ 67 => 'color: #003399; font-weight: bold;',
+ 68 => 'color: #003399; font-weight: bold;',
+ 69 => 'color: #003399; font-weight: bold;',
+ 70 => 'color: #003399; font-weight: bold;',
+ 71 => 'color: #003399; font-weight: bold;',
+ 72 => 'color: #003399; font-weight: bold;',
+ 73 => 'color: #003399; font-weight: bold;',
+ 74 => 'color: #003399; font-weight: bold;',
+ 75 => 'color: #003399; font-weight: bold;',
+ 76 => 'color: #003399; font-weight: bold;',
+ 77 => 'color: #003399; font-weight: bold;',
+ 78 => 'color: #003399; font-weight: bold;',
+ 79 => 'color: #003399; font-weight: bold;',
+ 80 => 'color: #003399; font-weight: bold;',
+ 81 => 'color: #003399; font-weight: bold;',
+ 82 => 'color: #003399; font-weight: bold;',
+ 83 => 'color: #003399; font-weight: bold;',
+ 84 => 'color: #003399; font-weight: bold;',
+ 85 => 'color: #003399; font-weight: bold;',
+ 86 => 'color: #003399; font-weight: bold;',
+ 87 => 'color: #003399; font-weight: bold;',
+ 88 => 'color: #003399; font-weight: bold;',
+ 89 => 'color: #003399; font-weight: bold;',
+ 90 => 'color: #003399; font-weight: bold;',
+ 91 => 'color: #003399; font-weight: bold;',
+ 92 => 'color: #003399; font-weight: bold;',
+ 93 => 'color: #003399; font-weight: bold;',
+ 94 => 'color: #003399; font-weight: bold;',
+ 95 => 'color: #003399; font-weight: bold;',
+ 96 => 'color: #003399; font-weight: bold;',
+ 97 => 'color: #003399; font-weight: bold;',
+ 98 => 'color: #003399; font-weight: bold;',
+ 99 => 'color: #003399; font-weight: bold;',
+ 100 => 'color: #003399; font-weight: bold;',
+ 101 => 'color: #003399; font-weight: bold;',
+ 102 => 'color: #003399; font-weight: bold;',
+ 103 => 'color: #003399; font-weight: bold;',
+ 104 => 'color: #003399; font-weight: bold;',
+ 105 => 'color: #003399; font-weight: bold;',
+ 106 => 'color: #003399; font-weight: bold;',
+ 107 => 'color: #003399; font-weight: bold;',
+ 108 => 'color: #003399; font-weight: bold;',
+ 109 => 'color: #003399; font-weight: bold;',
+ 110 => 'color: #003399; font-weight: bold;',
+ 111 => 'color: #003399; font-weight: bold;',
+ 112 => 'color: #003399; font-weight: bold;',
+ 113 => 'color: #003399; font-weight: bold;',
+ 114 => 'color: #003399; font-weight: bold;',
+ 115 => 'color: #003399; font-weight: bold;',
+ 116 => 'color: #003399; font-weight: bold;',
+ 117 => 'color: #003399; font-weight: bold;',
+ 118 => 'color: #003399; font-weight: bold;',
+ 119 => 'color: #003399; font-weight: bold;',
+ 120 => 'color: #003399; font-weight: bold;',
+ 121 => 'color: #003399; font-weight: bold;',
+ 122 => 'color: #003399; font-weight: bold;',
+ 123 => 'color: #003399; font-weight: bold;',
+ 124 => 'color: #003399; font-weight: bold;',
+ 125 => 'color: #003399; font-weight: bold;',
+ 126 => 'color: #003399; font-weight: bold;',
+ 127 => 'color: #003399; font-weight: bold;',
+ 128 => 'color: #003399; font-weight: bold;',
+ 129 => 'color: #003399; font-weight: bold;',
+ 130 => 'color: #003399; font-weight: bold;',
+ 131 => 'color: #003399; font-weight: bold;',
+ 132 => 'color: #003399; font-weight: bold;',
+ 133 => 'color: #003399; font-weight: bold;',
+ 134 => 'color: #003399; font-weight: bold;',
+ 135 => 'color: #003399; font-weight: bold;',
+ 136 => 'color: #003399; font-weight: bold;',
+ 137 => 'color: #003399; font-weight: bold;',
+ 138 => 'color: #003399; font-weight: bold;',
+ 139 => 'color: #003399; font-weight: bold;',
+ 140 => 'color: #003399; font-weight: bold;',
+ 141 => 'color: #003399; font-weight: bold;',
+ 142 => 'color: #003399; font-weight: bold;',
+ 143 => 'color: #003399; font-weight: bold;',
+ 144 => 'color: #003399; font-weight: bold;',
+ 145 => 'color: #003399; font-weight: bold;',
+ 146 => 'color: #003399; font-weight: bold;',
+ 147 => 'color: #003399; font-weight: bold;',
+ 148 => 'color: #003399; font-weight: bold;',
+ 149 => 'color: #003399; font-weight: bold;',
+ 150 => 'color: #003399; font-weight: bold;',
+ 151 => 'color: #003399; font-weight: bold;',
+ 152 => 'color: #003399; font-weight: bold;',
+ 153 => 'color: #003399; font-weight: bold;',
+ 154 => 'color: #003399; font-weight: bold;',
+ 155 => 'color: #003399; font-weight: bold;',
+ 156 => 'color: #003399; font-weight: bold;',
+ 157 => 'color: #003399; font-weight: bold;',
+ 158 => 'color: #003399; font-weight: bold;',
+ 159 => 'color: #003399; font-weight: bold;',
+ 160 => 'color: #003399; font-weight: bold;',
+ 161 => 'color: #003399; font-weight: bold;',
+ 162 => 'color: #003399; font-weight: bold;',
+ 163 => 'color: #003399; font-weight: bold;',
+ 164 => 'color: #003399; font-weight: bold;',
+ 165 => 'color: #003399; font-weight: bold;',
+ 166 => 'color: #003399; font-weight: bold;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #666666; font-style: italic;',
+ 2 => 'color: #006699;',
+ 3 => 'color: #008000; font-style: italic; font-weight: bold;',
+ 'MULTI' => 'color: #666666; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #009900;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #0000ff;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #006633;',
+ 2 => 'color: #006633;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #339933;'
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => '',
+ 5 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/applet/{FNAME}.html',
+ 6 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/awt/{FNAME}.html',
+ 7 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/awt/color/{FNAME}.html',
+ 8 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/awt/datatransfer/{FNAME}.html',
+ 9 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/awt/dnd/{FNAME}.html',
+ 10 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/awt/event/{FNAME}.html',
+ 11 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/awt/font/{FNAME}.html',
+ 12 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/awt/geom/{FNAME}.html',
+ 13 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/awt/im/{FNAME}.html',
+ 14 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/awt/im/spi/{FNAME}.html',
+ 15 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/awt/image/{FNAME}.html',
+ 16 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/awt/image/renderable/{FNAME}.html',
+ 17 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/awt/print/{FNAME}.html',
+ 18 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/beans/{FNAME}.html',
+ 19 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/beans/beancontext/{FNAME}.html',
+ 20 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/io/{FNAME}.html',
+ 21 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/lang/{FNAME}.html',
+ 22 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/lang/annotation/{FNAME}.html',
+ 23 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/lang/instrument/{FNAME}.html',
+ 24 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/lang/management/{FNAME}.html',
+ 25 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/lang/ref/{FNAME}.html',
+ 26 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/lang/reflect/{FNAME}.html',
+ 27 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/math/{FNAME}.html',
+ 28 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/net/{FNAME}.html',
+ 29 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/nio/{FNAME}.html',
+ 30 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/nio/channels/{FNAME}.html',
+ 31 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/nio/channels/spi/{FNAME}.html',
+ 32 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/nio/charset/{FNAME}.html',
+ 33 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/nio/charset/spi/{FNAME}.html',
+ 34 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/rmi/{FNAME}.html',
+ 35 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/rmi/activation/{FNAME}.html',
+ 36 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/rmi/dgc/{FNAME}.html',
+ 37 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/rmi/registry/{FNAME}.html',
+ 38 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/rmi/server/{FNAME}.html',
+ 39 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/security/{FNAME}.html',
+ 40 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/security/acl/{FNAME}.html',
+ 41 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/security/cert/{FNAME}.html',
+ 42 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/security/interfaces/{FNAME}.html',
+ 43 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/security/spec/{FNAME}.html',
+ 44 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/sql/{FNAME}.html',
+ 45 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/text/{FNAME}.html',
+ 46 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/util/{FNAME}.html',
+ 47 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/{FNAME}.html',
+ 48 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/atomic/{FNAME}.html',
+ 49 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/locks/{FNAME}.html',
+ 50 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/util/jar/{FNAME}.html',
+ 51 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/util/logging/{FNAME}.html',
+ 52 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/util/prefs/{FNAME}.html',
+ 53 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/util/regex/{FNAME}.html',
+ 54 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/util/zip/{FNAME}.html',
+ 55 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/accessibility/{FNAME}.html',
+ 56 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/activity/{FNAME}.html',
+ 57 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/crypto/{FNAME}.html',
+ 58 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/crypto/interfaces/{FNAME}.html',
+ 59 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/crypto/spec/{FNAME}.html',
+ 60 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/imageio/{FNAME}.html',
+ 61 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/imageio/event/{FNAME}.html',
+ 62 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/imageio/metadata/{FNAME}.html',
+ 63 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/imageio/plugins/bmp/{FNAME}.html',
+ 64 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/imageio/plugins/jpeg/{FNAME}.html',
+ 65 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/imageio/spi/{FNAME}.html',
+ 66 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/imageio/stream/{FNAME}.html',
+ 67 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/management/{FNAME}.html',
+ 68 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/management/loading/{FNAME}.html',
+ 69 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/management/modelmbean/{FNAME}.html',
+ 70 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/management/monitor/{FNAME}.html',
+ 71 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/management/openmbean/{FNAME}.html',
+ 72 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/management/relation/{FNAME}.html',
+ 73 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/management/remote/{FNAME}.html',
+ 74 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/management/remote/rmi/{FNAME}.html',
+ 75 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/management/timer/{FNAME}.html',
+ 76 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/naming/{FNAME}.html',
+ 77 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/naming/directory/{FNAME}.html',
+ 78 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/naming/event/{FNAME}.html',
+ 79 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/naming/ldap/{FNAME}.html',
+ 80 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/naming/spi/{FNAME}.html',
+ 81 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/net/{FNAME}.html',
+ 82 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/net/ssl/{FNAME}.html',
+ 83 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/print/{FNAME}.html',
+ 84 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/print/attribute/{FNAME}.html',
+ 85 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/print/attribute/standard/{FNAME}.html',
+ 86 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/print/event/{FNAME}.html',
+ 87 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/rmi/{FNAME}.html',
+ 88 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/rmi/CORBA/{FNAME}.html',
+ 89 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/rmi/ssl/{FNAME}.html',
+ 90 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/security/auth/{FNAME}.html',
+ 91 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/security/auth/callback/{FNAME}.html',
+ 92 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/security/auth/kerberos/{FNAME}.html',
+ 93 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/security/auth/login/{FNAME}.html',
+ 94 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/security/auth/spi/{FNAME}.html',
+ 95 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/security/auth/x500/{FNAME}.html',
+ 96 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/security/sasl/{FNAME}.html',
+ 97 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/sound/midi/{FNAME}.html',
+ 98 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/sound/midi/spi/{FNAME}.html',
+ 99 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/sound/sampled/{FNAME}.html',
+ 100 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/sound/sampled/spi/{FNAME}.html',
+ 101 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/sql/{FNAME}.html',
+ 102 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/sql/rowset/{FNAME}.html',
+ 103 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/sql/rowset/serial/{FNAME}.html',
+ 104 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/sql/rowset/spi/{FNAME}.html',
+ 105 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/{FNAME}.html',
+ 106 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/border/{FNAME}.html',
+ 107 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/colorchooser/{FNAME}.html',
+ 108 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/event/{FNAME}.html',
+ 109 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/filechooser/{FNAME}.html',
+ 110 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/plaf/{FNAME}.html',
+ 111 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/plaf/basic/{FNAME}.html',
+ 112 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/plaf/metal/{FNAME}.html',
+ 113 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/plaf/multi/{FNAME}.html',
+ 114 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/plaf/synth/{FNAME}.html',
+ 115 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/table/{FNAME}.html',
+ 116 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/text/{FNAME}.html',
+ 117 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/text/html/{FNAME}.html',
+ 118 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/text/html/parser/{FNAME}.html',
+ 119 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/text/rtf/{FNAME}.html',
+ 120 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/tree/{FNAME}.html',
+ 121 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/undo/{FNAME}.html',
+ 122 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/transaction/{FNAME}.html',
+ 123 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/transaction/xa/{FNAME}.html',
+ 124 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/{FNAME}.html',
+ 125 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/datatype/{FNAME}.html',
+ 126 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/namespace/{FNAME}.html',
+ 127 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/parsers/{FNAME}.html',
+ 128 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/transform/{FNAME}.html',
+ 129 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/transform/dom/{FNAME}.html',
+ 130 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/transform/sax/{FNAME}.html',
+ 131 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/transform/stream/{FNAME}.html',
+ 132 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/validation/{FNAME}.html',
+ 133 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/xpath/{FNAME}.html',
+ 134 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/ietf/jgss/{FNAME}.html',
+ 135 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/CORBA/{FNAME}.html',
+ 136 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/CORBA/DynAnyPackage/{FNAME}.html',
+ 137 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/CORBA/TypeCodePackage/{FNAME}.html',
+ 138 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/CORBA/portable/{FNAME}.html',
+ 139 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/CosNaming/{FNAME}.html',
+ 140 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/CosNaming/NamingContextExtPackage/{FNAME}.html',
+ 141 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/CosNaming/NamingContextPackage/{FNAME}.html',
+ 142 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/Dynamic/{FNAME}.html',
+ 143 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/DynamicAny/{FNAME}.html',
+ 144 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/DynamicAny/DynAnyFactoryPackage/{FNAME}.html',
+ 145 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/DynamicAny/DynAnyPackage/{FNAME}.html',
+ 146 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/IOP/{FNAME}.html',
+ 147 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/IOP/CodecFactoryPackage/{FNAME}.html',
+ 148 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/IOP/CodecPackage/{FNAME}.html',
+ 149 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/Messaging/{FNAME}.html',
+ 150 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/PortableInterceptor/{FNAME}.html',
+ 151 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/PortableInterceptor/ORBInitInfoPackage/{FNAME}.html',
+ 152 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/PortableServer/{FNAME}.html',
+ 153 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/PortableServer/CurrentPackage/{FNAME}.html',
+ 154 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/{FNAME}.html',
+ 155 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/PortableServer/POAPackage/{FNAME}.html',
+ 156 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/PortableServer/ServantLocatorPackage/{FNAME}.html',
+ 157 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/SendingContext/{FNAME}.html',
+ 158 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/stub/java/rmi/{FNAME}.html',
+ 159 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/w3c/dom/{FNAME}.html',
+ 160 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/w3c/dom/bootstrap/{FNAME}.html',
+ 161 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/w3c/dom/events/{FNAME}.html',
+ 162 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/w3c/dom/ls/{FNAME}.html',
+ 163 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/xml/sax/{FNAME}.html',
+ 164 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/xml/sax/ext/{FNAME}.html',
+ 165 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/xml/sax/helpers/{FNAME}.html',
+ /* ambiguous class names (appear in more than one package) */
+ 166 => 'http://www.google.com/search?sitesearch=java.sun.com&amp;q=allinurl%3Aj2se%2F1+5+0%2Fdocs%2Fapi+{FNAME}'
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ /* Java does not use '::' */
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/javascript.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/javascript.php
new file mode 100644
index 000000000..4ffef2b2e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/javascript.php
@@ -0,0 +1,150 @@
+<?php
+/*************************************************************************************
+ * javascript.php
+ * --------------
+ * Author: Ben Keen (ben.keen@gmail.com)
+ * Copyright: (c) 2004 Ben Keen (ben.keen@gmail.com), Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/06/20
+ *
+ * JavaScript language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * 2004/11/27 (1.0.1)
+ * - Added support for multiple object splitters
+ * 2004/10/27 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Javascript',
+ 'COMMENT_SINGLE' => array(1 => '//'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ //Regular Expressions
+ 'COMMENT_REGEXP' => array(2 => "/(?<=[\\s^])s\\/(?:\\\\.|(?!\n)[^\\/\\\\])+\\/(?:\\\\.|(?!\n)[^\\/\\\\])+\\/[gimsu]*(?=[\\s$\\.\\;])|(?<=[\\s^(=])m?\\/(?:\\\\.|(?!\n)[^\\/\\\\])+\\/[gimsu]*(?=[\\s$\\.\\,\\;\\)])/iU"),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'as', 'break', 'case', 'catch', 'continue', 'decodeURI', 'delete', 'do',
+ 'else', 'encodeURI', 'eval', 'finally', 'for', 'if', 'in', 'is', 'item',
+ 'instanceof', 'return', 'switch', 'this', 'throw', 'try', 'typeof', 'void',
+ 'while', 'write', 'with'
+ ),
+ 2 => array(
+ 'class', 'const', 'default', 'debugger', 'export', 'extends', 'false',
+ 'function', 'import', 'namespace', 'new', 'null', 'package', 'private',
+ 'protected', 'public', 'super', 'true', 'use', 'var'
+ ),
+ 3 => array(
+ // common functions for Window object
+ 'alert', 'back', 'blur', 'close', 'confirm', 'focus', 'forward', 'home',
+ 'name', 'navigate', 'onblur', 'onerror', 'onfocus', 'onload', 'onmove',
+ 'onresize', 'onunload', 'open', 'print', 'prompt', 'scroll', 'status',
+ 'stop',
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '[', ']', '{', '}',
+ '+', '-', '*', '/', '%',
+ '!', '@', '&', '|', '^',
+ '<', '>', '=',
+ ',', ';', '?', ':'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #000066; font-weight: bold;',
+ 2 => 'color: #003366; font-weight: bold;',
+ 3 => 'color: #000066;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #006600; font-style: italic;',
+ 2 => 'color: #009966; font-style: italic;',
+ 'MULTI' => 'color: #006600; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #009900;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #3366CC;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #CC0000;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #660066;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #339933;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ 0 => '',
+ 1 => '',
+ 2 => '',
+ 3 => ''
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_MAYBE,
+ 'SCRIPT_DELIMITERS' => array(
+ 0 => array(
+ '<script type="text/javascript">' => '</script>'
+ ),
+ 1 => array(
+ '<script language="javascript">' => '</script>'
+ )
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ 0 => true,
+ 1 => true
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/kixtart.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/kixtart.php
new file mode 100644
index 000000000..bdffd5875
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/kixtart.php
@@ -0,0 +1,329 @@
+<?php
+/*************************************************************************************
+ * kixtart.php
+ * --------
+ * Author: Riley McArdle (riley@glyff.net)
+ * Copyright: (c) 2007 Riley McArdle (http://www.glyff.net/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2007/08/31
+ *
+ * PHP language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2007/08/31 (1.0.7.22)
+ * - First Release
+ *
+ * TODO (updated 2007/08/31)
+ * -------------------------
+ * *
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'KiXtart',
+ 'COMMENT_SINGLE' => array(1 => ';'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'While', 'Loop',
+ 'Use',
+ 'Small',
+ 'Sleep',
+ 'Shell',
+ 'SetTime',
+ 'SetM',
+ 'SetL',
+ 'Set',
+ 'Select', 'Case',
+ 'Run',
+ 'Return',
+ 'Redim',
+ 'RD',
+ 'Quit',
+ 'Play',
+ 'Move',
+ 'MD',
+ 'Include',
+ 'If', 'Else', 'Endif',
+ 'GoTo',
+ 'GoSub',
+ 'Go',
+ 'Global',
+ 'GetS',
+ 'Get',
+ 'Function', 'Endfunction',
+ 'For', 'Next',
+ 'Each',
+ 'FlushKb',
+ 'Exit',
+ 'Do', 'Until',
+ 'Display',
+ 'Dim',
+ 'Del',
+ 'Debug',
+ 'Copy',
+ 'Cookie1',
+ 'Color',
+ 'CLS',
+ 'CD',
+ 'Call',
+ 'Break',
+ 'Big',
+ 'Beep',
+ ),
+ 2 => array(
+ '@Address',
+ '@Build',
+ '@Color',
+ '@Comment',
+ '@CPU',
+ '@CRLF',
+ '@CSD',
+ '@CurDir',
+ '@Date',
+ '@Day',
+ '@Domain',
+ '@DOS',
+ '@Error',
+ '@FullName',
+ '@HomeDir',
+ '@HomeDrive',
+ '@HomeShr',
+ '@HostName',
+ '@InWin',
+ '@IPaddressX',
+ '@KiX',
+ '@LanRoot',
+ '@LDomain',
+ '@LDrive',
+ '@LM',
+ '@LogonMode',
+ '@LongHomeDir',
+ '@LServer',
+ '@MaxPWAge',
+ '@MDayNo',
+ '@MHz',
+ '@MonthNo',
+ '@Month',
+ '@MSecs',
+ '@OnWoW64',
+ '@PID',
+ '@PrimaryGroup',
+ '@Priv',
+ '@ProductSuite',
+ '@ProductType',
+ '@PWAge',
+ '@RAS',
+ '@Result',
+ '@RServer',
+ '@ScriptDir',
+ '@ScriptExe',
+ '@ScriptName',
+ '@SError',
+ '@SID',
+ '@Site',
+ '@StartDir',
+ '@SysLang',
+ '@Ticks',
+ '@Time',
+ '@TsSession',
+ '@UserID',
+ '@UserLang',
+ '@WDayNo',
+ '@Wksta',
+ '@WUserID',
+ '@YDayNo',
+ '@Year',
+ ),
+ 3 => array(
+ 'WriteValue',
+ 'WriteProfileString',
+ 'WriteLine',
+ 'VarTypeName',
+ 'VarType',
+ 'Val',
+ 'UnloadHive',
+ 'UCase',
+ 'Ubound',
+ 'Trim',
+ 'Substr',
+ 'SRnd',
+ 'Split',
+ 'SidToName',
+ 'ShutDown',
+ 'ShowProgramGroup',
+ 'SetWallpaper',
+ 'SetTitle',
+ 'SetSystemState',
+ 'SetOption',
+ 'SetFocus',
+ 'SetFileAttr',
+ 'SetDefaultPrinter',
+ 'SetConsole',
+ 'SetAscii',
+ 'SendMessage',
+ 'SendKeys',
+ 'SaveKey',
+ 'RTrim',
+ 'Round',
+ 'Rnd',
+ 'Right',
+ 'RedirectOutput',
+ 'ReadValue',
+ 'ReadType',
+ 'ReadProfileString',
+ 'ReadLine',
+ 'Open',
+ 'MessageBox',
+ 'MemorySize',
+ 'LTrim',
+ 'Logoff',
+ 'LogEvent',
+ 'LoadKey',
+ 'LoadHive',
+ 'Len',
+ 'Left',
+ 'LCase',
+ 'KeyExist',
+ 'KbHit',
+ 'Join',
+ 'IsDeclared',
+ 'Int',
+ 'InStrRev',
+ 'InStr',
+ 'InGroup',
+ 'IIF',
+ 'GetObject',
+ 'GetFileVersion',
+ 'GetFileTime',
+ 'GetFileSize',
+ 'GetFileAttr',
+ 'GetDiskSpace',
+ 'FreeFileHandle',
+ 'FormatNumber',
+ 'Fix',
+ 'ExpandEnvironmentVars',
+ 'Exist',
+ 'Execute',
+ 'EnumValue',
+ 'EnumLocalGroup',
+ 'EnumKey',
+ 'EnumIpInfo',
+ 'EnumGroup',
+ 'Dir',
+ 'DelValue',
+ 'DelTree',
+ 'DelProgramItem',
+ 'DelProgramGroup',
+ 'DelPrinterConnection',
+ 'DelKey',
+ 'DecToHex',
+ 'CStr',
+ 'CreateObject',
+ 'CompareFileTimes',
+ 'Close',
+ 'ClearEventLog',
+ 'CInt',
+ 'Chr',
+ 'CDbl',
+ 'Box',
+ 'BackupEventLog',
+ 'At',
+ 'AScan',
+ 'Asc',
+ 'AddProgramItem',
+ 'AddProgramGroup',
+ 'AddPrinterConnection',
+ 'AddKey',
+ 'Abs'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '[', ']', '?', ':', '+', '-', '*', '/', '&', '|', '^', '~', '<', '>', '='
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #b1b100;',
+ 2 => 'color: #000000; font-weight: bold;',
+ 3 => 'color: #000066;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080; font-style: italic;',
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #006600;',
+ 2 => 'color: #006600;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => 'http://www.kixtart.org/manual/Commands/{FNAMEL}.htm',
+ 2 => '',
+ 3 => 'http://www.kixtart.org/manual/Functions/{FNAMEL}.htm'
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ 0 => true,
+ 1 => true,
+ 2 => true,
+ 3 => true
+ ),
+ 'TAB_WIDTH' => 4
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/klonec.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/klonec.php
new file mode 100644
index 000000000..03d64a166
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/klonec.php
@@ -0,0 +1,282 @@
+<?php
+/*************************************************************************************
+ * klonec.php
+ * --------
+ * Author: AUGER Mickael
+ * Copyright: Synchronic
+ * Release Version: 1.0.8.4
+ * Date Started: 2008/04/16
+ *
+ * KLone with C language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/04/16 (1.0.8)
+ * - First Release
+ *
+ * TODO (updated 2008/04/16)
+ * -------------------------
+ * A tester et a completer si besoin
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'KLone C',
+ 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'),//#pour precede les include de C
+ 'COMMENT_MULTI' => array('/*' => '*/', '<!--' => '-->' ),//comentaires C et KLone suivi de ceux pour HTML
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(//mots-cles C
+ 'if', 'return', 'while', 'case', 'class', 'continue', 'default',
+ 'do', 'else', 'for', 'switch', 'goto',
+ 'null', 'break', 'true', 'enum', 'extern', 'inline', 'false'
+ ),
+ 2 => array(//mots-cles KLone
+ 'out', 'request', 'response',
+ ),
+ 3 => array(//fonctions C usuelles
+ 'printf', 'malloc', 'fopen', 'fclose', 'free', 'fputs', 'fgets', 'feof', 'fwrite',
+ 'perror', 'ferror', 'qsort', 'stats', 'sscanf', 'scanf',
+ 'strdup', 'strcpy', 'strcmp', 'strncpy', 'strcasecmp', 'cat', 'strcat', 'strstr',
+ 'strlen', 'strtof', 'strtod', 'strtok', 'towlower', 'towupper',
+ 'cd', 'system', 'exit', 'exec', 'fork', 'vfork', 'kill', 'signal', 'syslog',
+ 'usleep', 'utime', 'wait', 'waitpid', 'waitid',
+ 'ceil', 'eval', 'round', 'floor',
+ 'atoi', 'atol', 'abs', 'cos', 'sin', 'tan', 'acos', 'asin', 'atan', 'exp',
+ 'time', 'ctime', 'localtime', 'asctime', 'gmtime', 'difftime', 'date'
+ ),
+ 4 => array(//fonctions KLone usuelles
+ 'request_get_cookies', 'request_get_cookie', 'request_get_args', 'request_get_arg',
+ 'request_io', 'request_get_uri', 'request_get_filename', 'request_get_query_string', 'request_get_path_info',
+ 'request_get_if_modified_since', 'request_get_http', 'request_get_client_request',
+ 'request_get_content_length', 'request_get_uploads', 'request_get_uploaded_file',
+ 'request_get_method', 'request_get_protocol', 'request_get_resolved_filename',
+ 'request_get_resolved_path_info', 'request_get_addr', 'request_get_peer_addr',
+ 'request_get_header', 'request_get_field', 'request_get_field_value',
+ 'response_set_content_encoding', 'response_disable_caching', 'response_enable_caching',
+ 'response_set_cookie', 'response_set_method', 'response_get_method',
+ 'response_print_header', 'response_set_field', 'response_del_field',
+ 'response_set_content_type', 'response_set_date', 'response_set_last_modified',
+ 'response_set_content_length', 'response_get_status', 'response_get_header',
+ 'response_io', 'response_redirect', 'response_set_status',
+ 'session_get_vars', 'session_get', 'session_set', 'session_age', 'session_clean', 'session_del',
+ 'io_type', 'io_pipe', 'io_dup', 'io_copy', 'io_seek', 'io_tell', 'io_close',
+ 'io_free', 'io_read', 'io_printf', 'io_flush', 'io_write', 'io_putc', 'io_getc',
+ 'io_get_until', 'io_gets', 'io_codec_add_head', 'io_codec_add_tail',
+ 'io_codecs_remove', 'io_name_set', 'io_name_get'
+ ),
+ 5 => array(//types C
+ 'auto', 'char', 'const', 'double', 'float', 'int', 'long',
+ 'register', 'short', 'signed', 'sizeof', 'static', 'string', 'struct',
+ 'typedef', 'union', 'unsigned', 'void', 'volatile',
+ 'wchar_t', 'time_t', 'FILE'
+ ),
+ 6 => array(//mots-cles HTML
+ 'a', 'abbr', 'acronym', 'address', 'applet',
+
+ 'base', 'basefont', 'bdo', 'big', 'blockquote', 'body', 'br', 'button', 'b',
+
+ 'caption', 'center', 'cite', 'code', 'colgroup', 'col',
+
+ 'dd', 'del', 'dfn', 'dir', 'div', 'dl', 'dt',
+
+ 'em',
+
+ 'fieldset', 'font', 'form', 'frame', 'frameset',
+
+ 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'hr', 'html',
+
+ 'iframe', 'ilayer', 'img', 'input', 'ins', 'isindex', 'i',
+
+ 'kbd',
+
+ 'label', 'legend', 'link', 'li',
+
+ 'map', 'meta',
+
+ 'noframes', 'noscript',
+
+ 'object', 'ol', 'optgroup', 'option',
+
+ 'param', 'pre', 'p',
+
+ 'q',
+
+ 'samp', 'script', 'select', 'small', 'span', 'strike', 'strong', 'style', 'sub', 'sup', 's',
+
+ 'table', 'tbody', 'td', 'textarea', 'text', 'tfoot', 'thead', 'th', 'title', 'tr', 'tt',
+
+ 'ul', 'u',
+
+ 'var',
+ ),
+ 7 => array(//autres mots-cles HTML
+ 'abbr', 'accept-charset', 'accept', 'accesskey', 'action', 'align', 'alink', 'alt', 'archive', 'axis',
+ 'background', 'bgcolor', 'border',
+ 'cellpadding', 'cellspacing', 'char', 'charoff', 'charset', 'checked', 'cite', 'class', 'classid', 'clear', 'code', 'codebase', 'codetype', 'color', 'cols', 'colspan', 'compact', 'content', 'coords',
+ 'data', 'datetime', 'declare', 'defer', 'dir', 'disabled',
+ 'enctype',
+ 'face', 'for', 'frame', 'frameborder',
+ 'headers', 'height', 'href', 'hreflang', 'hspace', 'http-equiv',
+ 'id', 'ismap',
+ 'label', 'lang', 'language', 'link', 'longdesc',
+ 'marginheight', 'marginwidth', 'maxlength', 'media', 'method', 'multiple',
+ 'name', 'nohref', 'noresize', 'noshade', 'nowrap',
+ 'object', 'onblur', 'onchange', 'onclick', 'ondblclick', 'onfocus', 'onkeydown', 'onkeypress', 'onkeyup', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onreset', 'onselect', 'onsubmit', 'onunload',
+ 'profile', 'prompt',
+ 'readonly', 'rel', 'rev', 'rowspan', 'rows', 'rules',
+ 'scheme', 'scope', 'scrolling', 'selected', 'shape', 'size', 'span', 'src', 'standby', 'start', 'style', 'summary',
+ 'tabindex', 'target', 'text', 'title', 'type',
+ 'usemap',
+ 'valign', 'value', 'valuetype', 'version', 'vlink', 'vspace',
+ 'width'
+ )
+ ),
+ 'SYMBOLS' => array(
+ 1 => array(
+ '<%=', '<%!', '<%', '%>'
+ ),
+ 0 => array(
+ '(', ')', '[', ']', '{', '}',
+ '!', '%', '&', '|', '/',
+ '<', '>',
+ '=', '-', '+', '*',
+ '.', ':', ',', ';', '^'
+ )
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false,
+ 6 => false,
+ 7 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #b1b100; font-weight: bold;',//pour les mots-cles C
+ 2 => 'color: #000000; font-weight: bold;',//pour les mots-cles KLone
+ 3 => 'color: #6600FF;',//pour les fonctions C
+ 4 => 'color: #6600FF;',//pour les fonctions Klone
+ 5 => 'color: #0099FF; font-weight: bold;',//pour les types C
+ 6 => 'color: #990099; font-weight: bold;',//pour les mots-cles HTML
+ 7 => 'color: #000066;'//pour les autres mots-cles HTML
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080; font-style: italic;',//commentaire sur une ligne C et KLone
+ 2 => 'color: #339933;',//pour les #... en C
+ 'MULTI' => 'color: #808080; font-style: italic;'//commentaire sur plusieurs lignes C et KLone
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #006600;',
+ 2 => 'color: #006600;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #000000;',
+ 1 => 'color: #000000; font-weight: bold;'
+ ),
+ 'REGEXPS' => array(),
+ 'SCRIPT' => array(
+ 0 => 'background-color:#ffccff; font-weight: bold; color:#000000;',
+ 1 => '',
+ 2 => '',
+ 3 => 'color: #00bbdd; font-weight: bold;',
+ 4 => 'color: #ddbb00;',
+ 5 => 'color: #009900;'
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => 'http://www.opengroup.org/onlinepubs/009695399/functions/{FNAMEL}.html',
+ 4 => 'http://www.koanlogic.com/klone/api/html/globals.html',
+ 5 => '',
+ 6 => 'http://december.com/html/4/element/{FNAMEL}.html',
+ 7 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.',
+ 2 => '::'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_ALWAYS,
+ 'SCRIPT_DELIMITERS' => array(
+ //delimiteurs pour KLone
+ 0 => array(
+ '<%=' => '%>'
+ ),
+ 1 => array(
+ '<%!' => '%>'
+ ),
+ 2 => array(
+ '<%' => '%>'
+ ),
+ //delimiteur pour HTML
+ 3 => array(
+ '<!DOCTYPE' => '>'
+ ),
+ 4 => array(
+ '&' => ';'
+ ),
+ 5 => array(
+ '<' => '>'
+ )
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ 0 => false,
+ 1 => true,
+ 2 => true,
+ 3 => false,
+ 4 => false,
+ 5 => true
+ ),
+ 'TAB_WIDTH' => 4,
+ 'PARSER_CONTROL' => array(
+ 'KEYWORDS' => array(
+ 6 => array(
+ 'DISALLOWED_BEFORE' => '(?<=&lt;|&lt;\/)',
+ 'DISALLOWED_AFTER' => '(?=\s|\/|&gt;)',
+ ),
+ 7 => array(
+ 'DISALLOWED_AFTER' => '(?=\s*=)',
+ )
+ )
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/klonecpp.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/klonecpp.php
new file mode 100644
index 000000000..fd2d53864
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/klonecpp.php
@@ -0,0 +1,310 @@
+<?php
+/*************************************************************************************
+ * klonecpp.php
+ * --------
+ * Author: AUGER Mickael
+ * Copyright: Synchronic
+ * Release Version: 1.0.8.4
+ * Date Started: 2008/04/16
+ *
+ * KLone with C++ language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/04/16 (1.0.8)
+ * - First Release
+ *
+ * TODO (updated 2008/04/16)
+ * -------------------------
+ * A tester et a completer si besoin
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'KLone C++',
+ 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'),//#pour precede les include de C
+ 'COMMENT_MULTI' => array('/*' => '*/', '<!--' => '-->' ),//comentaires C et KLone suivi de ceux pour HTML
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(//mots-cles C++
+ 'if', 'return', 'while', 'case', 'continue', 'default',
+ 'do', 'else', 'for', 'switch', 'goto',
+ 'break', 'true', 'enum', 'extern', 'inline', 'false',
+ 'errno', 'stdin', 'stdout', 'stderr',
+ 'virtual', 'public', 'private', 'protected', 'template', 'using', 'namespace',
+ 'try', 'catch', 'dynamic_cast', 'const_cast', 'reinterpret_cast',
+ 'static_cast', 'explicit', 'friend', 'typename', 'typeid', 'class',
+ 'EDOM', 'ERANGE', 'FLT_RADIX', 'FLT_ROUNDS', 'FLT_DIG', 'DBL_DIG', 'LDBL_DIG',
+ 'FLT_EPSILON', 'DBL_EPSILON', 'LDBL_EPSILON', 'FLT_MANT_DIG', 'DBL_MANT_DIG',
+ 'LDBL_MANT_DIG', 'FLT_MAX', 'DBL_MAX', 'LDBL_MAX', 'FLT_MAX_EXP', 'DBL_MAX_EXP',
+ 'LDBL_MAX_EXP', 'FLT_MIN', 'DBL_MIN', 'LDBL_MIN', 'FLT_MIN_EXP', 'DBL_MIN_EXP',
+ 'LDBL_MIN_EXP', 'CHAR_BIT', 'CHAR_MAX', 'CHAR_MIN', 'SCHAR_MAX', 'SCHAR_MIN',
+ 'UCHAR_MAX', 'SHRT_MAX', 'SHRT_MIN', 'USHRT_MAX', 'INT_MAX', 'INT_MIN',
+ 'UINT_MAX', 'LONG_MAX', 'LONG_MIN', 'ULONG_MAX', 'HUGE_VAL', 'SIGABRT',
+ 'SIGFPE', 'SIGILL', 'SIGINT', 'SIGSEGV', 'SIGTERM', 'SIG_DFL', 'SIG_ERR',
+ 'SIG_IGN', 'BUFSIZ', 'EOF', 'FILENAME_MAX', 'FOPEN_MAX', 'L_tmpnam', 'NULL',
+ 'SEEK_CUR', 'SEEK_END', 'SEEK_SET', 'TMP_MAX',
+ 'EXIT_FAILURE', 'EXIT_SUCCESS', 'RAND_MAX', 'CLOCKS_PER_SEC'
+ ),
+ 2 => array(//mots-cles KLone
+ 'out', 'request', 'response',
+ ),
+ 3 => array(//fonctions C++ usuelles
+ 'cin', 'cerr', 'clog', 'cout', 'delete', 'new', 'this',
+ 'printf', 'fprintf', 'snprintf', 'sprintf', 'assert',
+ 'isalnum', 'isalpha', 'isdigit', 'iscntrl', 'isgraph', 'islower', 'isprint',
+ 'ispunct', 'isspace', 'isupper', 'isxdigit', 'tolower', 'toupper',
+ 'exp', 'log', 'log10', 'pow', 'sqrt', 'ceil', 'floor', 'fabs', 'ldexp',
+ 'frexp', 'modf', 'fmod', 'sin', 'cos', 'tan', 'asin', 'acos', 'atan', 'atan2',
+ 'sinh', 'cosh', 'tanh', 'setjmp', 'longjmp',
+ 'va_start', 'va_arg', 'va_end', 'offsetof', 'sizeof', 'fopen', 'freopen',
+ 'fflush', 'fclose', 'remove', 'rename', 'tmpfile', 'tmpname', 'setvbuf',
+ 'setbuf', 'vfprintf', 'vprintf', 'vsprintf', 'fscanf', 'scanf', 'sscanf',
+ 'fgetc', 'fgets', 'fputc', 'fputs', 'getc', 'getchar', 'gets', 'putc',
+ 'putchar', 'puts', 'ungetc', 'fread', 'fwrite', 'fseek', 'ftell', 'rewind',
+ 'fgetpos', 'fsetpos', 'clearerr', 'feof', 'ferror', 'perror', 'abs', 'labs',
+ 'div', 'ldiv', 'atof', 'atoi', 'atol', 'strtod', 'strtol', 'strtoul', 'calloc',
+ 'malloc', 'realloc', 'free', 'abort', 'exit', 'atexit', 'system', 'getenv',
+ 'bsearch', 'qsort', 'rand', 'srand', 'strcpy', 'strncpy', 'strcat', 'strncat',
+ 'strcmp', 'strncmp', 'strcoll', 'strchr', 'strrchr', 'strspn', 'strcspn',
+ 'strpbrk', 'strstr', 'strlen', 'strerror', 'strtok', 'strxfrm', 'memcpy',
+ 'memmove', 'memcmp', 'memchr', 'memset', 'clock', 'time', 'difftime', 'mktime',
+ 'asctime', 'ctime', 'gmtime', 'localtime', 'strftime'
+ ),
+ 4 => array(//fonctions KLone usuelles
+ 'request_get_cookies', 'request_get_cookie', 'request_get_args', 'request_get_arg',
+ 'request_io', 'request_get_uri', 'request_get_filename', 'request_get_query_string', 'request_get_path_info',
+ 'request_get_if_modified_since', 'request_get_http', 'request_get_client_request',
+ 'request_get_content_length', 'request_get_uploads', 'request_get_uploaded_file',
+ 'request_get_method', 'request_get_protocol', 'request_get_resolved_filename',
+ 'request_get_resolved_path_info', 'request_get_addr', 'request_get_peer_addr',
+ 'request_get_header', 'request_get_field', 'request_get_field_value',
+ 'response_set_content_encoding', 'response_disable_caching', 'response_enable_caching',
+ 'response_set_cookie', 'response_set_method', 'response_get_method',
+ 'response_print_header', 'response_set_field', 'response_del_field',
+ 'response_set_content_type', 'response_set_date', 'response_set_last_modified',
+ 'response_set_content_length', 'response_get_status', 'response_get_header',
+ 'response_io', 'response_redirect', 'response_set_status',
+ 'session_get_vars', 'session_get', 'session_set', 'session_age', 'session_clean', 'session_del',
+ 'io_type', 'io_pipe', 'io_dup', 'io_copy', 'io_seek', 'io_tell', 'io_close',
+ 'io_free', 'io_read', 'io_printf', 'io_flush', 'io_write', 'io_putc', 'io_getc',
+ 'io_get_until', 'io_gets', 'io_codec_add_head', 'io_codec_add_tail',
+ 'io_codecs_remove', 'io_name_set', 'io_name_get'
+ ),
+ 5 => array(//types C++
+ 'auto', 'bool', 'char', 'const', 'double', 'float', 'int', 'long', 'longint',
+ 'register', 'short', 'shortint', 'signed', 'static', 'struct',
+ 'typedef', 'union', 'unsigned', 'void', 'volatile', 'jmp_buf',
+ 'signal', 'raise', 'va_list', 'ptrdiff_t', 'size_t', 'FILE', 'fpos_t',
+ 'div_t', 'ldiv_t', 'clock_t', 'time_t', 'tm',
+ 'string', 'wchar_t'
+ ),
+ 6 => array(//mots-cles HTML
+ 'a', 'abbr', 'acronym', 'address', 'applet',
+
+ 'base', 'basefont', 'bdo', 'big', 'blockquote', 'body', 'br', 'button', 'b',
+
+ 'caption', 'center', 'cite', 'code', 'colgroup', 'col',
+
+ 'dd', 'del', 'dfn', 'dir', 'div', 'dl', 'dt',
+
+ 'em',
+
+ 'fieldset', 'font', 'form', 'frame', 'frameset',
+
+ 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'hr', 'html',
+
+ 'iframe', 'ilayer', 'img', 'input', 'ins', 'isindex', 'i',
+
+ 'kbd',
+
+ 'label', 'legend', 'link', 'li',
+
+ 'map', 'meta',
+
+ 'noframes', 'noscript',
+
+ 'object', 'ol', 'optgroup', 'option',
+
+ 'param', 'pre', 'p',
+
+ 'q',
+
+ 'samp', 'script', 'select', 'small', 'span', 'strike', 'strong', 'style', 'sub', 'sup', 's',
+
+ 'table', 'tbody', 'td', 'textarea', 'text', 'tfoot', 'thead', 'th', 'title', 'tr', 'tt',
+
+ 'ul', 'u',
+
+ 'var',
+ ),
+ 7 => array(//autres mots-cles HTML
+ 'abbr', 'accept-charset', 'accept', 'accesskey', 'action', 'align', 'alink', 'alt', 'archive', 'axis',
+ 'background', 'bgcolor', 'border',
+ 'cellpadding', 'cellspacing', 'char', 'charoff', 'charset', 'checked', 'cite', 'class', 'classid', 'clear', 'code', 'codebase', 'codetype', 'color', 'cols', 'colspan', 'compact', 'content', 'coords',
+ 'data', 'datetime', 'declare', 'defer', 'dir', 'disabled',
+ 'enctype',
+ 'face', 'for', 'frame', 'frameborder',
+ 'headers', 'height', 'href', 'hreflang', 'hspace', 'http-equiv',
+ 'id', 'ismap',
+ 'label', 'lang', 'language', 'link', 'longdesc',
+ 'marginheight', 'marginwidth', 'maxlength', 'media', 'method', 'multiple',
+ 'name', 'nohref', 'noresize', 'noshade', 'nowrap',
+ 'object', 'onblur', 'onchange', 'onclick', 'ondblclick', 'onfocus', 'onkeydown', 'onkeypress', 'onkeyup', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onreset', 'onselect', 'onsubmit', 'onunload',
+ 'profile', 'prompt',
+ 'readonly', 'rel', 'rev', 'rowspan', 'rows', 'rules',
+ 'scheme', 'scope', 'scrolling', 'selected', 'shape', 'size', 'span', 'src', 'standby', 'start', 'style', 'summary',
+ 'tabindex', 'target', 'text', 'title', 'type',
+ 'usemap',
+ 'valign', 'value', 'valuetype', 'version', 'vlink', 'vspace',
+ 'width'
+ )
+ ),
+ 'SYMBOLS' => array(
+ 1 => array(
+ '<%=', '<%!', '<%', '%>'
+ ),
+ 0 => array(
+ '(', ')', '[', ']', '{', '}',
+ '!', '%', '&', '|', '/',
+ '<', '>',
+ '=', '-', '+', '*',
+ '.', ':', ',', ';', '^'
+ )
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false,
+ 6 => false,
+ 7 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #b1b100; font-weight: bold;',//pour les mots-cles C++
+ 2 => 'color: #000000; font-weight: bold;',//pour les mots-cles KLone
+ 3 => 'color: #6600FF;',//pour les fonctions C++
+ 4 => 'color: #6600FF;',//pour les fonctions Klone
+ 5 => 'color: #0099FF; font-weight: bold;',//pour les types C++
+ 6 => 'color: #990099; font-weight: bold;',//pour les mots-cles HTML
+ 7 => 'color: #000066;'//pour les autres mots-cles HTML
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080; font-style: italic;',//commentaire sur une ligne C++ et KLone
+ 2 => 'color: #339933;',//pour les #... en C++
+ 'MULTI' => 'color: #808080; font-style: italic;'//commentaire sur plusieurs lignes C++ et KLone
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #006600;',
+ 2 => 'color: #006600;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #000000;',
+ 1 => 'color: #000000; font-weight: bold;'
+ ),
+ 'REGEXPS' => array(),
+ 'SCRIPT' => array(
+ 0 => 'background-color:#ffccff; font-weight: bold; color:#000000;',
+ 1 => '',
+ 2 => '',
+ 3 => 'color: #00bbdd; font-weight: bold;',
+ 4 => 'color: #ddbb00;',
+ 5 => 'color: #009900;'
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => 'http://www.opengroup.org/onlinepubs/009695399/functions/{FNAMEL}.html',
+ 4 => 'http://www.koanlogic.com/klone/api/html/globals.html',
+ 5 => '',
+ 6 => 'http://december.com/html/4/element/{FNAMEL}.html',
+ 7 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.',
+ 2 => '::'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_ALWAYS,
+ 'SCRIPT_DELIMITERS' => array(
+ //delimiteurs pour KLone
+ 0 => array(
+ '<%=' => '%>'
+ ),
+ 1 => array(
+ '<%!' => '%>'
+ ),
+ 2 => array(
+ '<%' => '%>'
+ ),
+ //delimiteur pour HTML
+ 3 => array(
+ '<!DOCTYPE' => '>'
+ ),
+ 4 => array(
+ '&' => ';'
+ ),
+ 5 => array(
+ '<' => '>'
+ )
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ 0 => false,
+ 1 => true,
+ 2 => true,
+ 3 => false,
+ 4 => false,
+ 5 => true
+ ),
+ 'TAB_WIDTH' => 4,
+ 'PARSER_CONTROL' => array(
+ 'KEYWORDS' => array(
+ 6 => array(
+ 'DISALLOWED_BEFORE' => '(?<=&lt;|&lt;\/)',
+ 'DISALLOWED_AFTER' => '(?=\s|\/|&gt;)',
+ ),
+ 7 => array(
+ 'DISALLOWED_AFTER' => '(?=\s*=)',
+ )
+ )
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/latex.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/latex.php
new file mode 100644
index 000000000..bad2c1861
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/latex.php
@@ -0,0 +1,218 @@
+<?php
+/*************************************************************************************
+ * latex.php
+ * -----
+ * Author: efi, Matthias Pospiech (matthias@pospiech.eu)
+ * Copyright: (c) 2006 efi, Matthias Pospiech (matthias@pospiech.eu), Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2006/09/23
+ *
+ * LaTeX language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/08/18 (1.0.8.1)
+ * - Changes in color and some additional command recognition
+ * - No special Color for Brackets, it is only distracting
+ * if color should be reintroduced it should be less bright
+ * - Math color changed from green to violett, since green is now used for comments
+ * - Comments are now colored and the only green. The reason for coloring the comments
+ * is that often important information is in the comments und was merely unvisible before.
+ * - New Color for [Options]
+ * - color for labels not specialised anymore. It makes sence in large documents but less in
+ * small web examples.
+ * - \@keyword introduced
+ * - Fixed \& escaped ampersand
+ * 2006/09/23 (1.0.0)
+ * - First Release
+ *
+ * TODO
+ * -------------------------
+ * *
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'LaTeX',
+ 'COMMENT_SINGLE' => array(
+ 1 => '%'
+ ),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array(),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'addlinespace','address','appendix','author','backmatter',
+ 'bfseries','bibitem','bigskip','blindtext','caption','captionabove',
+ 'captionbelow','cdot','centering','cite','color','colorbox','date',
+ 'def','definecolor','documentclass','edef','eqref','else','email','emph','fbox',
+ 'fi','flushleft','flushright','footnote','frac','frontmatter','graphicspath','hfill',
+ 'hline','hspace','huge','include','includegraphics','infty','input','int','ifx',
+ 'item','label','LaTeX','left','let','limits','listfiles','listoffigures',
+ 'listoftables','mainmatter','makeatletter','makeatother','makebox',
+ 'makeindex','maketitle','mbox','mediumskip','newcommand',
+ 'newenvironment','newpage','nocite','nonumber','pagestyle','par','paragraph','parbox',
+ 'parident','parskip','partial','raggedleft','raggedright','raisebox','ref',
+ 'renewcommand','renewenvironment','right','rule','section','setlength',
+ 'sffamily','subparagraph','subsection','subsubsection','sum','table',
+ 'tableofcontents','textbf','textcolor','textit','textnormal',
+ 'textsuperscript','texttt','title','today','ttfamily','urlstyle',
+ 'usepackage','vspace'
+ )
+ ),
+ 'SYMBOLS' => array(
+ "&", "\\", "{", "}", "[", "]"
+ ),
+ 'CASE_SENSITIVE' => array(
+ 1 => true,
+ GESHI_COMMENTS => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #800000;',
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #2C922C; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000000; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'NUMBERS' => array(
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #E02020; '
+ ),
+ 'REGEXPS' => array(
+ 1 => 'color: #8020E0; font-weight: normal;', // Math inner
+ 2 => 'color: #C08020; font-weight: normal;', // [Option]
+ 3 => 'color: #8020E0; font-weight: normal;', // Maths
+ 4 => 'color: #800000; font-weight: normal;', // Structure: Labels
+ 5 => 'color: #00008B; font-weight: bold;', // Structure (\section{->x<-})
+ 6 => 'color: #800000; font-weight: normal;', // Structure (\section)
+ 7 => 'color: #0000D0; font-weight: normal;', // Environment \end or \begin{->x<-} (brighter blue)
+ 8 => 'color: #C00000; font-weight: normal;', // Structure \end or \begin
+ 9 => 'color: #2020C0; font-weight: normal;', // {...}
+ 10 => 'color: #800000; font-weight: normal;', // \%, \& etc.
+ 11 => 'color: #E00000; font-weight: normal;', // \@keyword
+ 12 => 'color: #800000; font-weight: normal;', // \keyword
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => 'http://www.golatex.de/wiki/index.php?title=%5C{FNAME}',
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ // Math inner
+ 1 => array(
+ GESHI_SEARCH => "(\\\\begin\\{(equation|displaymath|eqnarray|subeqnarray|math|multline|gather|align|alignat|flalign)\\})(.*)(\\\\end\\{\\2\\})",
+ GESHI_REPLACE => '\3',
+ GESHI_MODIFIERS => 'Us',
+ GESHI_BEFORE => '\1',
+ GESHI_AFTER => '\4'
+ ),
+ // [options]
+ 2 => array(
+ GESHI_SEARCH => "(?<=\[).+(?=\])",
+ GESHI_REPLACE => '\0',
+ GESHI_MODIFIERS => 'Us',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
+ ),
+ // Math mode with $ ... $
+ 3 => array(
+ GESHI_SEARCH => "\\$.+\\$",
+ GESHI_REPLACE => '\0',
+ GESHI_MODIFIERS => 'Us',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
+ ),
+ // Structure: Label
+ 4 => "\\\\(?:label|pageref|ref|cite)(?=[^a-zA-Z])",
+ // Structure: sections
+ 5 => array(
+ GESHI_SEARCH => "(\\\\(?:part|chapter|(?:sub){0,2}section|(?:sub)?paragraph|addpart|addchap|addsec)\*?\\{)(.*)(?=\\})",
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => 'U',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => ''
+ ),
+ // Structure: sections
+ 6 => "\\\\(?:part|chapter|(?:sub){0,2}section|(?:sub)?paragraph|addpart|addchap|addsec)\*?(?=[^a-zA-Z])",
+ // environment \begin{} and \end{} (i.e. the things inside the {})
+ 7 => array(
+ GESHI_SEARCH => "(\\\\(?:begin|end)\\{)(.*)(?=\\})",
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => 'U',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => ''
+ ),
+ // Structure \begin and \end
+ 8 => "\\\\(?:end|begin)(?=[^a-zA-Z])",
+ // {parameters}
+ 9 => array(
+ GESHI_SEARCH => "(?<=\\{)(?!<\|!REG3XP5!>).*(?=\\})",
+ GESHI_REPLACE => '\0',
+ GESHI_MODIFIERS => 'Us',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
+ ),
+ // \%, \& usw.
+ 10 => "\\\\(?:[_$%]|&amp;)",
+ // \@keywords
+ 11 => "(?<!<\|!REG3XP[8]!>)\\\\@[a-zA-Z]+\*?",
+ // \keywords
+ 12 => "(?<!<\|!REG3XP[468]!>)\\\\[a-zA-Z]+\*?",
+
+// ---------------------------------------------
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'PARSER_CONTROL' => array(
+ 'COMMENTS' => array(
+ 'DISALLOWED_BEFORE' => '\\'
+ ),
+ 'KEYWORDS' => array(
+ 'DISALLOWED_BEFORE' => "(?<=\\\\)",
+ 'DISALLOWED_AFTER' => "(?![A-Za-z0-9])"
+ ),
+ 'ENABLE_FLAGS' => array(
+ 'NUMBERS' => GESHI_NEVER,
+ 'BRACKETS' => GESHI_NEVER
+ )
+ )
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/lisp.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/lisp.php
new file mode 100644
index 000000000..aa492058b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/lisp.php
@@ -0,0 +1,144 @@
+<?php
+/*************************************************************************************
+ * lisp.php
+ * --------
+ * Author: Roberto Rossi (rsoftware@altervista.org)
+ * Copyright: (c) 2004 Roberto Rossi (http://rsoftware.altervista.org), Nigel McNie (http://qbnz.com/highlighter
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/08/30
+ *
+ * Generic Lisp language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2005/12/9 (1.0.2)
+ * - Added support for :keywords and ::access (Denis Mashkevich)
+ * 2004/11/27 (1.0.1)
+ * - Added support for multiple object splitters
+ * 2004/08/30 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Lisp',
+ 'COMMENT_SINGLE' => array(1 => ';'),
+ 'COMMENT_MULTI' => array(';|' => '|;'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'not','defun','princ','when',
+ 'eval','apply','funcall','quote','identity','function',
+ 'complement','backquote','lambda','set','setq','setf',
+ 'defmacro','gensym','make','symbol','intern',
+ 'name','value','plist','get',
+ 'getf','putprop','remprop','hash','array','aref',
+ 'car','cdr','caar','cadr','cdar','cddr','caaar','caadr','cadar',
+ 'caddr','cdaar','cdadr','cddar','cdddr','caaaar','caaadr',
+ 'caadar','caaddr','cadaar','cadadr','caddar','cadddr',
+ 'cdaaar','cdaadr','cdadar','cdaddr','cddaar','cddadr',
+ 'cdddar','cddddr','cons','list','append','reverse','last','nth',
+ 'nthcdr','member','assoc','subst','sublis','nsubst',
+ 'nsublis','remove','length',
+ 'mapc','mapcar','mapl','maplist','mapcan','mapcon','rplaca',
+ 'rplacd','nconc','delete','atom','symbolp','numberp',
+ 'boundp','null','listp','consp','minusp','zerop','plusp',
+ 'evenp','oddp','eq','eql','equal','cond','case','and','or',
+ 'let','l','if','prog','prog1','prog2','progn','go','return',
+ 'do','dolist','dotimes','catch','throw','error','cerror','break',
+ 'continue','errset','baktrace','evalhook','truncate','float',
+ 'rem','min','max','abs','sin','cos','tan','expt','exp','sqrt',
+ 'random','logand','logior','logxor','lognot','bignums','logeqv',
+ 'lognand','lognor','logorc2','logtest','logbitp','logcount',
+ 'integer','nil','parse-integer'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '{', '}', '[', ']',
+ '!', '%', '^', '&',
+ ' + ',' - ',' * ',' / ',
+ '=','<','>',
+ '.',':',',',';',
+ '|'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #b1b100;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080; font-style: italic;',
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ 0 => 'color: #555;',
+ 1 => 'color: #555;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ '::', ':'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'PARSER_CONTROL' => array(
+ 'OOLANG' => array(
+ 'MATCH_AFTER' => '[a-zA-Z][a-zA-Z0-9_\-]*'
+ )
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/locobasic.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/locobasic.php
new file mode 100644
index 000000000..a799d6900
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/locobasic.php
@@ -0,0 +1,130 @@
+<?php
+/*************************************************************************************
+ * locobasic.php
+ * -------------
+ * Author: Nacho Cabanes
+ * Copyright: (c) 2009 Nacho Cabanes (http://www.nachocabanes.com)
+ * Release Version: 1.0.8.4
+ * Date Started: 2009/03/22
+ *
+ * Locomotive Basic (Amstrad CPC series) language file for GeSHi.
+ *
+ * More details at http://en.wikipedia.org/wiki/Locomotive_BASIC
+ *
+ * CHANGES
+ * -------
+ * 2009/03/22 (1.0.8.3)
+ * - First Release
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Locomotive Basic',
+ 'COMMENT_SINGLE' => array(1 => "'", 2 => 'REM'),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ "AFTER", "AND", "AUTO", "BORDER", "BREAK", "CALL", "CAT", "CHAIN",
+ "CLEAR", "CLG", "CLS", "CLOSEIN", "CLOSEOUT", "CONT", "CURSOR",
+ "DATA", "DEF", "DEFINT", "DEFREAL", "DEFSTR", "DEG", "DELETE",
+ "DERR", "DI", "DIM", "DRAW", "DRAWR", "EDIT", "EI", "ELSE", "END",
+ "ENV", "ENT", "EOF", "ERASE", "ERL", "ERR", "ERROR", "EVERY",
+ "FILL", "FN", "FOR", "FRAME", "GOSUB", "GOTO", "GRAPHICS", "HIMEM",
+ "IF", "INK", "INPUT", "KEY", "LET", "LINE", "LIST", "LOAD",
+ "LOCATE", "MASK", "MEMORY", "MERGE", "MODE", "MOVE", "MOVER", "NEW",
+ "NEXT", "NOT", "ON", "OPENIN", "OPENOUT", "OR", "ORIGIN", "PAPER",
+ "PEEK", "PEN", "PLOT", "PLOTR", "POKE", "PRINT", "RAD", "RANDOMIZE",
+ "READ", "RELEASE", "REMAIN", "RENUM", "RESTORE", "RESUME", "RETURN",
+ "RUN", "SAVE", "SPEED", "SOUND", "SPC", "SQ", "STEP", "STOP", "SWAP",
+ "SYMBOL", "TAB", "TAG", "TAGOFF", "TEST", "TESTR", "TIME", "TO",
+ "THEN", "TRON", "TROFF", "USING", "WAIT", "WEND", "WHILE", "WIDTH",
+ "WINDOW", "WRITE", "XOR", "ZONE"
+ ),
+ 2 => array(
+ "ABS", "ASC", "ATN", "BIN", "CHR", "CINT", "COPYCHR", "COS",
+ "CREAL", "DEC", "FIX", "FRE", "EXP", "HEX", "INKEY", "INP", "INSTR",
+ "INT", "JOY", "LEFT", "LEN", "LOG", "LOG10", "LOWER", "MAX", "MID",
+ "MIN", "MOD", "OUT", "PI", "POS", "RIGHT", "RND", "ROUND", "SGN",
+ "SIN", "SPACE", "SQR", "STR", "STRING", "TAN", "UNT", "UPPER",
+ "VAL", "VPOS", "XPOS", "YPOS"
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #0000ff; font-weight: bold;',
+ 2 => 'color: #008888; font-weight: bold;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080;',
+ 2 => 'color: #808080;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #0044ff;'
+ ),
+ 'METHODS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099;'
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/lolcode.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/lolcode.php
new file mode 100644
index 000000000..fc60e3e9f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/lolcode.php
@@ -0,0 +1,152 @@
+<?php
+/*************************************************************************************
+ * lolcode.php
+ * ----------
+ * Author: Benny Baumann (BenBE@geshi.org)
+ * Copyright: (c) 2008 Benny Baumann (http://qbnz.com/highlighter/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2009/10/31
+ *
+ * LOLcode language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/10/31 (1.0.8.1)
+ * - First Release
+ *
+ * TODO
+ * ----
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+$language_data = array (
+ 'LANG_NAME' => 'LOLcode',
+ 'COMMENT_SINGLE' => array(),
+ 'COMMENT_MULTI' => array(),
+ 'COMMENT_REGEXP' => array(
+ 1 => "/\bBTW\b.*$/im",
+ 2 => "/(^|\b)(?:OBTW\b.+?\bTLDR|LOL\b.+?\/LOL)(\b|$)/si"
+ ),
+ 'CASE_KEYWORDS' => GESHI_CAPS_UPPER,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '',
+ 'ESCAPE_REGEXP' => array(
+ 1 => '/:[)>o":]/',
+ 2 => '/:\([\da-f]+\)/i',
+ 3 => '/:\{\w+\}/i',
+ 4 => '/:\[\w+\]/i',
+ ),
+ 'KEYWORDS' => array(
+ //Statements
+ 1 => array(
+ 'VISIBLE', 'HAI', 'KTHX', 'KTHXBYE', 'SMOOSH', 'GIMMEH', 'PLZ',
+ 'ON', 'INVISIBLE', 'R', 'ITZ', 'GTFO', 'COMPLAIN', 'GIMME',
+
+ 'OPEN', 'FILE', 'I HAS A', 'AWSUM THX', 'O NOES', 'CAN', 'HAS', 'HAZ',
+ 'HOW DOES I', 'IF U SAY SO', 'FOUND YR', 'BORROW', 'OWN', 'ALONG',
+ 'WITH', 'WIT', 'LOOK', 'AT', 'AWSUM', 'THX'
+ ),
+ //Conditionals
+ 2 => array(
+ 'IZ', 'YARLY', 'NOWAI', 'WTF?', 'MEBBE', 'OMG', 'OMGWTF',
+ 'ORLY?', 'OF', 'NOPE', 'SO', 'IM', 'MAI',
+
+ 'O RLY?', 'SUM', 'BOTH SAEM', 'DIFFRINT', 'BOTH', 'EITHER', 'WON',
+ 'DIFF', 'PRODUKT', 'QUOSHUNT', 'MOD', 'MKAY', 'OK', 'THING',
+ 'BIGNESS'
+ ),
+ //Repetition
+ 3 => array(
+ 'IN', 'OUTTA', 'LOOP', 'WHILE'
+ ),
+ //Operators \Math
+ 4 => array(
+ 'AN', 'AND', 'NOT', 'UP', 'YR', 'UPPIN', 'NERF', 'NERFIN', 'NERFZ',
+ 'SMASHING', 'UR', 'KINDA', 'LIKE', 'SAEM', 'BIG', 'SMALL',
+ 'BIGGR', 'SMALLR', 'BIGGER', 'SMALLER', 'GOOD', 'CUTE', 'THAN'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '.', ',', '?',
+ '!!'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #008000;',
+ 2 => 'color: #000080;',
+ 3 => 'color: #000080;',
+ 4 => 'color: #800000;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #666666; style: italic;',
+ 2 => 'color: #666666; style: italic;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'PARSER_CONTROL' => array(
+ 'KEYWORDS' => array(
+ 'SPACE_AS_WHITESPACE' => true
+ )
+ ),
+ 'TAB_WIDTH' => 4
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/lotusformulas.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/lotusformulas.php
new file mode 100644
index 000000000..e82d6bf3d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/lotusformulas.php
@@ -0,0 +1,318 @@
+<?php
+/*************************************************************************************
+ * lotusformulas.php
+ * ------------------------
+ * Author: Richard Civil (info@richardcivil.net)
+ * Copyright: (c) 2008 Richard Civil (info@richardcivil.net), Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2008/04/12
+ *
+ * @Formula/@Command language file for GeSHi.
+ *
+ * @Formula/@Command source: IBM Lotus Notes/Domino 8 Designer Help
+ *
+ * CHANGES
+ * -------
+ * 2008/04/12 (1.0.7.22)
+ * - First Release
+ *
+ * TODO (updated 2008/04/12)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Lotus Notes @Formulas',
+ 'COMMENT_SINGLE' => array(1 => "'"),
+ 'COMMENT_MULTI' => array('REM' => ';'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ 1 => array (
+ '[ZoomPreview]', '[WorkspaceStackReplicaIcons]',
+ '[WorkspaceProperties]', '[WindowWorkspace]',
+ '[WindowTile]', '[WindowRestore]', '[WindowNext]',
+ '[WindowMinimizeAll]', '[WindowMinimize]', '[WindowMaximizeAll]',
+ '[WindowMaximize]', '[WindowCascade]', '[ViewSwitchForm]',
+ '[ViewShowUnread]', '[ViewShowServerNames]', '[ViewShowSearchBar]',
+ '[ViewShowRuler]', '[ViewShowPageBreaks]', '[ViewShowOnlyUnread]',
+ '[ViewShowOnlySelected]', '[ViewShowOnlySearchResults]',
+ '[ViewShowOnlyCategories]', '[ViewShowObject]',
+ '[ViewShowFieldHelp]', '[ViewRenamePerson]', '[ViewRefreshUnread]',
+ '[ViewRefreshFields]', '[ViewNavigatorsNone]',
+ '[ViewNavigatorsFolders]', '[ViewMoveName]', '[ViewHorizScrollbar]',
+ '[ViewExpandWithChildren]', '[ViewExpandAll]', '[ViewExpand]',
+ '[ViewCollapseAll]', '[ViewCollapse]', '[ViewChange]',
+ '[ViewCertify]', '[ViewBesideFolders]', '[ViewBelowFolders]',
+ '[ViewArrangeIcons]', '[V3EditPrevField]', '[V3EditNextField]',
+ '[UserIDSwitch]', '[UserIDSetPassword]', '[UserIDMergeCopy]',
+ '[UserIDInfo]', '[UserIDEncryptionKeys]', '[UserIDCreateSafeCopy]',
+ '[UserIDClearPassword]', '[UserIDCertificates]',
+ '[ToolsUserLogoff]', '[ToolsSpellCheck]', '[ToolsSmartIcons]',
+ '[ToolsSetupUserSetup]', '[ToolsSetupPorts]', '[ToolsSetupMail]',
+ '[ToolsSetupLocation]', '[ToolsScanUnreadSelected]',
+ '[ToolsScanUnreadPreferred]', '[ToolsScanUnreadChoose]',
+ '[ToolsRunMacro]', '[ToolsRunBackgroundMacros]', '[ToolsReplicate]',
+ '[ToolsRefreshSelectedDocs]', '[ToolsRefreshAllDocs]',
+ '[ToolsMarkSelectedUnread]', '[ToolsMarkSelectedRead]',
+ '[ToolsMarkAllUnread]', '[ToolsMarkAllRead]', '[ToolsHangUp]',
+ '[ToolsCategorize]', '[ToolsCall]', '[TextUnderline]',
+ '[TextSpacingSingle]', '[TextSpacingOneAndaHalf]',
+ '[TextSpacingDouble]', '[TextSetFontSize]', '[TextSetFontFace]',
+ '[TextSetFontColor]', '[TextReduceFont]', '[TextPermanentPen]',
+ '[TextParagraphStyles]', '[TextParagraph]', '[TextOutdent]',
+ '[TextNumbers]', '[TextNormal]', '[TextItalic]', '[TextFont]',
+ '[TextEnlargeFont]', '[TextCycleSpacing]', '[TextBullet]',
+ '[TextBold]', '[TextAlignRight]', '[TextAlignNone]',
+ '[TextAlignLeft]', '[TextAlignFull]', '[TextAlignCenter]',
+ '[SwitchView]', '[SwitchForm]', '[StyleCycleKey]',
+ '[SmartIconsNextSet]', '[SmartIconsFloating]', '[ShowProperties]',
+ '[ShowHidePreviewPane]', '[ShowHideParentPreview]',
+ '[ShowHideLinkPreview]', '[ShowHideIMContactList]',
+ '[SetCurrentLocation]', '[SendInstantMessage]',
+ '[SectionRemoveHeader]', '[SectionProperties]',
+ '[SectionExpandAll]', '[SectionExpand]', '[SectionDefineEditors]',
+ '[SectionCollapseAll]', '[SectionCollapse]', '[RunScheduledAgents]',
+ '[RunAgent]', '[ReplicatorStop]', '[ReplicatorStart]',
+ '[ReplicatorSendReceiveMail]', '[ReplicatorSendMail]',
+ '[ReplicatorReplicateWithServer]', '[ReplicatorReplicateSelected]',
+ '[ReplicatorReplicateNext]', '[ReplicatorReplicateHigh]',
+ '[Replicator]', '[RenameDatabase]', '[RemoveFromFolder]',
+ '[RemoteDebugLotusScript]', '[ReloadWindow]', '[RefreshWindow]',
+ '[RefreshParentNote]', '[RefreshHideFormulas]', '[RefreshFrame]',
+ '[PublishDatabase]', '[PictureProperties]', '[PasteBitmapAsObject]',
+ '[PasteBitmapAsBackground]', '[OpenView]', '[OpenPage]',
+ '[OpenNavigator]', '[OpenInNewWindow]', '[OpenHelpDocument]',
+ '[OpenFrameset]', '[OpenDocument]', '[OpenCalendar]',
+ '[ObjectProperties]', '[ObjectOpen]', '[ObjectDisplayAs]',
+ '[NavPrevUnread]', '[NavPrevSelected]', '[NavPrevMain]',
+ '[NavPrev]', '[NavNextUnread]', '[NavNextSelected]',
+ '[NavNextMain]', '[NavNext]', '[NavigatorTest]',
+ '[NavigatorProperties]', '[NavigateToBacklink]',
+ '[NavigatePrevUnread]', '[NavigatePrevSelected]',
+ '[NavigatePrevMain]', '[NavigatePrevHighlight]', '[NavigatePrev]',
+ '[NavigateNextUnread]', '[NavigateNextSelected]',
+ '[NavigateNextMain]', '[NavigateNextHighlight]', '[NavigateNext]',
+ '[MoveToTrash]', '[MailSendPublicKey]', '[MailSendEncryptionKey]',
+ '[MailSendCertificateRequest]', '[MailSend]', '[MailScanUnread]',
+ '[MailRequestNewPublicKey]', '[MailRequestNewName]',
+ '[MailRequestCrossCert]', '[MailOpen]', '[MailForwardAsAttachment]',
+ '[MailForward]', '[MailComposeMemo]', '[MailAddress]',
+ '[LayoutProperties]', '[LayoutElementSendToBack]',
+ '[LayoutElementProperties]', '[LayoutElementBringToFront]',
+ '[LayoutAddText]', '[LayoutAddGraphic]', '[InsertSubform]',
+ '[HotspotProperties]', '[HotspotClear]', '[HelpUsingDatabase]',
+ '[HelpAboutNotes]', '[HelpAboutDatabase]', '[GoUpLevel]',
+ '[FormTestDocument]', '[FormActions]', '[FolderRename]',
+ '[FolderProperties]', '[FolderMove]', '[FolderExpandWithChildren]',
+ '[FolderExpandAll]', '[FolderExpand]', '[FolderDocuments]',
+ '[FolderCustomize]', '[FolderCollapse]', '[Folder]',
+ '[FindFreeTimeDialog]', '[FileSaveNewVersion]', '[FileSave]',
+ '[FilePrintSetup]', '[FilePrint]', '[FilePageSetup]',
+ '[FileOpenDBRepID]', '[FileOpenDatabase]', '[FileNewReplica]',
+ '[FileNewDatabase]', '[FileImport]', '[FileFullTextUpdate]',
+ '[FileFullTextInfo]', '[FileFullTextDelete]',
+ '[FileFullTextCreate]', '[FileExport]', '[FileExit]',
+ '[FileDatabaseUseServer]', '[FileDatabaseRemove]',
+ '[FileDatabaseInfo]', '[FileDatabaseDelete]', '[FileDatabaseCopy]',
+ '[FileDatabaseCompact]', '[FileDatabaseACL]', '[FileCloseWindow]',
+ '[ExitNotes]', '[Execute]', '[ExchangeUnreadMarks]', '[EmptyTrash]',
+ '[EditUp]', '[EditUntruncate]', '[EditUndo]', '[EditTop]',
+ '[EditTableInsertRowColumn]', '[EditTableFormat]',
+ '[EditTableDeleteRowColumn]', '[EditShowHideHiddenChars]',
+ '[EditSelectByDate]', '[EditSelectAll]', '[EditRight]',
+ '[EditRestoreDocument]', '[EditResizePicture]',
+ '[EditQuoteSelection]', '[EditProfileDocument]', '[EditProfile]',
+ '[EditPrevField]', '[EditPhoneNumbers]', '[EditPasteSpecial]',
+ '[EditPaste]', '[EditOpenLink]', '[EditNextField]',
+ '[EditMakeDocLink]', '[EditLocations]', '[EditLinks]', '[EditLeft]',
+ '[EditInsertText]', '[EditInsertTable]', '[EditInsertPopup]',
+ '[EditInsertPageBreak]', '[EditInsertObject]',
+ '[EditInsertFileAttachment]', '[EditInsertButton]',
+ '[EditIndentFirstLine]', '[EditIndent]', '[EditHorizScrollbar]',
+ '[EditHeaderFooter]', '[EditGotoField]', '[EditFindNext]',
+ '[EditFindInPreview]', '[EditFind]', '[EditEncryptionKeys]',
+ '[EditDown]', '[EditDocument]', '[EditDetach]', '[EditDeselectAll]',
+ '[EditCut]', '[EditCopy]', '[EditClear]', '[EditButton]',
+ '[EditBottom]', '[DiscoverFolders]', '[Directories]',
+ '[DialingRules]', '[DesignViewSelectFormula]', '[DesignViews]',
+ '[DesignViewNewColumn]', '[DesignViewFormFormula]',
+ '[DesignViewEditActions]', '[DesignViewColumnDef]',
+ '[DesignViewAttributes]', '[DesignViewAppendColumn]',
+ '[DesignSynopsis]', '[DesignSharedFields]', '[DesignReplace]',
+ '[DesignRefresh]', '[DesignMacros]', '[DesignIcon]',
+ '[DesignHelpUsingDocument]', '[DesignHelpAboutDocument]',
+ '[DesignFormWindowTitle]', '[DesignFormUseField]',
+ '[DesignFormShareField]', '[DesignForms]', '[DesignFormNewField]',
+ '[DesignFormFieldDef]', '[DesignFormAttributes]',
+ '[DesignDocumentInfo]', '[DebugLotusScript]',
+ '[DatabaseReplSettings]', '[DatabaseDelete]', '[CreateView]',
+ '[CreateTextbox]', '[CreateSubForm]', '[CreateSection]',
+ '[CreateRectangularHotspot]', '[CreateRectangle]',
+ '[CreatePolyline]', '[CreatePolygon]', '[CreateNavigator]',
+ '[CreateLayoutRegion]', '[CreateForm]', '[CreateFolder]',
+ '[CreateEllipse]', '[CreateControlledAccessSection]',
+ '[CreateAgent]', '[CreateAction]', '[CopySelectedAsTable]',
+ '[ComposeWithReference]', '[Compose]', '[CloseWindow]', '[Clear]',
+ '[ChooseFolders]', '[CalendarGoTo]', '[CalendarFormat]',
+ '[AttachmentView]', '[AttachmentProperties]', '[AttachmentLaunch]',
+ '[AttachmentDetachAll]', '[AgentTestRun]', '[AgentSetServerName]',
+ '[AgentRun]', '[AgentLog]', '[AgentEnableDisable]', '[AgentEdit]',
+ '[AdminTraceConnection]', '[AdminStatisticsConfig]',
+ '[AdminSendMailTrace]', '[AdminRemoteConsole]',
+ '[AdminRegisterUser]', '[AdminRegisterServer]',
+ '[AdminRegisterFromFile]', '[AdminOutgoingMail]',
+ '[AdminOpenUsersView]', '[AdminOpenStatistics]',
+ '[AdminOpenServersView]', '[AdminOpenServerLog]',
+ '[AdminOpenGroupsView]', '[AdminOpenCertLog]', '[AdminOpenCatalog]',
+ '[AdminOpenAddressBook]', '[AdminNewOrgUnit]',
+ '[AdminNewOrganization]', '[Administration]',
+ '[AdminIDFileSetPassword]', '[AdminIDFileExamine]',
+ '[AdminIDFileClearPassword]', '[AdminDatabaseQuotas]',
+ '[AdminDatabaseAnalysis]', '[AdminCrossCertifyKey]',
+ '[AdminCrossCertifyIDFile]', '[AdminCreateGroup]', '[AdminCertify]',
+ '[AddToIMContactList]', '[AddDatabaseRepID]', '[AddDatabase]',
+ '[AddBookmark]'
+ ),
+ 2 => array(
+ 'SELECT', 'FIELD', 'ENVIRONMENT', 'DEFAULT', '@Zone ', '@Yesterday',
+ '@Yes', '@Year', '@Word', '@Wide', '@While', '@Weekday',
+ '@WebDbName', '@ViewTitle', '@ViewShowThisUnread', '@Version',
+ '@VerifyPassword', '@ValidateInternetAddress', '@V4UserAccess',
+ '@V3UserName', '@V2If', '@UserRoles', '@UserPrivileges',
+ '@UserNamesList', '@UserNameLanguage', '@UserName', '@UserAccess',
+ '@UrlQueryString', '@URLOpen', '@URLHistory', '@URLGetHeader',
+ '@URLEncode', '@URLDecode', '@UpperCase', '@UpdateFormulaContext',
+ '@Unique', '@UndeleteDocument', '@Unavailable', '@True', '@Trim',
+ '@Transform', '@ToTime', '@ToNumber', '@Tomorrow', '@Today',
+ '@TimeZoneToText', '@TimeToTextInZone', '@TimeMerge', '@Time',
+ '@ThisValue', '@ThisName', '@TextToTime', '@TextToNumber', '@Text',
+ '@TemplateVersion', '@Tan', '@Sum', '@Success', '@Subset',
+ '@StatusBar', '@Sqrt', '@Soundex', '@Sort', '@Sin', '@Sign',
+ '@SetViewInfo', '@SetTargetFrame', '@SetProfileField',
+ '@SetHTTPHeader', '@SetField', '@SetEnvironment', '@SetDocField',
+ '@Set', '@ServerName', '@ServerAccess', '@Select', '@Second',
+ '@Round', '@RightBack', '@Right', '@Return', '@Responses',
+ '@ReplicaID', '@ReplaceSubstring', '@Replace', '@Repeat',
+ '@RegQueryValue', '@RefreshECL', '@Random', '@ProperCase',
+ '@Prompt', '@Power', '@PostedCommand', '@PolicyIsFieldLocked',
+ '@Platform', '@PickList', '@Pi', '@PasswordQuality', '@Password',
+ '@OrgDir', '@OptimizeMailAddress', '@OpenInNewWindow', '@Now',
+ '@Nothing', '@NoteID', '@No', '@NewLine', '@Narrow', '@NameLookup',
+ '@Name', '@Month', '@Modulo', '@Modified', '@Minute', '@Min',
+ '@MiddleBack', '@Middle', '@Member', '@Max', '@Matches',
+ '@MailSignPreference', '@MailSend', '@MailSavePreference',
+ '@MailEncryptSentPreference', '@MailEncryptSavedPreference',
+ '@MailDbName', '@LowerCase', '@Log', '@Locale', '@Ln', '@Like',
+ '@Length', '@LeftBack', '@Left', '@LDAPServer', '@LaunchApp',
+ '@LanguagePreference', '@Keywords', '@IsVirtualizedDirectory',
+ '@IsValid', '@IsUsingJavaElement', '@IsUnavailable', '@IsTime',
+ '@IsText', '@IsResponseDoc', '@IsNumber', '@IsNull', '@IsNotMember',
+ '@IsNewDoc', '@IsModalHelp', '@IsMember', '@IsExpandable',
+ '@IsError', '@IsEmbeddedInsideWCT', '@IsDocTruncated',
+ '@IsDocBeingSaved', '@IsDocBeingRecalculated', '@IsDocBeingMailed',
+ '@IsDocBeingLoaded', '@IsDocBeingEdited', '@IsDB2', '@IsCategory',
+ '@IsAvailable', '@IsAppInstalled', '@IsAgentEnabled', '@Integer',
+ '@InheritedDocumentUniqueID', '@Implode', '@IfError', '@If',
+ '@Hour', '@HashPassword', '@HardDeleteDocument', '@GetViewInfo',
+ '@GetProfileField', '@GetPortsList', '@GetIMContactListGroupNames',
+ '@GetHTTPHeader', '@GetFocusTable', '@GetField', '@GetDocField',
+ '@GetCurrentTimeZone', '@GetAddressBooks', '@FormLanguage', '@For',
+ '@FontList', '@FloatEq', '@FileDir', '@False', '@Failure',
+ '@Explode', '@Exp', '@Eval', '@Error', '@Environment', '@Ends',
+ '@EnableAlarms', '@Elements', '@EditUserECL', '@EditECL',
+ '@DoWhile', '@Domain', '@DocumentUniqueID', '@DocSiblings',
+ '@DocParentNumber', '@DocOmmittedLength', '@DocNumber', '@DocMark',
+ '@DocLock', '@DocLevel', '@DocLength', '@DocFields',
+ '@DocDescendants', '@DocChildren', '@Do', '@DialogBox',
+ '@DeleteField', '@DeleteDocument', '@DDETerminate', '@DDEPoke',
+ '@DDEInitiate', '@DDEExecute', '@DbTitle', '@DbName', '@DbManager',
+ '@DbLookup', '@DbExists', '@DbCommand', '@DbColumn', '@DB2Schema',
+ '@Day', '@Date', '@Created', '@Count', '@Cos', '@Contains',
+ '@ConfigFile', '@Compare', '@Command', '@ClientType',
+ '@CheckFormulaSyntax', '@CheckAlarms', '@Char', '@Certificate',
+ '@BusinessDays', '@BrowserInfo', '@Begins', '@Author',
+ '@Attachments', '@AttachmentNames', '@AttachmentModifiedTimes',
+ '@AttachmentLengths', '@ATan2', '@ATan', '@ASin', '@Ascii',
+ '@AllDescendants', '@AllChildren', '@All', '@AdminECLIsLocked',
+ '@Adjust', '@AddToFolder', '@ACos', '@Accessed', '@AbstractSimple',
+ '@Abstract', '@Abs'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #800000;',
+ 2 => 'color: #0000FF;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #008000;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #FF00FF;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #FF00FF;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #0000AA;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099;'
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 2
+ );
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/lotusscript.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/lotusscript.php
new file mode 100644
index 000000000..5272377b1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/lotusscript.php
@@ -0,0 +1,191 @@
+<?php
+/**
+ * lotusscript.php
+ * ------------------------
+ * Author: Richard Civil (info@richardcivil.net)
+ * Copyright: (c) 2008 Richard Civil (info@richardcivil.net), Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2008/04/12
+ *
+ * LotusScript language file for GeSHi.
+ *
+ * LotusScript source: IBM Lotus Notes/Domino 8 Designer Help
+ *
+ * CHANGES
+ * -------
+ * 2008/04/12 (1.0.7.22)
+ * - First Release
+ *
+ * TODO (2008/04/12)
+ * -----------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'LotusScript',
+ 'COMMENT_SINGLE' => array(1 => "'"),
+ 'COMMENT_MULTI' => array('%REM' => '%END REM'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"' , "|"),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ 1 => array (
+ 'Yield', 'Year', 'Xor', 'Write', 'With', 'Width', 'While', 'Wend',
+ 'Weekday', 'VarType', 'Variant', 'Val', 'UString', 'UString$',
+ 'UseLSX', 'Use', 'Until', 'Unlock', 'Unicode', 'Uni', 'UChr',
+ 'UChr$', 'UCase', 'UCase$', 'UBound', 'TypeName', 'Type', 'TRUE',
+ 'Trim', 'Trim$', 'Today', 'To', 'TimeValue', 'TimeSerial', 'Timer',
+ 'TimeNumber', 'Time', 'Time$', 'Then', 'Text', 'Tan', 'Tab', 'Sub',
+ 'StrToken', 'StrToken$', 'StrRightBack', 'StrRightBack$',
+ 'StrRight', 'StrRight$', 'StrLeftBack', 'StrLeftBack$', 'StrLeft',
+ 'StrLeft$', 'String', 'String$', 'StrConv', 'StrCompare', 'StrComp',
+ 'Str', 'Str$', 'Stop', 'Step', 'Static', 'Sqr', 'Split', 'Spc',
+ 'Space', 'Space$', 'Sleep', 'Single', 'Sin', 'Shell', 'Shared',
+ 'Sgn', 'SetFileAttr', 'SetAttr', 'Set', 'SendKeys', 'Select',
+ 'Seek', 'Second', 'RTrim', 'RTrim$', 'RSet', 'Round', 'Rnd',
+ 'RmDir', 'RightC', 'RightC$', 'RightBP', 'RightBP$', 'RightB',
+ 'RightB$', 'Right', 'Right$', 'Return', 'Resume', 'Reset',
+ 'Replace', 'Remove', 'Rem', 'ReDim', 'Read', 'Randomize',
+ 'Random', 'Put', 'Public', 'Property', 'Private', 'Print',
+ 'Preserve', 'Pitch', 'PI', 'Output', 'Or', 'Option', 'Open', 'On',
+ 'Oct', 'Oct$', 'NULL', 'Now', 'NOTHING', 'Not', 'NoPitch', 'NoCase',
+ 'Next', 'New', 'Name', 'MsgBox', 'Month', 'Mod', 'MkDir', 'Minute',
+ 'MidC', 'MidC$', 'MidBP', 'MidBP$', 'MidB', 'MidB$', 'Mid', 'Mid$',
+ 'MessageBox', 'Me', 'LTrim', 'LTrim$', 'LSServer', 'LSI_Info',
+ 'LSet', 'Loop', 'Long', 'Log', 'LOF', 'Lock', 'LOC', 'LMBCS',
+ 'ListTag', 'List', 'Line', 'Like', 'Lib', 'Let', 'LenC', 'LenBP',
+ 'LenB', 'Len', 'LeftC', 'LeftC$', 'LeftBP', 'LeftBP$', 'LeftB',
+ 'LeftB$', 'Left', 'Left$', 'LCase', 'LCase$', 'LBound', 'Kill',
+ 'Join', 'IsUnknown', 'IsScalar', 'IsObject', 'IsNumeric', 'IsNull',
+ 'IsList', 'IsEmpty', 'IsElement', 'IsDate', 'IsArray', 'IsA', 'Is',
+ 'Integer', 'Int', 'InStrC', 'InStrBP', 'InStrB', 'InStr', 'InputBP',
+ 'InputBP$', 'InputBox', 'InputBox$', 'InputB', 'InputB$', 'Input',
+ 'Input$', 'In', 'IMSetMode', 'Implode', 'Implode$', 'Imp',
+ 'IMEStatus', 'If', 'Hour', 'Hex', 'Hex$', 'Goto', 'GoSub',
+ 'GetThreadInfo', 'GetFileAttr', 'GetAttr', 'Get', 'Function',
+ 'FullTrim', 'From', 'FreeFile', 'Fraction', 'Format', 'Format$',
+ 'ForAll', 'For', 'Fix', 'FileLen', 'FileDateTime', 'FileCopy',
+ 'FileAttr', 'FALSE', 'Explicit', 'Exp', 'Exit', 'Execute', 'Event',
+ 'Evaluate', 'Error', 'Error$', 'Err', 'Erl', 'Erase', 'Eqv', 'EOF',
+ 'Environ', 'Environ$', 'End', 'ElseIf', 'Else', 'Double', 'DoEvents',
+ 'Do', 'Dir', 'Dir$', 'Dim', 'DestroyLock', 'Delete', 'DefVar',
+ 'DefStr', 'DefSng', 'DefLng', 'DefInt', 'DefDbl', 'DefCur',
+ 'DefByte', 'DefBool', 'Declare', 'Day', 'DateValue', 'DateSerial',
+ 'DateNumber', 'Date', 'Date$', 'DataType', 'CVDate', 'CVar',
+ 'Currency', 'CurDrive', 'CurDrive$', 'CurDir', 'CurDir$', 'CStr',
+ 'CSng', 'CreateLock', 'Cos', 'Const', 'Compare', 'Command',
+ 'Command$', 'CodeUnlock', 'CodeLockCheck', 'CodeLock', 'Close',
+ 'CLng', 'Class', 'CInt', 'Chr', 'Chr$', 'ChDrive', 'ChDir', 'CDbl',
+ 'CDat', 'CCur', 'CByte', 'CBool', 'Case', 'Call', 'ByVal', 'Byte',
+ 'Boolean', 'Bind', 'Binary', 'Bin', 'Bin$', 'Beep', 'Base', 'Atn2',
+ 'Atn', 'ASin', 'Asc', 'As', 'ArrayUnique', 'ArrayReplace',
+ 'ArrayGetIndex', 'ArrayAppend', 'Append', 'AppActivate', 'Any',
+ 'And', 'Alias', 'ActivateApp', 'ACos', 'Access', 'Abs', '%Include',
+ '%If', '%END', '%ElseIf', '%Else'
+ ),
+ 2 => array (
+ 'NotesXSLTransformer', 'NotesXMLProcessor', 'NotesViewNavigator',
+ 'NotesViewEntryCollection', 'NotesViewEntry', 'NotesViewColumn',
+ 'NotesView', 'NotesUIWorkspace', 'NotesUIView', 'NotesUIScheduler',
+ 'NotesUIDocument', 'NotesUIDatabase', 'NotesTimer', 'NotesStream',
+ 'NotesSession', 'NotesSAXParser', 'NotesSAXException',
+ 'NotesSAXAttributeList', 'NotesRichTextTable', 'NotesRichTextTab',
+ 'NotesRichTextStyle', 'NotesRichTextSection', 'NotesRichTextRange',
+ 'NotesRichTextParagraphStyle', 'NotesRichTextNavigator',
+ 'NotesRichTextItem', 'NotesRichTextDocLink',
+ 'NotesReplicationEntry', 'NotesReplication', 'NotesRegistration',
+ 'NotesOutlineEntry', 'NotesOutline', 'NotesNoteCollection',
+ 'NotesNewsLetter', 'NotesName', 'NotesMIMEHeader',
+ 'NotesMIMEEntity', 'NotesLog', 'NotesItem', 'NotesInternational',
+ 'NotesForm', 'NotesEmbeddedObject', 'NotesDXLImporter',
+ 'NotesDXLExporter', 'NotesDOMXMLDeclNode', 'NotesDOMTextNode',
+ 'NotesDOMProcessingInstructionNode', 'NotesDOMParser',
+ 'NotesDOMNotationNode', 'NotesDOMNodeList', 'NotesDOMNode',
+ 'NotesDOMNamedNodeMap', 'NotesDOMEntityReferenceNode',
+ 'NotesDOMEntityNode', 'NotesDOMElementNode',
+ 'NotesDOMDocumentTypeNode', 'NotesDOMDocumentNode',
+ 'NotesDOMDocumentFragmentNode', 'NotesDOMCommentNode',
+ 'NotesDOMCharacterDataNote', 'NotesDOMCDATASectionNode',
+ 'NotesDOMAttributeNode', 'NotesDocumentCollection', 'NotesDocument',
+ 'NotesDbDirectory', 'NotesDateTime', 'NotesDateRange',
+ 'NotesDatabase', 'NotesColorObject', 'NotesAgent',
+ 'NotesAdministrationProcess', 'NotesACLEntry', 'NotesACL',
+ 'Navigator', 'Field', 'Button'
+ )
+ ) ,
+ 'SYMBOLS' => array(
+ '(', ')'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #0000FF;',
+ 2 => 'color: #0000EE;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #008000;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #FF00FF;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #0000AA;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #006600;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099;'
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 2
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/lscript.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/lscript.php
new file mode 100644
index 000000000..1a5b0726e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/lscript.php
@@ -0,0 +1,387 @@
+<?php
+/*************************************************************************************
+ * lscript.php
+ * ---------
+ * Author: Arendedwinter (admin@arendedwinter.com)
+ * Copyright: (c) 2008 Beau McGuigan (http://www.arendedwinter.com)
+ * Release Version: 1.0.8.4
+ * Date Started: 15/11/2008
+ *
+ * Lightwave Script language file for GeSHi.
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'LScript',
+ 'COMMENT_SINGLE' => array(1 => '//'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ //Yes, I'm aware these are out of order,
+ //I had to rearrange and couldn't be bothered changing the numbers...
+ 7 => array(
+ '@data', '@define', '@else', '@end', '@fpdepth', '@if', '@include',
+ '@insert', '@library', '@localipc', '@name', '@save', '@script',
+ '@sequence', '@version', '@warnings'
+ ),
+ 1 => array(
+ 'break', 'case', 'continue', 'else', 'end', 'false', 'for',
+ 'foreach', 'if', 'return', 'switch', 'true', 'while',
+ ),
+ 3 => array(
+ 'active', 'alertlevel', 'alpha', 'alphaprefix', 'animfilename', 'autokeycreate',
+ 'backdroptype', 'blue', 'boxthreshold', 'button',
+ 'channelsvisible', 'childrenvisible', 'compfg', 'compbg', 'compfgalpha',
+ 'coneangles', 'cosine', 'count', 'ctl', 'curFilename', 'curFrame',
+ 'currenttime', 'curTime', 'curType',
+ 'depth', 'diffshade', 'diffuse', 'dimensions', 'displayopts', 'dynamicupdate',
+ 'end', 'eta',
+ 'filename', 'flags', 'fogtype', 'fps', 'frame', 'frameend', 'frameheight',
+ 'framestart', 'framestep', 'framewidth',
+ 'generalopts', 'genus', 'geometry', 'gNorm', 'goal', 'green',
+ 'h', 'hasAlpha', 'height',
+ 'id', 'innerlimit', 'isColor',
+ 'keyCount', 'keys',
+ 'limiteregion', 'locked', 'luminous',
+ 'maxsamplesperpixel', 'minsamplesperpixel', 'mirror', 'motionx', 'motiony',
+ 'name', 'newFilename', 'newFrame', 'newTime', 'newType', 'null', 'numthreads',
+ 'objID', 'oPos', 'outerlimit', 'oXfrm',
+ 'parent', 'pixel', 'pixelaspect', 'point', 'points', 'pointcount', 'polNum',
+ 'polycount', 'polygon', 'polygons', 'postBehavior', 'preBehavior', 'previewend',
+ 'previewstart', 'previewstep',
+ 'range', 'rawblue', 'rawgreen', 'rawred', 'rayLength', 'raySource', 'red',
+ 'reflectblue', 'reflectgreen', 'reflectred', 'recursiondepth', 'renderend',
+ 'renderopts', 'renderstart', 'renderstep', 'rendertype', 'restlength',
+ 'rgbprefix', 'roughness',
+ 'selected', 'setColor', 'setPattern', 'shading', 'shadow', 'shadows',
+ 'shadowtype', 'size', 'source', 'special', 'specshade', 'specular',
+ 'spotsize', 'start', 'sx', 'sy', 'sz',
+ 'target', 'totallayers', 'totalpoints', 'totalpolygons', 'trans', 'transparency',
+ 'type',
+ 'value', 'view', 'visible', 'visibility',
+ 'w', 'width', 'wNorm', 'wPos', 'wXfrm',
+ 'x', 'xoffset',
+ 'y', 'yoffset',
+ 'z'
+ ),
+ 4 => array(
+ 'addLayer', 'addParticle', 'alphaspot', 'ambient', 'asAsc', 'asBin',
+ 'asInt', 'asNum', 'asStr', 'asVec', 'attach', 'axislocks',
+ 'backdropColor', 'backdropRay', 'backdropSqueeze', 'bone', 'blurLength',
+ 'close', 'color', 'contains', 'copy', 'createKey',
+ 'deleteKey', 'detach', 'drawCircle', 'drawLine', 'drawPoint', 'drawText',
+ 'drawTriangle',
+ 'edit', 'eof', 'event',
+ 'firstChannel', 'firstLayer', 'firstSelect', 'focalLength', 'fogColor',
+ 'fogMaxAmount', 'fogMaxDist', 'fogMinAmount', 'fogMinDist',
+ 'fovAngles', 'fStop', 'firstChild', 'focalDistance',
+ 'get', 'getChannelGroup', 'getEnvelope', 'getForward', 'getKeyBias',
+ 'getKeyContinuity', 'getKeyCurve', 'getKeyHermite', 'getKeyTension',
+ 'getKeyTime', 'getKeyValue', 'getParticle', 'getPivot', 'getPosition',
+ 'getRight', 'getRotation', 'getSelect', 'getScaling', 'getTag', 'getTexture',
+ 'getUp', 'getValue', 'getWorldPosition', 'getWorldForward', 'getWorldRight',
+ 'getWorldRotation', 'getWorldUp', 'globalBlur', 'globalMask', 'globalResolution',
+ 'hasCCEnd', 'hasCCStart',
+ 'illuminate', 'indexOf', 'isAscii', 'isAlnum', 'isAlpha', 'isBone',
+ 'isCamera', 'isChannel', 'isChannelGroup', 'isCntrl', 'isCurve', 'isDigit',
+ 'isEnvelope', 'isImage', 'isInt', 'isLight', 'isLower', 'isMapped', 'isMesh',
+ 'isNil', 'isNum', 'IsOpen', 'isOriginal', 'isPrint', 'isPunct', 'isScene',
+ 'isSpace', 'isStr', 'isUpper', 'isValid', 'isVMap', 'isVec', 'isXDigit',
+ 'keyExists',
+ 'layer', 'layerName', 'layerVisible', 'limits', 'line', 'linecount', 'load', 'luma',
+ 'next', 'nextLayer', 'nextSelect', 'nextChannel', 'nextChild', 'nl',
+ 'offset', 'open',
+ 'pack', 'param', 'parse', 'paste', 'persist', 'polygonCount', 'position',
+ 'rayCast', 'rayTrace', 'read', 'readByte', 'readInt', 'readNumber',
+ 'readDouble', 'readShort', 'readString', 'readVector', 'reduce',
+ 'remParticle', 'renderCamera', 'reopen', 'replace', 'reset', 'restParam',
+ 'rewind', 'rgb', 'rgbambient', 'rgbcolor', 'rgbspot',
+ 'save', 'schemaPosition', 'select', 'set', 'setChannelGroup', 'setKeyBias',
+ 'setKeyContinuity', 'setKeyCurve',
+ 'setKeyHermite', 'setKeyTension', 'setKeyValue', 'setParticle', 'setPoints',
+ 'setTag', 'setValue', 'server', 'serverFlags', 'sortA', 'sortD', 'surface',
+ 'trunc',
+ 'write', 'writeln', 'writeByte', 'writeData', 'writeNumber', 'writeDouble',
+ 'writeShort', 'writeString', 'writeVector',
+ 'vertex', 'vertexCount',
+ 'zoomFactor'
+ ),
+ 2 => array(
+ 'abs', 'acos', 'angle', 'append', 'ascii', 'asin', 'atan',
+ 'binary',
+ 'ceil', 'center', 'chdir', 'clearimage', 'cloned', 'comringattach',
+ 'comringdecode', 'comringdetach', 'comringencode', 'comringmsg', 'cos',
+ 'cosh', 'cot', 'cross2d', 'cross3d', 'csc', 'ctlstring', 'ctlinteger',
+ 'ctlnumber', 'ctlvector', 'ctldistance', 'ctlchoice', 'ctltext',
+ 'ctlcolor', 'ctlsurface', 'ctlfont', 'ctlpopup', 'ctledit', 'ctlpercent',
+ 'ctlangle', 'ctlrgb', 'ctlhsv', 'ctlcheckbox', 'ctlstate', 'ctlfilename',
+ 'ctlbutton', 'ctllistbox', 'ctlslider', 'ctlminislider', 'ctlsep', 'ctlimage',
+ 'ctltab', 'ctlallitems', 'ctlmeshitems', 'ctlcameraitems', 'ctllightitems',
+ 'ctlboneitems', 'ctlimageitems', 'ctlchannel', 'ctlviewport', 'Control_Management',
+ 'ctlpage', 'ctlgroup', 'ctlposition', 'ctlactive', 'ctlvisible', 'ctlalign',
+ 'ctlrefresh', 'ctlmenu', 'ctlinfo',
+ 'date', 'debug', 'deg', 'dot2d', 'dot3d', 'drawborder', 'drawbox', 'drawcircle',
+ 'drawelipse', 'drawerase', 'drawfillcircle', 'drawfillelipse', 'drawline',
+ 'drawpixel', 'drawtext', 'drawtextwidth', 'drawtextheight', 'dump',
+ 'error', 'exp', 'expose', 'extent',
+ 'fac', 'filecrc', 'filedelete', 'fileexists', 'filefind', 'filerename',
+ 'filestat', 'floor', 'format', 'frac', 'fullpath',
+ 'gamma', 'getdir', 'getenv', 'getfile', 'getfirstitem', 'getsep', 'getvalue',
+ 'globalrecall', 'globalstore',
+ 'hash', 'hex', 'hostBuild', 'hostVersion', 'hypot',
+ 'info', 'integer',
+ 'library', 'licenseId', 'lscriptVersion', 'load', 'loadimage', 'log', 'log10',
+ 'matchdirs', 'matchfiles', 'max', 'min', 'mkdir', 'mod', 'monend', 'moninit', 'monstep',
+ 'nil', 'normalize', 'number',
+ 'octal', 'overlayglyph',
+ 'parse', 'platform', 'pow',
+ 'rad', 'random', 'randu', 'range', 'read', 'readdouble', 'readInt', 'readNumber',
+ 'readShort', 'recall', 'regexp', 'reqabort', 'reqbegin', 'reqend', 'reqisopen',
+ 'reqkeyboard', 'reqopen', 'reqposition', 'reqpost', 'reqredraw',
+ 'reqsize', 'reqresize', 'requpdate', 'rmdir', 'round', 'runningUnder',
+ 'save', 'sec', 'select', 'selector', 'setdesc', 'setvalue', 'sin', 'sinh', 'size',
+ 'sizeof', 'sleep', 'spawn', 'split', 'sqrt', 'step', 'store', 'string', 'strleft',
+ 'strlower', 'strright', 'strsub', 'strupper',
+ 'tan', 'tanh', 'targetobject', 'terminate', 'text', 'time',
+ 'wait', 'warn', 'when', 'write', 'writeDouble', 'writeInt', 'writeNumber', 'writeShort',
+ 'var', 'vector', 'visitnodes', 'vmag',
+ ),
+ 5 => array(
+ 'addcurve', 'addpoint', 'addpolygon', 'addquad', 'addtriangle', 'alignpols',
+ 'autoflex', 'axisdrill',
+ 'bend', 'bevel', 'boolean', 'boundingbox',
+ 'changepart', 'changesurface', 'close', 'closeall', 'cmdseq', 'copy', 'copysurface',
+ 'createsurface', 'cut',
+ 'deformregion', 'delete',
+ 'editbegin', 'editend', 'exit', 'extrude',
+ 'fixedflex', 'flip', 'fontclear', 'fontcount', 'fontindex', 'fontload',
+ 'fontname', 'fracsubdivide', 'freezecurves',
+ 'getdefaultsurface',
+ 'jitter',
+ 'lathe', 'layerName', 'layerVisible', 'lyrbg', 'lyrdata', 'lyrempty', 'lyremptybg',
+ 'lyremptyfg', 'lyrfg', 'lyrsetbg', 'lyrsetfg', 'lyrswap',
+ 'magnet', 'make4patch', 'makeball', 'makebox', 'makecone', 'makedisc',
+ 'maketesball', 'maketext', 'mergepoints', 'mergepols', 'meshedit', 'mirror',
+ 'morphpols', 'move',
+ 'new', 'nextsurface',
+ 'paste', 'pathclone', 'pathextrude', 'pixel', 'pointcount', 'pointinfo',
+ 'pointmove', 'pole', 'polycount', 'polyinfo', 'polynormal', 'polypointcount',
+ 'polypoints', 'polysurface',
+ 'quantize',
+ 'railclone', 'railextrude', 'redo', 'removepols', 'rempoint', 'rempoly',
+ 'renamesurface', 'revert', 'rotate',
+ 'scale', 'selhide', 'selinvert', 'selmode', 'selpoint', 'selpolygon', 'selunhide',
+ 'selectvmap', 'setlayername', 'setobject', 'setpivot', 'setsurface', 'shapebevel',
+ 'shear', 'skinpols', 'smooth', 'smoothcurves', 'smoothscale', 'smoothshift',
+ 'soliddrill', 'splitpols', 'subdivide', 'swaphidden',
+ 'taper', 'triple', 'toggleCCend', 'toggleCCstart', 'togglepatches', 'twist',
+ 'undo', 'undogroupend', 'undogroupbegin', 'unifypols', 'unweld',
+ 'vortex',
+ 'weldaverage', 'weldpoints'
+ ),
+ 6 => array(
+ 'About', 'AboutOpenGL', 'AdaptiveSampling', 'AdaptiveThreshold',
+ 'AddAreaLight', 'AddBone', 'AddButton', 'AddCamera', 'AddChildBone',
+ 'AddDistantLight', 'AddEnvelope', 'AddLinearLight', 'AddNull',
+ 'AddPartigon', 'AddPlugins', 'AddPointLight', 'AddPosition',
+ 'AddRotation', 'AddScale', 'AddSpotlight', 'AddToSelection',
+ 'AdjustRegionTool', 'AffectCaustics', 'AffectDiffuse', 'AffectOpenGL',
+ 'AffectSpecular', 'AlertLevel', 'AmbientColor', 'AmbientIntensity',
+ 'Antialiasing', 'ApertureHeight', 'ApplyServer', 'AreaLight',
+ 'AutoConfirm', 'AutoFrameAdvance', 'AutoKey',
+ 'BackdropColor', 'BackView', 'BController', 'BLimits', 'BLurLength', 'BoneActive',
+ 'BoneFalloffType', 'BoneJointComp', 'BoneJointCompAmounts', 'BoneJointCompParent',
+ 'BoneLimitedRange', 'BoneMaxRange', 'BoneMinRange', 'BoneMuscleFlex',
+ 'BoneMuscleFlexAmounts', 'BoneMuscleFlexParent', 'BoneNormalization',
+ 'BoneRestLength', 'BoneRestPosition', 'BoneRestRotation', 'BoneSource',
+ 'BoneStrength', 'BoneStrengthMultiply', 'BoneWeightMapName', 'BoneWeightMapOnly',
+ 'BoneWeightShade', 'BoneXRay', 'BottomView', 'BoundingBoxThreshold',
+ 'BStiffness',
+ 'CacheCaustics', 'CacheRadiosity', 'CacheShadowMap',
+ 'CameraMask', 'CameraView', 'CameraZoomTool', 'CastShadow', 'CausticIntensity',
+ 'CenterItem', 'CenterMouse', 'ChangeTool', 'ClearAllBones', 'ClearAllCameras',
+ 'ClearAllLights', 'ClearAllObjects', 'ClearAudio', 'ClearScene', 'ClearSelected',
+ 'Clone', 'CommandHistory', 'CommandInput', 'Compositing', 'ConeAngleTool',
+ 'ContentDirectory', 'CreateKey',
+ 'DecreaseGrid', 'DeleteKey', 'DepthBufferAA', 'DepthOfField', 'DisplayOptions',
+ 'DistantLight', 'DrawAntialiasing', 'DrawBones', 'DrawChildBones', 'DynamicUpdate',
+ 'EditBones', 'EditCameras', 'EditKeys', 'EditLights',
+ 'EditMenus', 'EditObjects', 'EditPlugins', 'EditServer', 'EnableCaustics',
+ 'EnableDeformations', 'EnableIK', 'EnableLensFlares', 'EnableRadiosity', 'EnableServer',
+ 'EnableShadowMaps', 'EnableVIPER', 'EnableVolumetricLights', 'EnableXH',
+ 'EnableYP', 'EnableZB', 'EnahancedAA', 'ExcludeLight', 'ExcludeObject',
+ 'EyeSeparation',
+ 'FasterBones', 'FirstFrame', 'FirstItem', 'FitAll', 'FitSelected',
+ 'FlareIntensity', 'FlareOptions', 'FocalDistance', 'FogColor', 'FogMaxAmount',
+ 'FogMaxDistance', 'FogMinAmount', 'FogMinDistance', 'FogType', 'FractionalFrames',
+ 'FrameSize', 'FramesPerSecond', 'FrameStep', 'FreePreview', 'FrontView', 'FullTimeIK',
+ 'GeneralOptions', 'Generics', 'GlobalApertureHeight', 'GlobalBlurLength',
+ 'GlobalFrameSize', 'GlobalIllumination', 'GlobalMaskPosition', 'GlobalMotionBlur',
+ 'GlobalParticleBlur', 'GlobalPixelAspect', 'GlobalResolutionMulitplier', 'GoalItem',
+ 'GoalStrength', 'GoToFrame', 'GradientBackdrop', 'GraphEditor', 'GridSize', 'GroundColor',
+ 'HController', 'HideToolbar', 'HideWindows', 'HLimits', 'HStiffness',
+ 'ImageEditor', 'ImageProcessing', 'IncludeLight', 'IncludeObject', 'IncreaseGrid',
+ 'IndirectBounces', 'Item_SetWindowPos', 'ItemActive', 'ItemColor', 'ItemLock',
+ 'ItemProperties', 'ItemVisibilty',
+ 'KeepGoalWithinReach',
+ 'LastFrame', 'LastItem', 'LastPluginInterface', 'Layout_SetWindowPos',
+ 'Layout_SetWindowSize', 'LeftView', 'LensFlare', 'LensFStop', 'LightColor',
+ 'LightConeAngle', 'LightEdgeAngle', 'LightFalloffType', 'LightIntensity',
+ 'LightIntensityTool', 'LightQuality', 'LightRange', 'LightView', 'LimitB',
+ 'LimitDynamicRange', 'LimitedRegion', 'LimitH', 'LimitP', 'LinearLight',
+ 'LoadAudio', 'LoadFromScene', 'LoadMotion', 'LoadObject', 'LoadObjectLayer',
+ 'LoadPreview', 'LoadScene', 'LocalCoordinateSystem',
+ 'MakePreview', 'MaskColor', 'MaskPosition', 'MasterPlugins', 'MatchGoalOrientation',
+ 'MatteColor', 'MatteObject', 'MetaballResolution', 'Model', 'MorphAmount',
+ 'MorphAmountTool', 'MorphMTSE', 'MorphSurfaces', 'MorphTarget', 'MotionBlur',
+ 'MotionBlurDOFPreview', 'MotionOptions', 'MovePathTool', 'MovePivotTool', 'MoveTool',
+ 'NadirColor', 'NetRender', 'NextFrame', 'NextItem', 'NextKey', 'NextSibling',
+ 'NextViewLayout', 'NoiseReduction', 'Numeric',
+ 'ObjectDissolve',
+ 'ParentCoordinateSystem', 'ParentInPlace', 'ParentItem',
+ 'ParticleBlur', 'PathAlignLookAhead', 'PathAlignMaxLookSteps', 'PathAlignReliableDist',
+ 'Pause', 'PController', 'PerspectiveView',
+ 'PivotPosition', 'PivotRotation', 'PixelAspect', 'PlayAudio', 'PlayBackward',
+ 'PlayForward', 'PlayPreview', 'PLimits', 'PointLight', 'PolygonEdgeColor',
+ 'PolygonEdgeFlags', 'PolygonEdgeThickness', 'PolygonEdgeZScale', 'PolygonSize',
+ 'Position', 'Presets', 'PreviewFirstFrame', 'PreviewFrameStep', 'PreviewLastFrame',
+ 'PreviewOptions', 'PreviousFrame', 'PreviousItem', 'PreviousKey', 'PreviousSibling',
+ 'PreviousViewLayout', 'PStiffness',
+ 'Quit',
+ 'RadiosityIntensity', 'RadiosityTolerance', 'RadiosityType', 'RayRecursionLimit',
+ 'RayTraceReflection', 'RayTraceShadows',
+ 'RayTraceTransparency', 'ReceiveShadow', 'RecentContentDirs', 'RecentScenes',
+ 'ReconstructionFilter', 'RecordMaxAngles', 'RecordMinAngles', 'RecordPivotRotation',
+ 'RecordRestPosition', 'Redraw', 'RedrawNow', 'Refresh', 'RefreshNow', 'RegionPosition',
+ 'RemoveEnvelope', 'RemoveFromSelection', 'RemoveServer', 'Rename', 'RenderFrame',
+ 'RenderOptions', 'RenderScene', 'RenderSelected', 'RenderThreads',
+ 'ReplaceObjectLayer', 'ReplaceWithNull', 'ReplaceWithObject', 'Reset',
+ 'ResolutionMultiplier', 'RestLengthTool', 'RightView', 'RotatePivotTool',
+ 'RotateTool', 'Rotation',
+ 'SaveAllObjects', 'SaveCommandList', 'SaveCommandMessages',
+ 'SaveEndomorph', 'SaveLight', 'SaveLWSC1', 'SaveMotion', 'SaveObject', 'SaveObjectCopy',
+ 'SavePreview', 'SaveScene', 'SaveSceneAs', 'SaveSceneCopy', 'SaveTransformed',
+ 'SaveViewLayout', 'Scale', 'Scene_SetWindowPos', 'Scene_SetWindowSize',
+ 'SceneEditor', 'SchematicPosition', 'SchematicView', 'SelectAllBones',
+ 'SelectAllCameras', 'SelectAllLights', 'SelectAllObjects', 'SelectByName',
+ 'SelectChild', 'SelectItem', 'SelectParent', 'SelfShadow', 'ShadowColor',
+ 'ShadowExclusion', 'ShadowMapAngle', 'ShadowMapFitCone', 'ShadowMapFuzziness',
+ 'ShadowMapSize', 'ShadowType', 'ShowCages', 'ShowFieldChart', 'ShowHandles',
+ 'ShowIKChains', 'ShowMotionPaths', 'ShowSafeAreas', 'ShowTargetLines',
+ 'ShrinkEdgesWithDistance', 'SingleView', 'SizeTool', 'SkelegonsToBones', 'SkyColor',
+ 'Spotlight', 'SquashTool', 'Statistics', 'StatusMsg', 'Stereoscopic', 'StretchTool',
+ 'SubdivisionOrder', 'SubPatchLevel', 'SurfaceEditor', 'Synchronize',
+ 'TargetItem', 'TopView',
+ 'UnaffectedByFog', 'UnaffectedByIK', 'Undo', 'UnseenByAlphaChannel', 'UnseenByCamera',
+ 'UnseenByRays', 'UseGlobalResolution', 'UseGlobalBlur', 'UseGlobalMask',
+ 'UseMorphedPositions',
+ 'ViewLayout', 'VIPER', 'VolumetricLighting',
+ 'VolumetricLightingOptions', 'VolumetricRadiosity', 'Volumetrics',
+ 'WorldCoordinateSystem',
+ 'XYView', 'XZView',
+ 'ZenithColor', 'ZoomFactor', 'ZoomIn', 'ZoomInX2', 'ZoomOut', 'ZoomOutX2', 'ZYView',
+ 'Camera', 'Channel', 'ChannelGroup', 'Envelope', 'File', 'Glyph', 'Icon', 'Image',
+ 'Light', 'Mesh', 'Scene', 'Surface', 'VMap'
+ ),
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '{', '}', '[', ']', '=', '<', '>', '+', '-', '*', '/', '!', '%', '&', '@'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => true,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false,
+ 6 => false,
+ 7 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #000000; font-weight: bold;',
+ 2 => 'color: #FF6820; font-weight: bold;', //LS_COMMANDS
+ 3 => 'color: #007F7F; font-weight: bold;', //LS_MEMBERS
+ 4 => 'color: #800080; font-weight: bold;', //LS_METHODS
+ 5 => 'color: #51BD95; font-weight: bold;', //LS_MODELER
+ 6 => 'color: #416F85; font-weight: bold;', //LS_GENERAL
+ 7 => 'color: #C92929; font-weight: bold;' //LS_COMMANDS (cont)
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #7F7F7F;',
+ 'MULTI' => 'color: #7F7F7F;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #0040A0;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #00C800;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #6953AC;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #0040A0;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'ESCAPE_CHAR' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => '',
+ 5 => '',
+ 6 => '',
+ 7 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 4,
+ 'PARSER_CONTROL' => array(
+ 'KEYWORDS' => array(
+ 3 => array(
+ 'DISALLOWED_BEFORE' => '(?<=\.)'
+ ),
+ 4 => array(
+ 'DISALLOWED_BEFORE' => '(?<=\.)'
+ )
+ )
+ )
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/lsl2.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/lsl2.php
new file mode 100644
index 000000000..0b62ee8b7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/lsl2.php
@@ -0,0 +1,898 @@
+<?php
+/*************************************************************************************
+ * lsl2.php
+ * --------
+ * Author: William Fry (william.fry@nyu.edu)
+ * Copyright: (c) 2009 William Fry
+ * Release Version: 1.0.8.4
+ * Date Started: 2009/02/04
+ *
+ * Linden Scripting Language (LSL2) language file for GeSHi.
+ *
+ * Data derived and validated against the following:
+ * http://wiki.secondlife.com/wiki/LSL_Portal
+ * http://www.lslwiki.net/lslwiki/wakka.php?wakka=HomePage
+ * http://rpgstats.com/wiki/index.php?title=Main_Page
+ *
+ * CHANGES
+ * -------
+ * 2009/02/05 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2009/02/05)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'LSL2',
+ 'COMMENT_SINGLE' => array(1 => '//'),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array( // flow control
+ 'do',
+ 'else',
+ 'for',
+ 'if',
+ 'jump',
+ 'return',
+ 'state',
+ 'while',
+ ),
+ 2 => array( // manifest constants
+ 'ACTIVE',
+ 'AGENT',
+ 'AGENT_ALWAYS_RUN',
+ 'AGENT_ATTACHMENTS',
+ 'AGENT_AWAY',
+ 'AGENT_BUSY',
+ 'AGENT_CROUCHING',
+ 'AGENT_FLYING',
+ 'AGENT_IN_AIR',
+ 'AGENT_MOUSELOOK',
+ 'AGENT_ON_OBJECT',
+ 'AGENT_SCRIPTED',
+ 'AGENT_SITTING',
+ 'AGENT_TYPING',
+ 'AGENT_WALKING',
+ 'ALL_SIDES',
+ 'ANIM_ON',
+ 'ATTACH_BACK',
+ 'ATTACH_BELLY',
+ 'ATTACH_CHEST',
+ 'ATTACH_CHIN',
+ 'ATTACH_HEAD',
+ 'ATTACH_HUD_BOTTOM',
+ 'ATTACH_HUD_BOTTOM_LEFT',
+ 'ATTACH_HUD_BOTTOM_RIGHT',
+ 'ATTACH_HUD_CENTER_1',
+ 'ATTACH_HUD_CENTER_2',
+ 'ATTACH_HUD_TOP_CENTER',
+ 'ATTACH_HUD_TOP_LEFT',
+ 'ATTACH_HUD_TOP_RIGHT',
+ 'ATTACH_LEAR',
+ 'ATTACH_LEYE',
+ 'ATTACH_LFOOT',
+ 'ATTACH_LHAND',
+ 'ATTACH_LHIP',
+ 'ATTACH_LLARM',
+ 'ATTACH_LLLEG',
+ 'ATTACH_LPEC',
+ 'ATTACH_LSHOULDER',
+ 'ATTACH_LUARM',
+ 'ATTACH_LULEG',
+ 'ATTACH_MOUTH',
+ 'ATTACH_NOSE',
+ 'ATTACH_PELVIS',
+ 'ATTACH_REAR',
+ 'ATTACH_REYE',
+ 'ATTACH_RFOOT',
+ 'ATTACH_RHAND',
+ 'ATTACH_RHIP',
+ 'ATTACH_RLARM',
+ 'ATTACH_RLLEG',
+ 'ATTACH_RPEC',
+ 'ATTACH_RSHOULDER',
+ 'ATTACH_RUARM',
+ 'ATTACH_RULEG',
+ 'CAMERA_ACTIVE',
+ 'CAMERA_BEHINDNESS_ANGLE',
+ 'CAMERA_BEHINDNESS_LAG',
+ 'CAMERA_DISTANCE',
+ 'CAMERA_FOCUS',
+ 'CAMERA_FOCUS_LAG',
+ 'CAMERA_FOCUS_LOCKED',
+ 'CAMERA_FOCUS_OFFSET',
+ 'CAMERA_FOCUS_THRESHOLD',
+ 'CAMERA_PITCH',
+ 'CAMERA_POSITION',
+ 'CAMERA_POSITION_LAG',
+ 'CAMERA_POSITION_LOCKED',
+ 'CAMERA_POSITION_THRESHOLD',
+ 'CHANGED_ALLOWED_DROP',
+ 'CHANGED_COLOR',
+ 'CHANGED_INVENTORY',
+ 'CHANGED_LINK',
+ 'CHANGED_OWNER',
+ 'CHANGED_REGION',
+ 'CHANGED_SCALE',
+ 'CHANGED_SHAPE',
+ 'CHANGED_TELEPORT',
+ 'CHANGED_TEXTURE',
+ 'CLICK_ACTION_NONE',
+ 'CLICK_ACTION_OPEN',
+ 'CLICK_ACTION_OPEN_MEDIA',
+ 'CLICK_ACTION_PAY',
+ 'CLICK_ACTION_SIT',
+ 'CLICK_ACTION_TOUCH',
+ 'CONTROL_BACK',
+ 'CONTROL_DOWN',
+ 'CONTROL_FWD',
+ 'CONTROL_LBUTTON',
+ 'CONTROL_LEFT',
+ 'CONTROL_ML_LBUTTON',
+ 'CONTROL_RIGHT',
+ 'CONTROL_ROT_LEFT',
+ 'CONTROL_ROT_RIGHT',
+ 'CONTROL_UP',
+ 'DATA_BORN',
+ 'DATA_NAME',
+ 'DATA_ONLINE',
+ 'DATA_PAYINFO',
+ 'DATA_RATING',
+ 'DATA_SIM_POS',
+ 'DATA_SIM_RATING',
+ 'DATA_SIM_STATUS',
+ 'DEBUG_CHANNEL',
+ 'DEG_TO_RAD',
+ 'EOF',
+ 'FALSE',
+ 'HTTP_BODY_MAXLENGTH',
+ 'HTTP_BODY_TRUNCATED',
+ 'HTTP_METHOD',
+ 'HTTP_MIMETYPE',
+ 'HTTP_VERIFY_CERT',
+ 'INVENTORY_ALL',
+ 'INVENTORY_ANIMATION',
+ 'INVENTORY_BODYPART',
+ 'INVENTORY_CLOTHING',
+ 'INVENTORY_GESTURE',
+ 'INVENTORY_LANDMARK',
+ 'INVENTORY_NONE',
+ 'INVENTORY_NOTECARD',
+ 'INVENTORY_OBJECT',
+ 'INVENTORY_SCRIPT',
+ 'INVENTORY_SOUND',
+ 'INVENTORY_TEXTURE',
+ 'LAND_LEVEL',
+ 'LAND_LOWER',
+ 'LAND_NOISE',
+ 'LAND_RAISE',
+ 'LAND_REVERT',
+ 'LAND_SMOOTH',
+ 'LINK_ALL_CHILDREN',
+ 'LINK_ALL_OTHERS',
+ 'LINK_ROOT',
+ 'LINK_SET',
+ 'LINK_THIS',
+ 'LIST_STAT_GEOMETRIC_MEAN',
+ 'LIST_STAT_MAX',
+ 'LIST_STAT_MEAN',
+ 'LIST_STAT_MEDIAN',
+ 'LIST_STAT_MIN',
+ 'LIST_STAT_NUM_COUNT',
+ 'LIST_STAT_RANGE',
+ 'LIST_STAT_STD_DEV',
+ 'LIST_STAT_SUM',
+ 'LIST_STAT_SUM_SQUARES',
+ 'LOOP',
+ 'MASK_BASE',
+ 'MASK_EVERYONE',
+ 'MASK_GROUP',
+ 'MASK_NEXT',
+ 'MASK_OWNER',
+ 'NULL_KEY',
+ 'OBJECT_CREATOR',
+ 'OBJECT_DESC',
+ 'OBJECT_GROUP',
+ 'OBJECT_NAME',
+ 'OBJECT_OWNER',
+ 'OBJECT_POS',
+ 'OBJECT_ROT',
+ 'OBJECT_UNKNOWN_DETAIL',
+ 'OBJECT_VELOCITY',
+ 'PARCEL_DETAILS_AREA',
+ 'PARCEL_DETAILS_DESC',
+ 'PARCEL_DETAILS_GROUP',
+ 'PARCEL_DETAILS_NAME',
+ 'PARCEL_DETAILS_OWNER',
+ 'PARCEL_FLAG_ALLOW_ALL_OBJECT_ENTRY',
+ 'PARCEL_FLAG_ALLOW_CREATE_GROUP_OBJECTS',
+ 'PARCEL_FLAG_ALLOW_CREATE_OBJECTS',
+ 'PARCEL_FLAG_ALLOW_DAMAGE',
+ 'PARCEL_FLAG_ALLOW_FLY',
+ 'PARCEL_FLAG_ALLOW_GROUP_OBJECT_ENTRY',
+ 'PARCEL_FLAG_ALLOW_GROUP_SCRIPTS',
+ 'PARCEL_FLAG_ALLOW_LANDMARK',
+ 'PARCEL_FLAG_ALLOW_SCRIPTS',
+ 'PARCEL_FLAG_ALLOW_TERRAFORM',
+ 'PARCEL_FLAG_LOCAL_SOUND_ONLY',
+ 'PARCEL_FLAG_RESTRICT_PUSHOBJECT',
+ 'PARCEL_FLAG_USE_ACCESS_GROUP',
+ 'PARCEL_FLAG_USE_ACCESS_LIST',
+ 'PARCEL_FLAG_USE_BAN_LIST',
+ 'PARCEL_FLAG_USE_LAND_PASS_LIST',
+ 'PARCEL_MEDIA_COMMAND_AGENT',
+ 'PARCEL_MEDIA_COMMAND_AUTO_ALIGN',
+ 'PARCEL_MEDIA_COMMAND_DESC',
+ 'PARCEL_MEDIA_COMMAND_LOOP_SET',
+ 'PARCEL_MEDIA_COMMAND_PAUSE',
+ 'PARCEL_MEDIA_COMMAND_PLAY',
+ 'PARCEL_MEDIA_COMMAND_SIZE',
+ 'PARCEL_MEDIA_COMMAND_STOP',
+ 'PARCEL_MEDIA_COMMAND_TEXTURE',
+ 'PARCEL_MEDIA_COMMAND_TIME',
+ 'PARCEL_MEDIA_COMMAND_TYPE',
+ 'PARCEL_MEDIA_COMMAND_URL',
+ 'PASSIVE',
+ 'PAYMENT_INFO_ON_FILE',
+ 'PAYMENT_INFO_USED',
+ 'PAY_DEFAULT',
+ 'PAY_HIDE',
+ 'PERMISSION_ATTACH',
+ 'PERMISSION_CHANGE_LINKS',
+ 'PERMISSION_CONTROL_CAMERA',
+ 'PERMISSION_DEBIT',
+ 'PERMISSION_TAKE_CONTROLS',
+ 'PERMISSION_TRACK_CAMERA',
+ 'PERMISSION_TRIGGER_ANIMATION',
+ 'PERM_ALL',
+ 'PERM_COPY',
+ 'PERM_MODIFY',
+ 'PERM_MOVE',
+ 'PERM_TRANSFER',
+ 'PI',
+ 'PI_BY_TWO',
+ 'PRIM_BUMP_BARK',
+ 'PRIM_BUMP_BLOBS',
+ 'PRIM_BUMP_BRICKS',
+ 'PRIM_BUMP_BRIGHT',
+ 'PRIM_BUMP_CHECKER',
+ 'PRIM_BUMP_CONCRETE',
+ 'PRIM_BUMP_DARK',
+ 'PRIM_BUMP_DISKS',
+ 'PRIM_BUMP_GRAVEL',
+ 'PRIM_BUMP_LARGETILE',
+ 'PRIM_BUMP_NONE',
+ 'PRIM_BUMP_SHINY',
+ 'PRIM_BUMP_SIDING',
+ 'PRIM_BUMP_STONE',
+ 'PRIM_BUMP_STUCCO',
+ 'PRIM_BUMP_SUCTION',
+ 'PRIM_BUMP_TILE',
+ 'PRIM_BUMP_WEAVE',
+ 'PRIM_BUMP_WOOD',
+ 'PRIM_COLOR',
+ 'PRIM_FULLBRIGHT',
+ 'PRIM_HOLE_CIRCLE',
+ 'PRIM_HOLE_DEFAULT',
+ 'PRIM_HOLE_SQUARE',
+ 'PRIM_HOLE_TRIANGLE',
+ 'PRIM_MATERIAL',
+ 'PRIM_MATERIAL_FLESH',
+ 'PRIM_MATERIAL_GLASS',
+ 'PRIM_MATERIAL_LIGHT',
+ 'PRIM_MATERIAL_METAL',
+ 'PRIM_MATERIAL_PLASTIC',
+ 'PRIM_MATERIAL_RUBBER',
+ 'PRIM_MATERIAL_STONE',
+ 'PRIM_MATERIAL_WOOD',
+ 'PRIM_PHANTOM',
+ 'PRIM_PHYSICS',
+ 'PRIM_POSITION',
+ 'PRIM_ROTATION',
+ 'PRIM_SHINY_HIGH',
+ 'PRIM_SHINY_LOW',
+ 'PRIM_SHINY_MEDIUM',
+ 'PRIM_SHINY_NONE',
+ 'PRIM_SIZE',
+ 'PRIM_TEMP_ON_REZ',
+ 'PRIM_TEXTURE',
+ 'PRIM_TYPE',
+ 'PRIM_TYPE_BOX',
+ 'PRIM_TYPE_CYLINDER',
+ 'PRIM_TYPE_PRISM',
+ 'PRIM_TYPE_RING',
+ 'PRIM_TYPE_SPHERE',
+ 'PRIM_TYPE_TORUS',
+ 'PRIM_TYPE_TUBE',
+ 'PSYS_PART_BOUNCE_MASK',
+ 'PSYS_PART_EMISSIVE_MASK',
+ 'PSYS_PART_END_ALPHA',
+ 'PSYS_PART_END_COLOR',
+ 'PSYS_PART_END_SCALE',
+ 'PSYS_PART_FLAGS',
+ 'PSYS_PART_FOLLOW_SRC_MASK',
+ 'PSYS_PART_FOLLOW_VELOCITY_MASK',
+ 'PSYS_PART_INTERP_COLOR_MASK',
+ 'PSYS_PART_INTERP_SCALE_MASK',
+ 'PSYS_PART_MAX_AGE',
+ 'PSYS_PART_START_ALPHA',
+ 'PSYS_PART_START_COLOR',
+ 'PSYS_PART_START_SCALE',
+ 'PSYS_PART_TARGET_LINEAR_MASK',
+ 'PSYS_PART_TARGET_POS_MASK',
+ 'PSYS_PART_WIND_MASK',
+ 'PSYS_SRC_ACCEL',
+ 'PSYS_SRC_ANGLE_BEGIN',
+ 'PSYS_SRC_ANGLE_END',
+ 'PSYS_SRC_BURST_PART_COUNT',
+ 'PSYS_SRC_BURST_RADIUS',
+ 'PSYS_SRC_BURST_RATE',
+ 'PSYS_SRC_BURST_SPEED_MAX',
+ 'PSYS_SRC_BURST_SPEED_MIN',
+ 'PSYS_SRC_INNERANGLE',
+ 'PSYS_SRC_MAX_AGE',
+ 'PSYS_SRC_OMEGA',
+ 'PSYS_SRC_OUTERANGLE',
+ 'PSYS_SRC_PATTERN',
+ 'PSYS_SRC_PATTERN_ANGLE',
+ 'PSYS_SRC_PATTERN_ANGLE_CONE',
+ 'PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY',
+ 'PSYS_SRC_PATTERN_DROP',
+ 'PSYS_SRC_PATTERN_EXPLODE',
+ 'PSYS_SRC_TARGET_KEY',
+ 'PSYS_SRC_TEXTURE',
+ 'RAD_TO_DEG',
+ 'REMOTE_DATA_CHANNEL',
+ 'REMOTE_DATA_REQUEST',
+ 'SCRIPTED',
+ 'SQRT2',
+ 'STATUS_BLOCK_GRAB',
+ 'STATUS_DIE_AT_EDGE',
+ 'STATUS_PHANTOM',
+ 'STATUS_PHYSICS',
+ 'STATUS_RETURN_AT_EDGE',
+ 'STATUS_ROTATE_X',
+ 'STATUS_ROTATE_Y',
+ 'STATUS_ROTATE_Z',
+ 'STATUS_SANDBOX',
+ 'TRUE',
+ 'TWO_PI',
+ 'VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY',
+ 'VEHICLE_ANGULAR_DEFLECTION_TIMESCALE',
+ 'VEHICLE_ANGULAR_FRICTION_TIMESCALE',
+ 'VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE',
+ 'VEHICLE_ANGULAR_MOTOR_DIRECTION',
+ 'VEHICLE_ANGULAR_MOTOR_TIMESCALE',
+ 'VEHICLE_BANKING_EFFICIENCY',
+ 'VEHICLE_BANKING_MIX',
+ 'VEHICLE_BANKING_TIMESCALE',
+ 'VEHICLE_BUOYANCY',
+ 'VEHICLE_FLAG_CAMERA_DECOUPLED',
+ 'VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT',
+ 'VEHICLE_FLAG_HOVER_TERRAIN_ONLY',
+ 'VEHICLE_FLAG_HOVER_UP_ONLY',
+ 'VEHICLE_FLAG_HOVER_WATER_ONLY',
+ 'VEHICLE_FLAG_LIMIT_MOTOR_UP',
+ 'VEHICLE_FLAG_LIMIT_ROLL_ONLY',
+ 'VEHICLE_FLAG_MOUSELOOK_BANK',
+ 'VEHICLE_FLAG_MOUSELOOK_STEER',
+ 'VEHICLE_FLAG_NO_DEFLECTION_UP',
+ 'VEHICLE_HOVER_EFFICIENCY',
+ 'VEHICLE_HOVER_HEIGHT',
+ 'VEHICLE_HOVER_TIMESCALE',
+ 'VEHICLE_LINEAR_DEFLECTION_EFFICIENCY',
+ 'VEHICLE_LINEAR_DEFLECTION_TIMESCALE',
+ 'VEHICLE_LINEAR_FRICTION_TIMESCALE',
+ 'VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE',
+ 'VEHICLE_LINEAR_MOTOR_DIRECTION',
+ 'VEHICLE_LINEAR_MOTOR_OFFSET',
+ 'VEHICLE_LINEAR_MOTOR_TIMESCALE',
+ 'VEHICLE_REFERENCE_FRAME',
+ 'VEHICLE_TYPE_AIRPLANE',
+ 'VEHICLE_TYPE_BALLOON',
+ 'VEHICLE_TYPE_BOAT',
+ 'VEHICLE_TYPE_CAR',
+ 'VEHICLE_TYPE_NONE',
+ 'VEHICLE_TYPE_SLED',
+ 'VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY',
+ 'VEHICLE_VERTICAL_ATTRACTION_TIMESCALE',
+ 'ZERO_ROTATION',
+ 'ZERO_VECTOR',
+ ),
+ 3 => array( // handlers
+ 'at_rot_target',
+ 'at_target',
+ 'attached',
+ 'changed',
+ 'collision',
+ 'collision_end',
+ 'collision_start',
+ 'control',
+ 'dataserver',
+ 'email',
+ 'http_response',
+ 'land_collision',
+ 'land_collision_end',
+ 'land_collision_start',
+ 'link_message',
+ 'listen',
+ 'money',
+ 'moving_end',
+ 'moving_start',
+ 'no_sensor',
+ 'not_at_rot_target',
+ 'not_at_target',
+ 'object_rez',
+ 'on_rez',
+ 'remote_data',
+ 'run_time_permissions',
+ 'sensor',
+ 'state_entry',
+ 'state_exit',
+ 'timer',
+ 'touch',
+ 'touch_end',
+ 'touch_start',
+ ),
+ 4 => array( // data types
+ 'float',
+ 'integer',
+ 'key',
+ 'list',
+ 'rotation',
+ 'string',
+ 'vector',
+ ),
+ 5 => array( // library
+ 'default',
+ 'llAbs',
+ 'llAcos',
+ 'llAddToLandBanList',
+ 'llAddToLandPassList',
+ 'llAdjustSoundVolume',
+ 'llAllowInventoryDrop',
+ 'llAngleBetween',
+ 'llApplyImpulse',
+ 'llApplyRotationalImpulse',
+ 'llAsin',
+ 'llAtan2',
+ 'llAttachToAvatar',
+ 'llAvatarOnSitTarget',
+ 'llAxes2Rot',
+ 'llAxisAngle2Rot',
+ 'llBase64ToInteger',
+ 'llBase64ToString',
+ 'llBreakAllLinks',
+ 'llBreakLink',
+ 'llCeil',
+ 'llClearCameraParams',
+ 'llCloseRemoteDataChannel',
+ 'llCloud',
+ 'llCollisionFilter',
+ 'llCollisionSound',
+ 'llCollisionSprite',
+ 'llCos',
+ 'llCreateLink',
+ 'llCSV2List',
+ 'llDeleteSubList',
+ 'llDeleteSubString',
+ 'llDetachFromAvatar',
+ 'llDetectedGrab',
+ 'llDetectedGroup',
+ 'llDetectedKey',
+ 'llDetectedLinkNumber',
+ 'llDetectedName',
+ 'llDetectedOwner',
+ 'llDetectedPos',
+ 'llDetectedRot',
+ 'llDetectedTouchBinormal',
+ 'llDetectedTouchFace',
+ 'llDetectedTouchNormal',
+ 'llDetectedTouchPos',
+ 'llDetectedTouchST',
+ 'llDetectedTouchUV',
+ 'llDetectedType',
+ 'llDetectedVel',
+ 'llDialog',
+ 'llDie',
+ 'llDumpList2String',
+ 'llEdgeOfWorld',
+ 'llEjectFromLand',
+ 'llEmail',
+ 'llEscapeURL',
+ 'llEuler2Rot',
+ 'llFabs',
+ 'llFloor',
+ 'llForceMouselook',
+ 'llFrand',
+ 'llGetAccel',
+ 'llGetAgentInfo',
+ 'llGetAgentLanguage',
+ 'llGetAgentSize',
+ 'llGetAlpha',
+ 'llGetAndResetTime',
+ 'llGetAnimation',
+ 'llGetAnimationList',
+ 'llGetAttached',
+ 'llGetBoundingBox',
+ 'llGetCameraPos',
+ 'llGetCameraRot',
+ 'llGetCenterOfMass',
+ 'llGetColor',
+ 'llGetCreator',
+ 'llGetDate',
+ 'llGetEnergy',
+ 'llGetForce',
+ 'llGetFreeMemory',
+ 'llGetGeometricCenter',
+ 'llGetGMTclock',
+ 'llGetInventoryCreator',
+ 'llGetInventoryKey',
+ 'llGetInventoryName',
+ 'llGetInventoryNumber',
+ 'llGetInventoryPermMask',
+ 'llGetInventoryType',
+ 'llGetKey',
+ 'llGetLandOwnerAt',
+ 'llGetLinkKey',
+ 'llGetLinkName',
+ 'llGetLinkNumber',
+ 'llGetListEntryType',
+ 'llGetListLength',
+ 'llGetLocalPos',
+ 'llGetLocalRot',
+ 'llGetMass',
+ 'llGetNextEmail',
+ 'llGetNotecardLine',
+ 'llGetNumberOfNotecardLines',
+ 'llGetNumberOfPrims',
+ 'llGetNumberOfSides',
+ 'llGetObjectDesc',
+ 'llGetObjectDetails',
+ 'llGetObjectMass',
+ 'llGetObjectName',
+ 'llGetObjectPermMask',
+ 'llGetObjectPrimCount',
+ 'llGetOmega',
+ 'llGetOwner',
+ 'llGetOwnerKey',
+ 'llGetParcelDetails',
+ 'llGetParcelFlags',
+ 'llGetParcelMaxPrims',
+ 'llGetParcelPrimCount',
+ 'llGetParcelPrimOwners',
+ 'llGetPermissions',
+ 'llGetPermissionsKey',
+ 'llGetPos',
+ 'llGetPrimitiveParams',
+ 'llGetRegionAgentCount',
+ 'llGetRegionCorner',
+ 'llGetRegionFlags',
+ 'llGetRegionFPS',
+ 'llGetRegionName',
+ 'llGetRegionTimeDilation',
+ 'llGetRootPosition',
+ 'llGetRootRotation',
+ 'llGetRot',
+ 'llGetScale',
+ 'llGetScriptName',
+ 'llGetScriptState',
+ 'llGetSimulatorHostname',
+ 'llGetStartParameter',
+ 'llGetStatus',
+ 'llGetSubString',
+ 'llGetSunDirection',
+ 'llGetTexture',
+ 'llGetTextureOffset',
+ 'llGetTextureRot',
+ 'llGetTextureScale',
+ 'llGetTime',
+ 'llGetTimeOfDay',
+ 'llGetTimestamp',
+ 'llGetTorque',
+ 'llGetUnixTime',
+ 'llGetVel',
+ 'llGetWallclock',
+ 'llGiveInventory',
+ 'llGiveInventoryList',
+ 'llGiveMoney',
+ 'llGround',
+ 'llGroundContour',
+ 'llGroundNormal',
+ 'llGroundRepel',
+ 'llGroundSlope',
+ 'llHTTPRequest',
+ 'llInsertString',
+ 'llInstantMessage',
+ 'llIntegerToBase64',
+ 'llKey2Name',
+ 'llList2CSV',
+ 'llList2Float',
+ 'llList2Integer',
+ 'llList2Key',
+ 'llList2List',
+ 'llList2ListStrided',
+ 'llList2Rot',
+ 'llList2String',
+ 'llList2Vector',
+ 'llListen',
+ 'llListenControl',
+ 'llListenRemove',
+ 'llListFindList',
+ 'llListInsertList',
+ 'llListRandomize',
+ 'llListReplaceList',
+ 'llListSort',
+ 'llListStatistics',
+ 'llLoadURL',
+ 'llLog',
+ 'llLog10',
+ 'llLookAt',
+ 'llLoopSound',
+ 'llLoopSoundMaster',
+ 'llLoopSoundSlave',
+ 'llMapDestination',
+ 'llMD5String',
+ 'llMessageLinked',
+ 'llMinEventDelay',
+ 'llModifyLand',
+ 'llModPow',
+ 'llMoveToTarget',
+ 'llOffsetTexture',
+ 'llOpenRemoteDataChannel',
+ 'llOverMyLand',
+ 'llOwnerSay',
+ 'llParcelMediaCommandList',
+ 'llParcelMediaQuery',
+ 'llParseString2List',
+ 'llParseStringKeepNulls',
+ 'llParticleSystem',
+ 'llPassCollisions',
+ 'llPassTouches',
+ 'llPlaySound',
+ 'llPlaySoundSlave',
+ 'llPow',
+ 'llPreloadSound',
+ 'llPushObject',
+ 'llRegionSay',
+ 'llReleaseControls',
+ 'llRemoteDataReply',
+ 'llRemoteDataSetRegion',
+ 'llRemoteLoadScriptPin',
+ 'llRemoveFromLandBanList',
+ 'llRemoveFromLandPassList',
+ 'llRemoveInventory',
+ 'llRemoveVehicleFlags',
+ 'llRequestAgentData',
+ 'llRequestInventoryData',
+ 'llRequestPermissions',
+ 'llRequestSimulatorData',
+ 'llResetLandBanList',
+ 'llResetLandPassList',
+ 'llResetOtherScript',
+ 'llResetScript',
+ 'llResetTime',
+ 'llRezAtRoot',
+ 'llRezObject',
+ 'llRot2Angle',
+ 'llRot2Axis',
+ 'llRot2Euler',
+ 'llRot2Fwd',
+ 'llRot2Left',
+ 'llRot2Up',
+ 'llRotateTexture',
+ 'llRotBetween',
+ 'llRotLookAt',
+ 'llRotTarget',
+ 'llRotTargetRemove',
+ 'llRound',
+ 'llSameGroup',
+ 'llSay',
+ 'llScaleTexture',
+ 'llScriptDanger',
+ 'llSendRemoteData',
+ 'llSensor',
+ 'llSensorRemove',
+ 'llSensorRepeat',
+ 'llSetAlpha',
+ 'llSetBuoyancy',
+ 'llSetCameraAtOffset',
+ 'llSetCameraEyeOffset',
+ 'llSetCameraParams',
+ 'llSetClickAction',
+ 'llSetColor',
+ 'llSetDamage',
+ 'llSetForce',
+ 'llSetForceAndTorque',
+ 'llSetHoverHeight',
+ 'llSetLinkAlpha',
+ 'llSetLinkColor',
+ 'llSetLinkPrimitiveParams',
+ 'llSetLinkTexture',
+ 'llSetLocalRot',
+ 'llSetObjectDesc',
+ 'llSetObjectName',
+ 'llSetParcelMusicURL',
+ 'llSetPayPrice',
+ 'llSetPos',
+ 'llSetPrimitiveParams',
+ 'llSetRemoteScriptAccessPin',
+ 'llSetRot',
+ 'llSetScale',
+ 'llSetScriptState',
+ 'llSetSitText',
+ 'llSetSoundQueueing',
+ 'llSetSoundRadius',
+ 'llSetStatus',
+ 'llSetText',
+ 'llSetTexture',
+ 'llSetTextureAnim',
+ 'llSetTimerEvent',
+ 'llSetTorque',
+ 'llSetTouchText',
+ 'llSetVehicleFlags',
+ 'llSetVehicleFloatParam',
+ 'llSetVehicleRotationParam',
+ 'llSetVehicleType',
+ 'llSetVehicleVectorParam',
+ 'llSHA1String',
+ 'llShout',
+ 'llSin',
+ 'llSitTarget',
+ 'llSleep',
+ 'llSqrt',
+ 'llStartAnimation',
+ 'llStopAnimation',
+ 'llStopHover',
+ 'llStopLookAt',
+ 'llStopMoveToTarget',
+ 'llStopSound',
+ 'llStringLength',
+ 'llStringToBase64',
+ 'llStringTrim',
+ 'llSubStringIndex',
+ 'llTakeControls',
+ 'llTan',
+ 'llTarget',
+ 'llTargetOmega',
+ 'llTargetRemove',
+ 'llTeleportAgentHome',
+ 'llToLower',
+ 'llToUpper',
+ 'llTriggerSound',
+ 'llTriggerSoundLimited',
+ 'llUnescapeURL',
+ 'llUnSit',
+ 'llVecDist',
+ 'llVecMag',
+ 'llVecNorm',
+ 'llVolumeDetect',
+ 'llWater',
+ 'llWhisper',
+ 'llWind',
+ 'llXorBase64StringsCorrect',
+ ),
+ 6 => array( // deprecated
+ 'llMakeExplosion',
+ 'llMakeFire',
+ 'llMakeFountain',
+ 'llMakeSmoke',
+ 'llSound',
+ 'llSoundPreload',
+ 'llXorBase64Strings',
+ ),
+ 7 => array( // unimplemented
+ 'llPointAt',
+ 'llRefreshPrimURL',
+ 'llReleaseCamera',
+ 'llRemoteLoadScript',
+ 'llSetPrimURL',
+ 'llStopPointAt',
+ 'llTakeCamera',
+ 'llTextBox',
+ ),
+ 8 => array( // God mode
+ 'llGodLikeRezObject',
+ 'llSetInventoryPermMask',
+ 'llSetObjectPermMask',
+ ),
+ ),
+ 'SYMBOLS' => array(
+ '{', '}', '(', ')', '[', ']',
+ '=', '+', '-', '*', '/',
+ '+=', '-=', '*=', '/=', '++', '--',
+ '!', '%', '&amp;', '|', '&amp;&amp;', '||',
+ '==', '!=', '&lt;', '&gt;', '&lt;=', '&gt;=',
+ '~', '&lt;&lt;', '&gt;&gt;', '^', ':',
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => true,
+ 1 => true,
+ 2 => true,
+ 3 => true,
+ 4 => true,
+ 5 => true,
+ 6 => true,
+ 7 => true,
+ 8 => true,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #0000ff;',
+ 2 => 'color: #000080;',
+ 3 => 'color: #008080;',
+ 4 => 'color: #228b22;',
+ 5 => 'color: #b22222;',
+ 6 => 'color: #8b0000; background-color: #ffff00;',
+ 7 => 'color: #8b0000; background-color: #fa8072;',
+ 8 => 'color: #000000; background-color: #ba55d3;',
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #ff7f50; font-style: italic;',
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #006400;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => 'http://www.lslwiki.net/lslwiki/wakka.php?wakka={FNAME}', // http://wiki.secondlife.com/wiki/{FNAME}
+ 4 => 'http://www.lslwiki.net/lslwiki/wakka.php?wakka={FNAME}', // http://wiki.secondlife.com/wiki/{FNAME}
+ 5 => 'http://www.lslwiki.net/lslwiki/wakka.php?wakka={FNAME}', // http://wiki.secondlife.com/wiki/{FNAME}
+ 6 => 'http://www.lslwiki.net/lslwiki/wakka.php?wakka={FNAME}', // http://wiki.secondlife.com/wiki/{FNAME}
+ 7 => 'http://www.lslwiki.net/lslwiki/wakka.php?wakka={FNAME}', // http://wiki.secondlife.com/wiki/{FNAME}
+ 8 => 'http://www.lslwiki.net/lslwiki/wakka.php?wakka={FNAME}', // http://wiki.secondlife.com/wiki/{FNAME}
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/lua.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/lua.php
new file mode 100644
index 000000000..f85086bb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/lua.php
@@ -0,0 +1,137 @@
+<?php
+/*************************************************************************************
+ * lua.php
+ * -------
+ * Author: Roberto Rossi (rsoftware@altervista.org)
+ * Copyright: (c) 2004 Roberto Rossi (http://rsoftware.altervista.org), Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/07/10
+ *
+ * LUA language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2005/08/26 (1.0.2)
+ * - Added support for objects and methods
+ * - Removed unusable keywords
+ * 2004/11/27 (1.0.1)
+ * - Added support for multiple object splitters
+ * 2004/10/27 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Lua',
+ 'COMMENT_SINGLE' => array(1 => "--"),
+ 'COMMENT_MULTI' => array('--[[' => ']]'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'and','break','do','else','elseif','end','false','for','function','if',
+ 'in','local','nil','not','or','repeat','return','then','true','until','while',
+ '_VERSION','assert','collectgarbage','dofile','error','gcinfo','loadfile','loadstring',
+ 'print','tonumber','tostring','type','unpack',
+ '_ALERT','_ERRORMESSAGE','_INPUT','_PROMPT','_OUTPUT',
+ '_STDERR','_STDIN','_STDOUT','call','dostring','foreach','foreachi','getn','globals','newtype',
+ 'rawget','rawset','require','sort','tinsert','tremove',
+ 'abs','acos','asin','atan','atan2','ceil','cos','deg','exp',
+ 'floor','format','frexp','gsub','ldexp','log','log10','max','min','mod','rad','random','randomseed',
+ 'sin','sqrt','strbyte','strchar','strfind','strlen','strlower','strrep','strsub','strupper','tan',
+ 'openfile','closefile','readfrom','writeto','appendto',
+ 'remove','rename','flush','seek','tmpfile','tmpname','read','write',
+ 'clock','date','difftime','execute','exit','getenv','setlocale','time',
+ '_G','getfenv','getmetatable','ipairs','loadlib','next','pairs','pcall',
+ 'rawegal','setfenv','setmetatable','xpcall',
+ 'string.byte','string.char','string.dump','string.find','string.len',
+ 'string.lower','string.rep','string.sub','string.upper','string.format','string.gfind','string.gsub',
+ 'table.concat','table.foreach','table.foreachi','table.getn','table.sort','table.insert','table.remove','table.setn',
+ 'math.abs','math.acos','math.asin','math.atan','math.atan2','math.ceil','math.cos','math.deg','math.exp',
+ 'math.floor','math.frexp','math.ldexp','math.log','math.log10','math.max','math.min','math.mod',
+ 'math.pi','math.rad','math.random','math.randomseed','math.sin','math.sqrt','math.tan',
+ 'coroutine.create','coroutine.resume','coroutine.status',
+ 'coroutine.wrap','coroutine.yield',
+ 'io.close','io.flush','io.input','io.lines','io.open','io.output','io.read','io.tmpfile','io.type','io.write',
+ 'io.stdin','io.stdout','io.stderr',
+ 'os.clock','os.date','os.difftime','os.execute','os.exit','os.getenv','os.remove','os.rename',
+ 'os.setlocale','os.time','os.tmpname',
+ 'string','table','math','coroutine','io','os','debug'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '{', '}', '!', '@', '%', '&', '*', '|', '/', '<', '>', '=', ';'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #b1b100;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080; font-style: italic;',
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ 0 => 'color: #b1b100;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/m68k.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/m68k.php
new file mode 100644
index 000000000..cc5807c6f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/m68k.php
@@ -0,0 +1,143 @@
+<?php
+/*************************************************************************************
+ * m68k.php
+ * --------
+ * Author: Benny Baumann (BenBE@omorphia.de)
+ * Copyright: (c) 2007 Benny Baumann (http://www.omorphia.de/), Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2007/02/06
+ *
+ * Motorola 68000 Assembler language file for GeSHi.
+ *
+ * Syntax definition as commonly used by the motorola documentation for the
+ * MC68HC908GP32 Microcontroller (and maybe others).
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * 2007/06/02 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2007/06/02)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Motorola 68000 Assembler',
+ 'COMMENT_SINGLE' => array(1 => ';'),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ /*CPU*/
+ 1 => array(
+ 'adc','add','ais','aix','and','asl','asr','bcc','bclr','bcs','beq',
+ 'bge','bgt','bhcc','bhcs','bhi','bhs','bih','bil','bit','ble','blo',
+ 'bls','blt','bmc','bmi','bms','bne','bpl','bra','brclr','brn',
+ 'brset','bset','bsr','cbeq','clc','cli','clr','cmp','com','cphx',
+ 'cpx','daa','dbnz','dec','div','eor','inc','jmp','jsr','lda','ldhx',
+ 'ldx','lsl','lsr','mov','mul','neg','nop','nsa','ora','psha','pshh',
+ 'pshx','pula','pulh','pulx','rol','ror','rsp','rti','rts','sbc',
+ 'sec','sei','sta','sthx','stop','stx','sub','swi','tap','tax','tpa',
+ 'tst','tsx','txa','txs','wait'
+ ),
+ /*registers*/
+ 2 => array(
+ 'a','h','x',
+ 'hx','sp'
+ ),
+ /*Directive*/
+ 3 => array(
+ '#define','#endif','#else','#ifdef','#ifndef','#include','#undef',
+ '.db','.dd','.df','.dq','.dt','.dw','.end','.org','equ'
+ ),
+ ),
+ 'SYMBOLS' => array(
+ ','
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #0000ff; font-weight:bold;',
+ 2 => 'color: #0000ff;',
+ 3 => 'color: #46aa03; font-weight:bold;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #adadad; font-style: italic;',
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #0000ff;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #7f007f;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #dd22dd;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #008000;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #22bbff;',
+ 1 => 'color: #22bbff;',
+ 2 => 'color: #993333;'
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ //Hex numbers
+ 0 => '#?0[0-9a-fA-F]{1,32}[hH]',
+ //Binary numbers
+ 1 => '\%[01]{1,64}[bB]',
+ //Labels
+ 2 => '^[_a-zA-Z][_a-zA-Z0-9]*?\:'
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 8
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/make.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/make.php
new file mode 100644
index 000000000..f01209ebf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/make.php
@@ -0,0 +1,151 @@
+<?php
+/*************************************************************************************
+ * make.php
+ * --------
+ * Author: Neil Bird <phoenix@fnxweb.com>
+ * Copyright: (c) 2008 Neil Bird
+ * Release Version: 1.0.8.4
+ * Date Started: 2008/08/26
+ *
+ * make language file for GeSHi.
+ *
+ * (GNU make specific)
+ *
+ * CHANGES
+ * -------
+ * 2008/09/05 (1.0.0)
+ * - First Release
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'GNU make',
+ 'COMMENT_SINGLE' => array(1 => '#'),
+ 'COMMENT_REGEXP' => array(
+ //Escaped String Starters
+ 2 => "/\\\\['\"]/siU"
+ ),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ // core
+ 'ifeq', 'else', 'endif', 'ifneq', 'ifdef', 'ifndef',
+ 'include', 'vpath', 'export', 'unexport', 'override',
+ 'info', 'warning', 'error'
+ ),
+ 2 => array(
+ // macros, literals
+ '.SUFFIXES', '.PHONY', '.DEFAULT', '.PRECIOUS', '.IGNORE', '.SILENT', '.EXPORT_ALL_VARIABLES', '.KEEP_STATE',
+ '.LIBPATTERNS', '.NOTPARALLEL', '.DELETE_ON_ERROR', '.INTERMEDIATE', '.POSIX', '.SECONDARY'
+ ),
+ /*
+ 3 => array(
+ // funcs - see regex
+ //'subst', 'addprefix', 'addsuffix', 'basename', 'call', 'dir', 'error', 'eval', 'filter-out', 'filter',
+ //'findstring', 'firstword', 'foreach', 'if', 'join', 'notdir', 'origin', 'patsubst', 'shell', 'sort', 'strip',
+ //'suffix', 'warning', 'wildcard', 'word', 'wordlist', 'words'
+ )*/
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '[', ']', '{', '}',
+ '!', '@', '%', '&', '|', '/',
+ '<', '>',
+ '=', '-', '+', '*',
+ '.', ':', ',', ';',
+ '$'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ //3 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #666622; font-weight: bold;',
+ 2 => 'color: #990000;',
+ //3 => 'color: #000000; font-weight: bold;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #339900; font-style: italic;',
+ 2 => 'color: #000099; font-weight: bold;',
+ 'MULTI' => ''
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array( # keep same as symbols so as to make ${} and $() equiv.
+ 0 => 'color: #004400;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #CC2200;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #CC2200;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #004400;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #000088; font-weight: bold;',
+ 1 => 'color: #0000CC; font-weight: bold;',
+ 2 => 'color: #000088;'
+ ),
+ 'SCRIPT' => array(),
+ 'METHODS' => array()
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ //3 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(),
+ 'REGEXPS' => array(
+ //Simple variables
+ 0 => "\\$(?:[^{(&]|&(?:amp|lt|gt);)",
+ //Complex variables/functions [built-ins]
+ 1 => array(
+ GESHI_SEARCH => '(\\$[({])(subst|addprefix|addsuffix|basename|call|dir|error|eval|filter-out|filter,|findstring|firstword|foreach|if|join|notdir|origin|patsubst|shell|sort|strip,|suffix|warning|wildcard|word|wordlist|words)([ })])',
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => '\\3'
+ ),
+ //Complex variables/functions [others]
+ 2 => array(
+ GESHI_SEARCH => '(\\$[({])([A-Za-z_][A-Za-z_0-9]*)([ })])',
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => '\\3'
+ ),
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(),
+ 'TAB_WIDTH' => 8
+// vim: set sw=4 sts=4 :
+);
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/matlab.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/matlab.php
new file mode 100644
index 000000000..f7b649573
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/matlab.php
@@ -0,0 +1,227 @@
+<?php
+/*************************************************************************************
+ * matlab.php
+ * -----------
+ * Author: Florian Knorn (floz@gmx.de)
+ * Copyright: (c) 2004 Florian Knorn (http://www.florian-knorn.com)
+ * Release Version: 1.0.8.4
+ * Date Started: 2005/02/09
+ *
+ * Matlab M-file language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2006-03-25 (1.0.7.22)
+ * - support for the transpose operator
+ * - many keywords added
+ * - links to the matlab documentation at mathworks
+ * by: Olivier Verdier (olivier.verdier@free.fr)
+ * 2005/05/07 (1.0.0)
+ * - First Release
+ *
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Matlab M',
+ 'COMMENT_SINGLE' => array(1 => '%'),
+ 'COMMENT_MULTI' => array(),
+ //Matlab Strings
+ 'COMMENT_REGEXP' => array(
+ 2 => "/(?<![\\w\\)\\]\\}\\.])('[^\\n']*?')/"
+ ),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array(),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'break', 'case', 'catch', 'continue', 'elseif', 'else', 'end', 'for',
+ 'function', 'global', 'if', 'otherwise', 'persistent', 'return',
+ 'switch', 'try', 'while'
+ ),
+ 2 => array(
+ 'all','any','exist','is','logical','mislocked',
+
+ 'abs','acos','acosh','acot','acoth','acsc','acsch','airy','angle',
+ 'ans','area','asec','asech','asin','asinh','atan','atan2','atanh',
+ 'auread','autumn','auwrite','axes','axis','balance','bar','bar3',
+ 'bar3h','barh','besselh','besseli','besselj','besselk','Bessely',
+ 'beta','betainc','betaln','bicg','bicgstab','bin2dec','bitand',
+ 'bitcmp','bitget','bitmax','bitor','bitset','bitshift','bitxor',
+ 'blkdiag','bone','box','brighten','builtin','bwcontr','calendar',
+ 'camdolly','camlight','camlookat','camorbit','campan','campos',
+ 'camproj','camroll','camtarget','camup','camva','camzoom','capture',
+ 'cart2pol','cart2sph','cat','caxis','cdf2rdf','ceil','cell',
+ 'cell2struct','celldisp','cellfun','cellplot','cellstr','cgs',
+ 'char','chol','cholinc','cholupdate','cla','clabel','class','clc',
+ 'clf','clg','clock','close','colmmd','colorbar','colorcube',
+ 'colordef','colormap','colperm','comet','comet3','compan','compass',
+ 'complex','computer','cond','condeig','condest','coneplot','conj',
+ 'contour','contourc','contourf','contourslice','contrast','conv',
+ 'conv2','convhull','cool','copper','copyobj','corrcoef','cos',
+ 'cosh','cot','coth','cov','cplxpair','cputime','cross','csc','csch',
+ 'cumprod','cumsum','cumtrapz','cylinder','daspect','date','datenum',
+ 'datestr','datetick','datevec','dbclear','dbcont','dbdown',
+ 'dblquad','dbmex','dbquit','dbstack','dbstatus','dbstep','dbstop',
+ 'dbtype','dbup','deblank','dec2bin','dec2hex','deconv','del2',
+ 'delaunay','det','diag','dialog','diff','diffuse','dlmread',
+ 'dlmwrite','dmperm','double','dragrect','drawnow','dsearch','eig',
+ 'eigs','ellipj','ellipke','eomday','eps','erf','erfc','erfcx',
+ 'erfiny','error','errorbar','errordlg','etime','eval','evalc',
+ 'evalin','exp','expint','expm','eye','ezcontour','ezcontourf',
+ 'ezmesh','ezmeshc','ezplot','ezplot3','ezpolar','ezsurf','ezsurfc',
+ 'factor','factorial','fclose','feather','feof','ferror','feval',
+ 'fft','fft2','fftshift','fgetl','fgets','fieldnames','figure',
+ 'fill','fill3','filter','filter2','find','findfigs','findobj',
+ 'findstr','fix','flag','flipdim','fliplr','flipud','floor','flops',
+ 'fmin','fmins','fopen','fplot','fprintf','fread','frewind','fscanf',
+ 'fseek','ftell','full','funm','fwrite','fzero','gallery','gamma',
+ 'gammainc','gammaln','gca','gcbo','gcd','gcf','gco','get',
+ 'getfield','ginput','gmres','gradient','gray','graymon','grid',
+ 'griddata','gsvd','gtext','hadamard','hankel','hdf','helpdlg',
+ 'hess','hex2dec','hex2num','hidden','hilb','hist','hold','hot',
+ 'hsv','hsv2rgb','i','ifft','ifft2','ifftn','ifftshift','imag',
+ 'image','imfinfo','imread','imwrite','ind2sub','Inf','inferiorto',
+ 'inline','inpolygon','input','inputdlg','inputname','int16',
+ 'int2str','int32','int8','interp1','interp2','interp3','interpft',
+ 'interpn','intersect','inv','invhilb','ipermute','isa','ishandle',
+ 'ismember','isocaps','isonormals','isosurface','j','jet','keyboard',
+ 'lcm','legend','legendre','light','lighting','lightingangle',
+ 'lin2mu','line','lines','linspace','listdlg','loadobj','log',
+ 'log10','log2','loglog','logm','logspace','lower','lscov','lu',
+ 'luinc','magic','mat2str','material','max','mean','median','menu',
+ 'menuedit','mesh','meshc','meshgrid','min','mod','msgbox','mu2lin',
+ 'NaN','nargchk','nargin','nargout','nchoosek','ndgrid','ndims',
+ 'newplot','nextpow2','nnls','nnz','nonzeros','norm','normest','now',
+ 'null','num2cell','num2str','nzmax','ode113,','ode15s,','ode23s,',
+ 'ode23t,','ode23tb','ode45,','odefile','odeget','odeset','ones',
+ 'orient','orth','pagedlg','pareto','pascal','patch','pause',
+ 'pbaspect','pcg','pcolor','peaks','perms','permute','pi','pie',
+ 'pie3','pinv','plot','plot3','plotmatrix','plotyy','pol2cart',
+ 'polar','poly','polyarea','polyder','polyeig','polyfit','polyval',
+ 'polyvalm','pow2','primes','print','printdlg','printopt','prism',
+ 'prod','propedit','qmr','qr','qrdelete','qrinsert','qrupdate',
+ 'quad','questdlg','quiver','quiver3','qz','rand','randn','randperm',
+ 'rank','rat','rats','rbbox','rcond','real','realmax','realmin',
+ 'rectangle','reducepatch','reducevolume','refresh','rem','repmat',
+ 'reset','reshape','residue','rgb2hsv','rgbplot','ribbon','rmfield',
+ 'roots','rose','rot90','rotate','rotate3d','round','rref',
+ 'rrefmovie','rsf2csf','saveobj','scatter','scatter3','schur',
+ 'script','sec','sech','selectmoveresize','semilogx','semilogy',
+ 'set','setdiff','setfield','setxor','shading','shg','shiftdim',
+ 'shrinkfaces','sign','sin','single','sinh','slice','smooth3','sort',
+ 'sortrows','sound','soundsc','spalloc','sparse','spconvert',
+ 'spdiags','specular','speye','spfun','sph2cart','sphere','spinmap',
+ 'spline','spones','spparms','sprand','sprandn','sprandsym','spring',
+ 'sprintf','sqrt','sqrtm','squeeze','sscanf','stairs','std','stem',
+ 'stem3','str2double','str2num','strcat','strcmp','strcmpi',
+ 'stream2','stream3','streamline','strings','strjust','strmatch',
+ 'strncmp','strrep','strtok','struct','struct2cell','strvcat',
+ 'sub2ind','subplot','subspace','subvolume','sum','summer',
+ 'superiorto','surf','surf2patch','surface','surfc','surfl',
+ 'surfnorm','svd','svds','symmmd','symrcm','symvar','tan','tanh',
+ 'texlabel','text Create','textread','textwrap','tic','title','toc',
+ 'toeplitz','trace','trapz','tril','trimesh','trisurf','triu',
+ 'tsearch','uicontext Create','uicontextmenu','uicontrol',
+ 'uigetfile','uimenu','uint32','uint8','uiputfile','uiresume',
+ 'uisetcolor','uisetfont','uiwait Used','union','unique','unwrap',
+ 'upper','var','varargin','varargout','vectorize','view','viewmtx',
+ 'voronoi','waitbar','waitforbuttonpress','warndlg','warning',
+ 'waterfall','wavread','wavwrite','weekday','whitebg','wilkinson',
+ 'winter','wk1read','wk1write','xlabel','xlim','ylabel','ylim',
+ 'zeros','zlabel','zlim','zoom',
+ //'[Keywords 6]',
+ 'addpath','cd','clear','copyfile','delete','diary','dir','disp',
+ 'doc','docopt','echo','edit','fileparts','format','fullfile','help',
+ 'helpdesk','helpwin','home','inmem','lasterr','lastwarn','length',
+ 'load','lookfor','ls','matlabrc','matlabroot','mkdir','mlock',
+ 'more','munlock','open','openvar','pack','partialpath','path',
+ 'pathtool','profile','profreport','pwd','quit','rmpath','save',
+ 'saveas','size','tempdir','tempname','type','ver','version','web',
+ 'what','whatsnew','which','who','whos','workspace'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '...'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ //3 => false,
+ //4 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #0000FF;',
+ 2 => 'color: #0000FF;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #228B22;',
+ 2 => 'color:#A020F0;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => ''
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #080;'
+ ),
+ 'STRINGS' => array(
+ //0 => 'color: #A020F0;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #33f;'
+ ),
+ 'METHODS' => array(
+ 1 => '',
+ 2 => ''
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #080;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #33f;'
+ ),
+ 'SCRIPT' => array(
+ 0 => ''
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => 'http://www.mathworks.com/access/helpdesk/help/techdoc/ref/{FNAMEL}.html'
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.',
+ 2 => '::'
+ ),
+ 'REGEXPS' => array(
+ //Complex numbers
+ 0 => '(?<![\\w])[+-]?[\\d]*([\\d]\\.|\\.[\\d])?[\\d]*[ij](?![\\w])'
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/mirc.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/mirc.php
new file mode 100644
index 000000000..bc773458c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/mirc.php
@@ -0,0 +1,171 @@
+<?php
+/*************************************************************************************
+ * mirc.php
+ * -----
+ * Author: Alberto 'Birckin' de Areba (Birckin@hotmail.com)
+ * Copyright: (c) 2006 Alberto de Areba
+ * Release Version: 1.0.8.4
+ * Date Started: 2006/05/29
+ *
+ * mIRC Scripting language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * 2006/05/29 (1.0.0)
+ * - First Release
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'mIRC Scripting',
+ 'COMMENT_SINGLE' => array(1 => ';'),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array(),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'alias', 'menu', 'dialog',
+ ),
+ 2 => array(
+ 'if', 'elseif', 'else', 'while', 'return', 'goto', 'var'
+ ),
+ 3 => array(
+ 'action','ajinvite','amsg','ame','anick','aop','auser',
+ 'avoice','auto','autojoin','away','background','ban','beep',
+ 'channel','clear','clearall','clipboard','close','closemsg','color',
+ 'copy','creq','ctcp','ctcpreply','ctcps','dcc','dde','ddeserver',
+ 'debug','describe','disable','disconnect','dlevel','dll','dns',
+ 'dqwindow','ebeeps','echo','editbox','emailaddr','enable','events',
+ 'exit','filter','findtext','finger','flash','flood','flush',
+ 'flushini','font','fsend','fserve','fullname','ghide','gload',
+ 'gmove','gopts','gplay','gpoint','gqreq','groups','gshow','gsize',
+ 'gstop','gtalk','gunload','guser','help','hop','ignore','invite',
+ 'join','kick','linesep','links','list','load','loadbuf','localinfo',
+ 'log','me','mdi','mkdir','mnick','mode','msg','names','nick','noop',
+ 'notice','notify','omsg','onotice','part','partall','pdcc',
+ 'perform','ping','play','pop','protect','pvoice','qmsg','qme',
+ 'query','queryrn','quit','raw','remini','remote','remove','rename',
+ 'enwin','resetidle','rlevel','rmdir','run','ruser','save','savebuf',
+ 'saveini','say','server','showmirc','sline','sound','speak','splay',
+ 'sreq','strip','time',
+ //'timer[N/name]', //Handled as a regular expression below ...
+ 'timers','timestamp','titlebar','tnick','tokenize','topic','ulist',
+ 'unload','updatenl','url','uwho','window','winhelp','write',
+ 'writeini','who','whois','whowas'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '{', '}', '[', ']', '/'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #994444;',
+ 2 => 'color: #000000; font-weight: bold;',
+ 3 => 'color: #990000; font-weight: bold;',
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080; font-style: italic;',
+ ),
+ 'ESCAPE_CHAR' => array(
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #FF0000;',
+ ),
+ 'STRINGS' => array(
+ ),
+ 'NUMBERS' => array(
+ 0 => '',
+ ),
+ 'METHODS' => array(
+ 0 => 'color: #008000;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #FF0000;',
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #000099;',
+ 1 => 'color: #990000;',
+ 2 => 'color: #000099;',
+ 3 => 'color: #888800;',
+ 4 => 'color: #888800;',
+ 5 => 'color: #000099;',
+ 6 => 'color: #990000; font-weight: bold;',
+ 7 => 'color: #990000; font-weight: bold;'
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => 'http://www.mirc.com/{FNAMEL}'
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array('.'),
+ 'REGEXPS' => array(
+ //Variable names
+ 0 => '\$[a-zA-Z0-9]+',
+ //Variable names
+ 1 => '(%|&amp;)[\w\x80-\xFE]+',
+ //Client to Client Protocol handling
+ 2 => '(on|ctcp) (!|@|&amp;)?(\d|\*):[a-zA-Z]+:',
+ /*4 => array(
+ GESHI_SEARCH => '((on|ctcp) (!|@|&)?(\d|\*):(Action|Active|Agent|AppActive|Ban|Chat|Close|Connect|Ctcp|CtcpReply|DccServer|DeHelp|DeOp|DeVoice|Dialog|Dns|Error|Exit|FileRcvd|FileSent|GetFail|Help|Hotlink|Input|Invite|Join|KeyDown|KeyUp|Kick|Load|Logon|MidiEnd|Mode|Mp3End|Nick|NoSound|Notice|Notify|Op|Open|Part|Ping|Pong|PlayEnd|Quit|Raw|RawMode|SendFail|Serv|ServerMode|ServerOp|Signal|Snotice|Start|Text|Topic|UnBan|Unload|Unotify|User|Mode|Voice|Wallops|WaveEnd):)',
+ GESHI_REPLACE => '\\1',
+ GESHI_MODIFIERS => 'i',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
+ ),*/
+ //Channel names
+ 3 => '(#|@)[a-zA-Z0-9]+',
+ 4 => '-[a-z\d]+',
+ //Raw protocol handling
+ 5 => 'raw (\d|\*):',
+ //Timer handling
+ 6 => '(?<!>|:|\/)\/timer(?!s\b)[0-9a-zA-Z_]+',
+ // /...
+ 7 => '(?<!>|:|\/|\w)\/[a-zA-Z][a-zA-Z0-9]*(?!>)'
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'PARSER_CONTROL' => array(
+ 'ENABLE_FLAGS' => array(
+ 'NUMBERS' => GESHI_NEVER
+ ),
+ 'KEYWORDS' => array(
+ 'DISALLOWED_BEFORE' => '(?<![\w\$\|\#;<^&])'
+ )
+ )
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/modula3.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/modula3.php
new file mode 100644
index 000000000..a1f04ca59
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/modula3.php
@@ -0,0 +1,135 @@
+<?php
+/*************************************************************************************
+ * modula3.php
+ * ----------
+ * Author: mbishop (mbishop@esoteriq.org)
+ * Copyright: (c) 2009 mbishop (mbishop@esoteriq.org)
+ * Release Version: 1.0.8.4
+ * Date Started: 2009/01/21
+ *
+ * Modula-3 language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ *
+ * TODO
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Modula-3',
+ 'COMMENT_SINGLE' => array(),
+ 'COMMENT_MULTI' => array('(*' => '*)'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'HARDQUOTE' => array("'", "'"),
+ 'HARDESCAPE' => array("''"),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'AND', 'ANY', 'ARRAY', 'AS', 'BEGIN', 'BITS', 'BRANDED', 'BY', 'CASE',
+ 'CONST', 'DIV', 'DO', 'ELSE', 'ELSIF', 'END', 'EVAL', 'EXCEPT', 'EXCEPTION',
+ 'EXIT', 'EXPORTS', 'FINALLY', 'FOR', 'FROM', 'GENERIC', 'IF', 'IMPORT', 'IN',
+ 'INTERFACE', 'LOCK', 'LOOP', 'METHODS', 'MOD', 'MODULE', 'NOT', 'OBJECT', 'OF',
+ 'OR', 'OVERRIDE', 'PROCEDURE', 'RAISE', 'RAISES', 'READONLY', 'RECORD', 'REF',
+ 'REPEAT', 'RETURN', 'REVEAL', 'ROOT', 'SET', 'THEN', 'TO', 'TRY', 'TYPE', 'TYPECASE',
+ 'UNSAFE', 'UNTIL', 'UNTRACED', 'VALUE', 'VAR', 'WHILE', 'WITH'
+ ),
+ 2 => array(
+ 'NIL', 'NULL', 'FALSE', 'TRUE',
+ ),
+ 3 => array(
+ 'ABS','ADR','ADRSIZE','BITSIZE','BYTESIZE','CEILING','DEC','DISPOSE',
+ 'EXTENDED','FIRST','FLOAT','FLOOR','INC','ISTYPE','LAST','LOOPHOLE','MAX','MIN',
+ 'NARROW','NEW','NUMBER','ORD','ROUND','SUBARRAY','TRUNC','TYPECODE', 'VAL'
+ ),
+ 4 => array(
+ 'ADDRESS', 'BOOLEAN', 'CARDINAL', 'CHAR', 'INTEGER',
+ 'LONGREAL', 'MUTEX', 'REAL', 'REFANY', 'TEXT'
+ ),
+ ),
+ 'SYMBOLS' => array(
+ ',', ':', '=', '+', '-', '*', '/', '#'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ 2 => true,
+ 3 => true,
+ 4 => true,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #000000; font-weight: bold;',
+ 2 => 'color: #000000; font-weight: bold;',
+ 3 => 'color: #000066;',
+ 4 => 'color: #000066; font-weight: bold;'
+ ),
+ 'COMMENTS' => array(
+ 'MULTI' => 'color: #666666; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;',
+ 'HARD' => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #009900;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;',
+ 'HARD' => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #0066ee;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #339933;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 4
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/mpasm.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/mpasm.php
new file mode 100644
index 000000000..53aa9e7a1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/mpasm.php
@@ -0,0 +1,164 @@
+<?php
+/*************************************************************************************
+ * mpasm.php
+ * ---------
+ * Author: Bakalex (bakalex@gmail.com)
+ * Copyright: (c) 2004 Bakalex, Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/12/6
+ *
+ * Microchip Assembler language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * 2005/01/29 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2005/12/6)
+ * -------------------------
+ *
+ * For the moment, i've only added PIC16C6X registers. We need more (PIC16F/C7x/8x,
+ * PIC10, PIC18 and dsPIC registers).
+ * Must take a look to dsPIC instructions.
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Microchip Assembler',
+ 'COMMENT_SINGLE' => array(1 => ';'),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ /*Directive Language*/
+ 4 => array(
+ 'CONSTANT', '#DEFINE', 'END', 'EQU', 'ERROR', 'ERROR-LEVEL', '#INCLUDE', 'LIST',
+ 'MESSG', 'NOLIST', 'ORG', 'PAGE', 'PROCESSOR', 'RADIX', 'SET', 'SPACE', 'SUBTITLE',
+ 'TITLE', '#UNDEFINE', 'VARIABLE', 'ELSE', 'ENDIF', 'ENDW', 'IF', 'IFDEF', 'IFNDEF',
+ 'WHILE', '__BADRAM', 'CBLOCK', '__CONFIG', 'DA', 'DATA', 'DB', 'DE', 'DT', 'DW',
+ 'ENDC', 'FILL', '__IDLOCS', '__MAXRAM', 'RES', 'ENDM', 'EXITM', 'EXPAND', 'LOCAL',
+ 'MACRO', 'NOEXPAND', 'BANKISEL', 'BANKSEL', 'CODE', 'EXTERN', 'GLOBAL', 'IDATA',
+ 'PAGESEL', 'UDATA', 'UDATA_ACS', 'UDATA_OVR', 'UDATA_SHR'
+ ),
+ /* 12&14-bit Specific Instruction Set*/
+ 1 => array(
+ 'andlw', 'call', 'clrwdt', 'goto', 'iorlw', 'movlw', 'option', 'retlw', 'sleep',
+ 'tris', 'xorlw', 'addwf', 'andwf', 'clrf', 'clrw', 'comf', 'decf', 'decfsz', 'incf',
+ 'incfsz', 'iorwf', 'movf', 'nop', 'rlf', 'rrf', 'subwf', 'swapf', 'xorwf',
+ 'bcf', 'bsf', 'btfsc', 'btfss',
+ 'addlw', 'retfie', 'return', 'sublw', 'addcf', 'adddcf', 'b', 'bc', 'bdc',
+ 'bnc', 'bndc', 'bnz', 'bz', 'clrc', 'clrdc', 'clrz', 'lcall', 'lgoto', 'movfw',
+ 'negf', 'setc', 'setdc', 'setz', 'skpc', 'skpdc', 'skpnc', 'skpndc', 'skpnz', 'skpz',
+ 'subcf', 'subdcf', 'tstf'
+ ),
+ /* 16-bit Specific Instructiob Set */
+ 2 => array (
+ 'movfp', 'movlb', 'movlp', 'movpf', 'movwf', 'tablrd', 'tablwt', 'tlrd', 'tlwt',
+ 'addwfc', 'daw', 'mullw', 'negw', 'rlcf', 'rlncf', 'rrcf', 'rrncf', 'setf', 'subwfb',
+ 'btg', 'cpfseq', 'cpfsgt', 'cpfslt', 'dcfsnz', 'infsnz', 'tstfsz', 'lfsr', 'bnn',
+ 'bnov', 'bra', 'pop', 'push', 'rcall', 'reset'
+ ),
+ /* Registers */
+ 3 => array(
+ 'INDF', 'TMR0', 'PCL', 'STATUS', 'FSR', 'PORTA', 'PORTB', 'PORTC', 'PORTD', 'PORTE',
+ 'PCLATH', 'INTCON', 'PIR1', 'PIR2', 'TMR1L', 'TMR1H', 'T1CON', 'TMR2', 'T2CON', 'TMR2L',
+ 'TMR2H', 'TMR0H', 'TMR0L', 'SSPBUF', 'SSPCON', 'CCPR1L', 'CCPR1H', 'CCP1CON', 'RCSTA',
+ 'TXREG', 'RCREG', 'CCPR2L', 'CCPR2H', 'CCP2CON', 'OPTION', 'TRISA', 'TRISB', 'TRISC',
+ 'TRISD', 'TRISE', 'PIE2', 'PIE1', 'PR2', 'SSPADD', 'SSPSTAT', 'TXSTA', 'SPBRG'
+ ),
+ /*Operands*/
+ 5 => array(
+ 'high','low'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '[', ']', '(', ')'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #00007f;',
+ 2 => 'color: #0000ff;',
+ 3 => 'color: #007f00;',
+ 4 => 'color: #46aa03; font-weight:bold;',
+ 5 => 'color: #7f0000;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #adadad; font-style: italic;',
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #7f007f;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #ff0000;',
+ 1 => 'color: #ff0000;'
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => '',
+ 5 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ //Hex numbers
+ 0 => '[0-9a-fA-F]{1,32}[hH]',
+ //Binary numbers
+ 1 => '[01]{1,64}[bB]'
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/mxml.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/mxml.php
new file mode 100644
index 000000000..d34a92531
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/mxml.php
@@ -0,0 +1,145 @@
+<?php
+/*************************************************************************************
+ * mxml.php
+ * -------
+ * Author: David Spurr
+ * Copyright: (c) 2007 David Spurr (http://www.defusion.org.uk/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2007/10/04
+ *
+ * MXML language file for GeSHi. Based on the XML file by Nigel McNie
+ *
+ * CHANGES
+ * -------
+ * 2007/10/04 (1.0.7.22)
+ * - First Release
+ *
+ * TODO
+ * ----
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'MXML',
+ 'COMMENT_SINGLE' => array(),
+ 'COMMENT_MULTI' => array('<!--' => '-->'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ ),
+ 'SYMBOLS' => array(
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ ),
+ 'COMMENTS' => array(
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'SCRIPT' => array(
+ 0 => 'color: #00bbdd;',
+ 1 => 'color: #ddbb00;',
+ 2 => 'color: #339933;',
+ 3 => 'color: #000000;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'font-weight: bold; color: black;',
+ 1 => 'color: #7400FF;',
+ 2 => 'color: #7400FF;'
+ )
+ ),
+ 'URLS' => array(
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ // xml declaration
+ 0 => array(
+ GESHI_SEARCH => '(&lt;[\/?|(\?xml)]?[a-z0-9_\-:]*(\?&gt;))',
+ GESHI_REPLACE => '\\1',
+ GESHI_MODIFIERS => 'i',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
+ ),
+ // opening tags
+ 1 => array(
+ GESHI_SEARCH => '(&lt;\/?[a-z]+:[a-z]+)',
+ GESHI_REPLACE => '\\1',
+ GESHI_MODIFIERS => 'i',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
+ ),
+ // closing tags
+ 2 => array(
+ GESHI_SEARCH => '(\/?&gt;)',
+ GESHI_REPLACE => '\\1',
+ GESHI_MODIFIERS => 'i',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
+ )
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_ALWAYS,
+ 'SCRIPT_DELIMITERS' => array(
+ 0 => array(
+ '<!DOCTYPE' => '>'
+ ),
+ 1 => array(
+ '&' => ';'
+ ),
+ 2 => array(
+ //'<![CDATA[' => ']]>'
+ '<mx:Script>' => '</mx:Script>'
+ ),
+ 3 => array(
+ '<' => '>'
+ )
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ 3 => true
+ ),
+ 'TAB_WIDTH' => 4
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/mysql.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/mysql.php
new file mode 100644
index 000000000..f41092c16
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/mysql.php
@@ -0,0 +1,475 @@
+<?php
+/*************************************************************************************
+ * mysql.php
+ * ---------
+ * Author: Marjolein Katsma (marjolein.is.back@gmail.com)
+ * Copyright: (c) 2008 Marjolein Katsma (http://blog.marjoleinkatsma.com/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2008-12-12
+ *
+ * MySQL language file for GeSHi.
+ *
+ * Based on original MySQL language file by Carl Fürstenberg (2004); brought
+ * up-to-date for current MySQL versions, and with more classes for different
+ * types of keywords; several minor errors were corrected as well.
+ *
+ * Some "classes" have two groups here: this is to allow for the fact that some
+ * keywords in MySQL have a double function: many of those are either a function
+ * (must be immediately followed by an opening bracket) or some other keyword:
+ * so they can be distinguished by the presence (or not) of that opening bracket.
+ * (An immediately following opening bracket is a default rule for functions in
+ * MySQL, though this may be overridden; because it's only a default, we use a
+ * regex lookahead only where necessary to distinguish homonyms, not generally
+ * to match any function.)
+ * Other keywords with double usage cannot be distinguished and are classified
+ * in the "Mix" category.
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'MySQL',
+ //'COMMENT_SINGLE' => array(1 =>'--', 2 => '#'), // '--' MUST be folowed by whitespace,not necessarily a space
+ 'COMMENT_SINGLE' => array(
+ 1 =>'-- ',
+ 2 => '#'
+ ),
+ 'COMMENT_REGEXP' => array(
+ 1 => "/(?:--\s).*?$/", // double dash followed by any whitespace
+ ),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, // @@@ would be nice if this could be defined per group!
+ 'QUOTEMARKS' => array("'", '"', '`'),
+ 'ESCAPE_CHAR' => '\\', // by default only, can be specified
+ 'ESCAPE_REGEXP' => array(
+ 1 => "/[_%]/", // search wildcards
+ ),
+ 'NUMBERS' =>
+ GESHI_NUMBER_INT_BASIC |
+ GESHI_NUMBER_OCT_PREFIX |
+ GESHI_NUMBER_HEX_PREFIX |
+ GESHI_NUMBER_FLT_NONSCI |
+ GESHI_NUMBER_FLT_SCI_SHORT |
+ GESHI_NUMBER_FLT_SCI_ZERO,
+ 'KEYWORDS' => array(
+ 1 => array(
+ // Mix: statement keywords and keywords that don't fit in any other
+ // category, or have multiple usage/meanings
+ 'ACTION','ADD','AFTER','ALGORITHM','ALL','ALTER','ANALYZE','ANY',
+ 'ASC','AS','BDB','BEGIN','BERKELEYDB','BINARY','BTREE','CALL',
+ 'CASCADED','CASCADE','CHAIN','CHECK','COLUMNS','COLUMN','COMMENT',
+ 'COMMIT','COMMITTED','CONSTRAINT','CONTAINS SQL','CONSISTENT',
+ 'CONVERT','CREATE','CROSS','DATA','DATABASES',
+ 'DECLARE','DEFINER','DELAYED','DELETE','DESCRIBE','DESC',
+ 'DETERMINISTIC','DISABLE','DISCARD','DISTINCTROW','DISTINCT','DO',
+ 'DROP','DUMPFILE','DUPLICATE KEY','ENABLE','ENCLOSED BY','ENGINE',
+ 'ERRORS','ESCAPED BY','EXISTS','EXPLAIN','EXTENDED','FIELDS',
+ 'FIRST','FOR EACH ROW','FORCE','FOREIGN KEY','FROM','FULL',
+ 'FUNCTION','GLOBAL','GRANT','GROUP BY','HANDLER','HASH','HAVING',
+ 'HELP','HIGH_PRIORITY','IF NOT EXISTS','IGNORE','IMPORT','INDEX',
+ 'INFILE','INNER','INNODB','INOUT','INTO','INVOKER',
+ 'ISOLATION LEVEL','JOIN','KEYS','KEY','KILL','LANGUAGE SQL','LAST',
+ 'LIMIT','LINES','LOAD','LOCAL','LOCK','LOW_PRIORITY',
+ 'MASTER_SERVER_ID','MATCH','MERGE','MIDDLEINT','MODIFIES SQL DATA',
+ 'MODIFY','MRG_MYISAM','NATURAL','NEXT','NO SQL','NO','ON',
+ 'OPTIMIZE','OPTIONALLY','OPTION','ORDER BY','OUTER','OUTFILE','OUT',
+ 'PARTIAL','PREV','PRIMARY KEY','PRIVILEGES','PROCEDURE','PURGE',
+ 'QUICK','READS SQL DATA','READ','REFERENCES','RELEASE','RENAME',
+ 'REPEATABLE','REQUIRE','RESTRICT','RETURNS','REVOKE',
+ 'ROLLBACK','ROUTINE','RTREE','SAVEPOINT','SELECT',
+ 'SERIALIZABLE','SESSION','SET','SHARE MODE','SHOW','SIMPLE',
+ 'SNAPSHOT','SOME','SONAME','SQL SECURITY','SQL_BIG_RESULT',
+ 'SQL_BUFFER_RESULT','SQL_CACHE','SQL_CALC_FOUND_ROWS',
+ 'SQL_NO_CACHE','SQL_SMALL_RESULT','SSL','START','STARTING BY',
+ 'STATUS','STRAIGHT_JOIN','STRIPED','TABLESPACE','TABLES','TABLE',
+ 'TEMPORARY','TEMPTABLE','TERMINATED BY','TO','TRANSACTIONS',
+ 'TRANSACTION','TRIGGER','TYPES','TYPE','UNCOMMITTED','UNDEFINED',
+ 'UNION','UNLOCK_TABLES','UPDATE','USAGE','USE','USER_RESOURCES',
+ 'USING','VALUES','VALUE','VIEW','WARNINGS','WHERE','WITH ROLLUP',
+ 'WITH','WORK','WRITE',
+ ),
+ 2 => array( //No ( must follow
+ // Mix: statement keywords distinguished from functions by the same name
+ "CURRENT_USER", "DATABASE", "IN", "INSERT", "DEFAULT", "REPLACE", "SCHEMA", "TRUNCATE"
+ ),
+ 3 => array(
+ // Values (Constants)
+ 'FALSE','NULL','TRUE',
+ ),
+ 4 => array(
+ // Column Data Types
+ 'BIGINT','BIT','BLOB','BOOLEAN','BOOL','CHARACTER VARYING',
+ 'CHAR VARYING','DATETIME','DECIMAL','DEC','DOUBLE PRECISION',
+ 'DOUBLE','ENUM','FIXED','FLOAT','GEOMETRYCOLLECTION','GEOMETRY',
+ 'INTEGER','INT','LINESTRING','LONGBLOB','LONGTEXT','MEDIUMBLOB',
+ 'MEDIUMINT','MEDIUMTEXT','MULTIPOINT','MULTILINESTRING',
+ 'MULTIPOLYGON','NATIONAL CHARACTER','NATIONAL CHARACTER VARYING',
+ 'NATIONAL CHAR VARYING','NATIONAL VARCHAR','NCHAR VARCHAR','NCHAR',
+ 'NUMERIC','POINT','POLYGON','REAL','SERIAL',
+ 'SMALLINT','TEXT','TIMESTAMP','TINYBLOB','TINYINT',
+ 'TINYTEXT','VARBINARY','VARCHARACTER','VARCHAR',
+ ),
+ 5 => array( //No ( must follow
+ // Column data types distinguished from functions by the same name
+ "CHAR", "DATE", "TIME"
+ ),
+ 6 => array(
+ // Table, Column & Index Attributes
+ 'AUTO_INCREMENT','AVG_ROW_LENGTH','BOTH','CHECKSUM','CONNECTION',
+ 'DATA DIRECTORY','DEFAULT NULL','DELAY_KEY_WRITE','FULLTEXT',
+ 'INDEX DIRECTORY','INSERT_METHOD','LEADING','MAX_ROWS','MIN_ROWS',
+ 'NOT NULL','PACK_KEYS','ROW_FORMAT','SERIAL DEFAULT VALUE','SIGNED',
+ 'SPATIAL','TRAILING','UNIQUE','UNSIGNED','ZEROFILL'
+ ),
+ 7 => array( //No ( must follow
+ // Column attribute distinguished from function by the same name
+ "CHARSET"
+ ),
+ 8 => array(
+ // Date and Time Unit Specifiers
+ 'DAY_HOUR','DAY_MICROSECOND','DAY_MINUTE','DAY_SECOND',
+ 'HOUR_MICROSECOND','HOUR_MINUTE','HOUR_SECOND',
+ 'MINUTE_MICROSECOND','MINUTE_SECOND',
+ 'SECOND_MICROSECOND','YEAR_MONTH'
+ ),
+ 9 => array( //No ( must follow
+ // Date-time unit specifiers distinguished from functions by the same name
+ "DAY", "HOUR", "MICROSECOND", "MINUTE", "MONTH", "QUARTER", "SECOND", "WEEK", "YEAR"
+ ),
+ 10 => array(
+ // Operators (see also Symbols)
+ 'AND','BETWEEN','CHARACTER SET','COLLATE','DIV','IS NOT NULL',
+ 'IS NOT','IS NULL','IS','LIKE','NOT','OFFSET','OR','REGEXP','RLIKE',
+ 'SOUNDS LIKE','XOR'
+ ),
+ 11 => array( //No ( must follow
+ // Operator distinghuished from function by the same name
+ "INTERVAL"
+ ),
+ 12 => array(
+ // Control Flow (functions)
+ 'CASE','ELSE','END','IFNULL','IF','NULLIF','THEN','WHEN',
+ ),
+ 13 => array(
+ // String Functions
+ 'ASCII','BIN','BIT_LENGTH','CHAR_LENGTH','CHARACTER_LENGTH',
+ 'CONCAT_WS','CONCAT','ELT','EXPORT_SET','FIELD',
+ 'FIND_IN_SET','FORMAT','HEX','INSTR','LCASE','LEFT','LENGTH',
+ 'LOAD_FILE','LOCATE','LOWER','LPAD','LTRIM','MAKE_SET','MID',
+ 'OCTET_LENGTH','ORD','POSITION','QUOTE','REPEAT','REVERSE',
+ 'RIGHT','RPAD','RTRIM','SOUNDEX','SPACE','STRCMP','SUBSTRING_INDEX',
+ 'SUBSTRING','TRIM','UCASE','UNHEX','UPPER',
+ ),
+ 14 => array( //A ( must follow
+ // String functions distinguished from other keywords by the same name
+ "INSERT", "REPLACE", "CHAR"
+ ),
+ 15 => array(
+ // Numeric Functions
+ 'ABS','ACOS','ASIN','ATAN2','ATAN','CEILING','CEIL',
+ 'CONV','COS','COT','CRC32','DEGREES','EXP','FLOOR','LN','LOG10',
+ 'LOG2','LOG','MOD','OCT','PI','POWER','POW','RADIANS','RAND',
+ 'ROUND','SIGN','SIN','SQRT','TAN',
+ ),
+ 16 => array( //A ( must follow
+ // Numeric function distinguished from other keyword by the same name
+ "TRUNCATE"
+ ),
+ 17 => array(
+ // Date and Time Functions
+ 'ADDDATE','ADDTIME','CONVERT_TZ','CURDATE','CURRENT_DATE',
+ 'CURRENT_TIME','CURRENT_TIMESTAMP','CURTIME','DATE_ADD',
+ 'DATE_FORMAT','DATE_SUB','DATEDIFF','DAYNAME','DAYOFMONTH',
+ 'DAYOFWEEK','DAYOFYEAR','EXTRACT','FROM_DAYS','FROM_UNIXTIME',
+ 'GET_FORMAT','LAST_DAY','LOCALTIME','LOCALTIMESTAMP','MAKEDATE',
+ 'MAKETIME','MONTHNAME','NOW','PERIOD_ADD',
+ 'PERIOD_DIFF','SEC_TO_TIME','STR_TO_DATE','SUBDATE','SUBTIME',
+ 'SYSDATE','TIME_FORMAT','TIME_TO_SEC',
+ 'TIMESTAMPADD','TIMESTAMPDIFF','TO_DAYS',
+ 'UNIX_TIMESTAMP','UTC_DATE','UTC_TIME','UTC_TIMESTAMP','WEEKDAY',
+ 'WEEKOFYEAR','YEARWEEK',
+ ),
+ 18 => array( //A ( must follow
+ // Date-time functions distinguished from other keywords by the same name
+ "DATE", "DAY", "HOUR", "MICROSECOND", "MINUTE", "MONTH", "QUARTER",
+ "SECOND", "TIME", "WEEK", "YEAR"
+ ),
+ 19 => array(
+ // Comparison Functions
+ 'COALESCE','GREATEST','ISNULL','LEAST',
+ ),
+ 20 => array( //A ( must follow
+ // Comparison functions distinguished from other keywords by the same name
+ "IN", "INTERVAL"
+ ),
+ 21 => array(
+ // Encryption and Compression Functions
+ 'AES_DECRYPT','AES_ENCRYPT','COMPRESS','DECODE','DES_DECRYPT',
+ 'DES_ENCRYPT','ENCODE','ENCRYPT','MD5','OLD_PASSWORD','PASSWORD',
+ 'SHA1','SHA','UNCOMPRESS','UNCOMPRESSED_LENGTH',
+ ),
+ 22 => array(
+ // GROUP BY (aggregate) Functions
+ 'AVG','BIT_AND','BIT_OR','BIT_XOR','COUNT','GROUP_CONCAT',
+ 'MAX','MIN','STDDEV_POP','STDDEV_SAMP','STDDEV','STD','SUM',
+ 'VAR_POP','VAR_SAMP','VARIANCE',
+ ),
+ 23 => array(
+ // Information Functions
+ 'BENCHMARK','COERCIBILITY','COLLATION','CONNECTION_ID',
+ 'FOUND_ROWS','LAST_INSERT_ID','ROW_COUNT',
+ 'SESSION_USER','SYSTEM_USER','USER','VERSION',
+ ),
+ 24 => array( //A ( must follow
+ // Information functions distinguished from other keywords by the same name
+ "CURRENT_USER", "DATABASE", "SCHEMA", "CHARSET"
+ ),
+ 25 => array(
+ // Miscellaneous Functions
+ 'ExtractValue','BIT_COUNT','GET_LOCK','INET_ATON','INET_NTOA',
+ 'IS_FREE_LOCK','IS_USED_LOCK','MASTER_POS_WAIT','NAME_CONST',
+ 'RELEASE_LOCK','SLEEP','UpdateXML','UUID',
+ ),
+ 26 => array( //A ( must follow
+ // Miscellaneous function distinguished from other keyword by the same name
+ "DEFAULT"
+ ),
+ 27 => array(
+ // Geometry Functions
+ 'Area','AsBinary','AsText','AsWKB','AsWKT','Boundary','Buffer',
+ 'Centroid','Contains','ConvexHull','Crosses',
+ 'Difference','Dimension','Disjoint','Distance',
+ 'EndPoint','Envelope','Equals','ExteriorRing',
+ 'GLength','GeomCollFromText','GeomCollFromWKB','GeomFromText',
+ 'GeomFromWKB','GeometryCollectionFromText',
+ 'GeometryCollectionFromWKB','GeometryFromText','GeometryFromWKB',
+ 'GeometryN','GeometryType',
+ 'InteriorRingN','Intersection','Intersects','IsClosed','IsEmpty',
+ 'IsRing','IsSimple',
+ 'LineFromText','LineFromWKB','LineStringFromText',
+ 'LineStringFromWKB',
+ 'MBRContains','MBRDisjoint','MBREqual','MBRIntersects',
+ 'MBROverlaps','MBRTouches','MBRWithin','MLineFromText',
+ 'MLineFromWKB','MPointFromText','MPointFromWKB','MPolyFromText',
+ 'MPolyFromWKB','MultiLineStringFromText','MultiLineStringFromWKB',
+ 'MultiPointFromText','MultiPointFromWKB','MultiPolygonFromText',
+ 'MultiPolygonFromWKB',
+ 'NumGeometries','NumInteriorRings','NumPoints',
+ 'Overlaps',
+ 'PointFromText','PointFromWKB','PointN','PointOnSurface',
+ 'PolyFromText','PolyFromWKB','PolygonFromText','PolygonFromWKB',
+ 'Related','SRID','StartPoint','SymDifference',
+ 'Touches',
+ 'Union',
+ 'Within',
+ 'X',
+ 'Y',
+ ),
+ ),
+ 'SYMBOLS' => array(
+ 1 => array(
+ /* Operators */
+ '=', ':=', // assignment operators
+ '||', '&&', '!', // locical operators
+ '=', '<=>', '>=', '>', '<=', '<', '<>', '!=', // comparison operators
+ '|', '&', '^', '~', '<<', '>>', // bitwise operators
+ '-', '+', '*', '/', '%', // numerical operators
+ ),
+ 2 => array(
+ /* Other syntactical symbols */
+ '(', ')',
+ ',', ';',
+ ),
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false,
+ 6 => false,
+ 7 => false,
+ 8 => false,
+ 9 => false,
+ 10 => false,
+ 11 => false,
+ 12 => false,
+ 13 => false,
+ 13 => false,
+ 14 => false,
+ 15 => false,
+ 16 => false,
+ 17 => false,
+ 18 => false,
+ 19 => false,
+ 20 => false,
+ 21 => false,
+ 22 => false,
+ 23 => false,
+ 24 => false,
+ 25 => false,
+ 26 => false,
+ 27 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #990099; font-weight: bold;', // mix
+ 2 => 'color: #990099; font-weight: bold;', // mix
+ 3 => 'color: #9900FF; font-weight: bold;', // constants
+ 4 => 'color: #999900; font-weight: bold;', // column data types
+ 5 => 'color: #999900; font-weight: bold;', // column data types
+ 6 => 'color: #FF9900; font-weight: bold;', // attributes
+ 7 => 'color: #FF9900; font-weight: bold;', // attributes
+ 8 => 'color: #9900FF; font-weight: bold;', // date-time units
+ 9 => 'color: #9900FF; font-weight: bold;', // date-time units
+
+ 10 => 'color: #CC0099; font-weight: bold;', // operators
+ 11 => 'color: #CC0099; font-weight: bold;', // operators
+
+ 12 => 'color: #009900;', // control flow (functions)
+ 13 => 'color: #000099;', // string functions
+ 14 => 'color: #000099;', // string functions
+ 15 => 'color: #000099;', // numeric functions
+ 16 => 'color: #000099;', // numeric functions
+ 17 => 'color: #000099;', // date-time functions
+ 18 => 'color: #000099;', // date-time functions
+ 19 => 'color: #000099;', // comparison functions
+ 20 => 'color: #000099;', // comparison functions
+ 21 => 'color: #000099;', // encryption functions
+ 22 => 'color: #000099;', // aggregate functions
+ 23 => 'color: #000099;', // information functions
+ 24 => 'color: #000099;', // information functions
+ 25 => 'color: #000099;', // miscellaneous functions
+ 26 => 'color: #000099;', // miscellaneous functions
+ 27 => 'color: #00CC00;', // geometry functions
+ ),
+ 'COMMENTS' => array(
+ 'MULTI' => 'color: #808000; font-style: italic;',
+ 1 => 'color: #808080; font-style: italic;',
+ 2 => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #004000; font-weight: bold;',
+ 1 => 'color: #008080; font-weight: bold;' // search wildcards
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #FF00FF;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #008000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #008080;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 1 => 'color: #CC0099;', // operators
+ 2 => 'color: #000033;', // syntax
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => 'http://search.mysql.com/search?site=refman-51&amp;q={FNAME}&amp;lr=lang_en',
+ 2 => 'http://search.mysql.com/search?site=refman-51&amp;q={FNAME}&amp;lr=lang_en',
+ 3 => 'http://search.mysql.com/search?site=refman-51&amp;q={FNAME}&amp;lr=lang_en',
+ 4 => 'http://search.mysql.com/search?site=refman-51&amp;q={FNAME}&amp;lr=lang_en',
+ 5 => 'http://search.mysql.com/search?site=refman-51&amp;q={FNAME}&amp;lr=lang_en',
+ 6 => 'http://search.mysql.com/search?site=refman-51&amp;q={FNAME}&amp;lr=lang_en',
+ 7 => 'http://search.mysql.com/search?site=refman-51&amp;q={FNAME}&amp;lr=lang_en',
+ 8 => 'http://search.mysql.com/search?site=refman-51&amp;q={FNAME}&amp;lr=lang_en',
+ 9 => 'http://search.mysql.com/search?site=refman-51&amp;q={FNAME}&amp;lr=lang_en',
+
+ 10 => 'http://dev.mysql.com/doc/refman/5.1/en/non-typed-operators.html',
+ 11 => 'http://dev.mysql.com/doc/refman/5.1/en/non-typed-operators.html',
+
+ 12 => 'http://dev.mysql.com/doc/refman/5.1/en/control-flow-functions.html',
+ 13 => 'http://dev.mysql.com/doc/refman/5.1/en/string-functions.html',
+ 14 => 'http://dev.mysql.com/doc/refman/5.1/en/string-functions.html',
+ 15 => 'http://dev.mysql.com/doc/refman/5.1/en/numeric-functions.html',
+ 16 => 'http://dev.mysql.com/doc/refman/5.1/en/numeric-functions.html',
+ 17 => 'http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html',
+ 18 => 'http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html',
+ 19 => 'http://dev.mysql.com/doc/refman/5.1/en/comparison-operators.html',
+ 20 => 'http://dev.mysql.com/doc/refman/5.1/en/comparison-operators.html',
+ 21 => 'http://dev.mysql.com/doc/refman/5.1/en/encryption-functions.html',
+ 22 => 'http://dev.mysql.com/doc/refman/5.1/en/group-by-functions-and-modifiers.html',
+ 23 => 'http://dev.mysql.com/doc/refman/5.1/en/information-functions.html',
+ 24 => 'http://dev.mysql.com/doc/refman/5.1/en/information-functions.html',
+ 25 => 'http://dev.mysql.com/doc/refman/5.1/en/func-op-summary-ref.html',
+ 26 => 'http://dev.mysql.com/doc/refman/5.1/en/func-op-summary-ref.html',
+ 27 => 'http://dev.mysql.com/doc/refman/5.1/en/analysing-spatial-information.html',
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 4,
+ 'PARSER_CONTROL' => array(
+ 'KEYWORDS' => array(
+ 2 => array(
+ 'DISALLOWED_AFTER' => '(?![\(\w])'
+ ),
+ 5 => array(
+ 'DISALLOWED_AFTER' => '(?![\(\w])'
+ ),
+ 7 => array(
+ 'DISALLOWED_AFTER' => '(?![\(\w])'
+ ),
+ 9 => array(
+ 'DISALLOWED_AFTER' => '(?![\(\w])'
+ ),
+ 11 => array(
+ 'DISALLOWED_AFTER' => '(?![\(\w])'
+ ),
+
+ 14 => array(
+ 'DISALLOWED_AFTER' => '(?=\()'
+ ),
+ 16 => array(
+ 'DISALLOWED_AFTER' => '(?=\()'
+ ),
+ 18 => array(
+ 'DISALLOWED_AFTER' => '(?=\()'
+ ),
+ 20 => array(
+ 'DISALLOWED_AFTER' => '(?=\()'
+ ),
+ 24 => array(
+ 'DISALLOWED_AFTER' => '(?=\()'
+ ),
+ 26 => array(
+ 'DISALLOWED_AFTER' => '(?=\()'
+ )
+ )
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/nsis.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/nsis.php
new file mode 100644
index 000000000..63767b025
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/nsis.php
@@ -0,0 +1,351 @@
+<?php
+/*************************************************************************************
+ * nsis.php
+ * --------
+ * Author: deguix (cevo_deguix@yahoo.com.br), Tux (http://tux.a4.cz/)
+ * Copyright: (c) 2005 deguix, 2004 Tux (http://tux.a4.cz/), Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2005/12/03
+ *
+ * Nullsoft Scriptable Install System language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2005/12/03 (2.0.2)
+ * - Updated to NSIS 2.11.
+ * 2005/06/17 (2.0.1)
+ * - Updated to NSIS 2.07b0.
+ * 2005/04/05 (2.0.0)
+ * - Updated to NSIS 2.06.
+ * 2004/11/27 (1.0.2)
+ * - Added support for multiple object splitters
+ * 2004/10/27 (1.0.1)
+ * - Added support for URLs
+ * 2004/08/05 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'NSIS',
+ 'COMMENT_SINGLE' => array(1 => ';', 2 => '#'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'",'"','`'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ 1 => array(
+ '!appendfile', '!addIncludeDir', '!addplugindir', '!cd', '!define', '!delfile', '!echo', '!else',
+ '!endif', '!error', '!execute', '!ifdef', '!ifmacrodef', '!ifmacrondef', '!ifndef', '!include',
+ '!insertmacro', '!macro', '!macroend', '!packhdr', '!tempfile', '!system', '!undef', '!verbose',
+ '!warning'
+ ),
+ 2 => array(
+ 'AddBrandingImage', 'AllowRootDirInstall', 'AutoCloseWindow', 'BGFont',
+ 'BGGradient', 'BrandingText', 'Caption', 'ChangeUI', 'CheckBitmap', 'CompletedText', 'ComponentText',
+ 'CRCCheck', 'DetailsButtonText', 'DirShow', 'DirText', 'DirVar', 'DirVerify', 'FileErrorText',
+ 'Function', 'FunctionEnd', 'Icon', 'InstallButtonText', 'InstallColors', 'InstallDir',
+ 'InstallDirRegKey', 'InstProgressFlags', 'InstType', 'LangString', 'LangStringUP', 'LicenseBkColor',
+ 'LicenseData', 'LicenseForceSelection', 'LicenseLangString', 'LicenseText', 'LoadLanguageFile',
+ 'MiscButtonText', 'Name', 'OutFile', 'Page', 'PageEx', 'PageExEnd', 'Section',
+ 'SectionEnd', 'SectionGroup', 'SectionGroupEnd', 'SetCompressor', 'SetFont', 'ShowInstDetails',
+ 'ShowUninstDetails', 'SilentInstall', 'SilentUnInstall', 'SpaceTexts', 'SubCaption', 'SubSection',
+ 'SubSectionEnd', 'UninstallButtonText', 'UninstallCaption', 'UninstallIcon', 'UninstallSubCaption',
+ 'UninstallText', 'UninstPage', 'Var', 'VIAddVersionKey', 'VIProductVersion', 'WindowIcon', 'XPStyle'
+ ),
+ 3 => array(
+ 'AddSize', 'AllowSkipFiles', 'FileBufSize', 'GetInstDirError', 'PageCallbacks',
+ 'SectionIn', 'SetCompress', 'SetCompressionLevel', 'SetCompressorDictSize',
+ 'SetDatablockOptimize', 'SetDateSave', 'SetOverwrite', 'SetPluginUnload'
+ ),
+ 4 => array(
+ 'Abort', 'BringToFront', 'Call', 'CallInstDLL', 'ClearErrors', 'CopyFiles','CreateDirectory',
+ 'CreateFont', 'CreateShortCut', 'Delete', 'DeleteINISec', 'DeleteINIStr', 'DeleteRegKey',
+ 'DeleteRegValue', 'DetailPrint', 'EnableWindow', 'EnumRegKey', 'EnumRegValue', 'Exch', 'Exec',
+ 'ExecShell', 'ExecWait', 'ExpandEnvStrings', 'File', 'FileClose', 'FileOpen', 'FileRead',
+ 'FileReadByte', 'FileSeek', 'FileWrite', 'FileWriteByte', 'FindClose', 'FindFirst', 'FindNext',
+ 'FindWindow', 'FlushINI', 'GetCurInstType', 'GetCurrentAddress', 'GetDlgItem', 'GetDLLVersion',
+ 'GetDLLVersionLocal', 'GetErrorLevel', 'GetFileTime', 'GetFileTimeLocal', 'GetFullPathName',
+ 'GetFunctionAddress', 'GetLabelAddress', 'GetTempFileName', 'GetWindowText', 'Goto', 'HideWindow',
+ 'IfAbort', 'IfErrors', 'IfFileExists', 'IfRebootFlag', 'IfSilent', 'InitPluginsDir', 'InstTypeGetText',
+ 'InstTypeSetText', 'IntCmp', 'IntCmpU', 'IntFmt', 'IntOp', 'IsWindow', 'LockWindow', 'LogSet', 'LogText',
+ 'MessageBox', 'Nop', 'Pop', 'Push', 'Quit', 'ReadEnvStr', 'ReadIniStr', 'ReadRegDWORD', 'ReadRegStr',
+ 'Reboot', 'RegDLL', 'Rename', 'ReserveFile', 'Return', 'RMDir', 'SearchPath', 'SectionGetFlags',
+ 'SectionGetInstTypes', 'SectionGetSize', 'SectionGetText', 'SectionSetFlags', 'SectionSetInstTypes',
+ 'SectionSetSize', 'SectionSetText', 'SendMessage', 'SetAutoClose', 'SetBrandingImage', 'SetCtlColors',
+ 'SetCurInstType', 'SetDetailsPrint', 'SetDetailsView', 'SetErrorLevel', 'SetErrors', 'SetFileAttributes',
+ 'SetOutPath', 'SetRebootFlag', 'SetShellVarContext', 'SetSilent', 'ShowWindow', 'Sleep', 'StrCmp',
+ 'StrCpy', 'StrLen', 'UnRegDLL', 'WriteINIStr', 'WriteRegBin', 'WriteRegDWORD', 'WriteRegExpandStr',
+ 'WriteRegStr', 'WriteUninstaller'
+ ),
+ 5 => array(
+ 'all', 'alwaysoff', 'ARCHIVE', 'auto', 'both', 'bzip2', 'checkbox', 'components', 'current',
+ 'custom', 'directory', 'false', 'FILE_ATTRIBUTE_ARCHIVE', 'FILE_ATTRIBUTE_HIDDEN', 'FILE_ATTRIBUTE_NORMAL',
+ 'FILE_ATTRIBUTE_OFFLINE', 'FILE_ATTRIBUTE_READONLY', 'FILE_ATTRIBUTE_SYSTEM,TEMPORARY',
+ 'FILE_ATTRIBUTE_TEMPORARY', 'force', 'HIDDEN', 'hide', 'HKCC', 'HKCR', 'HKCU', 'HKDD', 'HKEY_CLASSES_ROOT',
+ 'HKEY_CURRENT_CONFIG', 'HKEY_CURRENT_USER', 'HKEY_DYN_DATA', 'HKEY_LOCAL_MACHINE', 'HKEY_PERFORMANCE_DATA',
+ 'HKEY_USERS', 'HKLM', 'HKPD', 'HKU', 'IDABORT', 'IDCANCEL', 'IDIGNORE', 'IDNO', 'IDOK', 'IDRETRY', 'IDYES',
+ 'ifdiff', 'ifnewer', 'instfiles', 'lastused', 'leave', 'license', 'listonly', 'lzma', 'manual',
+ 'MB_ABORTRETRYIGNORE', 'MB_DEFBUTTON1', 'MB_DEFBUTTON2', 'MB_DEFBUTTON3', 'MB_DEFBUTTON4',
+ 'MB_ICONEXCLAMATION', 'MB_ICONINFORMATION', 'MB_ICONQUESTION', 'MB_ICONSTOP', 'MB_OK', 'MB_OKCANCEL',
+ 'MB_RETRYCANCEL', 'MB_RIGHT', 'MB_SETFOREGROUND', 'MB_TOPMOST', 'MB_YESNO', 'MB_YESNOCANCEL', 'nevershow',
+ 'none', 'normal', 'off', 'OFFLINE', 'on', 'radiobuttons', 'READONLY', 'RO', 'SHCTX', 'SHELL_CONTEXT', 'show',
+ 'silent', 'silentlog', 'SW_HIDE', 'SW_SHOWMAXIMIZED', 'SW_SHOWMINIMIZED', 'SW_SHOWNORMAL', 'SYSTEM',
+ 'textonly', 'true', 'try', 'uninstConfirm', 'zlib'
+ ),
+ 6 => array(
+ '/a', '/components', '/COMPONENTSONLYONCUSTOM', '/CUSTOMSTRING', '/e', '/FILESONLY', '/FINAL', '/gray', '/GLOBAL',
+ '/ifempty', '/IMGID', '/ITALIC', '/lang', '/NOCUSTOM', '/nonfatal', '/NOUNLOAD', '/oname', '/r', '/REBOOTOK',
+ '/RESIZETOFIT', '/SOLID', '/SD', '/SHORT', '/silent', '/STRIKE', '/TIMEOUT', '/TRIMCENTER', '/TRIMLEFT',
+ '/TRIMRIGHT', '/UNDERLINE', '/windows', '/x'
+ ),
+ 7 => array(
+ '.onGUIEnd', '.onGUIInit', '.onInit', '.onInstFailed', '.onInstSuccess', '.onMouseOverSection',
+ '.onRebootFailed', '.onSelChange', '.onUserAbort', '.onVerifyInstDir', 'un.onGUIEnd', 'un.onGUIInit',
+ 'un.onInit', 'un.onRebootFailed', 'un.onUninstFailed', 'un.onUninstSuccess', 'un.onUserAbort'
+ ),
+ 8 => array(
+ 'MUI.nsh', '"${NSISDIR}\Contrib\Modern UI\System.nsh"', 'MUI_SYSVERSION', 'MUI_ICON', 'MUI_UNICON',
+ 'MUI_HEADERIMAGE', 'MUI_HEADERIMAGE_BITMAP', 'MUI_HEADERIMAGE_BITMAP_NOSTRETCH', 'MUI_HEADERIMAGE_BITMAP_RTL',
+ 'MUI_HEADERIMAGE_BITMAP_RTL_NOSTRETCH', 'MUI_HEADERIMAGE_UNBITMAP', 'MUI_HEADERIMAGE_UNBITMAP_NOSTRETCH',
+ 'MUI_HEADERIMAGE_UNBITMAP_RTL', 'MUI_HEADERIMAGE_UNBITMAP_RTL_NOSTRETCH', 'MUI_HEADERIMAGE_RIGHT', 'MUI_BGCOLOR',
+ 'MUI_UI', 'MUI_UI_HEADERIMAGE', 'MUI_UI_HEADERIMAGE_RIGHT', 'MUI_UI_COMPONENTSPAGE_SMALLDESC',
+ 'MUI_UI_COMPONENTSPAGE_NODESC', 'MUI_WELCOMEFINISHPAGE_BITMAP', 'MUI_WELCOMEFINISHPAGE_BITMAP_NOSTRETCH',
+ 'MUI_WELCOMEFINISHPAGE_INI', 'MUI_UNWELCOMEFINISHPAGE_BITMAP', 'MUI_UNWELCOMEFINISHPAGE_BITMAP_NOSTRETCH',
+ 'MUI_UNWELCOMEFINISHPAGE_INI', 'MUI_LICENSEPAGE_BGCOLOR', 'MUI_COMPONENTSPAGE_CHECKBITMAP',
+ 'MUI_COMPONENTSPAGE_SMALLDESC', 'MUI_COMPONENTSPAGE_NODESC', 'MUI_INSTFILESPAGE_COLORS',
+ 'MUI_INSTFILESPAGE_PROGRESSBAR', 'MUI_FINISHPAGE_NOAUTOCLOSE', 'MUI_UNFINISHPAGE_NOAUTOCLOSE',
+ 'MUI_ABORTWARNING', 'MUI_ABORTWARNING_TEXT', 'MUI_UNABORTWARNING', 'MUI_UNABORTWARNING_TEXT',
+ 'MUI_PAGE_WELCOME', 'MUI_PAGE_LICENSE', 'MUI_PAGE_COMPONENTS', 'MUI_PAGE_DIRECTORY',
+ 'MUI_PAGE_STARTMENU', 'MUI_PAGE_INSTFILES', 'MUI_PAGE_FINISH', 'MUI_UNPAGE_WELCOME',
+ 'MUI_UNPAGE_CONFIRM', 'MUI_UNPAGE_LICENSE', 'MUI_UNPAGE_COMPONENTS', 'MUI_UNPAGE_DIRECTORY',
+ 'MUI_UNPAGE_INSTFILES', 'MUI_UNPAGE_FINISH', 'MUI_PAGE_HEADER_TEXT', 'MUI_PAGE_HEADER_SUBTEXT',
+ 'MUI_WELCOMEPAGE_TITLE', 'MUI_WELCOMEPAGE_TITLE_3LINES', 'MUI_WELCOMEPAGE_TEXT',
+ 'MUI_LICENSEPAGE_TEXT_TOP', 'MUI_LICENSEPAGE_TEXT_BOTTOM', 'MUI_LICENSEPAGE_BUTTON',
+ 'MUI_LICENSEPAGE_CHECKBOX', 'MUI_LICENSEPAGE_CHECKBOX_TEXT', 'MUI_LICENSEPAGE_RADIOBUTTONS',
+ 'MUI_LICENSEPAGE_RADIOBUTTONS_TEXT_ACCEPT', 'MUI_LICENSEPAGE_RADIOBUTTONS_TEXT_DECLINE',
+ 'MUI_COMPONENTSPAGE_TEXT_TOP', 'MUI_COMPONENTSPAGE_TEXT_COMPLIST', 'MUI_COMPONENTSPAGE_TEXT_INSTTYPE',
+ 'MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_TITLE', 'MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_INFO',
+ 'MUI_DIRECTORYPAGE_TEXT_TOP', 'MUI_DIRECTORYPAGE_TEXT_DESTINATION', 'MUI_DIRECTORYPAGE_VARIABLE',
+ 'MUI_DIRECTORYPAGE_VERIFYONLEAVE', 'MUI_STARTMENU_WRITE_BEGIN', 'MUI_STARTMENU_WRITE_END',
+ 'MUI_STARTMENUPAGE_TEXT_TOP', 'MUI_STARTMENUPAGE_TEXT_CHECKBOX', 'MUI_STARTMENUPAGE_DEFAULTFOLDER',
+ 'MUI_STARTMENUPAGE_NODISABLE', 'MUI_STARTMENUPAGE_REGISTRY_ROOT', 'MUI_STARTMENUPAGE_REGISTRY_KEY',
+ 'MUI_STARTMENUPAGE_REGISTRY_VALUENAME', 'MUI_INSTFILESPAGE_FINISHHEADER_TEXT',
+ 'MUI_INSTFILESPAGE_FINISHHEADER_SUBTEXT', 'MUI_INSTFILESPAGE_ABORTHEADER_TEXT',
+ 'MUI_INSTFILESPAGE_ABORTHEADER_SUBTEXT', 'MUI_FINISHPAGE_TITLE', 'MUI_FINISHPAGE_TITLE_3LINES',
+ 'MUI_FINISHPAGE_TEXT', 'MUI_FINISHPAGE_TEXT_LARGE', 'MUI_FINISHPAGE_BUTTON',
+ 'MUI_FINISHPAGE_TEXT_REBOOT', 'MUI_FINISHPAGE_TEXT_REBOOTNOW', 'MUI_FINISHPAGE_TEXT_REBOOTLATER',
+ 'MUI_FINISHPAGE_RUN', 'MUI_FINISHPAGE_RUN_TEXT', 'MUI_FINISHPAGE_RUN_PARAMETERS',
+ 'MUI_FINISHPAGE_RUN_NOTCHECKED', 'MUI_FINISHPAGE_RUN_FUNCTION', 'MUI_FINISHPAGE_SHOWREADME',
+ 'MUI_FINISHPAGE_SHOWREADME_TEXT', 'MUI_FINISHPAGE_SHOWREADME_NOTCHECKED',
+ 'MUI_FINISHPAGE_SHOWREADME_FUNCTION', 'MUI_FINISHPAGE_LINK', 'MUI_FINISHPAGE_LINK_LOCATION',
+ 'MUI_FINISHPAGE_LINK_COLOR', 'MUI_FINISHPAGE_NOREBOOTSUPPORT', 'MUI_UNCONFIRMPAGE_TEXT_TOP',
+ 'MUI_UNCONFIRMPAGE_TEXT_LOCATION', 'MUI_LANGUAGE', 'MUI_LANGDLL_DISPLAY',
+ 'MUI_LANGDLL_REGISTRY_ROOT', 'MUI_LANGDLL_REGISTRY_KEY', 'MUI_LANGDLL_REGISTRY_VALUENAME',
+ 'MUI_LANGDLL_WINDOWTITLE', 'MUI_LANGDLL_INFO', 'MUI_LANGDLL_ALWAYSSHOW',
+ 'MUI_RESERVEFILE_INSTALLOPTIONS', 'MUI_RESERVEFILE_LANGDLL', 'MUI_FUNCTION_DESCRIPTION_BEGIN',
+ 'MUI_DESCRIPTION_TEXT', 'MUI_FUNCTION_DESCRIPTION_END', 'MUI_INSTALLOPTIONS_EXTRACT',
+ 'MUI_INSTALLOPTIONS_EXTRACT_AS', 'MUI_HEADER_TEXT', 'MUI_INSTALLOPTIONS_DISPLAY',
+ 'MUI_INSTALLOPTIONS_INITDIALOG', 'MUI_INSTALLOPTIONS_SHOW',
+ 'MUI_INSTALLOPTIONS_DISPLAY_RETURN', 'MUI_INSTALLOPTIONS_SHOW_RETURN',
+ 'MUI_INSTALLOPTIONS_READ', 'MUI_INSTALLOPTIONS_WRITE',
+ 'MUI_CUSTOMFUNCTION_GUIINIT', 'MUI_CUSTOMFUNCTION_UNGUIINIT',
+ 'MUI_CUSTOMFUNCTION_ABORT', 'MUI_CUSTOMFUNCTION_UNABORT',
+ 'MUI_PAGE_CUSTOMFUNCTION_PRE', 'MUI_PAGE_CUSTOMFUNCTION_SHOW', 'MUI_PAGE_CUSTOMFUNCTION_LEAVE',
+ 'MUI_WELCOMEFINISHPAGE_CUSTOMFUNCTION_INIT'
+ ),
+ 9 => array(
+ 'LogicLib.nsh', '${LOGICLIB}', 'LOGICLIB_STRCMP', 'LOGICLIB_INT64CMP', 'LOGICLIB_SECTIONCMP', '${If}', '${Unless}',
+ '${ElseIf}', '${ElseUnless}', '${Else}', '${EndIf}', '${EndUnless}', '${AndIf}', '${AndUnless}',
+ '${OrIf}', '${OrUnless}', '${IfThen}', '${IfCmd}', '${Select}', '${Case2}', '${Case3}',
+ '${Case4}', '${Case5}', '${CaseElse}', '${Default}', '${EndSelect}', '${Switch}',
+ '${Case}', '${EndSwitch}', '${Do}', '${DoWhile}', '${UntilWhile}', '${Continue}', '${Break}',
+ '${Loop}', '${LoopWhile}', '${LoopUntil}', '${While}', '${ExitWhile}', '${EndWhile}', '${For}',
+ '${ForEach}', '${ExitFor}', '${Next}', '${Abort}', '${Errors}', '${RebootFlag}', '${Silent}',
+ '${FileExists}', '${Cmd}', '${SectionIsSelected}', '${SectionIsSectionGroup}',
+ '${SectionIsSectionGroupEnd}', '${SectionIsBold}', '${SectionIsReadOnly}',
+ '${SectionIsExpanded}', '${SectionIsPartiallySelected}'
+ ),
+ 10 => array(
+ 'StrFunc.nsh', '${STRFUNC}', '${StrCase}', '${StrClb}', '${StrIOToNSIS}', '${StrLoc}', '${StrNSISToIO}', '${StrRep}',
+ '${StrSort}', '${StrStr}', '${StrStrAdv}', '${StrTok}', '${StrTrimNewLines}'
+ ),
+ 11 => array(
+ 'UpgradeDLL.nsh', 'UPGRADEDLL_INCLUDED', 'UpgradeDLL'
+ ),
+ 12 => array(
+ 'Sections.nsh', 'SECTIONS_INCLUDED', '${SF_SELECTED}', '${SF_SECGRP}', '${SF_SUBSEC}', '${SF_SECGRPEND}',
+ '${SF_SUBSECEND}', '${SF_BOLD}', '${SF_RO}', '${SF_EXPAND}', '${SF_PSELECTED}', '${SF_TOGGLED}',
+ '${SF_NAMECHG}', '${SECTION_OFF}', 'SelectSection', 'UnselectSection', 'ReverseSection',
+ 'StartRadioButtons', 'RadioButton', 'EndRadioButtons', '${INSTTYPE_0}', '${INSTTYPE_1}', '${INSTTYPE_2}',
+ '${INSTTYPE_3}', '${INSTTYPE_4}', '${INSTTYPE_5}', '${INSTTYPE_6}', '${INSTTYPE_7}', '${INSTTYPE_8}',
+ '${INSTTYPE_9}', '${INSTTYPE_10}', '${INSTTYPE_11}', '${INSTTYPE_12}', '${INSTTYPE_13}', '${INSTTYPE_14}',
+ '${INSTTYPE_15}', '${INSTTYPE_16}', '${INSTTYPE_17}', '${INSTTYPE_18}', '${INSTTYPE_19}', '${INSTTYPE_20}',
+ '${INSTTYPE_21}', '${INSTTYPE_22}', '${INSTTYPE_23}', '${INSTTYPE_24}', '${INSTTYPE_25}', '${INSTTYPE_26}',
+ '${INSTTYPE_27}', '${INSTTYPE_28}', '${INSTTYPE_29}', '${INSTTYPE_30}', '${INSTTYPE_31}', '${INSTTYPE_32}',
+ 'SetSectionInInstType', 'ClearSectionInInstType', 'SetSectionFlag', 'ClearSectionFlag', 'SectionFlagIsSet'
+ ),
+ 13 => array(
+ 'Colors.nsh', 'WHITE', 'BLACK', 'YELLOW', 'RED', 'GREEN', 'BLUE', 'MAGENTA', 'CYAN', 'rgb2hex'
+ ),
+ 14 => array(
+ 'FileFunc.nsh', '${Locate}', '${GetSize}', '${DriveSpace}', '${GetDrives}', '${GetTime}', '${GetFileAttributes}', '${GetFileVersion}', '${GetExeName}', '${GetExePath}', '${GetParameters}', '${GetOptions}', '${GetRoot}', '${GetParent}', '${GetFileName}', '${GetBaseName}', '${GetFileExt}', '${BannerTrimPath}', '${DirState}', '${RefreshShellIcons}'
+ ),
+ 15 => array(
+ 'TextFunc.nsh', '${LineFind}', '${LineRead}', '${FileReadFromEnd}', '${LineSum}', '${FileJoin}', '${TextCompare}', '${ConfigRead}', '${ConfigWrite}', '${FileRecode}', '${TrimNewLines}'
+ ),
+ 16 => array(
+ 'WordFunc.nsh', '${WordFind}', '${WordFind2X}', '${WordFind3X}', '${WordReplace}', '${WordAdd}', '${WordInsert}', '${StrFilter}', '${VersionCompare}', '${VersionConvert}'
+ )
+ ),
+ 'SYMBOLS' => array(
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false,
+ 6 => false,
+ 7 => false,
+ 8 => false,
+ 9 => false,
+ 10 => false,
+ 11 => false,
+ 12 => false,
+ 13 => false,
+ 14 => false,
+ 15 => false,
+ 16 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #000066; font-weight:bold;',
+ 2 => 'color: #000066;',
+ 3 => 'color: #003366;',
+ 4 => 'color: #000099;',
+ 5 => 'color: #ff6600;',
+ 6 => 'color: #ff6600;',
+ 7 => 'color: #006600;',
+ 8 => 'color: #006600;',
+ 9 => 'color: #006600;',
+ 10 => 'color: #006600;',
+ 11 => 'color: #006600;',
+ 12 => 'color: #006600;',
+ 13 => 'color: #006600;',
+ 14 => 'color: #006600;',
+ 15 => 'color: #006600;',
+ 16 => 'color: #006600;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #666666; font-style: italic;',
+ 2 => 'color: #666666; font-style: italic;',
+ 'MULTI' => 'color: #666666; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #660066; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => ''
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #660066;'
+ ),
+ 'NUMBERS' => array(
+ 0 => ''
+ ),
+ 'METHODS' => array(
+ 0 => ''
+ ),
+ 'SYMBOLS' => array(
+ 0 => ''
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #660000;',
+ 1 => 'color: #660000;',
+ 2 => 'color: #660000;',
+ 3 => 'color: #660000;',
+ 4 => 'color: #660000;',
+ 5 => 'color: #660000;',
+ 6 => 'color: #660000;',
+ 7 => 'color: #000099;',
+ 8 => 'color: #003399;'
+ ),
+ 'SCRIPT' => array(
+ 0 => ''
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => '',
+ 5 => '',
+ 6 => '',
+ 7 => '',
+ 8 => '',
+ 9 => '',
+ 10 => '',
+ 11 => '',
+ 12 => '',
+ 13 => '',
+ 14 => '',
+ 15 => '',
+ 16 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ 0 => '\$\$',
+ 1 => '\$\\r',
+ 2 => '\$\\n',
+ 3 => '\$\\t',
+ 4 => '\$[a-zA-Z0-9_]+',
+ 5 => '\$\{.{1,256}\}',
+ 6 => '\$\\\(.{1,256}\\\)',
+ 7 => array(
+ GESHI_SEARCH => '([^:\/\\\*\?\"\<\>(?:<PIPE>)\s]*?)(::)([^:\/\\\*\?\"\<\>(?:<PIPE>)\s]*?)',
+ GESHI_REPLACE => '\\1',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => '\\2\\3'
+ ),
+ 8 => array(
+ GESHI_SEARCH => '([^:\/\\\*\?\"\<\>(?:<PIPE>)\s]*?)(::)([^:\/\\\*\?\"\<\>(?:<PIPE>)]*?\s)',
+ GESHI_REPLACE => '\\3',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '\\1\\2',
+ GESHI_AFTER => ''
+ )
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/oberon2.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/oberon2.php
new file mode 100644
index 000000000..4e4223f4f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/oberon2.php
@@ -0,0 +1,135 @@
+<?php
+/*************************************************************************************
+ * oberon2.php
+ * ----------
+ * Author: mbishop (mbishop@esoteriq.org)
+ * Copyright: (c) 2009 mbishop (mbishop@esoteriq.org)
+ * Release Version: 1.0.8.4
+ * Date Started: 2009/02/10
+ *
+ * Oberon-2 language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ *
+ * TODO
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Oberon-2',
+ 'COMMENT_SINGLE' => array(),
+ 'COMMENT_MULTI' => array('(*' => '*)'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'HARDQUOTE' => array("'", "'"),
+ 'HARDESCAPE' => array("''"),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'ARRAY', 'BEGIN', 'BY', 'CASE',
+ 'CONST', 'DIV', 'DO', 'ELSE', 'ELSIF', 'END',
+ 'EXIT', 'FOR', 'IF', 'IMPORT', 'IN', 'IS',
+ 'LOOP', 'MOD', 'MODULE', 'OF',
+ 'OR', 'POINTER', 'PROCEDURE', 'RECORD',
+ 'REPEAT', 'RETURN', 'THEN', 'TO',
+ 'TYPE', 'UNTIL', 'VAR', 'WHILE', 'WITH'
+ ),
+ 2 => array(
+ 'NIL', 'FALSE', 'TRUE',
+ ),
+ 3 => array(
+ 'ABS', 'ASH', 'ASSERT', 'CAP', 'CHR', 'COPY', 'DEC',
+ 'ENTIER', 'EXCL', 'HALT', 'INC', 'INCL', 'LEN',
+ 'LONG', 'MAX', 'MIN', 'NEW', 'ODD', 'ORD', 'SHORT', 'SIZE'
+ ),
+ 4 => array(
+ 'BOOLEAN', 'CHAR', 'SHORTINT', 'LONGINT',
+ 'INTEGER', 'LONGREAL', 'REAL', 'SET', 'PTR'
+ ),
+ ),
+ 'SYMBOLS' => array(
+ ',', ':', '=', '+', '-', '*', '/', '#', '~'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ 2 => true,
+ 3 => true,
+ 4 => true,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #000000; font-weight: bold;',
+ 2 => 'color: #000000; font-weight: bold;',
+ 3 => 'color: #000066;',
+ 4 => 'color: #000066; font-weight: bold;'
+ ),
+ 'COMMENTS' => array(
+ 'MULTI' => 'color: #666666; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;',
+ 'HARD' => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #009900;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;',
+ 'HARD' => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #0066ee;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #339933;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 4
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/objc.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/objc.php
new file mode 100644
index 000000000..ec8d18e72
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/objc.php
@@ -0,0 +1,358 @@
+<?php
+/*************************************************************************************
+ * objc.php
+ * --------
+ * Author: M. Uli Kusterer (witness.of.teachtext@gmx.net)
+ * Contributors: Quinn Taylor (quinntaylor@mac.com)
+ * Copyright: (c) 2008 Quinn Taylor, 2004 M. Uli Kusterer, Nigel McNie (http://qbnz.com/highlighter/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/06/04
+ *
+ * Objective-C language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/07/11 (1.0.8)
+ * - Added support for @ before strings being highlighted
+ * 2008/06/10 (1.0.7.22)
+ * - Added keywords for Objective-C 2.0 (Leopard+).
+ * - Changed colors to match Xcode 3 highlighting more closely.
+ * - Updated API for AppKit and Foundation; added CoreData classes.
+ * - Updated URLs for AppKit and Foundation; split classes and protocols.
+ * - Sorted all keyword group in reverse-alpha order for correct matching.
+ * - Changed all keyword groups to be case-sensitive.
+ * 2004/11/27 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Objective-C',
+ 'COMMENT_SINGLE' => array(
+ //Compiler directives
+ 1 => '#',
+ //Single line C-Comments
+ 2 => '//'
+ ),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'COMMENT_REGEXP' => array(
+ //Multiline Continuation for single-line comment
+ 2 => '/\/\/(?:\\\\\\\\|\\\\\\n|.)*$/m',
+ //Pseudo-Highlighting of the @-sign before strings
+ 3 => "/@(?=\")/"
+ ),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"', "'"),
+ 'ESCAPE_CHAR' => '\\',
+
+ 'KEYWORDS' => array(
+ // Objective-C keywords
+ 1 => array(
+ 'while', 'switch', 'return', 'in', 'if', 'goto', 'foreach', 'for',
+ 'else', 'do', 'default', 'continue', 'case', '@try', '@throw',
+ '@synthesize', '@synchronized', '@selector', '@public', '@protocol',
+ '@protected', '@property', '@private', '@interface',
+ '@implementation', '@finally', '@end', '@encode', '@defs', '@class',
+ '@catch'
+ ),
+ // Macros and constants
+ 2 => array(
+ 'YES', 'USHRT_MAX', 'ULONG_MAX', 'UINT_MAX', 'UCHAR_MAX', 'true',
+ 'TMP_MAX', 'stdout', 'stdin', 'stderr', 'SIGTERM', 'SIGSEGV',
+ 'SIGINT', 'SIGILL', 'SIG_IGN', 'SIGFPE', 'SIG_ERR', 'SIG_DFL',
+ 'SIGABRT', 'SHRT_MIN', 'SHRT_MAX', 'SEEK_SET', 'SEEK_END',
+ 'SEEK_CUR', 'SCHAR_MIN', 'SCHAR_MAX', 'RAND_MAX', 'NULL',
+ 'NO', 'nil', 'Nil', 'L_tmpnam', 'LONG_MIN', 'LONG_MAX',
+ 'LDBL_MIN_EXP', 'LDBL_MIN', 'LDBL_MAX_EXP', 'LDBL_MAX',
+ 'LDBL_MANT_DIG', 'LDBL_EPSILON', 'LDBL_DIG', 'INT_MIN', 'INT_MAX',
+ 'HUGE_VAL', 'FOPEN_MAX', 'FLT_ROUNDS', 'FLT_RADIX', 'FLT_MIN_EXP',
+ 'FLT_MIN', 'FLT_MAX_EXP', 'FLT_MAX', 'FLT_MANT_DIG', 'FLT_EPSILON',
+ 'FLT_DIG', 'FILENAME_MAX', 'false', 'EXIT_SUCCESS', 'EXIT_FAILURE',
+ 'errno', 'ERANGE', 'EOF', 'enum', 'EDOM', 'DBL_MIN_EXP', 'DBL_MIN',
+ 'DBL_MAX_EXP', 'DBL_MAX', 'DBL_MANT_DIG', 'DBL_EPSILON', 'DBL_DIG',
+ 'CLOCKS_PER_SEC', 'CHAR_MIN', 'CHAR_MAX', 'CHAR_BIT', 'BUFSIZ',
+ 'break'
+ ),
+ // C standard library functions
+ 3 => array(
+ 'vsprintf', 'vprintf', 'vfprintf', 'va_start', 'va_end', 'va_arg',
+ 'ungetc', 'toupper', 'tolower', 'tmpname', 'tmpfile', 'time',
+ 'tanh', 'tan', 'system', 'strxfrm', 'strtoul', 'strtol', 'strtok',
+ 'strtod', 'strstr', 'strspn', 'strrchr', 'strpbrk', 'strncpy',
+ 'strncmp', 'strncat', 'strlen', 'strftime', 'strerror', 'strcspn',
+ 'strcpy', 'strcoll', 'strcmp', 'strchr', 'strcat', 'sscanf',
+ 'srand', 'sqrt', 'sprintf', 'snprintf', 'sizeof', 'sinh', 'sin',
+ 'setvbuf', 'setjmp', 'setbuf', 'scanf', 'rewind', 'rename',
+ 'remove', 'realloc', 'rand', 'qsort', 'puts', 'putchar', 'putc',
+ 'printf', 'pow', 'perror', 'offsetof', 'modf', 'mktime', 'memset',
+ 'memmove', 'memcpy', 'memcmp', 'memchr', 'malloc', 'longjmp',
+ 'log10', 'log', 'localtime', 'ldiv', 'ldexp', 'labs', 'isxdigit',
+ 'isupper', 'isspace', 'ispunct', 'isprint', 'islower',
+ 'isgraph', 'isdigit', 'iscntrl', 'isalpha', 'isalnum', 'gmtime',
+ 'gets', 'getenv', 'getchar', 'getc', 'fwrite', 'ftell', 'fsetpos',
+ 'fseek', 'fscanf', 'frexp', 'freopen', 'free', 'fread', 'fputs',
+ 'fputc', 'fprintf', 'fopen', 'fmod', 'floor', 'fgets', 'fgetpos',
+ 'fgetc', 'fflush', 'ferror', 'feof', 'fclose', 'fabs', 'exp',
+ 'exit', 'div', 'difftime', 'ctime', 'cosh', 'cos', 'clock',
+ 'clearerr', 'ceil', 'calloc', 'bsearch', 'atol', 'atoi', 'atof',
+ 'atexit', 'atan2', 'atan', 'assert', 'asin', 'asctime', 'acos',
+ 'abs', 'abort'
+ ),
+ // Data types (C, Objective-C, Cocoa)
+ 4 => array(
+ 'volatile', 'void', 'va_list', 'unsigned', 'union', 'typedef', 'tm',
+ 'time_t', 'struct', 'string', 'static', 'size_t',
+ 'signed', 'signal', 'short', 'SEL', 'register', 'raise',
+ 'ptrdiff_t', 'NSZone', 'NSRect', 'NSRange', 'NSPoint', 'long',
+ 'ldiv_t', 'jmp_buf', 'int', 'IMP', 'id', 'fpos_t', 'float', 'FILE',
+ 'extern', 'double', 'div_t', 'const', 'clock_t', 'Class', 'char',
+ 'BOOL', 'auto'
+ ),
+ // Foundation classes
+ 5 => array(
+ 'NSXMLParser', 'NSXMLNode', 'NSXMLElement', 'NSXMLDTDNode',
+ 'NSXMLDTD', 'NSXMLDocument', 'NSWhoseSpecifier',
+ 'NSValueTransformer', 'NSValue', 'NSUserDefaults', 'NSURLResponse',
+ 'NSURLRequest', 'NSURLProtocol', 'NSURLProtectionSpace',
+ 'NSURLHandle', 'NSURLDownload', 'NSURLCredentialStorage',
+ 'NSURLCredential', 'NSURLConnection', 'NSURLCache',
+ 'NSURLAuthenticationChallenge', 'NSURL', 'NSUniqueIDSpecifier',
+ 'NSUndoManager', 'NSUnarchiver', 'NSTimeZone', 'NSTimer',
+ 'NSThread', 'NSTask', 'NSString', 'NSStream', 'NSSpellServer',
+ 'NSSpecifierTest', 'NSSortDescriptor', 'NSSocketPortNameServer',
+ 'NSSocketPort', 'NSSetCommand', 'NSSet', 'NSSerializer',
+ 'NSScriptWhoseTest', 'NSScriptSuiteRegistry',
+ 'NSScriptObjectSpecifier', 'NSScriptExecutionContext',
+ 'NSScriptCommandDescription', 'NSScriptCommand',
+ 'NSScriptCoercionHandler', 'NSScriptClassDescription', 'NSScanner',
+ 'NSRunLoop', 'NSRelativeSpecifier', 'NSRecursiveLock',
+ 'NSRangeSpecifier', 'NSRandomSpecifier', 'NSQuitCommand', 'NSProxy',
+ 'NSProtocolChecker', 'NSPropertySpecifier',
+ 'NSPropertyListSerialization', 'NSProcessInfo', 'NSPredicate',
+ 'NSPositionalSpecifier', 'NSPortNameServer', 'NSPortMessage',
+ 'NSPortCoder', 'NSPort', 'NSPointerFunctions', 'NSPointerArray',
+ 'NSPipe', 'NSOutputStream', 'NSOperationQueue', 'NSOperation',
+ 'NSObject', 'NSNumberFormatter', 'NSNumber', 'NSNull',
+ 'NSNotificationQueue', 'NSNotificationCenter', 'NSNotification',
+ 'NSNetServiceBrowser', 'NSNetService', 'NSNameSpecifier',
+ 'NSMutableURLRequest', 'NSMutableString', 'NSMutableSet',
+ 'NSMutableIndexSet', 'NSMutableDictionary', 'NSMutableData',
+ 'NSMutableCharacterSet', 'NSMutableAttributedString',
+ 'NSMutableArray', 'NSMoveCommand', 'NSMiddleSpecifier',
+ 'NSMethodSignature', 'NSMetadataQueryResultGroup',
+ 'NSMetadataQueryAttributeValueTuple', 'NSMetadataQuery',
+ 'NSMetadataItem', 'NSMessagePortNameServer', 'NSMessagePort',
+ 'NSMapTable', 'NSMachPort', 'NSMachBootstrapServer',
+ 'NSLogicalTest', 'NSLock', 'NSLocale', 'NSKeyedUnarchiver',
+ 'NSKeyedArchiver', 'NSInvocationOperation', 'NSInvocation',
+ 'NSInputStream', 'NSIndexSpecifier', 'NSIndexSet', 'NSIndexPath',
+ 'NSHTTPURLResponse', 'NSHTTPCookieStorage', 'NSHTTPCookie',
+ 'NSHost', 'NSHashTable', 'NSGetCommand', 'NSGarbageCollector',
+ 'NSFormatter', 'NSFileManager', 'NSFileHandle', 'NSExpression',
+ 'NSExistsCommand', 'NSException', 'NSError', 'NSEnumerator',
+ 'NSDistributedNotificationCenter', 'NSDistributedLock',
+ 'NSDistantObjectRequest', 'NSDistantObject',
+ 'NSDirectoryEnumerator', 'NSDictionary', 'NSDeserializer',
+ 'NSDeleteCommand', 'NSDecimalNumberHandler', 'NSDecimalNumber',
+ 'NSDateFormatter', 'NSDateComponents', 'NSDate', 'NSData',
+ 'NSCreateCommand', 'NSCountedSet', 'NSCountCommand', 'NSConnection',
+ 'NSConditionLock', 'NSCondition', 'NSCompoundPredicate',
+ 'NSComparisonPredicate', 'NSCoder', 'NSCloseCommand',
+ 'NSCloneCommand', 'NSClassDescription', 'NSCharacterSet',
+ 'NSCalendarDate', 'NSCalendar', 'NSCachedURLResponse', 'NSBundle',
+ 'NSAutoreleasePool', 'NSAttributedString', 'NSAssertionHandler',
+ 'NSArray', 'NSArchiver', 'NSAppleScript', 'NSAppleEventManager',
+ 'NSAppleEventDescriptor', 'NSAffineTransform'
+ ),
+ // Foundation protocols
+ 6 => array(
+ 'NSURLProtocolClient', 'NSURLHandleClient', 'NSURLClient',
+ 'NSURLAuthenticationChallengeSender', 'NSScriptObjectSpecifiers',
+ 'NSScriptKeyValueCoding', 'NSScriptingComparisonMethods',
+ 'NSObjCTypeSerializationCallBack', 'NSMutableCopying',
+ 'NSLocking', 'NSKeyValueObserving', 'NSKeyValueCoding',
+ 'NSFastEnumeration', 'NSErrorRecoveryAttempting',
+ 'NSDecimalNumberBehaviors', 'NSCopying', 'NSComparisonMethods',
+ 'NSCoding'
+ ),
+ // AppKit classes
+ 7 => array(
+ 'NSWorkspace', 'NSWindowController', 'NSWindow', 'NSViewController',
+ 'NSViewAnimation', 'NSView', 'NSUserDefaultsController',
+ 'NSTypesetter', 'NSTreeNode', 'NSTreeController', 'NSTrackingArea',
+ 'NSToolbarItemGroup', 'NSToolbarItem', 'NSToolbar',
+ 'NSTokenFieldCell', 'NSTokenField', 'NSTextView',
+ 'NSTextTableBlock', 'NSTextTable', 'NSTextTab', 'NSTextStorage',
+ 'NSTextList', 'NSTextFieldCell', 'NSTextField', 'NSTextContainer',
+ 'NSTextBlock', 'NSTextAttachmentCell', 'NSTextAttachment', 'NSText',
+ 'NSTabViewItem', 'NSTabView', 'NSTableView', 'NSTableHeaderView',
+ 'NSTableHeaderCell', 'NSTableColumn', 'NSStepperCell', 'NSStepper',
+ 'NSStatusItem', 'NSStatusBar', 'NSSplitView', 'NSSpellChecker',
+ 'NSSpeechSynthesizer', 'NSSpeechRecognizer', 'NSSound',
+ 'NSSliderCell', 'NSSlider', 'NSSimpleHorizontalTypesetter',
+ 'NSShadow', 'NSSegmentedControl', 'NSSegmentedCell',
+ 'NSSecureTextFieldCell', 'NSSecureTextField', 'NSSearchFieldCell',
+ 'NSSearchField', 'NSScrollView', 'NSScroller', 'NSScreen',
+ 'NSSavePanel', 'NSRulerView', 'NSRulerMarker', 'NSRuleEditor',
+ 'NSResponder', 'NSQuickDrawView', 'NSProgressIndicator',
+ 'NSPrintPanel', 'NSPrintOperation', 'NSPrintInfo', 'NSPrinter',
+ 'NSPredicateEditorRowTemplate', 'NSPredicateEditor',
+ 'NSPopUpButtonCell', 'NSPopUpButton', 'NSPICTImageRep',
+ 'NSPersistentDocument', 'NSPDFImageRep', 'NSPathControl',
+ 'NSPathComponentCell', 'NSPathCell', 'NSPasteboard',
+ 'NSParagraphStyle', 'NSPanel', 'NSPageLayout', 'NSOutlineView',
+ 'NSOpenPanel', 'NSOpenGLView', 'NSOpenGLPixelFormat',
+ 'NSOpenGLPixelBuffer', 'NSOpenGLContext', 'NSObjectController',
+ 'NSNibOutletConnector', 'NSNibControlConnector', 'NSNibConnector',
+ 'NSNib', 'NSMutableParagraphStyle', 'NSMovieView', 'NSMovie',
+ 'NSMenuView', 'NSMenuItemCell', 'NSMenuItem', 'NSMenu', 'NSMatrix',
+ 'NSLevelIndicatorCell', 'NSLevelIndicator', 'NSLayoutManager',
+ 'NSInputServer', 'NSInputManager', 'NSImageView', 'NSImageRep',
+ 'NSImageCell', 'NSImage', 'NSHelpManager', 'NSGraphicsContext',
+ 'NSGradient', 'NSGlyphInfo', 'NSGlyphGenerator', 'NSFormCell',
+ 'NSForm', 'NSFontPanel', 'NSFontManager', 'NSFontDescriptor',
+ 'NSFont', 'NSFileWrapper', 'NSEvent', 'NSEPSImageRep', 'NSDrawer',
+ 'NSDocumentController', 'NSDocument', 'NSDockTile',
+ 'NSDictionaryController', 'NSDatePickerCell', 'NSDatePicker',
+ 'NSCustomImageRep', 'NSCursor', 'NSController', 'NSControl',
+ 'NSComboBoxCell', 'NSComboBox', 'NSColorWell', 'NSColorSpace',
+ 'NSColorPicker', 'NSColorPanel', 'NSColorList', 'NSColor',
+ 'NSCollectionViewItem', 'NSCollectionView', 'NSClipView',
+ 'NSCIImageRep', 'NSCell', 'NSCachedImageRep', 'NSButtonCell',
+ 'NSButton', 'NSBrowserCell', 'NSBrowser', 'NSBox',
+ 'NSBitmapImageRep', 'NSBezierPath', 'NSATSTypesetter',
+ 'NSArrayController', 'NSApplication', 'NSAnimationContext',
+ 'NSAnimation', 'NSAlert', 'NSActionCell'
+ ),
+ // AppKit protocols
+ 8 => array(
+ 'NSWindowScripting', 'NSValidatedUserInterfaceItem',
+ 'NSUserInterfaceValidations', 'NSToolTipOwner',
+ 'NSToolbarItemValidation', 'NSTextInput',
+ 'NSTableDataSource', 'NSServicesRequests',
+ 'NSPrintPanelAccessorizing', 'NSPlaceholders',
+ 'NSPathControlDelegate', 'NSPathCellDelegate',
+ 'NSOutlineViewDataSource', 'NSNibAwaking', 'NSMenuValidation',
+ 'NSKeyValueBindingCreation', 'NSInputServiceProvider',
+ 'NSInputServerMouseTracker', 'NSIgnoreMisspelledWords',
+ 'NSGlyphStorage', 'NSFontPanelValidation', 'NSEditorRegistration',
+ 'NSEditor', 'NSDraggingSource', 'NSDraggingInfo',
+ 'NSDraggingDestination', 'NSDictionaryControllerKeyValuePair',
+ 'NSComboBoxDataSource', 'NSComboBoxCellDataSource',
+ 'NSColorPickingDefault', 'NSColorPickingCustom', 'NSChangeSpelling',
+ 'NSAnimatablePropertyContainer', 'NSAccessibility'
+ ),
+ // CoreData classes
+ 9 => array(
+ 'NSRelationshipDescription', 'NSPropertyMapping',
+ 'NSPropertyDescription', 'NSPersistentStoreCoordinator',
+ 'NSPersistentStore', 'NSMigrationManager', 'NSMappingModel',
+ 'NSManagedObjectModel', 'NSManagedObjectID',
+ 'NSManagedObjectContext', 'NSManagedObject',
+ 'NSFetchRequestExpression', 'NSFetchRequest',
+ 'NSFetchedPropertyDescription', 'NSEntityMigrationPolicy',
+ 'NSEntityMapping', 'NSEntityDescription', 'NSAttributeDescription',
+ 'NSAtomicStoreCacheNode', 'NSAtomicStore'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '{', '}', '[', ']', '=', '+', '-', '*', '/', '!', '%', '^', '&', ':'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => true,
+ 1 => true,
+ 2 => true,
+ 3 => true,
+ 4 => true,
+ 5 => true,
+ 6 => true,
+ 7 => true,
+ 8 => true,
+ 9 => true
+ ),
+ // Define the colors for the groups listed above
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #a61390;', // Objective-C keywords
+ 2 => 'color: #a61390;', // Macros and constants
+ 3 => 'color: #a61390;', // C standard library functions
+ 4 => 'color: #a61390;', // data types
+ 5 => 'color: #400080;', // Foundation classes
+ 6 => 'color: #2a6f76;', // Foundation protocols
+ 7 => 'color: #400080;', // AppKit classes
+ 8 => 'color: #2a6f76;', // AppKit protocols
+ 9 => 'color: #400080;' // CoreData classes
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #6e371a;', // Preprocessor directives
+ 2 => 'color: #11740a; font-style: italic;', // Normal C single-line comments
+ 3 => 'color: #bf1d1a;', // Q-sign in front of Strings
+ 'MULTI' => 'color: #11740a; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #2400d9;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #002200;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #bf1d1a;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #2400d9;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #002200;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => 'http://www.opengroup.org/onlinepubs/009695399/functions/{FNAME}.html',
+ 4 => '',
+ 5 => 'http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/{FNAME}_Class/',
+ 6 => 'http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Protocols/{FNAME}_Protocol/',
+ 7 => 'http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/Classes/{FNAME}_Class/',
+ 8 => 'http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/Protocols/{FNAME}_Protocol/',
+ 9 => 'http://developer.apple.com/documentation/Cocoa/Reference/CoreDataFramework/Classes/{FNAME}_Class/'
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/ocaml-brief.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/ocaml-brief.php
new file mode 100644
index 000000000..c26a334de
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/ocaml-brief.php
@@ -0,0 +1,111 @@
+<?php
+/*************************************************************************************
+ * ocaml.php
+ * ----------
+ * Author: Flaie (fireflaie@gmail.com)
+ * Copyright: (c) 2005 Flaie, Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2005/08/27
+ *
+ * OCaml (Objective Caml) language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2005/08/27 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2005/08/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'OCaml (brief)',
+ 'COMMENT_SINGLE' => array(),
+ 'COMMENT_MULTI' => array('(*' => '*)'),
+ 'CASE_KEYWORDS' => 0,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => "",
+ 'KEYWORDS' => array(
+ /* main OCaml keywords */
+ 1 => array(
+ 'and', 'as', 'asr', 'begin', 'class', 'closed', 'constraint', 'do', 'done', 'downto', 'else',
+ 'end', 'exception', 'external', 'failwith', 'false', 'flush', 'for', 'fun', 'function', 'functor',
+ 'if', 'in', 'include', 'inherit', 'incr', 'land', 'let', 'load', 'los', 'lsl', 'lsr', 'lxor',
+ 'match', 'method', 'mod', 'module', 'mutable', 'new', 'not', 'of', 'open', 'option', 'or', 'parser',
+ 'private', 'ref', 'rec', 'raise', 'regexp', 'sig', 'struct', 'stdout', 'stdin', 'stderr', 'then',
+ 'to', 'true', 'try', 'type', 'val', 'virtual', 'when', 'while', 'with'
+ )
+ ),
+ /* highlighting symbols is really important in OCaml */
+ 'SYMBOLS' => array(
+ ';', '!', ':', '.', '=', '%', '^', '*', '-', '/', '+',
+ '>', '<', '(', ')', '[', ']', '&', '|', '#', "'"
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #06c; font-weight: bold;' /* nice blue */
+ ),
+ 'COMMENTS' => array(
+ 'MULTI' => 'color: #5d478b; font-style: italic;' /* light purple */
+ ),
+ 'ESCAPE_CHAR' => array(
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #6c6;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #3cb371;' /* nice green */
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #c6c;' /* pink */
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #060;' /* dark green */
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #a52a2a;' /* maroon */
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/ocaml.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/ocaml.php
new file mode 100644
index 000000000..505149c31
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/ocaml.php
@@ -0,0 +1,174 @@
+<?php
+/*************************************************************************************
+ * ocaml.php
+ * ----------
+ * Author: Flaie (fireflaie@gmail.com)
+ * Copyright: (c) 2005 Flaie, Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2005/08/27
+ *
+ * OCaml (Objective Caml) language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/03/29 (1.0.7.22)
+ * - Fixed warnings resulting from missing style information
+ * 2005/08/27 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2005/08/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'OCaml',
+ 'COMMENT_SINGLE' => array(),
+ 'COMMENT_MULTI' => array('(*' => '*)'),
+ 'CASE_KEYWORDS' => 0,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => "",
+ 'KEYWORDS' => array(
+ /* main OCaml keywords */
+ 1 => array(
+ 'and', 'as', 'asr', 'begin', 'class', 'closed', 'constraint', 'do', 'done', 'downto', 'else',
+ 'end', 'exception', 'external', 'failwith', 'false', 'for', 'fun', 'function', 'functor',
+ 'if', 'in', 'include', 'inherit', 'incr', 'land', 'let', 'load', 'los', 'lsl', 'lsr', 'lxor',
+ 'match', 'method', 'mod', 'module', 'mutable', 'new', 'not', 'of', 'open', 'option', 'or', 'parser',
+ 'private', 'ref', 'rec', 'raise', 'regexp', 'sig', 'struct', 'stdout', 'stdin', 'stderr', 'then',
+ 'to', 'true', 'try', 'type', 'val', 'virtual', 'when', 'while', 'with'
+ ),
+ /* define names of main librarys, so we can link to it */
+ 2 => array(
+ 'Arg', 'Arith_status', 'Array', 'ArrayLabels', 'Big_int', 'Bigarray', 'Buffer', 'Callback',
+ 'CamlinternalOO', 'Char', 'Complex', 'Condition', 'Dbm', 'Digest', 'Dynlink', 'Event',
+ 'Filename', 'Format', 'Gc', 'Genlex', 'Graphics', 'GraphicsX11', 'Hashtbl', 'Int32', 'Int64',
+ 'Lazy', 'Lexing', 'List', 'ListLabels', 'Map', 'Marshal', 'MoreLabels', 'Mutex', 'Nativeint',
+ 'Num', 'Obj', 'Oo', 'Parsing', 'Pervasives', 'Printexc', 'Printf', 'Queue', 'Random', 'Scanf',
+ 'Set', 'Sort', 'Stack', 'StdLabels', 'Str', 'Stream', 'String', 'StringLabels', 'Sys', 'Thread',
+ 'ThreadUnix', 'Tk'
+ ),
+ /* just link to the Pervasives functions library, cause it's the default opened library when starting OCaml */
+ 3 => array(
+ 'abs', 'abs_float', 'acos', 'asin', 'at_exit', 'atan', 'atan2',
+ 'bool_of_string', 'ceil', 'char_of_int', 'classify_float',
+ 'close_in', 'close_in_noerr', 'close_out', 'close_out_noerr',
+ 'compare', 'cos', 'cosh', 'decr', 'epsilon_float', 'exit', 'exp',
+ 'float', 'float_of_int', 'float_of_string', 'floor', 'flush',
+ 'flush_all', 'format_of_string', 'frexp', 'fst', 'ignore',
+ 'in_channel_length', 'infinity', 'input', 'input_binary_int',
+ 'input_byte', 'input_char', 'input_line', 'input_value',
+ 'int_of_char', 'int_of_float', 'int_of_string', 'invalid_arg',
+ 'ldexp', 'log', 'log10', 'max', 'max_float', 'max_int', 'min',
+ 'min_float', 'min_int', 'mod_float', 'modf', 'nan', 'open_in',
+ 'open_in_bin', 'open_in_gen', 'open_out', 'open_out_bin',
+ 'open_out_gen', 'out_channel_length', 'output', 'output_binary_int',
+ 'output_byte', 'output_char', 'output_string', 'output_value',
+ 'pos_in', 'pos_out', 'pred', 'prerr_char', 'prerr_endline',
+ 'prerr_float', 'prerr_int', 'prerr_newline', 'prerr_string',
+ 'print_char', 'print_endline', 'print_float', 'print_int',
+ 'print_newline', 'print_string', 'read_float', 'read_int',
+ 'read_line', 'really_input', 'seek_in', 'seek_out',
+ 'set_binary_mode_in', 'set_binary_mode_out', 'sin', 'sinh', 'snd',
+ 'sqrt', 'string_of_bool', 'string_of_float', 'string_of_format',
+ 'string_of_int', 'succ', 'tan', 'tanh', 'truncate'
+ ),
+ /* here Pervasives Types */
+ 4 => array (
+ 'fpclass', 'in_channel', 'out_channel', 'open_flag', 'Sys_error', 'format'
+ ),
+ /* finally Pervasives Exceptions */
+ 5 => array (
+ 'Exit', 'Invalid_Argument', 'Failure', 'Division_by_zero'
+ )
+ ),
+ /* highlighting symbols is really important in OCaml */
+ 'SYMBOLS' => array(
+ ';', '!', ':', '.', '=', '%', '^', '*', '-', '/', '+',
+ '>', '<', '(', ')', '[', ']', '&', '|', '#', "'"
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => true, /* functions name are case sensitive */
+ 3 => true, /* types name too */
+ 4 => true, /* pervasives types */
+ 5 => true /* pervasives exceptions */
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #06c; font-weight: bold;', /* nice blue */
+ 2 => 'color: #06c; font-weight: bold;', /* nice blue */
+ 3 => 'color: #06c; font-weight: bold;', /* nice blue */
+ 4 => 'color: #06c; font-weight: bold;', /* nice blue */
+ 5 => 'color: #06c; font-weight: bold;' /* nice blue */
+ ),
+ 'COMMENTS' => array(
+ 'MULTI' => 'color: #5d478b; font-style: italic;' /* light purple */
+ ),
+ 'ESCAPE_CHAR' => array(
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #6c6;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #3cb371;' /* nice green */
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #c6c;' /* pink */
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #060;' /* dark green */
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #a52a2a;' /* maroon */
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ /* some of keywords are Pervasives functions (land, lxor, asr, ...) */
+ 1 => '',
+ /* link to the wanted library */
+ 2 => 'http://caml.inria.fr/pub/docs/manual-ocaml/libref/{FNAME}.html',
+ /* link to Pervasives functions */
+ 3 => 'http://caml.inria.fr/pub/docs/manual-ocaml/libref/Pervasives.html#VAL{FNAME}',
+ /* link to Pervasives type */
+ 4 => 'http://caml.inria.fr/pub/docs/manual-ocaml/libref/Pervasives.html#TYPE{FNAME}',
+ /* link to Pervasives exceptions */
+ 5 => 'http://caml.inria.fr/pub/docs/manual-ocaml/libref/Pervasives.html#EXCEPTION{FNAME}'
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/oobas.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/oobas.php
new file mode 100644
index 000000000..b4f95512a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/oobas.php
@@ -0,0 +1,135 @@
+<?php
+/*************************************************************************************
+ * oobas.php
+ * ---------
+ * Author: Roberto Rossi (rsoftware@altervista.org)
+ * Copyright: (c) 2004 Roberto Rossi (http://rsoftware.altervista.org), Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/08/30
+ *
+ * OpenOffice.org Basic language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * 2004/11/27 (1.0.1)
+ * - Added support for multiple object splitters
+ * 2004/10/27 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'OpenOffice.org Basic',
+ 'COMMENT_SINGLE' => array(1 => "'"),
+ 'COMMENT_MULTI' => array(),
+ //Single-Line comments using REM keyword
+ 'COMMENT_REGEXP' => array(2 => '/\bREM.*?$/i'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'dim','private','public','global','as','if','redim','true','set','byval',
+ 'false','bool','double','integer','long','object','single','variant',
+ 'msgbox','print','inputbox','green','blue','red','qbcolor',
+ 'rgb','open','close','reset','freefile','get','input','line',
+ 'put','write','loc','seek','eof','lof','chdir','chdrive',
+ 'curdir','dir','fileattr','filecopy','filedatetime','fileexists',
+ 'filelen','getattr','kill','mkdir','name','rmdir','setattr',
+ 'dateserial','datevalue','day','month','weekday','year','cdatetoiso',
+ 'cdatefromiso','hour','minute','second','timeserial','timevalue',
+ 'date','now','time','timer','erl','err','error','on','goto','resume',
+ 'and','eqv','imp','not','or','xor','mod','atn','cos','sin','tan','log',
+ 'exp','rnd','randomize','sqr','fix','int','abs','sgn','hex','oct',
+ 'it','then','else','select','case','iif','do','loop','for','next','to',
+ 'while','wend','gosub','return','call','choose','declare',
+ 'end','exit','freelibrary','function','rem','stop','sub','switch','with',
+ 'cbool','cdate','cdbl','cint','clng','const','csng','cstr','defbool',
+ 'defdate','defdbl','defint','deflng','asc','chr','str','val','cbyte',
+ 'space','string','format','lcase','left','lset','ltrim','mid','right',
+ 'rset','rtrim','trim','ucase','split','join','converttourl','convertfromurl',
+ 'instr','len','strcomp','beep','shell','wait','getsystemticks','environ',
+ 'getsolarversion','getguitype','twipsperpixelx','twipsperpixely',
+ 'createunostruct','createunoservice','getprocessservicemanager',
+ 'createunodialog','createunolistener','createunovalue','thiscomponent',
+ 'globalscope'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '='
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #b1b100;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080;',
+ 2 => 'color: #808080;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #006600;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099;'
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/oracle11.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/oracle11.php
new file mode 100644
index 000000000..e5417d7d0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/oracle11.php
@@ -0,0 +1,614 @@
+<?php
+/*************************************************************************************
+ * oracle11.php
+ * -----------
+ * Author: Guy Wicks (Guy.Wicks@rbs.co.uk)
+ * Contributions:
+ * - Updated for 11i by Simon Redhead
+ * Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/06/04
+ *
+ * Oracle 11i language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/04/08 (1.0.8)
+ * - SR changes to oracle8.php to support Oracle 11i reserved words.
+ * 2005/01/29 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Oracle 11 SQL',
+ 'COMMENT_SINGLE' => array(1 => '--'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_UPPER,
+ 'QUOTEMARKS' => array("'", '"', '`'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+//Put your package names here - e.g. select distinct ''''|| lower(name) || ''',' from user_source;
+// 6 => array(
+// ),
+
+//Put your table names here - e.g. select distinct ''''|| lower(table_name) || ''',' from user_tables;
+// 5 => array(
+// ),
+
+//Put your view names here - e.g. select distinct ''''|| lower(view_name) || ''',' from user_views;
+// 4 => array(
+// ),
+
+//Put your table field names here - e.g. select distinct ''''|| lower(column_name) || ''',' from user_tab_columns;
+// 3 => array(
+// ),
+
+ //Put ORACLE reserved keywords here (11i). I like mine uppercase.
+ 1 => array(
+ 'ABS',
+ 'ACCESS',
+ 'ACOS',
+ 'ADD',
+ 'ADD_MONTHS',
+ 'ALL',
+ 'ALTER',
+ 'ANALYZE',
+ 'AND',
+ 'ANY',
+ 'APPENDCHILDXML',
+ 'ARRAY',
+ 'AS',
+ 'ASC',
+ 'ASCII',
+ 'ASCIISTR',
+ 'ASIN',
+ 'ASSOCIATE',
+ 'AT',
+ 'ATAN',
+ 'ATAN2',
+ 'AUDIT',
+ 'AUTHID',
+ 'AVG',
+ 'BEGIN',
+ 'BETWEEN',
+ 'BFILENAME',
+ 'BIN_TO_NUM',
+ 'BINARY_INTEGER',
+ 'BITAND',
+ 'BODY',
+ 'BOOLEAN',
+ 'BULK',
+ 'BY',
+ 'CALL',
+ 'CARDINALITY',
+ 'CASCADE',
+ 'CASE',
+ 'CAST',
+ 'CEIL',
+ 'CHAR',
+ 'CHAR_BASE',
+ 'CHARTOROWID',
+ 'CHECK',
+ 'CHR',
+ 'CLOSE',
+ 'CLUSTER',
+ 'CLUSTER_ID',
+ 'CLUSTER_PROBABILITY',
+ 'CLUSTER_SET',
+ 'COALESCE',
+ 'COLLECT',
+ 'COLUMN',
+ 'COMMENT',
+ 'COMMIT',
+ 'COMPOSE',
+ 'COMPRESS',
+ 'CONCAT',
+ 'CONNECT',
+ 'CONSTANT',
+ 'CONSTRAINT',
+ 'CONSTRAINTS',
+ 'CONTEXT',
+ 'CONTROLFILE',
+ 'CONVERT',
+ 'CORR',
+ 'CORR_K',
+ 'CORR_S',
+ 'COS',
+ 'COSH',
+ 'COST',
+ 'COUNT',
+ 'COVAR_POP',
+ 'COVAR_SAMP',
+ 'CREATE',
+ 'CUBE_TABLE',
+ 'CUME_DIST',
+ 'CURRENT',
+ 'CURRENT_DATE',
+ 'CURRENT_TIMESTAMP',
+ 'CURRVAL',
+ 'CURSOR',
+ 'CV',
+ 'DATABASE',
+ 'DATAOBJ_TO_PARTITION',
+ 'DATE',
+ 'DAY',
+ 'DBTIMEZONE',
+ 'DECIMAL',
+ 'DECLARE',
+ 'DECODE',
+ 'DECOMPOSE',
+ 'DEFAULT',
+ 'DELETE',
+ 'DELETEXML',
+ 'DENSE_RANK',
+ 'DEPTH',
+ 'DEREF',
+ 'DESC',
+ 'DIMENSION',
+ 'DIRECTORY',
+ 'DISASSOCIATE',
+ 'DISTINCT',
+ 'DO',
+ 'DROP',
+ 'DUMP',
+ 'ELSE',
+ 'ELSIF',
+ 'EMPTY_BLOB',
+ 'EMPTY_CLOB',
+ 'END',
+ 'EXCEPTION',
+ 'EXCLUSIVE',
+ 'EXEC',
+ 'EXECUTE',
+ 'EXISTS',
+ 'EXISTSNODE',
+ 'EXIT',
+ 'EXP',
+ 'EXPLAIN',
+ 'EXTENDS',
+ 'EXTRACT',
+ 'EXTRACTVALUE',
+ 'FALSE',
+ 'FEATURE_ID',
+ 'FEATURE_SET',
+ 'FEATURE_VALUE',
+ 'FETCH',
+ 'FILE',
+ 'FIRST',
+ 'FIRST_VALUE',
+ 'FLOAT',
+ 'FLOOR',
+ 'FOR',
+ 'FORALL',
+ 'FROM',
+ 'FROM_TZ',
+ 'FUNCTION',
+ 'GOTO',
+ 'GRANT',
+ 'GREATEST',
+ 'GROUP',
+ 'GROUP_ID',
+ 'GROUPING',
+ 'GROUPING_ID',
+ 'HAVING',
+ 'HEAP',
+ 'HEXTORAW',
+ 'HOUR',
+ 'IDENTIFIED',
+ 'IF',
+ 'IMMEDIATE',
+ 'IN',
+ 'INCREMENT',
+ 'INDEX',
+ 'INDEXTYPE',
+ 'INDICATOR',
+ 'INITCAP',
+ 'INITIAL',
+ 'INSERT',
+ 'INSERTCHILDXML',
+ 'INSERTXMLBEFORE',
+ 'INSTR',
+ 'INSTRB',
+ 'INTEGER',
+ 'INTERFACE',
+ 'INTERSECT',
+ 'INTERVAL',
+ 'INTO',
+ 'IS',
+ 'ISOLATION',
+ 'ITERATION_NUMBER',
+ 'JAVA',
+ 'KEY',
+ 'LAG',
+ 'LAST',
+ 'LAST_DAY',
+ 'LAST_VALUE',
+ 'LEAD',
+ 'LEAST',
+ 'LENGTH',
+ 'LENGTHB',
+ 'LEVEL',
+ 'LIBRARY',
+ 'LIKE',
+ 'LIMITED',
+ 'LINK',
+ 'LN',
+ 'LNNVL',
+ 'LOCALTIMESTAMP',
+ 'LOCK',
+ 'LOG',
+ 'LONG',
+ 'LOOP',
+ 'LOWER',
+ 'LPAD',
+ 'LTRIM',
+ 'MAKE_REF',
+ 'MATERIALIZED',
+ 'MAX',
+ 'MAXEXTENTS',
+ 'MEDIAN',
+ 'MIN',
+ 'MINUS',
+ 'MINUTE',
+ 'MLSLABEL',
+ 'MOD',
+ 'MODE',
+ 'MODIFY',
+ 'MONTH',
+ 'MONTHS_BETWEEN',
+ 'NANVL',
+ 'NATURAL',
+ 'NATURALN',
+ 'NCHR',
+ 'NEW',
+ 'NEW_TIME',
+ 'NEXT_DAY',
+ 'NEXTVAL',
+ 'NLS_CHARSET_DECL_LEN',
+ 'NLS_CHARSET_ID',
+ 'NLS_CHARSET_NAME',
+ 'NLS_INITCAP',
+ 'NLS_LOWER',
+ 'NLS_UPPER',
+ 'NLSSORT',
+ 'NOAUDIT',
+ 'NOCOMPRESS',
+ 'NOCOPY',
+ 'NOT',
+ 'NOWAIT',
+ 'NTILE',
+ 'NULL',
+ 'NULLIF',
+ 'NUMBER',
+ 'NUMBER_BASE',
+ 'NUMTODSINTERVAL',
+ 'NUMTOYMINTERVAL',
+ 'NVL',
+ 'NVL2',
+ 'OCIROWID',
+ 'OF',
+ 'OFFLINE',
+ 'ON',
+ 'ONLINE',
+ 'OPAQUE',
+ 'OPEN',
+ 'OPERATOR',
+ 'OPTION',
+ 'OR',
+ 'ORA_HASH',
+ 'ORDER',
+ 'ORGANIZATION',
+ 'OTHERS',
+ 'OUT',
+ 'OUTLINE',
+ 'PACKAGE',
+ 'PARTITION',
+ 'PATH',
+ 'PCTFREE',
+ 'PERCENT_RANK',
+ 'PERCENTILE_CONT',
+ 'PERCENTILE_DISC',
+ 'PLAN',
+ 'PLS_INTEGER',
+ 'POSITIVE',
+ 'POSITIVEN',
+ 'POWER',
+ 'POWERMULTISET',
+ 'POWERMULTISET_BY_CARDINALITY',
+ 'PRAGMA',
+ 'PREDICTION',
+ 'PREDICTION_BOUNDS',
+ 'PREDICTION_COST',
+ 'PREDICTION_DETAILS',
+ 'PREDICTION_PROBABILITY',
+ 'PREDICTION_SET',
+ 'PRESENTNNV',
+ 'PRESENTV',
+ 'PREVIOUS',
+ 'PRIMARY',
+ 'PRIOR',
+ 'PRIVATE',
+ 'PRIVILEGES',
+ 'PROCEDURE',
+ 'PROFILE',
+ 'PUBLIC',
+ 'RAISE',
+ 'RANGE',
+ 'RANK',
+ 'RATIO_TO_REPORT',
+ 'RAW',
+ 'RAWTOHEX',
+ 'RAWTONHEX',
+ 'REAL',
+ 'RECORD',
+ 'REF',
+ 'REFTOHEX',
+ 'REGEXP_COUNT',
+ 'REGEXP_INSTR',
+ 'REGEXP_REPLACE',
+ 'REGEXP_SUBSTR',
+ 'REGR_AVGX',
+ 'REGR_AVGY',
+ 'REGR_COUNT',
+ 'REGR_INTERCEPT',
+ 'REGR_R2',
+ 'REGR_SLOPE',
+ 'REGR_SXX',
+ 'REGR_SXY',
+ 'REGR_SYY',
+ 'RELEASE',
+ 'REMAINDER',
+ 'RENAME',
+ 'REPLACE',
+ 'RESOURCE',
+ 'RETURN',
+ 'RETURNING',
+ 'REVERSE',
+ 'REVOKE',
+ 'ROLE',
+ 'ROLLBACK',
+ 'ROUND',
+ 'ROW',
+ 'ROW_NUMBER',
+ 'ROWID',
+ 'ROWIDTOCHAR',
+ 'ROWIDTONCHAR',
+ 'ROWNUM',
+ 'ROWS',
+ 'ROWTYPE',
+ 'RPAD',
+ 'RTRIM',
+ 'SAVEPOINT',
+ 'SCHEMA',
+ 'SCN_TO_TIMESTAMP',
+ 'SECOND',
+ 'SEGMENT',
+ 'SELECT',
+ 'SEPERATE',
+ 'SEQUENCE',
+ 'SESSION',
+ 'SESSIONTIMEZONE',
+ 'SET',
+ 'SHARE',
+ 'SIGN',
+ 'SIN',
+ 'SINH',
+ 'SIZE',
+ 'SMALLINT',
+ 'SOUNDEX',
+ 'SPACE',
+ 'SQL',
+ 'SQLCODE',
+ 'SQLERRM',
+ 'SQRT',
+ 'START',
+ 'STATISTICS',
+ 'STATS_BINOMIAL_TEST',
+ 'STATS_CROSSTAB',
+ 'STATS_F_TEST',
+ 'STATS_KS_TEST',
+ 'STATS_MODE',
+ 'STATS_MW_TEST',
+ 'STATS_ONE_WAY_ANOVA',
+ 'STATS_T_TEST_INDEP',
+ 'STATS_T_TEST_INDEPU',
+ 'STATS_T_TEST_ONE',
+ 'STATS_T_TEST_PAIRED',
+ 'STATS_WSR_TEST',
+ 'STDDEV',
+ 'STDDEV_POP',
+ 'STDDEV_SAMP',
+ 'STOP',
+ 'SUBSTR',
+ 'SUBSTRB',
+ 'SUBTYPE',
+ 'SUCCESSFUL',
+ 'SUM',
+ 'SYNONYM',
+ 'SYS_CONNECT_BY_PATH',
+ 'SYS_CONTEXT',
+ 'SYS_DBURIGEN',
+ 'SYS_EXTRACT_UTC',
+ 'SYS_GUID',
+ 'SYS_TYPEID',
+ 'SYS_XMLAGG',
+ 'SYS_XMLGEN',
+ 'SYSDATE',
+ 'SYSTEM',
+ 'SYSTIMESTAMP',
+ 'TABLE',
+ 'TABLESPACE',
+ 'TAN',
+ 'TANH',
+ 'TEMPORARY',
+ 'THEN',
+ 'TIME',
+ 'TIMESTAMP',
+ 'TIMESTAMP_TO_SCN',
+ 'TIMEZONE_ABBR',
+ 'TIMEZONE_HOUR',
+ 'TIMEZONE_MINUTE',
+ 'TIMEZONE_REGION',
+ 'TIMING',
+ 'TO',
+ 'TO_BINARY_DOUBLE',
+ 'TO_BINARY_FLOAT',
+ 'TO_CHAR',
+ 'TO_CLOB',
+ 'TO_DATE',
+ 'TO_DSINTERVAL',
+ 'TO_LOB',
+ 'TO_MULTI_BYTE',
+ 'TO_NCHAR',
+ 'TO_NCLOB',
+ 'TO_NUMBER',
+ 'TO_SINGLE_BYTE',
+ 'TO_TIMESTAMP',
+ 'TO_TIMESTAMP_TZ',
+ 'TO_YMINTERVAL',
+ 'TRANSACTION',
+ 'TRANSLATE',
+ 'TREAT',
+ 'TRIGGER',
+ 'TRIM',
+ 'TRUE',
+ 'TRUNC',
+ 'TRUNCATE',
+ 'TYPE',
+ 'TZ_OFFSET',
+ 'UI',
+ 'UID',
+ 'UNION',
+ 'UNIQUE',
+ 'UNISTR',
+ 'UPDATE',
+ 'UPDATEXML',
+ 'UPPER',
+ 'USE',
+ 'USER',
+ 'USERENV',
+ 'USING',
+ 'VALIDATE',
+ 'VALUE',
+ 'VALUES',
+ 'VAR_POP',
+ 'VAR_SAMP',
+ 'VARCHAR',
+ 'VARCHAR2',
+ 'VARIANCE',
+ 'VIEW',
+ 'VSIZE',
+ 'WHEN',
+ 'WHENEVER',
+ 'WHERE',
+ 'WHILE',
+ 'WIDTH_BUCKET',
+ 'WITH',
+ 'WORK',
+ 'WRITE',
+ 'XMLAGG',
+ 'XMLCAST',
+ 'XMLCDATA',
+ 'XMLCOLATTVAL',
+ 'XMLCOMMENT',
+ 'XMLCONCAT',
+ 'XMLDIFF',
+ 'XMLELEMENT',
+ 'XMLEXISTS',
+ 'XMLFOREST',
+ 'XMLPARSE',
+ 'XMLPATCH',
+ 'XMLPI',
+ 'XMLQUERY',
+ 'XMLROOT',
+ 'XMLSEQUENCE',
+ 'XMLSERIALIZE',
+ 'XMLTABLE',
+ 'XMLTRANSFORM',
+ 'YEAR',
+ 'ZONE'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '=', '<', '>', '|', '+', '-', '*', '/', ','
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+// 3 => false,
+// 4 => false,
+// 5 => false,
+// 6 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #993333; font-weight: bold; text-transform: uppercase;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080; font-style: italic;',
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #ff0000;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+// 3 => '',
+// 4 => '',
+// 5 => '',
+// 6 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/oracle8.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/oracle8.php
new file mode 100644
index 000000000..d216db0a1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/oracle8.php
@@ -0,0 +1,496 @@
+<?php
+/*************************************************************************************
+ * oracle8.php
+ * -----------
+ * Author: Guy Wicks (Guy.Wicks@rbs.co.uk)
+ * Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/06/04
+ *
+ * Oracle 8 language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2005/01/29 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Oracle 8 SQL',
+ 'COMMENT_SINGLE' => array(1 => '--'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_UPPER,
+ 'QUOTEMARKS' => array("'", '"', '`'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+//Put your package names here - e.g. select distinct ''''|| lower(name) || ''',' from user_source;
+// 6 => array(
+// ),
+
+//Put your table names here - e.g. select distinct ''''|| lower(table_name) || ''',' from user_tables;
+// 5 => array(
+// ),
+
+//Put your view names here - e.g. select distinct ''''|| lower(view_name) || ''',' from user_views;
+// 4 => array(
+// ),
+
+//Put your table field names here - e.g. select distinct ''''|| lower(column_name) || ''',' from user_tab_columns;
+// 3 => array(
+// ),
+
+//Put ORACLE reserved keywords here (8.1.7). I like mine uppercase.
+ 1 => array(
+ 'ABS',
+ 'ACCESS',
+ 'ACOS',
+ 'ADD',
+ 'ADD_MONTHS',
+ 'ALL',
+ 'ALTER',
+ 'ANALYZE',
+ 'AND',
+ 'ANY',
+ 'ARRAY',
+ 'AS',
+ 'ASC',
+ 'ASCII',
+ 'ASIN',
+ 'ASSOCIATE',
+ 'AT',
+ 'ATAN',
+ 'ATAN2',
+ 'AUDIT',
+ 'AUTHID',
+ 'AVG',
+ 'BEGIN',
+ 'BETWEEN',
+ 'BFILENAME',
+ 'BINARY_INTEGER',
+ 'BITAND',
+ 'BODY',
+ 'BOOLEAN',
+ 'BULK',
+ 'BY',
+ 'CALL',
+ 'CASCADE',
+ 'CASE',
+ 'CEIL',
+ 'CHAR',
+ 'CHAR_BASE',
+ 'CHARTOROWID',
+ 'CHECK',
+ 'CHR',
+ 'CLOSE',
+ 'CLUSTER',
+ 'COALESCE',
+ 'COLLECT',
+ 'COLUMN',
+ 'COMMENT',
+ 'COMMIT',
+ 'COMPRESS',
+ 'CONCAT',
+ 'CONNECT',
+ 'CONSTANT',
+ 'CONSTRAINT',
+ 'CONSTRAINTS',
+ 'CONTEXT',
+ 'CONTROLFILE',
+ 'CONVERT',
+ 'CORR',
+ 'COS',
+ 'COSH',
+ 'COST',
+ 'COUNT',
+ 'COVAR_POP',
+ 'COVAR_SAMP',
+ 'CREATE',
+ 'CUME_DIST',
+ 'CURRENT',
+ 'CURRVAL',
+ 'CURSOR',
+ 'DATABASE',
+ 'DATE',
+ 'DAY',
+ 'DECIMAL',
+ 'DECLARE',
+ 'DECODE',
+ 'DEFAULT',
+ 'DELETE',
+ 'DENSE_RANK',
+ 'DEREF',
+ 'DESC',
+ 'DIMENSION',
+ 'DIRECTORY',
+ 'DISASSOCIATE',
+ 'DISTINCT',
+ 'DO',
+ 'DROP',
+ 'DUMP',
+ 'ELSE',
+ 'ELSIF',
+ 'EMPTY_BLOB',
+ 'EMPTY_CLOB',
+ 'END',
+ 'EXCEPTION',
+ 'EXCLUSIVE',
+ 'EXEC',
+ 'EXECUTE',
+ 'EXISTS',
+ 'EXIT',
+ 'EXP',
+ 'EXPLAIN',
+ 'EXTENDS',
+ 'EXTRACT',
+ 'FALSE',
+ 'FETCH',
+ 'FILE',
+ 'FIRST_VALUE',
+ 'FLOAT',
+ 'FLOOR',
+ 'FOR',
+ 'FORALL',
+ 'FROM',
+ 'FUNCTION',
+ 'GOTO',
+ 'GRANT',
+ 'GREATEST',
+ 'GROUP',
+ 'GROUPING',
+ 'HAVING',
+ 'HEAP',
+ 'HEXTORAW',
+ 'HOUR',
+ 'IDENTIFIED',
+ 'IF',
+ 'IMMEDIATE',
+ 'IN',
+ 'INCREMENT',
+ 'INDEX',
+ 'INDEXTYPE',
+ 'INDICATOR',
+ 'INITCAP',
+ 'INITIAL',
+ 'INSERT',
+ 'INSTR',
+ 'INSTRB',
+ 'INTEGER',
+ 'INTERFACE',
+ 'INTERSECT',
+ 'INTERVAL',
+ 'INTO',
+ 'IS',
+ 'ISOLATION',
+ 'JAVA',
+ 'KEY',
+ 'LAG',
+ 'LAST_DAY',
+ 'LAST_VALUE',
+ 'LEAD',
+ 'LEAST',
+ 'LENGTH',
+ 'LENGTHB',
+ 'LEVEL',
+ 'LIBRARY',
+ 'LIKE',
+ 'LIMITED',
+ 'LINK',
+ 'LN',
+ 'LOCK',
+ 'LOG',
+ 'LONG',
+ 'LOOP',
+ 'LOWER',
+ 'LPAD',
+ 'LTRIM',
+ 'MAKE_REF',
+ 'MATERIALIZED',
+ 'MAX',
+ 'MAXEXTENTS',
+ 'MIN',
+ 'MINUS',
+ 'MINUTE',
+ 'MLSLABEL',
+ 'MOD',
+ 'MODE',
+ 'MODIFY',
+ 'MONTH',
+ 'MONTHS_BETWEEN',
+ 'NATURAL',
+ 'NATURALN',
+ 'NEW',
+ 'NEW_TIME',
+ 'NEXT_DAY',
+ 'NEXTVAL',
+ 'NLS_CHARSET_DECL_LEN',
+ 'NLS_CHARSET_ID',
+ 'NLS_CHARSET_NAME',
+ 'NLS_INITCAP',
+ 'NLS_LOWER',
+ 'NLS_UPPER',
+ 'NLSSORT',
+ 'NOAUDIT',
+ 'NOCOMPRESS',
+ 'NOCOPY',
+ 'NOT',
+ 'NOWAIT',
+ 'NTILE',
+ 'NULL',
+ 'NULLIF',
+ 'NUMBER',
+ 'NUMBER_BASE',
+ 'NUMTODSINTERVAL',
+ 'NUMTOYMINTERVAL',
+ 'NVL',
+ 'NVL2',
+ 'OCIROWID',
+ 'OF',
+ 'OFFLINE',
+ 'ON',
+ 'ONLINE',
+ 'OPAQUE',
+ 'OPEN',
+ 'OPERATOR',
+ 'OPTION',
+ 'OR',
+ 'ORDER',
+ 'ORGANIZATION',
+ 'OTHERS',
+ 'OUT',
+ 'OUTLINE',
+ 'PACKAGE',
+ 'PARTITION',
+ 'PCTFREE',
+ 'PERCENT_RANK',
+ 'PLAN',
+ 'PLS_INTEGER',
+ 'POSITIVE',
+ 'POSITIVEN',
+ 'POWER',
+ 'PRAGMA',
+ 'PRIMARY',
+ 'PRIOR',
+ 'PRIVATE',
+ 'PRIVILEGES',
+ 'PROCEDURE',
+ 'PROFILE',
+ 'PUBLIC',
+ 'RAISE',
+ 'RANGE',
+ 'RANK',
+ 'RATIO_TO_REPORT',
+ 'RAW',
+ 'RAWTOHEX',
+ 'REAL',
+ 'RECORD',
+ 'REF',
+ 'REFTOHEX',
+ 'REGR_AVGX',
+ 'REGR_AVGY',
+ 'REGR_COUNT',
+ 'REGR_INTERCEPT',
+ 'REGR_R2',
+ 'REGR_SLOPE',
+ 'REGR_SXX',
+ 'REGR_SXY',
+ 'REGR_SYY',
+ 'RELEASE',
+ 'RENAME',
+ 'REPLACE',
+ 'RESOURCE',
+ 'RETURN',
+ 'RETURNING',
+ 'REVERSE',
+ 'REVOKE',
+ 'ROLE',
+ 'ROLLBACK',
+ 'ROUND',
+ 'ROW',
+ 'ROW_NUMBER',
+ 'ROWID',
+ 'ROWIDTOCHAR',
+ 'ROWNUM',
+ 'ROWS',
+ 'ROWTYPE',
+ 'RPAD',
+ 'RTRIM',
+ 'SAVEPOINT',
+ 'SCHEMA',
+ 'SECOND',
+ 'SEGMENT',
+ 'SELECT',
+ 'SEPERATE',
+ 'SEQUENCE',
+ 'SESSION',
+ 'SET',
+ 'SHARE',
+ 'SIGN',
+ 'SIN',
+ 'SINH',
+ 'SIZE',
+ 'SMALLINT',
+ 'SOUNDEX',
+ 'SPACE',
+ 'SQL',
+ 'SQLCODE',
+ 'SQLERRM',
+ 'SQRT',
+ 'START',
+ 'STATISTICS',
+ 'STDDEV',
+ 'STDDEV_POP',
+ 'STDDEV_SAMP',
+ 'STOP',
+ 'SUBSTR',
+ 'SUBSTRB',
+ 'SUBTYPE',
+ 'SUCCESSFUL',
+ 'SUM',
+ 'SYNONYM',
+ 'SYS_CONTEXT',
+ 'SYS_GUID',
+ 'SYSDATE',
+ 'SYSTEM',
+ 'TABLE',
+ 'TABLESPACE',
+ 'TAN',
+ 'TANH',
+ 'TEMPORARY',
+ 'THEN',
+ 'TIME',
+ 'TIMESTAMP',
+ 'TIMEZONE_ABBR',
+ 'TIMEZONE_HOUR',
+ 'TIMEZONE_MINUTE',
+ 'TIMEZONE_REGION',
+ 'TIMING',
+ 'TO',
+ 'TO_CHAR',
+ 'TO_DATE',
+ 'TO_LOB',
+ 'TO_MULTI_BYTE',
+ 'TO_NUMBER',
+ 'TO_SINGLE_BYTE',
+ 'TRANSACTION',
+ 'TRANSLATE',
+ 'TRIGGER',
+ 'TRIM',
+ 'TRUE',
+ 'TRUNC',
+ 'TRUNCATE',
+ 'TYPE',
+ 'UI',
+ 'UID',
+ 'UNION',
+ 'UNIQUE',
+ 'UPDATE',
+ 'UPPER',
+ 'USE',
+ 'USER',
+ 'USERENV',
+ 'USING',
+ 'VALIDATE',
+ 'VALUE',
+ 'VALUES',
+ 'VAR_POP',
+ 'VAR_SAMP',
+ 'VARCHAR',
+ 'VARCHAR2',
+ 'VARIANCE',
+ 'VIEW',
+ 'VSIZE',
+ 'WHEN',
+ 'WHENEVER',
+ 'WHERE',
+ 'WHILE',
+ 'WITH',
+ 'WORK',
+ 'WRITE',
+ 'YEAR',
+ 'ZONE'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '=', '<', '>', '|', '+', '-', '*', '/', ','
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+// 3 => false,
+// 4 => false,
+// 5 => false,
+// 6 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #993333; font-weight: bold; text-transform: uppercase;'
+//Add the styles for groups 3-6 here when used
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #ff0000;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+// 3 => '',
+// 4 => '',
+// 5 => '',
+// 6 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/pascal.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/pascal.php
new file mode 100644
index 000000000..01a66bfa0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/pascal.php
@@ -0,0 +1,152 @@
+<?php
+/*************************************************************************************
+ * pascal.php
+ * ----------
+ * Author: Tux (tux@inamil.cz)
+ * Copyright: (c) 2004 Tux (http://tux.a4.cz/), Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/07/26
+ *
+ * Pascal language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * 2004/11/27 (1.0.2)
+ * - Added support for multiple object splitters
+ * 2004/10/27 (1.0.1)
+ * - Added support for URLs
+ * 2004/08/05 (1.0.0)
+ * - Added support for symbols
+ * 2004/07/27 (0.9.1)
+ * - Pascal is OO language. Some new words.
+ * 2004/07/26 (0.9.0)
+ * - First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Pascal',
+ 'COMMENT_SINGLE' => array(1 => '//'),
+ 'COMMENT_MULTI' => array('{' => '}','(*' => '*)'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'HARDQUOTE' => array("'", "'"),
+ 'HARDESCAPE' => array("''"),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'absolute','asm','assembler','begin','break','case','catch','cdecl',
+ 'const','constructor','default','destructor','div','do','downto',
+ 'else','end','except','export','exports','external','far',
+ 'finalization','finally','for','forward','function','goto','if',
+ 'implementation','in','index','inherited','initialization','inline',
+ 'interface','interrupt','label','library','mod','name','not','of',
+ 'or','overload','override','private','procedure','program',
+ 'property','protected','public','published','raise','repeat',
+ 'resourcestring','shl','shr','stdcall','stored','switch','then',
+ 'to','try','type','unit','until','uses','var','while','xor'
+ ),
+ 2 => array(
+ 'nil', 'false', 'true',
+ ),
+ 3 => array(
+ 'abs','and','arc','arctan','blockread','blockwrite','chr','dispose',
+ 'cos','eof','eoln','exp','get','ln','new','odd','ord','ordinal',
+ 'pred','read','readln','sin','sqrt','succ','write','writeln'
+ ),
+ 4 => array(
+ 'ansistring','array','boolean','byte','bytebool','char','file',
+ 'integer','longbool','longint','object','packed','pointer','real',
+ 'record','set','shortint','smallint','string','union','word'
+ ),
+ ),
+ 'SYMBOLS' => array(
+ ',', ':', '=', '+', '-', '*', '/'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #000000; font-weight: bold;',
+ 2 => 'color: #000000; font-weight: bold;',
+ 3 => 'color: #000066;',
+ 4 => 'color: #000066; font-weight: bold;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #666666; font-style: italic;',
+ 'MULTI' => 'color: #666666; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;',
+ 'HARD' => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #009900;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;',
+ 'HARD' => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #0066ee;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #339933;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 4
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/per.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/per.php
new file mode 100644
index 000000000..ea9c75f8e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/per.php
@@ -0,0 +1,302 @@
+<?php
+/*************************************************************************************
+ * per.php
+ * --------
+ * Author: Lars Gersmann (lars.gersmann@gmail.com)
+ * Copyright: (c) 2007 Lars Gersmann
+ * Release Version: 1.0.8.4
+ * Date Started: 2007/06/03
+ *
+ * Per (forms) (FOURJ's Genero 4GL) language file for GeSHi.
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'per',
+ 'COMMENT_SINGLE' => array(1 => '--', 2 => '#'),
+ 'COMMENT_MULTI' => array('{' => '}'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ "ACCELERATOR",
+ "ACCELERATOR2",
+ "ACTION",
+ "ALT",
+ "AND",
+ "AUTO",
+ "AUTONEXT",
+ "AUTOSCALE",
+ "BETWEEN",
+ "BOTH",
+ "BUTTON",
+ "BUTTONEDIT",
+ "BUTTONTEXTHIDDEN",
+ "BY",
+ "BYTE",
+ "CANVAS",
+ "CENTER",
+ "CHECKBOX",
+ "CLASS",
+ "COLOR",
+ "COLUMNS",
+ "COMBOBOX",
+ "COMMAND",
+ "COMMENT",
+ "COMMENTS",
+ "COMPACT",
+ "COMPRESS",
+ "CONFIG",
+ "CONTROL",
+ "CURRENT",
+ "DATABASE",
+ "DATEEDIT",
+ "DEC",
+ "DEFAULT",
+ "DEFAULTS",
+ "DELIMITERS",
+ "DISPLAY",
+ "DISPLAYONLY",
+ "DOWNSHIFT",
+ "DYNAMIC",
+ "EDIT",
+ "FIXED",
+ "FOLDER",
+ "FONTPITCH",
+ "FORMAT",
+ "FORMONLY",
+ "GRID",
+ "GRIDCHILDRENINPARENT",
+ "GROUP",
+ "HBOX",
+ "HEIGHT",
+ "HIDDEN",
+ "HORIZONTAL",
+ "INCLUDE",
+ "INITIAL",
+ "INITIALIZER",
+ "INPUT",
+ "INSTRUCTIONS",
+ "INTERVAL",
+ "INVISIBLE",
+ "IS",
+ "ITEM",
+ "ITEMS",
+ "JUSTIFY",
+ "KEY",
+ "KEYS",
+ "LABEL",
+ "LEFT",
+ "LIKE",
+ "LINES",
+ "MATCHES",
+ "NAME",
+ "NOENTRY",
+ "NONCOMPRESS",
+ "NORMAL",
+ "NOT",
+ "NOUPDATE",
+ "OPTIONS",
+ "OR",
+ "ORIENTATION",
+ "PACKED",
+ "PAGE",
+ "PICTURE",
+ "PIXELHEIGHT",
+ "PIXELS",
+ "PIXELWIDTH",
+ "POINTS",
+ "PROGRAM",
+ "PROGRESSBAR",
+ "QUERYCLEAR",
+ "QUERYEDITABLE",
+ "RADIOGROUP",
+ "RECORD",
+ "REQUIRED",
+ "REVERSE",
+ "RIGHT",
+ "SAMPLE",
+ "SCREEN",
+ "SCROLL",
+ "SCROLLBARS",
+ "SCROLLGRID",
+ "SECOND",
+ "SEPARATOR",
+ "SHIFT",
+ "SIZE",
+ "SIZEPOLICY",
+ "SMALLFLOAT",
+ "SMALLINT",
+ "SPACING",
+ "STRETCH",
+ "STYLE",
+ "TABINDEX",
+ "TABLE",
+ "TAG",
+ "TEXT",
+ "TEXTEDIT",
+ "THROUGH",
+ "THRU",
+ "TITLE",
+ "TO",
+ "TOOLBAR",
+ "TOPMENU",
+ "TYPE",
+ "UNHIDABLE",
+ "UNHIDABLECOLUMNS",
+ "UNMOVABLE",
+ "UNMOVABLECOLUMNS",
+ "UNSIZABLE",
+ "UNSIZABLECOLUMNS",
+ "UNSORTABLE",
+ "UNSORTABLECOLUMNS",
+ "UPSHIFT",
+ "USER",
+ "VALIDATE",
+ "VALUECHECKED",
+ "VALUEMAX",
+ "VALUEMIN",
+ "VALUEUNCHECKED",
+ "VARCHAR",
+ "VARIABLE",
+ "VBOX",
+ "VERIFY",
+ "VERSION",
+ "VERTICAL",
+ "TIMESTAMP",
+ "WANTCOLUMNSANCHORED", /* to be removed! */
+ "WANTFIXEDPAGESIZE",
+ "WANTNORETURNS",
+ "WANTTABS",
+ "WHERE",
+ "WIDGET",
+ "WIDTH",
+ "WINDOWSTYLE",
+ "WITHOUT",
+ "WORDWRAP",
+ "X",
+ "Y",
+ "ZEROFILL",
+ "SCHEMA",
+ "ATTRIBUTES",
+ "TABLES",
+ "LAYOUT",
+ "END"
+ ),
+ 2 => array(
+ "YEAR",
+ "BLACK",
+ "BLINK",
+ "BLUE",
+ "YELLOW",
+ "WHITE",
+ "UNDERLINE",
+ "CENTURY",
+ "FRACTION",
+ "CHAR",
+ "CHARACTER",
+ "CHARACTERS",
+ "CYAN",
+ "DATE",
+ "DATETIME",
+ "DAY",
+ "DECIMAL",
+ "FALSE",
+ "FLOAT",
+ "GREEN",
+ "HOUR",
+ "INT",
+ "INTEGER",
+ "MAGENTA",
+ "MINUTE",
+ "MONEY",
+ "NONE",
+ "NULL",
+ "REAL",
+ "RED",
+ "TRUE",
+ "TODAY",
+ "MONTH",
+ "IMAGE"
+ ),
+ ),
+ 'SYMBOLS' => array(
+ '+', '-', '*', '?', '=', '/', '%', '>', '<', '^', '!', '|', ':',
+ '(', ')', '[', ']'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #0600FF;',
+ 2 => 'color: #0000FF; font-weight: bold;',
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #008080; font-style: italic;',
+ 2 => 'color: #008080;',
+ 'MULTI' => 'color: green'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #008080; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #808080;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #FF0000;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #0000FF;',
+ 2 => 'color: #0000FF;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #008000;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/perl.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/perl.php
new file mode 100644
index 000000000..7c212515e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/perl.php
@@ -0,0 +1,213 @@
+<?php
+/*************************************************************************************
+ * perl.php
+ * --------
+ * Author: Andreas Gohr (andi@splitbrain.org), Ben Keen (ben.keen@gmail.com)
+ * Copyright: (c) 2004 Andreas Gohr, Ben Keen (http://www.benjaminkeen.org/), Nigel McNie (http://qbnz.com/highlighter/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/08/20
+ *
+ * Perl language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/06/22 (1.0.8)
+ * - Added support for system calls in backticks (Corley Kinnane)
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * - Added comment_regexp for predefined variables
+ * 2008/02/15 (1.003)
+ * - Fixed SF#1891630 with placebo patch
+ * 2006/01/05 (1.0.2)
+ * - Used hardescape feature for ' strings (Cliff Stanford)
+ * 2004/11/27 (1.0.1)
+ * - Added support for multiple object splitters
+ * 2004/08/20 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ * * LABEL:
+ * * string comparison operators
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Perl',
+ 'COMMENT_SINGLE' => array(1 => '#'),
+ 'COMMENT_MULTI' => array(
+ '=back' => '=cut',
+ '=head' => '=cut',
+ '=item' => '=cut',
+ '=over' => '=cut',
+ '=begin' => '=cut',
+ '=end' => '=cut',
+ '=for' => '=cut',
+ '=encoding' => '=cut',
+ '=pod' => '=cut'
+ ),
+ 'COMMENT_REGEXP' => array(
+ //Regular expressions
+ 2 => "/(?<=[\\s^])(s|tr|y)\\/(?:\\\\.|(?!\n)[^\\/\\\\])+\\/(?:\\\\.|(?!\n)[^\\/\\\\])*\\/[msixpogcde]*(?=[\\s$\\.\\;])|(?<=[\\s^(=])(m|q[qrwx]?)?\\/(?:\\\\.|(?!\n)[^\\/\\\\])+\\/[msixpogc]*(?=[\\s$\\.\\,\\;\\)])/iU",
+ //Regular expression match variables
+ 3 => '/\$\d+/',
+ //Heredoc
+ 4 => '/<<\s*?([\'"]?)([a-zA-Z0-9]+)\1;[^\n]*?\\n.*\\n\\2(?![a-zA-Z0-9])/siU',
+ //Predefined variables
+ 5 => '/\$(\^[a-zA-Z]?|[\*\$`\'&_\.,+\-~:;\\\\\/"\|%=\?!@#<>\(\)\[\]])(?!\w)|@[_+\-]|%[!]|\$(?=\{)/',
+ ),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"','`'),
+ 'HARDQUOTE' => array("'", "'"), // An optional 2-element array defining the beginning and end of a hard-quoted string
+ 'HARDESCAPE' => array('\\\'',),
+ // Things that must still be escaped inside a hard-quoted string
+ // If HARDQUOTE is defined, HARDESCAPE must be defined
+ // This will not work unless the first character of each element is either in the
+ // QUOTEMARKS array or is the ESCAPE_CHAR
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'case', 'do', 'else', 'elsif', 'for', 'if', 'then', 'until', 'while', 'foreach', 'my',
+ 'xor', 'or', 'and', 'unless', 'next', 'last', 'redo', 'not', 'our',
+ 'reset', 'continue', 'cmp', 'ne', 'eq', 'lt', 'gt', 'le', 'ge',
+ ),
+ 2 => array(
+ 'use', 'sub', 'new', '__END__', '__DATA__', '__DIE__', '__WARN__', 'BEGIN',
+ 'STDIN', 'STDOUT', 'STDERR', 'ARGV', 'ARGVOUT'
+ ),
+ 3 => array(
+ 'abs', 'accept', 'alarm', 'atan2', 'bind', 'binmode', 'bless',
+ 'caller', 'chdir', 'chmod', 'chomp', 'chop', 'chown', 'chr',
+ 'chroot', 'close', 'closedir', 'connect', 'cos',
+ 'crypt', 'dbmclose', 'dbmopen', 'defined', 'delete', 'die',
+ 'dump', 'each', 'endgrent', 'endhostent', 'endnetent', 'endprotoent',
+ 'endpwent', 'endservent', 'eof', 'eval', 'exec', 'exists', 'exit',
+ 'exp', 'fcntl', 'fileno', 'flock', 'fork', 'format', 'formline',
+ 'getc', 'getgrent', 'getgrgid', 'getgrnam', 'gethostbyaddr',
+ 'gethostbyname', 'gethostent', 'getlogin', 'getnetbyaddr', 'getnetbyname',
+ 'getnetent', 'getpeername', 'getpgrp', 'getppid', 'getpriority',
+ 'getprotobyname', 'getprotobynumber', 'getprotoent', 'getpwent',
+ 'getpwnam', 'getpwuid', 'getservbyname', 'getservbyport', 'getservent',
+ 'getsockname', 'getsockopt', 'glob', 'gmtime', 'goto', 'grep',
+ 'hex', 'import', 'index', 'int', 'ioctl', 'join', 'keys', 'kill',
+ 'lc', 'lcfirst', 'length', 'link', 'listen', 'local',
+ 'localtime', 'log', 'lstat', 'm', 'map', 'mkdir', 'msgctl', 'msgget',
+ 'msgrcv', 'msgsnd', 'no', 'oct', 'open', 'opendir',
+ 'ord', 'pack', 'package', 'pipe', 'pop', 'pos', 'print',
+ 'printf', 'prototype', 'push', 'qq', 'qr', 'quotemeta', 'qw',
+ 'qx', 'q', 'rand', 'read', 'readdir', 'readline', 'readlink', 'readpipe',
+ 'recv', 'ref', 'rename', 'require', 'return',
+ 'reverse', 'rewinddir', 'rindex', 'rmdir', 's', 'scalar', 'seek',
+ 'seekdir', 'select', 'semctl', 'semget', 'semop', 'send', 'setgrent',
+ 'sethostent', 'setnetent', 'setpgrp', 'setpriority', 'setprotoent',
+ 'setpwent', 'setservent', 'setsockopt', 'shift', 'shmctl', 'shmget',
+ 'shmread', 'shmwrite', 'shutdown', 'sin', 'sleep', 'socket', 'socketpair',
+ 'sort', 'splice', 'split', 'sprintf', 'sqrt', 'srand', 'stat',
+ 'study', 'substr', 'symlink', 'syscall', 'sysopen', 'sysread',
+ 'sysseek', 'system', 'syswrite', 'tell', 'telldir', 'tie', 'tied',
+ 'time', 'times', 'tr', 'truncate', 'uc', 'ucfirst', 'umask', 'undef',
+ 'unlink', 'unpack', 'unshift', 'untie', 'utime', 'values',
+ 'vec', 'wait', 'waitpid', 'wantarray', 'warn', 'write', 'y'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '<', '>', '=',
+ '!', '@', '~', '&', '|', '^',
+ '+','-', '*', '/', '%',
+ ',', ';', '?', '.', ':'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ 2 => true,
+ 3 => true,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #b1b100;',
+ 2 => 'color: #000000; font-weight: bold;',
+ 3 => 'color: #000066;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #666666; font-style: italic;',
+ 2 => 'color: #009966; font-style: italic;',
+ 3 => 'color: #0000ff;',
+ 4 => 'color: #cc0000; font-style: italic;',
+ 5 => 'color: #0000ff;',
+ 'MULTI' => 'color: #666666; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;',
+ 'HARD' => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #009900;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;',
+ 'HARD' => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #006600;',
+ 2 => 'color: #006600;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #339933;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #0000ff;',
+ 4 => 'color: #009999;',
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => 'http://perldoc.perl.org/functions/{FNAMEL}.html'
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '-&gt;',
+ 2 => '::'
+ ),
+ 'REGEXPS' => array(
+ //Variable
+ 0 => '(?:\$[\$#]?|\\\\(?:[@%*]?|\\\\*\$|&amp;)|%[$]?|@[$]?|\*[$]?|&amp;[$]?)[a-zA-Z_][a-zA-Z0-9_]*',
+ //File Descriptor
+ 4 => '&lt;[a-zA-Z_][a-zA-Z0-9_]*&gt;',
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'PARSER_CONTROL' => array(
+ 'COMMENTS' => array(
+ 'DISALLOWED_BEFORE' => '$'
+ )
+ )
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/php-brief.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/php-brief.php
new file mode 100644
index 000000000..2a5d78611
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/php-brief.php
@@ -0,0 +1,222 @@
+<?php
+/*************************************************************************************
+ * php-brief.php
+ * -------------
+ * Author: Nigel McNie (nigel@geshi.org)
+ * Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/06/02
+ *
+ * PHP (brief version) language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * 2004/11/27 (1.0.3)
+ * - Added support for multiple object splitters
+ * - Fixed &new problem
+ * 2004/10/27 (1.0.2)
+ * - Added support for URLs
+ * 2004/08/05 (1.0.1)
+ * - Added support for symbols
+ * 2004/07/14 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/07/14)
+ * -------------------------
+ * * Remove more functions that are hardly used
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'PHP (brief)',
+ 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ //Heredoc and Nowdoc syntax
+ 'COMMENT_REGEXP' => array(3 => '/<<<\s*?(\'?)([a-zA-Z0-9]+)\1[^\n]*?\\n.*\\n\\2(?![a-zA-Z0-9])/siU'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'HARDQUOTE' => array("'", "'"),
+ 'HARDESCAPE' => array("\'"),
+ 'NUMBERS' =>
+ GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_OCT_PREFIX | GESHI_NUMBER_HEX_PREFIX |
+ GESHI_NUMBER_FLT_SCI_ZERO,
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'include', 'require', 'include_once', 'require_once',
+ 'for', 'as', 'foreach', 'if', 'elseif', 'else', 'while', 'do', 'endwhile', 'endif', 'switch', 'case', 'endswitch',
+ 'return', 'break'
+ ),
+ 2 => array(
+ 'null', '__LINE__', '__FILE__',
+ 'false', '&lt;?php',
+ 'true', 'var', 'default',
+ 'function', 'class', 'new', '&amp;new', 'public', 'private', 'interface', 'extends',
+ 'const', 'self'
+ ),
+ 3 => array(
+ 'func_num_args', 'func_get_arg', 'func_get_args', 'strlen', 'strcmp', 'strncmp', 'strcasecmp', 'strncasecmp', 'each', 'error_reporting', 'define', 'defined',
+ 'trigger_error', 'user_error', 'set_error_handler', 'restore_error_handler', 'get_declared_classes', 'get_loaded_extensions',
+ 'extension_loaded', 'get_extension_funcs', 'debug_backtrace',
+ 'constant', 'bin2hex', 'sleep', 'usleep', 'time', 'mktime', 'gmmktime', 'strftime', 'gmstrftime', 'strtotime', 'date', 'gmdate', 'getdate', 'localtime', 'checkdate', 'flush', 'wordwrap', 'htmlspecialchars', 'htmlentities', 'html_entity_decode', 'md5', 'md5_file', 'crc32', 'getimagesize', 'image_type_to_mime_type', 'phpinfo', 'phpversion', 'phpcredits', 'strnatcmp', 'strnatcasecmp', 'substr_count', 'strspn', 'strcspn', 'strtok', 'strtoupper', 'strtolower', 'strpos', 'strrpos', 'strrev', 'hebrev', 'hebrevc', 'nl2br', 'basename', 'dirname', 'pathinfo', 'stripslashes', 'stripcslashes', 'strstr', 'stristr', 'strrchr', 'str_shuffle', 'str_word_count', 'strcoll', 'substr', 'substr_replace', 'quotemeta', 'ucfirst', 'ucwords', 'strtr', 'addslashes', 'addcslashes', 'rtrim', 'str_replace', 'str_repeat', 'count_chars', 'chunk_split', 'trim', 'ltrim', 'strip_tags', 'similar_text', 'explode', 'implode', 'setlocale', 'localeconv',
+ 'parse_str', 'str_pad', 'chop', 'strchr', 'sprintf', 'printf', 'vprintf', 'vsprintf', 'sscanf', 'fscanf', 'parse_url', 'urlencode', 'urldecode', 'rawurlencode', 'rawurldecode', 'readlink', 'linkinfo', 'link', 'unlink', 'exec', 'system', 'escapeshellcmd', 'escapeshellarg', 'passthru', 'shell_exec', 'proc_open', 'proc_close', 'rand', 'srand', 'getrandmax', 'mt_rand', 'mt_srand', 'mt_getrandmax', 'base64_decode', 'base64_encode', 'abs', 'ceil', 'floor', 'round', 'is_finite', 'is_nan', 'is_infinite', 'bindec', 'hexdec', 'octdec', 'decbin', 'decoct', 'dechex', 'base_convert', 'number_format', 'fmod', 'ip2long', 'long2ip', 'getenv', 'putenv', 'getopt', 'microtime', 'gettimeofday', 'getrusage', 'uniqid', 'quoted_printable_decode', 'set_time_limit', 'get_cfg_var', 'magic_quotes_runtime', 'set_magic_quotes_runtime', 'get_magic_quotes_gpc', 'get_magic_quotes_runtime',
+ 'import_request_variables', 'error_log', 'serialize', 'unserialize', 'memory_get_usage', 'var_dump', 'var_export', 'debug_zval_dump', 'print_r','highlight_file', 'show_source', 'highlight_string', 'ini_get', 'ini_get_all', 'ini_set', 'ini_alter', 'ini_restore', 'get_include_path', 'set_include_path', 'restore_include_path', 'setcookie', 'header', 'headers_sent', 'connection_aborted', 'connection_status', 'ignore_user_abort', 'parse_ini_file', 'is_uploaded_file', 'move_uploaded_file', 'intval', 'floatval', 'doubleval', 'strval', 'gettype', 'settype', 'is_null', 'is_resource', 'is_bool', 'is_long', 'is_float', 'is_int', 'is_integer', 'is_double', 'is_real', 'is_numeric', 'is_string', 'is_array', 'is_object', 'is_scalar',
+ 'ereg', 'ereg_replace', 'eregi', 'eregi_replace', 'split', 'spliti', 'join', 'sql_regcase', 'dl', 'pclose', 'popen', 'readfile', 'rewind', 'rmdir', 'umask', 'fclose', 'feof', 'fgetc', 'fgets', 'fgetss', 'fread', 'fopen', 'fpassthru', 'ftruncate', 'fstat', 'fseek', 'ftell', 'fflush', 'fwrite', 'fputs', 'mkdir', 'rename', 'copy', 'tempnam', 'tmpfile', 'file', 'file_get_contents', 'stream_select', 'stream_context_create', 'stream_context_set_params', 'stream_context_set_option', 'stream_context_get_options', 'stream_filter_prepend', 'stream_filter_append', 'fgetcsv', 'flock', 'get_meta_tags', 'stream_set_write_buffer', 'set_file_buffer', 'set_socket_blocking', 'stream_set_blocking', 'socket_set_blocking', 'stream_get_meta_data', 'stream_register_wrapper', 'stream_wrapper_register', 'stream_set_timeout', 'socket_set_timeout', 'socket_get_status', 'realpath', 'fnmatch', 'fsockopen', 'pfsockopen', 'pack', 'unpack', 'get_browser', 'crypt', 'opendir', 'closedir', 'chdir', 'getcwd', 'rewinddir', 'readdir', 'dir', 'glob', 'fileatime', 'filectime', 'filegroup', 'fileinode', 'filemtime', 'fileowner', 'fileperms', 'filesize', 'filetype', 'file_exists', 'is_writable', 'is_writeable', 'is_readable', 'is_executable', 'is_file', 'is_dir', 'is_link', 'stat', 'lstat', 'chown',
+ 'touch', 'clearstatcache', 'mail', 'ob_start', 'ob_flush', 'ob_clean', 'ob_end_flush', 'ob_end_clean', 'ob_get_flush', 'ob_get_clean', 'ob_get_length', 'ob_get_level', 'ob_get_status', 'ob_get_contents', 'ob_implicit_flush', 'ob_list_handlers', 'ksort', 'krsort', 'natsort', 'natcasesort', 'asort', 'arsort', 'sort', 'rsort', 'usort', 'uasort', 'uksort', 'shuffle', 'array_walk', 'count', 'end', 'prev', 'next', 'reset', 'current', 'key', 'min', 'max', 'in_array', 'array_search', 'extract', 'compact', 'array_fill', 'range', 'array_multisort', 'array_push', 'array_pop', 'array_shift', 'array_unshift', 'array_splice', 'array_slice', 'array_merge', 'array_merge_recursive', 'array_keys', 'array_values', 'array_count_values', 'array_reverse', 'array_reduce', 'array_pad', 'array_flip', 'array_change_key_case', 'array_rand', 'array_unique', 'array_intersect', 'array_intersect_assoc', 'array_diff', 'array_diff_assoc', 'array_sum', 'array_filter', 'array_map', 'array_chunk', 'array_key_exists', 'pos', 'sizeof', 'key_exists', 'assert', 'assert_options', 'version_compare', 'ftok', 'str_rot13', 'aggregate',
+ 'session_name', 'session_module_name', 'session_save_path', 'session_id', 'session_regenerate_id', 'session_decode', 'session_register', 'session_unregister', 'session_is_registered', 'session_encode',
+ 'session_start', 'session_destroy', 'session_unset', 'session_set_save_handler', 'session_cache_limiter', 'session_cache_expire', 'session_set_cookie_params', 'session_get_cookie_params', 'session_write_close', 'preg_match', 'preg_match_all', 'preg_replace', 'preg_replace_callback', 'preg_split', 'preg_quote', 'preg_grep', 'overload', 'ctype_alnum', 'ctype_alpha', 'ctype_cntrl', 'ctype_digit', 'ctype_lower', 'ctype_graph', 'ctype_print', 'ctype_punct', 'ctype_space', 'ctype_upper', 'ctype_xdigit', 'virtual', 'apache_request_headers', 'apache_note', 'apache_lookup_uri', 'apache_child_terminate', 'apache_setenv', 'apache_response_headers', 'apache_get_version', 'getallheaders', 'mysql_connect', 'mysql_pconnect', 'mysql_close', 'mysql_select_db', 'mysql_create_db', 'mysql_drop_db', 'mysql_query', 'mysql_unbuffered_query', 'mysql_db_query', 'mysql_list_dbs', 'mysql_list_tables', 'mysql_list_fields', 'mysql_list_processes', 'mysql_error', 'mysql_errno', 'mysql_affected_rows', 'mysql_insert_id', 'mysql_result', 'mysql_num_rows', 'mysql_num_fields', 'mysql_fetch_row', 'mysql_fetch_array', 'mysql_fetch_assoc', 'mysql_fetch_object', 'mysql_data_seek', 'mysql_fetch_lengths', 'mysql_fetch_field', 'mysql_field_seek', 'mysql_free_result', 'mysql_field_name', 'mysql_field_table', 'mysql_field_len', 'mysql_field_type', 'mysql_field_flags', 'mysql_escape_string', 'mysql_real_escape_string', 'mysql_stat',
+ 'mysql_thread_id', 'mysql_client_encoding', 'mysql_get_client_info', 'mysql_get_host_info', 'mysql_get_proto_info', 'mysql_get_server_info', 'mysql_info', 'mysql', 'mysql_fieldname', 'mysql_fieldtable', 'mysql_fieldlen', 'mysql_fieldtype', 'mysql_fieldflags', 'mysql_selectdb', 'mysql_createdb', 'mysql_dropdb', 'mysql_freeresult', 'mysql_numfields', 'mysql_numrows', 'mysql_listdbs', 'mysql_listtables', 'mysql_listfields', 'mysql_db_name', 'mysql_dbname', 'mysql_tablename', 'mysql_table_name', 'pg_connect', 'pg_pconnect', 'pg_close', 'pg_connection_status', 'pg_connection_busy', 'pg_connection_reset', 'pg_host', 'pg_dbname', 'pg_port', 'pg_tty', 'pg_options', 'pg_ping', 'pg_query', 'pg_send_query', 'pg_cancel_query', 'pg_fetch_result', 'pg_fetch_row', 'pg_fetch_assoc', 'pg_fetch_array', 'pg_fetch_object', 'pg_fetch_all', 'pg_affected_rows', 'pg_get_result', 'pg_result_seek', 'pg_result_status', 'pg_free_result', 'pg_last_oid', 'pg_num_rows', 'pg_num_fields', 'pg_field_name', 'pg_field_num', 'pg_field_size', 'pg_field_type', 'pg_field_prtlen', 'pg_field_is_null', 'pg_get_notify', 'pg_get_pid', 'pg_result_error', 'pg_last_error', 'pg_last_notice', 'pg_put_line', 'pg_end_copy', 'pg_copy_to', 'pg_copy_from',
+ 'pg_trace', 'pg_untrace', 'pg_lo_create', 'pg_lo_unlink', 'pg_lo_open', 'pg_lo_close', 'pg_lo_read', 'pg_lo_write', 'pg_lo_read_all', 'pg_lo_import', 'pg_lo_export', 'pg_lo_seek', 'pg_lo_tell', 'pg_escape_string', 'pg_escape_bytea', 'pg_unescape_bytea', 'pg_client_encoding', 'pg_set_client_encoding', 'pg_meta_data', 'pg_convert', 'pg_insert', 'pg_update', 'pg_delete', 'pg_select', 'pg_exec', 'pg_getlastoid', 'pg_cmdtuples', 'pg_errormessage', 'pg_numrows', 'pg_numfields', 'pg_fieldname', 'pg_fieldsize', 'pg_fieldtype', 'pg_fieldnum', 'pg_fieldprtlen', 'pg_fieldisnull', 'pg_freeresult', 'pg_result', 'pg_loreadall', 'pg_locreate', 'pg_lounlink', 'pg_loopen', 'pg_loclose', 'pg_loread', 'pg_lowrite', 'pg_loimport', 'pg_loexport',
+ 'echo', 'print', 'global', 'static', 'exit', 'array', 'empty', 'eval', 'isset', 'unset', 'die'
+ )
+ ),
+ 'SYMBOLS' => array(
+ 1 => array(
+ '<%', '<%=', '%>', '<?', '<?=', '?>'
+ ),
+ 0 => array(
+ '(', ')', '[', ']', '{', '}',
+ '!', '@', '%', '&', '|', '/',
+ '<', '>',
+ '=', '-', '+', '*',
+ '.', ':', ',', ';'
+ )
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #b1b100;',
+ 2 => 'color: #000000; font-weight: bold;',
+ 3 => 'color: #990000;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #666666; font-style: italic;',
+ 2 => 'color: #666666; font-style: italic;',
+ 3 => 'color: #0000cc; font-style: italic;',
+ 'MULTI' => 'color: #666666; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;',
+ 'HARD' => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #009900;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #0000ff;',
+ 'HARD' => 'color: #0000ff;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;',
+ GESHI_NUMBER_OCT_PREFIX => 'color: #208080;',
+ GESHI_NUMBER_HEX_PREFIX => 'color: #208080;',
+ GESHI_NUMBER_FLT_SCI_ZERO => 'color:#800080;',
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #004000;',
+ 2 => 'color: #004000;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #339933;',
+ 1 => 'color: #000000; font-weight: bold;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #0000ff;'
+ ),
+ 'SCRIPT' => array(
+ 0 => '',
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => '',
+ 5 => ''
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => 'http://www.php.net/{FNAMEL}'
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '-&gt;',
+ 2 => '::'
+ ),
+ 'REGEXPS' => array(
+ //Variables
+ 0 => "[\\$]{1,2}[a-zA-Z_][a-zA-Z0-9_]*"
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_MAYBE,
+ 'SCRIPT_DELIMITERS' => array(
+ 0 => array(
+ '<?php' => '?>'
+ ),
+ 1 => array(
+ '<?' => '?>'
+ ),
+ 2 => array(
+ '<%' => '%>'
+ ),
+ 3 => array(
+ '<script language="php">' => '</script>'
+ ),
+ 4 => "/(?<start><\\?(?>php\b)?)(?:".
+ "(?>[^\"'?\\/<]+)|".
+ "\\?(?!>)|".
+ "(?>'(?>[^'\\\\]|\\\\'|\\\\\\\|\\\\)*')|".
+ "(?>\"(?>[^\"\\\\]|\\\\\"|\\\\\\\\|\\\\)*\")|".
+ "(?>\\/\\*(?>[^\\*]|(?!\\*\\/)\\*)*\\*\\/)|".
+ "\\/\\/(?>.*?$)|".
+ "\\/(?=[^*\\/])|".
+ "<(?!<<)|".
+ "<<<(?<phpdoc>\w+)\s.*?\s\k<phpdoc>".
+ ")*(?<end>\\?>|\Z)/sm",
+ 5 => "/(?<start><%)(?:".
+ "(?>[^\"'%\\/<]+)|".
+ "%(?!>)|".
+ "(?>'(?>[^'\\\\]|\\\\'|\\\\\\\|\\\\)*')|".
+ "(?>\"(?>[^\\\"\\\\]|\\\\\"|\\\\\\\\|\\\\)*\")|".
+ "(?>\\/\\*(?>[^\\*]|(?!\\*\\/)\\*)*\\*\\/)|".
+ "\\/\\/(?>.*?$)|".
+ "\\/(?=[^*\\/])|".
+ "<(?!<<)|".
+ "<<<(?<phpdoc>\w+)\s.*?\s\k<phpdoc>".
+ ")*(?<end>%>)/sm"
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ 0 => true,
+ 1 => true,
+ 2 => true,
+ 3 => true,
+ 4 => true,
+ 5 => true
+ ),
+ 'TAB_WIDTH' => 4
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/php.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/php.php
new file mode 100644
index 000000000..b96c947ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/php.php
@@ -0,0 +1,1114 @@
+<?php
+/*************************************************************************************
+ * php.php
+ * --------
+ * Author: Nigel McNie (nigel@geshi.org)
+ * Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/06/20
+ *
+ * PHP language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * 2004/11/25 (1.0.3)
+ * - Added support for multiple object splitters
+ * - Fixed &new problem
+ * 2004/10/27 (1.0.2)
+ * - Added URL support
+ * - Added extra constants
+ * 2004/08/05 (1.0.1)
+ * - Added support for symbols
+ * 2004/07/14 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/07/14)
+ * -------------------------
+ * * Make sure the last few function I may have missed
+ * (like eval()) are included for highlighting
+ * * Split to several files - php4, php5 etc
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array(
+ 'LANG_NAME' => 'PHP',
+ 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'COMMENT_REGEXP' => array(
+ //Heredoc and Nowdoc syntax
+ 3 => '/<<<\s*?(\'?)([a-zA-Z0-9]+?)\1[^\n]*?\\n.*\\n\\2(?![a-zA-Z0-9])/siU',
+ // phpdoc comments
+ 4 => '#/\*\*(?![\*\/]).*\*/#sU',
+ // Advanced # handling
+ 2 => "/#.*?(?:(?=\?\>)|^)/smi"
+ ),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '',
+ 'ESCAPE_REGEXP' => array(
+ //Simple Single Char Escapes
+ 1 => "#\\\\[nfrtv\$\"\n\\\\]#i",
+ //Hexadecimal Char Specs
+ 2 => "#\\\\x[\da-fA-F]{1,2}#i",
+ //Octal Char Specs
+ 3 => "#\\\\[0-7]{1,3}#",
+ //String Parsing of Variable Names
+ 4 => "#\\$[a-z0-9_]+(?:\\[[a-z0-9_]+\\]|->[a-z0-9_]+)?|(?:\\{\\$|\\$\\{)[a-z0-9_]+(?:\\[('?)[a-z0-9_]*\\1\\]|->[a-z0-9_]+)*\\}#i",
+ //Experimental extension supporting cascaded {${$var}} syntax
+ 5 => "#\$[a-z0-9_]+(?:\[[a-z0-9_]+\]|->[a-z0-9_]+)?|(?:\{\$|\$\{)[a-z0-9_]+(?:\[('?)[a-z0-9_]*\\1\]|->[a-z0-9_]+)*\}|\{\$(?R)\}#i",
+ //Format String support in ""-Strings
+ 6 => "#%(?:%|(?:\d+\\\\\\\$)?\\+?(?:\x20|0|'.)?-?(?:\d+|\\*)?(?:\.\d+)?[bcdefFosuxX])#"
+ ),
+ 'HARDQUOTE' => array("'", "'"),
+ 'HARDESCAPE' => array("'", "\\"),
+ 'HARDCHAR' => "\\",
+ 'NUMBERS' =>
+ GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_OCT_PREFIX | GESHI_NUMBER_HEX_PREFIX |
+ GESHI_NUMBER_FLT_SCI_ZERO,
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'as','break','case','continue','default','do','else','elseif',
+ 'endfor','endforeach','endif','endswitch','endwhile','for',
+ 'foreach','if','include','include_once','require','require_once',
+ 'return','switch','while',
+
+ 'echo','print'
+ ),
+ 2 => array(
+ '&amp;new','&lt;/script&gt;','&lt;?php','&lt;script language',
+ 'class','const','declare','extends','function','global','interface',
+ 'namespace','new','private','public','self','var'
+ ),
+ 3 => array(
+ 'abs','acos','acosh','addcslashes','addslashes','aggregate',
+ 'aggregate_methods','aggregate_methods_by_list',
+ 'aggregate_methods_by_regexp','aggregate_properties',
+ 'aggregate_properties_by_list','aggregate_properties_by_regexp',
+ 'aggregation_info','apache_child_terminate','apache_get_modules',
+ 'apache_get_version','apache_getenv','apache_lookup_uri',
+ 'apache_note','apache_request_headers','apache_response_headers',
+ 'apache_setenv','array','array_change_key_case','array_chunk',
+ 'array_combine','array_count_values','array_diff',
+ 'array_diff_assoc','array_diff_key','array_diff_uassoc',
+ 'array_diff_ukey','array_fill','array_fill_keys','array_filter',
+ 'array_flip','array_intersect','array_intersect_assoc',
+ 'array_intersect_key','array_intersect_uassoc',
+ 'array_intersect_ukey','array_key_exists','array_keys','array_map',
+ 'array_merge','array_merge_recursive','array_multisort','array_pad',
+ 'array_pop','array_product','array_push','array_rand',
+ 'array_reduce','array_reverse','array_search','array_shift',
+ 'array_slice','array_splice','array_sum','array_udiff',
+ 'array_udiff_assoc','array_udiff_uassoc','array_uintersect',
+ 'array_uintersect_assoc','array_uintersect_uassoc','array_unique',
+ 'array_unshift','array_values','array_walk','array_walk_recursive',
+ 'arsort','asin','asinh','asort','assert','assert_options','atan',
+ 'atan2','atanh','base_convert','base64_decode','base64_encode',
+ 'basename','bcadd','bccomp','bcdiv','bcmod','bcmul',
+ 'bcompiler_load','bcompiler_load_exe','bcompiler_parse_class',
+ 'bcompiler_read','bcompiler_write_class','bcompiler_write_constant',
+ 'bcompiler_write_exe_footer','bcompiler_write_file',
+ 'bcompiler_write_footer','bcompiler_write_function',
+ 'bcompiler_write_functions_from_file','bcompiler_write_header',
+ 'bcompiler_write_included_filename','bcpow','bcpowmod','bcscale',
+ 'bcsqrt','bcsub','bin2hex','bindec','bindtextdomain',
+ 'bind_textdomain_codeset','bitset_empty','bitset_equal',
+ 'bitset_excl','bitset_fill','bitset_from_array','bitset_from_hash',
+ 'bitset_from_string','bitset_in','bitset_incl',
+ 'bitset_intersection','bitset_invert','bitset_is_empty',
+ 'bitset_subset','bitset_to_array','bitset_to_hash',
+ 'bitset_to_string','bitset_union','blenc_encrypt','bzclose',
+ 'bzcompress','bzdecompress','bzerrno','bzerror','bzerrstr',
+ 'bzflush','bzopen','bzread','bzwrite','cal_days_in_month',
+ 'cal_from_jd','cal_info','cal_to_jd','call_user_func',
+ 'call_user_func_array','call_user_method','call_user_method_array',
+ 'ceil','chdir','checkdate','checkdnsrr','chgrp','chmod','chop',
+ 'chown','chr','chunk_split','class_exists','class_implements',
+ 'class_parents','classkit_aggregate_methods',
+ 'classkit_doc_comments','classkit_import','classkit_method_add',
+ 'classkit_method_copy','classkit_method_redefine',
+ 'classkit_method_remove','classkit_method_rename','clearstatcache',
+ 'closedir','closelog','com_create_guid','com_event_sink',
+ 'com_get_active_object','com_load_typelib','com_message_pump',
+ 'com_print_typeinfo','compact','confirm_phpdoc_compiled',
+ 'connection_aborted','connection_status','constant',
+ 'convert_cyr_string','convert_uudecode','convert_uuencode','copy',
+ 'cos','cosh','count','count_chars','cpdf_add_annotation',
+ 'cpdf_add_outline','cpdf_arc','cpdf_begin_text','cpdf_circle',
+ 'cpdf_clip','cpdf_close','cpdf_closepath',
+ 'cpdf_closepath_fill_stroke','cpdf_closepath_stroke',
+ 'cpdf_continue_text','cpdf_curveto','cpdf_end_text','cpdf_fill',
+ 'cpdf_fill_stroke','cpdf_finalize','cpdf_finalize_page',
+ 'cpdf_global_set_document_limits','cpdf_import_jpeg','cpdf_lineto',
+ 'cpdf_moveto','cpdf_newpath','cpdf_open','cpdf_output_buffer',
+ 'cpdf_page_init','cpdf_rect','cpdf_restore','cpdf_rlineto',
+ 'cpdf_rmoveto','cpdf_rotate','cpdf_rotate_text','cpdf_save',
+ 'cpdf_save_to_file','cpdf_scale','cpdf_set_action_url',
+ 'cpdf_set_char_spacing','cpdf_set_creator','cpdf_set_current_page',
+ 'cpdf_set_font','cpdf_set_font_directories',
+ 'cpdf_set_font_map_file','cpdf_set_horiz_scaling',
+ 'cpdf_set_keywords','cpdf_set_leading','cpdf_set_page_animation',
+ 'cpdf_set_subject','cpdf_set_text_matrix','cpdf_set_text_pos',
+ 'cpdf_set_text_rendering','cpdf_set_text_rise','cpdf_set_title',
+ 'cpdf_set_viewer_preferences','cpdf_set_word_spacing',
+ 'cpdf_setdash','cpdf_setflat','cpdf_setgray','cpdf_setgray_fill',
+ 'cpdf_setgray_stroke','cpdf_setlinecap','cpdf_setlinejoin',
+ 'cpdf_setlinewidth','cpdf_setmiterlimit','cpdf_setrgbcolor',
+ 'cpdf_setrgbcolor_fill','cpdf_setrgbcolor_stroke','cpdf_show',
+ 'cpdf_show_xy','cpdf_stringwidth','cpdf_stroke','cpdf_text',
+ 'cpdf_translate','crack_check','crack_closedict',
+ 'crack_getlastmessage','crack_opendict','crc32','create_function',
+ 'crypt','ctype_alnum','ctype_alpha','ctype_cntrl','ctype_digit',
+ 'ctype_graph','ctype_lower','ctype_print','ctype_punct',
+ 'ctype_space','ctype_upper','ctype_xdigit','curl_close',
+ 'curl_copy_handle','curl_errno','curl_error','curl_exec',
+ 'curl_getinfo','curl_init','curl_multi_add_handle',
+ 'curl_multi_close','curl_multi_exec','curl_multi_getcontent',
+ 'curl_multi_info_read','curl_multi_init','curl_multi_remove_handle',
+ 'curl_multi_select','curl_setopt','curl_setopt_array',
+ 'curl_version','current','cvsclient_connect','cvsclient_log',
+ 'cvsclient_login','cvsclient_retrieve','date','date_create',
+ 'date_date_set','date_default_timezone_get',
+ 'date_default_timezone_set','date_format','date_isodate_set',
+ 'date_modify','date_offset_get','date_parse','date_sun_info',
+ 'date_sunrise','date_sunset','date_time_set','date_timezone_get',
+ 'date_timezone_set','db_id_list','dba_close','dba_delete',
+ 'dba_exists','dba_fetch','dba_firstkey','dba_handlers','dba_insert',
+ 'dba_key_split','dba_list','dba_nextkey','dba_open','dba_optimize',
+ 'dba_popen','dba_replace','dba_sync','dbase_add_record',
+ 'dbase_close','dbase_create','dbase_delete_record',
+ 'dbase_get_header_info','dbase_get_record',
+ 'dbase_get_record_with_names','dbase_numfields','dbase_numrecords',
+ 'dbase_open','dbase_pack','dbase_replace_record',
+ 'dbg_get_all_contexts','dbg_get_all_module_names',
+ 'dbg_get_all_source_lines','dbg_get_context_name',
+ 'dbg_get_module_name','dbg_get_profiler_results',
+ 'dbg_get_source_context','dblist','dbmclose','dbmdelete',
+ 'dbmexists','dbmfetch','dbmfirstkey','dbminsert','dbmnextkey',
+ 'dbmopen','dbmreplace','dbx_close','dbx_compare','dbx_connect',
+ 'dbx_error','dbx_escape_string','dbx_fetch_row','dbx_query',
+ 'dbx_sort','dcgettext','dcngettext','deaggregate','debug_backtrace',
+ 'debug_zval_dump','debugbreak','decbin','dechex','decoct','define',
+ 'defined','define_syslog_variables','deg2rad','dgettext','die',
+ 'dio_close','dio_open','dio_read','dio_seek','dio_stat','dio_write',
+ 'dir','dirname','disk_free_space','disk_total_space',
+ 'diskfreespace','dl','dngettext','docblock_token_name',
+ 'docblock_tokenize','dom_import_simplexml','domxml_add_root',
+ 'domxml_attributes','domxml_children','domxml_doc_add_root',
+ 'domxml_doc_document_element','domxml_doc_get_element_by_id',
+ 'domxml_doc_get_elements_by_tagname','domxml_doc_get_root',
+ 'domxml_doc_set_root','domxml_doc_validate','domxml_doc_xinclude',
+ 'domxml_dump_mem','domxml_dump_mem_file','domxml_dump_node',
+ 'domxml_dumpmem','domxml_elem_get_attribute',
+ 'domxml_elem_set_attribute','domxml_get_attribute','domxml_getattr',
+ 'domxml_html_dump_mem','domxml_new_child','domxml_new_doc',
+ 'domxml_new_xmldoc','domxml_node','domxml_node_add_namespace',
+ 'domxml_node_attributes','domxml_node_children',
+ 'domxml_node_get_content','domxml_node_has_attributes',
+ 'domxml_node_new_child','domxml_node_set_content',
+ 'domxml_node_set_namespace','domxml_node_unlink_node',
+ 'domxml_open_file','domxml_open_mem','domxml_parser',
+ 'domxml_parser_add_chunk','domxml_parser_cdata_section',
+ 'domxml_parser_characters','domxml_parser_comment',
+ 'domxml_parser_end','domxml_parser_end_document',
+ 'domxml_parser_end_element','domxml_parser_entity_reference',
+ 'domxml_parser_get_document','domxml_parser_namespace_decl',
+ 'domxml_parser_processing_instruction',
+ 'domxml_parser_start_document','domxml_parser_start_element',
+ 'domxml_root','domxml_set_attribute','domxml_setattr',
+ 'domxml_substitute_entities_default','domxml_unlink_node',
+ 'domxml_version','domxml_xmltree','doubleval','each','easter_date',
+ 'easter_days','empty','end','ereg','ereg_replace','eregi',
+ 'eregi_replace','error_get_last','error_log','error_reporting',
+ 'escapeshellarg','escapeshellcmd','eval','event_deschedule',
+ 'event_dispatch','event_free','event_handle_signal',
+ 'event_have_events','event_init','event_new','event_pending',
+ 'event_priority_set','event_schedule','event_set','event_timeout',
+ 'exec','exif_imagetype','exif_read_data','exif_tagname',
+ 'exif_thumbnail','exit','exp','explode','expm1','extension_loaded',
+ 'extract','ezmlm_hash','fbird_add_user','fbird_affected_rows',
+ 'fbird_backup','fbird_blob_add','fbird_blob_cancel',
+ 'fbird_blob_close','fbird_blob_create','fbird_blob_echo',
+ 'fbird_blob_get','fbird_blob_import','fbird_blob_info',
+ 'fbird_blob_open','fbird_close','fbird_commit','fbird_commit_ret',
+ 'fbird_connect','fbird_db_info','fbird_delete_user','fbird_drop_db',
+ 'fbird_errcode','fbird_errmsg','fbird_execute','fbird_fetch_assoc',
+ 'fbird_fetch_object','fbird_fetch_row','fbird_field_info',
+ 'fbird_free_event_handler','fbird_free_query','fbird_free_result',
+ 'fbird_gen_id','fbird_maintain_db','fbird_modify_user',
+ 'fbird_name_result','fbird_num_fields','fbird_num_params',
+ 'fbird_param_info','fbird_pconnect','fbird_prepare','fbird_query',
+ 'fbird_restore','fbird_rollback','fbird_rollback_ret',
+ 'fbird_server_info','fbird_service_attach','fbird_service_detach',
+ 'fbird_set_event_handler','fbird_trans','fbird_wait_event','fclose',
+ 'fdf_add_doc_javascript','fdf_add_template','fdf_close',
+ 'fdf_create','fdf_enum_values','fdf_errno','fdf_error','fdf_get_ap',
+ 'fdf_get_attachment','fdf_get_encoding','fdf_get_file',
+ 'fdf_get_flags','fdf_get_opt','fdf_get_status','fdf_get_value',
+ 'fdf_get_version','fdf_header','fdf_next_field_name','fdf_open',
+ 'fdf_open_string','fdf_remove_item','fdf_save','fdf_save_string',
+ 'fdf_set_ap','fdf_set_encoding','fdf_set_file','fdf_set_flags',
+ 'fdf_set_javascript_action','fdf_set_on_import_javascript',
+ 'fdf_set_opt','fdf_set_status','fdf_set_submit_form_action',
+ 'fdf_set_target_frame','fdf_set_value','fdf_set_version','feof',
+ 'fflush','fgetc','fgetcsv','fgets','fgetss','file','file_exists',
+ 'file_get_contents','file_put_contents','fileatime','filectime',
+ 'filegroup','fileinode','filemtime','fileowner','fileperms',
+ 'filepro','filepro_fieldcount','filepro_fieldname',
+ 'filepro_fieldtype','filepro_fieldwidth','filepro_retrieve',
+ 'filepro_rowcount','filesize','filetype','filter_has_var',
+ 'filter_id','filter_input','filter_input_array','filter_list',
+ 'filter_var','filter_var_array','finfo_buffer','finfo_close',
+ 'finfo_file','finfo_open','finfo_set_flags','floatval','flock',
+ 'floor','flush','fmod','fnmatch','fopen','fpassthru','fprintf',
+ 'fputcsv','fputs','fread','frenchtojd','fribidi_charset_info',
+ 'fribidi_get_charsets','fribidi_log2vis','fscanf','fseek',
+ 'fsockopen','fstat','ftell','ftok','ftp_alloc','ftp_cdup',
+ 'ftp_chdir','ftp_chmod','ftp_close','ftp_connect','ftp_delete',
+ 'ftp_exec','ftp_fget','ftp_fput','ftp_get','ftp_get_option',
+ 'ftp_login','ftp_mdtm','ftp_mkdir','ftp_nb_continue','ftp_nb_fget',
+ 'ftp_nb_fput','ftp_nb_get','ftp_nb_put','ftp_nlist','ftp_pasv',
+ 'ftp_put','ftp_pwd','ftp_quit','ftp_raw','ftp_rawlist','ftp_rename',
+ 'ftp_rmdir','ftp_set_option','ftp_site','ftp_size',
+ 'ftp_ssl_connect','ftp_systype','ftruncate','function_exists',
+ 'func_get_arg','func_get_args','func_num_args','fwrite','gd_info',
+ 'getallheaders','getcwd','getdate','getenv','gethostbyaddr',
+ 'gethostbyname','gethostbynamel','getimagesize','getlastmod',
+ 'getmxrr','getmygid','getmyinode','getmypid','getmyuid','getopt',
+ 'getprotobyname','getprotobynumber','getrandmax','getrusage',
+ 'getservbyname','getservbyport','gettext','gettimeofday','gettype',
+ 'get_browser','get_cfg_var','get_class','get_class_methods',
+ 'get_class_vars','get_current_user','get_declared_classes',
+ 'get_defined_constants','get_defined_functions','get_defined_vars',
+ 'get_extension_funcs','get_headers','get_html_translation_table',
+ 'get_included_files','get_include_path','get_loaded_extensions',
+ 'get_magic_quotes_gpc','get_magic_quotes_runtime','get_meta_tags',
+ 'get_object_vars','get_parent_class','get_required_files',
+ 'get_resource_type','glob','gmdate','gmmktime','gmp_abs','gmp_add',
+ 'gmp_and','gmp_clrbit','gmp_cmp','gmp_com','gmp_div','gmp_div_q',
+ 'gmp_div_qr','gmp_div_r','gmp_divexact','gmp_fact','gmp_gcd',
+ 'gmp_gcdext','gmp_hamdist','gmp_init','gmp_intval','gmp_invert',
+ 'gmp_jacobi','gmp_legendre','gmp_mod','gmp_mul','gmp_neg',
+ 'gmp_nextprime','gmp_or','gmp_perfect_square','gmp_popcount',
+ 'gmp_pow','gmp_powm','gmp_prob_prime','gmp_random','gmp_scan0',
+ 'gmp_scan1','gmp_setbit','gmp_sign','gmp_sqrt','gmp_sqrtrem',
+ 'gmp_strval','gmp_sub','gmp_xor','gmstrftime','gopher_parsedir',
+ 'gregoriantojd','gzclose','gzcompress','gzdeflate','gzencode',
+ 'gzeof','gzfile','gzgetc','gzgets','gzgetss','gzinflate','gzopen',
+ 'gzpassthru','gzputs','gzread','gzrewind','gzseek','gztell',
+ 'gzuncompress','gzwrite','hash','hash_algos','hash_file',
+ 'hash_final','hash_hmac','hash_hmac_file','hash_init','hash_update',
+ 'hash_update_file','hash_update_stream','header','headers_list',
+ 'headers_sent','hebrev','hebrevc','hexdec','highlight_file',
+ 'highlight_string','html_doc','html_doc_file','html_entity_decode',
+ 'htmlentities','htmlspecialchars','htmlspecialchars_decode',
+ 'http_build_cookie','http_build_query','http_build_str',
+ 'http_build_url','http_cache_etag','http_cache_last_modified',
+ 'http_chunked_decode','http_date','http_deflate','http_get',
+ 'http_get_request_body','http_get_request_body_stream',
+ 'http_get_request_headers','http_head','http_inflate',
+ 'http_match_etag','http_match_modified','http_match_request_header',
+ 'http_negotiate_charset','http_negotiate_content_type',
+ 'http_negotiate_language','http_parse_cookie','http_parse_headers',
+ 'http_parse_message','http_parse_params',
+ 'http_persistent_handles_clean','http_persistent_handles_count',
+ 'http_persistent_handles_ident','http_post_data','http_post_fields',
+ 'http_put_data','http_put_file','http_put_stream','http_redirect',
+ 'http_request','http_request_body_encode',
+ 'http_request_method_exists','http_request_method_name',
+ 'http_request_method_register','http_request_method_unregister',
+ 'http_send_content_disposition','http_send_content_type',
+ 'http_send_data','http_send_file','http_send_last_modified',
+ 'http_send_status','http_send_stream','http_support',
+ 'http_throttle','hypot','i18n_convert','i18n_discover_encoding',
+ 'i18n_http_input','i18n_http_output','i18n_internal_encoding',
+ 'i18n_ja_jp_hantozen','i18n_mime_header_decode',
+ 'i18n_mime_header_encode','ibase_add_user','ibase_affected_rows',
+ 'ibase_backup','ibase_blob_add','ibase_blob_cancel',
+ 'ibase_blob_close','ibase_blob_create','ibase_blob_echo',
+ 'ibase_blob_get','ibase_blob_import','ibase_blob_info',
+ 'ibase_blob_open','ibase_close','ibase_commit','ibase_commit_ret',
+ 'ibase_connect','ibase_db_info','ibase_delete_user','ibase_drop_db',
+ 'ibase_errcode','ibase_errmsg','ibase_execute','ibase_fetch_assoc',
+ 'ibase_fetch_object','ibase_fetch_row','ibase_field_info',
+ 'ibase_free_event_handler','ibase_free_query','ibase_free_result',
+ 'ibase_gen_id','ibase_maintain_db','ibase_modify_user',
+ 'ibase_name_result','ibase_num_fields','ibase_num_params',
+ 'ibase_param_info','ibase_pconnect','ibase_prepare','ibase_query',
+ 'ibase_restore','ibase_rollback','ibase_rollback_ret',
+ 'ibase_server_info','ibase_service_attach','ibase_service_detach',
+ 'ibase_set_event_handler','ibase_trans','ibase_wait_event','iconv',
+ 'iconv_get_encoding','iconv_mime_decode',
+ 'iconv_mime_decode_headers','iconv_mime_encode',
+ 'iconv_set_encoding','iconv_strlen','iconv_strpos','iconv_strrpos',
+ 'iconv_substr','id3_get_frame_long_name','id3_get_frame_short_name',
+ 'id3_get_genre_id','id3_get_genre_list','id3_get_genre_name',
+ 'id3_get_tag','id3_get_version','id3_remove_tag','id3_set_tag',
+ 'idate','ignore_user_abort','image_type_to_extension',
+ 'image_type_to_mime_type','image2wbmp','imagealphablending',
+ 'imageantialias','imagearc','imagechar','imagecharup',
+ 'imagecolorallocate','imagecolorallocatealpha','imagecolorat',
+ 'imagecolorclosest','imagecolorclosestalpha','imagecolordeallocate',
+ 'imagecolorexact','imagecolorexactalpha','imagecolormatch',
+ 'imagecolorresolve','imagecolorresolvealpha','imagecolorset',
+ 'imagecolorsforindex','imagecolorstotal','imagecolortransparent',
+ 'imageconvolution','imagecopy','imagecopymerge',
+ 'imagecopymergegray','imagecopyresampled','imagecopyresized',
+ 'imagecreate','imagecreatefromgd','imagecreatefromgd2',
+ 'imagecreatefromgd2part','imagecreatefromgif','imagecreatefromjpeg',
+ 'imagecreatefrompng','imagecreatefromstring','imagecreatefromwbmp',
+ 'imagecreatefromxbm','imagecreatetruecolor','imagedashedline',
+ 'imagedestroy','imageellipse','imagefill','imagefilledarc',
+ 'imagefilledellipse','imagefilledpolygon','imagefilledrectangle',
+ 'imagefilltoborder','imagefilter','imagefontheight',
+ 'imagefontwidth','imageftbbox','imagefttext','imagegammacorrect',
+ 'imagegd','imagegd2','imagegif','imagegrabscreen','imagegrabwindow',
+ 'imageinterlace','imageistruecolor','imagejpeg','imagelayereffect',
+ 'imageline','imageloadfont','imagepalettecopy','imagepng',
+ 'imagepolygon','imagepsbbox','imagepsencodefont',
+ 'imagepsextendfont','imagepsfreefont','imagepsloadfont',
+ 'imagepsslantfont','imagepstext','imagerectangle','imagerotate',
+ 'imagesavealpha','imagesetbrush','imagesetpixel','imagesetstyle',
+ 'imagesetthickness','imagesettile','imagestring','imagestringup',
+ 'imagesx','imagesy','imagetruecolortopalette','imagettfbbox',
+ 'imagettftext','imagetypes','imagewbmp','imagexbm','imap_8bit',
+ 'imap_alerts','imap_append','imap_base64','imap_binary','imap_body',
+ 'imap_bodystruct','imap_check','imap_clearflag_full','imap_close',
+ 'imap_create','imap_createmailbox','imap_delete',
+ 'imap_deletemailbox','imap_errors','imap_expunge',
+ 'imap_fetch_overview','imap_fetchbody','imap_fetchheader',
+ 'imap_fetchstructure','imap_fetchtext','imap_get_quota',
+ 'imap_get_quotaroot','imap_getacl','imap_getmailboxes',
+ 'imap_getsubscribed','imap_header','imap_headerinfo','imap_headers',
+ 'imap_last_error','imap_list','imap_listmailbox',
+ 'imap_listsubscribed','imap_lsub','imap_mail','imap_mail_compose',
+ 'imap_mail_copy','imap_mail_move','imap_mailboxmsginfo',
+ 'imap_mime_header_decode','imap_msgno','imap_num_msg',
+ 'imap_num_recent','imap_open','imap_ping','imap_qprint',
+ 'imap_rename','imap_renamemailbox','imap_reopen',
+ 'imap_rfc822_parse_adrlist','imap_rfc822_parse_headers',
+ 'imap_rfc822_write_address','imap_savebody','imap_scan',
+ 'imap_scanmailbox','imap_search','imap_set_quota','imap_setacl',
+ 'imap_setflag_full','imap_sort','imap_status','imap_subscribe',
+ 'imap_thread','imap_timeout','imap_uid','imap_undelete',
+ 'imap_unsubscribe','imap_utf7_decode','imap_utf7_encode',
+ 'imap_utf8','implode','import_request_variables','in_array',
+ 'ini_alter','ini_get','ini_get_all','ini_restore','ini_set',
+ 'intval','ip2long','iptcembed','iptcparse','isset','is_a',
+ 'is_array','is_bool','is_callable','is_dir','is_double',
+ 'is_executable','is_file','is_finite','is_float','is_infinite',
+ 'is_int','is_integer','is_link','is_long','is_nan','is_null',
+ 'is_numeric','is_object','is_readable','is_real','is_resource',
+ 'is_scalar','is_soap_fault','is_string','is_subclass_of',
+ 'is_uploaded_file','is_writable','is_writeable','iterator_apply',
+ 'iterator_count','iterator_to_array','java_last_exception_clear',
+ 'java_last_exception_get','jddayofweek','jdmonthname','jdtofrench',
+ 'jdtogregorian','jdtojewish','jdtojulian','jdtounix','jewishtojd',
+ 'join','jpeg2wbmp','json_decode','json_encode','juliantojd','key',
+ 'key_exists','krsort','ksort','lcg_value','ldap_add','ldap_bind',
+ 'ldap_close','ldap_compare','ldap_connect','ldap_count_entries',
+ 'ldap_delete','ldap_dn2ufn','ldap_err2str','ldap_errno',
+ 'ldap_error','ldap_explode_dn','ldap_first_attribute',
+ 'ldap_first_entry','ldap_first_reference','ldap_free_result',
+ 'ldap_get_attributes','ldap_get_dn','ldap_get_entries',
+ 'ldap_get_option','ldap_get_values','ldap_get_values_len',
+ 'ldap_list','ldap_mod_add','ldap_mod_del','ldap_mod_replace',
+ 'ldap_modify','ldap_next_attribute','ldap_next_entry',
+ 'ldap_next_reference','ldap_parse_reference','ldap_parse_result',
+ 'ldap_read','ldap_rename','ldap_search','ldap_set_option',
+ 'ldap_sort','ldap_start_tls','ldap_unbind','levenshtein',
+ 'libxml_clear_errors','libxml_get_errors','libxml_get_last_error',
+ 'libxml_set_streams_context','libxml_use_internal_errors','link',
+ 'linkinfo','list','localeconv','localtime','log','log1p','log10',
+ 'long2ip','lstat','ltrim','lzf_compress','lzf_decompress',
+ 'lzf_optimized_for','magic_quotes_runtime','mail','max','mbereg',
+ 'mberegi','mberegi_replace','mbereg_match','mbereg_replace',
+ 'mbereg_search','mbereg_search_getpos','mbereg_search_getregs',
+ 'mbereg_search_init','mbereg_search_pos','mbereg_search_regs',
+ 'mbereg_search_setpos','mbregex_encoding','mbsplit','mbstrcut',
+ 'mbstrlen','mbstrpos','mbstrrpos','mbsubstr','mb_check_encoding',
+ 'mb_convert_case','mb_convert_encoding','mb_convert_kana',
+ 'mb_convert_variables','mb_decode_mimeheader',
+ 'mb_decode_numericentity','mb_detect_encoding','mb_detect_order',
+ 'mb_encode_mimeheader','mb_encode_numericentity','mb_ereg',
+ 'mb_eregi','mb_eregi_replace','mb_ereg_match','mb_ereg_replace',
+ 'mb_ereg_search','mb_ereg_search_getpos','mb_ereg_search_getregs',
+ 'mb_ereg_search_init','mb_ereg_search_pos','mb_ereg_search_regs',
+ 'mb_ereg_search_setpos','mb_get_info','mb_http_input',
+ 'mb_http_output','mb_internal_encoding','mb_language',
+ 'mb_list_encodings','mb_output_handler','mb_parse_str',
+ 'mb_preferred_mime_name','mb_regex_encoding','mb_regex_set_options',
+ 'mb_send_mail','mb_split','mb_strcut','mb_strimwidth','mb_stripos',
+ 'mb_stristr','mb_strlen','mb_strpos','mb_strrchr','mb_strrichr',
+ 'mb_strripos','mb_strrpos','mb_strstr','mb_strtolower',
+ 'mb_strtoupper','mb_strwidth','mb_substitute_character','mb_substr',
+ 'mb_substr_count','mcrypt_cbc','mcrypt_cfb','mcrypt_create_iv',
+ 'mcrypt_decrypt','mcrypt_ecb','mcrypt_enc_get_algorithms_name',
+ 'mcrypt_enc_get_block_size','mcrypt_enc_get_iv_size',
+ 'mcrypt_enc_get_key_size','mcrypt_enc_get_modes_name',
+ 'mcrypt_enc_get_supported_key_sizes',
+ 'mcrypt_enc_is_block_algorithm',
+ 'mcrypt_enc_is_block_algorithm_mode','mcrypt_enc_is_block_mode',
+ 'mcrypt_enc_self_test','mcrypt_encrypt','mcrypt_generic',
+ 'mcrypt_generic_deinit','mcrypt_generic_end','mcrypt_generic_init',
+ 'mcrypt_get_block_size','mcrypt_get_cipher_name',
+ 'mcrypt_get_iv_size','mcrypt_get_key_size','mcrypt_list_algorithms',
+ 'mcrypt_list_modes','mcrypt_module_close',
+ 'mcrypt_module_get_algo_block_size',
+ 'mcrypt_module_get_algo_key_size',
+ 'mcrypt_module_get_supported_key_sizes',
+ 'mcrypt_module_is_block_algorithm',
+ 'mcrypt_module_is_block_algorithm_mode',
+ 'mcrypt_module_is_block_mode','mcrypt_module_open',
+ 'mcrypt_module_self_test','mcrypt_ofb','md5','md5_file',
+ 'mdecrypt_generic','memcache_add','memcache_add_server',
+ 'memcache_close','memcache_connect','memcache_debug',
+ 'memcache_decrement','memcache_delete','memcache_flush',
+ 'memcache_get','memcache_get_extended_stats',
+ 'memcache_get_server_status','memcache_get_stats',
+ 'memcache_get_version','memcache_increment','memcache_pconnect',
+ 'memcache_replace','memcache_set','memcache_set_compress_threshold',
+ 'memcache_set_server_params','memory_get_peak_usage',
+ 'memory_get_usage','metaphone','mhash','mhash_count',
+ 'mhash_get_block_size','mhash_get_hash_name','mhash_keygen_s2k',
+ 'method_exists','microtime','mime_content_type','min',
+ 'ming_keypress','ming_setcubicthreshold','ming_setscale',
+ 'ming_useconstants','ming_useswfversion','mkdir','mktime',
+ 'money_format','move_uploaded_file','msql','msql_affected_rows',
+ 'msql_close','msql_connect','msql_create_db','msql_createdb',
+ 'msql_data_seek','msql_db_query','msql_dbname','msql_drop_db',
+ 'msql_dropdb','msql_error','msql_fetch_array','msql_fetch_field',
+ 'msql_fetch_object','msql_fetch_row','msql_field_flags',
+ 'msql_field_len','msql_field_name','msql_field_seek',
+ 'msql_field_table','msql_field_type','msql_fieldflags',
+ 'msql_fieldlen','msql_fieldname','msql_fieldtable','msql_fieldtype',
+ 'msql_free_result','msql_freeresult','msql_list_dbs',
+ 'msql_list_fields','msql_list_tables','msql_listdbs',
+ 'msql_listfields','msql_listtables','msql_num_fields',
+ 'msql_num_rows','msql_numfields','msql_numrows','msql_pconnect',
+ 'msql_query','msql_regcase','msql_result','msql_select_db',
+ 'msql_selectdb','msql_tablename','mssql_bind','mssql_close',
+ 'mssql_connect','mssql_data_seek','mssql_execute',
+ 'mssql_fetch_array','mssql_fetch_assoc','mssql_fetch_batch',
+ 'mssql_fetch_field','mssql_fetch_object','mssql_fetch_row',
+ 'mssql_field_length','mssql_field_name','mssql_field_seek',
+ 'mssql_field_type','mssql_free_result','mssql_free_statement',
+ 'mssql_get_last_message','mssql_guid_string','mssql_init',
+ 'mssql_min_error_severity','mssql_min_message_severity',
+ 'mssql_next_result','mssql_num_fields','mssql_num_rows',
+ 'mssql_pconnect','mssql_query','mssql_result','mssql_rows_affected',
+ 'mssql_select_db','mt_getrandmax','mt_rand','mt_srand','mysql',
+ 'mysql_affected_rows','mysql_client_encoding','mysql_close',
+ 'mysql_connect','mysql_createdb','mysql_create_db',
+ 'mysql_data_seek','mysql_dbname','mysql_db_name','mysql_db_query',
+ 'mysql_dropdb','mysql_drop_db','mysql_errno','mysql_error',
+ 'mysql_escape_string','mysql_fetch_array','mysql_fetch_assoc',
+ 'mysql_fetch_field','mysql_fetch_lengths','mysql_fetch_object',
+ 'mysql_fetch_row','mysql_fieldflags','mysql_fieldlen',
+ 'mysql_fieldname','mysql_fieldtable','mysql_fieldtype',
+ 'mysql_field_flags','mysql_field_len','mysql_field_name',
+ 'mysql_field_seek','mysql_field_table','mysql_field_type',
+ 'mysql_freeresult','mysql_free_result','mysql_get_client_info',
+ 'mysql_get_host_info','mysql_get_proto_info',
+ 'mysql_get_server_info','mysql_info','mysql_insert_id',
+ 'mysql_listdbs','mysql_listfields','mysql_listtables',
+ 'mysql_list_dbs','mysql_list_fields','mysql_list_processes',
+ 'mysql_list_tables','mysql_numfields','mysql_numrows',
+ 'mysql_num_fields','mysql_num_rows','mysql_pconnect','mysql_ping',
+ 'mysql_query','mysql_real_escape_string','mysql_result',
+ 'mysql_selectdb','mysql_select_db','mysql_set_charset','mysql_stat',
+ 'mysql_tablename','mysql_table_name','mysql_thread_id',
+ 'mysql_unbuffered_query','mysqli_affected_rows','mysqli_autocommit',
+ 'mysqli_bind_param','mysqli_bind_result','mysqli_change_user',
+ 'mysqli_character_set_name','mysqli_client_encoding','mysqli_close',
+ 'mysqli_commit','mysqli_connect','mysqli_connect_errno',
+ 'mysqli_connect_error','mysqli_data_seek','mysqli_debug',
+ 'mysqli_disable_reads_from_master','mysqli_disable_rpl_parse',
+ 'mysqli_dump_debug_info','mysqli_embedded_server_end',
+ 'mysqli_embedded_server_start','mysqli_enable_reads_from_master',
+ 'mysqli_enable_rpl_parse','mysqli_errno','mysqli_error',
+ 'mysqli_escape_string','mysqli_execute','mysqli_fetch',
+ 'mysqli_fetch_array','mysqli_fetch_assoc','mysqli_fetch_field',
+ 'mysqli_fetch_field_direct','mysqli_fetch_fields',
+ 'mysqli_fetch_lengths','mysqli_fetch_object','mysqli_fetch_row',
+ 'mysqli_field_count','mysqli_field_seek','mysqli_field_tell',
+ 'mysqli_free_result','mysqli_get_charset','mysqli_get_client_info',
+ 'mysqli_get_client_version','mysqli_get_host_info',
+ 'mysqli_get_metadata','mysqli_get_proto_info',
+ 'mysqli_get_server_info','mysqli_get_server_version',
+ 'mysqli_get_warnings','mysqli_info','mysqli_init',
+ 'mysqli_insert_id','mysqli_kill','mysqli_master_query',
+ 'mysqli_more_results','mysqli_multi_query','mysqli_next_result',
+ 'mysqli_num_fields','mysqli_num_rows','mysqli_options',
+ 'mysqli_param_count','mysqli_ping','mysqli_prepare','mysqli_query',
+ 'mysqli_real_connect','mysqli_real_escape_string',
+ 'mysqli_real_query','mysqli_report','mysqli_rollback',
+ 'mysqli_rpl_parse_enabled','mysqli_rpl_probe',
+ 'mysqli_rpl_query_type','mysqli_select_db','mysqli_send_long_data',
+ 'mysqli_send_query','mysqli_set_charset',
+ 'mysqli_set_local_infile_default','mysqli_set_local_infile_handler',
+ 'mysqli_set_opt','mysqli_slave_query','mysqli_sqlstate',
+ 'mysqli_ssl_set','mysqli_stat','mysqli_stmt_affected_rows',
+ 'mysqli_stmt_attr_get','mysqli_stmt_attr_set',
+ 'mysqli_stmt_bind_param','mysqli_stmt_bind_result',
+ 'mysqli_stmt_close','mysqli_stmt_data_seek','mysqli_stmt_errno',
+ 'mysqli_stmt_error','mysqli_stmt_execute','mysqli_stmt_fetch',
+ 'mysqli_stmt_field_count','mysqli_stmt_free_result',
+ 'mysqli_stmt_get_warnings','mysqli_stmt_init',
+ 'mysqli_stmt_insert_id','mysqli_stmt_num_rows',
+ 'mysqli_stmt_param_count','mysqli_stmt_prepare','mysqli_stmt_reset',
+ 'mysqli_stmt_result_metadata','mysqli_stmt_send_long_data',
+ 'mysqli_stmt_sqlstate','mysqli_stmt_store_result',
+ 'mysqli_store_result','mysqli_thread_id','mysqli_thread_safe',
+ 'mysqli_use_result','mysqli_warning_count','natcasesort','natsort',
+ 'new_xmldoc','next','ngettext','nl2br','nl_langinfo',
+ 'ntuser_getdomaincontroller','ntuser_getusergroups',
+ 'ntuser_getuserinfo','ntuser_getuserlist','number_format',
+ 'ob_clean','ob_deflatehandler','ob_end_clean','ob_end_flush',
+ 'ob_etaghandler','ob_flush','ob_get_clean','ob_get_contents',
+ 'ob_get_flush','ob_get_length','ob_get_level','ob_get_status',
+ 'ob_gzhandler','ob_iconv_handler','ob_implicit_flush',
+ 'ob_inflatehandler','ob_list_handlers','ob_start','ob_tidyhandler',
+ 'octdec','odbc_autocommit','odbc_binmode','odbc_close',
+ 'odbc_close_all','odbc_columnprivileges','odbc_columns',
+ 'odbc_commit','odbc_connect','odbc_cursor','odbc_data_source',
+ 'odbc_do','odbc_error','odbc_errormsg','odbc_exec','odbc_execute',
+ 'odbc_fetch_array','odbc_fetch_into','odbc_fetch_object',
+ 'odbc_fetch_row','odbc_field_len','odbc_field_name',
+ 'odbc_field_num','odbc_field_precision','odbc_field_scale',
+ 'odbc_field_type','odbc_foreignkeys','odbc_free_result',
+ 'odbc_gettypeinfo','odbc_longreadlen','odbc_next_result',
+ 'odbc_num_fields','odbc_num_rows','odbc_pconnect','odbc_prepare',
+ 'odbc_primarykeys','odbc_procedurecolumns','odbc_procedures',
+ 'odbc_result','odbc_result_all','odbc_rollback','odbc_setoption',
+ 'odbc_specialcolumns','odbc_statistics','odbc_tableprivileges',
+ 'odbc_tables','opendir','openlog','openssl_csr_export',
+ 'openssl_csr_export_to_file','openssl_csr_get_public_key',
+ 'openssl_csr_get_subject','openssl_csr_new','openssl_csr_sign',
+ 'openssl_error_string','openssl_free_key','openssl_get_privatekey',
+ 'openssl_get_publickey','openssl_open','openssl_pkcs12_export',
+ 'openssl_pkcs12_export_to_file','openssl_pkcs12_read',
+ 'openssl_pkcs7_decrypt','openssl_pkcs7_encrypt',
+ 'openssl_pkcs7_sign','openssl_pkcs7_verify','openssl_pkey_export',
+ 'openssl_pkey_export_to_file','openssl_pkey_free',
+ 'openssl_pkey_get_details','openssl_pkey_get_private',
+ 'openssl_pkey_get_public','openssl_pkey_new',
+ 'openssl_private_decrypt','openssl_private_encrypt',
+ 'openssl_public_decrypt','openssl_public_encrypt','openssl_seal',
+ 'openssl_sign','openssl_verify','openssl_x509_checkpurpose',
+ 'openssl_x509_check_private_key','openssl_x509_export',
+ 'openssl_x509_export_to_file','openssl_x509_free',
+ 'openssl_x509_parse','openssl_x509_read','ord',
+ 'output_add_rewrite_var','output_reset_rewrite_vars','overload',
+ 'outputdebugstring','pack','parse_ini_file','parse_str','parse_url',
+ 'parsekit_compile_file','parsekit_compile_string',
+ 'parsekit_func_arginfo','parsekit_opcode_flags',
+ 'parsekit_opcode_name','passthru','pathinfo','pclose',
+ 'pdf_add_bookmark','pdf_add_launchlink','pdf_add_locallink',
+ 'pdf_add_nameddest','pdf_add_note','pdf_add_pdflink',
+ 'pdf_add_thumbnail','pdf_add_weblink','pdf_arc','pdf_arcn',
+ 'pdf_attach_file','pdf_begin_font','pdf_begin_glyph',
+ 'pdf_begin_page','pdf_begin_pattern','pdf_begin_template',
+ 'pdf_circle','pdf_clip','pdf_close','pdf_close_image',
+ 'pdf_close_pdi','pdf_close_pdi_page','pdf_closepath',
+ 'pdf_closepath_fill_stroke','pdf_closepath_stroke','pdf_concat',
+ 'pdf_continue_text','pdf_create_gstate','pdf_create_pvf',
+ 'pdf_curveto','pdf_delete','pdf_delete_pvf','pdf_encoding_set_char',
+ 'pdf_end_font','pdf_end_glyph','pdf_end_page','pdf_end_pattern',
+ 'pdf_end_template','pdf_endpath','pdf_fill','pdf_fill_imageblock',
+ 'pdf_fill_pdfblock','pdf_fill_stroke','pdf_fill_textblock',
+ 'pdf_findfont','pdf_fit_image','pdf_fit_pdi_page',
+ 'pdf_fit_textline','pdf_get_apiname','pdf_get_buffer',
+ 'pdf_get_errmsg','pdf_get_errnum','pdf_get_parameter',
+ 'pdf_get_pdi_parameter','pdf_get_pdi_value','pdf_get_value',
+ 'pdf_initgraphics','pdf_lineto','pdf_load_font',
+ 'pdf_load_iccprofile','pdf_load_image','pdf_makespotcolor',
+ 'pdf_moveto','pdf_new','pdf_open_ccitt','pdf_open_file',
+ 'pdf_open_image','pdf_open_image_file','pdf_open_pdi',
+ 'pdf_open_pdi_page','pdf_place_image','pdf_place_pdi_page',
+ 'pdf_process_pdi','pdf_rect','pdf_restore','pdf_rotate','pdf_save',
+ 'pdf_scale','pdf_set_border_color','pdf_set_border_dash',
+ 'pdf_set_border_style','pdf_set_gstate','pdf_set_info',
+ 'pdf_set_parameter','pdf_set_text_pos','pdf_set_value',
+ 'pdf_setcolor','pdf_setdash','pdf_setdashpattern','pdf_setflat',
+ 'pdf_setfont','pdf_setlinecap','pdf_setlinejoin','pdf_setlinewidth',
+ 'pdf_setmatrix','pdf_setmiterlimit','pdf_setpolydash','pdf_shading',
+ 'pdf_shading_pattern','pdf_shfill','pdf_show','pdf_show_boxed',
+ 'pdf_show_xy','pdf_skew','pdf_stringwidth','pdf_stroke',
+ 'pdf_translate','pdo_drivers','pfsockopen','pg_affected_rows',
+ 'pg_cancel_query','pg_clientencoding','pg_client_encoding',
+ 'pg_close','pg_cmdtuples','pg_connect','pg_connection_busy',
+ 'pg_connection_reset','pg_connection_status','pg_convert',
+ 'pg_copy_from','pg_copy_to','pg_dbname','pg_delete','pg_end_copy',
+ 'pg_errormessage','pg_escape_bytea','pg_escape_string','pg_exec',
+ 'pg_execute','pg_fetch_all','pg_fetch_all_columns','pg_fetch_array',
+ 'pg_fetch_assoc','pg_fetch_object','pg_fetch_result','pg_fetch_row',
+ 'pg_fieldisnull','pg_fieldname','pg_fieldnum','pg_fieldprtlen',
+ 'pg_fieldsize','pg_fieldtype','pg_field_is_null','pg_field_name',
+ 'pg_field_num','pg_field_prtlen','pg_field_size','pg_field_table',
+ 'pg_field_type','pg_field_type_oid','pg_free_result',
+ 'pg_freeresult','pg_get_notify','pg_get_pid','pg_get_result',
+ 'pg_getlastoid','pg_host','pg_insert','pg_last_error',
+ 'pg_last_notice','pg_last_oid','pg_loclose','pg_locreate',
+ 'pg_loexport','pg_loimport','pg_loopen','pg_loread','pg_loreadall',
+ 'pg_lounlink','pg_lowrite','pg_lo_close','pg_lo_create',
+ 'pg_lo_export','pg_lo_import','pg_lo_open','pg_lo_read',
+ 'pg_lo_read_all','pg_lo_seek','pg_lo_tell','pg_lo_unlink',
+ 'pg_lo_write','pg_meta_data','pg_numfields','pg_numrows',
+ 'pg_num_fields','pg_num_rows','pg_options','pg_parameter_status',
+ 'pg_pconnect','pg_ping','pg_port','pg_prepare','pg_put_line',
+ 'pg_query','pg_query_params','pg_result','pg_result_error',
+ 'pg_result_error_field','pg_result_seek','pg_result_status',
+ 'pg_select','pg_send_execute','pg_send_prepare','pg_send_query',
+ 'pg_send_query_params','pg_set_client_encoding',
+ 'pg_set_error_verbosity','pg_setclientencoding','pg_trace',
+ 'pg_transaction_status','pg_tty','pg_unescape_bytea','pg_untrace',
+ 'pg_update','pg_version','php_egg_logo_guid','php_ini_loaded_file',
+ 'php_ini_scanned_files','php_logo_guid','php_real_logo_guid',
+ 'php_sapi_name','php_strip_whitespace','php_uname','phpcredits',
+ 'phpdoc_xml_from_string','phpinfo','phpversion','pi','png2wbmp',
+ 'pop3_close','pop3_delete_message','pop3_get_account_size',
+ 'pop3_get_message','pop3_get_message_count',
+ 'pop3_get_message_header','pop3_get_message_ids',
+ 'pop3_get_message_size','pop3_get_message_sizes','pop3_open',
+ 'pop3_undelete','popen','pos','posix_ctermid','posix_errno',
+ 'posix_getcwd','posix_getegid','posix_geteuid','posix_getgid',
+ 'posix_getgrgid','posix_getgrnam','posix_getgroups',
+ 'posix_getlogin','posix_getpgid','posix_getpgrp','posix_getpid',
+ 'posix_getppid','posix_getpwnam','posix_getpwuid','posix_getrlimit',
+ 'posix_getsid','posix_getuid','posix_get_last_error','posix_isatty',
+ 'posix_kill','posix_mkfifo','posix_setegid','posix_seteuid',
+ 'posix_setgid','posix_setpgid','posix_setsid','posix_setuid',
+ 'posix_strerror','posix_times','posix_ttyname','posix_uname','pow',
+ 'preg_grep','preg_last_error','preg_match','preg_match_all',
+ 'preg_quote','preg_replace','preg_replace_callback','preg_split',
+ 'prev','print_r','printf','proc_close','proc_get_status',
+ 'proc_open','proc_terminate','putenv','quoted_printable_decode',
+ 'quotemeta','rad2deg','radius_acct_open','radius_add_server',
+ 'radius_auth_open','radius_close','radius_config',
+ 'radius_create_request','radius_cvt_addr','radius_cvt_int',
+ 'radius_cvt_string','radius_demangle','radius_demangle_mppe_key',
+ 'radius_get_attr','radius_get_vendor_attr','radius_put_addr',
+ 'radius_put_attr','radius_put_int','radius_put_string',
+ 'radius_put_vendor_addr','radius_put_vendor_attr',
+ 'radius_put_vendor_int','radius_put_vendor_string',
+ 'radius_request_authenticator','radius_send_request',
+ 'radius_server_secret','radius_strerror','rand','range',
+ 'rawurldecode','rawurlencode','read_exif_data','readdir','readfile',
+ 'readgzfile','readlink','realpath','reg_close_key','reg_create_key',
+ 'reg_enum_key','reg_enum_value','reg_get_value','reg_open_key',
+ 'reg_set_value','register_shutdown_function',
+ 'register_tick_function','rename','res_close','res_get','res_list',
+ 'res_list_type','res_open','res_set','reset',
+ 'restore_error_handler','restore_include_path','rewind','rewinddir',
+ 'rmdir','round','rsort','rtrim','runkit_class_adopt',
+ 'runkit_class_emancipate','runkit_constant_add',
+ 'runkit_constant_redefine','runkit_constant_remove',
+ 'runkit_default_property_add','runkit_function_add',
+ 'runkit_function_copy','runkit_function_redefine',
+ 'runkit_function_remove','runkit_function_rename','runkit_import',
+ 'runkit_lint','runkit_lint_file','runkit_method_add',
+ 'runkit_method_copy','runkit_method_redefine',
+ 'runkit_method_remove','runkit_method_rename','runkit_object_id',
+ 'runkit_return_value_used','runkit_sandbox_output_handler',
+ 'runkit_superglobals','runkit_zval_inspect','scandir','sem_acquire',
+ 'sem_get','sem_release','sem_remove','serialize',
+ 'session_cache_expire','session_cache_limiter','session_commit',
+ 'session_decode','session_destroy','session_encode',
+ 'session_get_cookie_params','session_id','session_is_registered',
+ 'session_module_name','session_name','session_regenerate_id',
+ 'session_register','session_save_path','session_set_cookie_params',
+ 'session_set_save_handler','session_start','session_unregister',
+ 'session_unset','session_write_close','set_content',
+ 'set_error_handler','set_file_buffer','set_include_path',
+ 'set_magic_quotes_runtime','set_socket_blocking','set_time_limit',
+ 'setcookie','setlocale','setrawcookie','settype','sha1','sha1_file',
+ 'shell_exec','shmop_close','shmop_delete','shmop_open','shmop_read',
+ 'shmop_size','shmop_write','shm_attach','shm_detach','shm_get_var',
+ 'shm_put_var','shm_remove','shm_remove_var','show_source','shuffle',
+ 'similar_text','simplexml_import_dom','simplexml_load_file',
+ 'simplexml_load_string','sin','sinh','sizeof','sleep','smtp_close',
+ 'smtp_cmd_data','smtp_cmd_mail','smtp_cmd_rcpt','smtp_connect',
+ 'snmp_get_quick_print','snmp_get_valueretrieval','snmp_read_mib',
+ 'snmp_set_quick_print','snmp_set_valueretrieval','snmp2_get',
+ 'snmp2_getnext','snmp2_real_walk','snmp2_set','snmp2_walk',
+ 'snmp3_get','snmp3_getnext','snmp3_real_walk','snmp3_set',
+ 'snmp3_walk','snmpget','snmpgetnext','snmprealwalk','snmpset',
+ 'snmpwalk','snmpwalkoid','socket_accept','socket_bind',
+ 'socket_clear_error','socket_close','socket_connect',
+ 'socket_create','socket_create_listen','socket_create_pair',
+ 'socket_getopt','socket_getpeername','socket_getsockname',
+ 'socket_get_option','socket_get_status','socket_iovec_add',
+ 'socket_iovec_alloc','socket_iovec_delete','socket_iovec_fetch',
+ 'socket_iovec_free','socket_iovec_set','socket_last_error',
+ 'socket_listen','socket_read','socket_readv','socket_recv',
+ 'socket_recvfrom','socket_recvmsg','socket_select','socket_send',
+ 'socket_sendmsg','socket_sendto','socket_setopt','socket_set_block',
+ 'socket_set_blocking','socket_set_nonblock','socket_set_option',
+ 'socket_set_timeout','socket_shutdown','socket_strerror',
+ 'socket_write','socket_writev','sort','soundex','spl_autoload',
+ 'spl_autoload_call','spl_autoload_extensions',
+ 'spl_autoload_functions','spl_autoload_register',
+ 'spl_autoload_unregister','spl_classes','spl_object_hash','split',
+ 'spliti','sprintf','sql_regcase','sqlite_array_query',
+ 'sqlite_busy_timeout','sqlite_changes','sqlite_close',
+ 'sqlite_column','sqlite_create_aggregate','sqlite_create_function',
+ 'sqlite_current','sqlite_error_string','sqlite_escape_string',
+ 'sqlite_exec','sqlite_factory','sqlite_fetch_all',
+ 'sqlite_fetch_array','sqlite_fetch_column_types',
+ 'sqlite_fetch_object','sqlite_fetch_single','sqlite_fetch_string',
+ 'sqlite_field_name','sqlite_has_more','sqlite_has_prev',
+ 'sqlite_last_error','sqlite_last_insert_rowid','sqlite_libencoding',
+ 'sqlite_libversion','sqlite_next','sqlite_num_fields',
+ 'sqlite_num_rows','sqlite_open','sqlite_popen','sqlite_prev',
+ 'sqlite_query','sqlite_rewind','sqlite_seek','sqlite_single_query',
+ 'sqlite_udf_decode_binary','sqlite_udf_encode_binary',
+ 'sqlite_unbuffered_query','sqlite_valid','sqrt','srand','sscanf',
+ 'ssh2_auth_hostbased_file','ssh2_auth_none','ssh2_auth_password',
+ 'ssh2_auth_pubkey_file','ssh2_connect','ssh2_exec',
+ 'ssh2_fetch_stream','ssh2_fingerprint','ssh2_forward_accept',
+ 'ssh2_forward_listen','ssh2_methods_negotiated','ssh2_poll',
+ 'ssh2_publickey_add','ssh2_publickey_init','ssh2_publickey_list',
+ 'ssh2_publickey_remove','ssh2_scp_recv','ssh2_scp_send','ssh2_sftp',
+ 'ssh2_sftp_lstat','ssh2_sftp_mkdir','ssh2_sftp_readlink',
+ 'ssh2_sftp_realpath','ssh2_sftp_rename','ssh2_sftp_rmdir',
+ 'ssh2_sftp_stat','ssh2_sftp_symlink','ssh2_sftp_unlink',
+ 'ssh2_shell','ssh2_tunnel','stat','stats_absolute_deviation',
+ 'stats_cdf_beta','stats_cdf_binomial','stats_cdf_cauchy',
+ 'stats_cdf_chisquare','stats_cdf_exponential','stats_cdf_f',
+ 'stats_cdf_gamma','stats_cdf_laplace','stats_cdf_logistic',
+ 'stats_cdf_negative_binomial','stats_cdf_noncentral_chisquare',
+ 'stats_cdf_noncentral_f','stats_cdf_noncentral_t',
+ 'stats_cdf_normal','stats_cdf_poisson','stats_cdf_t',
+ 'stats_cdf_uniform','stats_cdf_weibull','stats_covariance',
+ 'stats_dens_beta','stats_dens_cauchy','stats_dens_chisquare',
+ 'stats_dens_exponential','stats_dens_f','stats_dens_gamma',
+ 'stats_dens_laplace','stats_dens_logistic','stats_dens_normal',
+ 'stats_dens_pmf_binomial','stats_dens_pmf_hypergeometric',
+ 'stats_dens_pmf_negative_binomial','stats_dens_pmf_poisson',
+ 'stats_dens_t','stats_dens_uniform','stats_dens_weibull',
+ 'stats_harmonic_mean','stats_kurtosis','stats_rand_gen_beta',
+ 'stats_rand_gen_chisquare','stats_rand_gen_exponential',
+ 'stats_rand_gen_f','stats_rand_gen_funiform','stats_rand_gen_gamma',
+ 'stats_rand_gen_ipoisson','stats_rand_gen_iuniform',
+ 'stats_rand_gen_noncenral_f','stats_rand_gen_noncentral_chisquare',
+ 'stats_rand_gen_noncentral_t','stats_rand_gen_normal',
+ 'stats_rand_gen_t','stats_rand_getsd','stats_rand_ibinomial',
+ 'stats_rand_ibinomial_negative','stats_rand_ignlgi',
+ 'stats_rand_phrase_to_seeds','stats_rand_ranf','stats_rand_setall',
+ 'stats_skew','stats_standard_deviation','stats_stat_binomial_coef',
+ 'stats_stat_correlation','stats_stat_factorial',
+ 'stats_stat_independent_t','stats_stat_innerproduct',
+ 'stats_stat_paired_t','stats_stat_percentile','stats_stat_powersum',
+ 'stats_variance','strcasecmp','strchr','strcmp','strcoll','strcspn',
+ 'stream_bucket_append','stream_bucket_make_writeable',
+ 'stream_bucket_new','stream_bucket_prepend','stream_context_create',
+ 'stream_context_get_default','stream_context_get_options',
+ 'stream_context_set_default','stream_context_set_option',
+ 'stream_context_set_params','stream_copy_to_stream',
+ 'stream_encoding','stream_filter_append','stream_filter_prepend',
+ 'stream_filter_register','stream_filter_remove',
+ 'stream_get_contents','stream_get_filters','stream_get_line',
+ 'stream_get_meta_data','stream_get_transports',
+ 'stream_get_wrappers','stream_is_local',
+ 'stream_notification_callback','stream_register_wrapper',
+ 'stream_resolve_include_path','stream_select','stream_set_blocking',
+ 'stream_set_timeout','stream_set_write_buffer',
+ 'stream_socket_accept','stream_socket_client',
+ 'stream_socket_enable_crypto','stream_socket_get_name',
+ 'stream_socket_pair','stream_socket_recvfrom',
+ 'stream_socket_sendto','stream_socket_server',
+ 'stream_socket_shutdown','stream_supports_lock',
+ 'stream_wrapper_register','stream_wrapper_restore',
+ 'stream_wrapper_unregister','strftime','stripcslashes','stripos',
+ 'stripslashes','strip_tags','stristr','strlen','strnatcasecmp',
+ 'strnatcmp','strpbrk','strncasecmp','strncmp','strpos','strrchr',
+ 'strrev','strripos','strrpos','strspn','strstr','strtok',
+ 'strtolower','strtotime','strtoupper','strtr','strval',
+ 'str_ireplace','str_pad','str_repeat','str_replace','str_rot13',
+ 'str_split','str_shuffle','str_word_count','substr',
+ 'substr_compare','substr_count','substr_replace','svn_add',
+ 'svn_auth_get_parameter','svn_auth_set_parameter','svn_cat',
+ 'svn_checkout','svn_cleanup','svn_client_version','svn_commit',
+ 'svn_diff','svn_export','svn_fs_abort_txn','svn_fs_apply_text',
+ 'svn_fs_begin_txn2','svn_fs_change_node_prop','svn_fs_check_path',
+ 'svn_fs_contents_changed','svn_fs_copy','svn_fs_delete',
+ 'svn_fs_dir_entries','svn_fs_file_contents','svn_fs_file_length',
+ 'svn_fs_is_dir','svn_fs_is_file','svn_fs_make_dir',
+ 'svn_fs_make_file','svn_fs_node_created_rev','svn_fs_node_prop',
+ 'svn_fs_props_changed','svn_fs_revision_prop',
+ 'svn_fs_revision_root','svn_fs_txn_root','svn_fs_youngest_rev',
+ 'svn_import','svn_info','svn_log','svn_ls','svn_repos_create',
+ 'svn_repos_fs','svn_repos_fs_begin_txn_for_commit',
+ 'svn_repos_fs_commit_txn','svn_repos_hotcopy','svn_repos_open',
+ 'svn_repos_recover','svn_status','svn_update','symlink',
+ 'sys_get_temp_dir','syslog','system','tan','tanh','tempnam',
+ 'textdomain','thread_get','thread_include','thread_lock',
+ 'thread_lock_try','thread_mutex_destroy','thread_mutex_init',
+ 'thread_set','thread_start','thread_unlock','tidy_access_count',
+ 'tidy_clean_repair','tidy_config_count','tidy_diagnose',
+ 'tidy_error_count','tidy_get_body','tidy_get_config',
+ 'tidy_get_error_buffer','tidy_get_head','tidy_get_html',
+ 'tidy_get_html_ver','tidy_get_output','tidy_get_release',
+ 'tidy_get_root','tidy_get_status','tidy_getopt','tidy_is_xhtml',
+ 'tidy_is_xml','tidy_parse_file','tidy_parse_string',
+ 'tidy_repair_file','tidy_repair_string','tidy_warning_count','time',
+ 'timezone_abbreviations_list','timezone_identifiers_list',
+ 'timezone_name_from_abbr','timezone_name_get','timezone_offset_get',
+ 'timezone_open','timezone_transitions_get','tmpfile',
+ 'token_get_all','token_name','touch','trigger_error',
+ 'transliterate','transliterate_filters_get','trim','uasort',
+ 'ucfirst','ucwords','uksort','umask','uniqid','unixtojd','unlink',
+ 'unpack','unregister_tick_function','unserialize','unset',
+ 'urldecode','urlencode','user_error','use_soap_error_handler',
+ 'usleep','usort','utf8_decode','utf8_encode','var_dump',
+ 'var_export','variant_abs','variant_add','variant_and',
+ 'variant_cast','variant_cat','variant_cmp',
+ 'variant_date_from_timestamp','variant_date_to_timestamp',
+ 'variant_div','variant_eqv','variant_fix','variant_get_type',
+ 'variant_idiv','variant_imp','variant_int','variant_mod',
+ 'variant_mul','variant_neg','variant_not','variant_or',
+ 'variant_pow','variant_round','variant_set','variant_set_type',
+ 'variant_sub','variant_xor','version_compare','virtual','vfprintf',
+ 'vprintf','vsprintf','wddx_add_vars','wddx_deserialize',
+ 'wddx_packet_end','wddx_packet_start','wddx_serialize_value',
+ 'wddx_serialize_vars','win_beep','win_browse_file',
+ 'win_browse_folder','win_create_link','win_message_box',
+ 'win_play_wav','win_shell_execute','win32_create_service',
+ 'win32_delete_service','win32_get_last_control_message',
+ 'win32_ps_list_procs','win32_ps_stat_mem','win32_ps_stat_proc',
+ 'win32_query_service_status','win32_scheduler_delete_task',
+ 'win32_scheduler_enum_tasks','win32_scheduler_get_task_info',
+ 'win32_scheduler_run','win32_scheduler_set_task_info',
+ 'win32_set_service_status','win32_start_service',
+ 'win32_start_service_ctrl_dispatcher','win32_stop_service',
+ 'wordwrap','xml_error_string','xml_get_current_byte_index',
+ 'xml_get_current_column_number','xml_get_current_line_number',
+ 'xml_get_error_code','xml_parse','xml_parser_create',
+ 'xml_parser_create_ns','xml_parser_free','xml_parser_get_option',
+ 'xml_parser_set_option','xml_parse_into_struct',
+ 'xml_set_character_data_handler','xml_set_default_handler',
+ 'xml_set_element_handler','xml_set_end_namespace_decl_handler',
+ 'xml_set_external_entity_ref_handler',
+ 'xml_set_notation_decl_handler','xml_set_object',
+ 'xml_set_processing_instruction_handler',
+ 'xml_set_start_namespace_decl_handler',
+ 'xml_set_unparsed_entity_decl_handler','xmldoc','xmldocfile',
+ 'xmlrpc_decode','xmlrpc_decode_request','xmlrpc_encode',
+ 'xmlrpc_encode_request','xmlrpc_get_type','xmlrpc_is_fault',
+ 'xmlrpc_parse_method_descriptions',
+ 'xmlrpc_server_add_introspection_data','xmlrpc_server_call_method',
+ 'xmlrpc_server_create','xmlrpc_server_destroy',
+ 'xmlrpc_server_register_introspection_callback',
+ 'xmlrpc_server_register_method','xmlrpc_set_type','xmltree',
+ 'xmlwriter_end_attribute','xmlwriter_end_cdata',
+ 'xmlwriter_end_comment','xmlwriter_end_document',
+ 'xmlwriter_end_dtd','xmlwriter_end_dtd_attlist',
+ 'xmlwriter_end_dtd_element','xmlwriter_end_dtd_entity',
+ 'xmlwriter_end_element','xmlwriter_end_pi','xmlwriter_flush',
+ 'xmlwriter_full_end_element','xmlwriter_open_memory',
+ 'xmlwriter_open_uri','xmlwriter_output_memory',
+ 'xmlwriter_set_indent','xmlwriter_set_indent_string',
+ 'xmlwriter_start_attribute','xmlwriter_start_attribute_ns',
+ 'xmlwriter_start_cdata','xmlwriter_start_comment',
+ 'xmlwriter_start_document','xmlwriter_start_dtd',
+ 'xmlwriter_start_dtd_attlist','xmlwriter_start_dtd_element',
+ 'xmlwriter_start_dtd_entity','xmlwriter_start_element',
+ 'xmlwriter_start_element_ns','xmlwriter_start_pi','xmlwriter_text',
+ 'xmlwriter_write_attribute','xmlwriter_write_attribute_ns',
+ 'xmlwriter_write_cdata','xmlwriter_write_comment',
+ 'xmlwriter_write_dtd','xmlwriter_write_dtd_attlist',
+ 'xmlwriter_write_dtd_element','xmlwriter_write_dtd_entity',
+ 'xmlwriter_write_element','xmlwriter_write_element_ns',
+ 'xmlwriter_write_pi','xmlwriter_write_raw','xpath_eval',
+ 'xpath_eval_expression','xpath_new_context','xpath_register_ns',
+ 'xpath_register_ns_auto','xptr_eval','xptr_new_context','yp_all',
+ 'yp_cat','yp_errno','yp_err_string','yp_first',
+ 'yp_get_default_domain','yp_master','yp_match','yp_next','yp_order',
+ 'zend_current_obfuscation_level','zend_get_cfg_var','zend_get_id',
+ 'zend_loader_current_file','zend_loader_enabled',
+ 'zend_loader_file_encoded','zend_loader_file_licensed',
+ 'zend_loader_install_license','zend_loader_version',
+ 'zend_logo_guid','zend_match_hostmasks','zend_obfuscate_class_name',
+ 'zend_obfuscate_function_name','zend_optimizer_version',
+ 'zend_runtime_obfuscate','zend_version','zip_close',
+ 'zip_entry_close','zip_entry_compressedsize',
+ 'zip_entry_compressionmethod','zip_entry_filesize','zip_entry_name',
+ 'zip_entry_open','zip_entry_read','zip_open','zip_read',
+ 'zlib_get_coding_type'
+ ),
+ 4 => array(
+ 'DEFAULT_INCLUDE_PATH', 'DIRECTORY_SEPARATOR', 'E_ALL',
+ 'E_COMPILE_ERROR', 'E_COMPILE_WARNING', 'E_CORE_ERROR',
+ 'E_CORE_WARNING', 'E_ERROR', 'E_NOTICE', 'E_PARSE', 'E_STRICT',
+ 'E_USER_ERROR', 'E_USER_NOTICE', 'E_USER_WARNING', 'E_WARNING',
+ 'ENT_COMPAT','ENT_QUOTES','ENT_NOQUOTES',
+ 'false', 'null', 'PEAR_EXTENSION_DIR', 'PEAR_INSTALL_DIR',
+ 'PHP_BINDIR', 'PHP_CONFIG_FILE_PATH', 'PHP_DATADIR',
+ 'PHP_EXTENSION_DIR', 'PHP_LIBDIR',
+ 'PHP_LOCALSTATEDIR', 'PHP_OS',
+ 'PHP_OUTPUT_HANDLER_CONT', 'PHP_OUTPUT_HANDLER_END',
+ 'PHP_OUTPUT_HANDLER_START', 'PHP_SYSCONFDIR',
+ 'PHP_VERSION', 'true', '__CLASS__', '__FILE__', '__FUNCTION__',
+ '__LINE__', '__METHOD__'
+ )
+ ),
+ 'SYMBOLS' => array(
+ 1 => array(
+ '<'.'%', '<'.'%=', '%'.'>', '<'.'?', '<'.'?=', '?'.'>'
+ ),
+ 0 => array(
+ '(', ')', '[', ']', '{', '}',
+ '!', '@', '%', '&', '|', '/',
+ '<', '>',
+ '=', '-', '+', '*',
+ '.', ':', ',', ';'
+ )
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #b1b100;',
+ 2 => 'color: #000000; font-weight: bold;',
+ 3 => 'color: #990000;',
+ 4 => 'color: #009900; font-weight: bold;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #666666; font-style: italic;',
+ 2 => 'color: #666666; font-style: italic;',
+ 3 => 'color: #0000cc; font-style: italic;',
+ 4 => 'color: #009933; font-style: italic;',
+ 'MULTI' => 'color: #666666; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;',
+ 1 => 'color: #000099; font-weight: bold;',
+ 2 => 'color: #660099; font-weight: bold;',
+ 3 => 'color: #660099; font-weight: bold;',
+ 4 => 'color: #006699; font-weight: bold;',
+ 5 => 'color: #006699; font-weight: bold; font-style: italic;',
+ 6 => 'color: #009933; font-weight: bold;',
+ 'HARD' => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #009900;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #0000ff;',
+ 'HARD' => 'color: #0000ff;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;',
+ GESHI_NUMBER_OCT_PREFIX => 'color: #208080;',
+ GESHI_NUMBER_HEX_PREFIX => 'color: #208080;',
+ GESHI_NUMBER_FLT_SCI_ZERO => 'color:#800080;',
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #004000;',
+ 2 => 'color: #004000;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #339933;',
+ 1 => 'color: #000000; font-weight: bold;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #000088;'
+ ),
+ 'SCRIPT' => array(
+ 0 => '',
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => '',
+ 5 => ''
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => 'http://www.php.net/{FNAMEL}',
+ 4 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '-&gt;',
+ 2 => '::'
+ ),
+ 'REGEXPS' => array(
+ //Variables
+ 0 => "[\\$]{1,2}[a-zA-Z_][a-zA-Z0-9_]*"
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_MAYBE,
+ 'SCRIPT_DELIMITERS' => array(
+ 0 => array(
+ '<'.'?php' => '?'.'>'
+ ),
+ 1 => array(
+ '<'.'?' => '?'.'>'
+ ),
+ 2 => array(
+ '<'.'%' => '%'.'>'
+ ),
+ 3 => array(
+ '<script language="php">' => '</script>'
+ ),
+ 4 => "/(?<start><\\?(?>php\b)?)(?:".
+ "(?>[^\"'?\\/<]+)|".
+ "\\?(?!>)|".
+ "(?>'(?>[^'\\\\]|\\\\'|\\\\\\\|\\\\)*')|".
+ "(?>\"(?>[^\"\\\\]|\\\\\"|\\\\\\\\|\\\\)*\")|".
+ "(?>\\/\\*(?>[^\\*]|(?!\\*\\/)\\*)*\\*\\/)|".
+ "\\/\\/(?>.*?$)|".
+ "\\/(?=[^*\\/])|".
+ "<(?!<<)|".
+ "<<<(?<phpdoc>\w+)\s.*?\s\k<phpdoc>".
+ ")*(?<end>\\?>|\Z)/sm",
+ 5 => "/(?<start><%)(?:".
+ "(?>[^\"'%\\/<]+)|".
+ "%(?!>)|".
+ "(?>'(?>[^'\\\\]|\\\\'|\\\\\\\|\\\\)*')|".
+ "(?>\"(?>[^\\\"\\\\]|\\\\\"|\\\\\\\\|\\\\)*\")|".
+ "(?>\\/\\*(?>[^\\*]|(?!\\*\\/)\\*)*\\*\\/)|".
+ "\\/\\/(?>.*?$)|".
+ "\\/(?=[^*\\/])|".
+ "<(?!<<)|".
+ "<<<(?<phpdoc>\w+)\s.*?\s\k<phpdoc>".
+ ")*(?<end>%>)/sm",
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ 0 => true,
+ 1 => true,
+ 2 => true,
+ 3 => true,
+ 4 => true,
+ 5 => true
+ ),
+ 'TAB_WIDTH' => 4
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/pic16.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/pic16.php
new file mode 100644
index 000000000..f25183ffb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/pic16.php
@@ -0,0 +1,141 @@
+<?php
+/*************************************************************************************
+ * pic16.php
+ * -------
+ * Author: Phil Mattison (mattison@ohmikron.com)
+ * Copyright: (c) 2008 Ohmikron Corp. (http://www.ohmikron.com/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2008/07/30
+ *
+ * PIC16 Assembler language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/07/30 (1.0.8)
+ * - First Release
+ *
+ * TODO (updated 2008/07/30)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'PIC16',
+ 'COMMENT_SINGLE' => array(1 => ';'),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ /*Instructions*/
+ 1 => array(
+ 'addcf','adddcf','addlw','addwf','andlw','andwf','bc','bcf','bdc',
+ 'bnc','bndc','bnz','bsf','btfsc','btfss','bz','call','clrc','clrdc',
+ 'clrf','clrw','clrwdt','clrz','comf','decf','goto','incf','incfsz',
+ 'iorlw','iorwf','lcall','lgoto','movf','movfw','movlw','movwf',
+ 'option','negf','nop','retfie','retlw','return','rlf','rrf','setc',
+ 'setdc','setz','skpc','skpdc','skpnc','skpndc','skpnz','skpz',
+ 'sleep','subcf','subdcf','sublw','subwf','swapf','tris','tstf',
+ 'xorlw','xorwf'
+ ),
+ /*Registers*/
+ 2 => array(
+ 'INDF','TMR0','OPTION','PCL','STATUS','FSR','PORTA','PORTB','PORTC',
+ 'PORTD','PORTE','PORTF','TRISA','TRISB','TRISC','TRISD','TRISE',
+ 'TRISF','PCLATH','INTCON','PIR1','PIE1','PCON','CMCON','VRCON',
+ 'F','W'
+ ),
+ /*Directives*/
+ 3 => array(
+ '_BADRAM','BANKISEL','BANKSEL','CBLOCK','CODE','_CONFIG','CONSTANT',
+ 'DA','DATA','DB','DE','#DEFINE','DT','DW','ELSE','END','ENDC',
+ 'ENDIF','ENDM','ENDW','EQU','ERROR','ERRORLEVEL','EXITM','EXPAND',
+ 'EXTERN','FILL','GLOBAL','IDATA','_IDLOCS','IF','IFDEF','IFNDEF',
+ 'INCLUDE','#INCLUDE','LIST','LOCAL','MACRO','_MAXRAM','MESSG',
+ 'NOEXPAND','NOLIST','ORG','PAGE','PAGESEL','PROCESSOR','RADIX',
+ 'RES','SET','SPACE','SUBTITLE','TITLE','UDATA','UDATA_ACS',
+ 'UDATA_OVR','UDATA_SHR','#UNDEFINE','VARIABLE','WHILE',
+ 'D','H','O','B','A'
+ ),
+ ),
+ 'SYMBOLS' => array('=','.',',',':'),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #0000a0; font-weight: bold;',
+ 2 => 'color: #aa3300; font-weight: bold;',
+ 3 => 'color: #0000ff;',
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #00a000;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #0000ff;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff7700;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #ff7700;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #7777ff;'
+ ),
+ 'REGEXPS' => array(),
+ 'SCRIPT' => array()
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(),
+ 'NUMBERS' =>
+ GESHI_NUMBER_INT_BASIC |
+ GESHI_NUMBER_BIN_SUFFIX |
+ GESHI_NUMBER_HEX_PREFIX |
+ GESHI_NUMBER_HEX_SUFFIX,
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(),
+ 'TAB_WIDTH' => 4,
+ 'PARSER_CONTROL' => array(
+ 'KEYWORDS' => array(
+ 'DISALLOWED_BEFORE' => "a-zA-Z0-9\$_\|\#>|^",
+ 'DISALLOWED_AFTER' => "a-zA-Z0-9_<\|%"
+ )
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/pixelbender.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/pixelbender.php
new file mode 100644
index 000000000..b65e228a1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/pixelbender.php
@@ -0,0 +1,176 @@
+<?php
+/*************************************************************************************
+ * pixelbender.php
+ * ----------------
+ * Author: Richard Olsson (r@richardolsson.se)
+ * Copyright: (c) 2008 Richard Olsson (richardolsson.se)
+ * Release Version: 1.0.8.4
+ * Date Started: 2008/11/16
+ *
+ * Pixel Bender 1.0 language file for GeSHi.
+ *
+ *
+ * Please feel free to modify this file, although I would greatly appreciate
+ * it if you would then send some feedback on why the file needed to be
+ * changed, using the e-mail address above.
+ *
+ *
+ * The colors are inspired by those used in the Pixel Bender Toolkit, with
+ * some slight modifications.
+ *
+ * For more info on Pixel Bender, see the Adobe Labs Wiki article at
+ * http://labs.adobe.com/wiki/index.php/Pixel_Bender_Toolkit.
+ *
+ * Keyword groups are defined as follows (groups marked with an asterisk
+ * inherit their names from terminology used in the language specification
+ * included with the Pixel Bender Toolkit, see URL above.)
+ *
+ * 1. languageVersion & kernel keywords
+ * 2. Kernel Members *
+ * 3. Types *
+ * 4. Statements * & qualifiers (in, out, inout)
+ * 5. Built-in functions *
+ * 6. Meta-data names
+ * 7. Preprocessor & Pre-defined symbols *
+ *
+ *
+ * CHANGES
+ * -------
+ * 2008/11/16 (1.0.8.2)
+ * - Initial release
+ *
+ * TODO (updated 2008/11/16)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array(
+ 'LANG_NAME' => 'Pixel Bender 1.0',
+ 'COMMENT_SINGLE' => array(1 => '//'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'languageVersion', 'kernel'
+ ),
+ 2 => array(
+ 'import', 'parameter', 'dependent', 'const', 'input', 'output',
+ 'evaluatePixel', 'evaluateDependents', 'needed', 'changed', 'generated'
+ ),
+ 3 => array(
+ 'bool', 'bool2', 'bool3', 'bool4', 'int', 'int2', 'int3', 'int4',
+ 'float', 'float2', 'float3', 'float4', 'float2x2', 'float3x3', 'float4x4',
+ 'pixel2', 'pixel3', 'pixel4', 'region', 'image1', 'image2', 'image3', 'image4',
+ 'imageRef', 'void'
+ ),
+ 4 => array(
+ 'in', 'out', 'inout', 'if', 'else', 'for', 'while', 'do', 'break',
+ 'continue', 'return'
+ ),
+ 5 => array(
+ 'radians', 'degrees', 'sin', 'cos', 'tan', 'asin', 'acos', 'atan', 'pow',
+ 'exp', 'exp2', 'log', 'log2', 'sqrt', 'inverseSqrt', 'abs', 'sign', 'floor',
+ 'ceil', 'fract', 'mod', 'min', 'max', 'step', 'clamp', 'mix', 'smoothStep',
+ 'length', 'distance', 'dot', 'cross', 'normalize', 'matrixCompMult', 'lessThan',
+ 'lessThanEqual', 'greaterThan', 'greaterThanEqual', 'equal', 'notEqual', 'any',
+ 'all', 'not', 'nowhere', 'everywhere', 'transform', 'union', 'intersect',
+ 'outset', 'inset', 'bounds', 'isEmpty', 'sample', 'sampleLinear', 'sampleNearest',
+ 'outCoord', 'dod', 'pixelSize', 'pixelAspectRatio'
+ ),
+ 6 => array(
+ 'namespace', 'vendor', 'version', 'minValue', 'maxValue', 'defaultValue', 'description'
+ ),
+ 7 => array(
+ '#if', '#endif', '#ifdef', '#elif', 'defined', '#define',
+ 'AIF_ATI', 'AIF_NVIDIA', 'AIF_FLASH_TARGET'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '[', ']', '{', '}', '!', '%', '&', '|', '+', '-', '*', '/', '=', '<', '>', '?', ':'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ 2 => true,
+ 3 => true,
+ 4 => true,
+ 5 => true,
+ 6 => true,
+ 7 => true
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #0033ff;',
+ 2 => 'color: #0033ff; font-weight: bold;',
+ 3 => 'color: #0033ff;',
+ 4 => 'color: #9900cc; font-weight: bold;',
+ 5 => 'color: #333333;',
+ 6 => 'color: #666666;',
+ 7 => 'color: #990000;',
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #009900;',
+ 'MULTI' => 'color: #3f5fbf;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => ''
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #990000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #000000; font-weight:bold;'
+ ),
+ 'METHODS' => array(
+ 0 => 'color: #000000;',
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #000000; font-weight: bold;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => '',
+ 5 => '',
+ 6 => '',
+ 7 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array('.'),
+ 'REGEXPS' => array(),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(),
+ 'HIGHLIGHT_STRICT_BLOCK' => array()
+);
+
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/plsql.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/plsql.php
new file mode 100644
index 000000000..6534a1922
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/plsql.php
@@ -0,0 +1,256 @@
+<?php
+/*************************************************************************************
+ * plsql.php
+ * -------
+ * Author: Victor Engmark <victor.engmark@gmail.com>
+ * Copyright: (c) 2006 Victor Engmark (http://l0b0.net/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2006/10/26
+ *
+ * Oracle 9.2 PL/SQL language file for GeSHi.
+ * Formatting is based on the default setup of TOAD 8.6.
+ *
+ * CHANGES
+ * -------
+ * 2006/10/27 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2006/10/27)
+ * -------------------------
+ * * Add < and > to brackets
+ * * Remove symbols which are also comment delimiters / quote marks?
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'PL/SQL',
+ 'COMMENT_SINGLE' => array(1 =>'--'), //http://download-uk.oracle.com/docs/cd/B10501_01/appdev.920/a96624/02_funds.htm#2930
+ 'COMMENT_MULTI' => array('/*' => '*/'), //http://download-uk.oracle.com/docs/cd/B10501_01/appdev.920/a96624/02_funds.htm#2950
+ 'CASE_KEYWORDS' => GESHI_CAPS_UPPER,
+ 'QUOTEMARKS' => array("'", '"'), //http://download-uk.oracle.com/docs/cd/B10501_01/appdev.920/a96624/02_funds.htm
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ //PL/SQL reserved keywords (http://download-uk.oracle.com/docs/cd/B10501_01/appdev.920/a96624/f_words.htm#LNPLS019)
+ 1 => array('ZONE', 'YEAR', 'WRITE', 'WORK', 'WITH', 'WHILE', 'WHERE',
+ 'WHENEVER', 'WHEN', 'VIEW', 'VARCHAR2', 'VARCHAR', 'VALUES',
+ 'VALIDATE', 'USE', 'UPDATE', 'UNIQUE', 'UNION', 'TYPE', 'TRUE',
+ 'TRIGGER', 'TO', 'TIMEZONE_REGION', 'TIMEZONE_MINUTE', 'TIMEZONE_HOUR',
+ 'TIMEZONE_ABBR', 'TIMESTAMP', 'TIME', 'THEN', 'TABLE', 'SYNONYM',
+ 'SUCCESSFUL', 'SUBTYPE', 'START', 'SQLERRM', 'SQLCODE', 'SQL', 'SPACE',
+ 'SMALLINT', 'SHARE', 'SET', 'SEPARATE', 'SELECT', 'SECOND',
+ 'SAVEPOINT', 'ROWTYPE', 'ROWNUM', 'ROWID', 'ROW', 'ROLLBACK',
+ 'REVERSE', 'RETURN', 'RELEASE', 'RECORD', 'REAL', 'RAW', 'RANGE',
+ 'RAISE', 'PUBLIC', 'PROCEDURE', 'PRIVATE', 'PRIOR', 'PRAGMA',
+ 'POSITIVEN', 'POSITIVE', 'PLS_INTEGER', 'PCTFREE', 'PARTITION',
+ 'PACKAGE', 'OUT', 'OTHERS', 'ORGANIZATION', 'ORDER', 'OR', 'OPTION',
+ 'OPERATOR', 'OPEN', 'OPAQUE', 'ON', 'OF', 'OCIROWID', 'NUMBER_BASE',
+ 'NUMBER', 'NULL', 'NOWAIT', 'NOT', 'NOCOPY', 'NEXTVAL', 'NEW',
+ 'NATURALN', 'NATURAL', 'MONTH', 'MODE', 'MLSLABEL', 'MINUTE', 'MINUS',
+ 'LOOP', 'LONG', 'LOCK', 'LIMITED', 'LIKE', 'LEVEL', 'JAVA',
+ 'ISOLATION', 'IS', 'INTO', 'INTERVAL', 'INTERSECT', 'INTERFACE',
+ 'INTEGER', 'INSERT', 'INDICATOR', 'INDEX', 'IN', 'IMMEDIATE', 'IF',
+ 'HOUR', 'HEAP', 'HAVING', 'GROUP', 'GOTO', 'FUNCTION', 'FROM',
+ 'FORALL', 'FOR', 'FLOAT', 'FETCH', 'FALSE', 'EXTENDS', 'EXIT',
+ 'EXISTS', 'EXECUTE', 'EXCLUSIVE', 'EXCEPTION', 'END', 'ELSIF', 'ELSE',
+ 'DROP', 'DO', 'DISTINCT', 'DESC', 'DELETE', 'DEFAULT', 'DECLARE',
+ 'DECIMAL', 'DAY', 'DATE', 'CURSOR', 'CURRVAL', 'CURRENT', 'CREATE',
+ 'CONSTANT', 'CONNECT', 'COMPRESS', 'COMMIT', 'COMMENT', 'COLLECT',
+ 'CLUSTER', 'CLOSE', 'CHECK', 'CHAR_BASE', 'CHAR', 'CASE', 'BY', 'BULK',
+ 'BOOLEAN', 'BODY', 'BINARY_INTEGER', 'BETWEEN', 'BEGIN', 'AUTHID',
+ 'AT', 'ASC', 'AS', 'ARRAY', 'ANY', 'AND', 'ALTER', 'ALL'),
+ //SQL functions (http://download-uk.oracle.com/docs/cd/B10501_01/server.920/a96540/toc.htm & http://download-uk.oracle.com/docs/cd/B10501_01/server.920/a96540/functions101a.htm#85925)
+ 2 => array('XMLTRANSFORM', 'XMLSEQUENCE', 'XMLFOREST', 'XMLELEMENT',
+ 'XMLCONCAT', 'XMLCOLATTVAL', 'XMLAGG', 'WIDTH_BUCKET', 'VSIZE',
+ 'VARIANCE', 'VAR_SAMP', 'VAR_POP', 'VALUE', 'USERENV', 'USER', 'UPPER',
+ 'UPDATEXML', 'UNISTR', 'UID', 'TZ_OFFSET', 'TRUNC', 'TRIM', 'TREAT',
+ 'TRANSLATE', 'TO_YMINTERVAL', 'TO_TIMESTAMP_TZ', 'TO_TIMESTAMP',
+ 'TO_SINGLE_BYTE', 'TO_NUMBER', 'TO_NCLOB', 'TO_NCHAR', 'TO_MULTI_BYTE',
+ 'TO_LOB', 'TO_DSINTERVAL', 'TO_DATE', 'TO_CLOB', 'TO_CHAR', 'TANH',
+ 'TAN', 'SYSTIMESTAMP', 'SYSDATE', 'SYS_XMLGEN', 'SYS_XMLAGG',
+ 'SYS_TYPEID', 'SYS_GUID', 'SYS_EXTRACT_UTC', 'SYS_DBURIGEN',
+ 'SYS_CONTEXT', 'SYS_CONNECT_BY_PATH', 'SUM', 'SUBSTR', 'STDDEV_SAMP',
+ 'STDDEV_POP', 'STDDEV', 'SQRT', 'SOUNDEX', 'SINH', 'SIN', 'SIGN',
+ 'SESSIONTIMEZONE', 'RTRIM', 'RPAD', 'ROWIDTONCHAR', 'ROWIDTOCHAR',
+ 'ROW_NUMBER', 'ROUND', 'REPLACE', 'REGR_SYY', 'REGR_SXY', 'REGR_SXX',
+ 'REGR_SLOPE', 'REGR_R2', 'REGR_INTERCEPT', 'REGR_COUNT', 'REGR_AVGY',
+ 'REGR_AVGX', 'REFTOHEX', 'REF', 'RAWTONHEX', 'RAWTOHEX',
+ 'RATIO_TO_REPORT', 'RANK', 'POWER', 'PERCENTILE_DISC',
+ 'PERCENTILE_CONT', 'PERCENT_RANK', 'PATH', 'NVL2', 'NVL',
+ 'NUMTOYMINTERVAL', 'NUMTODSINTERVAL', 'NULLIF', 'NTILE', 'NLSSORT',
+ 'NLS_UPPER', 'NLS_LOWER', 'NLS_INITCAP', 'NLS_CHARSET_NAME',
+ 'NLS_CHARSET_ID', 'NLS_CHARSET_DECL_LEN', 'NEXT_DAY', 'NEW_TIME',
+ 'NCHR', 'MONTHS_BETWEEN', 'MOD', 'MIN', 'MAX', 'MAKE_REF', 'LTRIM',
+ 'LPAD', 'LOWER', 'LOG', 'LOCALTIMESTAMP', 'LN', 'LENGTH', 'LEAST',
+ 'LEAD', 'LAST_VALUE', 'LAST_DAY', 'LAST', 'LAG', 'INSTR', 'INITCAP',
+ 'HEXTORAW', 'GROUPING_ID', 'GROUPING', 'GROUP_ID', 'GREATEST',
+ 'FROM_TZ', 'FLOOR', 'FIRST_VALUE', 'FIRST', 'EXTRACTVALUE', 'EXTRACT',
+ 'EXP', 'EXISTSNODE', 'EMPTY_CLOB', 'EMPTY_BLOB', 'DUMP', 'DEREF',
+ 'DEPTH', 'DENSE_RANK', 'DECOMPOSE', 'DECODE', 'DBTIMEZONE',
+ 'CURRENT_TIMESTAMP', 'CURRENT_DATE', 'CUME_DIST', 'COVAR_SAMP',
+ 'COVAR_POP', 'COUNT', 'COSH', 'COS', 'CORR', 'CONVERT', 'CONCAT',
+ 'COMPOSE', 'COALESCE', 'CHR', 'CHARTOROWID', 'CEIL', 'CAST', 'BITAND',
+ 'BIN_TO_NUM', 'BFILENAME', 'AVG', 'ATAN2', 'ATAN', 'ASIN', 'ASCIISTR',
+ 'ASCII', 'ADD_MONTHS', 'ACOS', 'ABS'),
+ //PL/SQL packages (http://download-uk.oracle.com/docs/cd/B10501_01/appdev.920/a96612/intro2.htm#1025672)
+ 3 => array('UTL_URL', 'UTL_TCP', 'UTL_SMTP', 'UTL_REF', 'UTL_RAW',
+ 'UTL_PG', 'UTL_INADDR', 'UTL_HTTP', 'UTL_FILE', 'UTL_ENCODE',
+ 'UTL_COLL', 'SDO_UTIL', 'SDO_TUNE', 'SDO_MIGRATE', 'SDO_LRS',
+ 'SDO_GEOM', 'SDO_CS', 'DMBS_XMLQUERY', 'DMBS_FLASHBACK',
+ 'DMBS_DEFER_SYS', 'DEBUG_EXTPROC', 'DBMS_XSLPROCESSOR', 'DBMS_XPLAN',
+ 'DBMS_XMLSCHEMA', 'DBMS_XMLSAVE', 'DBMS_XMLPARSER', 'DBMS_XMLGEN',
+ 'DBMS_XMLDOM', 'DBMS_XDBT', 'DBMS_XDB_VERSION', 'DBMS_XDB', 'DBMS_WM',
+ 'DBMS_UTILITY', 'DBMS_TYPES', 'DBMS_TTS', 'DBMS_TRANSFORM',
+ 'DBMS_TRANSACTION', 'DBMS_TRACE', 'DBMS_STRM_A', 'DBMS_STRM',
+ 'DBMS_STORAGE_MAP', 'DBMS_STATS', 'DBMS_SQL', 'DBMS_SPACE_ADMIN',
+ 'DBMS_SPACE', 'DBMS_SHARED_POOL', 'DBMS_SESSION', 'DBMS_RULE_ADM',
+ 'DBMS_RULE', 'DBMS_ROWID', 'DBMS_RLS', 'DBMS_RESUMABLE',
+ 'DBMS_RESOURCE_MANAGER_PRIVS', 'DBMS_RESOURCE_MANAGER', 'DBMS_REPUTIL',
+ 'DBMS_REPCAT_RGT', 'DBMS_REPCAT_INSTATIATE', 'DBMS_REPCAT_ADMIN',
+ 'DBMS_REPCAT', 'DBMS_REPAIR', 'DBMS_REFRESH', 'DBMS_REDEFINITION',
+ 'DBMS_RECTIFIER_DIFF', 'DBMS_RANDOM', 'DBMS_PROPAGATION_ADM',
+ 'DBMS_PROFILER', 'DBMS_PIPE', 'DBMS_PCLXUTIL', 'DBMS_OUTPUT',
+ 'DBMS_OUTLN_EDIT', 'DBMS_OUTLN', 'DBMS_ORACLE_TRACE_USER',
+ 'DBMS_ORACLE_TRACE_AGENT', 'DBMS_OLAP', 'DBMS_OFFLINE_SNAPSHOT',
+ 'DBMS_OFFLINE_OG', 'DBMS_ODCI', 'DBMS_OBFUSCATION_TOOLKIT',
+ 'DBMS_MVIEW', 'DBMS_MGWMSG', 'DBMS_MGWADM', 'DBMS_METADATA',
+ 'DBMS_LOGSTDBY', 'DBMS_LOGMNR_D', 'DBMS_LOGMNR_CDC_SUBSCRIBE',
+ 'DBMS_LOGMNR_CDC_PUBLISH', 'DBMS_LOGMNR', 'DBMS_LOCK', 'DBMS_LOB',
+ 'DBMS_LIBCACHE', 'DBMS_LDAP', 'DBMS_JOB', 'DBMS_IOT',
+ 'DBMS_HS_PASSTHROUGH', 'DBMS_FGA', 'DBMS_DISTRIBUTED_TRUST_ADMIN',
+ 'DBMS_DESCRIBE', 'DBMS_DEFER_QUERY', 'DBMS_DEFER', 'DBMS_DEBUG',
+ 'DBMS_DDL', 'DBMS_CAPTURE_ADM', 'DBMS_AW', 'DBMS_AQELM', 'DBMS_AQADM',
+ 'DBMS_AQ', 'DBMS_APPLY_ADM', 'DBMS_APPLICATION_INFO', 'DBMS_ALERT',
+ 'CWM2_OLAP_AW_ACCESS'),
+ //PL/SQL predefined exceptions (http://download-uk.oracle.com/docs/cd/B10501_01/appdev.920/a96624/07_errs.htm#784)
+ 4 => array('ZERO_DIVIDE', 'VALUE_ERROR', 'TOO_MANY_ROWS',
+ 'TIMEOUT_ON_RESOURCE', 'SYS_INVALID_ROWID', 'SUBSCRIPT_OUTSIDE_LIMIT',
+ 'SUBSCRIPT_BEYOND_COUNT', 'STORAGE_ERROR', 'SELF_IS_NULL',
+ 'ROWTYPE_MISMATCH', 'PROGRAM_ERROR', 'NOT_LOGGED_ON', 'NO_DATA_FOUND',
+ 'LOGIN_DENIED', 'INVALID_NUMBER', 'INVALID_CURSOR', 'DUP_VAL_ON_INDEX',
+ 'CURSOR_ALREADY_OPEN', 'COLLECTION_IS_NULL', 'CASE_NOT_FOUND',
+ 'ACCESS_INTO_NULL'),
+ //Static data dictionary views (http://download-uk.oracle.com/docs/cd/B10501_01/server.920/a96536/ch2.htm)
+ 5 => array('USER_REPSITES', 'USER_REPSCHEMA',
+ 'USER_REPRESOLUTION_STATISTICS', 'USER_REPRESOLUTION_METHOD',
+ 'USER_REPRESOLUTION', 'USER_REPRESOL_STATS_CONTROL', 'USER_REPPROP',
+ 'USER_REPPRIORITY_GROUP', 'USER_REPPRIORITY',
+ 'USER_REPPARAMETER_COLUMN', 'USER_REPOBJECT', 'USER_REPKEY_COLUMNS',
+ 'USER_REPGROUPED_COLUMN', 'USER_REPGROUP_PRIVILEGES', 'USER_REPGROUP',
+ 'USER_REPGENOBJECTS', 'USER_REPGENERATED', 'USER_REPFLAVORS',
+ 'USER_REPFLAVOR_OBJECTS', 'USER_REPFLAVOR_COLUMNS', 'USER_REPDDL',
+ 'USER_REPCONFLICT', 'USER_REPCOLUMN_GROUP', 'USER_REPCOLUMN',
+ 'USER_REPCATLOG', 'USER_REPCAT_USER_PARM_VALUES',
+ 'USER_REPCAT_USER_AUTHORIZATIONS', 'USER_REPCAT_TEMPLATE_SITES',
+ 'USER_REPCAT_TEMPLATE_PARMS', 'USER_REPCAT_TEMPLATE_OBJECTS',
+ 'USER_REPCAT_REFRESH_TEMPLATES', 'USER_REPCAT', 'USER_REPAUDIT_COLUMN',
+ 'USER_REPAUDIT_ATTRIBUTE', 'DBA_REPSITES_NEW', 'DBA_REPSITES',
+ 'DBA_REPSCHEMA', 'DBA_REPRESOLUTION_STATISTICS',
+ 'DBA_REPRESOLUTION_METHOD', 'DBA_REPRESOLUTION',
+ 'DBA_REPRESOL_STATS_CONTROL', 'DBA_REPPROP', 'DBA_REPPRIORITY_GROUP',
+ 'DBA_REPPRIORITY', 'DBA_REPPARAMETER_COLUMN', 'DBA_REPOBJECT',
+ 'DBA_REPKEY_COLUMNS', 'DBA_REPGROUPED_COLUMN',
+ 'DBA_REPGROUP_PRIVILEGES', 'DBA_REPGROUP', 'DBA_REPGENOBJECTS',
+ 'DBA_REPGENERATED', 'DBA_REPFLAVORS', 'DBA_REPFLAVOR_OBJECTS',
+ 'DBA_REPFLAVOR_COLUMNS', 'DBA_REPEXTENSIONS', 'DBA_REPDDL',
+ 'DBA_REPCONFLICT', 'DBA_REPCOLUMN_GROUP', 'DBA_REPCOLUMN',
+ 'DBA_REPCATLOG', 'DBA_REPCAT_USER_PARM_VALUES',
+ 'DBA_REPCAT_USER_AUTHORIZATIONS', 'DBA_REPCAT_TEMPLATE_SITES',
+ 'DBA_REPCAT_TEMPLATE_PARMS', 'DBA_REPCAT_TEMPLATE_OBJECTS',
+ 'DBA_REPCAT_REFRESH_TEMPLATES', 'DBA_REPCAT_EXCEPTIONS', 'DBA_REPCAT',
+ 'DBA_REPAUDIT_COLUMN', 'DBA_REPAUDIT_ATTRIBUTE', 'ALL_REPSITES',
+ 'ALL_REPSCHEMA', 'ALL_REPRESOLUTION_STATISTICS',
+ 'ALL_REPRESOLUTION_METHOD', 'ALL_REPRESOLUTION',
+ 'ALL_REPRESOL_STATS_CONTROL', 'ALL_REPPROP', 'ALL_REPPRIORITY_GROUP',
+ 'ALL_REPPRIORITY', 'ALL_REPPARAMETER_COLUMN', 'ALL_REPOBJECT',
+ 'ALL_REPKEY_COLUMNS', 'ALL_REPGROUPED_COLUMN',
+ 'ALL_REPGROUP_PRIVILEGES', 'ALL_REPGROUP', 'ALL_REPGENOBJECTS',
+ 'ALL_REPGENERATED', 'ALL_REPFLAVORS', 'ALL_REPFLAVOR_OBJECTS',
+ 'ALL_REPFLAVOR_COLUMNS', 'ALL_REPDDL', 'ALL_REPCONFLICT',
+ 'ALL_REPCOLUMN_GROUP', 'ALL_REPCOLUMN', 'ALL_REPCATLOG',
+ 'ALL_REPCAT_USER_PARM_VALUES', 'ALL_REPCAT_USER_AUTHORIZATIONS',
+ 'ALL_REPCAT_TEMPLATE_SITES', 'ALL_REPCAT_TEMPLATE_PARMS',
+ 'ALL_REPCAT_TEMPLATE_OBJECTS', 'ALL_REPCAT_REFRESH_TEMPLATES',
+ 'ALL_REPCAT', 'ALL_REPAUDIT_COLUMN', 'ALL_REPAUDIT_ATTRIBUTE')
+ ),
+ 'SYMBOLS' => array(
+ //PL/SQL delimiters (http://download-uk.oracle.com/docs/cd/B10501_01/appdev.920/a96624/02_funds.htm#2732)
+ '+', '%', "'", '.', '/', '(', ')', ':', ',', '*', '"', '=', '<', '>', '@', ';', '-', ':=', '=>', '||', '**', '<<', '>>', '/*', '*/', '..', '<>', '!=', '~=', '^=', '<=', '>='
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #00F;',
+ 2 => 'color: #000;',
+ 3 => 'color: #00F;',
+ 4 => 'color: #F00;',
+ 5 => 'color: #800;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #080; font-style: italic;',
+ 'MULTI' => 'color: #080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #00F;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #F00;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #800;'
+ ),
+ 'METHODS' => array(
+ 0 => 'color: #0F0;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #00F;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ 0 => 'color: #0F0;'
+ )
+ ),
+ 'URLS' => array(
+ 1 => 'http://www.oracle.com/pls/db92/db92.drilldown?word={FNAMEU}',
+ 2 => 'http://www.oracle.com/pls/db92/db92.drilldown?word={FNAMEU}',
+ 3 => 'http://www.oracle.com/pls/db92/db92.drilldown?word={FNAMEU}',
+ 4 => 'http://www.oracle.com/pls/db92/db92.drilldown?word={FNAMEU}',
+ 5 => 'http://www.oracle.com/pls/db92/db92.drilldown?word={FNAMEU}'
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(),
+ 'REGEXPS' => array(),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(),
+ 'HIGHLIGHT_STRICT_BLOCK' => array()
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/povray.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/povray.php
new file mode 100644
index 000000000..af6c443da
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/povray.php
@@ -0,0 +1,199 @@
+<?php
+/*************************************************************************************
+ * povray.php
+ * --------
+ * Author: Carl Fürstenberg (azatoth@gmail.com)
+ * Copyright: © 2007 Carl Fürstenberg
+ * Release Version: 1.0.8.4
+ * Date Started: 2008/07/11
+ *
+ * Povray language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/07/11 (1.0.8)
+ * - initial import to GeSHi SVN
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'POVRAY',
+ 'COMMENT_SINGLE' => array(1 => '//'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'yes', 'wrinkles', 'wood', 'width', 'waves', 'water_level', 'warp', 'vturbulence',
+ 'vstr', 'vrotate', 'vnormalize', 'vlength', 'vcross', 'vaxis_rotate', 'variance', 'v_steps',
+ 'uv_mapping', 'utf8', 'use_index', 'use_colour', 'use_color', 'use_alpha', 'up', 'undef',
+ 'ultra_wide_angle', 'u_steps', 'type', 'turbulence', 'turb_depth', 'ttf', 'true', 'triangle_wave',
+ 'translate', 'transform', 'trace', 'toroidal', 'tolerance', 'tiles', 'tile2', 'tightness',
+ 'tiff', 'threshold', 'thickness', 'tga', 'texture_map', 'target', 'sys', 'sum',
+ 'substr', 'sturm', 'strupr', 'strlwr', 'strength', 'str', 'statistics', 'sqr',
+ 'spotted', 'spotlight', 'split_union', 'spline', 'spiral2', 'spiral1', 'spherical', 'specular',
+ 'spacing', 'solid', 'smooth', 'slope', 'slice', 'sky', 'size', 'sine_wave',
+ 'shadowless', 'scattering', 'scallop_wave', 'scale', 'save_file', 'samples', 'roughness', 'rotate',
+ 'ripples', 'right', 'rgbt', 'rgbft', 'rgbf', 'rgb', 'repeat', 'render',
+ 'refraction', 'reflection_exponent', 'recursion_limit', 'reciprocal', 'ratio', 'ramp_wave', 'radius', 'radial',
+ 'quilted', 'quick_colour', 'quick_color', 'quaternion', 'quadratic_spline', 'pwr', 'projected_through', 'prod',
+ 'pretrace_start', 'pretrace_end', 'precompute', 'precision', 'ppm', 'pow', 'pot', 'poly_wave',
+ 'point_at', 'png', 'planar', 'pigment_pattern', 'pi', 'phong_size', 'phong', 'phase',
+ 'pgm', 'perspective', 'pattern', 'pass_through', 'parallel', 'panoramic', 'orthographic', 'orientation',
+ 'orient', 'open', 'onion', 'once', 'on', 'omnimax', 'omega', 'offset',
+ 'off', 'octaves', 'number_of_waves', 'noise_generator', 'no_shadow', 'no_reflection', 'no_image', 'no_bump_scale',
+ 'no', 'nearest_count', 'natural_spline', 'mortar', 'minimum_reuse', 'min_extent', 'metric', 'method',
+ 'metallic', 'media_interaction', 'media_attenuation', 'media', 'max_trace_level', 'max_trace', 'max_sample', 'max_iteration',
+ 'max_intersections', 'max_gradient', 'max_extent', 'matrix', 'material_map', 'marble', 'map_type', 'mandel',
+ 'major_radius', 'magnet', 'low_error_factor', 'look_at', 'location', 'load_file', 'linear_sweep', 'linear_spline',
+ 'leopard', 'lambda', 'julia', 'jpeg', 'jitter', 'irid_wavelength', 'ior', 'inverse',
+ 'intervals', 'interpolate', 'internal', 'inside_vector', 'inside', 'initial_frame', 'initial_clock', 'image_width',
+ 'image_pattern', 'image_height', 'iff', 'hypercomplex', 'hollow', 'hierarchy', 'hf_gray_16', 'hexagon',
+ 'gray_threshold', 'granite', 'gradient', 'global_lights', 'gif', 'gather', 'fresnel', 'frequency',
+ 'frame_number', 'form', 'fog_type', 'fog_offset', 'fog_alt', 'focal_point', 'flip', 'flatness',
+ 'fisheye', 'final_frame', 'final_clock', 'false', 'falloff_angle', 'falloff', 'fade_power', 'fade_distance',
+ 'fade_colour', 'fade_color', 'facets', 'extinction', 'exterior', 'exponent', 'expand_thresholds', 'evaluate',
+ 'error_bound', 'emission', 'eccentricity', 'double_illuminate', 'distance', 'dist_exp', 'dispersion_samples', 'dispersion',
+ 'direction', 'diffuse', 'df3', 'dents', 'density_map', 'density_file', 'density', 'cylindrical',
+ 'cutaway_textures', 'cubic_wave', 'cubic_spline', 'cube', 'crand', 'crackle', 'count', 'coords',
+ 'control1', 'control0', 'conserve_energy', 'conic_sweep', 'confidence', 'concat', 'composite', 'component',
+ 'colour_map', 'colour', 'color', 'collect', 'clock_on', 'clock_delta', 'clock', 'circular',
+ 'chr', 'checker', 'charset', 'cells', 'caustics', 'bumps', 'bump_size', 'brilliance',
+ 'brightness', 'brick_size', 'brick', 'bozo', 'boxed', 'blur_samples', 'black_hole', 'bezier_spline',
+ 'b_spline', 'average', 'autostop', 'assumed_gamma', 'ascii', 'array', 'area_light', 'arc_angle',
+ 'append', 'aperture', 'angle', 'ambient_light', 'ambient', 'always_sample', 'altitude', 'alpha',
+ 'all_intersections', 'all', 'agate_turb', 'agate', 'adc_bailout', 'adaptive', 'accuracy', 'absorption',
+ 'aa_threshold', 'aa_level', 'reflection'
+ ),
+ 2 => array(
+ 'abs', 'acos', 'acosh', 'asc', 'asin', 'asinh', 'atan', 'atanh',
+ 'atan2', 'ceil', 'cos', 'cosh', 'defined', 'degrees', 'dimensions', 'dimension_size',
+ 'div', 'exp', 'file_exists', 'floor', 'int', 'ln', 'log', 'max',
+ 'min', 'mod', 'pov', 'radians', 'rand', 'seed', 'select', 'sin',
+ 'sinh', 'sqrt', 'strcmp', 'strlen', 'tan', 'tanh', 'val', 'vdot',
+ 'vlenght',
+ ),
+ 3 => array (
+ 'x', 'y', 'z', 't', 'u', 'v', 'red', 'blue',
+ 'green', 'filter', 'transmit', 'gray', 'e',
+ ),
+ 4 => array (
+ 'camera', 'background', 'fog', 'sky_sphere', 'rainbow', 'global_settings', 'radiosity', 'photon',
+ 'object', 'blob', 'sphere', 'cylinder', 'box', 'cone', 'height_field', 'julia_fractal',
+ 'lathe', 'prism', 'sphere_sweep', 'superellipsoid', 'sor', 'text', 'torus', 'bicubic_patch',
+ 'disc', 'mesh', 'triangle', 'smooth_triangle', 'mesh2', 'vertex_vectors', 'normal_vectors', 'uv_vectors',
+ 'texture_list', 'face_indices', 'normal_indices', 'uv_indices', 'texture', 'polygon', 'plane', 'poly',
+ 'cubic', 'quartic', 'quadric', 'isosurface', 'function', 'contained_by', 'parametric', 'pigment',
+ 'union', 'intersection', 'difference', 'merge', 'light_source', 'looks_like', 'light_group', 'clipped_by',
+ 'bounded_by', 'interior', 'material', 'interior_texture', 'normal', 'finish', 'color_map', 'pigment_map',
+ 'image_map', 'bump_map', 'slope_map', 'normal_map', 'irid', 'photons',
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '[', ']', '{', '}', '!',
+ '@', '%', '&', '*', '|', '/', '<',
+ '>', '+', '-', '.', '=', '<=', '>=',
+ '!=',
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #a63123;',
+ 2 => 'color: #2312bc;',
+ 3 => 'color: #cc1122; font-weight: bold;',
+ 4 => 'color: #116688; font-weight: bold;',
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080; font-style: italic;',
+// 2 => 'color: #808080; font-style: italic;',
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66aa;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #006600;',
+ 2 => 'color: #006600;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #6666cc; font-weight: bold;',
+ 1 => 'color: #66cc66; font-weight: bold;',
+ 2 => 'color: #66cc66; font-weight: bold;'
+ ),
+ 'SCRIPT' => array(
+ 0 => '',
+ 1 => '',
+ 2 => '',
+ 3 => ''
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ # normal hash lines
+ 0 => '\#(?!(include|declare|local|fopen|fclose|read|write|default|version|if|else|end|ifdef|ifndef|switch|case|range|break|while|debug|error|warning|macro) )[[:word:]]*',
+ # syntax functions hash thingis
+ 1 => "\#(include|declare|local|fopen|fclose|read|write|default|version|if|else|end|ifdef|ifndef|switch|case|range|break|while|debug|error|warning|macro)",
+ 2 => array(
+ GESHI_SEARCH => "([a-zA-Z]+)(\n)(.*)(\n)(\\1;?)",
+ GESHI_REPLACE => '\3',
+ GESHI_BEFORE => '\1\2',
+ GESHI_AFTER => '\4\5',
+ GESHI_MODIFIERS => 'siU'
+ )
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_MAYBE,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ 0 => true,
+ 1 => true,
+ 2 => true,
+ 3 => true
+ ),
+ 'TAB_WIDTH' => 4
+);
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/powershell.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/powershell.php
new file mode 100644
index 000000000..e427059d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/powershell.php
@@ -0,0 +1,277 @@
+<?php
+/*************************************************************************************
+ * powershell.php
+ * ---------------------------------
+ * Author: Frode Aarebrot (frode@aarebrot.net)
+ * Copyright: (c) 2008 Frode Aarebrot (http://www.aarebrot.net)
+ * Release Version: 1.0.8.4
+ * Date Started: 2008/06/20
+ *
+ * PowerShell language file for GeSHi.
+ *
+ * I've tried to make this language file as true to the highlighting in PowerGUI as
+ * possible. Unfortunately it's not 100% complete, although it is pretty close.
+ *
+ * I've included some classes and their members, but there's tons and tons of these.
+ * I suggest you add the ones you need yourself. I've included a few Sharepoint ones
+ * in this language file.
+ *
+ * CHANGES
+ * -------
+ * 2008/06/20 (1.0.8)
+ * - First Release
+ *
+ * TODO (updated 2008/06/20)
+ * -------------------------
+ * - Color text between Cmdlets/Aliases and pipe/end-of-line
+ * - Try and get -- and ++ to work in the KEYWORDS array with the other operators
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'PowerShell',
+ 'COMMENT_SINGLE' => array(1 => '#'),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '`',
+ 'KEYWORDS' => array(
+ 1 => array(
+ // Cmdlets
+ 'Add-Content', 'Add-History', 'Add-Member', 'Add-PSSnapin', 'Clear-Content', 'Clear-Item',
+ 'Clear-ItemProperty', 'Clear-Variable', 'Compare-Object', 'ConvertFrom-SecureString',
+ 'Convert-Path', 'ConvertTo-Html', 'ConvertTo-SecureString', 'Copy-Item', 'Copy-ItemProperty',
+ 'Export-Alias', 'Export-Clixml', 'Export-Console', 'Export-Csv', 'ForEach-Object',
+ 'Format-Custom', 'Format-List', 'Format-Table', 'Format-Wide', 'Get-Acl', 'Get-Alias',
+ 'Get-AuthenticodeSignature', 'Get-ChildItem', 'Get-Command', 'Get-Content', 'Get-Credential',
+ 'Get-Culture', 'Get-Date', 'Get-EventLog', 'Get-ExecutionPolicy', 'Get-Help', 'Get-History',
+ 'Get-Host', 'Get-Item', 'Get-ItemProperty', 'Get-Location', 'Get-Member',
+ 'Get-PfxCertificate', 'Get-Process', 'Get-PSDrive', 'Get-PSProvider', 'Get-PSSnapin',
+ 'Get-Service', 'Get-TraceSource', 'Get-UICulture', 'Get-Unique', 'Get-Variable',
+ 'Get-WmiObject', 'Group-Object', 'Import-Alias', 'Import-Clixml', 'Import-Csv',
+ 'Invoke-Expression', 'Invoke-History', 'Invoke-Item', 'Join-Path', 'Measure-Command',
+ 'Measure-Object', 'Move-Item', 'Move-ItemProperty', 'New-Alias', 'New-Item',
+ 'New-ItemProperty', 'New-Object', 'New-PSDrive', 'New-Service', 'New-TimeSpan',
+ 'New-Variable', 'Out-Default', 'Out-File', 'Out-Host', 'Out-Null', 'Out-Printer',
+ 'Out-String', 'Pop-Location', 'Push-Location', 'Read-Host', 'Remove-Item',
+ 'Remove-ItemProperty', 'Remove-PSDrive', 'Remove-PSSnapin', 'Remove-Variable', 'Rename-Item',
+ 'Rename-ItemProperty', 'Resolve-Path', 'Restart-Service', 'Resume-Service', 'Select-Object',
+ 'Select-String', 'Set-Acl', 'Set-Alias', 'Set-AuthenticodeSignature', 'Set-Content',
+ 'Set-Date', 'Set-ExecutionPolicy', 'Set-Item', 'Set-ItemProperty', 'Set-Location',
+ 'Set-PSDebug', 'Set-Service', 'Set-TraceSource', 'Set-Variable', 'Sort-Object', 'Split-Path',
+ 'Start-Service', 'Start-Sleep', 'Start-Transcript', 'Stop-Process', 'Stop-Service',
+ 'Stop-Transcript', 'Suspend-Service', 'Tee-Object', 'Test-Path', 'Trace-Command',
+ 'Update-FormatData', 'Update-TypeData', 'Where-Object', 'Write-Debug', 'Write-Error',
+ 'Write-Host', 'Write-Output', 'Write-Progress', 'Write-Verbose', 'Write-Warning'
+ ),
+ 2 => array(
+ // Aliases
+ 'ac', 'asnp', 'clc', 'cli', 'clp', 'clv', 'cpi', 'cpp', 'cvpa', 'diff', 'epal', 'epcsv', 'fc',
+ 'fl', 'ft', 'fw', 'gal', 'gc', 'gci', 'gcm', 'gdr', 'ghy', 'gi', 'gl', 'gm',
+ 'gp', 'gps', 'group', 'gsv', 'gsnp', 'gu', 'gv', 'gwmi', 'iex', 'ihy', 'ii', 'ipal', 'ipcsv',
+ 'mi', 'mp', 'nal', 'ndr', 'ni', 'nv', 'oh', 'rdr', 'ri', 'rni', 'rnp', 'rp', 'rsnp', 'rv',
+ 'rvpa', 'sal', 'sasv', 'sc', 'select', 'si', 'sl', 'sleep', 'sort', 'sp', 'spps', 'spsv', 'sv',
+ 'tee', 'write', 'cat', 'cd', 'clear', 'cp', 'h', 'history', 'kill', 'lp', 'ls',
+ 'mount', 'mv', 'popd', 'ps', 'pushd', 'pwd', 'r', 'rm', 'rmdir', 'echo', 'cls', 'chdir',
+ 'copy', 'del', 'dir', 'erase', 'move', 'rd', 'ren', 'set', 'type'
+ ),
+ 3 => array(
+ // Reserved words
+ 'break', 'continue', 'do', 'for', 'foreach', 'while', 'if', 'switch', 'until', 'where',
+ 'function', 'filter', 'else', 'elseif', 'in', 'return', 'param', 'throw', 'trap'
+ ),
+ 4 => array(
+ // Operators
+ '-eq', '-ne', '-gt', '-ge', '-lt', '-le', '-ieq', '-ine', '-igt', '-ige', '-ilt', '-ile',
+ '-ceq', '-cne', '-cgt', '-cge', '-clt', '-cle', '-like', '-notlike', '-match', '-notmatch',
+ '-ilike', '-inotlike', '-imatch', '-inotmatch', '-clike', '-cnotlike', '-cmatch', '-cnotmatch',
+ '-contains', '-notcontains', '-icontains', '-inotcontains', '-ccontains', '-cnotcontains',
+ '-isnot', '-is', '-as', '-replace', '-ireplace', '-creplace', '-and', '-or', '-band', '-bor',
+ '-not', '-bnot', '-f', '-casesensitive', '-exact', '-file', '-regex', '-wildcard'
+ ),
+ 5 => array(
+ // Options
+ '-Year', '-Wrap', '-Word', '-Width', '-WhatIf', '-Wait', '-View', '-Verbose', '-Verb',
+ '-Variable', '-ValueOnly', '-Value', '-Unique', '-UFormat', '-TypeName', '-Trace', '-TotalCount',
+ '-Title', '-TimestampServer', '-TargetObject', '-Syntax', '-SyncWindow', '-Sum', '-String',
+ '-Strict', '-Stream', '-Step', '-Status', '-Static', '-StartupType', '-Start', '-StackName',
+ '-Stack', '-SourceId', '-SimpleMatch', '-ShowError', '-Separator', '-SecureString', '-SecureKey',
+ '-SecondValue', '-SecondsRemaining', '-Seconds', '-Second', '-Scope', '-Root', '-Role',
+ '-Resolve', '-RemoveListener', '-RemoveFileListener', '-Registered', '-ReferenceObject',
+ '-Recurse', '-RecommendedAction', '-ReadCount', '-Quiet', '-Query', '-Qualifier', '-PSSnapin',
+ '-PSProvider', '-PSHost', '-PSDrive', '-PropertyType', '-Property', '-Prompt', '-Process',
+ '-PrependPath', '-PercentComplete', '-Pattern', '-PathType', '-Path', '-PassThru', '-ParentId',
+ '-Parent', '-Parameter', '-Paging', '-OutVariable', '-OutBuffer', '-Option', '-OnType', '-Off',
+ '-Object', '-Noun', '-NoTypeInformation', '-NoQualifier', '-NoNewline', '-NoElement',
+ '-NoClobber', '-NewName', '-Newest', '-Namespace', '-Name', '-Month', '-Minutes', '-Minute',
+ '-Minimum', '-Milliseconds', '-Message', '-MemberType', '-Maximum', '-LogName', '-LiteralPath',
+ '-LiteralName', '-ListenerOption', '-List', '-Line', '-Leaf', '-Last', '-Key', '-ItemType',
+ '-IsValid', '-IsAbsolute', '-InputObject', '-IncludeEqual', '-IncludeChain', '-Include',
+ '-IgnoreWhiteSpace', '-Id', '-Hours', '-Hour', '-HideTableHeaders', '-Head', '-GroupBy',
+ '-Functionality', '-Full', '-Format', '-ForegroundColor', '-Force', '-First', '-FilterScript',
+ '-Filter', '-FilePath', '-Expression', '-ExpandProperty', '-Expand', '-ExecutionPolicy',
+ '-ExcludeProperty', '-ExcludeDifferent', '-Exclude', '-Exception', '-Examples', '-ErrorVariable',
+ '-ErrorRecord', '-ErrorId', '-ErrorAction', '-End', '-Encoding', '-DisplayName', '-DisplayHint',
+ '-DisplayError', '-DifferenceObject', '-Detailed', '-Destination', '-Description', '-Descending',
+ '-Depth', '-DependsOn', '-Delimiter', '-Debugger', '-Debug', '-Days', '-Day', '-Date',
+ '-CurrentOperation', '-Culture', '-Credential', '-Count', '-Container', '-Confirm',
+ '-ComputerName', '-Component', '-Completed', '-ComObject', '-CommandType', '-Command',
+ '-Column', '-Class', '-ChildPath', '-Character', '-Certificate', '-CategoryTargetType',
+ '-CategoryTargetName', '-CategoryReason', '-CategoryActivity', '-Category', '-CaseSensitive',
+ '-Body', '-BinaryPathName', '-Begin', '-BackgroundColor', '-Average', '-AutoSize', '-Audit',
+ '-AsString', '-AsSecureString', '-AsPlainText', '-As', '-ArgumentList', '-AppendPath', '-Append',
+ '-Adjust', '-Activity', '-AclObject'
+ ),
+ 6 => array(
+ '_','args','DebugPreference','Error','ErrorActionPreference',
+ 'foreach','Home','Host','Input','LASTEXITCODE','MaximumAliasCount',
+ 'MaximumDriveCount','MaximumFunctionCount','MaximumHistoryCount',
+ 'MaximumVariableCount','OFS','PsHome',
+ 'ReportErrorShowExceptionClass','ReportErrorShowInnerException',
+ 'ReportErrorShowSource','ReportErrorShowStackTrace',
+ 'ShouldProcessPreference','ShouldProcessReturnPreference',
+ 'StackTrace','VerbosePreference','WarningPreference','PWD'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '[', ']', '{', '}', '=', '<', '>', '@', '|', '&', ',', '?',
+ '+=', '-=', '*=', '/=', '%=', '*', '/', '%', '!', '+', '-', '++', '--'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false,
+ 6 => true
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #008080; font-weight: bold;',
+ 2 => 'color: #008080; font-weight: bold;',
+ 3 => 'color: #0000FF;',
+ 4 => 'color: #FF0000;',
+ 5 => 'color: #008080; font-style: italic;',
+ 6 => 'color: #000080;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #008000;',
+ 'MULTI' => 'color: #008000;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #008080; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #800000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #804000;'
+ ),
+ 'METHODS' => array(
+ 0 => 'color: pink;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: pink;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #800080;',
+ 3 => 'color: #008080;',
+ 4 => 'color: #008080;',
+ 5 => 'color: #800000;',
+ 6 => 'color: #000080;'
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => '',
+ 5 => '',
+ 6 => 'about:blank',
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ // special after pipe
+ 3 => array(
+ GESHI_SEARCH => '(\[)(int|long|string|char|bool|byte|double|decimal|float|single|regex|array|xml|scriptblock|switch|hashtable|type|ref|psobject|wmi|wmisearcher|wmiclass|object)((\[.*\])?\])',
+ GESHI_REPLACE => '\2',
+ GESHI_MODIFIERS => 'si',
+ GESHI_BEFORE => '\1',
+ GESHI_AFTER => '\3'
+ ),
+ // Classes
+ 4 => array(
+ GESHI_SEARCH => '(\[)(System\.Reflection\.Assembly|System\.Net\.CredentialCache|Microsoft\.SharePoint\.SPFileLevel|Microsoft\.SharePoint\.Publishing\.PublishingWeb|Microsoft\.SharePoint\.Publishing|Microsoft\.SharePoint\.SPWeb)(\])',
+ GESHI_REPLACE => '\2',
+ GESHI_MODIFIERS => 'i',
+ GESHI_BEFORE => '\1',
+ GESHI_AFTER => '\3'
+ ),
+ // Members
+ // There's about a hundred million of these, add the ones you need as you need them
+ 5 => array (
+ GESHI_SEARCH => '(::)(ReflectionOnlyLoadFrom|ReflectionOnlyLoad|ReferenceEquals|LoadWithPartialName|LoadFrom|LoadFile|Load|GetExecutingAssembly|GetEntryAssembly|GetCallingAssembly|GetAssembly|Equals|DefaultNetworkCredentials|DefaultCredentials|CreateQualifiedName|Checkout|Draft|Published|IsPublishingWeb)',
+ GESHI_REPLACE => '\2',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '\1',
+ GESHI_AFTER => ''
+ ),
+ // Special variables
+ 6 => array(
+ GESHI_SEARCH => '(\$)(\$[_\^]?|\?)(?!\w)',
+ GESHI_REPLACE => '\1\2',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
+ ),
+ // variables
+ //BenBE: Please note that changes here and in Keyword group 6 have to be synchronized in order to work properly.
+ //This Regexp must only match, if keyword group 6 doesn't. If this assumption fails
+ //Highlighting of the keywords will be incomplete or incorrect!
+ 0 => "(?<!\\\$|>)[\\\$](\w+)(?=[^|\w])",
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'PARSER_CONTROL' => array(
+ 'KEYWORDS' => array(
+ 4 => array(
+ 'DISALLOWED_AFTER' => '(?![a-zA-Z])',
+ 'DISALLOWED_BEFORE' => ''
+ ),
+ 6 => array(
+ 'DISALLOWED_BEFORE' => '(?<!\$>)\$'
+ )
+ )
+ )
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/progress.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/progress.php
new file mode 100644
index 000000000..2d6024e74
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/progress.php
@@ -0,0 +1,485 @@
+<?php
+/*************************************************************************************
+ * progress.php
+ * --------
+ * Author: Marco Aurelio de Pasqual (marcop@hdi.com.br)
+ * Copyright: (c) 2008 Marco Aurelio de Pasqual, Benny Baumann (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2008/07/11
+ *
+ * Progress language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/07/11 (1.0.8)
+ * - First Release
+ *
+ * TODO (updated 2008/07/11)
+ * -------------------------
+ * * Clean up the keyword list
+ * * Sort Keyword lists by Control Structures, Predefined functions and other important keywords
+ * * Complete language support
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array(
+ 'LANG_NAME' => 'Progress',
+ 'COMMENT_SINGLE' => array(),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_UPPER,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array (
+ 1 => array(
+ 'ACCUMULATE','APPLY','ASSIGN','BELL','QUERY',
+ 'BUFFER-COMPARE','BUFFER-COPY','CALL','CASE',
+ 'CHOOSE','CLASS','CLOSE QUERY','each','WHERE',
+ 'CLOSE STORED-PROCEDURE','COLOR','COMPILE','CONNECT',
+ 'CONSTRUCTOR','COPY-LOB','CREATE','CREATE ALIAS',
+ 'CREATE BROWSE','CREATE BUFFER','CREATE CALL','CREATE CLIENT-PRINCIPAL',
+ 'CREATE DATABASE','CREATE DATASET','CREATE DATA-SOURCE','CREATE QUERY',
+ 'CREATE SAX-attributeS','CREATE SAX-READER','CREATE SAX-WRITER','CREATE SERVER',
+ 'CREATE SERVER-SOCKET','CREATE SOAP-HEADER','CREATE SOAP-HEADER-ENTRYREF','CREATE SOCKET',
+ 'CREATE TEMP-TABLE','CREATE WIDGET','CREATE widget-POOL','CREATE X-DOCUMENT',
+ 'CREATE X-NODEREF','CURRENT-LANGUAGE','CURRENT-VALUE','DDE ADVISE',
+ 'DDE EXECUTE','DDE GET','DDE INITIATE','DDE REQUEST',
+ 'DDE SEND','DDE TERMINATE','DEFINE BROWSE','DEFINE BUFFER','DEFINE',
+ 'DEFINE BUTTON','DEFINE DATASET','DEFINE DATA-SOURCE','DEFINE FRAME','DEF','VAR',
+ 'DEFINE IMAGE','DEFINE MENU','DEFINE PARAMETER','DEFINE property','PARAM',
+ 'DEFINE QUERY','DEFINE RECTANGLE','DEFINE STREAM','DEFINE SUB-MENU',
+ 'DEFINE TEMP-TABLE','DEFINE WORKFILE','DEFINE WORK-TABLE',
+ 'DELETE','DELETE ALIAS','DELETE object','DELETE PROCEDURE',
+ 'DELETE widget','DELETE widget-POOL','DESTRUCTOR','DICTIONARY',
+ 'DISABLE','DISABLE TRIGGERS','DISCONNECT','DISPLAY',
+ 'DO','DOS','DOWN','DYNAMIC-CURRENT-VALUE',
+ 'ELSE','EMPTY TEMP-TABLE','ENABLE','END',
+ 'ENTRY','FIND','AND',
+ 'FIX-CODEPAGE','FOR','FORM','FRAME-VALUE',
+ 'GET','GET-KEY-VALUE','HIDE','IF',
+ 'IMPORT','INPUT CLEAR','INPUT CLOSE','INPUT FROM','input',
+ 'INPUT THROUGH','INPUT-OUTPUT CLOSE','INPUT-OUTPUT THROUGH',
+ 'INTERFACE','LEAVE','BREAK',
+ 'LOAD-PICTURE','MESSAGE','method','NEXT','prev',
+ 'NEXT-PROMPT','ON','OPEN QUERY','OS-APPEND',
+ 'OS-COMMAND','OS-COPY','OS-CREATE-DIR','OS-DELETE',
+ 'OS-RENAME','OUTPUT CLOSE','OUTPUT THROUGH','OUTPUT TO',
+ 'OVERLAY','PAGE','PAUSE','PROCEDURE',
+ 'PROCESS EVENTS','PROMPT-FOR','PROMSGS','PROPATH',
+ 'PUBLISH','PUT','PUT CURSOR','PUT SCREEN',
+ 'PUT-BITS','PUT-BYTE','PUT-BYTES','PUT-DOUBLE',
+ 'PUT-FLOAT','PUT-INT64','PUT-KEY-VALUE','PUT-LONG',
+ 'PUT-SHORT','PUT-STRING','PUT-UNSIGNED-LONG','PUT-UNSIGNED-SHORT',
+ 'QUIT','RAW-TRANSFER','READKEY','RELEASE',
+ 'RELEASE EXTERNAL','RELEASE object','REPEAT','REPOSITION',
+ 'RUN','RUN STORED-PROCEDURE','RUN SUPER',
+ 'SAVE CACHE','SCROLL','SEEK','SET',
+ 'SET-BYTE-ORDER','SET-POINTER-VALUE','SET-SIZE','SHOW-STATS',
+ 'STATUS','STOP','SUBSCRIBE','SUBSTRING',
+ 'system-DIALOG COLOR','system-DIALOG FONT','system-DIALOG GET-DIR','system-DIALOG GET-FILE',
+ 'system-DIALOG PRINTER-SETUP','system-HELP','THEN','THIS-object',
+ 'TRANSACTION-MODE AUTOMATIC','TRIGGER PROCEDURE','UNDERLINE','UNDO',
+ 'UNIX','UNLOAD','UNSUBSCRIBE','UP','STRING',
+ 'UPDATE','USE','USING','substr','SKIP','CLOSE',
+ 'VIEW','WAIT-FOR','MODULO','NE','AVAIL',
+ 'NOT','OR','&GLOBAL-DEFINE','&IF','UNFORMATTED','NO-PAUSE',
+ '&THEN','&ELSEIF','&ELSE','&ENDIF','OPEN','NO-WAIT',
+ '&MESSAGE','&SCOPED-DEFINE','&UNDEFINE','DEFINED',
+ 'BROWSE','BUTTON','COMBO-BOX','CONTROL-FRAME',
+ 'DIALOG-BOX','EDITOR','FIELD-GROUP','FILL-IN',
+ 'FRAME','IMAGE','LITERAL','MENU',
+ 'MENU-ITEM','RADIO-SET','RECTANGLE','SELECTION-LIST',
+ 'SLIDER','SUB-MENU','TEXT','TOGGLE-BOX',
+ 'WINDOW','WITH','AT','OF','EDITING','ON ENDKEY','output',
+ 'ON ERROR','ON QUIT','ON STOP','PRESELECT',
+ 'QUERY-TUNING','SIZE','Trigger','VIEW-AS','ALERT-BOX',
+ 'Buffer','Data-relation','ProDataSet','SAX-attributes',
+ 'SAX-reader','SAX-writer','Server socket','SOAP-fault',
+ 'SOAP-header','SOAP-header-entryref','Socket','Temp-table',
+ 'X-noderef','Height','Left','Top','TO',
+ 'Width','ACTIVE-WINDOW','AUDIT-CONTROL','FIRST','LAST',
+ 'AUDIT-POLICY','CLIPBOARD','CODEBASE-LOCATOR','COLOR-TABLE',
+ 'COMPILER','COM-SELF','DEBUGGER','DEFAULT-WINDOW',
+ 'ERROR-STATUS','FILE-INFO','FOCUS','FONT-TABLE',
+ 'LAST-EVENT','LOG-MANAGER','RCODE-INFO','SECURITY-POLICY',
+ 'SELF','SESSION','SOURCE-PROCEDURE','TARGET-PROCEDURE','NO-LOCK','NO-error',
+ 'THIS-PROCEDURE','WEB-CONTEXT','FUNCTION','RETURNS','NO-UNDO'
+ ),
+ 2 => array(
+ 'ACCEPT-CHANGES','ACCEPT-ROW-CHANGES','ADD-BUFFER','ADD-CALC-COLUMN',
+ 'ADD-COLUMNS-FROM','ADD-EVENTS-PROCEDURE','ADD-FIELDS-FROM','ADD-FIRST',
+ 'ADD-HEADER-ENTRY','ADD-INDEX-FIELD','ADD-LAST','ADD-LIKE-COLUMN',
+ 'ADD-LIKE-FIELD','ADD-LIKE-INDEX','ADD-NEW-FIELD','ADD-NEW-INDEX',
+ 'ADD-RELATION','ADD-SCHEMA-LOCATION','ADD-SOURCE-BUFFER','ADD-SUPER-PROCEDURE',
+ 'APPEND-CHILD','APPLY-CALLBACK','ATTACH-DATA-SOURCE','AUTHENTICATION-FAILED',
+ 'BEGIN-EVENT-GROUP','BUFFER-CREATE',
+ 'BUFFER-DELETE','BUFFER-RELEASE','BUFFER-VALIDATE',
+ 'CANCEL-BREAK','CANCEL-REQUESTS','CLEAR','CLEAR-APPL-CONTEXT',
+ 'CLEAR-LOG','CLEAR-SELECTION','CLEAR-SORT-ARROWS','CLONE-NODE',
+ 'CLOSE-LOG','CONNECTED','CONVERT-TO-OFFSET',
+ 'COPY-DATASET','COPY-SAX-attributeS','COPY-TEMP-TABLE','CREATE-LIKE',
+ 'CREATE-NODE','CREATE-NODE-NAMESPACE','CREATE-RESULT-LIST-ENTRY','DEBUG',
+ 'DECLARE-NAMESPACE','DELETE-CHAR','DELETE-CURRENT-ROW',
+ 'DELETE-HEADER-ENTRY','DELETE-LINE','DELETE-NODE','DELETE-RESULT-LIST-ENTRY',
+ 'DELETE-SELECTED-ROW','DELETE-SELECTED-ROWS','DESELECT-FOCUSED-ROW','DESELECT-ROWS',
+ 'DESELECT-SELECTED-ROW','DETACH-DATA-SOURCE','DISABLE-CONNECTIONS',
+ 'DISABLE-DUMP-TRIGGERS','DISABLE-LOAD-TRIGGERS','DISPLAY-MESSAGE',
+ 'DUMP-LOGGING-NOW','EDIT-CLEAR','EDIT-COPY','EDIT-CUT',
+ 'EDIT-PASTE','EDIT-UNDO','EMPTY-DATASET','EMPTY-TEMP-TABLE',
+ 'ENABLE-CONNECTIONS','ENABLE-EVENTS','ENCRYPT-AUDIT-MAC-KEY',
+ 'END-DOCUMENT','END-ELEMENT','END-EVENT-GROUP','END-FILE-DROP',
+ 'EXPORT','EXPORT-PRINCIPAL','FETCH-SELECTED-ROW',
+ 'FILL','FIND-BY-ROWID','FIND-CURRENT','FIND-FIRST',
+ 'FIND-LAST','FIND-UNIQUE','GET-attribute','GET-attribute-NODE',
+ 'GET-BINARY-DATA','GET-BLUE-VALUE','GET-BROWSE-COLUMN','GET-BUFFER-HANDLE',
+ 'GET-BYTES-AVAILABLE','GET-CALLBACK-PROC-CONTEXT','GET-CALLBACK-PROC-NAME','GET-CGI-LIST',
+ 'GET-CGI-LONG-VALUE','GET-CGI-VALUE','GET-CHANGES','GET-CHILD',
+ 'GET-CHILD-RELATION','GET-CONFIG-VALUE','GET-CURRENT','GET-DATASET-BUFFER',
+ 'GET-DOCUMENT-ELEMENT','GET-DROPPED-FILE','GET-DYNAMIC','GET-ERROR-COLUMN ',
+ 'GET-ERROR-ROW ','GET-FILE-NAME ','GET-FILE-OFFSET ','GET-FIRST',
+ 'GET-GREEN-VALUE','GET-HEADER-ENTRY','GET-INDEX-BY-NAMESPACE-NAME','GET-INDEX-BY-QNAME',
+ 'GET-ITERATION','GET-LAST','GET-LOCALNAME-BY-INDEX','GET-MESSAGE',
+ 'GET-NEXT','GET-NODE','GET-NUMBER','GET-PARENT',
+ 'GET-PREV','GET-PRINTERS','GET-property','GET-QNAME-BY-INDEX',
+ 'GET-RED-VALUE','GET-RELATION','GET-REPOSITIONED-ROW','GET-RGB-VALUE',
+ 'GET-SELECTED-widget','GET-SERIALIZED','GET-SIGNATURE','GET-SOCKET-OPTION',
+ 'GET-SOURCE-BUFFER','GET-TAB-ITEM','GET-TEXT-HEIGHT-CHARS','GET-TEXT-HEIGHT-PIXELS',
+ 'GET-TEXT-WIDTH-CHARS','GET-TEXT-WIDTH-PIXELS','GET-TOP-BUFFER','GET-TYPE-BY-INDEX',
+ 'GET-TYPE-BY-NAMESPACE-NAME','GET-TYPE-BY-QNAME','GET-URI-BY-INDEX','GET-VALUE-BY-INDEX',
+ 'GET-VALUE-BY-NAMESPACE-NAME','GET-VALUE-BY-QNAME','GET-WAIT-STATE','IMPORT-NODE',
+ 'IMPORT-PRINCIPAL','INCREMENT-EXCLUSIVE-ID','INITIALIZE-DOCUMENT-TYPE',
+ 'INITIATE','INSERT','INSERT-attribute','INSERT-BACKTAB',
+ 'INSERT-BEFORE','INSERT-FILE','INSERT-ROW','INSERT-STRING',
+ 'INSERT-TAB','INVOKE','IS-ROW-SELECTED','IS-SELECTED',
+ 'LIST-property-NAMES','LOAD','LoadControls','LOAD-DOMAINS',
+ 'LOAD-ICON','LOAD-IMAGE','LOAD-IMAGE-DOWN','LOAD-IMAGE-INSENSITIVE',
+ 'LOAD-IMAGE-UP','LOAD-MOUSE-POINTER','LOAD-SMALL-ICON','LOCK-REGISTRATION',
+ 'LOG-AUDIT-EVENT','LOGOUT','LONGCHAR-TO-NODE-VALUE','LOOKUP',
+ 'MEMPTR-TO-NODE-VALUE','MERGE-CHANGES','MERGE-ROW-CHANGES','MOVE-AFTER-TAB-ITEM',
+ 'MOVE-BEFORE-TAB-ITEM','MOVE-COLUMN','MOVE-TO-BOTTOM','MOVE-TO-EOF',
+ 'MOVE-TO-TOP','NODE-VALUE-TO-LONGCHAR','NODE-VALUE-TO-MEMPTR','NORMALIZE',
+ 'QUERY-CLOSE','QUERY-OPEN','QUERY-PREPARE',
+ 'READ','READ-FILE','READ-XML','READ-XMLSCHEMA',
+ 'REFRESH','REFRESH-AUDIT-POLICY','REGISTER-DOMAIN','REJECT-CHANGES',
+ 'REJECT-ROW-CHANGES','REMOVE-attribute','REMOVE-CHILD','REMOVE-EVENTS-PROCEDURE',
+ 'REMOVE-SUPER-PROCEDURE','REPLACE','REPLACE-CHILD','REPLACE-SELECTION-TEXT',
+ 'REPOSITION-BACKWARD','REPOSITION-FORWARD','REPOSITION-TO-ROW','REPOSITION-TO-ROWID',
+ 'RESET','SAVE','SAVE-FILE','SAVE-ROW-CHANGES',
+ 'SAX-PARSE','SAX-PARSE-FIRST','SAX-PARSE-NEXT','SCROLL-TO-CURRENT-ROW',
+ 'SCROLL-TO-ITEM','SCROLL-TO-SELECTED-ROW','SEAL','SEARCH',
+ 'SELECT-ALL','SELECT-FOCUSED-ROW','SELECT-NEXT-ROW','SELECT-PREV-ROW',
+ 'SELECT-ROW','SET-ACTOR','SET-APPL-CONTEXT','SET-attribute',
+ 'SET-attribute-NODE','SET-BLUE-VALUE','SET-BREAK','SET-BUFFERS',
+ 'SET-CALLBACK','SET-CALLBACK-PROCEDURE','SET-CLIENT','SET-COMMIT',
+ 'SET-CONNECT-PROCEDURE','SET-DYNAMIC','SET-GREEN-VALUE','SET-INPUT-SOURCE',
+ 'SET-MUST-UNDERSTAND','SET-NODE','SET-NUMERIC-FORMAT','SET-OUTPUT-DESTINATION',
+ 'SET-PARAMETER','SET-property','SET-READ-RESPONSE-PROCEDURE','SET-RED-VALUE',
+ 'SET-REPOSITIONED-ROW','SET-RGB-VALUE','SET-ROLLBACK','SET-SELECTION',
+ 'SET-SERIALIZED','SET-SOCKET-OPTION','SET-SORT-ARROW','SET-WAIT-STATE',
+ 'START-DOCUMENT','START-ELEMENT','STOP-PARSING','SYNCHRONIZE',
+ 'TEMP-TABLE-PREPARE','UPDATE-attribute','URL-DECODE','URL-ENCODE',
+ 'VALIDATE','VALIDATE-SEAL','WRITE','WRITE-CDATA','USE-INDEX',
+ 'WRITE-CHARACTERS','WRITE-COMMENT','WRITE-DATA-ELEMENT','WRITE-EMPTY-ELEMENT',
+ 'WRITE-ENTITY-REF','WRITE-EXTERNAL-DTD','WRITE-FRAGMENT','WRITE-MESSAGE',
+ 'WRITE-PROCESSING-INSTRUCTION','WRITE-XML','WRITE-XMLSCHEMA','FALSE','true'
+ ),
+ 3 => array(
+ 'ABSOLUTE','ACCUM','ADD-INTERVAL','ALIAS','mod',
+ 'AMBIGUOUS','ASC','AUDIT-ENABLED','AVAILABLE',
+ 'BASE64-DECODE','BASE64-ENCODE','CAN-DO','CAN-FIND',
+ 'CAN-QUERY','CAN-SET','CAPS','CAST','OS-DIR',
+ 'CHR','CODEPAGE-CONVERT','COMPARE',
+ 'COUNT-OF','CURRENT-CHANGED','CURRENT-RESULT-ROW','DATASERVERS',
+ 'DATA-SOURCE-MODIFIED','DATETIME','DATETIME-TZ',
+ 'DAY','DBCODEPAGE','DBCOLLATION','DBNAME',
+ 'DBPARAM','DBRESTRICTIONS','DBTASKID','DBTYPE',
+ 'DBVERSION','DECIMAL','DECRYPT','DYNAMIC-function',
+ 'DYNAMIC-NEXT-VALUE','ENCODE','ENCRYPT','ENTERED',
+ 'ERROR','ETIME','EXP','ENDKEY','END-error',
+ 'FIRST-OF','FRAME-DB','FRAME-DOWN',
+ 'FRAME-FIELD','FRAME-FILE','FRAME-INDEX','FRAME-LINE',
+ 'GATEWAYS','GENERATE-PBE-KEY','GENERATE-PBE-SALT','GENERATE-RANDOM-KEY',
+ 'GENERATE-UUID','GET-BITS','GET-BYTE','GET-BYTE-ORDER',
+ 'GET-BYTES','GET-CODEPAGE','GET-CODEPAGES','GET-COLLATION',
+ 'GET-COLLATIONS','GET-DOUBLE','GET-FLOAT','GET-INT64',
+ 'GET-LONG','GET-POINTER-VALUE','GET-SHORT','GET-SIZE',
+ 'GET-STRING','GET-UNSIGNED-LONG','GET-UNSIGNED-SHORT','GO-PENDING',
+ 'GUID','HEX-DECODE','INDEX',
+ 'INT64','INTEGER','INTERVAL','IS-ATTR-SPACE',
+ 'IS-CODEPAGE-FIXED','IS-COLUMN-CODEPAGE','IS-LEAD-BYTE','ISO-DATE',
+ 'KBLABEL','KEYCODE','KEYFUNCTION','KEYLABEL',
+ 'KEYWORD','KEYWORD-ALL','LASTKEY',
+ 'LAST-OF','LC','LDBNAME','LEFT-TRIM',
+ 'LIBRARY','LINE-COUNTER','LIST-EVENTS','LIST-QUERY-ATTRS',
+ 'LIST-SET-ATTRS','LIST-widgetS','LOCKED',
+ 'LOGICAL','MAXIMUM','MD5-DIGEST',
+ 'MEMBER','MESSAGE-LINES','MINIMUM','MONTH',
+ 'MTIME','NEW','NEXT-VALUE','SHARED',
+ 'NOT ENTERED','NOW','NUM-ALIASES','NUM-DBS',
+ 'NUM-ENTRIES','NUM-RESULTS','OPSYS','OS-DRIVES',
+ 'OS-ERROR','OS-GETENV','PAGE-NUMBER','PAGE-SIZE',
+ 'PDBNAME','PROC-HANDLE','PROC-STATUS','PROGRAM-NAME',
+ 'PROGRESS','PROVERSION','QUERY-OFF-END','QUOTER',
+ 'RANDOM','RAW','RECID','REJECTED',
+ 'RETRY','RETURN-VALUE','RGB-VALUE',
+ 'RIGHT-TRIM','R-INDEX','ROUND','ROWID','LENGTH',
+ 'SDBNAME','SET-DB-CLIENT','SETUSERID',
+ 'SHA1-DIGEST','SQRT','SUBSTITUTE','VARIABLE',
+ 'SUPER','TERMINAL','TIME','TIMEZONE','external',
+ 'TODAY','TO-ROWID','TRIM','TRUNCATE','return',
+ 'TYPE-OF','USERID','VALID-EVENT','VALID-HANDLE',
+ 'VALID-object','WEEKDAY','YEAR','BEGINS','VALUE',
+ 'EQ','GE','GT','LE','LT','MATCHES','AS','BY','LIKE'
+ ),
+ 4 => array(
+ 'ACCELERATOR','ACTIVE','ACTOR','ADM-DATA',
+ 'AFTER-BUFFER','AFTER-ROWID','AFTER-TABLE','ALLOW-COLUMN-SEARCHING',
+ 'ALWAYS-ON-TOP','APPL-ALERT-BOXES','APPL-CONTEXT-ID','APPSERVER-INFO',
+ 'APPSERVER-PASSWORD','APPSERVER-USERID','ASYNCHRONOUS','ASYNC-REQUEST-COUNT',
+ 'ASYNC-REQUEST-HANDLE','ATTACHED-PAIRLIST','attribute-NAMES','ATTR-SPACE',
+ 'AUDIT-EVENT-CONTEXT','AUTO-COMPLETION','AUTO-DELETE','AUTO-DELETE-XML',
+ 'AUTO-END-KEY','AUTO-GO','AUTO-INDENT','AUTO-RESIZE',
+ 'AUTO-RETURN','AUTO-SYNCHRONIZE','AUTO-VALIDATE','AUTO-ZAP',
+ 'AVAILABLE-FORMATS','BACKGROUND','BASE-ADE','BASIC-LOGGING',
+ 'BATCH-MODE','BATCH-SIZE','BEFORE-BUFFER','BEFORE-ROWID',
+ 'BEFORE-TABLE','BGCOLOR','BLANK','BLOCK-ITERATION-DISPLAY',
+ 'BORDER-BOTTOM-CHARS','BORDER-BOTTOM-PIXELS','BORDER-LEFT-CHARS','BORDER-LEFT-PIXELS',
+ 'BORDER-RIGHT-CHARS','BORDER-RIGHT-PIXELS','BORDER-TOP-CHARS','BORDER-TOP-PIXELS',
+ 'BOX','BOX-SELECTABLE','BUFFER-CHARS','BUFFER-FIELD',
+ 'BUFFER-HANDLE','BUFFER-LINES','BUFFER-NAME','BUFFER-VALUE',
+ 'BYTES-READ','BYTES-WRITTEN','CACHE','CALL-NAME',
+ 'CALL-TYPE','CANCEL-BUTTON','CANCELLED','CAN-CREATE',
+ 'CAN-DELETE','CAN-READ','CAN-WRITE','CAREFUL-PAINT',
+ 'CASE-SENSITIVE','CENTERED','CHARSET','CHECKED',
+ 'CHILD-BUFFER','CHILD-NUM','CLASS-TYPE','CLIENT-CONNECTION-ID',
+ 'CLIENT-TTY','CLIENT-TYPE','CLIENT-WORKSTATION','CODE',
+ 'CODEPAGE','COLUMN','COLUMN-BGCOLOR','COLUMN-DCOLOR',
+ 'COLUMN-FGCOLOR','COLUMN-FONT','COLUMN-LABEL','COLUMN-MOVABLE',
+ 'COLUMN-PFCOLOR','COLUMN-READ-ONLY','COLUMN-RESIZABLE','COLUMN-SCROLLING',
+ 'COM-HANDLE','COMPLETE','CONFIG-NAME','CONTEXT-HELP',
+ 'CONTEXT-HELP-FILE','CONTEXT-HELP-ID','CONTROL-BOX','CONVERT-3D-COLORS',
+ 'CPCASE','CPCOLL','CPINTERNAL','CPLOG',
+ 'CPPRINT','CPRCODEIN','CPRCODEOUT','CPSTREAM',
+ 'CPTERM','CRC-VALUE','CURRENT-COLUMN','CURRENT-ENVIRONMENT',
+ 'CURRENT-ITERATION','CURRENT-ROW-MODIFIED','CURRENT-WINDOW','CURSOR-CHAR',
+ 'CURSOR-LINE','CURSOR-OFFSET','DATA-ENTRY-RETURN','DATASET',
+ 'DATA-SOURCE','DATA-SOURCE-COMPLETE-MAP','DATA-TYPE','DATE-FORMAT',
+ 'DB-REFERENCES','DCOLOR','DDE-ERROR','DDE-ID',
+ 'DDE-ITEM','DDE-NAME','DDE-TOPIC','DEBLANK',
+ 'DEBUG-ALERT','DECIMALS','DEFAULT','DEFAULT-BUFFER-HANDLE',
+ 'DEFAULT-BUTTON','DEFAULT-COMMIT','DELIMITER','DISABLE-AUTO-ZAP',
+ 'DISPLAY-TIMEZONE','DISPLAY-TYPE','DOMAIN-DESCRIPTION','DOMAIN-NAME',
+ 'DOMAIN-TYPE','DRAG-ENABLED','DROP-TARGET','DYNAMIC',
+ 'EDGE-CHARS','EDGE-PIXELS','EDIT-CAN-PASTE','EDIT-CAN-UNDO',
+ 'EMPTY','ENCODING','ENCRYPTION-SALT','END-USER-PROMPT',
+ 'ENTRY-TYPES-LIST','ERROR-COLUMN','ERROR-object-DETAIL','ERROR-ROW',
+ 'ERROR-STRING','EVENT-GROUP-ID','EVENT-PROCEDURE','EVENT-PROCEDURE-CONTEXT',
+ 'EVENT-TYPE','EXCLUSIVE-ID','EXECUTION-LOG','EXPAND',
+ 'EXPANDABLE','FGCOLOR','FILE-CREATE-DATE','FILE-CREATE-TIME',
+ 'FILE-MOD-DATE','FILE-MOD-TIME','FILE-NAME','FILE-OFFSET',
+ 'FILE-SIZE','FILE-TYPE','FILLED','FILL-MODE',
+ 'FILL-WHERE-STRING','FIRST-ASYNC-REQUEST','FIRST-BUFFER','FIRST-CHILD',
+ 'FIRST-COLUMN','FIRST-DATASET','FIRST-DATA-SOURCE','FIRST-object',
+ 'FIRST-PROCEDURE','FIRST-QUERY','FIRST-SERVER','FIRST-SERVER-SOCKET',
+ 'FIRST-SOCKET','FIRST-TAB-ITEM','FIT-LAST-COLUMN','FLAT-BUTTON',
+ 'FOCUSED-ROW','FOCUSED-ROW-SELECTED','FONT','FOREGROUND',
+ 'FORMAT','FORMATTED','FORM-INPUT','FORM-LONG-INPUT',
+ 'FORWARD-ONLY','FRAGMENT','FRAME-COL','FRAME-NAME',
+ 'FRAME-ROW','FRAME-SPACING','FRAME-X','FRAME-Y',
+ 'FREQUENCY','FULL-HEIGHT-CHARS','FULL-HEIGHT-PIXELS','FULL-PATHNAME',
+ 'FULL-WIDTH-CHARS','FULL-WIDTH-PIXELS','GRAPHIC-EDGE',
+ 'GRID-FACTOR-HORIZONTAL','GRID-FACTOR-VERTICAL','GRID-SNAP','GRID-UNIT-HEIGHT-CHARS',
+ 'GRID-UNIT-HEIGHT-PIXELS','GRID-UNIT-WIDTH-CHARS','GRID-UNIT-WIDTH-PIXELS','GRID-VISIBLE',
+ 'GROUP-BOX','HANDLE','HANDLER','HAS-LOBS',
+ 'HAS-RECORDS','HEIGHT-CHARS','HEIGHT-PIXELS','HELP',
+ 'HIDDEN','HORIZONTAL','HTML-CHARSET','HTML-END-OF-LINE',
+ 'HTML-END-OF-PAGE','HTML-FRAME-BEGIN','HTML-FRAME-END','HTML-HEADER-BEGIN',
+ 'HTML-HEADER-END','HTML-TITLE-BEGIN','HTML-TITLE-END','HWND',
+ 'ICFPARAMETER','ICON','IGNORE-CURRENT-MODIFIED','IMAGE-DOWN',
+ 'IMAGE-INSENSITIVE','IMAGE-UP','IMMEDIATE-DISPLAY','INDEX-INFORMATION',
+ 'IN-HANDLE','INHERIT-BGCOLOR','INHERIT-FGCOLOR','INITIAL','INIT',
+ 'INNER-CHARS','INNER-LINES','INPUT-VALUE','INSTANTIATING-PROCEDURE',
+ 'INTERNAL-ENTRIES','IS-CLASS','IS-OPEN','IS-PARAMETER-SET',
+ 'IS-XML','ITEMS-PER-ROW','KEEP-CONNECTION-OPEN','KEEP-FRAME-Z-ORDER',
+ 'KEEP-SECURITY-CACHE','KEY','KEYS','LABEL',
+ 'LABEL-BGCOLOR','LABEL-DCOLOR','LABEL-FGCOLOR','LABEL-FONT',
+ 'LABELS','LANGUAGES','LARGE','LARGE-TO-SMALL',
+ 'LAST-ASYNC-REQUEST','LAST-BATCH','LAST-CHILD','LAST-object',
+ 'LAST-PROCEDURE','LAST-SERVER','LAST-SERVER-SOCKET','LAST-SOCKET',
+ 'LAST-TAB-ITEM','LINE','LIST-ITEM-PAIRS','LIST-ITEMS',
+ 'LITERAL-QUESTION','LOCAL-HOST','LOCAL-NAME','LOCAL-PORT',
+ 'LOCATOR-COLUMN-NUMBER','LOCATOR-LINE-NUMBER','LOCATOR-PUBLIC-ID','LOCATOR-system-ID',
+ 'LOCATOR-TYPE','LOG-ENTRY-TYPES','LOGFILE-NAME','LOGGING-LEVEL',
+ 'LOGIN-EXPIRATION-TIMESTAMP','LOGIN-HOST','LOGIN-STATE','LOG-THRESHOLD',
+ 'MANDATORY','MANUAL-HIGHLIGHT','MAX-BUTTON','MAX-CHARS',
+ 'MAX-DATA-GUESS','MAX-HEIGHT-CHARS','MAX-HEIGHT-PIXELS','MAX-VALUE',
+ 'MAX-WIDTH-CHARS','MAX-WIDTH-PIXELS','MD5-VALUE','MENU-BAR',
+ 'MENU-KEY','MENU-MOUSE','MERGE-BY-FIELD','MESSAGE-AREA',
+ 'MESSAGE-AREA-FONT','MIN-BUTTON','MIN-COLUMN-WIDTH-CHARS','MIN-COLUMN-WIDTH-PIXELS',
+ 'MIN-HEIGHT-CHARS','MIN-HEIGHT-PIXELS','MIN-SCHEMA-MARSHAL','MIN-VALUE',
+ 'MIN-WIDTH-CHARS','MIN-WIDTH-PIXELS','MODIFIED','MOUSE-POINTER',
+ 'MOVABLE','MULTI-COMPILE','MULTIPLE','MULTITASKING-INTERVAL',
+ 'MUST-UNDERSTAND','NAME','NAMESPACE-PREFIX','NAMESPACE-URI',
+ 'NEEDS-APPSERVER-PROMPT','NEEDS-PROMPT','NESTED','NEW-ROW',
+ 'NEXT-COLUMN','NEXT-ROWID','NEXT-SIBLING','NEXT-TAB-ITEM', 'NO-BOX',
+ 'NO-CURRENT-VALUE','NODE-VALUE','NO-EMPTY-SPACE','NO-FOCUS',
+ 'NONAMESPACE-SCHEMA-LOCATION','NO-SCHEMA-MARSHAL','NO-VALIDATE','NUM-BUFFERS',
+ 'NUM-BUTTONS','NUM-CHILD-RELATIONS','NUM-CHILDREN','NUM-COLUMNS',
+ 'NUM-DROPPED-FILES','NUMERIC-DECIMAL-POINT','NUMERIC-FORMAT','NUMERIC-SEPARATOR',
+ 'NUM-FIELDS','NUM-FORMATS','NUM-HEADER-ENTRIES','NUM-ITEMS',
+ 'NUM-ITERATIONS','NUM-LINES','NUM-LOCKED-COLUMNS','NUM-LOG-FILES',
+ 'NUM-MESSAGES','NUM-PARAMETERS','NUM-REFERENCES','NUM-RELATIONS',
+ 'NUM-REPLACED','NUM-SELECTED-ROWS','NUM-SELECTED-WIDGETS','NUM-SOURCE-BUFFERS',
+ 'NUM-TABS','NUM-TOP-BUFFERS','NUM-TO-RETAIN','NUM-VISIBLE-COLUMNS',
+ 'ON-FRAME-BORDER','ORIGIN-HANDLE','ORIGIN-ROWID','OWNER',
+ 'OWNER-DOCUMENT','PAGE-BOTTOM','PAGE-TOP','PARAMETER',
+ 'PARENT','PARENT-BUFFER','PARENT-RELATION','PARSE-STATUS',
+ 'PASSWORD-FIELD','PATHNAME','PBE-HASH-ALGORITHM','PBE-KEY-ROUNDS',
+ 'PERSISTENT','PERSISTENT-CACHE-DISABLED','PERSISTENT-PROCEDURE','PFCOLOR',
+ 'PIXELS-PER-COLUMN','PIXELS-PER-ROW','POPUP-MENU','POPUP-ONLY',
+ 'POSITION','PREFER-DATASET','PREPARED','PREPARE-STRING',
+ 'PREV-COLUMN','PREV-SIBLING','PREV-TAB-ITEM','PRIMARY',
+ 'PRINTER-CONTROL-HANDLE','PRINTER-HDC','PRINTER-NAME','PRINTER-PORT',
+ 'PRIVATE-DATA','PROCEDURE-NAME','PROGRESS-SOURCE','PROXY',
+ 'PROXY-PASSWORD','PROXY-USERID','PUBLIC-ID','PUBLISHED-EVENTS',
+ 'RADIO-BUTTONS','READ-ONLY','RECORD-LENGTH',
+ 'REFRESHABLE','RELATION-FIELDS','RELATIONS-ACTIVE','REMOTE',
+ 'REMOTE-HOST','REMOTE-PORT','RESIZABLE','RESIZE',
+ 'RESTART-ROWID','RETAIN-SHAPE','RETURN-INSERTED','RETURN-VALUE-DATA-TYPE',
+ 'ROLES','ROUNDED','COL','ROW','ROW-HEIGHT-CHARS',
+ 'ROW-HEIGHT-PIXELS','ROW-MARKERS','ROW-RESIZABLE','ROW-STATE',
+ 'SAVE-WHERE-STRING','SCHEMA-CHANGE','SCHEMA-LOCATION','SCHEMA-MARSHAL',
+ 'SCHEMA-PATH','SCREEN-LINES','SCREEN-VALUE','SCROLLABLE',
+ 'SCROLLBAR-HORIZONTAL','SCROLL-BARS','SCROLLBAR-VERTICAL','SEAL-TIMESTAMP',
+ 'SELECTABLE','SELECTED','SELECTION-END','SELECTION-START',
+ 'SELECTION-TEXT','SENSITIVE','SEPARATOR-FGCOLOR','SEPARATORS',
+ 'SERVER','SERVER-CONNECTION-BOUND','SERVER-CONNECTION-BOUND-REQUEST','SERVER-CONNECTION-CONTEXT',
+ 'SERVER-CONNECTION-ID','SERVER-OPERATING-MODE','SESSION-END','SESSION-ID',
+ 'SHOW-IN-TASKBAR','SIDE-LABEL-HANDLE','SIDE-LABELS','SKIP-DELETED-RECORD',
+ 'SMALL-ICON','SMALL-TITLE','SOAP-FAULT-ACTOR','SOAP-FAULT-CODE',
+ 'SOAP-FAULT-DETAIL','SOAP-FAULT-STRING','SORT','SORT-ASCENDING',
+ 'SORT-NUMBER','SSL-SERVER-NAME','STANDALONE','STARTUP-PARAMETERS',
+ 'STATE-DETAIL','STATUS-AREA','STATUS-AREA-FONT','STOPPED',
+ 'STREAM','STRETCH-TO-FIT','STRICT','STRING-VALUE',
+ 'SUBTYPE','SUPER-PROCEDURES','SUPPRESS-NAMESPACE-PROCESSING','SUPPRESS-WARNINGS',
+ 'SYMMETRIC-ENCRYPTION-ALGORITHM','SYMMETRIC-ENCRYPTION-IV','SYMMETRIC-ENCRYPTION-KEY','SYMMETRIC-SUPPORT',
+ 'system-ALERT-BOXES','system-ID','TABLE','TABLE-CRC-LIST',
+ 'TABLE-HANDLE','TABLE-LIST','TABLE-NUMBER','TAB-POSITION',
+ 'TAB-STOP','TEMP-DIRECTORY','TEXT-SELECTED','THREE-D',
+ 'TIC-MARKS','TIME-SOURCE','TITLE','TITLE-BGCOLOR','FIELD',
+ 'TITLE-DCOLOR','TITLE-FGCOLOR','TITLE-FONT','TOOLTIP',
+ 'TOOLTIPS','TOP-ONLY','TRACKING-CHANGES','TRANSACTION',
+ 'TRANS-INIT-PROCEDURE','TRANSPARENT','TYPE','UNIQUE-ID',
+ 'UNIQUE-MATCH','URL','URL-PASSWORD','URL-USERID','EXTENT',
+ 'USER-ID','V6DISPLAY','VALIDATE-EXPRESSION','VALIDATE-MESSAGE',
+ 'VALIDATE-XML','VALIDATION-ENABLED','VIEW-FIRST-COLUMN-ON-REOPEN',
+ 'VIRTUAL-HEIGHT-CHARS','VIRTUAL-HEIGHT-PIXELS','VIRTUAL-WIDTH-CHARS','VIRTUAL-WIDTH-PIXELS',
+ 'VISIBLE','WARNING','WHERE-STRING','widget-ENTER','DATE',
+ 'widget-LEAVE','WIDTH-CHARS','WIDTH-PIXELS','WINDOW-STATE',
+ 'WINDOW-system','WORD-WRAP','WORK-AREA-HEIGHT-PIXELS','WORK-AREA-WIDTH-PIXELS',
+ 'WORK-AREA-X','WORK-AREA-Y','WRITE-STATUS','X','widget-Handle',
+ 'X-DOCUMENT','XML-DATA-TYPE','XML-NODE-TYPE','XML-SCHEMA-PATH',
+ 'XML-SUPPRESS-NAMESPACE-PROCESSING','Y','YEAR-OFFSET','CHARACTER',
+ 'LONGCHAR','MEMPTR','CHAR','DEC','INT','LOG','DECI','INTE','LOGI','long'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '[', ']', '{', '}',
+ '<', '>', '=',
+ '+', '-', '*', '/',
+ '!', '@', '%', '|', '$',
+ ':', '.', ';', ',',
+ '?', '<=','<>','>=', '\\'
+ ),
+ 'CASE_SENSITIVE' => array (
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false
+ ),
+ 'STYLES' => array (
+ 'KEYWORDS' => array (
+ 1 => 'color: #0000ff; font-weight: bold;',
+ 2 => 'color: #1D16B2;',
+ 3 => 'color: #993333;',
+ 4 => 'color: #0000ff;'
+ ),
+ 'COMMENTS' => array (
+// 1 => 'color: #808080; font-style: italic;',
+// 2 => 'color: #808080; font-style: italic;',
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array (
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array (
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array (
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array (
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array (
+ 0 => 'color: #006600;'
+ ),
+ 'SYMBOLS' => array (
+ 0 => 'color: #66cc66;'
+ ),
+ 'REGEXPS' => array (
+ ),
+ 'SCRIPT' => array (
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 0 => ':'
+ ),
+ 'REGEXPS' => array (
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array (
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array (
+ ),
+ 'TAB_WIDTH' => 4,
+ 'PARSER_CONTROL' => array(
+ 'KEYWORDS' => array(
+ 'DISALLOWED_BEFORE' => "(?<![\.\-a-zA-Z0-9_\$\#&])",
+ 'DISALLOWED_AFTER' => "(?![\-a-zA-Z0-9_%])",
+ 1 => array(
+ 'SPACE_AS_WHITESPACE' => true
+ ),
+ 2 => array(
+ 'SPACE_AS_WHITESPACE' => true
+ )
+ )
+ )
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/prolog.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/prolog.php
new file mode 100644
index 000000000..fa9e03a63
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/prolog.php
@@ -0,0 +1,143 @@
+<?php
+/*************************************************************************************
+ * prolog.php
+ * --------
+ * Author: Benny Baumann (BenBE@geshi.org)
+ * Copyright: (c) 2008 Benny Baumann (http://qbnz.com/highlighter/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2008/10/02
+ *
+ * Prolog language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/10/02 (1.0.8.1)
+ * - First Release
+ *
+ * TODO (updated 2008/10/02)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Prolog',
+ 'COMMENT_SINGLE' => array(1 => '%'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'HARDQUOTE' => array("'", "'"),
+ 'HARDESCAPE' => array("\'"),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array(),
+ 'ESCAPE_CHAR' => '',
+ 'NUMBERS' =>
+ GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_FLT_SCI_ZERO,
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'abolish','abs','arg','asserta','assertz','at_end_of_stream','atan',
+ 'atom','atom_chars','atom_codes','atom_concat','atom_length',
+ 'atomic','bagof','call','catch','ceiling','char_code',
+ 'char_conversion','clause','close','compound','consult','copy_term',
+ 'cos','current_char_conversion','current_input','current_op',
+ 'current_output','current_predicate','current_prolog_flag',
+ 'discontiguous','dynamic','ensure_loaded','exp','fail','findall',
+ 'float','float_fractional_part','float_integer_part','floor',
+ 'flush_output','functor','get_byte','get_char','get_code','halt',
+ 'include','initialization','integer','is','listing','log','mod',
+ 'multifile','nl','nonvar','notrace','number','number_chars',
+ 'number_codes','once','op','open','peek_byte','peek_char',
+ 'peek_code','put_byte','put_char','put_code','read','read_term',
+ 'rem','repeat','retract','round','set_input','set_output',
+ 'set_prolog_flag','set_stream_position','setof','sign','sin','sqrt',
+ 'stream_property','sub_atom','throw','trace','true','truncate',
+ 'unify_with_occurs_check','univ','var','write','write_canonical',
+ 'write_term','writeq'
+ )
+ ),
+ 'SYMBOLS' => array(
+ 0 => array('(', ')', '[', ']', '{', '}',),
+ 1 => array('?-', ':-', '=:='),
+ 2 => array('\-', '\+', '\*', '\/'),
+ 3 => array('-', '+', '*', '/'),
+ 4 => array('.', ':', ',', ';'),
+ 5 => array('!', '@', '&', '|'),
+ 6 => array('<', '>', '=')
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #990000;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #666666; font-style: italic;',
+ 'MULTI' => 'color: #666666; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;',
+ 'HARD' => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #009900;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #0000ff;',
+ 'HARD' => 'color: #0000ff;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #800080;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #339933;',
+ 1 => 'color: #339933;',
+ 2 => 'color: #339933;',
+ 3 => 'color: #339933;',
+ 4 => 'color: #339933;',
+ 5 => 'color: #339933;',
+ 6 => 'color: #339933;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #008080;'
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => 'http://pauillac.inria.fr/~deransar/prolog/bips.html'
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ //Variables
+ 0 => "(?<![A-Z_])(?!(?:PIPE|SEMI)[^a-zA-Z0-9_])[A-Z_][a-zA-Z0-9_]*(?![a-zA-Z0-9_])"
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 4
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/providex.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/providex.php
new file mode 100644
index 000000000..f24a57d18
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/providex.php
@@ -0,0 +1,299 @@
+<?php
+/******************************************************************************
+ * providex.php
+ * ----------
+ * Author: Jeff Wilder (jeff@coastallogix.com)
+ * Copyright: (c) 2008 Coastal Logix (http://www.coastallogix.com)
+ * Release Version: 1.0.8.4
+ * Date Started: 2008/10/18
+ *
+ * ProvideX language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/10/21 (1.0.0)
+ * - First Release
+ *
+ * TODO
+ * -------------------------
+ * 1. Create a regexp for numeric global variables (ex: %VarName = 3)
+ * 2. Add standard object control properties
+ *
+ ******************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ *****************************************************************************/
+$language_data = array (
+ 'LANG_NAME' => 'ProvideX',
+ 'COMMENT_SINGLE' => array(1 => '!'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'COMMENT_REGEXP' => array(
+ // Single-Line Comments using REM command
+ 2 => "/\bREM\b.*?$/i"
+ ),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ 1 => array(
+ // Directives
+ '*break', '*continue', '*end', '*escape', '*next', '*proceed',
+ '*retry', '*return', '*same', 'accept', 'add index', 'addr',
+ 'auto', 'begin', 'break', 'button', 'bye', 'call', 'case',
+ 'chart', 'check_box', 'class', 'clear', 'clip_board', 'close',
+ 'continue', 'control', 'create required', 'create table',
+ 'cwdir', 'data', 'day_format', 'def', 'default', 'defctl',
+ 'defprt', 'deftty', 'delete required', 'dictionary', 'dim', 'direct',
+ 'directory', 'disable', 'drop', 'drop_box', 'dump', 'edit',
+ 'else', 'enable', 'end switch', 'end', 'end_if', 'endtrace',
+ 'enter', 'erase', 'error_handler', 'escape', 'event', 'execute',
+ 'exit', 'exitto', 'extract', 'file', 'find', 'floating point',
+ 'for', 'function', 'get_file_box', 'gosub', 'goto', 'grid',
+ 'h_scrollbar', 'hide', 'if', 'index', 'indexed', 'input',
+ 'insert', 'invoke', 'iolist', 'keyed', 'let', 'like',
+ 'line_switch', 'list', 'list_box', 'load', 'local', 'lock',
+ 'long_form', 'menu_bar', 'merge', 'message_lib', 'mnemonic',
+ 'msgbox', 'multi_line', 'multi_media', 'next', 'object', 'obtain',
+ 'on', 'open', 'password', 'perform', 'pop', 'popup_menu',
+ 'precision', 'prefix', 'preinput', 'print', 'process', 'program',
+ 'property', 'purge', 'quit', 'radio_button', 'randomize',
+ 'read', 'record', 'redim', 'refile', 'release', 'rem', 'remove',
+ 'rename', 'renumber', 'repeat', 'reset', 'restore', 'retry',
+ 'return', 'round', 'run', 'save', 'select', 'serial', 'server',
+ 'set_focus', 'set_nbf', 'set_param', 'setctl', 'setday', 'setdev',
+ 'setdrive', 'seterr', 'setesc', 'setfid', 'setmouse', 'settime',
+ 'settrace', 'short_form', 'show', 'sort', 'start', 'static',
+ 'step', 'stop', 'switch', 'system_help', 'system_jrnl', 'table',
+ 'then', 'to', 'translate', 'tristate_box', 'unlock', 'until',
+ 'update', 'user_lex', 'v_scrollbar', 'vardrop_box', 'varlist_box',
+ 'via', 'video_palette', 'wait', 'wend', 'while', 'winprt_setup',
+ 'with', 'write'
+ ),
+ 2 => array(
+ // System Functions
+ '@x', '@y', 'abs', 'acs', 'and', 'arg', 'asc', 'asn', 'ath',
+ 'atn', 'bin', 'bsz', 'chg', 'chr', 'cmp', 'cos', 'cpl',
+ 'crc', 'cse', 'ctl', 'cvs', 'dec', 'dir', 'dll', 'dsk',
+ 'dte', 'env', 'ept', 'err', 'evn', 'evs', 'exp', 'ffn',
+ 'fib', 'fid', 'fin', 'fpt', 'gap', 'gbl', 'gep', 'hsa',
+ 'hsh', 'hta', 'hwn', 'i3e', 'ind', 'int', 'iol', 'ior',
+ 'jul', 'jst', 'kec', 'kef', 'kel', 'ken', 'kep', 'key',
+ 'kgn', 'lcs', 'len', 'lno', 'log', 'lrc', 'lst', 'max',
+ 'mem', 'mid', 'min', 'mnm', 'mod', 'msg', 'msk', 'mxc',
+ 'mxl', 'new', 'not', 'nul', 'num', 'obj', 'opt', 'pad',
+ 'pck', 'pfx', 'pgm', 'pos', 'prc', 'prm', 'pth', 'pub',
+ 'rcd', 'rdx', 'rec', 'ref', 'rnd', 'rno', 'sep', 'sgn',
+ 'sin', 'sqr', 'srt', 'ssz', 'stk', 'stp', 'str', 'sub',
+ 'swp', 'sys', 'tan', 'tbl', 'tcb', 'tmr', 'trx', 'tsk',
+ 'txh', 'txw', 'ucp', 'ucs', 'upk', 'vin', 'vis', 'xeq',
+ 'xfa', 'xor', '_obj'
+ ),
+ 3 => array(
+ // System Variables
+ // Vars that are duplicates of functions
+ // 'ctl', 'err', 'pfx', 'prm', 'rnd', 'sep', 'sys',
+ 'bkg', 'chn', 'day', 'dlm', 'dsz', 'eom', 'ers', 'esc',
+ 'gfn', 'gid', 'hfn', 'hlp', 'hwd', 'lfa', 'lfo', 'lip',
+ 'lpg', 'lwd', 'mse', 'msl', 'nar', 'nid', 'pgn', 'psz',
+ 'quo', 'ret', 'sid', 'ssn', 'tim', 'tme', 'tms', 'tsm',
+ 'uid', 'unt', 'who'
+
+ ),
+ 4 => array(
+ // Nomads Variables
+ '%Flmaint_Lib$', '%Flmaint_Msg$', '%Nomads_Activation_Ok',
+ '%Nomads_Auto_Qry', '%Nomads_Disable_Debug',
+ '%Nomads_Disable_Trace', '%Nomads_Fkey_Handler$',
+ '%Nomads_Fkey_Tbl$', '%Nomads_Notest', '%Nomads_Onexit$',
+ '%Nomads_Post_Display', '%Nomads_Pre_Display$',
+ '%Nomads_Process$', '%Nomads_Trace_File$',
+ '%Nomad_Actv_Folder_Colors$', '%Nomad_Automation_Enabled',
+ '%Nomad_Auto_Close', '%Nomad_Center_Wdw', '%Nomad_Concurrent_Wdw',
+ '%Nomad_Custom_Define', '%Nomad_Custom_Dir$',
+ '%Nomad_Custom_Genmtc', '%Nomad_Custom_Skip_Definition',
+ '%Nomad_Def_Sfx$', '%Nomad_Enter_Tab', '%Nomad_Esc_Sel',
+ '%Nomad_Isjavx', '%Nomad_Iswindx', '%Nomad_Iswindx$',
+ '%Nomad_Menu$', '%Nomad_Menu_Leftedge_Clr$',
+ '%Nomad_Menu_Textbackground_Clr$', '%Nomad_Mln_Sep$',
+ '%Nomad_Msgmnt$', '%Nomad_Noplusw', '%Nomad_No_Customize',
+ '%Nomad_Object_Persistence', '%Nomad_Object_Resize',
+ '%Nomad_Open_Load', '%Nomad_Override_Font$',
+ '%Nomad_Palette_Loaded', '%Nomad_Panel_Info_Force',
+ '%Nomad_Panel_Info_Prog$', '%Nomad_Pnl_Def_Colour$',
+ '%Nomad_Pnl_Def_Font$', '%Nomad_Prg_Cache', '%Nomad_Qry_Attr$',
+ '%Nomad_Qry_Btn$', '%Nomad_Qry_Clear_Start', '%Nomad_Qry_Tip$',
+ '%Nomad_Qry_Wide', '%Nomad_Query_Clear_Status', '%Nomad_Query_Kno',
+ '%Nomad_Query_No_Gray', '%Nomad_Query_Odb_Ignore',
+ '%Nomad_Query_Retkno', '%Nomad_Query_Sbar_Max',
+ '%Nomad_Relative_Wdw', '%Nomad_Save_Qry_Path', '%Nomad_Script_Fn',
+ '%Nomad_Script_Log', '%Nomad_Script_Wdw',
+ '%Nomad_Skip_Change_Logic', '%Nomad_Skip_Onselect_Logic',
+ '%Nomad_Stk$', '%Nomad_Tab_Dir', '%Nomad_Timeout',
+ '%Nomad_Turbo_Off', '%Nomad_Visual_Effect',
+ '%Nomad_Visual_Override', '%Nomad_Win_Ver', '%Nomad_Xchar',
+ '%Nomad_Xmax', '%Nomad_Ychar', '%Nomad_Ymax', '%Scr_Def_Attr$',
+ '%Scr_Def_H_Fl$', '%Scr_Def_H_Id$', '%Scr_Lib', '%Scr_Lib$',
+ '%Z__Usr_Sec$', 'Alternate_Panel$', 'Alternate_Panel_Type$',
+ 'Arg_1$', 'Arg_10$', 'Arg_11$', 'Arg_12$', 'Arg_13$', 'Arg_14$',
+ 'Arg_15$', 'Arg_16$', 'Arg_17$', 'Arg_18$', 'Arg_19$', 'Arg_2$',
+ 'Arg_20$', 'Arg_3$', 'Arg_4$', 'Arg_5$', 'Arg_6$', 'Arg_7$',
+ 'Arg_8$', 'Arg_9$', 'Change_Flg', 'Cmd_Str$', 'Default_Prog$',
+ 'Disp_Cmd$', 'Entire_Record$', 'Exit_Cmd$', 'Fldr_Default_Prog$',
+ 'Folder_Id$', 'Id', 'Id$', 'Ignore_Exit', 'Initialize_Flg',
+ 'Init_Text$', 'Init_Val$', 'Main_Scrn_K$', 'Mnu_Ln$',
+ 'Next_Folder', 'Next_Id', 'Next_Id$', 'No_Flush', 'Prime_Key$',
+ 'Prior_Val', 'Prior_Val$', 'Qry_Val$', 'Refresh_Flg',
+ 'Replacement_Folder$', 'Replacement_Lib$', 'Replacement_Scrn$',
+ 'Scrn_Id$', 'Scrn_K$', 'Scrn_Lib$', 'Tab_Table$', '_Eom$'
+ ),
+ 5 => array(
+ // Mnemonics
+ "'!w'", "'*c'", "'*h'", "'*i'", "'*o'", "'*r'", "'*x'",
+ "'+b'", "'+d'", "'+e'", "'+f'", "'+i'", "'+n'",
+ "'+p'", "'+s'", "'+t'", "'+u'", "'+v'", "'+w'", "'+x'",
+ "'+z'", "'-b'", "'-d'", "'-e'", "'-f'", "'-i'",
+ "'-n'", "'-p'", "'-s'", "'-t'", "'-u'", "'-v'", "'-w'",
+ "'-x'", "'-z'", "'2d'", "'3d'", "'4d'", "'@@'", "'ab'",
+ "'arc'", "'at'", "'backgr'", "'bb'", "'be'", "'beep'",
+ "'bg'", "'bi'", "'bj'", "'bk'", "'black'", "'blue'",
+ "'bm'", "'bo'", "'box'", "'br'", "'bs'", "'bt'", "'bu'",
+ "'bw'", "'bx'", "'caption'", "'ce'", "'cf'", "'ch'",
+ "'ci'", "'circle'", "'cl'", "'colour'", "'cp'", "'cpi'",
+ "'cr'", "'cs'", "'cursor'", "'cyan''_cyan'", "'dc'",
+ "'default'", "'df'", "'dialogue'", "'dn'", "'do'",
+ "'drop'", "'eb'", "'ee'", "'ef'", "'eg'", "'ei'", "'ej'",
+ "'el'", "'em'", "'eo'", "'ep'", "'er'", "'es'", "'et'",
+ "'eu'", "'ew'", "'ff'", "'fill'", "'fl'", "'font'",
+ "'frame'", "'gd'", "'ge'", "'gf'", "'goto'", "'green'",
+ "'gs'", "'hide'", "'ic'", "'image'", "'jc'",
+ "'jd'", "'jl'", "'jn'", "'jr'", "'js'", "'l6'", "'l8'",
+ "'lc'", "'ld'", "'lf'", "'li'", "'line'", "'lm'",
+ "'lpi'", "'lt'", "'magenta'", "'maxsize'", "'me'",
+ "'message'", "'minsize'", "'mn'", "'mode'",
+ "'move'", "'mp'", "'ms'", "'ni'", "'offset'", "'option'",
+ "'pe'", "'pen'", "'picture'", "'pie'", "'pm'", "'polygon'",
+ "'pop'", "'ps'", "'push'", "'rb'", "'rc'", "'rectangle'",
+ "'red'", "'rl'", "'rm'", "'rp'", "'rs'", "'rt'", "'sb'",
+ "'scroll'", "'sd'", "'se'", "'sf'", "'show'", "'size'",
+ "'sl'", "'sn'", "'sp'", "'sr'", "'swap'", "'sx'", "'text'",
+ "'textwdw'", "'tr'", "'tw'", "'uc'", "'up'", "'vt'", "'wa'",
+ "'wc'", "'wd'", "'wg'", "'white'", "'window'", "'wm'",
+ "'wp'", "'wr'", "'wrap'", "'ws'", "'wx'", "'xp'", "'yellow'",
+ "'zx'", "'_black'", "'_blue'", "'_colour'", "'_green'",
+ "'_magenta'", "'_red'", "'_white'", "'_yellow'"
+ ),
+ ),
+ 'SYMBOLS' => array(
+ 0 => array('+', '-', '*', '/', '^', '|'),
+ 1 => array('++', '--', '+=', '-=', '*=', '/=', '^=', '|='),
+ 2 => array('&lt;', '&gt;', '='),
+ 3 => array('(', ')', '[', ']', '{', '}'),
+ 4 => array(',', '@', ';', '\\')
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: navy;', // Directives
+ 2 => 'color: blue;', // System Functions
+ 3 => 'color: blue;', // System Variables
+ 4 => 'color: #6A5ACD; font-style: italic;', // Nomads Global Variables
+ 5 => 'color: #BDB76B;', // Mnemonics
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #008080; font-style: italic;',
+ 2 => 'color: #008080;',
+ 'MULTI' => 'color: #008080; font-style: italic;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #000066;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: green;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #00008B;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #008000;',
+ 1 => 'color: #000099;',
+ 2 => 'color: #000099;',
+ 3 => 'color: #0000C9;',
+ 4 => 'color: #000099;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099;'
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ 1 => 'color: #006400; font-weight: bold',
+ 2 => 'color: #6A5ACD;'
+ )
+ ),
+ 'URLS' => array(
+ 1 => 'http://www.allbasic.info./wiki/index.php/PX:Directive_{FNAME}',
+ 2 => 'http://www.allbasic.info./wiki/index.php/PX:System_function_{FNAME}',
+ 3 => 'http://www.allbasic.info./wiki/index.php/PX:System_variable_{FNAME}',
+ 4 => 'http://www.allbasic.info./wiki/index.php/PX:Nomads_{FNAME}',
+ 5 => 'http://www.allbasic.info./wiki/index.php/PX:Mnemonic_{FNAMEU}'
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => "'"
+ ),
+ 'REGEXPS' => array(
+ 1 => array(
+ // Line Labels
+ GESHI_SEARCH => '([[:space:]])([a-zA-Z_][a-zA-Z0-9_]+)(:)',
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => '\\3'
+ ),
+ 2 => array(
+ // Global String Variables
+ GESHI_SEARCH => '(\%)([a-zA-Z_][a-zA-Z0-9_]+)(\$)',
+ GESHI_REPLACE => '\\1\\2\\3',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
+ )
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'PARSER_CONTROL' => array(
+ 'ENABLE_FLAGS' => array(
+ 'NUMBERS' => GESHI_NEVER
+ )
+ ),
+ 'TAB_WIDTH' => 4
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/python.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/python.php
new file mode 100644
index 000000000..6f378f434
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/python.php
@@ -0,0 +1,237 @@
+<?php
+/*************************************************************************************
+ * python.php
+ * ----------
+ * Author: Roberto Rossi (rsoftware@altervista.org)
+ * Copyright: (c) 2004 Roberto Rossi (http://rsoftware.altervista.org), Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/08/30
+ *
+ * Python language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/12/18
+ * - Added missing functions and keywords. Also added two new Python 3.0 types. SF#2441839
+ * 2005/05/26
+ * - Modifications by Tim (tim@skreak.com): added more keyword categories, tweaked colors
+ * 2004/11/27 (1.0.1)
+ * - Added support for multiple object splitters
+ * 2004/08/30 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Python',
+ 'COMMENT_SINGLE' => array(1 => '#'),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ //Longest quotemarks ALWAYS first
+ 'QUOTEMARKS' => array('"""', '"', "'"),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+
+ /*
+ ** Set 1: reserved words
+ ** http://python.org/doc/current/ref/keywords.html
+ */
+ 1 => array(
+ 'and', 'del', 'for', 'is', 'raise', 'assert', 'elif', 'from', 'lambda', 'return', 'break',
+ 'else', 'global', 'not', 'try', 'class', 'except', 'if', 'or', 'while', 'continue', 'exec',
+ 'import', 'pass', 'yield', 'def', 'finally', 'in', 'print', 'with', 'as'
+ ),
+
+ /*
+ ** Set 2: builtins
+ ** http://python.org/doc/current/lib/built-in-funcs.html
+ */
+ 2 => array(
+ '__import__', 'abs', 'basestring', 'bool', 'callable', 'chr', 'classmethod', 'cmp',
+ 'compile', 'complex', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'execfile',
+ 'file', 'filter', 'float', 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help',
+ 'hex', 'id', 'input', 'int', 'isinstance', 'issubclass', 'iter', 'len', 'list', 'locals',
+ 'long', 'map', 'max', 'min', 'object', 'oct', 'open', 'ord', 'pow', 'property', 'range',
+ 'raw_input', 'reduce', 'reload', 'reversed', 'round', 'set', 'setattr', 'slice',
+ 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'unichr', 'unicode',
+ 'vars', 'xrange', 'zip',
+ // Built-in constants: http://python.org/doc/current/lib/node35.html
+ 'False', 'True', 'None', 'NotImplemented', 'Ellipsis',
+ // Built-in Exceptions: http://python.org/doc/current/lib/module-exceptions.html
+ 'Exception', 'StandardError', 'ArithmeticError', 'LookupError', 'EnvironmentError',
+ 'AssertionError', 'AttributeError', 'EOFError', 'FloatingPointError', 'IOError',
+ 'ImportError', 'IndexError', 'KeyError', 'KeyboardInterrupt', 'MemoryError', 'NameError',
+ 'NotImplementedError', 'OSError', 'OverflowError', 'ReferenceError', 'RuntimeError',
+ 'StopIteration', 'SyntaxError', 'SystemError', 'SystemExit', 'TypeError',
+ 'UnboundlocalError', 'UnicodeError', 'UnicodeEncodeError', 'UnicodeDecodeError',
+ 'UnicodeTranslateError', 'ValueError', 'WindowsError', 'ZeroDivisionError', 'Warning',
+ 'UserWarning', 'DeprecationWarning', 'PendingDeprecationWarning', 'SyntaxWarning',
+ 'RuntimeWarning', 'FutureWarning',
+ // self: this is a common python convention (but not a reserved word)
+ 'self',
+ // other
+ 'any', 'all'
+ ),
+
+ /*
+ ** Set 3: standard library
+ ** http://python.org/doc/current/lib/modindex.html
+ */
+ 3 => array(
+ '__builtin__', '__future__', '__main__', '_winreg', 'aifc', 'AL', 'al', 'anydbm',
+ 'array', 'asynchat', 'asyncore', 'atexit', 'audioop', 'base64', 'BaseHTTPServer',
+ 'Bastion', 'binascii', 'binhex', 'bisect', 'bsddb', 'bz2', 'calendar', 'cd', 'cgi',
+ 'CGIHTTPServer', 'cgitb', 'chunk', 'cmath', 'cmd', 'code', 'codecs', 'codeop',
+ 'collections', 'colorsys', 'commands', 'compileall', 'compiler',
+ 'ConfigParser', 'Cookie', 'cookielib', 'copy', 'copy_reg', 'cPickle', 'crypt',
+ 'cStringIO', 'csv', 'curses', 'datetime', 'dbhash', 'dbm', 'decimal', 'DEVICE',
+ 'difflib', 'dircache', 'dis', 'distutils', 'dl', 'doctest', 'DocXMLRPCServer', 'dumbdbm',
+ 'dummy_thread', 'dummy_threading', 'email', 'encodings', 'errno', 'exceptions', 'fcntl',
+ 'filecmp', 'fileinput', 'FL', 'fl', 'flp', 'fm', 'fnmatch', 'formatter', 'fpectl',
+ 'fpformat', 'ftplib', 'gc', 'gdbm', 'getopt', 'getpass', 'gettext', 'GL', 'gl', 'glob',
+ 'gopherlib', 'grp', 'gzip', 'heapq', 'hmac', 'hotshot', 'htmlentitydefs', 'htmllib',
+ 'HTMLParser', 'httplib', 'imageop', 'imaplib', 'imgfile', 'imghdr', 'imp', 'inspect',
+ 'itertools', 'jpeg', 'keyword', 'linecache', 'locale', 'logging', 'mailbox', 'mailcap',
+ 'marshal', 'math', 'md5', 'mhlib', 'mimetools', 'mimetypes', 'MimeWriter', 'mimify',
+ 'mmap', 'msvcrt', 'multifile', 'mutex', 'netrc', 'new', 'nis', 'nntplib', 'operator',
+ 'optparse', 'os', 'ossaudiodev', 'parser', 'pdb', 'pickle', 'pickletools', 'pipes',
+ 'pkgutil', 'platform', 'popen2', 'poplib', 'posix', 'posixfile', 'pprint', 'profile',
+ 'pstats', 'pty', 'pwd', 'py_compile', 'pyclbr', 'pydoc', 'Queue', 'quopri', 'random',
+ 're', 'readline', 'repr', 'resource', 'rexec', 'rfc822', 'rgbimg', 'rlcompleter',
+ 'robotparser', 'sched', 'ScrolledText', 'select', 'sets', 'sgmllib', 'sha', 'shelve',
+ 'shlex', 'shutil', 'signal', 'SimpleHTTPServer', 'SimpleXMLRPCServer', 'site', 'smtpd',
+ 'smtplib', 'sndhdr', 'socket', 'SocketServer', 'stat', 'statcache', 'statvfs', 'string',
+ 'StringIO', 'stringprep', 'struct', 'subprocess', 'sunau', 'SUNAUDIODEV', 'sunaudiodev',
+ 'symbol', 'sys', 'syslog', 'tabnanny', 'tarfile', 'telnetlib', 'tempfile', 'termios',
+ 'test', 'textwrap', 'thread', 'threading', 'time', 'timeit', 'Tix', 'Tkinter', 'token',
+ 'tokenize', 'traceback', 'tty', 'turtle', 'types', 'unicodedata', 'unittest', 'urllib2',
+ 'urllib', 'urlparse', 'user', 'UserDict', 'UserList', 'UserString', 'uu', 'warnings',
+ 'wave', 'weakref', 'webbrowser', 'whichdb', 'whrandom', 'winsound', 'xdrlib', 'xml',
+ 'xmllib', 'xmlrpclib', 'zipfile', 'zipimport', 'zlib',
+ // Python 3.0
+ 'bytes', 'bytearray'
+ ),
+
+ /*
+ ** Set 4: special methods
+ ** http://python.org/doc/current/ref/specialnames.html
+ */
+ 4 => array(
+ /*
+ // Iterator types: http://python.org/doc/current/lib/typeiter.html
+ '__iter__', 'next',
+ // String types: http://python.org/doc/current/lib/string-methods.html
+ 'capitalize', 'center', 'count', 'decode', 'encode', 'endswith', 'expandtabs',
+ 'find', 'index', 'isalnum', 'isalpha', 'isdigit', 'islower', 'isspace', 'istitle',
+ 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'replace', 'rfind', 'rindex', 'rjust',
+ 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title',
+ 'translate', 'upper', 'zfill',
+ */
+ // Basic customization: http://python.org/doc/current/ref/customization.html
+ '__new__', '__init__', '__del__', '__repr__', '__str__',
+ '__lt__', '__le__', '__eq__', '__ne__', '__gt__', '__ge__', '__cmp__', '__rcmp__',
+ '__hash__', '__nonzero__', '__unicode__', '__dict__',
+ // Attribute access: http://python.org/doc/current/ref/attribute-access.html
+ '__setattr__', '__delattr__', '__getattr__', '__getattribute__', '__get__', '__set__',
+ '__delete__', '__slots__',
+ // Class creation, callable objects
+ '__metaclass__', '__call__',
+ // Container types: http://python.org/doc/current/ref/sequence-types.html
+ '__len__', '__getitem__', '__setitem__', '__delitem__', '__iter__', '__contains__',
+ '__getslice__', '__setslice__', '__delslice__',
+ // Numeric types: http://python.org/doc/current/ref/numeric-types.html
+ '__abs__','__add__','__and__','__coerce__','__div__','__divmod__','__float__',
+ '__hex__','__iadd__','__isub__','__imod__','__idiv__','__ipow__','__iand__',
+ '__ior__','__ixor__', '__ilshift__','__irshift__','__invert__','__int__',
+ '__long__','__lshift__',
+ '__mod__','__mul__','__neg__','__oct__','__or__','__pos__','__pow__',
+ '__radd__','__rdiv__','__rdivmod__','__rmod__','__rpow__','__rlshift__','__rrshift__',
+ '__rshift__','__rsub__','__rmul__','__rand__','__rxor__','__ror__',
+ '__sub__','__xor__'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '[', ']', '{', '}', '*', '&', '%', '!', ';', '<', '>', '?', '`'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ 2 => true,
+ 3 => true,
+ 4 => true
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #ff7700;font-weight:bold;', // Reserved
+ 2 => 'color: #008000;', // Built-ins + self
+ 3 => 'color: #dc143c;', // Standard lib
+ 4 => 'color: #0000cd;' // Special methods
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080; font-style: italic;',
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: black;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #483d8b;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #ff4500;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: black;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/qbasic.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/qbasic.php
new file mode 100644
index 000000000..e3b5df8a1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/qbasic.php
@@ -0,0 +1,151 @@
+<?php
+/*************************************************************************************
+ * qbasic.php
+ * ----------
+ * Author: Nigel McNie (nigel@geshi.org)
+ * Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/06/20
+ *
+ * QBasic/QuickBASIC language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * 2004/11/27 (1.0.3)
+ * - Added support for multiple object splitters
+ * 2004/10/27 (1.0.2)
+ * - Added support for URLs
+ * 2004/08/05 (1.0.1)
+ * - Added support for symbols
+ * - Removed unnessecary slashes from some keywords
+ * 2004/07/14 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ * * Make sure all possible combinations of keywords with
+ * a space in them (EXIT FOR, END SELECT) are added
+ * to the first keyword group
+ * * Update colours, especially for the first keyword group
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+$language_data = array (
+ 'LANG_NAME' => 'QBasic/QuickBASIC',
+ 'COMMENT_SINGLE' => array(1 => "'"),
+ 'COMMENT_MULTI' => array(),
+ 'COMMENT_REGEXP' => array(
+ //Single-Line Comments using REM command
+ 2 => "/\bREM.*?$/i"
+ ),
+ 'CASE_KEYWORDS' => GESHI_CAPS_UPPER,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'DO', 'LOOP', 'WHILE', 'WEND', 'THEN', 'ELSE', 'ELSEIF', 'IF',
+ 'FOR', 'TO', 'NEXT', 'STEP', 'GOTO', 'GOSUB', 'CALL', 'CALLS',
+ 'SUB', 'FUNCTION', 'RETURN', 'RESUME', 'SELECT', 'CASE', 'UNTIL'
+ ),
+ 3 => array(
+ 'ABS', 'ABSOLUTE', 'ACCESS', 'ALIAS', 'AND', 'ANY', 'APPEND', 'AS', 'ASC', 'ATN',
+ 'BASE', 'BEEP', 'BINARY', 'BLOAD', 'BSAVE', 'BYVAL',
+ 'CDBL', 'CDECL', 'CHAIN', 'CHDIR', 'CHR$', 'CINT', 'CIRCLE', 'CLEAR',
+ 'CLNG', 'CLOSE', 'CLS', 'COM', 'COMMAND$', 'COMMON', 'CONST', 'COS', 'CSNG',
+ 'CSRLIN', 'CVD', 'CVDMBF', 'CVI', 'CVL', 'CVS', 'CVSMDF', 'DATA', 'DATE$',
+ 'DECLARE', 'DEF', 'FN', 'SEG', 'DEFDBL', 'DEFINT', 'DEFLNG', 'DEFSNG', 'DEFSTR',
+ 'DIM', 'DOUBLE', 'DRAW', 'END', 'ENVIRON', 'ENVIRON$', 'EOF', 'EQV', 'ERASE',
+ 'ERDEV', 'ERDEV$', 'ERL', 'ERR', 'ERROR', 'EXIT', 'EXP', 'FIELD', 'FILEATTR',
+ 'FILES', 'FIX', 'FRE', 'FREEFILE', 'GET', 'HEX$', 'IMP', 'INKEY$',
+ 'INP', 'INPUT', 'INPUT$', 'INSTR', 'INT', 'INTEGER', 'IOCTL', 'IOCTL$', 'IS',
+ 'KEY', 'KILL', 'LBOUND', 'LCASE$', 'LEFT$', 'LEN', 'LET', 'LINE', 'LIST', 'LOC',
+ 'LOCAL', 'LOCATE', 'LOCK', 'LOF', 'LOG', 'LONG', 'LPOS', 'LPRINT',
+ 'LSET', 'LTRIM$', 'MID$', 'MKD$', 'MKDIR', 'MKDMBF$', 'MKI$', 'MKL$',
+ 'MKS$', 'MKSMBF$', 'MOD', 'NAME', 'NOT', 'OCT$', 'OFF', 'ON', 'PEN', 'PLAY',
+ 'OPEN', 'OPTION', 'OR', 'OUT', 'OUTPUT',
+ 'PAINT', 'PALETTE', 'PCOPY', 'PEEK', 'PMAP', 'POINT', 'POKE', 'POS', 'PRESET',
+ 'PRINT', 'PSET', 'PUT', 'RANDOM', 'RANDOMIZE', 'READ', 'REDIM', 'RESET',
+ 'RESTORE', 'RIGHT$', 'RMDIR', 'RND', 'RSET', 'RTRIM$', 'RUN', 'SADD', 'SCREEN',
+ 'SEEK', 'SETMEM', 'SGN', 'SHARED', 'SHELL', 'SIGNAL', 'SIN', 'SINGLE', 'SLEEP',
+ 'SOUND', 'SPACE$', 'SPC', 'SQR', 'STATIC', 'STICK', 'STOP', 'STR$', 'STRIG',
+ 'STRING', 'STRING$', 'SWAP', 'SYSTEM', 'TAB', 'TAN', 'TIME$', 'TIMER',
+ 'TROFF', 'TRON', 'TYPE', 'UBOUND', 'UCASE$', 'UEVENT', 'UNLOCK', 'USING', 'VAL',
+ 'VARPTR', 'VARPTR$', 'VARSEG', 'VIEW', 'WAIT', 'WIDTH', 'WINDOW', 'WRITE', 'XOR'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', ',', '+', '-', '*', '/', '=', '<', '>'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 3 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #a1a100;',
+ 3 => 'color: #000066;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080;',
+ 2 => 'color: #808080;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099;'
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 3 => 'http://www.qbasicnews.com/qboho/qck{FNAMEL}.shtml'
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 8
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/rails.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/rails.php
new file mode 100644
index 000000000..cc6e079b0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/rails.php
@@ -0,0 +1,406 @@
+<?php
+/*************************************************************************************
+ * rails.php
+ * ---------
+ * Author: Moises Deniz
+ * Copyright: (c) 2005 Moises Deniz
+ * Release Version: 1.0.8.4
+ * Date Started: 2007/03/21
+ *
+ * Ruby (with Ruby on Rails Framework) language file for GeSHi.
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Rails',
+ 'COMMENT_SINGLE' => array(1 => "#"),
+ 'COMMENT_MULTI' => array("=begin" => "=end"),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"', '`','\''),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'alias', 'and', 'begin', 'break', 'case', 'class',
+ 'def', 'defined', 'do', 'else', 'elsif', 'end',
+ 'ensure', 'for', 'if', 'in', 'module', 'while',
+ 'next', 'not', 'or', 'redo', 'rescue', 'yield',
+ 'retry', 'super', 'then', 'undef', 'unless',
+ 'until', 'when', 'BEGIN', 'END', 'include'
+ ),
+ 2 => array(
+ '__FILE__', '__LINE__', 'false', 'nil', 'self', 'true',
+ 'return'
+ ),
+ 3 => array(
+ 'Array', 'Float', 'Integer', 'String', 'at_exit',
+ 'autoload', 'binding', 'caller', 'catch', 'chop', 'chop!',
+ 'chomp', 'chomp!', 'eval', 'exec', 'exit', 'exit!', 'fail',
+ 'fork', 'format', 'gets', 'global_variables', 'gsub', 'gsub!',
+ 'iterator?', 'lambda', 'load', 'local_variables', 'loop',
+ 'open', 'p', 'print', 'printf', 'proc', 'putc', 'puts',
+ 'raise', 'rand', 'readline', 'readlines', 'require', 'select',
+ 'sleep', 'split', 'sprintf', 'srand', 'sub', 'sub!', 'syscall',
+ 'system', 'trace_var', 'trap', 'untrace_var'
+ ),
+ 4 => array(
+ 'Abbrev', 'ArgumentError', 'Base64', 'Benchmark',
+ 'Benchmark::Tms', 'Bignum', 'Binding', 'CGI', 'CGI::Cookie',
+ 'CGI::HtmlExtension', 'CGI::QueryExtension',
+ 'CGI::Session', 'CGI::Session::FileStore',
+ 'CGI::Session::MemoryStore', 'Class', 'Comparable', 'Complex',
+ 'ConditionVariable', 'Continuation', 'Data',
+ 'Date', 'DateTime', 'Delegator', 'Dir', 'EOFError', 'ERB',
+ 'ERB::Util', 'Enumerable', 'Enumerable::Enumerator', 'Errno',
+ 'Exception', 'FalseClass', 'File',
+ 'File::Constants', 'File::Stat', 'FileTest', 'FileUtils',
+ 'FileUtils::DryRun', 'FileUtils::NoWrite',
+ 'FileUtils::StreamUtils_', 'FileUtils::Verbose', 'Find',
+ 'Fixnum', 'FloatDomainError', 'Forwardable', 'GC', 'Generator',
+ 'Hash', 'IO', 'IOError', 'Iconv', 'Iconv::BrokenLibrary',
+ 'Iconv::Failure', 'Iconv::IllegalSequence',
+ 'Iconv::InvalidCharacter', 'Iconv::InvalidEncoding',
+ 'Iconv::OutOfRange', 'IndexError', 'Interrupt', 'Kernel',
+ 'LoadError', 'LocalJumpError', 'Logger', 'Logger::Application',
+ 'Logger::Error', 'Logger::Formatter', 'Logger::LogDevice',
+ 'Logger::LogDevice::LogDeviceMutex', 'Logger::Severity',
+ 'Logger::ShiftingError', 'Marshal', 'MatchData',
+ 'Math', 'Matrix', 'Method', 'Module', 'Mutex', 'NameError',
+ 'NameError::message', 'NilClass', 'NoMemoryError',
+ 'NoMethodError', 'NotImplementedError', 'Numeric', 'Object',
+ 'ObjectSpace', 'Observable', 'PStore', 'PStore::Error',
+ 'Pathname', 'Precision', 'Proc', 'Process', 'Process::GID',
+ 'Process::Status', 'Process::Sys', 'Process::UID', 'Queue',
+ 'Range', 'RangeError', 'Rational', 'Regexp', 'RegexpError',
+ 'RuntimeError', 'ScriptError', 'SecurityError', 'Set',
+ 'Shellwords', 'Signal', 'SignalException', 'SimpleDelegator',
+ 'SingleForwardable', 'Singleton', 'SingletonClassMethods',
+ 'SizedQueue', 'SortedSet', 'StandardError', 'StringIO',
+ 'StringScanner', 'StringScanner::Error', 'Struct', 'Symbol',
+ 'SyncEnumerator', 'SyntaxError', 'SystemCallError',
+ 'SystemExit', 'SystemStackError', 'Tempfile',
+ 'Test::Unit::TestCase', 'Test::Unit', 'Test', 'Thread',
+ 'ThreadError', 'ThreadGroup',
+ 'ThreadsWait', 'Time', 'TrueClass', 'TypeError', 'URI',
+ 'URI::BadURIError', 'URI::Error', 'URI::Escape', 'URI::FTP',
+ 'URI::Generic', 'URI::HTTP', 'URI::HTTPS',
+ 'URI::InvalidComponentError', 'URI::InvalidURIError',
+ 'URI::LDAP', 'URI::MailTo', 'URI::REGEXP',
+ 'URI::REGEXP::PATTERN', 'UnboundMethod', 'Vector', 'YAML',
+ 'ZeroDivisionError', 'Zlib',
+ 'Zlib::BufError', 'Zlib::DataError', 'Zlib::Deflate',
+ 'Zlib::Error', 'Zlib::GzipFile', 'Zlib::GzipFile::CRCError',
+ 'Zlib::GzipFile::Error', 'Zlib::GzipFile::LengthError',
+ 'Zlib::GzipFile::NoFooter', 'Zlib::GzipReader',
+ 'Zlib::GzipWriter', 'Zlib::Inflate', 'Zlib::MemError',
+ 'Zlib::NeedDict', 'Zlib::StreamEnd', 'Zlib::StreamError',
+ 'Zlib::VersionError',
+ 'Zlib::ZStream',
+ 'ActionController::AbstractRequest',
+ 'ActionController::Assertions::DomAssertions',
+ 'ActionController::Assertions::ModelAssertions',
+ 'ActionController::Assertions::ResponseAssertions',
+ 'ActionController::Assertions::RoutingAssertions',
+ 'ActionController::Assertions::SelectorAssertions',
+ 'ActionController::Assertions::TagAssertions',
+ 'ActionController::Base',
+ 'ActionController::Benchmarking::ClassMethods',
+ 'ActionController::Caching',
+ 'ActionController::Caching::Actions',
+ 'ActionController::Caching::Actions::ActionCachePath',
+ 'ActionController::Caching::Fragments',
+ 'ActionController::Caching::Pages',
+ 'ActionController::Caching::Pages::ClassMethods',
+ 'ActionController::Caching::Sweeping',
+ 'ActionController::Components',
+ 'ActionController::Components::ClassMethods',
+ 'ActionController::Components::InstanceMethods',
+ 'ActionController::Cookies',
+ 'ActionController::Filters::ClassMethods',
+ 'ActionController::Flash',
+ 'ActionController::Flash::FlashHash',
+ 'ActionController::Helpers::ClassMethods',
+ 'ActionController::Integration::Session',
+ 'ActionController::IntegrationTest',
+ 'ActionController::Layout::ClassMethods',
+ 'ActionController::Macros',
+ 'ActionController::Macros::AutoComplete::ClassMethods',
+ 'ActionController::Macros::InPlaceEditing::ClassMethods',
+ 'ActionController::MimeResponds::InstanceMethods',
+ 'ActionController::Pagination',
+ 'ActionController::Pagination::ClassMethods',
+ 'ActionController::Pagination::Paginator',
+ 'ActionController::Pagination::Paginator::Page',
+ 'ActionController::Pagination::Paginator::Window',
+ 'ActionController::Rescue', 'ActionController::Resources',
+ 'ActionController::Routing',
+ 'ActionController::Scaffolding::ClassMethods',
+ 'ActionController::SessionManagement::ClassMethods',
+ 'ActionController::Streaming', 'ActionController::TestProcess',
+ 'ActionController::TestUploadedFile',
+ 'ActionController::UrlWriter',
+ 'ActionController::Verification::ClassMethods',
+ 'ActionMailer::Base', 'ActionView::Base',
+ 'ActionView::Helpers::ActiveRecordHelper',
+ 'ActionView::Helpers::AssetTagHelper',
+ 'ActionView::Helpers::BenchmarkHelper',
+ 'ActionView::Helpers::CacheHelper',
+ 'ActionView::Helpers::CaptureHelper',
+ 'ActionView::Helpers::DateHelper',
+ 'ActionView::Helpers::DebugHelper',
+ 'ActionView::Helpers::FormHelper',
+ 'ActionView::Helpers::FormOptionsHelper',
+ 'ActionView::Helpers::FormTagHelper',
+ 'ActionView::Helpers::JavaScriptHelper',
+ 'ActionView::Helpers::JavaScriptMacrosHelper',
+ 'ActionView::Helpers::NumberHelper',
+ 'ActionView::Helpers::PaginationHelper',
+ 'ActionView::Helpers::PrototypeHelper',
+ 'ActionView::Helpers::PrototypeHelper::JavaScriptGenerator::GeneratorMethods',
+ 'ActionView::Helpers::ScriptaculousHelper',
+ 'ActionView::Helpers::TagHelper',
+ 'ActionView::Helpers::TextHelper',
+ 'ActionView::Helpers::UrlHelper', 'ActionView::Partials',
+ 'ActionWebService::API::Method', 'ActionWebService::Base',
+ 'ActionWebService::Client::Soap',
+ 'ActionWebService::Client::XmlRpc',
+ 'ActionWebService::Container::ActionController::ClassMethods',
+ 'ActionWebService::Container::Delegated::ClassMethods',
+ 'ActionWebService::Container::Direct::ClassMethods',
+ 'ActionWebService::Invocation::ClassMethods',
+ 'ActionWebService::Scaffolding::ClassMethods',
+ 'ActionWebService::SignatureTypes', 'ActionWebService::Struct',
+ 'ActiveRecord::Acts::List::ClassMethods',
+ 'ActiveRecord::Acts::List::InstanceMethods',
+ 'ActiveRecord::Acts::NestedSet::ClassMethods',
+ 'ActiveRecord::Acts::NestedSet::InstanceMethods',
+ 'ActiveRecord::Acts::Tree::ClassMethods',
+ 'ActiveRecord::Acts::Tree::InstanceMethods',
+ 'ActiveRecord::Aggregations::ClassMethods',
+ 'ActiveRecord::Associations::ClassMethods',
+ 'ActiveRecord::AttributeMethods::ClassMethods',
+ 'ActiveRecord::Base',
+ 'ActiveRecord::Calculations::ClassMethods',
+ 'ActiveRecord::Callbacks',
+ 'ActiveRecord::ConnectionAdapters::AbstractAdapter',
+ 'ActiveRecord::ConnectionAdapters::Column',
+ 'ActiveRecord::ConnectionAdapters::DB2Adapter',
+ 'ActiveRecord::ConnectionAdapters::DatabaseStatements',
+ 'ActiveRecord::ConnectionAdapters::FirebirdAdapter',
+ 'ActiveRecord::ConnectionAdapters::FrontBaseAdapter',
+ 'ActiveRecord::ConnectionAdapters::MysqlAdapter',
+ 'ActiveRecord::ConnectionAdapters::OpenBaseAdapter',
+ 'ActiveRecord::ConnectionAdapters::OracleAdapter',
+ 'ActiveRecord::ConnectionAdapters::PostgreSQLAdapter',
+ 'ActiveRecord::ConnectionAdapters::Quoting',
+ 'ActiveRecord::ConnectionAdapters::SQLServerAdapter',
+ 'ActiveRecord::ConnectionAdapters::SQLiteAdapter',
+ 'ActiveRecord::ConnectionAdapters::SchemaStatements',
+ 'ActiveRecord::ConnectionAdapters::SybaseAdapter::ColumnWithIdentity',
+ 'ActiveRecord::ConnectionAdapters::SybaseAdapterContext',
+ 'ActiveRecord::ConnectionAdapters::TableDefinition',
+ 'ActiveRecord::Errors', 'ActiveRecord::Locking',
+ 'ActiveRecord::Locking::Optimistic',
+ 'ActiveRecord::Locking::Optimistic::ClassMethods',
+ 'ActiveRecord::Locking::Pessimistic',
+ 'ActiveRecord::Migration', 'ActiveRecord::Observer',
+ 'ActiveRecord::Observing::ClassMethods',
+ 'ActiveRecord::Reflection::ClassMethods',
+ 'ActiveRecord::Reflection::MacroReflection',
+ 'ActiveRecord::Schema', 'ActiveRecord::Timestamp',
+ 'ActiveRecord::Transactions::ClassMethods',
+ 'ActiveRecord::Validations',
+ 'ActiveRecord::Validations::ClassMethods',
+ 'ActiveRecord::XmlSerialization',
+ 'ActiveSupport::CachingTools::HashCaching',
+ 'ActiveSupport::CoreExtensions::Array::Conversions',
+ 'ActiveSupport::CoreExtensions::Array::Grouping',
+ 'ActiveSupport::CoreExtensions::Date::Conversions',
+ 'ActiveSupport::CoreExtensions::Hash::Conversions',
+ 'ActiveSupport::CoreExtensions::Hash::Conversions::ClassMethods',
+ 'ActiveSupport::CoreExtensions::Hash::Diff',
+ 'ActiveSupport::CoreExtensions::Hash::Keys',
+ 'ActiveSupport::CoreExtensions::Hash::ReverseMerge',
+ 'ActiveSupport::CoreExtensions::Integer::EvenOdd',
+ 'ActiveSupport::CoreExtensions::Integer::Inflections',
+ 'ActiveSupport::CoreExtensions::Numeric::Bytes',
+ 'ActiveSupport::CoreExtensions::Numeric::Time',
+ 'ActiveSupport::CoreExtensions::Pathname::CleanWithin',
+ 'ActiveSupport::CoreExtensions::Range::Conversions',
+ 'ActiveSupport::CoreExtensions::String::Access',
+ 'ActiveSupport::CoreExtensions::String::Conversions',
+ 'ActiveSupport::CoreExtensions::String::Inflections',
+ 'ActiveSupport::CoreExtensions::String::Iterators',
+ 'ActiveSupport::CoreExtensions::String::StartsEndsWith',
+ 'ActiveSupport::CoreExtensions::String::Unicode',
+ 'ActiveSupport::CoreExtensions::Time::Calculations',
+ 'ActiveSupport::CoreExtensions::Time::Calculations::ClassMethods',
+ 'ActiveSupport::CoreExtensions::Time::Conversions',
+ 'ActiveSupport::Multibyte::Chars',
+ 'ActiveSupport::Multibyte::Handlers::UTF8Handler',
+ 'Breakpoint', 'Builder::BlankSlate', 'Builder::XmlMarkup',
+ 'Fixtures',
+ 'HTML::Selector', 'HashWithIndifferentAccess', 'Inflector',
+ 'Inflector::Inflections', 'Mime', 'Mime::Type',
+ 'OCI8AutoRecover', 'TimeZone', 'XmlSimple'
+ ),
+ 5 => array(
+ 'image_tag', 'link_to', 'link_to_remote', 'javascript_include_tag',
+ 'assert_equal', 'assert_not_equal', 'before_filter',
+ 'after_filter', 'render', 'redirect_to', 'hide_action',
+ 'render_to_string', 'url_for', 'controller_name',
+ 'controller_class_name', 'controller_path', 'session',
+ 'render_component', 'render_component_as_string', 'cookie',
+ 'layout', 'flash', 'auto_complete_for', 'in_place_editor_for',
+ 'respond_to', 'paginate', 'current_page', 'each', 'first',
+ 'first_page', 'last_page', 'last', 'length', 'new', 'page_count',
+ 'previous', 'scaffold', 'send_data',
+ 'send_file', 'deliver', 'receive', 'error_messages_for',
+ 'error_message_on', 'form', 'input', 'stylesheet_link_tag',
+ 'stylesheet_path', 'content_for', 'select_date', 'ago',
+ 'month', 'day', 'check_box', 'fields_for', 'file_field',
+ 'form_for', 'hidden_field', 'text_area', 'password_field',
+ 'collection_select', 'options_for_select',
+ 'options_from_collection_for_select', 'file_field_tag',
+ 'form_for_tag', 'hidden_field_tag', 'text_area_tag',
+ 'password_field_tag', 'link_to_function', 'javascript_tag',
+ 'human_size', 'number_to_currency', 'pagination_links',
+ 'form_remote_tag', 'form_remote_for',
+ 'submit_to_remote', 'remote_function', 'observe_form',
+ 'observe_field', 'remote_form_for', 'options_for_ajax', 'alert',
+ 'call', 'assign', 'show', 'hide', 'insert_html', 'sortable',
+ 'toggle', 'visual_effect', 'replace', 'replace_html', 'remove',
+ 'save', 'save!', 'draggable', 'drop_receiving', 'literal',
+ 'draggable_element', 'drop_receiving_element', 'sortable_element',
+ 'content_tag', 'tag', 'link_to_image', 'link_to_if',
+ 'link_to_unless', 'mail_to', 'link_image_to', 'button_to',
+ 'current_page?', 'act_as_list', 'act_as_nested', 'act_as_tree',
+ 'has_many', 'has_one', 'belongs_to', 'has_many_and_belogns_to',
+ 'delete', 'destroy', 'destroy_all', 'clone', 'deep_clone', 'copy',
+ 'update', 'table_name', 'primary_key', 'sum', 'maximun', 'minimum',
+ 'count', 'size', 'after_save', 'after_create', 'before_save',
+ 'before_create', 'add_to_base', 'errors', 'add', 'validate',
+ 'validates_presence_of', 'validates_numericality_of',
+ 'validates_uniqueness_of', 'validates_length_of',
+ 'validates_format_of', 'validates_size_of', 'to_a', 'to_s',
+ 'to_xml', 'to_i'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '[', ']', '{', '}', '%', '&', '*', '|', '/', '<', '>',
+ '+', '-', '=>', '<<'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ 2 => true,
+ 3 => true,
+ 4 => true,
+ 5 => true
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color:#9966CC; font-weight:bold;',
+ 2 => 'color:#0000FF; font-weight:bold;',
+ 3 => 'color:#CC0066; font-weight:bold;',
+ 4 => 'color:#CC00FF; font-weight:bold;',
+ 5 => 'color:#5A0A0A; font-weight:bold;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color:#008000; font-style:italic;',
+ 'MULTI' => 'color:#000080; font-style:italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color:#000099;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color:#006600; font-weight:bold;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color:#996600;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color:#006666;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color:#9900CC;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color:#006600; font-weight:bold;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color:#ff6633; font-weight:bold;',
+ 1 => 'color:#0066ff; font-weight:bold;',
+ 2 => 'color:#6666ff; font-weight:bold;',
+ 3 => 'color:#ff3333; font-weight:bold;'
+ ),
+ 'SCRIPT' => array(
+ 0 => '',
+ 1 => '',
+ 2 => '',
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => '',
+ 5 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ 0 => array(
+ GESHI_SEARCH => "([[:space:]])(\\$[a-zA-Z_][a-zA-Z0-9_]*)",
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => ''
+ ),
+ 1 => array(
+ GESHI_SEARCH => "([[:space:]])(@[a-zA-Z_][a-zA-Z0-9_]*)",
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => ''
+ ),
+ 2 => "([A-Z][a-zA-Z0-9_]*::)+[A-Z][a-zA-Z0-9_]*", //Static OOP References
+ 3 => array(
+ GESHI_SEARCH => "([[:space:]]|\[|\()(:[a-zA-Z_][a-zA-Z0-9_]*)",
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => ''
+ )
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_MAYBE,
+ 'SCRIPT_DELIMITERS' => array(
+ 0 => array(
+ '<%' => '%>'
+ )
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ 0 => true,
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/rebol.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/rebol.php
new file mode 100644
index 000000000..97eff1f32
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/rebol.php
@@ -0,0 +1,196 @@
+<?php
+/*************************************************************************************
+ * rebol.php
+ * --------
+ * Author: Lecanu Guillaume (Guillaume@LyA.fr)
+ * Copyright: (c) 2004-2005 Lecanu Guillaume (Guillaume@LyA.fr)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/12/22
+ *
+ * Rebol language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2009/01/26 (1.0.8.3)
+ * - Adapted language file to comply to GeSHi language file guidelines
+ * 2004/11/25 (1.0.3)
+ * - Added support for multiple object splitters
+ * - Fixed &new problem
+ * 2004/10/27 (1.0.2)
+ * - Added URL support
+ * - Added extra constants
+ * 2004/08/05 (1.0.1)
+ * - Added support for symbols
+ * 2004/07/14 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/07/14)
+ * -------------------------
+ * * Make sure the last few function I may have missed
+ * (like eval()) are included for highlighting
+ * * Split to several files - php4, php5 etc
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'REBOL',
+ 'COMMENT_SINGLE' => array(1 => ';'),
+ 'COMMENT_MULTI' => array('rebol [' => ']', 'comment [' => ']'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'binary!','block!','char!','date!','decimal!','email!','file!',
+ 'hash!','integer!','issue!','list!','logic!','money!','none!',
+ 'object!','paren!','pair!','path!','string!','tag!','time!',
+ 'tuple!','url!',
+ ),
+ 2 => array(
+ 'all','any','attempt','break','catch','compose','disarm','dispatch',
+ 'do','do-events','does','either','else','exit','for','forall',
+ 'foreach','forever','forskip','func','function','halt','has','if',
+ 'launch','loop','next','quit','reduce','remove-each','repeat',
+ 'return','secure','switch','throw','try','until','wait','while',
+ ),
+ 3 => array(
+ 'about','abs','absolute','add','alert','alias','alter','and',
+ 'any-block?','any-function?','any-string?','any-type?','any-word?',
+ 'append','arccosine','arcsine','arctangent','array','as-pair',
+ 'ask','at','back','binary?','bind','bitset?','block?','brightness?',
+ 'browse','build-tag','caret-to-offset','center-face','change',
+ 'change-dir','char?','charset','checksum','choose','clean-path',
+ 'clear','clear-fields','close','comment','complement','component?',
+ 'compress','confirm','connected?','construct','context','copy',
+ 'cosine','datatype?','date?','debase','decimal?','decode-cgi',
+ 'decompress','dehex','delete','detab','difference','dir?','dirize',
+ 'divide','dump-face','dump-obj','echo','email?','empty?','enbase',
+ 'entab','equal?','error?','even?','event?','exclude','exists?',
+ 'exp','extract','fifth','file?','find','first','flash','focus',
+ 'form','found?','fourth','free','function?','get','get-modes',
+ 'get-word?','greater-or-equal?','greater?','hash?','head','head?',
+ 'help','hide','hide-popup','image?','import-email','in',
+ 'in-window?','index?','info?','inform','input','input?','insert',
+ 'integer?','intersect','issue?','join','last','layout','length?',
+ 'lesser-or-equal?','lesser?','library?','license','link?',
+ 'list-dir','list?','lit-path?','lit-word?','load','load-image',
+ 'log-10','log-2','log-e','logic?','lowercase','make','make-dir',
+ 'make-face','max','maximum','maximum-of','min','minimum',
+ 'minimum-of','modified?','mold','money?','multiply','native?',
+ 'negate','negative?','none?','not','not-equal?','now','number?',
+ 'object?','odd?','offset-to-caret','offset?','op?','open','or',
+ 'pair?','paren?','parse','parse-xml','path?','pick','poke','port?',
+ 'positive?','power','prin','print','probe','protect',
+ 'protect-system','query','random','read','read-io','recycle',
+ 'refinement?','reform','rejoin','remainder','remold','remove',
+ 'rename',
+ //'repeat',
+ 'repend','replace','request','request-color','request-date',
+ 'request-download','request-file','request-list','request-pass',
+ 'request-text','resend','reverse','routine?','same?','save',
+ 'script?','second','select','send','series?','set','set-modes',
+ 'set-net','set-path?','set-word?','show','show-popup','sign?',
+ 'sine','size-text','size?','skip','sort','source','span?',
+ 'split-path','square-root','strict-equal?','strict-not-equal?',
+ 'string?','struct?','stylize','subtract','suffix?','tag?','tail',
+ 'tail?','tangent','third','time?','to','to-binary','to-bitset',
+ 'to-block','to-char','to-date','to-decimal','to-email','to-file',
+ 'to-get-word','to-hash','to-hex','to-idate','to-image','to-integer',
+ 'to-issue','to-list','to-lit-path','to-lit-word','to-local-file',
+ 'to-logic','to-money','to-pair','to-paren','to-path',
+ 'to-rebol-file','to-refinement','to-set-path','to-set-word',
+ 'to-string','to-tag','to-time','to-tuple','to-url','to-word',
+ 'trace','trim','tuple?','type?','unfocus','union','unique',
+ 'unprotect','unset','unset?','unview','update','upgrade',
+ 'uppercase','url?','usage','use','value?','view','viewed?','what',
+ 'what-dir','within?','word?','write','write-io','xor','zero?',
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '[', ']', '{', '}', '!', '@', '%', '&', '*', '|', '/', '<', '>'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #b1b100;',
+ 2 => 'color: #000000; font-weight: bold;',
+ 3 => 'color: #000066;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080; font-style: italic;',
+// 2 => 'color: #808080; font-style: italic;',
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #006600;',
+ 2 => 'color: #006600;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #0000ff;'
+ ),
+ 'SCRIPT' => array(
+ 0 => '',
+ 1 => '',
+ 2 => '',
+ 3 => ''
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => ''
+// 2 => 'includes/dico_rebol.php?word={FNAME}',
+// 3 => 'includes/dico_rebol.php?word={FNAME}'
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ 0 => "[\\$]{1,2}[a-zA-Z_][a-zA-Z0-9_]*",
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/reg.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/reg.php
new file mode 100644
index 000000000..59199f743
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/reg.php
@@ -0,0 +1,233 @@
+<?php
+/*************************************************************************************
+ * reg.php
+ * -------
+ * Author: Sean Hanna (smokingrope@gmail.com)
+ * Copyright: (c) 2006 Sean Hanna
+ * Release Version: 1.0.8.4
+ * Date Started: 03/15/2006
+ *
+ * Microsoft Registry Editor language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * - Updated and optimized most regular expressions
+ * 03/15/2006 (0.5.0)
+ * - Syntax File Created
+ * 04/27/2006 (0.9.5)
+ * - Syntax Coloring Cleaned Up
+ * - First Release
+ * 04/29/2006 (1.0.0)
+ * - Updated a few coloring settings
+ *
+ * TODO (updated 4/27/2006)
+ * -------------------------
+ * - Add a verification to the multi-line portion of the hex field regex
+ * for a '\' character on the line preceding the line of the multi-line
+ * hex field.
+ *
+ * KNOWN ISSUES (updated 4/27/2006)
+ * ---------------------------------
+ *
+ * - There are two regexes for the multiline hex value regex. The regex for
+ * all lines after the first does not verify that the previous line contains
+ * a line continuation character '\'. This regex also does not check for
+ * end of line as it should.
+ *
+ * - If number_highlighting is enabled during processing of this syntax file
+ * many of the regexps used will appear slightly incorrect.
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+
+ ************************************************************************************/
+$language_data = array (
+ 'LANG_NAME' => 'Microsoft Registry',
+ 'COMMENT_SINGLE' => array(1 =>';'),
+ 'COMMENT_MULTI' => array( ),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array(),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+// 1 => array(),
+// 2 => array(),
+ /* Registry Key Constants Not Used */
+ 3 => array(
+ 'HKEY_LOCAL_MACHINE',
+ 'HKEY_CLASSES_ROOT',
+ 'HKEY_CURRENT_USER',
+ 'HKEY_USERS',
+ 'HKEY_CURRENT_CONFIG',
+ 'HKEY_DYN_DATA',
+ 'HKLM', 'HKCR', 'HKCU', 'HKU', 'HKCC', 'HKDD'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '='
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+// 1 => false,
+// 2 => false,
+ 3 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+// 1 => 'color: #00CCFF;',
+// 2 => 'color: #0000FF;',
+ 3 => 'color: #800000;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #009900;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #009900;'
+ ),
+ 'NUMBERS' => array(
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #00CCFF;',
+ 1 => 'color: #0000FF;',
+ 2 => '',
+ 3 => 'color: #0000FF;',
+ 4 => 'color: #0000FF;',
+ 5 => '',
+ 6 => '',
+ 7 => '',
+ 8 => 'color: #FF6600;',
+ )
+ ),
+ 'URLS' => array(
+// 1 => '',
+// 2 => '',
+ 3 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ // Highlight Key Delimiters
+ 0 => array(
+ GESHI_SEARCH => '((^|\\n)\\s*)(\\\\\\[(.*)\\\\\\])(\\s*(\\n|$))',
+ GESHI_REPLACE => '\\3',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => '\\5'
+// GESHI_CLASS => 'kw1'
+ ),
+ // Highlight File Format Header Version 5
+ 1 => array(
+ GESHI_SEARCH => '(^\s*)(Windows Registry Editor Version \d+\.\d+)(\s*$)',
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => 'm',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => '\\3',
+ GESHI_CLASS => 'geshi_registry_header'
+ ),
+ // Highlight File Format Header Version 4
+ 2 => array(
+ GESHI_SEARCH => '(^\\s*)(REGEDIT\s?\d+)(\s*$)',
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => 'm',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => '\\3',
+ GESHI_CLASS => 'geshi_registry_header'
+ ),
+ // Highlight dword: 32 bit integer values
+ 3 => array(
+ GESHI_SEARCH => '(=\s*)(dword:[0-9a-fA-F]{8})(\s*$)',
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => 'm',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => '\\3'
+// GESHI_CLASS => 'kw2'
+ ),
+ // Highlight variable names
+ 4 => array(
+ GESHI_SEARCH => '(^\s*)(\&quot;.*?\&quot;)(\s*=)',
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => 'm',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => '\\3',
+ GESHI_CLASS => 'geshi_variable'
+ ),
+ // Highlight String Values
+ 5 => array(
+ GESHI_SEARCH => '(=\s*)(\&quot;.*?\&quot;)(\s*$)',
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => 'm',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => '\\3',
+ GESHI_CLASS => 'st0'
+ ),
+ // Highlight Hexadecimal Values (Single-Line and Multi-Line)
+ 6 => array(
+ GESHI_SEARCH => '(=\s*\n?\s*)(hex:[0-9a-fA-F]{2}(,(\\\s*\n\s*)?[0-9a-fA-F]{2})*)',
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => 'm',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => '',
+ GESHI_CLASS => 'kw2'
+ ),
+ // Highlight Default Variable
+ 7 => array(
+ GESHI_SEARCH => '(^\s*)(@)(\s*=)',
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => 'm',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => '\\3',
+ GESHI_CLASS => 'geshi_variable'
+ ),
+ // Highlight GUID's found anywhere.
+ 8 => array(
+ GESHI_SEARCH => '(\{[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\})',
+ GESHI_REPLACE => '\\1',
+ GESHI_MODIFIERS => 'i',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => '',
+ GESHI_CLASS => 'geshi_guid'
+ )
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'PARSER_CONTROL' => array(
+ 'ENABLE_FLAGS' => array(
+ 'NUMBERS' => GESHI_NEVER,
+ )
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/robots.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/robots.php
new file mode 100644
index 000000000..af5fe1426
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/robots.php
@@ -0,0 +1,98 @@
+<?php
+/*************************************************************************************
+ * robots.php
+ * --------
+ * Author: Christian Lescuyer (cl@goelette.net)
+ * Copyright: (c) 2006 Christian Lescuyer http://xtian.goelette.info
+ * Release Version: 1.0.8.4
+ * Date Started: 2006/02/17
+ *
+ * robots.txt language file for GeSHi.
+ *
+ * 2006/02/17 (1.0.0)
+ * - First Release
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'robots.txt',
+ 'COMMENT_SINGLE' => array(1 => '#'),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array(),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'User-agent', 'Disallow'
+ )
+ ),
+ 'SYMBOLS' => array(
+ ':'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #b1b100;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080; font-style: italic;',
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => 'http://www.robotstxt.org/wc/norobots.html'
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/ruby.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/ruby.php
new file mode 100644
index 000000000..8c2b7d829
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/ruby.php
@@ -0,0 +1,226 @@
+<?php
+/*************************************************************************************
+ * ruby.php
+ * --------
+ * Author: Moises Deniz
+ * Copyright: (c) 2007 Moises Deniz
+ * Release Version: 1.0.8.4
+ * Date Started: 2007/03/21
+ *
+ * Ruby language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * 2007/03/21 (1.0.7.19)
+ * - Initial release
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Ruby',
+ 'COMMENT_SINGLE' => array(1 => "#"),
+ 'COMMENT_MULTI' => array("=begin" => "=end"),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"', '`','\''),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'alias', 'and', 'begin', 'break', 'case', 'class',
+ 'def', 'defined', 'do', 'else', 'elsif', 'end',
+ 'ensure', 'for', 'if', 'in', 'module', 'while',
+ 'next', 'not', 'or', 'redo', 'rescue', 'yield',
+ 'retry', 'super', 'then', 'undef', 'unless',
+ 'until', 'when', 'BEGIN', 'END', 'include'
+ ),
+ 2 => array(
+ '__FILE__', '__LINE__', 'false', 'nil', 'self', 'true',
+ 'return'
+ ),
+ 3 => array(
+ 'Array', 'Float', 'Integer', 'String', 'at_exit',
+ 'autoload', 'binding', 'caller', 'catch', 'chop', 'chop!',
+ 'chomp', 'chomp!', 'eval', 'exec', 'exit', 'exit!', 'fail',
+ 'fork', 'format', 'gets', 'global_variables', 'gsub', 'gsub!',
+ 'iterator?', 'lambda', 'load', 'local_variables', 'loop',
+ 'open', 'p', 'print', 'printf', 'proc', 'putc', 'puts',
+ 'raise', 'rand', 'readline', 'readlines', 'require', 'select',
+ 'sleep', 'split', 'sprintf', 'srand', 'sub', 'sub!', 'syscall',
+ 'system', 'trace_var', 'trap', 'untrace_var'
+ ),
+ 4 => array(
+ 'Abbrev', 'ArgumentError', 'Base64', 'Benchmark',
+ 'Benchmark::Tms', 'Bignum', 'Binding', 'CGI', 'CGI::Cookie',
+ 'CGI::HtmlExtension', 'CGI::QueryExtension',
+ 'CGI::Session', 'CGI::Session::FileStore',
+ 'CGI::Session::MemoryStore', 'Class', 'Comparable', 'Complex',
+ 'ConditionVariable', 'Continuation', 'Data',
+ 'Date', 'DateTime', 'Delegator', 'Dir', 'EOFError', 'ERB',
+ 'ERB::Util', 'Enumerable', 'Enumerable::Enumerator', 'Errno',
+ 'Exception', 'FalseClass', 'File',
+ 'File::Constants', 'File::Stat', 'FileTest', 'FileUtils',
+ 'FileUtils::DryRun', 'FileUtils::NoWrite',
+ 'FileUtils::StreamUtils_', 'FileUtils::Verbose', 'Find',
+ 'Fixnum', 'FloatDomainError', 'Forwardable', 'GC', 'Generator',
+ 'Hash', 'IO', 'IOError', 'Iconv', 'Iconv::BrokenLibrary',
+ 'Iconv::Failure', 'Iconv::IllegalSequence',
+ 'Iconv::InvalidCharacter', 'Iconv::InvalidEncoding',
+ 'Iconv::OutOfRange', 'IndexError', 'Interrupt', 'Kernel',
+ 'LoadError', 'LocalJumpError', 'Logger', 'Logger::Application',
+ 'Logger::Error', 'Logger::Formatter', 'Logger::LogDevice',
+ 'Logger::LogDevice::LogDeviceMutex', 'Logger::Severity',
+ 'Logger::ShiftingError', 'Marshal', 'MatchData',
+ 'Math', 'Matrix', 'Method', 'Module', 'Mutex', 'NameError',
+ 'NameError::message', 'NilClass', 'NoMemoryError',
+ 'NoMethodError', 'NotImplementedError', 'Numeric', 'Object',
+ 'ObjectSpace', 'Observable', 'PStore', 'PStore::Error',
+ 'Pathname', 'Precision', 'Proc', 'Process', 'Process::GID',
+ 'Process::Status', 'Process::Sys', 'Process::UID', 'Queue',
+ 'Range', 'RangeError', 'Rational', 'Regexp', 'RegexpError',
+ 'RuntimeError', 'ScriptError', 'SecurityError', 'Set',
+ 'Shellwords', 'Signal', 'SignalException', 'SimpleDelegator',
+ 'SingleForwardable', 'Singleton', 'SingletonClassMethods',
+ 'SizedQueue', 'SortedSet', 'StandardError', 'StringIO',
+ 'StringScanner', 'StringScanner::Error', 'Struct', 'Symbol',
+ 'SyncEnumerator', 'SyntaxError', 'SystemCallError',
+ 'SystemExit', 'SystemStackError', 'Tempfile',
+ 'Test::Unit::TestCase', 'Test::Unit', 'Test', 'Thread',
+ 'ThreadError', 'ThreadGroup',
+ 'ThreadsWait', 'Time', 'TrueClass', 'TypeError', 'URI',
+ 'URI::BadURIError', 'URI::Error', 'URI::Escape', 'URI::FTP',
+ 'URI::Generic', 'URI::HTTP', 'URI::HTTPS',
+ 'URI::InvalidComponentError', 'URI::InvalidURIError',
+ 'URI::LDAP', 'URI::MailTo', 'URI::REGEXP',
+ 'URI::REGEXP::PATTERN', 'UnboundMethod', 'Vector', 'YAML',
+ 'ZeroDivisionError', 'Zlib',
+ 'Zlib::BufError', 'Zlib::DataError', 'Zlib::Deflate',
+ 'Zlib::Error', 'Zlib::GzipFile', 'Zlib::GzipFile::CRCError',
+ 'Zlib::GzipFile::Error', 'Zlib::GzipFile::LengthError',
+ 'Zlib::GzipFile::NoFooter', 'Zlib::GzipReader',
+ 'Zlib::GzipWriter', 'Zlib::Inflate', 'Zlib::MemError',
+ 'Zlib::NeedDict', 'Zlib::StreamEnd', 'Zlib::StreamError',
+ 'Zlib::VersionError',
+ 'Zlib::ZStream',
+ 'HTML::Selector', 'HashWithIndifferentAccess', 'Inflector',
+ 'Inflector::Inflections', 'Mime', 'Mime::Type',
+ 'OCI8AutoRecover', 'TimeZone', 'XmlSimple'
+ ),
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '[', ']', '{', '}', '%', '&', '*', '|', '/', '<', '>',
+ '+', '-', '=>', '<<'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => true,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color:#9966CC; font-weight:bold;',
+ 2 => 'color:#0000FF; font-weight:bold;',
+ 3 => 'color:#CC0066; font-weight:bold;',
+ 4 => 'color:#CC00FF; font-weight:bold;',
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color:#008000; font-style:italic;',
+ 'MULTI' => 'color:#000080; font-style:italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color:#000099;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color:#006600; font-weight:bold;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color:#996600;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color:#006666;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color:#9900CC;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color:#006600; font-weight:bold;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color:#ff6633; font-weight:bold;',
+ 1 => 'color:#0066ff; font-weight:bold;',
+ 2 => 'color:#6666ff; font-weight:bold;',
+ 3 => 'color:#ff3333; font-weight:bold;'
+ ),
+ 'SCRIPT' => array(
+ 0 => '',
+ 1 => '',
+ 2 => '',
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ 0 => array(//Variables
+ GESHI_SEARCH => "([[:space:]])(\\$[a-zA-Z_][a-zA-Z0-9_]*)",
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => ''
+ ),
+ 1 => array(//Arrays
+ GESHI_SEARCH => "([[:space:]])(@[a-zA-Z_][a-zA-Z0-9_]*)",
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => ''
+ ),
+ 2 => "([A-Z][a-zA-Z0-9_]*::)+[A-Z][a-zA-Z0-9_]*",//Static OOP symbols
+ 3 => array(
+ GESHI_SEARCH => "([[:space:]]|\[|\()(:[a-zA-Z_][a-zA-Z0-9_]*)",
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => ''
+ )
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_MAYBE,
+ 'SCRIPT_DELIMITERS' => array(
+ 0 => array(
+ '<%' => '%>'
+ )
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ 0 => true,
+ ),
+ 'TAB_WIDTH' => 2
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/sas.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/sas.php
new file mode 100644
index 000000000..bc6899716
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/sas.php
@@ -0,0 +1,290 @@
+<?php
+/*************************************************************************************
+ * sas.php
+ * -------
+ * Author: Galen Johnson (solitaryr@gmail.com)
+ * Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2005/12/27
+ *
+ * SAS language file for GeSHi. Based on the sas vim file.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * - Cleaned up code style
+ * 2005/12/27 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2005/12/27)
+ * -------------------------
+ * * Check highlighting stuff works
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'SAS',
+ 'COMMENT_SINGLE' => array(),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ '_ALL_','_CHARACTER_','_INFILE_','_N_','_NULL_','_NUMERIC_',
+ '_WEBOUT_'
+ ),
+ 2 => array(
+ '%BQUOTE','%CMPRES','%COMPSTOR','%DATATYP','%DISPLAY','%DO','%ELSE',
+ '%END','%EVAL','%GLOBAL','%GOTO','%IF','%INDEX','%INPUT','%KEYDEF',
+ '%LABEL','%LEFT','%LENGTH','%LET','%LOCAL','%LOWCASE','%MACRO',
+ '%MEND','%NRBQUOTE','%NRQUOTE','%NRSTR','%PUT','%QCMPRES','%QLEFT',
+ '%QLOWCASE','%QSCAN','%QSUBSTR','%QSYSFUNC','%QTRIM','%QUOTE',
+ '%QUPCASE','%SCAN','%STR','%SUBSTR','%SUPERQ','%SYSCALL',
+ '%SYSEVALF','%SYSEXEC','%SYSFUNC','%SYSGET','%SYSLPUT','%SYSPROD',
+ '%SYSRC','%SYSRPUT','%THEN','%TO','%TRIM','%UNQUOTE','%UNTIL',
+ '%UPCASE','%VERIFY','%WHILE','%WINDOW'
+ ),
+ 3 => array(
+ 'ABS','ADDR','AIRY','ARCOS','ARSIN','ATAN','ATTRC','ATTRN','BAND',
+ 'BETAINV','BLSHIFT','BNOT','BOR','BRSHIFT','BXOR','BYTE','CDF',
+ 'CEIL','CEXIST','CINV','CLOSE','CNONCT','COLLATE','COMPBL',
+ 'COMPOUND','COMPRESS','COSH','COS','CSS','CUROBS','CV','DACCDBSL',
+ 'DACCDB','DACCSL','DACCSYD','DACCTAB','DAIRY','DATETIME','DATEJUL',
+ 'DATEPART','DATE','DAY','DCLOSE','DEPDBSL','DEPDB','DEPSL','DEPSYD',
+ 'DEPTAB','DEQUOTE','DHMS','DIF','DIGAMMA','DIM','DINFO','DNUM',
+ 'DOPEN','DOPTNAME','DOPTNUM','DREAD','DROPNOTE','DSNAME','ERFC',
+ 'ERF','EXIST','EXP','FAPPEND','FCLOSE','FCOL','FDELETE','FETCHOBS',
+ 'FETCH','FEXIST','FGET','FILEEXIST','FILENAME','FILEREF','FINFO',
+ 'FINV','FIPNAMEL','FIPNAME','FIPSTATE','FLOOR','FNONCT','FNOTE',
+ 'FOPEN','FOPTNAME','FOPTNUM','FPOINT','FPOS','FPUT','FREAD',
+ 'FREWIND','FRLEN','FSEP','FUZZ','FWRITE','GAMINV','GAMMA',
+ 'GETOPTION','GETVARC','GETVARN','HBOUND','HMS','HOSTHELP','HOUR',
+ 'IBESSEL','INDEXW','INDEXC','INDEX','INPUTN','INPUTC','INPUT',
+ 'INTRR','INTCK','INTNX','INT','IRR','JBESSEL','JULDATE','KURTOSIS',
+ 'LAG','LBOUND','LEFT','LENGTH','LGAMMA','LIBNAME','LIBREF','LOG10',
+ 'LOG2','LOGPDF','LOGPMF','LOGSDF','LOG','LOWCASE','MAX','MDY',
+ 'MEAN','MINUTE','MIN','MOD','MONTH','MOPEN','MORT','NETPV','NMISS',
+ 'NORMAL','NPV','N','OPEN','ORDINAL','PATHNAME','PDF','PEEKC','PEEK',
+ 'PMF','POINT','POISSON','POKE','PROBBETA','PROBBNML','PROBCHI',
+ 'PROBF','PROBGAM','PROBHYPR','PROBIT','PROBNEGB','PROBNORM','PROBT',
+ 'PUTN','PUTC','PUT','QTR','QUOTE','RANBIN','RANCAU','RANEXP',
+ 'RANGAM','RANGE','RANK','RANNOR','RANPOI','RANTBL','RANTRI',
+ 'RANUNI','REPEAT','RESOLVE','REVERSE','REWIND','RIGHT','ROUND',
+ 'SAVING','SCAN','SDF','SECOND','SIGN','SINH','SIN','SKEWNESS',
+ 'SOUNDEX','SPEDIS','SQRT','STDERR','STD','STFIPS','STNAME',
+ 'STNAMEL','SUBSTR','SUM','SYMGET','SYSGET','SYSMSG','SYSPROD',
+ 'SYSRC','SYSTEM','TANH','TAN','TIMEPART','TIME','TINV','TNONCT',
+ 'TODAY','TRANSLATE','TRANWRD','TRIGAMMA','TRIMN','TRIM','TRUNC',
+ 'UNIFORM','UPCASE','USS','VARFMT','VARINFMT','VARLABEL','VARLEN',
+ 'VARNAME','VARNUM','VARRAYX','VARRAY','VARTYPE','VAR','VERIFY',
+ 'VFORMATX','VFORMATDX','VFORMATD','VFORMATNX','VFORMATN',
+ 'VFORMATWX','VFORMATW','VFORMAT','VINARRAYX','VINARRAY',
+ 'VINFORMATX','VINFORMATDX','VINFORMATD','VINFORMATNX','VINFORMATN',
+ 'VINFORMATWX','VINFORMATW','VINFORMAT','VLABELX','VLABEL',
+ 'VLENGTHX','VLENGTH','VNAMEX','VNAME','VTYPEX','VTYPE','WEEKDAY',
+ 'YEAR','YYQ','ZIPFIPS','ZIPNAME','ZIPNAMEL','ZIPSTATE'
+ ),
+ 4 => array(
+ 'ABORT','ADD','ALTER','AND','ARRAY','AS','ATTRIB','BY','CALL',
+ 'CARDS4','CASCADE','CATNAME','CHECK','CONTINUE','CREATE',
+ 'DATALINES4','DELETE','DESCRIBE','DISPLAY','DISTINCT','DM','DROP',
+ 'ENDSAS','FILE','FOOTNOTE','FOREIGN','FORMAT','FROM',
+ 'GOTO','GROUP','HAVING','IN','INFILE','INFORMAT',
+ 'INSERT','INTO','KEEP','KEY','LABEL','LEAVE',
+ 'LIKE','LINK','LIST','LOSTCARD','MERGE','MESSAGE','MISSING',
+ 'MODIFY','MSGTYPE','NOT','NULL','ON','OPTIONS','OR','ORDER',
+ 'OUTPUT','PAGE','PRIMARY','REDIRECT','REFERENCES','REMOVE',
+ 'RENAME','REPLACE','RESET','RESTRICT','RETAIN','RETURN','SELECT',
+ 'SET','SKIP','STARTSAS','STOP','SYSTASK','TABLE','TITLE','UNIQUE',
+ 'UPDATE','VALIDATE','VIEW','WAITSAS','WHERE','WINDOW','X'
+ ),
+ 5 => array(
+ 'DO','ELSE','END','IF','THEN','UNTIL','WHILE'
+ ),
+ 6 => array(
+ 'RUN','QUIT','DATA'
+ ),
+ 7 => array(
+ 'ERROR'
+ ),
+ 8 => array(
+ 'WARNING'
+ ),
+ 9 => array(
+ 'NOTE'
+ )
+ ),
+ 'SYMBOLS' => array(
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false,
+ 6 => false,
+ 7 => false,
+ 8 => false,
+ 9 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #0000ff;',
+ 2 => 'color: #0000ff;',
+ 3 => 'color: #0000ff;',
+ 4 => 'color: #0000ff;',
+ 5 => 'color: #0000ff;',
+ 6 => 'color: #000080; font-weight: bold;',
+ 7 => 'color: #ff0000;',
+ 8 => 'color: #00ff00;',
+ 9 => 'color: #0000ff;'
+ ),
+ 'COMMENTS' => array(
+// 1 => 'color: #006400; font-style: italic;',
+ 'MULTI' => 'color: #006400; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #a020f0;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #2e8b57; font-weight: bold;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'SCRIPT' => array(
+ 0 => '',
+ 1 => '',
+ 2 => '',
+ 3 => ''
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #0000ff; font-weight: bold;',
+ 1 => 'color: #000080; font-weight: bold;',
+ 2 => 'color: #006400; font-style: italic;',
+ 3 => 'color: #006400; font-style: italic;',
+ 4 => 'color: #006400; font-style: italic;',
+ 5 => 'color: #ff0000; font-weight: bold;',
+ 6 => 'color: #00ff00; font-style: italic;',
+ 7 => 'color: #0000ff; font-style: normal;',
+ 8 => 'color: #b218b2; font-weight: bold;',
+ 9 => 'color: #b218b2; font-weight: bold;'
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => '',
+ 5 => '',
+ 6 => '',
+ 7 => '',
+ 8 => '',
+ 9 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ 0 => "&amp;[a-zA-Z_][a-zA-Z0-9_]*",
+ 1 => array(//Procedures
+ GESHI_SEARCH => '(^\\s*)(PROC \\w+)',
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => 'im',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => ''
+ ),
+ 2 => array(
+ GESHI_SEARCH => '(^\\s*)(\\*.*;)',
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => 'im',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => ''
+ ),
+ 3 => array(
+ GESHI_SEARCH => '(.*;\\s*)(\\*.*;)',
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => 'im',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => ''
+ ),
+ 4 => array(
+ GESHI_SEARCH => '(^\\s*)(%\\*.*;)',
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => 'im',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => ''
+ ),
+ 5 => array(//Error messages
+ GESHI_SEARCH => '(^ERROR.*)',
+ GESHI_REPLACE => '\\1',
+ GESHI_MODIFIERS => 'im',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
+ ),
+ 6 => array(//Warning messages
+ GESHI_SEARCH => '(^WARNING.*)',
+ GESHI_REPLACE => '\\1',
+ GESHI_MODIFIERS => 'im',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
+ ),
+ 7 => array(//Notice messages
+ GESHI_SEARCH => '(^NOTE.*)',
+ GESHI_REPLACE => '\\1',
+ GESHI_MODIFIERS => 'im',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
+ ),
+ 8 => array(
+ GESHI_SEARCH => '(^\\s*)(CARDS.*)(^\\s*;\\s*$)',
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => 'sim',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => '\\3'
+ ),
+ 9 => array(
+ GESHI_SEARCH => '(^\\s*)(DATALINES.*)(^\\s*;\\s*$)',
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => 'sim',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => '\\3'
+ )
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_MAYBE,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/scala.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/scala.php
new file mode 100644
index 000000000..0eae52d92
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/scala.php
@@ -0,0 +1,122 @@
+<?php
+/*************************************************************************************
+ * scala.php
+ * ----------
+ * Author: Franco Lombardo (franco@francolombardo.net)
+ * Copyright: (c) 2008 Franco Lombardo, Benny Baumann
+ * Release Version: 1.0.8.4
+ * Date Started: 2008/02/08
+ *
+ * Scala language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/02/08 (1.0.7.22)
+ * - First Release
+ *
+ * TODO (updated 2007/04/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Scala',
+ 'COMMENT_SINGLE' => array(1 => '//'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'abstract', 'case', 'catch', 'class', 'def',
+ 'do', 'else', 'extends', 'false', 'final',
+ 'finally', 'for', 'forSome', 'if', 'implicit',
+ 'import', 'match', 'new', 'null', 'object',
+ 'override', 'package', 'private', 'protected', 'requires',
+ 'return', 'sealed', 'super', 'this', 'throw',
+ 'trait', 'try', 'true', 'type', 'val',
+ 'var', 'while', 'with', 'yield'
+ ),
+ 2 => array(
+ 'void', 'double', 'int', 'boolean', 'byte', 'short', 'long', 'char', 'float'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '[', ']', '{', '}', '*', '&', '%', '!', ';', '<', '>', '?',
+ '_', ':', '=', '=>', '<<:',
+ '<%', '>:', '#', '@'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ 2 => true
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #0000ff; font-weight: bold;',
+ 2 => 'color: #9999cc; font-weight: bold;',
+ ),
+ 'COMMENTS' => array(
+ 1=> 'color: #008000; font-style: italic;',
+ 'MULTI' => 'color: #00ff00; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #0000ff; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #F78811;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #6666FF;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #F78811;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #000000;',
+ 2 => 'color: #000000;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #000080;'
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => 'http://scala-lang.org',
+ 2 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/scheme.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/scheme.php
new file mode 100644
index 000000000..1fffcb248
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/scheme.php
@@ -0,0 +1,170 @@
+<?php
+/*************************************************************************************
+ * scheme.php
+ * ----------
+ * Author: Jon Raphaelson (jonraphaelson@gmail.com)
+ * Copyright: (c) 2005 Jon Raphaelson, Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/08/30
+ *
+ * Scheme language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2005/09/22 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2005/09/22)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Scheme',
+ 'COMMENT_SINGLE' => array(1 => ';'),
+ 'COMMENT_MULTI' => array('#|' => '|#'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'abs', 'acos', 'and', 'angle', 'append', 'appply', 'approximate',
+ 'asin', 'assoc', 'assq', 'assv', 'atan',
+
+ 'begin', 'boolean?', 'bound-identifier=?',
+
+ 'caar', 'caddr', 'cadr', 'call-with-current-continuation',
+ 'call-with-input-file', 'call-with-output-file', 'call/cc', 'car',
+ 'case', 'catch', 'cdddar', 'cddddr', 'cdr', 'ceiling', 'char->integer',
+ 'char-alphabetic?', 'char-ci<=?', 'char-ci<?', 'char-ci?', 'char-ci>=?',
+ 'char-ci>?', 'char-ci=?', 'char-downcase', 'char-lower-case?',
+ 'char-numeric', 'char-ready', 'char-ready?', 'char-upcase',
+ 'char-upper-case?', 'char-whitespace?', 'char<=?', 'char<?', 'char=?',
+ 'char>=?', 'char>?', 'char?', 'close-input-port', 'close-output-port',
+ 'complex?', 'cond', 'cons', 'construct-identifier', 'cos',
+ 'current-input-port', 'current-output-port',
+
+ 'd', 'define', 'define-syntax', 'delay', 'denominator', 'display', 'do',
+
+ 'e', 'eof-object?', 'eq?', 'equal?', 'eqv?', 'even?', 'exact->inexact',
+ 'exact?', 'exp', 'expt', 'else',
+
+ 'f', 'floor', 'for-each', 'force', 'free-identifer=?',
+
+ 'gcd', 'gen-counter', 'gen-loser', 'generate-identifier',
+
+ 'identifier->symbol', 'identifier', 'if', 'imag-part', 'inexact->exact',
+ 'inexact?', 'input-port?', 'integer->char', 'integer?', 'integrate-system',
+
+ 'l', 'lambda', 'last-pair', 'lcm', 'length', 'let', 'let*', 'letrec',
+ 'list', 'list->string', 'list->vector', 'list-ref', 'list-tail', 'list?',
+ 'load', 'log',
+
+ 'magnitude', 'make-polar', 'make-promise', 'make-rectangular',
+ 'make-string', 'make-vector', 'map', 'map-streams', 'max', 'member',
+ 'memq', 'memv', 'min', 'modulo',
+
+ 'negative', 'newline', 'nil', 'not', 'null?', 'number->string', 'number?',
+ 'numerator',
+
+ 'odd?', 'open-input-file', 'open-output-file', 'or', 'output-port',
+
+ 'pair?', 'peek-char', 'positive?', 'procedure?',
+
+ 'quasiquote', 'quote', 'quotient',
+
+ 'rational', 'rationalize', 'read', 'read-char', 'real-part', 'real?',
+ 'remainder', 'return', 'reverse',
+
+ 's', 'sequence', 'set!', 'set-char!', 'set-cdr!', 'sin', 'sqrt', 'string',
+ 'string->list', 'string->number', 'string->symbol', 'string-append',
+ 'string-ci<=?', 'string-ci<?', 'string-ci=?', 'string-ci>=?',
+ 'string-ci>?', 'string-copy', 'string-fill!', 'string-length',
+ 'string-ref', 'string-set!', 'string<=?', 'string<?', 'string=?',
+ 'string>=?', 'string>?', 'string?', 'substring', 'symbol->string',
+ 'symbol?', 'syntax', 'syntax-rules',
+
+ 't', 'tan', 'template', 'transcript-off', 'transcript-on', 'truncate',
+
+ 'unquote', 'unquote-splicing', 'unwrap-syntax',
+
+ 'vector', 'vector->list', 'vector-fill!', 'vector-length', 'vector-ref',
+ 'vector-set!', 'vector?',
+
+ 'with-input-from-file', 'with-output-to-file', 'write', 'write-char',
+
+ 'zero?'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '{', '}', '[', ']', '!', '%', '^', '&', '/','+','-','*','=','<','>',';','|'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #b1b100;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080; font-style: italic;',
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ 0 => 'color: #202020;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/scilab.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/scilab.php
new file mode 100644
index 000000000..3d66d810a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/scilab.php
@@ -0,0 +1,295 @@
+<?php
+/*************************************************************************************
+ * scilab.php
+ * --------
+ * Author: Christophe David (geshi@christophedavid.org)
+ * Copyright: (c) 2008 Christophe David (geshi@christophedavid.org)
+ * Release Version: 1.0.8.4
+ * Date Started: 2008/08/04
+ *
+ * SciLab language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/08/25 (1.0.8.1)
+ * - Corrected with the help of Benny Baumann (BenBE@geshi.org)
+ * 2008/08/04 (0.0.0.1)
+ * - First beta Release - known problem with ' used to transpose matrices considered as start of strings
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'SciLab',
+ 'COMMENT_SINGLE' => array(1 => '//'),
+ 'COMMENT_MULTI' => array(),
+ 'COMMENT_REGEXP' => array(
+ 2 => "/(?<=\)|\]|\w)'/"
+ ),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'HARDQUOTE' => array("'", "'"),
+ 'HARDESCAPE' => array(),
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'if', 'else', 'elseif', 'end', 'select', 'case', 'for', 'while', 'break'
+ ),
+ 2 => array(
+ 'STDIN', 'STDOUT', 'STDERR',
+ '%i', '%pi', '%e', '%eps', '%nan', '%inf', '%s', '%t', '%f',
+ 'usual', 'polynomial', 'boolean', 'character', 'function', 'rational', 'state-space',
+ 'sparse', 'boolean sparse', 'list', 'tlist', 'library', 'endfunction'
+ ),
+ 3 => array(
+ '%asn', '%helps', '%k', '%sn', 'abcd', 'abinv', 'abort', 'about', 'About_M2SCI_tools',
+ 'abs', 'acos', 'acosh', 'acoshm', 'acosm', 'AdCommunications', 'add_demo', 'add_edge',
+ 'add_help_chapter', 'add_node', 'add_palette', 'addcolor', 'addf', 'addinter', 'addmenu',
+ 'adj_lists', 'adj2sp', 'aff2ab', 'alufunctions', 'amell', 'analpf', 'analyze', 'and',
+ 'ans', 'apropos', 'arc_graph', 'arc_number', 'arc_properties', 'argn', 'arhnk', 'arl2',
+ 'arma', 'arma2p', 'armac', 'armax', 'armax1', 'arsimul', 'artest', 'articul', 'ascii',
+ 'asciimat', 'asin', 'asinh', 'asinhm', 'asinm', 'assignation', 'atan', 'atanh', 'atanhm',
+ 'atanm', 'augment', 'auread', 'auwrite', 'axes_properties', 'axis_properties', 'backslash',
+ 'balanc', 'balreal', 'bandwr', 'banner','bar', 'barh', 'barhomogenize', 'basename', 'bdiag',
+ 'beep', 'besselh', 'besseli', 'besselj', 'besselk', 'bessely', 'best_match', 'beta','bezout',
+ 'bifish', 'bilin', 'binomial', 'black', 'bloc2exp', 'bloc2ss', 'bode', 'bool2s',
+ 'boucle', 'brackets', 'browsevar', 'bsplin3val', 'bstap', 'buttmag', 'buttondialog',
+ 'bvode', 'bvodeS', 'c_link', 'cainv', 'calendar', 'calerf', 'calfrq', 'call', 'canon', 'casc',
+ 'cat', 'catch', 'ccontrg', 'cd', 'cdfbet', 'cdfbin', 'cdfchi', 'cdfchn', 'cdff', 'cdffnc',
+ 'cdfgam', 'cdfnbn', 'cdfnor', 'cdfpoi', 'cdft', 'ceil', 'cell', 'cell2mat', 'cellstr', 'center',
+ 'cepstrum', 'chain_struct', 'chaintest', 'champ', 'champ_properties', 'champ1', 'char', 'chart',
+ 'chartooem', 'chdir', 'cheb1mag', 'cheb2mag', 'check_graph', 'chepol', 'chfact', 'chol', 'chsolve',
+ 'circuit', 'classmarkov', 'clc', 'clean', 'clear', 'clear_pixmap', 'clearfun', 'clearglobal','clf',
+ 'clipboard', 'close', 'cls2dls', 'cmb_lin', 'cmndred', 'cmoment', 'code2str', 'coeff', 'coff', 'coffg',
+ 'colcomp', 'colcompr', 'colinout', 'colon', 'color', 'color_list', 'colorbar', 'colordef', 'colormap',
+ 'colregul', 'comma', 'comments', 'comp', 'companion', 'comparison', 'Compound_properties', 'con_nodes',
+ 'cond', 'config', 'configure_msvc', 'conj', 'connex', 'console', 'cont_frm', 'cont_mat', 'Contents',
+ 'continue', 'contour', 'contour2d', 'contour2di', 'contourf', 'contr', 'contract_edge', 'contrss',
+ 'convex_hull', 'convol', 'convstr', 'copfac', 'copy', 'corr', 'correl', 'cos', 'cosh', 'coshm',
+ 'cosm', 'cotg', 'coth', 'cothm', 'covar', 'create_palette', 'cshep2d', 'csim', 'cspect', 'Cste',
+ 'ctr_gram', 'cumprod', 'cumsum', 'cycle_basis', 'czt', 'dasrt', 'dassl', 'datafit', 'date', 'datenum',
+ 'datevec', 'dbphi', 'dcf', 'ddp', 'debug', 'dec2hex', 'deff', 'definedfields', 'degree', 'delbpt',
+ 'delete', 'delete_arcs', 'delete_nodes', 'delip', 'delmenu', 'demoplay', 'denom', 'derivat', 'derivative',
+ 'des2ss', 'des2tf', 'det', 'determ', 'detr', 'detrend', 'dft', 'dhinf', 'dhnorm', 'diag', 'diary',
+ 'diff', 'diophant', 'dir', 'dirname', 'disp', 'dispbpt', 'dispfiles', 'dlgamma', 'dnaupd', 'do', 'dot',
+ 'double', 'dragrect', 'draw', 'drawaxis', 'drawlater', 'drawnow', 'driver', 'dsaupd', 'dscr',
+ 'dsearch', 'dsimul', 'dt_ility', 'dtsi', 'edge_number', 'edit', 'edit_curv', 'edit_error',
+ 'edit_graph', 'edit_graph_menus', 'editvar', 'eigenmarkov', 'ell1mag',
+ 'empty', 'emptystr', 'eqfir', 'eqiir', 'equal', 'Equal', 'equil', 'equil1',
+ 'ereduc', 'erf', 'erfc', 'erfcx', 'errbar', 'errcatch', 'errclear', 'error', 'error_table', 'etime',
+ 'eval', 'eval_cshep2d', 'eval3d', 'eval3dp', 'evans', 'evstr', 'excel2sci', 'exec', 'execstr', 'exists',
+ 'exit', 'exp', 'expm', 'external', 'extraction', 'eye', 'fac3d', 'factorial', 'factors', 'faurre', 'fchamp',
+ 'fcontour', 'fcontour2d', 'fec', 'fec_properties', 'feedback', 'feval', 'ffilt', 'fft', 'fft2', 'fftshift',
+ 'fgrayplot', 'figure', 'figure_properties', 'figure_style', 'file', 'fileinfo', 'fileparts', 'filter', 'find',
+ 'find_freq', 'find_path', 'findABCD', 'findAC', 'findBD', 'findBDK', 'findm', 'findmsvccompiler', 'findobj',
+ 'findR', 'findx0BD', 'firstnonsingleton', 'fit_dat', 'fix', 'floor', 'flts', 'foo', 'format',
+ 'formatman', 'fort', 'fourplan', 'fplot2d', 'fplot3d', 'fplot3d1', 'fprintf', 'fprintfMat', 'frep2tf',
+ 'freq', 'freson', 'frexp', 'frfit', 'frmag', 'fscanf', 'fscanfMat', 'fsfirlin', 'fsolve', 'fspecg',
+ 'fstabst', 'fstair', 'ftest', 'ftuneq', 'full', 'fullfile', 'fullrf', 'fullrfk', 'fun2string', 'Funcall',
+ 'funcprot', 'functions', 'funptr', 'fusee', 'G_make', 'g_margin', 'gainplot', 'gamitg',
+ 'gamma', 'gammaln', 'gca', 'gcare', 'gcd', 'gce', 'gcf', 'gda', 'gdf', 'gen_net', 'genfac3d', 'genlib',
+ 'genmarkov', 'geom3d', 'geomean', 'get', 'get_contents_infer', 'get_function_path', 'getcolor', 'getcwd',
+ 'getd', 'getdate', 'getenv', 'getf', 'getfield', 'getfont', 'gethistory', 'getio', 'getlinestyle',
+ 'getlongpathname', 'getmark', 'getmemory', 'getos', 'getpid', 'getscilabkeywords', 'getshell',
+ 'getshortpathname', 'getsymbol', 'getvalue', 'getversion', 'gfare', 'gfrancis', 'girth', 'givens',
+ 'glever', 'glist', 'global', 'GlobalProperty', 'glue', 'gmres', 'gpeche', 'gr_menu', 'graduate', 'grand',
+ 'graph_2_mat', 'graph_center', 'graph_complement', 'graph_diameter', 'graph_power', 'graph_simp', 'graph_sum',
+ 'graph_union', 'graphic', 'Graphics', 'graphics_entities', 'graph-list', 'graycolormap', 'grayplot',
+ 'grayplot_properties', 'graypolarplot', 'great', 'grep', 'group', 'gschur', 'gsort', 'gspec', 'gstacksize',
+ 'gtild', 'h_cl', 'h_inf', 'h_inf_st', 'h_norm', 'h2norm', 'halt', 'hamilton', 'hank', 'hankelsv', 'harmean',
+ 'hat', 'havewindow', 'head_comments', 'help', 'help_skeleton', 'hermit', 'hess', 'hex2dec', 'hilb', 'hinf',
+ 'hist3d', 'histplot', 'horner', 'host', 'hotcolormap', 'householder', 'hrmt', 'hsv2rgb', 'hsvcolormap',
+ 'htrianr', 'hypermat', 'hypermatrices', 'iconvert', 'ieee', 'ifft', 'iir', 'iirgroup', 'iirlp',
+ 'ilib_build', 'ilib_compile', 'ilib_for_link', 'ilib_gen_gateway', 'ilib_gen_loader', 'ilib_gen_Make',
+ 'im_inv', 'imag', 'impl', 'imrep2ss', 'imult', 'ind2sub', 'Infer', 'inistate', 'input', 'insertion', 'int',
+ 'int16', 'int2d', 'int32', 'int3d', 'int8', 'intc', 'intdec', 'integrate', 'interp', 'interp1', 'interp2d',
+ 'interp3d', 'interpln', 'intersci', 'intersect', 'intg', 'intl', 'intppty', 'intsplin', 'inttrap', 'inttype',
+ 'inv', 'inv_coeff', 'invr', 'invsyslin', 'iqr', 'is_connex', 'iscellstr', 'isdef', 'isdir', 'isempty',
+ 'isequal', 'isequalbitwise', 'iserror', 'isglobal', 'isinf', 'isnan', 'isoview', 'isreal', 'javasci',
+ 'jetcolormap', 'jmat', 'justify', 'kalm', 'karmarkar', 'kernel', 'keyboard', 'knapsack', 'kpure', 'krac2',
+ 'kron', 'kroneck', 'label_properties', 'labostat', 'LANGUAGE', 'lasterror', 'lattn', 'lattp', 'lcf', 'lcm',
+ 'lcmdiag', 'ldiv', 'ldivf', 'leastsq', 'left', 'legend', 'legend_properties', 'legendre', 'legends', 'length',
+ 'leqr', 'less', 'lev', 'levin', 'lex_sort', 'lft', 'lgfft', 'lib', 'lin', 'lin2mu', 'lindquist',
+ 'line_graph', 'linear_interpn', 'lines', 'LineSpec', 'linf', 'linfn', 'link', 'linmeq', 'linpro', 'linsolve',
+ 'linspace', 'listfiles', 'listvarinfile', 'lmisolver', 'lmitool', 'load', 'load_graph', 'loadhistory',
+ 'loadmatfile', 'loadplots', 'loadwave', 'locate', 'log', 'log10', 'log1p', 'log2', 'logm', 'logspace',
+ 'lotest', 'lqe', 'lqg', 'lqg_ltr', 'lqg2stan', 'lqr', 'ls', 'lsq', 'lsq_splin', 'lsqrsolve', 'lsslist',
+ 'lstcat', 'lstsize', 'ltitr', 'lu', 'ludel', 'lufact', 'luget', 'lusolve', 'lyap', 'm_circle', 'm2scideclare',
+ 'macglov', 'macr2lst', 'macr2tree', 'macro', 'macrovar', 'mad', 'make_graph', 'make_index', 'makecell', 'man',
+ 'manedit', 'mapsound', 'markp2ss', 'mat_2_graph', 'matfile2sci', 'Matlab-Scilab_character_strings', 'Matplot',
+ 'Matplot_properties', 'Matplot1', 'matrices', 'matrix', 'max', 'max_cap_path', 'max_clique', 'max_flow',
+ 'maxi', 'mcisendstring', 'mclearerr', 'mclose', 'mdelete', 'mean', 'meanf', 'median', 'menus', 'meof',
+ 'merror', 'mese', 'mesh', 'mesh2d', 'meshgrid', 'mfft', 'mfile2sci', 'mfprintf', 'mfscanf', 'mget', 'mgeti',
+ 'mgetl', 'mgetstr', 'milk_drop', 'min', 'min_lcost_cflow', 'min_lcost_flow1', 'min_lcost_flow2',
+ 'min_qcost_flow', 'min_weight_tree', 'mine', 'mini', 'minreal', 'minss', 'minus', 'mkdir', 'mlist', 'mode',
+ 'modulo', 'moment', 'mopen', 'move', 'mprintf', 'mps2linpro', 'mput', 'mputl', 'mputstr', 'mrfit', 'mscanf',
+ 'msd', 'mseek', 'msprintf', 'msscanf', 'mstr2sci', 'mtell', 'mtlb_0', 'mtlb_a', 'mtlb_all', 'mtlb_any',
+ 'mtlb_axis', 'mtlb_beta', 'mtlb_box', 'mtlb_close', 'mtlb_colordef', 'mtlb_conv', 'mtlb_cumprod', 'mtlb_cumsum',
+ 'mtlb_dec2hex', 'mtlb_delete', 'mtlb_diag', 'mtlb_diff', 'mtlb_dir', 'mtlb_double', 'mtlb_e', 'mtlb_echo',
+ 'mtlb_eig', 'mtlb_eval', 'mtlb_exist', 'mtlb_eye', 'mtlb_false', 'mtlb_fft', 'mtlb_fftshift', 'mtlb_find',
+ 'mtlb_findstr', 'mtlb_fliplr', 'mtlb_fopen', 'mtlb_format', 'mtlb_fprintf', 'mtlb_fread', 'mtlb_fscanf',
+ 'mtlb_full', 'mtlb_fwrite', 'mtlb_grid', 'mtlb_hold', 'mtlb_i', 'mtlb_ifft', 'mtlb_imp', 'mtlb_int16',
+ 'mtlb_int32', 'mtlb_int8', 'mtlb_is', 'mtlb_isa', 'mtlb_isfield', 'mtlb_isletter', 'mtlb_isspace', 'mtlb_l',
+ 'mtlb_legendre', 'mtlb_linspace', 'mtlb_load', 'mtlb_logic', 'mtlb_logical', 'mtlb_lower', 'mtlb_max',
+ 'mtlb_min', 'mtlb_mode', 'mtlb_more', 'mtlb_num2str', 'mtlb_ones', 'mtlb_plot', 'mtlb_prod', 'mtlb_rand',
+ 'mtlb_randn', 'mtlb_rcond', 'mtlb_realmax', 'mtlb_realmin', 'mtlb_repmat', 'mtlb_s', 'mtlb_save',
+ 'mtlb_setstr', 'mtlb_size', 'mtlb_sort', 'mtlb_sparse', 'mtlb_strcmp', 'mtlb_strcmpi', 'mtlb_strfind',
+ 'mtlb_strrep', 'mtlb_sum', 'mtlb_t', 'mtlb_toeplitz', 'mtlb_tril', 'mtlb_triu', 'mtlb_true', 'mtlb_uint16',
+ 'mtlb_uint32', 'mtlb_uint8', 'mtlb_upper', 'mtlb_zeros', 'mu2lin', 'mucomp', 'mulf', 'mvvacov', 'name2rgb',
+ 'names', 'nancumsum', 'nand2mean', 'nanmax', 'nanmean', 'nanmeanf', 'nanmedian', 'nanmin', 'nanstdev',
+ 'nansum', 'narsimul', 'NDcost', 'ndgrid', 'ndims', 'nearfloat', 'nehari', 'neighbors', 'netclose', 'netwindow',
+ 'netwindows', 'new', 'newaxes', 'newest', 'newfun', 'nextpow2', 'nf3d', 'nfreq', 'nlev', 'nnz', 'node_number',
+ 'nodes_2_path', 'nodes_degrees', 'noisegen', 'norm', 'not', 'null', 'number_properties', 'numdiff', 'numer',
+ 'nyquist', 'object_editor', 'obs_gram', 'obscont', 'obscont1', 'observer', 'obsv_mat', 'obsvss', 'ode',
+ 'ode_discrete', 'ode_optional_output', 'ode_root', 'odedc', 'odeoptions', 'oemtochar', 'old_style',
+ 'oldbesseli', 'oldbesselj', 'oldbesselk', 'oldbessely', 'oldload', 'oldplot', 'oldsave', 'ones',
+ 'Operation', 'optim', 'or', 'orth', 'overloading', 'p_margin', 'param3d', 'param3d_properties',
+ 'param3d1', 'paramfplot2d', 'parents', 'parrot', 'part', 'path_2_nodes', 'pathconvert', 'pause', 'pbig',
+ 'pca', 'pcg', 'pdiv', 'pen2ea', 'pencan', 'penlaur', 'percent', 'perctl', 'perfect_match', 'perl',
+ 'perms', 'permute', 'pertrans', 'pfss', 'phasemag', 'phc', 'pie', 'pinv', 'pipe_network', 'playsnd', 'plot',
+ 'plot_graph', 'plot2d', 'plot2d_old_version', 'plot2d1', 'plot2d2', 'plot2d3', 'plot2d4', 'plot3d',
+ 'plot3d_old_version', 'plot3d1', 'plot3d2', 'plot3d3', 'plotframe', 'plotprofile', 'plus', 'plzr',
+ 'pmodulo', 'pol2des', 'pol2str', 'pol2tex', 'polar', 'polarplot', 'polfact', 'poly', 'polyline_properties',
+ 'portr3d', 'portrait', 'power', 'ppol', 'prbs_a', 'predecessors', 'predef', 'print', 'printf',
+ 'printf_conversion', 'printing', 'printsetupbox', 'prod', 'profile', 'progressionbar', 'proj', 'projsl',
+ 'projspec', 'psmall', 'pspect', 'pvm', 'pvm_addhosts', 'pvm_barrier', 'pvm_bcast', 'pvm_bufinfo', 'pvm_config',
+ 'pvm_delhosts', 'pvm_error', 'pvm_exit', 'pvm_f772sci', 'pvm_get_timer', 'pvm_getinst', 'pvm_gettid',
+ 'pvm_gsize', 'pvm_halt', 'pvm_joingroup', 'pvm_kill', 'pvm_lvgroup', 'pvm_mytid', 'pvm_parent', 'pvm_probe',
+ 'pvm_recv', 'pvm_reduce', 'pvm_sci2f77', 'pvm_send', 'pvm_set_timer', 'pvm_spawn', 'pvm_spawn_independent',
+ 'pvm_start', 'pvm_tasks', 'pvm_tidtohost', 'pvmd3', 'pwd', 'qassign', 'qld', 'qmr', 'qr', 'quapro', 'quart',
+ 'quaskro', 'quit', 'quote', 'rand', 'randpencil', 'range', 'rank', 'rankqr', 'rat', 'rcond',
+ 'rdivf', 'read', 'read4b', 'readb', 'readc_', 'readmps', 'readxls', 'real', 'realtime', 'realtimeinit',
+ 'rectangle_properties', 'recur', 'reglin', 'regress', 'remez', 'remezb', 'repfreq', 'replot', 'resethistory',
+ 'residu', 'resume', 'return', 'rgb2name', 'ric_desc', 'ricc', 'riccati', 'rlist', 'rmdir', 'roots', 'rotate',
+ 'round', 'routh_t', 'rowcomp', 'rowcompr', 'rowinout', 'rowregul', 'rowshuff', 'rpem', 'rref', 'rtitr',
+ 'rubberbox', 'salesman', 'sample', 'samplef', 'samwr', 'save', 'save_format', 'save_graph', 'savehistory',
+ 'savematfile', 'savewave', 'sca', 'scaling', 'scanf', 'scanf_conversion', 'scf', 'schur', 'sci_files',
+ 'sci2exp', 'sci2for', 'sci2map', 'sciargs', 'SciComplex', 'SciComplexArray', 'SciDouble', 'SciDoubleArray',
+ 'scilab', 'Scilab', 'ScilabEval', 'scilink', 'scipad', 'SciString', 'SciStringArray', 'sd2sci', 'sda', 'sdf',
+ 'secto3d', 'segs_properties', 'semi', 'semicolon', 'semidef', 'sensi', 'set', 'set_posfig_dim',
+ 'setbpt', 'setdiff', 'setenv', 'seteventhandler', 'setfield', 'sethomedirectory', 'setlanguage', 'setmenu',
+ 'sfact', 'Sfgrayplot', 'Sgrayplot', 'sgrid', 'shortest_path', 'show_arcs', 'show_graph', 'show_nodes',
+ 'show_pixmap', 'showprofile', 'sident', 'sign', 'Signal', 'signm', 'simp', 'simp_mode', 'sin', 'sinc',
+ 'sincd', 'sinh', 'sinhm', 'sinm', 'size', 'slash', 'sleep', 'sm2des', 'sm2ss', 'smooth', 'solve',
+ 'sorder', 'sort', 'sound', 'soundsec', 'sp2adj', 'spaninter', 'spanplus', 'spantwo', 'spchol',
+ 'spcompack', 'spec', 'specfact', 'speye', 'spget', 'splin', 'splin2d', 'splin3d', 'split_edge', 'spones',
+ 'sprand', 'sprintf', 'spzeros', 'sqroot', 'sqrt', 'sqrtm', 'square', 'squarewave', 'srfaur', 'srkf', 'ss2des',
+ 'ss2ss', 'ss2tf', 'sscanf', 'sskf', 'ssprint', 'ssrand', 'st_deviation', 'st_ility', 'stabil', 'stacksize',
+ 'star', 'startup', 'stdev', 'stdevf', 'str2code', 'strange', 'strcat', 'strindex', 'string', 'stringbox',
+ 'strings', 'stripblanks', 'strong_con_nodes', 'strong_connex', 'strsplit', 'strsubst', 'struct', 'sub2ind',
+ 'subf', 'subgraph', 'subplot', 'successors', 'sum', 'supernode', 'surf', 'surface_properties', 'sva',
+ 'svd', 'svplot', 'sylm', 'sylv', 'symbols', 'sysconv', 'sysdiag', 'sysfact', 'syslin', 'syssize', 'system',
+ 'systems', 'systmat', 'tabul', 'tan', 'tangent', 'tanh', 'tanhm', 'tanm', 'TCL_CreateSlave', 'TCL_DeleteInterp',
+ 'TCL_EvalFile', 'TCL_EvalStr', 'TCL_ExistInterp', 'TCL_ExistVar', 'TCL_GetVar', 'TCL_GetVersion', 'TCL_SetVar',
+ 'TCL_UnsetVar', 'TCL_UpVar', 'tdinit', 'testmatrix', 'texprint', 'text_properties', 'tf2des', 'tf2ss', 'then',
+ 'thrownan', 'tic', 'tilda', 'time_id', 'timer', 'title', 'titlepage', 'TK_EvalFile', 'TK_EvalStr', 'tk_getdir',
+ 'tk_getfile', 'TK_GetVar', 'tk_savefile', 'TK_SetVar', 'toc', 'toeplitz', 'tohome', 'tokenpos',
+ 'tokens', 'toolbar', 'toprint', 'trace', 'trans', 'trans_closure', 'translatepaths', 'tree2code', 'trfmod',
+ 'trianfml', 'tril', 'trimmean', 'trisolve', 'triu', 'try', 'trzeros', 'twinkle', 'type', 'Type', 'typename',
+ 'typeof', 'ui_observer', 'uicontrol', 'uimenu', 'uint16', 'uint32', 'uint8', 'ulink', 'unglue', 'union',
+ 'unique', 'unix', 'unix_g', 'unix_s', 'unix_w', 'unix_x', 'unobs', 'unsetmenu', 'unzoom', 'user', 'varargin',
+ 'varargout', 'Variable', 'variance', 'variancef', 'varn', 'vectorfind', 'waitbar', 'warning', 'wavread',
+ 'wavwrite', 'wcenter', 'wfir', 'what', 'where', 'whereami', 'whereis', 'who', 'who_user', 'whos',
+ 'wiener', 'wigner', 'winclose', 'window', 'winlist', 'winopen', 'winqueryreg', 'winsid', 'with_atlas',
+ 'with_gtk', 'with_javasci', 'with_pvm', 'with_texmacs', 'with_tk', 'writb', 'write', 'write4b', 'x_choices',
+ 'x_choose', 'x_dialog', 'x_matrix', 'x_mdialog', 'x_message', 'x_message_modeless', 'xarc', 'xarcs', 'xarrows',
+ 'xaxis', 'xbasc', 'xbasimp', 'xbasr', 'xchange', 'xclea', 'xclear', 'xclick', 'xclip', 'xdel', 'xend',
+ 'xfarc', 'xfarcs', 'xfpoly', 'xfpolys', 'xfrect', 'xget', 'xgetech', 'xgetfile', 'xgetmouse', 'xgraduate',
+ 'xgrid', 'xinfo', 'xinit', 'xlfont', 'xload', 'xls_open', 'xls_read', 'xmltohtml', 'xname', 'xnumb', 'xpause',
+ 'xpoly', 'xpolys', 'xrect', 'xrects', 'xrpoly', 'xs2bmp', 'xs2emf', 'xs2eps', 'xs2fig', 'xs2gif', 'xs2ppm',
+ 'xs2ps', 'xsave', 'xsegs', 'xselect', 'xset', 'xsetech', 'xsetm', 'xstring', 'xstringb', 'xstringl', 'xtape',
+ 'xtitle', 'yulewalk', 'zeropen', 'zeros', 'zgrid', 'zoom_rect', 'zpbutt', 'zpch1', 'zpch2', 'zpell'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '<', '>', '=',
+ '!', '@', '~', '&', '|',
+ '+','-', '*', '/', '%',
+ ',', ';', '?', ':', "'"
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => true,
+ 1 => true,
+ 2 => true,
+ 3 => true,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #b1b100;',
+ 2 => 'color: #000000; font-weight: bold;',
+ 3 => 'color: #000066;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #666666; font-style: italic;',
+ 2 => '',
+ 'MULTI' => 'color: #666666; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;',
+ 'HARD' => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #009900;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;',
+ 'HARD' => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #006600;',
+ 2 => 'color: #006600;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #339933;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #0000ff;',
+ 4 => 'color: #009999;',
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => 'http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm',
+ 2 => 'http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm',
+ 3 => 'http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm'
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '-&gt;',
+ 2 => '::'
+ ),
+ 'REGEXPS' => array(
+ //Variable
+ 0 => '[\\$%@]+[a-zA-Z_][a-zA-Z0-9_]*',
+ //File Descriptor
+ 4 => '&lt;[a-zA-Z_][a-zA-Z0-9_]*&gt;',
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/sdlbasic.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/sdlbasic.php
new file mode 100644
index 000000000..b756df514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/sdlbasic.php
@@ -0,0 +1,165 @@
+<?php
+/*************************************************************************************
+ * sdlbasic.php
+ * ------------
+ * Author: Roberto Rossi
+ * Copyright: (c) 2005 Roberto Rossi (http://rsoftware.altervista.org)
+ * Release Version: 1.0.8.4
+ * Date Started: 2005/08/19
+ *
+ * sdlBasic (http://sdlbasic.sf.net) language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2005/08/19 (1.0.0)
+ * - First Release
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'sdlBasic',
+ 'COMMENT_SINGLE' => array(1 => "'", 2 => "rem", 3 => "!", 4 => "#"),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'const', 'option', 'explicit', 'qbasic', 'include', 'argc',
+ 'argv', 'command', 'command$', 'run', 'shell', 'os', 'declare',
+ 'sub', 'function', 'return', 'while', 'wend', 'exit', 'end',
+ 'continue', 'if', 'then', 'else', 'elseif',
+ 'select', 'case', 'for', 'each', 'step',
+ 'next', 'to', 'dim', 'shared', 'common', 'lbound', 'bound',
+ 'erase', 'asc', 'chr', 'chr$', 'insert', 'insert$', 'instr', 'lcase',
+ 'lcase$', 'left', 'left$', 'len', 'length', 'ltrim', 'ltrim$', 'mid',
+ 'mid$', 'replace', 'replace$', 'replacesubstr', 'replacesubstr$',
+ 'reverse', 'reverse$', 'right', 'right$', 'rinstr', 'rtrim', 'rtrim$',
+ 'space', 'space$', 'str', 'str$', 'strf', 'strf$', 'string', 'string$',
+ 'tally', 'trim', 'trim$', 'typeof', 'typeof$', 'ucase', 'ucase$', 'val',
+ 'abs', 'acos', 'andbit', 'asin', 'atan', 'bitwiseand', 'bitwiseor',
+ 'bitwisexor', 'cos', 'exp', 'fix', 'floor', 'frac', 'hex', 'hex$', 'int',
+ 'log', 'min', 'max', 'orbit', 'randomize', 'rnd', 'round', 'sgn', 'sin',
+ 'sqr', 'tan', 'xorbit', 'open', 'as', 'file', 'input', 'close', 'output',
+ 'append', 'eof', 'fileexists', 'filecopy', 'filemove', 'filerename',
+ 'freefile', 'kill', 'loc', 'lof', 'readbyte', 'rename', 'seek',
+ 'writebyte', 'chdir', 'dir', 'dir$', 'direxists', 'dirfirst', 'dirnext',
+ 'mkdir', 'rmdir', 'print', 'date', 'date$', 'time', 'time$', 'ticks',
+ 'data', 'read', 'reservebank', 'freebank', 'copybank', 'loadbank',
+ 'savebank', 'setbank', 'sizebank', 'poke', 'doke', 'loke', 'peek', 'deek',
+ 'leek', 'memcopy', 'setdisplay', 'setcaption', 'caption', 'displaywidth',
+ 'displayheight', 'displaybpp', 'screen', 'directscreen', 'screenopen',
+ 'screenclose', 'screenclone', 'screencopy', 'screenfade', 'screenfadein',
+ 'screencrossfade', 'screenalpha', 'screenlock', 'screenunlock',
+ 'screenrect', 'xscreenrect', 'yscreenrect', 'wscreenrect', 'hscreenrect',
+ 'flagscreenrect', 'screenwidth', 'screenheight', 'offset', 'xoffset',
+ 'yoffset', 'cls', 'screenswap', 'autoback', 'setautoback',
+ 'dualplayfield', 'waitvbl', 'fps', 'rgb', 'enablepalette', 'color',
+ 'palette', 'colorcycling', 'ink', 'point', 'dot', 'plot', 'line', 'box',
+ 'bar', 'circle', 'fillcircle', 'ellipse', 'fillellipse', 'paint',
+ 'loadimage', 'saveimage', 'loadsound', 'savesound', 'loadmusic',
+ 'hotspot', 'setcolorkey', 'imageexists', 'imagewidth', 'imageheight',
+ 'deleteimage', 'copyimage', 'setalpha', 'zoomimage', 'rotateimage',
+ 'rotozoomimage', 'blt', 'pastebob', 'pasteicon', 'grab', 'spriteclip',
+ 'sprite', 'deletesprite', 'xsprite', 'ysprite', 'spritewidth',
+ 'spriteheight', 'frsprite', 'livesprite', 'spritehit', 'autoupdatesprite',
+ 'updatesprite', 'setbob', 'bob', 'deletebob', 'xbob', 'ybob', 'bobwidth',
+ 'bobheight', 'frbob', 'livebob', 'bobhit', 'autoupdatebob', 'updatebob',
+ 'text', 'setfont', 'textrender', 'pen', 'paper', 'prints', 'locate',
+ 'atx', 'aty', 'curson', 'cursoff', 'inputs', 'zoneinputs',
+ 'isenabledsound', 'soundexists', 'deletesound', 'copysound',
+ 'musicexists', 'playsound', 'volumesound', 'stopsound', 'pausesound',
+ 'resumesound', 'vumetersound', 'positionsound', 'soundchannels',
+ 'playmusic', 'positionmusic', 'stopmusic', 'fademusic', 'pausemusic',
+ 'resumemusic', 'rewindmusic', 'volumemusic', 'speedmusic', 'numdrivescd',
+ 'namecd', 'getfreecd', 'opencd', 'indrivecd', 'trackscd', 'curtrackcd',
+ 'curframecd', 'playcd', 'playtrackscd',
+ 'pausecd', 'resumecd', 'stopcd', 'ejectcd', 'closecd', 'tracktypecd',
+ 'tracklengthcd', 'trackoffsetcd', 'key', 'inkey', 'waitkey', 'xmouse',
+ 'ymouse', 'xmousescreen', 'ymousescreen', 'bmouse', 'changemouse',
+ 'locatemouse', 'mouseshow', 'mousehide', 'mousezone', 'numjoysticks',
+ 'namejoystick', 'numaxesjoystick', 'numballsjoystick', 'numhatsjoystick',
+ 'numbuttonsjoystick', 'getaxisjoystick', 'gethatjoystick',
+ 'getbuttonjoystick', 'xgetballjoystick', 'ygetballjoystick', 'joy',
+ 'bjoy', 'wait', 'timer', 'isenabledsock', 'getfreesock', 'opensock',
+ 'acceptsock', 'isserverready', 'connectsock', 'connectionreadysock',
+ 'isclientready', 'losesock', 'peeksock', 'readsock', 'readbytesock',
+ 'readlinesock', 'writesock', 'writebytesock', 'writelinesock',
+ 'getremoteip', 'getremoteport', 'getlocalip'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #b1b100;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080;',
+ 2 => 'color: #808080;',
+ 3 => 'color: #808080;',
+ 4 => 'color: #808080;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099;'
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/smalltalk.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/smalltalk.php
new file mode 100644
index 000000000..b4d67cc71
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/smalltalk.php
@@ -0,0 +1,160 @@
+<?php
+/*************************************************************************************
+ * smalltalk.php
+ * --------
+ * Author: Bananeweizen (Bananeweizen@gmx.de)
+ * Copyright: (c) 2005 Bananeweizen (www.bananeweizen.de)
+ * Release Version: 1.0.8.4
+ * Date Started: 2005/03/27
+ *
+ * Smalltalk language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2006-05-24 (1.0.0)
+ * - First Release
+ *
+ * TODO
+ * -------------------------
+ * * recognize nested array symbols correctly
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Smalltalk',
+ 'COMMENT_SINGLE' => array(),
+ 'COMMENT_MULTI' => array('"' => '"'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'"),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ 1 => array('self','super','true','false','nil')
+ ),
+ 'SYMBOLS' => array(
+ '[', ']', '=' , ':=', '(', ')', '#'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #7f007f;'
+ ),
+ 'COMMENTS' => array(
+ 'MULTI' => 'color: #007f00; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => ''
+ ),
+ 'BRACKETS' => array(
+ 0 => ''
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #7f0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #7f0000;'
+ ),
+ 'METHODS' => array(
+ 0 => ''
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #000066; font-weight:bold;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #0000ff;',
+ 1 => 'color: #7f0000;',
+ 2 => 'color: #7f0000;',
+ 3 => 'color: #00007f;',
+ 4 => 'color: #7f007f;',
+ 5 => 'color: #00007f;',
+ 6 => 'color: #00007f;'
+ ),
+ 'SCRIPT' => array(
+ 0 => ''
+ )
+ ),
+ 'URLS' => array(
+ 1 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ 0 => array(
+ GESHI_SEARCH => '([^a-zA-Z0-9_#<])([A-Z]+[a-zA-Z0-9_]*)(?!>)', //class names
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => ''
+ ),
+ 1 => array(
+ GESHI_SEARCH => '(#+)([a-zA-Z0-9_]+)', //symbols
+ GESHI_REPLACE => '\\1\\2',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
+ ),
+ 2 => array(
+ GESHI_SEARCH => '(#\s*\([^)]*\))', //array symbols
+ GESHI_REPLACE => '\\1',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
+ ),
+ 3 => array(
+ GESHI_SEARCH => '<PIPE>([a-zA-Z0-9_\s]+)<PIPE>', //temporary variables
+ GESHI_REPLACE => '\\1',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '|',
+ GESHI_AFTER => '|'
+ ),
+ 4 => array(
+ GESHI_SEARCH => '(self|super|true|false|nil)', //keywords again (to avoid matching in next regexp)
+ GESHI_REPLACE => '\\1',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
+ ),
+ 5 => array(
+ GESHI_SEARCH => '([:(,=[.*\/+-]\s*)([a-zA-Z0-9_]+)', //message parameters, message receivers
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => 's',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => ''
+ ),
+ 6 => array(
+ GESHI_SEARCH => '([a-zA-Z0-9_]+)(\s*:=)', //assignment targets
+ GESHI_REPLACE => '\\1',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => '\\2'
+ )
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/smarty.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/smarty.php
new file mode 100644
index 000000000..dcc11f61d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/smarty.php
@@ -0,0 +1,192 @@
+<?php
+/*************************************************************************************
+ * smarty.php
+ * ----------
+ * Author: Alan Juden (alan@judenware.org)
+ * Copyright: (c) 2004 Alan Juden, Nigel McNie (http://qbnz.com/highlighter/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/07/10
+ *
+ * Smarty template language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2004/11/27 (1.0.0)
+ * - Initial Release
+ *
+ * TODO
+ * ----
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Smarty',
+ 'COMMENT_SINGLE' => array(),
+ 'COMMENT_MULTI' => array('{*' => '*}'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ '$smarty', 'now', 'const', 'capture', 'config', 'section', 'foreach', 'template', 'version', 'ldelim', 'rdelim',
+ 'foreachelse', 'include', 'include_php', 'insert', 'if', 'elseif', 'else', 'php',
+ 'sectionelse', 'is_cached',
+ ),
+ 2 => array(
+ 'capitalize', 'count_characters', 'cat', 'count_paragraphs', 'count_sentences', 'count_words', 'date_format',
+ 'default', 'escape', 'indent', 'lower', 'nl2br', 'regex_replace', 'replace', 'spacify', 'string_format',
+ 'strip', 'strip_tags', 'truncate', 'upper', 'wordwrap',
+ ),
+ 3 => array(
+ 'counter', 'cycle', 'debug', 'eval', 'html_checkboxes', 'html_image', 'html_options',
+ 'html_radios', 'html_select_date', 'html_select_time', 'html_table', 'math', 'mailto', 'popup_init',
+ 'popup', 'textformat'
+ ),
+ 4 => array(
+ '$template_dir', '$compile_dir', '$config_dir', '$plugins_dir', '$debugging', '$debug_tpl',
+ '$debugging_ctrl', '$autoload_filters', '$compile_check', '$force_compile', '$caching', '$cache_dir',
+ '$cache_lifetime', '$cache_handler_func', '$cache_modified_check', '$config_overwrite',
+ '$config_booleanize', '$config_read_hidden', '$config_fix_newlines', '$default_template_handler_func',
+ '$php_handling', '$security', '$secure_dir', '$security_settings', '$trusted_dir', '$left_delimiter',
+ '$right_delimiter', '$compiler_class', '$request_vars_order', '$request_use_auto_globals',
+ '$error_reporting', '$compile_id', '$use_sub_dirs', '$default_modifiers', '$default_resource_type'
+ ),
+ 5 => array(
+ 'append', 'append_by_ref', 'assign', 'assign_by_ref', 'clear_all_assign', 'clear_all_cache',
+ 'clear_assign', 'clear_cache', 'clear_compiled_tpl', 'clear_config', 'config_load', 'display',
+ 'fetch', 'get_config_vars', 'get_registered_object', 'get_template_vars',
+ 'load_filter', 'register_block', 'register_compiler_function', 'register_function',
+ 'register_modifier', 'register_object', 'register_outputfilter', 'register_postfilter',
+ 'register_prefilter', 'register_resource', 'trigger_error', 'template_exists', 'unregister_block',
+ 'unregister_compiler_function', 'unregister_function', 'unregister_modifier', 'unregister_object',
+ 'unregister_outputfilter', 'unregister_postfilter', 'unregister_prefilter', 'unregister_resource'
+ ),
+ 6 => array(
+ 'name', 'file', 'scope', 'global', 'key', 'once', 'script',
+ 'loop', 'start', 'step', 'max', 'show', 'values', 'value', 'from', 'item'
+ ),
+ 7 => array(
+ 'eq', 'neq', 'ne', 'lte', 'gte', 'ge', 'le', 'not', 'mod'
+ ),
+ 8 => array(
+ // some common php functions
+ 'isset', 'is_array', 'empty', 'count', 'sizeof'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '/', '=', '==', '!=', '>', '<', '>=', '<=', '!', '%'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false,
+ 6 => false,
+ 7 => false,
+ 8 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #0600FF;', //Functions
+ 2 => 'color: #008000;', //Modifiers
+ 3 => 'color: #0600FF;', //Custom Functions
+ 4 => 'color: #804040;', //Variables
+ 5 => 'color: #008000;', //Methods
+ 6 => 'color: #6A0A0A;', //Attributes
+ 7 => 'color: #D36900;', //Text-based symbols
+ 8 => 'color: #0600FF;' //php functions
+ ),
+ 'COMMENTS' => array(
+ 'MULTI' => 'color: #008080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #D36900;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #006600;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #D36900;'
+ ),
+ 'SCRIPT' => array(
+ 0 => '',
+ 1 => 'color: #808080; font-style: italic;',
+ 2 => 'color: #009000;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #00aaff;'
+ )
+ ),
+ 'URLS' => array(
+ 1 => 'http://smarty.php.net/{FNAMEL}',
+ 2 => 'http://smarty.php.net/{FNAMEL}',
+ 3 => 'http://smarty.php.net/{FNAMEL}',
+ 4 => 'http://smarty.php.net/{FNAMEL}',
+ 5 => 'http://smarty.php.net/{FNAMEL}',
+ 6 => '',
+ 7 => 'http://smarty.php.net/{FNAMEL}',
+ 8 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ // variables
+ 0 => '\$[a-zA-Z][a-zA-Z0-9_]*'
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_ALWAYS,
+ 'SCRIPT_DELIMITERS' => array(
+ 0 => array(
+ '{' => '}'
+ ),
+ 1 => array(
+ '<!--' => '-->',
+ ),
+ 2 => array(
+ '<' => '>'
+ )
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ 0 => true,
+ 1 => false,
+ 2 => false
+ ),
+ 'PARSER_CONTROL' => array(
+ 'KEYWORDS' => array(
+ 'DISALLOWED_BEFORE' => "(?<![a-zA-Z0-9\$_\|\#;>|^])",
+ 'DISALLOWED_AFTER' => "(?![a-zA-Z0-9_<\|%\\-&])"
+ )
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/sql.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/sql.php
new file mode 100644
index 000000000..ba91191d1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/sql.php
@@ -0,0 +1,140 @@
+<?php
+/*************************************************************************************
+ * sql.php
+ * -------
+ * Author: Nigel McNie (nigel@geshi.org)
+ * Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/06/04
+ *
+ * SQL language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added additional symbols for highlighting
+ * 2004/11/27 (1.0.3)
+ * - Added support for multiple object splitters
+ * 2004/10/27 (1.0.2)
+ * - Added "`" string delimiter
+ * - Added "#" single comment starter
+ * 2004/08/05 (1.0.1)
+ * - Added support for symbols
+ * - Added many more keywords (mostly MYSQL keywords)
+ * 2004/07/14 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ * * Add all keywords
+ * * Split this to several sql files - mysql-sql, ansi-sql etc
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'SQL',
+ 'COMMENT_SINGLE' => array(1 =>'--', 2 => '#'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'CASE_KEYWORDS' => 1,
+ 'QUOTEMARKS' => array("'", '"', '`'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'ADD', 'ALL', 'ALTER', 'AND', 'AS', 'ASC',
+ 'AUTO_INCREMENT', 'BETWEEN', 'BINARY', 'BOOLEAN',
+ 'BOTH', 'BY', 'CHANGE', 'CHECK', 'COLUMN', 'COLUMNS',
+ 'CREATE', 'CROSS', 'DATA', 'DATABASE', 'DATABASES',
+ 'DEFAULT', 'DELAYED', 'DELETE', 'DESC', 'DESCRIBE',
+ 'DISTINCT', 'DROP', 'ENCLOSED', 'ESCAPED', 'EXISTS',
+ 'EXPLAIN', 'FIELD', 'FIELDS', 'FLUSH', 'FOR',
+ 'FOREIGN', 'FROM', 'FULL', 'FUNCTION', 'GRANT',
+ 'GROUP', 'HAVING', 'IDENTIFIED', 'IF', 'IGNORE',
+ 'IN', 'INDEX', 'INFILE', 'INNER', 'INSERT', 'INTO',
+ 'IS', 'JOIN', 'KEY', 'KEYS', 'KILL', 'LANGUAGE',
+ 'LEADING', 'LEFT', 'LIKE', 'LIMIT', 'LINES', 'LOAD',
+ 'LOCAL', 'LOCK', 'LOW_PRIORITY', 'MODIFY', 'NATURAL',
+ 'NEXTVAL', 'NOT', 'NULL', 'ON', 'OPTIMIZE', 'OPTION',
+ 'OPTIONALLY', 'OR', 'ORDER', 'OUTER', 'OUTFILE',
+ 'PRIMARY', 'PROCEDURAL', 'PROCEEDURE', 'READ',
+ 'REFERENCES', 'REGEXP', 'RENAME', 'REPLACE',
+ 'RETURN', 'REVOKE', 'RIGHT', 'RLIKE', 'SELECT',
+ 'SET', 'SETVAL', 'SHOW', 'SONAME', 'STATUS',
+ 'STRAIGHT_JOIN', 'TABLE', 'TABLES', 'TEMINATED',
+ 'TEMPORARY', 'TO', 'TRAILING', 'TRIGGER', 'TRUNCATE',
+ 'TRUSTED', 'UNION', 'UNIQUE', 'UNLOCK', 'UNSIGNED',
+ 'UPDATE', 'USE', 'USING', 'VALUES', 'VARIABLES',
+ 'VIEW', 'WHERE', 'WITH', 'WRITE', 'XOR', 'ZEROFILL'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '=', '<', '>', '|', ',', '.', '+', '-', '*', '/'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #993333; font-weight: bold;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080; font-style: italic;',
+ 2 => 'color: #808080; font-style: italic;',
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/tcl.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/tcl.php
new file mode 100644
index 000000000..25cb31d5b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/tcl.php
@@ -0,0 +1,194 @@
+<?php
+/*************************************************************************************
+ * tcl.php
+ * ---------------------------------
+ * Author: Reid van Melle (rvanmelle@gmail.com)
+ * Copyright: (c) 2004 Reid van Melle (sorry@nowhere)
+ * Release Version: 1.0.8.4
+ * Date Started: 2006/05/05
+ *
+ * TCL/iTCL language file for GeSHi.
+ *
+ * This was thrown together in about an hour so I don't expect
+ * really great things. However, it is a good start. I never
+ * got a change to try out the iTCL or object-based support but
+ * this is not widely used anyway.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * 2006/05/05 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2006/05/05)
+ * -------------------------
+ * - Get TCL built-in special variables highlighted with a new color..
+ * currently, these are listed in //special variables in the keywords
+ * section, but they get covered by the general REGEXP for symbols
+ * - General cleanup, testing, and verification
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'TCL',
+ 'COMMENT_SINGLE' => array(1 => '#'),
+ 'COMMENT_MULTI' => array(),
+ 'COMMENT_REGEXP' => array(
+ 1 => '/(?<!\\\\)#(?:\\\\\\\\|\\\\\\n|.)*$/m',
+ 2 => '/{[^}\n]+}/'
+ ),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"', "'"),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ /*
+ * Set 1: reserved words
+ * http://python.org/doc/current/ref/keywords.html
+ */
+ 1 => array(
+ 'proc', 'global', 'upvar', 'if', 'then', 'else', 'elseif', 'for', 'foreach',
+ 'break', 'continue', 'while', 'set', 'eval', 'case', 'in', 'switch',
+ 'default', 'exit', 'error', 'return', 'uplevel', 'loop',
+ 'for_array_keys', 'for_recursive_glob', 'for_file', 'unwind_protect',
+ 'expr', 'catch', 'namespace', 'rename', 'variable',
+ // itcl
+ 'method', 'itcl_class', 'public', 'protected'),
+
+ /*
+ * Set 2: builtins
+ * http://asps.activatestate.com/ASPN/docs/ActiveTcl/8.4/tcl/tcl_2_contents.htm
+ */
+ 2 => array(
+ // string handling
+ 'append', 'binary', 'format', 're_syntax', 'regexp', 'regsub',
+ 'scan', 'string', 'subst',
+ // list handling
+ 'concat', 'join', 'lappend', 'lindex', 'list', 'llength', 'lrange',
+ 'lreplace', 'lsearch', 'lset', 'lsort', 'split',
+ // procedures and output
+ 'incr', 'close', 'eof', 'fblocked', 'fconfigure', 'fcopy', 'file',
+ 'fileevent', 'flush', 'gets', 'open', 'puts', 'read', 'seek',
+ 'socket', 'tell',
+ // packages and source files
+ 'load', 'loadTk', 'package', 'pgk::create', 'pgk_mkIndex', 'source',
+ // interpreter routines
+ 'bgerror', 'history', 'info', 'interp', 'memory', 'unknown',
+ // library routines
+ 'enconding', 'http', 'msgcat',
+ // system related
+ 'cd', 'clock', 'exec', 'glob', 'pid', 'pwd', 'time',
+ // platform specified
+ 'dde', 'registry', 'resource',
+ // special variables
+ '$argc', '$argv', '$errorCode', '$errorInfo', '$argv0',
+ '$auto_index', '$auto_oldpath', '$auto_path', '$env',
+ '$tcl_interactive', '$tcl_libpath', '$tcl_library',
+ '$tcl_pkgPath', '$tcl_platform', '$tcl_precision', '$tcl_traceExec',
+ ),
+
+ /*
+ * Set 3: standard library
+ */
+ 3 => array(
+ 'comment', 'filename', 'library', 'packagens', 'tcltest', 'tclvars',
+ ),
+
+ /*
+ * Set 4: special methods
+ */
+// 4 => array(
+// )
+
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '[', ']', '{', '}', '$', '*', '&', '%', '!', ';', '<', '>', '?'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ 2 => true,
+ 3 => true,
+// 4 => true
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #ff7700;font-weight:bold;', // Reserved
+ 2 => 'color: #008000;', // Built-ins + self
+ 3 => 'color: #dc143c;', // Standard lib
+// 4 => 'color: #0000cd;' // Special methods
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080; font-style: italic;',
+ 2 => 'color: #483d8b;',
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: black;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #483d8b;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #ff4500;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: black;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #ff3333;'
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+// 4 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '::'
+ ),
+ 'REGEXPS' => array(
+ //Special variables
+ 0 => '[\\$]+[a-zA-Z_][a-zA-Z0-9_]*',
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'PARSER_CONTROL' => array(
+ 'COMMENTS' => array(
+ 'DISALLOWED_BEFORE' => '\\'
+ )
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/teraterm.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/teraterm.php
new file mode 100644
index 000000000..5ac9f8743
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/teraterm.php
@@ -0,0 +1,317 @@
+<?php
+/*************************************************************************************
+ * teraterm.php
+ * --------
+ * Author: Boris Maisuradze (boris at logmett.com)
+ * Copyright: (c) 2008 Boris Maisuradze (http://logmett.com)
+ * Release Version: 1.0.8.4
+ * Date Started: 2008/09/26
+ *
+ * Tera Term Macro language file for GeSHi.
+ *
+ *
+ * This version of ttl.php was created for Tera Term 4.60 and LogMeTT 2.9.4.
+ * Newer versions of these application can contain additional Macro commands
+ * and/or keywords that are not listed here. The latest release of ttl.php
+ * can be downloaded from Download section of LogMeTT.com
+ *
+ * CHANGES
+ * -------
+ * 2008/09/26 (1.0.8)
+ * - First Release for Tera Term 4.60 and below.
+ *
+ * TODO (updated 2008/09/26)
+ * -------------------------
+ * *
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Tera Term Macro',
+ 'COMMENT_SINGLE' => array(1 => ';'),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ /* Commands */
+ 1 => array(
+ 'Beep',
+ 'BplusRecv',
+ 'BplusSend',
+ 'Break', // (version 4.53 or later)
+ 'Call',
+ 'CallMenu', // (version 4.56 or later)
+ 'ChangeDir',
+ 'ClearScreen',
+ 'Clipb2Var', //(version 4.46 or later)
+ 'ClosesBox',
+ 'CloseTT',
+ 'Code2Str',
+ 'Connect',
+ 'CRC32', // (version 4.60 or later)
+ 'CRC32File', // (version 4.60 or later)
+ 'CygConnect', // (version 4.57 or later)
+ 'DelPassword',
+ 'Disconnect',
+ 'Do', // (version 4.56 or later)
+ 'Else',
+ 'EnableKeyb',
+ 'End',
+ 'EndIf',
+ 'EndUntil', // (version 4.56 or later)
+ 'EndWhile',
+ 'Exec',
+ 'ExecCmnd',
+ 'Exit',
+ 'FileClose',
+ 'FileConcat',
+ 'FileCopy',
+ 'FileCreate',
+ 'FileDelete',
+ 'FileMarkPtr',
+ 'FilenameBox', //(version 4.54 or later)
+ 'FileOpen',
+ 'FileRead',
+ 'FileReadln', // (version 4.48 or later)
+ 'FileRename',
+ 'FileSearch',
+ 'FileSeek',
+ 'FileSeekBack',
+ 'FileStrSeek',
+ 'FileStrSeek2',
+ 'FileWrite',
+ 'FileWriteln',
+ 'FindOperations',
+ 'FlushRecv',
+ 'ForNext',
+ 'GetDate',
+ 'GetDir', //(version 4.46 or later)
+ 'GetEnv',
+ 'GetPassword',
+ 'GetTime',
+ 'GetTitle',
+ 'GetVer', //(version 4.58 or later)
+ 'GoTo',
+ 'If',
+ 'IfDefined', // (version 4.46 or later)
+ 'IfThenElseIf',
+ 'Include',
+ 'InputBox',
+ 'Int2Str',
+ 'KmtFinish',
+ 'KmtGet',
+ 'KmtRecv',
+ 'KmtSend',
+ 'LoadKeyMap',
+ 'LogClose',
+ 'LogOpen',
+ 'LogPause',
+ 'LogStart',
+ 'LogWrite',
+ 'Loop', // (version 4.56 or later)
+ 'MakePath',
+ 'MessageBox',
+ 'MPause', // (version 4.27 or later)
+ 'PasswordBox',
+ 'Pause',
+ 'QuickvanRecv',
+ 'QuickvanSend',
+ 'Random', //(version 4.27 or later)
+ 'Recvln',
+ 'RestoreSetup',
+ 'Return',
+ 'RotateLeft', //(version 4.54 or later)
+ 'RotateRight', //(version 4.54 or later)
+ 'ScpRecv', // (version 4.57 or later)
+ 'ScpSend', // (version 4.57 or later)
+ 'Send',
+ 'SendBreak',
+ 'SendFile',
+ 'SendKcode',
+ 'Sendln',
+ 'SetBaud', // (version 4.58 or later)
+ 'SetDate',
+ 'SetDir',
+ 'SetDlgPos',
+ 'SetDTR', // (version 4.59 or later)
+ 'SetRTS', // (version 4.59 or later)
+ 'SetEnv', // (version 4.54 or later)
+ 'SetEcho',
+ 'SetExitCode',
+ 'SetSync',
+ 'SetTime',
+ 'SetTitle',
+ 'Show',
+ 'ShowTT',
+ 'Sprintf', // (version 4.52 or later)
+ 'StatusBox',
+ 'Str2Code',
+ 'Str2Int',
+ 'StrCompare',
+ 'StrConcat',
+ 'StrCopy',
+ 'StrLen',
+ 'StrMatch', // (version 4.59 or later)
+ 'StrScan',
+ 'Testlink',
+ 'Then',
+ 'ToLower', //(version 4.53 or later)
+ 'ToUpper', //(version 4.53 or later)
+ 'Unlink',
+ 'Until', // (version 4.56 or later)
+ 'Var2Clipb', //(version 4.46 or later)
+ 'Wait',
+ 'WaitEvent',
+ 'Waitln',
+ 'WaitRecv',
+ 'WaitRegex', // (version 4.21 or later)
+ 'While',
+ 'XmodemRecv',
+ 'XmodemSend',
+ 'YesNoBox',
+ 'ZmodemRecv',
+ 'ZmodemSend'
+ ),
+ /* System Variables */
+ 2 => array(
+ 'groupmatchstr1',
+ 'groupmatchstr2',
+ 'groupmatchstr3',
+ 'groupmatchstr4',
+ 'groupmatchstr5',
+ 'groupmatchstr6',
+ 'groupmatchstr7',
+ 'groupmatchstr8',
+ 'groupmatchstr9',
+ 'inputstr',
+ 'matchstr',
+ 'param2',
+ 'param3',
+ 'param4',
+ 'param5',
+ 'param6',
+ 'param7',
+ 'param8',
+ 'param9',
+ 'result',
+ 'timeout'
+ ),
+ /* LogMeTT Key Words */
+ 3 => array(
+ '$[1]',
+ '$[2]',
+ '$[3]',
+ '$[4]',
+ '$[5]',
+ '$[6]',
+ '$[7]',
+ '$[8]',
+ '$connection$',
+ '$email$',
+ '$logdir$',
+ '$logfilename$',
+ '$logit$',
+ '$mobile$',
+ '$name$',
+ '$pager$',
+ '$parent$',
+ '$phone$',
+ '$snippet$',
+ '$ttdir$',
+ '$user$',
+ '$windir$',
+ ),
+ /* Keyword Symbols */
+ 4 => array(
+ 'and',
+ 'not',
+ 'or',
+ 'xor'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '[', ']',
+ '~', '!', '+', '-', '*', '/', '%', '>>', '<<', '<<<', '>>>', '&', '^', '|',
+ '<>', '<=', '>=', '=', '==', '<>', '!=', '&&', '||'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #000080; font-weight: bold!important;',
+ 2 => 'color: #808000; font-weight: bold;', // System Variables
+ 3 => 'color: #ff0000; font-weight: bold;', // LogMeTT Key Words
+ 4 => 'color: #ff00ff; font-weight: bold;' // Keyword Symbols
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #008000; font-style: italic;',
+ ),
+ 'ESCAPE_CHAR' => array(),
+ 'BRACKETS' => array(
+ 0 => 'color: #ff00ff; font-weight: bold;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #800080;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #008080;'
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #ff00ff; font-weight: bold;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #0000ff; font-weight: bold;'
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(),
+ 'REGEXPS' => array(
+ 0 => array (
+ GESHI_SEARCH => '(\:[_a-zA-Z][_a-zA-Z0-9]+)',
+ GESHI_REPLACE => '\\1',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
+ )
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(),
+ 'TAB_WIDTH' => 4
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/text.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/text.php
new file mode 100644
index 000000000..9183895c2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/text.php
@@ -0,0 +1,84 @@
+<?php
+/*************************************************************************************
+ * text.php
+ * --------
+ * Author: Sean Hanna (smokingrope@gmail.com)
+ * Copyright: (c) 2006 Sean Hanna
+ * Release Version: 1.0.8.4
+ * Date Started: 04/23/2006
+ *
+ * Standard Text File (No Syntax Highlighting).
+ * Plaintext language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 04/23/2006 (0.5.0)
+ * - Syntax File Created
+ *
+ * 04/27/2006 (1.0.0)
+ * - Documentation Cleaned Up
+ * - First Release
+ *
+ * TODO (updated 04/27/2006)
+ * -------------------------
+ *
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Text',
+ 'COMMENT_SINGLE' => array(),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array(),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(),
+ 'SYMBOLS' => array(),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(),
+ 'COMMENTS' => array(),
+ 'ESCAPE_CHAR' => array(),
+ 'BRACKETS' => array(),
+ 'STRINGS' => array(),
+ 'NUMBERS' => array(),
+ 'METHODS' => array(),
+ 'SYMBOLS' => array(),
+ 'SCRIPT' => array(),
+ 'REGEXPS' => array()
+ ),
+ 'URLS' => array(),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(),
+ 'REGEXPS' => array(),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(),
+ 'PARSER_CONTROL' => array(
+ 'ENABLE_FLAGS' => array(
+ 'ALL' => GESHI_NEVER
+ ),
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/thinbasic.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/thinbasic.php
new file mode 100644
index 000000000..b9c9742c7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/thinbasic.php
@@ -0,0 +1,868 @@
+<?php
+/*************************************************************************************
+ * thinbasic.php
+ * ------
+ * Author: Eros Olmi (eros.olmi@thinbasic.com)
+ * Copyright: (c) 2006 Eros Olmi (http://www.thinbasic.com), Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2006/05/12
+ *
+ * thinBasic language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2006/05/12 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2006/05/12)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'thinBasic',
+ 'COMMENT_SINGLE' => array(1 => "'"),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'XOR','XML_TREETOSTRING','XML_PARSEFILE','XML_PARSE','XML_PARENT','XML_NODETYPE','XML_NODETOSTRING','XML_NEXTSIBLING',
+ 'XML_LASTERROR','XML_GETTAG','XML_FREE','XML_FINDNODE','XML_DECODEPARAM','XML_CHILDDATA','XML_CHILD','XML_ATTRIBVALUE',
+ 'XML_ATTRIBNAME','XML_ATTRIBCOUNT','WORD','WITH','WIN_SHOW','WIN_SETTITLE','WIN_SETFOREGROUND','WIN_ISZOOMED',
+ 'WIN_ISVISIBLE','WIN_ISICONIC','WIN_GETTITLE','WIN_GETFOREGROUND','WIN_GETCLASS','WIN_GETACTIVE','WIN_FLASH','WIN_FINDBYTITLE',
+ 'WIN_FINDBYCLASS','WHILE','WEND','VERIFY','VARPTR','VARIANTVT$','VARIANTVT','VARIANT',
+ 'VARIABLE_GETINFO','VARIABLE_EXISTS','VARIABLE_EXIST','VALUE','VAL','USING$','USING','USES',
+ 'USER','UNTIL','UNITS','UNION','UNICODE2ASCII','UDP_SEND','UDP_RECV','UDP_OPENSERVER',
+ 'UDP_OPEN','UDP_FREEFILE','UDP_CLOSE','UCODE$','UCASE$','UBOUND','TYPE','TRIMFULL$',
+ 'TRIM$','TOOLTIP','TOKENIZER_MOVETOEOL','TOKENIZER_KEYSETUSERSTRING','TOKENIZER_KEYSETUSERNUMBER','TOKENIZER_KEYGETUSERSTRING','TOKENIZER_KEYGETUSERNUMBER','TOKENIZER_KEYGETSUBTYPE',
+ 'TOKENIZER_KEYGETNAME','TOKENIZER_KEYGETMAINTYPE','TOKENIZER_KEYFIND','TOKENIZER_KEYADD','TOKENIZER_GETNEXTTOKEN','TOKENIZER_DEFAULT_SET','TOKENIZER_DEFAULT_GET','TOKENIZER_DEFAULT_CODE',
+ 'TOKENIZER_DEFAULT_CHAR','TO','TIMER','TIME$','THEN','TEXTBOX','TEXT','TCP_SEND',
+ 'TCP_RECV','TCP_PRINT','TCP_OPEN','TCP_LINEINPUT','TCP_FREEFILE','TCP_CLOSE','TB_IMGCTX_SETIMAGEADJUSTMENT','TB_IMGCTX_LOADIMAGE',
+ 'TB_IMGCTX_GETIMAGEADJUSTMENT','TBGL_VIEWPORT','TBGL_VERTEX','TBGL_USETEXTUREFLAG','TBGL_USETEXTURE','TBGL_USELINESTIPPLEFLAG','TBGL_USELINESTIPPLE','TBGL_USELIGHTSOURCEFLAG',
+ 'TBGL_USELIGHTSOURCE','TBGL_USELIGHTINGFLAG','TBGL_USELIGHTING','TBGL_USEFOGFLAG','TBGL_USEFOG','TBGL_USEDEPTHMASK','TBGL_USEDEPTHFLAG','TBGL_USEDEPTH',
+ 'TBGL_USECLIPPLANEFLAG','TBGL_USECLIPPLANE','TBGL_USEBLENDFLAG','TBGL_USEBLEND','TBGL_USEALPHATEST','TBGL_TRANSLATE','TBGL_TORUS','TBGL_TEXCOORD2D',
+ 'TBGL_SPHERE','TBGL_SHOWWINDOW','TBGL_SHOWCURSOR','TBGL_SETWINDOWTITLE','TBGL_SETUPLIGHTSOURCE','TBGL_SETUPFOG','TBGL_SETUPCLIPPLANE','TBGL_SETPRIMITIVEQUALITY',
+ 'TBGL_SETLIGHTPARAMETER','TBGL_SETDRAWDISTANCE','TBGL_SCALE','TBGL_SAVESCREENSHOT','TBGL_ROTATEXYZ','TBGL_ROTATE','TBGL_RESETMATRIX','TBGL_RENDERTOTEXTURE',
+ 'TBGL_RENDERMATRIX3D','TBGL_RENDERMATRIX2D','TBGL_PUSHMATRIX','TBGL_PRINTFONT','TBGL_PRINTBMP','TBGL_PRINT','TBGL_POS3DTOPOS2D','TBGL_POPMATRIX',
+ 'TBGL_POLYGONLOOK','TBGL_POINTSIZE','TBGL_POINTINSIDE3D','TBGL_NORMAL','TBGL_NEWLIST','TBGL_MOUSEGETWHEELDELTA','TBGL_MOUSEGETRBUTTON','TBGL_MOUSEGETPOSY',
+ 'TBGL_MOUSEGETPOSX','TBGL_MOUSEGETMBUTTON','TBGL_MOUSEGETLBUTTON','TBGL_M15SETVERTEXZ','TBGL_M15SETVERTEXY','TBGL_M15SETVERTEXXYZ','TBGL_M15SETVERTEXX','TBGL_M15SETVERTEXTEXY',
+ 'TBGL_M15SETVERTEXTEXXY','TBGL_M15SETVERTEXTEXX','TBGL_M15SETVERTEXTEXN','TBGL_M15SETVERTEXRGB','TBGL_M15SETVERTEXR','TBGL_M15SETVERTEXPSTOP','TBGL_M15SETVERTEXPARAM','TBGL_M15SETVERTEXLAYER',
+ 'TBGL_M15SETVERTEXG','TBGL_M15SETVERTEXB','TBGL_M15SETMODELVERTEXCOUNT','TBGL_M15SETBONECHILD','TBGL_M15ROTBONEZ','TBGL_M15ROTBONEY','TBGL_M15ROTBONEX','TBGL_M15ROTBONE',
+ 'TBGL_M15RESETBONES','TBGL_M15RECALCNORMALS','TBGL_M15LOADMODEL','TBGL_M15INITMODELBUFFERS','TBGL_M15GETVERTEXZ','TBGL_M15GETVERTEXY','TBGL_M15GETVERTEXXYZ','TBGL_M15GETVERTEXX',
+ 'TBGL_M15GETVERTEXTEXY','TBGL_M15GETVERTEXTEXXY','TBGL_M15GETVERTEXTEXX','TBGL_M15GETVERTEXTEXN','TBGL_M15GETVERTEXRGB','TBGL_M15GETVERTEXR','TBGL_M15GETVERTEXPSTOP','TBGL_M15GETVERTEXPARAM',
+ 'TBGL_M15GETVERTEXLAYER','TBGL_M15GETVERTEXG','TBGL_M15GETVERTEXB','TBGL_M15GETMODELVERTEXCOUNT','TBGL_M15GETMODELPOLYCOUNT','TBGL_M15ERASECHILDBONES','TBGL_M15DRAWMODEL','TBGL_M15DEFBONERESET',
+ 'TBGL_M15DEFBONELAYER','TBGL_M15DEFBONEBOX','TBGL_M15DEFBONEANCHOR','TBGL_M15DEFBONEADDVERTEX','TBGL_M15CLEARMODEL','TBGL_M15APPLYBONES','TBGL_M15ADDBONETREEITEM','TBGL_LOADTEXTURE',
+ 'TBGL_LOADFONT','TBGL_LOADBMPFONT','TBGL_LINEWIDTH','TBGL_LINESTIPPLE','TBGL_KILLFONT','TBGL_ISWINDOW','TBGL_ISPOINTVISIBLE','TBGL_ISPOINTBEHINDVIEW',
+ 'TBGL_GETWINDOWMULTIKEYSTATE','TBGL_GETWINDOWKEYSTATE','TBGL_GETWINDOWKEYONCE','TBGL_GETWINDOWCLIENT','TBGL_GETTEXTURENAME','TBGL_GETTEXTURELIST','TBGL_GETPIXELINFO','TBGL_GETMULTIASYNCKEYSTATE',
+ 'TBGL_GETLASTGLERROR','TBGL_GETFRAMERATE','TBGL_GETDESKTOPINFO','TBGL_GETASYNCKEYSTATE','TBGL_ERRORMESSAGES','TBGL_ENDPOLY','TBGL_ENDLIST','TBGL_DRAWFRAME',
+ 'TBGL_DESTROYWINDOW','TBGL_DELETELIST','TBGL_CYLINDER','TBGL_CREATEWINDOWEX','TBGL_CREATEWINDOW','TBGL_COLORALPHA','TBGL_COLOR','TBGL_CLEARFRAME',
+ 'TBGL_CAMERA','TBGL_CALLLIST','TBGL_BUILDFONT','TBGL_BOX','TBGL_BLENDFUNC','TBGL_BINDTEXTURE','TBGL_BEGINPOLY','TBGL_BACKCOLOR',
+ 'TBGL_ALPHAFUNC','TBDI_JOYZ','TBDI_JOYY','TBDI_JOYX','TBDI_JOYSTOPEFFECT','TBDI_JOYSLIDER','TBDI_JOYSETRANGEZ','TBDI_JOYSETRANGEY',
+ 'TBDI_JOYSETRANGEXYZ','TBDI_JOYSETRANGEX','TBDI_JOYSETDEADZONEZ','TBDI_JOYSETDEADZONEY','TBDI_JOYSETDEADZONEXYZ','TBDI_JOYSETDEADZONEX','TBDI_JOYSETAUTOCENTER','TBDI_JOYRZ',
+ 'TBDI_JOYRY','TBDI_JOYRX','TBDI_JOYPOV','TBDI_JOYPLAYEFFECT','TBDI_JOYLOADEFFECT','TBDI_JOYHASFF','TBDI_JOYHASEFFECT','TBDI_JOYGETEFFECTNAME',
+ 'TBDI_JOYGETEFFECTGUID','TBDI_JOYCREATEEFFECT','TBDI_JOYCOUNTPOV','TBDI_JOYCOUNTEFFECTS','TBDI_JOYCOUNTBTN','TBDI_JOYCOUNTAXES','TBDI_JOYBUTTON','TBDI_JOYAVAIL',
+ 'TBDI_INIT','TBASS_STREAMFREE','TBASS_STREAMCREATEFILE','TBASS_SETVOLUME','TBASS_SETEAXPRESET','TBASS_SETEAXPARAMETERS','TBASS_SETCONFIG','TBASS_SET3DPOSITION',
+ 'TBASS_SET3DFACTORS','TBASS_SAMPLELOAD','TBASS_SAMPLEGETCHANNEL','TBASS_MUSICLOAD','TBASS_MUSICFREE','TBASS_INIT','TBASS_GETVOLUME','TBASS_GETVERSION',
+ 'TBASS_GETCONFIG','TBASS_FREE','TBASS_ERRORGETCODE','TBASS_CHANNELSTOP','TBASS_CHANNELSETPOSITION','TBASS_CHANNELSETATTRIBUTES','TBASS_CHANNELSET3DPOSITION','TBASS_CHANNELPLAY',
+ 'TBASS_CHANNELPAUSE','TBASS_CHANNELISACTIVE','TBASS_CHANNELGETPOSITION','TBASS_CHANNELGETLENGTH','TBASS_CHANNELGETATTRIBUTES','TBASS_APPLY3D','TANH','TANGENT',
+ 'TAN','TALLY','TABCTRL_ONNOTIFY','TABCTRL_INSERTITEM','TABCTRL_GETCURSEL','SWAP','SUB','STRZIP$',
+ 'STRUNZIP$','STRREVERSE$','STRPTRLEN','STRPTR','STRINSERT$','STRING$','STRING','STRDELETE$',
+ 'STR$','STOP','STEP','STDOUT','STDIN','STAT_SUM','STAT_STDERROR','STAT_STDDEVIATION',
+ 'STAT_RANDOM','STAT_PRODUCT','STAT_MIN','STAT_MEDIAN','STAT_MEANHARMONIC','STAT_MEANGEOMETRIC','STAT_MEANARITHMETIC','STAT_MAX',
+ 'STAT_INVERSESUM','STAT_HISTOGRAM','STAT_FILLARRAY','STAT_COUNT','STAT_COPYARRAY','STAT_CLONEARRAY','STAT_CHISQUARE','STATIC',
+ 'STATE','SQR','SPLIT','SORT','SMTP_STATISTICS','SMTP_SETOPTION','SMTP_SETLOGFILE','SMTP_SENDHTML',
+ 'SMTP_SENDEMAIL','SMTP_GETERROR','SMTP_FINISHED','SMTP_DEBUG','SMTP_CONNECT','SMTP_CLOSE','SLEEP','SIZEOF',
+ 'SIZE','SINH','SINGLE','SIN','SIGNED','SHOW','SHIFT','SHAPETOBMP',
+ 'SGN','SETAT','SET','SENDMESSAGE','SENDKEYSBULK','SENDKEYS','SEND','SELECTEXPRESSION',
+ 'SELECT','SECH','SEC','SCAN','SAPI_SPEAK','SAPI_SETVOLUME','SAPI_SETRATE','SAPI_MODULELOADED',
+ 'SAPI_GETVOLUME','SAPI_GETRATE','RTRIM$','RTF_SETTEXT','RTF_SETFONTSIZE','RTF_SETFONTNAME','RTF_SETFGCOLOR','RTF_SETEFFECT',
+ 'RTF_SETBGCOLOR','RTF_SETALIGN','RTF_SAVETOFILE','RTF_LOADFROMFILE','RTF_GETTEXT','RTF_GETFONTSIZE','RTF_GETFONTNAME','RTF_GETEFFECT',
+ 'RTF_GETCLASS','RTF_APPENDTEXT','RSET$','ROUND','RNDF','RND','RIGHT$','RIGHT',
+ 'RGB','RESOURCE','RESIZE','RESET','REPLACE$','REPEAT$','REMOVE$','REM',
+ 'REGISTRY_SETVALUE','REGISTRY_SETTXTNUM','REGISTRY_SETTXTBOOL','REGISTRY_SETDWORD','REGISTRY_GETVALUE','REGISTRY_GETTXTNUM','REGISTRY_GETTXTBOOL','REGISTRY_GETDWORD',
+ 'REGISTRY_GETALLKEYS','REGISTRY_DELVALUE','REGISTRY_DELKEY','REFERENCE','REF','REDRAW','REDIM','RAS_SETPARAMS',
+ 'RAS_OPENDIALUPDIALOG','RAS_LOADENTRIES','RAS_HANGUPALL','RAS_HANGUP','RAS_GETENTRY','RAS_BEGINDIAL','RANDOMIZE','RADTODEG',
+ 'QUERYPERFORMANCEFREQUENCY','QUERYPERFORMANCECOUNTER','QUAD','PTR','PRESERVE','POST','POPUP','POKE$',
+ 'POKE','PIXELS','PI','PERMUTATIONS','PEEKMESSAGE','PEEK$','PEEK','PC_SYSTEMUPFROM',
+ 'PC_SUSPENDSTATE','PC_SHUTDOWN','PC_SHOWCARET','PC_SETCARETBLINKTIME','PC_RESTARTDIALOG','PC_PREVENTSHUTDOWN','PC_LOCK','PC_INSERTCD',
+ 'PC_HIDECARET','PC_GETSTATEONOFF','PC_GETSCROLLLOCKKEYSTATE','PC_GETNUMLOCKKEYSTATE','PC_GETCARETBLINKTIME','PC_GETCAPSLOCKKEYSTATE','PC_EMPTYBIN','PC_EJECTCD',
+ 'PC_DECODECDERROR','PCT','PARSESET$','PARSECOUNT','PARSE$','PARSE','PARAMETERS','OUTSIDE',
+ 'OS_WINVERSIONTEXT','OS_WINGETVERSIONTIMELINE','OS_SHELLEXECUTE','OS_SHELLABOUT','OS_SHELL','OS_SETLASTCALLDLLERROR','OS_SERVICESTOP','OS_SERVICESTATUSDESCRIPTION',
+ 'OS_SERVICESTARTTYPEDESCRIPTION','OS_SERVICESTART','OS_SERVICESETSTARTTYPE','OS_SERVICEQUERY','OS_SERVICEGETSTARTTYPE','OS_SERVICEGETLIST','OS_PROCESSKILLBYNAME','OS_PROCESSKILLBYID',
+ 'OS_PROCESSISRUNNING','OS_PROCESSGETLIST','OS_PROCESSGETID','OS_PROCESSARERUNNING','OS_MESSAGEBEEP','OS_ISWOW64','OS_ISFEATUREPRESENT','OS_IEVERSION',
+ 'OS_GETWINDOWSDIR','OS_GETUSERNAME','OS_GETTEMPDIR','OS_GETSYSTEMDIR','OS_GETSPECIALFOLDER','OS_GETLASTCALLDLLSTATUS','OS_GETLASTCALLDLLERROR','OS_GETCURRENTTHREADID',
+ 'OS_GETCURRENTPROCESSID','OS_GETCOMPUTERNAME','OS_GETCOMMANDS','OS_GETCOMMAND','OS_FLASHWINDOW','OS_FATALAPPEXIT','OS_ENVIRON','OS_CALLDLL',
+ 'OR','OPTIONAL','OPTION','OPT','ONCE','ON','OFF','NUMBER',
+ 'NOT','NEXT','NEW','MSGBOX','MOUSEPTR','MODULE','MODELESS','MODAL',
+ 'MOD','MKWRD$','MKS$','MKQ$','MKL$','MKI$','MKE$','MKDWD$',
+ 'MKD$','MKCUX$','MKCUR$','MKBYT$','MIN$','MIN','MID$','MENU',
+ 'MDI_CREATE','MCASE$','MAX$','MAX','MAKWRD','MAKLNG','MAKINT','MAKDWR',
+ 'LTRIM$','LSET$','LOWRD','LOOP','LONG','LOINT','LOG_WRITE','LOGB',
+ 'LOG2','LOG10','LOG','LOCAL','LOC','LL_UPDATEBYNAME','LL_UPDATE','LL_TOSTRING',
+ 'LL_TOFILE','LL_NAME','LL_GETITEM','LL_GETBYNUMBER','LL_FROMFILE','LL_FREE','LL_FINDLAST','LL_FINDBYNAME',
+ 'LL_FINDBYDATA','LL_DELETELIKE','LL_DELETEBYNAME','LL_DELETE','LL_DATABYNAME','LL_DATA','LL_COUNT','LL_ADD',
+ 'LISTBOX','LINE','LIBRARY_EXISTS','LIB','LEN','LEFT$','LEFT','LCASE$',
+ 'LBOUND','LABEL','KILL','JOIN$','ITERATE','ISWINDOW','ISUNICODE','ISTRUE',
+ 'ISODD','ISLIKE','ISFALSE','ISEVEN','IP_TOSTRING','IP_ADDR','INTERNALINFO','INTEGER',
+ 'INT','INSTR','INSIDE','INPUTBOX$','INI_SETKEY','INI_GETSECTIONSLIST','INI_GETSECTIONKEYLIST','INI_GETKEY',
+ 'INET_URLDOWNLOAD','INET_PING','INET_OPENDIALUPDIALOG','INET_GETSTATE','INET_GETREMOTEMACADDRESS','INET_GETIP','INET_GETCONNECTIONMODE','INCR',
+ 'IN','IMAGE','IIF$','IIF','IF','ICRYPTO_TESTSHA1','ICRYPTO_TESTMD5','ICRYPTO_TESTCRC32',
+ 'ICRYPTO_TESTCRC16','ICRYPTO_STRING2ASCII','ICRYPTO_SHA1','ICRYPTO_MD5','ICRYPTO_ENCRYPTRIJNDAEL','ICRYPTO_ENCRYPTRC4','ICRYPTO_DECRYPTRIJNDAEL','ICRYPTO_DECRYPTRC4',
+ 'ICRYPTO_CRC32','ICRYPTO_CRC16','ICRYPTO_BYTEXOR','ICRYPTO_BIN2ASCII','ICRYPTO_ASCII2STRING','ICRYPTO_ASCII2BIN','HOST_ADDR','HOSTNAME_TOIP',
+ 'HOSTIP_TONAME','HIWRD','HIINT','HEX$','HASH','HANDLE','GUIDTXT$','GUID$',
+ 'GRAPHIC','GLVOID','GLUSHORT','GLUINT','GLUBYTE','GLSIZEI','GLSHORT','GLOBAL',
+ 'GLINT','GLFLOAT','GLENUM','GLDOUBLE','GLCLAMPF','GLCLAMPD','GLBYTE','GLBOOLEAN',
+ 'GLBITFIELD','GETWINDOWMULTIKEYSTATE','GETWINDOWKEYSTATE','GETTICKCOUNT','GETS','GETMULTIASYNCKEYSTATE','GETMESSAGE','GETCURRENTINSTANCE',
+ 'GETAT','GETASYNCKEYSTATE','GET','FUNCTION_NPARAMS','FUNCTION_EXISTS','FUNCTION_CPARAMS','FUNCTION','FTP_SETSTRING',
+ 'FTP_SETSERVERDIR','FTP_SETNUMBER','FTP_SETMODE','FTP_SETLOGFILE','FTP_SETLOCALDIR','FTP_QUIT','FTP_PUTFILE','FTP_GETSTRING',
+ 'FTP_GETSERVERDIR','FTP_GETNUMBER','FTP_GETLOCALDIR','FTP_GETLIST','FTP_GETFILE','FTP_GETERRORSTRING','FTP_GETERRORNUMBER','FTP_FINISHED',
+ 'FTP_EXTRACT','FTP_DELFILE','FTP_CONNECT','FTP_COMMAND','FRAME','FRAC','FORMAT$','FOR',
+ 'FONT_LIST','FONT_CREATE','FONT','FOCUS','FLUSH','FIX','FILE_SIZE','FILE_SHELLDELETE',
+ 'FILE_SHELLCOPY','FILE_SETDATETIME','FILE_SEEK','FILE_SAVE','FILE_RENAME','FILE_PUT','FILE_PATHSPLIT','FILE_OPEN',
+ 'FILE_LOF','FILE_LOAD','FILE_LINEPRINT','FILE_LINEINPUT','FILE_KILL','FILE_GETVERSIONSTRING','FILE_GETVERSION','FILE_GETTIME',
+ 'FILE_GETDATETIMESTAMP','FILE_GETDATETIME','FILE_GETDATE','FILE_GET','FILE_EXISTS','FILE_EOF','FILE_COPY','FILE_CLOSE',
+ 'FILE_CHANGED','FILE_APPEND','FACTORIAL','EXTRACT$','EXT','EXPORT','EXP2','EXP10',
+ 'EXP','EXIT','EVAL_STRING','EVAL_SETSTRING','EVAL_SETNUMBER','EVAL_MATH','EVAL_LINKEXT','EVAL_GETSTRING',
+ 'EVAL_GETNUMBER','EVAL_ERRORGETTOKEN','EVAL_ERRORDESCRIPTION','EVAL_ERRORCLEAR','EVAL','ERRCLEAR','ERR','ENGINE_GETCURRENTTOKEN',
+ 'ENDIF','END','ENABLE','ELSEIF','ELSE','ECHO','DWORD','DT_YEAR',
+ 'DT_TIMETOSEC','DT_TIMESUBSECONDS','DT_TIMEFORMAT','DT_TIMEADDSECONDS','DT_SETTIMESEPARATOR','DT_SETDATESEPARATOR','DT_SETDATECENTURY','DT_SECTOTIME',
+ 'DT_SECTODATE','DT_SECOND','DT_MONTH','DT_MINUTE','DT_LASTDAYOFMONTH','DT_ISVALIDDATE','DT_ISLEAPYEAR','DT_HOUR',
+ 'DT_GETWEEKDAYNAME','DT_GETWEEKDAY','DT_GETTIMESTAMP','DT_GETTIMESEPARATOR','DT_GETMONTHNAME','DT_GETDATESEPARATOR','DT_GETDATECENTURY','DT_DAY',
+ 'DT_DATETOSEC','DT_DATETIMESUBSECONDS','DT_DATETIMEADDSECONDS','DT_DATESUBDAYS','DT_DATEFORMAT','DT_DATEDIFF','DT_DATEADDDAYS','DT_COOKIEDATE',
+ 'DRAW','DOUBLE','DOEVENTS','DO','DISABLE','DIR_REMOVE','DIR_MAKEALL','DIR_MAKE',
+ 'DIR_LISTARRAY','DIR_LIST','DIR_ISEMPTY','DIR_ISDIR','DIR_GETCURRENT','DIR_EXISTS','DIR_CHANGEDRIVE','DIR_CHANGE',
+ 'DIM','DICTIONARY_MEMINFO','DICTIONARY_LISTKEYS','DICTIONARY_FREE','DICTIONARY_FIND','DICTIONARY_EXISTS','DICTIONARY_CREATE','DICTIONARY_COUNT',
+ 'DICTIONARY_ADD','DIALOG_STOPEVENTS','DIALOG_SAVEFILE','DIALOG_OPENFILE','DIALOG_GETCONTROL','DIALOG_CHOOSECOLOR','DIALOG_BROWSEFORFOLDER','DIALOG',
+ 'DESKTOP','DESCENDING','DESCEND','DELETEOBJECT','DELETE','DEGTORAD','DECR','DECLARE',
+ 'DATE$','CVWRD','CVS','CVQ','CVL','CVI','CVE','CVDWD',
+ 'CVD','CVCUX','CVCUR','CVBYT','CURRENCY','CUR','CSET$','CSCH',
+ 'CSC','CRYPTO_GETPROVIDERTYPESCOUNT','CRYPTO_GETPROVIDERSCOUNT','CRYPTO_GETDEFAULTPROVIDER','CRYPTO_GENRANDOMSTRING','CRYPTO_ENUMPROVIDERTYPES','CRYPTO_ENUMPROVIDERS','CRYPTO_ENCRYPT',
+ 'CRYPTO_DECRYPT','CREATEFONT','COTH','COTAN','COSH','COS','CONTROL_SETTEXT','CONTROL_GETTEXT',
+ 'CONTROL_GETNUMBER','CONTROL','CONST','CONSOLE_WRITELINE','CONSOLE_WRITE','CONSOLE_WAITKEY','CONSOLE_SHOWWINDOW','CONSOLE_SHOWCURSOR',
+ 'CONSOLE_SETTITLE','CONSOLE_SETTEXTATTRIBUTE','CONSOLE_SETSTDHANDLE','CONSOLE_SETSCREENBUFFERSIZE','CONSOLE_SETPROGRESSBARCHAR','CONSOLE_SETOUTPUTMODE','CONSOLE_SETOUTPUTCP','CONSOLE_SETINPUTMODE',
+ 'CONSOLE_SETFILEAPISTOOEM','CONSOLE_SETFILEAPISTOANSI','CONSOLE_SETCURSORSIZE','CONSOLE_SETCURSORPOSITION','CONSOLE_SETCP','CONSOLE_SETACTIVESCREENBUFFER','CONSOLE_SCROLLWINDOW','CONSOLE_SCROLLBUFFERONEROW',
+ 'CONSOLE_SCROLLBUFFER','CONSOLE_SAVESCREEN','CONSOLE_RESTORESCREEN','CONSOLE_READLINE','CONSOLE_READ','CONSOLE_PROGRESSBAR','CONSOLE_PRINTLINE','CONSOLE_PRINTAT',
+ 'CONSOLE_PRINT','CONSOLE_NORMALSCREEN','CONSOLE_LINE','CONSOLE_INKEYB','CONSOLE_INKEY','CONSOLE_HIDECURSOR','CONSOLE_GETTITLE','CONSOLE_GETTEXTATTRIBUTE',
+ 'CONSOLE_GETSTDHANDLE','CONSOLE_GETSIZEY','CONSOLE_GETSIZEX','CONSOLE_GETPROGRESSBARCHAR','CONSOLE_GETOUTPUTMODE','CONSOLE_GETOUTPUTCP','CONSOLE_GETNUMBEROFMOUSEBUTTONS','CONSOLE_GETINPUTMODE',
+ 'CONSOLE_GETCURSORY','CONSOLE_GETCURSORX','CONSOLE_GETCURSORSIZE','CONSOLE_GETCURRENTFONTINDEX','CONSOLE_GETCP','CONSOLE_GENERATECTRLEVENT','CONSOLE_FULLSCREEN','CONSOLE_FREE',
+ 'CONSOLE_FOREGROUNDRGB','CONSOLE_ENABLECTRLC','CONSOLE_DISABLECTRLC','CONSOLE_CREATESCREENBUFFER','CONSOLE_COLORAT','CONSOLE_CLS','CONSOLE_BOX','CONSOLE_BACKGROUNDRGB',
+ 'CONSOLE_ATTACH','CONSOLE_AREFILEAPISANSI','CONSOLE_ALLOC','COM_VARIANTINIT','COM_VARIANTCOPY','COM_VARIANTCLEAR','COM_SUCCEEDED','COM_STRINGFROMCLSID',
+ 'COM_RELEASE','COM_QUERYINTERFACE','COM_PROGIDFROMCLSID','COM_ISEQUALIID','COM_ISEQUALGUID','COM_ISEQUALCLSID','COM_GETOBJECT','COM_GETENGINEGUID',
+ 'COM_EXECUTE','COM_DISPLAYERROR','COM_CREATEOBJECT','COM_CLSIDFROMSTRING','COM_CLSIDFROMPROGID','COM_BUILDVARIANT','COMBOBOX','COMBINATIONS',
+ 'COLOR','CLIPBOARD_SETTEXT','CLIPBOARD_GETTEXT','CLIENT','CLEARMESSAGES','CHR$','CHOOSE$','CHOOSE',
+ 'CHECKBOX','CHECK3STATE','CHECK','CGI_WRITELOGFILE','CGI_WRITE','CGI_URLDECODESTRING','CGI_UPLOADFILESTIME','CGI_UPLOADFILESNUMBER',
+ 'CGI_UPLOADFILESIZE','CGI_STARTSESSION','CGI_SETSESSIONVARIABLE','CGI_RESETDEFAULTSETTINGS','CGI_REMOVESPECIALCHARSPREFIX','CGI_REMOVEQUOTE','CGI_READ','CGI_LOADCONFIGFILE',
+ 'CGI_HEADER','CGI_GETSESSIONVARIABLE','CGI_GETREQUESTMETHOD','CGI_GETQUERYVALUE','CGI_GETCURRENTSESSION','CGI_GETCURRENTGUID','CGI_ENVIRON','CGI_CFGSETOPTION',
+ 'CGI_CFGGETOPTION','CGI_ADDSPECIALCHARSPREFIX','CGI_ADDQUOTE','CEIL','CASE','CALL','BYVAL','BYTE',
+ 'BYREF','BYCMD','BUTTON','BUNDLE_SETSCRIPTPARAMETERS','BUNDLE_SETSCRIPTNAME','BUNDLE_SETFLAGOBFUSCATEMAINSCRIPT','BUNDLE_SETFLAGDELETEAFTERRUN','BUNDLE_SETFLAGCOMPRESSALLFILES',
+ 'BUNDLE_SETFLAGASKBEFOREEXTRACT','BUNDLE_SETEXTRACTIONFOLDER','BUNDLE_SETCREATIONFOLDER','BUNDLE_SETBUNDLENAME','BUNDLE_RESET','BUNDLE_MAKE','BUNDLE_BUILDER','BUNDLE_ADDFOLDER',
+ 'BUNDLE_ADDFILE','BOUNDCHECK','BIN$','BIFF_WRITETEXT','BIFF_WRITENUMBER','BIFF_WRITEDATE','BIFF_SETROWHEIGHT','BIFF_SETCOLWIDTH',
+ 'BIFF_SETBUFFER','BIFF_CREATEFILE','BIFF_CLOSEFILE','BETWEEN','BEEP','BAR','ATTACH','ATN',
+ 'AT','ASSIGN','ASCIZ','ASCIIZ','ASCII2UNICODE','ASCENDING','ASCEND','ASC',
+ 'AS','ARRAY','ARCTANH','ARCSINH','ARCSIN','ARCSECH','ARCSEC','ARCCSCH',
+ 'ARCCSC','ARCCOTH','ARCCOT','ARCCOSH','ARCCOS','APP_TIMER','APP_SOURCEPATH','APP_SOURCENAME',
+ 'APP_SOURCEFULLNAME','APP_PATH','APP_NAME','APP_LISTVARIABLES','APP_LISTKEYWORDS','APP_LISTFUNCTIONS','APP_LISTEQUATES','APP_INCLUDEPATH',
+ 'APP_GETMODULEFULLPATH','APP_COUNTER','APPEND','ANY','ANIMATE_STOP','ANIMATE_PLAY','ANIMATE_OPEN','AND',
+ 'ALIAS','ALERT','ADD','ACODE$','ABS','%DEF','#MINVERSION','#IF',
+ '#ENDIF','#ELSEIF','#ELSE','#DEFAULT','#DEF','SQLWRITEPRIVATEPROFILESTRING','SQLWRITEFILEDSN','SQLWRITEDSNTOINI',
+ 'SQLVALIDDSN','SQLTRANSACT','SQLTABLES','SQLTABLEPRIVILEGES','SQLSTATISTICS','SQLSPECIALCOLUMNS','SQLSETSTMTOPTION','SQLSETSTMTATTR',
+ 'SQLSETSCROLLOPTIONS','SQLSETPOS','SQLSETPARAM','SQLSETENVATTR','SQLSETDESCREC','SQLSETDESCFIELD','SQLSETCURSORNAME','SQLSETCONNECTOPTION',
+ 'SQLSETCONNECTATTR','SQLSETCONFIGMODE','SQLROWCOUNT','SQLREMOVETRANSLATOR','SQLREMOVEDSNFROMINI','SQLREMOVEDRIVERMANAGER','SQLREMOVEDRIVER','SQLREADFILEDSN',
+ 'SQLPUTDATA','SQLPROCEDURES','SQLPROCEDURECOLUMNS','SQLPRIMARYKEYS','SQLPREPARE','SQLPOSTINSTALLERERROR','SQLPARAMOPTIONS','SQLPARAMDATA',
+ 'SQLNUMRESULTCOLS','SQLNUMPARAMS','SQLNATIVESQL','SQLMORERESULTS','SQLMANAGEDATASOURCES','SQLINSTALLTRANSLATOREX','SQLINSTALLERERROR','SQLINSTALLDRIVERMANAGER',
+ 'SQLINSTALLDRIVEREX','SQLGETTYPEINFO','SQLGETTRANSLATOR','SQLGETSTMTOPTION','SQLGETSTMTATTR','SQLGETPRIVATEPROFILESTRING','SQLGETINSTALLEDDRIVERS','SQLGETINFO',
+ 'SQLGETFUNCTIONS','SQLGETENVATTR','SQLGETDIAGREC','SQLGETDIAGFIELD','SQLGETDESCREC','SQLGETDESCFIELD','SQLGETDATA','SQLGETCURSORNAME',
+ 'SQLGETCONNECTOPTION','SQLGETCONNECTATTR','SQLGETCONFIGMODE','SQLFREESTMT','SQLFREEHANDLE','SQLFREEENV','SQLFREECONNECT','SQLFOREIGNKEYS',
+ 'SQLFETCHSCROLL','SQLFETCH','SQLEXTENDEDFETCH','SQLEXECUTE','SQLEXECDIRECT','SQLERROR','SQLENDTRAN','SQLDRIVERS',
+ 'SQLDRIVERCONNECT','SQLDISCONNECT','SQLDESCRIBEPARAM','SQLDESCRIBECOL','SQLDATASOURCES','SQLCREATEDATASOURCE','SQLCOPYDESC','SQLCONNECT',
+ 'SQLCONFIGDRIVER','SQLCONFIGDATASOURCE','SQLCOLUMNS','SQLCOLUMNPRIVILEGES','SQLCOLATTRIBUTES','SQLCOLATTRIBUTE','SQLCLOSECURSOR','SQLCANCEL',
+ 'SQLBULKOPERATIONS','SQLBROWSECONNECT','SQLBINDPARAMETER','SQLBINDPARAM','SQLBINDCOL','SQLALLOCSTMT','SQLALLOCHANDLE','SQLALLOCENV',
+ 'SQLALLOCCONNECT','ODBCWRONGDRIVER','ODBCWRITEPRIVATEPROFILESTRING','ODBCWRITEFILEDSN','ODBCWRITEDSNTOINI','ODBCVALIDDSN','ODBCUPDATERECORD','ODBCUPDATEBYBOOKMARK',
+ 'ODBCUNLOCKRECORD','ODBCUNBINDCOLUMNS','ODBCUNBINDCOL','ODBCTABLESCOUNT','ODBCTABLES','ODBCTABLEPRIVILEGESCOUNT','ODBCTABLEPRIVILEGES','ODBCSUPPORTS',
+ 'ODBCSTATTABLESCHEMANAME','ODBCSTATTABLEPAGES','ODBCSTATTABLECATALOGNAME','ODBCSTATTABLECARDINALITY','ODBCSTATISTICSCOUNT','ODBCSTATISTICS','ODBCSTATINDEXSORTSEQUENCE','ODBCSTATINDEXSCHEMANAME',
+ 'ODBCSTATINDEXQUALIFIER','ODBCSTATINDEXPAGES','ODBCSTATINDEXFILTERCONDITION','ODBCSTATINDEXCOLUMNORDINALPOSITION','ODBCSTATINDEXCOLUMNNAME','ODBCSTATINDEXCATALOGNAME','ODBCSTATINDEXCARDINALITY','ODBCSTATINDEXALLOWDUPLICATES',
+ 'ODBCSPECIALCOLUMNSCOUNT','ODBCSPECIALCOLUMNS','ODBCSETTXNISOLATION','ODBCSETTRANSLATELIB','ODBCSETTRACEFILE','ODBCSETTRACE','ODBCSETSTMTUSEBOOKMARKS','ODBCSETSTMTSIMULATECURSOR',
+ 'ODBCSETSTMTROWSTATUSPTR','ODBCSETSTMTROWSFETCHEDPTR','ODBCSETSTMTROWOPERATIONPTR','ODBCSETSTMTROWBINDTYPE','ODBCSETSTMTROWBINDOFFSETPTR','ODBCSETSTMTROWARRAYSIZE','ODBCSETSTMTRETRIEVEDATA','ODBCSETSTMTQUERYTIMEOUT',
+ 'ODBCSETSTMTPARAMSTATUSPTR','ODBCSETSTMTPARAMSPROCESSEDPTR','ODBCSETSTMTPARAMSETSIZE','ODBCSETSTMTPARAMOPERATIONPTR','ODBCSETSTMTPARAMBINDTYPE','ODBCSETSTMTPARAMBINDOFFSETPTR','ODBCSETSTMTNOSCAN','ODBCSETSTMTMETADATAID',
+ 'ODBCSETSTMTMAXROWS','ODBCSETSTMTMAXLENGTH','ODBCSETSTMTKEYSETSIZE','ODBCSETSTMTFETCHBOOKMARKPTR','ODBCSETSTMTENABLEAUTOIPD','ODBCSETSTMTCURSORTYPE','ODBCSETSTMTCURSORSENSITIVITY','ODBCSETSTMTCURSORSCROLLABLE',
+ 'ODBCSETSTMTCONCURRENCY','ODBCSETSTMTATTR','ODBCSETSTMTASYNCENABLE','ODBCSETSTMTAPPROWDESC','ODBCSETSTMTAPPPARAMDESC','ODBCSETSTATICCURSOR','ODBCSETROWVERCONCURRENCY','ODBCSETRESULT',
+ 'ODBCSETRELATIVEPOSITION','ODBCSETREADONLYCONCURRENCY','ODBCSETQUIETMODE','ODBCSETPOSITION','ODBCSETPOS','ODBCSETPACKETMODE','ODBCSETOPTIMISTICCONCURRENCY','ODBCSETODBCCURSORS',
+ 'ODBCSETMULTIUSERKEYSETCURSOR','ODBCSETMETADATAID','ODBCSETLOGINTIMEOUT','ODBCSETLOCKCONCURRENCY','ODBCSETKEYSETDRIVENCURSOR','ODBCSETFORWARDONLYCURSOR','ODBCSETENVOUTPUTNTS','ODBCSETENVODBCVERSION',
+ 'ODBCSETENVCPMATCH','ODBCSETENVCONNECTIONPOOLING','ODBCSETENVATTR','ODBCSETDYNAMICCURSOR','ODBCSETDESCREC','ODBCSETDESCFIELD','ODBCSETCURSORTYPE','ODBCSETCURSORSENSITIVITY',
+ 'ODBCSETCURSORSCROLLABILITY','ODBCSETCURSORNAME','ODBCSETCURSORLOCKTYPE','ODBCSETCURSORKEYSETSIZE','ODBCSETCURSORCONCURRENCY','ODBCSETCURRENTCATALOG','ODBCSETCONNECTIONTIMEOUT','ODBCSETCONNECTATTR',
+ 'ODBCSETCONFIGMODE','ODBCSETCONCURVALUESCONCURRENCY','ODBCSETAUTOCOMMITON','ODBCSETAUTOCOMMITOFF','ODBCSETAUTOCOMMIT','ODBCSETASYNCENABLE','ODBCSETACCESSMODE','ODBCSETABSOLUTEPOSITION',
+ 'ODBCROWCOUNT','ODBCROLLBACKTRAN','ODBCROLLBACKENVTRAN','ODBCROLLBACKDBCTRAN','ODBCRESULT','ODBCRESETPARAMS','ODBCREMOVETRANSLATOR','ODBCREMOVEDSNFROMINI',
+ 'ODBCREMOVEDRIVERMANAGER','ODBCREMOVEDRIVER','ODBCREFRESHRECORD','ODBCRECORDCOUNT','ODBCREADFILEDSN','ODBCQUOTEDIDENTIFIERCASE','ODBCPUTDATA','ODBCPROCEDURESCOUNT',
+ 'ODBCPROCEDURES','ODBCPROCEDURECOLUMNSCOUNT','ODBCPROCEDURECOLUMNS','ODBCPRIMARYKEYSCOUNT','ODBCPRIMARYKEYS','ODBCPREPARE','ODBCPOSTINSTALLERERROR','ODBCPARAMDATA',
+ 'ODBCOPENSTMT','ODBCOPENCONNECTION','ODBCNUMRESULTCOLS','ODBCNUMPARAMS','ODBCNATIVESQL','ODBCMOVEPREVIOUS','ODBCMOVENEXT','ODBCMOVELAST',
+ 'ODBCMOVEFIRST','ODBCMOVE','ODBCMORERESULTS','ODBCMANAGEDATASOURCES','ODBCLOCKRECORD','ODBCINSTALLTRANSLATOREX','ODBCINSTALLERERROR','ODBCINSTALLDRIVERMANAGER',
+ 'ODBCINSTALLDRIVEREX','ODBCGETXOPENCLIYEAR','ODBCGETUSERNAME','ODBCGETUNION','ODBCGETTYPEINFOCOUNT','ODBCGETTYPEINFO','ODBCGETTXNISOLATIONOPTION','ODBCGETTXNISOLATION',
+ 'ODBCGETTXNCAPABLE','ODBCGETTRANSLATOR','ODBCGETTRANSLATELIB','ODBCGETTRACEFILE','ODBCGETTRACE','ODBCGETTIMEDATEFUNCTIONS','ODBCGETTIMEDATEDIFFINTERVALS','ODBCGETTIMEDATEADDINTERVALS',
+ 'ODBCGETTABLETERM','ODBCGETSYSTEMFUNCTIONS','ODBCGETSUBQUERIES','ODBCGETSTRINGFUNCTIONS','ODBCGETSTMTUSEBOOKMARKS','ODBCGETSTMTSQLSTATE','ODBCGETSTMTSIMULATECURSOR','ODBCGETSTMTROWSTATUSPTR',
+ 'ODBCGETSTMTROWSFETCHEDPTR','ODBCGETSTMTROWOPERATIONPTR','ODBCGETSTMTROWNUMBER','ODBCGETSTMTROWBINDTYPE','ODBCGETSTMTROWBINDOFFSETPTR','ODBCGETSTMTROWARRAYSIZE','ODBCGETSTMTRETRIEVEDATA','ODBCGETSTMTQUERYTIMEOUT',
+ 'ODBCGETSTMTPARAMSTATUSPTR','ODBCGETSTMTPARAMSPROCESSEDPTR','ODBCGETSTMTPARAMSETSIZE','ODBCGETSTMTPARAMOPERATIONPTR','ODBCGETSTMTPARAMBINDTYPE','ODBCGETSTMTPARAMBINDOFFSETPTR','ODBCGETSTMTNOSCAN','ODBCGETSTMTMETADATAID',
+ 'ODBCGETSTMTMAXROWS','ODBCGETSTMTMAXLENGTH','ODBCGETSTMTKEYSETSIZE','ODBCGETSTMTIMPROWDESC','ODBCGETSTMTIMPPARAMDESC','ODBCGETSTMTFETCHBOOKMARKPTR','ODBCGETSTMTERRORINFO','ODBCGETSTMTENABLEAUTOIPD',
+ 'ODBCGETSTMTCURSORTYPE','ODBCGETSTMTCURSORSENSITIVITY','ODBCGETSTMTCURSORSCROLLABLE','ODBCGETSTMTCONCURRENCY','ODBCGETSTMTATTR','ODBCGETSTMTASYNCENABLE','ODBCGETSTMTAPPROWDESC','ODBCGETSTMTAPPPARAMDESC',
+ 'ODBCGETSTATICCURSORATTRIBUTES2','ODBCGETSTATICCURSORATTRIBUTES1','ODBCGETSTATEMENTSQLSTATE','ODBCGETSTATEMENTERRORINFO','ODBCGETSTANDARDCLICONFORMANCE','ODBCGETSQLSTATE','ODBCGETSQLCONFORMANCE','ODBCGETSQL92VALUEEXPRESSIONS',
+ 'ODBCGETSQL92STRINGFUNCTIONS','ODBCGETSQL92ROWVALUECONSTRUCTOR','ODBCGETSQL92REVOKE','ODBCGETSQL92RELATIONALJOINOPERATORS','ODBCGETSQL92PREDICATES','ODBCGETSQL92NUMERICVALUEFUNCTIONS','ODBCGETSQL92GRANT','ODBCGETSQL92FOREIGNKEYUPDATERULE',
+ 'ODBCGETSQL92FOREIGNKEYDELETERULE','ODBCGETSQL92DATETIMEFUNCTIONS','ODBCGETSPECIALCHARACTERS','ODBCGETSERVERNAME','ODBCGETSEARCHPATTERNESCAPE','ODBCGETSCROLLOPTIONS','ODBCGETSCHEMAUSAGE','ODBCGETSCHEMATERM',
+ 'ODBCGETROWUPDATES','ODBCGETQUIETMODE','ODBCGETPROCEDURETERM','ODBCGETPROCEDURESSUPPORT','ODBCGETPRIVATEPROFILESTRING','ODBCGETPOSOPERATIONS','ODBCGETPARAMARRAYSELECTS','ODBCGETPARAMARRAYROWCOUNTS',
+ 'ODBCGETPACKETMODE','ODBCGETOUTERJOINS','ODBCGETORDERBYCOLUMNSINSELECT','ODBCGETOJCAPABILITIES','ODBCGETODBCVER','ODBCGETODBCINTERFACECONFORMANCE','ODBCGETODBCCURSORS','ODBCGETNUMERICFUNCTIONS',
+ 'ODBCGETNULLCOLLATION','ODBCGETNONNULLABLECOLUMNS','ODBCGETNEEDLONGDATALEN','ODBCGETMULTRESULTSETS','ODBCGETMULTIPLEACTIVETXN','ODBCGETMETADATAID','ODBCGETMAXUSERNAMELEN','ODBCGETMAXTABLESINSELECT',
+ 'ODBCGETMAXTABLENAMELEN','ODBCGETMAXSTATEMENTLEN','ODBCGETMAXSCHEMANAMELEN','ODBCGETMAXROWSIZEINCLUDESLONG','ODBCGETMAXROWSIZE','ODBCGETMAXPROCEDURENAMELEN','ODBCGETMAXINDEXSIZE','ODBCGETMAXIDENTIFIERLEN',
+ 'ODBCGETMAXDRIVERCONNECTIONS','ODBCGETMAXCURSORNAMELEN','ODBCGETMAXCONCURRENTACTIVITIES','ODBCGETMAXCOLUMNSINTABLE','ODBCGETMAXCOLUMNSINSELECT','ODBCGETMAXCOLUMNSINORDERBY','ODBCGETMAXCOLUMNSININDEX','ODBCGETMAXCOLUMNSINGROUPBY',
+ 'ODBCGETMAXCOLUMNNAMELEN','ODBCGETMAXCHARLITERALLEN','ODBCGETMAXCATALOGNAMELEN','ODBCGETMAXBINARYLITERALLEN','ODBCGETMAXASYNCCONCURRENTSTATEMENTS','ODBCGETLONGVARCHARDATABYCOLNAME','ODBCGETLONGVARCHARDATA','ODBCGETLOGINTIMEOUT',
+ 'ODBCGETLIKEESCAPECLAUSE','ODBCGETKEYWORDS','ODBCGETKEYSETCURSORATTRIBUTES2','ODBCGETKEYSETCURSORATTRIBUTES1','ODBCGETINTEGRITY','ODBCGETINSTALLERERRORMESSAGE','ODBCGETINSTALLERERRORCODE','ODBCGETINSTALLEDDRIVERS',
+ 'ODBCGETINSERTSTATEMENT','ODBCGETINFOSTR','ODBCGETINFOSCHEMAVIEWS','ODBCGETINFOLONG','ODBCGETINFOINT','ODBCGETINFO','ODBCGETINDEXKEYWORDS','ODBCGETIMPROWDESCREC',
+ 'ODBCGETIMPROWDESCFIELDTYPE','ODBCGETIMPROWDESCFIELDSCALE','ODBCGETIMPROWDESCFIELDPRECISION','ODBCGETIMPROWDESCFIELDOCTETLENGTH','ODBCGETIMPROWDESCFIELDNULLABLE','ODBCGETIMPROWDESCFIELDNAME','ODBCGETIMPROWDESCFIELD','ODBCGETIMPPARAMDESCREC',
+ 'ODBCGETIMPPARAMDESCFIELDTYPE','ODBCGETIMPPARAMDESCFIELDSCALE','ODBCGETIMPPARAMDESCFIELDPRECISION','ODBCGETIMPPARAMDESCFIELDOCTETLENGTH','ODBCGETIMPPARAMDESCFIELDNULLABLE','ODBCGETIMPPARAMDESCFIELDNAME','ODBCGETIMPPARAMDESCFIELD','ODBCGETIDENTIFIERQUOTECHAR',
+ 'ODBCGETIDENTIFIERCASE','ODBCGETGROUPBY','ODBCGETFUNCTIONS','ODBCGETFORWARDONLYCURSORATTRIBUTES2','ODBCGETFORWARDONLYCURSORATTRIBUTES1','ODBCGETFILEUSAGE','ODBCGETEXPRESSIONSINORDERBY','ODBCGETERRORINFO',
+ 'ODBCGETENVSQLSTATE','ODBCGETENVOUTPUTNTS','ODBCGETENVODBCVERSION','ODBCGETENVIRONMENTSQLSTATE','ODBCGETENVIRONMENTERRORINFO','ODBCGETENVERRORINFO','ODBCGETENVCPMATCH','ODBCGETENVCONNECTIONPOOLING',
+ 'ODBCGETENVATTR','ODBCGETDYNAMICCURSORATTRIBUTES2','ODBCGETDYNAMICCURSORATTRIBUTES1','ODBCGETDROPVIEW','ODBCGETDROPTRANSLATION','ODBCGETDROPTABLE','ODBCGETDROPSCHEMA','ODBCGETDROPDOMAIN',
+ 'ODBCGETDROPCOLLATION','ODBCGETDROPCHARACTERSET','ODBCGETDROPASSERTION','ODBCGETDRIVERVER','ODBCGETDRIVERODBCVER','ODBCGETDRIVERNAME','ODBCGETDRIVERMANAGERINSTALLPATH','ODBCGETDRIVERHLIB',
+ 'ODBCGETDRIVERHENV','ODBCGETDRIVERHDBC','ODBCGETDMVERMINOR','ODBCGETDMVERMAJOR','ODBCGETDMVER','ODBCGETDIAGREC','ODBCGETDIAGFIELD','ODBCGETDESCSQLSTATE',
+ 'ODBCGETDESCRIPTORSQLSTATE','ODBCGETDESCRIPTORERRORINFO','ODBCGETDESCRIBEPARAMETER','ODBCGETDESCREC','ODBCGETDESCFIELD','ODBCGETDESCERRORINFO','ODBCGETDEFAULTTXNISOLATION','ODBCGETDDLINDEX',
+ 'ODBCGETDBMSVER','ODBCGETDBMSNAME','ODBCGETDBCSQLSTATE','ODBCGETDBCERRORINFO','ODBCGETDATETIMELITERALS','ODBCGETDATASTRINGBYCOLNAME','ODBCGETDATASTRING','ODBCGETDATASOURCEREADONLY',
+ 'ODBCGETDATASOURCENAME','ODBCGETDATAEXTENSIONS','ODBCGETDATABASENAME','ODBCGETDATA','ODBCGETCURSORTYPE','ODBCGETCURSORSENSITIVITYSUPPORT','ODBCGETCURSORSENSITIVITY','ODBCGETCURSORSCROLLABILITY',
+ 'ODBCGETCURSORROLLBACKBEHAVIOR','ODBCGETCURSORNAME','ODBCGETCURSORLOCKTYPE','ODBCGETCURSORKEYSETSIZE','ODBCGETCURSORCONCURRENCY','ODBCGETCURSORCOMMITBEHAVIOR','ODBCGETCURRENTCATALOG','ODBCGETCREATEVIEW',
+ 'ODBCGETCREATETRANSLATION','ODBCGETCREATETABLE','ODBCGETCREATESCHEMA','ODBCGETCREATEDOMAIN','ODBCGETCREATECOLLATION','ODBCGETCREATECHARACTERSET','ODBCGETCREATEASSERTION','ODBCGETCORRELATIONNAME',
+ 'ODBCGETCONVERTVARCHAR','ODBCGETCONVERTVARBINARY','ODBCGETCONVERTTINYINT','ODBCGETCONVERTTIMESTAMP','ODBCGETCONVERTTIME','ODBCGETCONVERTSMALLINT','ODBCGETCONVERTREAL','ODBCGETCONVERTNUMERIC',
+ 'ODBCGETCONVERTLONGVARCHAR','ODBCGETCONVERTLONGVARBINARY','ODBCGETCONVERTINTERVALYEARMONTH','ODBCGETCONVERTINTERVALDAYTIME','ODBCGETCONVERTINTEGER','ODBCGETCONVERTFUNCTIONS','ODBCGETCONVERTFLOAT','ODBCGETCONVERTDOUBLE',
+ 'ODBCGETCONVERTDECIMAL','ODBCGETCONVERTDATE','ODBCGETCONVERTCHAR','ODBCGETCONVERTBIT','ODBCGETCONVERTBINARY','ODBCGETCONVERTBIGINT','ODBCGETCONNECTIONTIMEOUT','ODBCGETCONNECTIONSQLSTATE',
+ 'ODBCGETCONNECTIONERRORINFO','ODBCGETCONNECTIONDEAD','ODBCGETCONNECTATTR','ODBCGETCONFIGMODE','ODBCGETCONCATNULLBEHAVIOR','ODBCGETCOLUMNALIAS','ODBCGETCOLLATIONSEQ','ODBCGETCATALOGUSAGE',
+ 'ODBCGETCATALOGTERM','ODBCGETCATALOGNAMESEPARATOR','ODBCGETCATALOGNAME','ODBCGETCATALOGLOCATION','ODBCGETBOOKMARKPERSISTENCE','ODBCGETBATCHSUPPORT','ODBCGETBATCHROWCOUNT','ODBCGETAUTOIPD',
+ 'ODBCGETAUTOCOMMIT','ODBCGETASYNCMODE','ODBCGETASYNCENABLE','ODBCGETALTERTABLE','ODBCGETALTERDOMAIN','ODBCGETAGGREGATEFUNCTIONS','ODBCGETACTIVEENVIRONMENTS','ODBCGETACCESSMODE',
+ 'ODBCGETACCESSIBLETABLES','ODBCGETACCESSIBLEPROCEDURES','ODBCFREESTMT','ODBCFREEHANDLE','ODBCFREEENV','ODBCFREEDESC','ODBCFREEDBC','ODBCFREECONNECT',
+ 'ODBCFOREIGNKEYSCOUNT','ODBCFOREIGNKEYS','ODBCFETCHSCROLL','ODBCFETCHBYBOOKMARK','ODBCFETCH','ODBCEXTENDEDFETCH','ODBCEXECUTE','ODBCEXECDIRECT',
+ 'ODBCERROR','ODBCEOF','ODBCENDTRAN','ODBCDRIVERSCOUNT','ODBCDRIVERS','ODBCDRIVERCONNECT','ODBCDISCONNECT','ODBCDESCRIBEPARAM',
+ 'ODBCDESCRIBECOL','ODBCDELETERECORD','ODBCDELETEBYBOOKMARK','ODBCDATASOURCES','ODBCCREATEDATASOURCE','ODBCCOPYDESC','ODBCCONNECTIONISDEAD','ODBCCONNECTIONISALIVE',
+ 'ODBCCONNECT','ODBCCONFIGDRIVER','ODBCCONFIGDATASOURCE','ODBCCOMMITTRAN','ODBCCOMMITENVTRAN','ODBCCOMMITDBCTRAN','ODBCCOLUPDATABLE','ODBCCOLUNSIGNED',
+ 'ODBCCOLUNNAMED','ODBCCOLUMNSCOUNT','ODBCCOLUMNS','ODBCCOLUMNPRIVILEGESCOUNT','ODBCCOLUMNPRIVILEGES','ODBCCOLUMN','ODBCCOLTYPENAME','ODBCCOLTYPE',
+ 'ODBCCOLTABLENAME','ODBCCOLSEARCHABLE','ODBCCOLSCHEMANAME','ODBCCOLSCALE','ODBCCOLPRECISION','ODBCCOLOCTETLENGTH','ODBCCOLNUMPRECRADIX','ODBCCOLNULLABLE',
+ 'ODBCCOLNAME','ODBCCOLLOCALTYPENAME','ODBCCOLLITERALSUFFIX','ODBCCOLLITERALPREFIX','ODBCCOLLENGTH','ODBCCOLLABEL','ODBCCOLISNULL','ODBCCOLFIXEDPRECSCALE',
+ 'ODBCCOLDISPLAYSIZE','ODBCCOLCOUNT','ODBCCOLCONCISETYPE','ODBCCOLCATALOGNAME','ODBCCOLCASESENSITIVE','ODBCCOLBASETABLENAME','ODBCCOLBASECOLUMNNAME','ODBCCOLAUTOUNIQUEVALUE',
+ 'ODBCCOLATTRIBUTE','ODBCCLOSESTMTCURSOR','ODBCCLOSESTMT','ODBCCLOSECURSOR','ODBCCLOSECONNECTION','ODBCCLEARRESULT','ODBCCANCEL','ODBCBULKOPERATIONS',
+ 'ODBCBROWSECONNECT','ODBCBINDPARAMETER','ODBCBINDCOLTOWORD','ODBCBINDCOLTOTIMESTAMP','ODBCBINDCOLTOTIME','ODBCBINDCOLTOSTRING','ODBCBINDCOLTOSINGLE','ODBCBINDCOLTOQUAD',
+ 'ODBCBINDCOLTONUMERIC','ODBCBINDCOLTOLONG','ODBCBINDCOLTOINTEGER','ODBCBINDCOLTODWORD','ODBCBINDCOLTODOUBLE','ODBCBINDCOLTODECIMAL','ODBCBINDCOLTODATE','ODBCBINDCOLTOCURRENCY',
+ 'ODBCBINDCOLTOBYTE','ODBCBINDCOLTOBIT','ODBCBINDCOLTOBINARY','ODBCBINDCOL','ODBCALLOCSTMT','ODBCALLOCHANDLE','ODBCALLOCENV','ODBCALLOCDESC',
+ 'ODBCALLOCDBC','ODBCALLOCCONNECT','ODBCADDRECORD','GLVIEWPORT','GLVERTEXPOINTER','GLVERTEX4SV','GLVERTEX4S','GLVERTEX4IV',
+ 'GLVERTEX4I','GLVERTEX4FV','GLVERTEX4F','GLVERTEX4DV','GLVERTEX4D','GLVERTEX3SV','GLVERTEX3S','GLVERTEX3IV',
+ 'GLVERTEX3I','GLVERTEX3FV','GLVERTEX3F','GLVERTEX3DV','GLVERTEX3D','GLVERTEX2SV','GLVERTEX2S','GLVERTEX2IV',
+ 'GLVERTEX2I','GLVERTEX2FV','GLVERTEX2F','GLVERTEX2DV','GLVERTEX2D','GLUUNPROJECT','GLUTESSVERTEX','GLUTESSPROPERTY',
+ 'GLUTESSNORMAL','GLUTESSENDPOLYGON','GLUTESSENDCONTOUR','GLUTESSCALLBACK','GLUTESSBEGINPOLYGON','GLUTESSBEGINCONTOUR','GLUSPHERE','GLUSCALEIMAGE',
+ 'GLUQUADRICTEXTURE','GLUQUADRICORIENTATION','GLUQUADRICNORMALS','GLUQUADRICDRAWSTYLE','GLUQUADRICCALLBACK','GLUPWLCURVE','GLUPROJECT','GLUPICKMATRIX',
+ 'GLUPERSPECTIVE','GLUPARTIALDISK','GLUORTHO2D','GLUNURBSSURFACE','GLUNURBSPROPERTY','GLUNURBSCURVE','GLUNURBSCALLBACK','GLUNEXTCONTOUR',
+ 'GLUNEWTESS','GLUNEWQUADRIC','GLUNEWNURBSRENDERER','GLULOOKAT','GLULOADSAMPLINGMATRICES','GLUGETTESSPROPERTY','GLUGETSTRING','GLUGETNURBSPROPERTY',
+ 'GLUERRORSTRING','GLUENDTRIM','GLUENDSURFACE','GLUENDPOLYGON','GLUENDCURVE','GLUDISK','GLUDELETETESS','GLUDELETEQUADRIC',
+ 'GLUDELETENURBSRENDERER','GLUCYLINDER','GLUBUILD2DMIPMAPS','GLUBUILD1DMIPMAPS','GLUBEGINTRIM','GLUBEGINSURFACE','GLUBEGINPOLYGON','GLUBEGINCURVE',
+ 'GLTRANSLATEF','GLTRANSLATED','GLTEXSUBIMAGE2D','GLTEXSUBIMAGE1D','GLTEXPARAMETERIV','GLTEXPARAMETERI','GLTEXPARAMETERFV','GLTEXPARAMETERF',
+ 'GLTEXIMAGE2D','GLTEXIMAGE1D','GLTEXGENIV','GLTEXGENI','GLTEXGENFV','GLTEXGENF','GLTEXGENDV','GLTEXGEND',
+ 'GLTEXENVIV','GLTEXENVI','GLTEXENVFV','GLTEXENVF','GLTEXCOORDPOINTER','GLTEXCOORD4SV','GLTEXCOORD4S','GLTEXCOORD4IV',
+ 'GLTEXCOORD4I','GLTEXCOORD4FV','GLTEXCOORD4F','GLTEXCOORD4DV','GLTEXCOORD4D','GLTEXCOORD3SV','GLTEXCOORD3S','GLTEXCOORD3IV',
+ 'GLTEXCOORD3I','GLTEXCOORD3FV','GLTEXCOORD3F','GLTEXCOORD3DV','GLTEXCOORD3D','GLTEXCOORD2SV','GLTEXCOORD2S','GLTEXCOORD2IV',
+ 'GLTEXCOORD2I','GLTEXCOORD2FV','GLTEXCOORD2F','GLTEXCOORD2DV','GLTEXCOORD2D','GLTEXCOORD1SV','GLTEXCOORD1S','GLTEXCOORD1IV',
+ 'GLTEXCOORD1I','GLTEXCOORD1FV','GLTEXCOORD1F','GLTEXCOORD1DV','GLTEXCOORD1D','GLSTENCILOP','GLSTENCILMASK','GLSTENCILFUNC',
+ 'GLSHADEMODEL','GLSELECTBUFFER','GLSCISSOR','GLSCALEF','GLSCALED','GLROTATEF','GLROTATED','GLRENDERMODE',
+ 'GLRECTSV','GLRECTS','GLRECTIV','GLRECTI','GLRECTFV','GLRECTF','GLRECTDV','GLRECTD',
+ 'GLREADPIXELS','GLREADBUFFER','GLRASTERPOS4SV','GLRASTERPOS4S','GLRASTERPOS4IV','GLRASTERPOS4I','GLRASTERPOS4FV','GLRASTERPOS4F',
+ 'GLRASTERPOS4DV','GLRASTERPOS4D','GLRASTERPOS3SV','GLRASTERPOS3S','GLRASTERPOS3IV','GLRASTERPOS3I','GLRASTERPOS3FV','GLRASTERPOS3F',
+ 'GLRASTERPOS3DV','GLRASTERPOS3D','GLRASTERPOS2SV','GLRASTERPOS2S','GLRASTERPOS2IV','GLRASTERPOS2I','GLRASTERPOS2FV','GLRASTERPOS2F',
+ 'GLRASTERPOS2DV','GLRASTERPOS2D','GLPUSHNAME','GLPUSHMATRIX','GLPUSHCLIENTATTRIB','GLPUSHATTRIB','GLPRIORITIZETEXTURES','GLPOPNAME',
+ 'GLPOPMATRIX','GLPOPCLIENTATTRIB','GLPOPATTRIB','GLPOLYGONSTIPPLE','GLPOLYGONOFFSET','GLPOLYGONMODE','GLPOINTSIZE','GLPIXELZOOM',
+ 'GLPIXELTRANSFERI','GLPIXELTRANSFERF','GLPIXELSTOREI','GLPIXELSTOREF','GLPIXELMAPUSV','GLPIXELMAPUIV','GLPIXELMAPFV','GLPASSTHROUGH',
+ 'GLORTHO','GLNORMALPOINTER','GLNORMAL3SV','GLNORMAL3S','GLNORMAL3IV','GLNORMAL3I','GLNORMAL3FV','GLNORMAL3F',
+ 'GLNORMAL3DV','GLNORMAL3D','GLNORMAL3BV','GLNORMAL3B','GLNEWLIST','GLMULTMATRIXF','GLMULTMATRIXD','GLMATRIXMODE',
+ 'GLMATERIALIV','GLMATERIALI','GLMATERIALFV','GLMATERIALF','GLMAPGRID2F','GLMAPGRID2D','GLMAPGRID1F','GLMAPGRID1D',
+ 'GLMAP2F','GLMAP2D','GLMAP1F','GLMAP1D','GLLOGICOP','GLLOADNAME','GLLOADMATRIXF','GLLOADMATRIXD',
+ 'GLLOADIDENTITY','GLLISTBASE','GLLINEWIDTH','GLLINESTIPPLE','GLLIGHTMODELIV','GLLIGHTMODELI','GLLIGHTMODELFV','GLLIGHTMODELF',
+ 'GLLIGHTIV','GLLIGHTI','GLLIGHTFV','GLLIGHTF','GLISTEXTURE','GLISLIST','GLISENABLED','GLINTERLEAVEDARRAYS',
+ 'GLINITNAMES','GLINDEXUBV','GLINDEXUB','GLINDEXSV','GLINDEXS','GLINDEXPOINTER','GLINDEXMASK','GLINDEXIV',
+ 'GLINDEXI','GLINDEXFV','GLINDEXF','GLINDEXDV','GLINDEXD','GLHINT','GLGETTEXPARAMETERIV','GLGETTEXPARAMETERFV',
+ 'GLGETTEXLEVELPARAMETERIV','GLGETTEXLEVELPARAMETERFV','GLGETTEXIMAGE','GLGETTEXGENIV','GLGETTEXGENFV','GLGETTEXGENDV','GLGETTEXENVIV','GLGETTEXENVFV',
+ 'GLGETSTRING','GLGETPOLYGONSTIPPLE','GLGETPOINTERV','GLGETPIXELMAPUSV','GLGETPIXELMAPUIV','GLGETPIXELMAPFV','GLGETMATERIALIV','GLGETMATERIALFV',
+ 'GLGETMAPIV','GLGETMAPFV','GLGETMAPDV','GLGETLIGHTIV','GLGETLIGHTFV','GLGETINTEGERV','GLGETFLOATV','GLGETERROR',
+ 'GLGETDOUBLEV','GLGETCLIPPLANE','GLGETBOOLEANV','GLGENTEXTURES','GLGENLISTS','GLFRUSTUM','GLFRONTFACE','GLFOGIV',
+ 'GLFOGI','GLFOGFV','GLFOGF','GLFLUSH','GLFINISH','GLFEEDBACKBUFFER','GLEVALPOINT2','GLEVALPOINT1',
+ 'GLEVALMESH2','GLEVALMESH1','GLEVALCOORD2FV','GLEVALCOORD2F','GLEVALCOORD2DV','GLEVALCOORD2D','GLEVALCOORD1FV','GLEVALCOORD1F',
+ 'GLEVALCOORD1DV','GLEVALCOORD1D','GLENDLIST','GLEND','GLENABLECLIENTSTATE','GLENABLE','GLEDGEFLAGV','GLEDGEFLAGPOINTER',
+ 'GLEDGEFLAG','GLDRAWPIXELS','GLDRAWELEMENTS','GLDRAWBUFFER','GLDRAWARRAYS','GLDISABLECLIENTSTATE','GLDISABLE','GLDEPTHRANGE',
+ 'GLDEPTHMASK','GLDEPTHFUNC','GLDELETETEXTURES','GLDELETELISTS','GLCULLFACE','GLCOPYTEXSUBIMAGE2D','GLCOPYTEXSUBIMAGE1D','GLCOPYTEXIMAGE2D',
+ 'GLCOPYTEXIMAGE1D','GLCOPYPIXELS','GLCOLORPOINTER','GLCOLORMATERIAL','GLCOLORMASK','GLCOLOR4USV','GLCOLOR4US','GLCOLOR4UIV',
+ 'GLCOLOR4UI','GLCOLOR4UBV','GLCOLOR4UB','GLCOLOR4SV','GLCOLOR4S','GLCOLOR4IV','GLCOLOR4I','GLCOLOR4FV',
+ 'GLCOLOR4F','GLCOLOR4DV','GLCOLOR4D','GLCOLOR4BV','GLCOLOR4B','GLCOLOR3USV','GLCOLOR3US','GLCOLOR3UIV',
+ 'GLCOLOR3UI','GLCOLOR3UBV','GLCOLOR3UB','GLCOLOR3SV','GLCOLOR3S','GLCOLOR3IV','GLCOLOR3I','GLCOLOR3FV',
+ 'GLCOLOR3F','GLCOLOR3DV','GLCOLOR3D','GLCOLOR3BV','GLCOLOR3B','GLCLIPPLANE','GLCLEARSTENCIL','GLCLEARINDEX',
+ 'GLCLEARDEPTH','GLCLEARCOLOR','GLCLEARACCUM','GLCLEAR','GLCALLLISTS','GLCALLLIST','GLBLENDFUNC','GLBITMAP',
+ 'GLBINDTEXTURE','GLBEGIN','GLARRAYELEMENT','GLARETEXTURESRESIDENT','GLALPHAFUNC','GLACCUM'),
+ 2 => array(
+ '$BEL','$BS','$CR','$CRLF','$DQ','$DT_DATE_SEPARATOR','$DT_LANGUAGE','$DT_TIME_SEPARATOR',
+ '$ESC','$FF','$LF','$NUL','$PC_SD_MY_PC','$SPC','$SQL_OPT_TRACE_FILE_DEFAULT','$SQL_SPEC_STRING',
+ '$TAB','$TRACKBAR_CLASS','$VT','%ACM_OPEN','%ACM_OPENW','%ACM_PLAY','%ACM_STOP','%ACN_START',
+ '%ACN_STOP','%ACS_AUTOPLAY','%ACS_CENTER','%ACS_TIMER','%ACS_TRANSPARENT','%APP_COUNTER_FUNLOOKUP','%APP_COUNTER_KEYLOOKUP','%APP_COUNTER_LOOKUP',
+ '%APP_COUNTER_TESTALPHA','%APP_COUNTER_UDTLOOKUP','%APP_COUNTER_VARLOOKUP','%APP_TIMER_EXECTOTAL','%APP_TIMER_INIT','%APP_TIMER_LOAD','%APP_TIMER_PREPROCESSOR','%AW_ACTIVATE',
+ '%AW_BLEND','%AW_CENTER','%AW_HIDE','%AW_HOR_NEGATIVE','%AW_HOR_POSITIVE','%AW_SLIDE','%AW_VER_NEGATIVE','%AW_VER_POSITIVE',
+ '%BCM_FIRST','%BLACK','%BLUE','%BM_GETCHECK','%BM_SETCHECK','%BST_CHECKED','%BST_UNCHECKED','%BS_AUTOCHECKBOX',
+ '%BS_BOTTOM','%BS_CENTER','%BS_DEFAULT','%BS_DEFPUSHBUTTON','%BS_FLAT','%BS_LEFT','%BS_LEFTTEXT','%BS_MULTILINE',
+ '%BS_NOTIFY','%BS_OWNERDRAW','%BS_PUSHLIKE','%BS_RIGHT','%BS_TOP','%BS_VCENTER','%BUNDLE_BUILDER_CANCELLED','%CBM_FIRST',
+ '%CBN_CLOSEUP','%CBN_DBLCLK','%CBN_DROPDOWN','%CBN_EDITCHANGE','%CBN_EDITUPDATE','%CBN_ERRSPACE','%CBN_KILLFOCUS','%CBN_SELCANCEL',
+ '%CBN_SELCHANGE','%CBN_SELENDCANCEL','%CBN_SELENDOK','%CBN_SETFOCUS','%CBS_AUTOHSCROLL','%CBS_DISABLENOSCROLL','%CBS_DROPDOWN','%CBS_DROPDOWNLIST',
+ '%CBS_HASSTRINGS','%CBS_LOWERCASE','%CBS_NOINTEGRALHEIGHT','%CBS_SIMPLE','%CBS_SORT','%CBS_UPPERCASE','%CB_SELECTSTRING','%CCM_FIRST',
+ '%CC_ANYCOLOR','%CC_ENABLEHOOK','%CC_ENABLETEMPLATE','%CC_ENABLETEMPLATEHANDLE','%CC_FULLOPEN','%CC_PREVENTFULLOPEN','%CC_RGBINIT','%CC_SHOWHELP',
+ '%CC_SOLIDCOLOR','%CFE_BOLD','%CFE_ITALIC','%CFE_LINK','%CFE_PROTECTED','%CFE_STRIKEOUT','%CFE_UNDERLINE','%CFM_ANIMATION',
+ '%CFM_BACKCOLOR','%CFM_BOLD','%CFM_CHARSET','%CFM_COLOR','%CFM_FACE','%CFM_ITALIC','%CFM_KERNING','%CFM_LCID',
+ '%CFM_LINK','%CFM_OFFSET','%CFM_PROTECTED','%CFM_REVAUTHOR','%CFM_SIZE','%CFM_SPACING','%CFM_STRIKEOUT','%CFM_STYLE',
+ '%CFM_UNDERLINE','%CFM_UNDERLINETYPE','%CFM_WEIGHT','%CGI_ACCEPT_FILE_UPLOAD','%CGI_AUTO_ADD_SPECIAL_CHARS_PREFIX','%CGI_AUTO_CREATE_VARS','%CGI_BUFFERIZE_OUTPUT','%CGI_DOUBLE_QUOTE',
+ '%CGI_FILE_UPLOAD_BASEPATH','%CGI_FORCE_SESSION_VALIDATION','%CGI_MAX_BYTE_FROM_STD_IN','%CGI_REQUEST_METHOD_GET','%CGI_REQUEST_METHOD_POST','%CGI_SESSION_FILE_BASEPATH','%CGI_SINGLE_QUOTE','%CGI_SPECIAL_CHARS_PREFIX',
+ '%CGI_TEMPORARY_UPLOAD_PATH','%CGI_UPLOAD_CAN_OVERWRITE','%CGI_WRITE_LOG_FILE','%CGI_WRITE_VARS_INTO_LOG_FILE','%CONOLE_ATTACH_PARENT_PROCESS','%CONSOLE_BACKGROUND_BLUE','%CONSOLE_BACKGROUND_GREEN','%CONSOLE_BACKGROUND_INTENSITY',
+ '%CONSOLE_BACKGROUND_RED','%CONSOLE_BOX_FLAG_3DOFF','%CONSOLE_BOX_FLAG_3DON','%CONSOLE_BOX_FLAG_SHADOW','%CONSOLE_COMMON_LVB_GRID_HORIZONTAL','%CONSOLE_COMMON_LVB_GRID_LVERTICAL','%CONSOLE_COMMON_LVB_GRID_RVERTICAL','%CONSOLE_COMMON_LVB_LEADING_BYTE',
+ '%CONSOLE_COMMON_LVB_REVERSE_VIDEO','%CONSOLE_COMMON_LVB_TRAILING_BYTE','%CONSOLE_COMMON_LVB_UNDERSCORE','%CONSOLE_CTRL_BREAK_EVENT','%CONSOLE_CTRL_C_EVENT','%CONSOLE_DOUBLE_CLICK','%CONSOLE_ENABLE_AUTO_POSITION','%CONSOLE_ENABLE_ECHO_INPUT',
+ '%CONSOLE_ENABLE_EXTENDED_FLAGS','%CONSOLE_ENABLE_INSERT_MODE','%CONSOLE_ENABLE_LINE_INPUT','%CONSOLE_ENABLE_MOUSE_INPUT','%CONSOLE_ENABLE_PROCESSED_INPUT','%CONSOLE_ENABLE_PROCESSED_OUTPUT','%CONSOLE_ENABLE_QUICK_EDIT_MODE','%CONSOLE_ENABLE_WINDOW_INPUT',
+ '%CONSOLE_ENABLE_WRAP_AT_EOL_OUTPUT','%CONSOLE_FOREGROUND_BLUE','%CONSOLE_FOREGROUND_GREEN','%CONSOLE_FOREGROUND_INTENSITY','%CONSOLE_FOREGROUND_RED','%CONSOLE_LBUTTON','%CONSOLE_LINE_HORIZONTAL','%CONSOLE_LINE_VERTICAL',
+ '%CONSOLE_MBUTTON','%CONSOLE_MOUSE_MOVED','%CONSOLE_MOUSE_WHEELED','%CONSOLE_RBUTTON','%CONSOLE_SCROLLBUF_DOWN','%CONSOLE_SCROLLBUF_UP','%CONSOLE_SCROLLWND_ABSOLUTE','%CONSOLE_SCROLLWND_RELATIVE',
+ '%CONSOLE_STD_ERROR_HANDLE','%CONSOLE_STD_INPUT_HANDLE','%CONSOLE_STD_OUTPUT_HANDLE','%CONSOLE_SW_FORCEMINIMIZE','%CONSOLE_SW_HIDE','%CONSOLE_SW_MAXIMIZE','%CONSOLE_SW_MINIMIZE','%CONSOLE_SW_RESTORE',
+ '%CONSOLE_SW_SHOW','%CONSOLE_SW_SHOWDEFAULT','%CONSOLE_SW_SHOWMAXIMIZED','%CONSOLE_SW_SHOWMINIMIZED','%CONSOLE_SW_SHOWMINNOACTIVE','%CONSOLE_SW_SHOWNA','%CONSOLE_SW_SHOWNOACTIVATE','%CONSOLE_SW_SHOWNORMAL',
+ '%CONSOLE_UNAVAILABLE','%CRYPTO_CALG_DES','%CRYPTO_CALG_RC2','%CRYPTO_CALG_RC4','%CRYPTO_PROV_DH_SCHANNEL','%CRYPTO_PROV_DSS','%CRYPTO_PROV_DSS_DH','%CRYPTO_PROV_FORTEZZA',
+ '%CRYPTO_PROV_MS_EXCHANGE','%CRYPTO_PROV_RSA_FULL','%CRYPTO_PROV_RSA_SCHANNEL','%CRYPTO_PROV_RSA_SIG','%CRYPTO_PROV_SSL','%CSIDL_ADMINTOOLS','%CSIDL_ALTSTARTUP','%CSIDL_APPDATA',
+ '%CSIDL_BITBUCKET','%CSIDL_CDBURN_AREA','%CSIDL_COMMON_ADMINTOOLS','%CSIDL_COMMON_ALTSTARTUP','%CSIDL_COMMON_APPDATA','%CSIDL_COMMON_DESKTOPDIRECTORY','%CSIDL_COMMON_DOCUMENTS','%CSIDL_COMMON_FAVORITES',
+ '%CSIDL_COMMON_MUSIC','%CSIDL_COMMON_PICTURES','%CSIDL_COMMON_PROGRAMS','%CSIDL_COMMON_STARTMENU','%CSIDL_COMMON_STARTUP','%CSIDL_COMMON_TEMPLATES','%CSIDL_COMMON_VIDEO','%CSIDL_CONTROLS',
+ '%CSIDL_COOKIES','%CSIDL_DESKTOP','%CSIDL_DESKTOPDIRECTORY','%CSIDL_DRIVES','%CSIDL_FAVORITES','%CSIDL_FLAG_CREATE','%CSIDL_FONTS','%CSIDL_HISTORY',
+ '%CSIDL_INTERNET','%CSIDL_INTERNET_CACHE','%CSIDL_LOCAL_APPDATA','%CSIDL_MYDOCUMENTS','%CSIDL_MYMUSIC','%CSIDL_MYPICTURES','%CSIDL_MYVIDEO','%CSIDL_NETHOOD',
+ '%CSIDL_NETWORK','%CSIDL_PERSONAL','%CSIDL_PRINTERS','%CSIDL_PRINTHOOD','%CSIDL_PROFILE','%CSIDL_PROGRAMS','%CSIDL_PROGRAM_FILES','%CSIDL_PROGRAM_FILES_COMMON',
+ '%CSIDL_RECENT','%CSIDL_SENDTO','%CSIDL_STARTMENU','%CSIDL_STARTUP','%CSIDL_SYSTEM','%CSIDL_TEMPLATES','%CSIDL_WINDOWS','%CW_USEDEFAULT',
+ '%CYAN','%DATE_TIME_FILE_CREATION','%DATE_TIME_LAST_FILE_ACCESS','%DATE_TIME_LAST_FILE_WRITE','%DICTIONARY_MEMINFO_DATA','%DICTIONARY_MEMINFO_KEYS','%DICTIONARY_MEMINFO_TOTAL','%DICTIONARY_SORTDESCENDING',
+ '%DICTIONARY_SORTKEYS','%DSCAPS_CERTIFIED','%DSCAPS_CONTINUOUSRATE','%DSCAPS_EMULDRIVER','%DSCAPS_SECONDARY16BIT','%DSCAPS_SECONDARY8BIT','%DSCAPS_SECONDARYMONO','%DSCAPS_SECONDARYSTEREO',
+ '%DSCCAPS_CERTIFIED','%DSCCAPS_EMULDRIVER','%DS_3DLOOK','%DS_ABSALIGN','%DS_CENTER','%DS_CENTERMOUSE','%DS_CONTEXTHELP','%DS_CONTROL',
+ '%DS_MODALFRAME','%DS_NOFAILCREATE','%DS_SETFONT','%DS_SETFOREGROUND','%DS_SYSMODAL','%DTM_FIRST','%DTM_GETMCCOLOR','%DTM_GETMCFONT',
+ '%DTM_GETMONTHCAL','%DTM_GETRANGE','%DTM_GETSYSTEMTIME','%DTM_SETFORMAT','%DTM_SETFORMATW','%DTM_SETMCCOLOR','%DTM_SETMCFONT','%DTM_SETRANGE',
+ '%DTM_SETSYSTEMTIME','%DTN_CLOSEUP','%DTN_DATETIMECHANGE','%DTN_DROPDOWN','%DTN_FORMAT','%DTN_FORMATQUERY','%DTN_FORMATQUERYW','%DTN_FORMATW',
+ '%DTN_USERSTRING','%DTN_USERSTRINGW','%DTN_WMKEYDOWN','%DTN_WMKEYDOWNW','%DTS_APPCANPARSE','%DTS_LONGDATEFORMAT','%DTS_RIGHTALIGN','%DTS_SHORTDATECENTURYFORMAT',
+ '%DTS_SHORTDATEFORMAT','%DTS_SHOWNONE','%DTS_TIMEFORMAT','%DTS_UPDOWN','%DT_DATE_CENTURY','%DT_DATE_OK','%DT_DAY_IN_YEAR','%DT_DIFF_IN_DAYS',
+ '%DT_DIFF_IN_HOURS','%DT_DIFF_IN_MINUTES','%DT_DIFF_IN_SECONDS','%DT_HOURS_IN_DAY','%DT_MINUTES_IN_HOUR','%DT_SECONDS_IN_DAY','%DT_SECONDS_IN_HOUR','%DT_SECONDS_IN_MINUTE',
+ '%DT_SECONDS_IN_YEAR','%DT_USE_LONG_FORM','%DT_USE_SHORT_FORM','%DT_WRONG_DATE','%DT_WRONG_DAY','%DT_WRONG_MONTH','%ECM_FIRST','%ECOOP_AND',
+ '%ECOOP_OR','%ECOOP_SET','%ECOOP_XOR','%ECO_AUTOHSCROLL','%ECO_AUTOVSCROLL','%ECO_AUTOWORDSELECTION','%ECO_NOHIDESEL','%ECO_READONLY',
+ '%ECO_SELECTIONBAR','%ECO_WANTRETURN','%EM_AUTOURLDETECT','%EM_CANPASTE','%EM_CANREDO','%EM_CANUNDO','%EM_CHARFROMPOS','%EM_DISPLAYBAND',
+ '%EM_EMPTYUNDOBUFFER','%EM_EXGETSEL','%EM_EXLIMITTEXT','%EM_EXLINEFROMCHAR','%EM_EXSETSEL','%EM_FINDTEXT','%EM_FINDTEXTEX','%EM_FINDWORDBREAK',
+ '%EM_FMTLINES','%EM_FORMATRANGE','%EM_GETAUTOURLDETECT','%EM_GETCHARFORMAT','%EM_GETEDITSTYLE','%EM_GETEVENTMASK','%EM_GETFIRSTVISIBLELINE','%EM_GETHANDLE',
+ '%EM_GETIMESTATUS','%EM_GETLIMITTEXT','%EM_GETLINE','%EM_GETLINECOUNT','%EM_GETMARGINS','%EM_GETMODIFY','%EM_GETOLEINTERFACE','%EM_GETOPTIONS',
+ '%EM_GETPARAFORMAT','%EM_GETPASSWORDCHAR','%EM_GETRECT','%EM_GETREDONAME','%EM_GETSCROLLPOS','%EM_GETSEL','%EM_GETSELTEXT','%EM_GETTEXTMODE',
+ '%EM_GETTEXTRANGE','%EM_GETTHUMB','%EM_GETUNDONAME','%EM_GETWORDBREAKPROC','%EM_GETWORDBREAKPROCEX','%EM_HIDESELECTION','%EM_LIMITTEXT','%EM_LINEFROMCHAR',
+ '%EM_LINEINDEX','%EM_LINELENGTH','%EM_LINESCROLL','%EM_PASTESPECIAL','%EM_POSFROMCHAR','%EM_REDO','%EM_REPLACESEL','%EM_REQUESTRESIZE',
+ '%EM_SCROLL','%EM_SCROLLCARET','%EM_SELECTIONTYPE','%EM_SETBKGNDCOLOR','%EM_SETCHARFORMAT','%EM_SETEDITSTYLE','%EM_SETEVENTMASK','%EM_SETHANDLE',
+ '%EM_SETIMESTATUS','%EM_SETLIMITTEXT','%EM_SETMARGINS','%EM_SETMODIFY','%EM_SETOLECALLBACK','%EM_SETOPTIONS','%EM_SETPARAFORMAT','%EM_SETPASSWORDCHAR',
+ '%EM_SETREADONLY','%EM_SETRECT','%EM_SETRECTNP','%EM_SETSCROLLPOS','%EM_SETSEL','%EM_SETTABSTOPS','%EM_SETTARGETDEVICE','%EM_SETTEXTMODE',
+ '%EM_SETUNDOLIMIT','%EM_SETWORDBREAKPROC','%EM_SETWORDBREAKPROCEX','%EM_SETWORDWRAPMODE','%EM_SETZOOM','%EM_STOPGROUPTYPING','%EM_STREAMIN','%EM_STREAMOUT',
+ '%EM_UNDO','%ENM_CHANGE','%ENM_CORRECTTEXT','%ENM_DRAGDROPDONE','%ENM_DROPFILES','%ENM_KEYEVENTS','%ENM_MOUSEEVENTS','%ENM_NONE',
+ '%ENM_PARAGRAPHEXPANDED','%ENM_PROTECTED','%ENM_REQUESTRESIZE','%ENM_SCROLL','%ENM_SCROLLEVENTS','%ENM_SELCHANGE','%ENM_UPDATE','%EN_CHANGE',
+ '%EN_MSGFILTER','%EN_SELCHANGE','%EN_UPDATE','%ES_AUTOHSCROLL','%ES_AUTOVSCROLL','%ES_CENTER','%ES_DISABLENOSCROLL','%ES_EX_NOCALLOLEINIT',
+ '%ES_LEFT','%ES_LOWERCASE','%ES_MULTILINE','%ES_NOHIDESEL','%ES_NOOLEDRAGDROP','%ES_NUMBER','%ES_OEMCONVERT','%ES_PASSWORD',
+ '%ES_READONLY','%ES_RIGHT','%ES_SAVESEL','%ES_SELECTIONBAR','%ES_SUNKEN','%ES_UPPERCASE','%ES_WANTRETURN','%EVAL_EXEC_STRING',
+ '%FALSE','%FILE_ADDPATH','%FILE_ARCHIVE','%FILE_BUILDVERSION','%FILE_HIDDEN','%FILE_MAJORVERSION','%FILE_MINORVERSION','%FILE_NORMAL',
+ '%FILE_READONLY','%FILE_REVISIONVERSION','%FILE_SUBDIR','%FILE_SYSTEM','%FILE_VLABEL','%FTP_GET_CONNECT_STATUS','%FTP_GET_FILE_BYTES_RCVD','%FTP_GET_FILE_BYTES_SENT',
+ '%FTP_GET_LAST_RESPONSE','%FTP_GET_LOCAL_IP','%FTP_GET_SERVER_IP','%FTP_GET_TOTAL_BYTES_RCVD','%FTP_GET_TOTAL_BYTES_SENT','%FTP_LIST_FULLLIST','%FTP_LIST_FULLLISTDIR','%FTP_LIST_FULLLISTFILE',
+ '%FTP_SET_ASYNC','%FTP_SET_CONNECT_WAIT','%FTP_SET_MAX_LISTEN_WAIT','%FTP_SET_MAX_RESPONSE_WAIT','%FTP_SET_PASSIVE','%FTP_SET_SYNC','%FW_BLACK','%FW_BOLD',
+ '%FW_DEMIBOLD','%FW_DONTCARE','%FW_EXTRABOLD','%FW_EXTRALIGHT','%FW_HEAVY','%FW_LIGHT','%FW_MEDIUM','%FW_NORMAL',
+ '%FW_REGULAR','%FW_SEMIBOLD','%FW_THIN','%FW_ULTRABOLD','%FW_ULTRALIGHT','%GDTR_MAX','%GDTR_MIN','%GLU_AUTO_LOAD_MATRIX',
+ '%GLU_BEGIN','%GLU_CCW','%GLU_CULLING','%GLU_CW','%GLU_DISPLAY_MODE','%GLU_DOMAIN_DISTANCE','%GLU_EDGE_FLAG','%GLU_END',
+ '%GLU_ERROR','%GLU_EXTENSIONS','%GLU_EXTERIOR','%GLU_FALSE','%GLU_FILL','%GLU_FLAT','%GLU_INCOMPATIBLE_GL_VERSION','%GLU_INSIDE',
+ '%GLU_INTERIOR','%GLU_INVALID_ENUM','%GLU_INVALID_VALUE','%GLU_LINE','%GLU_MAP1_TRIM_2','%GLU_MAP1_TRIM_3','%GLU_NONE','%GLU_NURBS_ERROR1',
+ '%GLU_NURBS_ERROR10','%GLU_NURBS_ERROR11','%GLU_NURBS_ERROR12','%GLU_NURBS_ERROR13','%GLU_NURBS_ERROR14','%GLU_NURBS_ERROR15','%GLU_NURBS_ERROR16','%GLU_NURBS_ERROR17',
+ '%GLU_NURBS_ERROR18','%GLU_NURBS_ERROR19','%GLU_NURBS_ERROR2','%GLU_NURBS_ERROR20','%GLU_NURBS_ERROR21','%GLU_NURBS_ERROR22','%GLU_NURBS_ERROR23','%GLU_NURBS_ERROR24',
+ '%GLU_NURBS_ERROR25','%GLU_NURBS_ERROR26','%GLU_NURBS_ERROR27','%GLU_NURBS_ERROR28','%GLU_NURBS_ERROR29','%GLU_NURBS_ERROR3','%GLU_NURBS_ERROR30','%GLU_NURBS_ERROR31',
+ '%GLU_NURBS_ERROR32','%GLU_NURBS_ERROR33','%GLU_NURBS_ERROR34','%GLU_NURBS_ERROR35','%GLU_NURBS_ERROR36','%GLU_NURBS_ERROR37','%GLU_NURBS_ERROR4','%GLU_NURBS_ERROR5',
+ '%GLU_NURBS_ERROR6','%GLU_NURBS_ERROR7','%GLU_NURBS_ERROR8','%GLU_NURBS_ERROR9','%GLU_OUTLINE_PATCH','%GLU_OUTLINE_POLYGON','%GLU_OUTSIDE','%GLU_OUT_OF_MEMORY',
+ '%GLU_PARAMETRIC_ERROR','%GLU_PARAMETRIC_TOLERANCE','%GLU_PATH_LENGTH','%GLU_POINT','%GLU_SAMPLING_METHOD','%GLU_SAMPLING_TOLERANCE','%GLU_SILHOUETTE','%GLU_SMOOTH',
+ '%GLU_TESS_BEGIN','%GLU_TESS_BEGIN_DATA','%GLU_TESS_BOUNDARY_ONLY','%GLU_TESS_COMBINE','%GLU_TESS_COMBINE_DATA','%GLU_TESS_COORD_TOO_LARGE','%GLU_TESS_EDGE_FLAG','%GLU_TESS_EDGE_FLAG_DATA',
+ '%GLU_TESS_END','%GLU_TESS_END_DATA','%GLU_TESS_ERROR','%GLU_TESS_ERROR1','%GLU_TESS_ERROR2','%GLU_TESS_ERROR3','%GLU_TESS_ERROR4','%GLU_TESS_ERROR5',
+ '%GLU_TESS_ERROR6','%GLU_TESS_ERROR7','%GLU_TESS_ERROR8','%GLU_TESS_ERROR_DATA','%GLU_TESS_MISSING_BEGIN_CONTOUR','%GLU_TESS_MISSING_BEGIN_POLYGON','%GLU_TESS_MISSING_END_CONTOUR','%GLU_TESS_MISSING_END_POLYGON',
+ '%GLU_TESS_NEED_COMBINE_CALLBACK','%GLU_TESS_TOLERANCE','%GLU_TESS_VERTEX','%GLU_TESS_VERTEX_DATA','%GLU_TESS_WINDING_ABS_GEQ_TWO','%GLU_TESS_WINDING_NEGATIVE','%GLU_TESS_WINDING_NONZERO','%GLU_TESS_WINDING_ODD',
+ '%GLU_TESS_WINDING_POSITIVE','%GLU_TESS_WINDING_RULE','%GLU_TRUE','%GLU_UNKNOWN','%GLU_U_STEP','%GLU_VERSION','%GLU_VERSION_1_1','%GLU_VERSION_1_2',
+ '%GLU_VERTEX','%GLU_V_STEP','%GL_2D','%GL_2_BYTES','%GL_3D','%GL_3D_COLOR','%GL_3D_COLOR_TEXTURE','%GL_3_BYTES',
+ '%GL_4D_COLOR_TEXTURE','%GL_4_BYTES','%GL_ABGR_EXT','%GL_ACCUM','%GL_ACCUM_ALPHA_BITS','%GL_ACCUM_BLUE_BITS','%GL_ACCUM_BUFFER_BIT','%GL_ACCUM_CLEAR_VALUE',
+ '%GL_ACCUM_GREEN_BITS','%GL_ACCUM_RED_BITS','%GL_ADD','%GL_ALL_ATTRIB_BITS','%GL_ALPHA','%GL_ALPHA12','%GL_ALPHA16','%GL_ALPHA4',
+ '%GL_ALPHA8','%GL_ALPHA_BIAS','%GL_ALPHA_BITS','%GL_ALPHA_SCALE','%GL_ALPHA_TEST','%GL_ALPHA_TEST_FUNC','%GL_ALPHA_TEST_REF','%GL_ALWAYS',
+ '%GL_AMBIENT','%GL_AMBIENT_AND_DIFFUSE','%GL_AND','%GL_AND_INVERTED','%GL_AND_REVERSE','%GL_ARRAY_ELEMENT_LOCK_COUNT_EXT','%GL_ARRAY_ELEMENT_LOCK_FIRST_EXT','%GL_ATTRIB_STACK_DEPTH',
+ '%GL_AUTO_NORMAL','%GL_AUX0','%GL_AUX1','%GL_AUX2','%GL_AUX3','%GL_AUX_BUFFERS','%GL_BACK','%GL_BACK_LEFT',
+ '%GL_BACK_RIGHT','%GL_BGRA_EXT','%GL_BGR_EXT','%GL_BITMAP','%GL_BITMAP_TOKEN','%GL_BLEND','%GL_BLEND_COLOR_EXT','%GL_BLEND_DST',
+ '%GL_BLEND_EQUATION_EXT','%GL_BLEND_SRC','%GL_BLUE','%GL_BLUE_BIAS','%GL_BLUE_BITS','%GL_BLUE_SCALE','%GL_BYTE','%GL_C3F_V3F',
+ '%GL_C4F_N3F_V3F','%GL_C4UB_V2F','%GL_C4UB_V3F','%GL_CCW','%GL_CLAMP','%GL_CLEAR','%GL_CLIENT_ALL_ATTRIB_BITS','%GL_CLIENT_ATTRIB_STACK_DEPTH',
+ '%GL_CLIENT_PIXEL_STORE_BIT','%GL_CLIENT_VERTEX_ARRAY_BIT','%GL_CLIP_PLANE0','%GL_CLIP_PLANE1','%GL_CLIP_PLANE2','%GL_CLIP_PLANE3','%GL_CLIP_PLANE4','%GL_CLIP_PLANE5',
+ '%GL_CLIP_VOLUME_CLIPPING_HINT_EXT','%GL_COEFF','%GL_COLOR','%GL_COLOR_ARRAY','%GL_COLOR_ARRAY_COUNT_EXT','%GL_COLOR_ARRAY_EXT','%GL_COLOR_ARRAY_POINTER','%GL_COLOR_ARRAY_POINTER_EXT',
+ '%GL_COLOR_ARRAY_SIZE','%GL_COLOR_ARRAY_SIZE_EXT','%GL_COLOR_ARRAY_STRIDE','%GL_COLOR_ARRAY_STRIDE_EXT','%GL_COLOR_ARRAY_TYPE','%GL_COLOR_ARRAY_TYPE_EXT','%GL_COLOR_BUFFER_BIT','%GL_COLOR_CLEAR_VALUE',
+ '%GL_COLOR_INDEX','%GL_COLOR_INDEX12_EXT','%GL_COLOR_INDEX16_EXT','%GL_COLOR_INDEX1_EXT','%GL_COLOR_INDEX2_EXT','%GL_COLOR_INDEX4_EXT','%GL_COLOR_INDEX8_EXT','%GL_COLOR_INDEXES',
+ '%GL_COLOR_LOGIC_OP','%GL_COLOR_MATERIAL','%GL_COLOR_MATERIAL_FACE','%GL_COLOR_MATERIAL_PARAMETER','%GL_COLOR_SUM_EXT','%GL_COLOR_TABLE_ALPHA_SIZE_EXT','%GL_COLOR_TABLE_BIAS_EXT','%GL_COLOR_TABLE_BLUE_SIZE_EXT',
+ '%GL_COLOR_TABLE_EXT','%GL_COLOR_TABLE_FORMAT_EXT','%GL_COLOR_TABLE_GREEN_SIZE_EXT','%GL_COLOR_TABLE_INTENSITY_SIZE_EXT','%GL_COLOR_TABLE_LUMINANCE_SIZE_EXT','%GL_COLOR_TABLE_RED_SIZE_EXT','%GL_COLOR_TABLE_SCALE_EXT','%GL_COLOR_TABLE_WIDTH_EXT',
+ '%GL_COLOR_WRITEMASK','%GL_COMPILE','%GL_COMPILE_AND_EXECUTE','%GL_CONSTANT_ALPHA_EXT','%GL_CONSTANT_ATTENUATION','%GL_CONSTANT_COLOR_EXT','%GL_CONVOLUTION_1D_EXT','%GL_CONVOLUTION_2D_EXT',
+ '%GL_CONVOLUTION_BORDER_MODE_EXT','%GL_CONVOLUTION_FILTER_BIAS_EXT','%GL_CONVOLUTION_FILTER_SCALE_EXT','%GL_CONVOLUTION_FORMAT_EXT','%GL_CONVOLUTION_HEIGHT_EXT','%GL_CONVOLUTION_WIDTH_EXT','%GL_COPY','%GL_COPY_INVERTED',
+ '%GL_COPY_PIXEL_TOKEN','%GL_CULL_FACE','%GL_CULL_FACE_MODE','%GL_CULL_VERTEX_EXT','%GL_CULL_VERTEX_EYE_POSITION_EXT','%GL_CULL_VERTEX_OBJECT_POSITION_EXT','%GL_CURRENT_BIT','%GL_CURRENT_COLOR',
+ '%GL_CURRENT_INDEX','%GL_CURRENT_NORMAL','%GL_CURRENT_RASTER_COLOR','%GL_CURRENT_RASTER_DISTANCE','%GL_CURRENT_RASTER_INDEX','%GL_CURRENT_RASTER_POSITION','%GL_CURRENT_RASTER_POSITION_VALID','%GL_CURRENT_RASTER_TEXTURE_COORDS',
+ '%GL_CURRENT_SECONDARY_COLOR_EXT','%GL_CURRENT_TEXTURE_COORDS','%GL_CW','%GL_DECAL','%GL_DECR','%GL_DEPTH','%GL_DEPTH_BIAS','%GL_DEPTH_BITS',
+ '%GL_DEPTH_BUFFER_BIT','%GL_DEPTH_CLEAR_VALUE','%GL_DEPTH_COMPONENT','%GL_DEPTH_FUNC','%GL_DEPTH_RANGE','%GL_DEPTH_SCALE','%GL_DEPTH_TEST','%GL_DEPTH_WRITEMASK',
+ '%GL_DIFFUSE','%GL_DITHER','%GL_DOMAIN','%GL_DONT_CARE','%GL_DOUBLE','%GL_DOUBLEBUFFER','%GL_DOUBLE_EXT','%GL_DRAW_BUFFER',
+ '%GL_DRAW_PIXEL_TOKEN','%GL_DST_ALPHA','%GL_DST_COLOR','%GL_EDGE_FLAG','%GL_EDGE_FLAG_ARRAY','%GL_EDGE_FLAG_ARRAY_COUNT_EXT','%GL_EDGE_FLAG_ARRAY_EXT','%GL_EDGE_FLAG_ARRAY_POINTER',
+ '%GL_EDGE_FLAG_ARRAY_POINTER_EXT','%GL_EDGE_FLAG_ARRAY_STRIDE','%GL_EDGE_FLAG_ARRAY_STRIDE_EXT','%GL_EMISSION','%GL_ENABLE_BIT','%GL_EQUAL','%GL_EQUIV','%GL_EVAL_BIT',
+ '%GL_EXP','%GL_EXP2','%GL_EXTENSIONS','%GL_EXT_ABGR','%GL_EXT_BGRA','%GL_EXT_BLEND_COLOR','%GL_EXT_BLEND_MINMAX','%GL_EXT_BLEND_SUBTRACT',
+ '%GL_EXT_CLIP_VOLUME_HINT','%GL_EXT_COLOR_TABLE','%GL_EXT_COMPILED_VERTEX_ARRAY','%GL_EXT_CONVOLUTION','%GL_EXT_CULL_VERTEX','%GL_EXT_HISTOGRAM','%GL_EXT_PACKED_PIXELS','%GL_EXT_PALETTED_TEXTURE',
+ '%GL_EXT_POLYGON_OFFSET','%GL_EXT_SECONDARY_COLOR','%GL_EXT_SEPARATE_SPECULAR_COLOR','%GL_EXT_VERTEX_ARRAY','%GL_EYE_LINEAR','%GL_EYE_PLANE','%GL_FALSE','%GL_FASTEST',
+ '%GL_FEEDBACK','%GL_FEEDBACK_BUFFER_POINTER','%GL_FEEDBACK_BUFFER_SIZE','%GL_FEEDBACK_BUFFER_TYPE','%GL_FILL','%GL_FLAT','%GL_FLOAT','%GL_FOG',
+ '%GL_FOG_BIT','%GL_FOG_COLOR','%GL_FOG_DENSITY','%GL_FOG_END','%GL_FOG_HINT','%GL_FOG_INDEX','%GL_FOG_MODE','%GL_FOG_START',
+ '%GL_FRONT','%GL_FRONT_AND_BACK','%GL_FRONT_FACE','%GL_FRONT_LEFT','%GL_FRONT_RIGHT','%GL_FUNC_ADD_EXT','%GL_FUNC_REVERSE_SUBTRACT_EXT','%GL_FUNC_SUBTRACT_EXT',
+ '%GL_GEQUAL','%GL_GREATER','%GL_GREEN','%GL_GREEN_BIAS','%GL_GREEN_BITS','%GL_GREEN_SCALE','%GL_HINT_BIT','%GL_HISTOGRAM_ALPHA_SIZE_EXT',
+ '%GL_HISTOGRAM_BLUE_SIZE_EXT','%GL_HISTOGRAM_EXT','%GL_HISTOGRAM_FORMAT_EXT','%GL_HISTOGRAM_GREEN_SIZE_EXT','%GL_HISTOGRAM_LUMINANCE_SIZE_EXT','%GL_HISTOGRAM_RED_SIZE_EXT','%GL_HISTOGRAM_SINK_EXT','%GL_HISTOGRAM_WIDTH_EXT',
+ '%GL_INCR','%GL_INDEX_ARRAY','%GL_INDEX_ARRAY_COUNT_EXT','%GL_INDEX_ARRAY_EXT','%GL_INDEX_ARRAY_POINTER','%GL_INDEX_ARRAY_POINTER_EXT','%GL_INDEX_ARRAY_STRIDE','%GL_INDEX_ARRAY_STRIDE_EXT',
+ '%GL_INDEX_ARRAY_TYPE','%GL_INDEX_ARRAY_TYPE_EXT','%GL_INDEX_BITS','%GL_INDEX_CLEAR_VALUE','%GL_INDEX_LOGIC_OP','%GL_INDEX_MODE','%GL_INDEX_OFFSET','%GL_INDEX_SHIFT',
+ '%GL_INDEX_WRITEMASK','%GL_INT','%GL_INTENSITY','%GL_INTENSITY12','%GL_INTENSITY16','%GL_INTENSITY4','%GL_INTENSITY8','%GL_INVALID_ENUM',
+ '%GL_INVALID_OPERATION','%GL_INVALID_VALUE','%GL_INVERT','%GL_KEEP','%GL_LEFT','%GL_LEQUAL','%GL_LESS','%GL_LIGHT0',
+ '%GL_LIGHT1','%GL_LIGHT2','%GL_LIGHT3','%GL_LIGHT4','%GL_LIGHT5','%GL_LIGHT6','%GL_LIGHT7','%GL_LIGHTING',
+ '%GL_LIGHTING_BIT','%GL_LIGHT_MODEL_AMBIENT','%GL_LIGHT_MODEL_COLOR_CONTROL_EXT','%GL_LIGHT_MODEL_LOCAL_VIEWER','%GL_LIGHT_MODEL_TWO_SIDE','%GL_LINE','%GL_LINEAR','%GL_LINEAR_ATTENUATION',
+ '%GL_LINEAR_MIPMAP_LINEAR','%GL_LINEAR_MIPMAP_NEAREST','%GL_LINES','%GL_LINE_BIT','%GL_LINE_LOOP','%GL_LINE_RESET_TOKEN','%GL_LINE_SMOOTH','%GL_LINE_SMOOTH_HINT',
+ '%GL_LINE_STIPPLE','%GL_LINE_STIPPLE_PATTERN','%GL_LINE_STIPPLE_REPEAT','%GL_LINE_STRIP','%GL_LINE_TOKEN','%GL_LINE_WIDTH','%GL_LINE_WIDTH_GRANULARITY','%GL_LINE_WIDTH_RANGE',
+ '%GL_LIST_BASE','%GL_LIST_BIT','%GL_LIST_INDEX','%GL_LIST_MODE','%GL_LOAD','%GL_LOGIC_OP','%GL_LOGIC_OP_MODE','%GL_LUMINANCE',
+ '%GL_LUMINANCE12','%GL_LUMINANCE12_ALPHA12','%GL_LUMINANCE12_ALPHA4','%GL_LUMINANCE16','%GL_LUMINANCE16_ALPHA16','%GL_LUMINANCE4','%GL_LUMINANCE4_ALPHA4','%GL_LUMINANCE6_ALPHA2',
+ '%GL_LUMINANCE8','%GL_LUMINANCE8_ALPHA8','%GL_LUMINANCE_ALPHA','%GL_MAP1_COLOR_4','%GL_MAP1_GRID_DOMAIN','%GL_MAP1_GRID_SEGMENTS','%GL_MAP1_INDEX','%GL_MAP1_NORMAL',
+ '%GL_MAP1_TEXTURE_COORD_1','%GL_MAP1_TEXTURE_COORD_2','%GL_MAP1_TEXTURE_COORD_3','%GL_MAP1_TEXTURE_COORD_4','%GL_MAP1_VERTEX_3','%GL_MAP1_VERTEX_4','%GL_MAP2_COLOR_4','%GL_MAP2_GRID_DOMAIN',
+ '%GL_MAP2_GRID_SEGMENTS','%GL_MAP2_INDEX','%GL_MAP2_NORMAL','%GL_MAP2_TEXTURE_COORD_1','%GL_MAP2_TEXTURE_COORD_2','%GL_MAP2_TEXTURE_COORD_3','%GL_MAP2_TEXTURE_COORD_4','%GL_MAP2_VERTEX_3',
+ '%GL_MAP2_VERTEX_4','%GL_MAP_COLOR','%GL_MAP_STENCIL','%GL_MATRIX_MODE','%GL_MAX_ATTRIB_STACK_DEPTH','%GL_MAX_CLIENT_ATTRIB_STACK_DEPTH','%GL_MAX_CLIP_PLANES','%GL_MAX_CONVOLUTION_HEIGHT_EXT',
+ '%GL_MAX_CONVOLUTION_WIDTH_EXT','%GL_MAX_EVAL_ORDER','%GL_MAX_EXT','%GL_MAX_LIGHTS','%GL_MAX_LIST_NESTING','%GL_MAX_MODELVIEW_STACK_DEPTH','%GL_MAX_NAME_STACK_DEPTH','%GL_MAX_PIXEL_MAP_TABLE',
+ '%GL_MAX_PROJECTION_STACK_DEPTH','%GL_MAX_TEXTURE_SIZE','%GL_MAX_TEXTURE_STACK_DEPTH','%GL_MAX_VIEWPORT_DIMS','%GL_MINMAX_EXT','%GL_MINMAX_FORMAT_EXT','%GL_MINMAX_SINK_EXT','%GL_MIN_EXT',
+ '%GL_MODELVIEW','%GL_MODELVIEW_MATRIX','%GL_MODELVIEW_STACK_DEPTH','%GL_MODULATE','%GL_MULT','%GL_N3F_V3F','%GL_NAME_STACK_DEPTH','%GL_NAND',
+ '%GL_NEAREST','%GL_NEAREST_MIPMAP_LINEAR','%GL_NEAREST_MIPMAP_NEAREST','%GL_NEVER','%GL_NICEST','%GL_NONE','%GL_NOOP','%GL_NOR',
+ '%GL_NORMALIZE','%GL_NORMAL_ARRAY','%GL_NORMAL_ARRAY_COUNT_EXT','%GL_NORMAL_ARRAY_EXT','%GL_NORMAL_ARRAY_POINTER','%GL_NORMAL_ARRAY_POINTER_EXT','%GL_NORMAL_ARRAY_STRIDE','%GL_NORMAL_ARRAY_STRIDE_EXT',
+ '%GL_NORMAL_ARRAY_TYPE','%GL_NORMAL_ARRAY_TYPE_EXT','%GL_NOTEQUAL','%GL_NO_ERROR','%GL_OBJECT_LINEAR','%GL_OBJECT_PLANE','%GL_ONE','%GL_ONE_MINUS_CONSTANT_ALPHA_EXT',
+ '%GL_ONE_MINUS_CONSTANT_COLOR_EXT','%GL_ONE_MINUS_DST_ALPHA','%GL_ONE_MINUS_DST_COLOR','%GL_ONE_MINUS_SRC_ALPHA','%GL_ONE_MINUS_SRC_COLOR','%GL_OR','%GL_ORDER','%GL_OR_INVERTED',
+ '%GL_OR_REVERSE','%GL_OUT_OF_MEMORY','%GL_PACK_ALIGNMENT','%GL_PACK_LSB_FIRST','%GL_PACK_ROW_LENGTH','%GL_PACK_SKIP_PIXELS','%GL_PACK_SKIP_ROWS','%GL_PACK_SWAP_BYTES',
+ '%GL_PASS_THROUGH_TOKEN','%GL_PERSPECTIVE_CORRECTION_HINT','%GL_PIXEL_MAP_A_TO_A','%GL_PIXEL_MAP_A_TO_A_SIZE','%GL_PIXEL_MAP_B_TO_B','%GL_PIXEL_MAP_B_TO_B_SIZE','%GL_PIXEL_MAP_G_TO_G','%GL_PIXEL_MAP_G_TO_G_SIZE',
+ '%GL_PIXEL_MAP_I_TO_A','%GL_PIXEL_MAP_I_TO_A_SIZE','%GL_PIXEL_MAP_I_TO_B','%GL_PIXEL_MAP_I_TO_B_SIZE','%GL_PIXEL_MAP_I_TO_G','%GL_PIXEL_MAP_I_TO_G_SIZE','%GL_PIXEL_MAP_I_TO_I','%GL_PIXEL_MAP_I_TO_I_SIZE',
+ '%GL_PIXEL_MAP_I_TO_R','%GL_PIXEL_MAP_I_TO_R_SIZE','%GL_PIXEL_MAP_R_TO_R','%GL_PIXEL_MAP_R_TO_R_SIZE','%GL_PIXEL_MAP_S_TO_S','%GL_PIXEL_MAP_S_TO_S_SIZE','%GL_PIXEL_MODE_BIT','%GL_POINT',
+ '%GL_POINTS','%GL_POINT_BIT','%GL_POINT_SIZE','%GL_POINT_SIZE_GRANULARITY','%GL_POINT_SIZE_RANGE','%GL_POINT_SMOOTH','%GL_POINT_SMOOTH_HINT','%GL_POINT_TOKEN',
+ '%GL_POLYGON','%GL_POLYGON_BIT','%GL_POLYGON_MODE','%GL_POLYGON_OFFSET_BIAS_EXT','%GL_POLYGON_OFFSET_EXT','%GL_POLYGON_OFFSET_FACTOR','%GL_POLYGON_OFFSET_FACTOR_EXT','%GL_POLYGON_OFFSET_FILL',
+ '%GL_POLYGON_OFFSET_LINE','%GL_POLYGON_OFFSET_POINT','%GL_POLYGON_OFFSET_UNITS','%GL_POLYGON_SMOOTH','%GL_POLYGON_SMOOTH_HINT','%GL_POLYGON_STIPPLE','%GL_POLYGON_STIPPLE_BIT','%GL_POLYGON_TOKEN',
+ '%GL_POSITION','%GL_POST_COLOR_MATRIX_COLOR_TABLE_EXT','%GL_POST_CONVOLUTION_ALPHA_BIAS_EXT','%GL_POST_CONVOLUTION_ALPHA_SCALE_EXT','%GL_POST_CONVOLUTION_BLUE_BIAS_EXT','%GL_POST_CONVOLUTION_BLUE_SCALE_EXT','%GL_POST_CONVOLUTION_COLOR_TABLE_EXT','%GL_POST_CONVOLUTION_GREEN_BIAS_EXT',
+ '%GL_POST_CONVOLUTION_GREEN_SCALE_EXT','%GL_POST_CONVOLUTION_RED_BIAS_EXT','%GL_POST_CONVOLUTION_RED_SCALE_EXT','%GL_PROJECTION','%GL_PROJECTION_MATRIX','%GL_PROJECTION_STACK_DEPTH','%GL_PROXY_COLOR_TABLE_EXT','%GL_PROXY_HISTOGRAM_EXT',
+ '%GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_EXT','%GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_EXT','%GL_PROXY_TEXTURE_1D','%GL_PROXY_TEXTURE_2D','%GL_Q','%GL_QUADRATIC_ATTENUATION','%GL_QUADS','%GL_QUAD_STRIP',
+ '%GL_R','%GL_R3_G3_B2','%GL_READ_BUFFER','%GL_RED','%GL_REDUCE_EXT','%GL_RED_BIAS','%GL_RED_BITS','%GL_RED_SCALE',
+ '%GL_RENDER','%GL_RENDERER','%GL_RENDER_MODE','%GL_REPEAT','%GL_REPLACE','%GL_RETURN','%GL_RGB','%GL_RGB10',
+ '%GL_RGB10_A2','%GL_RGB12','%GL_RGB16','%GL_RGB4','%GL_RGB5','%GL_RGB5_A1','%GL_RGB8','%GL_RGBA',
+ '%GL_RGBA12','%GL_RGBA16','%GL_RGBA2','%GL_RGBA4','%GL_RGBA8','%GL_RGBA_MODE','%GL_RIGHT','%GL_S',
+ '%GL_SCISSOR_BIT','%GL_SCISSOR_BOX','%GL_SCISSOR_TEST','%GL_SECONDARY_COLOR_ARRAY_EXT','%GL_SECONDARY_COLOR_ARRAY_POINTER_EXT','%GL_SECONDARY_COLOR_ARRAY_SIZE_EXT','%GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT','%GL_SECONDARY_COLOR_ARRAY_TYPE_EXT',
+ '%GL_SELECT','%GL_SELECTION_BUFFER_POINTER','%GL_SELECTION_BUFFER_SIZE','%GL_SEPARABLE_2D_EXT','%GL_SEPARATE_SPECULAR_COLOR_EXT','%GL_SET','%GL_SHADE_MODEL','%GL_SHININESS',
+ '%GL_SHORT','%GL_SINGLE_COLOR_EXT','%GL_SMOOTH','%GL_SPECULAR','%GL_SPHERE_MAP','%GL_SPOT_CUTOFF','%GL_SPOT_DIRECTION','%GL_SPOT_EXPONENT',
+ '%GL_SRC_ALPHA','%GL_SRC_ALPHA_SATURATE','%GL_SRC_COLOR','%GL_STACK_OVERFLOW','%GL_STACK_UNDERFLOW','%GL_STENCIL','%GL_STENCIL_BITS','%GL_STENCIL_BUFFER_BIT',
+ '%GL_STENCIL_CLEAR_VALUE','%GL_STENCIL_FAIL','%GL_STENCIL_FUNC','%GL_STENCIL_INDEX','%GL_STENCIL_PASS_DEPTH_FAIL','%GL_STENCIL_PASS_DEPTH_PASS','%GL_STENCIL_REF','%GL_STENCIL_TEST',
+ '%GL_STENCIL_VALUE_MASK','%GL_STENCIL_WRITEMASK','%GL_STEREO','%GL_SUBPIXEL_BITS','%GL_T','%GL_T2F_C3F_V3F','%GL_T2F_C4F_N3F_V3F','%GL_T2F_C4UB_V3F',
+ '%GL_T2F_N3F_V3F','%GL_T2F_V3F','%GL_T4F_C4F_N3F_V4F','%GL_T4F_V4F','%GL_TABLE_TOO_LARGE_EXT','%GL_TEXTURE','%GL_TEXTURE_1D','%GL_TEXTURE_2D',
+ '%GL_TEXTURE_ALPHA_SIZE','%GL_TEXTURE_BINDING_1D','%GL_TEXTURE_BINDING_2D','%GL_TEXTURE_BIT','%GL_TEXTURE_BLUE_SIZE','%GL_TEXTURE_BORDER','%GL_TEXTURE_BORDER_COLOR','%GL_TEXTURE_COMPONENTS',
+ '%GL_TEXTURE_COORD_ARRAY','%GL_TEXTURE_COORD_ARRAY_COUNT_EXT','%GL_TEXTURE_COORD_ARRAY_EXT','%GL_TEXTURE_COORD_ARRAY_POINTER','%GL_TEXTURE_COORD_ARRAY_POINTER_EXT','%GL_TEXTURE_COORD_ARRAY_SIZE','%GL_TEXTURE_COORD_ARRAY_SIZE_EXT','%GL_TEXTURE_COORD_ARRAY_STRIDE',
+ '%GL_TEXTURE_COORD_ARRAY_STRIDE_EXT','%GL_TEXTURE_COORD_ARRAY_TYPE','%GL_TEXTURE_COORD_ARRAY_TYPE_EXT','%GL_TEXTURE_ENV','%GL_TEXTURE_ENV_COLOR','%GL_TEXTURE_ENV_MODE','%GL_TEXTURE_GEN_MODE','%GL_TEXTURE_GEN_Q',
+ '%GL_TEXTURE_GEN_R','%GL_TEXTURE_GEN_S','%GL_TEXTURE_GEN_T','%GL_TEXTURE_GREEN_SIZE','%GL_TEXTURE_HEIGHT','%GL_TEXTURE_INTENSITY_SIZE','%GL_TEXTURE_INTERNAL_FORMAT','%GL_TEXTURE_LUMINANCE_SIZE',
+ '%GL_TEXTURE_MAG_FILTER','%GL_TEXTURE_MATRIX','%GL_TEXTURE_MIN_FILTER','%GL_TEXTURE_PRIORITY','%GL_TEXTURE_RED_SIZE','%GL_TEXTURE_RESIDENT','%GL_TEXTURE_STACK_DEPTH','%GL_TEXTURE_WIDTH',
+ '%GL_TEXTURE_WRAP_S','%GL_TEXTURE_WRAP_T','%GL_TRANSFORM_BIT','%GL_TRIANGLES','%GL_TRIANGLE_FAN','%GL_TRIANGLE_STRIP','%GL_TRUE','%GL_UNPACK_ALIGNMENT',
+ '%GL_UNPACK_LSB_FIRST','%GL_UNPACK_ROW_LENGTH','%GL_UNPACK_SKIP_PIXELS','%GL_UNPACK_SKIP_ROWS','%GL_UNPACK_SWAP_BYTES','%GL_UNSIGNED_BYTE','%GL_UNSIGNED_BYTE_3_3_2_EXT','%GL_UNSIGNED_INT',
+ '%GL_UNSIGNED_INT_10_10_10_2_EXT','%GL_UNSIGNED_INT_8_8_8_8_EXT','%GL_UNSIGNED_SHORT','%GL_UNSIGNED_SHORT_4_4_4_4_EXT','%GL_UNSIGNED_SHORT_5_5_5_1_EXT','%GL_V2F','%GL_V3F','%GL_VENDOR',
+ '%GL_VERSION','%GL_VERSION_1_1','%GL_VERTEX_ARRAY','%GL_VERTEX_ARRAY_COUNT_EXT','%GL_VERTEX_ARRAY_EXT','%GL_VERTEX_ARRAY_POINTER','%GL_VERTEX_ARRAY_POINTER_EXT','%GL_VERTEX_ARRAY_SIZE',
+ '%GL_VERTEX_ARRAY_SIZE_EXT','%GL_VERTEX_ARRAY_STRIDE','%GL_VERTEX_ARRAY_STRIDE_EXT','%GL_VERTEX_ARRAY_TYPE','%GL_VERTEX_ARRAY_TYPE_EXT','%GL_VIEWPORT','%GL_VIEWPORT_BIT','%GL_WIN_SWAP_HINT',
+ '%GL_XOR','%GL_ZERO','%GL_ZOOM_X','%GL_ZOOM_Y','%GRAY','%GREEN','%GWLP_HINSTANCE','%GWLP_HWNDPARENT',
+ '%GWLP_ID','%GWLP_USERDATA','%GWLP_WNDPROC','%GWL_EXSTYLE','%GWL_HINSTANCE','%GWL_HWNDPARENT','%GWL_ID','%GWL_STYLE',
+ '%GWL_USERDATA','%GWL_WNDPROC','%HDM_FIRST','%HTCAPTION','%HWND_BOTTOM','%HWND_DESKTOP','%HWND_MESSAGE','%HWND_NOTOPMOST',
+ '%HWND_TOP','%HWND_TOPMOST','%ICRYPTO_XOR_DECREASE','%ICRYPTO_XOR_INCREASE','%ICRYPTO_XOR_NORMAL','%IDABORT','%IDCANCEL','%IDCONTINUE',
+ '%IDIGNORE','%IDNO','%IDOK','%IDRETRY','%IDTIMEOUT','%IDTRYAGAIN','%IDYES','%INTERNET_CONNECTION_CONFIGURED',
+ '%INTERNET_CONNECTION_LAN','%INTERNET_CONNECTION_MODEM','%INTERNET_CONNECTION_MODEM_BUSY','%INTERNET_CONNECTION_OFFLINE','%INTERNET_CONNECTION_PROXY','%INTERNET_RAS_INSTALLED','%LBN_DBLCLK','%LBN_KILLFOCUS',
+ '%LBN_SELCANCEL','%LBN_SELCHANGE','%LBN_SETFOCUS','%LBS_DISABLENOSCROLL','%LBS_EXTENDEDSEL','%LBS_MULTICOLUMN','%LBS_MULTIPLESEL','%LBS_NOINTEGRALHEIGHT',
+ '%LBS_NOSEL','%LBS_NOTIFY','%LBS_SORT','%LBS_STANDARD','%LBS_USETABSTOPS','%LB_ADDFILE','%LB_ADDSTRING','%LB_DELETESTRING',
+ '%LB_DIR','%LB_FINDSTRING','%LB_FINDSTRINGEXACT','%LB_GETANCHORINDEX','%LB_GETCARETINDEX','%LB_GETCOUNT','%LB_GETCURSEL','%LB_GETHORIZONTALEXTENT',
+ '%LB_GETITEMDATA','%LB_GETITEMHEIGHT','%LB_GETITEMRECT','%LB_GETLISTBOXINFO','%LB_GETLOCALE','%LB_GETSEL','%LB_GETSELCOUNT','%LB_GETSELITEMS',
+ '%LB_GETTEXT','%LB_GETTEXTLEN','%LB_GETTOPINDEX','%LB_INITSTORAGE','%LB_INSERTSTRING','%LB_ITEMFROMPOINT','%LB_MULTIPLEADDSTRING','%LB_RESETCONTENT',
+ '%LB_SELECTSTRING','%LB_SELITEMRANGE','%LB_SELITEMRANGEEX','%LB_SETANCHORINDEX','%LB_SETCARETINDEX','%LB_SETCOLUMNWIDTH','%LB_SETCOUNT','%LB_SETCURSEL',
+ '%LB_SETHORIZONTALEXTENT','%LB_SETITEMDATA','%LB_SETITEMHEIGHT','%LB_SETLOCALE','%LB_SETSEL','%LB_SETTABSTOPS','%LB_SETTOPINDEX','%LF_FACESIZE',
+ '%LTGRAY','%LVM_FIRST','%LWA_ALPHA','%LWA_COLORKEY','%MAGENTA','%MAXBYTE','%MAXCHAR','%MAXDWORD',
+ '%MAXSHORT','%MAXWORD','%MAX_PATH','%MB_ABORTRETRYIGNORE','%MB_APPLMODAL','%MB_CANCELTRYCONTINUE','%MB_DEFBUTTON1','%MB_DEFBUTTON2',
+ '%MB_DEFBUTTON3','%MB_HELP','%MB_ICONASTERISK','%MB_ICONERROR','%MB_ICONEXCLAMATION','%MB_ICONHAND','%MB_ICONINFORMATION','%MB_ICONQUESTION',
+ '%MB_ICONSTOP','%MB_ICONWARNING','%MB_OK','%MB_OKCANCEL','%MB_RETRYCANCEL','%MB_SIMPLE','%MB_SYSTEMMODAL','%MB_TOPMOST',
+ '%MB_YESNO','%MB_YESNOCANCEL','%MF_CHECKED','%MF_DISABLED','%MF_ENABLED','%MF_GRAYED','%MF_SEPARATOR','%MF_UNCHECKED',
+ '%MINCHAR','%MINLONG','%MINSHORT','%NULL','%ODBC352_INC','%ODBCVER','%ODBC_ADD_DSN','%ODBC_ADD_SYS_DSN',
+ '%ODBC_BOTH_DSN','%ODBC_CONFIG_DRIVER','%ODBC_CONFIG_DRIVER_MAX','%ODBC_CONFIG_DSN','%ODBC_CONFIG_SYS_DSN','%ODBC_DRIVER_VERSION','%ODBC_ERROR_COMPONENT_NOT_FOUND','%ODBC_ERROR_CREATE_DSN_FAILED',
+ '%ODBC_ERROR_GENERAL_ERR','%ODBC_ERROR_INVALID_BUFF_LEN','%ODBC_ERROR_INVALID_DSN','%ODBC_ERROR_INVALID_HWND','%ODBC_ERROR_INVALID_INF','%ODBC_ERROR_INVALID_KEYWORD_VALUE','%ODBC_ERROR_INVALID_LOG_FILE','%ODBC_ERROR_INVALID_NAME',
+ '%ODBC_ERROR_INVALID_PARAM_SEQUENCE','%ODBC_ERROR_INVALID_PATH','%ODBC_ERROR_INVALID_REQUEST_TYPE','%ODBC_ERROR_INVALID_STR','%ODBC_ERROR_LOAD_LIB_FAILED','%ODBC_ERROR_OUTPUT_STRING_TRUNCATED','%ODBC_ERROR_OUT_OF_MEM','%ODBC_ERROR_REMOVE_DSN_FAILED',
+ '%ODBC_ERROR_REQUEST_FAILED','%ODBC_ERROR_USAGE_UPDATE_FAILED','%ODBC_ERROR_USER_CANCELED','%ODBC_ERROR_WRITING_SYSINFO_FAILED','%ODBC_INSTALL_COMPLETE','%ODBC_INSTALL_DRIVER','%ODBC_INSTALL_INQUIRY','%ODBC_REMOVE_DEFAULT_DSN',
+ '%ODBC_REMOVE_DRIVER','%ODBC_REMOVE_DSN','%ODBC_REMOVE_SYS_DSN','%ODBC_SYSTEM_DSN','%ODBC_USER_DSN','%OFN_ALLOWMULTISELECT','%OFN_CREATEPROMPT','%OFN_ENABLEHOOK',
+ '%OFN_ENABLEINCLUDENOTIFY','%OFN_ENABLESIZING','%OFN_ENABLETEMPLATE','%OFN_ENABLETEMPLATEHANDLE','%OFN_EXPLORER','%OFN_EXTENSIONDIFFERENT','%OFN_FILEMUSTEXIST','%OFN_HIDEREADONLY',
+ '%OFN_LONGNAMES','%OFN_NOCHANGEDIR','%OFN_NODEREFERENCELINKS','%OFN_NOLONGNAMES','%OFN_NONETWORKBUTTON','%OFN_NOREADONLYRETURN','%OFN_NOTESTFILECREATE','%OFN_NOVALIDATE',
+ '%OFN_OVERWRITEPROMPT','%OFN_PATHMUSTEXIST','%OFN_READONLY','%OFN_SHAREAWARE','%OFN_SHOWHELP','%OS_ERROR_CALLFUNCTION','%OS_ERROR_EMPTYSTRING','%OS_ERROR_LOADLIBRARY',
+ '%OS_ERROR_SUCCESS','%OS_ERROR_WRONGPARAMETER','%OS_SHELL_ASYNC','%OS_SHELL_SYNC','%OS_WINDOWS_2K','%OS_WINDOWS_95','%OS_WINDOWS_95_OSR2','%OS_WINDOWS_98',
+ '%OS_WINDOWS_98_SE','%OS_WINDOWS_ME','%OS_WINDOWS_NT','%OS_WINDOWS_SERVER_2003','%OS_WINDOWS_SERVER_LONGHORN','%OS_WINDOWS_SERVER_LONGHORN_DC','%OS_WINDOWS_VISTA','%OS_WINDOWS_XP',
+ '%OS_WNDSTYLE_HIDE','%OS_WNDSTYLE_MAXIMIZED','%OS_WNDSTYLE_MINIMIZED','%OS_WNDSTYLE_MINIMIZEDNOFOCUS','%OS_WNDSTYLE_NORMAL','%OS_WNDSTYLE_NORMALNOFOCUS','%PATH_EXT','%PATH_FILE',
+ '%PATH_FILEEXT','%PATH_ROOT','%PATH_ROOTPATH','%PATH_ROOTPATHPROG','%PATH_ROOTPATHPROGEXT','%PBM_DELTAPOS','%PBM_GETPOS','%PBM_GETRANGE',
+ '%PBM_SETBARCOLOR','%PBM_SETBKCOLOR','%PBM_SETPOS','%PBM_SETRANGE','%PBM_SETRANGE32','%PBM_SETSTEP','%PBM_STEPIT','%PBS_SMOOTH',
+ '%PBS_VERTICAL','%PC_DISABLEWAKEEVENT_OFF','%PC_DISABLEWAKEEVENT_ON','%PC_EB_NOCONFIRMATION','%PC_EB_NOPROGRESSUI','%PC_EB_NORMAL','%PC_EB_NOSOUND','%PC_FORCECRITICAL_OFF',
+ '%PC_FORCECRITICAL_ON','%PC_HIBERNATE_OFF','%PC_HIBERNATE_ON','%PC_RD_FORCE','%PC_RD_FORCEIFHUNG','%PC_RD_LOGOFF','%PC_RD_POWEROFF','%PC_RD_REBOOT',
+ '%PC_RD_SHUTDOWN','%PC_SD_DONOT_FORCE','%PC_SD_DONOT_REBOOT','%PC_SD_FORCE','%PC_SD_REBOOT','%PFA_CENTER','%PFA_LEFT','%PFA_RIGHT',
+ '%PF_3DNOW_INSTRUCTIONS_AVAILABLE','%PF_CHANNELS_ENABLED','%PF_COMPARE64_EXCHANGE128','%PF_COMPARE_EXCHANGE128','%PF_COMPARE_EXCHANGE_DOUBLE','%PF_FLOATING_POINT_EMULATED','%PF_FLOATING_POINT_PRECISION_ERRATA','%PF_MMX_INSTRUCTIONS_AVAILABLE',
+ '%PF_NX_ENABLED','%PF_PAE_ENABLED','%PF_RDTSC_INSTRUCTION_AVAILABLE','%PF_SSE3_INSTRUCTIONS_AVAILABLE','%PF_XMMI64_INSTRUCTIONS_AVAILABLE','%PF_XMMI_INSTRUCTIONS_AVAILABLE','%PGM_FIRST','%RED',
+ '%RTF_UBB','%SAPI_SVSFDEFAULT','%SAPI_SVSFISFILENAME','%SAPI_SVSFISNOTXML','%SAPI_SVSFISXML','%SAPI_SVSFLAGSASYNC','%SAPI_SVSFNLPMASK','%SAPI_SVSFNLPSPEAKPUNC',
+ '%SAPI_SVSFPERSISTXML','%SAPI_SVSFPURGEBEFORESPEAK','%SAPI_SVSFUNUSEDFLAGS','%SAPI_SVSFVOICEMASK','%SBS_SIZEGRIP','%SB_BOTTOM','%SB_ENDSCROLL','%SB_LEFT',
+ '%SB_LINEDOWN','%SB_LINELEFT','%SB_LINERIGHT','%SB_LINEUP','%SB_PAGEDOWN','%SB_PAGELEFT','%SB_PAGERIGHT','%SB_PAGEUP',
+ '%SB_RIGHT','%SB_SETPARTS','%SB_SETTEXT','%SB_THUMBPOSITION','%SB_THUMBTRACK','%SB_TOP','%SCF_ALL','%SCF_ASSOCIATEFONT',
+ '%SCF_DEFAULT','%SCF_NOKBUPDATE','%SCF_SELECTION','%SCF_USEUIRULES','%SCF_WORD','%SC_CLOSE','%SC_CONTEXTHELP','%SC_HOTKEY',
+ '%SC_HSCROLL','%SC_KEYMENU','%SC_MAXIMIZE','%SC_MINIMIZE','%SC_MONITORPOWER','%SC_MOUSEMENU','%SC_MOVE','%SC_NEXTWINDOW',
+ '%SC_PREVWINDOW','%SC_RESTORE','%SC_SCREENSAVE','%SC_SIZE','%SC_TASKLIST','%SC_VSCROLL','%SERVICE_ACTIVE','%SERVICE_AUTO_START',
+ '%SERVICE_BOOT_START','%SERVICE_CONTINUE_PENDING','%SERVICE_DEMAND_START','%SERVICE_DISABLED','%SERVICE_DRIVER','%SERVICE_INACTIVE','%SERVICE_INFO_DISPLAY_NAME','%SERVICE_INFO_NAME',
+ '%SERVICE_PAUSED','%SERVICE_PAUSE_PENDING','%SERVICE_RUNNING','%SERVICE_START_PENDING','%SERVICE_STATE_ALL','%SERVICE_STOPPED','%SERVICE_STOP_PENDING','%SERVICE_SYSTEM_START',
+ '%SERVICE_TYPE_ALL','%SERVICE_WIN32','%SES_ALLOWBEEPS','%SES_BEEPONMAXTEXT','%SES_BIDI','%SES_EMULATE10','%SES_EMULATESYSEDIT','%SES_EXTENDBACKCOLOR',
+ '%SES_LOWERCASE','%SES_MAPCPS','%SES_NOIME','%SES_NOINPUTSEQUENCECHK','%SES_SCROLLONKILLFOCUS','%SES_UPPERCASE','%SES_USEAIMM','%SES_USECRLF',
+ '%SES_XLTCRCRLFTOCR','%SF_RTF','%SF_TEXT','%SMTP_SET_ATTACH_CONTENT_TYPE','%SMTP_SET_CONTENT_TYPE_PREFIX','%SQL_AA_FALSE','%SQL_AA_TRUE','%SQL_ACCESSIBLE_PROCEDURES',
+ '%SQL_ACCESSIBLE_TABLES','%SQL_ACCESS_MODE','%SQL_ACTIVE_CONNECTIONS','%SQL_ACTIVE_ENVIRONMENTS','%SQL_ACTIVE_STATEMENTS','%SQL_ADD','%SQL_AD_ADD_CONSTRAINT_DEFERRABLE','%SQL_AD_ADD_CONSTRAINT_INITIALLY_DEFERRED',
+ '%SQL_AD_ADD_CONSTRAINT_INITIALLY_IMMEDIATE','%SQL_AD_ADD_CONSTRAINT_NON_DEFERRABLE','%SQL_AD_ADD_DOMAIN_CONSTRAINT','%SQL_AD_ADD_DOMAIN_DEFAULT','%SQL_AD_CONSTRAINT_NAME_DEFINITION','%SQL_AD_DROP_DOMAIN_CONSTRAINT','%SQL_AD_DROP_DOMAIN_DEFAULT','%SQL_AF_ALL',
+ '%SQL_AF_AVG','%SQL_AF_COUNT','%SQL_AF_DISTINCT','%SQL_AF_MAX','%SQL_AF_MIN','%SQL_AF_SUM','%SQL_AGGREGATE_FUNCTIONS','%SQL_ALL_EXCEPT_LIKE',
+ '%SQL_ALL_TYPES','%SQL_ALTER_DOMAIN','%SQL_ALTER_TABLE','%SQL_AM_CONNECTION','%SQL_AM_NONE','%SQL_AM_STATEMENT','%SQL_API_ALL_FUNCTIONS','%SQL_API_LOADBYORDINAL',
+ '%SQL_API_ODBC3_ALL_FUNCTIONS','%SQL_API_ODBC3_ALL_FUNCTIONS_SIZE','%SQL_API_SQLALLOCCONNECT','%SQL_API_SQLALLOCENV','%SQL_API_SQLALLOCHANDLE','%SQL_API_SQLALLOCHANDLESTD','%SQL_API_SQLALLOCSTMT','%SQL_API_SQLBINDCOL',
+ '%SQL_API_SQLBINDPARAM','%SQL_API_SQLBINDPARAMETER','%SQL_API_SQLBROWSECONNECT','%SQL_API_SQLBULKOPERATIONS','%SQL_API_SQLCANCEL','%SQL_API_SQLCLOSECURSOR','%SQL_API_SQLCOLATTRIBUTE','%SQL_API_SQLCOLATTRIBUTES',
+ '%SQL_API_SQLCOLUMNPRIVILEGES','%SQL_API_SQLCOLUMNS','%SQL_API_SQLCONNECT','%SQL_API_SQLCOPYDESC','%SQL_API_SQLDATASOURCES','%SQL_API_SQLDESCRIBECOL','%SQL_API_SQLDESCRIBEPARAM','%SQL_API_SQLDISCONNECT',
+ '%SQL_API_SQLDRIVERCONNECT','%SQL_API_SQLDRIVERS','%SQL_API_SQLENDTRAN','%SQL_API_SQLERROR','%SQL_API_SQLEXECDIRECT','%SQL_API_SQLEXECUTE','%SQL_API_SQLEXTENDEDFETCH','%SQL_API_SQLFETCH',
+ '%SQL_API_SQLFETCHSCROLL','%SQL_API_SQLFOREIGNKEYS','%SQL_API_SQLFREECONNECT','%SQL_API_SQLFREEENV','%SQL_API_SQLFREEHANDLE','%SQL_API_SQLFREESTMT','%SQL_API_SQLGETCONNECTATTR','%SQL_API_SQLGETCONNECTOPTION',
+ '%SQL_API_SQLGETCURSORNAME','%SQL_API_SQLGETDATA','%SQL_API_SQLGETDESCFIELD','%SQL_API_SQLGETDESCREC','%SQL_API_SQLGETDIAGFIELD','%SQL_API_SQLGETDIAGREC','%SQL_API_SQLGETENVATTR','%SQL_API_SQLGETFUNCTIONS',
+ '%SQL_API_SQLGETINFO','%SQL_API_SQLGETSTMTATTR','%SQL_API_SQLGETSTMTOPTION','%SQL_API_SQLGETTYPEINFO','%SQL_API_SQLMORERESULTS','%SQL_API_SQLNATIVESQL','%SQL_API_SQLNUMPARAMS','%SQL_API_SQLNUMRESULTCOLS',
+ '%SQL_API_SQLPARAMDATA','%SQL_API_SQLPARAMOPTIONS','%SQL_API_SQLPREPARE','%SQL_API_SQLPRIMARYKEYS','%SQL_API_SQLPROCEDURECOLUMNS','%SQL_API_SQLPROCEDURES','%SQL_API_SQLPUTDATA','%SQL_API_SQLROWCOUNT',
+ '%SQL_API_SQLSETCONNECTATTR','%SQL_API_SQLSETCONNECTOPTION','%SQL_API_SQLSETCURSORNAME','%SQL_API_SQLSETDESCFIELD','%SQL_API_SQLSETDESCREC','%SQL_API_SQLSETENVATTR','%SQL_API_SQLSETPARAM','%SQL_API_SQLSETPOS',
+ '%SQL_API_SQLSETSCROLLOPTIONS','%SQL_API_SQLSETSTMTATTR','%SQL_API_SQLSETSTMTOPTION','%SQL_API_SQLSPECIALCOLUMNS','%SQL_API_SQLSTATISTICS','%SQL_API_SQLTABLEPRIVILEGES','%SQL_API_SQLTABLES','%SQL_API_SQLTRANSACT',
+ '%SQL_ARD_TYPE','%SQL_ASYNC_ENABLE','%SQL_ASYNC_ENABLE_DEFAULT','%SQL_ASYNC_ENABLE_OFF','%SQL_ASYNC_ENABLE_ON','%SQL_ASYNC_MODE','%SQL_ATTR_ACCESS_MODE','%SQL_ATTR_ANSI_APP',
+ '%SQL_ATTR_APP_PARAM_DESC','%SQL_ATTR_APP_ROW_DESC','%SQL_ATTR_ASYNC_ENABLE','%SQL_ATTR_AUTOCOMMIT','%SQL_ATTR_AUTO_IPD','%SQL_ATTR_CONCURRENCY','%SQL_ATTR_CONNECTION_DEAD','%SQL_ATTR_CONNECTION_POOLING',
+ '%SQL_ATTR_CONNECTION_TIMEOUT','%SQL_ATTR_CP_MATCH','%SQL_ATTR_CURRENT_CATALOG','%SQL_ATTR_CURSOR_SCROLLABLE','%SQL_ATTR_CURSOR_SENSITIVITY','%SQL_ATTR_CURSOR_TYPE','%SQL_ATTR_DISCONNECT_BEHAVIOR','%SQL_ATTR_ENABLE_AUTO_IPD',
+ '%SQL_ATTR_ENLIST_IN_DTC','%SQL_ATTR_ENLIST_IN_XA','%SQL_ATTR_FETCH_BOOKMARK_PTR','%SQL_ATTR_IMP_PARAM_DESC','%SQL_ATTR_IMP_ROW_DESC','%SQL_ATTR_KEYSET_SIZE','%SQL_ATTR_LOGIN_TIMEOUT','%SQL_ATTR_MAX_LENGTH',
+ '%SQL_ATTR_MAX_ROWS','%SQL_ATTR_METADATA_ID','%SQL_ATTR_NOSCAN','%SQL_ATTR_ODBC_CURSORS','%SQL_ATTR_ODBC_VERSION','%SQL_ATTR_OUTPUT_NTS','%SQL_ATTR_PACKET_SIZE','%SQL_ATTR_PARAMSET_SIZE',
+ '%SQL_ATTR_PARAMS_PROCESSED_PTR','%SQL_ATTR_PARAM_BIND_OFFSET_PTR','%SQL_ATTR_PARAM_BIND_TYPE','%SQL_ATTR_PARAM_OPERATION_PTR','%SQL_ATTR_PARAM_STATUS_PTR','%SQL_ATTR_QUERY_TIMEOUT','%SQL_ATTR_QUIET_MODE','%SQL_ATTR_READONLY',
+ '%SQL_ATTR_READWRITE_UNKNOWN','%SQL_ATTR_RETRIEVE_DATA','%SQL_ATTR_ROWS_FETCHED_PTR','%SQL_ATTR_ROW_ARRAY_SIZE','%SQL_ATTR_ROW_BIND_OFFSET_PTR','%SQL_ATTR_ROW_BIND_TYPE','%SQL_ATTR_ROW_NUMBER','%SQL_ATTR_ROW_OPERATION_PTR',
+ '%SQL_ATTR_ROW_STATUS_PTR','%SQL_ATTR_SIMULATE_CURSOR','%SQL_ATTR_TRACE','%SQL_ATTR_TRACEFILE','%SQL_ATTR_TRANSLATE_LIB','%SQL_ATTR_TRANSLATE_OPTION','%SQL_ATTR_TXN_ISOLATION','%SQL_ATTR_USE_BOOKMARKS',
+ '%SQL_ATTR_WRITE','%SQL_AT_ADD_COLUMN','%SQL_AT_ADD_COLUMN_COLLATION','%SQL_AT_ADD_COLUMN_DEFAULT','%SQL_AT_ADD_COLUMN_SINGLE','%SQL_AT_ADD_CONSTRAINT','%SQL_AT_ADD_TABLE_CONSTRAINT','%SQL_AT_CONSTRAINT_DEFERRABLE',
+ '%SQL_AT_CONSTRAINT_INITIALLY_DEFERRED','%SQL_AT_CONSTRAINT_INITIALLY_IMMEDIATE','%SQL_AT_CONSTRAINT_NAME_DEFINITION','%SQL_AT_CONSTRAINT_NON_DEFERRABLE','%SQL_AT_DROP_COLUMN','%SQL_AT_DROP_COLUMN_CASCADE','%SQL_AT_DROP_COLUMN_DEFAULT','%SQL_AT_DROP_COLUMN_RESTRICT',
+ '%SQL_AT_DROP_TABLE_CONSTRAINT_CASCADE','%SQL_AT_DROP_TABLE_CONSTRAINT_RESTRICT','%SQL_AT_SET_COLUMN_DEFAULT','%SQL_AUTOCOMMIT','%SQL_AUTOCOMMIT_DEFAULT','%SQL_AUTOCOMMIT_OFF','%SQL_AUTOCOMMIT_ON','%SQL_BATCH_ROW_COUNT',
+ '%SQL_BATCH_SUPPORT','%SQL_BEST_ROWID','%SQL_BIGINT','%SQL_BINARY','%SQL_BIND_BY_COLUMN','%SQL_BIND_TYPE','%SQL_BIND_TYPE_DEFAULT','%SQL_BIT',
+ '%SQL_BOOKMARK_PERSISTENCE','%SQL_BP_CLOSE','%SQL_BP_DELETE','%SQL_BP_DROP','%SQL_BP_OTHER_HSTMT','%SQL_BP_SCROLL','%SQL_BP_TRANSACTION','%SQL_BP_UPDATE',
+ '%SQL_BRC_EXPLICIT','%SQL_BRC_PROCEDURES','%SQL_BRC_ROLLED_UP','%SQL_BS_ROW_COUNT_EXPLICIT','%SQL_BS_ROW_COUNT_PROC','%SQL_BS_SELECT_EXPLICIT','%SQL_BS_SELECT_PROC','%SQL_CA1_ABSOLUTE',
+ '%SQL_CA1_BOOKMARK','%SQL_CA1_BULK_ADD','%SQL_CA1_BULK_DELETE_BY_BOOKMARK','%SQL_CA1_BULK_FETCH_BY_BOOKMARK','%SQL_CA1_BULK_UPDATE_BY_BOOKMARK','%SQL_CA1_LOCK_EXCLUSIVE','%SQL_CA1_LOCK_NO_CHANGE','%SQL_CA1_LOCK_UNLOCK',
+ '%SQL_CA1_NEXT','%SQL_CA1_POSITIONED_DELETE','%SQL_CA1_POSITIONED_UPDATE','%SQL_CA1_POS_DELETE','%SQL_CA1_POS_POSITION','%SQL_CA1_POS_REFRESH','%SQL_CA1_POS_UPDATE','%SQL_CA1_RELATIVE',
+ '%SQL_CA1_SELECT_FOR_UPDATE','%SQL_CA2_CRC_APPROXIMATE','%SQL_CA2_CRC_EXACT','%SQL_CA2_LOCK_CONCURRENCY','%SQL_CA2_MAX_ROWS_AFFECTS_ALL','%SQL_CA2_MAX_ROWS_CATALOG','%SQL_CA2_MAX_ROWS_DELETE','%SQL_CA2_MAX_ROWS_INSERT',
+ '%SQL_CA2_MAX_ROWS_SELECT','%SQL_CA2_MAX_ROWS_UPDATE','%SQL_CA2_OPT_ROWVER_CONCURRENCY','%SQL_CA2_OPT_VALUES_CONCURRENCY','%SQL_CA2_READ_ONLY_CONCURRENCY','%SQL_CA2_SENSITIVITY_ADDITIONS','%SQL_CA2_SENSITIVITY_DELETIONS','%SQL_CA2_SENSITIVITY_UPDATES',
+ '%SQL_CA2_SIMULATE_NON_UNIQUE','%SQL_CA2_SIMULATE_TRY_UNIQUE','%SQL_CA2_SIMULATE_UNIQUE','%SQL_CASCADE','%SQL_CATALOG_LOCATION','%SQL_CATALOG_NAME','%SQL_CATALOG_NAME_SEPARATOR','%SQL_CATALOG_TERM',
+ '%SQL_CATALOG_USAGE','%SQL_CA_CONSTRAINT_DEFERRABLE','%SQL_CA_CONSTRAINT_INITIALLY_DEFERRED','%SQL_CA_CONSTRAINT_INITIALLY_IMMEDIATE','%SQL_CA_CONSTRAINT_NON_DEFERRABLE','%SQL_CA_CREATE_ASSERTION','%SQL_CB_CLOSE','%SQL_CB_DELETE',
+ '%SQL_CB_NON_NULL','%SQL_CB_NULL','%SQL_CB_PRESERVE','%SQL_CCOL_CREATE_COLLATION','%SQL_CCS_COLLATE_CLAUSE','%SQL_CCS_CREATE_CHARACTER_SET','%SQL_CCS_LIMITED_COLLATION','%SQL_CC_CLOSE',
+ '%SQL_CC_DELETE','%SQL_CC_PRESERVE','%SQL_CDO_COLLATION','%SQL_CDO_CONSTRAINT','%SQL_CDO_CONSTRAINT_DEFERRABLE','%SQL_CDO_CONSTRAINT_INITIALLY_DEFERRED','%SQL_CDO_CONSTRAINT_INITIALLY_IMMEDIATE','%SQL_CDO_CONSTRAINT_NAME_DEFINITION',
+ '%SQL_CDO_CONSTRAINT_NON_DEFERRABLE','%SQL_CDO_CREATE_DOMAIN','%SQL_CDO_DEFAULT','%SQL_CD_FALSE','%SQL_CD_TRUE','%SQL_CHAR','%SQL_CLOSE','%SQL_CL_END',
+ '%SQL_CL_START','%SQL_CN_ANY','%SQL_CN_DIFFERENT','%SQL_CN_NONE','%SQL_CODE_DATE','%SQL_CODE_DAY','%SQL_CODE_DAY_TO_HOUR','%SQL_CODE_DAY_TO_MINUTE',
+ '%SQL_CODE_DAY_TO_SECOND','%SQL_CODE_HOUR','%SQL_CODE_HOUR_TO_MINUTE','%SQL_CODE_HOUR_TO_SECOND','%SQL_CODE_MINUTE','%SQL_CODE_MINUTE_TO_SECOND','%SQL_CODE_MONTH','%SQL_CODE_SECOND',
+ '%SQL_CODE_TIME','%SQL_CODE_TIMESTAMP','%SQL_CODE_YEAR','%SQL_CODE_YEAR_TO_MONTH','%SQL_COLATT_OPT_MAX','%SQL_COLATT_OPT_MIN','%SQL_COLLATION_SEQ','%SQL_COLUMN_ALIAS',
+ '%SQL_COLUMN_AUTO_INCREMENT','%SQL_COLUMN_CASE_SENSITIVE','%SQL_COLUMN_COUNT','%SQL_COLUMN_DISPLAY_SIZE','%SQL_COLUMN_IGNORE','%SQL_COLUMN_LABEL','%SQL_COLUMN_LENGTH','%SQL_COLUMN_MONEY',
+ '%SQL_COLUMN_NAME','%SQL_COLUMN_NULLABLE','%SQL_COLUMN_NUMBER_UNKNOWN','%SQL_COLUMN_OWNER_NAME','%SQL_COLUMN_PRECISION','%SQL_COLUMN_QUALIFIER_NAME','%SQL_COLUMN_SCALE','%SQL_COLUMN_SEARCHABLE',
+ '%SQL_COLUMN_TABLE_NAME','%SQL_COLUMN_TYPE','%SQL_COLUMN_TYPE_NAME','%SQL_COLUMN_UNSIGNED','%SQL_COLUMN_UPDATABLE','%SQL_COL_PRED_BASIC','%SQL_COL_PRED_CHAR','%SQL_COMMIT',
+ '%SQL_CONCAT_NULL_BEHAVIOR','%SQL_CONCURRENCY','%SQL_CONCUR_DEFAULT','%SQL_CONCUR_LOCK','%SQL_CONCUR_READ_ONLY','%SQL_CONCUR_ROWVER','%SQL_CONCUR_TIMESTAMP','%SQL_CONCUR_VALUES',
+ '%SQL_CONVERT_BIGINT','%SQL_CONVERT_BINARY','%SQL_CONVERT_BIT','%SQL_CONVERT_CHAR','%SQL_CONVERT_DATE','%SQL_CONVERT_DECIMAL','%SQL_CONVERT_DOUBLE','%SQL_CONVERT_FLOAT',
+ '%SQL_CONVERT_FUNCTIONS','%SQL_CONVERT_GUID','%SQL_CONVERT_INTEGER','%SQL_CONVERT_INTERVAL_DAY_TIME','%SQL_CONVERT_INTERVAL_YEAR_MONTH','%SQL_CONVERT_LONGVARBINARY','%SQL_CONVERT_LONGVARCHAR','%SQL_CONVERT_NUMERIC',
+ '%SQL_CONVERT_REAL','%SQL_CONVERT_SMALLINT','%SQL_CONVERT_TIME','%SQL_CONVERT_TIMESTAMP','%SQL_CONVERT_TINYINT','%SQL_CONVERT_VARBINARY','%SQL_CONVERT_VARCHAR','%SQL_CONVERT_WCHAR',
+ '%SQL_CONVERT_WLONGVARCHAR','%SQL_CONVERT_WVARCHAR','%SQL_CORRELATION_NAME','%SQL_CP_DEFAULT','%SQL_CP_MATCH_DEFAULT','%SQL_CP_OFF','%SQL_CP_ONE_PER_DRIVER','%SQL_CP_ONE_PER_HENV',
+ '%SQL_CP_RELAXED_MATCH','%SQL_CP_STRICT_MATCH','%SQL_CREATE_ASSERTION','%SQL_CREATE_CHARACTER_SET','%SQL_CREATE_COLLATION','%SQL_CREATE_DOMAIN','%SQL_CREATE_SCHEMA','%SQL_CREATE_TABLE',
+ '%SQL_CREATE_TRANSLATION','%SQL_CREATE_VIEW','%SQL_CR_CLOSE','%SQL_CR_DELETE','%SQL_CR_PRESERVE','%SQL_CS_AUTHORIZATION','%SQL_CS_CREATE_SCHEMA','%SQL_CS_DEFAULT_CHARACTER_SET',
+ '%SQL_CTR_CREATE_TRANSLATION','%SQL_CT_COLUMN_COLLATION','%SQL_CT_COLUMN_CONSTRAINT','%SQL_CT_COLUMN_DEFAULT','%SQL_CT_COMMIT_DELETE','%SQL_CT_COMMIT_PRESERVE','%SQL_CT_CONSTRAINT_DEFERRABLE','%SQL_CT_CONSTRAINT_INITIALLY_DEFERRED',
+ '%SQL_CT_CONSTRAINT_INITIALLY_IMMEDIATE','%SQL_CT_CONSTRAINT_NAME_DEFINITION','%SQL_CT_CONSTRAINT_NON_DEFERRABLE','%SQL_CT_CREATE_TABLE','%SQL_CT_GLOBAL_TEMPORARY','%SQL_CT_LOCAL_TEMPORARY','%SQL_CT_TABLE_CONSTRAINT','%SQL_CURRENT_QUALIFIER',
+ '%SQL_CURSOR_COMMIT_BEHAVIOR','%SQL_CURSOR_DYNAMIC','%SQL_CURSOR_FORWARD_ONLY','%SQL_CURSOR_KEYSET_DRIVEN','%SQL_CURSOR_ROLLBACK_BEHAVIOR','%SQL_CURSOR_SENSITIVITY','%SQL_CURSOR_STATIC','%SQL_CURSOR_TYPE',
+ '%SQL_CURSOR_TYPE_DEFAULT','%SQL_CUR_DEFAULT','%SQL_CUR_USE_DRIVER','%SQL_CUR_USE_IF_NEEDED','%SQL_CUR_USE_ODBC','%SQL_CU_DML_STATEMENTS','%SQL_CU_INDEX_DEFINITION','%SQL_CU_PRIVILEGE_DEFINITION',
+ '%SQL_CU_PROCEDURE_INVOCATION','%SQL_CU_TABLE_DEFINITION','%SQL_CVT_BIGINT','%SQL_CVT_BINARY','%SQL_CVT_BIT','%SQL_CVT_CHAR','%SQL_CVT_DATE','%SQL_CVT_DECIMAL',
+ '%SQL_CVT_DOUBLE','%SQL_CVT_FLOAT','%SQL_CVT_GUID','%SQL_CVT_INTEGER','%SQL_CVT_INTERVAL_DAY_TIME','%SQL_CVT_INTERVAL_YEAR_MONTH','%SQL_CVT_LONGVARBINARY','%SQL_CVT_LONGVARCHAR',
+ '%SQL_CVT_NUMERIC','%SQL_CVT_REAL','%SQL_CVT_SMALLINT','%SQL_CVT_TIME','%SQL_CVT_TIMESTAMP','%SQL_CVT_TINYINT','%SQL_CVT_VARBINARY','%SQL_CVT_VARCHAR',
+ '%SQL_CVT_WCHAR','%SQL_CVT_WLONGVARCHAR','%SQL_CVT_WVARCHAR','%SQL_CV_CASCADED','%SQL_CV_CHECK_OPTION','%SQL_CV_CREATE_VIEW','%SQL_CV_LOCAL','%SQL_C_BINARY',
+ '%SQL_C_BIT','%SQL_C_BOOKMARK','%SQL_C_CHAR','%SQL_C_DATE','%SQL_C_DEFAULT','%SQL_C_DOUBLE','%SQL_C_FLOAT','%SQL_C_GUID',
+ '%SQL_C_INTERVAL_DAY','%SQL_C_INTERVAL_DAY_TO_HOUR','%SQL_C_INTERVAL_DAY_TO_MINUTE','%SQL_C_INTERVAL_DAY_TO_SECOND','%SQL_C_INTERVAL_HOUR','%SQL_C_INTERVAL_HOUR_TO_MINUTE','%SQL_C_INTERVAL_HOUR_TO_SECOND','%SQL_C_INTERVAL_MINUTE',
+ '%SQL_C_INTERVAL_MINUTE_TO_SECOND','%SQL_C_INTERVAL_MONTH','%SQL_C_INTERVAL_SECOND','%SQL_C_INTERVAL_YEAR','%SQL_C_INTERVAL_YEAR_TO_MONTH','%SQL_C_LONG','%SQL_C_NUMERIC','%SQL_C_SBIGINT',
+ '%SQL_C_SHORT','%SQL_C_SLONG','%SQL_C_SSHORT','%SQL_C_STINYINT','%SQL_C_TIME','%SQL_C_TIMESTAMP','%SQL_C_TINYINT','%SQL_C_TYPE_DATE',
+ '%SQL_C_TYPE_TIME','%SQL_C_TYPE_TIMESTAMP','%SQL_C_UBIGINT','%SQL_C_ULONG','%SQL_C_USHORT','%SQL_C_UTINYINT','%SQL_C_VARBOOKMARK','%SQL_DATABASE_NAME',
+ '%SQL_DATA_AT_EXEC','%SQL_DATA_SOURCE_NAME','%SQL_DATA_SOURCE_READ_ONLY','%SQL_DATE','%SQL_DATETIME','%SQL_DATETIME_LITERALS','%SQL_DATE_LEN','%SQL_DAY',
+ '%SQL_DAY_TO_HOUR','%SQL_DAY_TO_MINUTE','%SQL_DAY_TO_SECOND','%SQL_DA_DROP_ASSERTION','%SQL_DBMS_NAME','%SQL_DBMS_VER','%SQL_DB_DEFAULT','%SQL_DB_DISCONNECT',
+ '%SQL_DB_RETURN_TO_POOL','%SQL_DCS_DROP_CHARACTER_SET','%SQL_DC_DROP_COLLATION','%SQL_DDL_INDEX','%SQL_DD_CASCADE','%SQL_DD_DROP_DOMAIN','%SQL_DD_RESTRICT','%SQL_DECIMAL',
+ '%SQL_DEFAULT','%SQL_DEFAULT_PARAM','%SQL_DEFAULT_TXN_ISOLATION','%SQL_DELETE','%SQL_DELETE_BY_BOOKMARK','%SQL_DESCRIBE_PARAMETER','%SQL_DESC_ALLOC_AUTO','%SQL_DESC_ALLOC_TYPE',
+ '%SQL_DESC_ALLOC_USER','%SQL_DESC_ARRAY_SIZE','%SQL_DESC_ARRAY_STATUS_PTR','%SQL_DESC_AUTO_UNIQUE_VALUE','%SQL_DESC_BASE_COLUMN_NAME','%SQL_DESC_BASE_TABLE_NAME','%SQL_DESC_BIND_OFFSET_PTR','%SQL_DESC_BIND_TYPE',
+ '%SQL_DESC_CASE_SENSITIVE','%SQL_DESC_CATALOG_NAME','%SQL_DESC_CONCISE_TYPE','%SQL_DESC_COUNT','%SQL_DESC_DATA_PTR','%SQL_DESC_DATETIME_INTERVAL_CODE','%SQL_DESC_DATETIME_INTERVAL_PRECISION','%SQL_DESC_DISPLAY_SIZE',
+ '%SQL_DESC_FIXED_PREC_SCALE','%SQL_DESC_INDICATOR_PTR','%SQL_DESC_LABEL','%SQL_DESC_LENGTH','%SQL_DESC_LITERAL_PREFIX','%SQL_DESC_LITERAL_SUFFIX','%SQL_DESC_LOCAL_TYPE_NAME','%SQL_DESC_MAXIMUM_SCALE',
+ '%SQL_DESC_MINIMUM_SCALE','%SQL_DESC_NAME','%SQL_DESC_NULLABLE','%SQL_DESC_NUM_PREC_RADIX','%SQL_DESC_OCTET_LENGTH','%SQL_DESC_OCTET_LENGTH_PTR','%SQL_DESC_PARAMETER_TYPE','%SQL_DESC_PRECISION',
+ '%SQL_DESC_ROWS_PROCESSED_PTR','%SQL_DESC_SCALE','%SQL_DESC_SCHEMA_NAME','%SQL_DESC_SEARCHABLE','%SQL_DESC_TABLE_NAME','%SQL_DESC_TYPE','%SQL_DESC_TYPE_NAME','%SQL_DESC_UNNAMED',
+ '%SQL_DESC_UNSIGNED','%SQL_DESC_UPDATABLE','%SQL_DIAG_ALTER_TABLE','%SQL_DIAG_CALL','%SQL_DIAG_CLASS_ORIGIN','%SQL_DIAG_COLUMN_NUMBER','%SQL_DIAG_CONNECTION_NAME','%SQL_DIAG_CREATE_INDEX',
+ '%SQL_DIAG_CREATE_TABLE','%SQL_DIAG_CREATE_VIEW','%SQL_DIAG_CURSOR_ROW_COUNT','%SQL_DIAG_DELETE_WHERE','%SQL_DIAG_DROP_INDEX','%SQL_DIAG_DROP_TABLE','%SQL_DIAG_DROP_VIEW','%SQL_DIAG_DYNAMIC_DELETE_CURSOR',
+ '%SQL_DIAG_DYNAMIC_FUNCTION','%SQL_DIAG_DYNAMIC_FUNCTION_CODE','%SQL_DIAG_DYNAMIC_UPDATE_CURSOR','%SQL_DIAG_GRANT','%SQL_DIAG_INSERT','%SQL_DIAG_MESSAGE_TEXT','%SQL_DIAG_NATIVE','%SQL_DIAG_NUMBER',
+ '%SQL_DIAG_RETURNCODE','%SQL_DIAG_REVOKE','%SQL_DIAG_ROW_COUNT','%SQL_DIAG_ROW_NUMBER','%SQL_DIAG_SELECT_CURSOR','%SQL_DIAG_SERVER_NAME','%SQL_DIAG_SQLSTATE','%SQL_DIAG_SUBCLASS_ORIGIN',
+ '%SQL_DIAG_UNKNOWN_STATEMENT','%SQL_DIAG_UPDATE_WHERE','%SQL_DI_CREATE_INDEX','%SQL_DI_DROP_INDEX','%SQL_DL_SQL92_DATE','%SQL_DL_SQL92_INTERVAL_DAY','%SQL_DL_SQL92_INTERVAL_DAY_TO_HOUR','%SQL_DL_SQL92_INTERVAL_DAY_TO_MINUTE',
+ '%SQL_DL_SQL92_INTERVAL_DAY_TO_SECOND','%SQL_DL_SQL92_INTERVAL_HOUR','%SQL_DL_SQL92_INTERVAL_HOUR_TO_MINUTE','%SQL_DL_SQL92_INTERVAL_HOUR_TO_SECOND','%SQL_DL_SQL92_INTERVAL_MINUTE','%SQL_DL_SQL92_INTERVAL_MINUTE_TO_SECOND','%SQL_DL_SQL92_INTERVAL_MONTH','%SQL_DL_SQL92_INTERVAL_SECOND',
+ '%SQL_DL_SQL92_INTERVAL_YEAR','%SQL_DL_SQL92_INTERVAL_YEAR_TO_MONTH','%SQL_DL_SQL92_TIME','%SQL_DL_SQL92_TIMESTAMP','%SQL_DM_VER','%SQL_DOUBLE','%SQL_DRIVER_COMPLETE','%SQL_DRIVER_COMPLETE_REQUIRED',
+ '%SQL_DRIVER_HDBC','%SQL_DRIVER_HDESC','%SQL_DRIVER_HENV','%SQL_DRIVER_HLIB','%SQL_DRIVER_HSTMT','%SQL_DRIVER_NAME','%SQL_DRIVER_NOPROMPT','%SQL_DRIVER_ODBC_VER',
+ '%SQL_DRIVER_PROMPT','%SQL_DRIVER_VER','%SQL_DROP','%SQL_DROP_ASSERTION','%SQL_DROP_CHARACTER_SET','%SQL_DROP_COLLATION','%SQL_DROP_DOMAIN','%SQL_DROP_SCHEMA',
+ '%SQL_DROP_TABLE','%SQL_DROP_TRANSLATION','%SQL_DROP_VIEW','%SQL_DS_CASCADE','%SQL_DS_DROP_SCHEMA','%SQL_DS_RESTRICT','%SQL_DTC_DONE','%SQL_DTC_ENLIST_EXPENSIVE',
+ '%SQL_DTC_TRANSITION_COST','%SQL_DTC_UNENLIST_EXPENSIVE','%SQL_DTR_DROP_TRANSLATION','%SQL_DT_CASCADE','%SQL_DT_DROP_TABLE','%SQL_DT_RESTRICT','%SQL_DV_CASCADE','%SQL_DV_DROP_VIEW',
+ '%SQL_DV_RESTRICT','%SQL_DYNAMIC_CURSOR_ATTRIBUTES1','%SQL_DYNAMIC_CURSOR_ATTRIBUTES2','%SQL_ENSURE','%SQL_ENTIRE_ROWSET','%SQL_ERROR','%SQL_EXPRESSIONS_IN_ORDERBY','%SQL_FALSE',
+ '%SQL_FD_FETCH_ABSOLUTE','%SQL_FD_FETCH_BOOKMARK','%SQL_FD_FETCH_FIRST','%SQL_FD_FETCH_LAST','%SQL_FD_FETCH_NEXT','%SQL_FD_FETCH_PREV','%SQL_FD_FETCH_PRIOR','%SQL_FD_FETCH_RELATIVE',
+ '%SQL_FETCH_ABSOLUTE','%SQL_FETCH_BOOKMARK','%SQL_FETCH_BY_BOOKMARK','%SQL_FETCH_DIRECTION','%SQL_FETCH_FIRST','%SQL_FETCH_FIRST_SYSTEM','%SQL_FETCH_FIRST_USER','%SQL_FETCH_LAST',
+ '%SQL_FETCH_NEXT','%SQL_FETCH_PREV','%SQL_FETCH_PRIOR','%SQL_FETCH_RELATIVE','%SQL_FILE_CATALOG','%SQL_FILE_NOT_SUPPORTED','%SQL_FILE_QUALIFIER','%SQL_FILE_TABLE',
+ '%SQL_FILE_USAGE','%SQL_FLOAT','%SQL_FN_CVT_CAST','%SQL_FN_CVT_CONVERT','%SQL_FN_NUM_ABS','%SQL_FN_NUM_ACOS','%SQL_FN_NUM_ASIN','%SQL_FN_NUM_ATAN',
+ '%SQL_FN_NUM_ATAN2','%SQL_FN_NUM_CEILING','%SQL_FN_NUM_COS','%SQL_FN_NUM_COT','%SQL_FN_NUM_DEGREES','%SQL_FN_NUM_EXP','%SQL_FN_NUM_FLOOR','%SQL_FN_NUM_LOG',
+ '%SQL_FN_NUM_LOG10','%SQL_FN_NUM_MOD','%SQL_FN_NUM_PI','%SQL_FN_NUM_POWER','%SQL_FN_NUM_RADIANS','%SQL_FN_NUM_RAND','%SQL_FN_NUM_ROUND','%SQL_FN_NUM_SIGN',
+ '%SQL_FN_NUM_SIN','%SQL_FN_NUM_SQRT','%SQL_FN_NUM_TAN','%SQL_FN_NUM_TRUNCATE','%SQL_FN_STR_ASCII','%SQL_FN_STR_BIT_LENGTH','%SQL_FN_STR_CHAR','%SQL_FN_STR_CHARACTER_LENGTH',
+ '%SQL_FN_STR_CHAR_LENGTH','%SQL_FN_STR_CONCAT','%SQL_FN_STR_DIFFERENCE','%SQL_FN_STR_INSERT','%SQL_FN_STR_LCASE','%SQL_FN_STR_LEFT','%SQL_FN_STR_LENGTH','%SQL_FN_STR_LOCATE',
+ '%SQL_FN_STR_LOCATE_2','%SQL_FN_STR_LTRIM','%SQL_FN_STR_OCTET_LENGTH','%SQL_FN_STR_POSITION','%SQL_FN_STR_REPEAT','%SQL_FN_STR_REPLACE','%SQL_FN_STR_RIGHT','%SQL_FN_STR_RTRIM',
+ '%SQL_FN_STR_SOUNDEX','%SQL_FN_STR_SPACE','%SQL_FN_STR_SUBSTRING','%SQL_FN_STR_UCASE','%SQL_FN_SYS_DBNAME','%SQL_FN_SYS_IFNULL','%SQL_FN_SYS_USERNAME','%SQL_FN_TD_CURDATE',
+ '%SQL_FN_TD_CURRENT_DATE','%SQL_FN_TD_CURRENT_TIME','%SQL_FN_TD_CURRENT_TIMESTAMP','%SQL_FN_TD_CURTIME','%SQL_FN_TD_DAYNAME','%SQL_FN_TD_DAYOFMONTH','%SQL_FN_TD_DAYOFWEEK','%SQL_FN_TD_DAYOFYEAR',
+ '%SQL_FN_TD_EXTRACT','%SQL_FN_TD_HOUR','%SQL_FN_TD_MINUTE','%SQL_FN_TD_MONTH','%SQL_FN_TD_MONTHNAME','%SQL_FN_TD_NOW','%SQL_FN_TD_QUARTER','%SQL_FN_TD_SECOND',
+ '%SQL_FN_TD_TIMESTAMPADD','%SQL_FN_TD_TIMESTAMPDIFF','%SQL_FN_TD_WEEK','%SQL_FN_TD_YEAR','%SQL_FN_TSI_DAY','%SQL_FN_TSI_FRAC_SECOND','%SQL_FN_TSI_HOUR','%SQL_FN_TSI_MINUTE',
+ '%SQL_FN_TSI_MONTH','%SQL_FN_TSI_QUARTER','%SQL_FN_TSI_SECOND','%SQL_FN_TSI_WEEK','%SQL_FN_TSI_YEAR','%SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES1','%SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2','%SQL_GB_COLLATE',
+ '%SQL_GB_GROUP_BY_CONTAINS_SELECT','%SQL_GB_GROUP_BY_EQUALS_SELECT','%SQL_GB_NOT_SUPPORTED','%SQL_GB_NO_RELATION','%SQL_GD_ANY_COLUMN','%SQL_GD_ANY_ORDER','%SQL_GD_BLOCK','%SQL_GD_BOUND',
+ '%SQL_GETDATA_EXTENSIONS','%SQL_GET_BOOKMARK','%SQL_GROUP_BY','%SQL_GUID','%SQL_HANDLE_DBC','%SQL_HANDLE_DESC','%SQL_HANDLE_ENV','%SQL_HANDLE_SENV',
+ '%SQL_HANDLE_STMT','%SQL_HOUR','%SQL_HOUR_TO_MINUTE','%SQL_HOUR_TO_SECOND','%SQL_IC_LOWER','%SQL_IC_MIXED','%SQL_IC_SENSITIVE','%SQL_IC_UPPER',
+ '%SQL_IDENTIFIER_CASE','%SQL_IDENTIFIER_QUOTE_CHAR','%SQL_IGNORE','%SQL_IK_ALL','%SQL_IK_ASC','%SQL_IK_DESC','%SQL_IK_NONE','%SQL_INDEX_ALL',
+ '%SQL_INDEX_CLUSTERED','%SQL_INDEX_HASHED','%SQL_INDEX_KEYWORDS','%SQL_INDEX_OTHER','%SQL_INDEX_UNIQUE','%SQL_INFO_FIRST','%SQL_INFO_SCHEMA_VIEWS','%SQL_INITIALLY_DEFERRED',
+ '%SQL_INITIALLY_IMMEDIATE','%SQL_INSENSITIVE','%SQL_INSERT_STATEMENT','%SQL_INTEGER','%SQL_INTEGRITY','%SQL_INTERVAL','%SQL_INTERVAL_DAY','%SQL_INTERVAL_DAY_TO_HOUR',
+ '%SQL_INTERVAL_DAY_TO_MINUTE','%SQL_INTERVAL_DAY_TO_SECOND','%SQL_INTERVAL_HOUR','%SQL_INTERVAL_HOUR_TO_MINUTE','%SQL_INTERVAL_HOUR_TO_SECOND','%SQL_INTERVAL_MINUTE','%SQL_INTERVAL_MINUTE_TO_SECOND','%SQL_INTERVAL_MONTH',
+ '%SQL_INTERVAL_SECOND','%SQL_INTERVAL_YEAR','%SQL_INTERVAL_YEAR_TO_MONTH','%SQL_INVALID_HANDLE','%SQL_ISV_ASSERTIONS','%SQL_ISV_CHARACTER_SETS','%SQL_ISV_CHECK_CONSTRAINTS','%SQL_ISV_COLLATIONS',
+ '%SQL_ISV_COLUMNS','%SQL_ISV_COLUMN_DOMAIN_USAGE','%SQL_ISV_COLUMN_PRIVILEGES','%SQL_ISV_CONSTRAINT_COLUMN_USAGE','%SQL_ISV_CONSTRAINT_TABLE_USAGE','%SQL_ISV_DOMAINS','%SQL_ISV_DOMAIN_CONSTRAINTS','%SQL_ISV_KEY_COLUMN_USAGE',
+ '%SQL_ISV_REFERENTIAL_CONSTRAINTS','%SQL_ISV_SCHEMATA','%SQL_ISV_SQL_LANGUAGES','%SQL_ISV_TABLES','%SQL_ISV_TABLE_CONSTRAINTS','%SQL_ISV_TABLE_PRIVILEGES','%SQL_ISV_TRANSLATIONS','%SQL_ISV_USAGE_PRIVILEGES',
+ '%SQL_ISV_VIEWS','%SQL_ISV_VIEW_COLUMN_USAGE','%SQL_ISV_VIEW_TABLE_USAGE','%SQL_IS_DAY','%SQL_IS_DAY_TO_HOUR','%SQL_IS_DAY_TO_MINUTE','%SQL_IS_DAY_TO_SECOND','%SQL_IS_HOUR',
+ '%SQL_IS_HOUR_TO_MINUTE','%SQL_IS_HOUR_TO_SECOND','%SQL_IS_INSERT_LITERALS','%SQL_IS_INSERT_SEARCHED','%SQL_IS_INTEGER','%SQL_IS_MINUTE','%SQL_IS_MINUTE_TO_SECOND','%SQL_IS_MONTH',
+ '%SQL_IS_POINTER','%SQL_IS_SECOND','%SQL_IS_SELECT_INTO','%SQL_IS_SMALLINT','%SQL_IS_UINTEGER','%SQL_IS_USMALLINT','%SQL_IS_YEAR','%SQL_IS_YEAR_TO_MONTH',
+ '%SQL_KEYSET_CURSOR_ATTRIBUTES1','%SQL_KEYSET_CURSOR_ATTRIBUTES2','%SQL_KEYSET_SIZE','%SQL_KEYSET_SIZE_DEFAULT','%SQL_KEYWORDS','%SQL_LCK_EXCLUSIVE','%SQL_LCK_NO_CHANGE','%SQL_LCK_UNLOCK',
+ '%SQL_LEN_BINARY_ATTR_OFFSET','%SQL_LEN_DATA_AT_EXEC_OFFSET','%SQL_LIKE_ESCAPE_CLAUSE','%SQL_LIKE_ONLY','%SQL_LOCK_EXCLUSIVE','%SQL_LOCK_NO_CHANGE','%SQL_LOCK_TYPES','%SQL_LOCK_UNLOCK',
+ '%SQL_LOGIN_TIMEOUT','%SQL_LOGIN_TIMEOUT_DEFAULT','%SQL_LONGVARBINARY','%SQL_LONGVARCHAR','%SQL_MAXIMUM_CATALOG_NAME_LENGTH','%SQL_MAXIMUM_COLUMNS_IN_GROUP_BY','%SQL_MAXIMUM_COLUMNS_IN_INDEX','%SQL_MAXIMUM_COLUMNS_IN_ORDER_BY',
+ '%SQL_MAXIMUM_COLUMNS_IN_SELECT','%SQL_MAXIMUM_COLUMN_NAME_LENGTH','%SQL_MAXIMUM_CONCURRENT_ACTIVITIES','%SQL_MAXIMUM_CURSOR_NAME_LENGTH','%SQL_MAXIMUM_DRIVER_CONNECTIONS','%SQL_MAXIMUM_IDENTIFIER_LENGTH','%SQL_MAXIMUM_INDEX_SIZE','%SQL_MAXIMUM_ROW_SIZE',
+ '%SQL_MAXIMUM_SCHEMA_NAME_LENGTH','%SQL_MAXIMUM_STATEMENT_LENGTH','%SQL_MAXIMUM_TABLES_IN_SELECT','%SQL_MAXIMUM_USER_NAME_LENGTH','%SQL_MAX_ASYNC_CONCURRENT_STATEMENTS','%SQL_MAX_BINARY_LITERAL_LEN','%SQL_MAX_CATALOG_NAME_LEN','%SQL_MAX_CHAR_LITERAL_LEN',
+ '%SQL_MAX_COLUMNS_IN_GROUP_BY','%SQL_MAX_COLUMNS_IN_INDEX','%SQL_MAX_COLUMNS_IN_ORDER_BY','%SQL_MAX_COLUMNS_IN_SELECT','%SQL_MAX_COLUMNS_IN_TABLE','%SQL_MAX_COLUMN_NAME_LEN','%SQL_MAX_CONCURRENT_ACTIVITIES','%SQL_MAX_CURSOR_NAME_LEN',
+ '%SQL_MAX_DRIVER_CONNECTIONS','%SQL_MAX_DSN_LENGTH','%SQL_MAX_IDENTIFIER_LEN','%SQL_MAX_INDEX_SIZE','%SQL_MAX_LENGTH','%SQL_MAX_LENGTH_DEFAULT','%SQL_MAX_MESSAGE_LENGTH','%SQL_MAX_NUMERIC_LEN',
+ '%SQL_MAX_OPTION_STRING_LENGTH','%SQL_MAX_OWNER_NAME_LEN','%SQL_MAX_PROCEDURE_NAME_LEN','%SQL_MAX_QUALIFIER_NAME_LEN','%SQL_MAX_ROWS','%SQL_MAX_ROWS_DEFAULT','%SQL_MAX_ROW_SIZE','%SQL_MAX_ROW_SIZE_INCLUDES_LONG',
+ '%SQL_MAX_SCHEMA_NAME_LEN','%SQL_MAX_STATEMENT_LEN','%SQL_MAX_TABLES_IN_SELECT','%SQL_MAX_TABLE_NAME_LEN','%SQL_MAX_USER_NAME_LEN','%SQL_MINUTE','%SQL_MINUTE_TO_SECOND','%SQL_MODE_DEFAULT',
+ '%SQL_MODE_READ_ONLY','%SQL_MODE_READ_WRITE','%SQL_MONTH','%SQL_MULTIPLE_ACTIVE_TXN','%SQL_MULT_RESULT_SETS','%SQL_NAMED','%SQL_NC_END','%SQL_NC_HIGH',
+ '%SQL_NC_LOW','%SQL_NC_START','%SQL_NEED_DATA','%SQL_NEED_LONG_DATA_LEN','%SQL_NNC_NON_NULL','%SQL_NNC_NULL','%SQL_NONSCROLLABLE','%SQL_NON_NULLABLE_COLUMNS',
+ '%SQL_NOSCAN','%SQL_NOSCAN_DEFAULT','%SQL_NOSCAN_OFF','%SQL_NOSCAN_ON','%SQL_NOT_DEFERRABLE','%SQL_NO_ACTION','%SQL_NO_COLUMN_NUMBER','%SQL_NO_DATA',
+ '%SQL_NO_DATA_FOUND','%SQL_NO_NULLS','%SQL_NO_ROW_NUMBER','%SQL_NO_TOTAL','%SQL_NTS','%SQL_NTSL','%SQL_NULLABLE','%SQL_NULLABLE_UNKNOWN',
+ '%SQL_NULL_COLLATION','%SQL_NULL_DATA','%SQL_NULL_HANDLE','%SQL_NULL_HDBC','%SQL_NULL_HDESC','%SQL_NULL_HENV','%SQL_NULL_HSTMT','%SQL_NUMERIC',
+ '%SQL_NUMERIC_FUNCTIONS','%SQL_OAC_LEVEL1','%SQL_OAC_LEVEL2','%SQL_OAC_NONE','%SQL_ODBC_API_CONFORMANCE','%SQL_ODBC_CURSORS','%SQL_ODBC_INTERFACE_CONFORMANCE','%SQL_ODBC_SAG_CLI_CONFORMANCE',
+ '%SQL_ODBC_SQL_CONFORMANCE','%SQL_ODBC_SQL_OPT_IEF','%SQL_ODBC_VER','%SQL_OIC_CORE','%SQL_OIC_LEVEL1','%SQL_OIC_LEVEL2','%SQL_OJ_ALL_COMPARISON_OPS','%SQL_OJ_CAPABILITIES',
+ '%SQL_OJ_FULL','%SQL_OJ_INNER','%SQL_OJ_LEFT','%SQL_OJ_NESTED','%SQL_OJ_NOT_ORDERED','%SQL_OJ_RIGHT','%SQL_OPT_TRACE','%SQL_OPT_TRACEFILE',
+ '%SQL_OPT_TRACE_DEFAULT','%SQL_OPT_TRACE_OFF','%SQL_OPT_TRACE_ON','%SQL_ORDER_BY_COLUMNS_IN_SELECT','%SQL_OSCC_COMPLIANT','%SQL_OSCC_NOT_COMPLIANT','%SQL_OSC_CORE','%SQL_OSC_EXTENDED',
+ '%SQL_OSC_MINIMUM','%SQL_OUTER_JOINS','%SQL_OUTER_JOIN_CAPABILITIES','%SQL_OU_DML_STATEMENTS','%SQL_OU_INDEX_DEFINITION','%SQL_OU_PRIVILEGE_DEFINITION','%SQL_OU_PROCEDURE_INVOCATION','%SQL_OU_TABLE_DEFINITION',
+ '%SQL_OV_ODBC2','%SQL_OV_ODBC3','%SQL_OWNER_TERM','%SQL_OWNER_USAGE','%SQL_PACKET_SIZE','%SQL_PARAM_ARRAY_ROW_COUNTS','%SQL_PARAM_ARRAY_SELECTS','%SQL_PARAM_BIND_BY_COLUMN',
+ '%SQL_PARAM_BIND_TYPE_DEFAULT','%SQL_PARAM_DIAG_UNAVAILABLE','%SQL_PARAM_ERROR','%SQL_PARAM_IGNORE','%SQL_PARAM_INPUT','%SQL_PARAM_INPUT_OUTPUT','%SQL_PARAM_OUTPUT','%SQL_PARAM_PROCEED',
+ '%SQL_PARAM_SUCCESS','%SQL_PARAM_SUCCESS_WITH_INFO','%SQL_PARAM_TYPE_DEFAULT','%SQL_PARAM_TYPE_UNKNOWN','%SQL_PARAM_UNUSED','%SQL_PARC_BATCH','%SQL_PARC_NO_BATCH','%SQL_PAS_BATCH',
+ '%SQL_PAS_NO_BATCH','%SQL_PAS_NO_SELECT','%SQL_PC_NON_PSEUDO','%SQL_PC_NOT_PSEUDO','%SQL_PC_PSEUDO','%SQL_PC_UNKNOWN','%SQL_POSITION','%SQL_POSITIONED_STATEMENTS',
+ '%SQL_POS_ADD','%SQL_POS_DELETE','%SQL_POS_OPERATIONS','%SQL_POS_POSITION','%SQL_POS_REFRESH','%SQL_POS_UPDATE','%SQL_PRED_BASIC','%SQL_PRED_CHAR',
+ '%SQL_PRED_NONE','%SQL_PRED_SEARCHABLE','%SQL_PROCEDURES','%SQL_PROCEDURE_TERM','%SQL_PS_POSITIONED_DELETE','%SQL_PS_POSITIONED_UPDATE','%SQL_PS_SELECT_FOR_UPDATE','%SQL_PT_FUNCTION',
+ '%SQL_PT_PROCEDURE','%SQL_PT_UNKNOWN','%SQL_QL_END','%SQL_QL_START','%SQL_QUALIFIER_LOCATION','%SQL_QUALIFIER_NAME_SEPARATOR','%SQL_QUALIFIER_TERM','%SQL_QUALIFIER_USAGE',
+ '%SQL_QUERY_TIMEOUT','%SQL_QUERY_TIMEOUT_DEFAULT','%SQL_QUICK','%SQL_QUIET_MODE','%SQL_QUOTED_IDENTIFIER_CASE','%SQL_QU_DML_STATEMENTS','%SQL_QU_INDEX_DEFINITION','%SQL_QU_PRIVILEGE_DEFINITION',
+ '%SQL_QU_PROCEDURE_INVOCATION','%SQL_QU_TABLE_DEFINITION','%SQL_RD_DEFAULT','%SQL_RD_OFF','%SQL_RD_ON','%SQL_REAL','%SQL_REFRESH','%SQL_RESET_PARAMS',
+ '%SQL_RESTRICT','%SQL_RESULT_COL','%SQL_RETRIEVE_DATA','%SQL_RETURN_VALUE','%SQL_ROLLBACK','%SQL_ROWSET_SIZE','%SQL_ROWSET_SIZE_DEFAULT','%SQL_ROWVER',
+ '%SQL_ROW_ADDED','%SQL_ROW_DELETED','%SQL_ROW_ERROR','%SQL_ROW_IDENTIFIER','%SQL_ROW_IGNORE','%SQL_ROW_NOROW','%SQL_ROW_NUMBER','%SQL_ROW_NUMBER_UNKNOWN',
+ '%SQL_ROW_PROCEED','%SQL_ROW_SUCCESS','%SQL_ROW_SUCCESS_WITH_INFO','%SQL_ROW_UPDATED','%SQL_ROW_UPDATES','%SQL_SCCO_LOCK','%SQL_SCCO_OPT_ROWVER','%SQL_SCCO_OPT_TIMESTAMP',
+ '%SQL_SCCO_OPT_VALUES','%SQL_SCCO_READ_ONLY','%SQL_SCC_ISO92_CLI','%SQL_SCC_XOPEN_CLI_VERSION1','%SQL_SCHEMA_TERM','%SQL_SCHEMA_USAGE','%SQL_SCOPE_CURROW','%SQL_SCOPE_SESSION',
+ '%SQL_SCOPE_TRANSACTION','%SQL_SCROLLABLE','%SQL_SCROLL_CONCURRENCY','%SQL_SCROLL_DYNAMIC','%SQL_SCROLL_FORWARD_ONLY','%SQL_SCROLL_KEYSET_DRIVEN','%SQL_SCROLL_OPTIONS','%SQL_SCROLL_STATIC',
+ '%SQL_SC_FIPS127_2_TRANSITIONAL','%SQL_SC_NON_UNIQUE','%SQL_SC_SQL92_ENTRY','%SQL_SC_SQL92_FULL','%SQL_SC_SQL92_INTERMEDIATE','%SQL_SC_TRY_UNIQUE','%SQL_SC_UNIQUE','%SQL_SDF_CURRENT_DATE',
+ '%SQL_SDF_CURRENT_TIME','%SQL_SDF_CURRENT_TIMESTAMP','%SQL_SEARCHABLE','%SQL_SEARCH_PATTERN_ESCAPE','%SQL_SECOND','%SQL_SENSITIVE','%SQL_SERVER_NAME','%SQL_SETPARAM_VALUE_MAX',
+ '%SQL_SETPOS_MAX_LOCK_VALUE','%SQL_SETPOS_MAX_OPTION_VALUE','%SQL_SET_DEFAULT','%SQL_SET_NULL','%SQL_SFKD_CASCADE','%SQL_SFKD_NO_ACTION','%SQL_SFKD_SET_DEFAULT','%SQL_SFKD_SET_NULL',
+ '%SQL_SFKU_CASCADE','%SQL_SFKU_NO_ACTION','%SQL_SFKU_SET_DEFAULT','%SQL_SFKU_SET_NULL','%SQL_SG_DELETE_TABLE','%SQL_SG_INSERT_COLUMN','%SQL_SG_INSERT_TABLE','%SQL_SG_REFERENCES_COLUMN',
+ '%SQL_SG_REFERENCES_TABLE','%SQL_SG_SELECT_TABLE','%SQL_SG_UPDATE_COLUMN','%SQL_SG_UPDATE_TABLE','%SQL_SG_USAGE_ON_CHARACTER_SET','%SQL_SG_USAGE_ON_COLLATION','%SQL_SG_USAGE_ON_DOMAIN','%SQL_SG_USAGE_ON_TRANSLATION',
+ '%SQL_SG_WITH_GRANT_OPTION','%SQL_SIGNED_OFFSET','%SQL_SIMULATE_CURSOR','%SQL_SMALLINT','%SQL_SNVF_BIT_LENGTH','%SQL_SNVF_CHARACTER_LENGTH','%SQL_SNVF_CHAR_LENGTH','%SQL_SNVF_EXTRACT',
+ '%SQL_SNVF_OCTET_LENGTH','%SQL_SNVF_POSITION','%SQL_SO_DYNAMIC','%SQL_SO_FORWARD_ONLY','%SQL_SO_KEYSET_DRIVEN','%SQL_SO_MIXED','%SQL_SO_STATIC','%SQL_SPECIAL_CHARACTERS',
+ '%SQL_SPEC_MAJOR','%SQL_SPEC_MINOR','%SQL_SP_BETWEEN','%SQL_SP_COMPARISON','%SQL_SP_EXISTS','%SQL_SP_IN','%SQL_SP_ISNOTNULL','%SQL_SP_ISNULL',
+ '%SQL_SP_LIKE','%SQL_SP_MATCH_FULL','%SQL_SP_MATCH_PARTIAL','%SQL_SP_MATCH_UNIQUE_FULL','%SQL_SP_MATCH_UNIQUE_PARTIAL','%SQL_SP_OVERLAPS','%SQL_SP_QUANTIFIED_COMPARISON','%SQL_SP_UNIQUE',
+ '%SQL_SQL92_DATETIME_FUNCTIONS','%SQL_SQL92_FOREIGN_KEY_DELETE_RULE','%SQL_SQL92_FOREIGN_KEY_UPDATE_RULE','%SQL_SQL92_GRANT','%SQL_SQL92_NUMERIC_VALUE_FUNCTIONS','%SQL_SQL92_PREDICATES','%SQL_SQL92_RELATIONAL_JOIN_OPERATORS','%SQL_SQL92_REVOKE',
+ '%SQL_SQL92_ROW_VALUE_CONSTRUCTOR','%SQL_SQL92_STRING_FUNCTIONS','%SQL_SQL92_VALUE_EXPRESSIONS','%SQL_SQLSTATE_SIZE','%SQL_SQL_CONFORMANCE','%SQL_SQ_COMPARISON','%SQL_SQ_CORRELATED_SUBQUERIES','%SQL_SQ_EXISTS',
+ '%SQL_SQ_IN','%SQL_SQ_QUANTIFIED','%SQL_SRJO_CORRESPONDING_CLAUSE','%SQL_SRJO_CROSS_JOIN','%SQL_SRJO_EXCEPT_JOIN','%SQL_SRJO_FULL_OUTER_JOIN','%SQL_SRJO_INNER_JOIN','%SQL_SRJO_INTERSECT_JOIN',
+ '%SQL_SRJO_LEFT_OUTER_JOIN','%SQL_SRJO_NATURAL_JOIN','%SQL_SRJO_RIGHT_OUTER_JOIN','%SQL_SRJO_UNION_JOIN','%SQL_SRVC_DEFAULT','%SQL_SRVC_NULL','%SQL_SRVC_ROW_SUBQUERY','%SQL_SRVC_VALUE_EXPRESSION',
+ '%SQL_SR_CASCADE','%SQL_SR_DELETE_TABLE','%SQL_SR_GRANT_OPTION_FOR','%SQL_SR_INSERT_COLUMN','%SQL_SR_INSERT_TABLE','%SQL_SR_REFERENCES_COLUMN','%SQL_SR_REFERENCES_TABLE','%SQL_SR_RESTRICT',
+ '%SQL_SR_SELECT_TABLE','%SQL_SR_UPDATE_COLUMN','%SQL_SR_UPDATE_TABLE','%SQL_SR_USAGE_ON_CHARACTER_SET','%SQL_SR_USAGE_ON_COLLATION','%SQL_SR_USAGE_ON_DOMAIN','%SQL_SR_USAGE_ON_TRANSLATION','%SQL_SSF_CONVERT',
+ '%SQL_SSF_LOWER','%SQL_SSF_SUBSTRING','%SQL_SSF_TRANSLATE','%SQL_SSF_TRIM_BOTH','%SQL_SSF_TRIM_LEADING','%SQL_SSF_TRIM_TRAILING','%SQL_SSF_UPPER','%SQL_SS_ADDITIONS',
+ '%SQL_SS_DELETIONS','%SQL_SS_UPDATES','%SQL_STANDARD_CLI_CONFORMANCE','%SQL_STATIC_CURSOR_ATTRIBUTES1','%SQL_STATIC_CURSOR_ATTRIBUTES2','%SQL_STATIC_SENSITIVITY','%SQL_STILL_EXECUTING','%SQL_STRING_FUNCTIONS',
+ '%SQL_SUBQUERIES','%SQL_SUCCESS','%SQL_SUCCESS_WITH_INFO','%SQL_SU_DML_STATEMENTS','%SQL_SU_INDEX_DEFINITION','%SQL_SU_PRIVILEGE_DEFINITION','%SQL_SU_PROCEDURE_INVOCATION','%SQL_SU_TABLE_DEFINITION',
+ '%SQL_SVE_CASE','%SQL_SVE_CAST','%SQL_SVE_COALESCE','%SQL_SVE_NULLIF','%SQL_SYSTEM_FUNCTIONS','%SQL_TABLE_STAT','%SQL_TABLE_TERM','%SQL_TC_ALL',
+ '%SQL_TC_DDL_COMMIT','%SQL_TC_DDL_IGNORE','%SQL_TC_DML','%SQL_TC_NONE','%SQL_TIME','%SQL_TIMEDATE_ADD_INTERVALS','%SQL_TIMEDATE_DIFF_INTERVALS','%SQL_TIMEDATE_FUNCTIONS',
+ '%SQL_TIMESTAMP','%SQL_TIMESTAMP_LEN','%SQL_TIME_LEN','%SQL_TINYINT','%SQL_TRANSACTION_CAPABLE','%SQL_TRANSACTION_ISOLATION_OPTION','%SQL_TRANSACTION_READ_COMMITTED','%SQL_TRANSACTION_READ_UNCOMMITTED',
+ '%SQL_TRANSACTION_REPEATABLE_READ','%SQL_TRANSACTION_SERIALIZABLE','%SQL_TRANSLATE_DLL','%SQL_TRANSLATE_OPTION','%SQL_TRUE','%SQL_TXN_CAPABLE','%SQL_TXN_ISOLATION','%SQL_TXN_ISOLATION_OPTION',
+ '%SQL_TXN_READ_COMMITTED','%SQL_TXN_READ_UNCOMMITTED','%SQL_TXN_REPEATABLE_READ','%SQL_TXN_SERIALIZABLE','%SQL_TYPE_DATE','%SQL_TYPE_NULL','%SQL_TYPE_TIME','%SQL_TYPE_TIMESTAMP',
+ '%SQL_UB_DEFAULT','%SQL_UB_FIXED','%SQL_UB_OFF','%SQL_UB_ON','%SQL_UB_VARIABLE','%SQL_UNBIND','%SQL_UNICODE','%SQL_UNICODE_CHAR',
+ '%SQL_UNICODE_LONGVARCHAR','%SQL_UNICODE_VARCHAR','%SQL_UNION','%SQL_UNION_STATEMENT','%SQL_UNKNOWN_TYPE','%SQL_UNNAMED','%SQL_UNSEARCHABLE','%SQL_UNSIGNED_OFFSET',
+ '%SQL_UNSPECIFIED','%SQL_UPDATE','%SQL_UPDATE_BY_BOOKMARK','%SQL_USER_NAME','%SQL_USE_BOOKMARKS','%SQL_US_UNION','%SQL_US_UNION_ALL','%SQL_U_UNION',
+ '%SQL_U_UNION_ALL','%SQL_VARBINARY','%SQL_VARCHAR','%SQL_XOPEN_CLI_YEAR','%SQL_YEAR','%SQL_YEAR_TO_MONTH','%SRCCOPY','%SS_BITMAP',
+ '%SS_BLACKFRAME','%SS_BLACKRECT','%SS_CENTER','%SS_CENTERIMAGE','%SS_ENDELLIPSIS','%SS_ETCHEDFRAME','%SS_ETCHEDHORZ','%SS_ETCHEDVERT',
+ '%SS_GRAYFRAME','%SS_GRAYRECT','%SS_LEFT','%SS_NOPREFIX','%SS_NOTIFY','%SS_NOWORDWRAP','%SS_PATHELLIPSIS','%SS_RIGHT',
+ '%SS_RIGHTJUST','%SS_SIMPLE','%SS_SUNKEN','%SS_WHITEFRAME','%SS_WHITERECT','%SS_WORDELLIPSIS','%STAT_FILL_FROM_MEMORY','%STAT_FILL_NATURAL',
+ '%STAT_FILL_NATURAL_ERASTONE','%STAT_FILL_NATURAL_EVEN','%STAT_FILL_NATURAL_FIBONACCI','%STAT_FILL_NATURAL_ODD','%STAT_FILL_WITH_NUMBER','%STAT_MINMAX_INDEX','%STAT_MINMAX_VALUE','%STAT_TYPE_BYTE',
+ '%STAT_TYPE_CURRENCY','%STAT_TYPE_DOUBLE','%STAT_TYPE_DWORD','%STAT_TYPE_EXT','%STAT_TYPE_INTEGER','%STAT_TYPE_LONG','%STAT_TYPE_QUAD','%STAT_TYPE_SINGLE',
+ '%STAT_TYPE_WORD','%SWP_ASYNCWINDOWPOS','%SWP_DEFERERASE','%SWP_DRAWFRAME','%SWP_FRAMECHANGED','%SWP_HIDEWINDOW','%SWP_NOACTIVATE','%SWP_NOCOPYBITS',
+ '%SWP_NOMOVE','%SWP_NOOWNERZORDER','%SWP_NOREDRAW','%SWP_NOREPOSITION','%SWP_NOSENDCHANGING','%SWP_NOSIZE','%SWP_NOZORDER','%SWP_SHOWWINDOW',
+ '%SW_FORCEMINIMIZE','%SW_HIDE','%SW_MAXIMIZE','%SW_MINIMIZE','%SW_NORMAL','%SW_RESTORE','%SW_SHOW','%SW_SHOWDEFAULT',
+ '%SW_SHOWMAXIMIZED','%SW_SHOWMINIMIZED','%SW_SHOWMINNOACTIVE','%SW_SHOWNA','%SW_SHOWNOACTIVATE','%SW_SHOWNORMAL','%TBASS_3DALG_DEFAULT','%TBASS_3DALG_FULL',
+ '%TBASS_3DALG_LIGHT','%TBASS_3DALG_OFF','%TBASS_3DMODE_NORMAL','%TBASS_3DMODE_OFF','%TBASS_3DMODE_RELATIVE','%TBASS_ACTIVE_PAUSED','%TBASS_ACTIVE_PLAYING','%TBASS_ACTIVE_STALLED',
+ '%TBASS_ACTIVE_STOPPED','%TBASS_CONFIG_3DALGORITHM','%TBASS_CONFIG_BUFFER','%TBASS_CONFIG_CURVE_PAN','%TBASS_CONFIG_CURVE_VOL','%TBASS_CONFIG_FLOATDSP','%TBASS_CONFIG_GVOL_MUSIC','%TBASS_CONFIG_GVOL_SAMPLE',
+ '%TBASS_CONFIG_GVOL_STREAM','%TBASS_CONFIG_MAXVOL','%TBASS_CONFIG_MP3_CODEC','%TBASS_CONFIG_NET_AGENT','%TBASS_CONFIG_NET_BUFFER','%TBASS_CONFIG_NET_PASSIVE','%TBASS_CONFIG_NET_PREBUF','%TBASS_CONFIG_NET_PROXY',
+ '%TBASS_CONFIG_NET_TIMEOUT','%TBASS_CONFIG_PAUSE_NOPLAY','%TBASS_CONFIG_UPDATEPERIOD','%TBASS_CTYPE_MUSIC_IT','%TBASS_CTYPE_MUSIC_MO3','%TBASS_CTYPE_MUSIC_MOD','%TBASS_CTYPE_MUSIC_MTM','%TBASS_CTYPE_MUSIC_S3M',
+ '%TBASS_CTYPE_MUSIC_XM','%TBASS_CTYPE_RECORD','%TBASS_CTYPE_SAMPLE','%TBASS_CTYPE_STREAM','%TBASS_CTYPE_STREAM_AIFF','%TBASS_CTYPE_STREAM_MP1','%TBASS_CTYPE_STREAM_MP2','%TBASS_CTYPE_STREAM_MP3',
+ '%TBASS_CTYPE_STREAM_OGG','%TBASS_CTYPE_STREAM_WAV','%TBASS_CTYPE_STREAM_WAV_FLOAT','%TBASS_CTYPE_STREAM_WAV_PCM','%TBASS_DATA_AVAILABLE','%TBASS_DATA_FFT1024','%TBASS_DATA_FFT2048','%TBASS_DATA_FFT4096',
+ '%TBASS_DATA_FFT512','%TBASS_DATA_FFT_INDIVIDUAL','%TBASS_DATA_FFT_NOWINDOW','%TBASS_DATA_FLOAT','%TBASS_DEVICE_3D','%TBASS_DEVICE_8BITS','%TBASS_DEVICE_LATENCY','%TBASS_DEVICE_MONO',
+ '%TBASS_DEVICE_NOSPEAKER','%TBASS_DEVICE_SPEAKERS','%TBASS_EAX_ENVIRONMENT_ALLEY','%TBASS_EAX_ENVIRONMENT_ARENA','%TBASS_EAX_ENVIRONMENT_AUDITORIUM','%TBASS_EAX_ENVIRONMENT_BATHROOM','%TBASS_EAX_ENVIRONMENT_CARPETEDHALLWAY','%TBASS_EAX_ENVIRONMENT_CAVE',
+ '%TBASS_EAX_ENVIRONMENT_CITY','%TBASS_EAX_ENVIRONMENT_CONCERTHALL','%TBASS_EAX_ENVIRONMENT_COUNT','%TBASS_EAX_ENVIRONMENT_DIZZY','%TBASS_EAX_ENVIRONMENT_DRUGGED','%TBASS_EAX_ENVIRONMENT_FOREST','%TBASS_EAX_ENVIRONMENT_GENERIC','%TBASS_EAX_ENVIRONMENT_HALLWAY',
+ '%TBASS_EAX_ENVIRONMENT_HANGAR','%TBASS_EAX_ENVIRONMENT_LIVINGROOM','%TBASS_EAX_ENVIRONMENT_MOUNTAINS','%TBASS_EAX_ENVIRONMENT_PADDEDCELL','%TBASS_EAX_ENVIRONMENT_PARKINGLOT','%TBASS_EAX_ENVIRONMENT_PLAIN','%TBASS_EAX_ENVIRONMENT_PSYCHOTIC','%TBASS_EAX_ENVIRONMENT_QUARRY',
+ '%TBASS_EAX_ENVIRONMENT_ROOM','%TBASS_EAX_ENVIRONMENT_SEWERPIPE','%TBASS_EAX_ENVIRONMENT_STONECORRIDOR','%TBASS_EAX_ENVIRONMENT_STONEROOM','%TBASS_EAX_ENVIRONMENT_UNDERWATER','%TBASS_ERROR_ALREADY','%TBASS_ERROR_BUFLOST','%TBASS_ERROR_CODEC',
+ '%TBASS_ERROR_CREATE','%TBASS_ERROR_DECODE','%TBASS_ERROR_DEVICE','%TBASS_ERROR_DRIVER','%TBASS_ERROR_DX','%TBASS_ERROR_EMPTY','%TBASS_ERROR_FILEFORM','%TBASS_ERROR_FILEOPEN',
+ '%TBASS_ERROR_FORMAT','%TBASS_ERROR_FREQ','%TBASS_ERROR_HANDLE','%TBASS_ERROR_ILLPARAM','%TBASS_ERROR_ILLTYPE','%TBASS_ERROR_INIT','%TBASS_ERROR_MEM','%TBASS_ERROR_NO3D',
+ '%TBASS_ERROR_NOCHAN','%TBASS_ERROR_NOEAX','%TBASS_ERROR_NOFX','%TBASS_ERROR_NOHW','%TBASS_ERROR_NONET','%TBASS_ERROR_NOPAUSE','%TBASS_ERROR_NOPLAY','%TBASS_ERROR_NOTAVAIL',
+ '%TBASS_ERROR_NOTFILE','%TBASS_ERROR_PLAYING','%TBASS_ERROR_POSITION','%TBASS_ERROR_SPEAKER','%TBASS_ERROR_START','%TBASS_ERROR_TIMEOUT','%TBASS_ERROR_UNKNOWN','%TBASS_ERROR_VERSION',
+ '%TBASS_FALSE','%TBASS_FILEPOS_CURRENT','%TBASS_FILEPOS_DECODE','%TBASS_FILEPOS_DOWNLOAD','%TBASS_FILEPOS_END','%TBASS_FILEPOS_START','%TBASS_FILE_CLOSE','%TBASS_FILE_LEN',
+ '%TBASS_FILE_READ','%TBASS_FILE_SEEK','%TBASS_FX_CHORUS','%TBASS_FX_COMPRESSOR','%TBASS_FX_DISTORTION','%TBASS_FX_ECHO','%TBASS_FX_FLANGER','%TBASS_FX_GARGLE',
+ '%TBASS_FX_I3DL2REVERB','%TBASS_FX_PARAMEQ','%TBASS_FX_PHASE_180','%TBASS_FX_PHASE_90','%TBASS_FX_PHASE_NEG_180','%TBASS_FX_PHASE_NEG_90','%TBASS_FX_PHASE_ZERO','%TBASS_FX_REVERB',
+ '%TBASS_INPUT_LEVEL','%TBASS_INPUT_OFF','%TBASS_INPUT_ON','%TBASS_INPUT_TYPE_ANALOG','%TBASS_INPUT_TYPE_AUX','%TBASS_INPUT_TYPE_CD','%TBASS_INPUT_TYPE_DIGITAL','%TBASS_INPUT_TYPE_LINE',
+ '%TBASS_INPUT_TYPE_MASK','%TBASS_INPUT_TYPE_MIC','%TBASS_INPUT_TYPE_PHONE','%TBASS_INPUT_TYPE_SPEAKER','%TBASS_INPUT_TYPE_SYNTH','%TBASS_INPUT_TYPE_UNDEF','%TBASS_INPUT_TYPE_WAVE','%TBASS_MP3_SETPOS',
+ '%TBASS_MUSIC_3D','%TBASS_MUSIC_ATTRIB_AMPLIFY','%TBASS_MUSIC_ATTRIB_BPM','%TBASS_MUSIC_ATTRIB_PANSEP','%TBASS_MUSIC_ATTRIB_PSCALER','%TBASS_MUSIC_ATTRIB_SPEED','%TBASS_MUSIC_ATTRIB_VOL_CHAN','%TBASS_MUSIC_ATTRIB_VOL_GLOBAL',
+ '%TBASS_MUSIC_ATTRIB_VOL_INST','%TBASS_MUSIC_AUTOFREE','%TBASS_MUSIC_CALCLEN','%TBASS_MUSIC_DECODE','%TBASS_MUSIC_FLOAT','%TBASS_MUSIC_FT2MOD','%TBASS_MUSIC_FX','%TBASS_MUSIC_LOOP',
+ '%TBASS_MUSIC_MONO','%TBASS_MUSIC_NONINTER','%TBASS_MUSIC_NOSAMPLE','%TBASS_MUSIC_POSRESET','%TBASS_MUSIC_POSRESETEX','%TBASS_MUSIC_PRESCAN','%TBASS_MUSIC_PT1MOD','%TBASS_MUSIC_RAMP',
+ '%TBASS_MUSIC_RAMPS','%TBASS_MUSIC_STOPBACK','%TBASS_MUSIC_SURROUND','%TBASS_MUSIC_SURROUND2','%TBASS_OBJECT_DS','%TBASS_OBJECT_DS3DL','%TBASS_OK','%TBASS_RECORD_PAUSE',
+ '%TBASS_SAMPLE_3D','%TBASS_SAMPLE_8BITS','%TBASS_SAMPLE_FLOAT','%TBASS_SAMPLE_FX','%TBASS_SAMPLE_LOOP','%TBASS_SAMPLE_MONO','%TBASS_SAMPLE_MUTEMAX','%TBASS_SAMPLE_OVER_DIST',
+ '%TBASS_SAMPLE_OVER_POS','%TBASS_SAMPLE_OVER_VOL','%TBASS_SAMPLE_SOFTWARE','%TBASS_SAMPLE_VAM','%TBASS_SLIDE_FREQ','%TBASS_SLIDE_PAN','%TBASS_SLIDE_VOL','%TBASS_SPEAKER_CENLFE',
+ '%TBASS_SPEAKER_CENTER','%TBASS_SPEAKER_FRONT','%TBASS_SPEAKER_FRONTLEFT','%TBASS_SPEAKER_FRONTRIGHT','%TBASS_SPEAKER_LEFT','%TBASS_SPEAKER_LFE','%TBASS_SPEAKER_REAR','%TBASS_SPEAKER_REAR2',
+ '%TBASS_SPEAKER_REAR2LEFT','%TBASS_SPEAKER_REAR2RIGHT','%TBASS_SPEAKER_REARLEFT','%TBASS_SPEAKER_REARRIGHT','%TBASS_SPEAKER_RIGHT','%TBASS_STREAMPROC_END','%TBASS_STREAM_AUTOFREE','%TBASS_STREAM_BLOCK',
+ '%TBASS_STREAM_DECODE','%TBASS_STREAM_PRESCAN','%TBASS_STREAM_RESTRATE','%TBASS_STREAM_STATUS','%TBASS_SYNC_DOWNLOAD','%TBASS_SYNC_END','%TBASS_SYNC_FREE','%TBASS_SYNC_MESSAGE',
+ '%TBASS_SYNC_META','%TBASS_SYNC_MIXTIME','%TBASS_SYNC_MUSICFX','%TBASS_SYNC_MUSICINST','%TBASS_SYNC_MUSICPOS','%TBASS_SYNC_ONETIME','%TBASS_SYNC_POS','%TBASS_SYNC_SLIDE',
+ '%TBASS_SYNC_STALL','%TBASS_TAG_HTTP','%TBASS_TAG_ICY','%TBASS_TAG_ID3','%TBASS_TAG_ID3V2','%TBASS_TAG_META','%TBASS_TAG_MUSIC_INST','%TBASS_TAG_MUSIC_MESSAGE',
+ '%TBASS_TAG_MUSIC_NAME','%TBASS_TAG_MUSIC_SAMPLE','%TBASS_TAG_OGG','%TBASS_TAG_RIFF_INFO','%TBASS_TAG_VENDOR','%TBASS_TRUE','%TBASS_UNICODE','%TBASS_VAM_HARDWARE',
+ '%TBASS_VAM_SOFTWARE','%TBASS_VAM_TERM_DIST','%TBASS_VAM_TERM_PRIO','%TBASS_VAM_TERM_TIME','%TBASS_VERSION','%TBCD_CHANNEL','%TBCD_THUMB','%TBCD_TICS',
+ '%TBGL_ALIGN_CENTER','%TBGL_ALIGN_CENTER_CENTER','%TBGL_ALIGN_CENTER_DOWN','%TBGL_ALIGN_CENTER_UP','%TBGL_ALIGN_LEFT','%TBGL_ALIGN_LEFT_CENTER','%TBGL_ALIGN_LEFT_DOWN','%TBGL_ALIGN_LEFT_UP',
+ '%TBGL_ALIGN_RIGHT','%TBGL_ALIGN_RIGHT_CENTER','%TBGL_ALIGN_RIGHT_DOWN','%TBGL_ALIGN_RIGHT_UP','%TBGL_ALWAYS','%TBGL_EQUAL','%TBGL_ERROR_FILE','%TBGL_ERROR_MSGBOX',
+ '%TBGL_ERROR_NONE','%TBGL_GEQUAL','%TBGL_GREATER','%TBGL_LEQUAL','%TBGL_LESS','%TBGL_LIGHT_AMBIENT','%TBGL_LIGHT_CONSTANT_ATTENUATION','%TBGL_LIGHT_DIFFUSE',
+ '%TBGL_LIGHT_LINEAR_ATTENUATION','%TBGL_LIGHT_POSITION','%TBGL_LIGHT_QUADRATIC_ATTENUATION','%TBGL_LIGHT_SPECULAR','%TBGL_LIGHT_SPOT_CUTOFF','%TBGL_LIGHT_SPOT_DIRECTION','%TBGL_LIGHT_SPOT_EXPONENT','%TBGL_M15B',
+ '%TBGL_M15G','%TBGL_M15LAYER','%TBGL_M15PSTOP','%TBGL_M15R','%TBGL_M15TEXN','%TBGL_M15TEXX','%TBGL_M15TEXY','%TBGL_M15X',
+ '%TBGL_M15Y','%TBGL_M15Z','%TBGL_NEVER','%TBGL_NORMAL_NONE','%TBGL_NORMAL_PRECISE','%TBGL_NORMAL_SMOOTH','%TBGL_NOTEQUAL','%TBGL_OBJ_CUBE',
+ '%TBGL_OBJ_CUBE3','%TBGL_OBJ_CYLINDER','%TBGL_OBJ_SPHERE','%TBGL_PINFO_RGB','%TBGL_PINFO_XYZ','%TBGL_TEX_LINEAR','%TBGL_TEX_MIPMAP','%TBGL_TEX_NEAREST',
+ '%TBM_CLEARSEL','%TBM_CLEARTICS','%TBM_GETBUDDY','%TBM_GETCHANNELRECT','%TBM_GETLINESIZE','%TBM_GETNUMTICS','%TBM_GETPAGESIZE','%TBM_GETPOS',
+ '%TBM_GETPTICS','%TBM_GETRANGEMAX','%TBM_GETRANGEMIN','%TBM_GETSELEND','%TBM_GETSELSTART','%TBM_GETTHUMBLENGTH','%TBM_GETTHUMBRECT','%TBM_GETTIC',
+ '%TBM_GETTICPOS','%TBM_GETTOOLTIPS','%TBM_GETUNICODEFORMAT','%TBM_SETBUDDY','%TBM_SETLINESIZE','%TBM_SETPAGESIZE','%TBM_SETPOS','%TBM_SETRANGE',
+ '%TBM_SETRANGEMAX','%TBM_SETRANGEMIN','%TBM_SETSEL','%TBM_SETSELEND','%TBM_SETSELSTART','%TBM_SETTHUMBLENGTH','%TBM_SETTIC','%TBM_SETTICFREQ',
+ '%TBM_SETTIPSIDE','%TBM_SETTOOLTIPS','%TBM_SETUNICODEFORMAT','%TBS_AUTOTICKS','%TBS_BOTH','%TBS_BOTTOM','%TBS_DOWNISLEFT','%TBS_ENABLESELRANGE',
+ '%TBS_FIXEDLENGTH','%TBS_HORZ','%TBS_LEFT','%TBS_NOTHUMB','%TBS_NOTICKS','%TBS_REVERSED','%TBS_RIGHT','%TBS_TOOLTIPS',
+ '%TBS_TOP','%TBS_VERT','%TBTS_BOTTOM','%TBTS_LEFT','%TBTS_RIGHT','%TBTS_TOP','%TB_%VT_BSTR','%TB_%VT_CY',
+ '%TB_%VT_DATE','%TB_%VT_EMPTY','%TB_%VT_I2','%TB_%VT_I4','%TB_%VT_NULL','%TB_%VT_R4','%TB_%VT_R8','%TB_BOTTOM',
+ '%TB_CLASS_E_NOAGGREGATION','%TB_CO_E_CLASSSTRING','%TB_DISPATCH_METHOD','%TB_DISPATCH_PROPERTYGET','%TB_DISPATCH_PROPERTYPUT','%TB_DISPATCH_PROPERTYPUTREF','%TB_ENDTRACK','%TB_E_INVALIDARG',
+ '%TB_E_NOINTERFACE','%TB_E_OUTOFMEMORY','%TB_IMGCTX_ACTUALSIZE','%TB_IMGCTX_AUTOSIZE','%TB_IMGCTX_FITTOHEIGHT','%TB_IMGCTX_FITTOWIDTH','%TB_IMGCTX_STRETCH','%TB_LINEDOWN',
+ '%TB_LINEUP','%TB_MK_E_CONNECTMANUALLY','%TB_MK_E_EXCEEDEDDEADLINE','%TB_MK_E_INTERMEDIATEINTERFACENOTSUPPORTED','%TB_MK_E_NOOBJECT','%TB_MK_E_SYNTAX','%TB_PAGEDOWN','%TB_PAGEUP',
+ '%TB_REGDB_E_CLASSNOTREG','%TB_REGDB_E_WRITEREGDB','%TB_SIZEOF_TBVARIANT','%TB_S_FALSE','%TB_S_OK','%TB_THUMBPOSITION','%TB_THUMBTRACK','%TB_TOP',
+ '%TCM_FIRST','%TCM_GETCURSEL','%TCN_FOCUSCHANGE','%TCN_GETOBJECT','%TCN_SELCHANGE','%TCN_SELCHANGING','%TCS_BOTTOM','%TCS_BUTTONS',
+ '%TCS_EX_FLATSEPARATORS','%TCS_EX_REGISTERDROP','%TCS_FIXEDWIDTH','%TCS_FLATBUTTONS','%TCS_FOCUSNEVER','%TCS_FOCUSONBUTTONDOWN','%TCS_FORCEICONLEFT','%TCS_FORCELABELLEFT',
+ '%TCS_HOTTRACK','%TCS_MULTILINE','%TCS_MULTISELECT','%TCS_OWNERDRAWFIXED','%TCS_RAGGEDRIGHT','%TCS_RIGHT','%TCS_RIGHTJUSTIFY','%TCS_SCROLLOPPOSITE',
+ '%TCS_SINGLELINE','%TCS_TABS','%TCS_TOOLTIPS','%TCS_VERTICAL','%TM_PLAINTEXT','%TM_RICHTEXT','%TOKENIZER_DEFAULT_ALPHA','%TOKENIZER_DEFAULT_DELIM',
+ '%TOKENIZER_DEFAULT_DQUOTE','%TOKENIZER_DEFAULT_NEWLINE','%TOKENIZER_DEFAULT_NUMERIC','%TOKENIZER_DEFAULT_SPACE','%TOKENIZER_DELIMITER','%TOKENIZER_EOL','%TOKENIZER_ERROR','%TOKENIZER_FINISHED',
+ '%TOKENIZER_NUMBER','%TOKENIZER_QUOTE','%TOKENIZER_STRING','%TOKENIZER_UNDEFTOK','%TRUE','%TV_FIRST','%UDM_GETACCEL','%UDM_GETBASE',
+ '%UDM_GETBUDDY','%UDM_GETPOS','%UDM_GETPOS32','%UDM_GETRANGE','%UDM_GETRANGE32','%UDM_GETUNICODEFORMAT','%UDM_SETACCEL','%UDM_SETBASE',
+ '%UDM_SETBUDDY','%UDM_SETPOS','%UDM_SETPOS32','%UDM_SETRANGE','%UDM_SETRANGE32','%UDM_SETUNICODEFORMAT','%UDS_ALIGNLEFT','%UDS_ALIGNRIGHT',
+ '%UDS_ARROWKEYS','%UDS_AUTOBUDDY','%UDS_HORZ','%UDS_HOTTRACK','%UDS_NOTHOUSANDS','%UDS_SETBUDDYINT','%UDS_WRAP','%UD_MAXVAL',
+ '%UD_MINVAL','%VK_0','%VK_1','%VK_2','%VK_3','%VK_4','%VK_5','%VK_6',
+ '%VK_7','%VK_8','%VK_9','%VK_A','%VK_ACCEPT','%VK_ADD','%VK_APPS','%VK_B',
+ '%VK_BACK','%VK_C','%VK_CANCEL','%VK_CAPITAL','%VK_CLEAR','%VK_CONTROL','%VK_CONVERT','%VK_D',
+ '%VK_DECIMAL','%VK_DELETE','%VK_DIVIDE','%VK_DOWN','%VK_E','%VK_END','%VK_ESCAPE','%VK_EXECUTE',
+ '%VK_F','%VK_F1','%VK_F10','%VK_F11','%VK_F12','%VK_F13','%VK_F14','%VK_F15',
+ '%VK_F16','%VK_F17','%VK_F18','%VK_F19','%VK_F2','%VK_F20','%VK_F21','%VK_F22',
+ '%VK_F23','%VK_F24','%VK_F3','%VK_F4','%VK_F5','%VK_F6','%VK_F7','%VK_F8',
+ '%VK_F9','%VK_FINAL','%VK_G','%VK_H','%VK_HANGEUL','%VK_HANGUL','%VK_HANJA','%VK_HELP',
+ '%VK_HOME','%VK_I','%VK_INSERT','%VK_J','%VK_JUNJA','%VK_K','%VK_KANA','%VK_KANJI',
+ '%VK_L','%VK_LBUTTON','%VK_LEFT','%VK_LINEFEED','%VK_LWIN','%VK_M','%VK_MBUTTON','%VK_MENU',
+ '%VK_MODECHANGE','%VK_MULTIPLY','%VK_N','%VK_NEXT','%VK_NONCONVERT','%VK_NUMLOCK','%VK_NUMPAD0','%VK_NUMPAD1',
+ '%VK_NUMPAD2','%VK_NUMPAD3','%VK_NUMPAD4','%VK_NUMPAD5','%VK_NUMPAD6','%VK_NUMPAD7','%VK_NUMPAD8','%VK_NUMPAD9',
+ '%VK_O','%VK_P','%VK_PAUSE','%VK_PGDN','%VK_PGUP','%VK_PRINT','%VK_PRIOR','%VK_Q',
+ '%VK_R','%VK_RBUTTON','%VK_RETURN','%VK_RIGHT','%VK_RWIN','%VK_S','%VK_SCROLL','%VK_SELECT',
+ '%VK_SEPARATOR','%VK_SHIFT','%VK_SLEEP','%VK_SNAPSHOT','%VK_SPACE','%VK_SUBTRACT','%VK_T','%VK_TAB',
+ '%VK_U','%VK_UP','%VK_V','%VK_W','%VK_X','%VK_XBUTTON1','%VK_XBUTTON2','%VK_Y',
+ '%VK_Z','%VT_ARRAY','%VT_BLOB','%VT_BLOB_OBJECT','%VT_BOOL','%VT_BSTR','%VT_BYREF','%VT_CARRAY',
+ '%VT_CF','%VT_CLSID','%VT_CY','%VT_DATE','%VT_DISPATCH','%VT_EMPTY','%VT_ERROR','%VT_FILETIME',
+ '%VT_HRESULT','%VT_I1','%VT_I2','%VT_I4','%VT_I8','%VT_INT','%VT_LPSTR','%VT_LPWSTR',
+ '%VT_NULL','%VT_PTR','%VT_R4','%VT_R8','%VT_RECORD','%VT_RESERVED','%VT_SAFEARRAY','%VT_STORAGE',
+ '%VT_STORED_OBJECT','%VT_STREAM','%VT_STREAMED_OBJECT','%VT_UI1','%VT_UI2','%VT_UI4','%VT_UI8','%VT_UINT',
+ '%VT_UNKNOWN','%VT_USERDEFINED','%VT_VARIANT','%VT_VECTOR','%VT_VOID','%WAVE_FORMAT_1M08','%WAVE_FORMAT_1M16','%WAVE_FORMAT_1S08',
+ '%WAVE_FORMAT_1S16','%WAVE_FORMAT_2M08','%WAVE_FORMAT_2M16','%WAVE_FORMAT_2S08','%WAVE_FORMAT_2S16','%WAVE_FORMAT_4M08','%WAVE_FORMAT_4M16','%WAVE_FORMAT_4S08',
+ '%WAVE_FORMAT_4S16','%WBF_CUSTOM','%WBF_LEVEL1','%WBF_LEVEL2','%WBF_OVERFLOW','%WBF_WORDBREAK','%WBF_WORDWRAP','%WHITE',
+ '%WIN_FINDTITLECONTAIN','%WIN_FINDTITLEEND','%WIN_FINDTITLEEQUAL','%WIN_FINDTITLESTART','%WM_ACTIVATE','%WM_ACTIVATEAPP','%WM_CAPTURECHANGED','%WM_CHAR',
+ '%WM_CLOSE','%WM_COMMAND','%WM_DESTROY','%WM_DROPFILES','%WM_ERASEBKGND','%WM_GETTEXTLENGTH','%WM_HOTKEY','%WM_HSCROLL',
+ '%WM_IDLE','%WM_INITDIALOG','%WM_KEYDOWN','%WM_KEYUP','%WM_KILLFOCUS','%WM_LBUTTONDBLCLK','%WM_LBUTTONDOWN','%WM_LBUTTONUP',
+ '%WM_MBUTTONDBLCLK','%WM_MBUTTONDOWN','%WM_MBUTTONUP','%WM_MOUSEFIRST','%WM_MOUSEMOVE','%WM_MOUSEWHEEL','%WM_MOVE','%WM_MOVING',
+ '%WM_NCLBUTTONDOWN','%WM_NCRBUTTONDOWN','%WM_NEXTDLGCTL','%WM_NOTIFY','%WM_PAINT','%WM_QUIT','%WM_RBUTTONDBLCLK','%WM_RBUTTONDOWN',
+ '%WM_RBUTTONUP','%WM_SETFOCUS','%WM_SETFONT','%WM_SETTEXT','%WM_SIZE','%WM_SIZING','%WM_SYSCOMMAND','%WM_TIMER',
+ '%WM_USER','%WM_VSCROLL','%WS_BORDER','%WS_CAPTION','%WS_CHILD','%WS_CLIPCHILDREN','%WS_CLIPSIBLINGS','%WS_DISABLED',
+ '%WS_DLGFRAME','%WS_EX_ACCEPTFILES','%WS_EX_APPWINDOW','%WS_EX_CLIENTEDGE','%WS_EX_CONTEXTHELP','%WS_EX_CONTROLPARENT','%WS_EX_LAYERED','%WS_EX_LEFT',
+ '%WS_EX_LEFTSCROLLBAR','%WS_EX_LTRREADING','%WS_EX_MDICHILD','%WS_EX_NOPARENTNOTIFY','%WS_EX_OVERLAPPEDWINDOW','%WS_EX_PALETTEWINDOW','%WS_EX_RIGHT','%WS_EX_RIGHTSCROLLBAR',
+ '%WS_EX_RTLREADING','%WS_EX_STATICEDGE','%WS_EX_TOOLWINDOW','%WS_EX_TOPMOST','%WS_EX_TRANSPARENT','%WS_EX_WINDOWEDGE','%WS_GROUP','%WS_HSCROLL',
+ '%WS_ICONIC','%WS_MAXIMIZE','%WS_MAXIMIZEBOX','%WS_MINIMIZE','%WS_MINIMIZEBOX','%WS_OVERLAPPEDWINDOW','%WS_POPUP','%WS_POPUPWINDOW',
+ '%WS_SYSMENU','%WS_TABSTOP','%WS_THICKFRAME','%WS_VISIBLE','%WS_VSCROLL','%YELLOW','%ZERO','CRLF',
+ 'FALSE','M_E','M_PI','NULL','TAB','TRUE'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '{', '}', '[', ']', '=', '+', '-', '*', '/', '!', '%', '^', '&', ':'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #0000FF; font-weight: bold;',
+ 2 => 'color: #993333; font-style: italic; font-weight: bold;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #008000;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #333333;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #800080;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #CC0000;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #66cc66;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #333333;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099;'
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '_'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/tsql.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/tsql.php
new file mode 100644
index 000000000..fca874954
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/tsql.php
@@ -0,0 +1,375 @@
+<?php
+/*************************************************************************************
+ * tsql.php
+ * --------
+ * Author: Duncan Lock (dunc@dflock.co.uk)
+ * Copyright: (c) 2006 Duncan Lock (http://dflock.co.uk/), Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2005/11/22
+ *
+ * T-SQL language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2004/01/23 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2006/01/23)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'T-SQL',
+ 'COMMENT_SINGLE' => array(1 => '--'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_UPPER,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ // Datatypes
+ 'bigint', 'int', 'smallint', 'tinyint', 'bit', 'decimal', 'numeric', 'money',
+ 'smallmoney', 'float', 'real', 'datetime', 'smalldatetime', 'char', 'varchar',
+ 'text', 'nchar', 'nvarchar', 'ntext', 'binary', 'varbinary', 'image', 'cursor',
+ 'sql_variant', 'table', 'timestamp', 'uniqueidentifier',
+
+ // Keywords
+ 'ABSOLUTE', 'ACTION', 'ADD', 'ADMIN', 'AFTER', 'AGGREGATE', 'ALIAS', 'ALLOCATE', 'ALTER', 'ARE', 'ARRAY', 'AS',
+ 'ASC', 'ASSERTION', 'AT', 'AUTHORIZATION', 'BACKUP', 'BEFORE', 'BEGIN', 'BINARY', 'BIT', 'BLOB', 'BOOLEAN', 'BOTH', 'BREADTH',
+ 'BREAK', 'BROWSE', 'BULK', 'BY', 'CALL', 'CASCADE', 'CASCADED', 'CASE', 'CAST', 'CATALOG', 'CHAR', 'CHARACTER', 'CHECK', 'CHECKPOINT',
+ 'CLASS', 'CLOB', 'CLOSE', 'CLUSTERED', 'COALESCE', 'COLLATE', 'COLLATION', 'COLUMN', 'COMMIT', 'COMPLETION', 'COMPUTE', 'CONNECT',
+ 'CONNECTION', 'CONSTRAINT', 'CONSTRAINTS', 'CONSTRUCTOR', 'CONTAINS', 'CONTAINSTABLE', 'CONTINUE', 'CONVERT', 'CORRESPONDING', 'CREATE',
+ 'CUBE', 'CURRENT', 'CURRENT_DATE', 'CURRENT_PATH', 'CURRENT_ROLE', 'CURRENT_TIME', 'CURRENT_TIMESTAMP', 'CURRENT_USER',
+ 'CURSOR', 'CYCLE', 'DATA', 'DATABASE', 'DATE', 'DAY', 'DBCC', 'DEALLOCATE', 'DEC', 'DECIMAL', 'DECLARE', 'DEFAULT', 'DEFERRABLE',
+ 'DEFERRED', 'DELETE', 'DENY', 'DEPTH', 'DEREF', 'DESC', 'DESCRIBE', 'DESCRIPTOR', 'DESTROY', 'DESTRUCTOR', 'DETERMINISTIC',
+ 'DIAGNOSTICS', 'DICTIONARY', 'DISCONNECT', 'DISK', 'DISTINCT', 'DISTRIBUTED', 'DOMAIN', 'DOUBLE', 'DROP', 'DUMMY', 'DUMP', 'DYNAMIC',
+ 'EACH', 'ELSE', 'END', 'END-EXEC', 'EQUALS', 'ERRLVL', 'ESCAPE', 'EVERY', 'EXCEPT', 'EXCEPTION', 'EXEC', 'EXECUTE', 'EXIT',
+ 'EXTERNAL', 'FALSE', 'FETCH', 'FILE', 'FILLFACTOR', 'FIRST', 'FLOAT', 'FOR', 'FOREIGN', 'FOUND', 'FREE', 'FREETEXT', 'FREETEXTTABLE',
+ 'FROM', 'FULL', 'FUNCTION', 'GENERAL', 'GET', 'GLOBAL', 'GOTO', 'GRANT', 'GROUP', 'GROUPING', 'HAVING', 'HOLDLOCK', 'HOST', 'HOUR',
+ 'IDENTITY', 'IDENTITY_INSERT', 'IDENTITYCOL', 'IF', 'IGNORE', 'IMMEDIATE', 'INDEX', 'INDICATOR', 'INITIALIZE', 'INITIALLY',
+ 'INNER', 'INOUT', 'INPUT', 'INSERT', 'INT', 'INTEGER', 'INTERSECT', 'INTERVAL', 'INTO', 'IS', 'ISOLATION', 'ITERATE', 'KEY',
+ 'KILL', 'LANGUAGE', 'LARGE', 'LAST', 'LATERAL', 'LEADING', 'LEFT', 'LESS', 'LEVEL', 'LIMIT', 'LINENO', 'LOAD', 'LOCAL',
+ 'LOCALTIME', 'LOCALTIMESTAMP', 'LOCATOR', 'MAP', 'MATCH', 'MINUTE', 'MODIFIES', 'MODIFY', 'MODULE', 'MONTH', 'NAMES', 'NATIONAL',
+ 'NATURAL', 'NCHAR', 'NCLOB', 'NEW', 'NEXT', 'NO', 'NOCHECK', 'NONCLUSTERED', 'NONE', 'NULLIF', 'NUMERIC', 'OBJECT', 'OF',
+ 'OFF', 'OFFSETS', 'OLD', 'ON', 'ONLY', 'OPEN', 'OPENDATASOURCE', 'OPENQUERY', 'OPENROWSET', 'OPENXML', 'OPERATION', 'OPTION',
+ 'ORDER', 'ORDINALITY', 'OUT', 'OUTPUT', 'OVER', 'PAD', 'PARAMETER', 'PARAMETERS', 'PARTIAL', 'PATH', 'PERCENT', 'PLAN',
+ 'POSTFIX', 'PRECISION', 'PREFIX', 'PREORDER', 'PREPARE', 'PRESERVE', 'PRIMARY', 'PRINT', 'PRIOR', 'PRIVILEGES', 'PROC', 'PROCEDURE',
+ 'PUBLIC', 'RAISERROR', 'READ', 'READS', 'READTEXT', 'REAL', 'RECONFIGURE', 'RECURSIVE', 'REF', 'REFERENCES', 'REFERENCING', 'RELATIVE',
+ 'REPLICATION', 'RESTORE', 'RESTRICT', 'RESULT', 'RETURN', 'RETURNS', 'REVOKE', 'RIGHT', 'ROLE', 'ROLLBACK', 'ROLLUP', 'ROUTINE', 'ROW',
+ 'ROWGUIDCOL', 'ROWS', 'RULE', 'SAVE', 'SAVEPOINT', 'SCHEMA', 'SCOPE', 'SCROLL', 'SEARCH', 'SECOND', 'SECTION', 'SELECT',
+ 'SEQUENCE', 'SESSION', 'SESSION_USER', 'SET', 'SETS', 'SETUSER', 'SHUTDOWN', 'SIZE', 'SMALLINT', 'SPACE', 'SPECIFIC',
+ 'SPECIFICTYPE', 'SQL', 'SQLEXCEPTION', 'SQLSTATE', 'SQLWARNING', 'START', 'STATE', 'STATEMENT', 'STATIC', 'STATISTICS', 'STRUCTURE',
+ 'SYSTEM_USER', 'TABLE', 'TEMPORARY', 'TERMINATE', 'TEXTSIZE', 'THAN', 'THEN', 'TIME', 'TIMESTAMP', 'TIMEZONE_HOUR', 'TIMEZONE_MINUTE',
+ 'TO', 'TOP', 'TRAILING', 'TRAN', 'TRANSACTION', 'TRANSLATION', 'TREAT', 'TRIGGER', 'TRUE', 'TRUNCATE', 'TSEQUAL', 'UNDER', 'UNION',
+ 'UNIQUE', 'UNKNOWN', 'UNNEST', 'UPDATE', 'UPDATETEXT', 'USAGE', 'USE', 'USER', 'USING', 'VALUE', 'VALUES', 'VARCHAR', 'VARIABLE',
+ 'VARYING', 'VIEW', 'WAITFOR', 'WHEN', 'WHENEVER', 'WHERE', 'WHILE', 'WITH', 'WITHOUT', 'WORK', 'WRITE', 'WRITETEXT', 'YEAR', 'ZONE',
+ 'UNCOMMITTED', 'NOCOUNT',
+ ),
+ 2 => array(
+ /*
+ Built-in functions
+ Highlighted in pink.
+ */
+
+ //Configuration Functions
+ '@@DATEFIRST','@@OPTIONS','@@DBTS','@@REMSERVER','@@LANGID','@@SERVERNAME',
+ '@@LANGUAGE','@@SERVICENAME','@@LOCK_TIMEOUT','@@SPID','@@MAX_CONNECTIONS',
+ '@@TEXTSIZE','@@MAX_PRECISION','@@VERSION','@@NESTLEVEL',
+
+ //Cursor Functions
+ '@@CURSOR_ROWS','@@FETCH_STATUS',
+
+ //Date and Time Functions
+ 'DATEADD','DATEDIFF','DATENAME','DATEPART','GETDATE','GETUTCDATE',
+
+ //Mathematical Functions
+ 'ABS','DEGREES','RAND','ACOS','EXP','ROUND','ASIN','FLOOR','SIGN',
+ 'ATAN','LOG','SIN','ATN2','LOG10','SQUARE','CEILING','PI','SQRT','COS',
+ 'POWER','TAN','COT','RADIANS',
+
+ //Meta Data Functions
+ 'COL_LENGTH','COL_NAME','FULLTEXTCATALOGPROPERTY',
+ 'COLUMNPROPERTY','FULLTEXTSERVICEPROPERTY','DATABASEPROPERTY','INDEX_COL',
+ 'DATABASEPROPERTYEX','INDEXKEY_PROPERTY','DB_ID','INDEXPROPERTY','DB_NAME',
+ 'OBJECT_ID','FILE_ID','OBJECT_NAME','FILE_NAME','OBJECTPROPERTY','FILEGROUP_ID',
+ '@@PROCID','FILEGROUP_NAME','SQL_VARIANT_PROPERTY','FILEGROUPPROPERTY',
+ 'TYPEPROPERTY','FILEPROPERTY',
+
+ //Security Functions
+ 'IS_SRVROLEMEMBER','SUSER_SID','SUSER_SNAME','USER_ID',
+ 'HAS_DBACCESS','IS_MEMBER',
+
+ //String Functions
+ 'ASCII','SOUNDEX','PATINDEX','CHARINDEX','REPLACE','STR',
+ 'DIFFERENCE','QUOTENAME','STUFF','REPLICATE','SUBSTRING','LEN',
+ 'REVERSE','UNICODE','LOWER','UPPER','LTRIM','RTRIM',
+
+ //System Functions
+ 'APP_NAME','COLLATIONPROPERTY','@@ERROR','FORMATMESSAGE',
+ 'GETANSINULL','HOST_ID','HOST_NAME','IDENT_CURRENT','IDENT_INCR',
+ 'IDENT_SEED','@@IDENTITY','ISDATE','ISNUMERIC','PARSENAME','PERMISSIONS',
+ '@@ROWCOUNT','ROWCOUNT_BIG','SCOPE_IDENTITY','SERVERPROPERTY','SESSIONPROPERTY',
+ 'STATS_DATE','@@TRANCOUNT','USER_NAME',
+
+ //System Statistical Functions
+ '@@CONNECTIONS','@@PACK_RECEIVED','@@CPU_BUSY','@@PACK_SENT',
+ '@@TIMETICKS','@@IDLE','@@TOTAL_ERRORS','@@IO_BUSY',
+ '@@TOTAL_READ','@@PACKET_ERRORS','@@TOTAL_WRITE',
+
+ //Text and Image Functions
+ 'TEXTPTR','TEXTVALID',
+
+ //Aggregate functions
+ 'AVG', 'MAX', 'BINARY_CHECKSUM', 'MIN', 'CHECKSUM', 'SUM', 'CHECKSUM_AGG',
+ 'STDEV', 'COUNT', 'STDEVP', 'COUNT_BIG', 'VAR', 'VARP'
+ ),
+ 3 => array(
+ /*
+ System stored procedures
+ Higlighted dark brown
+ */
+
+ //Active Directory Procedures
+ 'sp_ActiveDirectory_Obj', 'sp_ActiveDirectory_SCP',
+
+ //Catalog Procedures
+ 'sp_column_privileges', 'sp_special_columns', 'sp_columns', 'sp_sproc_columns',
+ 'sp_databases', 'sp_statistics', 'sp_fkeys', 'sp_stored_procedures', 'sp_pkeys',
+ 'sp_table_privileges', 'sp_server_info', 'sp_tables',
+
+ //Cursor Procedures
+ 'sp_cursor_list', 'sp_describe_cursor_columns', 'sp_describe_cursor', 'sp_describe_cursor_tables',
+
+ //Database Maintenance Plan Procedures
+ 'sp_add_maintenance_plan', 'sp_delete_maintenance_plan_db', 'sp_add_maintenance_plan_db',
+ 'sp_delete_maintenance_plan_job', 'sp_add_maintenance_plan_job', 'sp_help_maintenance_plan',
+ 'sp_delete_maintenance_plan',
+
+ //Distributed Queries Procedures
+ 'sp_addlinkedserver', 'sp_indexes', 'sp_addlinkedsrvlogin', 'sp_linkedservers', 'sp_catalogs',
+ 'sp_primarykeys', 'sp_column_privileges_ex', 'sp_columns_ex',
+ 'sp_table_privileges_ex', 'sp_tables_ex', 'sp_foreignkeys',
+
+ //Full-Text Search Procedures
+ 'sp_fulltext_catalog', 'sp_help_fulltext_catalogs_cursor', 'sp_fulltext_column',
+ 'sp_help_fulltext_columns', 'sp_fulltext_database', 'sp_help_fulltext_columns_cursor',
+ 'sp_fulltext_service', 'sp_help_fulltext_tables', 'sp_fulltext_table',
+ 'sp_help_fulltext_tables_cursor', 'sp_help_fulltext_catalogs',
+
+ //Log Shipping Procedures
+ 'sp_add_log_shipping_database', 'sp_delete_log_shipping_database', 'sp_add_log_shipping_plan',
+ 'sp_delete_log_shipping_plan', 'sp_add_log_shipping_plan_database',
+ 'sp_delete_log_shipping_plan_database', 'sp_add_log_shipping_primary',
+ 'sp_delete_log_shipping_primary', 'sp_add_log_shipping_secondary',
+ 'sp_delete_log_shipping_secondary', 'sp_can_tlog_be_applied', 'sp_get_log_shipping_monitor_info',
+ 'sp_change_monitor_role', 'sp_remove_log_shipping_monitor', 'sp_change_primary_role',
+ 'sp_resolve_logins', 'sp_change_secondary_role', 'sp_update_log_shipping_monitor_info',
+ 'sp_create_log_shipping_monitor_account', 'sp_update_log_shipping_plan',
+ 'sp_define_log_shipping_monitor', 'sp_update_log_shipping_plan_database',
+
+ //OLE Automation Extended Stored Procedures
+ 'sp_OACreate', 'sp_OAMethod', 'sp_OADestroy', 'sp_OASetProperty', 'sp_OAGetErrorInfo',
+ 'sp_OAStop', 'sp_OAGetProperty',
+
+ //Replication Procedures
+ 'sp_add_agent_parameter', 'sp_enableagentoffload', 'sp_add_agent_profile',
+ 'sp_enumcustomresolvers', 'sp_addarticle', 'sp_enumdsn', 'sp_adddistpublisher',
+ 'sp_enumfullsubscribers', 'sp_adddistributiondb', 'sp_expired_subscription_cleanup',
+ 'sp_adddistributor', 'sp_generatefilters', 'sp_addmergealternatepublisher',
+ 'sp_getagentoffloadinfo', 'sp_addmergearticle', 'sp_getmergedeletetype', 'sp_addmergefilter',
+ 'sp_get_distributor', 'sp_addmergepublication', 'sp_getqueuedrows', 'sp_addmergepullsubscription',
+ 'sp_getsubscriptiondtspackagename', 'sp_addmergepullsubscription_agent', 'sp_grant_publication_access',
+ 'sp_addmergesubscription', 'sp_help_agent_default', 'sp_addpublication', 'sp_help_agent_parameter',
+ 'sp_addpublication_snapshot', 'sp_help_agent_profile', 'sp_addpublisher70', 'sp_helparticle',
+ 'sp_addpullsubscription', 'sp_helparticlecolumns', 'sp_addpullsubscription_agent', 'sp_helparticledts',
+ 'sp_addscriptexec', 'sp_helpdistpublisher', 'sp_addsubscriber', 'sp_helpdistributiondb',
+ 'sp_addsubscriber_schedule', 'sp_helpdistributor', 'sp_addsubscription', 'sp_helpmergealternatepublisher',
+ 'sp_addsynctriggers', 'sp_helpmergearticle', 'sp_addtabletocontents', 'sp_helpmergearticlecolumn',
+ 'sp_adjustpublisheridentityrange', 'sp_helpmergearticleconflicts', 'sp_article_validation',
+ 'sp_helpmergeconflictrows', 'sp_articlecolumn', 'sp_helpmergedeleteconflictrows', 'sp_articlefilter',
+ 'sp_helpmergefilter', 'sp_articlesynctranprocs', 'sp_helpmergepublication', 'sp_articleview',
+ 'sp_helpmergepullsubscription', 'sp_attachsubscription', 'sp_helpmergesubscription', 'sp_browsesnapshotfolder',
+ 'sp_helppublication', 'sp_browsemergesnapshotfolder', 'sp_help_publication_access', 'sp_browsereplcmds',
+ 'sp_helppullsubscription', 'sp_change_agent_parameter', 'sp_helpreplfailovermode', 'sp_change_agent_profile',
+ 'sp_helpreplicationdboption', 'sp_changearticle', 'sp_helpreplicationoption', 'sp_changedistpublisher',
+ 'sp_helpsubscriberinfo', 'sp_changedistributiondb', 'sp_helpsubscription', 'sp_changedistributor_password',
+ 'sp_ivindexhasnullcols', 'sp_changedistributor_property', 'sp_helpsubscription_properties', 'sp_changemergearticle',
+ 'sp_link_publication', 'sp_changemergefilter', 'sp_marksubscriptionvalidation', 'sp_changemergepublication',
+ 'sp_mergearticlecolumn', 'sp_changemergepullsubscription', 'sp_mergecleanupmetadata', 'sp_changemergesubscription',
+ 'sp_mergedummyupdate', 'sp_changepublication', 'sp_mergesubscription_cleanup', 'sp_changesubscriber',
+ 'sp_publication_validation', 'sp_changesubscriber_schedule', 'sp_refreshsubscriptions', 'sp_changesubscriptiondtsinfo',
+ 'sp_reinitmergepullsubscription', 'sp_changesubstatus', 'sp_reinitmergesubscription', 'sp_change_subscription_properties',
+ 'sp_reinitpullsubscription', 'sp_check_for_sync_trigger', 'sp_reinitsubscription', 'sp_copymergesnapshot',
+ 'sp_removedbreplication', 'sp_copysnapshot', 'sp_repladdcolumn', 'sp_copysubscription', 'sp_replcmds',
+ 'sp_deletemergeconflictrow', 'sp_replcounters', 'sp_disableagentoffload', 'sp_repldone', 'sp_drop_agent_parameter',
+ 'sp_repldropcolumn', 'sp_drop_agent_profile', 'sp_replflush', 'sp_droparticle', 'sp_replicationdboption',
+ 'sp_dropanonymouseagent', 'sp_replication_agent_checkup', 'sp_dropdistpublisher', 'sp_replqueuemonitor',
+ 'sp_dropdistributiondb', 'sp_replsetoriginator', 'sp_dropmergealternatepublisher', 'sp_replshowcmds',
+ 'sp_dropdistributor', 'sp_repltrans', 'sp_dropmergearticle', 'sp_restoredbreplication', 'sp_dropmergefilter',
+ 'sp_revoke_publication_access', 'sp_scriptsubconflicttable', 'sp_dropmergepublication', 'sp_script_synctran_commands',
+ 'sp_dropmergepullsubscription', 'sp_setreplfailovermode', 'sp_showrowreplicainfo', 'sp_dropmergesubscription',
+ 'sp_subscription_cleanup', 'sp_droppublication', 'sp_table_validation', 'sp_droppullsubscription',
+ 'sp_update_agent_profile', 'sp_dropsubscriber', 'sp_validatemergepublication', 'sp_dropsubscription',
+ 'sp_validatemergesubscription', 'sp_dsninfo', 'sp_vupgrade_replication', 'sp_dumpparamcmd',
+
+ //Security Procedures
+ 'sp_addalias', 'sp_droprolemember', 'sp_addapprole', 'sp_dropserver', 'sp_addgroup', 'sp_dropsrvrolemember',
+ 'sp_dropuser', 'sp_addlogin', 'sp_grantdbaccess', 'sp_addremotelogin',
+ 'sp_grantlogin', 'sp_addrole', 'sp_helpdbfixedrole', 'sp_addrolemember', 'sp_helpgroup',
+ 'sp_addserver', 'sp_helplinkedsrvlogin', 'sp_addsrvrolemember', 'sp_helplogins', 'sp_adduser',
+ 'sp_helpntgroup', 'sp_approlepassword', 'sp_helpremotelogin', 'sp_changedbowner', 'sp_helprole',
+ 'sp_changegroup', 'sp_helprolemember', 'sp_changeobjectowner', 'sp_helprotect', 'sp_change_users_login',
+ 'sp_helpsrvrole', 'sp_dbfixedrolepermission', 'sp_helpsrvrolemember', 'sp_defaultdb', 'sp_helpuser',
+ 'sp_defaultlanguage', 'sp_MShasdbaccess', 'sp_denylogin', 'sp_password', 'sp_dropalias', 'sp_remoteoption',
+ 'sp_dropapprole', 'sp_revokedbaccess', 'sp_dropgroup', 'sp_revokelogin', 'sp_droplinkedsrvlogin',
+ 'sp_setapprole', 'sp_droplogin', 'sp_srvrolepermission', 'sp_dropremotelogin', 'sp_validatelogins', 'sp_droprole',
+
+ //SQL Mail Procedures
+ 'sp_processmail', 'xp_sendmail', 'xp_deletemail', 'xp_startmail', 'xp_findnextmsg', 'xp_stopmail', 'xp_readmail',
+
+ //SQL Profiler Procedures
+ 'sp_trace_create', 'sp_trace_setfilter', 'sp_trace_generateevent', 'sp_trace_setstatus', 'sp_trace_setevent',
+
+ //SQL Server Agent Procedures
+ 'sp_add_alert', 'sp_help_jobhistory', 'sp_add_category', 'sp_help_jobschedule', 'sp_add_job',
+ 'sp_help_jobserver', 'sp_add_jobschedule', 'sp_help_jobstep', 'sp_add_jobserver', 'sp_help_notification',
+ 'sp_add_jobstep', 'sp_help_operator', 'sp_add_notification', 'sp_help_targetserver',
+ 'sp_add_operator', 'sp_help_targetservergroup', 'sp_add_targetservergroup', 'sp_helptask',
+ 'sp_add_targetsvrgrp_member', 'sp_manage_jobs_by_login', 'sp_addtask', 'sp_msx_defect',
+ 'sp_apply_job_to_targets', 'sp_msx_enlist', 'sp_delete_alert', 'sp_post_msx_operation',
+ 'sp_delete_category', 'sp_purgehistory', 'sp_delete_job', 'sp_purge_jobhistory', 'sp_delete_jobschedule',
+ 'sp_reassigntask', 'sp_delete_jobserver', 'sp_remove_job_from_targets', 'sp_delete_jobstep',
+ 'sp_resync_targetserver', 'sp_delete_notification', 'sp_start_job', 'sp_delete_operator',
+ 'sp_stop_job', 'sp_delete_targetserver', 'sp_update_alert', 'sp_delete_targetservergroup',
+ 'sp_update_category', 'sp_delete_targetsvrgrp_member', 'sp_update_job', 'sp_droptask',
+ 'sp_update_jobschedule', 'sp_help_alert', 'sp_update_jobstep', 'sp_help_category',
+ 'sp_update_notification', 'sp_help_downloadlist', 'sp_update_operator', 'sp_helphistory',
+ 'sp_update_targetservergroup', 'sp_help_job', 'sp_updatetask', 'xp_sqlagent_proxy_account',
+
+ //System Procedures
+ 'sp_add_data_file_recover_suspect_db', 'sp_helpconstraint', 'sp_addextendedproc',
+ 'sp_helpdb', 'sp_addextendedproperty', 'sp_helpdevice', 'sp_add_log_file_recover_suspect_db',
+ 'sp_helpextendedproc', 'sp_addmessage', 'sp_helpfile', 'sp_addtype', 'sp_helpfilegroup',
+ 'sp_addumpdevice', 'sp_helpindex', 'sp_altermessage', 'sp_helplanguage', 'sp_autostats',
+ 'sp_helpserver', 'sp_attach_db', 'sp_helpsort', 'sp_attach_single_file_db', 'sp_helpstats',
+ 'sp_bindefault', 'sp_helptext', 'sp_bindrule', 'sp_helptrigger', 'sp_bindsession',
+ 'sp_indexoption', 'sp_certify_removable', 'sp_invalidate_textptr', 'sp_configure',
+ 'sp_lock', 'sp_create_removable', 'sp_monitor', 'sp_createstats', 'sp_procoption',
+ 'sp_cycle_errorlog', 'sp_recompile', 'sp_datatype_info', 'sp_refreshview', 'sp_dbcmptlevel',
+ 'sp_releaseapplock', 'sp_dboption', 'sp_rename', 'sp_dbremove', 'sp_renamedb',
+ 'sp_delete_backuphistory', 'sp_resetstatus', 'sp_depends', 'sp_serveroption', 'sp_detach_db',
+ 'sp_setnetname', 'sp_dropdevice', 'sp_settriggerorder', 'sp_dropextendedproc', 'sp_spaceused',
+ 'sp_dropextendedproperty', 'sp_tableoption', 'sp_dropmessage', 'sp_unbindefault', 'sp_droptype',
+ 'sp_unbindrule', 'sp_executesql', 'sp_updateextendedproperty', 'sp_getapplock', 'sp_updatestats',
+ 'sp_getbindtoken', 'sp_validname', 'sp_help', 'sp_who',
+
+ //Web Assistant Procedures
+ 'sp_dropwebtask', 'sp_makewebtask', 'sp_enumcodepages', 'sp_runwebtask',
+
+ //XML Procedures
+ 'sp_xml_preparedocument', 'sp_xml_removedocument',
+
+ //General Extended Procedures
+ 'xp_cmdshellxp_logininfo', 'xp_enumgroups', 'xp_msver', 'xp_findnextmsgxp_revokelogin',
+ 'xp_grantlogin', 'xp_sprintf', 'xp_logevent', 'xp_sqlmaint', 'xp_loginconfig', 'xp_sscanf',
+
+ //API System Stored Procedures
+ 'sp_cursor', 'sp_cursorclose', 'sp_cursorexecute', 'sp_cursorfetch', 'sp_cursoropen',
+ 'sp_cursoroption', 'sp_cursorprepare', 'sp_cursorunprepare', 'sp_execute', 'sp_prepare', 'sp_unprepare',
+
+ //Misc
+ 'sp_createorphan', 'sp_droporphans', 'sp_reset_connection', 'sp_sdidebug'
+ ),
+ 4 => array(
+ //Function/sp's higlighted brown.
+ 'fn_helpcollations', 'fn_listextendedproperty ', 'fn_servershareddrives',
+ 'fn_trace_geteventinfo', 'fn_trace_getfilterinfo', 'fn_trace_getinfo',
+ 'fn_trace_gettable', 'fn_virtualfilestats','fn_listextendedproperty',
+ ),
+ ),
+ 'SYMBOLS' => array(
+ '!', '!=', '%', '&', '&&', '(', ')', '*', '+', '-', '/', '<', '<<', '<=',
+ '<=>', '<>', '=', '>', '>=', '>>', '^', 'ALL', 'AND', 'ANY', 'BETWEEN', 'CROSS',
+ 'EXISTS', 'IN', 'JOIN', 'LIKE', 'NOT', 'NULL', 'OR', 'OUTER', 'SOME', '|', '||', '~'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #0000FF;',
+ 2 => 'color: #FF00FF;',
+ 3 => 'color: #AF0000;',
+ 4 => 'color: #AF0000;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #008080;',
+ 'MULTI' => 'color: #008080;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #808080;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #FF0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #000;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #202020;',
+ 2 => 'color: #202020;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #808080;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/typoscript.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/typoscript.php
new file mode 100644
index 000000000..1e8243c2e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/typoscript.php
@@ -0,0 +1,300 @@
+<?php
+/*************************************************************************************
+ * typoscript.php
+ * --------
+ * Author: Jan-Philipp Halle (typo3@jphalle.de)
+ * Copyright: (c) 2005 Jan-Philipp Halle (http://www.jphalle.de/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2005/07/29
+ *
+ * TypoScript language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/07/11 (1.0.8)
+ * - Michiel Roos <geshi@typofree.org> Complete rewrite
+ * 2005/07/29 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/07/14)
+ * -------------------------
+ * <things-to-do>
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'TypoScript',
+ 'COMMENT_SINGLE' => array(1 => '//'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'COMMENT_REGEXP' => array(2 => '/(?<!(#|\'|"))(?:#(?!(?:[a-fA-F0-9]{6}|[a-fA-F0-9]{3}))[^\n#]+|#{2}[^\n#]+|#{7,999}[^\n]+)/'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array(),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ // Conditions: http://documentation.typo3.org/documentation/tsref/conditions/
+ 1 => array(
+ 'browser', 'compatVersion', 'dayofmonth', 'dayofweek', 'device',
+ 'globalString', 'globalVars', 'hostname', 'hour',
+ 'ip', 'language', 'loginUser', 'loginuser', 'minute',
+ 'month', 'PIDinRootline', 'PIDupinRootline',
+ 'system', 'treelevel', 'useragent', 'userFunc',
+ 'usergroup', 'version'
+ ),
+
+ // Functions: http://documentation.typo3.org/documentation/tsref/functions/
+ 2 => array(
+ 'addParams', 'encapsLines', 'filelink', 'HTMLparser',
+ 'HTMLparser_tags', 'if', 'imageLinkWrap',
+ 'imgResource', 'makelinks', 'numRows', 'parseFunc',
+ 'select', 'split', 'stdWrap', 'tableStyle', 'tags',
+ 'textStyle', 'typolink'
+ ),
+
+ // Toplevel objects: http://documentation.typo3.org/documentation/tsref/tlo-objects/
+ 3 => array(
+ 'CARRAY', 'CONFIG', 'CONSTANTS', 'FE_DATA', 'FE_TABLE', 'FRAME',
+ 'FRAMESET', 'META', 'PAGE', 'plugin'
+ ),
+
+ // Content Objects (cObject) : http://documentation.typo3.org/documentation/tsref/cobjects/
+ 4 => array(
+ 'CASE', 'CLEARGIF', 'COA', 'COA_INT', 'COBJ_ARRAY', 'COLUMNS',
+ 'CONTENT', 'CTABLE', 'EDITPANEL', 'FILE', 'FORM',
+ 'HMENU', 'HRULER', 'HTML', 'IMAGE', 'IMGTEXT',
+ 'IMG_RESOURCE', 'LOAD_REGISTER', 'MULTIMEDIA',
+ 'OTABLE', 'PHP_SCRIPT', 'PHP_SCRIPT_EXT',
+ 'PHP_SCRIPT_INT', 'RECORDS', 'RESTORE_REGISTER',
+ 'SEARCHRESULT', 'TEMPLATE', 'TEXT', 'USER',
+ 'USER_INT'
+ ),
+
+ // GIFBUILDER toplevel link: http://documentation.typo3.org/documentation/tsref/gifbuilder/
+ 5 => array(
+ 'GIFBUILDER',
+ ),
+
+ // GIFBUILDER: http://documentation.typo3.org/documentation/tsref/gifbuilder/
+ // skipped fields: IMAGE, TEXT
+ // NOTE! the IMAGE and TEXT field already are linked in group 4, they
+ // cannot be linked twice . . . . unfortunately
+ 6 => array(
+ 'ADJUST', 'BOX', 'CROP', 'EFFECT', 'EMBOSS',
+ 'IMGMAP', 'OUTLINE', 'SCALE', 'SHADOW',
+ 'WORKAREA'
+ ),
+
+ // MENU Objects: http://documentation.typo3.org/documentation/tsref/menu/
+ 7 => array(
+ 'GMENU', 'GMENU_FOLDOUT', 'GMENU_LAYERS', 'IMGMENU',
+ 'IMGMENUITEM', 'JSMENU', 'JSMENUITEM', 'TMENU',
+ 'TMENUITEM', 'TMENU_LAYERS'
+ ),
+
+ // MENU common properties: http://documentation.typo3.org/documentation/tsref/menu/common-properties/
+ 8 => array(
+ 'alternativeSortingField', 'begin', 'debugItemConf',
+ 'imgNameNotRandom', 'imgNamePrefix',
+ 'itemArrayProcFunc', 'JSWindow', 'maxItems',
+ 'minItems', 'overrideId', 'sectionIndex',
+ 'showAccessRestrictedPages', 'submenuObjSuffixes'
+ ),
+
+ // MENU item states: http://documentation.typo3.org/documentation/tsref/menu/item-states/
+ 9 => array(
+ 'ACT', 'ACTIFSUB', 'ACTIFSUBRO', 'ACTRO', 'CUR', 'CURIFSUB',
+ 'CURIFSUBRO', 'CURRO', 'IFSUB', 'IFSUBRO', 'NO',
+ 'SPC', 'USERDEF1', 'USERDEF1RO', 'USERDEF2',
+ 'USERDEF2RO', 'USR', 'USRRO'
+ ),
+ ),
+
+ // Does not include '-' because of stuff like htmlTag_langKey = en-GB and
+ // lib.nav-sub
+ 'SYMBOLS' => array(
+ 0 => array(
+ '|',
+ '+', '*', '/', '%',
+ '!', '&&', '^',
+ '<', '>', '=',
+ '?', ':',
+ '.'
+ ),
+ 1 => array(
+ '(', ')', '{', '}', '[', ']'
+ )
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ 2 => true,
+ 3 => true,
+ 4 => true,
+ 5 => true,
+ 6 => true,
+ 7 => true,
+ 8 => true,
+ 9 => true
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #ed7d14;',
+ 2 => 'font-weight: bold;',
+ 3 => 'color: #990000; font-weight: bold;',
+ 4 => 'color: #990000; font-weight: bold;',
+ 5 => 'color: #990000; font-weight: bold;',
+ 6 => 'color: #990000; font-weight: bold;',
+ 7 => 'color: #990000; font-weight: bold;',
+ 8 => 'font-weight: bold;',
+ 9 => 'color: #990000; font-weight: bold;',
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #aaa; font-style: italic;',
+ 2 => 'color: #aaa; font-style: italic;',
+ 'MULTI' => 'color: #aaa; font-style: italic;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ac14aa;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc0000;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #0000e0; font-weight: bold;',
+ 2 => 'color: #0000e0; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #009900;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #339933; font-weight: bold;',
+ // Set this to the same value as brackets above
+ 1 => 'color: #009900; font-weight: bold;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #009900;',
+ 1 => 'color: #009900; font-weight: bold;',
+ 2 => 'color: #3366CC;',
+ 3 => 'color: #000066; font-weight: bold;',
+ 4 => 'color: #ed7d14;',
+ 5 => 'color: #000066; font-weight: bold;',
+ 6 => 'color: #009900;',
+ 7 => 'color: #3366CC;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => 'http://documentation.typo3.org/documentation/tsref/conditions/{FNAME}/',
+ 2 => 'http://documentation.typo3.org/documentation/tsref/functions/{FNAME}/',
+ 3 => 'http://documentation.typo3.org/documentation/tsref/tlo-objects/{FNAME}/',
+ 4 => 'http://documentation.typo3.org/documentation/tsref/cobjects/{FNAME}/',
+ 5 => 'http://documentation.typo3.org/documentation/tsref/gifbuilder/',
+ 6 => 'http://documentation.typo3.org/documentation/tsref/gifbuilder/{FNAME}/',
+ 7 => 'http://documentation.typo3.org/documentation/tsref/menu/{FNAME}/',
+ 8 => 'http://documentation.typo3.org/documentation/tsref/menu/common-properties/',
+ 9 => 'http://documentation.typo3.org/documentation/tsref/menu/item-states/'
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ // Constant
+ 0 => array(
+ GESHI_SEARCH => '(\{)(\$[a-zA-Z_\.]+[a-zA-Z0-9_\.]*)(\})',
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => '\\3'
+ ),
+
+ // Constant dollar sign
+ 1 => array(
+ GESHI_SEARCH => '(\$)([a-zA-Z_\.]+[a-zA-Z0-9_\.]*)',
+ GESHI_REPLACE => '\\1',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => '\\2'
+ ),
+
+ // xhtml tag
+ 2 => array(
+ GESHI_SEARCH => '(&lt;[a-zA-Z\!\/].*?&gt;)',
+ GESHI_REPLACE => '\\1',
+ GESHI_MODIFIERS => 's',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
+ ),
+
+ // extension keys / tables: (static|user|ttx|tx|tt|fe)_something[_something]
+ 3 => array(
+ GESHI_SEARCH => '(plugin\.|[^\.]\b)((?:static|user|ttx|tx|tt|fe)(?:_[0-9A-Za-z_]+?)\b)',
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => ''
+ ),
+
+ // conditions and controls
+ 4 => array(
+ GESHI_SEARCH => '(\[)(globalVar|global|end)\b',
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => 'i',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => ''
+ ),
+
+ // lowlevel setup and constant objects
+ 5 => array(
+ GESHI_SEARCH => '([^\.\$-\{]\b)(cObj|field|config|content|file|frameset|includeLibs|lib|page|plugin|register|resources|sitemap|sitetitle|styles|temp|tt_content|tt_news|types|xmlnews)\b',
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => ''
+ ),
+
+ // markers
+ 6 => array(
+ GESHI_SEARCH => '(###[^#]+###)',
+ GESHI_REPLACE => '\\1',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
+ ),
+
+ // hex color codes
+ 7 => array(
+ GESHI_SEARCH => '(#[a-fA-F0-9]{6}\b|#[a-fA-F0-9]{3}\b)',
+ GESHI_REPLACE => '\\1',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
+ )
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/vb.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/vb.php
new file mode 100644
index 000000000..bc43ca4a8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/vb.php
@@ -0,0 +1,133 @@
+<?php
+/*************************************************************************************
+ * vb.php
+ * ------
+ * Author: Roberto Rossi (rsoftware@altervista.org)
+ * Copyright: (c) 2004 Roberto Rossi (http://rsoftware.altervista.org),
+ * Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/08/30
+ *
+ * Visual Basic language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/08/27 (1.0.8.1)
+ * - changed keyword list for better Visual Studio compliance
+ * 2008/08/26 (1.0.8.1)
+ * - Fixed multiline comments
+ * 2004/11/27 (1.0.1)
+ * - Added support for multiple object splitters
+ * 2004/08/30 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Visual Basic',
+ 'COMMENT_SINGLE' => array(),
+ 'COMMENT_MULTI' => array(),
+ 'COMMENT_REGEXP' => array(
+ // Comments (either single or multiline with _
+ 1 => '/\'.*(?<! _)\n/sU',
+ ),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'AddressOf', 'Alias', 'And', 'Append', 'As', 'BF', 'Binary',
+ 'Boolean', 'ByRef', 'Byte', 'ByVal', 'Call', 'Case', 'CBool',
+ 'CByte', 'CCur', 'CDate', 'CDbl', 'CDec', 'CInt', 'CLng',
+ 'Close', 'Collection', 'Const', 'Control', 'CSng', 'CStr',
+ 'Currency', 'CVar', 'Date', 'Declare', 'Dim', 'Do', 'Double',
+ 'Each', 'Else', 'ElseIf', 'End', 'Enum', 'Erase', 'Error',
+ 'Event', 'Exit', 'Explicit', 'False', 'For', 'Friend',
+ 'Function', 'Get', 'GoSub', 'Goto', 'If', 'Implements', 'In',
+ 'Input', 'Integer', 'Is', 'LBound', 'Let', 'Lib', 'Like',
+ 'Line', 'Long', 'Loop', 'Mod', 'New', 'Next', 'Not',
+ 'Nothing', 'Object', 'On', 'Open', 'Option', 'Optional',
+ 'Or', 'Output', 'ParamArray', 'Preserve', 'Print', 'Private',
+ 'Property', 'Public', 'RaiseEvent', 'Random', 'ReDim',
+ 'Resume', 'Select', 'Set', 'Single', 'Static', 'Step',
+ 'Stop', 'String', 'Sub', 'Then', 'To', 'True', 'Type',
+ 'TypeOf', 'UBound', 'Until', 'Variant', 'While', 'With',
+ 'WithEvents', 'Xor'
+ )
+ ),
+ 'SYMBOLS' => array(
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #000080;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #008000;'
+ ),
+ 'BRACKETS' => array(
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #800000;'
+ ),
+ 'NUMBERS' => array(
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #800000; font-weight: bold;'
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'PARSER_CONTROL' => array(
+ 'ENABLE_FLAGS' => array(
+ 'BRACKETS' => GESHI_NEVER,
+ 'SYMBOLS' => GESHI_NEVER,
+ 'NUMBERS' => GESHI_NEVER
+ )
+ )
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/vbnet.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/vbnet.php
new file mode 100644
index 000000000..e9f7c3e43
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/vbnet.php
@@ -0,0 +1,201 @@
+<?php
+/*************************************************************************************
+ * vbnet.php
+ * ---------
+ * Author: Alan Juden (alan@judenware.org)
+ * Copyright: (c) 2004 Alan Juden, Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/06/04
+ *
+ * VB.NET language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2004/11/27 (1.0.0)
+ * - Initial release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'vb.net',
+ 'COMMENT_SINGLE' => array(1 => "'"),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ 1 => array(
+ '3DDKSHADOW', '3DHIGHLIGHT', '3DLIGHT', 'ABORT', 'ABORTRETRYIGNORE', 'ACTIVEBORDER',
+ 'ACTIVETITLEBAR', 'ALIAS', 'APPLICATIONMODAL', 'APPLICATIONWORKSPACE', 'ARCHIVE',
+ 'BACK', 'BINARYCOMPARE', 'BLACK', 'BLUE', 'BUTTONFACE', 'BUTTONSHADOW', 'BUTTONTEXT',
+ 'CANCEL', 'CDROM', 'CR', 'CRITICAL', 'CRLF', 'CYAN', 'DEFAULT', 'DEFAULTBUTTON1',
+ 'DEFAULTBUTTON2', 'DEFAULTBUTTON3', 'DESKTOP', 'DIRECTORY', 'EXCLAMATION', 'FALSE',
+ 'FIXED', 'FORAPPENDING', 'FORMFEED', 'FORREADING', 'FORWRITING', 'FROMUNICODE',
+ 'GRAYTEXT', 'GREEN', 'HIDDEN', 'HIDE', 'HIGHLIGHT', 'HIGHLIGHTTEXT', 'HIRAGANA',
+ 'IGNORE', 'INACTIVEBORDER', 'INACTIVECAPTIONTEXT', 'INACTIVETITLEBAR', 'INFOBACKGROUND',
+ 'INFORMATION', 'INFOTEXT', 'KATAKANALF', 'LOWERCASE', 'MAGENTA', 'MAXIMIZEDFOCUS',
+ 'MENUBAR', 'MENUTEXT', 'METHOD', 'MINIMIZEDFOCUS', 'MINIMIZEDNOFOCUS', 'MSGBOXRIGHT',
+ 'MSGBOXRTLREADING', 'MSGBOXSETFOREGROUND', 'NARROW', 'NEWLINE', 'NO', 'NORMAL',
+ 'NORMALFOCUS', 'NORMALNOFOCUS', 'NULLSTRING', 'OBJECTERROR', 'OK', 'OKCANCEL', 'OKONLY',
+ 'PROPERCASE', 'QUESTION', 'RAMDISK', 'READONLY', 'RED', 'REMOTE', 'REMOVABLE', 'RETRY',
+ 'RETRYCANCEL', 'SCROLLBARS', 'SYSTEMFOLDER', 'SYSTEMMODAL', 'TEMPORARYFOLDER',
+ 'TEXTCOMPARE', 'TITLEBARTEXT', 'TRUE', 'UNICODE', 'UNKNOWN', 'UPPERCASE', 'VERTICALTAB',
+ 'VOLUME', 'WHITE', 'WIDE', 'WIN16', 'WIN32', 'WINDOWBACKGROUND', 'WINDOWFRAME',
+ 'WINDOWSFOLDER', 'WINDOWTEXT', 'YELLOW', 'YES', 'YESNO', 'YESNOCANCEL'
+ ),
+ 2 => array(
+ 'AndAlso', 'As', 'ADDHANDLER', 'ASSEMBLY', 'AUTO', 'Binary', 'ByRef', 'ByVal', 'BEGINEPILOGUE',
+ 'Else', 'ElseIf', 'Empty', 'Error', 'ENDPROLOGUE', 'EXTERNALSOURCE', 'ENVIRON', 'For',
+ 'Friend', 'GET', 'HANDLES', 'Input', 'Is', 'IsNot', 'Len', 'Lock', 'Me', 'Mid', 'MUSTINHERIT', 'MustOverride',
+ 'MYBASE', 'MYCLASS', 'New', 'Next', 'Nothing', 'Null', 'NOTINHERITABLE',
+ 'NOTOVERRIDABLE', 'OFF', 'On', 'Option', 'Optional', 'Overloads', 'OVERRIDABLE', 'Overrides', 'ParamArray',
+ 'Print', 'Private', 'Property', 'Public', 'Resume', 'Return', 'Seek', 'Static', 'Step',
+ 'String', 'SHELL', 'SENDKEYS', 'SET', 'Shared', 'Then', 'Time', 'To', 'THROW', 'WithEvents'
+ ),
+ 3 => array(
+ 'COLLECTION', 'DEBUG', 'DICTIONARY', 'DRIVE', 'DRIVES', 'ERR', 'FILE', 'FILES',
+ 'FILESYSTEMOBJECT', 'FOLDER', 'FOLDERS', 'TEXTSTREAM'
+ ),
+ 4 => array(
+ 'BOOLEAN', 'BYTE', 'DATE', 'DECIMIAL', 'DOUBLE', 'INTEGER', 'LONG', 'OBJECT',
+ 'SINGLE STRING'
+ ),
+ 5 => array(
+ 'ADDRESSOF', 'AND', 'BITAND', 'BITNOT', 'BITOR', 'BITXOR',
+ 'GETTYPE', 'LIKE', 'MOD', 'NOT', 'ORXOR'
+ ),
+ 6 => array(
+ 'APPACTIVATE', 'BEEP', 'CALL', 'CHDIR', 'CHDRIVE', 'CLASS', 'CASE', 'CATCH', 'CONST',
+ 'DECLARE', 'DELEGATE', 'DELETESETTING', 'DIM', 'DO', 'DOEVENTS', 'END', 'ENUM',
+ 'EVENT', 'EXIT', 'EACH', 'FUNCTION', 'FINALLY', 'IF', 'IMPORTS', 'INHERITS',
+ 'INTERFACE', 'IMPLEMENTS', 'KILL', 'LOOP', 'NAMESPACE', 'OPEN', 'PUT',
+ 'RAISEEVENT', 'RANDOMIZE', 'REDIM', 'REM', 'RESET', 'SAVESETTING', 'SELECT',
+ 'SETATTR', 'STOP', 'SUB', 'SYNCLOCK', 'STRUCTURE', 'SHADOWS', 'SWITCH',
+ 'TRY', 'WIDTH', 'WITH', 'WRITE', 'WHILE'
+ ),
+ 7 => array(
+ 'ABS', 'ARRAY', 'ASC', 'ASCB', 'ASCW', 'CALLBYNAME', 'CBOOL', 'CBYTE', 'CCHAR',
+ 'CCHR', 'CDATE', 'CDBL', 'CDEC', 'CHOOSE', 'CHR', 'CHR$', 'CHRB', 'CHRB$', 'CHRW',
+ 'CINT', 'CLNG', 'CLNG8', 'CLOSE', 'COBJ', 'COMMAND', 'COMMAND$', 'CONVERSION',
+ 'COS', 'CREATEOBJECT', 'CSHORT', 'CSTR', 'CURDIR', 'CTYPE', 'CVDATE', 'DATEADD',
+ 'DATEDIFF', 'DATEPART', 'DATESERIAL', 'DATEVALUE', 'DAY', 'DDB', 'DIR', 'DIR$',
+ 'EOF', 'ERROR$', 'EXP', 'FILEATTR', 'FILECOPY', 'FILEDATATIME', 'FILELEN', 'FILTER',
+ 'FIX', 'FORMAT', 'FORMAT$', 'FORMATCURRENCY', 'FORMATDATETIME', 'FORMATNUMBER',
+ 'FORMATPERCENT', 'FREEFILE', 'FV', 'GETALLSETTINGS', 'GETATTRGETOBJECT', 'GETSETTING',
+ 'HEX', 'HEX$', 'HOUR', 'IIF', 'IMESTATUS', 'INPUT$', 'INPUTB', 'INPUTB$', 'INPUTBOX',
+ 'INSTR', 'INSTRB', 'INSTRREV', 'INT', 'IPMT', 'IRR', 'ISARRAY', 'ISDATE', 'ISEMPTY',
+ 'ISERROR', 'ISNULL', 'ISNUMERIC', 'ISOBJECT', 'JOIN', 'LBOUND', 'LCASE', 'LCASE$',
+ 'LEFT', 'LEFT$', 'LEFTB', 'LEFTB$', 'LENB', 'LINEINPUT', 'LOC', 'LOF', 'LOG', 'LTRIM',
+ 'LTRIM$', 'MID$', 'MIDB', 'MIDB$', 'MINUTE', 'MIRR', 'MKDIR', 'MONTH', 'MONTHNAME',
+ 'MSGBOX', 'NOW', 'NPER', 'NPV', 'OCT', 'OCT$', 'PARTITION', 'PMT', 'PPMT', 'PV',
+ 'RATE', 'REPLACE', 'RIGHT', 'RIGHT$', 'RIGHTB', 'RIGHTB$', 'RMDIR', 'RND', 'RTRIM',
+ 'RTRIM$', 'SECOND', 'SIN', 'SLN', 'SPACE', 'SPACE$', 'SPC', 'SPLIT', 'SQRT', 'STR', 'STR$',
+ 'STRCOMP', 'STRCONV', 'STRING$', 'STRREVERSE', 'SYD', 'TAB', 'TAN', 'TIMEOFDAY',
+ 'TIMER', 'TIMESERIAL', 'TIMEVALUE', 'TODAY', 'TRIM', 'TRIM$', 'TYPENAME', 'UBOUND',
+ 'UCASE', 'UCASE$', 'VAL', 'WEEKDAY', 'WEEKDAYNAME', 'YEAR'
+ ),
+ 8 => array(
+ 'ANY', 'ATN', 'CALENDAR', 'CIRCLE', 'CURRENCY', 'DEFBOOL', 'DEFBYTE', 'DEFCUR',
+ 'DEFDATE', 'DEFDBL', 'DEFDEC', 'DEFINT', 'DEFLNG', 'DEFOBJ', 'DEFSNG', 'DEFSTR',
+ 'DEFVAR', 'EQV', 'GOSUB', 'IMP', 'INITIALIZE', 'ISMISSING', 'LET', 'LINE', 'LSET',
+ 'RSET', 'SGN', 'SQR', 'TERMINATE', 'VARIANT', 'VARTYPE', 'WEND'
+ ),
+ ),
+ 'SYMBOLS' => array(
+ '&', '&=', '*', '*=', '+', '+=', '-', '-=', '//', '/', '/=', '=', '\\', '\\=',
+ '^', '^='
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false,
+ 6 => false,
+ 7 => false,
+ 8 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #0600FF;', //Constants
+ 2 => 'color: #FF8000;', //Keywords
+ 3 => 'color: #008000;', //Data Types
+ 4 => 'color: #FF0000;', //Objects
+ 5 => 'color: #804040;', //Operators
+ 6 => 'color: #0600FF;', //Statements
+ 7 => 'color: #0600FF;', //Functions
+ 8 => 'color: #0600FF;' //Deprecated
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #008080; font-style: italic;',
+ 'MULTI' => 'color: #008080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #008080; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #808080;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #FF0000;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #0000FF;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #008000;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => 'http://www.google.com/search?q={FNAMEU}+site:msdn.microsoft.com',
+ 4 => '',
+ 5 => '',
+ 6 => '',
+ 7 => '',
+ 8 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 =>'.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/verilog.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/verilog.php
new file mode 100644
index 000000000..ba1766c2d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/verilog.php
@@ -0,0 +1,173 @@
+<?php
+/**
+ * verilog.php
+ * -----------
+ * Author: G�nter Dannoritzer <dannoritzer@web.de>
+ * Copyright: (C) 2008 Guenter Dannoritzer
+ * Release Version: 1.0.8.4
+ * Date Started: 2008/05/28
+ *
+ * Verilog language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/29
+ * - added regular expression to find numbers of the form 4'b001xz
+ * - added regular expression to find values for `timescale command
+ * - extended macro keywords
+ *
+ * TODO (updated 2008/05/29)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Verilog',
+ 'COMMENT_SINGLE' => array(1 => '//'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'COMMENT_REGEXP' => array(1 => '/\/\/(?:\\\\\\\\|\\\\\\n|.)*$/m'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ // keywords
+ 1 => array('always', 'and', 'assign', 'begin', 'buf', 'bufif0', 'bufif1', 'case',
+ 'casex', 'casez', 'cmos', 'deassign', 'default', 'defparam',
+ 'disable', 'edge', 'else', 'end', 'endcase', 'endfunction',
+ 'endmodule', 'endprimitive', 'endspecify', 'endtable', 'endtask',
+ 'event', 'for', 'force', 'forever', 'function', 'highz0',
+ 'highz1', 'if', 'ifnone', 'initial', 'inout', 'input', 'integer',
+ 'join', 'large', 'macromodule', 'medium', 'module', 'nand',
+ 'negedge', 'nmos', 'nor', 'not', 'notif0', 'notif1', 'or',
+ 'output', 'parameter', 'pmos', 'posedge', 'primitive', 'pull0',
+ 'pull1', 'pulldown', 'pullup', 'rcmos', 'real', 'realtime', 'reg',
+ 'release', 'repeat', 'rnmos', 'rpmos', 'rtran', 'rtranif0',
+ 'rtranif1', 'scalared', 'small', 'specify', 'specparam',
+ 'strong0', 'strong1', 'supply0', 'supply1', 'table', 'task',
+ 'time', 'tran', 'tranif0', 'tranif1', 'tri', 'tri0', 'tri1',
+ 'triand', 'trior', 'trireg', 'vectored', 'wait', 'wand', 'weak0',
+ 'weak1', 'while', 'wire', 'wor', 'xnor', 'xor'
+ ),
+ // system tasks
+ 2 => array(
+ '$display', '$monitor',
+ '$dumpall', '$dumpfile', '$dumpflush', '$dumplimit', '$dumpoff',
+ '$dumpon', '$dumpvars',
+ '$fclose', '$fdisplay', '$fopen',
+ '$finish', '$fmonitor', '$fstrobe', '$fwrite',
+ '$fgetc', '$ungetc', '$fgets', '$fscanf', '$fread', '$ftell',
+ '$fseek', '$frewind', '$ferror', '$fflush', '$feof',
+ '$random',
+ '$readmemb', '$readmemh', '$readmemx',
+ '$signed', '$stime', '$stop',
+ '$strobe', '$time', '$unsigned', '$write'
+ ),
+ // macros
+ 3 => array(
+ '`default-net', '`define',
+ '`celldefine', '`default_nettype', '`else', '`elsif', '`endcelldefine',
+ '`endif', '`ifdef', '`ifndef', '`include', '`line', '`nounconnected_drive',
+ '`resetall', '`timescale', '`unconnected_drive', '`undef'
+ ),
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '{', '}', '[', ']', '=', '+', '-', '*', '/', '!', '%',
+ '^', '&', '|', '~',
+ '?', ':',
+ '#', '<<', '<<<',
+ '>', '<', '>=', '<=',
+ '@', ';', ','
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #A52A2A; font-weight: bold;',
+ 2 => 'color: #9932CC;',
+ 3 => 'color: #008800;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #00008B; font-style: italic;',
+ 'MULTI' => 'color: #00008B; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #9F79EE'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #9F79EE;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #FF00FF;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #ff0055;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #202020;',
+ 2 => 'color: #202020;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #5D478B;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #ff0055;',
+ 1 => 'color: #ff0055;',
+ ),
+ 'SCRIPT' => array(
+ 0 => '',
+ 1 => '',
+ 2 => '',
+ 3 => ''
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => ''
+ ),
+ 'REGEXPS' => array(
+ // numbers
+ 0 => "\d'[bdh][0-9_a-fA-FxXzZ]+",
+ // time -> 1, 10, or 100; s, ms, us, ns, ps, of fs
+ 1 => "1[0]{0,2}[munpf]?s"
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ 1 => ''
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ 0 => true,
+ 1 => true,
+ 2 => true,
+ 3 => true
+ ),
+ 'TAB_WIDTH' => 4
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/vhdl.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/vhdl.php
new file mode 100644
index 000000000..14072c9d7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/vhdl.php
@@ -0,0 +1,144 @@
+<?php
+/*************************************************************************************
+ * vhdl.php
+ * --------
+ * Author: Alexander 'E-Razor' Krause (admin@erazor-zone.de)
+ * Copyright: (c) 2005 Alexander Krause
+ * Release Version: 1.0.8.4
+ * Date Started: 2005/06/15
+ *
+ * VHDL (VHSICADL, very high speed integrated circuit HDL) language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * - Optimized regexp group 0 somewhat
+ * 2006/06/15 (1.0.0)
+ * - First Release
+ *
+ * TODO
+ * ----
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'VHDL',
+ 'COMMENT_SINGLE' => array(1 => '--'),
+ 'COMMENT_MULTI' => array('%' => '%'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ /*keywords*/
+ 1 => array(
+ 'access','after','alias','all','assert','attribute','architecture','begin',
+ 'block','body','buffer','bus','case','component','configuration','constant',
+ 'disconnect','downto','else','elsif','end','entity','exit','file','for',
+ 'function','generate','generic','group','guarded','if','impure','in',
+ 'inertial','inout','is','label','library','linkage','literal','loop',
+ 'map','new','next','null','of','on','open','others','out','package',
+ 'port','postponed','procedure','process','pure','range','record','register',
+ 'reject','report','return','select','severity','signal','shared','subtype',
+ 'then','to','transport','type','unaffected','units','until','use','variable',
+ 'wait','when','while','with','note','warning','error','failure','and',
+ 'or','xor','not','nor','used','memory','segments','dff','dffe','help_id',
+ 'mod','info','latch','rising_edge','falling_edge'
+ ),
+ /*types*/
+ 2 => array(
+ 'bit','bit_vector','character','boolean','integer','real','time','string',
+ 'severity_level','positive','natural','signed','unsigned','line','text',
+ 'std_logic','std_logic_vector','std_ulogic','std_ulogic_vector','qsim_state',
+ 'qsim_state_vector','qsim_12state','qsim_12state_vector','qsim_strength',
+ 'mux_bit','mux_vector','reg_bit','reg_vector','wor_bit','wor_vector',
+ 'work','ieee','std_logic_signed','std_logic_1164','std_logic_arith',
+ 'numeric_std'
+
+ ),
+ /*operators*/
+ ),
+ 'SYMBOLS' => array(
+ '[', ']', '(', ')',
+ ';',':',
+ '<','>','=','<=',':=','=>','=='
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #000080; font-weight: bold;',
+ 2 => 'color: #0000ff;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #008000; font-style: italic;',
+ 'MULTI' => 'color: #008000; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #000066;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #7f007f;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #000066;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #ff0000;',
+ 1 => 'color: #ff0000;'
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ //Hex numbers and scientific notation for numbers
+ 0 => '(\b0x[0-9a-fA-F]+|\b\d[0-9a-fA-F]+[hH])|'.
+ '(\b\d+?(\.\d+?)?E[+\-]?\d+)|(\bns)|'.
+ "('[0-9a-zA-Z]+(?!'))",
+ //Number characters?
+ 1 => "\b(''\d'')"
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/vim.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/vim.php
new file mode 100644
index 000000000..3946c4f96
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/vim.php
@@ -0,0 +1,185 @@
+<?php
+
+/*************************************************************************************
+ * vim.php
+ * ----------------
+ * Author: Swaroop C H (swaroop@swaroopch.com)
+ * Copyright: (c) 2008 Swaroop C H (http://www.swaroopch.com)
+ * Release Version: 1.0.8.4
+ * Date Started: 2008/10/19
+ *
+ * Vim scripting language file for GeSHi.
+ *
+ * Reference: http://qbnz.com/highlighter/geshi-doc.html#language-files
+ * All keywords scraped from `:help expression-commands`.
+ * All method names scraped from `:help function-list`.
+ *
+ * CHANGES
+ * -------
+ * 2008/10/19 (1.0.8.2)
+ * - Started.
+ *
+ * TODO (updated 2008/10/19)
+ * -------------------------
+ * - Fill out list of zillion commands
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array(
+ 'LANG_NAME' => 'Vim Script',
+ 'COMMENT_SINGLE' => array(),
+ 'COMMENT_REGEXP' => array(
+ 1 => "/^\".*$/m"
+ ),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'brea', 'break', 'call', 'cat', 'catc',
+ 'catch', 'con', 'cont', 'conti',
+ 'contin', 'continu', 'continue', 'ec', 'echo',
+ 'echoe', 'echoer', 'echoerr', 'echoh',
+ 'echohl', 'echom', 'echoms', 'echomsg', 'echon',
+ 'el', 'els', 'else', 'elsei', 'elseif',
+ 'en', 'end', 'endi', 'endif', 'endfo',
+ 'endfor', 'endt', 'endtr', 'endtry', 'endw',
+ 'endwh', 'endwhi', 'endwhil', 'endwhile', 'exe', 'exec', 'execu',
+ 'execut', 'execute', 'fina', 'final', 'finall', 'finally', 'for',
+ 'fun', 'func', 'funct', 'functi', 'functio', 'function', 'if', 'in',
+ 'let', 'lockv', 'lockva', 'lockvar', 'retu', 'retur', 'return', 'th',
+ 'thr', 'thro', 'throw', 'try', 'unl', 'unle', 'unlet', 'unlo', 'unloc',
+ 'unlock', 'unlockv', 'unlockva', 'unlockvar', 'wh', 'whi', 'whil',
+ 'while'
+ ),
+ 2 => array(
+ 'autocmd', 'com', 'comm', 'comma', 'comman', 'command', 'comc',
+ 'comcl', 'comcle', 'comclea', 'comclear', 'delc', 'delco',
+ 'delcom', 'delcomm', 'delcomma', 'delcomman', 'delcommand',
+ '-nargs' # TODO There are zillions of commands to be added here from http://vimdoc.sourceforge.net/htmldoc/usr_toc.html
+ ),
+ 3 => array(
+ 'abs', 'add', 'append', 'argc', 'argidx', 'argv', 'atan',
+ 'browse', 'browsedir', 'bufexists', 'buflisted', 'bufloaded',
+ 'bufname', 'bufnr', 'bufwinnr', 'byte2line', 'byteidx',
+ 'ceil', 'changenr', 'char2nr', 'cindent', 'clearmatches',
+ 'col', 'complete', 'complete_add', 'complete_check', 'confirm',
+ 'copy', 'cos', 'count', 'cscope_connection', 'cursor',
+ 'deepcopy', 'delete', 'did_filetype', 'diff_filler',
+ 'diff_hlID', 'empty', 'escape', 'eval', 'eventhandler',
+ 'executable', 'exists', 'extend', 'expand', 'feedkeys',
+ 'filereadable', 'filewritable', 'filter', 'finddir',
+ 'findfile', 'float2nr', 'floor', 'fnameescape', 'fnamemodify',
+ 'foldclosed', 'foldclosedend', 'foldlevel', 'foldtext',
+ 'foldtextresult', 'foreground', 'garbagecollect',
+ 'get', 'getbufline', 'getbufvar', 'getchar', 'getcharmod',
+ 'getcmdline', 'getcmdpos', 'getcmdtype', 'getcwd', 'getfperm',
+ 'getfsize', 'getfontname', 'getftime', 'getftype', 'getline',
+ 'getloclist', 'getmatches', 'getpid', 'getpos', 'getqflist',
+ 'getreg', 'getregtype', 'gettabwinvar', 'getwinposx',
+ 'getwinposy', 'getwinvar', 'glob', 'globpath', 'has',
+ 'has_key', 'haslocaldir', 'hasmapto', 'histadd', 'histdel',
+ 'histget', 'histnr', 'hlexists', 'hlID', 'hostname', 'iconv',
+ 'indent', 'index', 'input', 'inputdialog', 'inputlist',
+ 'inputrestore', 'inputsave', 'inputsecret', 'insert',
+ 'isdirectory', 'islocked', 'items', 'join', 'keys', 'len',
+ 'libcall', 'libcallnr', 'line', 'line2byte', 'lispindent',
+ 'localtime', 'log10', 'map', 'maparg', 'mapcheck', 'match',
+ 'matchadd', 'matcharg', 'matchdelete', 'matchend', 'matchlist',
+ 'matchstr', 'max', 'min', 'mkdir', 'mode', 'nextnonblank',
+ 'nr2char', 'pathshorten', 'pow', 'prevnonblank', 'printf',
+ 'pumvisible', 'range', 'readfile', 'reltime', 'reltimestr',
+ 'remote_expr', 'remote_foreground', 'remote_peek',
+ 'remote_read', 'remote_send', 'remove', 'rename', 'repeat',
+ 'resolve', 'reverse', 'round', 'search', 'searchdecl',
+ 'searchpair', 'searchpairpos', 'searchpos', 'server2client',
+ 'serverlist', 'setbufvar', 'setcmdpos', 'setline',
+ 'setloclist', 'setmatches', 'setpos', 'setqflist', 'setreg',
+ 'settabwinvar', 'setwinvar', 'shellescape', 'simplify', 'sin',
+ 'sort', 'soundfold', 'spellbadword', 'spellsuggest', 'split',
+ 'sqrt', 'str2float', 'str2nr', 'strftime', 'stridx', 'string',
+ 'strlen', 'strpart', 'strridx', 'strtrans', 'submatch',
+ 'substitute', 'synID', 'synIDattr', 'synIDtrans', 'synstack',
+ 'system', 'tabpagebuflist', 'tabpagenr', 'tabpagewinnr',
+ 'taglist', 'tagfiles', 'tempname', 'tolower', 'toupper', 'tr',
+ 'trunc', 'type', 'values', 'virtcol', 'visualmode', 'winbufnr',
+ 'wincol', 'winheight', 'winline', 'winnr', 'winrestcmd',
+ 'winrestview', 'winsaveview', 'winwidth', 'writefile'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '[', ']', '{', '}', '!', '%', '&', '*', '|', '/', '<', '>',
+ '^', '-', '+', '~', '?', ':', '$', '@', '.'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ 2 => true,
+ 3 => true
+ ),
+ 'STYLES' => array(
+ 'BRACKETS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #adadad; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => ''
+ ),
+ 'KEYWORDS' => array(
+ 1 => 'color: #804040;',
+ 2 => 'color: #668080;',
+ 3 => 'color: #25BB4D;'
+ ),
+ 'METHODS' => array(
+ 0 => 'color: #000000;',
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #000000; font-weight:bold;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #C5A22D;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #000000;'
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => ''
+ ),
+ 'OOLANG' => false, //Save some time as OO identifiers aren't used
+ 'OBJECT_SPLITTERS' => array(),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(),
+ 'HIGHLIGHT_STRICT_BLOCK' => array()
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/visualfoxpro.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/visualfoxpro.php
new file mode 100644
index 000000000..0cb73c2a0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/visualfoxpro.php
@@ -0,0 +1,456 @@
+<?php
+/*************************************************************************************
+ * visualfoxpro.php
+ * ----------------
+ * Author: Roberto Armellin (r.armellin@tin.it)
+ * Copyright: (c) 2004 Roberto Armellin, Nigel McNie (http://qbnz.com/highlighter/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/09/17
+ *
+ * Visual FoxPro language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Removed tab as a symbol char
+ * 2004/11/27 (1.0.1)
+ * - Added support for multiple object splitters
+ * 2004/10/27 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/10/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Visual Fox Pro',
+ 'COMMENT_SINGLE' => array(1 => "//", 2 => "\n*"),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'Case', 'Else', '#Else', 'Then',
+ 'Endcase', 'Enddefine', 'Enddo', 'Endfor', 'Endfunc', 'Endif', 'Endprintjob',
+ 'Endproc', 'Endscan', 'Endtext', 'Endwith', '#Endif',
+ '#Elif','#Define','#If','#Include',
+ '#Itsexpression','#Readclauses','#Region','#Section','#Undef','#Wname',
+ 'Define','Do',
+ 'For','Function','Hidden',
+ 'If','Local','Lparameter','Lparameters','Next','Otherwise',
+ 'Parameters','Printjob','Procedure','Protected','Public','Scan',
+ 'Text','While','With','Abs','Accept','Access','Aclass','Acopy',
+ 'Acos','Adatabases','Adbobjects','Addbs','Addrelationtoenv','Addtabletoenv',
+ 'Adel','Adir','Aelement','Aerror','Afields','Afont',
+ 'Agetclass','Agetfileversion','Ains','Ainstance','Alen','Align',
+ 'Alines','Alltrim','Alter','Amembers','Amouseobj','Anetresources',
+ 'Ansitooem','Append','Aprinters','Ascan','Aselobj','Asin',
+ 'Asort','Assert','Asserts','Assist','Asubscript','Asynchronous',
+ 'At_c','Atan','Atc','Atcc','Atcline','Atline',
+ 'Atn2','Aused','Autoform','Autoreport','Avcxclasses','Average',
+ 'BarCount','BarPrompt','BatchMode','BatchUpdateCount','Begin','BellSound',
+ 'BinToC','Bintoc','Bitand','Bitclear','Bitlshift','Bitnot',
+ 'Bitor','Bitrshift','Bitset','Bittest','Bitxor','Bof',
+ 'Browse','BrowseRefresh','Buffering','BuilderLock','COMArray','COMReturnError',
+ 'CToBin','Calculate','Call','Capslock','Cd','Cdow',
+ 'Ceiling','Central','Change','Char','Chdir','Chr',
+ 'Chrsaw','Chrtran','Chrtranc','Close','Cmonth','Cntbar',
+ 'Cntpad','Col','Comclassinfo','CommandTargetQuery','Compile','Completed',
+ 'Compobj','Compute','Concat','ConnectBusy','ConnectHandle','ConnectName',
+ 'ConnectString','ConnectTimeOut','ContainerReleaseType','Continue','Copy','Cos',
+ 'Cot','Count','Coverage','Cpconvert','Cpcurrent','Cpdbf',
+ 'Cpnotrans','Create','CreateBinary','Createobject','Createobjectex','Createoffline',
+ 'CrsBuffering','CrsFetchMemo','CrsFetchSize','CrsMaxRows','CrsMethodUsed','CrsNumBatch',
+ 'CrsShareConnection','CrsUseMemoSize','CrsWhereClause','Ctobin','Ctod','Ctot',
+ 'Curdate','Curdir','CurrLeft','CurrSymbol','CursorGetProp','CursorSetProp',
+ 'Curtime','Curval','DBGetProp','DBSetProp','DB_BufLockRow','DB_BufLockTable',
+ 'DB_BufOff','DB_BufOptRow','DB_BufOptTable','DB_Complette','DB_DeleteInsert','DB_KeyAndModified',
+ 'DB_KeyAndTimestamp','DB_KeyAndUpdatable','DB_LocalSQL','DB_NoPrompt','DB_Prompt','DB_RemoteSQL',
+ 'DB_TransAuto','DB_TransManual','DB_TransNone','DB_Update','Datetime','Day',
+ 'Dayname','Dayofmonth','Dayofweek','Dayofyear','Dbalias','Dbused',
+ 'Ddeaborttrans','Ddeadvise','Ddeenabled','Ddeexecute','Ddeinitiate','Ddelasterror',
+ 'Ddepoke','Dderequest','Ddesetoption','Ddesetservice','Ddesettopic','Ddeterminate',
+ 'Debugout','Declare','DefOLELCid','DefaultValue','Defaultext','Degrees',
+ 'DeleteTrigger','Desc','Description','Difference','Dimension','Dir',
+ 'Directory','Diskspace','DispLogin','DispWarnings','Display','Dll',
+ 'Dmy','DoDefault','DoEvents','Doc','Doevents','Dow',
+ 'Drivetype','Drop','Dropoffline','Dtoc','Dtor','Dtos',
+ 'Dtot','DynamicInputMask','Each','Edit','Eject','Elif',
+ 'End','Eof','Erase','Evaluate','Event','Eventtracking',
+ 'Exclude','Exclusive','Exit','Exp','Export','External',
+ 'FDate','FTime','Fchsize','Fclose','Fcount','Fcreate',
+ 'Feof','Ferror','FetchMemo','FetchSize','Fflush','Fgets',
+ 'Filer','Filetostr','Find','Fklabel','Fkmax','Fldlist',
+ 'Flock','Floor','Flush','Fontmetric','Fopen','Forceext',
+ 'Forcepath','FormSetClass','FormSetLib','FormsClass','FormsLib','Found',
+ 'FoxPro','Foxcode','Foxdoc','Foxgen','Foxgraph','Foxview',
+ 'Fputs','Fread','French','Fseek','Fsize','Fv',
+ 'Fwrite','Gather','German','GetPem','Getbar','Getcolor',
+ 'Getcp','Getdir','Getenv','Getexpr','Getfile','Getfldstate',
+ 'Getfont','Gethost','Getnextmodified','Getobject','Getpad','Getpict',
+ 'Getprinter','Go','Gomonth','Goto','Graph','GridHorz',
+ 'GridShow','GridShowPos','GridSnap','GridVert','Help','HelpOn',
+ 'HelpTo','HighLightRow','Home','Hour','IMEStatus','IdleTimeOut',
+ 'Idxcollate','Ifdef','Ifndef','Iif','Import','Include',
+ 'Indbc','Index','Indexseek','Inkey','Inlist','Input',
+ 'Insert','InsertTrigger','Insmode','IsBlank','IsFLocked','IsLeadByte',
+ 'IsMouse','IsNull','IsRLocked','Isalpha','Iscolor','Isdigit',
+ 'Isexclusive','Isflocked','Ishosted','Islower','Isreadonly','Isrlocked',
+ 'Isupper','Italian','Japan','Join','Justdrive','Justext',
+ 'Justfname','Justpath','Juststem','KeyField','KeyFieldList','Keyboard'
+ ),
+ 2 => array('Keymatch','LastProject','Lastkey','Lcase','Leftc','Len',
+ 'Lenc','Length','Likec','Lineno','LoadPicture','Loadpicture',
+ 'Locate','Locfile','Log','Log10','Logout','Lookup',
+ 'Loop','Lower','Ltrim','Lupdate','Mail','MaxRecords',
+ 'Mcol','Md','Mdown','Mdx','Mdy','Memlines',
+ 'Menu','Messagebox','Minute','Mkdir','Mline','Modify',
+ 'Month','Monthname','Mouse','Mrkbar','Mrkpad','Mrow',
+ 'Mtdll','Mton','Mwindow','Native','Ndx','Network',
+ 'NoFilter','Nodefault','Normalize','Note','Now','Ntom',
+ 'NullString','Numlock','Nvl','ODBChdbc','ODBChstmt','OLEDropTextInsertion',
+ 'OLELCid','Objnum','Objref','Objtoclient','Objvar','Occurs',
+ 'Oemtoansi','Oldval','OlePublic','Olereturnerror','On','Open',
+ 'Oracle','Order','Os','Outer','PCount','Pack',
+ 'PacketSize','Padc','Padl','Padr','Payment','Pcol',
+ 'PemStatus','Pi','Pivot','Play','Pop','Popup',
+ 'Power','PrimaryKey','Printstatus','Private','Prmbar','Prmpad',
+ 'ProjectClick','Proper','Prow','Prtinfo','Push','Putfile',
+ 'Pv','Qpr','Quater','QueryTimeOut','Quit','Radians',
+ 'Rand','Rat','Ratc','Ratline','Rd','Rdlevel',
+ 'Read','Readkey','Recall','Reccount','RecentlyUsedFiles','Recno',
+ 'Recsize','Regional','Reindex','RelatedChild','RelatedTable','RelatedTag',
+ 'Remove','Rename','Repeat','Replace','Replicate','Report',
+ 'ResHeight','ResWidth','ResourceOn','ResourceTo','Resources','Restore',
+ 'Resume','Retry','Return','Revertoffline','Rgbscheme','Rightc',
+ 'Rlock','Rmdir','Rollback','Round','Rtod','Rtrim',
+ 'RuleExpression','RuleText','Run','Runscript','Rview','SQLAsynchronous',
+ 'SQLBatchMode','SQLCancel','SQLColumns','SQLConnect','SQLConnectTimeOut','SQLDisconnect',
+ 'SQLDispLogin','SQLDispWarnings','SQLExec','SQLGetProp','SQLIdleTimeOut','SQLMoreResults',
+ 'SQLPrepare','SQLQueryTimeOut','SQLSetProp','SQLTables','SQLTransactions','SQLWaitTime',
+ 'Save','SavePicture','Savepicture','ScaleUnits','Scatter','Scols',
+ 'Scroll','Sec','Second','Seek','Select','SendUpdates',
+ 'Set','SetDefault','Setfldstate','Setup','ShareConnection','ShowOLEControls',
+ 'ShowOLEInsertable','ShowVCXs','Sign','Sin','Size','SizeBox',
+ 'Skpbar','Skppad','Sort','Soundex','SourceName','Sqlcommit',
+ 'Sqll','Sqlrollback','Sqlstringconnect','Sqrt','Srows','StatusBar',
+ 'Store','Str','Strconv','Strtofile','Strtran','Stuff',
+ 'Stuffc','Substr','Substrc','Substring','Sum','Suspend',
+ 'Sys','Sysmetric','TabOrdering','Table','TableRefresh','Tablerevert',
+ 'Tableupdate','TagCount','TagNo','Tan','Target','This',
+ 'Thisform','Thisformset','Timestamp','Timestampdiff','Total','Transactions',
+ 'Transform','Trim','Truncate','Ttoc','Ttod','Txnlevel',
+ 'Txtwidth','Type','Ucase','Undefine','Unlock','Unpack',
+ 'Updatable','UpdatableFieldList','Update','UpdateName','UpdateNameList','UpdateTrigger',
+ 'UpdateType','Updated','Upper','Upsizing','Usa','Use',
+ 'UseMemoSize','Used','Val','Validate','Varread','Vartype',
+ 'Version','VersionLanguage','Wait','WaitTime','Wborder','Wchild',
+ 'Wcols','Week','Wexist','Wfont','WhereType','Windcmd',
+ 'Windhelp','Windmemo','Windmenu','Windmodify','Windquery','Windscreen',
+ 'Windsnip','Windstproc','WizardPrompt','Wlast','Wlcol','Wlrow',
+ 'Wmaximum','Wminimum','Wontop','Woutput','Wparent','Wread',
+ 'Wrows','Wtitle','Wvisible','Year','Zap','_Alignment',
+ '_Asciicols','_Asciirows','_Assist','_Beautify','_Box','_Browser',
+ '_Builder','_Calcmem','_Calcvalue','_Cliptext','_Converter','_Coverage',
+ '_Curobj','_Dblclick','_Diarydate','_Dos','_Foxdoc','_Foxgraph',
+ '_Gallery','_Gengraph','_Genhtml','_Genmenu','_Genpd','_Genscrn',
+ '_Genxtab','_Getexpr','_Include','_Indent','_Lmargin','_Mac',
+ '_Mbr_appnd','_Mbr_cpart','_Mbr_delet','_Mbr_font','_Mbr_goto','_Mbr_grid',
+ '_Mbr_link','_Mbr_mode','_Mbr_mvfld','_Mbr_mvprt','_Mbr_seek','_Mbr_sp100',
+ '_Mbr_sp200','_Mbr_szfld','_Mbrowse','_Mda_appnd','_Mda_avg','_Mda_brow',
+ '_Mda_calc','_Mda_copy','_Mda_count','_Mda_label','_Mda_pack','_Mda_reprt',
+ '_Mda_rindx','_Mda_setup','_Mda_sort','_Mda_sp100','_Mda_sp200','_Mda_sp300',
+ '_Mda_sum','_Mda_total','_Mdata','_Mdiary','_Med_clear','_Med_copy',
+ '_Med_cut','_Med_cvtst','_Med_find','_Med_finda','_Med_goto','_Med_insob',
+ '_Med_link','_Med_obj','_Med_paste','_Med_pref','_Med_pstlk','_Med_redo',
+ '_Med_repl','_Med_repla','_Med_slcta','_Med_sp100','_Med_sp200','_Med_sp300',
+ '_Med_sp400','_Med_sp500','_Med_undo','_Medit','_Mfi_clall','_Mfi_close',
+ '_Mfi_export','_Mfi_import','_Mfi_new','_Mfi_open','_Mfi_pgset','_Mfi_prevu',
+ '_Mfi_print','_Mfi_quit','_Mfi_revrt','_Mfi_savas','_Mfi_save','_Mfi_send',
+ '_Mfi_setup','_Mfi_sp100','_Mfi_sp200','_Mfi_sp300','_Mfi_sp400','_Mfile',
+ '_Mfiler','_Mfirst','_Mlabel','_Mlast','_Mline','_Mmacro',
+ '_Mmbldr','_Mpr_beaut','_Mpr_cancl','_Mpr_compl','_Mpr_do','_Mpr_docum',
+ '_Mpr_formwz','_Mpr_gener','_Mpr_graph','_Mpr_resum','_Mpr_sp100','_Mpr_sp200',
+ '_Mpr_sp300','_Mpr_suspend','_Mprog','_Mproj','_Mrc_appnd','_Mrc_chnge',
+ '_Mrc_cont','_Mrc_delet','_Mrc_goto','_Mrc_locat','_Mrc_recal','_Mrc_repl',
+ '_Mrc_seek','_Mrc_sp100','_Mrc_sp200','_Mrecord','_Mreport','_Mrqbe',
+ '_Mscreen','_Msm_data','_Msm_edit','_Msm_file','_Msm_format','_Msm_prog',
+ '_Msm_recrd','_Msm_systm','_Msm_text','_Msm_tools','_Msm_view','_Msm_windo',
+ '_Mst_about','_Mst_ascii','_Mst_calcu','_Mst_captr','_Mst_dbase','_Mst_diary',
+ '_Mst_filer','_Mst_help','_Mst_hphow','_Mst_hpsch','_Mst_macro','_Mst_office',
+ '_Mst_puzzl','_Mst_sp100','_Mst_sp200','_Mst_sp300','_Mst_specl','_Msysmenu',
+ '_Msystem','_Mtable','_Mtb_appnd','_Mtb_cpart','_Mtb_delet','_Mtb_delrc',
+ '_Mtb_goto','_Mtb_link','_Mtb_mvfld','_Mtb_mvprt','_Mtb_props','_Mtb_recal',
+ '_Mtb_sp100','_Mtb_sp200','_Mtb_sp300','_Mtb_sp400','_Mtb_szfld','_Mwi_arran',
+ '_Mwi_clear','_Mwi_cmd','_Mwi_color','_Mwi_debug','_Mwi_hide','_Mwi_hidea',
+ '_Mwi_min','_Mwi_move','_Mwi_rotat','_Mwi_showa','_Mwi_size','_Mwi_sp100',
+ '_Mwi_sp200','_Mwi_toolb','_Mwi_trace','_Mwi_view','_Mwi_zoom','_Mwindow',
+ '_Mwizards','_Mwz_all','_Mwz_form','_Mwz_foxdoc','_Mwz_import','_Mwz_label',
+ '_Mwz_mail','_Mwz_pivot','_Mwz_query','_Mwz_reprt','_Mwz_setup','_Mwz_table',
+ '_Mwz_upsizing','_Netware','_Oracle','_Padvance','_Pageno','_Pbpage',
+ '_Pcolno','_Pcopies','_Pdparms','_Pdriver','_Pdsetup','_Pecode',
+ '_Peject','_Pepage','_Pform','_Plength','_Plineno','_Ploffset',
+ '_Ppitch','_Pquality','_Pretext','_Pscode','_Pspacing','_Pwait',
+ '_Rmargin','_Runactivedoc','_Samples','_Screen','_Shell','_Spellchk',
+ '_Sqlserver','_Startup','_Tabs','_Tally','_Text','_Throttle',
+ '_Transport','_Triggerlevel','_Unix','_WebDevOnly','_WebMenu','_WebMsftHomePage',
+ '_WebVFPHomePage','_WebVfpOnlineSupport','_Windows','_Wizard','_Wrap','_scctext',
+ '_vfp','Additive','After','Again','Aindent','Alignright',
+ 'All','Alt','Alternate','And','Ansi','Any',
+ 'Aplabout','App','Array','As','Asc','Ascending',
+ 'Ascii','At','Attributes','Automatic','Autosave','Avg',
+ 'Bar','Before','Bell','Between','Bitmap','Blank',
+ 'Blink','Blocksize','Border','Bottom','Brstatus','Bucket',
+ 'Buffers','By','Candidate','Carry','Cascade','Catalog',
+ 'Cdx','Center','Century','Cga','Character','Check',
+ 'Classlib','Clock','Cnt','Codepage','Collate','Color',
+ 'Com1','Com2','Command','Compact','Compatible','Compress',
+ 'Confirm','Connection','Connections','Connstring','Console','Copies',
+ 'Cpcompile','Cpdialog','Csv','Currency','Cycle','Databases',
+ 'Datasource','Date','Db4','Dbc','Dbf','Dbmemo3',
+ 'Debug','Decimals','Defaultsource','Deletetables','Delimited','Delimiters',
+ 'Descending','Design','Development','Device','Dif','Disabled',
+ 'Distinct','Dlls','Dohistory','Dos','Dosmem','Double',
+ 'Driver','Duplex','Echo','Editwork','Ega25','Ega43',
+ 'Ems','Ems64','Encrypt','Encryption','Environment','Escape',
+ 'Events','Exact','Except','Exe','Exists','Expression',
+ 'Extended','F','Fdow','Fetch','Field','Fields',
+ 'File','Files','Fill','Fixed','Float','Foldconst',
+ 'Font','Footer','Force','Foreign','Fox2x','Foxplus',
+ 'Free','Freeze','From','Fullpath','Fw2','Fweek',
+ 'Get','Gets','Global','Group','Grow','Halfheight',
+ 'Having','Heading','Headings','Helpfilter','History','Hmemory',
+ 'Hours','Id','In','Indexes','Information','Instruct',
+ 'Int','Integer','Intensity','Intersect','Into','Is',
+ 'Isometric','Key','Keycolumns','Keycomp','Keyset','Last',
+ 'Ledit','Level','Library','Like','Linked','Lock',
+ 'Logerrors','Long','Lpartition','Mac','Macdesktop','Machelp',
+ 'Mackey','Macros','Mark','Master','Max','Maxmem',
+ 'Mdi','Memlimit','Memory','Memos','Memowidth','Memvar',
+ 'Menus','Messages','Middle','Min','Minimize','Minus',
+ 'Mod','Modal','Module','Mono43','Movers','Multilocks',
+ 'Mvarsiz','Mvcount','N','Near','Negotiate','Noalias',
+ 'Noappend','Noclear','Noclose','Noconsole','Nocptrans','Nodata',
+ 'Nodebug','Nodelete','Nodup','Noedit','Noeject','Noenvironment',
+ 'Nofloat','Nofollow','Nogrow','Noinit','Nolgrid','Nolink',
+ 'Nolock','Nomargin','Nomdi','Nomenu','Nominimize','Nomodify'
+ ),
+ 3 => array('Nomouse','None','Nooptimize','Nooverwrite','Noprojecthook','Noprompt',
+ 'Noread','Norefresh','Norequery','Norgrid','Norm','Normal',
+ 'Nosave','Noshadow','Noshow','Nospace','Not','Notab',
+ 'Notify','Noupdate','Novalidate','Noverify','Nowait','Nowindow',
+ 'Nowrap','Nozoom','Npv','Null','Number','Objects',
+ 'Odometer','Of','Off','Oleobjects','Only','Optimize',
+ 'Or','Orientation','Output','Outshow','Overlay','Overwrite',
+ 'Pad','Palette','Paperlength','Papersize','Paperwidth','Password',
+ 'Path','Pattern','Pause','Pdox','Pdsetup','Pen',
+ 'Pfs','Pixels','Plain','Popups','Precision','Preference',
+ 'Preview','Primary','Printer','Printquality','Procedures','Production',
+ 'Program','Progwork','Project','Prompt','Query','Random',
+ 'Range','Readborder','Readerror','Record','Recover','Redit',
+ 'Reference','References','Relative','Remote','Reprocess','Resource',
+ 'Rest','Restrict','Rgb','Right','Row','Rowset',
+ 'Rpd','Runtime','Safety','Same','Sample','Say',
+ 'Scale','Scheme','Scoreboard','Screen','Sdf','Seconds',
+ 'Selection','Shadows','Shared','Sheet','Shell','Shift',
+ 'Shutdown','Single','Some','Sortwork','Space','Sql',
+ 'Standalone','Status','Std','Step','Sticky','String',
+ 'Structure','Subclass','Summary','Sylk','Sysformats','Sysmenus',
+ 'System','T','Tab','Tables','Talk','Tedit',
+ 'Textmerge','Time','Timeout','Titles','Tmpfiles','To',
+ 'Topic','Transaction','Trap','Trbetween','Trigger','Ttoption',
+ 'Typeahead','Udfparms','Union','Unique','Userid','Users',
+ 'Values','Var','Verb','Vga25','Vga50','Views',
+ 'Volume','Where','Windows','Wk1','Wk3','Wks',
+ 'Workarea','Wp','Wr1','Wrap','Wrk','Xcmdfile',
+ 'Xl5','Xl8','Xls','Y','Yresolution','Zoom',
+ 'Activate','ActivateCell','Add','AddColumn','AddItem','AddListItem',
+ 'AddObject','AddProperty','AddToSCC','AfterBuild','AfterCloseTables','AfterDock',
+ 'AfterRowColChange','BeforeBuild','BeforeDock','BeforeOpenTables','BeforeRowColChange','Box',
+ 'Build','CheckIn','CheckOut','Circle','Clear','ClearData',
+ 'Cleanup','Click','CloneObject','CloseEditor','CloseTables','Cls',
+ 'CommandTargetExec','CommandTargetQueryStas','ContainerRelease','DataToClip','DblClick','Deactivate',
+ 'Delete','DeleteColumn','Deleted','Destroy','DoCmd','Dock',
+ 'DoScroll','DoVerb','DownClick','Drag','DragDrop','DragOver',
+ 'DropDown','Draw','EnterFocus','Error','ErrorMessage','Eval',
+ 'ExitFocus','FormatChange','GetData','GetFormat','GetLatestVersion','GoBack',
+ 'GotFocus','GoForward','GridHitTest','Hide','HideDoc','IndexToItemId',
+ 'Init','InteractiveChange','Item','ItemIdToIndex','KeyPress','Line',
+ 'Load','LostFocus','Message','MiddleClick','MouseDown','MouseMove',
+ 'MouseUp','MouseWheel','Move','Moved','NavigateTo','Newobject',
+ 'OLECompleteDrag','OLEDrag','OLEDragDrop','OLEDragOver','OLEGiveFeedback','OLESetData',
+ 'OLEStartDrag','OpenEditor','OpenTables','Paint','Point','Print',
+ 'ProgrammaticChange','PSet','QueryAddFile','QueryModifyFile','QueryRemoveFile','QueryRunFile',
+ 'QueryUnload','RangeHigh','RangeLow','ReadActivate','ReadExpression','ReadDeactivate',
+ 'ReadMethod','ReadShow','ReadValid','ReadWhen','Refresh','Release',
+ 'RemoveFromSCC','RemoveItem','RemoveListItem','RemoveObject','Requery','RequestData',
+ 'Reset','ResetToDefault','Resize','RightClick','SaveAs','SaveAsClass',
+ 'Scrolled','SetAll','SetData','SetFocus','SetFormat','SetMain',
+ 'SetVar','SetViewPort','ShowDoc','ShowWhatsThis','TextHeight','TextWidth',
+ 'Timer','UIEnable','UnDock','UndoCheckOut','Unload','UpClick',
+ 'Valid','WhatsThisMode','When','WriteExpression','WriteMethod','ZOrder',
+ 'ATGetColors','ATListColors','Accelerate','ActiveColumn','ActiveControl','ActiveForm',
+ 'ActiveObjectId','ActivePage','ActiveProject','ActiveRow','AddLineFeeds','Alias',
+ 'Alignment','AllowAddNew','AllowHeaderSizing','AllowResize','AllowRowSizing','AllowTabs',
+ 'AlwaysOnTop','Application','AutoActivate','AutoCenter','AutoCloseTables','AutoIncrement',
+ 'AutoOpenTables','AutoRelease','AutoSize','AutoVerbMenu','AutoYield','AvailNum',
+ 'BackColor','BackStyle','BaseClass','BorderColor','BorderStyle','BorderWidth',
+ 'Bound','BoundColumn','BoundTo','BrowseAlignment','BrowseCellMarg','BrowseDestWidth',
+ 'BufferMode','BufferModeOverride','BuildDateTime','ButtonCount','ButtonIndex','Buttons',
+ 'CLSID','CanAccelerate','CanGetFocus','CanLoseFocus','Cancel','Caption',
+ 'ChildAlias','ChildOrder','Class','ClassLibrary','ClipControls','ClipRect',
+ 'Closable','ColorScheme','ColorSource','ColumnCount','ColumnHeaders','ColumnLines',
+ 'ColumnOrder','ColumnWidths','Columns','Comment','ContinuousScroll','ControlBox',
+ 'ControlCount','ControlIndex','ControlSource','Controls','CurrentControl','CurrentX',
+ 'CurrentY','CursorSource','Curvature','DataSession','DataSessionId','DataSourceObj',
+ 'DataType','Database','DateFormat','DateMark','DefButton','DefButtonOrig',
+ 'DefHeight','DefLeft','DefTop','DefWidth','Default','DefaultFilePath',
+ 'DefineWindows','DeleteMark','Desktop','Dirty','DisabledBackColor','DisabledByEOF',
+ 'DisabledForeColor','DisabledItemBackColor','DisabledItemForeColor','DisabledPicture','DispPageHeight','DispPageWidth',
+ 'DisplayCount','DisplayValue','DoCreate','DockPosition','Docked','DocumentFile',
+ 'DownPicture','DragIcon','DragMode','DragState','DrawMode','DrawStyle',
+ 'DrawWidth','DynamicAlignment','DynamicBackColor','DynamicCurrentControl','DynamicFontBold','DynamicFontItalic',
+ 'DynamicFontName','DynamicFontOutline','DynamicFontShadow','DynamicFontSize','DynamicFontStrikethru','DynamicFontUnderline',
+ 'DynamicForeColor','EditFlags','Enabled','EnabledByReadLock','Encrypted','EnvLevel',
+ 'ErasePage','FileClass','FileClassLibrary','FillColor','FillStyle','Filter',
+ 'FirstElement','FontBold','FontItalic','FontName','FontOutline','FontShadow',
+ 'FontSize','FontStrikethru','FontUnderline','ForceFocus','ForeColor','FormCount',
+ 'FormIndex','FormPageCount','FormPageIndex','Format','Forms','FoxFont',
+ 'FullName','GoFirst','GoLast','GridLineColor','GridLineWidth','GridLines'
+ ),
+ 4 => array('HPROJ','HWnd','HalfHeightCaption','HasClip','HeaderGap','HeaderHeight',
+ 'Height','HelpContextID','HideSelection','Highlight','HomeDir','HostName',
+ 'HotKey','HscrollSmallChange','IMEMode','Icon','IgnoreInsert','InResize',
+ 'Increment','IncrementalSearch','InitialSelectedAlias','InputMask','Instancing','IntegralHeight',
+ 'Interval','ItemBackColor','ItemData','ItemForeColor','ItemIDData','ItemTips',
+ 'JustReadLocked','KeyPreview','KeyboardHighValue','KeyboardLowValue','LastModified','Left',
+ 'LeftColumn','LineSlant','LinkMaster','List','ListCount','ListIndex',
+ 'ListItem','ListItemId','LockDataSource','LockScreen','MDIForm','MainClass',
+ 'MainFile','Margin','MaxButton','MaxHeight','MaxLeft','MaxLength',
+ 'MaxTop','MaxWidth','MemoWindow','MinButton','MinHeight','MinWidth',
+ 'MouseIcon','MousePointer','Movable','MoverBars','MultiSelect','Name',
+ 'NapTime','NewIndex','NewItemId','NoDataOnLoad','NoDefine','NotifyContainer',
+ 'NullDisplay','NumberOfElements','OLEDragMode','OLEDragPicture','OLEDropEffects','OLEDropHasData',
+ 'OLEDropMode','OLERequestPendingTimeOut','OLEServerBusyRaiseError','OLEServerBusyTimeOut','OLETypeAllowed','OleClass',
+ 'OleClassId','OleControlContainer','OleIDispInValue','OleIDispOutValue','OleIDispatchIncoming','OleIDispatchOutgoing',
+ 'OnResize','OneToMany','OpenViews','OpenWindow','PageCount','PageHeight',
+ 'PageOrder','PageWidth','Pages','Panel','PanelLink','Parent',
+ 'ParentAlias','ParentClass','Partition','PasswordChar','Picture','ProcessID',
+ 'ProgID','ProjectHookClass','ProjectHookLibrary','Projects','ReadColors','ReadCycle',
+ 'ReadFiller','ReadLock','ReadMouse','ReadOnly','ReadSave','ReadSize',
+ 'ReadTimeout','RecordMark','RecordSource','RecordSourceType','Rect','RelationalExpr',
+ 'RelativeColumn','RelativeRow','ReleaseErase','ReleaseType','ReleaseWindows','Resizable',
+ 'RightToLeft','RowHeight','RowSource','RowSourceType','SCCProvider','SCCStatus',
+ 'SDIForm','ScaleMode','ScrollBars','SelLength','SelStart','SelText',
+ 'SelectOnEntry','Selected','SelectedBackColor','SelectedForeColor','SelectedID','SelectedItemBackColor',
+ 'SelectedItemForeColor','SelfEdit','ServerClass','ServerClassLibrary','ServerHelpFile','ServerName',
+ 'ServerProject','ShowTips','ShowWindow','Sizable','Size<height>','Size<maxlength>',
+ 'Size<width>','Skip','SkipForm','Sorted','SourceType','Sparse',
+ 'SpecialEffect','SpinnerHighValue','SpinnerLowValue','SplitBar','StartMode','StatusBarText',
+ 'Stretch','StrictDateEntry','Style','SystemRefCount','TabIndex','TabStop',
+ 'TabStretch','TabStyle','Tabhit','Tabs','Tag','TerminateRead',
+ 'ThreadID','TitleBar','ToolTipText','Top','TopIndex','TopItemId',
+ 'TypeLibCLSID','TypeLibDesc','TypeLibName','UnlockDataSource','Value','ValueDirty',
+ 'VersionComments','VersionCompany','VersionCopyright','VersionDescription','VersionNumber','VersionProduct',
+ 'VersionTrademarks','View','ViewPortHeight','ViewPortLeft','ViewPortTop','ViewPortWidth',
+ 'Visible','VscrollSmallChange','WasActive','WasOpen','WhatsThisButton','WhatsThisHelp',
+ 'WhatsThisHelpID','Width','WindowList','WindowNTIList','WindowState','WindowType',
+ 'WordWrap','ZOrderSet','ActiveDoc','Checkbox','Column','ComboBox',
+ 'CommandButton','CommandGroup','Container','Control','Cursor','Custom',
+ 'DataEnvironment','EditBox','Empty','FontClass','Form','Formset',
+ 'General','Grid','Header','HyperLink','Image','Label',
+ 'ListBox','Memo','OleBaseControl','OleBoundControl','OleClassIDispOut','OleControl',
+ 'OptionButton','OptionGroup','Page','PageFrame','ProjectHook','RectClass',
+ 'Relation','Session','Shape','Spinner','TextBox' ,'Toolbar'
+ ),
+ ),
+ 'SYMBOLS' => array(
+ "!", "@", "$", "%",
+ "(", ")", "{", "}", "[", "]",
+ "-", "+", "*", "/",
+ "=", "<", ">",
+ ":", ";", ",", ".", "&",
+ "?", "??", "???"
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: blue;',
+ 2 => 'color: blue;',
+ 3 => 'color: blue;',
+ 4 => 'color: blue;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: green; font-style: italic;',
+ 2 => 'color: green; font-style: italic;',
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: blue;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #006600;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: blue;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/visualprolog.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/visualprolog.php
new file mode 100644
index 000000000..19eab2de6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/visualprolog.php
@@ -0,0 +1,129 @@
+<?php
+/*************************************************************************************
+ * visualprolog.php
+ * ----------
+ * Author: Thomas Linder Puls (puls@pdc.dk)
+ * Copyright: (c) 2008 Thomas Linder Puls (puls@pdc.dk)
+ * Release Version: 1.0.8.4
+ * Date Started: 2008/11/20
+ *
+ * Visual Prolog language file for GeSHi.
+ *
+ * CHANGES
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Visual Prolog',
+ 'COMMENT_SINGLE' => array(1 => '%'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'HARDQUOTE' => array('@"', '"'),
+ 'HARDESCAPE' => array('""'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'clauses','constants','constructors','delegate','domains','facts',
+ 'goal','guards','inherits','monitor','namespace','open',
+ 'predicates','properties','resolve','supports'
+ ),
+ 2 => array(
+ 'align','and','anyflow','as','bitsize','catch','determ','digits',
+ 'div','do','else','elseif','erroneous','externally','failure',
+ 'finally','from','language','mod','multi','nondeterm','or',
+ 'procedure','quot','rem','single','then','to'
+ ),
+ 3 => array(
+ '#bininclude','#else','#elseif','#endif','#error','#export',
+ '#externally','#if','#import','#include','#message','#options',
+ '#orrequires','#requires','#then','#warning'
+ ),
+ ),
+ 'SYMBOLS' => array(
+ '+', '-', '*', '?', '=', '/', '>', '<', '^', '!', ':', '(', ')', '{', '}', '[', ']'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => true,
+ 1 => true,
+ 2 => true,
+ 3 => true
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #808000;',
+ 2 => 'color: #333399;',
+ 3 => 'color: #800080;',
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #AA77BD',
+ 'MULTI' => 'color: #AA77BD'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #008080;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #00B7B7;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #0000FF;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #008000;',
+ 1 => 'color: #808000;',
+ 2 => 'color: #333399;',
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => ':',
+ 2 => '::'
+ ),
+ 'REGEXPS' => array(
+ 0 => "(?<![a-zA-Z0-9_])(?!(?:PIPE|SEMI)>)[A-Z_]\w*(?!\w)",
+ 1 => "\\b(end\\s+)?(implement|class|interface)\\b",
+ 2 => "\\b(end\\s+)?(foreach|if|try)\\b",
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 4
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/whitespace.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/whitespace.php
new file mode 100644
index 000000000..59bbdb8e7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/whitespace.php
@@ -0,0 +1,121 @@
+<?php
+/*************************************************************************************
+ * whitespace.php
+ * ----------
+ * Author: Benny Baumann (BenBE@geshi.org)
+ * Copyright: (c) 2008 Benny Baumann (http://qbnz.com/highlighter/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2009/10/31
+ *
+ * Whitespace language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/10/31 (1.0.8.1)
+ * - First Release
+ *
+ * TODO
+ * ----
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+$language_data = array (
+ 'LANG_NAME' => 'Whitespace',
+ 'COMMENT_SINGLE' => array(),
+ 'COMMENT_MULTI' => array(),
+ 'COMMENT_REGEXP' => array(
+ 3 => "/[^\n\x20\x09]+/s"
+ ),
+ 'CASE_KEYWORDS' => GESHI_CAPS_UPPER,
+ 'QUOTEMARKS' => array(),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ ),
+ 'SYMBOLS' => array(
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ ),
+ 'COMMENTS' => array(
+ 3 => 'color: #666666; font-style: italic;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ ),
+ 'ESCAPE_CHAR' => array(
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ 2 => 'background-color: #FF9999;',
+ 3 => 'background-color: #9999FF;'
+ )
+ ),
+ 'URLS' => array(
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ 2 => array(
+ GESHI_SEARCH => "(?<!\\A)\x20",
+ GESHI_REPLACE => "&#32;",
+ GESHI_MODIFIERS => 's',
+ GESHI_BEFORE => "",
+ GESHI_AFTER => ""
+ ),
+ 3 => array(
+ GESHI_SEARCH => "\x09",
+ GESHI_REPLACE => "&#9;",
+ GESHI_MODIFIERS => 's',
+ GESHI_BEFORE => "",
+ GESHI_AFTER => ""
+ ),
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 4,
+ 'PARSER_CONTROL' => array(
+ 'ENABLE_FLAGS' => array(
+ 'KEYWORDS' => GESHI_NEVER,
+ 'SYMBOLS' => GESHI_NEVER,
+ 'STRINGS' => GESHI_NEVER,
+// 'REGEXPS' => GESHI_NEVER,
+ 'NUMBERS' => GESHI_NEVER
+ )
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/winbatch.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/winbatch.php
new file mode 100644
index 000000000..e86b03636
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/winbatch.php
@@ -0,0 +1,369 @@
+<?php
+/*************************************************************************************
+ * winbatch.php
+ * ------------
+ * Author: Craig Storey (storey.craig@gmail.com)
+ * Copyright: (c) 2004 Craig Storey (craig.xcottawa.ca)
+ * Release Version: 1.0.8.4
+ * Date Started: 2006/05/19
+ *
+ * WinBatch language file for GeSHi.
+ *
+ * WinBatch is a Windows scripting language - www.winbatch.com.
+ * The keywords were pulled from the winbatch/system/WIL.clr file for v2005G.
+ * Not all extender functions are added, but a very large set of the most common.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * 2006/05/05 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/07/14)
+ * -------------------------
+ * - Right now any ':Subroutine' is treated as a comment. This highlights the
+ * Subroutine's name, but it's not a perfect fix. I should use a RegEx in
+ * GeSHI_Search&Replace features..
+ * - Update the list of extender functions.
+ * - Use a regular expression to comment UDFs that start with 'udf_'.
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Winbatch',
+ 'COMMENT_SINGLE' => array(1 => ';', 2 => ':'),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"', '`'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'While', 'To', 'Then', 'Switch', 'Select', 'Return', 'Next', 'IntControl', 'Include', 'In', 'If',
+ 'Goto', 'GoSub', 'ForEach', 'For', 'Exit', 'Execute', 'ErrorMode', 'EndWhile', 'EndSwitch', '#EndSubRoutine',
+ 'EndSelect', 'EndIf', '#EEndFunction', 'EndFor', 'End', 'Else', 'DropWild', 'Drop', '#DefineSubRoutine',
+ '#DefineFunction', 'Debug', 'Continue', 'Case', 'CallExt', 'Call', 'By', 'BreakPoint', 'Break'
+ ),
+ 2 => array(
+ 'ZOOMED', 'YES', 'WORD4', 'WORD2', 'WORD1', 'WHOLESECTION', 'WAIT', 'UNSORTED', 'UNCHECK', 'TRUE', 'TILE',
+ 'TAB', 'STRING', 'STACK', 'SPC2NET', 'SORTED', 'SOK', 'SNET2PC', 'SINGLE', 'SHIFT', 'SERVER', 'SERRWINSOCK',
+ 'SERRVOICE', 'SERRSOCKET', 'SERRSERVICE', 'SERRSELECT', 'SERRPARAM', 'SERROUTOFMEM', 'SERRNOTFOUND', 'SERRNOCONN',
+ 'SERRNOANSWER', 'SERRMUSTWAIT', 'SERRIPADDR', 'SERRHOSTNAME', 'SERRFAILURE', 'SERRBUSY', 'SCROLLLOCK', 'SCANCEL',
+ 'SAVE', 'SALREADY', 'ROWS', 'REGUSERS', 'REGROOT', 'REGMACHINE', 'REGCURRENT', 'REGCLASSES', 'RDBLCLICK', 'RCLICK',
+ 'RBUTTON', 'RAD2DEG', 'QSUCCESSINFO', 'QSUCCESS', 'QSTILLEX', 'QROLLBACK', 'QNULL', 'QNODATA', 'QNEXT', 'QNEEDDATA',
+ 'QFIRST', 'QCOMMIT', 'QBADHANDLE', 'PRINTER', 'PLANCKJOULES', 'PLANCKERGS', 'PI', 'PARSEONLY', 'PARSEC', 'P3ERRREPLY',
+ 'OPEN', 'ON', 'OFF', 'NUMLOCK', 'NOWAIT', 'NOTIFY', 'NORMAL', 'NORESIZE', 'NONE', 'NO', 'NCSAFORMAT', 'MULTIPLE',
+ 'MSFORMAT', 'MPLAYRDBLCK', 'MPLAYRCLK', 'MPLAYRBUTTON', 'MPLAYMDBLCK', 'MPLAYMCLK', 'MPLAYMBUTTON', 'MPLAYLDBLCK',
+ 'MPLAYLCLK', 'MPLAYLBUTTON', 'MINOR', 'MDBLCLICK', 'MCLICK', 'MBYESNO', 'MBUTTON', 'MBOKCANCEL', 'MAJOR', 'MAGFIELD',
+ 'LOCALGROUP', 'LIGHTMTPS', 'LIGHTMPS', 'LF', 'LDBLCLICK', 'LCLICK', 'LBUTTON', 'LAFFDBERROR', 'ICON', 'HTTPS', 'HTTP',
+ 'HNOHEADER', 'HMETHODPOST', 'HMETHODGET', 'HIDDEN', 'HHEADERONLY', 'HHEADER', 'GRAVITATION', 'GOPHER', 'GOLDENRATIO',
+ 'GMTSEC', 'GLOBALGROUP', 'GFTSEC', 'GETPROCID', 'GETEXITCODE', 'FWDSCAN', 'FTPPASSIVE', 'FTP', 'FLOAT8', 'FARADAY',
+ 'FALSE', 'EXTENDED', 'EULERS', 'ENABLE', 'ELECTRIC', 'DRIVE', 'DISABLE', 'DESCENDING', 'DEG2RAD', 'DEFAULT', 'CTRL',
+ 'CRLF', 'CR', 'COMMONFORMAT', 'COLUMNS', 'CHECK', 'CAPSLOCK', 'CANCEL', 'BOLTZMANN', 'BACKSCAN', 'AVOGADRO', 'ATTR_X',
+ 'ATTR_T', 'ATTR_SY', 'ATTR_SH', 'ATTR_RO', 'ATTR_RI', 'ATTR_P', 'ATTR_IC', 'ATTR_H', 'ATTR_DM', 'ATTR_DI', 'ATTR_DC',
+ 'ATTR_CI', 'ATTR_A', 'ASCENDING', 'ARRANGE', 'AMC', 'ACC_WRITE', 'ACC_READ_NT', 'ACC_READ_95', 'ACC_READ', 'ACC_PRINT_NT',
+ 'ACC_PMANG_NT', 'ACC_PFULL_NT', 'ACC_LIST', 'ACC_FULL_NT', 'ACC_FULL_95', 'ACC_DELETE', 'ACC_CREATE', 'ACC_CONTROL',
+ 'ACC_CHNG_NT', 'ACC_ATTRIB', 'ABOVEICONS'
+ ),
+ 3 => array(
+ 'Yields', 'Yield', 'WinZoom', 'WinWaitExist', 'WinWaitClose', 'WinWaitChild', 'WinVersion', 'WinTitle', 'WinSysInfo',
+ 'WinState', 'WinShow', 'WinResources', 'WinPositionChild', 'WinPosition', 'WinPlaceSet', 'WinPlaceGet', 'WinPlaceChild',
+ 'WinPlace', 'WinParmSet', 'WinParmGet', 'WinName', 'WinMetrics', 'WinItemProcId', 'WinItemNameId', 'WinItemizeEx',
+ 'WinItemize', 'WinItemChild', 'WinIsDos', 'WinIdGet', 'WinIconize', 'WinHide', 'WinHelp', 'WinGetactive', 'WinExistchild',
+ 'WinExist', 'WinExename', 'WinConfig', 'WinClosenot', 'WinClose', 'WinArrange', 'WinActivechild', 'WinActivchild',
+ 'WinActivate', 'WebVerifyCard', 'WebSetTimeout', 'WebParamSize', 'WebParamNames', 'WebParamFile', 'WebParamData',
+ 'WebParamBuf', 'WebOutFile', 'WebOutBinary', 'WebOut', 'WebDumpError', 'WebDatData', 'WebCounter', 'WebConSize', 'WebConData',
+ 'WebConBuf', 'WebCmdData', 'WebBaseConv', 'Wallpaper', 'WaitForKeyEX', 'WaitForKey', 'VersionDLL', 'Version', 'VarType',
+ 'TimeYmdHms', 'TimeWait', 'TimeSubtract', 'TimeJulToYmd', 'TimeJulianDay', 'TimeDiffSecs', 'TimeDiffDays', 'TimeDiff', 'TimeDelay',
+ 'TimeDate', 'TimeAdd', 'TextSelect', 'TextBoxSort', 'TextBox', 'Terminate', 'Tanh', 'Tan', 'SysParamInfo', 'SvcWaitForCmd',
+ 'SvcSetState', 'SvcSetAccept', 'StrUpper', 'StrTrim', 'StrSubWild', 'StrSub', 'StrScan', 'StrReplace', 'StrLower', 'StrLenWild',
+ 'StrLen', 'StrIndexWild', 'StrIndexNC', 'StrIndex', 'StriCmp', 'StrFixLeft', 'StrFixCharsL', 'StrFixChars', 'StrFix', 'StrFill',
+ 'StrCnt', 'StrCmp', 'StrClean', 'StrCharCount', 'StrCat', 'StrByteCount', 'Sqrt', 'SoundVolume', 'Sounds', 'Snapshot', 'Sinh', 'Sin',
+ 'ShortCutMake', 'ShortCutInfo', 'ShortCutExtra', 'ShortCutEdit', 'ShortCutDir', 'ShellExecute', 'SendMenusToEx', 'SendMenusTo',
+ 'SendKeysTo', 'SendKeysChild', 'SendKey', 'RunZoomWait', 'RunZoom', 'RunWithLogon', 'RunWait', 'RunShell', 'RunIconWait',
+ 'RunIcon', 'RunHideWait', 'RunHide', 'RunExit', 'RunEnviron', 'Run', 'RtStatus', 'Reload', 'RegUnloadHive', 'RegSetValue',
+ 'RegSetQword', 'RegSetMulSz', 'RegSetExpSz', 'RegSetEx', 'RegSetDword', 'RegSetBin', 'RegQueryValue', 'RegQueryStr',
+ 'RegQueryQword', 'RegQueryMulSz', 'RegQueryKeys', 'RegQueryKeyLastWriteTime', 'RegQueryKey', 'RegQueryItem', 'RegQueryExpSz',
+ 'RegQueryEx', 'RegQueryDword', 'RegQueryBin', 'RegOpenKeyEx', 'RegOpenKey', 'RegOpenFlags', 'RegLoadHive', 'RegExistValue',
+ 'RegExistKey', 'RegEntryType', 'RegDelValue', 'RegDeleteKey', 'RegCreateKey', 'RegConnect', 'RegCloseKey', 'RegApp', 'Random',
+ 'PtrPersistent', 'PtrGlobalDefine', 'PtrGlobal', 'Print', 'PlayWaveform', 'PlayMidi', 'PlayMedia', 'PipeServerWrite', 'PipeServerRead',
+ 'PipeServerCreate', 'PipeServerClose', 'PipeInfo', 'PipeClientSendRecvData', 'PipeClientOpen', 'PipeClientClose', 'Pause',
+ 'ParseData', 'ObjectTypeGet', 'ObjectType', 'ObjectOpen', 'ObjectGet', 'ObjectEventRemove', 'objecteventremove', 'ObjectEventAdd',
+ 'objecteventadd', 'ObjectCreate', 'ObjectConstToArray', 'ObjectConstantsGet', 'ObjectCollectionOpen', 'ObjectCollectionNext',
+ 'ObjectCollectionClose', 'ObjectClose', 'ObjectAccess', 'Num2Char', 'NetInfo', 'MsgTextGet', 'MousePlay', 'MouseMove', 'MouseInfo',
+ 'MouseDrag', 'MouseCoords', 'MouseClickBtn', 'MouseClick', 'mod', 'Min', 'Message', 'Max', 'Loge', 'LogDisk', 'Log10', 'LastError',
+ 'KeyToggleSet', 'KeyToggleGet', 'ItemSortNc', 'ItemSort', 'ItemSelect', 'ItemReplace', 'ItemRemove', 'ItemLocate', 'ItemInsert',
+ 'ItemExtractCSV', 'ItemExtract', 'ItemCountCSV', 'ItemCount', 'IsNumber', 'IsLicensed', 'IsKeyDown', 'IsInt', 'IsFloat', 'IsDefined',
+ 'Int', 'InstallFile', 'IniWritePvt', 'IniWrite', 'IniReadPvt', 'IniRead', 'IniItemizePvt', 'IniItemize', 'IniDeletePvt', 'IniDelete',
+ 'IgnoreInput', 'IconReplace', 'IconInfo', 'IconExtract', 'IconArrange', 'GetTickCount', 'GetObject', 'GetExactTime', 'Floor',
+ 'FindWindow', 'FileYmdHms', 'FileWrite', 'FileVerInfo', 'FileTimeTouch', 'FileTimeSetEx', 'FileTimeSet', 'FileTimeGetEx',
+ 'FileTimeGet', 'FileTimeCode', 'FileSizeEx', 'FileSize', 'FileRoot', 'FileRename', 'FileRead', 'FilePutW', 'FilePut', 'FilePath',
+ 'FileOpen', 'FileNameShort', 'FileNameLong', 'FileNameEval2', 'FileNameEval1', 'FileMoveAttr', 'FileMove', 'FileMapName',
+ 'FileLocate', 'FileItemPath', 'FileItemize', 'FileInfoToArray', 'FileGetW', 'FileGet', 'FileFullname', 'FileExtension', 'FileExist',
+ 'FileDelete', 'FileCreateTemp', 'FileCopyAttr', 'FileCopy', 'FileCompare', 'FileClose', 'FileBaseName', 'FileAttrSetEx',
+ 'FileAttrSet', 'FileAttrGetEx', 'FileAttrGet', 'FileAppend', 'Fabs', 'ExtractAttachedFile', 'Exp', 'ExeTypeInfo', 'Exclusive',
+ 'EnvItemize', 'EnvironSet', 'Environment', 'EndSession', 'DosVersion', 'DllLoad', 'DllLastError', 'DllHwnd', 'DllHinst',
+ 'DllFree', 'DllCallCDecl', 'DllCall', 'Display', 'DiskVolinfo', 'DiskSize', 'DiskScan', 'DiskInfo', 'DiskFree', 'DiskExist',
+ 'DirWindows', 'DirSize', 'DirScript', 'DirRename', 'DirRemove', 'DirMake', 'DirItemize', 'DirInfoToArray', 'DirHome', 'DirGet',
+ 'DirExist', 'DirChange', 'DirAttrSetEx', 'DirAttrSet', 'DirAttrGetEx', 'DirAttrGet', 'DialogProcOptions', 'DialogObject',
+ 'DialogControlState', 'DialogControlSet', 'DialogControlGet', 'DialogBox', 'Dialog', 'Delay', 'Decimals', 'DebugTrace',
+ 'DebugData', 'DDETimeout', 'DDETerminate', 'DDERequest', 'DDEPoke', 'DDEInitiate', 'DDEExecute', 'DateTime', 'CurrFilepath',
+ 'CurrentPath', 'CurrentFile', 'CreateObject', 'Cosh', 'Cos', 'ClipPut', 'ClipHasFormat', 'ClipGetEx', 'ClipGet', 'ClipAppend',
+ 'ChrUnicodeToString', 'ChrUnicodeToHex', 'ChrStringToUnicode', 'ChrSetCodepage', 'ChrHexToUnicode', 'ChrGetCodepage',
+ 'Char2Num', 'Ceiling', 'ButtonNames', 'BoxUpdates', 'BoxTitle', 'BoxTextFont', 'BoxTextColor', 'BoxText', 'BoxShut', 'BoxPen',
+ 'BoxOpen', 'BoxNew', 'BoxMapmode', 'BoxesUp', 'BoxDrawText', 'BoxDrawRect', 'BoxDrawLine', 'BoxDrawCircle', 'BoxDestroy',
+ 'BoxDataTag', 'BoxDataClear', 'BoxColor', 'BoxCaption', 'BoxButtonWait', 'BoxButtonStat', 'BoxButtonKill', 'BoxButtonDraw',
+ 'BoxBitMap', 'BinaryXor', 'BinaryXlate', 'BinaryWriteEx', 'BinaryWrite', 'BinaryTagRepl', 'BinaryTagLen', 'BinaryTagInit',
+ 'BinaryTagIndex', 'BinaryTagFind', 'BinaryTagExtr', 'BinaryStrCnt', 'BinarySort', 'BinaryReplace', 'BinaryReadEx',
+ 'BinaryRead', 'BinaryPokeStrW', 'BinaryPokeStr', 'BinaryPokeHex', 'BinaryPokeFlt', 'BinaryPoke4', 'BinaryPoke2', 'BinaryPoke',
+ 'BinaryPeekStrW', 'BinaryPeekStr', 'BinaryPeekHex', 'BinaryPeekFlt', 'BinaryPeek4', 'BinaryPeek2', 'BinaryPeek', 'BinaryOr',
+ 'BinaryOleType', 'BinaryIndexNc', 'BinaryIndexEx', 'BinaryIndexBin', 'BinaryIndex', 'BinaryIncrFlt', 'BinaryIncr4',
+ 'BinaryIncr2', 'BinaryIncr', 'BinaryHashRec', 'BinaryFree', 'BinaryEodSet', 'BinaryEodGet', 'BinaryCopy', 'BinaryConvert',
+ 'BinaryCompare', 'BinaryClipPut', 'BinaryClipGet', 'BinaryChecksum', 'BinaryBufInfo', 'BinaryAnd', 'BinaryAllocArray',
+ 'BinaryAlloc', 'Beep', 'Average', 'Atan', 'AskYesNo', 'AskTextbox', 'AskPassword', 'AskLine', 'AskItemlist', 'AskFont',
+ 'AskFiletext', 'AskFilename', 'AskDirectory', 'AskColor', 'Asin', 'ArrInitialize', 'ArrInfo', 'ArrDimension',
+ 'Arrayize', 'ArrayFilePutCSV', 'ArrayFilePut', 'ArrayFileGetCSV', 'ArrayFileGet', 'AppWaitClose', 'AppExist', 'AddExtender',
+ 'Acos', 'Abs', 'About'
+ ),
+ 4 => array(
+ 'zZipFiles', 'zVersionInfo', 'zVersion', 'zUnZipFiles', 'zSetPortBit', 'zRPortShift', 'zPortOut', 'zPortIn', 'zNotPortBit',
+ 'zLPortShift', 'zGetPortBit', 'zClrPortBit', 'xVerifyCCard', 'xSendMessage', 'xMessageBox', 'xMemCompact', 'xHex', 'xGetElapsed',
+ 'xGetChildHwnd', 'xExtenderInfo', 'xEnumStreams', 'xEjectMedia', 'xDriveReady', 'xDiskLabelGet', 'xCursorSet', 'xBaseConvert',
+ 'wxPing', 'wxParmSet', 'wxParmGet', 'wxMsgSetHdr', 'wxMsgGetHdr', 'wxMsgGetBody', 'wxHost2Addr', 'wxGetLastErr', 'wxGetInfo',
+ 'wxGetErrDesc', 'wxAddr2Host', 'wtsWaitSystemEvent', 'wtsVersion', 'wtsTerminateProcess', 'wtsShutdownSystem', 'wtsSendMessage',
+ 'wtsQuerySessionInfo', 'wtsProcIdToSessId', 'wtsLogoffSession', 'wtsLastErrMsg', 'wtsIsTSEnabled', 'wtsIsCitrixEnabled',
+ 'wtsGetActiveConsoleSessId', 'wtsEnumSessions', 'wtsEnumProcesses', 'wtsDisconnectSession', 'wnWrkGroups', 'wnVersion', 'wntWtsUserSet',
+ 'wntWtsUserGet', 'wntVersion', 'wntUserSidChk', 'wntUserSetDat', 'wntUserRename', 'wntUserProps', 'wntUserList', 'wntUserInfo',
+ 'wntUserGetDat', 'wntUserFiles', 'wntUserExist', 'wntUserDel', 'wntUserAddDat', 'wntUserAdd', 'wntSvcStatus', 'wntSvcStart',
+ 'wntSvcList', 'wntSvcDelete', 'wntSvcCreate', 'wntSvcControl', 'wntSvcCfgSet', 'wntSvcCfgGet', 'wntShutdown', 'wntShareUsers',
+ 'wntShareSet', 'wntShareList', 'wntShareInfo', 'wntShareDel', 'wntShareAdd', 'wntServiceInf', 'wntServiceAt', 'wntServerType',
+ 'wntServerList', 'wntServerInfo', 'wntSecurityGet', 'wntRunAsUser', 'wntResources2', 'wntResources', 'wntRemoteTime', 'wntRasUserSet',
+ 'wntRasUserGet', 'wntProfileInfo', 'wntProfileDel', 'wntPrivUsers', 'wntPrivList', 'wntPrivGet', 'wntPrivDel', 'wntPrivAdd',
+ 'wntOwnerSet', 'wntOwnerGet', 'wntMemberSet', 'wntMemberLst2', 'wntMemberList', 'wntMemberGrps', 'wntMemberGet', 'wntMemberDel',
+ 'wntLsaPolSet', 'wntLsaPolGet', 'wntListGroups', 'wntLastErrMsg', 'wntGroupRen', 'wntGroupInfo', 'wntGroupEdit', 'wntGroupDel',
+ 'wntGroupAdd', 'wntGetUser', 'wntGetDrive', 'wntGetDc', 'wntGetCon', 'wntFileUsers', 'wntFilesOpen', 'wntFileClose', 'wntEventWrite',
+ 'wntEventLog', 'wntDomainSync', 'wntDirDialog', 'wntDfsList', 'wntDfsGetInfo', 'wntCurrUsers', 'wntChgPswd', 'wntCancelCon',
+ 'wntAuditMod', 'wntAuditList', 'wntAuditGet', 'wntAuditDel', 'wntAuditAdd2', 'wntAuditAdd', 'wntAddPrinter', 'wntAddDrive',
+ 'wntAcctPolSet', 'wntAcctPolGet', 'wntAcctList', 'wntAcctInfo', 'wntAccessMod', 'wntAccessList', 'wntAccessGet', 'wntAccessDel',
+ 'wntaccessadd2', 'wntAccessAdd', 'wnShares', 'wnSharePath', 'wnShareName', 'wnShareCnt', 'wnServers', 'wnRestore', 'wnNetNames',
+ 'wnGetUser', 'wnGetCon', 'wnGetCaps', 'wnDlgShare', 'wnDlgNoShare', 'wnDlgDiscon', 'wnDlgCon4', 'wnDlgCon3', 'wnDlgCon2', 'wnDlgCon',
+ 'wnDlgBrowse', 'wnDialog', 'wnCmptrInfo', 'wnCancelCon', 'wnAddCon', 'WaitSRQ', 'w9xVersion', 'w9xUserSetDat', 'w9xUserRename',
+ 'w9xUserprops', 'w9xUserList', 'w9xUserinfo', 'w9xUserGetDat', 'w9xUserExist', 'w9xUserDel', 'w9xUserAddDat', 'w9xUserAdd', 'w9xShareSet',
+ 'w9xShareInfo', 'w9xShareDel', 'w9xShareAdd', 'w9xServiceAt', 'w9xServerList', 'w9xRemoteTime', 'w9xOwnerGet', 'w9xMemberSet',
+ 'w9xMemberList', 'w9xMemberGrps', 'w9xMemberGet', 'w9xMemberDel', 'w9xListGroups', 'w9xGroupInfo', 'w9xGroupDel', 'w9xGroupAdd',
+ 'w9xGetDC', 'w9xFileUsers', 'w9xAccessList', 'w9xAccessGet', 'w9xAccessDel', 'w9xAccessAdd', 'w95Version', 'w95ShareUsers',
+ 'w95ShareSet', 'w95ShareList', 'w95ShareInfo', 'w95ShareDel', 'w95ShareAdd', 'w95ServiceInf', 'w95ServiceAt', 'w95ServerType',
+ 'w95ServerInfo', 'w95Resources', 'w95GetUser', 'w95GetDrive', 'w95GetCon', 'w95FileUsers', 'w95FileClose', 'w95DirDialog',
+ 'w95CancelCon', 'w95AddPrinter', 'w95AddDrive', 'w95AccessDel', 'w95AccessAdd', 'w3Version', 'w3PrtBrowse', 'w3NetGetUser',
+ 'w3NetDialog', 'w3GetCon', 'w3GetCaps', 'w3DirBrowse', 'w3CancelCon', 'w3AddCon', 'urlGetScheme', 'urlEncode', 'urlDecode',
+ 'tVersion', 'tSetPriority', 'TriggerList', 'Trigger', 'tRemoteConn', 'tOpenProc', 'tListProc', 'tListMod', 'tKillProc', 'tGetProcInfo',
+ 'tGetPriority', 'tGetModInfo', 'tGetLastError', 'tGetData', 'TestSys', 'TestSRQ', 'tCountProc', 'tCompatible', 'tCloseProc',
+ 'tBrowseCntrs', 'sSendString', 'sSendNum', 'sSendLine', 'sSendBinary', 'sRecvNum', 'sRecvLine', 'sRecvBinary', 'SrchVersion',
+ 'SrchNext', 'SrchInit', 'SrchFree', 'sOpen', 'sOK2Send', 'sOK2Recv', 'smtpSendText', 'smtpSendFile', 'sListen', 'SetRWLS',
+ 'SendSetup', 'SendLLO', 'SendList', 'SendIFC', 'SendDataBytes', 'SendCmds', 'Send', 'sConnect', 'sClose', 'SByteOrder32',
+ 'sByteOrder16', 'sAccept', 'rRegVersion', 'rRegSearch', 'ResetSys', 'ReceiveSetup', 'Receive', 'ReadStsByte', 'RcvRespMsg',
+ 'RasVersion', 'RasTypeSize', 'RasRename', 'RasNumCons', 'RasNameValid', 'RasListActCon', 'RasItemize', 'RasHangUp', 'RasGetLastErr',
+ 'RasGetConStat', 'RasEntrySet', 'RasEntryInfo', 'RasEntryExist', 'RasEntryDel', 'RasEntryAdd', 'RasDialInfo', 'RasDial',
+ 'RasCopy', 'RasConStatus', 'qVersionInfo', 'qTransact', 'qTables', 'qSpecial', 'qSetConnOpt', 'qNumRsltCol', 'qNativeSql', 'qLastCode',
+ 'qGetData', 'qFreeStmt', 'qFreeEnv', 'qFreeConnect', 'qFetch', 'qExecDirect', 'qError', 'qDriverList', 'qDriverCon', 'qDisconnect',
+ 'qDataSources', 'qConnect', 'qConfigError', 'qConfigData', 'qColumns', 'qBindCol', 'qAllocStmt', 'qAllocEnv', 'qAllocConnect',
+ 'pWaitFor', 'pVersionInfo', 'pTimeout', 'pSetPublish', 'pSetPrtInfo', 'pSetPrtAttrib', 'pSetDefPrtEx', 'pSetDefPrt', 'pSendFile',
+ 'pRecvFile', 'pPutString', 'pPutLine', 'pPutChar', 'pPutByte', 'pPutBinary', 'PPollUnconfig', 'PPollConfig', 'PPoll', 'pPeekChar',
+ 'pPeekByte', 'pPaperSizes', 'pPaperBins', 'pModemSReg', 'pModemParams', 'pModemInit', 'pModemHangUp', 'pModemDial', 'pModemControl',
+ 'pModemConnect', 'pModemCommand', 'pModemAnsRing', 'pModemAnsCall', 'pMediaTypes', 'pGetString', 'pGetPublish', 'pGetPrtList',
+ 'pGetPrtInfo', 'pGetPrtAttrib', 'pGetLine', 'pGetLastError', 'pGetErrorMsg', 'pGetErrorCode', 'pGetDefPrtInf', 'pGetChar',
+ 'pGetByte', 'pGetBinary', 'pDelPrtConn', 'pDelPrinter', 'pComOpen', 'pComModify', 'pComInfo', 'pComControl', 'pComClose',
+ 'pCheckSum', 'pCheckBinary', 'pCaptureOn', 'pCaptureOff', 'pCaptureLog', 'PassControl', 'pAddPrtConn', 'pAddPrinter', 'p3RecvText',
+ 'p3RecvFile', 'p3Peek', 'p3Open', 'p3GetReply', 'p3Delete', 'p3Count', 'p3Close', 'nwWhoAmI', 'nwVfyPassword', 'nwVersion',
+ 'nwSrvShutdown', 'nwSrvNLMMgr', 'nwSrvGenGUID', 'nwSrvExecNCF', 'nwSetVolLimit', 'nwSetSrvParam', 'nwSetSrvInfo', 'nwSetPrimServ',
+ 'nwSetPassword', 'nwSetOptions', 'nwSetFileInfo', 'nwSetDirLimit', 'nwSetDirInfo', 'nwSetContext', 'nwSetBcastMode', 'nwServerList',
+ 'nwSendBcastMsg', 'nwSearchObjects', 'nwSearchFilter', 'nwRenameObject', 'nwRemoveObject', 'nwReceiveBcastMsg', 'nwNameConvert',
+ 'nwMutateObject', 'nwMoveObject', 'nwModifyObject', 'nwMapDelete', 'nwMap', 'nwLogout', 'nwLogin', 'nwListUserGroups',
+ 'nwListObjects', 'nwListGroupMembers', 'nwLastErrMsg', 'nwIsUserInGroup', 'nwGetVolLimit', 'nwGetSrvStats', 'nwGetSrvParam',
+ 'nwGetSrvInfo', 'nwGetSrvCfg', 'nwGetOptions', 'nwGetObjValue', 'nwGetObjInfo', 'nwGetNLMInfo', 'nwGetMapped', 'nwGetFileInfo',
+ 'nwGetDirLimit', 'nwGetDirInfo', 'nwGetContext', 'nwGetConnInfo', 'nwGetCapture', 'nwGetBcastMode', 'nwGetAttrInfo',
+ 'nwDriveStatus', 'nwDrivePath', 'nwDetachFromServer', 'nwDelUserFromGroup', 'nwDelConnNum', 'nwCompareObject', 'nwClientInfo',
+ 'nwChgPassword', 'nwAttachToServer', 'nwAddUserToGroup', 'nwAddObject', 'netVersion', 'netResources', 'netGetUser', 'netGetCon',
+ 'netDirDialog', 'netCancelCon', 'netAddPrinter', 'netAddDrive', 'n4Version', 'n4UserGroups', 'n4UserGroupEx', 'n4SetPrimServ',
+ 'n4SetOptions', 'n4SetContextG', 'n4SetContext', 'n4ServerList', 'n4ServerInfo', 'n4ObjSearch', 'n4ObjRename', 'n4ObjOptions',
+ 'n4ObjMove', 'n4ObjGetVal', 'n4ObjectProps', 'n4ObjectList', 'n4ObjectInfo', 'n4ObjDelete', 'n4NameConvert', 'n4MsgsEndAll',
+ 'n4MsgsEnd', 'n4MemberSet', 'n4MemberGet', 'n4MemberDel', 'n4MapRoot', 'n4MapDir', 'n4MapDelete', 'n4Map', 'n4LogoutTree',
+ 'n4Logout', 'n4Login', 'n4GetUserName', 'n4GetUserId', 'n4GetUser', 'n4GetNetAddr', 'n4GetMapped', 'n4GetContext',
+ 'n4GetConnNum', 'n4FileUsers', 'n4FileTimeGet', 'n4FileAttrSet', 'n4FileAttrGet', 'n4DriveStatus', 'n4DrivePath', 'n4DirTimeGet',
+ 'n4DirAttrSet', 'n4DirAttrGet', 'n4Detach', 'n4ChgPassword', 'n4CapturePrt', 'n4CaptureGet', 'n4CaptureEnd', 'n4Attach',
+ 'n3Version', 'n3UserGroups', 'n3ServerList', 'n3ServerInfo', 'n3MsgsEndAll', 'n3MsgsEnd', 'n3MemberSet', 'n3MemberGet',
+ 'n3MemberDel', 'n3Maproot', 'n3Mapdir', 'n3Mapdelete', 'n3Map', 'n3Logout', 'n3GetUserId', 'n3GetUser', 'n3GetNetAddr',
+ 'n3GetMapped', 'n3GetConnNum', 'n3FileTimeGet', 'n3FileAttrSet', 'n3FileAttrGet', 'n3DriveStatus', 'n3DrivePath',
+ 'n3DirTimeGet', 'n3DirAttrSet', 'n3DirAttrGet', 'n3Detach', 'n3ChgPassword', 'n3CapturePrt', 'n3CaptureGet',
+ 'n3CaptureEnd', 'n3Attach', 'mVersion', 'mSyncMail', 'mSendMailEx', 'mSendMail', 'mrecvmail', 'mReadNextMsg', 'mLogOn',
+ 'mLogOff', 'mFindNext', 'mError', 'mCompatible', 'kVerInfo', 'kStatusInfo', 'kSendText', 'kSendFile', 'kManageImap4',
+ 'kInit', 'kGetMail', 'kExtra', 'kDest', 'kDeletePop3', 'iWriteDataBuf', 'iWriteData', 'iVersion', 'IUrlOpen', 'iUrlEncode',
+ 'iUrlDecode', 'iReadDataBuf', 'iReadData', 'ipVersion', 'ipPing', 'iPing', 'ipHost2Addr', 'ipGetLastErr', 'ipGetAddress',
+ 'iParseURL', 'ipAddr2Host', 'iOptionSet', 'iOptionGet', 'ImgWave', 'ImgVersion', 'ImgUnsharpMask', 'ImgThreshold', 'ImgSwirl',
+ 'ImgSpread', 'ImgSolarize', 'ImgShear', 'ImgSharpen', 'ImgShade', 'ImgScale', 'ImgSample', 'ImgRotate', 'ImgResize',
+ 'ImgReduceNoise', 'ImgRaise', 'ImgOilPaint', 'ImgNormalize', 'ImgNegate', 'ImgMotionBlur', 'ImgModulate', 'ImgMinify',
+ 'ImgMedianFilter', 'ImgMagnify', 'ImgLevel', 'ImgIsValid', 'ImgIsPalette', 'ImgIsMono', 'ImgIsGray', 'ImgInfo', 'ImgImplode',
+ 'ImgGetImageType', 'ImgGetColorCount', 'ImgGaussianBlur', 'ImgGamma', 'ImgFrame', 'ImgFlop', 'ImgFlip', 'ImgEqualize',
+ 'ImgEnhance', 'ImgEmboss', 'ImgCrop', 'ImgConvert', 'ImgContrast', 'ImgCompare', 'ImgColorize', 'ImgChop', 'ImgCharcoal',
+ 'ImgBorder', 'ImgBlur', 'ImgAddNoise', 'iLocFindNext', 'iLocFindInit', 'iHttpOpen', 'iHttpInit', 'iHttpHeaders', 'iHttpAccept',
+ 'iHostConnect', 'iHost2Addr', 'iGetResponse', 'iGetLastError', 'iGetIEVer', 'iGetConStatEx', 'iGetConState', 'iFtpRename',
+ 'iFtpPut', 'iFtpOpen', 'iFtpGet', 'iFtpFindNext', 'iFtpFindInit', 'iFtpDirRemove', 'iFtpDirMake', 'iFtpDirGet', 'iFtpDirChange',
+ 'iFtpDialog', 'iFtpDelete', 'iFtpCmd', 'iErrorDialog', 'iDialItemize', 'iDialHangUp', 'iDial', 'iCookieSet', 'iCookieGet',
+ 'iContentURL', 'iContentFile', 'iContentData', 'iClose', 'ibWrtf', 'ibWrt', 'ibWait', 'ibVersion', 'ibUnlock', 'ibTrg',
+ 'ibTmo', 'ibStop', 'ibStatus', 'ibSta', 'ibSre', 'ibSic', 'ibSad', 'ibRsv', 'ibRsp', 'ibRsc', 'ibRpp', 'ibRdf', 'ibRd',
+ 'ibPpc', 'ibPoke', 'ibPct', 'ibPad', 'ibOnl', 'ibMakeAddr', 'ibLock', 'ibLoc', 'ibLn', 'ibLines', 'ibIst', 'ibInit',
+ 'ibGts', 'ibGetSad', 'ibGetPad', 'ibFind', 'ibEvent', 'ibErr', 'ibEot', 'ibEos', 'iBegin', 'ibDma', 'ibDev', 'ibConfig',
+ 'ibCntl', 'ibCnt', 'ibCmda', 'ibCmd', 'ibClr', 'ibCac', 'ibBna', 'ibAsk', 'iAddr2Host', 'huge_Thousands', 'huge_Subtract',
+ 'huge_SetOptions', 'huge_Multiply', 'huge_GetLastError', 'huge_ExtenderInfo', 'huge_Divide', 'huge_Decimal', 'huge_Add',
+ 'httpStripHTML', 'httpRecvTextF', 'httpRecvText', 'httpRecvQuery', 'httpRecvQryF', 'httpRecvFile', 'httpGetServer',
+ 'httpGetQuery', 'httpGetPath', 'httpGetFile', 'httpGetDir', 'httpGetAnchor', 'httpFullPath', 'httpFirewall', 'httpAuth',
+ 'ftpRename', 'ftpQuote', 'ftpPut', 'ftpOpen', 'ftpList', 'ftpGet', 'ftpFirewall', 'ftpDelete', 'ftpClose', 'ftpChDir',
+ 'FindRQS', 'FindLstn', 'EnvSetVar', 'EnvPathDel', 'EnvPathChk', 'EnvPathAdd', 'EnvListVars', 'EnvGetVar', 'EnvGetInfo',
+ 'EnableRemote', 'EnableLocal', 'ehllapiWait', 'ehllapiVersion', 'ehllapiUninit', 'ehllapiStopKeyIntercept', 'ehllapiStopHostNotify',
+ 'ehllapiStopCloseIntercept', 'ehllapiStartKeyIntercept', 'ehllapiStartHostNotify', 'ehllapiStartCloseIntercept',
+ 'ehllapiSetWindowStatus', 'ehllapiSetSessionParams', 'ehllapiSetPSWindowName', 'ehllapiSetCursorLoc', 'ehllapiSendKey',
+ 'ehllapiSendFile', 'ehllapiSearchPS', 'ehllapiSearchField', 'ehllapiRunProfile', 'ehllapiResetSystem', 'ehllapiReserve',
+ 'ehllapiRelease', 'ehllapiReceiveFile', 'ehllapiQuerySystem', 'ehllapiQueryPSStatus', 'ehllapiQueryHostNotify',
+ 'ehllapiQueryFieldAttr', 'ehllapiQueryCursorLoc', 'ehllapiQueryCloseIntercept', 'ehllapiPostInterceptStatus',
+ 'ehllapiPause', 'ehllapiLastErrMsg', 'ehllapiInit', 'ehllapiGetWindowStatus', 'ehllapiGetPSHWND', 'ehllapiGetKey',
+ 'ehllapiFindFieldPos', 'ehllapiFindFieldLen', 'ehllapiDisconnectPS', 'ehllapiCvtRCToPos', 'ehllapiCvtPosToRC',
+ 'ehllapiCopyTextToPS', 'ehllapiCopyTextToField', 'ehllapiCopyTextFromPS', 'ehllapiCopyTextFromField', 'ehllapiCopyOIA',
+ 'ehllapiConnectPS', 'dunItemize', 'dunDisconnect', 'dunConnectEx', 'dunConnect', 'dsTestParam', 'dsSIDtoHexStr', 'dsSetSecProp',
+ 'dsSetProperty', 'dsSetPassword', 'dsSetObj', 'dsSetCredentX', 'dsSetCredent', 'dsRemFromGrp', 'dsRelSecObj', 'dsMoveObj',
+ 'dsIsObject', 'dsIsMemberGrp', 'dsIsContainer', 'dsGetUsersGrps', 'dsGetSecProp', 'dsGetPropName', 'dsGetProperty',
+ 'dsGetPrntPath', 'dsGetPrimGrp', 'dsGetMemGrp', 'dsGetInfo', 'dsGetClass', 'dsGetChldPath', 'dsFindPath', 'dsDeleteObj',
+ 'dsCreatSecObj', 'dsCreateObj', 'dsCopySecObj', 'dsAddToGrp', 'dsAclRemAce', 'dsAclOrderAce', 'dsAclGetAces', 'dsAclAddAce',
+ 'DevClearList', 'DevClear', 'dbTest', 'dbSwapColumns', 'dbSort', 'dbSetRecordField', 'dbSetOptions', 'dbSetErrorReporting',
+ 'dbSetEntireRecord', 'dbSetDelimiter', 'dbSave', 'dbOpen', 'dbNameColumn', 'dbMakeNewItem', 'dbInsertColumn', 'dbGetVersion',
+ 'dbGetSaveStatus', 'dbGetRecordField', 'dbGetRecordCount', 'dbGetNextItem', 'dbGetLastError', 'dbGetEntireRecord',
+ 'dbGetColumnType', 'dbGetColumnNumber', 'dbGetColumnName', 'dbGetColumnCount', 'dbFindRecord', 'dbExist', 'dbEasterEgg',
+ 'dbDeleteRecord', 'dbDeleteColumn', 'dbDebug', 'dbCookDatabases', 'dbClose', 'dbCloneRecord', 'dbBindCol', 'cWndState',
+ 'cWndinfo', 'cWndGetWndSpecName', 'cWndGetWndSpec', 'cWndexist', 'cWndByWndSpecName', 'cWndByWndSpec', 'cWndbyseq',
+ 'cWndbyname', 'cWndbyid', 'cWndbyclass', 'cWinIDConvert', 'cVersionInfo', 'cVendorId', 'cSetWndText', 'cSetUpDownPos',
+ 'cSetTvItem', 'cSetTrackPos', 'cSetTabItem', 'cSetLvItem', 'cSetLbItemEx', 'cSetLbItem', 'cSetIpAddr', 'cSetFocus',
+ 'cSetEditText', 'cSetDtpDate', 'cSetCbItem', 'cSetCalDate', 'cSendMessage', 'cRadioButton', 'cPostMessage', 'cPostButton',
+ 'cMemStat', 'cGetWndCursor', 'cGetUpDownPos', 'cGetUpDownMin', 'cGetUpDownMax', 'cGetTVItem', 'cGetTrackPos', 'cGetTrackMin',
+ 'cGetTrackMax', 'cGetTbText', 'cGetSbText', 'cGetLvText', 'cGetLvSelText', 'cGetLvFocText', 'cGetLvDdtText', 'cGetLvColText',
+ 'cGetLbText', 'cGetLbSelText', 'cGetLbCount', 'cGetIpAddr', 'cGetInfo', 'cGetHrText', 'cGetFocus', 'cGetEditText', 'cGetDtpDate',
+ 'cGetControlImageCRC', 'cGetCBText', 'cGetCbCount', 'cGetCalDate', 'cFindByName', 'cFindByClass', 'cEnablestate', 'cDblClickItem',
+ 'cCpuSupt', 'cCpuSpeed', 'cCpuIdExt', 'cCpuId', 'cCpuFeat', 'cCpuBenchmark', 'cCloneCheck', 'cClickToolbar', 'cClickButton',
+ 'cClearTvItem', 'cClearLvItem', 'cClearLbAll', 'cCheckbox', 'aVersion', 'aStatusbar', 'aShellFolder', 'aMsgTimeout', 'AllSPoll',
+ 'aGetLastError', 'aFileRename', 'aFileMove', 'aFileDelete', 'aFileCopy'
+ ),
+ 5 => array(
+ 'wWordRight', 'wWordLeft', 'wWinTile', 'wWinRestore', 'wWinNext', 'wWinMinimize', 'wWinMaximize', 'wWinCloseAll', 'wWinClose',
+ 'wWinCascade', 'wWinArricons', 'wViewOutput', 'wViewOptions', 'wViewHtml', 'wUpperCase', 'wUpline', 'wUndo', 'wTopOfFile', 'wToggleIns',
+ 'wTab', 'wStatusMsg', 'wStartSel', 'wSpellcheck', 'wSetProject', 'wSetPrefs', 'wSetColblk', 'wSetBookmark', 'wSelWordRight',
+ 'wSelWordLeft', 'wSelUp', 'wSelTop', 'wSelRight', 'wSelPgUp', 'wSelPgDn', 'wSelLeft', 'wSelInfo', 'wSelHome', 'wSelEnd', 'wSelectAll',
+ 'wSelDown', 'wSelBottom', 'wRunRebuild', 'wRunMake', 'wRunExecute', 'wRunDebug', 'wRunConfig', 'wRunCompile', 'wRunCommand', 'wRight',
+ 'wRepeat', 'wRedo', 'wRecord', 'wProperties', 'wPrintDirect', 'wPrinSetup', 'wPrevError', 'wPaste', 'wPageUp', 'wPageDown', 'wNextError',
+ 'wNewLine', 'wLowerCase', 'wLineCount', 'wLeft', 'wInvertCase', 'wInsString', 'wInsLine', 'wHome', 'wHelpKeyword', 'wHelpKeybrd',
+ 'wHelpIndex', 'wHelpHelp', 'wHelpCmds', 'wHelpAbout', 'wGotoLine', 'wGotoCol', 'wGetWrap', 'wGetWord', 'wGetUndo', 'wGetSelstate',
+ 'wGetRedo', 'wGetOutput', 'wGetModified', 'wGetLineNo', 'wGetIns', 'wGetFilename', 'wGetColNo', 'wGetChar', 'wFtpOpen', 'wFindNext',
+ 'wFindInFiles', 'wFind', 'wFileSaveAs', 'wFileSave', 'wFileRevert', 'wFilePrint', 'wFilePgSetup', 'wFileOpen', 'wFileNew', 'wFileMerge',
+ 'wFileList', 'wFileExit', 'wEndSel', 'wEndOfFile', 'wEnd', 'wEdWrap', 'wEdWordRight', 'wEdWordLeft', 'wEdUpLine', 'wEdUndo', 'wEdTopOfFile',
+ 'wEdToggleIns', 'wEdTab', 'wEdStartSel', 'wEdSetColBlk', 'wEdSelectAll', 'wEdRight', 'wEdRedo', 'wEdPaste', 'wEdPageUp', 'wEdPageDown',
+ 'wEdNewLine', 'wEdLeft', 'wEdInsString', 'wEdHome', 'wEdGoToLine', 'wEdGoToCol', 'wEdGetWord', 'wEdEndSel', 'wEdEndOfFile', 'wEdEnd',
+ 'wEdDownLine', 'wEdDelete', 'wEdCutLine', 'wEdCut', 'wEdCopyLine', 'wEdCopy', 'wEdClearSel', 'wEdBackTab', 'wEdBackspace', 'wDownLine',
+ 'wDelete', 'wDelButton', 'wCutMarked', 'wCutLine', 'wCutAppend', 'wCut', 'wCopyMarked', 'wCopyLine', 'wCopyAppend', 'wCopy', 'wCompile',
+ 'wClearSel', 'wChange', 'wCallMacro', 'wBackTab', 'wBackspace', 'wAutoIndent', 'wAddButton', 'edWindowTile', 'edWindowRestore',
+ 'edWindowNext', 'edWindowMinimize', 'edWindowMaximize', 'edWindowCloseall', 'edWindowClose', 'edWindowCascade', 'edWindowArrangeIcons',
+ 'edStatusMsg', 'edSearchViewOutput', 'edSearchRepeat', 'edSearchPrevError', 'edSearchNextError', 'edSearchFind', 'edSearchChange',
+ 'edRunRebuild', 'edRunMake', 'edRunExecute', 'edRunDebug', 'edRunConfigure', 'edRunCompile', 'edRunCommand', 'edRecord', 'edHelpProcedures',
+ 'edHelpKeyword', 'edHelpKeyboard', 'edHelpIndex', 'edHelpHelp', 'edHelpCommands', 'edHelpAbout', 'edGetWordWrapState', 'edGetWindowName',
+ 'edGetUndoState', 'edGetSelectionState', 'edGetRedoState', 'edGetModifiedStatus', 'edGetLineNumber', 'edGetInsertState', 'edGetColumnNumber',
+ 'edGetChar', 'edFileSetPreferences', 'edFileSaveAs', 'edFileSave', 'edFilePrinterSetup', 'edFilePrint', 'edFilePageSetup', 'edFileOpen',
+ 'edFileNew', 'edFileMerge', 'edFileList', 'edFileExit', 'edEditWrap', 'edEditWordRight', 'edEditWordLeft', 'edEditUpLine', 'edEditUndo',
+ 'edEditToggleIns', 'edEditTab', 'edEditStartSelection', 'edEditSetColumnBlock', 'edEditSetBookmark', 'edEditSelectAll', 'edEditRight',
+ 'edEditRedo', 'edEditPaste', 'edEditPageUp', 'edEditPageDown', 'edEditLeft', 'edEditInsertString', 'edEditGoToLine', 'edEditGoToColumn',
+ 'edEditGoToBookmark', 'edEditGetCurrentWord', 'edEditEndSelection', 'edEditEndOfLine', 'edEditEndOfFile', 'edEditDownline', 'edEditDelete',
+ 'edEditCutline', 'edEditCut', 'edEditCopyline', 'edEditCopy', 'edEditClearSelection', 'edEditBeginningOfLine', 'edEditBeginningOfFile',
+ 'edEditBackTab', 'edEditBackspace', 'edDeleteButton', 'edAddButton'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '[', ']', '{', '}', '!', '+', '-', '~', '$', '^', '?', '@', '%', '#', '&', '*', '|', '/', '<', '>'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #800080;',
+ 2 => 'color: #0080FF; font-weight: bold;',
+ 3 => 'color: #0000FF;',
+ 4 => 'color: #FF00FF;',
+ 5 => 'color: #008000;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #008000; font-style: italic;',
+ 2 => 'color: #FF1010; font-weight: bold;',
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ 0 => 'color: #006600;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #0000ff;'
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => '',
+ 5 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(),
+ 'REGEXPS' => array(//Variable names
+ 0 => "[\\$]{1,2}[a-zA-Z_][a-zA-Z0-9_]*"
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_MAYBE,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/xml.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/xml.php
new file mode 100644
index 000000000..1222e9fb9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/xml.php
@@ -0,0 +1,157 @@
+<?php
+/*************************************************************************************
+ * xml.php
+ * -------
+ * Author: Nigel McNie (nigel@geshi.org)
+ * Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/09/01
+ *
+ * XML language file for GeSHi. Based on the idea/file by Christian Weiske
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * 2005/12/28 (1.0.2)
+ * - Removed escape character for strings
+ * 2004/11/27 (1.0.1)
+ * - Added support for multiple object splitters
+ * 2004/10/27 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ * * Check regexps work and correctly highlight XML stuff and nothing else
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'XML',
+ 'COMMENT_SINGLE' => array(),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ ),
+ 'SYMBOLS' => array(
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ ),
+ 'COMMENTS' => array(
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'SCRIPT' => array(
+ -1 => 'color: #808080; font-style: italic;', // comments
+ 0 => 'color: #00bbdd;',
+ 1 => 'color: #ddbb00;',
+ 2 => 'color: #339933;',
+ 3 => 'color: #009900;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #000066;',
+ 1 => 'color: #000000; font-weight: bold;',
+ 2 => 'color: #000000; font-weight: bold;'
+ )
+ ),
+ 'URLS' => array(
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ 0 => array(//attribute names
+ GESHI_SEARCH => '([a-z_:][\w\-\.:]*)(=)',
+ GESHI_REPLACE => '\\1',
+ GESHI_MODIFIERS => 'i',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => '\\2'
+ ),
+ 1 => array(//Initial header line
+ GESHI_SEARCH => '(&lt;[\/?|(\?xml)]?[a-z_:][\w\-\.:]*(\??&gt;)?)',
+ GESHI_REPLACE => '\\1',
+ GESHI_MODIFIERS => 'i',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
+ ),
+ 2 => array(//Tag end markers
+ GESHI_SEARCH => '(([\/|\?])?&gt;)',
+ GESHI_REPLACE => '\\1',
+ GESHI_MODIFIERS => 'i',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
+ ),
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_ALWAYS,
+ 'SCRIPT_DELIMITERS' => array(
+ -1 => array(
+ '<!--' => '-->'
+ ),
+ 0 => array(
+ '<!DOCTYPE' => '>'
+ ),
+ 1 => array(
+ '&' => ';'
+ ),
+ 2 => array(
+ '<![CDATA[' => ']]>'
+ ),
+ 3 => array(
+ '<' => '>'
+ )
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ -1 => false,
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ 3 => true
+ ),
+ 'TAB_WIDTH' => 2,
+ 'PARSER_CONTROL' => array(
+ 'ENABLE_FLAGS' => array(
+ 'NUMBERS' => GESHI_NEVER
+ )
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/xorg_conf.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/xorg_conf.php
new file mode 100644
index 000000000..c32c460b3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/xorg_conf.php
@@ -0,0 +1,124 @@
+<?php
+/*************************************************************************************
+ * xorg_conf.php
+ * ----------
+ * Author: Milian Wolff (mail@milianw.de)
+ * Copyright: (c) 2008 Milian Wolff (http://milianw.de)
+ * Release Version: 1.0.8.4
+ * Date Started: 2008/06/18
+ *
+ * xorg.conf language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/06/18 (1.0.8)
+ * - Initial import
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Xorg configuration',
+ 'COMMENT_SINGLE' => array(1 => '#'),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ // sections
+ 1 => array(
+ 'Section', 'EndSection', 'SubSection', 'EndSubSection'
+ ),
+ 2 => array(
+ // see http://www.x.org/archive/X11R6.9.0/doc/html/xorg.conf.5.html
+ 'BiosBase', 'Black', 'Boardname', 'BusID', 'ChipID', 'ChipRev',
+ 'Chipset', 'ClockChip', 'Clocks', 'DacSpeed',
+ 'DefaultDepth', 'DefaultFbBpp', 'Depth', 'Device',
+ 'DisplaySize', 'Driver', 'FbBpp', 'Gamma',
+ 'HorizSync', 'IOBase', 'Identifier', 'InputDevice',
+ 'Load', 'MemBase', 'Mode', 'Modeline', 'Modelname',
+ 'Modes', 'Monitor', 'Option', 'Ramdac', 'RgbPath',
+ 'Screen', 'TextClockFreq', 'UseModes', 'VendorName',
+ 'VertRefresh', 'VideoAdaptor', 'VideoRam',
+ 'ViewPort', 'Virtual', 'Visual', 'Weight', 'White'
+ ),
+ 3 => array(
+ // some sub-keywords
+ // screen position
+ 'Above', 'Absolute', 'Below', 'LeftOf', 'Relative', 'RightOf',
+ // modes
+ 'DotClock', 'Flags', 'HSkew', 'HTimings', 'VScan', 'VTimings'
+ ),
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SYMBOLS' => array(
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #b1b100;',
+ 2 => 'color: #990000;',
+ 3 => 'color: #550000;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #adadad; font-style: italic;',
+ ),
+ 'ESCAPE_CHAR' => array(
+ ),
+ 'BRACKETS' => array(
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #0000ff;',
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 4
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/xpp.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/xpp.php
new file mode 100644
index 000000000..db0019dd0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/xpp.php
@@ -0,0 +1,436 @@
+<?php
+/*************************************************************************************
+ * xpp.php
+ * -------
+ * Author: Simon Butcher (simon@butcher.name)
+ * Copyright: (c) 2007 Simon Butcher (http://simon.butcher.name/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2007/02/27
+ *
+ * Axapta/Dynamics Ax X++ language file for GeSHi.
+ * For details, see <http://msdn.microsoft.com/en-us/library/aa867122.aspx>
+ *
+ * CHANGES
+ * -------
+ * 2007/02/28 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2007/02/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'X++',
+ 'COMMENT_SINGLE' => array(1 => '//'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array( // Primitive types
+ 'void',
+ 'str',
+ 'real',
+ 'int64',
+ 'int',
+ 'date',
+ 'container',
+ 'boolean',
+ 'anytype'
+ ),
+ 2 => array( // Keywords
+ 'window',
+ 'while',
+ 'try',
+ 'true',
+ 'throw',
+ 'switch',
+ 'super',
+ 'static',
+ 'server',
+ 'right',
+ 'return',
+ 'retry',
+ 'public',
+ 'protected',
+ 'private',
+ 'print',
+ 'pause',
+ 'null',
+ 'new',
+ 'mod',
+ 'left',
+ 'interface',
+ 'implements',
+ 'if',
+ 'for',
+ 'final',
+ 'false',
+ 'extends',
+ 'else',
+ 'edit',
+ 'do',
+ 'div',
+ 'display',
+ 'default',
+ 'continue',
+ 'client',
+ 'class',
+ 'changeCompany',
+ 'case',
+ 'breakpoint',
+ 'break',
+ 'at',
+ 'abstract'
+ ),
+ 3 => array( // Functions within the Axapta kernel
+ 'year',
+ 'wkofyr',
+ 'webwebpartstr',
+ 'webstaticfilestr',
+ 'websitetempstr',
+ 'websitedefstr',
+ 'webreportstr',
+ 'webpagedefstr',
+ 'weboutputcontentitemstr',
+ 'webmenustr',
+ 'webletitemstr',
+ 'webformstr',
+ 'webdisplaycontentitemstr',
+ 'webactionitemstr',
+ 'varstr',
+ 'utilmoyr',
+ 'uint2str',
+ 'typeof',
+ 'typeid',
+ 'trunc',
+ 'today',
+ 'timenow',
+ 'time2str',
+ 'term',
+ 'tanh',
+ 'tan',
+ 'tablestr',
+ 'tablestaticmethodstr',
+ 'tablepname',
+ 'tablenum',
+ 'tablename2id',
+ 'tablemethodstr',
+ 'tableid2pname',
+ 'tableid2name',
+ 'tablefieldgroupstr',
+ 'tablecollectionstr',
+ 'systemdateset',
+ 'systemdateget',
+ 'syd',
+ 'substr',
+ 'strupr',
+ 'strscan',
+ 'strrtrim',
+ 'strrep',
+ 'strrem',
+ 'strprompt',
+ 'strpoke',
+ 'strnfind',
+ 'strlwr',
+ 'strltrim',
+ 'strline',
+ 'strlen',
+ 'strkeep',
+ 'strins',
+ 'strfmt',
+ 'strfind',
+ 'strdel',
+ 'strcolseq',
+ 'strcmp',
+ 'stralpha',
+ 'str2time',
+ 'str2num',
+ 'str2int64',
+ 'str2int',
+ 'str2guid',
+ 'str2enum',
+ 'str2date',
+ 'staticmethodstr',
+ 'sln',
+ 'sleep',
+ 'sinh',
+ 'sin',
+ 'setprefix',
+ 'sessionid',
+ 'securitykeystr',
+ 'securitykeynum',
+ 'runbuf',
+ 'runas',
+ 'round',
+ 'resourcestr',
+ 'reportstr',
+ 'refprintall',
+ 'rate',
+ 'querystr',
+ 'pv',
+ 'pt',
+ 'prmisdefault',
+ 'primoyr',
+ 'prevyr',
+ 'prevqtr',
+ 'prevmth',
+ 'power',
+ 'pmt',
+ 'num2str',
+ 'num2date',
+ 'num2char',
+ 'nextyr',
+ 'nextqtr',
+ 'nextmth',
+ 'newguid',
+ 'mthofyr',
+ 'mthname',
+ 'mkdate',
+ 'minint',
+ 'min',
+ 'methodstr',
+ 'menustr',
+ 'menuitemoutputstr',
+ 'menuitemdisplaystr',
+ 'menuitemactionstr',
+ 'maxint',
+ 'maxdate',
+ 'max',
+ 'match',
+ 'logn',
+ 'log10',
+ 'literalstr',
+ 'licensecodestr',
+ 'licensecodenum',
+ 'intvnorm',
+ 'intvno',
+ 'intvname',
+ 'intvmax',
+ 'int64str',
+ 'indexstr',
+ 'indexnum',
+ 'indexname2id',
+ 'indexid2name',
+ 'idg',
+ 'identifierstr',
+ 'helpfilestr',
+ 'helpdevstr',
+ 'helpapplstr',
+ 'guid2str',
+ 'getprefix',
+ 'getCurrentUTCTime',
+ 'fv',
+ 'funcname',
+ 'frac',
+ 'formstr',
+ 'fieldstr',
+ 'fieldpname',
+ 'fieldnum',
+ 'fieldname2id',
+ 'fieldid2pname',
+ 'fieldid2name',
+ 'extendedTypeStr',
+ 'extendedTypeNum',
+ 'exp10',
+ 'exp',
+ 'evalbuf',
+ 'enumstr',
+ 'enumnum',
+ 'enumcnt',
+ 'enum2str',
+ 'endmth',
+ 'dimof',
+ 'dg',
+ 'decround',
+ 'ddb',
+ 'dayofyr',
+ 'dayofwk',
+ 'dayofmth',
+ 'dayname',
+ 'date2str',
+ 'date2num',
+ 'curuserid',
+ 'curext',
+ 'cterm',
+ 'cosh',
+ 'cos',
+ 'corrflagset',
+ 'corrflagget',
+ 'convertUTCTimeToLocalTime',
+ 'convertUTCDateToLocalDate',
+ 'conpoke',
+ 'conpeek',
+ 'connull',
+ 'conlen',
+ 'conins',
+ 'confind',
+ 'configurationkeystr',
+ 'configurationkeynum',
+ 'condel',
+ 'classstr',
+ 'classnum',
+ 'classidget',
+ 'char2num',
+ 'beep',
+ 'atan',
+ 'asin',
+ 'ascii2ansi',
+ 'any2str',
+ 'any2real',
+ 'any2int64',
+ 'any2int',
+ 'any2guid',
+ 'any2enum',
+ 'any2date',
+ 'ansi2ascii',
+ 'acos',
+ 'abs'
+ ),
+ 4 => array( // X++ SQL stuff
+ 'where',
+ 'update_recordset',
+ 'ttsCommit',
+ 'ttsBegin',
+ 'ttsAbort',
+ 'sum',
+ 'setting',
+ 'select',
+ 'reverse',
+ 'pessimisticLock',
+ 'outer',
+ 'order by',
+ 'optimisticLock',
+ 'notExists',
+ 'noFetch',
+ 'next',
+ 'minof',
+ 'maxof',
+ 'like',
+ 'join',
+ 'insert_recordset',
+ 'index hint',
+ 'index',
+ 'group by',
+ 'from',
+ 'forUpdate',
+ 'forceSelectOrder',
+ 'forcePlaceholders',
+ 'forceNestedLoop',
+ 'forceLiterals',
+ 'flush',
+ 'firstOnly',
+ 'firstFast',
+ 'exists',
+ 'desc',
+ 'delete_from',
+ 'count',
+ 'avg',
+ 'asc'
+ )
+ ),
+ 'SYMBOLS' => array( // X++ symbols
+ '!',
+ '&',
+ '(',
+ ')',
+ '*',
+ '^',
+ '|',
+ '~',
+ '+',
+ ',',
+ '-',
+ '/',
+ ':',
+ '<',
+ '=',
+ '>',
+ '?',
+ '[',
+ ']',
+ '{',
+ '}'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #0000ff;',
+ 2 => 'color: #0000ff;',
+ 3 => 'color: #0000ff;',
+ 4 => 'color: #0000ff;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #007f00;',
+ 'MULTI' => 'color: #007f00; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #000000;',
+ 2 => 'color: #000000;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #00007f;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.',
+ 2 => '::'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/z80.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/z80.php
new file mode 100644
index 000000000..2a9b14886
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/z80.php
@@ -0,0 +1,144 @@
+<?php
+/*************************************************************************************
+ * z80.php
+ * -------
+ * Author: Benny Baumann (BenBE@omorphia.de)
+ * Copyright: (c) 2007-2008 Benny Baumann (http://www.omorphia.de/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2007/02/06
+ *
+ * ZiLOG Z80 Assembler language file for GeSHi.
+ * Syntax definition as commonly used with table assembler TASM32
+ * This file will contain some undocumented opcodes.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * 2007/06/03 (1.0.1)
+ * - Fixed two typos in the language file
+ * 2007/02/06 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2007/02/06)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'ZiLOG Z80 Assembler',
+ 'COMMENT_SINGLE' => array(1 => ';'),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ /*CPU*/
+ 1 => array(
+ 'adc','add','and','bit','call','ccf','cp','cpd','cpdr','cpir','cpi',
+ 'cpl','daa','dec','di','djnz','ei','ex','exx','halt','im','in',
+ 'in0','inc','ind','indr','inir','ini','jp','jr','ld','ldd','lddr',
+ 'ldir','ldi','mlt','neg','nop','or','otdm','otdmr','otdr','otim',
+ 'otimr','otir','out','out0','outd','outi','pop','push','res','ret',
+ 'reti','retn','rl','rla','rlc','rlca','rld','rr','rra','rrc','rrca',
+ 'rrd','rst','sbc','scf','set','sla','sl1','sll','slp','sra','srl',
+ 'sub','tst','tstio','xor'
+ ),
+ /*registers*/
+ 2 => array(
+ 'a','b','c','d','e','h','l',
+ 'af','bc','de','hl','ix','iy','sp',
+ 'af\'','ixh','ixl','iyh','iyl'
+ ),
+ /*Directive*/
+ 3 => array(
+ '#define','#endif','#else','#ifdef','#ifndef','#include','#undef',
+ '.db','.dd','.df','.dq','.dt','.dw','.end','.org','equ'
+ ),
+ ),
+ 'SYMBOLS' => array(
+ '[', ']', '(', ')', '?', '+', '-', '*', '/', '%', '$'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #0000ff; font-weight:bold;',
+ 2 => 'color: #0000ff;',
+ 3 => 'color: #46aa03; font-weight:bold;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #adadad; font-style: italic;',
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #0000ff;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #7f007f;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #dd22dd;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #008000;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #22bbff;',
+ 1 => 'color: #22bbff;',
+ 2 => 'color: #993333;'
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ //Hex numbers
+ 0 => '0[0-9a-fA-F]{1,32}[hH]',
+ //Binary numbers
+ 1 => '\%[01]{1,64}|[01]{1,64}[bB]?',
+ //Labels
+ 2 => '^[_a-zA-Z][_a-zA-Z0-9]?\:'
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 8
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/html.php b/mod/dokuwiki/vendors/dokuwiki/inc/html.php
new file mode 100644
index 000000000..0a23370ab
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/html.php
@@ -0,0 +1,1608 @@
+<?php
+/**
+ * HTML output functions
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+if(!defined('DOKU_INC')) die('meh.');
+if(!defined('NL')) define('NL',"\n");
+require_once(DOKU_INC.'inc/parserutils.php');
+require_once(DOKU_INC.'inc/form.php');
+
+/**
+ * Convenience function to quickly build a wikilink
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function html_wikilink($id,$name=null,$search=''){
+ static $xhtml_renderer = null;
+ if(is_null($xhtml_renderer)){
+ $xhtml_renderer = p_get_renderer('xhtml');
+ }
+
+ return $xhtml_renderer->internallink($id,$name,$search,true,'navigation');
+}
+
+/**
+ * Helps building long attribute lists
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function html_attbuild($attributes){
+ $ret = '';
+ foreach ( $attributes as $key => $value ) {
+ $ret .= $key.'="'.formText($value).'" ';
+ }
+ return trim($ret);
+}
+
+/**
+ * The loginform
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function html_login(){
+ global $lang;
+ global $conf;
+ global $ID;
+ global $auth;
+
+ print p_locale_xhtml('login');
+ print '<div class="centeralign">'.NL;
+ $form = new Doku_Form(array('id' => 'dw__login'));
+ $form->startFieldset($lang['btn_login']);
+ $form->addHidden('id', $ID);
+ $form->addHidden('do', 'login');
+ $form->addElement(form_makeTextField('u', ((!$_REQUEST['http_credentials']) ? $_REQUEST['u'] : ''), $lang['user'], 'focus__this', 'block'));
+ $form->addElement(form_makePasswordField('p', $lang['pass'], '', 'block'));
+ if($conf['rememberme']) {
+ $form->addElement(form_makeCheckboxField('r', '1', $lang['remember'], 'remember__me', 'simple'));
+ }
+ $form->addElement(form_makeButton('submit', '', $lang['btn_login']));
+ $form->endFieldset();
+
+ if($auth && $auth->canDo('addUser') && actionOK('register')){
+ $form->addElement('<p>'
+ . $lang['reghere']
+ . ': <a href="'.wl($ID,'do=register').'" rel="nofollow" class="wikilink1">'.$lang['register'].'</a>'
+ . '</p>');
+ }
+
+ if ($auth && $auth->canDo('modPass') && actionOK('resendpwd')) {
+ $form->addElement('<p>'
+ . $lang['pwdforget']
+ . ': <a href="'.wl($ID,'do=resendpwd').'" rel="nofollow" class="wikilink1">'.$lang['btn_resendpwd'].'</a>'
+ . '</p>');
+ }
+
+ html_form('login', $form);
+ print '</div>'.NL;
+}
+
+/**
+ * prints a section editing button
+ * used as a callback in html_secedit
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function html_secedit_button($matches){
+ global $ID;
+ global $INFO;
+
+ $section = $matches[2];
+ $name = $matches[1];
+
+ $secedit = '';
+ $secedit .= '<div class="secedit">';
+ $secedit .= html_btn('secedit',$ID,'',
+ array('do' => 'edit',
+ 'lines' => "$section",
+ 'rev' => $INFO['lastmod']),
+ 'post', $name);
+ $secedit .= '</div>';
+ return $secedit;
+}
+
+/**
+ * inserts section edit buttons if wanted or removes the markers
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function html_secedit($text,$show=true){
+ global $INFO;
+
+ if($INFO['writable'] && $show && !$INFO['rev']){
+ $text = preg_replace_callback('#<!-- SECTION "(.*?)" \[(\d+-\d*)\] -->#',
+ 'html_secedit_button', $text);
+ }else{
+ $text = preg_replace('#<!-- SECTION "(.*?)" \[(\d+-\d*)\] -->#','',$text);
+ }
+
+ return $text;
+}
+
+/**
+ * Just the back to top button (in its own form)
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function html_topbtn(){
+ global $lang;
+
+ $ret = '';
+ $ret = '<a class="nolink" href="#dokuwiki__top"><input type="button" class="button" value="'.$lang['btn_top'].'" onclick="window.scrollTo(0, 0)" title="'.$lang['btn_top'].'" /></a>';
+
+ return $ret;
+}
+
+/**
+ * Displays a button (using its own form)
+ * If tooltip exists, the access key tooltip is replaced.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function html_btn($name,$id,$akey,$params,$method='get',$tooltip=''){
+ global $conf;
+ global $lang;
+
+ $label = $lang['btn_'.$name];
+
+ $ret = '';
+ $tip = '';
+
+ //filter id (without urlencoding)
+ $id = idfilter($id,false);
+
+ //make nice URLs even for buttons
+ if($conf['userewrite'] == 2){
+ $script = DOKU_BASE.DOKU_SCRIPT.'/'.$id;
+ }elseif($conf['userewrite']){
+ $script = DOKU_BASE.$id;
+ }else{
+ $script = DOKU_BASE.DOKU_SCRIPT;
+ $params['id'] = $id;
+ }
+
+ $ret .= '<form class="button btn_'.$name.'" method="'.$method.'" action="'.$script.'"><div class="no">';
+
+ if(is_array($params)){
+ reset($params);
+ while (list($key, $val) = each($params)) {
+ $ret .= '<input type="hidden" name="'.$key.'" ';
+ $ret .= 'value="'.htmlspecialchars($val).'" />';
+ }
+ }
+
+ if ($tooltip!='') {
+ $tip = htmlspecialchars($tooltip);
+ }else{
+ $tip = htmlspecialchars($label);
+ }
+
+ $ret .= '<input type="submit" value="'.htmlspecialchars($label).'" class="button" ';
+ if($akey){
+ $tip .= ' ['.strtoupper($akey).']';
+ $ret .= 'accesskey="'.$akey.'" ';
+ }
+ $ret .= 'title="'.$tip.'" ';
+ $ret .= '/>';
+ $ret .= '</div></form>';
+
+ return $ret;
+}
+
+/**
+ * show a wiki page
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function html_show($txt=''){
+ global $ID;
+ global $REV;
+ global $HIGH;
+ global $INFO;
+ //disable section editing for old revisions or in preview
+ if($txt || $REV){
+ $secedit = false;
+ }else{
+ $secedit = true;
+ }
+
+ if ($txt){
+ //PreviewHeader
+ echo '<br id="scroll__here" />';
+ echo p_locale_xhtml('preview');
+ echo '<div class="preview">';
+ $html = html_secedit(p_render('xhtml',p_get_instructions($txt),$info),$secedit);
+ if($INFO['prependTOC']) $html = tpl_toc(true).$html;
+ echo $html;
+ echo '<div class="clearer"></div>';
+ echo '</div>';
+
+ }else{
+ if ($REV) print p_locale_xhtml('showrev');
+ $html = p_wiki_xhtml($ID,$REV,true);
+ $html = html_secedit($html,$secedit);
+ if($INFO['prependTOC']) $html = tpl_toc(true).$html;
+ $html = html_hilight($html,$HIGH);
+ echo $html;
+ }
+}
+
+/**
+ * ask the user about how to handle an exisiting draft
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function html_draft(){
+ global $INFO;
+ global $ID;
+ global $lang;
+ global $conf;
+ $draft = unserialize(io_readFile($INFO['draft'],false));
+ $text = cleanText(con($draft['prefix'],$draft['text'],$draft['suffix'],true));
+
+ print p_locale_xhtml('draft');
+ $form = new Doku_Form(array('id' => 'dw__editform'));
+ $form->addHidden('id', $ID);
+ $form->addHidden('date', $draft['date']);
+ $form->addElement(form_makeWikiText($text, array('readonly'=>'readonly')));
+ $form->addElement(form_makeOpenTag('div', array('id'=>'draft__status')));
+ $form->addElement($lang['draftdate'].' '. dformat(filemtime($INFO['draft'])));
+ $form->addElement(form_makeCloseTag('div'));
+ $form->addElement(form_makeButton('submit', 'recover', $lang['btn_recover'], array('tabindex'=>'1')));
+ $form->addElement(form_makeButton('submit', 'draftdel', $lang['btn_draftdel'], array('tabindex'=>'2')));
+ $form->addElement(form_makeButton('submit', 'show', $lang['btn_cancel'], array('tabindex'=>'3')));
+ html_form('draft', $form);
+}
+
+/**
+ * Highlights searchqueries in HTML code
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Harry Fuecks <hfuecks@gmail.com>
+ */
+function html_hilight($html,$phrases){
+ $phrases = array_filter((array) $phrases);
+ $regex = join('|',array_map('preg_quote_cb',$phrases));
+
+ if ($regex === '') return $html;
+ $html = preg_replace_callback("/((<[^>]*)|$regex)/ui",'html_hilight_callback',$html);
+ return $html;
+}
+
+/**
+ * Callback used by html_hilight()
+ *
+ * @author Harry Fuecks <hfuecks@gmail.com>
+ */
+function html_hilight_callback($m) {
+ $hlight = unslash($m[0]);
+ if ( !isset($m[2])) {
+ $hlight = '<span class="search_hit">'.$hlight.'</span>';
+ }
+ return $hlight;
+}
+
+/**
+ * Run a search and display the result
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function html_search(){
+ require_once(DOKU_INC.'inc/search.php');
+ require_once(DOKU_INC.'inc/fulltext.php');
+ global $conf;
+ global $QUERY;
+ global $ID;
+ global $lang;
+
+ print p_locale_xhtml('searchpage');
+ flush();
+
+ //check if search is restricted to namespace
+ if(preg_match('/@([^@]*)/',$QUERY,$match)) {
+ $id = cleanID($match[1]);
+ } else {
+ $id = cleanID($QUERY);
+ }
+
+ //show progressbar
+ print '<div class="centeralign" id="dw__loading">'.NL;
+ print '<script type="text/javascript" charset="utf-8"><!--//--><![CDATA[//><!--'.NL;
+ print 'showLoadBar();'.NL;
+ print '//--><!]]></script>'.NL;
+ print '<br /></div>'.NL;
+ flush();
+
+ //do quick pagesearch
+ $data = array();
+
+ if($id) $data = ft_pageLookup($id);
+ if(count($data)){
+ print '<div class="search_quickresult">';
+ print '<h3>'.$lang['quickhits'].':</h3>';
+ print '<ul class="search_quickhits">';
+ foreach($data as $id){
+ print '<li> ';
+ $ns = getNS($id);
+ if($ns){
+ $name = shorten(noNS($id), ' ('.$ns.')',30);
+ }else{
+ $name = $id;
+ }
+ print html_wikilink(':'.$id,$name);
+ print '</li> ';
+ }
+ print '</ul> ';
+ //clear float (see http://www.complexspiral.com/publications/containing-floats/)
+ print '<div class="clearer">&nbsp;</div>';
+ print '</div>';
+ }
+ flush();
+
+ //do fulltext search
+ $data = ft_pageSearch($QUERY,$regex);
+ if(count($data)){
+ $num = 1;
+ foreach($data as $id => $cnt){
+ print '<div class="search_result">';
+ print html_wikilink(':'.$id,useHeading('navigation')?null:$id,$regex);
+ if($cnt !== 0){
+ print ': <span class="search_cnt">'.$cnt.' '.$lang['hits'].'</span><br />';
+ if($num < 15){ // create snippets for the first number of matches only #FIXME add to conf ?
+ print '<div class="search_snippet">'.ft_snippet($id,$regex).'</div>';
+ }
+ $num++;
+ }
+ print '</div>';
+ flush();
+ }
+ }else{
+ print '<div class="nothing">'.$lang['nothingfound'].'</div>';
+ }
+
+ //hide progressbar
+ print '<script type="text/javascript" charset="utf-8"><!--//--><![CDATA[//><!--'.NL;
+ print 'hideLoadBar("dw__loading");'.NL;
+ print '//--><!]]></script>'.NL;
+ flush();
+}
+
+/**
+ * Display error on locked pages
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function html_locked(){
+ global $ID;
+ global $conf;
+ global $lang;
+ global $INFO;
+
+ $locktime = filemtime(wikiLockFN($ID));
+ $expire = dformat($locktime + $conf['locktime']);
+ $min = round(($conf['locktime'] - (time() - $locktime) )/60);
+
+ print p_locale_xhtml('locked');
+ print '<ul>';
+ print '<li><div class="li"><strong>'.$lang['lockedby'].':</strong> '.editorinfo($INFO['locked']).'</div></li>';
+ print '<li><div class="li"><strong>'.$lang['lockexpire'].':</strong> '.$expire.' ('.$min.' min)</div></li>';
+ print '</ul>';
+}
+
+/**
+ * list old revisions
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Ben Coburn <btcoburn@silicodon.net>
+ */
+function html_revisions($first=0){
+ global $ID;
+ global $INFO;
+ global $conf;
+ global $lang;
+ /* we need to get one additionally log entry to be able to
+ * decide if this is the last page or is there another one.
+ * see html_recent()
+ */
+ $revisions = getRevisions($ID, $first, $conf['recent']+1);
+ if(count($revisions)==0 && $first!=0){
+ $first=0;
+ $revisions = getRevisions($ID, $first, $conf['recent']+1);;
+ }
+ $hasNext = false;
+ if (count($revisions)>$conf['recent']) {
+ $hasNext = true;
+ array_pop($revisions); // remove extra log entry
+ }
+
+ $date = dformat($INFO['lastmod']);
+
+ print p_locale_xhtml('revisions');
+
+ $form = new Doku_Form(array('id' => 'page__revisions'));
+ $form->addElement(form_makeOpenTag('ul'));
+ if($INFO['exists'] && $first==0){
+ if (isset($INFO['meta']) && isset($INFO['meta']['last_change']) && $INFO['meta']['last_change']['type']===DOKU_CHANGE_TYPE_MINOR_EDIT)
+ $form->addElement(form_makeOpenTag('li', array('class' => 'minor')));
+ else
+ $form->addElement(form_makeOpenTag('li'));
+ $form->addElement(form_makeOpenTag('div', array('class' => 'li')));
+ $form->addElement(form_makeTag('input', array(
+ 'type' => 'checkbox',
+ 'name' => 'rev2[]',
+ 'value' => 'current')));
+
+ $form->addElement(form_makeOpenTag('span', array('class' => 'date')));
+ $form->addElement($date);
+ $form->addElement(form_makeCloseTag('span'));
+
+ $form->addElement(form_makeTag('img', array(
+ 'src' => DOKU_MEDIA.'lib/images/blank.gif',
+ 'width' => '15',
+ 'height' => '11',
+ 'alt' => '')));
+
+ $form->addElement(form_makeOpenTag('a', array(
+ 'class' => 'wikilink1',
+ 'href' => wl($ID))));
+ $form->addElement($ID);
+ $form->addElement(form_makeCloseTag('a'));
+
+ $form->addElement(form_makeOpenTag('span', array('class' => 'sum')));
+ $form->addElement(' &ndash; ');
+ $form->addElement(htmlspecialchars($INFO['sum']));
+ $form->addElement(form_makeCloseTag('span'));
+
+ $form->addElement(form_makeOpenTag('span', array('class' => 'user')));
+ $form->addElement((empty($INFO['editor']))?('('.$lang['external_edit'].')'):editorinfo($INFO['editor']));
+ $form->addElement(form_makeCloseTag('span'));
+
+ $form->addElement('('.$lang['current'].')');
+ $form->addElement(form_makeCloseTag('div'));
+ $form->addElement(form_makeCloseTag('li'));
+ }
+
+ foreach($revisions as $rev){
+ $date = dformat($rev);
+ $info = getRevisionInfo($ID,$rev,true);
+ $exists = page_exists($ID,$rev);
+
+ if ($info['type']===DOKU_CHANGE_TYPE_MINOR_EDIT)
+ $form->addElement(form_makeOpenTag('li', array('class' => 'minor')));
+ else
+ $form->addElement(form_makeOpenTag('li'));
+ $form->addElement(form_makeOpenTag('div', array('class' => 'li')));
+ if($exists){
+ $form->addElement(form_makeTag('input', array(
+ 'type' => 'checkbox',
+ 'name' => 'rev2[]',
+ 'value' => $rev)));
+ }else{
+ $form->addElement(form_makeTag('img', array(
+ 'src' => DOKU_MEDIA.'lib/images/blank.gif',
+ 'width' => 14,
+ 'height' => 11,
+ 'alt' => '')));
+ }
+
+ $form->addElement(form_makeOpenTag('span', array('class' => 'date')));
+ $form->addElement($date);
+ $form->addElement(form_makeCloseTag('span'));
+
+ if($exists){
+ $form->addElement(form_makeOpenTag('a', array('href' => wl($ID,"rev=$rev,do=diff", false, '&'), 'class' => 'diff_link')));
+ $form->addElement(form_makeTag('img', array(
+ 'src' => DOKU_MEDIA.'lib/images/diff.png',
+ 'width' => 15,
+ 'height' => 11,
+ 'title' => $lang['diff'],
+ 'alt' => $lang['diff'])));
+ $form->addElement(form_makeCloseTag('a'));
+
+ $form->addElement(form_makeOpenTag('a', array('href' => wl($ID,"rev=$rev",false,'&'), 'class' => 'wikilink1')));
+ $form->addElement($ID);
+ $form->addElement(form_makeCloseTag('a'));
+ }else{
+ $form->addElement(form_makeTag('img', array(
+ 'src' => DOKU_MEDIA.'lib/images/blank.gif',
+ 'width' => '15',
+ 'height' => '11',
+ 'alt' => '')));
+ $form->addElement($ID);
+ }
+
+ $form->addElement(form_makeOpenTag('span', array('class' => 'sum')));
+ $form->addElement(' &ndash; ');
+ $form->addElement(htmlspecialchars($info['sum']));
+ $form->addElement(form_makeCloseTag('span'));
+
+ $form->addElement(form_makeOpenTag('span', array('class' => 'user')));
+ if($info['user']){
+ $form->addElement(editorinfo($info['user']));
+ if(auth_ismanager()){
+ $form->addElement(' ('.$info['ip'].')');
+ }
+ }else{
+ $form->addElement($info['ip']);
+ }
+ $form->addElement(form_makeCloseTag('span'));
+
+ $form->addElement(form_makeCloseTag('div'));
+ $form->addElement(form_makeCloseTag('li'));
+ }
+ $form->addElement(form_makeCloseTag('ul'));
+ $form->addElement(form_makeButton('submit', 'diff', $lang['diff2']));
+ html_form('revisions', $form);
+
+ print '<div class="pagenav">';
+ $last = $first + $conf['recent'];
+ if ($first > 0) {
+ $first -= $conf['recent'];
+ if ($first < 0) $first = 0;
+ print '<div class="pagenav-prev">';
+ print html_btn('newer',$ID,"p",array('do' => 'revisions', 'first' => $first));
+ print '</div>';
+ }
+ if ($hasNext) {
+ print '<div class="pagenav-next">';
+ print html_btn('older',$ID,"n",array('do' => 'revisions', 'first' => $last));
+ print '</div>';
+ }
+ print '</div>';
+
+}
+
+/**
+ * display recent changes
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ * @author Ben Coburn <btcoburn@silicodon.net>
+ */
+function html_recent($first=0){
+ global $conf;
+ global $lang;
+ global $ID;
+ /* we need to get one additionally log entry to be able to
+ * decide if this is the last page or is there another one.
+ * This is the cheapest solution to get this information.
+ */
+ $recents = getRecents($first,$conf['recent'] + 1,getNS($ID));
+ if(count($recents) == 0 && $first != 0){
+ $first=0;
+ $recents = getRecents($first,$conf['recent'] + 1,getNS($ID));
+ }
+ $hasNext = false;
+ if (count($recents)>$conf['recent']) {
+ $hasNext = true;
+ array_pop($recents); // remove extra log entry
+ }
+
+ print p_locale_xhtml('recent');
+
+ if (getNS($ID) != '')
+ print '<div class="level1"><p>' . sprintf($lang['recent_global'], getNS($ID), wl('', 'do=recent')) . '</p></div>';
+
+ $form = new Doku_Form(array('id' => 'dw__recent', 'method' => 'GET'));
+ $form->addHidden('sectok', null);
+ $form->addHidden('do', 'recent');
+ $form->addHidden('id', $ID);
+ $form->addElement(form_makeOpenTag('ul'));
+
+ foreach($recents as $recent){
+ $date = dformat($recent['date']);
+ if ($recent['type']===DOKU_CHANGE_TYPE_MINOR_EDIT)
+ $form->addElement(form_makeOpenTag('li', array('class' => 'minor')));
+ else
+ $form->addElement(form_makeOpenTag('li'));
+
+ $form->addElement(form_makeOpenTag('div', array('class' => 'li')));
+
+ $form->addElement(form_makeOpenTag('span', array('class' => 'date')));
+ $form->addElement($date);
+ $form->addElement(form_makeCloseTag('span'));
+
+ $form->addElement(form_makeOpenTag('a', array('class' => 'diff_link', 'href' => wl($recent['id'],"do=diff", false, '&'))));
+ $form->addElement(form_makeTag('img', array(
+ 'src' => DOKU_MEDIA.'lib/images/diff.png',
+ 'width' => 15,
+ 'height'=> 11,
+ 'title' => $lang['diff'],
+ 'alt' => $lang['diff']
+ )));
+ $form->addElement(form_makeCloseTag('a'));
+
+ $form->addElement(form_makeOpenTag('a', array('class' => 'revisions_link', 'href' => wl($recent['id'],"do=revisions",false,'&'))));
+ $form->addElement(form_makeTag('img', array(
+ 'src' => DOKU_MEDIA.'lib/images/history.png',
+ 'width' => 12,
+ 'height'=> 14,
+ 'title' => $lang['btn_revs'],
+ 'alt' => $lang['btn_revs']
+ )));
+ $form->addElement(form_makeCloseTag('a'));
+
+ $form->addElement(html_wikilink(':'.$recent['id'],useHeading('navigation')?null:$recent['id']));
+
+ $form->addElement(form_makeOpenTag('span', array('class' => 'sum')));
+ $form->addElement(' &ndash; '.htmlspecialchars($recent['sum']));
+ $form->addElement(form_makeCloseTag('span'));
+
+ $form->addElement(form_makeOpenTag('span', array('class' => 'user')));
+ if($recent['user']){
+ $form->addElement(editorinfo($recent['user']));
+ if(auth_ismanager()){
+ $form->addElement(' ('.$recent['ip'].')');
+ }
+ }else{
+ $form->addElement($recent['ip']);
+ }
+ $form->addElement(form_makeCloseTag('span'));
+
+ $form->addElement(form_makeCloseTag('div'));
+ $form->addElement(form_makeCloseTag('li'));
+ }
+ $form->addElement(form_makeCloseTag('ul'));
+
+ $form->addElement(form_makeOpenTag('div', array('class' => 'pagenav')));
+ $last = $first + $conf['recent'];
+ if ($first > 0) {
+ $first -= $conf['recent'];
+ if ($first < 0) $first = 0;
+ $form->addElement(form_makeOpenTag('div', array('class' => 'pagenav-prev')));
+ $form->addElement(form_makeTag('input', array(
+ 'type' => 'submit',
+ 'name' => 'first['.$first.']',
+ 'value' => $lang['btn_newer'],
+ 'accesskey' => 'n',
+ 'title' => $lang['btn_newer'].' [N]',
+ 'class' => 'button'
+ )));
+ $form->addElement(form_makeCloseTag('div'));
+ }
+ if ($hasNext) {
+ $form->addElement(form_makeOpenTag('div', array('class' => 'pagenav-next')));
+ $form->addElement(form_makeTag('input', array(
+ 'type' => 'submit',
+ 'name' => 'first['.$last.']',
+ 'value' => $lang['btn_older'],
+ 'accesskey' => 'p',
+ 'title' => $lang['btn_older'].' [P]',
+ 'class' => 'button'
+ )));
+ $form->addElement(form_makeCloseTag('div'));
+ }
+ $form->addElement(form_makeCloseTag('div'));
+ html_form('recent', $form);
+}
+
+/**
+ * Display page index
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function html_index($ns){
+ require_once(DOKU_INC.'inc/search.php');
+ global $conf;
+ global $ID;
+ $dir = $conf['datadir'];
+ $ns = cleanID($ns);
+ #fixme use appropriate function
+ if(empty($ns)){
+ $ns = dirname(str_replace(':','/',$ID));
+ if($ns == '.') $ns ='';
+ }
+ $ns = utf8_encodeFN(str_replace(':','/',$ns));
+
+ echo p_locale_xhtml('index');
+ echo '<div id="index__tree">';
+
+ $data = array();
+ search($data,$conf['datadir'],'search_index',array('ns' => $ns));
+ echo html_buildlist($data,'idx','html_list_index','html_li_index');
+
+ echo '</div>';
+}
+
+/**
+ * Index item formatter
+ *
+ * User function for html_buildlist()
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function html_list_index($item){
+ global $ID;
+ $ret = '';
+ $base = ':'.$item['id'];
+ $base = substr($base,strrpos($base,':')+1);
+ if($item['type']=='d'){
+ $ret .= '<a href="'.wl($ID,'idx='.rawurlencode($item['id'])).'" class="idx_dir"><strong>';
+ $ret .= $base;
+ $ret .= '</strong></a>';
+ }else{
+ $ret .= html_wikilink(':'.$item['id']);
+ }
+ return $ret;
+}
+
+/**
+ * Index List item
+ *
+ * This user function is used in html_build_lidt to build the
+ * <li> tags for namespaces when displaying the page index
+ * it gives different classes to opened or closed "folders"
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function html_li_index($item){
+ if($item['type'] == "f"){
+ return '<li class="level'.$item['level'].'">';
+ }elseif($item['open']){
+ return '<li class="open">';
+ }else{
+ return '<li class="closed">';
+ }
+}
+
+/**
+ * Default List item
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function html_li_default($item){
+ return '<li class="level'.$item['level'].'">';
+}
+
+/**
+ * Build an unordered list
+ *
+ * Build an unordered list from the given $data array
+ * Each item in the array has to have a 'level' property
+ * the item itself gets printed by the given $func user
+ * function. The second and optional function is used to
+ * print the <li> tag. Both user function need to accept
+ * a single item.
+ *
+ * Both user functions can be given as array to point to
+ * a member of an object.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function html_buildlist($data,$class,$func,$lifunc='html_li_default'){
+ $level = 0;
+ $opens = 0;
+ $ret = '';
+
+ foreach ($data as $item){
+
+ if( $item['level'] > $level ){
+ //open new list
+ for($i=0; $i<($item['level'] - $level); $i++){
+ if ($i) $ret .= "<li class=\"clear\">\n";
+ $ret .= "\n<ul class=\"$class\">\n";
+ }
+ }elseif( $item['level'] < $level ){
+ //close last item
+ $ret .= "</li>\n";
+ for ($i=0; $i<($level - $item['level']); $i++){
+ //close higher lists
+ $ret .= "</ul>\n</li>\n";
+ }
+ }else{
+ //close last item
+ $ret .= "</li>\n";
+ }
+
+ //remember current level
+ $level = $item['level'];
+
+ //print item
+ $ret .= call_user_func($lifunc,$item);
+ $ret .= '<div class="li">';
+
+ $ret .= call_user_func($func,$item);
+ $ret .= '</div>';
+ }
+
+ //close remaining items and lists
+ for ($i=0; $i < $level; $i++){
+ $ret .= "</li></ul>\n";
+ }
+
+ return $ret;
+}
+
+/**
+ * display backlinks
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Michael Klier <chi@chimeric.de>
+ */
+function html_backlinks(){
+ require_once(DOKU_INC.'inc/fulltext.php');
+ global $ID;
+ global $conf;
+ global $lang;
+
+ print p_locale_xhtml('backlinks');
+
+ $data = ft_backlinks($ID);
+
+ if(!empty($data)) {
+ print '<ul class="idx">';
+ foreach($data as $blink){
+ print '<li><div class="li">';
+ print html_wikilink(':'.$blink,useHeading('navigation')?null:$blink);
+ print '</div></li>';
+ }
+ print '</ul>';
+ } else {
+ print '<div class="level1"><p>' . $lang['nothingfound'] . '</p></div>';
+ }
+}
+
+/**
+ * show diff
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function html_diff($text='',$intro=true){
+ require_once(DOKU_INC.'inc/DifferenceEngine.php');
+ global $ID;
+ global $REV;
+ global $lang;
+ global $conf;
+
+ // we're trying to be clever here, revisions to compare can be either
+ // given as rev and rev2 parameters, with rev2 being optional. Or in an
+ // array in rev2.
+ $rev1 = $REV;
+
+ if(is_array($_REQUEST['rev2'])){
+ $rev1 = (int) $_REQUEST['rev2'][0];
+ $rev2 = (int) $_REQUEST['rev2'][1];
+
+ if(!$rev1){
+ $rev1 = $rev2;
+ unset($rev2);
+ }
+ }else{
+ $rev2 = (int) $_REQUEST['rev2'];
+ }
+
+ if($text){ // compare text to the most current revision
+ $l_rev = '';
+ $l_text = rawWiki($ID,'');
+ $l_head = '<a class="wikilink1" href="'.wl($ID).'">'.
+ $ID.' '.dformat((int) @filemtime(wikiFN($ID))).'</a> '.
+ $lang['current'];
+
+ $r_rev = '';
+ $r_text = cleanText($text);
+ $r_head = $lang['yours'];
+ }else{
+ if($rev1 && $rev2){ // two specific revisions wanted
+ // make sure order is correct (older on the left)
+ if($rev1 < $rev2){
+ $l_rev = $rev1;
+ $r_rev = $rev2;
+ }else{
+ $l_rev = $rev2;
+ $r_rev = $rev1;
+ }
+ }elseif($rev1){ // single revision given, compare to current
+ $r_rev = '';
+ $l_rev = $rev1;
+ }else{ // no revision was given, compare previous to current
+ $r_rev = '';
+ $revs = getRevisions($ID, 0, 1);
+ $l_rev = $revs[0];
+ $REV = $l_rev; // store revision back in $REV
+ }
+
+ // when both revisions are empty then the page was created just now
+ if(!$l_rev && !$r_rev){
+ $l_text = '';
+ }else{
+ $l_text = rawWiki($ID,$l_rev);
+ }
+ $r_text = rawWiki($ID,$r_rev);
+
+ if(!$l_rev){
+ $l_head = '&mdash;';
+ }else{
+ $l_info = getRevisionInfo($ID,$l_rev,true);
+ if($l_info['user']){
+ $l_user = editorinfo($l_info['user']);
+ if(auth_ismanager()) $l_user .= ' ('.$l_info['ip'].')';
+ } else {
+ $l_user = $l_info['ip'];
+ }
+ $l_user = '<span class="user">'.$l_user.'</span>';
+ $l_sum = ($l_info['sum']) ? '<span class="sum">'.hsc($l_info['sum']).'</span>' : '';
+ if ($l_info['type']===DOKU_CHANGE_TYPE_MINOR_EDIT) $l_minor = 'class="minor"';
+
+ $l_head = '<a class="wikilink1" href="'.wl($ID,"rev=$l_rev").'">'.
+ $ID.' ['.dformat($l_rev).']</a>'.
+ '<br />'.$l_user.' '.$l_sum;
+ }
+
+ if($r_rev){
+ $r_info = getRevisionInfo($ID,$r_rev,true);
+ if($r_info['user']){
+ $r_user = editorinfo($r_info['user']);
+ if(auth_ismanager()) $r_user .= ' ('.$r_info['ip'].')';
+ } else {
+ $r_user = $r_info['ip'];
+ }
+ $r_user = '<span class="user">'.$r_user.'</span>';
+ $r_sum = ($r_info['sum']) ? '<span class="sum">'.hsc($r_info['sum']).'</span>' : '';
+ if ($r_info['type']===DOKU_CHANGE_TYPE_MINOR_EDIT) $r_minor = 'class="minor"';
+
+ $r_head = '<a class="wikilink1" href="'.wl($ID,"rev=$r_rev").'">'.
+ $ID.' ['.dformat($r_rev).']</a>'.
+ '<br />'.$r_user.' '.$r_sum;
+ }elseif($_rev = @filemtime(wikiFN($ID))){
+ $_info = getRevisionInfo($ID,$_rev,true);
+ if($_info['user']){
+ $_user = editorinfo($_info['user']);
+ if(auth_ismanager()) $_user .= ' ('.$_info['ip'].')';
+ } else {
+ $_user = $_info['ip'];
+ }
+ $_user = '<span class="user">'.$_user.'</span>';
+ $_sum = ($_info['sum']) ? '<span class="sum">'.hsc($_info['sum']).'</span>' : '';
+ if ($_info['type']===DOKU_CHANGE_TYPE_MINOR_EDIT) $r_minor = 'class="minor"';
+
+ $r_head = '<a class="wikilink1" href="'.wl($ID).'">'.
+ $ID.' ['.dformat($_rev).']</a> '.
+ '('.$lang['current'].')'.
+ '<br />'.$_user.' '.$_sum;
+ }else{
+ $r_head = '&mdash; ('.$lang['current'].')';
+ }
+ }
+
+ $df = new Diff(explode("\n",htmlspecialchars($l_text)),
+ explode("\n",htmlspecialchars($r_text)));
+
+ $tdf = new TableDiffFormatter();
+ if($intro) print p_locale_xhtml('diff');
+ ?>
+ <table class="diff">
+ <tr>
+ <th colspan="2" <?php echo $l_minor?>>
+ <?php echo $l_head?>
+ </th>
+ <th colspan="2" <?php echo $r_minor?>>
+ <?php echo $r_head?>
+ </th>
+ </tr>
+ <?php echo $tdf->format($df)?>
+ </table>
+ <?php
+}
+
+/**
+ * show warning on conflict detection
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function html_conflict($text,$summary){
+ global $ID;
+ global $lang;
+
+ print p_locale_xhtml('conflict');
+ $form = new Doku_Form(array('id' => 'dw__editform'));
+ $form->addHidden('id', $ID);
+ $form->addHidden('wikitext', $text);
+ $form->addHidden('summary', $summary);
+ $form->addElement(form_makeButton('submit', 'save', $lang['btn_save'], array('accesskey'=>'s')));
+ $form->addElement(form_makeButton('submit', 'cancel', $lang['btn_cancel']));
+ html_form('conflict', $form);
+ print '<br /><br /><br /><br />'.NL;
+}
+
+/**
+ * Prints the global message array
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function html_msgarea(){
+ global $MSG;
+ if(!isset($MSG)) return;
+
+ $shown = array();
+ foreach($MSG as $msg){
+ $hash = md5($msg['msg']);
+ if(isset($shown[$hash])) continue; // skip double messages
+ print '<div class="'.$msg['lvl'].'">';
+ print $msg['msg'];
+ print '</div>';
+ $shown[$hash] = 1;
+ }
+}
+
+/**
+ * Prints the registration form
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function html_register(){
+ global $lang;
+ global $conf;
+ global $ID;
+
+ print p_locale_xhtml('register');
+ print '<div class="centeralign">'.NL;
+ $form = new Doku_Form(array('id' => 'dw__register'));
+ $form->startFieldset($lang['register']);
+ $form->addHidden('do', 'register');
+ $form->addHidden('save', '1');
+ $form->addElement(form_makeTextField('login', $_POST['login'], $lang['user'], null, 'block', array('size'=>'50')));
+ if (!$conf['autopasswd']) {
+ $form->addElement(form_makePasswordField('pass', $lang['pass'], '', 'block', array('size'=>'50')));
+ $form->addElement(form_makePasswordField('passchk', $lang['passchk'], '', 'block', array('size'=>'50')));
+ }
+ $form->addElement(form_makeTextField('fullname', $_POST['fullname'], $lang['fullname'], '', 'block', array('size'=>'50')));
+ $form->addElement(form_makeTextField('email', $_POST['email'], $lang['email'], '', 'block', array('size'=>'50')));
+ $form->addElement(form_makeButton('submit', '', $lang['register']));
+ $form->endFieldset();
+ html_form('register', $form);
+
+ print '</div>'.NL;
+}
+
+/**
+ * Print the update profile form
+ *
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function html_updateprofile(){
+ global $lang;
+ global $conf;
+ global $ID;
+ global $INFO;
+ global $auth;
+
+ print p_locale_xhtml('updateprofile');
+
+ if (empty($_POST['fullname'])) $_POST['fullname'] = $INFO['userinfo']['name'];
+ if (empty($_POST['email'])) $_POST['email'] = $INFO['userinfo']['mail'];
+ print '<div class="centeralign">'.NL;
+ $form = new Doku_Form(array('id' => 'dw__register'));
+ $form->startFieldset($lang['profile']);
+ $form->addHidden('do', 'profile');
+ $form->addHidden('save', '1');
+ $form->addElement(form_makeTextField('fullname', $_SERVER['REMOTE_USER'], $lang['user'], '', 'block', array('size'=>'50', 'disabled'=>'disabled')));
+ $attr = array('size'=>'50');
+ if (!$auth->canDo('modName')) $attr['disabled'] = 'disabled';
+ $form->addElement(form_makeTextField('fullname', $_POST['fullname'], $lang['fullname'], '', 'block', $attr));
+ $attr = array('size'=>'50');
+ if (!$auth->canDo('modMail')) $attr['disabled'] = 'disabled';
+ $form->addElement(form_makeTextField('email', $_POST['email'], $lang['email'], '', 'block', $attr));
+ $form->addElement(form_makeTag('br'));
+ if ($auth->canDo('modPass')) {
+ $form->addElement(form_makePasswordField('newpass', $lang['newpass'], '', 'block', array('size'=>'50')));
+ $form->addElement(form_makePasswordField('passchk', $lang['passchk'], '', 'block', array('size'=>'50')));
+ }
+ if ($conf['profileconfirm']) {
+ $form->addElement(form_makeTag('br'));
+ $form->addElement(form_makePasswordField('oldpass', $lang['oldpass'], '', 'block', array('size'=>'50')));
+ }
+ $form->addElement(form_makeButton('submit', '', $lang['btn_save']));
+ $form->addElement(form_makeButton('reset', '', $lang['btn_reset']));
+ $form->endFieldset();
+ html_form('updateprofile', $form);
+ print '</div>'.NL;
+}
+
+/**
+ * This displays the edit form (lots of logic included)
+ *
+ * @fixme this is a huge lump of code and should be modularized
+ * @triggers HTML_PAGE_FROMTEMPLATE
+ * @triggers HTML_EDITFORM_INJECTION
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function html_edit($text=null,$include='edit'){ //FIXME: include needed?
+ global $ID;
+ global $REV;
+ global $DATE;
+ global $RANGE;
+ global $PRE;
+ global $SUF;
+ global $INFO;
+ global $SUM;
+ global $lang;
+ global $conf;
+ global $license;
+
+ //set summary default
+ if(!$SUM){
+ if($REV){
+ $SUM = $lang['restored'];
+ }elseif(!$INFO['exists']){
+ $SUM = $lang['created'];
+ }
+ }
+
+ //no text? Load it!
+ if(!isset($text)){
+ $pr = false; //no preview mode
+ if($INFO['exists']){
+ if($RANGE){
+ list($PRE,$text,$SUF) = rawWikiSlices($RANGE,$ID,$REV);
+ }else{
+ $text = rawWiki($ID,$REV);
+ }
+ $check = md5($text);
+ $mod = false;
+ }else{
+ //try to load a pagetemplate
+ $data = array($ID);
+ $text = trigger_event('HTML_PAGE_FROMTEMPLATE',$data,'pageTemplate',true);
+ $check = md5('');
+ $mod = $text!=='';
+ }
+ }else{
+ $pr = true; //preview mode
+ if (isset($_REQUEST['changecheck'])) {
+ $check = $_REQUEST['changecheck'];
+ $mod = md5($text)!==$check;
+ } else {
+ // Why? Assume default text is unmodified.
+ $check = md5($text);
+ $mod = false;
+ }
+ }
+
+ $wr = $INFO['writable'] && !$INFO['locked'];
+ if($wr){
+ if ($REV) print p_locale_xhtml('editrev');
+ print p_locale_xhtml($include);
+ }else{
+ // check pseudo action 'source'
+ if(!actionOK('source')){
+ msg('Command disabled: source',-1);
+ return;
+ }
+ print p_locale_xhtml('read');
+ }
+ if(!$DATE) $DATE = $INFO['lastmod'];
+ ?>
+ <div style="width:99%;">
+
+ <div class="toolbar">
+ <div id="draft__status"><?php if(!empty($INFO['draft'])) echo $lang['draftdate'].' '.dformat();?></div>
+ <div id="tool__bar"><?php if($wr){?><a href="<?php echo DOKU_BASE?>lib/exe/mediamanager.php?ns=<?php echo $INFO['namespace']?>"
+ target="_blank"><?php echo $lang['mediaselect'] ?></a><?php }?></div>
+
+ <?php if($wr){?>
+ <script type="text/javascript" charset="utf-8"><!--//--><![CDATA[//><!--
+ <?php /* sets changed to true when previewed */?>
+ textChanged = <?php ($mod) ? print 'true' : print 'false' ?>;
+ //--><!]]></script>
+ <?php } ?>
+ </div>
+ <?php
+ $form = new Doku_Form(array('id' => 'dw__editform'));
+ $form->addHidden('id', $ID);
+ $form->addHidden('rev', $REV);
+ $form->addHidden('date', $DATE);
+ $form->addHidden('prefix', $PRE);
+ $form->addHidden('suffix', $SUF);
+ $form->addHidden('changecheck', $check);
+ $attr = array('tabindex'=>'1');
+ if (!$wr) $attr['readonly'] = 'readonly';
+ $form->addElement(form_makeWikiText($text, $attr));
+ $form->addElement(form_makeOpenTag('div', array('id'=>'wiki__editbar')));
+ $form->addElement(form_makeOpenTag('div', array('id'=>'size__ctl')));
+ $form->addElement(form_makeCloseTag('div'));
+ if ($wr) {
+ $form->addElement(form_makeOpenTag('div', array('class'=>'editButtons')));
+ $form->addElement(form_makeButton('submit', 'save', $lang['btn_save'], array('id'=>'edbtn__save', 'accesskey'=>'s', 'tabindex'=>'4')));
+ $form->addElement(form_makeButton('submit', 'preview', $lang['btn_preview'], array('id'=>'edbtn__preview', 'accesskey'=>'p', 'tabindex'=>'5')));
+ $form->addElement(form_makeButton('submit', 'draftdel', $lang['btn_cancel'], array('tabindex'=>'6')));
+ $form->addElement(form_makeCloseTag('div'));
+ $form->addElement(form_makeOpenTag('div', array('class'=>'summary')));
+ $form->addElement(form_makeTextField('summary', $SUM, $lang['summary'], 'edit__summary', 'nowrap', array('size'=>'50', 'tabindex'=>'2')));
+ $elem = html_minoredit();
+ if ($elem) $form->addElement($elem);
+ $form->addElement(form_makeCloseTag('div'));
+ }
+ $form->addElement(form_makeCloseTag('div'));
+ if($wr && $conf['license']){
+ $form->addElement(form_makeOpenTag('div', array('class'=>'license')));
+ $out = $lang['licenseok'];
+ $out .= '<a href="'.$license[$conf['license']]['url'].'" rel="license" class="urlextern"';
+ if(isset($conf['target']['external'])) $out .= ' target="'.$conf['target']['external'].'"';
+ $out .= '> '.$license[$conf['license']]['name'].'</a>';
+ $form->addElement($out);
+ $form->addElement(form_makeCloseTag('div'));
+ }
+ html_form('edit', $form);
+ print '</div>'.NL;
+}
+
+/**
+ * Adds a checkbox for minor edits for logged in users
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function html_minoredit(){
+ global $conf;
+ global $lang;
+ // minor edits are for logged in users only
+ if(!$conf['useacl'] || !$_SERVER['REMOTE_USER']){
+ return false;
+ }
+
+ $p = array();
+ $p['tabindex'] = 3;
+ if(!empty($_REQUEST['minor'])) $p['checked']='checked';
+ return form_makeCheckboxField('minor', '1', $lang['minoredit'], 'minoredit', 'nowrap', $p);
+}
+
+/**
+ * prints some debug info
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function html_debug(){
+ global $conf;
+ global $lang;
+ global $auth;
+ global $INFO;
+
+ //remove sensitive data
+ $cnf = $conf;
+ debug_guard($cnf);
+ $nfo = $INFO;
+ debug_guard($nfo);
+ $ses = $_SESSION;
+ debug_guard($ses);
+
+ print '<html><body>';
+
+ print '<p>When reporting bugs please send all the following ';
+ print 'output as a mail to andi@splitbrain.org ';
+ print 'The best way to do this is to save this page in your browser</p>';
+
+ print '<b>$INFO:</b><pre>';
+ print_r($nfo);
+ print '</pre>';
+
+ print '<b>$_SERVER:</b><pre>';
+ print_r($_SERVER);
+ print '</pre>';
+
+ print '<b>$conf:</b><pre>';
+ print_r($cnf);
+ print '</pre>';
+
+ print '<b>DOKU_BASE:</b><pre>';
+ print DOKU_BASE;
+ print '</pre>';
+
+ print '<b>abs DOKU_BASE:</b><pre>';
+ print DOKU_URL;
+ print '</pre>';
+
+ print '<b>rel DOKU_BASE:</b><pre>';
+ print dirname($_SERVER['PHP_SELF']).'/';
+ print '</pre>';
+
+ print '<b>PHP Version:</b><pre>';
+ print phpversion();
+ print '</pre>';
+
+ print '<b>locale:</b><pre>';
+ print setlocale(LC_ALL,0);
+ print '</pre>';
+
+ print '<b>encoding:</b><pre>';
+ print $lang['encoding'];
+ print '</pre>';
+
+ if($auth){
+ print '<b>Auth backend capabilities:</b><pre>';
+ print_r($auth->cando);
+ print '</pre>';
+ }
+
+ print '<b>$_SESSION:</b><pre>';
+ print_r($ses);
+ print '</pre>';
+
+ print '<b>Environment:</b><pre>';
+ print_r($_ENV);
+ print '</pre>';
+
+ print '<b>PHP settings:</b><pre>';
+ $inis = ini_get_all();
+ print_r($inis);
+ print '</pre>';
+
+ print '</body></html>';
+}
+
+/**
+ * List available Administration Tasks
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author HÃ¥kan Sandell <hakan.sandell@home.se>
+ */
+function html_admin(){
+ global $ID;
+ global $INFO;
+ global $lang;
+ global $conf;
+ global $auth;
+
+ // build menu of admin functions from the plugins that handle them
+ $pluginlist = plugin_list('admin');
+ $menu = array();
+ foreach ($pluginlist as $p) {
+ if($obj =& plugin_load('admin',$p) === null) continue;
+
+ // check permissions
+ if($obj->forAdminOnly() && !$INFO['isadmin']) continue;
+
+ $menu[$p] = array('plugin' => $p,
+ 'prompt' => $obj->getMenuText($conf['lang']),
+ 'sort' => $obj->getMenuSort()
+ );
+ }
+
+ print p_locale_xhtml('admin');
+
+ // Admin Tasks
+ if($INFO['isadmin']){
+ ptln('<ul class="admin_tasks">');
+
+ if($menu['usermanager'] && $auth && $auth->canDo('getUsers')){
+ ptln(' <li class="admin_usermanager"><div class="li">'.
+ '<a href="'.wl($ID, array('do' => 'admin','dokupage' => 'usermanager')).'">'.
+ $menu['usermanager']['prompt'].'</a></div></li>');
+ }
+ unset($menu['usermanager']);
+
+ if($menu['acl']){
+ ptln(' <li class="admin_acl"><div class="li">'.
+ '<a href="'.wl($ID, array('do' => 'admin','dokupage' => 'acl')).'">'.
+ $menu['acl']['prompt'].'</a></div></li>');
+ }
+ unset($menu['acl']);
+
+ if($menu['plugin']){
+ ptln(' <li class="admin_plugin"><div class="li">'.
+ '<a href="'.wl($ID, array('do' => 'admin','dokupage' => 'plugin')).'">'.
+ $menu['plugin']['prompt'].'</a></div></li>');
+ }
+ unset($menu['plugin']);
+
+ if($menu['config']){
+ ptln(' <li class="admin_config"><div class="li">'.
+ '<a href="'.wl($ID, array('do' => 'admin','dokupage' => 'config')).'">'.
+ $menu['config']['prompt'].'</a></div></li>');
+ }
+ unset($menu['config']);
+ }
+ ptln('</ul>');
+
+ // Manager Tasks
+ ptln('<ul class="admin_tasks">');
+
+ if($menu['revert']){
+ ptln(' <li class="admin_revert"><div class="li">'.
+ '<a href="'.wl($ID, array('do' => 'admin','dokupage' => 'revert')).'">'.
+ $menu['revert']['prompt'].'</a></div></li>');
+ }
+ unset($menu['revert']);
+
+ if($menu['popularity']){
+ ptln(' <li class="admin_popularity"><div class="li">'.
+ '<a href="'.wl($ID, array('do' => 'admin','dokupage' => 'popularity')).'">'.
+ $menu['popularity']['prompt'].'</a></div></li>');
+ }
+ unset($menu['popularity']);
+
+ ptln('</ul>');
+
+ // print the rest as sorted list
+ if(count($menu)){
+ usort($menu, 'p_sort_modes');
+ // output the menu
+ ptln('<div class="clearer"></div>');
+ print p_locale_xhtml('adminplugins');
+ ptln('<ul>');
+ foreach ($menu as $item) {
+ if (!$item['prompt']) continue;
+ ptln(' <li><div class="li"><a href="'.wl($ID, 'do=admin&amp;dokupage='.$item['plugin']).'">'.$item['prompt'].'</a></div></li>');
+ }
+ ptln('</ul>');
+ }
+}
+
+/**
+ * Form to request a new password for an existing account
+ *
+ * @author Benoit Chesneau <benoit@bchesneau.info>
+ */
+function html_resendpwd() {
+ global $lang;
+ global $conf;
+ global $ID;
+
+ print p_locale_xhtml('resendpwd');
+ print '<div class="centeralign">'.NL;
+ $form = new Doku_Form(array('id' => 'dw__resendpwd'));
+ $form->startFieldset($lang['resendpwd']);
+ $form->addHidden('do', 'resendpwd');
+ $form->addHidden('save', '1');
+ $form->addElement(form_makeTag('br'));
+ $form->addElement(form_makeTextField('login', $_POST['login'], $lang['user'], '', 'block'));
+ $form->addElement(form_makeTag('br'));
+ $form->addElement(form_makeTag('br'));
+ $form->addElement(form_makeButton('submit', '', $lang['btn_resendpwd']));
+ $form->endFieldset();
+ html_form('resendpwd', $form);
+ print '</div>'.NL;
+}
+
+/**
+ * Return the TOC rendered to XHTML
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function html_TOC($toc){
+ if(!count($toc)) return '';
+ global $lang;
+ $out = '<!-- TOC START -->'.DOKU_LF;
+ $out .= '<div class="toc">'.DOKU_LF;
+ $out .= '<div class="tocheader toctoggle" id="toc__header">';
+ $out .= $lang['toc'];
+ $out .= '</div>'.DOKU_LF;
+ $out .= '<div id="toc__inside">'.DOKU_LF;
+ $out .= html_buildlist($toc,'toc','html_list_toc');
+ $out .= '</div>'.DOKU_LF.'</div>'.DOKU_LF;
+ $out .= '<!-- TOC END -->'.DOKU_LF;
+ return $out;
+}
+
+/**
+ * Callback for html_buildlist
+ */
+function html_list_toc($item){
+ if(isset($item['hid'])){
+ $link = '#'.$item['hid'];
+ }else{
+ $link = $item['link'];
+ }
+
+ return '<span class="li"><a href="'.$link.'" class="toc">'.
+ hsc($item['title']).'</a></span>';
+}
+
+/**
+ * Helper function to build TOC items
+ *
+ * Returns an array ready to be added to a TOC array
+ *
+ * @param string $link - where to link (if $hash set to '#' it's a local anchor)
+ * @param string $text - what to display in the TOC
+ * @param int $level - nesting level
+ * @param string $hash - is prepended to the given $link, set blank if you want full links
+ */
+function html_mktocitem($link, $text, $level, $hash='#'){
+ global $conf;
+ return array( 'link' => $hash.$link,
+ 'title' => $text,
+ 'type' => 'ul',
+ 'level' => $level);
+}
+
+/**
+ * Output a Doku_Form object.
+ * Triggers an event with the form name: HTML_{$name}FORM_OUTPUT
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function html_form($name, &$form) {
+ // Safety check in case the caller forgets.
+ $form->endFieldset();
+ trigger_event('HTML_'.strtoupper($name).'FORM_OUTPUT', $form, 'html_form_output', false);
+}
+
+/**
+ * Form print function.
+ * Just calls printForm() on the data object.
+ */
+function html_form_output($data) {
+ $data->printForm();
+}
+
+/**
+ * Embed a flash object in HTML
+ *
+ * This will create the needed HTML to embed a flash movie in a cross browser
+ * compatble way using valid XHTML
+ *
+ * The parameters $params, $flashvars and $atts need to be associative arrays.
+ * No escaping needs to be done for them. The alternative content *has* to be
+ * escaped because it is used as is. If no alternative content is given
+ * $lang['noflash'] is used.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @link http://latrine.dgx.cz/how-to-correctly-insert-a-flash-into-xhtml
+ *
+ * @param string $swf - the SWF movie to embed
+ * @param int $width - width of the flash movie in pixels
+ * @param int $height - height of the flash movie in pixels
+ * @param array $params - additional parameters (<param>)
+ * @param array $flashvars - parameters to be passed in the flashvar parameter
+ * @param array $atts - additional attributes for the <object> tag
+ * @param string $alt - alternative content (is NOT automatically escaped!)
+ * @returns string - the XHTML markup
+ */
+function html_flashobject($swf,$width,$height,$params=null,$flashvars=null,$atts=null,$alt=''){
+ global $lang;
+
+ $out = '';
+
+ // prepare the object attributes
+ if(is_null($atts)) $atts = array();
+ $atts['width'] = (int) $width;
+ $atts['height'] = (int) $height;
+ if(!$atts['width']) $atts['width'] = 425;
+ if(!$atts['height']) $atts['height'] = 350;
+
+ // add object attributes for standard compliant browsers
+ $std = $atts;
+ $std['type'] = 'application/x-shockwave-flash';
+ $std['data'] = $swf;
+
+ // add object attributes for IE
+ $ie = $atts;
+ $ie['classid'] = 'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000';
+
+ // open object (with conditional comments)
+ $out .= '<!--[if !IE]> -->'.NL;
+ $out .= '<object '.buildAttributes($std).'>'.NL;
+ $out .= '<!-- <![endif]-->'.NL;
+ $out .= '<!--[if IE]>'.NL;
+ $out .= '<object '.buildAttributes($ie).'>'.NL;
+ $out .= ' <param name="movie" value="'.hsc($swf).'" />'.NL;
+ $out .= '<!--><!-- -->'.NL;
+
+ // print params
+ if(is_array($params)) foreach($params as $key => $val){
+ $out .= ' <param name="'.hsc($key).'" value="'.hsc($val).'" />'.NL;
+ }
+
+ // add flashvars
+ if(is_array($flashvars)){
+ $out .= ' <param name="FlashVars" value="'.buildURLparams($flashvars).'" />'.NL;
+ }
+
+ // alternative content
+ if($alt){
+ $out .= $alt.NL;
+ }else{
+ $out .= $lang['noflash'].NL;
+ }
+
+ // finish
+ $out .= '</object>'.NL;
+ $out .= '<!-- <![endif]-->'.NL;
+
+ return $out;
+}
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/httputils.php b/mod/dokuwiki/vendors/dokuwiki/inc/httputils.php
new file mode 100644
index 000000000..324a730b9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/httputils.php
@@ -0,0 +1,199 @@
+<?php
+/**
+ * Utilities for handling HTTP related tasks
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+define('HTTP_MULTIPART_BOUNDARY','D0KuW1K1B0uNDARY');
+define('HTTP_HEADER_LF',"\r\n");
+define('HTTP_CHUNK_SIZE',16*1024);
+
+/**
+ * Checks and sets HTTP headers for conditional HTTP requests
+ *
+ * @author Simon Willison <swillison@gmail.com>
+ * @link http://simon.incutio.com/archive/2003/04/23/conditionalGet
+ * @param timestamp $timestamp lastmodified time of the cache file
+ * @returns void or exits with previously header() commands executed
+ */
+function http_conditionalRequest($timestamp){
+ // A PHP implementation of conditional get, see
+ // http://fishbowl.pastiche.org/archives/001132.html
+ $last_modified = substr(gmdate('r', $timestamp), 0, -5).'GMT';
+ $etag = '"'.md5($last_modified).'"';
+ // Send the headers
+ header("Last-Modified: $last_modified");
+ header("ETag: $etag");
+ // See if the client has provided the required headers
+ if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])){
+ $if_modified_since = stripslashes($_SERVER['HTTP_IF_MODIFIED_SINCE']);
+ }else{
+ $if_modified_since = false;
+ }
+
+ if (isset($_SERVER['HTTP_IF_NONE_MATCH'])){
+ $if_none_match = stripslashes($_SERVER['HTTP_IF_NONE_MATCH']);
+ }else{
+ $if_none_match = false;
+ }
+
+ if (!$if_modified_since && !$if_none_match){
+ return;
+ }
+
+ // At least one of the headers is there - check them
+ if ($if_none_match && $if_none_match != $etag) {
+ return; // etag is there but doesn't match
+ }
+
+ if ($if_modified_since && $if_modified_since != $last_modified) {
+ return; // if-modified-since is there but doesn't match
+ }
+
+ // Nothing has changed since their last request - serve a 304 and exit
+ header('HTTP/1.0 304 Not Modified');
+
+ // don't produce output, even if compression is on
+ @ob_end_clean();
+ exit;
+}
+
+/**
+ * Let the webserver send the given file vi x-sendfile method
+ *
+ * @author Chris Smith <chris.eureka@jalakai.co.uk>
+ * @returns void or exits with previously header() commands executed
+ */
+function http_sendfile($file) {
+ global $conf;
+
+ //use x-sendfile header to pass the delivery to compatible webservers
+ if($conf['xsendfile'] == 1){
+ header("X-LIGHTTPD-send-file: $file");
+ ob_end_clean();
+ exit;
+ }elseif($conf['xsendfile'] == 2){
+ header("X-Sendfile: $file");
+ ob_end_clean();
+ exit;
+ }elseif($conf['xsendfile'] == 3){
+ header("X-Accel-Redirect: $file");
+ ob_end_clean();
+ exit;
+ }
+
+ return false;
+}
+
+/**
+ * Send file contents supporting rangeRequests
+ *
+ * This function exits the running script
+ *
+ * @param ressource $fh - file handle for an already open file
+ * @param int $size - size of the whole file
+ * @param int $mime - MIME type of the file
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function http_rangeRequest($fh,$size,$mime){
+ $ranges = array();
+ $isrange = false;
+
+ header('Accept-Ranges: bytes');
+
+ if(!isset($_SERVER['HTTP_RANGE'])){
+ // no range requested - send the whole file
+ $ranges[] = array(0,$size,$size);
+ }else{
+ $t = explode('=', $_SERVER['HTTP_RANGE']);
+ if (!$t[0]=='bytes') {
+ // we only understand byte ranges - send the whole file
+ $ranges[] = array(0,$size,$size);
+ }else{
+ $isrange = true;
+ // handle multiple ranges
+ $r = explode(',',$t[1]);
+ foreach($r as $x){
+ $p = explode('-', $x);
+ $start = (int)$p[0];
+ $end = (int)$p[1];
+ if (!$end) $end = $size - 1;
+ if ($start > $end || $start > $size || $end > $size){
+ header('HTTP/1.1 416 Requested Range Not Satisfiable');
+ print 'Bad Range Request!';
+ exit;
+ }
+ $len = $end - $start + 1;
+ $ranges[] = array($start,$end,$len);
+ }
+ }
+ }
+ $parts = count($ranges);
+
+ // now send the type and length headers
+ if(!$isrange){
+ header("Content-Type: $mime",true);
+ }else{
+ header('HTTP/1.1 206 Partial Content');
+ if($parts == 1){
+ header("Content-Type: $mime",true);
+ }else{
+ header('Content-Type: multipart/byteranges; boundary='.HTTP_MULTIPART_BOUNDARY,true);
+ }
+ }
+
+ // send all ranges
+ for($i=0; $i<$parts; $i++){
+ list($start,$end,$len) = $ranges[$i];
+
+ // multipart or normal headers
+ if($parts > 1){
+ echo HTTP_HEADER_LF.'--'.HTTP_MULTIPART_BOUNDARY.HTTP_HEADER_LF;
+ echo "Content-Type: $mime".HTTP_HEADER_LF;
+ echo "Content-Range: bytes $start-$end/$size".HTTP_HEADER_LF;
+ echo HTTP_HEADER_LF;
+ }else{
+ header("Content-Length: $len");
+ if($isrange){
+ header("Content-Range: bytes $start-$end/$size");
+ }
+ }
+
+ // send file content
+ fseek($fh,$start); //seek to start of range
+ $chunk = ($len > HTTP_CHUNK_SIZE) ? HTTP_CHUNK_SIZE : $len;
+ while (!feof($fh) && $chunk > 0) {
+ @set_time_limit(30); // large files can take a lot of time
+ print fread($fh, $chunk);
+ flush();
+ $len -= $chunk;
+ $chunk = ($len > HTTP_CHUNK_SIZE) ? HTTP_CHUNK_SIZE : $len;
+ }
+ }
+ if($parts > 1){
+ echo HTTP_HEADER_LF.'--'.HTTP_MULTIPART_BOUNDARY.'--'.HTTP_HEADER_LF;
+ }
+
+ // everything should be done here, exit
+ exit;
+}
+
+/**
+ * Check for a gzipped version and create if necessary
+ *
+ * return true if there exists a gzip version of the uncompressed file
+ * (samepath/samefilename.sameext.gz) created after the uncompressed file
+ *
+ * @author Chris Smith <chris.eureka@jalakai.co.uk>
+ */
+function http_gzip_valid($uncompressed_file) {
+ $gzip = $uncompressed_file.'.gz';
+ if (filemtime($gzip) < filemtime($uncompressed_file)) { // filemtime returns false (0) if file doesn't exist
+ return copy($uncompressed_file, 'compress.zlib://'.$gzip);
+ }
+
+ return true;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/indexer.php b/mod/dokuwiki/vendors/dokuwiki/inc/indexer.php
new file mode 100644
index 000000000..14af579bb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/indexer.php
@@ -0,0 +1,705 @@
+<?php
+/**
+ * Common DokuWiki functions
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+if(!defined('DOKU_INC')) die('meh.');
+require_once(DOKU_INC.'inc/io.php');
+require_once(DOKU_INC.'inc/utf8.php');
+require_once(DOKU_INC.'inc/parserutils.php');
+
+// set the minimum token length to use in the index (note, this doesn't apply to numeric tokens)
+if (!defined('IDX_MINWORDLENGTH')) define('IDX_MINWORDLENGTH',2);
+
+// Asian characters are handled as words. The following regexp defines the
+// Unicode-Ranges for Asian characters
+// Ranges taken from http://en.wikipedia.org/wiki/Unicode_block
+// I'm no language expert. If you think some ranges are wrongly chosen or
+// a range is missing, please contact me
+define('IDX_ASIAN1','[\x{0E00}-\x{0E7F}]'); // Thai
+define('IDX_ASIAN2','['.
+ '\x{2E80}-\x{3040}'. // CJK -> Hangul
+ '\x{309D}-\x{30A0}'.
+ '\x{30FD}-\x{31EF}\x{3200}-\x{D7AF}'.
+ '\x{F900}-\x{FAFF}'. // CJK Compatibility Ideographs
+ '\x{FE30}-\x{FE4F}'. // CJK Compatibility Forms
+ ']');
+define('IDX_ASIAN3','['. // Hiragana/Katakana (can be two characters)
+ '\x{3042}\x{3044}\x{3046}\x{3048}'.
+ '\x{304A}-\x{3062}\x{3064}-\x{3082}'.
+ '\x{3084}\x{3086}\x{3088}-\x{308D}'.
+ '\x{308F}-\x{3094}'.
+ '\x{30A2}\x{30A4}\x{30A6}\x{30A8}'.
+ '\x{30AA}-\x{30C2}\x{30C4}-\x{30E2}'.
+ '\x{30E4}\x{30E6}\x{30E8}-\x{30ED}'.
+ '\x{30EF}-\x{30F4}\x{30F7}-\x{30FA}'.
+ ']['.
+ '\x{3041}\x{3043}\x{3045}\x{3047}\x{3049}'.
+ '\x{3063}\x{3083}\x{3085}\x{3087}\x{308E}\x{3095}-\x{309C}'.
+ '\x{30A1}\x{30A3}\x{30A5}\x{30A7}\x{30A9}'.
+ '\x{30C3}\x{30E3}\x{30E5}\x{30E7}\x{30EE}\x{30F5}\x{30F6}\x{30FB}\x{30FC}'.
+ '\x{31F0}-\x{31FF}'.
+ ']?');
+define('IDX_ASIAN', '(?:'.IDX_ASIAN1.'|'.IDX_ASIAN2.'|'.IDX_ASIAN3.')');
+
+/**
+ * Measure the length of a string.
+ * Differs from strlen in handling of asian characters.
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function wordlen($w){
+ $l = strlen($w);
+ // If left alone, all chinese "words" will get put into w3.idx
+ // So the "length" of a "word" is faked
+ if(preg_match('/'.IDX_ASIAN2.'/u',$w))
+ $l += ord($w) - 0xE1; // Lead bytes from 0xE2-0xEF
+ return $l;
+}
+
+/**
+ * Write a list of strings to an index file.
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function idx_saveIndex($pre, $wlen, &$idx){
+ global $conf;
+ $fn = $conf['indexdir'].'/'.$pre.$wlen;
+ $fh = @fopen($fn.'.tmp','w');
+ if(!$fh) return false;
+ foreach ($idx as $line) {
+ fwrite($fh,$line);
+ }
+ fclose($fh);
+ if(isset($conf['fperm'])) chmod($fn.'.tmp', $conf['fperm']);
+ io_rename($fn.'.tmp', $fn.'.idx');
+ return true;
+}
+
+/**
+ * Append a given line to an index file.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function idx_appendIndex($pre, $wlen, $line){
+ global $conf;
+ $fn = $conf['indexdir'].'/'.$pre.$wlen;
+ $fh = @fopen($fn.'.idx','a');
+ if(!$fh) return false;
+ fwrite($fh,$line);
+ fclose($fh);
+ return true;
+}
+
+/**
+ * Read the list of words in an index (if it exists).
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function idx_getIndex($pre, $wlen){
+ global $conf;
+ $fn = $conf['indexdir'].'/'.$pre.$wlen.'.idx';
+ if(!@file_exists($fn)) return array();
+ return file($fn);
+}
+
+/**
+ * Create an empty index file if it doesn't exist yet.
+ *
+ * FIXME: This function isn't currently used. It will probably be removed soon.
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function idx_touchIndex($pre, $wlen){
+ global $conf;
+ $fn = $conf['indexdir'].'/'.$pre.$wlen.'.idx';
+ if(!@file_exists($fn)){
+ touch($fn);
+ if($conf['fperm']) chmod($fn, $conf['fperm']);
+ }
+}
+
+/**
+ * Read a line ending with \n.
+ * Returns false on EOF.
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function _freadline($fh) {
+ if (feof($fh)) return false;
+ $ln = '';
+ while (($buf = fgets($fh,4096)) !== false) {
+ $ln .= $buf;
+ if (substr($buf,-1) == "\n") break;
+ }
+ if ($ln === '') return false;
+ if (substr($ln,-1) != "\n") $ln .= "\n";
+ return $ln;
+}
+
+/**
+ * Write a line to an index file.
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function idx_saveIndexLine($pre, $wlen, $idx, $line){
+ global $conf;
+ if(substr($line,-1) != "\n") $line .= "\n";
+ $fn = $conf['indexdir'].'/'.$pre.$wlen;
+ $fh = @fopen($fn.'.tmp','w');
+ if(!$fh) return false;
+ $ih = @fopen($fn.'.idx','r');
+ if ($ih) {
+ $ln = -1;
+ while (($curline = _freadline($ih)) !== false) {
+ if (++$ln == $idx) {
+ fwrite($fh, $line);
+ } else {
+ fwrite($fh, $curline);
+ }
+ }
+ if ($idx > $ln) {
+ fwrite($fh,$line);
+ }
+ fclose($ih);
+ } else {
+ fwrite($fh,$line);
+ }
+ fclose($fh);
+ if($conf['fperm']) chmod($fn.'.tmp', $conf['fperm']);
+ io_rename($fn.'.tmp', $fn.'.idx');
+ return true;
+}
+
+/**
+ * Read a single line from an index (if it exists).
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function idx_getIndexLine($pre, $wlen, $idx){
+ global $conf;
+ $fn = $conf['indexdir'].'/'.$pre.$wlen.'.idx';
+ if(!@file_exists($fn)) return '';
+ $fh = @fopen($fn,'r');
+ if(!$fh) return '';
+ $ln = -1;
+ while (($line = _freadline($fh)) !== false) {
+ if (++$ln == $idx) break;
+ }
+ fclose($fh);
+ return "$line";
+}
+
+/**
+ * Split a page into words
+ *
+ * Returns an array of word counts, false if an error occurred.
+ * Array is keyed on the word length, then the word index.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ */
+function idx_getPageWords($page){
+ global $conf;
+ $swfile = DOKU_INC.'inc/lang/'.$conf['lang'].'/stopwords.txt';
+ if(@file_exists($swfile)){
+ $stopwords = file($swfile);
+ }else{
+ $stopwords = array();
+ }
+
+ $body = '';
+ $data = array($page, $body);
+ $evt = new Doku_Event('INDEXER_PAGE_ADD', $data);
+ if ($evt->advise_before()) $data[1] .= rawWiki($page);
+ $evt->advise_after();
+ unset($evt);
+
+ list($page,$body) = $data;
+
+ $body = strtr($body, "\r\n\t", ' ');
+ $tokens = explode(' ', $body);
+ $tokens = array_count_values($tokens); // count the frequency of each token
+
+ // ensure the deaccented or romanised page names of internal links are added to the token array
+ // (this is necessary for the backlink function -- there maybe a better way!)
+ if ($conf['deaccent']) {
+ $links = p_get_metadata($page,'relation references');
+
+ if (!empty($links)) {
+ $tmp = join(' ',array_keys($links)); // make a single string
+ $tmp = strtr($tmp, ':', ' '); // replace namespace separator with a space
+ $link_tokens = array_unique(explode(' ', $tmp)); // break into tokens
+
+ foreach ($link_tokens as $link_token) {
+ if (isset($tokens[$link_token])) continue;
+ $tokens[$link_token] = 1;
+ }
+ }
+ }
+
+ $words = array();
+ foreach ($tokens as $word => $count) {
+ $arr = idx_tokenizer($word,$stopwords);
+ $arr = array_count_values($arr);
+ foreach ($arr as $w => $c) {
+ $l = wordlen($w);
+ if(isset($words[$l])){
+ $words[$l][$w] = $c * $count + (isset($words[$l][$w]) ? $words[$l][$w] : 0);
+ }else{
+ $words[$l] = array($w => $c * $count);
+ }
+ }
+ }
+
+ // arrive here with $words = array(wordlen => array(word => frequency))
+
+ $index = array(); //resulting index
+ foreach (array_keys($words) as $wlen){
+ $word_idx = idx_getIndex('w',$wlen);
+ foreach ($words[$wlen] as $word => $freq) {
+ $wid = array_search("$word\n",$word_idx);
+ if(!is_int($wid)){
+ $wid = count($word_idx);
+ $word_idx[] = "$word\n";
+ }
+ if(!isset($index[$wlen]))
+ $index[$wlen] = array();
+ $index[$wlen][$wid] = $freq;
+ }
+
+ // save back word index
+ if(!idx_saveIndex('w',$wlen,$word_idx)){
+ trigger_error("Failed to write word index", E_USER_ERROR);
+ return false;
+ }
+ }
+
+ return $index;
+}
+
+/**
+ * Adds/updates the search for the given page
+ *
+ * This is the core function of the indexer which does most
+ * of the work. This function needs to be called with proper
+ * locking!
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function idx_addPage($page){
+ global $conf;
+
+ // load known documents
+ $page_idx = idx_getIndex('page','');
+
+ // get page id (this is the linenumber in page.idx)
+ $pid = array_search("$page\n",$page_idx);
+ if(!is_int($pid)){
+ $pid = count($page_idx);
+ // page was new - write back
+ if (!idx_appendIndex('page','',"$page\n")){
+ trigger_error("Failed to write page index", E_USER_ERROR);
+ return false;
+ }
+ }
+ unset($page_idx); // free memory
+
+ $pagewords = array();
+ // get word usage in page
+ $words = idx_getPageWords($page);
+ if($words === false) return false;
+
+ if(!empty($words)) {
+ foreach(array_keys($words) as $wlen){
+ $index = idx_getIndex('i',$wlen);
+ foreach($words[$wlen] as $wid => $freq){
+ if($wid<count($index)){
+ $index[$wid] = idx_updateIndexLine($index[$wid],$pid,$freq);
+ }else{
+ // New words **should** have been added in increasing order
+ // starting with the first unassigned index.
+ // If someone can show how this isn't true, then I'll need to sort
+ // or do something special.
+ $index[$wid] = idx_updateIndexLine('',$pid,$freq);
+ }
+ $pagewords[] = "$wlen*$wid";
+ }
+ // save back word index
+ if(!idx_saveIndex('i',$wlen,$index)){
+ trigger_error("Failed to write index", E_USER_ERROR);
+ return false;
+ }
+ }
+ }
+
+ // Remove obsolete index entries
+ $pageword_idx = trim(idx_getIndexLine('pageword','',$pid));
+ if ($pageword_idx !== '') {
+ $oldwords = explode(':',$pageword_idx);
+ $delwords = array_diff($oldwords, $pagewords);
+ $upwords = array();
+ foreach ($delwords as $word) {
+ if($word=='') continue;
+ list($wlen,$wid) = explode('*',$word);
+ $wid = (int)$wid;
+ $upwords[$wlen][] = $wid;
+ }
+ foreach ($upwords as $wlen => $widx) {
+ $index = idx_getIndex('i',$wlen);
+ foreach ($widx as $wid) {
+ $index[$wid] = idx_updateIndexLine($index[$wid],$pid,0);
+ }
+ idx_saveIndex('i',$wlen,$index);
+ }
+ }
+ // Save the reverse index
+ $pageword_idx = join(':',$pagewords)."\n";
+ if(!idx_saveIndexLine('pageword','',$pid,$pageword_idx)){
+ trigger_error("Failed to write word index", E_USER_ERROR);
+ return false;
+ }
+
+ return true;
+}
+
+/**
+ * Write a new index line to the filehandle
+ *
+ * This function writes an line for the index file to the
+ * given filehandle. It removes the given document from
+ * the given line and readds it when $count is >0.
+ *
+ * @deprecated - see idx_updateIndexLine
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function idx_writeIndexLine($fh,$line,$pid,$count){
+ fwrite($fh,idx_updateIndexLine($line,$pid,$count));
+}
+
+/**
+ * Modify an index line with new information
+ *
+ * This returns a line of the index. It removes the
+ * given document from the line and readds it if
+ * $count is >0.
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function idx_updateIndexLine($line,$pid,$count){
+ $line = trim($line);
+ $updated = array();
+ if($line != ''){
+ $parts = explode(':',$line);
+ // remove doc from given line
+ foreach($parts as $part){
+ if($part == '') continue;
+ list($doc,$cnt) = explode('*',$part);
+ if($doc != $pid){
+ $updated[] = $part;
+ }
+ }
+ }
+
+ // add doc
+ if ($count){
+ $updated[] = "$pid*$count";
+ }
+
+ return join(':',$updated)."\n";
+}
+
+/**
+ * Get the word lengths that have been indexed.
+ *
+ * Reads the index directory and returns an array of lengths
+ * that there are indices for.
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function idx_indexLengths(&$filter){
+ global $conf;
+ $dir = @opendir($conf['indexdir']);
+ if($dir===false)
+ return array();
+ $idx = array();
+ if(is_array($filter)){
+ while (($f = readdir($dir)) !== false) {
+ if (substr($f,0,1) == 'i' && substr($f,-4) == '.idx'){
+ $i = substr($f,1,-4);
+ if (is_numeric($i) && isset($filter[(int)$i]))
+ $idx[] = (int)$i;
+ }
+ }
+ }else{
+ // Exact match first.
+ if(@file_exists($conf['indexdir']."/i$filter.idx"))
+ $idx[] = $filter;
+ while (($f = readdir($dir)) !== false) {
+ if (substr($f,0,1) == 'i' && substr($f,-4) == '.idx'){
+ $i = substr($f,1,-4);
+ if (is_numeric($i) && $i > $filter)
+ $idx[] = (int)$i;
+ }
+ }
+ }
+ closedir($dir);
+ return $idx;
+}
+
+/**
+ * Find the the index number of each search term.
+ *
+ * This will group together words that appear in the same index.
+ * So it should perform better, because it only opens each index once.
+ * Actually, it's not that great. (in my experience) Probably because of the disk cache.
+ * And the sorted function does more work, making it slightly slower in some cases.
+ *
+ * @param array $words The query terms. Words should only contain valid characters,
+ * with a '*' at either the beginning or end of the word (or both)
+ * @param arrayref $result Set to word => array("length*id" ...), use this to merge the
+ * index locations with the appropriate query term.
+ * @return array Set to length => array(id ...)
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function idx_getIndexWordsSorted($words,&$result){
+ // parse and sort tokens
+ $tokens = array();
+ $tokenlength = array();
+ $tokenwild = array();
+ foreach($words as $word){
+ $result[$word] = array();
+ $wild = 0;
+ $xword = $word;
+ $wlen = wordlen($word);
+
+ // check for wildcards
+ if(substr($xword,0,1) == '*'){
+ $xword = substr($xword,1);
+ $wild |= 1;
+ $wlen -= 1;
+ }
+ if(substr($xword,-1,1) == '*'){
+ $xword = substr($xword,0,-1);
+ $wild |= 2;
+ $wlen -= 1;
+ }
+ if ($wlen < IDX_MINWORDLENGTH && $wild == 0 && !is_numeric($xword)) continue;
+ if(!isset($tokens[$xword])){
+ $tokenlength[$wlen][] = $xword;
+ }
+ if($wild){
+ $ptn = preg_quote($xword,'/');
+ if(($wild&1) == 0) $ptn = '^'.$ptn;
+ if(($wild&2) == 0) $ptn = $ptn.'$';
+ $tokens[$xword][] = array($word, '/'.$ptn.'/');
+ if(!isset($tokenwild[$xword])) $tokenwild[$xword] = $wlen;
+ }else
+ $tokens[$xword][] = array($word, null);
+ }
+ asort($tokenwild);
+ // $tokens = array( base word => array( [ query word , grep pattern ] ... ) ... )
+ // $tokenlength = array( base word length => base word ... )
+ // $tokenwild = array( base word => base word length ... )
+
+ $length_filter = empty($tokenwild) ? $tokenlength : min(array_keys($tokenlength));
+ $indexes_known = idx_indexLengths($length_filter);
+ if(!empty($tokenwild)) sort($indexes_known);
+ // get word IDs
+ $wids = array();
+ foreach($indexes_known as $ixlen){
+ $word_idx = idx_getIndex('w',$ixlen);
+ // handle exact search
+ if(isset($tokenlength[$ixlen])){
+ foreach($tokenlength[$ixlen] as $xword){
+ $wid = array_search("$xword\n",$word_idx);
+ if(is_int($wid)){
+ $wids[$ixlen][] = $wid;
+ foreach($tokens[$xword] as $w)
+ $result[$w[0]][] = "$ixlen*$wid";
+ }
+ }
+ }
+ // handle wildcard search
+ foreach($tokenwild as $xword => $wlen){
+ if($wlen >= $ixlen) break;
+ foreach($tokens[$xword] as $w){
+ if(is_null($w[1])) continue;
+ foreach(array_keys(preg_grep($w[1],$word_idx)) as $wid){
+ $wids[$ixlen][] = $wid;
+ $result[$w[0]][] = "$ixlen*$wid";
+ }
+ }
+ }
+ }
+ return $wids;
+}
+
+/**
+ * Lookup words in index
+ *
+ * Takes an array of word and will return a list of matching
+ * documents for each one.
+ *
+ * Important: No ACL checking is done here! All results are
+ * returned, regardless of permissions
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function idx_lookup($words){
+ global $conf;
+
+ $result = array();
+
+ $wids = idx_getIndexWordsSorted($words, $result);
+ if(empty($wids)) return array();
+
+ // load known words and documents
+ $page_idx = idx_getIndex('page','');
+
+ $docs = array(); // hold docs found
+ foreach(array_keys($wids) as $wlen){
+ $wids[$wlen] = array_unique($wids[$wlen]);
+ $index = idx_getIndex('i',$wlen);
+ foreach($wids[$wlen] as $ixid){
+ if($ixid < count($index))
+ $docs["$wlen*$ixid"] = idx_parseIndexLine($page_idx,$index[$ixid]);
+ }
+ }
+
+ // merge found pages into final result array
+ $final = array();
+ foreach($result as $word => $res){
+ $final[$word] = array();
+ foreach($res as $wid){
+ $hits = &$docs[$wid];
+ foreach ($hits as $hitkey => $hitcnt) {
+ if (!isset($final[$word][$hitkey])) {
+ $final[$word][$hitkey] = $hitcnt;
+ } else {
+ $final[$word][$hitkey] += $hitcnt;
+ }
+ }
+ }
+ }
+ return $final;
+}
+
+/**
+ * Returns a list of documents and counts from a index line
+ *
+ * It omits docs with a count of 0 and pages that no longer
+ * exist.
+ *
+ * @param array $page_idx The list of known pages
+ * @param string $line A line from the main index
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function idx_parseIndexLine(&$page_idx,$line){
+ $result = array();
+
+ $line = trim($line);
+ if($line == '') return $result;
+
+ $parts = explode(':',$line);
+ foreach($parts as $part){
+ if($part == '') continue;
+ list($doc,$cnt) = explode('*',$part);
+ if(!$cnt) continue;
+ $doc = trim($page_idx[$doc]);
+ if(!$doc) continue;
+ // make sure the document still exists
+ if(!page_exists($doc,'',false)) continue;
+
+ $result[$doc] = $cnt;
+ }
+ return $result;
+}
+
+/**
+ * Tokenizes a string into an array of search words
+ *
+ * Uses the same algorithm as idx_getPageWords()
+ *
+ * @param string $string the query as given by the user
+ * @param arrayref $stopwords array of stopwords
+ * @param boolean $wc are wildcards allowed?
+ */
+function idx_tokenizer($string,&$stopwords,$wc=false){
+ $words = array();
+ $wc = ($wc) ? '' : $wc = '\*';
+
+ if(preg_match('/[^0-9A-Za-z]/u', $string)){
+ // handle asian chars as single words (may fail on older PHP version)
+ $asia = @preg_replace('/('.IDX_ASIAN.')/u',' \1 ',$string);
+ if(!is_null($asia)) $string = $asia; //recover from regexp failure
+
+ $arr = explode(' ', utf8_stripspecials($string,' ','\._\-:'.$wc));
+ foreach ($arr as $w) {
+ if (!is_numeric($w) && strlen($w) < IDX_MINWORDLENGTH) continue;
+ $w = utf8_strtolower($w);
+ if($stopwords && is_int(array_search("$w\n",$stopwords))) continue;
+ $words[] = $w;
+ }
+ }else{
+ $w = $string;
+ if (!is_numeric($w) && strlen($w) < IDX_MINWORDLENGTH) return $words;
+ $w = strtolower($w);
+ if(is_int(array_search("$w\n",$stopwords))) return $words;
+ $words[] = $w;
+ }
+
+ return $words;
+}
+
+/**
+ * Create a pagewords index from the existing index.
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function idx_upgradePageWords(){
+ global $conf;
+ $page_idx = idx_getIndex('page','');
+ if (empty($page_idx)) return;
+ $pagewords = array();
+ $len = count($page_idx);
+ for ($n=0;$n<$len;$n++){
+ $pagewords[] = array();
+ }
+ unset($page_idx);
+
+ $n=0;
+ foreach (idx_indexLengths($n) as $wlen) {
+ $lines = idx_getIndex('i',$wlen);
+ $len = count($lines);
+ for ($wid=0;$wid<$len;$wid++) {
+ $wkey = "$wlen*$wid";
+ foreach (explode(':',trim($lines[$wid])) as $part) {
+ if($part == '') continue;
+ list($doc,$cnt) = explode('*',$part);
+ $pagewords[(int)$doc][] = $wkey;
+ }
+ }
+ }
+
+ $fn = $conf['indexdir'].'/pageword';
+ $fh = @fopen($fn.'.tmp','w');
+ if (!$fh){
+ trigger_error("Failed to write word index", E_USER_ERROR);
+ return false;
+ }
+ foreach ($pagewords as $line){
+ fwrite($fh, join(':',$line)."\n");
+ }
+ fclose($fh);
+ if($conf['fperm']) chmod($fn.'.tmp', $conf['fperm']);
+ io_rename($fn.'.tmp', $fn.'.idx');
+ return true;
+}
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/infoutils.php b/mod/dokuwiki/vendors/dokuwiki/inc/infoutils.php
new file mode 100644
index 000000000..b43dd40be
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/infoutils.php
@@ -0,0 +1,385 @@
+<?php
+/**
+ * Information and debugging functions
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+if(!defined('DOKU_INC')) die('meh.');
+if(!defined('DOKU_MESSAGEURL')) define('DOKU_MESSAGEURL','http://update.dokuwiki.org/check/');
+require_once(DOKU_INC.'inc/HTTPClient.php');
+
+/**
+ * Check for new messages from upstream
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function checkUpdateMessages(){
+ global $conf;
+ global $INFO;
+ if(!$conf['updatecheck']) return;
+ if($conf['useacl'] && !$INFO['ismanager']) return;
+
+ $cf = $conf['cachedir'].'/messages.txt';
+ $lm = @filemtime($cf);
+
+ // check if new messages needs to be fetched
+ if($lm < time()-(60*60*24) || $lm < @filemtime(DOKU_CONF.'msg')){
+ $num = @file(DOKU_CONF.'msg');
+ $num = is_array($num) ? (int) $num[0] : 0;
+ $http = new DokuHTTPClient();
+ $http->timeout = 8;
+ $data = $http->get(DOKU_MESSAGEURL.$num);
+ io_saveFile($cf,$data);
+ }else{
+ $data = io_readFile($cf);
+ }
+
+ // show messages through the usual message mechanism
+ $msgs = explode("\n%\n",$data);
+ foreach($msgs as $msg){
+ if($msg) msg($msg,2);
+ }
+}
+
+
+/**
+ * Return DokuWiki's version (split up in date and type)
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function getVersionData(){
+ $version = array();
+ //import version string
+ if(@file_exists(DOKU_INC.'VERSION')){
+ //official release
+ $version['date'] = trim(io_readfile(DOKU_INC.'VERSION'));
+ $version['type'] = 'Release';
+ return $version;
+ }elseif(is_dir(DOKU_INC.'_darcs')){
+ if(is_file(DOKU_INC.'_darcs/inventory')){
+ $inventory = DOKU_INC.'_darcs/inventory';
+ }elseif(is_file(DOKU_INC.'_darcs/hashed_inventory')){
+ $inventory = DOKU_INC.'_darcs/hashed_inventory';
+ }else{
+ $version['date'] = 'unknown';
+ $version['type'] = 'Darcs';
+ return $version;
+ }
+
+ //darcs checkout - read last 2000 bytes of inventory
+ $sz = filesize($inventory);
+ $seek = max(0,$sz-2000);
+ $fh = fopen($inventory,'rb');
+ fseek($fh,$seek);
+ $chunk = fread($fh,2000);
+ fclose($fh);
+
+ preg_match_all('#\*\*(\d{4})(\d{2})(\d{2})\d{6}(?:\]|$)#m', $chunk, $matches,
+ PREG_SET_ORDER);
+ $version['date'] = implode('-', array_slice(array_pop($matches), 1));
+ $version['type'] = 'Darcs';
+ return $version;
+ }else{
+ $version['date'] = 'unknown';
+ $version['type'] = 'snapshot?';
+ return $version;
+ }
+}
+
+/**
+ * Return DokuWiki's version (as a string)
+ *
+ * @author Anika Henke <anika@selfthinker.org>
+ */
+function getVersion(){
+ $version = getVersionData();
+ return $version['type'].' '.$version['date'];
+}
+
+/**
+ * Run a few sanity checks
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function check(){
+ global $conf;
+ global $INFO;
+
+ msg('DokuWiki version: '.getVersion(),1);
+
+ if(version_compare(phpversion(),'5.1.2','<')){
+ msg('Your PHP version is too old ('.phpversion().' vs. 5.1.2+ needed)',-1);
+ }else{
+ msg('PHP version '.phpversion(),1);
+ }
+
+ $mem = (int) php_to_byte(ini_get('memory_limit'));
+ if($mem){
+ if($mem < 16777216){
+ msg('PHP is limited to less than 16MB RAM ('.$mem.' bytes). Increase memory_limit in php.ini',-1);
+ }elseif($mem < 20971520){
+ msg('PHP is limited to less than 20MB RAM ('.$mem.' bytes), you might encounter problems with bigger pages. Increase memory_limit in php.ini',-1);
+ }elseif($mem < 33554432){
+ msg('PHP is limited to less than 32MB RAM ('.$mem.' bytes), but that should be enough in most cases. If not, increase memory_limit in php.ini',0);
+ }else{
+ msg('More than 32MB RAM ('.$mem.' bytes) available.',1);
+ }
+ }
+
+ if(is_writable($conf['changelog'])){
+ msg('Changelog is writable',1);
+ }else{
+ if (@file_exists($conf['changelog'])) {
+ msg('Changelog is not writable',-1);
+ }
+ }
+
+ if (isset($conf['changelog_old']) && @file_exists($conf['changelog_old'])) {
+ msg('Old changelog exists', 0);
+ }
+
+ if (@file_exists($conf['changelog'].'_failed')) {
+ msg('Importing old changelog failed', -1);
+ } else if (@file_exists($conf['changelog'].'_importing')) {
+ msg('Importing old changelog now.', 0);
+ } else if (@file_exists($conf['changelog'].'_import_ok')) {
+ msg('Old changelog imported', 1);
+ if (!plugin_isdisabled('importoldchangelog')) {
+ msg('Importoldchangelog plugin not disabled after import', -1);
+ }
+ }
+
+ if(is_writable($conf['datadir'])){
+ msg('Datadir is writable',1);
+ }else{
+ msg('Datadir is not writable',-1);
+ }
+
+ if(is_writable($conf['olddir'])){
+ msg('Attic is writable',1);
+ }else{
+ msg('Attic is not writable',-1);
+ }
+
+ if(is_writable($conf['mediadir'])){
+ msg('Mediadir is writable',1);
+ }else{
+ msg('Mediadir is not writable',-1);
+ }
+
+ if(is_writable($conf['cachedir'])){
+ msg('Cachedir is writable',1);
+ }else{
+ msg('Cachedir is not writable',-1);
+ }
+
+ if(is_writable($conf['lockdir'])){
+ msg('Lockdir is writable',1);
+ }else{
+ msg('Lockdir is not writable',-1);
+ }
+
+ if($conf['authtype'] == 'plain'){
+ if(is_writable(DOKU_CONF.'users.auth.php')){
+ msg('conf/users.auth.php is writable',1);
+ }else{
+ msg('conf/users.auth.php is not writable',0);
+ }
+ }
+
+ if(function_exists('mb_strpos')){
+ if(defined('UTF8_NOMBSTRING')){
+ msg('mb_string extension is available but will not be used',0);
+ }else{
+ msg('mb_string extension is available and will be used',1);
+ if(ini_get('mbstring.func_overload') != 0){
+ msg('mb_string function overloading is enabled, this will cause problems and should be disabled',-1);
+ }
+ }
+ }else{
+ msg('mb_string extension not available - PHP only replacements will be used',0);
+ }
+
+ if($conf['allowdebug']){
+ msg('Debugging support is enabled. If you don\'t need it you should set $conf[\'allowdebug\'] = 0',-1);
+ }else{
+ msg('Debugging support is disabled',1);
+ }
+
+ if($INFO['userinfo']['name']){
+ msg('You are currently logged in as '.$_SERVER['REMOTE_USER'].' ('.$INFO['userinfo']['name'].')',0);
+ msg('You are part of the groups '.join($INFO['userinfo']['grps'],', '),0);
+ }else{
+ msg('You are currently not logged in',0);
+ }
+
+ msg('Your current permission for this page is '.$INFO['perm'],0);
+
+ if(is_writable($INFO['filepath'])){
+ msg('The current page is writable by the webserver',0);
+ }else{
+ msg('The current page is not writable by the webserver',0);
+ }
+
+ if($INFO['writable']){
+ msg('The current page is writable by you',0);
+ }else{
+ msg('The current page is not writable by you',0);
+ }
+
+ require_once(DOKU_INC.'inc/HTTPClient.php');
+ $check = wl('','',true).'data/_dummy';
+ $http = new DokuHTTPClient();
+ $http->timeout = 6;
+ $res = $http->get($check);
+ if(strpos($res,'data directory') !== false){
+ msg('It seems like the data directory is accessible from the web.
+ Make sure this directory is properly protected
+ (See <a href="http://www.dokuwiki.org/security">security</a>)',-1);
+ }elseif($http->status == 404 || $http->status == 403){
+ msg('The data directory seems to be properly protected',1);
+ }else{
+ msg('Failed to check if the data directory is accessible from the web.
+ Make sure this directory is properly protected
+ (See <a href="http://www.dokuwiki.org/security">security</a>)',-1);
+ }
+}
+
+/**
+ * print a message
+ *
+ * If HTTP headers were not sent yet the message is added
+ * to the global message array else it's printed directly
+ * using html_msgarea()
+ *
+ *
+ * Levels can be:
+ *
+ * -1 error
+ * 0 info
+ * 1 success
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @see html_msgarea
+ */
+function msg($message,$lvl=0,$line='',$file=''){
+ global $MSG;
+ $errors[-1] = 'error';
+ $errors[0] = 'info';
+ $errors[1] = 'success';
+ $errors[2] = 'notify';
+
+ if($line || $file) $message.=' ['.basename($file).':'.$line.']';
+
+ if(!headers_sent()){
+ if(!isset($MSG)) $MSG = array();
+ $MSG[]=array('lvl' => $errors[$lvl], 'msg' => $message);
+ }else{
+ $MSG = array();
+ $MSG[]=array('lvl' => $errors[$lvl], 'msg' => $message);
+ if(function_exists('html_msgarea')){
+ html_msgarea();
+ }else{
+ print "ERROR($lvl) $message";
+ }
+ }
+}
+
+/**
+ * print debug messages
+ *
+ * little function to print the content of a var
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function dbg($msg,$hidden=false){
+ (!$hidden) ? print '<pre class="dbg">' : print "<!--\n";
+ print_r($msg);
+ (!$hidden) ? print '</pre>' : print "\n-->";
+}
+
+/**
+ * Print info to a log file
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function dbglog($msg,$header=''){
+ global $conf;
+ if(is_object($msg) || is_array($msg)){
+ $msg = print_r($msg,true);
+ }
+
+ if($header) $msg = "$header\n$msg";
+
+ $file = $conf['cachedir'].'/debug.log';
+ $fh = fopen($file,'a');
+ if($fh){
+ fwrite($fh,date('H:i:s ').$_SERVER['REMOTE_ADDR'].': '.$msg."\n");
+ fclose($fh);
+ }
+}
+
+/**
+ * Print a reversed, prettyprinted backtrace
+ *
+ * @author Gary Owen <gary_owen@bigfoot.com>
+ */
+function dbg_backtrace(){
+ // Get backtrace
+ $backtrace = debug_backtrace();
+
+ // Unset call to debug_print_backtrace
+ array_shift($backtrace);
+
+ // Iterate backtrace
+ $calls = array();
+ $depth = count($backtrace) - 1;
+ foreach ($backtrace as $i => $call) {
+ $location = $call['file'] . ':' . $call['line'];
+ $function = (isset($call['class'])) ?
+ $call['class'] . $call['type'] . $call['function'] : $call['function'];
+
+ $params = array();
+ if (isset($call['args'])){
+ foreach($call['args'] as $arg){
+ if(is_object($arg)){
+ $params[] = '[Object '.get_class($arg).']';
+ }elseif(is_array($arg)){
+ $params[] = '[Array]';
+ }elseif(is_null($arg)){
+ $param[] = '[NULL]';
+ }else{
+ $params[] = (string) '"'.$arg.'"';
+ }
+ }
+ }
+ $params = implode(', ',$params);
+
+ $calls[$depth - $i] = sprintf('%s(%s) called at %s',
+ $function,
+ str_replace("\n", '\n', $params),
+ $location);
+ }
+ ksort($calls);
+
+ return implode("\n", $calls);
+}
+
+/**
+ * Remove all data from an array where the key seems to point to sensitive data
+ *
+ * This is used to remove passwords, mail addresses and similar data from the
+ * debug output
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function debug_guard(&$data){
+ foreach($data as $key => $value){
+ if(preg_match('/(notify|pass|auth|secret|ftp|userinfo|token|buid|mail|proxy)/i',$key)){
+ $data[$key] = '***';
+ continue;
+ }
+ if(is_array($value)) debug_guard($data[$key]);
+ }
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/init.php b/mod/dokuwiki/vendors/dokuwiki/inc/init.php
new file mode 100644
index 000000000..eca97f5f7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/init.php
@@ -0,0 +1,598 @@
+<?php
+/**
+ * Initialize some defaults needed for DokuWiki
+ */
+
+// start timing Dokuwiki execution
+function delta_time($start=0) {
+ list($usec, $sec) = explode(" ", microtime());
+ return ((float)$usec+(float)$sec)-((float)$start);
+}
+define('DOKU_START_TIME', delta_time());
+
+global $config_cascade;
+$config_cascade = '';
+
+// if available load a preload config file
+$preload = fullpath(dirname(__FILE__)).'/preload.php';
+if (@file_exists($preload)) include($preload);
+
+// define the include path
+if(!defined('DOKU_INC')) define('DOKU_INC',fullpath(dirname(__FILE__).'/../').'/');
+
+
+// define config path (packagers may want to change this to /etc/dokuwiki/)
+if(!defined('DOKU_CONF')) define('DOKU_CONF',DOKU_INC.'conf/');
+
+// check for error reporting override or set error reporting to sane values
+if (!defined('DOKU_E_LEVEL') && @file_exists(DOKU_CONF.'report_e_all')) {
+ define('DOKU_E_LEVEL', E_ALL);
+}
+if (!defined('DOKU_E_LEVEL')) {
+ if(defined('E_DEPRECATED')){ // since php 5.3
+ error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED);
+ }else{
+ error_reporting(E_ALL ^ E_NOTICE);
+ }
+} else {
+ error_reporting(DOKU_E_LEVEL);
+}
+
+// init memory caches
+global $cache_revinfo;
+ $cache_revinfo = array();
+global $cache_wikifn;
+ $cache_wikifn = array();
+global $cache_cleanid;
+ $cache_cleanid = array();
+global $cache_authname;
+ $cache_authname = array();
+global $cache_metadata;
+ $cache_metadata = array();
+
+//set the configuration cascade - but only if its not already been set in preload.php
+if (empty($config_cascade)) {
+ $config_cascade = array(
+ 'main' => array(
+ 'default' => array(DOKU_CONF.'dokuwiki.php'),
+ 'local' => array(DOKU_CONF.'local.php'),
+ 'protected' => array(DOKU_CONF.'local.protected.php'),
+ ),
+ 'acronyms' => array(
+ 'default' => array(DOKU_CONF.'acronyms.conf'),
+ 'local' => array(DOKU_CONF.'acronyms.local.conf'),
+ ),
+ 'entities' => array(
+ 'default' => array(DOKU_CONF.'entities.conf'),
+ 'local' => array(DOKU_CONF.'entities.local.conf'),
+ ),
+ 'interwiki' => array(
+ 'default' => array(DOKU_CONF.'interwiki.conf'),
+ 'local' => array(DOKU_CONF.'interwiki.local.conf'),
+ ),
+ 'license' => array(
+ 'default' => array(DOKU_CONF.'license.php'),
+ 'local' => array(DOKU_CONF.'license.local.php'),
+ ),
+ 'mediameta' => array(
+ 'default' => array(DOKU_CONF.'mediameta.php'),
+ 'local' => array(DOKU_CONF.'mediameta.local.php'),
+ ),
+ 'mime' => array(
+ 'default' => array(DOKU_CONF.'mime.conf'),
+ 'local' => array(DOKU_CONF.'mime.local.conf'),
+ ),
+ 'scheme' => array(
+ 'default' => array(DOKU_CONF.'scheme.conf'),
+ 'local' => array(DOKU_CONF.'scheme.local.conf'),
+ ),
+ 'smileys' => array(
+ 'default' => array(DOKU_CONF.'smileys.conf'),
+ 'local' => array(DOKU_CONF.'smileys.local.conf'),
+ ),
+ 'wordblock' => array(
+ 'default' => array(DOKU_CONF.'wordblock.conf'),
+ 'local' => array(DOKU_CONF.'wordblock.local.conf'),
+ ),
+ );
+}
+
+//prepare config array()
+global $conf;
+$conf = array();
+
+// load the global config file(s)
+foreach (array('default','local','protected') as $config_group) {
+ if (empty($config_cascade['main'][$config_group])) continue;
+ foreach ($config_cascade['main'][$config_group] as $config_file) {
+ if (@file_exists($config_file)) {
+ include($config_file);
+ }
+ }
+}
+
+//prepare language array
+global $lang;
+$lang = array();
+
+//load the language files
+require_once(DOKU_INC.'inc/lang/en/lang.php');
+if ( $conf['lang'] && $conf['lang'] != 'en' ) {
+ require_once(DOKU_INC.'inc/lang/'.$conf['lang'].'/lang.php');
+}
+
+//prepare license array()
+global $license;
+$license = array();
+
+// load the license file(s)
+foreach (array('default','local') as $config_group) {
+ if (empty($config_cascade['license'][$config_group])) continue;
+ foreach ($config_cascade['license'][$config_group] as $config_file) {
+ if(@file_exists($config_file)){
+ include($config_file);
+ }
+ }
+}
+
+// set timezone (as in pre 5.3.0 days)
+date_default_timezone_set(@date_default_timezone_get());
+
+// define baseURL
+if(!defined('DOKU_REL')) define('DOKU_REL',getBaseURL(false));
+if(!defined('DOKU_URL')) define('DOKU_URL',getBaseURL(true));
+if(!defined('DOKU_BASE')){
+ if($conf['canonical']){
+ define('DOKU_BASE',DOKU_URL);
+ }else{
+ define('DOKU_BASE',DOKU_REL);
+ }
+}
+//error_log("DOKU_INC:".DOKU_INC);
+//error_log("DOKU_REL:".DOKU_REL);
+//error_log("DOKU_URL:".DOKU_URL);
+//error_log("DOKU_BASE:".DOKU_BASE);
+
+// define whitespace
+if(!defined('DOKU_LF')) define ('DOKU_LF',"\n");
+if(!defined('DOKU_TAB')) define ('DOKU_TAB',"\t");
+
+// define cookie and session id, append server port when securecookie is configured FS#1664
+if (!defined('DOKU_COOKIE')) define('DOKU_COOKIE', 'DW'.md5(DOKU_REL.(($conf['securecookie'])?$_SERVER['SERVER_PORT']:'')));
+
+// define Plugin dir
+if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
+
+// define main script
+if(!defined('DOKU_SCRIPT')) define('DOKU_SCRIPT','doku.php');
+
+// define Template baseURL
+if(!defined('DOKU_TPL')) define('DOKU_TPL',
+ DOKU_BASE.'lib/tpl/'.$conf['template'].'/');
+
+// define real Template directory
+if(!defined('DOKU_TPLINC')) define('DOKU_TPLINC',
+ DOKU_INC.'lib/tpl/'.$conf['template'].'/');
+
+// make session rewrites XHTML compliant
+@ini_set('arg_separator.output', '&amp;');
+
+// make sure global zlib does not interfere FS#1132
+@ini_set('zlib.output_compression', 'off');
+
+// increase PCRE backtrack limit
+@ini_set('pcre.backtrack_limit', '20971520');
+
+// enable gzip compression if supported
+$conf['gzip_output'] &= (strpos($_SERVER['HTTP_ACCEPT_ENCODING'],'gzip') !== false);
+if ($conf['gzip_output'] &&
+ !defined('DOKU_DISABLE_GZIP_OUTPUT') &&
+ function_exists('ob_gzhandler')) {
+ ob_start('ob_gzhandler');
+}
+
+// init session
+if (!headers_sent() && !defined('NOSESSION')){
+ session_name("DokuWiki");
+ if (version_compare(PHP_VERSION, '5.2.0', '>')) {
+ session_set_cookie_params(0,DOKU_REL,'',($conf['securecookie'] && is_ssl()),true);
+ }else{
+ session_set_cookie_params(0,DOKU_REL,'',($conf['securecookie'] && is_ssl()));
+ }
+ session_start();
+
+ // load left over messages
+ if(isset($_SESSION[DOKU_COOKIE]['msg'])){
+ $MSG = $_SESSION[DOKU_COOKIE]['msg'];
+ unset($_SESSION[DOKU_COOKIE]['msg']);
+ }
+}
+
+// kill magic quotes
+if (get_magic_quotes_gpc() && !defined('MAGIC_QUOTES_STRIPPED')) {
+ if (!empty($_GET)) remove_magic_quotes($_GET);
+ if (!empty($_POST)) remove_magic_quotes($_POST);
+ if (!empty($_COOKIE)) remove_magic_quotes($_COOKIE);
+ if (!empty($_REQUEST)) remove_magic_quotes($_REQUEST);
+ @ini_set('magic_quotes_gpc', 0);
+ define('MAGIC_QUOTES_STRIPPED',1);
+}
+@set_magic_quotes_runtime(0);
+@ini_set('magic_quotes_sybase',0);
+
+// don't let cookies ever interfere with request vars
+$_REQUEST = array_merge($_GET,$_POST);
+
+// we don't want a purge URL to be digged
+if(isset($_REQUEST['purge']) && $_SERVER['HTTP_REFERER']) unset($_REQUEST['purge']);
+
+// disable gzip if not available
+if($conf['compression'] == 'bz2' && !function_exists('bzopen')){
+ $conf['compression'] = 'gz';
+}
+if($conf['compression'] == 'gz' && !function_exists('gzopen')){
+ $conf['compression'] = 0;
+}
+
+// fix dateformat for upgraders
+if(strpos($conf['dformat'],'%') === false){
+ $conf['dformat'] = '%Y/%m/%d %H:%M';
+}
+
+// precalculate file creation modes
+init_creationmodes();
+
+// make real paths and check them
+init_paths();
+init_files();
+
+// automatic upgrade to script versions of certain files
+scriptify(DOKU_CONF.'users.auth');
+scriptify(DOKU_CONF.'acl.auth');
+
+
+/**
+ * Checks paths from config file
+ */
+function init_paths(){
+ global $conf;
+
+ $paths = array('datadir' => 'pages',
+ 'olddir' => 'attic',
+ 'mediadir' => 'media',
+ 'metadir' => 'meta',
+ 'cachedir' => 'cache',
+ 'indexdir' => 'index',
+ 'lockdir' => 'locks',
+ 'tmpdir' => 'tmp');
+
+ foreach($paths as $c => $p){
+ if(empty($conf[$c])) $conf[$c] = $conf['savedir'].'/'.$p;
+ $conf[$c] = init_path($conf[$c]);
+ if(empty($conf[$c])) nice_die("The $c ('$p') does not exist, isn't accessible or writable.
+ You should check your config and permission settings.
+ Or maybe you want to <a href=\"install.php\">run the
+ installer</a>?");
+ }
+
+ // path to old changelog only needed for upgrading
+ $conf['changelog_old'] = init_path((isset($conf['changelog']))?($conf['changelog']):($conf['savedir'].'/changes.log'));
+ if ($conf['changelog_old']=='') { unset($conf['changelog_old']); }
+ // hardcoded changelog because it is now a cache that lives in meta
+ $conf['changelog'] = $conf['metadir'].'/_dokuwiki.changes';
+ $conf['media_changelog'] = $conf['metadir'].'/_media.changes';
+}
+
+/**
+ * Checks the existance of certain files and creates them if missing.
+ */
+function init_files(){
+ global $conf;
+
+ $files = array( $conf['indexdir'].'/page.idx');
+
+ foreach($files as $file){
+ if(!@file_exists($file)){
+ $fh = @fopen($file,'a');
+ if($fh){
+ fclose($fh);
+ if($conf['fperm']) chmod($file, $conf['fperm']);
+ }else{
+ nice_die("$file is not writable. Check your permissions settings!");
+ }
+ }
+ }
+}
+
+/**
+ * Returns absolute path
+ *
+ * This tries the given path first, then checks in DOKU_INC.
+ * Check for accessability on directories as well.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function init_path($path){
+ // check existance
+ //error_log("init_path:".$path);
+ $p = fullpath($path);
+ if(!@file_exists($p)){
+ $p = fullpath(DOKU_INC.$path);
+ if(!@file_exists($p)){
+ return '';
+ }
+ }
+
+ // check writability
+ if(!@is_writable($p)){
+ return '';
+ }
+
+ // check accessability (execute bit) for directories
+ if(@is_dir($p) && !@file_exists("$p/.")){
+ return '';
+ }
+
+ return $p;
+}
+
+/**
+ * Sets the internal config values fperm and dperm which, when set,
+ * will be used to change the permission of a newly created dir or
+ * file with chmod. Considers the influence of the system's umask
+ * setting the values only if needed.
+ */
+function init_creationmodes(){
+ global $conf;
+
+ // Legacy support for old umask/dmask scheme
+ unset($conf['dmask']);
+ unset($conf['fmask']);
+ unset($conf['umask']);
+ unset($conf['fperm']);
+ unset($conf['dperm']);
+
+ // get system umask, fallback to 0 if none available
+ $umask = @umask();
+ if(!$umask) $umask = 0000;
+
+ // check what is set automatically by the system on file creation
+ // and set the fperm param if it's not what we want
+ $auto_fmode = 0666 & ~$umask;
+ if($auto_fmode != $conf['fmode']) $conf['fperm'] = $conf['fmode'];
+
+ // check what is set automatically by the system on file creation
+ // and set the dperm param if it's not what we want
+ $auto_dmode = $conf['dmode'] & ~$umask;
+ if($auto_dmode != $conf['dmode']) $conf['dperm'] = $conf['dmode'];
+}
+
+/**
+ * remove magic quotes recursivly
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function remove_magic_quotes(&$array) {
+ foreach (array_keys($array) as $key) {
+ // handle magic quotes in keynames (breaks order)
+ $sk = stripslashes($key);
+ if($sk != $key){
+ $array[$sk] = $array[$key];
+ unset($array[$key]);
+ $key = $sk;
+ }
+
+ // do recursion if needed
+ if (is_array($array[$key])) {
+ remove_magic_quotes($array[$key]);
+ }else {
+ $array[$key] = stripslashes($array[$key]);
+ }
+ }
+}
+
+/**
+ * Returns the full absolute URL to the directory where
+ * DokuWiki is installed in (includes a trailing slash)
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function getBaseURL($abs=null){
+ global $conf;
+ //if canonical url enabled always return absolute
+ if(is_null($abs)) $abs = $conf['canonical'];
+
+ if($conf['basedir']){
+ $dir = $conf['basedir'];
+ }elseif(substr($_SERVER['SCRIPT_NAME'],-4) == '.php'){
+ $dir = dirname($_SERVER['SCRIPT_NAME']);
+ }elseif(substr($_SERVER['PHP_SELF'],-4) == '.php'){
+ $dir = dirname($_SERVER['PHP_SELF']);
+ }elseif($_SERVER['DOCUMENT_ROOT'] && $_SERVER['SCRIPT_FILENAME']){
+ $dir = preg_replace ('/^'.preg_quote($_SERVER['DOCUMENT_ROOT'],'/').'/','',
+ $_SERVER['SCRIPT_FILENAME']);
+ $dir = dirname('/'.$dir);
+ }else{
+ $dir = '.'; //probably wrong
+ }
+
+ $dir = str_replace('\\','/',$dir); // bugfix for weird WIN behaviour
+ $dir = preg_replace('#//+#','/',"/$dir/"); // ensure leading and trailing slashes
+
+ //handle script in lib/exe dir
+ $dir = preg_replace('!lib/exe/$!','',$dir);
+
+ //handle script in lib/plugins dir
+ $dir = preg_replace('!lib/plugins/.*$!','',$dir);
+
+ //finish here for relative URLs
+ if(!$abs) return $dir;
+
+ //use config option if available, trim any slash from end of baseurl to avoid multiple consecutive slashes in the path
+ if($conf['baseurl']) return rtrim($conf['baseurl'],'/').$dir;
+
+ //split hostheader into host and port
+ $addr = explode(':',$_SERVER['HTTP_HOST']);
+ $host = $addr[0];
+ $port = '';
+ if (isset($addr[1])) {
+ $port = $addr[1];
+ } elseif (isset($_SERVER['SERVER_PORT'])) {
+ $port = $_SERVER['SERVER_PORT'];
+ }
+ if(!is_ssl()){
+ $proto = 'http://';
+ if ($port == '80') {
+ $port = '';
+ }
+ }else{
+ $proto = 'https://';
+ if ($port == '443') {
+ $port = '';
+ }
+ }
+
+ if($port !== '') $port = ':'.$port;
+
+ return $proto.$host.$port.$dir;
+}
+
+/**
+ * Check if accessed via HTTPS
+ *
+ * Apache leaves ,$_SERVER['HTTPS'] empty when not available, IIS sets it to 'off'.
+ * 'false' and 'disabled' are just guessing
+ *
+ * @returns bool true when SSL is active
+ */
+function is_ssl(){
+ if (!isset($_SERVER['HTTPS']) ||
+ preg_match('/^(|off|false|disabled)$/i',$_SERVER['HTTPS'])){
+ return false;
+ }else{
+ return true;
+ }
+}
+
+/**
+ * Append a PHP extension to a given file and adds an exit call
+ *
+ * This is used to migrate some old configfiles. An added PHP extension
+ * ensures the contents are not shown to webusers even if .htaccess files
+ * do not work
+ *
+ * @author Jan Decaluwe <jan@jandecaluwe.com>
+ */
+function scriptify($file) {
+ // checks
+ if (!is_readable($file)) {
+ return;
+ }
+ $fn = $file.'.php';
+ if (@file_exists($fn)) {
+ return;
+ }
+ $fh = fopen($fn, 'w');
+ if (!$fh) {
+ nice_die($fn.' is not writable. Check your permission settings!');
+ }
+ // write php exit hack first
+ fwrite($fh, "# $fn\n");
+ fwrite($fh, '# <?php exit()?>'."\n");
+ fwrite($fh, "# Don't modify the lines above\n");
+ fwrite($fh, "#\n");
+ // copy existing lines
+ $lines = file($file);
+ foreach ($lines as $line){
+ fwrite($fh, $line);
+ }
+ fclose($fh);
+ //try to rename the old file
+ io_rename($file,"$file.old");
+}
+
+/**
+ * print a nice message even if no styles are loaded yet.
+ */
+function nice_die($msg){
+ echo<<<EOT
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head><title>DokuWiki Setup Error</title></head>
+<body style="font-family: Arial, sans-serif">
+ <div style="width:60%; margin: auto; background-color: #fcc;
+ border: 1px solid #faa; padding: 0.5em 1em;">
+ <h1 style="font-size: 120%">DokuWiki Setup Error</h1>
+ <p>$msg</p>
+ </div>
+</body>
+</html>
+EOT;
+ exit;
+}
+
+
+/**
+ * A realpath() replacement
+ *
+ * This function behaves similar to PHP's realpath() but does not resolve
+ * symlinks or accesses upper directories
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author <richpageau at yahoo dot co dot uk>
+ * @link http://de3.php.net/manual/en/function.realpath.php#75992
+ */
+function fullpath($path,$exists=false){
+ static $run = 0;
+ $root = '';
+ $iswin = (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN' || @$GLOBALS['DOKU_UNITTEST_ASSUME_WINDOWS']);
+
+ // find the (indestructable) root of the path - keeps windows stuff intact
+ if($path{0} == '/'){
+ $root = '/';
+ }elseif($iswin){
+ // match drive letter and UNC paths
+ if(preg_match('!^([a-zA-z]:)(.*)!',$path,$match)){
+ $root = $match[1].'/';
+ $path = $match[2];
+ }else if(preg_match('!^(\\\\\\\\[^\\\\/]+\\\\[^\\\\/]+[\\\\/])(.*)!',$path,$match)){
+ $root = $match[1];
+ $path = $match[2];
+ }
+ }
+ $path = str_replace('\\','/',$path);
+
+ // if the given path wasn't absolute already, prepend the script path and retry
+ if(!$root){
+ $base = dirname($_SERVER['SCRIPT_FILENAME']);
+ $path = $base.'/'.$path;
+ if($run == 0){ // avoid endless recursion when base isn't absolute for some reason
+ $run++;
+ return fullpath($path,$exists);
+ }
+ }
+ $run = 0;
+
+ // canonicalize
+ $path=explode('/', $path);
+ $newpath=array();
+ foreach($path as $p) {
+ if ($p === '' || $p === '.') continue;
+ if ($p==='..') {
+ array_pop($newpath);
+ continue;
+ }
+ array_push($newpath, $p);
+ }
+ $finalpath = $root.implode('/', $newpath);
+
+ // check for existance when needed (except when unit testing)
+ if($exists && !defined('DOKU_UNITTEST') && !@file_exists($finalpath)) {
+ return false;
+ }
+ return $finalpath;
+}
+
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/io.php b/mod/dokuwiki/vendors/dokuwiki/inc/io.php
new file mode 100644
index 000000000..32a6f7b8e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/io.php
@@ -0,0 +1,593 @@
+<?php
+/**
+ * File IO functions
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+if(!defined('DOKU_INC')) die('meh.');
+require_once(DOKU_INC.'inc/common.php');
+require_once(DOKU_INC.'inc/HTTPClient.php');
+require_once(DOKU_INC.'inc/events.php');
+require_once(DOKU_INC.'inc/utf8.php');
+
+/**
+ * Removes empty directories
+ *
+ * Sends IO_NAMESPACE_DELETED events for 'pages' and 'media' namespaces.
+ * Event data:
+ * $data[0] ns: The colon separated namespace path minus the trailing page name.
+ * $data[1] ns_type: 'pages' or 'media' namespace tree.
+ *
+ * @todo use safemode hack
+ * @param string $id - a pageid, the namespace of that id will be tried to deleted
+ * @param string $basadir - the config name of the type to delete (datadir or mediadir usally)
+ * @returns bool - true if at least one namespace was deleted
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Ben Coburn <btcoburn@silicodon.net>
+ */
+function io_sweepNS($id,$basedir='datadir'){
+ global $conf;
+ $types = array ('datadir'=>'pages', 'mediadir'=>'media');
+ $ns_type = (isset($types[$basedir])?$types[$basedir]:false);
+
+ $delone = false;
+
+ //scan all namespaces
+ while(($id = getNS($id)) !== false){
+ $dir = $conf[$basedir].'/'.utf8_encodeFN(str_replace(':','/',$id));
+
+ //try to delete dir else return
+ if(@rmdir($dir)) {
+ if ($ns_type!==false) {
+ $data = array($id, $ns_type);
+ $delone = true; // we deleted at least one dir
+ trigger_event('IO_NAMESPACE_DELETED', $data);
+ }
+ } else { return $delone; }
+ }
+ return $delone;
+}
+
+/**
+ * Used to read in a DokuWiki page from file, and send IO_WIKIPAGE_READ events.
+ *
+ * Generates the action event which delegates to io_readFile().
+ * Action plugins are allowed to modify the page content in transit.
+ * The file path should not be changed.
+ *
+ * Event data:
+ * $data[0] The raw arguments for io_readFile as an array.
+ * $data[1] ns: The colon separated namespace path minus the trailing page name. (false if root ns)
+ * $data[2] page_name: The wiki page name.
+ * $data[3] rev: The page revision, false for current wiki pages.
+ *
+ * @author Ben Coburn <btcoburn@silicodon.net>
+ */
+function io_readWikiPage($file, $id, $rev=false) {
+ if (empty($rev)) { $rev = false; }
+ $data = array(array($file, false), getNS($id), noNS($id), $rev);
+ return trigger_event('IO_WIKIPAGE_READ', $data, '_io_readWikiPage_action', false);
+}
+
+/**
+ * Callback adapter for io_readFile().
+ * @author Ben Coburn <btcoburn@silicodon.net>
+ */
+function _io_readWikiPage_action($data) {
+ if (is_array($data) && is_array($data[0]) && count($data[0])===2) {
+ return call_user_func_array('io_readFile', $data[0]);
+ } else {
+ return ''; //callback error
+ }
+}
+
+/**
+ * Returns content of $file as cleaned string.
+ *
+ * Uses gzip if extension is .gz
+ *
+ * If you want to use the returned value in unserialize
+ * be sure to set $clean to false!
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function io_readFile($file,$clean=true){
+ $ret = '';
+ if(@file_exists($file)){
+ if(substr($file,-3) == '.gz'){
+ $ret = join('',gzfile($file));
+ }else if(substr($file,-4) == '.bz2'){
+ $ret = bzfile($file);
+ }else{
+ $ret = file_get_contents($file);
+ }
+ }
+ if($clean){
+ return cleanText($ret);
+ }else{
+ return $ret;
+ }
+}
+/**
+ * Returns the content of a .bz2 compressed file as string
+ * @author marcel senf <marcel@rucksackreinigung.de>
+ */
+
+function bzfile($file){
+ $bz = bzopen($file,"r");
+ while (!feof($bz)){
+ //8192 seems to be the maximum buffersize?
+ $str = $str . bzread($bz,8192);
+ }
+ bzclose($bz);
+ return $str;
+}
+
+
+/**
+ * Used to write out a DokuWiki page to file, and send IO_WIKIPAGE_WRITE events.
+ *
+ * This generates an action event and delegates to io_saveFile().
+ * Action plugins are allowed to modify the page content in transit.
+ * The file path should not be changed.
+ * (The append parameter is set to false.)
+ *
+ * Event data:
+ * $data[0] The raw arguments for io_saveFile as an array.
+ * $data[1] ns: The colon separated namespace path minus the trailing page name. (false if root ns)
+ * $data[2] page_name: The wiki page name.
+ * $data[3] rev: The page revision, false for current wiki pages.
+ *
+ * @author Ben Coburn <btcoburn@silicodon.net>
+ */
+function io_writeWikiPage($file, $content, $id, $rev=false) {
+ if (empty($rev)) { $rev = false; }
+ if ($rev===false) { io_createNamespace($id); } // create namespaces as needed
+ $data = array(array($file, $content, false), getNS($id), noNS($id), $rev);
+ return trigger_event('IO_WIKIPAGE_WRITE', $data, '_io_writeWikiPage_action', false);
+}
+
+/**
+ * Callback adapter for io_saveFile().
+ * @author Ben Coburn <btcoburn@silicodon.net>
+ */
+function _io_writeWikiPage_action($data) {
+ if (is_array($data) && is_array($data[0]) && count($data[0])===3) {
+ return call_user_func_array('io_saveFile', $data[0]);
+ } else {
+ return false; //callback error
+ }
+}
+
+/**
+ * Saves $content to $file.
+ *
+ * If the third parameter is set to true the given content
+ * will be appended.
+ *
+ * Uses gzip if extension is .gz
+ * and bz2 if extension is .bz2
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @return bool true on success
+ */
+function io_saveFile($file,$content,$append=false){
+ global $conf;
+ $mode = ($append) ? 'ab' : 'wb';
+
+ $fileexists = @file_exists($file);
+ io_makeFileDir($file);
+ io_lock($file);
+ if(substr($file,-3) == '.gz'){
+ $fh = @gzopen($file,$mode.'9');
+ if(!$fh){
+ msg("Writing $file failed",-1);
+ io_unlock($file);
+ return false;
+ }
+ gzwrite($fh, $content);
+ gzclose($fh);
+ }else if(substr($file,-4) == '.bz2'){
+ $fh = @bzopen($file,$mode{0});
+ if(!$fh){
+ msg("Writing $file failed", -1);
+ io_unlock($file);
+ return false;
+ }
+ bzwrite($fh, $content);
+ bzclose($fh);
+ }else{
+ $fh = @fopen($file,$mode);
+ if(!$fh){
+ msg("Writing $file failed",-1);
+ io_unlock($file);
+ return false;
+ }
+ fwrite($fh, $content);
+ fclose($fh);
+ }
+
+ if(!$fileexists and !empty($conf['fperm'])) chmod($file, $conf['fperm']);
+ io_unlock($file);
+ return true;
+}
+
+/**
+ * Delete exact linematch for $badline from $file.
+ *
+ * Be sure to include the trailing newline in $badline
+ *
+ * Uses gzip if extension is .gz
+ *
+ * 2005-10-14 : added regex option -- Christopher Smith <chris@jalakai.co.uk>
+ *
+ * @author Steven Danz <steven-danz@kc.rr.com>
+ * @return bool true on success
+ */
+function io_deleteFromFile($file,$badline,$regex=false){
+ if (!@file_exists($file)) return true;
+
+ io_lock($file);
+
+ // load into array
+ if(substr($file,-3) == '.gz'){
+ $lines = gzfile($file);
+ }else{
+ $lines = file($file);
+ }
+
+ // remove all matching lines
+ if ($regex) {
+ $lines = preg_grep($badline,$lines,PREG_GREP_INVERT);
+ } else {
+ $pos = array_search($badline,$lines); //return null or false if not found
+ while(is_int($pos)){
+ unset($lines[$pos]);
+ $pos = array_search($badline,$lines);
+ }
+ }
+
+ if(count($lines)){
+ $content = join('',$lines);
+ if(substr($file,-3) == '.gz'){
+ $fh = @gzopen($file,'wb9');
+ if(!$fh){
+ msg("Removing content from $file failed",-1);
+ io_unlock($file);
+ return false;
+ }
+ gzwrite($fh, $content);
+ gzclose($fh);
+ }else{
+ $fh = @fopen($file,'wb');
+ if(!$fh){
+ msg("Removing content from $file failed",-1);
+ io_unlock($file);
+ return false;
+ }
+ fwrite($fh, $content);
+ fclose($fh);
+ }
+ }else{
+ @unlink($file);
+ }
+
+ io_unlock($file);
+ return true;
+}
+
+/**
+ * Tries to lock a file
+ *
+ * Locking is only done for io_savefile and uses directories
+ * inside $conf['lockdir']
+ *
+ * It waits maximal 3 seconds for the lock, after this time
+ * the lock is assumed to be stale and the function goes on
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function io_lock($file){
+ global $conf;
+ // no locking if safemode hack
+ if($conf['safemodehack']) return;
+
+ $lockDir = $conf['lockdir'].'/'.md5($file);
+ @ignore_user_abort(1);
+
+ $timeStart = time();
+ do {
+ //waited longer than 3 seconds? -> stale lock
+ if ((time() - $timeStart) > 3) break;
+ $locked = @mkdir($lockDir, $conf['dmode']);
+ if($locked){
+ if(!empty($conf['dperm'])) chmod($lockDir, $conf['dperm']);
+ break;
+ }
+ usleep(50);
+ } while ($locked === false);
+}
+
+/**
+ * Unlocks a file
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function io_unlock($file){
+ global $conf;
+ // no locking if safemode hack
+ if($conf['safemodehack']) return;
+
+ $lockDir = $conf['lockdir'].'/'.md5($file);
+ @rmdir($lockDir);
+ @ignore_user_abort(0);
+}
+
+/**
+ * Create missing namespace directories and send the IO_NAMESPACE_CREATED events
+ * in the order of directory creation. (Parent directories first.)
+ *
+ * Event data:
+ * $data[0] ns: The colon separated namespace path minus the trailing page name.
+ * $data[1] ns_type: 'pages' or 'media' namespace tree.
+ *
+ * @author Ben Coburn <btcoburn@silicodon.net>
+ */
+function io_createNamespace($id, $ns_type='pages') {
+ // verify ns_type
+ $types = array('pages'=>'wikiFN', 'media'=>'mediaFN');
+ if (!isset($types[$ns_type])) {
+ trigger_error('Bad $ns_type parameter for io_createNamespace().');
+ return;
+ }
+ // make event list
+ $missing = array();
+ $ns_stack = explode(':', $id);
+ $ns = $id;
+ $tmp = dirname( $file = call_user_func($types[$ns_type], $ns) );
+ while (!@is_dir($tmp) && !(@file_exists($tmp) && !is_dir($tmp))) {
+ array_pop($ns_stack);
+ $ns = implode(':', $ns_stack);
+ if (strlen($ns)==0) { break; }
+ $missing[] = $ns;
+ $tmp = dirname(call_user_func($types[$ns_type], $ns));
+ }
+ // make directories
+ io_makeFileDir($file);
+ // send the events
+ $missing = array_reverse($missing); // inside out
+ foreach ($missing as $ns) {
+ $data = array($ns, $ns_type);
+ trigger_event('IO_NAMESPACE_CREATED', $data);
+ }
+}
+
+/**
+ * Create the directory needed for the given file
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function io_makeFileDir($file){
+ global $conf;
+
+ $dir = dirname($file);
+ if(!@is_dir($dir)){
+ io_mkdir_p($dir) || msg("Creating directory $dir failed",-1);
+ }
+}
+
+/**
+ * Creates a directory hierachy.
+ *
+ * @link http://www.php.net/manual/en/function.mkdir.php
+ * @author <saint@corenova.com>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function io_mkdir_p($target){
+ global $conf;
+ if (@is_dir($target)||empty($target)) return 1; // best case check first
+ if (@file_exists($target) && !is_dir($target)) return 0;
+ //recursion
+ if (io_mkdir_p(substr($target,0,strrpos($target,'/')))){
+ if($conf['safemodehack']){
+ $dir = preg_replace('/^'.preg_quote(fullpath($conf['ftp']['root']),'/').'/','', $target);
+ return io_mkdir_ftp($dir);
+ }else{
+ $ret = @mkdir($target,$conf['dmode']); // crawl back up & create dir tree
+ if($ret && $conf['dperm']) chmod($target, $conf['dperm']);
+ return $ret;
+ }
+ }
+ return 0;
+}
+
+/**
+ * Creates a directory using FTP
+ *
+ * This is used when the safemode workaround is enabled
+ *
+ * @author <andi@splitbrain.org>
+ */
+function io_mkdir_ftp($dir){
+ global $conf;
+
+ if(!function_exists('ftp_connect')){
+ msg("FTP support not found - safemode workaround not usable",-1);
+ return false;
+ }
+
+ $conn = @ftp_connect($conf['ftp']['host'],$conf['ftp']['port'],10);
+ if(!$conn){
+ msg("FTP connection failed",-1);
+ return false;
+ }
+
+ if(!@ftp_login($conn, $conf['ftp']['user'], conf_decodeString($conf['ftp']['pass']))){
+ msg("FTP login failed",-1);
+ return false;
+ }
+
+ //create directory
+ $ok = @ftp_mkdir($conn, $dir);
+ //set permissions
+ @ftp_site($conn,sprintf("CHMOD %04o %s",$conf['dmode'],$dir));
+
+ @ftp_close($conn);
+ return $ok;
+}
+
+/**
+ * Creates a unique temporary directory and returns
+ * its path.
+ *
+ * @author Michael Klier <chi@chimeric.de>
+ */
+function io_mktmpdir() {
+ global $conf;
+
+ $base = $conf['tmpdir'];
+ $dir = md5(uniqid(mt_rand(), true));
+ $tmpdir = $base.'/'.$dir;
+
+ if(io_mkdir_p($tmpdir)) {
+ return($tmpdir);
+ } else {
+ return false;
+ }
+}
+
+/**
+ * downloads a file from the net and saves it
+ *
+ * if $useAttachment is false,
+ * - $file is the full filename to save the file, incl. path
+ * - if successful will return true, false otherwise
+ *
+ * if $useAttachment is true,
+ * - $file is the directory where the file should be saved
+ * - if successful will return the name used for the saved file, false otherwise
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Chris Smith <chris@jalakai.co.uk>
+ */
+function io_download($url,$file,$useAttachment=false,$defaultName='',$maxSize=2097152){
+ global $conf;
+ $http = new DokuHTTPClient();
+ $http->max_bodysize = $maxSize;
+ $http->timeout = 25; //max. 25 sec
+
+ $data = $http->get($url);
+ if(!$data) return false;
+
+ if ($useAttachment) {
+ $name = '';
+ if (isset($http->resp_headers['content-disposition'])) {
+ $content_disposition = $http->resp_headers['content-disposition'];
+ $match=array();
+ if (is_string($content_disposition) &&
+ preg_match('/attachment;\s*filename\s*=\s*"([^"]*)"/i', $content_disposition, $match)) {
+
+ $name = basename($match[1]);
+ }
+
+ }
+
+ if (!$name) {
+ if (!$defaultName) return false;
+ $name = $defaultName;
+ }
+
+ $file = $file.$name;
+ }
+
+ $fileexists = @file_exists($file);
+ $fp = @fopen($file,"w");
+ if(!$fp) return false;
+ fwrite($fp,$data);
+ fclose($fp);
+ if(!$fileexists and $conf['fperm']) chmod($file, $conf['fperm']);
+ if ($useAttachment) return $name;
+ return true;
+}
+
+/**
+ * Windows compatible rename
+ *
+ * rename() can not overwrite existing files on Windows
+ * this function will use copy/unlink instead
+ */
+function io_rename($from,$to){
+ global $conf;
+ if(!@rename($from,$to)){
+ if(@copy($from,$to)){
+ if($conf['fperm']) chmod($to, $conf['fperm']);
+ @unlink($from);
+ return true;
+ }
+ return false;
+ }
+ return true;
+}
+
+
+/**
+ * Runs an external command and returns it's output as string
+ *
+ * @author Harry Brueckner <harry_b@eml.cc>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @deprecated
+ */
+function io_runcmd($cmd){
+ $fh = popen($cmd, "r");
+ if(!$fh) return false;
+ $ret = '';
+ while (!feof($fh)) {
+ $ret .= fread($fh, 8192);
+ }
+ pclose($fh);
+ return $ret;
+}
+
+/**
+ * Search a file for matching lines
+ *
+ * This is probably not faster than file()+preg_grep() but less
+ * memory intensive because not the whole file needs to be loaded
+ * at once.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @param string $file The file to search
+ * @param string $pattern PCRE pattern
+ * @param int $max How many lines to return (0 for all)
+ * @param bool $baxkref When true returns array with backreferences instead of lines
+ * @return matching lines or backref, false on error
+ */
+function io_grep($file,$pattern,$max=0,$backref=false){
+ $fh = @fopen($file,'r');
+ if(!$fh) return false;
+ $matches = array();
+
+ $cnt = 0;
+ $line = '';
+ while (!feof($fh)) {
+ $line .= fgets($fh, 4096); // read full line
+ if(substr($line,-1) != "\n") continue;
+
+ // check if line matches
+ if(preg_match($pattern,$line,$match)){
+ if($backref){
+ $matches[] = $match;
+ }else{
+ $matches[] = $line;
+ }
+ $cnt++;
+ }
+ if($max && $max == $cnt) break;
+ $line = '';
+ }
+ fclose($fh);
+ return $matches;
+}
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/af/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/af/lang.php
new file mode 100644
index 000000000..fce59d13e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/af/lang.php
@@ -0,0 +1,75 @@
+<?php
+/**
+ * af language file
+ *
+ * This file was initially built by fetching translations from other
+ * Wiki projects. See the @url lines below. Additional translations
+ * and fixes where done for DokuWiki by the people mentioned in the
+ * lines starting with @author
+ *
+ * @url http://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/languages/messages/MessagesAf.php?view=co
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['btn_edit'] = 'Wysig hierdie bladsy';
+$lang['btn_source'] = 'Bekyk bronteks';
+$lang['btn_search'] = 'Soek';
+$lang['btn_preview'] = 'Voorskou';
+$lang['btn_revs'] = 'geskiedenis';
+$lang['btn_recent'] = 'Onlangse wysigings';
+$lang['btn_cancel'] = 'Kanselleer';
+$lang['btn_secedit'] = 'Wysig';
+$lang['btn_login'] = 'Teken in';
+$lang['btn_logout'] = 'Teken uit';
+$lang['btn_back'] = 'Terug';
+$lang['btn_backlink'] = 'Wat skakel hierheen';
+$lang['btn_subscribe'] = 'Hou bladsy dop';
+$lang['btn_unsubscribe'] = 'Verwyder van bladsy dophoulys';
+$lang['btn_resendpwd'] = 'E-pos nuwe wagwoord';
+$lang['loggedinas'] = 'Ingeteken as';
+$lang['user'] = 'Gebruikernaam';
+$lang['pass'] = 'Wagwoord';
+$lang['newpass'] = 'Nuive wagwoord';
+$lang['oldpass'] = 'Ou wagwoord';
+$lang['passchk'] = 'Herhaal wagwoord';
+$lang['remember'] = 'Onthou my wagwoord oor sessies';
+$lang['fullname'] = 'Regte naam';
+$lang['email'] = 'E-pos';
+$lang['register'] = 'Skep gerus \'n rekening';
+$lang['badlogin'] = 'Intekenfout';
+$lang['minoredit'] = 'Klein wysiging';
+$lang['reguexists'] = 'Die gebruikersnaam wat jy gebruik het, is alreeds gebruik. Kies asseblief \'n ander gebruikersnaam.';
+$lang['regsuccess2'] = 'Rekening geskep';
+$lang['regbadpass'] = 'Die ingetikte wagwoorde is nie dieselfde nie.';
+$lang['regpwmail'] = 'Jo DokuWiki wagwoord';
+$lang['profnoempty'] = 'Jy moet \'n name en a e-posadres in sit';
+$lang['resendpwd'] = 'Stuir vir a niwe wagwoord';
+$lang['resendpwdmissing'] = 'Jammer, jy moet ales in fil';
+$lang['resendpwdconfirm'] = '\'n Bevestigingpos is gestuur na die gekose e-posadres.';
+$lang['resendpwdsuccess'] = 'Jou nuive wagwoord was deur e-pos gesteur';
+$lang['fileupload'] = 'Laai lêer';
+$lang['uploadsucc'] = 'Laai suksesvol';
+$lang['uploadfail'] = 'Laai fout';
+$lang['js']['hidedetails'] = 'Steek weg';
+$lang['mediaroot'] = 'root';
+$lang['toc'] = 'Inhoud';
+$lang['current'] = 'huidige';
+$lang['line'] = 'Streak';
+$lang['youarehere'] = 'Jy is hier';
+$lang['by'] = 'by';
+$lang['restored'] = 'Het terug gegaan na vroeëre weergawe';
+$lang['summary'] = 'Voorskou';
+$lang['qb_bold'] = 'Vetdruk';
+$lang['qb_italic'] = 'Skuinsdruk';
+$lang['qb_link'] = 'Interne skakel';
+$lang['qb_extlink'] = 'Eksterne skakel';
+$lang['qb_hr'] = 'Horisontale streep';
+$lang['qb_sig'] = 'Handtekening met datum';
+$lang['admin_register'] = 'Skep gerus \'n rekening';
+$lang['img_backto'] = 'Terug na';
+$lang['img_date'] = 'Datem';
+$lang['img_camera'] = 'Camera';
+$lang['i_wikiname'] = 'Wiki Naam';
+$lang['i_funcna'] = 'PHP funksie <code>%s</code> is nie beskibaar nie. Miskien is dit af gehaal.';
+$lang['mu_toobig'] = 'te groet';
+$lang['mu_done'] = 'klaar';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/admin.txt
new file mode 100644
index 000000000..7edee8a2b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/admin.txt
@@ -0,0 +1,3 @@
+====== الأدارة ======
+
+قائمة بالمهام الإدارية المتاحة ÙÙ‰ دوكي ويكي. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/backlinks.txt
new file mode 100644
index 000000000..f6d24f413
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/backlinks.txt
@@ -0,0 +1,3 @@
+====== إرتباطات ======
+
+هذه قائمة بالصÙحات المرتبطة بالصÙحة الحالية. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/conflict.txt
new file mode 100644
index 000000000..4d7c4e8e7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/conflict.txt
@@ -0,0 +1,5 @@
+====== يوجد نسخة أحدث ======
+
+يوجد نسخة أحدث من هذه الصÙحة. يحدث هذا عندما يحرر مشترك آخر الصÙحة أثناء تعديلك لها.
+
+اÙحص الاختلاÙات جيداً، ثم حدد أية نسخة تحÙظ. بالضغط على "Ø­Ùظ" ستحÙظ نسختك. أما بالضغط على "إلغاء" ÙستحاÙظ على النسخة الحالية. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/denied.txt
new file mode 100644
index 000000000..0703697b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/denied.txt
@@ -0,0 +1,3 @@
+====== ممنوع ======
+
+عذرا، ليس مصرح لك الاستمرار، لعلك نسيت تسجيل الدخول \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/diff.txt
new file mode 100644
index 000000000..ed1937c2f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/diff.txt
@@ -0,0 +1,3 @@
+====== اختلاÙات ======
+
+عرض الاختلاÙات بين النسخة المختارة Ùˆ النسخة الحالية من الصÙحة. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/draft.txt
new file mode 100644
index 000000000..a6221b0df
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/draft.txt
@@ -0,0 +1,5 @@
+====== وجدت مسوّدة ======
+
+إن تعديلك لهذه الصÙحة ÙÙŠ المرة الماضية لم يتم بشكل صحيح، Ø­Ùظت دوكي ويكي آلياً مسوّدة من عملك الأخير الذي يمكنك استخدامه الآن لمتابعة التعديل. Ùيما يلي البيانات التي Ø­Ùظت من المرة الماضية.
+
+يرجى أن تقرر إن كنت تريد //استعادة// عملك السابق أو //حذÙ// المسوّدة أو //إلغاء// عملية التحرير.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/edit.txt
new file mode 100644
index 000000000..d4e1eb43b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/edit.txt
@@ -0,0 +1 @@
+حرر هذه الصÙحة ثم اضغط على "Ø­Ùظ". انظر [[wiki:syntax|دليل الصياغة]] لمعرÙØ© صيغة الويكي. يرجى تعديل الصÙحة Ùقط إذا كنت ستحسنها. إذا رغبت ÙÙ‰ اختبار شيء ما، تعلم الخطوات الأولى ÙÙ‰ [[playground:playground|الملعب]]. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/editrev.txt
new file mode 100644
index 000000000..a51fe9436
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/editrev.txt
@@ -0,0 +1,2 @@
+**لقد حملت نسخة قديمة من الصÙحة!** إذا Ø­Ùظتها، سيتم إنشاء نسخة جديدة بهذه المعلومات.
+---- \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/index.txt
new file mode 100644
index 000000000..43840ec26
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/index.txt
@@ -0,0 +1,3 @@
+====== Ùهرس ======
+
+هذا Ùهرس لجميع الصÙحات مرتبة حسب [[doku>namespaces|namespaces]].
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/lang.php
new file mode 100644
index 000000000..2ba1f7e9f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/lang.php
@@ -0,0 +1,223 @@
+<?php
+/**
+ * Arabic language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Mostafa Hussein <mostafa@gmail.com>
+ * @author Yaman Hokan <always.smile.yh@hotmail.com>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'rtl';
+$lang['doublequoteopening'] = '“';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '‘';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = 'Ø›';
+$lang['btn_edit'] = 'تحرير هذه الصÙحة';
+$lang['btn_source'] = 'عرض مصدر الصÙحة';
+$lang['btn_show'] = 'عرض الصÙحة';
+$lang['btn_create'] = 'إنشاء هذه الصÙحة';
+$lang['btn_search'] = 'بحث';
+$lang['btn_save'] = 'Ø­Ùظ';
+$lang['btn_preview'] = 'استعراض';
+$lang['btn_top'] = 'لأعلى';
+$lang['btn_newer'] = '<< أحدث';
+$lang['btn_older'] = 'أقدم >>';
+$lang['btn_revs'] = 'نسخ قديمة';
+$lang['btn_recent'] = 'أحدث التعديلات';
+$lang['btn_upload'] = 'تحميل';
+$lang['btn_cancel'] = 'إلغاء';
+$lang['btn_index'] = 'Ùهرس';
+$lang['btn_secedit'] = 'تحرير';
+$lang['btn_login'] = 'دخول';
+$lang['btn_logout'] = 'خروج';
+$lang['btn_admin'] = 'المدير';
+$lang['btn_update'] = 'تحديث';
+$lang['btn_delete'] = 'حذÙ';
+$lang['btn_back'] = 'رجوع';
+$lang['btn_backlink'] = 'ارتباطات';
+$lang['btn_backtomedia'] = 'رجوع إلى اختيار مل٠الوسائط';
+$lang['btn_subscribe'] = 'اشترك ÙÙŠ التعديلات';
+$lang['btn_unsubscribe'] = 'إلغاء الاشتراك ÙÙŠ التعديلات';
+$lang['btn_profile'] = 'تحديث المل٠الشخصي';
+$lang['btn_reset'] = 'تÙريغ';
+$lang['btn_resendpwd'] = 'إرسال كلمة مرور جديدة';
+$lang['btn_draft'] = 'تحرير المسوّدة';
+$lang['btn_recover'] = 'استعادة المسوّدة';
+$lang['btn_draftdel'] = 'حذ٠المسوّدة';
+$lang['btn_revert'] = 'إعادة';
+$lang['loggedinas'] = 'دخول باسم';
+$lang['user'] = 'اسم المشترك';
+$lang['pass'] = 'كلمة المرور';
+$lang['newpass'] = 'كلمة مرور جديدة';
+$lang['oldpass'] = 'تأكيد كلمة المرور الحالية';
+$lang['passchk'] = 'مرة أخرى';
+$lang['remember'] = 'تذكرني';
+$lang['fullname'] = 'الاسم الكامل';
+$lang['email'] = 'البريد الإلكتروني';
+$lang['register'] = 'تسجيل';
+$lang['profile'] = 'المل٠الشخصي';
+$lang['badlogin'] = 'عذرا، اسم المشترك أو كلمة المرور غير صحيحة';
+$lang['minoredit'] = 'تعديلات Ø·ÙÙŠÙØ©';
+$lang['draftdate'] = 'تشغيل Ø­Ùظ المسوّدة آلياً';
+$lang['regmissing'] = 'عذرا، يجب ملء جميع الخانات';
+$lang['reguexists'] = 'عذرا، يوجد مشترك بنÙس الاسم';
+$lang['regsuccess'] = 'تم تسجيل المشترك و أرسلت كلمة المرور عبر البريد الإلكتروني';
+$lang['regsuccess2'] = 'تم إنشاء المشترك';
+$lang['regmailfail'] = 'حدث خطأ ÙÙ‰ إرسال رسالة كلمة المرور. يرجى مراسلة المدير';
+$lang['regbadmail'] = 'البريد الإلكتروني المعطى غير صحيح، إن كنت تظن الخطأ من الموقع راسل المدير';
+$lang['regbadpass'] = 'كلمتى المرور غير متطابقتين، حاول مرة أخرى';
+$lang['regpwmail'] = 'كلمة مرورك إلى دوكي ويكي';
+$lang['reghere'] = 'لست مشتركاً؟ تÙضل اشترك';
+$lang['profna'] = 'هذه الويكي لا تدعم تعديل المل٠الشخصي';
+$lang['profnochange'] = 'لا تغييرات، لا شيء مطلوب عمله';
+$lang['profnoempty'] = 'ليس مسموحاً ترك الاسم أو البريد الإلكتروني Ùارغاً';
+$lang['profchanged'] = 'تم تحديث المل٠الشخصي بنجاح';
+$lang['pwdforget'] = 'نسيت كلمة المرور؟ احصل على واحدة جديدة';
+$lang['resendna'] = 'هذه الويكي لا تدعم إعادة إرسال كلمة المرور';
+$lang['resendpwd'] = 'إرسال كلمة المرور إلى';
+$lang['resendpwdmissing'] = 'عذراّ، يجب أن تملأ جميع الخانات';
+$lang['resendpwdnouser'] = 'عذراً، لدينا هذا المشترك ÙÙŠ قاعدة بياناتنا';
+$lang['resendpwdbadauth'] = 'عذراً، رمز التÙعيل هذا غير صحيح. نأكد أنك استخدمت كامل وصلة التأكيد';
+$lang['resendpwdconfirm'] = 'تم إرسال وصلة تأكيد إلى بريدك الإلكتروني';
+$lang['resendpwdsuccess'] = 'كلمة مرورك الجديدة تم إرسالها عبر البريد الإلكتروني';
+$lang['searchmedia'] = 'البحث عن اسم المل٠: ';
+$lang['txt_upload'] = 'اختر ملÙاً للتحميل';
+$lang['txt_filename'] = 'تحميل باسم - اختياري';
+$lang['txt_overwrt'] = 'الكتابة على مل٠موجود بنÙس الاسم مسموحة';
+$lang['lockedby'] = 'حالياً مقÙول بواسطة';
+$lang['lockexpire'] = 'سينتهي القÙÙ„ ÙÙŠ';
+$lang['willexpire'] = 'سينتهي Ù‚ÙÙ„ تحرير هذه الصÙحه خلال دقيقة. لتجنب التعارض استخدم زر استعراض لبدأ القÙÙ„ من جديد';
+$lang['notsavedyet'] = 'التعديلات التي لم تحÙظ ستÙقد. أمواÙÙ‚ ØŸ';
+$lang['rssfailed'] = 'خطأ ما حدث أثناء جلب مل٠التغذية:';
+$lang['nothingfound'] = 'لا يوجد شيء';
+$lang['mediaselect'] = 'ملÙات الوسائط المتعددة';
+$lang['fileupload'] = 'تحميل مل٠وسائط متعددة';
+$lang['uploadsucc'] = 'تم التحميل بنجاح';
+$lang['uploadfail'] = 'Ùشل التحميل، قد يكون الخطأ ÙÙ‰ التراخيص؟';
+$lang['uploadwrong'] = 'التحميل ممنوع، نوع المل٠مرÙوض!';
+$lang['uploadexist'] = 'المل٠موجود أصلاً. لم يحدث شيء';
+$lang['uploadbadcontent'] = 'المحتوى المحمّل لم يتطابق مع نوع المل٠%s';
+$lang['uploadspam'] = 'التحميل محجوب بواسطة القائمة السوداء لبرنامج تقÙÙŠ التطÙÙ„';
+$lang['uploadxss'] = 'التحميل محجوب لمنع المحتويات الخبيثة';
+$lang['uploadsize'] = 'المل٠الذي تم رÙعه كبير جدا . ( الحد الأقصى %s )';
+$lang['deletesucc'] = 'تم حذ٠المل٠"%s"';
+$lang['deletefail'] = 'لا يمكن حذ٠"%s"، تأكد من تراخيصك';
+$lang['mediainuse'] = 'لم يحذ٠المل٠"%s"، مازال موجوداً';
+$lang['namespaces'] = 'Ùضاء التسمية';
+$lang['mediafiles'] = 'ملÙات موجودة ÙÙŠ';
+$lang['js']['searchmedia'] = 'البحث عن الملÙات';
+$lang['js']['keepopen'] = 'أبقي الناÙذة Ù…Ùتوحة أثناء الاختيار';
+$lang['js']['hidedetails'] = 'إخÙاء التÙاصيل';
+$lang['js']['nosmblinks'] = 'الروابط لمجلدات ويندوز المشاركة تعمل Ùقط مع متصÙØ­ مايكروسÙت Internet Explorer. ما زال بإمكانك قص Ùˆ لصق الرابط.';
+$lang['js']['linkto'] = 'الرابط إلى :';
+$lang['js']['del_confirm'] = 'هل حقاً تريد حذ٠البنود المختارة؟';
+$lang['js']['mu_btn'] = 'رÙع عدة ملÙات ÙÙŠ وقت واحد';
+$lang['mediausage'] = 'استخدم هذه الصياغة للدلالة على هذا الملÙ:';
+$lang['mediaview'] = 'عرض المل٠الأصلي';
+$lang['mediaroot'] = 'الجذر';
+$lang['mediaupload'] = 'تحميل مل٠إلى Ùضاء التسمية هنا. لإنشاء Ùضاءات تسمية Ùرعية، أضÙها إلى بداية خانة تحميل باسم واÙصل بينها باستخدام الÙواصل';
+$lang['mediaextchange'] = 'تم تغيير نوع المل٠من .%s إلى .%s!';
+$lang['reference'] = 'مراجع لـ';
+$lang['ref_inuse'] = 'لا يمكن حذ٠الملÙØŒ لأنه مستخدم من قبل الصÙحات التالية:';
+$lang['ref_hidden'] = 'بعض المراجع لصÙاحات لا تملك ترخيص برؤيتها';
+$lang['hits'] = 'زوار';
+$lang['quickhits'] = 'صÙحات بهذا الاسم';
+$lang['toc'] = 'جدول المحتويات';
+$lang['current'] = 'حالي';
+$lang['yours'] = 'نسختك';
+$lang['diff'] = 'مقارنة بالنسخة الحالية';
+$lang['diff2'] = 'مقارنة بين النسخ المختارة';
+$lang['line'] = 'سطر';
+$lang['breadcrumb'] = 'أثر';
+$lang['youarehere'] = 'أنت هنا';
+$lang['lastmod'] = 'آخر تعديل';
+$lang['by'] = 'بواسطة';
+$lang['deleted'] = 'تم حذÙ';
+$lang['created'] = 'تم إنشاء';
+$lang['restored'] = 'عودة لنسخة قديمة';
+$lang['external_edit'] = 'تحرير خارجي';
+$lang['summary'] = 'ملخص التحرير';
+$lang['mail_newpage'] = 'إضاÙØ© صÙحة:';
+$lang['mail_changed'] = 'تعديل صÙحة:';
+$lang['mail_new_user'] = 'مشترك جديد';
+$lang['mail_upload'] = 'تحميل ملÙ:';
+$lang['qb_bold'] = 'نص عريض';
+$lang['qb_italic'] = 'نص مائل';
+$lang['qb_underl'] = 'نص مسطر';
+$lang['qb_code'] = 'نص برمجي';
+$lang['qb_strike'] = 'نص مشطوب';
+$lang['qb_h1'] = 'عنوان مستوى أول';
+$lang['qb_h2'] = 'عنوان مستوى ثاني';
+$lang['qb_h3'] = 'عنوان مستوى ثالث';
+$lang['qb_h4'] = 'عنوان مستوى رابع';
+$lang['qb_h5'] = 'عنوان مستوى خامس';
+$lang['qb_link'] = 'رابط داخلي';
+$lang['qb_extlink'] = 'رابط خارجي';
+$lang['qb_hr'] = 'سطر Ø£Ùقي';
+$lang['qb_ol'] = 'بند ÙÙ‰ قائمة مرتبة';
+$lang['qb_ul'] = 'بند ÙÙ‰ قائمة غير مرتبة';
+$lang['qb_media'] = 'إضاÙØ© صور Ùˆ ملÙات أخرى';
+$lang['qb_sig'] = 'أض٠توقيعك';
+$lang['qb_smileys'] = 'الابتسامات';
+$lang['qb_chars'] = 'محار٠خاصة';
+$lang['admin_register'] = 'إضاÙØ© مشترك جديد';
+$lang['metaedit'] = 'تحرير البيانات الشمولية ';
+$lang['metasaveerr'] = 'Ùشلت عملية كتابة البيانات الشمولية';
+$lang['metasaveok'] = 'تم Ø­Ùظ البيانت الشمولية';
+$lang['img_backto'] = 'العودة إلى';
+$lang['img_title'] = 'العنوان';
+$lang['img_caption'] = 'تنويه الصورة';
+$lang['img_date'] = 'التاريخ';
+$lang['img_fname'] = 'اسم الملÙ';
+$lang['img_fsize'] = 'الحجم';
+$lang['img_artist'] = 'المصور';
+$lang['img_copyr'] = 'حقوق النسخ';
+$lang['img_format'] = 'صيغ رسومية';
+$lang['img_camera'] = 'آلة التصوير';
+$lang['img_keywords'] = 'كلمات Ù…Ùتاحية';
+$lang['subscribe_success'] = 'تم إضاÙØ© %s لقائمة الاشتراكات %s';
+$lang['subscribe_error'] = 'حدث خطأ ÙÙ‰ إضاÙØ© %s لقائمة الاشتراكات %s';
+$lang['subscribe_noaddress'] = 'لا يوجد عنوان مرÙÙ‚ مع بيانات تسجيلك، لا يمكن إضاÙتك إلى قائمة الاشتراكات';
+$lang['unsubscribe_success'] = 'تم حذÙ%s من قائمة الاشتراكات %s';
+$lang['unsubscribe_error'] = 'حدث خطأ ÙÙ‰ حذ٠%s من قائمة الاشتراكات %s';
+$lang['authmodfailed'] = 'إعدادات تصريح Ùاسدة، يرجى مراسلة المدير.';
+$lang['authtempfail'] = 'تصريح المشترك غير متوÙر مؤقتاً، إن استمرت هذه الحالة يرجى مراسلة المدير';
+$lang['i_chooselang'] = 'اختر لغتك';
+$lang['i_installer'] = 'برنامج تنصيب دوكي ويكي';
+$lang['i_wikiname'] = 'اسم الويكي';
+$lang['i_enableacl'] = 'تÙعيل ACL - Ù…Ùضل';
+$lang['i_superuser'] = 'مشرÙ';
+$lang['i_problems'] = 'وجد برنامج التنصيب المشاكل التالية، لا يمكنك المتابعة قبل حلها.';
+$lang['i_modified'] = 'لأسباب أمنية هذا البرنامج سيعمل Ùقط مع تنصيب دوكي ويكي جديد Ùˆ غير معدّل.
+يجب أن تعيد ÙÙƒ ضغط الملÙات مرة أخرى من المكتبة المضغوطة، أو راجع <a href="http://dokuwiki.org/install"> تعليمات تنصيب دوكي ويكي </a> ';
+$lang['i_funcna'] = 'دالة PHP التالية غير متوÙرة.
+<code>%s</code>
+قد يكون مزود خدمة الاستÙادة قد حجبها لسبب ما.';
+$lang['i_phpver'] = 'نسخة PHP التي لديك هي
+<code>%s</code>
+وهي أقل من النسخة المطلوبة
+<code>%s</code>
+عليك تحديث نسخة PHP';
+$lang['i_permfail'] = 'إن <code>%s</code> غير قابل للكتابة بواسطة دوكي ويكي، عليك تعديل إعدادات الصلاحيات لهذا المجلد!';
+$lang['i_confexists'] = 'إن <code>%s</code> موجود أصلاً';
+$lang['i_writeerr'] = 'لا يمكن إنشاء <code>%s</code>، عليك التأكد من صلاحيات المل٠أو المجلد وإنشاء المل٠يدوياً.';
+$lang['i_badhash'] = 'المل٠dokuwiki.php غير مصن٠أو قد تم تعديله
+(hash=<code>%s</code>)';
+$lang['i_badval'] = 'القيمة <code>%s</code> غير شرعية أو Ùارغة';
+$lang['i_success'] = 'الإعدادات تمت بنجاح، يرجى حذ٠المل٠install.php الآن.
+ثم تابع إلى <a href="doku.php"> دوكي ويكي الجديدة</a>';
+$lang['i_failure'] = 'بعض الأخطاء حدثت أثنا كتابة ملÙات الإعدادات، عليك تعديلها يدوياً قبل أن تستطيع استخدام <a href="doku.php"> دوكي ويكي الجديدة</a>';
+$lang['i_policy'] = 'تصريح ACL مبدئي';
+$lang['i_pol0'] = 'ويكي Ù…Ùتوحة؛ أي القراءة والكتابة والتحميل مسموحة للجميع';
+$lang['i_pol1'] = 'ويكي عامة؛ أي القراءة للجميع ولكن الكتابة والتحميل للمشتركين المسجلين Ùقط';
+$lang['i_pol2'] = 'ويكي مغلقة؛ أي القراءة والكتابة والتحميل للمشتركين المسجلين Ùقط';
+$lang['i_retry'] = 'إعادة المحاولة';
+$lang['mu_gridname'] = 'اسم الملÙ';
+$lang['mu_gridsize'] = 'الحجم';
+$lang['mu_gridstat'] = 'الحالة';
+$lang['mu_toobig'] = 'كبير جدا';
+$lang['mu_ready'] = 'جاهز للرÙع';
+$lang['mu_done'] = 'اكتمل';
+$lang['mu_fail'] = 'Ùشل';
+$lang['mu_info'] = 'تم رÙع الملÙات';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/locked.txt
new file mode 100644
index 000000000..72e9be535
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/locked.txt
@@ -0,0 +1,3 @@
+====== الصÙحة مقÙلة ======
+
+هذه الصÙحة مقÙلة للتحرير بواسطة مستخدم أخر. عليك أن تنتظر حتى ينتهى من تعديلاتة أو تتنتهى مدة القÙÙ„. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/login.txt
new file mode 100644
index 000000000..00ffccdd0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/login.txt
@@ -0,0 +1,3 @@
+====== دخول ======
+
+أنت لست مسجل دخولك. أدخل بيانات تسجيلك للدخول. يجب أن يكون مسموح للمتصÙØ­ بأستخدام الكوكي.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/mailtext.txt
new file mode 100644
index 000000000..541d28da2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/mailtext.txt
@@ -0,0 +1,17 @@
+تم تغيير أو أضاÙØ© صÙحة ÙÙ‰ دوكيويكي. اليك التÙاصيل:
+
+التاريخ : @DATE@
+المتصÙØ­ : @BROWSER@
+عنوان الـIP : @IPADDRESS@
+أسم الجهاز : @HOSTNAME@
+النسخة القديمة: @OLDPAGE@
+النسخة الجديدة: @NEWPAGE@
+ملخص التحرير: @SUMMARY@
+مستخدم : @USER@
+
+@DIFF@
+
+
+--
+تم أرسال هذه الرسالة من الدوكيويكي المتوجدة ÙÙ‰
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/newpage.txt
new file mode 100644
index 000000000..ecaa7fa38
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/newpage.txt
@@ -0,0 +1,3 @@
+====== لا يوجد هذا الموضوع بعد ======
+
+لقد تابعت رابط لموضوع غير متواجد بعد. يمكنك إنشائة بالضعط على زر "انشيء هذه الصÙحة".
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/norev.txt
new file mode 100644
index 000000000..2aa2330e1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/norev.txt
@@ -0,0 +1,3 @@
+====== لا توجد تلك النسخة ======
+
+النسخة المختارة ليست موجودة. أسبخدم زر "نسخ قديمة" لعرض قائمة بالنسخ القديمة من هذه الصÙحة.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/preview.txt
new file mode 100644
index 000000000..c537e6b26
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/preview.txt
@@ -0,0 +1,3 @@
+====== عرض التعديلات ======
+
+هذا عرض لما سيصبح علية نص الصÙحة. تذكر أن التعديلات **لم تحÙظ** بعد!
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/pwconfirm.txt
new file mode 100644
index 000000000..6b735e291
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/pwconfirm.txt
@@ -0,0 +1,8 @@
+مرحبا @ الاسم الكامل @
+
+شخص ما طلب كلمة سر جديدة لـحسابك @ المعر٠@ ÙÙŠ @ DOKUWIURL @
+إذا لم تكن قد طلبت كلمة سر جديدة رجاء قم بتجاهل هذه الرسالة .
+لتأكيد أنك أنت قمت بطلب كلمة السر الجديدة . نرجو منك الضغط على الرابط ÙÙŠ الأسÙÙ„ .
+@ التأكيد @
+ --
+لقد تم عمل هذه الرسالة من قبل DokuWiki .. ÙÙŠ @ DOKUWIKIURL @ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/read.txt
new file mode 100644
index 000000000..3e6c504ff
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/read.txt
@@ -0,0 +1 @@
+هذه الصÙحة للقراءة Ùقط. يمكنك تصÙØ­ مصدرها، ولكن لا يمكنك تعديلها. إن كنت تتعتÙد أن هناك خطأ ما خاطب المدير. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/recent.txt
new file mode 100644
index 000000000..94d68401e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/recent.txt
@@ -0,0 +1,3 @@
+====== احدث التغييرات ======
+
+تم تعديل الصÙحات التالية حديثا. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/register.txt
new file mode 100644
index 000000000..57406ddd4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/register.txt
@@ -0,0 +1,3 @@
+====== سجل كمستخدم جديد ======
+
+أملئ البيانات التالية لتسجيل حساب جديد على الويكي. تأكد من كتابة **بريد إلكترونى صحيح** - سترسل اليك كلمة سر جديدة. أسم الدخول يجب أن يكون [[doku>pagename|أسم صÙحة]] صحيح.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/resendpwd.txt
new file mode 100644
index 000000000..e9f6690ae
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/resendpwd.txt
@@ -0,0 +1,3 @@
+==== إرسال رقم سري جديد ====
+
+رجاء اكتب اسم المستخدم ÙÙŠ الاستمارة الموجودة ÙÙŠ الأسÙÙ„ ليتم طلب رقم سري جديد لحسابك ÙÙŠ هذا الويكي . سيتم إرسال رابط لتأكيد طلبك إلى بريدك الإلكتروني المسجل . \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/revisions.txt
new file mode 100644
index 000000000..930a4ef5c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/revisions.txt
@@ -0,0 +1,2 @@
+====== النسخ القديمة ======
+النسخ القديمة للصÙحة الحالية. لإستعادة نسخة قديمة: أخترها من المعروض، ثم إضغط على زر "عدل هذه الصÙحة" Ùˆ أحÙظها. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/searchpage.txt
new file mode 100644
index 000000000..62c05f5e4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/searchpage.txt
@@ -0,0 +1,5 @@
+====== بحث ======
+
+نتائج البحث . إن لم تجد ما تبحث عنه، يمكنك إنشاء صÙحة جديدة بعنوان ما تبحث عنة بالضغط على زر "حرر هذه الصÙحة".
+
+===== نتائج البحث ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/showrev.txt
new file mode 100644
index 000000000..30129071c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/showrev.txt
@@ -0,0 +1,2 @@
+**هذه نسخة قديمة من الصÙحة!**
+---- \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/stopwords.txt
new file mode 100644
index 000000000..bc6eb48ae
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/stopwords.txt
@@ -0,0 +1,29 @@
+# This is a list of words the indexer ignores, one word per line
+# When you edit this file be sure to use UNIX line endings (single newline)
+# No need to include words shorter than 3 chars - these are ignored anyway
+# This list is based upon the ones found at http://www.ranks.nl/stopwords/
+about
+are
+and
+you
+your
+them
+their
+com
+for
+from
+into
+how
+that
+the
+this
+was
+what
+when
+where
+who
+will
+with
+und
+the
+www
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/subscribermail.txt
new file mode 100644
index 000000000..c9894570e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/subscribermail.txt
@@ -0,0 +1,17 @@
+أهلاً!
+
+الصÙحة @PAGE@ ÙÙ‰ @TITLE@ ويكي تم تعديلها.
+ها هى التعديلات:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+لإلغاء إشتراكك ÙÙ‰ تلك الصÙحة أدخل على الويكي على العنوان
+@DOKUWIKIURL@ ثم أذهب الى
+@NEWPAGE@
+و أختار 'إلغاء أشتراكك'.
+
+--
+تم ارسال هذه الرسالة من دوكيويكي
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/updateprofile.txt
new file mode 100644
index 000000000..04a5a09d5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/updateprofile.txt
@@ -0,0 +1,3 @@
+==== تحديث بيانات حسابك ====
+
+عليك Ùقط أن تكمل كتابة الحقول التي تريد أن تغيرها . لا تستطيع تغيير اسم المستخدم . \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/admin.txt
new file mode 100644
index 000000000..8d16f68aa
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/admin.txt
@@ -0,0 +1,3 @@
+====== ÐдминиÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ ======
+
+Долу може да намерите ÑпиÑък Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸ÑтраторÑки задачи в DokuWiki. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/adminplugins.txt
new file mode 100644
index 000000000..2b0268ed4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/adminplugins.txt
@@ -0,0 +1 @@
+===== Допълнителни Plugins ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/backlinks.txt
new file mode 100644
index 000000000..28801a8ee
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/backlinks.txt
@@ -0,0 +1,3 @@
+====== Задни връзки ======
+
+Това е ÑпиÑък на Ñтраници, които изглежда препращат обратно към текущата Ñтраница.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/conflict.txt
new file mode 100644
index 000000000..51ec4b706
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/conflict.txt
@@ -0,0 +1,6 @@
+====== По-нова верÑÐ¸Ñ ÑъшеÑтвува ======
+
+По-нова верÑÐ¸Ñ Ð½Ð° документа който Ñте редактирали ÑъщеÑтвува. Това Ñе Ñлучва когато друг потребител е променил документа докато Ñте го редактирали.
+
+Разгледайте внимателно разгледайте разликите показани долу, Ñлед това решете ÐºÐ¾Ñ Ð²ÐµÑ€ÑÐ¸Ñ Ð´Ð° запазите. Ðко изберете ''ЗапиÑ'', верÑÐ¸Ñ Ð’Ð¸ ще бъде запазена. Изберете ''Отказ'', за да запазите текущата верÑиÑ.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/denied.txt
new file mode 100644
index 000000000..7b1d5788e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/denied.txt
@@ -0,0 +1,4 @@
+====== Отказан доÑтъп ======
+
+ÐÑмате доÑтатъчно права да продължите. Може би Ñте забравили да влезете?
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/diff.txt
new file mode 100644
index 000000000..2bd8262c6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/diff.txt
@@ -0,0 +1,4 @@
+====== Разлики ======
+
+Тук Ñа показани разликите между избраната верÑÐ¸Ñ Ð½Ð° Ñтраницата и текущата.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/draft.txt
new file mode 100644
index 000000000..1938e7d9c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/draft.txt
@@ -0,0 +1,6 @@
+====== Ðамерена чернова ======
+
+ПоÑледната редакционна ÑеÑÐ¸Ñ Ð½Ð° тази Ñтраница не е завършена правилно. Dokuwiki автоматично запазва чернова по време на работа, коÑто може Ñега да използвате, за да продължите редактирането Ñи. Долу може да видите данните, които бÑха запазени от поÑледната ÑеÑиÑ.
+
+ÐœÐ¾Ð»Ñ Ñ€ÐµÑˆÐµÑ‚Ðµ, дали иÑкате да //recover// поÑледната Ñи редакционна ÑеÑиÑ, да //delete// автоматично запазената чернова или да //cancel// редакциÑта.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/edit.txt
new file mode 100644
index 000000000..90d376dbc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/edit.txt
@@ -0,0 +1,2 @@
+Редактирайте Ñтраницата и натиÑнете ''ЗапиÑ''. Погледнете [[wiki:syntax]] за Wiki ÑинтакÑиÑ. ÐœÐ¾Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð°Ð¹Ñ‚Ðµ Ñтраницата, Ñамо ако може да Ñ **подобрите**. Ðко иÑкате да пробвате разни неща, научете Ñе да правите първите Ñи Ñтъпки в [[playground:playground|пÑÑъчника]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/editrev.txt
new file mode 100644
index 000000000..87e7b26a8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/editrev.txt
@@ -0,0 +1,2 @@
+**Заредили Ñте Ñтара верÑÐ¸Ñ Ð½Ð° документа!** Ðко Ñ Ð·Ð°Ð¿Ð°Ð·Ð¸Ñ‚Ðµ, ще Ñъздадете нова Ñ€ÐµÐ´Ð°ÐºÑ†Ð¸Ñ Ñ Ñ‚ÐµÐºÑƒÑ‰Ð¸Ñ‚Ðµ данни.
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/index.txt
new file mode 100644
index 000000000..2ebf5128a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/index.txt
@@ -0,0 +1,4 @@
+====== Ð˜Ð½Ð´ÐµÐºÑ ======
+
+Това е ÑпиÑък на вÑички доÑтъпни Ñтраници подредени по [[doku>namespaces|именни проÑтранÑтва]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/install.html
new file mode 100644
index 000000000..0d7fd5232
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/install.html
@@ -0,0 +1,25 @@
+<p>Тази Ñтраница помага при първоначална инÑÑ‚Ð°Ð»Ð°Ñ†Ð¸Ñ Ð¸ наÑтройка на
+<a href="http://dokuwiki.org">Dokuwiki</a>. Повече информациÑ
+за този инÑталатор е доÑтъпна в неговата ÑобÑтвена
+<a href="http://dokuwiki.org/installer">документациÑ</a>.</p>
+
+<p>Dokuwiki използва обикновени файлове за хранилище на уики Ñтраниците и друга
+Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ñвързана Ñ Ñ‚ÐµÐ·Ð¸ Ñтраници(примерно картинки, Ñ‚ÑŠÑ€Ñене, Ñтари верÑии, Ñ‚.н.).
+За да използвате уÑпешно DokuWiki
+<strong>Ñ‚Ñ€Ñбва</strong> да имате доÑтъп за пиÑане в директориите които Ñъдържат тези
+файлове. Този инÑталатор нÑма възможноÑти да наÑтройва правата на директориите.
+Това обикновено Ñ‚Ñ€Ñбва да бъде направено директно от командниÑÑ‚ ред или ако
+използвате хоÑтинг - през FTP или контрол панела на хоÑта(примерно cPanel).</p>
+
+<p>Този инÑталатор ще наÑтрои вашата DokuWiki ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ð·Ð°
+<acronym title="access control list">ACL</acronym>, което на
+Ñвой ред ще позволи на админиÑтратора да влезе и да има доÑтъп
+до админиÑтраторÑкото меню в DokuWiki за инÑталиране на плъгини, контрол
+на потребители, управление да доÑтъп до уики Ñтраници и промÑна на наÑтройките
+Това не е необходимо на DokuWiki да работи, но ще направи DokuWiki по-леÑно за
+админиÑтриране.</p>
+
+<p>Опитните потребители или потребителите ÑÑŠÑ Ñпециални изиÑкваниÑ
+към наÑтройките може да използват тези връзки за детайли Ñвързани Ñ
+<a href="http://dokuwiki.org/install">инÑтрукции за инÑталациÑ</a>
+и <a href="http://dokuwiki.org/config">наÑтройка</a>.</p>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/lang.php
new file mode 100644
index 000000000..2c306095d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/lang.php
@@ -0,0 +1,247 @@
+<?php
+/**
+ * Bulgarian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Nikolay Vladimirov <nikolay@vladimiroff.com>
+ * @author Viktor Usunov <usun0v@mail.bg>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '“';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '‘';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = '’';
+$lang['btn_edit'] = 'Редактиране';
+$lang['btn_source'] = 'Показване на кода на Ñтраницата';
+$lang['btn_show'] = 'Показване на Ñтраница';
+$lang['btn_create'] = 'Създаване на Ñтраница';
+$lang['btn_search'] = 'ТърÑене';
+$lang['btn_save'] = 'ЗапиÑ';
+$lang['btn_preview'] = 'Преглед';
+$lang['btn_top'] = 'Към началото';
+$lang['btn_newer'] = '<< по-нови';
+$lang['btn_older'] = 'по-Ñтари >>';
+$lang['btn_revs'] = 'ИÑториÑ';
+$lang['btn_recent'] = 'ПоÑледни промени';
+$lang['btn_upload'] = 'Качване';
+$lang['btn_cancel'] = 'Отказ';
+$lang['btn_index'] = 'ИндекÑ';
+$lang['btn_secedit'] = 'Редактиране';
+$lang['btn_login'] = 'Вход';
+$lang['btn_logout'] = 'Изход';
+$lang['btn_admin'] = 'ÐаÑтройки';
+$lang['btn_update'] = 'ОбновÑване';
+$lang['btn_delete'] = 'Изтриване';
+$lang['btn_back'] = 'Ðазад';
+$lang['btn_backlink'] = 'Обратни връзки';
+$lang['btn_backtomedia'] = 'Ðазад към избор на медиен файл';
+$lang['btn_subscribe'] = 'Ðбониране за Промени';
+$lang['btn_unsubscribe'] = 'ОтпиÑване от Промени';
+$lang['btn_subscribens'] = 'Ðбониране за Промени на именно проÑтранÑтво';
+$lang['btn_unsubscribens'] = 'ОтпиÑване от Промени на именно проÑтранÑтво';
+$lang['btn_profile'] = 'Ðктуализирай Профила';
+$lang['btn_reset'] = 'ИзчиÑтване';
+$lang['btn_resendpwd'] = 'Пращане на нова парола';
+$lang['btn_draft'] = 'Редактиране на чернова';
+$lang['btn_recover'] = 'ВъзÑтановÑване на чернова';
+$lang['btn_draftdel'] = 'Изтриване на чернова';
+$lang['btn_revert'] = 'ВъзÑтановÑване';
+$lang['loggedinas'] = 'Влезли Ñте като';
+$lang['user'] = 'Потребител';
+$lang['pass'] = 'Парола';
+$lang['newpass'] = 'Ðова парола';
+$lang['oldpass'] = 'Потвърждение на текуща парола';
+$lang['passchk'] = 'oтново';
+$lang['remember'] = 'Запомни ме';
+$lang['fullname'] = 'Пълно име';
+$lang['email'] = 'Електронна поща';
+$lang['register'] = 'РегиÑтрациÑ';
+$lang['profile'] = 'ПотребителÑки профил';
+$lang['badlogin'] = 'ПотребителÑкото име или паролата Ñа грешни';
+$lang['minoredit'] = 'Ðезначителни промени';
+$lang['draftdate'] = 'Черновата бе автоматично запиÑана на';
+$lang['nosecedit'] = 'Страницата бе междувременно променена, презареждане на Ñтраницата поради неактуална информациÑ.';
+$lang['regmissing'] = 'МолÑ, попълнете вÑички полета.';
+$lang['reguexists'] = 'Потребител Ñ Ñ‚Ð°ÐºÐ¾Ð²Ð° име вече ÑъщеÑтвува.';
+$lang['regsuccess'] = 'ПотребителÑÑ‚ бе Ñъздаден и паролата бе пратена на електронната поща.';
+$lang['regsuccess2'] = 'ПотребителÑÑ‚ бе Ñъздаден.';
+$lang['regmailfail'] = 'Изглежда, че има проблем Ñ Ð¿Ñ€Ð°Ñ‰Ð°Ð½ÐµÑ‚Ð¾ на пиÑмото Ñ Ð¿Ð°Ñ€Ð¾Ð»Ð°Ñ‚Ð°. МолÑ, Ñвържете Ñе Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñтратора.';
+$lang['regbadmail'] = 'ВъведениÑÑ‚ Ð°Ð´Ñ€ÐµÑ Ð¸Ð·Ð³Ð»ÐµÐ¶Ð´Ð° невалиден - ако миÑлите, че това е грешка, Ñвържете Ñе Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñтратора.';
+$lang['regbadpass'] = 'Двете въведени пароли не Ñъвпадат, Ð¼Ð¾Ð»Ñ Ð¾Ð¿Ð¸Ñ‚Ð°Ð¹Ñ‚Ðµ отново';
+$lang['regpwmail'] = 'Парола за DokuWiki';
+$lang['reghere'] = 'ÐÑмате профил вÑе още? Ðаправете Ñи!';
+$lang['profna'] = 'Това Wiki не поддържа промÑна на профила';
+$lang['profnochange'] = 'ÐÑма промени.';
+$lang['profnoempty'] = 'Ðевъведено име или електронна поща не Ñа позволени.';
+$lang['profchanged'] = 'ПотребителÑкиÑÑ‚ профил бе уÑпешно обновен.';
+$lang['pwdforget'] = 'Забравили Ñте Ñи паролата? Въведете нова.';
+$lang['resendna'] = 'Това Wiki не поддържа повторно пращане на парола';
+$lang['resendpwd'] = 'Изпращане на нова парола за';
+$lang['resendpwdmissing'] = 'МолÑ, попълнете вÑички полета.';
+$lang['resendpwdnouser'] = 'ПотребителÑÑ‚ не бе намерен в базата данни.';
+$lang['resendpwdbadauth'] = 'Този код за потвърждение е невалиден. Проверете дали Ñте използвали целиÑÑ‚ линк за потвърждение.';
+$lang['resendpwdconfirm'] = 'ÐдреÑÑŠÑ‚ за потвърждение бе пратен по електронната поща.';
+$lang['resendpwdsuccess'] = 'Паролата ви бе изпратена на електронната поща.';
+$lang['license'] = 'ОÑвен ако не е поÑочено друго, Ñъдържанието на това Wiki е лицензирано под ÑÐ»ÐµÐ´Ð½Ð¸Ñ Ð»Ð¸Ñ†ÐµÐ½Ð·:';
+$lang['licenseok'] = 'Имайте предвид, че чрез редактирането на тази Ñтраница, Вие Ñе ÑъглаÑÑвате Ñъдържанието й да бъде лицензирано под ÑÐ»ÐµÐ´Ð½Ð¸Ñ Ð»Ð¸Ñ†ÐµÐ½Ð·:';
+$lang['searchmedia'] = 'ТърÑене на файл: ';
+$lang['searchmedia_in'] = 'ТърÑене в %s';
+$lang['txt_upload'] = 'Изберете файл за качване ';
+$lang['txt_filename'] = 'Качване като (по избор)';
+$lang['txt_overwrt'] = 'Ð—Ð°Ð¿Ð¸Ñ Ð²ÑŠÑ€Ñ…Ñƒ ÑъщеÑтвуващ файл';
+$lang['lockedby'] = 'В момента е заключено от';
+$lang['lockexpire'] = 'ЗатварÑнето изтича в';
+$lang['willexpire'] = 'ЗатварÑнето на Ñтраницата за редактиране изтича Ñлед минута.\nЗа да избегнете противоречиÑ, използвайте бутона, за да реÑтартирате броÑчът за затварÑне.';
+$lang['notsavedyet'] = 'Ðезапазените промени ще бъдат загубени.\nИÑкате ли да продължите?';
+$lang['rssfailed'] = 'Възникна грешка при вземането на този feed: ';
+$lang['nothingfound'] = 'Ðищо не бе намерено.';
+$lang['mediaselect'] = 'Медийни файлове';
+$lang['fileupload'] = 'Качване на медийни файлове';
+$lang['uploadsucc'] = 'Качването бе уÑпешно';
+$lang['uploadfail'] = 'Качването бе неуÑпешно. Може би поради грешни права?';
+$lang['uploadwrong'] = 'Качването бе отказано. Това файлово разширение е забранено!';
+$lang['uploadexist'] = 'Файлът вече ÑъщеÑтвува. Ðищо не бе направено.';
+$lang['uploadbadcontent'] = 'Каченото Ñъдържание на ÑъответÑтва на файлово разширение %s .';
+$lang['uploadspam'] = 'Качването бе блокирано от Ñпам ÑпиÑъка.';
+$lang['uploadxss'] = 'Качването бе блокирано, заради възможно обидно Ñъдържание.';
+$lang['uploadsize'] = 'Файльт за качване бе прекалено голÑм. (макÑ. %s)';
+$lang['deletesucc'] = 'Файлът "%s" бе изтрит.';
+$lang['deletefail'] = '"%s" не бе изтрит, проверете правата';
+$lang['mediainuse'] = 'Файлът "%s" не бе изтрит - вÑе още Ñе ползва.';
+$lang['namespaces'] = 'Именни проÑтранÑтва';
+$lang['mediafiles'] = 'ДоÑтъпни файлове в';
+$lang['js']['searchmedia'] = 'ТърÑи файлове';
+$lang['js']['keepopen'] = 'Задържане на прозореца отворен при избор';
+$lang['js']['hidedetails'] = 'Скрий детайлите';
+$lang['js']['nosmblinks'] = 'Връзките към Windows shares работÑÑ‚ Ñамо под Internet Explorer.
+Можете да копирате и поÑтавите връзката.';
+$lang['js']['linkwiz'] = 'Линк Ñъветник';
+$lang['js']['linkto'] = 'Линк към: ';
+$lang['js']['del_confirm'] = 'Да бъдат ли изтрити избраните елементи?';
+$lang['js']['mu_btn'] = 'Качване на нÑколко файла наведнъж';
+$lang['mediausage'] = 'Използвайте ÑледниÑÑ‚ ÑинтакÑ, за да упоменете файла:';
+$lang['mediaview'] = 'Преглед на Ð¾Ñ€Ð¸Ð³Ð¸Ð½Ð°Ð»Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð»';
+$lang['mediaroot'] = 'root';
+$lang['mediaupload'] = 'Качете файл в текущото именнопроÑтранÑтво тук. За да Ñъздадете подименни проÑтранÑтва, добавете ги в началото на "Качи като" име на файл, разделени Ñ Ð´Ð²Ð¾ÐµÑ‚Ð¾Ñ‡Ð¸Ðµ.';
+$lang['mediaextchange'] = 'Разширението на файла бе Ñменено от .%s на .%s!';
+$lang['reference'] = 'Референции за';
+$lang['ref_inuse'] = 'Файлът не може да бъде изтрит, защото вÑе още Ñе ползва от Ñледните Ñтраници:';
+$lang['ref_hidden'] = 'ÐÑкои препратки Ñа към Ñтраници, които нÑмате права да четете';
+$lang['hits'] = 'СъвпадениÑ';
+$lang['quickhits'] = 'Съвпадащи имена на Ñтраници';
+$lang['toc'] = 'Съдържание';
+$lang['current'] = 'текущо';
+$lang['yours'] = 'Вашата верÑиÑ';
+$lang['diff'] = 'Преглед на разликите Ñ Ñ‚ÐµÐºÑƒÑ‰Ð°Ñ‚Ð° верÑиÑ';
+$lang['diff2'] = 'Показване на разликите между избрани преработки';
+$lang['line'] = 'Ред';
+$lang['breadcrumb'] = 'Следа';
+$lang['youarehere'] = 'Ðамирате Ñе в';
+$lang['lastmod'] = 'ПоÑледна промÑна';
+$lang['by'] = 'от';
+$lang['deleted'] = 'изтриване';
+$lang['created'] = 'Ñъздаване';
+$lang['restored'] = 'възÑтановена предишна верÑиÑ';
+$lang['external_edit'] = 'външна редакциÑ';
+$lang['summary'] = 'Обобщение';
+$lang['noflash'] = '<a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> е необходим за показване на Ñъдържанието.';
+$lang['download'] = 'ИзтеглÑне на фрагмент';
+$lang['mail_newpage'] = 'добавена Ñтраница:';
+$lang['mail_changed'] = 'променена Ñтраница:';
+$lang['mail_new_user'] = 'нов потребител:';
+$lang['mail_upload'] = 'качен файл: ';
+$lang['qb_bold'] = 'Удебелен текÑÑ‚';
+$lang['qb_italic'] = 'КурÑив текÑÑ‚';
+$lang['qb_underl'] = 'Подчертан текÑÑ‚';
+$lang['qb_code'] = 'Код';
+$lang['qb_strike'] = 'Зачеркнат текÑÑ‚';
+$lang['qb_h1'] = 'Заглавие ниво 1';
+$lang['qb_h2'] = 'Заглавие ниво 2';
+$lang['qb_h3'] = 'Заглавие ниво 3';
+$lang['qb_h4'] = 'Заглавие ниво 4';
+$lang['qb_h5'] = 'Заглавие ниво 5';
+$lang['qb_h'] = 'Заглавие';
+$lang['qb_hs'] = 'Избери заглавие';
+$lang['qb_hplus'] = 'ОÑновно заглавие';
+$lang['qb_hminus'] = 'Подзаглавие';
+$lang['qb_hequal'] = 'Заглавие на Ñъщото ниво';
+$lang['qb_link'] = 'Вътрешна препратка';
+$lang['qb_extlink'] = 'Външна препратка';
+$lang['qb_hr'] = 'Хоризонтална линиÑ';
+$lang['qb_ol'] = 'Подреден ÑпиÑък';
+$lang['qb_ul'] = 'Ðеподреден ÑпиÑък';
+$lang['qb_media'] = 'ДобавÑне на Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¸ други файлове';
+$lang['qb_sig'] = 'Вмъкване на подпиÑ';
+$lang['qb_smileys'] = 'УÑмивчици';
+$lang['qb_chars'] = 'Специални знаци';
+$lang['upperns'] = 'Към Ñвьрзано именно проÑтранÑтво';
+$lang['admin_register'] = 'ДобабÑне на нов потребител';
+$lang['metaedit'] = 'Редактиране на метаданни';
+$lang['metasaveerr'] = 'Запазването на метаданните бе неуÑпешно';
+$lang['metasaveok'] = 'Метаданните бÑха запазени';
+$lang['img_backto'] = 'Ðазад към';
+$lang['img_title'] = 'Заглавие';
+$lang['img_caption'] = 'ÐадпиÑ';
+$lang['img_date'] = 'Дата';
+$lang['img_fname'] = 'Име на файл';
+$lang['img_fsize'] = 'Размер';
+$lang['img_artist'] = 'ЗаÑнет от';
+$lang['img_copyr'] = 'ÐвторÑко право';
+$lang['img_format'] = 'Формат';
+$lang['img_camera'] = 'Фотоапарат';
+$lang['img_keywords'] = 'Ключови думи';
+$lang['subscribe_success'] = '%s бе добавен към абонамента за %s';
+$lang['subscribe_error'] = 'Имаше грешка при добавÑнето на абонамента на %s за %s';
+$lang['subscribe_noaddress'] = 'ÐÑма Ð°Ð´Ñ€ÐµÑ Ñвързан Ñ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ñ, не може да Ñе абонирате';
+$lang['unsubscribe_success'] = 'Ðбонаментът %s бе премахнат от ÑпиÑъка за %s';
+$lang['unsubscribe_error'] = 'Имаше грешка при премахването на абонамента на %s от ÑпиÑъка %s';
+$lang['authmodfailed'] = 'Лоша наÑтройка за удоÑтоверÑване на потребителÑ. МолÑ, уведомете админиÑтратора.';
+$lang['authtempfail'] = 'УдоÑтоверÑването на потребителите е временно недоÑтъпно. Ðко това продължи дълго, Ð¼Ð¾Ð»Ñ ÑƒÐ²ÐµÐ´Ð¾Ð¼ÐµÑ‚Ðµ админиÑтратора.';
+$lang['i_chooselang'] = 'Избор на език';
+$lang['i_installer'] = 'ИнÑталатор на DokuWiki';
+$lang['i_wikiname'] = 'Име на Wiki';
+$lang['i_enableacl'] = 'Включване на ÑпиÑъци за доÑтъп ACL (препоръчително)';
+$lang['i_superuser'] = 'Супер потребител';
+$lang['i_problems'] = 'ИнÑталатора намери проблеми указани по-долу. Ðе може да продължите, докато не ги отÑтраните.';
+$lang['i_modified'] = 'Поради мерки за ÑигурноÑÑ‚ този Ñкрипт ще работи Ñамо Ñ Ð½Ð¾Ð²Ð° и непроменена Dokuwiki инÑталациÑ. ТрÑбва да разархивирате отново файловете от Ð´Ñ€ÑŠÐ¿Ð½Ð°Ñ‚Ð¸Ñ Ð¿Ð°ÐºÐµÑ‚ или да Ñе поÑъветвате Ñ Ð¿ÑŠÐ»Ð½Ð¸Ñ‚Ðµ <a href="http://dokuwiki.org/install">ИнÑтрукции за инÑÑ‚Ð°Ð»Ð°Ñ†Ð¸Ñ Ð½Ð° Dokuwiki</a>.';
+$lang['i_funcna'] = 'PHP функциÑта <code>%s</code> не е доÑтъпна. Може би е забранена от доÑтавчика на хоÑтинг.';
+$lang['i_phpver'] = 'Вашата PHP верÑÐ¸Ñ <code>%s</code> е по-Ñтара от необходимата <code>%s</code>. Обновете PHP инÑталациÑта Ñи.';
+$lang['i_permfail'] = '<code>%s</code> не е доÑтъпна за пиÑане от DokuWiki. ТрÑбва да промените наÑтройките за доÑтъп до директориÑта!';
+$lang['i_confexists'] = '<code>%s</code> вече ÑъщеÑтвува';
+$lang['i_writeerr'] = '<code>%s</code> не можа да бъде Ñъздаден. ТрÑбва да проверите правата на директориÑта/файла за доÑтъп и да Ñъздадете файл ръчно.';
+$lang['i_badhash'] = 'неразпознат или променен dokuwiki.php (hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - непозволена или празна ÑтойноÑÑ‚';
+$lang['i_success'] = 'ÐаÑтройката приключи уÑпешно. Може да Ñъздадете файлът install.php Ñега. Продължете към
+ <a href="doku.php">Ðово Ви DokuWiki</a>.';
+$lang['i_failure'] = 'Имаше грешки при запиÑа на файловете Ñ Ð½Ð°Ñтройки. Може да Ñ‚Ñ€Ñбва да ги редактирате ръчно. Ползвайте <a href="doku.php">Ðово Ви DokuWiki</a>.';
+$lang['i_policy'] = 'Първоначална политика за доÑтъп ACL';
+$lang['i_pol0'] = 'Отворено Wiki (четене, пиÑане, качване от вÑички)';
+$lang['i_pol1'] = 'Публично Wiki (четене от вÑички, пиÑане и качване от региÑтрирани потребители)';
+$lang['i_pol2'] = 'Затворено Wiki (четене, пиÑане, качване Ñамо от региÑтрирани потребители)';
+$lang['i_retry'] = 'Повторен опит';
+$lang['mu_intro'] = 'Тук можете да качите нÑколко файла наведнъж. Добавете ги към Ñъответните полета и натиÑнете бутона за качване.
+';
+$lang['mu_gridname'] = 'Име на файл';
+$lang['mu_gridsize'] = 'Големина';
+$lang['mu_gridstat'] = 'СъÑтоÑние';
+$lang['mu_namespace'] = 'Именно проÑтранÑтво';
+$lang['mu_browse'] = 'Избери';
+$lang['mu_toobig'] = 'прекалено голÑм';
+$lang['mu_ready'] = 'готов за качване';
+$lang['mu_done'] = 'приключен';
+$lang['mu_fail'] = 'неуÑпешен';
+$lang['mu_authfail'] = 'ÑеÑиÑта изтече';
+$lang['mu_progress'] = '@PCT@% качен';
+$lang['mu_filetypes'] = 'Позволени файлови разширениÑ';
+$lang['mu_info'] = 'качени файлове';
+$lang['mu_lasterr'] = 'ПоÑледна грешка:';
+$lang['recent_global'] = 'Ð’ момента преглеждате промените в <b>%s</b> именно проÑтранÑтво. Може да прегледате и <a href="%s">промените на цÑлото Wiki</a>.';
+$lang['years'] = 'преди %d години';
+$lang['months'] = 'преди %d меÑеци';
+$lang['weeks'] = 'преди %d Ñедмици';
+$lang['days'] = 'преди %d дни';
+$lang['hours'] = 'преди %d чаÑа';
+$lang['minutes'] = 'преди %d минути';
+$lang['seconds'] = 'преди %d Ñекунди';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/locked.txt
new file mode 100644
index 000000000..0eecc6729
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/locked.txt
@@ -0,0 +1,3 @@
+====== Страницата е затворена ======
+
+Ð’ момента Ñтраницата е затворена за Ñ€ÐµÐ´Ð°ÐºÑ†Ð¸Ñ Ð¾Ñ‚ друг потребител. ТрÑбва да изчаката докато този потребител приключи или затварÑнето изтече.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/login.txt
new file mode 100644
index 000000000..b525f08cf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/login.txt
@@ -0,0 +1,3 @@
+====== Вход ======
+
+Ð’ момента не Ñте влезли! Въведете данните Ñи долу, за да го направите. БиÑквитките (cookies) Ñ‚Ñ€Ñбва да Ñа включени.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/mailtext.txt
new file mode 100644
index 000000000..8c18767e5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/mailtext.txt
@@ -0,0 +1,16 @@
+Страница във DokuWiki бе добавена или променена. Ето детайлите:
+
+Дата : @DATE@
+Браузър : @BROWSER@
+IP-Ð°Ð´Ñ€ÐµÑ : @IPADDRESS@
+Име на хоÑÑ‚ : @HOSTNAME@
+Стара верÑиÑ: @OLDPAGE@
+Ðова верÑÐ¸Ñ : @NEWPAGE@
+Обобщение : @SUMMARY@
+Потребител : @USER@
+
+@DIFF@
+
+
+--
+Това пиÑмо е генерирано от DokuWiki на Ð°Ð´Ñ€ÐµÑ @DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/newpage.txt
new file mode 100644
index 000000000..fcc1c6257
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/newpage.txt
@@ -0,0 +1,4 @@
+====== ÐеÑъщеÑтвуваща тема ======
+
+ПоÑледвали Ñте връзка към тема, коÑто вÑе още не ÑъщеÑтвува. Ðко правата Ви позволÑват, може да Ñ Ñъздадете като използвате бутона ''Създаване на Ñтраницата''
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/norev.txt
new file mode 100644
index 000000000..0262aef60
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/norev.txt
@@ -0,0 +1,4 @@
+====== ÐÑма такава верÑÐ¸Ñ ======
+
+Избраната верÑÐ¸Ñ Ð½Ðµ ÑъщеÑтвува. Използвайте бутона ''Редакции'' за ÑпиÑък на Ñтари верÑии на документа.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/preview.txt
new file mode 100644
index 000000000..442f16de2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/preview.txt
@@ -0,0 +1,3 @@
+====== Преглед ======
+
+Ето как ще изглежда текÑта. Той обаче вÑе още **не е запазен** !
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/pwconfirm.txt
new file mode 100644
index 000000000..1cd64b151
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/pwconfirm.txt
@@ -0,0 +1,14 @@
+Здравейте @FULLNAME@!
+
+ÐÑкой е поиÑкал нова парола за Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ñ @TITLE@
+на @DOKUWIKIURL@
+
+Ðко не Ñте поиÑкали нова парола, товава проÑто игнорирайте това пиÑмо.
+
+За да потвърдите, че иÑкането е наиÑтина пратено от ваÑ, Ð¼Ð¾Ð»Ñ Ð¸Ð·Ð¿Ð¾Ð»Ð·Ð²Ð°Ð¹Ñ‚Ðµ
+ÑÐ»ÐµÐ´Ð½Ð¸Ñ Ð°Ð´Ñ€ÐµÑ.
+
+@CONFIRM@
+
+--
+Това пиÑмо е генерирано от DokuWiki на Ð°Ð´Ñ€ÐµÑ @DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/read.txt
new file mode 100644
index 000000000..89e9a9d70
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/read.txt
@@ -0,0 +1,2 @@
+Тази Ñтраница е позволена Ñамо за четене. Може да разгледате кода, но не и да го променÑта. Обърнете Ñе Ñъм админиÑтратора Ñи, ако миÑлите, че това е грешно.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/recent.txt
new file mode 100644
index 000000000..262979e34
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/recent.txt
@@ -0,0 +1,4 @@
+====== ПоÑледни промени ======
+
+Следните Ñтраници Ñа били променени наÑкоро.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/register.txt
new file mode 100644
index 000000000..74a07cd90
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/register.txt
@@ -0,0 +1,4 @@
+====== РегиÑтрирайте Ñе като нов потребител ======
+
+МолÑ, попълнете вÑичката Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð´Ð¾Ð»Ñƒ, за да Ñъздадете нов профил в това уики. Бъдете Ñигурни, че подавате **валиден Ð°Ð´Ñ€ÐµÑ Ð½Ð° електронна поща** - ако не Ñе пита за парола тук, нова ще бъде пратена на този адреÑ. ПотребителÑкото име Ñ‚Ñ€Ñбва да бъде валидно [[doku>pagename|име на Ñраница]]
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/registermail.txt
new file mode 100644
index 000000000..7839b0910
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/registermail.txt
@@ -0,0 +1,13 @@
+Ðов потребител беше региÑтриран. Ето детайлите:
+
+Потребител : @NEWUSER@
+Пълно име : @NEWNAME@
+E-поща : @NEWEMAIL@
+
+Дата : @DATE@
+Браузър : @BROWSER@
+IP-Ð°Ð´Ñ€ÐµÑ : @IPADDRESS@
+Име на хоÑта: @HOSTNAME@
+
+--
+Това пиÑмо е генерирано от DokuWiki на Ð°Ð´Ñ€ÐµÑ @DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/resendpwd.txt
new file mode 100644
index 000000000..7b9b9a027
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/resendpwd.txt
@@ -0,0 +1,3 @@
+====== Пращане на нова парола ======
+
+МолÑ, въведете потребителÑкото Ñи име във формулÑра долу, за да поиÑкате нова парола за вашиÑÑ‚ профил в това Wiki. Връзка за потвърждение ще ви бъде пратена на региÑтрираниÑÑ‚ в това Wiki Ð°Ð´Ñ€ÐµÑ Ð½Ð° електронна поща.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/revisions.txt
new file mode 100644
index 000000000..295f5f6cc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/revisions.txt
@@ -0,0 +1,4 @@
+====== Стари редакции ======
+
+Това Ñа Ñтари редакции на този документ. За да възÑтановите Ñтара верÑиÑ, изберете Ñ Ð´Ð¾Ð»Ñƒ, натиÑнете ''Редактиране'' и Ñ Ð·Ð°Ð¿Ð°Ð·ÐµÑ‚Ðµ.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/searchpage.txt
new file mode 100644
index 000000000..03e019985
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/searchpage.txt
@@ -0,0 +1,5 @@
+====== ТърÑене ======
+
+Може да намерите резултатите на Ñ‚ÑŠÑ€Ñенето долу. Ðко не Ñте намерили каквото Ñте Ñ‚ÑŠÑ€Ñили, може да Ñъздадете или редактирате Ñтраница кръÑтена по вашета заÑвка за Ñ‚ÑŠÑ€Ñене ÑÑŠÑ ÑъответниÑÑ‚ бутон
+
+===== Резултати =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/showrev.txt
new file mode 100644
index 000000000..c0b1709fe
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/showrev.txt
@@ -0,0 +1,2 @@
+**Това е Ñтара Ñ€ÐµÐ´Ð°ÐºÑ†Ð¸Ñ Ð½Ð° документа**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/stopwords.txt
new file mode 100644
index 000000000..369f4d789
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/stopwords.txt
@@ -0,0 +1,29 @@
+# Това е ÑпиÑък на думи за игнориране, Ñ ÐµÐ´Ð½Ð° дума на ред
+# Когато редактирате този файл, не забравÑйте да използвате UNIX Ñимвол за нов ред
+# Ðе е нужно да включвате думи по-кратки от 3 Ñимвола - те Ñа игнорирани така или иначе
+# Този ÑпиÑък Ñе оÑновава на думи намерени на http://www.ranks.nl/stopwords/
+about
+are
+and
+you
+your
+them
+their
+com
+for
+from
+into
+how
+that
+the
+this
+was
+what
+when
+where
+who
+will
+with
+und
+the
+www
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/subscribermail.txt
new file mode 100644
index 000000000..51d4f005a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/subscribermail.txt
@@ -0,0 +1,16 @@
+Привет!
+
+Страницата @PAGE@ в @TITLE@ уиките бе променена.
+Ето промените:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+За да Ñе отпишете от тази Ñтраница, влезте в уикито на
+@DOKUWIKIURL@ тогава отидете на
+@NEWPAGE@
+и изберете 'ОтпиÑване от промените'.
+
+--
+Това пиÑмо е генерирано от DokuWiki на Ð°Ð´Ñ€ÐµÑ @DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/updateprofile.txt
new file mode 100644
index 000000000..0a6f15297
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/updateprofile.txt
@@ -0,0 +1,3 @@
+====== Обновете профила Ñи ======
+
+ТрÑбва Ñамо да допълните полетата, които иÑкате да промените. Ðе може да ÑменÑте потребителÑкото Ñи име.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/uploadmail.txt
new file mode 100644
index 000000000..74f0cdc3e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/uploadmail.txt
@@ -0,0 +1,13 @@
+Бе качен файл на вашето DokuWiki. Ето детайлите
+
+Файл : @MEDIA@
+Дата : @DATE@
+Браузeр : @BROWSER@
+IP-ÐÐ´Ñ€ÐµÑ : @IPADDRESS@
+Име на хоÑÑ‚ : @HOSTNAME@
+Размер : @SIZE@
+MIME Тип : @MIME@
+Потребител : @USER@
+
+--
+Tова пиÑмо е генерирано от DokuWiki на Ð°Ð´Ñ€ÐµÑ @DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/wordblock.txt
new file mode 100644
index 000000000..1afbae21d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/wordblock.txt
@@ -0,0 +1,3 @@
+====== Блокиран СПÐÐœ ======
+
+Промените ви **не** бÑха запазени, защото Ñъдържат една или повече забранени думи. Ðко Ñте Ñе опитали да пуÑнете Ñпам в уикито и таз хубава! Ðко ÑмÑтате, че това е грешка, Ñвържете Ñе Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñтратора на това Wiki.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/admin.txt
new file mode 100644
index 000000000..628948e86
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/admin.txt
@@ -0,0 +1,4 @@
+====== Administració ======
+
+Avall pot trobar una llista de tasques administratives disponibles en DokuWiki.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/adminplugins.txt
new file mode 100644
index 000000000..6c5c4f90d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/adminplugins.txt
@@ -0,0 +1 @@
+===== Plúgins adicionals ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/backlinks.txt
new file mode 100644
index 000000000..06a1106f6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/backlinks.txt
@@ -0,0 +1,3 @@
+====== Vínculs remitents ======
+
+Una llista de pàgines que pareixen vincular a la pàgina actual. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/conflict.txt
new file mode 100644
index 000000000..67319612d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/conflict.txt
@@ -0,0 +1,6 @@
+====== Ya existix una versió més nova ======
+
+Existix una versió més nova del document que ha editat. Açò ha passat perque un atre usuari ha modificat el document mentres vosté estava editant-lo.
+
+Estudie be les diferències mostrades avall i decidixca quina versió vol guardar. Si pulsa ''Guardar'' es guardarà la versió que està editant. Pulse ''Cancelar'' per a conservar la versió modificada per l'atre usuari..
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/denied.txt
new file mode 100644
index 000000000..39c45d946
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/denied.txt
@@ -0,0 +1,4 @@
+====== Permís denegat ======
+
+Disculpe, pero no té permís per a continuar. ¿Haurà oblidat iniciar sessió?
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/diff.txt
new file mode 100644
index 000000000..2b5c60e1c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/diff.txt
@@ -0,0 +1,4 @@
+====== Diferències ======
+
+Ací es mostren les diferències entre dos versions de la pàgina.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/draft.txt
new file mode 100644
index 000000000..e7e814a69
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/draft.txt
@@ -0,0 +1,6 @@
+====== Borrador trobat ======
+
+L'última edició d'esta pàgina no es completà correctament. DokuWiki guarda automàticament un borrador que ara pot recuperar per a continuar editant. Avall pot vore la data en que es guardà l'últim borrador.
+
+Per favor, decidixca si vol //recuperar// la sessió que pergué, //borrar// el borrador o //cancelar// esta edició.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/edit.txt
new file mode 100644
index 000000000..e1ca6bf23
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/edit.txt
@@ -0,0 +1,2 @@
+Edite la pàgina i pulse 'Guardar". Consulte la [[wiki:syntax|Sintaxis]] del Wiki. Per favor, edite la pàgina només **si pot millorar-la**. Si vol fer proves, deprenga a utilisar el Wiki en el [[playground:playground|espai de proves]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/editrev.txt
new file mode 100644
index 000000000..99188a0e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/editrev.txt
@@ -0,0 +1,2 @@
+**¡Ha carregat una versió antiga del document!** Si la guarda crearà una nova versió en el contingut d'esta.
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/index.txt
new file mode 100644
index 000000000..5e57c1680
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/index.txt
@@ -0,0 +1,4 @@
+====== Ãndex ======
+
+Un índex de totes les pàgines disponibles ordenades per [[doku>namespaces|espais de noms]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/install.html
new file mode 100644
index 000000000..eb77cd648
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/install.html
@@ -0,0 +1,11 @@
+<p>Esta pàgina l'ajudarà en la primera instalació i configuració de <a href="http://dokuwiki.org">Dokuwiki</a>. N'hi ha més informació de l'instalador disponible en la
+<a href="http://dokuwiki.org/installer">pàgina de documentació</a>.</p>
+
+<p>DokuWiki utilisa archius corrents per a l'almagasenament de les pàgines del wiki i atra informació associada ad estes pàgines (p. e. imàgens, índexs de busca, versions antigues, etc.). Per a que DokuWiki funcione correctament
+<strong>deu</strong> tindre accés d'escritura als directoris que contenen estos archius. Est instalador no pot ajustar els permissos del directori. Normalment haurà de fer-ho directament en una consola de del sistema o, si utilisa un hostage, per FTP o en el panel de control (p. e. cPanel).</p>
+
+<p>Est instalador configurarà <acronym title="access control list">ACL</acronym> en el seu DokuWiki, que al mateix temps permet l'accés de l'administrador i l'accés al menú d'administració de DokuWiki per a instalar plúgins, gestionar usuaris, gestionar els accessos a les pàgines del wiki i la modificació dels ajusts de configuració. No és necessari per a que DokuWiki funcione, pero farà més fàcil la seua administració.</p>
+
+<p>Els usuaris experimentats o en necessitats especials de configuració deuen utilisar estos vínculs per a informació referent a
+<a href="http://dokuwiki.org/install">instruccions d'instalació</a>
+i <a href="http://dokuwiki.org/config">ajusts de configuració</a>.</p>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/lang.php
new file mode 100644
index 000000000..d85cc1c06
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/lang.php
@@ -0,0 +1,250 @@
+<?php
+/**
+ * valencian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Bernat Arlandis i Mañó <berarma@ya.com>
+ * @author Bernat Arlandis <berarma@ya.com>
+ * @author Bernat Arlandis <berarma@llenguaitecnologia.com>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '“';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '‘';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = '’';
+$lang['btn_edit'] = 'Editar esta pàgina';
+$lang['btn_source'] = 'Mostrar font';
+$lang['btn_show'] = 'Mostrar pàgina';
+$lang['btn_create'] = 'Crear esta pàgina';
+$lang['btn_search'] = 'Buscar';
+$lang['btn_save'] = 'Guardar';
+$lang['btn_preview'] = 'Vista prèvia';
+$lang['btn_top'] = 'Tornar dalt';
+$lang['btn_newer'] = '<< més recents';
+$lang['btn_older'] = 'manco recents >>';
+$lang['btn_revs'] = 'Versions antigues';
+$lang['btn_recent'] = 'Canvis recents';
+$lang['btn_upload'] = 'Pujar';
+$lang['btn_cancel'] = 'Cancelar';
+$lang['btn_index'] = 'Ãndex';
+$lang['btn_secedit'] = 'Editar';
+$lang['btn_login'] = 'Iniciar sessió';
+$lang['btn_logout'] = 'Tancar sessió';
+$lang['btn_admin'] = 'Administrar';
+$lang['btn_update'] = 'Actualisar';
+$lang['btn_delete'] = 'Borrar';
+$lang['btn_back'] = 'Arrere';
+$lang['btn_backlink'] = 'Vínculs remitents';
+$lang['btn_backtomedia'] = 'Tornar a la selecció d\'archius de mijos';
+$lang['btn_subscribe'] = 'Subscriure\'s a la pàgina';
+$lang['btn_unsubscribe'] = 'Desubscriure\'s de la pàgina';
+$lang['btn_subscribens'] = 'Subscriure\'s a l\'espai de noms';
+$lang['btn_unsubscribens'] = 'Desubscriure\'s de l\'espai de noms';
+$lang['btn_profile'] = 'Actualisar perfil';
+$lang['btn_reset'] = 'Reiniciar';
+$lang['btn_resendpwd'] = 'Enviar contrasenya nova';
+$lang['btn_draft'] = 'Editar borrador';
+$lang['btn_recover'] = 'Recuperar borrador';
+$lang['btn_draftdel'] = 'Borrar borrador';
+$lang['btn_revert'] = 'Recuperar';
+$lang['loggedinas'] = 'Sessió de';
+$lang['user'] = 'Nom d\'usuari';
+$lang['pass'] = 'Contrasenya';
+$lang['newpass'] = 'Contrasenya nova';
+$lang['oldpass'] = 'Confirmar la contrasenya actual';
+$lang['passchk'] = 'una atra volta';
+$lang['remember'] = 'Recorda\'m';
+$lang['fullname'] = 'Nom complet';
+$lang['email'] = 'Correu electrònic';
+$lang['register'] = 'Registrar-se';
+$lang['profile'] = 'Perfil d\'usuari';
+$lang['badlogin'] = 'Disculpe, pero el nom d\'usuari o la contrasenya són incorrectes.';
+$lang['minoredit'] = 'Canvis menors';
+$lang['draftdate'] = 'Borrador gravat el';
+$lang['nosecedit'] = 'La pàgina ha canviat mentres tant, l\'informació de la secció no estava al dia, s\'ha carregat la pàgina sancera.';
+$lang['regmissing'] = 'Disculpe, pero deu omplir tots els camps.';
+$lang['reguexists'] = 'Disculpe, pero ya existix un usuari en este nom.';
+$lang['regsuccess'] = 'S\'ha creat l\'usuari i se li ha enviat la contrasenya per correu electrònic.';
+$lang['regsuccess2'] = 'S\'ha creat l\'usuari.';
+$lang['regmailfail'] = 'Pareix que ha hagut un erro enviant el correu en la contrasenya. ¡Per favor, contacte en l\'administrador!';
+$lang['regbadmail'] = 'La direcció de correu no pareix vàlida - contacte en l\'administrador si pensa que és deu a un erro nostre';
+$lang['regbadpass'] = 'Les dos contrasenyes que ha donat no són idèntiques, per favor, torne a intentar-ho.';
+$lang['regpwmail'] = 'La seua contrasenya de DokuWiki';
+$lang['reghere'] = '¿Encara no té un conte? Cree-se\'n un';
+$lang['profna'] = 'Este wiki no li permet modificar el perfil';
+$lang['profnochange'] = 'Sense canvis, no hi ha res que fer.';
+$lang['profnoempty'] = 'No es permet deixar el nom o la direcció de correu buits.';
+$lang['profchanged'] = 'Perfil de l\'usuari actualisat.';
+$lang['pwdforget'] = '¿Ha oblidat la contrasenya? Demane\'n una nova';
+$lang['resendna'] = 'Este wiki no permet reenviar la contrasenya.';
+$lang['resendpwd'] = 'Enviar contrasenya nova per a';
+$lang['resendpwdmissing'] = 'Disculpe, pero deu omplir tots els camps.';
+$lang['resendpwdnouser'] = 'Disculpe, pero no trobem ad est usuari en la base de senyes.';
+$lang['resendpwdbadauth'] = 'Disculpe, pero este còdic d\'autenticació no es vàlit. Verifique que haja utilisat el víncul de confirmació sancer.';
+$lang['resendpwdconfirm'] = 'Li hem enviat un víncul de confirmació al correu.';
+$lang['resendpwdsuccess'] = 'Se li ha enviat una nova contrasenya per correu electrònic.';
+$lang['license'] = 'Excepte quan s\'indique una atra cosa, el contingut d\'este wiki està llicenciat baix la següent llicència:';
+$lang['licenseok'] = 'Nota: a l\'editar esta pàgina accepta llicenciar el seu contingut baix la següent llicència:';
+$lang['searchmedia'] = 'Buscar nom d\'archiu:';
+$lang['searchmedia_in'] = 'Buscar en %s';
+$lang['txt_upload'] = 'Seleccione l\'archiu que vol pujar';
+$lang['txt_filename'] = 'Enviar com (opcional)';
+$lang['txt_overwrt'] = 'Sobreescriure archius existents';
+$lang['lockedby'] = 'Actualment bloquejat per';
+$lang['lockexpire'] = 'El bloqueig venç a les';
+$lang['willexpire'] = 'El seu bloqueig per a editar esta pàgina vencerà en un minut.\nPer a evitar conflictes utilise el botó de vista prèvia i reiniciarà el contador.';
+$lang['notsavedyet'] = 'Els canvis no guardats es perdran.\n¿Segur que vol continuar?';
+$lang['rssfailed'] = 'Ha ocorregut un erro al solicitar este canal: ';
+$lang['nothingfound'] = 'No s\'ha trobat res.';
+$lang['mediaselect'] = 'Archius de mijos';
+$lang['fileupload'] = 'Enviar archius de mijos';
+$lang['uploadsucc'] = 'Enviament correcte';
+$lang['uploadfail'] = 'Enviament fallit. ¿Potser no tinga els permissos necessaris?';
+$lang['uploadwrong'] = 'Enviament denegat. ¡Esta extensió d\'archiu està prohibida!';
+$lang['uploadexist'] = 'L\'archiu ya existix. No s\'ha fet res.';
+$lang['uploadbadcontent'] = 'El contingut enviat no coincidix en l\'extensió de l\'archiu %s';
+$lang['uploadspam'] = 'L\'enviament ha segut bloquejat per la llista anti-spam.';
+$lang['uploadxss'] = 'L\'enviament ha segut bloquejat per ser possiblement perillós.';
+$lang['uploadsize'] = 'L\'archiu enviat és massa gran. (màx. %s)';
+$lang['deletesucc'] = 'S\'ha borrat l\'archiu "%s".';
+$lang['deletefail'] = 'No s\'ha pogut borrar "%s" - comprove els permissos.';
+$lang['mediainuse'] = 'L\'archiu "%s" no s\'ha borrat - encara s\'està utilisant.';
+$lang['namespaces'] = 'Espais de noms';
+$lang['mediafiles'] = 'Archius disponibles en';
+$lang['js']['searchmedia'] = 'Buscar archius';
+$lang['js']['keepopen'] = 'Mantindre la finestra oberta al seleccionar';
+$lang['js']['hidedetails'] = 'Ocultar detalls';
+$lang['js']['nosmblinks'] = 'Els vínculs a recursos compartits de Windows només funcionen en Microsoft Internet Explorer. No obstant, es poden copiar i apegar.';
+$lang['js']['linkwiz'] = 'Assistent de vínculs';
+$lang['js']['linkto'] = 'Vincular a:';
+$lang['js']['del_confirm'] = '¿Realment vol borrar el(s) ítem(s) seleccionat(s)?';
+$lang['js']['mu_btn'] = 'Enviar diversos archius d\'una';
+$lang['mediausage'] = 'Utilise la següent sintaxis per a referenciar est archiu:';
+$lang['mediaview'] = 'Vore l\'archiu original';
+$lang['mediaroot'] = 'base';
+$lang['mediaupload'] = 'Enviar un archiu a l\'espai de noms actual. Per a crear sub-espais, afigga\'ls separats per dos punts davant del nom de l\'archiu que pose en "Enviar com".';
+$lang['mediaextchange'] = '¡Extensió de l\'archiu canviada de .%s a .%s!';
+$lang['reference'] = 'Referències per a';
+$lang['ref_inuse'] = 'No es pot borrar l\'archiu perque encara s\'utilisa en les següents pàgines:';
+$lang['ref_hidden'] = 'Algunes referències estan en pàgines que no té permissos per a vore';
+$lang['hits'] = 'Encerts';
+$lang['quickhits'] = 'Noms de pàgines coincidents';
+$lang['toc'] = 'Taula de continguts';
+$lang['current'] = 'Actual';
+$lang['yours'] = 'La seua versió';
+$lang['diff'] = 'Mostrar diferències en la versió actual';
+$lang['diff2'] = 'Mostrar diferències entre versions';
+$lang['line'] = 'Llínea';
+$lang['breadcrumb'] = 'Traça';
+$lang['youarehere'] = 'Vosté està ací';
+$lang['lastmod'] = 'Última modificació el';
+$lang['by'] = 'per';
+$lang['deleted'] = 'borrat';
+$lang['created'] = 'creat';
+$lang['restored'] = 'restaurada l\'última versió';
+$lang['external_edit'] = 'edició externa';
+$lang['summary'] = 'Editar sumari';
+$lang['noflash'] = 'Necessita el <a href="http://www.adobe.com/products/flashplayer/">plúgin d\'Adobe Flash</a> per a vore este contingut.';
+$lang['download'] = 'Descarregar un tros';
+$lang['mail_newpage'] = 'pàgina afegida:';
+$lang['mail_changed'] = 'pàgina canviada:';
+$lang['mail_new_user'] = 'Usuari nou:';
+$lang['mail_upload'] = 'archiu enviat:';
+$lang['qb_bold'] = 'Negreta';
+$lang['qb_italic'] = 'Itàlica';
+$lang['qb_underl'] = 'Subrallat';
+$lang['qb_code'] = 'Còdic';
+$lang['qb_strike'] = 'Tachat';
+$lang['qb_h1'] = 'Titular de nivell 1';
+$lang['qb_h2'] = 'Titular de nivell 2';
+$lang['qb_h3'] = 'Titular de nivell 3';
+$lang['qb_h4'] = 'Titular de nivell 4';
+$lang['qb_h5'] = 'Titular de nivell 5';
+$lang['qb_h'] = 'Titular';
+$lang['qb_hs'] = 'Triar titular';
+$lang['qb_hplus'] = 'Titular superior';
+$lang['qb_hminus'] = 'Titular inferior';
+$lang['qb_hequal'] = 'Titular al mateix nivell';
+$lang['qb_link'] = 'Víncul intern';
+$lang['qb_extlink'] = 'Víncul extern';
+$lang['qb_hr'] = 'Llínea horisontal';
+$lang['qb_ol'] = 'Llista numerada';
+$lang['qb_ul'] = 'Llista ';
+$lang['qb_media'] = 'Afegir imàgens i atres archius';
+$lang['qb_sig'] = 'Afegir firma';
+$lang['qb_smileys'] = 'Smileys';
+$lang['qb_chars'] = 'Caràcters especials';
+$lang['upperns'] = 'anar a l\'espai de noms superior';
+$lang['admin_register'] = 'Afegir nou usuari';
+$lang['metaedit'] = 'Editar meta-senyes';
+$lang['metasaveerr'] = 'Erro escrivint meta-senyes';
+$lang['metasaveok'] = 'Meta-senyes guardades';
+$lang['img_backto'] = 'Tornar a';
+$lang['img_title'] = 'Títul';
+$lang['img_caption'] = 'Subtítul';
+$lang['img_date'] = 'Data';
+$lang['img_fname'] = 'Nom de l\'archiu';
+$lang['img_fsize'] = 'Tamany';
+$lang['img_artist'] = 'Fotógraf';
+$lang['img_copyr'] = 'Copyright';
+$lang['img_format'] = 'Format';
+$lang['img_camera'] = 'Càmara';
+$lang['img_keywords'] = 'Paraules clau';
+$lang['subscribe_success'] = '%s afegit a la llista de subscripció per a %s';
+$lang['subscribe_error'] = 'Erro afegint a %s a la llista de subscripció per a %s';
+$lang['subscribe_noaddress'] = 'No hi ha cap direcció associada a la sessió, no es pot subscriure';
+$lang['unsubscribe_success'] = '%s borrat de la llista de subscripció per a %s';
+$lang['unsubscribe_error'] = 'Erro borrant a %s de la llista de subscripció per a %s';
+$lang['authmodfailed'] = 'Mala configuració de l\'autenticació d\'usuari. Per favor, informe a l\'administrador del Wiki.';
+$lang['authtempfail'] = 'L\'autenticació d\'usuaris està desactivada temporalment. Si la situació persistix, per favor, informe a l\'administrador del Wiki.';
+$lang['i_chooselang'] = 'Trie l\'idioma';
+$lang['i_installer'] = 'Instalador de DokuWiki';
+$lang['i_wikiname'] = 'Nom del Wiki';
+$lang['i_enableacl'] = 'Activar ACL (recomanat)';
+$lang['i_superuser'] = 'Super-usuari';
+$lang['i_problems'] = 'L\'instalador ha trobat els problemes mostrats més avall. No pot continuar fins que no els arregle.';
+$lang['i_modified'] = 'Per raons de seguritat, este procés només funcionarà en una instalació nova i verge de DokuWiki.
+Deuria tornar a extraure els archius del paquet que ha descarregat o consultar les
+<a href="http://dokuwiki.org/install">instruccions d\'instalació de Dokuwiki</a> completes';
+$lang['i_funcna'] = 'La funció de PHP <code>%s</code> no està disponible. ¿Pot ser que el seu proveïdor d\'hostage l\'haja desactivada per algun motiu?';
+$lang['i_phpver'] = 'La versió de PHP <code>%s</code> és menor que
+la <code>%s</code> que es necessita. Necessita actualisar PHP.';
+$lang['i_permfail'] = 'DokuWiki no pot escriure en <code>%s</code>. ¡Necessita arreglar els permissos d\'este directori!';
+$lang['i_confexists'] = '<code>%s</code> ya existix';
+$lang['i_writeerr'] = 'No es pot crear <code>%s</code>. Haurà de comprovar els permissos del directori/archiu i crear manualment l\'archiu.';
+$lang['i_badhash'] = 'dokuwiki.php substituït o modificat (hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - valor illegal o buit';
+$lang['i_success'] = 'La configuració ha finalisat correctament. Ya pot borrar l\'archiu install.php. Passe al
+<a href="doku.php">nou DokuWiki</a>.';
+$lang['i_failure'] = 'Han aparegut alguns erros escrivint els archius de configuració. Deurà arreglar-los manualment abans de que
+puga utilisar el <a href="doku.php">nou DokuWiki</a>.';
+$lang['i_policy'] = 'Política inicial ACL';
+$lang['i_pol0'] = 'Wiki obert (llegir, escriure i enviar tots)';
+$lang['i_pol1'] = 'Wiki públic (llegir tots, escriure i enviar només usuaris registrats)';
+$lang['i_pol2'] = 'Wiki tancat (llegir, escriure i enviar només usuaris registrats)';
+$lang['i_retry'] = 'Reintentar';
+$lang['mu_intro'] = 'Des d\'ací pot enviar diversos archius d\'una volta. Pulse el botó d\'examinar per a afegir-los a la coa. Pulse enviar quan ho tinga.';
+$lang['mu_gridname'] = 'Nom d\'archiu';
+$lang['mu_gridsize'] = 'Tamany';
+$lang['mu_gridstat'] = 'Estat';
+$lang['mu_namespace'] = 'Espai de noms';
+$lang['mu_browse'] = 'Examinar';
+$lang['mu_toobig'] = 'massa gran';
+$lang['mu_ready'] = 'preparat per a enviar';
+$lang['mu_done'] = 'complet';
+$lang['mu_fail'] = 'fallit';
+$lang['mu_authfail'] = 'la sessió ha vençut';
+$lang['mu_progress'] = '@PCT@% enviat';
+$lang['mu_filetypes'] = 'Classes d\'archiu permeses';
+$lang['mu_info'] = 'archius enviats.';
+$lang['mu_lasterr'] = 'Últim erro:';
+$lang['recent_global'] = 'Està veent els canvis dins de l\'espai de noms <b>%s</b>. També pot <a href="%s">vore els canvis recents en el wiki sancer</a>.';
+$lang['years'] = 'fa %d anys';
+$lang['months'] = 'fa %d mesos';
+$lang['weeks'] = 'fa %s semanes';
+$lang['days'] = 'fa %d dies';
+$lang['hours'] = 'fa %d hores';
+$lang['minutes'] = 'fa %d minuts';
+$lang['seconds'] = 'fa %d segons';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/locked.txt
new file mode 100644
index 000000000..bdb2bdf0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/locked.txt
@@ -0,0 +1,3 @@
+====== Pàgina bloquejada ======
+
+Esta pàgina està actualment bloquejada mentres l'edita un atre usuari. Ha d'esperar fins que l'usuari acabe d'editar la pàgina o vença el bloqueig.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/login.txt
new file mode 100644
index 000000000..b550c6440
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/login.txt
@@ -0,0 +1,4 @@
+====== Inici de sessió ======
+
+¡Encara no ha iniciat sessió! Introduïxca les seues credencials d'autenticació per a iniciar-la. Necessita tindre les galletes del navegador activades.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/mailtext.txt
new file mode 100644
index 000000000..e8da6f8de
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/mailtext.txt
@@ -0,0 +1,17 @@
+S'ha afegit o modificat una pàgina en el seu DokuWiki. Les senyes són:
+
+Data: @DATE@
+Navegador: @BROWSER@
+Direcció IP: @IPADDRESS@
+Nom de la màquina: @HOSTNAME@
+Revisió anterior: @OLDPAGE@
+Nova revisió: @NEWPAGE@
+Resum: @SUMMARY@
+Usuari: @USER@
+
+@DIFF@
+
+
+--
+Este correu l'ha generat DokuWiki en
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/newpage.txt
new file mode 100644
index 000000000..93b154425
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/newpage.txt
@@ -0,0 +1,3 @@
+====== Este tema encara no existix ======
+
+Ha seguit un víncul a una pàgina que encara no existix. Si té els permissos necessaris pot crear-la utilisant el botó ''Crear esta pàgina''.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/norev.txt
new file mode 100644
index 000000000..434e62dfa
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/norev.txt
@@ -0,0 +1,3 @@
+====== No existix la versió ======
+
+La versió especificada no existix. Utilise el botó ''Versions antigues'' per a vore una llista de versions antigues d'este document. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/preview.txt
new file mode 100644
index 000000000..0997f5953
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/preview.txt
@@ -0,0 +1,4 @@
+====== Previsualisació ======
+
+Açò es una previsualisació per a vore cóm quedarà la pàgina. ¡Recorde que encara no està guardada!
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/pwconfirm.txt
new file mode 100644
index 000000000..919c3d89d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/pwconfirm.txt
@@ -0,0 +1,15 @@
+¡Hola @FULLNAME@!
+
+Algú ha solicitat una nova contrasenya per a entrar com a
+@TITLE en @DOKUWIKIURL@
+
+Si no ha segut vosté qui ha solicitat la nova contrasenya ignore este correu.
+
+Per a confirmar que la petició ha segut feta realment per vosté
+utilise el següent víncul.
+
+@CONFIRM@
+
+--
+Este correu l'ha generat DokuWiki en
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/read.txt
new file mode 100644
index 000000000..80d96cd45
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/read.txt
@@ -0,0 +1,2 @@
+Esta pàgina és només de llectura. Pot vore el còdic font, pero no pot canviar-lo. Pregunte a l'administrador si creu que és un erro.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/recent.txt
new file mode 100644
index 000000000..ca1f5c5ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/recent.txt
@@ -0,0 +1,5 @@
+====== Canvis recents ======
+
+Les següents pàgines han canviat recentment.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/register.txt
new file mode 100644
index 000000000..7515be6a9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/register.txt
@@ -0,0 +1,5 @@
+====== Registrar-se com a usuari nou ======
+
+Escriga tota la informació que se li demana avall per a crear un nou conte en este wiki. Assegure's de donar una **direcció de correu electrònic vàlida** - si no se li demana una contrasenya ací se li enviarà a eixa direcció. El nom d'usuari deuria ser un
+[[doku>pagename|nom de pàgina]] vàlit.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/registermail.txt
new file mode 100644
index 000000000..47b9318bd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/registermail.txt
@@ -0,0 +1,14 @@
+S'ha registrat un usuari nou. Estes són les senyes:
+
+Nom d'usuari : @NEWUSER@
+Nom complet : @NEWNAME@
+Correu electrònic : @NEWEMAIL@
+
+Data : @DATE@
+Navegador : @BROWSER@
+Direcció IP : @IPADDRESS@
+Nom de la màquina : @HOSTNAME@
+
+--
+Este correu l'ha generat DokuWiki en
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/resendpwd.txt
new file mode 100644
index 000000000..2feac0966
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/resendpwd.txt
@@ -0,0 +1,4 @@
+====== Enviar contrasenya nova ======
+
+Per favor, introduïxca el nom d'usuari en el formulari per a demanar una nova contrasenya per al seu conte en este wiki. Se li enviarà un víncul de confirmació a la direcció de correu en que estiga registrat.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/revisions.txt
new file mode 100644
index 000000000..08e7e043c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/revisions.txt
@@ -0,0 +1,4 @@
+====== Versions antigues ======
+
+Versions antigues del document actual. Per a recuperar una versió anterior de la pàgina, trie-la ací avall, pulse ''Editar esta pàgina'' i guarde-la.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/searchpage.txt
new file mode 100644
index 000000000..80f7e9119
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/searchpage.txt
@@ -0,0 +1,5 @@
+====== Buscar ======
+
+Pot vore els resultats de la busca ací avall. Si no ha trobat lo que buscava pot crear o editar una pàgina en el mateix nom que el text que ha buscat utilisant el botó corresponent.
+
+===== Resultats =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/showrev.txt
new file mode 100644
index 000000000..86f282292
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/showrev.txt
@@ -0,0 +1,2 @@
+**¡Açò és una versió antiga del document!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/stopwords.txt
new file mode 100644
index 000000000..1b4decbe5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/stopwords.txt
@@ -0,0 +1,76 @@
+# This is a list of words the indexer ignores, one word per line
+# When you edit this file be sure to use UNIX line endings (single newline)
+# No need to include words shorter than 3 chars - these are ignored anyway
+ell
+ella
+nosatres
+nosatros
+mosatros
+vosatres
+vosatros
+ells
+els
+los
+dels
+les
+una
+uns
+unes
+seu
+seua
+seus
+seues
+meu
+meua
+meus
+meues
+teu
+teua
+teus
+teues
+nostre
+nostres
+vostre
+vostres
+nos
+vos
+#eix
+eixe
+eixa
+aquell
+aquella
+aquells
+aquelles
+#est
+este
+esta
+estos
+estes
+està
+això
+açò
+allò
+des
+soc
+eres
+som
+sou
+són
+fon
+per
+com
+cóm
+qui
+que
+qué
+quan
+quant
+quants
+quanta
+quantes
+mentres
+pero
+atre
+atra
+atres
+també
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/subscribermail.txt
new file mode 100644
index 000000000..43299b598
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/subscribermail.txt
@@ -0,0 +1,23 @@
+¡Hola!
+
+La pàgina @PAGE@ del wiki @TITLE@ ha canviat.
+Estos són els canvis:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Data: @DATE@
+Usuari: @USER@
+Resum: @SUMMARY@
+Revisió anterior: @OLDPAGE@
+Nova revisió: @NEWPAGE@
+
+Per a cancelar les notificacions de pàgina, inicie sessió en el wiki en
+@DOKUWIKIURL@, visite
+@NEWPAGE@
+i desubscriga's dels canvis de la pàgina o de l'espai de noms.
+
+--
+Este correu l'ha generat DokuWiki en
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/updateprofile.txt
new file mode 100644
index 000000000..9116fedf0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/updateprofile.txt
@@ -0,0 +1,5 @@
+====== Actualise el seu perfil ======
+
+Només deu completar els camps que vol canviar. No es pot canviar el nom d'usuari.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/uploadmail.txt
new file mode 100644
index 000000000..c5a330274
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/uploadmail.txt
@@ -0,0 +1,14 @@
+S'ha enviat un archiu al seu DokuWiki. Les senyes:
+
+Archiu: @MEDIA@
+Data: @DATE@
+Navegador: @BROWSER@
+Direcció IP: @IPADDRESS@
+Nom de la màquina: @HOSTNAME@
+Tamany: @SIZE@
+Tipo MIME: @MIME@
+Usuari: @USER@
+
+--
+Este correu ha segut generat per DokuWiki en
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/wordblock.txt
new file mode 100644
index 000000000..718bfe883
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/wordblock.txt
@@ -0,0 +1,4 @@
+====== Bloqueig de SPAM ======
+
+Els seus canvis *no* s'han guardat perque contenen una o més paraules prohibides. Si ha intentat posar spam en el wiki.. ¡malament! Si pensa que açò és un erro, contacte en l'administrador d'este wiki.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/admin.txt
new file mode 100644
index 000000000..5c0a6d00a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/admin.txt
@@ -0,0 +1,4 @@
+====== Administració ======
+
+Heus ací una llista de les tasques administratives disponibles en DokuWiki.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/adminplugins.txt
new file mode 100644
index 000000000..9ea165c1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/adminplugins.txt
@@ -0,0 +1 @@
+===== Connectors addicionals ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/backlinks.txt
new file mode 100644
index 000000000..e2ecaf4f9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/backlinks.txt
@@ -0,0 +1,4 @@
+====== Enllaços ======
+
+Heus ací una llista de pàgines enllaçades amb la pàgina actual.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/conflict.txt
new file mode 100644
index 000000000..53183f0b7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/conflict.txt
@@ -0,0 +1,6 @@
+====== Hi ha una versió més recent ======
+
+Existeix una versió més recent del document que heu editat. Això passa quan un altre usuari canvia el document mentre l'estàveu editant.
+
+Examineu detingudament les diferències que es mostren més avall i després decidiu quina versió voleu mantenir. Si trieu ''desa'', es desarà la vostra versió. Si trieu ''cancel·la'' es mantindrà la versió actual.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/denied.txt
new file mode 100644
index 000000000..e6125e83b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/denied.txt
@@ -0,0 +1,4 @@
+====== Permís denegat ======
+
+No teniu prou drets per continuar. Potser us heu descuidat d'entrar?
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/diff.txt
new file mode 100644
index 000000000..83ca86782
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/diff.txt
@@ -0,0 +1,4 @@
+====== Diferències ======
+
+Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/draft.txt
new file mode 100644
index 000000000..68593c2fd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/draft.txt
@@ -0,0 +1,5 @@
+====== S'ha trobat un esborrany ======
+
+La darrera sessió vostra d'edició d'aquesta pàgina no es va completar correctament. DokuWiki en va desar automàticament un esborrany mentre treballàveu, el qual podeu utilitzar ara per continuar l'edició. Més avall podeu veure la data i hora en què es va desar durant la vostra darrera sessió.
+
+Decidiu si voleu //recuperar// la vostra darrera sessió d'edició, //suprimir// l'esborrany que es va desar automàticament o //cancel·lar// el procés d'edició. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/edit.txt
new file mode 100644
index 000000000..743b0ff55
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/edit.txt
@@ -0,0 +1,2 @@
+Editeu la pàgina i premeu ''Desa''. Per a més informació sobre la sintaxi Wiki vegeu [[wiki:syntax|sintaxi]]. Si us plau, editeu la pàgina només si podeu **millorar-la**. Si voleu fer proves, aprengueu a donar les primeres passes al [[playground:playground|pati]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/editrev.txt
new file mode 100644
index 000000000..b2f304cbb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/editrev.txt
@@ -0,0 +1,2 @@
+**Heu penjat una revisió anterior del document.** Si la deseu, creareu una nova versió amb aquestes dades.
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/index.txt
new file mode 100644
index 000000000..6ba71fd8f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/index.txt
@@ -0,0 +1,4 @@
+====== Ãndex ======
+
+Heus ací un índex de totes les pàgines disponibles, ordenades per [[doku>namespaces|espais]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/install.html
new file mode 100644
index 000000000..e7c8f0b57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/install.html
@@ -0,0 +1,8 @@
+<p>Aquesta pàgina us ajuda a fer la primera instal·lació i la configuració de <a href="http://dokuwiki.org">Dokuwiki</a>. Hi ha més informació sobre aquest instal·lador en la seva <a href="http://dokuwiki.org/installer">pàgina de documentació</a>.</p>
+
+<p>DokuWiki utilitza fitxers normals per a emmagatzemar les pàgines wiki i la informació associada a aquestes pàgines (p. ex. imatges, índexs de cerca, revisions anteriors, etc.). Per tal de funcionar correctament DokuWiki <strong>necessita</strong> tenir accés d'escriptura als directoris que contenen aquests fitxers. Aquest instal·lador no pot configurar els permisos del directori. Normalment això cal fer-ho directament en la línia d'ordres o, si esteu utilitzant un hostatge, mitjançant FTP o el tauler de control del vostre hostatge (p. ex. cPanel).</p>
+
+<p>Aquest instal·lador configurarà el vostre DokuWiki per a <acronym title="access control list">ACL</acronym>, cosa que, al seu torn, permet l'accés de l'administrador al menú d'administració, on pot instal·lar connectors, gestionar usuaris, gestionar l'accés a les pàgines wiki i modificar els paràmetres de configuració. No és un requisit per al funcionament de DokuWiki, però el fa més fàcil d'administrar.</p>
+
+<p>Els usuaris experts o els que tinguin requeriments específics poden utilitzar els enllaços següents per a obtenir més detalls sobre <a href="http://dokuwiki.org/install">instruccions d'instal·lació</a>
+i <a href="http://dokuwiki.org/config">paràmetres de configuració</a>.</p> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/lang.php
new file mode 100644
index 000000000..778123445
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/lang.php
@@ -0,0 +1,247 @@
+<?php
+/**
+ * catalan language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Carles Bellver <carles.bellver@cent.uji.es>
+ * @author Carles Bellver <carles.bellver@gmail.com>
+ * @author carles.bellver@gmail.com
+ * @author carles.bellver@cent.uji.es
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '“';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '‘';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = '’';
+$lang['btn_edit'] = 'Edita aquesta pàgina';
+$lang['btn_source'] = 'Mostra codi font';
+$lang['btn_show'] = 'Mostra pàgina';
+$lang['btn_create'] = 'Crea aquesta pàgina';
+$lang['btn_search'] = 'Cerca';
+$lang['btn_save'] = 'Desa';
+$lang['btn_preview'] = 'Previsualitza';
+$lang['btn_top'] = 'Torna dalt';
+$lang['btn_newer'] = '<< més recent';
+$lang['btn_older'] = 'menys recent >>';
+$lang['btn_revs'] = 'Revisions anteriors';
+$lang['btn_recent'] = 'Canvis recents';
+$lang['btn_upload'] = 'Penja';
+$lang['btn_cancel'] = 'Cancel·la';
+$lang['btn_index'] = 'Ãndex';
+$lang['btn_secedit'] = 'Edita';
+$lang['btn_login'] = 'Entra';
+$lang['btn_logout'] = 'Surt';
+$lang['btn_admin'] = 'Admin';
+$lang['btn_update'] = 'Actualitza';
+$lang['btn_delete'] = 'Suprimeix';
+$lang['btn_back'] = 'Enrere';
+$lang['btn_backlink'] = 'Què hi enllaça';
+$lang['btn_backtomedia'] = 'Torna a la selecció de fitxers';
+$lang['btn_subscribe'] = 'Subscripció a canvis d\'aquesta pàgina';
+$lang['btn_unsubscribe'] = 'Cancel·la subscripció a pàgina';
+$lang['btn_subscribens'] = 'Subscripció a canvis d\'aquest espai';
+$lang['btn_unsubscribens'] = 'Cancel·la subscripció a espai';
+$lang['btn_profile'] = 'Actualització del perfil';
+$lang['btn_reset'] = 'Reinicia';
+$lang['btn_resendpwd'] = 'Envia nova contrasenya';
+$lang['btn_draft'] = 'Edita esborrany';
+$lang['btn_recover'] = 'Recupera esborrany';
+$lang['btn_draftdel'] = 'Suprimeix esborrany';
+$lang['btn_revert'] = 'Restaura';
+$lang['loggedinas'] = 'Heu entrat com';
+$lang['user'] = 'Nom d\'usuari';
+$lang['pass'] = 'Contrasenya';
+$lang['newpass'] = 'Nova contrasenya';
+$lang['oldpass'] = 'Confirmeu la contrasenya actual';
+$lang['passchk'] = 'una altra vegada';
+$lang['remember'] = 'Recorda\'m';
+$lang['fullname'] = 'Nom complet';
+$lang['email'] = 'Correu electrònic';
+$lang['register'] = 'Registra\'m';
+$lang['profile'] = 'Perfil d\'usuari';
+$lang['badlogin'] = 'Nom d\'usuari o contrasenya incorrectes.';
+$lang['minoredit'] = 'Canvis menors';
+$lang['draftdate'] = 'L\'esborrany s\'ha desat automàticament';
+$lang['nosecedit'] = 'Mentrestant la pàgina ha estat modificada. La informació de seccions estava obsoleta i ha calgut carregar la pàgina sencera.';
+$lang['regmissing'] = 'Heu d\'omplir tots els camps.';
+$lang['reguexists'] = 'Ja existeix un altre usuari amb aquest nom.';
+$lang['regsuccess'] = 'S\'ha creat l\'usuari. La contrasenya s\'ha enviat per correu.';
+$lang['regsuccess2'] = 'S\'ha creat l\'usuari.';
+$lang['regmailfail'] = 'Sembla que un error ha impedit enviar la contrasenya per correu. Contacteu amb l\'administrador.';
+$lang['regbadmail'] = 'L\'adreça de correu que heu donat no sembla vàlida. Si creieu que això és un error, contacu amb l\'administrador.';
+$lang['regbadpass'] = 'Les dues contrasenyes no són iguals. Torneu a intentar-ho.';
+$lang['regpwmail'] = 'La vostra contrasenya per al Wiki';
+$lang['reghere'] = 'Si no teniu un compte, aquí en podeu obtenir un';
+$lang['profna'] = 'Aquest wiki no permet modificar el perfil';
+$lang['profnochange'] = 'No heu introduït cap canvi.';
+$lang['profnoempty'] = 'No es pot deixar en blanc el nom o l\'adreça de correu.';
+$lang['profchanged'] = 'El perfil d\'usuari s\'ha actualitzat correctament.';
+$lang['pwdforget'] = 'Heu oblidat la contrasenya? Podeu obtenir-ne una de nova.';
+$lang['resendna'] = 'Aquest wiki no permet tornar a enviar la contrasenya.';
+$lang['resendpwd'] = 'Enviament d\'una nova contrasenya per a';
+$lang['resendpwdmissing'] = 'Heu d\'emplenar tots els camps.';
+$lang['resendpwdnouser'] = 'No s\'ha pogut trobar aquest usuari a la base de dades.';
+$lang['resendpwdbadauth'] = 'Aquest codi d\'autenticació no és vàlid. Assegureu-vos d\'utilitzar l\'enllaç de confirmació complet.';
+$lang['resendpwdconfirm'] = 'Se us ha enviat per correu electrònic un enllaç de confirmació.';
+$lang['resendpwdsuccess'] = 'Se us ha enviat la nova contrasenya per correu electrònic.';
+$lang['license'] = 'Excepte on es digui una altra cosa, el contingut d\'aquest wiki està subjecte a la llicència següent:';
+$lang['licenseok'] = 'Nota. En editar aquesta pàgina esteu acceptant que el vostre contingut estigui subjecte a la llicència següent:';
+$lang['searchmedia'] = 'Cerca pel nom de fitxer';
+$lang['searchmedia_in'] = 'Cerca en: %s';
+$lang['txt_upload'] = 'Trieu el fitxer que voleu penjar';
+$lang['txt_filename'] = 'Introduïu el nom wiki (opcional)';
+$lang['txt_overwrt'] = 'Sobreescriu el fitxer actual';
+$lang['lockedby'] = 'Actualment blocat per:';
+$lang['lockexpire'] = 'Venciment del blocatge:';
+$lang['willexpire'] = 'El blocatge per a editar aquesta pàgina venç d\'aquí a un minut.\nUtilitzeu la visualització prèvia per reiniciar el rellotge i evitar conflictes.';
+$lang['notsavedyet'] = 'Heu fet canvis que es perdran si no els deseu.\nVoleu continuar?';
+$lang['rssfailed'] = 'S\'ha produït un error en recollir aquesta alimentació: ';
+$lang['nothingfound'] = 'No s\'ha trobat res.';
+$lang['mediaselect'] = 'Selecció de fitxers';
+$lang['fileupload'] = 'Càrrega de fitxers';
+$lang['uploadsucc'] = 'S\'ha penjat el fitxer';
+$lang['uploadfail'] = 'No es pot penjar el fitxer. Potser no teniu prou permisos?';
+$lang['uploadwrong'] = 'No es pot penjar el fitxer. Aquesta extensió està prohibida.';
+$lang['uploadexist'] = 'El fitxer ja existeix. No s\'ha penjat.';
+$lang['uploadbadcontent'] = 'El contingut que heu penjat coincideix amb l\'extensió de fitxer %s.';
+$lang['uploadspam'] = 'La càrrega ha estat blocada per la llista negra de brossa.';
+$lang['uploadxss'] = 'La càrrega ha estat blocada perquè podria ser un contingut maligne.';
+$lang['uploadsize'] = 'El fitxer que voleu penjar és massa gran (màxim %s)';
+$lang['deletesucc'] = 'S\'ha suprimit el fitxer "%s".';
+$lang['deletefail'] = 'No s\'ha pogut suprimir el fitxer "%s". Comproveu els permisos.';
+$lang['mediainuse'] = 'No s\'ha pogut suprimir el fitxer "%s". Encara s\'està utilitzant.';
+$lang['namespaces'] = 'Espais';
+$lang['mediafiles'] = 'Fitxers disponibles en';
+$lang['js']['searchmedia'] = 'Cerca fitxers';
+$lang['js']['keepopen'] = 'Manté la finestra oberta';
+$lang['js']['hidedetails'] = 'Oculta detalls';
+$lang['js']['nosmblinks'] = 'Els enllaços amb recursos compartits de Windows només funcionen amb el Microsoft Internet Explorer.
+Si voleu podeu copiar i enganxar l\'enllaç.';
+$lang['js']['linkwiz'] = 'Auxiliar d\'enllaços';
+$lang['js']['linkto'] = 'Enllaça a:';
+$lang['js']['del_confirm'] = 'Suprimiu aquesta entrada?';
+$lang['js']['mu_btn'] = 'Penja múltiples fitxers';
+$lang['mediausage'] = 'Utilitzeu la sintaxi següent per referir-vos a aquest enllaç:';
+$lang['mediaview'] = 'Mostra el fitxer original';
+$lang['mediaroot'] = 'arrel';
+$lang['mediaupload'] = 'Pengeu aquí un fitxer dins de l\'espai actual. Per a crear un nou subespai, poseu-ne el nom davant del nom de fitxer i separeu-los amb el signe de dos punts.';
+$lang['mediaextchange'] = 'S\'ha canviat l\'extensió del fitxer de .%s a .%s';
+$lang['reference'] = 'Referències per a';
+$lang['ref_inuse'] = 'El fitxer no es pot suprimir perquè l\'estan utilitzant les pàgines següents:';
+$lang['ref_hidden'] = 'Algunes referències apareixen en pàgines per a les quals no teniu permís de lectura';
+$lang['hits'] = 'Resultats';
+$lang['quickhits'] = 'Noms de pàgina coincidents';
+$lang['toc'] = 'Taula de continguts';
+$lang['current'] = 'actual';
+$lang['yours'] = 'La vostra versió';
+$lang['diff'] = 'Mostra diferències amb la versió actual';
+$lang['diff2'] = 'Mostra diferències entre les revisions seleccionades';
+$lang['line'] = 'Línia';
+$lang['breadcrumb'] = 'Camí';
+$lang['youarehere'] = 'Sou aquí';
+$lang['lastmod'] = 'Darrera modificació';
+$lang['by'] = 'per';
+$lang['deleted'] = 'suprimit';
+$lang['created'] = 'creat';
+$lang['restored'] = 's\'ha restaurat una versió anterior';
+$lang['external_edit'] = 'edició externa';
+$lang['summary'] = 'Resum d\'edició';
+$lang['noflash'] = 'Per a visualitzar aquest contingut necessiteu el <a href="http://www.adobe.com/products/flashplayer/">connector d\'Adobe Flash</a>.';
+$lang['download'] = 'Baixa el fragment';
+$lang['mail_newpage'] = 'pàgina afegida:';
+$lang['mail_changed'] = 'pàgina modificada:';
+$lang['mail_new_user'] = 'nou usuari:';
+$lang['mail_upload'] = 'fitxer penjat:';
+$lang['qb_bold'] = 'Negreta';
+$lang['qb_italic'] = 'Cursiva';
+$lang['qb_underl'] = 'Subratllat';
+$lang['qb_code'] = 'Codi';
+$lang['qb_strike'] = 'Text barrat';
+$lang['qb_h1'] = 'Encapçalament nivell 1';
+$lang['qb_h2'] = 'Encapçalament nivell 2';
+$lang['qb_h3'] = 'Encapçalament nivell 3';
+$lang['qb_h4'] = 'Encapçalament nivell 4';
+$lang['qb_h5'] = 'Encapçalament nivell 5';
+$lang['qb_h'] = 'Encapçalament';
+$lang['qb_hs'] = 'Selcciona l\'encapçalament';
+$lang['qb_hplus'] = 'Encapçalament més alt';
+$lang['qb_hminus'] = 'Encapçalament més baix';
+$lang['qb_hequal'] = 'Encapçalament del mateix nivell';
+$lang['qb_link'] = 'Enllaç intern';
+$lang['qb_extlink'] = 'Enllaç extern';
+$lang['qb_hr'] = 'Ratlla horitzontal';
+$lang['qb_ol'] = 'Element de llista numerada';
+$lang['qb_ul'] = 'Element de llista de pics';
+$lang['qb_media'] = 'Afegeix imatges o altres fitxers';
+$lang['qb_sig'] = 'Insereix signatura';
+$lang['qb_smileys'] = 'Emoticones';
+$lang['qb_chars'] = 'Caràcters especials';
+$lang['upperns'] = 'Salta a l\'espai superior';
+$lang['admin_register'] = 'Afegeix nou usuari';
+$lang['metaedit'] = 'Edita metadades';
+$lang['metasaveerr'] = 'No s\'han pogut escriure les metadades';
+$lang['metasaveok'] = 'S\'han desat les metadades';
+$lang['img_backto'] = 'Torna a';
+$lang['img_title'] = 'Títol';
+$lang['img_caption'] = 'Peu d\'imatge';
+$lang['img_date'] = 'Data';
+$lang['img_fname'] = 'Nom de fitxer';
+$lang['img_fsize'] = 'Mida';
+$lang['img_artist'] = 'Fotògraf';
+$lang['img_copyr'] = 'Copyright';
+$lang['img_format'] = 'Format';
+$lang['img_camera'] = 'Càmera';
+$lang['img_keywords'] = 'Paraules clau';
+$lang['subscribe_success'] = 'S\'ha afegit %s a la llista de subscripcions de %s';
+$lang['subscribe_error'] = 'S\'ha produït un error en afegir %s a la llista de subscripcions de %s';
+$lang['subscribe_noaddress'] = 'No hi ha cap adreça de correu associada al vostre nom d\'usuari. No se us ha pogut afegir a la llista de subscripcions.';
+$lang['unsubscribe_success'] = '%s ha estat suprimit de la llista de subscripcions de %s';
+$lang['unsubscribe_error'] = 'S\'ha produït un error en suprimir %s de la llista de subscripcions de %s';
+$lang['authmodfailed'] = 'La configuració de l\'autenticació d\'usuaris és errònia. Informeu els administradors del wiki.';
+$lang['authtempfail'] = 'L\'autenticació d\'usuaris no està disponible temporalment. Si aquesta situació persisteix, si us plau informeu els administradors del wiki.';
+$lang['i_chooselang'] = 'Trieu l\'idioma';
+$lang['i_installer'] = 'Instal·lador de DokuWiki';
+$lang['i_wikiname'] = 'Nom del wiki';
+$lang['i_enableacl'] = 'Habilita ACL (recomanat)';
+$lang['i_superuser'] = 'Superusuari';
+$lang['i_problems'] = 'L\'instal·lador ha trobat alguns problemes, que s\'indiquen més avall. No podeu continuar fins que no els hàgiu solucionat.';
+$lang['i_modified'] = 'Per raons de seguretat aquesta seqüència només funciona amb una instal·lació nova i no modificada de Dokuwiki. Hauríeu de tornar a baixar el paquet i/o descomprimir-lo o consultar les <a href="http://dokuwiki.org/install">instruccions d\'instal·lació de Dokuwiki</a> completes';
+$lang['i_funcna'] = 'La funció PHP <code>%s</code> no està disponible. Potser el vostre proveïdor de serveis l\'ha inhabilitada per alguna raó';
+$lang['i_phpver'] = 'La vostra versió de PHP <code>%s</code> és inferior a la requerida <code>%s</code>. Necessiteu actualitzar la vostra instal·lació de PHP.';
+$lang['i_permfail'] = 'DokuWiki no pot escriure <code>%s</code>. Heu d\'arreglar els permisos d\'aquest directori';
+$lang['i_confexists'] = '<code>%s</code> ja existeix';
+$lang['i_writeerr'] = 'No es pot crear <code>%s</code>. Comproveu els permisos del directori i/o del fitxer i creeu el fitxer manualment.';
+$lang['i_badhash'] = 'dokuwiki.php no reconegut o modificat (hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - valor il·legal o buit';
+$lang['i_success'] = 'La configuració s\'ha acabat amb èxit. Ara podeu suprimir el fitxer install.php. Aneu al vostre nou <a href="doku.php">DokuWiki</a>.';
+$lang['i_failure'] = 'S\'han produït alguns errors en escriure els fitxers de configuració. Potser caldrà que els arregleu manualment abans d\'utilitzar el vostre nou <a href="doku.php">DokuWiki</a>.';
+$lang['i_policy'] = 'Política ACL inicial';
+$lang['i_pol0'] = 'Wiki obert (tothom pot llegir, escriure i penjar fitxers)';
+$lang['i_pol1'] = 'Wiki públic (tothom pot llegir, els usuaris registrats poden escriure i penjar fitxers)';
+$lang['i_pol2'] = 'Wiki tancat (només els usuaris registrats poden llegir, escriure i penjar fitxers)';
+$lang['i_retry'] = 'Reintenta';
+$lang['mu_intro'] = 'Aquí podeu penjar múltiples fitxers d\'una vegada. Feu clic en el botó Explora per afegir els fitxers a la cua. Després, premeu Penja.';
+$lang['mu_gridname'] = 'Nom del fitxer';
+$lang['mu_gridsize'] = 'Mida';
+$lang['mu_gridstat'] = 'Estat';
+$lang['mu_namespace'] = 'Espai';
+$lang['mu_browse'] = 'Explora';
+$lang['mu_toobig'] = 'massa gran';
+$lang['mu_ready'] = 'llest per a penjar';
+$lang['mu_done'] = 'complet';
+$lang['mu_fail'] = 'error';
+$lang['mu_authfail'] = 'la sessió ha vençut';
+$lang['mu_progress'] = 'càrrega @PCT@%';
+$lang['mu_filetypes'] = 'Tipus de fitxer permesos';
+$lang['mu_info'] = 'fitxers penjats.';
+$lang['mu_lasterr'] = 'Darrer error:';
+$lang['recent_global'] = 'Esteu veient els canvis recents de l\'espai <strong>%s</strong>. També podeu veure els <a href="%s">canvis recents de tot el wiki</a>.';
+$lang['years'] = 'fa %d anys';
+$lang['months'] = 'fa %d mesos';
+$lang['weeks'] = 'fa %d setmanes';
+$lang['days'] = 'fa %d dies';
+$lang['hours'] = 'fa %d hores';
+$lang['minutes'] = 'fa %d minuts';
+$lang['seconds'] = 'fa %d segons';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/locked.txt
new file mode 100644
index 000000000..93487c268
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/locked.txt
@@ -0,0 +1,3 @@
+====== Pàgina blocada ======
+
+Aquesta pàgina actualment està blocada per a edició per un altre usuari. Haureu d'esperar fins que aquest usuari acabe d'editar-la o fins que venci el blocatge.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/login.txt
new file mode 100644
index 000000000..37ca4d582
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/login.txt
@@ -0,0 +1,4 @@
+====== Entrada ======
+
+No heu entrat. Introduïu les vostres credencials d'autenticació en aquest formulari. A partir d'aquest moment heu de tenir les galetes habilitades en el vostre navegador.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/mailtext.txt
new file mode 100644
index 000000000..eda330954
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/mailtext.txt
@@ -0,0 +1,16 @@
+S'ha afegit o modificat una pàgina en el vostre wiki. Ací teniu més detalls:
+
+Data : @DATE@
+Navegador : @BROWSER@
+IP : @IPADDRESS@
+Rev. anterior : @OLDPAGE@
+Rev. actual : @NEWPAGE@
+Resum d'edició : @SUMMARY@
+Usuari : @USER@
+
+@DIFF@
+
+
+--
+Missatge generat per DokuWiki en
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/newpage.txt
new file mode 100644
index 000000000..d0a2db92a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/newpage.txt
@@ -0,0 +1,3 @@
+====== Aquest tema encara no existeix ======
+
+Heu seguit un enllaç a un tema que encara no existeix. Podeu crear-lo per mitjà del botó ''Crea aquesta pàgina''.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/norev.txt
new file mode 100644
index 000000000..b5089c5eb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/norev.txt
@@ -0,0 +1,5 @@
+====== No existeix aquesta revisió ======
+
+
+La revisió especificada no existeix. Utilitzeu el botó ''Revisions anteriors'' per obtenir una llista de revisions d'aquest document.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/preview.txt
new file mode 100644
index 000000000..fa2f98ca5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/preview.txt
@@ -0,0 +1,4 @@
+====== Previsualització ======
+
+Heus ací una previsualització del vostre text. Recordeu que encara **no l'heu desat!**
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/pwconfirm.txt
new file mode 100644
index 000000000..119c4292d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/pwconfirm.txt
@@ -0,0 +1,15 @@
+@FULLNAME@,
+
+Algú ha sol·licitat una nova contrasenya per al vostre compte d'usuari en @TITLE@
+@DOKUWIKIURL@
+
+Si no heu fet aquesta sol·licitud, simplement no feu cas de la resta del missatge.
+
+Per confirmar que realment heu sol·licitat una nova contrasenya, utilitzeu
+l'enllaç següent:
+
+@CONFIRM@
+
+--
+Missatge generat per DokuWiki en
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/read.txt
new file mode 100644
index 000000000..e173ad2dc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/read.txt
@@ -0,0 +1,2 @@
+Aquesta pàgina és només de lectura. Podeu veure'n el codi font, però no podeu canviar-la. Consulteu el vostre administrador si penseu que això és degut a algun error.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/recent.txt
new file mode 100644
index 000000000..cea2f5cff
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/recent.txt
@@ -0,0 +1,5 @@
+====== Canvis recents ======
+
+Les pàgines següents s'han modificat recentment.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/register.txt
new file mode 100644
index 000000000..a91e6df31
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/register.txt
@@ -0,0 +1,4 @@
+====== Registre d'un usuari nou ======
+
+Empleneu tota la informació que se us demana per crear un compte nou en aquest wiki. Assegureu-vos que doneu una **adreça de correu vàlida**, on se us enviarà la vostra contrasenya. El nom d'usuari o usuària ha de ser vàlid com a [[doku>pagename|nom de pàgina]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/registermail.txt
new file mode 100644
index 000000000..84bf5f1a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/registermail.txt
@@ -0,0 +1,14 @@
+S'ha registrat un nou usuari. Heus ací els detalls:
+
+Nom d'usuari: @NEWUSER@
+Nom complet: @NEWNAME@
+E-mail: @NEWEMAIL@
+
+Data: @DATE@
+Navegador: @BROWSER@
+Adreça IP: @IPADDRESS@
+Ordinador: @HOSTNAME@
+
+--
+Missatge generat per DokuWiki en
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/resendpwd.txt
new file mode 100644
index 000000000..cd59f899d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/resendpwd.txt
@@ -0,0 +1,3 @@
+====== Nova contrasenya ======
+
+Per sol·licitar una nova contrasenya, introduïu el vostre nom d'usuari en el formulari següent. Se us enviarà un enllaç de confirmació a l'adreça de correu amb què us vau registrar. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/revisions.txt
new file mode 100644
index 000000000..5c044d8e6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/revisions.txt
@@ -0,0 +1,4 @@
+====== Revisions anteriors ======
+
+Heus ací les revisions anteriors del document actual. Per restaurar una revisió anterior, seleccioneu-la de la llista, feu clic en ''Edita aquesta pàgina'' i deseu-la.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/searchpage.txt
new file mode 100644
index 000000000..bf69aef15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/searchpage.txt
@@ -0,0 +1,5 @@
+====== Cerca ======
+
+Heus ací els resultats de la cerca. Si no trobeu allò que buscàveu, podeu crear una pàgina nova per mitjà del botó ''Edita aquesta pàgina''.
+
+===== Resultats ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/showrev.txt
new file mode 100644
index 000000000..b1411824f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/showrev.txt
@@ -0,0 +1,2 @@
+**Aquesta és una revisió antiga del document**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/stopwords.txt
new file mode 100644
index 000000000..03be425ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/stopwords.txt
@@ -0,0 +1,106 @@
+# Això és una llista de paraules que seran omeses per l'indexador, una paraula per línia
+# Utilitzeu finals de línia UNIX
+# No cal incloure paraules de menys de 3 caràcters: s'ometran igualment
+# Llista basada en http://www.ranks.nl/stopwords/
+abans
+algun
+alguna
+alguns
+algunes
+altre
+altra
+altres
+amb
+ambdós
+anar
+ans
+aquell
+aquella
+aquelles
+aquells
+aquí
+bastant
+cada
+com
+dalt
+des
+dins
+ell
+ella
+elles
+ells
+els
+ens
+entre
+era
+erem
+eren
+eres
+estan
+estat
+estava
+estem
+esteu
+estic
+està
+ets
+faig
+fan
+fas
+fem
+fer
+feu
+haver
+inclòs
+llarg
+llavors
+mentre
+meu
+mode
+molt
+molts
+nosaltres
+per
+per que
+perquè
+però
+podem
+poden
+poder
+podeu
+potser
+primer
+puc
+quan
+quant
+qui
+sabem
+saben
+saber
+sabeu
+sap
+saps
+sense
+ser
+seu
+seus
+sóc
+solament
+sols
+som
+sota
+també
+tene
+tenim
+tenir
+teniu
+teu
+tinc
+tot
+una
+uns
+unes
+uns
+vaig
+van
+vosaltres
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/subscribermail.txt
new file mode 100644
index 000000000..5558d2ff5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/subscribermail.txt
@@ -0,0 +1,15 @@
+La pàgina @PAGE@ del wiki @TITLE@ ha estat modificada.
+Heus ací els canvis:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Per cancel·lar la subscripció a aquesta pàgina, entre al wiki en
+@DOKUWIKIURL@, aneu a
+@NEWPAGE@
+i trieu 'Cancel·la subscripció'.
+
+--
+Missatge generat per DokuWiki en
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/updateprofile.txt
new file mode 100644
index 000000000..0ba022600
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/updateprofile.txt
@@ -0,0 +1,3 @@
+====== Actualització del perfil d'usuari ======
+
+Només cal que completeu els camps que vulgueu canviar. El nom d'usuari no es pot canviar. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/uploadmail.txt
new file mode 100644
index 000000000..c282f1f37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/uploadmail.txt
@@ -0,0 +1,14 @@
+S'ha penjat un fitxer al vostre DokuWiki. Heus ací els detalls:
+
+Fitxer: @MEDIA@
+Data: @DATE@
+Navegador: @BROWSER@
+Adreça IP: @IPADDRESS@
+Ordinador: @HOSTNAME@
+Mida: @SIZE@
+Tipus MIME: @MIME@
+Usuari: @USER@
+
+--
+Missatge generat per DokuWiki en
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/wordblock.txt
new file mode 100644
index 000000000..1b5f5fb36
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/wordblock.txt
@@ -0,0 +1,4 @@
+====== Brossa blocada ======
+
+Els canvis **no** s'han desat perquè contenen una o més paraules blocades. Volíeu inundar el wiki amb brossa? Molt mal fet! Si penseu que això és un error, contacteu amb l'administrador d'aquest Wiki.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/admin.txt
new file mode 100644
index 000000000..ccfbc4455
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/admin.txt
@@ -0,0 +1,3 @@
+====== Správa ======
+
+Níže je možno spravovat vaši DokuWiki.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/adminplugins.txt
new file mode 100644
index 000000000..005f8f2df
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/adminplugins.txt
@@ -0,0 +1 @@
+===== Další pluginy ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/backlinks.txt
new file mode 100644
index 000000000..59430eeae
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/backlinks.txt
@@ -0,0 +1,3 @@
+====== Zpětné odkazy ======
+
+Zde je seznam stránek, které pravděpodobně odkazují na aktuální stránku.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/conflict.txt
new file mode 100644
index 000000000..941118db3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/conflict.txt
@@ -0,0 +1,5 @@
+====== Existuje novější verze ======
+
+Existuje novější verze právě upravovaného dokumentu. To se stává, pokud někdo jiný změnil dokument, který právě upravujete.
+
+ProhlédnÄ›te si níže uvedené rozdíly, případnÄ› rozdíly z obou verzí ruÄnÄ› spojte dohromady a rozhodnÄ›te se, kterou verzi uchovat. Pokud zvolíte ''Uložit'', bude uložena vaÅ¡e verze. Jinak stisknÄ›te ''Storno'' pro uchování původní verze.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/denied.txt
new file mode 100644
index 000000000..00a8811de
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/denied.txt
@@ -0,0 +1,3 @@
+====== Nepovolená akce ======
+
+Promiňte, ale nemáte dostateÄná oprávnÄ›ní k této Äinnosti. Možná jste se zapomnÄ›li pÅ™ihlásit?
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/diff.txt
new file mode 100644
index 000000000..d49e56993
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/diff.txt
@@ -0,0 +1,4 @@
+====== Rozdíly ======
+
+Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/draft.txt
new file mode 100644
index 000000000..ebdfb8d9d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/draft.txt
@@ -0,0 +1,5 @@
+====== Nalezen koncept ======
+
+VaÅ¡e minulá editace této stránky nebyla korektnÄ› dokonÄena. DokuWiki bÄ›hem editace automaticky uložila koncept, který nyní můžete použít a pokraÄovat v editaci. Níže je vidÄ›t text uložený bÄ›hem minulé editace.
+
+Prosím rozhodnÄ›te se, jestli chcete automaticky uložený koncept //obnovit// a pokraÄovat v editaci, nebo jej chcete //vymazat//, nebo úplnÄ› //zruÅ¡it// celý proces editace.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/edit.txt
new file mode 100644
index 000000000..1a135aee3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/edit.txt
@@ -0,0 +1 @@
+Upravte stránku a stiskněte ''Uložit''. Na stránce [[wiki:syntax]] se můžete dozvědět více o wiki syntaxi. Prosím upravujte stránky pouze, pokud je můžete **vylepšit**. V případě, že si chcete něco pouze vyzkoušet, použijte raději [[playground:playground|pískoviště]].
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/editrev.txt
new file mode 100644
index 000000000..44f0bc67d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/editrev.txt
@@ -0,0 +1,2 @@
+**Máte naÄtenou starší verzi dokumentu!** Pokud ji uložíte, vytvoříte tím novou aktuální verzi.
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/index.txt
new file mode 100644
index 000000000..d19626f6f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/index.txt
@@ -0,0 +1,3 @@
+====== Index ======
+
+Zde je k dispozici index všech dostupných stránek seřazený podle [[doku>namespaces|jmenných prostorů]].
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/install.html
new file mode 100644
index 000000000..726d7c31f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/install.html
@@ -0,0 +1,23 @@
+<p>Tato stránka vám pomůže při první instalaci a konfiguraci
+<a href="http://dokuwiki.org">Dokuwiki</a>. Více
+informací o tomto instalátoru naleznete v jeho vlastní <a
+href="http://dokuwiki.org/installer">dokumentaci</a>.</p>
+
+<p>DokuWiki používá obyÄejné soubory pro uložení wiki stránek a dalších informací
+spojených s nimi (např. obrázků, vyhledávacích indexů, starších verzí). Aby DokuWiki
+správně fungovala <strong>musí</strong> mít přístup k adresářům, kde jsou uloženy
+tyto soubory. Tento instalátor není schopen sám nastavit přístupová práva k souborům
+a adresářům. To se obyÄejnÄ› dÄ›lá přímo v shellu nebo, používáte-li hosting, pÅ™es
+FTP nebo ovládací panel vašeho hostingu (např. cPanel).</p>
+
+<p>Tento instalátor nastaví <acronym title="access control list">ACL</acronym>
+(přístupová práva uživatelů) pro vaši DokuWiki, což umožní správci přihlásit
+se do administraÄní Äásti DokuWiki a tam instalovat pluginy, spravovat uživatele,
+nastavovat přístup k wiki stránkám a měnit další nastavení wiki. Není to
+nutné, ale zpříjemní to správu DokuWiki.</p>
+
+<p>Zkušení uživatelé nebo uživatelé se speciálními požadavky by se
+měli podívat na následující stránky pro další informace ohledně
+<a href="http://dokuwiki.org/install">instalace</a> a
+<a href="http://dokuwiki.org/config">nastavení</a> DokuWiki.</p>
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/lang.php
new file mode 100644
index 000000000..ffc2a05d7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/lang.php
@@ -0,0 +1,247 @@
+<?php
+/**
+ * Czech language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Bohumir Zamecnik <bohumir@zamecnik.org>
+ * @author Tomas Valenta <t.valenta@sh.cvut.cz>
+ * @author Zbynek Krivka <zbynek.krivka@seznam.cz>
+ * @author tomas@valenta.cz
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '„';
+$lang['doublequoteclosing'] = '“';
+$lang['singlequoteopening'] = '‚';
+$lang['singlequoteclosing'] = '‘';
+$lang['apostrophe'] = '\'';
+$lang['btn_edit'] = 'Upravit stránku';
+$lang['btn_source'] = 'Zdrojový kód stránky';
+$lang['btn_show'] = 'Zobrazit stránku';
+$lang['btn_create'] = 'Vytvořit stránku';
+$lang['btn_search'] = 'Hledat';
+$lang['btn_save'] = 'Uložit';
+$lang['btn_preview'] = 'Náhled';
+$lang['btn_top'] = 'Nahoru';
+$lang['btn_newer'] = '<< novější';
+$lang['btn_older'] = 'starší >>';
+$lang['btn_revs'] = 'Starší verze';
+$lang['btn_recent'] = 'Poslední úpravy';
+$lang['btn_upload'] = 'NaÄíst';
+$lang['btn_cancel'] = 'Storno';
+$lang['btn_index'] = 'Index';
+$lang['btn_secedit'] = 'Upravit';
+$lang['btn_login'] = 'Přihlásit se';
+$lang['btn_logout'] = 'Odhlásit se';
+$lang['btn_admin'] = 'Správa';
+$lang['btn_update'] = 'Aktualizovat';
+$lang['btn_delete'] = 'Vymazat';
+$lang['btn_back'] = 'Zpět';
+$lang['btn_backlink'] = 'Zpětné odkazy';
+$lang['btn_backtomedia'] = 'Zpět do Výběru dokumentu';
+$lang['btn_subscribe'] = 'Odebírat mailem změny stránky';
+$lang['btn_unsubscribe'] = 'Neodebírat mailem změny stránky';
+$lang['btn_subscribens'] = 'Odebírat mailem změny ve jmenném prostoru';
+$lang['btn_unsubscribens'] = 'Neodebírat mailem změny ve jmenném prostoru';
+$lang['btn_profile'] = 'Upravit profil';
+$lang['btn_reset'] = 'Reset';
+$lang['btn_resendpwd'] = 'Zaslat nové heslo';
+$lang['btn_draft'] = 'Upravit koncept';
+$lang['btn_recover'] = 'Obnovit koncept';
+$lang['btn_draftdel'] = 'Vymazat koncept';
+$lang['btn_revert'] = 'Vrátit zpět';
+$lang['loggedinas'] = 'Přihlášen(a) jako';
+$lang['user'] = 'Uživatelské jméno';
+$lang['pass'] = 'Heslo';
+$lang['newpass'] = 'Nové heslo';
+$lang['oldpass'] = 'SouÄasné heslo';
+$lang['passchk'] = 'ještě jednou';
+$lang['remember'] = 'Přihlásit se nastálo';
+$lang['fullname'] = 'Celé jméno';
+$lang['email'] = 'E-mail';
+$lang['register'] = 'Registrovat';
+$lang['profile'] = 'Uživatelský profil';
+$lang['badlogin'] = 'Zadané uživatelské jméno a heslo není správně.';
+$lang['minoredit'] = 'Drobné změny';
+$lang['draftdate'] = 'Koncept automaticky uložen v';
+$lang['nosecedit'] = 'Stránka byla v meziÄase zmÄ›nÄ›na. Informace o sekci již nebylo platné, byla naÄtena celá stránka.';
+$lang['regmissing'] = 'Musíte vyplnit všechny údaje.';
+$lang['reguexists'] = 'Uživatel se stejným jménem už je zaregistrován.';
+$lang['regsuccess'] = 'Uživatelský úÄet byl vytvoÅ™en a heslo zasláno mailem.';
+$lang['regsuccess2'] = 'Uživatelský úÄet byl vytvoÅ™en.';
+$lang['regmailfail'] = 'Zdá se, že nastala chyba při posílání mailu s heslem. Zkuste kontaktovat správce.';
+$lang['regbadmail'] = 'Zadaná mailová adresa není platná. Pokud si myslíte, že to je špatně, zkuste kontaktovat správce.';
+$lang['regbadpass'] = 'Heslo nebylo zadáno dvakrát stejně, zkuste to prosím znovu.';
+$lang['regpwmail'] = 'Vaše heslo do systému DokuWiki';
+$lang['reghere'] = 'Nemáte uživatelský úÄet? ZÅ™iÄte si ho';
+$lang['profna'] = 'Tato wiki neumožňuje změnu profilu';
+$lang['profnochange'] = 'Žádné změny nebyly provedeny.';
+$lang['profnoempty'] = 'Nelze zadat prázdné jméno nebo mailová adresa.';
+$lang['profchanged'] = 'Uživatelský profil změněn.';
+$lang['pwdforget'] = 'Zapomněli jste heslo? Nechte si zaslat nové';
+$lang['resendna'] = 'Tato wiki neumožňuje zasílání nových hesel.';
+$lang['resendpwd'] = 'Odeslat nové heslo pro uživatele';
+$lang['resendpwdmissing'] = 'Musíte vyplnit všechny položky.';
+$lang['resendpwdnouser'] = 'Bohužel takový uživatel v systému není.';
+$lang['resendpwdbadauth'] = 'AutorizaÄní kód není platný. Zadali jste opravdu celý odkaz na potvrzovací stránku?';
+$lang['resendpwdconfirm'] = 'Odkaz na potvrzovací stránku byl odeslán mailem.';
+$lang['resendpwdsuccess'] = 'Vaše nové heslo bylo odesláno emailem.';
+$lang['license'] = 'Kromě míst, kde je explicitně uvedeno jinak, je obsah této wiki licencován pod následující licencí:';
+$lang['licenseok'] = 'Poznámka: Tím, že editujete tuto stránku, souhlasíte, aby váš obsah byl licencován pod následující licencí:';
+$lang['searchmedia'] = 'Hledat jméno souboru:';
+$lang['searchmedia_in'] = 'Hledat v %s';
+$lang['txt_upload'] = 'Vyberte soubor jako přílohu';
+$lang['txt_filename'] = 'Wiki jméno (volitelné)';
+$lang['txt_overwrt'] = 'Přepsat existující soubor';
+$lang['lockedby'] = 'Právě zamknuto:';
+$lang['lockexpire'] = 'Zámek vyprší:';
+$lang['willexpire'] = 'Váš zámek pro editaci za chvíli vyprší.\nAbyste pÅ™edeÅ¡li konfliktům, stisknÄ›te tlaÄítko Náhled a zámek se prodlouží.';
+$lang['notsavedyet'] = 'Jsou tu neuložené zmÄ›ny, které budou ztraceny.\nChcete opravdu pokraÄovat?';
+$lang['rssfailed'] = 'Nastala chyba při vytváření tohoto RSS: ';
+$lang['nothingfound'] = 'Nic nenalezeno.';
+$lang['mediaselect'] = 'Výběr dokumentu';
+$lang['fileupload'] = 'NaÄtení dokumentu';
+$lang['uploadsucc'] = 'Přenos proběhl v pořádku';
+$lang['uploadfail'] = 'Chyba pÅ™i naÄítání. Možná kvůli Å¡patnÄ› nastaveným právům?';
+$lang['uploadwrong'] = 'NaÄtení souboru s takovouto příponou není dovoleno.';
+$lang['uploadexist'] = 'Soubor už existuje, necháme ho být.';
+$lang['uploadbadcontent'] = 'Obsah naÄteného dokumentu %s neodpovídá jeho příponÄ›.';
+$lang['uploadspam'] = 'NaÄtený dokument byl odmítnut, je na spamovém blacklistu.';
+$lang['uploadxss'] = 'NaÄtený dokument byl odmítnut. Zdá se, že obsahuje Å¡kodlivé vÄ›ci.';
+$lang['uploadsize'] = 'Nahraný soubor byl příliš velký (max. %s)';
+$lang['deletesucc'] = 'Soubor "%s" byl vymazán.';
+$lang['deletefail'] = 'Soubor "%s" nelze vymazat - zkontrolujte oprávnění.';
+$lang['mediainuse'] = 'Soubor "%s" nebyl vymazán - stále se používá.';
+$lang['namespaces'] = 'Jmenné prostory';
+$lang['mediafiles'] = 'Dostupné soubory';
+$lang['js']['searchmedia'] = 'Hledat soubory';
+$lang['js']['keepopen'] = 'Po vybrání souboru nechat okno otevřené';
+$lang['js']['hidedetails'] = 'Skrýt detaily';
+$lang['js']['nosmblinks'] = 'Odkazování na sdílené prostředky Windows funguje jen v Internet Exploreru.
+Přesto tento odkaz můžete zkopírovat a vložit jinde.';
+$lang['js']['linkwiz'] = 'Průvodce odkazy';
+$lang['js']['linkto'] = 'Odkaz na:';
+$lang['js']['del_confirm'] = 'Vymazat tuto položku?';
+$lang['js']['mu_btn'] = 'NaÄíst více souborů najednou';
+$lang['mediausage'] = 'K odkázání se na tento soubor použijte následující syntax:';
+$lang['mediaview'] = 'Zobrazit původní soubor';
+$lang['mediaroot'] = 'root';
+$lang['mediaupload'] = 'NaÄíst soubor do aktuálního jmenného prostoru. K vytvoÅ™ení nových jmenných prostorů, pÅ™idejte jejich názvy na zaÄátek wiki jména (oddÄ›lte dvojteÄkou).';
+$lang['mediaextchange'] = 'Přípona souboru byla změněna z .%s na .%s!';
+$lang['reference'] = 'Odkazy na';
+$lang['ref_inuse'] = 'Soubor nelze vymazat, jelikož ho využívají následující stránky:';
+$lang['ref_hidden'] = 'Některé odkazy jsou na stránkách, kam nemáte právo přístupu';
+$lang['hits'] = '- poÄet výskytů';
+$lang['quickhits'] = 'Odpovídající stránky';
+$lang['toc'] = 'Obsah';
+$lang['current'] = 'aktuální';
+$lang['yours'] = 'Vaše verze';
+$lang['diff'] = 'zobrazit rozdíly vůÄi aktuální verzi';
+$lang['diff2'] = 'zobrazit rozdíly mezi vybranými verzemi';
+$lang['line'] = 'Řádek';
+$lang['breadcrumb'] = 'Historie';
+$lang['youarehere'] = 'Umístění';
+$lang['lastmod'] = 'Poslední úprava';
+$lang['by'] = 'autor:';
+$lang['deleted'] = 'odstraněno';
+$lang['created'] = 'vytvořeno';
+$lang['restored'] = 'stará verze byla obnovena';
+$lang['external_edit'] = 'upraveno mimo DokuWiki';
+$lang['summary'] = 'Komentář k úpravám';
+$lang['noflash'] = 'Pro přehrání obsahu potřebujete <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a>.';
+$lang['download'] = 'Stáhnout snippet';
+$lang['mail_newpage'] = 'nová stránka:';
+$lang['mail_changed'] = 'změna stránky:';
+$lang['mail_new_user'] = 'nový uživatel:';
+$lang['mail_upload'] = 'naÄtený dokument:';
+$lang['qb_bold'] = 'TuÄnÄ›';
+$lang['qb_italic'] = 'Kurzíva';
+$lang['qb_underl'] = 'Podtržení';
+$lang['qb_code'] = 'Neformátovat (zdrojový kód)';
+$lang['qb_strike'] = 'Přeškrtnutý text';
+$lang['qb_h1'] = 'Nadpis 1. úrovně';
+$lang['qb_h2'] = 'Nadpis 2. úrovně';
+$lang['qb_h3'] = 'Nadpis 3. úrovně';
+$lang['qb_h4'] = 'Nadpis 4. úrovně';
+$lang['qb_h5'] = 'Nadpis 5. úrovně';
+$lang['qb_h'] = 'Nadpis';
+$lang['qb_hs'] = 'Vybrat nadpis';
+$lang['qb_hplus'] = 'Nadpis vyšší úrovně';
+$lang['qb_hminus'] = 'Nadpis nižší úrovně';
+$lang['qb_hequal'] = 'Nadpis stejné úrovně';
+$lang['qb_link'] = 'Interní odkaz';
+$lang['qb_extlink'] = 'Externí odkaz';
+$lang['qb_hr'] = 'Vodorovná Äára';
+$lang['qb_ol'] = 'Číslovaný seznam';
+$lang['qb_ul'] = 'NeÄíslovaný seznam';
+$lang['qb_media'] = 'Vložit obrázky nebo jiné soubory';
+$lang['qb_sig'] = 'Vložit podpis';
+$lang['qb_smileys'] = 'Emotikony';
+$lang['qb_chars'] = 'Speciální znaky';
+$lang['upperns'] = 'skoÄit do nadÅ™azeného jmenného prostoru';
+$lang['admin_register'] = 'Přidat nového uživatele';
+$lang['metaedit'] = 'Upravit Metadata';
+$lang['metasaveerr'] = 'Chyba při zápisu metadat';
+$lang['metasaveok'] = 'Metadata uložena';
+$lang['img_backto'] = 'Zpět na';
+$lang['img_title'] = 'Titulek';
+$lang['img_caption'] = 'Popis';
+$lang['img_date'] = 'Datum';
+$lang['img_fname'] = 'Jméno souboru';
+$lang['img_fsize'] = 'Velikost';
+$lang['img_artist'] = 'Autor fotografie';
+$lang['img_copyr'] = 'Copyright';
+$lang['img_format'] = 'Formát';
+$lang['img_camera'] = 'Typ fotoaparátu';
+$lang['img_keywords'] = 'KlíÄová slova';
+$lang['subscribe_success'] = 'Uživatel %s je nyní přihlášen k odběru změn ve stránce %s';
+$lang['subscribe_error'] = 'Chyba při zařazování uživatele %s do seznamu pro odběr změn ve stránce %s';
+$lang['subscribe_noaddress'] = 'K vašemu uživatelskému profilu chybí mailová adresa, takže vás nelze zařadit do seznamu pro odběr změn';
+$lang['unsubscribe_success'] = 'Uživatel %s byl odebrán ze seznamu pro odběr změn ve stránce %s';
+$lang['unsubscribe_error'] = 'Chyba při odstraňování uživatele %s ze seznamu pro odběru změn ve stránce %s';
+$lang['authmodfailed'] = 'Autentizace uživatelů je špatně nastavena. Informujte prosím správce této wiki.';
+$lang['authtempfail'] = 'Autentizace uživatelů je doÄasnÄ› nedostupná. Pokud tento problém pÅ™etrvává, informujte prosím správce této wiki.';
+$lang['i_chooselang'] = 'Vyberte si jazyk';
+$lang['i_installer'] = 'Instalace DokuWiki';
+$lang['i_wikiname'] = 'Název wiki';
+$lang['i_enableacl'] = 'Zapnout ACL (doporuÄeno)';
+$lang['i_superuser'] = 'Správce';
+$lang['i_problems'] = 'Instalátor narazil na níže popsané problémy. Nelze pokraÄovat v instalaci, dokud je neopravíte.';
+$lang['i_modified'] = 'Instalátor bude z bezpeÄnostních důvodů pracovat pouze s Äistou a jeÅ¡tÄ› neupravenou instalací DokuWiki. BuÄ znovu rozbalte souboru z instalaÄního balíÄku nebo se zkuste poradit s <a href="http://dokuwiki.org/install">instrukcemi pro instalci DokuWiki</a>.';
+$lang['i_funcna'] = 'PHP funkce <code>%s</code> není dostupná. Váš webhosting ji možná z nějakého důvodu vypnul.';
+$lang['i_phpver'] = 'Verze vaší instalace PHP <code>%s</code> je nižší než požadovaná <code>%s</code>. Budete muset aktualizovat svou instalaci PHP.';
+$lang['i_permfail'] = 'DokuWiki nemůže zapisovat do <code>%s</code>. Budete muset opravit práva k tomuto adresáři.';
+$lang['i_confexists'] = '<code>%s</code> již existuje';
+$lang['i_writeerr'] = 'Nelze vytvoÅ™it <code>%s</code>. Budete muset zkontrolovat práva k souborům Äi adresářům a vytvoÅ™it tento soubor ruÄnÄ›.';
+$lang['i_badhash'] = 'soubor dokuwiki.php (hash=<code>%s</code>) nebyl rozpoznán nebo byl upraven';
+$lang['i_badval'] = '<code>%s</code> - neplatná nebo prázdná hodnota';
+$lang['i_success'] = 'Konfigurace byla úspěšnÄ› dokonÄena. Nyní můžete smazat soubor install.php. PokraÄujte do <a href="doku.php">své nové DokuWiki</a>.';
+$lang['i_failure'] = 'Vyskytly se nÄ›jaké chyby pÅ™i zápisu do konfiguraÄních souborů. Budete je nejspíš muset upravit ruÄnÄ› pÅ™ed použitím <a href="doku.php">své nové DokuWiki</a>.';
+$lang['i_policy'] = 'Úvodní politika ACL';
+$lang['i_pol0'] = 'OtevÅ™ená wiki (Ätení, zápis a upload pro vÅ¡echny)';
+$lang['i_pol1'] = 'VeÅ™ejná wiki (Ätení pro vÅ¡echny, zápis a upload pro registrované uživatele)';
+$lang['i_pol2'] = 'UzavÅ™ená wiki (Ätení, zápis a upload pouze pro registrované uživatele)';
+$lang['i_retry'] = 'Zkusit znovu';
+$lang['mu_intro'] = 'Zde můžete naÄíst více souborů najednou. Pro pÅ™idání souborů do fronty stisknÄ›te tlaÄítko "Procházet". Až budete hotovi, stisknÄ›te "NaÄíst".';
+$lang['mu_gridname'] = 'Název souboru';
+$lang['mu_gridsize'] = 'Velikost';
+$lang['mu_gridstat'] = 'Stav';
+$lang['mu_namespace'] = 'Jmenný prostor';
+$lang['mu_browse'] = 'Procházet';
+$lang['mu_toobig'] = 'příliš velké';
+$lang['mu_ready'] = 'pÅ™ipraveno k naÄtení';
+$lang['mu_done'] = 'hotovo';
+$lang['mu_fail'] = 'selhalo';
+$lang['mu_authfail'] = 'vypršla session';
+$lang['mu_progress'] = '@PCT@% naÄten';
+$lang['mu_filetypes'] = 'Povolené typy souborů';
+$lang['mu_info'] = 'soubory naÄteny.';
+$lang['mu_lasterr'] = 'Poslední chyba:';
+$lang['recent_global'] = 'Právě si prohlížíte změny ve jmenném prostoru <b>%s</b>. Také si můžete <a href="%s">zobrazit změny v celé wiki</a>.';
+$lang['years'] = 'před % roky';
+$lang['months'] = 'před % měsíci';
+$lang['weeks'] = 'před % týdny';
+$lang['days'] = 'před % dny';
+$lang['hours'] = 'před % hodinami';
+$lang['minutes'] = 'před % minutami';
+$lang['seconds'] = 'před % sekundami';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/locked.txt
new file mode 100644
index 000000000..23fd943a1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/locked.txt
@@ -0,0 +1,3 @@
+====== Stránka je zamknutá ======
+
+Tato stránka je právÄ› zamknutá pro úpravy jiným uživatelem. Musíte poÄkat, než onen uživatel dokonÄí své úpravy nebo než tento zámek vyprší.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/login.txt
new file mode 100644
index 000000000..a44ae599a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/login.txt
@@ -0,0 +1,3 @@
+====== Přihlášení ======
+
+MomentálnÄ› nejste pÅ™ihlášen(a)! Prosím vložte své identifikaÄní údaje níže. Pro pÅ™ihlášení musíte mít zapnuté cookies.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/mailtext.txt
new file mode 100644
index 000000000..9fc68cdce
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/mailtext.txt
@@ -0,0 +1,17 @@
+Stránka ve vaší DokuWiki byla změněna. Zde jsou podrobnosti:
+
+Datum : @DATE@
+ProhlížeÄ : @BROWSER@
+IP adresa : @IPADDRESS@
+Hostitel : @HOSTNAME@
+Stará verze : @OLDPAGE@
+Nová verze : @NEWPAGE@
+Komentář : @SUMMARY@
+Uživatel : @USER@
+
+@DIFF@
+
+
+--
+Tato zpráva byla vygenerována systémem DokuWiki
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/newpage.txt
new file mode 100644
index 000000000..091250af7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/newpage.txt
@@ -0,0 +1,3 @@
+====== Stránka s tímto názvem ještě neexistuje ======
+
+Odkaz vás zavedl na stránku, která jeÅ¡tÄ› neexistuje. Můžete ji vytvoÅ™it stisknutím tlaÄítka ''VytvoÅ™it stránku''.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/norev.txt
new file mode 100644
index 000000000..f601f5899
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/norev.txt
@@ -0,0 +1,3 @@
+====== Taková verze neexistuje ======
+
+Zadaná verze neexistuje. StisknÄ›te tlaÄítko ''Starší verze'' pro seznam starších verzí tohoto dokumentu.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/preview.txt
new file mode 100644
index 000000000..079eda4e7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/preview.txt
@@ -0,0 +1,3 @@
+====== Náhled ======
+
+Zde je náhled, jak bude dokument vypadat. Pozor: Soubor zatím **není uložen**!
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/pwconfirm.txt
new file mode 100644
index 000000000..1199150e2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/pwconfirm.txt
@@ -0,0 +1,13 @@
+Dobrý den,
+
+NÄ›kdo požádal o nové heslo k vaÅ¡emu uživatelskému úÄtu na wiki @TITLE@ (@DOKUWIKIURL@)
+
+Pokud jste o nové heslo nežádali, ignorujte prosím tento mail.
+
+Pro potvrzení, že jste tento požadavek poslali opravdu vy, prosím otevřete následující odkaz.
+
+@CONFIRM@
+
+--
+Tento mail byl automaticky vygenerován systémem DokuWiki
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/read.txt
new file mode 100644
index 000000000..d5b2d73cb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/read.txt
@@ -0,0 +1 @@
+Tato stránka je pouze pro Ätení. Můžete si pouze prohlédnout zdrojový kód, ale ne ho mÄ›nit. Zeptejte se správce, pokud si myslíte, že nÄ›co není v pořádku.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/recent.txt
new file mode 100644
index 000000000..e4ca5e9bc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/recent.txt
@@ -0,0 +1,3 @@
+====== Poslední úpravy ======
+
+Následující stránky byly nedávno změněny.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/register.txt
new file mode 100644
index 000000000..b0d6bb1ff
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/register.txt
@@ -0,0 +1,3 @@
+====== Zaregistrujte se jako nový uživatel ======
+
+Abyste získali uživatelský úÄet, vyplňte prosím vÅ¡echny informace v následujícím formuláři. Zadejte **platnou** mailovou adresu, na níž bude zasláno heslo. Uživatelské jméno musí být v platném [[doku>pagename|formátu]] (který je stejný jako formát názvu stránky).
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/registermail.txt
new file mode 100644
index 000000000..e51ee6bb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/registermail.txt
@@ -0,0 +1,14 @@
+Zaregistroval se nový uživatel. Zde jsou detaily:
+
+Uživatelské jméno : @NEWUSER@
+Celé jméno : @NEWNAME@
+E-mail : @NEWEMAIL@
+
+Datum : @DATE@
+ProhlížeÄ : @BROWSER@
+IP adresa : @IPADDRESS@
+Hostitel : @HOSTNAME
+
+--
+Tato zpráva byla vygenerována systémem DokuWiki
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/resendpwd.txt
new file mode 100644
index 000000000..1d2aa0d97
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/resendpwd.txt
@@ -0,0 +1,3 @@
+====== Zaslat nové heslo ======
+
+Abyste získali nové heslo k vaÅ¡emu uÄtu v této wiki, vyplňte vÅ¡echny níže uvedené informace . VaÅ¡e nové heslo bude zasláno na emailovou adresu, kterou jste zadali pÅ™i registraci. Uživatelské jméno by mÄ›lo být stejné jako vaÅ¡e uživatelské jméno, s nímž se pÅ™ihlaÅ¡ujete do této wiki.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/revisions.txt
new file mode 100644
index 000000000..e3744b76f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/revisions.txt
@@ -0,0 +1,3 @@
+====== Starší verze ======
+
+Zde jsou starší verze daného dokumentu. Pro návrat ke starší verzi si ji zvolte ze seznamu níže, stisknÄ›te tlaÄítko ''Upravit stránku'' a uložte ji.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/searchpage.txt
new file mode 100644
index 000000000..ac045e100
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/searchpage.txt
@@ -0,0 +1,5 @@
+====== Vyhledávání ======
+
+Výsledky hledání můžete vidÄ›t níže. Pokud jste nenaÅ¡li, co hledáte, zkuste požadovanou stránku sami vytvoÅ™it stisknutím tlaÄítka ''VytvoÅ™it stránku''.
+
+===== Výsledky =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/showrev.txt
new file mode 100644
index 000000000..48be467b2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/showrev.txt
@@ -0,0 +1,3 @@
+**Toto je starší verze dokumentu!**
+----
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/stopwords.txt
new file mode 100644
index 000000000..26d874143
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/stopwords.txt
@@ -0,0 +1,944 @@
+# Stopwords for Czech - generated from ispell-cs (license: GNU GPL)
+aby
+ako
+akorát
+ale
+and
+ani
+ano
+apod
+asi
+atd
+během
+bez
+beze
+blízko
+bohudík
+bohužel
+bokem
+buÄ
+bude
+budem
+budeme
+budeš
+budete
+budiž
+budou
+budu
+bůhvíco
+bůhvíÄí
+bůhvíjak
+bůhvíjaký
+bůhvíkam
+bůhvíkde
+bůhvíkdo
+bůhvíkdy
+bůhvíkolik
+bůhvíkterý
+bůhvínaÄ
+bůhvíproÄ
+bych
+bychom
+byl
+byla
+byli
+bylo
+byly
+bysme
+být
+cca
+cokoli
+cokoliv
+copak
+cosi
+což
+cože
+ÄastÄ›ji
+Äasto
+Äeho
+Äehokoli
+Äehokoliv
+Äehosi
+Äehož
+Äem
+Äemkoli
+Äemkoliv
+Äemsi
+Äemu
+Äemukoli
+Äemukoliv
+Äemusi
+Äemuž
+Äemž
+Äertvíco
+ÄertvíÄí
+Äertvíjak
+Äertvíjaký
+Äertvíkam
+Äertvíkde
+Äertvíkdo
+Äertvíkdy
+Äertvíkolik
+Äertvíkterý
+ÄertvínaÄ
+ÄertvíproÄ
+Äíhokoli
+Äíhosi
+Äíchkoli
+Äíchsi
+Äíkoli
+Äím
+Äímakoli
+Äímasi
+Äímikoli
+Äímisi
+Äímkoli
+Äímkoliv
+Äímpak
+Äímsi
+Äímukoli
+Äímusi
+Äímž
+Äísi
+dál
+dále
+daleko
+další
+dám
+dle
+dnem
+dnes
+dneska
+dobrá
+dobré
+dobrý
+dobře
+docela
+dokonce
+doposavad
+doposud
+doprostřed
+dosavad
+dospod
+dospodu
+dost
+dosti
+dosud
+dovnitÅ™
+eště
+formou
+ho
+hodinou
+hodnÄ›
+horší
+hůř
+hůře
+chceš
+chci
+chtěl
+jacíkoli
+jacíkoliv
+jacípak
+jacísi
+jak
+jakákoli
+jakákoliv
+jakápak
+jakási
+jaké
+jakéhokoli
+jakéhokoliv
+jakéhopak
+jakéhosi
+jakékoli
+jakékoliv
+jakémkoli
+jakémkoliv
+jakémpak
+jakémsi
+jakémukoli
+jakémukoliv
+jakémupak
+jakémusi
+jaképak
+jakési
+jakmile
+jako
+jakou
+jakoukoli
+jakoukoliv
+jakoupak
+jakousi
+jakož
+jakpak
+jaký
+jakýchkoli
+jakýchkoliv
+jakýchpak
+jakýchsi
+jakýkoli
+jakýkoliv
+jakýmakoli
+jakýmakoliv
+jakýmapak
+jakýmasi
+jakýmikoli
+jakýmikoliv
+jakýmipak
+jakýmisi
+jakýmkoli
+jakýmkoliv
+jakýmpak
+jakýmsi
+jakýpak
+jakýsi
+jakže
+jasné
+jasnÄ›
+jde
+je
+jediná
+jediné
+jediný
+jeho
+jehož
+jej
+její
+jejíhož
+jejich
+jejichž
+jejíchž
+jejímaž
+jejímiž
+jejímuž
+jejímž
+jejíž
+jejž
+jelikož
+jemu
+jemuž
+jen
+jenom
+jenž
+jenže
+jestli
+ještě
+jež
+ježto
+ji
+jí
+jich
+jichž
+jim
+jím
+jimi
+jimiž
+jimž
+jímž
+jiná
+jinak
+jiné
+jinou
+jiný
+jiných
+jiným
+jisté
+jistÄ›
+již
+jíž
+jménem
+jsem
+jseš
+jsi
+jsme
+jsou
+jste
+kam
+každý
+kde
+kdeco
+kdeÄí
+kdejaký
+kdekdo
+kdekterý
+kdepak
+kdesi
+kdo
+kdokoli
+kdokoliv
+kdopak
+kdosi
+kdovíjak
+kdovíkde
+kdovíkdo
+kdož
+kdy
+kdysi
+když
+kohokoli
+kohokoliv
+kohopak
+kohosi
+kohož
+kol
+kolem
+kolik
+kolikže
+kolkolem
+komkoli
+komkoliv
+kompak
+komsi
+komu
+komukoli
+komukoliv
+komupak
+komusi
+komuž
+komž
+koncem
+konÄe
+konÄí
+konÄíc
+konec
+kontra
+kromÄ›
+která
+kterákoli
+kterákoliv
+kterási
+kterážto
+které
+kteréhokoli
+kteréhokoliv
+kteréhosi
+kteréhož
+kterékoli
+kterékoliv
+kterém
+kterémkoli
+kterémkoliv
+kterémsi
+kterémukoli
+kterémukoliv
+kterémusi
+kterémuž
+kterémžto
+kterési
+kteréžto
+kterou
+kteroukoli
+kteroukoliv
+kterousi
+kteroužto
+který
+kterýchkoli
+kterýchkoliv
+kterýchsi
+kterýchžto
+kterýkoli
+kterýkoliv
+kterým
+kterýmakoli
+kterýmakoliv
+kterýmasi
+kterýmikoli
+kterýmikoliv
+kterýmisi
+kterýmiž
+kterýmkoli
+kterýmkoliv
+kterýmsi
+kterýmžto
+kterýsi
+kterýžto
+kteří
+kteřísi
+kteřížto
+ktříkoli
+ktříkoliv
+kupodivu
+kupříkladu
+kvůli
+kýmkoli
+kýmkoliv
+kýmpak
+kýmsi
+kýmž
+lecco
+leccos
+lecÄems
+lecjak
+lecjaký
+leckam
+leckams
+leckde
+leckdo
+leckdy
+leckterý
+ledaco
+ledacos
+ledaÄí
+ledajak
+ledajaký
+ledakdo
+ledakterý
+ledaskam
+ledaskde
+ledaskdo
+ledaskdy
+lépe
+lepší
+líp
+má
+mají
+málo
+máloco
+málokdo
+málokterý
+mám
+máme
+máš
+máte
+max
+mé
+mÄ›
+mého
+měl
+měla
+mělo
+mém
+mému
+mezi
+mi
+mí
+mimo
+min
+míň
+místo
+mít
+mne
+mnÄ›
+mnoho
+mnou
+moc
+mohl
+mohla
+mohou
+mohu
+moje
+moji
+mojí
+mou
+možná
+mu
+můj
+musel
+muset
+musí
+musím
+musíš
+musíte
+může
+můžeš
+můžete
+můžu
+my
+mých
+mým
+mými
+naÄ
+naÄež
+naÄpak
+nad
+nade
+nám
+námi
+namísto
+naň
+naprosto
+naproti
+napÅ™
+napříÄ
+nás
+náš
+naši
+navíc
+navrch
+navrchu
+navzdory
+nÄ›
+nebo
+nebude
+nebyl
+nebyli
+nebyly
+něco
+nÄ›Äí
+nedaleko
+nehledíc
+něho
+něhož
+nechceš
+nechci
+nechť
+nechtěl
+něj
+nějak
+nějaká
+nějaké
+nějakého
+nějakou
+nějaký
+nejasné
+nejasný
+nejÄastÄ›ji
+nejde
+nejen
+nejhůř
+nejhůře
+nejlépe
+nejnižší
+nejsem
+nejsou
+nejvyšší
+nějž
+někam
+někde
+někdo
+někdy
+několik
+nekonÄí
+některý
+nelze
+něm
+nemá
+nemají
+nemálo
+nemám
+nemáme
+nemáš
+nemáte
+nemít
+nemohl
+nemohla
+nemohou
+nemohu
+němu
+nemusel
+nemuset
+nemusí
+nemusím
+nemusíš
+němuž
+nemůže
+nemůžeš
+nemůžete
+nemůžu
+němž
+není
+nepřesná
+nepřesné
+nepřesně
+nepřesný
+nepřímo
+netřeba
+netuším
+netýká
+neví
+nevím
+nevíš
+nevlastní
+nevyjímaje
+nevyjímajíc
+než
+něž
+ni
+ní
+nic
+niÄeho
+niÄem
+niÄemu
+niÄí
+niÄím
+nie
+nieje
+nich
+nichž
+nijaký
+nikdo
+nikto
+nim
+ním
+nimi
+nimiž
+nimž
+nímž
+nízká
+niž
+níž
+nižádný
+níže
+nižší
+nový
+nutnÄ›
+oba
+obÄ›
+oběma
+obou
+oÄ
+oÄpak
+ode
+odspoda
+odspodu
+ohlednÄ›
+okamžikem
+okolo
+on
+oň
+ona
+onen
+oni
+ono
+ony
+opravdu
+oproti
+ostatní
+osum
+pak
+poblíž
+poÄátkem
+poÄínaje
+poÄínajíc
+pod
+pode
+podél
+podle
+podobnÄ›
+pokud
+poměrně
+pomocí
+ponad
+pořád
+poslední
+posléze
+posud
+potom
+pražádný
+pro
+proÄ
+proÄpak
+proň
+prostÄ›
+proti
+proto
+protože
+před
+přede
+předem
+přes
+přese
+přesná
+přesné
+přesně
+přesný
+při
+pÅ™iÄemž
+přímo
+případná
+případné
+případně
+případný
+přitom
+půlí
+raději
+rokem
+sám
+sama
+samá
+samé
+samého
+samém
+samému
+sami
+samo
+samou
+samozřejmě
+samozřejmý
+samu
+samy
+samý
+samých
+samým
+samými
+se
+sebe
+sebou
+sem
+ses
+si
+sice
+sis
+skoro
+skrz
+skrze
+snad
+sobÄ›
+som
+sotva
+sotvaco
+sotvakdo
+spíš
+spíše
+spodem
+spolu
+staÄí
+stejnÄ›
+stranou
+středem
+svá
+své
+svého
+svém
+svému
+sví
+svoje
+svoji
+svojí
+svou
+svrchu
+svůj
+svých
+svým
+svými
+špatná
+špatné
+Å¡patnÄ›
+špatný
+tací
+tady
+tahle
+tak
+taká
+také
+takhle
+takováto
+takové
+takovéhoto
+takovémto
+takovémuto
+takovéto
+takovíto
+takovouto
+takový
+takovýchto
+takovýma
+takovýmato
+takovýmito
+takovýmto
+takovýto
+takto
+taky
+taký
+takže
+tam
+tamten
+tatáž
+tato
+táž
+tÄ›
+tebe
+tebou
+teÄ
+teda
+tedy
+téhle
+téhož
+těchhle
+těchto
+těchže
+těm
+téma
+těmahle
+těmhle
+těmihle
+těmito
+těmto
+těmu
+témuž
+témž
+témže
+ten
+tenhle
+tenhleten
+tento
+tentýž
+této
+téže
+ti
+tihle
+tím
+tímhle
+tímtéž
+tímto
+titíž
+tito
+tíž
+tobÄ›
+tohle
+toho
+tohohle
+tohoto
+tom
+tomhle
+tomtéž
+tomto
+tomu
+tomuhle
+tomuto
+totéž
+toto
+touhle
+toutéž
+touto
+touž
+touže
+trochu
+trošku
+třeba
+tuhle
+tutéž
+tuto
+tvá
+tvé
+tvého
+tvém
+tvému
+tví
+tvoje
+tvoji
+tvojí
+tvou
+tvůj
+tvých
+tvým
+tvými
+ty
+tyhle
+týchž
+týká
+týmiž
+týmž
+tys
+tytéž
+tyto
+týž
+úderem
+uplná
+uplné
+úplně
+úplný
+uprostřed
+urÄitÄ›
+uvnitÅ™
+úvodem
+vám
+vámi
+vás
+váš
+vaše
+vaši
+vÄetnÄ›
+vedle
+velmi
+veprostřed
+versus
+vespod
+vespodu
+veškerý
+vevnitÅ™
+víc
+více
+vím
+vinou
+víš
+viz
+vlastnÄ›
+vlivem
+vnÄ›
+vnitřka
+vnitřkem
+vnitřku
+von
+vrchem
+však
+vše
+všecek
+všecka
+všecko
+všecky
+všeho
+všech
+všechen
+všechna
+všechno
+všechnu
+všechny
+všelico
+všelicos
+vÅ¡eliÄehos
+vÅ¡eliÄems
+vÅ¡eliÄemus
+vÅ¡eliÄí
+vÅ¡eliÄíms
+všelijaký
+všelikdo
+všeliký
+všeliskdo
+všem
+všemi
+všemu
+vši
+vší
+všicci
+všichni
+vším
+vůbec
+vůÄi
+vy
+vyjma
+vysoká
+výše
+vyšší
+vzdor
+vzhledem
+vždy
+za
+zaÄ
+zaÄátkem
+zaÄpak
+zaň
+zásluhou
+zatím
+závěrem
+zboku
+zcela
+zÄásti
+zda
+zdaleka
+zde
+zespoda
+zespodu
+zevnitÅ™
+zeza
+znovu
+zpět
+zpod
+zponad
+zpoza
+zprostřed
+zřídkaco
+zřídkakdo
+zvnitřka
+zvnitřku
+žádný
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/subscribermail.txt
new file mode 100644
index 000000000..6ef6411d0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/subscribermail.txt
@@ -0,0 +1,23 @@
+Dobrý den,
+
+Stránka @PAGE@ ve wiki @TITLE@ se změnila.
+Tady jsou detaily:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Datum: @DATE@
+Uživatel: @USER@
+Souhrn úpravy: @SUMMARY@
+Původní revize: @OLDPAGE@
+Nová revize: @NEWPAGE@
+
+
+Pro odhlášení z odběru změn pro tuto stránku se přihlašte do wiki
+@DOKUWIKIURL@ a vstupte na stránku
+@NEWPAGE@, kde stisknete tlaÄítko "Neodebírat zmÄ›ny mailem".
+
+--
+Tato zpráva byla vygenerována systémem DokuWiki
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/updateprofile.txt
new file mode 100644
index 000000000..d5eadc66c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/updateprofile.txt
@@ -0,0 +1,5 @@
+====== Upravit profil vaÅ¡eho uÄtu ======
+
+Vyplňte pouze pole, která chcete změnit. Nemůžete ale změnit své uživatelské jméno.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/uploadmail.txt
new file mode 100644
index 000000000..98f860138
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/uploadmail.txt
@@ -0,0 +1,14 @@
+Do vaší DokuWiki byl nahrán nový dokument. Tady jsou detaily:
+
+Soubor : @MEDIA@
+Datum : @DATE@
+ProhlážeÄ : @BROWSER@
+IP adresa : @IPADDRESS@
+Hostitel : @HOSTNAME@
+Velikost : @SIZE@
+MIME typ : @MIME@
+Uživatel : @USER@
+
+--
+Tato zpráva byla vygenerována systémem DokuWiki
+@DOKUWIKIUR \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/wordblock.txt
new file mode 100644
index 000000000..75fe58e0c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/wordblock.txt
@@ -0,0 +1,3 @@
+====== SPAM nebyl povolen ======
+
+Vaše změny **nebyly uloženy**, protože obsahují jedno nebo více nepovolených slov. Wiki si nepotrpí na spam! Pokud se domníváte, že jde o omyl, kontaktujte správce.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/admin.txt
new file mode 100644
index 000000000..3ac4a70df
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/admin.txt
@@ -0,0 +1,4 @@
+====== Administration ======
+
+Nedenfor kan du finde en række administrative værktøjer.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/adminplugins.txt
new file mode 100644
index 000000000..2a3d687f1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/adminplugins.txt
@@ -0,0 +1 @@
+===== Yderligere udvidelser ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/backlinks.txt
new file mode 100644
index 000000000..6dfa3cc43
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/backlinks.txt
@@ -0,0 +1,4 @@
+====== Henvisninger bagud ======
+
+Dette er en liste over alle de dokumenter der henviser tilbage til det nuværende dokument.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/conflict.txt
new file mode 100644
index 000000000..fc38cee63
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/conflict.txt
@@ -0,0 +1,5 @@
+====== Der eksisterer en nyere udgave af dokumentet ======
+
+Der eksisterer en nyere udgave af dette dokument. Det sker når flere brugere ændrer i dokumentet på samme tid.
+
+Gennemgå de viste forskelle grundigt, og beslut hvilken udgave der skal bevares. Hvis du vælger ''Gem'', bliver din udgave af dokumentet gemt. Vælger du ''Fortryd'' beholder du den nuværende udgave.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/denied.txt
new file mode 100644
index 000000000..a4fa8b88f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/denied.txt
@@ -0,0 +1,3 @@
+====== Adgang nægtet! ======
+
+Du har ikke rettigheder til at fortsætte. Måske er du ikke logget ind.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/diff.txt
new file mode 100644
index 000000000..f77224f2f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/diff.txt
@@ -0,0 +1,4 @@
+====== Forskelle ======
+
+Dette viser forskellene mellem den valgte og den nuværende udgave af dokumentet. Gul er linjer der findes i den gamle udgave, og grøn er linjer der findes i den nuværende.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/draft.txt
new file mode 100644
index 000000000..69c780140
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/draft.txt
@@ -0,0 +1,6 @@
+====== Kladdefil fundet ======
+
+Din sidste redigeringssession på denne side blev ikke afsluttet korrekt. DokuWiki har automatisk gemt en kladde mens du arbejdede, som du kan benytte til at fortsætte redigeringen. Forneden kan du se de data der blev gemt fra din sidste session.
+
+Vælg venligst, om du vil //gendanne// din tabte redigering, //slette// den gemte kladde eller //afbryde// redigeringen.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/edit.txt
new file mode 100644
index 000000000..0a9ea39dc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/edit.txt
@@ -0,0 +1,2 @@
+Rediger dette dokument og tryk på knappen **''[Gem]''**. Se [[wiki:syntax|Formaterings tips]] for Wiki syntaks. Ret venligst kun dette dokument hvis du kan **forbedre** det. Brug venligst [[playground:playground|sandkassen]] til at teste før du retter i et rigtigt dokument. Husk også at bruge **''[Forhåndsvisning]''** før du gemmer dokumentet.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/editrev.txt
new file mode 100644
index 000000000..438363e5d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/editrev.txt
@@ -0,0 +1,2 @@
+**Du har hentet en gammel udgave af dette dokument!** Hvis du gemmer dokumentet vil du overskrive den nuværende med den gamle udgave.
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/index.txt
new file mode 100644
index 000000000..74afb9831
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/index.txt
@@ -0,0 +1,3 @@
+====== Indeks ======
+
+Dette er en oversigt over alle tilgængelige dokumenter, sorteret efter [[doku>namespaces|navnerum]].
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/install.html
new file mode 100644
index 000000000..5c53c5546
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/install.html
@@ -0,0 +1,24 @@
+<p>Denne side hjælper til første-gangs installation og konfiguration af
+<a href="http://dokuwiki.org">Dokuwiki</a>. Mere information om denne
+installer er tilgængelig på dens egen
+<a href="http://dokuwiki.org/installer">dokumentations side</a>.</p>
+
+<p>DokuWiki bruger almindelige filer til at gemme wiki sider og anden
+information relaterende til disse sider (f.eks. billeder, søge indeks, gamle
+udgaver, osv). For at fungerer optimalt <strong>skal</strong> DokuWiki have
+skrive adgang til mapperne der holder disse filer. Denne installer er ikke
+istand til at opsætte mappe tilladelser. Det skal normalt udføres direkte i en
+kommando shell eller hvis du bruger hosting, gennem FTP eller dit hostings
+kontrol panel (f.eks. cPanel).</p>
+
+<p>Denne installer vil opsætte din DokuWiki konfiguration for
+<acronym title="access control list">ACL</acronym>, hvilket tillader
+administrator login og adgang til DokuWiki's adminstrative menu til
+installation af udvidelser, håndtering af brugere, håndtering af adgang til wiki
+sider og ændring af konfigurations indstillinger. Det er ikke et krav for at
+DokuWiki kan fungere, men det vil gøre DokuWiki lettere at administre.</p>
+
+<p>Erfarne brugere og brugere med specielle opsætningskrav burde bruge disse
+henvisninger for detaljer vedrørende
+<a href="http://dokuwiki.org/install">installations instruktioner</a>
+og <a href="http://dokuwiki.org/config">konfigurations indstillinger</a>.</p>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/lang.php
new file mode 100644
index 000000000..56239718b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/lang.php
@@ -0,0 +1,253 @@
+<?php
+/**
+ * danish language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author koeppe <koeppe@kazur.dk>
+ * @author Jon Bendtsen <bendtsen@diku.dk>
+ * @author Lars Næsbye Christensen <larsnaesbye@stud.ku.dk>
+ * @author Kalle Sommer Nielsen <kalle@php.net>
+ * @author Esben Laursen <hyber@hyber.dk>
+ * @author Harith <haj@berlingske.dk>
+ * @author Daniel Ejsing-Duun <dokuwiki@zilvador.dk>
+ * @author Erik Bjørn Pedersen <erik.pedersen@shaw.ca>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '„';
+$lang['doublequoteclosing'] = '“';
+$lang['singlequoteopening'] = '‚';
+$lang['singlequoteclosing'] = '‘';
+$lang['apostrophe'] = '’';
+$lang['btn_edit'] = 'Rediger dette dokument';
+$lang['btn_source'] = 'Vis kildekode';
+$lang['btn_show'] = 'Vis dokument';
+$lang['btn_create'] = 'Opret dette dokument';
+$lang['btn_search'] = 'Søg';
+$lang['btn_save'] = 'Gem';
+$lang['btn_preview'] = 'Forhåndsvisning';
+$lang['btn_top'] = 'Tilbage til toppen';
+$lang['btn_newer'] = '<< forrige side';
+$lang['btn_older'] = 'næste side >>';
+$lang['btn_revs'] = 'Gamle udgaver';
+$lang['btn_recent'] = 'Nye ændringer';
+$lang['btn_upload'] = 'Overføre';
+$lang['btn_cancel'] = 'Fortryd';
+$lang['btn_index'] = 'Indeks';
+$lang['btn_secedit'] = 'Rediger';
+$lang['btn_login'] = 'Log ind';
+$lang['btn_logout'] = 'Log ud';
+$lang['btn_admin'] = 'Admin';
+$lang['btn_update'] = 'Opdater';
+$lang['btn_delete'] = 'Slet';
+$lang['btn_back'] = 'Tilbage';
+$lang['btn_backlink'] = 'Henvisninger bagud';
+$lang['btn_backtomedia'] = 'Tilbage til valg af mediefil';
+$lang['btn_subscribe'] = 'Abonner på ændringer';
+$lang['btn_unsubscribe'] = 'Fjern abonnement på ændringer';
+$lang['btn_subscribens'] = 'Abonner på namespace ændringer';
+$lang['btn_unsubscribens'] = 'Fjern abonnement på namespace ændringer';
+$lang['btn_profile'] = 'Opdater profil';
+$lang['btn_reset'] = 'Nulstil';
+$lang['btn_resendpwd'] = 'Send nyt adgangskode';
+$lang['btn_draft'] = 'Rediger kladde';
+$lang['btn_recover'] = 'Gendan kladde';
+$lang['btn_draftdel'] = 'Slet kladde';
+$lang['btn_revert'] = 'Reetablere';
+$lang['loggedinas'] = 'Logget på som';
+$lang['user'] = 'Brugernavn';
+$lang['pass'] = 'Adgangskode';
+$lang['newpass'] = 'Nyt adgangskode';
+$lang['oldpass'] = 'Bekræft gammelt adgangskode';
+$lang['passchk'] = 'Gentag nyt adgangskode';
+$lang['remember'] = 'Log automatisk på';
+$lang['fullname'] = 'Navn';
+$lang['email'] = 'E-mail';
+$lang['register'] = 'Tilmeld';
+$lang['profile'] = 'Brugerprofil';
+$lang['badlogin'] = 'Brugernavn eller adgangskode var forkert.';
+$lang['minoredit'] = 'Mindre ændringer';
+$lang['draftdate'] = 'Kladde automatisk gemt d.';
+$lang['nosecedit'] = 'Siden blev ændret i mellemtiden, sektions information var for gammel, hentede hele siden i stedet.';
+$lang['regmissing'] = 'Du skal udfylde alle felter.';
+$lang['reguexists'] = 'Dette brugernavn er allerede i brug.';
+$lang['regsuccess'] = 'Du er nu oprettet som bruger. Dit adgangskode bliver sendt til dig i en e-mail.';
+$lang['regsuccess2'] = 'Du er nu oprettet som bruger.';
+$lang['regmailfail'] = 'Dit adgangskode blev ikke sendt. Kontakt venligst administratoren.';
+$lang['regbadmail'] = 'E-mail-adressen er ugyldig. Kontakt venligst administratoren, hvis du mener dette er en fejl.';
+$lang['regbadpass'] = 'De to adgangskoder er ikke ens, vær venlig at prøve igen.';
+$lang['regpwmail'] = 'Dit DokuWiki password';
+$lang['reghere'] = 'Opret en DokuWiki-konto her';
+$lang['profna'] = 'Denne wiki understøtter ikke ændring af profiler';
+$lang['profnochange'] = 'Ingen ændringer, intet modificeret.';
+$lang['profnoempty'] = 'Tomt navn eller e-mail adresse er ikke tilladt.';
+$lang['profchanged'] = 'Brugerprofil opdateret korrekt.';
+$lang['pwdforget'] = 'Har du glemt dit adgangskode? FÃ¥ et nyt';
+$lang['resendna'] = 'Denne wiki understøtter ikke udsendelse af nyt adgangskode.';
+$lang['resendpwd'] = 'Send nyt adgangskode for';
+$lang['resendpwdmissing'] = 'Du skal udfylde alle felter.';
+$lang['resendpwdnouser'] = 'Vi kan ikke finde denne bruger i vores database.';
+$lang['resendpwdbadauth'] = 'Beklager, denne autoriseringskode er ikke gyldig. Kontroller venligst at du benyttede det fulde link til bekræftelse.';
+$lang['resendpwdconfirm'] = 'Et henvisning med bekræftelse er blevet sendt med email.';
+$lang['resendpwdsuccess'] = 'Dit nye adgangskode er blevet sendt med e-mail.';
+$lang['license'] = 'Med mindre andet angivet, vil indhold på denne wiki blive frigjort under følgende licens:';
+$lang['licenseok'] = 'Note: ved at ændre denne side, acceptere du at dit indhold bliver frigivet under følgende licens:';
+$lang['searchmedia'] = 'Søg filnavn';
+$lang['searchmedia_in'] = 'Søg i %s';
+$lang['txt_upload'] = 'Vælg den fil der skal overføres';
+$lang['txt_filename'] = 'Indtast wikinavn (valgfrit)';
+$lang['txt_overwrt'] = 'Overskriv eksisterende fil';
+$lang['lockedby'] = 'Midlertidig låst af';
+$lang['lockexpire'] = 'Lås udløber kl.';
+$lang['willexpire'] = 'Din lås på dette dokument udløber om et minut.\nTryk på Forhåndsvisning-knappen for at undgå konflikter.';
+$lang['notsavedyet'] = 'Der er lavet ændringer i dokumentet. Hvis du fortsætter vil ændringerne gå tabt.\nØnsker du at fortsætte?';
+$lang['rssfailed'] = 'Der opstod en fejl ved indhentning af: ';
+$lang['nothingfound'] = 'Søgningen gav intet resultat.';
+$lang['mediaselect'] = 'Vælg mediefil';
+$lang['fileupload'] = 'Overføre mediefil';
+$lang['uploadsucc'] = 'Overførelse var en succes';
+$lang['uploadfail'] = 'Overførelse fejlede. Der er muligvis problemer med rettighederne.';
+$lang['uploadwrong'] = 'Overførelse afvist. Filtypen er ikke tilladt.';
+$lang['uploadexist'] = 'Filen eksisterer allerede.';
+$lang['uploadbadcontent'] = 'Overføret indhold tilsvaret ikke til %s fil-endelsen.';
+$lang['uploadspam'] = 'Overførelsen blev blokeret af spam sortlisten.';
+$lang['uploadxss'] = 'Overførelsen blev blokeret på grund af mulig skadeligt indhold.';
+$lang['uploadsize'] = 'Den overføret fil var for stor (max. %s)';
+$lang['deletesucc'] = 'Filen "%s" er blevet slettet.';
+$lang['deletefail'] = '"%s" kunne ikke slettes - check rettighederne.';
+$lang['mediainuse'] = 'Filen "%s" er ikke slettet - den er stadig i brug.';
+$lang['namespaces'] = 'Navnerum';
+$lang['mediafiles'] = 'Tilgængelige filer i';
+$lang['js']['searchmedia'] = 'Søg for filer';
+$lang['js']['keepopen'] = 'Hold vindue åbent ved valg';
+$lang['js']['hidedetails'] = 'Skjul detaljer';
+$lang['js']['nosmblinks'] = 'Henvisninger til Windows shares virker kun i Microsoft Internet Explorer.
+Du kan stadig kopiere og indsætte linket.';
+$lang['js']['linkwiz'] = 'guiden til henvisninger';
+$lang['js']['linkto'] = 'Henvise til:';
+$lang['js']['del_confirm'] = 'Slet valgte post(er)?';
+$lang['js']['mu_btn'] = 'Overføre flere filer på en gang';
+$lang['mediausage'] = 'Brug den følgende syntaks til at henvise til denne fil:';
+$lang['mediaview'] = 'Vis oprindelig fil';
+$lang['mediaroot'] = 'rod';
+$lang['mediaupload'] = 'Overføre en fil til det nuværende navnerum her. For at oprette under-navnerum, tilføj dem til "Overføre som" filnavnet, adskilt af kolontegn.';
+$lang['mediaextchange'] = 'Filudvidelse ændret fra .%s til .%s!';
+$lang['reference'] = 'Henvisning til';
+$lang['ref_inuse'] = 'Filen kan ikke slettes, da den stadig er i brug på følgende sider:';
+$lang['ref_hidden'] = 'Nogle henvisninger er i dokumenter du ikke har læserettigheder til';
+$lang['hits'] = 'Hits';
+$lang['quickhits'] = 'Tilsvarende dokumentnavne';
+$lang['toc'] = 'Indholdsfortegnelse';
+$lang['current'] = 'nuværende';
+$lang['yours'] = 'Din version';
+$lang['diff'] = 'Vis forskelle i forhold til den nuværende udgave';
+$lang['diff2'] = 'Vis forskelle i forhold til de valgte revisioner';
+$lang['line'] = 'Linje';
+$lang['breadcrumb'] = 'Sti';
+$lang['youarehere'] = 'Du er her';
+$lang['lastmod'] = 'Sidst ændret';
+$lang['by'] = 'af';
+$lang['deleted'] = 'slettet';
+$lang['created'] = 'oprettet';
+$lang['restored'] = 'gammel udgave reetableret';
+$lang['external_edit'] = 'ekstern redigering';
+$lang['summary'] = 'Redigerings resumé';
+$lang['noflash'] = 'Den <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> er nødvendig til at vise denne indehold.';
+$lang['download'] = 'Hente kodestykke';
+$lang['mail_newpage'] = 'dokument tilføjet:';
+$lang['mail_changed'] = 'dokument ændret:';
+$lang['mail_new_user'] = 'Ny bruger';
+$lang['mail_upload'] = 'fil overføret:';
+$lang['qb_bold'] = 'Fed';
+$lang['qb_italic'] = 'Kursiv';
+$lang['qb_underl'] = 'Understregning';
+$lang['qb_code'] = 'Skrivemaskine tekst';
+$lang['qb_strike'] = 'Gennemstregning';
+$lang['qb_h1'] = 'Niveau 1 overskrift';
+$lang['qb_h2'] = 'Niveau 2 overskrift';
+$lang['qb_h3'] = 'Niveau 3 overskrift';
+$lang['qb_h4'] = 'Niveau 4 overskrift';
+$lang['qb_h5'] = 'Niveau 5 overskrift';
+$lang['qb_h'] = 'Overskrift';
+$lang['qb_hs'] = 'Vælg overskriften';
+$lang['qb_hplus'] = 'Højere overskriftsniveau';
+$lang['qb_hminus'] = 'Lavere overskriftsniveau';
+$lang['qb_hequal'] = 'Samme overskriftsniveau';
+$lang['qb_link'] = 'Intern henvisning';
+$lang['qb_extlink'] = 'Ekstern henvisning';
+$lang['qb_hr'] = 'Vandret linje';
+$lang['qb_ol'] = 'Nummereret liste';
+$lang['qb_ul'] = 'Unummereret liste';
+$lang['qb_media'] = 'Tilføj billeder og andre filer';
+$lang['qb_sig'] = 'Indsæt signatur';
+$lang['qb_smileys'] = 'Smileys';
+$lang['qb_chars'] = 'Specialtegn';
+$lang['upperns'] = 'GÃ¥ til overordnet navnerum';
+$lang['admin_register'] = 'Tilføj ny bruger';
+$lang['metaedit'] = 'Rediger metadata';
+$lang['metasaveerr'] = 'Skrivning af metadata fejlede';
+$lang['metasaveok'] = 'Metadata gemt';
+$lang['img_backto'] = 'Tilbage til';
+$lang['img_title'] = 'Titel';
+$lang['img_caption'] = 'Billedtekst';
+$lang['img_date'] = 'Dato';
+$lang['img_fname'] = 'Filnavn';
+$lang['img_fsize'] = 'Størrelse';
+$lang['img_artist'] = 'Fotograf';
+$lang['img_copyr'] = 'Ophavsret';
+$lang['img_format'] = 'Format';
+$lang['img_camera'] = 'Kamera';
+$lang['img_keywords'] = 'Emneord';
+$lang['subscribe_success'] = 'Tilføjet %s til abonnentliste for %s';
+$lang['subscribe_error'] = 'Fejl ved tilføjelse af %s til abonnentliste for %s';
+$lang['subscribe_noaddress'] = 'Ingen adresse knyttet til dit login, du kan ikke tilføjes til abonnentlisten';
+$lang['unsubscribe_success'] = 'Fjernet %s fra abonnentliste for %s';
+$lang['unsubscribe_error'] = 'Fejl ved fjernelse af %s fra abonnentliste for %s';
+$lang['authmodfailed'] = 'Fejl i brugervalideringens konfiguration. Kontakt venligst wikiens administrator.';
+$lang['authtempfail'] = 'Brugervalidering er midlertidigt ude af drift. Hvis dette er vedvarende, kontakt venligst wikiens administrator.';
+$lang['i_chooselang'] = 'Vælg dit sprog';
+$lang['i_installer'] = 'DokuWiki Installer';
+$lang['i_wikiname'] = 'Wiki Navn';
+$lang['i_enableacl'] = 'Brug ACL (foreslået)';
+$lang['i_superuser'] = 'Superbruger';
+$lang['i_problems'] = 'Installeren fandt nogle problemer, vist nedenunder. Du kan ikke fortsætte før du har rettet dem.';
+$lang['i_modified'] = 'Af sikkerheds hensyn vil dette script kun virke på en ny og umodificeret Dokuwiki installation.
+Du burde enten gen-udpakke filerne fra den hentede pakke eller tjekke den fuldstændige
+<a href="http://dokuwiki.org/install">DokuWiki installations instruktioner</a>';
+$lang['i_funcna'] = 'PHP funtionen <code>%s</code> er ikke tilgængelig. Måske har din udbyder slået det fra af en eller anden grund?';
+$lang['i_phpver'] = 'Din PHP version <code>%s</code> er mindre en den nødvendige <code>%s</code>. Du er nød til at opgradere din PHP installation.';
+$lang['i_permfail'] = 'DokuWiki kan ikke skrive til <code>%s</code>. Du er nød til at rette tilladelses indstillingerne for denne mappe!';
+$lang['i_confexists'] = '<code>%s</code> eksisterer allerede';
+$lang['i_writeerr'] = 'Kunne ikke oprette <code>%s</code>. Du bliver nød til at tjekke mappe/fil- tilladelserne og oprette filen manuelt.';
+$lang['i_badhash'] = 'uigenkendelig eller modificeret dokuwiki.php (hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - ulovlig eller tom værdi';
+$lang['i_success'] = 'Konfigurationen fulførtedes med success. Du kan nu slette install.php filen. Fortsætte til <a href="doku.php">din nye DokuWiki</a>.';
+$lang['i_failure'] = 'Nogle fejl forekom mens konfigurations filerne skulle skrives. Du er mulighvis nød til at fixe dem manuelt før du kan bruge <a href="doku.php">din nye DokuWiki</a>.';
+$lang['i_policy'] = 'Begyndende ACL politik';
+$lang['i_pol0'] = 'Åben Wiki (alle kan læse, skrive og uploade)';
+$lang['i_pol1'] = 'Offentlig Wiki (alle kan læse, kun registrerede brugere kan skrive og overføre)';
+$lang['i_pol2'] = 'Lukket Wiki (kun for registerede brugere kan læse, skrive og overføre)';
+$lang['i_retry'] = 'Forsøg igen';
+$lang['mu_intro'] = 'Her kan du overføre flere filer af gangen. Klik på gennemse for at tilføje dem til køen. Tryk på overføre knappen når du er klar.';
+$lang['mu_gridname'] = 'Filnavn';
+$lang['mu_gridsize'] = 'Størrelse';
+$lang['mu_gridstat'] = 'Status';
+$lang['mu_namespace'] = 'Navnerum';
+$lang['mu_browse'] = 'gennemse';
+$lang['mu_toobig'] = 'for stor';
+$lang['mu_ready'] = 'klar til overføre';
+$lang['mu_done'] = 'færdig';
+$lang['mu_fail'] = 'fejlede';
+$lang['mu_authfail'] = 'session udløb';
+$lang['mu_progress'] = '@PCT@% upload';
+$lang['mu_filetypes'] = 'Tilladte filtyper';
+$lang['mu_info'] = 'filer var overføret.';
+$lang['mu_lasterr'] = 'Sidste fejl:';
+$lang['recent_global'] = 'Du ser lige nu ændringerne i <b>%s</b> navnerummet. Du kan også <a href="%s">se de sidste ændringer for hele wiki siden </a>';
+$lang['years'] = '%d år siden';
+$lang['months'] = '%d måned siden';
+$lang['weeks'] = '%d uge siden';
+$lang['days'] = '%d dage siden';
+$lang['hours'] = '%d timer siden';
+$lang['minutes'] = '%d minutter siden';
+$lang['seconds'] = '%d sekunder siden';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/locked.txt
new file mode 100644
index 000000000..74b677d51
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/locked.txt
@@ -0,0 +1,3 @@
+====== LÃ¥st Dokument ======
+
+Dette dokument er midlertidigt låst af en anden bruger. Vent venligst til brugeren er færdig med at redigere dokumentet, eller låsen udløber.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/login.txt
new file mode 100644
index 000000000..039bb0a7a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/login.txt
@@ -0,0 +1,3 @@
+====== Login ======
+
+Du er ikke logget ind! Indtast brugernavn og adgangskode. Din browser skal have tilladt cookies for at du kan logge ind.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/mailtext.txt
new file mode 100644
index 000000000..948a265fb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/mailtext.txt
@@ -0,0 +1,17 @@
+Et dokument i din DokuWiki blev ændret eller tilføjet. Her er detajlerne:
+
+Dato : @DATE@
+Browser : @BROWSER@
+IP-adresse : @IPADDRESS@
+Hostnavn : @HOSTNAME@
+Gammel udgave : @OLDPAGE@
+Ny udgave : @NEWPAGE@
+Redigerings resumé : @SUMMARY@
+Bruger : @USER@
+
+@DIFF@
+
+
+--
+Denne e-mail blev genereret af DokuWiki på:
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/newpage.txt
new file mode 100644
index 000000000..1d602c02c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/newpage.txt
@@ -0,0 +1,3 @@
+====== Dette dokument eksisterer ikke (endnu) ======
+
+Du har fulgt en henvisning til et dokument der ikke eksisterer (endnu). Du kan oprette dokumentet ved at trykke på knappen **''[Opret dette dokument]''**.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/norev.txt
new file mode 100644
index 000000000..aa6896237
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/norev.txt
@@ -0,0 +1,4 @@
+====== Den valgte udgave findes ikke ======
+
+Den valgte udgave af dokumentet findes ikke! Tryk på knappen **''[Gamle udgaver]''** for at se en liste af gamle udgaver af dette dokument.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/preview.txt
new file mode 100644
index 000000000..23e65e89d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/preview.txt
@@ -0,0 +1,4 @@
+====== Forhåndsvisning ======
+
+Dette er en forhåndsvisning af hvordan dokumentet vil se ud. Husk: Det er //**IKKE**// gemt endnu! Hvis det ser godt ud, så tryk på knappen **''[Gem]''**
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/pwconfirm.txt
new file mode 100644
index 000000000..3df556e68
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/pwconfirm.txt
@@ -0,0 +1,14 @@
+Hej @FULLNAME@!
+
+Nogen har bedt om et nyt password til dit @TITLE@
+login på @DOKUWIKIURL@
+
+Hvis du ikke bad om dette, så ignorer venligst denne email.
+
+For at bekræfte at det var dig der bad om dette, benyt venligst det følgende henvisning.
+
+@CONFIRM@
+
+--
+Denne e-mail blev genereret af DokuWiki på
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/read.txt
new file mode 100644
index 000000000..49f65831b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/read.txt
@@ -0,0 +1,2 @@
+Dette dokument kan kun læses. Du kan se kildekoden, men ikke gemme ændringer i det. Hvis du mener at dette er en fejl, så skriv det venligst på [[wiki:fejl-oversigt]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/recent.txt
new file mode 100644
index 000000000..c44fa368e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/recent.txt
@@ -0,0 +1,5 @@
+====== Nye ændringer ======
+
+Følgende dokumenter er blevet ændret for nylig.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/register.txt
new file mode 100644
index 000000000..4ff2ed1eb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/register.txt
@@ -0,0 +1,4 @@
+====== Opret en wiki-konto ======
+
+Udfyld nedenstånde skema for at oprette en konto i denne wiki. Sørg for at bruge en **gyldig e-mail-adresse** - dit adgangskode bliver sendt til dig. Dit brugernavn skal være et gyldigt [[doku>pagename|dokumentnavn]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/registermail.txt
new file mode 100644
index 000000000..d431f7591
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/registermail.txt
@@ -0,0 +1,14 @@
+En ny bruger har registreret. Her er detaljerne:
+
+Brugernavn : @NEWUSER@
+Navn : @NEWNAME@
+E-mail : @NEWEMAIL@
+
+Dato : @DATE@
+Browser : @BROWSER@
+IP-adresse : @IPADDRESS@
+Værtsnavn : @HOSTNAME@
+
+--
+Denne mail blev genereret af DokuWiki på
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/resendpwd.txt
new file mode 100644
index 000000000..e96861ed2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/resendpwd.txt
@@ -0,0 +1,3 @@
+====== Send nyt password ======
+
+Udfyld alle nedenstående felter for at få tilsendt et nyt password til denne wiki. Dit nye password vil blive sendt til den opgivne e-mail-adresse. Brugernavnet bør være dit wiki brugernavn.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/revisions.txt
new file mode 100644
index 000000000..08f6f2073
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/revisions.txt
@@ -0,0 +1,3 @@
+====== Gamle udgaver ======
+
+Her er de gamle udgaver af dette dokument. Du kan vende tilbage til en tidligere udgave af dokumentet ved at vælge det nedenfor, trykke på knappen **''[Rediger dette dokument]''**, og til sidst gemme dokumentet.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/searchpage.txt
new file mode 100644
index 000000000..eca1b589c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/searchpage.txt
@@ -0,0 +1,5 @@
+====== Søgning ======
+
+Du kan se resultaterne af din søgning nedenunder. Hvis resultaterne ikke indeholder det du søgte efter kan du oprette et nyt dokument med samme navn som søgningen ved at trykke på knappen **''[Opret dette dokument]''**.
+
+===== Søgeresultater =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/showrev.txt
new file mode 100644
index 000000000..3d4890397
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/showrev.txt
@@ -0,0 +1,2 @@
+**Dette er en gammel udgave af dokumentet!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/stopwords.txt
new file mode 100644
index 000000000..0fb926720
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/stopwords.txt
@@ -0,0 +1,87 @@
+# This is a list of words the indexer ignores, one word per line
+# When you edit this file be sure to use UNIX line endings (single newline)
+# No need to include words shorter than 3 chars - these are ignored anyway
+# This list is based upon the ones found at http://www.ranks.nl/stopwords/
+alle
+andet
+andre
+begge
+den
+denne
+der
+deres
+det
+dette
+dig
+din
+dog
+eller
+end
+ene
+eneste
+enhver
+fem
+fire
+flere
+fleste
+for
+fordi
+forrige
+fra
+før
+god
+han
+hans
+har
+hendes
+her
+hun
+hvad
+hvem
+hver
+hvilken
+hvis
+hvor
+hvordan
+hvorfor
+hvornår
+ikke
+ind
+ingen
+intet
+jeg
+jeres
+kan
+kom
+kommer
+lav
+lidt
+lille
+man
+mand
+mange
+med
+meget
+men
+mens
+mere
+mig
+ned
+nogen
+noget
+nyt
+nær
+næste
+næsten
+otte
+over
+seks
+ses
+som
+stor
+store
+syv
+til
+tre
+var
+www \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/subscribermail.txt
new file mode 100644
index 000000000..e89dd3c46
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/subscribermail.txt
@@ -0,0 +1,17 @@
+Hej!
+
+Siden @PAGE@ i @TITLE@ wikien er blevet ændret.
+Her er detaljerne:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+For at afmelde abonnement på denne side log ind på wikien på
+@DOKUWIKIURL@ , besøg
+@NEWPAGE@
+og vælg 'Fjern abonnement på ændringer'.
+
+--
+Denne e-mail blev genereret af DokuWiki på
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/updateprofile.txt
new file mode 100644
index 000000000..2c6ce3f16
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/updateprofile.txt
@@ -0,0 +1,3 @@
+====== Opdater din kontos profil ======
+
+Du behøver kun at udfylde de felter du ønsker at ændre. Du kan ikke ændre dit brugernavn.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/uploadmail.txt
new file mode 100644
index 000000000..316463fee
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/uploadmail.txt
@@ -0,0 +1,14 @@
+En fil blev overføret til din DokuWiki. Her er detaljerne:
+
+Fil : @MEDIA@
+Dato : @DATE@
+Browser : @BROWSER@
+IP-adresse : @IPADDRESS@
+Værtsnavn : @HOSTNAME@
+Størrelse : @SIZE@
+MIME Type : @MIME@
+Bruger : @USER@
+
+--
+Denne e-mail blev genereret af DokuWiki på
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/wordblock.txt
new file mode 100644
index 000000000..5a1c0d754
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/wordblock.txt
@@ -0,0 +1,3 @@
+====== SPAM blokeret ======
+
+Dine ændringer blev **ikke** gemt da de indeholder et eller flere uønskede ord. Kontakt venligst admin, hvis du mener dette er en fejl.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/admin.txt
new file mode 100644
index 000000000..c52f343ea
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/admin.txt
@@ -0,0 +1,4 @@
+====== Administration ======
+
+Folgende administrative Aufgaben stehen in DokuWiki zur Verfügung.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/adminplugins.txt
new file mode 100644
index 000000000..a0ae21faf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/adminplugins.txt
@@ -0,0 +1 @@
+===== Zusätzliche Plugins ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/backlinks.txt
new file mode 100644
index 000000000..aae4c5582
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/backlinks.txt
@@ -0,0 +1,5 @@
+====== Backlinks ======
+
+Dies ist eine Liste der Seiten, die zurück zur momentanen Seite linken.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/conflict.txt
new file mode 100644
index 000000000..a5ae425be
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/conflict.txt
@@ -0,0 +1,6 @@
+====== Eine neuere Version existiert ======
+
+Eine neuere Version des aktuell in Bearbeitung befindlichen Dokuments existiert. Das heißt, jemand hat parallel an der selben Seite gearbeitet und zuerst gespeichert.
+
+Die unten aufgeführten Unterschiede können bei der Entscheidung helfen, welchem Dokument Vorrang gewährt wird. Wähle **''[Speichern]''** zum Sichern deiner Version oder **''[Abbrechen]''**, um deine Version zu verwerfen und die zuerst gespeicherte Seite zu behalten.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/denied.txt
new file mode 100644
index 000000000..ff3bdf9a1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/denied.txt
@@ -0,0 +1,4 @@
+====== Zugang verweigert ======
+
+Du hast nicht die erforderlichen Rechte, um diese Aktion durchzuführen. Eventuell bist du nicht beim Wiki angemeldet?
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/diff.txt
new file mode 100644
index 000000000..82fbbc252
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/diff.txt
@@ -0,0 +1,5 @@
+====== Unterschiede ======
+
+Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/draft.txt
new file mode 100644
index 000000000..704c6d1da
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/draft.txt
@@ -0,0 +1,6 @@
+====== Entwurf gefunden ======
+
+Deine letzte Bearbeitungssitzung wurde nicht ordnungsgemäß abgeschlossen. DokuWiki hat während deiner Arbeit automatisch einen Zwischenentwurf gespeichert, den du jetzt nutzen kannst, um deine Arbeit fortzusetzen. Unten siehst du die Daten, die bei deiner letzten Sitzung gespeichert wurden.
+
+Bitte entscheide dich, ob du den Entwurf //wieder herstellen// oder //löschen// willst oder ob du die Bearbeitung abbrechen möchtest.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/edit.txt
new file mode 100644
index 000000000..15e02c61a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/edit.txt
@@ -0,0 +1,4 @@
+Bitte nur editieren, falls das Dokument **verbessert** werden kann.
+
+Nach dem Bearbeiten den **''[Speichern]''**-Knopf drücken. Siehe [[wiki:syntax]] zur Wiki-Syntax. Zum Testen bitte erst im [[playground:playground|Spielplatz]] üben.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/editrev.txt
new file mode 100644
index 000000000..6c1f642cc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/editrev.txt
@@ -0,0 +1,2 @@
+**Eine ältere Version des Dokuments wurde geladen!** Beim Speichern wird eine neue Version des Dokuments mit diesem Inhalt erstellt.
+---- \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/index.txt
new file mode 100644
index 000000000..fa8dc4663
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/index.txt
@@ -0,0 +1,4 @@
+====== Ãœbersicht ======
+
+Dies ist eine Übersicht über alle vorhandenen Seiten und [[doku>namespaces|Namensräume]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/install.html
new file mode 100644
index 000000000..b8baa5f97
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/install.html
@@ -0,0 +1,27 @@
+<p>Diese Seite hilft dir bei der Erst-Installation und Konfiguration von
+<a href="http://dokuwiki.org">Dokuwiki</a>. Zusätzliche Informationen zu
+diesem Installationsskript findest du auf der entsprechenden
+<a href="http://dokuwiki.org/installer">Hilfe-Seite</a> (en).</p>
+
+<p>DokuWiki verwendet normale Dateien für das Speichern von Wikiseiten und
+anderen Informationen (Bilder, Suchindizes, alte Versionen, usw.).
+Um DokuWiki betreiben zu können, <strong>muss</strong> Schreibzugriff auf die
+Verzeichnisse bestehen, in denen DokuWiki diese Dateien ablegt. Dieses
+Installationsprogramm kann diese Rechte nicht für dich setzen. Du musst dies
+manuell auf einer Kommando-Shell oder, falls du DokuWiki bei einem Fremdanbieter
+hostest, über FTP oder ein entsprechendes Werkzeug (z.B. cPanel) durchführen.</p>
+
+<p>Dieses Skript hilft dir beim ersten Einrichten des Zugangsschutzes
+(<acronym title="access control list">ACL</acronym>) von DokuWiki, welcher eine
+Administratoranmeldung und damit Zugang zum Administrationsmenu ermöglicht.
+Dort kannst du dann weitere Tätigkeiten wie das Installieren von Plugins, das
+Verwalten von Nutzern und das Ändern von Konfigurationseinstellungen durchführen.
+Das Nutzen der Zugangskontrolle ist nicht zwingend erforderlich, es erleichtert aber
+die Administration von DokuWiki.</p>
+
+<p>Erfahrene Anwender oder Nutzer mit speziellen Konfigurationsbedürfnissen sollten
+die folgenden Links nutzen, um sich über
+<a href="http://dokuwiki.org/install">Installation</a>
+und <a href="http://dokuwiki.org/config">Konfiguration</a> zu
+informieren.</p>
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/lang.php
new file mode 100644
index 000000000..1747e3288
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/lang.php
@@ -0,0 +1,249 @@
+<?php
+/**
+ * german language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Christof <gagi@fin.de>
+ * @author Anika Henke <anika@selfthinker.org>
+ * @author Esther Brunner <esther@kaffeehaus.ch>
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ * @author Michael Klier <chi@chimeric.de>
+ * @author Leo Moll <leo@yeasoft.com>
+ * @author Florian Anderiasch <fa@art-core.org>
+ * @author Robin Kluth <commi1993@gmail.com>
+ * @author Arne Pelka <mail@arnepelka.de>
+ * @author Alexander Fischer <tbanus@os-forge.net>
+ * @author Juergen Schwarzer <jschwarzer@freenet.de>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '„';
+$lang['doublequoteclosing'] = '“';
+$lang['singlequoteopening'] = '‚';
+$lang['singlequoteclosing'] = '‘';
+$lang['apostrophe'] = '’';
+$lang['btn_edit'] = 'Diese Seite bearbeiten';
+$lang['btn_source'] = 'Zeige Quelltext';
+$lang['btn_show'] = 'Seite anzeigen';
+$lang['btn_create'] = 'Seite anlegen';
+$lang['btn_search'] = 'Suche';
+$lang['btn_save'] = 'Speichern';
+$lang['btn_preview'] = 'Vorschau';
+$lang['btn_top'] = 'Nach oben';
+$lang['btn_newer'] = '<< jüngere Änderungen';
+$lang['btn_older'] = 'ältere Änderungen >>';
+$lang['btn_revs'] = 'Ältere Versionen';
+$lang['btn_recent'] = 'Letzte Änderungen';
+$lang['btn_upload'] = 'Hochladen';
+$lang['btn_cancel'] = 'Abbrechen';
+$lang['btn_index'] = 'Ãœbersicht';
+$lang['btn_secedit'] = 'Bearbeiten';
+$lang['btn_login'] = 'Anmelden';
+$lang['btn_logout'] = 'Abmelden';
+$lang['btn_admin'] = 'Admin';
+$lang['btn_update'] = 'Updaten';
+$lang['btn_delete'] = 'Löschen';
+$lang['btn_back'] = 'Zurück';
+$lang['btn_backlink'] = 'Links hierher';
+$lang['btn_backtomedia'] = 'Zurück zur Dateiauswahl';
+$lang['btn_subscribe'] = 'Änderungen abonnieren';
+$lang['btn_unsubscribe'] = 'Änderungen abbestellen';
+$lang['btn_subscribens'] = 'Namensraumänderungen abonnieren';
+$lang['btn_unsubscribens'] = 'Namensraumänderungen abbestellen';
+$lang['btn_profile'] = 'Benutzerprofil';
+$lang['btn_reset'] = 'Zurücksetzen';
+$lang['btn_resendpwd'] = 'Sende neues Passwort';
+$lang['btn_draft'] = 'Entwurf bearbeiten';
+$lang['btn_recover'] = 'Entwurf wieder herstellen';
+$lang['btn_draftdel'] = 'Entwurf löschen';
+$lang['btn_revert'] = 'Wiederherstellen';
+$lang['loggedinas'] = 'Angemeldet als';
+$lang['user'] = 'Benutzername';
+$lang['pass'] = 'Passwort';
+$lang['newpass'] = 'Neues Passwort';
+$lang['oldpass'] = 'Bestätigen (Altes Passwort)';
+$lang['passchk'] = 'und nochmal';
+$lang['remember'] = 'Angemeldet bleiben';
+$lang['fullname'] = 'Voller Name';
+$lang['email'] = 'E-Mail';
+$lang['register'] = 'Registrieren';
+$lang['profile'] = 'Benutzerprofil';
+$lang['badlogin'] = 'Nutzername oder Passwort sind falsch.';
+$lang['minoredit'] = 'kleine Änderung';
+$lang['draftdate'] = 'Entwurf gespeichert am';
+$lang['nosecedit'] = 'Diese Seite wurde in der Zwischenzeit geändert, Sektionsinfo ist veraltet, lade stattdessen volle Seite.';
+$lang['regmissing'] = 'Alle Felder müssen ausgefüllt werden';
+$lang['reguexists'] = 'Der Nutzername existiert leider schon.';
+$lang['regsuccess'] = 'Der neue Nutzer wurde angelegt und das Passwort per Email versandt.';
+$lang['regsuccess2'] = 'Der neue Nutzer wurde angelegt.';
+$lang['regmailfail'] = 'Offenbar ist ein Fehler beim Versenden der Passwortmail aufgetreten. Bitte wende dich an den Wiki-Admin.';
+$lang['regbadmail'] = 'Die angegebene Mail-Adresse scheint ungültig zu sein. Falls dies ein Fehler ist, wende dich bitte an den Wiki-Admin.';
+$lang['regbadpass'] = 'Die beiden eingegeben Passwörter stimmen nicht überein. Bitte versuche es noch einmal.';
+$lang['regpwmail'] = 'Ihr DokuWiki Passwort';
+$lang['reghere'] = 'Du hast noch keinen Zugang? Hier anmelden';
+$lang['profna'] = 'Änderung des Benutzerprofils in diesem Wiki nicht möglich.';
+$lang['profnochange'] = 'Keine Änderungen, nichts zu tun.';
+$lang['profnoempty'] = 'Es muss ein Name oder eine E-Mail Adresse angegeben werden.';
+$lang['profchanged'] = 'Benuzerprofil erfolgreich geändert.';
+$lang['pwdforget'] = 'Passwort vergessen? Fordere ein neues an';
+$lang['resendna'] = 'Passwörter versenden ist in diesem Wiki nicht möglich.';
+$lang['resendpwd'] = 'Neues Passwort schicken für';
+$lang['resendpwdmissing'] = 'Es tut mir Leid, aber du musst alle Felder ausfüllen.';
+$lang['resendpwdnouser'] = 'Es tut mir Leid, aber der Benutzer existiert nicht in unserer Datenbank.';
+$lang['resendpwdbadauth'] = 'Es tut mir Leid, aber dieser Authentifizierungscode ist ungültig. Stelle sicher, dass du den kompletten Bestätigungslink verwendet haben.';
+$lang['resendpwdconfirm'] = 'Ein Bestätigungslink wurde per E-Mail versandt.';
+$lang['resendpwdsuccess'] = 'Dein neues Passwort wurde per E-Mail versandt.';
+$lang['license'] = 'Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht:';
+$lang['licenseok'] = 'Hinweis: Durch das Bearbeiten dieser Seite gibst du dein Einverständnis, dass dein Inhalt unter der folgenden Lizenz veröffentlicht wird:';
+$lang['searchmedia'] = 'Suche Dateiname:';
+$lang['searchmedia_in'] = 'Suche in %s';
+$lang['txt_upload'] = 'Datei zum Hochladen auswählen';
+$lang['txt_filename'] = 'Hochladen als (optional)';
+$lang['txt_overwrt'] = 'Bestehende Datei überschreiben';
+$lang['lockedby'] = 'Momentan gesperrt von';
+$lang['lockexpire'] = 'Sperre läuft ab am';
+$lang['willexpire'] = 'Die Sperre zur Bearbeitung dieser Seite läuft in einer Minute ab.\nUm Bearbeitungskonflikte zu vermeiden, solltest du sie durch einen Klick auf den Vorschau-Knopf verlängern.';
+$lang['notsavedyet'] = 'Nicht gespeicherte Änderungen gehen verloren!\nWeitermachen?';
+$lang['rssfailed'] = 'Es ist ein Fehler beim Laden des Feeds aufgetreten: ';
+$lang['nothingfound'] = 'Nichts gefunden.';
+$lang['mediaselect'] = 'Dateiauswahl';
+$lang['fileupload'] = 'Datei hochladen';
+$lang['uploadsucc'] = 'Datei wurde erfolgreich hochgeladen';
+$lang['uploadfail'] = 'Hochladen fehlgeschlagen. Keine Berechtigung?';
+$lang['uploadwrong'] = 'Hochladen verweigert. Diese Dateiendung ist nicht erlaubt.';
+$lang['uploadexist'] = 'Datei existiert bereits. Keine Änderungen vorgenommen.';
+$lang['uploadbadcontent'] = 'Die hochgeladenen Daten stimmen nicht mit der Dateiendung % überein.';
+$lang['uploadspam'] = 'Hochladen verweigert: Treffer auf der Spamliste.';
+$lang['uploadxss'] = 'Hochladen verweigert: Daten scheinen Schadcode zu enthalten.';
+$lang['uploadsize'] = 'Die hochgeladene Datei war zu groß. (max. %s)';
+$lang['deletesucc'] = 'Die Datei "%s" wurde gelöscht.';
+$lang['deletefail'] = '"%s" konnte nicht gelöscht werden - prüfe die Berechtigungen.';
+$lang['mediainuse'] = 'Die Datei "%s" wurde nicht gelöscht - sie wird noch verwendet.';
+$lang['namespaces'] = 'Namensräume';
+$lang['mediafiles'] = 'Vorhandene Dateien in';
+$lang['js']['searchmedia'] = 'Suche nach Dateien';
+$lang['js']['keepopen'] = 'Fenster nach Auswahl nicht schließen';
+$lang['js']['hidedetails'] = 'Details ausblenden';
+$lang['js']['nosmblinks'] = 'Das Verlinken von Windows Freigaben funktioniert nur im Microsoft Internet Explorer.
+Der Link kann jedoch durch Kopieren und Einfügen verwendet werden.';
+$lang['js']['linkwiz'] = 'Link-Assistent';
+$lang['js']['linkto'] = 'Link zu:';
+$lang['js']['del_confirm'] = 'Die ausgewählten Dateien wirklich löschen?';
+$lang['js']['mu_btn'] = 'Mehrere Dateien gleichzeitig hochladen';
+$lang['mediausage'] = 'Syntax zum Verwenden dieser Datei:';
+$lang['mediaview'] = 'Originaldatei öffnen';
+$lang['mediaroot'] = 'Wurzel';
+$lang['mediaupload'] = 'Lade hier eine Datei in den momentanen Namensraum hoch. Um Unterordner zu erstellen, stelle diese dem Dateinamen im Feld "Hochladen als" durch Doppelpunkt getrennt voran.';
+$lang['mediaextchange'] = 'Dateiendung vom .%s nach .%s geändert!';
+$lang['reference'] = 'Verwendung von';
+$lang['ref_inuse'] = 'Diese Datei kann nicht gelöscht werden, da sie noch von folgenden Seiten benutzt wird:';
+$lang['ref_hidden'] = 'Einige Verweise sind auf Seiten, für die du keine Leseberechtigung hast.';
+$lang['hits'] = 'Treffer';
+$lang['quickhits'] = 'Passende Seitennamen';
+$lang['toc'] = 'Inhaltsverzeichnis';
+$lang['current'] = 'aktuell';
+$lang['yours'] = 'Deine Version';
+$lang['diff'] = 'Zeige Unterschiede zu aktueller Version';
+$lang['diff2'] = 'Zeige Unterschiede der ausgewählten Versionen';
+$lang['line'] = 'Zeile';
+$lang['breadcrumb'] = 'Zuletzt angesehen';
+$lang['youarehere'] = 'Du befindest dich hier';
+$lang['lastmod'] = 'Zuletzt geändert';
+$lang['by'] = 'von';
+$lang['deleted'] = 'gelöscht';
+$lang['created'] = 'angelegt';
+$lang['restored'] = 'alte Version wieder hergestellt';
+$lang['external_edit'] = 'Externe Bearbeitung';
+$lang['summary'] = 'Zusammenfassung';
+$lang['noflash'] = 'Das <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> wird benötigt, um diesen Ihnalt anzuzeigen.';
+$lang['download'] = 'Download-Teil';
+$lang['mail_newpage'] = 'Neue Seite:';
+$lang['mail_changed'] = 'Seite geaendert:';
+$lang['mail_new_user'] = 'Neuer Benutzer:';
+$lang['mail_upload'] = 'Datei hochgeladen:';
+$lang['qb_bold'] = 'Fetter Text';
+$lang['qb_italic'] = 'Kursiver Text';
+$lang['qb_underl'] = 'Unterstrichener Text';
+$lang['qb_code'] = 'Code Text';
+$lang['qb_strike'] = 'Durchgestrichener Text';
+$lang['qb_h1'] = 'Level 1 Ãœberschrift';
+$lang['qb_h2'] = 'Level 2 Ãœberschrift';
+$lang['qb_h3'] = 'Level 3 Ãœberschrift';
+$lang['qb_h4'] = 'Level 4 Ãœberschrift';
+$lang['qb_h5'] = 'Level 5 Ãœberschrift';
+$lang['qb_h'] = 'Ãœberschrift';
+$lang['qb_hs'] = 'Wähle eine Überschrift';
+$lang['qb_hplus'] = 'Überschrift eine Ebene höher';
+$lang['qb_hminus'] = 'Ãœberschrift eine Ebene runter';
+$lang['qb_hequal'] = 'Ãœberschrift auf selber Ebene';
+$lang['qb_link'] = 'Interner Link';
+$lang['qb_extlink'] = 'Externer Link';
+$lang['qb_hr'] = 'Horizontale Linie';
+$lang['qb_ol'] = 'Nummerierter Listenpunkt';
+$lang['qb_ul'] = 'Listenpunkt';
+$lang['qb_media'] = 'Bilder und andere Dateien hinzufügen';
+$lang['qb_sig'] = 'Unterschrift einfügen';
+$lang['qb_smileys'] = 'Smileys';
+$lang['qb_chars'] = 'Sonderzeichen';
+$lang['upperns'] = 'Gehe zum Ausgangsfeld';
+$lang['admin_register'] = 'Neuen Benutzer anmelden';
+$lang['metaedit'] = 'Metadaten bearbeiten';
+$lang['metasaveerr'] = 'Die Metadaten konnten nicht gesichert werden';
+$lang['metasaveok'] = 'Metadaten gesichert';
+$lang['img_backto'] = 'Zurück zu';
+$lang['img_title'] = 'Titel';
+$lang['img_caption'] = 'Bildunterschrift';
+$lang['img_date'] = 'Datum';
+$lang['img_fname'] = 'Dateiname';
+$lang['img_fsize'] = 'Grösse';
+$lang['img_artist'] = 'FotografIn';
+$lang['img_copyr'] = 'Copyright';
+$lang['img_format'] = 'Format';
+$lang['img_camera'] = 'Kamera';
+$lang['img_keywords'] = 'Schlagwörter';
+$lang['subscribe_success'] = '%s hat nun Änderungen der Seite %s abonniert';
+$lang['subscribe_error'] = '%s kann die Änderungen der Seite %s nicht abonnieren';
+$lang['subscribe_noaddress'] = 'Weil deine E-Mail-Adresse fehlt, kannst du das Thema nicht abonnieren';
+$lang['unsubscribe_success'] = 'Das Abonnement von %s für die Seite %s wurde aufgelöst';
+$lang['unsubscribe_error'] = 'Das Abonnement von %s für die Seite %s konnte nicht aufgelöst werden';
+$lang['authmodfailed'] = 'Benutzerüberprüfung nicht möglich. Bitte wende dich an den Systembetreuer.';
+$lang['authtempfail'] = 'Benutzerüberprüfung momentan nicht möglich. Falls das Problem andauert, wende dich an den Systembetreuer.';
+$lang['i_chooselang'] = 'Wähle deine Sprache';
+$lang['i_installer'] = 'DokuWiki Installation';
+$lang['i_wikiname'] = 'Wiki-Name';
+$lang['i_enableacl'] = 'Zugangskontrolle (ACL) aktivieren (empfohlen)';
+$lang['i_superuser'] = 'Administrator Benutzername';
+$lang['i_problems'] = 'Das Installationsprogramm hat unten aufgeführte Probleme festgestellt, die zunächst behoben werden müssen, bevor du mit der Installation fortfahren kannst.';
+$lang['i_modified'] = 'Aus Sicherheitsgründen arbeitet dieses Script nur mit einer neuen, unmodifizierten DokuWiki-Installation. Du solltest entweder alle Dateien noch einmal frisch installieren oder die <a href="http://dokuwiki.org/install">Dokuwiki-Installationsanleitung</a> konsultieren.';
+$lang['i_funcna'] = 'Die PHP Funktion <code>%s</code> ist nicht verfügbar. Unter Umständen wurde sie von deinem Hoster deaktiviert?';
+$lang['i_phpver'] = 'Deine PHP-Version <code>%s</code> ist niedriger als die benötigte Version <code>%s</code>. Bitte aktualisiere deine PHP-Installation.';
+$lang['i_permfail'] = '<code>%s</code> ist nicht durch DokuWiki beschreibbar. Du musst die Berechtigungen dieses Ordners ändern!';
+$lang['i_confexists'] = '<code>%s</code> existiert bereits';
+$lang['i_writeerr'] = '<code>%s</code> konnte nicht erzeugt werden. Du solltest die Verzeichnis-/Datei-Rechte überprüfen und die Datei manuell anlegen.';
+$lang['i_badhash'] = 'Unbekannte oder modifizierte dokuwiki.php (Hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - unerlaubter oder leerer Wert';
+$lang['i_success'] = 'Die Konfiguration wurde erfolgreich abgeschlossen. Du kannst jetzt die install.php löschen. Dein
+ <a href="doku.php">neues DokuWiki</a> ist jetzt für dich bereit.';
+$lang['i_failure'] = 'Es sind Fehler beim Schreiben der Konfigurationsdateien aufgetreten. Du musst diese vermutlich von Hand beheben, bevor du dein <a href="doku.php">neues DokuWiki</a> nutzen kannst.';
+$lang['i_policy'] = 'Anfangseinstellung für Zugangskontrolle (ACL)';
+$lang['i_pol0'] = 'Offenes Wiki (lesen, schreiben, hochladen für alle)';
+$lang['i_pol1'] = 'Öffentliches Wiki (lesen für alle, schreiben und hochladen für registrierte Nutzer)';
+$lang['i_pol2'] = 'Geschlossenes Wiki (lesen, schreiben, hochladen nur für registrierte Nutzer)';
+$lang['i_retry'] = 'Wiederholen';
+$lang['mu_intro'] = 'In diesem Bereich kannst du mehrere Dateien gleichzeitig hochladen. Benutze die Schaltfläche "Durchsuchen", um sie der Warteschlange zuzufügen. Betätige die Schaltfläche "Hochladen", um die Übertragung zu starten.';
+$lang['mu_gridname'] = 'Dateiname';
+$lang['mu_gridsize'] = 'Größe';
+$lang['mu_gridstat'] = 'Status';
+$lang['mu_namespace'] = 'Namensraum';
+$lang['mu_browse'] = 'Durchsuchen';
+$lang['mu_toobig'] = 'zu groß';
+$lang['mu_ready'] = 'bereit zum hochladen';
+$lang['mu_done'] = 'fertig';
+$lang['mu_fail'] = 'gescheitert';
+$lang['mu_authfail'] = 'Sitzung abgelaufen';
+$lang['mu_progress'] = '@PCT@% hochgeladen';
+$lang['mu_filetypes'] = 'Erlaubte Dateitypen';
+$lang['mu_info'] = 'Dateien hochgeladen.';
+$lang['mu_lasterr'] = 'Letzter Fehler:';
+$lang['recent_global'] = 'Im Moment siehst du die Änderungen im Namensraum <b>%s</b>. Du kannst auch <a href="%s">die Änderungen im gesamten Wiki sehen</a>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/locked.txt
new file mode 100644
index 000000000..4430fc6dd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/locked.txt
@@ -0,0 +1,4 @@
+====== Seite gesperrt ======
+
+Diese Seite ist momentan von einem anderen Nutzer gesperrt. Warte, bis dieser mit dem Bearbeiten fertig ist oder die Sperre abläuft.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/login.txt
new file mode 100644
index 000000000..5c99c48f1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/login.txt
@@ -0,0 +1,4 @@
+====== Anmelden ======
+
+Gib deinen Benutzernamen und dein Passwort in das Formular unten ein, um dich anzumelden. Bitte beachte, dass dafür "Cookies" in den Sicherheitseinstellungen deines Browsers erlaubt sein müssen.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/mailtext.txt
new file mode 100644
index 000000000..4fd41ad19
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/mailtext.txt
@@ -0,0 +1,17 @@
+Eine Seite in deinem Wiki wurde geändert oder neu angelegt. Hier sind die Details:
+
+Datum : @DATE@
+Browser : @BROWSER@
+IP-Adresse : @IPADDRESS@
+Hostname : @HOSTNAME@
+Alte Version : @OLDPAGE@
+Neue Version : @NEWPAGE@
+Zusammenfassung: @SUMMARY@
+Benutzer : @USER@
+
+@DIFF@
+
+
+--
+Diese Mail kommt vom DokuWiki auf
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/newpage.txt
new file mode 100644
index 000000000..5e261cc89
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/newpage.txt
@@ -0,0 +1,5 @@
+====== Dieses Thema existiert noch nicht ======
+
+Du bist einem Link zu einer Seite gefolgt, die noch nicht existiert. Du kannst die Seite mit dem Knopf **''[Seite anlegen]''** selbst anlegen und mit Inhalt füllen.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/norev.txt
new file mode 100644
index 000000000..c6243313d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/norev.txt
@@ -0,0 +1,4 @@
+====== Version existiert nicht ======
+
+Die angegebene Version des Dokuments wurde nicht gefunden. Benutze den **''[Ältere Versionen]''** Knopf, um eine Liste aller verfügbaren Versionen dieses Dokuments zu erhalten.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/preview.txt
new file mode 100644
index 000000000..d3a578f69
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/preview.txt
@@ -0,0 +1,5 @@
+====== Vorschau ======
+
+So wird dein Text später aussehen. Achtung: Der Text wurde noch **nicht gespeichert**!
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/pwconfirm.txt
new file mode 100644
index 000000000..538597cfa
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/pwconfirm.txt
@@ -0,0 +1,16 @@
+Hallo @FULLNAME@!
+
+Jemand hat ein neues Passwort für deinen @TITLE@
+login auf @DOKUWIKIURL@ angefordert.
+
+Wenn du diese Änderung nicht angefordert hast, ignoriere diese
+E-Mail einfach.
+
+Um die Anforderung zu bestätigen, folge bitte dem unten angegebenen
+Bestätigungslink.
+
+@CONFIRM@
+
+--
+Diese Mail kommt vom DokuWiki auf
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/read.txt
new file mode 100644
index 000000000..1c5422a29
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/read.txt
@@ -0,0 +1,2 @@
+Diese Seite ist nicht editierbar. Du kannst den Quelltext sehen, jedoch nicht verändern. Kontaktiere den Administrator, wenn du glaubst, dass hier ein Fehler vorliegt.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/recent.txt
new file mode 100644
index 000000000..c05bbae12
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/recent.txt
@@ -0,0 +1,5 @@
+====== Letzte Änderungen ======
+
+Die folgenden Seiten wurden zuletzt geändert.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/register.txt
new file mode 100644
index 000000000..8fe4718dc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/register.txt
@@ -0,0 +1,4 @@
+====== Als neuer Nutzer registrieren ======
+
+Bitte fülle alle Felder aus, um einen neuen Nutzer-Account in diesem Wiki anzulegen. Stelle sicher, dass eine **gültige E-Mail-Adresse** angegeben wird - das Passwort wird an diese Adresse gesendet. Der Nutzername sollte aus einem Wort ohne Umlaute, Leer- oder Sonderzeichen bestehen.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/registermail.txt
new file mode 100644
index 000000000..ed37a9505
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/registermail.txt
@@ -0,0 +1,14 @@
+Ein neuer Benutzer hat sich registriert. Hier sind die Details:
+
+Benutzername : @NEWUSER@
+Voller Name : @NEWNAME@
+E-Mail : @NEWEMAIL@
+
+Date : @DATE@
+Browser : @BROWSER@
+IP-Address : @IPADDRESS@
+Hostname : @HOSTNAME@
+
+--
+Diese Mail kommt vom DokuWiki auf
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/resendpwd.txt
new file mode 100644
index 000000000..4dcd4bb4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/resendpwd.txt
@@ -0,0 +1,3 @@
+====== Neues Passwort anfordern ======
+
+Fülle alle Felder unten aus, um ein neues Passwort für deinen Zugang zu erhalten. Das neue Passwort wird an deine gespeicherte E-Mail-Adresse geschickt. Der Benutzername sollte dein Wiki-Benutzername sein.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/revisions.txt
new file mode 100644
index 000000000..e4a7be8f1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/revisions.txt
@@ -0,0 +1,4 @@
+====== Ältere Versionen ======
+
+Dies sind ältere Versionen des gewählten Dokuments. Um zu einer älteren Version zurückzukehren, wähle die entsprechende Version aus, klicke auf **''[Diese Seite bearbeiten]''** und speichere sie erneut ab.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/searchpage.txt
new file mode 100644
index 000000000..72c57b765
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/searchpage.txt
@@ -0,0 +1,7 @@
+====== Suche ======
+
+Unten sind die Ergebnisse deiner Suche gelistet. Falls der gesuchte Begriff nicht gefunden wurde, kannst du direkt eine neue Seite für den Suchbegriff anlegen, indem du auf den Knopf **''[Seite anlegen]''** drückst.
+
+===== Ergebnisse =====
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/showrev.txt
new file mode 100644
index 000000000..65f53c9c1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/showrev.txt
@@ -0,0 +1,2 @@
+**Dies ist eine alte Version des Dokuments!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/stopwords.txt
new file mode 100644
index 000000000..443b17723
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/stopwords.txt
@@ -0,0 +1,125 @@
+# This is a list of words the indexer ignores, one word per line
+# When you edit this file be sure to use UNIX line endings (single newline)
+# No need to include words shorter than 3 chars - these are ignored anyway
+# This list is based upon the ones found at http://www.ranks.nl/stopwords/
+aber
+als
+auch
+auf
+aus
+bei
+bin
+bis
+bist
+dadurch
+daher
+darum
+das
+daß
+dass
+dein
+deine
+dem
+den
+der
+des
+dessen
+deshalb
+die
+dies
+dieser
+dieses
+doch
+dort
+durch
+ein
+eine
+einem
+einen
+einer
+eines
+euer
+eure
+für
+hatte
+hatten
+hattest
+hattet
+hier
+hinter
+ich
+ihr
+ihre
+in
+im
+ist
+jede
+jedem
+jeden
+jeder
+jedes
+jener
+jenes
+jetzt
+kann
+kannst
+können
+könnt
+machen
+mein
+meine
+mit
+muß
+mußt
+musst
+müssen
+müßt
+nach
+nachdem
+nein
+nicht
+nun
+oder
+seid
+sein
+seine
+sich
+sie
+sind
+soll
+sollen
+sollst
+sollt
+sonst
+soweit
+sowie
+und
+unser
+unsere
+unter
+vom
+von
+vor
+um
+wann
+warum
+was
+weiter
+weitere
+wenn
+wer
+werde
+werden
+werdet
+weshalb
+wie
+wieder
+wieso
+wir
+wird
+wirst
+woher
+wohin
+zum
+zur
+über
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/subscribermail.txt
new file mode 100644
index 000000000..952ac911e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/subscribermail.txt
@@ -0,0 +1,23 @@
+Hallo!
+
+Die Seite @PAGE@ im @TITLE@ Wiki wurde bearbeitet.
+Das sind die Änderungen:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Datum : @DATE@
+Benutzer : @USER@
+Ãœbersicht: @SUMMARY@
+Alte Revision: @OLDPAGE@
+Neue Revision: @NEWPAGE@
+
+Um das Abonnement für diese Seite aufzulösen, melde dich im Wiki an
+@DOKUWIKIURL@, besuche dann
+@NEWPAGE@
+und klicke auf die Taste 'Änderungen abbestellen'.
+
+--
+Diese Mail kommt vom DokuWiki auf
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/updateprofile.txt
new file mode 100644
index 000000000..66c2e8293
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/updateprofile.txt
@@ -0,0 +1,5 @@
+====== Benutzerprofil ändern ======
+
+Nur die Felder, die du änderst, werden aktualisiert. Alle anderen bleiben, wie sie sind. Deinen Benutzernamen kannst du jedoch nicht ändern.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/uploadmail.txt
new file mode 100644
index 000000000..72e4a2a6e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/uploadmail.txt
@@ -0,0 +1,14 @@
+Eine Datei wurde in deinem Wiki hochgeladen. Hier sind die Details:
+
+Datei : @MEDIA@
+Datum : @DATE@
+Browser : @BROWSER@
+IP-Adresse : @IPADDRESS@
+Hostname : @HOSTNAME@
+Größe : @SIZE@
+MIME-Typ : @MIME@
+Benutzer : @USER@
+
+--
+Diese Mail kommt vom DokuWiki auf
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/wordblock.txt
new file mode 100644
index 000000000..cb3e4c06a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/wordblock.txt
@@ -0,0 +1,4 @@
+====== SPAM blockiert ======
+
+Deine Änderungen wurden nicht gespeichert, da sie ein oder mehrere nicht erlaubte Wörter enthielten. Falls du versucht haben solltest, das Wiki zu Spammen -- Schande über ich! Wenn du glaubst, dass der Eintrag zu Unrecht blockiert wurde, kontaktiere bitte den Administrator des Wikis.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/admin.txt
new file mode 100644
index 000000000..c52f343ea
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/admin.txt
@@ -0,0 +1,4 @@
+====== Administration ======
+
+Folgende administrative Aufgaben stehen in DokuWiki zur Verfügung.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/adminplugins.txt
new file mode 100644
index 000000000..d3bfd0910
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/adminplugins.txt
@@ -0,0 +1 @@
+===== Weitere Plugins ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/backlinks.txt
new file mode 100644
index 000000000..aae4c5582
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/backlinks.txt
@@ -0,0 +1,5 @@
+====== Backlinks ======
+
+Dies ist eine Liste der Seiten, die zurück zur momentanen Seite linken.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/conflict.txt
new file mode 100644
index 000000000..d24e5b198
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/conflict.txt
@@ -0,0 +1,6 @@
+====== Eine neuere Version existiert ======
+
+Eine neuere Version des aktuell in Bearbeitung befindlichen Dokuments existiert. Das heißt, jemand hat parallel an der selben Seite gearbeitet und zuerst gespeichert.
+
+Die unten aufgeführten Unterschiede können bei der Entscheidung helfen, welchem Dokument Vorrang gewährt wird. Wählen Sie **''[Speichern]''** zum Sichern Ihrer Version oder **''[Abbrechen]''**, um Ihre Version zu verwerfen und die zuerst gespeicherte Seite zu behalten.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/denied.txt
new file mode 100644
index 000000000..b87965067
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/denied.txt
@@ -0,0 +1,4 @@
+====== Zugang verweigert ======
+
+Sie haben nicht die erforderlichen Rechte, um diese Aktion durchzuführen. Eventuell sind Sie nicht beim Wiki angemeldet?
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/diff.txt
new file mode 100644
index 000000000..82fbbc252
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/diff.txt
@@ -0,0 +1,5 @@
+====== Unterschiede ======
+
+Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/draft.txt
new file mode 100644
index 000000000..14a5e8495
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/draft.txt
@@ -0,0 +1,6 @@
+====== Entwurf gefunden ======
+
+Ihre letzte Bearbeitungssitzung wurde nicht ordnungsgemäß abgeschlossen. DokuWiki hat während Ihrer Arbeit automatisch einen Zwischenentwurf gespeichert, den Sie jetzt nutzen können, um Ihre Arbeit fortzusetzen. Unten sehen Sie die Daten, die bei Ihrer letzten Sitzung gespeichert wurden.
+
+Bitte entscheiden Sie, ob Sie den Entwurf //wieder herstellen// oder //löschen// wollen oder ob Sie die Bearbeitung abbrechen möchten.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/edit.txt
new file mode 100644
index 000000000..15e02c61a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/edit.txt
@@ -0,0 +1,4 @@
+Bitte nur editieren, falls das Dokument **verbessert** werden kann.
+
+Nach dem Bearbeiten den **''[Speichern]''**-Knopf drücken. Siehe [[wiki:syntax]] zur Wiki-Syntax. Zum Testen bitte erst im [[playground:playground|Spielplatz]] üben.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/editrev.txt
new file mode 100644
index 000000000..6c1f642cc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/editrev.txt
@@ -0,0 +1,2 @@
+**Eine ältere Version des Dokuments wurde geladen!** Beim Speichern wird eine neue Version des Dokuments mit diesem Inhalt erstellt.
+---- \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/index.txt
new file mode 100644
index 000000000..fa8dc4663
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/index.txt
@@ -0,0 +1,4 @@
+====== Ãœbersicht ======
+
+Dies ist eine Übersicht über alle vorhandenen Seiten und [[doku>namespaces|Namensräume]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/install.html
new file mode 100644
index 000000000..15fd1c36b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/install.html
@@ -0,0 +1,27 @@
+<p>Diese Seite hilft Ihnen bei der Erst-Installation und Konfiguration von
+<a href="http://dokuwiki.org">Dokuwiki</a>. Zusätzliche Informationen zu
+diesem Installationsskript finden Sie auf der entsprechenden
+<a href="http://dokuwiki.org/installer">Hilfe Seite</a> (en).</p>
+
+<p>DokuWiki verwendet normale Dateien für das Speichern von Wikiseiten und
+anderen Informationen (Bilder, Suchindizes, alte Versionen, usw.).
+Um DokuWiki betreiben zu können, <strong>muss</strong> Schreibzugriff auf die
+Verzeichnisse bestehen, in denen DokuWiki diese Dateien ablegt. Dieses
+Installationsprogramm kann diese Rechte nicht für Sie setzen. Sie müssen dies
+manuell auf einer Kommando-Shell oder, falls Sie DokuWiki bei einem Fremdanbieter
+hosten, über FTP oder ein entsprechendes Werkzeug (z.B. cPanel) durchführen.</p>
+
+<p>Dieses Skript hilft Ihnen beim ersten Einrichten des Zugangsschutzes
+(<acronym title="access control list">ACL</acronym>) von DokuWiki, welcher eine
+Administratoranmeldung und damit Zugang zum Administrationsmenu ermöglicht.
+Dort können Sie dann weitere Tätigkeiten wie das Installieren von Plugins, das
+Verwalten von Nutzern und das Ändern von Konfigurationseinstellungen durchführen.
+Das Nutzen der Zugangskontrolle ist nicht zwingend erforderlich, es erleichtert aber
+die Administration von DokuWiki.</p>
+
+<p>Erfahrene Anwender oder Nutzer mit speziellen Konfigurationsbedürfnissen sollten
+die folgenden Links nutzen, um sich über
+<a href="http://dokuwiki.org/install">Installation</a>
+und <a href="http://dokuwiki.org/config">Konfiguration</a> zu
+informieren.</p>
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/lang.php
new file mode 100644
index 000000000..d0c1f8b70
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/lang.php
@@ -0,0 +1,257 @@
+<?php
+/**
+ * german language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Christof <gagi@fin.de>
+ * @author Anika Henke <anika@selfthinker.org>
+ * @author Esther Brunner <esther@kaffeehaus.ch>
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ * @author Michael Klier <chi@chimeric.de>
+ * @author Leo Moll <leo@yeasoft.com>
+ * @author Florian Anderiasch <fa@art-core.org>
+ * @author Robin Kluth <commi1993@gmail.com>
+ * @author Arne Pelka <mail@arnepelka.de>
+ * @author Dirk Einecke <dirk@dirkeinecke.de>
+ * @author Blitzi94@gmx.de
+ * @author Robert Bogenschneider <robog@GMX.de>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '„';
+$lang['doublequoteclosing'] = '“';
+$lang['singlequoteopening'] = '‚';
+$lang['singlequoteclosing'] = '‘';
+$lang['apostrophe'] = '’';
+$lang['btn_edit'] = 'Diese Seite bearbeiten';
+$lang['btn_source'] = 'Zeige Quelltext';
+$lang['btn_show'] = 'Seite anzeigen';
+$lang['btn_create'] = 'Seite anlegen';
+$lang['btn_search'] = 'Suche';
+$lang['btn_save'] = 'Speichern';
+$lang['btn_preview'] = 'Vorschau';
+$lang['btn_top'] = 'Nach oben';
+$lang['btn_newer'] = '<< jüngere Änderungen';
+$lang['btn_older'] = 'ältere Änderungen >>';
+$lang['btn_revs'] = 'Ältere Versionen';
+$lang['btn_recent'] = 'Letzte Änderungen';
+$lang['btn_upload'] = 'Hochladen';
+$lang['btn_cancel'] = 'Abbrechen';
+$lang['btn_index'] = 'Ãœbersicht';
+$lang['btn_secedit'] = 'Bearbeiten';
+$lang['btn_login'] = 'Anmelden';
+$lang['btn_logout'] = 'Abmelden';
+$lang['btn_admin'] = 'Admin';
+$lang['btn_update'] = 'Updaten';
+$lang['btn_delete'] = 'Löschen';
+$lang['btn_back'] = 'Zurück';
+$lang['btn_backlink'] = 'Links hierher';
+$lang['btn_backtomedia'] = 'Zurück zur Dateiauswahl';
+$lang['btn_subscribe'] = 'Änderungen abonnieren';
+$lang['btn_unsubscribe'] = 'Änderungen abbestellen';
+$lang['btn_subscribens'] = 'Namensraumänderungen abonnieren';
+$lang['btn_unsubscribens'] = 'Namensraumänderungen abbestellen';
+$lang['btn_profile'] = 'Benutzerprofil';
+$lang['btn_reset'] = 'Zurücksetzen';
+$lang['btn_resendpwd'] = 'Sende neues Passwort';
+$lang['btn_draft'] = 'Entwurf bearbeiten';
+$lang['btn_recover'] = 'Entwurf wieder herstellen';
+$lang['btn_draftdel'] = 'Entwurf löschen';
+$lang['btn_revert'] = 'Wiederherstellen';
+$lang['loggedinas'] = 'Angemeldet als';
+$lang['user'] = 'Benutzername';
+$lang['pass'] = 'Passwort';
+$lang['newpass'] = 'Neues Passwort';
+$lang['oldpass'] = 'Bestätigen (Altes Passwort)';
+$lang['passchk'] = 'und nochmal';
+$lang['remember'] = 'Angemeldet bleiben';
+$lang['fullname'] = 'Voller Name';
+$lang['email'] = 'E-Mail';
+$lang['register'] = 'Registrieren';
+$lang['profile'] = 'Benutzerprofil';
+$lang['badlogin'] = 'Nutzername oder Passwort sind falsch.';
+$lang['minoredit'] = 'kleine Änderung';
+$lang['draftdate'] = 'Entwurf gespeichert am';
+$lang['nosecedit'] = 'Diese Seite wurde in der Zwischenzeit geändert, Sektionsinfo ist veraltet, lade stattdessen volle Seite.';
+$lang['regmissing'] = 'Alle Felder müssen ausgefüllt werden.';
+$lang['reguexists'] = 'Der Nutzername existiert leider schon.';
+$lang['regsuccess'] = 'Der neue Nutzer wurde angelegt und das Passwort per E-Mail versandt.';
+$lang['regsuccess2'] = 'Der neue Nutzer wurde angelegt.';
+$lang['regmailfail'] = 'Offenbar ist ein Fehler beim Versenden der Passwort-E-Mail aufgetreten. Bitte wenden Sie sich an den Wiki-Admin.';
+$lang['regbadmail'] = 'Die angegebene E-Mail-Adresse scheint ungültig zu sein. Falls dies ein Fehler ist, wenden Sie sich bitte an den Wiki-Admin.';
+$lang['regbadpass'] = 'Die beiden eingegeben Passwörter stimmen nicht überein. Bitte versuchen Sie es noch einmal.';
+$lang['regpwmail'] = 'Ihr DokuWiki Passwort';
+$lang['reghere'] = 'Sie haben noch keinen Zugang? Hier anmelden';
+$lang['profna'] = 'Änderung des Benutzerprofils in diesem Wiki nicht möglich.';
+$lang['profnochange'] = 'Keine Änderungen, nichts zu tun.';
+$lang['profnoempty'] = 'Es muß ein Name und eine E-Mail-Adresse angegeben werden.';
+$lang['profchanged'] = 'Benuzerprofil erfolgreich geändert.';
+$lang['pwdforget'] = 'Passwort vergessen? Fordere ein neues an';
+$lang['resendna'] = 'Passwörter versenden ist in diesem Wiki nicht möglich.';
+$lang['resendpwd'] = 'Neues Passwort schicken für';
+$lang['resendpwdmissing'] = 'Es tut mir Leid, aber Sie müssen alle Felder ausfüllen.';
+$lang['resendpwdnouser'] = 'Es tut mir Leid, aber der Benutzer existiert nicht in unserer Datenbank.';
+$lang['resendpwdbadauth'] = 'Es tut mir Leid, aber dieser Authentifizierungscode ist ungültig. Stellen Sie sicher, dass Sie den kompletten Bestätigungslink verwendet haben.';
+$lang['resendpwdconfirm'] = 'Ein Bestätigungslink wurde per E-Mail versandt.';
+$lang['resendpwdsuccess'] = 'Ihr neues Passwort wurde per E-Mail versandt.';
+$lang['license'] = 'Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht:';
+$lang['licenseok'] = 'Hinweis: Durch das Bearbeiten dieser Seite geben Sie Ihr Einverständnis, dass Ihr Inhalt unter der folgenden Lizenz veröffentlicht wird:';
+$lang['searchmedia'] = 'Suche Dateinamen:';
+$lang['searchmedia_in'] = 'Suche in %s';
+$lang['txt_upload'] = 'Datei zum Hochladen auswählen';
+$lang['txt_filename'] = 'Hochladen als (optional)';
+$lang['txt_overwrt'] = 'Bestehende Datei überschreiben';
+$lang['lockedby'] = 'Momentan gesperrt von';
+$lang['lockexpire'] = 'Sperre läuft ab am';
+$lang['willexpire'] = 'Die Sperre zur Bearbeitung dieser Seite läuft in einer Minute ab.\nUm Bearbeitungskonflikte zu vermeiden, sollten Sie sie durch einen Klick auf den Vorschau-Knopf verlängern.';
+$lang['notsavedyet'] = 'Nicht gespeicherte Änderungen gehen verloren!\nWeitermachen?';
+$lang['rssfailed'] = 'Es ist ein Fehler beim Laden des Feeds aufgetreten: ';
+$lang['nothingfound'] = 'Nichts gefunden.';
+$lang['mediaselect'] = 'Dateiauswahl';
+$lang['fileupload'] = 'Datei hochladen';
+$lang['uploadsucc'] = 'Datei wurde erfolgreich hochgeladen';
+$lang['uploadfail'] = 'Hochladen fehlgeschlagen. Keine Berechtigung?';
+$lang['uploadwrong'] = 'Hochladen verweigert. Diese Dateiendung ist nicht erlaubt.';
+$lang['uploadexist'] = 'Datei existiert bereits. Keine Änderungen vorgenommen.';
+$lang['uploadbadcontent'] = 'Die hochgeladenen Daten stimmen nicht mit der Dateiendung %s überein.';
+$lang['uploadspam'] = 'Hochladen verweigert: Treffer auf der Spamliste.';
+$lang['uploadxss'] = 'Hochladen verweigert: Daten scheinen Schadcode zu enthalten.';
+$lang['uploadsize'] = 'Die hochgeladene Datei war zu groß. (max. %s)';
+$lang['deletesucc'] = 'Die Datei "%s" wurde gelöscht.';
+$lang['deletefail'] = '"%s" konnte nicht gelöscht werden - prüfen Sie die Berechtigungen.';
+$lang['mediainuse'] = 'Die Datei "%s" wurde nicht gelöscht - sie wird noch verwendet.';
+$lang['namespaces'] = 'Namensräume';
+$lang['mediafiles'] = 'Vorhandene Dateien in';
+$lang['js']['searchmedia'] = 'Suche Dateien';
+$lang['js']['keepopen'] = 'Fenster nach Auswahl nicht schließen';
+$lang['js']['hidedetails'] = 'Details ausblenden';
+$lang['js']['nosmblinks'] = 'Das Verlinken von Windows-Freigaben funktioniert nur im Microsoft Internet Explorer.
+Der Link kann jedoch durch Kopieren und Einfügen verwendet werden.';
+$lang['js']['linkwiz'] = 'Link-Assistent';
+$lang['js']['linkto'] = 'Link nach:';
+$lang['js']['del_confirm'] = 'Eintrag wirklich löschen?';
+$lang['js']['mu_btn'] = 'Mehrere Dateien gleichzeitig hochladen';
+$lang['mediausage'] = 'Syntax zum Verwenden dieser Datei:';
+$lang['mediaview'] = 'Originaldatei öffnen';
+$lang['mediaroot'] = 'Wurzel';
+$lang['mediaupload'] = 'Laden Sie hier eine Datei in den momentanen Namensraum hoch. Um Unterordner zu erstellen, stellen Sie diese dem Dateinamen im Feld "Hochladen als" durch Doppelpunkt getrennt voran.';
+$lang['mediaextchange'] = 'Dateiendung vom .%s nach .%s geändert!';
+$lang['reference'] = 'Verwendung von';
+$lang['ref_inuse'] = 'Diese Datei kann nicht gelöscht werden, da sie noch von folgenden Seiten benutzt wird:';
+$lang['ref_hidden'] = 'Einige Verweise sind auf Seiten, für die Sie keine Leseberechtigung haben.';
+$lang['hits'] = 'Treffer';
+$lang['quickhits'] = 'Passende Seitennamen';
+$lang['toc'] = 'Inhaltsverzeichnis';
+$lang['current'] = 'aktuell';
+$lang['yours'] = 'Ihre Version';
+$lang['diff'] = 'Zeige Unterschiede zu aktueller Version';
+$lang['diff2'] = 'Zeige Unterschiede der ausgewählten Versionen';
+$lang['line'] = 'Zeile';
+$lang['breadcrumb'] = 'Zuletzt angesehen';
+$lang['youarehere'] = 'Sie befinden sich hier';
+$lang['lastmod'] = 'Zuletzt geändert';
+$lang['by'] = 'von';
+$lang['deleted'] = 'gelöscht';
+$lang['created'] = 'angelegt';
+$lang['restored'] = 'alte Version wieder hergestellt';
+$lang['external_edit'] = 'Externe Bearbeitung';
+$lang['summary'] = 'Zusammenfassung';
+$lang['noflash'] = 'Das <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> wird benötigt, um diesen Ihnalt anzuzeigen.';
+$lang['download'] = 'Schnipsel herunterladen';
+$lang['mail_newpage'] = 'Neue Seite:';
+$lang['mail_changed'] = 'Seite geaendert:';
+$lang['mail_new_user'] = 'Neuer Benutzer:';
+$lang['mail_upload'] = 'Datei hochgeladen:';
+$lang['qb_bold'] = 'Fetter Text';
+$lang['qb_italic'] = 'Kursiver Text';
+$lang['qb_underl'] = 'Unterstrichener Text';
+$lang['qb_code'] = 'Code Text';
+$lang['qb_strike'] = 'Durchgestrichener Text';
+$lang['qb_h1'] = 'Level 1 Ãœberschrift';
+$lang['qb_h2'] = 'Level 2 Ãœberschrift';
+$lang['qb_h3'] = 'Level 3 Ãœberschrift';
+$lang['qb_h4'] = 'Level 4 Ãœberschrift';
+$lang['qb_h5'] = 'Level 5 Ãœberschrift';
+$lang['qb_h'] = 'Ãœberschrift';
+$lang['qb_hs'] = 'Wähle die Überschrift';
+$lang['qb_hplus'] = 'Obere Ãœberschrift';
+$lang['qb_hminus'] = 'Untere Ãœberschrift';
+$lang['qb_hequal'] = 'Gleichzeilige Ãœberschrift';
+$lang['qb_link'] = 'Interner Link';
+$lang['qb_extlink'] = 'Externer Link';
+$lang['qb_hr'] = 'Horizontale Linie';
+$lang['qb_ol'] = 'Nummerierter Listenpunkt';
+$lang['qb_ul'] = 'Listenpunkt';
+$lang['qb_media'] = 'Bilder und andere Dateien hinzufügen';
+$lang['qb_sig'] = 'Unterschrift einfügen';
+$lang['qb_smileys'] = 'Smileys';
+$lang['qb_chars'] = 'Sonderzeichen';
+$lang['upperns'] = 'zum übergeordneten Namensraum springen';
+$lang['admin_register'] = 'Neuen Benutzer anmelden';
+$lang['metaedit'] = 'Metadaten bearbeiten';
+$lang['metasaveerr'] = 'Die Metadaten konnten nicht gesichert werden';
+$lang['metasaveok'] = 'Metadaten gesichert';
+$lang['img_backto'] = 'Zurück zu';
+$lang['img_title'] = 'Titel';
+$lang['img_caption'] = 'Bildunterschrift';
+$lang['img_date'] = 'Datum';
+$lang['img_fname'] = 'Dateiname';
+$lang['img_fsize'] = 'Grösse';
+$lang['img_artist'] = 'FotografIn';
+$lang['img_copyr'] = 'Copyright';
+$lang['img_format'] = 'Format';
+$lang['img_camera'] = 'Kamera';
+$lang['img_keywords'] = 'Schlagwörter';
+$lang['subscribe_success'] = '%s hat nun Änderungen der Seite %s abonniert';
+$lang['subscribe_error'] = '%s kann die Änderungen der Seite %s nicht abonnieren';
+$lang['subscribe_noaddress'] = 'Weil Ihre E-Mail-Adresse fehlt, können Sie das Thema nicht abonnieren';
+$lang['unsubscribe_success'] = 'Das Abonnement von %s für die Seite %s wurde aufgelöst';
+$lang['unsubscribe_error'] = 'Das Abonnement von %s für die Seite %s konnte nicht aufgelöst werden';
+$lang['authmodfailed'] = 'Benutzerüberprüfung nicht möglich. Bitte wenden Sie sich an den Systembetreuer.';
+$lang['authtempfail'] = 'Benutzerüberprüfung momentan nicht möglich. Falls das Problem andauert, wenden Sie sich an den Systembetreuer.';
+$lang['i_chooselang'] = 'Wählen Sie Ihre Sprache';
+$lang['i_installer'] = 'DokuWiki Installation';
+$lang['i_wikiname'] = 'Wiki-Name';
+$lang['i_enableacl'] = 'Zugangskontrolle (ACL) aktivieren (empfohlen)';
+$lang['i_superuser'] = 'Administrator Benutzername';
+$lang['i_problems'] = 'Das Installationsprogramm hat unten aufgeführte Probleme festgestellt, die zunächst behoben werden müssen bevor Sie mit der Installation fortfahren können.';
+$lang['i_modified'] = 'Aus Sicherheitsgründen arbeitet dieses Script nur mit einer neuen, unmodifizierten DokuWiki Installation. Sie sollten entweder alle Dateien noch einmal frisch installieren oder die <a href="http://dokuwiki.org/install">Dokuwiki-Installationsanleitung</a> konsultieren.';
+$lang['i_funcna'] = 'Die PHP Funktion <code>%s</code> ist nicht verfügbar. Unter Umständen wurde sie von Ihrem Hoster deaktiviert?';
+$lang['i_phpver'] = 'Ihre PHP-Version <code>%s</code> ist niedriger als die benötigte Version <code>%s</code>. Bitte aktualisieren Sie Ihre PHP-Installation.';
+$lang['i_permfail'] = '<code>%s</code> ist nicht durch DokuWiki beschreibbar. Sie müssen die Berechtigungen dieses Ordners ändern!';
+$lang['i_confexists'] = '<code>%s</code> existiert bereits';
+$lang['i_writeerr'] = '<code>%s</code> konnte nicht erzeugt werden. Sie sollten die Verzeichnis-/Datei-Rechte überprüfen und die Datei manuell anlegen.';
+$lang['i_badhash'] = 'Unbekannte oder modifizierte dokuwiki.php (Hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - unerlaubter oder leerer Wert';
+$lang['i_success'] = 'Die Konfiguration wurde erfolgreich abgeschlossen. Sie können jetzt die install.php löschen. Ihr <a href="doku.php">neues DokuWiki</a> ist jetzt für Sie bereit.';
+$lang['i_failure'] = 'Es sind Fehler beim Schreiben der Konfigurationsdateien aufgetreten. Sie müssen diese vermutlich von Hand beheben, bevor Sie Ihr <a href="doku.php">neues DokuWiki</a> nutzen können.';
+$lang['i_policy'] = 'Anfangseinstellung für Zugangskontrolle (ACL)';
+$lang['i_pol0'] = 'Offenes Wiki (lesen, schreiben, hochladen für alle)';
+$lang['i_pol1'] = 'Öffentliches Wiki (lesen für alle, schreiben und hochladen für registrierte Nutzer)';
+$lang['i_pol2'] = 'Geschlossenes Wiki (lesen, schreiben, hochladen nur für registrierte Nutzer)';
+$lang['i_retry'] = 'Wiederholen';
+$lang['mu_intro'] = 'In diesem Bereich können Sie mehrere Dateien gleichzeitig hochladen. Benutzen Sie die Schaltfläche "Durchsuchen" um sie der Warteschlange zuzufügen. Betätigen Sie die Schaltfläche "Hochladen" um die Übertragung zu starten.';
+$lang['mu_gridname'] = 'Dateiname';
+$lang['mu_gridsize'] = 'Größe';
+$lang['mu_gridstat'] = 'Status';
+$lang['mu_namespace'] = 'Namensraum';
+$lang['mu_browse'] = 'Durchsuchen';
+$lang['mu_toobig'] = 'zu groß';
+$lang['mu_ready'] = 'bereit zum hochladen';
+$lang['mu_done'] = 'fertig';
+$lang['mu_fail'] = 'gescheitert';
+$lang['mu_authfail'] = 'Sitzung abgelaufen';
+$lang['mu_progress'] = '@PCT@% hochgeladen';
+$lang['mu_filetypes'] = 'Erlaubte Dateitypen';
+$lang['mu_info'] = 'Dateien hochgeladen!';
+$lang['mu_lasterr'] = 'Letzter Fehler:';
+$lang['recent_global'] = 'Im Moment sehen Sie die Änderungen im Namensraum <b>%s</b>. Sie können auch <a href="%s">die Änderungen im gesamten Wiki sehen</a>.';
+
+$lang['years'] = 'vor %d Jahren';
+$lang['months'] = 'vor %d Monaten';
+$lang['weeks'] = 'vor %d Wochen';
+$lang['days'] = 'vor %d Tagen';
+$lang['hours'] = 'vor %d Stunden';
+$lang['minutes'] = 'vor %d Minuten';
+$lang['seconds'] = 'vor %d Sekunden';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/locked.txt
new file mode 100644
index 000000000..6656beece
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/locked.txt
@@ -0,0 +1,4 @@
+====== Seite gesperrt ======
+
+Diese Seite ist momentan von einem anderen Nutzer gesperrt. Warten Sie, bis dieser mit dem Bearbeiten fertig ist oder die Sperre abläuft.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/login.txt
new file mode 100644
index 000000000..6698da614
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/login.txt
@@ -0,0 +1,4 @@
+====== Anmelden ======
+
+Geben Sie Ihren Benutzernamen und Ihr Passwort in das Formular unten ein, um sich anzumelden. Bitte beachten Sie, dass dafür "Cookies" in den Sicherheitseinstellungen Ihres Browsers erlaubt sein müssen.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/mailtext.txt
new file mode 100644
index 000000000..fee88d4d8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/mailtext.txt
@@ -0,0 +1,17 @@
+Eine Seite in Ihrem Wiki wurde geändert oder neu angelegt. Hier sind die Details:
+
+Datum : @DATE@
+Browser : @BROWSER@
+IP-Adresse : @IPADDRESS@
+Hostname : @HOSTNAME@
+Alte Version : @OLDPAGE@
+Neue Version : @NEWPAGE@
+Zusammenfassung: @SUMMARY@
+Benutzer : @USER@
+
+@DIFF@
+
+
+--
+Diese Mail kommt vom DokuWiki auf
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/newpage.txt
new file mode 100644
index 000000000..7871c67de
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/newpage.txt
@@ -0,0 +1,5 @@
+====== Dieses Thema existiert noch nicht ======
+
+Sie sind einem Link zu einer Seite gefolgt, die noch nicht existiert. Sie können die Seite mit dem Knopf **"[Seite anlegen]"** selbst anlegen und mit Inhalt füllen.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/norev.txt
new file mode 100644
index 000000000..8a9c6927b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/norev.txt
@@ -0,0 +1,4 @@
+====== Version existiert nicht ======
+
+Die angegebene Version des Dokuments wurde nicht gefunden. Benutzen Sie den **''[Ältere Versionen]''** Knopf, um eine Liste aller verfügbaren Versionen dieses Dokuments zu erhalten.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/preview.txt
new file mode 100644
index 000000000..b07ae5091
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/preview.txt
@@ -0,0 +1,5 @@
+====== Vorschau ======
+
+So wird Ihr Text später aussehen. Achtung: Der Text wurde noch **nicht gespeichert**!
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/pwconfirm.txt
new file mode 100644
index 000000000..3aa81bf77
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/pwconfirm.txt
@@ -0,0 +1,16 @@
+Hallo @FULLNAME@!
+
+Jemand hat ein neues Passwort für Ihren @TITLE@
+login auf @DOKUWIKIURL@ angefordert.
+
+Wenn Sie diese Änderung nicht angefordert haben, ignorieren Sie diese
+E-Mail einfach.
+
+Um die Anforderung zu bestätigen, folgen Sie bitte dem unten angegebenen
+Bestätigungslink.
+
+@CONFIRM@
+
+--
+Diese Mail kommt vom DokuWiki auf
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/read.txt
new file mode 100644
index 000000000..bc011d0ee
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/read.txt
@@ -0,0 +1,2 @@
+Diese Seite ist nicht editierbar. Sie können den Quelltext sehen, jedoch nicht verändern. Kontaktieren Sie den Administrator, wenn Sie glauben, dass hier ein Fehler vorliegt.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/recent.txt
new file mode 100644
index 000000000..c05bbae12
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/recent.txt
@@ -0,0 +1,5 @@
+====== Letzte Änderungen ======
+
+Die folgenden Seiten wurden zuletzt geändert.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/register.txt
new file mode 100644
index 000000000..83684f500
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/register.txt
@@ -0,0 +1,4 @@
+====== Als neuer Nutzer registrieren ======
+
+Bitte füllen Sie alle Felder aus, um einen neuen Nutzer-Account in diesem Wiki anzulegen. Stellen Sie sicher, dass eine **gültige E-Mail-Adresse** angegeben wird - das Passwort wird an diese Adresse gesendet. Der Nutzername sollte aus einem Wort ohne Umlaute, Leer- oder Sonderzeichen bestehen.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/registermail.txt
new file mode 100644
index 000000000..ed37a9505
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/registermail.txt
@@ -0,0 +1,14 @@
+Ein neuer Benutzer hat sich registriert. Hier sind die Details:
+
+Benutzername : @NEWUSER@
+Voller Name : @NEWNAME@
+E-Mail : @NEWEMAIL@
+
+Date : @DATE@
+Browser : @BROWSER@
+IP-Address : @IPADDRESS@
+Hostname : @HOSTNAME@
+
+--
+Diese Mail kommt vom DokuWiki auf
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/resendpwd.txt
new file mode 100644
index 000000000..2ff639369
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/resendpwd.txt
@@ -0,0 +1,3 @@
+====== Neues Passwort anfordern ======
+
+Füllen Sie alle Felder unten aus, um ein neues Passwort für Ihren Zugang zu erhalten. Das neue Passwort wird an Ihre gespeicherte E-Mail-Adresse geschickt. Der Benutzername sollte Ihr Wiki-Benutzername sein.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/revisions.txt
new file mode 100644
index 000000000..e1bafdd2d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/revisions.txt
@@ -0,0 +1,4 @@
+====== Ältere Versionen ======
+
+Dies sind ältere Versionen des gewählten Dokuments. Um zu einer älteren Version zurückzukehren, wählen Sie die entsprechende Version aus, klicken auf **''[Diese Seite bearbeiten]''** und speichern Sie sie erneut ab.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/searchpage.txt
new file mode 100644
index 000000000..56104551b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/searchpage.txt
@@ -0,0 +1,7 @@
+====== Suche ======
+
+Unten sind die Ergebnisse Ihrer Suche gelistet. Falls der gesuchte Begriff nicht gefunden wurde, können Sie direkt eine neue Seite für den Suchbegriff anlegen, indem Sie auf den **''[Seite anlegen]''** Knopf drücken.
+
+===== Ergebnisse =====
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/showrev.txt
new file mode 100644
index 000000000..65f53c9c1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/showrev.txt
@@ -0,0 +1,2 @@
+**Dies ist eine alte Version des Dokuments!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/stopwords.txt
new file mode 100644
index 000000000..0487a940a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/stopwords.txt
@@ -0,0 +1,125 @@
+# Die Wörter dieser Liste werden bei der Indexierung ignoriert. Jedes Wort steht in einer neuen Zeile.
+# Beachten Sie beim Bearbeiten der Datei darauf, dass Sie UNIX-Zeilenumbrüche verwenden (einfacher Zeilenumbruch).
+# Wörter, die kürzer als 3 Buchstaben sind, brauchen Sie nicht in die Liste mit aufnehmen. Diese werden automatisch ignoriert.
+# Diese Liste basiert auf der folgenden: http://www.ranks.nl/stopwords/
+aber
+als
+auch
+auf
+aus
+bei
+bin
+bis
+bist
+dadurch
+daher
+darum
+das
+daß
+dass
+dein
+deine
+dem
+den
+der
+des
+dessen
+deshalb
+die
+dies
+dieser
+dieses
+doch
+dort
+durch
+ein
+eine
+einem
+einen
+einer
+eines
+euer
+eure
+für
+hatte
+hatten
+hattest
+hattet
+hier
+hinter
+ich
+ihr
+ihre
+in
+im
+ist
+jede
+jedem
+jeden
+jeder
+jedes
+jener
+jenes
+jetzt
+kann
+kannst
+können
+könnt
+machen
+mein
+meine
+mit
+muß
+mußt
+musst
+müssen
+müßt
+nach
+nachdem
+nein
+nicht
+nun
+oder
+seid
+sein
+seine
+sich
+sie
+sind
+soll
+sollen
+sollst
+sollt
+sonst
+soweit
+sowie
+und
+unser
+unsere
+unter
+vom
+von
+vor
+um
+wann
+warum
+was
+weiter
+weitere
+wenn
+wer
+werde
+werden
+werdet
+weshalb
+wie
+wieder
+wieso
+wir
+wird
+wirst
+woher
+wohin
+zum
+zur
+über
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/subscribermail.txt
new file mode 100644
index 000000000..0d90967a2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/subscribermail.txt
@@ -0,0 +1,23 @@
+Hallo!
+
+Die Seite @PAGE@ im @TITLE@ Wiki wurde bearbeitet.
+Das sind die Änderungen:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Datum : @DATE@
+Benutzer : @USER@
+Ãœbersicht: @SUMMARY@
+Alte Revision: @OLDPAGE@
+Neue Revision: @NEWPAGE@
+
+Um das Abonnement für diese Seite aufzulösen, melde Sie sich im Wiki an
+@DOKUWIKIURL@, besuchen dann
+@NEWPAGE@
+und klicken auf die Taste 'Änderungen abbestellen'.
+
+--
+Diese Mail kommt vom DokuWiki auf
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/updateprofile.txt
new file mode 100644
index 000000000..f19dd13f6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/updateprofile.txt
@@ -0,0 +1,5 @@
+====== Benutzerprofil ändern ======
+
+Nur die Felder, die Sie ändern, werden aktualisiert. Alle anderen bleiben, wie sie sind. Ihren Benutzernamen können Sie jedoch nicht ändern.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/uploadmail.txt
new file mode 100644
index 000000000..757729804
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/uploadmail.txt
@@ -0,0 +1,14 @@
+Eine Datei wurde in Ihrem Wiki hochgeladen. Hier sind die Details:
+
+Datei : @MEDIA@
+Datum : @DATE@
+Browser : @BROWSER@
+IP-Adresse : @IPADDRESS@
+Hostname : @HOSTNAME@
+Größe : @SIZE@
+MIME-Typ : @MIME@
+Benutzer : @USER@
+
+--
+Diese Mail kommt vom DokuWiki auf
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/wordblock.txt
new file mode 100644
index 000000000..14622ebc2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/wordblock.txt
@@ -0,0 +1,4 @@
+====== SPAM blockiert ======
+
+Ihre Änderungen wurden nicht gespeichert, da sie ein oder mehrere nicht erlaubte Wörter enthielten. Falls Sie versucht haben sollten, das Wiki zu Spammen -- Schande über Sie! Wenn Sie glauben, dass der Eintrag zu Unrecht blockiert wurde, kontaktieren Sie bitte den Administrator des Wikis.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/admin.txt
new file mode 100644
index 000000000..49e6c657b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/admin.txt
@@ -0,0 +1,3 @@
+====== ΔιαχείÏιση ======
+
+ΠαÏακάτω μποÏείτε να βÏείτε μια λίστα με τις δυνατότητες διαχείÏισης στο DokuWiki
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/adminplugins.txt
new file mode 100644
index 000000000..ea00b959e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/adminplugins.txt
@@ -0,0 +1 @@
+===== ΠÏόσθετες συνδεόμενες υπομονάδες ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/backlinks.txt
new file mode 100644
index 000000000..572f85791
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/backlinks.txt
@@ -0,0 +1,3 @@
+====== ΣÏνδεσμοι Ï€Ïος την Ï„Ïέχουσα σελίδα ======
+
+Οι παÏακάτω σελίδες πεÏιέχουν συνδέσμους Ï€Ïος την Ï„Ïέχουσα σελίδα. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/conflict.txt
new file mode 100644
index 000000000..27b80b397
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/conflict.txt
@@ -0,0 +1,5 @@
+====== ΥπάÏχει μία νεώτεÏη έκδοση αυτής της σελίδας ======
+
+ΥπάÏχει μία νεώτεÏη έκδοση της σελίδας που Ï„Ïoποποιήσατε. Αυτό συμβαίνει εάν κάποιος άλλος χÏήστης Ï„Ïοποποίησε την ίδια σελίδα ενώ την Ï„ÏοποποιοÏσατε και εσείς.
+
+Ελέγξτε Ï€Ïοσεκτικά τις διαφοÏές που παÏουσιάζονται παÏακάτω και έπειτα αποφασίστε ποια έκδοση θα κÏατήσετε. Εάν επιλέξετε ''Αποθήκευση'', η δική σας έκδοση θα αποθηκευτεί. Εάν επιλέξετε ''ΑκÏÏωση'', η νεώτεÏη έκδοση θα διατηÏηθεί ως Ï„Ïέχουσα.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/denied.txt
new file mode 100644
index 000000000..71e9a04b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/denied.txt
@@ -0,0 +1,5 @@
+====== Μη επιτÏεπτή ενέÏγεια ======
+
+Συγγνώμη, αλλά δεν έχετε επαÏκή δικαιώματα για την συγκεκÏιμένη ενέÏγεια.
+
+Μήπως παÏαλείψατε να συνδεθείτε?
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/diff.txt
new file mode 100644
index 000000000..dde065b43
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/diff.txt
@@ -0,0 +1,3 @@
+====== ΣÏγκÏιση εκδόσεων ======
+
+Εδώ βλέπετε τις διαφοÏές Î¼ÎµÏ„Î±Î¾Ï Ï„Î·Ï‚ επιλεγμένης έκδοσης και της Ï„Ïέχουσας έκδοσης της σελίδας.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/draft.txt
new file mode 100644
index 000000000..3bb15037f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/draft.txt
@@ -0,0 +1,7 @@
+====== Î’Ïέθηκε μία αυτόματα αποθηκευμένη σελίδα ======
+
+Η τελευταία Ï„Ïοποποίηση αυτής της σελίδας δεν ολοκληÏώθηκε επιτυχώς. Η εφαÏμογή αποθήκευσε αυτόματα μία εκδοχή της σελίδας την ÏŽÏα που την Ï„ÏοποποιοÏσατε και μποÏείτε να την χÏησιμοποιήσετε για να συνεχίσετε την εÏγασία σας. ΠαÏακάτω φαίνεται αυτή η πιο Ï€Ïόσφατη αυτόματα αποθηκευμένη σελίδα.
+
+ΜποÏείτε να //επαναφέÏετε// αυτή την αυτόματα αποθηκευμένη σελίδα ως Ï„Ïέχουσα, να την //διαγÏάψετε// ή να //ακυÏώσετε// τη διαδικασία Ï„Ïοποποίησης της Ï„Ïέχουσας σελίδας.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/edit.txt
new file mode 100644
index 000000000..26b52f97a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/edit.txt
@@ -0,0 +1 @@
+ΤÏοποποιήστε την σελίδα **μόνο** εάν μποÏείτε να την **βελτιώσετε**. Για να κάνετε δοκιμές με ασφάλεια ή να εξοικειωθείτε με το πεÏιβάλλον χÏησιμοποιήστε το [[:playground:playground|playground]]. Î‘Ï†Î¿Ï Ï„Ïοποποιήστε την σελίδα επιλέξτε ''Αποθήκευση''. Δείτε τις [[:wiki:syntax|οδηγίες]] για την σωστή σÏνταξη.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/editrev.txt
new file mode 100644
index 000000000..ac6bc5a3d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/editrev.txt
@@ -0,0 +1,2 @@
+**ΦοÏτώσατε μια παλαιότεÏη έκδοση της σελίδας!** Εάν την αποθηκεÏσετε, θα αντικαταστήσει την Ï„Ïέχουσα έκδοση.
+---- \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/index.txt
new file mode 100644
index 000000000..51f1fc600
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/index.txt
@@ -0,0 +1,3 @@
+====== Κατάλογος ======
+
+Αυτός είναι ένας κατάλογος όλων των διαθέσιμων σελίδων ταξινομημένων κατά [[doku>namespaces|φακέλους]].
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/install.html
new file mode 100644
index 000000000..89429d55b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/install.html
@@ -0,0 +1,25 @@
+<p>Αυτή η σελίδα πεÏιέχει πληÏοφοÏίες που βοηθοÏν στην αÏχική εγκατάσταση και
+ÏÏθμιση της εφαÏμογής <a href="http://dokuwiki.org">Dokuwiki</a>. ΠεÏισσότεÏες
+πληÏοφοÏίες υπάÏχουν στη <a href="http://dokuwiki.org/installer">σελίδα τεκμηÏίωσης</a>
+του Î¿Î´Î·Î³Î¿Ï ÎµÎ³ÎºÎ±Ï„Î¬ÏƒÏ„Î±ÏƒÎ·Ï‚.</p>
+
+<p>Η εφαÏμογή DokuWiki χÏησιμοποιεί απλά αÏχεία για να αποθηκεÏει τις σελίδες wiki
+καθώς και πληÏοφοÏίες που σχετίζονται με αυτές (Ï€.χ. εικόνες, καταλόγους αναζήτησης,
+παλαιότεÏες εκδόσεις σελίδων, κλπ). Για να λειτουÏγεί σωστά η εφαÏμογή DokuWiki
+<strong>Ï€Ïέπει</strong> να έχει δικαιώματα εγγÏαφής στους φακέλους που φιλοξενοÏν
+αυτά τα αÏχεία. Ο οδηγός εγκατάστασης δεν έχει την δυνατότητα να παÏαχωÏήσει αυτά τα
+δικαιώματα εγγÏαφής στους σχετικοÏÏ‚ φακέλους. Ο κανονικός Ï„Ïόπος για να γίνει αυτό είναι
+είτε απευθείας σε πεÏιβάλλον γÏαμμής εντολών ή, εάν δεν έχετε τέτοια Ï€Ïόσβαση, μέσω FTP ή
+του πίνακα ελέγχου του πεÏιβάλλοντος φιλοξενίας (Ï€.χ. cPanel).</p>
+
+<p>Ο οδηγός εγκατάστασης θα Ïυθμίσει την εφαÏμογή DokuWiki ώστε να χÏησιμοποιεί
+<acronym title="access control list">ACL</acronym>, με Ï„Ïόπο ώστε ο διαχειÏιστής να
+έχει δυνατότητα εισόδου και Ï€Ïόσβαση στο Î¼ÎµÎ½Î¿Ï Î´Î¹Î±Ï‡ÎµÎ¯Ïισης της εφαÏμογής για εγκατάσταση
+επεκτάσεων, διαχείÏιση χÏηστών, διαχείÏιση δικαιωμάτων Ï€Ïόσβασης στις διάφοÏες σελίδες και
+αλλαγή των Ïυθμίσεων. Αυτό δεν είναι απαÏαίτητο για να λειτουÏγήσει η εφαÏμογή, αλλά
+κάνει την διαχείÏισή της ευκολότεÏη.</p>
+
+<p>Οι έμπειÏοι χÏήστες και οι χÏήστες με ειδικές απαιτήσεις μποÏοÏν να επισκεφθοÏν
+τις σελίδες που πεÏιέχουν λεπτομεÏείς
+<a href="http://dokuwiki.org/install">οδηγίες εγκατάστασης</a>
+και <a href="http://dokuwiki.org/config">πληÏοφοÏίες για τις Ïυθμίσεις</a>.</p>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/lang.php
new file mode 100644
index 000000000..7aee3161d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/lang.php
@@ -0,0 +1,243 @@
+<?php
+/**
+ * Greek language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Thanos Massias <tm@thriasio.gr>
+ * @author Αθανάσιος Îταής <homunculus@wana.gr>
+ * @author Konstantinos Koryllos <koryllos@gmail.com>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '“';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '‘';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = '’';
+$lang['btn_edit'] = 'ΤÏοποποίηση σελίδας';
+$lang['btn_source'] = 'ΠÏοβολή κώδικα σελίδας';
+$lang['btn_show'] = 'ΠÏοβολή σελίδας';
+$lang['btn_create'] = 'ΔημιουÏγία σελίδας';
+$lang['btn_search'] = 'Αναζήτηση';
+$lang['btn_save'] = 'Αποθήκευση';
+$lang['btn_preview'] = 'ΠÏοεπισκόπηση';
+$lang['btn_top'] = 'ΕπιστÏοφή στην κοÏυφή της σελίδας';
+$lang['btn_newer'] = '<< πλέον Ï€Ïόσφατες';
+$lang['btn_older'] = 'λιγότεÏο Ï€Ïόσφατες >>';
+$lang['btn_revs'] = 'ΠαλαιότεÏες εκδόσεις σελίδας';
+$lang['btn_recent'] = 'ΠÏόσφατες αλλαγές σελίδων';
+$lang['btn_upload'] = 'ΦόÏτωση';
+$lang['btn_cancel'] = 'ΑκÏÏωση';
+$lang['btn_index'] = 'Κατάλογος';
+$lang['btn_secedit'] = 'ΤÏοποποίηση';
+$lang['btn_login'] = 'Είσοδος χÏήστη';
+$lang['btn_logout'] = 'Έξοδος χÏήστη';
+$lang['btn_admin'] = 'ΔιαχείÏιση';
+$lang['btn_update'] = 'ΕνημέÏωση';
+$lang['btn_delete'] = 'Σβήσιμο';
+$lang['btn_back'] = 'Πίσω';
+$lang['btn_backlink'] = 'ΣÏνδεσμοι Ï€Ïος την Ï„Ïέχουσα σελίδα';
+$lang['btn_backtomedia'] = 'ΕπιστÏοφή στην επιλογή αÏχείων';
+$lang['btn_subscribe'] = 'ΕγγÏαφή σε λήψη ενημεÏώσεων σελίδας';
+$lang['btn_unsubscribe'] = 'ΔιαγÏαφή από λήψη ενημεÏώσεων σελίδας';
+$lang['btn_subscribens'] = 'ΕγγÏαφή σε λήψη ενημεÏώσεων φακέλου';
+$lang['btn_unsubscribens'] = 'ΔιαγÏαφή από λήψη ενημεÏώσεων φακέλου';
+$lang['btn_profile'] = 'ΤÏοποποίηση Ï€Ïοφίλ';
+$lang['btn_reset'] = 'ΑκÏÏωση';
+$lang['btn_resendpwd'] = 'Αποστολή νέου κωδικοÏ';
+$lang['btn_draft'] = 'ΤÏοποποίηση αυτόματα αποθηκευμένης σελίδας';
+$lang['btn_recover'] = 'ΕπαναφοÏά αυτόματα αποθηκευμένης σελίδας';
+$lang['btn_draftdel'] = 'ΔιαγÏαφή αυτόματα αποθηκευμένης σελίδας';
+$lang['btn_revert'] = 'Αποκατάσταση';
+$lang['loggedinas'] = 'Συνδεδεμένος ως';
+$lang['user'] = 'Όνομα χÏήστη';
+$lang['pass'] = 'Κωδικός';
+$lang['newpass'] = 'Îέος κωδικός';
+$lang['oldpass'] = 'Επιβεβαίωση Ï„Ïέχοντος κωδικοÏ';
+$lang['passchk'] = 'ακόμη μια φοÏά';
+$lang['remember'] = 'Απομνημόνευση στοιχείων λογαÏιασμοÏ';
+$lang['fullname'] = 'Ονοματεπώνυμο';
+$lang['email'] = 'E-Mail';
+$lang['register'] = 'ΕγγÏαφή';
+$lang['profile'] = 'ΠÏοφίλ χÏήστη';
+$lang['badlogin'] = 'Συγνώμη, το όνομα χÏήστη ή ο κωδικός ήταν λανθασμένο.';
+$lang['minoredit'] = 'Ασήμαντες αλλαγές';
+$lang['draftdate'] = 'Αυτόματη αποθήκευση Ï€ÏόχειÏης σελίδας στις';
+$lang['nosecedit'] = 'Η σελίδα Ï„Ïοποποιήθηκε στο Î¼ÎµÏ„Î±Î¾Ï ÎºÎ±Î¹ τα στοιχεία της ενότητας δεν ήταν συγχÏονισμένα, οπότε φοÏτώθηκε η πλήÏης σελίδα. ';
+$lang['regmissing'] = 'ΠÏέπει να συμπληÏώσετε όλα τα πεδία.';
+$lang['reguexists'] = 'Αυτός ο λογαÏιασμός υπάÏχει ήδη.';
+$lang['regsuccess'] = 'Ο λογαÏιασμός δημιουÏγήθηκε και ο κωδικός εστάλει με e-mail.';
+$lang['regsuccess2'] = 'Ο λογαÏιασμός δημιουÏγήθηκε.';
+$lang['regmailfail'] = 'Φαίνεται να υπάÏχει Ï€Ïόβλημα με την αποστολή του ÎºÏ‰Î´Î¹ÎºÎ¿Ï Î¼Î­ÏƒÏ‰ e-mail. ΠαÏακαλοÏμε επικοινωνήστε μαζί μας!';
+$lang['regbadmail'] = 'Η διεÏθυνση e-mail δεν δείχνει έγκυÏη - εάν πιστεÏετε ότι αυτό είναι λάθος, επικοινωνήστε μαζί μας';
+$lang['regbadpass'] = 'Οι δÏο κωδικοί δεν είναι ίδιοι, Ï€Ïοσπαθήστε ξανά.';
+$lang['regpwmail'] = 'Ο κωδικός σας';
+$lang['reghere'] = 'Δεν έχετε λογαÏιασμό ακόμη? ΔημιουÏγήστε έναν';
+$lang['profna'] = 'Αυτό το wiki δεν υποστηÏίζει την Ï„Ïοποποίηση Ï€Ïοφίλ.';
+$lang['profnochange'] = 'Καμία αλλαγή.';
+$lang['profnoempty'] = 'Δεν επιτÏέπεται κενό όνομα χÏήστη η κενή διεÏθυνση email.';
+$lang['profchanged'] = 'Το Ï€Ïοφίλ χÏήστη Ï„Ïοποποιήθηκε επιτυχώς.';
+$lang['pwdforget'] = 'Ξεχάσατε το κωδικό σας? Αποκτήστε νέο.';
+$lang['resendna'] = 'Αυτό το wiki δεν υποστηÏίζει την εκ\' νέου αποστολή κωδικών.';
+$lang['resendpwd'] = 'Αποστολή νέων κωδικών για τον χÏήστη';
+$lang['resendpwdmissing'] = 'ΠÏέπει να συμπληÏώσετε όλα τα πεδία.';
+$lang['resendpwdnouser'] = 'Αυτός ο χÏήστης δεν υπάÏχει στα αÏχεία μας.';
+$lang['resendpwdbadauth'] = 'Αυτός ο κωδικός ενεÏγοποίησης δεν είναι έγκυÏος.';
+$lang['resendpwdconfirm'] = 'Ο σÏνδεσμος Ï€Ïος την σελίδα ενεÏγοποίησης εστάλει με e-mail.';
+$lang['resendpwdsuccess'] = 'Ο νέος σας κωδικός εστάλη με e-mail.';
+$lang['license'] = 'Εκτός εάν αναφέÏεται διαφοÏετικά, το υλικό Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… wiki διατίθεται κάτω από την ακόλουθη άδεια:';
+$lang['licenseok'] = 'Σημείωση: ΤÏοποποιώντας αυτή την σελίδα αποδέχεστε την διάθεση του Ï…Î»Î¹ÎºÎ¿Ï ÏƒÎ±Ï‚ σÏμφωνα με την ακόλουθη άδεια:';
+$lang['searchmedia'] = 'Αναζήτηση αÏχείου:';
+$lang['searchmedia_in'] = 'Αναζήτηση σε %s';
+$lang['txt_upload'] = 'Επιλέξτε αÏχείο για φόÏτωση';
+$lang['txt_filename'] = 'Επιλέξτε νέο όνομα αÏχείου (Ï€ÏοαιÏετικό)';
+$lang['txt_overwrt'] = 'Αντικατάσταση υπάÏχοντος αÏχείου';
+$lang['lockedby'] = 'ΠÏοσωÏινά κλειδωμένο από';
+$lang['lockexpire'] = 'Το κλείδωμα λήγει στις';
+$lang['willexpire'] = 'Το κλείδωμά σας για την επεξεÏγασία αυτής της σελίδας θα λήξει σε ένα λεπτό.\n Για να το ανανεώσετε χÏησιμοποιήστε την επιλογή ΠÏοεπισκόπηση.';
+$lang['notsavedyet'] = 'Οι μη αποθηκευμένες αλλαγές θα χαθοÏν.\nΘέλετε να συνεχίσετε?';
+$lang['rssfailed'] = 'Εμφανίστηκε κάποιο σφάλμα κατά την ανάγνωση Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… feed: ';
+$lang['nothingfound'] = 'Δεν βÏέθηκαν σχετικά αποτελέσματα.';
+$lang['mediaselect'] = 'Επιλογή ΑÏχείων';
+$lang['fileupload'] = 'ΦόÏτωση αÏχείου';
+$lang['uploadsucc'] = 'Επιτυχής φόÏτωση';
+$lang['uploadfail'] = 'Η μεταφόÏτωση απέτυχε. Πιθανόν αυτό να οφείλεται στις Ïυθμίσεις Ï€Ïόσβασης του αÏχείου.';
+$lang['uploadwrong'] = 'Η μεταφόÏτωση δεν έγινε δεκτή. Δεν επιτÏέπονται αÏχεία Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… Ï„Ïπου!';
+$lang['uploadexist'] = 'Το αÏχείο ήδη υπάÏχει. Δεν έγινε καμία αλλαγή.';
+$lang['uploadbadcontent'] = 'Το πεÏιεχόμενο του αÏχείου δεν ταιÏιάζει με την επέκτασή του.';
+$lang['uploadspam'] = 'Η μεταφόÏτωση ακυÏώθηκε από το φίλτÏο spam.';
+$lang['uploadxss'] = 'Η μεταφόÏτωση ακυÏώθηκε λόγω Ï€Î¹Î¸Î±Î½Î¿Ï ÎµÏ€Î¹ÎºÎ¯Î½Î´Ï…Î½Î¿Ï… πεÏιεχομένου.';
+$lang['uploadsize'] = 'Το αÏχείο ήταν Ï€Î¿Î»Ï Î¼ÎµÎ³Î¬Î»Î¿. (μέγιστο %s)';
+$lang['deletesucc'] = 'Το αÏχείο "%s" διαγÏάφηκε.';
+$lang['deletefail'] = 'Το αÏχείο "%s" δεν διαγÏάφηκε. Πιθανόν αυτό να οφείλεται στις Ïυθμίσεις Ï€Ïόσβασης του αÏχείου.';
+$lang['mediainuse'] = 'Το αÏχείο "%s" δεν διαγÏάφηκε - είναι ακόμα σε χÏήση.';
+$lang['namespaces'] = 'Φάκελοι';
+$lang['mediafiles'] = 'Διαθέσιμα αÏχεία σε';
+$lang['js']['searchmedia'] = 'Αναζήτηση για αÏχεία';
+$lang['js']['keepopen'] = 'Το παÏάθυÏο να μην κλείνει';
+$lang['js']['hidedetails'] = 'ΑπόκÏυψη λεπτομεÏειών';
+$lang['js']['nosmblinks'] = 'Οι σÏνδεσμοι Ï€Ïος Windows shares δουλεÏουν μόνο στον Microsoft Internet Explorer.
+ΜποÏείτε πάντα να κάνετε αντιγÏαφή και επικόλληση του συνδέσμου.';
+$lang['js']['linkwiz'] = 'Αυτόματος Οδηγός Συνδέσμων';
+$lang['js']['linkto'] = 'ΣÏνδεση σε:';
+$lang['js']['del_confirm'] = 'Îα διαγÏαφεί?';
+$lang['js']['mu_btn'] = 'ΤαυτόχÏονη φόÏτωση πολλαπλών φακέλων';
+$lang['mediausage'] = 'ΧÏησιμοποιήστε την ακόλουθη σÏνταξη για να παÏαθέσετε αυτό το αÏχείο:';
+$lang['mediaview'] = 'Κανονική Ï€Ïοβολή αÏχείου';
+$lang['mediaroot'] = 'root';
+$lang['mediaupload'] = 'ΦοÏτώστε ένα αÏχείο στον Ï„Ïέχοντα φάκελο. Για δημιουÏγία υπο-φακέλων, Ï€Ïοσθέστε τους Ï€Ïιν από το όνομα του αÏχείου, στο πεδίο "Αποθήκευση ως", χÏησιμοποιώντας άνω-κάτω τελείες ως διαχωÏιστικά.';
+$lang['mediaextchange'] = 'Η επέκταση του αÏχείου Ï„Ïοποποιήθηκε από .%s σε .%s!';
+$lang['reference'] = 'ΑναφοÏές Ï€Ïος';
+$lang['ref_inuse'] = 'Το αÏχείο δεν μποÏεί να διαγÏαφεί, επειδή είναι ακόμη σε χÏήση από τις ακόλουθες σελίδες:';
+$lang['ref_hidden'] = 'ΜεÏικές αναφοÏές βÏίσκονται σε σελίδες που δεν έχετε δικαίωμα να διαβάσετε';
+$lang['hits'] = 'ΑναφοÏές';
+$lang['quickhits'] = 'Σχετικές σελίδες';
+$lang['toc'] = 'Πίνακας ΠεÏιεχομένων';
+$lang['current'] = 'Ï„Ïέχουσα';
+$lang['yours'] = 'Η έκδοσή σας';
+$lang['diff'] = 'Ï€Ïοβολή διαφοÏών με την Ï„Ïέχουσα έκδοση';
+$lang['diff2'] = 'ΠÏοβολή διαφοÏών Î¼ÎµÏ„Î±Î¾Ï Ï„Ï‰Î½ επιλεγμένων εκδόσεων';
+$lang['line'] = 'ΓÏαμμή';
+$lang['breadcrumb'] = 'ΙστοÏικό';
+$lang['youarehere'] = 'Είστε εδώ';
+$lang['lastmod'] = 'Τελευταία Ï„Ïοποποίηση';
+$lang['by'] = 'από';
+$lang['deleted'] = 'διαγÏάφηκε';
+$lang['created'] = 'δημιουÏγήθηκε';
+$lang['restored'] = 'παλαιότεÏη έκδοση επαναφέÏθηκε';
+$lang['external_edit'] = 'εξωτεÏική Ï„Ïοποποίηση';
+$lang['summary'] = 'ΕπεξεÏγασία σÏνοψης';
+$lang['noflash'] = 'Το <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> απαιτείται για την Ï€Ïοβολή Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… στοιχείου.';
+$lang['download'] = 'Λήψη Κώδικα';
+$lang['mail_newpage'] = 'σελίδα Ï€Ïοστέθηκε:';
+$lang['mail_changed'] = 'σελίδα Ï„Ïοποποιήθηκε:';
+$lang['mail_new_user'] = 'νέος χÏήστης:';
+$lang['mail_upload'] = 'αÏχείο φοÏτώθηκε:';
+$lang['qb_bold'] = 'Έντονο Κείμενο';
+$lang['qb_italic'] = 'Πλάγιο Κείμενο';
+$lang['qb_underl'] = 'ΥπογÏαμμισμένο Κείμενο';
+$lang['qb_code'] = 'Κείμενο κώδικα';
+$lang['qb_strike'] = 'ΔιαγÏαμμισμένο Κείμενο';
+$lang['qb_h1'] = 'Κεφαλίδα 1ου Επιπέδου';
+$lang['qb_h2'] = 'Κεφαλίδα 2ου Επιπέδου';
+$lang['qb_h3'] = 'Κεφαλίδα 3ου Επιπέδου';
+$lang['qb_h4'] = 'Κεφαλίδα 4ου Επιπέδου';
+$lang['qb_h5'] = 'Κεφαλίδα 5ου Επιπέδου';
+$lang['qb_h'] = 'Κεφαλίδα';
+$lang['qb_hs'] = 'Επιλογή Κεφαλίδας';
+$lang['qb_link'] = 'ΕσωτεÏικός ΣÏνδεσμος';
+$lang['qb_extlink'] = 'ΕξωτεÏικός ΣÏνδεσμος';
+$lang['qb_hr'] = 'ΔιαχωÏιστική ΓÏαμμή';
+$lang['qb_ol'] = 'ΑÏιθμημένη Λίστα';
+$lang['qb_ul'] = 'Λίστα';
+$lang['qb_media'] = 'ΠÏοσθήκη ΑÏχείων';
+$lang['qb_sig'] = 'ΠÏοσθήκη ΥπογÏαφής';
+$lang['qb_smileys'] = 'Smileys';
+$lang['qb_chars'] = 'Ειδικοί ΧαÏακτήÏες';
+$lang['admin_register'] = 'ΠÏοσθήκη νέου χÏήστη';
+$lang['metaedit'] = 'ΤÏοποποίηση metadata';
+$lang['metasaveerr'] = 'Η αποθήκευση των metadata απέτυχε';
+$lang['metasaveok'] = 'Επιτυχής αποθήκευση metadata';
+$lang['img_backto'] = 'ΕπιστÏοφή σε';
+$lang['img_title'] = 'Τίτλος';
+$lang['img_caption'] = 'Λεζάντα';
+$lang['img_date'] = 'ΗμεÏομηνία';
+$lang['img_fname'] = 'Όνομα αÏχείου';
+$lang['img_fsize'] = 'Μέγεθος';
+$lang['img_artist'] = 'Καλλιτέχνης';
+$lang['img_copyr'] = 'Copyright';
+$lang['img_format'] = 'Format';
+$lang['img_camera'] = 'Camera';
+$lang['img_keywords'] = 'Λέξεις-κλειδιά';
+$lang['subscribe_success'] = 'ΠÏοσθήκη %s στην λίστα συνδÏομητών %s';
+$lang['subscribe_error'] = 'Αποτυχία Ï€Ïοσθήκης %s στην λίστα συνδÏομητών %s';
+$lang['subscribe_noaddress'] = 'Δεν έχετε δηλώσει e-mail διεÏθυνση - δεν μποÏείτε να γÏαφτείτε στην λίστα συνδÏομητών.';
+$lang['unsubscribe_success'] = 'ΔιαγÏαφή %s από την λίστα συνδÏομητών %s';
+$lang['unsubscribe_error'] = 'Αποτυχία διαγÏαφής %s από την λίστα συνδÏομητών %s';
+$lang['authmodfailed'] = 'Κακή ÏÏθμιση λίστας χÏηστών. ΠαÏακαλοÏμε ενημεÏώστε τον διαχειÏιστή του wiki.';
+$lang['authtempfail'] = 'Η είσοδος χÏηστών δεν λειτουÏγεί αυτή την στιγμή. Εάν αυτό διαÏκεί για Ï€Î¿Î»Ï Ï‡Ïόνο, παÏακαλοÏμε ενημεÏώστε τον διαχειÏιστή του wiki.';
+$lang['i_chooselang'] = 'Επιλογή γλώσσας';
+$lang['i_installer'] = 'Οδηγός εγκατάστασης DokuWiki';
+$lang['i_wikiname'] = 'Ονομασία wiki';
+$lang['i_enableacl'] = 'ΕνεÏγοποίηση Λίστας Δικαιωμάτων ΠÏόσβασης - ACL (συνιστάται)';
+$lang['i_superuser'] = 'ΔιαχειÏιστής';
+$lang['i_problems'] = 'Ο οδηγός εγκατάστασης συνάντησε τα Ï€Ïοβλήματα που αναφέÏονται παÏακάτω. Η εγκατάσταση δεν θα ολοκληÏωθεί επιτυχώς μέχÏι να επιλυθοÏν αυτά τα Ï€Ïοβλήματα.';
+$lang['i_modified'] = 'Για λόγους ασφαλείας, ο οδηγός εγκατάστασης λειτουÏγεί μόνο με νέες και μη Ï„Ïοποποιημένες εγκαταστάσεις Dokuwiki.
+ΠÏέπει είτε να κάνετε νέα εγκατάσταση, χÏησιμοποιώντας το αÏχικό πακέτο εγκατάστασης, ή να συμβουλευτείτε τις <a href="http://dokuwiki.org/install">οδηγίες εγκατάστασης της εφαÏμογής</a>.';
+$lang['i_funcna'] = 'Η λειτουÏγία <code>%s</code> της PHP δεν είναι διαθέσιμη. Πιθανόν να είναι απενεÏγοποιημένη στις Ïυθμίσεις έναÏξης της PHP';
+$lang['i_phpver'] = 'Η έκδοση <code>%s</code> της PHP που έχετε είναι παλαιότεÏη της απαιτοÏμενης <code>%s</code>. ΠÏέπει να αναβαθμίσετε την PHP.';
+$lang['i_permfail'] = 'Ο φάκελος <code>%s</code> δεν είναι εγγÏάψιμος από την εφαÏμογή DokuWiki. ΠÏέπει να διοÏθώσετε τα δικαιώματα Ï€Ïόσβασης Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… φακέλου!';
+$lang['i_confexists'] = '<code>%s</code> υπάÏχει ήδη';
+$lang['i_writeerr'] = 'Δεν είναι δυνατή η δημιουÏγία του <code>%s</code>. ΠÏέπει να διοÏθώσετε τα δικαιώματα Ï€Ïόσβασης Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… φακέλου/αÏχείου και να δημιουÏγήσετε το αÏχείο χειÏοκίνητα!';
+$lang['i_badhash'] = 'Μη αναγνωÏίσιμο ή Ï„Ïοποποιημένο αÏχείο dokuwiki.php (hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - λάθος ή ανÏπαÏκτη τιμή';
+$lang['i_success'] = 'Η εγκατάσταση ολοκληÏώθηκε επιτυχώς. ΜποÏείτε πλέον να διαγÏάψετε το αÏχείο install.php. Συνεχίστε στο <a href="doku.php">νέο σας DokuWiki</a>.';
+$lang['i_failure'] = 'Εμφανίστηκαν κάποια Ï€Ïοβλήματα στη διαδικασία ανανέωσης των αÏχείων Ïυθμίσεων. Πιθανόν να χÏειάζεται να τα Ï„Ïοποποιήσετε χειÏοκίνητα ώστε να μποÏείτε να χÏησιμοποιήσετε το <a href="doku.php">νέο σας DokuWiki</a>.';
+$lang['i_policy'] = 'ΑÏχική πολιτική Λίστας Δικαιωμάτων ΠÏόσβασης - ACL';
+$lang['i_pol0'] = 'Ανοιχτό Wiki (όλοι μποÏοÏν να διαβάσουν ή να δημιουÏγήσουν/Ï„Ïοποποιήσουν σελίδες και να μεταφοÏτώσουν αÏχεία)';
+$lang['i_pol1'] = 'Δημόσιο Wiki (όλοι μποÏοÏν να διαβάσουν σελίδες αλλά μόνο οι εγγεγÏαμμένοι χÏήστες μποÏοÏν να δημιουÏγήσουν/Ï„Ïοποποιήσουν σελίδες και να μεταφοÏτώσουν αÏχεία)';
+$lang['i_pol2'] = 'Κλειστό Wiki (μόνο οι εγγεγÏαμμένοι χÏήστες μποÏοÏν να διαβάσουν ή να δημιουÏγήσουν/Ï„Ïοποποιήσουν σελίδες και να μεταφοÏτώσουν αÏχεία)';
+$lang['i_retry'] = 'Îέα Ï€Ïοσπάθεια';
+$lang['mu_intro'] = 'Εδώ μποÏείτε να φοÏτώσετε ταυτόχÏονα πολλαπλά αÏχεία. Πατήστε στο κουμπί Ï€Ïοεπισκόπησης για να τα Ï€Ïοσθέσετε στη λίστα. Πατήστε στο κουμπί μεταφόÏτωσης όταν έχετε τελειώσει.';
+$lang['mu_gridname'] = 'Όνομα αÏχείου';
+$lang['mu_gridsize'] = 'Μέγεθος';
+$lang['mu_gridstat'] = 'Κατάσταση';
+$lang['mu_namespace'] = 'Φάκελος';
+$lang['mu_browse'] = 'Επισκόπηση';
+$lang['mu_toobig'] = 'υπεÏβολικά μεγάλο';
+$lang['mu_ready'] = 'έτοιμο για φόÏτωση';
+$lang['mu_done'] = 'ολοκληÏώθηκε';
+$lang['mu_fail'] = 'απέτυχε';
+$lang['mu_authfail'] = 'η συνεδÏία έληξε';
+$lang['mu_progress'] = '@PCT@% φοÏτώθηκε';
+$lang['mu_filetypes'] = 'ΕπιτÏεπτοί Ï„Ïποι αÏχείων';
+$lang['mu_info'] = 'τα αÏχεία ανέβηκαν.';
+$lang['mu_lasterr'] = 'Τελευταίο σφάλμα:';
+$lang['recent_global'] = 'Βλέπετε τις αλλαγές εντός του φακέλου <b>%s</b>. ΜποÏείτε επίσης να <a href="%s">δείτε τις Ï€Ïόσφατες αλλαγές σε όλο το wiki</a>.';
+$lang['years'] = 'Ï€Ïιν από %d χÏόνια';
+$lang['months'] = 'Ï€Ïιν από %d μήνες';
+$lang['weeks'] = 'Ï€Ïιν από %d εβδομάδες';
+$lang['days'] = 'Ï€Ïιν από %d ημέÏες';
+$lang['hours'] = 'Ï€Ïιν από %d ÏŽÏες';
+$lang['minutes'] = 'Ï€Ïιν από %d λεπτά';
+$lang['seconds'] = 'Ï€Ïιν από %d δευτεÏόλεπτα';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/locked.txt
new file mode 100644
index 000000000..d2f542c19
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/locked.txt
@@ -0,0 +1,4 @@
+====== Κλειδωμένη σελίδα ======
+
+Αυτή η σελίδα είναι Ï€Ïος το παÏόν δεσμευμένη για Ï„Ïοποποίηση από άλλον χÏήστη. Θα Ï€Ïέπει να πεÏιμένετε μέχÏι ο συγκεκÏιμένος χÏήστης να τελειώσει την Ï„Ïοποποίηση ή να εκπνεÏσει το χÏονικό ÏŒÏιο για το σχετικό κλείδωμα.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/login.txt
new file mode 100644
index 000000000..3839b7279
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/login.txt
@@ -0,0 +1,3 @@
+====== Είσοδος χÏήστη ======
+
+Αυτή την στιγμή δεν έχετε συνδεθεί ως χÏήστης! Για να συνδεθείτε, εισάγετε τα στοιχεία σας στην παÏακάτω φόÏμα. ΠÏέπει να έχετε ενεÏγοποιήσει τα cookies στον φυλλομετÏητή σας.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/mailtext.txt
new file mode 100644
index 000000000..a5059ca4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/mailtext.txt
@@ -0,0 +1,17 @@
+Μία σελίδα Ï€Ïοστέθηκε ή Ï„Ïοποποιήθηκε στο DokuWiki σας.
+Αυτά είναι τα αντίστοιχα στοιχεία:
+
+ΗμεÏομηνία : @DATE@
+ΦυλλομετÏητής : @BROWSER@
+IP-ΔιεÏθυνση : @IPADDRESS@
+Όνομα υπολογιστή: @HOSTNAME@
+Παλιά έκδοση : @OLDPAGE@
+Îέα έκδοση : @NEWPAGE@
+ΣÏνοψη : @SUMMARY@
+ΧÏήστης : @USER@
+
+@DIFF@
+
+--
+Αυτό το e-mail δημιουÏγήθηκε αυτόματα από την εφαÏμογή DokuWiki στην διεÏθυνση
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/newpage.txt
new file mode 100644
index 000000000..e8d65d6e5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/newpage.txt
@@ -0,0 +1,3 @@
+====== Αυτή η σελίδα δεν υπάÏχει ακόμη ======
+
+Η σελίδα που ζητάτε δεν υπάÏχει ακόμη. Εάν όμως έχετε επαÏκή δικαιώματα, μποÏείτε να την δημιουÏγήσετε επιλέγοντας ''ΔημιουÏγία σελίδας''.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/norev.txt
new file mode 100644
index 000000000..9ce347948
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/norev.txt
@@ -0,0 +1,4 @@
+====== Δεν υπάÏχει τέτοια έκδοση ======
+
+Η έκδοση που αναζητήσατε δεν υπάÏχει. Επιλέξτε ''ΠαλαιότεÏες εκδόσεις σελίδας'' για να δείτε την λίστα με τις παλαιότεÏες εκδόσεις της Ï„Ïέχουσας σελίδας.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/preview.txt
new file mode 100644
index 000000000..f6709a441
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/preview.txt
@@ -0,0 +1,4 @@
+====== ΠÏοεπισκόπηση ======
+
+Αυτή είναι μια Ï€Ïοεπισκόπηση του πως θα δείχνει η σελίδα. Θυμηθείτε: Οι αλλαγές σας **δεν έχουν αποθηκευθεί** ακόμη!
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/pwconfirm.txt
new file mode 100644
index 000000000..03f408819
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/pwconfirm.txt
@@ -0,0 +1,14 @@
+Γεια σας @FULLNAME@!
+
+Κάποιος ζήτησε τη δημιουÏγία νέου ÎºÏ‰Î´Î¹ÎºÎ¿Ï Î³Î¹Î± τον λογαÏιασμό @TITLE@
+που διατηÏείτε στο @DOKUWIKIURL@
+
+Εάν δεν ζητήσατε εσείς την δημιουÏγία νέου ÎºÏ‰Î´Î¹ÎºÎ¿Ï Î±Ï€Î»Î¬ αγνοήστε αυτό το e-mail.
+
+Εάν όντως εσείς ζητήσατε την δημιουÏγία νέου κωδικοÏ, ακολουθήστε τον παÏακάτω σÏνδεσμο για να το επιβεβαιώσετε.
+
+@CONFIRM@
+
+--
+Αυτό το e-mail δημιουÏγήθηκε αυτόματα από την εφαÏμογή DokuWiki στην διεÏθυνση
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/read.txt
new file mode 100644
index 000000000..2d43c28fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/read.txt
@@ -0,0 +1 @@
+ΜποÏείτε μόνο να διαβάσετε αυτή την σελίδα και όχι να την Ï„Ïοποποιήσετε. Εάν πιστεÏετε ότι αυτό δεν είναι σωστό, απευθυνθείτε στον διαχειÏιστή της εφαÏμογής.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/recent.txt
new file mode 100644
index 000000000..cc8051581
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/recent.txt
@@ -0,0 +1,3 @@
+====== ΠÏόσφατες αλλαγές σελίδων ======
+
+Οι παÏακάτω σελίδες Ï„Ïοποποιήθηκαν Ï€Ïόσφατα:
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/register.txt
new file mode 100644
index 000000000..15d64cba3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/register.txt
@@ -0,0 +1,3 @@
+====== ΕγγÏαφή νέου χÏήστη ======
+
+ΣυμπληÏώστε όλα τα παÏακάτω πεδία για να δημιουÏγήσετε ένα νέο λογαÏιασμό σε αυτό το wiki. ΠÏέπει να δώσετε μια **υπαÏκτή e-mail διεÏθυνση** - ο κωδικός σας θα σας αποσταλεί σε αυτήν. Το όνομα χÏήστη θα Ï€Ïέπει να πληÏεί τις ίδιες απαιτήσεις ονόματος που ισχÏουν και για τους [[doku>pagename|φακέλους]].
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/registermail.txt
new file mode 100644
index 000000000..5d516ee31
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/registermail.txt
@@ -0,0 +1,14 @@
+Ένας νέος χÏήστης εγγÏάφηκε. Αυτές είναι οι λεπτομέÏειες:
+
+ΧÏήστης : @NEWUSER@
+Όνομα : @NEWNAME@
+e-mail : @NEWEMAIL@
+
+ΗμεÏομηνία : @DATE@
+ΦυλλομετÏητής : @BROWSER@
+IP-ΔιεÏθυνση : @IPADDRESS@
+Όνομα υπολογιστή: @HOSTNAME@
+
+--
+Αυτό το e-mail δημιουÏγήθηκε αυτόματα από την εφαÏμογή DokuWiki στην διεÏθυνση
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/resendpwd.txt
new file mode 100644
index 000000000..2b91ed017
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/resendpwd.txt
@@ -0,0 +1,4 @@
+====== Αποστολή νέου ÎºÏ‰Î´Î¹ÎºÎ¿Ï ======
+
+ΣυμπληÏώστε όλα τα παÏακάτω πεδία για να λάβετε ένα νέο κωδικό για τον λογαÏιασμό σας σε αυτό το wiki. Ο νέος κωδικός σας θα σταλεί στην e-mail διεÏθυνση που έχετε ήδη δηλώσει. Το όνομα Ï€Ïέπει να είναι αυτό που ισχÏει για τον λογαÏιασμό σας σε αυτό το wiki.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/revisions.txt
new file mode 100644
index 000000000..7689c3b2b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/revisions.txt
@@ -0,0 +1,3 @@
+====== ΠαλαιότεÏες εκδόσεις σελίδας ======
+
+Οι παÏακάτω είναι παλαιότεÏες εκδόσεις της Ï„Ïέχουσας σελίδας. Εάν θέλετε να αντικαταστήσετε την Ï„Ïέχουσα σελίδα με κάποια από τις παλαιότεÏες εκδόσεις της, επιλέξτε την σχετική έκδοση, επιλέξτε ''ΤÏοποποίηση σελίδας'', κάνετε τυχόν αλλαγές και αποθηκεÏστε την.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/searchpage.txt
new file mode 100644
index 000000000..87f396292
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/searchpage.txt
@@ -0,0 +1,5 @@
+====== Αναζήτηση ======
+
+Τα αποτελέσματα της αναζήτησής σας ακολουθοÏν.
+
+===== Αποτελέσματα ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/showrev.txt
new file mode 100644
index 000000000..212245420
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/showrev.txt
@@ -0,0 +1,2 @@
+**Αυτή είναι μια παλαιότεÏη έκδοση της σελίδας!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/stopwords.txt
new file mode 100644
index 000000000..bc6eb48ae
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/stopwords.txt
@@ -0,0 +1,29 @@
+# This is a list of words the indexer ignores, one word per line
+# When you edit this file be sure to use UNIX line endings (single newline)
+# No need to include words shorter than 3 chars - these are ignored anyway
+# This list is based upon the ones found at http://www.ranks.nl/stopwords/
+about
+are
+and
+you
+your
+them
+their
+com
+for
+from
+into
+how
+that
+the
+this
+was
+what
+when
+where
+who
+will
+with
+und
+the
+www
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/subscribermail.txt
new file mode 100644
index 000000000..2963ef348
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/subscribermail.txt
@@ -0,0 +1,24 @@
+Γειa σας!
+
+Η σελίδα @PAGE@ στο wiki @TITLE@ Ï„Ïοποποιήθηκε.
+Αυτές είναι οι διαφοÏές σε σχέση με την Ï€ÏοηγοÏμενη έκδοση:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+ΗμεÏομηνία: @DATE@
+ΧÏήστης: @USER@
+ΠεÏίληψη Ï„Ïοποποίησης: @SUMMARY@
+Παλιά έκδοση: @OLDPAGE@
+Îέα έκδοση: @NEWPAGE@
+
+Για να πάψετε να λαμβάνετε τέτοια ενημεÏωτικά e-mails,
+επισκεφτείτε το wiki στο
+@DOKUWIKIURL@ δείτε την σελίδα
+@NEWPAGE@
+και επιλέξτε 'ΔιαγÏαφή από λήψη ενημεÏώσεων'.
+
+--
+Αυτό το e-mail δημιουÏγήθηκε αυτόματα από την εφαÏμογή DokuWiki στην διεÏθυνση
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/updateprofile.txt
new file mode 100644
index 000000000..ccb9596b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/updateprofile.txt
@@ -0,0 +1,3 @@
+====== ΤÏοποποίηση Ï€Ïοφίλ ======
+
+ΤÏοποποιήστε **μόνο** τα πεδία που θέλετε να αλλάξετε. Δεν μποÏείτε να αλλάξετε το πεδίο ''Όνομα''.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/uploadmail.txt
new file mode 100644
index 000000000..52d2f1f53
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/uploadmail.txt
@@ -0,0 +1,15 @@
+Ένα αÏχείο φοÏτώθηκε στο DokuWiki σας.
+Αυτά είναι τα αντίστοιχα στοιχεία:
+
+ΑÏχείο : @MEDIA@
+ΗμεÏομηνία : @DATE@
+ΦυλλομετÏητής : @BROWSER@
+IP-ΔιεÏθυνση : @IPADDRESS@
+Όνομα υπολογιστή: @HOSTNAME@
+Μέγεθος : @SIZE@
+MIME Type : @MIME@
+ΧÏήστης : @USER@
+
+--
+Αυτό το e-mail δημιουÏγήθηκε αυτόματα από την εφαÏμογή DokuWiki στην διεÏθυνση
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/wordblock.txt
new file mode 100644
index 000000000..b54e8ef77
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/wordblock.txt
@@ -0,0 +1,4 @@
+====== Εντοπίστηκε SPAM ======
+
+Οι αλλαγές σας **δεν** αποθηκεÏτηκαν επειδή βÏέθηκε τουλάχιστον μία μη αποδεκτή λέξη. Εάν Ï€Ïοσπαθήσατε να Ï€Ïοσθέσετε spam σε αυτό το wiki -- κακώς! Εάν πιστεÏετε ότι αυτό δεν είναι σωστό, απευθυνθείτε στον διαχειÏιστή της εφαÏμογής.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/admin.txt
new file mode 100644
index 000000000..cfd21b217
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/admin.txt
@@ -0,0 +1,4 @@
+====== Administration ======
+
+Below you can find a list of administrative tasks available in DokuWiki.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/adminplugins.txt
new file mode 100644
index 000000000..3ec46cf4e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/adminplugins.txt
@@ -0,0 +1,2 @@
+===== Additional Plugins =====
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/backlinks.txt
new file mode 100644
index 000000000..5b40b84ea
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/backlinks.txt
@@ -0,0 +1,4 @@
+====== Backlinks ======
+
+This is a list of pages that seem to link back to the current page.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/conflict.txt
new file mode 100644
index 000000000..624f17b21
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/conflict.txt
@@ -0,0 +1,6 @@
+====== A newer version exists ======
+
+A newer version of the document you edited exists. This happens when another user changed the document while you were editing it.
+
+Examine the differences shown below thoroughly, then decide which version to keep. If you choose ''save'', your version will be saved. Hit ''cancel'' to keep the current version.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/denied.txt
new file mode 100644
index 000000000..3ac72820c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/denied.txt
@@ -0,0 +1,4 @@
+====== Permission Denied ======
+
+Sorry, you don't have enough rights to continue. Perhaps you forgot to login?
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/diff.txt
new file mode 100644
index 000000000..934534d42
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/diff.txt
@@ -0,0 +1,4 @@
+====== Differences ======
+
+This shows you the differences between two versions of the page.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/draft.txt
new file mode 100644
index 000000000..e84d34a5b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/draft.txt
@@ -0,0 +1,6 @@
+====== Draft file found ======
+
+Your last edit session on this page was not completed correctly. DokuWiki automatically saved a draft during your work which you may now use to continue your editing. Below you can see the data that was saved from your last session.
+
+Please decide if you want to //recover// your lost edit session, //delete// the autosaved draft or //cancel// the editing process.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/edit.txt
new file mode 100644
index 000000000..48c9c296d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/edit.txt
@@ -0,0 +1,2 @@
+Edit the page and hit ''Save''. See [[wiki:syntax]] for Wiki syntax. Please edit the page only if you can **improve** it. If you want to test some things, learn to make your first steps on the [[playground:playground|playground]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/editrev.txt
new file mode 100644
index 000000000..638216b07
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/editrev.txt
@@ -0,0 +1,2 @@
+**You've loaded an old revision of the document!** If you save it, you will create a new version with this data.
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/index.txt
new file mode 100644
index 000000000..5adbfd898
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/index.txt
@@ -0,0 +1,4 @@
+====== Index ======
+
+This is an index over all available pages ordered by [[doku>namespaces|namespaces]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/install.html
new file mode 100644
index 000000000..0f94839a6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/install.html
@@ -0,0 +1,24 @@
+<p>This page assists in the first time installation and configuration of
+<a href="http://dokuwiki.org">Dokuwiki</a>. More info on this
+installer is available on it's own
+<a href="http://dokuwiki.org/installer">documentation page</a>.</p>
+
+<p>DokuWiki uses ordinary files for the storage of wiki pages and other
+information associated with those pages (e.g. images, search indexes, old
+revisions, etc). In order to operate successfully DokuWiki
+<strong>must</strong> have write access to the directories that hold those
+files. This installer is not capable of setting up directory permissions. That
+normally needs to be done directly on a command shell or if you are using hosting,
+through FTP or your hosting control panel (e.g. cPanel).</p>
+
+<p>This installer will setup your DokuWiki configuration for
+<acronym title="access control list">ACL</acronym>, which in turn allows administrator
+login and access to DokuWiki's admin menu for installing plugins, managing
+users, managing access to wiki pages and alteration of configuration settings.
+It isn't required for DokuWiki to operate, however it will make Dokuwiki easier
+to administer.</p>
+
+<p>Experienced users or users with special setup requirements should use these links
+for details concerning
+<a href="http://dokuwiki.org/install">installation instructions</a>
+and <a href="http://dokuwiki.org/config">configuration settings</a>.</p>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/lang.php
new file mode 100644
index 000000000..cf5173d05
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/lang.php
@@ -0,0 +1,280 @@
+<?php
+/**
+ * english language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Anika Henke <anika@selfthinker.org>
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '“';//&ldquo;
+$lang['doublequoteclosing'] = 'â€';//&rdquo;
+$lang['singlequoteopening'] = '‘';//&lsquo;
+$lang['singlequoteclosing'] = '’';//&rsquo;
+$lang['apostrophe'] = '’';//&rsquo;
+
+$lang['btn_edit'] = 'Edit this page';
+$lang['btn_source'] = 'Show pagesource';
+$lang['btn_show'] = 'Show page';
+$lang['btn_create'] = 'Create this page';
+$lang['btn_search'] = 'Search';
+$lang['btn_save'] = 'Save';
+$lang['btn_preview']= 'Preview';
+$lang['btn_top'] = 'Back to top';
+$lang['btn_newer'] = '<< more recent';
+$lang['btn_older'] = 'less recent >>';
+$lang['btn_revs'] = 'Old revisions';
+$lang['btn_recent'] = 'Recent changes';
+$lang['btn_upload'] = 'Upload';
+$lang['btn_cancel'] = 'Cancel';
+$lang['btn_index'] = 'Index';
+$lang['btn_secedit']= 'Edit';
+$lang['btn_login'] = 'Login';
+$lang['btn_logout'] = 'Logout';
+$lang['btn_admin'] = 'Admin';
+$lang['btn_update'] = 'Update';
+$lang['btn_delete'] = 'Delete';
+$lang['btn_back'] = 'Back';
+$lang['btn_backlink'] = "Backlinks";
+$lang['btn_backtomedia'] = 'Back to Mediafile Selection';
+$lang['btn_subscribe'] = 'Subscribe Page Changes';
+$lang['btn_unsubscribe'] = 'Unsubscribe Page Changes';
+$lang['btn_subscribens'] = 'Subscribe Namespace Changes';
+$lang['btn_unsubscribens'] = 'Unsubscribe Namespace Changes';
+$lang['btn_profile'] = 'Update Profile';
+$lang['btn_reset'] = 'Reset';
+$lang['btn_resendpwd'] = 'Send new password';
+$lang['btn_draft'] = 'Edit draft';
+$lang['btn_recover'] = 'Recover draft';
+$lang['btn_draftdel'] = 'Delete draft';
+$lang['btn_revert'] = 'Restore';
+
+$lang['loggedinas'] = 'Logged in as';
+$lang['user'] = 'Username';
+$lang['pass'] = 'Password';
+$lang['newpass'] = 'New password';
+$lang['oldpass'] = 'Confirm current password';
+$lang['passchk'] = 'once again';
+$lang['remember'] = 'Remember me';
+$lang['fullname'] = 'Real name';
+$lang['email'] = 'E-Mail';
+$lang['register'] = 'Register';
+$lang['profile'] = 'User Profile';
+$lang['badlogin'] = 'Sorry, username or password was wrong.';
+$lang['minoredit'] = 'Minor Changes';
+$lang['draftdate'] = 'Draft autosaved on'; // full dformat date will be added
+$lang['nosecedit'] = 'The page was changed in the meantime, section info was out of date loaded full page instead.';
+
+$lang['regmissing'] = 'Sorry, you must fill in all fields.';
+$lang['reguexists'] = 'Sorry, a user with this login already exists.';
+$lang['regsuccess'] = 'The user has been created and the password was sent by email.';
+$lang['regsuccess2']= 'The user has been created.';
+$lang['regmailfail']= 'Looks like there was an error on sending the password mail. Please contact the admin!';
+$lang['regbadmail'] = 'The given email address looks invalid - if you think this is an error, contact the admin';
+$lang['regbadpass'] = 'The two given passwords are not identical, please try again.';
+$lang['regpwmail'] = 'Your DokuWiki password';
+$lang['reghere'] = 'You don\'t have an account yet? Just get one';
+
+$lang['profna'] = 'This wiki does not support profile modification';
+$lang['profnochange'] = 'No changes, nothing to do.';
+$lang['profnoempty'] = 'An empty name or email address is not allowed.';
+$lang['profchanged'] = 'User profile successfully updated.';
+
+$lang['pwdforget'] = 'Forgotten your password? Get a new one';
+$lang['resendna'] = 'This wiki does not support password resending.';
+$lang['resendpwd'] = 'Send new password for';
+$lang['resendpwdmissing'] = 'Sorry, you must fill in all fields.';
+$lang['resendpwdnouser'] = 'Sorry, we can\'t find this user in our database.';
+$lang['resendpwdbadauth'] = 'Sorry, this auth code is not valid. Make sure you used the complete confirmation link.';
+$lang['resendpwdconfirm'] = 'A confirmation link has been sent by email.';
+$lang['resendpwdsuccess'] = 'Your new password has been sent by email.';
+
+$lang['license'] = 'Except where otherwise noted, content on this wiki is licensed under the following license:';
+$lang['licenseok'] = 'Note: By editing this page you agree to license your content under the following license:';
+
+$lang['searchmedia'] = 'Search file name:';
+$lang['searchmedia_in'] = 'Search in %s';
+$lang['txt_upload'] = 'Select file to upload';
+$lang['txt_filename'] = 'Upload as (optional)';
+$lang['txt_overwrt'] = 'Overwrite existing file';
+$lang['lockedby'] = 'Currently locked by';
+$lang['lockexpire'] = 'Lock expires at';
+$lang['willexpire'] = 'Your lock for editing this page is about to expire in a minute.\nTo avoid conflicts use the preview button to reset the locktimer.';
+
+$lang['notsavedyet'] = 'Unsaved changes will be lost.\nReally continue?';
+$lang['rssfailed'] = 'An error occurred while fetching this feed: ';
+$lang['nothingfound']= 'Nothing was found.';
+
+$lang['mediaselect'] = 'Media Files';
+$lang['fileupload'] = 'Media File Upload';
+$lang['uploadsucc'] = 'Upload successful';
+$lang['uploadfail'] = 'Upload failed. Maybe wrong permissions?';
+$lang['uploadwrong'] = 'Upload denied. This file extension is forbidden!';
+$lang['uploadexist'] = 'File already exists. Nothing done.';
+$lang['uploadbadcontent'] = 'The uploaded content did not match the %s file extension.';
+$lang['uploadspam'] = 'The upload was blocked by the spam blacklist.';
+$lang['uploadxss'] = 'The upload was blocked for possibly malicious content.';
+$lang['uploadsize'] = 'The uploaded file was too big. (max. %s)';
+$lang['deletesucc'] = 'The file "%s" has been deleted.';
+$lang['deletefail'] = '"%s" couldn\'t be deleted - check permissions.';
+$lang['mediainuse'] = 'The file "%s" hasn\'t been deleted - it is still in use.';
+$lang['namespaces'] = 'Namespaces';
+$lang['mediafiles'] = 'Available files in';
+
+$lang['js']['searchmedia'] = 'Search for files';
+$lang['js']['keepopen'] = 'Keep window open on selection';
+$lang['js']['hidedetails'] = 'Hide Details';
+$lang['mediausage'] = 'Use the following syntax to reference this file:';
+$lang['mediaview'] = 'View original file';
+$lang['mediaroot'] = 'root';
+$lang['mediaupload'] = 'Upload a file to the current namespace here. To create subnamespaces, prepend them to your "Upload as" filename separated by colons.';
+$lang['mediaextchange'] = 'Filextension changed from .%s to .%s!';
+
+$lang['reference'] = 'References for';
+$lang['ref_inuse'] = 'The file can\'t be deleted, because it\'s still used by the following pages:';
+$lang['ref_hidden'] = 'Some references are on pages you don\'t have permission to read';
+
+$lang['hits'] = 'Hits';
+$lang['quickhits'] = 'Matching pagenames';
+$lang['toc'] = 'Table of Contents';
+$lang['current'] = 'current';
+$lang['yours'] = 'Your Version';
+$lang['diff'] = 'Show differences to current revisions';
+$lang['diff2'] = 'Show differences between selected revisions';
+$lang['line'] = 'Line';
+$lang['breadcrumb'] = 'Trace';
+$lang['youarehere'] = 'You are here';
+$lang['lastmod'] = 'Last modified';
+$lang['by'] = 'by';
+$lang['deleted'] = 'removed';
+$lang['created'] = 'created';
+$lang['restored'] = 'old revision restored';
+$lang['external_edit'] = 'external edit';
+$lang['summary'] = 'Edit summary';
+$lang['noflash'] = 'The <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> is needed to display this content.';
+$lang['download'] = 'Download Snippet';
+
+$lang['mail_newpage'] = 'page added:';
+$lang['mail_changed'] = 'page changed:';
+$lang['mail_new_user'] = 'new user:';
+$lang['mail_upload'] = 'file uploaded:';
+
+$lang['js']['nosmblinks'] = "Linking to Windows shares only works in Microsoft Internet Explorer.\nYou still can copy and paste the link.";
+
+$lang['qb_bold'] = 'Bold Text';
+$lang['qb_italic'] = 'Italic Text';
+$lang['qb_underl'] = 'Underlined Text';
+$lang['qb_code'] = 'Code Text';
+$lang['qb_strike'] = 'Strike-through Text';
+$lang['qb_h1'] = 'Level 1 Headline';
+$lang['qb_h2'] = 'Level 2 Headline';
+$lang['qb_h3'] = 'Level 3 Headline';
+$lang['qb_h4'] = 'Level 4 Headline';
+$lang['qb_h5'] = 'Level 5 Headline';
+
+$lang['qb_h'] = 'Headline';
+$lang['qb_hs'] = 'Select Headline';
+$lang['qb_hplus'] = 'Higher Headline';
+$lang['qb_hminus'] = 'Lower Headline';
+$lang['qb_hequal'] = 'Same Level Headline';
+
+$lang['qb_link'] = 'Internal Link';
+$lang['qb_extlink'] = 'External Link';
+$lang['qb_hr'] = 'Horizontal Rule';
+$lang['qb_ol'] = 'Ordered List Item';
+$lang['qb_ul'] = 'Unordered List Item';
+$lang['qb_media'] = 'Add Images and other files';
+$lang['qb_sig'] = 'Insert Signature';
+$lang['qb_smileys'] = 'Smileys';
+$lang['qb_chars'] = 'Special Chars';
+
+$lang['upperns'] = 'jump to parent namespace';
+$lang['js']['linkwiz'] = 'Link Wizard';
+$lang['js']['linkto'] = 'Link to:';
+
+$lang['js']['del_confirm']= 'Really delete selected item(s)?';
+$lang['admin_register']= 'Add new user';
+
+$lang['metaedit'] = 'Edit Metadata';
+$lang['metasaveerr'] = 'Writing metadata failed';
+$lang['metasaveok'] = 'Metadata saved';
+$lang['img_backto'] = 'Back to';
+$lang['img_title'] = 'Title';
+$lang['img_caption'] = 'Caption';
+$lang['img_date'] = 'Date';
+$lang['img_fname'] = 'Filename';
+$lang['img_fsize'] = 'Size';
+$lang['img_artist'] = 'Photographer';
+$lang['img_copyr'] = 'Copyright';
+$lang['img_format'] = 'Format';
+$lang['img_camera'] = 'Camera';
+$lang['img_keywords']= 'Keywords';
+
+$lang['subscribe_success'] = 'Added %s to subscription list for %s';
+$lang['subscribe_error'] = 'Error adding %s to subscription list for %s';
+$lang['subscribe_noaddress']= 'There is no address associated with your login, you cannot be added to the subscription list';
+$lang['unsubscribe_success']= 'Removed %s from subscription list for %s';
+$lang['unsubscribe_error'] = 'Error removing %s from subscription list for %s';
+
+/* auth.class language support */
+$lang['authmodfailed'] = 'Bad user authentication configuration. Please inform your Wiki Admin.';
+$lang['authtempfail'] = 'User authentication is temporarily unavailable. If this situation persists, please inform your Wiki Admin.';
+
+/* installer strings */
+$lang['i_chooselang'] = 'Choose your language';
+$lang['i_installer'] = 'DokuWiki Installer';
+$lang['i_wikiname'] = 'Wiki Name';
+$lang['i_enableacl'] = 'Enable ACL (recommended)';
+$lang['i_superuser'] = 'Superuser';
+$lang['i_problems'] = 'The installer found some problems, indicated below. You can not continue until you have fixed them.';
+$lang['i_modified'] = 'For security reasons this script will only work with a new and unmodified Dokuwiki installation.
+ You should either re-extract the files from the downloaded package or consult the complete
+ <a href="http://dokuwiki.org/install">Dokuwiki installation instructions</a>';
+$lang['i_funcna'] = 'PHP function <code>%s</code> is not available. Maybe your hosting provider disabled it for some reason?';
+$lang['i_phpver'] = 'Your PHP version <code>%s</code> is lower than the needed <code>%s</code>. You need to upgrade your PHP install.';
+$lang['i_permfail'] = '<code>%s</code> is not writable by DokuWiki. You need to fix the permission settings of this directory!';
+$lang['i_confexists'] = '<code>%s</code> already exists';
+$lang['i_writeerr'] = 'Unable to create <code>%s</code>. You will need to check directory/file permissions and create the file manually.';
+$lang['i_badhash'] = 'unrecognised or modified dokuwiki.php (hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - illegal or empty value';
+$lang['i_success'] = 'The configuration was finished successfully. You may delete the install.php file now. Continue to
+ <a href="doku.php">your new DokuWiki</a>.';
+$lang['i_failure'] = 'Some errors occurred while writing the configuration files. You may need to fix them manually before
+ you can use <a href="doku.php">your new DokuWiki</a>.';
+$lang['i_policy'] = 'Initial ACL policy';
+$lang['i_pol0'] = 'Open Wiki (read, write, upload for everyone)';
+$lang['i_pol1'] = 'Public Wiki (read for everyone, write and upload for registered users)';
+$lang['i_pol2'] = 'Closed Wiki (read, write, upload for registered users only)';
+
+$lang['i_retry'] = 'Retry';
+
+$lang['mu_intro'] = 'Here you can upload multiple files at once. Click the browse button to add them to the queue. Press upload when done.';
+$lang['js']['mu_btn'] = 'Upload multiple files at once';
+$lang['mu_gridname'] = 'Filename';
+$lang['mu_gridsize'] = 'Size';
+$lang['mu_gridstat'] = 'Status';
+$lang['mu_namespace'] = 'Namespace';
+$lang['mu_browse'] = 'Browse';
+$lang['mu_toobig'] = 'too big';
+$lang['mu_ready'] = 'ready for upload';
+$lang['mu_done'] = 'complete';
+$lang['mu_fail'] = 'failed';
+$lang['mu_authfail'] = 'session expired';
+$lang['mu_progress'] = '@PCT@% uploaded';
+$lang['mu_filetypes'] = 'Allowed Filetypes';
+$lang['mu_info'] = 'files uploaded.';
+$lang['mu_lasterr'] = 'Last error:';
+
+$lang['recent_global'] = 'You\'re currently watching the changes inside the <b>%s</b> namespace. You can also <a href="%s">view the recent changes of the whole wiki</a>.';
+
+$lang['years'] = '%d years ago';
+$lang['months'] = '%d months ago';
+$lang['weeks'] = '%d weeks ago';
+$lang['days'] = '%d days ago';
+$lang['hours'] = '%d hours ago';
+$lang['minutes'] = '%d minutes ago';
+$lang['seconds'] = '%d seconds ago';
+
+//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/locked.txt
new file mode 100644
index 000000000..af6347a96
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/locked.txt
@@ -0,0 +1,3 @@
+====== Page locked ======
+
+This page is currently locked for editing by another user. You have to wait until this user finishes editing or the lock expires.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/login.txt
new file mode 100644
index 000000000..2004ea198
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/login.txt
@@ -0,0 +1,4 @@
+====== Login ======
+
+You are currently not logged in! Enter your authentication credentials below to log in. You need to have cookies enabled to log in.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/mailtext.txt
new file mode 100644
index 000000000..44a3f6553
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/mailtext.txt
@@ -0,0 +1,17 @@
+A page in your DokuWiki was added or changed. Here are the details:
+
+Date : @DATE@
+Browser : @BROWSER@
+IP-Address : @IPADDRESS@
+Hostname : @HOSTNAME@
+Old Revision: @OLDPAGE@
+New Revision: @NEWPAGE@
+Edit Summary: @SUMMARY@
+User : @USER@
+
+@DIFF@
+
+
+--
+This mail was generated by DokuWiki at
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/newpage.txt
new file mode 100644
index 000000000..848d4df09
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/newpage.txt
@@ -0,0 +1,4 @@
+====== This topic does not exist yet ======
+
+You've followed a link to a topic that doesn't exist yet. If permissions allow, you may create it by using the ''Create this page'' button.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/norev.txt
new file mode 100644
index 000000000..0b21bf3f0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/norev.txt
@@ -0,0 +1,4 @@
+====== No such revision ======
+
+The specified revision doesn't exist. Use the ''Old revisions'' button for a list of old revisions of this document.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/preview.txt
new file mode 100644
index 000000000..16c96c5d7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/preview.txt
@@ -0,0 +1,4 @@
+====== Preview ======
+
+This is a preview of how your text will look like. Remember: It is **not saved** yet!
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/pwconfirm.txt
new file mode 100644
index 000000000..a342ff95a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/pwconfirm.txt
@@ -0,0 +1,15 @@
+Hi @FULLNAME@!
+
+Someone requested a new password for your @TITLE@
+login at @DOKUWIKIURL@
+
+If you did not request a new password then just ignore this email.
+
+To confirm that the request was really sent by you please use the
+following link.
+
+@CONFIRM@
+
+--
+This mail was generated by DokuWiki at
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/read.txt
new file mode 100644
index 000000000..9f56d81ad
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/read.txt
@@ -0,0 +1,2 @@
+This page is read only. You can view the source, but not change it. Ask your administrator if you think this is wrong.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/recent.txt
new file mode 100644
index 000000000..3f7b58c46
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/recent.txt
@@ -0,0 +1,5 @@
+====== Recent Changes ======
+
+The following pages were changed recently.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/register.txt
new file mode 100644
index 000000000..db68d4f2f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/register.txt
@@ -0,0 +1,4 @@
+====== Register as new user ======
+
+Fill in all the information below to create a new account in this wiki. Make sure you supply a **valid e-mail address** - if you are not asked to enter a password here, a new one will be sent to that address. The login name should be a valid [[doku>pagename|pagename]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/registermail.txt
new file mode 100644
index 000000000..f02015767
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/registermail.txt
@@ -0,0 +1,14 @@
+A new user has registered. Here are the details:
+
+User name : @NEWUSER@
+Full name : @NEWNAME@
+E-mail : @NEWEMAIL@
+
+Date : @DATE@
+Browser : @BROWSER@
+IP-Address : @IPADDRESS@
+Hostname : @HOSTNAME@
+
+--
+This mail was generated by DokuWiki at
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/resendpwd.txt
new file mode 100644
index 000000000..98c8c756b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/resendpwd.txt
@@ -0,0 +1,4 @@
+====== Send new password ======
+
+Please enter your user name in the form below to request a new password for your account in this wiki. A confirmation link will be sent to your registered email address.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/revisions.txt
new file mode 100644
index 000000000..dd5f35b8e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/revisions.txt
@@ -0,0 +1,4 @@
+====== Old Revisions ======
+
+These are the older revisons of the current document. To revert to an old revision, select it from below, click ''Edit this page'' and save it.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/searchpage.txt
new file mode 100644
index 000000000..e357d6cdd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/searchpage.txt
@@ -0,0 +1,5 @@
+====== Search ======
+
+You can find the results of your search below. If you didn't find what you were looking for, you can create or edit the page named after your query with the appropriate button.
+
+===== Results =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/showrev.txt
new file mode 100644
index 000000000..3608de36b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/showrev.txt
@@ -0,0 +1,2 @@
+**This is an old revision of the document!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/stopwords.txt
new file mode 100644
index 000000000..afc301659
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/stopwords.txt
@@ -0,0 +1,39 @@
+# This is a list of words the indexer ignores, one word per line
+# When you edit this file be sure to use UNIX line endings (single newline)
+# No need to include words shorter than 3 chars - these are ignored anyway
+# This list is based upon the ones found at http://www.ranks.nl/stopwords/
+about
+are
+as
+an
+and
+you
+your
+them
+their
+com
+for
+from
+into
+if
+in
+is
+it
+how
+of
+on
+or
+that
+the
+this
+to
+was
+what
+when
+where
+who
+will
+with
+und
+the
+www
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/subscribermail.txt
new file mode 100644
index 000000000..673c4c32a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/subscribermail.txt
@@ -0,0 +1,23 @@
+Hello!
+
+The page @PAGE@ in the @TITLE@ wiki changed.
+Here are the changes:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Date : @DATE@
+User : @USER@
+Edit Summary: @SUMMARY@
+Old Revision: @OLDPAGE@
+New Revision: @NEWPAGE@
+
+To cancel the page notifications, log into the wiki at
+@DOKUWIKIURL@ then visit
+@NEWPAGE@
+and unsubscribe page and/or namespace changes.
+
+--
+This mail was generated by DokuWiki at
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/updateprofile.txt
new file mode 100644
index 000000000..b929fee83
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/updateprofile.txt
@@ -0,0 +1,5 @@
+====== Update your account profile ======
+
+You only need to complete those fields you wish to change. You may not change your user name.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/uploadmail.txt
new file mode 100644
index 000000000..6fa196730
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/uploadmail.txt
@@ -0,0 +1,14 @@
+A file was uploaded to your DokuWiki. Here are the details:
+
+File : @MEDIA@
+Date : @DATE@
+Browser : @BROWSER@
+IP-Address : @IPADDRESS@
+Hostname : @HOSTNAME@
+Size : @SIZE@
+MIME Type : @MIME@
+User : @USER@
+
+--
+This mail was generated by DokuWiki at
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/wordblock.txt
new file mode 100644
index 000000000..f0f7d759d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/wordblock.txt
@@ -0,0 +1,4 @@
+====== SPAM blocked ======
+
+Your changes were **not** saved because it contains one or more blocked words. If you tried to spam the Wiki -- Bad dog! If you think this is an error, contact the administrator of this Wiki.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/admin.txt
new file mode 100644
index 000000000..2ede2763c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/admin.txt
@@ -0,0 +1,3 @@
+====== Administro ======
+
+Sube vi povas trovi liston de administraj taskoj disponeblaj en DokuWiki.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/adminplugins.txt
new file mode 100644
index 000000000..ed2949b10
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/adminplugins.txt
@@ -0,0 +1 @@
+===== Ekstra kromaĵojn ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/backlinks.txt
new file mode 100644
index 000000000..cd0cca9c6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/backlinks.txt
@@ -0,0 +1,3 @@
+====== Retroligiloj ======
+
+Ĉi tiu listo montras paÄojn, kiuj referencas al la aktuala paÄo. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/conflict.txt
new file mode 100644
index 000000000..0d7ede0b0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/conflict.txt
@@ -0,0 +1,5 @@
+====== Pli nova versio ekzistas ======
+
+Ekzistas pli nova versio de la dokumento. Tio okazas kiam iu alia uzanto ÅanÄigis enhavon de la dokumento dum vi redaktis Äin.
+
+Atente esploru distingojn kaj decidu kiun version vi tenigos. Se vi premos ''Konservi'', do via versio estos konservita. Presonte butonon ''Rezigni'' vi tenos la kurantan version.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/denied.txt
new file mode 100644
index 000000000..b35fe0412
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/denied.txt
@@ -0,0 +1,4 @@
+====== Aliro malpermesita ======
+
+Vi ne havas sufiĉe da rajtoj por rigardi ĉi tiujn paÄojn. Eble vi forgesis identiÄi.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/diff.txt
new file mode 100644
index 000000000..ac5474ef1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/diff.txt
@@ -0,0 +1,4 @@
+====== Diferencoj ======
+
+Ĉi tie vi povas ekvidi diferencojn inter la aktuala versio kaj la elektita revizio de la paÄo.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/draft.txt
new file mode 100644
index 000000000..fa43ecb74
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/draft.txt
@@ -0,0 +1,5 @@
+====== Skiza dosiero estis trovata ======
+
+Via lasta sekcio de redakto en tiu ĉi paÄo ne estis korekte kompletita. DokuWiki aÅ­tomate konservis skizon dum vi laboris, kiun vi nun povas uzi por daÅ­rigi vian redaktadon. Sube vi povas vidi la datenaron, kiu estis konservata el via lasta sekcio.
+
+Bonvolu decidi ĉu vi volas //restarigi// vian perditan redakton, //forigi// la aŭtomate konservitan skizon aŭ //rezigni// pri la redakta procezo.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/edit.txt
new file mode 100644
index 000000000..c1ca31e1d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/edit.txt
@@ -0,0 +1 @@
+Redaktu paÄon kaj poste premu butonon titolitan ''Konservi''. Bonvolu tralegi la [[vikio:sintakso|vikian sintakson]] por kompreni kiel vi povas krei paÄojn. Bonvolu redakti nur se vi planas **plibonigi** la enhavon de la paÄo. Se vi volas nur testi ion, do bonvolu uzi specialan paÄon: [[vikio:ludejo|ludejo]].
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/editrev.txt
new file mode 100644
index 000000000..4bab50b93
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/editrev.txt
@@ -0,0 +1,2 @@
+**Vi laboras kun malnova revizio de la dokumento!** Se vi konservos Äin, tiel kreiÄos nova kuranta versio kun la sama enhavo.
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/index.txt
new file mode 100644
index 000000000..08bf3c894
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/index.txt
@@ -0,0 +1,3 @@
+====== Enhavo ======
+
+Tio ĉi estas indekso pri ĉiuj disponeblaj paÄoj ordigitaj laÅ­ [[doku>namespaces|nomspacoj]]. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/install.html
new file mode 100644
index 000000000..74bbe15e2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/install.html
@@ -0,0 +1,9 @@
+<p>Tiu ĉi paÄo helpas en la unua instalo kaj agordado de <a href="http://dokuwiki.org">DokuWiki</a>. Pli da informo pri tiu instalilo estas disponebla en Äia propra <a href="http://dokuwiki.org/installer">dokumentada paÄo</a>.</p>
+
+<p>DokuWiki uzas ordinarajn dosierojn por konservi vikiajn paÄojn kaj aliajn informojn asociitaj al tiuj paÄoj (ekz. bildoj, serĉindeksoj, malnovaj revizioj, ktp). Por bone funkcii, DokuWiki <strong>devas</strong> havi registran rajton sur la subdosierujoj, kiuj entenas tiujn dosierojn. Tiu ĉi instalilo ne kapablas difini permes-atributojn de dosierujoj. Ordinare, tio devas esti senpere farita de iu komando en konzolo aÅ­, se vi abonas retprovizanton, per FTP aÅ­ kontrola panelo de tiu retprovizanto (ekz. cPanel).</p>
+
+<p>Tiu ĉi instalilo difinos vian DokuWiki-an agordadon por <acronym title="alir-kontrola listo">ACL</acronym>, kiu ebligas al administranto identiÄi kaj aliri taÅ­gan interfacon por instali kromaĵojn, administri uzantojn kaj alireblon al vikipaÄoj, kaj difini agordojn Äeneralajn.
+Äœi ne estas nepra por ke DokuWiki funkciu, tamen Äi multe faciligos administradon.</p>
+
+<p>Spertuloj aÅ­ uzantoj kiuj bezonas specialajn agordrimedojn devus uzi tiujn ligilojn por havi pli detalojn pri <a href="http://dokuwiki.org/install">instaladaj instrukcioj</a>
+kaj <a href="http://dokuwiki.org/config">agordadaj difinoj</a>.</p> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/lang.php
new file mode 100644
index 000000000..e2c25ae43
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/lang.php
@@ -0,0 +1,254 @@
+<?php
+/**
+ * Esperanta dosiero
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Antono Vasiljev <esperanto.minsk ĈE tut.by>
+ * @author Felipe Castro <fefcas CXE yahoo.com.br>
+ * @author Felipe Castro <fefcas@uol.com.br>
+ * @author Felipe Castro <fefcas@gmail.com>
+ * @author Felipe Castro <fefcas (cxe) gmail (punkto) com>
+ * @author Felipo Kastro <fefcas@gmail.com>
+ * @author Robert Bogenschneider <robog@gmx.de>
+ * @author Erik Pedersen <erik pedersen@shaw.ca>
+ * @author Erik Pedersen <erik.pedersen@shaw.ca>
+ * @author Robert Bogenschneider <robog@GMX.de>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '“';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '‘';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = '\'';
+$lang['btn_edit'] = 'Redakti la paÄon';
+$lang['btn_source'] = 'Montri fontan tekston';
+$lang['btn_show'] = 'Montri paÄon';
+$lang['btn_create'] = 'Krei paÄon';
+$lang['btn_search'] = 'Serĉi';
+$lang['btn_save'] = 'Konservi';
+$lang['btn_preview'] = 'AntaÅ­rigardi';
+$lang['btn_top'] = 'Supren';
+$lang['btn_newer'] = '<< pli freÅe';
+$lang['btn_older'] = 'malpli freÅe >>';
+$lang['btn_revs'] = 'Malnovaj revizioj';
+$lang['btn_recent'] = 'FreÅaj ÅanÄoj';
+$lang['btn_upload'] = 'AlÅuti';
+$lang['btn_cancel'] = 'Rezigni';
+$lang['btn_index'] = 'Indekso';
+$lang['btn_secedit'] = 'Redakti';
+$lang['btn_login'] = 'Ensaluti';
+$lang['btn_logout'] = 'Elsaluti';
+$lang['btn_admin'] = 'Administri';
+$lang['btn_update'] = 'Äœisdatigi';
+$lang['btn_delete'] = 'Forigi';
+$lang['btn_back'] = 'Retroiri';
+$lang['btn_backlink'] = 'Retroligoj';
+$lang['btn_backtomedia'] = 'Retroiri al elekto de dosiero';
+$lang['btn_subscribe'] = 'AliÄi al paÄaj modifoj';
+$lang['btn_unsubscribe'] = 'MalaliÄi al paÄaj modifoj';
+$lang['btn_subscribens'] = 'AliÄi al nomspacaj modifoj';
+$lang['btn_unsubscribens'] = 'MalaliÄi al nomspacaj modifoj';
+$lang['btn_profile'] = 'Äœisdatigi profilon';
+$lang['btn_reset'] = 'Rekomenci';
+$lang['btn_resendpwd'] = 'Sendi novan pasvorton';
+$lang['btn_draft'] = 'Redakti skizon';
+$lang['btn_recover'] = 'Restarigi skizon';
+$lang['btn_draftdel'] = 'Forigi skizon';
+$lang['btn_revert'] = 'Restarigi';
+$lang['loggedinas'] = 'Ensalutita kiel';
+$lang['user'] = 'Uzant-nomo';
+$lang['pass'] = 'Pasvorto';
+$lang['newpass'] = 'Nova pasvorto';
+$lang['oldpass'] = 'Konfirmu la nunan pasvorton';
+$lang['passchk'] = 'plian fojon';
+$lang['remember'] = 'Rememoru min';
+$lang['fullname'] = 'Kompleta nomo';
+$lang['email'] = 'RetpoÅto';
+$lang['register'] = 'Registro';
+$lang['profile'] = 'Uzanto-profilo';
+$lang['badlogin'] = 'Pardonu, uzant-nomo aÅ­ pasvorto estis erara.';
+$lang['minoredit'] = 'Etaj modifoj';
+$lang['draftdate'] = 'Lasta konservo de la skizo:';
+$lang['nosecedit'] = 'La paÄo ÅanÄiÄis intertempe, sekcio-informo estis malÄisdata, ni Åargas la tutan paÄon anstataÅ­e.';
+$lang['regmissing'] = 'Pardonu, vi devas plenigi ĉiujn kampojn.';
+$lang['reguexists'] = 'Pardonu, ĉi tiu uzanto-nomo jam estas okupita.';
+$lang['regsuccess'] = 'La uzanto estas kreita kaj la pasvorto estis elsendita per retpoÅto.';
+$lang['regsuccess2'] = 'La uzanto estas kreita.';
+$lang['regmailfail'] = 'Åœajne okazis eraro dum elsendo de la pasvorto. Bonvolu informi administranton pri tio!';
+$lang['regbadmail'] = 'Entajpita retpoÅta adreso ne Åajnas valida. Se vi pensas, ke tio estas eraro, kontaktu la administranton.';
+$lang['regbadpass'] = 'La du pasvortoj ne samas, bonvolu provi refoje.';
+$lang['regpwmail'] = 'Via DokuWiki-pasvorto';
+$lang['reghere'] = 'Se vi ne havas konton, do vi povos akiri Äin';
+$lang['profna'] = 'Tiu ĉi vikio ne ebligas modifon en la profiloj.';
+$lang['profnochange'] = 'Neniu ÅanÄo, nenio farinda.';
+$lang['profnoempty'] = 'Malplena nomo aÅ­ retadreso ne estas permesataj.';
+$lang['profchanged'] = 'La profilo de la uzanto estas sukcese Äisdatigita.';
+$lang['pwdforget'] = 'Ĉu vi forgesis vian pasvorton? Prenu novan';
+$lang['resendna'] = 'Tiu ĉi vikio ne ebligas resendon de la pasvortoj.';
+$lang['resendpwd'] = 'Sendi novan pasvorton al';
+$lang['resendpwdmissing'] = 'Pardonu, vi devas plenigi ĉiujn kampojn.';
+$lang['resendpwdnouser'] = 'Pardonu, ni ne trovas tiun uzanton en nia datenbazo.';
+$lang['resendpwdbadauth'] = 'Pardonu, tiu aÅ­tentiga kodo ne validas. CertiÄu, ke vi uzis la kompletan konfirmigan ligilon.';
+$lang['resendpwdconfirm'] = 'Konfirmiga ligilo estas sendita per retpoÅto.';
+$lang['resendpwdsuccess'] = 'Via nova pasvorto estas sendita per retpoÅto.';
+$lang['license'] = 'Krom kie rekte indikite, enhavo de tiu ĉi vikio estas publikigita laŭ la jena permesilo:';
+$lang['licenseok'] = 'Rimarku: redaktante tiun ĉi paÄon vi konsentas publikigi vian enhavon laÅ­ la jena permesilo:';
+$lang['searchmedia'] = 'Serĉi dosiernomon:';
+$lang['searchmedia_in'] = 'Serĉi en %s';
+$lang['txt_upload'] = 'Elektu dosieron por alÅuto';
+$lang['txt_filename'] = 'AlÅuti kiel (laÅ­vole)';
+$lang['txt_overwrt'] = 'AnstataÅ­igi ekzistantan dosieron';
+$lang['lockedby'] = 'Nune Ålosita de';
+$lang['lockexpire'] = 'Ŝlosado ĉesos en';
+$lang['willexpire'] = 'Vi povos redakti ĉi tiun paÄon post unu minuto.\nSe vi volas nuligi tempkontrolon de la Ålosado, do premu butonon "AntaÅ­rigardi".';
+$lang['notsavedyet'] = 'Ne konservitaj modifoj perdiÄos.\nĈu vi certe volas daÅ­rigi la procezon?';
+$lang['rssfailed'] = 'Okazis eraro dum ricevado de la novaĵ-fluo: ';
+$lang['nothingfound'] = 'AnkoraÅ­ nenio troviÄas tie ĉi.';
+$lang['mediaselect'] = 'Elekto de aŭdvidaĵa dosiero';
+$lang['fileupload'] = 'AlÅuto de aÅ­dvidaĵa dosiero';
+$lang['uploadsucc'] = 'AlÅuto estis sukcesa';
+$lang['uploadfail'] = 'AlÅuto estis malsukcesa. Eble ĉu estas problemoj pro permes-atributoj?';
+$lang['uploadwrong'] = 'Rifuzita alÅuto. Tiu ĉi dosiersufikso estas malpermesata!';
+$lang['uploadexist'] = 'La dosiero jam ekzistas. Nenio estas farita.';
+$lang['uploadbadcontent'] = 'La alÅutita enhavo ne kongruas al la sufikso %s.';
+$lang['uploadspam'] = 'La alÅutaĵo estis blokita de kontraÅ­spama vortlisto.';
+$lang['uploadxss'] = 'La alÅutajo estis blokita pro ebla malica enhavo.';
+$lang['uploadsize'] = 'La alÅutita dosiero estis tro granda. (maks. %s)';
+$lang['deletesucc'] = 'La dosiero "%s" estas forigita.';
+$lang['deletefail'] = '"%s" ne povis esti forigita - kontrolu permes-atributojn.';
+$lang['mediainuse'] = 'La dosiero "%s" ne estis forigita - Äi ankoraÅ­ estas uzata.';
+$lang['namespaces'] = 'Nomspacoj';
+$lang['mediafiles'] = 'Disponeblaj dosieroj';
+$lang['js']['searchmedia'] = 'Serĉi dosierojn';
+$lang['js']['keepopen'] = 'Tenu la fenestron malfermata dum elekto';
+$lang['js']['hidedetails'] = 'KaÅi detalojn';
+$lang['js']['nosmblinks'] = 'Tio ĉi nur funkcias en la Vindozaĉa "Microsoft Internet Explorer".
+Vi ankoraÅ­ povas kopii kaj almeti la ligilon.';
+$lang['js']['linkwiz'] = 'Ligil-Asistanto';
+$lang['js']['linkto'] = 'Ligilo al:';
+$lang['js']['del_confirm'] = 'Ĉu vere forigi elektitajn ero(j)n?';
+$lang['js']['mu_btn'] = 'AlÅuti plurajn dosierojn multope.';
+$lang['mediausage'] = 'Uzu la jenan sintakson por referenci tiun ĉi dosieron:';
+$lang['mediaview'] = 'Rigardi originalan dosieron';
+$lang['mediaroot'] = 'ĉefo (root)';
+$lang['mediaupload'] = 'AlÅutu dosieron al la kuranta nomspaco tien ĉi. Por krei subnomspacojn, antaÅ­metu ilin al via "AlÅuti kiel" dosiernomo, apartigante per dupunktoj (:).';
+$lang['mediaextchange'] = 'La dosiersufikso ÅanÄis de .%s al .%s!';
+$lang['reference'] = 'Referencoj por';
+$lang['ref_inuse'] = 'La dosiero ne povas esti forigita, ĉar Äi ankoraÅ­ estas uzata de la jenaj paÄoj:';
+$lang['ref_hidden'] = 'Kelkaj referencoj estas en paÄoj, kiujn vi ne rajtas legi';
+$lang['hits'] = 'Kongruoj';
+$lang['quickhits'] = 'Kongruoj trovitaj en paÄnomoj';
+$lang['toc'] = 'Enhavtabelo';
+$lang['current'] = 'aktuala';
+$lang['yours'] = 'Via Versio';
+$lang['diff'] = 'Montri diferencojn el la aktuala versio';
+$lang['diff2'] = 'Montri diferencojn inter la elektitaj revizioj';
+$lang['line'] = 'Linio';
+$lang['breadcrumb'] = 'PaÅoj';
+$lang['youarehere'] = 'Vi estas ĉi tie';
+$lang['lastmod'] = 'Lastaj ÅanÄoj';
+$lang['by'] = 'de';
+$lang['deleted'] = 'forigita';
+$lang['created'] = 'kreita';
+$lang['restored'] = 'malnova revizio restarigita';
+$lang['external_edit'] = 'ekstera redakto';
+$lang['summary'] = 'Bulteno de ÅanÄoj';
+$lang['noflash'] = 'La <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> estas bezonata por montrigi tiun ĉi enhavon.';
+$lang['download'] = 'ElÅuti eltiraĵon';
+$lang['mail_newpage'] = 'paÄo aldonita:';
+$lang['mail_changed'] = 'paÄo modifita:';
+$lang['mail_new_user'] = 'Nova uzanto:';
+$lang['mail_upload'] = 'dosiero alÅutita:';
+$lang['qb_bold'] = 'Dika teksto';
+$lang['qb_italic'] = 'Dekliva teksto';
+$lang['qb_underl'] = 'Substrekita teksto';
+$lang['qb_code'] = 'Koduma teksto';
+$lang['qb_strike'] = 'Trastrekita teksto';
+$lang['qb_h1'] = 'Titolo de 1-a nivelo';
+$lang['qb_h2'] = 'Titolo de 2-a nivelo';
+$lang['qb_h3'] = 'Titolo de 3-a nivelo';
+$lang['qb_h4'] = 'Titolo de 4-a nivelo';
+$lang['qb_h5'] = 'Titolo de 5-a nivelo';
+$lang['qb_h'] = 'Ĉeftitolo';
+$lang['qb_hs'] = 'Elektu ĉeftitolon';
+$lang['qb_hplus'] = 'Altnivela titolo';
+$lang['qb_hminus'] = 'Subnivela titolo';
+$lang['qb_hequal'] = 'Samnivela titolo';
+$lang['qb_link'] = 'Interna ligilo';
+$lang['qb_extlink'] = 'Ekstera ligilo';
+$lang['qb_hr'] = 'Horizontala streko';
+$lang['qb_ol'] = 'Elemento de numerita listo';
+$lang['qb_ul'] = 'Elemento de ne numerita listo';
+$lang['qb_media'] = 'Aldoni bildojn kaj aliajn dosierojn';
+$lang['qb_sig'] = 'Inkluzivi subskribon';
+$lang['qb_smileys'] = 'Ridetuloj';
+$lang['qb_chars'] = 'Specialaj signaĵoj';
+$lang['upperns'] = 'saltu al la parenca nomspaco';
+$lang['admin_register'] = 'Aldoni novan uzanton';
+$lang['metaedit'] = 'Redakti metadatenaron';
+$lang['metasaveerr'] = 'La konservo de metadatenaro malsukcesis';
+$lang['metasaveok'] = 'La metadatenaro estis konservita';
+$lang['img_backto'] = 'Retroiri al';
+$lang['img_title'] = 'Titolo';
+$lang['img_caption'] = 'Priskribo';
+$lang['img_date'] = 'Dato';
+$lang['img_fname'] = 'Dosiernomo';
+$lang['img_fsize'] = 'Grandeco';
+$lang['img_artist'] = 'Fotisto';
+$lang['img_copyr'] = 'Kopirajtoj';
+$lang['img_format'] = 'Formato';
+$lang['img_camera'] = 'Kamerao';
+$lang['img_keywords'] = 'Åœlosilvortoj';
+$lang['subscribe_success'] = '%s estis aldonita al dissendolisto por %s';
+$lang['subscribe_error'] = 'Estas eraro je aldono de %s al dissendolisto por %s';
+$lang['subscribe_noaddress'] = 'Estas neniu retadreso asociita al via identiÄ-nomo, do vi ne povas esti aldonata al la dissendolisto.';
+$lang['unsubscribe_success'] = '%s estas forigita de la dissendolisto por %s';
+$lang['unsubscribe_error'] = 'Estas eraro je forigo de %s el dissendolisto por %s';
+$lang['authmodfailed'] = 'Malbona agordo por identigi la uzanton. Bonvolu informi la administranton de la vikio.';
+$lang['authtempfail'] = 'La identigo de via uzantonomo estas intertempe maldisponebla. Se tiu ĉi situacio daŭros, bonvolu informi la adminstranton de la vikio.';
+$lang['i_chooselang'] = 'Elektu vian lingvon';
+$lang['i_installer'] = 'Instalilo de DokuWiki';
+$lang['i_wikiname'] = 'Nomo de la vikio';
+$lang['i_enableacl'] = 'Ebligi "ACL" (alirkontrolo, rekomendinde)';
+$lang['i_superuser'] = 'Superuzanto';
+$lang['i_problems'] = 'La instalilo trovis kelkajn problemojn, indikitaj sube. Vi ne povas pluiri Äis ili estos iel korektitaj.';
+$lang['i_modified'] = 'Pro sekureco tiu ĉi instalilo nur funkcias por nova kaj nemodifita Dokuwiki-pakaĵo.
+Vi devas aÅ­ redemeti la dosierojn el la elÅutita pakaĵo aÅ­ plibone informiÄi pri la instalada procezo.';
+$lang['i_funcna'] = 'La PHP-a funkcio <code>%s</code> ne estas uzebla. Eble via retprovizanto ial malpermesis tion?';
+$lang['i_phpver'] = 'La versio de la PHP <code>%s</code> estas pli malnova ol la bezonata <code>%s</code>. Vi bezonas Äisdatigi la PHP-an instalon.';
+$lang['i_permfail'] = '<code>%s</code> ne estas skribebla por DokuWiki. Vi devas redifini la permes-atributojn de tiu ĉi dosierujo!';
+$lang['i_confexists'] = '<code>%s</code> jam ekzistas';
+$lang['i_writeerr'] = 'Ne eblas krei "<code>%s</code>"-on. Vi bezonas kontroli la permesojn de la dosier(uj)oj kaj mem krej la dosieron.';
+$lang['i_badhash'] = 'dokuwiki.php ne estas rekonebla aÅ­ Äi estas modifita (hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - malvalida aÅ­ malplena valoro';
+$lang['i_success'] = 'La agordado estas sukcese kompletita. Vi povas forigi la dosieron nun. Pluiru al <a href="doku.php">via nova DokuWiki</a>.';
+$lang['i_failure'] = 'Kelkaj eraroj okazis dum la konservo de la agordaj dosieroj. Vi devas senpere korekti ilin antaÅ­ ol vi povos uzi <a href="doku.php">vian novan DokuWiki-on</a>. ';
+$lang['i_policy'] = 'Apriora ACL-a agordo';
+$lang['i_pol0'] = 'Malferma Vikio (legi, skribi, alÅuti povas ĉiuj)';
+$lang['i_pol1'] = 'Publika Vikio (legi povas ĉiuj, skribi kaj alÅuti povas registritaj uzantoj)';
+$lang['i_pol2'] = 'Ferma Vikio (legi, skribi, alÅuti nur povas registritaj uzantoj)';
+$lang['i_retry'] = 'Reprovi';
+$lang['mu_intro'] = 'Ĉi tie vi povas alÅuti plurajn dosierojn multope. Klaku la esplor-butonon por aldoni ilin al la vico. Premu alÅuti kiam prete.';
+$lang['mu_gridname'] = 'Dosiernomo';
+$lang['mu_gridsize'] = 'Grandeco';
+$lang['mu_gridstat'] = 'Stato';
+$lang['mu_namespace'] = 'Nomspaco';
+$lang['mu_browse'] = 'Esplori';
+$lang['mu_toobig'] = 'tro granda';
+$lang['mu_ready'] = 'preta por alÅuti';
+$lang['mu_done'] = 'plenumite';
+$lang['mu_fail'] = 'malsukcesinte';
+$lang['mu_authfail'] = 'sekcio tro longdaÅ­ris';
+$lang['mu_progress'] = '@PCT@% alÅutite';
+$lang['mu_filetypes'] = 'Permesitaj dosiertipoj';
+$lang['mu_info'] = 'alÅutitaj dosieroj.';
+$lang['mu_lasterr'] = 'Lasta eraro:';
+$lang['recent_global'] = 'Vi nun rigardas la ÅanÄojn ene de la nomspaco <b>%s</b>. Vi povas ankaÅ­ <a href="%s">vidi la freÅajn ÅanÄojn de la tuta vikio</a>.';
+$lang['years'] = 'antaÅ­ %d jaroj';
+$lang['months'] = 'antaÅ­ %d monatoj';
+$lang['weeks'] = 'antaÅ­ %d semajnoj';
+$lang['days'] = 'antaÅ­ %d tagoj';
+$lang['hours'] = 'antaÅ­ %d horoj';
+$lang['minutes'] = 'antaÅ­ %d minutoj';
+$lang['seconds'] = 'antaÅ­ %d sekundoj';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/locked.txt
new file mode 100644
index 000000000..68963da75
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/locked.txt
@@ -0,0 +1,3 @@
+====== La paÄo estas Ålosita ======
+
+Tiu ĉi paÄo nun estas blokita pro redaktado de iu alia uzanto. Bonvole atendu ke Åi/li finu redakti aÅ­ ke la Ålosada tempolimo finiÄu.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/login.txt
new file mode 100644
index 000000000..2b9b34340
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/login.txt
@@ -0,0 +1,3 @@
+====== Enirejo ======
+
+Vi ankoraÅ­ ne identiÄis! Entajpu necesajn informojn sube por identiÄi. Kuketoj (cookies) devas esti Åaltitaj. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/mailtext.txt
new file mode 100644
index 000000000..5e83b324b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/mailtext.txt
@@ -0,0 +1,16 @@
+PaÄo en via DokuVikio estis ÅanÄita aÅ­ aldonita. Jen detaloj:
+
+Dato: @DATE@
+Foliumilo: @BROWSER@
+IP-adreso: @IPADDRESS@
+RetNodo: @HOSTNAME@
+AntaÅ­a revizio: @OLDPAGE@
+Nova revizio: @NEWPAGE@
+Bulteno de ÅanÄoj: @SUMMARY@
+Uzulo: @USER@
+
+@DIFF@
+
+--
+Tiu ĉi mesaÄo estis kreata de DokuWiki, kiu lokiÄas tie:
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/newpage.txt
new file mode 100644
index 000000000..4ddcd33be
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/newpage.txt
@@ -0,0 +1,4 @@
+====== Ĉi tiu paÄo ankoraÅ­ ne ekzistas ======
+
+Vi sekvis ligilon, kiu kondukas al artikolo ankoraÅ­ ne ekzistanta. Se vi rajtas, tiel vi povas krei tiun ĉi paÄon ekpremante la butonon ''Krei paÄon''.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/norev.txt
new file mode 100644
index 000000000..6dffbaa1c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/norev.txt
@@ -0,0 +1,3 @@
+====== Tia revizio ne ekzistas ======
+
+La elektita revizio ne ekzistas. Premu butonon ''Malnovaj revizioj'', por vidi liston de malnovaj revizioj de la dokumento. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/preview.txt
new file mode 100644
index 000000000..784f693e6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/preview.txt
@@ -0,0 +1,3 @@
+====== AntaÅ­rigardo ======
+
+Tiu ĉi estas antaÅ­rigardo pri kia estos via teksto. Memoru: Äi ankoraÅ­ **ne estas konservita**! \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/pwconfirm.txt
new file mode 100644
index 000000000..f227752b1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/pwconfirm.txt
@@ -0,0 +1,14 @@
+Saluton @FULLNAME@!
+
+Iu petis novan pasvorton por via @TITLE@
+ensalutnomo ĉe @DOKUWIKIURL@
+
+Se ne estas vi, kiu petis tion, do preterlasu tiun ĉi mesaÄon.
+
+Por konfirmi, ke la peto estis vere via, bonvolu musklaki la jenan ligilon.
+
+@CONFIRM@
+
+--
+Tiu ĉi mesaÄo estis kreita de DokuWiki ĉe
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/read.txt
new file mode 100644
index 000000000..734eb1654
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/read.txt
@@ -0,0 +1,2 @@
+Tiu ĉi paÄo estas disponigata nur por legado (vi ne povas redakti Äin). Sciigu administranton, se vi opinias ke tio estas ne Äusta malpermeso.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/recent.txt
new file mode 100644
index 000000000..e03144668
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/recent.txt
@@ -0,0 +1,3 @@
+====== FreÅaj ÅœanÄoj ======
+
+La jenaj paÄoj estis ÅanÄitaj antaÅ­ malmulta tempo. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/register.txt
new file mode 100644
index 000000000..57d5ca1f4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/register.txt
@@ -0,0 +1,4 @@
+====== RegistriÄi ======
+
+Entajpu necesajn informojn por enregistriÄi. CertiÄu ke via retpoÅta adreso estas vera ĉar ni sendos al Äi vian pasvorton.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/registermail.txt
new file mode 100644
index 000000000..c832eca42
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/registermail.txt
@@ -0,0 +1,14 @@
+Nova uzulo estis registrata. Jen la detaloj:
+
+Uzantonomo: @NEWUSER@
+Kompleta nomo: @NEWNAME@
+Retadreso: @NEWEMAIL@
+
+Dato: @DATE@
+Foliumilo: @BROWSER@
+IP-Adreso: @IPADDRESS@
+Provizanto: @HOSTNAME@
+
+--
+Tiu ĉi mesaÄo estis kreata de DokuWiki ĉe
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/resendpwd.txt
new file mode 100644
index 000000000..57b4b0408
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/resendpwd.txt
@@ -0,0 +1,3 @@
+====== Sendi novan pasvorton ======
+
+Bonvolu meti vian uzantonomon en la suban formularon petante novan pasvorton por via aliÄo en tiu ĉi vikio. Konfirma ligilo estos sendata al via registrita retadreso.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/revisions.txt
new file mode 100644
index 000000000..4f37bb125
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/revisions.txt
@@ -0,0 +1,3 @@
+====== Malnovaj revizioj ======
+
+Sube estas listo de malnovaj revizioj de la dokumento. Elektu revizion se vi volas rigardi Äin aÅ­ anstataÅ­igi kurantan paÄon per Äi. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/searchpage.txt
new file mode 100644
index 000000000..a940c503d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/searchpage.txt
@@ -0,0 +1,5 @@
+====== Serĉo ======
+
+Sube estas rezultoj de serĉo en la retejo.\\ Se vi ne trovis tion, kion vi serĉis, vi povas krei novan paÄon kun necesa nomo per la koresponda butono.
+
+===== Rezultoj =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/showrev.txt
new file mode 100644
index 000000000..e3a8a1747
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/showrev.txt
@@ -0,0 +1,2 @@
+**Tiu estas malnova revizio de la dokumento**. Klaku sur titolo por ricevi kurantan version.
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/stopwords.txt
new file mode 100644
index 000000000..2c18cb319
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/stopwords.txt
@@ -0,0 +1,23 @@
+# This is a list of words the indexer ignores, one word per line
+# When you edit this file be sure to use UNIX line endings (single newline)
+# No need to include words shorter than 3 chars - these are ignored anyway
+la
+pri
+estas
+kaj
+mi
+mia
+vi
+via
+ili
+ilia
+kun
+por
+kiel
+tiu
+estis
+kio
+kiam
+kie
+kiu
+www \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/subscribermail.txt
new file mode 100644
index 000000000..074a99351
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/subscribermail.txt
@@ -0,0 +1,23 @@
+Saluton!
+
+La retpaÄo @PAGE@ en la vikio @TITLE@ ÅanÄiÄis.
+Jen la ÅanÄoj:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Dato : @DATE@
+Uzanto : @USER@
+Modifa rezumo: @SUMMARY@
+Malnova revizio: @OLDPAGE@
+Nova revizio: @NEWPAGE@
+
+Por nuligi la avizojn pri paÄoÅanÄoj, ensalutu en la vikio ĉe
+@DOKUWIKIURL@ kaj aliru
+@NEWPAGE@
+kaj malaliÄu al avizoj pri paÄaj kaj/aÅ­ nomspacaj ÅanÄoj.
+
+--
+Tiu ĉi mesaÄo estis kreita de DokuWiki ĉe
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/updateprofile.txt
new file mode 100644
index 000000000..a3de0c840
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/updateprofile.txt
@@ -0,0 +1,3 @@
+====== Äœisdatigi vian profilon ======
+
+Vi nur bezonas kompletigi tiujn kampojn, kiujn vi deziras ÅanÄi. Vi ne povas ÅanÄi vian uzantonomon. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/uploadmail.txt
new file mode 100644
index 000000000..e7c327a60
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/uploadmail.txt
@@ -0,0 +1,14 @@
+Dosiero estis alÅutita al via DokuVikio. Jen detaloj:
+
+Dosiero: @MEDIA@
+Dato: @DATE@
+Foliumilo: @BROWSER@
+IP-Adreso: @IPADDRESS@
+Ret-nodo: @HOSTNAME@
+Grandeco: @SIZE@
+Dosier-tipo: @MIME@
+Uzanto: @USER@
+
+--
+Tiu ĉi mesaÄo estis kreita de DokuWiki ĉe
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/wordblock.txt
new file mode 100644
index 000000000..64bb19e5c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/wordblock.txt
@@ -0,0 +1,3 @@
+====== SPAMO estis blokita ======
+
+Viaj redaktoj ne estas konservitaj, ĉar en la teksto estis trovitaj unu aÅ­ kelkaj malpermesindaj vortoj, Åajnante spamo. Se vi pensas, ke tio estas eraro, bonvolu kontakti la administranton de la vikio. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/admin.txt
new file mode 100644
index 000000000..320b1c5be
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/admin.txt
@@ -0,0 +1,3 @@
+====== Administración ======
+
+Abajo puedes encontrar una lista de las tareas de administración disponibles en Dokuwiki.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/adminplugins.txt
new file mode 100644
index 000000000..8e1b0f813
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/adminplugins.txt
@@ -0,0 +1 @@
+===== Plugins Adicionales ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/backlinks.txt
new file mode 100644
index 000000000..4de93ef34
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/backlinks.txt
@@ -0,0 +1,4 @@
+====== Referencias ======
+
+Esta es una lista de páginas que parecen hacer referencia a la página actual.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/conflict.txt
new file mode 100644
index 000000000..265ac1ee6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/conflict.txt
@@ -0,0 +1,5 @@
+====== Existe una versión más reciente ======
+
+Existe una versión más reciente del documento que has editado. Esto sucede cuando otro usuario ha modificado el documento mientras lo estabas editando.
+
+Examina las diferencias mostradas abajo a fondo, y decide entonces cual conservar. Si eliges ''Guardar'', tu versión será guardada. Si eliges ''Cancelar'' se guardará la actual versión. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/denied.txt
new file mode 100644
index 000000000..d7b37404b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/denied.txt
@@ -0,0 +1,3 @@
+====== Permiso Denegado ======
+
+Lo siento, no tienes suficientes permisos para continuar. ¿Quizás has olvidado identificarte? \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/diff.txt
new file mode 100644
index 000000000..e0e9e08ab
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/diff.txt
@@ -0,0 +1,4 @@
+====== Diferencias ======
+
+Muestra las diferencias entre dos versiones de la página.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/draft.txt
new file mode 100644
index 000000000..054d618b3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/draft.txt
@@ -0,0 +1,6 @@
+====== Fichero borrador encontrado ======
+
+Su última sesión de edición en esta página no se completó correctamente. DokuWiki guardó automáticamente un borrador mientras usted trabajaba; puede utilizar el borrador para continuar editándolo. Abajo se ven los datos que fueron guardados en su última sesión.
+
+Por favor decida si desea //recuperar// su sesión perdida, //eliminar// el borrador guardado automáticamente o //cancelar// el proceso de edición.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/edit.txt
new file mode 100644
index 000000000..55c3c1dc5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/edit.txt
@@ -0,0 +1,2 @@
+Edita la página y pulsa ''Guardar''. Mira [[wiki:syntax]] para sintaxis Wiki. Por favor edita la página solo si puedes **mejorarla**. Si quieres testear algunas cosas aprende a dar tus primeros pasos en el [[playground:playground]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/editrev.txt
new file mode 100644
index 000000000..4b587b7ce
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/editrev.txt
@@ -0,0 +1,2 @@
+**Has cargado una revisión vieja del documento!** Si la guardas crearás una versión nueva con estos datos.
+---- \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/index.txt
new file mode 100644
index 000000000..148e5f406
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/index.txt
@@ -0,0 +1,4 @@
+====== Ãndice ======
+
+Este es un índice de todas las páginas disponibles ordenado por [[doku>namespaces|espacios de nombres]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/install.html
new file mode 100644
index 000000000..c16d4c47c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/install.html
@@ -0,0 +1,14 @@
+<p>Esta página lo asiste en la primera vez que instala y configura
+<a href="http://dokuwiki.org">Dokuwiki</a>.
+Más información sobre este instalador está disponible en la
+<a href="http://dokuwiki.org/installer">página de documentación</a>.
+</p>
+
+<p>DokuWiki usa ficheros comunes para el almacenamiento de las páginas del wiki y otra información asociada a esas páginas (por ejemplo, imágenes, índices de archivos, revisiones viejas, etc). Para funcionar correctamente DokuWiki <strong>debe</strong> tener permisos de escritura en los directorios que contienen esos ficheros. Este instalador no es capaz de establecer permisos en directorios. Normalmente eso debe ser hecho a través de una consola de comandos o si usted usa servicios de hosting a través de FTP o el panel de control brindado por su hosting (e.g. cPanel).</p>
+
+<p>Este instalador configurará una <acronym title="lista de control de acceso">ACL</acronym>, que a su vez permite el acceso al administrador y acceso a los menúes de administración para instalación
+de plugins, administración de usuarios, administración de permisos para las páginas wiki y modificación de la configuración. A pesar que no es necesario para que DokuWiki funcione, hará que sea más fácil la administración.</p>
+
+<p>Usuarios experimentados o usuarios con requerimientos especiales deben usar estos enlaces para detalles concernientes a
+<a href="http://dokuwiki.org/install">instrucciones de instalación</a>
+y <a href="http://dokuwiki.org/config">configuración</a>.</p>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/lang.php
new file mode 100644
index 000000000..9d4995c52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/lang.php
@@ -0,0 +1,262 @@
+<?php
+/**
+ * spanish language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Zigor Astarbe <zigor@astarbe.com>
+ * @author Adrián Ariza <adrian_ariza.ciudad.com.ar>
+ * @author Gabiel Molina <gabriel191@gmail.com>
+ * @author Paco Avila <monkiki@gmail.com>
+ * @author Bernardo Arlandis Mañó <bernardo@tsolucio.com>
+ * @author Miguel Pagano <miguel.pagano@gmail.com>
+ * @author Oscar M. Lage <r0sk10@gmail.com>
+ * @author Gabriel Castillo <gch@pumas.ii.unam.mx>
+ * @author oliver@samera.com.py
+ * @author Enrico Nicoletto <liverig@gmail.com>
+ * @author Manuel Meco <manuel.meco@gmail.com>
+ * @author VictorCastelan <victorcastelan@gmail.com>
+ * @author Jordan Mero hack.jord@gmail.com
+ * @author Felipe Martinez <metalmartinez@gmail.com>
+ * @author Javier Aranda <internet@javierav.com>
+ * @author Zerial <fernando@zerial.org>
+ * @author Marvin Ortega <maty1206@maryanlinux.com>
+ * @author Daniel Castro Alvarado <dancas2@gmail.com>
+ * @author Fernando J. Gómez <fjgomez@gmail.com>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '“';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '‘';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = '’';
+$lang['btn_edit'] = 'Editar esta página';
+$lang['btn_source'] = 'Ver fuente';
+$lang['btn_show'] = 'Ver página';
+$lang['btn_create'] = 'Crear esta página';
+$lang['btn_search'] = 'Buscar';
+$lang['btn_save'] = 'Guardar';
+$lang['btn_preview'] = 'Previsualización';
+$lang['btn_top'] = 'Ir hasta arriba';
+$lang['btn_newer'] = '<< más reciente';
+$lang['btn_older'] = 'menos reciente >>';
+$lang['btn_revs'] = 'Revisiones antiguas';
+$lang['btn_recent'] = 'Cambios recientes';
+$lang['btn_upload'] = 'Cargar';
+$lang['btn_cancel'] = 'Cancelar';
+$lang['btn_index'] = 'Ãndice';
+$lang['btn_secedit'] = 'Editar';
+$lang['btn_login'] = 'Conectarse';
+$lang['btn_logout'] = 'Desconectarse';
+$lang['btn_admin'] = 'Administrar';
+$lang['btn_update'] = 'Actualizar';
+$lang['btn_delete'] = 'Borrar';
+$lang['btn_back'] = 'Atrás';
+$lang['btn_backlink'] = 'Enlaces anteriores';
+$lang['btn_backtomedia'] = 'Volver a la selección de archivos multimedia';
+$lang['btn_subscribe'] = 'Suscribirse a cambios de la página';
+$lang['btn_unsubscribe'] = 'Cancelar suscripción a cambios de la página';
+$lang['btn_subscribens'] = 'Suscribirse a cambios del espacio de nombres';
+$lang['btn_unsubscribens'] = 'Cancelar suscripción a cambios del espacio de nombres';
+$lang['btn_profile'] = 'Actualizar perfil';
+$lang['btn_reset'] = 'Restablecer';
+$lang['btn_resendpwd'] = 'Enviar nueva contraseña';
+$lang['btn_draft'] = 'Editar borrador';
+$lang['btn_recover'] = 'Recuperar borrador';
+$lang['btn_draftdel'] = 'Eliminar borrador';
+$lang['btn_revert'] = 'Restaurar';
+$lang['loggedinas'] = 'Conectado como ';
+$lang['user'] = 'Usuario';
+$lang['pass'] = 'Contraseña';
+$lang['newpass'] = 'Nueva contraseña';
+$lang['oldpass'] = 'Confirma tu contraseña actual';
+$lang['passchk'] = 'otra vez';
+$lang['remember'] = 'Recordarme';
+$lang['fullname'] = 'Nombre real';
+$lang['email'] = 'E-Mail';
+$lang['register'] = 'Registrarse';
+$lang['profile'] = 'Perfil del usuario';
+$lang['badlogin'] = 'Lo siento, el usuario o la contraseña es incorrecto.';
+$lang['minoredit'] = 'Cambios menores';
+$lang['draftdate'] = 'Borrador guardado automáticamente:';
+$lang['nosecedit'] = 'La página ha cambiado en el lapso, la información de sección estaba anticuada, en su lugar se cargó la página completa.';
+$lang['regmissing'] = 'Lo siento, tienes que completar todos los campos.';
+$lang['reguexists'] = 'Lo siento, ya existe un usuario con este nombre.';
+$lang['regsuccess'] = 'El usuario ha sido creado y la contraseña se ha enviado por correo.';
+$lang['regsuccess2'] = 'El usuario ha sido creado.';
+$lang['regmailfail'] = 'Parece que ha habido un error al enviar el correo con la contraseña. ¡Por favor, contacta al administrador!';
+$lang['regbadmail'] = 'La dirección de correo no parece válida. Si piensas que esto es un error, contacta al administrador';
+$lang['regbadpass'] = 'Las dos contraseñas no son iguales, por favor inténtalo de nuevo.';
+$lang['regpwmail'] = 'Tu contraseña de DokuWiki';
+$lang['reghere'] = '¿No tienes una cuenta todavía? Consigue una';
+$lang['profna'] = 'Este wiki no permite la modificación del perfil';
+$lang['profnochange'] = 'Sin cambios, nada que hacer.';
+$lang['profnoempty'] = 'No se permite que el nombre o la dirección de correo electrónico estén vacíos.';
+$lang['profchanged'] = 'Se actualizó correctamente el perfil del usuario.';
+$lang['pwdforget'] = '¿Has olvidado tu contraseña? Consigue una nueva';
+$lang['resendna'] = 'Este wiki no brinda la posibilidad de reenvío de contraseña.';
+$lang['resendpwd'] = 'Enviar una nueva contraseña para';
+$lang['resendpwdmissing'] = 'Lo siento, debes completar todos los campos.';
+$lang['resendpwdnouser'] = 'Lo siento, no se encuentra este usuario en nuestra base de datos.';
+$lang['resendpwdbadauth'] = 'Lo siento, este código de autenticación no es válido. Asegúrate de haber usado el enlace de confirmación entero.';
+$lang['resendpwdconfirm'] = 'Un enlace para confirmación ha sido enviado por correo electrónico.';
+$lang['resendpwdsuccess'] = 'Tu nueva contraseña ha sido enviada por correo electrónico.';
+$lang['license'] = 'Excepto donde se indique lo contrario, el contenido de esta wiki se autoriza bajo la siguiente licencia:';
+$lang['licenseok'] = 'Nota: Al editar esta página, estás de acuerdo en autorizar su contenido bajo la siguiente licencia:';
+$lang['searchmedia'] = 'Buscar archivo:';
+$lang['searchmedia_in'] = 'Buscar en %s';
+$lang['txt_upload'] = 'Selecciona el archivo a subir';
+$lang['txt_filename'] = 'Subir como (opcional)';
+$lang['txt_overwrt'] = 'Sobreescribir archivo existente';
+$lang['lockedby'] = 'Actualmente bloqueado por';
+$lang['lockexpire'] = 'El bloqueo expira en';
+$lang['willexpire'] = 'Tu bloqueo para editar esta página expira en un minuto.\nPara evitar conflictos usa el botón previsualizar para reiniciar el contador de tiempo.';
+$lang['notsavedyet'] = 'Los cambios que no se han guardado se perderán.\n¿Realmente quieres continuar?';
+$lang['rssfailed'] = 'Se ha producido un error mientras se leían los datos de este feed: ';
+$lang['nothingfound'] = 'No se ha encontrado nada.';
+$lang['mediaselect'] = 'Archivos Multimedia';
+$lang['fileupload'] = 'Subida de archivos multimedia';
+$lang['uploadsucc'] = 'El archivo se ha subido satisfactoriamente';
+$lang['uploadfail'] = 'La subida del fichero ha fallado. ¿Permisos equivocados?';
+$lang['uploadwrong'] = 'Subida de fichero denegada. ¡Los ficheros con esta extensión están prohibidos!';
+$lang['uploadexist'] = 'El fichero ya existe. No se ha hecho nada.';
+$lang['uploadbadcontent'] = 'El contenido de la subida no coincide con la extensión de fichero %s';
+$lang['uploadspam'] = 'La subida ha sido bloqueada por una lista negra de spam';
+$lang['uploadxss'] = 'La subida ha sido bloqueada por contenido posiblemente malicioso';
+$lang['uploadsize'] = 'El fichero subido es demasiado grande. (max. %s)';
+$lang['deletesucc'] = 'El fichero "%s" ha sido borrado.';
+$lang['deletefail'] = '"%s" no pudo ser borrado; verifique los permisos.';
+$lang['mediainuse'] = 'El fichero "%s" no ha sido borrado, aún está en uso.';
+$lang['namespaces'] = 'Espacios de nombres';
+$lang['mediafiles'] = 'Ficheros disponibles en';
+$lang['js']['searchmedia'] = 'Buscar archivos';
+$lang['js']['keepopen'] = 'Mantener la ventana abierta luego de seleccionar';
+$lang['js']['hidedetails'] = 'Ocultar detalles';
+$lang['js']['nosmblinks'] = 'El enlace a recursos compartidos de Windows sólo funciona en Microsoft Internet Explorer.
+Lo que sí puedes hacer es copiar y pegar el enlace.';
+$lang['js']['linkwiz'] = 'Asistente de enlaces';
+$lang['js']['linkto'] = 'Enlazar a:';
+$lang['js']['del_confirm'] = '¿Quieres realmente borrar lo seleccionado?';
+$lang['js']['mu_btn'] = 'Subir varios archivos a la vez';
+$lang['mediausage'] = 'Use la siguiente sintaxis para hacer referencia a este fichero:';
+$lang['mediaview'] = 'Ver el fichero original';
+$lang['mediaroot'] = 'root';
+$lang['mediaupload'] = 'Subir aquí un fichero al espacio de nombres actual. Para crear sub-espacios de nombres, antepóngalos al nombre de fichero separándolos por dos puntos (:) en "Subir como".';
+$lang['mediaextchange'] = 'Extensión del fichero cambiada de .%s a .%s!';
+$lang['reference'] = 'Referencias para';
+$lang['ref_inuse'] = 'El fichero no puede ser borrado, porque todavía se está usando en las siguientes páginas:';
+$lang['ref_hidden'] = 'Algunas referencias están en páginas sobre las que no tienes permiso de lectura';
+$lang['hits'] = 'Entradas';
+$lang['quickhits'] = 'Páginas que coinciden';
+$lang['toc'] = 'Tabla de Contenidos';
+$lang['current'] = 'actual';
+$lang['yours'] = 'Tu versión';
+$lang['diff'] = 'Muestra diferencias a la versión actual';
+$lang['diff2'] = 'Muestra las diferencias entre las revisiones seleccionadas';
+$lang['line'] = 'Línea';
+$lang['breadcrumb'] = 'Traza';
+$lang['youarehere'] = 'Estás aquí';
+$lang['lastmod'] = 'Última modificación';
+$lang['by'] = 'por';
+$lang['deleted'] = 'borrado';
+$lang['created'] = 'creado';
+$lang['restored'] = 'se ha restaurado la vieja versión';
+$lang['external_edit'] = 'editor externo';
+$lang['summary'] = 'Resumen de la edición';
+$lang['noflash'] = 'Para mostrar este contenido es necesario el <a href="http://www.adobe.com/products/flashplayer/">Plugin Adobe Flash</a>.';
+$lang['download'] = 'Descargar trozo de código fuente';
+$lang['mail_newpage'] = 'página añadida:';
+$lang['mail_changed'] = 'página cambiada:';
+$lang['mail_new_user'] = 'nuevo usuario:';
+$lang['mail_upload'] = 'archivo subido:';
+$lang['qb_bold'] = 'Negrita';
+$lang['qb_italic'] = 'Itálica';
+$lang['qb_underl'] = 'Subrayado';
+$lang['qb_code'] = 'Código';
+$lang['qb_strike'] = 'Tachado';
+$lang['qb_h1'] = 'Título 1';
+$lang['qb_h2'] = 'Título 2';
+$lang['qb_h3'] = 'Título 3';
+$lang['qb_h4'] = 'Título 4';
+$lang['qb_h5'] = 'Título 5';
+$lang['qb_h'] = 'Título';
+$lang['qb_hs'] = 'Selecciona el título';
+$lang['qb_hplus'] = 'Título alto';
+$lang['qb_hminus'] = 'Título bajo';
+$lang['qb_hequal'] = 'Título del mismo nivel';
+$lang['qb_link'] = 'Enlace interno';
+$lang['qb_extlink'] = 'Enlace externo';
+$lang['qb_hr'] = 'Línea horizontal';
+$lang['qb_ol'] = 'Ãtem de lista ordenada';
+$lang['qb_ul'] = 'Ãtem de lista desordenada';
+$lang['qb_media'] = 'Añadir Imágenes u otros ficheros';
+$lang['qb_sig'] = 'Insertar firma';
+$lang['qb_smileys'] = 'Sonrisas';
+$lang['qb_chars'] = 'Caracteres especiales';
+$lang['upperns'] = 'Saltar al espacio de nombres superior';
+$lang['admin_register'] = 'Añadir nuevo usuario';
+$lang['metaedit'] = 'Editar metadatos';
+$lang['metasaveerr'] = 'La escritura de los metadatos ha fallado';
+$lang['metasaveok'] = 'Los metadatos han sido guardados';
+$lang['img_backto'] = 'Volver a';
+$lang['img_title'] = 'Título';
+$lang['img_caption'] = 'Epígrafe';
+$lang['img_date'] = 'Fecha';
+$lang['img_fname'] = 'Nombre de fichero';
+$lang['img_fsize'] = 'Tamaño';
+$lang['img_artist'] = 'Fotógrafo';
+$lang['img_copyr'] = 'Copyright';
+$lang['img_format'] = 'Formato';
+$lang['img_camera'] = 'Cámara';
+$lang['img_keywords'] = 'Palabras claves';
+$lang['subscribe_success'] = '%s ha sido añadido a la lista de notificación de cambios de %s';
+$lang['subscribe_error'] = 'Ha habido un error al agregar %s a la lista de notificación de cambios de %s';
+$lang['subscribe_noaddress'] = 'No hay ninguna dirección de correo electrónico asociada con tu nombre de usuario, no puedes ser añadido a la lista de notificación de cambios';
+$lang['unsubscribe_success'] = '%s ha sido eliminado de la lista de notificación de cambios de %s';
+$lang['unsubscribe_error'] = 'Ha habido un error al eliminar %s de la lista de notificación de cambios de %s';
+$lang['authmodfailed'] = 'Está mal configurada la autenticación de usuarios. Por favor, avisa al administrador del wiki.';
+$lang['authtempfail'] = 'La autenticación de usuarios no está disponible temporalmente. Si esta situación persiste, por favor avisa al administrador del wiki.';
+$lang['i_chooselang'] = 'Elija su idioma';
+$lang['i_installer'] = 'Instalador de DokuWiki';
+$lang['i_wikiname'] = 'Nombre del wiki';
+$lang['i_enableacl'] = 'Habilitar ACL (recomendado) (ACL: lista de control de acceso)';
+$lang['i_superuser'] = 'Super-usuario';
+$lang['i_problems'] = 'El instalador encontró algunos problemas, se muestran abajo. No se puede continuar la instalación hasta que usted no los corrija.';
+$lang['i_modified'] = 'Por razones de seguridad este script sólo funcionará con una instalación nueva y no modificada de Dokuwiki. Usted debe extraer nuevamente los ficheros del paquete bajado, o bien consultar las <a href="http://dokuwiki.org/install">instrucciones de instalación de Dokuwiki</a> completas.';
+$lang['i_funcna'] = 'La función de PHP <code>%s</code> no está disponible. Tal vez su proveedor de hosting la ha deshabilitado por alguna razón?';
+$lang['i_phpver'] = 'Su versión de PHP <code>%s</code> es menor que la necesaria <code>%s</code>. Es necesario que actualice su instalación de PHP.';
+$lang['i_permfail'] = 'DokuWili no puede escribir <code>%s</code>. Es necesario establecer correctamente los permisos de este directorio!';
+$lang['i_confexists'] = '<code>%s</code> ya existe';
+$lang['i_writeerr'] = 'Imposible crear <code>%s</code>. Se necesita que usted controle los permisos del fichero/directorio y que cree el fichero manualmente.';
+$lang['i_badhash'] = 'dokuwiki.php no reconocido o modificado (hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - valor ilegal o vacío';
+$lang['i_success'] = 'La configuración ha concluido correctamente. Ahora puede eliminar el archivo install.php. Visite <a href="doku.php">su nuevo DokuWiki</a>.';
+$lang['i_failure'] = 'Han ocurrido algunos errores durante la escritura de los ficheros de configuración. Puede ser que necesite corregirlos manualmente antes de poder usar <a href="doku.php">su nuevo DokuWiki</a>.';
+$lang['i_policy'] = 'Política de ACL inicial';
+$lang['i_pol0'] = 'Wiki abierto (leer, escribir y subir archivos para todos)';
+$lang['i_pol1'] = 'Wiki público (leer para todos, escribir y subir archivos para usuarios registrados únicamente)';
+$lang['i_pol2'] = 'Wiki cerrado (leer, escribir y subir archivos para usuarios registrados únicamente)';
+$lang['i_retry'] = 'Reintentar';
+$lang['mu_intro'] = 'Puedes subir varios archivos a la vez desde aquí. Pulsa el botón del navegador para agregarlos a la cola. Pulsa "subir archivo" para proceder.';
+$lang['mu_gridname'] = 'Nombre de archivo';
+$lang['mu_gridsize'] = 'Tamaño';
+$lang['mu_gridstat'] = 'Estado';
+$lang['mu_namespace'] = 'Espacio de nombres';
+$lang['mu_browse'] = 'Buscar';
+$lang['mu_toobig'] = 'demasiado grande';
+$lang['mu_ready'] = 'listo para subir';
+$lang['mu_done'] = 'completado';
+$lang['mu_fail'] = 'falló';
+$lang['mu_authfail'] = 'la sesión caducó';
+$lang['mu_progress'] = '@PCT@% transferido';
+$lang['mu_filetypes'] = 'Tipos de archivos permitidos';
+$lang['mu_info'] = 'Archivos subidos:';
+$lang['mu_lasterr'] = 'Último error:';
+$lang['recent_global'] = 'Actualmente estás viendo los cambios dentro del namespace <b>%s</b>. También puedes <a href="%s">ver los cambios recientes en el wiki completo</a>.';
+$lang['years'] = '%d años atrás';
+$lang['months'] = '%d meses atrás';
+$lang['weeks'] = '%d semanas atrás';
+$lang['days'] = '%d días atrás';
+$lang['hours'] = '%d horas atrás';
+$lang['minutes'] = '%d minutos atrás';
+$lang['seconds'] = '%d segundos atrás';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/locked.txt
new file mode 100644
index 000000000..e151bf7e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/locked.txt
@@ -0,0 +1,3 @@
+====== Página bloqueada ======
+
+Esta página está actualmente bloqueada porque la está editando otro usuario. Tienes que esperar a que termine de editarla o el bloqueo expire. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/login.txt
new file mode 100644
index 000000000..a8d9be7a9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/login.txt
@@ -0,0 +1,3 @@
+====== Login ======
+
+¡Actualmente no estás identificado! Introduce abajo tus datos de identificación para abrir una sesión. Necesitas tener las cookies activadas para identificarte.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/mailtext.txt
new file mode 100644
index 000000000..893ec1cb9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/mailtext.txt
@@ -0,0 +1,17 @@
+Se ha cambiado o añadido una página en tu DokuWiki. Aquí están los detalles:
+
+Fecha : @DATE@
+Navegador : @BROWSER@
+Dirección-IP : @IPADDRESS@
+Nombre de Host : @HOSTNAME@
+Revisión Vieja: @OLDPAGE@
+Revisión Nueva : @NEWPAGE@
+Resumen de la edición: @SUMMARY@
+Usuario : @USER@
+
+@DIFF@
+
+
+--
+Este correo ha sido generado por DokuWiki en
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/newpage.txt
new file mode 100644
index 000000000..d119ca29d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/newpage.txt
@@ -0,0 +1,3 @@
+====== Este tema no existe todavía ======
+
+Has seguido un enlace a un tema que no existe todavía. Puedes crearlo usando el botón ''Crea esta página''.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/norev.txt
new file mode 100644
index 000000000..42ee6b5c2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/norev.txt
@@ -0,0 +1,4 @@
+====== No existe esta revision ======
+
+La revisión especificada no existe. Usa el botón ''Revisiones antiguas'' para una lista de revisiones antiguas de este documento.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/preview.txt
new file mode 100644
index 000000000..b4d5a2ed1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/preview.txt
@@ -0,0 +1,4 @@
+====== Previsualización ======
+
+Esto es una previsualización de cómo aparecerá tu texto. Recuerda: **no está guardado** todavía!
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/pwconfirm.txt
new file mode 100644
index 000000000..c3dad116e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/pwconfirm.txt
@@ -0,0 +1,16 @@
+Hola @FULLNAME@!
+
+Alguien solicitó una nueva contraseña para su nombre de
+usuario @TITLE@ en @DOKUWIKIURL@
+
+Si usted no solicitó una nueva contraseña, simplemente ignore este email.
+
+Para confirmar que la solicitud fue realizada realmente por usted,
+por favor use el siguiente enlace.
+
+@CONFIRM@
+
+
+--
+Este mail ha sido generado por DokuWiki en
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/read.txt
new file mode 100644
index 000000000..461b745fb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/read.txt
@@ -0,0 +1 @@
+Esta página es de solo lectura. Puedes ver la fuente pero no puedes cambiarla. Pregunta a tu administrador si crees que esto es incorrecto.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/recent.txt
new file mode 100644
index 000000000..432def26f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/recent.txt
@@ -0,0 +1,5 @@
+====== Cambios Recientes ======
+
+Las siguientes páginas han sido modificadas recientemente.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/register.txt
new file mode 100644
index 000000000..98248269d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/register.txt
@@ -0,0 +1,3 @@
+====== Registro como nuevo usuario ======
+
+Completa toda la información del formulario para crear un nuevo usuario en este wiki. Asegúrate que escribes una **dirección de e-mail válida** puesto que allí se enviará tu contraseña. El nombre de usuario ha de ser un nombre válido según [[doku>pagename|pagename]].
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/registermail.txt
new file mode 100644
index 000000000..e773e3200
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/registermail.txt
@@ -0,0 +1,14 @@
+Un nuevo usuario ha sido registrado. Aquí están los detalles:
+
+Usuario : @NEWUSER@
+Nombre completo : @NEWNAME@
+E-Mail : @NEWEMAIL@
+
+Fecha : @DATE@
+Navegador : @BROWSER@
+Dirección-IP : @IPADDRESS@
+Nombre del host : @HOSTNAME@
+
+--
+Este mail ha sido generado por DokuWiki en
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/resendpwd.txt
new file mode 100644
index 000000000..1d74e79bb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/resendpwd.txt
@@ -0,0 +1,3 @@
+====== Enviar nueva contraseña ======
+
+Completa la información requerida abajo para obtener una nueva contraseña para tu cuenta de usuario en este wiki. La nueva contraseña te será enviada a la dirección de mail que está registrada.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/revisions.txt
new file mode 100644
index 000000000..b093e857f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/revisions.txt
@@ -0,0 +1,4 @@
+====== Revisiones Antiguas ======
+
+Estas son revisiones más antiguas del documento actual. Para volver a una revisión antigua selecciónala de abajo, pulsa ''Edita esta página'' y guárdala.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/searchpage.txt
new file mode 100644
index 000000000..47a1a90dd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/searchpage.txt
@@ -0,0 +1,5 @@
+====== Búsqueda ======
+
+Puedes encontrar los resultados de tu búsqueda abajo. Si no has encontrado lo que buscabas, puedes crear una nueva página con tu consulta utilizando el botón ''Crea esta página''.
+
+===== Resultados ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/showrev.txt
new file mode 100644
index 000000000..c84bbc01d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/showrev.txt
@@ -0,0 +1,2 @@
+**¡Esta es una revisión vieja del documento!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/stopwords.txt
new file mode 100644
index 000000000..256908925
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/stopwords.txt
@@ -0,0 +1,171 @@
+# Esta es una lista de palabras que estan ignoradas por el indexador, una palabra por línea
+# Cuando se edita este archivo, asegúrese de usar la línea de terminaciones UNIX (una sola nueva línea)
+# No necesita incluir palabras cortas con 3 caracteres - estas son ignoradas de todos modos
+#Esta lista esta basada en las que encontramos en la siguiente url http://www.ranks.nl/stopwords/
+una
+unas
+unos
+uno
+sobre
+todo
+también
+tras
+otro
+algún
+alguno
+alguna
+algunos
+algunas
+ser
+soy
+eres
+somos
+sois
+estoy
+esta
+estamos
+estais
+estan
+como
+para
+atras
+porque
+por
+qué
+estado
+estaba
+ante
+antes
+siendo
+ambos
+pero
+poder
+puede
+puedo
+podemos
+podeis
+pueden
+fui
+fue
+fuimos
+fueron
+hacer
+hago
+hace
+hacemos
+haceis
+hacen
+cada
+fin
+incluso
+primero
+desde
+conseguir
+consigo
+consigue
+consigues
+conseguimos
+consiguen
+voy
+va
+vamos
+vais
+van
+vaya
+gueno
+tener
+tengo
+tiene
+tenemos
+teneis
+tienen
+las
+los
+aqui
+mio
+tuyo
+ellos
+ellas
+nos
+nosotros
+vosotros
+vosotras
+dentro
+solo
+solamente
+saber
+sabes
+sabe
+sabemos
+sabeis
+saben
+ultimo
+largo
+bastante
+haces
+muchos
+aquellos
+aquellas
+sus
+entonces
+tiempo
+verdad
+verdadero
+verdadera
+cierto
+ciertos
+cierta
+ciertas
+intentar
+intento
+intenta
+intentas
+intentamos
+intentais
+intentan
+dos
+bajo
+arriba
+encima
+usar
+uso
+usas
+usa
+usamos
+usais
+usan
+emplear
+empleo
+empleas
+emplean
+ampleamos
+empleais
+valor
+muy
+era
+eras
+eramos
+eran
+modo
+bien
+cual
+cuando
+donde
+mientras
+quien
+con
+entre
+sin
+trabajo
+trabajar
+trabajas
+trabaja
+trabajamos
+trabajais
+trabajan
+podria
+podrias
+podriamos
+podrian
+podriais
+aquel
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/subscribermail.txt
new file mode 100644
index 000000000..05be8557a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/subscribermail.txt
@@ -0,0 +1,23 @@
+¡Hola!
+
+La página @PAGE@ en el wiki @TITLE@ ha cambiado.
+Los cambios son los siguientes:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Fecha : @DATE@
+Usuario : @USER@
+Resumen de la edición: @SUMMARY@
+Revisión vieja: @OLDPAGE@
+Revisión nueva: @NEWPAGE@
+
+Para cacelar las notificaciones, ingresa al wiki
+en @DOKUWIKIURL@ y luego visita la página
+@NEWPAGE@
+y elige 'Cancelar suscripción'.
+
+--
+Este mail fue generado por DokuWiki en
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/updateprofile.txt
new file mode 100644
index 000000000..822e558f8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/updateprofile.txt
@@ -0,0 +1,3 @@
+====== Actualiza el perfil de tu cuenta de usuario ======
+
+Sólo necesitas completar aquellos campos que quieres cambiar. No puedes cambiar tu nombre de usuario.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/uploadmail.txt
new file mode 100644
index 000000000..9d2f980d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/uploadmail.txt
@@ -0,0 +1,14 @@
+Se ha subido un fichero a tu DokuWuki. Estos son los detalles:
+
+Archivo : @MEDIA@
+Fecha : @DATE@
+Navegador : @BROWSER@
+Dirección IP : @IPADDRESS@
+Hostname : @HOSTNAME@
+Tamaño : @SIZE@
+MIME Type : @MIME@
+Usuario : @USER@
+
+--
+Este correo fue generado por DokuWiki en
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/wordblock.txt
new file mode 100644
index 000000000..739a1b76b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/wordblock.txt
@@ -0,0 +1,4 @@
+====== SPAM bloqueado ======
+
+Tus cambios **no** se han guardado porque contienen una o más palabras prohibidas. Si has intentado spamear el Wiki: ¡Perro malo! Si crees que es un error contacta con el administrador de este Wiki.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/admin.txt
new file mode 100644
index 000000000..1934f482b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/admin.txt
@@ -0,0 +1,4 @@
+====== Administreerimine ======
+
+Alljärgnevalt leiate nimekirja administratiivsetest tegevustest, mida DokuWiki võimaldab.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/backlinks.txt
new file mode 100644
index 000000000..4b405cdfd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/backlinks.txt
@@ -0,0 +1,4 @@
+====== Siia lehele lingiga haagitud lehed ======
+
+Nimekiri nendest lehtedest, kuskohalt Sa lingi abil siia lehele saad.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/conflict.txt
new file mode 100644
index 000000000..cf9f571ab
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/conflict.txt
@@ -0,0 +1,6 @@
+====== Uus versioon täitsa olemas ======
+
+Sellest dokumendist, mis Sa toimetasid on tegelikult juba olemas ka uuem versioon. Selline asi juhtub siis kui sel ajal kui Sina vaikselt oma dokumendi kallal nokitsesid tegi keegi juba kähku omad Muutused sealsamas dokumendis ära.
+
+Vaata hoolikalt allpool näidatud erinevusi ja siis otsusta millise versiooni alles jätad. Kui Sa peaks valima ''salvesta'', siis juhtubki selline lugu, et Sinu versioon salvestatakse. kui Sa aga peaks klõpsama ''katkesta'' säilib hetkel kehtiv versioon.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/denied.txt
new file mode 100644
index 000000000..bb564ac57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/denied.txt
@@ -0,0 +1,3 @@
+====== Sul pole ligipääsuluba ======
+
+Kahju küll, aga sinu tublidusest ei piisa, et edasi liikuda, selleks on vastavaid õigusi vaja.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/diff.txt
new file mode 100644
index 000000000..d10a93b84
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/diff.txt
@@ -0,0 +1,4 @@
+====== Erinevused ======
+
+Siin näed erinevusi valitud versiooni ja hetkel kehtiva lehekülje vahel.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/draft.txt
new file mode 100644
index 000000000..6669f3be5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/draft.txt
@@ -0,0 +1,6 @@
+====== Leidsin katkenud toimetamise ======
+
+Sinu viimane toimetamissessioon ei lõppenud eelmine kord korrapäraselt. DokuWiki automaatselt salvestas Sinu pooliku töö, mida võid nüüd kasutada töö jätkamiseks. Allpool näed teksti, mis suudeti päästa.
+
+Kas tahad //taastada// kaotused, //kustutada// poolik töö või //üldse mitte midagi teha//?
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/edit.txt
new file mode 100644
index 000000000..6167c8552
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/edit.txt
@@ -0,0 +1,2 @@
+Toimeta seda lehte ja klõpsa ''Salvesta'' peal. Wikis teksti kujundamise vahenditega tutvumiseks, st. kuidas teha rasvast ja kaldkirja jne., vaata [[wiki:syntax|süntaksitutvustus lehelt]]. Kui Sa tahad midagi testida, saad seda teha [[playground:playground|mängualal]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/editrev.txt
new file mode 100644
index 000000000..3ab6d7161
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/editrev.txt
@@ -0,0 +1,3 @@
+**Sa oled omale tõmmanud selle dokumendi vana versiooni!** Kui Sa selle salvestad sünnib nende andmetega uus versioon.
+----
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/index.txt
new file mode 100644
index 000000000..8d2e25a68
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/index.txt
@@ -0,0 +1,3 @@
+====== Sisukord ======
+
+See siin on nimekiri kõigist saadaval olevatest lehtedest järjestatud [[doku>namespaces|alajaotuste]] järgi.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/lang.php
new file mode 100644
index 000000000..4d3f10bdc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/lang.php
@@ -0,0 +1,214 @@
+<?php
+/**
+ * Estonian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Oliver S6ro <seem.iges@mail.ee>
+ * @author Aari Juhanson <aari@vmg.vil.ee>
+ * @author Kaiko Kaur <kaiko@kultuur.edu.ee>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '„';//&bdquo;
+$lang['doublequoteclosing'] = '“';//&ldquo;
+$lang['singlequoteopening'] = '‚';//&sbquo;
+$lang['singlequoteclosing'] = '‘';//&lsquo;
+
+$lang['btn_edit'] = 'Toimeta seda lehte';
+$lang['btn_source'] = 'Näita lehepõhja';
+$lang['btn_show'] = 'Näita lehte';
+$lang['btn_create'] = 'Tekita selle lingi alla leht';
+$lang['btn_search'] = 'Otsi';
+$lang['btn_save'] = 'Salvesta';
+$lang['btn_preview']= 'Eelvaade';
+$lang['btn_top'] = 'Tagasi lehe algusesse';
+$lang['btn_revs'] = 'Eelmised versioonid';
+$lang['btn_recent'] = 'Viimased muudatused';
+$lang['btn_upload'] = 'Lae üles';
+$lang['btn_cancel'] = 'Katkesta';
+$lang['btn_index'] = 'Sisukord';
+$lang['btn_secedit']= 'Toimeta';
+$lang['btn_login'] = 'Logi sisse';
+$lang['btn_logout'] = 'Logi välja';
+$lang['btn_admin'] = 'Administreeri';
+$lang['btn_update'] = 'Uuenda';
+$lang['btn_delete'] = 'Kustuta';
+$lang['btn_newer'] = '<< varajasemad';
+$lang['btn_older'] = '>> hilisemad';
+$lang['btn_back'] = 'Tagasi';
+$lang['btn_backtomedia'] = 'Tagasi faili valikusse';
+$lang['btn_profile'] = 'Minu info';
+$lang['btn_reset'] = 'Taasta';
+$lang['btn_resendpwd'] = 'Saada uus parool';
+$lang['btn_draft'] = 'Toimeta mustandit';
+$lang['btn_recover'] = 'Taata mustand';
+$lang['btn_draftdel'] = 'Kustuta mustand';
+$lang['newpass'] = 'Uus parool';
+$lang['oldpass'] = 'Vana parool';
+$lang['passchk'] = 'Korda uut parooli';
+$lang['profile'] = 'Kasutaja info';
+$lang['minoredit'] = 'Ebaolulised muudatused';
+$lang['draftdate'] = 'Mustand automaatselt salvestatud';
+$lang['regsuccess2'] = 'Kasutaja sai tehtud.';
+$lang['regbadpass'] = 'Uus parool on kirjutatud erinevalt. Proovi uuesti.';
+$lang['uploadexist'] = 'Fail on juba olemas. Midagi ei muudetud.';
+$lang['deletesucc'] = 'Fail nimega "%s" sai kustutatud.';
+$lang['deletefail'] = 'Faili nimega "%s" ei kustutatud (kontrolli õigusi).';
+$lang['mediainuse'] = 'Faili nimega "%s" ei kustutatud, sest see on kasutuses.';
+$lang['js']['keepopen'] = 'Jäta aken peale valiku sooritamist avatuks';
+$lang['js']['hidedetails'] = 'Peida detailid';
+$lang['mediausage'] = 'Kasuta järgmist kirjapilti sellele failile viitamaks:';
+$lang['mediaview'] = 'Vaata faili algsel kujul.';
+$lang['mediaroot'] = 'juur';
+$lang['mediaupload'] = 'Lae fail sellesse nimeruumi (kataloogi). Et tekitada veel alam nimeruum kasuta koolonit Wiki nimes.';
+$lang['mediaextchange'] = 'Faili laiend .%s-st %s-ks!';
+$lang['ref_inuse'] = 'Seda faili ei saa kustutada, sest teda kasutavad järgmised lehed:';
+$lang['ref_hidden'] = 'Mõned viidad failile on lehtedel, millele sul ei ole ligipääsu';
+$lang['youarehere'] = 'Sa oled siin';
+$lang['mail_new_user'] = 'Uus kasutaja:';
+$lang['qb_strike'] = 'Läbijoonitud tekst';
+$lang['qb_smileys'] = 'Emotikonid';
+$lang['qb_chars'] = 'Erisümbolid';
+$lang['admin_register'] = 'Lisa kasutaja';
+
+
+#$lang['reference'] = '';
+#$lang['btn_backlink'] = '';
+#$lang['profna'] = '';
+$lang['btn_subscribe'] = 'Jälgi seda lehte (teated meilile)';
+$lang['btn_unsubscribe'] = 'Lõpeta lehe jälgimine';
+$lang['profnochange'] = 'Muutused puuduvad.';
+$lang['profnoempty'] = 'Tühi nimi ega meiliaadress pole lubatud.';
+$lang['profchanged'] = 'Kasutaja info edukalt muudetud';
+$lang['pwdforget'] = 'Unustasid parooli? Tee uus';
+$lang['resendna'] = 'See wiki ei toeta parooli taassaatmist.';
+$lang['resendpwd'] = 'Saada uus parool';
+$lang['resendpwdmissing'] = 'Khmm... Sa pead täitma kõik väljad.';
+$lang['resendpwdnouser'] = 'Aga sellist kasutajat ei ole.';
+$lang['resendpwdbadauth'] = 'See autentimiskood ei ole õige. Kontrolli, et kopeerisid terve lingi.';
+$lang['resendpwdconfirm'] = 'Kinnituslink saadeti meilile.';
+$lang['resendpwdsuccess'] = 'Uus parool saadeti Sinu meilile.';
+$lang['txt_overwrt'] = 'Kirjutan olemasoleva faili üle';
+$lang['metaedit'] = 'Muuda lisainfot';
+$lang['metasaveerr'] = 'Lisainfo salvestamine läks untsu.';
+$lang['metasaveok'] = 'Lisainfo salvestatud';
+$lang['img_backto'] = 'Tagasi';
+$lang['img_title'] = 'Tiitel';
+$lang['img_caption'] = 'Kirjeldus';
+$lang['img_date'] = 'Kuupäev';
+$lang['img_fname'] = 'Faili nimi';
+$lang['img_fsize'] = 'Suurus';
+$lang['img_artist'] = 'Autor';
+#$lang['img_copyr'] = '';
+$lang['img_format'] = 'Formaat';
+$lang['img_camera'] = 'Kaamera';
+$lang['img_keywords'] = 'Võtmesõnad';
+
+$lang['i_chooselang'] = 'Vali keel';
+$lang['i_installer'] = 'DokuWiki paigaldaja';
+$lang['i_wikiname'] = 'Wiki nimi';
+$lang['i_enableacl'] = 'Kas lubada kasutajate haldus (soovitatav)';
+$lang['i_superuser'] = 'Superkasutaja';
+$lang['i_problems'] = 'Paigaldaja leidis mõned vead, mis on allpool välja toodud. Enne vigade eemaldamist ei saa jätkata.';
+$lang['i_modified'] = 'Õnnetuste vältimiseks läheb see skript käima ainult värskelt paigaldatud ja muutmata Dokuwiki peal.
+ Sa peaksid ilmselt kogu koodi uuesti lahti pakkima. Vaata ka <a href="http://dokuwiki.org/install">Dokuwiki installeerimis juhendit</a>';
+$lang['i_funcna'] = 'PHP funktsiooni <code>%s</code> ei ole olemas.võibolla sinu serveri hooldaja on selle mingil põhjusel keelanud?';
+$lang['i_permfail'] = 'Dokuwiki ei saa kirjutada faili <code>%s</code>. Kontrolli serveris failide õigused üle.';
+$lang['i_confexists'] = '<code>%s</code> on juba olemas';
+$lang['i_writeerr'] = 'Faili <code>%s</code> ei lubata tekitada. Kontrolli kataloogi ja faili õigusi.';
+#$lang['i_badhash'] = '';
+$lang['i_badval'] = '<code>%s</code> - lubamatu või tühi väärtus';
+$lang['i_success'] = 'Seadistamine on õnnelikult lõpule viidud. Sa võid nüüd kustutada faili install.php. Alusta oma <a href="doku.php">uue DokuWiki</a> täitmist.';
+$lang['i_failure'] = 'Konfiguratsiooni faili kirjutamisel esines vigu. Võimalik, et pead need käsitsi parandama enne <a href="doku.php">uue DokuWiki</a> täitma asumist.';
+$lang['i_policy'] = 'Wiki õiguste algne poliitika';
+$lang['i_pol0'] = 'Avatud (lugemine, kirjutamine ja üleslaadimine kõigile lubatud)';
+$lang['i_pol1'] = 'Avalikuks lugemiseks (lugeda saavad kõik, kirjutada ja üles laadida vaid registreeritud kasutajad)';
+$lang['i_pol2'] = 'Suletud (kõik õigused, kaasaarvatud lugemine on lubatud vaid registreeritud kasutajatele)';
+
+$lang['loggedinas'] = 'Logis sisse kui';
+$lang['user'] = 'Kasutaja';
+$lang['pass'] = 'Parool';
+$lang['remember'] = 'Pea mind meeles';
+$lang['fullname'] = 'Täielik nimi';
+$lang['email'] = 'E-post';
+$lang['register'] = 'Registreeri uus kasutaja';
+$lang['badlogin'] = 'Oops, Sinu kasutajanimi või parool oli vale.';
+
+$lang['regmissing'] = 'Kõik väljad tuleb ära täita.';
+$lang['reguexists'] = 'Tegelikult on sellise nimega kasutaja juba olemas.';
+$lang['regsuccess'] = 'Kasutaja sai tehtud. Parool saadeti Sulle e-posti aadressil.';
+$lang['regmailfail']= 'Ilmselt tekkis e-posti teel parooli saatmisel mingi tõrge. Palun suhtle sel teemal
+oma serveri administraatoriga!';
+$lang['regbadmail'] = 'Tundub, et Sinu antud e-posti aadress ei toimi - kui Sa arvad, et tegemist on
+ekstitusega, suhtle oma serveri administraatoriga';
+$lang['regpwmail'] = 'Sinu DokuWiki parool';
+$lang['reghere'] = 'Sul ei olegi veel kasutajakontot? No aga tekita see siis endale!';
+
+$lang['txt_upload'] = 'Vali fail, mida üles laadida';
+$lang['txt_filename'] = 'Siseta oma Wikinimi (soovituslik)';
+$lang['lockedby'] = 'Praegu on selle lukustanud';
+$lang['lockexpire'] = 'Lukustus aegub';
+$lang['willexpire'] = 'Teie lukustus selle lehe toimetamisele aegub umbes minuti pärast.\nIgasugu probleemide vältimiseks kasuta eelvaate nuppu, et lukustusarvesti taas tööle panna.';
+
+$lang['notsavedyet'] = 'Sul on seal salvestamata muudatusi, mis kohe kõige kaduva teed lähevad.\nKas Sa ikka tahad edasi liikuda?';
+$lang['rssfailed'] = 'Sinu soovitud info ammutamisel tekkis viga: ';
+$lang['nothingfound']= 'Oops, aga mitte muhvigi ei leitud.';
+
+$lang['mediaselect'] = 'Hunnik faile';
+$lang['fileupload'] = 'Faili üleslaadimine';
+$lang['uploadsucc'] = 'Üleslaadimine läks ootuspäraselt hästi';
+$lang['uploadfail'] = 'Üleslaadimine läks nässu. Äkki pole Sa selleks lihtsalt piisavalt võimukas tegija?';
+$lang['uploadwrong'] = 'Ei saa Sa midagi üles laadida. Oops, aga seda tüüpi faili sul lihtsalt ei lubata üles laadida';
+$lang['namespaces'] = 'Alajaotus';
+$lang['mediafiles'] = 'Failid on Sulle kättesaadavad';
+
+$lang['hits'] = 'Päringu tabamused';
+$lang['quickhits'] = 'Päringule vastavad lehed';
+$lang['toc'] = 'Sisujuht';
+$lang['current'] = 'Hetkel kehtiv';
+$lang['yours'] = 'Sinu versioon';
+$lang['diff'] = 'Näita erinevusi hetkel kehtiva versiooniga';
+$lang['line'] = 'Rida';
+$lang['breadcrumb'] = 'Käidud rada';
+$lang['lastmod'] = 'Viimati muutnud';
+$lang['by'] = 'persoon';
+$lang['deleted'] = 'eemaldatud';
+$lang['created'] = 'tekitatud';
+$lang['restored'] = 'vana versioon taastatud';
+$lang['summary'] = 'kokkuvõte muudatustest';
+
+$lang['mail_newpage'] = 'leht lisatud:';
+$lang['mail_changed'] = 'leht muudetud';
+
+$lang['nosmblinks'] = 'Windowsis võrguarvutiga ühendamine toimib ainult Internet Exploreris ja
+sisevõrgus.\nAga Sa saad õnneks omale lingi kopeerida ja hiljem kuhugi kleepida.';
+
+$lang['qb_bold'] = 'Rasvane kiri';
+$lang['qb_italic'] = 'Kaldkiri';
+$lang['qb_underl'] = 'Alajoonega kiri';
+$lang['qb_code'] = 'Koodi tekst';
+$lang['qb_h1'] = '1. astme pealkiri';
+$lang['qb_h2'] = '2. astme pealkiri';
+$lang['qb_h3'] = '3. astme pealkiri';
+$lang['qb_h4'] = '4. astme pealkiri';
+$lang['qb_h5'] = '5. astme pealkiri';
+$lang['qb_link'] = 'Siselink';
+$lang['qb_extlink'] = 'Välislink';
+$lang['qb_hr'] = 'Horisontaalne vahejoon';
+$lang['qb_ol'] = 'Nummerdatud nimikiri';
+$lang['qb_ul'] = 'Mummuga nimekiri';
+$lang['qb_media'] = 'Lisa pilte ja muid faile';
+$lang['qb_sig'] = 'Lisa allkiri!';
+
+$lang['authmodfailed'] = 'Vigane kasutajate autentimise konfiguratsioon. Palun teavita sellest serveri haldajat.';
+$lang['authtempfail'] = 'Kasutajate autentimine on ajutiselt rivist väljas. Kui see olukord mõne aja jooksul ei parane, siis teavita sellest serveri haldajat.';
+
+$lang['js']['del_confirm']= 'Kas kustutame selle kirje?';
+
+#$lang['subscribe_success'] = '';
+#$lang['subscribe_error'] = '';
+#$lang['subscribe_noaddress'] = '';
+#$lang['unsubscribe_success'] = '';
+#$lang['unsubscribe_error'] = '';
+
+//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/locked.txt
new file mode 100644
index 000000000..0fd2743ad
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/locked.txt
@@ -0,0 +1,3 @@
+====== Leht lukustatud ======
+
+Hetkel on see leht lukustatud kuna teine kasutaja toimetab tema kallal. Sa pead ootama kuni ta kas lõpetab või lukustus aegub.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/login.txt
new file mode 100644
index 000000000..3e746cd8d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/login.txt
@@ -0,0 +1,3 @@
+====== Logi sisse ======
+
+Hetkel pole Sa sisse logitud! Allpool saad sisestada kõik vajaliku, et sisse logida. Kui Sa oled oma arvuti taga ainukasutaja oleks hea kui Su arvutil oleks lubatud 'cookies', st. järgmine kord kui siia lehele tuled oled automaatselt sisse logitud.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/mailtext.txt
new file mode 100644
index 000000000..3214584f5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/mailtext.txt
@@ -0,0 +1,16 @@
+Sinu lehte DokuWiki-s on muudetud. Alljärgnevalt detailid:
+
+Kuupäev : @DATE@
+Brauser : @BROWSER@
+IP-Aadress : @IPADDRESS@
+Arvuti nimi : @HOSTNAME@
+Eelnev versioon : @OLDPAGE@
+Uus versioon : @NEWPAGE@
+Toimeta kokkuvõtet: @SUMMARY@
+Kasutaja : @USER@
+
+@DIFF@
+
+
+--
+Selle e-posti tekitas Sulle DokuWiki @DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/newpage.txt
new file mode 100644
index 000000000..fb78e6434
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/newpage.txt
@@ -0,0 +1,3 @@
+====== Seda teemat veel ei ole ======
+
+Sa klikkisid lingile, mille all teemat veel pole. Selle saad Sa tekitada kasutades ''Tekita see leht nuppu''.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/norev.txt
new file mode 100644
index 000000000..42d204f2d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/norev.txt
@@ -0,0 +1,4 @@
+====== Sellist versiooni pole ======
+
+Sellist versiooni ei ole olemas. Selle dokumendi eelmiste versioonide nägemiseks klõpsa ''Eelmised versioonid'' nupul.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/preview.txt
new file mode 100644
index 000000000..df45c65ae
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/preview.txt
@@ -0,0 +1,3 @@
+====== Eelvaade ======
+
+Siin saad eelnevalt vaadata, milline su tekst välja näeks. Pea aga meeles, et see **ei ole veel salvestatud** !
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/pwconfirm.txt
new file mode 100644
index 000000000..4f17140e0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/pwconfirm.txt
@@ -0,0 +1,12 @@
+Tere @FULLNAME@!
+
+Keegi on Sinu parooli uuendust soovinud kasutajale @TITLE@ (@DOKUWIKIURL@).
+
+Kui see ei olnud Sina, siis võid seda meili lihtsalt ignoreerida.
+Kinnitamaks uue parooli saamise soovi mine aadressile:
+
+@CONFIRM@
+
+--
+See meil on saadetud DokuWiki poolt
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/read.txt
new file mode 100644
index 000000000..64696f079
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/read.txt
@@ -0,0 +1,2 @@
+Seda lehte saad ainult lugeda. Saad küll vaadata lehe põhja aga muuta midagi ei saa. Suhtle oma serveri administraatoriga kui Sa millegagi rahul pole.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/recent.txt
new file mode 100644
index 000000000..cf7a85420
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/recent.txt
@@ -0,0 +1,5 @@
+====== Viimased muutused ======
+
+Viimati muudeti alljärgnevaid lehti.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/register.txt
new file mode 100644
index 000000000..9cd0b911d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/register.txt
@@ -0,0 +1,4 @@
+====== Registreeri uus kasutaja ======
+
+Täida alljärgnevad lüngad et me saaks Sulle Wikis kasutajakonto tekitada. Ole nii kena ja kindlasti pane kirja oma **kehtiv e-posti aadress** - Sinu uus parool saadetakse sellele aadressile. Sisselogimise nimi peaks olema kehtiv [[doku>pagename|lehenimi]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/registermail.txt
new file mode 100644
index 000000000..47d2ef14c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/registermail.txt
@@ -0,0 +1,14 @@
+Uus kasutaja on registreeritud. Tema info:
+
+Kasutaja : @NEWUSER@
+Täielik nimi : @NEWNAME@
+E-post : @NEWEMAIL@
+
+Kuupäev : @DATE@
+Lehitseja : @BROWSER@
+IP-Aaddress : @IPADDRESS@
+Hosti nimi : @HOSTNAME@
+
+--
+See meil on saadetud DokuWiki poolt
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/resendpwd.txt
new file mode 100644
index 000000000..cd0ef8d10
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/resendpwd.txt
@@ -0,0 +1,4 @@
+====== Saada uus parool ======
+
+Palun sisesta oma kasutaja nimi, et saada uut parooli. Soovi kinnitamiseks saadame Sinu meilile lingi.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/revisions.txt
new file mode 100644
index 000000000..c546a1f14
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/revisions.txt
@@ -0,0 +1,4 @@
+====== eelnevad versioonid ======
+
+Need on käesoleva dokumendi eelnevad versioonid. Vana versiooni juurde tagasi pöördumiseks vali sobiv, klõpsa ''Toimeta seda lehte'' peal ja salvesta see.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/searchpage.txt
new file mode 100644
index 000000000..bbc86b637
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/searchpage.txt
@@ -0,0 +1,5 @@
+====== Otsi ======
+
+Leiad vasted oma otsingule. Kui Sa otsitavat ei leidnud võid tekitada oma otsingu nimelise uue lehe kasutades ''Toimeta seda lehte'' nuppu.
+
+===== Vasted =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/showrev.txt
new file mode 100644
index 000000000..ef73d74a2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/showrev.txt
@@ -0,0 +1,2 @@
+**See on dokumendi vana versioon!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/stopwords.txt
new file mode 100644
index 000000000..5dda5f797
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/stopwords.txt
@@ -0,0 +1,15 @@
+# This is a list of words the indexer ignores, one word per line
+# When you edit this file be sure to use UNIX line endings (single newline)
+# No need to include words shorter than 3 chars - these are ignored anyway
+# This list is based upon the ones found at http://www.ranks.nl/stopwords/
+ning
+ega
+see
+mina
+sina
+tema
+meie
+teie
+nemad
+com
+www
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/subscribermail.txt
new file mode 100644
index 000000000..76ce2845f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/subscribermail.txt
@@ -0,0 +1,17 @@
+Tere!
+
+Lehekülg @PAGE@ on muutunud (@TITLE@).
+Siin on muudatused:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Selle lehe jälgimisest loobumiseks logi wikisse sisse
+@DOKUWIKIURL@ ja siis külasta
+@NEWPAGE@
+ning vali sealt 'Lõpeta jälgimine'.
+
+--
+See meil on saadetud DokuWiki poolt
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/updateprofile.txt
new file mode 100644
index 000000000..35da12801
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/updateprofile.txt
@@ -0,0 +1,5 @@
+====== Uuenda oma kasutaja infot ======
+
+Täida ainult need väljad, mida tahad uuendada. Uuendada ei saa kasutajanime.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/wordblock.txt
new file mode 100644
index 000000000..65d0d6ac3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/wordblock.txt
@@ -0,0 +1,4 @@
+====== SPÄMM blokeeritud ======
+
+Sinu muutusi kahjuks **ei** salvestatud kuna tekst sisaldab ühte või rohkem blokeeritud sõna. Kas Sa üritad Wikile spämmi saata -- oh sa põrsas! Kui aga arvad, et tegemist on eksitusega, siis suhtle Wiki administraatoriga.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/admin.txt
new file mode 100644
index 000000000..13673263c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/admin.txt
@@ -0,0 +1,3 @@
+====== Kudeaketa ======
+
+Jarraian wikia kudeatzeko erabilgarri dauden tresnak aurki ditzakezu.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/backlinks.txt
new file mode 100644
index 000000000..8cbb7b6d2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/backlinks.txt
@@ -0,0 +1,3 @@
+====== Itzulera Estekak ======
+
+Orri honetara bueltan estekatzen dutela diruditen orrien lista bat da honakoa. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/conflict.txt
new file mode 100644
index 000000000..d7d0d337e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/conflict.txt
@@ -0,0 +1,5 @@
+====== Bertsio berriago bat existitzen da ======
+
+Editatu duzun dokumentua baino bertsio berriago existitzen da. Editatzen ari zarela beste erabiltzaile batek dokumentua aldatzen duenean gertatzen da hau.
+
+Aztertu arretaz behean erakutsitako desberdintasunak eta erabaki zein bertsio mantendu. Zure aukera "Gorde" bada, zure bertsioa gordeko da. Uneko bertsioa mantentzeko "ezeztatu" sakatu. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/denied.txt
new file mode 100644
index 000000000..257076a3d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/denied.txt
@@ -0,0 +1,3 @@
+====== Ez duzu baimenik ======
+
+Barkatu, ez duzu baimenik orri hau ikusteko. Agian sesioa hastea ahaztu zaizu? \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/diff.txt
new file mode 100644
index 000000000..8d335ea2e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/diff.txt
@@ -0,0 +1,4 @@
+====== Aldaketak ======
+
+Aukeratutako bertsioaren eta egungo bertsioaren arteko aldaketak aurkezten ditu.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/draft.txt
new file mode 100644
index 000000000..5d64b0b36
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/draft.txt
@@ -0,0 +1,5 @@
+====== Zirriborro fitxategia aurkitu da ======
+
+Zure azken edizio saioa orri honetan ez zen zuzen burutu. DokuWiki-k automatikoki zirriborro bat gorde zuen lanean ari zinen bitartean eta orain zure edizioa jarraitzeko erabili dezakezu. Behean ikusi dezakezu zure asken saioan gorde ziren datuak.
+
+Erabaki mesedez zure edizio saio galdua //berreskuratu// nahi duzun, automatikoki gordetako zirriborroa //ezabatu// nahi duzun edo edizio prozesua //ezeztatu// nahi duzun. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/edit.txt
new file mode 100644
index 000000000..c117731ef
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/edit.txt
@@ -0,0 +1 @@
+Egin aldaketak eta ''Gorde'' pultsatu. Begiratu [[wiki:syntax]] Wiki-aren sintaxiarentzat. Mesedez aldaketak orrialdea **hobetzeko** bakarrik egin itzazu. Probak egin nahi badituzu, ikas ezazu [[playground:playground]] erabiltzen.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/editrev.txt
new file mode 100644
index 000000000..920cd89ec
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/editrev.txt
@@ -0,0 +1,2 @@
+**Dokumentuaren bertsio zahar bat ireki duzu!** Gordetzen baduzu bertsio berri bat sortuko duzu datu hauekin.
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/index.txt
new file mode 100644
index 000000000..30f88498a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/index.txt
@@ -0,0 +1,4 @@
+====== Aurkibidea ======
+
+[[doku>namespaces|namespaces]] bitartez ordenatutako aurkibidea da hau.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/install.html
new file mode 100644
index 000000000..81f1efd95
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/install.html
@@ -0,0 +1,9 @@
+<p>Orri honek <a href="http://dokuwiki.org">Dokuwiki-ren</a> lehenengo instalazioan eta konfigurazioan gidatzen du. Instalatzaile honen informazio gehiago eskuragarri dago bere <a href="http://dokuwiki.org/installer">dokumentazio orrian</a>.</p>
+
+<p>DokuWikik fitxategi arruntak erabiltzen ditu wiki orriak eta orri horiekin erlazionatutako informazioa (adb. irudiak, bilaketa indizeak, azken berrikuspenak, etab.) gordetzeko. Modu egokian funtziona dezan, DokuWikik idazketa baimena <strong>behar</strong> du fitxategi horiek gordetzen dituzten direktorioetan. Instalatzaile hau ez da gai direktorio baimenak ezartzeko. Hori normalean komando bidez egin beharra dago, edo hosting bat erabiliz gero, FTP bidez edo hosting-aren kontrol panel bidez (adb. cPanel).</p>
+
+<p>Instalatzaile honek zure DokiWikiren konfigurazioa ezarriko du
+<acronym title="atzipen kontrol lista">AKL</acronym>rentzat, zeinak administratzaileei ahalbidetzen dien saioa hasi eta DokuWikiren administrazio menua atzitzea plugin-ak instalatu, erabiltzaileak kudeatu, wiki orrietara atzipenak kudeatu eta konfigurazio aukerak aldatzeko. Hau ez da beharrezkoa DokuWikirentzat funtziona ahal dezan, baina DokuWiki administratzeko errazagoa egingo du.</p>
+
+<p>Esperientziadun erabiltzaileek edo ezarpen behar bereziak dituzten erabiltzaileek honako estekak erabili beharko lituzkete xehetasun gehiago lortzeko
+<a href="http://dokuwiki.org/install">instalazio azalpenen</a> inguruan eta <a href="http://dokuwiki.org/config">konfigurazio ezarpenen</a> inguruan.</p> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/lang.php
new file mode 100644
index 000000000..8324e2587
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/lang.php
@@ -0,0 +1,223 @@
+<?php
+/**
+ * Basque language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Xabi Ezpeleta <xezpeleta@mendikute.com>
+ * @author Inko Illarramendi <inko.i.a@gmail.com>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '“';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '‘';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = '’';
+$lang['btn_edit'] = 'Aldatu orri hau';
+$lang['btn_source'] = 'Kodea ikusi';
+$lang['btn_show'] = 'Orria ikusi';
+$lang['btn_create'] = 'Sortu orri hau';
+$lang['btn_search'] = 'Bilatu';
+$lang['btn_save'] = 'Gorde';
+$lang['btn_preview'] = 'Aurrebista';
+$lang['btn_top'] = 'Itzuli gora';
+$lang['btn_newer'] = '<< berriagoa';
+$lang['btn_older'] = 'zaharragoa >>';
+$lang['btn_revs'] = 'Berrikuspen zaharrak';
+$lang['btn_recent'] = 'Azken aldaketak';
+$lang['btn_upload'] = 'Ireki';
+$lang['btn_cancel'] = 'Ezeztatu';
+$lang['btn_index'] = 'Aurkibidea';
+$lang['btn_secedit'] = 'Aldatu';
+$lang['btn_login'] = 'Sartu';
+$lang['btn_logout'] = 'Irten';
+$lang['btn_admin'] = 'Admin';
+$lang['btn_update'] = 'Eguneratu';
+$lang['btn_delete'] = 'Ezabatu';
+$lang['btn_back'] = 'Atzera';
+$lang['btn_backlink'] = 'Itzulera estekak';
+$lang['btn_backtomedia'] = 'Atzera Multimedia Fitxategiaren Aukeraketara';
+$lang['btn_subscribe'] = 'Harpidetu Orri Aldaketetara';
+$lang['btn_unsubscribe'] = 'Utzi Harpidetza Orri Aldaketetara';
+$lang['btn_subscribens'] = 'Harpidetu Izen-espazio Aldaketetara';
+$lang['btn_unsubscribens'] = 'Utzi Harpidetza Izen-espazio Aldaketetara';
+$lang['btn_profile'] = 'Eguneratu Profila ';
+$lang['btn_reset'] = 'Aldaketak Desegin';
+$lang['btn_resendpwd'] = 'Pasahitz berria bidali';
+$lang['btn_draft'] = 'Editatu zirriborroa';
+$lang['btn_recover'] = 'Berreskuratu zirriborroa';
+$lang['btn_draftdel'] = 'Ezabatu zirriborroa';
+$lang['loggedinas'] = 'Erabiltzailea';
+$lang['user'] = 'Erabiltzailea';
+$lang['pass'] = 'Pasahitza';
+$lang['newpass'] = 'Pasahitz berria';
+$lang['oldpass'] = 'Baieztatu oraingo pasahitza';
+$lang['passchk'] = 'berriz';
+$lang['remember'] = 'Gogoratu';
+$lang['fullname'] = 'Izen Deiturak';
+$lang['email'] = 'E-Maila';
+$lang['register'] = 'Erregistratu';
+$lang['profile'] = 'Erabiltzaile Profila';
+$lang['badlogin'] = 'Barkatu, prozesuak huts egin du; saiatu berriz';
+$lang['minoredit'] = 'Aldaketa Txikiak';
+$lang['draftdate'] = 'Zirriborroa automatikoki gorde da hemen:';
+$lang['nosecedit'] = 'Orria aldatua izan da bitartean, info atala zaharkituta geratu da, orri osoa kargatu da horren ordez.';
+$lang['regmissing'] = 'Barkatu, hutsune guztiak bete behar dituzu.';
+$lang['reguexists'] = 'Barkatu, izen bereko erabiltzailea existitzen da.';
+$lang['regsuccess'] = 'Erabiltzailea sortu da. Pasahitza mailez bidaliko zaizu.';
+$lang['regsuccess2'] = 'Erabiltzailea sortua izan da.';
+$lang['regmailfail'] = 'Badirudi arazoren bat egon dela pasahitza mailez bidaltzeko orduan. Administratzailearekin harremanetan jarri!';
+$lang['regbadmail'] = 'Emandako helbidea ez da zuzena - jarri harremanetan administratzailearekin hau akats bat dela uste baduzu';
+$lang['regbadpass'] = 'Idatzitako bi pasahitzak ez dira berdinak, berriz saiatu.';
+$lang['regpwmail'] = 'Zure DokuWiki pasahitza';
+$lang['reghere'] = 'Oraindik ez duzu konturik? Eginzazu bat!';
+$lang['profna'] = 'Wiki honek ez du profilaren aldaketa ahalbidetzen';
+$lang['profnochange'] = 'Aldaketarik ez, ez dago egiteko ezer.';
+$lang['profnoempty'] = 'Izen edota e-posta hutsa ez dago onartua.';
+$lang['profchanged'] = 'Erabiltzaile profila arrakastaz eguneratua.';
+$lang['pwdforget'] = 'Pasahitza ahaztu duzu? Eskuratu berri bat';
+$lang['resendna'] = 'Wiki honek ez du pasahitz berbidalketa onartzen.';
+$lang['resendpwd'] = 'Bidali pasahitz berria honentzat:';
+$lang['resendpwdmissing'] = 'Barkatu, eremu guztiak bete behar dituzu.';
+$lang['resendpwdnouser'] = 'Barkatu, ez dugu erabiltzaile hori datu-basean aurkitzen';
+$lang['resendpwdbadauth'] = 'Barkatu, kautotze kodea ez da baliozkoa. Ziurtatu baieztapen esteka osoa erabili duzula.';
+$lang['resendpwdconfirm'] = 'Baieztapen esteka bat e-postaz bidali da.';
+$lang['resendpwdsuccess'] = 'Zure pasahitz berria e-postaz bidali da.';
+$lang['license'] = 'Besterik esan ezean, wiki hontako edukia ondorengo lizentziapean argitaratzen da:';
+$lang['licenseok'] = 'Oharra: Orri hau editatzean, zure edukia ondorengo lizentziapean argitaratzea onartzen duzu: ';
+$lang['txt_upload'] = 'Ireki nahi den fitxategia aukeratu';
+$lang['txt_filename'] = 'Idatzi wikiname-a (aukerazkoa)';
+$lang['txt_overwrt'] = 'Oraingo fitxategiaren gainean idatzi';
+$lang['lockedby'] = 'Momentu honetan blokeatzen:';
+$lang['lockexpire'] = 'Blokeaketa iraungitzen da:';
+$lang['willexpire'] = 'Zure blokeaketa orri hau aldatzeko minutu batean iraungitzen da.\nGatazkak saihesteko, aurreikusi botoia erabili blokeaketa denboragailua berrabiarazteko.';
+$lang['notsavedyet'] = 'Gorde gabeko aldaketak galdu egingo dira.\nBenetan jarraitu nahi duzu?';
+$lang['rssfailed'] = 'Errorea gertatu da feed hau irakurtzean:';
+$lang['nothingfound'] = 'Ez da ezer aurkitu.';
+$lang['mediaselect'] = 'Aukeratu Multimedia fitxategia';
+$lang['fileupload'] = 'Igo Multimedia Fitxategia';
+$lang['uploadsucc'] = 'Igoera arrakastatsua';
+$lang['uploadfail'] = 'Igoerak huts egin du. Baimen arazoengatik agian?';
+$lang['uploadwrong'] = 'Fitxategi igoera ukatua. Fitxategi-luzapen hau debekatua dago!';
+$lang['uploadexist'] = 'Fitxategia lehenagotik existitzen da. Ez da ezer egin.';
+$lang['uploadbadcontent'] = 'Igotako edukia ez dator bat %s fitxategi-luzapenarekin.';
+$lang['uploadspam'] = 'Igoera spam zerrenda beltzak blokeatu du.';
+$lang['uploadxss'] = 'Igoera blokeatua izan da eduki maltzurra edukitzeko susmoagatik.';
+$lang['uploadsize'] = 'Igotako fitxategia handiegia zen. (max. %s)';
+$lang['deletesucc'] = 'Ezabatua izan da "%s" fitxategia.';
+$lang['deletefail'] = 'Ezin izan da "%s" ezabatu - egiaztatu baimenak.';
+$lang['mediainuse'] = 'Ez da "%s" fitxategia ezabatu - oraindik erabilia izaten ari da.';
+$lang['namespaces'] = 'Izen-espazioak';
+$lang['mediafiles'] = 'Fitxategiak eskuragarri hemen:';
+$lang['js']['keepopen'] = 'Mantendu leihoa irekita aukeraketan';
+$lang['js']['hidedetails'] = 'Xehetasunak Ezkutatu';
+$lang['js']['nosmblinks'] = 'Window baliabide konpartituetara estekek Microsoft Internet Explorer-en bakarrik balio dute.
+Esteka kopiatu eta itsatsi dezakezu dena den.';
+$lang['js']['mu_btn'] = 'Igo hainbat fitxategi aldi berean';
+$lang['mediausage'] = 'Erabili ondoko sintaxia fitxategi honi erreferentzia egiteko:';
+$lang['mediaview'] = 'Ikusi jatorrizko fitxategia';
+$lang['mediaroot'] = 'root';
+$lang['mediaupload'] = 'Igo fitxategi bat uneko izen-espaziora. Azpi-izen-espazioak sortzeko, zure "Honela igo" fitxategi izenaren aurretik ezarri, bi puntuz (:) bananduta.';
+$lang['mediaextchange'] = 'Fitxategi-luzapena aldatua .%s -tik .%s! -ra';
+$lang['reference'] = 'Erreferentziak honentzat:';
+$lang['ref_inuse'] = 'Fitxategia ezin da ezabatu, honako orri hauek erabiltzen dutelako:';
+$lang['ref_hidden'] = 'Erreferentzi batzuk irakurtzeko baimenik ez duzun orrietan daude';
+$lang['hits'] = 'Hits';
+$lang['quickhits'] = 'Matching pagenames';
+$lang['toc'] = 'Eduki Taula';
+$lang['current'] = 'egungoa';
+$lang['yours'] = 'Zure Bertsioa';
+$lang['diff'] = 'egungo bertsioarekin dituen aldaketak aurkezten ditu';
+$lang['diff2'] = 'Erakutsi desberdintasunak aukeratutako bertsioen artean';
+$lang['line'] = 'Marra';
+$lang['breadcrumb'] = 'Traza';
+$lang['youarehere'] = 'Hemen zaude';
+$lang['lastmod'] = 'Azken aldaketa';
+$lang['by'] = 'egilea:';
+$lang['deleted'] = 'ezabatua';
+$lang['created'] = 'sortua';
+$lang['restored'] = 'bertsio zaharra berrezarria';
+$lang['external_edit'] = 'kanpoko aldaketa';
+$lang['summary'] = 'Aldatu laburpena';
+$lang['noflash'] = '<a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> beharrezkoa da eduki hau bistaratzeko.';
+$lang['mail_newpage'] = '[DokuWiki] gehitutako orria:';
+$lang['mail_changed'] = '[DokuWiki] aldatutako orria:';
+$lang['mail_new_user'] = 'erabiltzaile berria:';
+$lang['mail_upload'] = 'fitxategia igota:';
+$lang['qb_bold'] = 'Letra beltzez';
+$lang['qb_italic'] = 'Letra italiarrez';
+$lang['qb_underl'] = 'Azpimarratua';
+$lang['qb_code'] = 'Kodea';
+$lang['qb_strike'] = 'Marratu Testua';
+$lang['qb_h1'] = 'Izenburua 1';
+$lang['qb_h2'] = 'Izenburua 2';
+$lang['qb_h3'] = 'Izenburua 3';
+$lang['qb_h4'] = 'Izenburua 4';
+$lang['qb_h5'] = 'Izenburua 5';
+$lang['qb_link'] = 'Barruko Lotura';
+$lang['qb_extlink'] = 'Kanpoko Lotura';
+$lang['qb_hr'] = 'Horizontal Marra';
+$lang['qb_ol'] = 'Zerrenda ordenatuko gaia';
+$lang['qb_ul'] = 'Zerrenda desordenatuko gaia';
+$lang['qb_media'] = 'Irudiak eta beste fitxategiak gehitu';
+$lang['qb_sig'] = 'Gehitu sinadura';
+$lang['qb_smileys'] = 'Irrifartxoak';
+$lang['qb_chars'] = 'Karaktere Bereziak';
+$lang['js']['del_confirm'] = 'Benetan ezabatu aukeratutako fitxategia(k)?';
+$lang['admin_register'] = 'Erabiltzaile berria gehitu';
+$lang['metaedit'] = 'Metadatua Aldatu';
+$lang['metasaveerr'] = 'Metadatuaren idazketak huts egin du';
+$lang['metasaveok'] = 'Metadatua gordea';
+$lang['img_backto'] = 'Atzera hona';
+$lang['img_title'] = 'Izenburua';
+$lang['img_caption'] = 'Epigrafea';
+$lang['img_date'] = 'Data';
+$lang['img_fname'] = 'Fitxategi izena';
+$lang['img_fsize'] = 'Tamaina';
+$lang['img_artist'] = 'Artista';
+$lang['img_copyr'] = 'Copyright';
+$lang['img_format'] = 'Formatua';
+$lang['img_camera'] = 'Kamera';
+$lang['img_keywords'] = 'Hitz-gakoak';
+$lang['subscribe_success'] = 'Gehitua %s %s harpidetza zerrendara';
+$lang['subscribe_error'] = 'Errorea %s gehitzen %s harpidetza zerrendara';
+$lang['subscribe_noaddress'] = 'Ez dago posta elektroniko helbiderik zure erabiltzaile izenarekin erlazionatuta, ezin zara harpidetza zerrendara gehitua izan';
+$lang['unsubscribe_success'] = 'Ezabatua %s %s harpidetza zerrendatik';
+$lang['unsubscribe_error'] = 'Errorea %s ezabatzen %s harpidetza zerrendatik';
+$lang['authmodfailed'] = 'Erabiltzaile kautotzearen konfigurazioa okerra da. Mesedez, eman honen berri Wiki administratzaileari';
+$lang['authtempfail'] = 'Erabiltzaile kautotzea denboraldi batez ez dago erabilgarri. Egoerak hala jarraitzen badu, mesedez, eman honen berri Wiki administratzaileari';
+$lang['i_chooselang'] = 'Hautatu zure hizkuntza';
+$lang['i_installer'] = 'DokuWiki instalatzailea';
+$lang['i_wikiname'] = 'Wiki Izena';
+$lang['i_enableacl'] = 'Gaitu ACL (gomendatua) (ACL: Atzipen Kontrol Lista)';
+$lang['i_superuser'] = 'Supererabiltzailea';
+$lang['i_problems'] = 'Instalatzaileak arazo batzuk aurkitu ditu, behean azalduak. Ezin duzu horiek konpondu arte jarraitu.';
+$lang['i_modified'] = 'Segurtasun arrazoiengatik, script hau DokuWikiren instalazio berri eta aldatu gabeko batekin bakarrik dabil. Deskargatutako paketetik fitxategiak berriz atera edo <a href="http://dokuwiki.org/install">DokuWikiren instalazio azalpenak</a> osorik irakurri beharko zenituzke.';
+$lang['i_funcna'] = 'PHP <code>%s</code> funtzioa ez dago erabilgarri. Agian zure hosting hornitzaileak arrazoiren batengatik ezgaituko zuen?';
+$lang['i_phpver'] = 'Zure PHP <code>%s</code> bertsioa behar den <code>%s</code> bertsioa baino zaharragoa da. PHP instalazioa eguneratu beharra daukazu.';
+$lang['i_permfail'] = 'DokuWiki ez da <code>%s</code> idazteko gai. Direktorio honen baimenen konfigurazioa konpondu behar duzu!';
+$lang['i_confexists'] = '<code>%s</code> lehendik existitzen da';
+$lang['i_writeerr'] = 'Ezin da <code>%s</code> sortu. Direktorioaren/fitxategiaren baimenak egiaztatu eta sortu fitxategia eskuz.';
+$lang['i_badhash'] = 'aldatutakoa edo ezezaguna den dokuwiki.php (hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - balioa arauen aurka edo hutsa';
+$lang['i_success'] = 'Konfigurazioa arrakastaz amaitu da. Orain, install.php fitxategia ezabatu dezakezu. Jarraitu ezazu <a href="doku.php">zure DokuWiki berrian</a>.';
+$lang['i_failure'] = 'Akats batzuk gertatu dira konfigurazio fitxategiak idazterakoan. Hauek eskuz konpondu beharra izan dezakezu <a href="doku.php">zure DokuWiki berria</a> erabili ahal izan aurretik.';
+$lang['i_policy'] = 'Hasierako ACL politika';
+$lang['i_pol0'] = 'Wiki Irekia (irakurri, idatzi, fitxategiak igo edonorentzat)';
+$lang['i_pol1'] = 'Wiki Publikoa (irakurri edonorentzat, idatzi eta fitxategiak igo erregistratutako erabiltzaileentzat)';
+$lang['i_pol2'] = 'Wiki Itxia (irakurri, idatzi, fitxategiak igo erregistratutako erabiltzaileentzat soilik)';
+$lang['i_retry'] = 'Berriz saiatu';
+$lang['mu_intro'] = 'Hemen hainbat fitxategi aldi berean igo ditzakezu. Egin klik nabigazio botoian hauek ilarara gehitzeko. Sakatu igo botoia prest egotean.';
+$lang['mu_gridname'] = 'Fitxategi izena';
+$lang['mu_gridsize'] = 'Tamaina';
+$lang['mu_gridstat'] = 'Egoera';
+$lang['mu_namespace'] = 'Izen-espazioa';
+$lang['mu_browse'] = 'Nabigatu';
+$lang['mu_toobig'] = 'handiegia';
+$lang['mu_ready'] = 'igotzeko prest';
+$lang['mu_done'] = 'amaitua';
+$lang['mu_fail'] = 'hutsegitea';
+$lang['mu_authfail'] = 'saioa iraungita';
+$lang['mu_progress'] = '@PCT@% igota';
+$lang['mu_filetypes'] = 'Onartutako Fitxategi Motak';
+$lang['recent_global'] = 'Une honetan <b>%s</b> izen-espazioaren barneko aldaketak ikusten ari zara.<a href="%s"> Wiki osoaren azken aldaketak</a> ere ikusi ditzakezu.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/locked.txt
new file mode 100644
index 000000000..dc29e51a5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/locked.txt
@@ -0,0 +1,3 @@
+====== Orria blokeatua ======
+
+Orrialde hau blokeatua dago beste erabiltzaile batengatik. Berak aldaketak bukatu arte itxaron beharko duzu.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/login.txt
new file mode 100644
index 000000000..ebb1607d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/login.txt
@@ -0,0 +1,4 @@
+====== Login ======
+
+Ez duzu sesiorik hasi! Sar ezazu zure erabiltzaile izena eta pasahitza. Gogoratu coockie-ak baimenduta izan behar dituzula.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/mailtext.txt
new file mode 100644
index 000000000..86ab1a3a7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/mailtext.txt
@@ -0,0 +1,17 @@
+DokuWiki-Eskuliburuetan orriren bat aldatu edo gehitu da. Hemen dituzu xehetasunak
+
+Data : @DATE@
+Nabigatzailea : @BROWSER@
+IP-Helbidea : @IPADDRESS@
+Host izena : @HOSTNAME@
+Bertsio zaharra : @OLDPAGE@
+Bertsio berria : @NEWPAGE@
+Aldatu laburpena : @SUMMARY@
+Erabiltzailea : @USER@
+
+@DIFF@
+
+
+--
+Email hau DokuWiki erabiliz sortu da;
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/newpage.txt
new file mode 100644
index 000000000..cac872ce1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/newpage.txt
@@ -0,0 +1,3 @@
+====== Gai hau ez da existitzen oraindik ======
+
+Existitzen ez den gai batera doan lotura bat jarraitu duzu. Zuk zeuk sortu dezakezu ''Sortu orri hau'' erabiliz.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/norev.txt
new file mode 100644
index 000000000..7d9cc60d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/norev.txt
@@ -0,0 +1,3 @@
+====== Berrikuspen hau ez da existitzen ======
+
+Zehaztutako bertsioa ez da existitzen. Erabili ''Bertsio zaharrak'' dokumentu honen aurreko bertsioen zerrenda bat ikusi ahal izateko.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/preview.txt
new file mode 100644
index 000000000..1f0d14f5e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/preview.txt
@@ -0,0 +1,3 @@
+====== Aurreikuspena ======
+
+Hau zure testuaren aurrebista bat besterik ez da. Gogoratu: **ez da gorde** oraindik!
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/pwconfirm.txt
new file mode 100644
index 000000000..0f0fd5e8f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/pwconfirm.txt
@@ -0,0 +1,12 @@
+Kaixo @FULLNAME@!
+
+Norbaitek zure @TITLE@ erabiltzailearentzat pasahitz berria eskatu du @DOKUWIKIURL@ gunean.
+
+Ez baduzu zuk eskatu pasahitz berria, ez kasurik egin posta honi.
+
+Eskakizuna zuk bidalia dela egiaztatzeko, mesedez, ondorengo esteka erabili.
+
+@CONFIRM@
+
+--
+Posta hau @DOKUWIKIURL@ gunean DokuWikik sortua izan da. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/read.txt
new file mode 100644
index 000000000..f7ed7b071
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/read.txt
@@ -0,0 +1 @@
+Orri hau irakurtzeko bakarrik da. Jatorria ikusi dezakezu baina ezin duzu aldatu. Administratzailearekin kontaktuan jarri gaizki dagoela uste baduzu.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/recent.txt
new file mode 100644
index 000000000..4ab5482ce
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/recent.txt
@@ -0,0 +1,3 @@
+====== Azken Aldaketak ======
+
+Ondorengo orriak aldatu berriak izan dira:
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/register.txt
new file mode 100644
index 000000000..4a8a49bd7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/register.txt
@@ -0,0 +1,3 @@
+====== Erregistratu erabiltzaile berri bezala ======
+
+Bete beheko informazio guztia wiki honetan kontu berri bat sortzeko. Ziurtatu **baliozko posta-e helbide** bat ematen duzula - ez bazaizu hemen eskatzen pasahitzik sartzeko, berri bat bidaliko zaizu helbide horretara. Saioa hasteko izenak baliozko [[doku>pagename|orri izena]] izan behar du. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/registermail.txt
new file mode 100644
index 000000000..a0154444e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/registermail.txt
@@ -0,0 +1,13 @@
+Erabiltzaile berri bat erregistratu da. Hona hemen xehetasunak:
+
+Erabiltzaile izena : @NEWUSER@
+Izen osoa : @NEWNAME@
+Posta-e : @NEWEMAIL@
+
+Data : @DATE@
+Nabigatzailea : @BROWSER@
+IP-Helbidea : @IPADDRESS@
+Hostalari izena : @HOSTNAME@
+
+--
+Posta hau @DOKUWIKIURL@ gunean DokuWikik sortua izan da. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/resendpwd.txt
new file mode 100644
index 000000000..98f261cd8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/resendpwd.txt
@@ -0,0 +1,3 @@
+====== Bidali pasahitz berria ======
+
+Mesedez, sartu zure erabiltzaile izena beheko formularioan zure wiki honetako kontuarentzat pasahitz berria eskatzeko. Baieztapen esteka bat bidaliko zaizu erregistratutako zure posta-e helbidera. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/revisions.txt
new file mode 100644
index 000000000..203cb7e43
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/revisions.txt
@@ -0,0 +1,3 @@
+====== Bertsio zaharrak ======
+
+Hauek egungo dokumentua baino zaharragoak diren bertsioak dira. Hauetako bertsio batetara itzultzeko aukera ezazu behetik, pultsatu ''Sortu orri hau'' eta gorde.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/searchpage.txt
new file mode 100644
index 000000000..2a487a3bb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/searchpage.txt
@@ -0,0 +1,5 @@
+====== Bilaketa ======
+
+Emaitzak ondorengo aurkiketan bilatu ditzakezu. Bilatzen zabiltzana aurkitu ez baduzu, zuk zeuk sortu dezakezu orri berri bat bilaketa ostean ''Sortu orri hau'' erabiliz.
+
+===== Bilaketa emaitzak: =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/showrev.txt
new file mode 100644
index 000000000..ad1b36057
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/showrev.txt
@@ -0,0 +1,2 @@
+**Hau dokumentuaren bertsio zahar bat da!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/stopwords.txt
new file mode 100644
index 000000000..1aeb868bc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/stopwords.txt
@@ -0,0 +1,26 @@
+# Lista hau, indexatzaileak alde batera uzten dituen hitzen zerrenda da, hitz bat lerroko
+# Fitxategi hau editatzean, ziurtatu UNIX lerro bukaerak (lerro berri bakarra) erabiltzen duzula
+# Ez dago 3 letra baino motzagoak diren hitzik sartu beharrik - bestela ere baztertuak dira
+# This list is based upon the ones found at http://www.ranks.nl/stopwords/
+# FITXATEGI HONEK BEGIRATU BAT BEHAR DU!
+buruz
+dira
+da
+eta
+zure
+haiek
+haien
+com
+nondik
+nora
+nola
+zer
+hau
+zen
+noiz
+non
+nor
+nork
+und
+the
+www \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/subscribermail.txt
new file mode 100644
index 000000000..9e5503a8b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/subscribermail.txt
@@ -0,0 +1,13 @@
+Kaixo!
+
+@PAGE@ orria @TITLE@ wikian aldatua izan da.
+Hona hemen aldaketak:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Orri jakinarazpenak ezeztatzeko, hasi saioa @DOKUWIKIURL@ wikian, bisitatu @NEWPAGE@ eta orriaren eta/edo izen-espazioaren harpidetza utzi.
+
+--
+Posta hau @DOKUWIKIURL@ gunean DokuWikik sortua izan da. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/updateprofile.txt
new file mode 100644
index 000000000..233bfecf1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/updateprofile.txt
@@ -0,0 +1,3 @@
+====== Eguneratu zure kontuaren profila ======
+
+Aldatu nahi dituzun atalak bakarrik bete behar dituzu. Ezin duzu zure erabiltzaile izena aldatu. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/uploadmail.txt
new file mode 100644
index 000000000..639f3d95a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/uploadmail.txt
@@ -0,0 +1,13 @@
+Fitxategi bat igo da zure DokuWikira. Hona hemen xehetasunak:
+
+Fitxategia : @MEDIA@
+Data : @DATE@
+Nabigatzailea : @BROWSER@
+IP-Helbide : @IPADDRESS@
+Hostalari izena : @HOSTNAME@
+Tamaina : @SIZE@
+MIME Mota : @MIME@
+Erabiltzailea : @USER@
+
+--
+Posta hau @DOKUWIKIURL@ gunean DokuWikik sortua izan da. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/wordblock.txt
new file mode 100644
index 000000000..0af3fb26c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/wordblock.txt
@@ -0,0 +1,3 @@
+====== SPAMaren aurkako babesa ======
+
+Zure aldaketak **ez** dira gorde aurrez debekatutako hitzak erabili dituzulako. Wiki-a spammeatzen saitu bazara... -- Aiss osobuko! (VS). Hau akats bat dela uste baduzu jarri arremanetan Wiki-aren administratzailearekin.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/admin.txt
new file mode 100644
index 000000000..ce7550977
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/admin.txt
@@ -0,0 +1,3 @@
+====== مدیریت ======
+
+در اینجا لیستی از وظیÙه‌های مدیریتی را مشاهده می‌کنید. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/adminplugins.txt
new file mode 100644
index 000000000..3d2bb4a5b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/adminplugins.txt
@@ -0,0 +1 @@
+===== برنامه های جانبی دیگر ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/backlinks.txt
new file mode 100644
index 000000000..6864e22d6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/backlinks.txt
@@ -0,0 +1,3 @@
+====== پیوندهای بازگشتی ======
+
+در این‌جا لیستی از صÙحاتی Ú©Ù‡ به این صÙحه پیوند داده‌اند را مشاهده می‌کنید. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/conflict.txt
new file mode 100644
index 000000000..9de037024
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/conflict.txt
@@ -0,0 +1,5 @@
+====== یک نگارش جدید وجود دارد ======
+
+این نگارش جدید از مطلبی Ú©Ù‡ ویرایش کرده‌اید وجود دارد. این اتÙاق زمانی رخ می‌دهد Ú©Ù‡ یک کاربر دیگر زمانی Ú©Ù‡ شما ویرایش می‌کرده‌اید، ان را تغییر داده است.
+
+تÙاوت‌های زیر را بررسی کنید، Ùˆ تصمیم بگیرید Ú©Ù‡ کدام نگارش Ø­Ùظ شود. اگر دکمه‌ی «ذخیره» را بÙشارید، نسخه‌ی شما ذخیره می‌شود Ùˆ اگر دکمه‌ی «لغو» را بÙشارید، نسخه‌ی کنونی Ø­Ùظ خواهد شد. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/denied.txt
new file mode 100644
index 000000000..827f73e2b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/denied.txt
@@ -0,0 +1,3 @@
+====== دسترسی ممکن نیست ======
+
+شرمنده، شما اجازه‌ی دسترسی ب این صÙحه را ندارید. ممکن است Ùراموش کرده باشید Ú©Ù‡ وارد سایت شوید! \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/diff.txt
new file mode 100644
index 000000000..d5354f727
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/diff.txt
@@ -0,0 +1,3 @@
+====== تÙاوت‌ها ======
+
+تÙاوت دو نسخه‌ی متÙاوت از صÙحه را مشاهده می‌کنید. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/draft.txt
new file mode 100644
index 000000000..164b217b7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/draft.txt
@@ -0,0 +1,5 @@
+====== Ùایل چرک‌نویس یاÙت شد ======
+
+آخرین سشن ویرایش شما با موÙقیت به پایان نرسیده. Dokuwiki به طور خودکار چرک‌نویسی از صÙحه‌ی شما ذخیره می‌کند Ú©Ù‡ شما می‌توانید آن را کامل کنید. در زیر مقادیر موجود در چرک‌نویس را مشاهده می‌کنید.
+
+خواهشمندیم تصمیم بگیرید Ú©Ù‡ می‌خواهید چرک‌نویس را //بازیابی//ØŒ یا آن را //حذÙ// کنید Ùˆ یا ویرایش را //لغو// نمایید. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/edit.txt
new file mode 100644
index 000000000..7c3873af4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/edit.txt
@@ -0,0 +1 @@
+این صÙحه را ویرایش کنید Ùˆ کلید «ذخیره» را Ùشار دهید. صÙحه [[wiki:syntax|قوانین نگارشی]] را برای روش نگارش ویکی مشاهده کنید. خواهشمندیم Ùقط در صورتی این صÙحه را ویرایش کنید Ú©Ù‡ توانایی **بهبود بخشیدن** به آن را دارید. اگر تصمیم دارید چیزی را تست کنید یا اولین قدم‌های‌تان را در نگارش ویکی بردارید، به [[playground:playground|زمین بازی]] بروید. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/editrev.txt
new file mode 100644
index 000000000..ca896feeb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/editrev.txt
@@ -0,0 +1 @@
+**شما یک نگارش قدیمی را مشاهده می‌کنید!** اگر این نگارش را ذخیره کنید، شما یک نگارش جدید ایجاد کرده‌اید! \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/index.txt
new file mode 100644
index 000000000..89ed74b7d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/index.txt
@@ -0,0 +1,3 @@
+====== Ùهرست ======
+
+این صÙحه Ùهرست تمامی صÙحات بر اساس [[doku>namespaces|Ùضای‌نام‌ها]] است. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/install.html
new file mode 100644
index 000000000..b76e9443f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/install.html
@@ -0,0 +1,12 @@
+<p>این صÙحه به شما در نصب Ùˆ تنظیم
+<a href="http://dokuwiki.org">Dokuwiki</a> کمک می‌کند. اطلاعات بیشتری در این مورد را می‌توانید در <a href="http://dokuwiki.org/installer">بخش راهنما</a> مشاهده کنید.</p>
+
+<p>DokuWiki از Ùایل‌های معمولی برای ذخیره‌ی صÙحات ویکی Ùˆ اطلاعات مربوط به آن‌ها استÙاده می‌کند (مثل تصاویر، Ùهرست‌های جستجو، نگارش‌های پیشین Ùˆ غیره). برای نصب موÙقیت آمیز DokuWiki
+<strong>باید</strong> دسترسی نوشتن برای شاخه‌های این Ùایل‌ها داشته باشید. این کار باید توسط دستورات خط Ùرمان Ùˆ یا دسترسی FTP Ùˆ یا از طریق کنترل پنل خدمات میزبانی‌تون انجام شود. </p>
+
+<p>این برنامه <acronym title="access control list">دسترسی‌ها</acronym>ی DokuWiki را برای شما تنظیم خواهد کرد،
+به این معنی Ú©Ù‡ مدیر سیستم می‌تواند به صÙحه‌ی مدیران وارد شود، اÙزونه نصب کنید، کاربران را مدیریت کند، دسترسی به صÙحات ویکی را مدیریت کند Ùˆ یا تنظیمات را تغییر دهد.</p>
+
+<p>برای اطلاعات بیشتر در مورد نصب می‌توانید از این پیوند‌ها استÙاده کنید
+<a href="http://dokuwiki.org/install">روش نصب</a>
+و <a href="http://dokuwiki.org/config">تنظیمات پیکربندی</a>.</p> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/lang.php
new file mode 100644
index 000000000..1123efe13
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/lang.php
@@ -0,0 +1,253 @@
+<?php
+/**
+ * fa language file
+ *
+ * This file was initially built by fetching translations from other
+ * Wiki projects. See the @url lines below. Additional translations
+ * and fixes where done for DokuWiki by the people mentioned in the
+ * lines starting with @author
+ *
+ * @url http://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/languages/messages/MessagesFa.php?view=co
+ * @author behrad eslamifar <behrad_es@yahoo.com)
+ * @author Mohsen Firoozmandan <info@mambolearn.com>
+ * @author omidmr@gmail.com
+ * @author Omid Mottaghi <omidmr@gmail.com>
+ * @author Mohammad Reza Shoaei <shoaei@gmail.com>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'rtl';
+$lang['doublequoteopening'] = '«';
+$lang['doublequoteclosing'] = '»';
+$lang['singlequoteopening'] = '‘';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = '’';
+$lang['btn_edit'] = 'ویرایش این صÙحه';
+$lang['btn_source'] = 'نمایش مبدا';
+$lang['btn_show'] = 'نمایش صÙحه';
+$lang['btn_create'] = 'ساخت این صÙحه';
+$lang['btn_search'] = 'جستجو';
+$lang['btn_save'] = 'ذخیره';
+$lang['btn_preview'] = 'پیش‌نمایش';
+$lang['btn_top'] = 'برگشت به بالا';
+$lang['btn_newer'] = 'نتایج بیشتر »';
+$lang['btn_older'] = '« نتایج کمتر';
+$lang['btn_revs'] = 'نگارش‌های پیشین';
+$lang['btn_recent'] = 'تغییرات اخیر';
+$lang['btn_upload'] = 'ارسال';
+$lang['btn_cancel'] = 'لغو';
+$lang['btn_index'] = 'Ùهرست';
+$lang['btn_secedit'] = 'ویرایش';
+$lang['btn_login'] = 'ورود به سیستم';
+$lang['btn_logout'] = 'خروج از سیستم';
+$lang['btn_admin'] = 'مدیر';
+$lang['btn_update'] = 'به روز رسانی';
+$lang['btn_delete'] = 'حذÙ';
+$lang['btn_back'] = 'عقب';
+$lang['btn_backlink'] = 'پیوندهای به این صÙحه';
+$lang['btn_backtomedia'] = 'بازگشت به انتخاب Ùایل';
+$lang['btn_subscribe'] = 'عضویت در تغییرات صÙحه';
+$lang['btn_unsubscribe'] = 'لغو عضویت در تغییرات صÙحه';
+$lang['btn_subscribens'] = 'عضویت در تغییرات Ùضای‌نام';
+$lang['btn_unsubscribens'] = 'عضویت در تغییرات Ùضای‌نام';
+$lang['btn_profile'] = 'به روز رسانی پروÙایل';
+$lang['btn_reset'] = 'بازنشاندن';
+$lang['btn_resendpwd'] = 'یک گذرواژه‌ی جدید برای شما Ùرستاده شود';
+$lang['btn_draft'] = 'ویرایش پیش‌نویس';
+$lang['btn_recover'] = 'بازیابی پیش‌نویس';
+$lang['btn_draftdel'] = 'حذ٠پیش‌نویس';
+$lang['btn_revert'] = 'بازیابی';
+$lang['loggedinas'] = 'به عنوان کاربر روبرو وارد شده‌اید:';
+$lang['user'] = 'نام کاربری:';
+$lang['pass'] = 'گذرواژه‌ی شما';
+$lang['newpass'] = 'گذروازه‌ی جدید';
+$lang['oldpass'] = 'گذرواژه‌ی پیشین';
+$lang['passchk'] = 'گذرواژه را دوباره وارد کنید';
+$lang['remember'] = 'گذرواژه را به یاد بسپار.';
+$lang['fullname'] = '*نام واقعی شما';
+$lang['email'] = 'ایمیل شما*';
+$lang['register'] = 'یک حساب جدید بسازید';
+$lang['profile'] = 'پروÙایل کاربر';
+$lang['badlogin'] = 'خطا در ورود به سیستم';
+$lang['minoredit'] = 'این ویرایش Ø®Ùرد است';
+$lang['draftdate'] = 'ذخیره خودکار پیش‌نویس';
+$lang['nosecedit'] = 'این صÙحه در این میان تغییر کرده است، اطلاعات بخش قدیمی شده است، در عوض محتوای Ú©Ù„ نمایش داده می‌شود.';
+$lang['regmissing'] = 'متاسÙÙ…ØŒ شما باید همه قسمت‌ها را پر کنید.';
+$lang['reguexists'] = 'نام کاربری‌ای Ú©Ù‡ وارد کردید قبلن استÙاده شده است. خواهشمندیم یک نام دیگر انتخاب کنید.';
+$lang['regsuccess'] = 'کاربر ساخته شد و گذرواژه به صورت ایمیل ارسال گردید.';
+$lang['regsuccess2'] = 'حساب ایجاد شد.';
+$lang['regmailfail'] = 'مشکلی در ارسال ایمیل پیش آمده است، با مدیر تماس بگیرید!';
+$lang['regbadmail'] = 'نشانی واردشده‌ی ایمیل قابل‌قبول نیست، چرا که دارای ساختار نامعتبری است. خواهشمندیم نشانی‌ای با ساختار صحیح وارد کنید و یا بخش مربوط را خالی بگذارید.';
+$lang['regbadpass'] = 'گذرواژه‌هایی که وارد کردید یکسان نیستند.';
+$lang['regpwmail'] = 'گذرواژه‌ی DokuWiki شما';
+$lang['reghere'] = 'شما هنوز حسابی در اینجا ندارید؟ یکی ایجاد کنید';
+$lang['profna'] = 'این ویکی اجازه ویرایش پروÙایل را نمی‌دهد';
+$lang['profnochange'] = 'تغییری صورت نگرÙت';
+$lang['profnoempty'] = 'نام و آدرس ایمیل باید پر شود';
+$lang['profchanged'] = 'پروÙایل کاربر با موÙقیت به روز شد';
+$lang['pwdforget'] = 'گذرواژه‌ی خود را Ùراموش کرده‌اید؟ جدید دریاÙت کنید';
+$lang['resendna'] = 'این ویکی ارسال مجدد گذرواژه را پشتیبانی نمی‌کند';
+$lang['resendpwd'] = 'گذرواژه‌ی جدید ارسال شد';
+$lang['resendpwdmissing'] = 'متاسÙÙ…ØŒ شما باید تمام قسمت‌ها را پر کنید';
+$lang['resendpwdnouser'] = 'متاسÙÙ…ØŒ ما نتوانستیم این نام کاربری را در بانک خود پیدا کنیم';
+$lang['resendpwdbadauth'] = 'متاسÙÙ…ØŒ کد شناسایی معتبر نیست. از صحت لینک تاییدیه اطمینان حاصل کنید.';
+$lang['resendpwdconfirm'] = 'یک ایمیل تاییدیه‌ی آدرس به آدرس مورنظر ارسال شد. قبل از اینکه نامه‌ی دیگری قابل ارسال به این آدرس باشد، باید دستوراتی که در آن نامه آمده است را جهت تایید این مساله که این آدرس متعلق به شماست، اجرا کنید.';
+$lang['resendpwdsuccess'] = 'گذرواژه‌ی جدید شما توسط ایمیل ارسال شد';
+$lang['license'] = 'به جز مواردی که ذکر می‌شود، مابقی محتویات ویکی تحت مجوز زیر می‌باشند:';
+$lang['licenseok'] = 'توجه: با ویرایش این صÙحه، شما مجوز زیر را تایید می‌کنید:';
+$lang['searchmedia'] = 'نام Ùایل برای جستجو:';
+$lang['searchmedia_in'] = 'جستجو در %s';
+$lang['txt_upload'] = 'Ùایل را برای ارسال انتخاب کنید';
+$lang['txt_filename'] = 'ارسال به صورت (اختیاری)';
+$lang['txt_overwrt'] = 'بر روی Ùایل موجود بنویس';
+$lang['lockedby'] = 'در حال حاضر Ù‚ÙÙ„ شده است';
+$lang['lockexpire'] = 'Ù‚ÙÙ„ منقضی شده است';
+$lang['willexpire'] = 'حالت Ù‚ÙÙ„ شما مدتی است منقضی شده است \n برای جلوگیری از تداخل دکمه‌ی پیش‌نمایش را برای صÙر شدن ساعت Ù‚ÙÙ„ بزنید.';
+$lang['notsavedyet'] = 'تغییرات ذخیره شده از بین خواهد رÙت. \n می‌خواهید ادامه دهید؟';
+$lang['rssfailed'] = 'بروز خطا در هنگام واکشی';
+$lang['nothingfound'] = 'چیزی پیدا نشد';
+$lang['mediaselect'] = 'Ùایل‌ها';
+$lang['fileupload'] = 'ارسال پرونده';
+$lang['uploadsucc'] = 'ارسال با موÙقیت انجام شد';
+$lang['uploadfail'] = 'خطا در ارسال';
+$lang['uploadwrong'] = 'ارسال متوق٠شد. این توسعه‌ی Ùایل ممنوع می‌باشد.';
+$lang['uploadexist'] = 'این Ùابل وجود دارد. عملی انجام نشد.';
+$lang['uploadbadcontent'] = 'محتوای Ùایل ارسال شده با توسعه‌ی %s متناقض است.';
+$lang['uploadspam'] = 'Ùایل ارسال شده توسط لیست سیاه اسپم‌ها مسدود شده است.';
+$lang['uploadxss'] = 'این صÙحه حاوی اسکریپت یا کد اچ‌تی‌ام‌ال است Ú©Ù‡ ممکن است به نادرست توسط مرورگر وب تÙسیر شود.';
+$lang['uploadsize'] = 'Ùایل ارسال شده سنگین است. (بیشینه، %s)';
+$lang['deletesucc'] = 'Ùایل «%s» حذ٠شد.';
+$lang['deletefail'] = '«%s» حذ٠نمی‌شود، دسترسی‌ها را بررسی کنید.';
+$lang['mediainuse'] = 'Ùایل «%s» حذ٠نمی‌شود، چون هنوز در حال استÙاده است.';
+$lang['namespaces'] = 'Ùضای‌نام';
+$lang['mediafiles'] = 'Ùایل‌های موجود در';
+$lang['js']['searchmedia'] = 'جستجو برای Ùایل';
+$lang['js']['keepopen'] = 'پنجره را ر زمان انتخاب باز نگه‌دار';
+$lang['js']['hidedetails'] = 'پتهان کردن جزییات';
+$lang['js']['nosmblinks'] = 'پیوند به Windows share Ùقط در اینترنت‌اکسپلورر قابل استÙاده است.
+شما می‌توانید پیوند‌ها رو کپی کنید.';
+$lang['js']['linkwiz'] = 'ویزارد پیوند';
+$lang['js']['linkto'] = 'پیوند به:';
+$lang['js']['del_confirm'] = 'واقعن تصمیم به حذ٠این موارد دارید؟';
+$lang['js']['mu_btn'] = 'ارسال هم‌زمان چندین Ùایل ';
+$lang['mediausage'] = 'برای ارجاع دادن به Ùایل از نگارش زیر استÙاده کنید.';
+$lang['mediaview'] = 'مشاهده‌ی Ùایل اصلی';
+$lang['mediaroot'] = 'ریشه';
+$lang['mediaupload'] = 'ارسال Ùایل به Ùضای‌نام کنونی. برای ایجاد زیرÙضای‌نام‌ها، نام‌های آن‌ها را به عنوان پیشوندهایی Ú©Ù‡ با دونقطه «:» جدا شده‌اند به نام Ùایل، در قسمت «ارسال به صورت» اضاÙÙ‡ کنید.';
+$lang['mediaextchange'] = 'توسعه‌ی Ùایل از %s به %s تغییر داده شد.';
+$lang['reference'] = 'ارجاع‌های';
+$lang['ref_inuse'] = 'این Ùایل نمی‌تواند حذ٠شود، زیرا هم‌چنان در این صÙحه استÙاده شده است:';
+$lang['ref_hidden'] = 'تعدادی مرجع در صÙحاتی Ú©Ù‡ شما دسترسی خواندن ندارید وجود دارد.';
+$lang['hits'] = 'بازدید';
+$lang['quickhits'] = 'جور کردن نام صÙحات';
+$lang['toc'] = 'Ùهرست مندرجات';
+$lang['current'] = 'Ùعلی';
+$lang['yours'] = 'نسخه‌ی شما';
+$lang['diff'] = 'تÙاوت‌ها را با نگارش کنونی نمایش بده.';
+$lang['diff2'] = 'تÙاوت‌ها را با نگارش انتخابی نمایش بده.';
+$lang['line'] = 'خط';
+$lang['breadcrumb'] = 'ردپا';
+$lang['youarehere'] = 'محل شما';
+$lang['lastmod'] = 'آخرین ویرایش';
+$lang['by'] = 'توسط';
+$lang['deleted'] = 'حذ٠شد';
+$lang['created'] = 'ایجاد شد';
+$lang['restored'] = 'یک نگارش پیشین واگردانی شد.';
+$lang['external_edit'] = 'ویرایش خارجی';
+$lang['summary'] = 'پیش‌نمایش';
+$lang['noflash'] = 'برای نمایش محتویات <a href="http://www.adobe.com/products/flashplayer/">اÙزونه‌ی Ùلش</a> مورد نیاز است.';
+$lang['download'] = 'دیاÙت Ùایل منقطع گردید';
+$lang['mail_newpage'] = 'صÙحه اضاÙÙ‡ شد:';
+$lang['mail_changed'] = 'صÙحه تغییر داده شد:';
+$lang['mail_new_user'] = 'کاربر جدید:';
+$lang['mail_upload'] = 'Ùایل ارسال شده:';
+$lang['qb_bold'] = 'متن Ù¾Ùررنگ';
+$lang['qb_italic'] = 'متن ایتالیک';
+$lang['qb_underl'] = 'متن زیرخط‌دار';
+$lang['qb_code'] = 'کد';
+$lang['qb_strike'] = 'متن وسط‌خط‌دار';
+$lang['qb_h1'] = 'عنوان سطح ۱';
+$lang['qb_h2'] = 'عنوان سطح ۲';
+$lang['qb_h3'] = 'عنوان سطح ۳';
+$lang['qb_h4'] = 'عنوان سطح ۴';
+$lang['qb_h5'] = 'عنوان سطح ۵';
+$lang['qb_h'] = 'تیتر';
+$lang['qb_hs'] = 'تیتر مورد نظر را انتخاب نمایید';
+$lang['qb_hplus'] = 'تیتر بالاتر';
+$lang['qb_hminus'] = 'تیتر پایین تر';
+$lang['qb_hequal'] = 'تیتر در یک سطح';
+$lang['qb_link'] = 'پیوند داخلی';
+$lang['qb_extlink'] = 'پیوند به بیرون (پیشوند http:// را Ùراموش نکنید)';
+$lang['qb_hr'] = 'خط اÙÙ‚ÛŒ';
+$lang['qb_ol'] = 'لیست‌های مرتب';
+$lang['qb_ul'] = 'لیست‌های بدون ترتیب';
+$lang['qb_media'] = 'اÙزودن تصویر Ùˆ Ùایل';
+$lang['qb_sig'] = 'اÙزودن امضا';
+$lang['qb_smileys'] = 'Ø´Ú©Ù„Ú©';
+$lang['qb_chars'] = 'حرو٠ویژه';
+$lang['upperns'] = 'پرش به Ùضای‌نام بالا';
+$lang['admin_register'] = 'یک حساب جدید بسازید';
+$lang['metaedit'] = 'ویرایش داده‌های متا';
+$lang['metasaveerr'] = 'نوشتن داده‌نما با مشکل مواجه شد';
+$lang['metasaveok'] = 'داده‌نما ذخیره شد';
+$lang['img_backto'] = 'بازگشت به ';
+$lang['img_title'] = 'عنوان تصویر';
+$lang['img_caption'] = 'عنوان';
+$lang['img_date'] = 'تاریخ';
+$lang['img_fname'] = 'نام Ùایل';
+$lang['img_fsize'] = 'اندازه';
+$lang['img_artist'] = 'عکاس/هنرمند';
+$lang['img_copyr'] = 'دارنده‌ی حق تکثیر';
+$lang['img_format'] = 'Ùرمت';
+$lang['img_camera'] = 'دوربین';
+$lang['img_keywords'] = 'واژه‌های کلیدی';
+$lang['subscribe_success'] = '%s با موÙقیت به عضویت %s درآمد';
+$lang['subscribe_error'] = 'عضویت %s در %s با مشکل مواجه شد';
+$lang['subscribe_noaddress'] = 'هیچ آدرس ایمیلی ثبت نکرده‌اید و نمی‌توانید عضو شوید';
+$lang['unsubscribe_success'] = '%s با موÙقیت از عضویت %s خارج شد';
+$lang['unsubscribe_error'] = 'خارج کردن %s از عضویت %s با مشکل مواجه شد.';
+$lang['authmodfailed'] = 'اشکال در نوع معتبرسازی کاربران، مدیر ویکی را باخبر سازید.';
+$lang['authtempfail'] = 'معتبرسازی کابران موقتن مسدود می‌باشد. اگر این حالت پایدار بود، مدیر ویکی را باخبر سازید.';
+$lang['i_chooselang'] = 'انتخاب زبان';
+$lang['i_installer'] = 'نصب کننده‌ی Dokuwiki';
+$lang['i_wikiname'] = 'نام ویکی';
+$lang['i_enableacl'] = 'Ùعال بودن کنترل دسترسی‌ها (توصیه شده)';
+$lang['i_superuser'] = 'کاربر اصلی';
+$lang['i_problems'] = 'نصب کننده با مشکلات زیر مواجه شد. در صورت رÙع این مشکلات، امکان ادامه نصب خواهد بود.';
+$lang['i_modified'] = 'به دلایل امنیتی، این اسکریپت Ùقط با نصب تازه Ùˆ بدون تغییر DokuWiki کار خواهد کرد.شما باید دوباره Ùایل Ùشرده را باز کنید <a href="http://dokuwiki.org/install">راهنمای نصب DokuWiki</a> را بررسی کنید.';
+$lang['i_funcna'] = 'تابع <code>%s</code> در PHP موجود نیست. ممکن است شرکت خدمات وب شما آن را مسدود کرده باشد.';
+$lang['i_phpver'] = 'نگارش پی‌اچ‌پی <code>%s</code> پایین‌تر از نگارش مورد نیاز، یعنی <code>%s</code> می‌باشد. خواهشمندیم به روز رسانی کنید.';
+$lang['i_permfail'] = 'شاخه‌ی <code>%s</code> قابلیت نوشتن ندارد. شما باید دسترسی‌های این شاخه را تنظیم کنید!';
+$lang['i_confexists'] = '<code>%s</code> پیش‌تر موجود است';
+$lang['i_writeerr'] = 'توانایی ایجاد <code>%s</code> نیست. شما باید دسترسی‌های شاخه یا Ùایل را بررسی کنید Ùˆ Ùایل را به طور دستی ایجاد کنید.';
+$lang['i_badhash'] = 'Ùایل dokuwiki.php غیرقابل تشخیص بوده یا تغییر کرده است (hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - غیرقانونی و یا مقادیر تهی';
+$lang['i_success'] = 'تنظیمات با موÙقیت به پایان رسید. بهتر است Ùایل install.php رو حذ٠کنید. برای ادامه <a href="doku.php">این‌جا</a> کلیک کنید.';
+$lang['i_failure'] = 'مشکلاتی در زمان نوشتن Ùایل تنظیمات پیش آمده است. شما باید این مشکلات را پیش از استÙاده از <a href="doku.php">DokuWiki</a> برطر٠کنید.';
+$lang['i_policy'] = 'کنترل دسترسی‌های اولیه';
+$lang['i_pol0'] = 'ویکی باز (همه می‌توانند بخوانند، بنویسند Ùˆ Ùایل ارسال کنند)';
+$lang['i_pol1'] = 'ویکی عمومی (همه می‌توانند بخوانند، کاربران ثبت شده می‌توانند بنویسند Ùˆ Ùایل ارسال کنند)';
+$lang['i_pol2'] = 'ویکی بسته (Ùقط کاربران ثبت شده می‌توانند بخوانند، بنویسند Ùˆ Ùایل ارسال کنند)';
+$lang['i_retry'] = 'تلاش مجدد';
+$lang['mu_intro'] = 'شما می‌توانید چندین Ùایل را با یک حرکت ارسال کنید. روی دکمه‌ی «بچر» کلیک کنید Ùˆ Ùایل‌ها را به ص٠ارسال اضاÙÙ‡ نمایید. سپس دکمه‌ی «ارسال» را Ùشار دهید. ';
+$lang['mu_gridname'] = 'نام Ùایل';
+$lang['mu_gridsize'] = 'اندازه';
+$lang['mu_gridstat'] = 'وضعیت';
+$lang['mu_namespace'] = 'Ùضای‌نام';
+$lang['mu_browse'] = 'بچر';
+$lang['mu_toobig'] = 'خیلی بزرگ';
+$lang['mu_ready'] = 'آماده‌ی ارسال';
+$lang['mu_done'] = 'کامل';
+$lang['mu_fail'] = 'شکست خورد';
+$lang['mu_authfail'] = 'سشن به پایان رسید';
+$lang['mu_progress'] = '@PCT@% ارسال شد';
+$lang['mu_filetypes'] = 'توسعه‌های مجاز';
+$lang['mu_info'] = 'Ùایل ارسال گردید';
+$lang['mu_lasterr'] = 'آخرین خطا:';
+$lang['recent_global'] = 'شما هم‌اکنون تغییرات Ùضای‌نام <b>%s</b> را مشاهده می‌کنید. شما هم‌چنین می‌توانید <a href="%s">تغییرات اخیر در Ú©Ù„ ویکی را مشاهده نمایید</a>.';
+$lang['years'] = '%d سال پیش';
+$lang['months'] = '%d ماه پیش';
+$lang['weeks'] = '%d Ù‡Ùته‌ی پیش';
+$lang['days'] = '%d روز پیش';
+$lang['hours'] = '%d ساعت پیش';
+$lang['minutes'] = '%d دقیقه‌ی پیش';
+$lang['seconds'] = '%d ثانیه‌ی پیش';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/locked.txt
new file mode 100644
index 000000000..1400e22da
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/locked.txt
@@ -0,0 +1,3 @@
+====== Ù‚ÙÙ„ شده است ======
+
+این صÙحه توسط یک کاربر دیگر، برای ویرایش، Ù‚ÙÙ„ شده است. شما باید تا پایان ویرایش این کاربر یا پایان زمان ویرایش، صبر کنید. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/login.txt
new file mode 100644
index 000000000..0b1b3f9fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/login.txt
@@ -0,0 +1,3 @@
+====== ورود ======
+
+شما وارد سایت نشده‌اید! موارد زیر را تایپ کنید تا وارد شوید. برای ورود، نیاز دارید Ú©Ù‡ کوکی‌های مرورگر Ùعال باشد. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/mailtext.txt
new file mode 100644
index 000000000..44e98db06
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/mailtext.txt
@@ -0,0 +1,17 @@
+یک صÙحه در ویکی اÙزوده شده یا تغییر کرده، اطلاعات آن را می‌توانید در زیر بینید:
+
+تاریخ: @DATE@
+مرورگر: @BROWSER@
+آدرس IP: @IPADDRESS@
+نام هوست: @HOSTNAME@
+نگارش پیشین: @OLDPAGE@
+نگارش نو: @NEWPAGE@
+خلاصه ویرایش: @SUMMARY@
+کاربر: @USER@
+
+@DIFF@
+
+
+--
+این ایمیل توسط DokuWiki تولید شده است
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/newpage.txt
new file mode 100644
index 000000000..06377a94a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/newpage.txt
@@ -0,0 +1,3 @@
+====== این صÙحه وجود ندارد ======
+
+شما به این صÙحه Ú©Ù‡ وجود ندارد رسیده‌اید. اگر دسترسی‌ها به شما اجازه می‌دهند، می‌توانید این صÙحه را با کلیلک کردن روی دکمه‌ی «ساخت این صÙحه» ایجاد کنید. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/norev.txt
new file mode 100644
index 000000000..78a3d94be
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/norev.txt
@@ -0,0 +1,3 @@
+====== نگارشی یاÙت نشد ======
+
+نگارش موردنظر یاÙت نشد. از دکمه‌ی «نگارش‌های پیشین» برای مشاهده‌ی نگارش‌های پیشین این صÙحه استÙاده کنید. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/preview.txt
new file mode 100644
index 000000000..3a67326df
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/preview.txt
@@ -0,0 +1,3 @@
+====== پیش‌نمایش ======
+
+این پیش‌نمایش متن شماست. به یاد داشته باشید که این متن **هنوز ذخیره نشده‌است** \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/pwconfirm.txt
new file mode 100644
index 000000000..fd76b7ddd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/pwconfirm.txt
@@ -0,0 +1,13 @@
+سلام @FULLNAME@!
+
+یک Ù†Ùر برای ورود به @DOKUWIKIURL@ با عنوان @TITLE@ درخواست گذرواژه‌ای جدید کرده است:
+
+اگر شما چنین درخواستی نداده‌اید، این ایمیل را پاک کنید.
+
+اگر این درخواست توسط شما داده شده است، باید آن را تایید کنید، پس روی پیوند زیر کلیک کنید.
+
+@CONFIRM@
+
+--
+این ایمیل توسط DokuWiki تولید شده است
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/read.txt
new file mode 100644
index 000000000..1acfdb466
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/read.txt
@@ -0,0 +1 @@
+این صÙحه Ùقط خواندنی است. شما می‌توانید متن صÙحه را مشاهده کنید، اما نمی‌توانید آن را تغییر دهید. اگر Ùکر می‌کنید Ú©Ù‡ مشکلی رخ داده است، مدیر ویکی را در جریان بگذارید. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/recent.txt
new file mode 100644
index 000000000..5d5b5b795
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/recent.txt
@@ -0,0 +1,3 @@
+====== تغییرات اخیر ======
+
+این صÙحه‌ها اخیرن تغییر کرده‌اند. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/register.txt
new file mode 100644
index 000000000..c6e1f0d4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/register.txt
@@ -0,0 +1,3 @@
+====== ثبت نام ======
+
+تمامی Ùیلدها را پر کنید Ùˆ اطمینان پیدا کنید Ú©Ù‡ ایمیل معتبر وارد کرده‌اید - اگر شما گذرواژه‌ای وارد نکردید، یک مقدار جدید برای‌تان ارسال خواهد شد. نام کاربری شما باید یک [[doku>pagename|صÙحه‌ی]] معتبر باشد. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/registermail.txt
new file mode 100644
index 000000000..e22c2d0ad
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/registermail.txt
@@ -0,0 +1,14 @@
+یک کاربر تازه با مشخصات زیر عضو ویکی شده است:
+
+نام کاربری: @NEWUSER@
+اسم کامل: @NEWNAME@
+ایمیل: @NEWEMAIL@
+
+تاریخ: @DATE@
+مرورگر: @BROWSER@
+آدرس IP: @IPADDRESS@
+نام هوست: @HOSTNAME@
+
+--
+این ایمیل توسط DokuWiki تولید شده است
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/resendpwd.txt
new file mode 100644
index 000000000..8b7b0d387
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/resendpwd.txt
@@ -0,0 +1,3 @@
+====== ارسال گذرواژه‌ی جدید ======
+
+خواهشمندیم نام کاربری خود را در Ùرم زیر بنویسید تا گذرواژه‌ی جدید برای تان ارسال شود. یک پیوند تاییدیه برای ایمیل ثبت شده ارسال می‌شود. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/revisions.txt
new file mode 100644
index 000000000..7714ae674
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/revisions.txt
@@ -0,0 +1,3 @@
+====== نگارش‌های پیشین ======
+
+در اینجا نگارش‌های پیشین این صÙحه را مشاهده می‌کنید. برای بازگشتن به آن‌ها، آن را انتخاب کنید Ùˆ کلید «ویرایش این صÙحه» را انتخاب کنید Ùˆ سپس ذخیره نمایید. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/searchpage.txt
new file mode 100644
index 000000000..3f0378ed3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/searchpage.txt
@@ -0,0 +1,5 @@
+====== جستجو ======
+
+نتایج جستجو در زیر آمده است. اگر به نتیجه‌ی مطلوبی نرسیده‌اید، می‌توانید صÙحه‌ی مورد نظر را ایجاد کنید.
+
+===== نتایج ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/showrev.txt
new file mode 100644
index 000000000..9d0500860
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/showrev.txt
@@ -0,0 +1 @@
+**این یک نگارش قدیمی از این مطلب است!** \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/stopwords.txt
new file mode 100644
index 000000000..58d3ca0f3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/stopwords.txt
@@ -0,0 +1,445 @@
+# This is a list of words the indexer ignores, one word per line
+# When you edit this file be sure to use UNIX line endings (single newline)
+# No need to include words shorter than 3 chars - these are ignored anyway
+# This list is based upon the ones found at http://www.ranks.nl/stopwords/
+about
+are
+as
+an
+and
+you
+your
+them
+their
+com
+for
+from
+into
+if
+in
+is
+it
+how
+of
+on
+or
+that
+the
+this
+to
+was
+what
+when
+where
+who
+will
+with
+und
+the
+www
+من
+تو
+او
+ما
+شما
+آنها
+ایشان
+ایشون
+از
+Ùˆ
+را
+ای
+یا
+باید
+شاید
+چرا
+چون
+چگونه
+Ú†Ù‡
+اگر
+الان
+سلام
+ممنون
+موÙÙ‚
+باشید
+باش
+باشند
+باشی
+باشم
+باشد
+است
+نیست
+شد
+شدن
+شدند
+شدیم
+شدید
+درباره
+یک
+دو
+سه
+چهار
+پنج
+شش
+Ù‡Ùت
+هشت
+ده
+در
+هست
+هستم
+هستی
+هستیم
+هستید
+هستند
+برای
+این
+آن
+اون
+روی
+رو
+بود
+بودم
+بودی
+بودیم
+بودید
+بودند
+کجا
+کی
+با
+کس
+کسی
+پیرامون
+نزدیک
+بالا
+پایین
+بالای
+بالاتر
+مواÙÙ‚
+مطابق
+طبق
+برطبق
+همان
+سر
+درمیان
+عرض
+طرÙ
+عملا
+واقعا
+بعد
+قبل
+جستجو
+سپس
+دوباره
+رÙتم
+رÙتی
+رÙت
+رÙتیم
+رÙتید
+رÙتند
+بای
+اوه
+آه
+اه
+برابر
+بااینکه
+همواره
+همیشه
+پیوسته
+وقت
+هزار
+دیگر
+جدا
+شخص
+کدام
+هیچگونه
+بهرحال
+هرچیز
+هیچکار
+درهرصورت
+پدیدار
+درک
+باشه
+جنوب
+ضبط
+حوالی
+نزدیکی
+چنانچه
+بطوریکه
+هنگامیکه
+مثال
+مانند
+پرسیدن
+جویا
+خواهش
+خواستن
+انجمن
+کنار
+پیک
+بیرون
+خارج
+مرتبا
+آغاز
+پایان
+آمد
+امد
+به
+زیرا
+چونکه
+آمدن
+بودن
+درخور
+بوده
+پیش
+پس
+قبلا
+راحت
+مقدم
+کار
+برو
+بیا
+باور
+گمان
+بمیر
+Ú†Ù¾
+راست
+شمال
+غرب
+شرق
+دور
+گذشته
+آینده
+بهتر
+بهترین
+بدترین
+عظیم
+Ú©ÙˆÚ†Ú©
+نیک
+بدتر
+خوب
+بد
+زشت
+میان
+هردو
+هم
+یکی
+کوتاه
+بلند
+مختصر
+Ø­Ú©Ù…
+اما
+ولی
+لیکن
+حز
+مگر
+Ùقط
+بدون
+محض
+بخش
+بدست
+وسیله
+درجه
+اول
+دوم
+سوم
+چهارم
+پنجم
+ششم
+Ù‡Ùتم
+هشتم
+نهم
+دهم
+امکان
+داشتن
+داشتیم
+داشتی
+داشتند
+داشتید
+سبب
+علت
+موجب
+هدÙ
+صÙر
+محتوی
+دارا
+شامل
+نیا
+چیز
+نرو
+مسیر
+روش
+جهت
+دقیقا
+درطی
+درضمن
+بسرعت
+رایج
+جاری
+طورقطعی
+شرح
+کرد
+انجام
+عدد
+غیر
+بریم
+کاملا
+قلم
+آب
+سایه
+مساوی
+صاÙ
+هموار
+حتی
+جÙت
+هرگز
+درست
+کامل
+چنین
+دومین
+سومین
+چهارمین
+پنجمین
+ششمین
+هشتمین
+نهمین
+دهمین
+برید
+رÙتن
+راه
+درود
+خداحاÙظ
+حاجی
+واقع
+سخت
+آسان
+مشکل
+اینجا
+آنجا
+خودش
+هنوز
+بلاÙاصله
+نگاه
+Ù†Ú¯Ù‡
+آخر
+اخر
+عمرا
+کمترین
+کوچکترین
+اقل
+مثل
+Ø´Ú©Ù„
+نظر
+چندین
+زیاد
+احتمالا
+متوسط
+یعنی
+اساسا
+عالی
+وای
+خودم
+خودت
+خودمان
+خودمون
+اسم
+نام
+آره
+حال
+حالا
+اینک
+خیلی
+بارها
+بسیار
+Ú©Ù†
+وسط
+ممکن
+راستی
+Ùعلا
+صحیح
+واقعی
+Ú¯Ùت
+Ú¯Ùتم
+Ú¯Ùتیم
+امثال
+آنکه
+مهم
+جدی
+چنان
+چندان
+زیادی
+بعضی
+گاهگاهی
+زود
+بزودی
+بگیر
+ببر
+بردن
+گیرنده
+تا
+تشکر
+سپاس
+ان
+آنان
+بکلی
+تماما
+بنا
+همدیگر
+جلو
+معمولا
+مقدار
+موقع
+اونجا
+آیا
+Ú©Ù‡
+بچه
+حاضر
+میخواستم
+بلی
+خیر
+Ùوروم
+خواهم
+داره
+نداره
+داری
+همون
+میبینم
+اینجوریه
+بهش
+هستن
+امضام
+اولی
+دومی
+سومی
+چهارمی
+بگذار
+بکنه
+امروز
+صدمین
+همش
+همگی
+هوا
+اعلام
+اخرین
+خودشون
+حد
+شده
+اینکه
+خب
+یه
+اینجوری
+گاه
+گهگاه
+گاهی
+گهگدار
+گهگداری
+ها
+میشه
+کمی
+راجبه
+توضیح
+بدی
+راجع
+می
+شه
+روز
+کنی
+اصلا \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/subscribermail.txt
new file mode 100644
index 000000000..140f2e3e0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/subscribermail.txt
@@ -0,0 +1,21 @@
+درود!
+
+صÙحه‌ی @PAGE@ با عنوان @TITLE@ تغییر کرد.
+تغییرات عبارتند از:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+تاریخ: @DATE@
+کاربر: @USER@
+خلاصه‌ی ویرایش: @SUMMARY@
+نگارش پیشین: @OLDPAGE@
+نگارش تازه: @NEWPAGE@
+
+برای لغو دریاÙت پیام‌های آگاهی دهنده، وارد ویکی به آدرس
+@DOKUWIKIURL@ شده Ùˆ سپس به صÙحه‌ی @NEWPAGE@ بروید
+Ùˆ از عضویت صÙحه یا Ùضای‌نام خارج شوید.
+
+--
+این ایمیل توسط DokuWiki به آدرس @DOKUWIKIURL@ ایجاد شده است. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/updateprofile.txt
new file mode 100644
index 000000000..d79083306
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/updateprofile.txt
@@ -0,0 +1,3 @@
+====== به روز رسانی پروÙایل ======
+
+شما می‌توانید مقادیر زیر را تغییر دهید. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/uploadmail.txt
new file mode 100644
index 000000000..625df73dc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/uploadmail.txt
@@ -0,0 +1,14 @@
+یک Ùایل به ویکی ارسال شد:
+
+Ùایل: @MEDIA@
+تاریخ: @DATE@
+مرورگر: @BROWSER@
+آدرس IP: @IPADDRESS@
+نام هوست: @HOSTNAME@
+اندازه: @SIZE@
+MIME: @MIME@
+کاربر: @USER@
+
+--
+این ایمیل توسط DokuWiki تولید شده است
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/wordblock.txt
new file mode 100644
index 000000000..a78c86f06
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/wordblock.txt
@@ -0,0 +1,3 @@
+====== اسپم مسدود شد ======
+
+این تغییرات ذخیره **نمی‌شود**ØŒ چون چند کلمه از کلمه‌های مسدود شده در آن یاÙت شده است. اگر Ùکر می‌کنید Ú©Ù‡ نباید این اتÙاق می‌اÙتاد با مدیر سیستم تماس بگیرید. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/admin.txt
new file mode 100644
index 000000000..b57b6080c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/admin.txt
@@ -0,0 +1,3 @@
+====== Ylläpito ======
+
+Alla on lista DokuWiki:ssä käytössä olevista ylläpitotoiminnoista.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/adminplugins.txt
new file mode 100644
index 000000000..fa3571e46
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/adminplugins.txt
@@ -0,0 +1 @@
+===== Muita liitännäisiä ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/backlinks.txt
new file mode 100644
index 000000000..457720241
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/backlinks.txt
@@ -0,0 +1,4 @@
+====== Linkitykset ======
+
+Tässä lista tälle sivuille linkittävistä sivuista.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/conflict.txt
new file mode 100644
index 000000000..be788a116
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/conflict.txt
@@ -0,0 +1,5 @@
+====== On olemassa uudempi versio ======
+
+Muokkaamastasi dokumentista on olemassa uudempi versio. Näin käy, kun toinen käyttäjä muuttaa dokumenttia sillä aikaa, kun sinä olit muokkaamassa sitä.
+
+Tutki alla näkyvät eroavaisuudet kunnolla ja päätä mikä versio säilytetään. Jos valitset "tallenna", sinun versiosi tallennetaan. Valitse ''peru'' pitääksesi tämänhetkisen, toisen käyttäjän muuttaman version.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/denied.txt
new file mode 100644
index 000000000..cd31da06b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/denied.txt
@@ -0,0 +1,3 @@
+====== Lupa evätty ======
+
+Sinulla ei ole tarpeeksi valtuuksia jatkaa. Ehkä unohdit kirjautua sisään?
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/diff.txt
new file mode 100644
index 000000000..fbf62b78c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/diff.txt
@@ -0,0 +1,3 @@
+====== Erot ======
+
+Tämä näyttää erot valitun ja nykyisen version kesken tästä sivusta.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/draft.txt
new file mode 100644
index 000000000..859f4d9f9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/draft.txt
@@ -0,0 +1,5 @@
+====== Vedos löydetty ======
+
+Edellinen muokkauksesi tälle sivulle ei ole päivittynyt oikein. DokuWiki on automaattisesti tallentanut vedoksen muokkauksen aikana. Voit nyt jatkaa muokkausta. Alla näet tallennetun version edellisestä istunnostasi.
+
+Valitse jos haluat //palauttaa// edellisen muutoksesi, //poistaa// automaattisesti tallennetun vedoksen, vai //peruuttaa// muutokset. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/edit.txt
new file mode 100644
index 000000000..81b7714d8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/edit.txt
@@ -0,0 +1 @@
+Muokkaa sivua ja paina ''Tallenna''. Katso [[wiki:syntax]] nähdäksesi Wikisyntaksi. Muuta sivua vain jos voit **parantaa** sitä. Jos haluat kokeilla Wikiä hyvä paikka siihen on [[playground:playground]].
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/editrev.txt
new file mode 100644
index 000000000..fd4d9a3de
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/editrev.txt
@@ -0,0 +1,2 @@
+**Olet ladannut vanhan version dokumentista** Jos tallennat tämän, tästä tulee uusin versio dokumentista.
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/index.txt
new file mode 100644
index 000000000..9086e220e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/index.txt
@@ -0,0 +1,3 @@
+====== hakemisto ======
+
+Tämä on hakemisto kaikista saatavilla olevista sivuista järjestettynä [[doku>namespace|nimiavaruuksittain]].
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/install.html
new file mode 100644
index 000000000..8d20e045c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/install.html
@@ -0,0 +1,21 @@
+<p>Tämä sivu avustaa <a href="http://dokuwiki.org">Dokuwikin</a> ensiasennuksessa ja
+ asetuksissa. Lisätietoa asennusohjelmasta löytyy ohjelman
+ <a href="http://dokuwiki.org/installer">dokumentaatiosta</a>.</p>
+
+<p>DokuWiki käyttää tavallisia tiedostoja wiki-sivujen, sekä muiden niihin liittyvien
+ tietojen kuten kuvien, hakuindeksien, versionhallinnan jne. tallentamiseen. Toimiakseen
+ oikein DokuWikillä <strong>täytyy</strong> olla kirjoitusoikeus niihin hakemistoihin joissa nämä
+ tiedostot sijaitsevat. Asennusohjelma ei pysty asettamaan näitä oikeuksia. Tämä täytyy
+ useimmiten tehdä suoraan komentoriviltä tai muulla, esimerkiksi
+ internet-palveluntarjoajan määrittämällä tavalla, kuten FTP -ohjelmalla tai erillisen
+ asetusvalikon kautta. (cPanel).</p>
+
+<p>Asennusohjelma määrittelee DokuWikin <acronym title="käyttöoikeudet">käyttöoikeudet (ACL)</acronym>,
+ jotka mahdollistavat ylläpitäjän sisäänkirjautumisen ja pääsyn DokuWikin ylläpito -valikkoon,
+ josta voidaan asentaa plugineja, hallita käyttäjätietoja, wiki-sivujen luku- ja
+ kirjoitusoikeuksia sekä muita asetuksia. Käyttöoikeuksien käyttäminen ei ole pakollista,
+ mutta se helpottaa DokuWikin ylläpitämistä.</p>
+
+<p>Kokeneille käyttäjille tai käyttäjille joilla on erityisvaatimuksia asennukselle
+ löytyy lisätietoa <a href="http://dokuwiki.org/install">asennuksesta</a> sekä
+ <a href="http://dokuwiki.org/config">asetuksista</a>.</p>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/lang.php
new file mode 100644
index 000000000..6ef19ee8e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/lang.php
@@ -0,0 +1,248 @@
+<?php
+/**
+ * Finnish language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Petteri <petteri@gmail.com>
+ * @author Matti Pöllä <mpo@iki.fi>
+ * @author otto@valjakko.net
+ * @author Otto Vainio <otto@valjakko.net>
+ * @author Teemu Mattila <ghcsystems@gmail.com>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = 'â€';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '’';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = '\'';
+$lang['btn_edit'] = 'Muokkaa tätä sivua';
+$lang['btn_source'] = 'Näytä sivun lähdekoodi';
+$lang['btn_show'] = 'Näytä sivu';
+$lang['btn_create'] = 'Luo tämä sivu';
+$lang['btn_search'] = 'Etsi';
+$lang['btn_save'] = 'Tallenna';
+$lang['btn_preview'] = 'Esikatselu';
+$lang['btn_top'] = 'Takaisin ylös';
+$lang['btn_newer'] = '<< uudemmat';
+$lang['btn_older'] = 'vanhemmat >>';
+$lang['btn_revs'] = 'Vanhat versiot';
+$lang['btn_recent'] = 'Viimeiset muutokset';
+$lang['btn_upload'] = 'Lähetä tiedosto';
+$lang['btn_cancel'] = 'Peru';
+$lang['btn_index'] = 'Hakemisto';
+$lang['btn_secedit'] = 'Muokkaa';
+$lang['btn_login'] = 'Kirjaudu sisään';
+$lang['btn_logout'] = 'Kirjaudu ulos';
+$lang['btn_admin'] = 'Ylläpito';
+$lang['btn_update'] = 'Päivitä';
+$lang['btn_delete'] = 'Poista';
+$lang['btn_back'] = 'Takaisin';
+$lang['btn_backlink'] = 'Paluulinkit';
+$lang['btn_backtomedia'] = 'Takaisin mediatiedostojen valintaan';
+$lang['btn_subscribe'] = 'Tilaa muutokset';
+$lang['btn_unsubscribe'] = 'Lopeta muutosten tilaus';
+$lang['btn_subscribens'] = 'Tilaa nimiavaruuden muutokset';
+$lang['btn_unsubscribens'] = 'Lopeta nimiavaruuden muutosten tilaus';
+$lang['btn_profile'] = 'Päivitä profiili';
+$lang['btn_reset'] = 'Tyhjennä';
+$lang['btn_resendpwd'] = 'Lähetä uusi salasana';
+$lang['btn_draft'] = 'Muokkaa luonnosta';
+$lang['btn_recover'] = 'Palauta luonnos';
+$lang['btn_draftdel'] = 'Poista luonnos';
+$lang['btn_revert'] = 'palauta';
+$lang['loggedinas'] = 'Kirjautunut nimellä';
+$lang['user'] = 'Käyttäjänimi';
+$lang['pass'] = 'Salasana';
+$lang['newpass'] = 'Uusi salasana';
+$lang['oldpass'] = 'Vahvista nykyinen salasana';
+$lang['passchk'] = 'uudelleen';
+$lang['remember'] = 'Muista minut';
+$lang['fullname'] = 'Koko nimi';
+$lang['email'] = 'Sähköposti';
+$lang['register'] = 'Rekisteröidy';
+$lang['profile'] = 'Käyttäjän profiili';
+$lang['badlogin'] = 'Käyttäjänimi tai salasana oli väärä.';
+$lang['minoredit'] = 'Pieni muutos';
+$lang['draftdate'] = 'Luonnos tallennettu automaattisesti';
+$lang['nosecedit'] = 'Sivu on muuttunut välillä ja kappaleen tiedot olivat vanhentuneet. Koko sivu ladattu.';
+$lang['regmissing'] = 'Kaikki kentät tulee täyttää.';
+$lang['reguexists'] = 'Käyttäjä tällä käyttäjänimellä on jo olemassa.';
+$lang['regsuccess'] = 'Käyttäjä luotiin ja salasana lähetettiin sähköpostilla.';
+$lang['regsuccess2'] = 'Käyttäjänimi on luotu.';
+$lang['regmailfail'] = 'Näyttää siltä, että salasanan lähettämisessä tapahtui virhe. Ota yhteys ylläpitäjään!';
+$lang['regbadmail'] = 'Antamasi sähköpostiosoite näyttää epäkelvolta. Jos pidät tätä virheenä ota yhteys ylläpitäjään.';
+$lang['regbadpass'] = 'Annetut kaksi salasanaa eivät täsmää. Yritä uudelleen.';
+$lang['regpwmail'] = 'DokuWiki salasanasi';
+$lang['reghere'] = 'Puuttuuko sinulta käyttäjätili? Hanki sellainen';
+$lang['profna'] = 'Tässä wikissä profiilien muokkaaminen ei ole mahdollista';
+$lang['profnochange'] = 'Ei muutoksia.';
+$lang['profnoempty'] = 'Tyhjä nimi tai sähköpostiosoite ei ole sallittu.';
+$lang['profchanged'] = 'Käyttäjän profiilin päivitys onnistui.';
+$lang['pwdforget'] = 'Unohtuiko salasana? Hanki uusi';
+$lang['resendna'] = 'Tämä wiki ei tue salasanan uudelleenlähettämistä.';
+$lang['resendpwd'] = 'Lähetä uusi salasana käyttäjälle';
+$lang['resendpwdmissing'] = 'Kaikki kentät on täytettävä.';
+$lang['resendpwdnouser'] = 'Käyttäjää ei löydy tietokannastamme.';
+$lang['resendpwdbadauth'] = 'Tunnistuskoodi on virheellinen. Varmista, että käytit koko varmistuslinkkiä.';
+$lang['resendpwdconfirm'] = 'Varmistuslinkki on lähetetty sähköpostilla';
+$lang['resendpwdsuccess'] = 'Uusi salasanasi on lähetetty sähköpostilla.';
+$lang['license'] = 'Jollei muuta ole mainittu, niin sisältö tässä wikissä on lisensoitu seuraavalla lisenssillä:';
+$lang['licenseok'] = 'Huom: Muokkaamalla tätä sivua suostut lisensoimaan sisällön seuraavan lisenssin mukaisesti:';
+$lang['searchmedia'] = 'Etsi tiedostoa nimeltä:';
+$lang['searchmedia_in'] = 'Etsi kohteesta %s';
+$lang['txt_upload'] = 'Valitse tiedosto lähetettäväksi';
+$lang['txt_filename'] = 'Lähetä nimellä (valinnainen)';
+$lang['txt_overwrt'] = 'Ylikirjoita olemassa oleva';
+$lang['lockedby'] = 'Tällä hetkellä tiedoston on lukinnut';
+$lang['lockexpire'] = 'Lukitus päättyy';
+$lang['willexpire'] = 'Lukituksesi tämän sivun muokkaukseen päättyy minuutin kuluttua.\nRistiriitojen välttämiseksi paina esikatselu-nappia nollataksesi lukitusajan.';
+$lang['notsavedyet'] = 'Dokumentissa on tallentamattomia muutoksia, jotka häviävät.\n Haluatko varmasti jatkaa?';
+$lang['rssfailed'] = 'Virhe tapahtui noudettaessa tätä syötettä: ';
+$lang['nothingfound'] = 'Mitään ei löytynyt.';
+$lang['mediaselect'] = 'Mediatiedoston valinta';
+$lang['fileupload'] = 'Mediatiedoston lähetys';
+$lang['uploadsucc'] = 'Tiedoston lähetys onnistui';
+$lang['uploadfail'] = 'Tiedoston lähetys epäonnistui. Syynä ehkä väärät oikeudet?';
+$lang['uploadwrong'] = 'Tiedoston lähetys evätty. Tämä tiedostopääte on kielletty';
+$lang['uploadexist'] = 'Tiedosto on jo olemassa. Mitään ei tehty.';
+$lang['uploadbadcontent'] = 'Tiedoston sisältö ei vastannut päätettä %s';
+$lang['uploadspam'] = 'Roskapostin estolista esti tiedoston lähetyksen.';
+$lang['uploadxss'] = 'Tiedoston lähetys estettiin mahdollisen haitallisen sisällön vuoksi.';
+$lang['uploadsize'] = 'Lähetetty tiedosto oli liian iso. (max %s)';
+$lang['deletesucc'] = 'Tiedosto "%s" on poistettu.';
+$lang['deletefail'] = 'Kohdetta "%s" poistaminen ei onnistunut - tarkista oikeudet.';
+$lang['mediainuse'] = 'Tiedostoa "%s" ei ole poistettu - se on vielä käytössä.';
+$lang['namespaces'] = 'Nimiavaruudet';
+$lang['mediafiles'] = 'Tarjolla olevat tiedostot';
+$lang['js']['searchmedia'] = 'Etsi tiedostoja';
+$lang['js']['keepopen'] = 'Pidä valinnan ikkuna avoinna.';
+$lang['js']['hidedetails'] = 'Piilota yksityiskohdat';
+$lang['js']['nosmblinks'] = 'Linkit Windows-jakoihin toimivat vain Microsoft Internet Explorerilla.
+Voit silti kopioida ja liittää linkin.';
+$lang['js']['linkwiz'] = 'Linkkivelho';
+$lang['js']['linkto'] = 'Linkki kohteeseen:';
+$lang['js']['del_confirm'] = 'Haluatko todella poistaa valitut kohteet?';
+$lang['js']['mu_btn'] = 'Lähetä useampia tiedostoja kerralla';
+$lang['mediausage'] = 'Käytä seuraavaa merkintätapaa viittausta tehtäessä:';
+$lang['mediaview'] = 'Katsele alkuperäistä tiedostoa';
+$lang['mediaroot'] = 'root';
+$lang['mediaupload'] = 'Siirrä tiedosto nykyiseen nimiavaruuteen täällä. Voit luoda uusia alinimiavaruuksia laittamalla lisäämällä sen nimen ja kaksoispisteen "Lähetä nimellä" eteen.';
+$lang['mediaextchange'] = 'Tiedoston pääte muutettu: .%s on nyt .%s!';
+$lang['reference'] = 'Viitteet';
+$lang['ref_inuse'] = 'Tiedostoa ei voi poistaa, koska seuraavat sivut käyttävät sitä:';
+$lang['ref_hidden'] = 'Osa viitteistä on sivuilla, joihin sinulla ei ole lukuoikeutta';
+$lang['hits'] = 'Osumia';
+$lang['quickhits'] = 'Sopivat sivunimet';
+$lang['toc'] = 'Sisällysluettelo';
+$lang['current'] = 'nykyinen';
+$lang['yours'] = 'Sinun versiosi';
+$lang['diff'] = 'Näytä eroavaisuudet nykyiseen versioon';
+$lang['diff2'] = 'Näytä eroavaisuudet valittuun versioon';
+$lang['line'] = 'Rivi';
+$lang['breadcrumb'] = 'Jäljet';
+$lang['youarehere'] = 'Olet täällä';
+$lang['lastmod'] = 'Viimeksi muutettu';
+$lang['by'] = '/';
+$lang['deleted'] = 'poistettu';
+$lang['created'] = 'luotu';
+$lang['restored'] = 'vanha versio palautettu';
+$lang['external_edit'] = 'ulkoinen muokkaus';
+$lang['summary'] = 'Yhteenveto muokkauksesta';
+$lang['noflash'] = 'Tarvitset <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash-liitännäisen</a> nähdäksesi tämän sisällön.';
+$lang['download'] = 'Lataa palanen';
+$lang['mail_newpage'] = 'sivu lisätty:';
+$lang['mail_changed'] = 'sivu muutettu:';
+$lang['mail_new_user'] = 'uusi käyttäjä:';
+$lang['mail_upload'] = 'tiedosto lähetetty:';
+$lang['qb_bold'] = 'Lihavoitu teksti';
+$lang['qb_italic'] = 'Kursivoitu teksti';
+$lang['qb_underl'] = 'Alleviivattu teksti';
+$lang['qb_code'] = 'Kooditeksti';
+$lang['qb_strike'] = 'Yliviivattu teksti';
+$lang['qb_h1'] = 'Taso 1 otsikko';
+$lang['qb_h2'] = 'Taso 2 otsikko';
+$lang['qb_h3'] = 'Taso 3 otsikko';
+$lang['qb_h4'] = 'Taso 4 otsikko';
+$lang['qb_h5'] = 'Taso 5 otsikko';
+$lang['qb_h'] = 'Otsikko';
+$lang['qb_hs'] = 'Valitse otsikko';
+$lang['qb_hplus'] = 'Ylempi otsikko';
+$lang['qb_hminus'] = 'Alempi otsikko';
+$lang['qb_hequal'] = 'Saman tason otsikko';
+$lang['qb_link'] = 'Sisäinen linkki';
+$lang['qb_extlink'] = 'Ulkoinen linkki';
+$lang['qb_hr'] = 'Vaakaerotin';
+$lang['qb_ol'] = 'Järjestetyn listan osa ';
+$lang['qb_ul'] = 'Epäjärjestetyn listan osa';
+$lang['qb_media'] = 'Lisää kuvia ja muita tiedostoja';
+$lang['qb_sig'] = 'Lisää allekirjoitus';
+$lang['qb_smileys'] = 'Hymiöt';
+$lang['qb_chars'] = 'Erikoismerkit';
+$lang['upperns'] = 'Hyppää edelliseen nimiavaruuteen';
+$lang['admin_register'] = 'Lisää uusi käyttäjä';
+$lang['metaedit'] = 'Muokkaa metadataa';
+$lang['metasaveerr'] = 'Metadatan kirjoittaminen epäonnistui';
+$lang['metasaveok'] = 'Metadata tallennettu';
+$lang['img_backto'] = 'Takaisin';
+$lang['img_title'] = 'Otsikko';
+$lang['img_caption'] = 'Kuvateksti';
+$lang['img_date'] = 'Päivämäärä';
+$lang['img_fname'] = 'Tiedoston nimi';
+$lang['img_fsize'] = 'Koko';
+$lang['img_artist'] = 'Kuvaaja';
+$lang['img_copyr'] = 'Tekijänoikeus';
+$lang['img_format'] = 'Formaatti';
+$lang['img_camera'] = 'Kamera';
+$lang['img_keywords'] = 'Avainsanat';
+$lang['subscribe_success'] = '%s lisättiin käyttäjän %s seurattavien listaan';
+$lang['subscribe_error'] = 'Lisättäessä %s käyttäjän %s seurattavien listaan tapahtui virhe';
+$lang['subscribe_noaddress'] = 'Käyttäjänimelle ei löydy osoitetta. Seurattavien listaan lisääminen ei onnistu.';
+$lang['unsubscribe_success'] = '%s poistettiin käyttäjän %s seurattavien listasta';
+$lang['unsubscribe_error'] = 'Poistettaessa %s käyttäjän %s seurattavien listasta tapahtui virhe';
+$lang['authmodfailed'] = 'Käyttäjien autentikoinnin asetukset ovat virheelliset. Ilmoita asiasta wikin ylläpitäjälle.';
+$lang['authtempfail'] = 'Käyttäjien autentikointi ei tällä hetkellä onnistu. Jos ongelma jatkuu, ota yhteyttä wikin ylläpitäjään.';
+$lang['i_chooselang'] = 'Valitse kieli';
+$lang['i_installer'] = 'DokuWikin asentaja';
+$lang['i_wikiname'] = 'Wikin nimi';
+$lang['i_enableacl'] = 'Käytä käyttöoikeuksien hallintaa (ACL) (Suositeltu)';
+$lang['i_superuser'] = 'Pääkäyttäjä';
+$lang['i_problems'] = 'Asennusohjelma löysi alla listattuja ongelmia ongelmia. Et voi jatkaa ennen kuin ne on korjattu.';
+$lang['i_modified'] = 'Turvallisuussyistä tämä ohjelma toimii vain uusien ja muokkaamattomien Dokuwiki-asennusten kanssa. Pura tiedostot uudestaan asennuspaketista, tai lue <a href="http://dokuwiki.org/install">Dokuwikin asennusohje (englanniksi)</a>';
+$lang['i_funcna'] = 'PHP:n funktio <code>%s</code> ei ole käytettävissä. Palveluntarjoajasi on saattanut poistaa sen jostain syystä.';
+$lang['i_phpver'] = 'Käyttämäsi PHP-ohjelmiston versio <code>%s</code> on pienempi, kuin tarvitaan <code>%s</code>. PHP-asennuksesi pitää päivittää.';
+$lang['i_permfail'] = '<code>%s</code> ei ole DokuWikin kirjoitettavissa. Muokkaa hakemiston oikeuksia!';
+$lang['i_confexists'] = '<code>%s</code> on jo olemassa';
+$lang['i_writeerr'] = '<code>%s</code>n luonti epäonnistui. Tarkista hakemiston/tiedoston oikeudet ja luo tiedosto käsin.';
+$lang['i_badhash'] = 'tunnistamaton tai muokattu dokuwiki.php (tarkistussumma=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - väärä tai tyhjä arvo';
+$lang['i_success'] = 'Kokoonpano tehty onnistuneesti. Voit poistaa install.php tiedoston. Jatka <a href="doku.php">uuteen DokuWikiisi</a>.';
+$lang['i_failure'] = 'Joitain virheitä tapahtui kirjoitettaessa vaadittavia tiedostoja. Sinun pitää korjata ne käsin ennen kuin voit käyttää <a href="doku.php">uutta DokuWikiäsi</a>.';
+$lang['i_policy'] = 'Käyttöoikeuksien oletusmenettelytapa';
+$lang['i_pol0'] = 'Avoin Wiki (luku, kirjoitus, tiedostojen lähetys on sallittu kaikille)';
+$lang['i_pol1'] = 'Julkinen Wiki (luku kaikilla, kirjoitus ja tiedostojen lähetys rekisteröidyillä käyttäjillä)';
+$lang['i_pol2'] = 'Suljettu Wiki (luku, kirjoitus ja tiedostojen lähetys vain rekisteröityneillä käyttäjillä)';
+$lang['i_retry'] = 'Yritä uudelleen';
+$lang['mu_intro'] = 'Täällä voit lähettää useampia tiedostoja kerralla. Klikkaa Selaa-nappia lisätäksesi ne jonoon. Paina lähetä, kun olet valmis.';
+$lang['mu_gridname'] = 'Tiedoston nimi';
+$lang['mu_gridsize'] = 'Koko';
+$lang['mu_gridstat'] = 'Tilanne';
+$lang['mu_namespace'] = 'Nimiavaruus';
+$lang['mu_browse'] = 'Selaa';
+$lang['mu_toobig'] = 'liian iso';
+$lang['mu_ready'] = 'valmis lähetettäväksi';
+$lang['mu_done'] = 'valmis';
+$lang['mu_fail'] = 'epäonnistui';
+$lang['mu_authfail'] = 'istunto on vanhentunut';
+$lang['mu_progress'] = '@PCT@% lähetetty';
+$lang['mu_filetypes'] = 'Sallitut tyypit';
+$lang['mu_info'] = 'tiedstoa ladattu.';
+$lang['mu_lasterr'] = 'Edellinen virhe:';
+$lang['recent_global'] = 'Seuraat tällä hetkellä muutoksia nimiavaruuden <b>%s</b> sisällä. Voit myös <a href="%s">katsoa muutoksia koko wikissä</a>';
+$lang['years'] = '%d vuotta sitten';
+$lang['months'] = '%d kuukautta sitten';
+$lang['weeks'] = '%d viikkoa sitten';
+$lang['days'] = '%d päivää sitten';
+$lang['hours'] = '%d tuntia sitten';
+$lang['minutes'] = '%d minuuttia sitten';
+$lang['seconds'] = '% sekuntia sitten';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/locked.txt
new file mode 100644
index 000000000..3a48ff8ae
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/locked.txt
@@ -0,0 +1,3 @@
+====== Sivu lukittu ======
+
+Tämä sivu on tällä hetkellä lukittuna, koska se on toisen käyttäjän muokkauksessa. Joudut odottamaan, kunnes hän lopettaa muokkauksen, tai kunnes lukko aukeaa.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/login.txt
new file mode 100644
index 000000000..efba26286
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/login.txt
@@ -0,0 +1,3 @@
+====== Sisäänkirjautuminen ======
+
+Et ole tällä hetkellä kirjautunut sisään! Anna käyttäjätunnus ja salasana alle kirjautuaksesi. Muista, että evästeiden käyttö tulee olla päällä, jotta sisäänkirjautuminen onnistuu.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/mailtext.txt
new file mode 100644
index 000000000..0a953cb87
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/mailtext.txt
@@ -0,0 +1,17 @@
+DokuWikiisi lisättiin tai siellä muutettiin sivua. Tässä yksityiskohdat
+
+Päivämäärä : @DATE@
+Selain: @BROWSER@
+IP-Osoite: @IPADDRESS@
+Isäntänimi: @HOSTNAME@
+Vanha versio: @OLDPAGE@
+Uusi versio: @NEWPAGE@
+Yhteenveto: @SUMMARY@
+Käyttäjä : @USER@
+
+@DIFF@
+
+
+--
+Tämän postin generoi DokuWiki
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/newpage.txt
new file mode 100644
index 000000000..fc6379be7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/newpage.txt
@@ -0,0 +1,3 @@
+====== Tätä otsikkoa ei vielä ole ======
+
+Olet seurannut linkkiä otsikkoon jota ei vielä ole. Voit luoda tämän käyttämällä ''Luo tämä sivu'' -nappia.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/norev.txt
new file mode 100644
index 000000000..a5138cfc3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/norev.txt
@@ -0,0 +1,3 @@
+====== Ei tällaista versiota ======
+
+Kyseistä versiota ei ole. Käytä ''Vanha versio''-nappia nähdäksesi listan tämän dokumentin vanhoista versioista
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/preview.txt
new file mode 100644
index 000000000..848780701
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/preview.txt
@@ -0,0 +1,3 @@
+====== Esikatselu ======
+
+Tämä on esikatselu siitä, miltä tekstisi tulee näyttämään. Muista, että tätä **ei ole tallennettu** vielä!
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/pwconfirm.txt
new file mode 100644
index 000000000..d134943f0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/pwconfirm.txt
@@ -0,0 +1,13 @@
+Hei @FULLNAME@!
+
+Joku pyysi uutta salasanaa login nimellesi @TITLE@ sivustolla @DOKUWIKIURL@
+
+Jos sinä ei pyytänyt uutta salasanaa, niin voit unohtaa tämän postin.
+
+Käytä alla olevaa linkkiä vahvistaaksesi, että pyynnön lähettäjä todella olet sinä.
+
+@CONFIRM@
+
+--
+Tämän postin generoi DokuWiki
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/read.txt
new file mode 100644
index 000000000..eb4380229
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/read.txt
@@ -0,0 +1 @@
+Tämä sivu on vain luettavissa. Voit katsoa sen lähdekoodia, mutta et muuttaa sitä. Kysy ylläpitäjältä jos pidät tätä estoa virheellisenä.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/recent.txt
new file mode 100644
index 000000000..ffb08107e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/recent.txt
@@ -0,0 +1,4 @@
+====== Viimeiset muutokset ======
+
+Seuraavat sivut ovat muuttuneet viime aikoina.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/register.txt
new file mode 100644
index 000000000..cf7a62557
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/register.txt
@@ -0,0 +1,3 @@
+====== Rekisteröi uusi käyttäjä ======
+
+Täytä alla olevat tiedot luodaksesi uuden käyttäjätilin tähän wikiin. Muista antaa **toimiva sähköpostiosoite**. Jos sinulta ei kysytä uutta salasanaa, niin uusi salasanasi lähetetään sähköpostiisi. Käyttäjänimi pitää olla myös käypä [[doku>pagename|sivunimi]].
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/registermail.txt
new file mode 100644
index 000000000..78d73f63d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/registermail.txt
@@ -0,0 +1,14 @@
+Uusi käyttäjä on rekisteröitynyt. Tässä tiedot:
+
+Käyttäjänimi : @NEWUSER@
+Kokonimi : @NEWNAME@
+Sähköposti : @NEWEMAIL@
+
+Päivämäärä : @DATE@
+Selain : @BROWSER@
+IP-osoite : @IPADDRESS@
+Hostname : @HOSTNAME@
+
+--
+Tämän postin generoi DokuWiki osoitteessa
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/resendpwd.txt
new file mode 100644
index 000000000..5a567b022
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/resendpwd.txt
@@ -0,0 +1,3 @@
+====== Lähetä uusi salasana ======
+
+Täytä käyttäjätunnuksesi kaavakkeeseen pyytääksesi uutta salasanaa wikin käyttäjätilillesi. Vahvistuslinkki lähetetään kirjautumisen yhteydessä antamaan sähköpostiosoitteeseen.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/revisions.txt
new file mode 100644
index 000000000..a48cd3366
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/revisions.txt
@@ -0,0 +1,3 @@
+====== Vanha versio ======
+
+Nämä ovat vanhoja versioita nykyisestä dokumentista. Jos haluat palauttaa vanhan version valitse se alhaalta, paina ''Muokkaa tätä sivua'' ja tallenna se.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/searchpage.txt
new file mode 100644
index 000000000..aa9fbf52f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/searchpage.txt
@@ -0,0 +1,5 @@
+====== Etsi ======
+
+Löydät etsinnän tulokset alta. Jos et löytänyt etsimääsi voit luoda uuden sivun tiedustelusi pohjalta käyttämällä ''Muokkaa tätä sivua'' -napilla.
+
+===== Tulokset =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/showrev.txt
new file mode 100644
index 000000000..243f8d01e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/showrev.txt
@@ -0,0 +1,2 @@
+**Tämä on vanha versio dokumentista!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/stopwords.txt
new file mode 100644
index 000000000..f92fe70cc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/stopwords.txt
@@ -0,0 +1,11 @@
+# Tämä on lista sanoista, jotka indeksoija ohittaa. Yksi sana riviä kohti
+# Kun muokkaat sivua, varmista että käytät UNIX rivinvaihtoa (yksi newline)
+# Ei tarvitse lisätä alle kolmen merkin sanoja. NE ohitetaan automaattisesti.
+# Jos wikissäsin muita kieliä, lisää sanoja listaan esim sivulta http://www.ranks.nl/stopwords/
+www
+eli
+tai
+sinä
+sinun
+com
+oli
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/subscribermail.txt
new file mode 100644
index 000000000..d1c5d9138
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/subscribermail.txt
@@ -0,0 +1,23 @@
+Hei!
+
+Sivua @PAGE@ wiki-sivustolla @TITLE@ on muokattu.
+Tässä muutokset:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Päivä : @DATE@
+Käyttäjä : @USER@
+Yhteenveto: @SUMMARY@
+Vanha revisio: @OLDPAGE@
+Uusi revisio: @NEWPAGE@
+
+Poistaaksesi sivun seurannan, kirjaudu wikiin osoitteessa
+@DOKUWIKIURL@ ja siirry sivulle
+@NEWPAGE@
+ja valitse 'Lopeta sivun ja/tai nimiavaruuden tarkkailu'.
+
+--
+Tämän viestin generoi DokuWiki osoitteessa
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/updateprofile.txt
new file mode 100644
index 000000000..71407954a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/updateprofile.txt
@@ -0,0 +1,3 @@
+====== Päivitä käyttäjätilisi profiilia ======
+
+Täytä vain ne kentät, joita haluat muuttaa. Et voi muuttaa käyttäjätunnustasi. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/uploadmail.txt
new file mode 100644
index 000000000..7a5ea49ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/uploadmail.txt
@@ -0,0 +1,14 @@
+Tiedosto ladattiin DokuWikillesi. Tässä yksityiskohtaiset tiedot:
+
+Tiedosto : @MEDIA@
+PVM : @DATE@
+Selain : @BROWSER@
+IP-Osoite : @IPADDRESS@
+Hostname : @HOSTNAME@
+Koko : @SIZE@
+MIME Type : @MIME@
+Käyttäjä : @USER@
+
+--
+Tämän postin generoi DokuWiki osoitteessa
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/wordblock.txt
new file mode 100644
index 000000000..4e416c68c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/wordblock.txt
@@ -0,0 +1,3 @@
+====== Roskaposti torjuttu ======
+
+Muutoksiasi **ei** talletettu, koska ne pitivät sisällään yhden tai useampia epäkelpoja sanoja. Jos yritit spämmätä Wikiä, häpeä! Jos pidät tätä virheenä ota yhteyttä wikin ylläpitäjään.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/admin.txt
new file mode 100644
index 000000000..27743223d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/admin.txt
@@ -0,0 +1,4 @@
+====== Fyrisiting ======
+
+Niðanfyri kanst tú finna eina røð av amboðum til fyrisiting.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/backlinks.txt
new file mode 100644
index 000000000..422377f62
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/backlinks.txt
@@ -0,0 +1,4 @@
+====== Ãvísing afturúr ======
+
+Hetta er ein listi yvur øll tey skjøl sum vísa aftur á tað núverandi skjali.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/conflict.txt
new file mode 100644
index 000000000..df3fe52be
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/conflict.txt
@@ -0,0 +1,5 @@
+====== Ein níggjari útgáva av skjalinum er til ======
+
+Ein nýggjari útgáva av hesum skjalinum er til. Hetta hendur tá fleiri brúkarir rætta í skjalinum samstundis.
+
+Eftirkanna tær vístu broytingar nágreiniliga, og avgerð hvat fyri útgávu sum skal goymast. Um tú velur ''Goym'', verður tín útgáva av skalinum goymd. Velur tú ''Angra'' varðveittur tú tí núverandi útgávuna.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/denied.txt
new file mode 100644
index 000000000..505b249b4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/denied.txt
@@ -0,0 +1,3 @@
+====== Atgongd nokta! ======
+
+Tú hevur ikki rættindi til at halda áfram. Møguliga hevur tú ikki rita inn.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/diff.txt
new file mode 100644
index 000000000..343818b40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/diff.txt
@@ -0,0 +1,4 @@
+====== Munir ======
+
+Hetta vísur munir millum tí valdu og núverandu útgávu av skjalinum. Gular eru linjur sum er at finna í gomlu útgávuni, og grønar eru linjur sum eru at finna í núvarandi útgávuni.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/edit.txt
new file mode 100644
index 000000000..2ba92a2d2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/edit.txt
@@ -0,0 +1,2 @@
+Rætta hetta skjal og trýst so á **''[Goym]''** knappin. Sí [[wiki:syntax|snið ábending]] fyri Wiki setningsbygnað. Rætta vinarliga bert hetta skjali um tú kanst **fyrireika** tað. Nýt vinarliga [[playground:playground|sandkassan]] til at testa áðrenn tú rættar í einum røttum skjali. Minst eisini til at brúkar **''[Forskoðan]''** áðrenn tú goymur skjalið.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/editrev.txt
new file mode 100644
index 000000000..274d423af
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/editrev.txt
@@ -0,0 +1,2 @@
+**Tú hevur heinta eina gamla útgávu av hesum skjalinum!** Um tú goymur skjali vilt tú skriva útyvir núverandi við gomlu útgávuni.
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/index.txt
new file mode 100644
index 000000000..640edfbc3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/index.txt
@@ -0,0 +1,3 @@
+====== Evnisyvirlit ======
+
+Hetta er eitt yvirlit yvur øll atkomandi skjøl, flokka eftir [[doku>namespaces|navnarúm]].
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/lang.php
new file mode 100644
index 000000000..a8c241fc1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/lang.php
@@ -0,0 +1,173 @@
+<?php
+/**
+ * faroese language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Poul J. Clementsen <poul@diku.dk>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+
+$lang['btn_edit'] = 'Rætta hetta skjal';
+$lang['btn_source'] = 'Vís keldu';
+$lang['btn_show'] = 'Vís skjal';
+$lang['btn_create'] = 'Býrja uppá hetta skjal';
+$lang['btn_search'] = 'Leita';
+$lang['btn_save'] = 'Goym';
+$lang['btn_preview']= 'Forskoðan';
+$lang['btn_top'] = 'Aftur til toppin';
+$lang['btn_newer'] = '<< undan síða';
+$lang['btn_older'] = 'næsta síðe >>';
+$lang['btn_revs'] = 'Gamlar útgávur';
+$lang['btn_recent'] = 'Nýggj broyting';
+$lang['btn_upload'] = 'Legg fílu upp';
+$lang['btn_cancel'] = 'Angra';
+$lang['btn_index'] = 'Evnisyvirlit';
+$lang['btn_secedit']= 'Rætta';
+$lang['btn_login'] = 'Rita inn';
+$lang['btn_logout'] = 'Rita út';
+$lang['btn_admin'] = 'Admin';
+$lang['btn_update'] = 'Dagfør';
+$lang['btn_delete'] = 'Strika';
+$lang['btn_back'] = 'Aftur';
+$lang['btn_backlink'] = "Ãvísingar afturúr";
+$lang['btn_backtomedia'] = 'Aftur til val av miðlafílu';
+$lang['btn_subscribe'] = 'Tilmelda broytingar';
+$lang['btn_unsubscribe'] = 'Strika tilmelding av broytingum';
+$lang['btn_profile'] = 'Dagføra vangamynd';
+$lang['btn_reset'] = 'Nullstilla';
+$lang['btn_resendpwd'] = 'Send nýtt loyniorð';
+
+$lang['loggedinas'] = 'Ritavur inn sum';
+$lang['user'] = 'Brúkaranavn';
+$lang['pass'] = 'Loyniorð';
+$lang['newpass'] = 'Nýtt loyniorð';
+$lang['oldpass'] = 'Vátta gamalt loyniorð';
+$lang['passchk'] = 'Endurtak nýtt loyniorð';
+$lang['remember'] = 'Minst til loyniorðið hjá mær';
+$lang['fullname'] = 'Navn';
+$lang['email'] = 'T-postur';
+$lang['register'] = 'Melda til';
+$lang['profile'] = 'Brúkara vangamynd';
+$lang['badlogin'] = 'Skeivt brúkaranavn ella loyniorð.';
+$lang['minoredit'] = 'Smærri broytingar';
+
+$lang['regmissing'] = 'Tú skalt fylla út øll øki.';
+$lang['reguexists'] = 'Hetta brúkaranavn er upptiki.';
+$lang['regsuccess'] = 'Tú ert nú stovnavur sum brúkari. Títt loyniorð verður sent til tín í einum T-posti.';
+$lang['regsuccess2']= 'Tú ert nú stovnavur sum brúkari.';
+$lang['regmailfail']= 'Títt loyniorð bleiv ikki sent. Fá vinarliga samband við administratorin.';
+$lang['regbadmail'] = 'T-post adressan er ógildig. Fá vinarliga samband við administratorin, um tú heldur at hetta er eitt brek.';
+$lang['regbadpass'] = 'Bæði loyniorðini eru ikki eins, royn vinarliga umaftur.';
+$lang['regpwmail'] = 'Títt DokuWiki loyniorð';
+$lang['reghere'] = 'Upprætta eina DokuWiki-konto her';
+
+$lang['profna'] = 'Tað er ikki møguligt at broyta tína vangamynd í hesu wiki';
+$lang['profnochange'] = 'Ongar broytingar, onki tillaga.';
+$lang['profnoempty'] = 'Tómt navn ella t-post adressa er ikki loyvt.';
+$lang['profchanged'] = 'Brúkara vangamynd dagført rætt.';
+
+$lang['pwdforget'] = 'Gloymt títt loyniorð? Fá eitt nýtt';
+$lang['resendna'] = 'Tað er ikki møguligt at fá sent nýtt loyniorð við hesu wiki.';
+$lang['resendpwd'] = 'Send nýtt loyniorð til';
+$lang['resendpwdmissing'] = 'Tú skal filla út øll økir.';
+$lang['resendpwdnouser'] = 'Vit kunna ikki finna hendan brúkara í okkara dátagrunni.';
+$lang['resendpwdsuccess'] = 'Títt nýggja loyniorð er sent við t-posti.';
+
+$lang['txt_upload'] = 'Vel tí fílu sum skal leggjast upp';
+$lang['txt_filename'] = 'Sláa inn wikinavn (valfrítt)';
+$lang['txt_overwrt'] = 'Yvurskriva verandi fílu';
+$lang['lockedby'] = 'Fyribils læst av';
+$lang['lockexpire'] = 'Lásið ferð úr gildi kl.';
+$lang['willexpire'] = 'Títt lás á hetta skjalið ferð úr gildi um ein minnutt.\nTrýst á '.$lang['btn_preview'].'-knappin fyri at sleppa undan trupulleikum.';
+
+$lang['notsavedyet'] = 'Tað eru gjørdar broytingar í skjalinum, um tú haldur fram vilja broytingar fara fyri skeytið.\nYnskir tú at halda fram?';
+$lang['rssfailed'] = 'Eitt brek koma fyri tá roynt var at fáa: ';
+$lang['nothingfound']= 'Leiting gav onki úrslit.';
+
+$lang['mediaselect'] = 'Vel miðlafílu';
+$lang['fileupload'] = 'Legg miðla fílu upp';
+$lang['uploadsucc'] = 'Upp legg av fílu var væl eydna';
+$lang['uploadfail'] = 'Brek við upp legg av fílu. Tað er møguliga trupuleikar við rættindunum';
+$lang['uploadwrong'] = 'Upp legg av fílu víst burtur. Fíluslag er ikki loyvt';
+$lang['uploadexist'] = 'Fílan er longu til.';
+$lang['deletesucc'] = 'Fílan "%s" er nú strika.';
+$lang['deletefail'] = '"%s" kundi ikki strikast - kanna rættindini.';
+$lang['mediainuse'] = 'Fíla "%s" er ikki strika - hen verður enn nýtt.';
+$lang['namespaces'] = 'Navnarúm';
+$lang['mediafiles'] = 'Atkomandi fílur í';
+
+$lang['reference'] = 'Ãvísing til';
+$lang['ref_inuse'] = 'Fílan kan ikki strikast, síðan hon enn verður nýtt á fylgjandi síðum:';
+$lang['ref_hidden'] = 'Nakrar ávísingar eru í skjølum sum tú ikki hevur lesi rættindi til';
+
+$lang['hits'] = 'Hits';
+$lang['quickhits'] = 'Samsvarandi skjøl';
+$lang['toc'] = 'Innihaldsyvirlit';
+$lang['current'] = 'núverandi';
+$lang['yours'] = 'Tín útgáva';
+$lang['diff'] = 'vís broytingar í mun til núverandi útgávu';
+$lang['line'] = 'Linja';
+$lang['breadcrumb'] = 'Leið';
+$lang['youarehere'] = 'Tú ert her';
+$lang['lastmod'] = 'Seinast broytt';
+$lang['by'] = 'av';
+$lang['deleted'] = 'strika';
+$lang['created'] = 'stovna';
+$lang['restored'] = 'gomul útgáva endurstovna';
+$lang['summary'] = 'Samandráttur';
+
+$lang['mail_newpage'] = 'skjal skoyta uppí:';
+$lang['mail_changed'] = 'skjal broytt:';
+
+$lang['js']['nosmblinks'] = "Ãvísingar til Windows shares virka bert í Microsoft Internet Explorer.\nTú kanst enn avrita og sata inn slóðina.";
+
+$lang['qb_bold'] = 'Feit';
+$lang['qb_italic'] = 'Skák';
+$lang['qb_underl'] = 'Undurstrika';
+$lang['qb_code'] = 'Skrivimaskinu tekstur';
+$lang['qb_strike'] = 'Gjøgnumstrika';
+$lang['qb_h1'] = 'Stig 1 yvirskrift';
+$lang['qb_h2'] = 'Stig 2 yvirskrift';
+$lang['qb_h3'] = 'Stig 3 yvirskrift';
+$lang['qb_h4'] = 'Stig 4 yvirskrift';
+$lang['qb_h5'] = 'Stig 5 yvirskrift';
+$lang['qb_link'] = 'Innanhýsis slóð';
+$lang['qb_extlink'] = 'Útvortis slóð';
+$lang['qb_hr'] = 'Vatnrætt linja';
+$lang['qb_ol'] = 'Talmerktur listi';
+$lang['qb_ul'] = 'Ótalmerktur listi';
+$lang['qb_media'] = 'Leggja myndir og aðrar fílur afturat';
+$lang['qb_sig'] = 'Set inn undirskrift';
+$lang['qb_smileys'] = 'Smileys';
+$lang['qb_chars'] = 'Sertekn';
+
+$lang['js']['del_confirm']= 'Strika post(ar)?';
+$lang['admin_register']= 'Upprætta nýggjan brúkara';
+
+$lang['metaedit'] = 'Rætta metadáta';
+$lang['metasaveerr'] = 'Brek við skriving av metadáta';
+$lang['metasaveok'] = 'Metadáta goymt';
+$lang['img_backto'] = 'Aftur til';
+$lang['img_title'] = 'Heitið';
+$lang['img_caption'] = 'Myndatekstur';
+$lang['img_date'] = 'Dato';
+$lang['img_fname'] = 'Fílunavn';
+$lang['img_fsize'] = 'Stødd';
+$lang['img_artist'] = 'Myndafólk';
+$lang['img_copyr'] = 'Upphavsrættur';
+$lang['img_format'] = 'Snið';
+$lang['img_camera'] = 'Fototól';
+$lang['img_keywords']= 'Evnisorð';
+
+$lang['subscribe_success'] = 'Skoyt %s uppí tilmeldulistan fyri %s';
+$lang['subscribe_error'] = 'Brek við uppí skoyting av %s til tilmeldulistan fyri %s';
+$lang['subscribe_noaddress']= 'Ongin adressa er knýtt at tíni inn ritan, tú kanst ikki skoytast uppí tilmeldulistan';
+$lang['unsubscribe_success']= 'Strika %s frá tilmeldulistan fyri %s';
+$lang['unsubscribe_error'] = 'Brek við burturtøku av %s frá tilmeldulista fyri %s';
+
+/* auth.class language support */
+$lang['authmodfailed'] = 'Brek við validering av brúkarasamansetingv. Fá samband við umboðsstjóran á hesi wiki.';
+$lang['authtempfail'] = 'Validering av brúkara virkar fyribils ikki. Um hetta er varandi, fá so samband við umboðsstjóran á hesi wiki.';
+
+//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/locked.txt
new file mode 100644
index 000000000..2e65a064c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/locked.txt
@@ -0,0 +1,3 @@
+====== Læst skjal ======
+
+Hetta skjal er fyribils læst av einum øðrum brúkara. Bíða vinarliga til brúkarin er liðugur við at rætta skjali, ella at lásið er fara úr gildi.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/login.txt
new file mode 100644
index 000000000..31a4c544f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/login.txt
@@ -0,0 +1,3 @@
+====== Rita inn ======
+
+Tú hevur ikki rita inn! Slá inn brúkaranavn og loyniorð. Tín kagi skal loyva at cookies verða goymdar fyri at tú kanst rita inn.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/mailtext.txt
new file mode 100644
index 000000000..358a23be0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/mailtext.txt
@@ -0,0 +1,17 @@
+Eitt skjal í tíni DokuWiki bleiv broytt ella skoytt uppí. Her er ein lýsing:
+
+Dato : @DATE@
+Browser : @BROWSER@
+IP-adressa : @IPADDRESS@
+Hostnavn : @HOSTNAME@
+Gomul útgáva : @OLDPAGE@
+Nýggj útgáva : @NEWPAGE@
+Rætti samandráttur : @SUMMARY@
+Brúkari : @USER@
+
+@DIFF@
+
+
+--
+Hesin t-postur var skaptur av DokuWiki á:
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/newpage.txt
new file mode 100644
index 000000000..6eeb1ef31
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/newpage.txt
@@ -0,0 +1,3 @@
+====== Hetta skjal er ikki til (enn) ======
+
+Tú fylgdi ein ávísing til eitt skjal sum ikki er til (enn). Tú kanst stovna skjali við at trýsta á **''[Stovna hetta skjal]''** knappin.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/norev.txt
new file mode 100644
index 000000000..d0b463a40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/norev.txt
@@ -0,0 +1,4 @@
+====== Valda útgávan er ikki til ======
+
+Valda útgávan av skjalinum er ikki til! Trýst á knappin **''[Gamlar útgávur]''** fyri at síggja ein lista yvur gamlar útgávur av hesum skjali.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/preview.txt
new file mode 100644
index 000000000..e3e65d805
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/preview.txt
@@ -0,0 +1,4 @@
+====== Forskoðan ======
+
+Hetta er ein forskoðan skjalinum, sum vísur hvussi tað fer at síggja út. Minst til: Tað er //**IKKI**// goymt enn! Um tað sær rætt út, trýst so á **''[Goym]''** knappin
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/read.txt
new file mode 100644
index 000000000..bacf79026
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/read.txt
@@ -0,0 +1,2 @@
+Hetta skjal kan bert læsast. Tú kanst síggja kelduna, men ikki goyma broytingar í tí. Um tú heldur at hetta er eitt brek, skriva so vinarliga í [[wiki:brek-yvirlit]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/recent.txt
new file mode 100644
index 000000000..4704f3781
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/recent.txt
@@ -0,0 +1,5 @@
+====== Nýggjar broytingar ======
+
+Fylgjandi skjøl er broytt nýliga.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/register.txt
new file mode 100644
index 000000000..24438afe8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/register.txt
@@ -0,0 +1,4 @@
+====== Upprætta eina wiki-konti ======
+
+Fylla út niðanfyrista skema fyri at upprætta eina konti í hesu wiki. Minst til at nýta eina **galdandi t-post-adressu** - títt loyniorð verður sent til tín. Títt brúkaranavn skal verða galdandi [[doku>pagename|skjalanavn]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/resendpwd.txt
new file mode 100644
index 000000000..450202c12
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/resendpwd.txt
@@ -0,0 +1,3 @@
+====== Send nýtt loyniorð ======
+
+Fyll út øll niðanfyristandandi øki fyri at fáa sent eitt nýtt loyniorð til hesa wiki. Títt nýggja loyniorð verður sent til tí uppgivnu t-postadressu. Brúkaranavn eigur at verða títt wiki brúkaranavn.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/revisions.txt
new file mode 100644
index 000000000..dcd845c10
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/revisions.txt
@@ -0,0 +1,3 @@
+====== Gamlar útgávur ======
+
+Her eru tær gomlu útgávurnar av hesum skalinum. Tú kanst venda aftur til eina eldri útgávu av skjalinum við at velja tað niðanfyri, trýst á **''[Rætta hetta skjal]''** knappin, og til síðst goyma skjali.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/searchpage.txt
new file mode 100644
index 000000000..6304a8901
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/searchpage.txt
@@ -0,0 +1,5 @@
+====== Leiting ======
+
+Tú kanst síggja úrslitini av tíni leiting niðanfyri. Um úrslitini ikki innihalda tað sum tú leitaði eftir kanst tú upprætta eitt nýtt skjal við sama navni sum leitingin við at trýsta á **''[Upprætta hetta skjal]''** knappin.
+
+===== Leitiúrslit =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/showrev.txt
new file mode 100644
index 000000000..515f80aad
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/showrev.txt
@@ -0,0 +1,2 @@
+**Hetta er ein gomul útgáva av skjalinum!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/stopwords.txt
new file mode 100644
index 000000000..210e85902
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/stopwords.txt
@@ -0,0 +1,87 @@
+# This is a list of words the indexer ignores, one word per line
+# When you edit this file be sure to use UNIX line endings (single newline)
+# No need to include words shorter than 3 chars - these are ignored anyway
+# This list is based upon the ones found at http://www.ranks.nl/stopwords/
+annar
+báðir
+eg
+eingin
+einhvør
+eini
+eitt
+ella
+enn
+fim
+fleiri
+flestir
+frá
+fyri
+fyrr
+fýra
+góður
+hann
+hansara
+har
+hendan
+hennara
+her
+hetta
+hevur
+hon
+hvar
+hvat
+hvussi
+hví
+hvør
+ikki
+inn
+kan
+koma
+lítil
+man
+maður
+meira
+men
+miðan
+niður
+nær
+næstan
+næsti
+nógv
+nýtt
+okkurt
+ongin
+onki
+onkur
+seks
+sindur
+sjey
+smáur
+stórur
+større
+størst
+sum
+síggjast
+tann
+tað
+teir
+tey
+til
+tríggir
+trý
+tvey
+tykkara
+tær
+tí
+tín
+tó
+tú
+um
+undan
+var
+vera
+við
+yvur
+átta
+áðrenn
+øll
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/subscribermail.txt
new file mode 100644
index 000000000..4dca0cda5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/subscribermail.txt
@@ -0,0 +1,17 @@
+Hey!
+
+Síðan @PAGE@ á @TITLE@ wikiuni er blivin broytt.
+Her eru ein lýsing:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Fyri at avmelda broytinga upplýsingar fyri hesa síðu rita inn á wikiuna á
+@DOKUWIKIURL@ , vitja
+@NEWPAGE@
+og vel 'Strika til melda broytingar'.
+
+--
+Hesin t-postur var skaptur av DokuWiki á:
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/updateprofile.txt
new file mode 100644
index 000000000..10ee40d30
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/updateprofile.txt
@@ -0,0 +1,3 @@
+====== Dagføra vangamynd fyri tína konti ======
+
+Tú nýtist bert at fylla út tey øki sum tú ynskjur at broyta. Tú kanst ikki broyta títt brúkaranavn.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/wordblock.txt
new file mode 100644
index 000000000..f3a9b9dcd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/wordblock.txt
@@ -0,0 +1,3 @@
+====== SPAM banning ======
+
+Tínar broytingar vóru **ikki** goymdar av tí at tær innihalda eitt ella fleiri óynskt orð. Fá vinarliga samband við admin, um tú heldur at hetta er eitt brek.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/admin.txt
new file mode 100644
index 000000000..4477a512b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/admin.txt
@@ -0,0 +1,4 @@
+====== Administration ======
+
+Ci-dessous, vous trouverez une liste des tâches administratives disponibles dans DokuWiki.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/adminplugins.txt
new file mode 100644
index 000000000..42a3538ab
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/adminplugins.txt
@@ -0,0 +1 @@
+===== Modules supplémentaires ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/backlinks.txt
new file mode 100644
index 000000000..6902b43e3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/backlinks.txt
@@ -0,0 +1,4 @@
+====== Pages pointant sur la page en cours ======
+
+Ceci est la liste des pages qui pointent sur la page en cours.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/conflict.txt
new file mode 100644
index 000000000..0cb0a67fb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/conflict.txt
@@ -0,0 +1,6 @@
+====== Une version plus récente existe déjà ======
+
+Une version plus récente du document que vous avez édité existe déjà. Cela se produit lorsqu'un autre utilisateur enregistre le document pendant que vous l'éditez.
+
+Examinez attentivement les différences ci-dessous, et décidez quelle version conserver. Si vous choisissez ''Enregistrer'', votre version sera enregistrée. Cliquez sur ''Annuler'' pour conserver la version actuelle.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/denied.txt
new file mode 100644
index 000000000..20d4d6755
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/denied.txt
@@ -0,0 +1,3 @@
+====== Autorisation refusée ======
+
+Désolé, vous n'avez pas les droits pour continuer. Peut-être avez-vous oublié de vous identifier ?
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/diff.txt
new file mode 100644
index 000000000..773695d6d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/diff.txt
@@ -0,0 +1,4 @@
+====== Différences ======
+
+Cette page vous donne les différences entre la révision choisie et la version actuelle de la page.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/draft.txt
new file mode 100644
index 000000000..fbc1609a8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/draft.txt
@@ -0,0 +1,6 @@
+====== Un fichier brouillon a été trouvé ======
+
+La dernière édition de cette page ne s'est pas terminée proprement. Dokuwiki a enregistré automatiquement un brouillon de votre travail que vous pouvez utiliser pour votre édition. Ci-dessous figurent les données enregistrées lors de votre dernière session.
+
+À vous de décider si vous souhaitez //récupérer// votre session d'édition passée, //supprimer// le brouillon enregistré automatiquement ou //annuler// le processus d'édition.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/edit.txt
new file mode 100644
index 000000000..71b0a7c1b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/edit.txt
@@ -0,0 +1,2 @@
+Modifiez cette page et cliquez sur ''Enregistrer''. Voyez le [[wiki:syntax|Guide de la mise en page]] pour une aide à propos du format. Veuillez ne modifier cette page que si vous pouvez l'**améliorer**. Si vous souhaitez faire des tests, faites vos premiers pas dans le [[playground:playground|bac à sable]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/editrev.txt
new file mode 100644
index 000000000..1a7e0f434
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/editrev.txt
@@ -0,0 +1,2 @@
+**Vous affichez une ancienne révision du document !** Si vous l'enregistrez vous créerez une nouvelle version avec ce contenu.
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/index.txt
new file mode 100644
index 000000000..14446681e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/index.txt
@@ -0,0 +1,4 @@
+====== Index ======
+
+Voici un index de toutes les pages disponibles, triées par [[doku>namespaces|catégorie]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/install.html
new file mode 100644
index 000000000..a2c29d022
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/install.html
@@ -0,0 +1,19 @@
+<p>Cette page vous assiste dans la premi&egrave;re installation et la
+configuration de <a href="http://dokuwiki.org">DokuWiki</a>.
+Pour plus d'information sur cet installeur reportez vous &agrave; sa
+<a href="http://dokuwiki.org/installer">page de
+documentation</a>.</p>
+
+<p>DokuWiki utilise des fichiers ordinaires pour stocker les pages du
+wiki et les autres informations associ&eacute;es &agrave; ces pages
+(tel que images, index de recherche, anciennes r&eacute;visions, etc). Pour fonctionner correctement DokuWiki <strong>doit</strong> avoir acc&egrave;s en &eacute;criture aux diff&eacute;rents r&eacute;pertoires qui contiennent ces fichiers. L'installeur n'est pas capable de modifier les permissions sur les r&eacute;pertoires. Ceci doit &ecirc;tre effectu&eacute; directement sur la ligne de commande de votre shell, ou, si vous &ecirc;tes h&eacute;berg&eacute;, via FTP ou votre panneau de contr&ocirc;le (tel que cPanel).</p>
+
+<p>Cet installeur va param&eacute;trer votre configuration de DokuWiki pour des <acronym title="access control list">ACL</acronym>, qui permettront l'acc&egrave;s &agrave; un login administrateur et l'acc&egrave;s au menu d'administration de DokuWiki pour l'ajout de modules externes, la gestion d'utilisateurs, la gestion de l'acc&egrave;s aux pages du wiki et les changements de param&egrave;tres de configuration. Il n'est pas n&eacute;cessaire au fonctionnement de DokuWiki, n&eacute;anmoins il facilite l'administration de DokuWiki.</p>
+
+<p>Les utilisateurs exp&eacute;riment&eacute;s ou ceux
+n&eacute;cessitant des param&eacute;trages particuliers devraient se
+reporter aux liens suivants pour les d&eacute;tails concernant les <a
+href="http://dokuwiki.org/install">instructions
+d'installation</a> et les <a
+href="http://dokuwiki.org/config">param&egrave;tres de
+configuration</a>.</p>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/lang.php
new file mode 100644
index 000000000..6a0f408b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/lang.php
@@ -0,0 +1,258 @@
+<?php
+/**
+ * french language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Sébastien Bauer <sebastien.bauer@advalvas.be>
+ * @author Antoine Fixary <antoine.fixary@freesbee.fr>
+ * @author cumulus <pta-n56@myamail.com>
+ * @author Gwenn Gueguen <contact@demisel.net>
+ * @author Guy Brand <gb@isis.u-strasbg.fr>
+ * @author Fabien Chabreuil <fabien@integralpersonality.com>
+ * @author Stéphane Chamberland <stephane.chamberland@ec.gc.ca>
+ * @author Delassaux Julien <julien@delassaux.fr>
+ * @author Maurice A. LeBlanc <leblancma@cooptel.qc.ca>
+ * @author gb@isis.u-strasbg.fr
+ * @author stephane.gully@gmail.com
+ * @author Guillaume Turri <guillaume.turri@gmail.com>
+ * @author Erik Pedersen <erik.pedersen@shaw.ca>
+ * @author olivier duperray <duperray.olivier@laposte.net>
+ * @author Vincent Feltz <psycho@feltzv.fr>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '“';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '‘';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = '\'';
+$lang['btn_edit'] = 'Éditer cette page';
+$lang['btn_source'] = 'Afficher le texte source';
+$lang['btn_show'] = 'Afficher la page';
+$lang['btn_create'] = 'Créer cette page';
+$lang['btn_search'] = 'Rechercher';
+$lang['btn_save'] = 'Enregistrer';
+$lang['btn_preview'] = 'Aperçu';
+$lang['btn_top'] = 'Haut de page';
+$lang['btn_newer'] = '<< plus récent';
+$lang['btn_older'] = 'moins récent >>';
+$lang['btn_revs'] = 'Anciennes révisions';
+$lang['btn_recent'] = 'Derniers changements';
+$lang['btn_upload'] = 'Envoyer';
+$lang['btn_cancel'] = 'Annuler';
+$lang['btn_index'] = 'Index';
+$lang['btn_secedit'] = 'Éditer';
+$lang['btn_login'] = 'Connexion';
+$lang['btn_logout'] = 'Déconnexion';
+$lang['btn_admin'] = 'Admin';
+$lang['btn_update'] = 'Rafraîchir';
+$lang['btn_delete'] = 'Effacer';
+$lang['btn_back'] = 'Retour';
+$lang['btn_backlink'] = 'Liens vers cette page';
+$lang['btn_backtomedia'] = 'Retour à la sélection du fichier média';
+$lang['btn_subscribe'] = 'S\'abonner à la page';
+$lang['btn_unsubscribe'] = 'Se désabonner de la page';
+$lang['btn_subscribens'] = 'S\'abonner à la catégorie';
+$lang['btn_unsubscribens'] = 'Se désabonner de la catégorie';
+$lang['btn_profile'] = 'Mettre à jour le profil';
+$lang['btn_reset'] = 'Réinitialiser';
+$lang['btn_resendpwd'] = 'Envoyer le mot de passe';
+$lang['btn_draft'] = 'Éditer brouillon';
+$lang['btn_recover'] = 'Récupérer brouillon';
+$lang['btn_draftdel'] = 'Effacer brouillon';
+$lang['btn_revert'] = 'Restaurer';
+$lang['loggedinas'] = 'Connecté en tant que ';
+$lang['user'] = 'Utilisateur';
+$lang['pass'] = 'Mot de passe';
+$lang['newpass'] = 'Nouveau mot de passe';
+$lang['oldpass'] = 'Mot de passe actuel';
+$lang['passchk'] = 'Répéter nouveau mot de passe';
+$lang['remember'] = 'Mémoriser';
+$lang['fullname'] = 'Nom';
+$lang['email'] = 'Adresse de courriel';
+$lang['register'] = 'S\'enregistrer';
+$lang['profile'] = 'Profil utilisateur';
+$lang['badlogin'] = 'L\'utilisateur ou le mot de passe est incorrect.';
+$lang['minoredit'] = 'Mineur';
+$lang['draftdate'] = 'Brouillon auto-enregistré le';
+$lang['nosecedit'] = 'La page a changé entre temps, les informations de la section sont obsolètes ; la page complète a été chargée à la place.';
+$lang['regmissing'] = 'Désolé, vous devez remplir tous les champs.';
+$lang['reguexists'] = 'Désolé, ce nom d\'utilisateur est déjà pris';
+$lang['regsuccess'] = 'L\'utilisateur a été créé. Le mot de passe a été expédié par courriel.';
+$lang['regsuccess2'] = 'L\'utilisateur a été créé.';
+$lang['regmailfail'] = 'Il semble y avoir un problème à l\'envoi du courriel. Contactez l\'administrateur.';
+$lang['regbadmail'] = 'L\'adresse de courriel semble incorrecte - si vous pensez que c\'est une erreur, contactez l\'administrateur.';
+$lang['regbadpass'] = 'Les deux mots de passe fournis sont différents, recommencez SVP.';
+$lang['regpwmail'] = 'Votre mot de passe DokuWiki';
+$lang['reghere'] = 'Vous n\'avez pas encore de compte ? Enregistrez-vous ici ';
+$lang['profna'] = 'Ce wiki ne permet pas de modifier les profils';
+$lang['profnochange'] = 'Pas de changement, rien à faire.';
+$lang['profnoempty'] = 'Un nom ou une adresse de courriel vide n\'est pas permis.';
+$lang['profchanged'] = 'Mise à jour du profil réussie.';
+$lang['pwdforget'] = 'Mot de passe oublié ? Faites-vous envoyer votre mot de passe ';
+$lang['resendna'] = 'Ce wiki ne permet pas le renvoi de mot de passe.';
+$lang['resendpwd'] = 'Renvoyer le mot de passe de';
+$lang['resendpwdmissing'] = 'Désolé, vous devez remplir tous les champs.';
+$lang['resendpwdnouser'] = 'Désolé, cet utilisateur est introuvable dans notre base.';
+$lang['resendpwdbadauth'] = 'Désolé, ce code d\'authentification est invalide. Assurez vous d\'avoir utilisé le lien de confirmation.';
+$lang['resendpwdconfirm'] = 'Un lien de confirmation vous a été envoyé par courriel.';
+$lang['resendpwdsuccess'] = 'Votre nouveau mot de passe vous a été expédié par courriel.';
+$lang['license'] = 'Sauf mention contraire, le contenu de ce wiki est placé sous la licence suivante:';
+$lang['licenseok'] = 'Note : En éditant cette page vous acceptez que le contenu soit placé sous les termes de la licence suivante :';
+$lang['searchmedia'] = 'Chercher le nom de fichier :';
+$lang['searchmedia_in'] = 'Chercher dans %s';
+$lang['txt_upload'] = 'Sélectionnez un fichier à envoyer ';
+$lang['txt_filename'] = 'Donnez un "wikiname" (optionnel) ';
+$lang['txt_overwrt'] = 'Écraser le fichier cible';
+$lang['lockedby'] = 'Actuellement bloqué par';
+$lang['lockexpire'] = 'Le blocage expire à';
+$lang['willexpire'] = 'Votre blocage pour modifier cette page expire dans une minute.\nPour éviter les conflits, utiliser le bouton Aperçu pour réinitialiser le minuteur.';
+$lang['notsavedyet'] = 'Les changements non enregistrés seront perdus.\nVoulez-vous vraiment continuer ?';
+$lang['rssfailed'] = 'Une erreur s\'est produite en récupérant ce flux : ';
+$lang['nothingfound'] = 'Pas de réponse.';
+$lang['mediaselect'] = 'Sélection de fichier';
+$lang['fileupload'] = 'Envoi de fichier';
+$lang['uploadsucc'] = 'Envoi réussi';
+$lang['uploadfail'] = 'L\'envoi n\'a pas réussi. Les permissions sont-elles correctes ?';
+$lang['uploadwrong'] = 'Envoi refusé. Cette extension de fichier est interdite !';
+$lang['uploadexist'] = 'Le fichier existe. Envoi avorté.';
+$lang['uploadbadcontent'] = 'Le contenu envoyé ne correspond pas à l\'extension du fichier %s.';
+$lang['uploadspam'] = 'L\'envoi a été bloqué par la liste noire antispam.';
+$lang['uploadxss'] = 'L\'envoi a été bloqué car son contenu est peut-être malveillant.';
+$lang['uploadsize'] = 'Le fichier envoyé était trop gros. (max. %s)';
+$lang['deletesucc'] = 'Le fichier "%s" a été effacé.';
+$lang['deletefail'] = 'Le fichier "%s" n\'a pu être effacé - vérifier les permissions.';
+$lang['mediainuse'] = 'Le fichier "%s" n\'a pas été effacé - il est en cours d\'utilisation.';
+$lang['namespaces'] = 'Catégories';
+$lang['mediafiles'] = 'Fichiers disponibles dans';
+$lang['js']['searchmedia'] = 'Chercher des fichiers';
+$lang['js']['keepopen'] = 'Gardez la fenêtre ouverte pendant la sélection';
+$lang['js']['hidedetails'] = 'Masquer détails';
+$lang['js']['nosmblinks'] = 'Les liens vers les partages Windows ne fonctionnent qu\'avec Microsoft Internet Explorer.
+Vous pouvez toujours faire un copier/coller du lien.';
+$lang['js']['linkwiz'] = 'Assistant Lien';
+$lang['js']['linkto'] = 'Lien vers:';
+$lang['js']['del_confirm'] = 'Effacer cette entrée ?';
+$lang['js']['mu_btn'] = 'Envoyer plusieurs fichiers en même temps';
+$lang['mediausage'] = 'Utilisez la syntaxe suivante pour faire référence à ce fichier :';
+$lang['mediaview'] = 'Voir fichier original';
+$lang['mediaroot'] = 'root';
+$lang['mediaupload'] = 'Envoyer un fichier dans la catégorie courante ici. Pour créer des sous-catégories, préfixez le nom du fichier par le nom de la sous-catégorie séparée par un double point.';
+$lang['mediaextchange'] = 'Extension du fichier changée de .%s en .%s !';
+$lang['reference'] = 'Références pour';
+$lang['ref_inuse'] = 'Le fichier ne peut être effacé car il est utilisé par les pages suivantes :';
+$lang['ref_hidden'] = 'Des références existent dans des pages que vous n\'avez pas la permission de lire';
+$lang['hits'] = 'occurrences trouvées';
+$lang['quickhits'] = 'Pages trouvées ';
+$lang['toc'] = 'Table des matières';
+$lang['current'] = 'version actuelle';
+$lang['yours'] = 'Votre version';
+$lang['diff'] = 'Différences avec la version actuelle';
+$lang['diff2'] = 'Différences entre les versions sélectionnées';
+$lang['line'] = 'Ligne';
+$lang['breadcrumb'] = 'Piste';
+$lang['youarehere'] = 'Vous êtes ici';
+$lang['lastmod'] = 'Dernière modification';
+$lang['by'] = 'par';
+$lang['deleted'] = 'effacée';
+$lang['created'] = 'créée';
+$lang['restored'] = 'ancienne révision restaurée';
+$lang['external_edit'] = 'édition externe';
+$lang['summary'] = 'Résumé';
+$lang['noflash'] = 'L"extension <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> est nécessaire pour afficher ce contenu.';
+$lang['download'] = 'Télécharger un extrait';
+$lang['mail_newpage'] = 'page ajoutée :';
+$lang['mail_changed'] = 'page changée :';
+$lang['mail_new_user'] = 'nouvel utilisateur :';
+$lang['mail_upload'] = 'fichier envoyé :';
+$lang['qb_bold'] = 'Gras';
+$lang['qb_italic'] = 'Italique';
+$lang['qb_underl'] = 'Souligné';
+$lang['qb_code'] = 'Code';
+$lang['qb_strike'] = 'Texte barré';
+$lang['qb_h1'] = 'En-tête 1';
+$lang['qb_h2'] = 'En-tête 2';
+$lang['qb_h3'] = 'En-tête 3';
+$lang['qb_h4'] = 'En-tête 4';
+$lang['qb_h5'] = 'En-tête 5';
+$lang['qb_h'] = 'Titre';
+$lang['qb_hs'] = 'Sélectionner la ligne de titre';
+$lang['qb_hplus'] = 'Titre supérieur';
+$lang['qb_hminus'] = 'Titre inférieur';
+$lang['qb_hequal'] = 'Titre de même niveau';
+$lang['qb_link'] = 'Lien interne';
+$lang['qb_extlink'] = 'Lien externe';
+$lang['qb_hr'] = 'Ligne horizontale';
+$lang['qb_ol'] = 'Liste numérotée';
+$lang['qb_ul'] = 'Liste à puce';
+$lang['qb_media'] = 'Ajouter des images et autres fichiers';
+$lang['qb_sig'] = 'Insérer une signature';
+$lang['qb_smileys'] = 'Émoticons';
+$lang['qb_chars'] = 'Caractères spéciaux';
+$lang['upperns'] = 'Aller à la catégorie parente';
+$lang['admin_register'] = 'Ajouter un nouvel utilisateur';
+$lang['metaedit'] = 'Éditer les métadonnées';
+$lang['metasaveerr'] = 'Erreur à l\'écriture des métadonnées';
+$lang['metasaveok'] = 'Métadonnées enregistrées';
+$lang['img_backto'] = 'Retour à';
+$lang['img_title'] = 'Titre';
+$lang['img_caption'] = 'Légende';
+$lang['img_date'] = 'Date';
+$lang['img_fname'] = 'Nom de fichier';
+$lang['img_fsize'] = 'Taille';
+$lang['img_artist'] = 'Auteur';
+$lang['img_copyr'] = 'Copyright';
+$lang['img_format'] = 'Format';
+$lang['img_camera'] = 'Appareil photo';
+$lang['img_keywords'] = 'Mots clef';
+$lang['subscribe_success'] = 'Ajout de %s à la liste d\'abonnés de %s';
+$lang['subscribe_error'] = 'Erreur à l\'ajout de %s à la liste d\'abonnés de %s';
+$lang['subscribe_noaddress'] = 'Aucune adresse associée à votre nom d\'utilisateur, impossible de vous ajouter à la liste d\'abonnés';
+$lang['unsubscribe_success'] = 'Suppression de %s de la liste d\'abonnés de %s';
+$lang['unsubscribe_error'] = 'Erreur à la suppression de %s de la liste d\'abonnés de %s';
+$lang['authmodfailed'] = 'Mauvais paramétrage de l\'authentification. Merci d\'informer l\'administrateur du Wiki.';
+$lang['authtempfail'] = 'L\'authentification est temporairement indisponible. Si cela perdure, merci d\'informer l\'administrateur du Wiki.';
+$lang['i_chooselang'] = 'Choisissez votre langue';
+$lang['i_installer'] = 'Installeur DokuWiki';
+$lang['i_wikiname'] = 'Nom du Wiki';
+$lang['i_enableacl'] = 'Activer les ACL (recommandé)';
+$lang['i_superuser'] = 'Super-utilisateur';
+$lang['i_problems'] = 'L\'installeur a détecté les problèmes indiqués ci-dessous. Vous ne pouvez poursuivre tant qu\'ils n\'auront pas été corrigés.';
+$lang['i_modified'] = 'Pour des raisons de sécurité ce script ne fonctionne qu\'avec une installation neuve et non modifiée de DokuWiki. Vous devriez ré-extraire les fichiers depuis le paquet téléchargé ou consulter les <a href="http://dokuwiki.org/install">instructions d\'installation de DokuWiki</a>';
+$lang['i_funcna'] = 'La fonction PHP <code>%s</code> n\'est pas disponible. Peut-être que votre hébergeur l\'a désactivée ?';
+$lang['i_phpver'] = 'Votre version de PHP (<code>%s</code>) est antérieure à la version requise (<code>%s</code>. Vous devez mettre à jour votre installation de PHP.';
+$lang['i_permfail'] = '<code>%s</code> n\'est pas accessible en écriture pour DokuWiki. Vous devez corriger les permissions de ce répertoire !';
+$lang['i_confexists'] = '<code>%s</code> existe déjà';
+$lang['i_writeerr'] = 'Impossible de créer <code>%s</code>. Vous devez vérifier les permissions des répertoires/fichiers et créer le fichier manuellement.';
+$lang['i_badhash'] = 'dokuwiki.php non reconnu ou modifié (hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - valeur illégale ou vide';
+$lang['i_success'] = 'L\'installation s\'est terminée avec succès. Vous pouvez maintenant supprimer le fichier install.php. Continuer avec <a href="doku.php">votre nouveau DokuWiki</a>.';
+$lang['i_failure'] = 'Des erreurs sont survenues lors de l\'écriture des fichiers de configuration. Il vous faudra les corriger manuellement avant de pouvoir utiliser <a href="doku.php">votre nouveau DokuWiki</a>.';
+$lang['i_policy'] = 'Politique d\'ACL initiale';
+$lang['i_pol0'] = 'Wiki ouvert (lecture, écriture, envoi de fichiers pour tout le monde)';
+$lang['i_pol1'] = 'Wiki public (lecture pour tout le monde, écriture et envoi de fichiers pour les utilisateurs enregistrés)';
+$lang['i_pol2'] = 'Wiki fermé (lecture, écriture, envoi de fichiers pour les utilisateurs enregistrés uniquement)';
+$lang['i_retry'] = 'Réessayer';
+$lang['mu_intro'] = 'Ici vous pouvez envoyer plusieurs fichiers en même temps. Cliquez sur le bouton parcourir pour les ajouter. Cliquez sur envoyer lorsque c\'est prêt. ';
+$lang['mu_gridname'] = 'Nom du fichier';
+$lang['mu_gridsize'] = 'Taille';
+$lang['mu_gridstat'] = 'État';
+$lang['mu_namespace'] = 'Catégorie';
+$lang['mu_browse'] = 'Parcourir';
+$lang['mu_toobig'] = 'Trop gros';
+$lang['mu_ready'] = 'Prêt à envoyer';
+$lang['mu_done'] = 'Terminé';
+$lang['mu_fail'] = 'Échoué';
+$lang['mu_authfail'] = 'Session expirée';
+$lang['mu_progress'] = '@PCT@% envoyé';
+$lang['mu_filetypes'] = 'Types de fichiers acceptés';
+$lang['mu_info'] = 'fichiers envoyés.';
+$lang['mu_lasterr'] = 'Dernière erreur : ';
+$lang['recent_global'] = 'Vous êtes actuellement en train de regarder les modifications au sein du namespace <b>%s</b>. Vous pouvez aussi <a href="%s">voir les récentes modifications sur tout le wiki</a>.';
+$lang['years'] = 'il y a %d ans';
+$lang['months'] = 'il y a %d mois';
+$lang['weeks'] = 'il y a %d semaines';
+$lang['days'] = 'il y a %d jours';
+$lang['hours'] = 'il y a %d heures';
+$lang['minutes'] = 'il y a %d minutes';
+$lang['seconds'] = 'il y a %d secondes';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/locked.txt
new file mode 100644
index 000000000..ac8eb4c4b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/locked.txt
@@ -0,0 +1,3 @@
+====== Page bloquée ======
+
+Cette page est actuellement bloquée pour édition par un autre utilisateur. Vous devez attendre que l'autre utilisateur ait terminé ou que le blocage de la page expire.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/login.txt
new file mode 100644
index 000000000..c8d40c86d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/login.txt
@@ -0,0 +1,3 @@
+====== Connexion ======
+
+Vous n'êtes pas connecté ! Entrez vos identifiants ci-dessous pour vous connecter. Votre navigateur doit accepter les cookies pour pouvoir vous connecter.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/mailtext.txt
new file mode 100644
index 000000000..0b87616b1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/mailtext.txt
@@ -0,0 +1,18 @@
+Une page dans votre Wiki a été ajoutée ou modifiée. Voici les
+détails :
+
+Date : @DATE@
+Navigateur : @BROWSER@
+Adresse IP : @IPADDRESS@
+Nom d'hôte : @HOSTNAME@
+Ancienne révision : @OLDPAGE@
+Nouvelle révision : @NEWPAGE@
+Résumé : @SUMMARY@
+Utilisateur : @USER@
+
+@DIFF@
+
+
+--
+Ce message a été généré par DokuWiki
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/newpage.txt
new file mode 100644
index 000000000..3d834ffd0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/newpage.txt
@@ -0,0 +1,4 @@
+====== Cette page n'existe pas encore ======
+
+Vous avez suivi un lien vers une page qui n'existe pas encore. Si vos droits sont suffisants, vous pouvez utiliser le bouton ''Créer cette page''.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/norev.txt
new file mode 100644
index 000000000..65984ef9c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/norev.txt
@@ -0,0 +1,4 @@
+====== Révision non trouvée ======
+
+La révision demandée n'existe pas. Utilisez le bouton 'Anciennes révisions' pour une liste des révisions de ce document.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/preview.txt
new file mode 100644
index 000000000..26fbcd9c2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/preview.txt
@@ -0,0 +1,4 @@
+====== Aperçu ======
+
+Ceci est un aperçu de votre document. Attention ! Il n'est **pas encore enregistré** !
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/pwconfirm.txt
new file mode 100644
index 000000000..432b5f102
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/pwconfirm.txt
@@ -0,0 +1,15 @@
+Bonjour @FULLNAME@ !
+
+Quelqu'un a demandé un nouveau mot de passe pour votre login
+@TITLE@ sur @DOKUWIKIURL@
+
+Si vous n'êtes pas à l'origine de cette requête d'un nouveau mot de
+passe, ignorez ce message.
+
+Pour confirmer que cette requête émane bien de vous, merci de suivre le lien ci-dessous.
+
+@CONFIRM@
+
+--
+Ce message a été généré par DokuWiki
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/read.txt
new file mode 100644
index 000000000..faa756e8b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/read.txt
@@ -0,0 +1,2 @@
+Cette page est en lecture seule. Vous pouvez afficher le texte source, mais pas le modifier. Contactez votre administrateur si vous pensez qu'il s'agit d'une erreur.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/recent.txt
new file mode 100644
index 000000000..b41972fc1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/recent.txt
@@ -0,0 +1,5 @@
+====== Derniers changements ======
+
+Les pages suivantes ont été modifiées récemment.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/register.txt
new file mode 100644
index 000000000..e2d02f55c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/register.txt
@@ -0,0 +1,3 @@
+====== S'enregistrer comme nouvel utilisateur ======
+
+Remplissez toutes les informations ci-dessous pour vous créer un compte sur ce Wiki. Assurez-vous de fournir une **adresse de courriel valide** car votre mot de passe sera envoyé à cette adresse. Le nom d'utilisateur doit être un [[doku>pagename|nom de page]] valide.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/registermail.txt
new file mode 100644
index 000000000..960aedf2d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/registermail.txt
@@ -0,0 +1,14 @@
+Un nouvel utilisateur s'est enregistré. Voici les détails :
+
+Utilisateur : @NEWUSER@
+Nom : @NEWNAME@
+Adresse de courriel : @NEWEMAIL@
+
+Date : @DATE@
+Navigateur : @BROWSER@
+Adresse IP : @IPADDRESS@
+Nom d'hôte : @HOSTNAME@
+
+--
+Ce message a été généré par DokuWiki
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/resendpwd.txt
new file mode 100644
index 000000000..2cfbed617
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/resendpwd.txt
@@ -0,0 +1,4 @@
+====== Envoyer un nouveau mot de passe ======
+
+Veuillez compléter les champs ci dessous pour obtenir un nouveau mot de passe pour votre compte dans ce wiki. Un lien de confirmation vous sera envoyé à l'adresse de courriel utilisée lors de votre enregistrement.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/revisions.txt
new file mode 100644
index 000000000..c9149ef9b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/revisions.txt
@@ -0,0 +1,4 @@
+====== Anciennes révisions ======
+
+Voici les anciennes révisions de la page en cours. Pour revenir à une ancienne révision, sélectionnez-la ci-dessous, cliquez sur le bouton ''Éditer cette page'' et enregistrez-la.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/searchpage.txt
new file mode 100644
index 000000000..8355a2f9d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/searchpage.txt
@@ -0,0 +1,5 @@
+====== Recherche ======
+
+Voici les résultats de votre recherche. Si vous n'avez pas trouvé ce que vous cherchiez, vous pouvez créer ou éditer la page correspondante à votre requête en cliquant sur le bouton approprié.
+
+===== Résultats =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/showrev.txt
new file mode 100644
index 000000000..2e36199b1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/showrev.txt
@@ -0,0 +1,2 @@
+**Ceci est une ancienne révision du document !**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/stopwords.txt
new file mode 100644
index 000000000..981bae26b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/stopwords.txt
@@ -0,0 +1,112 @@
+# Cette liste regroupe des mots ignorés par l'indexeur
+# Chaque ligne comporte un mot
+# Les fins de ligne de ce fichier doivent être de type UNIX
+# Les mots de moins de 3 lettres sont ignorés par défaut.
+# Cette liste est basée sur http://www.ranks.nl/stopwords/
+alors
+aucuns
+aussi
+autre
+avant
+avec
+avoir
+bon
+car
+cela
+ces
+ceux
+chaque
+comme
+comment
+dans
+des
+dedans
+dehors
+depuis
+deux
+devrait
+doit
+donc
+dos
+droite
+début
+elle
+elles
+encore
+essai
+est
+fait
+faites
+fois
+font
+force
+haut
+hors
+ici
+ils
+juste
+les
+leur
+là
+maintenant
+mais
+mes
+mine
+moins
+mon
+mot
+même
+nommés
+notre
+nous
+nouveaux
+où
+par
+parce
+parole
+pas
+personnes
+peut
+peu
+pièce
+plupart
+pour
+pourquoi
+quand
+que
+quel
+quelle
+quelles
+quels
+qui
+sans
+ses
+seulement
+sien
+son
+sont
+sous
+soyez
+sujet
+sur
+tandis
+tellement
+tels
+tes
+ton
+tous
+tout
+trop
+très
+valeur
+voie
+voient
+vont
+votre
+vous
+ça
+étaient
+état
+étions
+été
+être
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/subscribermail.txt
new file mode 100644
index 000000000..514f9cf5d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/subscribermail.txt
@@ -0,0 +1,17 @@
+Bonjour !
+
+La page @PAGE@ dans le wiki @TITLE@ a changé.
+Voici les modifications :
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Pour vous désabonner de cette page, connectez vous via
+@DOKUWIKIURL@ et visualisez la page
+@NEWPAGE@
+puis choisissez 'Ne pas notifier les modifications'.
+
+--
+Ce message a été généré par Dokuwiki
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/updateprofile.txt
new file mode 100644
index 000000000..623d75e88
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/updateprofile.txt
@@ -0,0 +1,5 @@
+====== Mise à jour de votre profil ======
+
+Ne complétez que les champs que vous souhaitez modifier. Vous ne pouvez pas modifier votre nom d'utilisateur.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/uploadmail.txt
new file mode 100644
index 000000000..3a186b554
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/uploadmail.txt
@@ -0,0 +1,14 @@
+Un fichier a été envoyé dans votre DokuWiki. En voici les détails :
+
+Fichier : @MEDIA@
+Date : @DATE@
+Navigateur : @BROWSER@
+Adresse IP : @IPADDRESS@
+Nom d'hôte : @HOSTNAME@
+Taille : @SIZE@
+Type MIME : @MIME@
+Utilisateur : @USER@
+
+--
+Ce message a été généré par DokuWiki
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/wordblock.txt
new file mode 100644
index 000000000..ae5962a80
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/wordblock.txt
@@ -0,0 +1,4 @@
+====== Changement bloqué ======
+
+Vos changements n'ont **pas été enregistrés** car ils contiennent un ou plusieurs mots bloqués. Si vous avez essayé de spammer le Wiki -- mauvaise idée ! Si vous pensez que c'est une erreur, contactez l'administrateur de ce Wiki.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/admin.txt
new file mode 100644
index 000000000..a5bb1753d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/admin.txt
@@ -0,0 +1,4 @@
+====== Administración ======
+
+A continuación pode encontrar unha lista de tarefas administrativas dispoñíbeis no DokuWiki.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/adminplugins.txt
new file mode 100644
index 000000000..e791265e6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/adminplugins.txt
@@ -0,0 +1 @@
+===== Plugins adicionais ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/backlinks.txt
new file mode 100644
index 000000000..90066d032
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/backlinks.txt
@@ -0,0 +1,4 @@
+====== Ligazóns entrantes ======
+
+Isto é unha listaxe de páxinas que parecen estar vinculadas á páxina actual.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/conflict.txt
new file mode 100644
index 000000000..e63e5b216
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/conflict.txt
@@ -0,0 +1,6 @@
+====== Hai unha versión máis nova ======
+
+Hai unha versión máis nova do documento que editou. Isto sucede cando outra persoa usuaria alterou o documento mentres vostede o estaba a editar.
+
+Examine as diferenzas que se mostran abaixo detalladamente e despois decida a versión que quere manter. Se selecciona ''Gardar'', gardarase a súa versión. Prema en ''Cancelar'' para manter a versión actual.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/denied.txt
new file mode 100644
index 000000000..8d388a8bb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/denied.txt
@@ -0,0 +1,4 @@
+====== Permiso denegado ======
+
+Sentímolo, mais non ten os permisos suficientes para continuar. É posíbel que esquecese iniciar unha sesión.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/diff.txt
new file mode 100644
index 000000000..5660e4025
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/diff.txt
@@ -0,0 +1,4 @@
+====== Diferenzas ======
+
+Isto mostra as diferenzas entre a revisión seleccionada e a versión actual da páxina.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/draft.txt
new file mode 100644
index 000000000..8e2aa19f2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/draft.txt
@@ -0,0 +1,6 @@
+====== Encontrouse un ficheiro de borrador ======
+
+A súa última sesión de edición desta páxina non terminou de modo correcto. O DokuWiki gardou automaticamente un borrador durante o seu traballo que agora pode usar para continuar coa edición. A continuación pode ver os datos que foron gardados durante a súa última sesión.
+
+Por favor, escolla entre se se quere //Recuperar// a súa sesión de edición perdida, //Eliminar// o borrador gardado automaticamente ou //Cancelar// o proceso de edición.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/edit.txt
new file mode 100644
index 000000000..9e2061b51
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/edit.txt
@@ -0,0 +1,2 @@
+Edite a páxina e prema en ''Gardar''. Vexa a páxina [[wiki:syntax|sintaxe]] para aprender a sintaxe da Wiki. Edite a páxina só se pode **mellorala**. Se quere facer probas, aprenda como efectuar os seus primeiros pasos no [[playground:playground|campo de xogo]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/editrev.txt
new file mode 100644
index 000000000..c582fc3d0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/editrev.txt
@@ -0,0 +1,2 @@
+**Cargou unha revisión antiga do documento!** Se o garda, creará unha versión nova con eses datos.
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/index.txt
new file mode 100644
index 000000000..b0b100bda
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/index.txt
@@ -0,0 +1,4 @@
+====== Ãndice ======
+
+Isto é un índice de todas as páxinas dispoñíbeis, ordenadas por [[doku>namespaces|nomes de espazo]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/install.html
new file mode 100644
index 000000000..017abad8f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/install.html
@@ -0,0 +1,25 @@
+<p>Esta páxina é unha axuda para a primeira instalación e configuración do
+<a href="http://dokuwiki.org">Dokuwiki</a>. Se quere máis información
+sobre este instalador, está dispoñíbel na súa propia
+<a href="http://dokuwiki.org/installer">páxina de documentación</a>.</p>
+
+<p>O DokuWiki usa ficheiros normais para o almacenamento das páxinas do wiki
+e outra información asociada ás mesmas (por ex. imaxes, índices de procura,
+revisións antigas etc.). Por iso, para poder operar correctamente, o DokuWiki
+<strong>precisa</strong> ter acceso de escritura nos directorios que conteñen
+eses ficheiros. Este instalador non é quen de configurar os permisos dos directorios.
+Isto debe facerse normalmente de xeito directo na liña de comandos ou, se está a
+usar unha hospedaxe, a través do FTP ou do panel de control da súa hospedaxe (por ex.
+o cPanel).</p>
+
+<p>Este instalador configurará o seu DokuWiki para o uso da
+<acronym title="access control list">ACL</acronym>, o cal lle permitirá á persoa administradora
+iniciar unha sesión e acceder ao menú de administración do DokuWiki para instalar plugins,
+xestionar as persoas usuarias e os accesos ás páxinas do wiki; ademais de modificar a configuración.
+Non é imprescindíbel para o funcionamento do DokuWiki, mais fai moito máis doada a
+administración do mesmo.</p>
+
+<p>As persoas usuarias expertas ou con requisitos especiais de configuración poden visitar
+as seguintes ligazóns para obter os pormenores relativos ás
+<a href="http://dokuwiki.org/install">instruccións de instalación</a>
+e á <a href="http://dokuwiki.org/config">configuración</a>.</p>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/lang.php
new file mode 100644
index 000000000..2f34a02a0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/lang.php
@@ -0,0 +1,243 @@
+<?php
+/**
+ * galician language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author CiberIrmandade da Fala <infoxeral@ciberirmandade.org>
+ * @author Tagen Ata <localizacion@tagenata>
+ * @author Leandro Regueiro <leandro.regueiro@gmail.com>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '“';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '‘';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = '’';
+$lang['btn_edit'] = 'Editar esta páxina';
+$lang['btn_source'] = 'Mostrar o código da páxina';
+$lang['btn_show'] = 'Mostrar a páxina';
+$lang['btn_create'] = 'Crear esta páxina';
+$lang['btn_search'] = 'Procurar';
+$lang['btn_save'] = 'Gardar';
+$lang['btn_preview'] = 'Previsualizar';
+$lang['btn_top'] = 'Comezo da páxina';
+$lang['btn_newer'] = '<< máis recente';
+$lang['btn_older'] = 'menos recente >>';
+$lang['btn_revs'] = 'Revisións antigas';
+$lang['btn_recent'] = 'Cambios recentes';
+$lang['btn_upload'] = 'Subir';
+$lang['btn_cancel'] = 'Cancelar';
+$lang['btn_index'] = 'Ãndice';
+$lang['btn_secedit'] = 'Editar';
+$lang['btn_login'] = 'Iniciar unha sesión';
+$lang['btn_logout'] = 'Terminar a sesión';
+$lang['btn_admin'] = 'Administración';
+$lang['btn_update'] = 'Actualizar';
+$lang['btn_delete'] = 'Borrar';
+$lang['btn_back'] = 'Atrás';
+$lang['btn_backlink'] = 'Ligazón entrante';
+$lang['btn_backtomedia'] = 'Volver á Selección de Ficheiros multimedia';
+$lang['btn_subscribe'] = 'Avisar dos cambios na páxina';
+$lang['btn_unsubscribe'] = 'Non avisar dos cambios na páxina';
+$lang['btn_subscribens'] = 'Avísar dos cambios nos Nomes de espazo';
+$lang['btn_unsubscribens'] = 'Non avisar dos cambios nos Nomes de espazo';
+$lang['btn_profile'] = 'Actualizar o perfil';
+$lang['btn_reset'] = 'Reiniciar';
+$lang['btn_resendpwd'] = 'Enviar un contrasinal novo';
+$lang['btn_draft'] = 'Editar o borrador';
+$lang['btn_recover'] = 'Recuperar o borrador';
+$lang['btn_draftdel'] = 'Eliminar o borrador';
+$lang['btn_revert'] = 'Restaurar';
+$lang['loggedinas'] = 'Iniciou unha sesión como';
+$lang['user'] = 'Nome de persoa usuaria';
+$lang['pass'] = 'Contrasinal';
+$lang['newpass'] = 'Contrasinal novo';
+$lang['oldpass'] = 'Confirmar o contrasinal actual';
+$lang['passchk'] = 'de novo';
+$lang['remember'] = 'Lémbrame';
+$lang['fullname'] = 'Nome completo';
+$lang['email'] = 'Correo';
+$lang['register'] = 'Rexístrate';
+$lang['profile'] = 'Perfil de persoa usuaria';
+$lang['badlogin'] = 'Sentímolo, mais o nome de persoa usuaria ou o contrasinal non son correctos.';
+$lang['minoredit'] = 'Cambios menores';
+$lang['draftdate'] = 'O borrador gardouse automaticamente en';
+$lang['nosecedit'] = 'A páxina cambiou, no entanto, a información da sección estaba desactualizada, polo que se cargou a páxina completa en seu lugar.';
+$lang['regmissing'] = 'Sentímolo, mais ten que encher todos os campos.';
+$lang['reguexists'] = 'Sentímolo, mais xa existe unha persoa usuaria con ese nome.';
+$lang['regsuccess'] = 'A persoa usuaria foi creada e o contrasinal enviado por correo electrónico.';
+$lang['regsuccess2'] = 'A persoa usuaria foi creada.';
+$lang['regmailfail'] = 'Semella que houbo un erro ao tentar enviar o correo co contrasinal. Contacte coa persoa administradora!';
+$lang['regbadmail'] = 'O enderezo de correo proporcionado semella incorrecto - se considera que isto é un erro, contacte coa persoa administradora';
+$lang['regbadpass'] = 'Os dous contrasinais introducidos non coinciden: Ténteo de novo.';
+$lang['regpwmail'] = 'O seu contrasinal do DokuWiki';
+$lang['reghere'] = 'Aínda non ten unha conta? Cree unha';
+$lang['profna'] = 'Esta wiki non permite modificacións dos perfís';
+$lang['profnochange'] = 'Non hai cambios, non hai nada para facer.';
+$lang['profnoempty'] = 'Non se permite un nome ou un enderezo de correo baleiros.';
+$lang['profchanged'] = 'O perfil de persoa usuaria foi actualizado correctamente.';
+$lang['pwdforget'] = 'Esqueceu o seu contrasinal? Obteña un novo';
+$lang['resendna'] = 'Esta wiki non permite o reenvío de contrasinais.';
+$lang['resendpwd'] = 'Enviar un contrasinal novo a';
+$lang['resendpwdmissing'] = 'Sentímolo, ten que encher todos os campos.';
+$lang['resendpwdnouser'] = 'Sentímolo, non encontramos esta persoa usuaria na nosa base de datos.';
+$lang['resendpwdbadauth'] = 'Sentímolo, mais este código de autorización non é válido. Asegúrese de que usou a ligazón completa de confirmación.';
+$lang['resendpwdconfirm'] = 'Enviouse unha ligazón de confirmación por correo.';
+$lang['resendpwdsuccess'] = 'O seu novo contrasinal foi enviado por correo.';
+$lang['license'] = 'O contido deste wiki, agás onde se indique o contrario, ofrécese baixo a seguinte licenza:';
+$lang['licenseok'] = 'Nota: Ao editar esta páxina estás a aceptar o licenciamento do contido baixo a seguinte licenza:';
+$lang['searchmedia'] = 'Buscar nome de ficheiro:';
+$lang['searchmedia_in'] = 'Buscar en %s';
+$lang['txt_upload'] = 'Selecciona o arquivo para subir';
+$lang['txt_filename'] = 'Subir como (opcional)';
+$lang['txt_overwrt'] = 'Sobrescribir o arquivo existente';
+$lang['lockedby'] = 'Bloqueado actualmente por';
+$lang['lockexpire'] = 'O bloqueo termina o';
+$lang['willexpire'] = 'O seu bloqueo para editar esta páxina vai caducar nun minuto.\nPara de evitar conflitos, use o botón de previsualización para reiniciar o contador do tempo de bloqueo.';
+$lang['notsavedyet'] = 'Perderanse os cambios non gardados.\nEstá segura/o de que quere continuar?';
+$lang['rssfailed'] = 'Houbo un erro ao tentar obter este fío RSS: ';
+$lang['nothingfound'] = 'Non se encontrou nada.';
+$lang['mediaselect'] = 'Ficheiros multimedia';
+$lang['fileupload'] = 'Subir ficheiros multimedia';
+$lang['uploadsucc'] = 'Subiuse correctamente';
+$lang['uploadfail'] = 'Fallou ao subir. É posíbel que sexa un problema de permisos?';
+$lang['uploadwrong'] = 'Subida denegada. Esta extensión de ficheiro non está permitida!';
+$lang['uploadexist'] = 'Xa existe o ficheiro. Non se fixo nada.';
+$lang['uploadbadcontent'] = 'O contido subido non concorda coa extensión de ficheiro %s.';
+$lang['uploadspam'] = 'A subida foi bloqueada pola lista negra de correo lixo.';
+$lang['uploadxss'] = 'A subida foi bloqueada por un posíbel contido malicioso.';
+$lang['uploadsize'] = 'O ficheiro subido é grande de máis. (máx. %s)';
+$lang['deletesucc'] = 'O ficheiro "%s" foi eliminado.';
+$lang['deletefail'] = '"%s" non puido ser eliminado - comprobe os permisos.';
+$lang['mediainuse'] = 'O ficheiro "%s" non foi eliminado - aínda está en uso.';
+$lang['namespaces'] = 'Nomes de espazos';
+$lang['mediafiles'] = 'Ficheiro dispoñíbeis en';
+$lang['js']['searchmedia'] = 'Buscar ficheiros';
+$lang['js']['keepopen'] = 'Manter a xanela aberta na selección';
+$lang['js']['hidedetails'] = 'Ocultar os detalles';
+$lang['js']['nosmblinks'] = 'A ligazón aos compartidos do Windows só funciona co Microsoft Internet Explorer.
+Sempre podes copiar e colar a ligazón.';
+$lang['js']['linkwiz'] = 'Asistente de ligazóns';
+$lang['js']['linkto'] = 'Ligazón a:';
+$lang['js']['del_confirm'] = 'Quere eliminar os elementos seleccionados?';
+$lang['js']['mu_btn'] = 'Subir varios ficheiros dunha vez';
+$lang['mediausage'] = 'Utilice a seguinte sintaxe para referenciar este ficheiro:';
+$lang['mediaview'] = 'Ver o ficheiro orixinal';
+$lang['mediaroot'] = 'raíz';
+$lang['mediaupload'] = 'Suba aquí un ficheiro ao nome de espazo actual. Para crear subnomes de espazos deberá engadilos ao principio do seu nome de ficheiro en "Subir como", separados por dous puntos.';
+$lang['mediaextchange'] = 'A extensión de ficheiro foi alterada de .%s a .%s!';
+$lang['reference'] = 'Referencias para';
+$lang['ref_inuse'] = 'O ficheiro non pode ser eliminado, xa que aínda está a ser usado polas seguintes páxinas:';
+$lang['ref_hidden'] = 'Algunhas referencias están en páxinas para as cales non ten permisos de lectura';
+$lang['hits'] = 'Visualizacións';
+$lang['quickhits'] = 'Nomes de páxinas coincidentes';
+$lang['toc'] = 'Táboa de contidos';
+$lang['current'] = 'actual';
+$lang['yours'] = 'A súa versión';
+$lang['diff'] = 'Mostrar as diferenzas coa versión actual';
+$lang['diff2'] = 'Mostrar as diferenzas entre as revisións seleccionadas';
+$lang['line'] = 'Liña';
+$lang['breadcrumb'] = 'Trazado';
+$lang['youarehere'] = 'Vostede está aquí';
+$lang['lastmod'] = 'Última modificación';
+$lang['by'] = 'por';
+$lang['deleted'] = 'eliminado';
+$lang['created'] = 'creado';
+$lang['restored'] = 'a revisión antiga foi restaurada';
+$lang['external_edit'] = 'edición externa';
+$lang['summary'] = 'Resumo da edición';
+$lang['noflash'] = 'Precísase o <a href="http://www.adobe.com/products/flashplayer/">Plugin Adobe Flash</a> para mostrar este contido.';
+$lang['mail_newpage'] = 'páxina engadida:';
+$lang['mail_changed'] = 'páxina alterada:';
+$lang['mail_new_user'] = 'Persoa usuaria nova:';
+$lang['mail_upload'] = 'ficheiro subido:';
+$lang['qb_bold'] = 'Texto en negra';
+$lang['qb_italic'] = 'Texto en cursiva';
+$lang['qb_underl'] = 'Texto subliñado';
+$lang['qb_code'] = 'Texto de código';
+$lang['qb_strike'] = 'Texto riscado';
+$lang['qb_h1'] = 'Título de nivel 1';
+$lang['qb_h2'] = 'Título de nivel 2';
+$lang['qb_h3'] = 'Título de nivel 3';
+$lang['qb_h4'] = 'Título de nivel 4';
+$lang['qb_h5'] = 'Título de nivel 5';
+$lang['qb_link'] = 'Ligazón interna';
+$lang['qb_extlink'] = 'Ligazón externa';
+$lang['qb_hr'] = 'Liña horizontal';
+$lang['qb_ol'] = 'Elemento de lista ordenada';
+$lang['qb_ul'] = 'Elemento de lista desordenada';
+$lang['qb_media'] = 'Engadir imaxes e outros ficheiros';
+$lang['qb_sig'] = 'Inserir unha sinatura';
+$lang['qb_smileys'] = 'Emoticonas';
+$lang['qb_chars'] = 'Caracteres especiais';
+$lang['admin_register'] = 'Engadir unha persoa usuaria nova';
+$lang['metaedit'] = 'Editar os metadatos';
+$lang['metasaveerr'] = 'Non se puideron escribir os metadatos';
+$lang['metasaveok'] = 'Os metadatos foron gardados';
+$lang['img_backto'] = 'Volver a';
+$lang['img_title'] = 'Título';
+$lang['img_caption'] = 'Lenda';
+$lang['img_date'] = 'Data';
+$lang['img_fname'] = 'Nome do ficheiro';
+$lang['img_fsize'] = 'Tamaño';
+$lang['img_artist'] = 'Fotógrafa/o';
+$lang['img_copyr'] = 'Copyright';
+$lang['img_format'] = 'Formato';
+$lang['img_camera'] = 'Cámara';
+$lang['img_keywords'] = 'Palabras chave';
+$lang['subscribe_success'] = '%s foi engadido á lista de subscrición de cambios de %s';
+$lang['subscribe_error'] = 'Erro ao tentar engadir %s á lista de subscrición de cambios de %s';
+$lang['subscribe_noaddress'] = 'Non hai ningún enderezo asociado ao seu nome de persoa usuaria: non pode ser engadida/o á lista de subscrición';
+$lang['unsubscribe_success'] = 'Eliminouse %s da lista de subscrición de cambios de %s';
+$lang['unsubscribe_error'] = 'Erro ao tentar eliminar %s da lista de subscrición de cambios de %s';
+$lang['authmodfailed'] = 'A configuración de autenticación de persoa usuaria é incorrecta. Informe á persoa administradora do seu Wiki.';
+$lang['authtempfail'] = 'A autenticación de persoa usuaria non está dispoñíbel de modo temporal. Se esta situación persiste informe á persoa administradora do seu Wiki.';
+$lang['i_chooselang'] = 'Seleccione o seu idioma';
+$lang['i_installer'] = 'Instalador do DokuWiki';
+$lang['i_wikiname'] = 'Nome do Wiki';
+$lang['i_enableacl'] = 'Activar o lista de control de acceso (ACL) (recomendado)';
+$lang['i_superuser'] = 'Superusuaria/o';
+$lang['i_problems'] = 'O instalador encontrou algúns problemas que se mostran a continuación. Non poderá continuar até que os solucione.';
+$lang['i_modified'] = 'Por razóns de seguridade este script só funcionará cunha instalación nova e sen modificar do Dokuwiki.
+ Pode ou ben extraer de novo os ficheiros desde o paquete descargado ou consultar as
+ <a href="http://dokuwiki.org/install">instruccións completas de instalación do Dokuwiki</a>';
+$lang['i_funcna'] = 'A función <code>%s</code> de PHP non está dispoñíbel. Pode que o seu provedor de hospedaxe a desactivase por algún motivo.';
+$lang['i_phpver'] = 'A súa versión <code>%s</code> de PHP é inferior á <code>%s</code> precisa. Debe actualizar a súa instalación de PHP.';
+$lang['i_permfail'] = '<code>%s</code> non é escribíbel polo DokuWiki. Debe corrixir a configuración de permisos deste directorio!';
+$lang['i_confexists'] = '<code>%s</code> xa existe';
+$lang['i_writeerr'] = 'Non se puido crear <code>%s</code>. Terá que comprobar os permisos do directorio/ficheiro e crear o ficheiro de modo manual.';
+$lang['i_badhash'] = 'dokuwiki.php é irrecoñecíbel ou foi modificado (hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - ilegal ou valor baleiro';
+$lang['i_success'] = 'A configuración terminou correctamente. Agora pode borrar o ficheiro install.php. Continúe até o
+ <a href="doku.php">seu novo DokuWiki</a>.';
+$lang['i_failure'] = 'Houbo algúns erros ao tentar escribir os ficheiros de configuración. Pode que precise solucionalos de mod manual antes
+ de que poder usar <a href="doku.php">o seu novo DokuWiki</a>.';
+$lang['i_policy'] = 'Regras iniciais da ACL';
+$lang['i_pol0'] = 'Wiki aberto (lectura, escritura, subida de arquivos para todas as persoas)';
+$lang['i_pol1'] = 'Wiki público (lectura para todas as persoas, escritura e subida de ficheiros para as persoas usuarias rexistradas)';
+$lang['i_pol2'] = 'Wiki pechado (lectura, escritura, subida de arquivos só para as persoas usuarias rexistradas)';
+$lang['i_retry'] = 'Tentar de novo';
+$lang['mu_intro'] = 'Aquí podes subir varios ficheiros dunha vez. Preme o botón Examinar para engadilos á fila. Preme en Subir cando remates.';
+$lang['mu_gridname'] = 'Nome do ficheiro';
+$lang['mu_gridsize'] = 'Tamaño';
+$lang['mu_gridstat'] = 'Estado';
+$lang['mu_namespace'] = 'Nome de espazo';
+$lang['mu_browse'] = 'Examinar';
+$lang['mu_toobig'] = 'demasiado grande';
+$lang['mu_ready'] = 'listo para subir';
+$lang['mu_done'] = 'feito';
+$lang['mu_fail'] = 'fallou';
+$lang['mu_authfail'] = 'a sesión caducou';
+$lang['mu_progress'] = '@PCT@% subido';
+$lang['mu_filetypes'] = 'Tipos de ficheiro permitidos';
+$lang['mu_info'] = 'ficheiros subidos.';
+$lang['mu_lasterr'] = 'Último erro:';
+$lang['recent_global'] = 'Agora mesmo está a ver os cambios no nome de espazo <b>%s</b>. Tamén pode <a href="%s">ver os cambios recentes en todo o Wiki</a>.';
+$lang['years'] = 'hai %d anos';
+$lang['months'] = 'hai %d meses';
+$lang['weeks'] = 'hai %d semanas';
+$lang['days'] = 'hai %d días';
+$lang['hours'] = 'hai %d horas';
+$lang['minutes'] = 'hai %d minutos';
+$lang['seconds'] = 'hai %d segundos';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/locked.txt
new file mode 100644
index 000000000..14240335e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/locked.txt
@@ -0,0 +1,3 @@
+====== Páxina bloqueada ======
+
+Esta páxina está actualmente bloqueada para a edición por outra persoa usuaria. Terá que agardar até que esa persoa usuaria termine de editar a páxina ou a que expire o bloqueo.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/login.txt
new file mode 100644
index 000000000..11719de50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/login.txt
@@ -0,0 +1,4 @@
+====== Inicio de sesión ======
+
+Actualmente non ten unha sesión iniciada! Insira as súas credenciais de autenticación para iniciar a sesión. Debe ter as cookies activadas para poder iniciar unha sesión.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/mailtext.txt
new file mode 100644
index 000000000..f7c06bc83
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/mailtext.txt
@@ -0,0 +1,17 @@
+Engadiuse ou modificouse unha páxina do seu DokuWiki. Aquí van os detalles:
+
+Data : @DATE@
+Navegador : @BROWSER@
+Enderezo IP : @IPADDRESS@
+Nome do host : @HOSTNAME@
+Revisión antiga : @OLDPAGE@
+Revision nova : @NEWPAGE@
+Resumo da edición : @SUMMARY@
+Usuaria/o : @USER@
+
+@DIFF@
+
+
+--
+Este correo foi xerado polo DokuWiki en
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/newpage.txt
new file mode 100644
index 000000000..c79ef6a41
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/newpage.txt
@@ -0,0 +1,4 @@
+====== Este tema aínda non existe ======
+
+Seguiu unha ligazón até un tema que aínda non existe. Se ten os permisos adecuados, pode creala vostede premendo no botón ''Crear esta páxina''.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/norev.txt
new file mode 100644
index 000000000..dd6027165
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/norev.txt
@@ -0,0 +1,4 @@
+====== Non existe esa revisión ======
+
+A revisión especificada non existe. Utilice o botón ''Revisións antigas'' para obter un listado das revisións antigas deste documento.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/preview.txt
new file mode 100644
index 000000000..01cc41dcc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/preview.txt
@@ -0,0 +1,4 @@
+====== Previsualización ======
+
+Isto é unha previsualización de como aparecerá o seu texto. Lembre: **Aínda non está gardado!**
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/pwconfirm.txt
new file mode 100644
index 000000000..e020790d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/pwconfirm.txt
@@ -0,0 +1,15 @@
+Ola @FULLNAME@!
+
+Alguén solicitou un contrasinal novo para o seu inicio de sesión no
+@TITLE@ en @DOKUWIKIURL@
+
+Se non foi vostede quen o solicitou pode ignorar este correo.
+
+Para confirmar que esta solicitude foi realmente enviada por vostede
+por favor, visite a seguinte ligazón.
+
+@CONFIRM@
+
+--
+Este correo foi xerador polo DokuWiki de
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/read.txt
new file mode 100644
index 000000000..912864c31
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/read.txt
@@ -0,0 +1,2 @@
+Esta páxina é só de lectura. Podes ver o código fonte, mais non pode alterala. Coméntello á persoa administradora se considera que é un erro.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/recent.txt
new file mode 100644
index 000000000..93f8632dd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/recent.txt
@@ -0,0 +1,5 @@
+====== Cambios recentes ======
+
+As seguintes páxinas foron cambiadas recentemente.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/register.txt
new file mode 100644
index 000000000..17d9e0ff4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/register.txt
@@ -0,0 +1,4 @@
+====== Rexistro como persoa usuaria nova ======
+
+Encha toda a información requirida a continuación para crear unha conta nova neste wiki. Asegúrese de proporcionar un **enderezo de correo electrónico válido** - se non se lle solicita aquí que insira un contrasinal, recibirá un contrasinal novo nese enderezo. O nome de persoa usuaria deberá ser un [[doku>pagename|nome de páxina]] válido.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/registermail.txt
new file mode 100644
index 000000000..e02fe1a1c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/registermail.txt
@@ -0,0 +1,14 @@
+Rexistrouse unha persoa usuaria nova. Estes son os detalles:
+
+Nome de usuaria/o : @NEWUSER@
+Nome completo : @NEWNAME@
+Correo : @NEWEMAIL@
+
+Data : @DATE@
+Navegador : @BROWSER@
+Enderezo IP : @IPADDRESS@
+Nome do host : @HOSTNAME@
+
+--
+Este correo foi xerado polo DokuWiki de
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/resendpwd.txt
new file mode 100644
index 000000000..eb8cf4835
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/resendpwd.txt
@@ -0,0 +1,3 @@
+====== Enviar un contrasinal novo ======
+
+Insira o seu nome de persoa usuaria no seguinte formulario para obter un contrasinal novo para a súa conta neste wiki. Enviarase unha ligazón de confirmación ao seu enderezo de correo rexistrado.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/revisions.txt
new file mode 100644
index 000000000..a08b54685
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/revisions.txt
@@ -0,0 +1,4 @@
+====== Revisións antigas ======
+
+Estas son as revisións antigas do documento actual. Para retomar unha revisión antiga: selecciónea na seguinte lista, prema en ''Editar esta páxina'' e gárdea.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/searchpage.txt
new file mode 100644
index 000000000..7157cdcbf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/searchpage.txt
@@ -0,0 +1,5 @@
+====== Procurar ======
+
+Podes encontrar os resultados da súa procura a continuación. Se non encontrou o que estaba a procurar, pode crear ou editar a páxina co nome relacionado coa súa procura co botón axeitado.
+
+===== Resultados =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/showrev.txt
new file mode 100644
index 000000000..88fb0c39d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/showrev.txt
@@ -0,0 +1,2 @@
+**Esta é unha revisión antiga do documento!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/stopwords.txt
new file mode 100644
index 000000000..c262147f8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/stopwords.txt
@@ -0,0 +1,246 @@
+# Isto é unha listaxe das palabras que o indexador ignora (stopwords); unha por liña
+# Cando edite este ficheiro asegúrese de usar os fins de liña UNIX (nova liña única)
+# Non precisa incluír palabras de menos de 3 caracteres - estas son ignoradas de todas as formas
+# Esta listaxe está baseada nas encontradas en http://www.ranks.nl/stopwords/ (aínda en proceso)
+# Actualizouse a listaxe a partir as stopwords dispoñibilizadas por Paulo Malvar en:
+# http://d108.dinaserver.com/hosting/paulomalvar.com/Paulo_Malvar_personal_webpage/Resources_files/Galician_single_and_multiword_stopwords_Verbal_Periphrases_and_Abbreviations.tgz
+# e tamén as listaxes de palabras gramaticais na Galipedia: http://gl.wikipedia.org/wiki/Categoría_gramatical
+abaixo
+acerca
+ademais
+agás
+aínda
+alén
+algún
+algunha
+algunhas
+algúns
+amais
+ante
+antes
+após
+aquel
+aquela
+aquelas
+aqueles
+aquén
+aquilo
+arredor
+bardante
+beira
+canda
+cando
+canto
+carón
+causa
+cerca
+como
+conforme
+consonte
+contra
+deica
+dela
+delas
+deles
+dende
+derredor
+derriba
+desde
+despois
+durante
+elas
+eles
+entre
+erades
+eramos
+eran
+eras
+esas
+eses
+esta
+está
+estaba
+estabades
+estabamos
+estaban
+estades
+estamos
+están
+estas
+este
+estea
+esteades
+esteamos
+estean
+esteas
+estes
+estivemos
+estiven
+estiver
+estivera
+estiveramos
+estiveran
+estiverdes
+estiveren
+estivermos
+estivese
+estivesemos
+estivesen
+estivo
+estou
+excepto
+fomos
+fora
+foramos
+foran
+fordes
+foren
+formos
+fose
+fosedes
+fosemos
+fosen
+habemos
+haberá
+haberán
+haberedes
+haberei
+haberemos
+habería
+haberíades
+haberíamos
+haxa
+haxades
+haxamos
+haxan
+haxas
+houbemos
+houben
+houber
+houbera
+houberades
+houberamos
+houberan
+houberemos
+houberen
+houberían
+houbermos
+houbese
+houbesedes
+houbesemos
+houbesen
+houbo
+isto
+lles
+logo
+mais
+máis
+malia
+mediante
+menos
+mesmo
+meus
+miña
+miñas
+moito
+nosa
+nosas
+noso
+nosos
+nunha
+onda
+outra
+outro
+para
+perante
+pero
+pois
+pola
+polas
+polo
+polos
+por
+porén
+porque
+prol
+quen
+redor
+rente
+respecto
+sacado
+sacando
+salvante
+salvo
+senón
+será
+serán
+serás
+seredes
+serei
+seremos
+sería
+seríamos
+serían
+seus
+sexa
+sexades
+sexamos
+sexan
+sexas
+sobre
+sodes
+somos
+súas
+tamén
+tedes
+temos
+teña
+teñades
+teñamos
+teñan
+teñas
+teño
+terá
+terán
+terás
+teredes
+terei
+teremos
+tería
+teriades
+teriamos
+terían
+terías
+teus
+tiña
+tiñades
+tiñamos
+tiñan
+tiñas
+tiveches
+tivemos
+tiven
+tiver
+tivera
+tiverades
+tiveramos
+tiveran
+tiveras
+tiverdes
+tiveren
+tivermos
+tivese
+tivesedes
+tivesemos
+tivesen
+tiveses
+tivestes
+tivo
+todo
+tras
+través
+túas
+unha
+unhas
+vostede
+vostedes
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/subscribermail.txt
new file mode 100644
index 000000000..0b1c3a662
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/subscribermail.txt
@@ -0,0 +1,19 @@
+Ola!
+
+A páxina @PAGE@ na wiki @TITLE@ foi mudada.
+Aquí van as modificacións:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Para desubscribirte deste rexistro de cambios de páxina
+na wiki en
+@DOKUWIKIURL@
+fai unha visita a
+@NEWPAGE@
+e selecciona 'Non avisar dos cambios'.
+
+--
+Este correo foi xerado polo DokuWiki en
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/updateprofile.txt
new file mode 100644
index 000000000..bfd598117
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/updateprofile.txt
@@ -0,0 +1,5 @@
+====== Actualizar o perfil da súa conta ======
+
+Só precisa cubrir os campos que desexe cambiar. Non pode cambiar o seu nome de persoa usuaria.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/uploadmail.txt
new file mode 100644
index 000000000..914c3644c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/uploadmail.txt
@@ -0,0 +1,14 @@
+Subiuse un ficheiro ao seu DokuWiki. Aquí van os detalles:
+
+Ficheiro : @MEDIA@
+Data : @DATE@
+Navegador : @BROWSER@
+Enderezo IP : @IPADDRESS@
+Nome do host : @HOSTNAME@
+Tamaño : @SIZE@
+Tipo MIME : @MIME@
+Usuaria/o : @USER@
+
+--
+Este correo foi xerado polo DokuWiki en
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/wordblock.txt
new file mode 100644
index 000000000..f219f8436
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/wordblock.txt
@@ -0,0 +1,4 @@
+====== Bloqueo por SPAM ======
+
+Os seus cambios **non** foron gardados porque conteñen unha ou varias palabras bloqueadas. Se tentou introducir spam no wiki -- Nen@ mal@! Se considera que é un erro, contacte coa persoa administradora deste Wiki.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/admin.txt
new file mode 100644
index 000000000..ada73e5d4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/admin.txt
@@ -0,0 +1,4 @@
+====== ניהול ======
+
+ניתן ×œ×ž×¦×•× ×ž×˜×” רשימה של משימות ניהול זמינות ב-DokuWiki.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/backlinks.txt
new file mode 100644
index 000000000..dfcdd22dd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/backlinks.txt
@@ -0,0 +1,3 @@
+====== ×§×™×©×•×¨×™× ×œ×חור ======
+
+זוהי רשימת ×“×¤×™× ×שר נר××” ×›×™ ×”× ×ž×§×©×¨×™× ×œ×“×£ ממנו הגעת.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/conflict.txt
new file mode 100644
index 000000000..d27a78559
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/conflict.txt
@@ -0,0 +1,6 @@
+====== גירסה עדכנית יותר של הקובץ קיימת ======
+
+גירסה עדכנית יותר של המסמך קיימת. דבר ×–×” קורה ×›×שר משתמש ×חר שינה ×ת המסמך בזמן שערכת ×ותו.
+
+מומלץ לעיין ×‘×”×‘×“×œ×™× ×ª×—×ª הודעה ול×חר מכן להחליט ×יזו גירסה כד××™ לשמור. לחיצה על הכפתור "שמור" תשמור ×ת הגרסה שערכת. לחיצה על הכפתור "בטל" תשמור ×ת הגרסה הקיימת.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/denied.txt
new file mode 100644
index 000000000..34c8417b4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/denied.txt
@@ -0,0 +1,3 @@
+====== הרש××” נדחתה ======
+
+×נו ×ž×¦×˜×¢×¨×™× ×ך ×ין לך הרש×ות מת×ימות כדי להמשיך. ×ולי שכחת להכנס למערכת? \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/diff.txt
new file mode 100644
index 000000000..f1216bb4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/diff.txt
@@ -0,0 +1,4 @@
+====== ×”×‘×“×œ×™× ======
+
+×›×ן ×ž×•×¦×’×™× ×”×”×‘×“×œ×™× ×‘×™×Ÿ הגרסה שנבחרה והגרסה הנוכחית של הדף.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/draft.txt
new file mode 100644
index 000000000..22fc88d9f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/draft.txt
@@ -0,0 +1,5 @@
+====== × ×ž×¦× ×§×•×‘×¥ ×˜×™×•×˜× ======
+
+העריכה ×”×חרונה שבוצעה לדף ×–×” ×œ× ×”×¡×ª×™×ž×” כהלכה. DokuWiki שמר ב×ופן ×וטומטי טיוטה של העבודה וב×פשרותך להשתמש בה כדי להמשיך ×ת העריכה. ניתן לר×ות מטה ×ת המידע שנשמר ×ž×”×¤×¢× ×”×§×•×“×ž×ª.
+
+ב×פשרותך לבחור ב//שחזור הטיוטה// של ×ותה עריכה //מחיקת הטיוטה// ×ו //ביטול// העריכה כליל. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/edit.txt
new file mode 100644
index 000000000..4d8151e9d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/edit.txt
@@ -0,0 +1 @@
+עריכת הדף ולחיצה על הכפתור "שמור" תעדכן ×ת תוכנו. מומלץ לעיין בדף ×”[[wiki:syntax|תחביר]] כדי להכיר ×ת כללי תחביר הויקי. × × ×œ×¢×¨×•×š ×ת הדף רק ×× ×”×“×‘×¨ נעשה כדי **לשפר** ×ותו. ×× ×”×¢×¨×™×›×” ×”×™× ×œ×¦×•×¨×š התנסות מומלץ לבקר ב[[playground:playground|×רגז החול]].
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/editrev.txt
new file mode 100644
index 000000000..a6c755cba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/editrev.txt
@@ -0,0 +1,2 @@
+**הדף שנפתח ×”×•× ×’×¨×¡×” ישנה של המסמך!** לחיצה על הכפתור "שמור" תשחזר ×ת המסמך לגרסה המוצגת כעת.
+---- \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/index.txt
new file mode 100644
index 000000000..12b7a960e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/index.txt
@@ -0,0 +1,4 @@
+====== ×ינדקס ======
+
+זהו קובץ ×ינדקס ×”× ×ž×¦× ×ž×¢×œ לכל ×”×“×¤×™× ×”×ž××•×¨×’× ×™× ×‘[[ויקי:דוקיוויקי]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/install.html
new file mode 100644
index 000000000..7831623c9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/install.html
@@ -0,0 +1,13 @@
+<p>דף ×–×” מסייע להתקנה וההגדרה הר×שוניות של
+<a href="http://dokuwiki.org">Dokuwiki</a>. מידע נוסף על מתקין זה זמין בדף
+<a href="http://dokuwiki.org/installer">התיעוד שלו</a>.</p>
+
+<p>DokuWiki עושה שימוש ×‘×§×‘×¦×™× ×¨×’×™×œ×™× ×œ×©×ž×™×¨×ª דפי ויקי ומידע נוסף הקשור ×œ×“×¤×™× ×לו (לדוגמה תמונות, רשימות חיפוש, גרס×ות קודמות וכו').
+לתפקוד תקין DokuWiki <strong>חייב</strong> גישה לכתיבה לתיקיות המכילות ×§×‘×¦×™× ×לו. מתקין ×–×” ×ינו יכול לקבוע הרש×ות לתיקיות.
+פעולה זו צריכה בד"×› להתבצע ישירות משורת הפקודה ×ו במקרה שנעשה שימוש בשרת מ×רח דרך FTP ×ו מנשק הניהול של המ×רח (cPanell לדוגמה).</p>
+
+<p>מתקין ×–×” יגדיר ×ת תצורת ×”-<acronym title="access control list">ACL</acronym> ב-DokuWiki שלך
+, ×–×” בתורו מ×פשר גישת מנהל לתפריט הניהול של DokuWiki כדי להתקין הרחבות, לנהל משתמשי×, לנהל גישות לדפי ויקי ×•×©×™× ×•×™×™× ×‘×”×’×“×¨×•×ª התצורה.
+×ין ×”×•× ×”×›×¨×—×™ לתפקוד DokuWiki ×ך ×”×•× ×™×”×¤×•×š ×ת Dokuwiki קל יותר לניהול.</p>
+
+<p>על ×ž×©×ª×ž×©×™× ×ž× ×•×¡×™× ×ו ×›×לו ×¢× ×“×¨×™×©×•×ª מיוחדות להתקנה להשתמש ×‘×§×™×©×•×¨×™× ×לו ×œ×¤×¨×˜×™× ×‘× ×•×’×¢ ל<a href="http://dokuwiki.org/install">הור×ות התקנה</a> ו<a href="http://dokuwiki.org/config">הגדרות תצורה</a>.</p>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/lang.php
new file mode 100644
index 000000000..8545d1542
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/lang.php
@@ -0,0 +1,224 @@
+<?php
+/**
+ * Hebrew language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @link http://sourceforge.net/projects/hebdokuwiki/
+ * @author ×’×™× ×©×¤×¨ <guysoft@ort.org.il>
+ * @author Denis Simakov <akinoame1@gmail.com>
+ * @author DoK <kamberd@yahoo.com>
+ * @author Dotan Kamber <kamberd@yahoo.com>
+ * @author Moshe Kaplan <mokplan@gmail.com>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'rtl';
+$lang['doublequoteopening'] = '“';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '‘';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = '\'';
+$lang['btn_edit'] = 'עריכה';
+$lang['btn_source'] = 'הצג ×ת מקור הדף';
+$lang['btn_show'] = 'הצג דף';
+$lang['btn_create'] = 'יצירת דף';
+$lang['btn_search'] = 'חפש';
+$lang['btn_save'] = 'שמור';
+$lang['btn_preview'] = 'תצוגה מקדימה';
+$lang['btn_top'] = 'חזור למעלה';
+$lang['btn_newer'] = '<< יותר חדש';
+$lang['btn_older'] = 'פחות חדש >>';
+$lang['btn_revs'] = 'גרס×ות קודמות';
+$lang['btn_recent'] = '×©×™× ×•×™×™× ×חרוני×';
+$lang['btn_upload'] = 'העלה';
+$lang['btn_cancel'] = 'בטל';
+$lang['btn_index'] = '×ינדקס';
+$lang['btn_secedit'] = 'עריכה';
+$lang['btn_login'] = 'כניסה';
+$lang['btn_logout'] = 'יצי××”';
+$lang['btn_admin'] = 'מנהל';
+$lang['btn_update'] = 'עדכן';
+$lang['btn_delete'] = 'מחק';
+$lang['btn_back'] = 'חזור';
+$lang['btn_backlink'] = '×§×™×©×•×¨×™× ×œ×›×ן';
+$lang['btn_backtomedia'] = 'לחזור לבחירת קובץ מדיה';
+$lang['btn_subscribe'] = 'עקוב ×חרי שינוי×';
+$lang['btn_unsubscribe'] = 'הפסק לעקוב';
+$lang['btn_subscribens'] = 'הרשמה ×œ×©×™× ×•×™×™× ×‘×ž×¨×—×‘ הש×';
+$lang['btn_unsubscribens'] = 'הסרת הרשמה ×œ×©×™× ×•×™×™× ×‘×ž×—×‘ הש×';
+$lang['btn_profile'] = 'עדכן פרופיל';
+$lang['btn_reset'] = '×יפוס';
+$lang['btn_resendpwd'] = 'שלח סיסמה חדשה';
+$lang['btn_draft'] = 'עריכת טיוטה';
+$lang['btn_recover'] = 'שחזור טיוטה';
+$lang['btn_draftdel'] = 'מחיקת טיוטה';
+$lang['loggedinas'] = '×¨×©×•× ×›-';
+$lang['user'] = '×©× ×ž×©×ª×ž×©';
+$lang['pass'] = 'סיסמה';
+$lang['newpass'] = 'סיסמה חדשה';
+$lang['oldpass'] = '×שר ×ת הסיסמה הנוכחית';
+$lang['passchk'] = 'שוב';
+$lang['remember'] = 'זכור ×ותי';
+$lang['fullname'] = '×©× ×ž×œ×';
+$lang['email'] = 'דו×"ל';
+$lang['register'] = 'הרשמה';
+$lang['profile'] = 'פרופיל';
+$lang['badlogin'] = 'סליחה, ×©× ×”×ž×©×ª×ž×© ×ו הסיסמה שגויי×';
+$lang['minoredit'] = '×©×™× ×•×™× ×ž×™× ×•×¨×™×™×';
+$lang['draftdate'] = 'טיוטה נשמרה ב-';
+$lang['regmissing'] = 'סליחה, עליך ×œ×ž×œ× ×ת כל השדות';
+$lang['reguexists'] = 'סליחה, משתמש ×‘×©× ×–×” כבר נרש×';
+$lang['regsuccess'] = 'הרשמה הצליחה, המשתמש × ×¨×©× ×•×”×•×“×¢×” נשלחה בדו×ר';
+$lang['regsuccess2'] = 'הרשמה הצליחה, המשתמש נרש×.';
+$lang['regmailfail'] = 'שליחת הודעת הדו×ר כשלה, × × ×œ×™×¦×•×¨ קשר ×¢× ×ž× ×”×œ ×”×תר';
+$lang['regbadmail'] = 'כתובת דו×ר כנר××” ×œ× ×ª×§×¤×”, ×× ×œ× ×›×š ×”×™× ×™×© ליצור קשר ×¢× ×ž× ×”×œ ×”×תר';
+$lang['regbadpass'] = 'שתי הסיסמות הן ×œ× ×–×”×•×ª, × × ×œ× ×¡×•×ª שוב';
+$lang['regpwmail'] = 'סיסמת הדוקוויקי שלך';
+$lang['reghere'] = 'עדיין ×œ×œ× ×©×-משתמש? ההרשמה ×›×ן';
+$lang['profna'] = 'בוויקי ×”×–×” ×œ× × ×™×ª×Ÿ לשנות פרופיל';
+$lang['profnochange'] = '×ין שינוי×, פרופיל ×œ× ×¢×•×“×›×Ÿ';
+$lang['profnoempty'] = '×©× ×•×›×ª×•×‘×ª דו×"ל ×œ× ×™×›×•×œ×™× ×œ×”×™×•×ª ריקי×';
+$lang['profchanged'] = 'פרופיל עודכן בהצלחה';
+$lang['pwdforget'] = 'שכחת סיסמה? קבל חדשה';
+$lang['resendna'] = 'הוויקי ×”×–×” ×œ× ×ª×•×ž×š בחידוש סיסמה';
+$lang['resendpwd'] = 'שלח סיסמה חדשה עבור';
+$lang['resendpwdmissing'] = 'סליחה, עליך ×œ×ž×œ× ×ת כל השדות';
+$lang['resendpwdnouser'] = 'סליחה, משתמש ×‘×©× ×–×” ×œ× × ×ž×¦×';
+$lang['resendpwdbadauth'] = 'סליחה, קוד ×ימות ×–×” ×ינו תקף. יש ×œ×•×“× ×›×™ נעשה שימוש ×‘×ž×œ×•× ×§×™×©×•×¨ ×”×ימות.';
+$lang['resendpwdconfirm'] = 'קישור ×ימות נשלח בדו×"ל.';
+$lang['resendpwdsuccess'] = 'סיסמה חדשה נשלחה בדו×ר';
+$lang['txt_upload'] = 'בחר קובץ להעלות';
+$lang['txt_filename'] = 'הכנס ×©× ×œ×•×•×™×§×™ (בחירה)';
+$lang['txt_overwrt'] = 'לכתוב ×‘×ž×§×•× ×§×•×‘×¥ קיי×';
+$lang['lockedby'] = 'נעול על ידי';
+$lang['lockexpire'] = 'נעילה פגה';
+$lang['willexpire'] = 'נעילה תחלוף עוד זמן קצר. \nלמניעת התנגשויות יש להשתמש בכפתור הרענון מטה כדי ל×תחל ×ת הנעילה שנית';
+$lang['notsavedyet'] = '×§×™×™×ž×™× ×©×™× ×•×™×™× ×©×˜×¨× × ×©×ž×¨×• ו×שר ×™×בדו \n ×”×× ×œ×”×ž×©×™×š?';
+$lang['rssfailed'] = 'כשל ב-RSS';
+$lang['nothingfound'] = '×œ× × ×ž×¦×ו תוצ×ות';
+$lang['mediaselect'] = 'בחירת קובץ מדיה';
+$lang['fileupload'] = 'העל×ת קובץ מדיה';
+$lang['uploadsucc'] = 'העל×ת הקובץ בוצעה בהצלחה';
+$lang['uploadfail'] = 'קרתה שגי××” בעת העל×ת הקובץ. תיתכן ובעייה זו נוצרה עקב הרש×ות שגיות.';
+$lang['uploadwrong'] = 'העל××” ×œ× ×ושרה. ×§×‘×¦×™× ×‘×¡×™×•×ž×ª זו ×סורי×';
+$lang['uploadexist'] = 'הקובץ כבר קיי×. פעולה בוטלה';
+$lang['uploadbadcontent'] = 'התוכן שהועלה ×œ× ×ª×× ×ת הסיומת %s של הקובץ.';
+$lang['uploadspam'] = 'ההעל××” נחסמה על ידי הרשימה השחורה של הספ××.';
+$lang['uploadxss'] = 'ההעל××” נחסמה בשל חשד לתוכן זדוני.';
+$lang['deletesucc'] = 'קובץ %s נמחק';
+$lang['deletefail'] = '×œ× ×™×›×•×œ×ª×™ למחוק "%s" -- בדקו הרש×ות';
+$lang['mediainuse'] = 'קובץ "%s" ×œ× × ×ž×—×§ - ×”×•× ×¢×“×™×™×Ÿ בשימוש';
+$lang['namespaces'] = 'שמות מתח×';
+$lang['mediafiles'] = '×§×‘×¦×™× ×–×ž×™× ×™× ×‘-';
+$lang['js']['searchmedia'] = 'חיפוש קבצי×';
+$lang['js']['keepopen'] = 'הש×ר חלון פתוח בבחירה';
+$lang['js']['hidedetails'] = 'הסתר פרטי×';
+$lang['js']['nosmblinks'] = ':( קישור למערכת ×§×‘×¦×™× ×©×œ חלונות פועל רק בדפדפן ×ינטרנט ×קספלורר.
+ ×–×” בסדר, ×ין צורך לעבור. ×פשר להעתיק ולהדביק ×ת הקישור';
+$lang['js']['del_confirm'] = 'ב×מת למחוק?';
+$lang['js']['mu_btn'] = 'העל×ת ×§×‘×¦×™× ×ž×¨×•×‘×™×';
+$lang['mediausage'] = 'השתמש בתחביר ×”×‘× ×œ×”×ª×™×—×¡×•×ª ×ל קובץ ×–×”:';
+$lang['mediaview'] = 'הצג ×ת הקובץ המקורי';
+$lang['mediaroot'] = 'root';
+$lang['mediaupload'] = '×›×ן ניתן להעלות קובץ למרחב השמות הנוכחי. ליצירת תתי-מרחבי שמות ×¦×¨×¤× ×‘-"העלה" לתחילת ×©× ×”×§×•×‘×¥ ×ž×•×¤×¨×“×™× ×‘×¤×¡×™×§×™×';
+$lang['mediaextchange'] = 'סיומת הקובץ השתנתה מ-.%s ל-.%s!';
+$lang['reference'] = '×§×™×©×•×¨×™× ×œ';
+$lang['ref_inuse'] = '×œ× ×™×›×•×œ×ª×™ למחוק קובץ, ×”×“×¤×™× ×”×‘××™× ×¢×“×™×™×Ÿ ×ž×©×ª×ž×©×™× ×‘×•:';
+$lang['ref_hidden'] = 'יש ×§×™×©×•×¨×™× ×œ×“×¤×™× ×œ×œ× ×”×¨×©×ת קרי××”';
+$lang['hits'] = 'פגיעות';
+$lang['quickhits'] = '×“×¤×™× ×©× ×ž×¦×ו';
+$lang['toc'] = 'תוכן ×¢× ×™×™× ×™×';
+$lang['current'] = 'גירסה נוכחית';
+$lang['yours'] = 'הגרסה שלך';
+$lang['diff'] = 'הצג ×©×™× ×•×™× ×ž×’×¨×¡×” זו ועד הנוכחית';
+$lang['diff2'] = 'הצגת ×”×‘×“×œ×™× ×‘×™×Ÿ הגרס×ות שנבחרו';
+$lang['line'] = 'שורה';
+$lang['breadcrumb'] = '×‘×™×§×•×¨×™× ×חרוני×';
+$lang['youarehere'] = '×תה נמצה ×›×ן';
+$lang['lastmod'] = 'שונה ל×חרונה ב';
+$lang['by'] = 'על ידי';
+$lang['deleted'] = 'נמחק';
+$lang['created'] = 'נוצר';
+$lang['restored'] = 'שוחזר';
+$lang['external_edit'] = 'עריכה חיצונית';
+$lang['summary'] = 'תקציר העריכה';
+$lang['mail_newpage'] = 'דף נוסף:';
+$lang['mail_changed'] = 'דף שונה:';
+$lang['mail_new_user'] = 'משתמש חדש:';
+$lang['mail_upload'] = 'קובץ הועלה:';
+$lang['qb_bold'] = 'טקסט מודגש';
+$lang['qb_italic'] = 'טקסט נטוי';
+$lang['qb_underl'] = 'טקסט ×¢× ×§×• תחתון';
+$lang['qb_code'] = 'קוד';
+$lang['qb_strike'] = 'טקסט מחוק';
+$lang['qb_h1'] = 'כותרת רמה 1';
+$lang['qb_h2'] = 'כותרת רמה 2';
+$lang['qb_h3'] = 'כותרת רמה 3';
+$lang['qb_h4'] = 'כותרת רמה 4';
+$lang['qb_h5'] = 'כותרת רמה 5';
+$lang['qb_h'] = 'כותרת';
+$lang['qb_hs'] = 'בחירת כותרת';
+$lang['qb_link'] = 'קישור פנימי';
+$lang['qb_extlink'] = 'קישור חיצוני';
+$lang['qb_hr'] = 'קו ×ופקי';
+$lang['qb_ol'] = '×יבר ברשימה ממוספרת';
+$lang['qb_ul'] = '×בר ברשימה ×œ× ×ž×ž×•×¡×¤×¨×ª';
+$lang['qb_media'] = 'תמונות ×ו קובץ ×חר';
+$lang['qb_sig'] = 'הזנת חתימה';
+$lang['qb_smileys'] = 'פרצופוני×';
+$lang['qb_chars'] = '×¡×™×ž× ×™× ×ž×™×•×—×“×™×';
+$lang['admin_register'] = 'להוסיף משתמש חדש';
+$lang['metaedit'] = 'ערוך נתוני×';
+$lang['metasaveerr'] = 'כשל בשמירת נתוני×';
+$lang['metasaveok'] = '× ×ª×•× ×™× × ×©×ž×¨×•';
+$lang['img_backto'] = 'הזור ל';
+$lang['img_title'] = 'כותרת';
+$lang['img_caption'] = 'תי×ור';
+$lang['img_date'] = 'ת×ריך';
+$lang['img_fname'] = '×©× ×”×§×•×‘×¥';
+$lang['img_fsize'] = 'גודל';
+$lang['img_artist'] = 'צל×';
+$lang['img_copyr'] = 'זכויות';
+$lang['img_format'] = 'פורמט';
+$lang['img_camera'] = 'מצלמה';
+$lang['img_keywords'] = 'מילות מפתח';
+$lang['subscribe_success'] = '%s נוסף לרשימת ×”×ž×›×•×ª×‘×™× ×¢×‘×•×¨ %s';
+$lang['subscribe_error'] = 'שגי××” בהוספת %s לרשימת ×”×ž×›×•×ª×‘×™× ×¢×‘×•×¨ %s';
+$lang['subscribe_noaddress'] = '×ין כתובת המשויכת ×œ×¨×™×©×•× ×©×œ×š ולכן ×ין ב×פשרותך להצטרף לרשימת המכותבי×';
+$lang['unsubscribe_success'] = '%s הוסר מרשימת ×”×ž×›×•×ª×‘×™× ×¢×‘×•×¨ %s';
+$lang['unsubscribe_error'] = 'שגי××” בהסרת %s מרשימת ×”×ž×›×•×ª×‘×™× ×¢×‘×•×¨ %s';
+$lang['authmodfailed'] = 'תצורת ×ימות ×ž×©×ª×ž×©×™× ×’×¨×•×¢×”. × × ×œ×“×•×•×— למנהל הויקי.';
+$lang['authtempfail'] = '×ימות ×ž×©×ª×ž×©×™× ×ינו זמין כרגע. ×× ×ž×¦×‘ ×–×” נמשך × × ×œ×”×•×“×™×¢ למנהל הויקי.';
+$lang['i_chooselang'] = '× × ×œ×‘×—×•×¨ שפה';
+$lang['i_installer'] = 'DokuWiki Installer';
+$lang['i_wikiname'] = '×©× ×”×•×™×§×™';
+$lang['i_enableacl'] = '×פשר ACL (מומלץ)';
+$lang['i_superuser'] = 'משתמש-על';
+$lang['i_problems'] = 'המתקין ×–×™×”×” מספר בעיות המצוינות מטה. ×ין ב×פשרותך להמשיך לפני תיקונן.';
+$lang['i_modified'] = 'משיקולי ×בטחה תסריט ×–×” יעבוד ×ך ורק ×¢× ×”×ª×§× ×ª DokuWiki חדשה ×©×œ× ×¢×‘×¨×” כל שינוי.
+ עליך לחלץ שנית ×ת ×”×§×‘×¦×™× ×ž×”×—×‘×™×œ×” שהורדה ×ו להעזר בדף
+ <a href="http://dokuwiki.org/install">Dokuwiki installation instructions</a>';
+$lang['i_funcna'] = 'פונקצית ×”-PHP <code>%s</code> ××™× ×” זמינה. יתכן ×›×™ מ×רח ×”×תר ×—×¡× ×ותה מסיבה כלשהי?';
+$lang['i_phpver'] = 'גרסת ×”-PHP שלך <code>%s</code> נמוכה מהדרוש. עליך לשדרג ×ת התקנת ×”-PHP';
+$lang['i_permfail'] = '<code>%s</code> ××™× ×” ברת כתיבה על ידי DokuWiki. עליך לשנות הרש×ות ספריה זו!';
+$lang['i_confexists'] = '<code>%s</code> כבר קיי×';
+$lang['i_writeerr'] = '×ין ×פשרות ליצור ×ת <code>%s</code>. × × ×œ×‘×“×•×§ ×ת הרש×ות הקובץ/ספריה וליצור ×ת הקובץ ידנית.';
+$lang['i_badhash'] = 'קובץ Dokuwiki.php ×œ× ×ž×–×•×”×” ×ו שעבר ×©×™× ×•×™×™× (hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - ערך ×œ× ×—×•×§×™ ×ו ריק';
+$lang['i_success'] = 'ההגדרה הסתימה בהצלחה. ב×פשרותך למחוק עתה ×ת הקובץ install.php ולהמשיך ×ל <a href="doku.php">DokuWiki החדש שלך</a>.';
+$lang['i_failure'] = 'מספר שגי×ות ×רעו בעת כתיבת קבצי התצורה. ייתכן ×›×™ ×™×”×™×” צורך ×œ×ª×§× × ×™×“× ×™×ª לפני שניתן ×™×”×™×” להשתמש ב<a href="doku.php">DokuWiki החדש שלך</a>.';
+$lang['i_policy'] = 'מדיניות ACL תחילית';
+$lang['i_pol0'] = 'ויקי פתוח (קרי××”, כתיבה והעל××” לכול×)';
+$lang['i_pol1'] = ' ויקי ציבורי (קרי××” לכול×, כתיבה והעל××” ×œ×ž×©×ª×ž×©×™× ×¨×©×•×ž×™×)';
+$lang['i_pol2'] = 'ויקי סגור (קרי××”, כתיבה והעל××” ×œ×ž×©×ª×ž×©×™× ×¨×©×•×ž×™× ×‘×œ×‘×“)';
+$lang['i_retry'] = 'נסיון נוסף';
+$lang['mu_intro'] = '×›×ן תוכל להעלות ×§×‘×¦×™× ×ž×¨×•×‘×™×. לחץ על כפתור החיפוש להוסיף ××•×ª× ×œ×ž×—×¡× ×™×ª. לחץ על העל××” לסיו×.';
+$lang['mu_gridname'] = '×©× ×§×•×‘×¥';
+$lang['mu_gridsize'] = 'גודל';
+$lang['mu_gridstat'] = 'סט×טןס';
+$lang['mu_browse'] = 'חיפוש';
+$lang['mu_toobig'] = 'גדול מדי';
+$lang['mu_ready'] = 'מוכן להעל××”';
+$lang['mu_done'] = 'סיי×';
+$lang['mu_fail'] = 'נכשל';
+$lang['mu_info'] = '×”×§×‘×¦×™× ×”×•×¢×œ×•';
+$lang['mu_lasterr'] = 'שגי××” ×חרונה:';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/locked.txt
new file mode 100644
index 000000000..307874a73
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/locked.txt
@@ -0,0 +1,3 @@
+====== דף נעול ======
+
+דף ×–×” נעול כרגע לעריכה על ידי משתמש ×חר. עליך להמתין עד שהמשתמש ×™×¡×™×™× ×ת העריכה ×ו עד שהנעילה תפוג.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/login.txt
new file mode 100644
index 000000000..5a575f1f8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/login.txt
@@ -0,0 +1,3 @@
+====== כניסה ======
+
+×ינך ברשומות המערכת כרגע! יש להזין ×ת נתוני ההזדהות מטה לכניסה. יש ל×פשר עוגיות (cookies) כדי להכנס.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/mailtext.txt
new file mode 100644
index 000000000..d7990b2b3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/mailtext.txt
@@ -0,0 +1,17 @@
+דף בDokuWiki נוסף ×ו שונה. ×”× ×” הפרטי×:
+
+Date : @DATE@
+Browser : @BROWSER@
+IP-Address : @IPADDRESS@
+Hostname : @HOSTNAME@
+Old Revision: @OLDPAGE@
+New Revision: @NEWPAGE@
+Edit Summary: @SUMMARY@
+User : @USER@
+
+@DIFF@
+
+--
+
+דף זה נוצר ע"י DokuWiki ב-
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/newpage.txt
new file mode 100644
index 000000000..ac6fb7386
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/newpage.txt
@@ -0,0 +1,3 @@
+====== דף ×–×” עדיין ×œ× ×§×™×™× ======
+
+הדף ×ליו הגעת עדיין ×œ× ×§×™×™×. לחיצה על הכפתור "יצירת דף" תצור ×ותו. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/norev.txt
new file mode 100644
index 000000000..3d08e16db
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/norev.txt
@@ -0,0 +1,4 @@
+====== גרסה ×œ× ×§×™×™×ž×ª ======
+
+הגרסה שהוזנה ××™× ×” קיימת. × × ×œ×”×©×ª×ž×© בכפתור ''גרס×ות קודמות'' להצגת רשימת הגרס×ות של מסמך ×–×”.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/preview.txt
new file mode 100644
index 000000000..1331c23ad
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/preview.txt
@@ -0,0 +1,4 @@
+====== תצוגה מקדימה ======
+
+זו תצוגה מקדימה של הדף לעתיד. להזכירך: **הדף עדיין ×œ× × ×©×ž×¨!**
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/pwconfirm.txt
new file mode 100644
index 000000000..255195c7f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/pwconfirm.txt
@@ -0,0 +1,13 @@
+×©×œ×•× @FULLNAME@!
+
+מישהו ביקש סיסמה חדשה עבור הכניסה שלך ל-@TITLE@ ב-@DOKUWIKIURL@
+
+×× ×œ× ×‘×™×§×©×ª סיסמה חדשה פשוט ×”×ª×¢×œ× ×ž×“×•×"ל ×–×”.
+
+כדי ל×שר שהבקשה ב×מת נשלחה על ידך × × ×”×©×ª×ž×© בקישור הב×.
+
+@CONFIRM@
+
+--
+דו×ר ×–×” נוצר על ידי DokuWiki ב-
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/read.txt
new file mode 100644
index 000000000..8e4c177ee
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/read.txt
@@ -0,0 +1,2 @@
+דף ×–×” ×”×•× ×“×£ לקרי××” בלבד. ניתן לצפות בקוד המקור שלו, ×בל ×œ× × ×™×ª×Ÿ לערוך ×ותו. ניתן לפנות ×ל מנהל הויקי ×× ×œ×“×¢×ª×š נפלה טעות.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/recent.txt
new file mode 100644
index 000000000..0febd96e5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/recent.txt
@@ -0,0 +1,5 @@
+====== ×©×™× ×•×™×™× ××—×¨×•× ×™× ======
+
+×”×“×¤×™× ×”×‘××™× ×¢×‘×¨×• ×©×™× ×•×™×™× ×œ×חרונה.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/register.txt
new file mode 100644
index 000000000..7225b02fd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/register.txt
@@ -0,0 +1,3 @@
+====== הרשמה כמשתמש חדש ======
+
+יש ×œ×ž×œ× ×ת כל המידע מטה כדי ליצור חשבון חדש בויקי ×–×”. יש ×œ×•×“× ×›×™ מוזנת **כתובת דו×"ל תקפה**- סיסמתך החדשה תשלח לכתובת זו\\ על ×©× ×”×ž×©×ª×ž×© להיות [[hdoku>ויקי:×©× ×“×£|×©× ×“×£]] תקף.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/registermail.txt
new file mode 100644
index 000000000..bb64a8158
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/registermail.txt
@@ -0,0 +1,14 @@
+משתמש חדש נרש×. ×”× ×” הפרטי×:
+
+×©× ×ž×©×ª×ž×© : @NEWUSER@
+×©× ×ž×œ× : @NEWNAME@
+דו×"ל : @NEWEMAIL@
+
+ת×ריך : @DATE@
+דפדפן : @BROWSER@
+כתובת רשת : @IPADDRESS@
+×©× ×”×ž×—×©×‘ : @HOSTNAME@
+
+--
+דו×"ל ×–×” נוצר על ידי DokuWiki ב-
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/resendpwd.txt
new file mode 100644
index 000000000..47e7749c2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/resendpwd.txt
@@ -0,0 +1,4 @@
+====== שליחת סיסמה חדשה ======
+
+יש להזין ×ת ×©× ×”×ž×©×ª×ž×© בטופס מטה ולבקש סיסמה חדשה לחשבון שלך בויקי ×–×”. קישור ל×ימות ישלח לכתובת הדו"ל ×יתה נרשמת.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/revisions.txt
new file mode 100644
index 000000000..6b23402f5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/revisions.txt
@@ -0,0 +1,4 @@
+====== גרס×ות ישנות ======
+
+×לה גרס×ות מוקדמות יותר של המסמך הנוכחי. כדי לשחזר גרסה מוקדמת יותר יש ללחוץ על הכפתור ''עריכה'' ולשמור ×ת הדף.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/searchpage.txt
new file mode 100644
index 000000000..aed23be24
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/searchpage.txt
@@ -0,0 +1,5 @@
+====== חיפוש ======
+
+ניתן לר×ות ×ת תוצ×ות החיפוש למטה. ×× ×œ× × ×ž×¦×ו ×“×¤×™× ×‘×—×™×¤×•×©, לחיצה על הכפתור "עריכה" תיצור דף חדש על ×©× ×ž×™×œ×ª החיפוש שהוזנה.
+
+===== תוצ×ות ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/showrev.txt
new file mode 100644
index 000000000..22ca0c3ae
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/showrev.txt
@@ -0,0 +1,2 @@
+**זו גרסה ישנה של המסמך!** לחיצה על כותרת המסמך תציג ×ת גרסתו הנוכחית.
+---- \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/stopwords.txt
new file mode 100644
index 000000000..ca85eb2e0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/stopwords.txt
@@ -0,0 +1,29 @@
+# זוהי רשימת ×ž×™×œ×™× ×ž×ž× ×” ×ž×ª×¢×œ× ×¡×•×¨×§ התוכן, ×חת בכל שורה
+# בעורכך קובץ ×–×” עליך ×œ×•×“× ×›×™ נעשה שימוש בסימני סוף שורה של UNIX (שורה חדשה ×œ×œ× ×”×—×–×¨×ª הסמן)
+# ×ין צורך לכלול ×ž×™×œ×™× ×‘× ×•×ª פחות משלוש ×ותיות - ×לו נפסחות בכל מקרה
+# רשימה זו מבוססת על ×לו הנמצ×ות ב- http://www.ranks.nl/stopwords
+about
+are
+and
+you
+your
+them
+their
+com
+for
+from
+into
+how
+that
+the
+this
+was
+what
+when
+where
+who
+will
+with
+und
+the
+www
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/subscribermail.txt
new file mode 100644
index 000000000..7b05c4f47
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/subscribermail.txt
@@ -0,0 +1,17 @@
+שלו×!
+
+הדף @PAGE@ בויקי @TITLE@ השתנה.
+×”× ×” השינויי×:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+כדי להפסיק ×ת ההרשמה לדף ×–×” יש להכנס לויקי ב-
+@DOKUWIKIURL@ לבקר בדף
+@NEWPAGE@
+ולבחור 'הפסק לעקוב'.
+
+--
+דו×"ל ×–×” נוצר על ידי DokuWiki ב-
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/updateprofile.txt
new file mode 100644
index 000000000..494d8389d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/updateprofile.txt
@@ -0,0 +1,5 @@
+====== עידכון פרטי חשבונך ======
+
+×ין צורך ×œ×ž×œ× ×ž×¢×‘×¨ ×œ×¤×¨×˜×™× ×”×ž×™×•×¢×“×™× ×œ×©×™× ×•×™. ×œ× × ×™×ª×Ÿ לשנות ×ת ×©× ×”×ž×©×ª×ž×©.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/uploadmail.txt
new file mode 100644
index 000000000..fd670796c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/uploadmail.txt
@@ -0,0 +1,14 @@
+קובץ הועלה ×ל הדוקוויקי שלך. ×”× ×” פרטיו:
+
+קובץ : @MEDIA@
+ת×ריך : @DATE@
+דפדפן : @BROWSER@
+כתובת IP : @IPADDRESS@
+מ×רח : @HOSTNAME@
+גודל : @SIZE@
+סיווג : @MIME@
+משתמש : @USER@
+
+--
+דו×ר ×–×” נוצר על ידי דוקוויקי בתובת
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/wordblock.txt
new file mode 100644
index 000000000..b7c3f0a7c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/wordblock.txt
@@ -0,0 +1,4 @@
+====== הצפה נחסמה ======
+
+×”×©× ×•×™×™× ×©×œ×š **ל×** נשמרו מפני ×©×”× ×ž×›×™×œ×™× ×ž×™×œ×” חסומה ×ו יותר. ×× ×‘×מת ניסית להציף ×ת הויקי -- כלב רע! ×× × ×¨××” לך ×›×™ זו טעות,ניתן ליצור קשר ×¢× ×ž× ×”×œ הויקי (מפני ש×נחנו ×œ× ×¨×•×¦×™× ×œ×§×¨×•× ×œ×× ×©×™× ×›×œ×‘×™× ×œ×—×™× ×, ×–×” פוגע בכלבי×).
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hi/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hi/lang.php
new file mode 100644
index 000000000..044d7d5a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hi/lang.php
@@ -0,0 +1,126 @@
+<?php
+/**
+ * hi language file
+ *
+ * This file was initially built by fetching translations from other
+ * Wiki projects. See the @url lines below. Additional translations
+ * and fixes where done for DokuWiki by the people mentioned in the
+ * lines starting with @author
+ *
+ * @url http://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/languages/messages/MessagesHi.php?view=co
+ * @author Abhinav Tyagi <abhinavtyagi11@gmail.com>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '“';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '‘';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = '’';
+$lang['btn_edit'] = 'यह पृषà¥à¤  संपादित करें';
+$lang['btn_source'] = 'पृषà¥à¤  का शà¥à¤°à¥‹à¤¤ दिखाà¤à¤';
+$lang['btn_show'] = 'पृषà¥à¤  दिखाà¤à¤';
+$lang['btn_create'] = 'इस पृषà¥à¤  को बनायें';
+$lang['btn_search'] = 'खोजें';
+$lang['btn_save'] = 'सà¥à¤°à¤•à¥à¤·à¤¿à¤¤ करें';
+$lang['btn_preview'] = 'पूरà¥à¤µà¤¾à¤µà¤²à¥‹à¤•à¤¨';
+$lang['btn_top'] = 'वापस शीरà¥à¤· पर';
+$lang['btn_newer'] = '<< अधिक विगत';
+$lang['btn_older'] = 'अमूल विगत >>';
+$lang['btn_revs'] = 'पà¥à¤°à¤¾à¤¨à¥‡ संशोधन';
+$lang['btn_recent'] = 'विगत परिवरà¥à¤¤à¤¨';
+$lang['btn_upload'] = 'अपलोड करें';
+$lang['btn_cancel'] = 'रदà¥à¤¦ करें';
+$lang['btn_index'] = 'सूचकांक';
+$lang['btn_secedit'] = 'संपादित करें';
+$lang['btn_login'] = 'लॉग इन';
+$lang['btn_logout'] = 'लॉगआउट';
+$lang['btn_admin'] = 'वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤•';
+$lang['btn_update'] = 'अदà¥à¤¯à¤¤à¤¨ करना';
+$lang['btn_delete'] = 'मिटाना';
+$lang['btn_back'] = 'पीछे';
+$lang['btn_backlink'] = 'पिछली कड़ियाà¤';
+$lang['btn_backtomedia'] = 'मीडिया फाइल चयन पर पीछे जायें';
+$lang['user'] = 'उपयोगकरà¥à¤¤à¤¾ का नाम';
+$lang['pass'] = 'गà¥à¤ªà¥à¤¤ शबà¥à¤¦';
+$lang['newpass'] = 'नव गà¥à¤ªà¥à¤¤ शबà¥à¤¦';
+$lang['passchk'] = 'पासवरà¥à¤¡ दà¥à¤¬à¤¾à¤°à¤¾ लिखें';
+$lang['remember'] = 'मà¥à¤à¥‡ सà¥à¤®à¥ƒà¤¤ रखना';
+$lang['fullname'] = 'सही नाम';
+$lang['email'] = 'ईमेल';
+$lang['badlogin'] = 'छमा करें, उपयोगकरà¥à¤¤à¤¾ का नाम व गà¥à¤ªà¥à¤¤ शबà¥à¤¦ ग़लत था |';
+$lang['minoredit'] = 'अमूल चूल परिवरà¥à¤¤à¤¨';
+$lang['regmissing'] = 'छमा करें, आपको सारे रिकà¥à¤¤ सà¥à¤¥à¤¾à¤¨ भरने पड़ेंगे |';
+$lang['regbadpass'] = 'दोनो दिठगये गà¥à¤ªà¥à¤¤à¤¶à¤¬à¥à¤¦ समान नहीं हैं | दोबारा पà¥à¤°à¤¯à¤¾à¤¸ करें |';
+$lang['regpwmail'] = 'आपकी डोकà¥à¤µà¤¿à¤•à¥€ का गà¥à¤ªà¥à¤¤à¤¶à¤¬à¥à¤¦';
+$lang['reghere'] = 'आपके पास अभी तक कोई खाता नहीं है? बस à¤à¤• लें |';
+$lang['profna'] = 'यह विकी पà¥à¤°à¥‹à¤«à¤¼à¤¾à¤‡à¤² संशोधन का समरà¥à¤¥à¤¨ नहीं करता |';
+$lang['profnochange'] = 'कोई परिवरà¥à¤¤à¤¨ नहीं, कà¥à¤› नहीं करना |';
+$lang['resendpwd'] = 'नवगà¥à¤ªà¥à¤¤à¤¶à¤¬à¥à¤¦ भेजें';
+$lang['resendpwdmissing'] = 'छमा करें, आपको सारे रिकà¥à¤¤ सà¥à¤¥à¤¾à¤¨ भरने पड़ेंगे |';
+$lang['resendpwdsuccess'] = 'आपका नवगà¥à¤ªà¥à¤¤à¤¶à¤¬à¥à¤¦ ईमेल दà¥à¤µà¤¾à¤°à¤¾ समà¥à¤ªà¥à¤°à¥‡à¤·à¤¿à¤¤ कर दिया गया है |';
+$lang['txt_upload'] = 'अपलोड करने के लिठफ़ाइल चà¥à¤¨à¥‡à¤‚';
+$lang['txt_filename'] = 'के रूप में अपलोड करें (वैकलà¥à¤ªà¤¿à¤•)';
+$lang['txt_overwrt'] = 'अधिलेखित उपसà¥à¤¥à¤¿à¤¤ फ़ाइल';
+$lang['lockedby'] = 'इस समय तक बंद';
+$lang['lockexpire'] = 'बंद समापà¥à¤¤ होगा';
+$lang['nothingfound'] = 'कà¥à¤šà¥à¤› नहीं मिला |';
+$lang['uploadexist'] = 'फ़ाइल पहले से उपसà¥à¤¥à¤¿à¤¤ है. कà¥à¤› भी नहीं किया |';
+$lang['mediafiles'] = 'उपलबà¥à¤§ फाइलों में';
+$lang['js']['hidedetails'] = 'विवरण छिपाà¤à¤';
+$lang['mediaview'] = 'मूल फ़ाइल देखें';
+$lang['reference'] = 'संदरà¥à¤­ के लिà¤';
+$lang['ref_hidden'] = 'कà¥à¤šà¥à¤› संदरà¥à¤­ उन पनà¥à¤¨à¥‹ पर हैं जिनको पड़ने की आपको अनà¥à¤®à¤¤à¤¿ नहीं है|';
+$lang['toc'] = 'विषय सूची';
+$lang['current'] = 'वरà¥à¤¤à¤®à¤¾à¤¨';
+$lang['yours'] = 'आपका संसà¥à¤•à¤°à¤£à¤ƒ';
+$lang['diff'] = 'वरà¥à¤¤à¤®à¤¾à¤¨ संशोधन में मतभेद दिखाइये |';
+$lang['diff2'] = 'चयनित संशोधन के बीच में मतभेद दिखाइये |';
+$lang['line'] = 'रेखा
+';
+$lang['youarehere'] = 'आप यहाठहैं |
+
+';
+$lang['lastmod'] = 'अंतिम बार संशोधित';
+$lang['by'] = 'के दà¥à¤µà¤¾à¤°à¤¾';
+$lang['deleted'] = 'हटाया';
+$lang['created'] = 'निरà¥à¤®à¤¿à¤¤';
+$lang['restored'] = 'पà¥à¤°à¤¾à¤¨à¥‡ संशोधन बहाल';
+$lang['external_edit'] = 'बाहà¥à¤¯ समà¥à¤ªà¤¾à¤¦à¤¿à¤¤';
+$lang['summary'] = 'सारांश संपादित करें';
+$lang['mail_newpage'] = 'पृषà¥à¤  जोड़ा:';
+$lang['mail_changed'] = 'पृषà¥à¤  बदला:';
+$lang['mail_new_user'] = 'नये उपयोगकरà¥à¤¤à¤¾:';
+$lang['mail_upload'] = 'अपलोड की गई फ़ाइल:';
+$lang['qb_bold'] = 'बोलà¥à¤¡ पाठà¥à¤¯';
+$lang['qb_h1'] = 'सà¥à¤¤à¤° 1 शीरà¥à¤·à¤ªà¤‚कà¥à¤¤à¤¿';
+$lang['qb_h2'] = 'सà¥à¤¤à¤° 2 शीरà¥à¤·à¤ªà¤‚कà¥à¤¤à¤¿';
+$lang['qb_h3'] = 'सà¥à¤¤à¤° 3 शीरà¥à¤·à¤ªà¤‚कà¥à¤¤à¤¿';
+$lang['qb_h4'] = 'सà¥à¤¤à¤° 4 शीरà¥à¤·à¤ªà¤‚कà¥à¤¤à¤¿';
+$lang['qb_h5'] = 'सà¥à¤¤à¤° 5 शीरà¥à¤·à¤ªà¤‚कà¥à¤¤à¤¿';
+$lang['qb_link'] = 'आंतरिक कड़ी';
+$lang['qb_extlink'] = 'बाहà¥à¤¯ कड़ी';
+$lang['qb_hr'] = 'खड़ी रेखा';
+$lang['qb_sig'] = 'हसà¥à¤¤à¤¾à¤•à¥à¤·à¤° डालें';
+$lang['admin_register'] = 'नया उपयोगकरà¥à¤¤à¤¾ जोड़ें';
+$lang['img_backto'] = 'वापस जाना';
+$lang['img_title'] = 'शीरà¥à¤·à¤•';
+$lang['img_caption'] = 'सहशीरà¥à¤·à¤•';
+$lang['img_date'] = 'तिथि';
+$lang['img_fsize'] = 'आकार';
+$lang['img_artist'] = 'फोटोगà¥à¤°à¤¾à¤«à¤°';
+$lang['img_format'] = 'पà¥à¤°à¤¾à¤°à¥‚प';
+$lang['img_camera'] = 'कैमरा';
+$lang['i_chooselang'] = 'अपनी भाषा चà¥à¤¨à¥‡à¤‚';
+$lang['i_installer'] = 'डोकà¥à¤µà¤¿à¤•à¥€ इंसà¥à¤Ÿà¥‰à¤²à¤°';
+$lang['i_wikiname'] = 'विकी का नाम';
+$lang['i_superuser'] = 'महाउपयोगकरà¥à¤¤à¤¾';
+$lang['i_retry'] = 'पà¥à¤¨à¤ƒà¤ªà¥à¤°à¤¯à¤¾à¤¸';
+$lang['mu_gridsize'] = 'आकार';
+$lang['mu_gridstat'] = 'सà¥à¤¥à¤¿à¤¤à¤¿';
+$lang['mu_browse'] = 'बà¥à¤°à¤¾à¤‰à¤œà¤¼
+';
+$lang['mu_toobig'] = 'बहà¥à¤¤ बड़ा';
+$lang['mu_ready'] = 'अपलोड करने के लिठतैयार';
+$lang['mu_done'] = 'पूरà¥à¤£';
+$lang['mu_fail'] = 'असफल';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/admin.txt
new file mode 100644
index 000000000..15a2a2b13
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/admin.txt
@@ -0,0 +1,3 @@
+====== Administracija ======
+
+Slijedi spisak svih administracijskih poslova koji su trenutno dostupni.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/backlinks.txt
new file mode 100644
index 000000000..e7115a6b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/backlinks.txt
@@ -0,0 +1,3 @@
+====== Linkovi na stranicu ======
+
+Slijedi spisak svih dokumenata koji imaju link na trenutni.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/conflict.txt
new file mode 100644
index 000000000..e33d7020a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/conflict.txt
@@ -0,0 +1,5 @@
+====== Postoji novija verzija ======
+
+Već postoji novija verzija dokumenta kojeg ste mijenjali. To se dešava jer je neki drugi korisnik snimio dokument za vrijeme dok ste ga Vi mijenjali.
+
+ProuÄite promjene koje slijede i odaberite koje želite preuzeti. Odaberite ''Snimi'' da biste snimili VaÅ¡u verziju ili ''PoniÅ¡ti'' da ostavite saÄuvanu trenutnu verziju dokumenta.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/denied.txt
new file mode 100644
index 000000000..216eea582
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/denied.txt
@@ -0,0 +1,5 @@
+====== Niste autorizirani ======
+
+Nemate autorizaciju.
+
+Niste li se možda zaboravili prijaviti u aplikaciju?
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/diff.txt
new file mode 100644
index 000000000..ce6c8c4cb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/diff.txt
@@ -0,0 +1,3 @@
+====== Razlike ======
+
+Slijede sve razlike između odabrane i trenutne verzije dokumenta
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/edit.txt
new file mode 100644
index 000000000..8cd57d524
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/edit.txt
@@ -0,0 +1 @@
+Nakon Å¡to ste napravili sve potrebne promjene - odaberite ''Snimi'' za snimanje dokumenta.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/editrev.txt
new file mode 100644
index 000000000..911855f47
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/editrev.txt
@@ -0,0 +1,2 @@
+**UÄitali ste stariju verziju dokumenta!** Ukoliko je snimite - biti će kreirana nova verzija dokumenta.
+---- \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/index.txt
new file mode 100644
index 000000000..9c30a805c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/index.txt
@@ -0,0 +1 @@
+====== Indeks ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/lang.php
new file mode 100644
index 000000000..05a20c25e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/lang.php
@@ -0,0 +1,200 @@
+<?php
+/**
+ * croatian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Tomo Krajina <aaa@puzz.info>
+ * @author Branko Rihtman <theney@gmail.com>
+ * @author Dražen Odobašić <dodobasic@gmail.com>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '“';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '‘';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = '\'';
+$lang['btn_edit'] = 'Izmijeni dokument';
+$lang['btn_source'] = 'Prikaži kod dokumenta';
+$lang['btn_show'] = 'Prikaži dokument';
+$lang['btn_create'] = 'Novi dokument';
+$lang['btn_search'] = 'Pretraži';
+$lang['btn_save'] = 'Snimi';
+$lang['btn_preview'] = 'Prikaži';
+$lang['btn_top'] = 'Na vrh';
+$lang['btn_newer'] = '<< noviji';
+$lang['btn_older'] = 'stariji >>';
+$lang['btn_revs'] = 'Stare inaÄice';
+$lang['btn_recent'] = 'Nedavne izmjene';
+$lang['btn_upload'] = 'Postavi';
+$lang['btn_cancel'] = 'Odustani';
+$lang['btn_index'] = 'Indeks';
+$lang['btn_secedit'] = 'Izmjeni';
+$lang['btn_login'] = 'Prijavi se';
+$lang['btn_logout'] = 'Odjavi se';
+$lang['btn_admin'] = 'Administriranje';
+$lang['btn_update'] = 'Ažuriraj';
+$lang['btn_delete'] = 'Obriši';
+$lang['btn_back'] = 'Povratak';
+$lang['btn_backlink'] = 'Povratni linkovi';
+$lang['btn_backtomedia'] = 'Povratak na Mediafile izbornik';
+$lang['btn_subscribe'] = 'Pretplati se na promjene dokumenta';
+$lang['btn_unsubscribe'] = 'Odjavi pretplatu o promjenama dokumenta';
+$lang['btn_subscribens'] = 'Pretplati se na promjene imenskog prostora';
+$lang['btn_unsubscribens'] = 'Odjavi pretplatu o promjenama imenskog prostora';
+$lang['btn_profile'] = 'Ažuriraj profil';
+$lang['btn_reset'] = 'Poništi promjene';
+$lang['btn_resendpwd'] = 'Pošalji novu lozinku';
+$lang['btn_draft'] = 'Uredi nacrt dokumenta';
+$lang['btn_recover'] = 'Vrati prijašnji nacrt dokumenta';
+$lang['btn_draftdel'] = 'Obriši nacrt dokumenta';
+$lang['loggedinas'] = 'Prijavljen kao';
+$lang['user'] = 'KorisniÄko ime';
+$lang['pass'] = 'Lozinka';
+$lang['newpass'] = 'Nova lozinka';
+$lang['oldpass'] = 'Potvrdi trenutnu lozinku';
+$lang['passchk'] = 'Ponoviti';
+$lang['remember'] = 'Zapamti me';
+$lang['fullname'] = 'Ime i prezime';
+$lang['email'] = 'Email';
+$lang['register'] = 'Registracija';
+$lang['profile'] = 'KorisniÄki profil';
+$lang['badlogin'] = 'Ne ispravno korisniÄko ime ili lozinka.';
+$lang['minoredit'] = 'Manje izmjene';
+$lang['draftdate'] = 'Nacrt dokumenta je automatski spremljen u ';
+$lang['nosecedit'] = 'Stranica se u meÄ‘uvremenu promijenila. Informacija o odjeljku je ostarila pa je uÄitana kompletna stranica.';
+$lang['regmissing'] = 'Morate popuniti sva polja.';
+$lang['reguexists'] = 'Korisnik s tim korisniÄkim imenom već postoji.';
+$lang['regsuccess'] = 'Korisnik je uspješno stvoren i poslana je lozinka emailom.';
+$lang['regsuccess2'] = 'Korisnik je uspješno stvoren.';
+$lang['regmailfail'] = 'Pojavila se greška prilikom slanja lozinke emailom. Kontaktirajte administratora!';
+$lang['regbadmail'] = 'Email adresa nije ispravna, ukoliko ovo smatrate greškom, kontaktirajte administratora.';
+$lang['regbadpass'] = 'Unesene lozinke nisu jednake, pokušajte ponovno.';
+$lang['regpwmail'] = 'Vaša DokuWiki lozinka';
+$lang['reghere'] = 'JoÅ¡ uvijek nemate korisniÄki raÄun? Registrirajte se.';
+$lang['profna'] = 'Ovaj wiki ne dopuÅ¡ta izmjene korisniÄkog profila.';
+$lang['profnochange'] = 'Nema izmjena.';
+$lang['profnoempty'] = 'Prazno korisniÄko ime ili email nisu dopuÅ¡teni.';
+$lang['profchanged'] = 'KorisniÄki profil je uspjeÅ¡no izmijenjen.';
+$lang['pwdforget'] = 'Izgubili ste lozinku? Zatražite novu';
+$lang['resendna'] = 'Ovaj wiki ne podržava ponovno slanje lozinke emailom.';
+$lang['resendpwd'] = 'Poslati novu lozinku za';
+$lang['resendpwdmissing'] = 'Ispunite sva polja.';
+$lang['resendpwdnouser'] = 'Nije moguće pronaći korisnika.';
+$lang['resendpwdbadauth'] = 'Neispravan autorizacijski kod. Provjerite da li ste koristili potpun potvrdni link.';
+$lang['resendpwdconfirm'] = 'Potvrdni link je poslan emailom.';
+$lang['resendpwdsuccess'] = 'Nova lozinka je poslana emailom.';
+$lang['license'] = 'Osim na mjestima gdje je naznaÄeno drugaÄije, sadržaj ovog wikija je licenciran sljedećom licencom:';
+$lang['licenseok'] = 'Pažnja: promjenom ovog dokumenta pristajete licencirati sadržaj sljedećom licencom: ';
+$lang['txt_upload'] = 'Odaberite datoteku za postavljanje';
+$lang['txt_filename'] = 'Postaviti kao (nije obavezno)';
+$lang['txt_overwrt'] = 'Prepiši postojeću datoteku';
+$lang['lockedby'] = 'ZakljuÄao';
+$lang['lockexpire'] = 'ZakljuÄano do';
+$lang['willexpire'] = 'Dokument kojeg mijenjate će biti zakljuÄan joÅ¡ 1 minutu.\n Ukoliko želite i dalje raditi izmjene na dokumentu - kliknite na "Pregled".';
+$lang['notsavedyet'] = 'Vaše izmjene će se izgubiti.\nŽelite li nastaviti?';
+$lang['rssfailed'] = 'Došlo je do greške prilikom preuzimanja feed-a: ';
+$lang['nothingfound'] = 'Traženi dokumetni nisu pronađeni.';
+$lang['mediaselect'] = 'Mediafile datoteke';
+$lang['fileupload'] = 'Mediafile postavljanje';
+$lang['uploadsucc'] = 'Postavljanje uspješno';
+$lang['uploadfail'] = 'Neuspješno postavljanje. Možda dozvole na poslužitelju nisu ispravne?';
+$lang['uploadwrong'] = 'Postavljanje nije dopušteno. Nastavak datoteke je zabranjen!';
+$lang['uploadexist'] = 'Datoteka već postoji.';
+$lang['uploadbadcontent'] = 'Postavljeni sadržaj ne odgovara ekstenziji %s datoteke.';
+$lang['uploadspam'] = 'Postavljanje je blokirano spam crnom listom.';
+$lang['uploadxss'] = 'Postavljanje je blokirano zbog mogućeg zlonamjernog sadržaja.';
+$lang['uploadsize'] = 'Postavljena datoteka je prevelika (max. %s)';
+$lang['deletesucc'] = 'Datoteka "%s" je obrisana.';
+$lang['deletefail'] = '"%s" se ne može obrisati - provjerite dozvole na poslužitelju.';
+$lang['mediainuse'] = 'Datoteka "%s" nije obrisana - još uvijek se koristi.';
+$lang['namespaces'] = 'Imenski prostori';
+$lang['mediafiles'] = 'Datoteke u';
+$lang['js']['keepopen'] = 'Ostavi prozor otvoren nakon izbora';
+$lang['js']['hidedetails'] = 'Sakrij detalje';
+$lang['js']['nosmblinks'] = 'Linkovi na dijeljene Windows mape rade samo s Internet Explorerom. Link je još uvijek moguće kopirati i zalijepiti.';
+$lang['js']['mu_btn'] = 'Postavi više datoteka odjednom';
+$lang['mediausage'] = 'Koristi sljedeću sintaksu za referenciranje ove datoteke:';
+$lang['mediaview'] = 'Pregledaj originalnu datoteku';
+$lang['mediaroot'] = 'root';
+$lang['mediaupload'] = 'Postavi datoteku u odabrani imenski prostor. Podimenski prostori se stvaraju dodavanjem istih kao prefiks naziva datoteke u "Postavi kao" polju, tako da se odvoje dvotoÄkama.';
+$lang['mediaextchange'] = 'Ekstenzija datoteke promijenjena iz .%s u .%s!';
+$lang['reference'] = 'Reference za';
+$lang['ref_inuse'] = 'Datoteka se ne može obrisati jer se još uvijek koristi u sljedećim dokumentima:';
+$lang['ref_hidden'] = 'Neke reference se nalaze na dokumentima koje nemate dozvolu Äitati';
+$lang['hits'] = 'Pronađeno';
+$lang['quickhits'] = 'Pronađeno po nazivima dokumenata';
+$lang['toc'] = 'Sadržaj';
+$lang['current'] = 'trenutno';
+$lang['yours'] = 'VaÅ¡a inaÄica';
+$lang['diff'] = 'Prikaži razlike u odnosu na trenutnu inaÄicu';
+$lang['diff2'] = 'Pokaži razlike izmeÄ‘u odabranih inaÄica';
+$lang['line'] = 'Redak';
+$lang['breadcrumb'] = 'Putanja';
+$lang['youarehere'] = 'Vi ste ovdje';
+$lang['lastmod'] = 'Zadnja izmjena';
+$lang['by'] = 'od';
+$lang['deleted'] = 'obrisano';
+$lang['created'] = 'stvoreno';
+$lang['restored'] = 'vraćena prijaÅ¡nja inaÄica';
+$lang['external_edit'] = 'vanjsko uređivanje';
+$lang['summary'] = 'Sažetak izmjena';
+$lang['noflash'] = 'Za prikazivanje ovog sadržaja potreban je <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a>';
+$lang['mail_newpage'] = 'stranica dodana:';
+$lang['mail_changed'] = 'stranica izmjenjena:';
+$lang['mail_new_user'] = 'novi korisnik:';
+$lang['mail_upload'] = 'datoteka postavljena:';
+$lang['qb_bold'] = 'Podebljani tekst';
+$lang['qb_italic'] = 'Ukošeni tekst';
+$lang['qb_underl'] = 'Podcrtani tekst';
+$lang['qb_code'] = 'Kod';
+$lang['qb_strike'] = 'Precrtani tekst';
+$lang['qb_h1'] = 'Naslov - razina 1';
+$lang['qb_h2'] = 'Naslov - razina 2';
+$lang['qb_h3'] = 'Naslov - razina 3';
+$lang['qb_h4'] = 'Naslov - razina 4';
+$lang['qb_h5'] = 'Naslov - razina 5';
+$lang['qb_h'] = 'Naslov';
+$lang['qb_hs'] = 'Odaberite naslov';
+$lang['qb_hplus'] = 'Naslov više razine';
+$lang['qb_hminus'] = 'Naslov niže razine';
+$lang['qb_hequal'] = 'Naslov iste razine';
+$lang['qb_link'] = 'Interni link';
+$lang['qb_extlink'] = 'Vanjski link';
+$lang['qb_hr'] = 'Vodoravna crta';
+$lang['qb_ol'] = 'Pobrojana lista';
+$lang['qb_ul'] = 'Lista';
+$lang['qb_media'] = 'Dodaj slike i ostale datoteke';
+$lang['qb_sig'] = 'Potpis';
+$lang['qb_smileys'] = 'Smiješkići';
+$lang['qb_chars'] = 'Posebni znakovi';
+$lang['js']['del_confirm'] = 'Zbilja želite obrisati odabrane stavke?';
+$lang['admin_register'] = 'Dodaj novog korisnika';
+$lang['metaedit'] = 'Uredi metapodatake';
+$lang['metasaveerr'] = 'Neuspješno zapisivanje metapodataka';
+$lang['metasaveok'] = 'Spremljeni metapdaci';
+$lang['img_backto'] = 'Povratak na';
+$lang['img_title'] = 'Naziv';
+$lang['img_caption'] = 'Naslov';
+$lang['img_date'] = 'Datum';
+$lang['img_fname'] = 'Ime datoteke';
+$lang['img_fsize'] = 'VeliÄina';
+$lang['img_artist'] = 'Fotograf';
+$lang['img_copyr'] = 'Autorsko pravo';
+$lang['img_format'] = 'Format';
+$lang['img_camera'] = 'Kamera';
+$lang['img_keywords'] = 'KljuÄne rijeÄi';
+$lang['subscribe_success'] = 'Dodan %s na listu preplata za %s';
+$lang['subscribe_error'] = 'Greška prilikom dodavanju %s na listu pretplata za %s';
+$lang['subscribe_noaddress'] = 'Nije postavljena email adresa za vaÅ¡ korisniÄki profil, nije Vas moguće dodati na listu pretplata';
+$lang['unsubscribe_success'] = 'Izbrisan %s s liste pretplata za %s';
+$lang['unsubscribe_error'] = 'Greška prilikom brisanja %s s liste pretplatnika za %s';
+$lang['authmodfailed'] = 'GreÅ¡ka u konfiguraciji korisniÄke autentifikacije. Molimo Vas da kontaktirate administratora.';
+$lang['authtempfail'] = 'Autentifikacija korisnika je privremeno nedostupna. Molimo Vas da kontaktirate administratora.';
+$lang['i_chooselang'] = 'Izaberite vaš jezik';
+$lang['i_installer'] = 'DokuWiki instalacija';
+$lang['i_wikiname'] = 'Naziv Wikija';
+$lang['i_enableacl'] = 'Omogući ACL (preporuÄeno)';
+$lang['i_superuser'] = 'Superkorisnik';
+$lang['i_problems'] = 'Instalacija je pronaÅ¡la probleme koji su naznaÄeni ispod. Nije moguće nastaviti dok se ti problemi ne rijeÅ¡e.';
+$lang['i_modified'] = 'Zbog sigurnosnih razlog, ova skripta ce raditi samo sa novim i nepromijenjenim instalacijama dokuWikija. Preporucujemo da ili re-ekstraktirate fajlove iz downloadovanog paketa ili konsultujete pune a href="http://dokuwiki.org/install">Instrukcije za instalaciju Dokuwikija</a>';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/locked.txt
new file mode 100644
index 000000000..ff081aad8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/locked.txt
@@ -0,0 +1,3 @@
+====== Dokument zakljuÄan ======
+
+Mijenjanje ovog dokumenta je trenutno onemogućeno jer je otvoren od strane nekog drugog korisnika. Morate priÄekati da on zavrÅ¡i sa svojim izmjenama.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/login.txt
new file mode 100644
index 000000000..216af130d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/login.txt
@@ -0,0 +1,3 @@
+====== Prijava ======
+
+UpiÅ¡ite korisniÄko ime i lozinku da biste se prijavili.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/mailtext.txt
new file mode 100644
index 000000000..911f8eade
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/mailtext.txt
@@ -0,0 +1,16 @@
+Dokument na Vašem wiki-ju je promijenjen ili dodan:
+
+Datum : @DATE@
+Preglednik : @BROWSER@
+IP-Adresa : @IPADDRESS@
+Host : @HOSTNAME@
+Prijašnja verzija : @OLDPAGE@
+Nova verzija : @NEWPAGE@
+Opis izmjene : @SUMMARY@
+Korisnik : @USER@
+
+@DIFF@
+
+
+--
+Ovaj email je poslan na: @DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/newpage.txt
new file mode 100644
index 000000000..39346580f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/newpage.txt
@@ -0,0 +1,3 @@
+====== Dokument ne postoji ======
+
+Traženi dokument (još) ne postoji. Ukoliko ga želite otvoriti kliknite na ''Novi dokument''.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/norev.txt
new file mode 100644
index 000000000..231fb5edf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/norev.txt
@@ -0,0 +1,3 @@
+====== Nepostojeća verzija ======
+
+Tražena verzija dokumenta ne postoji.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/preview.txt
new file mode 100644
index 000000000..89ae86a71
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/preview.txt
@@ -0,0 +1,3 @@
+====== Pregled ======
+
+Ovo je pregled kako će izgledati Vaš dokument nakon što se snimi.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/read.txt
new file mode 100644
index 000000000..d036c0a7b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/read.txt
@@ -0,0 +1 @@
+Nije dopušteno mijenjati sadržaj ove stranice.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/recent.txt
new file mode 100644
index 000000000..4145ca1c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/recent.txt
@@ -0,0 +1,3 @@
+====== Nedavne izmjene ======
+
+Stranice koje su nedavno promijenjene.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/register.txt
new file mode 100644
index 000000000..32a5489fb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/register.txt
@@ -0,0 +1,3 @@
+====== Prijava novog korisnika ======
+
+Ispunite potrebne podatke da biste dobili korisniÄki raÄun na wikiju. Posebno obratite pažnju da ste unijeli valjani email.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/resendpwd.txt
new file mode 100644
index 000000000..fe2c72bf3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/resendpwd.txt
@@ -0,0 +1,3 @@
+====== Slanje nove lozinke ======
+
+Ispunite potrebne podatke da biste dobili novu lozinku za VaÅ¡ korisniÄki raÄun.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/revisions.txt
new file mode 100644
index 000000000..d224a56f3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/revisions.txt
@@ -0,0 +1,3 @@
+====== Stare verzije ======
+
+Slijedi spisak starih verzija za traženi dokument.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/searchpage.txt
new file mode 100644
index 000000000..91d9f9c0a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/searchpage.txt
@@ -0,0 +1 @@
+====== Rezultati pretraživanja ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/showrev.txt
new file mode 100644
index 000000000..aba2c0db0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/showrev.txt
@@ -0,0 +1,2 @@
+**Ovo je stara verzija dokumenta!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/stopwords.txt
new file mode 100644
index 000000000..bc6eb48ae
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/stopwords.txt
@@ -0,0 +1,29 @@
+# This is a list of words the indexer ignores, one word per line
+# When you edit this file be sure to use UNIX line endings (single newline)
+# No need to include words shorter than 3 chars - these are ignored anyway
+# This list is based upon the ones found at http://www.ranks.nl/stopwords/
+about
+are
+and
+you
+your
+them
+their
+com
+for
+from
+into
+how
+that
+the
+this
+was
+what
+when
+where
+who
+will
+with
+und
+the
+www
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/subscribermail.txt
new file mode 100644
index 000000000..c55b4a288
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/subscribermail.txt
@@ -0,0 +1,16 @@
+Pozdrav!
+
+Stranica @PAGE@ na @TITLE@ je promijenjena.
+Slijede promjene:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Ukoliko se želite odjaviti s ove pretplate - prijavite se na:
+@DOKUWIKIURL@ zatim odite na
+@NEWPAGE@
+i odaberite 'Odjava'.
+
+--
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/updateprofile.txt
new file mode 100644
index 000000000..8eab906d2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/updateprofile.txt
@@ -0,0 +1,3 @@
+====== Izmjena korisniÄkog profila ======
+
+Ispunite samo polja koja želite mijenjati. Ne može se mijenjati korisniÄko ime.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/wordblock.txt
new file mode 100644
index 000000000..7faf03c19
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/wordblock.txt
@@ -0,0 +1,3 @@
+====== SPAM blokiranje ======
+
+VaÅ¡e izmjene **nisu** snimljene jer sadrže jednu ili viÅ¡e blokiranih/zabranjenih rijeÄi. Ukoliko mislite da je to greÅ¡ka - molimo Vas da kontaktirate administratora.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/admin.txt
new file mode 100644
index 000000000..03d29243c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/admin.txt
@@ -0,0 +1,3 @@
+===== Adminisztrálás =====
+
+Itt találod a DokuWiki adminisztrálási lehetőségeit.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/adminplugins.txt
new file mode 100644
index 000000000..89fe3738a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/adminplugins.txt
@@ -0,0 +1 @@
+===== További modulok ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/backlinks.txt
new file mode 100644
index 000000000..d457ab769
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/backlinks.txt
@@ -0,0 +1,5 @@
+====== Hivatkozások ======
+
+Ez azoknak az oldalaknak a listája, amelyek erre az oldalra "visszamutatnak" (hivatkoznak).
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/conflict.txt
new file mode 100644
index 000000000..b823465b3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/conflict.txt
@@ -0,0 +1,7 @@
+====== Újabb változat létezik ======
+
+Az általad szerkesztett dokumentumnak egy újabb változata létezik. Ez akkor történik, ha egy másik felhasználó megváltoztatta a dokumentumot, amíg szerkesztetted.
+
+Nézd át gondosan a lenti eltéréseket, aztán dönts arról, melyik változatot tartod meg. Ha ''Mentés'' gombot választod, akkor a Te változatod kerül mentésre. Nyomj ''Mégsem'' gombot a jelenlegi változat megtartásához.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/denied.txt
new file mode 100644
index 000000000..0b06724df
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/denied.txt
@@ -0,0 +1,4 @@
+====== Hozzáférés megtagadva ======
+
+Sajnáljuk, nincs jogod a folytatáshoz. Esetleg elfelejtettél bejelentkezni?
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/diff.txt
new file mode 100644
index 000000000..6a09cdea2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/diff.txt
@@ -0,0 +1,4 @@
+====== Különbségek ======
+
+A kiválasztott változat és az aktuális verzió közötti különbséget mutatjuk.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/draft.txt
new file mode 100644
index 000000000..4d12e2e0c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/draft.txt
@@ -0,0 +1,5 @@
+===== Piszkozatot találtunk =====
+
+Az oldal utolsó szerkesztését nem fejezted be rendesen. A DokuWiki elmentette piszkozatként, így most folytathatod a szerkesztést. Lent látható, amit az utolsó szerkesztésből elmentettünk.
+
+Válassz a //helyreállítás// vagy a //törlés// opciók közül a piszkozat sorsát illetően. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/edit.txt
new file mode 100644
index 000000000..898387cf2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/edit.txt
@@ -0,0 +1 @@
+Szerkeszd az oldalt majd üsd le a ''Mentés'' gombot. Lásd a [[wiki:syntax|nyelvtan]] oldalt a formázási lehetőségekért. Kérünk, hogy csak akkor szerkeszd az oldalt ha **jobbítani** tudod. Ha ki akarsz próbálni dolgokat akkor az első lépéseid a [[playground:playground|játszótéren]] (playground) tedd.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/editrev.txt
new file mode 100644
index 000000000..e17662e60
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/editrev.txt
@@ -0,0 +1,2 @@
+**Egy korábbi változatot töltöttél be!** Ha elmented, akkor egy újabb aktuális verzió jön létre ezzel a tartalommal.
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/index.txt
new file mode 100644
index 000000000..ebf15148d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/index.txt
@@ -0,0 +1,4 @@
+====== ÃttekintÅ‘ (index) ======
+
+Az összes elérhető oldal áttekintése [[doku>namespaces|névterek]] szerint rendezve.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/install.html
new file mode 100644
index 000000000..1676e9364
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/install.html
@@ -0,0 +1,26 @@
+<p>Ez az oldal segít a <a href="http://dokuwiki.org">DokuWiki</a> kezdeti
+beállításában és a konfigurálásban. További információ
+<a href="http://dokuwiki.org/installer">ezen az oldalon</a>
+található.</p>
+
+<p>A DokuWiki hagyományos fájlokat használ a wiki oldalak és a hozzájuk
+kapcsolódó információk (pl. képek, keresési indexek, korábbi változatok stb.)
+tárolásához. Emiatt a sikeres működés érdekében a DokuWikinek írási joggal
+<strong>kell</strong> rendelkeznie azokon a könyvtárakon, ahová ezek a
+fájlok kerülnek. Ez a Beállító Varázsló nem képes beállítani a könyvtárakhoz
+a szükséges jogosultságokat, azokat közvetlenül parancssorból kell megtenni,
+illetve tárhelyszolgáltatás igénybevétele esetén FTP kliens segítségével,
+vagy a tárhelyszolgáltató által rendelkezésre bocsátott beállítóeszköz
+(pl. cPanel) segítségével.</p>
+
+<p>A Beállító Varázsló felkészíti ezt a DokuWikit a hozzáférési listák
+(<acronym title="access control list">ACL</acronym>-ek) használatára. Ãgy
+a Wiki-gazda felhasználóval hozzáférünk az admin menühöz, mellyel
+bővítményeket telepíthetünk, felhasználókat és hozzáférési jogokat
+kezelhetünk, valamint változtathatunk a konfigurációs beállításokon.
+Ez tulajdonképpen nem szükséges a DokuWiki működéséhez, de megkönnyíti
+az adminisztrációt.</p>
+
+<p>Szakértők illetve speciális beállítást igénylő felhasználók további információkat
+találnak a következő oldalakon <a href="http://dokuwiki.org/install">telepítéssel</a>
+és <a href="http://dokuwiki.org/config">konfigurálási lehetőségekkel</a> kapcsolatban.</p>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/lang.php
new file mode 100644
index 000000000..b9218f897
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/lang.php
@@ -0,0 +1,249 @@
+<?php
+/**
+ * Hungarian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Ziegler Gábor <gziegler@freemail.hu>
+ * @author Sandor TIHANYI <stihanyi+dw@gmail.com>
+ * @author Siaynoq Siaynoq <siaynoqmage@gmail.com>
+ * @author Siaynoq Mage <siaynoqmage@gmail.com>
+ * @author schilling.janos@gmail.com
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '„';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '‚';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = '’';
+$lang['btn_edit'] = 'Oldal szerkesztése';
+$lang['btn_source'] = 'Oldalforrás megtekintése';
+$lang['btn_show'] = 'Oldal megtekintése';
+$lang['btn_create'] = 'Oldal létrehozása';
+$lang['btn_search'] = 'Keresés';
+$lang['btn_save'] = 'Mentés';
+$lang['btn_preview'] = 'Előnézet';
+$lang['btn_top'] = 'Vissza a tetejére';
+$lang['btn_newer'] = '<< Újabb változat';
+$lang['btn_older'] = 'Régebbi változat >>';
+$lang['btn_revs'] = 'Korábbi változatok';
+$lang['btn_recent'] = 'Legfrissebb változások';
+$lang['btn_upload'] = 'Feltöltés';
+$lang['btn_cancel'] = 'Mégsem';
+$lang['btn_index'] = 'ÃttekintÅ‘';
+$lang['btn_secedit'] = 'Szerkesztés';
+$lang['btn_login'] = 'Bejelentkezés';
+$lang['btn_logout'] = 'Kijelentkezés';
+$lang['btn_admin'] = 'Admin';
+$lang['btn_update'] = 'Frissítés';
+$lang['btn_delete'] = 'Törlés';
+$lang['btn_back'] = 'Vissza';
+$lang['btn_backlink'] = 'Hivatkozások';
+$lang['btn_backtomedia'] = 'Vissza a médiafájlok kezeléséhez';
+$lang['btn_subscribe'] = 'Oldalváltozások-hírlevél feliratkozás';
+$lang['btn_unsubscribe'] = 'Oldalváltozások-hírlevél leiratkozás';
+$lang['btn_subscribens'] = 'Névtér-változás hírlevél feliratkozás';
+$lang['btn_unsubscribens'] = 'Névtér-változás hírlevél leiratkozás';
+$lang['btn_profile'] = 'Személyes beállítások';
+$lang['btn_reset'] = 'Alaphelyzet';
+$lang['btn_resendpwd'] = 'Új jelszó küldése';
+$lang['btn_draft'] = 'Piszkozat szerkesztése';
+$lang['btn_recover'] = 'Piszkozat folytatása';
+$lang['btn_draftdel'] = 'Piszkozat törlése';
+$lang['btn_revert'] = 'Helyreállítás';
+$lang['loggedinas'] = 'Belépett felhasználó: ';
+$lang['user'] = 'Azonosító';
+$lang['pass'] = 'Jelszó';
+$lang['newpass'] = 'Új jelszó';
+$lang['oldpass'] = 'Régi jelszó';
+$lang['passchk'] = 'még egyszer';
+$lang['remember'] = 'Emlékezz rám';
+$lang['fullname'] = 'Teljes név';
+$lang['email'] = 'E-Mail';
+$lang['register'] = 'Regisztráció';
+$lang['profile'] = 'Személyes beállítások';
+$lang['badlogin'] = 'Sajnáljuk, az azonosító, vagy a jelszó nem jó.';
+$lang['minoredit'] = 'Apróbb változások';
+$lang['draftdate'] = 'Piszkozat elmentve:';
+$lang['nosecedit'] = 'Időközben megváltozott az oldal, emiatt a szakasz nem friss. Töltse újra az egész oldalt!';
+$lang['regmissing'] = 'Sajnáljuk, az összes mezőt ki kell töltened.';
+$lang['reguexists'] = 'Sajnáljuk, ilyen azonosítójú felhasználónk már van.';
+$lang['regsuccess'] = 'A felhasználói azonosítót létrehoztuk. A jelszót postáztuk.';
+$lang['regsuccess2'] = 'A felhasználói azonosítót létrehoztuk.';
+$lang['regmailfail'] = 'Úgy tűnik hiba történt a jelszó postázása során. Kérjük lépj kapcsolatba a Wiki-gazdával!!';
+$lang['regbadmail'] = 'A megadott e-mail cím érvénytelennek tűnik. Ha úgy gondolod ez hiba, lépj kapcsolatba Wiki-gazdával!';
+$lang['regbadpass'] = 'A két megadott jelszó nem egyezik, próbáld újra!';
+$lang['regpwmail'] = 'A DokuWiki jelszavad';
+$lang['reghere'] = 'Még nincs azonosítód? Itt kérhetsz';
+$lang['profna'] = 'Ez a wiki nem támogatja a személyes beállítások módosítását.';
+$lang['profnochange'] = 'Nem történt változás.';
+$lang['profnoempty'] = 'A név és e-mail mező nem maradhat üresen!';
+$lang['profchanged'] = 'A személyes beállítások változtatása megtörtént.';
+$lang['pwdforget'] = 'Elfelejtetted a jelszavad? Itt kérhetsz újat';
+$lang['resendna'] = 'Ez a wiki nem támogatja a jelszó újraküldést.';
+$lang['resendpwd'] = 'Új jelszó kiküldése ennek a felhasználónak';
+$lang['resendpwdmissing'] = 'Sajnáljuk, az összes mezőt ki kell töltened.';
+$lang['resendpwdnouser'] = 'Sajnáljuk, ilyen azonosítójú felhasználónk nem létezik.';
+$lang['resendpwdbadauth'] = 'Sajnáljuk, ez a megerősítő kód nem helyes. Biztos, hogy a teljes megerősítés linket beírtad pontosan?';
+$lang['resendpwdconfirm'] = 'A megerősítés linket e-mailben elküldtük.';
+$lang['resendpwdsuccess'] = 'Az új jelszavadat elküldtük e-mailben.';
+$lang['license'] = 'Hacsak máshol nincs egyéb rendelkezés, ezen wiki tartalma a következő licenc alatt érhető el:';
+$lang['licenseok'] = 'Megjegyzés: az oldal szerkesztésével elfogadja, hogy a tartalom a következő licenc alatt lesz elérhető:';
+$lang['searchmedia'] = 'Keresett fájl neve:';
+$lang['searchmedia_in'] = 'Keresés a következőben: %s';
+$lang['txt_upload'] = 'Válaszd ki a feltöltendő fájlt';
+$lang['txt_filename'] = 'feltöltési név (elhagyható)';
+$lang['txt_overwrt'] = 'Létező fájl felülírása';
+$lang['lockedby'] = 'Jelenleg zárolta:';
+$lang['lockexpire'] = 'A zárolás lejár:';
+$lang['willexpire'] = 'Az oldalszerkesztési zárolásod körülbelül egy percen belül lejár.\nAz ütközések elkerülése végett használd az előnézet gombot a zárolási időzítés frissítéséhez.';
+$lang['notsavedyet'] = 'Elmentetlen változások vannak, amelyek el fognak veszni.\nTényleg ezt akarod?';
+$lang['rssfailed'] = 'Hiba történt ennek a betöltésekor: ';
+$lang['nothingfound'] = 'Semmit sem találtam.';
+$lang['mediaselect'] = 'Médiafájl kiválasztása';
+$lang['fileupload'] = 'Médiafájl feltöltése';
+$lang['uploadsucc'] = 'A feltöltés sikerült';
+$lang['uploadfail'] = 'A feltöltés nem sikerült. Talán rosszak a jogosultságok?';
+$lang['uploadwrong'] = 'A feltöltés megtagadva. Ez a fájl kiterjesztés tiltott.';
+$lang['uploadexist'] = 'A fájl már létezik, nem történt semmi.';
+$lang['uploadbadcontent'] = 'A feltöltött tartalom nem egyezik a %s fájl kiterjesztéssel.';
+$lang['uploadspam'] = 'A feltöltést visszautasítottuk spam-gyanú miatt.';
+$lang['uploadxss'] = 'A feltöltést visszautasítottuk, mert lehetséges, hogy kártékony kódot tartalmaz.';
+$lang['uploadsize'] = 'A feltöltött fájl túl nagy. (max. %s)';
+$lang['deletesucc'] = 'A "%s" fájlt töröltük.';
+$lang['deletefail'] = 'A "%s" fájl nem törölhető. - Ellenőrizd a jogosultságokat!';
+$lang['mediainuse'] = 'A "%s" fájl nem törlődött - még használat alatt van.';
+$lang['namespaces'] = 'Névtér';
+$lang['mediafiles'] = 'Elérhető fájlok itt:';
+$lang['js']['searchmedia'] = 'Fájlok keresése';
+$lang['js']['keepopen'] = 'Tartsd nyitva ezt az ablakot a kijelöléshez!';
+$lang['js']['hidedetails'] = 'Részletek elrejtése';
+$lang['js']['nosmblinks'] = 'A Windows megosztott könyvtárak kereszthivatkozása csak Microsoft Internet Explorerben működik közvetlenül.
+A hivatkozást másolni és beszúrni ettől fügetlenül mndig tudod.';
+$lang['js']['linkwiz'] = 'Hivatkozás varázsló';
+$lang['js']['linkto'] = 'Hivatkozás erre:';
+$lang['js']['del_confirm'] = 'Valóban törölni akarod a kiválasztott elem(ek)et?';
+$lang['js']['mu_btn'] = 'Több fájl feltöltése egyszerre';
+$lang['mediausage'] = 'A következő formában hivatkozhatsz erre az állományra:';
+$lang['mediaview'] = 'Eredeti állomány megtekintése';
+$lang['mediaroot'] = 'kiindulási hely';
+$lang['mediaupload'] = 'Itt tölthetsz fel állományt az aktuális névtérbe. Al-névtér létrehozásához a "Feltöltési név" mezőben kell kettősponttal elválasztva megadnod azt.';
+$lang['mediaextchange'] = 'Az állomány kiterjesztése erről: .%s erre: .%s változott!';
+$lang['reference'] = 'Hivatkozások';
+$lang['ref_inuse'] = 'A fájl nem törölhető, mert a következő oldalakon használják:';
+$lang['ref_hidden'] = 'Van néhány hivatkozás az oldalakon, amelyekhez nincs olvasási jogosultságod';
+$lang['hits'] = 'Találatok';
+$lang['quickhits'] = 'Illeszkedő oldalnevek';
+$lang['toc'] = 'Tartalomjegyzék';
+$lang['current'] = 'aktuális';
+$lang['yours'] = 'A te változatod';
+$lang['diff'] = 'a különbségeket mutatja az aktuális változathoz képest';
+$lang['diff2'] = 'a különbségeket mutatja a kiválasztott változatok között';
+$lang['line'] = 'sorszám';
+$lang['breadcrumb'] = 'Nyomvonal';
+$lang['youarehere'] = 'Itt vagy';
+$lang['lastmod'] = 'Utolsó módosítás';
+$lang['by'] = 'szerkesztette:';
+$lang['deleted'] = 'eltávolítva';
+$lang['created'] = 'létrehozva';
+$lang['restored'] = 'az előző változat helyreállítva';
+$lang['external_edit'] = 'külső szerkesztés';
+$lang['summary'] = 'A változások összefoglalása';
+$lang['noflash'] = 'Ennek a tartalomnak a megtekintéséhez <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> szükséges.';
+$lang['download'] = 'Kódrészlet letöltése';
+$lang['mail_newpage'] = 'új oldal jött létre:';
+$lang['mail_changed'] = 'oldal megváltozott:';
+$lang['mail_new_user'] = 'Új felhasználó:';
+$lang['mail_upload'] = 'állományt töltöttek fel:';
+$lang['qb_bold'] = 'Félkövér szöveg';
+$lang['qb_italic'] = 'Dőlt szöveg';
+$lang['qb_underl'] = 'Aláhúzott szöveg';
+$lang['qb_code'] = 'Forráskód szöveg';
+$lang['qb_strike'] = 'Ãthúzott szöveg';
+$lang['qb_h1'] = '1. szintű címsor';
+$lang['qb_h2'] = '2. szintű címsor';
+$lang['qb_h3'] = '3. szintű címsor';
+$lang['qb_h4'] = '4. szintű címsor';
+$lang['qb_h5'] = '5. szintű címsor';
+$lang['qb_h'] = 'Címsor';
+$lang['qb_hs'] = 'Címsor kiválasztása';
+$lang['qb_hplus'] = 'Nagyobb címsor';
+$lang['qb_hminus'] = 'Kisebb címsor';
+$lang['qb_hequal'] = 'Azonos szintű címsor';
+$lang['qb_link'] = 'Belső hivatkozás';
+$lang['qb_extlink'] = 'Külső hivatkozás';
+$lang['qb_hr'] = 'Vízszintes elválasztó vonal';
+$lang['qb_ol'] = 'Sorszámozott lista elem';
+$lang['qb_ul'] = 'Felsorolás lista elem';
+$lang['qb_media'] = 'Képek és más fájlok hozzáadása';
+$lang['qb_sig'] = 'Aláírás beszúrása';
+$lang['qb_smileys'] = 'Szmájlik';
+$lang['qb_chars'] = 'Speciális karakterek';
+$lang['upperns'] = 'Ugrás a szülő névtérhez';
+$lang['admin_register'] = 'Új felhasználó';
+$lang['metaedit'] = 'Meta-adatok szerkesztése';
+$lang['metasaveerr'] = 'A meta-adatok írása meghiúsult ';
+$lang['metasaveok'] = 'Meta-adatok elmentve';
+$lang['img_backto'] = 'Vissza';
+$lang['img_title'] = 'Cím';
+$lang['img_caption'] = 'Képaláírás';
+$lang['img_date'] = 'Dátum';
+$lang['img_fname'] = 'Fájlnév';
+$lang['img_fsize'] = 'Méret';
+$lang['img_artist'] = 'Készítette';
+$lang['img_copyr'] = 'Copyright';
+$lang['img_format'] = 'Formátum';
+$lang['img_camera'] = 'Fényképező típusa';
+$lang['img_keywords'] = 'Kulcsszavak';
+$lang['subscribe_success'] = '%s feliratkozott a(z) %s oldal változás-követő hírlevelére';
+$lang['subscribe_error'] = 'Hiba történt, miközben %s feliratkozni próbált a(z) %s oldal változás-követő hírlevelére';
+$lang['subscribe_noaddress'] = 'Nincs beállítva az e-mail címed, így nem tudsz feliratkozni az oldal változás-követő hírlevelére';
+$lang['unsubscribe_success'] = '%s leiratkozott az oldal változás-követő hírleveléről';
+$lang['unsubscribe_error'] = 'Hiba történt, miközben %s leiratkozni próbált az oldal változás-követő hírleveléről';
+$lang['authmodfailed'] = 'Hibás felhasználó-aznosítási módszer van beállítva. Légy szíves értesítsd a Wiki-gazdát!';
+$lang['authtempfail'] = 'A felhasználó azonosítás átmenetileg nem működik. Ha sokáig így lenne, légy szíves értesítsd a Wiki-gazdát!';
+$lang['i_chooselang'] = 'Válassz nyelvet';
+$lang['i_installer'] = 'DokuWiki Beállító Varázsló';
+$lang['i_wikiname'] = 'A Wiki neve';
+$lang['i_enableacl'] = 'Hozzáférési listák engedélyezése (ajánlott)';
+$lang['i_superuser'] = 'Wiki-gazda';
+$lang['i_problems'] = 'A Beállító Varázsló a következő problémák miatt megakadt. Nem tudjuk folytatni, amíg ezek nincsenek elhárítva!';
+$lang['i_modified'] = 'Biztonsági okokból ez a Varázsló csak új és módosítatlan DokuWiki változaton működik.
+Csomagold ki újra a fájlokat a letöltött csomagból, vagy nézd meg a teljes <a href="http://dokuwiki.org/install">Dokuwiki telepítési útmutatót</a>.';
+$lang['i_funcna'] = 'A <code>%s</code> PHP funkció nem elérhető. Esetleg a tárhelyszolgáltató letiltotta biztonsági okok miatt?';
+$lang['i_phpver'] = 'A PHP <code>%s</code> verziója alacsonyabb, mint ami szükséges lenne: <code>%s</code>. Frissítsd a PHP-det újabb verzióra!';
+$lang['i_permfail'] = 'A DokiWiki nem tudja írni a <code>%s</code> könyvtárat. Be kell állítanod ehhez a könyvtárhoz a megfelelő jogosultságokat!';
+$lang['i_confexists'] = '<code>%s</code> már létezik.';
+$lang['i_writeerr'] = 'Nem tudom ezt létrehozni: <code>%s</code>. Ellenőrizd a könyvtár/fájl jogosultságokat, és hozd létre az állományt kézzel.';
+$lang['i_badhash'] = 'A dokuwiki.php nem felismerhető vagy módosított (hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - nem helyes vagy üres érték';
+$lang['i_success'] = 'A beállítás sikeresen befejeződött. Most már letörölhető az install.php fájl. Látogasd meg az <a href="doku.php">új DokuWikidet</a>!';
+$lang['i_failure'] = 'Hiba lépett fel a konfigurációs állományok írásakor. Ki kell javítanod kézzel, mielőtt használni kezded az <a href="doku.php">új DokuWikidet</a>.';
+$lang['i_policy'] = 'Kezdeti hozzáférési politika';
+$lang['i_pol0'] = 'Nyitott Wiki (mindenki olvashatja, írhatja, és fájlokat tölthet fel)';
+$lang['i_pol1'] = 'Publikus Wiki (mindenki olvashatja, de csak regisztrált felhasználók írhatják, és tölthetnek fel fájlokat)';
+$lang['i_pol2'] = 'Zárt Wiki (csak regisztrált felhasználók olvashatják, írhatják és tölthetnek fel fájlokat)';
+$lang['i_retry'] = 'Újra';
+$lang['mu_intro'] = 'Itt több fájlt is fel tudsz tölteni egyszerre. Kattints a "Kiválaszt" gombra és add hozzá a listához. Nyomd meg a Feltöltés gombot, amikor elkészültél.';
+$lang['mu_gridname'] = 'Fájlnév';
+$lang['mu_gridsize'] = 'Méret';
+$lang['mu_gridstat'] = 'Ãllapot';
+$lang['mu_namespace'] = 'Névtér';
+$lang['mu_browse'] = 'Kiválaszt';
+$lang['mu_toobig'] = 'túl nagy';
+$lang['mu_ready'] = 'feltöltésre kész';
+$lang['mu_done'] = 'kész';
+$lang['mu_fail'] = 'hibás';
+$lang['mu_authfail'] = 'session lejárt';
+$lang['mu_progress'] = '@PCT@% feltöltve';
+$lang['mu_filetypes'] = 'Megengedett fájltípusok';
+$lang['mu_info'] = 'Fájlok feltöltve.';
+$lang['mu_lasterr'] = 'Utolsó hiba:';
+$lang['recent_global'] = 'Jelenleg csak a <b>%s</b> névtér friss változásai látszanak. Megtekinthetők <a href="%s">a teljes wiki friss változásai</a> is.';
+$lang['years'] = '%d évvel ezelőtt';
+$lang['months'] = '%d hónappal ezelőtt';
+$lang['weeks'] = '%d héttel ezelőtt';
+$lang['days'] = '%d nappal ezelőtt';
+$lang['hours'] = '%d órával ezelőtt';
+$lang['minutes'] = '%d perccel ezelőtt';
+$lang['seconds'] = '%d másodperccel ezelőtt';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/locked.txt
new file mode 100644
index 000000000..229141674
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/locked.txt
@@ -0,0 +1,4 @@
+====== Az oldal zárolva ======
+
+Ezt az oldalt épp szerkeszti egy másik felhasználó. Várnod kell, amíg a másik felhasználó befejezi, vagy amíg a zárolási időzítő le nem jár.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/login.txt
new file mode 100644
index 000000000..3f7e62e72
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/login.txt
@@ -0,0 +1,5 @@
+====== Belépés ======
+
+Nem vagy bejelentkezve! Add meg az azonosítási adataid a belépéshez lentebb! A böngésződben engedélyezned kell a sütik (cookies) fogadását a belépéshez.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/mailtext.txt
new file mode 100644
index 000000000..9b0c2921e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/mailtext.txt
@@ -0,0 +1,16 @@
+A DokuWikidben egy oldalt létrejött, vagy megváltozott. A részletek:
+
+Dátum: @DATE@
+Böngésző: @BROWSER@
+IP-cím: @IPADDRESS@
+Gép neve: @HOSTNAME@
+Előző változat: @OLDPAGE@
+Új változat: @NEWPAGE@
+Összefoglaló: @SUMMARY@
+Felhasználó: @USER@
+
+@DIFF@
+
+
+--
+Ezt a levelet a @DOKUWIKIURL@ DokuWiki generálta.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/newpage.txt
new file mode 100644
index 000000000..de5a34d8e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/newpage.txt
@@ -0,0 +1,3 @@
+====== Ilyen oldal még nem létezik ======
+
+Egy nem létező oldalra tévedtél. Létrehozhatod az ''Oldal létrehozása'' gombra kattintva. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/norev.txt
new file mode 100644
index 000000000..4dd408459
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/norev.txt
@@ -0,0 +1,5 @@
+====== Nincs ilyen változat ======
+
+A megadott változat nem létezik. Használd az ''Előző változatok'' nyomógombot az előzmények listájának megtekintéséhez.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/preview.txt
new file mode 100644
index 000000000..ad7f7d4b0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/preview.txt
@@ -0,0 +1,4 @@
+====== Előnézet ======
+
+Ez a szöveged előnézete, így fog kinézni. Figyelj jól: ez **még nincs elmentve**!
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/pwconfirm.txt
new file mode 100644
index 000000000..617419ee8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/pwconfirm.txt
@@ -0,0 +1,14 @@
+Szia @FULLNAME@!
+
+Te vagy más valaki kért egy új jelszót a @DOKUWIKIURL@
+címen lévő @TITLE@ wiki felhasználódhoz.
+
+Ha nem kértél ilyet, hagyd figyelmen kívül ezt a levelet.
+
+Ha Te voltál, az új jelszó kérelmed megerősítéséhez a
+következő linkre kattints, vagy másold a böngésződbe:
+
+@CONFIRM@
+
+--
+Ezt a levelet a @DOKUWIKIURL@ címen lévő DokuWiki generálta.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/read.txt
new file mode 100644
index 000000000..89ac96338
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/read.txt
@@ -0,0 +1,2 @@
+Ez az oldal csak olvasható. Megtekintheted a forrását, de nem változtathatod meg. Ha úgy gondolod, hogy ez helytelen, kérdezd a Wiki-gazdát.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/recent.txt
new file mode 100644
index 000000000..4e0c1ec06
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/recent.txt
@@ -0,0 +1,5 @@
+====== Legutóbbi változások ======
+
+Az alábbi oldalak változtak legutoljára.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/register.txt
new file mode 100644
index 000000000..2745c4d77
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/register.txt
@@ -0,0 +1,4 @@
+====== Új felhasználó regisztrálása ======
+
+Töltsd ki az összes alábbi adatot az új Wiki felhasználói azonosítód létrehozásához. Győződj meg róla, hogy **érvényes e-mail címet** adtál meg -- az új jelszavad erre a címre küldjük el. Az azonosítód érvényes [[doku>pagename|oldalnév]] kell legyen.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/registermail.txt
new file mode 100644
index 000000000..d45ef0d38
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/registermail.txt
@@ -0,0 +1,13 @@
+Egy új felhasználó regisztrált a következő adatokkal:
+
+Felhasználói név: @NEWUSER@
+Teljes név: @NEWNAME@
+E-mail: @NEWEMAIL@
+
+Dátum: @DATE@
+Böngésző: @BROWSER@
+IP-cím : @IPADDRESS@
+Gép neve: @HOSTNAME@
+
+--
+Ezt a levelet @DOKUWIKIURL@ DokuWiki generálta. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/resendpwd.txt
new file mode 100644
index 000000000..24931a7ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/resendpwd.txt
@@ -0,0 +1,3 @@
+===== Új jelszó kérése =====
+
+Kérlek add meg a felhasználó neved az új jelszó elküldéséhez. A jelszó cseréjéhez szükséges megerősítő linket a regisztrált e-mail címedre küldjük. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/revisions.txt
new file mode 100644
index 000000000..3537fd653
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/revisions.txt
@@ -0,0 +1,3 @@
+====== Előző változatok ======
+
+Ezek az előző változatai az aktuális dokumentumnak. Egy előző változathoz való visszatéréshez nyomd meg az ''Oldal szerkesztése'' gombot, majd mentsd el.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/searchpage.txt
new file mode 100644
index 000000000..b1defed84
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/searchpage.txt
@@ -0,0 +1,5 @@
+====== Keresés ======
+
+A keresés eredményét lentebb láthatod. Ha nem találtad meg amit kerestél, akkor létrehozhatsz egy új oldalt a keresésed alapján ''Az oldal szerkesztése'' gombbal.
+
+===== Eredmény(ek) ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/showrev.txt
new file mode 100644
index 000000000..2131b4dc0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/showrev.txt
@@ -0,0 +1,2 @@
+**Ez a dokumentum egy előző változata!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/stopwords.txt
new file mode 100644
index 000000000..a8bd35c7d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/stopwords.txt
@@ -0,0 +1,39 @@
+# Ez egy szó-lista (soronként egy szóval), amelyeket az index készítésekor nem veszünk figyelembe.
+# Ha szerkeszted ezt a fájlt, győződj meg arról, hogy UNIX sorvég-jeleket használj! (csak NL karakter)
+# Nincs szükség 3 karakternél rövidebb szavak felsorolására, ezeket egyébként sem vesszük figyelembe.
+# Ez a lista a http://www.ranks.nl/stopwords/ oldalon szereplő alapján készült
+a
+az
+egy
+be
+ki
+le
+fel
+meg
+el
+át
+rá
+ide
+oda
+szét
+össze
+vissza
+de
+hát
+és
+vagy
+hogy
+van
+lesz
+volt
+csak
+nem
+igen
+mint
+én
+te
+Å‘
+mi
+ti
+Å‘k
+ön
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/subscribermail.txt
new file mode 100644
index 000000000..a5e8c96d1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/subscribermail.txt
@@ -0,0 +1,18 @@
+Szia!
+
+A(z) @PAGE@ oldal a(z) @TITLE@ wikiben megváltozott.
+Itt vannak a változások:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Ha le szeretnél iratkozni ennek az oldalnak a változás-követéséről,
+lépj be a wikibe ezen a címen:
+@DOKUWIKIURL@, majd keresd meg a(z)
+@NEWPAGE@ oldalt
+és válaszd a 'Oldalváltozások-hírlevél leiratkozás' gombot.
+
+--
+Ezt a levelet a @DOKUWIKIURL@ címen lévő DokuWiki alkalmazás generálta.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/updateprofile.txt
new file mode 100644
index 000000000..50df15384
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/updateprofile.txt
@@ -0,0 +1,3 @@
+===== Felhasználói adatok megváltoztatása =====
+
+Csak azt a mezőt kell kitöltened, amit változtatni szeretnél. A felhasználói nevet nem lehet megváltoztatni.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/uploadmail.txt
new file mode 100644
index 000000000..c772ab220
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/uploadmail.txt
@@ -0,0 +1,13 @@
+Fájlfeltöltés történt a DokuWikidben. Részletek:
+
+Ãllomány: @MEDIA@
+Dátum: @DATE@
+Böngésző: @BROWSER@
+IP-cím: @IPADDRESS@
+Gépnév: @HOSTNAME@
+Méret: @SIZE@
+MIME-típus: @MIME@
+Felhasználó: @USER@
+
+--
+Ezt a levelet @DOKUWIKIURL@ DokuWiki generálta. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/wordblock.txt
new file mode 100644
index 000000000..2fe2efa9b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/wordblock.txt
@@ -0,0 +1,6 @@
+====== SPAM szűrés ======
+
+A változtatásaid **nem** mentettük, mert egy vagy több tiltott szót tartalmaz. Ha kéretlen reklám anyagot ("SPAM") próbáltál erre a Wikire rakni, akkor szégyelld magad.
+
+Ha azt gondolod, hogy valami hibáról, vagy félreértésről van szó, akkor lépj kapcsolatba a Wiki-gazdával.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id-ni/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id-ni/lang.php
new file mode 100644
index 000000000..2fc631373
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id-ni/lang.php
@@ -0,0 +1,79 @@
+<?php
+/**
+ * idni language file
+ *
+ * @author Harefa <fidelis@harefa.com>
+ * @author Yustinus Waruwu <juswaruwu@gmail.com>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '“';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '‘';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = '’';
+$lang['btn_edit'] = 'Haogö nga\'örö da\'a';
+$lang['btn_source'] = 'Oroma\'ö nga\'örö sindruhu';
+$lang['btn_show'] = 'Foroma\'ö nga\'örö';
+$lang['btn_create'] = 'Fazökhi nga\'öro';
+$lang['btn_search'] = 'Alui';
+$lang['btn_save'] = 'Irö\'ö';
+$lang['btn_preview'] = 'Foroma\'ö zikhala';
+$lang['btn_top'] = 'Angawuli ba mböröta';
+$lang['btn_newer'] = '<< sibohou';
+$lang['btn_older'] = 'si no ara >>';
+$lang['btn_revs'] = 'nifawu\'a si\'oföna';
+$lang['btn_recent'] = 'Lahe nibohouni';
+$lang['btn_upload'] = 'Fa\'oeh\'ö';
+$lang['btn_cancel'] = 'Lö alua';
+$lang['btn_index'] = 'Index';
+$lang['btn_secedit'] = 'Ehaogö';
+$lang['btn_login'] = 'Felalö bakha';
+$lang['btn_logout'] = 'Möi baero';
+$lang['btn_admin'] = 'Admin';
+$lang['btn_update'] = 'Bohouni';
+$lang['btn_delete'] = 'Heta';
+$lang['btn_back'] = 'Fulifuri';
+$lang['btn_backlink'] = 'Link fangawuli';
+$lang['btn_backtomedia'] = 'Angawuli ba filianö Mediafile';
+$lang['btn_profile'] = 'Famohouni pörofile';
+$lang['btn_reset'] = 'Fawu\'a';
+$lang['btn_resendpwd'] = 'Fa\'ohe\'ö kode sibohou';
+$lang['btn_draft'] = 'Fawu\'a wanura';
+$lang['btn_draftdel'] = 'Heta zura';
+$lang['loggedinas'] = 'Möi bakha zotöi';
+$lang['user'] = 'Töi';
+$lang['pass'] = 'Kode';
+$lang['newpass'] = 'Kode sibohou';
+$lang['oldpass'] = 'Faduhu\'ö kode';
+$lang['passchk'] = 'Sura sakalitö';
+$lang['remember'] = 'Töngöni ndra\'o';
+$lang['fullname'] = 'Töi safönu';
+$lang['email'] = 'Imele';
+$lang['register'] = 'Fasura\'ö';
+$lang['profile'] = 'Töi pörofile';
+$lang['badlogin'] = 'Bologö dödöu, fasala döi faoma kode.';
+$lang['minoredit'] = 'Famawu\'a ma\'ifu';
+$lang['regmissing'] = 'Bologö dödöu, si lö tola lö\'ö öfo\'ösi fefu nahia si tohöna.';
+$lang['reguexists'] = 'Bologö dödöu, no so zangoguna\'ö töi da\'a.';
+$lang['regsuccess'] = 'No tefazökhi akunö ba tefa\'ohe\'ö kode ba imele.';
+$lang['regsuccess2'] = 'No tefazökhi akunö';
+$lang['regmailfail'] = 'Oroma wa so ma\'ifu zifawuka ba wama\'ohe\'ö imele kode. Fuli sofu khö admin!';
+$lang['regbadmail'] = 'Imele nibe\'emö lö atulö - na ö\'ila wa fasala da\'a, sofu khö admin';
+$lang['regbadpass'] = 'Dombuadombua kode nibe\'emö lö fagölö, fuli sura.';
+$lang['regpwmail'] = 'Kode DokuWiki';
+$lang['reghere'] = 'Hadia no so akunömö? Na lö\'ö, fazökhi sambua.';
+$lang['profna'] = 'Lö tetehegö ba wiki da\'a ba wamawu\'a pörofile';
+$lang['profnochange'] = 'Lö hadöi nifawu\'ö, lö hadöi ni\'ohalöwögöi';
+$lang['profnoempty'] = 'Lö tetehegö na lö hadöi töi ma imele.';
+$lang['profchanged'] = 'Pörofile zangoguna\'ö no tebohouni.';
+$lang['pwdforget'] = 'Hadia olifu\'ö kode? Fuli halö kode';
+$lang['resendna'] = 'Lö tetehegi ba wiki da\'a wama\'ohe\'ö kode dua kali.';
+$lang['resendpwd'] = 'Tefa\'ohe\'ö kode sibahou khö';
+$lang['resendpwdmissing'] = 'Bologö dödöu, si lö tola lö\'ö öfo\'ösi fefu nahia si tohöna.';
+$lang['resendpwdnouser'] = 'Bologö dödöu, lö masöndra zangoguna da\'a ba database.';
+$lang['resendpwdconfirm'] = 'No tefaohe\'ö link famaduhu\'ö ba imele.';
+$lang['resendpwdsuccess'] = 'No tefa\'ohe\'ö kode sibohou ba imele.';
+$lang['txt_upload'] = 'Fili file ni fa\'ohe\'ö';
+$lang['notsavedyet'] = 'Famawu\'a si lö mu\'irö\'ö taya. \nSinduhu ötohugö?';
+$lang['mediaselect'] = 'Media file';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/admin.txt
new file mode 100644
index 000000000..8cb25edb6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/admin.txt
@@ -0,0 +1,4 @@
+====== Administrasi ======
+
+Berikut ini adalah daftar pekerjaan administratif yang dapat Anda temukan di DokuWiki.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/backlinks.txt
new file mode 100644
index 000000000..79c70f30b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/backlinks.txt
@@ -0,0 +1,3 @@
+====== Backlinks ======
+
+Daftar dibawah ini adalah halaman-halaman (lain) yang terhubung ke halaman ini.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/conflict.txt
new file mode 100644
index 000000000..236e8b6e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/conflict.txt
@@ -0,0 +1,6 @@
+====== Versi terbaru telah Ada ======
+
+Versi terbaru dari dokumen yang baru saja Anda Edit telah ada. Ini terjadi ketika user lain telah selesai mengubah halaman, saat Anda sedang meng-edit.
+
+Pertimbangkan perbedaan yang ditampilkan dibawah ini, kemudian putuskan versi mana yang harus disimpan. Jika Anda memilih "Simpan", versi (tulisan terbaru) Andalah yang akan disimpan. Tekan "Batal" to menggunakan versi tulisan yang telah ada.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/denied.txt
new file mode 100644
index 000000000..bad8f24a6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/denied.txt
@@ -0,0 +1,4 @@
+====== Akses Ditolak ======
+
+Maaf, Anda tidak mempunyai hak akses untuk melanjutkan. Apakah Anda belum login?
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/diff.txt
new file mode 100644
index 000000000..eee1e5a58
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/diff.txt
@@ -0,0 +1,4 @@
+====== Perbedaan ======
+
+Ini menunjukkan perbedaan antara versi yang terpilih dengan versi yang sedang aktif.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/draft.txt
new file mode 100644
index 000000000..d7de1458b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/draft.txt
@@ -0,0 +1,5 @@
+====== File Draft ditemukan ======
+
+Proses pengeditan Anda sebelumnya tidak selesai dengan sempurna. DokuWiki secara otomatis meyimpan draft yang dapat Anda pakai untuk melanjutkan pengeditan. Dibawah ini Anda dapat melihat data yang disimpan pada sesi sebelumnya.
+
+Silahkan pilih jika Anda ingin //recover// sesi pengeditan terakhir atau //hapus// draft, atau //batalkan// proses pengeditan.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/edit.txt
new file mode 100644
index 000000000..a32803c44
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/edit.txt
@@ -0,0 +1,2 @@
+Ubah isi halaman kemudian tekan "Simpan". Lihat [[wiki:syntax]] untuk sintaks-sintaks Wiki. Mohon edit/ubah halaman sesuai dengan judul halamannya. Bila Anda masih ragu untuk menulis di halaman ini, silahkan bermain-main di [[playground:playground|tamanbermain]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/editrev.txt
new file mode 100644
index 000000000..e6d247c7a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/editrev.txt
@@ -0,0 +1,2 @@
+**Anda telah membuka dokumen versi lama!** Jika menyimpannya, berarti Anda akan membuat versi baru dari data ini.
+---- \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/index.txt
new file mode 100644
index 000000000..88bbb12e4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/index.txt
@@ -0,0 +1,4 @@
+====== Index ======
+
+Berikut ini adalah index dari keseluruhan halaman yang ada, diurutkan berdasar [[doku>namespaces|namespaces]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/install.html
new file mode 100644
index 000000000..9a9a8f1e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/install.html
@@ -0,0 +1,25 @@
+<p>Halaman ini membatu Anda dalam proses instalasi dan konfigurasi pertama kali
+untuk <a href="http://dokuwiki.org">Dokuwiki</a>. Informasi lebih lanjut
+tentang alat instalasi ini tersedia dalam
+<a href="http://dokuwiki.org/installer">halaman dokumentasi</a> sendiri.</p>
+
+<p>DokuWIki menggunakan berkas biasa sebagai media penyimpanan halaman wiki
+dan informasi lainnya yang berhubungan dengan halaman tersebut (contoh: gambar,
+indeks pencarian, revisi lama, dll). Agar bisa menggunakannya DokuWiki
+<strong>harus</strong> memiliki hak akses tulis pada direktori yang menyimpan
+berkas-berkas tersebut. Alat instalasi ini tidak dapat melakukan perubahan
+konfigurasi hak akses pada direktori. Biasanya harus menggunakan command shell
+atau jika Anda pengguna layanan hosting, melalui FTP atau control panel layanan
+hosting Anda (misalnya: cPanel). </p>
+
+<p>Alat instalasi ini akan mengatur konfigurasi DokuWiki Anda untuk
+<acronym title="access control list">ACL</acronym>, yang selanjutnya akan
+memperbolehkan administrator untuk login dan mengakses menu Admin DokuWiki
+untuk menginstal plugin, mengatur pengguna (user), mengatur hak akses ke
+halaman wiki dan perubahan konfigurasi. Ini tidak diawajibkan dalam pengoperasian
+DokuWiki, tetapi dapat membuat DokuWiki lebih mudah untuk dipelihara.</p>
+
+<p>Pengguna berpengalaman atau pengguna dengan kebutuhan instalasi khusus silahkan
+melihat link <a href="http://dokuwiki.org/install">Panduan Instalasi</a>
+and <a href="http://dokuwiki.org/config">Konfigurasi WIki</a>.
+untuk hal-hal yang berhubungan dengan instalasi dan konfigurasi.</p>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/lang.php
new file mode 100644
index 000000000..447abaf1a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/lang.php
@@ -0,0 +1,210 @@
+<?php
+/**
+ * Indonesian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author mubaidillah <mubaidillah@gmail.com>
+ * @author Irwan Butar Butar <irwansah.putra@gmail.com>
+ * @author Yustinus Waruwu <juswaruwu@gmail.com>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '"';
+$lang['doublequoteclosing'] = '"';
+$lang['singlequoteopening'] = '\'';
+$lang['singlequoteclosing'] = '\'';
+$lang['apostrophe'] = '\'';
+$lang['btn_edit'] = 'Edit halaman ini';
+$lang['btn_source'] = 'Lihat sumber halaman';
+$lang['btn_show'] = 'Tampilkan halaman';
+$lang['btn_create'] = 'Buat halaman baru';
+$lang['btn_search'] = 'Cari';
+$lang['btn_save'] = 'Simpan';
+$lang['btn_preview'] = 'Preview';
+$lang['btn_top'] = 'kembali ke atas';
+$lang['btn_newer'] = '<< lebih lanjut';
+$lang['btn_older'] = 'sebelumnya >>';
+$lang['btn_revs'] = 'Revisi-revisi lama';
+$lang['btn_recent'] = 'Perubahan terbaru';
+$lang['btn_upload'] = 'Upload';
+$lang['btn_cancel'] = 'Batal';
+$lang['btn_index'] = 'Indeks';
+$lang['btn_secedit'] = 'Edit';
+$lang['btn_login'] = 'Login';
+$lang['btn_logout'] = 'Keluar';
+$lang['btn_admin'] = 'Admin';
+$lang['btn_update'] = 'Ubah';
+$lang['btn_delete'] = 'Hapus';
+$lang['btn_back'] = 'Kembali';
+$lang['btn_backlink'] = 'Backlinks';
+$lang['btn_backtomedia'] = 'Kembali ke Pilihan Mediafile';
+$lang['btn_subscribe'] = 'Ikuti Perubahan';
+$lang['btn_unsubscribe'] = 'Berhenti Ikuti Perubahan';
+$lang['btn_profile'] = 'Ubah Profil';
+$lang['btn_reset'] = 'Reset';
+$lang['btn_resendpwd'] = 'Kirim password baru';
+$lang['btn_draft'] = 'Edit draft';
+$lang['btn_draftdel'] = 'Hapus draft';
+$lang['loggedinas'] = 'Login sebagai ';
+$lang['user'] = 'Username';
+$lang['pass'] = 'Password';
+$lang['newpass'] = 'Password baru';
+$lang['oldpass'] = 'Konfirmasi password';
+$lang['passchk'] = 'sekali lagi';
+$lang['remember'] = 'Ingat saya';
+$lang['fullname'] = 'Nama lengkap';
+$lang['email'] = 'E-Mail';
+$lang['register'] = 'Daftar';
+$lang['profile'] = 'Profil User';
+$lang['badlogin'] = 'Maaf, username atau password salah.';
+$lang['minoredit'] = 'Perubahan Minor';
+$lang['draftdate'] = 'Simpan draft secara otomatis';
+$lang['regmissing'] = 'Maaf, Anda harus mengisi semua field.';
+$lang['reguexists'] = 'Maaf, user dengan user login ini telah ada.';
+$lang['regsuccess'] = 'User telah didaftarkan dan password telah dikirim ke email Anda.';
+$lang['regsuccess2'] = 'User telah dibuatkan.';
+$lang['regmailfail'] = 'Kami menemukan kesalahan saat mengirimkan password ke alamat email Anda. Mohon hubungi administrator.';
+$lang['regbadmail'] = 'Alamat email yang Anda masukkan tidak valid - jika menurut Anda hal ini adalah kesalahan sistem, mohon hubungi admin.';
+$lang['regbadpass'] = 'Passwod yang dimasukkan tidak sama. Silahkan ulangi lagi.';
+$lang['regpwmail'] = 'Password DokuWiki Anda';
+$lang['reghere'] = 'Anda belum mempunyai account? silahkan ';
+$lang['profna'] = 'Wiki ini tidak mengijinkan perubahan profil.';
+$lang['profnochange'] = 'Tidak ada perubahan.';
+$lang['profnoempty'] = 'Mohon mengisikan nama atau alamat email.';
+$lang['profchanged'] = 'Profil User berhasil diubah.';
+$lang['pwdforget'] = 'Lupa Password? Dapatkan yang baru';
+$lang['resendna'] = 'Wiki ini tidak mendukung pengiriman ulang password.';
+$lang['resendpwd'] = 'Kirim password baru untuk';
+$lang['resendpwdmissing'] = 'Maaf, Anda harus mengisikan semua field.';
+$lang['resendpwdnouser'] = 'Maaf, user ini tidak ditemukan.';
+$lang['resendpwdbadauth'] = 'Maaf, kode autentikasi tidak valid. Pastikan Anda menggunakan keseluruhan link konfirmasi.';
+$lang['resendpwdconfirm'] = 'Link konfirmasi telah dikirim melalui email.';
+$lang['resendpwdsuccess'] = 'Password baru Anda telah dikirim melalui email.';
+$lang['txt_upload'] = 'File yang akan diupload';
+$lang['txt_filename'] = 'Masukkan nama wiki (opsional)';
+$lang['txt_overwrt'] = 'File yang telah ada akan ditindih';
+$lang['lockedby'] = 'Sedang dikunci oleh';
+$lang['lockexpire'] = 'Penguncian artikel sampai dengan';
+$lang['willexpire'] = 'Halaman yang sedang Anda kunci akan berakhir dalam waktu kurang lebih satu menit.\nUntuk menghindari konflik, gunakan tombol Preview untuk me-reset timer pengunci.';
+$lang['notsavedyet'] = 'Perubahan yang belum disimpan akan hilang.\nYakin akan dilanjutkan?';
+$lang['rssfailed'] = 'Error terjadi saat mengambil feed: ';
+$lang['nothingfound'] = 'Tidak menemukan samasekali.';
+$lang['mediaselect'] = 'Pilihan Mediafile';
+$lang['fileupload'] = 'Mediafile Upload';
+$lang['uploadsucc'] = 'Upload sukses';
+$lang['uploadfail'] = 'Upload gagal. Apakah hak ijinnya salah?';
+$lang['uploadwrong'] = 'Upload ditolak. Ekstensi file ini tidak diperbolehkan!';
+$lang['uploadexist'] = 'File telah ada. Tidak mengerjakan apa-apa.';
+$lang['uploadbadcontent'] = 'Isi file yang diupload tidak cocok dengan ekstensi file %s.';
+$lang['uploadspam'] = 'File yang diupload diblok oleh spam blacklist.';
+$lang['uploadxss'] = 'File yang diupload diblok karena kemungkinan isi yang berbahaya.';
+$lang['deletesucc'] = 'File "%s" telah dihapus.';
+$lang['deletefail'] = '"%s" tidak dapat dihapus - cek hak aksesnya.';
+$lang['mediainuse'] = 'File "%s" belum dihapus - file ini sedang digunakan.';
+$lang['namespaces'] = 'Namespaces';
+$lang['mediafiles'] = 'File tersedia didalam';
+$lang['js']['keepopen'] = 'Biarkan window terbuka dalam pemilihan';
+$lang['js']['hidedetails'] = 'Sembunyikan detil';
+$lang['mediausage'] = 'Gunakan sintaks berikut untuk me-refer ke file ini';
+$lang['mediaview'] = 'Tampilkan file asli';
+$lang['mediaroot'] = 'root';
+$lang['mediaupload'] = 'Upload file ke namespace ini. Untuk menbuat namespace baru, tambahkan namanya didepanpada nama file "Upload as" dipisahkan dengan titik dua (:).';
+$lang['mediaextchange'] = 'Ektensi file berubah dari .%s ke .%s';
+$lang['reference'] = 'Referensi untuk';
+$lang['ref_inuse'] = 'File tidak dapat dihapus karena sedang digunakan oleh halaman:';
+$lang['ref_hidden'] = 'Beberapa referensi ada didalam halaman yang tidak diijinkan untuk Anda baca.';
+$lang['hits'] = 'Hits';
+$lang['quickhits'] = 'Matching pagenames';
+$lang['toc'] = 'Daftar isi';
+$lang['current'] = 'sekarang';
+$lang['yours'] = 'Versi Anda';
+$lang['diff'] = 'Tampilkan perbedaan dengan versi sekarang';
+$lang['diff2'] = 'Tampilkan perbedaan diantara revisi terpilih';
+$lang['line'] = 'Baris';
+$lang['breadcrumb'] = 'Jejak';
+$lang['youarehere'] = 'Anda disini';
+$lang['lastmod'] = 'Terakhir diubah';
+$lang['by'] = 'oleh';
+$lang['deleted'] = 'terhapus';
+$lang['created'] = 'dibuat';
+$lang['restored'] = 'revisi lama ditampilkan kembali';
+$lang['external_edit'] = 'Perubahan eksternal';
+$lang['summary'] = 'Edit summary';
+$lang['mail_newpage'] = 'Halaman ditambahkan:';
+$lang['mail_changed'] = 'Halaman diubah:';
+$lang['mail_new_user'] = 'User baru:';
+$lang['mail_upload'] = 'Berkas di-upload:';
+$lang['js']['nosmblinks'] = "Link ke share Windows hanya bekerja di Microsoft Internet Explorer.\nAnda masih dapat mengcopy and paste linknya.";
+$lang['qb_bold'] = 'Tebal';
+$lang['qb_italic'] = 'Miring';
+$lang['qb_underl'] = 'Garis Bawah';
+$lang['qb_code'] = 'Kode';
+$lang['qb_strike'] = 'Text Tercoret';
+$lang['qb_h1'] = 'Level 1 Headline';
+$lang['qb_h2'] = 'Level 2 Headline';
+$lang['qb_h3'] = 'Level 3 Headline';
+$lang['qb_h4'] = 'Level 4 Headline';
+$lang['qb_h5'] = 'Level 5 Headline';
+$lang['qb_link'] = 'Link Internal';
+$lang['qb_extlink'] = 'Link External';
+$lang['qb_hr'] = 'Garis Horisontal';
+$lang['qb_ol'] = 'Item Berurutan';
+$lang['qb_ul'] = 'Item Tidak Berurutan';
+$lang['qb_media'] = 'Tambahkan gambar atau file lain';
+$lang['qb_sig'] = 'Sisipkan tanda tangan';
+$lang['qb_smileys'] = 'Smileys';
+$lang['qb_chars'] = 'Karakter Khusus';
+$lang['js']['del_confirm'] = 'Hapus tulisan ini?';
+$lang['admin_register'] = 'Tambah user baru';
+$lang['metaedit'] = 'Edit Metadata';
+$lang['metasaveerr'] = 'Gagal menulis metadata';
+$lang['metasaveok'] = 'Metadata tersimpan';
+$lang['img_backto'] = 'Kembali ke';
+$lang['img_title'] = 'Judul';
+$lang['img_caption'] = 'Label';
+$lang['img_date'] = 'Tanggal';
+$lang['img_fname'] = 'Nama file';
+$lang['img_fsize'] = 'Ukuran';
+$lang['img_artist'] = 'Tukang foto';
+$lang['img_copyr'] = 'Hakcipta';
+$lang['img_format'] = 'Format';
+$lang['img_camera'] = 'Kamera';
+$lang['img_keywords'] = 'Katakunci';
+$lang['subscribe_success'] = 'Penambahan %s ke data subsripsi untuk %s';
+$lang['subscribe_error'] = 'Gagal menambahkan %s ke data subsripsi untuk %s';
+$lang['subscribe_noaddress'] = 'Tidak ditemukan alamat yang berhubungan dengan login Anda, Anda tidak dapat menambahkan daftar subscription';
+$lang['unsubscribe_success'] = 'Menghapus %s dari daftar subscription untuk %s';
+$lang['unsubscribe_error'] = 'Gagal menghapus %s dari daftar subscription untuk %s';
+$lang['authmodfailed'] = 'Konfigurasi autentikasi user tidak valid. Harap informasikan admin Wiki Anda.';
+$lang['authtempfail'] = 'Autentikasi user saat ini sedang tidak dapat digunakan. Jika kejadian ini berlanjut, Harap informasikan admin Wiki Anda.';
+$lang['i_chooselang'] = 'Pilih bahasa';
+$lang['i_installer'] = 'Instalasi DokuWiki';
+$lang['i_wikiname'] = 'Nama Wiki';
+$lang['i_enableacl'] = 'Aktifkan ACL (disarankan)';
+$lang['i_problems'] = 'Terdapat beberapa kesalahan seperti berikut. Anda tidak dapat melanjutkan sampai kesalahan tersebut diperbaiki.';
+$lang['i_modified'] = 'Untuk alasan keamanan, skrip ini hanya dapat dijalankan pada instalasi DikuWiki baru dan belum di modifikasi. Silahkan meng-ekstrak kembali berkasi dari halaman dowload, atau lihat <a href="http://dokuwiki.org/install">Dokuwiki installation instructions</a> ';
+$lang['i_funcna'] = 'Fungsi PHP <code>%s</code> tidak tersedia. Mungkin dinonaktifkan oleh layanan hosting Anda?';
+$lang['i_phpver'] = 'Versi PHP Anda <code>%s</code> lebih rendah dari yang dibutuhkan <code>%s</code>. Mohon melakukan upgrade.';
+$lang['i_permfail'] = '<code>%s</code> tidak dapat ditulis oleh DokuWiki. Anda harus memperbaiki konfigurasi hak akses untuk direktori tersebut.';
+$lang['i_confexists'] = '<code>%s</code> sudah ada';
+$lang['i_writeerr'] = 'Tidak dapat membuat <code>%s</code>. Anda harus memeriksa konfigurasi hak akses direktori/berkas dan membuatnya secara manual.';
+$lang['i_badhash'] = 'dokuwiki.php tidak dikenal atau sudah diubah (hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - tidak valid atau belum diisi';
+$lang['i_success'] = 'Konfigurasi telah berhasil. Anda boleh menghapus berkas install.php sekarang. Lanjutkan ke <a href="doku.php">DokuWiki baru Anda</a>.';
+$lang['i_failure'] = 'Terdapat beberapa kesalahan dalam menulis berkas konfigurasi. Anda harus memperbaikinnya sendiri sebelum dapat menggunakan <a href="doku.php">DokuWiki baru Anda</a>.';
+$lang['i_policy'] = 'Policy ACL awal';
+$lang['i_pol0'] = 'Wiki Terbuka (baca, tulis, upload untuk semua orang)';
+$lang['i_pol1'] = 'Wiki Publik (baca untuk semua orang, tulis dan upload untuk pengguna terdaftar)';
+$lang['i_pol2'] = 'Wiki Privat (baca, tulis dan upload hanya untuk pengguna terdaftar)';
+$lang['i_retry'] = 'Coba Lagi';
+$lang['mu_gridname'] = 'Nama file';
+$lang['mu_gridsize'] = 'Ukuran';
+$lang['mu_gridstat'] = 'Status';
+$lang['mu_namespace'] = 'Namaspace';
+$lang['mu_browse'] = 'Jelajah';
+$lang['mu_ready'] = 'Siap untuk uplod';
+$lang['mu_done'] = 'Selesai';
+$lang['mu_fail'] = 'Gagal';
+$lang['mu_authfail'] = 'sesi habis';
+$lang['mu_progress'] = '@PCT@% uploaded';
+$lang['mu_filetypes'] = 'Izinkan tipe file';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/locked.txt
new file mode 100644
index 000000000..8147717fd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/locked.txt
@@ -0,0 +1,3 @@
+====== Halaman Terkunci ======
+
+Halaman ini tertutup (terkunci) untuk diedit oleh user lain. Anda harus menunggu sampai user ini menyelesaikan pengeditan, atau masa berlaku penguncian telah berakhir.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/login.txt
new file mode 100644
index 000000000..f736e882b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/login.txt
@@ -0,0 +1,4 @@
+====== Login ======
+
+Anda belum login! Masukkan data autentifikasi dibawah ini untuk masuk log (login). Cookies harus diaktifkan agar bisa login.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/mailtext.txt
new file mode 100644
index 000000000..7eede9b3c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/mailtext.txt
@@ -0,0 +1,17 @@
+Halaman di DokuWiki Anda telah bertamah atau berubah, dengan detil sebagai berikut:
+
+Date : @DATE@
+Browser : @BROWSER@
+IP-Address : @IPADDRESS@
+Hostname : @HOSTNAME@
+Old Revision: @OLDPAGE@
+New Revision: @NEWPAGE@
+Edit Summary: @SUMMARY@
+User : @USER@
+
+@DIFF@
+
+
+--
+Email ini digenerate oleh DokuWiki di
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/newpage.txt
new file mode 100644
index 000000000..8d3f99d72
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/newpage.txt
@@ -0,0 +1,3 @@
+====== Topik ini belum tersedia ======
+
+Belum ada artikel di halaman ini. Anda dapat membuat tulisan-tulisan baru di halaman ini dengan menekan tombol "Buat Halaman Baru" (lihat dibagian bawah...!)
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/norev.txt
new file mode 100644
index 000000000..5244f8303
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/norev.txt
@@ -0,0 +1,4 @@
+====== Revisi tidak tersedia ======
+
+Revisi yang diinginkan tidak ada. Gunakan tombol ''Revisi Lama'' untuk menampilkan daftar revisi lama dari dokumen ini.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/preview.txt
new file mode 100644
index 000000000..1621946b1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/preview.txt
@@ -0,0 +1,4 @@
+====== Preview ======
+
+Ini adalah preview tentang bagimana tulisan Anda akan ditampilkan. Ingat: tulisan ini **belum disimpan**!
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/pwconfirm.txt
new file mode 100644
index 000000000..19131ee47
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/pwconfirm.txt
@@ -0,0 +1,13 @@
+Hai @FULLNAME@!
+
+Seseorang telah meminta password baru untuk @TITLE@ Anda login ke @DOKUWIKIURL@
+
+Jika Anda tidak meminta password baru, mohon mengacuhkan email ini.
+
+Untuk mengkonfirmasi bahwa permintaan tersebut adalah benar dari Anda, silahkan gunakan link dibawah.
+
+@CONFIRM@
+
+--
+Email ini dibuat otomatis oleh DokuWiki
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/read.txt
new file mode 100644
index 000000000..f78c0eb9d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/read.txt
@@ -0,0 +1,2 @@
+Halaman ini hanya bisa dibaca. Anda bisa melihat sumbernya, tetapi tidak diperkenankan untuk mengubah. Hubungi administrator jika menemukan kesalahan pada halaman ini.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/recent.txt
new file mode 100644
index 000000000..f7cf24443
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/recent.txt
@@ -0,0 +1,5 @@
+====== Perubahan ======
+
+Berikut ini adalah halaman-halaman yang baru saja diubah.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/register.txt
new file mode 100644
index 000000000..dd8c578f0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/register.txt
@@ -0,0 +1,4 @@
+====== Mendaftar sebagai anggota baru ======
+
+Isikan semua informasi dibawah ini untuk membuat account baru di wiki ini. Pastikan Anda telah mengisikan **alamat email yang valid**, karena password akan dikirim melalui email ini. Nama login harus sesuai dengan aturan [[doku>pagename|pagename]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/registermail.txt
new file mode 100644
index 000000000..ed8c97ca3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/registermail.txt
@@ -0,0 +1,14 @@
+User baru telah mendaftar. Berikut detailnya:
+
+User name : @NEWUSER@
+Full name : @NEWNAME@
+E-mail : @NEWEMAIL@
+
+Date : @DATE@
+Browser : @BROWSER@
+IP-Address : @IPADDRESS@
+Hostname : @HOSTNAME@
+
+--
+Email ini dibuat otomatis oleh DokuWIki
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/resendpwd.txt
new file mode 100644
index 000000000..276b2928f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/resendpwd.txt
@@ -0,0 +1,3 @@
+====== Kirim Password Baru ======
+
+Masukkan nama user Anda pada form dibawah untuk permintaan perubahan password account Anda di Wiki ini. Link konfirmasi akan dikirimkan melalui alamat email Anda sewaktu registrasi.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/revisions.txt
new file mode 100644
index 000000000..d82b2735f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/revisions.txt
@@ -0,0 +1,4 @@
+====== Revisi Lama ======
+
+Ini adalah revisi-revisi lama dari dokumen ini. Untuk mengaktifkan kembali revisi lama, pilih dokumen revisi, kemudikan tekan "Edit halaman ini" lalu Simpan.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/searchpage.txt
new file mode 100644
index 000000000..c47bed7dc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/searchpage.txt
@@ -0,0 +1,5 @@
+====== Pencarian ======
+
+Anda dapat menemukan hasil pencarian dibawah ini. Jika Anda tidak menemukan apa yang diinginkan, Anda dapat membuat halaman baru, dengan nama sesuai "text pencarian" Anda. Gunakan tombol "Edit halaman ini".
+
+===== Hasil Pencarian ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/showrev.txt
new file mode 100644
index 000000000..27f0c6421
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/showrev.txt
@@ -0,0 +1,2 @@
+**Ini adalah dokumen versi lama!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/stopwords.txt
new file mode 100644
index 000000000..73713c838
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/stopwords.txt
@@ -0,0 +1,37 @@
+# This is a list of words the indexer ignores, one word per line
+# When you edit this file be sure to use UNIX line endings (single newline)
+# No need to include words shorter than 3 chars - these are ignored anyway
+# This list is based upon the ones found at http://www.ranks.nl/stopwords/
+about
+are
+and
+you
+your
+them
+their
+com
+for
+from
+into
+how
+that
+the
+this
+was
+what
+when
+where
+who
+will
+with
+und
+the
+www
+yang
+dan
+adalah
+untuk
+lalu
+maka
+kemudian
+jika
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/subscribermail.txt
new file mode 100644
index 000000000..dc04df29a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/subscribermail.txt
@@ -0,0 +1,17 @@
+Halo Dunia!
+
+Halaman @PAGE@ di @TITLE@ wiki telah berubah.
+Perubahannya adalah sebagai berikut:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Untuk unsubscribe dari halaman ini, silahkan login ke wiki di
+@DOKUWIKIURL@ lalu buka
+@NEWPAGE@
+dan pilih 'Unsubscribe Changes'.
+
+--
+Email ini telah digenerate oleh DokuWiki
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/updateprofile.txt
new file mode 100644
index 000000000..b7f71a198
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/updateprofile.txt
@@ -0,0 +1,3 @@
+====== Ubah Profil Account Anda ======
+
+Anda hanya perlu mengisikan field yang ingin Anda ubah. Anda tidak dapat mengubah username Anda.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/uploadmail.txt
new file mode 100644
index 000000000..dc628fc11
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/uploadmail.txt
@@ -0,0 +1,14 @@
+Sebuah file telah diupload di DokuWiki Anda. Berikut detailnya:
+
+File : @MEDIA@
+Date : @DATE@
+Browser : @BROWSER@
+IP-Address : @IPADDRESS@
+Hostname : @HOSTNAME@
+Size : @SIZE@
+MIME Type : @MIME@
+User : @USER@
+
+--
+Email ini dibuat otomatis oleh DokuWiki
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/wordblock.txt
new file mode 100644
index 000000000..1e40ce381
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/wordblock.txt
@@ -0,0 +1,4 @@
+====== SPAM blocked ======
+
+Maaf, tulisan Anda **tidak disimpan** karena terdapat satu atau lebih kata-kata yang **tabu**. Jika Anda mencoba melakukan SPAM wiki ini -- Bangsat lu! Tetapi, jika Anda pikir ini adalah kesalahan sistem, harap hubungi administrator wiki ini.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/is/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/is/adminplugins.txt
new file mode 100644
index 000000000..ce7b9d390
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/is/adminplugins.txt
@@ -0,0 +1 @@
+===== Aðrar viðbætur ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/is/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/is/diff.txt
new file mode 100644
index 000000000..a6d246ad7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/is/diff.txt
@@ -0,0 +1,3 @@
+===== Breytingar =====
+
+Hér sést hvað hefur breyst á milli útgáfna. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/is/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/is/lang.php
new file mode 100644
index 000000000..ba1ab2c04
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/is/lang.php
@@ -0,0 +1,196 @@
+<?php
+/**
+ * is language file
+ *
+ * This file was initially built by fetching translations from other
+ * Wiki projects. See the @url lines below. Additional translations
+ * and fixes where done for DokuWiki by the people mentioned in the
+ * lines starting with @author
+ *
+ * @url http://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/languages/messages/MessagesIs.php?view=co
+ * @author Hrannar Baldursson <hrannar.baldursson@gmail.com>
+ * @author Ólafur Gunnlaugsson <oli@audiotools.com>
+ * @author Erik Bjørn Pedersen <erik.pedersen@shaw.ca>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '„';
+$lang['doublequoteclosing'] = '“';
+$lang['singlequoteopening'] = '‚';
+$lang['singlequoteclosing'] = '‘';
+$lang['apostrophe'] = '\'';
+$lang['btn_edit'] = 'Breyta þessari síðu';
+$lang['btn_source'] = 'Skoða wikikóða';
+$lang['btn_show'] = 'Sýna síðu';
+$lang['btn_create'] = 'Búa til þessa síðu';
+$lang['btn_search'] = 'Leit';
+$lang['btn_save'] = 'Vista';
+$lang['btn_preview'] = 'Forskoða';
+$lang['btn_top'] = 'Efst á síðu';
+$lang['btn_newer'] = '<< nýrra';
+$lang['btn_older'] = 'eldra >>';
+$lang['btn_revs'] = 'breytingaskrá';
+$lang['btn_recent'] = 'Nýlegar breytingar';
+$lang['btn_upload'] = 'Hlaða upp';
+$lang['btn_cancel'] = 'Hætta við';
+$lang['btn_index'] = 'Atriðaskrá';
+$lang['btn_secedit'] = 'Breyta';
+$lang['btn_login'] = 'Innskrá';
+$lang['btn_logout'] = 'Útskrá';
+$lang['btn_admin'] = 'Stjórnandi';
+$lang['btn_update'] = 'Uppfæra';
+$lang['btn_delete'] = 'Eyða';
+$lang['btn_back'] = 'Til baka';
+$lang['btn_backlink'] = 'Hvað tengist hingað';
+$lang['btn_backtomedia'] = 'Aftur til miðlaskrá';
+$lang['btn_subscribe'] = 'Vakta';
+$lang['btn_unsubscribe'] = 'Afvakta';
+$lang['btn_subscribens'] = 'Vakta breytingar á nafnrými';
+$lang['btn_unsubscribens'] = 'Afvakta breytingar á nafnrými';
+$lang['btn_profile'] = 'Uppfæra notanda';
+$lang['btn_reset'] = 'Endurstilla';
+$lang['btn_resendpwd'] = 'Senda nýtt aðgangsorð með tölvupósti';
+$lang['btn_draft'] = 'Breyta uppkasti';
+$lang['btn_recover'] = 'Endurheimta uppkast';
+$lang['btn_draftdel'] = 'Eyða uppkasti';
+$lang['btn_revert'] = 'Endurheimta';
+$lang['loggedinas'] = 'Innskráning sem';
+$lang['user'] = 'Notendanafn';
+$lang['pass'] = 'Aðgangsorð';
+$lang['newpass'] = 'Nýtt aðgangsorð';
+$lang['oldpass'] = 'Staðfesta núverandi (gamla) aðgangsorðið';
+$lang['passchk'] = 'Aðgangsorð (aftur)';
+$lang['remember'] = 'Muna.';
+$lang['fullname'] = 'Fullt nafn þitt*';
+$lang['email'] = 'Tölvupóstfangið þitt*';
+$lang['register'] = 'Skráning';
+$lang['profile'] = 'Notendastillingar';
+$lang['badlogin'] = 'Því miður, notandanafn eða aðgangsorð var rangur.';
+$lang['minoredit'] = 'Minniháttar breyting';
+$lang['draftdate'] = 'Uppkast vistað sjálfkrafa';
+$lang['nosecedit'] = 'Síðunni var breytt á meðan, upplýsingar um svæðið voru úreltar og öll síðan því endurhlaðin.';
+$lang['regmissing'] = 'Afsakið, en þú verður að fylla út í allar eyður.';
+$lang['reguexists'] = 'Afsakið, notandi með þessu nafni er þegar skráður inn.';
+$lang['regsuccess'] = 'Notandi hefur verið búinn til og aðgangsorð sent í tölvupósti.';
+$lang['regsuccess2'] = 'Notandi hefur verið búinn til.';
+$lang['regmailfail'] = 'Það lítur út fyrir villu við sendingu aðgangsorðs. Vinsamlegast hafðu samband við stjórnanda.';
+$lang['regbadmail'] = 'Uppgefinn tölvupóstur virðist ógildur - teljir þú þetta vera villu, hafðu þá samband við stjórnanda.';
+$lang['regbadpass'] = 'Aðgangsorðin tvö eru ekki eins, vinsamlegast reyndu aftur.';
+$lang['regpwmail'] = 'DokuWiki aðgangsorðið þitt';
+$lang['reghere'] = 'Ertu ekki með reikning? Skráðu þig';
+$lang['profna'] = 'Þessi wiki leyfir ekki breytingar á notendaupplýsingum';
+$lang['profnochange'] = 'Enga breytingar vistaðar';
+$lang['profnoempty'] = 'Það er ekki leyfilegt að skilja nafn og póstfang eftir óútfyllt';
+$lang['profchanged'] = 'Notendaupplýsingum breytt';
+$lang['pwdforget'] = 'Gleymt aðgangsorð? Fáðu nýtt';
+$lang['resendna'] = 'Þessi wiki styður ekki endursendingar aðgangsorðs';
+$lang['resendpwd'] = 'Senda nýtt aðgangsorð fyrir';
+$lang['resendpwdmissing'] = 'Afsakið, þú verður að út eyðublaðið allt';
+$lang['resendpwdnouser'] = 'Afsakið, notandi finnst ekki.';
+$lang['resendpwdbadauth'] = 'Afsakið, þessi sannvottunorð er ekki gild. Gakktu úr skugga um að þú notaðir að ljúka staðfesting hlekkur.';
+$lang['resendpwdconfirm'] = 'Staðfesting hlekkur hefur verið send með tölvupósti.';
+$lang['resendpwdsuccess'] = 'Nýja aðgangsorðið hefur verið sent með tölvupósti.';
+$lang['license'] = 'Nema annað sé tekið fram, efni á þessari wiki er leyfð undir eftirfarandi leyfi:';
+$lang['licenseok'] = 'Athugið: Með því að breyta þessari síðu samþykkir þú að leyfisveitandi efni undir eftirfarandi leyfi:';
+$lang['searchmedia'] = 'Leit skrárheiti:';
+$lang['searchmedia_in'] = 'Leit í %s';
+$lang['txt_upload'] = 'Veldu skrá til innhleðslu';
+$lang['txt_filename'] = 'Innhlaða sem (valfrjálst)';
+$lang['txt_overwrt'] = 'Skrifa yfir skrá sem þegar er til';
+$lang['lockedby'] = 'Læstur af';
+$lang['lockexpire'] = 'Læsing rennur út eftir';
+$lang['nothingfound'] = 'Ekkert fannst';
+$lang['mediaselect'] = 'Miðlaskrá';
+$lang['fileupload'] = 'Hlaða inn miðlaskrá';
+$lang['uploadsucc'] = 'Innhlaðning tókst';
+$lang['uploadfail'] = 'Villa í innhlaðningu';
+$lang['uploadwrong'] = 'Innhleðslu neitað. Skrár með þessari endingu eru ekki leyfðar.';
+$lang['uploadexist'] = 'Skrá var þegar til staðar.';
+$lang['uploadbadcontent'] = 'Innhlaðið efni var ekki við að %s skrárendingu.';
+$lang['uploadspam'] = 'Þessi innhlaðning er útilokuð vegna ruslpósts svarturlisti.';
+$lang['uploadxss'] = 'Þessi innhlaðning er útilokuð vegna hugsanlega skaðlegum efni.';
+$lang['uploadsize'] = 'Innhlaðið skrá var of stór. (Hámark eru %s)';
+$lang['deletesucc'] = 'Skrá %s hefur verið eytt.';
+$lang['namespaces'] = 'Nafnrýmar';
+$lang['mediafiles'] = 'Tiltækar skrár í';
+$lang['js']['searchmedia'] = 'Leita að skrám';
+$lang['js']['hidedetails'] = 'Fela upplýsingar';
+$lang['js']['linkwiz'] = 'Tengill-leiðsagnarforrit';
+$lang['js']['linkto'] = 'Tengja';
+$lang['js']['del_confirm'] = 'à örugglega að eyða valdar skrár?';
+$lang['mediaview'] = 'Sjá upprunalega skrá';
+$lang['mediaroot'] = 'rót';
+$lang['mediaextchange'] = 'Skrárending var breytt úr .%s til .%s!';
+$lang['reference'] = 'Tilvísanir til';
+$lang['ref_inuse'] = 'Ekki hægt að eyða skráin, því það er enn notað af eftirfarandi síðum:';
+$lang['ref_hidden'] = 'Sumar tilvísanir eru að síður sem þú hefur ekki leyfi til að lesa';
+$lang['hits'] = 'Samsvör';
+$lang['quickhits'] = 'Samsvörun síðunöfn';
+$lang['toc'] = 'Efnisyfirlit';
+$lang['current'] = 'nú';
+$lang['yours'] = 'Þín útgáfa';
+$lang['diff'] = 'Sýna ágreiningur til núverandi endurskoðun';
+$lang['diff2'] = 'Sýna ágreiningur meðal valið endurskoðun';
+$lang['line'] = 'Lína';
+$lang['breadcrumb'] = 'Snefill';
+$lang['youarehere'] = 'Þú ert hér';
+$lang['lastmod'] = 'Síðast breytt';
+$lang['by'] = 'af';
+$lang['deleted'] = 'eytt';
+$lang['created'] = 'myndað';
+$lang['restored'] = 'Breytt aftur til fyrri útgáfu';
+$lang['external_edit'] = 'utanaðkomandi breyta';
+$lang['summary'] = 'Forskoða';
+$lang['noflash'] = 'Það þarf <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash viðbót</a> til að sýna sumt efnið á þessari síðu';
+$lang['download'] = 'Hlaða niður til kóðabút';
+$lang['mail_newpage'] = 'síðu bætt við:';
+$lang['mail_changed'] = 'síðu breytt:';
+$lang['mail_new_user'] = 'nýr notandi:';
+$lang['mail_upload'] = 'Innhlaðið skrá:';
+$lang['qb_bold'] = 'Feitletraður texti';
+$lang['qb_italic'] = 'Skáletraður texti';
+$lang['qb_underl'] = 'Undirstrikaður texti';
+$lang['qb_code'] = 'Kóðatraður texti';
+$lang['qb_strike'] = 'Yfirstrikaður texti';
+$lang['qb_h1'] = 'Fyrsta stigs fyrirsögn';
+$lang['qb_h2'] = 'Annars stigs fyrirsögn';
+$lang['qb_h3'] = 'Þriðja stigs fyrirsögn';
+$lang['qb_h4'] = 'Fjórða stigs fyrirsögn';
+$lang['qb_h5'] = 'Fimmta stigs fyrirsögn';
+$lang['qb_h'] = 'Fyrirsögn';
+$lang['qb_hs'] = 'Veldu fyrirsögn';
+$lang['qb_hplus'] = 'Hærra stigs fyrirsögn';
+$lang['qb_hminus'] = 'Lægri stigs fyrirsögn';
+$lang['qb_hequal'] = 'Sama stigs fyrirsögn';
+$lang['qb_link'] = 'Innri tengill';
+$lang['qb_extlink'] = 'Ytri tengill (muna að setja http:// á undan)';
+$lang['qb_hr'] = 'Lárétt lína (notist sparlega)';
+$lang['qb_ol'] = 'Númeraðaðan listatriði';
+$lang['qb_ul'] = 'Ónúmeraðaðan listatriði';
+$lang['qb_media'] = 'Bæta inn myndum og öðrum skrám';
+$lang['qb_sig'] = 'Undirskrift þín auk tímasetningu';
+$lang['qb_smileys'] = 'Broskallar';
+$lang['qb_chars'] = 'Sértækir stafir';
+$lang['admin_register'] = 'Setja nýjan notenda inn';
+$lang['metaedit'] = 'Breyta lýsigögnum';
+$lang['metasaveerr'] = 'Vistun lýsigagna mistókst';
+$lang['metasaveok'] = 'Lýsigögn vistuð';
+$lang['img_backto'] = 'Aftur til';
+$lang['img_title'] = 'Heiti';
+$lang['img_caption'] = 'Skýringartexti';
+$lang['img_date'] = 'Dagsetning';
+$lang['img_fname'] = 'Skrárheiti';
+$lang['img_fsize'] = 'Stærð';
+$lang['img_artist'] = 'Myndsmiður';
+$lang['img_copyr'] = 'Útgáfuréttur';
+$lang['img_format'] = 'Forsnið';
+$lang['img_camera'] = 'Myndavél';
+$lang['img_keywords'] = 'Lykilorðir';
+$lang['i_retry'] = 'Reyna aftur';
+$lang['mu_gridsize'] = 'Stærð';
+$lang['mu_toobig'] = 'of stór';
+$lang['mu_ready'] = 'tilbúin til upphleðslu';
+$lang['mu_done'] = 'lokið';
+$lang['mu_fail'] = 'mistókst';
+$lang['mu_info'] = 'Skrár innhlaðnar.';
+$lang['mu_lasterr'] = 'Síðasta villa:';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/is/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/is/login.txt
new file mode 100644
index 000000000..81e7e5e32
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/is/login.txt
@@ -0,0 +1,3 @@
+===== Innskráning =====
+
+Þú ert ekki skráður inn! Skráuðu þig inn hér að neðan. Athugaðu að vafrinn sem að þú notar verður að styðja móttöku smákaka. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/is/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/is/recent.txt
new file mode 100644
index 000000000..7d3cf5720
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/is/recent.txt
@@ -0,0 +1,3 @@
+===== Nýlegar Breytingar =====
+
+Eftirfarandi síðum hefur nýlega verið breytt. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/is/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/is/resendpwd.txt
new file mode 100644
index 000000000..b847b1d4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/is/resendpwd.txt
@@ -0,0 +1,3 @@
+====== Senda nýtt aðgangsorð ======
+
+Vinsamlegast sláðu inn notendanafn þitt í formið hér fyrir neðan til að biðja um nýtt aðgangsorð fyrir reikninginn þinn í þessu wiki. A staðfesting hlekkur verður sendast á skráð netfang. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/is/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/is/subscribermail.txt
new file mode 100644
index 000000000..57e5faf86
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/is/subscribermail.txt
@@ -0,0 +1,23 @@
+Hæ
+
+@PAGE@ síðan í @TITLE@ hefur breyst.
+Hér eru breytingarnar:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Dagsetning : @DATE@
+Notandi : @USER@
+Samantekt : @SUMMARY@
+Eldri útgáfa: @OLDPAGE@
+Ný útgáfa: @NEWPAGE@
+
+Ef þú vilt ekki lengur fá tilkynningar um breytingar á síðum, skráðu þig þá inn á
+@DOKUWIKIURL@, heimsóttu síðan
+@NEWPAGE@
+og afskráðu þig af tilkynningum fyrir síður og/ eða rými fyrir heiti.
+
+--
+Pósturinn var myndaður af DokuWiki að
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/admin.txt
new file mode 100644
index 000000000..95a611edc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/admin.txt
@@ -0,0 +1,4 @@
+====== Amministrazione ======
+
+Qui sotto puoi trovare una lista delle possibili azioni amministrative attualmente disponibili in Dokuwiki.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/adminplugins.txt
new file mode 100644
index 000000000..6a5a30573
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/adminplugins.txt
@@ -0,0 +1 @@
+===== Plugin addizionali ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/backlinks.txt
new file mode 100644
index 000000000..452019db5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/backlinks.txt
@@ -0,0 +1,4 @@
+====== Puntano qui ======
+
+Questa è una lista delle pagine che sembrano avere un collegamento alla pagina corrente.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/conflict.txt
new file mode 100644
index 000000000..44789a365
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/conflict.txt
@@ -0,0 +1,6 @@
+====== Esiste una versione più recente ======
+
+Esiste una versione più recente del documento che hai modificato. Questo può accadere quando un altro utente ha già modificato il documento durante le tue modifiche.
+
+Esamina le differenze mostrate di seguito, quindi decidi quale versione mantenere. Se scegli ''salva'', la tua versione verrà salvata. Clicca su ''annulla'' per mantenere la versione corrente.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/denied.txt
new file mode 100644
index 000000000..e87eeeada
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/denied.txt
@@ -0,0 +1,5 @@
+====== Accesso negato ======
+
+Non hai i diritti per continuare. Hai forse dimenticato di effettuare il login?
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/diff.txt
new file mode 100644
index 000000000..6b48ed44e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/diff.txt
@@ -0,0 +1,4 @@
+====== Differenze ======
+
+Queste sono le differenze tra la revisione selezionata e la versione corrente della pagina.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/draft.txt
new file mode 100644
index 000000000..9932786ba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/draft.txt
@@ -0,0 +1,6 @@
+====== Trovata Bozza ======
+
+La tua ultima sessione di modifica su questa pagina non è stata completata correttamente. DokuWiki ha salvato in automatico una bozza durante il tuo lavoro, che puoi ora utilizzare per continuare le tue modifiche. Di seguito puoi trovare i dati che sono stati salvati dalla tua ultima sessione.
+
+Decidi se vuoi //recuperare// la sessione di modifica, //cancellare// la bozza salavata in automatico oppure //annullare// le modifiche.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/edit.txt
new file mode 100644
index 000000000..fdfaf463e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/edit.txt
@@ -0,0 +1,2 @@
+Modifica la pagina e clicca su ''Salva''. Vedi [[wiki:syntax]] per la sintassi riconosciuta da Wiki. Modifica questa pagina solo se puoi **apportare dei miglioramenti**. Se vuoi solo fare degli esperimenti ed imparare come fare i primi passi usa [[playground:playground]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/editrev.txt
new file mode 100644
index 000000000..0a309fa24
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/editrev.txt
@@ -0,0 +1,2 @@
+**Hai caricato una precedente revisione del documento!** Se salvi questa pagina creerai una nuova versione con questi dati.
+---- \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/index.txt
new file mode 100644
index 000000000..8d5f00409
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/index.txt
@@ -0,0 +1,4 @@
+====== Indice ======
+
+Questo è un indice di tutte le pagine disponibili ordinate per [[doku>namespaces|categoria]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/install.html
new file mode 100644
index 000000000..5bc4b0dc2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/install.html
@@ -0,0 +1,24 @@
+<p>Questa pagina ti assisterà durante la prima installazione e configurazione di
+<a href="http://dokuwiki.org">Dokuwiki</a>. Ulteriori informazioni sulla
+procedura di installazione sono reperibili nella
+<a href="http://dokuwiki.org/installer">pagina di documentazione</a>.</p>
+
+<p>DokuWiki utilizza normali file per la memorizzazione di pagine wiki ed altre
+informazioni associate a tali pagine (es. immagini, indici per la ricerca, vecchie
+revisioni, ecc.). Per poter operare correttamente DokuWiki
+<strong>deve</strong> accedere in scrittura alle directory che contengono tali
+file. La procedura di installazione non è in grado di impostare i permessi sulle directory. Questo
+deve normalmente essere fatto direttamente da linea di comando oppure, se stai usando un servizio di hosting,
+attraverso FTP o dal pannello di controllo del servizio di hosting (es. cPanel).</p>
+
+<p>Questa procedura di installazione imposterà la configurazione di DokuWiki per l'uso di
+<acronym title="lista controllo accessi">ACL</acronym>, che consente all'amministratore di
+collegarsi e accedere al menu di amministrazione di DokuWiki per installare plugin, gestire
+utenti, gestire gli accessi alle pagine wiki e modificare le impostazioni del wiki.
+Non è necessario per il funzionamento di DokuWiki, ma renderà Dokuwiki più facile
+da amministrare.</p>
+
+<p>Gli utenti esperti o con particolari esigenze di installazione dovrebbero far riferimento ai
+seguenti link per i dettagli riguardanti
+<a href="http://dokuwiki.org/install">istruzioni per l'installazione</a>
+and <a href="http://dokuwiki.org/config">parametri di configurazione</a>.</p>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/lang.php
new file mode 100644
index 000000000..827967d0f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/lang.php
@@ -0,0 +1,240 @@
+<?php
+/**
+ * Italian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Giorgio Vecchiocattivi <giorgio@vecchio.it>
+ * @author Roberto Bolli <http://www.rbnet.it/>
+ * @author Silvia Sargentoni <polinnia@tin.it>
+ * @author Diego Pierotto <ita.translations@tiscali.it>
+ * @author Diego Pierotto ita.translations@tiscali.it
+ * @author ita.translations@tiscali.it
+ * @author Lorenzo Breda <lbreda@gmail.com>
+ * @author snarchio@alice.it
+ * @author robocap <robocap1@gmail.com>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '“';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '‘';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = '’';
+$lang['btn_edit'] = 'Modifica questa pagina';
+$lang['btn_source'] = 'Mostra sorgente';
+$lang['btn_show'] = 'Mostra pagina';
+$lang['btn_create'] = 'Crea questa pagina';
+$lang['btn_search'] = 'Cerca';
+$lang['btn_save'] = 'Salva';
+$lang['btn_preview'] = 'Anteprima';
+$lang['btn_top'] = 'Torna su';
+$lang['btn_newer'] = '<< più recenti';
+$lang['btn_older'] = 'meno recenti >>';
+$lang['btn_revs'] = 'Revisioni precedenti';
+$lang['btn_recent'] = 'Ultime modifiche';
+$lang['btn_upload'] = 'Invia file';
+$lang['btn_cancel'] = 'Annulla';
+$lang['btn_index'] = 'Indice';
+$lang['btn_secedit'] = 'Modifica';
+$lang['btn_login'] = 'Entra';
+$lang['btn_logout'] = 'Esci';
+$lang['btn_admin'] = 'Amministrazione';
+$lang['btn_update'] = 'Aggiorna';
+$lang['btn_delete'] = 'Cancella';
+$lang['btn_back'] = 'Indietro';
+$lang['btn_backlink'] = 'Backlinks';
+$lang['btn_backtomedia'] = 'Torna alla selezione file';
+$lang['btn_subscribe'] = 'Sottoscrivi modifiche';
+$lang['btn_unsubscribe'] = 'Cancella sottoscrizione';
+$lang['btn_subscribens'] = 'Sottoscrivi modifiche della categoria';
+$lang['btn_unsubscribens'] = 'Cancella sottoscrizione modifiche della categoria';
+$lang['btn_profile'] = 'Aggiorna profilo';
+$lang['btn_reset'] = 'Annulla';
+$lang['btn_resendpwd'] = 'Invia nuova password';
+$lang['btn_draft'] = 'Modifica bozza';
+$lang['btn_recover'] = 'Ripristina bozza';
+$lang['btn_draftdel'] = 'Cancella bozza';
+$lang['loggedinas'] = 'Collegato come';
+$lang['user'] = 'Nome utente';
+$lang['pass'] = 'Password';
+$lang['newpass'] = 'Nuova password';
+$lang['oldpass'] = 'Conferma password corrente';
+$lang['passchk'] = 'Ripeti password';
+$lang['remember'] = 'Ricorda automaticamente';
+$lang['fullname'] = 'Nome completo';
+$lang['email'] = 'E-Mail';
+$lang['register'] = 'Registrazione';
+$lang['profile'] = 'Profilo utente';
+$lang['badlogin'] = 'Il nome utente o la password non sono validi.';
+$lang['minoredit'] = 'Modifiche minori';
+$lang['draftdate'] = 'Bozza salvata in automatico il';
+$lang['nosecedit'] = 'La pagina nel frattempo è cambiata, la sezione info è scaduta, caricata invece la pagina intera.';
+$lang['regmissing'] = 'Devi riempire tutti i campi.';
+$lang['reguexists'] = 'Il nome utente inserito esiste già .';
+$lang['regsuccess'] = 'L\'utente è stato creato. La password è stata spedita via e-mail.';
+$lang['regsuccess2'] = 'L\'utente è stato creato.';
+$lang['regmailfail'] = 'Sembra che ci sia stato un errore nell\'invio della e-mail. Per favore contatta il tuo amministratore!';
+$lang['regbadmail'] = 'L\'indirizzo e-mail fornito sembra essere non valido - se pensi che ci sia un errore contatta il tuo amministratore';
+$lang['regbadpass'] = 'Le due password inserite non coincidono, prova di nuovo.';
+$lang['regpwmail'] = 'La tua password DokuWiki';
+$lang['reghere'] = 'Non hai ancora un accesso? Registrati qui.';
+$lang['profna'] = 'Questo wiki non supporta modifiche al profilo';
+$lang['profnochange'] = 'Nessuna modifica, niente da aggiornare.';
+$lang['profnoempty'] = 'Nome o indirizzo email vuoti non sono consentiti.';
+$lang['profchanged'] = 'Aggiornamento del profilo utente riuscito.';
+$lang['pwdforget'] = 'Hai dimenticato la password? Richiedine una nuova';
+$lang['resendna'] = 'Questo wiki non supporta l\'invio di nuove password.';
+$lang['resendpwd'] = 'Invia nuova password per';
+$lang['resendpwdmissing'] = 'Devi riempire tutti i campi.';
+$lang['resendpwdnouser'] = 'Impossibile trovare questo utente nel database.';
+$lang['resendpwdbadauth'] = 'Spiacente, questo codice di autorizzazione non è valido. Assicurati di aver usato il link completo di conferma.';
+$lang['resendpwdconfirm'] = 'Un link di conferma è stato spedito via email.';
+$lang['resendpwdsuccess'] = 'La nuova password è stata spedita via email.';
+$lang['license'] = 'Ad eccezione da dove è diversamente indicato, il contenuto di questo wiki è sotto la seguente licenza:';
+$lang['licenseok'] = 'Nota: modificando questa pagina accetti di rilasciare il contenuto sotto la seguente licenza:';
+$lang['txt_upload'] = 'Seleziona un file da caricare';
+$lang['txt_filename'] = 'Inserisci un "wikiname" (opzionale)';
+$lang['txt_overwrt'] = 'Sovrascrivi file esistente';
+$lang['lockedby'] = 'Attualmente bloccato da';
+$lang['lockexpire'] = 'Il blocco scade alle';
+$lang['willexpire'] = 'Il tuo blocco su questa pagina scadrà tra circa un minuto.\nPer evitare incongruenze usa il pulsante di anteprima per prolungare il periodo di blocco.';
+$lang['notsavedyet'] = 'Le modifiche non salvate andranno perse.\nContinuare?';
+$lang['rssfailed'] = 'Si è verificato un errore cercando questo feed: ';
+$lang['nothingfound'] = 'Nessun risultato trovato.';
+$lang['mediaselect'] = 'Selezione dei file';
+$lang['fileupload'] = 'File caricato';
+$lang['uploadsucc'] = 'Invio riuscito';
+$lang['uploadfail'] = 'Invio fallito. Contatta l\'amministratore.';
+$lang['uploadwrong'] = 'Invio rifiutato. Questa estensione di file non è ammessa';
+$lang['uploadexist'] = 'Il file esiste già . Invio annullato.';
+$lang['uploadbadcontent'] = 'Il contenuto caricato non corrisponde all\'estensione del file %s.';
+$lang['uploadspam'] = 'Il caricamento è stato bloccato dalla lista nera di spam.';
+$lang['uploadxss'] = 'Il caricamento è stato bloccato perchè il contenuto potrebbe essere malizioso.';
+$lang['uploadsize'] = 'Il file caricato è troppo grande. (massimo %s)';
+$lang['deletesucc'] = 'Il file "%s" è stato cancellato.';
+$lang['deletefail'] = '"%s" non può essere cancellato - verifica i permessi.';
+$lang['mediainuse'] = 'Il file "%s" non è stato cancellato - è ancora in uso.';
+$lang['namespaces'] = 'Categorie';
+$lang['mediafiles'] = 'File disponibili in';
+$lang['js']['keepopen'] = 'Tieni la finestra aperta durante la selezione';
+$lang['js']['hidedetails'] = 'Nascondi Dettagli';
+$lang['js']['nosmblinks'] = 'I collegamenti con le risorse condivise di Windows funzionano solo con Microsoft Internet Explorer.
+Puoi fare un copia/incolla di questo collegamento.';
+$lang['js']['mu_btn'] = 'Carica più di un file alla volta';
+$lang['mediausage'] = 'Usa la seguente sintassi per riferirti a questo file:';
+$lang['mediaview'] = 'Mostra file originale';
+$lang['mediaroot'] = 'directory principale';
+$lang['mediaupload'] = 'Carica un file nella categoria corrente. Per creare sottocategorie, falle precedere al nome del file nella casella "Carica come", separandole da due punti (:).';
+$lang['mediaextchange'] = 'Estensione del file modificata da .%s a .%s!';
+$lang['reference'] = 'Riferimenti a';
+$lang['ref_inuse'] = 'Il file non può essere cancellato in quanto è ancora utilizzato dalle seguenti pagine:';
+$lang['ref_hidden'] = 'Sono presenti alcuni riferimenti a pagine per le quali non hai i permessi di lettura';
+$lang['hits'] = 'Occorrenze trovate';
+$lang['quickhits'] = 'Pagine trovate';
+$lang['toc'] = 'Indice';
+$lang['current'] = 'versione corrente';
+$lang['yours'] = 'la tua versione';
+$lang['diff'] = 'differenze con la versione attuale';
+$lang['diff2'] = 'differenze tra le versioni selezionate';
+$lang['line'] = 'Linea';
+$lang['breadcrumb'] = 'Traccia';
+$lang['youarehere'] = 'Ti trovi qui';
+$lang['lastmod'] = 'Ultima modifica';
+$lang['by'] = 'da';
+$lang['deleted'] = 'cancellata';
+$lang['created'] = 'creata';
+$lang['restored'] = 'versione precedente ripristinata';
+$lang['external_edit'] = 'modifica esterna';
+$lang['summary'] = 'Oggetto della modifica';
+$lang['noflash'] = 'E\' necessario <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> per visualizzare questo contenuto.';
+$lang['download'] = 'Scarica lo "snippet"';
+$lang['mail_newpage'] = 'pagina aggiunta:';
+$lang['mail_changed'] = 'pagina modificata:';
+$lang['mail_new_user'] = 'Nuovo utente:';
+$lang['mail_upload'] = 'file caricato:';
+$lang['qb_bold'] = 'Grassetto';
+$lang['qb_italic'] = 'Corsivo';
+$lang['qb_underl'] = 'Sottolineato';
+$lang['qb_code'] = 'Codice';
+$lang['qb_strike'] = 'Barrato';
+$lang['qb_h1'] = 'Intestazione di livello 1';
+$lang['qb_h2'] = 'Intestazione di livello 2';
+$lang['qb_h3'] = 'Intestazione di livello 3';
+$lang['qb_h4'] = 'Intestazione di livello 4';
+$lang['qb_h5'] = 'Intestazione di livello 5';
+$lang['qb_h'] = 'Titolo';
+$lang['qb_hs'] = 'Seleziona il titolo';
+$lang['qb_hplus'] = 'Titolo superiore';
+$lang['qb_hminus'] = 'Titolo inferiore';
+$lang['qb_hequal'] = 'Titolo dello stesso livello';
+$lang['qb_link'] = 'Collegamento interno';
+$lang['qb_extlink'] = 'Collegamento esterno';
+$lang['qb_hr'] = 'Riga orizzontale';
+$lang['qb_ol'] = 'Elenco numerato';
+$lang['qb_ul'] = 'Elenco puntato';
+$lang['qb_media'] = 'Inserisci immagini o altri file';
+$lang['qb_sig'] = 'Inserisci la firma';
+$lang['qb_smileys'] = 'Smiley';
+$lang['qb_chars'] = 'Caratteri speciali';
+$lang['js']['del_confirm'] = 'Cancellare questa voce?';
+$lang['admin_register'] = 'Aggiungi un nuovo utente';
+$lang['metaedit'] = 'Modifica metadati';
+$lang['metasaveerr'] = 'Scrittura metadati fallita';
+$lang['metasaveok'] = 'Metadati salvati';
+$lang['img_backto'] = 'Torna a';
+$lang['img_title'] = 'Titolo';
+$lang['img_caption'] = 'Descrizione';
+$lang['img_date'] = 'Data';
+$lang['img_fname'] = 'Nome File';
+$lang['img_fsize'] = 'Dimensione';
+$lang['img_artist'] = 'Autore';
+$lang['img_copyr'] = 'Copyright';
+$lang['img_format'] = 'Formato';
+$lang['img_camera'] = 'Camera';
+$lang['img_keywords'] = 'Parole chiave';
+$lang['subscribe_success'] = '%s è stato aggiunto alla lista di sottoscrizione per la pagina %s';
+$lang['subscribe_error'] = 'Si è verificato un errore durante l\'aggiunta di %s alla lista di sottoscrizione per la pagina %s';
+$lang['subscribe_noaddress'] = 'Non c\'è alcun indirizzo associato con il tuo profilo, non puoi sottoscriverti ad alcuna lista';
+$lang['unsubscribe_success'] = '%s è stato rimosso dalla lista di sottoscrizione per la pagina %s';
+$lang['unsubscribe_error'] = 'Si è verificato un errore durante la rimozione di %s dalla lista di sottoscrizione per la pagina %s';
+$lang['authmodfailed'] = 'La configurazione dell\'autenticazione non è corretta. Per favore informa l\'amministratore di questo Wiki.';
+$lang['authtempfail'] = 'L\'autenticazione è temporaneamente non disponibile. Se questa situazione persiste, per favore informa l\'amministratore di questo Wiki.';
+$lang['i_chooselang'] = 'Scegli la lingua';
+$lang['i_installer'] = 'Installazione DokuWiki';
+$lang['i_wikiname'] = 'Nome Wiki';
+$lang['i_enableacl'] = 'Abilita ACL (consigliato)';
+$lang['i_superuser'] = 'Amministratore';
+$lang['i_problems'] = 'Si sono verificati problemi durante l\'installazione, indicati di seguito. Non è possibile continuare finché non saranno risolti.';
+$lang['i_modified'] = 'Per motivi di sicurezza questa procedura funziona solamente con un\'installazione Dokuwiki nuova e non modificata.
+ Dovresti ri-estrarre i file dal pacchetto scaricato oppure consultare tutte le
+ <a href="http://dokuwiki.org/install">istruzioni per l\'installazione di Dokuwiki</a>';
+$lang['i_funcna'] = 'La funzione PHP <code>%s</code> non è disponibile. Forse il tuo provider l\'ha disabilitata per qualche motivo?';
+$lang['i_phpver'] = 'La versione di PHP <code>%s</code> è inferiore a quella richiesta <code>%s</code>. Devi aggiornare l\'installazione di PHP.';
+$lang['i_permfail'] = 'DokuWiki non può scrivere <code>%s</code>. E\' necessario correggere i permessi per questa directory!';
+$lang['i_confexists'] = '<code>%s</code> esiste già';
+$lang['i_writeerr'] = 'Impossibile creare <code>%s</code>. E\' necessario verificare i permessi della directory/file e creare il file manualmente.';
+$lang['i_badhash'] = 'dokuwiki.php (hash=<code>%s</code>) non riconosciuto o modificato';
+$lang['i_badval'] = '<code>%s</code> - valore vuoto o non valido';
+$lang['i_success'] = 'La configurazione è stata completata correttamente. E\' ora possibile cancellare il file install.php. Continuare con
+ <a href="doku.php">il nuovo DokuWiki</a>.';
+$lang['i_failure'] = 'Si sono verificati errori durante la scrittura dei file di configurazione. Potrebbe essere necessario correggerli manualmente prima di poter utilizzare <a href="doku.php">il nuovo DokuWiki</a>.';
+$lang['i_policy'] = 'Policy di accesso iniziali';
+$lang['i_pol0'] = 'Wiki Aperto (lettura, scrittura, caricamento file per tutti)';
+$lang['i_pol1'] = 'Wiki Pubblico (lettura per tutti, scrittura e caricamento file per gli utenti registrati)';
+$lang['i_pol2'] = 'Wiki Chiuso (lettura, scrittura, caricamento file solamente per gli utenti registrati)';
+$lang['i_retry'] = 'Riprova';
+$lang['mu_intro'] = 'Qui si possono caricare più di un file alla volta. Cliccare su "Sfoglia..." per aggiungere i file in coda. Cliccare "Carica" quando si è pronti.';
+$lang['mu_gridname'] = 'Nome del file';
+$lang['mu_gridsize'] = 'Dimensione';
+$lang['mu_gridstat'] = 'Stato';
+$lang['mu_namespace'] = 'Namespace';
+$lang['mu_browse'] = 'Sfoglia...';
+$lang['mu_toobig'] = 'troppo grande';
+$lang['mu_ready'] = 'pronto per l\'upload';
+$lang['mu_done'] = 'completo';
+$lang['mu_fail'] = 'fallito';
+$lang['mu_authfail'] = 'sessione scaduta';
+$lang['mu_progress'] = '@PCT@% caricato';
+$lang['mu_filetypes'] = 'Tipi di file permessi';
+$lang['mu_info'] = 'file caricati.';
+$lang['recent_global'] = 'Stai attualmente vedendo le modifiche dentro l\'area <b>%s</b>. Puoi anche <a href="%s">vedere le modifiche recenti dell\'intero wiki</a>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/locked.txt
new file mode 100644
index 000000000..a655ffcd3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/locked.txt
@@ -0,0 +1,3 @@
+====== Pagina bloccata ======
+
+Questa pagina è attualmente bloccata poiché un altro utente sta effettuando delle modifiche. Devi attendere che l'utente concluda le modifiche o che il blocco scada.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/login.txt
new file mode 100644
index 000000000..6487c8537
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/login.txt
@@ -0,0 +1,4 @@
+====== Login ======
+
+Non sei ancora collegato! Inserisci il tuo nome utente e la tua password per autenticarti. E' necessario che il tuo browser abbia i cookie abilitati.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/mailtext.txt
new file mode 100644
index 000000000..ee6e958b9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/mailtext.txt
@@ -0,0 +1,16 @@
+Una pagina su DokuWiki è stata aggiunta o modificata. Questi sono i dettagli:
+
+Data : @DATE@
+Browser : @BROWSER@
+Indirizzo IP : @IPADDRESS@
+Nome host : @HOSTNAME@
+Vecchia revisione : @OLDPAGE@
+Nuova revisione : @NEWPAGE@
+Oggetto della modifica : @SUMMARY@
+
+@DIFF@
+
+
+--
+Questa e-mail è stata generata da DokuWiki su
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/newpage.txt
new file mode 100644
index 000000000..d41601cfb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/newpage.txt
@@ -0,0 +1,3 @@
+====== Questo argomento non esiste ancora ======
+
+Hai seguito un collegamento ad un argomento che non è ancora stato creato. Se vuoi puoi crearlo tu stesso usando il pulsante ''Crea questa pagina''.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/norev.txt
new file mode 100644
index 000000000..91ef751f9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/norev.txt
@@ -0,0 +1,3 @@
+====== Revisione inesistente ======
+
+La revisione richiesta non esiste. Usa il pulsante ''Revisioni precedenti'' per ottenere una lista di revisioni precedenti di questo documento.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/preview.txt
new file mode 100644
index 000000000..c3cf35246
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/preview.txt
@@ -0,0 +1,5 @@
+====== Anteprima ======
+
+Questa è un'anteprima di come apparirà il tuo testo. Attenzione: **la pagina non è ancora stata salvata**!.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/pwconfirm.txt
new file mode 100644
index 000000000..5437d077c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/pwconfirm.txt
@@ -0,0 +1,15 @@
+Ciao @FULLNAME@!
+
+Qualcuno ha richiesto una nuova password per il tuo @TITLE@
+login su @DOKUWIKIURL@
+
+Se non hai richiesto tu la nuova password ignora questa email.
+
+Per confermare che la richiesta è stata realmente inviata da te per favore usa il
+seguente link.
+
+@CONFIRM@
+
+--
+Questa mail è stata generata da DokuWiki su
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/read.txt
new file mode 100644
index 000000000..0a7245404
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/read.txt
@@ -0,0 +1 @@
+Questa pagina è in sola lettura. Puoi visualizzare il sorgente, ma non puoi modificarlo. Contatta l'amministratore se pensi che ci sia un errore.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/recent.txt
new file mode 100644
index 000000000..4c29a9d52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/recent.txt
@@ -0,0 +1,4 @@
+====== Ultime modifiche ======
+
+Queste sono le ultime pagine modificate.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/register.txt
new file mode 100644
index 000000000..973aead78
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/register.txt
@@ -0,0 +1,4 @@
+====== Registrazione nuovo utente ======
+
+Riempi tutte le informazioni seguenti per creare un nuovo account in questo wiki. Assicurati di inserire un **indirizzo e-mail valido** - la tua nuova password ti sarà inviata con un messaggio di posta elettronica. La login dovrebbe essere un [[doku>pagename|nome di pagina]] valido.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/registermail.txt
new file mode 100644
index 000000000..5a9f89344
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/registermail.txt
@@ -0,0 +1,14 @@
+Un nuovo utente è stato registrato. Ecco i dettagli:
+
+Nome utente : @NEWUSER@
+Nome completo : @NEWNAME@
+E-Mail : @NEWEMAIL@
+
+Data : @DATE@
+Browser : @BROWSER@
+Indirizzo IP : @IPADDRESS@
+Nome macchina : @HOSTNAME@
+
+--
+Questa mail è stata generata da DokuWiki su
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/resendpwd.txt
new file mode 100644
index 000000000..fc3f09414
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/resendpwd.txt
@@ -0,0 +1,3 @@
+====== Invia nuova password ======
+
+Riempi tutte le informazioni seguenti per ottenere una nuova password per il tuo account su questo wiki. La nuova password sarà inviata al tuo indirizzo di posta elettronica registrato. Il nome utente deve essere il tuo nome utente di questo wiki.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/revisions.txt
new file mode 100644
index 000000000..984b4a068
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/revisions.txt
@@ -0,0 +1,3 @@
+====== Versione precedente ======
+
+Queste sono le precedenti versioni del documento corrente. Per ripristinare una versione precedente, seleziona la versione, modificala usando il pulsante ''Modifica questa pagina'' e salvala.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/searchpage.txt
new file mode 100644
index 000000000..60a019c3e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/searchpage.txt
@@ -0,0 +1,5 @@
+====== Cerca ======
+
+Questi sono i risultati della ricerca. Se non hai trovato quello che cercavi, puoi creare una nuova pagina con questo titolo usando il pulsante ''Crea questa pagina''.
+
+===== Risultati =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/showrev.txt
new file mode 100644
index 000000000..7c184f206
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/showrev.txt
@@ -0,0 +1,2 @@
+**Questa è una vecchia versione del documento!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/stopwords.txt
new file mode 100644
index 000000000..a6aa1cfc6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/stopwords.txt
@@ -0,0 +1,119 @@
+# This is a list of words the indexer ignores, one word per line
+# When you edit this file be sure to use UNIX line endings (single newline)
+# No need to include words shorter than 3 chars - these are ignored anyway
+# This list is based upon the ones found at http://www.ranks.nl/stopwords/
+adesso
+alla
+allo
+allora
+altre
+altri
+altro
+anche
+ancora
+avere
+aveva
+avevano
+ben
+buono
+che
+chi
+cinque
+comprare
+con
+consecutivi
+consecutivo
+cosa
+cui
+del
+della
+dello
+dentro
+deve
+devo
+doppio
+due
+ecco
+fare
+fine
+fino
+fra
+gente
+giu
+hai
+hanno
+indietro
+invece
+lavoro
+lei
+loro
+lui
+lungo
+meglio
+molta
+molti
+molto
+nei
+nella
+noi
+nome
+nostro
+nove
+nuovi
+nuovo
+oltre
+ora
+otto
+peggio
+pero
+persone
+piu
+poco
+primo
+promesso
+qua
+quarto
+quasi
+quattro
+quello
+questo
+qui
+quindi
+quinto
+rispetto
+sara
+secondo
+sei
+sembra
+sembrava
+senza
+sette
+sia
+siamo
+siete
+solo
+sono
+sopra
+soprattutto
+sotto
+stati
+stato
+stesso
+su
+subito
+sul
+sulla
+tanto
+tempo
+terzo
+tra
+tre
+triplo
+ultimo
+una
+uno
+va
+vai
+voi
+volte
+vostro
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/subscribermail.txt
new file mode 100644
index 000000000..a211ef2e5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/subscribermail.txt
@@ -0,0 +1,18 @@
+Ciao!
+
+La pagina @PAGE@ di @TITLE@ wiki è stata aggiornata.
+Qui sotto sono elencate le modifiche apportate:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Per cancellare la tua sottoscrizione alla lista di controllo
+per questa pagina collegati al wiki
+@DOKUWIKIURL@ poi spostati su
+@NEWPAGE@
+e seleziona 'Cancella sottoscrizione'.
+
+--
+Questa email è stata generata da DokuWiki su
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/updateprofile.txt
new file mode 100644
index 000000000..71157a2ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/updateprofile.txt
@@ -0,0 +1,3 @@
+====== Aggiorna il profilo del tuo account ======
+
+E' necessario compilare solo i campi che desideri modificare. Non puoi cambiare il tuo nome utente.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/uploadmail.txt
new file mode 100644
index 000000000..56cebc6b1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/uploadmail.txt
@@ -0,0 +1,14 @@
+Un file è stato caricato sul tuo DokuWiki. Seguono i dettagli:
+
+File : @MEDIA@
+Data : @DATE@
+Browser : @BROWSER@
+Indirizzo IP : @IPADDRESS@
+Hostname : @HOSTNAME@
+Dimensione : @SIZE@
+MIME Type : @MIME@
+Utente : @USER@
+
+--
+Questa email è stata generata dal DokuWiki di
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/wordblock.txt
new file mode 100644
index 000000000..510d6521d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/wordblock.txt
@@ -0,0 +1,4 @@
+====== Modifica bloccata ======
+
+Le tue modifiche **non sono state salvate** perché contengono una o più parole vietate. Se hai cercato di spammare il Wiki -- bambino cattivo! Se pensi che sia un errore contatta l'amministratore di questo Wiki.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/admin.txt
new file mode 100644
index 000000000..b0c6d34ab
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/admin.txt
@@ -0,0 +1,4 @@
+====== 管ç†è€…メニュー ======
+
+DokuWikiã§ç®¡ç†ã§ãるタスクã®ä¸€è¦§ã§ã™
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/adminplugins.txt
new file mode 100644
index 000000000..1708bbb3c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/adminplugins.txt
@@ -0,0 +1 @@
+===== 追加プラグイン ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/backlinks.txt
new file mode 100644
index 000000000..69644b79d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/backlinks.txt
@@ -0,0 +1,4 @@
+====== ãƒãƒƒã‚¯ãƒªãƒ³ã‚¯ ======
+
+å…ˆã»ã©ã®æ–‡æ›¸ã«ãƒªãƒ³ã‚¯ã—ã¦ã„る文書ã®ãƒªã‚¹ãƒˆã§ã™ã€‚
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/conflict.txt
new file mode 100644
index 000000000..099b5989a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/conflict.txt
@@ -0,0 +1,6 @@
+====== æ–°ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒå­˜åœ¨ã—ã¾ã™ ======
+
+編集中ã«ä»–ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒã“ã®æ–‡æ›¸ã‚’æ›´æ–°ã—ãŸãŸã‚ã€æ–°ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®æ–‡æ›¸ãŒå­˜åœ¨ã—ã¾ã™ã€‚
+
+以下ã«æ–‡æ›¸é–“ã®å·®åˆ†ã‚’表示ã™ã‚‹ã®ã§ã€ã©ã¡ã‚‰ã‹ã®æ–‡æ›¸ã‚’é¸æŠžã—ã¦ãã ã•ã„。''ä¿å­˜'' ã‚’é¸æŠžã™ã‚‹ã¨ç¾åœ¨ç·¨é›†ä¸­ã®æ–‡æ›¸ãŒä¿å­˜ã•ã‚Œã¾ã™ã€‚''キャンセル'' ã¯ç·¨é›†ä¸­ã®æ–‡æ›¸ãŒç ´æ£„ã•ã‚Œã¾ã™ã€‚
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/denied.txt
new file mode 100644
index 000000000..d170aebe4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/denied.txt
@@ -0,0 +1,4 @@
+====== アクセスãŒæ‹’å¦ã•ã‚Œã¾ã—㟠======
+
+実行ã™ã‚‹æ¨©é™ãŒã‚ã‚Šã¾ã›ã‚“。ログインã•ã‚Œã¦ã„ã‚‹ã‹ç¢ºèªã—ã¦ãã ã•ã„。
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/diff.txt
new file mode 100644
index 000000000..fe5f6b165
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/diff.txt
@@ -0,0 +1,4 @@
+====== 差分 ======
+
+ã“ã®æ–‡æ›¸ã®ç¾åœ¨ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¨é¸æŠžã—ãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®å·®åˆ†ã‚’表示ã—ã¾ã™ã€‚
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/draft.txt
new file mode 100644
index 000000000..af3160b8c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/draft.txt
@@ -0,0 +1,6 @@
+====== ドラフトファイルãŒå­˜åœ¨ã—ã¾ã™ ======
+
+ã“ã®ãƒšãƒ¼ã‚¸ã«å¯¾ã™ã‚‹æœ€å¾Œã®ç·¨é›†ã¯æ­£ã—ã終了ã•ã‚Œã¾ã›ã‚“ã§ã—ãŸã€‚ ãã®ç·¨é›†ä½œæ¥­ã‚’引ã続ãè¡Œãˆã‚‹ã‚ˆã†ã€ä»¥ä¸‹ã«ç¤ºã™å†…容ãŒè‡ªå‹•çš„ã«ä¿å­˜ã•ã‚Œã¦ã„ã¾ã™ã€‚
+
+ã“ã®è‡ªå‹•çš„ã«ä¿å­˜ã•ã‚ŒãŸç·¨é›†å†…容ã«å¯¾ã—ã¦ã€//復元ã™ã‚‹//ã€//削除ã™ã‚‹//〠もã—ãã¯ã“ã®ãƒšãƒ¼ã‚¸ã®ç·¨é›†ã‚’//キャンセル//ã—ã¦ä¸‹ã•ã„。
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/edit.txt
new file mode 100644
index 000000000..e7a8f9720
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/edit.txt
@@ -0,0 +1,4 @@
+編集ã—ã¦''ä¿å­˜''をクリックã—ã¦ãã ã•ã„。Wikiã®æ§‹æ–‡ã«ã¤ã„ã¦ã¯ [[wiki:syntax]] ã‚’å‚考ã«ã—ã¦ãã ã•ã„
+
+当然ã®ã“ã¨ã§ã™ãŒã€ã“ã®æ–‡æ›¸ã®è³ªã‚’ **å‘上** ã•ã›ã‚‹å ´åˆã®ã¿ç·¨é›†ã—ã¦ãã ã•ã„。もã—編集方法や構文を練習ã—ãŸã„ã®ã§ã‚れ㰠[[playground:playground]] を利用ã—ã¦ãã ã•ã„。
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/editrev.txt
new file mode 100644
index 000000000..7c984131c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/editrev.txt
@@ -0,0 +1,2 @@
+**å¤ã„リビジョンã®æ–‡æ›¸ã‚’é–‹ã„ã¦ã„ã¾ã™** ã‚‚ã—ã“ã®ã¾ã¾ä¿å­˜ã™ã‚‹ã¨ã€ã“ã®æ–‡æ›¸ãŒæœ€æ–°ã¨ãªã‚Šã¾ã™ã€‚
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/index.txt
new file mode 100644
index 000000000..b5fbac97d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/index.txt
@@ -0,0 +1,4 @@
+====== 索引 ======
+
+[[doku>namespaces|åå‰ç©ºé–“]] ã«åŸºã¥ãã€å…¨ã¦ã®æ–‡æ›¸ã®ç´¢å¼•ã§ã™ã€‚
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/install.html
new file mode 100644
index 000000000..7439d27e1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/install.html
@@ -0,0 +1,14 @@
+<p>ã“ã®ãƒšãƒ¼ã‚¸ã¯ã€<a href="http://dokuwiki.org">Dokuwiki</a>ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã¨åˆæœŸè¨­å®šã‚’サãƒãƒ¼ãƒˆã—ã¾ã™ã€‚
+ã“ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ©ãƒ¼ã«é–¢ã™ã‚‹è©³ç´°ã¯ <a href="http://dokuwiki.org/installer">documentation page</a> ã‚’å‚考ã«ã—ã¦ãã ã•ã„。</p>
+
+<p>DokuWikiã¯ã€é€šå¸¸ã®ãƒ•ã‚¡ã‚¤ãƒ«ã«Wikiページã®å†…容ã¨é–¢é€£ã™ã‚‹æƒ…報(例ãˆã°ã€ç”»åƒã€æ¤œç´¢ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã€å¤ã„リビジョンãªã©ï¼‰ã‚’ä¿å­˜ã—ã¾ã™ã€‚
+ãã®ãŸã‚ã€DokuWikiを使用ã™ã‚‹ãŸã‚ã«ã¯ã€ãれらã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’ä¿å­˜ã™ã‚‹ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã«æ›¸ãè¾¼ã¿ã®æ¨©é™ãŒ<strong>å¿…ãš</strong>å¿…è¦ã¨ãªã‚Šã¾ã™ã€‚
+ã“ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ©ãƒ¼ã§ã¯ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã®æ¨©é™ã®å¤‰æ›´ã¯è¡Œãˆãªã„ãŸã‚ã€ã‚³ãƒžãƒ³ãƒ‰ã‚·ã‚§ãƒ«ã§æ¨©é™ã®å¤‰æ›´ã‚’直接行ã†ã‹ã€
+ホスティングサービスを利用ã—ã¦ã„ã‚‹å ´åˆã¯ãã®ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ãƒ‘ãƒãƒ«ã‚‚ã—ãã¯FTPを通ã—ã¦ã€æ¨©é™ã®å¤‰æ›´ã‚’è¡Œã£ã¦ãã ã•ã„。</p>
+
+<p>DokuWikiã¯ã€ãƒ—ラグインã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã€Wikiページã¸ã®ã‚¢ã‚¯ã‚»ã‚¹åˆ¶é™ã€è¨­å®šã®å¤‰æ›´ã‚’管ç†ã™ã‚‹æ©Ÿèƒ½ã‚’有ã—ã¦ãŠã‚Šã€
+ãã®æ©Ÿèƒ½ã‚’有効ã«ã™ã‚‹ãŸã‚ã«å¿…è¦ãª <acronym title="access control list">ACL</acronym> ã®è¨­å®šãŒã€ã“ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ©ãƒ¼ã«ã‚ˆã£ã¦è¡Œã‚ã‚Œã¾ã™ã€‚
+ã“ã®ç®¡ç†æ©Ÿèƒ½ã¯ã€DokuWikiを使用ã™ã‚‹ä¸Šã§å¿…è¦ã§ã¯ã‚ã‚Šã¾ã›ã‚“ãŒã€DokuWikiã®ç®¡ç†ã‚’ç°¡å˜ã«ã—ã¦ãã‚Œã¾ã™ã€‚</p>
+
+<p>従æ¥ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’使用ã—ã¦ã„るユーザーや特別ãªã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—ãŒå¿…è¦ãªå ´åˆã¯ã€æ¬¡ã®ãƒªãƒ³ã‚¯å…ˆã‚’å‚考ã«ã—ã¦ä¸‹ã•ã„
+(<a href="http://dokuwiki.org/install">installation instructions</a>, <a href="http://dokuwiki.org/config">configuration settings</a>)。</p>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/lang.php
new file mode 100644
index 000000000..1f6681af1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/lang.php
@@ -0,0 +1,249 @@
+<?php
+/**
+ * japanese language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Yuji Takenaka <webmaster@davilin.com>
+ * @author Ikuo Obataya <i.obataya@gmail.com>
+ * @author Daniel Dupriest <kououken@gmail.com>
+ * @author Kazutaka Miyasaka <kazmiya@gmail.com>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '“';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '‘';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = '’';
+$lang['btn_edit'] = '文書ã®ç·¨é›†';
+$lang['btn_source'] = 'ソースã®è¡¨ç¤º';
+$lang['btn_show'] = '文書ã®è¡¨ç¤º';
+$lang['btn_create'] = '文書ã®ä½œæˆ';
+$lang['btn_search'] = '検索';
+$lang['btn_save'] = 'ä¿å­˜';
+$lang['btn_preview'] = 'プレビュー';
+$lang['btn_top'] = '文書ã®å…ˆé ­ã¸';
+$lang['btn_newer'] = '<< より新ã—ã„';
+$lang['btn_older'] = 'よりå¤ã„ >>';
+$lang['btn_revs'] = '以å‰ã®ãƒªãƒ“ジョン';
+$lang['btn_recent'] = '最近ã®å¤‰æ›´';
+$lang['btn_upload'] = 'アップロード';
+$lang['btn_cancel'] = 'キャンセル';
+$lang['btn_index'] = '索引';
+$lang['btn_secedit'] = '編集';
+$lang['btn_login'] = 'ログイン';
+$lang['btn_logout'] = 'ログアウト';
+$lang['btn_admin'] = '管ç†';
+$lang['btn_update'] = 'æ›´æ–°';
+$lang['btn_delete'] = '削除';
+$lang['btn_back'] = '戻る';
+$lang['btn_backlink'] = 'ãƒãƒƒã‚¯ãƒªãƒ³ã‚¯';
+$lang['btn_backtomedia'] = 'メディアファイルé¸æŠžã«æˆ»ã‚‹';
+$lang['btn_subscribe'] = '変更履歴é…ä¿¡ã®ç™»éŒ²';
+$lang['btn_unsubscribe'] = '変更履歴é…ä¿¡ã®è§£é™¤';
+$lang['btn_subscribens'] = 'åå‰ç©ºé–“変更é…ä¿¡ã®ç™»éŒ²';
+$lang['btn_unsubscribens'] = 'åå‰ç©ºé–“変更é…ä¿¡ã®è§£é™¤';
+$lang['btn_profile'] = 'ユーザー情報ã®æ›´æ–°';
+$lang['btn_reset'] = 'リセット';
+$lang['btn_resendpwd'] = 'パスワードå†ç™ºè¡Œ';
+$lang['btn_draft'] = 'ドラフトを編集';
+$lang['btn_recover'] = 'ドラフトを復元';
+$lang['btn_draftdel'] = 'ドラフトを削除';
+$lang['btn_revert'] = 'å…ƒã«æˆ»ã™';
+$lang['loggedinas'] = 'よã†ã“ã';
+$lang['user'] = 'ユーザーå';
+$lang['pass'] = 'パスワード';
+$lang['newpass'] = 'æ–°ã—ã„パスワード';
+$lang['oldpass'] = 'ç¾åœ¨ã®ãƒ‘スワード';
+$lang['passchk'] = '確èª';
+$lang['remember'] = 'ユーザーåã¨ãƒ‘スワードを記憶ã™ã‚‹';
+$lang['fullname'] = 'フルãƒãƒ¼ãƒ ';
+$lang['email'] = 'メールアドレス';
+$lang['register'] = 'ユーザー登録';
+$lang['profile'] = 'ユーザー情報';
+$lang['badlogin'] = 'ユーザーåã‹ãƒ‘スワードãŒé•ã„ã¾ã™ã€‚';
+$lang['minoredit'] = 'å°å¤‰æ›´';
+$lang['draftdate'] = 'ドラフトä¿å­˜æ—¥æ™‚:';
+$lang['nosecedit'] = 'ページ内容ãŒå¤‰æ›´ã•ã‚Œã¦ã„ã¾ã™ãŒã‚»ã‚¯ã‚·ãƒ§ãƒ³æƒ…å ±ãŒå¤ã„ãŸã‚ã€ä»£ã‚ã‚Šã«ãƒšãƒ¼ã‚¸å…¨ä½“をロードã—ã¾ã—ãŸã€‚';
+$lang['regmissing'] = 'å…¨ã¦ã®é …目を入力ã—ã¦ãã ã•ã„。';
+$lang['reguexists'] = 'ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼åã¯æ—¢ã«å­˜åœ¨ã—ã¦ã„ã¾ã™ã€‚';
+$lang['regsuccess'] = 'æ–°ã—ã„ユーザーãŒä½œæˆã•ã‚Œã¾ã—ãŸã€‚パスワードã¯ç™»éŒ²ã—ãŸãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹å®›ã¦ã«é€ä»˜ã•ã‚Œã¾ã™ã€‚';
+$lang['regsuccess2'] = 'æ–°ã—ã„ユーザーãŒä½œæˆã•ã‚Œã¾ã—ãŸã€‚';
+$lang['regmailfail'] = 'パスワードã®ãƒ¡ãƒ¼ãƒ«é€ä¿¡ã«å¤±æ•—ã—ã¾ã—ãŸã€‚ãŠæ‰‹æ•°ã§ã™ãŒç®¡ç†è€…ã¾ã§é€£çµ¡ã‚’ãŠé¡˜ã„ã—ã¾ã™ã€‚';
+$lang['regbadmail'] = 'メールアドレスãŒæœ‰åŠ¹ã§ã¯ã‚ã‚Šã¾ã›ã‚“。';
+$lang['regbadpass'] = '確èªç”¨ã®ãƒ‘スワードãŒæ­£ã—ãã‚ã‚Šã¾ã›ã‚“。';
+$lang['regpwmail'] = 'ã‚ãªãŸã® DokuWiki パスワード';
+$lang['reghere'] = 'ã”自分用ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’å–ã£ã¦ã¿ã¦ã¯å¦‚何ã§ã™ã‹ï¼Ÿ';
+$lang['profna'] = 'ユーザー情報ã®å¤‰æ›´ã¯å‡ºæ¥ã¾ã›ã‚“';
+$lang['profnochange'] = '変更点ã¯ã‚ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚';
+$lang['profnoempty'] = 'ユーザーåã¨ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’入力ã—ã¦ä¸‹ã•ã„。';
+$lang['profchanged'] = 'ユーザー情報ã¯æ›´æ–°ã•ã‚Œã¾ã—ãŸã€‚';
+$lang['pwdforget'] = 'パスワードをãŠå¿˜ã‚Œã§ã™ã‹ï¼Ÿãƒ‘スワードå†ç™ºè¡Œ';
+$lang['resendna'] = 'パスワードã®å†ç™ºè¡Œã¯å‡ºæ¥ã¾ã›ã‚“。';
+$lang['resendpwd'] = 'æ–°ã—ã„パスワードをé€ä¿¡ã—ã¾ã™ï¼š';
+$lang['resendpwdmissing'] = 'å…¨ã¦ã®é …目を入力ã—ã¦ä¸‹ã•ã„。';
+$lang['resendpwdnouser'] = '入力ã•ã‚ŒãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚';
+$lang['resendpwdbadauth'] = '申ã—訳ã‚ã‚Šã¾ã›ã‚“。ã“ã®ç¢ºèªã‚³ãƒ¼ãƒ‰ã¯æœ‰åŠ¹ã§ã¯ã‚ã‚Šã¾ã›ã‚“。メール内ã«è¨˜è¼‰ã•ã‚ŒãŸãƒªãƒ³ã‚¯ã‚’確èªã—ã¦ãã ã•ã„。';
+$lang['resendpwdconfirm'] = '確èªç”¨ã®ãƒªãƒ³ã‚¯ã‚’å«ã‚“ã ãƒ¡ãƒ¼ãƒ«ã‚’é€ä¿¡ã—ã¾ã—ãŸã€‚';
+$lang['resendpwdsuccess'] = 'æ–°ã—ã„パスワードãŒãƒ¡ãƒ¼ãƒ«ã§é€ä¿¡ã•ã‚Œã¾ã—ãŸã€‚';
+$lang['license'] = '特ã«æ˜Žç¤ºã•ã‚Œã¦ã„ãªã„é™ã‚Šã€æœ¬Wikiã®å†…容ã¯æ¬¡ã®ãƒ©ã‚¤ã‚»ãƒ³ã‚¹ã«å¾“ã„ã¾ã™ï¼š';
+$lang['licenseok'] = '注æ„: 本ページを編集ã™ã‚‹ã“ã¨ã¯ã€ã‚ãªãŸã®ç·¨é›†ã—ãŸå†…容ãŒæ¬¡ã®ãƒ©ã‚¤ã‚»ãƒ³ã‚¹ã«å¾“ã†ã“ã¨ã«åŒæ„ã—ãŸã‚‚ã®ã¨ã¿ãªã—ã¾ã™ï¼š';
+$lang['searchmedia'] = '検索ファイルå:';
+$lang['searchmedia_in'] = '%s 内を検索';
+$lang['txt_upload'] = 'アップロードã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«ã‚’é¸ã‚“ã§ãã ã•ã„。';
+$lang['txt_filename'] = 'åå‰ã‚’変更ã—ã¦ã‚¢ãƒƒãƒ—ロード(オプション)';
+$lang['txt_overwrt'] = '既存ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’上書ã';
+$lang['lockedby'] = 'ã“ã®æ–‡æ›¸ã¯æ¬¡ã®ãƒ¦ãƒ¼ã‚¶ã«ã‚ˆã£ã¦ãƒ­ãƒƒã‚¯ã•ã‚Œã¦ã„ã¾ã™';
+$lang['lockexpire'] = 'ロック期é™ï¼š';
+$lang['willexpire'] = '編集中ã®æ–‡æ›¸ã¯ãƒ­ãƒƒã‚¯æœŸé™ã‚’éŽãŽã‚ˆã†ã¨ã—ã¦ã„ã¾ã™ã€‚ã“ã®ã¾ã¾ãƒ­ãƒƒã‚¯ã™ã‚‹å ´åˆã¯ã€ä¸€åº¦æ–‡æ›¸ã®ç¢ºèªã‚’è¡Œã£ã¦æœŸé™ã‚’リセットã—ã¦ãã ã•ã„。';
+$lang['notsavedyet'] = '変更ã¯ä¿å­˜ã•ã‚Œã¾ã›ã‚“。ã“ã®ã¾ã¾å‡¦ç†ã‚’続ã‘ã¦ã‚ˆã‚ã—ã„ã§ã™ã‹ï¼Ÿ';
+$lang['rssfailed'] = 'RSSã®å–り出ã—ã«å¤±æ•—ã—ã¾ã—ãŸï¼š';
+$lang['nothingfound'] = '該当文書ã¯ã‚ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚';
+$lang['mediaselect'] = 'メディアファイルをé¸æŠž';
+$lang['fileupload'] = 'メディアファイルをアップロード';
+$lang['uploadsucc'] = 'アップロード完了';
+$lang['uploadfail'] = 'アップロードã«å¤±æ•—ã—ã¾ã—ãŸã€‚権é™ãŒã‚ã‚Šã¾ã›ã‚“。';
+$lang['uploadwrong'] = 'アップロードã¯æ‹’å¦ã•ã‚Œã¾ã—ãŸã€‚ã“ã®æ‹¡å¼µå­ã¯è¨±å¯ã•ã‚Œã¦ã„ã¾ã›ã‚“。';
+$lang['uploadexist'] = 'åŒåã®ãƒ•ã‚¡ã‚¤ãƒ«ãŒå­˜åœ¨ã™ã‚‹ãŸã‚ã€ã‚¢ãƒƒãƒ—ロードã§ãã¾ã›ã‚“。';
+$lang['uploadbadcontent'] = 'アップロードã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«ã®å†…容ã¯ã€æ‹¡å¼µå­ %s ã¨ä¸€è‡´ã—ã¾ã›ã‚“。';
+$lang['uploadspam'] = 'スパムブラックリストã«ã‚ˆã‚Šã‚¢ãƒƒãƒ—ロードãŒé®æ–­ã•ã‚Œã¾ã—ãŸã€‚';
+$lang['uploadxss'] = '悪æ„ã®ã‚る内容ã§ã‚ã‚‹å¯èƒ½æ€§ã«ã‚ˆã‚Šã€ã‚¢ãƒƒãƒ—ロードãŒé®æ–­ã•ã‚Œã¾ã—ãŸã€‚';
+$lang['uploadsize'] = 'アップロードã—よã†ã¨ã—ãŸãƒ•ã‚¡ã‚¤ãƒ«ã¯å¤§ãã™ãŽã¾ã™ï¼ˆæœ€å¤§ %s)。';
+$lang['deletesucc'] = 'ファイル "%s" ã¯å‰Šé™¤ã•ã‚Œã¾ã—ãŸã€‚';
+$lang['deletefail'] = 'ファイル "%s" ãŒå‰Šé™¤ã§ãã¾ã›ã‚“。権é™ã‚’確èªã—ã¦ä¸‹ã•ã„。';
+$lang['mediainuse'] = 'ファイル "%s" ã¯ä½¿ç”¨ä¸­ã®ãŸã‚ã€å‰Šé™¤ã•ã‚Œã¾ã›ã‚“ã§ã—ãŸã€‚';
+$lang['namespaces'] = 'åå‰ç©ºé–“';
+$lang['mediafiles'] = '有効ãªãƒ•ã‚¡ã‚¤ãƒ«ï¼š';
+$lang['js']['searchmedia'] = 'ファイル検索';
+$lang['js']['keepopen'] = 'é¸æŠžä¸­ã¯ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’é–‰ã˜ãªã„';
+$lang['js']['hidedetails'] = '詳細をéžè¡¨ç¤º';
+$lang['js']['nosmblinks'] = 'ウィンドウズã®å…±æœ‰ãƒ•ã‚©ãƒ«ãƒ€ã¸ãƒªãƒ³ã‚¯ã¯ Microsoft Internet Explorer ã§ã®ã¿å¯èƒ½ã¨ãªã‚Šã¾ã™ã€‚
+当然ã€ã‚«ãƒƒãƒˆã‚¢ãƒ³ãƒ‰ãƒšãƒ¼ã‚¹ãƒˆãŒä½¿ç”¨ã§ãã¾ã™ã€‚';
+$lang['js']['linkwiz'] = 'リンクウィザード';
+$lang['js']['linkto'] = 'リンク先:';
+$lang['js']['del_confirm'] = 'é¸æŠžã—ãŸé …目を本当ã«å‰Šé™¤ã—ã¾ã™ã‹ï¼Ÿ';
+$lang['js']['mu_btn'] = '複数ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’一度ã«ã‚¢ãƒƒãƒ—ロード';
+$lang['mediausage'] = 'ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’使用ã™ã‚‹ãŸã‚ã«ã¯æ¬¡ã®æ–‡æ³•ã‚’使用ã™ã‚‹ï¼š';
+$lang['mediaview'] = 'オリジナルファイルを閲覧';
+$lang['mediaroot'] = 'ルート';
+$lang['mediaupload'] = 'ファイルをç¾åœ¨ã®åå‰ç©ºé–“ã«ã‚¢ãƒƒãƒ—ロードã—ã¾ã™ã€‚副åå‰ç©ºé–“を使用ã™ã‚‹å ´åˆã«ã¯ã€ãƒ•ã‚¡ã‚¤ãƒ«åã®å‰ã«ã‚³ãƒ­ãƒ³ã§åŒºåˆ‡ã£ã¦è¿½åŠ ã—ã¦ãã ã•ã„。';
+$lang['mediaextchange'] = 'æ‹¡å¼µå­ãŒ .%s ã‹ã‚‰ .%s ã¸å¤‰æ›´ã•ã‚Œã¾ã—ãŸã€‚';
+$lang['reference'] = 'å‚照先';
+$lang['ref_inuse'] = 'ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã¯ã€æ¬¡ã®ãƒšãƒ¼ã‚¸ã§ä½¿ç”¨ä¸­ã®ãŸã‚削除ã§ãã¾ã›ã‚“。';
+$lang['ref_hidden'] = 'ã“ã®ãƒšãƒ¼ã‚¸ã«å­˜åœ¨ã™ã‚‹ã„ãã¤ã‹ã®å‚照先ã¯ã€æ¨©é™ãŒç„¡ã„ãŸã‚読むã“ã¨ãŒã§ãã¾ã›ã‚“。';
+$lang['hits'] = 'ヒット';
+$lang['quickhits'] = 'マッãƒã—ãŸæ–‡æ›¸å';
+$lang['toc'] = '目次';
+$lang['current'] = 'ç¾åœ¨';
+$lang['yours'] = 'ã‚ãªãŸã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³';
+$lang['diff'] = 'ç¾åœ¨ã®ãƒªãƒ“ジョンã¨ã®å·®åˆ†ã‚’表示';
+$lang['diff2'] = 'é¸æŠžã—ãŸãƒªãƒ“ジョン間ã®å·®åˆ†ã‚’表示';
+$lang['line'] = 'ライン';
+$lang['breadcrumb'] = 'トレース';
+$lang['youarehere'] = 'ç¾åœ¨ä½ç½®';
+$lang['lastmod'] = '最終更新';
+$lang['by'] = 'by';
+$lang['deleted'] = '削除';
+$lang['created'] = '作æˆ';
+$lang['restored'] = '以å‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’復元';
+$lang['external_edit'] = '外部編集';
+$lang['summary'] = '編集ã®æ¦‚è¦';
+$lang['noflash'] = 'ã“ã®å†…容を表示ã™ã‚‹ãŸã‚ã«ã¯ <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> ãŒå¿…è¦ã§ã™ã€‚';
+$lang['download'] = 'ã“ã®éƒ¨åˆ†ã‚’ダウンロード';
+$lang['mail_newpage'] = '文書ã®è¿½åŠ ï¼š';
+$lang['mail_changed'] = '文書ã®å¤‰æ›´ï¼š';
+$lang['mail_new_user'] = 'æ–°è¦ãƒ¦ãƒ¼ã‚¶ãƒ¼ï¼š';
+$lang['mail_upload'] = 'ファイルã®ã‚¢ãƒƒãƒ—ロード:';
+$lang['qb_bold'] = '太字';
+$lang['qb_italic'] = '斜体';
+$lang['qb_underl'] = '下線';
+$lang['qb_code'] = 'コード';
+$lang['qb_strike'] = '打消線';
+$lang['qb_h1'] = '第一見出ã—';
+$lang['qb_h2'] = '第二見出ã—';
+$lang['qb_h3'] = '第三見出ã—';
+$lang['qb_h4'] = '第四見出ã—';
+$lang['qb_h5'] = '第五見出ã—';
+$lang['qb_h'] = '見出ã—';
+$lang['qb_hs'] = '見出ã—é¸æŠž';
+$lang['qb_hplus'] = '上ã®éšŽå±¤ã®è¦‹å‡ºã—';
+$lang['qb_hminus'] = '下ã®éšŽå±¤ã®è¦‹å‡ºã—';
+$lang['qb_hequal'] = 'åŒã˜éšŽå±¤ã®è¦‹å‡ºã—';
+$lang['qb_link'] = '内部リンク';
+$lang['qb_extlink'] = '外部リンク';
+$lang['qb_hr'] = '横罫線';
+$lang['qb_ol'] = '記å·ä»˜ãリスト';
+$lang['qb_ul'] = '記å·ãªã—リスト';
+$lang['qb_media'] = 'イメージやファイルã®è¿½åŠ ';
+$lang['qb_sig'] = 'ç½²åã®æŒ¿å…¥';
+$lang['qb_smileys'] = 'スマイリー';
+$lang['qb_chars'] = '特殊文字';
+$lang['upperns'] = '上ã®éšŽå±¤ã®åå‰ç©ºé–“ã¸';
+$lang['admin_register'] = 'æ–°è¦ãƒ¦ãƒ¼ã‚¶ãƒ¼ä½œæˆ';
+$lang['metaedit'] = 'メタデータ編集';
+$lang['metasaveerr'] = 'メタデータã®æ›¸ãè¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸ';
+$lang['metasaveok'] = 'メタデータã¯ä¿å­˜ã•ã‚Œã¾ã—ãŸ';
+$lang['img_backto'] = '戻る';
+$lang['img_title'] = 'タイトル';
+$lang['img_caption'] = '見出ã—';
+$lang['img_date'] = '日付';
+$lang['img_fname'] = 'ファイルå';
+$lang['img_fsize'] = 'サイズ';
+$lang['img_artist'] = '作æˆè€…';
+$lang['img_copyr'] = '著作権';
+$lang['img_format'] = 'フォーマット';
+$lang['img_camera'] = '使用カメラ';
+$lang['img_keywords'] = 'キーワード';
+$lang['subscribe_success'] = '変更履歴é…ä¿¡ã®ç™»éŒ²ãŒå®Œäº†ã—ã¾ã—ãŸã€‚';
+$lang['subscribe_error'] = '変更履歴é…ä¿¡ã®ç™»éŒ²ã«å¤±æ•—ã—ã¾ã—ãŸã€‚';
+$lang['subscribe_noaddress'] = 'ログインã—ã¦ã„ãªã„ãŸã‚ã€å¤‰æ›´å±¥æ­´é…ä¿¡ã«ç™»éŒ²ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。';
+$lang['unsubscribe_success'] = '変更履歴é…ä¿¡ã®è§£é™¤ãŒå®Œäº†ã—ã¾ã—ãŸã€‚';
+$lang['unsubscribe_error'] = '変更履歴é…ä¿¡ã®è§£é™¤ã«å¤±æ•—ã—ã¾ã—ãŸã€‚';
+$lang['authmodfailed'] = 'ユーザーèªè¨¼ã®è¨­å®šãŒæ­£ã—ãã‚ã‚Šã¾ã›ã‚“。Wikiã®ç®¡ç†è€…ã«é€£çµ¡ã—ã¦ä¸‹ã•ã„。';
+$lang['authtempfail'] = 'ユーザーèªè¨¼ãŒä¸€æ™‚çš„ã«ä½¿ç”¨ã§ããªããªã£ã¦ã„ã¾ã™ã€‚ã“ã®çŠ¶æ…‹ãŒç¶šã„ã¦ã„るよã†ã§ã‚ã‚Œã°ã€Wikiã®ç®¡ç†è€…ã«é€£çµ¡ã—ã¦ä¸‹ã•ã„。';
+$lang['i_chooselang'] = '使用言語をé¸æŠžã—ã¦ãã ã•ã„';
+$lang['i_installer'] = 'DokuWiki インストーラー';
+$lang['i_wikiname'] = 'Wikiå';
+$lang['i_enableacl'] = 'ACL(アクセス管ç†ï¼‰ã‚’使用ã™ã‚‹ï¼ˆæŽ¨å¥¨ï¼‰';
+$lang['i_superuser'] = 'スーパーユーザー';
+$lang['i_problems'] = 'å•é¡ŒãŒç™ºè¦‹ã•ã‚Œã¾ã—ãŸã€‚以下ã«ç¤ºã™å•é¡Œã‚’解決ã™ã‚‹ã¾ã§ã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã‚’続行ã§ãã¾ã›ã‚“。';
+$lang['i_modified'] = 'セキュリティã®ç†ç”±ã‹ã‚‰ã€æ–°è¦ã‚‚ã—ãã¯ã‚«ã‚¹ã‚¿ãƒžã‚¤ã‚ºã—ã¦ã„ãªã„ DokuWiki ã«å¯¾ã—ã¦ã®ã¿ã€ã“ã®ã‚¹ã‚¯ãƒªãƒ—トã¯æœ‰åŠ¹ã§ã™ã€‚
+ ダウンロードã—ãŸãƒ‘ッケージをå†è§£å‡ã—ã¦ä½¿ç”¨ã™ã‚‹ã‹ã€
+ <a href="http://dokuwiki.org/install">Dokuwiki インストールガイド</a>ã‚’å‚考ã«ã—ã¦ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¦ãã ã•ã„。';
+$lang['i_funcna'] = 'PHPã®é–¢æ•° <code>%s</code> ãŒä½¿ç”¨ã§ãã¾ã›ã‚“。ホスティング会社ãŒä½•ã‚‰ã‹ã®ç†ç”±ã§ç„¡åŠ¹ã«ã—ã¦ã„ã‚‹æã‚ŒãŒã‚ã‚Šã¾ã™ã€‚';
+$lang['i_phpver'] = 'PHPã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ <code>%s</code> ãŒå¿…è¦ãªãƒãƒ¼ã‚¸ãƒ§ãƒ³ <code>%s</code> より以å‰ã®ã‚‚ã®ã§ã™ã€‚PHPã®ã‚¢ãƒƒãƒ—グレードãŒå¿…è¦ã§ã™ã€‚';
+$lang['i_permfail'] = '<code>%s</code> ã«æ›¸ãè¾¼ã¿ã§ãã¾ã›ã‚“。ã“ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã®æ¨©é™ã‚’確èªã—ã¦ä¸‹ã•ã„。';
+$lang['i_confexists'] = '<code>%s</code> ã¯æ—¢ã«å­˜åœ¨ã—ã¾ã™';
+$lang['i_writeerr'] = '<code>%s</code> を作æˆã§ãã¾ã›ã‚“。ディレクトリã¨ãƒ•ã‚¡ã‚¤ãƒ«ã®æ¨©é™ã‚’確èªã—ã€ãれらを手動ã§ä½œæˆã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚';
+$lang['i_badhash'] = 'dokuwiki.php ãŒèªè­˜ã§ããªã„ã‹ã€ç·¨é›†ã•ã‚Œã¦ã„ã¾ã™ï¼ˆhash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - æ­£ã—ããªã„ã€ã‚‚ã—ãã¯å€¤ãŒç©ºã§ã™';
+$lang['i_success'] = '設定ファイルã¯æ­£ã—ã作æˆã•ã‚Œã¾ã—ãŸã€‚<a href="doku.php">作æˆã—㟠DokuWiki</a>を使用ã™ã‚‹ã«ã¯ install.php を削除ã—ã¦ãã ã•ã„。';
+$lang['i_failure'] = '設定ファイルã®ä½œæˆä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚<a href="doku.php">作æˆã—㟠DokuWiki</a>を使用ã™ã‚‹å‰ã«ã€ãれらã®å•é¡Œã‚’手動ã§ä¿®æ­£ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚';
+$lang['i_policy'] = 'ACLåˆæœŸè¨­å®š';
+$lang['i_pol0'] = 'オープン Wiki(全ã¦ã®äººã«ã€é–²è¦§ãƒ»æ›¸ãè¾¼ã¿ãƒ»ã‚¢ãƒƒãƒ—ロードを許å¯ï¼‰';
+$lang['i_pol1'] = 'パブリック Wiki(閲覧ã¯å…¨ã¦ã®äººãŒå¯èƒ½ã€æ›¸ãè¾¼ã¿ãƒ»ã‚¢ãƒƒãƒ—ロードã¯ç™»éŒ²ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ã¿ï¼‰';
+$lang['i_pol2'] = 'クローズド Wiki (登録ユーザーã«ã®ã¿ä½¿ç”¨ã‚’許å¯)';
+$lang['i_retry'] = 'å†è©¦è¡Œ';
+$lang['mu_intro'] = '複数ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’一度ã«ã‚¢ãƒƒãƒ—ロードã§ãã¾ã™ã€‚ブラウズボタンをクリックã—ã¦ãƒ•ã‚¡ã‚¤ãƒ«ã‚’追加ã—ã¦ãã ã•ã„。追加ã—ãŸã‚‰ã€ã‚¢ãƒƒãƒ—ロードボタンをクリックã—ã¦ãã ã•ã„。';
+$lang['mu_gridname'] = 'ファイルå';
+$lang['mu_gridsize'] = 'サイズ';
+$lang['mu_gridstat'] = 'ステータス';
+$lang['mu_namespace'] = 'åå‰ç©ºé–“';
+$lang['mu_browse'] = 'ブラウズ';
+$lang['mu_toobig'] = '大ãã™ãŽã¾ã™';
+$lang['mu_ready'] = 'アップロードã§ãã¾ã™';
+$lang['mu_done'] = '完了';
+$lang['mu_fail'] = '失敗';
+$lang['mu_authfail'] = 'セッション期é™åˆ‡ã‚Œ';
+$lang['mu_progress'] = '@PCT@% アップロード完了';
+$lang['mu_filetypes'] = '使用ã§ãるファイル形å¼';
+$lang['mu_info'] = 'ファイルアップロード完了';
+$lang['mu_lasterr'] = 'ç›´è¿‘ã®ã‚¨ãƒ©ãƒ¼ï¼š';
+$lang['recent_global'] = 'ç¾åœ¨ã€<b>%s</b> åå‰ç©ºé–“内ã®å¤‰æ›´ç‚¹ã‚’閲覧中ã§ã™ã€‚<a href="%s">Wiki全体ã®æœ€è¿‘ã®å¤‰æ›´ç‚¹ã‚’確èªã™ã‚‹</a>ã“ã¨ã‚‚å¯èƒ½ã§ã™ã€‚';
+$lang['years'] = '%då¹´å‰';
+$lang['months'] = '%dカ月å‰';
+$lang['weeks'] = '%d週間å‰';
+$lang['days'] = '%dæ—¥å‰';
+$lang['hours'] = '%d時間å‰';
+$lang['minutes'] = '%d分å‰';
+$lang['seconds'] = '%d秒å‰';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/locked.txt
new file mode 100644
index 000000000..1c37c93d1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/locked.txt
@@ -0,0 +1,3 @@
+====== 文書ロック中 ======
+
+ã“ã®æ–‡æ›¸ã¯ä»–ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ã‚ˆã£ã¦ãƒ­ãƒƒã‚¯ã•ã‚Œã¦ã„ã¾ã™ã€‚編集ãŒå®Œäº†ã™ã‚‹ã‹ã€ãƒ­ãƒƒã‚¯ã®æœŸé™ãŒåˆ‡ã‚Œã‚‹ã®ã‚’å¾…ã£ã¦ä¸‹ã•ã„。
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/login.txt
new file mode 100644
index 000000000..ef18d378e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/login.txt
@@ -0,0 +1,4 @@
+====== ログイン ======
+
+ユーザーåã¨ãƒ‘スワードを入力ã—ã¦ãƒ­ã‚°ã‚¤ãƒ³ã—ã¦ãã ã•ã„(クッキーを有効ã«ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ï¼‰ã€‚
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/mailtext.txt
new file mode 100644
index 000000000..09688cbb7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/mailtext.txt
@@ -0,0 +1,17 @@
+DokuWiki 内ã®æ–‡æ›¸ãŒè¿½åŠ ã‚‚ã—ãã¯å¤‰æ›´ã•ã‚Œã¾ã—ãŸã€‚詳細ã¯ä»¥ä¸‹ã®é€šã‚Šã§ã™ã€‚
+
+日付 : @DATE@
+ブラウザ : @BROWSER@
+IPアドレス : @IPADDRESS@
+ホストå : @HOSTNAME@
+å‰ãƒªãƒ“ジョン: @OLDPAGE@
+新リビジョン: @NEWPAGE@
+編集ã®ã‚µãƒžãƒª: @SUMMARY@
+ユーザーå : @USER@
+
+@DIFF@
+
+
+--
+ã“ã®ãƒ¡ãƒ¼ãƒ«ã¯æ¬¡ã®DokuWikiより自動的ã«é€ä¿¡ã•ã‚Œã¦ã„ã¾ã™ã€‚
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/newpage.txt
new file mode 100644
index 000000000..d03169f8a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/newpage.txt
@@ -0,0 +1,4 @@
+====== ã“ã®ãƒˆãƒ”ックã«ã¯æ–‡æ›¸ãŒå­˜åœ¨ã—ã¾ã›ã‚“ ======
+
+ã“ã®ãƒˆãƒ”ックã«æ–‡æ›¸ãŒä½œæˆã•ã‚Œã¦ã„ã¾ã›ã‚“。 ã‚‚ã—ã€æ–‡æ›¸ä½œæˆã®æ¨©é™ãŒã‚ã‚‹å ´åˆã¯ã€''文書ã®ä½œæˆ''をクリックã—㦠最åˆã®æ–‡æ›¸ã‚’作æˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/norev.txt
new file mode 100644
index 000000000..48ccde700
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/norev.txt
@@ -0,0 +1,4 @@
+====== リビジョンãŒå­˜åœ¨ã—ã¾ã›ã‚“ ======
+
+指定ã•ã‚ŒãŸãƒªãƒ“ジョン存在ã—ã¾ã›ã‚“。''以å‰ã®ãƒªãƒ“ジョン''をクリックã—ã¦ç¢ºèªã—ã¦ãã ã•ã„。
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/preview.txt
new file mode 100644
index 000000000..ee839cd06
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/preview.txt
@@ -0,0 +1,4 @@
+====== プレビュー ======
+
+編集中ã®æ–‡æ›¸ã®ãƒ—レビューã§ã™ã€‚確èªç”¨ãªã®ã§**ä¿å­˜ã•ã‚Œã¦ã„ãªã„**ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/pwconfirm.txt
new file mode 100644
index 000000000..98ccfcdea
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/pwconfirm.txt
@@ -0,0 +1,13 @@
+ã“ã‚“ã«ã¡ã¯ @FULLNAME@ ã•ã‚“
+
+@TITLE@(@DOKUWIKIURL@)ã«æ–°è¦ãƒ‘スワード発行ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆãŒã‚ã‚Šã¾ã—ãŸã€‚
+
+ã‚‚ã—ã“ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã«è¦šãˆãŒç„¡ã‘ã‚Œã°ã€ã“ã®ãƒ¡ãƒ¼ãƒ«ã¯ç„¡è¦–ã—ã¦ãã ã•ã„。
+
+ã“ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’è¡Œã£ãŸæœ¬äººã§ã‚ã‚Œã°ã€ä»¥ä¸‹ã®ãƒªãƒ³ã‚¯ã‹ã‚‰ä½œæ¥­ã‚’完了ã•ã›ã¦ãã ã•ã„。
+
+@CONFIRM@
+
+--
+ã“ã®ãƒ¡ãƒ¼ãƒ«ã¯æ¬¡ã®DokuWikiより自動的ã«é€ä¿¡ã•ã‚Œã¦ã„ã¾ã™ã€‚
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/read.txt
new file mode 100644
index 000000000..14137cc14
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/read.txt
@@ -0,0 +1,2 @@
+ã“ã®æ–‡æ›¸ã¯èª­å–専用ã§ã™ã€‚文書ã®ã‚½ãƒ¼ã‚¹ã‚’閲覧ã™ã‚‹ã“ã¨ã¯å¯èƒ½ã§ã™ãŒã€å¤‰æ›´ã¯ã§ãã¾ã›ã‚“。もã—変更ã—ãŸã„å ´åˆã¯ç®¡ç†è€…ã«é€£çµ¡ã—ã¦ãã ã•ã„。
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/recent.txt
new file mode 100644
index 000000000..d18fd1bc2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/recent.txt
@@ -0,0 +1,5 @@
+====== 最近ã®å¤‰æ›´ ======
+
+以下ã®æ–‡æ›¸ã¯æœ€è¿‘æ›´æ–°ã•ã‚ŒãŸã‚‚ã®ã§ã™ã€‚
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/register.txt
new file mode 100644
index 000000000..b242d1e88
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/register.txt
@@ -0,0 +1,4 @@
+====== æ–°è¦ãƒ¦ãƒ¼ã‚¶ãƒ¼ç™»éŒ² ======
+
+ã“ã®Wikiã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ç™»éŒ²ã‚’è¡Œã†ãŸã‚ã«ã¯ã€ä»¥ä¸‹ã®æƒ…報を全ã¦å…¥åŠ›ã—ã¦ä¸‹ã•ã„。 ã‚‚ã—以下ã®é …ç›®ã«ãƒ‘スワードãŒå­˜åœ¨ã—ãªã„å ´åˆã€ãƒ‘スワードã¯ãƒ¡ãƒ¼ãƒ«ã«ã¦é€ä¿¡ã•ã‚Œã¾ã™ã®ã§ã€ å¿…ãš**有効ãª**メールアドレスを入力ã—ã¦ãã ã•ã„。 ã¾ãŸã€ãƒ­ã‚°ã‚¤ãƒ³å㯠[[doku>pagename|pagename]] ã«æº–æ‹ ã—ã¦ã„ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/registermail.txt
new file mode 100644
index 000000000..2b272de40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/registermail.txt
@@ -0,0 +1,14 @@
+æ–°ã—ã„ユーザーãŒç™»éŒ²ã•ã‚Œã¾ã—ãŸã€‚ユーザー情報ã¯ä»¥ä¸‹ã®é€šã‚Šã§ã™ã€‚
+
+ユーザーå : @NEWUSER@
+フルãƒãƒ¼ãƒ  : @NEWNAME@
+メールアドレス : @NEWEMAIL@
+
+登録日 : @DATE@
+ブラウザ : @BROWSER@
+IPアドレス : @IPADDRESS@
+ホストå : @HOSTNAME@
+
+--
+ã“ã®ãƒ¡ãƒ¼ãƒ«ã¯æ¬¡ã®DokuWikiより自動的ã«é€ä¿¡ã•ã‚Œã¦ã„ã¾ã™ã€‚
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/resendpwd.txt
new file mode 100644
index 000000000..23dd6ff1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/resendpwd.txt
@@ -0,0 +1,4 @@
+====== パスワードå†ç™ºè¡Œ ======
+
+ã“ã®Wikiã§ä½¿ç”¨ã™ã‚‹æ–°ã—ã„パスワードをリクエストã™ã‚‹ãŸã‚ã«ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼åを入力ã—ã¦ä¸‹ã•ã„。 新パスワード発行リクエストã®ç¢ºèªãƒ¡ãƒ¼ãƒ«ãŒã€ç™»éŒ²ã•ã‚Œã¦ã„るメールアドレスã«é€ä¿¡ã•ã‚Œã¾ã™ã€‚
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/revisions.txt
new file mode 100644
index 000000000..e43731ccd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/revisions.txt
@@ -0,0 +1,4 @@
+====== 以å‰ã®ãƒªãƒ“ジョン ======
+
+以下ã¯ã“ã®æ–‡æ›¸ã®ä»¥å‰ã®ãƒªãƒ“ジョンã§ã™ã€‚復元ã™ã‚‹ã«ã¯''文書ã®ç·¨é›†''をクリックã€ãã®å¾Œä¿å­˜ã—ã¦ãã ã•ã„。
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/searchpage.txt
new file mode 100644
index 000000000..af312728b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/searchpage.txt
@@ -0,0 +1,5 @@
+====== 検索 ======
+
+以下ã«æ¤œç´¢çµæžœã‚’表示ã—ã¾ã™ã€‚ã‚‚ã—ã€æŽ¢ã—ã¦ã„ã‚‹ã‚‚ã®ãŒè¦‹ã¤ã‹ã‚‰ãªã„å ´åˆã€ 検索キーワードã«ã¡ãªã‚“ã åå‰ã®æ–‡æ›¸ã‚’作æˆã‚‚ã—ãã¯ç·¨é›†ã‚’è¡Œã£ã¦ãã ã•ã„。
+
+===== çµæžœ =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/showrev.txt
new file mode 100644
index 000000000..d8ce4784e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/showrev.txt
@@ -0,0 +1,2 @@
+**以å‰ã®ãƒªãƒ“ジョンã®æ–‡æ›¸ã§ã™**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/stopwords.txt
new file mode 100644
index 000000000..628e46ebe
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/stopwords.txt
@@ -0,0 +1,29 @@
+# 以下ã¯ã€ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ä½œæˆæ™‚ã«ç„¡è¦–ã™ã‚‹èªžå¥ã®ãƒªã‚¹ãƒˆã§ã™ã€‚一行ã«ä¸€å˜èªžãšã¤è¨˜å…¥ã—ã¦ãã ã•ã„。
+# UNIXã§ç”¨ã„られる改行コード(LF)を使用ã—ã¦ãã ã•ã„
+# 3文字より短ã„語å¥ã¯è‡ªå‹•çš„ã«ç„¡è¦–ã•ã‚Œã‚‹ã®ã§ã€ãƒªã‚¹ãƒˆã«åŠ ãˆã‚‹å¿…è¦ã¯ã‚ã‚Šã¾ã›ã‚“。
+# ã“ã®ãƒªã‚¹ãƒˆã¯æ¬¡ã®ã‚µã‚¤ãƒˆã‚’ã‚‚ã¨ã«ä½œæˆã•ã‚Œã¦ã„ã¾ã™ï¼ˆhttp://www.ranks.nl/stopwords/)
+about
+are
+and
+you
+your
+them
+their
+com
+for
+from
+into
+how
+that
+the
+this
+was
+what
+when
+where
+who
+will
+with
+und
+the
+www
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/subscribermail.txt
new file mode 100644
index 000000000..d18ffe36d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/subscribermail.txt
@@ -0,0 +1,16 @@
+ã“ã‚“ã«ã¡ã¯
+
+@TITLE@ 内ã®ãƒšãƒ¼ã‚¸ @PAGE@ ã¯å¤‰æ›´ã•ã‚Œã¾ã—ãŸã€‚
+変更内容ã¯ä»¥ä¸‹ã®é€šã‚Šã§ã™ã€‚
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+ページ変更履歴é…信サービスã®è§£é™¤ã¯ã€
+@DOKUWIKIURL@ ã® @NEWPAGE@
+ã«ã‚ã‚‹'変更履歴é…ä¿¡ã®è§£é™¤'ã§è¡Œã†ã“ã¨ãŒã§ãã¾ã™ã€‚
+
+--
+ã“ã®ãƒ¡ãƒ¼ãƒ«ã¯æ¬¡ã®DokuWikiより自動的ã«é€ä¿¡ã•ã‚Œã¦ã„ã¾ã™ã€‚
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/updateprofile.txt
new file mode 100644
index 000000000..e83d92965
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/updateprofile.txt
@@ -0,0 +1,5 @@
+====== アカウント情報更新 ======
+
+変更ã—ãŸã„項目を入力ã—ã¦ä¸‹ã•ã„。ユーザーåã¯å¤‰æ›´ã§ãã¾ã›ã‚“。
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/uploadmail.txt
new file mode 100644
index 000000000..53f30db61
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/uploadmail.txt
@@ -0,0 +1,14 @@
+ãŠä½¿ã„ã®DokuWikiã«ãƒ•ã‚¡ã‚¤ãƒ«ãŒã‚¢ãƒƒãƒ—ロードã•ã‚Œã¾ã—ãŸã€‚詳細ã¯ä»¥ä¸‹ã®é€šã‚Šã§ã™ã€‚
+
+ファイル : @MEDIA@
+日付 : @DATE@
+ブラウザ : @BROWSER@
+IPアドレス : @IPADDRESS@
+ホストå : @HOSTNAME@
+サイズ : @SIZE@
+MIMEタイプ : @MIME@
+ユーザーå : @USER@
+
+--
+ã“ã®ãƒ¡ãƒ¼ãƒ«ã¯æ¬¡ã®DokuWikiより自動的ã«é€ä¿¡ã•ã‚Œã¦ã„ã¾ã™ã€‚
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/wordblock.txt
new file mode 100644
index 000000000..d7edd8765
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/wordblock.txt
@@ -0,0 +1,4 @@
+====== スパム ブロック ======
+
+除外ã™ã‚‹å˜èªžãŒå«ã¾ã‚Œã¦ã„ã‚‹ãŸã‚ã€å¤‰æ›´ã¯**ä¿å­˜ã•ã‚Œã¾ã›ã‚“ã§ã—ãŸ**。 ã‚‚ã—æ„図ã—ãŸã‚¹ãƒ‘ム行為ã§ãªã„ã®ã§ã‚ã‚Œã°ã€ç®¡ç†è€…ã«é€£çµ¡ã—ã¦ãã ã•ã„。
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/admin.txt
new file mode 100644
index 000000000..29338b2e7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/admin.txt
@@ -0,0 +1,3 @@
+====== អ្នកគ្រោង ======
+ážáž¶áž„ក្រោមជាប្រដបប្រដារបស់អ្នកគ្រោង ឌោគូវីគី។
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/backlinks.txt
new file mode 100644
index 000000000..f28068a58
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/backlinks.txt
@@ -0,0 +1,5 @@
+====== ážáŸ’សែដំណរក្រោយ ======
+áž“áŸáŸ‡áž‡áž¶áž‘ំពáŸážšážŠáŸ‚លមានដំណរបណ្ážáž–ីទំពáŸážšáž¥áž¡áž¼ážœáŸ”
+====== Backlinks ======
+This is a list of pages that seem to link back to the current page.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/conflict.txt
new file mode 100644
index 000000000..7b95fda65
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/conflict.txt
@@ -0,0 +1,3 @@
+====== មានបុនរាព្រឹážáŸ’ážáž·ážáŸ’មីៗ ======
+មានបុនរាព្រឹážáŸ’ážáž·ážáŸ’មី
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/denied.txt
new file mode 100644
index 000000000..58b10ee86
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/denied.txt
@@ -0,0 +1,3 @@
+====== បដិសáŸáž’អនុញ្ញាហ======
+សូមទុស អ្នកគ្មានអនុញ្ញាážáž‘ៅបណ្ážáž‘áŸáŸ”
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/edit.txt
new file mode 100644
index 000000000..516ea3779
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/edit.txt
@@ -0,0 +1,3 @@
+កែážáž˜áŸ’រូវទំពáŸážšáž“áŸáŸ‡áž áž¾áž™ ចុច«រក្សាážáž»áž€Â»áŸ” មើល [[wiki:syntax|វាក្យ​សម្ពន្ធ]] ជាកម្នូវីគី។
+សំកែសម្រួលបើអ្នកអាច**ច្នៃចរើន**វា។ បើអ្នកចង់សាកពិសោážáž¢áŸ’វីមួយ សំរៀននៅក្នុង
+[[playground:playground|playground]]។
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/editrev.txt
new file mode 100644
index 000000000..097c1dae1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/editrev.txt
@@ -0,0 +1,2 @@
+**អ្នក ឯក្សារចាស់!** បើអ្នករក្សាវា អ្នកគុង់ážáŸ‚បង្កើហážáŸ’មីជាមួយទិន្ននáŸáž™áž“áŸáŸ‡áŸ”
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/index.txt
new file mode 100644
index 000000000..350050837
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/index.txt
@@ -0,0 +1,2 @@
+====== លិបិក្រម ======
+áž“áŸáŸ‡áž‡áž¶áž›áž·áž”ិក្រមទំពáŸážšáž‘ាំងឡាយបញ្ជាដោយ [[doku>wiki:namespaces|នាមážáž¶áž“]]។
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/lang.php
new file mode 100644
index 000000000..a8257255f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/lang.php
@@ -0,0 +1,230 @@
+<?php
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Anika Henke <henke@cosmocode.de>
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ * @author Ratana Lim <aerorat@yahoo.com>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '«';
+$lang['doublequoteclosing'] = '»';
+$lang['singlequoteopening'] = '‘';//&lsquo;
+$lang['singlequoteclosing'] = '’';//&rsquo;
+$lang['apostrophe'] = '’';//&rsquo;
+
+$lang['btn_edit'] = 'កែទំពáŸážšáž“áŸáŸ‡';
+$lang['btn_source'] = 'បង្ហាងប្រភពទំពáŸážš';
+$lang['btn_show'] = 'បង្ហាងទំពáŸážš';
+$lang['btn_create'] = 'បង្កើážáž‘ំពáŸážšáž“áŸáŸ‡';
+$lang['btn_search'] = 'ស្វែងរក';
+$lang['btn_save'] = 'រក្សាទុក';
+$lang['btn_preview']= 'បង្ហាញ';
+$lang['btn_top'] = 'ទៅលើ';
+$lang['btn_newer'] = '<<ទំពáŸážšáž‘ំនើប';
+$lang['btn_older'] = 'ទំពáŸážšážáŸ’មែសមáŸáž™>>';
+$lang['btn_revs'] = 'ទំពáŸážšáž…ាស់ៗ';
+$lang['btn_recent'] = 'ទំពáŸážšážáŸ’មីៗ';
+$lang['btn_upload'] = 'ដាកលើង';
+$lang['btn_cancel'] = 'បោះបង់';
+$lang['btn_index'] = 'លិបិក្រម';
+$lang['btn_secedit']= 'កែ';
+$lang['btn_login'] = 'កážáŸ‹áž…ូល';
+$lang['btn_logout'] = 'កážáŸ‹áž…áŸáž‰';
+$lang['btn_admin'] = 'អ្នកគ្រប់គ្រង';
+$lang['btn_update'] = 'កែឡើង';
+$lang['btn_delete'] = 'លុបចោល';
+$lang['btn_back'] = 'ážáŸ’រឡប់';
+$lang['btn_backlink'] = 'ážáŸ’សែចំណងក្រោយ';
+$lang['btn_backtomedia'] = 'ទៅប្រពáŸáž“ឯកសាវិញ';
+$lang['btn_subscribe'] = 'ដាក់ដំណឹងផ្លស់ប្ážáž¼ážš';
+$lang['btn_unsubscribe'] = 'ដកដំណឹងផ្លស់ប្ážáž¼ážš';
+$lang['btn_profile'] = 'កែប្រវážáŸ’ážáž·ážšáž¼áž”';
+$lang['btn_reset'] = 'កមណážáŸ‹áž¡áž¾áž„រិញ';
+$lang['btn_resendpwd'] = 'ផ្ញើពាក្សសម្ងាážáŸ‹';
+$lang['btn_draft'] = 'កែគំរោង';
+$lang['btn_recover'] = 'ស្រោះគំរោងឡើង';
+$lang['btn_draftdel'] = 'លុបគំរោង';
+
+$lang['loggedinas'] = 'អ្នកប្រើ';
+$lang['user'] = 'នាមបម្រើ';
+$lang['pass'] = 'ពាក្សសម្ងážáŸ‹';
+$lang['newpass'] = 'ពាក្សសម្ងាážáŸ‹ážáŸ’មី';
+$lang['oldpass'] = 'បន្ជាកពាក្សសម្ងាážáŸ‹';
+$lang['passchk'] = 'ម្ដងទាáž';
+$lang['remember'] = 'ចំណាំážáŸ’ញុំ';
+$lang['fullname'] = 'នាមážáŸ’រគោល';
+$lang['email'] = 'អ៊ីមែល';
+$lang['register'] = 'ចុះឈ្មោះ';//'Register';
+$lang['profile'] = 'ប្រវážáŸ’ážáž·ážšáž¼áž”';// 'User Profile';
+$lang['badlogin'] = 'សុំអាទោស​ នាមបំរើ ឬ ពាក្សសម្ងាážáž˜áž·áž“ážáŸ’រវទáŸáŸ”';
+$lang['minoredit'] = 'កែបបណ្ážáž·áž…បណ្ážáž½áž…';// 'Minor Changes';
+$lang['draftdate'] = 'គំរោង កážáŸ‹ážŸáŸ’ážœáŸáž™áž”្រវážáŸ’áž';
+
+$lang['regmissing'] = 'សុំអាទោស​ អ្នកážáŸ’រវបំពáŸáž‰áž€áŸ’របវាល។';
+$lang['reguexists'] = 'សុំអាទោស​ នាមប្រើនáŸáŸ‡áž˜áž¶áž“រួចហើ។';
+$lang['regsuccess'] = 'អ្នកប្រើបានបង្កើážáž áž¾áž™ និងពាក្សសម្ងាážáž€áŸáž”ានផ្ញើទៀážáŸ”';
+$lang['regsuccess2']= 'អ្នកប្រើបានបង្កើážáž áž¾áž™áŸ”';
+$lang['regmailfail']= 'មើលទៅដុចជាមានកំហុសក្នុង....សុំទាកទងអ្នកក្របក្រង';
+$lang['regbadmail'] = 'អ៊ីមáŸáž›áž¢áŸ’នកសាសáŸáž˜áž·áž“ážáŸ’រូវបញ្ជរ&mdash;បើអ្នកកិážážáž¶áž“áŸáŸ‡áž‡áž¶áž€áŸ†áž áž»ážŸáž”ដិបážáŸ’ážáž· សុំទាកទងអ្នកក្របគ្រោង។';
+$lang['regbadpass'] = 'គូពាក្សសម្ងាážáž˜áž·áž“ដូចគ្នាទ០សមសាកទៀážáŸ”';
+$lang['regpwmail'] = 'ពាក្សសម្ងាážáž¢áŸ’នក';
+$lang['reghere'] = 'អ្នកឥážáž˜áž¶áž“បញ្ជីនាមបម្រើទáŸ? សុំចល់ចុះឈ្មោះធ្វើគណនីសម្របប្រើប្រស';
+
+$lang['profna'] = 'មិនអាចកែ';
+$lang['profnochange'] = 'ឥážáž•áŸ’លាស់ប្ដូរ ក្មានអ្វីធ្វើទáŸáŸ”';
+$lang['profnoempty'] = 'នាមáŸáž¬áž¢áž¸áž˜áŸáž›áž‘áž‘áŸ';
+$lang['profchanged'] = 'ប្រវážáŸ’ážáž·ážšáž¼áž”អ្នកប្រើបាន ។';
+
+$lang['pwdforget'] = 'ភ្លិចពាក្សសម្ងាážáŸ‹ យកមួយទាážáŸ”';
+$lang['resendna'] = 'វីគីនáŸáŸ‡áž˜áž·áž“ឧបរំផ្ញើពាក្សសម្ងាážáž˜áŸ’ដងទៀážáž‘áŸáŸ”';
+$lang['resendpwd'] = 'ផ្ញើពាក្សសម្ងាážáž²áŸ’áž™';
+$lang['resendpwdmissing'] = 'សុំអាទោស​ អ្នកážáŸ’រវបំពáŸáž‰ážœáž¶áž›áŸ”';
+$lang['resendpwdnouser'] = 'សុំអាទោស​ យាងរកអ្នកប្រើមិនឃើងទáŸáŸ”';
+$lang['resendpwdbadauth'] = 'សុំអាទោស​ រហស្សលáŸážáž¢áž“ុញ្ញាážáž–ំអាចប្រើបានទáŸáŸ” ážáŸ’សែបន្áž';
+$lang['resendpwdconfirm'] ='ážáŸ’សែបន្áž';
+$lang['resendpwdsuccess'] = 'ពាក្សសម្ងាážáž¢áŸ’នកបានផ្ញើហើយ។';
+
+$lang['txt_upload'] = 'ជ្រើសឯកសារដែលរុញ​ឡើង';
+$lang['txt_filename'] = 'រុញឡើងជា (ស្រáŸáž…​ចិážáŸ’áž)';
+$lang['txt_overwrt'] = 'កážáŸ‹áž–ីលើ';//'Overwrite existing file';
+$lang['lockedby'] = 'ឥឡូវនáŸáŸ‡áž…កជាប់​';
+$lang['lockexpire'] = 'សោជាប់ផុážâ€‹áž€áŸ†ážŽážáŸ‹áž˜áŸ‰áŸ„áž„';
+$lang['willexpire'] = 'សោអ្នកចំពោះកែážáž˜áŸ’រូវទំពáŸážšáž“áŸáŸ‡ ហួសពែលក្នុងមួយនាទី។\nកុំឲ្យមានជម្លោះ ប្រើ «បង្ហាញ»​ ទៅកំណážáŸ‹â€‹áž¡áž¾áž„​វិញ។';
+
+$lang['notsavedyet'] = 'កម្រែមិនទានរុក្សាទកážáŸ’រូវបោះបង់។\nបន្ážáž‘ៅទាឬទáŸ?';
+$lang['rssfailed'] = 'មានកំហុសពáŸáž›áž‘ៅ​ប្រមូល​យកមážáž·â€‹áž–áŸážáŸŒáž˜áž¶áž“៖ ';
+$lang['nothingfound']= 'រកមិនឃើញអ្វីទáŸáŸ”';
+
+$lang['mediaselect'] = 'ឯកសារមីឌៀ';
+$lang['fileupload'] = 'រុញឯកសារមីឌៀឡើង';
+$lang['uploadsucc'] = 'រុញចូលមានជáŸáž™';
+$lang['uploadfail'] = 'រុញឡើងបរាជáŸáž™áŸ” ប្រហែលážáž»ážŸážŸáž·áž‘្ឋានុញ្ញាáž?';
+$lang['uploadwrong'] = 'រុញឡើងážáŸ’រូវ​បាន​បដិសáŸáž’។ ឯកសារ';
+$lang['uploadexist'] = 'ឯកសារមានហើយ។ ឥážáž˜áž¶áž“ធ្វើអ្វីទáŸáŸ”';
+$lang['uploadbadcontent'] = 'ធាážáž»áž…ំរុញឡើងមិនážáŸ’រូវកន្ទុយឯកសារ %s áž‘áŸáŸ”';
+$lang['uploadspam'] = 'ចំរុញឡើង បង្ážáž¶áŸ†áž„ ដៅយ ';
+$lang['uploadxss'] = 'ចំរុញឡើង បង្ážáž¶áŸ†áž„ ';
+$lang['deletesucc'] = 'ឯកសារ «%s» បានលុបហើយ។';
+$lang['deletefail'] = '«%s» មិនអាចលុបទáŸ&mdashមើល';
+$lang['mediainuse'] = 'ឯកសារ «%s» ឥážáž‘ានលុបទáŸ&mdashមានគáŸáž€áŸ†áž—áž„áž‘áŸáž‡áž¶áž”់ប្រើ។';
+$lang['namespaces'] = 'នាមដ្ឋាន';
+$lang['mediafiles'] = 'ឯកសារទំនáŸáž“ៅក្នុង';
+
+$lang['js']['keepopen'] = 'ទុកបង្អួចបើក áž–áŸáž›áž€áž¶ážšáž‡áž˜áŸ’រើស';
+$lang['js']['hidedetails'] = 'បាំង';
+$lang['mediausage'] = 'ប្រើ';
+$lang['mediaview'] = 'មើលឯកសារដើម';
+$lang['mediaroot'] = 'ឫស';
+$lang['mediaupload'] = 'រុញឯកសារឡើងទៅនាមដ្ឋាននáŸáŸ‡áŸ” នាមដ្ឋាន «រុញឡើង»';
+$lang['mediaextchange'] = 'កន្ទុយឯកសារផ្លាសពី «%s» ទៅ «%s»!';
+
+$lang['reference'] = 'អនុសាសនចំពោះ';
+$lang['ref_inuse'] = 'ឯកសារមិនអាចលុបពីព្រោះវានៅចាប់ប្រើដៅទំពáŸážšáŸ–';
+$lang['ref_hidden'] = 'អនុសាសនážáŸ’លះនៅលើទំពáŸážšáž¢áŸ’នកគ្មានសáŸáž’អនុញ្ញាáž';
+
+$lang['hits'] = 'ážáŸ’រូវ';
+$lang['quickhits'] = 'ឈ្មោះទំពáŸážšáž”្រៀបដូច';
+$lang['toc'] = 'មាážáž·áž€áž¶';
+$lang['current'] = 'ឥឡៅវ';
+$lang['yours'] = 'ážáŸ†ážŽáŸ‚អ្នាក';
+$lang['diff'] = 'បង្ហាងអសទិសភាពជាមួយážáŸ†ážŽáŸ‚ឥឡូវ ';
+$lang['line'] = 'ážáŸ’សែ';
+$lang['breadcrumb'] = 'ដាន';
+$lang['youarehere'] = 'ដាន';
+$lang['lastmod'] = 'áž–áŸáž›áž€áŸ‚ចុងក្រោយ';
+$lang['by'] = 'និពន្ឋដោយ';
+$lang['deleted'] = 'យកចáŸáž‰';
+$lang['created'] = 'បង្កើáž';
+$lang['restored'] = 'ស្ដារបុនរាព្រឹážáž…ាស់';
+$lang['external_edit'] = 'កំរáŸáž–ីក្រៅ';
+$lang['summary'] = 'កែážáž˜áŸ’រា';
+
+$lang['mail_newpage'] = 'ážáŸ‚មទំពáŸážš';
+$lang['mail_changed'] = 'ទំពáŸážšáž”្រែប្រួល';
+$lang['mail_new_user'] = 'អ្នកប្រើážáŸ’មី';
+$lang['mail_upload'] = 'រុញអក្សាលើង';
+
+$lang['nosmblinks'] = 'ážáŸ’សែបន្ážáž‘ៅ «Windows share» ប្រើបានក្នុង «Microsoft IE»។ អ្នកអាច កាážáŸ‹áž¬áž”áž·áž ážáŸ’សែនáŸáŸ‡áŸ”';
+
+$lang['qb_bold'] = 'ឃ្វាមក្រស';
+$lang['qb_italic'] = 'ឃ្វាមជ្រៀង';
+$lang['qb_underl'] = 'ឃ្វាម';
+$lang['qb_code'] = 'ឃ្វាមក្បួន';
+$lang['qb_strike'] = 'ឃ្វាម';
+$lang['qb_h1'] = 'áž“áž·ážœáŸáž‘áž“áŸáž‘ី១';
+$lang['qb_h2'] = 'áž“áž·ážœáŸáž‘áž“áŸáž‘ី២';
+$lang['qb_h3'] = 'áž“áž·ážœáŸáž‘áž“áŸáž‘ី៣';
+$lang['qb_h4'] = 'áž“áž·ážœáŸáž‘áž“áŸáž‘ី៤';
+$lang['qb_h5'] = 'áž“áž·ážœáŸáž‘áž“áŸáž‘ី៥';
+$lang['qb_link'] = 'ážáŸ’សែបន្ážáž€áŸ’នុង';
+$lang['qb_extlink'] = 'ážáŸ’សែបន្ážáž€áŸ’រៅ';
+$lang['qb_hr'] = 'បន្ទាផ្ដáŸáž€';
+$lang['qb_ol'] = 'ážáž¶ážšáž¶áž„ážáŸ’រៀប';
+$lang['qb_ul'] = 'ážáž¶ážšáž¶áž„អážáŸ’រៀប';
+$lang['qb_media'] = 'បន្ážáŸ‚មរូនឹងឯកសារឥទៀáž';
+$lang['qb_sig'] = 'ស៊កហážáŸ’ážáž›áŸážáž¶';
+$lang['qb_smileys'] = 'សញ្ញាអារម្មណáŸ';
+$lang['qb_chars'] = 'អក្ážážšáŸˆáž–ិសáŸážŸ';
+
+$lang['js']['del_confirm']= 'លុប';
+$lang['admin_register']= 'ážáŸ‚មអ្នកប្រើ';//'Add new user';
+
+$lang['spell_start'] = 'áž–áž·áž“áž·ážáŸ’យអក្ážážšáž¶ážœáž·ážšáž»áž‘្ធ';//'Check Spelling';
+$lang['spell_stop'] = 'បណ្ážáž€áŸ†ážšáŸ‚'; 'Resume Editing';
+$lang['spell_wait'] = 'សូមចាំ';//'Please wait...';
+$lang['spell_noerr'] = 'ឥážáž˜áž¶áž“ážáž»áŸ‡áž‘áŸ';
+$lang['spell_nosug'] = 'ឥážáž˜áž¶áž“យោបល់';
+$lang['spell_change']= 'ដូរជំនួស';//'Change';
+
+$lang['metaedit'] = 'កែទិន្ននáŸáž™áž¢ážšáž¼áž”';//'Edit Metadata';
+$lang['metasaveerr'] = 'ពំអាចកážáŸ‹ážšáž‘ិន្ននáŸáž™áž¢ážšáž¼áž”';//'Writing metadata failed';
+$lang['metasaveok'] = 'ទិន្ននáŸáž™áž¢ážšáž¼áž”';
+$lang['img_backto'] = 'ážáž™áž€áŸ’រោយ';
+$lang['img_title'] = 'អភិធáŸáž™áŸ’áž™';
+$lang['img_caption'] = 'ចំណងជើង';
+$lang['img_date'] = 'ážáŸ’ងៃážáŸ‚';//'Date';
+$lang['img_fname'] = 'ឈ្មោះឯកសារ';
+$lang['img_fsize'] = 'ទំហំ';//'Size';
+$lang['img_artist'] = 'អ្នកážážážšáž¼áž”';
+$lang['img_copyr'] = 'រក្សា​សិទ្ធិ';
+$lang['img_format'] = 'ធុនប្រភáŸáž‘';
+$lang['img_camera'] = 'គ្រឿងážáž';
+$lang['img_keywords']= 'មáŸáž–ាក្ស';//'Keywords';
+
+$lang['subscribe_success'] = ' ដកážáŸ‚ម %s ចូលបញ្ជីបរិវិសកមចំពោះ %s';
+$lang['subscribe_error'] = 'មានកំហុសពáŸáž›áž”ន្ážáŸ‚ម %s ចូលបញ្ជីបរិវិសកមចំពោះ %s';
+$lang['subscribe_noaddress']= 'ឥážáž˜áž¶áž“អាសយដ្ឋាន អ្នកមិនអាចកážáŸ‹áž…ុល';
+$lang['unsubscribe_success']= 'ដក %s áž…áŸáž‰áž–ីបញ្ជីបរិវិសកមចំពោះ %s';
+$lang['unsubscribe_error'] = 'មានកំហុសពáŸáž›ážŠáž€ %s​ áž…áŸáž‰áž–ីបញ្ជីបរិវិសកមចំពោះ %s';
+
+/* auth.class language support */
+$lang['authmodfailed'] = 'និនផ្ទៀងផ្ទាážáŸ‹â€‹áž—ាព​​ážáŸ’រឹមážáŸ’រូវបានទáŸáŸ” សុំទាកទងអ្នកក្របគ្រោង។';
+$lang['authtempfail'] = 'ការផ្ទៀងផ្ទាážáŸ‹â€‹áž—ាព​​ážáŸ’រឹមážáŸ’រូវឥážážŠáŸ†áž“áŸáŸ” ប្រើ ....';
+
+/* installer strings */
+$lang['i_chooselang'] = 'រើសពាស្សាអ្នក';
+$lang['i_installer'] = 'ដំឡើងឌោគូវីគី';
+$lang['i_wikiname'] = 'នាមវីគី';
+$lang['i_enableacl'] = 'បើកប្រើ (អនុសាស)';
+$lang['i_superuser'] = 'អ្នកកំពូល';
+$lang['i_problems'] = 'កម្មវិធី​ដំឡើងបានប៉ះឧបសគ្គ។ អ្នកមិនអាចបន្ážáž‘ៅទៀហដល់អ្នកជួសជុលវា។';
+$lang['i_modified'] = '';
+$lang['i_funcna'] = '<code>%s</code> ';
+$lang['i_phpver'] = 'PHP ប្រវážáŸ‹áž›áŸáž<code>%s</code> ជា';
+$lang['i_permfail'] = '<code>%s</code> មិនអាចសាស';
+$lang['i_confexists'] = '<code>%s</code> មានហាយ';
+$lang['i_writeerr'] = 'មិនអាចបណ្កើ<code>%s</code>។ អ្នកážáŸ’រវការពិនិážáŸ’យអធិក្រឹážáž·ážšáž”ស់ážážáž“ឹងឯកសារ។';
+$lang['i_badhash'] = '(hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code>&mdash;';
+$lang['i_success'] = '';
+$lang['i_failure'] = 'ពលសាសារ';
+$lang['i_policy'] = 'បញ្ជីអនុញ្ញážáž•áŸ’ដើម';
+$lang['i_pol0'] = 'វីគីបើកចំហ';
+$lang['i_pol1'] = 'វីគីសធារណៈ';
+$lang['i_pol2'] = 'វីគីបិទជិáž';
+
+$lang['i_retry'] = 'ម្ážáž„ទៀáž';
+
+//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/login.txt
new file mode 100644
index 000000000..2149d9c32
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/login.txt
@@ -0,0 +1,5 @@
+====== កážáŸ‹áž…ូល ======
+
+អ្នកមិនទាន់។
+អ្នកážáŸ’រូវការអនុញ្ញាឲ្យកážáŸ‹ážáž“ំបានចូល។
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/newpage.txt
new file mode 100644
index 000000000..4b2b4e2d8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/newpage.txt
@@ -0,0 +1,4 @@
+====== ឥážáž‘ានមានទ០======
+អ្នកážáž¶áž˜ážáŸ’រសៃážáŸ’សែដែលគ្មានទំពáŸážšáŸ”
+បើ
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/norev.txt
new file mode 100644
index 000000000..7ca11893e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/norev.txt
@@ -0,0 +1,2 @@
+====== ឥážáž˜áž¶áž“បុនរាព្រឹážáŸ’ážáž·áž‘០======
+បុនរាព្រឹážáŸ’ážáž·áž–ុំមានទáŸáŸ” សុំប្រើ «ទំពáŸážšáž…ាស់ៗ» ទៅមើលបញ្ជីប្រវážáŸ’ážáž‘ំពáŸážšáž…ាស់រូបស់អážáŸ’ážáž”áž‘áž“áŸáŸ‡áŸ”
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/pwconfirm.txt
new file mode 100644
index 000000000..7c6a3ac97
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/pwconfirm.txt
@@ -0,0 +1,13 @@
+សួស្ដី @FULLNAME@!
+
+មានគáŸážŸáž»áž˜ážŸáŸ’នើពាក្យ​សម្ងាážáŸ‹â€‹ážšáž»áž”សឲ្យ@TITLE@ នៅ @DOKUWIKIURL@។
+បើអ្នកមិនជាអ្នកសុមពាក្យ​សម្ងាážáŸ‹áž‘០សុំបស់ចល់អ៊ីមáŸáž›áž“áŸáŸ‡áŸ”
+
+
+សុំអះអាងដែលសំណើនáŸáŸ‡ážŠáŸ„យទៅážáž¶áž˜ážáŸ’សែ
+
+@CONFIRM@
+
+--
+អ៊ីមáŸáž›áž“áŸáŸ‡áž”ង្កើážáž–ីឌក្គូវីគីនៅ
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/recent.txt
new file mode 100644
index 000000000..14449ea49
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/recent.txt
@@ -0,0 +1,3 @@
+====== ប្រវážáŸ’ážáž·áž‘ំពáŸážšáž”ច្ចុប្បន្ន ======
+ទំពáŸážšáž‘ាំងនáŸáŸ‡áž‚ឺទំពáŸážšáž€áŸ‚ប្រែ
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/register.txt
new file mode 100644
index 000000000..b850c2ec3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/register.txt
@@ -0,0 +1,7 @@
+====== អ្នកប្រើážáŸ’មី ======
+
+Fill in all the information below to create a new account in this wiki.
+Make sure you supply a **valid e-mail address** - if you are not asked
+to enter a password here, a new one will be sent to that address.
+The login name should be a valid [[doku>wiki:pagename|pagename]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/revisions.txt
new file mode 100644
index 000000000..a15186df8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/revisions.txt
@@ -0,0 +1,4 @@
+====== ប្រវážáŸ’ážáž·áž‘ំពáŸážšáž…ាស់ ======
+ទាំងនáŸáŸ‡áž‚ឺប្រវážáŸ’ážáž·áž‘ំពáŸážšáž…ាស់រុបសអážáŸ’ážáž”áž‘áž“áŸáŸ‡áŸ”
+ជ្រើសážáŸ’សែទំពáŸážšáž–ីážáž¶áž„ក្រោមហើយ ចុហ«កែទំពáŸážšáž“áŸáŸ‡Â» រួចហើយរក្សាវាទុក។
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/admin.txt
new file mode 100644
index 000000000..7dd0f58b3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/admin.txt
@@ -0,0 +1,4 @@
+====== 관리 작업 ======
+
+DokuWikiì—ì„œ 사용가능한 관리 ìž‘ì—… 목ë¡ì„ 아래ì—ì„œ ì°¾ì„ ìˆ˜ 있습니다.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/backlinks.txt
new file mode 100644
index 000000000..1711945e4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/backlinks.txt
@@ -0,0 +1,4 @@
+====== ë°±ë§í¬ ======
+
+현재 페ì´ì§€ë¡œ ë°±ë§í¬ë˜ëŠ” 페ì´ì§€ 목ë¡ìž…니다.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/conflict.txt
new file mode 100644
index 000000000..529296359
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/conflict.txt
@@ -0,0 +1,6 @@
+====== 새 버전 ìžˆìŒ ======
+
+편집하신 ë¬¸ì„œì˜ ìƒˆ ë²„ì „ì´ ìžˆìŠµë‹ˆë‹¤. ë‹¹ì‹ ì´ íŽ¸ì§‘í•˜ê³  있는 ë™ì•ˆ 다른 ì‚¬ëžŒì´ ë™ì¼í•œ 파ì¼ì„ íŽ¸ì§‘í•˜ì˜€ì„ ê²½ìš° ì´ëŸ° ì¼ì´ ìƒê¸¸ 수 있습니다.
+
+ì•„ëž˜ì˜ ì°¨ì´ì ì„ 면밀히 검토하시고, ì–´ë–¤ ë²„ì „ì„ ì €ìž¥í•˜ì‹¤ì§€ 결정하십시오. **저장**ì„ ì„ íƒí•˜ì‹œë©´, ë‹¹ì‹ ì˜ ë²„ì „ì´ ì €ìž¥ë©ë‹ˆë‹¤. **취소** 를 ì„ íƒí•˜ì‹œë©´ 현재 ë²„ì „ì´ ìœ ì§€ë©ë‹ˆë‹¤.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/denied.txt
new file mode 100644
index 000000000..316a660c0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/denied.txt
@@ -0,0 +1,4 @@
+====== 권한 거절 ======
+
+계ì†í•  수 있는 ê¶Œí•œì´ ì—†ìŠµë‹ˆë‹¤. 로그ì¸í•˜ì‹­ì‹œì˜¤.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/diff.txt
new file mode 100644
index 000000000..8cfb1da43
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/diff.txt
@@ -0,0 +1,5 @@
+====== ì°¨ì´ì  ======
+
+ì´ íŽ˜ì´ì§€ì˜ ì„ íƒí•œ ì´ì „ 버전과 현재 버전 사ì´ì˜ ì°¨ì´ì ì„ ë³´ì—¬ì¤ë‹ˆë‹¤.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/draft.txt
new file mode 100644
index 000000000..3df8a5e86
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/draft.txt
@@ -0,0 +1,6 @@
+====== 문서 ì´ˆì•ˆì´ ìžˆìŠµë‹ˆë‹¤. ======
+
+ì´ íŽ˜ì´ì§€ì˜ 마지막 편집 ì„¸ì…˜ì€ ì •ìƒì ìœ¼ë¡œ ë나지 않았습니다. DokuWiki는 ìž‘ì—… ë„중 ìžë™ìœ¼ë¡œ ì €ìž¥ëœ ë¬¸ì„œ ì´ˆì•ˆì„ ì‚¬ìš©í•˜ì—¬ íŽ¸ì§‘ì„ ê³„ì† í•  수 있습니다. 마지막 세션ë™ì•ˆ ì €ìž¥ëœ ë¬¸ì„œ ì´ˆì•ˆì„ ì•„ëž˜ì—ì„œ ë³¼ 수 있습니다.
+
+확실하게 비정ìƒì ìœ¼ë¡œ ì¢…ë£Œëœ ì„¸ì…˜ì„ //복구//할지 여부를 결정하고, ìžë™ìœ¼ë¡œ 저장ë˜ì—ˆë˜ ì´ˆì•ˆì„ //ì‚­ì œ//하거나 편집 ê³¼ì •ì„ ì·¨ì†Œí•˜ê¸° ë°”ëžë‹ˆë‹¤.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/edit.txt
new file mode 100644
index 000000000..d73f935fe
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/edit.txt
@@ -0,0 +1,2 @@
+페ì´ì§€ë¥¼ 편집하고 **저장**ì„ ëˆ„ë¥´ì‹­ì‹œì˜¤. 위키 êµ¬ë¬¸ì€ [[wiki:syntax]] í˜¹ì€ [[syntax|(한글) 구문]]ì„ ì°¸ê³ í•˜ì‹­ì‹œì˜¤. ì´ íŽ˜ì´ì§€ë¥¼ **ë” ë‚«ê²Œ 만들 ìžì‹ ì´ 있ì„** ë•Œì—만 편집하십시오. ì‹¤í—˜ì„ í•˜ê³  ì‹¶ì„ ë•Œì—는, 먼저 [[playground:playground|연습장]] ì— ê°€ì„œ 연습해 보십시오.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/editrev.txt
new file mode 100644
index 000000000..2715448d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/editrev.txt
@@ -0,0 +1,2 @@
+**ë¬¸ì„œì˜ ì´ì „ ë²„ì „ì„ ì„ íƒí•˜ì˜€ìŠµë‹ˆë‹¤!** 저장할 경우 ì´ ìžë£Œì˜ 새 ë²„ì „ì„ ë§Œë“­ë‹ˆë‹¤.
+---- \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/index.txt
new file mode 100644
index 000000000..7ca9488e0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/index.txt
@@ -0,0 +1,4 @@
+====== Index ======
+
+ì´ íŽ˜ì´ì§€ëŠ” [[doku>namespaces|네임스페ì´ìŠ¤]] ì—ì„œ 정렬한 모든 페ì´ì§€ì˜ 목ë¡ìž…니다.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/install.html
new file mode 100644
index 000000000..6b1bfaf75
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/install.html
@@ -0,0 +1,17 @@
+<p>ì´ íŽ˜ì´ì§€ëŠ” <a href="http://dokuwiki.org">Dokuwiki</a> 설치와 환경 ì„¤ì •ì„ ë„와ì¤ë‹ˆë‹¤.
+. 설치 ê³¼ì •ì— ëŒ€í•œ ë” ìžì„¸í•œ 정보는 <a href="http://dokuwiki.org/ko:install">한글 설치문서</a>와
+<a href="http://dokuwiki.org/install">ì˜ë¬¸ 설치문서</a>를 참고하기 ë°”ëžë‹ˆë‹¤.
+</p>
+
+<p>DokuWiki는 위키 페ì´ì§€ì™€ 페ì´ì§€ì™€ ê´€ë ¨ëœ ì •ë³´(그림,색ì¸, ì´ì „ 버전 문서 등등)를 저장하기 위해 ì¼ë°˜ì ì¸ í…스트 파ì¼ë“¤ì„ 사용합니다. ì •ìƒì ìœ¼ë¡œ DokuWiki를 사용하려면 ì´ íŒŒì¼ë“¤ì„ ë‹´ê³  있는 ë””ë ‰í† ë¦¬ë“¤ì— ëŒ€í•œ 쓰기 ê¶Œí•œì„ ê°€ì§€ê³  있어야 합니다.
+현재 설치 과정 중ì—는 디렉토리 권한 ì„¤ì •ì´ ë¶ˆê°€ëŠ¥í•©ë‹ˆë‹¤. 보통 ì§ì ‘ 쉘 명령어를 사용하거나, í˜¸ìŠ¤íŒ…ì„ ì‚¬ìš©í•œë‹¤ë©´ FTP나 호스팅 제어íŒ(예. CPanel)ì„ ì‚¬ìš©í•´ì„œ 설정해야 합니다.</p>
+
+<p>현재 설치 ê³¼ì •ì¤‘ì— ê´€ë¦¬ìžë¡œ ë¡œê·¸ì¸ í›„ DokuWikiì˜ ê´€ë¦¬ 메뉴(í”ŒëŸ¬ê·¸ì¸ ì„¤ì¹˜, ì‚¬ìš©ìž ê´€ë¦¬, 위키 페ì´ì§€ ì ‘ê·¼ 권한 관리, 옵션 설정)를 가능하게 <acronym title="ì ‘ê·¼ 제어 목ë¡">ACL</acronym>ì— ëŒ€í•œ 환경 ì„¤ì •ì„ ìˆ˜í–‰í•©ë‹ˆë‹¤.
+ì´ ê²ƒì€ DokuWikiê°€ ë™ìž‘í•˜ëŠ”ë° í•„ìš”í•œ ì‚¬í•­ì€ ì•„ë‹ˆì§€ë§Œ, ì–´ì°Œë˜ì—ˆë“  ë” ì‰½ê²Œ 관리ìžê°€ 관리할 수 있ë„ë¡ í•´ì¤ë‹ˆë‹¤.</p>
+
+<p>ìˆ™ë ¨ëœ ì‚¬ìš©ìžë“¤ì´ë‚˜ 특별한 설치 ê³¼ì •ì´ í•„ìš”í•œ ê²½ìš°ì— ë‹¤ìŒ ë§í¬ë“¤ì„ 참조하기 ë°”ëžë‹ˆë‹¤:
+<a href="http://dokuwiki.org/ko:install">설치 과정(한글)</a>
+과 <a href="http://dokuwiki.org/ko:config">환경 설정(한글),</a>
+<a href="http://dokuwiki.org/install">설치 과정(ì˜ë¬¸)</a>
+ê³¼ <a href="http://dokuwiki.org/config">환경 설정(ì˜ë¬¸)</a>
+</p>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/lang.php
new file mode 100644
index 000000000..f11ec95fd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/lang.php
@@ -0,0 +1,229 @@
+<?php
+/**
+ * korean language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Hyun Kim <lawfully@gmail.com>
+ * @author jk Lee
+ * @author dongnak@gmail.com
+ * @author Song Younghwan <purluno@gmail.com>
+ * @author SONG Younghwan <purluno@gmail.com>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '“';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '‘';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = '’';
+$lang['btn_edit'] = '페ì´ì§€ 편집';
+$lang['btn_source'] = '소스 보기';
+$lang['btn_show'] = '페ì´ì§€ 보기';
+$lang['btn_create'] = '페ì´ì§€ 만들기';
+$lang['btn_search'] = '찾기';
+$lang['btn_save'] = '저장';
+$lang['btn_preview'] = '미리보기';
+$lang['btn_top'] = '맨위로';
+$lang['btn_newer'] = '<< 최근';
+$lang['btn_older'] = 'ì´ì „ >>';
+$lang['btn_revs'] = 'ì´ì „ 버전들';
+$lang['btn_recent'] = '최근 변경 목ë¡';
+$lang['btn_upload'] = '업로드';
+$lang['btn_cancel'] = '취소';
+$lang['btn_index'] = '색ì¸';
+$lang['btn_secedit'] = '편집';
+$lang['btn_login'] = '로그ì¸';
+$lang['btn_logout'] = '로그아웃';
+$lang['btn_admin'] = '관리';
+$lang['btn_update'] = '변경';
+$lang['btn_delete'] = '삭제';
+$lang['btn_back'] = '뒤로';
+$lang['btn_backlink'] = 'ì´ì „ ë§í¬';
+$lang['btn_backtomedia'] = '미디어 íŒŒì¼ ì„ íƒìœ¼ë¡œ ëŒì•„가기';
+$lang['btn_subscribe'] = 'êµ¬ë… ì‹ ì²­';
+$lang['btn_unsubscribe'] = 'êµ¬ë… ì‹ ì²­ 해지';
+$lang['btn_subscribens'] = '네임스페ì´ìŠ¤ êµ¬ë… ì‹ ì²­';
+$lang['btn_unsubscribens'] = '네임스페ì´ìŠ¤ êµ¬ë… ì‹ ì²­ 해지';
+$lang['btn_profile'] = 'ê°œì¸ì •ë³´ 변경';
+$lang['btn_reset'] = '초기화';
+$lang['btn_resendpwd'] = '새 패스워드 보내기';
+$lang['btn_draft'] = '문서초안 편집';
+$lang['btn_recover'] = '문서초안 복구';
+$lang['btn_draftdel'] = '문서초안 삭제';
+$lang['loggedinas'] = 'ë‹¤ìŒ ì‚¬ìš©ìžë¡œ 로그ì¸';
+$lang['user'] = '사용ìž';
+$lang['pass'] = '패스워드';
+$lang['newpass'] = '새로운 패스워드';
+$lang['oldpass'] = '현재 패스워드 확ì¸';
+$lang['passchk'] = '패스워드 다시 확ì¸';
+$lang['remember'] = '기억하기';
+$lang['fullname'] = '실제 ì´ë¦„';
+$lang['email'] = 'ì´ë©”ì¼';
+$lang['register'] = '등ë¡';
+$lang['profile'] = 'ê°œì¸ ì •ë³´';
+$lang['badlogin'] = 'ìž˜ëª»ëœ ì‚¬ìš©ìž ì´ë¦„ì´ê±°ë‚˜ 패스워드입니다.';
+$lang['minoredit'] = 'ì¼ë¶€ ë‚´ìš© 변경';
+$lang['draftdate'] = '문서 초안 ìžë™ì €ìž¥ 시간';
+$lang['nosecedit'] = '페ì´ì§€ê°€ 수정ë˜ì–´ 섹션정보가 달ë¼ì ¸ 페ì´ì§€ 전부를 다시 ì½ìŠµë‹ˆë‹¤.';
+$lang['regmissing'] = '모든 í•­ëª©ì„ ìž…ë ¥í•´ì•¼ 합니다.';
+$lang['reguexists'] = 'ê°™ì€ ì´ë¦„ì„ ì‚¬ìš©í•˜ëŠ” 사용ìžê°€ 있습니다.';
+$lang['regsuccess'] = '사용ìžë¥¼ 만들었습니다. 패스워드는 ì´ë©”ì¼ë¡œ 보냈습니다.';
+$lang['regsuccess2'] = '사용ìžë¥¼ 만들었습니다.';
+$lang['regmailfail'] = '패스워드를 ì´ë©”ì¼ë¡œ 전송할 ë•Œ 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤. 관리ìžì—게 문ì˜í•˜ê¸° ë°”ëžë‹ˆë‹¤!';
+$lang['regbadmail'] = 'ì´ë©”ì¼ ì£¼ì†Œê°€ 틀렸습니다. - 오류ë¼ê³  ìƒê°ë˜ë©´ 관리ìžì—게 문ì˜í•˜ê¸° ë°”ëžë‹ˆë‹¤.';
+$lang['regbadpass'] = '새로운 íŒ¨ìŠ¤ì›Œë“œë“¤ì´ ì¼ì¹˜í•˜ì§€ 않습니다. 다시 입력하기 ë°”ëžë‹ˆë‹¤.';
+$lang['regpwmail'] = 'DokuWiki 패스워드';
+$lang['reghere'] = 'ì•„ì§ ë“±ë¡í•˜ì§€ 않았다면 등ë¡í•˜ê¸° ë°”ëžë‹ˆë‹¤.';
+$lang['profna'] = 'ì´ ìœ„í‚¤ëŠ” ê°œì¸ ì •ë³´ ìˆ˜ì •ì„ í—ˆìš©í•˜ì§€ 않습니다.';
+$lang['profnochange'] = 'ë³€ê²½ì‚¬í•­ì´ ì—†ìŠµë‹ˆë‹¤.';
+$lang['profnoempty'] = 'ì´ë¦„ì´ë‚˜ ì´ë©”ì¼ ì£¼ì†Œê°€ 비었습니다.';
+$lang['profchanged'] = 'ê°œì¸ì •ë³´ ë³€ê²½ì´ ì„±ê³µí–ˆìŠµë‹ˆë‹¤.';
+$lang['pwdforget'] = '패스워드를 잊어버린 경우 새로 ë°œê¸‰ë°›ì„ ìˆ˜ 있습니다.';
+$lang['resendna'] = 'ì´ ìœ„í‚¤ëŠ” 패스워드 ìž¬ë°œê¸‰ì„ ì§€ì›í•˜ì§€ 않습니다.';
+$lang['resendpwd'] = '새로운 패스워드를 보냅니다.';
+$lang['resendpwdmissing'] = '새로운 패스워드를 입력해야햡니다.';
+$lang['resendpwdnouser'] = '등ë¡ëœ 사용ìžê°€ 아닙니다. 다시 í™•ì¸ ë°”ëžë‹ˆë‹¤.';
+$lang['resendpwdbadauth'] = 'ì¸ì¦ 코드가 틀립니다. ìž˜ëª»ëœ ë§í¬ì¸ì§€ í™•ì¸ ë°”ëžë‹ˆë‹¤.';
+$lang['resendpwdconfirm'] = 'í™•ì¸ ë§í¬ë¥¼ ì´ë©”ì¼ë¡œ 보냈습니다.';
+$lang['resendpwdsuccess'] = '새로운 패스워드는 ì´ë©”ì¼ë¡œ 보내드립니다.';
+$lang['license'] = 'ì´ ìœ„í‚¤ì˜ ë‚´ìš©ì€ ë‹¤ìŒì˜ ë¼ì´ì„¼ìŠ¤ì— 따릅니다 :';
+$lang['licenseok'] = 'ì£¼ì˜ : ì´ íŽ˜ì´ì§€ë¥¼ 수정한다는 다ìŒì˜ ë¼ì´ì„¼ìŠ¤ì— ë™ì˜í•¨ì„ ì˜ë¯¸í•©ë‹ˆë‹¤ :';
+$lang['txt_upload'] = '업로드 파ì¼ì„ ì„ íƒí•©ë‹ˆë‹¤.';
+$lang['txt_filename'] = '업로드 íŒŒì¼ ì´ë¦„ì„ ìž…ë ¥í•©ë‹ˆë‹¤.(ì„ íƒ ì‚¬í•­)';
+$lang['txt_overwrt'] = '새로운 파ì¼ë¡œ ì´ì „ 파ì¼ì„ êµì²´í•©ë‹ˆë‹¤.';
+$lang['lockedby'] = '현재 잠금 사용ìž';
+$lang['lockexpire'] = '잠금 해제 시간';
+$lang['willexpire'] = 'ìž ì‹œ 후 편집 ìž ê¸ˆì´ í•´ì œë©ë‹ˆë‹¤.\n편집 충ëŒì„ 피하려면 미리보기를 눌러 잠금 ì‹œê°„ì„ ë‹¤ì‹œ 설정하기 ë°”ëžë‹ˆë‹¤.';
+$lang['notsavedyet'] = '저장하지 ì•Šì€ ë³€ê²½ì€ ì§€ì›Œì§‘ë‹ˆë‹¤.\n계ì†í•˜ì‹œê² ìŠµë‹ˆê¹Œ?';
+$lang['rssfailed'] = 'feed 가져오기 실패: ';
+$lang['nothingfound'] = '아무 ê²ƒë„ ì—†ìŠµë‹ˆë‹¤.';
+$lang['mediaselect'] = '미디어 íŒŒì¼ ì„ íƒ';
+$lang['fileupload'] = '미디어 íŒŒì¼ ì—…ë¡œë“œ';
+$lang['uploadsucc'] = '업로드 성공';
+$lang['uploadfail'] = '업로드 실패. ìž˜ëª»ëœ ê¶Œí•œ 때문ì¼ì§€ë„ 모릅니다.';
+$lang['uploadwrong'] = '업로드 거부. ê¸ˆì§€ëœ í™•ìž¥ìžìž…니다!';
+$lang['uploadexist'] = 'ì´ë¯¸ 파ì¼ì´ 존재합니다.';
+$lang['uploadbadcontent'] = 'ì—…ë¡œë“œëœ íŒŒì¼ì´ íŒŒì¼ í™•ìž¥ìž %s와 ì¼ì¹˜í•˜ì§€ 않습니다.';
+$lang['uploadspam'] = '스팸 차단기가 업로드를 취소하였습니다.';
+$lang['uploadxss'] = '악성 ì½”ë“œì˜ ê°€ëŠ¥ì„±ì´ ìžˆì–´ 업로드를 취소하였습니다.';
+$lang['uploadsize'] = '업로드한 파ì¼ì´ 너무 í½ë‹ˆë‹¤. (최대 %s)';
+$lang['deletesucc'] = '"%s" 파ì¼ì´ ì‚­ì œë˜ì—ˆìŠµë‹ˆë‹¤.';
+$lang['deletefail'] = '"%s" 파ì¼ì„ 삭제할 수 없습니다. - ì‚­ì œ ê¶Œí•œì´ ìžˆëŠ”ì§€ 확ì¸í•˜ê¸° ë°”ëžë‹ˆë‹¤.';
+$lang['mediainuse'] = '"%s" 파ì¼ì„ 삭제할 수 없습니다. - ì•„ì§ ì‚¬ìš© 중입니다.';
+$lang['namespaces'] = '네임스페ì´ìŠ¤';
+$lang['mediafiles'] = '사용 가능한 íŒŒì¼ ëª©ë¡';
+$lang['js']['keepopen'] = 'ì„ íƒí•  ë•Œ 윈ë„우를 열어놓으시기 ë°”ëžë‹ˆë‹¤.';
+$lang['js']['hidedetails'] = 'ìžì„¸í•œ ì •ë³´ ê°ì¶”기';
+$lang['js']['nosmblinks'] = '윈ë„ìš° 공유 파ì¼ê³¼ì˜ ì—°ê²°ì€ MS ì¸í„°ë„· ìµìŠ¤í”Œë¡œëŸ¬ì—서만 ë™ìž‘합니다.
+그러나 ë§í¬ë¥¼ 복사하거나 붙여넣기를 í•  수 있습니다.';
+$lang['js']['mu_btn'] = '여러 파ì¼ë“¤ì„ í•œë²ˆì— ì—…ë¡œë“œí•©ë‹ˆë‹¤.';
+$lang['mediausage'] = 'ì´ íŒŒì¼ì„ 참조하려면 ë‹¤ìŒ ë¬¸ë²•ì„ ì‚¬ìš©í•˜ê¸° ë°”ëžë‹ˆë‹¤:';
+$lang['mediaview'] = 'ì›ë³¸ íŒŒì¼ ë³´ê¸°';
+$lang['mediaroot'] = '루트(root)';
+$lang['mediaupload'] = '파ì¼ì„ 현재 네임스페ì´ìŠ¤ë¡œ 업로드합니다. 하위 네임스페ì´ìŠ¤ë¥¼ 만들려면 íŒŒì¼ ì´ë¦„ ì•žì— ì½œë¡ (:)으로 구분ë˜ëŠ” ì´ë¦„ì„ ë¶™ì´ë©´ ë©ë‹ˆë‹¤.';
+$lang['mediaextchange'] = 'íŒŒì¼ í™•ìž¥ìžê°€ .%sì—ì„œ .%s으로 변경ë습니다!';
+$lang['reference'] = '참조';
+$lang['ref_inuse'] = 'ë‹¤ìŒ íŽ˜ì´ì§€ë“¤ì—ì„œ ì•„ì§ ì‚¬ìš© 중ì´ë¯€ë¡œ 파ì¼ì„ 삭제할 수 없습니다:';
+$lang['ref_hidden'] = '페ì´ì§€ë“¤ì˜ 몇몇 참조는 ì½ì„ 수 있는 ê¶Œí•œì´ ì—†ìŠµë‹ˆë‹¤.';
+$lang['hits'] = '히트 수';
+$lang['quickhits'] = 'ì¼ì¹˜í•˜ëŠ” 페ì´ì§€ ì´ë¦„';
+$lang['toc'] = '목차';
+$lang['current'] = '현재';
+$lang['yours'] = '버전';
+$lang['diff'] = '현재 ë²„ì „ê³¼ì˜ ì°¨ì´ ë³´ê¸°';
+$lang['diff2'] = 'ì„ íƒëœ 버전들 ê°„ ì°¨ì´ ë³´ê¸°';
+$lang['line'] = '줄';
+$lang['breadcrumb'] = '추ì ';
+$lang['youarehere'] = '현재 위치';
+$lang['lastmod'] = '마지막 수정';
+$lang['by'] = '작성ìž';
+$lang['deleted'] = '삭제';
+$lang['created'] = '새로 만듦';
+$lang['restored'] = '옛 버전 복구';
+$lang['external_edit'] = '외부 편집기';
+$lang['summary'] = '편집 요약';
+$lang['noflash'] = 'ì´ ì»¨í…츠를 표시하기 위해서 <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a>ì´ í•„ìš”í•©ë‹ˆë‹¤.';
+$lang['mail_newpage'] = '페ì´ì§€ 추가:';
+$lang['mail_changed'] = '페ì´ì§€ 변경:';
+$lang['mail_new_user'] = '새로운 사용ìž:';
+$lang['mail_upload'] = 'íŒŒì¼ ì²¨ë¶€:';
+$lang['qb_bold'] = 'êµµì€ ê¸€';
+$lang['qb_italic'] = 'ì´íƒ¤ë¦­ì²´ 글';
+$lang['qb_underl'] = '밑줄 그어진 글';
+$lang['qb_code'] = '코드로 í‘œì‹œëœ ê¸€';
+$lang['qb_strike'] = '취소 í‘œì‹œëœ ê¸€';
+$lang['qb_h1'] = '1단계 헤드ë¼ì¸';
+$lang['qb_h2'] = '2단계 헤드ë¼ì¸';
+$lang['qb_h3'] = '3단계 헤드ë¼ì¸';
+$lang['qb_h4'] = '4단계 헤드ë¼ì¸';
+$lang['qb_h5'] = '5단계 헤드ë¼ì¸';
+$lang['qb_link'] = '내부 ë§í¬';
+$lang['qb_extlink'] = '외부 ë§í¬';
+$lang['qb_hr'] = '수í‰ì„ ';
+$lang['qb_ol'] = 'ìˆ«ìž ëª©ë¡';
+$lang['qb_ul'] = '목ë¡';
+$lang['qb_media'] = 'ì´ë¯¸ì§€ì™€ 기타 íŒŒì¼ ì¶”ê°€';
+$lang['qb_sig'] = '서명 추가';
+$lang['qb_smileys'] = 'ì´ëª¨í‹°ì½˜';
+$lang['qb_chars'] = '특수문ìž';
+$lang['js']['del_confirm'] = 'ì •ë§ë¡œ ì„ íƒëœ 항목(들)ì„ ì‚­ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ?';
+$lang['admin_register'] = '새로운 ì‚¬ìš©ìž ì¶”ê°€';
+$lang['metaedit'] = '메타 ë°ì´íƒ€ë¥¼ 편집합니다.';
+$lang['metasaveerr'] = '메타 ë°ì´íƒ€ 쓰기가 실패했습니다.';
+$lang['metasaveok'] = '메타 ë°ì´íƒ€ê°€ 저장ë˜ì—ˆìŠµë‹ˆë‹¤.';
+$lang['img_backto'] = '뒤로';
+$lang['img_title'] = 'ì´ë¦„';
+$lang['img_caption'] = '설명';
+$lang['img_date'] = '날짜';
+$lang['img_fname'] = 'íŒŒì¼ ì´ë¦„';
+$lang['img_fsize'] = 'í¬ê¸°';
+$lang['img_artist'] = '만든ì´';
+$lang['img_copyr'] = '저작권';
+$lang['img_format'] = 'í¬ë§·';
+$lang['img_camera'] = 'ì¹´ë©”ë¼';
+$lang['img_keywords'] = '키워드';
+$lang['subscribe_success'] = '%s를 추가했습니다. (%sì˜ êµ¬ë… ëª©ë¡)';
+$lang['subscribe_error'] = '%s를 ì¶”ê°€í•˜ëŠ”ë° ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤.(%sì˜ êµ¬ë… ëª©ë¡)';
+$lang['subscribe_noaddress'] = 'ë¡œê·¸ì¸ ì •ë³´ì— ì´ë©”ì¼ ì£¼ì†Œê°€ 없습니다, êµ¬ë… ëª©ë¡ì— 추가할 수 없습니다.';
+$lang['unsubscribe_success'] = '%s를 제외시켰습니다. (%sì˜ êµ¬ë… ëª©ë¡)';
+$lang['unsubscribe_error'] = '%s를 ì œì™¸ì‹œí‚¤ëŠ”ë° ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤.(%sì˜ êµ¬ë… ëª©ë¡)';
+$lang['authmodfailed'] = 'ìž˜ëª»ëœ ì‚¬ìš©ìž ì¸ì¦ 설정입니다. 관리ìžì—게 문ì˜í•˜ê¸° ë°”ëžë‹ˆë‹¤.';
+$lang['authtempfail'] = 'ì‚¬ìš©ìž ì¸ì¦ì´ ì¼ì‹œì ìœ¼ë¡œ 불가능합니다. ë§Œì¼ ê³„ì†í•´ì„œ 문제가 ë°œìƒí•˜ë©´ 관리ìžì—게 문ì˜í•˜ê¸° ë°”ëžë‹ˆë‹¤.';
+$lang['i_chooselang'] = '사용하는 언어를 ì„ íƒí•©ë‹ˆë‹¤.';
+$lang['i_installer'] = 'DokuWiki 설치';
+$lang['i_wikiname'] = '위키 ì´ë¦„';
+$lang['i_enableacl'] = 'ACL기능 사용(권장 사항)';
+$lang['i_superuser'] = 'ìŠˆí¼ ìœ ì €';
+$lang['i_problems'] = '설치 중 아래와 ê°™ì€ ë¬¸ì œê°€ ë°œìƒí–ˆìŠµë‹ˆë‹¤. 문제를 í•´ê²°í•œ 후 설치를 계ì†í•˜ê¸° ë°”ëžë‹ˆë‹¤.';
+$lang['i_modified'] = '보안 ìƒì˜ ì´ìœ ë¡œ 아래 스í¬ë¦½íŠ¸ëŠ” 수정ë˜ì§€ ì•Šì€ ìƒˆ Dokuwiki설치ì—서만 ë™ìž‘ë©ë‹ˆë‹¤.
+ë‹¤ìš´ë¡œë“œëœ ì••ì¶• 패키지를 다시 설치하거나 <a href="http://dokuwiki.org/install"> DokuWiki 설치 과정</a>ì„ ì°¸ê³ í•´ì„œ 설치하기 ë°”ëžë‹ˆë‹¤.';
+$lang['i_funcna'] = 'PHP함수 <code>%s</code> ì‚¬ìš©ì´ ë¶ˆê°€ëŠ¥í•©ë‹ˆë‹¤. 호스트 제공ìžê°€ ì–´ë–¤ ì´ìœ ì—ì„œì¸ì§€ 막아 놓았ì„지 모릅니다.';
+$lang['i_phpver'] = 'PHP <code>%s</code>ë²„ì „ì€ í•„ìš”í•œ <code>%s</code>버전보다 오래ë˜ì—ˆìŠµë‹ˆë‹¤.PHP를 업그레ì´ë“œí•  필요가 있습니다.';
+$lang['i_permfail'] = 'DokuWiki는 <code>%s</code>ì— ì“°ê¸° 가능 ê¶Œí•œì´ ì—†ìŠµë‹ˆë‹¤. 먼저 ì´ ë””ë ‰í† ë¦¬ì— ì“°ê¸° ê¶Œí•œì´ ì„¤ì •ë˜ì–´ì•¼ 합니다!';
+$lang['i_confexists'] = '<code>%s</code>는 ì´ë¯¸ 존재합니다.';
+$lang['i_writeerr'] = '<code>%s</code>ì„ ë§Œë“¤ 수 없습니다. 먼저 디렉토리/íŒŒì¼ ê¶Œí•œì„ í™•ì¸í•˜ê³  파ì¼ì„ 수ë™ìœ¼ë¡œ 만들기 ë°”ëžë‹ˆë‹¤.';
+$lang['i_badhash'] = 'dokuwiki.php를 ì¸ì‹í•  수 없거나 ì›ë³¸ 파ì¼ì´ 아닙니다. (hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - 유효하지 않거나 빈 값입니다.';
+$lang['i_success'] = '환경 ì„¤ì •ì´ ì„±ê³µì ìœ¼ë¡œ ë났습니다. install.php를 ì§€ì›Œë„ ìƒê´€ì—†ìŠµë‹ˆë‹¤.
+ <a href="doku.php">새로운 DokuWiki</a>.';
+$lang['i_failure'] = '환경 설정 파ì¼ì— 쓰는 ë„중 ì—러가 ë°œìƒí–ˆìŠµë‹ˆë‹¤.
+새로운 <a href="doku.php"> DokuWiki</a>를 사용하기 ì „ì— ìˆ˜ë™ìœ¼ë¡œ 문제를 í•´ê²°í•  필요가 있습니다.';
+$lang['i_policy'] = '초기 ACL 정책';
+$lang['i_pol0'] = '개방형 위키 (누구나 ì½ê¸°/쓰기/업로드가 가능합니다.)';
+$lang['i_pol1'] = '공개형 위키 (누구나 ì½ì„ 수 있지만, 등ë¡ëœ 사용ìžë§Œ 쓰기/업로드가 가능합니다.)';
+$lang['i_pol2'] = 'í쇄형 위키 (등ë¡ëœ 사용ìžë§Œ ì½ê¸°/쓰기/업로드가 가능합니다.)';
+$lang['i_retry'] = '다시 ì‹œë„';
+$lang['mu_intro'] = '여러 파ì¼ì„ í•œë²ˆì— ì—…ë¡œë“œí•  수 있습니다. íŒŒì¼ ëª©ë¡ì— 추가하려면 "찾기" ë²„íŠ¼ì„ í´ë¦­í•©ë‹ˆë‹¤. íŒŒì¼ ëª©ë¡ ì¶”ê°€ ìž‘ì—…ì´ ë나면 "업로드" ë²„íŠ¼ì„ í´ë¦­í•˜ê¸° ë°”ëžë‹ˆë‹¤. ';
+$lang['mu_gridname'] = '파ì¼ëª…';
+$lang['mu_gridsize'] = 'í¬ê¸°';
+$lang['mu_gridstat'] = 'ìƒíƒœ';
+$lang['mu_namespace'] = '네임스페ì´ìŠ¤';
+$lang['mu_browse'] = '찾기';
+$lang['mu_toobig'] = '업로드 가능 í¬ê¸°ë¥¼ 초과했습니다.';
+$lang['mu_ready'] = '업로드가 가능합니다.';
+$lang['mu_done'] = '업로드가 완료ë˜ì—ˆìŠµë‹ˆë‹¤.';
+$lang['mu_fail'] = '업로드가 실패했습니다.';
+$lang['mu_authfail'] = '세션 ê¸°ê°„ì´ ì¢…ë£Œë˜ì—ˆìŠµë‹ˆë‹¤.';
+$lang['mu_progress'] = '@PCT@% 업로드ë˜ì—ˆìŠµë‹ˆë‹¤.';
+$lang['mu_filetypes'] = 'í—ˆìš©ëœ íŒŒì¼íƒ€ìž…';
+$lang['recent_global'] = '<b>%s</b> 네임스페ì´ìŠ¤ë¥¼ 구ë…중입니다. <a href="%s">전체위키 변경사항 </a>ë„ ë³´ì‹¤ìˆ˜ 있습니다.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/locked.txt
new file mode 100644
index 000000000..24525fc46
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/locked.txt
@@ -0,0 +1,3 @@
+====== 페ì´ì§€ 잠금 ======
+
+다른 사용ìžê°€ ì´ íŽ˜ì´ì§€ íŽ¸ì§‘ì„ ìœ„í•´ ìž ê¸ˆì„ ì‹¤í–‰í•˜ì˜€ìŠµë‹ˆë‹¤. 해당 사용ìžê°€ íŽ¸ì§‘ì„ ë내거나 ìž ê¸ˆì´ í•´ì œë  ë•Œê¹Œì§€ 기다리십시오.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/login.txt
new file mode 100644
index 000000000..1aae449df
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/login.txt
@@ -0,0 +1,4 @@
+====== ë¡œê·¸ì¸ ======
+
+로그ì¸í•˜ì§€ 않았습니다! 아래ì—ì„œ 로그ì¸í•˜ì‹­ì‹œì˜¤. 로그ì¸í•˜ë ¤ë©´ 쿠키를 ë°›ë„ë¡ ì„¤ì •í•˜ì—¬ì•¼ 합니다.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/mailtext.txt
new file mode 100644
index 000000000..5c496435e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/mailtext.txt
@@ -0,0 +1,17 @@
+DokuWiki 페ì´ì§€ê°€ 수정 í˜¹ì€ ì¶”ê°€ë˜ì—ˆìŠµë‹ˆë‹¤. ìƒì„¸í•œ 정보는 다ìŒê³¼ 같습니다.
+
+날짜 : @DATE@
+브ë¼ìš°ì € : @BROWSER@
+IP 주소 : @IPADDRESS@
+호스트명 : @HOSTNAME@
+옛날버전 : @OLDPAGE@
+새버전 : @NEWPAGE@
+편집 요약 : @SUMMARY@
+ì‚¬ìš©ìž : @USER@
+
+@DIFF@
+
+
+--
+ì´ ë©”ì¼ì€ @DOKUWIKIURL@ ì˜ DokuWiki ê°€ ìƒì„±í•œ
+ì´ë©”ì¼ìž…니다.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/newpage.txt
new file mode 100644
index 000000000..f8380bd84
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/newpage.txt
@@ -0,0 +1,3 @@
+====== ì´ í† í”½ì€ ì•„ì§ ì—†ìŠµë‹ˆë‹¤ ======
+
+ì•„ì§ ì—†ëŠ” 토픽 ë§í¬ë¥¼ ë”°ë¼ì˜¤ì…¨ìŠµë‹ˆë‹¤. **페ì´ì§€ 만들기** ë²„íŠ¼ì„ ì´ìš©í•˜ì—¬ 새로 만들 수 있습니다.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/norev.txt
new file mode 100644
index 000000000..e1b4093b4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/norev.txt
@@ -0,0 +1,3 @@
+====== 지정한 버전 ì—†ìŒ ======
+
+지정한 ë²„ì „ì´ ì—†ìŠµë‹ˆë‹¤. **과거 버전** ë²„íŠ¼ì„ ì‚¬ìš©í•˜ì—¬ ì´ ë¬¸ì„œì˜ ë²„ì „ 목ë¡ì„ 보십시오.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/preview.txt
new file mode 100644
index 000000000..8bcc6a1eb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/preview.txt
@@ -0,0 +1,4 @@
+====== 미리보기 ======
+
+ì´ê²ƒì€ 입력하신 ë‚´ìš©ì´ ì–´ë–»ê²Œ ë³´ì¼ì§€ 미리보기하는 곳입니다. ì•„ì§ì€ **저장ë˜ì§€ 않았다**는 ì ì„ 기억하십시오.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/pwconfirm.txt
new file mode 100644
index 000000000..c022a52a9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/pwconfirm.txt
@@ -0,0 +1,11 @@
+안녕하세요. @FULLNAME@!
+
+@DOKUWIKIURL@ì— ìž‘ì„±í•˜ì‹  @TITLE@ì„ ë³´ë ¤ë©´ 새 패스워드가 필요하다는 ìš”ì²­ì„ ëˆ„êµ°ê°€ 받았다고 합니다.
+
+새로운 패스워드를 요청한 ì ì´ 없다면 ì´ ì´ë©”ì¼ì„ 무시해버리세요.
+
+@CONFIRM@ì—ì„œ ì •ë§ë¡œ 본ì¸ì´ 그런 ìš”ì²­ì„ í–ˆì—ˆëŠ”ì§€ 확ì¸í•´ 보기 ë°”ëžë‹ˆë‹¤.
+
+--
+
+@DOKUWIKIURL@ì˜ DokuWikiê°€ ìžë™ìœ¼ë¡œ 만들어낸 ë©”ì¼ìž…니다.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/read.txt
new file mode 100644
index 000000000..6b5d7b3db
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/read.txt
@@ -0,0 +1,2 @@
+ì´ íŽ˜ì´ì§€ëŠ” ì½ê¸° 전용입니다. 소스를 ë³¼ 수는 있지만, 수정할 수는 없습니다. ì—°ìŠµì€ [[public:playground|연습장]]ì—ì„œ 하십시오. 문제가 있다고 ìƒê°í•˜ì‹œë©´ 관리ìžì—게 문ì˜í•˜ì‹­ì‹œì˜¤.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/recent.txt
new file mode 100644
index 000000000..f693c4bf1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/recent.txt
@@ -0,0 +1,5 @@
+====== 최근 변경 ======
+
+ì•„ëž˜ì˜ íŽ˜ì´ì§€ëŠ” ìµœê·¼ì— ë³€ê²½ëœ ê²ƒìž…ë‹ˆë‹¤.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/register.txt
new file mode 100644
index 000000000..999073a1d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/register.txt
@@ -0,0 +1,4 @@
+====== 새 ì‚¬ìš©ìž ë“±ë¡ ======
+
+ì´ ìœ„í‚¤ì— ìƒˆ ê³„ì •ì„ ë§Œë“¤ë ¤ë©´ ì•„ëž˜ì˜ ëª¨ë“  ë‚´ìš©ì„ ìž…ë ¥í•˜ì‹­ì‹œì˜¤. **제대로 ëœ ì´ë©”ì¼ ì£¼ì†Œ**를 사용하십시오. 그러나, 아래 ë‚´ìš©ì„ ìž…ë ¥í–ˆë‹¤ê³  í•´ì„œ ê³„ì •ì„ ë§Œë“¤ 수 있으리ë¼ê³ ëŠ” 믿지 마십시오. ì´ê³³ì€ ë‚´ê°€ ê°œì¸ì ìœ¼ë¡œ 사용하는 ê³³ì´ë©°, ê³„ì •ì„ ë§Œë“¤ì–´ 주고 안주고는 ë‚´ 마ìŒìž…니다. ì°¨ë¼ë¦¬, 내게 ì´ë©”ì¼ì„ ë³´ë‚´ì„œ 신청하는 íŽ¸ì´ ë” ë‚˜ì„ ê²ƒìž…ë‹ˆë‹¤. 패스워드는 ì´ ì´ë©”ì¼ë¡œ 보내집니다. 사용ìžëª…ì€ ì˜¬ë°”ë¥¸ [[doku>pagename|pagename]] ì´ì–´ì•¼ 합니다.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/registermail.txt
new file mode 100644
index 000000000..4b1aa20a5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/registermail.txt
@@ -0,0 +1,14 @@
+새로운 사용ìžê°€ 등ë¡ë˜ì—ˆìŠµë‹ˆë‹¤:
+
+ì‚¬ìš©ìž ì´ë¦„ : @NEWUSER@
+ì‚¬ìš©ìž ì‹¤ì œ ì´ë¦„ : @NEWNAME@
+ì´ë©”ì¼ : @NEWEMAIL@
+
+날짜 : @DATE@
+브ë¼ìš°ì € : @BROWSER@
+IP주소 : @IPADDRESS@
+호스트 ì´ë¦„ : @HOSTNAME@
+
+--
+
+@DOKUWIKIURL@ì˜ DokuWikiê°€ ìžë™ìœ¼ë¡œ 만들어낸 ë©”ì¼ìž…니다.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/resendpwd.txt
new file mode 100644
index 000000000..b06163e92
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/resendpwd.txt
@@ -0,0 +1,4 @@
+====== 새로운 패스워드 전송 ======
+
+ì´ ìœ„í‚¤ ê³„ì •ì— ëŒ€í•œ 새 패스워드를 요구하기 위해 아래 í¼ì—ì„œ ì‚¬ìš©ìž ì´ë¦„ì„ ìž…ë ¥í•˜ì„¸ìš”. í™•ì¸ ë§í¬ëŠ” 새로 등ë¡ëœ ì´ë©”ì¼ ì£¼ì†Œë¡œ 발송ë©ë‹ˆë‹¤.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/revisions.txt
new file mode 100644
index 000000000..12d11894d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/revisions.txt
@@ -0,0 +1,4 @@
+====== ì´ì „ 버전 ======
+
+ì´ ë¬¸ì„œì˜ ì˜›ë‚  ë²„ì „ì€ ë‹¤ìŒê³¼ 같습니다. ì´ì „ 버전으로 ëŒì•„가려면, 아래ì—ì„œ ì„ íƒí•œ 다ìŒ, **페ì´ì§€ 편집**ì„ í´ë¦­í•œ 아후 저장하십시오.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/searchpage.txt
new file mode 100644
index 000000000..198d9a428
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/searchpage.txt
@@ -0,0 +1,5 @@
+====== 찾기 ======
+
+찾기 결과를 아래ì—ì„œ ë³¼ 수 있습니다. ë§Œì¼ ì›í•˜ëŠ” ê²ƒì„ ì°¾ì§€ 못하였다면, **페ì´ì§€ 편집** ë²„íŠ¼ì„ ì´ìš©í•˜ì—¬ ì§ˆì˜ ë‚´ìš©ê³¼ ê°™ì€ ì´ë¦„ì˜ íŽ˜ì´ì§€ë¥¼ 만들 수 있습니다.
+
+===== ê²°ê³¼ =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/showrev.txt
new file mode 100644
index 000000000..084d82737
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/showrev.txt
@@ -0,0 +1,2 @@
+**ì´ê²ƒì€ ë¬¸ì„œì˜ ì´ì „ 버전입니다!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/stopwords.txt
new file mode 100644
index 000000000..bdb41deba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/stopwords.txt
@@ -0,0 +1,29 @@
+# 색ì¸ì´ 만들어 지지 않는 단어 목ë¡ìž…니다.(í•œì¤„ì— í•œë‹¨ì–´)
+# ì´ íŒŒì¼ì„ 편집한다면 UNIX줄 종료문ìžë¥¼ 사용해야합니다.(ë‹¨ì¼ ê°œí–‰ë¬¸ìž)
+# 3문ìžì´í•˜ 단어는 ìžë™ìœ¼ë¡œ 무시ë˜ë¯€ë¡œ 3문ìžë³´ë‹¤ ì§§ì€ ë‹¨ì–´ëŠ” í¬í•¨ì‹œí‚¬ 필요가 없습니다.
+# http://www.ranks.nl/stopwords/ì„ ê¸°ì¤€ìœ¼ë¡œ 만들어진 목ë¡ìž…니다.
+about
+are
+and
+you
+your
+them
+their
+com
+for
+from
+into
+how
+that
+the
+this
+was
+what
+when
+where
+who
+will
+with
+und
+the
+www
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/subscribermail.txt
new file mode 100644
index 000000000..9bd0d9011
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/subscribermail.txt
@@ -0,0 +1,15 @@
+안녕하세요!
+
+@TITLE@ ìœ„í‚¤ì˜ @PAGE@ 페ì´ì§€ê°€ 변경ë¬ìŠµë‹ˆë‹¤.
+
+변경 ë‚´ìš©ì€ ì•„ëž˜ì™€ 같습니다.
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+@DOKUWIKIURL@ì˜ ì´ íŽ˜ì´ì§€ 구ë…ì‹ ì²­ì„ í•´ì§€í•˜ë ¤ë©´ @NEWPAGE@를 방문하여
+'구ë…ì‹ ì²­ 해지'를 ì„ íƒí•˜ì„¸ìš”.
+
+--
+
+@DOKUWIKIURL@ì˜ DokuWikiê°€ ìžë™ìœ¼ë¡œ 만들어낸 ë©”ì¼ìž…니다.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/updateprofile.txt
new file mode 100644
index 000000000..5ea331c05
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/updateprofile.txt
@@ -0,0 +1,5 @@
+====== ê°œì¸ ì •ë³´ 수정 ======
+
+변경하고 ì‹¶ì€ í•­ëª©ì„ ìž…ë ¥í•˜ê¸° ë°”ëžë‹ˆë‹¤. ì‚¬ìš©ìž ì´ë¦„ì€ ë°”ê¾¸ê³  싶지 않겠지요?
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/uploadmail.txt
new file mode 100644
index 000000000..46c66a66b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/uploadmail.txt
@@ -0,0 +1,15 @@
+DokuWikiê°€ 파ì¼ì„ 업로드하였습니다.
+
+ìžì„¸í•œ ì •ë³´:
+
+íŒŒì¼ : @MEDIA@
+날짜 : @DATE@
+웹 브ë¼ìš°ì € : @BROWSER@
+IP 주소 : @IPADDRESS@
+호스트명 : @HOSTNAME@
+í¬ê¸° : @SIZE@
+íŒŒì¼ ì¢…ë¥˜ : @MIME@
+ì‚¬ìš©ìž : @USER@
+
+--
+ì´ ë©”ì¼ì€ @DOKUWIKIURL@ì˜ DokuWikiê°€ ìƒì„±í•œ ë©”ì¼ìž…니다. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/wordblock.txt
new file mode 100644
index 000000000..35e251187
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/wordblock.txt
@@ -0,0 +1,4 @@
+====== 스팸 차단 ======
+
+하나 í˜¹ì€ ê·¸ ì´ìƒì˜ ì°¨ë‹¨ëœ ë‹¨ì–´ê°€ í¬í•¨ë˜ì–´ 있으므로 변경 ë‚´ìš©ì´ ì €ìž¥ë˜ì§€ **않았습니다.** ë‚˜ìœ ë¡œë´‡ 같으니! 스팸ì´ë‚˜ 추가하려 하고! ë§Œì¼ ë¡œë´‡ì´ ì•„ë‹ˆë¼ ì‚¬ëžŒì´ê³ , 오류ë¼ê³  ìƒê°í•˜ì‹ ë‹¤ë©´, 관리ìžì—게 문ì˜í•˜ì‹­ì‹œì˜¤.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/admin.txt
new file mode 100644
index 000000000..cfd21b217
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/admin.txt
@@ -0,0 +1,4 @@
+====== Administration ======
+
+Below you can find a list of administrative tasks available in DokuWiki.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/backlinks.txt
new file mode 100644
index 000000000..5fa2ddfda
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/backlinks.txt
@@ -0,0 +1,4 @@
+====== Girêdanên paş ======
+
+Di rûpelên di vê lîsteyê de girêdanên ji vê rûpelê re hene.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/conflict.txt
new file mode 100644
index 000000000..e139dce26
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/conflict.txt
@@ -0,0 +1,6 @@
+====== Guhertoyeke nûtir heye ======
+
+Guhertoyeke nûtir a belgeya ku tu biguherînî heye. Sedema wê, bikarhênerkê/î din di hema demê de belge diguherîne.
+
+Examine the differences shown below thoroughly, then decide which version to keep. If you choose ''save'', your version will be saved. Hit ''cancel'' to keep the current version.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/denied.txt
new file mode 100644
index 000000000..3ac72820c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/denied.txt
@@ -0,0 +1,4 @@
+====== Permission Denied ======
+
+Sorry, you don't have enough rights to continue. Perhaps you forgot to login?
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/diff.txt
new file mode 100644
index 000000000..934ffb67e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/diff.txt
@@ -0,0 +1,4 @@
+====== Cuyawazî ======
+
+Li vê derê cuyawaziyên nav revîziyona hilbijartî û verziyona aniha tên nîşan dan.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/edit.txt
new file mode 100644
index 000000000..3a259dcf7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/edit.txt
@@ -0,0 +1,2 @@
+Rûpelê biguherîne û ''Tomar bike'' bitikîne. Ji bo sîntaksa wîkiyê binihêre [[wiki:syntax]]. Ji kerema xwe rûpelê bi tenê biguherîne, heke tû dikarî **baştir** bikî. Heke tu dixwazî çend tiştan biceribînî, biçe [[wiki:playground]]. Li vê derê tu dikarî her tiştî biceribînî.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/editrev.txt
new file mode 100644
index 000000000..e6995713b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/editrev.txt
@@ -0,0 +1,2 @@
+**You've loaded an old revision of the document!** If you save it, you will create a new version with this data.
+---- \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/index.txt
new file mode 100644
index 000000000..401404484
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/index.txt
@@ -0,0 +1,3 @@
+====== ÃŽndeks ======
+
+Ev îndeksa hemû rûpelên heyî ye. Rûpel li gora [[doku>namespaces|namespace]] hatin birêzkirin. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/lang.php
new file mode 100644
index 000000000..946954b98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/lang.php
@@ -0,0 +1,163 @@
+<?php
+/**
+ * kurdish language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @translator Erdal Ronahî <erdal.ronahi@gmail.com>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+
+$lang['btn_edit'] = 'Vê rûpelê biguherîne';
+$lang['btn_source'] = 'Çavkaniya rûpelê nîşan bide';
+$lang['btn_show'] = 'Rûpelê nîşan bide';
+$lang['btn_create'] = 'Vê rûpelê biafirîne';
+$lang['btn_search'] = 'Lêbigere';
+$lang['btn_save'] = 'Tomar bike';
+$lang['btn_preview']= 'Pêşdîtin';
+$lang['btn_top'] = 'Biçe ser';
+$lang['btn_newer'] = '<< nûtir';
+$lang['btn_older'] = 'kevntir >>';
+$lang['btn_revs'] = 'Revîziyonên kevn';
+$lang['btn_recent'] = 'Guherandinên dawî';
+$lang['btn_upload'] = 'Bar bike';
+$lang['btn_cancel'] = 'Betal';
+$lang['btn_index'] = 'ÃŽndeks';
+$lang['btn_secedit']= 'Biguherîne';
+$lang['btn_login'] = 'Têkeve';
+$lang['btn_logout'] = 'Derkeve';
+$lang['btn_admin'] = 'Admin';
+$lang['btn_update'] = 'Rojanekirin';
+$lang['btn_delete'] = 'Jê bibe';
+$lang['btn_back'] = 'PaÅŸ';
+$lang['btn_backlink'] = "Girêdanên paş";
+$lang['btn_backtomedia'] = 'Back to Mediafile Selection';
+$lang['btn_subscribe'] = 'Subscribe Changes';
+$lang['btn_unsubscribe'] = 'Unsubscribe Changes';
+
+$lang['loggedinas'] = 'Logged in as';
+$lang['user'] = 'Username';
+$lang['pass'] = 'Password';
+$lang['passchk'] = 'once again';
+$lang['remember'] = 'Remember me';
+$lang['fullname'] = 'Full name';
+$lang['email'] = 'E-Mail';
+$lang['register'] = 'Register';
+$lang['badlogin'] = 'Sorry, username or password was wrong.';
+
+$lang['regmissing'] = 'Sorry, you must fill in all fields.';
+$lang['reguexists'] = 'Sorry, a user with this login already exists.';
+$lang['regsuccess'] = 'The user has been created and the password was sent by email.';
+$lang['regsuccess2']= 'The user has been created.';
+$lang['regmailfail']= 'Looks like there was an error on sending the password mail. Please contact the admin!';
+$lang['regbadmail'] = 'The given email address looks invalid - if you think this is an error, contact the admin';
+$lang['regbadpass'] = 'The two given passwords are not identically, please try again.';
+$lang['regpwmail'] = 'Your DokuWiki password';
+$lang['reghere'] = 'You don\'t have an account yet? Just get one';
+
+$lang['txt_upload'] = 'Select file to upload';
+$lang['txt_filename'] = 'Enter wikiname (optional)';
+$lang['txt_overwrt'] = 'Overwrite existing file';
+$lang['lockedby'] = 'Currently locked by';
+$lang['lockexpire'] = 'Lock expires at';
+$lang['willexpire'] = 'Your lock for editing this page is about to expire in a minute.\nTo avoid conflicts use the preview button to reset the locktimer.';
+
+$lang['notsavedyet'] = 'Unsaved changes will be lost.\nReally continue?';
+
+$lang['rssfailed'] = 'An error occured while fetching this feed: ';
+$lang['nothingfound']= 'Tiştek nehat dîtin.';
+
+$lang['mediaselect'] = 'Mediafile Selection';
+$lang['fileupload'] = 'Mediafile Upload';
+$lang['uploadsucc'] = 'Upload successful';
+$lang['uploadfail'] = 'Upload failed. Maybe wrong permissions?';
+$lang['uploadwrong'] = 'Upload denied. This file extension is forbidden!';
+$lang['uploadexist'] = 'File already exists. Nothing done.';
+$lang['deletesucc'] = 'The file "%s" has been deleted.';
+$lang['deletefail'] = '"%s" couldn\'t be deleted - check permissions.';
+$lang['mediainuse'] = 'The file "%s" hasn\'t been deleted - it is still in use.';
+$lang['namespaces'] = 'Namespace';
+$lang['mediafiles'] = 'Available files in';
+
+$lang['reference'] = 'Referansa';
+$lang['ref_inuse'] = 'The file can\'t be deleted, because it\'s still used by the following pages:';
+$lang['ref_hidden'] = 'Some references are on pages you don\'t have permission to read';
+
+$lang['hits'] = 'Hits';
+$lang['quickhits'] = 'Matching pagenames';
+$lang['toc'] = 'Tabloya Navêrokê';
+$lang['current'] = 'current';
+$lang['yours'] = 'Your Version';
+$lang['diff'] = 'show differences to current version';
+$lang['line'] = 'Rêz';
+$lang['breadcrumb'] = 'Åžop';
+$lang['lastmod'] = 'Guherandina dawî';
+$lang['by'] = 'by';
+$lang['deleted'] = 'hat jê birin';
+$lang['created'] = 'hat afirandin';
+$lang['restored'] = 'old revision restored';
+$lang['summary'] = 'Kurteya guhartinê';
+
+$lang['mail_newpage'] = 'page added:';
+$lang['mail_changed'] = 'page changed:';
+
+$lang['js']['nosmblinks'] = "Linking to Windows shares only works in Microsoft Internet Explorer.\nYou still can copy and paste the link.";
+
+$lang['qb_bold'] = 'Bold Text';
+$lang['qb_italic'] = 'Italic Text';
+$lang['qb_underl'] = 'Underlined Text';
+$lang['qb_code'] = 'Code Text';
+$lang['qb_strike'] = 'Strike-through Text';
+$lang['qb_h1'] = 'Level 1 Headline';
+$lang['qb_h2'] = 'Level 2 Headline';
+$lang['qb_h3'] = 'Level 3 Headline';
+$lang['qb_h4'] = 'Level 4 Headline';
+$lang['qb_h5'] = 'Level 5 Headline';
+$lang['qb_link'] = 'Internal Link';
+$lang['qb_extlink'] = 'External Link';
+$lang['qb_hr'] = 'Horizontal Rule';
+$lang['qb_ol'] = 'Ordered List Item';
+$lang['qb_ul'] = 'Unordered List Item';
+$lang['qb_media'] = 'Add Images and other files';
+$lang['qb_sig'] = 'Insert Signature';
+
+$lang['js']['del_confirm']= 'Delete this entry?';
+
+$lang['admin_acl'] = 'Access Control List Management...';
+$lang['admin_register']= 'Add new user...';
+
+$lang['acl_group'] = 'Group';
+$lang['acl_user'] = 'User';
+$lang['acl_perms'] = 'Permissions for';
+$lang['page'] = 'Rûpel';
+$lang['namespace'] = 'Namespace';
+
+$lang['acl_perm1'] = 'Bixwîne';
+$lang['acl_perm2'] = 'Biguherîne';
+$lang['acl_perm4'] = 'Biafirîne';
+$lang['acl_perm8'] = 'Upload';
+$lang['acl_perm16'] = 'Jê bibe';
+$lang['acl_new'] = 'Add new Entry';
+
+$lang['metaedit'] = 'Edit Metadata';
+$lang['metasaveerr'] = 'Writing metadata failed';
+$lang['metasaveok'] = 'Metadata saved';
+$lang['img_backto'] = 'Back to';
+$lang['img_title'] = 'Title';
+$lang['img_caption'] = 'Caption';
+$lang['img_date'] = 'Date';
+$lang['img_fname'] = 'Filename';
+$lang['img_fsize'] = 'Size';
+$lang['img_artist'] = 'Photographer';
+$lang['img_copyr'] = 'Copyright';
+$lang['img_format'] = 'Format';
+$lang['img_camera'] = 'Camera';
+$lang['img_keywords']= 'Keywords';
+
+$lang['subscribe_success'] = 'Added %s to subscription list for %s';
+$lang['subscribe_error'] = 'Error adding %s to subscription list for %s';
+$lang['subscribe_noaddress']= 'There is no address associated with your login, you cannot be added to the subscription list';
+$lang['unsubscribe_success']= 'Removed %s from subscription list for %s';
+$lang['unsubscribe_error'] = 'Error removing %s from subscription list for %s';
+
+//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/locked.txt
new file mode 100644
index 000000000..af6347a96
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/locked.txt
@@ -0,0 +1,3 @@
+====== Page locked ======
+
+This page is currently locked for editing by another user. You have to wait until this user finishes editing or the lock expires.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/login.txt
new file mode 100644
index 000000000..2004ea198
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/login.txt
@@ -0,0 +1,4 @@
+====== Login ======
+
+You are currently not logged in! Enter your authentication credentials below to log in. You need to have cookies enabled to log in.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/mailtext.txt
new file mode 100644
index 000000000..44a3f6553
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/mailtext.txt
@@ -0,0 +1,17 @@
+A page in your DokuWiki was added or changed. Here are the details:
+
+Date : @DATE@
+Browser : @BROWSER@
+IP-Address : @IPADDRESS@
+Hostname : @HOSTNAME@
+Old Revision: @OLDPAGE@
+New Revision: @NEWPAGE@
+Edit Summary: @SUMMARY@
+User : @USER@
+
+@DIFF@
+
+
+--
+This mail was generated by DokuWiki at
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/newpage.txt
new file mode 100644
index 000000000..6d256f06e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/newpage.txt
@@ -0,0 +1,3 @@
+====== Ev rûpel hîn nehat nivîsandin ======
+
+Rûpela tu hatî hîn nehat nivîsandin. Tu dikarî niha dest bi nivîsandina vê rûpelê bikî. Ji bo vê, ''Dest pê bike'' bitikîne.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/norev.txt
new file mode 100644
index 000000000..0b21bf3f0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/norev.txt
@@ -0,0 +1,4 @@
+====== No such revision ======
+
+The specified revision doesn't exist. Use the ''Old revisions'' button for a list of old revisions of this document.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/preview.txt
new file mode 100644
index 000000000..da8f4cb44
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/preview.txt
@@ -0,0 +1,3 @@
+====== Pêşdîtin ======
+
+Li vê derê tu dikarî bibîni ku nivîsa te dê çawa xuya bibe. Ji bîr neke: Hîn **nehat tomar kirin**! \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/read.txt
new file mode 100644
index 000000000..9f56d81ad
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/read.txt
@@ -0,0 +1,2 @@
+This page is read only. You can view the source, but not change it. Ask your administrator if you think this is wrong.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/recent.txt
new file mode 100644
index 000000000..268c89ab2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/recent.txt
@@ -0,0 +1,3 @@
+====== Guherandinên dawî ======
+
+Ev rûpel di dema nêzîk de hatin guherandin.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/register.txt
new file mode 100644
index 000000000..b65683bc2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/register.txt
@@ -0,0 +1,4 @@
+====== Register as new user ======
+
+Fill in all the information below to create a new account in this wiki. Make sure you supply a **valid e-mail address** - your new password will be sent to it. The login name should be a valid [[doku>pagename|pagename]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/revisions.txt
new file mode 100644
index 000000000..dd5f35b8e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/revisions.txt
@@ -0,0 +1,4 @@
+====== Old Revisions ======
+
+These are the older revisons of the current document. To revert to an old revision, select it from below, click ''Edit this page'' and save it.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/searchpage.txt
new file mode 100644
index 000000000..6646228d5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/searchpage.txt
@@ -0,0 +1,5 @@
+====== Lêbigere ======
+
+Jêr encamên lêgerandina te tên nîşan dan. Heke tiştek nehatibe dîtin, tu dikarî dest bi nivîsandina rûpelekê nû bikî. Ji bo vê, ''Vê rûpelê biguherîne'' bitikîne.
+
+===== Encam ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/showrev.txt
new file mode 100644
index 000000000..3608de36b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/showrev.txt
@@ -0,0 +1,2 @@
+**This is an old revision of the document!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/stopwords.txt
new file mode 100644
index 000000000..bc6eb48ae
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/stopwords.txt
@@ -0,0 +1,29 @@
+# This is a list of words the indexer ignores, one word per line
+# When you edit this file be sure to use UNIX line endings (single newline)
+# No need to include words shorter than 3 chars - these are ignored anyway
+# This list is based upon the ones found at http://www.ranks.nl/stopwords/
+about
+are
+and
+you
+your
+them
+their
+com
+for
+from
+into
+how
+that
+the
+this
+was
+what
+when
+where
+who
+will
+with
+und
+the
+www
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/subscribermail.txt
new file mode 100644
index 000000000..0c8c2637f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/subscribermail.txt
@@ -0,0 +1,17 @@
+Hello!
+
+The page @PAGE@ in the @TITLE@ wiki changed.
+Here are the changes:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+To unsubscribe from this page log into the wiki at
+@DOKUWIKIURL@ then visit
+@NEWPAGE@
+and choose 'Unsubscribe Changes'.
+
+--
+This mail was generated by DokuWiki at
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/wordblock.txt
new file mode 100644
index 000000000..f0f7d759d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/wordblock.txt
@@ -0,0 +1,4 @@
+====== SPAM blocked ======
+
+Your changes were **not** saved because it contains one or more blocked words. If you tried to spam the Wiki -- Bad dog! If you think this is an error, contact the administrator of this Wiki.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/admin.txt
new file mode 100644
index 000000000..fd9ae9a87
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/admin.txt
@@ -0,0 +1,4 @@
+====== Administracija ======
+
+Žemiau matote veiksmų, kuriuos gali atlikti administratorius, sąrašą.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/backlinks.txt
new file mode 100644
index 000000000..ad0d5b83a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/backlinks.txt
@@ -0,0 +1,4 @@
+====== AtgalinÄ—s nuorodos ======
+
+Čia matote sąrašą puslapių, kuriuose yra nuorodos į esamą puslapį.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/conflict.txt
new file mode 100644
index 000000000..be0c5ff4f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/conflict.txt
@@ -0,0 +1,6 @@
+====== Egzistuoja naujesnÄ— versija ======
+
+Rasta naujesnė dokumento, kurį redagavote, versija. Tai atsitinka tada, kai kitas vartotojas modifikuoja dokumentą tuo metu, kai jūs jį redaguojate.
+
+Atidžiai peržvelkite žemiau esanÄius skirtumus ir nusprÄ™skite, kuriÄ… versijÄ… iÅ¡saugoti. Paspausdami ''IÅ¡saugoti'' iÅ¡saugosite saviÅ¡kÄ™ versijÄ…. Paspausdami ''AtÅ¡aukti'' iÅ¡saugosite esamÄ… versijÄ….
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/denied.txt
new file mode 100644
index 000000000..c25fb5f0c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/denied.txt
@@ -0,0 +1,4 @@
+====== Priėjimas uždraustas ======
+
+Jūs neturite reikiamų teisių, kad galėtumėte tęsti. Turbūt pamiršote prisijungti :-).
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/diff.txt
new file mode 100644
index 000000000..dc5e59f89
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/diff.txt
@@ -0,0 +1,4 @@
+====== Skirtumai ======
+
+ÄŒia matote skirtumus tarp pasirinktos versijos ir esamo dokumento.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/edit.txt
new file mode 100644
index 000000000..8fadf97ad
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/edit.txt
@@ -0,0 +1,2 @@
+Modifikuokite šį puslapį ir paspauskite ''IÅ¡saugoti''. Apie wiki sintaksÄ™ galite paskaityti [[wiki:syntax|Äia]]. PraÅ¡ome redaguoti šį puslapį tik tada, kai galite jį **patobulinti**. Jei tik norite iÅ¡bandyti wiki galimybes, praÅ¡ytume tai daryti [[playground:playground|Äia]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/editrev.txt
new file mode 100644
index 000000000..9e5eaeece
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/editrev.txt
@@ -0,0 +1,2 @@
+**Jūs naudojate seną šio dokumento versiją!** jei ją išsaugosite, su šiais duomenimis sukursite naują versiją.
+---- \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/index.txt
new file mode 100644
index 000000000..d13683c47
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/index.txt
@@ -0,0 +1,4 @@
+====== Indeksas ======
+
+ÄŒia matote visų Å¡iuo metu egzistuojanÄių puslapių sÄ…raÅ¡Ä…. Jie iÅ¡rÅ«Å¡iuoti pagal [[doku>namespaces|pavadinimÄ…]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/lang.php
new file mode 100644
index 000000000..151964e03
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/lang.php
@@ -0,0 +1,207 @@
+<?php
+/**
+ * lithuanian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Linas Valiukas <shirshegsm@gmail.com>
+ * @author Edmondas Girkantas <eg@zemaitija.net>
+ * @author Arūnas Vaitekūnas <aras@fan.lt>
+ * @author audrius.klevas@gmail.com
+ * @author Arunas Vaitekunas <aras@fan.lt>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '„';
+$lang['doublequoteclosing'] = '“';
+$lang['singlequoteopening'] = '‚';
+$lang['singlequoteclosing'] = '‘';
+$lang['apostrophe'] = '’';
+$lang['btn_edit'] = 'Redaguoti šį puslapį';
+$lang['btn_source'] = 'Parodyti puslapio kodÄ…';
+$lang['btn_show'] = 'Parodyti puslapį';
+$lang['btn_create'] = 'Sukurti šį puslapį';
+$lang['btn_search'] = 'Paieška';
+$lang['btn_save'] = 'IÅ¡saugoti';
+$lang['btn_preview'] = 'Peržiūra';
+$lang['btn_top'] = 'Į viršų';
+$lang['btn_newer'] = '<< naujesnÄ—';
+$lang['btn_older'] = 'senesnÄ— >>';
+$lang['btn_revs'] = 'Senos versijos';
+$lang['btn_recent'] = 'Naujausi keitimai';
+$lang['btn_upload'] = 'Atsiųsti bylą';
+$lang['btn_cancel'] = 'Atšaukti';
+$lang['btn_index'] = 'Indeksas';
+$lang['btn_secedit'] = 'Redaguoti';
+$lang['btn_login'] = 'Prisijungti';
+$lang['btn_logout'] = 'Atsijungti';
+$lang['btn_admin'] = 'Administracija';
+$lang['btn_update'] = 'Atnaujinti';
+$lang['btn_delete'] = 'IÅ¡trinti';
+$lang['btn_back'] = 'Atgal';
+$lang['btn_backlink'] = 'AtgalinÄ—s nuorodos';
+$lang['btn_backtomedia'] = 'Atgal į Mediabylos išsirinkimą';
+$lang['btn_subscribe'] = 'Užsisakyti keitimų prenumeratą';
+$lang['btn_unsubscribe'] = 'Atsisakyti keitimų prenumeratos';
+$lang['btn_subscribens'] = 'Užsakyti vardų srities prenumeratą';
+$lang['btn_unsubscribens'] = 'Atsisakyti vardų srities prenumeratos';
+$lang['btn_profile'] = 'Atnaujinti profilį';
+$lang['btn_reset'] = 'Atstata';
+$lang['btn_resendpwd'] = 'Išsiųsti naują slaptažodį';
+$lang['btn_draft'] = 'Redaguoti juodraštį';
+$lang['btn_recover'] = 'Atkurti juodraštį';
+$lang['btn_draftdel'] = 'Šalinti juodraštį';
+$lang['loggedinas'] = 'Prisijungęs kaip';
+$lang['user'] = 'Vartotojo vardas';
+$lang['pass'] = 'Slaptažodis';
+$lang['newpass'] = 'Naujas slaptažodis';
+$lang['oldpass'] = 'Patvirtinti esamą slaptažodį';
+$lang['passchk'] = 'dar kartÄ…';
+$lang['remember'] = 'Prisiminti mane';
+$lang['fullname'] = 'Visas vardas';
+$lang['email'] = 'El. pašto adresas';
+$lang['register'] = 'Registruotis';
+$lang['profile'] = 'Vartotojo profilis';
+$lang['badlogin'] = 'Nurodėte blogą vartotojo vardą arba slaptažodį.';
+$lang['minoredit'] = 'Nedidelis pataisymas';
+$lang['draftdate'] = 'Juodraštis automatiškai išsaugotas';
+$lang['nosecedit'] = 'Puslapis buvo kažkieno pataisytas, teksto dalies informacija tapo pasenusi, todėl pakrautas visas puslapis.';
+$lang['regmissing'] = 'Turite užpildyti visus laukus.';
+$lang['reguexists'] = 'Vartotojas su pasirinktu prisijungimo vardu jau egzistuoja.';
+$lang['regsuccess'] = 'Vartotojas sukurtas, slaptažodis išsiųstas el. paštu.';
+$lang['regsuccess2'] = 'Vartotojas sukurtas.';
+$lang['regmailfail'] = 'SiunÄiant slaptažodį el. paÅ¡tu įvyko klaida - susisiekite su administracija!';
+$lang['regbadmail'] = 'Nurodytas el. pašto adresas yra neteisingas - jei manote, kad tai klaida, susisiekite su administracija';
+$lang['regbadpass'] = 'Įvesti slaptažodžiai nesutampa, bandykite dar kartą.';
+$lang['regpwmail'] = 'Jūsų DokuWiki slaptažodis';
+$lang['reghere'] = 'Dar neužsiregistravote? Padarykite tai dabar';
+$lang['profna'] = 'Ši vikisvetainė neleidžia pakeisti profilio';
+$lang['profnochange'] = 'Nėra pakeitimų, todėl nėra ką atlikti.';
+$lang['profnoempty'] = 'TuÅ¡Äias vardo arba el. paÅ¡to adreso laukas nÄ—ra leidžiamas.';
+$lang['profchanged'] = 'Vartotojo profilis sÄ—kmingai atnaujintas.';
+$lang['pwdforget'] = 'Pamiršote slaptažodį? Gaukite naują';
+$lang['resendna'] = 'Ši vikisvetainė neleidžia persiųsti slaptažodžių.';
+$lang['resendpwd'] = 'Atsiųsti naują slaptažodį';
+$lang['resendpwdmissing'] = 'Jūs turite užpildyti visus laukus.';
+$lang['resendpwdnouser'] = 'Tokio vartotojo nėra duomenų bazėje.';
+$lang['resendpwdbadauth'] = 'Atsiprašome, bet šis tapatybės nustatymo kodas netinkamas. Įsitikinkite, kad panaudojote pilną patvirtinimo nuorodą.';
+$lang['resendpwdconfirm'] = 'Patvirtinimo nuoroda išsiųsta el. paštu.';
+$lang['resendpwdsuccess'] = 'Jūsų naujas slaptažodis buvo išsiųstas el. paštu.';
+$lang['license'] = 'Jei nenurodyta kitaip, Å¡io wiki turinys ginamas tokia licencija:';
+$lang['licenseok'] = 'Pastaba: Redaguodami šį puslapį jūs sutinkate jog jūsų turinys atitinka licencijavima pagal šią licenciją';
+$lang['txt_upload'] = 'IÅ¡sirinkite atsiunÄiamÄ… bylÄ…';
+$lang['txt_filename'] = 'Įveskite wikivardą (nebūtina)';
+$lang['txt_overwrt'] = 'PerraÅ¡yti egzistuojanÄiÄ… bylÄ…';
+$lang['lockedby'] = 'Užrakintas vartotojo';
+$lang['lockexpire'] = 'Užraktas bus nuimtas';
+$lang['willexpire'] = 'Šio puslapio redagavimo užrakto galiojimo laikas baigsis po minutės.\nNorėdami išvengti nesklandumų naudokite peržiūros mygtuką ir užraktas atsinaujins.';
+$lang['notsavedyet'] = 'Pakeitimai nebus išsaugoti.\nTikrai tęsti?';
+$lang['rssfailed'] = 'SiunÄiant šį feed\'Ä… įvyko klaida: ';
+$lang['nothingfound'] = 'Paieškos rezultatų nėra.';
+$lang['mediaselect'] = 'Mediabylos išsirinkimas';
+$lang['fileupload'] = 'Mediabylos atsiuntimas';
+$lang['uploadsucc'] = 'Atsiuntimas pavyko';
+$lang['uploadfail'] = 'Atsiuntimas nepavyko. Blogi priÄ—jimo leidimai??';
+$lang['uploadwrong'] = 'Atsiuntimas atmestas. Bylos tipas neleistinas';
+$lang['uploadexist'] = 'Tokia byla jau egzistuoja. Veiksmai atšaukti.';
+$lang['uploadbadcontent'] = 'Įkeltas turinys neatitinka %s failo išplėtimo.';
+$lang['uploadspam'] = 'Įkėlimas blokuotas pagal šiukšlintojų juodajį šąrašą.';
+$lang['uploadxss'] = 'Ä®kÄ—limas blokuotas greiÄiausiai dÄ—l netinkamo teksto.';
+$lang['uploadsize'] = 'Įkeltas failas per didelis (maks. %s)';
+$lang['deletesucc'] = 'Byla "%s" ištrinta.';
+$lang['deletefail'] = 'Byla "%s" negali būti ištrinta - patikrinkite leidimus.';
+$lang['mediainuse'] = 'Byla "%s" nebuvo ištrinta - ji vis dar naudojama.';
+$lang['namespaces'] = 'Pavadinimai';
+$lang['mediafiles'] = 'Prieinamos bylos';
+$lang['js']['keepopen'] = 'Pažymėjus palikti langą atvertą';
+$lang['js']['hidedetails'] = 'PaslÄ—pti Detales';
+$lang['js']['nosmblinks'] = 'Nurodos į "Windows shares" veikia tik su Microsoft Internet Explorer naršykle.
+Vis dėlto, jūs galite nukopijuoti šią nuorodą.';
+$lang['js']['mu_btn'] = 'Pateikite kelis failus vienu ypu';
+$lang['mediausage'] = 'Failo nuorodai užrašyti naudokite tokią sintaksę:';
+$lang['mediaview'] = 'Žiūrėti pirminį failą';
+$lang['mediaroot'] = 'pradžia (root)';
+$lang['mediaextchange'] = 'Failo galūnė pasikeitė iš .%s į .%s!';
+$lang['reference'] = 'PaminÄ—jimai';
+$lang['ref_inuse'] = 'Byla negali būti ištrinta, nes ji vis dar yra naudojama šiuose puslapiuose:';
+$lang['ref_hidden'] = 'Kai kurie paminėjimai yra puslapiuose, kurių jums neleista skaityti.';
+$lang['hits'] = 'Atidarymai';
+$lang['quickhits'] = 'Sutampantys pavadinimai';
+$lang['toc'] = 'Turinys';
+$lang['current'] = 'esamas';
+$lang['yours'] = 'Jūsų versija';
+$lang['diff'] = 'rodyti skirtumus tarp Å¡ios ir esamos versijos';
+$lang['diff2'] = 'Parodyti skirtumus tarp pasirinktų versijų';
+$lang['line'] = 'Linija';
+$lang['breadcrumb'] = 'Kelias';
+$lang['youarehere'] = 'JÅ«s esate Äia';
+$lang['lastmod'] = 'Keista';
+$lang['by'] = 'vartotojo';
+$lang['deleted'] = 'ištrintas';
+$lang['created'] = 'sukurtas';
+$lang['restored'] = 'atstatyta sena versija';
+$lang['external_edit'] = 'redaguoti papildomomis priemonÄ—mis';
+$lang['summary'] = 'Redaguoti santraukÄ…';
+$lang['noflash'] = '<a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> reikalingas šios medžiagos peržiūrai.';
+$lang['mail_newpage'] = '[DokuWiki] puslapis pridÄ—tas:';
+$lang['mail_changed'] = '[DokuWiki] puslapis pakeistas:';
+$lang['mail_new_user'] = 'naujas vartotojas:';
+$lang['mail_upload'] = 'failas įkeltas:';
+$lang['qb_bold'] = 'Pusjuodis';
+$lang['qb_italic'] = 'Kursyvas';
+$lang['qb_underl'] = 'Pabrauktas';
+$lang['qb_code'] = 'Kodas';
+$lang['qb_strike'] = 'Perbraukta';
+$lang['qb_h1'] = 'Pirmo lygio antraštė';
+$lang['qb_h2'] = 'Antro lygio antraštė';
+$lang['qb_h3'] = 'TreÄio lygio antraÅ¡tÄ—';
+$lang['qb_h4'] = 'Ketvirto lygio antraštė';
+$lang['qb_h5'] = 'Penkto lygio antraštė';
+$lang['qb_link'] = 'VidinÄ— nuoroda';
+$lang['qb_extlink'] = 'IÅ¡orinÄ— nuoroda';
+$lang['qb_hr'] = 'Horizontali linija';
+$lang['qb_ol'] = 'Numeruotas sąrašas';
+$lang['qb_ul'] = 'Nenumetuotas sąrašas';
+$lang['qb_media'] = 'PaveikslÄ—liai ir kitos bylos';
+$lang['qb_sig'] = 'Įterpti parašą';
+$lang['qb_smileys'] = 'Å ypsenÄ—lÄ—s';
+$lang['qb_chars'] = 'Specialūs simboliai';
+$lang['js']['del_confirm'] = 'Ar tikrai ištrinti pažymėtą(us) įrašą(us)?';
+$lang['admin_register'] = 'Sukurti naujÄ… vartotojÄ…';
+$lang['metaedit'] = 'Redaguoti metaduomenis';
+$lang['metasaveerr'] = 'Nepavyko išsaugoti metaduomenų';
+$lang['metasaveok'] = 'Metaduomenys išsaugoti';
+$lang['img_backto'] = 'Atgal į';
+$lang['img_title'] = 'Pavadinimas';
+$lang['img_caption'] = 'Antraštė';
+$lang['img_date'] = 'Data';
+$lang['img_fname'] = 'Bylos pavadinimas';
+$lang['img_fsize'] = 'Dydis';
+$lang['img_artist'] = 'Fotografas';
+$lang['img_copyr'] = 'AutorinÄ—s teisÄ—s';
+$lang['img_format'] = 'Formatas';
+$lang['img_camera'] = 'Kamera';
+$lang['img_keywords'] = 'Raktiniai žodžiai';
+$lang['subscribe_success'] = '%s užsakyta "%s" prenumerata';
+$lang['subscribe_error'] = '%s užsakant "%s" prenumeratą įvyko klaida';
+$lang['subscribe_noaddress'] = 'Jūs nesatė nurodęs el. pašto adreso, todėl negalima Jums užsakyti prenumeratos';
+$lang['unsubscribe_success'] = '%s ištrintas iš "%s" prenumeratos';
+$lang['unsubscribe_error'] = '%s trinant iš "%s" prenumeratos įvyko klaida';
+$lang['authmodfailed'] = 'Bloga vartotojo tapatumo nustatymo konfigūracija. Praneškite apie tai savo administratoriui.';
+$lang['authtempfail'] = 'Vartotojo tapatumo nustatymas laikinai nepasiekiamas. Jei ši situacija kartojasi, tai praneškite savo administratoriui.';
+$lang['i_chooselang'] = 'Pasirinkite kalbÄ…';
+$lang['i_installer'] = 'DokuWiki Instaliatorius';
+$lang['i_wikiname'] = 'Wiki vardas';
+$lang['i_enableacl'] = 'Įjungti ACL (rekomenduojama)';
+$lang['i_superuser'] = 'Supervartotojas';
+$lang['i_problems'] = 'Instaliavimo metu buvo klaidų, kurios pateiktos žemiau. Tęsti negalima, kol nebus pašalintos priežastys.';
+$lang['mu_gridname'] = 'Failo vardas';
+$lang['mu_gridsize'] = 'Dydis';
+$lang['mu_gridstat'] = 'Statusas';
+$lang['mu_namespace'] = 'Vardų sritis';
+$lang['mu_browse'] = 'Browse';
+$lang['mu_toobig'] = 'perdidelis';
+$lang['mu_ready'] = 'paruošta įkrovimui';
+$lang['mu_done'] = 'užbaigta';
+$lang['mu_fail'] = 'nepavyko';
+$lang['mu_authfail'] = 'sesija nutraukta';
+$lang['mu_filetypes'] = 'Leidžiami failų tipai';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/locked.txt
new file mode 100644
index 000000000..3f6d000f6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/locked.txt
@@ -0,0 +1,3 @@
+====== Puslapis užrakintas ======
+
+Šis puslapis yra apsaugotas (užrakintas) nuo kitų vartotojų pakeitimų. Norėdami redaguoti puslapį, turėsite palaukti, kol kitas vartotojas baigs tai daryti arba „užrakto“ galiojimo laikas pasibaigs.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/login.txt
new file mode 100644
index 000000000..2a6e21db2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/login.txt
@@ -0,0 +1,5 @@
+====== Prisijungimas ======
+
+Šiuo metu jūs nesate prisijungęs. Įveskite savo prisijungimo duomenis žemiau. „Cookies“ palaikymas jūsų naršyklėje turi būti įjungtas.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/mailtext.txt
new file mode 100644
index 000000000..63b2f591e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/mailtext.txt
@@ -0,0 +1,18 @@
+Jūsų DokuWiki buvo sukurtas arba pakeistas puslapis. Detalės:
+
+Data : @DATE@
+Naršyklė : @BROWSER@
+IP adresas : @IPADDRESS@
+Host'as : @HOSTNAME@
+Sena versija: @OLDPAGE@
+Nauja versija: @NEWPAGE@
+Redagavimo aprašas: @SUMMARY@
+Vartotojas : @USER@
+
+Pakeitimo diff'as:
+
+@DIFF@
+
+
+--
+Šis laiškas buvo sugeneruotas DokuWiki (@DOKUWIKIURL@).
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/newpage.txt
new file mode 100644
index 000000000..c28e30bd4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/newpage.txt
@@ -0,0 +1,4 @@
+====== Å is puslapis dar neegzistuoja ======
+
+Nuoroda, kurią jūs paspaudėte, atvedė į dar neegzistuojantį puslapį. Jūs galite jį sukurti paspausdami ''Sukurti šį puslapį'' mygtuką.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/norev.txt
new file mode 100644
index 000000000..028ebe7f2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/norev.txt
@@ -0,0 +1,5 @@
+====== Tokios versijos nÄ—ra ======
+
+Nurodyta versija neegzistuoja. NorÄ—dami pamatyti visas dokumento versijas, paspauskite ''Senos versijos'' mygtukÄ…
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/preview.txt
new file mode 100644
index 000000000..2d24e2164
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/preview.txt
@@ -0,0 +1,5 @@
+====== Peržiūra ======
+
+Čia matote, kaip atrodo jūsų pakeitimai. **Pakeitimai dar nėra išsaugoti!**
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/read.txt
new file mode 100644
index 000000000..91ea7e656
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/read.txt
@@ -0,0 +1,3 @@
+Šį puslapį galima tik skaityti. Jūs galite peržvelgti jo kodą (source), bet negalite jo keisti. Jei manote, kad tai klaida - susisiekite su administratoriumi.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/recent.txt
new file mode 100644
index 000000000..506538629
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/recent.txt
@@ -0,0 +1,5 @@
+====== Naujausi keitimai ======
+
+Å ie puslapiai buvo neseniai pakeisti.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/register.txt
new file mode 100644
index 000000000..f595826f3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/register.txt
@@ -0,0 +1,4 @@
+====== Naujo vartotojo registracija ======
+
+NorÄ—dami tapti nauju registruotu Å¡io tinklalapio vartotoju, užpildykite žemiau esanÄiÄ… formÄ…. BÅ«tinai turite nurodyti **veikiantį el. paÅ¡to adresÄ…**, nes jÅ«sų slaptažodis bus iÅ¡siųstas pastaruoju adresu. Prisijungimo vardas turÄ—tų bÅ«ti sukurtas pagal [[doku>pagename|puslapio pavadinimo]] taisykles.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/resendpwd.txt
new file mode 100644
index 000000000..753827108
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/resendpwd.txt
@@ -0,0 +1,3 @@
+====== Siųsti naują slaptažodį ======
+
+Naujo slaptažodžio gavimui, užpildykite visus žemiau esanÄius laukus. Naujas slaptažodis bus atsiųstas į jÅ«sų užregistruotÄ… el. paÅ¡to adresÄ…. Vartotojo vardas turi bÅ«ti toks pat kaip ir wiki sistemoje.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/revisions.txt
new file mode 100644
index 000000000..9999767bd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/revisions.txt
@@ -0,0 +1,4 @@
+====== Senos versijos ======
+
+Čia matote senas šio dokumento versijas. Jei norite atstatyti dokumentą į jo senesniąją versiją, paspauskite "Redaguoti šį puslapį" prie norimos versijos ir išsaugokite ją.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/searchpage.txt
new file mode 100644
index 000000000..a83a6a58a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/searchpage.txt
@@ -0,0 +1,5 @@
+====== Paieška ======
+
+Žemiau matote Jūsų atliktos paieškos rezultatus. Jeigu neradote to, ko ieškojote, galite sukurti naują puslapį šiuo pavadinimu paspausdami "Redaguoti šį puslapį".
+
+===== Rezultatai ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/showrev.txt
new file mode 100644
index 000000000..ed774244a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/showrev.txt
@@ -0,0 +1,2 @@
+**ÄŒia yra sena dokumento versija!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/subscribermail.txt
new file mode 100644
index 000000000..8f101bcd7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/subscribermail.txt
@@ -0,0 +1,17 @@
+Sveiki!
+
+Pranešame, kad Wiki tinklalapyje @TITLE@ pakeistas puslapis @PAGE@.
+Å tai pakeitimai:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+NorÄ—dami nutraukti Å¡iÄ… prenumeratÄ…, apsilankykite
+@DOKUWIKIURL@, tada atverkite
+@NEWPAGE@
+ir išsirinkite 'Atsisakyti keitimų prenumeratos'.
+
+--
+Šis laiškas sugeneruotas DokuWiki (@DOKUWIKIURL@).
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/updateprofile.txt
new file mode 100644
index 000000000..7ede1a00a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/updateprofile.txt
@@ -0,0 +1,4 @@
+====== Redaguoti savo profilį ======
+
+Užpildykite tik tuos laukus, kuriuos norite pakeisti. Vartotojo vardo keisti nebūtina.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/wordblock.txt
new file mode 100644
index 000000000..43ac79bbf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/wordblock.txt
@@ -0,0 +1,4 @@
+====== NESPAM'INK! ======
+
+JÅ«sų pakeitimai **nebuvo iÅ¡saugoti**, nes juose rasta vienas ar daugiau užblokuotų žodžių. Jeigu manote, kad tai klaida, susisiekite su administracija. Jeigu sugalvojote Äia spam'inti - pyzdink nachui iÅ¡ Äia, byby bled!
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/admin.txt
new file mode 100644
index 000000000..3b37fa389
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/admin.txt
@@ -0,0 +1,6 @@
+====== Administrēšana ======
+
+DokuWiki pieejamas Å¡Ädas administrÄ“Å¡anas iespÄ“jas:
+
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/adminplugins.txt
new file mode 100644
index 000000000..e8d208d24
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/adminplugins.txt
@@ -0,0 +1 @@
+===== Papildu moduļi ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/backlinks.txt
new file mode 100644
index 000000000..19bebf7b2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/backlinks.txt
@@ -0,0 +1,5 @@
+====== SaistÄ«tÄs lapas ======
+
+NorÄde uz Å¡o lapu ir atrodama dokumentos:
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/conflict.txt
new file mode 100644
index 000000000..5aa6442c9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/conflict.txt
@@ -0,0 +1,8 @@
+====== Ir jaunÄka versija ======
+
+Tevis labotajam dokumentam jau ir jaunÄka versija. TÄ gadÄs, ja cits lietotÄjs tavas laboÅ¡anas laikÄ ir paguvis veikt savus labojumus.
+
+RÅ«pÄ«gi pÄrlÅ«ko Å¡eit parÄdÄ«tÄs atÅ¡Ä·irÄ«bas un tad izlem, kuru variantu paturÄ“t. Ja nospiedÄ«si ''SaglabÄt'', saglabÄsies tavs teksts. Ja nospiedÄ«si ''Atlikt'' paliks paÅ¡reizÄ“jais variants.
+
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/denied.txt
new file mode 100644
index 000000000..c7df462c8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/denied.txt
@@ -0,0 +1,6 @@
+====== Piekļuve aizliegta ======
+
+Atvaino, tev nav tiesÄ«bu turpinÄt. VarbÅ«t aizmirsi ielogoties?
+
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/diff.txt
new file mode 100644
index 000000000..40e1b5405
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/diff.txt
@@ -0,0 +1,7 @@
+====== Atšķirības ======
+
+NorÄdÄ«tais vecais variants no patreizÄ“jÄs lapas atÅ¡Ä·iras ar:
+
+
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/draft.txt
new file mode 100644
index 000000000..525f7cbb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/draft.txt
@@ -0,0 +1,5 @@
+====== Atrasts melnraksta fails ======
+
+IepriekÅ¡Ä“jÄ Å¡Ä«s lapas laboÅ¡ana nav pabeigta. DokuWiki darba laikÄ automÄtiski saglabÄja melnrakstu, kuru tagad var labot tÄlÄk. ZemÄk redzami iepriekÅ¡Ä“jÄs laboÅ¡anas dati.
+
+Nolem, vai vajag //atjaunot// zuduÅ¡os labojumus, //dzÄ“st// saglabÄto melnrakstu vai //atlikt// laboÅ¡anu.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/edit.txt
new file mode 100644
index 000000000..9da6f2d23
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/edit.txt
@@ -0,0 +1,2 @@
+Labo lapu un uzklikÅ¡Ä·ini uz ''SaglabÄt''. Par lietojamo sintaksi skaties rakstu [[wiki:syntax]]. LÅ«dzu labo tika tad, ja vari lapu **uzlabot**. Ja gribi tikai kaut ko izmÄ“Ä£inÄt, izmanto [[wiki:playground|smilÅ¡ukasti]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/editrev.txt
new file mode 100644
index 000000000..6fa7a4c05
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/editrev.txt
@@ -0,0 +1 @@
+---- **Tu skaties vecu dokumenta versiju!** Ja to saglabÄsi, tad izveidosies jauns dokuments ar Å¡o veco saturu. ----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/index.txt
new file mode 100644
index 000000000..6baa2a3e2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/index.txt
@@ -0,0 +1,4 @@
+====== RÄdÄ«tÄjs ======
+
+Visu pieejamo lapu rÄdÄ«tÄjs. SakÄrtots pÄ“c [[doku>namespaces|sadaļÄm]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/install.html
new file mode 100644
index 000000000..9967d2edd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/install.html
@@ -0,0 +1,12 @@
+<p>Å Ä« lapa palÄ«dz <a href="http://dokuwiki.org">Dokuwiki</a>pirmajÄ instalÄcijÄ un konfigurÄ“Å¡anÄ.
+VairÄk par instalatoru var lasÄ«t tÄ
+<a href="http://dokuwiki.org/installer">documentÄcijas lapÄ</a>.</p>
+
+<p>DokuWiki lapu un ar to saistÄ«to datu (piem.: attÄ“lu, meklÄ“Å¡anas indeksu, veco versiju utt.) glabÄÅ¡anai lieto parastus failus. Lai Dokuwiki veiksmÄ«gi darbotos <strong>vajag</strong> rakstÄ«Å¡anas tiesÄ«bas direktorijÄs, kur Å¡ie faili glabÄjas. Instalators tiesÄ«bas nomainÄ«t nespÄ“j. Tas parasti jums jÄizdara komandrindÄ vai ar FTP vadÄ«bas paneli (piem. cPanel).</p>
+
+<p>Instalators konfigurÄ“s DokuWiki <acronym title="access control list">ACL</acronym> lietoÅ¡anai, kas ļauj administratoram ielogoties un piekļūt DokuWiki administrÄ“Å¡anas izvÄ“lnei, lai instalÄ“tu moduļus, pÄrvaldÄ«tu lietotÄjus, notiektu piekļuves tiesÄ«bas Wiki lapÄm un mainÄ«tu DokuWiki konfigurÄciju.
+Tas nav vajadzÄ«gs, lai DokuWiki darbotos, bet ar to var vieglÄk administrÄ“t.</p>
+
+<p>PieredzÄ“juÅ¡iem lietotÄjiem ar Ä«paÅ¡Äm prasÄ«bÄm jÄmeklÄ“ sÄ«kÄkas ziņas
+<a href="http://dokuwiki.org/install">uzstÄdÄ«Å¡anas instrukcijÄ</a>
+un <a href="http://dokuwiki.org/config">konfigurēšanas padomos</a>.</p> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/lang.php
new file mode 100644
index 000000000..5de7a0cc6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/lang.php
@@ -0,0 +1,244 @@
+<?php
+/**
+ * latvian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Aivars Miška <allefm@gmail.com>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '„';
+$lang['doublequoteclosing'] = '“';
+$lang['singlequoteopening'] = '‚';
+$lang['singlequoteclosing'] = '‘';
+$lang['apostrophe'] = '’';
+$lang['btn_edit'] = 'Labot lapu';
+$lang['btn_source'] = 'ParÄdÄ«t lapas kodu';
+$lang['btn_show'] = 'ParÄdÄ«t lapu';
+$lang['btn_create'] = 'Izveidot lapu';
+$lang['btn_search'] = 'Meklēt';
+$lang['btn_save'] = 'SaglabÄt';
+$lang['btn_preview'] = 'Priekšskats';
+$lang['btn_top'] = 'Atpakaļ uz sÄkumu';
+$lang['btn_newer'] = '<< jaunÄki';
+$lang['btn_older'] = 'vecÄki >>';
+$lang['btn_revs'] = 'VecÄs versijas';
+$lang['btn_recent'] = 'JaunÄkie grozÄ«jumi';
+$lang['btn_upload'] = 'AugÅ¡upielÄdÄ“t';
+$lang['btn_cancel'] = 'Atlikt';
+$lang['btn_index'] = 'RÄdÄ«tÄjs';
+$lang['btn_secedit'] = 'Labot';
+$lang['btn_login'] = 'Ieiet';
+$lang['btn_logout'] = 'Iziet';
+$lang['btn_admin'] = 'Administrēt';
+$lang['btn_update'] = 'Atjaunot';
+$lang['btn_delete'] = 'Dzēst';
+$lang['btn_back'] = 'Atpakaļ';
+$lang['btn_backlink'] = 'NorÄdes uz lapu';
+$lang['btn_backtomedia'] = 'Atpakaļ uz mēdiju failu izvēli';
+$lang['btn_subscribe'] = 'Abonēt izmaiņu paziņojumus';
+$lang['btn_unsubscribe'] = 'Atteikties no izmaiņu paziņojumiem';
+$lang['btn_subscribens'] = 'Abonēt nodaļas izmaiņu paziņojumus';
+$lang['btn_unsubscribens'] = 'Atteikties no nodaļas izmaiņu paziņojumiem';
+$lang['btn_profile'] = 'Labot savu profilu';
+$lang['btn_reset'] = 'Atsaukt izmaiņas';
+$lang['btn_resendpwd'] = 'Nosūtīt jaunu paroli';
+$lang['btn_draft'] = 'Labot melnrakstu';
+$lang['btn_recover'] = 'Atjaunot melnrakstu';
+$lang['btn_draftdel'] = 'Dzēst melnrakstu';
+$lang['btn_revert'] = 'Atjaunot';
+$lang['loggedinas'] = 'Pieteicies kÄ';
+$lang['user'] = 'LietotÄjvÄrds';
+$lang['pass'] = 'Parole';
+$lang['newpass'] = 'JaunÄ parole';
+$lang['oldpass'] = 'AtkÄrto patreizÄ“jo paroli';
+$lang['passchk'] = 'vēlreiz';
+$lang['remember'] = 'Atceries mani';
+$lang['fullname'] = 'Pilns vÄrds';
+$lang['email'] = 'E-pasts';
+$lang['register'] = 'Reģistrēties';
+$lang['profile'] = 'LietotÄja vÄrds';
+$lang['badlogin'] = 'Atvaino, lietotÄjvÄrds vai parole aplama.';
+$lang['minoredit'] = 'SÄ«ki labojumi';
+$lang['draftdate'] = 'Melnraksts automÄtiski saglabÄts';
+$lang['nosecedit'] = 'Lapa pa Å¡o laiku ir mainÄ«jusies, sekcijas informÄcija novecojusi. IelÄdÄ“ta lapas pilnÄs versija.';
+$lang['regmissing'] = 'Atvaino, jÄaizpilda visas ailes.';
+$lang['reguexists'] = 'Atvaino, tÄds lietotÄjs jau ir.';
+$lang['regsuccess'] = 'LietotÄjs izveidots. Parole nosÅ«tÄ«ta pa pastu.';
+$lang['regsuccess2'] = 'LietotÄjs izveidots.';
+$lang['regmailfail'] = 'Šķiet, ka ir problēmas nosūtīt pastu. Lūdzu sazinies ar administratoru!';
+$lang['regbadmail'] = 'UzdotÄ epasta adrese izskatÄs aplama. Ja tas nav tiesa, sazinies ar administratoru.';
+$lang['regbadpass'] = 'Abas ierakstÄ«tÄs paroles nav vienÄdas, lÅ«dzu atkÄrto.';
+$lang['regpwmail'] = 'Tava DokuWiki parole';
+$lang['reghere'] = 'Tev vēl nav sava konta? Izveido!';
+$lang['profna'] = 'Labot profilu nav iespējams';
+$lang['profnochange'] = 'Izmaiņu nav. Nav, ko darīt.';
+$lang['profnoempty'] = 'Bez vÄrda vai e-pasta adreses nevar.';
+$lang['profchanged'] = 'Profils veiksmīgi izlabots.';
+$lang['pwdforget'] = 'Aizmirsi paroli? Saņem jaunu';
+$lang['resendna'] = 'Paroļu izsÅ«tÄ«Å¡anu nepiedÄvÄju.';
+$lang['resendpwd'] = 'NosÅ«tÄ«t jaunu paroli lietotÄjam';
+$lang['resendpwdmissing'] = 'Atvaino, jÄizpilda visas ailes.';
+$lang['resendpwdnouser'] = 'Atvaino, tÄda lietotÄja nav.';
+$lang['resendpwdbadauth'] = 'Atvaino, Å¡is autorizÄcijas kods nav derÄ«gs. PÄrliecinies, ka lietoji pilnu apstiprinÄÅ¡anas adresi.';
+$lang['resendpwdconfirm'] = 'ApstiprinÄÅ¡anas adrese nosÅ«tÄ«ta pa epastu.';
+$lang['resendpwdsuccess'] = 'JaunÄ parole nosÅ«tÄ«ta pa e-pastu.';
+$lang['license'] = 'Ja nav norÄdÄ«ts citÄdi, viki saturs pieejams ar Å¡Ädas licenzes noteikumiem:';
+$lang['licenseok'] = 'IevÄ“ro: Labojot lapu, tu piekrÄ«ti Å¡Ädiem licenzes noteikumiem.';
+$lang['searchmedia'] = 'MeklÄ“tais faila vÄrds: ';
+$lang['searchmedia_in'] = 'Meklēt iekš %s';
+$lang['txt_upload'] = 'NorÄdi augÅ¡upielÄdÄ“jamo failu';
+$lang['txt_filename'] = 'Ievadi vikivÄrdu (nav obligÄts)';
+$lang['txt_overwrt'] = 'AizstÄt esoÅ¡o failu';
+$lang['lockedby'] = 'Patlaban bloÄ·Ä“jis ';
+$lang['lockexpire'] = 'BloÄ·Ä“jums beigsies ';
+$lang['willexpire'] = 'Tavs bloÄ·Ä“jums uz Å¡o lapu pÄ“c minÅ«tes beigsies.\nLai izvairÄ«tos no konflikta, nospied IepriekÅ¡apskata pogu\n un bloÄ·Ä“juma laiku sÄks skaitÄ«t no jauna.';
+$lang['notsavedyet'] = 'Veiktas bet nav saglabÄtas izmaiņas.\nVai tieÅ¡Äm tÄs nevajag?';
+$lang['rssfailed'] = 'Kļūda saņemot saturu no ';
+$lang['nothingfound'] = 'Nekas nav atrasts.';
+$lang['mediaselect'] = 'Mēdiju faila izvēle';
+$lang['fileupload'] = 'MÄ“diju faila augÅ¡upielÄde';
+$lang['uploadsucc'] = 'VeiksmÄ«gi ielÄdÄ“ts';
+$lang['uploadfail'] = 'IelÄdes kļūme. VarbÅ«t aplamas tiesÄ«bas?';
+$lang['uploadwrong'] = 'IelÄde aizliegta. Neatļauts faila paplaÅ¡inÄjums';
+$lang['uploadexist'] = 'Neko nedarīju, jo fails jau ir.';
+$lang['uploadbadcontent'] = 'AugÅ¡upielÄdÄ“tÄ saturs neatbilst faila paplaÅ¡inÄjumam %s.';
+$lang['uploadspam'] = 'AugÅ¡upielÄde bloÄ·Ä“ta ar melno sarakstu.';
+$lang['uploadxss'] = 'AugÅ¡upielÄde bloÄ·Ä“ta iespÄ“jama slikta satura dēļ.';
+$lang['uploadsize'] = 'AugÅ¡up lÄdÄ“tais fails pÄrÄk liels. Maksimums ir %s.';
+$lang['deletesucc'] = 'Fails "%s" dzēsts.';
+$lang['deletefail'] = 'Nevar dzÄ“st "%s". PÄrbaudi tiesÄ«bas.';
+$lang['mediainuse'] = 'Fails "%s" nav izdzēsts, to lieto.';
+$lang['namespaces'] = 'Nodaļas';
+$lang['mediafiles'] = 'Pieejamie faili';
+$lang['js']['searchmedia'] = 'Meklēt failus';
+$lang['js']['keepopen'] = 'Pēc faila izvēles logu paturēt atvērtu';
+$lang['js']['hidedetails'] = 'Slēpt detaļas';
+$lang['js']['nosmblinks'] = 'Saites uz Windows resursiem darbojas tikai Microsoft Internet Explorer.
+Protams, ka vari saiti kopÄ“t un iespraust citÄ programmÄ.';
+$lang['js']['linkwiz'] = 'Saišu vednis';
+$lang['js']['linkto'] = 'Saite uz: ';
+$lang['js']['del_confirm'] = 'Dzēst šo šķirkli?';
+$lang['js']['mu_btn'] = 'AugÅ¡uplÄdÄ“t uzreiz vairÄkus failus.';
+$lang['mediausage'] = 'Atsaucei uz failu lietot Å¡Ädu sintaksi:';
+$lang['mediaview'] = 'SkatÄ«t oriÄ£inÄlo failu';
+$lang['mediaroot'] = 'sakne';
+$lang['mediaupload'] = 'AugÅ¡upielÄdÄ“t failu patreizÄ“jÄ nodaļÄ. Lai izveidotu apakÅ¡nodaļu, pieraksti to, atdalot ar kolu, pirms augÅ¡upielÄdÄ“jamÄ faila vÄrda.';
+$lang['mediaextchange'] = 'Faila paplaÅ¡inÄjums mainÄ«ts no .%s uz .%s!';
+$lang['reference'] = 'NorÄdes uz failu';
+$lang['ref_inuse'] = 'Failu nevar dzÄ“st, jo izmanto Å¡Ädas lapas:';
+$lang['ref_hidden'] = 'Dažas norÄdes ir lapÄs, ko nav tiesÄ«bu skatÄ«t';
+$lang['hits'] = 'Apmeklējumi';
+$lang['quickhits'] = 'AtbilstoÅ¡Äs lapas';
+$lang['toc'] = 'Satura rÄdÄ«tÄjs';
+$lang['current'] = 'patlaban';
+$lang['yours'] = 'Tava versija';
+$lang['diff'] = 'atšķirības no patreizējas versijas';
+$lang['diff2'] = 'norÄdÄ«to versiju atÅ¡Ä·irÄ«bas';
+$lang['line'] = 'Rinda';
+$lang['breadcrumb'] = 'Ceļš';
+$lang['youarehere'] = 'Tu atrodies Å¡eit';
+$lang['lastmod'] = 'Labota';
+$lang['by'] = ', labojis';
+$lang['deleted'] = 'dzēsts';
+$lang['created'] = 'izveidots';
+$lang['restored'] = 'vecÄ versija atjaunota';
+$lang['external_edit'] = 'ÄrpussistÄ“mas labojums';
+$lang['summary'] = 'AnotÄcija';
+$lang['noflash'] = 'Lai attēlotu lapas saturu, vajag <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a>.';
+$lang['mail_newpage'] = 'lapa pievienota:';
+$lang['mail_changed'] = 'lapa mainīta:';
+$lang['mail_new_user'] = 'Jauns lietotÄjs:';
+$lang['mail_upload'] = 'augÅ¡upielÄdÄ“tais fails:';
+$lang['qb_bold'] = 'TrekninÄjums';
+$lang['qb_italic'] = 'Kursīvs';
+$lang['qb_underl'] = 'Pasvītrojums';
+$lang['qb_code'] = 'Vienplatuma burti';
+$lang['qb_strike'] = 'PÄrsvÄ«trots teksts';
+$lang['qb_h1'] = '1. līmeņa virsraksts';
+$lang['qb_h2'] = '2. līmeņa virsraksts';
+$lang['qb_h3'] = '3. līmeņa virsraksts';
+$lang['qb_h4'] = '4. līmeņa virsraksts';
+$lang['qb_h5'] = '5. līmeņa virsraksts';
+$lang['qb_h'] = 'Virsraksts';
+$lang['qb_hs'] = 'Izraudzīties virsrakstu';
+$lang['qb_hplus'] = 'LielÄks virsraksts';
+$lang['qb_hminus'] = 'MazÄks virsraksts';
+$lang['qb_hequal'] = 'TÄds pats virsraksts';
+$lang['qb_link'] = 'Iekšēja saite';
+$lang['qb_extlink'] = 'Ārēja saite';
+$lang['qb_hr'] = 'HorizontÄla lÄ«nija';
+$lang['qb_ol'] = 'Numurēts saraksts';
+$lang['qb_ul'] = 'Nenumurēts saraksts';
+$lang['qb_media'] = 'Pielikt attēlus un citus failus.';
+$lang['qb_sig'] = 'Ievietot parakstu';
+$lang['qb_smileys'] = 'Emotikoni';
+$lang['qb_chars'] = 'ĪpaÅ¡Äs zÄ«mes';
+$lang['upperns'] = 'vienu nodaļu lÄ«meni augstÄk';
+$lang['admin_register'] = 'Pievienot jaunu lietotÄju';
+$lang['metaedit'] = 'Labot metadatus';
+$lang['metasaveerr'] = 'Metadati nav saglabÄti';
+$lang['metasaveok'] = 'Metadati saglabÄti';
+$lang['img_backto'] = 'Atpakaļ uz';
+$lang['img_title'] = 'Virsraksts';
+$lang['img_caption'] = 'Apraksts';
+$lang['img_date'] = 'Datums';
+$lang['img_fname'] = 'Faila vÄrds';
+$lang['img_fsize'] = 'Izmērs';
+$lang['img_artist'] = 'FotogrÄfs';
+$lang['img_copyr'] = 'Autortiesības';
+$lang['img_format'] = 'FormÄts';
+$lang['img_camera'] = 'FotoaparÄts';
+$lang['img_keywords'] = 'AtslÄ“gvÄrdi';
+$lang['subscribe_success'] = '%s pievienots %s abonentu sarakstam';
+$lang['subscribe_error'] = 'Kļūme pievienojot %s %s abonentu sarakstam';
+$lang['subscribe_noaddress'] = 'Nav zinÄma adrese, ko pievienot abonentu sarakstam';
+$lang['unsubscribe_success'] = ' %s svītrots no %s abonentu saraksta';
+$lang['unsubscribe_error'] = 'Kļūme svītrojot %s no %s abonentu saraksta';
+$lang['authmodfailed'] = 'Aplami konfigurÄ“ta lietotÄju autentifikÄcija. LÅ«dzo ziņo Wiki administratoram.';
+$lang['authtempfail'] = 'LietotÄju autentifikÄcija paÅ¡laik nedarbojas. Ja tas turpinÄs ilgstoÅ¡i, lÅ«duz ziņo Wiki administratoram.';
+$lang['i_chooselang'] = 'Izvēlies valodu';
+$lang['i_installer'] = 'DokuWiki instalÄ“tÄjs';
+$lang['i_wikiname'] = 'Wiki vÄrds';
+$lang['i_enableacl'] = 'Lietot ACL (ieteikts)';
+$lang['i_superuser'] = 'Superuser';
+$lang['i_problems'] = 'InstalÄ“tÄjs atrada zemÄk minÄ“tÄs problÄ“mas. KamÄ“r tÄs nenovÄ“rÅ¡, nav iespÄ“jam turpinÄt.';
+$lang['i_modified'] = 'DroÅ¡Ä«bas nolÅ«kos Å¡is skripts darbosies tika ar jaunu nemodificÄ“tu Dokuwiki instalÄciju.
+Vai nu no jauna jÄatarhivÄ“ faili no lejupielÄdÄ“tÄs pakas vai jÄraugÄs pÄ“c padoma pilnÄ Dokuwiki instalÄcijas instrukcijÄ <a href="http://dokuwiki.org/install"></a>';
+$lang['i_funcna'] = 'PHP funkcija <code>%s</code> nav pieejama. VarbÅ«t jÅ«su servera Ä«paÅ¡nieks to kÄda iemesla dēļ atslÄ“dzis?';
+$lang['i_phpver'] = 'JÅ«su PHP versija <code>%s</code> ir par vecu. Vajag versiju <code>%s</code>. Atjaunojiet savu PHP instalÄciju.';
+$lang['i_permfail'] = 'Dokuwiki nevar ierakstÄ«t <code>%s</code>. JÄlabo direktorijas tiesÄ«bas!';
+$lang['i_confexists'] = '<code>%s</code> jau ir';
+$lang['i_writeerr'] = 'Nevar izveidot <code>%s</code>. JÄpÄrbauda direktorijas/faila tiesÄ«bas un fails jÄizveido paÅ¡am.';
+$lang['i_badhash'] = 'nepazīstams vai izmainīts dokuwiki.php fails (hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - neatļauta vai tukša vērtība';
+$lang['i_success'] = 'KonfigurÄ“Å¡ana veiksmÄ«gi pabeigta. Tagad vari nodzÄ“st failu install.php. TÄlÄk turpini <a href="doku.php">savÄ jaunajÄ DokuWiki</a>.';
+$lang['i_failure'] = 'Rakstot konfigurÄcijas failu, gadÄ«jÄs dažas kļūmes. Pirms lieto <a href="doku.php">savu jauno DokuWiki</a>, tÄs varbÅ«t jÄizlabo.';
+$lang['i_policy'] = 'SÄkotnÄ“jÄ ACL politika';
+$lang['i_pol0'] = 'AtvÄ“rts Wiki (raksta, lasa un augÅ¡upielÄdÄ“ ikviens)';
+$lang['i_pol1'] = 'Publisks Wiki (lasa ikviens, raksta un augÅ¡upielÄdÄ“ reÄ£istrÄ“ti lietotÄji)';
+$lang['i_pol2'] = 'SlÄ“gts Wiki (raksta, lasa un augÅ¡upielÄdÄ“ tikai reÄ£istrÄ“ti lietotÄji)';
+$lang['i_retry'] = 'AtkÄrtot';
+$lang['mu_intro'] = 'Å eit var augÅ¡upielÄdÄ“t uzreiz vairÄku failus. UzklikÅ¡Ä·ini PÄrlÅ«kot pogai, lai tos ieliktu rindÄ. Nospied AugÅ¡upielÄdÄ“t, kad rinda sastÄdÄ«ta.';
+$lang['mu_gridname'] = 'Faila vÄrds';
+$lang['mu_gridsize'] = 'Izmērs';
+$lang['mu_gridstat'] = 'Statuss';
+$lang['mu_namespace'] = 'Nodaļa';
+$lang['mu_browse'] = 'PÄrlÅ«kot';
+$lang['mu_toobig'] = 'par lielu';
+$lang['mu_ready'] = 'gatavs augÅ¡upielÄdei';
+$lang['mu_done'] = 'pabeigts';
+$lang['mu_fail'] = 'neizdevÄs';
+$lang['mu_authfail'] = 'sesijas laiks iztecējis';
+$lang['mu_progress'] = '@PCT@% augÅ¡upielÄdÄ“ts';
+$lang['mu_filetypes'] = 'Atļautie failu tipi';
+$lang['mu_info'] = 'faili ir augÅ¡upielÄdÄ“ti.';
+$lang['mu_lasterr'] = 'PÄ“dÄ“jÄ Ä·Ä¼Å«da.';
+$lang['recent_global'] = 'Tu skati izmaiņas nodaÄ¼Ä <b>%s</b>. Ir iespÄ“jams <a href="%s">skatÄ«t jaunÄkos grozÄ«jums visÄ viki</a>. ';
+$lang['years'] = 'pirms %d gadiem';
+$lang['months'] = 'pirms %d mēnešiem';
+$lang['weeks'] = 'pirms % nedēļÄm';
+$lang['days'] = 'pirms %d dienÄm';
+$lang['hours'] = 'pirms %d stundÄm';
+$lang['minutes'] = 'pirms %d minūtēm';
+$lang['seconds'] = 'pirms %d sekundēm';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/locked.txt
new file mode 100644
index 000000000..7d57ce98b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/locked.txt
@@ -0,0 +1,5 @@
+====== Lapa aizņemta ======
+
+Lapa aizņemta, to patlaban labo cits lietotÄjs. Tev ir jÄgaida, kamÄ“r to pabeigs labot vai arÄ« iztecÄ“s labotÄjam atvÄ“lÄ“tais laiks.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/login.txt
new file mode 100644
index 000000000..a98d21d1a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/login.txt
@@ -0,0 +1,3 @@
+====== Login ======
+Tu neesi ielogojies! Ievadi savu lietotÄjvÄrdu un paroli. PÄrlÅ«kprogrammai jÄpieņem //cookies//.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/mailtext.txt
new file mode 100644
index 000000000..cd4a5d6d8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/mailtext.txt
@@ -0,0 +1,18 @@
+TavÄ DokuWiki pievienota vai labota lapa. Å eit ir sÄ«kÄkas ziņas:
+
+Datums : @DATE@
+PÄrlÅ«ks : @BROWSER@
+IP adrese : @IPADDRESS@
+Dators : @HOSTNAME@
+VecÄ versija : @OLDPAGE@
+JaunÄ versija: @NEWPAGE@
+AnotÄcija : @SUMMARY@
+LietotÄjs : @USER@
+
+@DIFF@
+
+
+--
+Vēstuli nosūtījusi DokuWiki programma no
+@DOKUWIKIURL@ datora
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/newpage.txt
new file mode 100644
index 000000000..a4a05fdc5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/newpage.txt
@@ -0,0 +1,5 @@
+====== Šķirklis vēl nav izveidots ======
+
+Tu izvēlējies saiti uz vēl neizveidotu šķirkli. Ja tiesības ļauj, vari to izveidot, uzklikšķinot uz pogas ''Izveidot lapu''.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/norev.txt
new file mode 100644
index 000000000..b7c46245f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/norev.txt
@@ -0,0 +1,5 @@
+====== Nav Å¡Ädas versijas ======
+
+NorÄdÄ«tÄs lapas versijas nav. Lieto pogu ''VecÄs versijas'', lai redzÄ“tu dokumenta veco versiju sarakstu.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/preview.txt
new file mode 100644
index 000000000..c3d618a12
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/preview.txt
@@ -0,0 +1,5 @@
+====== Priekšskats ======
+
+Tavs teksts izskatÄ«sies Å¡Ädi. IevÄ“ro, tas vÄ“l **nav saglabÄts** !
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/pwconfirm.txt
new file mode 100644
index 000000000..308ca29a1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/pwconfirm.txt
@@ -0,0 +1,14 @@
+Sveiki, @FULLNAME@!
+
+KÄds pieprasÄ«jis jaunu paroli tavam @TITLE@ kontam
+@DOKUWIKIURL@ sistÄ“mÄ.
+
+Ja paroli neesi prasījis, ignorē šo vēstuli.
+
+Lai apstiprinÄtu, ka esi paroli pieprasÄ«jis lieto norÄdÄ«to saiti.
+
+@CONFIRM@
+
+--
+Šo vēstuli ģenerējusi DokuWiki no
+@DOKUWIKIURL \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/read.txt
new file mode 100644
index 000000000..876e53cb8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/read.txt
@@ -0,0 +1,4 @@
+Å Ä« lapa ir tikai lasÄma. Vari apskatÄ«t izejas kodu, bet nevari to mainÄ«t. Ja domÄ, ka tas nav pareizi, vaicÄ administratoram.
+
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/recent.txt
new file mode 100644
index 000000000..70cf1aa1e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/recent.txt
@@ -0,0 +1,8 @@
+====== JaunÄkie grozÄ«jumi ======
+
+JaunÄkie labojumi ir:
+
+
+
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/register.txt
new file mode 100644
index 000000000..5e6477d37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/register.txt
@@ -0,0 +1,4 @@
+====== Jauna lietotÄja reÄ£istrÄcija ======
+
+Lai izveidotu jaunu kontu, aizpildi visas prasÄ«tÄs ailes. PÄrliecinies, ka uzdod **derÄ«gu pasta adresi**, jo jauno paroli tev nosÅ«tÄ«s pa pastu. LietotÄjvÄrdam jÄatbilst [[doku>pagename|wiki vÄrdu nosacÄ«jumiem]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/registermail.txt
new file mode 100644
index 000000000..50fd8a92b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/registermail.txt
@@ -0,0 +1,14 @@
+ReÄ£istrÄ“ts jauns lietotÄjs. TÄ dati:
+
+LietotÄjvÄrds : @NEWUSER@
+Pilns vÄrds : @NEWNAME@
+E-pasts : @NEWEMAIL@
+
+Datums : @DATE@
+PÄrlÅ«ks : @BROWSER@
+IP aderese : @IPADDRESS@
+Datora vÄrds: @HOSTNAME@
+
+--
+Šo vēstuli ģenerējis DokuWiki no
+@DOKUWIKIURL \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/resendpwd.txt
new file mode 100644
index 000000000..3f4597ac0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/resendpwd.txt
@@ -0,0 +1,3 @@
+====== Nosūtīt jaunu paroli ======
+
+Azipildi zemÄk prasÄ«to, lai saņemtu savam kontam jaunu paroli. Jauno paroli nosÅ«tÄ«s uz reÄ£istrÄ“to e-pasta adresi. LietotÄja vÄrdam jÄbÅ«t tavam //wiki sistÄ“mas// lietotÄjavÄrdam.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/revisions.txt
new file mode 100644
index 000000000..51ad8495d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/revisions.txt
@@ -0,0 +1,5 @@
+====== VecÄs versijas ======
+
+Dokumentam ir Å¡Ädas vecÄs versijas. Lai atgrieztos pie vecÄ varianta, izvÄ“lies to no saraksta, uzklikÅ¡Ä·ini uz "Labot Å¡o lapu" un saglabÄ to.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/searchpage.txt
new file mode 100644
index 000000000..22eb55f04
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/searchpage.txt
@@ -0,0 +1,4 @@
+====== Meklēšana ======
+
+Te vari redzÄ“t meklÄ“Å¡anas rezultÄtus. Ja neatradi meklÄ“to, nospiežot pogu "Labot lapu", vari izveidot jaunu lapu ar tevis meklÄ“tajiem atslÄ“gvÄrdiem nosaukumÄ.
+===== Atrasts =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/showrev.txt
new file mode 100644
index 000000000..7d5c0fa07
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/showrev.txt
@@ -0,0 +1,2 @@
+**Å Ä« ir veca dokumenta versija!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/stopwords.txt
new file mode 100644
index 000000000..846c86946
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/stopwords.txt
@@ -0,0 +1,48 @@
+# Å is ir to vÄrdu sarakstus, kurus indeksÄ“tÄjs neņem vÄ“rÄ. Katru vÄrdu savÄ rindÄ!
+# Labojot failu ievÄ“ro, ja jÄlieto UNIX rindu aplauzumi (single newline)
+# Nevajag likt sarakstÄ par 3 burtiem Ä«sÄkus vÄrdus, tos tÄ pat neņem vÄ“rÄ
+# Angļu valodai saraksts ņemts no http://www.ranks.nl/stopwords/
+gar
+par
+pÄr
+pret
+starp
+caur
+uz
+aiz
+apakš
+bez
+iz
+kopš
+no
+pēc
+pie
+pirms
+priekš
+uz
+virs
+zem
+apakšpus
+Ärpus
+augšpus
+iekšpus
+lejpus
+otrpus
+Å¡aipus
+viņpus
+virspus
+dēļ
+labad
+pēc
+līdz
+pa
+vai
+jÄ
+nē
+kaut
+nav
+itin
+jo
+taÄu
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/subscribermail.txt
new file mode 100644
index 000000000..1395009f0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/subscribermail.txt
@@ -0,0 +1,23 @@
+Sveiki!
+
+@TITLE@ wiki ir mainījusies lapa @PAGE@ .
+
+Atšķirības ir:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Datums : @DATE@
+LietotÄjs : @USER@
+Izmaiņu anotÄcija: @SUMMARY@
+VecÄ versijan: @OLDPAGE@
+JaunÄ versija: @NEWPAGE@
+
+Lai atteiktos no Å¡Ä«m vÄ“stulÄ“m, ielogojies wiki sistÄ“mÄ
+@DOKUWIKIURL@, tad apmeklē @NEWPAGE@
+uz izvēlies 'Atteikties no izmaiņu paziņojumiem'.
+
+--
+Vestuli izveidoja
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/updateprofile.txt
new file mode 100644
index 000000000..12fbd8de4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/updateprofile.txt
@@ -0,0 +1,8 @@
+====== Atjaunot sava konta datus ======
+
+JÄaizpilda tikai tie lauki, kuru saturu vÄ“lies mainÄ«t. Nav iespÄ“jams mainÄ«t savu lietotÄjvÄrdu.
+
+
+
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/uploadmail.txt
new file mode 100644
index 000000000..5975d5bd0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/uploadmail.txt
@@ -0,0 +1,14 @@
+Fails augÅ¡upielÄdÄ“ts DokuWiki. SÄ«kÄkas ziņas:
+
+Fails : @MEDIA@
+Datums : @DATE@
+PÄrlÅ«ks : @BROWSER@
+IP adrese : @IPADDRESS@
+Datora vÄrds : @HOSTNAME@
+Izmērs : @SIZE@
+MIME tips : @MIME@
+LietotÄjs : @USER@
+
+--
+Vēstuli nosūtījusi DokuWiki programma no
+@DOKUWIKIURL@ datora. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/wordblock.txt
new file mode 100644
index 000000000..aa7051c8d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/wordblock.txt
@@ -0,0 +1,4 @@
+====== SPAMs bloÄ·Ä“ts ======
+
+Tavas izmaiņas **nav** saglabÄtas, jo satur vienu vai vairÄkus aizliegtos vÄrdus. Ja uzskati, ka tÄ ir kļūda, sazinies ar administratoru.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/admin.txt
new file mode 100644
index 000000000..2c4fc3f6c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/admin.txt
@@ -0,0 +1,4 @@
+====== Administration ======
+
+Hitanao eo ambany lisitry ny asa fanaovana admin misy amin'ny DokuWiki.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/backlinks.txt
new file mode 100644
index 000000000..c625e6504
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/backlinks.txt
@@ -0,0 +1,5 @@
+====== Verindrohy ======
+
+Lisitr'ireo pejy misy rohy manondro amin'ity pejy ity.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/conflict.txt
new file mode 100644
index 000000000..96b369e39
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/conflict.txt
@@ -0,0 +1,6 @@
+====== A newer version exists ======
+
+Efa misy kinova vaovao ny tahirin-kevitra novainao. Rehefa misy olona hafa nanova koa nandritra anao nanova no mitranga ny toy izao.
+
+Jereo ny tsy fitoviany miseho etsy ambany ireo, avy eo safidio izay kinova tianao hotazonina. Raha misafidy ny bokotra ''Raketo'' ianao, dia ny nataonao no horaketina. Ny bokotra ''Aoka ihany'' tsindriana raha hitazonana izay kinova misy ao.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/denied.txt
new file mode 100644
index 000000000..edf20f1a1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/denied.txt
@@ -0,0 +1,4 @@
+====== Tsy tafiditra ======
+
+Miala tsiny fa tsy manana alalana hanohizana mankany ianao. Angamba hadinonao ny niditra.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/diff.txt
new file mode 100644
index 000000000..8d7d69b45
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/diff.txt
@@ -0,0 +1,4 @@
+====== Tsy fitoviana ======
+
+Ireto ny maha-samihafa ny kinova nosafidiana sy ny kinovan'ny pejy amin'izao.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/edit.txt
new file mode 100644
index 000000000..2cde9deb1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/edit.txt
@@ -0,0 +1,2 @@
+Rehefa avy manova ny pejy dia tsindrio ny bokotra ''Raketo''. Jereo ny [[wiki:syntax]] misy ny fomba fanoratana. Raha misy zavatra tianao handramana dia ianaro ao amin'ny [[wiki:playground]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/editrev.txt
new file mode 100644
index 000000000..a6ff5ba32
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/editrev.txt
@@ -0,0 +1,2 @@
+**Kinovan'ny pejy taloha no nosokafanao!** Raha raketinao io, dia hanamboatra kinova vaovao miaraka amin'io ianao.
+---- \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/index.txt
new file mode 100644
index 000000000..614fd6434
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/index.txt
@@ -0,0 +1,4 @@
+====== Index ======
+
+Ity misy index mahasarona ireo pejy misy milahatra arakaraka ny [[doku>namespaces|namespaces]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/lang.php
new file mode 100644
index 000000000..bae292363
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/lang.php
@@ -0,0 +1,135 @@
+<?php
+/**
+ * mg language file
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+
+$lang['btn_edit'] = 'Hanova ny pejy';
+$lang['btn_source'] = 'Asehoy ny source';
+$lang['btn_show'] = 'Asehoy ny pejy';
+$lang['btn_create'] = 'Amboary ity pejy';
+$lang['btn_search'] = 'Hikaroka';
+$lang['btn_save'] = 'Raketo';
+$lang['btn_preview']= 'Topi-maso';
+$lang['btn_top'] = 'Ho ery ambony';
+$lang['btn_newer'] = '<< taloha kokoa';
+$lang['btn_older'] = 'taoriana kokoa >>';
+$lang['btn_revs'] = 'Kinova taloha';
+$lang['btn_recent'] = 'Fiovana farany';
+$lang['btn_upload'] = 'Alefaso';
+$lang['btn_cancel'] = 'Aoka ihany';
+$lang['btn_index'] = 'Index';
+$lang['btn_secedit']= 'Edit';
+$lang['btn_login'] = 'Hiditra';
+$lang['btn_logout'] = 'Hivoaka';
+$lang['btn_admin'] = 'Admin';
+$lang['btn_update'] = 'Update';
+$lang['btn_delete'] = 'Fafao';
+$lang['btn_back'] = 'Miverina';
+$lang['btn_backtomedia'] = 'Fitsongana fichier Media';
+
+$lang['loggedinas'] = 'Anaranao:';
+$lang['user'] = 'Anarana';
+$lang['pass'] = 'Alahidy';
+$lang['passchk'] = 'Ataovy indray';
+$lang['remember'] = 'Tsarovy';
+$lang['fullname'] = 'Anarana feno';
+$lang['email'] = 'Imailaka';
+$lang['register'] = 'Hisoratra';
+$lang['badlogin'] = 'Miala tsiny fa misy diso ny anarana na ny alahidy.';
+
+$lang['regmissing'] = 'Tsy maintsy fenoina ny saha rehetra.';
+$lang['reguexists'] = 'Indrisy fa efa nisy namandrika io anarana io.';
+$lang['regsuccess'] = 'Voaforona ny kaontinao, halefa any imailaka ny alahidy.';
+$lang['regsuccess2']= 'Voaforona ilay kaonty.';
+$lang['regmailfail']= 'Ohatra ny nisy olana ny nandefasana imailaka. Miangavy anao hilaza ny Admin!';
+$lang['regbadmail'] = 'Toa tsy mandeha ny imailaka nomenao - Raha heverinao fa erreur io dia ilazao ny admin';
+$lang['regbadpass'] = 'Tsy mitovy ny alahidy roa nomenao, avereno indray.';
+$lang['regpwmail'] = 'Ny alahidy Wiki-nao';
+$lang['reghere'] = 'Mbola tsy manana kaonty ianao? Manaova vaovao';
+
+$lang['txt_upload'] = 'Misafidiana rakitra halefa';
+$lang['txt_filename'] = 'Ampidiro ny anaran\'ny wiki (tsy voatery)';
+$lang['txt_overwrt'] = 'Fafana izay rakitra efa misy?';
+$lang['lockedby'] = 'Mbola voahidin\'i';
+$lang['lockexpire'] = 'Afaka ny hidy amin\'ny';
+$lang['willexpire'] = 'Efa ho lany fotoana afaka iray minitra ny hidy ahafahanao manova ny pejy.\nMba hialana amin\'ny conflit dia ampiasao ny bokotra topi-maso hamerenana ny timer-n\'ny hidy.';
+
+$lang['notsavedyet'] = 'Misy fiovana tsy voarakitra, ho very izany ireo.\nAzo antoka fa hotohizana?';
+$lang['rssfailed'] = 'An error occured while fetching this feed: ';
+$lang['nothingfound']= 'Tsy nahitana n\'inon\'inona.';
+
+$lang['mediaselect'] = 'Safidy rakitra Media';
+$lang['fileupload'] = 'Fandefasana rakitra Media';
+$lang['uploadsucc'] = 'Voalefa soa aman-tsara';
+$lang['uploadfail'] = 'Tsy lasa ilay izy. Mety tsy fananana alalana?';
+$lang['uploadwrong'] = 'Nolavina ny lefa. Voarara io extension-na rakitra io!';
+$lang['uploadexist'] = 'Efa misy ilay rakitra. Tsy nisy inona natao.';
+$lang['deletesucc'] = 'Voafafa ny rakitra "%s" .';
+$lang['deletefail'] = 'Tsy afaka nofafana ny "%s" - Hamarino ny alalana.';
+$lang['mediainuse'] = 'Tsy voafafa ny rakitra "%s" - mbola misy mampiasa io.';
+$lang['namespaces'] = 'Namespaces';
+$lang['mediafiles'] = 'Rakitra misy amin\'ny';
+
+$lang['reference'] = 'References for';
+$lang['ref_inuse'] = 'Tsy afaka fafana io rakitra io, satria mbola ampiasain\'ireto pejy ireto:';
+$lang['ref_hidden'] = 'Misy references vitsivitsy amina pejy tsy anananao alalana hamaky';
+
+$lang['hits'] = 'Hits';
+$lang['quickhits'] = 'Anaram-pejy mifanaraka';
+$lang['toc'] = 'Fizahan-takila';
+$lang['current'] = 'current';
+$lang['yours'] = 'Kinova-nao';
+$lang['diff'] = 'Asehoy ny tsy fitoviana amin\'ny kinova amin\'izao';
+$lang['line'] = 'Andalana';
+$lang['breadcrumb'] = 'Taiza ianao';
+$lang['lastmod'] = 'Novaina farany:';
+$lang['by'] = '/';
+$lang['deleted'] = 'voafafa';
+$lang['created'] = 'Voamboatra';
+$lang['restored'] = 'Naverina tamin\'ny kinova taloha';
+$lang['summary'] = 'Fanovana teo';
+
+$lang['mail_newpage'] = 'pejy niampy:';
+$lang['mail_changed'] = 'pejy niova:';
+
+$lang['js']['nosmblinks'] = "rohy mankamin\'ny fizarana Windows dia amin\'ny Microsoft Internet Explorer ihany no miasa.\nAzo atao ihany anefa ny manao dika-petaka ny rohy.";
+
+$lang['qb_bold'] = 'Matavy';
+$lang['qb_italic'] = 'Mandry';
+$lang['qb_underl'] = 'Voatsipika';
+$lang['qb_code'] = 'Code programa';
+$lang['qb_strike'] = 'Disoina';
+$lang['qb_h1'] = 'Lohateny laharana 1';
+$lang['qb_h2'] = 'Lohateny laharana 2';
+$lang['qb_h3'] = 'Lohateny laharana 3';
+$lang['qb_h4'] = 'Lohateny laharana 4';
+$lang['qb_h5'] = 'Lohateny laharana 5';
+$lang['qb_link'] = 'Rohy ato anatiny';
+$lang['qb_extlink'] = 'Rohy mivoaka';
+$lang['qb_hr'] = 'Tsipika marindrano';
+$lang['qb_ol'] = 'Tanisa milahatra';
+$lang['qb_ul'] = 'Tanisa tsy milahatra';
+$lang['qb_media'] = 'Hanampy sary na rakitra hafa';
+$lang['qb_sig'] = 'Manisy sonia';
+
+$lang['js']['del_confirm']= 'Hofafana ilay andalana?';
+
+$lang['admin_acl'] = 'Fitantanana ACL (Access Control List)...';
+$lang['admin_register']= 'Ampio mpampiasa vaovao...';
+
+$lang['acl_group'] = 'Vondrona';
+$lang['acl_user'] = 'Mpampiasa';
+$lang['acl_perms'] = 'Alalana @';
+$lang['page'] = 'Pejy';
+$lang['namespace'] = 'Namespace';
+
+$lang['acl_perm1'] = 'Mamaky';
+$lang['acl_perm2'] = 'Manova';
+$lang['acl_perm4'] = 'Manamboatra';
+$lang['acl_perm8'] = 'Mandefa rakitra';
+$lang['acl_perm16'] = 'Mamafa';
+$lang['acl_new'] = 'Ampio andalana vaovao';
+
+//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/locked.txt
new file mode 100644
index 000000000..5705659a3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/locked.txt
@@ -0,0 +1,4 @@
+====== Pejy voahidy ======
+
+Mbola ovain'olona hafa ity pejy ity ka voahidy aloha. Andraso kely ho vitany ny azy, na ho lany fotoana ilay hidy.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/login.txt
new file mode 100644
index 000000000..1ea3facb0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/login.txt
@@ -0,0 +1,4 @@
+====== Login ======
+
+Mbola tsy niditra ianao izao! Ampidiro eto ambany ny anarana sy ny alahidy. Ilaina manaiky cookies ny navigateur-nao raha hiditra.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/mailtext.txt
new file mode 100644
index 000000000..ca919345a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/mailtext.txt
@@ -0,0 +1,17 @@
+Nisy pejy niova tao amin'ny wiky. Ireto ny antsipiriany:
+
+Date : @DATE@
+Browser : @BROWSER@
+Adiresy IP : @IPADDRESS@
+Hostname : @HOSTNAME@
+Taloha : @OLDPAGE@
+Vaovao : @NEWPAGE@
+Fiovana : @SUMMARY@
+Novain'i : @USER@
+
+@DIFF@
+
+
+--
+Ity imailaka ity dia navoakan'ny wiki tao amin'ny
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/newpage.txt
new file mode 100644
index 000000000..a998caf28
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/newpage.txt
@@ -0,0 +1,3 @@
+====== Mbola tsy misy an'io pejy io ======
+
+Nanindry rohy manondro pejy mbola tsy misy ianao. Afaka amboarinao io pejy io, tsindrio ny bokotra ''Amboary ity pejy''
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/norev.txt
new file mode 100644
index 000000000..71ecb9ba4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/norev.txt
@@ -0,0 +1,4 @@
+====== Tsy misy io kinova io ======
+
+Tsy misy ny kinova voalaza. Ampiasao ny bokotra ''Kinova taloha'' hampisehoana ireo karazana fanovana natao tamin'ity pejy ity.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/preview.txt
new file mode 100644
index 000000000..52019cd73
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/preview.txt
@@ -0,0 +1,5 @@
+====== Topi-maso ======
+
+Topi-maso ahafahanao mijery ny fivoakan'ny soratra nataonao ity. Tandremo: Mbola **tsy voarakitra** io!
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/read.txt
new file mode 100644
index 000000000..0fe51f4a2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/read.txt
@@ -0,0 +1,3 @@
+Vakiana fotsiny ity pejy ity. Afaka jerenao ny source, saingy tsy afaka ovainao. Anontanio ny admin raha heverinao fa tsy mety izany.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/recent.txt
new file mode 100644
index 000000000..4bc8245a7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/recent.txt
@@ -0,0 +1,5 @@
+====== Fiovana farany ======
+
+Ireto pejy ireto no niova vao haingana.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/register.txt
new file mode 100644
index 000000000..618c1f97e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/register.txt
@@ -0,0 +1,5 @@
+====== Hanokatra kaonty vaovao ======
+
+Fenoy ny saha rehetra eto ambany raha hanokatra kaonty amin'ity wiki ity. Hamarino fa adiresy imailaka mandeha no omenao - halefa any mantsy ny alahidy. Ny anarana dia tsy maintsy manaraka ny fepetran'ny [[doku>pagename|pagename]].
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/revisions.txt
new file mode 100644
index 000000000..72704587a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/revisions.txt
@@ -0,0 +1,5 @@
+====== Kinova taloha ======
+
+Ireto ny kinovan'ny pejy taloha. Raha te hamerina kinova taloha ianao, tsongay eo ambany izy hisokatra, avy eo tsindrio ny bokotra ''Hanova ny pejy'' ary ''Soraty''.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/searchpage.txt
new file mode 100644
index 000000000..68c6271df
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/searchpage.txt
@@ -0,0 +1,7 @@
+====== Karoka ======
+
+Ireto ambany ireto ny valin'ny fikarohanao.
+
+Raha tsy nahita izay notadiavinao ianao, dia afaka mamorona pejy vaovao avy amin'ny teny nanaovanao fikarohana; Ampiasao ny bokotra ''Hanova ny pejy''.
+
+===== Vokatry ny fikarohana ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/showrev.txt
new file mode 100644
index 000000000..92690f4dd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/showrev.txt
@@ -0,0 +1,2 @@
+**Ity dia kinovan'ny pejy taloha!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/wordblock.txt
new file mode 100644
index 000000000..581d67d16
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/wordblock.txt
@@ -0,0 +1,5 @@
+====== SPAM Voasakana ======
+
+Tsy voarakitra ny fanovana nataonao satria misy teny voarara ao. Raha nanandrana nandefa spam ny wiki ianao dia -- Alika maty! Raha heverinao fa error dia ilazao ny Admin.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/admin.txt
new file mode 100644
index 000000000..6f54384f2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/admin.txt
@@ -0,0 +1,3 @@
+====== वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤¨ ======
+
+खाली तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ डॉकà¥à¤¯à¥à¤µà¤¿à¤•à¤¿ मधे उपलबà¥à¤§ असलेलà¥à¤¯à¤¾ वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤¨à¤¾à¤šà¥à¤¯à¤¾ कà¥à¤°à¤¿à¤¯à¤¾à¤‚ची सूची दिली आहे. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/backlinks.txt
new file mode 100644
index 000000000..997fa68e0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/backlinks.txt
@@ -0,0 +1,3 @@
+====== पà¥à¤°à¤¤à¤¿à¤²à¤¿à¤‚क ======
+
+ही तà¥à¤¯à¤¾ सरà¥à¤µ पà¥à¤°à¥ƒà¤·à¥à¤ à¤¾à¤‚ची सूची आहे जी या पृषà¥à¤ à¤¾à¤²à¤¾ परत लिंक करतात. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/conflict.txt
new file mode 100644
index 000000000..2b1bb6423
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/conflict.txt
@@ -0,0 +1,5 @@
+====== नवीन आवृतà¥à¤¤à¥€ उपलबà¥à¤§ आहे ======
+
+तà¥à¤®à¥à¤¹à¥€ संपादित केलेलà¥à¤¯à¤¾ दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¾à¤šà¥€ नवीन आवृतà¥à¤¤à¥€ उपलबà¥à¤§ आहे. तà¥à¤®à¥à¤¹à¥€ संपादित करत असलेलà¥à¤¯à¤¾ दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¾à¤®à¤§à¥‡ तà¥à¤¯à¤¾à¤š वेळी इतर यूजरने बदल केलà¥à¤¯à¤¾à¤¸ असे घडते.
+
+खाली दरà¥à¤¶à¤¾à¤µà¤¿à¤²à¥‡à¤²à¥‡ फरक नीट तपासा आणि तà¥à¤¯à¤¾à¤ªà¥ˆà¤•à¥€ कà¥à¤ à¤²à¥‡ ठेवायचे ते ठरवा. जर तà¥à¤®à¥à¤¹à¥€ 'सà¥à¤°à¤•à¥à¤·à¤¿à¤¤' केलं तर तà¥à¤®à¤šà¥‡ बदल सà¥à¤°à¤•à¥à¤·à¤¿à¤¤ होतील. सधà¥à¤¯à¤¾à¤šà¥€ आवृतà¥à¤¤à¤¿ ठेवणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ 'कॅनà¥à¤¸à¤²' वर कà¥à¤²à¤¿à¤• करा. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/denied.txt
new file mode 100644
index 000000000..1b499f51d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/denied.txt
@@ -0,0 +1,3 @@
+====== परवानगी नाकारली ======
+
+कà¥à¤·à¤®à¤¾ करा, पण तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ यापà¥à¤¢à¥‡ जाणà¥à¤¯à¤¾à¤šà¥‡ हकà¥à¤• नाहीत. कदाचित तà¥à¤®à¥à¤¹à¥€ लॉगिन करायला विसरला आहात ? \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/diff.txt
new file mode 100644
index 000000000..f0a845056
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/diff.txt
@@ -0,0 +1,3 @@
+====== फरक ======
+
+या पानावर तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ निवडलेली आवृतà¥à¤¤à¥€ व सधà¥à¤¯à¤¾à¤šà¥à¤¯à¤¾ आवृतà¥à¤¤à¥€ मधले फरक दाखवले आहेत. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/draft.txt
new file mode 100644
index 000000000..aa74475d7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/draft.txt
@@ -0,0 +1,5 @@
+====== मसà¥à¤¦à¥à¤¯à¤¾à¤šà¥€ फाइल मिळाली ======
+
+तà¥à¤®à¤šà¤¾ मागचा संपादानाचा सेशन नीट पूरà¥à¤£ à¤à¤¾à¤²à¤¾ नवà¥à¤¹à¤¤à¤¾. डॉकà¥à¤¯à¥à¤µà¤¿à¤•à¤¿à¤¨à¥‡ तà¥à¤®à¤šà¥à¤¯à¤¾ कामाचा मसà¥à¤¦à¤¾ आपोआप सà¥à¤°à¤•à¥à¤·à¤¿à¤¤ केला होता , जो वापरून तà¥à¤®à¤šà¥€ संपादन परत चालू करू शकता. खाली तà¥à¤®à¤šà¥à¤¯à¤¾ मागचà¥à¤¯à¤¾ सेशन मधला सà¥à¤°à¤•à¥à¤·à¤¿à¤¤ केलेला डेटा दाखवला आहे.
+
+कृपया आता हे ठरवा की तà¥à¤®à¤šà¥à¤¯à¤¾ संपादन सेशनचे //पà¥à¤¨à¤°à¥à¤¸à¥à¤¥à¤¾à¤ªà¤¨// करायचे, सà¥à¤°à¤•à¥à¤·à¤¿à¤¤ केलेला मसà¥à¤¦à¤¾ //रदà¥à¤¦// करायचा का संपादनच //कॅनà¥à¤¸à¤²// करायचं. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/edit.txt
new file mode 100644
index 000000000..6c6347e70
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/edit.txt
@@ -0,0 +1 @@
+पान संपादित करा आणि 'सà¥à¤°à¤•à¥à¤·à¤¿à¤¤' वर कà¥à¤²à¤¿à¤• करा. विकी सिनà¥à¤Ÿà¥…कà¥à¤¸ साठी [[wiki:syntax]] पहा.कृपया तà¥à¤®à¥à¤¹à¥€ जर à¤à¤–ादे पान **सà¥à¤§à¤¾à¤°à¤¿à¤¤** करू शकत असाल तरच ते संपादित करा. अनà¥à¤¯à¤¥à¤¾ जर तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ फ़कà¥à¤¤ काही गोषà¥à¤Ÿà¥€ टà¥à¤°à¤¾à¤¯ करून बघायचà¥à¤¯à¤¾ असतील तर [[playground:playground|पà¥à¤²à¥‡à¤—à¥à¤°à¤¾à¤Šà¤£à¥à¤¡]] मधे आपले धडे गिरवा! \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/editrev.txt
new file mode 100644
index 000000000..d58c8abd0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/editrev.txt
@@ -0,0 +1,2 @@
+**तà¥à¤®à¤šà¥€ या पानाची जà¥à¤¨à¥€ आवृतà¥à¤¤à¥€ लोड केलि आहे!** जर तà¥à¤®à¤šà¥€ ती सà¥à¤°à¤•à¥à¤·à¤¿à¤¤ केली तर तà¥à¤®à¤šà¥€ तà¥à¤¯à¤¾à¤šà¥€ à¤à¤• नवीन आवृतà¥à¤¤à¥€ तयार कराल.
+---- \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/index.txt
new file mode 100644
index 000000000..489b20435
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/index.txt
@@ -0,0 +1,3 @@
+====== सूची ======
+
+ही सरà¥à¤µ उपलबà¥à¤§ पानांची [[doku>namespaces|नेमसà¥à¤ªà¥‡à¤¸]] अनà¥à¤¸à¤¾à¤° तयार केलेली सूची आहे. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/install.html
new file mode 100644
index 000000000..ddbf8245b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/install.html
@@ -0,0 +1,10 @@
+<p>हे पान <a href="http://dokuwiki.org">डॉकà¥à¤¯à¥à¤µà¤¿à¤•à¤¿</a> चà¥à¤¯à¤¾ पहिलà¥à¤¯à¤¾ इनà¥à¤¸à¥à¤Ÿà¥‰à¤²à¥‡à¤¶à¤¨ आणि कॉनà¥à¤«à¤¿à¤—रेशन साठी मदत करतं. या इंसà¥à¤Ÿà¥‰à¤²à¤° विषयी जासà¥à¤¤à¥€ माहिती तà¥à¤¯à¤¾à¤šà¥à¤¯à¤¾
+<a href="http://dokuwiki.org/installer">माहितीसंगà¥à¤°à¤¹ पानावर</a> उपलबà¥à¤§ आहे.</p>
+
+<p> डॉकà¥à¤¯à¥à¤µà¤¿à¤•à¤¿ विकी पाने व समà¥à¤¬à¤‚धित माहिती ( उदा. फोटो , शोध सूची, जà¥à¤¨à¥à¤¯à¤¾ आवृतà¥à¤¤à¥€ ई.) साठवणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ सामानà¥à¤¯ फाइलचा उपयोग करतं. डॉकà¥à¤¯à¥à¤µà¤¿à¤•à¤¿à¤¨à¥‡ नीट काम करणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ डॉकà¥à¤¯à¥à¤µà¤¿à¤•à¤¿à¤²à¤¾ या फाइल जिथे साठवलà¥à¤¯à¤¾ आहेत तà¥à¤¯à¤¾ डिरेकà¥à¤Ÿà¤°à¥€à¤®à¤§à¥‡ लेखनाचे हकà¥à¤• ( write access ) असणे <strong>अतà¥à¤¯à¤¾à¤µà¤¶à¥à¤¯à¤•</strong> आहे. या इंसà¥à¤Ÿà¥‰à¤²à¤°à¤²à¤¾ डिरेकà¥à¤Ÿà¤°à¥€à¤šà¥‡ हकà¥à¤• सेट करता येत नाहीत. ते थेट तà¥à¤®à¤šà¥à¤¯à¤¾ शेल मधून सेट करावे लागतात, किंवा तà¥à¤®à¥à¤¹à¥€ वà¥à¤¯à¤¾à¤µà¤¸à¤¾à¤¯à¤¿à¤• होसà¥à¤Ÿà¤¿à¤‚ग वापरत असाल तर FTP वापरून अथवा तà¥à¤®à¤šà¥à¤¯à¤¾ होसà¥à¤Ÿà¤¿à¤‚ग कंटà¥à¤°à¥‹à¤² पॅनल ( उदा. cPanel वगैरे ) मधून सेट करावे लागतात.</p>
+
+<p>हा इंसà¥à¤Ÿà¥‰à¤²à¤° तà¥à¤®à¤šà¥à¤¯à¤¾ डॉकà¥à¤¯à¥à¤µà¤¿à¤•à¤¿à¤šà¥‡ <acronym title="access control list">ACL</acronym> कॉनà¥à¤«à¤¿à¤—रेशन ठरवेल, जà¥à¤¯à¤¾à¤¦à¥à¤µà¤¾à¤°à¥‡ तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤•à¥€à¤¯ लॉगिन, डॉकà¥à¤¯à¥à¤µà¤¿à¤•à¤¿à¤šà¥à¤¯à¤¾ वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤¨ मेनू मधे पà¥à¤²à¤—िनचे इनà¥à¤¸à¥à¤Ÿà¥‰à¤²à¥‡à¤¶à¤¨, सदसà¥à¤¯à¤¾à¤‚ची वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾, विकी पानांवरील हकà¥à¤•, कॉनà¥à¤«à¤¿à¤—रेशन बदलणे ई. साठी पà¥à¤°à¤µà¥‡à¤¶à¤¾à¤šà¥‡ हकà¥à¤• वगैरे बदल करता येतील. ही वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾ डॉकà¥à¤¯à¥à¤µà¤¿à¤•à¤¿ वापरणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ आवशà¥à¤¯à¤• नाही पण वापरलà¥à¤¯à¤¾à¤¸ डॉकà¥à¤¯à¥à¤µà¤¿à¤•à¤¿à¤šà¥‡ वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤¨ अधिक सà¥à¤°à¤³à¤¿à¤¤ होइल.</p>
+
+<p>अनà¥à¤­à¤µà¥€ सदसà¥à¤¯ किंवा जà¥à¤¯à¤¾à¤¨à¤¾ काही ख़ास गरजा असतील तà¥à¤¯à¤¾à¤¨à¥€ खालील लिंकà¥à¤¸ वापरावà¥à¤¯à¤¾à¤¤ :
+<a href="http://dokuwiki.org/install">इनà¥à¤¸à¥à¤Ÿà¥‰à¤²à¥‡à¤¶à¤¨à¤µà¤¿à¤·à¤¯à¥€ सूचना</a>
+and <a href="http://dokuwiki.org/config">कॉनà¥à¤«à¤¿à¤—रेशनची सेटिंग</a></p> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/lang.php
new file mode 100644
index 000000000..715d51119
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/lang.php
@@ -0,0 +1,229 @@
+<?php
+/**
+ * mr language file
+ *
+ * This file was initially built by fetching translations from other
+ * Wiki projects. See the @url lines below. Additional translations
+ * and fixes where done for DokuWiki by the people mentioned in the
+ * lines starting with @author
+ *
+ * @url http://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/languages/messages/MessagesMr.php?view=co
+ * @author ghatothkach@hotmail.com
+ * @author Padmanabh Kulkarni <kulkarnipadmanabh@gmail.com>
+ * @author Padmanabh Kulkarni<kulkarnipadmanabh@gmail.com>
+ * @author shantanoo@gmail.com
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '“';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '`';
+$lang['singlequoteclosing'] = '\'';
+$lang['apostrophe'] = '\'';
+$lang['btn_edit'] = 'हे पृषà¥à¤  संपादित करा';
+$lang['btn_source'] = 'पानाचा सà¥à¤¤à¥à¤°à¥‹à¤¤ दाखवा ';
+$lang['btn_show'] = 'पान दाखवा';
+$lang['btn_create'] = 'हे पृषà¥à¤  लीहा';
+$lang['btn_search'] = 'शोधा';
+$lang['btn_save'] = 'सà¥à¤°à¤•à¥à¤·à¤¿à¤¤';
+$lang['btn_preview'] = 'à¤à¤²à¤•';
+$lang['btn_top'] = 'परत वर';
+$lang['btn_newer'] = 'जासà¥à¤¤ अलीकडचे';
+$lang['btn_older'] = 'कमी अलीकडचे';
+$lang['btn_revs'] = 'जूनà¥à¤¯à¤¾ आवà¥à¤°à¥à¤¤à¥à¤¤à¥€';
+$lang['btn_recent'] = 'अलीकडील बदल';
+$lang['btn_upload'] = 'अपलोड';
+$lang['btn_cancel'] = 'रदà¥à¤¦ करा';
+$lang['btn_index'] = 'सूचि';
+$lang['btn_secedit'] = 'संपादन';
+$lang['btn_login'] = 'पà¥à¤°à¤µà¥‡à¤¶ करा';
+$lang['btn_logout'] = 'बाहेर पडा';
+$lang['btn_admin'] = 'अधिकारी';
+$lang['btn_update'] = 'अदà¥à¤¯à¤¯à¤¾à¤µà¤¤';
+$lang['btn_delete'] = 'नषà¥à¤Ÿ';
+$lang['btn_back'] = 'मागॆ';
+$lang['btn_backlink'] = 'येथे काय जोडले आहे';
+$lang['btn_backtomedia'] = 'परत माधà¥à¤¯à¤® फाइल निवडीकड़े';
+$lang['btn_subscribe'] = 'पृषà¥à¤ à¤¾à¤šà¥à¤¯à¤¾ बदलांची पà¥à¤°à¤µà¤£à¥€ (फीड) लावा ';
+$lang['btn_unsubscribe'] = 'पृषà¥à¤ à¤¾à¤šà¥à¤¯à¤¾ बदलांची पà¥à¤°à¤µà¤£à¥€ (फीड) बंद करा';
+$lang['btn_subscribens'] = 'नामसमà¥à¤¹à¤¾à¤šà¥à¤¯à¤¾ (नेमसà¥à¤ªà¥‡à¤¸) बदलांची पà¥à¤°à¤µà¤£à¥€ (फीड) लावा';
+$lang['btn_unsubscribens'] = 'नामसमà¥à¤¹à¤¾à¤šà¥à¤¯à¤¾ (नेमसà¥à¤ªà¥‡à¤¸) बदलांची पà¥à¤°à¤µà¤£à¥€ (फीड) बंद करा';
+$lang['btn_profile'] = 'पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤² अदà¥à¤¯à¤¯à¤¾à¤µà¤¤ करा';
+$lang['btn_reset'] = 'रिसेट';
+$lang['btn_resendpwd'] = 'कृपया परवलीचा नवीन शबà¥à¤¦ माà¤à¥à¤¯à¤¾ इमेल पतà¥à¤¤à¥à¤¯à¤¾à¤µà¤° पाठविणे.';
+$lang['btn_draft'] = 'पà¥à¤°à¤¤ संपादन';
+$lang['btn_recover'] = 'पà¥à¤°à¤¤ परत मिळवा';
+$lang['btn_draftdel'] = 'पà¥à¤°à¤¤ रदà¥à¤¦';
+$lang['loggedinas'] = 'लॉगिन नाव';
+$lang['user'] = 'वापरकरà¥à¤¤à¤¾';
+$lang['pass'] = 'परवलीचा शबà¥à¤¦';
+$lang['newpass'] = 'नवीन परवलीचा शबà¥à¤¦';
+$lang['oldpass'] = 'सधà¥à¤¯à¤¾à¤šà¤¾ परवलीचा शबà¥à¤¦ नकà¥à¤•à¥€ करा';
+$lang['passchk'] = 'परत à¤à¤•à¤¦à¤¾';
+$lang['remember'] = 'लकà¥à¤·à¤¾à¤¤ ठेवा';
+$lang['fullname'] = 'पूरà¥à¤£ नावं';
+$lang['email'] = 'इमेल';
+$lang['register'] = 'नोंदणी';
+$lang['profile'] = 'वापरकरà¥à¤¤à¥à¤¯à¤¾à¤šà¥€ माहिती';
+$lang['badlogin'] = 'माफ़ करा, वापरकरà¥à¤¤à¤¾ नावात किंवा परवलीचà¥à¤¯à¤¾ शबà¥à¤¦à¤¾à¤¤ चूक à¤à¤¾à¤²à¥€ आहे.';
+$lang['minoredit'] = 'छोटे बदल';
+$lang['draftdate'] = 'पà¥à¤°à¤¤ आपोआप सà¥à¤°à¤•à¥à¤·à¤¿à¤¤ केलà¥à¤¯à¤¾à¤šà¥€ तारीख';
+$lang['nosecedit'] = 'मधà¥à¤¯à¤‚तरीचà¥à¤¯à¤¾ काळात हे पृषà¥à¤  बदलले आहे.विभागाची माहिती जà¥à¤¨à¥€ à¤à¤¾à¤²à¥€ होती. तà¥à¤¯à¤¾à¤à¤µà¤œà¥€ सबंध पृषà¥à¤  परत लोड केले आहे.';
+$lang['regmissing'] = 'कृपया सरà¥à¤µ रकाने भरा.';
+$lang['reguexists'] = 'या नावाने सदसà¥à¤¯à¤¾à¤šà¥€ नोंदणी à¤à¤¾à¤²à¥‡à¤²à¥€ आहे, कृपया दà¥à¤¸à¤°à¥‡ सदसà¥à¤¯ नाव निवडा.';
+$lang['regsuccess'] = 'सदसà¥à¤¯à¤¾à¤šà¥€ नोंदणी à¤à¤¾à¤²à¥€ आहे आणि परवलीचा शबà¥à¤¦ इमेल केला आहे.';
+$lang['regsuccess2'] = 'सदसà¥à¤¯à¤¾à¤šà¥€ नोंदणी à¤à¤¾à¤²à¥€.';
+$lang['regmailfail'] = 'परवलीचा शबà¥à¤¦à¤¾à¤šà¥€ इमेल पाठवणà¥à¤¯à¤¾à¤¤ चूक à¤à¤¾à¤²à¥€ आहे, कà¥à¤°à¥à¤ªà¤¯à¤¾ संचालकांशी संपरà¥à¤• साधा.';
+$lang['regbadmail'] = 'तà¥à¤®à¥à¤¹à¥€ दिलेला ईमेल बरोबर नाही असे दिसते - तà¥à¤®à¤šà¥à¤¯à¤¾ मते ही चूक असलà¥à¤¯à¤¾à¤¸ साईटचà¥à¤¯à¤¾ वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤•à¤¾à¤¶à¥€ संपरà¥à¤• साधा.';
+$lang['regbadpass'] = 'आपला परवलीचा शबà¥à¤¦ चà¥à¤•à¥€à¤šà¤¾ आहे.';
+$lang['regpwmail'] = 'तà¥à¤®à¤šà¤¾ डोकà¥à¤¯à¥à¤µà¤¿à¤•à¤¿ परवली.';
+$lang['reghere'] = 'अजà¥à¤¨ तà¥à¤®à¤šà¥‡ खाते नाही ? à¤à¤• उघडून टाका.';
+$lang['profna'] = 'हà¥à¤¯à¤¾ विकी मधे पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤² बदलणà¥à¤¯à¤¾à¤šà¥€ सà¥à¤µà¤¿à¤§à¤¾ नाही.';
+$lang['profnochange'] = 'काही बदल नाहित. करणà¥à¤¯à¤¾à¤¸à¤¾à¤°à¤–े काही नाही.';
+$lang['profnoempty'] = 'रिकामे नाव किंवा ईमेल चालत नाही.';
+$lang['profchanged'] = 'सदसà¥à¤¯à¤¾à¤šà¥€ पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤² अदà¥à¤¯à¤¯à¤¾à¤µà¤¤ à¤à¤¾à¤²à¥€ आहे.';
+$lang['pwdforget'] = 'परवलीचा शबà¥à¤¦ विसरला आहे का? नविन मागवा.';
+$lang['resendna'] = 'हà¥à¤¯à¤¾ विकी मधे परवलीचा शबà¥à¤¦ परत पाथावà¥à¤¨à¥à¤¯à¤¾à¤šà¥€ सà¥à¤µà¤¿à¤§à¤¾ नाही.';
+$lang['resendpwd'] = 'नविन परवली इचà¥à¤›à¥à¤•';
+$lang['resendpwdmissing'] = 'कृपया सरà¥à¤µ रकाने भरा.';
+$lang['resendpwdnouser'] = 'माफ़ करा, हा सदसà¥à¤¯ आमचà¥à¤¯à¤¾ माहितिसंगà¥à¤°à¤¹à¤¾à¤¤ सापडला नाही.';
+$lang['resendpwdbadauth'] = 'माफ़ करा, हा अधिकार कोड बरोबर नाही. कृपया आपण पूरà¥à¤£ शिकामोरà¥à¤¤à¤¬à¤¾à¤šà¥€ लिंक वापरलà¥à¤¯à¤¾à¤šà¥€ खातà¥à¤°à¥€ करा.';
+$lang['resendpwdconfirm'] = 'शिकà¥à¤•à¤¾à¤®à¥‹à¤°à¥à¤¤à¤¬à¤¾à¤šà¥€ लिंक ईमेल दà¥à¤µà¤¾à¤°à¤¾ पाठवली आहे.';
+$lang['resendpwdsuccess'] = 'शिकà¥à¤•à¤¾à¤®à¥‹à¤°à¥à¤¤à¤¬à¤¾à¤šà¥€ लिंक ईमेल दà¥à¤µà¤¾à¤°à¤¾ पाठवली आहे.';
+$lang['license'] = 'विशिषà¥à¤  नोंद केलि नसलà¥à¤¯à¤¾à¤¸ हà¥à¤¯à¤¾ विकी वरील सरà¥à¤µ मजकूर खालील लायसनà¥à¤¸ मधे मोडतो : ';
+$lang['licenseok'] = 'नोंद : हे पृषà¥à¤  संपादित केलà¥à¤¯à¤¾à¤¸ तà¥à¤®à¥à¤¹à¥€ तà¥à¤®à¤šà¥‡ योगदान खालील लायसनà¥à¤¸ अंतरà¥à¤—त येइल : ';
+$lang['txt_upload'] = 'अपलोड करणà¥à¤¯à¤¾à¤šà¥€ फाइल निवडा';
+$lang['txt_filename'] = 'अपलोड उरà¥à¥ž ( वैकलà¥à¤ªà¤¿à¤• )';
+$lang['txt_overwrt'] = 'असà¥à¤¤à¤¿à¤¤à¥à¤µà¤¾à¤¤ असलेलà¥à¤¯à¤¾ फाइलवरच सà¥à¤°à¤•à¥à¤·à¤¿à¤¤ करा.';
+$lang['lockedby'] = 'सधà¥à¤¯à¤¾ लॉक करणारा :';
+$lang['lockexpire'] = 'सधà¥à¤¯à¤¾ लॉक करणारा :';
+$lang['willexpire'] = 'हे पृषà¥à¤  संपादित करणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ मिळालेले लॉक à¤à¤–ादà¥à¤¯à¤¾ मिनिटात संपणार आहे.\n चà¥à¤•à¤¾ होऊ नयेत मà¥à¤¹à¤£à¥à¤¨ कृपया पà¥à¤°à¥€à¤µà¥à¤¯à¥‚ बटन दाबà¥à¤¨ लॉक ची वेळ पà¥à¤¨à¥à¤¹à¤¾ चालू करा.';
+$lang['notsavedyet'] = 'सà¥à¤°à¤•à¥à¤·à¤¿à¤¤ न केलेले बदल नषà¥à¤Ÿ होतील. नकà¥à¤•à¥€ करू का ?';
+$lang['rssfailed'] = 'ही पà¥à¤°à¤µà¤£à¥€ आणणà¥à¤¯à¤¾à¤¤ काही चूक à¤à¤¾à¤²à¥€:';
+$lang['nothingfound'] = 'काही सापडला नाही.';
+$lang['mediaselect'] = 'दृकशà¥à¤°à¤¾à¤µà¥à¤¯ फाइल';
+$lang['fileupload'] = 'दृकशà¥à¤°à¤¾à¤µà¥à¤¯ फाइल अपलोड';
+$lang['uploadsucc'] = 'अपलोड यशसà¥à¤µà¥€';
+$lang['uploadfail'] = 'अपलोड अयशसà¥à¤µà¥€.कदाचित चà¥à¤•à¥€à¤šà¥à¤¯à¤¾ परवानगà¥à¤¯à¤¾ असतील ?';
+$lang['uploadwrong'] = 'अपलोड नाकारणà¥à¤¯à¤¾à¤¤ आला. हे फाइल à¤à¤•à¥à¤¸à¤Ÿà¥‡à¤‚शन अवैध आहे!';
+$lang['uploadexist'] = 'फाइल आधीच असà¥à¤¤à¤¿à¤¤à¥à¤µà¤¾à¤¤ आहे. काही केले नाही.';
+$lang['uploadbadcontent'] = 'अपलोड केलेली माहिती %s फाइल à¤à¤•à¥à¤¸à¤Ÿà¥‡à¤‚शनशी मिळतिजà¥à¤³à¤¤à¤¿ नाही.';
+$lang['uploadspam'] = 'अपलोड सà¥à¤ªà¥…म बà¥à¤²à¥…कलिसà¥à¤Ÿà¤®à¥à¤³à¥‡ थोपवला आहे.';
+$lang['uploadxss'] = 'अपलोड संशयित हानिकारक मजकूर असलà¥à¤¯à¤¾à¤¨à¥‡ थोपवला आहे.';
+$lang['uploadsize'] = 'अपलोड केलेली फाइल जासà¥à¤¤à¥€à¤š मोठी होती. (जासà¥à¤¤à¥€à¤¤ जासà¥à¤¤ %s)';
+$lang['deletesucc'] = '%s ही फाइल नषà¥à¤Ÿ करणà¥à¤¯à¤¾à¤¤ आलेली आहे.';
+$lang['deletefail'] = '%s ही फाइल नषà¥à¤Ÿ करू शकलो नाही - कृपया परवानगà¥à¤¯à¤¾ तपासा.';
+$lang['mediainuse'] = '%s ही फाइल नषà¥à¤Ÿ केली नाही - ती अजà¥à¤¨ वापरात आहे.';
+$lang['namespaces'] = 'नेमसà¥à¤ªà¥‡à¤¸';
+$lang['mediafiles'] = 'मधà¥à¤¯à¥‡ उपलबà¥à¤§ असलेलà¥à¤¯à¤¾ फाइल';
+$lang['js']['keepopen'] = 'निवड केलà¥à¤¯à¤¾à¤µà¤° विणà¥à¤¡à¥‹ उघडी ठेवा';
+$lang['js']['hidedetails'] = 'सविसà¥à¤¤à¤° मजकूर लपवा';
+$lang['js']['nosmblinks'] = 'विनà¥à¤¡à¥‹à¤œà¤¼ शेअर ला लिंक केलà¥à¤¯à¤¾à¤¸ ते फकà¥à¤¤ मायकà¥à¤°à¥‹à¤¸à¥‰à¥žà¥à¤Ÿ इनà¥à¤Ÿà¤°à¤¨à¥‡à¤Ÿ à¤à¤•à¥à¤¸à¥à¤ªà¥à¤²à¥‹à¤°à¤° वरच चालते. तरी तà¥à¤®à¥à¤¹à¥€ लिंक कॉपी करू शकता.';
+$lang['js']['mu_btn'] = 'à¤à¤• वेळेस अनेक फाइल वापरा';
+$lang['mediausage'] = 'हà¥à¤¯à¤¾ फाइलचा संदरà¥à¤­ देणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ खालील सिनà¥à¤Ÿà¥…कà¥à¤¸ वापरा :';
+$lang['mediaview'] = 'मूळ फाइल बघू ';
+$lang['mediaroot'] = 'रूट';
+$lang['mediaupload'] = 'सधà¥à¤¯à¤¾à¤šà¥à¤¯à¤¾ नेमसà¥à¤ªà¥‡à¤¸à¤®à¤§à¥‡ इथेच फाइल अपलोड करा. उप-नेमसà¥à¤ªà¥‡à¤¸ बनवणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¤¿ तà¥à¤¯à¤¾à¤šà¥‡ नाव तà¥à¤®à¤šà¥à¤¯à¤¾ "अपलोड उरà¥à¤«à¤¼" मधे दिलेलà¥à¤¯à¤¾ फाइल नावाचà¥à¤¯à¤¾ आधी विसरà¥à¤—चिनà¥à¤¹à¤¾à¤¨à¥‡ वेगळे करून ते वापरा.';
+$lang['mediaextchange'] = 'फाइलचे à¤à¤•à¥à¤¸à¤Ÿà¥‡à¤‚शन .%s चे बदलून .%s केले आहे.';
+$lang['reference'] = 'चà¥à¤¯à¤¾ साठी संदरà¥à¤­';
+$lang['ref_inuse'] = 'फाइल नषà¥à¤Ÿ केली जाऊ शकत नाही. ती अजà¥à¤¨ खालील पृषà¥à¤ à¥‡ वापरत आहेत :';
+$lang['ref_hidden'] = 'काही संदरà¥à¤­ तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ वाचणà¥à¤¯à¤¾à¤šà¥€ परवानगी नसलेलà¥à¤¯à¤¾ पृषà¥à¤ à¤¾à¤µà¤° आहेत';
+$lang['hits'] = 'हिटà¥à¤¸';
+$lang['quickhits'] = 'जà¥à¤³à¤£à¤¾à¤°à¤¿ पाने';
+$lang['toc'] = 'अनà¥à¤•à¥à¤°à¤®à¤£à¤¿à¤•à¤¾';
+$lang['current'] = 'चालू';
+$lang['yours'] = 'तà¥à¤®à¤šà¥€ आवृतà¥à¤¤à¤¿';
+$lang['diff'] = 'सधà¥à¤¯à¤¾à¤šà¥à¤¯à¤¾ आवृतà¥à¤¤à¤¿à¤‚शी फरक दाखवा';
+$lang['diff2'] = 'निवडलेलà¥à¤¯à¤¾ आवृतà¥à¤¤à¤¿à¤‚मधील फरक दाखवा';
+$lang['line'] = 'ओळ';
+$lang['breadcrumb'] = 'मागमूस';
+$lang['youarehere'] = 'तà¥à¤®à¥à¤¹à¥€ इथे आहात';
+$lang['lastmod'] = 'सरà¥à¤µà¤¾à¤¤ शेवटचा बदल';
+$lang['by'] = 'दà¥à¤µà¤¾à¤°à¤¾';
+$lang['deleted'] = 'काढून टाकले';
+$lang['created'] = 'निरà¥à¤®à¤¾à¤£ केले';
+$lang['restored'] = 'जà¥à¤¨à¥€ आवृतà¥à¤¤à¤¿ पà¥à¤¨à¤°à¥à¤¸à¥à¤¥à¤¾à¤ªà¤¿à¤¤ केली';
+$lang['external_edit'] = 'बाहेरून संपादित';
+$lang['summary'] = 'सारांश बदला';
+$lang['noflash'] = 'ही माहिती दाखवणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ <a href="http://www.adobe.com/products/flashplayer/">अडोब फà¥à¤²à¥…श पà¥à¤²à¥‡à¤…र</a> ची गरज आहे.';
+$lang['mail_newpage'] = 'पृषà¥à¤  जोडले : ';
+$lang['mail_changed'] = 'पृषà¥à¤  बदलले : ';
+$lang['mail_new_user'] = 'नवीन सदसà¥à¤¯ : ';
+$lang['mail_upload'] = 'फाइल अपलोड केली : ';
+$lang['qb_bold'] = 'ठळक मजकूर';
+$lang['qb_italic'] = 'तिरका मजकूर';
+$lang['qb_underl'] = 'अधोरेखित मजकूर';
+$lang['qb_code'] = 'कोड मजकूर';
+$lang['qb_strike'] = 'रदà¥à¤¦ मजकूर';
+$lang['qb_h1'] = 'पहिलà¥à¤¯à¤¾ पातळीचे शीरà¥à¤·à¤•';
+$lang['qb_h2'] = 'दà¥à¤¸à¤°à¥à¤¯à¤¾ पातळीचे शीरà¥à¤·à¤•';
+$lang['qb_h3'] = 'तिसरà¥à¤¯à¤¾ पातळीचे शीरà¥à¤·à¤•';
+$lang['qb_h4'] = 'चवथà¥à¤¯à¤¾ पातळीचे शीरà¥à¤·à¤•';
+$lang['qb_h5'] = 'पाचवà¥à¤¯à¤¾ पातळीचे शीरà¥à¤·à¤•';
+$lang['qb_link'] = 'अंतरà¥à¤—त लिंक';
+$lang['qb_extlink'] = 'बाहà¥à¤¯ लिंक';
+$lang['qb_hr'] = 'आडवी पटà¥à¤Ÿà¥€';
+$lang['qb_ol'] = 'अनà¥à¤•à¥à¤°à¤®à¤¿à¤¤ यादीतील वसà¥à¤¤à¥';
+$lang['qb_ul'] = 'साधà¥à¤¯à¤¾ यादीतील वसà¥à¤¤à¥';
+$lang['qb_media'] = 'पà¥à¤°à¤¤à¤¿à¤®à¤¾ आणि इतर फाइल टाका';
+$lang['qb_sig'] = 'सà¥à¤µà¤¾à¤•à¥à¤·à¤°à¥€ टाका';
+$lang['qb_smileys'] = 'सà¥à¤®à¤¾à¤‡à¤²à¥€';
+$lang['qb_chars'] = 'ख़ास चिनà¥à¤¹';
+$lang['js']['del_confirm'] = 'निवडलेलà¥à¤¯à¤¾ गोषà¥à¤Ÿà¥€ नकà¥à¤•à¥€ नषà¥à¤Ÿ करू का ?';
+$lang['admin_register'] = 'नवीन सदसà¥à¤¯';
+$lang['metaedit'] = 'मेटाडेटा बदला';
+$lang['metasaveerr'] = 'मेटाडेटा सà¥à¤°à¤•à¥à¤·à¤¿à¤¤ à¤à¤¾à¤²à¤¾ नाही';
+$lang['metasaveok'] = 'मेटाडेटा सà¥à¤°à¤•à¥à¤·à¤¿à¤¤ à¤à¤¾à¤²à¤¾';
+$lang['img_backto'] = 'परत जा';
+$lang['img_title'] = 'नाव';
+$lang['img_caption'] = 'टीप';
+$lang['img_date'] = 'तारीख';
+$lang['img_fname'] = 'फाइल नाव';
+$lang['img_fsize'] = 'साइà¤';
+$lang['img_artist'] = 'फोटोगà¥à¤°à¤¾à¤«à¤°';
+$lang['img_copyr'] = 'कॉपीराइट';
+$lang['img_format'] = 'पà¥à¤°à¤•à¤¾à¤°';
+$lang['img_camera'] = 'कॅमेरा';
+$lang['img_keywords'] = 'मà¥à¤–à¥à¤¯ शबà¥à¤¦';
+$lang['subscribe_success'] = '%s ला %s चà¥à¤¯à¤¾ पà¥à¤°à¤µà¤£à¤¿à¤¸à¤¾à¤ à¤¿ नोंदवले';
+$lang['subscribe_error'] = '%s ला %s चà¥à¤¯à¤¾ पà¥à¤°à¤µà¤£à¤¿à¤¸à¤¾à¤ à¤¿ नोंदवताना चूक à¤à¤¾à¤²à¥€';
+$lang['subscribe_noaddress'] = 'तà¥à¤®à¤šà¥à¤¯à¤¾ लॉगिनशी समà¥à¤¬à¤‚धित कà¥à¤ à¤²à¤¾à¤¹à¥€ पतà¥à¤¤à¤¾ नाही , तà¥à¤¯à¤¾à¤®à¥à¤³à¥‡ पà¥à¤°à¤µà¤£à¤¿à¤¸à¤¾à¤ à¤¿ नोंद केली जाऊ शकत नाही';
+$lang['unsubscribe_success'] = '%s ला %s चà¥à¤¯à¤¾ पà¥à¤°à¤µà¤£à¥€ यादी मधून काढून टाकले';
+$lang['unsubscribe_error'] = '%s ला %s चà¥à¤¯à¤¾ पà¥à¤°à¤µà¤£à¥€ यादी मधून काढून टाकणà¥à¤¯à¤¾à¤¤ चूक à¤à¤¾à¤²à¥€';
+$lang['authmodfailed'] = 'सदसà¥à¤¯ अधिकृत करणà¥à¤¯à¤¾à¤šà¥€ वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾ चà¥à¤•à¥€à¤šà¥€ आहे. कृपया तà¥à¤®à¤šà¥à¤¯à¤¾ विकीचà¥à¤¯à¤¾ वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤•à¤¾à¤¶à¥€ समà¥à¤ªà¤°à¥à¤• साधा.';
+$lang['authtempfail'] = 'सदसà¥à¤¯ अधिकृत करणà¥à¤¯à¤¾à¤šà¥€ सà¥à¤µà¤¿à¤§à¤¾ सधà¥à¤¯à¤¾ चालू नाही. सतत हा मजकूर दिसलà¥à¤¯à¤¾à¤¸ कृपया तà¥à¤®à¤šà¥à¤¯à¤¾ विकीचà¥à¤¯à¤¾ वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤•à¤¾à¤¶à¥€ समà¥à¤ªà¤°à¥à¤• साधा.';
+$lang['i_chooselang'] = 'तà¥à¤®à¤šà¥€ भाषा निवडा';
+$lang['i_installer'] = 'डॉकà¥à¤¯à¥à¤µà¤¿à¤•à¤¿ इनसà¥à¤Ÿà¥‰à¤²à¤°';
+$lang['i_wikiname'] = 'विकी नाम';
+$lang['i_enableacl'] = 'ACL चालू करा ( अधिक चांगले )';
+$lang['i_superuser'] = 'सà¥à¤ªà¤°-सदसà¥à¤¯';
+$lang['i_problems'] = 'इनसà¥à¤Ÿà¥‰à¤²à¤°à¤²à¤¾ काही अडचणि आलà¥à¤¯à¤¾ आहेत. तà¥à¤¯à¤¾ ठीक केलà¥à¤¯à¤¾à¤¶à¤¿à¤µà¤¾à¤¯ तà¥à¤®à¥à¤¹à¥€ पà¥à¤¢à¥‡ जाऊ शकत नाही.';
+$lang['i_modified'] = 'सà¥à¤°à¤•à¥à¤·à¤¿à¤¤à¤¤à¥‡à¤šà¥à¤¯à¤¾ कारणासठि ही सà¥à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿ फ़कà¥à¤¤ नवीन आणि बदललेलà¥à¤¯à¤¾ डॉकà¥à¤¯à¥à¤µà¤¿à¤•à¤¿ इनà¥à¤¸à¥à¤Ÿà¥‰à¤²à¥‡à¤¶à¤¨ मधेच चालेल. तà¥à¤®à¥à¤¹à¥€ à¤à¤•à¤¤à¤° डाउनलोड केलेले पॅकेज मधील फाइल परत पà¥à¤°à¤¸à¤¾à¤°à¤¿à¤¤ करा किंवा <a href="http://dokuwiki.org/install">डॉकà¥à¤¯à¥à¤µà¤¿à¤•à¤¿ इनà¥à¤¸à¥à¤Ÿà¥‰à¤²à¥‡à¤¶à¤¨ विषयी सूचना</a> वाचा.';
+$lang['i_funcna'] = 'PHP मधलं <code>%s</code> हे फंकà¥à¤¶à¤¨ उपलबà¥à¤§ नाही. बहà¥à¤§à¤¾ तà¥à¤®à¤šà¥à¤¯à¤¾ होसà¥à¤Ÿà¤¿à¤‚ग पà¥à¤°à¤µà¤£à¤¾à¤°à¤¾à¤¨à¥‡ ते काही कारणाने अनà¥à¤ªà¤²à¤¬à¥à¤§ केलं असावं.';
+$lang['i_phpver'] = 'तà¥à¤®à¤šà¥€ PHP आवृतà¥à¤¤à¤¿ <code>%s</code> ही आवशà¥à¤¯à¤• असलेलà¥à¤¯à¤¾ <code>%s</code> हà¥à¤¯à¤¾ आवृतà¥à¤¤à¤¿à¤ªà¥‡à¤•à¥à¤·à¤¾ कमी आहे. कृपया तà¥à¤®à¤šà¥‡ PHP इनà¥à¤¸à¥à¤Ÿà¥‰à¤²à¥‡à¤¶à¤¨ अदà¥à¤¯à¤¯à¤¾à¤µà¤¤ करा.';
+$lang['i_permfail'] = '<code>%s</code> या डिरेकà¥à¤Ÿà¤°à¥€ मधà¥à¤¯à¥‡ डॉकà¥à¤¯à¥à¤µà¤¿à¤•à¤¿ बदल करू शकत नाही. कृपया या डिरेकà¥à¤Ÿà¤°à¥€à¤šà¥à¤¯à¤¾ परवानगà¥à¤¯à¤¾ ठीक करा.';
+$lang['i_confexists'] = '<code>%s</code> आधीच असà¥à¤¤à¤¿à¤¤à¥à¤µà¤¾à¤¤ आहे.';
+$lang['i_writeerr'] = '<code>%s</code> निरà¥à¤®à¤¾à¤£ करू शकलो नाही. तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ डिरेकà¥à¤Ÿà¤°à¥€ / फाइल चà¥à¤¯à¤¾ परवानगà¥à¤¯à¤¾ तपासून सà¥à¤µà¤¤à¤ƒà¤š ही फाइल बनवावी लागेल.';
+$lang['i_badhash'] = 'अनाकलनीय किंवा बदललेले dokuwiki.php (hash=<code>%s</code>)';
+$lang['i_badval'] = 'code>%s</code> - अवैध किंवा रिकामा मजकूर.';
+$lang['i_success'] = 'वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾ लावणà¥à¤¯à¤¾à¤šà¥‡ काम यशसà¥à¤µà¥€à¤°à¥€à¤¤à¥à¤¯à¤¾ पार पडले. आता तà¥à¤®à¥à¤¹à¥€ install.php डिलीट करू शकता. <a href="doku.php">तà¥à¤®à¤šà¥à¤¯à¤¾ नविन डॉकà¥à¤¯à¥à¤µà¤¿à¤•à¤¿ </a> वर जा.';
+$lang['i_failure'] = 'कॉनà¥à¤«à¤¿à¤—à¥à¤°à¥‡à¤¶à¤¨à¤šà¥à¤¯à¤¾ फाइल सà¥à¤°à¤•à¥à¤·à¤¿à¤¤ करताना काही अडचणी आलà¥à¤¯à¤¾ आहेत. <a href="doku.php">तà¥à¤®à¤šà¥€ नवीन डॉकà¥à¤¯à¥à¤µà¤¿à¤•à¤¿ </a> वापरणà¥à¤¯à¤¾à¤†à¤§à¥€ तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ हà¥à¤¯à¤¾ फाइल सà¥à¤µà¤¤à¤ƒ ठीक करावà¥à¤¯à¤¾ लागतील.';
+$lang['i_policy'] = 'आरंभीची ACL पॉलिसी';
+$lang['i_pol0'] = 'मà¥à¤•à¥à¤¤ विकी ( सरà¥à¤µà¤¾à¤‚ना वाचन, लेखन व अपलोड करणà¥à¤¯à¤¾à¤šà¥€ परवानगी )';
+$lang['i_pol1'] = 'सारà¥à¤µà¤œà¤¨à¤¿à¤• विकी ( सरà¥à¤µà¤¾à¤‚ना वाचणà¥à¤¯à¤¾à¤šà¥€ मà¥à¤­à¤¾ , लेखन व अपलोडची परवानगी फकà¥à¤¤ नोंदणीकृत सदसà¥à¤¯à¤¾à¤‚ना )';
+$lang['i_pol2'] = 'बंदिसà¥à¤¤ विकी ( वाचन , लेखन व अपलोडची परवानगी फकà¥à¤¤ नोंदणीकृत सदसà¥à¤¯à¤¾à¤‚ना ) ';
+$lang['i_retry'] = 'पà¥à¤¨à¥à¤¹à¤¾ पà¥à¤°à¤¯à¤¤à¥à¤¨';
+$lang['mu_intro'] = 'इथे तà¥à¤®à¥à¤¹à¥€ à¤à¤•à¤¾à¤ªà¥‡à¤•à¥à¤·à¤¾ अधिक फाइल अपलोड करू शकता. बà¥à¤°à¤¾à¤‰à¤ चà¥à¤¯à¤¾ बटणावर कà¥à¤²à¤¿à¤• करून तà¥à¤¯à¤¾à¤¨à¤¾ लिसà¥à¤Ÿ मधे टाका. सगळà¥à¤¯à¤¾ टाकà¥à¤¨ à¤à¤¾à¤²à¥à¤¯à¤¾à¤µà¤° अपलोड चà¥à¤¯à¤¾ बटणावर कà¥à¤²à¤¿à¤• करा.';
+$lang['mu_gridname'] = 'फाइल नाम';
+$lang['mu_gridsize'] = 'साइज';
+$lang['mu_gridstat'] = 'सà¥à¤¥à¤¿à¤¤à¤¿';
+$lang['mu_namespace'] = 'नेमसà¥à¤ªà¥‡à¤¸';
+$lang['mu_browse'] = 'बà¥à¤°à¤¾à¤‰à¤';
+$lang['mu_toobig'] = 'अति मोठे';
+$lang['mu_ready'] = 'अपलोडसाठी तयार';
+$lang['mu_done'] = 'पूरà¥à¤£';
+$lang['mu_fail'] = 'अयशसà¥à¤µà¥€';
+$lang['mu_authfail'] = 'सेशन संपला';
+$lang['mu_progress'] = '@PCT@% अपलोड à¤à¤¾à¤²à¥‡';
+$lang['mu_filetypes'] = 'मानà¥à¤¯ फाइल टाइप';
+$lang['recent_global'] = 'तà¥à¤®à¥à¤¹à¥€ सधà¥à¤¯à¤¾ <b>%s</b> या नेमसà¥à¤ªà¥‡à¤¸ मधील बदल पाहात आहात.तà¥à¤®à¥à¤¹à¥€ <a href="%s">पूरà¥à¤£ विकी मधले बदल </a> सà¥à¤¦à¥à¤§à¤¾ पाहू शकता.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/locked.txt
new file mode 100644
index 000000000..dae909c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/locked.txt
@@ -0,0 +1,3 @@
+====== पान लॉक आहे ======
+
+हे पान सधà¥à¤¯à¤¾ दà¥à¤¸à¤°à¥à¤¯à¤¾ सदसà¥à¤¯à¤¾à¤¨à¥‡ संपादनासाठी लॉक केले आहे. तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ तà¥à¤¯à¤¾à¤šà¥‡ संपादन करून होईपरà¥à¤¯à¤‚त किंवा लॉक संपेपरà¥à¤¯à¤‚त थांबावे लागेल. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/login.txt
new file mode 100644
index 000000000..f2fef4c45
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/login.txt
@@ -0,0 +1,3 @@
+====== लॉगिन ======
+
+तà¥à¤®à¥à¤¹à¥€ सधà¥à¤¯à¤¾ लॉगिन केलेले नाही! तà¥à¤®à¤šà¥‡ नाव-पासवरà¥à¤¡ देऊन खाली लॉगिन करा. लॉगिन करणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ तà¥à¤®à¤šà¥à¤¯à¤¾ बà¥à¤°à¤¾à¤‰à¤œà¤°à¤®à¤§à¥‡ कà¥à¤•à¥€à¤œ चालू असलà¥à¤¯à¤¾ पाहिजेत. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/mailtext.txt
new file mode 100644
index 000000000..18fa23846
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/mailtext.txt
@@ -0,0 +1,15 @@
+तà¥à¤®à¤šà¥à¤¯à¤¾ डॉकà¥à¤¯à¥à¤µà¤¿à¤•à¤¿à¤®à¤§à¥€à¤² à¤à¤• पान बदलले किंवा नवीन टाकले गेले आहे. तà¥à¤¯à¤¾à¤šà¥€ माहिती पà¥à¤¢à¥€à¤² पà¥à¤°à¤®à¤¾à¤£à¥‡ :
+
+दिनांक : @DATE@
+बà¥à¤°à¤¾à¤‰à¤œà¤° : @BROWSER@
+IP-पतà¥à¤¤à¤¾ : @IPADDRESS@
+मशिनचे नाव ( Host name ) : @HOSTNAME@
+जà¥à¤¨à¥€ आवृतà¥à¤¤à¥€ : @OLDPAGE@
+नवी आवृतà¥à¤¤à¥€ : @NEWPAGE@
+संपादन सारांश : @SUMMARY@
+सदसà¥à¤¯ : @USER@
+
+@DIFF@
+
+--
+हा ईमेल @DOKUWIKIURL@ येथील डॉकà¥à¤¯à¥à¤µà¤¿à¤•à¤¿à¤¦à¥à¤µà¤¾à¤°à¤¾ आपोआप तयार केला गेला आहे. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/newpage.txt
new file mode 100644
index 000000000..00a1c6b60
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/newpage.txt
@@ -0,0 +1,3 @@
+====== हा मà¥à¤¦à¥à¤¦à¤¾ अजून असà¥à¤¤à¤¿à¤¤à¥à¤¤à¥à¤µà¤¾à¤¤ नाही ======
+
+तà¥à¤®à¤šà¥€ अशा à¤à¤–ादà¥à¤¯à¤¾ मà¥à¤¦à¥à¤¦à¥à¤¯à¤¾à¤šà¥à¤¯à¤¾ लिंक वरून इथे आला आहात जो अजून असà¥à¤¤à¤¿à¤¤à¥à¤¤à¥à¤µà¤¾à¤¤ नाही. जर तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ परवानगी असेल तर तà¥à¤®à¤šà¥€ तà¥à¤¯à¤¾ मà¥à¤¦à¥à¤¦à¥à¤¯à¤¾à¤µà¤° "हे पान नवीन तयार करा" हे बटण कà¥à¤²à¤¿à¤• करून सà¥à¤µà¤¤à¤ƒ à¤à¤• पान तयार करू शकता. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/norev.txt
new file mode 100644
index 000000000..180b031fe
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/norev.txt
@@ -0,0 +1,3 @@
+====== अशी कà¥à¤ à¤²à¥€ आवृतà¥à¤¤à¥€ नाही ======
+
+ही आवृतà¥à¤¤à¥€ असà¥à¤¤à¤¿à¤¤à¥à¤¤à¥à¤µà¤¾à¤¤ नाही. "जà¥à¤¨à¥à¤¯à¤¾ आवृतà¥à¤¤à¥à¤¯à¤¾" बटण वापरून या दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¾à¤šà¥à¤¯à¤¾ सरà¥à¤µ जà¥à¤¨à¥à¤¯à¤¾ आवृतà¥à¤¤à¥à¤¯à¤¾ तà¥à¤®à¤šà¥€ पाहू शकता. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/preview.txt
new file mode 100644
index 000000000..8277398dd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/preview.txt
@@ -0,0 +1,3 @@
+====== à¤à¤²à¤• ======
+
+ही तà¥à¤®à¤šà¤¾ मजकूर कसा दिसेल तà¥à¤¯à¤¾à¤šà¥€ à¤à¤• à¤à¤²à¤• आहे. लकà¥à¤·à¤¾à¤¤ ठेवा : हा मजकूर अजà¥à¤¨ **सà¥à¤°à¤•à¥à¤·à¤¿à¤¤ केलेला नाही** ! \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/pwconfirm.txt
new file mode 100644
index 000000000..ec0b707a1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/pwconfirm.txt
@@ -0,0 +1,11 @@
+नमसà¥à¤•à¤¾à¤° @FULLNAME@!
+
+कोणीतरी तà¥à¤®à¤šà¥à¤¯à¤¾ @TITLE@ या @DOKUWIKIURL@ येथील लॉगिनसाठी नवीन पासवरà¥à¤¡ मागवला आहे.
+जर तà¥à¤®à¥à¤¹à¥€ हा पासवरà¥à¤¡ मागवला नसेल तर कृपया हà¥à¤¯à¤¾ ईमेलकड़े दà¥à¤°à¥à¤²à¤•à¥à¤· करा.
+
+जर नकà¥à¤•à¥€ तà¥à¤®à¥à¤¹à¥€à¤š हा पासवरà¥à¤¡ मागवला असेल तर खालील लिंकवर कà¥à¤²à¤¿à¤• करून ते नकà¥à¤•à¥€ करा.
+
+@CONFIRM@
+
+--
+हा ईमेल @DOKUWIKIURL@ येथील डॉकà¥à¤¯à¥à¤µà¤¿à¤•à¤¿à¤¦à¥à¤µà¤¾à¤°à¤¾ आपोआप तयार केला गेला आहे. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/read.txt
new file mode 100644
index 000000000..b834dd750
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/read.txt
@@ -0,0 +1 @@
+हे पान फकà¥à¤¤ वाचता येऊ शकतं. तà¥à¤®à¥à¤¹à¥€ तà¥à¤¯à¤¾à¤šà¤¾ मूळ विकी मजकूर पाहू शकता पण तो बदलू शकत नाही. जर हे चà¥à¤•à¥€à¤šà¤‚ असेल तर तà¥à¤®à¤šà¥à¤¯à¤¾ विकी वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤•à¤¾à¤¶à¥€ संपरà¥à¤• साधा. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/recent.txt
new file mode 100644
index 000000000..9a6d6f151
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/recent.txt
@@ -0,0 +1,3 @@
+====== अलीकडील बदल ======
+
+खालील पाने हलà¥à¤²à¥€à¤š बदलली आहेत \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/register.txt
new file mode 100644
index 000000000..3aca31278
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/register.txt
@@ -0,0 +1,3 @@
+====== नवीन सदसà¥à¤¯ मà¥à¤¹à¤£à¥à¤¨ नोंदणी करा ======
+
+खाली तà¥à¤®à¤šà¥€ माहिती भरून या विकी वर नवीन खातं उघडा. कृपया आपण देत असलेला ईमेल चालू असलà¥à¤¯à¤¾à¤šà¥€ खातà¥à¤°à¥€ करा - जर तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ इथे पासवरà¥à¤¡ टाकायला सांगितला नाही तयार à¤à¤• नवीन पासवरà¥à¤¡ तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ तà¥à¤¯à¤¾ ईमेल वर पाठवला जाइल. तà¥à¤®à¤šà¤‚ लॉगिन नाम à¤à¤• वैध [[doku>pagename|पेजनेम]] असले पाहिजे. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/registermail.txt
new file mode 100644
index 000000000..a6fea4d06
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/registermail.txt
@@ -0,0 +1,13 @@
+à¤à¤• नवीन सदसà¥à¤¯à¤¾à¤šà¥€ नोंदणी à¤à¤¾à¤²à¥€ आहे. तà¥à¤¯à¤¾à¤šà¥€ माहीत पà¥à¤¢à¥€à¤²à¤ªà¥à¤°à¤®à¤¾à¤£à¥‡ :
+
+सदसà¥à¤¯ नाम : @NEWUSER@
+पूरà¥à¤£ नाव : @NEWNAME@
+ईमेल : @NEWEMAIL@
+
+दिनांक : @DATE@
+बà¥à¤°à¤¾à¤‰à¤œà¤° : @BROWSER@
+IP-पतà¥à¤¤à¤¾ : @IPADDRESS@
+होसà¥à¤Ÿ नाम : @HOSTNAME@
+
+--
+हा ईमेल @DOKUWIKIURL@ येथील डॉकà¥à¤¯à¥à¤µà¤¿à¤•à¤¿à¤¦à¥à¤µà¤¾à¤°à¤¾ आपोआप तयार केला गेला आहे. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/resendpwd.txt
new file mode 100644
index 000000000..64b95a45f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/resendpwd.txt
@@ -0,0 +1,3 @@
+====== नवीन पासवरà¥à¤¡ पाठव ======
+
+या विकिवरील तà¥à¤®à¤šà¥à¤¯à¤¾ अकाउंटसाठी नवीन पासवरà¥à¤¡ मिळवणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ कृपया तà¥à¤®à¤šà¥‡ सदसà¥à¤¯ नाम खालचà¥à¤¯à¤¾ फॉरà¥à¤® मधे टाका. ही पासवरà¥à¤¡à¤šà¥€ मागणी नकà¥à¤•à¥€ करणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ तà¥à¤®à¥à¤¹à¥€ नोंदणी करताना दिलेलà¥à¤¯à¤¾ ईमेल पतà¥à¤¤à¥à¤¯à¤¾à¤µà¤° à¤à¤• लिंक पाठवली जाइल. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/revisions.txt
new file mode 100644
index 000000000..fb842c763
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/revisions.txt
@@ -0,0 +1,3 @@
+====== जà¥à¤¨à¥à¤¯à¤¾ आवृतà¥à¤¤à¥à¤¯à¤¾ ======
+
+हà¥à¤¯à¤¾ सदà¥à¤¯ दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤šà¥à¤¯à¤¾ जà¥à¤¨à¥à¤¯à¤¾ आवृतà¥à¤¤à¥à¤¯à¤¾ आहेत. à¤à¤–ादà¥à¤¯à¤¾ जà¥à¤¨à¥à¤¯à¤¾ आवृतà¥à¤¤à¥€à¤µà¤° परत जाणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ टी खालून निवडा, "हे पान संपादित करा" वर कà¥à¤²à¤¿à¤• करा आणि ते सà¥à¤°à¤•à¥à¤·à¤¿à¤¤ करा. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/searchpage.txt
new file mode 100644
index 000000000..23e10b1d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/searchpage.txt
@@ -0,0 +1,5 @@
+====== शोध ======
+
+तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ खाली तà¥à¤®à¤šà¥à¤¯à¤¾ शोधाचे फलित दिसतील. जर तà¥à¤®à¤šà¥€ शोधत असलेली गोषà¥à¤Ÿ तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ सापडली नाही, तर योगà¥à¤¯ बटण वापरून तà¥à¤®à¥à¤¹à¥€ शोधत असलेलà¥à¤¯à¤¾ गोषà¥à¤Ÿà¥€à¤µà¤¿à¤·à¤¯à¥€ तà¥à¤®à¥à¤¹à¥€ à¤à¤–ादे पान निरà¥à¤®à¤¾à¤£ किंवा संपादित करू शकता.
+
+====== फलित ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/showrev.txt
new file mode 100644
index 000000000..aeaeee500
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/showrev.txt
@@ -0,0 +1,2 @@
+** ही हà¥à¤¯à¤¾ दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤šà¥€ जà¥à¤¨à¥€ आवृतà¥à¤¤à¥€ आहे. **
+-- \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/stopwords.txt
new file mode 100644
index 000000000..2b413a928
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/stopwords.txt
@@ -0,0 +1,39 @@
+# ही अशा शबà¥à¤¦à¤¾à¤‚ची यादी आहे जी अनà¥à¤•à¥à¤°à¤®à¤• (इंडेकà¥à¤¸à¤°) दà¥à¤°à¥à¤²à¤•à¥à¤·à¤¿à¤¤ करतो, जर à¤à¤• ओळित à¤à¤• शबà¥à¤¦ आला तरच.
+# ही यादी बदललà¥à¤¯à¤¾à¤¸ केवळ यूनिकà¥à¤¸ पदà¥à¤§à¤¤à¥€à¤šà¥€ लाइन à¤à¤‚डिंग वापरा. तीन अकà¥à¤·à¤°à¤¾à¤ªà¥‡à¤•à¥à¤·à¤¾ लहान शबà¥à¤¦ टाकणà¥à¤¯à¤¾à¤šà¥€
+# गरज नाही - ते आपोआपच दà¥à¤°à¥à¤²à¤•à¥à¤·à¤¿à¤¤ केले जातात. ही यादी http://www.ranks.nl/stopwords/ येथील यादीवर
+# आधारित आहे.
+about
+are
+as
+an
+and
+you
+your
+them
+their
+com
+for
+from
+into
+if
+in
+is
+it
+how
+of
+on
+or
+that
+the
+this
+to
+was
+what
+when
+where
+who
+will
+with
+und
+the
+www \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/subscribermail.txt
new file mode 100644
index 000000000..8cbb3164e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/subscribermail.txt
@@ -0,0 +1,21 @@
+नमसà¥à¤•à¤¾à¤° !
+
+@TITLE@ विकी मधलं @PAGE@ हे पान बदललं आहे.
+खाली तà¥à¤¯à¤¾à¤¤à¥€à¤² बदल दाखवले आहेत:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+दिनांक : @DATE@
+सदसà¥à¤¯ : @USER@
+संपादन सारांश : @SUMMARY@
+जà¥à¤¨à¥€ आवृतà¥à¤¤à¥€ : @OLDPAGE@
+नवीन आवृतà¥à¤¤à¥€ : @NEWPAGE@
+
+पानाचà¥à¤¯à¤¾ बदलाविषयिचà¥à¤¯à¤¾ सूचना तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ नको असतील तर
+@DOKUWIKIURL@ या विकी वर लॉगिन करा आणि
+@NEWPAGE@ पानावर जा व तà¥à¤¯à¤¾ पान/नेमसà¥à¤ªà¥‡à¤¸ विषयीचà¥à¤¯à¤¾ सूचना बंद ( unsubscribe ) करा.
+
+--
+हा ईमेल @DOKUWIKIURL@ येथील डॉकà¥à¤¯à¥à¤µà¤¿à¤•à¤¿à¤¦à¥à¤µà¤¾à¤°à¤¾ आपोआप तयार केला गेला आहे. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/updateprofile.txt
new file mode 100644
index 000000000..c08810f3e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/updateprofile.txt
@@ -0,0 +1,3 @@
+====== तà¥à¤®à¤šà¥€ सदसà¥à¤¯ माहिती अदà¥à¤¯à¤¯à¤¾à¤µà¤¤ करा ======
+
+फ़कà¥à¤¤ तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ बदल करायचा असेल तेच रकाने परत भरा. तà¥à¤®à¤šà¥€ तà¥à¤®à¤šà¥‡ सदसà¥à¤¯ नाम बदलू शकत नाही. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/uploadmail.txt
new file mode 100644
index 000000000..66e736598
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/uploadmail.txt
@@ -0,0 +1,13 @@
+à¤à¤• फाइल तà¥à¤®à¤šà¥à¤¯à¤¾ डॉकà¥à¤¯à¥à¤µà¤¿à¤•à¤¿à¤µà¤° अपलोड केली गेली आहे. तà¥à¤¯à¤¾à¤šà¥€ माहिती यापà¥à¤°à¤®à¤¾à¤£à¥‡ :
+
+फाइल : @MEDIA@
+दिनांक : @DATE@
+बà¥à¤°à¤¾à¤‰à¤œà¤° : @BROWSER@
+IP-पतà¥à¤¤à¤¾ : @IPADDRESS@
+होसà¥à¤Ÿà¤¨à¤¾à¤® : @HOSTNAME@
+साइज़ : @SIZE@
+MIME टाइप : @MIME@
+सदसà¥à¤¯ : @USER@
+
+--
+हा ईमेल @DOKUWIKIURL@ येथील डॉकà¥à¤¯à¥à¤µà¤¿à¤•à¤¿à¤¦à¥à¤µà¤¾à¤°à¤¾ आपोआप तयार केला गेला आहे. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/wordblock.txt
new file mode 100644
index 000000000..e885cbed9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/wordblock.txt
@@ -0,0 +1,3 @@
+====== भंकस रोखली ======
+
+तà¥à¤®à¤šà¥‡ बदल सà¥à¤°à¤•à¥à¤·à¤¿à¤¤ केलेले ** नाहीत ** कारण तà¥à¤¯à¤¾à¤®à¤§à¥‡ à¤à¤• किंवा अधिक निषिदà¥à¤§ शबà¥à¤¦ आहेत. जर तà¥à¤®à¥à¤¹à¥€ मà¥à¤¦à¥à¤¦à¤¾à¤®à¤š विकिवर भंकस करणà¥à¤¯à¤¾à¤šà¤¾ पà¥à¤°à¤¯à¤¤à¥à¤¨ केला असेल तर असले चाळे बंद करा ! आणि समजा तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ असा वाटत असेल की हा मजकूर निषिदà¥à¤§ समजणà¥à¤¯à¤¾à¤šà¥‡ काही कारण नाही तर तà¥à¤®à¤šà¥à¤¯à¤¾ विकी वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤•à¤¾à¤¶à¥€ संपरà¥à¤• साधा. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/admin.txt
new file mode 100644
index 000000000..7a829dbe5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/admin.txt
@@ -0,0 +1,2 @@
+====== वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤¨ ======
+तल तपाईले DokuWikiमा उपलवà¥à¤§ वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤•à¤¿à¤¯ कारà¥à¤¯à¤¹à¤°à¥à¤•à¥‹ सà¥à¤šà¥€ पाउन सकà¥à¤¨à¥à¤¹à¥à¤¨à¥à¤› । \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/backlinks.txt
new file mode 100644
index 000000000..51b95731d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/backlinks.txt
@@ -0,0 +1,2 @@
+====== पछाडि लिङà¥à¤• ======
+यो पृषà¥à¤ à¤¹à¤°à¥à¤•à¥‹ सà¥à¤šà¥€à¤¹à¤°à¥à¤²à¥‡ पछाडि लिङà¥à¤• सà¥à¤µà¤¯à¤‚लाई नै गरेको छ। \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/conflict.txt
new file mode 100644
index 000000000..457e108ad
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/conflict.txt
@@ -0,0 +1,5 @@
+====== नयाठसंसà¥à¤•à¤°à¤£ उपलबà¥à¤§ छ ======
+
+तपाईले समà¥à¤ªà¤¾à¤¦à¤¨ गरà¥à¤¨à¥à¤­à¤à¤•à¥‹ पाठको नयाठससà¥à¤•à¤°à¤£ उपलबà¥à¤§ छ। तपाईले समà¥à¤ªà¤¾à¤¦à¤¨ गरिरहनॠभà¤à¤•à¥‹ समयमा अरà¥à¤•à¥‹ पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾à¤²à¥‡ यो पाठ परिवरà¥à¤¤à¤¨ गरेकोले यसà¥à¤¤à¥‹ भà¤à¤•à¥‹ हो ।
+
+दà¥à¤¬à¥ˆà¤•à¤¾ फरक दाजà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ र दà¥à¤ˆà¤®à¤¾ कà¥à¤¨ राखà¥à¤¨à¥‡à¤¹à¥‹ निशà¥à¤šà¤¿à¤¤ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ ।तपाईले "वचत गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ " छानà¥à¤¨à¥ भयो भने तपाईको संसà¥à¤•à¤°à¤£ वचत हà¥à¤¨à¥‡à¤›à¥¤ "रदà¥à¤¦ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥" छानà¥à¤¨à¥ भयो भने अहिलेको संसà¥à¤•à¤°à¤£ वचत हà¥à¤¨à¥‡à¤› । \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/denied.txt
new file mode 100644
index 000000000..ab4bcf290
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/denied.txt
@@ -0,0 +1,3 @@
+====== अनà¥à¤®à¤¤à¤¿ अमानà¥à¤¯ ======
+
+माफ गरà¥à¤¨à¥à¤¹à¥‹à¤²à¤¾ तपाईलाई अगाडि बढà¥à¤¨ अनà¥à¤®à¤¤à¤¿ छैन। समà¥à¤­à¤µà¤¤: तपाईले पà¥à¤°à¤µà¥‡à¤¶ गरà¥à¤¨ भà¥à¤²à¥à¤¨à¥ भयो। \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/diff.txt
new file mode 100644
index 000000000..76d75fbfb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/diff.txt
@@ -0,0 +1,3 @@
+====== भिनà¥à¤¨à¤¤à¤¾à¤¹à¤°à¥ ======
+
+यसले यो पृषà¥à¤ à¤•à¥‹ छानिà¤à¤•à¥‹ संसà¥à¤•à¤°à¤£ र हालको संकरण बीच भिनà¥à¤¨à¤¤à¤¾à¤¹à¤°à¥ देखाउà¤à¤› । \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/draft.txt
new file mode 100644
index 000000000..88630c992
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/draft.txt
@@ -0,0 +1,5 @@
+====== डà¥à¤°à¤¾à¤«à¥à¤Ÿ फाइल भेटियो ======
+
+तपाईको यो पृषà¥à¤ à¤•à¥‹ गत समà¥à¤ªà¤¾à¤¦à¤¨ सफलतापूरà¥à¤µà¤• समà¥à¤ªà¤¨à¥à¤¨ भà¤à¤•à¥‹ थिà¤à¤¨ ।DokuWiki ले सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤à¤°à¥à¤ªà¤®à¤¾ डà¥à¤°à¤¾à¤«à¥à¤Ÿ वचतगरेको छ तà¥à¤¯à¤¸ देखि तपाईले आफà¥à¤¨à¥‹ समà¥à¤ªà¤¾à¤¦à¤¨ कारà¥à¤¯à¤®à¤¾ निरनà¥à¤¤à¤°à¤¤à¤¾ दिन सकà¥à¤¨à¥à¤¹à¥à¤¨à¥à¤›à¥¤ तल तपाईले गत सतà¥à¤°à¤®à¤¾ बचत गरिà¤à¤•à¥‹ सामगà¥à¤°à¥€ देखà¥à¤¨ सकà¥à¤¨à¥à¤¹à¥à¤¨à¥à¤› ।
+
+कृपया निरà¥à¤£à¤¯ दिनà¥à¤¹à¥‹à¤¸à¥ कि तपाई गत सतà¥à¤°à¤®à¤¾ बचत गरिà¤à¤•à¥‹ सतà¥à¤°à¤•à¥‹ समà¥à¤ªà¤¾à¤¦à¤¨à¤•à¤¾à¤°à¥à¤¯ //recover// , //delete// वा //cancel// के गरà¥à¤¨ चाहनà¥à¤¹à¥à¤¨à¥à¤› भनेर।
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/edit.txt
new file mode 100644
index 000000000..be498a61b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/edit.txt
@@ -0,0 +1 @@
+पृषà¥à¤  समà¥à¤ªà¤¾à¤¦à¤¨ गरà¥à¤¨à¥à¤¹à¥‹à¤¸ र "बचत" मा थिचà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ । सिनà¥à¤Ÿà¥‡à¤•à¥à¤¸à¤•à¥‹ लागि [[wiki:syntax]] हेरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ । यो पृषà¥à¤ à¤²à¤¾à¤ˆ **सà¥à¤§à¤¾à¤°à¥à¤¨** सकà¥à¤¨à¥à¤¹à¥à¤¨à¥à¤› भने मातà¥à¤° समà¥à¤ªà¤¾à¤¦à¤¨ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ ।यदि कà¥à¤¨à¥ˆ पà¥à¤°à¤¯à¥‹à¤— गरà¥à¤¨ या , जानà¥à¤¨ चाहनà¥à¤¹à¥à¤¨à¥à¤› भने [[playground:playground|playground]] को पà¥à¤°à¤¯à¥‹à¤— गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ । \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/editrev.txt
new file mode 100644
index 000000000..0db67c2bb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/editrev.txt
@@ -0,0 +1,2 @@
+** तपाईले यस कागजातको पà¥à¤°à¤¾à¤¨à¥‹ संसà¥à¤•à¤°à¤£ खोलà¥à¤¨à¥ भà¤à¤•à¥‹ छ ।** यदि यसलाई वचत गरà¥à¤¨à¥à¤­à¤¯à¥‹ भने यसैसामगà¥à¤°à¥€à¤¬à¤¾à¤Ÿ नयाठसंसà¥à¤•à¤°à¤£à¤•à¥‹ निरà¥à¤®à¤¾à¤£ हà¥à¤¨à¥‡à¤› ।
+---- \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/index.txt
new file mode 100644
index 000000000..cb06f0307
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/index.txt
@@ -0,0 +1,3 @@
+====== सà¥à¤šà¥€ ======
+
+यो सबै उपलाबà¥à¤§ पृषà¥à¤ à¤¹à¤°à¥à¤•à¥‹ [[doku>namespaces|namespaces]] का आधारमा मिलाइà¤à¤•à¥‹ सà¥à¤šà¥€ हो । \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/lang.php
new file mode 100644
index 000000000..ce9310ee5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/lang.php
@@ -0,0 +1,220 @@
+<?php
+/**
+ * Nepali language file
+ *
+ * @author Saroj Kumar Dhakal <lotusnagarkot@gmail.com>
+ * @author SarojKumar Dhakal <lotusnagarkot@yahoo.com>
+ * @author Saroj Dhakal<lotusnagarkot@yahoo.com>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '“';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '‘';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = '’';
+$lang['btn_edit'] = 'यो पृषà¥à¤  समà¥à¤ªà¤¾à¤¦à¤¨ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ ';
+$lang['btn_source'] = 'यो पृषà¥à¤ à¤•à¥‹ सà¥à¤°à¥‹à¤¤ देखाउनà¥à¤¹à¥‹à¤¸à¥ ';
+$lang['btn_show'] = 'पृषà¥à¤  देखाउनà¥à¤¹à¥‹à¤¸à¥ ';
+$lang['btn_create'] = 'यो पृषà¥à¤  निरà¥à¤®à¤¾à¤£ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['btn_search'] = 'खोजà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ ';
+$lang['btn_save'] = 'वचत गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['btn_preview'] = 'पूरà¥à¤µà¤°à¥à¤ª ';
+$lang['btn_top'] = 'माथि फरà¥à¤•à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['btn_newer'] = '<< यो भनà¥à¤¦à¤¾ पछिको';
+$lang['btn_older'] = 'यो भनà¥à¤¦à¤¾ पहिलेको >>';
+$lang['btn_revs'] = 'पà¥à¤°à¤¾à¤¨à¥‹ संकरण';
+$lang['btn_recent'] = 'हालैका परिवरà¥à¤¤à¤¨à¤¹à¤°à¥ ';
+$lang['btn_upload'] = 'अपलोड ';
+$lang['btn_cancel'] = 'रदà¥à¤¦ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ ';
+$lang['btn_index'] = 'सà¥à¤šà¥€';
+$lang['btn_secedit'] = 'समà¥à¤ªà¤¾à¤¦à¤¨ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['btn_login'] = 'पà¥à¤°à¤µà¥‡à¤¶ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ ';
+$lang['btn_logout'] = 'बाहिर जानà¥à¤¹à¥‹à¤¸à¥ ';
+$lang['btn_admin'] = 'à¤à¤¡à¥à¤®à¤¿à¤¨(वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤•)';
+$lang['btn_update'] = 'अधà¥à¤¯à¤¾à¤µà¤§à¤¿à¤• गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['btn_delete'] = 'मेटाउनà¥à¤¹à¥‹à¤¸à¥ ';
+$lang['btn_back'] = 'पछाडि';
+$lang['btn_backlink'] = 'पछाडिका लिङà¥à¤•à¤¹à¤°à¥ ';
+$lang['btn_backtomedia'] = 'मिडिया छनौटमा फरà¥à¤•à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['btn_subscribe'] = 'पृषà¥à¤  परिवरà¥à¤¤à¤¨ गà¥à¤°à¤¾à¤¹à¥à¤¯ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['btn_unsubscribe'] = 'पृषà¥à¤  परिवरà¥à¤¤à¤¨ अगà¥à¤°à¤¾à¤¹à¥à¤¯ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['btn_subscribens'] = 'नेमसà¥à¤ªà¥‡à¤¸ परिवरà¥à¤¤à¤¨ गà¥à¤°à¤¾à¤¹à¥à¤¯ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ ';
+$lang['btn_unsubscribens'] = 'नेमसà¥à¤ªà¥‡à¤¸ परिवरà¥à¤¤à¤¨ अगà¥à¤°à¤¾à¤¹à¥à¤¯ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ ';
+$lang['btn_profile'] = 'पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤² अधà¥à¤¯à¤¾à¤µà¤§à¤¿à¤• गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ ';
+$lang['btn_reset'] = 'पूरà¥à¤µà¤°à¥à¤ªà¤®à¤¾ फरà¥à¤•à¤¾à¤‰à¤¨à¥à¤¹à¥‹à¤¸';
+$lang['btn_resendpwd'] = 'नयाठपà¥à¤°à¤µà¥‡à¤¶ शवà¥à¤¦(पासवरà¥à¤¡) पठाउनà¥à¤¹à¥‹à¤¸à¥ ';
+$lang['btn_draft'] = ' डà¥à¤°à¤¾à¤«à¥à¤Ÿ समà¥à¤ªà¤¾à¤¦à¤¨ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ ';
+$lang['btn_recover'] = 'पहिलेको डà¥à¤°à¤¾à¤«à¥à¤Ÿ हासिल गरà¥à¤¨à¥à¤¹à¥‹à¤¸ ';
+$lang['btn_draftdel'] = ' डà¥à¤°à¤¾à¤«à¥à¤Ÿ मेटाउनà¥à¤¹à¥‹à¤¸à¥ ';
+$lang['loggedinas'] = 'पà¥à¤°à¤µà¥‡à¤¶ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ ';
+$lang['user'] = 'पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ ';
+$lang['pass'] = 'पà¥à¤°à¤µà¥‡à¤¶à¤¶à¤µà¥à¤¦';
+$lang['newpass'] = 'नयाठपà¥à¤°à¤µà¥‡à¤¶à¤¶à¤µà¥à¤¦';
+$lang['oldpass'] = 'नयाठपà¥à¤°à¤µà¥‡à¤¶à¤¶à¤µà¥à¤¦ निशà¥à¤šà¤¿à¤¤ गरà¥à¤¨à¥à¤¹à¥‹à¤¸ ';
+$lang['passchk'] = 'à¤à¤•à¤ªà¤Ÿà¤• पà¥à¤¨:';
+$lang['remember'] = 'मलाई समà¥à¤à¤¨à¥';
+$lang['fullname'] = 'पूरा नाम';
+$lang['email'] = 'इमेल';
+$lang['register'] = 'दरà¥à¤¤à¤¾ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['profile'] = 'पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾à¤•à¥‹ पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤²';
+$lang['badlogin'] = 'माफ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ , पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾à¤¨à¤¾à¤® वा पà¥à¤°à¤µà¥‡à¤¶à¤¶à¤µà¥à¤¦ गलत भयो ';
+$lang['minoredit'] = 'सामानà¥à¤¯ परिवरà¥à¤¤à¤¨';
+$lang['draftdate'] = 'डà¥à¤°à¤¾à¤«à¥à¤Ÿ सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ रà¥à¤ªà¤®à¤¾ वचत भà¤à¤•à¥‹';
+$lang['nosecedit'] = 'यो पृषà¥à¤  यसै बखतमा परिवरà¥à¤¤à¤¨ भयो, खणà¥à¤¡ जानकारी अधà¥à¤¯à¤¾à¤µà¤§à¤¿à¤• हà¥à¤¨ सकेन र पूरै पृषà¥à¤  लोड भयो । ';
+$lang['regmissing'] = 'माफ गरà¥à¤¨à¥à¤¹à¥‹à¤²à¤¾ , सबै ठाउमा भरà¥à¤¨à¥à¤ªà¤°à¥à¤¨à¥‡à¤› ।';
+$lang['reguexists'] = 'यो नामको पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ पहिले देखि रहेको छ।';
+$lang['regsuccess'] = 'यो पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ बनाइà¤à¤•à¥‹ छ र पà¥à¤°à¤µà¥‡à¤¶à¤¶à¤µà¥à¤¦ इमेलमा पठइà¤à¤•à¥‹ छ।';
+$lang['regsuccess2'] = 'यो पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ बनाइà¤à¤•à¥‹ छ ।';
+$lang['regmailfail'] = 'इमेलबाट पà¥à¤°à¤µà¥‡à¤¶à¤¶à¤¬à¥à¤¦ पठउन गलà¥à¤¤à¤¿ भयो । कृपया à¤à¤¡à¥à¤®à¤¿à¤¨(वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤•)लाई समà¥à¤ªà¤°à¥à¤• गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ !';
+$lang['regbadmail'] = 'दिà¤à¤•à¥‹ इमेल ठेगाना गलत भठजसà¥à¤¤à¥‹ देखिनà¥à¤› - यदि यो सहि हो भने à¤à¤¡à¥à¤®à¤¿à¤¨(वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤•)लाई समà¥à¤ªà¤°à¥à¤• गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ !';
+$lang['regbadpass'] = 'दिइà¤à¤•à¤¾ पà¥à¤°à¤µà¥‡à¤¶à¤¶à¤µà¥à¤¦à¤¹à¤°à¥ मिलà¥à¤¦à¥ˆà¤¨à¤¨à¥ , पà¥à¤¨: पà¥à¤°à¤¯à¤¾à¤¸ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ ।';
+$lang['regpwmail'] = 'तपाईको DokuWiki पà¥à¤°à¤µà¥‡à¤¶à¤¶à¤¬à¥à¤¦ ';
+$lang['reghere'] = 'तपाईको आफà¥à¤¨à¥ˆ खाता छैन ? अहिलà¥à¤¯à¥ˆ à¤à¤‰à¤Ÿà¤¾ बनाउनà¥à¤¹à¥‹à¤¸à¥ ';
+$lang['profna'] = 'यो विकिले यो पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤² परिवरà¥à¤¤à¤¨ समरà¥à¤¥à¤¨ गरà¥à¤¦à¥ˆà¤¨ ।';
+$lang['profnochange'] = 'केहि परिवरà¥à¤¤à¤¨ छैन , केहि गरà¥à¤¨à¥ छैन ।';
+$lang['profnoempty'] = 'खाली नाम वा इमेल ठेगानालाई अनà¥à¤®à¤¤à¤¿ छैन ।';
+$lang['profchanged'] = 'पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾à¤•à¥‹ पà¥à¤°à¤«à¤¾à¤‡à¤² सफलरà¥à¤ªà¤®à¤¾ परिवरà¥à¤¤à¤¨ भयो ।';
+$lang['pwdforget'] = 'आफà¥à¤¨à¥‹ पासवरà¥à¤¡ भà¥à¤²à¥à¤¨à¥ भयो ? नयाठहासिल गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ ';
+$lang['resendna'] = 'यो विकिबाट पà¥à¤°à¤µà¥‡à¤¶à¤¶à¤µà¥à¤¦ पठाउन समरà¥à¤¥à¤¿à¤¤ छैन ।';
+$lang['resendpwd'] = 'नयाठपà¥à¤°à¤µà¥‡à¤¶à¤¶à¤µà¥à¤¦ पठाउनà¥à¤¹à¥‹à¤¸à¥ ';
+$lang['resendpwdmissing'] = 'माफ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ , तपाईले सबै ठाउ भरà¥à¤¨à¥à¤ªà¤°à¥à¤›à¥¤ ';
+$lang['resendpwdnouser'] = 'माफ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥, हामà¥à¤°à¥‹ डेटावेसमा यो पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ भेटिà¤à¤¨ ।';
+$lang['resendpwdbadauth'] = 'माफ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ , यो अनà¥à¤®à¤¤à¤¿ चिनà¥à¤¹ गलत छ। तपाईले पूरै जानकारी लिङà¥à¤• पà¥à¤°à¤¯à¥‹à¤— गरà¥à¤¨à¥ परà¥à¤¨à¥‡à¤›à¥¤ ';
+$lang['resendpwdconfirm'] = 'तपाईको इमेलमा कनà¥à¤«à¤°à¤®à¥‡à¤¶à¤¨ लिङà¥à¤• पठाइà¤à¤•à¥‹ छ। ';
+$lang['resendpwdsuccess'] = 'तपाईको पà¥à¤°à¤µà¥‡à¤¶à¤¶à¤µà¥à¤¦ इमेलबाट पठाइà¤à¤•à¥‹ छ। ';
+$lang['license'] = 'खà¥à¤²à¤¾à¤‡à¤à¤•à¥‹ बाहेक, यस विकिका विषयवसà¥à¤¤à¥à¤¹à¤°à¥ निमà¥à¤¤ पà¥à¤°à¤®à¤¾à¤£ दà¥à¤µà¤¾à¤°à¤¾ पà¥à¤°à¤®à¤¾à¤£à¤¿à¤• गरिà¤à¤•à¥‹ छ।';
+$lang['licenseok'] = 'नोट: यस पृषà¥à¤  समà¥à¤ªà¤¾à¤¦à¤¨ गरी तपाईले आफà¥à¤¨à¥‹ विषयवसà¥à¤¤à¥ तलको पà¥à¤°à¤®à¤¾à¤£ पतà¥à¤° अनà¥à¤¤à¤°à¥à¤—त पà¥à¤°à¤®à¤¾à¤£à¤¿à¤• गरà¥à¤¨ राजी हà¥à¤¨à¥ हà¥à¤¨à¥‡à¤› ।';
+$lang['txt_upload'] = 'अपलोड गरà¥à¤¨à¤²à¤¾à¤ˆ फाइल छाà¥à¤¨à¥à¤¨à¥à¤¹à¥‹à¥à¤¸à¥';
+$lang['txt_filename'] = 'अरà¥à¤•à¥‹ रà¥à¤ªà¤®à¤¾ अपलोड गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ (à¤à¤šà¥à¤›à¤¿à¤•)';
+$lang['txt_overwrt'] = 'रहेको उहि नामको फाइललाई मेटाउने';
+$lang['lockedby'] = 'अहिले तालà¥à¤šà¤¾ लगाइà¤à¤•à¥‹';
+$lang['lockexpire'] = 'तालà¥à¤šà¤¾ अवधि सकिने :';
+$lang['willexpire'] = 'तपाईलले यो पृषà¥à¤  समà¥à¤ªà¤¾à¤¦à¤¨ गरà¥à¤¨ लगाउनॠभà¤à¤•à¥‹ तालà¥à¤šà¤¾à¤•à¥‹ अवधि à¤à¤• मिनेट भितà¥à¤° सकिदै छ। \n दà¥à¤µà¤¨à¥à¤¦ हà¥à¤¨ नदिन पूरà¥à¤µà¤°à¥à¤ª वा तालà¥à¤šà¤¾ समय परिवरà¥à¤¤à¤¨ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ ।';
+$lang['notsavedyet'] = 'तपाईले वचन गरà¥à¤¨à¥ नभà¤à¤•à¥‹ परिवरà¥à¤°à¤¨ हराउने छ। \n साचà¥à¤šà¥ˆ जारी गरà¥à¤¨à¥à¤¹à¥à¤¨à¥à¤› ।';
+$lang['rssfailed'] = 'यो फिड लिइ आउदा गलà¥à¤¤à¤¿ भयो ।';
+$lang['nothingfound'] = 'केहि पनि भेटिà¤à¤¨ ।';
+$lang['mediaselect'] = 'मिडिया फाइलहरू ';
+$lang['fileupload'] = 'मिडिया फाइल अपलोड ';
+$lang['uploadsucc'] = 'अपलोड सफल ';
+$lang['uploadfail'] = 'अपलोड असफल । सायद गलत अनà¥à¤®à¤¤à¤¿ । ';
+$lang['uploadwrong'] = 'अपलोड असमरà¥à¤¥à¤¿à¤¤ । फाइल à¤à¤•à¥à¤¸à¤Ÿà¥‡à¤¨à¥à¤¸à¤¨ अमानà¥à¤¯à¥¤ ';
+$lang['uploadexist'] = 'फाइल पहिलेदेखि छ। केहि गरिà¤à¤¨ ।';
+$lang['uploadbadcontent'] = 'अपलोड गरिà¤à¤•à¥‹ वसà¥à¤¤à¥ %s फाइल à¤à¤•à¥à¤Ÿà¥‡à¤¨à¥à¤¸à¤¨ अनà¥à¤¸à¤¾à¤° मिलेन ।';
+$lang['uploadspam'] = 'अपलोड सà¥à¤ªà¥à¤¯à¤¾à¤® कालो सà¥à¤šà¥€à¤²à¥‡ रोकिà¤à¤•à¥‹ छ। ';
+$lang['uploadxss'] = 'अपलोड समà¥à¤­à¤µà¤¤: हानिकारक वसà¥à¤¤à¥à¤•à¥‹ कारणले रोकिà¤à¤•à¥‹à¥¤ ';
+$lang['deletesucc'] = 'फाइल "%s" मेटिà¤à¤•à¥‹ छ। ';
+$lang['deletefail'] = '"%s" मेटà¥à¤¨ सकिà¤à¤¨ - अनà¥à¤®à¤¤à¤¿ हेरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ ।';
+$lang['mediainuse'] = 'फाइल "%s" मेटिà¤à¤•à¥‹ छैन - पà¥à¤°à¤¯à¥‹à¤—मा छ।';
+$lang['namespaces'] = 'नेमसà¥à¤ªà¥‡à¤¸à¤¹à¤°à¥ ';
+$lang['mediafiles'] = ' उपलबà¥à¤§ फाइलहरॠ';
+$lang['js']['keepopen'] = 'छनौटमा विनà¥à¤¡à¥‹ खà¥à¤²à¤¾ राखà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ ';
+$lang['js']['hidedetails'] = 'जानकारी लà¥à¤•à¤¾à¤‰à¤¨à¥ होसॠ';
+$lang['js']['nosmblinks'] = 'विनà¥à¤¡à¥‹à¤¹à¤°à¥ लिङà¥à¤• गरà¥à¤¦à¤¾ माइकà¥à¤°à¥‹ सफà¥à¤Ÿ à¤à¤•à¥à¤¸à¤ªà¥à¤²à¥‹à¤°à¤°à¤®à¤¾à¤®à¤¾à¤¤à¥à¤° काम साà¤à¤¾ हà¥à¤¨à¥à¤› । तर कपि गरà¥à¤¨ र टासà¥à¤¨ मिलà¥à¤›à¥¤ ';
+$lang['js']['mu_btn'] = 'धेरै वटा फाइलहरॠà¤à¤•à¥ˆà¤ªà¤Ÿà¤• अपलोड गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ ।';
+$lang['mediausage'] = 'फाइललाई रेफरेनà¥à¤¸ गरà¥à¤¨ निमà¥à¤¨ सà¥à¤¤à¥à¤° पà¥à¤°à¤¯à¥‹à¤— गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ :';
+$lang['mediaview'] = 'सकà¥à¤•à¤²à¥€ फाइल हेरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ ';
+$lang['mediaroot'] = 'रà¥à¤Ÿ(मूखà¥à¤¯ पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾)';
+$lang['mediaupload'] = 'अहिलेको नेमसà¥à¤ªà¥‡à¤¸à¤®à¤¾ यहा अपलोड गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ । सबनेमसà¥à¤ªà¥‡à¤¸à¤¹à¤°à¥ बनाउन "रà¥à¤ªà¤®à¤¾ आपलोड" छानी फाइलहरà¥à¤²à¤¾à¤ˆ कोलोन(:) ले छà¥à¤Ÿà¥à¤Ÿà¤¯à¤¾à¤‰à¤¨à¥à¤¹à¥‹à¤¸à¥ ।';
+$lang['mediaextchange'] = 'फाइल à¤à¤•à¤¸à¥à¤Ÿà¥‡à¤¨à¥à¤¸à¤¨ .%s देखि .%s मा परिवरतित भयो ';
+$lang['reference'] = 'रेफररेनà¥à¤¸ ';
+$lang['ref_inuse'] = 'फाइल मेटà¥à¤¨ मिलेन , किनभने यो निमà¥à¤¨ पृषà¥à¤ à¤¹à¤°à¥à¤¦à¥à¤µà¤¾à¤°à¤¾ पà¥à¤°à¤¯à¥‹à¤—मा छ। ';
+$lang['ref_hidden'] = 'केहि रेफरेनà¥à¤¸ यसà¥à¤¤à¤¾ पृषà¥à¤ à¤¹à¤°à¥à¤®à¤¾ छनॠजà¥à¤¨ हेरà¥à¤¨ तपाईलाई अनà¥à¤®à¤¤à¤¿ छैन ।';
+$lang['hits'] = 'मिलेको';
+$lang['quickhits'] = 'मिलेका पृषà¥à¤ à¤¨à¤¾à¤®à¤¹à¤°à¥ ';
+$lang['toc'] = 'वसà¥à¤¤à¥à¤¹à¤°à¥à¤•à¥‹ सà¥à¤šà¥€';
+$lang['current'] = 'हालको';
+$lang['yours'] = 'तपाईको संसà¥à¤•à¤°à¤£';
+$lang['diff'] = 'हालको संसà¥à¤•à¤°à¤£ सà¤à¤—को भिनà¥à¤¨à¤¤à¤¾';
+$lang['diff2'] = 'रोजिà¤à¤•à¤¾ संसà¥à¤•à¤°à¤£ वीचका भिनà¥à¤¨à¤¤à¤¾à¤¹à¤°à¥ ';
+$lang['line'] = 'हरफ';
+$lang['breadcrumb'] = 'छà¥à¤Ÿà¥à¤Ÿà¥à¤¯à¤¾à¤‰à¤¨à¥à¤¹à¥‹à¤¸à¥ ';
+$lang['youarehere'] = 'तपाई यहा हà¥à¤¨à¥à¤¹à¥à¤¨à¥à¤›';
+$lang['lastmod'] = 'अनà¥à¤¤à¤¿à¤® पटक सचà¥à¤¯à¤¾à¤‡à¤à¤•à¥‹';
+$lang['by'] = 'दà¥à¤µà¤¾à¤°à¤¾ ';
+$lang['deleted'] = 'हटाइà¤à¤•à¥‹';
+$lang['created'] = 'निरà¥à¤®à¤¾à¤£ गरिà¤à¤•à¥‹';
+$lang['restored'] = 'पà¥à¤°à¤¾à¤¨à¥‹ संसà¥à¤•à¤°à¤£ पà¥à¤¨à¤°à¥â€Œà¤ªà¥à¤°à¤¯à¥‹à¤— गरिà¤à¤•à¥‹';
+$lang['external_edit'] = 'बाहà¥à¤¯ समà¥à¤ªà¤¾à¤¦à¤¨';
+$lang['summary'] = 'समà¥à¤ªà¤¾à¤¦à¤¨à¤•à¥‹ बारेमा';
+$lang['mail_newpage'] = 'थपिà¤à¤•à¥‹ पृषà¥à¤ ';
+$lang['mail_changed'] = 'परिवरà¥à¤¤à¤¿à¤¤ पृषà¥à¤ ';
+$lang['mail_new_user'] = 'नयाठपà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ ';
+$lang['mail_upload'] = 'अपलोड गरिà¤à¤•à¥‹ फाइल';
+$lang['qb_bold'] = 'मोटो पाठ(बोलà¥à¤¡)';
+$lang['qb_italic'] = 'इटालिक पाठ';
+$lang['qb_underl'] = 'निमà¥à¤¨ रेखांकित(अनà¥à¤¡à¤°à¤²à¤¾à¤‡à¤¨) पाठ';
+$lang['qb_code'] = 'चिनà¥à¤¹(कोड) पाठ';
+$lang['qb_strike'] = 'सà¥à¤Ÿà¥à¤°à¤¾à¤‡à¤•à¤¥à¥à¤°à¥ पाठ';
+$lang['qb_h1'] = 'पहिलो सà¥à¤¤à¤°à¤•à¥‹ शिरà¥à¤·à¤•(लेभल १ हेडलाइन)';
+$lang['qb_h2'] = 'दोसà¥à¤°à¥‹ सà¥à¤¤à¤°à¤•à¥‹ शिरà¥à¤·à¤•(लेभल २ हेडलाइन)';
+$lang['qb_h3'] = 'तेसà¥à¤°à¥‹ सà¥à¤¤à¤°à¤•à¥‹ शिरà¥à¤·à¤•(लेभल ३ हेडलाइन)';
+$lang['qb_h4'] = 'चौथो सà¥à¤¤à¤°à¤•à¥‹ शिरà¥à¤·à¤•(लेभल ४ हेडलाइन)';
+$lang['qb_h5'] = 'पाचौठसà¥à¤¤à¤°à¤•à¥‹ शिरà¥à¤·à¤•(लेभल ५ हेडलाइन)';
+$lang['qb_link'] = 'आनà¥à¤¤à¤°à¤¿à¤• लिङà¥à¤• ';
+$lang['qb_extlink'] = 'वाहà¥à¤¯ लिङà¥à¤•';
+$lang['qb_hr'] = 'कà¥à¤·à¤¿à¤¤à¤¿à¤œ (होरिजोनà¥à¤Ÿà¤²) रà¥à¤²';
+$lang['qb_ol'] = 'मिलाइà¤à¤•à¥‹ सà¥à¤šà¥€';
+$lang['qb_ul'] = 'नमिलाइà¤à¤•à¥‹ सà¥à¤šà¥€';
+$lang['qb_media'] = 'तसà¥à¤µà¤¿à¤° र अरॠफाइलहरॠथपà¥à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['qb_sig'] = 'हसà¥à¤¤à¤¾à¤•à¥à¤·à¤° थपà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ ';
+$lang['qb_smileys'] = 'सà¥à¤®à¤¾à¤‡à¤²à¥€à¤¹à¤°à¥ ';
+$lang['qb_chars'] = 'विशेष वरà¥à¤£à¤¹à¤°à¥ ';
+$lang['js']['del_confirm'] = 'साचà¥à¤šà¥ˆ छानिà¤à¤•à¤¾ वसà¥à¤¤à¥à¤¹à¤°à¥ मेटà¥à¤¨à¥‡ हो ?';
+$lang['admin_register'] = 'नयाठपà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ थपà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ ';
+$lang['metaedit'] = 'मेटाडेटा समà¥à¤ªà¤¾à¤¦à¤¨ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['metasaveerr'] = 'मेटाडाटा लेखन असफल';
+$lang['metasaveok'] = 'मेटाडाटा वचत भयो ';
+$lang['img_backto'] = 'फिरà¥à¤¤à¤¾';
+$lang['img_title'] = 'शिरà¥à¤·à¤•';
+$lang['img_caption'] = 'निमà¥à¤¨ लेख';
+$lang['img_date'] = 'मिति';
+$lang['img_fname'] = 'फाइलनाम';
+$lang['img_fsize'] = 'आकार';
+$lang['img_artist'] = 'चितà¥à¤°à¤•à¤¾à¤°';
+$lang['img_copyr'] = 'सरà¥à¤µà¤¾à¤§à¤¿à¤•à¤¾à¤°';
+$lang['img_format'] = 'ढाचा';
+$lang['img_camera'] = 'कà¥à¤¯à¤¾à¤®à¥‡à¤°à¤¾';
+$lang['img_keywords'] = 'खोज शबà¥à¤¦';
+$lang['subscribe_success'] = '%s ,%s को गà¥à¤°à¤¾à¤¹à¥à¤¯à¤¤à¤¾à¤•à¥‹ लागि थपियो ';
+$lang['subscribe_error'] = '%s ,%s को गà¥à¤°à¤¾à¤¹à¥à¤¯à¤¤à¤¾à¤•à¥‹ लागि थपिदा तà¥à¤°à¥à¤Ÿà¤¿';
+$lang['subscribe_noaddress'] = 'तपाईको खातासà¤à¤— कà¥à¤¨à¥ˆ पनि ठेगाना संबनà¥à¤§à¤¿à¤¤ छैन , तपाईलाई गà¥à¤°à¤¹à¤¾à¤• सà¥à¤šà¥€à¤®à¤¾ राखन मिलेन।';
+$lang['unsubscribe_success'] = '%s लाई %s को गà¥à¤°à¤¹à¤¾à¤• सà¥à¤šà¥€à¤¬à¤¾à¤Ÿ हटाइयो';
+$lang['unsubscribe_error'] = '%s लाई %s को गà¥à¤°à¤¾à¤¹à¤• सà¥à¤šà¥€à¤¬à¤¾à¤Ÿ हटाउदा तà¥à¤°à¥à¤Ÿà¤¿';
+$lang['authmodfailed'] = 'खराब पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ पà¥à¤°à¤¾à¤®à¤¾à¤£à¤¿à¤•à¤°à¤£ विधि ।तपाईको विकी à¤à¤¡à¥à¤®à¤¿à¤¨à¤²à¤¾à¤ˆ खवर गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ ।';
+$lang['authtempfail'] = 'पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ पà¥à¤°à¤¾à¤®à¤¾à¤£à¤¿à¤•à¤°à¤£ असà¥à¤¥à¤¾à¤‡à¤°à¥à¤ªà¤®à¤¾ अनà¥à¤ªà¤²à¤¬à¥à¤§ छ। यदि यो समसà¥à¤¯à¤¾ रहि रहेमा तपाईको विकि à¤à¤¡à¥à¤®à¤¿à¤¨à¤²à¤¾à¤ˆ खवर गरà¥à¤¨à¥à¤¹à¥‹à¤²à¤¾ ।';
+$lang['i_chooselang'] = 'भाषा छानà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ ';
+$lang['i_installer'] = 'DokuWiki सà¥à¤¥à¤¾à¤ªà¤•';
+$lang['i_wikiname'] = 'विकी नाम';
+$lang['i_enableacl'] = 'ACL लागॠगरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥( सिफारिस गरिà¤à¤•à¥‹)';
+$lang['i_superuser'] = 'मूखà¥à¤¯ पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾';
+$lang['i_problems'] = 'सà¥à¤¥à¤¾à¤ªà¤•à¤²à¥‡ तल देखाइà¤à¤•à¥‹ तà¥à¤°à¥à¤Ÿà¤¿ फेला पारà¥â€Œà¤¯à¥‹ ।तपाईले यो तà¥à¤°à¥à¤Ÿà¤¿ नसचà¥à¤¯à¤¾à¤ समà¥à¤® अगि बढà¥à¤¨ सकà¥à¤¨à¥à¤¹à¥à¤¨à¥‡ छैन।';
+$lang['i_modified'] = 'सà¥à¤°à¤•à¥à¤·à¤¾à¤•à¥‹ कारणले यो सà¥à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿ नया तथा नसचà¥à¤¯à¤¾à¤‡à¤à¤•à¥‹ Dokuwiki सà¥à¤¥à¤¾à¤ªà¤¨à¤¾à¤®à¤¾ मातà¥à¤° काम गरà¥à¤›à¥¤ तपाईले कि डाउनलोड गरà¥à¤¨à¥à¤­à¤à¤•à¥‹ पà¥à¤¯à¤¾à¤•à¥‡à¤œ पà¥à¤¨: खोलà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ कि <a href="http://dokuwiki.org/install">Dokuwiki सà¥à¤¥à¤¾à¤ªà¤¨à¤¾ विधि</a>';
+$lang['i_funcna'] = 'PHP function <code>%s</code> उपलवà¥à¤§ छैन । हà¥à¤¨à¤¸à¤•à¥à¤› तपाईको होसà¥à¤Ÿà¤¿à¤™à¥à¤— पà¥à¤°à¤¦à¤¾à¤¯à¤•à¤²à¥‡ कà¥à¤¨à¥ˆ कारण वश यसलाई वनà¥à¤¦ गरिदिà¤à¤•à¤¾ हà¥à¤¨à¤¸à¤•à¥à¤›à¤¨à¥ । ';
+$lang['i_phpver'] = 'तपाईको PHP संसà¥à¤•à¤°à¤£ <code>%s</code> चाहिà¤à¤•à¥‹ <code>%s</code> भनà¥à¤¦à¤¾ कम छ। तपाईले आफà¥à¤¨à¥‹ PHP सà¥à¤¥à¤¾à¤ªà¤¨à¤¾ अधà¥à¤¯à¤¾à¤µà¤§à¤¿à¤• गरà¥à¤¨à¥à¤ªà¤°à¥à¤› ।';
+$lang['i_permfail'] = '<code>%s</code> DokuWiki दà¥à¤µà¤¾à¤°à¤¾ लेखà¥à¤¯ छैन । तपाईले डाइरेकà¥à¤Ÿà¤°à¥€à¤•à¥‹ अनà¥à¤®à¤¤à¤¿ परिवरà¥à¤¤à¤¨ गरà¥à¤¨à¥à¤ªà¤°à¥à¤› !';
+$lang['i_confexists'] = '<code>%s</code> पहिले देखि नै रहेको छ।';
+$lang['i_writeerr'] = '<code>%s</code> बनाउन असमरà¥à¤¥ । तपाईले डाइरेकà¥à¤Ÿà¤°à¥€ / फाइल अनà¥à¤®à¤¤à¤¿ जाचà¥à¤¨à¥ परà¥à¤› र फाइल आफैले बनाउनॠपरà¥à¤› ।';
+$lang['i_badhash'] = 'पहिचान हà¥à¤¨ नसकेको वा परिवरà¥à¤¤à¤¿à¤¤ okuwiki.php (hash=code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - अवैध वा रितà¥à¤¤à¥‹ मान ';
+$lang['i_success'] = 'सà¥à¤¥à¤¾à¤ªà¤¨à¤¾ सफलरà¥à¤ªà¤®à¤¾ समापà¥à¤¤ भयो ।तपाई install.php मेटà¥à¤¨ सकà¥à¤¨à¥à¤¹à¥à¥à¤¨à¥à¤› । <a href="doku.php">तपाईको नयाठDokuWiki</a> निरनà¥à¤¤à¤° गरà¥à¤¨ सकà¥à¤¨à¥à¤¹à¥à¤¨à¥à¤› ।';
+$lang['i_failure'] = 'सà¥à¤¥à¤¾à¤ªà¤¨à¤¾ समयमा केहि तà¥à¤°à¥à¤Ÿà¤¿ फेला परà¥à¤¯à¥‹ ।तपाईले आफैले यसलाई <a href="doku.php">तपाईको नयाठDokuWiki</a> पà¥à¤°à¤¯à¥‹à¤— गरà¥à¤¨à¥ अगि सचà¥à¤¯à¤¾à¤‰à¤¨à¥à¤ªà¤°à¥à¤¨à¥‡ हà¥à¤¨à¥à¤› ।';
+$lang['i_policy'] = 'सà¥à¤°à¥à¤•à¥‹ ACL निति';
+$lang['i_pol0'] = 'खà¥à¤²à¥à¤²à¤¾ विकि (पठन, लेखन , अपलोड ) सबैका लागि';
+$lang['i_pol1'] = 'Public विकि (पठन सवैका लागि,लेखन र अपलोड दरà¥à¤¤à¤¾ गरिà¤à¤•à¤¾ पà¥à¤°à¤¯à¤ªà¤—करà¥à¤¤à¤¾à¤•à¤¾ लागि ) ';
+$lang['i_pol2'] = 'बनà¥à¤¦ विकि (पठन , लेखन, अपलोड ) दरà¥à¤¤à¤¾ भà¤à¤•à¤¾ पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾à¤•à¤¾ लागि मातà¥à¤° ।';
+$lang['i_retry'] = 'पà¥à¤¨: पà¥à¤°à¤¯à¤¾à¤¸ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ ';
+$lang['mu_intro'] = 'तपाईले धेरै वटा फाइलहरॠà¤à¤•à¥ˆ पटक अपलोड गरà¥à¤¨ सकà¥à¤¨à¥à¤¹à¥à¤¨à¥à¤› । browse थिचà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ अनि सà¥à¤šà¥€à¤®à¤¾ थपà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ । सकिà¤à¤ªà¤›à¤¿ अपलोड थिछà¥à¤šà¥à¤¹à¥‹à¤¸à¥ ।';
+$lang['mu_gridname'] = 'फाइलनाम ';
+$lang['mu_gridsize'] = 'आकार';
+$lang['mu_gridstat'] = 'सà¥à¤¥à¤¿à¤¤à¤¿';
+$lang['mu_namespace'] = 'नेमसà¥à¤ªà¥‡à¤¸';
+$lang['mu_browse'] = 'Browse';
+$lang['mu_toobig'] = 'धेरै ठूलो';
+$lang['mu_ready'] = 'अपलोडको लागि तयार';
+$lang['mu_done'] = 'पूरा';
+$lang['mu_fail'] = 'असफल';
+$lang['mu_authfail'] = 'सतà¥à¤° सकियो ';
+$lang['mu_progress'] = '@PCT@% अपलोड भयो ';
+$lang['mu_filetypes'] = 'समरà¥à¤¥à¤¿à¤¤ फाइल पà¥à¤°à¤•à¤¾à¤°';
+$lang['recent_global'] = 'तपाई अहिले <b>%s</b> नेमसà¥à¤ªà¥‡à¤¸ भितà¥à¤° भà¤à¤•à¤¾ परिवरà¥à¤¤à¤¨ हेरà¥à¤¦à¥ˆà¤¹à¥à¤¨à¥à¤¹à¥à¤¨à¥à¤›à¥¤ तपाई <a href="%s">पà¥à¤°à¥ˆ विकिमा भà¤à¤•à¥‹ परिवरà¥à¤¤à¤¨ हेरà¥à¤¨ सकà¥à¤¨à¥à¤¹à¥à¤¨à¥à¤›</a>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/locked.txt
new file mode 100644
index 000000000..85f5390a0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/locked.txt
@@ -0,0 +1,3 @@
+====== पृषà¥à¤ à¤®à¤¾ ताला लगाà¤à¤•à¥‹ छ ======
+
+यो पृषà¥à¤  अरà¥à¤•à¥‹ पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾à¤¦à¥à¤µà¤¾à¤°à¤¾ समà¥à¤ªà¤¾à¤¦à¤¨à¤•à¤¾ लागि ताला लगाइà¤à¤•à¥‹ छ । तपाईले समà¥à¤ªà¤¾à¤¦à¤¨ समापà¥à¤¤ नहà¥à¤¨à¥à¤œà¥‡à¤² या तालाको समय समापà¥à¤¤ नहà¥à¤¨à¥à¤œà¥‡à¤² समà¥à¤® पà¥à¤°à¤¤à¤¿à¤•à¥à¤·à¤¾à¤—रà¥à¤¨à¥ परà¥à¤› । \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/norev.txt
new file mode 100644
index 000000000..28c4efb66
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/norev.txt
@@ -0,0 +1,2 @@
+====== कà¥à¤¨à¥ˆ तà¥à¤¯à¤¸à¥à¤¤à¥‹ पà¥à¤¨:संसà¥à¤•à¤°à¤£ भेटिà¤à¤¨ ======
+खà¥à¤²à¤¾à¤‡à¤à¤•à¥‹ पà¥à¤¨:संसà¥à¤•à¤°à¤£ असà¥à¤¤à¤¿à¤¤à¥à¤µà¤®à¤¾ छैन ।यस कागजातको समà¥à¤ªà¥‚रà¥à¤£ संसà¥à¤•à¤°à¤£à¤•à¥‹ सà¥à¤šà¥€à¤•à¥‹ लागि "पà¥à¤°à¤¾à¤¨à¥‹ पà¥à¤¨:संसà¥à¤•à¤°à¤£" बटन पà¥à¤°à¤¯à¥‹à¤— गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ । \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/pwconfirm.txt
new file mode 100644
index 000000000..1d8cd9fd6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/pwconfirm.txt
@@ -0,0 +1,12 @@
+नमसà¥à¤•à¤¾à¤° @FULLNAME@!
+
+कसैदà¥à¤µà¤¾à¤°à¤¾ तपाईको @TITLE@ को लागि नयाठपà¥à¤°à¤µà¥‡à¤¶à¤¶à¤¬à¥à¤¦ माग भà¤à¤•à¥‹ छ ।@DOKUWIKIURL@मा पà¥à¤°à¤µà¥‡à¤¶ ।
+
+यदि तपाईले नयाठपà¥à¤°à¤µà¥‡à¤¶à¤¶à¤¬à¥à¤¦à¤•à¥‹ माग गरà¥à¤¨à¥à¤­à¤à¤•à¥‹ हैन भने यस इमेललाई वेवासà¥à¤¤à¤¾ गरà¥à¤¨ सकà¥à¤¨à¥à¤¹à¥à¤¨à¥à¤› ।
+
+कृपया तपाईको माग साचà¥à¤šà¥ˆ पठाइà¤à¤•à¥‹ थियो भनà¥à¤¨à¥‡ यकिन गराउनाको लागि तलाको लिङà¥à¤•à¤®à¤¾ पà¥à¤°à¤¯à¥‹à¤— गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ ।
+
+@CONFIRM@
+
+--
+यो पतà¥à¤° DokuWiki ले @DOKUWIKIURL@ मा तयार पारेको हो ।
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/read.txt
new file mode 100644
index 000000000..e004cd39b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/read.txt
@@ -0,0 +1 @@
+यो पृषà¥à¤  पढà¥à¤¨à¤•à¥‹ लागि मातà¥à¤° हो । तपाई सà¥à¤°à¥‹à¤¤à¤¹à¥‡à¤°à¥à¤¨ सकà¥à¤¨à¥à¤¹à¥à¤¨à¥à¤› ,तर समà¥à¤ªà¤¾à¤¦à¤¨ भने गरà¥à¤¨ सकà¥à¤¨à¥à¤¹à¥à¤¨à¥à¤¨ । तपाईको वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤•(administrator) सà¤à¤— के समसà¥à¤¯à¤¾ छ भनेर सोधà¥à¤¨à¥ होला । \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/recent.txt
new file mode 100644
index 000000000..239903fd7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/recent.txt
@@ -0,0 +1,2 @@
+====== हालैको परिवरà¥à¤¤à¤¨ ======
+निमà¥à¤¨ पृषà¥à¤ à¤¹à¤°à¥ हालै परिवरà¥à¤¤à¤¨ गरिà¤à¤•à¤¾ छनॠ। \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/resendpwd.txt
new file mode 100644
index 000000000..aec9dfb95
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/resendpwd.txt
@@ -0,0 +1,3 @@
+====== नयाठपà¥à¤°à¤µà¥‡à¤¶à¤¶à¤¬à¥à¤¦ पठाउनà¥à¤¹à¥‹à¤¸à¥ ======
+
+कृपया तपाईको यस विकीमा रहेको खाताको लाहि नयाठपà¥à¤°à¤µà¥‡à¤¶à¤¶à¤µà¥à¤¦ अनà¥à¤°à¥‹à¤§ गरà¥à¤¨ तपाईà¤à¤•à¥‹ नाम निमà¥à¤¨ फरà¥à¤®à¤®à¤¾ पà¥à¤°à¤µà¤¿à¤·à¥à¤Ÿ गरà¥à¤¨à¥à¤¹à¥‹à¤¸ । à¤à¤‰à¤Ÿà¤¾ किटानी लिङà¥à¤• तपाईले दरà¥à¤¤à¤¾ गरà¥à¤¨à¥ भà¤à¤•à¥‹ इमेल ठेगानामा पठाइने छ । \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/searchpage.txt
new file mode 100644
index 000000000..a8139f0ab
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/searchpage.txt
@@ -0,0 +1,3 @@
+====== खोज ======
+तपाईले आफà¥à¤¨à¥‹ खोजको निमà¥à¤¨ नतिजा पाउन सकà¥à¤¨à¥à¤¹à¥à¤¨à¥à¤›à¥¤ यदि तपाईले आफà¥à¤²à¥‡ खोजेको पाउनà¥à¤­à¤à¤¨ भने, तपाईलेको उपयà¥à¤•à¥à¤¤ बटन पà¥à¤°à¤¯à¥‹à¤— गरी खोज सà¤à¤— समà¥à¤¬à¤¨à¥à¤§à¤¿à¤¤ शिरà¥à¤·à¤•à¤¹à¤°à¥ भà¤à¤•à¤¾ पृषà¥à¤  सृजना या समà¥à¤ªà¤¾à¤¦à¤¨ गरà¥à¤¨ सकà¥à¤¨à¥à¤¹à¥à¤¨à¥à¤› ।
+===== नतिजा ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/showrev.txt
new file mode 100644
index 000000000..5b22e9737
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/showrev.txt
@@ -0,0 +1,2 @@
+** यो कागजातको पà¥à¤°à¤¾à¤¨à¥‹ पà¥à¤¨:संसà¥à¤•à¤°à¤£ हो !**
+--- \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/subscribermail.txt
new file mode 100644
index 000000000..413c79c67
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/subscribermail.txt
@@ -0,0 +1,19 @@
+नमसà¥à¤•à¤¾à¤° !
+@TITLE@ शिरà¥à¤·à¤• रहेको यो पृषà¥à¤  @PAGE@ परिवरà¥à¤¤à¤¨ भà¤à¤•à¥‹ छ ।
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+मिति : @DATE@
+पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ : @USER@
+समà¥à¤ªà¤¾à¤¦à¤¨ सारांस: @SUMMARY@
+पà¥à¤°à¤¾à¤¨à¥‹ संसà¥à¤•à¤°à¤£ : @OLDPAGE@
+नविन संसà¥à¤•à¤°à¤£: @NEWPAGE@
+
+यसà¥à¤¤à¤¾ जानकारीहरॠरदà¥à¤¦ गरà¥à¤¨à¤•à¥‹ लागि
+@DOKUWIKIURL@ मा पà¥à¤°à¤µà¥‡à¤¶ गरी
+@NEWPAGE@ अवलोकन पशà¥à¤šà¤¾à¤¤
+पृषà¥à¤  या नेमसà¥à¤ªà¥‡à¤¸ परिवरà¥à¤¤à¤¨ जानकारी गà¥à¤°à¤¾à¤¹à¥à¤¯à¤¤à¤¾ बदर गरà¥à¤¨à¥à¤¹à¥‹
+
+--
+यो पतà¥à¤° DokuWiki ले
+@DOKUWIKIURL@ मा सà¥à¤µà¤¤: बनाà¤à¤•à¥‹ हो । \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/updateprofile.txt
new file mode 100644
index 000000000..e3027e429
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/updateprofile.txt
@@ -0,0 +1,3 @@
+‌‌â€â€â€======तपाईà¤à¤•à¥‹ खाताको जानकारी अदà¥à¤¯à¤¾à¤µà¤§à¤¿à¤• गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥======
+
+तपाईà¤à¤²à¥‡ आफूले परिवरà¥à¤¤à¤¨ गरà¥à¤¨ चाहेको फिलà¥à¤¡ मातà¥à¤° परिवरà¥à¤¤à¤¨ गरे पà¥à¤—à¥à¤› । तपाईà¤à¤²à¥‡ आफà¥à¤¨à¥‹ पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ नाम परिवरà¥à¤¤à¤¨ गरà¥à¤¨ पाउनà¥à¤¹à¥à¤¨à¥‡ छैन ।
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/uploadmail.txt
new file mode 100644
index 000000000..74ea46407
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/uploadmail.txt
@@ -0,0 +1,13 @@
+à¤à¤‰à¤Ÿà¤¾ फाइल तपाईको DokuWiki मा भरण गरिà¤à¤•à¥‹ छ। थप जानकारी निमà¥à¤¨ रहेका छनॠ:
+फाइल : @MEDIA@
+मिति : @DATE@
+बà¥à¤°à¤¾à¤‰à¤œà¤° : @BROWSER@
+आइपि ठगाना : @IPADDRESS@
+होसà¥à¤Ÿà¤¨à¤¾à¤® : @HOSTNAME@
+आकार : @SIZE@
+MIME पà¥à¤°à¤•à¤¾à¤° : @MIME@
+पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ : @USER@
+
+--
+यो पतà¥à¤° DokuWiki ले
+@DOKUWIKIURL@मा सà¥à¤µà¤¤: तयार पारेको हो। \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/admin.txt
new file mode 100644
index 000000000..7138456f1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/admin.txt
@@ -0,0 +1,3 @@
+====== Beheer ======
+
+Hieronder zie je een lijst van beheertaken beschikbaar in DokuWiki.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/adminplugins.txt
new file mode 100644
index 000000000..916a9ca9b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/adminplugins.txt
@@ -0,0 +1 @@
+===== Additionele plugins ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/backlinks.txt
new file mode 100644
index 000000000..6edbf4021
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/backlinks.txt
@@ -0,0 +1,4 @@
+====== Backlinks ======
+
+Dit is een lijst van pagina's die terug lijken te wijzen naar de huidige pagina.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/conflict.txt
new file mode 100644
index 000000000..926214517
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/conflict.txt
@@ -0,0 +1,5 @@
+====== Er bestaat een nieuwere versie ======
+
+Er bestaat een nieuwere versie van het document dat aangepast wordt. Dit komt voor als een andere gebruiker dit document tegelijk met jou wijzigt.
+
+Bekijk de verschillen die beneden weergegeven worden uitvoerig, beslis dan welke versie de beste is en dus bewaard moet worden. Klik op ''opslaan'' om de eigen versie te bewaren. Klik op ''annuleren'' om de huidige versie te bewaren.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/denied.txt
new file mode 100644
index 000000000..6a8bf773f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/denied.txt
@@ -0,0 +1,3 @@
+====== Toegang geweigerd ======
+
+Sorry: je hebt niet voldoende rechten om verder te gaan. Misschien ben je vergeten in te loggen?
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/diff.txt
new file mode 100644
index 000000000..ef5a1b189
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/diff.txt
@@ -0,0 +1,3 @@
+====== Verschillen ======
+
+Dit geeft de verschillen weer tussen de geselecteerde revisie en de huidige revisie van de pagina.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/draft.txt
new file mode 100644
index 000000000..a6bf5275d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/draft.txt
@@ -0,0 +1,5 @@
+===== Conceptbestand gevonden =====
+
+Je laatste bewerking op deze pagina is niet volledig afgerond. DokuWiki heeft automatisch een concept van je werk opgeslagen waarmee je nu verder kunt gaan. Hieronder tref je het concept aan.
+
+Beslis of je het concept wilt //herstellen//, //verwijderen// of het bewerken wilt //annuleren//.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/edit.txt
new file mode 100644
index 000000000..e539050bc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/edit.txt
@@ -0,0 +1 @@
+Pas de pagina aan en klik op ''Opslaan''. Zie [[wiki:syntax]] voor de Wiki syntax. Pas de pagina allen aan als hij **verbeterd** kan worden. Als je iets wilt uitproberen kun je spelen in de [[playground:playground|zandbak]].
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/editrev.txt
new file mode 100644
index 000000000..1b2d130c7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/editrev.txt
@@ -0,0 +1,2 @@
+**Er is een oude revisie van het document geladen!** Als je nu opslaat bewaar je een nieuwe versie met deze inhoud.
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/index.txt
new file mode 100644
index 000000000..288957ed4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/index.txt
@@ -0,0 +1,4 @@
+====== Index ======
+
+Dit is een index van alle beschikbare pagina's gesorteerd op [[doku>wiki:namespaces|namespaces]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/install.html
new file mode 100644
index 000000000..8ddec7aab
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/install.html
@@ -0,0 +1,14 @@
+<p>Deze pagina helpt u bij de eerste installatie en configuratie van <a href="http://wiki.splitbrain.org">Dokuwiki</a>.
+Meer informatie over deze installer is beschikbaar op zijn eigen <a href="http://wiki.splitbrain.org/wiki:installer">documentatiepagina</a>.</p>
+
+<p>DokuWiki gebruikt platte tekstbestanden voor het opslaan van wikipagina's en andere informatie die bij deze pagina's horen (bijvoorbeeld plaatjes, zoek-indexen, oude revisies enz.). Om goed te kunnen functioneren, <strong>moet</strong>
+DokuWiki schrijftoegang hebben tot de directories die deze bestanden bevatten.
+De installer kan zelf deze toegangspermissies niet regelen. Dit moet normaal gesproken direct in de command shell worden ingevoerd, of in het geval van hosting via FTP of via uw hosting control panel (bijvoorbeeld cPanel).</p>
+
+<p>Deze installer zal uw DokuWiki configureren voor <acronym title="access control list">ACL</acronym>,
+wat de beheerder in staat stelt in te loggen en toegang te verkrijgen tot het beheersdeel van de DokuWiki voor het installeren van plugins, beheren van gebruikers, toegangsrechten tot wiki pagina's en veranderen van configuratie-instellingen.
+Het is niet noodzakelijk voor DokuWiki om te functioneren maar het maakt het een stuk makkelijker om Dokuwiki te beheren.</p>
+
+<p>Ervaren gebruikers of gebruikers die een aangepaste configuratie nodig hebben kunnen voor details terecht op de volgende pagina's:
+<a href="http://wiki.splitbrain.org/wiki:install">installatie-instructies</a>
+en <a href="http://wiki.splitbrain.org/wiki:config">configuratie-instellingen</a>.</p>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/lang.php
new file mode 100644
index 000000000..782a76758
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/lang.php
@@ -0,0 +1,253 @@
+<?php
+/**
+ * dutch language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author François Kooman <fkooman.tuxed.net>
+ * @author Jack van Klaren <dokuwiki@afentoe.xs4all.nl>
+ * @author Riny Heijdendael <riny@heijdendael.nl>
+ * @author Koen Huybrechts <huybkoen@gmail.com>
+ * @author Wouter Schoot <wouter@schoot.org>
+ * @author John de Graaff <john@de-graaff.net>
+ * @author Dion Nicolaas <dion@nicolaas.net>
+ * @author Danny Rotsaert <danny.rotsaert@edpnet.be>
+ * @author Marijn Hofstra hofstra.m@gmail.com
+ * @author Matthias Carchon webmaster@c-mattic.be
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '„';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '‚';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = '\'';
+$lang['btn_edit'] = 'Pagina aanpassen';
+$lang['btn_source'] = 'Toon broncode';
+$lang['btn_show'] = 'Toon pagina';
+$lang['btn_create'] = 'Maak deze pagina aan';
+$lang['btn_search'] = 'Zoeken';
+$lang['btn_save'] = 'Opslaan';
+$lang['btn_preview'] = 'Voorbeeld';
+$lang['btn_top'] = 'Terug naar boven';
+$lang['btn_newer'] = '<< recenter';
+$lang['btn_older'] = 'ouder >>';
+$lang['btn_revs'] = 'Oude revisies';
+$lang['btn_recent'] = 'Recente aanpassingen';
+$lang['btn_upload'] = 'Upload';
+$lang['btn_cancel'] = 'Annuleren';
+$lang['btn_index'] = 'Index';
+$lang['btn_secedit'] = 'Aanpassen';
+$lang['btn_login'] = 'Inloggen';
+$lang['btn_logout'] = 'Uitloggen';
+$lang['btn_admin'] = 'Beheer';
+$lang['btn_update'] = 'Bijwerken';
+$lang['btn_delete'] = 'Verwijder';
+$lang['btn_back'] = 'Terug';
+$lang['btn_backlink'] = 'Referenties';
+$lang['btn_backtomedia'] = 'Terug naar Bestandsselectie';
+$lang['btn_subscribe'] = 'Inschrijven wijzigingen';
+$lang['btn_unsubscribe'] = 'Opzeggen wijzigingen';
+$lang['btn_subscribens'] = 'Inschrijven namespace-wijzigingen';
+$lang['btn_unsubscribens'] = 'Opzeggen namespace-wijzigingen';
+$lang['btn_profile'] = 'Profiel aanpassen';
+$lang['btn_reset'] = 'Wissen';
+$lang['btn_resendpwd'] = 'Stuur een nieuw wachtwoord';
+$lang['btn_draft'] = 'Bewerk concept';
+$lang['btn_recover'] = 'Herstel concept';
+$lang['btn_draftdel'] = 'Verwijder concept';
+$lang['btn_revert'] = 'Herstellen';
+$lang['loggedinas'] = 'Ingelogd als';
+$lang['user'] = 'Gebruikersnaam';
+$lang['pass'] = 'Wachtwoord';
+$lang['newpass'] = 'Nieuw wachtwoord';
+$lang['oldpass'] = 'Bevestig huidig wachtwoord';
+$lang['passchk'] = 'nogmaals';
+$lang['remember'] = 'Bewaar';
+$lang['fullname'] = 'Volledige naam';
+$lang['email'] = 'E-mail';
+$lang['register'] = 'Registreren';
+$lang['profile'] = 'Gebruikersprofiel';
+$lang['badlogin'] = 'Sorry, gebruikersnaam of wachtwoord onjuist';
+$lang['minoredit'] = 'Kleine wijziging';
+$lang['draftdate'] = 'Concept automatisch opgeslagen op';
+$lang['nosecedit'] = 'De pagina is tussentijds veranderd, sectie-informatie was verouderd, volledige pagina geladen.';
+$lang['regmissing'] = 'Vul alle velden in';
+$lang['reguexists'] = 'Er bestaat al een gebruiker met deze loginnaam.';
+$lang['regsuccess'] = 'De gebruiker is aangemaakt. Het wachtwoord is per e-mail verzonden.';
+$lang['regsuccess2'] = 'De gebruiker is aangemaakt.';
+$lang['regmailfail'] = 'Het lijkt erop dat het sturen van de wachtwoordmail mislukt is. Neem contact op met de beheerder!';
+$lang['regbadmail'] = 'Het opgegeven e-mailadres lijkt ongeldig - als je denkt dat dit niet klopt neem dan contact op met de beheerder.';
+$lang['regbadpass'] = 'De twee ingevoerde wachtwoorden zijn niet identiek. Probeer het nog eens.';
+$lang['regpwmail'] = 'Je DokuWiki wachtwoord';
+$lang['reghere'] = 'Je hebt nog geen account? Vraag er eentje aan';
+$lang['profna'] = 'Deze wiki ondersteunt geen profielwijzigingen';
+$lang['profnochange'] = 'Geen wijzigingen, niets gedaan';
+$lang['profnoempty'] = 'Een lege gebruikersnaam of e-mailadres is niet toegestaan';
+$lang['profchanged'] = 'Gebruikersprofiel succesvol aangepast';
+$lang['pwdforget'] = 'Je wachtwoord vergeten? Vraag een nieuw wachtwoord aan';
+$lang['resendna'] = 'Deze wiki ondersteunt het verzenden van wachtwoorden niet';
+$lang['resendpwd'] = 'Stuur een nieuw wachtwoord voor';
+$lang['resendpwdmissing'] = 'Sorry, je moet alle velden invullen.';
+$lang['resendpwdnouser'] = 'Sorry, we kunnen deze gebruikersnaam niet vinden in onze database.';
+$lang['resendpwdbadauth'] = 'Sorry, deze authentiecatiecode is niet geldig. Controleer of je de volledige bevestigings-link hebt gebruikt.';
+$lang['resendpwdconfirm'] = 'Een bevestigingslink is per e-mail verzonden.';
+$lang['resendpwdsuccess'] = 'Je nieuwe wachtwoord is per e-mail verzonden.';
+$lang['license'] = 'Tenzij anders vermeld valt de inhoud van deze wiki onder de volgende licentie:';
+$lang['licenseok'] = 'Let op: Door deze pagina aan te passen geef je de inhoud vrij onder de volgende licentie:';
+$lang['searchmedia'] = 'Bestandsnaam zoeken:';
+$lang['searchmedia_in'] = 'Zoek in %s';
+$lang['txt_upload'] = 'Selecteer een bestand om te uploaden';
+$lang['txt_filename'] = 'Vul nieuwe naam in (optioneel)';
+$lang['txt_overwrt'] = 'Overschrijf bestaand bestand';
+$lang['lockedby'] = 'Momenteel in gebruik door';
+$lang['lockexpire'] = 'Exclusief gebruiksrecht vervalt op';
+$lang['willexpire'] = 'Je exclusieve gebruiksrecht voor het aanpassen van deze pagina verloopt over een minuut.\nKlik op de Voorbeeld-knop om het exclusieve gebruiksrecht te verlengen.';
+$lang['notsavedyet'] = 'Nog niet bewaarde wijzigingen zullen verloren gaan.\nWeet je zeker dat je wilt doorgaan?';
+$lang['rssfailed'] = 'Er is een fout opgetreden bij het ophalen van de feed: ';
+$lang['nothingfound'] = 'Er werd niets gevonden.';
+$lang['mediaselect'] = 'Bestandsselectie';
+$lang['fileupload'] = 'Bestandsupload';
+$lang['uploadsucc'] = 'Upload geslaagd';
+$lang['uploadfail'] = 'Upload mislukt. Misschien verkeerde permissies?';
+$lang['uploadwrong'] = 'Upload mislukt. Deze bestandsextensie is verboden!';
+$lang['uploadexist'] = 'Bestand bestaat reeds. Er is niets gewijzigd.';
+$lang['uploadbadcontent'] = 'Het geüploade bestand heeft niet de bestandsextensie %s.';
+$lang['uploadspam'] = 'De upload is geblokkeerd door de spam blacklist.';
+$lang['uploadxss'] = 'De upload is geblokkeerd wegens mogelijk onveilige inhoud.';
+$lang['uploadsize'] = 'Het geüploade bestand is te groot. (max. %s)';
+$lang['deletesucc'] = 'Het bestand "%s" is verwijderd.';
+$lang['deletefail'] = '"%s" kan niet worden verwijderd - controleer permissies.';
+$lang['mediainuse'] = 'Het bestand "%s" is niet verwijderd - het is nog in gebruik.';
+$lang['namespaces'] = 'Namespaces';
+$lang['mediafiles'] = 'Beschikbare bestanden in';
+$lang['js']['searchmedia'] = 'Zoek naar bestanden';
+$lang['js']['keepopen'] = 'Houd scherm open bij selectie';
+$lang['js']['hidedetails'] = 'Verberg details';
+$lang['js']['nosmblinks'] = 'Linken naar Windows shares werkt alleen in Microsoft Internet Explorer.
+Je kan de link wel kopiëren en plakken.';
+$lang['js']['linkwiz'] = 'Linkwizard';
+$lang['js']['linkto'] = 'Link naar:';
+$lang['js']['del_confirm'] = 'Item(s) verwijderen?';
+$lang['js']['mu_btn'] = 'Meerdere files tegelijk uploaden';
+$lang['mediausage'] = 'Gebruik de volgende syntax om aan het bestand te refereren:';
+$lang['mediaview'] = 'Bekijk het orginele bestand';
+$lang['mediaroot'] = 'root';
+$lang['mediaupload'] = 'Upload een bestand naar de huidige namespace. Om een subnamespace aan te maken, laat je die voorafgaan aan de bestandsnaam bij "Upload als", gescheiden door een dubbele punt.';
+$lang['mediaextchange'] = 'Bestandsextensie veranderd van .%s naar .%s!';
+$lang['reference'] = 'Referenties voor';
+$lang['ref_inuse'] = 'Het bestand kan niet worden verwijderd omdat het nog in gebruik is op de volgende pagina\'s:';
+$lang['ref_hidden'] = 'Enkele referenties staan op pagina\'s waarvoor je geen leesrechten hebt';
+$lang['hits'] = 'Hits';
+$lang['quickhits'] = 'Overeenkomende paginanamen';
+$lang['toc'] = 'Inhoud';
+$lang['current'] = 'huidige';
+$lang['yours'] = 'Jouw versie';
+$lang['diff'] = 'Toon verschillen met huidige revisie';
+$lang['diff2'] = 'Toon verschillen tussen geselecteerde revisies';
+$lang['line'] = 'Regel';
+$lang['breadcrumb'] = 'Spoor';
+$lang['youarehere'] = 'Je bent hier';
+$lang['lastmod'] = 'Laatst gewijzigd';
+$lang['by'] = 'door';
+$lang['deleted'] = 'verwijderd';
+$lang['created'] = 'aangemaakt';
+$lang['restored'] = 'oude revisie hersteld';
+$lang['external_edit'] = 'Externe bewerking';
+$lang['summary'] = 'Samenvatting wijziging';
+$lang['noflash'] = 'De <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> is vereist om de pagina te kunnen weergeven.';
+$lang['download'] = 'Download fragment';
+$lang['mail_newpage'] = 'pagina toegevoegd:';
+$lang['mail_changed'] = 'pagina aangepast:';
+$lang['mail_new_user'] = 'nieuwe gebruiker:';
+$lang['mail_upload'] = 'bestand geüpload:';
+$lang['qb_bold'] = 'Vette tekst';
+$lang['qb_italic'] = 'Cursieve tekst';
+$lang['qb_underl'] = 'Onderstreepte tekst';
+$lang['qb_code'] = 'Code tekst';
+$lang['qb_strike'] = 'Doorgestreepte tekst';
+$lang['qb_h1'] = 'Niveau 1 kop';
+$lang['qb_h2'] = 'Niveau 2 kop';
+$lang['qb_h3'] = 'Niveau 3 kop';
+$lang['qb_h4'] = 'Niveau 4 kop';
+$lang['qb_h5'] = 'Niveau 5 kop';
+$lang['qb_h'] = 'Koptekst';
+$lang['qb_hs'] = 'Kies koptekst';
+$lang['qb_hplus'] = 'Hogere koptekst';
+$lang['qb_hminus'] = 'Lagere koptekst';
+$lang['qb_hequal'] = 'Koptekst op zelfde niveau';
+$lang['qb_link'] = 'Interne link';
+$lang['qb_extlink'] = 'Externe link';
+$lang['qb_hr'] = 'Horizontale lijn';
+$lang['qb_ol'] = 'Geordende lijst';
+$lang['qb_ul'] = 'Ongeordende lijst';
+$lang['qb_media'] = 'Voeg plaatjes en andere bestanden toe';
+$lang['qb_sig'] = 'Handtekening invoegen';
+$lang['qb_smileys'] = 'Smileys';
+$lang['qb_chars'] = 'Speciale tekens';
+$lang['upperns'] = 'Spring naar bovenliggende namespace';
+$lang['admin_register'] = 'Nieuwe gebruiker toevoegen';
+$lang['metaedit'] = 'Metadata wijzigen';
+$lang['metasaveerr'] = 'Schrijven van metadata mislukt';
+$lang['metasaveok'] = 'Metadata bewaard';
+$lang['img_backto'] = 'Terug naar';
+$lang['img_title'] = 'Titel';
+$lang['img_caption'] = 'Bijschrift';
+$lang['img_date'] = 'Datum';
+$lang['img_fname'] = 'Bestandsnaam';
+$lang['img_fsize'] = 'Grootte';
+$lang['img_artist'] = 'Fotograaf';
+$lang['img_copyr'] = 'Copyright';
+$lang['img_format'] = 'Formaat';
+$lang['img_camera'] = 'Camera';
+$lang['img_keywords'] = 'Trefwoorden';
+$lang['subscribe_success'] = '%s toegevoegd aan de lijst voor %s';
+$lang['subscribe_error'] = 'Fout bij toevoegen van %s aan de lijst voor %s';
+$lang['subscribe_noaddress'] = 'Er is geen adres dat overeenkomt met je login, je kan niet toegevoegd worden aan de lijst';
+$lang['unsubscribe_success'] = '%s verwijderd van de lijst voor %s';
+$lang['unsubscribe_error'] = 'Fout bij verwijderen van %s van de lijst voor %s';
+$lang['authmodfailed'] = 'Ongeldige gebruikersauthenticatie-configuratie. Informeer de wikibeheerder.';
+$lang['authtempfail'] = 'Gebruikersauthenticatie is tijdelijk niet beschikbaar. Als deze situatie zich blijft voordoen, informeer dan de wikibeheerder.';
+$lang['i_chooselang'] = 'Kies je taal';
+$lang['i_installer'] = 'DokuWiki Installer';
+$lang['i_wikiname'] = 'Wikinaam';
+$lang['i_enableacl'] = 'ACLs inschakelen (aanbevolen)';
+$lang['i_superuser'] = 'Superuser';
+$lang['i_problems'] = 'De installer vond problemen, hieronder aangegeven. Verhelp deze voor je doorgaat.';
+$lang['i_modified'] = 'Uit veiligheidsoverwegingen werkt dit script alleen met nieuwe en onveranderde DokuWiki-installaties. Pak de bestanden opnieuw uit of raadpleeg de <a href="http://wiki.splitbrain.org/wiki:install">Dokuwiki installatie-instructies</a>';
+$lang['i_funcna'] = 'PHP functie <code>%s</code> is niet beschikbaar. Wellicht heeft je hosting provider deze uitgeschakeld?';
+$lang['i_phpver'] = 'PHP-versie <code>%s</code> is lager dan de vereiste <code>%s</code>. Upgrade PHP.';
+$lang['i_permfail'] = '<code>%s</code> is niet schrijfbaar voor DokuWiki. Pas de permissie-instellingen van deze directory aan.';
+$lang['i_confexists'] = '<code>%s</code> bestaat reeds';
+$lang['i_writeerr'] = 'Niet mogelijk om <code>%s</code> aan te maken. Controleer de directory/bestandspermissies en maak het bestand handmatig aan.';
+$lang['i_badhash'] = 'Onbekende of aangepaste dokuwiki.php (hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - onjuiste of lege waarde';
+$lang['i_success'] = 'De configuratie is succesvol afgerond. Je kunt nu het bestand install.php verwijderen. Ga naar <a href="doku.php">je nieuwe DokuWiki</a>.';
+$lang['i_failure'] = 'Fouten deden zich voor tijdens het schrijven naar de configuratiebestanden. Pas deze aan voor je gebruik kunt maken van <a href="doku.php">je nieuwe DokuWiki</a>.';
+$lang['i_policy'] = 'Initieel ACL-beleid';
+$lang['i_pol0'] = 'Open wiki (lezen, schrijven, uploaden voor iedereen)';
+$lang['i_pol1'] = 'Publieke wiki (lezen voor iedereen, schrijven en uploaden voor geregistreerde gebruikers)';
+$lang['i_pol2'] = 'Besloten wiki (lezen, schrijven en uploaden alleen voor geregistreerde gebruikers)';
+$lang['i_retry'] = 'Opnieuw';
+$lang['mu_intro'] = 'Hiier kun je meerdere bestanden tegelijk uploaden. Klik de blader-knop om ze aan de lijst toe te voegen. Klik Upload als je klaar bent.';
+$lang['mu_gridname'] = 'Bestandsnaam';
+$lang['mu_gridsize'] = 'Grootte';
+$lang['mu_gridstat'] = 'Status';
+$lang['mu_namespace'] = 'Namespace';
+$lang['mu_browse'] = 'Blader';
+$lang['mu_toobig'] = 'te groot';
+$lang['mu_ready'] = 'Klaar om te uploaden';
+$lang['mu_done'] = 'klaar';
+$lang['mu_fail'] = 'mislukt';
+$lang['mu_authfail'] = 'sessie beëindigd';
+$lang['mu_progress'] = '@PCT@% geüpload';
+$lang['mu_filetypes'] = 'Toegestane bestandstypes';
+$lang['mu_info'] = 'bestanden geüpload.';
+$lang['mu_lasterr'] = 'Laatste foutmelding:';
+$lang['recent_global'] = 'Je bekijkt momenteel de wijzigingen binnen de <b>%s</b> namespace. Je kunt ook de <a href="%s">recente wijzigingen van de hele wiki</a> bekijken.';
+$lang['years'] = '%d jaar geleden';
+$lang['months'] = '%d maand geleden';
+$lang['weeks'] = '%d weken geleden';
+$lang['days'] = '%d dagen geleden';
+$lang['hours'] = '%d uren geleden';
+$lang['minutes'] = '%d minuten geleden';
+$lang['seconds'] = '%d seconden geleden';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/locked.txt
new file mode 100644
index 000000000..878fb375c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/locked.txt
@@ -0,0 +1,3 @@
+====== Pagina in exclusief gebruik ======
+
+Deze pagina wordt momenteel aangepast door een andere gebruiker. Wacht tot deze gebruiker klaar is met aanpassen of totdat het gebruiksrecht vervalt.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/login.txt
new file mode 100644
index 000000000..699cbf8fe
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/login.txt
@@ -0,0 +1,3 @@
+====== Login ======
+
+Je bent op dit moment niet ingelogd! Voer je login-gegevens hieronder in om in te loggen. Je browser moet cookies accepteren om in te kunnen loggen.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/mailtext.txt
new file mode 100644
index 000000000..dbe35c519
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/mailtext.txt
@@ -0,0 +1,17 @@
+Er is een pagina in je DokuWiki toegevoegd of gewijzigd. Hier zijn de details
+
+Datum : @DATE@
+Browser : @BROWSER@
+IP-Adres : @IPADDRESS@
+Hostname : @HOSTNAME@
+Oude revisie : @OLDPAGE@
+Nieuwe revisie: @NEWPAGE@
+Samenvatting : @SUMMARY@
+User : @USER@
+
+@DIFF@
+
+
+--
+Deze mail werd gegenereerd door DokuWiki op
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/newpage.txt
new file mode 100644
index 000000000..0e4b95ec0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/newpage.txt
@@ -0,0 +1,3 @@
+====== Dit onderwerp bestaat nog niet ======
+
+De pagina over dit onderwerp bestaat nog niet. Aanmaken kan door op de ''Maak deze pagina aan'' te klikken.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/norev.txt
new file mode 100644
index 000000000..849fc5138
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/norev.txt
@@ -0,0 +1,4 @@
+====== Revisie bestaat niet ======
+
+De opgegeven revisie bestaat niet. Klik op ''Oude revisies'' voor een lijst van oude revisies van dit document.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/preview.txt
new file mode 100644
index 000000000..4d2927aff
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/preview.txt
@@ -0,0 +1,4 @@
+====== Preview ======
+
+Dit is een preview van de tekst zoals hij er uit komt te zien. Let op: het is nog **niet opgeslagen!**
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/pwconfirm.txt
new file mode 100644
index 000000000..ab72ae7c4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/pwconfirm.txt
@@ -0,0 +1,13 @@
+Beste @FULLNAME@!
+
+Iemand heeft een nieuw wachtwoord aangevraagd voor je @TITLE@ login op @DOKUWIKIURL@
+
+Als je geen nieuw wachtwoord hebt aangevraagd kun je deze e-mail negeren.
+
+Volg de volgende link om te bevestigen dat je inderdaad een nieuw wachtwoord wilt:
+
+@CONFIRM@
+
+--
+Deze mail werd gegenereerd door DokuWiki op
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/read.txt
new file mode 100644
index 000000000..fcb791811
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/read.txt
@@ -0,0 +1,2 @@
+Deze pagina is niet beschrijfbaar. Je kan de broncode bekijken maar niks veranderen. Neem contact op met de beheerder als je denkt dat dit niet klopt.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/recent.txt
new file mode 100644
index 000000000..4b507f2ca
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/recent.txt
@@ -0,0 +1,3 @@
+====== Recente wijzigingen ======
+
+De volgende pagina's zijn recent aangepast.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/register.txt
new file mode 100644
index 000000000..338edcca3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/register.txt
@@ -0,0 +1,4 @@
+====== Registreer als nieuwe gebruiker ======
+
+Vul alle informatie hieronder in om een nieuw account voor deze wiki aan te maken. Zorg dat je een **geldig e-mailadres** opgeeft - als je je wachtwoord hier niet in kunt vullen wordt het naar dit adres verzonden. De gebruikersnaam moet een geldige [[doku>wiki:pagename|pagename]] zijn.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/registermail.txt
new file mode 100644
index 000000000..5efb25144
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/registermail.txt
@@ -0,0 +1,14 @@
+Een nieuwe gebruiker heeft zich geregistreerd. Dit zijn de details:
+
+Gebruikersnaam: @NEWUSER@
+Volledige naam: @NEWNAME@
+E-mail : @NEWEMAIL@
+
+Datum : @DATE@
+Browser : @BROWSER@
+IP-adres : @IPADDRESS@
+Hostname : @HOSTNAME@
+
+--
+Dit bericht is gegenereerd door DokuWiki op
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/resendpwd.txt
new file mode 100644
index 000000000..ed4617748
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/resendpwd.txt
@@ -0,0 +1,3 @@
+==== Verstuur een nieuw wachtwoord ====
+
+Voer uw gebruikersnaam in het formulier hieronder in om een nieuw wachtwoord aan te vragen voor deze wiki. Een bevestigingslink zal worden verzonden naar het geregistreerde e-mailadres.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/revisions.txt
new file mode 100644
index 000000000..7a78917fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/revisions.txt
@@ -0,0 +1,4 @@
+====== Oude revisies ======
+
+Dit zijn de oude revisies van het document. Om terug te keren naar een oude revisie selecteer je hem hieronder en klik je op de ''Pagina aanpassen'' en vervolgens op ''Opslaan''.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/searchpage.txt
new file mode 100644
index 000000000..3ace704c8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/searchpage.txt
@@ -0,0 +1,5 @@
+====== Zoeken ======
+
+Hieronder zijn de resultaten van de zoekopdracht. Niks gevonden? Maak een nieuwe pagina met als naam je zoekopdracht. Klik hiervoor op ''Pagina aanpassen''.
+
+===== Resultaten =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/showrev.txt
new file mode 100644
index 000000000..c1bfa4e2b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/showrev.txt
@@ -0,0 +1,2 @@
+**Dit is een oude revisie van het document!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/stopwords.txt
new file mode 100644
index 000000000..3056c4a70
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/stopwords.txt
@@ -0,0 +1,37 @@
+# This is a list of words the indexer ignores, one word per line
+# When you edit this file be sure to use UNIX line endings (single newline)
+# No need to include words shorter than 3 chars - these are ignored anyway
+# This list is based upon the ones found at http://www.ranks.nl/stopwords/
+aan
+als
+bij
+dan
+dat
+die
+dit
+een
+had
+heb
+hem
+het
+hij
+hoe
+hun
+kan
+men
+met
+mij
+nog
+ons
+ook
+tot
+uit
+van
+was
+wat
+wel
+wij
+zal
+zei
+zij
+zou
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/subscribermail.txt
new file mode 100644
index 000000000..5b092a9a6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/subscribermail.txt
@@ -0,0 +1,16 @@
+Hallo!
+
+De pagina @PAGE@ op de @TITLE@ wiki is gewijzigd.
+Hier zijn de aanpassingen:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Om deze berichten niet meer te ontvangen van @DOKUWIKIURL@ , ga naar
+@NEWPAGE@
+en kies 'Opzeggen wijzigingen'.
+
+--
+Dit bericht is gegenereerd door DokuWiki op
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/updateprofile.txt
new file mode 100644
index 000000000..2368a09fd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/updateprofile.txt
@@ -0,0 +1,3 @@
+===== Wijzig uw gebruikersprofiel =====
+
+Je hoeft alleen de velden aan te passen die je wilt wijzigen. Je gebruikersnaam is niet aan te passen.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/uploadmail.txt
new file mode 100644
index 000000000..1816400d7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/uploadmail.txt
@@ -0,0 +1,14 @@
+Er is een bestand geüpload naar uw DokuWiki. Hier zijn de details;
+
+Bestand : @MEDIA@
+Datum : @DATE@
+Browser : @BROWSER@
+IP-adres : @IPADDRESS@
+Hostname : @HOSTNAME@
+Grootte : @SIZE@
+MIME type: @MIME@
+Gebruiker: @USER@
+
+--
+Dit bericht is gegenereerd door DokuWiki op
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/wordblock.txt
new file mode 100644
index 000000000..d887d7318
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/wordblock.txt
@@ -0,0 +1,4 @@
+====== SPAM geblokkeerd ======
+
+Je wijzigingen zijn **niet** opgeslagen omdat ze een of meer geblokkeerde woorden bevatten. Als je probeerde de Wiki te spammen -- Foei stouterd! Als je denkt dat dit een fout is neem dan contact op met de beheerder van deze Wiki.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/admin.txt
new file mode 100644
index 000000000..99289a18b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/admin.txt
@@ -0,0 +1,3 @@
+====== Administrasjon ======
+
+Nedenfor finner du en liste over administrative oppgaver tilgjengelig i DokuWiki.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/adminplugins.txt
new file mode 100644
index 000000000..32499a2e4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/adminplugins.txt
@@ -0,0 +1 @@
+====== Ekstra tilleggene ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/backlinks.txt
new file mode 100644
index 000000000..9fe72066e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/backlinks.txt
@@ -0,0 +1,3 @@
+====== Tilbakelinker ======
+
+Dette er en liste over sider som ser ut til å linke tilbake til den aktuelle siden. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/conflict.txt
new file mode 100644
index 000000000..89479af4f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/conflict.txt
@@ -0,0 +1,6 @@
+====== Det fins en nyere versjon ======
+
+Det fins en nyere versjon av dokumentet du har redigert. Dette kan skje når en annen bruker redigerer dokumentet samtidig med deg.
+
+Legg nøye merke til forskjellene som vises under, og velg deretter hvilken versjon du vil beholde. Om du velger ''**Lagre**'', så kommer din versjon til å lagres. Velg ''**Avbryt**'' for å beholde den nyeste versjonen (ikke din).
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/denied.txt
new file mode 100644
index 000000000..4f8c9a188
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/denied.txt
@@ -0,0 +1,3 @@
+====== Adgang forbudt ======
+
+Adgang forbudt. Kanskje du har glemt å logge deg inn?
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/diff.txt
new file mode 100644
index 000000000..e4c2eb080
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/diff.txt
@@ -0,0 +1,4 @@
+====== Forskjeller ======
+
+Her vises forskjeller mellom den valgte versjonen og den nåværende versjonen av dokumentet.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/draft.txt
new file mode 100644
index 000000000..8bcea65aa
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/draft.txt
@@ -0,0 +1,6 @@
+====== Kladdfil funnet ======
+
+Din siste endring av denne siden ble ikke avsluttet riktig. DokuWiki lagret automatisk en kladd under ditt arbeid som du nå kan bruke for å fortsette redigeringen. Nedenfor kan du se de lagrede data.
+
+Vennligst avgjør om du vil //gjennopprette// din tapte sesjon, //slette// kladden eller //avbryte// redigeringen.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/edit.txt
new file mode 100644
index 000000000..bdb3bc854
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/edit.txt
@@ -0,0 +1,2 @@
+Rediger siden og klikk på ''**Lagre**''. Se [[wiki:syntax]] for Wikisyntaks. Rediger siden bare hvis du kan **forbedre** sidens innhold. Hvis du vil teste ut hvordan saker og ting fungerer, kan du gjøre det på [[playground:playground|lekeplassen]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/editrev.txt
new file mode 100644
index 000000000..652a84c38
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/editrev.txt
@@ -0,0 +1,2 @@
+**Du har hentet en tidligere versjon av dokumentet!** Hvis du lagrer den tidligere versjonen så kommer du til å lage en ny og aktiv versjon med dette innholdet.
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/index.txt
new file mode 100644
index 000000000..e2ea95933
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/index.txt
@@ -0,0 +1,4 @@
+====== Indeks ======
+
+Dette er en fortegnelse over alle tilgjengelige sider, sortert etter [[doku>namespaces|navnerom]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/install.html
new file mode 100644
index 000000000..541445494
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/install.html
@@ -0,0 +1,24 @@
+<p>Denne siden assisterer under førstegangs installasjon og konfigurasjon av
+<a href="http://dokuwiki.org">Dokuwiki</a>. Mer informasjon for denne
+installasjonen er tilgjengelig på
+<a href="http://dokuwiki.org/installer">dokumentasjonssiden</a>.</p>
+
+<p>DokuWiki bruker vanlige filer for lagring av wikisider og annen
+informasjon assosiert med disse sidene (f.eks. bilder, søkeindekser, eldre
+revisjoner osv.). For å kunne virke <strong>må</strong> DokuWiki
+ha skrivetilgang til de mapper som lagrer disse filene.
+Denne installasjonen kan ikke sette opp mapperettigheter. Det må normalt
+gjøres direkte fra et kommandoskall, eller om du bruker en leverandør,
+via FTP eller ditt kontrollpanel på tjener (f.eks. cPanel).</p>
+
+<p>Denne installasjonen vil sette opp din DokuWiki-konfigurasjon for
+<acronym title="access control list">ACL</acronym>, som igjen tillater administrator
+innlogging og tilgang til DokuWikiens administratormeny for installasjon av tillegg,
+brukerbehandling, adgangskontrollbehandling til wikisider og endring av konfigurasjon.
+Det er ikke påkrevd for at DokuWiki skal virke, men det vil gjøre Dokuwiki enklere å
+administrere.</p>
+
+<p>Erfarne brukere eller brukere med spessielle oppsettingskrav bør se på disse lenkene
+for detaljer rundt
+<a href="http://dokuwiki.org/install">installasjonsinstrukser</a>
+og <a href="http://dokuwiki.org/config">konfigurasjonsinnstillinger</a>.</p>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/lang.php
new file mode 100644
index 000000000..2dc2c8339
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/lang.php
@@ -0,0 +1,260 @@
+<?php
+/**
+ * Norwegian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Reidar Mosvold <Reidar.Mosvold@hit.no>
+ * @author Jorge Barrera Grandon <jorge@digitalwolves.org>
+ * @author Rune Rasmussen http://www.syntaxerror.no/
+ * @author Thomas Nygreen <nygreen@gmail.com>
+ * @author Arild Burud <arildb@met.no>
+ * @author Torkill Bruland <torkar-b@online.no>
+ * @author Rune M. Andersen <rune.andersen@gmail.com>
+ * @author Jakob Vad Nielsen (me@jakobnielsen.net)
+ * @author Kjell Tore Næsgaard <kjell.t.nasgaard@ntnu.no>
+ * @author Knut Staring <knutst@gmail.com>
+ * @author Lisa Ditlefsen <lisa@vervesearch.com>
+ * @author Erik Pedersen <erik.pedersen@shaw.ca>
+ * @author Erik Bjørn Pedersen <erik.pedersen@shaw.ca>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '“';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '‘';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = '\'';
+$lang['btn_edit'] = 'Rediger denne siden';
+$lang['btn_source'] = 'Vis kildetekst';
+$lang['btn_show'] = 'Vis siden';
+$lang['btn_create'] = 'Lag denne siden';
+$lang['btn_search'] = 'Søk';
+$lang['btn_save'] = 'Lagre';
+$lang['btn_preview'] = 'Forhåndsvis';
+$lang['btn_top'] = 'Til toppen av siden';
+$lang['btn_newer'] = '<< nyere';
+$lang['btn_older'] = 'eldre >>';
+$lang['btn_revs'] = 'Historikk';
+$lang['btn_recent'] = 'Siste endringer';
+$lang['btn_upload'] = 'Last opp';
+$lang['btn_cancel'] = 'Avbryt';
+$lang['btn_index'] = 'Indeks';
+$lang['btn_secedit'] = 'Rediger';
+$lang['btn_login'] = 'Logg inn';
+$lang['btn_logout'] = 'Logg ut';
+$lang['btn_admin'] = 'Admin';
+$lang['btn_update'] = 'Oppdater';
+$lang['btn_delete'] = 'Slett';
+$lang['btn_back'] = 'Tilbake';
+$lang['btn_backlink'] = 'Tilbakelenker';
+$lang['btn_backtomedia'] = 'Tilbake til valg av mediafil';
+$lang['btn_subscribe'] = 'Abonner på endringer';
+$lang['btn_unsubscribe'] = 'Ikke abonner på endringer';
+$lang['btn_subscribens'] = 'Abonner på endringer i navnerom';
+$lang['btn_unsubscribens'] = 'Stopp abonnement på endringer i navnerom';
+$lang['btn_profile'] = 'Oppdater profil';
+$lang['btn_reset'] = 'Tilbakestill';
+$lang['btn_resendpwd'] = 'Send nytt passord';
+$lang['btn_draft'] = 'Rediger kladd';
+$lang['btn_recover'] = 'Gjennvinn kladd';
+$lang['btn_draftdel'] = 'Slett kladd';
+$lang['btn_revert'] = 'Gjenopprette';
+$lang['loggedinas'] = 'Innlogget som';
+$lang['user'] = 'Brukernavn';
+$lang['pass'] = 'Passord';
+$lang['newpass'] = 'Nytt passord';
+$lang['oldpass'] = 'Bekreft gjeldende passord';
+$lang['passchk'] = 'Bekreft passord';
+$lang['remember'] = 'Husk meg';
+$lang['fullname'] = 'Fullt navn';
+$lang['email'] = 'E-post';
+$lang['register'] = 'Registrer deg';
+$lang['profile'] = 'Brukerprofil';
+$lang['badlogin'] = 'Ugyldig brukernavn og/eller passord.';
+$lang['minoredit'] = 'Mindre endringer';
+$lang['draftdate'] = 'Kladd autolagret';
+$lang['nosecedit'] = 'Siden ble endret i mellomtiden, seksjonsinfo har blitt foreldet - lastet full side istedet.';
+$lang['regmissing'] = 'Vennligst fyll ut alle felt.';
+$lang['reguexists'] = 'Det finnes allerede en konto med dette brukernavnet.';
+$lang['regsuccess'] = 'Brukerkonto har blitt laget og passord har blitt sendt via e-post.';
+$lang['regsuccess2'] = 'Brukeren har blitt laget.';
+$lang['regmailfail'] = 'En feil oppstod da passordet ditt skulle sendes via e-post. Vennligst kontakt administratoren!';
+$lang['regbadmail'] = 'Den angitte e-post adressen ser ut til å være ugyldig. Vennligst kontakt administratoren om du anser dette som feilaktig.';
+$lang['regbadpass'] = 'De to angitte passordene er ikke like, vennligst forsøk igjen.';
+$lang['regpwmail'] = 'Ditt DokuWiki passord';
+$lang['reghere'] = 'Har du ikke en konto ennå? Lag deg en';
+$lang['profna'] = 'Denne wikien støtter ikke profilendringer';
+$lang['profnochange'] = 'Ingen endringer, ingenting å gjøre.';
+$lang['profnoempty'] = 'Tomt navn- eller e-postfelt er ikke tillatt.';
+$lang['profchanged'] = 'Brukerprofil ble vellykket oppdatert.';
+$lang['pwdforget'] = 'Glemt ditt passord? FÃ¥ deg et nytt';
+$lang['resendna'] = 'Denne wikien støtter ikke nyutsending.';
+$lang['resendpwd'] = 'Send nytt passord for';
+$lang['resendpwdmissing'] = 'Beklager, du må fylle inn alle felt.';
+$lang['resendpwdnouser'] = 'Beklager, vi kan ikke finne denne brukeren i vår database.';
+$lang['resendpwdbadauth'] = 'Beklager, denne autorisasjonskoden er ikke gyldig. Sjekk at du brukte hele bekreftelseslenken.';
+$lang['resendpwdconfirm'] = 'En bekreftelseslenke er blitt sendt på e-post.';
+$lang['resendpwdsuccess'] = 'Ditt nye passord er blitt sendt på e-post.';
+$lang['license'] = 'Der annet ikke er særskilt beskrevet, er innholdet på denne wiki regulert av følgende lisens:';
+$lang['licenseok'] = 'Merk: Ved å endre på denne siden godtar du at ditt innhold blir regulert av følgende lisens:';
+$lang['searchmedia'] = 'Søk filnavn';
+$lang['searchmedia_in'] = 'Søk i %s';
+$lang['txt_upload'] = 'Velg fil som skal lastes opp';
+$lang['txt_filename'] = 'Skriv inn wikinavn (alternativt)';
+$lang['txt_overwrt'] = 'Overskriv eksisterende fil';
+$lang['lockedby'] = 'Stengt av';
+$lang['lockexpire'] = 'Avstengningen opphører';
+$lang['willexpire'] = 'Din redigeringslås for dette dokumentet kommer snart til å opphøre.\nFor å unngå versjonskonflikter bør du forhåndsvise dokumentet ditt for å forlenge redigeringslåsen.';
+$lang['notsavedyet'] = 'Ulagrede endringer vil gå tapt.\nVil du fortsette?';
+$lang['rssfailed'] = 'En feil oppstod da denne kilden skulle hentes:';
+$lang['nothingfound'] = 'Ingen data funnet.';
+$lang['mediaselect'] = 'Valg av mediafil';
+$lang['fileupload'] = 'Mediafil Opplasting';
+$lang['uploadsucc'] = 'Opplastingen var vellykket';
+$lang['uploadfail'] = 'Opplastingen var mislykket. Kanskje feil rettigheter?';
+$lang['uploadwrong'] = 'Opplastingen ble nektet. Denne filendelsen er ikke tillatt!';
+$lang['uploadexist'] = 'Filen eksisterer. Ingenting har blitt gjort.';
+$lang['uploadbadcontent'] = 'Det opplastede innholdet passer ikke til filendelsen %s.';
+$lang['uploadspam'] = 'Opplastingen ble blokkert av svartelisten for spam.';
+$lang['uploadxss'] = 'Opplastingen ble blokkert på grunn av mulig skadelig innhold.';
+$lang['uploadsize'] = 'Den opplastede filen var for stor. (max. %s)';
+$lang['deletesucc'] = 'Filen "%s" har blitt slettet.';
+$lang['deletefail'] = '"%s" kunne ikke slettes - sjekk rettighetene.';
+$lang['mediainuse'] = 'Filen "%s" har ikke biltt slettet - den er fortsatt i bruk.';
+$lang['namespaces'] = 'Navnerom';
+$lang['mediafiles'] = 'Tilgjengelige filer i';
+$lang['js']['searchmedia'] = 'Søk for filer';
+$lang['js']['keepopen'] = 'Hold vindu åpent ved valg';
+$lang['js']['hidedetails'] = 'Skjul detaljer';
+$lang['js']['nosmblinks'] = 'Lenker til Windows-ressurser fungerer bare i Microsoft sin Internet Explorer.
+Du kan fortsatt kopiere og lime inn lenken.';
+$lang['js']['linkwiz'] = 'guide til lenker';
+$lang['js']['linkto'] = 'Lenke til:';
+$lang['js']['del_confirm'] = 'Slett denne oppføringen?';
+$lang['js']['mu_btn'] = 'Last opp flere filer samtidig';
+$lang['mediausage'] = 'Bruk følgende syntaks til å refferer til denne filen:';
+$lang['mediaview'] = 'Vis original fil';
+$lang['mediaroot'] = 'rot';
+$lang['mediaupload'] = 'Last opp en fil til gjeldende navnerom her. For å opprette undernavnerom, før dem opp før filnavn i "Last opp som" adskilt med kolon.';
+$lang['mediaextchange'] = 'Filendelse endret fra .%s til .%s!';
+$lang['reference'] = 'Referanser for';
+$lang['ref_inuse'] = 'Denne filen kan ikke slettes fordi den er fortsatt i bruk av følgende sider:';
+$lang['ref_hidden'] = 'Noen referanser er på sider du ikke har tilgang til å lese';
+$lang['hits'] = 'Treff';
+$lang['quickhits'] = 'Matchende wikinavn';
+$lang['toc'] = 'Innholdsfortegnelse';
+$lang['current'] = 'nåværende versjon';
+$lang['yours'] = 'Din versjon';
+$lang['diff'] = 'Vis forskjeller mot nåværende versjon';
+$lang['diff2'] = 'Vis forskjeller mellom valgte versjoner';
+$lang['line'] = 'Linje';
+$lang['breadcrumb'] = 'Spor';
+$lang['youarehere'] = 'Du er her';
+$lang['lastmod'] = 'Sist modifisert';
+$lang['by'] = 'av';
+$lang['deleted'] = 'fjernet';
+$lang['created'] = 'opprettet';
+$lang['restored'] = 'gjenopprettet til en tidligere versjon';
+$lang['external_edit'] = 'ekstern redigering';
+$lang['summary'] = 'Redigeringskommentar';
+$lang['noflash'] = 'For at dette innholdet skal vises må du ha <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a>.';
+$lang['download'] = 'Last ned utdraget';
+$lang['mail_newpage'] = 'side lagt til:';
+$lang['mail_changed'] = 'side endret:';
+$lang['mail_new_user'] = 'ny bruker:';
+$lang['mail_upload'] = 'fil opplastet:';
+$lang['qb_bold'] = 'Fet tekst';
+$lang['qb_italic'] = 'Kursiv tekst';
+$lang['qb_underl'] = 'Understreket tekst';
+$lang['qb_code'] = 'Kodetekst';
+$lang['qb_strike'] = 'Gjennomstreket tekst';
+$lang['qb_h1'] = 'Overskrift nivå 1';
+$lang['qb_h2'] = 'Overskrift nivå 2';
+$lang['qb_h3'] = 'Overskrift nivå 3';
+$lang['qb_h4'] = 'Overskrift nivå 4';
+$lang['qb_h5'] = 'Overskrift nivå 5';
+$lang['qb_h'] = 'Overskrift';
+$lang['qb_hs'] = 'Velg overskrift';
+$lang['qb_hplus'] = 'Høyere overskrift';
+$lang['qb_hminus'] = 'Lavere overskrift';
+$lang['qb_hequal'] = 'Overskrift på samme nivå';
+$lang['qb_link'] = 'Intern lenke';
+$lang['qb_extlink'] = 'Ekstern lenke';
+$lang['qb_hr'] = 'Horisontal linje';
+$lang['qb_ol'] = 'Sortert listepunkt';
+$lang['qb_ul'] = 'Usortert listepunkt';
+$lang['qb_media'] = 'Legg til bilder og andre filer';
+$lang['qb_sig'] = 'Føy til signatur';
+$lang['qb_smileys'] = 'Smilefjes';
+$lang['qb_chars'] = 'Spesialtegn';
+$lang['upperns'] = 'gå til overordnet navnerom';
+$lang['admin_register'] = 'Legg til ny bruker';
+$lang['metaedit'] = 'Rediger metadata';
+$lang['metasaveerr'] = 'Skriving av metadata feilet';
+$lang['metasaveok'] = 'Metadata lagret';
+$lang['img_backto'] = 'Tilbake til';
+$lang['img_title'] = 'Tittel';
+$lang['img_caption'] = 'Bildetekst';
+$lang['img_date'] = 'Dato';
+$lang['img_fname'] = 'Filnavn';
+$lang['img_fsize'] = 'Størrelse';
+$lang['img_artist'] = 'Fotograf';
+$lang['img_copyr'] = 'Opphavsrett';
+$lang['img_format'] = 'Format';
+$lang['img_camera'] = 'Kamera';
+$lang['img_keywords'] = 'Nøkkelord';
+$lang['subscribe_success'] = 'Lagt til %s som abonnent av listen for %s';
+$lang['subscribe_error'] = 'En feil oppstod når %s skulle legges til som abonnent av listen for %s';
+$lang['subscribe_noaddress'] = 'Det er ingen adresse assosiert med din login. Du kan dermed ikke bli lagt til som abonnent av listen.';
+$lang['unsubscribe_success'] = 'Fjernet %s som abonnent for listen %s';
+$lang['unsubscribe_error'] = 'En feil oppstod når %s skulle fjernes som abonnent fra listen for %s';
+$lang['authmodfailed'] = 'Feilkonfigurert brukerautorisasjon. Vennligst innformer Wiki-admin.';
+$lang['authtempfail'] = 'Brukerautorisasjon er midlertidig utilgjengelig. Om dette vedvarer, vennligst informer Wiki-admin.';
+$lang['i_chooselang'] = 'Velg ditt språk';
+$lang['i_installer'] = 'DokuWiki-installasjon';
+$lang['i_wikiname'] = 'Wikinavn';
+$lang['i_enableacl'] = 'Aktiver ACL (anbefalt)';
+$lang['i_superuser'] = 'Superbruker';
+$lang['i_problems'] = 'Installasjonen oppdaget noen problemer, disse listes nedenfor. Du kan ikke fortsett før du har løst disse.';
+$lang['i_modified'] = 'For sikkerhets skyld vil dette skriptet bare virke med en ny og uendret Dokuwiki-installsjon.
+ Du bør enten pakke ut filene på nytt fra den nedlastede pakken, eller konsultere den komplette
+ <a href="http://dokuwiki.org/install">Dokuwiki-installasjonsinstruksen</a>';
+$lang['i_funcna'] = 'PHP-funksjonen <code>%s</code> er ikke tilgjengelig. Kanskje din leverandør har deaktivert den av noen grunn?';
+$lang['i_phpver'] = 'Your PHP version <code>%s</code> is lower than the needed <code>%s</code>. You need to upgrade your PHP install.';
+$lang['i_permfail'] = '<code>%s</code> er ikke skrivbar for DokuWiki. Du må fikse rettighetene for denne mappen!';
+$lang['i_confexists'] = '<code>%s</code> eksisterer allerede';
+$lang['i_writeerr'] = 'Kunne ikke opprette <code>%s</code>. Du må sjekke mappe-/filrettigheter og opprette filen manuelt.';
+$lang['i_badhash'] = 'ikke gjenkjent eller modifisert dokuwiki.php (hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - ugyldig eller tom verdi';
+$lang['i_success'] = 'Konfigurasjonen ble vellykket fullført. Du kan slette install.php filen nå. Fortsett til
+ <a href="doku.php">din nye DokuWiki</a>.';
+$lang['i_failure'] = 'En eller flere feil oppstod ved skriving til konfigurasjonsfilene. Du må kanskje fikse dem manuelt før
+ du kan bruke <a href="doku.php">din nye DokuWiki</a>.';
+$lang['i_policy'] = 'Innledende ACL-politikk';
+$lang['i_pol0'] = 'Ã…pen Wiki (les, skriv og opplasting for alle)';
+$lang['i_pol1'] = 'Offentlig Wiki (les for alle, skriving og opplasting bare for registrerte brukere)';
+$lang['i_pol2'] = 'Lukket Wiki (les, skriv og opplasting bare for registrerte brukere)';
+$lang['i_retry'] = 'Prøv igjen';
+$lang['mu_intro'] = 'Her kan du laste opp flere filer samtidig. Klikk på utforsk-knappen for å legge dem til i køen. Klikk på "last opp" når du er ferdig med å velge filene. ';
+$lang['mu_gridname'] = 'Filnavn';
+$lang['mu_gridsize'] = 'Størrelse';
+$lang['mu_gridstat'] = 'Status';
+$lang['mu_namespace'] = 'Navnerom (Namespace)';
+$lang['mu_browse'] = 'Utforsk';
+$lang['mu_toobig'] = 'for stor';
+$lang['mu_ready'] = 'klar for opplasting';
+$lang['mu_done'] = 'komplett';
+$lang['mu_fail'] = 'feilet';
+$lang['mu_authfail'] = 'sesjonen har utløpt';
+$lang['mu_progress'] = '@PCT@% lastet opp';
+$lang['mu_filetypes'] = 'Tillatte filtyper';
+$lang['mu_info'] = 'filer lastet opp.';
+$lang['mu_lasterr'] = 'Siste feilen:';
+$lang['recent_global'] = 'Du ser nå på endringene i navnerommet <b>%s</b>. Du kan også<a href="%s">se på nylig foretatte endringer for hele wikien</a>.';
+$lang['years'] = '%d år siden';
+$lang['months'] = '%d måneder siden';
+$lang['weeks'] = '%d uker siden';
+$lang['days'] = '%d dager siden';
+$lang['hours'] = '%d timer siden';
+$lang['minutes'] = '%d minutter siden';
+$lang['seconds'] = '%d sekunder siden';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/locked.txt
new file mode 100644
index 000000000..cb14c892e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/locked.txt
@@ -0,0 +1,3 @@
+====== Dokumentet er låst ======
+
+Dette dokumentet er for tiden låst for redigering av en annen bruker. Du må vente til denne brukeren er ferdig med sin redigering, eller til dokumentlåsen opphører å gjelde.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/login.txt
new file mode 100644
index 000000000..149cf0031
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/login.txt
@@ -0,0 +1,4 @@
+====== Logg inn ======
+
+Du er ikke innlogget! Angi ditt brukernavn og passord nedenfor for å logge inn. Støtte for såkalte "cookies" må være aktivert i din nettleser for at du skal kunne logge inn.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/mailtext.txt
new file mode 100644
index 000000000..9c0714c2f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/mailtext.txt
@@ -0,0 +1,17 @@
+En side i din DokuWiki har blitt lagt til eller blitt endret. Informasjon om endringen:
+
+Dato : @DATE@
+Nettleser : @BROWSER@
+IP-adresse : @IPADDRESS@
+Vertsnavn : @HOSTNAME@
+Tidligere versjon : @OLDPAGE@
+Aktuell versjon : @NEWPAGE@
+Redigeringskommentar : @SUMMARY@
+Bruker : @USER@
+
+@DIFF@
+
+
+--
+Denne meldingen ble laget av DokuWiki
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/newpage.txt
new file mode 100644
index 000000000..8f4b8da79
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/newpage.txt
@@ -0,0 +1,3 @@
+====== Det fins ikke noe innhold ======
+
+Du har klikket på en lenke til et emne som ikke finnes ennå. Du kan skape det gjennom å klikke på ''**Lag denne siden**''.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/norev.txt
new file mode 100644
index 000000000..dfd71db0f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/norev.txt
@@ -0,0 +1,4 @@
+====== Det fins ingen slik versjon ======
+
+Den angitte versjonen fins ikke. Bruk ''**Historikk**'' for en oversikt over de versjoner som fins av dette dokumentet.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/preview.txt
new file mode 100644
index 000000000..2bed20e86
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/preview.txt
@@ -0,0 +1,4 @@
+====== Forhåndsvisning ======
+
+Dette er en forhåndsvisning av hvordan din tekst kommer til å se ut når den blir vist. Husk at den er **ikke lagret** ennå!
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/pwconfirm.txt
new file mode 100644
index 000000000..9b8a0ab3e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/pwconfirm.txt
@@ -0,0 +1,15 @@
+Hei @FULLNAME@!
+
+Noen har bedt om nytt passord for din @TITLE@ innlogging
+på @DOKUWIKIURL@
+
+Om du ikke bad om nytt passord kan du bare overse denne e-posten.
+
+For å bekrefte at forespørselen virkelig kom fra deg kan du bruke
+følgende lenke:
+
+@CONFIRM@
+
+--
+Denne e-posten ble generert av DokuWiki på
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/read.txt
new file mode 100644
index 000000000..27fcb5118
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/read.txt
@@ -0,0 +1,2 @@
+Denne siden er skrivebeskyttet. Du kan se på den, men ikke endre den. Kontakt administratoren hvis du mener at du bør kunne endre siden.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/recent.txt
new file mode 100644
index 000000000..d9357b1a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/recent.txt
@@ -0,0 +1,5 @@
+====== Siste nytt ======
+
+Følgende sider/dokumenter har nylig blitt oppdatert.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/register.txt
new file mode 100644
index 000000000..1ce95c44d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/register.txt
@@ -0,0 +1,4 @@
+====== Registrer deg som bruker ======
+
+Angi all informasjon som det blir spurt om nedenfor for å skape en ny brukerkonto for denne wiki. Vær spesielt nøye med å angi en **gyldig e-postadresse** - ditt passord vil bli sendt til den e-postadressen du angir. Brukernavnet må være et gyldig [[doku>pagename|sidenavn]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/registermail.txt
new file mode 100644
index 000000000..e1fae2b90
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/registermail.txt
@@ -0,0 +1,14 @@
+En ny bruker har registret seg, her er detaljene:
+
+Brukernavn : @NEWUSER@
+Fult navn : @NEWNAME@
+E-post : @NEWEMAIL@
+
+Dato : @DATE@
+Nettleser : @BROWSER@
+IP-adresse : @IPADDRESS@
+Tjener : @HOSTNAME@
+
+--
+Denne e-posten ble generert av DokuWiki på
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/resendpwd.txt
new file mode 100644
index 000000000..21625d3f5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/resendpwd.txt
@@ -0,0 +1,4 @@
+====== Send nytt passord ======
+
+Fyll inn ditt brukernavn i skjema nedenfor for å be om nytt passord for din konto i denne wiki. En bekreftelseslenke vil bli sent til din e-postadresse.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/revisions.txt
new file mode 100644
index 000000000..023fd8dce
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/revisions.txt
@@ -0,0 +1,4 @@
+====== Historikk ======
+
+Her vises tidligere versjoner av dokumentet. For å sette dette dokumentet tilbake til en tidligere versjon kan du velge den ønskede versjonen nedenfor, klikke på **''Rediger denne siden''** og lagre dokumentet.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/searchpage.txt
new file mode 100644
index 000000000..e94e7895b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/searchpage.txt
@@ -0,0 +1,5 @@
+====== Søk ======
+
+Du ser resultatet av dette søket nedenfor. Hvis du ikke finner det du leter etter, så kan du skape en ny side med samme navn som ditt søk ved å klikke på ''**Lag denne siden**''-knappen.
+
+===== Resultat =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/showrev.txt
new file mode 100644
index 000000000..556896437
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/showrev.txt
@@ -0,0 +1,2 @@
+**Dette er en gammel revisjon av dokumentet!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/stopwords.txt
new file mode 100644
index 000000000..2b2ab11e2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/stopwords.txt
@@ -0,0 +1,130 @@
+# This is a list of words the indexer ignores, one word per line
+# When you edit this file be sure to use UNIX line endings (single newline)
+# No need to include words shorter than 3 chars - these are ignored anyway
+# This list is based upon the ones found at http://www.ranks.nl/stopwords/
+alle
+andre
+arbeid
+begge
+bort
+bra
+bruke
+denne
+der
+deres
+det
+din
+disse
+eller
+ene
+eneste
+enhver
+enn
+folk
+for
+fordi
+forsÛke
+fra
+fÃ…
+fÛr
+fÛrst
+gjorde
+gjÛre
+god
+gÃ…
+hadde
+han
+hans
+hennes
+her
+hva
+hvem
+hver
+hvilken
+hvis
+hvor
+hvordan
+hvorfor
+ikke
+inn
+innen
+kan
+kunne
+lage
+lang
+lik
+like
+makt
+mange
+med
+meg
+meget
+men
+mens
+mer
+mest
+min
+mye
+mÃ…
+mÃ…te
+navn
+nei
+nÃ…
+nÃ…r
+ogsÃ…
+opp
+oss
+over
+part
+punkt
+pÃ…
+rett
+riktig
+samme
+sant
+siden
+sist
+skulle
+slik
+slutt
+som
+start
+stille
+sÃ…
+tid
+til
+tilbake
+tilstand
+under
+uten
+var
+ved
+verdi
+vil
+ville
+vite
+vÃ…r
+vÖre
+vÖrt
+om
+er
+og
+du
+dine
+de
+deres
+com
+for
+fra
+inni
+hvordan
+det
+dette
+var
+hva
+når
+hvor
+hvem
+vil
+med
+www \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/subscribermail.txt
new file mode 100644
index 000000000..999f75787
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/subscribermail.txt
@@ -0,0 +1,16 @@
+Hei!
+
+Siden @PAGE@ i @TITLE@-wikien har blitt endret.
+Her er endringene:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+For å avslutte abonnering på denne siden logg inn
+på wikien på @DOKUWIKIURL@, besøk deretter @NEWPAGE@
+og velg 'Ikke abonner på endringer'.
+
+--
+Denne mailen ble generert av DokuWiki på
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/updateprofile.txt
new file mode 100644
index 000000000..5565e528f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/updateprofile.txt
@@ -0,0 +1,5 @@
+====== Oppdater din brukerprofil ======
+
+Du behøver bare fylle ut de felter du ønsker å endre. Du kan ikke endre ditt brukernavn.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/uploadmail.txt
new file mode 100644
index 000000000..b01905009
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/uploadmail.txt
@@ -0,0 +1,14 @@
+En fil ble lastet opp på din DokuWiki. Her er detaljene:
+
+Fil : @MEDIA@
+Dato : @DATE@
+Nettleser : @BROWSER@
+IP-adresse : @IPADDRESS@
+Vertnavn : @HOSTNAME@
+Størrelse : @SIZE@
+MIME-type : @MIME@
+Bruker : @USER@
+
+--
+Denne e-posten ble generert av DokuWiki på
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/wordblock.txt
new file mode 100644
index 000000000..30c4c31ce
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/wordblock.txt
@@ -0,0 +1,4 @@
+====== Ordsperre ======
+
+Dine endringer har **ikke** blitt lagret på grunn av at de inneholder ett eller flere ord som er sperret. Hvis du har forsøkt å lagre søppel, eller såkalt ''spam'' -- Fy deg! Hvis du anser denne beskjeden som feilaktig kan du kontakte administratoren til denne wikien.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/admin.txt
new file mode 100644
index 000000000..cea45f9d0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/admin.txt
@@ -0,0 +1,4 @@
+====== Administracja ======
+
+Czynności administracyjne DokuWiki.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/adminplugins.txt
new file mode 100644
index 000000000..0fb03993e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/adminplugins.txt
@@ -0,0 +1 @@
+===== Dodatkowe Wtyczki ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/backlinks.txt
new file mode 100644
index 000000000..4edccb09b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/backlinks.txt
@@ -0,0 +1,4 @@
+====== Odnośnik z innych stron ======
+
+Strony zawierające odnośniki do aktualnej strony.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/conflict.txt
new file mode 100644
index 000000000..da6f95260
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/conflict.txt
@@ -0,0 +1,6 @@
+====== Istnieje nowsza wersja strony ======
+
+Istnieje nowsza wersja edytowanej strony. Prawdopodobnie ktoś zmienił tę stronę w trakcie Twojej pracy.
+
+Przeglądnij dokładnie poniższe różnice i zdecyduj, którą wersję zatrzymać. Jeśli naciśniesz ''zapisz'' to Twoja wersja zostanie zapisana. Jeśli naciśniesz ''anuluj'' to zostanie wybrana aktualna wersja strony.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/denied.txt
new file mode 100644
index 000000000..d402463ef
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/denied.txt
@@ -0,0 +1,4 @@
+====== Brak dostępu ======
+
+Nie masz wystarczających uprawnień. Zaloguj się!
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/diff.txt
new file mode 100644
index 000000000..2c896ddb3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/diff.txt
@@ -0,0 +1,4 @@
+====== Różnice ======
+
+Różnice między wybraną wersją a wersją aktualną.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/draft.txt
new file mode 100644
index 000000000..4036c3079
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/draft.txt
@@ -0,0 +1,6 @@
+====== Znaleziono szkic strony ======
+
+Twoja ostatnia sesja edycji nie została poprawnie zakończona. DokuWiki automatycznie zachowało szkic strony podczas Twojej pracy abyś mógł (mogła) ją dokończyć. Poniżej możesz zobaczyć co zostało zapisane w czasie ostatnie sesji.
+
+Zdecyduj czy chcesz //przywrócić// ostatnią sesję, //usunąć// ją lub //anulować//.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/edit.txt
new file mode 100644
index 000000000..abb20ae1c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/edit.txt
@@ -0,0 +1,4 @@
+Zredaguj tę stronę i naciśnij ''zapisz''.
+
+Na stronie ze [[wiki:syntax|składnią]] znajdziesz opis znaczników wiki. Jeśli chcesz poćwiczyć zajrzyj do [[playground:playground|piaskownicy]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/editrev.txt
new file mode 100644
index 000000000..1528cac7e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/editrev.txt
@@ -0,0 +1,2 @@
+**Edytujesz nieaktualną wersję strony!** Jeśli ją zapiszesz to stanie się ona wersją aktualną.
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/index.txt
new file mode 100644
index 000000000..1d3fd27f6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/index.txt
@@ -0,0 +1,4 @@
+====== Indeks ======
+
+Indeks wszystkich dostępnych stron pogrupowany według [[doku>namespaces|katalogów]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/install.html
new file mode 100644
index 000000000..f1d48c1ad
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/install.html
@@ -0,0 +1,23 @@
+<p>Ta strona ma na celu pomóc Ci w instalacji i konfiguracji
+<a href="http://dokuwiki.org">Dokuwiki</a>.
+Więcej informacji o instalatorze znajdziesz w
+<a href="http://dokuwiki.org/installer">dokumentacji instalatora</a>.</p>
+
+<p>DokuWiki używa zwykłych plików do przechowywania zawartości stron oraz wszelkich
+innych informacji takich jak obrazki, poprzednie wersje strony, itp.
+Żeby DokuWiki mogło poprawnie działać <strong>musisz</strong>
+nadać prawo zapisu do katalogu zawierającego te pliki. Instalator nie może wykonać
+tych czynności. Musisz zrobić to za pomocą polecenia powłoki, klienta FTP
+lub panelu kontrolnego Twojego dostawcy usług serwerowych.</p>
+
+<p>Instalator pomoże Ci w konfiguracji uprawnień
+<acronym title="access control list">ACL</acronym>,
+które z kolei umożliwią Ci założenie konta administratora oraz umożliwią dostęp
+do czynności administracyjnych takich jak instalowanie wtyczek, zarządzanie kontami,
+zarządzania uprawnieniami do stron oraz konfiguracji wiki. Użycie tego instalatora
+nie jest konieczne, jego celem jest tylko ułatwienie administracji DokuWiki.</p>
+
+<p>Zaawansowani użytkownicy lub użytkownicy mający specjalne wymagania powinni
+zapoznać się z
+<a href="http://dokuwiki.org/install">instrukcjÄ… instalacji</a>
+oraz <a href="http://dokuwiki.org/config">instrukcjÄ… konfiguracji</a>.</p>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/lang.php
new file mode 100644
index 000000000..882806577
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/lang.php
@@ -0,0 +1,248 @@
+<?php
+/**
+ * polish language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Grzegorz Żur <grzegorz.zur@gmail.com>
+ * @author Mariusz Kujawski <marinespl@gmail.com>
+ * @author Maciej Kurczewski <pipijajko@gmail.com>
+ * @author SÅ‚awomir Boczek <slawkens@gmail.com>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '„';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '‚';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = '\'';
+$lang['btn_edit'] = 'Edytuj stronÄ™';
+$lang['btn_source'] = 'Pokaż źródło strony';
+$lang['btn_show'] = 'Pokaż stronę';
+$lang['btn_create'] = 'Utwórz stronę';
+$lang['btn_search'] = 'Szukaj';
+$lang['btn_save'] = 'Zapisz';
+$lang['btn_preview'] = 'PodglÄ…d';
+$lang['btn_top'] = 'Do góry';
+$lang['btn_newer'] = '<< nowsze';
+$lang['btn_older'] = 'starsze >>';
+$lang['btn_revs'] = 'Poprzednie wersje';
+$lang['btn_recent'] = 'Ostatnie zmiany';
+$lang['btn_upload'] = 'Wyślij';
+$lang['btn_cancel'] = 'Anuluj';
+$lang['btn_index'] = 'Indeks';
+$lang['btn_secedit'] = 'Edytuj';
+$lang['btn_login'] = 'Zaloguj';
+$lang['btn_logout'] = 'Wyloguj';
+$lang['btn_admin'] = 'Administracja';
+$lang['btn_update'] = 'Aktualizuj';
+$lang['btn_delete'] = 'Usuń';
+$lang['btn_back'] = 'Wstecz';
+$lang['btn_backlink'] = 'Odnośniki';
+$lang['btn_backtomedia'] = 'Powrót do wyboru pliku';
+$lang['btn_subscribe'] = 'Subskrybuj zmiany';
+$lang['btn_unsubscribe'] = 'Zaprzestań subskrypcji zmian';
+$lang['btn_subscribens'] = 'Subskrybuj zmiany w katalogu';
+$lang['btn_unsubscribens'] = 'Zaprzestań subskrypcji zmian w katalogu';
+$lang['btn_profile'] = 'Aktualizuj profil';
+$lang['btn_reset'] = 'Resetuj';
+$lang['btn_resendpwd'] = 'Prześlij nowe hasło';
+$lang['btn_draft'] = 'Edytuj szkic';
+$lang['btn_recover'] = 'Przywróć szkic';
+$lang['btn_draftdel'] = 'Usuń szkic';
+$lang['btn_revert'] = 'Przywróć';
+$lang['loggedinas'] = 'Zalogowany jako';
+$lang['user'] = 'Użytkownik';
+$lang['pass'] = 'Hasło';
+$lang['newpass'] = 'Nowe hasło';
+$lang['oldpass'] = 'Potwierdź aktualne hasło';
+$lang['passchk'] = 'Powtórz hasło';
+$lang['remember'] = 'Zapamiętaj';
+$lang['fullname'] = 'ImiÄ™ i nazwisko';
+$lang['email'] = 'E-mail';
+$lang['register'] = 'Zarejestruj siÄ™!';
+$lang['profile'] = 'Profil użytkownika';
+$lang['badlogin'] = 'Nazwa użytkownika lub hasło są nieprawidłowe.';
+$lang['minoredit'] = 'Mniejsze zmiany';
+$lang['draftdate'] = 'Czas zachowania szkicu';
+$lang['nosecedit'] = 'Strona została zmodyfikowana, sekcje zostały zmienione. Załadowano całą stronę.';
+$lang['regmissing'] = 'Wypełnij wszystkie pola.';
+$lang['reguexists'] = 'Użytkownik o tej nazwie już istnieje.';
+$lang['regsuccess'] = 'Utworzono użytkownika. Hasło zostało przesłane pocztą.';
+$lang['regsuccess2'] = 'Utworzono użytkownika.';
+$lang['regmailfail'] = 'Wystąpił błąd przy wysyłaniu hasła pocztą!';
+$lang['regbadmail'] = 'Adres e-mail jest nieprawidłowy!';
+$lang['regbadpass'] = 'Hasła nie są identyczne, spróbuj ponownie.';
+$lang['regpwmail'] = 'Twoje hasło do DokuWiki';
+$lang['reghere'] = 'Nie masz jeszcze konta? Zdobądź je';
+$lang['profna'] = 'To wiki nie pozwala na zmianÄ™ profilu.';
+$lang['profnochange'] = 'Żadnych zmian, nic do zrobienia.';
+$lang['profnoempty'] = 'Pusta nazwa lub adres e-mail nie dozwolone.';
+$lang['profchanged'] = 'Zaktualizowano profil użytkownika.';
+$lang['pwdforget'] = 'Nie pamiętasz hasła? Zdobądź nowe!';
+$lang['resendna'] = 'To wiki nie pozwala na powtórne przesyłanie hasła.';
+$lang['resendpwd'] = 'Prześlij nowe hasło dla';
+$lang['resendpwdmissing'] = 'Wypełnij wszystkie pola.';
+$lang['resendpwdnouser'] = 'Nie można znaleźć tego użytkownika w bazie danych.';
+$lang['resendpwdbadauth'] = 'Błędny kod autoryzacji! Upewnij się, że użyłeś(aś) właściwego odnośnika.';
+$lang['resendpwdconfirm'] = 'Prośba o potwierdzenie została przesłana pocztą.';
+$lang['resendpwdsuccess'] = 'Nowe hasło zostało wysłane pocztą.';
+$lang['license'] = 'Wszystkie treści w tym wiki, którym nie przyporządkowano licencji, podlegają licencji:';
+$lang['licenseok'] = 'Uwaga: edytując tę stronę zgadzasz się na publikowanie jej treści pod licencją:';
+$lang['searchmedia'] = 'Szukaj pliku o nazwie:';
+$lang['searchmedia_in'] = 'Szukaj w %s';
+$lang['txt_upload'] = 'Wybierz plik do wysłania';
+$lang['txt_filename'] = 'Nazwa pliku (opcjonalnie)';
+$lang['txt_overwrt'] = 'Nadpisać istniejący plik?';
+$lang['lockedby'] = 'Aktualnie zablokowane przez';
+$lang['lockexpire'] = 'Blokada wygasa';
+$lang['willexpire'] = 'Za minutę Twoja blokada tej strony wygaśnie.\nW celu uniknięcia konfliktów wyświetl podgląd aby odnowić blokadę.';
+$lang['notsavedyet'] = 'Nie zapisane zmiany zostaną utracone.\nCzy na pewno kontynuować?';
+$lang['rssfailed'] = 'Wystąpił błąd przy pobieraniu tych danych: ';
+$lang['nothingfound'] = 'Nic nie znaleziono.';
+$lang['mediaselect'] = 'Wysyłanie pliku';
+$lang['fileupload'] = 'Wysyłanie pliku';
+$lang['uploadsucc'] = 'Wysyłanie powiodło się!';
+$lang['uploadfail'] = 'Błąd wysyłania pliku. Czy prawa do katalogów są poprawne?';
+$lang['uploadwrong'] = 'Wysyłanie zabronione. Nie można wysłać plików z takim rozszerzeniem';
+$lang['uploadexist'] = 'Plik już istnieje, nie wykonano operacji.';
+$lang['uploadbadcontent'] = 'Typ pliku "%s" nie odpowiadał jego rozszerzeniu.';
+$lang['uploadspam'] = 'Plik zablokowany przez filtr antyspamowy.';
+$lang['uploadxss'] = 'Plik zablokowany ze względu na podejrzaną zawartość.';
+$lang['uploadsize'] = 'Plik jest za duży (maksymalny rozmiar %s)';
+$lang['deletesucc'] = 'Plik "%s" został usunięty.';
+$lang['deletefail'] = 'Plik "%s" nie został usunięty, sprawdź uprawnienia.';
+$lang['mediainuse'] = 'Plik "%s" nie został usunięty, ponieważ jest używany.';
+$lang['namespaces'] = 'Katalogi';
+$lang['mediafiles'] = 'Dostępne pliki';
+$lang['js']['searchmedia'] = 'Szukaj plików';
+$lang['js']['keepopen'] = 'Nie zamykaj okna po wyborze';
+$lang['js']['hidedetails'] = 'Ukryj szczegóły';
+$lang['js']['nosmblinks'] = 'Odnośniki do zasobów sieci Windows działają tylko w przeglądarce Internet Explorer.
+Możesz skopiować odnośnik.';
+$lang['js']['linkwiz'] = 'Tworzenie odnośników';
+$lang['js']['linkto'] = 'Link do';
+$lang['js']['del_confirm'] = 'Czy na pewno usunąć?';
+$lang['js']['mu_btn'] = 'Wyślij wiele plików na raz';
+$lang['mediausage'] = 'Użyj następującej składni w odnośniku do tego pliku:';
+$lang['mediaview'] = 'Pokaż oryginalny plik';
+$lang['mediaroot'] = 'główny';
+$lang['mediaupload'] = 'Umieść plik w aktualnym katalogu. Aby utworzyć podkatalogi, poprzedź nazwę pliku nazwami katalogów oddzielonymi dwukropkami.';
+$lang['mediaextchange'] = 'Rozszerzenie pliku zmieniono z .%s na .%s!';
+$lang['reference'] = 'Odnośniki do';
+$lang['ref_inuse'] = 'Ten plik nie może być usunięty, ponieważ jest używany na następujących stronach:';
+$lang['ref_hidden'] = 'Odnośniki mogą znajdować się na stronach, do których nie masz uprawnień.';
+$lang['hits'] = 'trafień';
+$lang['quickhits'] = 'Pasujące hasła';
+$lang['toc'] = 'Spis treści';
+$lang['current'] = 'aktualna';
+$lang['yours'] = 'Twoja wersja';
+$lang['diff'] = 'Pokaż różnice między wersjami';
+$lang['diff2'] = 'Pokaż różnice między zaznaczonymi wersjami';
+$lang['line'] = 'Linia';
+$lang['breadcrumb'] = 'Åšlad';
+$lang['youarehere'] = 'JesteÅ› tutaj';
+$lang['lastmod'] = 'ostatnio zmienione';
+$lang['by'] = 'przez';
+$lang['deleted'] = 'usunięto';
+$lang['created'] = 'utworzono';
+$lang['restored'] = 'przywrócono poprzednią wersję';
+$lang['external_edit'] = 'edycja zewnętrzna';
+$lang['summary'] = 'Opis zmian';
+$lang['noflash'] = 'Plugin <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> jest niezbędny do obejrzenia tej zawartości.';
+$lang['download'] = 'Pobierz zrzut';
+$lang['mail_newpage'] = 'Strona dodana:';
+$lang['mail_changed'] = 'Strona zmieniona:';
+$lang['mail_new_user'] = 'Nowy użytkownik:';
+$lang['mail_upload'] = 'Umieszczono plik:';
+$lang['qb_bold'] = 'Pogrubienie';
+$lang['qb_italic'] = 'Pochylenie';
+$lang['qb_underl'] = 'Podkreślenie';
+$lang['qb_code'] = 'Kod źródłowy';
+$lang['qb_strike'] = 'Przekreślenie';
+$lang['qb_h1'] = 'Nagłówek 1 stopnia';
+$lang['qb_h2'] = 'Nagłówek 2 stopnia';
+$lang['qb_h3'] = 'Nagłówek 3 stopnia';
+$lang['qb_h4'] = 'Nagłówek 4 stopnia';
+$lang['qb_h5'] = 'Nagłówek 5 stopnia';
+$lang['qb_h'] = 'Nagłówek';
+$lang['qb_hs'] = 'Wybierz nagłówek';
+$lang['qb_hplus'] = 'Nagłówek wyższego stopnia';
+$lang['qb_hminus'] = 'Nagłówek niższego stopnia';
+$lang['qb_hequal'] = 'Nagłówek tego samego stopnia';
+$lang['qb_link'] = 'Odnośnik wewnętrzny';
+$lang['qb_extlink'] = 'Odnośnik zewnętrzny';
+$lang['qb_hr'] = 'Linia pozioma';
+$lang['qb_ol'] = 'Numeracja';
+$lang['qb_ul'] = 'Wypunktowanie';
+$lang['qb_media'] = 'Dodaj obrazek lub inny plik';
+$lang['qb_sig'] = 'Wstaw podpis';
+$lang['qb_smileys'] = 'Emotikony';
+$lang['qb_chars'] = 'Znaki specjalne';
+$lang['upperns'] = 'Skok piętro wyżej';
+$lang['admin_register'] = 'Dodawanie użytkownika';
+$lang['metaedit'] = 'Edytuj metadane';
+$lang['metasaveerr'] = 'Zapis metadanych nie powiódł się';
+$lang['metasaveok'] = 'Metadane zapisano';
+$lang['img_backto'] = 'Wróć do';
+$lang['img_title'] = 'Tytuł';
+$lang['img_caption'] = 'Nagłówek';
+$lang['img_date'] = 'Data';
+$lang['img_fname'] = 'Nazwa pliku';
+$lang['img_fsize'] = 'Rozmiar';
+$lang['img_artist'] = 'Fotograf';
+$lang['img_copyr'] = 'Prawa autorskie';
+$lang['img_format'] = 'Format';
+$lang['img_camera'] = 'Aparat';
+$lang['img_keywords'] = 'SÅ‚owa kluczowe';
+$lang['subscribe_success'] = 'Dodano %s do listy subskrypcji strony %s';
+$lang['subscribe_error'] = 'BÅ‚Ä…d przy dodawaniu %s do listy subskrypcji strony %s';
+$lang['subscribe_noaddress'] = 'Nie podałeś adresu e-mail przy rejestracji, nie możesz zostać dodany do listy subskrypcji.';
+$lang['unsubscribe_success'] = 'Usunięto %s z listy subskrypcji strony %s';
+$lang['unsubscribe_error'] = 'BÅ‚Ä…d przy usuwaniu %s z listy subskrypcji strony %s';
+$lang['authmodfailed'] = 'BÅ‚Ä…d uwierzytelnienia. Powiadom administratora tego wiki.';
+$lang['authtempfail'] = 'Uwierzytelnienie użytkownika jest w tej chwili niemożliwe. Jeśli ta sytuacja się powtórzy, powiadom administratora tego wiki.';
+$lang['i_chooselang'] = 'Wybierz język';
+$lang['i_installer'] = 'Instalator DokuWiki';
+$lang['i_wikiname'] = 'Nazwa Wiki';
+$lang['i_enableacl'] = 'Włącz mechanizm uprawnień ACL (zalecane)';
+$lang['i_superuser'] = 'Administrator';
+$lang['i_problems'] = 'Instalator napotkał poniższe problemy. Nie można kontynuować póki nie zostaną usunięte.';
+$lang['i_modified'] = 'Ze względów bezpieczeństwa, ten skrypt działa tylko z nową i niezmodyfikowaną instalacją DokuWiki.
+Aby uruchomić instalator ponownie, rozpakuj archiwum DokuWiki lub zapoznaj się z <a href="http://dokuwiki.org/install">instrukcją instalacji Dokuwiki</a>';
+$lang['i_funcna'] = 'Funkcja PHP <code>%s</code> jest niedostępna.';
+$lang['i_phpver'] = 'Wersja PHP <code>%s</code> jest niższa od wymaganej <code>%s</code>. Zaktualizuj instalację PHP.';
+$lang['i_permfail'] = 'DokuWiki nie ma prawa zapisu w katalogu <code>%s</code>. Zmień uprawnienia zapisu dla tego katalogu!';
+$lang['i_confexists'] = '<code>%s</code> już istnieje';
+$lang['i_writeerr'] = 'Nie można utworzyć <code>%s</code>. Sprawdź uprawnienia do katalogu lub pliku i stwórz plik ręcznie.';
+$lang['i_badhash'] = 'nierozpoznany lub zmodyfikowany plik dokuwiki.php (skrót=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - nieprawidłowa wartość lub jej brak';
+$lang['i_success'] = 'Konfiguracja pomyślnie zakończona. Możesz teraz usunąć plik install.php. Przejdź do <a href="doku.php">Twojego nowego DokuWiki</a>.';
+$lang['i_failure'] = 'Podczas zapisu plików konfiguracyjnych wystąpiły błędy. Musisz usunąć wszystkie problemy, zanim zaczniesz korzystać z <a href="doku.php">Twojego nowego DokuWiki</a>.';
+$lang['i_policy'] = 'Wstępna polityka uprawnień ACL';
+$lang['i_pol0'] = 'Otwarte Wiki (odczyt, zapis i dodawanie plików dla wszystkich)';
+$lang['i_pol1'] = 'Publiczne Wiki (odczyt dla wszystkich, zapis i dodawanie plików tylko dla zarejestrowanych użytkowników)';
+$lang['i_pol2'] = 'Zamknięte Wiki (odczyt, zapis i dodawanie plików tylko dla zarejestrowanych użytkowników)';
+$lang['i_retry'] = 'Spróbuj ponownie';
+$lang['mu_intro'] = 'Możesz tutaj wysłać wiele plików na raz. Kliknij przycisk "Przeglądaj" aby dodać je do kolejki. Kliknij "Wyślij" gdy skończysz.';
+$lang['mu_gridname'] = 'Nazwa pliku';
+$lang['mu_gridsize'] = 'Rozmiar';
+$lang['mu_gridstat'] = 'Stan';
+$lang['mu_namespace'] = 'Katalog';
+$lang['mu_browse'] = 'PrzeglÄ…daj';
+$lang['mu_toobig'] = 'za duży';
+$lang['mu_ready'] = 'gotowy do wysłania';
+$lang['mu_done'] = 'zakończono';
+$lang['mu_fail'] = 'nie powiodło się';
+$lang['mu_authfail'] = 'sesja wygasła';
+$lang['mu_progress'] = '@PCT@% wysłano';
+$lang['mu_filetypes'] = 'Dozwolone typy plików';
+$lang['mu_info'] = 'wysłanych plików.';
+$lang['mu_lasterr'] = 'Ostatni błąd:';
+$lang['recent_global'] = 'W tej chwili przeglądasz zmiany w katalogu <b>%s</b>. Możesz przejrzeć także <a href="%s">zmiany w całym wiki</a>.';
+$lang['years'] = '%d lat temu';
+$lang['months'] = '%d miesięcy temu';
+$lang['weeks'] = '%d tygodni temu';
+$lang['days'] = '%d dni temu';
+$lang['hours'] = '%d godzin temu';
+$lang['minutes'] = '%d minut temu';
+$lang['seconds'] = '%d sekund temu';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/locked.txt
new file mode 100644
index 000000000..e3e05fefc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/locked.txt
@@ -0,0 +1,3 @@
+====== Strona zablokowana ======
+
+Ta strona jest zablokowana do edycji przez innego użytkownika. Musisz zaczekać aż użytkownik zakończy redagowanie lub jego blokada wygaśnie.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/login.txt
new file mode 100644
index 000000000..b60427f4f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/login.txt
@@ -0,0 +1,4 @@
+====== Logowanie ======
+
+Wprowadź nazwę użytkownika i hasło aby się zalogować. Twoja przeglądarka musi mieć włączoną obsługę ciasteczek (cookies).
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/mailtext.txt
new file mode 100644
index 000000000..1180966bc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/mailtext.txt
@@ -0,0 +1,18 @@
+Strona w Twoim DokuWiki została dodana lub zmieniona.
+Szczegółowe informacje:
+
+Data : @DATE@
+PrzeglÄ…darka : @BROWSER@
+Adres IP : @IPADDRESS@
+Nazwa DNS : @HOSTNAME@
+Stara wersja : @OLDPAGE@
+Nowa wersja : @NEWPAGE@
+Opis zmian : @SUMMARY@
+Użytkownik : @USER@
+
+@DIFF@
+
+
+--
+List został wygenerowany przez DokuWiki pod adresem
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/newpage.txt
new file mode 100644
index 000000000..532d3f4ab
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/newpage.txt
@@ -0,0 +1,4 @@
+====== Ta strona jeszcze nie istnieje ======
+
+Jesteś na stronie, która jeszcze nie istnieje. Jeśli masz wystarczające uprawnienia, możesz utworzyć tę stronę klikając ''utwórz stronę''.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/norev.txt
new file mode 100644
index 000000000..858e4a881
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/norev.txt
@@ -0,0 +1,4 @@
+====== Nie ma takiej wersji ======
+
+Nie ma takiej wersji. Kliknij przycisk ''poprzednie wersje'', aby wyświetlić listę wszystkich wersji tej strony.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/preview.txt
new file mode 100644
index 000000000..41a123cf3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/preview.txt
@@ -0,0 +1,4 @@
+====== PodglÄ…d ======
+
+To jest podgląd edytowanej strony. Pamiętaj, że ta strona **nie** jest jeszcze zapisana!
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/pwconfirm.txt
new file mode 100644
index 000000000..f6ccca47e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/pwconfirm.txt
@@ -0,0 +1,13 @@
+Witaj @FULLNAME@!
+
+Potwierdzenie prośby o nowe hasło dla konta @TITLE@ w wiki @DOKUWIKIURL@
+
+Jeśli to nie Ty prosiłeś(aś) o nowe hasło, zignoruj ten list.
+
+Aby potwierdzić prośbę o hasło, przejdź na następującą stronę.
+
+@CONFIRM@
+
+--
+List został wygenerowany przez DokuWiki pod adresem
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/read.txt
new file mode 100644
index 000000000..5f89fd93d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/read.txt
@@ -0,0 +1,2 @@
+Ta strona jest tylko do odczytu. Możesz wyświetlić źródła tej strony ale nie możesz ich zmienić.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/recent.txt
new file mode 100644
index 000000000..65a776c0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/recent.txt
@@ -0,0 +1,5 @@
+====== Ostatnie zmiany ======
+
+Ostatnio zmienione strony.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/register.txt
new file mode 100644
index 000000000..91b761d15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/register.txt
@@ -0,0 +1,4 @@
+====== Rejestracja nowego użytkownika ======
+
+Wypełnij wszystkie pola formularza aby utworzyć nowe konto w tym wiki. Pamiętaj, żeby podać **poprawny adres e-mail**, ponieważ nowe hasło może zostać do Ciebie przesłane pocztą. Nazwa użytkownika powinna być zgodna z formatem [[doku>pagename|nazw stron]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/registermail.txt
new file mode 100644
index 000000000..18437fa0a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/registermail.txt
@@ -0,0 +1,15 @@
+Zarejestrował się nowy użytkownik.
+Szczegółowe informacje:
+
+Użytkownik : @NEWUSER@
+ImiÄ™ i nazwisko : @NEWNAME@
+E-mail : @NEWEMAIL@
+
+Data : @DATE@
+PrzeglÄ…darka : @BROWSER@
+Adres IP : @IPADDRESS@
+Nazwa DNS : @HOSTNAME@
+
+--
+List został wygenerowany przez DokuWiki pod adresem
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/resendpwd.txt
new file mode 100644
index 000000000..a7cac7442
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/resendpwd.txt
@@ -0,0 +1,4 @@
+====== Przesyłanie nowego hasła ======
+
+Aby otrzymać nowe hasło, podaj nazwę Twojego konta w tym wiki. Prośba o potwierdzenie w postaci odnośnika zostanie Ci przesłana pocztą elektroniczną.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/revisions.txt
new file mode 100644
index 000000000..afe2b6478
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/revisions.txt
@@ -0,0 +1,4 @@
+====== Poprzednie wersje ======
+
+Poprzednie wersje tej strony. Aby przywrócić poprzednią wersję wybierz ją, rozpocznij edycję a potem zapisz.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/searchpage.txt
new file mode 100644
index 000000000..61b9ffbf9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/searchpage.txt
@@ -0,0 +1,5 @@
+====== Wyszukiwanie ======
+
+Wyniki wyszukiwania. Jeśli nie znaleziono szukanego hasła, możesz utworzyć nową stronę, której tytułem będzie poszukiwane hasło.
+
+===== Wyniki =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/showrev.txt
new file mode 100644
index 000000000..43e826ed5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/showrev.txt
@@ -0,0 +1,2 @@
+**To jest stara wersja strony!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/stopwords.txt
new file mode 100644
index 000000000..f1d244a26
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/stopwords.txt
@@ -0,0 +1,89 @@
+# Lista słów ignorowanych przy indeksowaniu treści.
+# W jednej linii powinno znajdować się tylko jedno słowo.
+# Przy edycji tego pliku pamiętaj o używaniu uniksowego końca linii (LF).
+# Nie ma potrzeby wpisywania słów krótszych niż 3 znaki, ponieważ one są zawsze ignorowane.
+# Lista oparta na danych ze strony http://www.ranks.nl/stopwords/
+aby
+ale
+bardziej
+bardzo
+bez
+bowiem
+był
+była
+było
+były
+będzie
+czy
+czyli
+dla
+dlatego
+gdy
+gdzie
+ich
+innych
+jak
+jako
+jednak
+jego
+jej
+jest
+jeszcze
+jeśli
+już
+kiedy
+kilka
+która
+które
+którego
+której
+który
+których
+którym
+którzy
+lub
+między
+mnie
+mogÄ…
+może
+można
+nad
+nam
+nas
+naszego
+naszych
+nawet
+nich
+nie
+nim
+niż
+oraz
+pod
+poza
+przed
+przede
+przez
+przy
+również
+siÄ™
+sobie
+swoje
+tak
+takie
+także
+tam
+tego
+tej
+ten
+też
+tych
+tylko
+tym
+wiele
+wielu
+więc
+wszystkich
+wszystkim
+wszystko
+właśnie
+zawsze
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/subscribermail.txt
new file mode 100644
index 000000000..76300177e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/subscribermail.txt
@@ -0,0 +1,17 @@
+Witaj!
+
+Strona @PAGE@ w wiki @TITLE@ została zmieniona.
+Szczegóły:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Aby zaprzestać subskrypcji zmian tej strony zaloguj się na
+@DOKUWIKIURL@ a następnie przejdź do strony
+@NEWPAGE@
+i wybierz 'zaprzestań subskrypcji zmian'.
+
+--
+List został wygenerowany przez DokuWiki pod adresem
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/updateprofile.txt
new file mode 100644
index 000000000..aa80f4cdf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/updateprofile.txt
@@ -0,0 +1,5 @@
+====== Aktualizacja profilu użytkownika ======
+
+Wystarczy, że wypełnisz tylko te pola, które chcesz zmienić. Nie możesz zmienić nazwy użytkownika.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/uploadmail.txt
new file mode 100644
index 000000000..e76ec80e6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/uploadmail.txt
@@ -0,0 +1,16 @@
+Umieszczono nowy plik.
+
+Szczegóły:
+
+Plik : @MEDIA@
+Data : @DATE@
+PrzeglÄ…darka : @BROWSER@
+Adres IP : @IPADDRESS@
+Nazwa DNS : @HOSTNAME@
+Rozmiar : @SIZE@
+Typ MIME : @MIME@
+Użytkownik : @USER@
+
+--
+List został wygenerowany przez DokuWiki pod adresem
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/wordblock.txt
new file mode 100644
index 000000000..09edb25dd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/wordblock.txt
@@ -0,0 +1,4 @@
+====== Blokowanie niedozwolonych treści i spamu ======
+
+Twoje zmiany **nie** zostały zapisane, ponieważ zawierają niedozwolone słowa. Jeśli próbowałeś(aś) umieścić niedozwolone treści to wstydź się!
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/admin.txt
new file mode 100644
index 000000000..f8be56e60
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/admin.txt
@@ -0,0 +1,4 @@
+====== Administração ======
+
+Abaixo você encontra uma lista das tarefas administrativas disponíveis no DokuWiki.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/adminplugins.txt
new file mode 100644
index 000000000..3eac7af53
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/adminplugins.txt
@@ -0,0 +1 @@
+===== Plugins Adicionais ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/backlinks.txt
new file mode 100644
index 000000000..fce9dba54
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/backlinks.txt
@@ -0,0 +1,4 @@
+====== Links reversos ======
+
+Esta é uma lista de todas as páginas que apresentam links para a página atual.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/conflict.txt
new file mode 100644
index 000000000..53d9afac7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/conflict.txt
@@ -0,0 +1,5 @@
+====== Existe uma nova versão ======
+
+Existe uma versão mais nova do documento que você editou. Isso acontece quando outro usuário modifica o documento enquanto você o está editando.
+
+Examine as diferenças mostradas abaixo atentamente e então decida qual versão deve permanecer. Se você selecionar ''Salvar'', sua versão será salva. Pressione ''Cancelar'' para manter a versão atual.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/denied.txt
new file mode 100644
index 000000000..d7e423f42
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/denied.txt
@@ -0,0 +1,3 @@
+====== Permissão Negada ======
+
+Desculpe, você não tem permissões suficientes para continuar. Por acaso esqueceu de autenticar-se?
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/diff.txt
new file mode 100644
index 000000000..517d9f275
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/diff.txt
@@ -0,0 +1,3 @@
+====== Diferenças ======
+
+Aqui você vê as diferenças entre duas revisões dessa página.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/draft.txt
new file mode 100644
index 000000000..b3d345cca
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/draft.txt
@@ -0,0 +1,5 @@
+====== Rascunho encontrado ======
+
+A sua última sessão de edição não foi concluída corretamente. O DokuWiki automaticamente salvou um rascunho durante o seu trabalho, que você pode usar agora para continuar a sua edição. Abaixo você pode ver os dados que foram salvos na sua última sessão.
+
+Por favor, escolha se você quer //recuperar// sua sessão de edição perdida, //excluir// o rascunho salvo automaticamente ou //cancelar// o processo de edição. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/edit.txt
new file mode 100644
index 000000000..113fb8ede
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/edit.txt
@@ -0,0 +1,2 @@
+Edite a página e clique em ''Salvar''. Veja [[wiki:syntax|aqui]] a sintaxe do Wiki. Por favor, edite a página apenas se você puder **aprimorá-la**. Se você deseja testar alguma coisa, faça-o no [[playground:playground|playground]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/editrev.txt
new file mode 100644
index 000000000..c7aa47878
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/editrev.txt
@@ -0,0 +1,4 @@
+**Você carregou uma revisão antiga desse documento!** Se você salvá-la, irá criar uma nova versão em esses dados.
+----
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/index.txt
new file mode 100644
index 000000000..a7d17a2bc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/index.txt
@@ -0,0 +1,3 @@
+====== Ãndice ======
+
+Esse é um índice de todas as páginas disponíveis, ordenadas por [[doku>namespaces|espaços de nomes]]. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/install.html
new file mode 100644
index 000000000..b915f0701
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/install.html
@@ -0,0 +1,7 @@
+<p>Essa página irá auxiliá-lo na instalação e configuração do <a href="http://dokuwiki.org">DokuWiki</a>. Você encontra mais informações sobre esse instalador na sua <a href="http://dokuwiki.org/installer">página de documentação</a>.</p>
+
+<p>O DokuWiki utiliza arquivos em texto simples para o armazenamento das páginas wiki e de outras informações associadas a essas páginas (ex.: imagens, índices de pesquisa, revisões antigas, etc.). Para que o DokuWiki funcione corretamente, ele <strong>precisa</strong> ter permissão de escrita aos diretórios onde esses arquivos ficarão armazenados. Esse instalador não tem capacidade de configurar as permissões de diretório. Isso normalmente é feito usando-se a linha de comando ou através do FTP ou do painel de controle da sua hospedagem (ex.: cPanel).</p>
+
+<p>O instalador irá definir as configurações da <acronym title="access control list (lista de controle de acessos)">ACL</acronym> do seu DokuWiki, o que permitirá a autenticação do administrador e o acesso ao menu de administração do sistema. Esse menu é utilizado para instalar plug-ins, alterar as configurações do ambiente e gerenciar usuários e acessos às páginas do wiki. Isso não é necessário para o funcionamento do DokuWiki, mas irá torna sua administração mais simples.</p>
+
+<p>Usuários experientes ou que necessitem efetuar configurações especiais devem utilizar os seguintes links, com instruções detalhadas da <a href="http://dokuwiki.org/install">instalação</a> e da <a href="http://dokuwiki.org/config">configuração</a>.</p> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/lang.php
new file mode 100644
index 000000000..ed7224c14
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/lang.php
@@ -0,0 +1,247 @@
+<?php
+/**
+ * Brazilian Portuguese language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Luis Fernando Enciso <lfenciso@certto.com.br>
+ * @author Alauton/Loug
+ * @author Frederico Gonçalves Guimarães <frederico@teia.bio.br>
+ * @author Felipe Castro <fefcas@gmail.com>
+ * @author Lucien Raven <lucienraven@yahoo.com.br>
+ * @author Enrico Nicoletto <liverig@gmail.com>
+ * @author Flávio Veras <flaviove@gmail.com>
+ * @author Jeferson Propheta <jeferson.propheta@gmail.com>
+ * @author jair.henrique@gmail.com
+ * @author Luis Dantas <luis@dantas.com>
+ * @author Frederico Guimarães <frederico@teia.bio.br>
+ * @author Jair Henrique <jair.henrique@gmail.com>
+ * @author Luis Dantas <luisdantas@gmail.com>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '“';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '‘';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = '’';
+$lang['btn_edit'] = 'Editar esta página';
+$lang['btn_source'] = 'Mostrar código fonte';
+$lang['btn_show'] = 'Mostrar página';
+$lang['btn_create'] = 'Criar esta página';
+$lang['btn_search'] = 'Pesquisar';
+$lang['btn_save'] = 'Salvar';
+$lang['btn_preview'] = 'Visualizar';
+$lang['btn_top'] = 'Voltar ao topo';
+$lang['btn_newer'] = '<< mais recente';
+$lang['btn_older'] = 'menos recente >>';
+$lang['btn_revs'] = 'Revisões anteriores';
+$lang['btn_recent'] = 'Alterações recentes';
+$lang['btn_upload'] = 'Enviar';
+$lang['btn_cancel'] = 'Cancelar';
+$lang['btn_index'] = 'Ãndice';
+$lang['btn_secedit'] = 'Editar';
+$lang['btn_login'] = 'Autenticar-se';
+$lang['btn_logout'] = 'Sair';
+$lang['btn_admin'] = 'Administrar';
+$lang['btn_update'] = 'Atualizar';
+$lang['btn_delete'] = 'Excluir';
+$lang['btn_back'] = 'Voltar';
+$lang['btn_backlink'] = 'Links reversos';
+$lang['btn_backtomedia'] = 'Voltar à seleção do arquivo de mídia';
+$lang['btn_subscribe'] = 'Monitorar alterações na página';
+$lang['btn_unsubscribe'] = 'Cancelar monitoramento da página';
+$lang['btn_subscribens'] = 'Monitorar alterações no espaço de nomes';
+$lang['btn_unsubscribens'] = 'Cancelar monitoramento do espaço de nomes';
+$lang['btn_profile'] = 'Atualizar o perfil';
+$lang['btn_reset'] = 'Limpar';
+$lang['btn_resendpwd'] = 'Enviar uma nova senha';
+$lang['btn_draft'] = 'Editar o rascunho';
+$lang['btn_recover'] = 'Recuperar o rascunho';
+$lang['btn_draftdel'] = 'Excluir o rascunho';
+$lang['btn_revert'] = 'Restaure';
+$lang['loggedinas'] = 'Autenticado(a) como';
+$lang['user'] = 'Nome de usuário';
+$lang['pass'] = 'Senha';
+$lang['newpass'] = 'Nova senha';
+$lang['oldpass'] = 'Confirme a senha atual';
+$lang['passchk'] = 'mais uma vez';
+$lang['remember'] = 'Lembre-se de mim';
+$lang['fullname'] = 'Nome completo';
+$lang['email'] = 'E-mail';
+$lang['register'] = 'Registrar';
+$lang['profile'] = 'Perfil do usuário';
+$lang['badlogin'] = 'Desculpe, mas o nome de usuário ou a senha estão incorretos.';
+$lang['minoredit'] = 'Alterações mínimas';
+$lang['draftdate'] = 'O rascunho foi salvo automaticamente em';
+$lang['nosecedit'] = 'A página foi modificada nesse intervalo de tempo. Como a informação da seção estava desatualizada, foi carregada a página inteira.';
+$lang['regmissing'] = 'Desculpe, mas você precisa preencher todos os campos.';
+$lang['reguexists'] = 'Desculpe, mas já existe um usuário com esse nome.';
+$lang['regsuccess'] = 'O usuário foi criado e a senha enviada para seu e-mail.';
+$lang['regsuccess2'] = 'O usuário foi criado.';
+$lang['regmailfail'] = 'Aparentemente ocorreu um erro no envio da senha. Por favor, entre em contato com o administrador!';
+$lang['regbadmail'] = 'O endereço de e-mail fornecido é, aparentemente, inválido - se você acha que isso é um erro, entre em contato com o administrador';
+$lang['regbadpass'] = 'As senhas digitadas não são idênticas. Por favor, tente novamente.';
+$lang['regpwmail'] = 'A sua senha do DokuWiki';
+$lang['reghere'] = 'Ainda não tem uma conta? Cadastre-se para obter uma.';
+$lang['profna'] = 'Esse wiki não suporta modificações do perfil.';
+$lang['profnochange'] = 'Sem alterações, nada para fazer.';
+$lang['profnoempty'] = 'Não são permitidos nomes ou endereços de e-mail em branco.';
+$lang['profchanged'] = 'O perfil do usuário foi atualizado com sucesso.';
+$lang['pwdforget'] = 'Esqueceu sua senha? Obtenha uma nova.';
+$lang['resendna'] = 'Esse wiki não tem suporte para o reenvio de senhas.';
+$lang['resendpwd'] = 'Enviar a nova senha para';
+$lang['resendpwdmissing'] = 'Desculpe, você deve preencher todos os campos.';
+$lang['resendpwdnouser'] = 'Desculpe, não foi possível encontrar esse usuário no nosso banco de dados.';
+$lang['resendpwdbadauth'] = 'Desculpe, esse código de autorização é inválido. Certifique-se de que você usou o link de confirmação inteiro.';
+$lang['resendpwdconfirm'] = 'Um link de confirmação foi enviado por e-mail.';
+$lang['resendpwdsuccess'] = 'Sua nova senha foi enviada por e-mail.';
+$lang['license'] = 'Exceto onde for informado ao contrário, o conteúdo neste wiki está sob a seguinte licença:';
+$lang['licenseok'] = 'Observe: editando esta página você aceita disponibilizar o seu conteúdo sob a seguinte licença:';
+$lang['txt_upload'] = 'Selecione o arquivo a ser enviado';
+$lang['txt_filename'] = 'Enviar como (opcional)';
+$lang['txt_overwrt'] = 'Substituir o arquivo existente';
+$lang['lockedby'] = 'Atualmente bloqueada por';
+$lang['lockexpire'] = 'O bloqueio expira em';
+$lang['willexpire'] = 'O seu bloqueio de edição deste página irá expirar em um minuto.\nPara evitar conflitos de edição, clique no botão de visualização para reiniciar o temporizador de bloqueio.';
+$lang['notsavedyet'] = 'As alterações não salvas serão perdidas.\nDeseja realmente continuar?';
+$lang['rssfailed'] = 'Ocorreu um erro durante a atualização dessa fonte: ';
+$lang['nothingfound'] = 'Não foi encontrado nada.';
+$lang['mediaselect'] = 'Arquivos de mídia';
+$lang['fileupload'] = 'Envio de arquivo de mídia';
+$lang['uploadsucc'] = 'O envio foi efetuado com sucesso';
+$lang['uploadfail'] = 'Não foi possível enviar o arquivo. Será algum problema com as permissões?';
+$lang['uploadwrong'] = 'O envio foi bloqueado. Essa extensão de arquivo é proibida!';
+$lang['uploadexist'] = 'O arquivo já existe. Não foi feito nada.';
+$lang['uploadbadcontent'] = 'O conteúdo enviado não corresponde à extensão do arquivo %s.';
+$lang['uploadspam'] = 'O envio foi bloqueado pela lista negra de spams.';
+$lang['uploadxss'] = 'O envio foi bloqueado devido à possibilidade do seu conteúdo ser malicioso.';
+$lang['uploadsize'] = 'O arquivo transmitido era grande demais. (max. %s)';
+$lang['deletesucc'] = 'O arquivo "%s" foi excluído.';
+$lang['deletefail'] = 'Não foi possível excluir "%s" - verifique as permissões.';
+$lang['mediainuse'] = 'O arquivo "%s" não foi excluído - ele ainda está em uso.';
+$lang['namespaces'] = 'Espaços de nome';
+$lang['mediafiles'] = 'Arquivos disponíveis em';
+$lang['js']['keepopen'] = 'Manter a janela aberta na seleção';
+$lang['js']['hidedetails'] = 'Esconder detalhes';
+$lang['js']['nosmblinks'] = 'Atalhos para pastas compartilhadas do Windows funcionam apenas no Microsoft Internet Explorer.
+Entretanto, você ainda pode copiar e colar o atalho.';
+$lang['js']['linkto'] = 'Link para:';
+$lang['js']['del_confirm'] = 'Deseja realmente excluir o(s) item(ns) selecionado(s)?';
+$lang['js']['mu_btn'] = 'Enviar vários arquivos de uma vez';
+$lang['mediausage'] = 'Use a seguinte sintaxe para referenciar esse arquivo:';
+$lang['mediaview'] = 'Ver o arquivo original';
+$lang['mediaroot'] = 'raiz';
+$lang['mediaupload'] = 'Envie um arquivo para o espaço de nomes atual aqui. Para criar subespaços de nomes, preponha-os ao nome do arquivo no parâmetro "Enviar como", separados por vírgulas.';
+$lang['mediaextchange'] = 'A extensão do arquivo mudou de .%s para .%s!';
+$lang['reference'] = 'Referências para';
+$lang['ref_inuse'] = 'O arquivo não pode ser excluído, porque ele ainda está sendo utilizado nas seguintes páginas:';
+$lang['ref_hidden'] = 'Algumas referências estão em páginas que você não tem permissão para ler';
+$lang['hits'] = 'Resultados';
+$lang['quickhits'] = 'Nomes de páginas coincidentes';
+$lang['toc'] = 'Tabela de conteúdos';
+$lang['current'] = 'atual';
+$lang['yours'] = 'Sua versão';
+$lang['diff'] = 'Mostrar diferenças com a revisão atual';
+$lang['diff2'] = 'Mostrar diferenças entre as revisões selecionadas';
+$lang['line'] = 'Linha';
+$lang['breadcrumb'] = 'Visitou';
+$lang['youarehere'] = 'Você está aqui';
+$lang['lastmod'] = 'Última modificação';
+$lang['by'] = 'por';
+$lang['deleted'] = 'removida';
+$lang['created'] = 'criada';
+$lang['restored'] = 'revisão anterior restaurada';
+$lang['external_edit'] = 'edição externa';
+$lang['summary'] = 'Resumo da edição';
+$lang['noflash'] = 'O <a href="http://www.adobe.com/products/flashplayer/">plug-in Adobe Flash</a> é necessário para exibir este conteúdo.';
+$lang['mail_newpage'] = 'página adicionada:';
+$lang['mail_changed'] = 'página modificada:';
+$lang['mail_new_user'] = 'novo usuário:';
+$lang['mail_upload'] = 'arquivo enviado:';
+$lang['qb_bold'] = 'Texto em negrito';
+$lang['qb_italic'] = 'Texto em itálico';
+$lang['qb_underl'] = 'Texto sublinhado';
+$lang['qb_code'] = 'Texto de código';
+$lang['qb_strike'] = 'Texto riscado';
+$lang['qb_h1'] = 'Cabeçalho de nível 1';
+$lang['qb_h2'] = 'Cabeçalho de nível 2';
+$lang['qb_h3'] = 'Cabeçalho de nível 3';
+$lang['qb_h4'] = 'Cabeçalho de nível 4';
+$lang['qb_h5'] = 'Cabeçalho de nível 5';
+$lang['qb_h'] = 'Cabeçalho';
+$lang['qb_link'] = 'Link interno';
+$lang['qb_extlink'] = 'Link externo';
+$lang['qb_hr'] = 'Linha horizontal';
+$lang['qb_ol'] = 'Item de lista ordenada';
+$lang['qb_ul'] = 'Item de lista não ordenada';
+$lang['qb_media'] = 'Adicionar imagens e/ou outros arquivos';
+$lang['qb_sig'] = 'Inserir assinatura';
+$lang['qb_smileys'] = 'Carinhas';
+$lang['qb_chars'] = 'Caracteres especiais';
+$lang['admin_register'] = 'Adicionar novo usuário';
+$lang['metaedit'] = 'Editar metadados';
+$lang['metasaveerr'] = 'Não foi possível escrever os metadados';
+$lang['metasaveok'] = 'Os metadados foram salvos';
+$lang['img_backto'] = 'Voltar para';
+$lang['img_title'] = 'Título';
+$lang['img_caption'] = 'Descrição';
+$lang['img_date'] = 'Data';
+$lang['img_fname'] = 'Nome do arquivo';
+$lang['img_fsize'] = 'Tamanho';
+$lang['img_artist'] = 'Fotógrafo';
+$lang['img_copyr'] = 'Direitos autorais';
+$lang['img_format'] = 'Formato';
+$lang['img_camera'] = 'Câmera';
+$lang['img_keywords'] = 'Palavras-chave';
+$lang['subscribe_success'] = '%s foi adicionado à lista de monitoramento de %s';
+$lang['subscribe_error'] = 'Ocorreu um erro ao tentar adicionar %s à lista de monitoramento de %s';
+$lang['subscribe_noaddress'] = 'Não existe nenhum endereço de e-mail associado ao seu usuário, você não pode ser adicionado à lista de monitoramento.';
+$lang['unsubscribe_success'] = '%s foi removido da lista de monitoramento de %s';
+$lang['unsubscribe_error'] = 'Ocorreu um erro ao tentar remover %s da lista de monitoramento de %s';
+$lang['authmodfailed'] = 'A configuração da autenticação de usuário está com problemas. Por favor, informe ao administrador do wiki.';
+$lang['authtempfail'] = 'A autenticação de usuários está temporariamente desabilitada. Se essa situação persistir, por favor, informe ao administrador do Wiki.';
+$lang['i_chooselang'] = 'Selecione o seu idioma';
+$lang['i_installer'] = 'Instalador do DokuWiki';
+$lang['i_wikiname'] = 'Nome do Wiki';
+$lang['i_enableacl'] = 'Habilitar Lista de Controle de Acessos (recomendado)';
+$lang['i_superuser'] = 'Superusuário';
+$lang['i_problems'] = 'O instalador encontrou alguns problemas, indicados abaixo. Você não pode continuar até corrigi-los.';
+$lang['i_modified'] = 'Por questões de segurança, esse script funcionará apenas em uma instalação nova e não modificada do DokuWiki.
+Você pode extrair novamente os arquivos do pacote original ou consultar as <a href="http://dokuwiki.org/install">instruções de instalação do DokuWiki</a>.';
+$lang['i_funcna'] = 'A função PHP <code>%s</code> não está disponível. O seu host a mantém desabilitada por algum motivo?';
+$lang['i_phpver'] = 'A sua versão do PHP (<code>%s</code>) é inferior à necessária (<code>%s</code>). Você precisa atualizar a sua instalação do PHP.';
+$lang['i_permfail'] = 'O DokuWiki não tem permissão de escrita em <code>%s</code>. Você precisa corrigir as configurações de permissão nesse diretório!';
+$lang['i_confexists'] = '<code>%s</code> já existe';
+$lang['i_writeerr'] = 'Não foi possível criar <code>%s</code>. É necessário checar as permissões de arquivos/diretórios e criar o arquivo manualmente.';
+$lang['i_badhash'] = 'dokuwiki.php não reconhecido ou modificado (hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - valor ilegal ou em branco';
+$lang['i_success'] = 'A configuração terminou com sucesso. Agora você deve excluir o arquivo install.php. Conheça o seu <a href="doku.php">novo DokuWiki</a>!';
+$lang['i_failure'] = 'Ocorreram alguns erros durante a escrita dos arquivos de configuração. É necessário corrigi-los manualmente antes de usar seu <a href="doku.php">novo DokuWiki</a>';
+$lang['i_policy'] = 'Política inicial de permissões';
+$lang['i_pol0'] = 'Wiki aberto (leitura, escrita e envio de arquivos por todos)';
+$lang['i_pol1'] = 'Wiki público (leitura por todos, escrita e envio de arquivos por usuários registrados)';
+$lang['i_pol2'] = 'Wiki fechado (leitura, escrita e envio de arquivos somente por usuários registrados)';
+$lang['i_retry'] = 'Tentar novamente';
+$lang['mu_intro'] = 'Aqui você pode enviar vários arquivos de uma só vez. Clique no botão de navegação e adicione-os à fila. Pressione Enviar quando estiver pronto.';
+$lang['mu_gridname'] = 'Nome do arquivo';
+$lang['mu_gridsize'] = 'Tamanho';
+$lang['mu_gridstat'] = 'Status';
+$lang['mu_namespace'] = 'Espaço de nomes';
+$lang['mu_browse'] = 'Navegar';
+$lang['mu_toobig'] = 'muito grande';
+$lang['mu_ready'] = 'pronto para enviar';
+$lang['mu_done'] = 'completo';
+$lang['mu_fail'] = 'falhou';
+$lang['mu_authfail'] = 'a sessão expirou';
+$lang['mu_progress'] = '@PCT@% enviado';
+$lang['mu_filetypes'] = 'Tipos de arquivo permitidos';
+$lang['mu_info'] = 'arquivos enviados.';
+$lang['mu_lasterr'] = 'Erro mais recente:';
+$lang['recent_global'] = 'Você está observando as alterações dentro do espaço de nomes <b>%s</b>. Também é possível ver as <a href="%s">modificações recentes no wiki inteiro</a>.';
+$lang['years'] = '%d anos atrás';
+$lang['months'] = '%d meses atrás';
+$lang['weeks'] = '%d semanas atrás';
+$lang['days'] = '%d dias atrás';
+$lang['hours'] = '%d horas atrás';
+$lang['minutes'] = '%d minutos atrás';
+$lang['seconds'] = '%d segundos atrás';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/locked.txt
new file mode 100644
index 000000000..70658cba1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/locked.txt
@@ -0,0 +1,3 @@
+====== Página bloqueada ======
+
+Essa página está bloqueada para edição por outro usuário. Você tem que esperar até que esse usuário termine a edição ou que o bloqueio expire.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/login.txt
new file mode 100644
index 000000000..23215e16c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/login.txt
@@ -0,0 +1,3 @@
+====== Autenticação ======
+
+Você não está autenticado. Digite as seus dados de usuário abaixo para entrar no sistema. É necessário habilitar os //cookies// no seu navegador para que isso funcione.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/mailtext.txt
new file mode 100644
index 000000000..e52535bf0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/mailtext.txt
@@ -0,0 +1,17 @@
+Uma página em seu DokuWiki foi adicionada ou alterada. Aqui estão os detalhes:
+
+Data: @DATE@
+Navegador: @BROWSER@
+Endereço IP: @IPADDRESS@
+Nome do host: @HOSTNAME@
+Revisão antiga: @OLDPAGE@
+Nova revisão: @NEWPAGE@
+Resumo da edição: @SUMMARY@
+Usuário: @USER@
+
+@DIFF@
+
+
+--
+Essa mensagem foi gerada pelo DokuWiki em
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/newpage.txt
new file mode 100644
index 000000000..77ba49fa5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/newpage.txt
@@ -0,0 +1,3 @@
+====== Esse tópico ainda não existe ======
+
+Você clicou em um link para um tópico que ainda não existe. Se for permitido, você poderá criá-lo usando o botão ''Criar essa página''.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/norev.txt
new file mode 100644
index 000000000..19024dcf7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/norev.txt
@@ -0,0 +1,3 @@
+====== Essa revisão não existe ======
+
+A revisão especificada não existe. Utilize o botão ''Revisões anteriores'' para uma listagem das revisões anteriores deste documento.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/preview.txt
new file mode 100644
index 000000000..efdc8f7f2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/preview.txt
@@ -0,0 +1,3 @@
+====== Visualização ======
+
+Essa é uma visualização de como será a aparência do seu texto. Lembre-se: ele ainda **não foi gravado**!
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/pwconfirm.txt
new file mode 100644
index 000000000..2a7c88531
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/pwconfirm.txt
@@ -0,0 +1,13 @@
+Olá @FULLNAME@!
+
+Alguém requisitou um nova senha para o seu usuário @TITLE@ em @DOKUWIKIURL@.
+
+Se não foi você quem fez essa requisição, simplesmente ignore essa mensagem.
+
+Se você realmente deseja receber uma nova senha, por favor, utilize o link abaixo, para confirmar sua requisição.
+
+@CONFIRM@
+
+--
+Essa mensagem foi gerada pelo DokuWiki em
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/read.txt
new file mode 100644
index 000000000..897155eed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/read.txt
@@ -0,0 +1 @@
+Essa página está em modo somente de leitura. Você pode visualizar a fonte, mas não alterá-la. Informe-se com o administrador do Wiki, caso você ache que isso está incorreto.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/recent.txt
new file mode 100644
index 000000000..988f235b4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/recent.txt
@@ -0,0 +1,4 @@
+====== Alterações Recentes ======
+
+As seguintes páginas foram alteradas recentemente.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/register.txt
new file mode 100644
index 000000000..431feca98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/register.txt
@@ -0,0 +1,4 @@
+====== Registre-se como um novo usuário ======
+
+Preencha todas as informações abaixo para criar uma nova conta nesse Wiki. Certifique-se de que você forneceu um **endereço de e-mail válido** - se não for pedido que você entre com uma senha aqui, ela será enviada para esse endereço. O nome de usuário deve ser um [[doku>pagename|nome de página]] válido.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/registermail.txt
new file mode 100644
index 000000000..9bb6a00ba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/registermail.txt
@@ -0,0 +1,14 @@
+Foi registrado um novo usuário. Seus detalhes são:
+
+Nome de usuário: @NEWUSER@
+Nome completo: @NEWNAME@
+E-mail: @NEWEMAIL@
+
+Data: @DATE@
+Navegador: @BROWSER@
+Endereço IP: @IPADDRESS@
+Nome do host: @HOSTNAME@
+
+--
+Essa mensagem foi gerada pelo DokuWiki em
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/resendpwd.txt
new file mode 100644
index 000000000..b74713f0f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/resendpwd.txt
@@ -0,0 +1,3 @@
+====== Enviar nova senha ======
+
+Por favor, digite o seu nome de usuário no formulário abaixo para requisitar uma nova senha para a sua conta nesse wiki. O link de confirmação será enviado para o endereço de e-mail que você forneceu. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/revisions.txt
new file mode 100644
index 000000000..1c174dcb0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/revisions.txt
@@ -0,0 +1,4 @@
+====== Revisões anteriores ======
+
+Essas são as revisões anteriores desse documento. Para reverter a uma revisão antiga, selecione-a abaixo, clique em ''Editar esta página'' e salve-a.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/searchpage.txt
new file mode 100644
index 000000000..2fba3afe9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/searchpage.txt
@@ -0,0 +1,5 @@
+====== Pesquisa ======
+
+Você pode encontrar os resultados da sua pesquisa abaixo. Se você não encontrou o que está procurando, pode criar ou editar a página com o nome que você especificou, usando o botão apropriado.
+
+===== Resultados =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/showrev.txt
new file mode 100644
index 000000000..89d9cad5a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/showrev.txt
@@ -0,0 +1,2 @@
+**Essa é uma revisão anterior do documento!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/stopwords.txt
new file mode 100644
index 000000000..c781ffbf2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/stopwords.txt
@@ -0,0 +1,55 @@
+# Essa é uma lista de palavras que o indexador ignora, uma palavra por linha
+# Ao editar esse arquivo, certifique-se de usar terminações de linha UNIX (newline simples)
+# Não há necessidade de incluir palavras menores que 3 caracteres - elas já são ignoradas por padrão
+# Essa lista é baseada na encontrada em http://www.ranks.nl/stopwords/portugese.html
+acerca
+algum
+alguma
+algumas
+alguns
+ambos
+antes
+após
+aquela
+aquelas
+aquele
+aqueles
+até
+bem
+bom
+cada
+com
+como
+das
+desde
+dos
+enquanto
+então
+esta
+este
+estas
+estes
+essa
+essas
+esse
+esses
+isso
+isto
+mas
+mesmo
+onde
+para
+pelo
+por
+qual
+quando
+que
+quem
+sem
+somente
+tal
+também
+uma
+umas
+uns
+www \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/subscribermail.txt
new file mode 100644
index 000000000..157196c15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/subscribermail.txt
@@ -0,0 +1,24 @@
+Olá!
+
+A página @PAGE@, no wiki @TITLE@ foi modificada.
+Aqui estão as mudanças:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Data : @DATE@
+Usuário : @USER@
+Resumo da edição: @SUMMARY@
+Revisão antiga: @OLDPAGE@
+Revisão nova: @NEWPAGE@
+
+Para cancelar as notificações dessa página, identifique-se em
+@DOKUWIKIURL@, vá até
+@NEWPAGE@
+e cancele o monitoramento das alterações da página e/ou do
+espaço de nomes.
+
+--
+Essa mensagem foi gerada pelo DokuWiki em
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/updateprofile.txt
new file mode 100644
index 000000000..b3f62f396
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/updateprofile.txt
@@ -0,0 +1,5 @@
+====== Atualize o perfil da sua conta ======
+
+Você precisa preencher somente os campos que você deseja alterar. Você não pode alterar o seu nome de usuário.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/uploadmail.txt
new file mode 100644
index 000000000..a3ac9bac7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/uploadmail.txt
@@ -0,0 +1,14 @@
+Um arquivo foi enviado para o seu DokuWiki. Os detalhes são:
+
+Arquivo: @MEDIA@
+Data: @DATE@
+Navegador: @BROWSER@
+Endereço IP: @IPADDRESS@
+Nome do host: @HOSTNAME@
+Tamanho: @SIZE@
+Tipo MIME: @MIME@
+Usuário: @USER@
+
+--
+Essa mensagem foi gerada pelo DokuWiki em
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/wordblock.txt
new file mode 100644
index 000000000..c2c9cbdb0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/wordblock.txt
@@ -0,0 +1,4 @@
+====== Bloqueio de SPAM ======
+
+Suas modificações **não** foram salvas porque elas contém uma ou mais palavras bloqueadas. Se você tentou enviar //spam// para o //wiki//, isso é feio, muito feio! Agora, se você acha que esse bloqueio foi indevido, por favor entre em contato com o administrador desse wiki.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/admin.txt
new file mode 100644
index 000000000..fccd9ca33
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/admin.txt
@@ -0,0 +1,5 @@
+====== Administração ======
+
+Esta é a lista de tarefas de Administração permitidas pelo DokuWiki.
+
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/adminplugins.txt
new file mode 100644
index 000000000..3eac7af53
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/adminplugins.txt
@@ -0,0 +1 @@
+===== Plugins Adicionais ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/backlinks.txt
new file mode 100644
index 000000000..e78ddf874
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/backlinks.txt
@@ -0,0 +1,4 @@
+====== Backlinks ======
+
+Esta é uma lista de todos os documentos que apresentam ligações ao documento corrente.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/conflict.txt
new file mode 100644
index 000000000..d2af1fe11
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/conflict.txt
@@ -0,0 +1,9 @@
+====== Conflito de Edição ======
+
+**Atenção**: Existe uma versão mais recente do que a versão usada no começo da sua edição. Isto acontece quando outra pessoa editou este documento entretanto e já gravou as alterações efectuadas.
+
+Por favor, examine todas as diferenças mostradas abaixo com atenção, e decida qual a versão que deverá ser tornada a mais actual: * Se escolher <Gravar> a sua versão será sobreposta à versão editada pela outra pessoa, que será perdida. * Se escolher <Cancelar> a versão editada pela outra pessoa será a versão final, e a sua será perdida.
+
+**Nota**: Sem que efectue a consolidação das alterações de ambas as revisões ao documento irá sempre perder uma das versões.
+
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/denied.txt
new file mode 100644
index 000000000..71355b01f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/denied.txt
@@ -0,0 +1,5 @@
+====== Permissão Negada ======
+
+Não possui direitos e permissões suficientes para continuar. Talvez se tenha esquecido de entrar em sessão?
+
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/diff.txt
new file mode 100644
index 000000000..e27640aa8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/diff.txt
@@ -0,0 +1,5 @@
+====== Diferenças ======
+
+Esta página mostra as diferenças entre a revisão do documento que escolheu e a versão actual.
+
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/draft.txt
new file mode 100644
index 000000000..1baf95c1c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/draft.txt
@@ -0,0 +1,7 @@
+====== Rascunho encontrado ======
+
+A sessão referente à última edição desta página não terminou correctamente. Foi guardado automaticamente um rascunho durante a edição que pode ou não usar para continuar a edição. Abaixo pode ver os dados guardados da última sessão.
+
+Por favor, decida se quer **recuperar** os dados guardados, **remover** o rascunho** ou **cancelar** o processo de edição corrente.
+
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/edit.txt
new file mode 100644
index 000000000..2fa596e29
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/edit.txt
@@ -0,0 +1,4 @@
+Edite o documento e clique no botão <Gravar>. Reveja a [[wiki:syntax|sintaxe]] das regras de formatação do texto.
+
+Por favor, altere o conteúdo deste documento apenas quando puder **melhorá-lo**.\\ Se pretende testar os seus conhecimentos no uso deste motor Wiki, realize os seus testes no [[playground:playground | Recreio]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/editrev.txt
new file mode 100644
index 000000000..9845a6915
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/editrev.txt
@@ -0,0 +1,5 @@
+**Atenção**: Carregou uma revisão antiga do documento!
+
+Se gravar esta revisão irá criar uma nova versão actual do documento com este conteúdo, que substituirá a versão actual.
+
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/index.txt
new file mode 100644
index 000000000..f490b7a5c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/index.txt
@@ -0,0 +1,6 @@
+====== Ãndice ======
+
+Este índice mostra todos os documentos disponíveis neste site Wiki, [[doku>namespaces | agrupados]] por assunto.
+
+----
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/install.html
new file mode 100644
index 000000000..a2fd5c7c6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/install.html
@@ -0,0 +1,8 @@
+<p>Esta página serve de "assistente" para a primeira instalação e configuração do <a href="http://dokuwiki.org">Dokuwiki</a>. Está disponível mais informação sobre este "assistente" na sua <a href="http://dokuwiki.org/installer">página de documentação</a>.</p>
+
+<p>O DokuWiki usa ficheiros normais para armazenar as páginas Wiki e outras informações associadas a essas páginas (i.e. imagens, índices de pesquisa, revisões antigas, etc.). O DokuWiki para poder funcionar correctamente <strong>requer</strong> permissões de escrita às pastas que contêm esses ficheiros. Este "assistente" não é capaz de configurar essas permissões. Isso tem que ser feito via linha de comandos, FTP ou Painel de Controlo do serviço de alojamento (i.e. cPanel).</p>
+
+<p>Este "assistente" vai configurar o DokuWiki com
+<acronym title="access control list">ACL</acronym>, que por sua vez permite ao administrador entrar em sessão e aceder ao menu de Administração do DokuWiki para poder instalar plugins, gerir utilizadores e seus perfis, gerir acesso às páginas e à própria configuração do DokuWiki. Não é necessário para que o DokuWiki funcione, mas facilita a sua administração.</p>
+
+<p>Utilizadores experiente ou com requisitos especiais devem seguir estes links, que detalham mais em pormenor a<a href="http://dokuwiki.org/install">instalação</a> e <a href="http://dokuwiki.org/config">configuração</a> do DokuWiki.</p> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/lang.php
new file mode 100644
index 000000000..ef4c70785
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/lang.php
@@ -0,0 +1,237 @@
+<?php
+/**
+ * Portuguese language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author José Carlos Monteiro <jose.c.monteiro@netcabo.pt>
+ * @author José Monteiro <Jose.Monteiro@DoWeDo-IT.com>
+ * @author Enrico Nicoletto <liverig@gmail.com>
+ * @author Fil <fil@meteopt.com>
+ * @author André Neves <drakferion@gmail.com>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '“';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '‘';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = '´';
+$lang['btn_edit'] = 'Editar página';
+$lang['btn_source'] = 'Ver fonte';
+$lang['btn_show'] = 'Ver página';
+$lang['btn_create'] = 'Criar página';
+$lang['btn_search'] = 'Pesquisar';
+$lang['btn_save'] = 'Gravar';
+$lang['btn_preview'] = 'Prever';
+$lang['btn_top'] = 'Voltar ao topo';
+$lang['btn_newer'] = '<< mais recente';
+$lang['btn_older'] = 'menos recente >>';
+$lang['btn_revs'] = 'Revisões';
+$lang['btn_recent'] = 'Alt. Recentes';
+$lang['btn_upload'] = 'Carregar';
+$lang['btn_cancel'] = 'Cancelar';
+$lang['btn_index'] = 'Ãndice';
+$lang['btn_secedit'] = 'Editar';
+$lang['btn_login'] = 'Entrar';
+$lang['btn_logout'] = 'Sair';
+$lang['btn_admin'] = 'Administrar';
+$lang['btn_update'] = 'Actualizar';
+$lang['btn_delete'] = 'Apagar';
+$lang['btn_back'] = 'Voltar';
+$lang['btn_backlink'] = 'Backlinks';
+$lang['btn_backtomedia'] = 'Voltar à Selecção de Media';
+$lang['btn_subscribe'] = 'Subscrever Alterações';
+$lang['btn_unsubscribe'] = 'Não Subscrever Alterações';
+$lang['btn_subscribens'] = 'Subscrever Mudanças de Espaço de Nome';
+$lang['btn_unsubscribens'] = 'Cancelar Subscrição de Mudanças de Espaço de Nome';
+$lang['btn_profile'] = 'Actualizar Perfil';
+$lang['btn_reset'] = 'Limpar';
+$lang['btn_resendpwd'] = 'Enviar nova senha';
+$lang['btn_draft'] = 'Editar rascunho';
+$lang['btn_recover'] = 'Recuperar rascunho';
+$lang['btn_draftdel'] = 'Apagar rascunho';
+$lang['loggedinas'] = 'Está em sessão como';
+$lang['user'] = 'Utilizador';
+$lang['pass'] = 'Senha';
+$lang['newpass'] = 'Nova senha';
+$lang['oldpass'] = 'Confirme senha actual';
+$lang['passchk'] = 'Confirmar novamente';
+$lang['remember'] = 'Memorizar?';
+$lang['fullname'] = 'Nome completo';
+$lang['email'] = 'Email';
+$lang['register'] = 'Registar';
+$lang['profile'] = 'Perfil do Utilizador';
+$lang['badlogin'] = 'O utilizador inválido ou senha inválida.';
+$lang['minoredit'] = 'Alterações Menores';
+$lang['draftdate'] = 'Rascunho automaticamente gravado em';
+$lang['nosecedit'] = 'A página foi modificada entretanto. Como a informação da secção estava desactualizada, foi carregada a página inteira.';
+$lang['regmissing'] = 'Por favor, preencha todos os campos.';
+$lang['reguexists'] = 'Este utilizador já está inscrito. Por favor escolha outro nome de utilizador.';
+$lang['regsuccess'] = 'O utilizador foi criado e a senha foi enviada para o endereço de correio electrónico usado na inscrição.';
+$lang['regsuccess2'] = 'O utilizador foi criado.';
+$lang['regmailfail'] = 'Houve um erro no envio da senha por e-mail. Por favor, contacte o administrador!';
+$lang['regbadmail'] = 'O endereço de correio electrónico é inválido. Se o endereço está correcto, e isto é um erro, por favor, contacte o administrador!';
+$lang['regbadpass'] = 'As duas senhas não são idênticas, por favor tente de novo.';
+$lang['regpwmail'] = 'A sua senha DokuWiki';
+$lang['reghere'] = 'Para se registar, clique em';
+$lang['profna'] = 'Este Wiki não suporta modificações aos perfis.';
+$lang['profnochange'] = 'Nada alteração, nada a fazer.';
+$lang['profnoempty'] = 'Não são permitidos nomes ou endereços em branco.';
+$lang['profchanged'] = 'Perfil do utilizador actualizado com sucesso.';
+$lang['pwdforget'] = 'Esqueceu a sua senha? Pedir nova senha';
+$lang['resendna'] = 'Este wiki não suporta reenvio de senhas.';
+$lang['resendpwd'] = 'Enviar nova senha para';
+$lang['resendpwdmissing'] = 'É preciso preencher todos os campos.';
+$lang['resendpwdnouser'] = 'Não foi possível encontrar este utilizador.';
+$lang['resendpwdbadauth'] = 'O código de autenticação não é válido. Por favor, assegure-se de que o link de confirmação está completo.';
+$lang['resendpwdconfirm'] = 'O link de confirmação foi enviado por e-mail.';
+$lang['resendpwdsuccess'] = 'A nova senha foi enviada por e-mail.';
+$lang['license'] = 'Excepto menção em contrário, o conteúdo neste wiki está sob a seguinte licença:';
+$lang['licenseok'] = 'Nota: Ao editar esta página você aceita disponibilizar o seu conteúdo sob a seguinte licença:';
+$lang['txt_upload'] = 'Escolha ficheiro para carregar';
+$lang['txt_filename'] = 'Carregar como (opcional)';
+$lang['txt_overwrt'] = 'Escrever por cima do ficheiro já existente';
+$lang['lockedby'] = 'Bloqueado por';
+$lang['lockexpire'] = 'Expira em';
+$lang['willexpire'] = 'O bloqueio de edição para este documento irá expirar num minuto.\nPara evitar conflitos de edição, clique no botão <Prever> para re-iniciar o temporizador de bloqueio.';
+$lang['notsavedyet'] = 'Existem alterações não gravadas, que serão perdidas se continuar.\nDeseja realmente continuar?';
+$lang['rssfailed'] = 'Ocorreu um erro neste canal RSS: ';
+$lang['nothingfound'] = 'Nada foi encontrado.';
+$lang['mediaselect'] = 'Selecção de ficheiros';
+$lang['fileupload'] = 'Carregamento de ficheiros';
+$lang['uploadsucc'] = 'Carregamento com sucesso';
+$lang['uploadfail'] = 'Falhou o carregamento. Talvez por não ter permissões?';
+$lang['uploadwrong'] = 'Carregamento negado. Esta extensão está proibida.';
+$lang['uploadexist'] = 'O ficheiro já existe. Não pode ser carregado.';
+$lang['uploadbadcontent'] = 'O conteúdo carregado não corresponde à extensão %s.';
+$lang['uploadspam'] = 'O carregamento foi bloqueado pela lista negra de SPAM.';
+$lang['uploadxss'] = 'O carregamento foi bloqueado porque possivelmente contem conteúdo malicioso.';
+$lang['uploadsize'] = 'O ficheiro carregado é demasiado grande. (máx. %s)';
+$lang['deletesucc'] = 'O ficheiro "%s" foi removido.';
+$lang['deletefail'] = 'O ficheiro "%s" não pode ser removido, por favor verifique as permissões.';
+$lang['mediainuse'] = 'O ficheiro "%s" não foi removido porque está ainda a ser usado.';
+$lang['namespaces'] = 'Grupos';
+$lang['mediafiles'] = 'Ficheiros disponíveis em';
+$lang['js']['keepopen'] = 'Mantenha a janela aberta durante a selecção';
+$lang['js']['hidedetails'] = 'Esconder Detalhes';
+$lang['js']['nosmblinks'] = 'Ligação a pastas Windows partilhadas apenas funciona com o Microsoft Internet Explorer.
+Pode no entanto copiar e colar o link.';
+$lang['js']['linkwiz'] = 'Assistente de Criação de Ligação';
+$lang['js']['linkto'] = 'Ligação para:';
+$lang['js']['del_confirm'] = 'Remover esta entrada?';
+$lang['js']['mu_btn'] = 'Enviar múltiplos ficheiros de uma vez';
+$lang['mediausage'] = 'Use a seguinte sintaxe para referenciar este ficheiro:';
+$lang['mediaview'] = 'Ver ficheiro original';
+$lang['mediaroot'] = 'root';
+$lang['mediaupload'] = 'Carregar ficheiros para o grupo actual aqui. Para criar sub-grupos: escrever o nome do sub-grupo seguido de : antes do nome do ficheiro no campo "Carregar como".';
+$lang['mediaextchange'] = 'Extensão alterada de .%s para .%s!';
+$lang['reference'] = 'Referências para';
+$lang['ref_inuse'] = 'O ficheiro "%s" não pode ser removido, porque está ainda a ser usado nestes documentos:';
+$lang['ref_hidden'] = 'Algumas referências estão em documentos para os quais não tem permissão para ler';
+$lang['hits'] = 'Resultados';
+$lang['quickhits'] = 'Documentos encontrados';
+$lang['toc'] = 'Tabela de Conteúdos';
+$lang['current'] = 'Actual';
+$lang['yours'] = 'A sua versão';
+$lang['diff'] = 'mostrar diferenças com a versão actual';
+$lang['diff2'] = 'mostrar diferenças entre versões escolhidas';
+$lang['line'] = 'Linha';
+$lang['breadcrumb'] = 'Está em';
+$lang['youarehere'] = 'Está aqui';
+$lang['lastmod'] = 'Esta página foi modificada pela última vez em';
+$lang['by'] = 'por';
+$lang['deleted'] = 'Documento automaticamente removido.';
+$lang['created'] = 'Criação deste novo documento.';
+$lang['restored'] = 'Versão anterior restaurada.';
+$lang['external_edit'] = 'Edição externa';
+$lang['summary'] = 'Sumário da Edição';
+$lang['noflash'] = 'O <a href="http://www.adobe.com/products/flashplayer/">Plugin Adobe Flash</a> é necessário para exibir este conteúdo.';
+$lang['download'] = 'Descarregar Snippet';
+$lang['mail_newpage'] = 'documento adicionado:';
+$lang['mail_changed'] = 'documento modificado:';
+$lang['mail_new_user'] = 'Novo utilizador:';
+$lang['mail_upload'] = 'Ficheiro carregado:';
+$lang['qb_bold'] = 'Texto com Ênfase';
+$lang['qb_italic'] = 'Texto Itálico';
+$lang['qb_underl'] = 'Texto Sublinhado';
+$lang['qb_code'] = 'Texto Código';
+$lang['qb_strike'] = 'Texto Riscado';
+$lang['qb_h1'] = 'Cabeçalho Nível 1';
+$lang['qb_h2'] = 'Cabeçalho Nível 2';
+$lang['qb_h3'] = 'Cabeçalho Nível 3';
+$lang['qb_h4'] = 'Cabeçalho Nível 4';
+$lang['qb_h5'] = 'Cabeçalho Nível 5';
+$lang['qb_h'] = 'Cabeçalho';
+$lang['qb_hs'] = 'Seleccionar Cabeçalho';
+$lang['qb_hplus'] = 'Cabeçalho Maior';
+$lang['qb_hminus'] = 'Cabeçalho Menor';
+$lang['qb_hequal'] = 'Cabeçalho de Nível Semelhante';
+$lang['qb_link'] = 'Ligação Interna';
+$lang['qb_extlink'] = 'Ligação Externa';
+$lang['qb_hr'] = 'Barra Horizontal';
+$lang['qb_ol'] = 'Item numa Lista Ordenada';
+$lang['qb_ul'] = 'Item numa Lista Não Ordenada';
+$lang['qb_media'] = 'Incluir imagens e outros ficheiros';
+$lang['qb_sig'] = 'Inserir Assinatura';
+$lang['qb_smileys'] = 'Smileys';
+$lang['qb_chars'] = 'Caracteres Especiais';
+$lang['upperns'] = 'Ir para o espaço de nomes parente';
+$lang['admin_register'] = 'Registar Novo Utilizador';
+$lang['metaedit'] = 'Editar Metadata';
+$lang['metasaveerr'] = 'Falhou a escrita de Metadata';
+$lang['metasaveok'] = 'Metadata gravada';
+$lang['img_backto'] = 'De volta a';
+$lang['img_title'] = 'Título';
+$lang['img_caption'] = 'Legenda';
+$lang['img_date'] = 'Data';
+$lang['img_fname'] = 'Ficheiro';
+$lang['img_fsize'] = 'Tamanho';
+$lang['img_artist'] = 'Fotógrafo';
+$lang['img_copyr'] = 'Copyright';
+$lang['img_format'] = 'Formato';
+$lang['img_camera'] = 'Câmara';
+$lang['img_keywords'] = 'Palavras-Chave';
+$lang['subscribe_success'] = '%s adicionado à lista de subscritores de %s';
+$lang['subscribe_error'] = 'Erro ao adicionar %s à lista de subscritores de %s';
+$lang['subscribe_noaddress'] = 'Não existe nenhum endereço associado ao seu perfil, por isso não pode ser adicionado à lista de subscritores.';
+$lang['unsubscribe_success'] = '%s removido da lista de subscritores de %s';
+$lang['unsubscribe_error'] = 'Erro ao remover %s da lista de subscritores de %s';
+$lang['authmodfailed'] = 'Configuração de autenticação errada. Por favor, informe o Wiki Admin.';
+$lang['authtempfail'] = 'Autenticação temporariamente indisponível. Se a situação persistir, por favor informe o Wiki Admin.';
+$lang['i_chooselang'] = 'Escolha a linguagem';
+$lang['i_installer'] = 'Instalador do DokuWiki';
+$lang['i_wikiname'] = 'Nome Wiki';
+$lang['i_enableacl'] = 'Activar ACL (recomendado)';
+$lang['i_superuser'] = 'Super-utilizador';
+$lang['i_problems'] = 'O instalador encontrou alguns problemas, indicados mais abaixo. Não pode continuar até que sejam corrigidos.';
+$lang['i_modified'] = 'Por razões de segurança, este script só funciona em novas e não-modificadas instalações do Dokuwiki. Deve por isso re-extrair os ficheiros do pacote que descarregou ou então deve consultar as completas <a href="http://dokuwiki.org/install">instruções de instalação do Dokuwiki installation instructions</a>';
+$lang['i_funcna'] = 'A função PHP <code>%s</code> não está disponível. Terá o serviço de alojamento desactivado-a por alguma razão?';
+$lang['i_phpver'] = 'A versão de PHP actual <code>%s</code> é inferior à versão mínima <code>%s</code>. É preciso actualizar a instalação PHP.';
+$lang['i_permfail'] = '<code>%s</code> não permite que o DokuWiki escreva nela. É preciso corrigir as permissões desta pasta!';
+$lang['i_confexists'] = '<code>%s</code> já existe';
+$lang['i_writeerr'] = 'Não foi possível criar <code>%s</code>. É preciso verificar as permissões e criar o ficheiro manualmente.';
+$lang['i_badhash'] = 'dokuwiki.php não é o original ou não é reconhecido (hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - valor ilegal ou vazio';
+$lang['i_success'] = 'A instalação e configuração inicial foram bem sucedidas. Pode remover o install.php. Aceda ao seu novo <a href="doku.php">Wiki</a> a correr o DokuWiki.';
+$lang['i_failure'] = 'Ocorreram alguns erros durante a escrita nos ficheiros de configuração. Poderá ser preciso corrigi-los manualmente antes de poder aceder ao seu novo <a href="doku.php">Wiki</a> a correr o DokuWiki.';
+$lang['i_policy'] = 'Politica ACL inicial';
+$lang['i_pol0'] = 'Wiki Aberto (ler, escrever e carregar para todos)';
+$lang['i_pol1'] = 'Wiki Público (ler para todos, escrever e carregar para utilizadores inscritos)';
+$lang['i_pol2'] = 'Wiki Fechado (ler, escrever e carregar somente para utilizadores inscritos)';
+$lang['i_retry'] = 'Repetir';
+$lang['mu_intro'] = 'Aqui podes enviar múltiplos ficheiros de uma vez. Clique no botão de navegação para adicioná-los na fila. Premir upload quando pronto.';
+$lang['mu_gridname'] = 'Nome do ficheiro';
+$lang['mu_gridsize'] = 'Tamanho';
+$lang['mu_gridstat'] = 'Estado';
+$lang['mu_namespace'] = 'Espaço de Nomes';
+$lang['mu_browse'] = 'Navegar';
+$lang['mu_toobig'] = 'demasiado grande';
+$lang['mu_ready'] = 'pronto para upload';
+$lang['mu_done'] = 'completo';
+$lang['mu_fail'] = 'falhou';
+$lang['mu_authfail'] = 'sessão expirada';
+$lang['mu_progress'] = '@PCT@% transferido';
+$lang['mu_filetypes'] = 'Tipos de Ficheiros Permitidos';
+$lang['mu_info'] = 'Ficheiros carregados.';
+$lang['mu_lasterr'] = 'Último erro:';
+$lang['recent_global'] = 'Você está a observar as alterações dentro do espaço de nomes <b>%s</b>. Também é possível ver as <a href="%s">modificações recentes no wiki inteiro</a>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/locked.txt
new file mode 100644
index 000000000..b9df29cb5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/locked.txt
@@ -0,0 +1,5 @@
+====== Página em Edição ======
+
+Esta página está bloqueada por outro utilizador, que se encontra a editá-la neste momento.\\ Terá que aguardar que o utilizador termine a edição e grava as alterações ou então que temporizador de bloqueio expire.
+
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/login.txt
new file mode 100644
index 000000000..e8000bbab
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/login.txt
@@ -0,0 +1,7 @@
+====== Entrar ======
+
+Não está actualmente em sessão!\\ Introduza os seus dados de utilizador para entrar em sessão.
+
+**Nota**: Precisa de ter //cookies// activos no seu navegador.
+
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/mailtext.txt
new file mode 100644
index 000000000..915a147ec
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/mailtext.txt
@@ -0,0 +1,20 @@
+Um documento no site Wiki @DOKUWIKIURL@ foi criado ou modificado.
+
+Aqui estão os detalhes:
+
+Data : @DATE@
+Browser : @BROWSER@
+Endereço IP : @IPADDRESS@
+Hostname : @HOSTNAME@
+Documento Ant.: @OLDPAGE@
+Documento Novo: @NEWPAGE@
+Edit Summary : @SUMMARY@
+User : @USER@
+
+@DIFF@
+
+
+
+----
+
+Esta mensagem foi gerada automaticamente pelo motor DokuWiki em @DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/newpage.txt
new file mode 100644
index 000000000..4db706be1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/newpage.txt
@@ -0,0 +1,7 @@
+====== Documento Inexistente ======
+
+Acaba de tentar aceder a um documento que ainda não existe.
+
+Pode criar o conteúdo deste novo documento após clicar no botão <Criar página>.
+
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/norev.txt
new file mode 100644
index 000000000..6dd8dfb6c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/norev.txt
@@ -0,0 +1,7 @@
+====== Revisão Inexistente ======
+
+A revisão especificada não existe.
+
+Clique no botão <Revisões> para aceder à lista de revisões deste documento.
+
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/preview.txt
new file mode 100644
index 000000000..077665881
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/preview.txt
@@ -0,0 +1,7 @@
+====== Previsão ======
+
+Esta é a previsão de como irá ficar o conteúdo do documento se clicar no botão <Gravar>.
+
+**Atenção**: O documento ainda não se encontra gravado.\\ É necessário clicar no botão <Gravar> para efectivar as modificações que tenha realizado.
+
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/pwconfirm.txt
new file mode 100644
index 000000000..2848a116c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/pwconfirm.txt
@@ -0,0 +1,13 @@
+Olá @FULLNAME@!
+
+Alguém efectuou um pedido para uma nova senha para o seu perfil @TITLE@ em @DOKUWIKIURL@
+
+Se não foi você que efectuou o pedido então por favor ignore esta mensagem.
+
+Senão, para confirmar o pedido, por favor siga este link:
+
+@CONFIRM@
+
+--
+
+Esta mensagem foi gerada automaticamente pelo motor DokuWiki em @DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/read.txt
new file mode 100644
index 000000000..92be189f3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/read.txt
@@ -0,0 +1,3 @@
+**Atenção**: Este documento é apenas de leitura.\\ Pode ver o documento em bruto mas não pode gravar qualquer alteração.\\ \\ Informe-se com o administrador deste Wiki se achar que isto não está correcto.
+
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/recent.txt
new file mode 100644
index 000000000..339041468
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/recent.txt
@@ -0,0 +1,5 @@
+====== Alterações Recentes ======
+
+Os seguintes documentos foram alterados recentemente.
+
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/register.txt
new file mode 100644
index 000000000..c647a4615
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/register.txt
@@ -0,0 +1,7 @@
+====== Inscrição ======
+
+Por favor, preencha todos os campos com a informação correspondente, para poder criar uma nova conta neste SiteWiki.
+
+**Nota**: O nome de utilizador deve cumprir as mesmas regras de nomeação de documentos Wiki válidos.\\ **Atenção**: Verifique que o endereço de correio electrónico que preencheu é válido, pois a sua senha será enviada por e-mail.
+
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/registermail.txt
new file mode 100644
index 000000000..b9c1f164b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/registermail.txt
@@ -0,0 +1,14 @@
+Inscrição de um novo utilizador. Aqui estão os detalhes:
+
+Username : @NEWUSER@
+Nome Completo : @NEWNAME@
+E-mail : @NEWEMAIL@
+
+Data : @DATE@
+Browser : @BROWSER@
+Endereço IP : @IPADDRESS@
+Hostname : @HOSTNAME@
+
+----
+
+Esta mensagem foi gerada pelo DokuWiki em @DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/resendpwd.txt
new file mode 100644
index 000000000..9a54ace07
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/resendpwd.txt
@@ -0,0 +1,3 @@
+====== Enviar nova senha ======
+
+Por favor, insira o seu nome de utilizador neste formulário para requerer uma nova senha para esta conta/perfil. Um link de confirmação será enviado para o endereço de e-mail associado. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/revisions.txt
new file mode 100644
index 000000000..213022f91
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/revisions.txt
@@ -0,0 +1,5 @@
+====== Revisões ======
+
+Estas são as revisões ao documento corrente.\\ Para reverter o documento para uma destas revisões: * Escolha a revisão do documento da lista abaixo; * Clique depois no botão <Editar página>; * Faça as alterações que veja necessárias - opcional; * Grava a revisão antiga como sendo a revisão actual do documento. Após a gravação, o documento da versão actual será substituído pelo documento da revisão escolhida.
+
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/searchpage.txt
new file mode 100644
index 000000000..49a0b16ea
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/searchpage.txt
@@ -0,0 +1,7 @@
+====== Pesquisa ======
+
+Os resultados da sua pesquisa encontram-se mais abaixo.
+
+Se não encontrou o que procurava, pode criar uma nova página com o nome da sua pesquisa, usando o botão <Editar página>.
+
+===== Resultados =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/showrev.txt
new file mode 100644
index 000000000..e8ad7f47a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/showrev.txt
@@ -0,0 +1,3 @@
+**Atenção**: Esta é uma versão antiga do documento!
+
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/stopwords.txt
new file mode 100644
index 000000000..373e6ee5a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/stopwords.txt
@@ -0,0 +1,141 @@
+# Esta é uma lista de plavaras que o indexador ignora, uma palavra por linha
+# Quando você edita esta lista certifique-se que usa fim de linha usado em sistemas UNIX
+# Não é necessário incluir palavras menores que 3 letras - estas são sempre ignoradas
+# Esta lista é baseada nas encontradas em http://www.ranks.nl/stopwords/
+último
+acerca
+agora
+algmas
+alguns
+ali
+ambos
+antes
+apontar
+aquela
+aquelas
+aquele
+aqueles
+aqui
+atrás
+bem
+bom
+cada
+caminho
+cima
+com
+como
+comprido
+conhecido
+corrente
+das
+debaixo
+dentro
+desde
+desligado
+deve
+devem
+deverá
+direita
+diz
+dizer
+dois
+dos
+ela
+ele
+eles
+enquanto
+então
+está
+estão
+estado
+estar
+estará
+este
+estes
+esteve
+estive
+estivemos
+estiveram
+fará
+faz
+fazer
+fazia
+fez
+fim
+foi
+fora
+horas
+iniciar
+inicio
+irá
+ista
+iste
+isto
+ligado
+maioria
+maiorias
+mais
+mas
+mesmo
+meu
+muito
+muitos
+nós
+não
+nome
+nosso
+novo
+onde
+outro
+para
+parte
+pegar
+pelo
+pessoas
+pode
+poderá
+podia
+por
+porque
+povo
+promeiro
+quê
+qual
+qualquer
+quando
+quem
+quieto
+são
+saber
+sem
+ser
+seu
+somente
+têm
+tal
+também
+tem
+tempo
+tenho
+tentar
+tentaram
+tente
+tentei
+teu
+teve
+tipo
+tive
+todos
+trabalhar
+trabalho
+uma
+umas
+uns
+usa
+usar
+valor
+veja
+ver
+verdade
+verdadeiro
+você
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/subscribermail.txt
new file mode 100644
index 000000000..3a9e40d20
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/subscribermail.txt
@@ -0,0 +1,15 @@
+Olá,
+
+A página @PAGE@ em @TITLE@ foi alterda.
+Aqui estão as diferenças:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Para receber mais notificações desta página alterada, por favor, entre no Wiki em @DOKUWIKIURL@ e aceda a @NEWPAGE@ para depois poder clicar no botão [ Não Subscrever ].
+
+
+----
+
+Esta mensagem foi gerada pelo DokuWiki em @DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/updateprofile.txt
new file mode 100644
index 000000000..efacfe4a2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/updateprofile.txt
@@ -0,0 +1,3 @@
+====== Actualize o seu perfil ======
+
+Apenas precisa de completar os campos que pretende alterar. Não é possível alterar o seu nome de utilizador. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/uploadmail.txt
new file mode 100644
index 000000000..249d66234
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/uploadmail.txt
@@ -0,0 +1,14 @@
+Um ficheiro foi carregado. Aqui estão os detalhes:
+
+Ficheiro : @MEDIA@
+Data : @DATE@
+Browser : @BROWSER@
+Endereço IP : @IPADDRESS@
+Hostname : @HOSTNAME@
+Tamanho : @SIZE@
+MIME Type : @MIME@
+Utilizador : @USER@
+
+----
+
+Esta mensagem foi gerada pelo DokuWiki em @DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/wordblock.txt
new file mode 100644
index 000000000..a88063c9b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/wordblock.txt
@@ -0,0 +1,7 @@
+====== Bloquear SPAM ======
+
+As suas alterações foram **bloqueadas**, porque contêm uma ou mais palavras consideradas abusivas (SPAM).
+
+Se pensa que isto não está correcto, por favor contacte o administrador deste site Wiki.
+
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/admin.txt
new file mode 100644
index 000000000..4b1a9062a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/admin.txt
@@ -0,0 +1,3 @@
+====== Administrare ======
+
+Puteţi vedea mai jos o listă cu activităţile administrative disponibile în DokuWiki. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/adminplugins.txt
new file mode 100644
index 000000000..f076c3651
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/adminplugins.txt
@@ -0,0 +1 @@
+===== Plugin-uri Adiţionale ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/backlinks.txt
new file mode 100644
index 000000000..3fd5e3415
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/backlinks.txt
@@ -0,0 +1,4 @@
+====== Legături înapoi ======
+
+Aceasta e o listă de pagini care au legături către pagina curentă.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/conflict.txt
new file mode 100644
index 000000000..d7218ca5f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/conflict.txt
@@ -0,0 +1,6 @@
+====== Există o nouă versiune ======
+
+Există o versiune nouă a documentului editat. Aceasta se întîmplă cînd un alt utilizator a schimbat documentul în timp ce îl editezi.
+
+Examinează diferenţele arătate mai jos, apoi ia decizia care versiune o reţii. Dacă alegi ''Salvează'', versiunea documentului va fi salvată. Apăsaţi ''Renunţare'' pentru a menţine versiunea curentă.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/denied.txt
new file mode 100644
index 000000000..8178995e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/denied.txt
@@ -0,0 +1,4 @@
+====== Acces Interzis ======
+
+Din păcate nu aveţi destule drepturi pentru a continua. Poate aţi uitat să vă logaţi?
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/diff.txt
new file mode 100644
index 000000000..f33be8afd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/diff.txt
@@ -0,0 +1,4 @@
+====== Diferenţe ======
+
+Aceasta arată diferenţele dintre revziile selectate şi versiunea curentă a paginii.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/draft.txt
new file mode 100644
index 000000000..e13671e3e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/draft.txt
@@ -0,0 +1,5 @@
+====== Fişierul schiţă nu a fost găsit ======
+
+Ultima dvs. sesiune de editare nu s-a finalizat corect. În timpul lucrului, DocuWiki a salvat automat o schiţă, pe care o puteţi utiliza acum pentru a continua editarea. Mai jos puteţi vedea informaţiile care s-au salvat de la ultima dvs. sesiune.
+
+Decideţi dacă vreţi să //recuperaţi// sesiunea de editare pierdută, //ştergeţi// schiţa salvată automat sau să //anulaţi// procesul de editare. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/edit.txt
new file mode 100644
index 000000000..1e79dc4fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/edit.txt
@@ -0,0 +1,2 @@
+Editează pagina şi apasă ''Salvează''. Vezi [[wiki:syntax]] pentru sintaxă. Te rog editează pagina doar pentru a o **îmbunătaţi**. Dacă vrei să testezi cîteva lucruri, învaţă sa faci primii paşi în [[playground:playground]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/editrev.txt
new file mode 100644
index 000000000..290dca496
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/editrev.txt
@@ -0,0 +1,2 @@
+**Ai încărcat o versuine veche a documentului!** Dacă ai salvat-o, vei crea o versiune nouă cu această dată.
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/index.txt
new file mode 100644
index 000000000..5b88cc03b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/index.txt
@@ -0,0 +1,4 @@
+====== Index ======
+
+Acesta e un index al tuturor paginilor ordonat după [[doku>namespaces|namespaces]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/install.html
new file mode 100644
index 000000000..56cf3873b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/install.html
@@ -0,0 +1,10 @@
+<p>Această pagină oferă asistenţă la instalarea pentru prima dată a <a href="http://dokuwiki.org">Dokuwiki</a>. Mai multe informaţii privind această instalare găsiţi pe <a href="http://dokuwiki.org/installer">pagina de documentaţie</a>.</p>
+
+<p>DokuWiki foloseşte fişiere obişnuite pentru stocarea paginilor wiki şi a informaţilor asociate acestor pagini (de ex. imagini, indecşi de căutare, versiuni vechi, etc). Pentru a lucra cu succes, DokuWiki <strong>trebuie</strong> să aibă drepturi de scriere în directoarele ce conţin aceste fişiere.
+Acest script de instalare nu poate seta drepturile directoarelor. De regulă, aceasta se face direct, în linie de comandă, sau în cazul găzduirii, prin FTP sau prin panoul de control al gazdei (de ex. cPanel).</p>
+
+<p>Acest script de instalare va configura DokuWiki pentru <acronym title="access control list">ACL</acronym>, care permite logarea administratorului şi accesul la meniul de administrare pentru instalarea plugin-urilor, gestiunea utilizatorilor, a accesului la paginile wiki şi modificarea setărilor de configurare.
+Nu este necesar pentru ca DokuWiki să funcţioneze, însă face mai uşoară administrarea DokuWiki.</p>
+
+<p>Utilizatorii experimentaţi sau utilizatorii ce au nevoie de setări speciale ar putea folosi această legătură privind<a href="http://dokuwiki.org/install">instrucţiunile de instalare</a> şi <a href="http://dokuwiki.org/config">setările de configurare</a>.</p>
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/lang.php
new file mode 100644
index 000000000..87ee6ae0f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/lang.php
@@ -0,0 +1,251 @@
+<?php
+/**
+ * romanian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Tiberiu Micu <tibimicu@gmx.net>
+ * @author Sergiu Baltariu <s_baltariu@yahoo.com>
+ * @author s_baltariu@yahoo.com
+ * @author Emanuel-Emeric Andrasi <n30@mandrivausers.ro>
+ * @author Emanuel-Emeric Andrași <n30@mandrivausers.ro>
+ * @author Emanuel-Emeric AndraÅŸi <em.andrasi@mandrivausers.ro>
+ * @author Emanuel-Emeric Andrasi <em.andrasi@mandrivausers.ro>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '„';
+$lang['doublequoteclosing'] = '“';
+$lang['singlequoteopening'] = '‚';
+$lang['singlequoteclosing'] = '‘';
+$lang['apostrophe'] = '\'';
+$lang['btn_edit'] = 'Editează această pagină';
+$lang['btn_source'] = 'Arată sursa paginii';
+$lang['btn_show'] = 'Arată pagina';
+$lang['btn_create'] = 'Crează această pagină';
+$lang['btn_search'] = 'Caută';
+$lang['btn_save'] = 'Salvează';
+$lang['btn_preview'] = 'Previzualizează';
+$lang['btn_top'] = 'La început';
+$lang['btn_newer'] = '<< mai recent';
+$lang['btn_older'] = 'mai vechi>>';
+$lang['btn_revs'] = 'Versiuni vechi';
+$lang['btn_recent'] = 'Modificări recente';
+$lang['btn_upload'] = 'Upload';
+$lang['btn_cancel'] = 'Renunţare';
+$lang['btn_index'] = 'Index';
+$lang['btn_secedit'] = 'Editează';
+$lang['btn_login'] = 'Login';
+$lang['btn_logout'] = 'Logout';
+$lang['btn_admin'] = 'Admin';
+$lang['btn_update'] = 'Actualizează';
+$lang['btn_delete'] = 'Åžterge';
+$lang['btn_back'] = 'ÃŽnapoi';
+$lang['btn_backlink'] = 'Legătură anterioară';
+$lang['btn_backtomedia'] = 'Înapoi la Selecţia Mediafile';
+$lang['btn_subscribe'] = 'Subscrie Modificarea Paginii';
+$lang['btn_unsubscribe'] = 'Anulează Subscrierea Modificării Paginii';
+$lang['btn_subscribens'] = 'Subscrie Modificarea Spaţiului de Nume';
+$lang['btn_unsubscribens'] = 'Anulează Subscrierea Modificării Spaţiului de Nume';
+$lang['btn_profile'] = 'Actualizează Profil';
+$lang['btn_reset'] = 'Resetează';
+$lang['btn_resendpwd'] = 'Trimite parola nouă';
+$lang['btn_draft'] = 'Editează schiţă';
+$lang['btn_recover'] = 'Recuperează schiţă';
+$lang['btn_draftdel'] = 'Şterge schiţă';
+$lang['btn_revert'] = 'Revenire';
+$lang['loggedinas'] = 'Logat ca ÅŸi';
+$lang['user'] = 'Utilizator';
+$lang['pass'] = 'Parola';
+$lang['newpass'] = 'Parola nouă';
+$lang['oldpass'] = 'Confirmă parola curentă';
+$lang['passchk'] = 'încă o dată';
+$lang['remember'] = 'Ţine-mă minte';
+$lang['fullname'] = 'Nume complet';
+$lang['email'] = 'E-Mail';
+$lang['register'] = 'Înregistrează';
+$lang['profile'] = 'Profil Utilizator';
+$lang['badlogin'] = 'Imi pare rău, utilizatorul şi/sau parola au fost greşite.';
+$lang['minoredit'] = 'Modificare Minoră';
+$lang['draftdate'] = 'Schiţă salvată automat la';
+$lang['nosecedit'] = 'Pagina s-a modificat între timp, secţiunea info a expirat, s-a încărcat pagina întreagă în loc.';
+$lang['regmissing'] = 'Ne pare rău, trebuie să completezi toate cîmpurile.';
+$lang['reguexists'] = 'Ne pare rău, un utilizator cu acest nume există deja logat.';
+$lang['regsuccess'] = 'Utilizatorul a fost creat. Parola a fost trimisă prin email.';
+$lang['regsuccess2'] = 'Utilizatorul a fost creat.';
+$lang['regmailfail'] = 'Se pare că a fost o eroare la trimiterea parolei prin email. Contactaţi administratorul!';
+$lang['regbadmail'] = 'Adresa de email este invalidă - dacă credeţi că este o eroare contactaţi administratorul.';
+$lang['regbadpass'] = 'Cele două parole furnizate nu sunt identice; încercaţi din nou.';
+$lang['regpwmail'] = 'Parola ta DokuWiki';
+$lang['reghere'] = 'Înca nu ai un cont? Fă-ţi unul';
+$lang['profna'] = 'Această wiki nu suportă modificarea profilului';
+$lang['profnochange'] = 'Nici o modificare; nimic de făcut.';
+$lang['profnoempty'] = 'Nu sunt admise numele sau adresa de email necompletate.';
+$lang['profchanged'] = 'Profilul de utilizator a fost actualizat succes.';
+$lang['pwdforget'] = 'Parola uitată? Luaţi una nouă';
+$lang['resendna'] = 'Această wiki nu suportă retrimiterea parolei.';
+$lang['resendpwd'] = 'Trimite parola nouă pentru';
+$lang['resendpwdmissing'] = 'Ne pare rău, trebuie completate toate câmpurile.';
+$lang['resendpwdnouser'] = 'Ne pare rău, acest utilizator nu poate fi găsit în baza de date.';
+$lang['resendpwdbadauth'] = 'Ne pare rău, acest cod de autorizare nu este corect. Verificaţi dacă aţi folosit tot link-ul de confirmare.';
+$lang['resendpwdconfirm'] = 'Un link de confirmare a fost trimis prin email.';
+$lang['resendpwdsuccess'] = 'Parola nouă';
+$lang['license'] = 'Exceptând locurile unde este altfel specificat, conţinutul acestui wiki este licenţiat sub următoarea licenţă:';
+$lang['licenseok'] = 'Notă: Prin editarea acestei pagini sunteţi de acord să vă licenţiaţi conţintul sub următoarea licenţă:';
+$lang['searchmedia'] = 'Caută numele fişierului:';
+$lang['searchmedia_in'] = 'Caută în %s';
+$lang['txt_upload'] = 'Selectează fisierul de încărcat';
+$lang['txt_filename'] = 'Încarcă fişierul ca (opţional)';
+$lang['txt_overwrt'] = 'Suprascrie fiÅŸierul existent';
+$lang['lockedby'] = 'Momentan blocat de';
+$lang['lockexpire'] = 'Blocarea expiră la';
+$lang['willexpire'] = 'Blocarea pentru editarea paginii expiră intr-un minut.\nPentru a preveni conflictele foloseşte butonul de previzualizare pentru resetarea blocării.';
+$lang['notsavedyet'] = 'Există modificări nesalvate, care se vor pierde.\nDoreşti să continui?';
+$lang['rssfailed'] = 'A apărut o eroare in timpul descărcării acestui cîmp: ';
+$lang['nothingfound'] = 'Nu am găsit nimic.';
+$lang['mediaselect'] = 'Selectare fiÅŸiere media';
+$lang['fileupload'] = 'Încarcă fişier media';
+$lang['uploadsucc'] = 'Încărcare reuşită';
+$lang['uploadfail'] = 'Încărcare eşuată. Poate din cauza permisiunilor?';
+$lang['uploadwrong'] = 'Încărcare nepermisă. Extensia fişierului e nepermisă';
+$lang['uploadexist'] = 'Fişierul există deja. Nimic nu a fost făcut.';
+$lang['uploadbadcontent'] = 'Conţinutul încărcat nu corespunde extensiei fişierului %s.';
+$lang['uploadspam'] = 'Încărcarea a fost blocată datorită listei negre de spam.';
+$lang['uploadxss'] = 'Încărcarea a fost blocată datorită unui posibil conţinut dăunător.';
+$lang['uploadsize'] = 'FiÅŸierul uploadat a fost prea mare. (max %s)';
+$lang['deletesucc'] = 'FiÅŸierul "%s" a fost ÅŸters.';
+$lang['deletefail'] = '"%s" nu a putut fi şters - verificaţi drepturile.';
+$lang['mediainuse'] = 'Fişierul "%s" nu a fost şters - este încă în uz.';
+$lang['namespaces'] = 'Spaţii de nume';
+$lang['mediafiles'] = 'Fişiere disponibile în';
+$lang['js']['searchmedia'] = 'Caută fişiere';
+$lang['js']['keepopen'] = 'Menţine fereastra deschisă la selecţie';
+$lang['js']['hidedetails'] = 'Ascunde Detalii';
+$lang['js']['nosmblinks'] = 'Legăturile către sharing-uri Windows funcţioneaza numai in Microsoft Internet Explorer.
+Puteţi însă copia şi insera legătura.';
+$lang['js']['linkwiz'] = 'Asistent legătură';
+$lang['js']['linkto'] = 'Legătură la:';
+$lang['js']['del_confirm'] = 'Doriţi într-adevăr ştergerea elementelor selectate?';
+$lang['js']['mu_btn'] = 'Încarcă mai multe fişiere simultan';
+$lang['mediausage'] = 'Folosiţi următoarea sintaxă pentru a face referinţă la acest fişier:';
+$lang['mediaview'] = 'Vizualizează fişierul original';
+$lang['mediaroot'] = 'root';
+$lang['mediaupload'] = 'Încarcă un fişier in acest spaţiu de nume. Pentru a crea sub-spaţii de nume, adaugă-le la fişierul de încărcat, separate de doua puncte (:).';
+$lang['mediaextchange'] = 'Extensia fişierului a fost modificată din .%s în .%s!';
+$lang['reference'] = 'Referinţă pentru';
+$lang['ref_inuse'] = 'Fişierul nu a putut fi şters întrucât este folosit încă de următoarele pagini:';
+$lang['ref_hidden'] = 'Nu aveţi permisiunea să citiţi o parte din referinţele din pagină.';
+$lang['hits'] = 'Hituri';
+$lang['quickhits'] = 'Nume de pagini potrivite';
+$lang['toc'] = 'Cuprins';
+$lang['current'] = 'curent';
+$lang['yours'] = 'Versiunea ta';
+$lang['diff'] = 'arată diferenţele faţă de versiunea curentă';
+$lang['diff2'] = 'Arată diferenţele dintre versiunile selectate';
+$lang['line'] = 'Linia';
+$lang['breadcrumb'] = 'Traseu';
+$lang['youarehere'] = 'Sunteţi aici';
+$lang['lastmod'] = 'Ultima modificare';
+$lang['by'] = 'de către';
+$lang['deleted'] = 'ÅŸters';
+$lang['created'] = 'creat';
+$lang['restored'] = 'versiune veche restaurată';
+$lang['external_edit'] = 'editare externă';
+$lang['summary'] = 'Editează sumarul';
+$lang['noflash'] = 'Plugin-ul <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> este necesar pentru afişarea corectă a conţinutului.';
+$lang['download'] = 'Bloc descărcări';
+$lang['mail_newpage'] = 'pagina adăugată:';
+$lang['mail_changed'] = 'page schimbată:';
+$lang['mail_new_user'] = 'utilizator nou';
+$lang['mail_upload'] = 'fişier încărcat:';
+$lang['qb_bold'] = 'Text ÃŽngroÅŸat';
+$lang['qb_italic'] = 'Text Italic';
+$lang['qb_underl'] = 'Text Subliniat';
+$lang['qb_code'] = 'Text Cod';
+$lang['qb_strike'] = 'Text Tăiat';
+$lang['qb_h1'] = 'Titlu de Nivel 1';
+$lang['qb_h2'] = 'Titlu de Nivel 2';
+$lang['qb_h3'] = 'Titlu de Nivel 3';
+$lang['qb_h4'] = 'Titlu de Nivel 4';
+$lang['qb_h5'] = 'Titlu de Nivel 5';
+$lang['qb_h'] = 'Titlu';
+$lang['qb_hs'] = 'Selectaţi Titlul';
+$lang['qb_hplus'] = 'Titlu mai mare';
+$lang['qb_hminus'] = 'Titlu mai mic';
+$lang['qb_hequal'] = 'Titlu de acelaÅŸi nivel';
+$lang['qb_link'] = 'Legătură internă';
+$lang['qb_extlink'] = 'Legătura externă';
+$lang['qb_hr'] = 'Linie Orizontal';
+$lang['qb_ol'] = 'Listă Ordonată';
+$lang['qb_ul'] = 'Listă Neordoată';
+$lang['qb_media'] = 'Adaugă imagini şi alte fişiere';
+$lang['qb_sig'] = 'Inserează semnătură';
+$lang['qb_smileys'] = 'Smiley-uri';
+$lang['qb_chars'] = 'Caractere speciale';
+$lang['upperns'] = 'sari la numele de spaţiu părinte';
+$lang['admin_register'] = 'Adaugă utilizator nou';
+$lang['metaedit'] = 'Editează Metadata';
+$lang['metasaveerr'] = 'Scrierea metadatelor a eÅŸuat';
+$lang['metasaveok'] = 'Metadatele au fost salvate';
+$lang['img_backto'] = 'ÃŽnapoi la';
+$lang['img_title'] = 'Titlu';
+$lang['img_caption'] = 'Legendă';
+$lang['img_date'] = 'Data';
+$lang['img_fname'] = 'Nume fiÅŸier';
+$lang['img_fsize'] = 'Dimensiune';
+$lang['img_artist'] = 'Fotograf';
+$lang['img_copyr'] = 'Copyright';
+$lang['img_format'] = 'Format';
+$lang['img_camera'] = 'Camera';
+$lang['img_keywords'] = 'Cuvinte cheie';
+$lang['subscribe_success'] = 'A fost adăugat %s la lista de subscriere pentru %s';
+$lang['subscribe_error'] = 'Eroare la adăugarea %s la lista de subscriere pentru %s';
+$lang['subscribe_noaddress'] = 'Nu este nici o adresă de mail asociată cu utilizatorul dvs. Nu puteţi fi adăugat la lista de subscriere';
+$lang['unsubscribe_success'] = '%s a fost eliminat din lista de subscriere pentru %s';
+$lang['unsubscribe_error'] = 'Eroare la eliminarea %s din lista de subscriere pentru %s';
+$lang['authmodfailed'] = 'Configuraţia autentificării utilizatorului este eronată. Anunţaţi Wiki Admin-ul.';
+$lang['authtempfail'] = 'Autentificarea utilizatorului este temporar indisponibilă. Anunţaţi Wiki Admin-ul.';
+$lang['i_chooselang'] = 'Alegeţi limba';
+$lang['i_installer'] = 'DokuWiki Installer';
+$lang['i_wikiname'] = 'Numele Wiki';
+$lang['i_enableacl'] = 'Activează ACL (recomandat)';
+$lang['i_superuser'] = 'Superutilizator';
+$lang['i_problems'] = 'Programul de instalare a găsit câteva probleme, indicate mai jos. Nu puteţi continua până nu le rezolvaţi.';
+$lang['i_modified'] = 'Din motive de securitate, acest script va funcţiona doar cu o instalare nouă şi nemodificată a Docuwiki.
+Puteţi fie să extrageţi din nou fişierele din arhiva descărcată fie să consultaţi instrucţiunile de instalare Dokuwiki la <a href="http://dokuwiki.org/install">';
+$lang['i_funcna'] = 'Funcţia PHP <code>%s</code> nu este disponibilă. Probabil provider-ul dvs. a inactivat-o pentru un motiv oarecare.';
+$lang['i_phpver'] = 'Versiunea dvs. de PHP <code>%s</code> este mai veche decât cea necesară (<code>%s</code>). Trebuie să vă actualizaţi instalarea PHP.';
+$lang['i_permfail'] = '<code>%s</code> nu poate fi scris de către DokuWiki. Trebuie să modificaţi drepturile acestui director!';
+$lang['i_confexists'] = '<code>%s</code> există deja';
+$lang['i_writeerr'] = 'Nu s-a putut crea <code>%s</code>. Trebuie să verificaţi drepturile directorului/fişierului şi să creaţi fişierul manual.';
+$lang['i_badhash'] = 'dokuwiki.php nu a fost recunoscut sau a fost modificat (hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - valoare nepemisă sau neintrodusă';
+$lang['i_success'] = 'Configurarea a fost finalizată cu succes. Acum puteţi sterge fişierul install.php. Continuaţi cu <a href="doku.php">your new DokuWiki</a>.';
+$lang['i_failure'] = 'Au apărut erori la scrierea fişierelor de configurare. Va trebui să le corectaţi manual înainte de a putea folosi <a href="doku.php">your new DokuWiki</a>.';
+$lang['i_policy'] = 'Politica ACL iniţială';
+$lang['i_pol0'] = 'Wiki Deschisă (citeşte, scrie şi încarcă oricine)';
+$lang['i_pol1'] = 'Wiki Deschisă (citeste oricine, scrie şi încarcă doar utilizatorul înregistrat)';
+$lang['i_pol2'] = 'Wiki Închisă (citeşte, scrie şi încarcă doar utilizatorul înregistrat)';
+$lang['i_retry'] = 'Încearcă din nou';
+$lang['mu_intro'] = 'Aici poţi încărca mai multe fişiere simultan. Apasă butonul Răsfoieşte pentru a le adăuga. Apasă Încarcă când ai terminat.';
+$lang['mu_gridname'] = 'Numele fiÅŸierului';
+$lang['mu_gridsize'] = 'Mărime';
+$lang['mu_gridstat'] = 'Stare';
+$lang['mu_namespace'] = 'Spaţiu de nume';
+$lang['mu_browse'] = 'Răsfoieşte';
+$lang['mu_toobig'] = 'prea mare';
+$lang['mu_ready'] = 'pregătit pentru încărcare';
+$lang['mu_done'] = 'complet';
+$lang['mu_fail'] = 'eÅŸuat';
+$lang['mu_authfail'] = 'sesiunea a expirat';
+$lang['mu_progress'] = '@PCT@% incărcat';
+$lang['mu_filetypes'] = 'Tipuri de fiÅŸiere permise';
+$lang['mu_info'] = 'fişiere încărcate';
+$lang['mu_lasterr'] = 'Ultima eroare:';
+$lang['recent_global'] = 'Acum vizualizaţi modificările în interiorul numelui de spaţiu <b>%s</b>. De asemenea puteţi <a href="%s">vizualiza modificările recente ale întregului wiki</a>.';
+$lang['years'] = 'acum %d ani';
+$lang['months'] = 'acum %d luni';
+$lang['weeks'] = 'acum %d săptămâni';
+$lang['days'] = 'acum %d zile';
+$lang['hours'] = 'acum %d ore';
+$lang['minutes'] = 'acum %d minute';
+$lang['seconds'] = 'acum %d secunde';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/locked.txt
new file mode 100644
index 000000000..94d6eb2ff
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/locked.txt
@@ -0,0 +1,3 @@
+====== Pagină blocată ======
+
+Pagina este momentan blocată de alt utilizator. Trebuie să aştepţi pînă cînd acest utilizator termină editarea ori expiră blocarea.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/login.txt
new file mode 100644
index 000000000..2f1fda9ad
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/login.txt
@@ -0,0 +1,4 @@
+====== Login ======
+
+Nu sînteţi logat! Introduceţi datele de autentificare pentru logare. Trebuie să permiteţi cookie-uri pentru logare.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/mailtext.txt
new file mode 100644
index 000000000..77aca8c4b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/mailtext.txt
@@ -0,0 +1,16 @@
+A fost adăugată sau schimbată o pagină. Aici sînt detaliile:
+
+Data : @DATE@
+Navigator : @BROWSER@
+Adresa-IP : @IPADDRESS@
+Nume gazdă : @HOSTNAME@
+Versiune veche : @OLDPAGE@
+Versiune nouă : @NEWPAGE@
+Rezumat editare: @SUMMARY@
+
+@DIFF@
+
+
+--
+Mailul a fost generat de DokuWiki la
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/newpage.txt
new file mode 100644
index 000000000..7fb9d55a6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/newpage.txt
@@ -0,0 +1,3 @@
+====== Subiectul nu există încă ======
+
+Aţi urmat o legătură către un subiect care nu există. O puteţi crea prin apăsarea butonului ''Editează această pagină''.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/norev.txt
new file mode 100644
index 000000000..926f9144e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/norev.txt
@@ -0,0 +1,4 @@
+====== Nu există versiunea ======
+
+Versiunea specificată nu există. Foloseşte butonul ''Versiuni vechi'' pentru o listă a versiunilor acestui document.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/preview.txt
new file mode 100644
index 000000000..1964d7476
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/preview.txt
@@ -0,0 +1,4 @@
+====== Previzualizare ======
+
+Acesta este modul în care va arăta textul. Nu uita: **Nu** e încă **salvat**!
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/pwconfirm.txt
new file mode 100644
index 000000000..043e08868
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/pwconfirm.txt
@@ -0,0 +1,13 @@
+Salut @FULLNAME@!
+
+Cineva a cerut o parolă nouă pentru @TITLE@ pentru conectarea la @DOKUWIKIURL@
+
+Dacă nu aţi solicitat o parolă nouă, ignoraţi acest email.
+
+Pentru a confirma că cererea a fost într-adevăr trimisă de dumneavoastră, folosiţi link-ul de mai jos.
+
+@CONFIRM@
+
+--
+Acest mail a fost generat de DocuWiki la
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/read.txt
new file mode 100644
index 000000000..2c0aa6d90
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/read.txt
@@ -0,0 +1,2 @@
+Această pagină poate fi doar citită. Poţi vedea sursa, dar n-o poţi modifica. Consultă administratorul dacă crezi că e ceva în neregulă.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/recent.txt
new file mode 100644
index 000000000..8d4aa043a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/recent.txt
@@ -0,0 +1,5 @@
+====== Schimbări recente ======
+
+Următoarele pagini au fost schimbate recent.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/register.txt
new file mode 100644
index 000000000..9fc6eec65
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/register.txt
@@ -0,0 +1,3 @@
+====== Înregistrează-te ca utilizator nou ======
+Pentru a crea un wiki nou completează mai jos toate informaţiile. Asigură-te că ai introdus o adresă de **e-mail validă** unde va fi trimisă noua parolă. Numele de utilizator trebuie de asemenea să fie valid [[doku>pagename|pagename]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/registermail.txt
new file mode 100644
index 000000000..fb754af67
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/registermail.txt
@@ -0,0 +1,14 @@
+Un nou utilizator s-a înregsitrat. Iată detaliile:
+
+Nume utilizator : @NEWUSER@
+Nume complet : @NEWNAME@
+E-mail : @NEWEMAIL@
+
+Data : @DATE@
+Browser : @BROWSER@
+Adresă IP : @IPADDRESS@
+Hostname : @HOSTNAME@
+
+--
+Acest mail a fost generat automat de către DokuWiki la
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/resendpwd.txt
new file mode 100644
index 000000000..b7de241e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/resendpwd.txt
@@ -0,0 +1,3 @@
+====== Trimite parolă nouă ======
+
+Introduceţi numele de utilizator în formularul de mai jos pentru a solicita o nouă parolă pentru această wiki. Un link de confirmare va fi trimis la adresa de email înregistrată. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/revisions.txt
new file mode 100644
index 000000000..b2ff46f77
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/revisions.txt
@@ -0,0 +1,4 @@
+====== Versiune veche ======
+
+Acestea sînt versiunile vechi ale documentului curent. Pentru revenirea la o versiune mai veche, selecteaz-o de mai jos, clic pe ''Editează această pagină'' şi salveaz-o.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/searchpage.txt
new file mode 100644
index 000000000..c1169b88d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/searchpage.txt
@@ -0,0 +1,5 @@
+====== Căutare ======
+
+Rezultatele căutării sînt afisate mai jos. Dacă n-aţi găsit ce-aţi căutat, puteţi creea o pagină nouă după căutare prin folosirea butonului ''Editează această pagină''.
+
+===== Rezultate =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/showrev.txt
new file mode 100644
index 000000000..c1d5e545d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/showrev.txt
@@ -0,0 +1,2 @@
+**Aceasta e o versiune veche a documentului!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/stopwords.txt
new file mode 100644
index 000000000..29e7452d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/stopwords.txt
@@ -0,0 +1,29 @@
+# Aceasta este o listă de cuvinte ignorate la indexare, câte un cuvânt pe linie
+# Când editaţi acest fişier, asiguraţi-vă că folosiţi sfârşituri de linie UNIX (o singură linie nouă)
+# Nu e nevoie să includeţi cuvinte mai scurte de 3 caractere - acestea sunt, oricum, ignorate
+# Această listă se bazează pe cele ce pot fi găsite la http://www.ranks.nl/stopwords/
+about
+are
+and
+you
+your
+them
+their
+com
+for
+from
+into
+how
+that
+the
+this
+was
+what
+when
+where
+who
+will
+with
+und
+the
+www
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/subscribermail.txt
new file mode 100644
index 000000000..23374dc6f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/subscribermail.txt
@@ -0,0 +1,17 @@
+Bună!
+
+Pagina @PAGE@ din @TITLE@ wiki a fost modificată.
+Iată modificările:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Pentru a vă dezabona, logaţi-vă la wiki la
+@DOKUWIKIURL@, apoi vizitaţi
+@NEWPAGE@
+şi alegeţi 'Anulează modificările'.
+
+--
+Acest mail a fost generat automat de către DokuWiki la
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/updateprofile.txt
new file mode 100644
index 000000000..e5988ec51
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/updateprofile.txt
@@ -0,0 +1,3 @@
+====== Actualizare profil utilizator ======
+
+Trebuie să completaţi doar câmpurile pe care doriţi să le modificaţi. Nu puteţi modifica numele de utilizator. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/uploadmail.txt
new file mode 100644
index 000000000..39faed370
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/uploadmail.txt
@@ -0,0 +1,14 @@
+Un fişier a fost încărcat în DocuWiki. Iată detaliile:
+
+FiÅŸier : @MEDIA@
+Data : @DATE@
+Browser : @BROWSER@
+Adresă IP : @IPADDRESS@
+Hostname : @HOSTNAME@
+Dimensiune : @SIZE@
+MIME Type : @MIME@
+Utilizator : @USER@
+
+--
+Acest mail a fost generat automat de către DokuWiki la
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/wordblock.txt
new file mode 100644
index 000000000..1fa7bd6cd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/wordblock.txt
@@ -0,0 +1,4 @@
+====== SPAM blocat ======
+
+Modificările **nu** au fost salvate deoarece conţin unul sau mai multe cuvinte nepermise. Daca ai încercat să spamezi Wiki-ul -- Eşti un om rău! Dacă crezi că asta e o eroare, contactează administratorul acestui Wiki.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/admin.txt
new file mode 100644
index 000000000..cb03be52e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/admin.txt
@@ -0,0 +1,4 @@
+====== Управление ======
+
+Ðиже вы Ñможете найти ÑпиÑок админиÑтративных операций, доÑтупных в DokuWiki.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/adminplugins.txt
new file mode 100644
index 000000000..6e3fc26f2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/adminplugins.txt
@@ -0,0 +1 @@
+===== Дополнительные плагины ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/backlinks.txt
new file mode 100644
index 000000000..a3b638d19
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/backlinks.txt
@@ -0,0 +1,4 @@
+====== Обратные ÑÑылки ======
+
+Это ÑпиÑок Ñтраниц, которые ÑÑылаютÑÑ Ð½Ð° текущую Ñтраницу.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/conflict.txt
new file mode 100644
index 000000000..f1ac60bd4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/conflict.txt
@@ -0,0 +1,5 @@
+====== СущеÑтвует более Ð½Ð¾Ð²Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ ======
+
+СущеÑтвует более Ð½Ð¾Ð²Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°, который вы редактировали. Такое ÑлучаетÑÑ, когда другой пользователь изменил документ, пока вы делали то же Ñамое.
+
+Внимательно изучите различиÑ, приведенные ниже и решите, какую верÑию оÑтавить. ЕÑли вы выберете ''Сохранить'', то ваша верÑÐ¸Ñ Ð±ÑƒÐ´ÐµÑ‚ Ñохранена. Ðажав ''Отменить',' вы оÑтавите текущую верÑию.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/denied.txt
new file mode 100644
index 000000000..eee59efe6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/denied.txt
@@ -0,0 +1,3 @@
+====== ДоÑтуп запрещен ======
+
+Извините, у Ð²Ð°Ñ Ð½Ðµ хватает прав Ð´Ð»Ñ Ñтого дейÑтвиÑ. Может быть, Ð’Ñ‹ забыли войти в вики под Ñвоим именем?
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/diff.txt
new file mode 100644
index 000000000..4d1d4d031
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/diff.txt
@@ -0,0 +1,4 @@
+====== Ð Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ñ ======
+
+ЗдеÑÑŒ показаны Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñƒ выбранной ревизией и текущей верÑией данной Ñтраницы.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/draft.txt
new file mode 100644
index 000000000..bbd2e5913
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/draft.txt
@@ -0,0 +1,6 @@
+====== Ðайден черновик ======
+
+ПоÑледний раз редактирование Ñтой Ñтраницы не было корректно завершено. Во Ð²Ñ€ÐµÐ¼Ñ Ð²Ð°ÑˆÐµÐ¹ работы был автоматичеÑки Ñохранён черновик, который вы теперь можете воÑÑтановить и продолжить прерванную правку. Ðиже вы видите автоматичеÑки Ñохраненную верÑию.
+
+ПожалуйÑта, решите, хотите ли вы //воÑÑтановить// потерÑнную верÑию, //удалить// черновик, или //отменить// редактирование.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/edit.txt
new file mode 100644
index 000000000..2237f082e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/edit.txt
@@ -0,0 +1,2 @@
+Отредактируйте Ñтраницу и нажмите ''Сохранить''. Прочтите [[wiki:syntax]] Ð´Ð»Ñ Ð¾Ð·Ð½Ð°ÐºÐ¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ñ ÑинтакÑиÑом вики. ПожалуйÑта, редактируйте только в том Ñлучае, еÑли планируете **улучшить** Ñодержимое. ЕÑли Ð’Ñ‹ проÑто хотите потеÑтировать что-либо, воÑпользуйтеÑÑŒ Ñпециальной Ñтраницей: [[playground:playground]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/editrev.txt
new file mode 100644
index 000000000..db843ec1c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/editrev.txt
@@ -0,0 +1,2 @@
+**Ð’Ñ‹ загрузили Ñтарую ревизию документа!** Сохранив её, вы Ñоздадите новую текущую верÑию Ñ Ñтим Ñодержимым.
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/index.txt
new file mode 100644
index 000000000..376d58947
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/index.txt
@@ -0,0 +1,4 @@
+====== Содержание ======
+
+Перед Вами ÑпиÑок доÑтупных Ñтраниц, упорÑдоченный по проÑтранÑтвам имён ([[doku>namespaces|namespaces]]).
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/install.html
new file mode 100644
index 000000000..d7022dd46
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/install.html
@@ -0,0 +1,7 @@
+<p>Эта Ñтраница предназначена помочь в первоначальной уÑтановке и конфигурации <a href="http://dokuwiki.org">DokuWiki</a>. Ð”Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ программе уÑтановки доÑтупна на её <a href="http://dokuwiki.org/installer">Ñтранице документации</a>.</p>
+
+<p>DokuWiki иÑпользует обычные файлы Ð´Ð»Ñ Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ñтраниц и дополнительной информации (например, изображений, поиÑкового индекÑа, предыдущих верÑий Ñтраницы, и Ñ‚.д.). Ð”Ð»Ñ ÑƒÑпешной работы DokuWiki <strong>необходим</strong> доÑтуп на запиÑÑŒ к директориÑм Ñ Ñтими файлами. Ð”Ð°Ð½Ð½Ð°Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð° уÑтановки не может ÑамоÑтоÑтельно изменÑÑ‚ÑŒ ÑиÑтемные права доÑтупа к директориÑм. Обычно Ñто делаетÑÑ Ð½Ð°Ð¿Ñ€Ñмую из командной Ñтроки (shell), или, еÑли Ð’Ñ‹ иÑпользуете удалённый хоÑтинг, через FTP или панель ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð²Ð°ÑˆÐµÐ³Ð¾ хоÑтинга (например, cPanel).</p>
+
+<p>Программа уÑтановки включит иÑпользование ÑпиÑков ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð´Ð¾Ñтупа (<acronym title="access control list">ACL</acronym>) в Вашей DokuWiki. Это позволит админиÑтратору, поÑле авторизации в DokuWiki, иÑпользовать Ñпециальное меню Ð´Ð»Ñ ÑƒÑтановки плагинов, ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñми и доÑтупом к Ñтраницам вики, а также Ð´Ð»Ñ Ð½Ð°Ñтройки конфигурационных параметров. СпиÑки ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð´Ð¾Ñтупа не обÑзательны Ð´Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ DokuWiki, однако они позволÑÑŽÑ‚ упроÑтить управление вашей DokuWiki.</p>
+
+<p>Опытным пользователÑм и пользователÑм Ñо Ñпециальными требованиÑми к уÑтановке рекомендуетÑÑ Ð¾Ð±Ñ€Ð°Ñ‚Ð¸Ñ‚ÑŒÑÑ Ð¿Ð¾ Ñледующим ÑÑылкам Ð´Ð»Ñ ÑƒÑ‚Ð¾Ñ‡Ð½ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð´Ñ€Ð¾Ð±Ð½Ð¾Ñтей <a href="http://dokuwiki.org/install">процеÑÑа уÑтановки</a> и <a href="http://dokuwiki.org/config">параметров конфигурации</a>.</p>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/lang.php
new file mode 100644
index 000000000..f6cec8170
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/lang.php
@@ -0,0 +1,258 @@
+<?php
+/**
+ * Russian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Yuri Pimenov <up@ftpsearch.lv>
+ * @author Igor Tarasov <tigr@mail15.com>
+ * @author Denis Simakov <akinoame1@gmail.com>
+ * @author Kaens Bard <kaens@mail.ru>
+ * @author Andrew Pleshakov <beotiger@mail.ru>
+ * @author Змей ЭтерийÑкий evil_snake@eternion.ru
+ * @author Hikaru Nakajima <jisatsu@mail.ru>
+ * @author Alexei Tereschenko <alexeitlex@yahoo.com>
+ * @author Irina Ponomareva irinaponomareva@webperfectionist.com
+ * @author Alexander Sorkin <kibizoid@gmail.com>
+ * @author Kirill Krasnov <krasnovforum@gmail.com>
+ * @author Vlad Tsybenko <vlad.development@gmail.com>
+ */
+$lang['encoding'] = ' utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '«';
+$lang['doublequoteclosing'] = '»';
+$lang['singlequoteopening'] = '„';
+$lang['singlequoteclosing'] = '“';
+$lang['apostrophe'] = '’';
+$lang['btn_edit'] = 'Править Ñтраницу';
+$lang['btn_source'] = 'Показать иÑходный текÑÑ‚';
+$lang['btn_show'] = 'Показать Ñтраницу';
+$lang['btn_create'] = 'Создать Ñтраницу';
+$lang['btn_search'] = 'ПоиÑк';
+$lang['btn_save'] = 'Сохранить';
+$lang['btn_preview'] = 'ПроÑмотр';
+$lang['btn_top'] = 'Ðаверх';
+$lang['btn_newer'] = '<< более новые';
+$lang['btn_older'] = 'более Ñтарые >>';
+$lang['btn_revs'] = 'ИÑÑ‚Ð¾Ñ€Ð¸Ñ Ñтраницы';
+$lang['btn_recent'] = 'Ðедавние изменениÑ';
+$lang['btn_upload'] = 'Закачать';
+$lang['btn_cancel'] = 'Отменить';
+$lang['btn_index'] = 'Ð’Ñе Ñтраницы';
+$lang['btn_secedit'] = 'Править';
+$lang['btn_login'] = 'Войти';
+$lang['btn_logout'] = 'Выйти';
+$lang['btn_admin'] = 'Управление';
+$lang['btn_update'] = 'Обновить';
+$lang['btn_delete'] = 'Удалить';
+$lang['btn_back'] = 'Ðазад';
+$lang['btn_backlink'] = 'СÑылки Ñюда';
+$lang['btn_backtomedia'] = 'ВернутьÑÑ Ðº выбору медиа-файла';
+$lang['btn_subscribe'] = 'ПодпиÑатьÑÑ (вÑе правки)';
+$lang['btn_unsubscribe'] = 'ОтпиÑатьÑÑ (вÑе правки)';
+$lang['btn_subscribens'] = 'ПодпиÑатьÑÑ (правки Ñтого раздела)';
+$lang['btn_unsubscribens'] = 'ОтпиÑатьÑÑ (правки Ñтого раздела)';
+$lang['btn_profile'] = 'Профиль';
+$lang['btn_reset'] = 'СброÑ';
+$lang['btn_resendpwd'] = 'ПоÑлать новый пароль';
+$lang['btn_draft'] = 'Править черновик';
+$lang['btn_recover'] = 'ВоÑÑтановить черновик';
+$lang['btn_draftdel'] = 'Удалить черновик';
+$lang['btn_revert'] = 'ВоÑÑтановить';
+$lang['loggedinas'] = 'Зашли как';
+$lang['user'] = 'Логин';
+$lang['pass'] = 'Пароль';
+$lang['newpass'] = 'Ðовый пароль';
+$lang['oldpass'] = 'Введите текущий пароль';
+$lang['passchk'] = 'повторите';
+$lang['remember'] = 'Запомнить менÑ';
+$lang['fullname'] = 'Полное имÑ';
+$lang['email'] = 'E-Mail';
+$lang['register'] = 'ЗарегиÑтрироватьÑÑ';
+$lang['profile'] = 'Профиль пользователÑ';
+$lang['badlogin'] = 'Извините, неверное Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð»Ð¸ пароль.';
+$lang['minoredit'] = 'Ðебольшие изменениÑ';
+$lang['draftdate'] = 'Черновик Ñохранён';
+$lang['nosecedit'] = 'За Ñто Ð²Ñ€ÐµÐ¼Ñ Ñтраница была изменена, и Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ Ñекции уÑтарела. Загружена Ð¿Ð¾Ð»Ð½Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ Ñтраницы.';
+$lang['regmissing'] = 'Извините, вам Ñледует заполнить вÑе полÑ.';
+$lang['reguexists'] = 'Извините, пользователь Ñ Ñ‚Ð°ÐºÐ¸Ð¼ логином уже ÑущеÑтвует.';
+$lang['regsuccess'] = 'Пользователь Ñоздан, пароль выÑлан на e-mail.';
+$lang['regsuccess2'] = 'Пользователь Ñоздан.';
+$lang['regmailfail'] = 'Похоже, проблема Ñ Ð¿Ð¾Ñылкой Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð¿Ð¾ почте. ПожалуйÑта, Ñообщите админиÑтратору!';
+$lang['regbadmail'] = 'Данный Вами Ð°Ð´Ñ€ÐµÑ e-mail выглÑдит неправильным. ЕÑли вы Ñчитаете Ñто ошибкой, Ñообщите админу.';
+$lang['regbadpass'] = 'Два введённых Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð½Ðµ идентичны. ПожалуйÑта, попробуйте ещё раз.';
+$lang['regpwmail'] = 'Ваш пароль Ð´Ð»Ñ ÑиÑтемы DokuWiki';
+$lang['reghere'] = 'У Ð²Ð°Ñ ÐµÑ‰Ñ‘ нет аккаунта? Извольте получить';
+$lang['profna'] = 'Ð”Ð°Ð½Ð½Ð°Ñ Ð²Ð¸ÐºÐ¸ не поддерживает изменение профилÑ';
+$lang['profnochange'] = 'Изменений не было внеÑено, профиль не обновлён.';
+$lang['profnoempty'] = 'Логин и Ð°Ð´Ñ€ÐµÑ e-mail не могут быть пуÑтыми.';
+$lang['profchanged'] = 'Профиль Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ ÑƒÑпешно обновлён.';
+$lang['pwdforget'] = 'Забыли пароль? Получите новый';
+$lang['resendna'] = 'Ð”Ð°Ð½Ð½Ð°Ñ Ð²Ð¸ÐºÐ¸ не поддерживает повторную отправку паролÑ.';
+$lang['resendpwd'] = 'Ð’Ñ‹Ñлать пароль длÑ';
+$lang['resendpwdmissing'] = 'Ð’Ñ‹ должны заполнить вÑе Ð¿Ð¾Ð»Ñ Ñ„Ð¾Ñ€Ð¼Ñ‹.';
+$lang['resendpwdnouser'] = 'Пользователь Ñ Ñ‚Ð°ÐºÐ¸Ð¼ логином не обнаружен в нашей базе данных.';
+$lang['resendpwdbadauth'] = 'Извините, неверный код авторизации. УбедитеÑÑŒ, что Ð’Ñ‹ полноÑтью Ñкопировали ÑÑылку. ';
+$lang['resendpwdconfirm'] = 'СÑылка Ð´Ð»Ñ Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð±Ñ‹Ð»Ð° выÑлана по e-mail. ';
+$lang['resendpwdsuccess'] = 'Ваш новый пароль был выÑлан по e-mail.';
+$lang['license'] = 'За иÑключением Ñлучаев, когда указано иное, Ñодержимое Ñтой вики предоÑтавлÑетÑÑ Ð½Ð° уÑловиÑÑ… Ñледующей лицензии:';
+$lang['licenseok'] = 'Примечание: Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€ÑƒÑ Ñту Ñтраницу, Ð’Ñ‹ ÑоглашаетеÑÑŒ на иÑпользование вашего вклада на уÑловиÑÑ… Ñледующей лицензии:';
+$lang['searchmedia'] = 'ПоиÑк по имени файла:';
+$lang['searchmedia_in'] = 'ПоиÑк в %s';
+$lang['txt_upload'] = 'Выберите файл Ð´Ð»Ñ Ð·Ð°ÐºÐ°Ñ‡ÐºÐ¸';
+$lang['txt_filename'] = 'Введите Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° в вики (необÑзательно)';
+$lang['txt_overwrt'] = 'ПерезапиÑать ÑущеÑтвующий файл';
+$lang['lockedby'] = 'В данный момент заблокирован';
+$lang['lockexpire'] = 'Блокировка иÑтекает в';
+$lang['willexpire'] = 'Ваша блокировка Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñтой Ñтраницы иÑтекает в течение минуты.\nЧтобы избежать конфликтов и ÑброÑить таймер блокировки, нажмите кнопку проÑмотра.';
+$lang['notsavedyet'] = 'ÐеÑохранённые Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð±ÑƒÐ´ÑƒÑ‚ потерÑны.\nÐ’Ñ‹ дейÑтвительно хотите продолжить?';
+$lang['rssfailed'] = 'Произошла ошибка при получении Ñледующей новоÑтной ленты: ';
+$lang['nothingfound'] = 'Ðичего не найдено.';
+$lang['mediaselect'] = 'Выбор медиа-файла';
+$lang['fileupload'] = 'Закачка медиа-файла';
+$lang['uploadsucc'] = 'Закачка произведена уÑпешно';
+$lang['uploadfail'] = 'Закачка не удалаÑÑŒ. Возможно, проблемы Ñ Ð¿Ñ€Ð°Ð²Ð°Ð¼Ð¸ доÑтупа?';
+$lang['uploadwrong'] = 'Ð’ закачке отказано. Файлы Ñ Ñ‚Ð°ÐºÐ¸Ð¼ раÑширением запрещены. ';
+$lang['uploadexist'] = 'Файл Ñ Ñ‚Ð°ÐºÐ¸Ð¼ именем ÑущеÑтвует. Загрузка не произведена.';
+$lang['uploadbadcontent'] = 'Содержание файла не ÑоответÑтвует раÑширению %s.';
+$lang['uploadspam'] = 'Закачка заблокирована Ñпам-фильтром.';
+$lang['uploadxss'] = 'Закачка заблокирована по ÑоображениÑм безопаÑноÑти.';
+$lang['uploadsize'] = 'Загруженный файл был Ñлишком большой. (макÑ. %s)';
+$lang['deletesucc'] = 'Файл "%s" был удалён.';
+$lang['deletefail'] = 'Ðевозможно удалить файл "%s". Проверьте права доÑтупа к файлу.';
+$lang['mediainuse'] = 'Файл "%s" не был удалён - файл вÑÑ‘ ещё иÑпользуетÑÑ.';
+$lang['namespaces'] = 'ПроÑтранÑтва имён';
+$lang['mediafiles'] = 'ДоÑтупные файлы';
+$lang['js']['searchmedia'] = 'ПоиÑк файлов';
+$lang['js']['keepopen'] = 'Ðе закрывать окно поÑле выбора';
+$lang['js']['hidedetails'] = 'Скрыть детали';
+$lang['js']['nosmblinks'] = 'СÑылка на Ñетевые каталоги Windows работает только из Интернет ЭкÑплорера
+Ðо Ð’Ñ‹ можете Ñкопировать ÑÑылку.';
+$lang['js']['linkwiz'] = 'МаÑтер ÑÑылок';
+$lang['js']['linkto'] = 'СÑылка на:';
+$lang['js']['del_confirm'] = 'Ð’Ñ‹ на Ñамом деле желаете удалить выбранное?';
+$lang['js']['mu_btn'] = 'Загрузить неÑколько файлов одновременно';
+$lang['mediausage'] = 'Ð”Ð»Ñ ÑÑылки на Ñтот файл иÑпользуйте Ñледующий ÑинтакÑиÑ:';
+$lang['mediaview'] = 'ПоÑмотреть иÑходный файл';
+$lang['mediaroot'] = 'корень';
+$lang['mediaupload'] = 'ЗдеÑÑŒ можно загрузить файл в текущий каталог ("проÑтранÑтво имен"). Чтобы Ñоздать подкаталоги, добавьте их к началу имени файла ("Загрузить как"). Имена подкаталогов разделÑÑŽÑ‚ÑÑ Ð´Ð²Ð¾ÐµÑ‚Ð¾Ñ‡Ð¸Ñми. ';
+$lang['mediaextchange'] = 'РаÑширение изменилоÑÑŒ: Ñ .%s на .%s!';
+$lang['reference'] = 'СÑылки длÑ';
+$lang['ref_inuse'] = 'Этот файл не может быть удалён, так как он иÑпользуетÑÑ Ñледующими Ñтраницами:';
+$lang['ref_hidden'] = 'Ðекоторые ÑÑылки находÑÑ‚ÑÑ Ð½Ð° Ñтраницах, на чтение которых у Ð’Ð°Ñ Ð½ÐµÑ‚ прав';
+$lang['hits'] = 'ÑоответÑтвий';
+$lang['quickhits'] = 'СоответÑÑ‚Ð²Ð¸Ñ Ð² названиÑÑ… Ñтраниц';
+$lang['toc'] = 'Содержание';
+$lang['current'] = 'текущий';
+$lang['yours'] = 'Ваша верÑиÑ';
+$lang['diff'] = 'показать Ð¾Ñ‚Ð»Ð¸Ñ‡Ð¸Ñ Ð¾Ñ‚ текущей верÑии';
+$lang['diff2'] = 'Показать Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñƒ ревизиÑми ';
+$lang['line'] = 'Строка';
+$lang['breadcrumb'] = 'Ð’Ñ‹ поÑетили';
+$lang['youarehere'] = 'Ð’Ñ‹ находитеÑÑŒ здеÑÑŒ';
+$lang['lastmod'] = 'ПоÑледние изменениÑ';
+$lang['by'] = ' От';
+$lang['deleted'] = 'удалено';
+$lang['created'] = 'Ñоздано';
+$lang['restored'] = 'ÑÑ‚Ð°Ñ€Ð°Ñ Ñ€ÐµÐ²Ð¸Ð·Ð¸Ñ Ð²Ð¾ÑÑтановлена';
+$lang['external_edit'] = 'внешнее изменение';
+$lang['summary'] = 'Сводка изменений';
+$lang['noflash'] = 'Ð”Ð»Ñ Ð¿Ñ€Ð¾Ñмотра Ñтого Ñодержимого требуетÑÑ <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a>.';
+$lang['download'] = 'Скачать код';
+$lang['mail_newpage'] = 'Ñтраница добавлена:';
+$lang['mail_changed'] = 'Ñтраница изменена:';
+$lang['mail_new_user'] = 'новый пользователь:';
+$lang['mail_upload'] = 'файл закачан:';
+$lang['qb_bold'] = 'Полужирный шрифт';
+$lang['qb_italic'] = 'КурÑивный шрифт';
+$lang['qb_underl'] = 'Подчеркивание';
+$lang['qb_code'] = 'ТекÑÑ‚ кода';
+$lang['qb_strike'] = 'Зачёркнутый шрифт';
+$lang['qb_h1'] = 'Заголовок ÑƒÑ€Ð¾Ð²Ð½Ñ 1';
+$lang['qb_h2'] = 'Заголовок ÑƒÑ€Ð¾Ð²Ð½Ñ 2';
+$lang['qb_h3'] = 'Заголовок ÑƒÑ€Ð¾Ð²Ð½Ñ 3';
+$lang['qb_h4'] = 'Заголовок ÑƒÑ€Ð¾Ð²Ð½Ñ 4';
+$lang['qb_h5'] = 'Заголовок ÑƒÑ€Ð¾Ð²Ð½Ñ 5';
+$lang['qb_h'] = 'Заголовок';
+$lang['qb_hs'] = 'Выбор заголовка';
+$lang['qb_hplus'] = 'Заголовок более выÑокого уровнÑ';
+$lang['qb_hminus'] = 'Заголовок более низкого ÑƒÑ€Ð¾Ð²Ð½Ñ (подзаголовок)';
+$lang['qb_hequal'] = 'Заголовок текущего уровнÑ';
+$lang['qb_link'] = 'ВнутреннÑÑ ÑÑылка';
+$lang['qb_extlink'] = 'ВнешнÑÑ ÑÑылка';
+$lang['qb_hr'] = 'Разделитель';
+$lang['qb_ol'] = 'Элемент нумерованного ÑпиÑка';
+$lang['qb_ul'] = 'Элемент ненумерованного ÑпиÑка';
+$lang['qb_media'] = 'Добавить картинки и другие файлы';
+$lang['qb_sig'] = 'Ð’Ñтавить подпиÑÑŒ';
+$lang['qb_smileys'] = 'Смайлики';
+$lang['qb_chars'] = 'Специальные Ñимволы';
+$lang['upperns'] = 'Перейти в родительÑкое проÑтранÑтво имен';
+$lang['admin_register'] = 'Добавить пользователÑ';
+$lang['metaedit'] = 'Править метаданные';
+$lang['metasaveerr'] = 'Ошибка запиÑи метаданных';
+$lang['metasaveok'] = 'Метаданные Ñохранены';
+$lang['img_backto'] = 'ВернутьÑÑ Ðº';
+$lang['img_title'] = 'Ðазвание';
+$lang['img_caption'] = 'ПодпиÑÑŒ';
+$lang['img_date'] = 'Дата';
+$lang['img_fname'] = 'Ð˜Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°';
+$lang['img_fsize'] = 'Размер';
+$lang['img_artist'] = 'Фотограф';
+$lang['img_copyr'] = 'ÐвторÑкие права';
+$lang['img_format'] = 'Формат';
+$lang['img_camera'] = 'Модель';
+$lang['img_keywords'] = 'Ключевые Ñлова';
+$lang['subscribe_success'] = '%s добавлен(а) в ÑпиÑок раÑÑылки Ð´Ð»Ñ Ñтраницы %s';
+$lang['subscribe_error'] = 'Ошибка Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ %s в ÑпиÑок раÑÑылки Ð´Ð»Ñ Ñтраницы %s';
+$lang['subscribe_noaddress'] = 'Ð’ вашем профиле не указан Ð°Ð´Ñ€ÐµÑ Ñлектронной почты. Ввиду Ñтого вы не можете подпиÑыватьÑÑ Ð½Ð° раÑÑылки.';
+$lang['unsubscribe_success'] = '%s удален(а) из ÑпиÑка раÑÑылки Ð´Ð»Ñ Ñтраницы %s';
+$lang['unsubscribe_error'] = 'Ошибка ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ %s из ÑпиÑка раÑÑылки Ð´Ð»Ñ Ñтраницы %s';
+$lang['authmodfailed'] = 'ÐÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ð°ÑƒÑ‚ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ð¸ пользователÑ. ПожалуйÑта, Ñообщите об Ñтом вашему админиÑтратору вики.';
+$lang['authtempfail'] = 'ÐÑƒÑ‚ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÐµÐ¹ временно недоÑтупна. ЕÑли проблема продолжаетÑÑ ÐºÐ°ÐºÐ¾Ðµ-то времÑ, пожалуйÑта, Ñообщите об Ñтом вашему админиÑтратору вики.';
+$lang['i_chooselang'] = 'Выберите Ваш Ñзык/Language';
+$lang['i_installer'] = 'УÑтановка DokuWiki';
+$lang['i_wikiname'] = 'Ðазвание вики';
+$lang['i_enableacl'] = 'Разрешить ограничение прав доÑтупа (рекомендуетÑÑ)';
+$lang['i_superuser'] = 'Суперюзер';
+$lang['i_problems'] = 'Программа уÑтановки ÑтолкнулаÑÑŒ Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð°Ð¼Ð¸, перечиÑленными ниже. Чтобы продолжить, вам необходимо их уÑтранить. ';
+$lang['i_modified'] = 'Из Ñоображений безопаÑноÑти Ñта программа запуÑкаетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ на новой, неизменённой уÑтановке DokuWiki.
+ Вам нужно либо заново раÑпаковать Ñкачанный пакет уÑтановки, либо обратитьÑÑ Ðº полной
+ <a href="http://dokuwiki.org/install">инÑтрукции по уÑтановке DokuWiki</a>';
+$lang['i_funcna'] = 'Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ PHP <code>%s</code> недоÑтупна. Может быть, она по какой-то причине заблокирована Вашим хоÑтингом?';
+$lang['i_phpver'] = 'Ваша верÑÐ¸Ñ PHP (<code>%s</code>) ниже требуемой (<code>%s</code>). Вам необходимо обновить уÑтановленную верÑию PHP.';
+$lang['i_permfail'] = '<code>%s</code> недоÑтупна Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи DokuWiki. Вам необходимо иÑправить ÑиÑтемные права доÑтупа Ð´Ð»Ñ Ñтой директории!';
+$lang['i_confexists'] = '<code>%s</code> уже ÑущеÑтвует';
+$lang['i_writeerr'] = 'Ðе удалоÑÑŒ Ñоздать <code>%s</code>. Вам необходимо проверить ÑиÑтемные права доÑтупа к файлу/директориÑм и Ñоздать файл вручную. ';
+$lang['i_badhash'] = 'dokuwiki.php не раÑпознана или изменена (Ñ…Ñш=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - недопуÑтимое или пуÑтое значение';
+$lang['i_success'] = 'ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ð¿Ñ€Ð¾ÑˆÐ»Ð° уÑпешно. Теперь вы можете удалить файл install.php. Переходите к
+ <a href="doku.php">вашей новой DokuWiki</a>.';
+$lang['i_failure'] = 'При запиÑи в файлы конфигурации были обнаружены ошибки. Возможно, вам придетÑÑ Ð¸Ñправить их вручную, прежде чем вы Ñможете иÑпользовать <a href="doku.php">Вашу новую DokuWiki</a>.';
+$lang['i_policy'] = 'ИÑÑ…Ð¾Ð´Ð½Ð°Ñ Ð¿Ð¾Ð»Ð¸Ñ‚Ð¸ÐºÐ° прав доÑтупа';
+$lang['i_pol0'] = 'ÐžÑ‚ÐºÑ€Ñ‹Ñ‚Ð°Ñ Ð²Ð¸ÐºÐ¸ (чтение, запиÑÑŒ, закачка файлов Ð´Ð»Ñ Ð²Ñех)';
+$lang['i_pol1'] = 'ОбщедоÑÑ‚ÑƒÐ¿Ð½Ð°Ñ Ð²Ð¸ÐºÐ¸ (чтение Ð´Ð»Ñ Ð²Ñех, запиÑÑŒ и загрузка файлов Ð´Ð»Ñ Ð·Ð°Ñ€ÐµÐ³Ð¸Ñтрированных пользователей)';
+$lang['i_pol2'] = 'Ð—Ð°ÐºÑ€Ñ‹Ñ‚Ð°Ñ Ð²Ð¸ÐºÐ¸ (чтение, запиÑÑŒ и загрузка файлов только Ð´Ð»Ñ Ð·Ð°Ñ€ÐµÐ³Ð¸Ñтрированных пользователей)';
+$lang['i_retry'] = 'Повторить попытку';
+$lang['mu_intro'] = 'ЗдеÑÑŒ Ð’Ñ‹ можете загрузить неÑколько файлов Ñразу. Кликните на "обзор", чтобы добавить их в ÑпиÑок. Ðажмите "загрузить" когда будете готовы.';
+$lang['mu_gridname'] = 'Ð˜Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°';
+$lang['mu_gridsize'] = 'Размер';
+$lang['mu_gridstat'] = 'СтатуÑ';
+$lang['mu_namespace'] = 'ПроÑтранÑтво имён';
+$lang['mu_browse'] = 'Обзор';
+$lang['mu_toobig'] = 'Ñлишком большой';
+$lang['mu_ready'] = 'готово к загрузке';
+$lang['mu_done'] = 'завершено';
+$lang['mu_fail'] = 'провалено';
+$lang['mu_authfail'] = 'иÑтекло Ð²Ñ€ÐµÐ¼Ñ ÑеÑÑии';
+$lang['mu_progress'] = '@PCT@% загружено';
+$lang['mu_filetypes'] = 'ДопуÑтимые типы файлов';
+$lang['mu_info'] = 'файлов загружено.';
+$lang['mu_lasterr'] = 'ПоÑледнÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ°:';
+$lang['recent_global'] = 'Ð’Ñ‹ проÑматриваете Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² проÑтранÑтве имён <b>%s</b>. Ð’Ñ‹ можете также <a href="%s">проÑмотреть недавние Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð½Ð° вÑей вики</a>.';
+$lang['years'] = '%d лет назад';
+$lang['months'] = '%d меÑÑц(ев) назад';
+$lang['weeks'] = '%d недель назад';
+$lang['days'] = '%d дней назад';
+$lang['hours'] = '%d чаÑ(ов) назад';
+$lang['minutes'] = '%d минут назад';
+$lang['seconds'] = '%d Ñекунд назад';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/locked.txt
new file mode 100644
index 000000000..3e868ba9a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/locked.txt
@@ -0,0 +1,3 @@
+====== Страница заблокирована ======
+
+Эта Ñтраница в данный момент заблокирована Ð´Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼ пользователем. Вам придётÑÑ Ð¿Ð¾Ð´Ð¾Ð¶Ð´Ð°Ñ‚ÑŒ, пока Ñтот пользователь закончит редактирование или иÑтечёт Ð²Ñ€ÐµÐ¼Ñ Ð±Ð»Ð¾ÐºÐ¸Ñ€Ð¾Ð²ÐºÐ¸.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/login.txt
new file mode 100644
index 000000000..967131874
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/login.txt
@@ -0,0 +1,4 @@
+====== ÐÐ²Ñ‚Ð¾Ñ€Ð¸Ð·Ð°Ñ†Ð¸Ñ ======
+
+Ð’ данный момент Ð’Ñ‹ не в ÑиÑтеме. ÐвторизируйтеÑÑŒ при помощи Ñледующей формы. //Замечание:// Ð´Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ у Ð²Ð°Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ‹ быть включены cookies.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/mailtext.txt
new file mode 100644
index 000000000..596fd8275
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/mailtext.txt
@@ -0,0 +1,17 @@
+Ð’ вашей DokuWiki была добавлена или изменена Ñтраница. ПодробноÑти:
+
+Дата : @DATE@
+Браузер : @BROWSER@
+IP-Ð°Ð´Ñ€ÐµÑ : @IPADDRESS@
+ХоÑÑ‚ : @HOSTNAME@
+Ð¡Ñ‚Ð°Ñ€Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ : @OLDPAGE@
+ÐÐ¾Ð²Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ : @NEWPAGE@
+Сводка изменений : @SUMMARY@
+Пользователь : @USER@
+
+@DIFF@
+
+
+--
+Это пиÑьмо было Ñгенерировано DokuWiki по адреÑу
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/newpage.txt
new file mode 100644
index 000000000..042941310
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/newpage.txt
@@ -0,0 +1,3 @@
+====== Эта Ñтраница ещё не ÑущеÑтвует ======
+
+Ð’Ñ‹ перешли по ÑÑылке на тему, Ð´Ð»Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ð¹ ещё не Ñоздана Ñтраница. ЕÑли позволÑÑŽÑ‚ Ваши права доÑтупа, Ð’Ñ‹ можете Ñоздать её, нажав на кнопку "Создать Ñтраницу".
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/norev.txt
new file mode 100644
index 000000000..db36a0ddd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/norev.txt
@@ -0,0 +1,4 @@
+====== Такой верÑии не ÑущеÑтвует ======
+
+Ð£ÐºÐ°Ð·Ð°Ð½Ð½Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ Ñтраницы не ÑущеÑтвует. Ðажмите на кнопку ''ИÑÑ‚Ð¾Ñ€Ð¸Ñ Ñтраницы'', чтобы получить ÑпиÑок доÑтупных предыдущих верÑий Ñтого документа.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/preview.txt
new file mode 100644
index 000000000..a3f37843d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/preview.txt
@@ -0,0 +1,4 @@
+====== ПроÑмотр ======
+
+ЗдеÑÑŒ показано, как Ваш текÑÑ‚ будет выглÑдеть. Внимание: текÑÑ‚ ещё **не Ñохранён!**
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/pwconfirm.txt
new file mode 100644
index 000000000..89c84791e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/pwconfirm.txt
@@ -0,0 +1,13 @@
+ЗдравÑтвуйте, @FULLNAME@!
+
+Кто-то запроÑил новый пароль Ð´Ð»Ñ Ð²Ñ…Ð¾Ð´Ð° в @TITLE@ по адреÑу @DOKUWIKIURL@
+
+ЕÑли Ð’Ñ‹ не запрашивали новый пароль, проÑто проигнорируйте Ñтот e-mail.
+
+Ð”Ð»Ñ Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ, что Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð±Ñ‹Ð» дейÑтвительно Ñделан Вами, пожалуйÑта, перейдите по Ñледующей ÑÑылке.
+
+@CONFIRM@
+
+--
+Это Ñообщение было Ñгенерировано DokuWiki по адреÑу
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/read.txt
new file mode 100644
index 000000000..ed2754ac7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/read.txt
@@ -0,0 +1,2 @@
+Эта Ñтраница — только Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ. Ð’Ñ‹ можете поÑмотреть иÑходный текÑÑ‚, но не можете его изменить. Сообщите админиÑтратору, еÑли Ñчитаете, что Ñто неправильно.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/recent.txt
new file mode 100644
index 000000000..aa088c734
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/recent.txt
@@ -0,0 +1,5 @@
+====== Ðедавние Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ======
+
+Эти Ñтраницы были изменены недавно.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/register.txt
new file mode 100644
index 000000000..23ed33656
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/register.txt
@@ -0,0 +1,3 @@
+====== РегиÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ ======
+
+Ð”Ð»Ñ Ñ€ÐµÐ³Ð¸Ñтрации в вики заполните вÑе Ð¿Ð¾Ð»Ñ Ð½Ð¸Ð¶Ðµ. Обратите внимание на **правильноÑÑ‚ÑŒ адреÑа е-мÑйл** - туда будет выÑлан пароль в том Ñлучае, еÑли Ð’Ð°Ñ Ð½Ðµ проÑÑÑ‚ ÑамоÑтоÑтельно ввеÑти его здеÑÑŒ. Логин должен удовлетворÑÑ‚ÑŒ ограничениÑм Ð´Ð»Ñ [[doku>pagename|идентификатора Ñтраницы]].
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/registermail.txt
new file mode 100644
index 000000000..615cff543
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/registermail.txt
@@ -0,0 +1,14 @@
+Был зарегиÑтрирован новый пользователь. ПодробноÑти:
+
+Логин : @NEWUSER@
+Полное Ð¸Ð¼Ñ : @NEWNAME@
+E-mail : @NEWEMAIL@
+
+Дата : @DATE@
+Браузер : @BROWSER@
+ÐÐ´Ñ€ÐµÑ IP : @IPADDRESS@
+ХоÑÑ‚ : @HOSTNAME@
+
+--
+Это Ñообщение было Ñгенерировано DokuWiki по адреÑу
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/resendpwd.txt
new file mode 100644
index 000000000..9bcd98dea
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/resendpwd.txt
@@ -0,0 +1,3 @@
+====== ПоÑлать новый пароль ======
+
+Ð”Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð²Ð²ÐµÐ´Ð¸Ñ‚Ðµ требуемые данные ниже. Ваш новый пароль будет поÑлан по адреÑу е-мÑйл, зарегиÑтрированному на Ваше имÑ. Указанное ниже Ð¸Ð¼Ñ Ð´Ð¾Ð»Ð¶Ð½Ð¾ быть Вашим логином в Ñтой вики.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/revisions.txt
new file mode 100644
index 000000000..4341969a3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/revisions.txt
@@ -0,0 +1,3 @@
+====== ИÑÑ‚Ð¾Ñ€Ð¸Ñ Ñтраницы ======
+
+Перед Вами — иÑÑ‚Ð¾Ñ€Ð¸Ñ Ð¿Ñ€Ð°Ð²Ð¾Ðº текущего документа. Чтобы вернутьÑÑ Ðº одной из предыдущих верÑий, выберите нужную, нажмите ''Править Ñтраницу'' и Ñохраните.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/searchpage.txt
new file mode 100644
index 000000000..33cac358a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/searchpage.txt
@@ -0,0 +1,5 @@
+====== ПоиÑк ======
+
+Перед Вами — результаты поиÑка. ЕÑли Ð’Ñ‹ не нашли то, что иÑкали, Ð’Ñ‹ можете Ñоздать новую Ñтраницу Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼, Ñовпадающим Ñ Ð·Ð°Ð¿Ñ€Ð¾Ñом. Чтобы Ñделать Ñто, проÑто нажмите на кнопку ''Создать Ñтраницу''.
+
+===== Результаты ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/showrev.txt
new file mode 100644
index 000000000..acb814e17
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/showrev.txt
@@ -0,0 +1,2 @@
+**Это — ÑÑ‚Ð°Ñ€Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/stopwords.txt
new file mode 100644
index 000000000..a6df13902
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/stopwords.txt
@@ -0,0 +1,93 @@
+# This is a list of words the indexer ignores, one word per line
+# When you edit this file be sure to use UNIX line endings (single newline)
+# No need to include words shorter than 3 chars - these are ignored anyway
+более
+больше
+будет
+будто
+была
+было
+быть
+вдруг
+ведь
+впрочем
+вÑегда
+вÑех
+вÑего
+говорил
+говорила
+даже
+другой
+другаÑ
+еÑли
+еÑÑ‚ÑŒ
+жизнь
+жизнÑ
+зачем
+здеÑÑŒ
+иногда
+кажетÑÑ
+какаÑ
+какой
+какое
+когда
+конечно
+лучше
+между
+менее
+меньше
+менÑ
+много
+может
+можно
+надо
+наконец
+него
+нельзÑ
+нибудь
+никогда
+ничего
+нужно
+один
+одна
+опÑÑ‚ÑŒ
+перед
+поÑле
+потом
+потому
+почти
+разве
+Ñвое
+Ñвоё
+Ñвой
+Ñвою
+ÑвоÑ
+Ñебе
+ÑебÑ
+ÑегоднÑ
+ÑейчаÑ
+Ñказал
+Ñказала
+Ñказать
+ÑовÑем
+такаÑ
+такое
+такой
+тебÑ
+теперь
+тогда
+того
+тоже
+только
+тому
+хорошо
+хоть
+чего
+через
+чтоб
+чтобы
+чуть
+Ñтого
+Ñтой
+Ñтим
+Ñтот
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/subscribermail.txt
new file mode 100644
index 000000000..1a846ac32
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/subscribermail.txt
@@ -0,0 +1,17 @@
+ЗдравÑтвуйте!
+
+Страница @PAGE@ в вики @TITLE@ была изменена.
+Ðиже предÑтавлены изменениÑ:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Чтобы отпиÑатьÑÑ Ð¾Ñ‚ изменений Ñтой Ñтраницы,
+войдите под Ñвоим именем в Вики по адреÑу
+@DOKUWIKIURL@, перейдите на Ñтраницу
+@NEWPAGE@ и нажмите 'ОтпиÑатьÑÑ'.
+
+--
+Это Ñообщение было Ñгенерировано DokuWiki по адреÑу
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/updateprofile.txt
new file mode 100644
index 000000000..136184467
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/updateprofile.txt
@@ -0,0 +1,5 @@
+====== Обновить профиль ======
+
+Ðеобходимо заполнить только те полÑ, которые Ð’Ñ‹ хотите изменить. Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð½Ðµ может быть изменено.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/uploadmail.txt
new file mode 100644
index 000000000..07dbf186d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/uploadmail.txt
@@ -0,0 +1,14 @@
+Ð’ вашу DokuWiki был закачан файл. ÐŸÐ¾Ð´Ñ€Ð¾Ð±Ð½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ:
+
+Файл : @MEDIA@
+Дата : @DATE@
+Браузер : @BROWSER@
+ÐÐ´Ñ€ÐµÑ IP : @IPADDRESS@
+ХоÑÑ‚ : @HOSTNAME@
+Размер : @SIZE@
+Тип MIME : @MIME@
+Пользователь: @USER@
+
+--
+Это пиÑьмо было Ñгенерировано DokuWiki по адреÑу
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/wordblock.txt
new file mode 100644
index 000000000..09c663fb3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/wordblock.txt
@@ -0,0 +1,3 @@
+====== СПÐÐœ заблокирован ======
+
+Ваши Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ **не были** Ñохранены, так как они Ñодержат одно или более запрещенных Ñлов. ЕÑли Ð’Ñ‹ пыталиÑÑŒ добавить Ñпам в Вики -- ай-Ñй-Ñй! ЕÑли Ð’Ñ‹ Ñчитаете, что Ñто какаÑ-то ошибка, обратитеÑÑŒ к админиÑтратору вики.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/admin.txt
new file mode 100644
index 000000000..039da2ae2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/admin.txt
@@ -0,0 +1,5 @@
+====== Administrácia ======
+
+Nižšie môžte nájsť zoznam administratívnych úloch, ktoré môžte vykonávať v DokuWiki.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/backlinks.txt
new file mode 100644
index 000000000..b3217d545
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/backlinks.txt
@@ -0,0 +1,3 @@
+====== Spätné odkazy ======
+
+Tu je zoznam stránok, ktoré pravdepodobne odkazujú na aktuálnu stránku.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/conflict.txt
new file mode 100644
index 000000000..d3cd0f590
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/conflict.txt
@@ -0,0 +1,5 @@
+====== Existuje novšia verzia ======
+
+Existuje novÅ¡ia verzia práve upravovaného dokumentu. To se stáva, keÄ niekto iný zmenil dokument, ktorý práve upravujete.
+
+Prehliadnite si nižšie uvedené rozdiely, prípadne rozdiely z obidvoch verzií ruÄne spojte dohromady a rozhodnite sa, ktorú verziu uchovaÅ¥. Ak zvolíte ''UložiÅ¥', bude uložená vaÅ¡a verzia. V opaÄnom prípade stlaÄte ''Storno'' pre uchovanie pôvodnej verzie.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/denied.txt
new file mode 100644
index 000000000..6f673c7d6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/denied.txt
@@ -0,0 +1,3 @@
+====== Nepovolená akcia ======
+
+PrepáÄte, ale nemáte dostatoÄné oprávnenie k tejto Äinnosti. Možno ste se zabudli prihlásiÅ¥?
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/diff.txt
new file mode 100644
index 000000000..0e29e7f7b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/diff.txt
@@ -0,0 +1,4 @@
+====== Rozdiely ======
+
+Tu môžete vidieť rozdiely medzi vybranou verziou a aktuálnou verzou danej stránky.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/draft.txt
new file mode 100644
index 000000000..7e6776deb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/draft.txt
@@ -0,0 +1,6 @@
+====== Nájdený súbor konceptu ======
+
+VaÅ¡a posledná editácia tejto stránky nebola ukonÄená korektne. Dokuwiki automaticky uložila poÄas vaÅ¡ej práce koncept a ten môžete teraz použiÅ¥ pre pokraÄovanie editácie. Nižšie môžete vidieÅ¥ dáta, ktoré boli uložené.
+
+Prosím, rozhodnite sa, Äi chcete //obnoviÅ¥// vaÅ¡u poslednú editáciu, //zmazaÅ¥// automaticky uložený koncept, alebo //stornovaÅ¥// proces editácie.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/edit.txt
new file mode 100644
index 000000000..1adf4e16f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/edit.txt
@@ -0,0 +1 @@
+Upravte stránku a stlaÄte ''UložiÅ¥''. Na stránke [[wiki:syntax]] sa môžete dozvedieÅ¥ viac o Wiki syntaxi. Prosím upravujte stránky len pokiaľ ich môžete **vylepÅ¡it**. Pokiaľ si chcete nieÄo len vyskúšaÅ¥, použite [[playground:playground| pieskovisko]].
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/editrev.txt
new file mode 100644
index 000000000..6a837c244
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/editrev.txt
@@ -0,0 +1 @@
+**Máte naÄítanú starÅ¡iu verziu dokumentu!** Pokiaľ ju uložíte, vytvoríte tým novú aktuálnú verziu.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/index.txt
new file mode 100644
index 000000000..7b26d42ce
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/index.txt
@@ -0,0 +1,3 @@
+====== Index ======
+
+Tu je k dispozícii index všetkých dostupných stránok Zoradených podľa [[doku>namespaces|menných priestorov]].
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/install.html
new file mode 100644
index 000000000..c45b82005
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/install.html
@@ -0,0 +1,23 @@
+<p>Táto stránka sprevádza prvou inštaláciou a konfiguráciou
+<a href="http://dokuwiki.org">Dokuwiki</a>. Viac informácií o tomto Inštalátore je dostupných na jeho
+<a href="http://dokuwiki.org/installer">dokumentaÄnej stránke</a>.</p>
+
+<p>DokuWiki používa bežné súbory pre ukladanie wiki stránok a iných informácií
+priradených k týmto stránkam (napr. obrázkov, vyhľadávacích indexov, starých
+revízií). Ak chcete úspešne narábať s DokuWiki, <strong>musí</strong>
+mať práva pre zápis do adresárov, kde sa ukladajú tieto súbory. Tento Inštalátor
+nie je schopný nastaviť prístupové práva pre adresáre. Je potrebné to urobiť
+priamo cez príkazový riadok, alebo ak využívate webhosting, cez FTP, alebo vaše
+webhostingové administraÄné rozhranie.</p>
+
+<p>Tento Inštalátor nastaví <acronym title="access control list - zoznam prístupových práv">ACL</acronym>
+konfiguráciu vašej Dokuwiki. Umožňuje vytvoriť administrátorské konto
+s prístupom do administraÄného menu s možnosÅ¥ou inÅ¡talácie pluginov, správy
+užívateľov, správy prístupových práv k wiki stránkam a zmeny konfiguraÄných
+nastavení. Nie je nevyhnutné pre používanie Dokuwiki, ale umožňuje to ľahšie
+spravovať Dokuwiki.</p>
+
+<p>Skúsení užívatelia, alebo užívatelia so špeciálnymi požiadavkami môžu použiť
+tieto odkazy pre bližšie informácie týkajúce sa
+<a href="http://dokuwiki.org/install">inÅ¡talaÄných pokynov</a>
+a <a href="http://dokuwiki.org/config">konfiguraÄných nastavení</a>.</p>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/lang.php
new file mode 100644
index 000000000..2d9c8efea
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/lang.php
@@ -0,0 +1,227 @@
+<?php
+/**
+ * Slovak language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Ondrej Vegh <ov@vsieti.sk> with help of the scholars from Zdruzena stredna skola polygraficka in Bratislava
+ * @author Michal Mesko <michal.mesko@gmail.com>
+ * @author exusik@gmail.com
+ * @author Martin Michalek <michalek.dev@gmail.com>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '„';
+$lang['doublequoteclosing'] = '“';
+$lang['singlequoteopening'] = '‚';
+$lang['singlequoteclosing'] = '‘';
+$lang['apostrophe'] = '’';
+$lang['btn_edit'] = 'Upraviť stránku';
+$lang['btn_source'] = 'Zobraziť zdroj stránky';
+$lang['btn_show'] = 'Zobraziť stránku';
+$lang['btn_create'] = 'Vytvoriť stránku';
+$lang['btn_search'] = 'Hľadať';
+$lang['btn_save'] = 'Uložiť';
+$lang['btn_preview'] = 'Náhľad';
+$lang['btn_top'] = 'Hore';
+$lang['btn_newer'] = '<< novšie';
+$lang['btn_older'] = 'staršie >>';
+$lang['btn_revs'] = 'Staršia verzia';
+$lang['btn_recent'] = 'Posledné úpravy';
+$lang['btn_upload'] = 'Nahrať';
+$lang['btn_cancel'] = 'Storno';
+$lang['btn_index'] = 'Index';
+$lang['btn_secedit'] = 'Upraviť';
+$lang['btn_login'] = 'Prihlásiť sa';
+$lang['btn_logout'] = 'Odhlásiť sa';
+$lang['btn_admin'] = 'Admin';
+$lang['btn_update'] = 'Aktualizovať';
+$lang['btn_delete'] = 'Zmazať';
+$lang['btn_back'] = 'Späť';
+$lang['btn_backlink'] = 'Spätné linky';
+$lang['btn_backtomedia'] = 'Späť na výber média';
+$lang['btn_subscribe'] = 'Posielať zmeny';
+$lang['btn_unsubscribe'] = 'Neposielať zmeny';
+$lang['btn_subscribens'] = 'Posielať zmeny menných priestorov';
+$lang['btn_unsubscribens'] = 'Neposielať zmeny menných priestorov';
+$lang['btn_profile'] = 'Aktualizovať profil';
+$lang['btn_reset'] = 'Zrušiť';
+$lang['btn_resendpwd'] = 'Poslať nové heslo';
+$lang['btn_draft'] = 'Upraviť koncept';
+$lang['btn_recover'] = 'Obnoviť koncept';
+$lang['btn_draftdel'] = 'Zmazať koncept';
+$lang['loggedinas'] = 'Prihlásený(á) ako';
+$lang['user'] = 'Užívateľské meno';
+$lang['pass'] = 'Heslo';
+$lang['newpass'] = 'Nové heslo';
+$lang['oldpass'] = 'PotvrÄ aktuálne heslo';
+$lang['passchk'] = 'EÅ¡te raz znovu';
+$lang['remember'] = 'Zapamätaj si ma';
+$lang['fullname'] = 'Celé meno';
+$lang['email'] = 'E-Mail';
+$lang['register'] = 'Registrovať';
+$lang['profile'] = 'Užívateľský profil';
+$lang['badlogin'] = 'Zadané užívateľské meno a heslo nie je správne.';
+$lang['minoredit'] = 'Menšie zmeny';
+$lang['draftdate'] = 'Koncept automaticky uložený';
+$lang['nosecedit'] = 'Skránka bola medziÄasom zmenená, informácie o sekcii sú zastaralé a z tohto dôvodu bola nahraná celá stránka.';
+$lang['regmissing'] = 'Musíte vyplniť všetky údaje.';
+$lang['reguexists'] = 'Užívateľ s rovnakým menom je už zaregistrovaný.';
+$lang['regsuccess'] = 'Užívateľský úÄet bol vytvorený a heslo zaslané mailom.';
+$lang['regsuccess2'] = 'Užívateľský úÄet bol vytvorený.';
+$lang['regmailfail'] = 'Zdá sa, že nastala chyba pri posielaní mailu s heslom. Skúste kontaktovať správcu.';
+$lang['regbadmail'] = 'Zadaná mailová adresa nie je platná. Pokiaľ si myslíte, že to je zle, skúste kontaktovať správcu.';
+$lang['regbadpass'] = 'Dve zadané heslá nie sú rovnaké, skúste prosím znovu.';
+$lang['regpwmail'] = 'Vaše heslo do systému DokuWiki';
+$lang['reghere'] = 'Nemáte uživateľský úÄet? Vytvorte si ho';
+$lang['profna'] = 'Toto wiki nepodporuje zmenu profilu';
+$lang['profnochange'] = 'Žiadne zmeny, nie je Äo robiÅ¥.';
+$lang['profnoempty'] = 'Prázdne meno, alebo e-mailová adresa nie sú povolené.';
+$lang['profchanged'] = 'Užívateľský úÄet úspeÅ¡ne zmenený.';
+$lang['pwdforget'] = 'Zabudli ste heslo? Získajte nové!';
+$lang['resendna'] = 'Toto wiki nepodporuje znovuposielanie hesla.';
+$lang['resendpwd'] = 'Pošli nové heslo pre';
+$lang['resendpwdmissing'] = 'PrepáÄte, musíte vyplniÅ¥ vÅ¡etky polia.';
+$lang['resendpwdnouser'] = 'PrepáÄte, nemôžeme nájsÅ¥ zadaného užívateľa v databáze.';
+$lang['resendpwdbadauth'] = 'PrepáÄte, tento autorizaÄný kód nie je platný. Uistite sa, Äi ste použili celý autorizaÄný odkaz.';
+$lang['resendpwdconfirm'] = 'AutorizaÄný odkaz bol zaslaný na e-mail.';
+$lang['resendpwdsuccess'] = 'Vaše nové heslo bolo zaslané na e-mail.';
+$lang['license'] = 'Ak nie je uvedené inak, obsah tejto wiki je uverejnený pod nasledujúcou licenciou:';
+$lang['licenseok'] = 'Poznámka: Zmenou tejto stránky súhlasíte s uverejnením obsahu pod nasledujúcou licenciou:';
+$lang['txt_upload'] = 'Vyberte súbor ako prílohu';
+$lang['txt_filename'] = 'Wiki meno (volitelné)';
+$lang['txt_overwrt'] = 'Prepísať existujúci súbor';
+$lang['lockedby'] = 'Práve zamknuté:';
+$lang['lockexpire'] = 'Zámok vyprší:';
+$lang['willexpire'] = 'Váš zámok pre editáciu za chvílu vyprší.\nAby ste prediÅ¡li konfliktom, stlaÄte tlaÄítko Náhľad a zámok sa predĺži.';
+$lang['notsavedyet'] = 'Neuložené zmeny budú stratené.\nChcete naozaj pokraÄovaÅ¥?';
+$lang['rssfailed'] = 'Nastala chyba pri vytváraní tohto RSS: ';
+$lang['nothingfound'] = 'NiÄ nenájdené.';
+$lang['mediaselect'] = 'Výber dokumentu';
+$lang['fileupload'] = 'Nahrávanie dokumentu';
+$lang['uploadsucc'] = 'Prenos prebehol v poriadku';
+$lang['uploadfail'] = 'Chyba pri nahrávaní. Možno kvôli zle nastaveným právam?';
+$lang['uploadwrong'] = 'Prenos súboru s takouto príponou nie je dovolený.';
+$lang['uploadexist'] = 'Súbor skutoÄne existuje. Nie je Äo robiÅ¥.';
+$lang['uploadbadcontent'] = 'Nahraný obsah sa nezhoduje s príponou súboru %s.';
+$lang['uploadspam'] = 'Nahrávanie bolo zablokované spamovým blacklistom.';
+$lang['uploadxss'] = 'Nahrávanie bolo zablokované kvôli potenciálnemu škodlivému obsahu.';
+$lang['uploadsize'] = 'Nahraný súbor bol príliš veľký. (max %s)';
+$lang['deletesucc'] = 'Súbor "%s" bol zmazaný.';
+$lang['deletefail'] = '"%s" nie je možné zmazať - skontrolujte oprávnenia.';
+$lang['mediainuse'] = 'Súbor "%s" nebol zmazaný - je stále používaný.';
+$lang['namespaces'] = 'Menné priestory';
+$lang['mediafiles'] = 'Dostupné súbory';
+$lang['js']['keepopen'] = 'Po vybraní súboru ponechať okno otvorené';
+$lang['js']['hidedetails'] = 'Skryť detaily';
+$lang['js']['nosmblinks'] = 'Odkazovanie na zdielané prostriedky Windows funguje len v Internet Explorer.
+Aj napriek tomu tento odkaz môžete skopírovat a vložit inde.';
+$lang['js']['mu_btn'] = 'Nahrať viac súborov naraz';
+$lang['mediausage'] = 'Pre odkázanie na súbor použite nasledujúcu syntax:';
+$lang['mediaview'] = 'Zobraziť pôvodný súbor';
+$lang['mediaroot'] = 'root';
+$lang['mediaupload'] = 'NahraÅ¥ súbor do aktuálneho menného priestoru. Pre vytvorenie menného podpriestoru, pridajte jeho názov na zaÄiatok wiki mena (oddelený dvojbodkou)';
+$lang['mediaextchange'] = 'Prípona súboru bola zmenená z .%s na .%s!';
+$lang['reference'] = 'Referencie pre';
+$lang['ref_inuse'] = 'Súbor nemôže byť zmazaný, pretože je stále používaný nasledujúcimi stránkami:';
+$lang['ref_hidden'] = 'Niektoré referencie sú na stránky pre ktoré nemáte právo na Äítanie';
+$lang['hits'] = '- poÄet výskytov';
+$lang['quickhits'] = 'Zodpovedajúce stránky';
+$lang['toc'] = 'Obsah';
+$lang['current'] = 'aktuálne';
+$lang['yours'] = 'Vaša verzia';
+$lang['diff'] = 'zobrazit rozdiely voÄi aktuálnej verzii';
+$lang['diff2'] = 'Ukázať rozdiely medzi vybranými verziami';
+$lang['line'] = 'Riadok';
+$lang['breadcrumb'] = 'História';
+$lang['youarehere'] = 'Nachádzate sa';
+$lang['lastmod'] = 'Posledná úprava';
+$lang['by'] = 'od';
+$lang['deleted'] = 'odstranené';
+$lang['created'] = 'vytvorené';
+$lang['restored'] = 'stará verzia bola obnovena';
+$lang['external_edit'] = 'externá úprava';
+$lang['summary'] = 'Komentár k úpravám';
+$lang['noflash'] = 'Pre zobrazenie tohto obsahu potrebujete <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a>.';
+$lang['mail_newpage'] = 'stránka pridaná:';
+$lang['mail_changed'] = 'stránka zmenená:';
+$lang['mail_new_user'] = 'Nový užívateľ:';
+$lang['mail_upload'] = 'nahraný súbor:';
+$lang['qb_bold'] = 'TuÄné';
+$lang['qb_italic'] = 'Kurzíva';
+$lang['qb_underl'] = 'PodÄiarknutie';
+$lang['qb_code'] = 'Neformátovať (zdrojový kód)';
+$lang['qb_strike'] = 'PreÄiarknutie';
+$lang['qb_h1'] = 'Nadpis 1. úrovne';
+$lang['qb_h2'] = 'Nadpis 2. úrovne';
+$lang['qb_h3'] = 'Nadpis 3. úrovne';
+$lang['qb_h4'] = 'Nadpis 4. úrovne';
+$lang['qb_h5'] = 'Nadpis 5. úrovne';
+$lang['qb_link'] = 'Interný odkaz';
+$lang['qb_extlink'] = 'Externý odkaz';
+$lang['qb_hr'] = 'Horizontálna linka';
+$lang['qb_ol'] = 'Číslovaný zoznam';
+$lang['qb_ul'] = 'NeÄíslovaný zoznam';
+$lang['qb_media'] = 'Vložiť obrázky alebo iné súbory';
+$lang['qb_sig'] = 'Vložiť podpis';
+$lang['qb_smileys'] = 'Smajlíky';
+$lang['qb_chars'] = 'Špeciálne znaky';
+$lang['js']['del_confirm'] = 'Zmazať túto položku?';
+$lang['admin_register'] = 'Pridaj nového užívateľa';
+$lang['metaedit'] = 'Upraviť metainformácie';
+$lang['metasaveerr'] = 'Zápis metainformácií zlyhal';
+$lang['metasaveok'] = 'Metainformácie uložené';
+$lang['img_backto'] = 'Späť na';
+$lang['img_title'] = 'Titul';
+$lang['img_caption'] = 'Popis';
+$lang['img_date'] = 'Dátum';
+$lang['img_fname'] = 'Názov súboru';
+$lang['img_fsize'] = 'Veľkosť';
+$lang['img_artist'] = 'Fotograf';
+$lang['img_copyr'] = 'Kopírovacie práva';
+$lang['img_format'] = 'Formát';
+$lang['img_camera'] = 'Fotoaparát';
+$lang['img_keywords'] = 'KlúÄové slová';
+$lang['subscribe_success'] = 'Pridané %s do zoznamu objednávok pre %s';
+$lang['subscribe_error'] = 'Chyba pri pridaní %s do zoznamu objednávok pre %s';
+$lang['subscribe_noaddress'] = 'Nie je žiadna e-mailová adresa priradená k vašemu menu,nemôžte byť pridaný do zoznamu objednávok';
+$lang['unsubscribe_success'] = 'Odobrané %s zo zoznamu objednávok pre %s';
+$lang['unsubscribe_error'] = 'Chaba pri odobraní %s zo zoznamu objednávok pre %s';
+$lang['authmodfailed'] = 'Užívateľská autentifikácia nie je možná. Prosím informujte správcu tohto systému.';
+$lang['authtempfail'] = 'Užívateľská autentifikácia je doÄasne nedostupná. Ak táto situácia pretrvá, prosím informujte správcu tohto systému.';
+$lang['i_chooselang'] = 'Zvoľte váš jazyk';
+$lang['i_installer'] = 'DokuWiki inštalátor';
+$lang['i_wikiname'] = 'Názov Wiki';
+$lang['i_enableacl'] = 'AktivovaÅ¥ ACL (doporuÄené)';
+$lang['i_superuser'] = 'Správca';
+$lang['i_problems'] = 'InÅ¡talátor narazil na nižšie uvedené problémy. Nemôžete pokraÄovaÅ¥, pokiaľ ich neodstránite.';
+$lang['i_modified'] = 'Z bezpeÄnostných dôvodov bude tento skript fungovaÅ¥ iba s novou, neupravenou inÅ¡taláciou Dokuwiki. Môžete buÄ znovu rozbaliÅ¥ stiahnutý inÅ¡talaÄný balíÄek, alebo preÅ¡tudovaÅ¥ <a href="http://dokuwiki.org/install"> inÅ¡talaÄné inÅ¡trukcie Dokuwiki</a>';
+$lang['i_funcna'] = 'PHP funkcia <code>%s</code> nie je dostupná. Je možné, že ju z urÄitých dôvodov zablokoval váš poskytovateľ webhostingu?';
+$lang['i_phpver'] = 'Vaša verzia PHP <code>%s</code> je nižšia ako požadovaná <code>%s</code>. Potrebujete aktualizovať Vašu instaláciu PHP.';
+$lang['i_permfail'] = '<code>%s</code> nie je zapisovateľný pre DokuWiki. Musíte zmeniť prístupové práva pre tento adresár!';
+$lang['i_confexists'] = '<code>%s</code> už existuje';
+$lang['i_writeerr'] = 'Nie je možné vytvoriť <code>%s</code>. Potrebujete skontrolovať prístupové práva pre adresár/súbor a vytvoriť ho manuálne.';
+$lang['i_badhash'] = 'nerozpoznaný, alebo zmenený súbor dokuwiki.php (hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - bola zadaná nesprávna, alebo žiadna hodnota';
+$lang['i_success'] = 'Konfigurácia bola úspeÅ¡ne ukonÄená. Teraz môžte zmazaÅ¥ súbor install.php. PokraÄujte vo
+ <a href="doku.php">vašej novej DokuWiki</a>.';
+$lang['i_failure'] = 'Pri zápise konfiguraÄného súboru nastali nejaké chyby. Potrebujete ich opraviÅ¥ manuálne pred tým ako budete môcÅ¥ používaÅ¥
+ <a href="doku.php">vašu novú DokuWiki</a>.';
+$lang['i_policy'] = 'PoÄiatoÄná ACL politika';
+$lang['i_pol0'] = 'Otvorená Wiki (Äítanie, zápis a nahrávanie pre každého)';
+$lang['i_pol1'] = 'Verejná Wiki (Äítanie pre každého, zápis a nahrávanie pre registrovaných užívateľov)';
+$lang['i_pol2'] = 'Uzatvorená Wiki (Äítanie, zápis a nahrávanie len pre registrovaných užívateľov)';
+$lang['i_retry'] = 'Skúsiť znovu';
+$lang['mu_intro'] = 'Na tomto mieste môžete nahrávaÅ¥ viac súborov naraz. TlaÄidlom PrehľadávaÅ¥ pridáte súbory do zoznamu. TlaÄidlom NahraÅ¥ vykonáte prenos súborov.';
+$lang['mu_gridname'] = 'Názov súboru';
+$lang['mu_gridsize'] = 'Veľkosť';
+$lang['mu_gridstat'] = 'Status';
+$lang['mu_namespace'] = 'Oblasť mien';
+$lang['mu_browse'] = 'Prehľadávať';
+$lang['mu_toobig'] = 'príliš veľký';
+$lang['mu_ready'] = 'pripravený na nahratie';
+$lang['mu_done'] = 'dokonÄený';
+$lang['mu_fail'] = 'neúspešný';
+$lang['mu_authfail'] = 'spojenie vypršalo';
+$lang['mu_progress'] = '@PCT@% nahraných';
+$lang['mu_filetypes'] = 'Povolené typy súborov';
+$lang['recent_global'] = 'Práve prehliadate zmeny v mennom priestore <b>%s</b>. Môžete si tiež pozrieť <a href="%s">aktuálne zmeny celej wiki</a>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/locked.txt
new file mode 100644
index 000000000..0e7d9645e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/locked.txt
@@ -0,0 +1,3 @@
+====== Stránka je uzamknutá ======
+
+Tato stránka je práve uzamknutá pre úpravy iným užívateľom. Musíte poÄkaÅ¥ pokým daný užívateľ dokonÄí svoje úpravy, alebo pokým tento zámok vyprší.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/login.txt
new file mode 100644
index 000000000..3bfc91037
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/login.txt
@@ -0,0 +1,3 @@
+====== Prihlásenie ======
+
+Momentálne nie ste prihlásený(á)! Prosím vložte svoje identifikaÄné údaje. Pre prihlásenie musíte maÅ¥ zapnuté cookies.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/mailtext.txt
new file mode 100644
index 000000000..78757799e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/mailtext.txt
@@ -0,0 +1,17 @@
+Stránka vo vašom DokuWiki bola zmenená. Tu sú podrobnosti:
+
+Dátum : @DATE@
+PrehliadaÄ : @BROWSER@
+IP adresa : @IPADDRESS@
+Hostitel : @HOSTNAME@
+Stará verzia : @OLDPAGE@
+Nová verzia : @NEWPAGE@
+Komentár : @SUMMARY@
+User : @USER@
+
+@DIFF@
+
+
+--
+Táto správa bola vygenerovaná systémom DokuWiki:
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/newpage.txt
new file mode 100644
index 000000000..180d80ee1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/newpage.txt
@@ -0,0 +1,3 @@
+====== Stránka s týmto názvom ešte neexistuje ======
+
+Odkaz vás zaviedol na stránku, ktorá eÅ¡te neexistuje. Môžete ju vytvoriÅ¥ stlaÄením tlaÄítka ''VytvoriÅ¥ stránku''.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/norev.txt
new file mode 100644
index 000000000..8d35f7f20
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/norev.txt
@@ -0,0 +1,3 @@
+====== Takáto verzia neexistuje ======
+
+Zadaná verzia neexistuje. StlaÄte tlaÄítko ''StarÅ¡ia verzia'' pre zoznam starších verzií tohoto dokumentu.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/preview.txt
new file mode 100644
index 000000000..871bca371
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/preview.txt
@@ -0,0 +1,3 @@
+====== Náhľad ======
+
+Tu je náhľad, ako bude dokument vyzerať. Pozor: Súbor zatiaľ **nie je uložený**!
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/pwconfirm.txt
new file mode 100644
index 000000000..19903203d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/pwconfirm.txt
@@ -0,0 +1,15 @@
+Ahoj @FULLNAME@!
+
+Niekto žiadal o nové heslo pre vaše @TITLE@
+konto na @DOKUWIKIURL@
+
+Ak ste nežiadali o nové heslo, potom iba ignorujte tento mail.
+
+Pre potvrdenie, že požiadavka bola skutoÄne odoslaná vami,
+použite prosím nasledujúci odkaz.
+
+@CONFIRM@
+
+--
+Tento mail bol generovaný Dokuwiki na adrese
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/read.txt
new file mode 100644
index 000000000..a50b2afb6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/read.txt
@@ -0,0 +1,2 @@
+Táto stránka je iba na Äítanie. Môžete si iba prehliadnuÅ¥ zdrojový kód, ale nie meniÅ¥ ho. Opýtajte sa správcu, ak si myslíťe že nieÄo nie je v poriadku.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/recent.txt
new file mode 100644
index 000000000..408d1075b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/recent.txt
@@ -0,0 +1,3 @@
+====== Posledné úpravy ======
+
+Následujúce stránky boli nedávno zmenené.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/register.txt
new file mode 100644
index 000000000..8dfe6be4e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/register.txt
@@ -0,0 +1,3 @@
+====== Zaregistrujte sa ako nový užívateľ ======
+
+Aby ste získali uživateľský úÄet, vyplňťe prosím vÅ¡etky informácie v následujúcom formulári. Zadajte **platnú** mailovú adresu, na ktorú bude zaslané heslo. Uživateľské meno musí byÅ¥ v platnom [[doku>pagename|formáte]] (ktorý je rovnaký ako formát názvu stránky).
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/registermail.txt
new file mode 100644
index 000000000..3fdc63f74
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/registermail.txt
@@ -0,0 +1,14 @@
+Nový užívateľ bol registrovaný. Tu sú detaily:
+
+Užívateľské meno : @NEWUSER@
+Celé meno : @NEWNAME@
+E-Mail : @NEWEMAIL@
+
+Dátum : @DATE@
+PrehliadaÄ : @BROWSER@
+IP adresa : @IPADDRESS@
+Meno servera : @HOSTNAME@
+
+--
+Tento mail bol generovaný Dokuwiki na adrese
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/resendpwd.txt
new file mode 100644
index 000000000..b51706c96
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/resendpwd.txt
@@ -0,0 +1,4 @@
+====== Poslať nové heslo ======
+
+Vyplnte niežšie požadované informácie pre získanie nového hesla pre váš úÄet v tomto wiki. VaÅ¡e nové heslo bude zaslané na vaÅ¡u registrovanú e-mailovú adresu. Užívateľské meno má byÅ¥ vaÅ¡e prihlasovaciemeno do wiki.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/revisions.txt
new file mode 100644
index 000000000..887386eab
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/revisions.txt
@@ -0,0 +1,3 @@
+====== Staršia verzia ======
+
+Tu sú starÅ¡ie verzie daného dokumentu. Pre návrat ku starÅ¡ej verzii si ju zvoľte zo zoznamu nižšie, stlaÄte tlaÄidlo ''UpraviÅ¥ stránku'' a uložte ju.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/searchpage.txt
new file mode 100644
index 000000000..3fdf074b7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/searchpage.txt
@@ -0,0 +1,5 @@
+====== Vyhľadávanie ======
+
+Výsledky hľadania môžete vidieÅ¥ nižšie. Pokiaľ ste nenaÅ¡li, Äo hľadáte, skúste požadovanú stránku sami vytvoriÅ¥ stlaÄením tlaÄidla ''VytvoriÅ¥ stránku''.
+
+===== Výsledky =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/showrev.txt
new file mode 100644
index 000000000..036769694
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/showrev.txt
@@ -0,0 +1,3 @@
+**Toto je staršia verzia dokumentu!**
+----
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/stopwords.txt
new file mode 100644
index 000000000..86eb84046
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/stopwords.txt
@@ -0,0 +1,28 @@
+#Toto je zoznam slov ignorovaných indexérom, jedno slovo na riadok
+# KeÄ editujete tento súbor, uistite sa, Äi používate UNIXové konce riadkov (jednoduchý nový riadok)
+# Nie je potrebné vkladať slová kraťšie ako 3 znaky - tie sú ignorované vždy.
+# Tento zoznam je založený na inom nájdenom na http://www.ranks.nl/stopwords/
+okolo
+tvoj
+ale
+ako
+aký
+aká
+aké
+kde
+kým
+kom
+komu
+ich
+jeho
+jej
+tvoj
+môj
+moja
+moje
+moji
+náš
+váš
+www
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/subscribermail.txt
new file mode 100644
index 000000000..47505bc1c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/subscribermail.txt
@@ -0,0 +1,18 @@
+Zdravím!
+
+Stránka @PAGE@ v @TITLE@ wiki bola zmenená.
+Tu sú zmeny:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Pre odhlásenie sa z tejto stránky choÄte na
+@DOKUWIKIURL@, potom navštívte
+@NEWPAGE@
+a zvoľte 'Neposielať zmeny'.
+
+--
+Tento mail bol vygenerovaný DokuWiki na
+@DOKUWIKIURL@
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/updateprofile.txt
new file mode 100644
index 000000000..67b823dc5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/updateprofile.txt
@@ -0,0 +1,6 @@
+====== Zmena vášho užívateľského profilu ======
+
+Potrebujete vyplniť len tie polia, ktoré chcete zmeniť. Nemôžete zmeniť prihlasovacie meno.
+
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/uploadmail.txt
new file mode 100644
index 000000000..871fcaeb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/uploadmail.txt
@@ -0,0 +1,14 @@
+Súbor bol nahraný do DokuWiki. Tu sú podrobnosti:
+
+Súbor : @MEDIA@
+Dátum : @DATE@
+PrehliadaÄ : @BROWSER@
+IP adresa : @IPADDRESS@
+Názov hostiteľa : @HOSTNAME@
+Veľkosť : @SIZE@
+MIME Typ : @MIME@
+Užívateľ : @USER@
+
+--
+Tento mail vygenerovalo DokuWiki na
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/wordblock.txt
new file mode 100644
index 000000000..4901b2aab
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/wordblock.txt
@@ -0,0 +1,3 @@
+====== SPAM nebol povolený ======
+
+Vaše zmeny **neboli uložené**, pretože obsahujú jedno alebo viacej nepovolených slov. Wiki si nepotrpí na spam! Pokiaľ sa domnievate, že ide o omyl, kontaktujte správcu.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/backlinks.txt
new file mode 100644
index 000000000..e637199c0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/backlinks.txt
@@ -0,0 +1,4 @@
+====== Kaj je povezano sem ======
+
+To je seznam strani, ki so povezane na trenutno stran. Opomba: CamelCase povezave niso zaznane kot take povezave.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/conflict.txt
new file mode 100644
index 000000000..7ada08b5f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/conflict.txt
@@ -0,0 +1,6 @@
+====== Obstaja novejÅ¡a razliÄica ======
+
+Obstaja novejÅ¡a razliÄica dokumenta, ki ga urejate. Do tega pride, ko kak drugi uporabnik spremeni dokument med vaÅ¡im urejanjem.
+
+Temeljito preglejte spodaj prikazane razlike in se potem odloÄite, katero verzijo želite obdržati. ÄŒe izberete ''shrani'', bo shranjena vaÅ¡a razliÄica. Pritisnite ''prekliÄi'', Äe želite ohraniti trenutno razliÄico.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/denied.txt
new file mode 100644
index 000000000..96c03a569
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/denied.txt
@@ -0,0 +1,4 @@
+====== Nimate dovoljenja ======
+
+Oprostite, za nadaljevanje nimati dovolj dovoljenj. MogoÄe ste se pozabili prijaviti?
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/diff.txt
new file mode 100644
index 000000000..f98f7e5ce
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/diff.txt
@@ -0,0 +1,4 @@
+====== Primerjaj izbrane razliÄice ======
+
+Prikazana je razlika med izbrano in trenutno razliÄico te strani.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/edit.txt
new file mode 100644
index 000000000..180a97ade
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/edit.txt
@@ -0,0 +1,2 @@
+Uredite stran in pritisnite ''Shrani''. Glej [[wiki:syntax]] za navodila za urejanje. Prosimo vas, da stran spremenite le, Äe jo nameravate **izboljÅ¡ati**. ÄŒe hoÄete preizkusiti kakÅ¡no zadevo, se poigrajte v [[playground:playground|peskovniku]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/editrev.txt
new file mode 100644
index 000000000..cf2b4ec7b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/editrev.txt
@@ -0,0 +1,2 @@
+**Naložili ste staro razliÄico dokumenta!** ÄŒe jo shranite, boste ustvarili novo razliÄico s to vsebino.
+---- \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/index.txt
new file mode 100644
index 000000000..89dd05fbe
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/index.txt
@@ -0,0 +1,4 @@
+====== Kazalo ======
+
+To je kazalo vseh strani, ki so na voljo, urejenimi po [[doku>namespaces|imenskih prostorih]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/lang.php
new file mode 100644
index 000000000..bbffcfbb1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/lang.php
@@ -0,0 +1,162 @@
+<?php
+/**
+ * slovenian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Jaka Kranjc <lynxlupodian@hotmail.com>
+ * @author BoÅ¡tjan SeniÄar <senicar@gmail.com>
+ * @author Dejan Levec <webphp@gmail.com>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['doublequoteopening'] = '„';
+$lang['doublequoteclosing'] = '“';
+$lang['singlequoteopening'] = '‚';
+$lang['singlequoteclosing'] = '‘';
+$lang['apostrophe'] = '’';
+$lang['btn_edit'] = 'Uredi to stran';
+$lang['btn_source'] = 'Prikaži izvorno kodo strani';
+$lang['btn_show'] = 'Prikaži stran';
+$lang['btn_create'] = 'Ustvari to stran';
+$lang['btn_search'] = 'IÅ¡Äi';
+$lang['btn_save'] = 'Shrani';
+$lang['btn_preview'] = 'Predogled';
+$lang['btn_top'] = 'Nazaj na vrh';
+$lang['btn_newer'] = '<< novejši';
+$lang['btn_older'] = 'starejši >>';
+$lang['btn_revs'] = 'Stare razliÄice';
+$lang['btn_recent'] = 'Novosti';
+$lang['btn_upload'] = 'Pošlji';
+$lang['btn_cancel'] = 'PrekliÄi';
+$lang['btn_index'] = 'Kazalo';
+$lang['btn_secedit'] = 'Uredi';
+$lang['btn_login'] = 'Prijava';
+$lang['btn_logout'] = 'Odjava';
+$lang['btn_admin'] = 'Administrator';
+$lang['btn_update'] = 'Posodobi';
+$lang['btn_delete'] = 'Izbriši';
+$lang['btn_back'] = 'Nazaj';
+$lang['btn_profile'] = 'Posodobi profil';
+$lang['btn_reset'] = 'Ponastavi';
+$lang['btn_resendpwd'] = 'Pošlji novo geslo';
+$lang['btn_draft'] = 'Uredi osnutek';
+$lang['btn_recover'] = 'Obnovi osnutek';
+$lang['btn_draftdel'] = 'Izbriši osnutek';
+$lang['loggedinas'] = 'Prijavljen kot';
+$lang['user'] = 'Uporabniško ime';
+$lang['pass'] = 'Geslo';
+$lang['newpass'] = 'Novo geslo';
+$lang['oldpass'] = 'Potrdi trenutno geslo';
+$lang['passchk'] = 'ponovno';
+$lang['remember'] = 'Zapomni si me';
+$lang['fullname'] = 'Pravo ime';
+$lang['email'] = 'Elektronska pošta';
+$lang['register'] = 'Odpri nov raÄun';
+$lang['profile'] = 'Profil uporabnika';
+$lang['badlogin'] = 'Oprostite, uporabniško ime ali geslo ni pravo.';
+$lang['minoredit'] = 'Manjše spremembe';
+$lang['draftdate'] = 'Samodejno shranjevanje osnutka vkljuÄeno';
+$lang['regmissing'] = 'Oprostite, zapolniti morate vsa polja.';
+$lang['reguexists'] = 'Oprostite, uporabnik s tem imenom že obstaja.';
+$lang['regsuccess'] = 'Uporabnik je bil ustvarjen. Geslo je bilo poslano na vaš elektronski naslov.';
+$lang['regsuccess2'] = 'Uporabnik je bil ustvarjen.';
+$lang['regmailfail'] = 'Zgleda, da je prišlo do napake pri pošiljanju gesla. Prosimo da stopite v stik z administratorjem!';
+$lang['regbadmail'] = 'Podan elektronski naslov izgleda neveljaven - Äe mislite da je to napaka, stopite v stik z administratorjem.';
+$lang['regbadpass'] = 'Gesli nista enaki.';
+$lang['regpwmail'] = 'Vaše geslo za DokuWiki';
+$lang['reghere'] = 'Nimate Å¡e raÄuna? Priskrbite si ga';
+$lang['profnochange'] = 'Brez sprememb, niÄesar za storiti.';
+$lang['profchanged'] = 'Uporabniški profil uspešno posodobljen';
+$lang['pwdforget'] = 'Pozabili geslo? Pridobite novega';
+$lang['resendpwd'] = 'Pošlji novo geslo za';
+$lang['resendpwdmissing'] = 'Se opraviÄujemo, vendar morate izpolniti vsa polja.';
+$lang['resendpwdnouser'] = 'Se opraviÄujemo, vendar tega uporabniÅ¡kega imena ni v bazi.';
+$lang['resendpwdconfirm'] = 'Potrditvena povezava je bila poslana na vaš elektronski naslov';
+$lang['resendpwdsuccess'] = 'Vaše novo geslo je bilo poslano na vaš elektronski naslov';
+$lang['txt_upload'] = 'Izberite datoteko za pošiljanje';
+$lang['txt_filename'] = 'Vnesite wikiname (neobvezno)';
+$lang['txt_overwrt'] = 'PrepiÅ¡i obstojeÄo datoteko';
+$lang['lockedby'] = 'Trenutno zaklenjeno od';
+$lang['lockexpire'] = 'Zaklep preteÄe';
+$lang['willexpire'] = 'VaÅ¡ zaklep za urejevanje bo pretekel Äez eno minuto.\nDa se izognete konfliktom, uporabite predogled, da se merilnik Äasa za zaklep ponastavi.';
+$lang['notsavedyet'] = 'Obstajajo neshranjene spremembe, ki bodo izgubljene.\nRes želite nadaljevati?';
+$lang['rssfailed'] = 'Prišlo je do napake pri prenašanju tega dovoda: ';
+$lang['nothingfound'] = 'NiÄ ni bilo najdeno.';
+$lang['mediaselect'] = 'Mediafile Izbira';
+$lang['fileupload'] = 'Mediafile Pošiljanje';
+$lang['uploadsucc'] = 'Pošiljanje uspelo';
+$lang['uploadfail'] = 'PoÅ¡iljanje je spodletelo. MogoÄe nimate dovoljenj?';
+$lang['uploadwrong'] = 'PoÅ¡iljanje zavrnjeno. Ta datoteÄna konÄnica je prepovedana';
+$lang['uploadexist'] = 'Dokument že obstaja. Brez sprememb.';
+$lang['uploadxss'] = 'Prenos je bil zaustavljen zaradi možne zlonamerne vsebine.';
+$lang['uploadsize'] = 'Prenesen dokument je prevelik. (max. %s)';
+$lang['deletesucc'] = 'Datoteka "%s" je bila izbrisana.';
+$lang['mediainuse'] = 'Dokument "%s" ni bil izbrisan - je Å¡e vedno v uporabi.';
+$lang['namespaces'] = 'Imenski prostori';
+$lang['mediafiles'] = 'Datoteke ki so na voljo v';
+$lang['js']['hidedetails'] = 'Skrij podrobnosti';
+$lang['js']['nosmblinks'] = 'Povezovanje do Windows deljenih datotek deluje samo v Microsoft Internet Explorer-ju.
+Å e vedno pa lahko roÄno kopirate povezavo.';
+$lang['js']['mu_btn'] = 'Prenesite veÄ dokumentov naenkrat.';
+$lang['mediaview'] = 'Poglej originalno datoteko';
+$lang['hits'] = 'Zadetkov';
+$lang['quickhits'] = 'Ujemanja v imenih strani';
+$lang['toc'] = 'Kazalo';
+$lang['current'] = 'trenutna';
+$lang['yours'] = 'VaÅ¡a razliÄica';
+$lang['diff'] = 'prikaži razlike s trenutno razliÄico';
+$lang['line'] = 'Vrstica';
+$lang['breadcrumb'] = 'Sled';
+$lang['youarehere'] = 'Tukaj ste';
+$lang['lastmod'] = 'ZadnjiÄ spremenil/a';
+$lang['by'] = 'od';
+$lang['deleted'] = 'odstranjena';
+$lang['created'] = 'ustvarjena';
+$lang['restored'] = 'stara razliÄica povrnjena';
+$lang['summary'] = 'Povzetek urejanja';
+$lang['noflash'] = 'Za prikaz vsebine potrebujete <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a>';
+$lang['mail_newpage'] = '[DokuWiki] stran dodana:';
+$lang['mail_changed'] = '[DokuWiki] stran spremenjena:';
+$lang['mail_new_user'] = 'nov uporabnik.';
+$lang['mail_upload'] = 'naložena datoteka:';
+$lang['qb_bold'] = 'Krepki tisk';
+$lang['qb_italic'] = 'LežeÄi tisk';
+$lang['qb_underl'] = 'PodÄrtano besedilo';
+$lang['qb_code'] = 'Koda';
+$lang['qb_strike'] = 'PreÄrtano besedilo';
+$lang['qb_h1'] = 'Naslov prve stopnje';
+$lang['qb_h2'] = 'Naslov drugee stopnje';
+$lang['qb_h3'] = 'Naslov tretje stopnje';
+$lang['qb_h4'] = 'Naslov Äetrte stopnje';
+$lang['qb_h5'] = 'Naslov pete stopnje';
+$lang['qb_link'] = 'Notranja povezava';
+$lang['qb_extlink'] = 'Zunanja povezava';
+$lang['qb_hr'] = 'Vodoravna Ärta';
+$lang['qb_ol'] = 'Element urejenega seznama';
+$lang['qb_ul'] = 'Element neurejenega seznama';
+$lang['qb_media'] = 'Dodaj slike in druge datoteke';
+$lang['qb_sig'] = 'Vstavi podpis';
+$lang['qb_smileys'] = 'Smeški';
+$lang['qb_chars'] = 'Posebni znaki';
+$lang['admin_register'] = 'Dodaj novega uporabnika';
+$lang['metaedit'] = 'Popravi metapodatke';
+$lang['metasaveerr'] = 'Zapisovanje metapodatkov ni uspelo';
+$lang['metasaveok'] = 'Meta podatki shranjeni';
+$lang['img_backto'] = 'Nazaj na';
+$lang['img_title'] = 'Naslov';
+$lang['img_caption'] = 'Opis';
+$lang['img_date'] = 'Datum';
+$lang['img_fname'] = 'Ime datoteke';
+$lang['img_fsize'] = 'Velikost';
+$lang['img_artist'] = 'Fotograf';
+$lang['img_format'] = 'Velikost';
+$lang['img_camera'] = 'Fotoaparat';
+$lang['img_keywords'] = 'KljuÄne besede';
+$lang['i_chooselang'] = 'Izberite jezik';
+$lang['i_installer'] = 'DokuWiki namestitev';
+$lang['i_wikiname'] = 'Wiki ime';
+$lang['i_enableacl'] = 'OmogoÄi ACL (priporoÄeno)';
+$lang['i_superuser'] = 'Naduporabnik';
+$lang['i_confexists'] = '<code>%s</code> že obstaja';
+$lang['mu_gridsize'] = 'Velikost';
+$lang['mu_done'] = 'konÄano';
+$lang['mu_filetypes'] = 'Dovoljeni tipi datotek';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/locked.txt
new file mode 100644
index 000000000..dbdcf48a1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/locked.txt
@@ -0,0 +1,3 @@
+====== Stran je zaklenjena ======
+
+To stran je nekdo zaklenjenil za urejanje. PoÄakati morate, da jo ta uporabnik neha urejati ali pa da poteÄe zaklep.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/login.txt
new file mode 100644
index 000000000..f385d0099
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/login.txt
@@ -0,0 +1,4 @@
+====== Prijava ======
+
+Niste prijavljeni! Spodaj vnesite svoje podatke in se prijavite. Da se lahko prijavite, morate imeti omogoÄene piÅ¡kotke.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/mailtext.txt
new file mode 100644
index 000000000..a46c672d6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/mailtext.txt
@@ -0,0 +1,17 @@
+Stran na vašem DokuWiki je bila dodana ali spremenjena. Podrobnosti:
+
+Datum : @DATE@
+Brskalnik : @BROWSER@
+IP-naslov : @IPADDRESS@
+Gostitelj : @HOSTNAME@
+Stara razliÄica : @OLDPAGE@
+Nova RazliÄica : @NEWPAGE@
+Povzetek urejanja: @SUMMARY@
+Uporabnik : @USER@
+
+@DIFF@
+
+
+--
+To sporoÄilo je ustvaril DokuWiki na
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/newpage.txt
new file mode 100644
index 000000000..c58ab17ff
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/newpage.txt
@@ -0,0 +1,3 @@
+====== Ta stran Å¡e ne obstaja ======
+
+Sledili ste povezavi na stran, ki Å¡e ne obstaja. Ustvarite jo lahko, tako da pritisnete na ''Ustvari to stran''.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/norev.txt
new file mode 100644
index 000000000..28b9f8ac5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/norev.txt
@@ -0,0 +1,4 @@
+====== Ta razliÄica ne obstaja ======
+
+Podana razliÄica ne obstaja. Uporabite gumb ''Stare razliÄice'' za seznam starih razliÄic tega dokumenta.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/preview.txt
new file mode 100644
index 000000000..4ebf183ec
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/preview.txt
@@ -0,0 +1,4 @@
+====== Predogled ======
+
+To je predogled strani. Lahko si ogledate kako bo izgledal dokument. Ne pozabite pa, da Å¡e ni shranjen!
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/pwconfirm.txt
new file mode 100644
index 000000000..96c3a64d5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/pwconfirm.txt
@@ -0,0 +1,13 @@
+Pozdravljen @FULLNAME@!
+
+Nekdo je v vašem imenu zahteval novo geslo za uporabniško ime @TITLE@ na @DOKUWIKIURL@.
+
+ÄŒe novega gesla niste zahtevali, prezrite to sporoÄilo.
+
+Za potrditev novega gesla, kliknite spodnjo povezavo.
+
+@CONFIRM@
+
+--
+To sporoÄilo je ustvaril DokuWiki na
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/read.txt
new file mode 100644
index 000000000..1423a4f16
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/read.txt
@@ -0,0 +1,2 @@
+Ta stran je samo za branje. Lahko si ogledate njeno izvorno kodo, spreminjati pa je ne morete. VpraÅ¡ajte administratorja, Äe se vam to zdi narobe.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/recent.txt
new file mode 100644
index 000000000..534063384
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/recent.txt
@@ -0,0 +1,5 @@
+====== Trenutne spremembe ======
+
+SledeÄe strani so bile nedavno spremenjene.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/register.txt
new file mode 100644
index 000000000..d1f7ab49e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/register.txt
@@ -0,0 +1,4 @@
+====== Odpri nov raÄun ======
+
+Vnesite vse potrebne podatke in si ustvarite raÄun za ta wiki. Preverite da ste vnesli **veljaven e-mail naslov** - tja bo poslano geslo. UporabniÅ¡ko ime mora biti veljavno [[doku>pagename|ime strani]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/registermail.txt
new file mode 100644
index 000000000..d9622325e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/registermail.txt
@@ -0,0 +1,14 @@
+Nov uporabnik registriran. Podatki:
+
+Uporabniško ime: @NEWUSER@
+Polno ime: @NEWNAME@
+E-mail: @NEWEMAIL@
+
+Datum: @DATE@
+Brskalnik: @BROWSER@
+IP naslov: @IPADDRESS@
+Hostname: @HOSTNAME@
+
+--
+To sporoÄilo je ustvaril DokuWiki na
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/resendpwd.txt
new file mode 100644
index 000000000..9f46a7a59
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/resendpwd.txt
@@ -0,0 +1,3 @@
+====== Pošlji novo geslo ======
+
+Za pridobitev novega gesla, vnesite vaÅ¡e uporabniÅ¡ko ime v obrazec spodaj. Na vaÅ¡ email naslov bo poslano sporoÄilo s povezavo za potrditev avtentiÄnosti. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/revisions.txt
new file mode 100644
index 000000000..19bf39a87
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/revisions.txt
@@ -0,0 +1,4 @@
+====== Stare razliÄice ======
+
+To so stare razliÄice tega dokumenta. Da ga povrnete na starejÅ¡o razliÄico, to prvo izberite, pritisnite na ''Uredi to stran'' in jo Å¡e shranite.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/searchpage.txt
new file mode 100644
index 000000000..b41c6dd44
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/searchpage.txt
@@ -0,0 +1,5 @@
+====== IÅ¡Äi ======
+
+Spodaj so prikazani rezultati vašega iskanja. Če niste našli kar ste iskali, lahko ustvarite novo stran z imenom vaše poizvedbe, tako da uporabite gumb ''Uredi to stran''.
+
+===== Rezultati ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/showrev.txt
new file mode 100644
index 000000000..00111ffc5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/showrev.txt
@@ -0,0 +1,2 @@
+**To je stara razliÄica tega dokumenta!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/wordblock.txt
new file mode 100644
index 000000000..c9d9c1ca0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/wordblock.txt
@@ -0,0 +1,4 @@
+====== Blokiran SPAM ======
+
+VaÅ¡e spremembe **niso** bile shranjene, ker so vsebovale eno ali veÄ prepovedanih besed. ÄŒe ste poskusili nasmetiti Wiki -- Fuj Fido! ÄŒe mislite da je to napaka, stopite v stik z administratorjem.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/admin.txt
new file mode 100644
index 000000000..1e42970d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/admin.txt
@@ -0,0 +1,4 @@
+====== ÐдминиÑтрација ======
+
+Изпод Ñе налази лиÑта доÑтупних админиÑтраторÑких опција у DokuWiki-ју.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/backlinks.txt
new file mode 100644
index 000000000..dae8d5ab2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/backlinks.txt
@@ -0,0 +1,4 @@
+====== Повратне везе ======
+
+Ово је лиÑта Ñтраница које имају везе ка тренутној Ñтраници.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/conflict.txt
new file mode 100644
index 000000000..2a1427ec4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/conflict.txt
@@ -0,0 +1,6 @@
+====== ПоÑтоји новија верзија ======
+
+ПоÑтоји новија верзија документа који Ñте изменили. Ово Ñе дешава када неки други кориÑник измени документ док га Ви још увек мењате.
+
+Проучите разлике које Ñу доле детаљно приказане, па након тога одлучите коју верзију желите да задржите. Ðко изаберете ''Ñачувај'', Ваша верзија ће да буде Ñачувана. Ðко изаберите ''поништи'', тренутна верзија ће да буде Ñачувана.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/denied.txt
new file mode 100644
index 000000000..b74f2b1f8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/denied.txt
@@ -0,0 +1,4 @@
+====== Забрањен приÑтуп ======
+
+Извините, али немате довољно права да наÑтавите. Можда Ñте заборавили да Ñе пријавите?
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/diff.txt
new file mode 100644
index 000000000..39b7427ec
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/diff.txt
@@ -0,0 +1,4 @@
+====== Разлике ======
+
+Овде Ñу приказане разлике између изабране ревизије и тренутне верзије Ñтранице.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/draft.txt
new file mode 100644
index 000000000..046c709cf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/draft.txt
@@ -0,0 +1 @@
+====== Пронађена је Ñкица датотеке ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/edit.txt
new file mode 100644
index 000000000..2d6fa7b8e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/edit.txt
@@ -0,0 +1,2 @@
+Измените ову Ñтраницу и притиÑните ''Сачувај''. Погледајте [[wiki:syntax]] за ÑинтакÑу Викија. Молим ВаÑ, измените ову Ñтраницу Ñамо ако имате намеру да је **побољшате**. Ðко желите да теÑтирате могућноÑти, научите да направите Ñвоје кораке на [[playground:playground]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/editrev.txt
new file mode 100644
index 000000000..327902943
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/editrev.txt
@@ -0,0 +1,2 @@
+**Учитали Ñте Ñтару ревизију документа!** Ðко је Ñачувате, направићете нову верзију Ñа овим подацима.
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/index.txt
new file mode 100644
index 000000000..fe6467a1d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/index.txt
@@ -0,0 +1,4 @@
+====== Ð˜Ð½Ð´ÐµÐºÑ ======
+
+Овде је Ð¸Ð½Ð´ÐµÐºÑ Ñвих доÑтупних Ñтраница поређаних по [[doku>namespaces|именÑким проÑторима]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/install.html
new file mode 100644
index 000000000..b9ab35c71
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/install.html
@@ -0,0 +1,12 @@
+<p>Ова Ñтраница ће вам помоћи у инÑталацији и подешавању <a href="http://dokuwiki.org">Dokuwiki-ја</a>. Више информација о инÑталацији можете пронаћи у
+<a href="http://dokuwiki.org/installer">документацији</a>.</p>
+
+<p>DokuWiki кориÑти обичне датотеке за Ñкладиштење вики Ñтраница и оÑталих информација везаних за Ñтранице (Ñлике, Ð¸Ð½Ð´ÐµÐºÑ Ð¿Ñ€ÐµÑ‚Ñ€Ð°Ð³Ðµ, Ñтаре преправке, итд.).
+Да би радио како треба DokuWiki као апликација <strong>мора</strong> имати могућноÑÑ‚ пиÑања под фаÑциклама у којима Ñе налазе ове датотеке. Овај програм за инÑталацију нема могућноÑÑ‚ поÑтављања дозвола за фаÑцикле. То Ñе обично ради директно из командне линије или ако кориÑтите изнајмњени Ñервер, помоћу ФТПа или кроз Контролни панел (нпр. cPanel).</p>
+
+<p>Овај програм за инÑталацију DokuWiki-а ће поÑтавити подешавања за
+<acronym title="access control list">Права приÑтупа</acronym>, које ће омогућити пријјављивање као админиÑтратор и приÑтуп менију за инÑталацију додатака, управљање кориÑницима, управљање приÑтупом ка Ñтраницама и алтернатвна подешавања. Ðије неопходно да би DokuWiki радио, али ће вам олакшати админиÑтрацију.</p>
+
+<p>ИÑкуÑнији кориÑници и кориÑници Ñа поÑебним захтевима би требало да погледају Ñледеће линкове Ñа детаљним упутÑтвима о
+<a href="http://dokuwiki.org/install">инÑтрукцијама за инÑталацију</a>
+и <a href="http://dokuwiki.org/config">подешавањима</a>.</p> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/lang.php
new file mode 100644
index 000000000..94829d314
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/lang.php
@@ -0,0 +1,224 @@
+<?php
+/**
+ * serbian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Filip Brcic <brcha@users.sourceforge.net>
+ * @author Иван Петровић petrovicivan@ubuntusrbija.org
+ * @author Ivan Petrovic <petrovicivan@ubuntusrbija.org>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '„';
+$lang['doublequoteclosing'] = '“';
+$lang['singlequoteopening'] = '‚';
+$lang['singlequoteclosing'] = '‘';
+$lang['apostrophe'] = '\'';
+$lang['btn_edit'] = 'Измени ову Ñтраницу';
+$lang['btn_source'] = 'Прикажи изворни код';
+$lang['btn_show'] = 'Прикажи Ñтраницу';
+$lang['btn_create'] = 'Ðаправи ову Ñтраницу';
+$lang['btn_search'] = 'Тражи';
+$lang['btn_save'] = 'Сачувај';
+$lang['btn_preview'] = 'Прегледај';
+$lang['btn_top'] = 'Врати Ñе на врх';
+$lang['btn_newer'] = '<< новије';
+$lang['btn_older'] = 'Ñтарије >>';
+$lang['btn_revs'] = 'Старе верзије';
+$lang['btn_recent'] = 'Скорије измене';
+$lang['btn_upload'] = 'Пошаљи';
+$lang['btn_cancel'] = 'Поништи';
+$lang['btn_index'] = 'ИндекÑ';
+$lang['btn_secedit'] = 'Измени';
+$lang['btn_login'] = 'Пријави Ñе';
+$lang['btn_logout'] = 'Одјави Ñе';
+$lang['btn_admin'] = 'ÐдминиÑтрација';
+$lang['btn_update'] = 'Ðжурирај';
+$lang['btn_delete'] = 'Избриши';
+$lang['btn_back'] = 'Ðатраг';
+$lang['btn_backlink'] = 'Повратне везе';
+$lang['btn_backtomedia'] = 'Врати Ñе на избор медијÑке датотеке';
+$lang['btn_subscribe'] = 'Пријави Ñе на измене';
+$lang['btn_unsubscribe'] = 'Одјави Ñе Ñа измена';
+$lang['btn_subscribens'] = 'Претплати Ñе на промене у именÑком проÑтору';
+$lang['btn_unsubscribens'] = 'Откажи претплату на промене у именÑком проÑтору';
+$lang['btn_profile'] = 'Ðжурирај профил';
+$lang['btn_reset'] = 'Поништи';
+$lang['btn_resendpwd'] = 'Пошаљи нову лозинку';
+$lang['btn_draft'] = 'Измени нацрт';
+$lang['btn_recover'] = 'Опорави нацрт';
+$lang['btn_draftdel'] = 'Обриши нацрт';
+$lang['loggedinas'] = 'Пријављен као';
+$lang['user'] = 'КориÑничко име';
+$lang['pass'] = 'Лозинка';
+$lang['newpass'] = 'Ðова лозинка';
+$lang['oldpass'] = 'Потврди нову лозинку';
+$lang['passchk'] = 'поново';
+$lang['remember'] = 'Запамти ме';
+$lang['fullname'] = 'Име и презиме';
+$lang['email'] = 'Е-адреÑа';
+$lang['register'] = 'РегиÑтруј Ñе';
+$lang['profile'] = 'КориÑнички профил';
+$lang['badlogin'] = 'Извините, није добро кориÑничко име или шифра.';
+$lang['minoredit'] = 'Мала измена';
+$lang['draftdate'] = 'Ðацрт је аутоматÑки Ñачуван';
+$lang['nosecedit'] = 'Страна је у међувремену промењена, поглавље је заÑтарело и поново Ñе учитава цела Ñтрана.';
+$lang['regmissing'] = 'Извините, морате да попуните Ñва поља.';
+$lang['reguexists'] = 'Извините, кориÑник Ñа иÑтим именом већ поÑтоји.';
+$lang['regsuccess'] = 'КориÑник је направљен и лозинка је поÑлата путем е-поште.';
+$lang['regsuccess2'] = 'КориÑник је направљен.';
+$lang['regmailfail'] = 'Изгледа да је дошло до грешке приликом Ñлања лозинке е-поштом. Молим ВаÑ, контактирајте админиÑтратора!';
+$lang['regbadmail'] = 'Дата е-адреÑа није у реду - ако миÑлите да је ово грешка, контактирајте админиÑтратора';
+$lang['regbadpass'] = 'Две задате лозинке ниÑу иÑте. Молим ВаÑ, пробајте поново.';
+$lang['regpwmail'] = 'Ваша DokuWiki лозинка';
+$lang['reghere'] = 'Још увек немате налог? Само направите један';
+$lang['profna'] = 'Овај вики не дозвољава измену профила';
+$lang['profnochange'] = 'Ðема промена.';
+$lang['profnoempty'] = 'Ðије дозвољено оÑтавити празно поље имена или е-адреÑе.';
+$lang['profchanged'] = 'КориÑнички профил је ажуриран.';
+$lang['pwdforget'] = 'Заборавили Ñте лозинку? Ðаправите нову';
+$lang['resendna'] = 'Овај вики не дозвољава Ñлање лозинки.';
+$lang['resendpwd'] = 'Пошаљи нову лозинку за';
+$lang['resendpwdmissing'] = 'Жао ми је, Ñва поља морају бити попуњена.';
+$lang['resendpwdnouser'] = 'Жао ми је, овај кориÑник не поÑтоји у нашој бази.';
+$lang['resendpwdbadauth'] = 'Жао ми је, потврдни код није иÑправан. Проверите да ли Ñте кориÑтили комплетан потврдни линк.';
+$lang['resendpwdconfirm'] = 'Потврдни линк је поÑтат као е-порука.';
+$lang['resendpwdsuccess'] = 'Ваша нова лозинка је поÑлата као е-порука.';
+$lang['license'] = 'ОÑим где је другачије назначено, материјал на овом викију је под Ñледећом лиценцом:';
+$lang['licenseok'] = 'Ðапомена: Изменом ове Ñтране Ñлажете Ñе да ће ваше измене бити под Ñледећом лиценцом:';
+$lang['txt_upload'] = 'Изаберите датотеку за Ñлање';
+$lang['txt_filename'] = 'УнеÑите вики-име (опционо)';
+$lang['txt_overwrt'] = 'Препишите тренутни фајл';
+$lang['lockedby'] = 'Тренутно закључано од Ñтране';
+$lang['lockexpire'] = 'Закључавање иÑтиче';
+$lang['willexpire'] = 'Ваше закључавање за измену ове Ñтранице ће да иÑтекне за један минут.\nДа би Ñте избегли конфликте, иÑкориÑтите дугме за преглед како би Ñте реÑетовали тајмер закључавања.';
+$lang['notsavedyet'] = 'ÐеÑачуване измене ће бити изгубљене.\nДа ли Ñтварно желите да наÑтавите?';
+$lang['rssfailed'] = 'Дошло је до грешке приликом преузимања овог довода: ';
+$lang['nothingfound'] = 'Ðишта није нађено.';
+$lang['mediaselect'] = 'Избор медијÑке датотеке';
+$lang['fileupload'] = 'Слање медијÑке датотеке';
+$lang['uploadsucc'] = 'УÑпешно Ñлање';
+$lang['uploadfail'] = 'ÐеуÑпешно Ñлање. Можда немате дозволу?';
+$lang['uploadwrong'] = 'Слање је забрањено. Овај наÑтавак датотеке је забрањен!';
+$lang['uploadexist'] = 'Датотека већ поÑтоји. Ðишта није учињено.';
+$lang['uploadbadcontent'] = 'Материјал који шаљете не одговара %s ';
+$lang['uploadspam'] = 'Слање је блокирано јер Ñе налазите на црној лиÑти пошиљаоца.';
+$lang['uploadxss'] = 'Слање је блокирано јер је потенцијално малициозног Ñадржаја.';
+$lang['uploadsize'] = 'ПоÑлата датотека је превелика. (макÑимум је %s)';
+$lang['deletesucc'] = 'Фајл "%s" је избриÑан.';
+$lang['deletefail'] = '"%s" није могао да буде избриÑан - проверите дозволе.';
+$lang['mediainuse'] = 'Фајл "%s" није избриÑан - још је у употреби.';
+$lang['namespaces'] = 'ИменÑки проÑтори';
+$lang['mediafiles'] = 'ДоÑтупни фајлови у';
+$lang['js']['keepopen'] = 'Задржи отворен прозор након одабира';
+$lang['js']['hidedetails'] = 'Сакриј детаље';
+$lang['js']['nosmblinks'] = 'Повезивање Ñа Windows дељеним фолдерима ради Ñамо у МајкроÑофтовом Интернет Претраживачу.
+Ипак, можете да иÑкопирате и залепите везу.';
+$lang['js']['mu_btn'] = 'Слање више датотека одједном';
+$lang['mediausage'] = 'КориÑтите Ñледећу ÑинтакÑу за референцу ка овој датотеци:';
+$lang['mediaview'] = 'Прикажи оригиналну датотеку';
+$lang['mediaroot'] = 'почетак';
+$lang['mediaupload'] = 'Пошаљи датотеку у тренутни именÑки проÑтор. Да биÑте направили подпроÑторе, предвидите их у поље „Пошаљи као“ раздвојено двотачкама.';
+$lang['mediaextchange'] = 'ÐаÑтавак датотеке је промењен из .%s у .%s!';
+$lang['reference'] = 'Референце за';
+$lang['ref_inuse'] = 'Фајл не може да буде избриÑан јер га још увек кориÑте Ñледеће Ñтранице:';
+$lang['ref_hidden'] = 'Ðеке референце Ñу на Ñтраницама за које немате дозволе за читање';
+$lang['hits'] = 'Поготци';
+$lang['quickhits'] = 'Имена Ñтраница које Ñе поклапају';
+$lang['toc'] = 'Садржај';
+$lang['current'] = 'тренутно';
+$lang['yours'] = 'Ваша верзија';
+$lang['diff'] = 'прикажи разлике до тренутне верзије';
+$lang['diff2'] = 'Прикажи разлике између одабраних ревизија';
+$lang['line'] = 'Линија';
+$lang['breadcrumb'] = 'Траг';
+$lang['youarehere'] = 'Сада Ñте овде';
+$lang['lastmod'] = 'ПоÑледњи пут мењано';
+$lang['by'] = 'од';
+$lang['deleted'] = 'избриÑано';
+$lang['created'] = 'направљено';
+$lang['restored'] = 'Ñтара верзија повраћена';
+$lang['external_edit'] = 'Ñпољна измена';
+$lang['summary'] = 'Сажетак измене';
+$lang['noflash'] = 'За приказивање ове врÑте материјала потребан вам је <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a>.';
+$lang['mail_newpage'] = 'Ñтраница додата:';
+$lang['mail_changed'] = 'Ñтраница измењена:';
+$lang['mail_new_user'] = 'нови кориÑник:';
+$lang['mail_upload'] = 'поÑлата датотека:';
+$lang['qb_bold'] = 'МаÑтан текÑÑ‚';
+$lang['qb_italic'] = 'Курзивни текÑÑ‚';
+$lang['qb_underl'] = 'Подвучени текÑÑ‚';
+$lang['qb_code'] = 'Изворни код';
+$lang['qb_strike'] = 'Прецртани текÑÑ‚';
+$lang['qb_h1'] = 'ÐаÑлов 1. нивоа';
+$lang['qb_h2'] = 'ÐаÑлов 2. нивоа';
+$lang['qb_h3'] = 'ÐаÑлов 3. нивоа';
+$lang['qb_h4'] = 'ÐаÑлов 4. нивоа';
+$lang['qb_h5'] = 'ÐаÑлов 5. нивоа';
+$lang['qb_link'] = 'Унутрашња веза';
+$lang['qb_extlink'] = 'Спољашња веза';
+$lang['qb_hr'] = 'Хоризонтална линија';
+$lang['qb_ol'] = 'Елемент уређене лиÑте';
+$lang['qb_ul'] = 'Елемент неуређене лиÑте';
+$lang['qb_media'] = 'Додај Ñлике и друге фајлове';
+$lang['qb_sig'] = 'Убаци потпиÑ';
+$lang['qb_smileys'] = 'Смешко';
+$lang['qb_chars'] = 'ПоÑебни карактери';
+$lang['js']['del_confirm'] = 'Обриши овај уноÑ?';
+$lang['admin_register'] = 'Додај новог кориÑника';
+$lang['metaedit'] = 'Измени мета-податке';
+$lang['metasaveerr'] = 'ЗапиÑивање мета-података није било уÑпешно';
+$lang['metasaveok'] = 'Мета-подаци Ñу Ñачувани';
+$lang['img_backto'] = 'Ðатраг на';
+$lang['img_title'] = 'ÐаÑлов';
+$lang['img_caption'] = 'Ðазив';
+$lang['img_date'] = 'Датум';
+$lang['img_fname'] = 'Име фајла';
+$lang['img_fsize'] = 'Величина';
+$lang['img_artist'] = 'Фотограф';
+$lang['img_copyr'] = 'Права копирања';
+$lang['img_format'] = 'Формат';
+$lang['img_camera'] = 'Камера';
+$lang['img_keywords'] = 'Кључне речи';
+$lang['subscribe_success'] = 'Додао Ñам %s на лиÑту претплатника за %s';
+$lang['subscribe_error'] = 'Дошло је до грешке при додавању %s на лиÑту претплатника за %s';
+$lang['subscribe_noaddress'] = 'Ðе поÑтоји е-адреÑа аÑоцирана Ñа Вашим налогом. Ðе можете да будете додати на лиÑту претплатника';
+$lang['unsubscribe_success'] = 'ИзбриÑао Ñам %s Ñа лиÑте претплатника за %s';
+$lang['unsubscribe_error'] = 'Дошло је до грешке приликом бриÑања %s Ñа лиÑте претплатника за %s';
+$lang['authmodfailed'] = 'Лоше подешена провера кориÑника. Молим Ð’Ð°Ñ Ð´Ð° обавеÑтите админиÑтратора викија.';
+$lang['authtempfail'] = 'Провера кориÑника је тренутно недоÑтупна. Ðко Ñе Ñитуација наÑтави, молимо Ð’Ð°Ñ Ð´Ð° обавеÑтите админиÑтратора викија.';
+$lang['i_chooselang'] = 'Одаберите језик';
+$lang['i_installer'] = 'Докувики инÑталација';
+$lang['i_wikiname'] = 'Ðазив викија';
+$lang['i_enableacl'] = 'Укључи ';
+$lang['i_superuser'] = 'СуперкориÑник';
+$lang['i_problems'] = 'ИнÑталација је наишла на проблеме који Ñу навадени у текÑту иÑпод. Ðе можете наÑтавити даље док их не иÑправите.';
+$lang['i_modified'] = 'Из ÑигурноÑних разлога ова Ñкрипта ради Ñамо Ñа новом Dokuwiki инÑталацијом. Требало би или да опет раÑпакујете архиву преузету Ñа Ñајта или да погледате <a href="http://dokuwiki.org/install">Dokuwiki инÑтрукције за инÑталацију</a>';
+$lang['i_funcna'] = 'ПХП функција <code>%s</code> није доÑтупна. Можда је Ваш хоÑтинг провајдер забранио из неког разлога?';
+$lang['i_phpver'] = '<code>%s</code> Верзија Вашег ПХПа је нижа од неопходне <code>%s</code>. Требало би да надоградите ПХП инÑталацију.';
+$lang['i_permfail'] = 'DokuWiki нема дозволу пиÑања у <code>%s</code>. Потребно је да поправите дозволе за ову фаÑциклу!';
+$lang['i_confexists'] = '<code>%s</code> већ поÑтоји';
+$lang['i_writeerr'] = 'Ðе могу да направим <code>%s</code>. Проверите дозволе а затим ручно направите ову датотеку.';
+$lang['i_badhash'] = 'dokuwiki.php није препознат или је измењен (hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - недозвољена или празна вредноÑÑ‚';
+$lang['i_success'] = 'Подешавања Ñу завршена. Сада можете обриÑати датотеку install.php. ÐаÑтавите у <a href="doku.php">Ваш нови DokuWiki</a>.';
+$lang['i_failure'] = 'Појавили Ñу Ñе проблеми при пиÑању датотеке Ñа подешавањима. Требало би да их ручно иÑправите пре него што ћете моћи да кориÑтите <a href="doku.php">Ваш нови DokuWiki</a>.';
+$lang['i_policy'] = 'Иницијалне кориÑничке дозволе';
+$lang['i_pol0'] = 'Отворени вики (читање, пиÑање, Ñлање датотека за Ñве)';
+$lang['i_pol1'] = 'Јавни вики (читање за Ñве, пиÑање и Ñлање датотека Ñамо за региÑтроване кориÑнике)';
+$lang['i_pol2'] = 'Затворени вики (читање, пиÑање и Ñлање датотека Ñамо за региÑтроване кориÑнике)';
+$lang['i_retry'] = 'Понови';
+$lang['mu_intro'] = 'Одавде можете поÑлати више датотека одједном. Кликните на дугме Тражи да биÑте додали датотеке на лиÑту. Када завршите Ñа одабирањем кликните на Пошаљи.';
+$lang['mu_gridname'] = 'Ðазив датотеке';
+$lang['mu_gridsize'] = 'Величина';
+$lang['mu_gridstat'] = 'СтатуÑ';
+$lang['mu_namespace'] = 'ИменÑки проÑтор';
+$lang['mu_browse'] = 'Тражи';
+$lang['mu_toobig'] = 'превелико';
+$lang['mu_ready'] = 'Ñпремно за Ñлање';
+$lang['mu_done'] = 'завршено';
+$lang['mu_fail'] = 'није уÑпело';
+$lang['mu_authfail'] = 'ÑеÑија је иÑтекла';
+$lang['mu_progress'] = '@PCT@% поÑлато';
+$lang['mu_filetypes'] = 'Дозвољени типови датотека';
+$lang['recent_global'] = 'Тренутно пратите промене у именÑком проÑтору <b>%s</b>. Такође, можете пратити <a href="%s">прмене на целом викију</a>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/locked.txt
new file mode 100644
index 000000000..4bcc0ac5c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/locked.txt
@@ -0,0 +1,3 @@
+====== Страница је закључана ======
+
+Ову Ñтраница је други кориÑник у овом тренутку закључао за измене. Мораћете да Ñачекате док он не заврши Ñа изменама или не иÑтекне закључавање.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/login.txt
new file mode 100644
index 000000000..c2f5a6fb6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/login.txt
@@ -0,0 +1,4 @@
+====== Пријављивање ======
+
+Тренутно ниÑте пријављени! УнеÑите Ваше информације иÑпод да биÑте Ñе пријавили. За то је неопходно да колачићи буду омогућен.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/mailtext.txt
new file mode 100644
index 000000000..2ed99bf34
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/mailtext.txt
@@ -0,0 +1,17 @@
+Страница на Вашем DokuWiki-ју је додата или измењена. Ево детаља
+
+Датум : @DATE@
+Веб читач : @BROWSER@
+ИП адреÑа : @IPADDRESS@
+Име домаћина : @HOSTNAME@
+Стара ревизија : @OLDPAGE@
+Ðова ревизија : @NEWPAGE@
+Сажетак измена : @SUMMARY@
+КориÑник : @USER@
+
+@DIFF@
+
+
+--
+Ову поруку је генериÑао DokuWiki Ñа
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/newpage.txt
new file mode 100644
index 000000000..40a36e6f6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/newpage.txt
@@ -0,0 +1,3 @@
+====== Ова тема још увек не поÑтоји ======
+
+Пратили Ñте везу до теме која још увек не поÑтоји. Можете да је направите кориÑтећи дугме ''Ðаправи ову Ñтраницу''.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/norev.txt
new file mode 100644
index 000000000..73f8d0b48
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/norev.txt
@@ -0,0 +1,4 @@
+====== Ðе поÑтоји таква ревизија ======
+
+Задата ревизија не поÑтоји. ИÑкориÑтите дугме ''Старе ревизије'' да излиÑтате Ñтаре ревизије овог документа.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/preview.txt
new file mode 100644
index 000000000..be928884f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/preview.txt
@@ -0,0 +1,4 @@
+====== Преглед ======
+
+Ово је преглед тога како би Ваш текÑÑ‚ изгледао. Ðе заборавите: он још **није Ñачуван**!
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/pwconfirm.txt
new file mode 100644
index 000000000..35e23b75d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/pwconfirm.txt
@@ -0,0 +1,13 @@
+Здраво @FULLNAME@!
+
+Ðеко је затражио нову лозинку за Ваш налог @TITLE@ на @DOKUWIKIURL@
+
+Ðко то ниÑте Ви, Ñамо игноришите ову поруку.
+
+У Ñупротном, да биÑте потврдили захтев кликните на Ñледећи линк:
+
+@CONFIRM@
+
+--
+Ову поруку је генериÑао DokuWiki sa
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/read.txt
new file mode 100644
index 000000000..c2d9ffff7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/read.txt
@@ -0,0 +1,2 @@
+Ова Ñтраница је Ñамо за читање. Можете да погледате изворни код, али не можете да је мењате. Обратите Ñе админиÑтратору ако миÑлите да то није уреду.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/recent.txt
new file mode 100644
index 000000000..54c0c26f0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/recent.txt
@@ -0,0 +1,5 @@
+====== Скорије измене ======
+
+Следеће Ñтранице Ñу биле измењене у Ñкорије време.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/register.txt
new file mode 100644
index 000000000..a553b7a1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/register.txt
@@ -0,0 +1,4 @@
+====== РегиÑтрујте Ñе као нови кориÑник ======
+
+Попуните Ñве информације иÑпод како би Ñте направили нови налог на овом викију. Обавезно упишите **тачну е-адреÑу** - Ваша нова лозинка ће тамо бити поÑлата. КориÑничко име би требало да буде иÑправно [[doku>pagename|име Ñтранице]]
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/registermail.txt
new file mode 100644
index 000000000..efdcbb5c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/registermail.txt
@@ -0,0 +1,15 @@
+РегиÑтрован је нови кориÑник. Ово Ñу детаљи:
+
+КориÑничко име: @NEWUSER@
+Име и презиме: @NEWNAME@
+Е-адреÑа: @NEWEMAIL@
+
+Датум: @DATE@
+Веб читач: @BROWSER@
+ИП адреÑа: @IPADDRESS@
+Домаћин: @HOSTNAME@
+
+
+--
+Ову поруку је генериÑао DokuWiki sa
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/resendpwd.txt
new file mode 100644
index 000000000..7f6623dbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/resendpwd.txt
@@ -0,0 +1,3 @@
+====== Пошаљи нову лозинку ======
+
+Молим Ð’Ð°Ñ ÑƒÐ½ÐµÑите кориÑничко име у форму да биÑте затражили нову лозинку за Ваш налог на овом викију. Потврдни линк ће бити поÑлат на е-адреÑу коју Ñте кориÑтили на региÑтрацији. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/revisions.txt
new file mode 100644
index 000000000..1ca995a11
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/revisions.txt
@@ -0,0 +1,4 @@
+====== Старе ревизије ======
+
+Ово Ñу Ñтарије ревизије тренутног документа. Да би Ñте повратили Ñтару ревизију, изаберите је одоздо, кликните на ''Измени Ñтраницу'' и Ñачувајте је.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/searchpage.txt
new file mode 100644
index 000000000..010966a7c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/searchpage.txt
@@ -0,0 +1,5 @@
+====== Претрага ======
+
+ИÑпод можете да нађете резултате Ваше претраге. Ðко ниÑте нашли то што Ñте тражили, можете да направите нову Ñтраницу названу по Вашем упиту кориÑтећи дугме ''Измени ову Ñтраницу''.
+
+===== Резултати =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/showrev.txt
new file mode 100644
index 000000000..f2aabb2cb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/showrev.txt
@@ -0,0 +1,2 @@
+**Ово је Ñтара верзија документа!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/stopwords.txt
new file mode 100644
index 000000000..78093e29a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/stopwords.txt
@@ -0,0 +1,12 @@
+# Ово је лиÑта речи које Ñе неће индекÑирати, по једна реч у реду
+# Када мењате ову датотеку проверите да ли је нови ред запиÑан по UNIX ÑиÑтему
+# Ðема потребе уноÑити речи краће од 3 Ñлова - оне Ñе преÑкачу иначе
+ваш
+они
+њихов
+како
+ово
+шта
+кад
+где
+www
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/subscribermail.txt
new file mode 100644
index 000000000..fd3de7d38
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/subscribermail.txt
@@ -0,0 +1,17 @@
+Здраво!
+
+Измењена је Ñтраница @PAGE@ на @TITLE@ викију.
+Ево измена:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Да Ñе одјавите Ñа ове Ñтранице, пријавите Ñе на вики на
+@DOKUWIKIURL@ и онда поÑетите
+@NEWPAGE@
+и изаберите 'Одјави Ñе Ñа измена'.
+
+--
+Ову поруку је генериÑао DokuWiki на
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/updateprofile.txt
new file mode 100644
index 000000000..15b9955e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/updateprofile.txt
@@ -0,0 +1,3 @@
+====== Ðжурирање Вашег профила ======
+
+Потребно је попунити Ñамо она поља која желите да промените. Поље КориÑничко име не можете да променити. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/uploadmail.txt
new file mode 100644
index 000000000..36b3bb31d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/uploadmail.txt
@@ -0,0 +1,14 @@
+Ðова датотека је поÑлата на Ваш DokuWiki. Ово Ñу њени детањи:
+
+Датотека: @MEDIA@
+Датум: @DATE@
+Веб читач: @BROWSER@
+ИП адреÑа: @IPADDRESS@
+Домаћин: @HOSTNAME@
+Величина: @SIZE@
+MIME тип: @MIME@
+КориÑник: @USER@
+
+--
+Ову поруку је генериÑао DokuWiki sa
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/wordblock.txt
new file mode 100644
index 000000000..56ecde3fd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/wordblock.txt
@@ -0,0 +1,4 @@
+====== СПÐÐœ је блокиран ======
+
+Ваше измене **ниÑу** Ñачуване јер Ñадрже једну или више блокираних речи. Ðко Ñте покушали да Ñпамујете вики -- надрљаћете! Ðко миÑлите да је ово грешка, контактирајте админиÑтратора овог викија.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/admin.txt
new file mode 100644
index 000000000..10887da7d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/admin.txt
@@ -0,0 +1,4 @@
+====== Administration ======
+
+Nedan hittar du en lista över de tillgängliga administrativa uppgifterna i DokuWiki.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/adminplugins.txt
new file mode 100644
index 000000000..0af37c769
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/adminplugins.txt
@@ -0,0 +1,2 @@
+
+===== Ytterligare Tillägg ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/backlinks.txt
new file mode 100644
index 000000000..c907c8ecf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/backlinks.txt
@@ -0,0 +1,3 @@
+====== Tillbakalänkar ======
+
+Detta är en lista över sidor som verkar länka tillbaka till den aktuella sidan.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/conflict.txt
new file mode 100644
index 000000000..42168d1b4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/conflict.txt
@@ -0,0 +1,6 @@
+====== Det finns en senare version ======
+
+Det finns en senare version av dokumentet du har redigerat. Detta kan hända när en annan användare redigerar dokumentet samtidigt som du.
+
+Granska skillnaderna som visas nedan noga, och välj sedan vilken version du vill behålla. Om du väljer ''spara'', så kommer din version att sparas. Välj ''avbryt'' för att behålla den nuvarande versionen.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/denied.txt
new file mode 100644
index 000000000..64d129227
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/denied.txt
@@ -0,0 +1,4 @@
+====== Ã…tkomst nekad ======
+
+Tyvärr, du har inte behörighet att fortsätta. Kanske har du glömt att logga in?
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/diff.txt
new file mode 100644
index 000000000..9fb8c20f2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/diff.txt
@@ -0,0 +1,4 @@
+====== Skillnader ======
+
+Här visas skillnader mellan den valda versionen och den nuvarande versionen av sidan.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/draft.txt
new file mode 100644
index 000000000..3749ad035
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/draft.txt
@@ -0,0 +1,6 @@
+====== Utkast hittat ======
+
+Din senaste redigering av sidan avslutades inte på ett korrekt sätt. DokuWiki sparade automatiskt ett utkast under tiden du arbetade, och nu kan du använda det för att fortsätta redigeringen. Nedan kan du se det innehåll som sparats från din förra session.
+
+Bestäm om du vill //återskapa// din förlorade redigeringssession, //radera// det automatiskt sparade utkastet eller //avbryta// redigeringen.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/edit.txt
new file mode 100644
index 000000000..187b11fca
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/edit.txt
@@ -0,0 +1,2 @@
+Redigera sidan och klicka ''Spara''. Se [[wiki:syntax]] för Wikisyntax. Redigera bara sidan om du kan **förbättra** den. Om du vill testa hur saker och ting fungerar, gör det på [[playground:playground|lekplatsen]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/editrev.txt
new file mode 100644
index 000000000..8bd1adb0a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/editrev.txt
@@ -0,0 +1,2 @@
+**Du har hämtat en tidigare version av dokumentet!** Om du sparar den så kommer du att skapa en ny version med detta innehåll.
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/index.txt
new file mode 100644
index 000000000..24d715b74
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/index.txt
@@ -0,0 +1,4 @@
+====== Innehållsförteckning ======
+
+Detta är en innehållsförteckning över alla tillgängliga sidor, sorterad efter [[doku>namespaces|namnrymder]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/install.html
new file mode 100644
index 000000000..11e2eea49
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/install.html
@@ -0,0 +1,25 @@
+<p>Denna sida hjälper dig med nyinstallation och inställningar för
+<a href="http://dokuwiki.org">Dokuwiki</a>. Mer information om
+installationsprogrammet finns på dess egen
+<a href="http://dokuwiki.org/installer">dokumentationssida</a>.</p>
+
+<p>DokuWiki använder vanliga filer för att lagra wikisidor och annan
+information som här till sidorna (till exempel bilder, sökindex, gamla
+versioner, etc). För att kunna fungera
+<strong>måste</strong> DokuWiki ha skrivrättigheter i de kataloger där
+filerna ligger. Detta installationsprogram kan inte ändra rättigheter
+på kataloger. Det måste normalt göras direkt på en kommandorad, eller
+om du använder ett webbhotell, via FTP eller din leverantörs kontrollpanel
+(till exempel cPanel).</p>
+
+<p>Detta installationsprogram anpassar inställningarna i din DokuWiki för
+<acronym title="access control list">ACL</acronym> (behörighetslista), vilket i sin tur gör att
+administratören kan logga in och komma åt DokuWikis administrationsmenu för
+att installera insticksmoduler, hantera användare, hantera behörighet till
+wikisidor och ändra inställningar. ACL är inget krav för att DokuWiki ska
+fungera, men det förenklar administrationen.</p>
+
+<p>Erfarna användare, eller användare med särskilda behov, kan använda dessa
+länkar för att hitta mer detaljer om
+<a href="http://dokuwiki.org/install">installation</a>
+och <a href="http://dokuwiki.org/config">inställningar</a>.</p>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/lang.php
new file mode 100644
index 000000000..062e83a31
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/lang.php
@@ -0,0 +1,261 @@
+<?php
+/**
+ * Swedish language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Joaquim Homrighausen <joho@webbplatsen.se>
+ * @author Per Foreby <per@foreby.se>
+ * @author Nicklas Henriksson <nicklas[at]nihe.se>
+ * @author HÃ¥kan Sandell <hakan.sandell[at]mydata.se>
+ * @author Dennis Karlsson
+ * @author Tormod Otter Johansson <tormod@latast.se>
+ * @author emil@sys.nu
+ * @author Pontus Bergendahl <pontus.bergendahl@gmail.com>
+ * @author Tormod Johansson tormod.otter.johansson@gmail.com
+ * @author Emil Lind <emil@sys.nu>
+ * @author Bogge Bogge <bogge@bogge.com>
+ * @author Peter Åström <eaustreum@gmail.com>
+ * @author HÃ¥kan Sandell <hakan.sandell@home.se>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = 'â€';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '’';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = '’';
+$lang['btn_edit'] = 'Redigera sidan';
+$lang['btn_source'] = 'Visa källkod';
+$lang['btn_show'] = 'Visa sidan';
+$lang['btn_create'] = 'Skapa sidan';
+$lang['btn_search'] = 'Sök';
+$lang['btn_save'] = 'Spara';
+$lang['btn_preview'] = 'Granska';
+$lang['btn_top'] = 'Till början av sidan';
+$lang['btn_newer'] = '<< nyare';
+$lang['btn_older'] = 'äldre >>';
+$lang['btn_revs'] = 'Historik';
+$lang['btn_recent'] = 'Nyligen ändrat';
+$lang['btn_upload'] = 'Ladda upp';
+$lang['btn_cancel'] = 'Avbryt';
+$lang['btn_index'] = 'Index';
+$lang['btn_secedit'] = 'Redigera';
+$lang['btn_login'] = 'Logga in';
+$lang['btn_logout'] = 'Logga ut';
+$lang['btn_admin'] = 'Admin';
+$lang['btn_update'] = 'Uppdatera';
+$lang['btn_delete'] = 'Radera';
+$lang['btn_back'] = 'Tillbaka';
+$lang['btn_backlink'] = 'Tillbakalänkar';
+$lang['btn_backtomedia'] = 'Tillbaka till val av Mediafil';
+$lang['btn_subscribe'] = 'Prenumerera på ändringar';
+$lang['btn_unsubscribe'] = 'Säg upp prenumeration på ändringar';
+$lang['btn_subscribens'] = 'Prenumerera på namnrymdsändringar';
+$lang['btn_unsubscribens'] = 'Sluta prenumerera på namnrymdsändringar
+';
+$lang['btn_profile'] = 'Uppdatera profil';
+$lang['btn_reset'] = 'Återställ';
+$lang['btn_resendpwd'] = 'Skicka nytt lösenord';
+$lang['btn_draft'] = 'Redigera utkast';
+$lang['btn_recover'] = 'Ã…terskapa utkast';
+$lang['btn_draftdel'] = 'Radera utkast';
+$lang['btn_revert'] = 'Återställ';
+$lang['loggedinas'] = 'Inloggad som';
+$lang['user'] = 'Användarnamn';
+$lang['pass'] = 'Lösenord';
+$lang['newpass'] = 'Nytt lösenord';
+$lang['oldpass'] = 'Bekräfta nuvarande lösenord';
+$lang['passchk'] = 'en gång till';
+$lang['remember'] = 'Kom ihåg mig';
+$lang['fullname'] = 'Namn';
+$lang['email'] = 'E-post';
+$lang['register'] = 'Registrera';
+$lang['profile'] = 'Användarprofil';
+$lang['badlogin'] = 'Felaktigt användarnamn eller lösenord.';
+$lang['minoredit'] = 'Små ändringar';
+$lang['draftdate'] = 'Utkast automatiskt sparat';
+$lang['nosecedit'] = 'Sidan ändrades medan du skrev, sektionsinformationen var inte uppdaterad. Laddar hela sidan istället.';
+$lang['regmissing'] = 'Du måste fylla i alla fälten.';
+$lang['reguexists'] = 'Det finns redan en användare med det användarnamnet.';
+$lang['regsuccess'] = 'Användarkontot skapat, lösenordet har skickats via e-post.';
+$lang['regsuccess2'] = 'Användarkontot skapat.';
+$lang['regmailfail'] = 'Ett fel uppstod när ditt lösenord skulle skickas via e-post. Var god kontakta administratören!';
+$lang['regbadmail'] = 'Den angivna e-postadressen verkar vara ogiltig - om du anser detta felaktigt, var god kontakta administratören';
+$lang['regbadpass'] = 'De två angivna lösenorden är inte identiska. Försök igen.';
+$lang['regpwmail'] = 'Ditt DokuWikilösenord';
+$lang['reghere'] = 'Har du inte ett konto än? Skaffa ett';
+$lang['profna'] = 'Denna wiki stödjer inte ändringar av profiler';
+$lang['profnochange'] = 'Ingenting ändrades, inget att göra.';
+$lang['profnoempty'] = 'Namn och e-postadress måste fyllas i.';
+$lang['profchanged'] = 'Användarprofilen uppdaterad.';
+$lang['pwdforget'] = 'Glömt ditt lösenord? Ordna ett nytt';
+$lang['resendna'] = 'Den här wikin stödjer inte utskick av lösenord.';
+$lang['resendpwd'] = 'Skicka nytt lösenord för';
+$lang['resendpwdmissing'] = 'Du måste fylla i alla fält.';
+$lang['resendpwdnouser'] = 'Den här användaren hittas inte i databasen.';
+$lang['resendpwdbadauth'] = 'Den här verifieringskoden är inte giltig. Kontrollera att du använde hela verifieringslänken.';
+$lang['resendpwdconfirm'] = 'En verifieringslänk har skickats med e-post.';
+$lang['resendpwdsuccess'] = 'Ditt nya lösenord har skickats med e-post.';
+$lang['license'] = 'Om inte annat angivet, innehållet i denna wiki är licensierat under följande licenser:';
+$lang['licenseok'] = 'Notera: Genom att ändra i denna sidan så accepterar du att licensiera ditt bidrag under följande licenser:';
+$lang['searchmedia'] = 'Sök efter filnamn:';
+$lang['searchmedia_in'] = 'Sök i %s';
+$lang['txt_upload'] = 'Välj fil att ladda upp';
+$lang['txt_filename'] = 'Ladda upp som (ej obligatoriskt)';
+$lang['txt_overwrt'] = 'Skriv över befintlig fil';
+$lang['lockedby'] = 'LÃ¥st av';
+$lang['lockexpire'] = 'Lås upphör att gälla';
+$lang['willexpire'] = 'Ditt redigeringslås för detta dokument kommer snart att upphöra.\nFör att undvika versionskonflikter bör du förhandsgranska ditt dokument för att förlänga redigeringslåset.';
+$lang['notsavedyet'] = 'Det finns ändringar som inte är sparade.\nÄr du säker på att du vill fortsätta?';
+$lang['rssfailed'] = 'Ett fel uppstod när detta RSS-flöde skulle hämtas: ';
+$lang['nothingfound'] = 'Inga filer hittades.';
+$lang['mediaselect'] = 'Mediafiler';
+$lang['fileupload'] = 'Ladda upp mediafiler';
+$lang['uploadsucc'] = 'Uppladdningen lyckades';
+$lang['uploadfail'] = 'Uppladdningen misslyckades, fel filskydd?';
+$lang['uploadwrong'] = 'Uppladdning nekad. Filändelsen är inte tillåten!';
+$lang['uploadexist'] = 'Filen finns redan. Ingenting gjordes.';
+$lang['uploadbadcontent'] = 'Det uppladdade innehållet stämde inte överens med filändelsen %s.';
+$lang['uploadspam'] = 'Uppladdningen stoppades av spärrlistan för spam.';
+$lang['uploadxss'] = 'Uppladdningen stoppades på grund av eventuellt skadligt innehåll.';
+$lang['uploadsize'] = 'Den uppladdade filen är för stor. (max. %s)';
+$lang['deletesucc'] = 'Filen "%s" har raderats.';
+$lang['deletefail'] = 'Kunde inte radera "%s" - kontrollera filskydd.';
+$lang['mediainuse'] = 'Filen "%s" har inte raderats - den används fortfarande.';
+$lang['namespaces'] = 'Namnrymder';
+$lang['mediafiles'] = 'Tillgängliga filer i';
+$lang['js']['searchmedia'] = 'Sök efter filer';
+$lang['js']['keepopen'] = 'Lämna fönstret öppet efter val av fil';
+$lang['js']['hidedetails'] = 'Dölj detaljer';
+$lang['js']['nosmblinks'] = 'Länkning till Windowsresurser fungerar bara med Microsofts Internet Explorer.
+Du kan fortfarande klippa och klistra in länken om du använder en annan webbläsare än MSIE.';
+$lang['js']['linkwiz'] = 'Snabbguide Länkar';
+$lang['js']['linkto'] = 'Länk till:';
+$lang['js']['del_confirm'] = 'Vill du verkligen radera?';
+$lang['js']['mu_btn'] = 'Ladda upp flera filer samtidigt';
+$lang['mediausage'] = 'Använd följande syntax för att referera till denna fil:';
+$lang['mediaview'] = 'Visa originalfilen';
+$lang['mediaroot'] = 'rot';
+$lang['mediaupload'] = 'Här kan du ladda upp en fil till den nuvarande namnrymden. För att skapa undernamnrymder, skriv dem före filnamnet under "Ladda upp som". Separera namnrymd och filnamn med kolon.';
+$lang['mediaextchange'] = 'Filändelsen ändrad från .%s till .%s!';
+$lang['reference'] = 'Referenser till';
+$lang['ref_inuse'] = 'Filen kan inte raderas eftersom den fortfarande används av följande sidor:';
+$lang['ref_hidden'] = 'Vissa referenser är på sidor som du inte har rätt att läsa';
+$lang['hits'] = 'Träffar';
+$lang['quickhits'] = 'Matchande sidnamn';
+$lang['toc'] = 'Innehållsförteckning';
+$lang['current'] = 'aktuell';
+$lang['yours'] = 'Din version';
+$lang['diff'] = 'visa skillnader mot aktuell version';
+$lang['diff2'] = 'Visa skillnader mellan valda versioner';
+$lang['line'] = 'Rad';
+$lang['breadcrumb'] = 'Spår';
+$lang['youarehere'] = 'Här är du';
+$lang['lastmod'] = 'Senast uppdaterad';
+$lang['by'] = 'av';
+$lang['deleted'] = 'raderad';
+$lang['created'] = 'skapad';
+$lang['restored'] = 'tidigare version återställd';
+$lang['external_edit'] = 'extern redigering';
+$lang['summary'] = 'Redigeringskommentar';
+$lang['noflash'] = '<a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> behövs för att visa detta innehåll.';
+$lang['download'] = 'Ladda ner kodfragmentet';
+$lang['mail_newpage'] = 'sida tillagd:';
+$lang['mail_changed'] = 'sida ändrad:';
+$lang['mail_new_user'] = 'Ny användare:';
+$lang['mail_upload'] = 'fil uppladdad:';
+$lang['qb_bold'] = 'Fet text';
+$lang['qb_italic'] = 'Kursiv text';
+$lang['qb_underl'] = 'Understruken text';
+$lang['qb_code'] = 'Kodtext';
+$lang['qb_strike'] = 'Överstruken text';
+$lang['qb_h1'] = 'Rubrik nivå 1';
+$lang['qb_h2'] = 'Rubrik nivå 2';
+$lang['qb_h3'] = 'Rubrik nivå 3';
+$lang['qb_h4'] = 'Rubrik nivå 4';
+$lang['qb_h5'] = 'Rubrik nivå 5';
+$lang['qb_h'] = 'Rubrik';
+$lang['qb_hs'] = 'Välj Rubrik';
+$lang['qb_hplus'] = 'Större Rubrik';
+$lang['qb_hminus'] = 'Mindre Rubrik';
+$lang['qb_hequal'] = 'Rubrik samma nivå.';
+$lang['qb_link'] = 'Intern Länk';
+$lang['qb_extlink'] = 'Extern Länk';
+$lang['qb_hr'] = 'Horisontell linje';
+$lang['qb_ol'] = 'Punkt i sorterad lista';
+$lang['qb_ul'] = 'Punkt i osorterad lista';
+$lang['qb_media'] = 'Lägg till bilder och andra filer';
+$lang['qb_sig'] = 'Infoga signatur';
+$lang['qb_smileys'] = 'Smileys';
+$lang['qb_chars'] = 'Specialtecken';
+$lang['upperns'] = 'hoppa till föräldernamnrymd';
+$lang['admin_register'] = 'Lägg till ny användare';
+$lang['metaedit'] = 'Redigera metadata';
+$lang['metasaveerr'] = 'Skrivning av metadata misslyckades';
+$lang['metasaveok'] = 'Metadata sparad';
+$lang['img_backto'] = 'Tillbaka till';
+$lang['img_title'] = 'Rubrik';
+$lang['img_caption'] = 'Bildtext';
+$lang['img_date'] = 'Datum';
+$lang['img_fname'] = 'Filnamn';
+$lang['img_fsize'] = 'Storlek';
+$lang['img_artist'] = 'Fotograf';
+$lang['img_copyr'] = 'Copyright';
+$lang['img_format'] = 'Format';
+$lang['img_camera'] = 'Kamera';
+$lang['img_keywords'] = 'Nyckelord';
+$lang['subscribe_success'] = 'Lade till %s i prenumerationslistan för %s';
+$lang['subscribe_error'] = 'Fel vid tillägg av %s i prenumerationslistan för %s';
+$lang['subscribe_noaddress'] = 'Det finns ingen adress knuten till ditt konto, det går inte att lägga till dig i prenumerationslistan';
+$lang['unsubscribe_success'] = 'Tog bort %s från prenumerationslistan för %s';
+$lang['unsubscribe_error'] = 'Fel vid borttagning %s från prenumerationslistan list för %s';
+$lang['authmodfailed'] = 'Felaktiga inställningar för användarautentisering. Var vänlig meddela wikiadministratören.';
+$lang['authtempfail'] = 'Tillfälligt fel på användarautentisering. Om felet kvarstår, var vänlig meddela wikiadministratören.';
+$lang['i_chooselang'] = 'Välj språk';
+$lang['i_installer'] = 'Installation av DokuWiki';
+$lang['i_wikiname'] = 'Wikins namn';
+$lang['i_enableacl'] = 'Aktivera behörighetslistan (ACL) (rekommenderas)';
+$lang['i_superuser'] = 'Användarnamn för administratören';
+$lang['i_problems'] = 'Installationsprogrammet hittade några problem som visas nedan. Du kan inte fortsätta innan du har fixat dem.';
+$lang['i_modified'] = 'Av säkerhetsskäl fungerar det här skriptet bara med en ny och omodifierad installation av Dokuwiki.
+ Du får antingen packa upp det nedladdade paketet på nytt, eller konsultera de kompletta
+ <a href="http://dokuwiki.org/install">instruktionerna för installation av Dokuwiki</a>';
+$lang['i_funcna'] = 'PHP-funktionen <code>%s</code> är inte tillgänglig. Kanske ditt webbhotell har avaktiverat den av någon anledning?';
+$lang['i_phpver'] = 'Din PHP-version <code>%s</code> är lägre än vad som krävs <code>%s</code>. Du behöver uppgradera din PHP-installation.';
+$lang['i_permfail'] = '<code>%s</code> är inte skrivbar av DokuWiki. Du behöver ändra filskyddet på den här katalogen!';
+$lang['i_confexists'] = '<code>%s</code> finns redan';
+$lang['i_writeerr'] = 'Kan inte skapa <code>%s</code>. Kontrollera filskyddet på kataloger/filer och skapa filen manuellt.';
+$lang['i_badhash'] = 'okänd eller ändrad dokuwiki.php (hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - felaktig eller blank';
+$lang['i_success'] = 'Konfigurationen avslutades utan fel. Du kan radera filen install.php nu. Fortsätt till
+ <a href="doku.php">din nya DokuWiki</a>.';
+$lang['i_failure'] = 'Fel uppstod vid skrivning av konfigurationsfilerna. Du kan behöva ordna till dem manuellt innan
+ du kan använda <a href="doku.php">din nya DokuWiki</a>.';
+$lang['i_policy'] = 'Initial ACL-policy';
+$lang['i_pol0'] = 'Öppen wiki (alla får läsa, skriva och ladda upp filer)';
+$lang['i_pol1'] = 'Publik wiki (alla får läsa, registrerade användare för skriva och ladda upp filer)';
+$lang['i_pol2'] = 'Sluten wiki (endast registrerade användare får läsa, skriva och ladda upp filer)';
+$lang['i_retry'] = 'Försök igen';
+$lang['mu_intro'] = 'Här kan du ladda upp flera filer på en gång. Klicka på bläddra-knappen för att lägga till dem i kön. Tryck på ladda upp när du är klar.';
+$lang['mu_gridname'] = 'Filnamn';
+$lang['mu_gridsize'] = 'Storlek';
+$lang['mu_gridstat'] = 'Status';
+$lang['mu_namespace'] = 'Namnrymd';
+$lang['mu_browse'] = 'Bläddra';
+$lang['mu_toobig'] = 'för stor';
+$lang['mu_ready'] = 'redo att ladda upp';
+$lang['mu_done'] = 'komplett';
+$lang['mu_fail'] = 'misslyckades';
+$lang['mu_authfail'] = 'sessionen över tid';
+$lang['mu_progress'] = '@PCT@% uppladdade';
+$lang['mu_filetypes'] = 'Tillåtna filtyper';
+$lang['mu_info'] = 'filerna uppladdade.';
+$lang['mu_lasterr'] = 'Senaste fel:';
+$lang['recent_global'] = 'Du bevakar ändringar i namnrymden <b>%s</b>. Du kan också titta på <a href="%s">senaste ändringar för hela wikin</a>.';
+$lang['years'] = '%d år sedan';
+$lang['months'] = '%d månader sedan';
+$lang['weeks'] = '%d veckor sedan';
+$lang['days'] = '%d dagar sedan';
+$lang['hours'] = '%d timmar sedan';
+$lang['minutes'] = '%d minuter sedan';
+$lang['seconds'] = '%d sekunder sedan';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/locked.txt
new file mode 100644
index 000000000..cb64eaf02
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/locked.txt
@@ -0,0 +1,3 @@
+====== Sidan låst ======
+
+Den här sidan är för närvarande låst för redigering av en annan användare. Du måste vänta tills den användaren är klar med sin redigering, eller tills dess att dokumentlåset upphör att gälla.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/login.txt
new file mode 100644
index 000000000..5f0e3b262
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/login.txt
@@ -0,0 +1,4 @@
+====== Logga in ======
+
+Du är inte inloggad! Ange ditt användarnamn och lösenord i formuläret nedan för att logga in. Stöd för cookies måste vara aktiverat i din webbläsare för att du skall kunna logga in.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/mailtext.txt
new file mode 100644
index 000000000..616bb4eee
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/mailtext.txt
@@ -0,0 +1,17 @@
+En sida i din DokuWiki har lagts till eller ändrats. Här är detaljerna:
+
+Datum : @DATE@
+Webbläsare : @BROWSER@
+IP-adress : @IPADDRESS@
+Datornamn : @HOSTNAME@
+Tidigare version : @OLDPAGE@
+Aktuell version : @NEWPAGE@
+Redigeringskommentar : @SUMMARY@
+Användare : @USER@
+
+@DIFF@
+
+
+--
+Detta meddelande har skapats av DokuWiki på
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/newpage.txt
new file mode 100644
index 000000000..3e0951056
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/newpage.txt
@@ -0,0 +1,3 @@
+====== Det här ämnet finns inte ännu ======
+
+Du har följt en länk till ett ämne som inte finns ännu. Du kan skapa det genom att klicka på ''Skapa den här sidan''.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/norev.txt
new file mode 100644
index 000000000..46df86235
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/norev.txt
@@ -0,0 +1,4 @@
+====== Det finns ingen sådan version ======
+
+Den angivna versionen finns inte. Använd ''Historik'' för en förteckning över de versioner som finns av detta dokument.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/preview.txt
new file mode 100644
index 000000000..5c3a65341
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/preview.txt
@@ -0,0 +1,4 @@
+====== Förhandsgranskning ======
+
+Detta är en förhandstitt på hur din text kommer att se ut när den visas. Kom ihåg: Den är **inte sparad** ännu!
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/pwconfirm.txt
new file mode 100644
index 000000000..541437716
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/pwconfirm.txt
@@ -0,0 +1,16 @@
+Hej @FULLNAME@!
+
+Någon har bett om ett nytt lösenord för ditt konto på @TITLE@
+(@DOKUWIKIURL@)
+
+Om det inte var du som bad om ett nytt lösenord kan du helt
+enkelt ignorera det här brevet.
+
+För att bekräfta att förfrågan verkligen kom från dig, var vänlig
+och använd följande länk.
+
+@CONFIRM@
+
+--
+Detta meddelande har skapats av DokuWiki på
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/read.txt
new file mode 100644
index 000000000..5391b3ddf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/read.txt
@@ -0,0 +1,2 @@
+Denna sida är skrivskyddad. Du kan titta på källkoden, men inte ändra den. Kontakta administratören om du anser att du bör kunna ändra sidan.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/recent.txt
new file mode 100644
index 000000000..d8c39dfa5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/recent.txt
@@ -0,0 +1,5 @@
+====== Senaste ändringarna ======
+
+Följande sidor/dokument har nyligen uppdaterats.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/register.txt
new file mode 100644
index 000000000..e75d2a672
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/register.txt
@@ -0,0 +1,4 @@
+====== Registrera dig som användare ======
+
+Fyll i all information som efterfrågas i formuläret nedan för att skapa ett nytt konto i denna wiki. Var särskilt noga med att ange en **giltig e-postadress** - om du inte blir ombedd att ange ett lösenord här kommer ett nytt lösenord att skickas till den adressen. Användarnamnet skall vara ett giltigt [[doku>pagename|sidnamn]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/registermail.txt
new file mode 100644
index 000000000..c0edc3728
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/registermail.txt
@@ -0,0 +1,14 @@
+En ny användare har registrerat sig. Här är detaljerna:
+
+Användarnamn : @NEWUSER@
+Namn : @NEWNAME@
+E-post : @NEWEMAIL@
+
+Datum : @DATE@
+Webbläsare : @BROWSER@
+IP-adress : @IPADDRESS@
+Datornamn : @HOSTNAME@
+
+--
+Detta meddelande har skapats av DokuWiki på
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/resendpwd.txt
new file mode 100644
index 000000000..0757ee9dd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/resendpwd.txt
@@ -0,0 +1,4 @@
+====== Skicka nytt lösenord ======
+
+Fyll i ditt användarnamn i formuläret nedan för att få ett nytt lösenord till ditt konto i denna wiki. En länk för verifiering kommer att skickas till din registrerade e-postadress.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/revisions.txt
new file mode 100644
index 000000000..b9dfc5600
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/revisions.txt
@@ -0,0 +1,4 @@
+====== Historik ======
+
+Här visas tidigare versioner av detta dokument. För att återställa dokumentet till en tidigare version, välj den önskade versionen nedan, klicka på ''Redigera sida'' och spara sedan dokumentet.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/searchpage.txt
new file mode 100644
index 000000000..bcc88cd95
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/searchpage.txt
@@ -0,0 +1,5 @@
+====== Sök ======
+
+Nedan ser du resultatet av sökningen. Om du inte hittar det du letar efter, så kan du skapa eller redigera sidan med någon av knapparna.
+
+===== Resultat =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/showrev.txt
new file mode 100644
index 000000000..a79b30b11
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/showrev.txt
@@ -0,0 +1,2 @@
+**Detta är en gammal version av dokumentet!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/stopwords.txt
new file mode 100644
index 000000000..357659673
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/stopwords.txt
@@ -0,0 +1,129 @@
+# This is a list of words the indexer ignores, one word per line
+# When you edit this file be sure to use UNIX line endings (single newline)
+# No need to include words shorter than 3 chars - these are ignored anyway
+# This list is based upon the ones found at http://www.ranks.nl/stopwords/
+about
+are
+and
+you
+your
+them
+their
+com
+for
+from
+into
+how
+that
+the
+this
+was
+what
+when
+where
+who
+will
+with
+und
+the
+www
+
+# Följande svenska stoppord kommer från
+# http://snowball.tartarus.org/algorithms/swedish/stop.txt. Ord kortare än tre
+# bokstäver har tagits bort (se kommentaren ovan) Se även
+# http://www.cling.gu.se/theses/2004/cl0sknub_cl0tsven.pdf. Vi behåller de
+# engelska orden eftersom det är rätt vanligt med engelska texter.
+och
+det
+att
+jag
+hon
+som
+han
+den
+med
+var
+sig
+för
+till
+men
+ett
+hade
+icke
+mig
+henne
+sin
+har
+inte
+hans
+honom
+skulle
+hennes
+där
+min
+man
+vid
+kunde
+något
+från
+när
+efter
+upp
+dem
+vara
+vad
+över
+dig
+kan
+sina
+här
+mot
+alla
+under
+någon
+eller
+allt
+mycket
+sedan
+denna
+själv
+detta
+utan
+varit
+hur
+ingen
+mitt
+bli
+blev
+oss
+din
+dessa
+några
+deras
+blir
+mina
+samma
+vilken
+sådan
+vår
+blivit
+dess
+inom
+mellan
+sådant
+varför
+varje
+vilka
+ditt
+vem
+vilket
+sitta
+sådana
+vart
+dina
+vars
+vårt
+våra
+ert
+era
+vilkas
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/subscribermail.txt
new file mode 100644
index 000000000..147585caf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/subscribermail.txt
@@ -0,0 +1,24 @@
+Hej!
+
+Sidan @PAGE@ i wikin @TITLE@ har ändrats.
+Här är ändringarna:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Datum : @DATE@
+Användare : @USER@
+Kommentar : @SUMMARY@
+Gammal sida : @OLDPAGE@
+Ny sida : @NEWPAGE@
+
+För att säga upp prenumerationen på den här sidan,
+logga in i wikin på
+@DOKUWIKIURL@ och gå till
+@NEWPAGE@
+där du väljer 'Säg upp prenumeration på ändringar'.
+
+--
+Detta meddelande har skapats av DokuWiki på
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/updateprofile.txt
new file mode 100644
index 000000000..98ed6e33f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/updateprofile.txt
@@ -0,0 +1,5 @@
+====== Uppdatera din användarprofil ======
+
+Du behöver bara fylla i de fält som du vill ändra. Du kan inte ändra ditt användarnamn.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/uploadmail.txt
new file mode 100644
index 000000000..5963adcbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/uploadmail.txt
@@ -0,0 +1,14 @@
+En fil har laddats upp till din DokuWiki. Här är detaljerna:
+
+Fil : @MEDIA@
+Datum : @DATE@
+Webbläsare : @BROWSER@
+IP-adress : @IPADDRESS@
+Datornamn : @HOSTNAME@
+Storlek : @SIZE@
+MIME-typ : @MIME@
+Användare : @USER@
+
+--
+Detta meddelande har skapats av DokuWiki på
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/wordblock.txt
new file mode 100644
index 000000000..e1b632ce4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/wordblock.txt
@@ -0,0 +1,4 @@
+====== Stoppade SPAM ======
+
+Dina ändringar har **inte** sparats på grund av att de innehåller ett eller flera ord som spärrats. Om du har försökt att spara skräp, s k ''spam'' -- Fyyy på dig! Om du anser att det här beror på ett fel, kontakta wikins administratör.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/admin.txt
new file mode 100644
index 000000000..677e779b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/admin.txt
@@ -0,0 +1,3 @@
+====== งานธุรà¸à¸²à¸£à¸„วบคุมระบบ ======
+
+ด้านล่างนี้คุณสามารถพบรายà¸à¸²à¸£à¸‡à¸²à¸™à¸„วบคุมระบบทั้งหมดในโดà¸à¸¸à¸§à¸´à¸à¸´ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/adminplugins.txt
new file mode 100644
index 000000000..85a6b17bd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/adminplugins.txt
@@ -0,0 +1 @@
+====== ปลั๊à¸à¸­à¸´à¸™à¹€à¸ªà¸£à¸´à¸¡ ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/backlinks.txt
new file mode 100644
index 000000000..fff6898d8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/backlinks.txt
@@ -0,0 +1,3 @@
+====== ลิงค์à¸à¸¥à¸±à¸š(Backlinks) ======
+
+นี่คือรายชื่อเพจที่ชี้ลิงค์à¸à¸¥à¸±à¸šà¸¡à¸²à¸¢à¸±à¸‡à¹€à¸žà¸ˆà¸›à¸±à¸ˆà¸ˆà¸¸à¸šà¸±à¸™ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/conflict.txt
new file mode 100644
index 000000000..5e786a6b3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/conflict.txt
@@ -0,0 +1,5 @@
+====== มีเนื้อหารุ่นใหม่à¸à¸§à¹ˆà¸²à¹€à¸à¸´à¸”ขึ้น ======
+
+มีเอà¸à¸ªà¸²à¸£à¸£à¸¸à¹ˆà¸™à¹ƒà¸«à¸¡à¹ˆà¸à¸§à¹ˆà¸²à¸—ี่คุณได้à¹à¸à¹‰à¹„ขไว้ มันเà¸à¸´à¸”ขึ้นเมื่อผู้ใช้รายอื่นได้ทำà¸à¸²à¸£à¹à¸à¹‰à¹„ขเอà¸à¸ªà¸²à¸£à¹ƒà¸™à¸‚ณะที่ขณะเดียวà¸à¸±à¸™à¸à¸±à¸šà¸—ี่คุณà¸à¸³à¸¥à¸±à¸‡à¹à¸à¹‰à¹„ขมัน
+
+ให้ตรวจสอบความà¹à¸•à¸à¸•à¹ˆà¸²à¸‡à¸—ี่à¹à¸ªà¸”งไว้ด้านล่างนี้ให้ทั่วถึง, à¹à¸¥à¹‰à¸§à¸•à¸±à¸”สินใจว่าจะเà¸à¹‡à¸šà¸‰à¸šà¸±à¸šà¹„หนไว้ ถ้าคุณเลือภ"บันทึà¸", ฉบับของคุณจะถูà¸à¸šà¸±à¸™à¸—ึà¸à¹„ว้ หรือà¸à¸” "ยà¸à¹€à¸¥à¸´à¸" เพื่อเà¸à¹‡à¸šà¸‰à¸šà¸±à¸šà¸›à¸±à¸ˆà¸ˆà¸¸à¸šà¸±à¸™ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/denied.txt
new file mode 100644
index 000000000..88b012a67
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/denied.txt
@@ -0,0 +1,3 @@
+====== ปà¸à¸´à¹€à¸ªà¸˜à¸ªà¸´à¸—ธิ์ ======
+
+ขออภัย คุณไม่มีสิทธิ์เพียงพอที่จะดำเนินà¸à¸²à¸£à¸•à¹ˆà¸­ บางทีคุณอาจจะลืมล็อà¸à¸­à¸´à¸™? \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/diff.txt
new file mode 100644
index 000000000..e21759e03
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/diff.txt
@@ -0,0 +1,3 @@
+====== ความà¹à¸•à¸à¸•à¹ˆà¸²à¸‡ ======
+
+นี่เป็นà¸à¸²à¸£à¹à¸ªà¸”งความà¹à¸•à¸à¸•à¹ˆà¸²à¸‡à¸£à¸°à¸«à¸§à¹ˆà¸²à¸‡à¹€à¸žà¸ˆà¸ªà¸­à¸‡à¸£à¸¸à¹ˆà¸™ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/draft.txt
new file mode 100644
index 000000000..37b1841a2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/draft.txt
@@ -0,0 +1,5 @@
+====== พบไฟล์ฉบับร่าง ======
+
+เซสชั่นที่คุณà¹à¸à¹‰à¹„ขฉบับล่าสุดในเพจนี้ไม่ถูà¸à¸ˆà¸±à¸”เà¸à¹‡à¸šà¹ƒà¸«à¹‰à¸ªà¸¡à¸šà¸¹à¸£à¸“์ โดà¸à¸¸à¸§à¸´à¸à¸´à¹„ด้ทำà¸à¸²à¸£à¸šà¸±à¸™à¸—ึà¸à¸‰à¸šà¸±à¸šà¸£à¹ˆà¸²à¸‡à¹ƒà¸«à¹‰à¹‚ดยอัตโนมัติในระหว่างที่คุณà¸à¸³à¸¥à¸±à¸‡à¸—ำงาน อันซึ่งขณะนี้คุณอาจต้องà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸¡à¸±à¸™à¹€à¸žà¸·à¹ˆà¸­à¹à¸à¹‰à¹„ขต่อ ด้านล่างนี้คุณจะเห็นข้อมูลที่ถูà¸à¸šà¸±à¸™à¸—ึà¸à¹„ว้จาà¸à¸à¸²à¸£à¸—ำงานครั้งล่าสุด
+
+à¸à¸£à¸¸à¸“าตัดสินใจว่าคุณต้องà¸à¸²à¸£à¸—ี่จะ //à¸à¸¹à¹‰à¸„ืน//งานฉบับที่à¹à¸à¹‰à¹„ขล่าสุด, //ลบทิ้ง/// ตัวฉบับร่างที่ได้บันทึà¸à¸­à¸±à¸•à¹‚นมัติไว้, //ยà¸à¹€à¸¥à¸´à¸// à¸à¸£à¸°à¸šà¸§à¸™à¸à¸²à¸£à¹à¸à¹‰à¹„ขนี้ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/edit.txt
new file mode 100644
index 000000000..81dc0000b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/edit.txt
@@ -0,0 +1 @@
+à¹à¸à¹‰à¹„ขหน้านี้à¹à¸¥à¹‰à¸§à¸à¸” "บันทึà¸" ให้อ่าน[[wiki:syntax|ไวยà¸à¸£à¸“์วิà¸à¸´]] สำหรับค้นหาไวยà¸à¸£à¸“์ที่ใช้ในวิà¸à¸´ à¹à¸¥à¸°à¸à¸£à¸¸à¸“าà¹à¸à¹‰à¹„ขเฉพาะเพจที่คุณสามารถ**ปรับปรุง**ให้มันดีขึ้นได้, ถ้าหาà¸à¸„ุณต้องà¸à¸²à¸£à¸—ี่จะทดสอบอะไรบางอย่าง ให้ไปลองเล่นครั้งà¹à¸£à¸à¹„ด้ใน[[playground:playground|สนามเด็à¸à¹€à¸¥à¹ˆà¸™]] \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/editrev.txt
new file mode 100644
index 000000000..28e6760d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/editrev.txt
@@ -0,0 +1,2 @@
+**คุณได้โหลดเอาเอà¸à¸ªà¸²à¸£à¸‰à¸šà¸±à¸šà¹€à¸à¹ˆà¸²à¸‚ึ้นมา!** ถ้าคุณบันทึà¸à¸¡à¸±à¸™ คุณจะสร้างเอà¸à¸ªà¸²à¸£à¸£à¸¸à¹ˆà¸™à¹ƒà¸«à¸¡à¹ˆà¸”้วยข้อมูลเหล่านี้
+---- \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/index.txt
new file mode 100644
index 000000000..eb32a64c0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/index.txt
@@ -0,0 +1,2 @@
+====== ดัชนี ======
+นี่คือดัชนีรวมทุà¸à¹€à¸žà¸ˆ เรียงตาม[[doku>namespaces|เนมสเปซ]] \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/lang.php
new file mode 100644
index 000000000..e7937ecbc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/lang.php
@@ -0,0 +1,249 @@
+<?php
+/**
+ * th language file
+ *
+ * This file was initially built by fetching translations from other
+ * Wiki projects. See the @url lines below. Additional translations
+ * and fixes where done for DokuWiki by the people mentioned in the
+ * lines starting with @author
+ *
+ * @url http://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/languages/messages/MessagesTh.php?view=co
+ * @author Komgrit Niyomrath <n.komgrit@gmail.com>
+ * @author Kittithat Arnontavilas mrtomyum@gmail.com
+ * @author Arthit Suriyawongkul <arthit@gmail.com>
+ * @author Kittithat Arnontavilas <mrtomyum@gmail.com>
+ * @author Thanasak Sompaisansin <jombthep@gmail.com>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '“ ';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '‘';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = '’';
+$lang['btn_edit'] = 'à¹à¸à¹‰à¹„ขหน้านี้';
+$lang['btn_source'] = 'ดูโค้ด';
+$lang['btn_show'] = 'à¹à¸ªà¸”งเพจ';
+$lang['btn_create'] = 'สร้างเพจนี้';
+$lang['btn_search'] = 'ค้นหา';
+$lang['btn_save'] = 'บันทึà¸';
+$lang['btn_preview'] = 'à¹à¸ªà¸”งตัวอย่าง';
+$lang['btn_top'] = 'à¸à¸¥à¸±à¸šà¸ªà¸¹à¹ˆà¸”้านบน';
+$lang['btn_newer'] = '<< ใหม่à¸à¸§à¹ˆà¸²';
+$lang['btn_older'] = 'เà¸à¹ˆà¸²à¸à¸§à¹ˆà¸² >>';
+$lang['btn_revs'] = 'ฉบับเà¸à¹ˆà¸²à¹†';
+$lang['btn_recent'] = 'ปรับปรุงล่าสุด';
+$lang['btn_upload'] = 'ส่งข้อมูลเข้าสู่ระบบ';
+$lang['btn_cancel'] = 'ยà¸à¹€à¸¥à¸´à¸';
+$lang['btn_index'] = 'ดัชนี';
+$lang['btn_secedit'] = 'à¹à¸à¹‰à¹„ข';
+$lang['btn_login'] = 'ล็อà¸à¸­à¸´à¸™';
+$lang['btn_logout'] = 'ล็อà¸à¹€à¸­à¸²à¸•à¹Œ';
+$lang['btn_admin'] = 'ผู้ควบคุมระบบ';
+$lang['btn_update'] = 'ปรับปรุง';
+$lang['btn_delete'] = 'ลบ';
+$lang['btn_back'] = 'ย้อนà¸à¸¥à¸±à¸š';
+$lang['btn_backlink'] = 'หน้าที่ลิงà¸à¹Œà¸¡à¸²';
+$lang['btn_backtomedia'] = 'à¸à¸¥à¸±à¸šà¹„ปยังหน้าเลือà¸à¹„ฟล์สื่อ';
+$lang['btn_subscribe'] = 'เà¸à¹‰à¸²à¸”ู';
+$lang['btn_unsubscribe'] = 'เลิà¸à¹€à¸à¹‰à¸²à¸”ู';
+$lang['btn_subscribens'] = 'สมัครเพื่อตามà¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡à¹€à¸™à¸¡à¸ªà¹€à¸›à¸‹';
+$lang['btn_unsubscribens'] = 'ยà¸à¹€à¸¥à¸´à¸à¸ªà¸¡à¸±à¸„รเพื่อตามà¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡à¹€à¸™à¸¡à¸ªà¹€à¸›à¸‹';
+$lang['btn_profile'] = 'à¹à¸à¹‰à¸‚้อมูลผู้ใช้';
+$lang['btn_reset'] = 'เริ่มใหม่';
+$lang['btn_resendpwd'] = 'ลืมรหัส ส่งให้ใหม่ทางอีเมล';
+$lang['btn_draft'] = 'à¹à¸à¹‰à¹„ขเอà¸à¸ªà¸²à¸£à¸‰à¸šà¸±à¸šà¸£à¹ˆà¸²à¸‡';
+$lang['btn_recover'] = 'à¸à¸¹à¹‰à¸„ืนเอà¸à¸ªà¸²à¸£à¸‰à¸šà¸±à¸šà¸£à¹ˆà¸²à¸‡';
+$lang['btn_draftdel'] = 'ลบเอà¸à¸ªà¸²à¸£à¸‰à¸šà¸±à¸šà¸£à¹ˆà¸²à¸‡';
+$lang['btn_revert'] = 'à¸à¸¹à¹‰à¸„ืน';
+$lang['loggedinas'] = 'ลงชื่อเข้าใช้เป็น';
+$lang['user'] = 'ชื่อผู้ใช้:';
+$lang['pass'] = 'รหัสผ่าน';
+$lang['newpass'] = 'รหัสผ่านใหม่';
+$lang['oldpass'] = 'รหัสผ่านเดิม:';
+$lang['passchk'] = 'พิมพ์รหัสผ่านอีà¸à¸„รั้ง:';
+$lang['remember'] = 'จำชื่อà¹à¸¥à¸°à¸£à¸«à¸±à¸ªà¸œà¹ˆà¸²à¸™';
+$lang['fullname'] = 'ชื่อจริง:';
+$lang['email'] = 'อีเมล:';
+$lang['register'] = 'สร้างบัà¸à¸Šà¸µà¸œà¸¹à¹‰à¹ƒà¸Šà¹‰';
+$lang['profile'] = 'ข้อมูลส่วนตัวผู้ใช้';
+$lang['badlogin'] = 'ขัดข้อง:';
+$lang['minoredit'] = 'เป็นà¸à¸²à¸£à¹à¸à¹‰à¹„ขเล็à¸à¸™à¹‰à¸­à¸¢';
+$lang['draftdate'] = 'บันทึà¸à¸‰à¸šà¸±à¸šà¸£à¹ˆà¸²à¸‡à¹€à¸¡à¸·à¹ˆà¸­';
+$lang['nosecedit'] = 'ในช่วงเวลาที่ผ่านมานี้เพจถูà¸à¹à¸à¹‰à¹„ขไปà¹à¸¥à¹‰à¸§, เนื้อหาในเซคชั่นนี้ไม่ทันสมัย à¸à¸£à¸¸à¸“าโหลดเพจใหม่ทั้งหน้าà¹à¸—น';
+$lang['regmissing'] = 'ขออภัย คุณต้องà¸à¸£à¸­à¸à¹ƒà¸«à¹‰à¸„รบทุà¸à¸Šà¹ˆà¸­à¸‡';
+$lang['reguexists'] = 'ชื่อบัà¸à¸Šà¸µà¸—ี่ใส่นั้นมีผู้อื่นได้ใช้à¹à¸¥à¹‰à¸§ à¸à¸£à¸¸à¸“าเลือà¸à¸Šà¸·à¹ˆà¸­à¸œà¸¹à¹‰à¹ƒà¸Šà¹‰à¸­à¸·à¹ˆà¸™';
+$lang['regsuccess'] = 'ผู้ใช้ถูà¸à¸ªà¸£à¹‰à¸²à¸‡à¹à¸¥à¹‰à¸§ à¹à¸¥à¸°à¸£à¸«à¸±à¸ªà¸œà¹ˆà¸²à¸™à¹„ด้ถูà¸à¸ªà¹ˆà¸‡à¹„ปทางอีเมลà¹à¸¥à¹‰à¸§';
+$lang['regsuccess2'] = 'ชื่อบัà¸à¸Šà¸µà¹„ด้ถูà¸à¸ªà¸£à¹‰à¸²à¸‡à¸‚ึ้น';
+$lang['regmailfail'] = 'ดูเหมือนจะมีข้อผิดพลาดในà¸à¸²à¸£à¸ªà¹ˆà¸‡à¸£à¸«à¸±à¸ªà¸œà¹ˆà¸²à¸™à¸—างเมล์ à¸à¸£à¸¸à¸“าติดต่อผู้ดูà¹à¸¥à¸£à¸°à¸šà¸š';
+$lang['regbadmail'] = 'รูปà¹à¸šà¸šà¸­à¸µà¹€à¸¡à¸¥à¹„ม่ถูà¸à¸•à¹‰à¸­à¸‡ ให้ใส่อีเมลให้ถูà¸à¸•à¹‰à¸­à¸‡à¸•à¸²à¸¡à¸£à¸¹à¸›à¹à¸šà¸šà¸­à¸µà¹€à¸¡à¸¥ หรือให้ทำช่องอีเมลให้ว่างà¹à¸—น';
+$lang['regbadpass'] = 'รหัสผ่านที่ใส่ไม่ถูà¸à¸•à¹‰à¸­à¸‡';
+$lang['regpwmail'] = 'รหัสผ่านเข้าโดà¸à¸¸à¸§à¸´à¸à¸´à¸‚องคุณ';
+$lang['reghere'] = 'คุณยังไม่มีบัà¸à¸Šà¸µà¸«à¸£à¸·à¸­ à¸à¹‡à¹à¸„่สร้างขึ้นมาสัà¸à¸­à¸±à¸™à¸«à¸™à¸¶à¹ˆà¸‡';
+$lang['profna'] = 'วิà¸à¸´à¸™à¸µà¹‰à¹„ม่รองรับà¸à¸²à¸£à¹à¸à¹‰à¹„ขข้อมูลส่วนตัว';
+$lang['profnochange'] = 'ไม่มีà¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡à¸‚้อมูลส่วนตัว';
+$lang['profnoempty'] = 'ไม่อนุà¸à¸²à¸•à¸´à¹ƒà¸«à¹‰à¹€à¸§à¹‰à¸™à¸§à¹ˆà¸²à¸‡à¸Šà¸·à¹ˆà¸­ หรืออีเมล';
+$lang['profchanged'] = 'ปรับปรุงข้อมูลส่วนตัวผู้ใช้สำเร็จ';
+$lang['pwdforget'] = 'ลืมรหัสผ่านหรือ? เอาอันใหม่สิ';
+$lang['resendna'] = 'วิà¸à¸´à¸™à¸µà¹‰à¹„ม่รองรับà¸à¸²à¸£à¸ªà¹ˆà¸‡à¸£à¸«à¸±à¸ªà¸œà¹ˆà¸²à¸™à¸‹à¹‰à¸³';
+$lang['resendpwd'] = 'ส่งรหัสผ่านใหม่ให้à¸à¸±à¸š';
+$lang['resendpwdmissing'] = 'ขออภัย, คุณต้องà¸à¸£à¸­à¸à¸—ุà¸à¸Šà¹ˆà¸­à¸‡';
+$lang['resendpwdnouser'] = 'ขออภัย, เราไม่พบผู้ใช้คนนี้ในà¸à¸²à¸™à¸‚้อมูลของเรา';
+$lang['resendpwdbadauth'] = 'ขออภัย, รหัสนี้ยังใช้ไม่ได้ à¸à¸£à¸¸à¸“าตรวจสอบว่าคุณà¸à¸”ลิ้งค์ยืนยันà¹à¸¥à¹‰à¸§';
+$lang['resendpwdconfirm'] = 'อีเมลยืนยันได้ถูà¸à¸ªà¹ˆà¸‡à¹„ปที่อีเมลที่ได้ถูà¸à¹€à¸ªà¸™à¸­ à¸à¹ˆà¸­à¸™à¸—ี่อีเมลจะถูà¸à¸ªà¹ˆà¸‡à¹„ปที่ชื่อบัà¸à¸Šà¸µà¸™à¸±à¹‰à¸™ คุณต้องปà¸à¸´à¸šà¸±à¸•à¸´à¸•à¸²à¸¡à¸„ำà¹à¸™à¸°à¸™à¸³à¹ƒà¸™à¸­à¸µà¹€à¸¡à¸¥à¹€à¸žà¸·à¹ˆà¸­à¸¢à¸·à¸™à¸¢à¸±à¸™à¸§à¹ˆà¸²à¸«à¸¡à¸²à¸¢à¹€à¸¥à¸¢à¸šà¸±à¸à¸Šà¸µà¸™à¸±à¹‰à¸™à¹€à¸›à¹‡à¸™à¸‚องคุณ';
+$lang['resendpwdsuccess'] = 'รหัสผ่านใหม่ของคุณได้ถูà¸à¸ªà¹ˆà¸‡à¹ƒà¸«à¹‰à¹à¸¥à¹‰à¸§à¸—างอีเมล';
+$lang['license'] = 'เว้นà¹à¸•à¹ˆà¸ˆà¸°à¹„ด้à¹à¸ˆà¹‰à¸‡à¹„ว้เป็นอื่นใด เนื้อหาบนวิà¸à¸´à¸™à¸µà¹‰à¸–ูà¸à¸à¸³à¸«à¸™à¸”สิทธิ์ไว้ภายใต้สัà¸à¸à¸²à¸­à¸™à¸¸à¸à¸²à¸•à¸´à¸•à¹ˆà¸­à¹„ปนี้:';
+$lang['licenseok'] = 'โปรดทราบ: เมื่อเริ่มà¹à¸à¹‰à¹„ขหน้านี้ ถือว่าคุณตà¸à¸¥à¸‡à¹ƒà¸«à¹‰à¸ªà¸´à¸—ธิ์à¸à¸±à¸šà¹€à¸™à¸·à¹‰à¸­à¸«à¸²à¸‚องคุณอยู่ภายใต้สัà¸à¸à¸²à¸­à¸™à¸¸à¸à¸²à¸•à¸´à¸™à¸µà¹‰';
+$lang['searchmedia'] = 'สืบค้นไฟล์ชื่อ:';
+$lang['searchmedia_in'] = 'สืบค้นใน %s';
+$lang['txt_upload'] = 'เลือà¸à¹„ฟล์ที่จะอัพโหลด';
+$lang['txt_filename'] = 'อัพโหลดเป็น(ตัวเลือà¸)';
+$lang['txt_overwrt'] = 'เขียนทับไฟล์ที่มีอยู่à¹à¸¥à¹‰à¸§';
+$lang['lockedby'] = 'ตอนนี้ถูà¸à¸¥à¹Šà¸­à¸„โดย';
+$lang['lockexpire'] = 'à¸à¸²à¸£à¸¥à¹Šà¸­à¸„จะหมดอายุเมื่อ';
+$lang['willexpire'] = 'à¸à¸²à¸£à¸¥à¹Šà¸­à¸„เพื่อà¹à¸à¹‰à¹„ขหน้านี้à¸à¸³à¸¥à¸±à¸‡à¸ˆà¸°à¸«à¸¡à¸”เวลาในอีภ\n นาที เพื่อที่จะหลีà¸à¹€à¸¥à¸µà¹ˆà¸¢à¸‡à¸‚้อขัดà¹à¸¢à¹‰à¸‡à¹ƒà¸«à¹‰à¹ƒà¸Šà¹‰à¸›à¸¸à¹ˆà¸¡ "Preview" เพื่อรีเซ็ทเวลาใหม่';
+$lang['notsavedyet'] = 'à¸à¸²à¸£à¹à¸à¹‰à¹„ขที่ไม่ได้บันทึà¸à¸ˆà¸°à¸ªà¸¹à¸à¸«à¸²à¸¢ \n ต้องà¸à¸²à¸£à¸—ำต่อจริงๆหรือ?';
+$lang['rssfailed'] = 'มีข้อผิดพลาดขณะดูดฟีดนี้';
+$lang['nothingfound'] = 'ไม่พบสิ่งใด';
+$lang['mediaselect'] = 'ไฟล์สื่อ';
+$lang['fileupload'] = 'อัปโหลด';
+$lang['uploadsucc'] = 'อัปโหลดสำเร็จ';
+$lang['uploadfail'] = 'เà¸à¸´à¸”ความขัดข้องในà¸à¸²à¸£à¸­à¸±à¸›à¹‚หลด';
+$lang['uploadwrong'] = 'à¸à¸²à¸£à¸­à¸±à¸žà¹‚หลดถูà¸à¸›à¸à¸´à¹€à¸ªà¸˜ ส่วนขยายไฟล์นี้ต้องห้าม!';
+$lang['uploadexist'] = 'ไฟล์นี้มีอยู่à¹à¸¥à¹‰à¸§ ไม่มีà¸à¸²à¸£à¸šà¸±à¸™à¸—ึà¸à¹ƒà¸”ๆเà¸à¸´à¸”ขึ้น';
+$lang['uploadbadcontent'] = 'เนื้อหาที่อัพโหลดไม่ตรงà¸à¸±à¸šà¸ªà¹ˆà¸§à¸™à¸‚ยายไฟล์ %s ';
+$lang['uploadspam'] = 'à¸à¸²à¸£à¸­à¸±à¸žà¹‚หลดถูà¸à¸à¸µà¸”à¸à¸±à¸™à¸ˆà¸²à¸à¸šà¸±à¸à¸Šà¸µà¸”ำสà¹à¸›à¸¡';
+$lang['uploadxss'] = 'ไฟล์นี้มีส่วนประà¸à¸­à¸šà¸‚องโค้ดเอชทีเอ็มà¹à¸­à¸¥à¸«à¸£à¸·à¸­à¸ªà¸„ริปต์ ซึ่งอาจà¸à¹ˆà¸­à¹ƒà¸«à¹‰à¹€à¸à¸´à¸”ความผิดพลาดในà¸à¸²à¸£à¹à¸ªà¸”งผลของเว็บเบราว์เซอร์';
+$lang['uploadsize'] = 'ไฟล์ที่อัพโหลดใหà¸à¹ˆà¹€à¸à¸´à¸™à¹„ป (สูงสุด %s)';
+$lang['deletesucc'] = 'ไฟล์ "%s" ถูà¸à¸¥à¸š';
+$lang['deletefail'] = '"%s" ไม่สามารถลบได้ - ให้ตรวจสอบสิทธิ์à¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‚องคุณ';
+$lang['mediainuse'] = 'ไฟล์ "%s" ไม่ได้ถูà¸à¸¥à¸š - มันถูà¸à¹ƒà¸Šà¹‰à¸­à¸¢à¸¹à¹ˆ';
+$lang['namespaces'] = 'เนมสเปซ';
+$lang['mediafiles'] = 'มีไฟล์พร้อมใช้อยู่ใน';
+$lang['js']['searchmedia'] = 'ค้นหาไฟล์';
+$lang['js']['keepopen'] = 'เปิดหน้าต่างไว้ระหว่างที่เลือà¸';
+$lang['js']['hidedetails'] = 'ซ่อนรายละเอียด';
+$lang['js']['nosmblinks'] = 'เชื่อมไปยังหน้าต่างà¹à¸šà¹ˆà¸‡à¸›à¸±à¸™ ทำงานได้à¸à¸±à¸šà¹€à¸‰à¸žà¸²à¸°à¹„มโครซอฟท์อินเตอร์เน็ตเอ็à¸à¸‹à¹‚ปรเรอร์(IE) คุณยังคงสามารถคัดลอà¸à¹à¸¥à¸°à¹à¸›à¸°à¸¥à¸´à¹‰à¸‡à¸„์ได้';
+$lang['js']['linkwiz'] = 'ลิงค์วิเศษ';
+$lang['js']['linkto'] = 'ลิงค์ไป:';
+$lang['js']['del_confirm'] = 'ต้องà¸à¸²à¸£à¸¥à¸šà¸£à¸²à¸¢à¸à¸²à¸£à¸—ี่เลือà¸à¸ˆà¸£à¸´à¸‡à¹†à¸«à¸£à¸·à¸­?';
+$lang['js']['mu_btn'] = 'อัพโหลดหลายๆไฟล์ในครั้งเดียว';
+$lang['mediausage'] = 'ให้ใช้ไวยà¸à¸£à¸“์ต่อไปนี้เพื่ออ้างอิงไฟล์นี้';
+$lang['mediaview'] = 'ดูไฟล์ต้นฉบับ';
+$lang['mediaroot'] = 'ราà¸(รูท)';
+$lang['mediaupload'] = 'อัพโหลดไฟล์ไปยังเนมสเปซปัจจุบันจาà¸à¸—ี่นี่ หาà¸à¸ˆà¸°à¸ªà¸£à¹‰à¸²à¸‡à¹€à¸™à¸¡à¸ªà¹€à¸›à¸‹à¸¢à¹ˆà¸­à¸¢ ให้พิมพ์ต่อข้อความของคุณหลังชื่อไฟล์ในช่อง "อัพโหลดเป็น" โดยให้คั่นด้วยโคล่อน(:)';
+$lang['mediaextchange'] = 'ส่วนขยายไฟล์ถูà¸à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¸ˆà¸²à¸ .%s ไปเป็น .%s!';
+$lang['reference'] = 'อ้างอิงสำหรับ';
+$lang['ref_inuse'] = 'ไม่สามารถลบไฟล์ได้ เพราะมันยังคงถูà¸à¹ƒà¸Šà¹‰à¹‚ดยเพจดังต่อไปนี้:';
+$lang['ref_hidden'] = 'มีà¸à¸²à¸£à¸­à¹‰à¸²à¸‡à¸­à¸´à¸‡à¸šà¸²à¸‡à¸£à¸²à¸¢à¸à¸²à¸£à¹ƒà¸™à¹€à¸žà¸ˆ คุณไม่มีสิทธิ์ในà¸à¸²à¸£à¸­à¹ˆà¸²à¸™';
+$lang['hits'] = 'คำที่ตรงà¸à¸±à¸™';
+$lang['quickhits'] = 'ชื่อเพจที่ตรงà¸à¸±à¸™';
+$lang['toc'] = 'สารบัà¸';
+$lang['current'] = 'ฉบับปัจจุบัน';
+$lang['yours'] = 'ฉบับของคุณ';
+$lang['diff'] = 'à¹à¸ªà¸”งจุดà¹à¸•à¸à¸•à¹ˆà¸²à¸‡à¸à¸±à¸šà¸‰à¸šà¸±à¸šà¸›à¸±à¸ˆà¸ˆà¸¸à¸šà¸±à¸™';
+$lang['diff2'] = 'à¹à¸ªà¸”งจุดà¹à¸•à¸à¸•à¹ˆà¸²à¸‡à¸£à¸°à¸«à¸§à¹ˆà¸²à¸‡à¸‰à¸šà¸±à¸šà¸—ี่เลือà¸à¹„ว้';
+$lang['line'] = 'บรรทัด';
+$lang['breadcrumb'] = 'ตามรอย';
+$lang['youarehere'] = 'คุณอยู่ที่นี่';
+$lang['lastmod'] = 'à¹à¸à¹‰à¹„ขครั้งล่าสุด';
+$lang['by'] = 'โดย';
+$lang['deleted'] = 'ถูà¸à¸–อดออà¸';
+$lang['created'] = 'ถูà¸à¸ªà¸£à¹‰à¸²à¸‡';
+$lang['restored'] = 'ย้อนไปรุ่นà¸à¹ˆà¸­à¸™à¸«à¸™à¹‰à¸²';
+$lang['external_edit'] = 'à¹à¸à¹‰à¹„ขภายนอà¸';
+$lang['summary'] = 'สรุป(หมายเหตุ)à¸à¸²à¸£à¹à¸à¹‰à¹„ขนี้';
+$lang['noflash'] = 'ต้องà¸à¸²à¸£à¸•à¸±à¸§à¹€à¸¥à¹ˆà¸™à¹à¸Ÿà¸¥à¸Š <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> เพื่อà¹à¸ªà¸”งผลเนื้อหานี้';
+$lang['download'] = 'ดาวน์โหลดสนิปเป็ด(Snippet)';
+$lang['mail_newpage'] = 'เพิ่มเพจà¹à¸¥à¹‰à¸§:';
+$lang['mail_changed'] = 'à¹à¸à¹‰à¹„ขเพจà¹à¸¥à¹‰à¸§:';
+$lang['mail_new_user'] = 'ผู้ใช้คนใหม่:';
+$lang['mail_upload'] = 'ไฟล์อัพโหลดà¹à¸¥à¹‰à¸§:';
+$lang['qb_bold'] = 'ทำตัวหนา';
+$lang['qb_italic'] = 'ทำตัวเอียง';
+$lang['qb_underl'] = 'ขีดเส้นใต้ข้อความ';
+$lang['qb_code'] = 'ข้อความเป็นโค้ดโปรà¹à¸à¸£à¸¡';
+$lang['qb_strike'] = 'ขีดฆ่าข้อความ';
+$lang['qb_h1'] = 'หัวเรื่องระดับที่ 1';
+$lang['qb_h2'] = 'หัวเรื่องระดับที่ 2';
+$lang['qb_h3'] = 'หัวเรื่องระดับที่ 3';
+$lang['qb_h4'] = 'หัวเรื่องระดับที่ 4';
+$lang['qb_h5'] = 'หัวเรื่องระดับที่ 5';
+$lang['qb_h'] = 'หัวเรื่อง';
+$lang['qb_hs'] = 'เลือà¸à¸«à¸±à¸§à¹€à¸£à¸·à¹ˆà¸­à¸‡';
+$lang['qb_hplus'] = 'หัวเรื่องที่สูงà¸à¸§à¹ˆà¸²';
+$lang['qb_hminus'] = 'หัวเรื่องที่ต่ำà¸à¸§à¹ˆà¸²';
+$lang['qb_hequal'] = 'หัวเรื่องระดับเดียวà¸à¸±à¸™';
+$lang['qb_link'] = 'ลิงà¸à¹Œà¸ à¸²à¸¢à¹ƒà¸™à¹€à¸§à¹‡à¸š';
+$lang['qb_extlink'] = 'ลิงà¸à¹Œà¹„ปที่อื่น (อย่าลืม http:// นำหน้าเสมอ)';
+$lang['qb_hr'] = 'เส้นนอน';
+$lang['qb_ol'] = 'รายà¸à¸²à¸£à¸—ี่เรียงลำดับà¹à¸¥à¹‰à¸§';
+$lang['qb_ul'] = 'รายà¸à¸²à¸£à¸—ี่ยังไม่ได้เรียงลำดับ';
+$lang['qb_media'] = 'เพิ่มภาพà¹à¸¥à¸°à¹„ฟล์อื่นๆ';
+$lang['qb_sig'] = 'ลายเซ็นพร้อมลงเวลา';
+$lang['qb_smileys'] = 'ภาพà¹à¸ªà¸”งอารมณ์';
+$lang['qb_chars'] = 'อัà¸à¸‚ระพิเศษ';
+$lang['upperns'] = 'à¸à¸£à¸°à¹‚ดดขึ้นไปยังเนมสเปซà¹à¸¡à¹ˆ';
+$lang['admin_register'] = 'สร้างบัà¸à¸Šà¸µà¸œà¸¹à¹‰à¹ƒà¸Šà¹‰';
+$lang['metaedit'] = 'à¹à¸à¹‰à¹„ขข้อมูลเมต้า';
+$lang['metasaveerr'] = 'มีข้อผิดพลาดในà¸à¸²à¸£à¹€à¸‚ียนข้อมูลเมต้า';
+$lang['metasaveok'] = 'บันทึà¸à¹€à¸¡à¸•à¹‰à¸²à¸”าต้าà¹à¸¥à¹‰à¸§';
+$lang['img_backto'] = 'à¸à¸¥à¸±à¸šà¹„ปยัง';
+$lang['img_title'] = 'ชื่อภาพ';
+$lang['img_caption'] = 'คำบรรยายภาพ';
+$lang['img_date'] = 'วันที่';
+$lang['img_fname'] = 'ชื่อไฟล์';
+$lang['img_fsize'] = 'ขนาดภาพ';
+$lang['img_artist'] = 'ผู้สร้างสรรค์';
+$lang['img_copyr'] = 'ผู้ถือลิขสิทธิ์';
+$lang['img_format'] = 'รูปà¹à¸šà¸š';
+$lang['img_camera'] = 'à¸à¸¥à¹‰à¸­à¸‡';
+$lang['img_keywords'] = 'คำหลัà¸';
+$lang['subscribe_success'] = 'เพิ่ม %s เข้าไปในรายชื่อสมาชิà¸à¸¥à¸‡à¸—ะเบียนสำหรับ %s';
+$lang['subscribe_error'] = 'มีข้อผิดพลาดในà¸à¸²à¸£à¹€à¸žà¸´à¹ˆà¸¡ %s ในรายชื่อสมัครสมาชิà¸à¸ªà¸³à¸«à¸£à¸±à¸š %s';
+$lang['subscribe_noaddress'] = 'ไม่มีที่อยู่ที่ตรงà¸à¸±à¸šà¸Šà¸·à¹ˆà¸­à¸¥à¹‡à¸­à¸à¸­à¸´à¸™à¸‚องคุณ ชื่อคุณไม่สามารถถูà¸à¹€à¸žà¸´à¹ˆà¸¡à¹€à¸‚้าไปในรายชื่อสมัครสมาชิà¸';
+$lang['unsubscribe_success'] = 'ถอด % ออà¸à¸ˆà¸²à¸à¸£à¸²à¸¢à¸Šà¸·à¹ˆà¸­à¸ªà¸¡à¸±à¸„รสมาชิà¸à¸‚อง %s';
+$lang['unsubscribe_error'] = 'มีข้อผิดพลาดในà¸à¸²à¸£à¸–อด %s ออà¸à¸ˆà¸²à¸à¸£à¸²à¸¢à¸Šà¸·à¹ˆà¸­à¸ªà¸¡à¸²à¸Šà¸´à¸à¸‚อง %s';
+$lang['authmodfailed'] = 'มีà¸à¸²à¸£à¸à¸³à¸«à¸™à¸”ค่าสิทธิ์ผู้ใช้ไว้ไม่ดี à¸à¸£à¸¸à¸“าà¹à¸ˆà¹‰à¸‡à¸œà¸¹à¹‰à¸”ูà¹à¸¥à¸£à¸°à¸šà¸šà¸§à¸´à¸à¸´à¸‚องคุณ';
+$lang['authtempfail'] = 'ระบบตรวจสอบสิทธิ์ผู้ใช้ไม่พร้อมใช้งานชั่วคราว หาà¸à¸ªà¸–านà¸à¸²à¸£à¸“์ยังไม่เปลี่ยนà¹à¸›à¸¥à¸‡ à¸à¸£à¸¸à¸“าà¹à¸ˆà¹‰à¸‡à¸œà¸¹à¹‰à¸”ูà¹à¸¥à¸£à¸°à¸šà¸§à¸´à¸à¸´à¸‚องคุณ';
+$lang['i_chooselang'] = 'เลือà¸à¸ à¸²à¸©à¸²à¸‚องคุณ';
+$lang['i_installer'] = 'ตัวติดตั้งโดà¸à¸¸à¸§à¸´à¸à¸´';
+$lang['i_wikiname'] = 'ชื่อวิà¸à¸´';
+$lang['i_enableacl'] = 'เปิดระบบ ACL(à¹à¸™à¸°à¸™à¸³)';
+$lang['i_superuser'] = 'ซุปเปอร์ยูสเซอร์';
+$lang['i_problems'] = 'ตัวติดตั้งพบปัà¸à¸«à¸²à¸šà¸²à¸‡à¸›à¸£à¸°à¸à¸²à¸£ ตามที่ระบุด้านล่าง คุณไม่สามารถทำต่อได้จนà¸à¸§à¹ˆà¸²à¸ˆà¸°à¹„ด้à¹à¸à¹‰à¹„ขสิ่งเหล่านั้น';
+$lang['i_modified'] = 'ด้วยเหตุผลด้านความปลอดภัย สคริปต์นี้จะทำงานà¸à¸±à¸šà¹€à¸‰à¸žà¸²à¸°à¹‚ดà¸à¸¸à¸§à¸´à¸à¸´à¸—ี่ติดตั้งใหม่หรือยังไม่ได้ดัดà¹à¸›à¸¥à¸‡à¹à¸à¹‰à¹„ข
+คุณควรเลือà¸à¸£à¸°à¸«à¸§à¹ˆà¸²à¸‡à¸„ลี่ไฟล์จาà¸à¹à¸žà¸„เà¸à¸ˆà¸—ี่ได้ดาวน์โหลดมาอีà¸à¸„รั้ง หรือศึà¸à¸©à¸²à¸ˆà¸²à¸à¸„ู่มือ
+<a href="http://dokuwiki.org/install">Dokuwiki installation instructions</a>';
+$lang['i_funcna'] = 'PHP function <code>%s</code> ไม่สามารถใช้งานได้ อาจเป็นเพราะผู้ให้บริà¸à¸²à¸£à¹‚ฮสไม่เปิดให้ใช้งาน';
+$lang['i_phpver'] = 'PHP รุ่นที่คุณà¸à¸³à¸¥à¸±à¸‡à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¸­à¸¢à¸¹à¹ˆà¸„ือ <code>%s</code> คุณจำเป็นต้องอัพเà¸à¸£à¸” PHP ให้เป็นรุ่น <code>%s</code> หรือสูงà¸à¸§à¹ˆà¸²';
+$lang['i_permfail'] = '<code>%s</code> DokuWiki ไม่สามารถเขียนข้อมูลได้ ต้องตั้งค่าสิทธิ์à¸à¸²à¸£à¸­à¸™à¸¸à¸à¸²à¸•à¸‚องไดเรคทอรีนี้เสียà¸à¹ˆà¸­à¸™!';
+$lang['i_confexists'] = '<code>%s</code> ถูà¸à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¹„ปà¹à¸¥à¹‰à¸§';
+$lang['i_writeerr'] = 'ไม่สามารถสร้าง <code>%s</code>. ตรวจสอบสิทธิ์à¸à¸²à¸£à¸­à¸™à¸¸à¸à¸²à¸•à¸‚องไดเรคทอรีหรือไฟล์ à¹à¸¥à¹‰à¸§à¸ªà¸£à¹‰à¸²à¸‡à¹„ฟล์ด้วยตนเอง';
+$lang['i_policy'] = 'นโยบายสิทธิ์เข้าถึง(ACL)ตั้งต้น';
+$lang['i_pol0'] = 'วิà¸à¸´à¹€à¸›à¸´à¸”à¸à¸§à¹‰à¸²à¸‡ (ใครà¸à¹‡ อ่าน, เขียน, อัพโหลดได้)';
+$lang['i_pol1'] = 'วิà¸à¸´à¸ªà¸²à¸˜à¸²à¸£à¸“ะ (ทุà¸à¸„นอ่านได้, เขียน à¹à¸¥à¸° อัพโหลดเฉพาะผู้ใช้ที่ลงทะเบียนà¹à¸¥à¹‰à¸§)';
+$lang['i_pol2'] = 'วิà¸à¸´à¸ à¸²à¸¢à¹ƒà¸™ (อ่าน, เขียน, อัพโหลด สำหรับผู้ใช้ที่ลงทะเบียนà¹à¸¥à¹‰à¸§à¹€à¸—่านั้น)';
+$lang['i_retry'] = 'ลองใหม่';
+$lang['mu_intro'] = 'ที่นี่คุณสามารถอัพโหลดหลายๆไฟล์ได้พร้อมๆà¸à¸±à¸™ คลิ๊à¸à¸›à¸¸à¹ˆà¸¡à¸šà¸£à¸²à¸§à¸‹à¹Œà¹€à¸žà¸·à¹ˆà¸­à¹€à¸žà¸´à¹ˆà¸¡à¸¡à¸±à¸™à¹€à¸‚้าไปในคิว à¸à¸”ปุ่มอัพโหลดเมื่อเสร็จà¹à¸¥à¹‰à¸§';
+$lang['mu_gridname'] = 'ชื่อไฟล์';
+$lang['mu_gridsize'] = 'ขนาด';
+$lang['mu_gridstat'] = 'สถานะ';
+$lang['mu_namespace'] = 'เนมสเปซ';
+$lang['mu_browse'] = 'เรียà¸à¸”ู';
+$lang['mu_toobig'] = 'ใหà¸à¹ˆà¹„ป';
+$lang['mu_ready'] = 'พร้อมอัปโหลด';
+$lang['mu_done'] = 'เสร็จสิ้น';
+$lang['mu_fail'] = 'ล้มเหลว';
+$lang['mu_authfail'] = 'วาระหมดอายุ';
+$lang['mu_progress'] = '@PCT@% อัปโหลดà¹à¸¥à¹‰à¸§';
+$lang['mu_filetypes'] = 'ชนิดà¹à¸Ÿà¹‰à¸¡à¸—ี่อนุà¸à¸²à¸•';
+$lang['mu_info'] = 'à¹à¸Ÿà¹‰à¸¡à¸­à¸±à¸›à¹‚หลดà¹à¸¥à¹‰à¸§';
+$lang['mu_lasterr'] = 'ผิดพลาดล่าสุด:';
+$lang['years'] = '%d ปีà¸à¹ˆà¸­à¸™';
+$lang['months'] = '%d เดือนà¸à¹ˆà¸­à¸™';
+$lang['weeks'] = '%d สัปดาห์à¸à¹ˆà¸­à¸™';
+$lang['days'] = '%d วันà¸à¹ˆà¸­à¸™';
+$lang['hours'] = '%d ชั่วโมงà¸à¹ˆà¸­à¸™';
+$lang['minutes'] = '%d นาทีà¸à¹ˆà¸­à¸™';
+$lang['seconds'] = '%d วินาทีà¸à¹ˆà¸­à¸™';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/locked.txt
new file mode 100644
index 000000000..a198ad717
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/locked.txt
@@ -0,0 +1,3 @@
+====== เพจถูà¸à¸¥à¹Šà¸­à¸„ ======
+
+เพจนี้à¸à¸³à¸¥à¸±à¸‡à¸–ูà¸à¸¥à¹Šà¸­à¸„จาà¸à¸à¸²à¸£à¹à¸à¹‰à¹„ขโดยผู้ใช้ท่านอื่น คุณต้องรอจนà¸à¸§à¹ˆà¸²à¸œà¸¹à¹‰à¹ƒà¸Šà¹‰à¸„นนี้จะà¹à¸à¹‰à¹„ขเสร็จ หรือà¸à¸²à¸£à¸¥à¹Šà¸­à¸„นั้นหมดเวลา \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/login.txt
new file mode 100644
index 000000000..d384c2d27
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/login.txt
@@ -0,0 +1,4 @@
+====== ล็อà¸à¸­à¸´à¸™ ======
+
+คุณยังไม่ได้เข้าสู่ระบบ(ล็อà¸à¸­à¸´à¸™)ในขณะนี้! à¸à¸£à¸­à¸à¸£à¸²à¸¢à¸¥à¸°à¹€à¸­à¸µà¸¢à¸”เพื่อพิสูจน์สิทธิ์ข้างล่างนี้เพื่อล็อà¸à¸­à¸´à¸™ คุณต้องเปิดคุ๊à¸à¸à¸µà¹‰à¹ƒà¸«à¹‰à¸—ำงานà¸à¹ˆà¸­à¸™à¸—ี่จะล็อà¸à¸­à¸´à¸™
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/mailtext.txt
new file mode 100644
index 000000000..a4af8a0f3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/mailtext.txt
@@ -0,0 +1,17 @@
+เพจในโดà¸à¸¸à¸§à¸´à¸à¸´à¸‚องคุณได้ถูà¸à¹€à¸žà¸´à¹ˆà¸¡ หรือà¹à¸à¹‰à¹„ข นี่คือรายละเอียด:
+
+วันที่: @DATE@
+บราวเซอร์: @BROWSER@
+ที่อยู่ไอพี: @IPADDRESS@
+ชื่อโฮสต์: @HOSTNAME@
+ฉบับเà¸à¹ˆà¸²: @OLDPAGE@
+ฉบับใหม่: @NEWPAGE@
+สรุปà¸à¸²à¸£à¹à¸à¹‰à¹„ข: @SUMMARY@
+ผู้ใช้: @USER@
+
+@DIFF@
+
+
+--
+จดหมายนี้สร้างขึ้นโดยโดà¸à¸¸à¸§à¸´à¸à¸´à¸—ี่
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/newpage.txt
new file mode 100644
index 000000000..cab906d4c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/newpage.txt
@@ -0,0 +1,3 @@
+====== ยังไม่มีหัวข้อนี้ ======
+
+คุณได้à¸à¸”ลิ้งค์เข้ามายังหัวข้อที่ยังไม่ได้สร้าง ถ้าคุณได้รับอนุà¸à¸²à¸•à¸´ คุณอาจจะสร้างมันได้ด้วยà¸à¸²à¸£à¸à¸”ปุ่ม "สร้างเพจนี้" \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/norev.txt
new file mode 100644
index 000000000..9127a20c3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/norev.txt
@@ -0,0 +1,3 @@
+====== ไม่มีฉบับที่ระบุ ======
+
+ฉบับที่ระบุไม่มีอยู่จริง à¸à¸£à¸¸à¸“าใช้ปุ่ม "ฉบับเà¸à¹ˆà¸²à¹†" เพื่อà¹à¸ªà¸”งรายà¸à¸²à¸£à¸£à¸¸à¹ˆà¸™à¹€à¸à¹ˆà¸²à¹†à¸‚องเอà¸à¸ªà¸²à¸£à¸™à¸µà¹‰à¸´ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/preview.txt
new file mode 100644
index 000000000..caaf8ad2d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/preview.txt
@@ -0,0 +1,3 @@
+====== ดูตัวอย่าง ======
+
+นี่คือหน้าตัวอย่างของข้อความที่คุณà¸à¸£à¸­à¸ จำไว้ว่า: มันยัง **ไม่ได้บันทึà¸** เà¸à¹‡à¸šà¹„ว้! \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/pwconfirm.txt
new file mode 100644
index 000000000..e6ab876cf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/pwconfirm.txt
@@ -0,0 +1,14 @@
+เฮ้ @FULLNAME@!
+
+มีบางคนร้องขอรหัสผ่านใหม่สำหรับ @TITLE@ ของคุณ
+เพื่อล็อà¸à¸­à¸´à¸™à¸—ี่ @DOKUWIKIURL@
+
+ถ้าคุรไม่ได้ร้องขอรหัสผ่านใหม่ à¸à¹‡à¹„ม่ต้องสนใจอีเมลนี้
+
+หาà¸à¸•à¹‰à¸­à¸‡à¸à¸²à¸£à¸¢à¸·à¸™à¸¢à¸±à¸™à¸§à¹ˆà¸²à¸™à¸µà¹ˆà¸à¸²à¸£à¸£à¹‰à¸­à¸‡à¸‚อนี้ถูà¸à¸ªà¹ˆà¸‡à¹‚ดยคุณจริงๆ à¸à¸£à¸¸à¸“าใช้ลิงค์ดังต่อไปนี้
+
+@CONFIRM@
+
+--
+จดหมายนี้ถูà¸à¸ªà¸£à¹‰à¸²à¸‡à¸‚ึ้นโดยโดà¸à¸¸à¸§à¸´à¸à¸´à¸—ี่
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/read.txt
new file mode 100644
index 000000000..ac4f31290
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/read.txt
@@ -0,0 +1 @@
+หน้านี้มีไว้อ่านอย่างเดียว คุณสามารถอ่านข้อความต้นฉบับ ไม่สามารถà¹à¸à¹‰à¹„ขได้ ให้สอบถามผู้ดูà¹à¸¥à¸£à¸°à¸šà¸šà¸–้าคุณคิดว่านี่คือข้อผิดพลาด \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/recent.txt
new file mode 100644
index 000000000..1655ae82b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/recent.txt
@@ -0,0 +1,3 @@
+====== à¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡à¹€à¸¡à¸·à¹ˆà¸­à¹€à¸£à¹‡à¸§à¹†à¸™à¸µà¹‰ ======
+
+เพจเหล่านี้ถูà¸à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡à¹€à¸¡à¸·à¹ˆà¸­à¹€à¸£à¹‡à¸§à¹†à¸™à¸µà¹‰ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/register.txt
new file mode 100644
index 000000000..ed4a40876
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/register.txt
@@ -0,0 +1,3 @@
+====== ลงทะเบียนเป็นผู้ใช้หน้าใหม่ ======
+
+à¸à¸£à¸­à¸à¸‚้อมูลทั้งหมดด้านล่างเพื่อสร้างบัà¸à¸Šà¸µà¹ƒà¸«à¸¡à¹ˆà¹ƒà¸™à¸§à¸´à¸à¸´à¸™à¸µà¹‰ ให้à¹à¸™à¹ˆà¹ƒà¸ˆà¸§à¹ˆà¸²à¸„ุณให้ **ที่อยู่อีเมลที่ใช้ได้จริง** ถ้าคุณไม่ถูà¸à¸–ามให้à¸à¸£à¸­à¸à¸£à¸«à¸±à¸ªà¸œà¸²à¹ˆà¸™à¸—ี่นี่, รหัสผ่านใหม่จะถูà¸à¸ªà¹ˆà¸‡à¹„ปยังที่อยู่ดังà¸à¸¥à¹ˆà¸²à¸§ ชื่อล็อà¸à¸­à¸´à¸™à¸„วรจะใช้ได้ถูà¸à¸•à¹‰à¸­à¸‡à¸•à¸²à¸¡[[doku>pagename|pagename]]. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/registermail.txt
new file mode 100644
index 000000000..a96026d31
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/registermail.txt
@@ -0,0 +1,14 @@
+มีผู้ใช้คนใหม่ได้ลงทะเบียน นี่คือรายละเอียด:
+
+ชื่อผู้ใช้ : @NEWUSER@
+ชื่อเต็ม : @NEWNAME@
+อีเมล : @NEWEMAIL@
+
+วันที่ : @DATE@
+บราวเซอร์ : @BROWSER@
+ที่อยู่ไอพี : @IPADDRESS@
+ชื่อโฮสต์ : @HOSTNAME@
+
+--
+จดหมายนี้ถูà¸à¸ªà¸£à¹‰à¸²à¸‡à¸‚ึ้นโดยโดà¸à¸¸à¸§à¸´à¸à¸´à¸—ี่
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/resendpwd.txt
new file mode 100644
index 000000000..1935abedd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/resendpwd.txt
@@ -0,0 +1,3 @@
+====== ส่งรหัสผ่านใหม่ ======
+
+à¸à¸£à¸¸à¸“าà¸à¸£à¸­à¸à¸Šà¸·à¹ˆà¸­à¸œà¸¹à¹‰à¹ƒà¸Šà¹‰à¹ƒà¸™à¸Šà¹ˆà¸­à¸‡à¸”้านล่างเพื่อร้องขอรหัสผ่านใหม่จาà¸à¸šà¸±à¸à¸Šà¸µà¸‚องคุณในวิà¸à¸´à¸™à¸µà¹‰ ลิงค์ยืนยันจะถูà¸à¸ªà¹ˆà¸‡à¹„ปยังที่อยู่อีเมลที่คุณลงทะเบียนไว้ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/revisions.txt
new file mode 100644
index 000000000..98a49d724
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/revisions.txt
@@ -0,0 +1,3 @@
+====== ฉบับเà¸à¹ˆà¸² ======
+
+เหล่านี้เป็นรายà¸à¸²à¸£à¸‰à¸šà¸±à¸šà¹€à¸à¹ˆà¸²à¸‚องเอà¸à¸ªà¸²à¸£à¸›à¸±à¸ˆà¸ˆà¸¸à¸šà¸±à¸™ หาà¸à¸•à¹‰à¸­à¸‡à¸à¸²à¸£à¸„ืนสภาพฉบับเà¸à¹ˆà¸² ให้เลือà¸à¸¡à¸±à¸™à¸ˆà¸²à¸à¸”้านล่าง, คลิ๊ภ"à¹à¸à¹‰à¹„ขเพจนี้" à¹à¸¥à¹‰à¸§à¸ˆà¸¶à¸‡à¸„่อยบันทึà¸à¸¡à¸±à¸™ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/searchpage.txt
new file mode 100644
index 000000000..d6399a9e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/searchpage.txt
@@ -0,0 +1,4 @@
+====== สืบค้น ======
+คุณสามารถพบผลลัพธ์à¸à¸²à¸£à¸ªà¸·à¸šà¸„้นของคุณด้านล่าง ถ้าคุณไม่พบสิ่งที่คนมองหา คุณสามารถเลือà¸à¸—ี่จะสร้าง หรือà¹à¸à¹‰à¹„ขชื่อเพจหลังจาà¸à¸”ูผลสืบค้นà¹à¸¥à¹‰à¸§à¸”้วยปุ่มที่เหมาะสม
+
+====== ผลลัพธ์ ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/showrev.txt
new file mode 100644
index 000000000..f93869f38
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/showrev.txt
@@ -0,0 +1,2 @@
+**นี่คือเอà¸à¸ªà¸²à¸£à¸£à¸¸à¹ˆà¸™/ฉบับเà¸à¹ˆà¸²**
+---- \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/subscribermail.txt
new file mode 100644
index 000000000..8f65b1061
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/subscribermail.txt
@@ -0,0 +1,22 @@
+สวัสดี!
+
+เพจ @PAGE@ ในวิà¸à¸´ @TITLE@ ถูà¸à¹à¸à¹‰à¹„ข à¹à¸¥à¸°à¸™à¸µà¹ˆà¸„ือรายà¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+วันที่ : @DATE@
+ผู้ใช้: @USER@
+สรุปà¸à¸²à¸£à¹à¸à¹‰à¹„ข: @SUMMARY@
+ฉบับเà¸à¹ˆà¸²: @OLDPAGE@
+ฉบับใหม่: @NEWPAGE@
+
+เพื่อยà¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¹à¸ˆà¹‰à¸‡à¹€à¸•à¸·à¸­à¸™à¹ƒà¸™à¹€à¸žà¸ˆà¸™à¸µà¹‰, ให้ล็อà¸à¸­à¸´à¸™à¹€à¸‚้าไปยังวิà¸à¸´à¸—ี่
+@DOKUWIKIURL@ à¹à¸¥à¹‰à¸§à¹€à¸‚้าไปที่ยัง
+@NEWPAGE@
+à¹à¸¥à¸°à¸¢à¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¸¥à¸‡à¸—ะเบียนเà¸à¹‰à¸²à¸”ูà¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡à¸‚องเพจ หรือ เนมสเปซ นั้นๆ
+
+--
+จดหมายนี้ถูà¸à¸ªà¸£à¹‰à¸²à¸‡à¸‚ึ้นโดย โดà¸à¸¸à¸§à¸´à¸à¸´à¸—ี่
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/updateprofile.txt
new file mode 100644
index 000000000..3e0a8dffd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/updateprofile.txt
@@ -0,0 +1,3 @@
+====== ปรับปรุงข้อมูลส่วนตัวของบัà¸à¸Šà¸µà¸„ุณ ======
+
+คุณเพียงต้องà¸à¸²à¸£à¸à¸£à¸­à¸à¸Šà¹ˆà¸­à¸‡à¸—ี่ต้องà¸à¸²à¸£à¹à¸à¹‰à¹„ขเหล่านี้ให้ครบ à¹à¸•à¹ˆà¹„ม่สามารถเปลี่ยนชื่อผู้ใช้ได้ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/uploadmail.txt
new file mode 100644
index 000000000..026965753
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/uploadmail.txt
@@ -0,0 +1,14 @@
+มีไฟล์ได้ถูà¸à¸­à¸±à¸žà¹‚หลดเข้าไปยังโดà¸à¸¸à¸§à¸´à¸à¸´à¸‚องคุณ นี่คือรายละเอียด:
+
+ไฟล์: @MEDIA@
+วันที่: @DATE@
+เบราเซอร์: @BROWSER@
+ที่อยู่ไอพี: @IPADDRESS@
+ชื่อโฮสต์: @HOSTNAME@
+ขนาด: @SIZE@
+MIME Type : @MIME@
+ผู้ใช้: @USER@
+
+--
+This mail was generated by DokuWiki at
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/wordblock.txt
new file mode 100644
index 000000000..653e341e7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/wordblock.txt
@@ -0,0 +1,3 @@
+====== สà¹à¸›à¸¡à¸–ูà¸à¸à¸µà¸”à¸à¸±à¸™ ======
+
+à¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡à¸‚องคุณ **ไม่**ได้รับà¸à¸²à¸£à¸šà¸±à¸™à¸—ึà¸à¹€à¸žà¸£à¸²à¸°à¸¡à¸±à¸™à¸¡à¸µà¸«à¸™à¸¶à¹ˆà¸‡à¸‚้อความต้องห้ามหรือมาà¸à¸à¸§à¹ˆà¸² ถ้าคุณพยายามสà¹à¸›à¸¡à¸§à¸´à¸à¸´à¸™à¸µà¹‰ --คุณไม่น่ารัà¸à¹€à¸¥à¸¢à¸™à¸° เด็à¸à¹‚ง่! à¹à¸•à¹ˆà¸–้าคุณคิดว่านี่เป็นข้อผิดพลาดà¹à¸¥à¹‰à¸§à¸¥à¸°à¸à¹‡ ช่วยติดต่อผู้ดูà¹à¸¥à¸§à¸´à¸à¸´à¸™à¸µà¹‰à¹ƒà¸«à¹‰à¸”้วย \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/admin.txt
new file mode 100644
index 000000000..2292b6eeb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/admin.txt
@@ -0,0 +1,3 @@
+====== Yönetim ======
+
+Aşağıda DokuWiki için yapılabilecek yönetim işleri vardır.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/backlinks.txt
new file mode 100644
index 000000000..e219a60c0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/backlinks.txt
@@ -0,0 +1,4 @@
+====== Geri linkler ======
+
+Bu sayfaya bağlantı veren sayfaların listesi aşağıdadır.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/conflict.txt
new file mode 100644
index 000000000..504947998
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/conflict.txt
@@ -0,0 +1,6 @@
+====== Yeni versiyon mevcut ======
+
+Değiştirdiğiniz dökümanın daha yeni bir versiyonu mevcut. Bu durum, siz dökümanı değiştirirken başka bir kullanıcının da aynı dökümanı değiştirmesi halinde olur.
+
+Aşağıda gösterilen farkları dikkatlice inceleyin, daha sonra hangi versiyonun korunacağına karar verin. Eğer ''Kaydet''i seçerseniz, sizin sürümünüz kaydedilir. Mevcut sürümü korumak için ''İptal''e tıklayın.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/denied.txt
new file mode 100644
index 000000000..04e9b8bfb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/denied.txt
@@ -0,0 +1,4 @@
+====== Yetki Reddedildi ======
+
+Üzgünüz, devam etmek için yetkiniz yok. Giriş yapmayı unutmuş olabilir misiniz?
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/diff.txt
new file mode 100644
index 000000000..72baa676b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/diff.txt
@@ -0,0 +1,4 @@
+====== Farklar ======
+
+Bu sayfanın seçili sürümü ile mevcut sürümü arasındaki farkları gösterir.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/draft.txt
new file mode 100644
index 000000000..b1a8881b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/draft.txt
@@ -0,0 +1,5 @@
+====== Taslak Dosyası Bulundu ======
+
+Bu sayfadaki en son oturumunuz düzgün olarak tamamlanmamış. DokuWiki otomatik olarak bir taslak kaydetmiş olduğu için çalışmanıza devam edebilirsiniz. Aşağıda en son oturumunuzda kaydedilmiş olan taslağı görebilirsiniz.
+
+Bu taslağı //geri getirebilir//, //silebilir// veya düzenleme sürecinden //vazgeçebilirsiniz//. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/edit.txt
new file mode 100644
index 000000000..4f84c4e53
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/edit.txt
@@ -0,0 +1,2 @@
+Sayfayı değiştirin ve ''Kaydete'' basın. Wiki sözdizimi için [[wiki:syntax]]'a bakınız. Lütfen sayfayı sadece eğer **geliştirebiliyorsanız** değiştirin. Eğer testler yapmak istiyorsanız, [[playground:playground|playground]] adresini kullanın.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/editrev.txt
new file mode 100644
index 000000000..9c70fbed3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/editrev.txt
@@ -0,0 +1,2 @@
+**Sayfanın eski bir sürümünü yüklediniz!** Eğer kaydederseniz, bu veriyle yeni bir sürüm oluşturacaksınız.
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/index.txt
new file mode 100644
index 000000000..e361e8784
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/index.txt
@@ -0,0 +1,4 @@
+====== Ä°ndeks ======
+
+Bu mevcut tüm sayfaların [[doku>namespaces|isim alanlarına]] göre sıralı bir indeksidir.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/install.html
new file mode 100644
index 000000000..59e7f57a7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/install.html
@@ -0,0 +1,8 @@
+<p>Bu sayfa <a href="http://dokuwiki.org">Dokuwiki</a> kurmanıza yardımcı olmaktadır. Kurulum hakkında bilgi sahibi olmak için <a href="http://dokuwiki.org/installer">bu sayfayı</a> ziyaret edebilirsiniz.</p>
+
+<p>DokuWiki wiki sayfalarını ve wiki sayfalarına ilişkin verileri (resimler, arama indeksi, geçmiş sürümler) dosyalarda tutar. DokuWikiyi sorunsuz olarak kullanmak için bu dosyaların bulunduğu dizinlere <b>mutlaka</b> yazma izniniz olması gereklidir. Bu kurulum betiği yazma izinlerini ayarlayamamaktadır. İzinleri shell, FTP veya kontrol paneliniz (CPanel, Plesk vs.) aracılığı ile düzenleyebilirsiniz.</p>
+
+<p>Kurulum betiği <acronym title="access control list">ACL</acronym>'yi otomatik olarak ayarlamaktadır. Böylece yönetici izinleri belirlenip, DokuWiki kullanımı kolaylaştırılmaktadır.</p>
+
+<p>Deneyimli kullanıcılar <a href="http://dokuwiki.org/install">bu sayfayı </a>
+ edebilir ve <a href="http://dokuwiki.org/config">bu sayfa yardımıyla</a> yapılandırma hakkında ekstra bilgi sahibi olabilir.</p> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/lang.php
new file mode 100644
index 000000000..dd045a6c7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/lang.php
@@ -0,0 +1,226 @@
+<?php
+/**
+ * turkish language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Selim FarsakoÄŸlu <farsakogluselim@yahoo.de>
+ * @author Aydın Coşkuner aydinweb@gmail.com
+ * @author Aydın Coşkuner <aydinweb@gmail.com>
+ * @author yavuzselim@gmail.com
+ * @author Cihan Kahveci kahvecicihan@gmail.com
+ * @author Yavuz Selim <yavuzselim@gmail.com>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '“';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '‘';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = '’';
+$lang['btn_edit'] = 'Sayfayı düzenle';
+$lang['btn_source'] = 'Kaynağı göster';
+$lang['btn_show'] = 'Sayfayı göster';
+$lang['btn_create'] = 'Bu sayfayı oluştur';
+$lang['btn_search'] = 'Ara';
+$lang['btn_save'] = 'Kaydet';
+$lang['btn_preview'] = 'Önizleme';
+$lang['btn_top'] = 'Başa dön';
+$lang['btn_newer'] = '<< daha yeniler';
+$lang['btn_older'] = 'daha eskiler >>';
+$lang['btn_revs'] = 'Eski sürümler';
+$lang['btn_recent'] = 'En son deÄŸiÅŸiklikler';
+$lang['btn_upload'] = 'Yükle';
+$lang['btn_cancel'] = 'Ä°ptal';
+$lang['btn_index'] = 'Ä°ndeks';
+$lang['btn_secedit'] = 'Düzenle';
+$lang['btn_login'] = 'GiriÅŸ yap';
+$lang['btn_logout'] = 'Çıkış yap';
+$lang['btn_admin'] = 'Yönetici';
+$lang['btn_update'] = 'Güncelle';
+$lang['btn_delete'] = 'Sil';
+$lang['btn_back'] = 'Geri';
+$lang['btn_backlink'] = 'Geri linkler';
+$lang['btn_backtomedia'] = 'Çokluortam dosyası seçimine dön';
+$lang['btn_subscribe'] = 'Sayfa DeÄŸiÅŸikliklerini Bildir';
+$lang['btn_unsubscribe'] = 'Sayfa DeÄŸiÅŸikliklerini Bildirme';
+$lang['btn_subscribens'] = 'Namespace DeÄŸiÅŸikliklerini Bildir';
+$lang['btn_unsubscribens'] = 'Namespace DeÄŸiÅŸikliklerini Bildirme';
+$lang['btn_profile'] = 'Kullanıcı Bilgilerini Güncelle';
+$lang['btn_reset'] = 'Sıfırla';
+$lang['btn_resendpwd'] = 'Yeni parola gönder';
+$lang['btn_draft'] = 'Taslağı düzenle';
+$lang['btn_recover'] = 'Taslağı geri yükle';
+$lang['btn_draftdel'] = 'Taslağı sil';
+$lang['loggedinas'] = 'GiriÅŸ ismi';
+$lang['user'] = 'Kullanıcı ismi';
+$lang['pass'] = 'Parola';
+$lang['newpass'] = 'Yeni Parola';
+$lang['oldpass'] = 'Kullanılan parolayı doğrula';
+$lang['passchk'] = 'Bir kez daha girin';
+$lang['remember'] = 'Beni hatırla';
+$lang['fullname'] = 'Tam isim';
+$lang['email'] = 'E-posta';
+$lang['register'] = 'Kayıt ol';
+$lang['profile'] = 'Kullanıcı Bilgileri';
+$lang['badlogin'] = 'Üzgünüz, Kullanıcı adı veya şifre yanlış oldu.';
+$lang['minoredit'] = 'Küçük Değişiklikler';
+$lang['draftdate'] = 'Taslak ÅŸu saatte otomatik kaydedildi:';
+$lang['nosecedit'] = 'Sayfa yakın zamanda değiştirilmiştir, bölüm bilgisi eski kalmıştır. Bunun için bölüm yerine tüm sayfa yüklenmiştir.';
+$lang['regmissing'] = 'Üzgünüz, tüm alanları doldurmalısınız.';
+$lang['reguexists'] = 'Üzgünüz, bu isime sahip bir kullanıcı zaten mevcut.';
+$lang['regsuccess'] = 'Kullanıcı oluşturuldu ve şifre e-posta adresine gönderildi.';
+$lang['regsuccess2'] = 'Kullanıcı oluşturuldu.';
+$lang['regmailfail'] = 'Şifrenizi e-posta ile gönderirken bir hata oluşmuş gibi görünüyor. Lütfen yönetici ile temasa geçiniz!';
+$lang['regbadmail'] = 'Verilen e-posta adresi geçersiz gibi görünüyor - bunun bir hata olduğunu düşünüyorsanız yönetici ile temasa geçiniz.';
+$lang['regbadpass'] = 'Girilen parolalar aynı değil. Lütfen tekrar deneyiniz.';
+$lang['regpwmail'] = 'DokuWiki parolanız';
+$lang['reghere'] = 'Daha hesabınız yok mu? Hemen bir tane açtırın!';
+$lang['profna'] = 'Bu wiki kullanıcı bilgilerini değiştirmeyi desteklememektedir';
+$lang['profnochange'] = 'Değişiklik yok, birşey yapılmadı.';
+$lang['profnoempty'] = 'BoÅŸ isim veya e-posta adresine izin verilmiyor.';
+$lang['profchanged'] = 'Kullanıcı bilgileri başarıyla değiştirildi.';
+$lang['pwdforget'] = 'Parolanızı mı unuttunuz? Yeni bir parola alın';
+$lang['resendna'] = 'Bu wiki parolayı tekrar göndermeyi desteklememektedir.';
+$lang['resendpwd'] = 'Yeni parolayı gönder:';
+$lang['resendpwdmissing'] = 'Üzgünüz, tüm alanları doldurmalısınız.';
+$lang['resendpwdnouser'] = 'Üzgünüz, veritabanımızda bu kullanıcıyı bulamadık.';
+$lang['resendpwdbadauth'] = 'Üzgünüz, bu doğrulama kodu doğru değil. Doğrulama linkini tam olarak kullandığınıza emin olun.';
+$lang['resendpwdconfirm'] = 'Doğrulama linki e-posta adresinize gönderildi.';
+$lang['resendpwdsuccess'] = 'Yeni parolanız e-posta adresinize gönderildi.';
+$lang['license'] = 'Aksi belirtilmediği halde, bu wikinin içeriğinin telif hakları şu lisans ile korunmaktadır:';
+$lang['licenseok'] = 'Not: Bu sayfayı değiştirerek yazınızın şu lisans ile yayınlanmasını kabul etmiş olacaksınız:';
+$lang['txt_upload'] = 'Yüklenecek dosyayı seç';
+$lang['txt_filename'] = 'Dosya adı (zorunlu değil)';
+$lang['txt_overwrt'] = 'Mevcut dosyanın üstüne yaz';
+$lang['lockedby'] = 'Şu an şunun tarafından kilitli:';
+$lang['lockexpire'] = 'Kilitin açılma tarihi:';
+$lang['willexpire'] = 'Bu sayfayı değiştirme kilidinin süresi yaklaşık bir dakika içinde geçecek.\nÇakışmaları önlemek için önizleme tuşunu kullanarak kilit sayacını sıfırla.';
+$lang['notsavedyet'] = 'KaydedilmemiÅŸ deÄŸiÅŸiklikler kaybolacak.\nDevam etmek istiyor musunuz?';
+$lang['rssfailed'] = 'Bu beslemeyi çekerken hata oluştu: ';
+$lang['nothingfound'] = 'Hiçbir şey yok.';
+$lang['mediaselect'] = 'Çokluortam dosyası seçimi';
+$lang['fileupload'] = 'Çokluortam dosyası yükleme';
+$lang['uploadsucc'] = 'Yükleme tamam';
+$lang['uploadfail'] = 'Yükleme başarısız. Yetki hatası olabilir!';
+$lang['uploadwrong'] = 'Yükleme engellendi. Bu dosya uzantısına izin verilmiyor!';
+$lang['uploadexist'] = 'Dosya zaten var. Hiçbir şey yapılmadı.';
+$lang['uploadbadcontent'] = 'Yüklenen içerik %s uzantısı ile uyuşmuyor.';
+$lang['uploadspam'] = 'Yükleme işlemi spam karalistesi tarafından engellendi.';
+$lang['uploadxss'] = 'Yükleme işlemi muhtemel kötü içerik sebebiyle engellendi.';
+$lang['uploadsize'] = 'Yüklenmek istenen dosya boyutu çok büyük (en fazla %s)';
+$lang['deletesucc'] = '"%s" dosyası silindi.';
+$lang['deletefail'] = '"%s" silinemedi - yetkileri kontrol et.';
+$lang['mediainuse'] = '"%s" dosyası silinmedi, hala kullanımda.';
+$lang['namespaces'] = 'Namespaces';
+$lang['mediafiles'] = 'Şuradaki kullanıma hazır dosyalar:';
+$lang['js']['keepopen'] = 'Seçim yapıldığında bu pencereyi açık tut';
+$lang['js']['hidedetails'] = 'Ayrıntıları gizle';
+$lang['js']['nosmblinks'] = 'Windows paylaşımı sadece Microsoft Internet Explorer ile çalışmaktadır. Yine de hala bağlantıyı kopyalayıp yapıştırarak kullanabilirsiniz. ';
+$lang['js']['mu_btn'] = 'Birden fazla dosyayı bir seferde gönder';
+$lang['mediausage'] = 'Åžu ';
+$lang['mediaview'] = 'Özgün dosyayı göster';
+$lang['mediaroot'] = 'Kök dizini';
+$lang['mediaupload'] = 'Dosya bu namespace\'e yüklenir. Alt namespace oluşturmak için "Dosya adı" kısmınının başına alt namespace adını ekleyip ardından iki nokta koyun.';
+$lang['mediaextchange'] = 'Dosya uzantısı .%s\'den .%s\'e çevrildi!';
+$lang['reference'] = 'Şunun için referanslar:';
+$lang['ref_inuse'] = 'Dosya silinemiyor, çünkü şu sayfalar tarafından hala kullanılmakta:';
+$lang['ref_hidden'] = 'Bazı referanslar okuma yetkiniz olmayan sayfalarda';
+$lang['hits'] = 'tane bulundu';
+$lang['quickhits'] = 'Uyan sayfalar';
+$lang['toc'] = 'İçindekiler';
+$lang['current'] = 'mevcut';
+$lang['yours'] = 'Senin Sürümün';
+$lang['diff'] = 'Kullanılan sürüm ile farkları göster';
+$lang['diff2'] = 'Seçili sürümler arasındaki farkı göster';
+$lang['line'] = 'Satır';
+$lang['breadcrumb'] = 'Ä°z';
+$lang['youarehere'] = 'Buradasınız';
+$lang['lastmod'] = 'Son deÄŸiÅŸtirilme';
+$lang['by'] = 'DeÄŸiÅŸtiren:';
+$lang['deleted'] = 'silindi';
+$lang['created'] = 'oluÅŸturuldu';
+$lang['restored'] = 'eski sürüme dönüldü';
+$lang['external_edit'] = 'Dışarıdan düzenle';
+$lang['summary'] = 'Özeti düzenle';
+$lang['noflash'] = 'Bu içeriği göstermek için <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Eklentisi</a> gerekmektedir.';
+$lang['mail_newpage'] = 'sayfa eklenme:';
+$lang['mail_changed'] = 'sayfa deÄŸiÅŸtirilme:';
+$lang['mail_new_user'] = 'yeni kullanıcı';
+$lang['mail_upload'] = 'dosya yüklendi:';
+$lang['qb_bold'] = 'Kalın Yazı';
+$lang['qb_italic'] = 'Eğik Yazı';
+$lang['qb_underl'] = 'Altı Çizgili Yazı';
+$lang['qb_code'] = 'Kod Haline Getir';
+$lang['qb_strike'] = 'Ortası Çizilmiş Yazı';
+$lang['qb_h1'] = '1. Seviye Başlık';
+$lang['qb_h2'] = '2. Seviye Başlık';
+$lang['qb_h3'] = '3. Seviye Başlık';
+$lang['qb_h4'] = '4. Seviye Başlık';
+$lang['qb_h5'] = '5. Seviye Başlık';
+$lang['qb_link'] = 'İç Bağlantı';
+$lang['qb_extlink'] = 'Dış Bağlantı';
+$lang['qb_hr'] = 'Yatay Çizgi';
+$lang['qb_ol'] = 'Sıralı liste';
+$lang['qb_ul'] = 'Sırasız liste';
+$lang['qb_media'] = 'Resim ve baÅŸka dosyalar ekle';
+$lang['qb_sig'] = 'Ä°mza Ekle';
+$lang['qb_smileys'] = 'Gülen Yüzler';
+$lang['qb_chars'] = 'Özel Karakterler';
+$lang['js']['del_confirm'] = 'Bu giriÅŸi sil?';
+$lang['admin_register'] = 'Yeni kullanıcı ekle...';
+$lang['metaedit'] = 'Metaverileri DeÄŸiÅŸtir';
+$lang['metasaveerr'] = 'Metaveri yazma başarısız ';
+$lang['metasaveok'] = 'Metaveri kaydedildi';
+$lang['img_backto'] = 'Şuna dön:';
+$lang['img_title'] = 'Başlık';
+$lang['img_caption'] = 'Serlevha';
+$lang['img_date'] = 'Tarih';
+$lang['img_fname'] = 'Dosya Adı';
+$lang['img_fsize'] = 'Boyut';
+$lang['img_artist'] = 'Fotoğrafçı';
+$lang['img_copyr'] = 'Telif Hakkı';
+$lang['img_format'] = 'Biçim';
+$lang['img_camera'] = 'Fotoğraf Makinası';
+$lang['img_keywords'] = 'Anahtar Sözcükler';
+$lang['subscribe_success'] = '%s, %s\'in abonelik listesine eklendi';
+$lang['subscribe_error'] = '%s; %s\'in abonelik listesine eklenirken hata oluÅŸtu';
+$lang['subscribe_noaddress'] = 'GiriÅŸ bilgilerinizle iliÅŸkili bir adres yok, abonelik listesine eklenemezsiniz';
+$lang['unsubscribe_success'] = '%s, %s\'in abonelik listesinden çıkartıldı';
+$lang['unsubscribe_error'] = '%s, %s\'in listesinden çıkartılırken hata oluştu';
+$lang['authmodfailed'] = 'Yanlış kullanıcı onaylama ayarı. Lütfen Wiki yöneticisine bildiriniz.';
+$lang['authtempfail'] = 'Kullanıcı doğrulama geçici olarak yapılamıyor. Eğer bu durum devam ederse lütfen Wiki yöneticine haber veriniz.';
+$lang['i_chooselang'] = 'Dili seçiniz';
+$lang['i_installer'] = 'Dokuwiki Kurulum Sihirbazı';
+$lang['i_wikiname'] = 'Wiki Adı';
+$lang['i_enableacl'] = 'ACL\'yi etkinleÅŸtir (tavsiye edilir)';
+$lang['i_superuser'] = 'Ana Kullanıcı';
+$lang['i_problems'] = 'Kurulum sihirbazı aşağıda gösterilen sorunları buldu. Bunları düzeltmeden devam etmeniz mümkün değil.';
+$lang['i_modified'] = 'Güzenlik sebebiyle bu script sadece yeni ve değiştirilmemiş bir Dokuwiki kurulumunda çalışır. Ya indirdiğiniz paketi yeniden açmalı ya da <a href="http://dokuwiki.org/install"> adresindeki Dokuwiki kurulum kılavuzu</a>na bakmalısınız.';
+$lang['i_funcna'] = '<code>%s</code> PHP fonksiyonu bulunmamaktadır. Barındırma(Hosting) hizmetinde bu özellik kapatılmış olabilir.';
+$lang['i_phpver'] = '<code>%s</code> PHP sürümü, gereken <code>%s</code> sürümünden daha düşük. PHP kurulumunu yükseltmeniz gerekmektedir.';
+$lang['i_permfail'] = '<code>%s</code> Dokuwiki tarafından yazılabilir değil. İzin ayarlarını bu klasör için düzeltmeniz gerekmektedir!';
+$lang['i_confexists'] = '<code>%s</code> zaten var';
+$lang['i_writeerr'] = '<code>%s</code> oluşturulamadı. Dosya/Klasör izin ayarlarını gözden geçirip dosyayı elle oluşturmalısınız.';
+$lang['i_badhash'] = 'dokuwiki.php tanınamadı ya da değiştirilmiş (hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - Yanlış veya boş değer';
+$lang['i_success'] = 'Kurulum başarıyla tamamlandı. Şimdi install.php dosyasını silebilirsiniz. <a href="doku.php">Yeni DokuWikiniz</a>i kullanabilirsiniz.';
+$lang['i_failure'] = 'Ayar dosyalarını yazarken bazı hatalar oluştu. <a href="doku.php">Yeni DokuWikiniz</a>i kullanmadan önce bu hatalarınızı elle düzeltmeniz gerekebilir.';
+$lang['i_policy'] = 'İlk ACL ayarı';
+$lang['i_pol0'] = 'Tamamen Açık Wiki (herkes okuyabilir, yazabilir ve dosya yükleyebilir)';
+$lang['i_pol1'] = 'Açık Wiki (herkes okuyabilir, ancak sadece üye olanlar yazabilir ve dosya yükleyebilir)';
+$lang['i_pol2'] = 'Kapalı Wiki (sadece üye olanlar okuyabilir, yazabilir ve dosya yükleyebilir)';
+$lang['i_retry'] = 'Tekrar Dene';
+$lang['mu_intro'] = 'Burada birden fazla dosyayı bir seferde yükleyebilirsiniz. Sıraya eklemek için Gözat butonuna tıklayın. Bitince yükleye tıklayın';
+$lang['mu_gridname'] = 'Dosya Adı';
+$lang['mu_gridsize'] = 'Boyutu';
+$lang['mu_gridstat'] = 'Durumu';
+$lang['mu_namespace'] = 'Namespace';
+$lang['mu_browse'] = 'Gözat';
+$lang['mu_toobig'] = 'çok büyük';
+$lang['mu_ready'] = 'yüklenmeye hazır';
+$lang['mu_done'] = 'tamamlandı';
+$lang['mu_fail'] = 'başarısız';
+$lang['mu_authfail'] = 'oturum zaman aşımına uğradı';
+$lang['mu_progress'] = '@PCT@% yüklendi';
+$lang['mu_filetypes'] = 'İzin verilen Dosya Türleri';
+$lang['recent_global'] = '<b>%s</b> namespace\'i içerisinde yapılan değişiklikleri görüntülemektesiniz. Wiki\'deki tüm değişiklikleri de <a href="%s">bu adresten</a> görebilirsiniz. ';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/locked.txt
new file mode 100644
index 000000000..14385426e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/locked.txt
@@ -0,0 +1,4 @@
+====== Sayfa kilitli ======
+
+Bu sayfa şu anda başka bir kullanıcının değiştirmesi için kilitli. Kilitin süresi geçene veya bu kullanıcı değiştirmeyi bitirene kadar beklemelisiniz.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/login.txt
new file mode 100644
index 000000000..2ce378d00
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/login.txt
@@ -0,0 +1,4 @@
+====== GiriÅŸ ======
+
+Şu an giriş yapmış değilsiniz! Giriş yapmak için giriş bilgilerinizi aşağıya yazın. Giriş yapmak için çerezleri açmalısınız.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/mailtext.txt
new file mode 100644
index 000000000..7e8fc8d81
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/mailtext.txt
@@ -0,0 +1,16 @@
+DokuWikinizde bir sayfa eklendi veya deÄŸiÅŸti. Detaylar ÅŸunlar:
+
+Tarih : @DATE@
+Tarayıcı : @BROWSER@
+IP-Adresi : @IPADDRESS@
+Sunucu adı : @HOSTNAME@
+Eski Sürüm : @OLDPAGE@
+Yeni Sürüm : @NEWPAGE@
+Değiştirme Özeti : @SUMMARY@
+Kullanıcı : @USER@
+
+@DIFF@
+
+
+--
+Bu e-posta @DOKUWIKIURL@ adresindeki DokuWiki tarafından hazırlandı.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/newpage.txt
new file mode 100644
index 000000000..8a47e6bf3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/newpage.txt
@@ -0,0 +1,4 @@
+====== Bu başlık henüz mevcut değil ======
+
+Henüz mevcut olmayan bir başlığın linkiyle geldiniz. ''bu sayfayı oluştur'' tuşuna tıklayarak sayfayı oluşturabilirsiniz.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/norev.txt
new file mode 100644
index 000000000..e6f97bef2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/norev.txt
@@ -0,0 +1,4 @@
+====== Böyle bir sürüm yok ======
+
+Belirtilen sürüm mevcut değil. Bu dökümanın eski sürümlerinin bir listesine ulaşmak için ''Eski sürümler'' tuşunu kullanın.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/preview.txt
new file mode 100644
index 000000000..71a8a42f6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/preview.txt
@@ -0,0 +1,4 @@
+====== Önizleme ======
+
+Bu yazınızın nasıl çıkacağının bir önizlemesi. Unutma: Yazı henüz **kaydedilmedi!**
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/pwconfirm.txt
new file mode 100644
index 000000000..22348bb75
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/pwconfirm.txt
@@ -0,0 +1,13 @@
+Merhaba @FULLNAME@!
+
+@DOKUWIKIURL@ adresinde kullanılan @TITLE@ hesabı için parola talebinde bulunuldu.
+
+Eğer böyle bir talebiniz olmadıysa, bu e-postayı görmezden gelebilirsiniz.
+
+Onaylamak istiyorsanız aşağıdaki linke tıklayınız.
+
+@CONFIRM@
+
+--
+Bu e-posta aşağıdaki DokuWiki tarafından otomatik olarak oluşturulmuştur.
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/read.txt
new file mode 100644
index 000000000..59314f152
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/read.txt
@@ -0,0 +1,2 @@
+Bu sayfa salt okunur. Kaynağı görebilirsiniz ama değiştiremezsiniz. Bunun yanlış olduğunu düşünüyorsanız yöneticiye danışın.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/recent.txt
new file mode 100644
index 000000000..99efc8fb1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/recent.txt
@@ -0,0 +1,5 @@
+====== Son deÄŸiÅŸiklikler ======
+
+Aşağıdaki sayfalar yakın zamanda değiştirildi.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/register.txt
new file mode 100644
index 000000000..b67e4b5c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/register.txt
@@ -0,0 +1,4 @@
+====== Yeni kullanıcı olarak kaydolun ======
+
+Bu wikide yeni bir hesap açmak için aşağıdaki tüm bilgileri doldurunuz. **Doğru e-posta adresi verdiğinizden** emin olun, yeni parolanız e-postanıza gönderilecek. Giriş adınız geçerli bir [[doku>pagename|sayfa adı]] olmalıdır.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/registermail.txt
new file mode 100644
index 000000000..7754a5671
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/registermail.txt
@@ -0,0 +1,13 @@
+Yeni bir kullanıcı kayıt oldu. Ayrıntıları aşağıda listelenmiştir:
+
+Kullanıcı adı : @NEWUSER@
+Ä°sim : @NEWNAME@
+E-posta : @NEWEMAIL@
+
+Tarih : @DATE@
+Tarayıcı : @BROWSER@
+IP Numarası : @IPADDRESS@
+Host : @HOSTNAME@
+
+--
+Bu e-posta @DOKUWIKIURL@ adresindeki DokuWiki tarafından hazırlandı. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/resendpwd.txt
new file mode 100644
index 000000000..1a34396ea
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/resendpwd.txt
@@ -0,0 +1,3 @@
+====== Yeni Parola Gönderimi ======
+
+Lütfen bu wikide kullanmış olduğunuz kullanıcı adını aşağıdaki forma yazınız. Onay linki, kayıtlı e-posta adresinize gönderilecektir.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/revisions.txt
new file mode 100644
index 000000000..841fba2b9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/revisions.txt
@@ -0,0 +1,4 @@
+====== Eski sürümler ======
+
+Bunlar mevcut dökümanın daha eski sürümleridir. Eski bir sürüme çevirmek için, sürümü aşağıdan seçin, ''Sayfayı değiştir''e tıklayın ve kaydedin.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/searchpage.txt
new file mode 100644
index 000000000..ae6d50c77
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/searchpage.txt
@@ -0,0 +1,5 @@
+====== Arama ======
+
+Aşağıda aramanın sonuçları listelenmiştir. Aradığınız şeyi bulamadıysanız, ''Sayfayı değiştir'' tuşuna tıklayarak girdiğiniz sorgu adıyla yeni bir sayfa oluşturabilirsiniz .
+
+===== Sonuçlar =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/showrev.txt
new file mode 100644
index 000000000..4cf3d2638
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/showrev.txt
@@ -0,0 +1,2 @@
+**Bu, dökümanın eski bir sürümüdür!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/stopwords.txt
new file mode 100644
index 000000000..293067a1c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/stopwords.txt
@@ -0,0 +1,29 @@
+# Bu indeksleyicinin yok saydığı kelimelerin bir listesidir, satır başına bir kelime yazılır
+# Bu dosyayı değiştirirken UNIX satır sonları (tek satır sonu) kullandığınız emin olun
+# 3 karakterden kısa kelimeleri eklenmesine gerek yoktur, bunlar zaten indekslenmez
+# Bu liste http://www.ranks.nl/stopwords/ altındakilerden derlenmiştir
+about
+are
+and
+you
+your
+them
+their
+com
+for
+from
+into
+how
+that
+the
+this
+was
+what
+when
+where
+who
+will
+with
+und
+the
+www
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/subscribermail.txt
new file mode 100644
index 000000000..a37a8cf41
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/subscribermail.txt
@@ -0,0 +1,18 @@
+Merhaba!
+
+
+
+@TITLE@ wikisindeki @PAGE@ sayfası değiştirildi.
+Değişiklikler aşağıdadır:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Bu sayfaya abonelikten çıkmak için
+@DOKUWIKIURL@ adresindeki wikiye gir, ardından
+@NEWPAGE@
+sayfasına git ve 'Sayfa Değişikliklerini Bildirme' butonuna tıkla.
+
+--
+Bu e-posta @DOKUWIKIURL@ adresindeki DokuWiki tarafından hazırlandı.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/updateprofile.txt
new file mode 100644
index 000000000..20b07f949
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/updateprofile.txt
@@ -0,0 +1,3 @@
+====== Kullanıcı Bilgilerini Güncelleme ======
+
+İstediğiniz kullanıcı bilgilerini değiştirebilirsiniz. Ancak kullanıcı adınızı değiştirmeniz mümkün değildir.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/uploadmail.txt
new file mode 100644
index 000000000..2d75345ba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/uploadmail.txt
@@ -0,0 +1,13 @@
+Yeni dosya yüklendi. Ayrıntıları aşağıda listelenmiştir:
+
+Dosya : @MEDIA@
+Tarih : @DATE@
+Tarayıcı : @BROWSER@
+IP Adresi : @IPADDRESS@
+Host : @HOSTNAME@
+Boyut : @SIZE@
+MIME Type : @MIME@
+Kullanıcı : @USER@
+
+--
+Bu e-posta @DOKUWIKIURL@ adresindeki DokuWiki tarafından hazırlandı. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/wordblock.txt
new file mode 100644
index 000000000..506cbc793
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/wordblock.txt
@@ -0,0 +1,4 @@
+====== SPAM bloke edildi ======
+
+Değişiklikleriniz **kaydedilmedi**, çünkü değişikliklerinizde bir veya daha fazla engellenen kelime var. Eğer Wikiyi spamlamaya çalışıyorsan -- Oh olsun! Eğer bunun bir hata olduğunu düşünüyorsanız, bu Wiki yöneticisiyle iletişime geçin.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/admin.txt
new file mode 100644
index 000000000..f698d937e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/admin.txt
@@ -0,0 +1,4 @@
+====== ÐдмініÑÑ‚Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ ======
+
+Ðижче ви можете знайти перелік адмініÑтративних задач, що наÑвні в ДокуВікі.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/adminplugins.txt
new file mode 100644
index 000000000..3689ccd00
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/adminplugins.txt
@@ -0,0 +1 @@
+===== Додаткові плагіни ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/backlinks.txt
new file mode 100644
index 000000000..5f293e56f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/backlinks.txt
@@ -0,0 +1,3 @@
+====== Зворотні зв'Ñзки ======
+
+Це перелік Ñторінок, Ñкі, здаєтьÑÑ, поÑилаютьÑÑ Ð½Ð° поточну Ñторінку.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/conflict.txt
new file mode 100644
index 000000000..5a8930721
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/conflict.txt
@@ -0,0 +1,8 @@
+====== ІÑнує більш нова верÑÑ–Ñ ======
+
+ІÑнує новіша верÑÑ–Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ñƒ, що ви редагували. Це може ÑтатиÑÑ, коли інший кориÑтувач змінив документ під Ñ‡Ð°Ñ Ð²Ð°ÑˆÐ¾Ð³Ð¾ редагуваннÑ.
+
+Уважно переглÑньте розбіжноÑÑ‚Ñ– та вирішіть, Ñку верÑÑ–ÑŽ залишити. Якщо ви натиÑнете
+''зберегти'', буде збережена ваша верÑÑ–Ñ. Якщо натиÑнете ''ÑкаÑувати'' --- то залишитьÑÑ
+поточна верÑÑ–Ñ.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/denied.txt
new file mode 100644
index 000000000..5db12e1bc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/denied.txt
@@ -0,0 +1,4 @@
+====== ДоÑтуп заборонено ======
+
+Вибачте, але у Ð²Ð°Ñ Ð½Ðµ виÑтачає прав Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð´Ð¾Ð²Ð¶ÐµÐ½Ð½Ñ. Можливо ви забули увійти в ÑиÑтему?
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/diff.txt
new file mode 100644
index 000000000..cfdf9a887
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/diff.txt
@@ -0,0 +1,4 @@
+====== РозбіжноÑÑ‚Ñ– ======
+
+Тут показані розбіжноÑÑ‚Ñ– між вибраною ревізією та поточною верÑією Ñторінки.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/draft.txt
new file mode 100644
index 000000000..f6acca8ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/draft.txt
@@ -0,0 +1,6 @@
+====== Знайдено чернетку ======
+
+ОÑтаннє Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ñ†Ñ–Ñ”Ñ— Ñторінки не було завершено коректно. ДокуВікі автоматично зберегла чернетку під Ñ‡Ð°Ñ Ð²Ð°ÑˆÐ¾Ñ— роботи. Ви можете викориÑтати чернетку Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð´Ð¾Ð²Ð¶ÐµÐ½Ð½Ñ Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ. Ðижче ви можете побачити дані, збережені з попереднього ÑеанÑу.
+
+Будь лаÑка вирішить, чи ви бажаєте //відновити// оÑтанній ÑÐµÐ°Ð½Ñ Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ, //знищити// збережену чернетку або //ÑкаÑувати// редагуваннÑ.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/edit.txt
new file mode 100644
index 000000000..82dbc1a50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/edit.txt
@@ -0,0 +1 @@
+Відредагуйте Ñторінку та натиÑніть ''Зберегти''. ВикориÑтовуйте [[wiki:syntax|поÑібник]] з ÑинтакÑиÑу Ð´Ð»Ñ Ð´Ð¾Ð²Ñ–Ð´ÐºÐ¸. Будь лаÑка, змінюйте Ñторінку лише у тому випадку, коли ви можете **покращити** Ñ—Ñ—. Якщо ви бажаєте щоÑÑŒ Ñпробувати, викориÑтовуйте Ñпеціальну Ñторінку [[playground:playground]]
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/editrev.txt
new file mode 100644
index 000000000..aae86fa50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/editrev.txt
@@ -0,0 +1,2 @@
+**Ви завантажили Ñтару верÑÑ–ÑŽ документу!** Якщо ви збережете Ñ—Ñ—, ви Ñтворите нову верÑÑ–ÑŽ з ціми даними.
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/index.txt
new file mode 100644
index 000000000..0ba0d185b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/index.txt
@@ -0,0 +1,4 @@
+====== ЗміÑÑ‚ ======
+
+Це перелік уÑÑ–Ñ… доÑтупних Ñторінок, упорÑджених за [[doku>namespaces|проÑторами імен]]
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/install.html
new file mode 100644
index 000000000..084da8662
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/install.html
@@ -0,0 +1,21 @@
+<p>Ð¦Ñ Ñторінка допомагає при першій уÑтановці та наÑтройці <a href="http://dokuwiki.org">ДокуВікі</a>.
+Більше інформації про програму уÑтановки можна знайти на <a href="http://dokuwiki.org/installer">Ñторінці документації</a>.</p>
+
+<p>ДокуВікі викориÑтовую звичайні файли Ð´Ð»Ñ Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ Ñторінок вікі та іншої інформації,
+щодо цих Ñторінок (наприклад, зображень, індекÑів пошуку, Ñтарих ревізій та ін.). ДлÑ
+уÑпішного Ñ„ÑƒÐ½ÐºÑ†Ñ–Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ð”Ð¾ÐºÑƒÐ’Ñ–ÐºÑ– <strong>має</strong> мати права на Ð·Ð°Ð¿Ð¸Ñ Ð´Ð»Ñ Ð¿Ð°Ð¿Ð¾Ðº, що
+міÑÑ‚ÑÑ‚ÑŒ ці файли. Ð¦Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð° уÑтановки не може змінювати права доÑтупу. Звичайно це
+робитьÑÑ Ð·Ð° допомогою інтерпретатора shell, або, Ñкщо ви викориÑтовуєте хоÑтинг,
+за допомогою FTP або панелі ÑƒÐ¿Ñ€Ð°Ð²Ð»Ñ–Ð½Ð½Ñ Ñ…Ð¾Ñтингом (наприклад cPanel).</p>
+
+<p>Ð¦Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð° уÑтановки налаштує вашу ДокуВікі Ð´Ð»Ñ Ð²Ð¸ÐºÐ¾Ñ€Ð¸ÑтаннÑ
+<acronym title="ÑпиÑок контролю доÑтупу">ACL</acronym>, що, в Ñвою чергу,
+дозволить адмініÑтратору входити до адмініÑтративного меню Ð´Ð»Ñ ÑƒÑтановки доданків,
+ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ¾Ñ€Ð¸Ñтувачами, ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ñ€Ð°Ð²Ð°Ð¼Ð¸ доÑтупу до Ñторінок Вікі та змін параметрів
+конфігурації. Це не Ñ” обов'Ñзковим Ð´Ð»Ñ Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸ ДокуВікі, але зробить Ð¶Ð¸Ñ‚Ñ‚Ñ Ð°Ð´Ð¼Ñ–Ð½Ñ–Ñтратора
+значно легшим.</p>
+
+<p>ДоÑвідчені кориÑтувачі, або кориÑтувачі, що мають оÑобливі вимоги до налагодженнÑ, мають
+викориÑтовувати ці поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ð´ÐµÑ‚Ð°Ð»ÑŒÐ½Ð¾Ñ— інформації, щодо
+<a href="http://dokuwiki.org/install">інÑтрукцій з уÑтановки</a>
+та <a href="http://dokuwiki.org/config">параметрів конфігурації</a>.</p>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/lang.php
new file mode 100644
index 000000000..5f94d9b47
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/lang.php
@@ -0,0 +1,244 @@
+<?php
+/**
+ * ukrainian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Oleksiy Voronin <ovoronin@gmail.com>
+ * @author serg_stetsuk@ukr.net
+ * @author okunia@gmail.com
+ * @author Oleksandr Kunytsia <okunia@gmail.com>
+ * @author Uko uko@uar.net
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '“';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '‘';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = '’';
+$lang['btn_edit'] = 'Редагувати';
+$lang['btn_source'] = 'Показати вихідний текÑÑ‚';
+$lang['btn_show'] = 'Показати Ñторінку';
+$lang['btn_create'] = 'Створити Ñторінку';
+$lang['btn_search'] = 'Пошук';
+$lang['btn_save'] = 'Зберегти';
+$lang['btn_preview'] = 'ПереглÑд';
+$lang['btn_top'] = 'ПовернутиÑÑ Ð½Ð°Ð²ÐµÑ€Ñ…';
+$lang['btn_newer'] = '<< більш нові';
+$lang['btn_older'] = 'більш Ñтарі >>';
+$lang['btn_revs'] = 'Старі ревізії';
+$lang['btn_recent'] = 'Ðедавні зміни';
+$lang['btn_upload'] = 'Завантажити';
+$lang['btn_cancel'] = 'СкаÑувати';
+$lang['btn_index'] = 'ЗміÑÑ‚';
+$lang['btn_secedit'] = 'Редагувати';
+$lang['btn_login'] = 'Увійти';
+$lang['btn_logout'] = 'Вийти';
+$lang['btn_admin'] = 'КеруваннÑ';
+$lang['btn_update'] = 'Оновити';
+$lang['btn_delete'] = 'Знищити';
+$lang['btn_back'] = 'Ðазад';
+$lang['btn_backlink'] = 'ПоÑÐ¸Ð»Ð°Ð½Ð½Ñ Ñюди';
+$lang['btn_backtomedia'] = 'Ðазад до вибору медіа-файлу';
+$lang['btn_subscribe'] = 'ПідпиÑатиÑÑ';
+$lang['btn_unsubscribe'] = 'ВідпиÑатиÑÑ';
+$lang['btn_subscribens'] = 'ПідпиÑатиÑÑ Ð½Ð° зміни в проÑторі імен';
+$lang['btn_unsubscribens'] = 'ВідпиÑатиÑÑ Ð²Ñ–Ð´ змін проÑтору імен';
+$lang['btn_profile'] = 'Оновити профіль';
+$lang['btn_reset'] = 'ОчиÑти';
+$lang['btn_resendpwd'] = 'ÐадіÑлати новий пароль';
+$lang['btn_draft'] = 'Редагувати чернетку';
+$lang['btn_recover'] = 'Відновити чернетку';
+$lang['btn_draftdel'] = 'Знищити чернетку';
+$lang['btn_revert'] = 'Відновити';
+$lang['loggedinas'] = 'Ви';
+$lang['user'] = 'КориÑтувач';
+$lang['pass'] = 'Пароль';
+$lang['newpass'] = 'Ðовий пароль';
+$lang['oldpass'] = 'Поточний пароль';
+$lang['passchk'] = 'ще раз';
+$lang['remember'] = 'Запам\'Ñтати мене';
+$lang['fullname'] = 'Повне ім\'Ñ';
+$lang['email'] = 'E-Mail';
+$lang['register'] = 'РеєÑтраціÑ';
+$lang['profile'] = 'Профіль кориÑтувача';
+$lang['badlogin'] = 'Вибачте, невірне ім\'Ñ Ñ‡Ð¸ пароль.';
+$lang['minoredit'] = 'Ðезначні зміни';
+$lang['draftdate'] = 'Чернетка збережена';
+$lang['nosecedit'] = 'Сторінку змінено, дані розділу заÑтарілі. Завантажено Ñторінку повніÑÑ‚ÑŽ.';
+$lang['regmissing'] = 'Ðеобхідно заповнити вÑÑ– полÑ.';
+$lang['reguexists'] = 'КориÑтувач з таким іменем вже Ñ–Ñнує.';
+$lang['regsuccess'] = 'КориÑтувача Ñтворено. Пароль відправлено на e-mail.';
+$lang['regsuccess2'] = 'КориÑтувача Ñтворено.';
+$lang['regmailfail'] = 'При відправленні Ð¿Ð°Ñ€Ð¾Ð»Ñ ÑталаÑÑŒ помилка. Зв’ÑжітьÑÑ Ð· адмініÑтратором!';
+$lang['regbadmail'] = 'Схоже, що адреÑа e-mail невірна - Ñкщо ви вважаєте, що це помилка, зв’ÑжітьÑÑ Ð· адмініÑтратором';
+$lang['regbadpass'] = 'Ðадані паролі не Ñпівпадають, Ñпробуйте ще раз.';
+$lang['regpwmail'] = 'Пароль ДокуВікі';
+$lang['reghere'] = 'Ще не маєте облікового запиÑу? Отримайте його негайно';
+$lang['profna'] = 'Ð¦Ñ Ð’Ñ–ÐºÑ– не підтримує зміни профілю';
+$lang['profnochange'] = 'Ðемає змін, немає що робити.';
+$lang['profnoempty'] = 'Ð†Ð¼â€™Ñ Ð°Ð±Ð¾ e-mail не можуть бути пуÑтими.';
+$lang['profchanged'] = 'Профіль уÑпішно змінено.';
+$lang['pwdforget'] = 'Забули пароль? Отримайте новий';
+$lang['resendna'] = 'Ð¦Ñ Ð’Ñ–ÐºÑ– не підтримує повторне Ð²Ñ–Ð´Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ.';
+$lang['resendpwd'] = 'ÐадіÑлати пароль длÑ';
+$lang['resendpwdmissing'] = 'Ðеобхідно заповнити уÑÑ– полÑ.';
+$lang['resendpwdnouser'] = 'Такий кориÑтувач не Ñ–Ñнує.';
+$lang['resendpwdbadauth'] = 'Код автентифікації невірний. Перевірте, чи ви викориÑтали повне поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ð¿Ñ–Ð´Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ.';
+$lang['resendpwdconfirm'] = 'ПоÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ð¿Ñ–Ð´Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ Ð²Ñ–Ð´Ñ–Ñлано на e-mail.';
+$lang['resendpwdsuccess'] = 'Ðовий пароль відіÑлано на e-mail.';
+$lang['license'] = 'Якщо не вказано інше, вміÑÑ‚ цієї Вікі підпадає під дію такої ліцензії:';
+$lang['licenseok'] = 'Примітка. Редагуючи ці Ñторінку, ви погоджуєтеÑÑŒ на розповÑÑŽÐ´Ð¶ÐµÐ½Ð½Ñ Ñ–Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ— за такою ліцензією:';
+$lang['searchmedia'] = 'Пошук файлу:';
+$lang['searchmedia_in'] = 'Шукати у %s';
+$lang['txt_upload'] = 'Виберіть файл Ð´Ð»Ñ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ';
+$lang['txt_filename'] = 'Завантажити Ñк (не обов\'Ñзкове)';
+$lang['txt_overwrt'] = 'ПерезапиÑати Ñ–Ñнуючий файл';
+$lang['lockedby'] = 'Заблоковано';
+$lang['lockexpire'] = 'Ð‘Ð»Ð¾ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÑƒÑ”Ñ‚ÑŒÑÑ Ð²';
+$lang['willexpire'] = 'Ð‘Ð»Ð¾ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ñ†Ñ–Ñ”Ñ— Ñторінки закінчуєтьÑÑ Ñ‡ÐµÑ€ÐµÐ· хвилину.\n Щоб уникнути конфліктів викориÑтовуйте кнопку переглÑду Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð´Ð¾Ð²Ð¶ÐµÐ½Ð½Ñ Ð±Ð»Ð¾ÐºÑƒÐ²Ð°Ð½Ð½Ñ.';
+$lang['notsavedyet'] = 'Ðезбережені зміни будуть втрачені.\n ДійÑно продовжити?';
+$lang['rssfailed'] = 'Виникла помилка під Ñ‡Ð°Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ RSS-Ñтрічки: ';
+$lang['nothingfound'] = 'Ðічого не знайдено.';
+$lang['mediaselect'] = 'Вибір медіа-файлу';
+$lang['fileupload'] = 'Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð¼ÐµÐ´Ñ–Ð°-файлу';
+$lang['uploadsucc'] = 'Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾Ð¹ÑˆÐ»Ð¾ уÑпішно';
+$lang['uploadfail'] = 'Помилка при завантаженні. Можливо неправильні права?';
+$lang['uploadwrong'] = 'Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð·Ð°Ð±Ð¾Ñ€Ð¾Ð½ÐµÐ½Ð¾. Таке Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ не дозволÑєтьÑÑ!';
+$lang['uploadexist'] = 'Файл вже Ñ–Ñнує. Ðічого не зроблено.';
+$lang['uploadbadcontent'] = 'Завантажений вміÑÑ‚ не відповідає розширенню %s.';
+$lang['uploadspam'] = 'Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð·Ð°Ð±Ð»Ð¾ÐºÐ¾Ð²Ð°Ð½Ð¾ Ñпам-фільтром.';
+$lang['uploadxss'] = 'Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð·Ð°Ð±Ð»Ð¾ÐºÐ¾Ð²Ð°Ð½Ð¾ через можливіÑÑ‚ÑŒ злонаміреного вміÑту.';
+$lang['uploadsize'] = 'Завантажений файл надто великий (макÑимум %s).';
+$lang['deletesucc'] = 'Файл "%s" знищено.';
+$lang['deletefail'] = 'Ðеможливо знищити "%s" - перевірте права доÑтупу.';
+$lang['mediainuse'] = '"%s" не знищено - файл викориÑтовуєтьÑÑ.';
+$lang['namespaces'] = 'ПроÑтори імен';
+$lang['mediafiles'] = 'ДоÑтупні файли';
+$lang['js']['searchmedia'] = 'Шукати файли';
+$lang['js']['keepopen'] = 'Тримати вікно відкритим під Ñ‡Ð°Ñ Ð²Ð¸Ð±Ð¾Ñ€Ñƒ';
+$lang['js']['hidedetails'] = 'Сховати деталі';
+$lang['js']['nosmblinks'] = 'ПоÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° мережеві папки працює лише в Internet Explorer.
+Ви можете Ñкопіювати поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ñ– відкрити його за допомогою Internet Explorer.';
+$lang['js']['linkwiz'] = 'Чарівник поÑилань';
+$lang['js']['linkto'] = 'ПоÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð°:';
+$lang['js']['del_confirm'] = 'ДійÑно знищити обрані елементи?';
+$lang['js']['mu_btn'] = 'Завантажити одночаÑно кілька файлів';
+$lang['mediausage'] = 'Ð”Ð»Ñ Ð¿Ð¾ÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° цей файл викориÑтовуйте такий ÑинтакÑиÑ:';
+$lang['mediaview'] = 'ПереглÑнути початковий файл';
+$lang['mediaroot'] = 'корінь';
+$lang['mediaupload'] = 'Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ у поточний проÑÑ‚Ñ–Ñ€ імен. Щоб Ñтворити проÑтори імен, додайте Ñ—Ñ… в початок імені файлу та розділіть двокрапками.';
+$lang['mediaextchange'] = 'Ð Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ змінено з .%s на .%s!';
+$lang['reference'] = 'ПоÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð´Ð»Ñ';
+$lang['ref_inuse'] = 'Цей файл не може бути знищено, оÑкільки він викориÑтовуєтьÑÑ Ñ‚Ð°ÐºÐ¸Ð¼Ð¸ Ñторінками:';
+$lang['ref_hidden'] = 'ДеÑкі поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ñ–Ñнують на Ñторінках, Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ñких у Ð²Ð°Ñ Ð½ÐµÐ¼Ð°Ñ” прав.';
+$lang['hits'] = 'Збіги';
+$lang['quickhits'] = 'Збіги у назвах Ñторінок';
+$lang['toc'] = 'ЗміÑÑ‚';
+$lang['current'] = 'поточний';
+$lang['yours'] = 'Ваша верÑÑ–Ñ';
+$lang['diff'] = 'показати відмінноÑÑ‚Ñ– від поточної верÑÑ–Ñ—';
+$lang['diff2'] = 'Показати відмінноÑÑ‚Ñ– між вибраними верÑÑ–Ñми';
+$lang['line'] = 'РÑдок';
+$lang['breadcrumb'] = 'Відвідано';
+$lang['youarehere'] = 'Ви тут';
+$lang['lastmod'] = 'Ð’ оÑтаннє змінено';
+$lang['by'] = ' ';
+$lang['deleted'] = 'знищено';
+$lang['created'] = 'Ñтворено';
+$lang['restored'] = 'відновлено Ñтару ревізію';
+$lang['external_edit'] = 'зовнішнє редагуваннÑ';
+$lang['summary'] = 'ПідÑумок змін';
+$lang['noflash'] = 'Ð”Ð»Ñ Ð¿ÐµÑ€ÐµÐ³Ð»Ñду цієї Ñторінки необхідно вÑтановити <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a>.';
+$lang['download'] = 'Завантажити фрагмент';
+$lang['mail_newpage'] = 'Ñторінку додано:';
+$lang['mail_changed'] = 'Ñторінку змінено:';
+$lang['mail_new_user'] = 'новий кориÑтувач:';
+$lang['mail_upload'] = 'завантажено файл:';
+$lang['qb_bold'] = 'Ðапівжирний текÑÑ‚';
+$lang['qb_italic'] = 'КурÑив';
+$lang['qb_underl'] = 'ПідкреÑлений текÑÑ‚';
+$lang['qb_code'] = 'ТекÑÑ‚ коду';
+$lang['qb_strike'] = 'ЗакреÑлений текÑÑ‚';
+$lang['qb_h1'] = 'Заголовок 1-го рівнÑ';
+$lang['qb_h2'] = 'Заголовок 2-го рівнÑ';
+$lang['qb_h3'] = 'Заголовок 3-го рівнÑ';
+$lang['qb_h4'] = 'Заголовок 4-го рівнÑ';
+$lang['qb_h5'] = 'Заголовок 5-го рівнÑ';
+$lang['qb_h'] = 'Заголовок';
+$lang['qb_hs'] = 'Вибрати заголовок';
+$lang['qb_hplus'] = 'Заголовок вищого рівнÑ';
+$lang['qb_hminus'] = 'Заголовок нищого рівнÑ';
+$lang['qb_hequal'] = 'Заголовок того ж рівнÑ';
+$lang['qb_link'] = 'Внутрішнє поÑиланнÑ';
+$lang['qb_extlink'] = 'Зовнішнє поÑиланнÑ';
+$lang['qb_hr'] = 'Роздільник';
+$lang['qb_ol'] = 'Елемент нумерованого ÑпиÑку';
+$lang['qb_ul'] = 'Елемент ненумерованого ÑпиÑку';
+$lang['qb_media'] = 'Додати зображень та інші файли';
+$lang['qb_sig'] = 'Додати підпиÑ';
+$lang['qb_smileys'] = 'ПоÑмішки';
+$lang['qb_chars'] = 'Спеціальні Ñимволи';
+$lang['upperns'] = 'Перейти до батьківÑького проÑтору імен';
+$lang['admin_register'] = 'Додати нового кориÑтувача';
+$lang['metaedit'] = 'Редагувати метадані';
+$lang['metasaveerr'] = 'Помилка запиÑу метаданих';
+$lang['metasaveok'] = 'Метадані збережено';
+$lang['img_backto'] = 'ПовернутиÑÑ Ð´Ð¾';
+$lang['img_title'] = 'Ðазва';
+$lang['img_caption'] = 'ПідпиÑ';
+$lang['img_date'] = 'Дата';
+$lang['img_fname'] = 'Ð†Ð¼â€™Ñ Ñ„Ð°Ð¹Ð»Ñƒ';
+$lang['img_fsize'] = 'Розмір';
+$lang['img_artist'] = 'Фотограф';
+$lang['img_copyr'] = 'ÐвторÑькі права';
+$lang['img_format'] = 'Формат';
+$lang['img_camera'] = 'Камера';
+$lang['img_keywords'] = 'Ключові Ñлова';
+$lang['subscribe_success'] = '%s доданий(на) до ÑпиÑку розÑилки Ð´Ð»Ñ Ñторінки %s';
+$lang['subscribe_error'] = 'Помилка при доданні %s до ÑпиÑку розÑилки Ð´Ð»Ñ Ñторінки %s';
+$lang['subscribe_noaddress'] = 'У вашому профілі немає адреÑи e-mail, ви не можете кориÑтуватиÑÑ ÑпиÑками розÑилки';
+$lang['unsubscribe_success'] = '%s вилучено зі ÑпиÑку розÑилки Ð´Ð»Ñ Ñторінки %s';
+$lang['unsubscribe_error'] = 'Помилка при вилученні %s зі ÑпиÑку розÑилки Ð´Ð»Ñ %s';
+$lang['authmodfailed'] = 'Ðеправильна наÑтройка автентифікації кориÑтувача. Будь лаÑка, повідомте про це адмініÑтратора.';
+$lang['authtempfail'] = 'ÐÐ²Ñ‚ÐµÐ½Ñ‚Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ ÐºÐ¾Ñ€Ð¸Ñтувача тимчаÑово не доÑтупна. Якщо це буде продовжуватиÑÑŒ, будь лаÑка, повідомте адмініÑтратора.';
+$lang['i_chooselang'] = 'Виберіть мову';
+$lang['i_installer'] = 'Програма уÑтановки ДокуВікі';
+$lang['i_wikiname'] = 'Ðазва Вікі';
+$lang['i_enableacl'] = 'Дозволити викориÑÑ‚Ð°Ð½Ð½Ñ ACL (рекомендовано)';
+$lang['i_superuser'] = 'СуперкориÑтувач';
+$lang['i_problems'] = 'Програма уÑтановки знайшла декілька проблем, що вказані нижче. Ви не можете продовжити, поки не виправите Ñ—Ñ…';
+$lang['i_modified'] = 'З причин безпеки цей Ñкрипт буде працювати тільки з новою та немодифікованою уÑтановкою ДокуВікі.
+Вам Ñлід або ще раз розпакувати файли із завантаженого пакету, або звернутиÑÑ Ð´Ð¾ повної <a href="http://dokuwiki.org/install">інÑтрукції з уÑтановки ДокуВікі</a>';
+$lang['i_funcna'] = 'Ð¤ÑƒÐ½ÐºÑ†Ñ–Ñ PHP <code>%s</code> не доÑтупна. Можливо, хоÑтинг-провайдер відключив Ñ—Ñ— з ÑкихоÑÑŒ причин?';
+$lang['i_phpver'] = 'ВерÑÑ–Ñ PHP <code>%s</code> менша, ніж необхідно - <code>%s</code>. Ðеобхідно оновити PHP.';
+$lang['i_permfail'] = 'ДокуВікі не має прав на Ð·Ð°Ð¿Ð¸Ñ <code>%s</code>. Ðеобхідно змінити права доÑтупа Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— папки!';
+$lang['i_confexists'] = '<code>%s</code> вже Ñ–Ñнує';
+$lang['i_writeerr'] = 'Ðеможливо Ñтворити <code>%s</code>. Ðеобхідно перевірити права доÑтупа Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ñƒ/папки та Ñтворити файл вручну.';
+$lang['i_badhash'] = 'Ðевпізнаний або модифікований dokuwiki.php (hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - невірне або пуÑте значеннÑ.';
+$lang['i_success'] = 'ÐаÑтройку завершено. Ми можете знищити файл install.php.
+Перейдіть до <a href="doku.php">вашої нової ДокуВікі</a>';
+$lang['i_failure'] = 'При збереженні файлу конфігурації виникли помилки. Можливо вам доведетьÑÑ Ð²Ð¸Ð¿Ñ€Ð°Ð²Ð¸Ñ‚Ð¸ Ñ—Ñ… ÑамоÑтійно
+до початку викориÑÑ‚Ð°Ð½Ð½Ñ <a href="doku.php">вашої нової ДокуВікі</a>.';
+$lang['i_policy'] = 'Початкова політика ACL';
+$lang['i_pol0'] = 'Відкрита Вікі (читаннÑ, Ð·Ð°Ð¿Ð¸Ñ Ñ‚Ð° Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð² Ð´Ð»Ñ Ð²ÑÑ–Ñ…)';
+$lang['i_pol1'] = 'Публічна Вікі (Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ð²ÑÑ–Ñ…, Ð·Ð°Ð¿Ð¸Ñ Ñ‚Ð° Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð·Ð°Ñ€ÐµÑ”Ñтрованих кориÑтувачів)';
+$lang['i_pol2'] = 'Закрита Вікі (читаннÑ, Ð·Ð°Ð¿Ð¸Ñ Ñ‚Ð° Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñ‚Ñ–Ð»ÑŒÐºÐ¸ Ð´Ð»Ñ Ð·Ð°Ñ€ÐµÑ”Ñтрованих кориÑтувачів)';
+$lang['i_retry'] = 'Повторити';
+$lang['mu_intro'] = 'Тут ви можете завантажити одночаÑно кілька файлів. ÐатиÑніть кнопку "Вибрати", щоб додати файли в чергу. ПіÑÐ»Ñ Ð·Ð°ÐºÑ–Ð½Ñ‡ÐµÐ½Ð½Ñ Ð½Ð°Ñ‚Ð¸Ñніть кнопку "Завантажити"';
+$lang['mu_gridname'] = 'Ð†Ð¼â€™Ñ Ñ„Ð°Ð¹Ð»Ñƒ';
+$lang['mu_gridsize'] = 'Розмір';
+$lang['mu_gridstat'] = 'СтатуÑ';
+$lang['mu_namespace'] = 'ПроÑÑ‚Ñ–Ñ€ імен';
+$lang['mu_browse'] = 'Вибрати';
+$lang['mu_toobig'] = 'надто великий';
+$lang['mu_ready'] = 'готовий до завантаженнÑ';
+$lang['mu_done'] = 'закінчено';
+$lang['mu_fail'] = 'невдале';
+$lang['mu_authfail'] = 'закінчено термін дії ÑеÑÑ–Ñ—';
+$lang['mu_progress'] = 'Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ @PCT@%';
+$lang['mu_filetypes'] = 'Дозволені типи файлів';
+$lang['mu_info'] = 'Файли завантажено';
+$lang['mu_lasterr'] = 'ОÑÑ‚Ð°Ð½Ð½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°:';
+$lang['recent_global'] = 'Ви переглÑдаєте зміни в межах проÑтору імен <b>%s</b>. Також можна <a href="%s">переглÑнути зміни в межах уÑієї Вікі</a>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/locked.txt
new file mode 100644
index 000000000..367c286bf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/locked.txt
@@ -0,0 +1,3 @@
+====== Сторінку заблоковано ======
+
+Цю Ñторінку заблоковано іншим кориÑтувачем Ð´Ð»Ñ Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ. Зачекайте, поки цей кориÑтувач завершить Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ð°Ð±Ð¾ закінчитьÑÑ Ñ‡Ð°Ñ Ð±Ð»Ð¾ÐºÑƒÐ²Ð°Ð½Ð½Ñ. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/login.txt
new file mode 100644
index 000000000..f45f81024
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/login.txt
@@ -0,0 +1,4 @@
+====== Вхід до вікі ======
+
+Ви не ввійшли до ÑиÑтеми. Введіть ваші реєÑтраційні дані Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, щоб увійти. У вашому браузері повинні бути увімкнені файли cookies.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/mailtext.txt
new file mode 100644
index 000000000..5bd25c3c3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/mailtext.txt
@@ -0,0 +1,17 @@
+Сторінка в вашому ДокуВікі була змінена. Деталі нижче:
+
+Дата : @DATE@
+ОглÑдач : @BROWSER@
+ÐдреÑа IP : @IPADDRESS@
+Ім'Ñ Ð²ÑƒÐ·Ð»Ð° : @HOSTNAME@
+Стара ревізіÑ: @OLDPAGE@
+Ðова Ñ€ÐµÐ²Ñ–Ð·Ñ–Ñ : @NEWPAGE@
+ПідÑумок змін : @SUMMARY@
+КориÑтувач : @USER@
+
+@DIFF@
+
+
+--
+Це Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð±ÑƒÐ»Ð¾ Ñтворене ДокуВікі з
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/newpage.txt
new file mode 100644
index 000000000..39cdecc35
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/newpage.txt
@@ -0,0 +1,4 @@
+====== Сторінка ще не Ñ–Ñнує ======
+
+Ви прийшли за поÑиланнÑм на Ñторінку, що ще не Ñ–Ñнує. Якщо ваші права дозволÑÑŽÑ‚ÑŒ, ви можете Ñтворити цю Ñторінку натиÑнувши кнопку ''Створити Ñторінку''.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/norev.txt
new file mode 100644
index 000000000..3c9295fce
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/norev.txt
@@ -0,0 +1,4 @@
+====== Ðемає такої ревізії ======
+
+Вказана Ñ€ÐµÐ²Ñ–Ð·Ñ–Ñ Ð½Ðµ Ñ–Ñнує. ВикориÑтовуйте кнопку ''Старі ревізії'', щоб отримати перелік ревізій цього документу.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/preview.txt
new file mode 100644
index 000000000..b4174c7a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/preview.txt
@@ -0,0 +1,4 @@
+====== Попередній переглÑд ======
+
+Це попередній переглÑд того, Ñк буде виглÑдати ваш текÑÑ‚. Ðе забувайте, текÑÑ‚ ще **не збережено**!
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/pwconfirm.txt
new file mode 100644
index 000000000..7a46f536a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/pwconfirm.txt
@@ -0,0 +1,14 @@
+Доброго днÑ, @FULLNAME@!
+
+ХтоÑÑŒ запитав новий пароль Ð´Ð»Ñ ÐºÐ¾Ñ€Ð¸Ñтувача @TITLE@ на @DOKUWIKIURL@
+
+Якщо це були не ви, ігноруйте це повідомленнÑ.
+
+Ð”Ð»Ñ Ð¿Ñ–Ð´Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ, що це дійÑно ви запитали новий пароль, будь лаÑка
+перейдіть за наÑтупним поÑиланнÑм.
+
+@CONFIRM@
+
+--
+Це Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñтворене ДокуВікі з
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/read.txt
new file mode 100644
index 000000000..59ea6a1b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/read.txt
@@ -0,0 +1,2 @@
+Ð¦Ñ Ñторінка доÑтупна тільки Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ³Ð»Ñду. Ви можете продивитиÑÑ Ð²Ð¸Ñ…Ñ–Ð´Ð½Ð¸Ð¹ текÑÑ‚, але не можете змінювати його. Якщо ви вважаєте, що це не вірно, звернітьÑÑ Ð´Ð¾ адмініÑтратора.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/recent.txt
new file mode 100644
index 000000000..645e3d869
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/recent.txt
@@ -0,0 +1,4 @@
+====== ОÑтанні зміни ======
+
+Вказані нижче Ñторінки було змінено нещодавно.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/register.txt
new file mode 100644
index 000000000..8fffc002e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/register.txt
@@ -0,0 +1,4 @@
+====== РеєÑÑ‚Ñ€Ð°Ñ†Ñ–Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ кориÑтувача ======
+
+Введіть необхідну інформацію Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, щоб Ñтворити нового кориÑтувача у цій Вікі. ПереконайтеÑÑ. що ви ввели **правильну адреÑу e-mail** - Ñкщо ви не ввели пароль, то новий пароль буде відіÑлано на цю адреÑу. Ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача повинно бути дозволеною [[doku>pagename|назвою Ñторінки]] вікі.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/registermail.txt
new file mode 100644
index 000000000..9b55d85bf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/registermail.txt
@@ -0,0 +1,14 @@
+ЗареєÑтровано нового кориÑтувача. ПереглÑньте деталі:
+
+КориÑтувач : @NEWUSER@
+Повне ім'Ñ : @NEWNAME@
+E-Mail : @NEWEMAIL@
+
+Дата : @DATE@
+Браузер : @BROWSER@
+ÐдреÑа IP : @IPADDRESS@
+Ðазва хоÑту : @HOSTNAME@
+
+--
+Це Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñтворене ДокуВікі з
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/resendpwd.txt
new file mode 100644
index 000000000..208efad55
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/resendpwd.txt
@@ -0,0 +1,3 @@
+====== ÐадіÑлати новий пароль ======
+
+Заповніть відомоÑÑ‚Ñ– Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, щоб отримати новий пароль у цій Вікі. Ðовий пароль буде надіÑлано на e-mail, що вказано у реєÑтраційних даних. Ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача повинно бути дозволеним іменем кориÑтувача Вікі.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/revisions.txt
new file mode 100644
index 000000000..646de2a2f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/revisions.txt
@@ -0,0 +1,4 @@
+====== Старі ревізії ======
+
+Це Ñтарі верÑÑ–Ñ— поточного документа. Ð”Ð»Ñ Ñ‚Ð¾Ð³Ð¾, щоб повернутиÑÑ Ð´Ð¾ Ñтарої верÑÑ–Ñ—, виберіть Ñ—Ñ—, натиÑніть ''Редагувати'', та збережіть Ñторінку.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/searchpage.txt
new file mode 100644
index 000000000..971c24814
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/searchpage.txt
@@ -0,0 +1,5 @@
+====== Пошук ======
+
+ДивітьÑÑ Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð°Ñ‚Ð¸ пошуку нижче. Якщо ви не знайшли те, що ви шукали, ви можете Ñтворити або редагувати Ñторінку, що має таке ж ім’Ñ, що Ñ– пошуковий запит за допомогою відповідної кнопки.
+
+===== Результати =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/showrev.txt
new file mode 100644
index 000000000..2706b35d6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/showrev.txt
@@ -0,0 +1,2 @@
+**Це Ñтара верÑÑ–Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ñƒ!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/stopwords.txt
new file mode 100644
index 000000000..288ab8e9f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/stopwords.txt
@@ -0,0 +1,3 @@
+# Це ÑпиÑок ігнорованих індекÑатором Ñлів, одне Ñлово в Ñ€Ñдку
+# При редагуванні цього файлу переконайтеÑÑ, що викориÑтовуєте Ñимволи Ð¿ÐµÑ€ÐµÐ²ÐµÐ´ÐµÐ½Ð½Ñ Ñ€Ñдку, Ñк в UNIX (одиночні)
+# Слова, коротші за 3 Ñимволи включати не треба. Вони ігноруютьÑÑ Ð² будь-Ñкому випадку
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/subscribermail.txt
new file mode 100644
index 000000000..8d4dfebb4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/subscribermail.txt
@@ -0,0 +1,22 @@
+Доброго днÑ!
+
+Сторінка @PAGE@ в вікі @TITLE@ змінилаÑÑ.
+ПереглÑньте зміни:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Дата: @DATE@
+КориÑтувач : @USER@
+ПідÑумок змін: @SUMMARY@
+Стара ревізіÑ: @OLDPAGE@
+Ðова ревізцÑ: @NEWPAGE@
+
+Щоб відпиÑатиÑÑ Ð²Ñ–Ð´ цих повідомлень, увійдіть в вікі за адреÑою
+@DOKUWIKIURL@, відвідайте @NEWPAGE@
+та оберіть 'ВідпиÑатиÑÑ'
+
+--
+Це Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñтворене ДокуВікі з
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/updateprofile.txt
new file mode 100644
index 000000000..d043f99a7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/updateprofile.txt
@@ -0,0 +1,5 @@
+====== Оновити ваш профіль ======
+
+Ðеобхідно заповнити тільки Ñ‚Ñ– полÑ, Ñкі ви бажаєте змінити. Ви не можете змінити Ñ–Ð¼â€™Ñ ÐºÐ¾Ñ€Ð¸Ñтувача.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/uploadmail.txt
new file mode 100644
index 000000000..6eb8c93c9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/uploadmail.txt
@@ -0,0 +1,14 @@
+Ðа вашу ДокуВікі завантажено файл. Деталі:
+
+Файл : @MEDIA@
+Дата : @DATE@
+Браузер : @BROWSER@
+IP-ÐдреÑа : @IPADDRESS@
+Ðазва вузла : @HOSTNAME@
+Розмір : @SIZE@
+Тип MIME : @MIME@
+КориÑтувач : @USER@
+
+--
+Цей лиÑÑ‚ автоматично Ñтворено ДокуВікі на Ñайті:
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/wordblock.txt
new file mode 100644
index 000000000..869f93a87
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/wordblock.txt
@@ -0,0 +1,4 @@
+====== Заблокований СПÐÐœ ======
+
+Ваші зміни **не були** збережені тому що вони міÑÑ‚ÑÑ‚ÑŒ одне чи декілька заблокованих Ñлів. Якщо ви намагалиÑÑŒ додати Ñпам до вікі, то нехай вам буде Ñоромно. Якщо ви вважаєте, що це помилка, звернітьÑÑ Ð´Ð¾ адмініÑтратора цієї Вікі.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/admin.txt
new file mode 100644
index 000000000..d8ac73e8c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/admin.txt
@@ -0,0 +1,3 @@
+====== Quản lý ======
+
+Sau đây là các mục quản lý trong DokuWiki.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/backlinks.txt
new file mode 100644
index 000000000..231ab5d8c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/backlinks.txt
@@ -0,0 +1,3 @@
+====== Nối vỠtrước ======
+
+Äây là danh sách các trang hình nhÆ° đã nối vào trang này.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/conflict.txt
new file mode 100644
index 000000000..0df1ddbe4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/conflict.txt
@@ -0,0 +1,5 @@
+====== Có phiên bản mới hơn ======
+
+Trang bạn đang biên soạn có một phiên bản mới hơn. Việc này xảy ra khi một bạn đổi trang ấy khi bạn đang biên soạn trang này.
+
+Xem kỹ những thay đổi dÆ°á»›i đây, rồi quyết định giữ phiên bản nào. Nếu chá»n ''bảo lÆ°u'', phiên bản của bạn được giữ lại. Bấm ''huá»·'' để giữ phiên bản kia.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/denied.txt
new file mode 100644
index 000000000..e70ed5d5f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/denied.txt
@@ -0,0 +1,3 @@
+====== Không được phép vào ======
+
+Rất tiếc là bạn không được phép để tiếp tục. Bạn quen đăng nhập hay sao?
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/diff.txt
new file mode 100644
index 000000000..10bfd0f30
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/diff.txt
@@ -0,0 +1,4 @@
+====== Khác biệt ======
+
+Äây là những khác biệt giữa phiên bạn được chá»n và phiên bản hiện tại của trang này.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/edit.txt
new file mode 100644
index 000000000..b00316a7c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/edit.txt
@@ -0,0 +1 @@
+Biên soạn trang này và bấm ''Bảo lưu''. Xem [[wiki:syntax]] vỠcú pháp của Wiki. Xin bạn biên soạn trang này nếu bạn có thể **cải tiến** nó. Nếu bạn muốn thí nghiệm, bạn có thể tập những bước đầu ở [[playground:playground]].
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/editrev.txt
new file mode 100644
index 000000000..076466c06
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/editrev.txt
@@ -0,0 +1,2 @@
+**Bạn đã nạp một phiên bản cũ của văn kiện!** Nếu bảo lưu, bạn sẽ tạo phiên bản với dữ kiện này.
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/index.txt
new file mode 100644
index 000000000..708d2030d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/index.txt
@@ -0,0 +1,3 @@
+====== Mục lục ======
+
+Äây là mục lục của tất cả các trang, xếp theo thứ tá»± [[doku>namespaces|namespaces]].
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/lang.php
new file mode 100644
index 000000000..23f42d69a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/lang.php
@@ -0,0 +1,106 @@
+<?php
+/**
+ * vietnamese language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author James Do <jdo@myrealbox.com>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+
+$lang['btn_edit'] = 'Biên soạn trang này';
+$lang['btn_source'] = 'Xem mã nguồn';
+$lang['btn_show'] = 'Xem trang';
+$lang['btn_create'] = 'Tạo trang này';
+$lang['btn_search'] = 'Tìm';
+$lang['btn_save'] = 'LÆ°u';
+$lang['btn_preview']= 'Duyệt trước';
+$lang['btn_top'] = 'Trở lên trên';
+$lang['btn_revs'] = 'Các phiên bản cũ';
+$lang['btn_recent'] = 'Thay đổi gần đây';
+$lang['btn_upload'] = 'Tải lên';
+$lang['btn_cancel'] = 'Huá»· bá»';
+$lang['btn_index'] = 'Mục lục';
+$lang['btn_secedit']= 'Biên soạn';
+$lang['btn_login'] = 'Äăng nhập';
+$lang['btn_logout'] = 'Thoát';
+$lang['btn_admin'] = 'Quản lý';
+$lang['btn_update'] = 'Cập nhật';
+$lang['btn_delete'] = 'Xoá';
+
+$lang['loggedinas'] = 'Username đang dùng';
+$lang['user'] = 'Username';
+$lang['pass'] = 'Password';
+$lang['remember'] = 'Lưu username/password lại';
+$lang['fullname'] = 'HỠvà tên';
+$lang['email'] = 'E-Mail';
+$lang['register'] = 'Äăng ký';
+$lang['badlogin'] = 'Username hoặc password không đúng.';
+
+$lang['regmissing'] = 'Bạn cần Ä‘iá»n vào tất cả các trÆ°á»ng';
+$lang['reguexists'] = 'Bạn khác đã dùng username này rồi.';
+$lang['regsuccess'] = 'Äã tạo username, và đã gởi password.';
+$lang['regmailfail']= 'Không gởi password được. Xin bạn liên hệ vá»›i ngÆ°á»i quản lý.';
+$lang['regbadmail'] = 'Email hình nhÆ° không đúng. Xin bạn liên hệ vá»›i ngÆ°á»i quản lý.';
+$lang['regpwmail'] = 'Password DokuWiki của bạn là';
+$lang['reghere'] = 'Xin bạn đăng ký username nếu chưa có.';
+
+$lang['txt_upload'] = 'Chá»n tệp để tải lên';
+$lang['txt_filename'] = 'Äiá»n wikiname (tuỳ ý)';
+$lang['lockedby'] = 'Äang khoá bởi';
+$lang['lockexpire'] = 'Khoá sẽ hết hạn vào lúc';
+$lang['willexpire'] = 'Khoá của bạn để biên soạn trang này sẽ hết hạn trong vòng 1 phút.\nÄể tránh xung Ä‘á»™t, bạn nên bấm nút xem trÆ°á»›c để lập lại thá»i gian khoá';
+
+$lang['notsavedyet'] = 'Hiện có những thay đổi chưa được bảo lưu, và sẽ mất.\nBạn thật sự muốn tiếp tục?';
+$lang['rssfailed'] = 'Rút nguồn này gặp phải lỗi';
+$lang['nothingfound']= 'Không tìm được gì';
+
+$lang['mediaselect'] = 'Chá»n tệp media';
+$lang['fileupload'] = 'Tải lên tệp media';
+$lang['uploadsucc'] = 'Tải lên thành công';
+$lang['uploadfail'] = 'Tải lên thất bại. Có thể vì không đủ phép?';
+$lang['uploadwrong'] = 'Tải lên bị từ chối. Cấm tải loại tệp này';
+$lang['namespaces'] = 'Äá» tài';
+$lang['mediafiles'] = 'Tệp có sẵn ở';
+
+$lang['hits'] = 'Trùng';
+$lang['quickhits'] = 'Trang trùng hợp';
+$lang['toc'] = 'Ná»™i dung';
+$lang['current'] = 'hiện tại';
+$lang['yours'] = 'Phiên bản hiện tại';
+$lang['diff'] = 'cho xem khác biệt với phiên bản hiện tại';
+$lang['line'] = 'Dòng';
+$lang['breadcrumb'] = 'Trang đã xem';
+$lang['lastmod'] = 'Thá»i Ä‘iểm thay đổi';
+$lang['by'] = 'do';
+$lang['deleted'] = 'bị xoá';
+$lang['created'] = 'được tạo ra';
+$lang['restored'] = 'phiên bản cũ đã được khôi phục';
+$lang['summary'] = 'Tóm tắt biên soạn';
+
+$lang['mail_newpage'] = 'Trang được thêm:';
+$lang['mail_changed'] = 'Trang thay đổi:';
+
+$lang['js']['nosmblinks'] = "Nối với các Windows shares chỉ có hiệu lực với Microsoft Internet Explorer.\nBạn vẫn có thể sao và chép các mốc nối.";
+
+$lang['qb_bold'] = 'Chữ đậm';
+$lang['qb_italic'] = 'Chữ nghiêng';
+$lang['qb_underl'] = 'Chữ gạch dưới';
+$lang['qb_code'] = 'Chữ mã nguồn';
+$lang['qb_h1'] = 'Äầu Ä‘á» cấp 1';
+$lang['qb_h2'] = 'Äầu Ä‘á» cấp 2';
+$lang['qb_h3'] = 'Äầu Ä‘á» cấp 3';
+$lang['qb_h4'] = 'Äầu Ä‘á» cấp 4';
+$lang['qb_h5'] = 'Äầu Ä‘á» cấp 5';
+$lang['qb_link'] = 'Mốc nối nội tại';
+$lang['qb_extlink'] = 'Mốc nối ra ngoài';
+$lang['qb_hr'] = 'Gạch ngang';
+$lang['qb_ol'] = 'Äiểm trong danh sách có thứ tá»±';
+$lang['qb_ul'] = 'Äiểm trong danh sách không đánh số';
+$lang['qb_media'] = 'Thêm ảnh và tệp khác';
+$lang['qb_sig'] = 'Äặt chữ ký';
+
+$lang['js']['del_confirm']= 'Xoá mục này?';
+
+
+//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/locked.txt
new file mode 100644
index 000000000..acb0981c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/locked.txt
@@ -0,0 +1,3 @@
+====== Trang bị khoá ======
+
+Trang này đang bị khoá để một bạn khác biên soạn. Bạn cần đợi cho đến khi nào bạn kia đã biên soạn xong, hoặc khoá hết hạn.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/login.txt
new file mode 100644
index 000000000..4265a79df
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/login.txt
@@ -0,0 +1,3 @@
+====== Äăng nhập ======
+
+Hiện bạn chÆ°a đăng nhập! Äiá»n vào những chi tiết chứng minh ở phía dÆ°á»›i. Máy của bạn cần đặt chế Ä‘á»™ nhận cookies để đăng nhập.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/mailtext.txt
new file mode 100644
index 000000000..3fcdf5595
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/mailtext.txt
@@ -0,0 +1,16 @@
+Một trang trên DokuWiki của bạn vừa được bổ sung hoặc thay đổi. Sau đây là chi tiết:
+
+Date : @DATE@
+Browser : @BROWSER@
+IP-Address : @IPADDRESS@
+Hostname : @HOSTNAME@
+Old Revision: @OLDPAGE@
+New Revision: @NEWPAGE@
+Edit Summary: @SUMMARY@
+User : @USER@
+
+@DIFF@
+
+--
+This mail was generated by DokuWiki at
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/newpage.txt
new file mode 100644
index 000000000..b03bb5224
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/newpage.txt
@@ -0,0 +1,3 @@
+====== Chưa có đỠtài này ======
+
+Bạn vừa nối vào một đỠtài chưa có. Bạn có tạo đỠtài này bằng cách bấm vào nút ''Tạo trang này''.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/norev.txt
new file mode 100644
index 000000000..0fa27d898
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/norev.txt
@@ -0,0 +1,3 @@
+====== Phiên bản chưa có ======
+
+Chưa có phiên bản được chỉ định. Xin bấm nút ''Phiên bản cũ'' để xem danh sách các phiên bản của văn kiện này.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/preview.txt
new file mode 100644
index 000000000..81069a2c4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/preview.txt
@@ -0,0 +1,3 @@
+====== Xem trÆ°á»›c ======
+
+Văn kiện của bạn sẽ thể hiện như sau. Nên nhớ: Văn kiện này **chưa được bảo lưu**!
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/read.txt
new file mode 100644
index 000000000..ffeffc7bf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/read.txt
@@ -0,0 +1 @@
+Trang này chỉ được Ä‘á»c thôi. Bạn có thể xem mã nguồn, nhÆ°ng không được thay đổi. Xin bạn há»i ngÆ°á»i quản lý nếu không đúng.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/recent.txt
new file mode 100644
index 000000000..fe6628f6e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/recent.txt
@@ -0,0 +1,3 @@
+====== Thay đổi gần đây ======
+
+Những trang sau được thay đổi gần đây.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/register.txt
new file mode 100644
index 000000000..f7d35c84b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/register.txt
@@ -0,0 +1,3 @@
+====== Äăng ký má»›i ======
+
+Xin Ä‘iá»n vào má»i thông tin sau đây để tạo má»™t username má»›i cho wiki này. Bạn cần cung cấp **e-mail chính xác** - để gởi password má»›i của bạn đến đấy. Username cần là má»™t [[doku>pagename|pagename]] hợp lệ.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/revisions.txt
new file mode 100644
index 000000000..943e3fff1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/revisions.txt
@@ -0,0 +1,3 @@
+====== Phiên bản cũ ======
+
+Sau đây là các phiên bản cÅ© của văn kiện này. Äể quây vá» má»™t phiên bản cÅ©, chá»n ở phía dÆ°á»›i, bấm vào ''Biên soạn trang này'' để bảo lÆ°u.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/searchpage.txt
new file mode 100644
index 000000000..821ca9f7b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/searchpage.txt
@@ -0,0 +1,5 @@
+====== Tìm ======
+
+Sau đây là kết quả của câu há»i của bạn. Nếu bạn không thấy được những gì bạn Ä‘ang tìm, bạn có thể má»™t trang má»›i, cùng tên câu há»i của bạn, bằng cách bấm vào nút ''Biên soạn trang này''.
+
+===== Kết quả =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/showrev.txt
new file mode 100644
index 000000000..a146f4ef3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/showrev.txt
@@ -0,0 +1,2 @@
+**Äây là má»™t phiên bản cÅ© cùa văn kiện!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/wordblock.txt
new file mode 100644
index 000000000..b219ca141
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/wordblock.txt
@@ -0,0 +1,3 @@
+====== SPAM bị chận ======
+
+Các thay đổi **không** được bảo lÆ°u vì có má»™t hoặc nhiá»u từ bị ngăn chận. Nếu muốn spam Wiki này -- ngÆ°ng liá»n! Nếu đây là má»™t sai lầm, liên lạc vá»›i ngÆ°á»i quản lý của Wiki.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/admin.txt
new file mode 100644
index 000000000..3cc10335d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/admin.txt
@@ -0,0 +1,4 @@
+====== 管ç†é¸å–® ======
+
+以下為 DokuWiki 的管ç†è¨­å®š
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/adminplugins.txt
new file mode 100644
index 000000000..fb1999269
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/adminplugins.txt
@@ -0,0 +1 @@
+===== 外加æ’件 ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/backlinks.txt
new file mode 100644
index 000000000..381a76812
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/backlinks.txt
@@ -0,0 +1,5 @@
+====== 被引用的連çµ(Backlinks) ======
+
+這裡是有引用ã€é€£çµåˆ°åŽŸå…ˆé é¢çš„清單。
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/conflict.txt
new file mode 100644
index 000000000..e52613dc8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/conflict.txt
@@ -0,0 +1,4 @@
+====== 有一個更新的版本已存在 ======
+
+有一個您所編輯的更新版本已經存在了。\\ 這狀æ³ä¹‹æ‰€ä»¥æœƒç™¼ç”Ÿï¼šä¹ƒæ˜¯å› ç‚ºç•¶æ‚¨æ­£åœ¨ç·¨ä¿®å®ƒçš„時候,而其他使用者已變更這份文件。\\ 請檢驗以下的差異,然後決定è¦ç”¨å“ªä¸€ä»½ã€‚\\ 若您é¸æ“‡ã€Œ''儲存''ã€ï¼Œé‚£æ‚¨çš„版本就會被存下來了。而「å–消ã€å‰‡æœƒä¿ç•™ç‚ºç¾åœ¨é€™ç‰ˆæœ¬ã€‚
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/denied.txt
new file mode 100644
index 000000000..20c512abc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/denied.txt
@@ -0,0 +1,4 @@
+====== 拒絕尚未授權 ======
+
+很抱歉您權é™ä¸å¤ ä»¥è‡´ç„¡æ³•ç¹¼çºŒã€‚或許您忘了先登入您的帳號嗎?
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/diff.txt
new file mode 100644
index 000000000..a064f81ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/diff.txt
@@ -0,0 +1,4 @@
+====== 差異處 ======
+
+這裡會顯示出所é¸çš„版次與目å‰ç‰ˆæ¬¡çš„差異處。
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/draft.txt
new file mode 100644
index 000000000..81a092be0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/draft.txt
@@ -0,0 +1,5 @@
+====== 發ç¾è‰ç¨¿æª”案 ======
+
+您上次編輯此é é¢ä¸¦æœªæ­£ç¢ºçš„完æˆã€‚DokuWiki在您編輯的時候自動儲存一份è‰ç¨¿ä½¿å¾—您å¯ä»¥ç¹¼çºŒç·¨è¼¯ã€‚以下您å¯ä»¥è§€çœ‹ä¸Šæ¬¡ç·¨è¼¯çš„資料。
+
+請決定你è¦//復原//您éºå¤±çš„編輯文件,//刪除//這份è‰ç¨¿ï¼Œæˆ–者//å–消//ç›®å‰çš„編輯程åºã€‚
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/edit.txt
new file mode 100644
index 000000000..5be7fbb4e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/edit.txt
@@ -0,0 +1 @@
+æ示:編修本é ä¸¦æŒ‰ã€Œ''儲存''ã€å³å¯ã€‚ ä¸æ‡‚ Wiki 語法?沒關係點一下 [[wiki:syntax|中文語法]] 。若您覺得å¯è®“本文å“質「**更好**ã€çš„è©±ï¼Œé‚£å°±è«‹ç¹¼çºŒå§ :) \\    但若åªæƒ³ç·´ç¿’或測試æ±è¥¿çš„話,那麼請先多利用 [[playground:playground|新手試煉場]] 來試煉您的身手å§ã€‚
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/editrev.txt
new file mode 100644
index 000000000..b344e0772
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/editrev.txt
@@ -0,0 +1,2 @@
+**您目å‰è¼‰å…¥çš„是本份文件的舊版ï¼ï¼** 若存檔的話,那這些資料就會被存æˆå¦ä¸€ä»½äº†å–”。
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/index.txt
new file mode 100644
index 000000000..961095bff
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/index.txt
@@ -0,0 +1,3 @@
+====== ç´¢å¼•é  ======
+
+ç›®å‰æ‚¨æ‰€çœ‹åˆ°çš„是用 [[doku>namespaces|namespaces]] 來排åºç›®å‰æ‰€æœ‰å¯ç”¨çš„é é¢æ¸…單。\\ 請直接按您想è¦çš„é é¢æˆ–者用「顯示é é¢ã€ä¾†æª¢è¦–ç›®å‰æ‰€åœ¨é é¢
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/install.html
new file mode 100644
index 000000000..879c152b5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/install.html
@@ -0,0 +1,8 @@
+<p>本页é¢æ—¨åœ¨å¸®åŠ©æ‚¨å®Œæˆç¬¬ä¸€æ¬¡å®‰è£…å’Œé…ç½® <a href="http://dokuwiki.org">Dokuwiki</a>。关于安装工具的更多信æ¯è¯·å‚阅其 <a href="http://dokuwiki.org/installer">官方文档页é¢</a>。</p>
+
+<p>DokuWiki 使用普通的文件ä¿å­˜ç»´åŸºé¡µé¢å’Œå…¶ä»–与这些页é¢æŒ‚é’©çš„ä¿¡æ¯ï¼ˆä¾‹å¦‚:图åƒï¼Œæœç´¢ç´¢å¼•ï¼Œä¿®è®¢è®°å½•ç­‰ï¼‰ã€‚为了能正常è¿è¡Œï¼ŒDokuWiki <strong>å¿…é¡»</strong> 拥有针对那些路径和文件的写æƒé™ã€‚本安装工具ä¸èƒ½ç”¨äºŽè®¾ç½®è¿™äº›æƒé™ã€‚对æƒé™çš„æ“作通常通过命令行或使用您的网络æœåŠ¡æ供商的 FTP 或控制é¢æ¿ï¼ˆä¾‹å¦‚ cPanel)进行æ“作。</p>
+
+<p>本安装工具将设置您的 DokuWiki é…ç½® <acronym title="访问控制列表">ACL</acronym>,它能让管ç†å‘˜ç™»å½•å¹¶ä½¿ç”¨â€œç®¡ç†â€åŠŸèƒ½æ¥å®‰è£…æ’件,管ç†ç”¨æˆ·ï¼Œç®¡ç†è®¿é—®æƒé™å’Œå…¶ä»–é…置设置。它并ä¸æ˜¯ DokuWiki 正常è¿è¡Œæ‰€å¿…须的,但安装之åŽå®ƒå°†æ›´æ–¹ä¾¿æ‚¨çš„管ç†ã€‚</p>
+
+<p>有ç»éªŒçš„用户或有特殊需求的用户请å‚阅更详细的 <a href="http://dokuwiki.org/install">安装指å—</a>
+å’Œ <a href="http://dokuwiki.org/config">é…置设置</a>。</p> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/lang.php
new file mode 100644
index 000000000..f936123f4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/lang.php
@@ -0,0 +1,252 @@
+<?php
+/**
+ * Chinese(Traditional) language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author chinsan <chinsan@mail2000.com.tw>
+ * @author Li-Jiun Huang <ljhuang.tw@gmail.com>
+ * @author http://www.chinese-tools.com/tools/converter-simptrad.html
+ * @author Wayne San <waynesan@zerozone.tw>
+ * @author Li-Jiun Huang <ljhuang.tw@gmai.com>
+ * @author Cheng-Wei Chien <e.cwchien@gmail.com>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '“';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '‘';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = '’';
+$lang['btn_edit'] = '編修本é ';
+$lang['btn_source'] = '顯示é é¢ä¾†æº';
+$lang['btn_show'] = '顯示é é¢';
+$lang['btn_create'] = '建立此é ';
+$lang['btn_search'] = 'æœå°‹';
+$lang['btn_save'] = '儲存';
+$lang['btn_preview'] = 'é è¦½';
+$lang['btn_top'] = '回到é é ‚';
+$lang['btn_newer'] = '<< 較新';
+$lang['btn_older'] = '較舊 >>';
+$lang['btn_revs'] = '舊版';
+$lang['btn_recent'] = '最近更新';
+$lang['btn_upload'] = '上傳';
+$lang['btn_cancel'] = 'å–消';
+$lang['btn_index'] = '索引é ';
+$lang['btn_secedit'] = '改這段';
+$lang['btn_login'] = '登入';
+$lang['btn_logout'] = '登出';
+$lang['btn_admin'] = '管ç†é¸å–®';
+$lang['btn_update'] = '更新設定';
+$lang['btn_delete'] = '刪除';
+$lang['btn_back'] = '回上一步';
+$lang['btn_backlink'] = 'åå‘連çµ';
+$lang['btn_backtomedia'] = 'é‡æ–°é¸æ“‡åœ–檔';
+$lang['btn_subscribe'] = '訂閱更動通知';
+$lang['btn_unsubscribe'] = '退訂更動通知';
+$lang['btn_subscribens'] = '訂閱命å空間更改';
+$lang['btn_unsubscribens'] = '退訂命å空間更改';
+$lang['btn_profile'] = '更新個人資料';
+$lang['btn_reset'] = '資料é‡è¨­';
+$lang['btn_resendpwd'] = '寄新密碼';
+$lang['btn_draft'] = '編輯è‰ç¨¿';
+$lang['btn_recover'] = '復原è‰ç¨¿';
+$lang['btn_draftdel'] = 'æ¨æ£„è‰ç¨¿';
+$lang['btn_revert'] = '復原';
+$lang['loggedinas'] = '登入為';
+$lang['user'] = '帳號';
+$lang['pass'] = '密碼';
+$lang['newpass'] = '新的密碼';
+$lang['oldpass'] = 'ç›®å‰çš„密碼';
+$lang['passchk'] = 'å†æ¬¡æ‰“新的密碼';
+$lang['remember'] = '記ä½å¸³è™Ÿå¯†ç¢¼';
+$lang['fullname'] = '暱稱';
+$lang['email'] = 'E-Mail';
+$lang['register'] = '註冊';
+$lang['profile'] = '使用者個人資料';
+$lang['badlogin'] = '很抱歉,您的使用者å稱或密碼å¯èƒ½æœ‰éŒ¯èª¤';
+$lang['minoredit'] = '次è¦æ€§çš„修改';
+$lang['draftdate'] = 'è‰ç¨¿è‡ªå‹•å­˜æª”æ–¼';
+$lang['nosecedit'] = 'æ­¤é é¢å·²ç¶“åŒæ™‚被修改,部份éŽæ™‚的資料å–代了全é ã€‚';
+$lang['regmissing'] = '很抱歉,所有的欄ä½éƒ½è¦å¡«å“¦';
+$lang['reguexists'] = '很抱歉,已有人註冊該帳號了喔';
+$lang['regsuccess'] = '使用者已建立,密碼已經用 email 寄到您信箱了唷。';
+$lang['regsuccess2'] = '使用者已建立';
+$lang['regmailfail'] = '寄出密碼信似乎發生錯誤,請跟管ç†è€…è¯çµ¡ï¼';
+$lang['regbadmail'] = '您輸入的 email 似乎ä¸å°ï¼Œå¦‚果您èªç‚ºæ˜¯æ­£ç¢ºçš„,請與管ç†è€…è¯çµ¡ã€‚';
+$lang['regbadpass'] = '兩次打的密碼ä¸ä¸€è‡´ï¼Œè«‹å†é‡è©¦ï¼Œè¬è¬ã€‚';
+$lang['regpwmail'] = '您的 DokuWiki 帳號密碼';
+$lang['reghere'] = '您還沒有帳號å°å§ï¼Ÿä¾†è¨»å†Šä¸€å€‹å§ã€‚';
+$lang['profna'] = '本 wiki ä¸é–‹æ”¾ä¿®æ”¹å€‹äººè³‡æ–™';
+$lang['profnochange'] = '未åšä»»ä½•è®Šæ›´';
+$lang['profnoempty'] = '帳號或 email 地å€ä¸å¯ä»¥æ²’有寫喔ï¼';
+$lang['profchanged'] = '個人資料已æˆåŠŸæ›´æ–°å›‰ã€‚';
+$lang['pwdforget'] = '忘記密碼嗎?寄新密碼ï¼';
+$lang['resendna'] = '本 wiki ä¸é–‹æ”¾é‡å¯„新密碼';
+$lang['resendpwd'] = '寄新密碼給';
+$lang['resendpwdmissing'] = '很抱歉,您必須全填這些資料æ‰å¯ä»¥';
+$lang['resendpwdnouser'] = '很抱歉,資料庫內查無此人';
+$lang['resendpwdbadauth'] = 'å°ä¸èµ·ï¼Œè©²èªè¨¼ç¢¼éŒ¯èª¤ã€‚請使用完整的確èªéˆæŽ¥ã€‚';
+$lang['resendpwdconfirm'] = '確èªéˆæŽ¥å·²ç¶“通éŽéƒµä»¶ç™¼é€çµ¦æ‚¨äº†ã€‚';
+$lang['resendpwdsuccess'] = '新密碼函已經以 email 寄出了。';
+$lang['license'] = '如未特別註明,此 wiki 上得內容都是根據以下的授權方å¼ï¼š';
+$lang['licenseok'] = '注æ„:編輯此é é¢è¡¨ç¤ºä½ å·²åŒæ„以下的授權方å¼ï¼š';
+$lang['searchmedia'] = 'æœå°‹æª”å:';
+$lang['searchmedia_in'] = '在 %s 裡æœå°‹';
+$lang['txt_upload'] = 'è«‹é¸æ“‡è¦ä¸Šå‚³çš„檔案';
+$lang['txt_filename'] = '請輸入è¦å­˜åœ¨ wiki 內的檔案å稱 (éžå¿…è¦)';
+$lang['txt_overwrt'] = '是å¦è¦è¦†è“‹åŽŸæœ‰æª”案';
+$lang['lockedby'] = 'ç›®å‰å·²è¢«ä¸‹åˆ—人員鎖定';
+$lang['lockexpire'] = 'é è¨ˆè§£é™¤éŽ–定於';
+$lang['willexpire'] = '您目å‰ç·¨è¼¯é€™é çš„鎖定將會在一分é˜å…§è§£é™¤ã€‚\è‹¥è¦é¿å…發生æ„外,請按「é è¦½ã€éµä¾†é‡æ–°è¨­å®šéŽ–定狀態';
+$lang['notsavedyet'] = '有尚未儲存的變更將會éºå¤±ã€‚\n真的è¦ç¹¼çºŒå—Žï¼Ÿ';
+$lang['rssfailed'] = '當抓å–餵é€éŽä¾†çš„ RSS 資料時發生錯誤: ';
+$lang['nothingfound'] = '沒找到任何çµæžœã€‚';
+$lang['mediaselect'] = 'é¸æ“‡åœ–檔';
+$lang['fileupload'] = '上傳圖檔';
+$lang['uploadsucc'] = '上傳æˆåŠŸ';
+$lang['uploadfail'] = '上傳失敗。或許權é™è¨­å®šéŒ¯èª¤äº†å—Žï¼Ÿ';
+$lang['uploadwrong'] = '拒絕上傳。該檔案類型ä¸è¢«æ”¯æ´ã€‚';
+$lang['uploadexist'] = '該檔案已有存在了喔,故å–消上傳動作。';
+$lang['uploadbadcontent'] = '上傳檔案的內容ä¸ç¬¦åˆ %s 檔的副檔å';
+$lang['uploadspam'] = '被SPAM黑åå–®é™åˆ¶ä¸Šå‚³';
+$lang['uploadxss'] = '因為å¯èƒ½æƒ¡æ„的內容被é™åˆ¶ä¸Šå‚³';
+$lang['uploadsize'] = '上傳的檔案尺寸éŽå¤§(最大:%s)';
+$lang['deletesucc'] = '"%s" 檔已刪除完畢。';
+$lang['deletefail'] = '"%s" 檔無法刪除,請先檢查權é™è¨­å®šã€‚';
+$lang['mediainuse'] = '"%s" 檔因還在使用中,故目å‰å°šç„¡æ³•åˆªé™¤ã€‚';
+$lang['namespaces'] = '命å空間';
+$lang['mediafiles'] = 'å¯ç”¨çš„檔案有';
+$lang['js']['searchmedia'] = 'æœå°‹æª”案';
+$lang['js']['keepopen'] = 'æ–¼é¸æ“‡æ™‚ä¿æŒè¦–窗開啟';
+$lang['js']['hidedetails'] = 'éš±è—詳細內容';
+$lang['js']['nosmblinks'] = 'åªæœ‰åœ¨ Microsoft IE 下æ‰èƒ½åŸ·è¡Œã€Œé€£çµåˆ° Windows sharesã€ã€‚
+ä¸éŽæ‚¨ä»å¯æ‹·è²ã€è¤‡è£½é€™é€£çµ';
+$lang['js']['linkwiz'] = '建立連çµç²¾éˆ';
+$lang['js']['linkto'] = '連至:';
+$lang['js']['del_confirm'] = '確定è¦åˆªé™¤è©²ç®¡ç†è¦å‰‡?';
+$lang['js']['mu_btn'] = '上傳多個檔案';
+$lang['mediausage'] = '使用以下的語法來連çµæ­¤æª”案:';
+$lang['mediaview'] = '檢視原始檔案';
+$lang['mediaroot'] = 'root';
+$lang['mediaupload'] = '上傳文件至當å‰çš„命å空間。è¦å‰µå»ºæ¬¡ç´šå‘½å空間,將其å稱加在“上傳並é‡å‘½å為â€æ–‡ä»¶åçš„å‰é¢ï¼Œä¸¦ç”¨è‹±æ–‡å†’號隔開';
+$lang['mediaextchange'] = '檔案類型已由 .%s 變更為 .%s 囉!';
+$lang['reference'] = '引用到本é çš„,åˆè¨ˆæœ‰';
+$lang['ref_inuse'] = '這檔還ä¸èƒ½åˆªé™¤ï¼Œå› ç‚ºé‚„有以下的é é¢åœ¨ä½¿ç”¨å®ƒï¼š';
+$lang['ref_hidden'] = '有些引用到這個的é é¢ï¼Œæ‚¨ç›®å‰é‚„沒有權é™å¯è®€å–喔。';
+$lang['hits'] = '個符åˆ';
+$lang['quickhits'] = '符åˆçš„é é¢å稱';
+$lang['toc'] = '本é ç›®éŒ„';
+$lang['current'] = 'ç›®å‰ç‰ˆæœ¬';
+$lang['yours'] = '您的版本';
+$lang['diff'] = '顯示跟目å‰ç‰ˆæœ¬çš„差異';
+$lang['diff2'] = '顯示與é¸æ“‡ç‰ˆæœ¬çš„差異';
+$lang['line'] = '行';
+$lang['breadcrumb'] = 'ç›®å‰çš„足跡';
+$lang['youarehere'] = '(ç›®å‰æ‰€åœ¨ä½ç½®)';
+$lang['lastmod'] = '上一次變更';
+$lang['by'] = '來自';
+$lang['deleted'] = '移除';
+$lang['created'] = '建立';
+$lang['restored'] = 'å·²æ¢å¾©ç‚ºèˆŠç‰ˆ';
+$lang['external_edit'] = '外部編輯';
+$lang['summary'] = '編輯摘è¦';
+$lang['noflash'] = '顯示此內容需è¦<a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a>';
+$lang['download'] = '下載程å¼ç¢¼ç‰‡æ®µ';
+$lang['mail_newpage'] = '增加的é é¢:';
+$lang['mail_changed'] = '變更的é é¢:';
+$lang['mail_new_user'] = '新使用者:';
+$lang['mail_upload'] = '已上傳檔案:';
+$lang['qb_bold'] = 'ç²—é«”';
+$lang['qb_italic'] = '斜體';
+$lang['qb_underl'] = '底線';
+$lang['qb_code'] = '程å¼ç¢¼';
+$lang['qb_strike'] = '刪除線';
+$lang['qb_h1'] = 'H1 標題';
+$lang['qb_h2'] = 'H2 標題';
+$lang['qb_h3'] = 'H3 標題';
+$lang['qb_h4'] = 'H4 標題';
+$lang['qb_h5'] = 'H5 標題';
+$lang['qb_h'] = '標題';
+$lang['qb_hs'] = 'é¸æ“‡æ¨™é¡Œ';
+$lang['qb_hplus'] = '較大標題';
+$lang['qb_hminus'] = '較å°æ¨™é¡Œ';
+$lang['qb_hequal'] = 'åŒç­‰æ¨™é¡Œ';
+$lang['qb_link'] = 'WIKI內部連çµ';
+$lang['qb_extlink'] = '連çµå¤–部URL';
+$lang['qb_hr'] = '水平線';
+$lang['qb_ol'] = '項目表(數字)';
+$lang['qb_ul'] = '項目表(符號)';
+$lang['qb_media'] = '加入圖片或檔案';
+$lang['qb_sig'] = 'æ’入簽å';
+$lang['qb_smileys'] = '表情符號';
+$lang['qb_chars'] = '特殊字元';
+$lang['upperns'] = 'å‰å¾€çˆ¶å‘½å空間';
+$lang['admin_register'] = '新增使用者中';
+$lang['metaedit'] = '更改相片資料(EXIF)';
+$lang['metasaveerr'] = '相片資料(EXIF)儲存失敗喔';
+$lang['metasaveok'] = '相片資料已æˆåŠŸå„²å­˜';
+$lang['img_backto'] = '回上一é ';
+$lang['img_title'] = '標題';
+$lang['img_caption'] = '照片說明';
+$lang['img_date'] = '日期';
+$lang['img_fname'] = '檔å';
+$lang['img_fsize'] = '大å°';
+$lang['img_artist'] = 'æ”影者';
+$lang['img_copyr'] = '版權';
+$lang['img_format'] = 'æ ¼å¼';
+$lang['img_camera'] = '相機';
+$lang['img_keywords'] = 'é—œéµå­—';
+$lang['subscribe_success'] = '已將『%sã€åŠ å…¥ %s 訂閱清單內';
+$lang['subscribe_error'] = 'è¦æŠŠã€Ž%sã€åŠ å…¥ %s 訂閱清單時,發生錯誤';
+$lang['subscribe_noaddress'] = '您的帳號內並無 Email 資料,因此還無法使用訂閱功能唷。';
+$lang['unsubscribe_success'] = '已將『%sã€å¾ž %s 訂閱清單中移除';
+$lang['unsubscribe_error'] = 'è¦æŠŠã€Ž%sã€å¾ž %s 訂閱清單中移除時,發生錯誤';
+$lang['authmodfailed'] = '帳號èªè­‰çš„設定ä¸æ­£ç¢ºï¼Œè«‹é€šçŸ¥è©² Wiki 管ç†å“¡ã€‚';
+$lang['authtempfail'] = '帳號èªè­‰ç›®å‰æš«ä¸æ供,若本狀æ³æŒçºŒç™¼ç”Ÿçš„話,請通知該 Wiki 管ç†å“¡ã€‚';
+$lang['i_chooselang'] = 'é¸æ“‡æ‚¨çš„語系';
+$lang['i_installer'] = 'DokuWiki 安è£å·¥å…·';
+$lang['i_wikiname'] = 'Wikiå稱';
+$lang['i_enableacl'] = '使用ACL(建議)';
+$lang['i_superuser'] = '超級用戶';
+$lang['i_problems'] = 'Installer發ç¾ä¸€äº›å•é¡Œï¼Œé¡¯ç¤ºå¦‚下。您將無法繼續直到您修正它們。';
+$lang['i_modified'] = '由於安全上的考慮,該腳本隻能用於全新且åšä»»ä½•æ”¹å‹•çš„ Dokuwiki 安è£åŒ…。
+ 您å¯ä»¥é‡æ–°è§£å£“下載的程åºåŒ…,或查閱完整的
+ <a href=\"http://dokuwiki.org/install\">Dokuwiki 安è£æŒ‡å—</a>';
+$lang['i_funcna'] = 'PHP function <code>%s</code> 無法使用. 也許你的主機供應者åœç”¨å®ƒæˆ–是其他原因?';
+$lang['i_phpver'] = '您的 PHP 版本 <code>%s</code> 比所需è¦çš„版本 <code>%s</code> 還低. 您需è¦æ›´æ–°æ‚¨çš„PHP.';
+$lang['i_permfail'] = '<code>%s</code> 無法被 DokuWiki 所寫入. 您需è¦ä¿®æ­£è©²ç›®éŒ„的權é™!';
+$lang['i_confexists'] = '<code>%s</code>已經存在';
+$lang['i_writeerr'] = '無法建立 <code>%s</code>. 您必須檢查目錄/檔案的權é™ä¸¦æ‰‹å‹•å»ºç«‹è©²æª”案.';
+$lang['i_badhash'] = '無法辨識或被變更的dokuwiki.php (hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - éžæ³•æˆ–是空的值';
+$lang['i_success'] = '設定已經æˆåŠŸåœ°å®Œæˆ. 您ç¾åœ¨å¯ä»¥åˆªé™¤ install.php 這個檔案. 繼續到
+<a href="doku.php">您的新 DokuWiki</a>.';
+$lang['i_failure'] = '在寫入設定檔時發生了一些錯誤.您必須在使用<a href="doku.php">ä½ çš„æ–° Dokuwiki</a> 之å‰æ‰‹å‹•ä¿®æ­£å®ƒå€‘';
+$lang['i_policy'] = 'åˆæ­¥çš„ACL政策';
+$lang['i_pol0'] = '開放的 Wiki (å¯è¢«ä»»ä½•äººè®€, 寫, 上傳)';
+$lang['i_pol1'] = '公開的 Wiki (å¯è¢«ä»»ä½•äººè®€, 但是åªèƒ½è¢«è¨»å†Šçš„使用者寫與上傳)';
+$lang['i_pol2'] = 'å°é–‰çš„ Wiki (åªèƒ½è¢«è¨»å†Šçš„使用者讀, 寫, 上傳)';
+$lang['i_retry'] = 'é‡è©¦';
+$lang['mu_intro'] = '您å¯ä»¥åœ¨é€™è£¡ä¸€æ¬¡ä¸Šå‚³å¤šå€‹æª”案。按下ç€è¦½æŒ‰éˆ•åŠ å…¥æª”案,然後按上傳按鈕開始上傳。';
+$lang['mu_gridname'] = '檔案å稱';
+$lang['mu_gridsize'] = '檔案大å°';
+$lang['mu_gridstat'] = '狀態';
+$lang['mu_namespace'] = '命å空間';
+$lang['mu_browse'] = 'ç€è¦½';
+$lang['mu_toobig'] = '太大';
+$lang['mu_ready'] = '準備上傳';
+$lang['mu_done'] = '完æˆ';
+$lang['mu_fail'] = '失敗';
+$lang['mu_authfail'] = '作業階段逾時';
+$lang['mu_progress'] = '@PCT@% 已上傳';
+$lang['mu_filetypes'] = '接å—的檔案類型';
+$lang['mu_info'] = '檔案已上傳。';
+$lang['mu_lasterr'] = '最新一筆錯誤紀錄:';
+$lang['recent_global'] = '您正在閱讀命å空間: <b>%s</b> 中的變更。您亦å¯è§€çœ‹æ•´å€‹ wiki çš„<a href="%s">最近更新</a>。';
+$lang['years'] = '%d å¹´å‰';
+$lang['months'] = '%d 個月å‰';
+$lang['weeks'] = '%d 週å‰';
+$lang['days'] = '%d 天å‰';
+$lang['hours'] = '%d 個å°æ™‚å‰';
+$lang['minutes'] = '%d 分é˜å‰';
+$lang['seconds'] = '%s 秒é˜å‰';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/locked.txt
new file mode 100644
index 000000000..16a06e802
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/locked.txt
@@ -0,0 +1,3 @@
+====== é é¢ç›®å‰æ˜¯éŽ–定狀態中 ======
+
+本é ç›®å‰æ­£ç”±å…¶ä»–使用者編修中,您必須先等到他完æˆæˆ–者鎖定狀態自動解除。
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/login.txt
new file mode 100644
index 000000000..fda49a199
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/login.txt
@@ -0,0 +1,5 @@
+====== 登入 ======
+
+您尚未登入,請輸入您的使用者å稱跟密碼。 å¦å¤–,ç€è¦½å™¨éœ€è¦æ‰“é–‹ cookies 設定以進行登入。
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/mailtext.txt
new file mode 100644
index 000000000..f6bb0480e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/mailtext.txt
@@ -0,0 +1,16 @@
+在您的 DokuWiki 有新增ã€è®Šå‹•éŽä¸€é äº†ã€‚以下是細節資料:
+
+日期 : @DATE@
+ç€è¦½å™¨ : @BROWSER@
+IP-Address : @IPADDRESS@
+機器å稱 : @HOSTNAME@
+舊版次 : @OLDPAGE@
+新版次 : @NEWPAGE@
+ç·¨è¼¯æ‘˜è¦ : @SUMMARY@
+User : @USER@
+
+@DIFF@
+
+
+--
+這å°ä¿¡æ˜¯ç”± @DOKUWIKIURL@ çš„ DokuWiki 自動產生
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/newpage.txt
new file mode 100644
index 000000000..bd38f5586
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/newpage.txt
@@ -0,0 +1,3 @@
+====== ç›®å‰å°šæœªæœ‰è©²ä¸»é¡Œå–” ======
+
+您目å‰åˆ°çš„這主題尚未建立é é¢ã€‚但也å¯ä»¥ç”¨ 「''建立此é ''ã€ä¾†å»ºç«‹ã€‚ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/norev.txt
new file mode 100644
index 000000000..e2b6a175b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/norev.txt
@@ -0,0 +1,4 @@
+====== 很抱歉,並無該版次的 ======
+
+該版次的文件並ä¸å­˜åœ¨ã€‚請用 「''舊版''〠éµä¾†æª¢è¦–ç›®å‰è©²æ–‡ä»¶çš„所有舊版次。
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/preview.txt
new file mode 100644
index 000000000..c68f94819
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/preview.txt
@@ -0,0 +1,4 @@
+====== é è¦½ ======
+
+以下是é è¦½è©²æ–‡ä»¶çš„狀態。請記ä½ï¼š**它還沒被儲存喔**!
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/pwconfirm.txt
new file mode 100644
index 000000000..b8ad7e1ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/pwconfirm.txt
@@ -0,0 +1,13 @@
+@FULLNAME@ 您好ï¼
+
+有人請求為您在 @DOKUWIKIURL@ 注冊的用戶å @TITLE@ 發é€æ–°å¯†ç¢¼
+
+如果您沒有請求發é€æ–°å¯†ç¢¼ï¼Œè«‹å¿½ç•¥é€™å°éƒµä»¶ã€‚
+
+為了確èªç™¼é€æ–°å¯†ç¢¼è«‹æ±‚的確來自您,請使用下é¢çš„éˆæŽ¥ã€‚
+
+@CONFIRM@
+
+--
+本郵件由 DokuWiki 自動創建
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/read.txt
new file mode 100644
index 000000000..364f4adea
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/read.txt
@@ -0,0 +1,3 @@
+本é æ˜¯å”¯è®€çš„,å¯ä»¥çœ‹æ˜¯æ€Žéº¼å¯«çš„,但ä¸èƒ½æ›´å‹•å®ƒã€‚如這是誤判,請å‘管ç†å“¡è©¢å•ã€‚
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/recent.txt
new file mode 100644
index 000000000..28314294b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/recent.txt
@@ -0,0 +1,5 @@
+====== 最近更新 ======
+
+以下的é é¢æ˜¯æœ€è¿‘æ‰æ›´æ–°çš„:
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/register.txt
new file mode 100644
index 000000000..1a5ec67e7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/register.txt
@@ -0,0 +1,4 @@
+====== 註冊新使用者 ======
+
+請填以下欄ä½çš„資料來註冊 wiki 帳號,\\ 還有請確定您有æ供一個 **åˆæ³•çš„ e-mail 地å€** - 也就是您的新密碼會被寄到那。\\ 而登錄的使用者å稱應該是åˆæ³•çš„。 [[doku>pagename|pagename]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/registermail.txt
new file mode 100644
index 000000000..434f4f877
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/registermail.txt
@@ -0,0 +1,13 @@
+一個新使用者已經註冊. 以下是詳細內容:
+
+帳號 : @NEWUSER@
+å…¨å : @NEWNAME@
+E-mail : @NEWEMAIL@
+
+日期 : @DATE@
+ç€è¦½å™¨ : @BROWSER@
+IP-Address : @IPADDRESS@
+Hostname : @HOSTNAME@
+
+--
+這å°ä¿¡æ˜¯ç”± @DOKUWIKIURL@ çš„ DokuWiki 所產生的 \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/resendpwd.txt
new file mode 100644
index 000000000..9250bf4e0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/resendpwd.txt
@@ -0,0 +1,3 @@
+====== 寄é€æ–°å¯†ç¢¼ ======
+
+請在下é¢çš„欄ä½å¡«ä¸Šè³‡æ–™ï¼Œä»¥ä¾¿é‡æ–°å¯„發新的 wiki 密碼到您註冊時所填的 email 地å€ã€‚ 帳號(user name)就是你的 wiki 帳號。
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/revisions.txt
new file mode 100644
index 000000000..479705b95
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/revisions.txt
@@ -0,0 +1,3 @@
+====== 舊版 ======
+
+以下是該文件的舊版本。如è¦æ¢å¾©æˆæŸå€‹èˆŠç‰ˆæ¬¡ï¼Œå°±é»žä¸‹å®ƒï¼Œç„¶å¾ŒæŒ‰ã€Œç·¨ä¿®æœ¬é ã€ï¼Œä¸¦å­˜æª”起來就å¯ä»¥äº†ã€‚
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/searchpage.txt
new file mode 100644
index 000000000..9f3d8ee94
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/searchpage.txt
@@ -0,0 +1,5 @@
+====== æœå°‹ç²¾éˆ ======
+
+æ示:您å¯ä»¥åœ¨ä¸‹åˆ—找到您的æœå°‹çµæžœã€‚若沒找到妳想找的æ±è¥¿ï¼Œé‚£éº¼å¯ä»¥åœ¨å¦³æŸ¥è©¢ä¹‹å¾Œç”¨ã€Œå»ºç«‹æ­¤é ã€ä¾†å»ºç«‹æ–°çš„é é¢å“¦ã€‚
+
+===== æœå°‹çµæžœ =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/showrev.txt
new file mode 100644
index 000000000..35b6aa59f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/showrev.txt
@@ -0,0 +1,2 @@
+**這是本文件的舊版了喔ï¼**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/stopwords.txt
new file mode 100644
index 000000000..55b67ed16
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/stopwords.txt
@@ -0,0 +1,31 @@
+# 這檔是製作索引檔(index)時ä¸è¦åˆ—入的關éµå­—,格å¼ç‚ºæ¯å­—(è©ž)就使用一行。
+# 在修改時,請注æ„è¦ç”¨ UNIX æ ¼å¼çš„æ›è¡Œç¬¦è™Ÿ(newline)處ç†ï¼Œè€Œéž DOS çš„ CR-LR å–”
+# (如果在 MS Windows 環境使用的話,å¯ä½¿ç”¨ vim win32版 或 UltraEdit或其他類似編輯器修改)
+#
+# 還有,ä¸å¿…把å°æ–¼ 3 個字元(英數字元)都包括進來。
+# ç›®å‰æœ¬æ¸…單的內容是以 http://www.ranks.nl/stopwords/ 為基礎而發展的。
+about
+are
+and
+you
+your
+them
+their
+com
+for
+from
+into
+how
+that
+the
+this
+was
+what
+when
+where
+who
+will
+with
+und
+the
+www
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/subscribermail.txt
new file mode 100644
index 000000000..3ccb80091
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/subscribermail.txt
@@ -0,0 +1,16 @@
+哈囉,您好!
+
+在 @TITLE@ çš„ @PAGE@ é é¢å·²ç¶“有了變更囉,以下是變動幅度紀錄:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+è‹¥è¦å–消本é çš„變動訂閱通知,請先登入
+@DOKUWIKIURL@ ,然後進入
+@NEWPAGE@
+並é¸æ“‡ 『退訂更動通知ã€ï¼Œè¬è¬ ^_^
+
+--
+本信是由 DokuWiki 系統自動產生
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/updateprofile.txt
new file mode 100644
index 000000000..f92c215ea
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/updateprofile.txt
@@ -0,0 +1,5 @@
+====== 更新個人資料 ======
+
+請注æ„:åªéœ€è®Šæ›´æƒ³æ›´æ–°çš„資料欄ä½å°±å¥½ï¼Œè€Œå¸³è™Ÿå稱是ä¸å¯ä»¥è®Šæ›´çš„。
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/uploadmail.txt
new file mode 100644
index 000000000..e7222959b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/uploadmail.txt
@@ -0,0 +1,13 @@
+一個檔案已經被上傳到您的 DokuWiki. 以下是詳細內容:
+
+檔å : @MEDIA@
+日期 : @DATE@
+ç€è¦½å™¨ : @BROWSER@
+IP-Address : @IPADDRESS@
+Hostname : @HOSTNAME@
+尺寸 : @SIZE@
+MIME Type : @MIME@
+帳號 : @USER@
+
+--
+這å°ä¿¡æ˜¯ç”± @DOKUWIKIURL@ çš„ DokuWiki 所產生的 \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/wordblock.txt
new file mode 100644
index 000000000..671e88b87
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/wordblock.txt
@@ -0,0 +1,4 @@
+====== 拒絕垃圾資料(SPAM blocked) ======
+
+您的變更並**ä¸æœƒ**被存起來,因為它包å«äº†ä¸€äº›è¢«é™åˆ¶çš„字眼。若您還試著è¦ä¸Ÿåžƒåœ¾è³‡æ–™åˆ° Wiki 的話, -- Bad dog! ä¸éŽï¼Œè‹¥æ‚¨èªç‚ºé€™æ˜¯èª¤åˆ¤ï¼Œé‚£éº¼è«‹èˆ‡é€™å€‹ Wiki 的管ç†å“¡(Admin)談。
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/admin.txt
new file mode 100644
index 000000000..bf6476e9c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/admin.txt
@@ -0,0 +1,3 @@
+====== ç®¡ç† ======
+
+在下é¢æ‚¨èƒ½æ‰¾åˆ° DokuWiki 中å¯ç”¨ç®¡ç†ä»»åŠ¡çš„列表。 \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/backlinks.txt
new file mode 100644
index 000000000..19e3feea6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/backlinks.txt
@@ -0,0 +1,3 @@
+====== åå‘链接 ======
+
+这里是能够åå‘链接到当å‰é¡µé¢çš„其他页é¢åˆ—表。 \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/conflict.txt
new file mode 100644
index 000000000..92eedf45b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/conflict.txt
@@ -0,0 +1,5 @@
+====== 存在一个更新的版本 ======
+
+您编辑的文档存在一个更新的版本。这ç§æƒ…况的å‘生是因为在您编辑时有å¦ä¸€ä¸ªç”¨æˆ·æ›´æ”¹äº†è¯¥æ–‡æ¡£ã€‚
+
+请仔细检查下é¢åˆ—出的差别,并决定ä¿ç•™å“ªä¸ªç‰ˆæœ¬ã€‚如果您选择“ä¿å­˜â€ï¼Œæ‚¨çš„版本将被ä¿ç•™ã€‚点击“å–消â€å°†ä¿ç•™å½“å‰ç‰ˆæœ¬ã€‚
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/denied.txt
new file mode 100644
index 000000000..276741c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/denied.txt
@@ -0,0 +1,3 @@
+====== æ‹’ç»æŽˆæƒ ======
+
+对ä¸èµ·ï¼Œæ‚¨æ²¡æœ‰è¶³å¤Ÿæƒé™ï¼Œæ— æ³•ç»§ç»­ã€‚也许您忘了登录? \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/diff.txt
new file mode 100644
index 000000000..19e8ef752
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/diff.txt
@@ -0,0 +1,3 @@
+====== 差别 ======
+
+这里会显示出您选择的修订版和当å‰ç‰ˆæœ¬ä¹‹é—´çš„差别。 \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/draft.txt
new file mode 100644
index 000000000..615cb07bf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/draft.txt
@@ -0,0 +1,7 @@
+====== å‘现è‰ç¨¿ ======
+
+您在本页最åŽçš„编辑过程没有正常结æŸã€‚DokuWiki 在您的编辑过程中自动ä¿å­˜äº†ä¸€ä»½è‰ç¨¿ï¼Œæ‚¨çŽ°åœ¨å¯ä»¥ä½¿ç”¨å®ƒç»§ç»­ç¼–辑。 下é¢æ˜¯æœ€åŽç¼–辑时的数æ®ã€‚
+
+请决定您希望 //æ¢å¤// 您丢失的编辑数æ®ï¼Œ//删除// 自动ä¿å­˜çš„è‰ç¨¿ï¼Œæˆ–者 //å–消// 本编辑过程。
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/edit.txt
new file mode 100644
index 000000000..846e89817
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/edit.txt
@@ -0,0 +1 @@
+编辑本页åŽè¯·ç‚¹å‡»â€œä¿å­˜â€ã€‚请å‚阅 [[wiki:syntax]] 了解维基语法。åªæœ‰åœ¨æ‚¨èƒ½ **改进** 该页é¢çš„å‰æ下æ‰ç¼–辑它。如果您想å°è¯•ä¸€äº›ä¸œè¥¿ï¼Œè¯·å…ˆåˆ° [[playground:playground|playground]] 热身。 \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/editrev.txt
new file mode 100644
index 000000000..82013cbbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/editrev.txt
@@ -0,0 +1,2 @@
+**您载入了该文档旧的修订版ï¼** 如果您ä¿å­˜äº†å®ƒï¼Œæ‚¨å°±ä¼šç”¨è¿™äº›æ•°æ®åˆ›å»ºä¸€ä»½æ–°çš„修订版。
+---- \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/index.txt
new file mode 100644
index 000000000..efb07b9e3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/index.txt
@@ -0,0 +1,3 @@
+====== 索引 ======
+
+è¿™æ˜¯æ ¹æ® [[doku>namespaces|命å空间]] 排列的所有å¯è®¿é—®é¡µé¢çš„索引。 \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/install.html
new file mode 100644
index 000000000..8c7a93c19
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/install.html
@@ -0,0 +1,8 @@
+<p>本页é¢æ—¨åœ¨å¸®åŠ©æ‚¨å®Œæˆç¬¬ä¸€æ¬¡å®‰è£…å’Œé…ç½® <a href="http://dokuwiki.org">Dokuwiki</a>。关于安装工具的更多信æ¯è¯·å‚阅其 <a href="http://dokuwiki.org/installer">官方文档页é¢</a>。</p>
+
+<p>DokuWiki 使用普通的文件ä¿å­˜ç»´åŸºé¡µé¢å’Œå…¶ä»–与这些页é¢æŒ‚é’©çš„ä¿¡æ¯ï¼ˆä¾‹å¦‚:图åƒï¼Œæœç´¢ç´¢å¼•ï¼Œä¿®è®¢è®°å½•ç­‰ï¼‰ã€‚为了能正常è¿è¡Œï¼ŒDokuWiki <strong>å¿…é¡»</strong> 拥有针对那些路径和文件的写æƒé™ã€‚本安装工具ä¸èƒ½ç”¨äºŽè®¾ç½®è¿™äº›æƒé™ã€‚对æƒé™çš„æ“作通常通过命令行或使用您的网络æœåŠ¡æ供商的 FTP 或控制é¢æ¿ï¼ˆä¾‹å¦‚ cPanel)进行æ“作。</p>
+
+<p>本安装工具将设置您的 DokuWiki é…ç½® <acronym title="访问控制列表">ACL</acronym>,它能让管ç†å‘˜ç™»å½•å¹¶ä½¿ç”¨â€œç®¡ç†â€åŠŸèƒ½æ¥å®‰è£…æ’件,管ç†ç”¨æˆ·ï¼Œç®¡ç†è®¿é—®æƒé™å’Œå…¶ä»–é…置设置。它并ä¸æ˜¯ DokuWiki 正常è¿è¡Œæ‰€å¿…须的,但安装之åŽå®ƒå°†æ›´æ–¹ä¾¿æ‚¨çš„管ç†ã€‚</p>
+
+<p>有ç»éªŒçš„用户或有特殊需求的用户请å‚阅更详细的 <a href="http://dokuwiki.org/install">安装指å—</a>
+å’Œ <a href="http://dokuwiki.org/config">é…置设置</a>。</p>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/lang.php
new file mode 100644
index 000000000..ffb759fde
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/lang.php
@@ -0,0 +1,230 @@
+<?php
+/**
+ * Chinese(Simplified) language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author ZDYX <zhangduyixiong@gmail.com>
+ * @author http://www.chinese-tools.com/tools/converter-tradsimp.html
+ * @author George Sheraton guxd@163.com
+ * @author Simon zhan <simonzhan@21cn.com>
+ * @author mr.jinyi@gmail.com
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '“';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '‘';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = '’';
+$lang['btn_edit'] = '编辑本页';
+$lang['btn_source'] = '显示æºæ–‡ä»¶';
+$lang['btn_show'] = '显示页é¢';
+$lang['btn_create'] = '创建该页é¢';
+$lang['btn_search'] = 'æœç´¢';
+$lang['btn_save'] = 'ä¿å­˜';
+$lang['btn_preview'] = '预览';
+$lang['btn_top'] = '到顶部';
+$lang['btn_newer'] = '<< 较新的';
+$lang['btn_older'] = '较旧的 >>';
+$lang['btn_revs'] = '修订记录';
+$lang['btn_recent'] = '最近更改';
+$lang['btn_upload'] = '上传';
+$lang['btn_cancel'] = 'å–消';
+$lang['btn_index'] = '索引';
+$lang['btn_secedit'] = '编辑';
+$lang['btn_login'] = '登录';
+$lang['btn_logout'] = '退出';
+$lang['btn_admin'] = '管ç†';
+$lang['btn_update'] = 'æ›´æ–°';
+$lang['btn_delete'] = '删除';
+$lang['btn_back'] = '返回';
+$lang['btn_backlink'] = 'åå‘链接';
+$lang['btn_backtomedia'] = '返回到媒体文件选择工具';
+$lang['btn_subscribe'] = '订阅本页更改';
+$lang['btn_unsubscribe'] = '退订本页更改';
+$lang['btn_subscribens'] = '订阅命å空间更改';
+$lang['btn_unsubscribens'] = '退订命å空间更改';
+$lang['btn_profile'] = '更新个人信æ¯';
+$lang['btn_reset'] = 'é‡è®¾';
+$lang['btn_resendpwd'] = 'å‘é€æ–°å¯†ç ';
+$lang['btn_draft'] = '编辑è‰ç¨¿';
+$lang['btn_recover'] = 'æ¢å¤è‰ç¨¿';
+$lang['btn_draftdel'] = '删除è‰ç¨¿';
+$lang['loggedinas'] = '登录为';
+$lang['user'] = '用户å';
+$lang['pass'] = '密ç ';
+$lang['newpass'] = '请输入新密ç ';
+$lang['oldpass'] = '请输入当å‰å¯†ç ';
+$lang['passchk'] = '请å†è¾“一次';
+$lang['remember'] = 'è®°ä½æˆ‘';
+$lang['fullname'] = 'å…¨å';
+$lang['email'] = 'E-Mail';
+$lang['register'] = '注册';
+$lang['profile'] = '用户信æ¯';
+$lang['badlogin'] = '对ä¸èµ·ï¼Œç”¨æˆ·å或密ç é”™è¯¯ã€‚';
+$lang['minoredit'] = '轻微修改';
+$lang['draftdate'] = 'è‰ç¨¿è‡ªåŠ¨ä¿å­˜äºŽ';
+$lang['nosecedit'] = '在您编辑期间本页刚被他人修改过,局部信æ¯å·²è¿‡æœŸï¼Œæ•…载入全页。';
+$lang['regmissing'] = '对ä¸èµ·ï¼Œæ‚¨å¿…须填写所有的区域。';
+$lang['reguexists'] = '对ä¸èµ·ï¼Œè¯¥ç”¨æˆ·åå·²ç»å­˜åœ¨ã€‚';
+$lang['regsuccess'] = '新用户已建立,密ç å°†é€šè¿‡ç”µå­é‚®ä»¶å‘é€ç»™æ‚¨ã€‚';
+$lang['regsuccess2'] = '新用户已建立';
+$lang['regmailfail'] = 'å‘é€å¯†ç é‚®ä»¶æ—¶äº§ç”Ÿé”™è¯¯ã€‚请è”系管ç†å‘˜ï¼';
+$lang['regbadmail'] = '您输入的邮件地å€æœ‰é—®é¢˜â€”—如果您认为这是系统错误,请è”系管ç†å‘˜ã€‚';
+$lang['regbadpass'] = '您输入的密ç ä¸Žç³»ç»Ÿäº§ç”Ÿçš„ä¸ç¬¦ï¼Œè¯·é‡è¯•ã€‚';
+$lang['regpwmail'] = '您的 DokuWiki 密ç ';
+$lang['reghere'] = '还没有账å·ï¼Ÿç«‹å³æ³¨å†Œ';
+$lang['profna'] = '本维基ä¸æ”¯æŒä¿®æ”¹ä¸ªäººä¿¡æ¯';
+$lang['profnochange'] = '没有改动,ä¸è¿›è¡Œæ“作。';
+$lang['profnoempty'] = 'ä¸å…许使用空的用户å或邮件地å€ã€‚';
+$lang['profchanged'] = '用户信æ¯æ›´æ–°æˆåŠŸã€‚';
+$lang['pwdforget'] = '忘记密ç ï¼Ÿç«‹å³èŽ·å–新密ç ';
+$lang['resendna'] = '本维基ä¸æ”¯æŒäºŒæ¬¡å‘é€å¯†ç ã€‚';
+$lang['resendpwd'] = 'å‘é€æ–°å¯†ç ç»™';
+$lang['resendpwdmissing'] = '对ä¸èµ·ï¼Œæ‚¨å¿…须填写所有的区域。';
+$lang['resendpwdnouser'] = '对ä¸èµ·ï¼Œåœ¨æˆ‘们的用户数æ®ä¸­æ‰¾ä¸åˆ°è¯¥ç”¨æˆ·ã€‚';
+$lang['resendpwdbadauth'] = '对ä¸èµ·ï¼Œè¯¥è®¤è¯ç é”™è¯¯ã€‚请使用完整的确认链接。';
+$lang['resendpwdconfirm'] = '确认链接已ç»é€šè¿‡é‚®ä»¶å‘é€ç»™æ‚¨äº†ã€‚';
+$lang['resendpwdsuccess'] = '您的新密ç å·²ç»é€šè¿‡é‚®ä»¶å‘é€ç»™æ‚¨äº†ã€‚';
+$lang['license'] = '除é¢å¤–注明的地方外,本维基上的内容按下列许å¯åè®®å‘布:';
+$lang['licenseok'] = '当您选择开始编辑本页,å³å¯“示你åŒæ„将你贡献的内容按下列许å¯åè®®å‘布:';
+$lang['txt_upload'] = '选择è¦ä¸Šä¼ çš„文件';
+$lang['txt_filename'] = '上传并é‡å‘½å为(å¯é€‰ï¼‰';
+$lang['txt_overwrt'] = '覆盖已存在的åŒå文件';
+$lang['lockedby'] = 'ç›®å‰å·²è¢«ä¸‹åˆ—人员é”定';
+$lang['lockexpire'] = '预计é”定解除于';
+$lang['willexpire'] = '您对本页的独有编辑æƒå°†äºŽä¸€åˆ†é’Ÿä¹‹åŽè§£é™¤ã€‚\n为了防止与其他人的编辑冲çªï¼Œè¯·ä½¿ç”¨é¢„览按钮é‡è®¾è®¡æ—¶å™¨ã€‚';
+$lang['notsavedyet'] = '未ä¿å­˜çš„更改将丢失。\n真的è¦ç»§ç»­ï¼Ÿ';
+$lang['rssfailed'] = '获å–该 RSS ä¿¡æ¯æ—¶äº§ç”Ÿé”™è¯¯ï¼š';
+$lang['nothingfound'] = '什么都没有找到。';
+$lang['mediaselect'] = '媒体文件';
+$lang['fileupload'] = '上传媒体文件';
+$lang['uploadsucc'] = '上传æˆåŠŸ';
+$lang['uploadfail'] = '上传失败。也许是上传æƒé™é”™è¯¯ã€‚';
+$lang['uploadwrong'] = '上传失败。该扩展å被ç¦æ­¢ã€‚';
+$lang['uploadexist'] = '文件已存在。ä¸è¿›è¡Œæ“作。';
+$lang['uploadbadcontent'] = '上传的文件与扩展å %s ä¸ç¬¦ã€‚';
+$lang['uploadspam'] = '上传æ“作被垃圾信æ¯é»‘åå•é˜»æ­¢ã€‚';
+$lang['uploadxss'] = '上传æ“作因å¯èƒ½å­˜åœ¨æ¶æ„内容而被阻止。';
+$lang['uploadsize'] = '上传的文件过大。(最大 %s)';
+$lang['deletesucc'] = '文件“%sâ€å·²ç»è¢«åˆ é™¤ã€‚';
+$lang['deletefail'] = '无法删除“%sâ€- 请检查æƒé™ã€‚';
+$lang['mediainuse'] = '文件“%sâ€æ— æ³•åˆ é™¤ - 它正被使用中。';
+$lang['namespaces'] = '命å空间';
+$lang['mediafiles'] = 'å¯ç”¨çš„文件';
+$lang['js']['keepopen'] = '选中åŽä¸è‡ªåŠ¨å…³é—­çª—å£';
+$lang['js']['hidedetails'] = 'éšè—详细信æ¯';
+$lang['js']['nosmblinks'] = '连接到 Windows 共享功能åªæœ‰åœ¨ IE æµè§ˆå™¨ä¸­æ‰èƒ½æ­£å¸¸ä½¿ç”¨ã€‚
+但您ä»èƒ½å¤åˆ¶å¹¶ç²˜è´´è¯¥é“¾æŽ¥ã€‚';
+$lang['js']['mu_btn'] = '一次上传了多个文件';
+$lang['mediausage'] = '使用下列字符链接到该文件:';
+$lang['mediaview'] = '查看该文件';
+$lang['mediaroot'] = '根目录';
+$lang['mediaupload'] = '上传文件至当å‰çš„命å空间。è¦åˆ›å»ºæ¬¡çº§å‘½å空间,将其å称加在“上传并é‡å‘½å为â€æ–‡ä»¶åçš„å‰é¢ï¼Œå¹¶ç”¨è‹±æ–‡å†’å·éš”å¼€';
+$lang['mediaextchange'] = '文件的扩展åç”± .%s 改为了 .%sï¼';
+$lang['reference'] = '相关的';
+$lang['ref_inuse'] = '该文件无法删除,因为它正被下列页é¢ä½¿ç”¨ï¼š';
+$lang['ref_hidden'] = '一些相关的页é¢æ‚¨å¹¶æ²¡æœ‰æƒé™é˜…读';
+$lang['hits'] = '符åˆ';
+$lang['quickhits'] = '匹é…的页é¢å称';
+$lang['toc'] = '目录';
+$lang['current'] = '当å‰ç‰ˆæœ¬';
+$lang['yours'] = '您的版本';
+$lang['diff'] = '显示与当å‰ç‰ˆæœ¬çš„差别';
+$lang['diff2'] = '显示跟目å‰ç‰ˆæœ¬çš„差异';
+$lang['line'] = '行';
+$lang['breadcrumb'] = '您的足迹';
+$lang['youarehere'] = '您在这里';
+$lang['lastmod'] = '最åŽæ›´æ”¹';
+$lang['by'] = 'ç”±';
+$lang['deleted'] = '移除';
+$lang['created'] = '创建';
+$lang['restored'] = 'å·²æ¢å¤ä¸ºæ—§ç‰ˆ';
+$lang['external_edit'] = '外部编辑';
+$lang['summary'] = '编辑摘è¦';
+$lang['noflash'] = 'éœ€è¦ <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash æ’件</a> æ¥æ’­æ”¾æœ¬å†…容。 ';
+$lang['mail_newpage'] = '添加页é¢ï¼š';
+$lang['mail_changed'] = '更改页é¢ï¼š';
+$lang['mail_new_user'] = '新用户:';
+$lang['mail_upload'] = '已上传的文件:';
+$lang['qb_bold'] = '粗体';
+$lang['qb_italic'] = '斜体';
+$lang['qb_underl'] = '下划线';
+$lang['qb_code'] = '代ç ';
+$lang['qb_strike'] = '删除线';
+$lang['qb_h1'] = '标题 H1';
+$lang['qb_h2'] = '标题 H2 ';
+$lang['qb_h3'] = '标题 H3';
+$lang['qb_h4'] = '标题 H4';
+$lang['qb_h5'] = '标题 H5';
+$lang['qb_link'] = '内部链接';
+$lang['qb_extlink'] = '外部链接';
+$lang['qb_hr'] = '水平线';
+$lang['qb_ol'] = '数字列表项目';
+$lang['qb_ul'] = '普通列表项目';
+$lang['qb_media'] = 'æ’入图åƒæˆ–其他文件';
+$lang['qb_sig'] = 'æ’入签å';
+$lang['qb_smileys'] = '表情符å·';
+$lang['qb_chars'] = '特殊字符';
+$lang['js']['del_confirm'] = '真的è¦åˆ é™¤é€‰ä¸­çš„项目å—?';
+$lang['admin_register'] = '添加新用户';
+$lang['metaedit'] = '编辑元数æ®';
+$lang['metasaveerr'] = '写入元数æ®å¤±è´¥';
+$lang['metasaveok'] = '元数æ®å·²ä¿å­˜';
+$lang['img_backto'] = '返回到';
+$lang['img_title'] = '标题';
+$lang['img_caption'] = '说明';
+$lang['img_date'] = '日期';
+$lang['img_fname'] = 'å称';
+$lang['img_fsize'] = '大å°';
+$lang['img_artist'] = '摄影师';
+$lang['img_copyr'] = '版æƒ';
+$lang['img_format'] = 'æ ¼å¼';
+$lang['img_camera'] = '相机';
+$lang['img_keywords'] = '关键字';
+$lang['subscribe_success'] = '已将 %s æˆåŠŸæ·»åŠ åˆ° %s 的订阅列表';
+$lang['subscribe_error'] = '无法将 %s 添加到 %s 的订阅列表';
+$lang['subscribe_noaddress'] = '您的登录信æ¯ä¸­ä¸åŒ…å«ç”µå­é‚®ä»¶åœ°å€ï¼Œæ‚¨æ— æ³•åŠ å…¥è®¢é˜…列表';
+$lang['unsubscribe_success'] = '已将 %s 从 %s 的订阅列表中æˆåŠŸåˆ é™¤';
+$lang['unsubscribe_error'] = '无法将 %s 从 %s 的订阅列表中删除';
+$lang['authmodfailed'] = '错误的用户认è¯è®¾ç½®ã€‚请通知维基管ç†å‘˜ã€‚';
+$lang['authtempfail'] = '用户认è¯æš‚时无法使用。如果该状æ€ä¸€ç›´å­˜åœ¨ï¼Œè¯·é€šçŸ¥ç»´åŸºç®¡ç†å‘˜ã€‚';
+$lang['i_chooselang'] = '选择您的语言';
+$lang['i_installer'] = 'DokuWiki 安装工具';
+$lang['i_wikiname'] = '维基å称';
+$lang['i_enableacl'] = 'å¯ç”¨ ACL(推è)';
+$lang['i_superuser'] = '超级用户';
+$lang['i_problems'] = '安装工具å‘现一些问题,已在下é¢åˆ—出。您必须先修å¤è¿™äº›é—®é¢˜ï¼Œæ‰èƒ½ç»§ç»­å®‰è£…。';
+$lang['i_modified'] = '由于安全上的考虑,该脚本åªèƒ½ç”¨äºŽå…¨æ–°ä¸”åšä»»ä½•æ”¹åŠ¨çš„ Dokuwiki 安装包。
+ 您å¯ä»¥é‡æ–°è§£åŽ‹ä¸‹è½½çš„程åºåŒ…,或查阅完整的
+ <a href="http://dokuwiki.org/install">Dokuwiki 安装指å—</a>';
+$lang['i_funcna'] = 'PHP 功能 <code>%s</code> 无法使用。也许您的æœåŠ¡å™¨æ供商因为æŸäº›åŽŸå› ç¦ç”¨äº†å®ƒã€‚';
+$lang['i_phpver'] = '您的 PHP 版本 <code>%s</code> 低于最低è¦æ±‚çš„ <code>%s</code>。您需è¦å‡çº§æ‚¨çš„ PHP 版本。';
+$lang['i_permfail'] = 'DokuWiki 无法写入 <code>%s</code>。您需è¦ä¿®æ”¹è¯¥è·¯å¾„çš„æƒé™è®¾å®šï¼';
+$lang['i_confexists'] = '<code>%s</code> å·²ç»å­˜åœ¨';
+$lang['i_writeerr'] = '无法创建 <code>%s</code>。您需è¦æ£€æŸ¥è¯¥è·¯å¾„/文件的æƒé™è®¾å®šå¹¶æ‰‹åŠ¨åˆ›å»ºè¯¥æ–‡ä»¶ã€‚';
+$lang['i_badhash'] = '无法识别的或被修改的 dokuwiki.php(值=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - éžæ³•æˆ–空值';
+$lang['i_success'] = 'é…ç½®æˆåŠŸå®Œæˆã€‚您现在å¯ä»¥åˆ é™¤ install.php 了。继续进入
+ <a href="doku.php">您全新的 DokuWiki</a>。';
+$lang['i_failure'] = '写入é…置文件的时候产生一些错误。在使用 <a href="doku.php">您全新安装的 DokuWiki</a> å‰
+ 您需è¦æ‰‹åŠ¨ä¿®å¤å®ƒä»¬ã€‚';
+$lang['i_policy'] = 'åˆå§‹çš„ ACL 政策';
+$lang['i_pol0'] = '开放的维基(任何人都有读ã€å†™ã€ä¸Šä¼ çš„æƒé™ï¼‰';
+$lang['i_pol1'] = '公共的维基(任何人都有读的æƒé™ï¼Œåªæœ‰æ³¨å†Œç”¨æˆ·æ‰æœ‰å†™å’Œä¸Šä¼ çš„æƒé™ï¼‰';
+$lang['i_pol2'] = '关闭的维基(åªæœ‰æ³¨å†Œç”¨æˆ·æ‰æœ‰è¯»ã€å†™ã€ä¸Šä¼ çš„æƒé™ï¼‰';
+$lang['i_retry'] = 'é‡è¯•';
+$lang['mu_intro'] = '您å¯ä»¥åœ¨æ­¤ä¸€æ¬¡ä¸Šä¼ å¤šä¸ªæ–‡ä»¶ã€‚点按æµè§ˆæŒ‰é’®æ·»åŠ æ–‡ä»¶åˆ°ä¸Šä¼ é˜Ÿåˆ—中,先好åŽæŒ‰ä¸Šä¼ é’®ã€‚';
+$lang['mu_gridname'] = '文件å';
+$lang['mu_gridsize'] = '大å°';
+$lang['mu_gridstat'] = '状æ€';
+$lang['mu_namespace'] = 'å称空间';
+$lang['mu_browse'] = 'æµè§ˆ';
+$lang['mu_toobig'] = '过大';
+$lang['mu_ready'] = '准备好上传';
+$lang['mu_done'] = '完æˆ';
+$lang['mu_fail'] = '失败';
+$lang['mu_authfail'] = '会è¯è¿‡æœŸ';
+$lang['mu_progress'] = '@PCT@% 上传完æˆ';
+$lang['mu_filetypes'] = 'å…许的文件类型';
+$lang['recent_global'] = '您当å‰çœ‹åˆ°çš„是<b>%s</b> å称空间的å˜åŠ¨ã€‚你还å¯ä»¥åœ¨<a href="%s">查看整个维基的近期å˜åŠ¨</a>。';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/locked.txt
new file mode 100644
index 000000000..321e4a047
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/locked.txt
@@ -0,0 +1,3 @@
+====== 页é¢å·²é”定 ======
+
+本页é¢ç›®å‰æ­£è¢«å…¶ä»–用户编辑。您è¦ç­‰åˆ°è¯¥ç”¨æˆ·å®Œæˆç¼–辑或é”定因过期而自动解除åŽæ‰èƒ½ç¼–辑。 \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/login.txt
new file mode 100644
index 000000000..8ff8b3846
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/login.txt
@@ -0,0 +1,3 @@
+====== 登录 ======
+
+您尚未登录ï¼è¯·åœ¨ä¸‹æ–¹è¾“入您的用户å和密ç è¿›è¡Œç™»å½•ã€‚ 您的æµè§ˆå™¨éœ€è¦æ”¯æŒ Cookies æ‰èƒ½æ­£å¸¸ç™»å½•ã€‚
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/mailtext.txt
new file mode 100644
index 000000000..311acf1b9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/mailtext.txt
@@ -0,0 +1,17 @@
+您的 DokuWiki 中有一个页é¢è¢«æ·»åŠ æˆ–更改了。以下是详细资料:
+
+日期 : @DATE@
+æµè§ˆå™¨ : @BROWSER@
+IP åœ°å€ : @IPADDRESS@
+机器å称 : @HOSTNAME@
+修订记录 : @OLDPAGE@
+最新修订 : @NEWPAGE@
+ç¼–è¾‘æ‘˜è¦ : @SUMMARY@
+用户 : @USER@
+
+@DIFF@
+
+
+--
+本邮件由 DokuWiki 自动创建
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/newpage.txt
new file mode 100644
index 000000000..6f96b568d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/newpage.txt
@@ -0,0 +1,3 @@
+====== 该主题尚ä¸å­˜åœ¨ ======
+
+您访问的页é¢å¹¶ä¸å­˜åœ¨ã€‚如果å…许,您å¯ä»¥ä½¿ç”¨â€œåˆ›å»ºè¯¥é¡µé¢â€æŒ‰é’®æ¥åˆ›å»ºå®ƒã€‚ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/norev.txt
new file mode 100644
index 000000000..3fe5aabd8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/norev.txt
@@ -0,0 +1,3 @@
+====== 没有该修订版 ======
+
+您指定的修订版并ä¸å­˜åœ¨ã€‚请使用“修订记录â€æŒ‰é’®æŸ¥çœ‹æœ¬é¡µé¢çš„修订记录列表。 \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/preview.txt
new file mode 100644
index 000000000..dbb3de675
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/preview.txt
@@ -0,0 +1,3 @@
+====== 预览 ======
+
+这是该文件的效果预览。请记ä½ï¼šå®ƒ**并没有被ä¿å­˜**ï¼
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/pwconfirm.txt
new file mode 100644
index 000000000..7e48751a6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/pwconfirm.txt
@@ -0,0 +1,15 @@
+@FULLNAME@ 您好ï¼
+
+有人请求为您在 @DOKUWIKIURL@ 注册的用户å @TITLE@ å‘é€æ–°å¯†ç 
+
+如果您没有请求å‘é€æ–°å¯†ç ï¼Œè¯·å¿½ç•¥è¿™å°é‚®ä»¶ã€‚
+
+为了确认å‘é€æ–°å¯†ç è¯·æ±‚çš„ç¡®æ¥è‡ªæ‚¨ï¼Œè¯·ä½¿ç”¨ä¸‹é¢çš„链接。
+
+@CONFIRM@
+
+--
+本邮件由 DokuWiki 自动创建
+@DOKUWIKIURL@
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/read.txt
new file mode 100644
index 000000000..eb47765a2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/read.txt
@@ -0,0 +1,2 @@
+本页é¢åªè¯»ã€‚您å¯ä»¥æŸ¥çœ‹æºæ–‡ä»¶ï¼Œä½†ä¸èƒ½æ›´æ”¹å®ƒã€‚如果您觉得这是系统错误,请è”系管ç†å‘˜ã€‚
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/recent.txt
new file mode 100644
index 000000000..95634d037
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/recent.txt
@@ -0,0 +1,5 @@
+====== 最近更新 ======
+
+以下的页é¢æ˜¯æœ€è¿‘æ‰æ›´æ–°çš„:
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/register.txt
new file mode 100644
index 000000000..7410ff1c0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/register.txt
@@ -0,0 +1,3 @@
+====== 注册新用户 ======
+
+填写以下资料æ¥åˆ›å»ºä¸€ä¸ªæ–°å¸æˆ·ã€‚请确定您æ供的是 **正确的 E-mail 地å€** - 如果您没有被è¦æ±‚在这里输入密ç ï¼Œé‚£ä¹ˆæ–°å¯†ç å°†é€šè¿‡æ‚¨çš„邮件地å€å‘é€ç»™æ‚¨ã€‚ 用于登录的用户åå¿…é¡»åˆæ³•ï¼Œè¯·å‚阅 [[doku>pagename|pagename]]。
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/registermail.txt
new file mode 100644
index 000000000..9647b5fad
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/registermail.txt
@@ -0,0 +1,16 @@
+新用户已创建。下é¢æ˜¯è¯¦ç»†ä¿¡æ¯ï¼š
+
+用户å : @NEWUSER@
+å…¨å : @NEWNAME@
+E-mail : @NEWEMAIL@
+
+日期 : @DATE@
+æµè§ˆå™¨ : @BROWSER@
+IP åœ°å€ : @IPADDRESS@
+机器å称 : @HOSTNAME@
+
+--
+本邮件由 DokuWiki 自动创建
+@DOKUWIKIURL@
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/resendpwd.txt
new file mode 100644
index 000000000..f98e469e6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/resendpwd.txt
@@ -0,0 +1,5 @@
+====== å‘é€æ–°å¯†ç  ======
+
+请在下列区域中输入您的用户åæ¥èŽ·å–新密ç ã€‚ 一å°åŒ…å«ç¡®è®¤é“¾æŽ¥çš„邮件将å‘é€ç»™æ‚¨æ³¨å†Œçš„邮件地å€ã€‚
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/revisions.txt
new file mode 100644
index 000000000..89d2a7857
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/revisions.txt
@@ -0,0 +1,3 @@
+====== 修订记录 ======
+
+以下是当å‰æ–‡æ¡£çš„修订记录。如果è¦å›žå¤åˆ°æŸä¸ªæ—§çš„修订版,请在下é¢é€‰æ‹©å®ƒï¼Œå¹¶ç‚¹å‡»â€œç¼–辑本页â€ï¼Œä¹‹åŽä¿å­˜å³å¯ã€‚ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/searchpage.txt
new file mode 100644
index 000000000..8222e242c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/searchpage.txt
@@ -0,0 +1,5 @@
+====== æœç´¢ ======
+
+下é¢å°†æ˜¾ç¤ºæ‚¨çš„æœç´¢ç»“果。如果没有找到您想è¦çš„东西,您å¯ä»¥ä½¿ç”¨ç›¸åº”的按钮æ¥åˆ›å»ºæˆ–编辑该页é¢ã€‚
+
+===== æœç´¢ç»“æžœ ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/showrev.txt
new file mode 100644
index 000000000..770fecc98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/showrev.txt
@@ -0,0 +1,2 @@
+**这是本文档旧的修订版ï¼**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/stopwords.txt
new file mode 100644
index 000000000..bc6eb48ae
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/stopwords.txt
@@ -0,0 +1,29 @@
+# This is a list of words the indexer ignores, one word per line
+# When you edit this file be sure to use UNIX line endings (single newline)
+# No need to include words shorter than 3 chars - these are ignored anyway
+# This list is based upon the ones found at http://www.ranks.nl/stopwords/
+about
+are
+and
+you
+your
+them
+their
+com
+for
+from
+into
+how
+that
+the
+this
+was
+what
+when
+where
+who
+will
+with
+und
+the
+www
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/subscribermail.txt
new file mode 100644
index 000000000..1a0a0aa16
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/subscribermail.txt
@@ -0,0 +1,19 @@
+您好ï¼
+
+@TITLE@ 中的 @PAGE@ 页é¢å·²æ›´æ”¹ã€‚
+下é¢æ˜¯æ›´æ”¹çš„详细情况:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+è¦é€€è®¢æœ¬é¡µï¼Œè¯·ç™»å½•ç»´åŸº
+@DOKUWIKIURL@ 然åŽè®¿é—®
+@NEWPAGE@
+并选择'退订更改'。
+
+--
+本邮件由 DokuWiki 自动创建
+@DOKUWIKIURL@
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/updateprofile.txt
new file mode 100644
index 000000000..007578801
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/updateprofile.txt
@@ -0,0 +1,5 @@
+====== 更新您å¸æˆ·çš„ä¿¡æ¯ ======
+
+您åªéœ€è¦å¡«å†™å¸Œæœ›æ›´æ”¹çš„区域å³å¯ã€‚您ä¸èƒ½æ›´æ”¹ç”¨æˆ·å。
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/uploadmail.txt
new file mode 100644
index 000000000..b820cee2b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/uploadmail.txt
@@ -0,0 +1,20 @@
+您好ï¼
+
+一个文件被上传到您的 DokuWiki 站点。下é¢æ˜¯è¯¦ç»†ä¿¡æ¯ï¼š
+
+文件å : @MEDIA@
+日期 : @DATE@
+æµè§ˆå™¨ : @BROWSER@
+IP åœ°å€ : @IPADDRESS@
+主机å : @HOSTNAME@
+å¤§å° : @SIZE@
+MIME 类型 : @MIME@
+用户 : @USER@
+
+--
+本邮件由 DokuWiki 自动创建
+@DOKUWIKIURL@
+
+
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/wordblock.txt
new file mode 100644
index 000000000..72c473a59
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/wordblock.txt
@@ -0,0 +1,3 @@
+====== æ‹’ç»åžƒåœ¾èµ„æ–™ ======
+
+您的更改 **并没有** ä¿å­˜ï¼Œå› ä¸ºå®ƒåŒ…å«äº†ä¸€ä¸ªæˆ–多个被é™åˆ¶çš„字眼。如果您å°è¯•ä¸ºæœ¬ç»´åŸºæ·»åŠ åžƒåœ¾ä¿¡æ¯ -- 你是一个大å蛋ï¼å¦‚果您认为这是一个系统错误,请è”系本维基的管ç†å‘˜ã€‚
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/mail.php b/mod/dokuwiki/vendors/dokuwiki/inc/mail.php
new file mode 100644
index 000000000..3b0592b8b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/mail.php
@@ -0,0 +1,266 @@
+<?php
+/**
+ * Mail functions
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+if(!defined('DOKU_INC')) die('meh.');
+require_once(DOKU_INC.'inc/utf8.php');
+require_once(DOKU_INC.'inc/EmailAddressValidator.php');
+
+// end of line for mail lines - RFC822 says CRLF but postfix (and other MTAs?)
+// think different
+if(!defined('MAILHEADER_EOL')) define('MAILHEADER_EOL',"\n");
+#define('MAILHEADER_ASCIIONLY',1);
+
+/**
+ * Patterns for use in email detection and validation
+ *
+ * NOTE: there is an unquoted '/' in RFC2822_ATEXT, it must remain unquoted to be used in the parser
+ * the pattern uses non-capturing groups as captured groups aren't allowed in the parser
+ * select pattern delimiters with care!
+ *
+ * May not be completly RFC conform!
+ * @link http://www.faqs.org/rfcs/rfc2822.html (paras 3.4.1 & 3.2.4)
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ * Check if a given mail address is valid
+ */
+if (!defined('RFC2822_ATEXT')) define('RFC2822_ATEXT',"0-9a-zA-Z!#$%&'*+/=?^_`{|}~-");
+if (!defined('PREG_PATTERN_VALID_EMAIL')) define('PREG_PATTERN_VALID_EMAIL', '['.RFC2822_ATEXT.']+(?:\.['.RFC2822_ATEXT.']+)*@(?i:[0-9a-z][0-9a-z-]*\.)+(?i:[a-z]{2,4}|museum|travel)');
+
+
+
+/**
+ * UTF-8 autoencoding replacement for PHPs mail function
+ *
+ * Email address fields (To, From, Cc, Bcc can contain a textpart and an address
+ * like this: 'Andreas Gohr <andi@splitbrain.org>' - the text part is encoded
+ * automatically. You can seperate receivers by commas.
+ *
+ * @param string $to Receiver of the mail (multiple seperated by commas)
+ * @param string $subject Mailsubject
+ * @param string $body Messagebody
+ * @param string $from Sender address
+ * @param string $cc CarbonCopy receiver (multiple seperated by commas)
+ * @param string $bcc BlindCarbonCopy receiver (multiple seperated by commas)
+ * @param string $headers Additional Headers (seperated by MAILHEADER_EOL
+ * @param string $params Additonal Sendmail params (passed to mail())
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @see mail()
+ */
+function mail_send($to, $subject, $body, $from='', $cc='', $bcc='', $headers=null, $params=null){
+
+ $message = compact('to','subject','body','from','cc','bcc','headers','params');
+ return trigger_event('MAIL_MESSAGE_SEND',$message,'_mail_send_action');
+}
+
+function _mail_send_action($data) {
+
+ // retrieve parameters from event data, $to, $subject, $body, $from, $cc, $bcc, $headers, $params
+ $to = $data['to'];
+ $subject = $data['subject'];
+ $body = $data['body'];
+
+ // add robustness in case plugin removes any of these optional values
+ $from = isset($data['from']) ? $data['from'] : '';
+ $cc = isset($data['cc']) ? $data['cc'] : '';
+ $bcc = isset($data['bcc']) ? $data['bcc'] : '';
+ $headers = isset($data['headers']) ? $data['headers'] : null;
+ $params = isset($data['params']) ? $data['params'] : null;
+
+ // end additional code to support event ... original mail_send() code from here
+
+ if(defined('MAILHEADER_ASCIIONLY')){
+ $subject = utf8_deaccent($subject);
+ $subject = utf8_strip($subject);
+ }
+
+ if(!utf8_isASCII($subject)) {
+ $subject = '=?UTF-8?Q?'.mail_quotedprintable_encode($subject,0).'?=';
+ // Spaces must be encoded according to rfc2047. Use the "_" shorthand
+ $subject = preg_replace('/ /', '_', $subject);
+ }
+
+ $header = '';
+
+ // No named recipients for To: in Windows (see FS#652)
+ $usenames = (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') ? false : true;
+
+ $to = mail_encode_address($to,'',$usenames);
+ $header .= mail_encode_address($from,'From');
+ $header .= mail_encode_address($cc,'Cc');
+ $header .= mail_encode_address($bcc,'Bcc');
+ $header .= 'MIME-Version: 1.0'.MAILHEADER_EOL;
+ $header .= 'Content-Type: text/plain; charset=UTF-8'.MAILHEADER_EOL;
+ $header .= 'Content-Transfer-Encoding: quoted-printable'.MAILHEADER_EOL;
+ $header .= $headers;
+ $header = trim($header);
+
+ $body = mail_quotedprintable_encode($body);
+
+ if($params == null){
+ return @mail($to,$subject,$body,$header);
+ }else{
+ return @mail($to,$subject,$body,$header,$params);
+ }
+}
+
+/**
+ * Encodes an email address header
+ *
+ * Unicode characters will be deaccented and encoded
+ * quoted_printable for headers.
+ * Addresses may not contain Non-ASCII data!
+ *
+ * Example:
+ * mail_encode_address("föö <foo@bar.com>, me@somewhere.com","TBcc");
+ *
+ * @param string $string Multiple adresses separated by commas
+ * @param string $header Name of the header (To,Bcc,Cc,...)
+ * @param boolean $names Allow named Recipients?
+ */
+function mail_encode_address($string,$header='',$names=true){
+ $headers = '';
+ $parts = explode(',',$string);
+ foreach ($parts as $part){
+ $part = trim($part);
+
+ // parse address
+ if(preg_match('#(.*?)<(.*?)>#',$part,$matches)){
+ $text = trim($matches[1]);
+ $addr = $matches[2];
+ }else{
+ $addr = $part;
+ }
+
+ // skip empty ones
+ if(empty($addr)){
+ continue;
+ }
+
+ // FIXME: is there a way to encode the localpart of a emailaddress?
+ if(!utf8_isASCII($addr)){
+ msg(htmlspecialchars("E-Mail address <$addr> is not ASCII"),-1);
+ continue;
+ }
+
+ if(!mail_isvalid($addr)){
+ msg(htmlspecialchars("E-Mail address <$addr> is not valid"),-1);
+ continue;
+ }
+
+ // text was given
+ if(!empty($text) && $names){
+ // add address quotes
+ $addr = "<$addr>";
+
+ if(defined('MAILHEADER_ASCIIONLY')){
+ $text = utf8_deaccent($text);
+ $text = utf8_strip($text);
+ }
+
+ if(!utf8_isASCII($text)){
+ $text = '=?UTF-8?Q?'.mail_quotedprintable_encode($text,0).'?=';
+ }
+ }else{
+ $text = '';
+ }
+
+ // add to header comma seperated
+ if($headers != ''){
+ $headers .= ',';
+ if($header) $headers .= MAILHEADER_EOL.' '; // avoid overlong mail headers
+ }
+ $headers .= $text.' '.$addr;
+ }
+
+ if(empty($headers)) return null;
+
+ //if headername was given add it and close correctly
+ if($header) $headers = $header.': '.$headers.MAILHEADER_EOL;
+
+ return $headers;
+}
+
+/**
+ * Check if a given mail address is valid
+ *
+ * @param string $email the address to check
+ * @return bool true if address is valid
+ */
+function mail_isvalid($email){
+ $validator = new EmailAddressValidator;
+ return $validator->check_email_address($email);
+}
+
+/**
+ * Quoted printable encoding
+ *
+ * @author umu <umuAThrz.tu-chemnitz.de>
+ * @link http://www.php.net/manual/en/function.imap-8bit.php#61216
+ */
+function mail_quotedprintable_encode($sText,$maxlen=74,$bEmulate_imap_8bit=true) {
+ // split text into lines
+ $aLines= preg_split("/(?:\r\n|\r|\n)/", $sText);
+ $cnt = count($aLines);
+
+ for ($i=0;$i<$cnt;$i++) {
+ $sLine =& $aLines[$i];
+ if (strlen($sLine)===0) continue; // do nothing, if empty
+
+ $sRegExp = '/[^\x09\x20\x21-\x3C\x3E-\x7E]/e';
+
+ // imap_8bit encodes x09 everywhere, not only at lineends,
+ // for EBCDIC safeness encode !"#$@[\]^`{|}~,
+ // for complete safeness encode every character :)
+ if ($bEmulate_imap_8bit)
+ $sRegExp = '/[^\x20\x21-\x3C\x3E-\x7E]/e';
+
+ $sReplmt = 'sprintf( "=%02X", ord ( "$0" ) ) ;';
+ $sLine = preg_replace( $sRegExp, $sReplmt, $sLine );
+
+ // encode x09,x20 at lineends
+ {
+ $iLength = strlen($sLine);
+ $iLastChar = ord($sLine{$iLength-1});
+
+ // !!!!!!!!
+ // imap_8_bit does not encode x20 at the very end of a text,
+ // here is, where I don't agree with imap_8_bit,
+ // please correct me, if I'm wrong,
+ // or comment next line for RFC2045 conformance, if you like
+ if (!($bEmulate_imap_8bit && ($i==count($aLines)-1))){
+ if (($iLastChar==0x09)||($iLastChar==0x20)) {
+ $sLine{$iLength-1}='=';
+ $sLine .= ($iLastChar==0x09)?'09':'20';
+ }
+ }
+ } // imap_8bit encodes x20 before chr(13), too
+ // although IMHO not requested by RFC2045, why not do it safer :)
+ // and why not encode any x20 around chr(10) or chr(13)
+ if ($bEmulate_imap_8bit) {
+ $sLine=str_replace(' =0D','=20=0D',$sLine);
+ //$sLine=str_replace(' =0A','=20=0A',$sLine);
+ //$sLine=str_replace('=0D ','=0D=20',$sLine);
+ //$sLine=str_replace('=0A ','=0A=20',$sLine);
+ }
+
+ // finally split into softlines no longer than $maxlen chars,
+ // for even more safeness one could encode x09,x20
+ // at the very first character of the line
+ // and after soft linebreaks, as well,
+ // but this wouldn't be caught by such an easy RegExp
+ if($maxlen){
+ preg_match_all( '/.{1,'.($maxlen - 2).'}([^=]{0,2})?/', $sLine, $aMatch );
+ $sLine = implode( '=' . MAILHEADER_EOL, $aMatch[0] ); // add soft crlf's
+ }
+ }
+
+ // join lines into text
+ return implode(MAILHEADER_EOL,$aLines);
+}
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/media.php b/mod/dokuwiki/vendors/dokuwiki/inc/media.php
new file mode 100644
index 000000000..9090dbd22
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/media.php
@@ -0,0 +1,1102 @@
+<?php
+/**
+ * All output and handler function needed for the media management popup
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+if(!defined('DOKU_INC')) die('meh.');
+if(!defined('NL')) define('NL',"\n");
+require_once(DOKU_INC.'inc/html.php');
+require_once(DOKU_INC.'inc/search.php');
+require_once(DOKU_INC.'inc/JpegMeta.php');
+
+/**
+ * Lists pages which currently use a media file selected for deletion
+ *
+ * References uses the same visual as search results and share
+ * their CSS tags except pagenames won't be links.
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+function media_filesinuse($data,$id){
+ global $lang;
+ echo '<h1>'.$lang['reference'].' <code>'.hsc(noNS($id)).'</code></h1>';
+ echo '<p>'.hsc($lang['ref_inuse']).'</p>';
+
+ $hidden=0; //count of hits without read permission
+ foreach($data as $row){
+ if(auth_quickaclcheck($row) >= AUTH_READ && isVisiblePage($row)){
+ echo '<div class="search_result">';
+ echo '<span class="mediaref_ref">'.hsc($row).'</span>';
+ echo '</div>';
+ }else
+ $hidden++;
+ }
+ if ($hidden){
+ print '<div class="mediaref_hidden">'.$lang['ref_hidden'].'</div>';
+ }
+}
+
+/**
+ * Handles the saving of image meta data
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function media_metasave($id,$auth,$data){
+ if($auth < AUTH_UPLOAD) return false;
+ if(!checkSecurityToken()) return false;
+ global $lang;
+ global $conf;
+ $src = mediaFN($id);
+
+ $meta = new JpegMeta($src);
+ $meta->_parseAll();
+
+ foreach($data as $key => $val){
+ $val=trim($val);
+ if(empty($val)){
+ $meta->deleteField($key);
+ }else{
+ $meta->setField($key,$val);
+ }
+ }
+
+ if($meta->save()){
+ if($conf['fperm']) chmod($src, $conf['fperm']);
+ msg($lang['metasaveok'],1);
+ return $id;
+ }else{
+ msg($lang['metasaveerr'],-1);
+ return false;
+ }
+}
+
+/**
+ * Display the form to edit image meta data
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function media_metaform($id,$auth){
+ if($auth < AUTH_UPLOAD) return false;
+ global $lang, $config_cascade;
+
+ // load the field descriptions
+ static $fields = null;
+ if(is_null($fields)){
+
+ foreach (array('default','local') as $config_group) {
+ if (empty($config_cascade['mediameta'][$config_group])) continue;
+ foreach ($config_cascade['mediameta'][$config_group] as $config_file) {
+ if(@file_exists($config_file)){
+ include($config_file);
+ }
+ }
+ }
+ }
+
+ $src = mediaFN($id);
+
+ // output
+ echo '<h1>'.hsc(noNS($id)).'</h1>'.NL;
+ echo '<form action="'.DOKU_BASE.'lib/exe/mediamanager.php" accept-charset="utf-8" method="post" class="meta">'.NL;
+ formSecurityToken();
+ foreach($fields as $key => $field){
+ // get current value
+ $tags = array($field[0]);
+ if(is_array($field[3])) $tags = array_merge($tags,$field[3]);
+ $value = tpl_img_getTag($tags,'',$src);
+ $value = cleanText($value);
+
+ // prepare attributes
+ $p = array();
+ $p['class'] = 'edit';
+ $p['id'] = 'meta__'.$key;
+ $p['name'] = 'meta['.$field[0].']';
+
+ // put label
+ echo '<div class="metafield">';
+ echo '<label for="meta__'.$key.'">';
+ echo ($lang[$field[1]]) ? $lang[$field[1]] : $field[1];
+ echo ':</label>';
+
+ // put input field
+ if($field[2] == 'text'){
+ $p['value'] = $value;
+ $p['type'] = 'text';
+ $att = buildAttributes($p);
+ echo "<input $att/>".NL;
+ }else{
+ $att = buildAttributes($p);
+ echo "<textarea $att rows=\"6\" cols=\"50\">".formText($value).'</textarea>'.NL;
+ }
+ echo '</div>'.NL;
+ }
+ echo '<div class="buttons">'.NL;
+ echo '<input type="hidden" name="img" value="'.hsc($id).'" />'.NL;
+ echo '<input name="do[save]" type="submit" value="'.$lang['btn_save'].
+ '" title="'.$lang['btn_save'].' [S]" accesskey="s" class="button" />'.NL;
+ echo '<input name="do[cancel]" type="submit" value="'.$lang['btn_cancel'].
+ '" title="'.$lang['btn_cancel'].' [C]" accesskey="c" class="button" />'.NL;
+ echo '</div>'.NL;
+ echo '</form>'.NL;
+}
+
+/**
+ * Conveinience function to check if a media file is still in use
+ *
+ * @author Michael Klier <chi@chimeric.de>
+ */
+function media_inuse($id) {
+ global $conf;
+ $mediareferences = array();
+ if($conf['refcheck']){
+ require_once(DOKU_INC.'inc/fulltext.php');
+ $mediareferences = ft_mediause($id,$conf['refshow']);
+ if(!count($mediareferences)) {
+ return false;
+ } else {
+ return $mediareferences;
+ }
+ } else {
+ return false;
+ }
+}
+
+/**
+ * Handles media file deletions
+ *
+ * If configured, checks for media references before deletion
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @return mixed false on error, true on delete or array with refs
+ */
+function media_delete($id,$auth){
+ if($auth < AUTH_DELETE) return false;
+ if(!checkSecurityToken()) return false;
+ global $conf;
+ global $lang;
+
+ $file = mediaFN($id);
+
+ // trigger an event - MEDIA_DELETE_FILE
+ $data['id'] = $id;
+ $data['name'] = basename($file);
+ $data['path'] = $file;
+ $data['size'] = (@file_exists($file)) ? filesize($file) : 0;
+
+ $data['unl'] = false;
+ $data['del'] = false;
+ $evt = new Doku_Event('MEDIA_DELETE_FILE',$data);
+ if ($evt->advise_before()) {
+ $data['unl'] = @unlink($file);
+ if($data['unl']){
+ addMediaLogEntry(time(), $id, DOKU_CHANGE_TYPE_DELETE);
+ $data['del'] = io_sweepNS($id,'mediadir');
+ }
+ }
+ $evt->advise_after();
+ unset($evt);
+
+ if($data['unl'] && $data['del']){
+ // current namespace was removed. redirecting to root ns passing msg along
+ send_redirect(DOKU_URL.'lib/exe/mediamanager.php?msg1='.
+ rawurlencode(sprintf(noNS($id),$lang['deletesucc'])));
+ }
+
+ return $data['unl'];
+}
+
+/**
+ * Handles media file uploads
+ *
+ * This generates an action event and delegates to _media_upload_action().
+ * Action plugins are allowed to pre/postprocess the uploaded file.
+ * (The triggered event is preventable.)
+ *
+ * Event data:
+ * $data[0] fn_tmp: the temporary file name (read from $_FILES)
+ * $data[1] fn: the file name of the uploaded file
+ * $data[2] id: the future directory id of the uploaded file
+ * $data[3] imime: the mimetype of the uploaded file
+ * $data[4] overwrite: if an existing file is going to be overwritten
+ *
+ * @triggers MEDIA_UPLOAD_FINISH
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Michael Klier <chi@chimeric.de>
+ * @return mixed false on error, id of the new file on success
+ */
+function media_upload($ns,$auth){
+ if($auth < AUTH_UPLOAD) return false;
+ if(!checkSecurityToken()) return false;
+ require_once(DOKU_INC.'inc/confutils.php');
+ global $lang;
+ global $conf;
+
+ // get file and id
+ $id = $_POST['id'];
+ $file = $_FILES['upload'];
+ if(empty($id)) $id = $file['name'];
+
+ // check for errors (messages are done in lib/exe/mediamanager.php)
+ if($file['error']) return false;
+
+ // check extensions
+ list($fext,$fmime,$dl) = mimetype($file['name']);
+ list($iext,$imime,$dl) = mimetype($id);
+ if($fext && !$iext){
+ // no extension specified in id - read original one
+ $id .= '.'.$fext;
+ $imime = $fmime;
+ }elseif($fext && $fext != $iext){
+ // extension was changed, print warning
+ msg(sprintf($lang['mediaextchange'],$fext,$iext));
+ }
+
+ // get filename
+ $id = cleanID($ns.':'.$id,false,true);
+ $fn = mediaFN($id);
+
+ // get filetype regexp
+ $types = array_keys(getMimeTypes());
+ $types = array_map(create_function('$q','return preg_quote($q,"/");'),$types);
+ $regex = join('|',$types);
+
+ // because a temp file was created already
+ if(preg_match('/\.('.$regex.')$/i',$fn)){
+ //check for overwrite
+ $overwrite = @file_exists($fn);
+ if($overwrite && (!$_REQUEST['ow'] || $auth < AUTH_DELETE)){
+ msg($lang['uploadexist'],0);
+ return false;
+ }
+ // check for valid content
+ $ok = media_contentcheck($file['tmp_name'],$imime);
+ if($ok == -1){
+ msg(sprintf($lang['uploadbadcontent'],".$iext"),-1);
+ return false;
+ }elseif($ok == -2){
+ msg($lang['uploadspam'],-1);
+ return false;
+ }elseif($ok == -3){
+ msg($lang['uploadxss'],-1);
+ return false;
+ }
+
+ // prepare event data
+ $data[0] = $file['tmp_name'];
+ $data[1] = $fn;
+ $data[2] = $id;
+ $data[3] = $imime;
+ $data[4] = $overwrite;
+
+ // trigger event
+ return trigger_event('MEDIA_UPLOAD_FINISH', $data, '_media_upload_action', true);
+
+ }else{
+ msg($lang['uploadwrong'],-1);
+ }
+ return false;
+}
+
+/**
+ * Callback adapter for media_upload_finish()
+ * @author Michael Klier <chi@chimeric.de>
+ */
+function _media_upload_action($data) {
+ // fixme do further sanity tests of given data?
+ if(is_array($data) && count($data)===5) {
+ return media_upload_finish($data[0], $data[1], $data[2], $data[3], $data[4]);
+ } else {
+ return false; //callback error
+ }
+}
+
+/**
+ * Saves an uploaded media file
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Michael Klier <chi@chimeric.de>
+ */
+function media_upload_finish($fn_tmp, $fn, $id, $imime, $overwrite) {
+ global $conf;
+ global $lang;
+
+ // prepare directory
+ io_createNamespace($id, 'media');
+
+ if(move_uploaded_file($fn_tmp, $fn)) {
+ // Set the correct permission here.
+ // Always chmod media because they may be saved with different permissions than expected from the php umask.
+ // (Should normally chmod to $conf['fperm'] only if $conf['fperm'] is set.)
+ chmod($fn, $conf['fmode']);
+ msg($lang['uploadsucc'],1);
+ media_notify($id,$fn,$imime);
+ // add a log entry to the media changelog
+ if ($overwrite) {
+ addMediaLogEntry(time(), $id, DOKU_CHANGE_TYPE_EDIT);
+ } else {
+ addMediaLogEntry(time(), $id, DOKU_CHANGE_TYPE_CREATE);
+ }
+ return $id;
+ }else{
+ msg($lang['uploadfail'],-1);
+ }
+}
+
+/**
+ * This function checks if the uploaded content is really what the
+ * mimetype says it is. We also do spam checking for text types here.
+ *
+ * We need to do this stuff because we can not rely on the browser
+ * to do this check correctly. Yes, IE is broken as usual.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @link http://www.splitbrain.org/blog/2007-02/12-internet_explorer_facilitates_cross_site_scripting
+ * @fixme check all 26 magic IE filetypes here?
+ */
+function media_contentcheck($file,$mime){
+ global $conf;
+ if($conf['iexssprotect']){
+ $fh = @fopen($file, 'rb');
+ if($fh){
+ $bytes = fread($fh, 256);
+ fclose($fh);
+ if(preg_match('/<(script|a|img|html|body|iframe)[\s>]/i',$bytes)){
+ return -3;
+ }
+ }
+ }
+ if(substr($mime,0,6) == 'image/'){
+ $info = @getimagesize($file);
+ if($mime == 'image/gif' && $info[2] != 1){
+ return -1;
+ }elseif($mime == 'image/jpeg' && $info[2] != 2){
+ return -1;
+ }elseif($mime == 'image/png' && $info[2] != 3){
+ return -1;
+ }
+ # fixme maybe check other images types as well
+ }elseif(substr($mime,0,5) == 'text/'){
+ global $TEXT;
+ $TEXT = io_readFile($file);
+ if(checkwordblock()){
+ return -2;
+ }
+ }
+ return 0;
+}
+
+/**
+ * Send a notify mail on uploads
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function media_notify($id,$file,$mime){
+ global $lang;
+ global $conf;
+ if(empty($conf['notify'])) return; //notify enabled?
+
+ $ip = clientIP();
+
+ $text = rawLocale('uploadmail');
+ $text = str_replace('@DATE@',dformat(),$text);
+ $text = str_replace('@BROWSER@',$_SERVER['HTTP_USER_AGENT'],$text);
+ $text = str_replace('@IPADDRESS@',$ip,$text);
+ $text = str_replace('@HOSTNAME@',gethostsbyaddrs($ip),$text);
+ $text = str_replace('@DOKUWIKIURL@',DOKU_URL,$text);
+ $text = str_replace('@USER@',$_SERVER['REMOTE_USER'],$text);
+ $text = str_replace('@MIME@',$mime,$text);
+ $text = str_replace('@MEDIA@',ml($id,'',true,'&',true),$text);
+ $text = str_replace('@SIZE@',filesize_h(filesize($file)),$text);
+
+ $from = $conf['mailfrom'];
+ $from = str_replace('@USER@',$_SERVER['REMOTE_USER'],$from);
+ $from = str_replace('@NAME@',$INFO['userinfo']['name'],$from);
+ $from = str_replace('@MAIL@',$INFO['userinfo']['mail'],$from);
+
+ $subject = '['.$conf['title'].'] '.$lang['mail_upload'].' '.$id;
+
+ mail_send($conf['notify'],$subject,$text,$from);
+}
+
+/**
+ * List all files in a given Media namespace
+ */
+function media_filelist($ns,$auth=null,$jump=''){
+ global $conf;
+ global $lang;
+ $ns = cleanID($ns);
+
+ // check auth our self if not given (needed for ajax calls)
+ if(is_null($auth)) $auth = auth_quickaclcheck("$ns:*");
+
+ echo '<h1 id="media__ns">:'.hsc($ns).'</h1>'.NL;
+
+ if($auth < AUTH_READ){
+ // FIXME: print permission warning here instead?
+ echo '<div class="nothing">'.$lang['nothingfound'].'</div>'.NL;
+ }else{
+ media_uploadform($ns, $auth);
+
+ $dir = utf8_encodeFN(str_replace(':','/',$ns));
+ $data = array();
+ search($data,$conf['mediadir'],'search_media',
+ array('showmsg'=>true,'depth'=>1),$dir);
+
+ if(!count($data)){
+ echo '<div class="nothing">'.$lang['nothingfound'].'</div>'.NL;
+ }else foreach($data as $item){
+ media_printfile($item,$auth,$jump);
+ }
+ }
+ media_searchform($ns);
+}
+
+/**
+ * List all files found by the search request
+ *
+ * @author Tobias Sarnowski <sarnowski@cosmocode.de>
+ * @author Andreas Gohr <gohr@cosmocode.de>
+ * @triggers MEDIA_SEARCH
+ */
+function media_searchlist($query,$ns,$auth=null){
+ global $conf;
+ global $lang;
+ $ns = cleanID($ns);
+
+ if ($query) {
+ $evdata = array(
+ 'ns' => $ns,
+ 'data' => array(),
+ 'query' => $query
+ );
+ $evt = new Doku_Event('MEDIA_SEARCH', $evdata);
+ if ($evt->advise_before()) {
+ $dir = utf8_encodeFN(str_replace(':','/',$evdata['ns']));
+ $pattern = '/'.preg_quote($evdata['query'],'/').'/i';
+ search($evdata['data'],
+ $conf['mediadir'],
+ 'search_media',
+ array('showmsg'=>false,'pattern'=>$pattern),
+ $dir);
+ }
+ $evt->advise_after();
+ unset($evt);
+ }
+
+ echo '<h1 id="media__ns">'.sprintf($lang['searchmedia_in'],hsc($ns).':*').'</h1>'.NL;
+ media_searchform($ns,$query);
+
+ if(!count($evdata['data'])){
+ echo '<div class="nothing">'.$lang['nothingfound'].'</div>'.NL;
+ }else foreach($evdata['data'] as $item){
+ media_printfile($item,$item['perm'],'',true);
+ }
+}
+
+/**
+ * Print action links for a file depending on filetype
+ * and available permissions
+ */
+function media_fileactions($item,$auth){
+ global $lang;
+
+ // view button
+ $link = ml($item['id'],'',true);
+ echo ' <a href="'.$link.'" target="_blank"><img src="'.DOKU_MEDIA.'lib/images/magnifier.png" '.
+ 'alt="'.$lang['mediaview'].'" title="'.$lang['mediaview'].'" class="btn" /></a>';
+
+ // no further actions if not writable
+ if(!$item['writable']) return;
+
+ // delete button
+ if($auth >= AUTH_DELETE){
+ echo ' <a href="'.DOKU_BASE.'lib/exe/mediamanager.php?delete='.rawurlencode($item['id']).
+ '&amp;sectok='.getSecurityToken().'" class="btn_media_delete" title="'.$item['id'].'">'.
+ '<img src="'.DOKU_MEDIA.'lib/images/trash.png" alt="'.$lang['btn_delete'].'" '.
+ 'title="'.$lang['btn_delete'].'" class="btn" /></a>';
+ }
+
+ // edit button
+ if($auth >= AUTH_UPLOAD && $item['isimg'] && $item['meta']->getField('File.Mime') == 'image/jpeg'){
+ echo ' <a href="'.DOKU_BASE.'lib/exe/mediamanager.php?edit='.rawurlencode($item['id']).'">'.
+ '<img src="'.DOKU_MEDIA.'lib/images/pencil.png" alt="'.$lang['metaedit'].'" '.
+ 'title="'.$lang['metaedit'].'" class="btn" /></a>';
+ }
+
+}
+
+/**
+ * Formats and prints one file in the list
+ */
+function media_printfile($item,$auth,$jump,$display_namespace=false){
+ global $lang;
+ global $conf;
+
+ // Prepare zebra coloring
+ // I always wanted to use this variable name :-D
+ static $twibble = 1;
+ $twibble *= -1;
+ $zebra = ($twibble == -1) ? 'odd' : 'even';
+
+ // Automatically jump to recent action
+ if($jump == $item['id']) {
+ $jump = ' id="scroll__here" ';
+ }else{
+ $jump = '';
+ }
+
+ // Prepare fileicons
+ list($ext,$mime,$dl) = mimetype($item['file'],false);
+ $class = preg_replace('/[^_\-a-z0-9]+/i','_',$ext);
+ $class = 'select mediafile mf_'.$class;
+
+ // Prepare filename
+ $file = utf8_decodeFN($item['file']);
+
+ // Prepare info
+ $info = '';
+ if($item['isimg']){
+ $info .= (int) $item['meta']->getField('File.Width');
+ $info .= '&#215;';
+ $info .= (int) $item['meta']->getField('File.Height');
+ $info .= ' ';
+ }
+ $info .= '<i>'.dformat($item['mtime']).'</i>';
+ $info .= ' ';
+ $info .= filesize_h($item['size']);
+
+ // output
+ echo '<div class="'.$zebra.'"'.$jump.'>'.NL;
+ if (!$display_namespace) {
+ echo '<a name="h_:'.$item['id'].'" class="'.$class.'">'.hsc($file).'</a> ';
+ } else {
+ echo '<a name="h_:'.$item['id'].'" class="'.$class.'">'.hsc($item['id']).'</a><br/>';
+ }
+ echo '<span class="info">('.$info.')</span>'.NL;
+ media_fileactions($item,$auth);
+ echo '<div class="example" id="ex_'.str_replace(':','_',$item['id']).'">';
+ echo $lang['mediausage'].' <code>{{:'.$item['id'].'}}</code>';
+ echo '</div>';
+ if($item['isimg']) media_printimgdetail($item);
+ echo '<div class="clearer"></div>'.NL;
+ echo '</div>'.NL;
+}
+
+/**
+ * Prints a thumbnail and metainfos
+ */
+function media_printimgdetail($item){
+ // prepare thumbnail
+ $w = (int) $item['meta']->getField('File.Width');
+ $h = (int) $item['meta']->getField('File.Height');
+ if($w>120 || $h>120){
+ $ratio = $item['meta']->getResizeRatio(120);
+ $w = floor($w * $ratio);
+ $h = floor($h * $ratio);
+ }
+ $src = ml($item['id'],array('w'=>$w,'h'=>$h));
+ $p = array();
+ $p['width'] = $w;
+ $p['height'] = $h;
+ $p['alt'] = $item['id'];
+ $p['class'] = 'thumb';
+ $att = buildAttributes($p);
+
+ // output
+ echo '<div class="detail">';
+ echo '<div class="thumb">';
+ echo '<a name="d_:'.$item['id'].'" class="select">';
+ echo '<img src="'.$src.'" '.$att.' />';
+ echo '</a>';
+ echo '</div>';
+
+ // read EXIF/IPTC data
+ $t = $item['meta']->getField(array('IPTC.Headline','xmp.dc:title'));
+ $d = $item['meta']->getField(array('IPTC.Caption','EXIF.UserComment',
+ 'EXIF.TIFFImageDescription',
+ 'EXIF.TIFFUserComment'));
+ if(utf8_strlen($d) > 250) $d = utf8_substr($d,0,250).'...';
+ $k = $item['meta']->getField(array('IPTC.Keywords','IPTC.Category','xmp.dc:subject'));
+
+ // print EXIF/IPTC data
+ if($t || $d || $k ){
+ echo '<p>';
+ if($t) echo '<strong>'.htmlspecialchars($t).'</strong><br />';
+ if($d) echo htmlspecialchars($d).'<br />';
+ if($t) echo '<em>'.htmlspecialchars($k).'</em>';
+ echo '</p>';
+ }
+ echo '</div>';
+}
+
+/**
+ * Print the media upload form if permissions are correct
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function media_uploadform($ns, $auth){
+ global $lang;
+
+ if($auth < AUTH_UPLOAD) return; //fixme print info on missing permissions?
+
+ // The default HTML upload form
+ $form = new Doku_Form(array('id' => 'dw__upload',
+ 'action' => DOKU_BASE.'lib/exe/mediamanager.php',
+ 'enctype' => 'multipart/form-data'));
+ $form->addElement('<div class="upload">' . $lang['mediaupload'] . '</div>');
+ $form->addElement(formSecurityToken());
+ $form->addHidden('ns', hsc($ns));
+ $form->addElement(form_makeOpenTag('p'));
+ $form->addElement(form_makeFileField('upload', $lang['txt_upload'].':', 'upload__file'));
+ $form->addElement(form_makeCloseTag('p'));
+ $form->addElement(form_makeOpenTag('p'));
+ $form->addElement(form_makeTextField('id', '', $lang['txt_filename'].':', 'upload__name'));
+ $form->addElement(form_makeButton('submit', '', $lang['btn_upload']));
+ $form->addElement(form_makeCloseTag('p'));
+
+ if($auth >= AUTH_DELETE){
+ $form->addElement(form_makeOpenTag('p'));
+ $form->addElement(form_makeCheckboxField('ow', 1, $lang['txt_overwrt'], 'dw__ow', 'check'));
+ $form->addElement(form_makeCloseTag('p'));
+ }
+ html_form('upload', $form);
+
+ // prepare flashvars for multiupload
+ $opt = array(
+ 'L_gridname' => $lang['mu_gridname'] ,
+ 'L_gridsize' => $lang['mu_gridsize'] ,
+ 'L_gridstat' => $lang['mu_gridstat'] ,
+ 'L_namespace' => $lang['mu_namespace'] ,
+ 'L_overwrite' => $lang['txt_overwrt'],
+ 'L_browse' => $lang['mu_browse'],
+ 'L_upload' => $lang['btn_upload'],
+ 'L_toobig' => $lang['mu_toobig'],
+ 'L_ready' => $lang['mu_ready'],
+ 'L_done' => $lang['mu_done'],
+ 'L_fail' => $lang['mu_fail'],
+ 'L_authfail' => $lang['mu_authfail'],
+ 'L_progress' => $lang['mu_progress'],
+ 'L_filetypes' => $lang['mu_filetypes'],
+ 'L_info' => $lang['mu_info'],
+ 'L_lasterr' => $lang['mu_lasterr'],
+
+ 'O_ns' => ":$ns",
+ 'O_backend' => 'mediamanager.php?'.session_name().'='.session_id(),
+ 'O_maxsize' => php_to_byte(ini_get('upload_max_filesize')),
+ 'O_extensions'=> join('|',array_keys(getMimeTypes())),
+ 'O_overwrite' => ($auth >= AUTH_DELETE),
+ 'O_sectok' => getSecurityToken(),
+ 'O_authtok' => auth_createToken(),
+ );
+ $var = buildURLparams($opt);
+ // output the flash uploader
+ ?>
+ <div id="dw__flashupload" style="display:none">
+ <div class="upload"><?php echo $lang['mu_intro']?></div>
+ <?php echo html_flashobject('multipleUpload.swf','500','190',null,$opt); ?>
+ </div>
+ <?php
+}
+
+/**
+ * Print the search field form
+ *
+ * @author Tobias Sarnowski <sarnowski@cosmocode.de>
+ */
+function media_searchform($ns,$query=''){
+ global $lang;
+
+ // The default HTML search form
+ $form = new Doku_Form(array('id' => 'dw__mediasearch', 'action' => DOKU_BASE.'lib/exe/mediamanager.php'));
+ $form->addElement('<div class="upload">' . $lang['mediasearch'] . '</div>');
+ $form->addElement(formSecurityToken());
+ $form->addHidden('ns', $ns);
+ $form->addHidden('do', 'searchlist');
+ $form->addElement(form_makeOpenTag('p'));
+ $form->addElement(form_makeTextField('q', $query,$lang['searchmedia'],'','',array('title'=>sprintf($lang['searchmedia_in'],hsc($ns).':*'))));
+ $form->addElement(form_makeButton('submit', '', $lang['btn_search']));
+ $form->addElement(form_makeCloseTag('p'));
+ html_form('searchmedia', $form);
+}
+
+/**
+ * Build a tree outline of available media namespaces
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function media_nstree($ns){
+ global $conf;
+ global $lang;
+
+ // currently selected namespace
+ $ns = cleanID($ns);
+ if(empty($ns)){
+ $ns = dirname(str_replace(':','/',$ID));
+ if($ns == '.') $ns ='';
+ }
+ $ns = utf8_encodeFN(str_replace(':','/',$ns));
+
+ $data = array();
+ search($data,$conf['mediadir'],'search_index',array('ns' => $ns, 'nofiles' => true));
+
+ // wrap a list with the root level around the other namespaces
+ $item = array( 'level' => 0, 'id' => '',
+ 'open' =>'true', 'label' => '['.$lang['mediaroot'].']');
+
+ echo '<ul class="idx">';
+ echo media_nstree_li($item);
+ echo media_nstree_item($item);
+ echo html_buildlist($data,'idx','media_nstree_item','media_nstree_li');
+ echo '</li>';
+ echo '</ul>';
+}
+
+/**
+ * Userfunction for html_buildlist
+ *
+ * Prints a media namespace tree item
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function media_nstree_item($item){
+ $pos = strrpos($item['id'], ':');
+ $label = substr($item['id'], $pos > 0 ? $pos + 1 : 0);
+ if(!$item['label']) $item['label'] = $label;
+
+ $ret = '';
+ $ret .= '<a href="'.DOKU_BASE.'lib/exe/mediamanager.php?ns='.idfilter($item['id']).'" class="idx_dir">';
+ $ret .= $item['label'];
+ $ret .= '</a>';
+ return $ret;
+}
+
+/**
+ * Userfunction for html_buildlist
+ *
+ * Prints a media namespace tree item opener
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function media_nstree_li($item){
+ $class='media level'.$item['level'];
+ if($item['open']){
+ $class .= ' open';
+ $img = DOKU_BASE.'lib/images/minus.gif';
+ $alt = '&minus;';
+ }else{
+ $class .= ' closed';
+ $img = DOKU_BASE.'lib/images/plus.gif';
+ $alt = '+';
+ }
+ return '<li class="'.$class.'">'.
+ '<img src="'.$img.'" alt="'.$alt.'" />';
+}
+
+/**
+ * Resizes the given image to the given size
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function media_resize_image($file, $ext, $w, $h=0){
+ global $conf;
+
+ $info = @getimagesize($file); //get original size
+ if($info == false) return $file; // that's no image - it's a spaceship!
+
+ if(!$h) $h = round(($w * $info[1]) / $info[0]);
+
+ // we wont scale up to infinity
+ if($w > 2000 || $h > 2000) return $file;
+
+ //cache
+ $local = getCacheName($file,'.media.'.$w.'x'.$h.'.'.$ext);
+ $mtime = @filemtime($local); // 0 if not exists
+
+ if( $mtime > filemtime($file) ||
+ media_resize_imageIM($ext,$file,$info[0],$info[1],$local,$w,$h) ||
+ media_resize_imageGD($ext,$file,$info[0],$info[1],$local,$w,$h) ){
+ if($conf['fperm']) chmod($local, $conf['fperm']);
+ return $local;
+ }
+ //still here? resizing failed
+ return $file;
+}
+
+/**
+ * Crops the given image to the wanted ratio, then calls media_resize_image to scale it
+ * to the wanted size
+ *
+ * Crops are centered horizontally but prefer the upper third of an vertical
+ * image because most pics are more interesting in that area (rule of thirds)
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function media_crop_image($file, $ext, $w, $h=0){
+ global $conf;
+
+ if(!$h) $h = $w;
+ $info = @getimagesize($file); //get original size
+ if($info == false) return $file; // that's no image - it's a spaceship!
+
+ // calculate crop size
+ $fr = $info[0]/$info[1];
+ $tr = $w/$h;
+ if($tr >= 1){
+ if($tr > $fr){
+ $cw = $info[0];
+ $ch = (int) $info[0]/$tr;
+ }else{
+ $cw = (int) $info[1]*$tr;
+ $ch = $info[1];
+ }
+ }else{
+ if($tr < $fr){
+ $cw = (int) $info[1]*$tr;
+ $ch = $info[1];
+ }else{
+ $cw = $info[0];
+ $ch = (int) $info[0]/$tr;
+ }
+ }
+ // calculate crop offset
+ $cx = (int) ($info[0]-$cw)/2;
+ $cy = (int) ($info[1]-$ch)/3;
+
+ //cache
+ $local = getCacheName($file,'.media.'.$cw.'x'.$ch.'.crop.'.$ext);
+ $mtime = @filemtime($local); // 0 if not exists
+
+ if( $mtime > filemtime($file) ||
+ media_crop_imageIM($ext,$file,$info[0],$info[1],$local,$cw,$ch,$cx,$cy) ||
+ media_resize_imageGD($ext,$file,$cw,$ch,$local,$cw,$ch,$cx,$cy) ){
+ if($conf['fperm']) chmod($local, $conf['fperm']);
+ return media_resize_image($local,$ext, $w, $h);
+ }
+
+ //still here? cropping failed
+ return media_resize_image($file,$ext, $w, $h);
+}
+
+/**
+ * Download a remote file and return local filename
+ *
+ * returns false if download fails. Uses cached file if available and
+ * wanted
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Pavel Vitis <Pavel.Vitis@seznam.cz>
+ */
+function media_get_from_URL($url,$ext,$cache){
+ global $conf;
+
+ // if no cache or fetchsize just redirect
+ if ($cache==0) return false;
+ if (!$conf['fetchsize']) return false;
+
+ $local = getCacheName(strtolower($url),".media.$ext");
+ $mtime = @filemtime($local); // 0 if not exists
+
+ //decide if download needed:
+ if( ($mtime == 0) || // cache does not exist
+ ($cache != -1 && $mtime < time()-$cache) // 'recache' and cache has expired
+ ){
+ if(media_image_download($url,$local)){
+ return $local;
+ }else{
+ return false;
+ }
+ }
+
+ //if cache exists use it else
+ if($mtime) return $local;
+
+ //else return false
+ return false;
+}
+
+/**
+ * Download image files
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function media_image_download($url,$file){
+ global $conf;
+ $http = new DokuHTTPClient();
+ $http->max_bodysize = $conf['fetchsize'];
+ $http->timeout = 25; //max. 25 sec
+ $http->header_regexp = '!\r\nContent-Type: image/(jpe?g|gif|png)!i';
+
+ $data = $http->get($url);
+ if(!$data) return false;
+
+ $fileexists = @file_exists($file);
+ $fp = @fopen($file,"w");
+ if(!$fp) return false;
+ fwrite($fp,$data);
+ fclose($fp);
+ if(!$fileexists and $conf['fperm']) chmod($file, $conf['fperm']);
+
+ // check if it is really an image
+ $info = @getimagesize($file);
+ if(!$info){
+ @unlink($file);
+ return false;
+ }
+
+ return true;
+}
+
+/**
+ * resize images using external ImageMagick convert program
+ *
+ * @author Pavel Vitis <Pavel.Vitis@seznam.cz>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function media_resize_imageIM($ext,$from,$from_w,$from_h,$to,$to_w,$to_h){
+ global $conf;
+
+ // check if convert is configured
+ if(!$conf['im_convert']) return false;
+
+ // prepare command
+ $cmd = $conf['im_convert'];
+ $cmd .= ' -resize '.$to_w.'x'.$to_h.'!';
+ if ($ext == 'jpg' || $ext == 'jpeg') {
+ $cmd .= ' -quality '.$conf['jpg_quality'];
+ }
+ $cmd .= " $from $to";
+
+ @exec($cmd,$out,$retval);
+ if ($retval == 0) return true;
+ return false;
+}
+
+/**
+ * crop images using external ImageMagick convert program
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function media_crop_imageIM($ext,$from,$from_w,$from_h,$to,$to_w,$to_h,$ofs_x,$ofs_y){
+ global $conf;
+
+ // check if convert is configured
+ if(!$conf['im_convert']) return false;
+
+ // prepare command
+ $cmd = $conf['im_convert'];
+ $cmd .= ' -crop '.$to_w.'x'.$to_h.'+'.$ofs_x.'+'.$ofs_y;
+ if ($ext == 'jpg' || $ext == 'jpeg') {
+ $cmd .= ' -quality '.$conf['jpg_quality'];
+ }
+ $cmd .= " $from $to";
+
+ @exec($cmd,$out,$retval);
+ if ($retval == 0) return true;
+ return false;
+}
+
+/**
+ * resize or crop images using PHP's libGD support
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Sebastian Wienecke <s_wienecke@web.de>
+ */
+function media_resize_imageGD($ext,$from,$from_w,$from_h,$to,$to_w,$to_h,$ofs_x=0,$ofs_y=0){
+ global $conf;
+
+ if($conf['gdlib'] < 1) return false; //no GDlib available or wanted
+
+ // check available memory
+ if(!is_mem_available(($from_w * $from_h * 4) + ($to_w * $to_h * 4))){
+ return false;
+ }
+
+ // create an image of the given filetype
+ if ($ext == 'jpg' || $ext == 'jpeg'){
+ if(!function_exists("imagecreatefromjpeg")) return false;
+ $image = @imagecreatefromjpeg($from);
+ }elseif($ext == 'png') {
+ if(!function_exists("imagecreatefrompng")) return false;
+ $image = @imagecreatefrompng($from);
+
+ }elseif($ext == 'gif') {
+ if(!function_exists("imagecreatefromgif")) return false;
+ $image = @imagecreatefromgif($from);
+ }
+ if(!$image) return false;
+
+ if(($conf['gdlib']>1) && function_exists("imagecreatetruecolor") && $ext != 'gif'){
+ $newimg = @imagecreatetruecolor ($to_w, $to_h);
+ }
+ if(!$newimg) $newimg = @imagecreate($to_w, $to_h);
+ if(!$newimg){
+ imagedestroy($image);
+ return false;
+ }
+
+ //keep png alpha channel if possible
+ if($ext == 'png' && $conf['gdlib']>1 && function_exists('imagesavealpha')){
+ imagealphablending($newimg, false);
+ imagesavealpha($newimg,true);
+ }
+
+ //keep gif transparent color if possible
+ if($ext == 'gif' && function_exists('imagefill') && function_exists('imagecolorallocate')) {
+ if(function_exists('imagecolorsforindex') && function_exists('imagecolortransparent')) {
+ $transcolorindex = @imagecolortransparent($image);
+ if($transcolorindex >= 0 ) { //transparent color exists
+ $transcolor = @imagecolorsforindex($image, $transcolorindex);
+ $transcolorindex = @imagecolorallocate($newimg, $transcolor['red'], $transcolor['green'], $transcolor['blue']);
+ @imagefill($newimg, 0, 0, $transcolorindex);
+ @imagecolortransparent($newimg, $transcolorindex);
+ }else{ //filling with white
+ $whitecolorindex = @imagecolorallocate($newimg, 255, 255, 255);
+ @imagefill($newimg, 0, 0, $whitecolorindex);
+ }
+ }else{ //filling with white
+ $whitecolorindex = @imagecolorallocate($newimg, 255, 255, 255);
+ @imagefill($newimg, 0, 0, $whitecolorindex);
+ }
+ }
+
+ //try resampling first
+ if(function_exists("imagecopyresampled")){
+ if(!@imagecopyresampled($newimg, $image, 0, 0, $ofs_x, $ofs_y, $to_w, $to_h, $from_w, $from_h)) {
+ imagecopyresized($newimg, $image, 0, 0, $ofs_x, $ofs_y, $to_w, $to_h, $from_w, $from_h);
+ }
+ }else{
+ imagecopyresized($newimg, $image, 0, 0, $ofs_x, $ofs_y, $to_w, $to_h, $from_w, $from_h);
+ }
+
+ $okay = false;
+ if ($ext == 'jpg' || $ext == 'jpeg'){
+ if(!function_exists('imagejpeg')){
+ $okay = false;
+ }else{
+ $okay = imagejpeg($newimg, $to, $conf['jpg_quality']);
+ }
+ }elseif($ext == 'png') {
+ if(!function_exists('imagepng')){
+ $okay = false;
+ }else{
+ $okay = imagepng($newimg, $to);
+ }
+ }elseif($ext == 'gif') {
+ if(!function_exists('imagegif')){
+ $okay = false;
+ }else{
+ $okay = imagegif($newimg, $to);
+ }
+ }
+
+ // destroy GD image ressources
+ if($image) imagedestroy($image);
+ if($newimg) imagedestroy($newimg);
+
+ return $okay;
+}
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/pageutils.php b/mod/dokuwiki/vendors/dokuwiki/inc/pageutils.php
new file mode 100644
index 000000000..9c192e5e6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/pageutils.php
@@ -0,0 +1,537 @@
+<?php
+/**
+ * Utilities for handling pagenames
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @todo Combine similar functions like {wiki,media,meta}FN()
+ */
+
+/**
+ * Fetch the an ID from request
+ *
+ * Uses either standard $_REQUEST variable or extracts it from
+ * the full request URI when userewrite is set to 2
+ *
+ * For $param='id' $conf['start'] is returned if no id was found.
+ * If the second parameter is true (default) the ID is cleaned.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function getID($param='id',$clean=true){
+ global $conf;
+
+ $id = isset($_REQUEST[$param]) ? $_REQUEST[$param] : null;
+
+ $request = $_SERVER['REQUEST_URI'];
+
+ //construct page id from request URI
+ if(empty($id) && $conf['userewrite'] == 2){
+ //get the script URL
+ if($conf['basedir']){
+ $relpath = '';
+ if($param != 'id') {
+ $relpath = 'lib/exe/';
+ }
+ $script = $conf['basedir'].$relpath.basename($_SERVER['SCRIPT_FILENAME']);
+
+ }elseif($_SERVER['DOCUMENT_ROOT'] && $_SERVER['PATH_TRANSLATED']){
+ $request = preg_replace ('/^'.preg_quote($_SERVER['DOCUMENT_ROOT'],'/').'/','',
+ $_SERVER['PATH_TRANSLATED']);
+ }elseif($_SERVER['DOCUMENT_ROOT'] && $_SERVER['SCRIPT_FILENAME']){
+ $script = preg_replace ('/^'.preg_quote($_SERVER['DOCUMENT_ROOT'],'/').'/','',
+ $_SERVER['SCRIPT_FILENAME']);
+ $script = '/'.$script;
+ }else{
+ $script = $_SERVER['SCRIPT_NAME'];
+ }
+
+ //clean script and request (fixes a windows problem)
+ $script = preg_replace('/\/\/+/','/',$script);
+ $request = preg_replace('/\/\/+/','/',$request);
+
+ //remove script URL and Querystring to gain the id
+ if(preg_match('/^'.preg_quote($script,'/').'(.*)/',$request, $match)){
+ $id = preg_replace ('/\?.*/','',$match[1]);
+ }
+ $id = urldecode($id);
+ //strip leading slashes
+ $id = preg_replace('!^/+!','',$id);
+ }
+
+ // Namespace autolinking from URL
+ if(substr($id,-1) == ':' || ($conf['useslash'] && substr($id,-1) == '/')){
+ if(page_exists($id.$conf['start'])){
+ // start page inside namespace
+ $id = $id.$conf['start'];
+ }elseif(page_exists($id.noNS(cleanID($id)))){
+ // page named like the NS inside the NS
+ $id = $id.noNS(cleanID($id));
+ }elseif(page_exists($id)){
+ // page like namespace exists
+ $id = substr($id,0,-1);
+ }else{
+ // fall back to default
+ $id = $id.$conf['start'];
+ }
+ send_redirect(wl($id,'',true));
+ }
+
+ if($clean) $id = cleanID($id);
+ if(empty($id) && $param=='id') $id = $conf['start'];
+
+ return $id;
+}
+
+/**
+ * Remove unwanted chars from ID
+ *
+ * Cleans a given ID to only use allowed characters. Accented characters are
+ * converted to unaccented ones
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @param string $raw_id The pageid to clean
+ * @param boolean $ascii Force ASCII
+ * @param boolean $media Allow leading or trailing _ for media files
+ */
+function cleanID($raw_id,$ascii=false,$media=false){
+ global $conf;
+ global $lang;
+ static $sepcharpat = null;
+
+ global $cache_cleanid;
+ $cache = & $cache_cleanid;
+
+ // check if it's already in the memory cache
+ if (isset($cache[(string)$raw_id])) {
+ return $cache[(string)$raw_id];
+ }
+
+ $sepchar = $conf['sepchar'];
+ if($sepcharpat == null) // build string only once to save clock cycles
+ $sepcharpat = '#\\'.$sepchar.'+#';
+
+ $id = trim((string)$raw_id);
+ $id = utf8_strtolower($id);
+
+ //alternative namespace seperator
+ $id = strtr($id,';',':');
+ if($conf['useslash']){
+ $id = strtr($id,'/',':');
+ }else{
+ $id = strtr($id,'/',$sepchar);
+ }
+
+ if($conf['deaccent'] == 2 || $ascii) $id = utf8_romanize($id);
+ if($conf['deaccent'] || $ascii) $id = utf8_deaccent($id,-1);
+
+ //remove specials
+ $id = utf8_stripspecials($id,$sepchar,'\*');
+
+ if($ascii) $id = utf8_strip($id);
+
+ //clean up
+ $id = preg_replace($sepcharpat,$sepchar,$id);
+ $id = preg_replace('#:+#',':',$id);
+ $id = ($media ? trim($id,':.-') : trim($id,':._-'));
+ $id = preg_replace('#:[:\._\-]+#',':',$id);
+
+ $cache[(string)$raw_id] = $id;
+ return($id);
+}
+
+/**
+ * Return namespacepart of a wiki ID
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function getNS($id){
+ $pos = strrpos((string)$id,':');
+ if($pos!==false){
+ return substr((string)$id,0,$pos);
+ }
+ return false;
+}
+
+/**
+ * Returns the ID without the namespace
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function noNS($id) {
+ $pos = strrpos($id, ':');
+ if ($pos!==false) {
+ return substr($id, $pos+1);
+ } else {
+ return $id;
+ }
+}
+
+/**
+ * Returns the current namespace
+ *
+ * @author Nathan Fritz <fritzn@crown.edu>
+ */
+function curNS($id) {
+ return noNS(getNS($id));
+}
+
+/**
+ * Returns the ID without the namespace or current namespace for 'start' pages
+ *
+ * @author Nathan Fritz <fritzn@crown.edu>
+ */
+function noNSorNS($id) {
+ global $conf;
+
+ $p = noNS($id);
+ if ($p == $conf['start']) {
+ $p = curNS($id);
+ if ($p == false) {
+ return noNS($id);
+ }
+ }
+ return $p;
+}
+
+/**
+ * Creates a XHTML valid linkid from a given headline title
+ *
+ * @param string $title The headline title
+ * @param array $check List of existing IDs
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function sectionID($title,&$check) {
+ $title = str_replace(array(':','.'),'',cleanID($title));
+ $new = ltrim($title,'0123456789_-');
+ if(empty($new)){
+ $title = 'section'.preg_replace('/[^0-9]+/','',$title); //keep numbers from headline
+ }else{
+ $title = $new;
+ }
+
+ if(is_array($check)){
+ // make sure tiles are unique
+ $num = '';
+ while(in_array($title.$num,$check)){
+ ($num) ? $num++ : $num = 1;
+ }
+ $title = $title.$num;
+ $check[] = $title;
+ }
+
+ return $title;
+}
+
+
+/**
+ * Wiki page existence check
+ *
+ * parameters as for wikiFN
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ */
+function page_exists($id,$rev='',$clean=true) {
+ return @file_exists(wikiFN($id,$rev,$clean));
+}
+
+/**
+ * returns the full path to the datafile specified by ID and optional revision
+ *
+ * The filename is URL encoded to protect Unicode chars
+ *
+ * @param $raw_id string id of wikipage
+ * @param $rev string page revision, empty string for current
+ * @param $clean bool flag indicating that $raw_id should be cleaned. Only set to false
+ * when $id is guaranteed to have been cleaned already.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function wikiFN($raw_id,$rev='',$clean=true){
+ global $conf;
+
+ global $cache_wikifn;
+ $cache = & $cache_wikifn;
+
+ if (isset($cache[$raw_id]) && isset($cache[$raw_id][$rev])) {
+ return $cache[$raw_id][$rev];
+ }
+
+ $id = $raw_id;
+
+ if ($clean) $id = cleanID($id);
+ $id = str_replace(':','/',$id);
+ if(empty($rev)){
+ $fn = $conf['datadir'].'/'.utf8_encodeFN($id).'.txt';
+ }else{
+ $fn = $conf['olddir'].'/'.utf8_encodeFN($id).'.'.$rev.'.txt';
+ if($conf['compression']){
+ //test for extensions here, we want to read both compressions
+ if (@file_exists($fn . '.gz')){
+ $fn .= '.gz';
+ }else if(@file_exists($fn . '.bz2')){
+ $fn .= '.bz2';
+ }else{
+ //file doesnt exist yet, so we take the configured extension
+ $fn .= '.' . $conf['compression'];
+ }
+ }
+ }
+
+ if (!isset($cache[$raw_id])) { $cache[$raw_id] = array(); }
+ $cache[$raw_id][$rev] = $fn;
+ return $fn;
+}
+
+/**
+ * Returns the full path to the file for locking the page while editing.
+ *
+ * @author Ben Coburn <btcoburn@silicodon.net>
+ */
+function wikiLockFN($id) {
+ global $conf;
+ return $conf['lockdir'].'/'.md5(cleanID($id)).'.lock';
+}
+
+
+/**
+ * returns the full path to the meta file specified by ID and extension
+ *
+ * The filename is URL encoded to protect Unicode chars
+ *
+ * @author Steven Danz <steven-danz@kc.rr.com>
+ */
+function metaFN($id,$ext){
+ global $conf;
+ $id = cleanID($id);
+ $id = str_replace(':','/',$id);
+ $fn = $conf['metadir'].'/'.utf8_encodeFN($id).$ext;
+ return $fn;
+}
+
+/**
+ * returns an array of full paths to all metafiles of a given ID
+ *
+ * @author Esther Brunner <esther@kaffeehaus.ch>
+ */
+function metaFiles($id){
+ $name = noNS($id);
+ $ns = getNS($id);
+ $dir = ($ns) ? metaFN($ns,'').'/' : metaFN($ns,'');
+ $files = array();
+
+ $dh = @opendir($dir);
+ if(!$dh) return $files;
+ while(($file = readdir($dh)) !== false){
+ if(strpos($file,$name.'.') === 0 && !is_dir($dir.$file))
+ $files[] = $dir.$file;
+ }
+ closedir($dh);
+
+ return $files;
+}
+
+/**
+ * returns the full path to the mediafile specified by ID
+ *
+ * The filename is URL encoded to protect Unicode chars
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function mediaFN($id){
+ global $conf;
+ $id = cleanID($id);
+ $id = str_replace(':','/',$id);
+ $fn = $conf['mediadir'].'/'.utf8_encodeFN($id);
+ return $fn;
+}
+
+/**
+ * Returns the full filepath to a localized textfile if local
+ * version isn't found the english one is returned
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function localeFN($id){
+ global $conf;
+ $file = DOKU_INC.'inc/lang/'.$conf['lang'].'/'.$id.'.txt';
+ if(!@file_exists($file)){
+ //fall back to english
+ $file = DOKU_INC.'inc/lang/en/'.$id.'.txt';
+ }
+ return $file;
+}
+
+/**
+ * Resolve relative paths in IDs
+ *
+ * Do not call directly use resolve_mediaid or resolve_pageid
+ * instead
+ *
+ * Partyly based on a cleanPath function found at
+ * http://www.php.net/manual/en/function.realpath.php#57016
+ *
+ * @author <bart at mediawave dot nl>
+ */
+function resolve_id($ns,$id,$clean=true){
+ global $conf;
+
+ // some pre cleaning for useslash:
+ if($conf['useslash']) $id = str_replace('/',':',$id);
+
+ // if the id starts with a dot we need to handle the
+ // relative stuff
+ if($id{0} == '.'){
+ // normalize initial dots without a colon
+ $id = preg_replace('/^(\.+)(?=[^:\.])/','\1:',$id);
+ // prepend the current namespace
+ $id = $ns.':'.$id;
+
+ // cleanup relatives
+ $result = array();
+ $pathA = explode(':', $id);
+ if (!$pathA[0]) $result[] = '';
+ foreach ($pathA AS $key => $dir) {
+ if ($dir == '..') {
+ if (end($result) == '..') {
+ $result[] = '..';
+ } elseif (!array_pop($result)) {
+ $result[] = '..';
+ }
+ } elseif ($dir && $dir != '.') {
+ $result[] = $dir;
+ }
+ }
+ if (!end($pathA)) $result[] = '';
+ $id = implode(':', $result);
+ }elseif($ns !== false && strpos($id,':') === false){
+ //if link contains no namespace. add current namespace (if any)
+ $id = $ns.':'.$id;
+ }
+
+ if($clean) $id = cleanID($id);
+ return $id;
+}
+
+/**
+ * Returns a full media id
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function resolve_mediaid($ns,&$page,&$exists){
+ $page = resolve_id($ns,$page);
+ $file = mediaFN($page);
+ $exists = @file_exists($file);
+}
+
+/**
+ * Returns a full page id
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function resolve_pageid($ns,&$page,&$exists){
+ global $conf;
+ $exists = false;
+
+ //keep hashlink if exists then clean both parts
+ if (strpos($page,'#')) {
+ list($page,$hash) = explode('#',$page,2);
+ } else {
+ $hash = '';
+ }
+ $hash = cleanID($hash);
+ $page = resolve_id($ns,$page,false); // resolve but don't clean, yet
+
+ // get filename (calls clean itself)
+ $file = wikiFN($page);
+
+ // if ends with colon or slash we have a namespace link
+ if(substr($page,-1) == ':' || ($conf['useslash'] && substr($page,-1) == '/')){
+ if(page_exists($page.$conf['start'])){
+ // start page inside namespace
+ $page = $page.$conf['start'];
+ $exists = true;
+ }elseif(page_exists($page.noNS(cleanID($page)))){
+ // page named like the NS inside the NS
+ $page = $page.noNS(cleanID($page));
+ $exists = true;
+ }elseif(page_exists($page)){
+ // page like namespace exists
+ $page = $page;
+ $exists = true;
+ }else{
+ // fall back to default
+ $page = $page.$conf['start'];
+ }
+ }else{
+ //check alternative plural/nonplural form
+ if(!@file_exists($file)){
+ if( $conf['autoplural'] ){
+ if(substr($page,-1) == 's'){
+ $try = substr($page,0,-1);
+ }else{
+ $try = $page.'s';
+ }
+ if(page_exists($try)){
+ $page = $try;
+ $exists = true;
+ }
+ }
+ }else{
+ $exists = true;
+ }
+ }
+
+ // now make sure we have a clean page
+ $page = cleanID($page);
+
+ //add hash if any
+ if(!empty($hash)) $page .= '#'.$hash;
+}
+
+/**
+ * Returns the name of a cachefile from given data
+ *
+ * The needed directory is created by this function!
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ *
+ * @param string $data This data is used to create a unique md5 name
+ * @param string $ext This is appended to the filename if given
+ * @return string The filename of the cachefile
+ */
+function getCacheName($data,$ext=''){
+ global $conf;
+ $md5 = md5($data);
+ $file = $conf['cachedir'].'/'.$md5{0}.'/'.$md5.$ext;
+ io_makeFileDir($file);
+ return $file;
+}
+
+/**
+ * Checks a pageid against $conf['hidepages']
+ *
+ * @author Andreas Gohr <gohr@cosmocode.de>
+ */
+function isHiddenPage($id){
+ global $conf;
+ global $ACT;
+ if(empty($conf['hidepages'])) return false;
+ if($ACT == 'admin') return false;
+
+ if(preg_match('/'.$conf['hidepages'].'/ui',':'.$id)){
+ return true;
+ }
+ return false;
+}
+
+/**
+ * Reverse of isHiddenPage
+ *
+ * @author Andreas Gohr <gohr@cosmocode.de>
+ */
+function isVisiblePage($id){
+ return !isHiddenPage($id);
+}
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/parser/code.php b/mod/dokuwiki/vendors/dokuwiki/inc/parser/code.php
new file mode 100644
index 000000000..4d94dcf4e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/parser/code.php
@@ -0,0 +1,58 @@
+<?php
+/**
+ * A simple renderer that allows downloading of code and file snippets
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+if(!defined('DOKU_INC')) die('meh.');
+require_once DOKU_INC . 'inc/parser/renderer.php';
+
+class Doku_Renderer_code extends Doku_Renderer {
+ var $_codeblock=0;
+
+ /**
+ * Send the wanted code block to the browser
+ *
+ * When the correct block was found it exits the script.
+ */
+ function code($text, $language = NULL, $filename='' ) {
+ if(!$language) $language = 'txt';
+ if(!$filename) $filename = 'snippet.'.$language;
+ $filename = basename($filename);
+
+ if($this->_codeblock == $_REQUEST['codeblock']){
+ header("Content-Type: text/plain; charset=utf-8");
+ header("Content-Disposition: attachment; filename=$filename");
+ header("X-Robots-Tag: noindex");
+ echo trim($text,"\r\n");
+ exit;
+ }
+
+ $this->_codeblock++;
+ }
+
+ /**
+ * Wraps around code()
+ */
+ function file($text, $language = NULL, $filename='') {
+ $this->code($text, $language, $filename);
+ }
+
+ /**
+ * This should never be reached, if it is send a 404
+ */
+ function document_end() {
+ header("HTTP/1.0 404 Not Found");
+ echo '404 - Not found';
+ exit;
+ }
+
+ /**
+ * Return the format of the renderer
+ *
+ * @returns string 'code'
+ */
+ function getFormat(){
+ return 'code';
+ }
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/parser/handler.php b/mod/dokuwiki/vendors/dokuwiki/inc/parser/handler.php
new file mode 100644
index 000000000..9fe5866ad
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/parser/handler.php
@@ -0,0 +1,1697 @@
+<?php
+if(!defined('DOKU_INC')) die('meh.');
+if (!defined('DOKU_PARSER_EOL')) define('DOKU_PARSER_EOL',"\n"); // add this to make handling test cases simpler
+
+class Doku_Handler {
+
+ var $Renderer = NULL;
+
+ var $CallWriter = NULL;
+
+ var $calls = array();
+
+ var $status = array(
+ 'section' => false,
+ 'section_edit_start' => -1,
+ 'section_edit_level' => 1,
+ 'section_edit_title' => ''
+ );
+
+ var $rewriteBlocks = true;
+
+ function Doku_Handler() {
+ $this->CallWriter = & new Doku_Handler_CallWriter($this);
+ }
+
+ function _addCall($handler, $args, $pos) {
+ $call = array($handler,$args, $pos);
+ $this->CallWriter->writeCall($call);
+ }
+
+ function addPluginCall($plugin, $args, $state, $pos, $match) {
+ $call = array('plugin',array($plugin, $args, $state, $match), $pos);
+ $this->CallWriter->writeCall($call);
+ }
+
+ function _finalize(){
+
+ $this->CallWriter->finalise();
+
+ if ( $this->status['section'] ) {
+ $last_call = end($this->calls);
+ array_push($this->calls,array('section_close',array(), $last_call[2]));
+ if ($this->status['section_edit_start']>1) {
+ // ignore last edit section if there is only one header
+ array_push($this->calls,array('section_edit',array($this->status['section_edit_start'], 0, $this->status['section_edit_level'], $this->status['section_edit_title']), $last_call[2]));
+ }
+ }
+
+ if ( $this->rewriteBlocks ) {
+ $B = & new Doku_Handler_Block();
+ $this->calls = $B->process($this->calls);
+ }
+
+ trigger_event('PARSER_HANDLER_DONE',$this);
+
+ array_unshift($this->calls,array('document_start',array(),0));
+ $last_call = end($this->calls);
+ array_push($this->calls,array('document_end',array(),$last_call[2]));
+ }
+
+ function fetch() {
+ $call = each($this->calls);
+ if ( $call ) {
+ return $call['value'];
+ }
+ return false;
+ }
+
+
+ /**
+ * Special plugin handler
+ *
+ * This handler is called for all modes starting with 'plugin_'.
+ * An additional parameter with the plugin name is passed
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function plugin($match, $state, $pos, $pluginname){
+ $data = array($match);
+ $plugin =& plugin_load('syntax',$pluginname);
+ if($plugin != null){
+ $data = $plugin->handle($match, $state, $pos, $this);
+ }
+ if ($data !== false) {
+ $this->addPluginCall($pluginname,$data,$state,$pos,$match);
+ }
+ return true;
+ }
+
+ function base($match, $state, $pos) {
+ switch ( $state ) {
+ case DOKU_LEXER_UNMATCHED:
+ $this->_addCall('cdata',array($match), $pos);
+ return true;
+ break;
+ }
+ }
+
+ function header($match, $state, $pos) {
+ global $conf;
+
+ // get level and title
+ $title = trim($match);
+ $level = 7 - strspn($title,'=');
+ if($level < 1) $level = 1;
+ $title = trim($title,'=');
+ $title = trim($title);
+
+ if ($this->status['section']) $this->_addCall('section_close',array(),$pos);
+
+ if ($level<=$conf['maxseclevel']) {
+ $this->_addCall('section_edit',array($this->status['section_edit_start'], $pos-1, $this->status['section_edit_level'], $this->status['section_edit_title']), $pos);
+ $this->status['section_edit_start'] = $pos;
+ $this->status['section_edit_level'] = $level;
+ $this->status['section_edit_title'] = $title;
+ }
+
+ $this->_addCall('header',array($title,$level,$pos), $pos);
+
+ $this->_addCall('section_open',array($level),$pos);
+ $this->status['section'] = true;
+ return true;
+ }
+
+ function notoc($match, $state, $pos) {
+ $this->_addCall('notoc',array(),$pos);
+ return true;
+ }
+
+ function nocache($match, $state, $pos) {
+ $this->_addCall('nocache',array(),$pos);
+ return true;
+ }
+
+ function linebreak($match, $state, $pos) {
+ $this->_addCall('linebreak',array(),$pos);
+ return true;
+ }
+
+ function eol($match, $state, $pos) {
+ $this->_addCall('eol',array(),$pos);
+ return true;
+ }
+
+ function hr($match, $state, $pos) {
+ $this->_addCall('hr',array(),$pos);
+ return true;
+ }
+
+ function _nestingTag($match, $state, $pos, $name) {
+ switch ( $state ) {
+ case DOKU_LEXER_ENTER:
+ $this->_addCall($name.'_open', array(), $pos);
+ break;
+ case DOKU_LEXER_EXIT:
+ $this->_addCall($name.'_close', array(), $pos);
+ break;
+ case DOKU_LEXER_UNMATCHED:
+ $this->_addCall('cdata',array($match), $pos);
+ break;
+ }
+ }
+
+ function strong($match, $state, $pos) {
+ $this->_nestingTag($match, $state, $pos, 'strong');
+ return true;
+ }
+
+ function emphasis($match, $state, $pos) {
+ $this->_nestingTag($match, $state, $pos, 'emphasis');
+ return true;
+ }
+
+ function underline($match, $state, $pos) {
+ $this->_nestingTag($match, $state, $pos, 'underline');
+ return true;
+ }
+
+ function monospace($match, $state, $pos) {
+ $this->_nestingTag($match, $state, $pos, 'monospace');
+ return true;
+ }
+
+ function subscript($match, $state, $pos) {
+ $this->_nestingTag($match, $state, $pos, 'subscript');
+ return true;
+ }
+
+ function superscript($match, $state, $pos) {
+ $this->_nestingTag($match, $state, $pos, 'superscript');
+ return true;
+ }
+
+ function deleted($match, $state, $pos) {
+ $this->_nestingTag($match, $state, $pos, 'deleted');
+ return true;
+ }
+
+
+ function footnote($match, $state, $pos) {
+// $this->_nestingTag($match, $state, $pos, 'footnote');
+ if (!isset($this->_footnote)) $this->_footnote = false;
+
+ switch ( $state ) {
+ case DOKU_LEXER_ENTER:
+ // footnotes can not be nested - however due to limitations in lexer it can't be prevented
+ // we will still enter a new footnote mode, we just do nothing
+ if ($this->_footnote) {
+ $this->_addCall('cdata',array($match), $pos);
+ break;
+ }
+
+ $this->_footnote = true;
+
+ $ReWriter = & new Doku_Handler_Nest($this->CallWriter,'footnote_close');
+ $this->CallWriter = & $ReWriter;
+ $this->_addCall('footnote_open', array(), $pos);
+ break;
+ case DOKU_LEXER_EXIT:
+ // check whether we have already exitted the footnote mode, can happen if the modes were nested
+ if (!$this->_footnote) {
+ $this->_addCall('cdata',array($match), $pos);
+ break;
+ }
+
+ $this->_footnote = false;
+
+ $this->_addCall('footnote_close', array(), $pos);
+ $this->CallWriter->process();
+ $ReWriter = & $this->CallWriter;
+ $this->CallWriter = & $ReWriter->CallWriter;
+ break;
+ case DOKU_LEXER_UNMATCHED:
+ $this->_addCall('cdata', array($match), $pos);
+ break;
+ }
+ return true;
+ }
+
+ function listblock($match, $state, $pos) {
+ switch ( $state ) {
+ case DOKU_LEXER_ENTER:
+ $ReWriter = & new Doku_Handler_List($this->CallWriter);
+ $this->CallWriter = & $ReWriter;
+ $this->_addCall('list_open', array($match), $pos);
+ break;
+ case DOKU_LEXER_EXIT:
+ $this->_addCall('list_close', array(), $pos);
+ $this->CallWriter->process();
+ $ReWriter = & $this->CallWriter;
+ $this->CallWriter = & $ReWriter->CallWriter;
+ break;
+ case DOKU_LEXER_MATCHED:
+ $this->_addCall('list_item', array($match), $pos);
+ break;
+ case DOKU_LEXER_UNMATCHED:
+ $this->_addCall('cdata', array($match), $pos);
+ break;
+ }
+ return true;
+ }
+
+ function unformatted($match, $state, $pos) {
+ if ( $state == DOKU_LEXER_UNMATCHED ) {
+ $this->_addCall('unformatted',array($match), $pos);
+ }
+ return true;
+ }
+
+ function php($match, $state, $pos) {
+ global $conf;
+ if ( $state == DOKU_LEXER_UNMATCHED ) {
+ $this->_addCall('php',array($match), $pos);
+ }
+ return true;
+ }
+
+ function phpblock($match, $state, $pos) {
+ global $conf;
+ if ( $state == DOKU_LEXER_UNMATCHED ) {
+ $this->_addCall('phpblock',array($match), $pos);
+ }
+ return true;
+ }
+
+ function html($match, $state, $pos) {
+ global $conf;
+ if ( $state == DOKU_LEXER_UNMATCHED ) {
+ $this->_addCall('html',array($match), $pos);
+ }
+ return true;
+ }
+
+ function htmlblock($match, $state, $pos) {
+ global $conf;
+ if ( $state == DOKU_LEXER_UNMATCHED ) {
+ $this->_addCall('htmlblock',array($match), $pos);
+ }
+ return true;
+ }
+
+ function preformatted($match, $state, $pos) {
+ switch ( $state ) {
+ case DOKU_LEXER_ENTER:
+ $ReWriter = & new Doku_Handler_Preformatted($this->CallWriter);
+ $this->CallWriter = & $ReWriter;
+ $this->_addCall('preformatted_start',array(), $pos);
+ break;
+ case DOKU_LEXER_EXIT:
+ $this->_addCall('preformatted_end',array(), $pos);
+ $this->CallWriter->process();
+ $ReWriter = & $this->CallWriter;
+ $this->CallWriter = & $ReWriter->CallWriter;
+ break;
+ case DOKU_LEXER_MATCHED:
+ $this->_addCall('preformatted_newline',array(), $pos);
+ break;
+ case DOKU_LEXER_UNMATCHED:
+ $this->_addCall('preformatted_content',array($match), $pos);
+ break;
+ }
+
+ return true;
+ }
+
+ function quote($match, $state, $pos) {
+
+ switch ( $state ) {
+
+ case DOKU_LEXER_ENTER:
+ $ReWriter = & new Doku_Handler_Quote($this->CallWriter);
+ $this->CallWriter = & $ReWriter;
+ $this->_addCall('quote_start',array($match), $pos);
+ break;
+
+ case DOKU_LEXER_EXIT:
+ $this->_addCall('quote_end',array(), $pos);
+ $this->CallWriter->process();
+ $ReWriter = & $this->CallWriter;
+ $this->CallWriter = & $ReWriter->CallWriter;
+ break;
+
+ case DOKU_LEXER_MATCHED:
+ $this->_addCall('quote_newline',array($match), $pos);
+ break;
+
+ case DOKU_LEXER_UNMATCHED:
+ $this->_addCall('cdata',array($match), $pos);
+ break;
+
+ }
+
+ return true;
+ }
+
+ function file($match, $state, $pos) {
+ return $this->code($match, $state, $pos, 'file');
+ }
+
+ function code($match, $state, $pos, $type='code') {
+ if ( $state == DOKU_LEXER_UNMATCHED ) {
+ $matches = explode('>',$match,2);
+ $matches[0] = trim($matches[0]);
+
+ list($language,$filename) = explode(' ',$matches[0],2);
+ $language = trim($language);
+ $filename = trim($filename);
+ if ( $language == '' ) $language = null;
+ if ( $language == '-' ) $language = null;
+ if ( $filename == '' ) $filename = null;
+ # We shortcut html here.
+ if($language == 'html') $language = 'html4strict';
+ $this->_addCall(
+ $type,
+ array($matches[1],$language,$filename),
+ $pos
+ );
+ }
+ return true;
+ }
+
+ function acronym($match, $state, $pos) {
+ $this->_addCall('acronym',array($match), $pos);
+ return true;
+ }
+
+ function smiley($match, $state, $pos) {
+ $this->_addCall('smiley',array($match), $pos);
+ return true;
+ }
+
+ function wordblock($match, $state, $pos) {
+ $this->_addCall('wordblock',array($match), $pos);
+ return true;
+ }
+
+ function entity($match, $state, $pos) {
+ $this->_addCall('entity',array($match), $pos);
+ return true;
+ }
+
+ function multiplyentity($match, $state, $pos) {
+ preg_match_all('/\d+/',$match,$matches);
+ $this->_addCall('multiplyentity',array($matches[0][0],$matches[0][1]), $pos);
+ return true;
+ }
+
+ function singlequoteopening($match, $state, $pos) {
+ $this->_addCall('singlequoteopening',array(), $pos);
+ return true;
+ }
+
+ function singlequoteclosing($match, $state, $pos) {
+ $this->_addCall('singlequoteclosing',array(), $pos);
+ return true;
+ }
+
+ function apostrophe($match, $state, $pos) {
+ $this->_addCall('apostrophe',array(), $pos);
+ return true;
+ }
+
+ function doublequoteopening($match, $state, $pos) {
+ $this->_addCall('doublequoteopening',array(), $pos);
+ return true;
+ }
+
+ function doublequoteclosing($match, $state, $pos) {
+ $this->_addCall('doublequoteclosing',array(), $pos);
+ return true;
+ }
+
+ function camelcaselink($match, $state, $pos) {
+ $this->_addCall('camelcaselink',array($match), $pos);
+ return true;
+ }
+
+ /*
+ */
+ function internallink($match, $state, $pos) {
+ // Strip the opening and closing markup
+ $link = preg_replace(array('/^\[\[/','/\]\]$/u'),'',$match);
+
+ // Split title from URL
+ $link = explode('|',$link,2);
+ if ( !isset($link[1]) ) {
+ $link[1] = NULL;
+ } else if ( preg_match('/^\{\{[^\}]+\}\}$/',$link[1]) ) {
+ // If the title is an image, convert it to an array containing the image details
+ $link[1] = Doku_Handler_Parse_Media($link[1]);
+ }
+ $link[0] = trim($link[0]);
+
+ //decide which kind of link it is
+
+ if ( preg_match('/^[a-zA-Z0-9\.]+>{1}.*$/u',$link[0]) ) {
+ // Interwiki
+ $interwiki = explode('>',$link[0],2);
+ $this->_addCall(
+ 'interwikilink',
+ array($link[0],$link[1],strtolower($interwiki[0]),$interwiki[1]),
+ $pos
+ );
+ }elseif ( preg_match('/^\\\\\\\\[\w.:?\-;,]+?\\\\/u',$link[0]) ) {
+ // Windows Share
+ $this->_addCall(
+ 'windowssharelink',
+ array($link[0],$link[1]),
+ $pos
+ );
+ }elseif ( preg_match('#^([a-z0-9\-\.+]+?)://#i',$link[0]) ) {
+ // external link (accepts all protocols)
+ $this->_addCall(
+ 'externallink',
+ array($link[0],$link[1]),
+ $pos
+ );
+ }elseif ( preg_match('<'.PREG_PATTERN_VALID_EMAIL.'>',$link[0]) ) {
+ // E-Mail (pattern above is defined in inc/mail.php)
+ $this->_addCall(
+ 'emaillink',
+ array($link[0],$link[1]),
+ $pos
+ );
+ }elseif ( preg_match('!^#.+!',$link[0]) ){
+ // local link
+ $this->_addCall(
+ 'locallink',
+ array(substr($link[0],1),$link[1]),
+ $pos
+ );
+ }else{
+ // internal link
+ $this->_addCall(
+ 'internallink',
+ array($link[0],$link[1]),
+ $pos
+ );
+ }
+
+ return true;
+ }
+
+ function filelink($match, $state, $pos) {
+ $this->_addCall('filelink',array($match, NULL), $pos);
+ return true;
+ }
+
+ function windowssharelink($match, $state, $pos) {
+ $this->_addCall('windowssharelink',array($match, NULL), $pos);
+ return true;
+ }
+
+ function media($match, $state, $pos) {
+ $p = Doku_Handler_Parse_Media($match);
+
+ $this->_addCall(
+ $p['type'],
+ array($p['src'], $p['title'], $p['align'], $p['width'],
+ $p['height'], $p['cache'], $p['linking']),
+ $pos
+ );
+ return true;
+ }
+
+ function rss($match, $state, $pos) {
+ $link = preg_replace(array('/^\{\{rss>/','/\}\}$/'),'',$match);
+
+ // get params
+ list($link,$params) = explode(' ',$link,2);
+
+ $p = array();
+ if(preg_match('/\b(\d+)\b/',$params,$match)){
+ $p['max'] = $match[1];
+ }else{
+ $p['max'] = 8;
+ }
+ $p['reverse'] = (preg_match('/rev/',$params));
+ $p['author'] = (preg_match('/\b(by|author)/',$params));
+ $p['date'] = (preg_match('/\b(date)/',$params));
+ $p['details'] = (preg_match('/\b(desc|detail)/',$params));
+
+ if (preg_match('/\b(\d+)([dhm])\b/',$params,$match)) {
+ $period = array('d' => 86400, 'h' => 3600, 'm' => 60);
+ $p['refresh'] = max(600,$match[1]*$period[$match[2]]); // n * period in seconds, minimum 10 minutes
+ } else {
+ $p['refresh'] = 14400; // default to 4 hours
+ }
+
+ $this->_addCall('rss',array($link,$p),$pos);
+ return true;
+ }
+
+ function externallink($match, $state, $pos) {
+ $url = $match;
+ $title = null;
+
+ // add protocol on simple short URLs
+ if(substr($url,0,3) == 'ftp' && (substr($url,0,6) != 'ftp://')){
+ $title = $url;
+ $url = 'ftp://'.$url;
+ }
+ if(substr($url,0,3) == 'www' && (substr($url,0,7) != 'http://')){
+ $title = $url;
+ $url = 'http://'.$url;
+ }
+
+ $this->_addCall('externallink',array($url, $title), $pos);
+ return true;
+ }
+
+ function emaillink($match, $state, $pos) {
+ $email = preg_replace(array('/^</','/>$/'),'',$match);
+ $this->_addCall('emaillink',array($email, NULL), $pos);
+ return true;
+ }
+
+ function table($match, $state, $pos) {
+ switch ( $state ) {
+
+ case DOKU_LEXER_ENTER:
+
+ $ReWriter = & new Doku_Handler_Table($this->CallWriter);
+ $this->CallWriter = & $ReWriter;
+
+ $this->_addCall('table_start', array(), $pos);
+ if ( trim($match) == '^' ) {
+ $this->_addCall('tableheader', array(), $pos);
+ } else {
+ $this->_addCall('tablecell', array(), $pos);
+ }
+ break;
+
+ case DOKU_LEXER_EXIT:
+ $this->_addCall('table_end', array(), $pos);
+ $this->CallWriter->process();
+ $ReWriter = & $this->CallWriter;
+ $this->CallWriter = & $ReWriter->CallWriter;
+ break;
+
+ case DOKU_LEXER_UNMATCHED:
+ if ( trim($match) != '' ) {
+ $this->_addCall('cdata',array($match), $pos);
+ }
+ break;
+
+ case DOKU_LEXER_MATCHED:
+ if ( $match == ' ' ){
+ $this->_addCall('cdata', array($match), $pos);
+ } else if ( preg_match('/:::/',$match) ) {
+ $this->_addCall('rowspan', array($match), $pos);
+ } else if ( preg_match('/\t+/',$match) ) {
+ $this->_addCall('table_align', array($match), $pos);
+ } else if ( preg_match('/ {2,}/',$match) ) {
+ $this->_addCall('table_align', array($match), $pos);
+ } else if ( $match == "\n|" ) {
+ $this->_addCall('table_row', array(), $pos);
+ $this->_addCall('tablecell', array(), $pos);
+ } else if ( $match == "\n^" ) {
+ $this->_addCall('table_row', array(), $pos);
+ $this->_addCall('tableheader', array(), $pos);
+ } else if ( $match == '|' ) {
+ $this->_addCall('tablecell', array(), $pos);
+ } else if ( $match == '^' ) {
+ $this->_addCall('tableheader', array(), $pos);
+ }
+ break;
+ }
+ return true;
+ }
+}
+
+//------------------------------------------------------------------------
+function Doku_Handler_Parse_Media($match) {
+
+ // Strip the opening and closing markup
+ $link = preg_replace(array('/^\{\{/','/\}\}$/u'),'',$match);
+
+ // Split title from URL
+ $link = explode('|',$link,2);
+
+
+ // Check alignment
+ $ralign = (bool)preg_match('/^ /',$link[0]);
+ $lalign = (bool)preg_match('/ $/',$link[0]);
+
+ // Logic = what's that ;)...
+ if ( $lalign & $ralign ) {
+ $align = 'center';
+ } else if ( $ralign ) {
+ $align = 'right';
+ } else if ( $lalign ) {
+ $align = 'left';
+ } else {
+ $align = NULL;
+ }
+
+ // The title...
+ if ( !isset($link[1]) ) {
+ $link[1] = NULL;
+ }
+
+ //remove aligning spaces
+ $link[0] = trim($link[0]);
+
+ //split into src and parameters (using the very last questionmark)
+ $pos = strrpos($link[0], '?');
+ if($pos !== false){
+ $src = substr($link[0],0,$pos);
+ $param = substr($link[0],$pos+1);
+ }else{
+ $src = $link[0];
+ $param = '';
+ }
+
+ //parse width and height
+ if(preg_match('#(\d+)(x(\d+))?#i',$param,$size)){
+ ($size[1]) ? $w = $size[1] : $w = NULL;
+ ($size[3]) ? $h = $size[3] : $h = NULL;
+ } else {
+ $w = NULL;
+ $h = NULL;
+ }
+
+ //get linking command
+ if(preg_match('/nolink/i',$param)){
+ $linking = 'nolink';
+ }else if(preg_match('/direct/i',$param)){
+ $linking = 'direct';
+ }else if(preg_match('/linkonly/i',$param)){
+ $linking = 'linkonly';
+ }else{
+ $linking = 'details';
+ }
+
+ //get caching command
+ if (preg_match('/(nocache|recache)/i',$param,$cachemode)){
+ $cache = $cachemode[1];
+ }else{
+ $cache = 'cache';
+ }
+
+ // Check whether this is a local or remote image
+ if ( preg_match('#^(https?|ftp)#i',$src) ) {
+ $call = 'externalmedia';
+ } else {
+ $call = 'internalmedia';
+ }
+
+ $params = array(
+ 'type'=>$call,
+ 'src'=>$src,
+ 'title'=>$link[1],
+ 'align'=>$align,
+ 'width'=>$w,
+ 'height'=>$h,
+ 'cache'=>$cache,
+ 'linking'=>$linking,
+ );
+
+ return $params;
+}
+
+//------------------------------------------------------------------------
+class Doku_Handler_CallWriter {
+
+ var $Handler;
+
+ function Doku_Handler_CallWriter(& $Handler) {
+ $this->Handler = & $Handler;
+ }
+
+ function writeCall($call) {
+ $this->Handler->calls[] = $call;
+ }
+
+ function writeCalls($calls) {
+ $this->Handler->calls = array_merge($this->Handler->calls, $calls);
+ }
+
+ // function is required, but since this call writer is first/highest in
+ // the chain it is not required to do anything
+ function finalise() {
+ }
+}
+
+//------------------------------------------------------------------------
+/**
+ * Generic call writer class to handle nesting of rendering instructions
+ * within a render instruction. Also see nest() method of renderer base class
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ */
+class Doku_Handler_Nest {
+
+ var $CallWriter;
+ var $calls = array();
+
+ var $closingInstruction;
+
+ /**
+ * constructor
+ *
+ * @param object $CallWriter the renderers current call writer
+ * @param string $close closing instruction name, this is required to properly terminate the
+ * syntax mode if the document ends without a closing pattern
+ */
+ function Doku_Handler_Nest(& $CallWriter, $close="nest_close") {
+ $this->CallWriter = & $CallWriter;
+
+ $this->closingInstruction = $close;
+ }
+
+ function writeCall($call) {
+ $this->calls[] = $call;
+ }
+
+ function writeCalls($calls) {
+ $this->calls = array_merge($this->calls, $calls);
+ }
+
+ function finalise() {
+ $last_call = end($this->calls);
+ $this->writeCall(array($this->closingInstruction,array(), $last_call[2]));
+
+ $this->process();
+ $this->CallWriter->finalise();
+ }
+
+ function process() {
+ // merge consecutive cdata
+ $unmerged_calls = $this->calls;
+ $this->calls = array();
+
+ foreach ($unmerged_calls as $call) $this->addCall($call);
+
+ $first_call = reset($this->calls);
+ $this->CallWriter->writeCall(array("nest", array($this->calls), $first_call[2]));
+ }
+
+ function addCall($call) {
+ $key = count($this->calls);
+ if ($key and ($call[0] == 'cdata') and ($this->calls[$key-1][0] == 'cdata')) {
+ $this->calls[$key-1][1][0] .= $call[1][0];
+ } else if ($call[0] == 'eol') {
+ // do nothing (eol shouldn't be allowed, to counter preformatted fix in #1652 & #1699)
+ } else {
+ $this->calls[] = $call;
+ }
+ }
+}
+
+class Doku_Handler_List {
+
+ var $CallWriter;
+
+ var $calls = array();
+ var $listCalls = array();
+ var $listStack = array();
+
+ function Doku_Handler_List(& $CallWriter) {
+ $this->CallWriter = & $CallWriter;
+ }
+
+ function writeCall($call) {
+ $this->calls[] = $call;
+ }
+
+ // Probably not needed but just in case...
+ function writeCalls($calls) {
+ $this->calls = array_merge($this->calls, $calls);
+# $this->CallWriter->writeCalls($this->calls);
+ }
+
+ function finalise() {
+ $last_call = end($this->calls);
+ $this->writeCall(array('list_close',array(), $last_call[2]));
+
+ $this->process();
+ $this->CallWriter->finalise();
+ }
+
+ //------------------------------------------------------------------------
+ function process() {
+
+ foreach ( $this->calls as $call ) {
+ switch ($call[0]) {
+ case 'list_item':
+ $this->listOpen($call);
+ break;
+ case 'list_open':
+ $this->listStart($call);
+ break;
+ case 'list_close':
+ $this->listEnd($call);
+ break;
+ default:
+ $this->listContent($call);
+ break;
+ }
+ }
+
+ $this->CallWriter->writeCalls($this->listCalls);
+ }
+
+ //------------------------------------------------------------------------
+ function listStart($call) {
+ $depth = $this->interpretSyntax($call[1][0], $listType);
+
+ $this->initialDepth = $depth;
+ $this->listStack[] = array($listType, $depth);
+
+ $this->listCalls[] = array('list'.$listType.'_open',array(),$call[2]);
+ $this->listCalls[] = array('listitem_open',array(1),$call[2]);
+ $this->listCalls[] = array('listcontent_open',array(),$call[2]);
+ }
+
+ //------------------------------------------------------------------------
+ function listEnd($call) {
+ $closeContent = true;
+
+ while ( $list = array_pop($this->listStack) ) {
+ if ( $closeContent ) {
+ $this->listCalls[] = array('listcontent_close',array(),$call[2]);
+ $closeContent = false;
+ }
+ $this->listCalls[] = array('listitem_close',array(),$call[2]);
+ $this->listCalls[] = array('list'.$list[0].'_close', array(), $call[2]);
+ }
+ }
+
+ //------------------------------------------------------------------------
+ function listOpen($call) {
+ $depth = $this->interpretSyntax($call[1][0], $listType);
+ $end = end($this->listStack);
+
+ // Not allowed to be shallower than initialDepth
+ if ( $depth < $this->initialDepth ) {
+ $depth = $this->initialDepth;
+ }
+
+ //------------------------------------------------------------------------
+ if ( $depth == $end[1] ) {
+
+ // Just another item in the list...
+ if ( $listType == $end[0] ) {
+ $this->listCalls[] = array('listcontent_close',array(),$call[2]);
+ $this->listCalls[] = array('listitem_close',array(),$call[2]);
+ $this->listCalls[] = array('listitem_open',array($depth-1),$call[2]);
+ $this->listCalls[] = array('listcontent_open',array(),$call[2]);
+
+ // Switched list type...
+ } else {
+
+ $this->listCalls[] = array('listcontent_close',array(),$call[2]);
+ $this->listCalls[] = array('listitem_close',array(),$call[2]);
+ $this->listCalls[] = array('list'.$end[0].'_close', array(), $call[2]);
+ $this->listCalls[] = array('list'.$listType.'_open', array(), $call[2]);
+ $this->listCalls[] = array('listitem_open', array($depth-1), $call[2]);
+ $this->listCalls[] = array('listcontent_open',array(),$call[2]);
+
+ array_pop($this->listStack);
+ $this->listStack[] = array($listType, $depth);
+ }
+
+ //------------------------------------------------------------------------
+ // Getting deeper...
+ } else if ( $depth > $end[1] ) {
+
+ $this->listCalls[] = array('listcontent_close',array(),$call[2]);
+ $this->listCalls[] = array('list'.$listType.'_open', array(), $call[2]);
+ $this->listCalls[] = array('listitem_open', array($depth-1), $call[2]);
+ $this->listCalls[] = array('listcontent_open',array(),$call[2]);
+
+ $this->listStack[] = array($listType, $depth);
+
+ //------------------------------------------------------------------------
+ // Getting shallower ( $depth < $end[1] )
+ } else {
+ $this->listCalls[] = array('listcontent_close',array(),$call[2]);
+ $this->listCalls[] = array('listitem_close',array(),$call[2]);
+ $this->listCalls[] = array('list'.$end[0].'_close',array(),$call[2]);
+
+ // Throw away the end - done
+ array_pop($this->listStack);
+
+ while (1) {
+ $end = end($this->listStack);
+
+ if ( $end[1] <= $depth ) {
+
+ // Normalize depths
+ $depth = $end[1];
+
+ $this->listCalls[] = array('listitem_close',array(),$call[2]);
+
+ if ( $end[0] == $listType ) {
+ $this->listCalls[] = array('listitem_open',array($depth-1),$call[2]);
+ $this->listCalls[] = array('listcontent_open',array(),$call[2]);
+
+ } else {
+ // Switching list type...
+ $this->listCalls[] = array('list'.$end[0].'_close', array(), $call[2]);
+ $this->listCalls[] = array('list'.$listType.'_open', array(), $call[2]);
+ $this->listCalls[] = array('listitem_open', array($depth-1), $call[2]);
+ $this->listCalls[] = array('listcontent_open',array(),$call[2]);
+
+ array_pop($this->listStack);
+ $this->listStack[] = array($listType, $depth);
+ }
+
+ break;
+
+ // Haven't dropped down far enough yet.... ( $end[1] > $depth )
+ } else {
+
+ $this->listCalls[] = array('listitem_close',array(),$call[2]);
+ $this->listCalls[] = array('list'.$end[0].'_close',array(),$call[2]);
+
+ array_pop($this->listStack);
+
+ }
+
+ }
+
+ }
+ }
+
+ //------------------------------------------------------------------------
+ function listContent($call) {
+ $this->listCalls[] = $call;
+ }
+
+ //------------------------------------------------------------------------
+ function interpretSyntax($match, & $type) {
+ if ( substr($match,-1) == '*' ) {
+ $type = 'u';
+ } else {
+ $type = 'o';
+ }
+ // Is the +1 needed? It used to be count(explode(...))
+ // but I don't think the number is seen outside this handler
+ return substr_count(str_replace("\t",' ',$match), ' ') + 1;
+ }
+}
+
+//------------------------------------------------------------------------
+class Doku_Handler_Preformatted {
+
+ var $CallWriter;
+
+ var $calls = array();
+ var $pos;
+ var $text ='';
+
+
+
+ function Doku_Handler_Preformatted(& $CallWriter) {
+ $this->CallWriter = & $CallWriter;
+ }
+
+ function writeCall($call) {
+ $this->calls[] = $call;
+ }
+
+ // Probably not needed but just in case...
+ function writeCalls($calls) {
+ $this->calls = array_merge($this->calls, $calls);
+# $this->CallWriter->writeCalls($this->calls);
+ }
+
+ function finalise() {
+ $last_call = end($this->calls);
+ $this->writeCall(array('preformatted_end',array(), $last_call[2]));
+
+ $this->process();
+ $this->CallWriter->finalise();
+ }
+
+ function process() {
+ foreach ( $this->calls as $call ) {
+ switch ($call[0]) {
+ case 'preformatted_start':
+ $this->pos = $call[2];
+ break;
+ case 'preformatted_newline':
+ $this->text .= "\n";
+ break;
+ case 'preformatted_content':
+ $this->text .= $call[1][0];
+ break;
+ case 'preformatted_end':
+ if (trim($this->text)) {
+ $this->CallWriter->writeCall(array('preformatted',array($this->text),$this->pos));
+ }
+ // see FS#1699 & FS#1652, add 'eol' instructions to ensure proper triggering of following p_open
+ $this->CallWriter->writeCall(array('eol',array(),$this->pos));
+ $this->CallWriter->writeCall(array('eol',array(),$this->pos));
+ break;
+ }
+ }
+ }
+
+}
+
+//------------------------------------------------------------------------
+class Doku_Handler_Quote {
+
+ var $CallWriter;
+
+ var $calls = array();
+
+ var $quoteCalls = array();
+
+ function Doku_Handler_Quote(& $CallWriter) {
+ $this->CallWriter = & $CallWriter;
+ }
+
+ function writeCall($call) {
+ $this->calls[] = $call;
+ }
+
+ // Probably not needed but just in case...
+ function writeCalls($calls) {
+ $this->calls = array_merge($this->calls, $calls);
+ }
+
+ function finalise() {
+ $last_call = end($this->calls);
+ $this->writeCall(array('quote_end',array(), $last_call[2]));
+
+ $this->process();
+ $this->CallWriter->finalise();
+ }
+
+ function process() {
+
+ $quoteDepth = 1;
+
+ foreach ( $this->calls as $call ) {
+ switch ($call[0]) {
+
+ case 'quote_start':
+
+ $this->quoteCalls[] = array('quote_open',array(),$call[2]);
+
+ case 'quote_newline':
+
+ $quoteLength = $this->getDepth($call[1][0]);
+
+ if ( $quoteLength > $quoteDepth ) {
+ $quoteDiff = $quoteLength - $quoteDepth;
+ for ( $i = 1; $i <= $quoteDiff; $i++ ) {
+ $this->quoteCalls[] = array('quote_open',array(),$call[2]);
+ }
+ } else if ( $quoteLength < $quoteDepth ) {
+ $quoteDiff = $quoteDepth - $quoteLength;
+ for ( $i = 1; $i <= $quoteDiff; $i++ ) {
+ $this->quoteCalls[] = array('quote_close',array(),$call[2]);
+ }
+ } else {
+ if ($call[0] != 'quote_start') $this->quoteCalls[] = array('linebreak',array(),$call[2]);
+ }
+
+ $quoteDepth = $quoteLength;
+
+ break;
+
+ case 'quote_end':
+
+ if ( $quoteDepth > 1 ) {
+ $quoteDiff = $quoteDepth - 1;
+ for ( $i = 1; $i <= $quoteDiff; $i++ ) {
+ $this->quoteCalls[] = array('quote_close',array(),$call[2]);
+ }
+ }
+
+ $this->quoteCalls[] = array('quote_close',array(),$call[2]);
+
+ $this->CallWriter->writeCalls($this->quoteCalls);
+ break;
+
+ default:
+ $this->quoteCalls[] = $call;
+ break;
+ }
+ }
+ }
+
+ function getDepth($marker) {
+ preg_match('/>{1,}/', $marker, $matches);
+ $quoteLength = strlen($matches[0]);
+ return $quoteLength;
+ }
+}
+
+//------------------------------------------------------------------------
+class Doku_Handler_Table {
+
+ var $CallWriter;
+
+ var $calls = array();
+ var $tableCalls = array();
+ var $maxCols = 0;
+ var $maxRows = 1;
+ var $currentCols = 0;
+ var $firstCell = false;
+ var $lastCellType = 'tablecell';
+
+ function Doku_Handler_Table(& $CallWriter) {
+ $this->CallWriter = & $CallWriter;
+ }
+
+ function writeCall($call) {
+ $this->calls[] = $call;
+ }
+
+ // Probably not needed but just in case...
+ function writeCalls($calls) {
+ $this->calls = array_merge($this->calls, $calls);
+ }
+
+ function finalise() {
+ $last_call = end($this->calls);
+ $this->writeCall(array('table_end',array(), $last_call[2]));
+
+ $this->process();
+ $this->CallWriter->finalise();
+ }
+
+ //------------------------------------------------------------------------
+ function process() {
+ foreach ( $this->calls as $call ) {
+ switch ( $call[0] ) {
+ case 'table_start':
+ $this->tableStart($call);
+ break;
+ case 'table_row':
+ $this->tableRowClose(array('tablerow_close',$call[1],$call[2]));
+ $this->tableRowOpen(array('tablerow_open',$call[1],$call[2]));
+ break;
+ case 'tableheader':
+ case 'tablecell':
+ $this->tableCell($call);
+ break;
+ case 'table_end':
+ $this->tableRowClose(array('tablerow_close',$call[1],$call[2]));
+ $this->tableEnd($call);
+ break;
+ default:
+ $this->tableDefault($call);
+ break;
+ }
+ }
+ $this->CallWriter->writeCalls($this->tableCalls);
+ }
+
+ function tableStart($call) {
+ $this->tableCalls[] = array('table_open',array(),$call[2]);
+ $this->tableCalls[] = array('tablerow_open',array(),$call[2]);
+ $this->firstCell = true;
+ }
+
+ function tableEnd($call) {
+ $this->tableCalls[] = array('table_close',array(),$call[2]);
+ $this->finalizeTable();
+ }
+
+ function tableRowOpen($call) {
+ $this->tableCalls[] = $call;
+ $this->currentCols = 0;
+ $this->firstCell = true;
+ $this->lastCellType = 'tablecell';
+ $this->maxRows++;
+ }
+
+ function tableRowClose($call) {
+ // Strip off final cell opening and anything after it
+ while ( $discard = array_pop($this->tableCalls ) ) {
+
+ if ( $discard[0] == 'tablecell_open' || $discard[0] == 'tableheader_open') {
+ break;
+ }
+ }
+ $this->tableCalls[] = $call;
+
+ if ( $this->currentCols > $this->maxCols ) {
+ $this->maxCols = $this->currentCols;
+ }
+ }
+
+ function tableCell($call) {
+ if ( !$this->firstCell ) {
+
+ // Increase the span
+ $lastCall = end($this->tableCalls);
+
+ // A cell call which follows an open cell means an empty cell so span
+ if ( $lastCall[0] == 'tablecell_open' || $lastCall[0] == 'tableheader_open' ) {
+ $this->tableCalls[] = array('colspan',array(),$call[2]);
+
+ }
+
+ $this->tableCalls[] = array($this->lastCellType.'_close',array(),$call[2]);
+ $this->tableCalls[] = array($call[0].'_open',array(1,NULL,1),$call[2]);
+ $this->lastCellType = $call[0];
+
+ } else {
+
+ $this->tableCalls[] = array($call[0].'_open',array(1,NULL,1),$call[2]);
+ $this->lastCellType = $call[0];
+ $this->firstCell = false;
+
+ }
+
+ $this->currentCols++;
+ }
+
+ function tableDefault($call) {
+ $this->tableCalls[] = $call;
+ }
+
+ function finalizeTable() {
+
+ // Add the max cols and rows to the table opening
+ if ( $this->tableCalls[0][0] == 'table_open' ) {
+ // Adjust to num cols not num col delimeters
+ $this->tableCalls[0][1][] = $this->maxCols - 1;
+ $this->tableCalls[0][1][] = $this->maxRows;
+ } else {
+ trigger_error('First element in table call list is not table_open');
+ }
+
+ $lastRow = 0;
+ $lastCell = 0;
+ $cellKey = array();
+ $toDelete = array();
+
+ // Look for the colspan elements and increment the colspan on the
+ // previous non-empty opening cell. Once done, delete all the cells
+ // that contain colspans
+ foreach ( $this->tableCalls as $key => $call ) {
+
+ if ( $call[0] == 'tablerow_open' ) {
+
+ $lastRow++;
+ $lastCell = 0;
+
+ } else if ( $call[0] == 'tablecell_open' || $call[0] == 'tableheader_open' ) {
+
+ $lastCell++;
+ $cellKey[$lastRow][$lastCell] = $key;
+
+ } else if ( $call[0] == 'table_align' ) {
+
+ $prev = in_array($this->tableCalls[$key-1][0], array('tablecell_open', 'tableheader_open'));
+ $next = in_array($this->tableCalls[$key+1][0], array('tablecell_close', 'tableheader_close'));
+ // If the cell is empty, align left
+ if ($prev && $next) {
+ $this->tableCalls[$key-1][1][1] = 'left';
+
+ // If the previous element was a cell open, align right
+ } elseif ($prev) {
+ $this->tableCalls[$key-1][1][1] = 'right';
+
+ // If the next element is the close of an element, align either center or left
+ } elseif ( $next) {
+ if ( $this->tableCalls[$cellKey[$lastRow][$lastCell]][1][1] == 'right' ) {
+ $this->tableCalls[$cellKey[$lastRow][$lastCell]][1][1] = 'center';
+ } else {
+ $this->tableCalls[$cellKey[$lastRow][$lastCell]][1][1] = 'left';
+ }
+
+ }
+
+ // Now convert the whitespace back to cdata
+ $this->tableCalls[$key][0] = 'cdata';
+
+ } else if ( $call[0] == 'colspan' ) {
+
+ $this->tableCalls[$key-1][1][0] = false;
+
+ for($i = $key-2; $i >= $cellKey[$lastRow][1]; $i--) {
+
+ if ( $this->tableCalls[$i][0] == 'tablecell_open' || $this->tableCalls[$i][0] == 'tableheader_open' ) {
+
+ if ( false !== $this->tableCalls[$i][1][0] ) {
+ $this->tableCalls[$i][1][0]++;
+ break;
+ }
+
+
+ }
+ }
+
+ $toDelete[] = $key-1;
+ $toDelete[] = $key;
+ $toDelete[] = $key+1;
+
+ } else if ( $call[0] == 'rowspan' ) {
+
+ if ( $this->tableCalls[$key-1][0] == 'cdata' ) {
+ // ignore rowspan if previous call was cdata (text mixed with :::) we don't have to check next call as that wont match regex
+ $this->tableCalls[$key][0] = 'cdata';
+
+ } else {
+
+ $this->tableCalls[$key-1][1][2] = false;
+
+ for($i = $lastRow-1; $i > 0; $i--) {
+
+ if ( $this->tableCalls[$cellKey[$i][$lastCell]][0] == 'tablecell_open' || $this->tableCalls[$cellKey[$i][$lastCell]][0] == 'tableheader_open' ) {
+
+ if ( false !== $this->tableCalls[$cellKey[$i][$lastCell]][1][2] ) {
+ $this->tableCalls[$cellKey[$i][$lastCell]][1][2]++;
+ break;
+ }
+
+
+ }
+ }
+
+ $toDelete[] = $key-1;
+ $toDelete[] = $key;
+ $toDelete[] = $key+1;
+ }
+ }
+ }
+
+
+ // condense cdata
+ $cnt = count($this->tableCalls);
+ for( $key = 0; $key < $cnt; $key++){
+ if($this->tableCalls[$key][0] == 'cdata'){
+ $ckey = $key;
+ $key++;
+ while($this->tableCalls[$key][0] == 'cdata'){
+ $this->tableCalls[$ckey][1][0] .= $this->tableCalls[$key][1][0];
+ $toDelete[] = $key;
+ $key++;
+ }
+ continue;
+ }
+ }
+
+ foreach ( $toDelete as $delete ) {
+ unset($this->tableCalls[$delete]);
+ }
+ $this->tableCalls = array_values($this->tableCalls);
+ }
+}
+
+
+/**
+ * Handler for paragraphs
+ *
+ * @author Harry Fuecks <hfuecks@gmail.com>
+ */
+class Doku_Handler_Block {
+
+ var $calls = array();
+
+ var $blockStack = array();
+
+ var $inParagraph = false;
+ var $atStart = true;
+ var $skipEolKey = -1;
+
+ // Blocks these should not be inside paragraphs
+ var $blockOpen = array(
+ 'header',
+ 'listu_open','listo_open','listitem_open','listcontent_open',
+ 'table_open','tablerow_open','tablecell_open','tableheader_open',
+ 'quote_open',
+ 'section_open', // Needed to prevent p_open between header and section_open
+ 'code','file','hr','preformatted','rss',
+ 'htmlblock','phpblock',
+ );
+
+ var $blockClose = array(
+ 'header',
+ 'listu_close','listo_close','listitem_close','listcontent_close',
+ 'table_close','tablerow_close','tablecell_close','tableheader_close',
+ 'quote_close',
+ 'section_close', // Needed to prevent p_close after section_close
+ 'code','file','hr','preformatted','rss',
+ 'htmlblock','phpblock',
+ );
+
+ // Stacks can contain paragraphs
+ var $stackOpen = array(
+ 'footnote_open','section_open',
+ );
+
+ var $stackClose = array(
+ 'footnote_close','section_close',
+ );
+
+
+ /**
+ * Constructor. Adds loaded syntax plugins to the block and stack
+ * arrays
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function Doku_Handler_Block(){
+ global $DOKU_PLUGINS;
+ //check if syntax plugins were loaded
+ if(empty($DOKU_PLUGINS['syntax'])) return;
+ foreach($DOKU_PLUGINS['syntax'] as $n => $p){
+ $ptype = $p->getPType();
+ if($ptype == 'block'){
+ $this->blockOpen[] = 'plugin_'.$n;
+ $this->blockClose[] = 'plugin_'.$n;
+ }elseif($ptype == 'stack'){
+ $this->stackOpen[] = 'plugin_'.$n;
+ $this->stackClose[] = 'plugin_'.$n;
+ }
+ }
+ }
+
+ /**
+ * Close a paragraph if needed
+ *
+ * This function makes sure there are no empty paragraphs on the stack
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function closeParagraph($pos){
+ // look back if there was any content - we don't want empty paragraphs
+ $content = '';
+ for($i=count($this->calls)-1; $i>=0; $i--){
+ if($this->calls[$i][0] == 'p_open'){
+ break;
+ }elseif($this->calls[$i][0] == 'cdata'){
+ $content .= $this->calls[$i][1][0];
+ }else{
+ $content = 'found markup';
+ break;
+ }
+ }
+
+ if(trim($content)==''){
+ //remove the whole paragraph
+ array_splice($this->calls,$i);
+ }else{
+ if ($this->calls[count($this->calls)-1][0] == 'section_edit') {
+ $tmp = array_pop($this->calls);
+ $this->calls[] = array('p_close',array(), $pos);
+ $this->calls[] = $tmp;
+ } else {
+ $this->calls[] = array('p_close',array(), $pos);
+ }
+ }
+
+ $this->inParagraph = false;
+ }
+
+ /**
+ * Processes the whole instruction stack to open and close paragraphs
+ *
+ * @author Harry Fuecks <hfuecks@gmail.com>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @todo This thing is really messy and should be rewritten
+ */
+ function process($calls) {
+ foreach ( $calls as $key => $call ) {
+ $cname = $call[0];
+ if($cname == 'plugin') {
+ $cname='plugin_'.$call[1][0];
+
+ $plugin = true;
+ $plugin_open = (($call[1][2] == DOKU_LEXER_ENTER) || ($call[1][2] == DOKU_LEXER_SPECIAL));
+ $plugin_close = (($call[1][2] == DOKU_LEXER_EXIT) || ($call[1][2] == DOKU_LEXER_SPECIAL));
+ } else {
+ $plugin = false;
+ }
+
+ // Process blocks which are stack like... (contain linefeeds)
+ if ( in_array($cname,$this->stackOpen ) && (!$plugin || $plugin_open) ) {
+
+ $this->calls[] = $call;
+
+ // Hack - footnotes shouldn't immediately contain a p_open
+ if ( $cname != 'footnote_open' ) {
+ $this->addToStack();
+ } else {
+ $this->addToStack(false);
+ }
+ continue;
+ }
+
+ if ( in_array($cname,$this->stackClose ) && (!$plugin || $plugin_close)) {
+
+ if ( $this->inParagraph ) {
+ $this->closeParagraph($call[2]);
+ }
+ $this->calls[] = $call;
+ $this->removeFromStack();
+ continue;
+ }
+
+ if ( !$this->atStart ) {
+
+ if ( $cname == 'eol' ) {
+
+ // Check this isn't an eol instruction to skip...
+ if ( $this->skipEolKey != $key ) {
+ // Look to see if the next instruction is an EOL
+ if ( isset($calls[$key+1]) && $calls[$key+1][0] == 'eol' ) {
+
+ if ( $this->inParagraph ) {
+ //$this->calls[] = array('p_close',array(), $call[2]);
+ $this->closeParagraph($call[2]);
+ }
+
+ $this->calls[] = array('p_open',array(), $call[2]);
+ $this->inParagraph = true;
+
+
+ // Mark the next instruction for skipping
+ $this->skipEolKey = $key+1;
+
+ }else{
+ //if this is just a single eol make a space from it
+ $this->addCall(array('cdata',array(DOKU_PARSER_EOL), $call[2]));
+ }
+ }
+
+
+ } else {
+
+ $storeCall = true;
+ if ( $this->inParagraph && (in_array($cname, $this->blockOpen) && (!$plugin || $plugin_open))) {
+ $this->closeParagraph($call[2]);
+ $this->calls[] = $call;
+ $storeCall = false;
+ }
+
+ if ( in_array($cname, $this->blockClose) && (!$plugin || $plugin_close)) {
+ if ( $this->inParagraph ) {
+ $this->closeParagraph($call[2]);
+ }
+ if ( $storeCall ) {
+ $this->calls[] = $call;
+ $storeCall = false;
+ }
+
+ // This really sucks and suggests this whole class sucks but...
+ if ( isset($calls[$key+1])) {
+ $cname_plusone = $calls[$key+1][0];
+ if ($cname_plusone == 'plugin') {
+ $cname_plusone = 'plugin'.$calls[$key+1][1][0];
+
+ // plugin test, true if plugin has a state which precludes it requiring blockOpen or blockClose
+ $plugin_plusone = true;
+ $plugin_test = ($call[$key+1][1][2] == DOKU_LEXER_MATCHED) || ($call[$key+1][1][2] == DOKU_LEXER_MATCHED);
+ } else {
+ $plugin_plusone = false;
+ }
+ if ((!in_array($cname_plusone, $this->blockOpen) && !in_array($cname_plusone, $this->blockClose)) ||
+ ($plugin_plusone && $plugin_test)
+ ) {
+
+ $this->calls[] = array('p_open',array(), $call[2]);
+ $this->inParagraph = true;
+ }
+ }
+ }
+
+ if ( $storeCall ) {
+ $this->addCall($call);
+ }
+
+ }
+
+
+ } else {
+
+ // Unless there's already a block at the start, start a paragraph
+ if ( !in_array($cname,$this->blockOpen) ) {
+ $this->calls[] = array('p_open',array(), $call[2]);
+ if ( $call[0] != 'eol' ) {
+ $this->calls[] = $call;
+ }
+ $this->atStart = false;
+ $this->inParagraph = true;
+ } else {
+ $this->addCall($call);
+ $this->atStart = false;
+ }
+
+ }
+
+ }
+
+ if ( $this->inParagraph ) {
+ if ( $cname == 'p_open' ) {
+ // Ditch the last call
+ array_pop($this->calls);
+ } else if ( !in_array($cname, $this->blockClose) ) {
+ //$this->calls[] = array('p_close',array(), $call[2]);
+ $this->closeParagraph($call[2]);
+ } else {
+ $last_call = array_pop($this->calls);
+ //$this->calls[] = array('p_close',array(), $call[2]);
+ $this->closeParagraph($call[2]);
+ $this->calls[] = $last_call;
+ }
+ }
+
+ return $this->calls;
+ }
+
+ function addToStack($newStart = true) {
+ $this->blockStack[] = array($this->atStart, $this->inParagraph);
+ $this->atStart = $newStart;
+ $this->inParagraph = false;
+ }
+
+ function removeFromStack() {
+ $state = array_pop($this->blockStack);
+ $this->atStart = $state[0];
+ $this->inParagraph = $state[1];
+ }
+
+ function addCall($call) {
+ $key = count($this->calls);
+ if ($key and ($call[0] == 'cdata') and ($this->calls[$key-1][0] == 'cdata')) {
+ $this->calls[$key-1][1][0] .= $call[1][0];
+ } else {
+ $this->calls[] = $call;
+ }
+ }
+}
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/parser/lexer.php b/mod/dokuwiki/vendors/dokuwiki/inc/parser/lexer.php
new file mode 100644
index 000000000..afd260a05
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/parser/lexer.php
@@ -0,0 +1,600 @@
+<?php
+/**
+* Author Markus Baker: http://www.lastcraft.com
+* Version adapted from Simple Test: http://sourceforge.net/projects/simpletest/
+* For an intro to the Lexer see:
+* http://www.phppatterns.com/index.php/article/articleview/106/1/2/
+* @author Marcus Baker
+* @package Doku
+* @subpackage Lexer
+* @version $Id: lexer.php,v 1.1 2005/03/23 23:14:09 harryf Exp $
+*/
+
+/**
+* Init path constant
+*/
+if(!defined('DOKU_INC')) die('meh.');
+
+/**#@+
+ * lexer mode constant
+ */
+define("DOKU_LEXER_ENTER", 1);
+define("DOKU_LEXER_MATCHED", 2);
+define("DOKU_LEXER_UNMATCHED", 3);
+define("DOKU_LEXER_EXIT", 4);
+define("DOKU_LEXER_SPECIAL", 5);
+/**#@-*/
+
+/**
+ * Compounded regular expression. Any of
+ * the contained patterns could match and
+ * when one does it's label is returned.
+ * @package Doku
+ * @subpackage Lexer
+ */
+class Doku_LexerParallelRegex {
+ var $_patterns;
+ var $_labels;
+ var $_regex;
+ var $_case;
+
+ /**
+ * Constructor. Starts with no patterns.
+ * @param boolean $case True for case sensitive, false
+ * for insensitive.
+ * @access public
+ */
+ function Doku_LexerParallelRegex($case) {
+ $this->_case = $case;
+ $this->_patterns = array();
+ $this->_labels = array();
+ $this->_regex = null;
+ }
+
+ /**
+ * Adds a pattern with an optional label.
+ * @param mixed $pattern Perl style regex. Must be UTF-8
+ * encoded. If its a string, the (, )
+ * lose their meaning unless they
+ * form part of a lookahead or
+ * lookbehind assertation.
+ * @param string $label Label of regex to be returned
+ * on a match. Label must be ASCII
+ * @access public
+ */
+ function addPattern($pattern, $label = true) {
+ $count = count($this->_patterns);
+ $this->_patterns[$count] = $pattern;
+ $this->_labels[$count] = $label;
+ $this->_regex = null;
+ }
+
+ /**
+ * Attempts to match all patterns at once against
+ * a string.
+ * @param string $subject String to match against.
+ * @param string $match First matched portion of
+ * subject.
+ * @return boolean True on success.
+ * @access public
+ */
+ function match($subject, &$match) {
+ if (count($this->_patterns) == 0) {
+ return false;
+ }
+ if (! preg_match($this->_getCompoundedRegex(), $subject, $matches)) {
+ $match = "";
+ return false;
+ }
+
+ $match = $matches[0];
+ $size = count($matches);
+ for ($i = 1; $i < $size; $i++) {
+ if ($matches[$i] && isset($this->_labels[$i - 1])) {
+ return $this->_labels[$i - 1];
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Attempts to split the string against all patterns at once
+ *
+ * @param string $subject String to match against.
+ * @param array $split The split result: array containing, pre-match, match & post-match strings
+ * @return boolean True on success.
+ * @access public
+ *
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ */
+ function split($subject, &$split) {
+ if (count($this->_patterns) == 0) {
+ return false;
+ }
+
+ if (! preg_match($this->_getCompoundedRegex(), $subject, $matches)) {
+ if(function_exists('preg_last_error')){
+ $err = preg_last_error();
+ switch($err){
+ case PREG_BACKTRACK_LIMIT_ERROR:
+ msg('A PCRE backtrack error occured. Try to increase the pcre.backtrack_limit in php.ini',-1);
+ break;
+ case PREG_RECURSION_LIMIT_ERROR:
+ msg('A PCRE recursion error occured. Try to increase the pcre.recursion_limit in php.ini',-1);
+ break;
+ case PREG_BAD_UTF8_ERROR:
+ msg('A PCRE UTF-8 error occured. This might be caused by a faulty plugin',-1);
+ break;
+ case PREG_INTERNAL_ERROR:
+ msg('A PCRE internal error occured. This might be caused by a faulty plugin',-1);
+ break;
+ }
+ }
+
+ $split = array($subject, "", "");
+ return false;
+ }
+
+ $idx = count($matches)-2;
+ list($pre, $post) = preg_split($this->_patterns[$idx].$this->_getPerlMatchingFlags(), $subject, 2);
+ $split = array($pre, $matches[0], $post);
+
+ return isset($this->_labels[$idx]) ? $this->_labels[$idx] : true;
+ }
+
+ /**
+ * Compounds the patterns into a single
+ * regular expression separated with the
+ * "or" operator. Caches the regex.
+ * Will automatically escape (, ) and / tokens.
+ * @param array $patterns List of patterns in order.
+ * @access private
+ */
+ function _getCompoundedRegex() {
+ if ($this->_regex == null) {
+ $cnt = count($this->_patterns);
+ for ($i = 0; $i < $cnt; $i++) {
+
+ /*
+ * decompose the input pattern into "(", "(?", ")",
+ * "[...]", "[]..]", "[^]..]", "[...[:...:]..]", "\x"...
+ * elements.
+ */
+ preg_match_all('/\\\\.|' .
+ '\(\?|' .
+ '[()]|' .
+ '\[\^?\]?(?:\\\\.|\[:[^]]*:\]|[^]\\\\])*\]|' .
+ '[^[()\\\\]+/', $this->_patterns[$i], $elts);
+
+ $pattern = "";
+ $level = 0;
+
+ foreach ($elts[0] as $elt) {
+ /*
+ * for "(", ")" remember the nesting level, add "\"
+ * only to the non-"(?" ones.
+ */
+
+ switch($elt) {
+ case '(':
+ $pattern .= '\(';
+ break;
+ case ')':
+ if ($level > 0)
+ $level--; /* closing (? */
+ else
+ $pattern .= '\\';
+ $pattern .= ')';
+ break;
+ case '(?':
+ $level++;
+ $pattern .= '(?';
+ break;
+ default:
+ if (substr($elt, 0, 1) == '\\')
+ $pattern .= $elt;
+ else
+ $pattern .= str_replace('/', '\/', $elt);
+ }
+ }
+ $this->_patterns[$i] = "($pattern)";
+ }
+ $this->_regex = "/" . implode("|", $this->_patterns) . "/" . $this->_getPerlMatchingFlags();
+ }
+ return $this->_regex;
+ }
+
+ /**
+ * Accessor for perl regex mode flags to use.
+ * @return string Perl regex flags.
+ * @access private
+ */
+ function _getPerlMatchingFlags() {
+ return ($this->_case ? "msS" : "msSi");
+ }
+}
+
+/**
+ * States for a stack machine.
+ * @package Lexer
+ * @subpackage Lexer
+ */
+class Doku_LexerStateStack {
+ var $_stack;
+
+ /**
+ * Constructor. Starts in named state.
+ * @param string $start Starting state name.
+ * @access public
+ */
+ function Doku_LexerStateStack($start) {
+ $this->_stack = array($start);
+ }
+
+ /**
+ * Accessor for current state.
+ * @return string State.
+ * @access public
+ */
+ function getCurrent() {
+ return $this->_stack[count($this->_stack) - 1];
+ }
+
+ /**
+ * Adds a state to the stack and sets it
+ * to be the current state.
+ * @param string $state New state.
+ * @access public
+ */
+ function enter($state) {
+ array_push($this->_stack, $state);
+ }
+
+ /**
+ * Leaves the current state and reverts
+ * to the previous one.
+ * @return boolean False if we drop off
+ * the bottom of the list.
+ * @access public
+ */
+ function leave() {
+ if (count($this->_stack) == 1) {
+ return false;
+ }
+ array_pop($this->_stack);
+ return true;
+ }
+}
+
+/**
+ * Accepts text and breaks it into tokens.
+ * Some optimisation to make the sure the
+ * content is only scanned by the PHP regex
+ * parser once. Lexer modes must not start
+ * with leading underscores.
+ * @package Doku
+ * @subpackage Lexer
+ */
+class Doku_Lexer {
+ var $_regexes;
+ var $_parser;
+ var $_mode;
+ var $_mode_handlers;
+ var $_case;
+
+ /**
+ * Sets up the lexer in case insensitive matching
+ * by default.
+ * @param Doku_Parser $parser Handling strategy by
+ * reference.
+ * @param string $start Starting handler.
+ * @param boolean $case True for case sensitive.
+ * @access public
+ */
+ function Doku_Lexer(&$parser, $start = "accept", $case = false) {
+ $this->_case = $case;
+ $this->_regexes = array();
+ $this->_parser = &$parser;
+ $this->_mode = &new Doku_LexerStateStack($start);
+ $this->_mode_handlers = array();
+ }
+
+ /**
+ * Adds a token search pattern for a particular
+ * parsing mode. The pattern does not change the
+ * current mode.
+ * @param string $pattern Perl style regex, but ( and )
+ * lose the usual meaning.
+ * @param string $mode Should only apply this
+ * pattern when dealing with
+ * this type of input.
+ * @access public
+ */
+ function addPattern($pattern, $mode = "accept") {
+ if (! isset($this->_regexes[$mode])) {
+ $this->_regexes[$mode] = new Doku_LexerParallelRegex($this->_case);
+ }
+ $this->_regexes[$mode]->addPattern($pattern);
+ }
+
+ /**
+ * Adds a pattern that will enter a new parsing
+ * mode. Useful for entering parenthesis, strings,
+ * tags, etc.
+ * @param string $pattern Perl style regex, but ( and )
+ * lose the usual meaning.
+ * @param string $mode Should only apply this
+ * pattern when dealing with
+ * this type of input.
+ * @param string $new_mode Change parsing to this new
+ * nested mode.
+ * @access public
+ */
+ function addEntryPattern($pattern, $mode, $new_mode) {
+ if (! isset($this->_regexes[$mode])) {
+ $this->_regexes[$mode] = new Doku_LexerParallelRegex($this->_case);
+ }
+ $this->_regexes[$mode]->addPattern($pattern, $new_mode);
+ }
+
+ /**
+ * Adds a pattern that will exit the current mode
+ * and re-enter the previous one.
+ * @param string $pattern Perl style regex, but ( and )
+ * lose the usual meaning.
+ * @param string $mode Mode to leave.
+ * @access public
+ */
+ function addExitPattern($pattern, $mode) {
+ if (! isset($this->_regexes[$mode])) {
+ $this->_regexes[$mode] = new Doku_LexerParallelRegex($this->_case);
+ }
+ $this->_regexes[$mode]->addPattern($pattern, "__exit");
+ }
+
+ /**
+ * Adds a pattern that has a special mode. Acts as an entry
+ * and exit pattern in one go, effectively calling a special
+ * parser handler for this token only.
+ * @param string $pattern Perl style regex, but ( and )
+ * lose the usual meaning.
+ * @param string $mode Should only apply this
+ * pattern when dealing with
+ * this type of input.
+ * @param string $special Use this mode for this one token.
+ * @access public
+ */
+ function addSpecialPattern($pattern, $mode, $special) {
+ if (! isset($this->_regexes[$mode])) {
+ $this->_regexes[$mode] = new Doku_LexerParallelRegex($this->_case);
+ }
+ $this->_regexes[$mode]->addPattern($pattern, "_$special");
+ }
+
+ /**
+ * Adds a mapping from a mode to another handler.
+ * @param string $mode Mode to be remapped.
+ * @param string $handler New target handler.
+ * @access public
+ */
+ function mapHandler($mode, $handler) {
+ $this->_mode_handlers[$mode] = $handler;
+ }
+
+ /**
+ * Splits the page text into tokens. Will fail
+ * if the handlers report an error or if no
+ * content is consumed. If successful then each
+ * unparsed and parsed token invokes a call to the
+ * held listener.
+ * @param string $raw Raw HTML text.
+ * @return boolean True on success, else false.
+ * @access public
+ */
+ function parse($raw) {
+ if (! isset($this->_parser)) {
+ return false;
+ }
+ $initialLength = strlen($raw);
+ $length = $initialLength;
+ $pos = 0;
+ while (is_array($parsed = $this->_reduce($raw))) {
+ list($unmatched, $matched, $mode) = $parsed;
+ $currentLength = strlen($raw);
+ $matchPos = $initialLength - $currentLength - strlen($matched);
+ if (! $this->_dispatchTokens($unmatched, $matched, $mode, $pos, $matchPos)) {
+ return false;
+ }
+ if ($currentLength == $length) {
+ return false;
+ }
+ $length = $currentLength;
+ $pos = $initialLength - $currentLength;
+ }
+ if (!$parsed) {
+ return false;
+ }
+ return $this->_invokeParser($raw, DOKU_LEXER_UNMATCHED, $pos);
+ }
+
+ /**
+ * Sends the matched token and any leading unmatched
+ * text to the parser changing the lexer to a new
+ * mode if one is listed.
+ * @param string $unmatched Unmatched leading portion.
+ * @param string $matched Actual token match.
+ * @param string $mode Mode after match. A boolean
+ * false mode causes no change.
+ * @param int $pos Current byte index location in raw doc
+ * thats being parsed
+ * @return boolean False if there was any error
+ * from the parser.
+ * @access private
+ */
+ function _dispatchTokens($unmatched, $matched, $mode = false, $initialPos, $matchPos) {
+ if (! $this->_invokeParser($unmatched, DOKU_LEXER_UNMATCHED, $initialPos) ){
+ return false;
+ }
+ if ($this->_isModeEnd($mode)) {
+ if (! $this->_invokeParser($matched, DOKU_LEXER_EXIT, $matchPos)) {
+ return false;
+ }
+ return $this->_mode->leave();
+ }
+ if ($this->_isSpecialMode($mode)) {
+ $this->_mode->enter($this->_decodeSpecial($mode));
+ if (! $this->_invokeParser($matched, DOKU_LEXER_SPECIAL, $matchPos)) {
+ return false;
+ }
+ return $this->_mode->leave();
+ }
+ if (is_string($mode)) {
+ $this->_mode->enter($mode);
+ return $this->_invokeParser($matched, DOKU_LEXER_ENTER, $matchPos);
+ }
+ return $this->_invokeParser($matched, DOKU_LEXER_MATCHED, $matchPos);
+ }
+
+ /**
+ * Tests to see if the new mode is actually to leave
+ * the current mode and pop an item from the matching
+ * mode stack.
+ * @param string $mode Mode to test.
+ * @return boolean True if this is the exit mode.
+ * @access private
+ */
+ function _isModeEnd($mode) {
+ return ($mode === "__exit");
+ }
+
+ /**
+ * Test to see if the mode is one where this mode
+ * is entered for this token only and automatically
+ * leaves immediately afterwoods.
+ * @param string $mode Mode to test.
+ * @return boolean True if this is the exit mode.
+ * @access private
+ */
+ function _isSpecialMode($mode) {
+ return (strncmp($mode, "_", 1) == 0);
+ }
+
+ /**
+ * Strips the magic underscore marking single token
+ * modes.
+ * @param string $mode Mode to decode.
+ * @return string Underlying mode name.
+ * @access private
+ */
+ function _decodeSpecial($mode) {
+ return substr($mode, 1);
+ }
+
+ /**
+ * Calls the parser method named after the current
+ * mode. Empty content will be ignored. The lexer
+ * has a parser handler for each mode in the lexer.
+ * @param string $content Text parsed.
+ * @param boolean $is_match Token is recognised rather
+ * than unparsed data.
+ * @param int $pos Current byte index location in raw doc
+ * thats being parsed
+ * @access private
+ */
+ function _invokeParser($content, $is_match, $pos) {
+ if (($content === "") || ($content === false)) {
+ return true;
+ }
+ $handler = $this->_mode->getCurrent();
+ if (isset($this->_mode_handlers[$handler])) {
+ $handler = $this->_mode_handlers[$handler];
+ }
+
+ // modes starting with plugin_ are all handled by the same
+ // handler but with an additional parameter
+ if(substr($handler,0,7)=='plugin_'){
+ list($handler,$plugin) = explode('_',$handler,2);
+ return $this->_parser->$handler($content, $is_match, $pos, $plugin);
+ }
+
+ return $this->_parser->$handler($content, $is_match, $pos);
+ }
+
+ /**
+ * Tries to match a chunk of text and if successful
+ * removes the recognised chunk and any leading
+ * unparsed data. Empty strings will not be matched.
+ * @param string $raw The subject to parse. This is the
+ * content that will be eaten.
+ * @return array Three item list of unparsed
+ * content followed by the
+ * recognised token and finally the
+ * action the parser is to take.
+ * True if no match, false if there
+ * is a parsing error.
+ * @access private
+ */
+ function _reduce(&$raw) {
+ if (! isset($this->_regexes[$this->_mode->getCurrent()])) {
+ return false;
+ }
+ if ($raw === "") {
+ return true;
+ }
+ if ($action = $this->_regexes[$this->_mode->getCurrent()]->split($raw, $split)) {
+ list($unparsed, $match, $raw) = $split;
+ return array($unparsed, $match, $action);
+ }
+ return true;
+ }
+}
+
+/**
+* Escapes regex characters other than (, ) and /
+* @TODO
+*/
+function Doku_Lexer_Escape($str) {
+ //$str = addslashes($str);
+ $chars = array(
+ '/\\\\/',
+ '/\./',
+ '/\+/',
+ '/\*/',
+ '/\?/',
+ '/\[/',
+ '/\^/',
+ '/\]/',
+ '/\$/',
+ '/\{/',
+ '/\}/',
+ '/\=/',
+ '/\!/',
+ '/\</',
+ '/\>/',
+ '/\|/',
+ '/\:/'
+ );
+
+ $escaped = array(
+ '\\\\\\\\',
+ '\.',
+ '\+',
+ '\*',
+ '\?',
+ '\[',
+ '\^',
+ '\]',
+ '\$',
+ '\{',
+ '\}',
+ '\=',
+ '\!',
+ '\<',
+ '\>',
+ '\|',
+ '\:'
+ );
+ return preg_replace($chars, $escaped, $str);
+}
+
+//Setup VIM: ex: et ts=4 sw=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/parser/metadata.php b/mod/dokuwiki/vendors/dokuwiki/inc/parser/metadata.php
new file mode 100644
index 000000000..fc60e5774
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/parser/metadata.php
@@ -0,0 +1,483 @@
+<?php
+/**
+ * Renderer for metadata
+ *
+ * @author Esther Brunner <wikidesign@gmail.com>
+ */
+if(!defined('DOKU_INC')) die('meh.');
+
+if ( !defined('DOKU_LF') ) {
+ // Some whitespace to help View > Source
+ define ('DOKU_LF',"\n");
+}
+
+if ( !defined('DOKU_TAB') ) {
+ // Some whitespace to help View > Source
+ define ('DOKU_TAB',"\t");
+}
+
+require_once DOKU_INC . 'inc/parser/renderer.php';
+
+/**
+ * The Renderer
+ */
+class Doku_Renderer_metadata extends Doku_Renderer {
+
+ var $doc = '';
+ var $meta = array();
+ var $persistent = array();
+
+ var $headers = array();
+ var $capture = true;
+ var $store = '';
+ var $firstimage = '';
+
+ function getFormat(){
+ return 'metadata';
+ }
+
+ function document_start(){
+ global $ID;
+
+ $this->headers = array();
+
+ // external pages are missing create date
+ if(!$this->persistent['date']['created']){
+ $this->persistent['date']['created'] = filectime(wikiFN($ID));
+ }
+ if(!isset($this->persistent['creator'])){
+ $this->persistent['creator'] = '';
+ }
+ // reset metadata to persistent values
+ $this->meta = $this->persistent;
+ }
+
+ function document_end(){
+ global $ID;
+
+ // store internal info in metadata (notoc,nocache)
+ $this->meta['internal'] = $this->info;
+
+ if (!isset($this->meta['description']['abstract'])){
+ // cut off too long abstracts
+ $this->doc = trim($this->doc);
+ if (strlen($this->doc) > 500)
+ $this->doc = utf8_substr($this->doc, 0, 500).'…';
+ $this->meta['description']['abstract'] = $this->doc;
+ }
+
+ $this->meta['relation']['firstimage'] = $this->firstimage;
+
+ if(!isset($this->meta['date']['modified'])){
+ $this->meta['date']['modified'] = filemtime(wikiFN($ID));
+ }
+
+ }
+
+ function toc_additem($id, $text, $level) {
+ global $conf;
+
+ //only add items within configured levels
+ if($level >= $conf['toptoclevel'] && $level <= $conf['maxtoclevel']){
+ // the TOC is one of our standard ul list arrays ;-)
+ $this->meta['description']['tableofcontents'][] = array(
+ 'hid' => $id,
+ 'title' => $text,
+ 'type' => 'ul',
+ 'level' => $level-$conf['toptoclevel']+1
+ );
+ }
+
+ }
+
+ function header($text, $level, $pos) {
+ if (!isset($this->meta['title'])) $this->meta['title'] = $text;
+
+ // add the header to the TOC
+ $hid = $this->_headerToLink($text,'true');
+ $this->toc_additem($hid, $text, $level);
+
+ // add to summary
+ if ($this->capture && ($level > 1)) $this->doc .= DOKU_LF.$text.DOKU_LF;
+ }
+
+ function section_open($level){}
+ function section_close(){}
+
+ function cdata($text){
+ if ($this->capture) $this->doc .= $text;
+ }
+
+ function p_open(){
+ if ($this->capture) $this->doc .= DOKU_LF;
+ }
+
+ function p_close(){
+ if ($this->capture){
+ if (strlen($this->doc) > 250) $this->capture = false;
+ else $this->doc .= DOKU_LF;
+ }
+ }
+
+ function linebreak(){
+ if ($this->capture) $this->doc .= DOKU_LF;
+ }
+
+ function hr(){
+ if ($this->capture){
+ if (strlen($this->doc) > 250) $this->capture = false;
+ else $this->doc .= DOKU_LF.'----------'.DOKU_LF;
+ }
+ }
+
+ function strong_open(){}
+ function strong_close(){}
+
+ function emphasis_open(){}
+ function emphasis_close(){}
+
+ function underline_open(){}
+ function underline_close(){}
+
+ function monospace_open(){}
+ function monospace_close(){}
+
+ function subscript_open(){}
+ function subscript_close(){}
+
+ function superscript_open(){}
+ function superscript_close(){}
+
+ function deleted_open(){}
+ function deleted_close(){}
+
+ /**
+ * Callback for footnote start syntax
+ *
+ * All following content will go to the footnote instead of
+ * the document. To achieve this the previous rendered content
+ * is moved to $store and $doc is cleared
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function footnote_open() {
+ if ($this->capture){
+ // move current content to store and record footnote
+ $this->store = $this->doc;
+ $this->doc = '';
+ }
+ }
+
+ /**
+ * Callback for footnote end syntax
+ *
+ * All rendered content is moved to the $footnotes array and the old
+ * content is restored from $store again
+ *
+ * @author Andreas Gohr
+ */
+ function footnote_close() {
+ if ($this->capture){
+ // restore old content
+ $this->doc = $this->store;
+ $this->store = '';
+ }
+ }
+
+ function listu_open(){
+ if ($this->capture) $this->doc .= DOKU_LF;
+ }
+
+ function listu_close(){
+ if ($this->capture && (strlen($this->doc) > 250)) $this->capture = false;
+ }
+
+ function listo_open(){
+ if ($this->capture) $this->doc .= DOKU_LF;
+ }
+
+ function listo_close(){
+ if ($this->capture && (strlen($this->doc) > 250)) $this->capture = false;
+ }
+
+ function listitem_open($level){
+ if ($this->capture) $this->doc .= str_repeat(DOKU_TAB, $level).'* ';
+ }
+
+ function listitem_close(){
+ if ($this->capture) $this->doc .= DOKU_LF;
+ }
+
+ function listcontent_open(){}
+ function listcontent_close(){}
+
+ function unformatted($text){
+ if ($this->capture) $this->doc .= $text;
+ }
+
+ function php($text){}
+
+ function phpblock($text){}
+
+ function html($text){}
+
+ function htmlblock($text){}
+
+ function preformatted($text){
+ if ($this->capture) $this->doc .= $text;
+ }
+
+ function file($text, $lang = null, $file = null){
+ if ($this->capture){
+ $this->doc .= DOKU_LF.$text;
+ if (strlen($this->doc) > 250) $this->capture = false;
+ else $this->doc .= DOKU_LF;
+ }
+ }
+
+ function quote_open(){
+ if ($this->capture) $this->doc .= DOKU_LF.DOKU_TAB.'"';
+ }
+
+ function quote_close(){
+ if ($this->capture){
+ $this->doc .= '"';
+ if (strlen($this->doc) > 250) $this->capture = false;
+ else $this->doc .= DOKU_LF;
+ }
+ }
+
+ function code($text, $language = NULL, $file = null){
+ if ($this->capture){
+ $this->doc .= DOKU_LF.$text;
+ if (strlen($this->doc) > 250) $this->capture = false;
+ else $this->doc .= DOKU_LF;
+ }
+ }
+
+ function acronym($acronym){
+ if ($this->capture) $this->doc .= $acronym;
+ }
+
+ function smiley($smiley){
+ if ($this->capture) $this->doc .= $smiley;
+ }
+
+ function entity($entity){
+ if ($this->capture) $this->doc .= $entity;
+ }
+
+ function multiplyentity($x, $y){
+ if ($this->capture) $this->doc .= $x.'×'.$y;
+ }
+
+ function singlequoteopening(){
+ global $lang;
+ if ($this->capture) $this->doc .= $lang['singlequoteopening'];
+ }
+
+ function singlequoteclosing(){
+ global $lang;
+ if ($this->capture) $this->doc .= $lang['singlequoteclosing'];
+ }
+
+ function apostrophe() {
+ global $lang;
+ if ($this->capture) $this->doc .= $lang['apostrophe'];
+ }
+
+ function doublequoteopening(){
+ global $lang;
+ if ($this->capture) $this->doc .= $lang['doublequoteopening'];
+ }
+
+ function doublequoteclosing(){
+ global $lang;
+ if ($this->capture) $this->doc .= $lang['doublequoteclosing'];
+ }
+
+ function camelcaselink($link) {
+ $this->internallink($link, $link);
+ }
+
+ function locallink($hash, $name = NULL){}
+
+ /**
+ * keep track of internal links in $this->meta['relation']['references']
+ */
+ function internallink($id, $name = NULL){
+ global $ID;
+
+ if(is_array($name))
+ $this->_firstimage($name['src']);
+
+ $default = $this->_simpleTitle($id);
+
+ // first resolve and clean up the $id
+ resolve_pageid(getNS($ID), $id, $exists);
+ list($page, $hash) = explode('#', $id, 2);
+
+ // set metadata
+ $this->meta['relation']['references'][$page] = $exists;
+ // $data = array('relation' => array('isreferencedby' => array($ID => true)));
+ // p_set_metadata($id, $data);
+
+ // add link title to summary
+ if ($this->capture){
+ $name = $this->_getLinkTitle($name, $default, $id);
+ $this->doc .= $name;
+ }
+ }
+
+ function externallink($url, $name = NULL){
+ if(is_array($name))
+ $this->_firstimage($name['src']);
+
+ if ($this->capture){
+ if ($name) $this->doc .= $name;
+ else $this->doc .= '<'.$url.'>';
+ }
+ }
+
+ function interwikilink($match, $name = NULL, $wikiName, $wikiUri){
+ if(is_array($name))
+ $this->_firstimage($name['src']);
+
+ if ($this->capture){
+ list($wikiUri, $hash) = explode('#', $wikiUri, 2);
+ $name = $this->_getLinkTitle($name, $wikiName.'>'.$wikiUri);
+ $this->doc .= $name;
+ }
+ }
+
+ function windowssharelink($url, $name = NULL){
+ if(is_array($name))
+ $this->_firstimage($name['src']);
+
+ if ($this->capture){
+ if ($name) $this->doc .= $name;
+ else $this->doc .= '<'.$url.'>';
+ }
+ }
+
+ function emaillink($address, $name = NULL){
+ if(is_array($name))
+ $this->_firstimage($name['src']);
+
+ if ($this->capture){
+ if ($name) $this->doc .= $name;
+ else $this->doc .= '<'.$address.'>';
+ }
+ }
+
+ function internalmedia($src, $title=NULL, $align=NULL, $width=NULL,
+ $height=NULL, $cache=NULL, $linking=NULL){
+ if ($this->capture && $title) $this->doc .= '['.$title.']';
+ $this->_firstimage($src);
+ }
+
+ function externalmedia($src, $title=NULL, $align=NULL, $width=NULL,
+ $height=NULL, $cache=NULL, $linking=NULL){
+ if ($this->capture && $title) $this->doc .= '['.$title.']';
+ $this->_firstimage($src);
+ }
+
+ function rss($url,$params) {
+ $this->meta['relation']['haspart'][$url] = true;
+
+ $this->meta['date']['valid']['age'] =
+ isset($this->meta['date']['valid']['age']) ?
+ min($this->meta['date']['valid']['age'],$params['refresh']) :
+ $params['refresh'];
+ }
+
+ function table_open($maxcols = NULL, $numrows = NULL){}
+ function table_close(){}
+
+ function tablerow_open(){}
+ function tablerow_close(){}
+
+ function tableheader_open($colspan = 1, $align = NULL, $rowspan = 1){}
+ function tableheader_close(){}
+
+ function tablecell_open($colspan = 1, $align = NULL, $rowspan = 1){}
+ function tablecell_close(){}
+
+ //----------------------------------------------------------
+ // Utils
+
+ /**
+ * Removes any Namespace from the given name but keeps
+ * casing and special chars
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _simpleTitle($name){
+ global $conf;
+
+ if(is_array($name)) return '';
+
+ if($conf['useslash']){
+ $nssep = '[:;/]';
+ }else{
+ $nssep = '[:;]';
+ }
+ $name = preg_replace('!.*'.$nssep.'!','',$name);
+ //if there is a hash we use the anchor name only
+ $name = preg_replace('!.*#!','',$name);
+ return $name;
+ }
+
+ /**
+ * Creates a linkid from a headline
+ *
+ * @param string $title The headline title
+ * @param boolean $create Create a new unique ID?
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _headerToLink($title, $create=false) {
+ if($create){
+ return sectionID($title,$this->headers);
+ }else{
+ $check = false;
+ return sectionID($title,$check);
+ }
+ }
+
+ /**
+ * Construct a title and handle images in titles
+ *
+ * @author Harry Fuecks <hfuecks@gmail.com>
+ */
+ function _getLinkTitle($title, $default, $id=NULL) {
+ global $conf;
+
+ $isImage = false;
+ if (is_null($title)){
+ if (useHeading('content') && $id){
+ $heading = p_get_first_heading($id,false);
+ if ($heading) return $heading;
+ }
+ return $default;
+ } else if (is_string($title)){
+ return $title;
+ } else if (is_array($title)){
+ return '['.$title['title'].']';
+ }
+ }
+
+ function _firstimage($src){
+ if($this->firstimage) return;
+ global $ID;
+
+ list($src,$hash) = explode('#',$src,2);
+ if(!preg_match('/^https?:\/\//i',$src)){
+ resolve_mediaid(getNS($ID),$src, $exists);
+ }
+ if(preg_match('/.(jpe?g|gif|png)$/i',$src)){
+ $this->firstimage = $src;
+ }
+ }
+}
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/parser/parser.php b/mod/dokuwiki/vendors/dokuwiki/inc/parser/parser.php
new file mode 100644
index 000000000..a78b08a29
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/parser/parser.php
@@ -0,0 +1,956 @@
+<?php
+if(!defined('DOKU_INC')) die('meh.');
+require_once DOKU_INC . 'inc/parser/lexer.php';
+require_once DOKU_INC . 'inc/parser/handler.php';
+
+
+/**
+ * Define various types of modes used by the parser - they are used to
+ * populate the list of modes another mode accepts
+ */
+global $PARSER_MODES;
+$PARSER_MODES = array(
+ // containers are complex modes that can contain many other modes
+ // hr breaks the principle but they shouldn't be used in tables / lists
+ // so they are put here
+ 'container' => array('listblock','table','quote','hr'),
+
+ // some mode are allowed inside the base mode only
+ 'baseonly' => array('header'),
+
+ // modes for styling text -- footnote behaves similar to styling
+ 'formatting' => array('strong', 'emphasis', 'underline', 'monospace',
+ 'subscript', 'superscript', 'deleted', 'footnote'),
+
+ // modes where the token is simply replaced - they can not contain any
+ // other modes
+ 'substition' => array('acronym','smiley','wordblock','entity',
+ 'camelcaselink', 'internallink','media',
+ 'externallink','linebreak','emaillink',
+ 'windowssharelink','filelink','notoc',
+ 'nocache','multiplyentity','quotes','rss'),
+
+ // modes which have a start and end token but inside which
+ // no other modes should be applied
+ 'protected' => array('preformatted','code','file','php','html','htmlblock','phpblock'),
+
+ // inside this mode no wiki markup should be applied but lineendings
+ // and whitespace isn't preserved
+ 'disabled' => array('unformatted'),
+
+ // used to mark paragraph boundaries
+ 'paragraphs' => array('eol')
+);
+
+//-------------------------------------------------------------------
+
+/**
+* Sets up the Lexer with modes and points it to the Handler
+* For an intro to the Lexer see: wiki:parser
+*/
+class Doku_Parser {
+
+ var $Handler;
+
+ var $Lexer;
+
+ var $modes = array();
+
+ var $connected = false;
+
+ function addBaseMode(& $BaseMode) {
+ $this->modes['base'] = & $BaseMode;
+ if ( !$this->Lexer ) {
+ $this->Lexer = & new Doku_Lexer($this->Handler,'base', true);
+ }
+ $this->modes['base']->Lexer = & $this->Lexer;
+ }
+
+ /**
+ * PHP preserves order of associative elements
+ * Mode sequence is important
+ */
+ function addMode($name, & $Mode) {
+ if ( !isset($this->modes['base']) ) {
+ $this->addBaseMode(new Doku_Parser_Mode_base());
+ }
+ $Mode->Lexer = & $this->Lexer;
+ $this->modes[$name] = & $Mode;
+ }
+
+ function connectModes() {
+
+ if ( $this->connected ) {
+ return;
+ }
+
+ foreach ( array_keys($this->modes) as $mode ) {
+
+ // Base isn't connected to anything
+ if ( $mode == 'base' ) {
+ continue;
+ }
+
+ $this->modes[$mode]->preConnect();
+
+ foreach ( array_keys($this->modes) as $cm ) {
+
+ if ( $this->modes[$cm]->accepts($mode) ) {
+ $this->modes[$mode]->connectTo($cm);
+ }
+
+ }
+
+ $this->modes[$mode]->postConnect();
+ }
+
+ $this->connected = true;
+ }
+
+ function parse($doc) {
+ if ( $this->Lexer ) {
+ $this->connectModes();
+ // Normalize CRs and pad doc
+ $doc = "\n".str_replace("\r\n","\n",$doc)."\n";
+ $this->Lexer->parse($doc);
+ $this->Handler->_finalize();
+ return $this->Handler->calls;
+ } else {
+ return false;
+ }
+ }
+
+}
+
+//-------------------------------------------------------------------
+/**
+ * This class and all the subclasses below are
+ * used to reduce the effort required to register
+ * modes with the Lexer. For performance these
+ * could all be eliminated later perhaps, or
+ * the Parser could be serialized to a file once
+ * all modes are registered
+ *
+ * @author Harry Fuecks <hfuecks@gmail.com>
+*/
+class Doku_Parser_Mode {
+
+ var $Lexer;
+
+ var $allowedModes = array();
+
+ // returns a number used to determine in which order modes are added
+ function getSort() {
+ trigger_error('getSort() not implemented in '.get_class($this), E_USER_WARNING);
+ }
+
+ // Called before any calls to connectTo
+ function preConnect() {}
+
+ // Connects the mode
+ function connectTo($mode) {}
+
+ // Called after all calls to connectTo
+ function postConnect() {}
+
+ function accepts($mode) {
+ return in_array($mode, (array) $this->allowedModes );
+ }
+
+}
+
+//-------------------------------------------------------------------
+class Doku_Parser_Mode_base extends Doku_Parser_Mode {
+
+ function Doku_Parser_Mode_base() {
+ global $PARSER_MODES;
+
+ $this->allowedModes = array_merge (
+ $PARSER_MODES['container'],
+ $PARSER_MODES['baseonly'],
+ $PARSER_MODES['paragraphs'],
+ $PARSER_MODES['formatting'],
+ $PARSER_MODES['substition'],
+ $PARSER_MODES['protected'],
+ $PARSER_MODES['disabled']
+ );
+ }
+
+ function getSort() {
+ return 0;
+ }
+}
+
+//-------------------------------------------------------------------
+class Doku_Parser_Mode_footnote extends Doku_Parser_Mode {
+
+ function Doku_Parser_Mode_footnote() {
+ global $PARSER_MODES;
+
+ $this->allowedModes = array_merge (
+ $PARSER_MODES['container'],
+ $PARSER_MODES['formatting'],
+ $PARSER_MODES['substition'],
+ $PARSER_MODES['protected'],
+ $PARSER_MODES['disabled']
+ );
+
+ unset($this->allowedModes[array_search('footnote', $this->allowedModes)]);
+ }
+
+ function connectTo($mode) {
+ $this->Lexer->addEntryPattern(
+ '\x28\x28(?=.*\x29\x29)',$mode,'footnote'
+ );
+ }
+
+ function postConnect() {
+ $this->Lexer->addExitPattern(
+ '\x29\x29','footnote'
+ );
+ }
+
+ function getSort() {
+ return 150;
+ }
+}
+
+//-------------------------------------------------------------------
+class Doku_Parser_Mode_header extends Doku_Parser_Mode {
+
+ function preConnect() {
+ //we're not picky about the closing ones, two are enough
+ $this->Lexer->addSpecialPattern(
+ '[ \t]*={2,}[^\n]+={2,}[ \t]*(?=\n)',
+ 'base',
+ 'header'
+ );
+ }
+
+ function getSort() {
+ return 50;
+ }
+}
+
+//-------------------------------------------------------------------
+class Doku_Parser_Mode_notoc extends Doku_Parser_Mode {
+
+ function connectTo($mode) {
+ $this->Lexer->addSpecialPattern('~~NOTOC~~',$mode,'notoc');
+ }
+
+ function getSort() {
+ return 30;
+ }
+}
+
+//-------------------------------------------------------------------
+class Doku_Parser_Mode_nocache extends Doku_Parser_Mode {
+
+ function connectTo($mode) {
+ $this->Lexer->addSpecialPattern('~~NOCACHE~~',$mode,'nocache');
+ }
+
+ function getSort() {
+ return 40;
+ }
+}
+
+//-------------------------------------------------------------------
+class Doku_Parser_Mode_linebreak extends Doku_Parser_Mode {
+
+ function connectTo($mode) {
+ $this->Lexer->addSpecialPattern('\x5C{2}(?:[ \t]|(?=\n))',$mode,'linebreak');
+ }
+
+ function getSort() {
+ return 140;
+ }
+}
+
+//-------------------------------------------------------------------
+class Doku_Parser_Mode_eol extends Doku_Parser_Mode {
+
+ function connectTo($mode) {
+ $badModes = array('listblock','table');
+ if ( in_array($mode, $badModes) ) {
+ return;
+ }
+ // see FS#1652, pattern extended to swallow preceding whitespace to avoid issues with lines that only contain whitespace
+ $this->Lexer->addSpecialPattern('(?:^[ \t]*)?\n',$mode,'eol');
+ }
+
+ function getSort() {
+ return 370;
+ }
+}
+
+//-------------------------------------------------------------------
+class Doku_Parser_Mode_hr extends Doku_Parser_Mode {
+
+ function connectTo($mode) {
+ $this->Lexer->addSpecialPattern('\n[ \t]*-{4,}[ \t]*(?=\n)',$mode,'hr');
+ }
+
+ function getSort() {
+ return 160;
+ }
+}
+
+//-------------------------------------------------------------------
+class Doku_Parser_Mode_formatting extends Doku_Parser_Mode {
+ var $type;
+
+ var $formatting = array (
+ 'strong' => array (
+ 'entry'=>'\*\*(?=.*\*\*)',
+ 'exit'=>'\*\*',
+ 'sort'=>70
+ ),
+
+ 'emphasis'=> array (
+ 'entry'=>'//(?=[^\x00]*[^:])', //hack for bugs #384 #763 #1468
+ 'exit'=>'//',
+ 'sort'=>80
+ ),
+
+ 'underline'=> array (
+ 'entry'=>'__(?=.*__)',
+ 'exit'=>'__',
+ 'sort'=>90
+ ),
+
+ 'monospace'=> array (
+ 'entry'=>'\x27\x27(?=.*\x27\x27)',
+ 'exit'=>'\x27\x27',
+ 'sort'=>100
+ ),
+
+ 'subscript'=> array (
+ 'entry'=>'<sub>(?=.*</sub>)',
+ 'exit'=>'</sub>',
+ 'sort'=>110
+ ),
+
+ 'superscript'=> array (
+ 'entry'=>'<sup>(?=.*</sup>)',
+ 'exit'=>'</sup>',
+ 'sort'=>120
+ ),
+
+ 'deleted'=> array (
+ 'entry'=>'<del>(?=.*</del>)',
+ 'exit'=>'</del>',
+ 'sort'=>130
+ ),
+ );
+
+ function Doku_Parser_Mode_formatting($type) {
+ global $PARSER_MODES;
+
+ if ( !array_key_exists($type, $this->formatting) ) {
+ trigger_error('Invalid formatting type '.$type, E_USER_WARNING);
+ }
+
+ $this->type = $type;
+
+ // formatting may contain other formatting but not it self
+ $modes = $PARSER_MODES['formatting'];
+ $key = array_search($type, $modes);
+ if ( is_int($key) ) {
+ unset($modes[$key]);
+ }
+
+ $this->allowedModes = array_merge (
+ $modes,
+ $PARSER_MODES['substition'],
+ $PARSER_MODES['disabled']
+ );
+ }
+
+ function connectTo($mode) {
+
+ // Can't nest formatting in itself
+ if ( $mode == $this->type ) {
+ return;
+ }
+
+ $this->Lexer->addEntryPattern(
+ $this->formatting[$this->type]['entry'],
+ $mode,
+ $this->type
+ );
+ }
+
+ function postConnect() {
+
+ $this->Lexer->addExitPattern(
+ $this->formatting[$this->type]['exit'],
+ $this->type
+ );
+
+ }
+
+ function getSort() {
+ return $this->formatting[$this->type]['sort'];
+ }
+}
+
+//-------------------------------------------------------------------
+class Doku_Parser_Mode_listblock extends Doku_Parser_Mode {
+
+ function Doku_Parser_Mode_listblock() {
+ global $PARSER_MODES;
+
+ $this->allowedModes = array_merge (
+ $PARSER_MODES['formatting'],
+ $PARSER_MODES['substition'],
+ $PARSER_MODES['disabled'],
+ $PARSER_MODES['protected'] #XXX new
+ );
+
+ // $this->allowedModes[] = 'footnote';
+ }
+
+ function connectTo($mode) {
+ $this->Lexer->addEntryPattern('\n {2,}[\-\*]',$mode,'listblock');
+ $this->Lexer->addEntryPattern('\n\t{1,}[\-\*]',$mode,'listblock');
+
+ $this->Lexer->addPattern('\n {2,}[\-\*]','listblock');
+ $this->Lexer->addPattern('\n\t{1,}[\-\*]','listblock');
+
+ }
+
+ function postConnect() {
+ $this->Lexer->addExitPattern('\n','listblock');
+ }
+
+ function getSort() {
+ return 10;
+ }
+}
+
+//-------------------------------------------------------------------
+class Doku_Parser_Mode_table extends Doku_Parser_Mode {
+
+ function Doku_Parser_Mode_table() {
+ global $PARSER_MODES;
+
+ $this->allowedModes = array_merge (
+ $PARSER_MODES['formatting'],
+ $PARSER_MODES['substition'],
+ $PARSER_MODES['disabled'],
+ $PARSER_MODES['protected']
+ );
+ }
+
+ function connectTo($mode) {
+ $this->Lexer->addEntryPattern('\n\^',$mode,'table');
+ $this->Lexer->addEntryPattern('\n\|',$mode,'table');
+ }
+
+ function postConnect() {
+ $this->Lexer->addPattern('\n\^','table');
+ $this->Lexer->addPattern('\n\|','table');
+ $this->Lexer->addPattern('[\t ]*:::[\t ]*(?=[\|\^])','table');
+ $this->Lexer->addPattern('[\t ]+','table');
+ $this->Lexer->addPattern('\^','table');
+ $this->Lexer->addPattern('\|','table');
+ $this->Lexer->addExitPattern('\n','table');
+ }
+
+ function getSort() {
+ return 60;
+ }
+}
+
+//-------------------------------------------------------------------
+class Doku_Parser_Mode_unformatted extends Doku_Parser_Mode {
+
+ function connectTo($mode) {
+ $this->Lexer->addEntryPattern('<nowiki>(?=.*</nowiki>)',$mode,'unformatted');
+ $this->Lexer->addEntryPattern('%%(?=.*%%)',$mode,'unformattedalt');
+ }
+
+ function postConnect() {
+ $this->Lexer->addExitPattern('</nowiki>','unformatted');
+ $this->Lexer->addExitPattern('%%','unformattedalt');
+ $this->Lexer->mapHandler('unformattedalt','unformatted');
+ }
+
+ function getSort() {
+ return 170;
+ }
+}
+
+//-------------------------------------------------------------------
+class Doku_Parser_Mode_php extends Doku_Parser_Mode {
+
+ function connectTo($mode) {
+ $this->Lexer->addEntryPattern('<php>(?=.*</php>)',$mode,'php');
+ $this->Lexer->addEntryPattern('<PHP>(?=.*</PHP>)',$mode,'phpblock');
+ }
+
+ function postConnect() {
+ $this->Lexer->addExitPattern('</php>','php');
+ $this->Lexer->addExitPattern('</PHP>','phpblock');
+ }
+
+ function getSort() {
+ return 180;
+ }
+}
+
+//-------------------------------------------------------------------
+class Doku_Parser_Mode_html extends Doku_Parser_Mode {
+
+ function connectTo($mode) {
+ $this->Lexer->addEntryPattern('<html>(?=.*</html>)',$mode,'html');
+ $this->Lexer->addEntryPattern('<HTML>(?=.*</HTML>)',$mode,'htmlblock');
+ }
+
+ function postConnect() {
+ $this->Lexer->addExitPattern('</html>','html');
+ $this->Lexer->addExitPattern('</HTML>','htmlblock');
+ }
+
+ function getSort() {
+ return 190;
+ }
+}
+
+//-------------------------------------------------------------------
+class Doku_Parser_Mode_preformatted extends Doku_Parser_Mode {
+
+ function connectTo($mode) {
+ // Has hard coded awareness of lists...
+ $this->Lexer->addEntryPattern('\n (?![\*\-])',$mode,'preformatted');
+ $this->Lexer->addEntryPattern('\n\t(?![\*\-])',$mode,'preformatted');
+
+ // How to effect a sub pattern with the Lexer!
+ $this->Lexer->addPattern('\n ','preformatted');
+ $this->Lexer->addPattern('\n\t','preformatted');
+
+ }
+
+ function postConnect() {
+ $this->Lexer->addExitPattern('\n','preformatted');
+ }
+
+ function getSort() {
+ return 20;
+ }
+}
+
+//-------------------------------------------------------------------
+class Doku_Parser_Mode_code extends Doku_Parser_Mode {
+
+ function connectTo($mode) {
+ $this->Lexer->addEntryPattern('<code(?=.*</code>)',$mode,'code');
+ }
+
+ function postConnect() {
+ $this->Lexer->addExitPattern('</code>','code');
+ }
+
+ function getSort() {
+ return 200;
+ }
+}
+
+//-------------------------------------------------------------------
+class Doku_Parser_Mode_file extends Doku_Parser_Mode {
+
+ function connectTo($mode) {
+ $this->Lexer->addEntryPattern('<file(?=.*</file>)',$mode,'file');
+ }
+
+ function postConnect() {
+ $this->Lexer->addExitPattern('</file>','file');
+ }
+
+ function getSort() {
+ return 210;
+ }
+}
+
+//-------------------------------------------------------------------
+class Doku_Parser_Mode_quote extends Doku_Parser_Mode {
+
+ function Doku_Parser_Mode_quote() {
+ global $PARSER_MODES;
+
+ $this->allowedModes = array_merge (
+ $PARSER_MODES['formatting'],
+ $PARSER_MODES['substition'],
+ $PARSER_MODES['disabled'],
+ $PARSER_MODES['protected'] #XXX new
+ );
+ #$this->allowedModes[] = 'footnote';
+ #$this->allowedModes[] = 'preformatted';
+ #$this->allowedModes[] = 'unformatted';
+ }
+
+ function connectTo($mode) {
+ $this->Lexer->addEntryPattern('\n>{1,}',$mode,'quote');
+ }
+
+ function postConnect() {
+ $this->Lexer->addPattern('\n>{1,}','quote');
+ $this->Lexer->addExitPattern('\n','quote');
+ }
+
+ function getSort() {
+ return 220;
+ }
+}
+
+//-------------------------------------------------------------------
+class Doku_Parser_Mode_acronym extends Doku_Parser_Mode {
+ // A list
+ var $acronyms = array();
+ var $pattern = '';
+
+ function Doku_Parser_Mode_acronym($acronyms) {
+ usort($acronyms,array($this,'_compare'));
+ $this->acronyms = $acronyms;
+ }
+
+ function preConnect() {
+ if(!count($this->acronyms)) return;
+
+ $bound = '[\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]';
+ $acronyms = array_map('Doku_Lexer_Escape',$this->acronyms);
+ $this->pattern = '(?<=^|'.$bound.')(?:'.join('|',$acronyms).')(?='.$bound.')';
+ }
+
+ function connectTo($mode) {
+ if(!count($this->acronyms)) return;
+
+ if ( strlen($this->pattern) > 0 ) {
+ $this->Lexer->addSpecialPattern($this->pattern,$mode,'acronym');
+ }
+ }
+
+ function getSort() {
+ return 240;
+ }
+
+ /**
+ * sort callback to order by string length descending
+ */
+ function _compare($a,$b) {
+ $a_len = strlen($a);
+ $b_len = strlen($b);
+ if ($a_len > $b_len) {
+ return -1;
+ } else if ($a_len < $b_len) {
+ return 1;
+ }
+
+ return 0;
+ }
+}
+
+//-------------------------------------------------------------------
+class Doku_Parser_Mode_smiley extends Doku_Parser_Mode {
+ // A list
+ var $smileys = array();
+ var $pattern = '';
+
+ function Doku_Parser_Mode_smiley($smileys) {
+ $this->smileys = $smileys;
+ }
+
+ function preConnect() {
+ if(!count($this->smileys) || $this->pattern != '') return;
+
+ $sep = '';
+ foreach ( $this->smileys as $smiley ) {
+ $this->pattern .= $sep.'(?<=\W|^)'.Doku_Lexer_Escape($smiley).'(?=\W|$)';
+ $sep = '|';
+ }
+ }
+
+ function connectTo($mode) {
+ if(!count($this->smileys)) return;
+
+ if ( strlen($this->pattern) > 0 ) {
+ $this->Lexer->addSpecialPattern($this->pattern,$mode,'smiley');
+ }
+ }
+
+ function getSort() {
+ return 230;
+ }
+}
+
+//-------------------------------------------------------------------
+class Doku_Parser_Mode_wordblock extends Doku_Parser_Mode {
+ // A list
+ var $badwords = array();
+ var $pattern = '';
+
+ function Doku_Parser_Mode_wordblock($badwords) {
+ $this->badwords = $badwords;
+ }
+
+ function preConnect() {
+
+ if ( count($this->badwords) == 0 || $this->pattern != '') {
+ return;
+ }
+
+ $sep = '';
+ foreach ( $this->badwords as $badword ) {
+ $this->pattern .= $sep.'(?<=\b)(?i)'.Doku_Lexer_Escape($badword).'(?-i)(?=\b)';
+ $sep = '|';
+ }
+
+ }
+
+ function connectTo($mode) {
+ if ( strlen($this->pattern) > 0 ) {
+ $this->Lexer->addSpecialPattern($this->pattern,$mode,'wordblock');
+ }
+ }
+
+ function getSort() {
+ return 250;
+ }
+}
+
+//-------------------------------------------------------------------
+class Doku_Parser_Mode_entity extends Doku_Parser_Mode {
+ // A list
+ var $entities = array();
+ var $pattern = '';
+
+ function Doku_Parser_Mode_entity($entities) {
+ $this->entities = $entities;
+ }
+
+ function preConnect() {
+ if(!count($this->entities) || $this->pattern != '') return;
+
+ $sep = '';
+ foreach ( $this->entities as $entity ) {
+ $this->pattern .= $sep.Doku_Lexer_Escape($entity);
+ $sep = '|';
+ }
+ }
+
+ function connectTo($mode) {
+ if(!count($this->entities)) return;
+
+ if ( strlen($this->pattern) > 0 ) {
+ $this->Lexer->addSpecialPattern($this->pattern,$mode,'entity');
+ }
+ }
+
+ function getSort() {
+ return 260;
+ }
+}
+
+//-------------------------------------------------------------------
+// Implements the 640x480 replacement
+class Doku_Parser_Mode_multiplyentity extends Doku_Parser_Mode {
+
+ function connectTo($mode) {
+
+ $this->Lexer->addSpecialPattern(
+ '(?<=\b)(?:[1-9]|\d{2,})[xX]\d+(?=\b)',$mode,'multiplyentity'
+ );
+
+ }
+
+ function getSort() {
+ return 270;
+ }
+}
+
+//-------------------------------------------------------------------
+class Doku_Parser_Mode_quotes extends Doku_Parser_Mode {
+
+ function connectTo($mode) {
+ global $conf;
+
+ $ws = '\s/\#~:+=&%@\-\x28\x29\]\[{}><"\''; // whitespace
+ $punc = ';,\.?!';
+
+ if($conf['typography'] == 2){
+ $this->Lexer->addSpecialPattern(
+ "(?<=^|[$ws])'(?=[^$ws$punc])",$mode,'singlequoteopening'
+ );
+ $this->Lexer->addSpecialPattern(
+ "(?<=^|[^$ws]|[$punc])'(?=$|[$ws$punc])",$mode,'singlequoteclosing'
+ );
+ $this->Lexer->addSpecialPattern(
+ "(?<=^|[^$ws$punc])'(?=$|[^$ws$punc])",$mode,'apostrophe'
+ );
+ }
+
+ $this->Lexer->addSpecialPattern(
+ "(?<=^|[$ws])\"(?=[^$ws$punc])",$mode,'doublequoteopening'
+ );
+ $this->Lexer->addSpecialPattern(
+ "\"",$mode,'doublequoteclosing'
+ );
+
+
+ }
+
+ function getSort() {
+ return 280;
+ }
+}
+
+//-------------------------------------------------------------------
+class Doku_Parser_Mode_camelcaselink extends Doku_Parser_Mode {
+
+ function connectTo($mode) {
+ $this->Lexer->addSpecialPattern(
+ '\b[A-Z]+[a-z]+[A-Z][A-Za-z]*\b',$mode,'camelcaselink'
+ );
+ }
+
+ function getSort() {
+ return 290;
+ }
+}
+
+//-------------------------------------------------------------------
+class Doku_Parser_Mode_internallink extends Doku_Parser_Mode {
+
+ function connectTo($mode) {
+ // Word boundaries?
+ $this->Lexer->addSpecialPattern("\[\[.+?\]\]",$mode,'internallink');
+ }
+
+ function getSort() {
+ return 300;
+ }
+}
+
+//-------------------------------------------------------------------
+class Doku_Parser_Mode_media extends Doku_Parser_Mode {
+
+ function connectTo($mode) {
+ // Word boundaries?
+ $this->Lexer->addSpecialPattern("\{\{[^\}]+\}\}",$mode,'media');
+ }
+
+ function getSort() {
+ return 320;
+ }
+}
+
+//-------------------------------------------------------------------
+class Doku_Parser_Mode_rss extends Doku_Parser_Mode {
+
+ function connectTo($mode) {
+ $this->Lexer->addSpecialPattern("\{\{rss>[^\}]+\}\}",$mode,'rss');
+ }
+
+ function getSort() {
+ return 310;
+ }
+}
+
+//-------------------------------------------------------------------
+class Doku_Parser_Mode_externallink extends Doku_Parser_Mode {
+ var $schemes = array();
+ var $patterns = array();
+
+ function preConnect() {
+ if(count($this->patterns)) return;
+
+ $ltrs = '\w';
+ $gunk = '/\#~:.?+=&%@!\-';
+ $punc = '.:?\-;,';
+ $host = $ltrs.$punc;
+ $any = $ltrs.$gunk.$punc;
+
+ $this->schemes = getSchemes();
+ foreach ( $this->schemes as $scheme ) {
+ $this->patterns[] = '\b(?i)'.$scheme.'(?-i)://['.$any.']+?(?=['.$punc.']*[^'.$any.'])';
+ }
+
+ $this->patterns[] = '\b(?i)www?(?-i)\.['.$host.']+?\.['.$host.']+?['.$any.']+?(?=['.$punc.']*[^'.$any.'])';
+ $this->patterns[] = '\b(?i)ftp?(?-i)\.['.$host.']+?\.['.$host.']+?['.$any.']+?(?=['.$punc.']*[^'.$any.'])';
+ }
+
+ function connectTo($mode) {
+
+ foreach ( $this->patterns as $pattern ) {
+ $this->Lexer->addSpecialPattern($pattern,$mode,'externallink');
+ }
+ }
+
+ function getSort() {
+ return 330;
+ }
+}
+
+//-------------------------------------------------------------------
+class Doku_Parser_Mode_filelink extends Doku_Parser_Mode {
+
+ var $pattern;
+
+ function preConnect() {
+
+ $ltrs = '\w';
+ $gunk = '/\#~:.?+=&%@!\-';
+ $punc = '.:?\-;,';
+ $host = $ltrs.$punc;
+ $any = $ltrs.$gunk.$punc;
+
+ $this->pattern = '\b(?i)file(?-i)://['.$any.']+?['.
+ $punc.']*[^'.$any.']';
+ }
+
+ function connectTo($mode) {
+ $this->Lexer->addSpecialPattern(
+ $this->pattern,$mode,'filelink');
+ }
+
+ function getSort() {
+ return 360;
+ }
+}
+
+//-------------------------------------------------------------------
+class Doku_Parser_Mode_windowssharelink extends Doku_Parser_Mode {
+
+ var $pattern;
+
+ function preConnect() {
+ $this->pattern = "\\\\\\\\\w+?(?:\\\\[\w$]+)+";
+ }
+
+ function connectTo($mode) {
+ $this->Lexer->addSpecialPattern(
+ $this->pattern,$mode,'windowssharelink');
+ }
+
+ function getSort() {
+ return 350;
+ }
+}
+
+//-------------------------------------------------------------------
+class Doku_Parser_Mode_emaillink extends Doku_Parser_Mode {
+
+ function connectTo($mode) {
+ // pattern below is defined in inc/mail.php
+ $this->Lexer->addSpecialPattern('<'.PREG_PATTERN_VALID_EMAIL.'>',$mode,'emaillink');
+ }
+
+ function getSort() {
+ return 340;
+ }
+}
+
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/parser/renderer.php b/mod/dokuwiki/vendors/dokuwiki/inc/parser/renderer.php
new file mode 100644
index 000000000..6082e935d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/parser/renderer.php
@@ -0,0 +1,322 @@
+<?php
+/**
+ * Renderer output base class
+ *
+ * @author Harry Fuecks <hfuecks@gmail.com>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+if(!defined('DOKU_INC')) die('meh.');
+require_once DOKU_INC . 'inc/parser/renderer.php';
+require_once DOKU_INC . 'inc/plugin.php';
+require_once DOKU_INC . 'inc/pluginutils.php';
+
+/**
+ * An empty renderer, produces no output
+ *
+ * Inherits from DokuWiki_Plugin for giving additional functions to render plugins
+ */
+class Doku_Renderer extends DokuWiki_Plugin {
+ var $info = array(
+ 'cache' => true, // may the rendered result cached?
+ 'toc' => true, // render the TOC?
+ );
+
+ // keep some config options
+ var $acronyms = array();
+ var $smileys = array();
+ var $badwords = array();
+ var $entities = array();
+ var $interwiki = array();
+
+ // allows renderer to be used again, clean out any per-use values
+ function reset() {
+ }
+
+ function nocache() {
+ $this->info['cache'] = false;
+ }
+
+ function notoc() {
+ $this->info['toc'] = false;
+ }
+
+ /**
+ * Returns the format produced by this renderer.
+ *
+ * Has to be overidden by decendend classes
+ */
+ function getFormat(){
+ trigger_error('getFormat() not implemented in '.get_class($this), E_USER_WARNING);
+ }
+
+
+ //handle plugin rendering
+ function plugin($name,$data){
+ $plugin =& plugin_load('syntax',$name);
+ if($plugin != null){
+ $plugin->render($this->getFormat(),$this,$data);
+ }
+ }
+
+ /**
+ * handle nested render instructions
+ * this method (and nest_close method) should not be overloaded in actual renderer output classes
+ */
+ function nest($instructions) {
+
+ foreach ( $instructions as $instruction ) {
+ // execute the callback against ourself
+ call_user_func_array(array(&$this, $instruction[0]),$instruction[1]);
+ }
+ }
+
+ // dummy closing instruction issued by Doku_Handler_Nest, normally the syntax mode should
+ // override this instruction when instantiating Doku_Handler_Nest - however plugins will not
+ // be able to - as their instructions require data.
+ function nest_close() {}
+
+ function document_start() {}
+
+ function document_end() {}
+
+ function render_TOC() { return ''; }
+
+ function toc_additem($id, $text, $level) {}
+
+ function header($text, $level, $pos) {}
+
+ function section_edit($start, $end, $level, $name) {}
+
+ function section_open($level) {}
+
+ function section_close() {}
+
+ function cdata($text) {}
+
+ function p_open() {}
+
+ function p_close() {}
+
+ function linebreak() {}
+
+ function hr() {}
+
+ function strong_open() {}
+
+ function strong_close() {}
+
+ function emphasis_open() {}
+
+ function emphasis_close() {}
+
+ function underline_open() {}
+
+ function underline_close() {}
+
+ function monospace_open() {}
+
+ function monospace_close() {}
+
+ function subscript_open() {}
+
+ function subscript_close() {}
+
+ function superscript_open() {}
+
+ function superscript_close() {}
+
+ function deleted_open() {}
+
+ function deleted_close() {}
+
+ function footnote_open() {}
+
+ function footnote_close() {}
+
+ function listu_open() {}
+
+ function listu_close() {}
+
+ function listo_open() {}
+
+ function listo_close() {}
+
+ function listitem_open($level) {}
+
+ function listitem_close() {}
+
+ function listcontent_open() {}
+
+ function listcontent_close() {}
+
+ function unformatted($text) {}
+
+ function php($text) {}
+
+ function phpblock($text) {}
+
+ function html($text) {}
+
+ function htmlblock($text) {}
+
+ function preformatted($text) {}
+
+ function quote_open() {}
+
+ function quote_close() {}
+
+ function file($text, $lang = null, $file = null ) {}
+
+ function code($text, $lang = null, $file = null ) {}
+
+ function acronym($acronym) {}
+
+ function smiley($smiley) {}
+
+ function wordblock($word) {}
+
+ function entity($entity) {}
+
+ // 640x480 ($x=640, $y=480)
+ function multiplyentity($x, $y) {}
+
+ function singlequoteopening() {}
+
+ function singlequoteclosing() {}
+
+ function apostrophe() {}
+
+ function doublequoteopening() {}
+
+ function doublequoteclosing() {}
+
+ // $link like 'SomePage'
+ function camelcaselink($link) {}
+
+ function locallink($hash, $name = NULL) {}
+
+ // $link like 'wiki:syntax', $title could be an array (media)
+ function internallink($link, $title = NULL) {}
+
+ // $link is full URL with scheme, $title could be an array (media)
+ function externallink($link, $title = NULL) {}
+
+ function rss ($url,$params) {}
+
+ // $link is the original link - probably not much use
+ // $wikiName is an indentifier for the wiki
+ // $wikiUri is the URL fragment to append to some known URL
+ function interwikilink($link, $title = NULL, $wikiName, $wikiUri) {}
+
+ // Link to file on users OS, $title could be an array (media)
+ function filelink($link, $title = NULL) {}
+
+ // Link to a Windows share, , $title could be an array (media)
+ function windowssharelink($link, $title = NULL) {}
+
+// function email($address, $title = NULL) {}
+ function emaillink($address, $name = NULL) {}
+
+ function internalmedia ($src, $title=NULL, $align=NULL, $width=NULL,
+ $height=NULL, $cache=NULL, $linking=NULL) {}
+
+ function externalmedia ($src, $title=NULL, $align=NULL, $width=NULL,
+ $height=NULL, $cache=NULL, $linking=NULL) {}
+
+ function internalmedialink (
+ $src,$title=NULL,$align=NULL,$width=NULL,$height=NULL,$cache=NULL
+ ) {}
+
+ function externalmedialink(
+ $src,$title=NULL,$align=NULL,$width=NULL,$height=NULL,$cache=NULL
+ ) {}
+
+ function table_open($maxcols = NULL, $numrows = NULL){}
+
+ function table_close(){}
+
+ function tablerow_open(){}
+
+ function tablerow_close(){}
+
+ function tableheader_open($colspan = 1, $align = NULL, $rowspan = 1){}
+
+ function tableheader_close(){}
+
+ function tablecell_open($colspan = 1, $align = NULL, $rowspan = 1){}
+
+ function tablecell_close(){}
+
+
+ // util functions follow, you probably won't need to reimplement them
+
+
+ /**
+ * Removes any Namespace from the given name but keeps
+ * casing and special chars
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _simpleTitle($name){
+ global $conf;
+
+ //if there is a hash we use the ancor name only
+ list($name,$hash) = explode('#',$name,2);
+ if($hash) return $hash;
+
+ //trim colons or slash of a namespace link
+ $name = rtrim($name,':');
+ if($conf['useslash'])
+ $name = rtrim($name,'/');
+
+ if($conf['useslash']){
+ $nssep = '[:;/]';
+ }else{
+ $nssep = '[:;]';
+ }
+ $name = preg_replace('!.*'.$nssep.'!','',$name);
+
+ if(!$name) return $this->_simpleTitle($conf['start']);
+ return $name;
+ }
+
+ /**
+ * Resolve an interwikilink
+ */
+ function _resolveInterWiki(&$shortcut,$reference){
+ //get interwiki URL
+ if ( isset($this->interwiki[$shortcut]) ) {
+ $url = $this->interwiki[$shortcut];
+ } else {
+ // Default to Google I'm feeling lucky
+ $url = 'http://www.google.com/search?q={URL}&amp;btnI=lucky';
+ $shortcut = 'go';
+ }
+
+ //split into hash and url part
+ list($reference,$hash) = explode('#',$reference,2);
+
+ //replace placeholder
+ if(preg_match('#\{(URL|NAME|SCHEME|HOST|PORT|PATH|QUERY)\}#',$url)){
+ //use placeholders
+ $url = str_replace('{URL}',rawurlencode($reference),$url);
+ $url = str_replace('{NAME}',$reference,$url);
+ $parsed = parse_url($reference);
+ if(!$parsed['port']) $parsed['port'] = 80;
+ $url = str_replace('{SCHEME}',$parsed['scheme'],$url);
+ $url = str_replace('{HOST}',$parsed['host'],$url);
+ $url = str_replace('{PORT}',$parsed['port'],$url);
+ $url = str_replace('{PATH}',$parsed['path'],$url);
+ $url = str_replace('{QUERY}',$parsed['query'],$url);
+ }else{
+ //default
+ $url = $url.rawurlencode($reference);
+ }
+ if($hash) $url .= '#'.rawurlencode($hash);
+
+ return $url;
+ }
+}
+
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/parser/xhtml.php b/mod/dokuwiki/vendors/dokuwiki/inc/parser/xhtml.php
new file mode 100644
index 000000000..4d5333f7a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/parser/xhtml.php
@@ -0,0 +1,1142 @@
+<?php
+/**
+ * Renderer for XHTML output
+ *
+ * @author Harry Fuecks <hfuecks@gmail.com>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+if(!defined('DOKU_INC')) die('meh.');
+
+if ( !defined('DOKU_LF') ) {
+ // Some whitespace to help View > Source
+ define ('DOKU_LF',"\n");
+}
+
+if ( !defined('DOKU_TAB') ) {
+ // Some whitespace to help View > Source
+ define ('DOKU_TAB',"\t");
+}
+
+require_once DOKU_INC . 'inc/parser/renderer.php';
+require_once DOKU_INC . 'inc/html.php';
+
+/**
+ * The Renderer
+ */
+class Doku_Renderer_xhtml extends Doku_Renderer {
+
+ // @access public
+ var $doc = ''; // will contain the whole document
+ var $toc = array(); // will contain the Table of Contents
+
+
+ var $headers = array();
+ var $footnotes = array();
+ var $lastlevel = 0;
+ var $node = array(0,0,0,0,0);
+ var $store = '';
+
+ var $_counter = array(); // used as global counter, introduced for table classes
+ var $_codeblock = 0; // counts the code and file blocks, used to provide download links
+
+ function getFormat(){
+ return 'xhtml';
+ }
+
+
+ function document_start() {
+ //reset some internals
+ $this->toc = array();
+ $this->headers = array();
+ }
+
+ function document_end() {
+ if ( count ($this->footnotes) > 0 ) {
+ $this->doc .= '<div class="footnotes">'.DOKU_LF;
+
+ $id = 0;
+ foreach ( $this->footnotes as $footnote ) {
+ $id++; // the number of the current footnote
+
+ // check its not a placeholder that indicates actual footnote text is elsewhere
+ if (substr($footnote, 0, 5) != "@@FNT") {
+
+ // open the footnote and set the anchor and backlink
+ $this->doc .= '<div class="fn">';
+ $this->doc .= '<sup><a href="#fnt__'.$id.'" id="fn__'.$id.'" name="fn__'.$id.'" class="fn_bot">';
+ $this->doc .= $id.')</a></sup> '.DOKU_LF;
+
+ // get any other footnotes that use the same markup
+ $alt = array_keys($this->footnotes, "@@FNT$id");
+
+ if (count($alt)) {
+ foreach ($alt as $ref) {
+ // set anchor and backlink for the other footnotes
+ $this->doc .= ', <sup><a href="#fnt__'.($ref+1).'" id="fn__'.($ref+1).'" name="fn__'.($ref+1).'" class="fn_bot">';
+ $this->doc .= ($ref+1).')</a></sup> '.DOKU_LF;
+ }
+ }
+
+ // add footnote markup and close this footnote
+ $this->doc .= $footnote;
+ $this->doc .= '</div>' . DOKU_LF;
+ }
+ }
+ $this->doc .= '</div>'.DOKU_LF;
+ }
+
+ // Prepare the TOC
+ global $conf;
+ if($this->info['toc'] && is_array($this->toc) && $conf['tocminheads'] && count($this->toc) >= $conf['tocminheads']){
+ global $TOC;
+ $TOC = $this->toc;
+ }
+
+ // make sure there are no empty paragraphs
+ $this->doc = preg_replace('#<p>\s*</p>#','',$this->doc);
+ }
+
+ function toc_additem($id, $text, $level) {
+ global $conf;
+
+ //handle TOC
+ if($level >= $conf['toptoclevel'] && $level <= $conf['maxtoclevel']){
+ $this->toc[] = html_mktocitem($id, $text, $level-$conf['toptoclevel']+1);
+ }
+ }
+
+ function header($text, $level, $pos) {
+ if(!$text) return; //skip empty headlines
+
+ $hid = $this->_headerToLink($text,true);
+
+ //only add items within configured levels
+ $this->toc_additem($hid, $text, $level);
+
+ // adjust $node to reflect hierarchy of levels
+ $this->node[$level-1]++;
+ if ($level < $this->lastlevel) {
+ for ($i = 0; $i < $this->lastlevel-$level; $i++) {
+ $this->node[$this->lastlevel-$i-1] = 0;
+ }
+ }
+ $this->lastlevel = $level;
+
+ // write the header
+ $this->doc .= DOKU_LF.'<h'.$level.'><a name="'.$hid.'" id="'.$hid.'">';
+ $this->doc .= $this->_xmlEntities($text);
+ $this->doc .= "</a></h$level>".DOKU_LF;
+ }
+
+ /**
+ * Section edit marker is replaced by an edit button when
+ * the page is editable. Replacement done in 'inc/html.php#html_secedit'
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Ben Coburn <btcoburn@silicodon.net>
+ */
+ function section_edit($start, $end, $level, $name) {
+ global $conf;
+
+ if ($start!=-1 && $level<=$conf['maxseclevel']) {
+ $name = str_replace('"', '', $name);
+ $this->doc .= '<!-- SECTION "'.$name.'" ['.$start.'-'.(($end===0)?'':$end).'] -->';
+ }
+ }
+
+ function section_open($level) {
+ $this->doc .= "<div class=\"level$level\">".DOKU_LF;
+ }
+
+ function section_close() {
+ $this->doc .= DOKU_LF.'</div>'.DOKU_LF;
+ }
+
+ function cdata($text) {
+ $this->doc .= $this->_xmlEntities($text);
+ }
+
+ function p_open() {
+ $this->doc .= DOKU_LF.'<p>'.DOKU_LF;
+ }
+
+ function p_close() {
+ $this->doc .= DOKU_LF.'</p>'.DOKU_LF;
+ }
+
+ function linebreak() {
+ $this->doc .= '<br/>'.DOKU_LF;
+ }
+
+ function hr() {
+ $this->doc .= '<hr />'.DOKU_LF;
+ }
+
+ function strong_open() {
+ $this->doc .= '<strong>';
+ }
+
+ function strong_close() {
+ $this->doc .= '</strong>';
+ }
+
+ function emphasis_open() {
+ $this->doc .= '<em>';
+ }
+
+ function emphasis_close() {
+ $this->doc .= '</em>';
+ }
+
+ function underline_open() {
+ $this->doc .= '<em class="u">';
+ }
+
+ function underline_close() {
+ $this->doc .= '</em>';
+ }
+
+ function monospace_open() {
+ $this->doc .= '<code>';
+ }
+
+ function monospace_close() {
+ $this->doc .= '</code>';
+ }
+
+ function subscript_open() {
+ $this->doc .= '<sub>';
+ }
+
+ function subscript_close() {
+ $this->doc .= '</sub>';
+ }
+
+ function superscript_open() {
+ $this->doc .= '<sup>';
+ }
+
+ function superscript_close() {
+ $this->doc .= '</sup>';
+ }
+
+ function deleted_open() {
+ $this->doc .= '<del>';
+ }
+
+ function deleted_close() {
+ $this->doc .= '</del>';
+ }
+
+ /**
+ * Callback for footnote start syntax
+ *
+ * All following content will go to the footnote instead of
+ * the document. To achieve this the previous rendered content
+ * is moved to $store and $doc is cleared
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function footnote_open() {
+
+ // move current content to store and record footnote
+ $this->store = $this->doc;
+ $this->doc = '';
+ }
+
+ /**
+ * Callback for footnote end syntax
+ *
+ * All rendered content is moved to the $footnotes array and the old
+ * content is restored from $store again
+ *
+ * @author Andreas Gohr
+ */
+ function footnote_close() {
+
+ // recover footnote into the stack and restore old content
+ $footnote = $this->doc;
+ $this->doc = $this->store;
+ $this->store = '';
+
+ // check to see if this footnote has been seen before
+ $i = array_search($footnote, $this->footnotes);
+
+ if ($i === false) {
+ // its a new footnote, add it to the $footnotes array
+ $id = count($this->footnotes)+1;
+ $this->footnotes[count($this->footnotes)] = $footnote;
+ } else {
+ // seen this one before, translate the index to an id and save a placeholder
+ $i++;
+ $id = count($this->footnotes)+1;
+ $this->footnotes[count($this->footnotes)] = "@@FNT".($i);
+ }
+
+ // output the footnote reference and link
+ $this->doc .= '<sup><a href="#fn__'.$id.'" name="fnt__'.$id.'" id="fnt__'.$id.'" class="fn_top">'.$id.')</a></sup>';
+ }
+
+ function listu_open() {
+ $this->doc .= '<ul>'.DOKU_LF;
+ }
+
+ function listu_close() {
+ $this->doc .= '</ul>'.DOKU_LF;
+ }
+
+ function listo_open() {
+ $this->doc .= '<ol>'.DOKU_LF;
+ }
+
+ function listo_close() {
+ $this->doc .= '</ol>'.DOKU_LF;
+ }
+
+ function listitem_open($level) {
+ $this->doc .= '<li class="level'.$level.'">';
+ }
+
+ function listitem_close() {
+ $this->doc .= '</li>'.DOKU_LF;
+ }
+
+ function listcontent_open() {
+ $this->doc .= '<div class="li">';
+ }
+
+ function listcontent_close() {
+ $this->doc .= '</div>'.DOKU_LF;
+ }
+
+ function unformatted($text) {
+ $this->doc .= $this->_xmlEntities($text);
+ }
+
+ /**
+ * Execute PHP code if allowed
+ *
+ * @param string $wrapper html element to wrap result if $conf['phpok'] is okff
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function php($text, $wrapper='code') {
+ global $conf;
+
+ if($conf['phpok']){
+ ob_start();
+ eval($text);
+ $this->doc .= ob_get_contents();
+ ob_end_clean();
+ } else {
+ $this->doc .= p_xhtml_cached_geshi($text, 'php', $wrapper);
+ }
+ }
+
+ function phpblock($text) {
+ $this->php($text, 'pre');
+ }
+
+ /**
+ * Insert HTML if allowed
+ *
+ * @param string $wrapper html element to wrap result if $conf['htmlok'] is okff
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function html($text, $wrapper='code') {
+ global $conf;
+
+ if($conf['htmlok']){
+ $this->doc .= $text;
+ } else {
+ $this->doc .= p_xhtml_cached_geshi($text, 'html4strict', $wrapper);
+ }
+ }
+
+ function htmlblock($text) {
+ $this->html($text, 'pre');
+ }
+
+ function quote_open() {
+ $this->doc .= '<blockquote><div class="no">'.DOKU_LF;
+ }
+
+ function quote_close() {
+ $this->doc .= '</div></blockquote>'.DOKU_LF;
+ }
+
+ function preformatted($text) {
+ $this->doc .= '<pre class="code">' . trim($this->_xmlEntities($text),"\n\r") . '</pre>'. DOKU_LF;
+ }
+
+ function file($text, $language=null, $filename=null) {
+ $this->_highlight('file',$text,$language,$filename);
+ }
+
+ function code($text, $language=null, $filename=null) {
+ $this->_highlight('code',$text,$language,$filename);
+ }
+
+ /**
+ * Use GeSHi to highlight language syntax in code and file blocks
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _highlight($type, $text, $language=null, $filename=null) {
+ global $conf;
+ global $ID;
+ global $lang;
+
+ if($filename){
+ // add icon
+ list($ext) = mimetype($filename,false);
+ $class = preg_replace('/[^_\-a-z0-9]+/i','_',$ext);
+ $class = 'mediafile mf_'.$class;
+
+ $this->doc .= '<dl class="'.$type.'">'.DOKU_LF;
+ $this->doc .= '<dt><a href="'.exportlink($ID,'code',array('codeblock'=>$this->_codeblock)).'" title="'.$lang['download'].'" class="'.$class.'">';
+ $this->doc .= hsc($filename);
+ $this->doc .= '</a></dt>'.DOKU_LF.'<dd>';
+ }
+
+ if ( is_null($language) ) {
+ $this->doc .= '<pre class="'.$type.'">'.$this->_xmlEntities($text).'</pre>'.DOKU_LF;
+ } else {
+ $class = 'code'; //we always need the code class to make the syntax highlighting apply
+ if($type != 'code') $class .= ' '.$type;
+
+ $this->doc .= "<pre class=\"$class $language\">".p_xhtml_cached_geshi($text, $language, '').'</pre>'.DOKU_LF;
+ }
+
+ if($filename){
+ $this->doc .= '</dd></dl>'.DOKU_LF;
+ }
+
+ $this->_codeblock++;
+ }
+
+ function acronym($acronym) {
+
+ if ( array_key_exists($acronym, $this->acronyms) ) {
+
+ $title = $this->_xmlEntities($this->acronyms[$acronym]);
+
+ $this->doc .= '<acronym title="'.$title
+ .'">'.$this->_xmlEntities($acronym).'</acronym>';
+
+ } else {
+ $this->doc .= $this->_xmlEntities($acronym);
+ }
+ }
+
+ function smiley($smiley) {
+ if ( array_key_exists($smiley, $this->smileys) ) {
+ $title = $this->_xmlEntities($this->smileys[$smiley]);
+ $this->doc .= '<img src="'.DOKU_BASE.'lib/images/smileys/'.$this->smileys[$smiley].
+ '" class="middle" alt="'.
+ $this->_xmlEntities($smiley).'" />';
+ } else {
+ $this->doc .= $this->_xmlEntities($smiley);
+ }
+ }
+
+ /*
+ * not used
+ function wordblock($word) {
+ if ( array_key_exists($word, $this->badwords) ) {
+ $this->doc .= '** BLEEP **';
+ } else {
+ $this->doc .= $this->_xmlEntities($word);
+ }
+ }
+ */
+
+ function entity($entity) {
+ if ( array_key_exists($entity, $this->entities) ) {
+ $this->doc .= $this->entities[$entity];
+ } else {
+ $this->doc .= $this->_xmlEntities($entity);
+ }
+ }
+
+ function multiplyentity($x, $y) {
+ $this->doc .= "$x&times;$y";
+ }
+
+ function singlequoteopening() {
+ global $lang;
+ $this->doc .= $lang['singlequoteopening'];
+ }
+
+ function singlequoteclosing() {
+ global $lang;
+ $this->doc .= $lang['singlequoteclosing'];
+ }
+
+ function apostrophe() {
+ global $lang;
+ $this->doc .= $lang['apostrophe'];
+ }
+
+ function doublequoteopening() {
+ global $lang;
+ $this->doc .= $lang['doublequoteopening'];
+ }
+
+ function doublequoteclosing() {
+ global $lang;
+ $this->doc .= $lang['doublequoteclosing'];
+ }
+
+ /**
+ */
+ function camelcaselink($link) {
+ $this->internallink($link,$link);
+ }
+
+
+ function locallink($hash, $name = NULL){
+ global $ID;
+ $name = $this->_getLinkTitle($name, $hash, $isImage);
+ $hash = $this->_headerToLink($hash);
+ $title = $ID.' &crarr;';
+ $this->doc .= '<a href="#'.$hash.'" title="'.$title.'" class="wikilink1">';
+ $this->doc .= $name;
+ $this->doc .= '</a>';
+ }
+
+ /**
+ * Render an internal Wiki Link
+ *
+ * $search,$returnonly & $linktype are not for the renderer but are used
+ * elsewhere - no need to implement them in other renderers
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function internallink($id, $name = NULL, $search=NULL,$returnonly=false,$linktype='content') {
+ global $conf;
+ global $ID;
+ // default name is based on $id as given
+ $default = $this->_simpleTitle($id);
+
+ // now first resolve and clean up the $id
+ resolve_pageid(getNS($ID),$id,$exists);
+ $name = $this->_getLinkTitle($name, $default, $isImage, $id, $linktype);
+ if ( !$isImage ) {
+ if ( $exists ) {
+ $class='wikilink1';
+ } else {
+ $class='wikilink2';
+ $link['rel']='nofollow';
+ }
+ } else {
+ $class='media';
+ }
+
+ //keep hash anchor
+ list($id,$hash) = explode('#',$id,2);
+ if(!empty($hash)) $hash = $this->_headerToLink($hash);
+
+ //prepare for formating
+ $link['target'] = $conf['target']['wiki'];
+ $link['style'] = '';
+ $link['pre'] = '';
+ $link['suf'] = '';
+ // highlight link to current page
+ if ($id == $ID) {
+ $link['pre'] = '<span class="curid">';
+ $link['suf'] = '</span>';
+ }
+ $link['more'] = '';
+ $link['class'] = $class;
+ $link['url'] = wl($id);
+ $link['name'] = $name;
+ $link['title'] = $id;
+ //add search string
+ if($search){
+ ($conf['userewrite']) ? $link['url'].='?' : $link['url'].='&amp;';
+ if(is_array($search)){
+ $search = array_map('rawurlencode',$search);
+ $link['url'] .= 's[]='.join('&amp;s[]=',$search);
+ }else{
+ $link['url'] .= 's='.rawurlencode($search);
+ }
+ }
+
+ //keep hash
+ if($hash) $link['url'].='#'.$hash;
+
+ //output formatted
+ if($returnonly){
+ return $this->_formatLink($link);
+ }else{
+ $this->doc .= $this->_formatLink($link);
+ }
+ }
+
+ function externallink($url, $name = NULL) {
+ global $conf;
+
+ $name = $this->_getLinkTitle($name, $url, $isImage);
+
+ if ( !$isImage ) {
+ $class='urlextern';
+ } else {
+ $class='media';
+ }
+
+ //prepare for formating
+ $link['target'] = $conf['target']['extern'];
+ $link['style'] = '';
+ $link['pre'] = '';
+ $link['suf'] = '';
+ $link['more'] = '';
+ $link['class'] = $class;
+ $link['url'] = $url;
+
+ $link['name'] = $name;
+ $link['title'] = $this->_xmlEntities($url);
+ if($conf['relnofollow']) $link['more'] .= ' rel="nofollow"';
+
+ //output formatted
+ $this->doc .= $this->_formatLink($link);
+ }
+
+ /**
+ */
+ function interwikilink($match, $name = NULL, $wikiName, $wikiUri) {
+ global $conf;
+
+ $link = array();
+ $link['target'] = $conf['target']['interwiki'];
+ $link['pre'] = '';
+ $link['suf'] = '';
+ $link['more'] = '';
+ $link['name'] = $this->_getLinkTitle($name, $wikiUri, $isImage);
+
+ //get interwiki URL
+ $url = $this->_resolveInterWiki($wikiName,$wikiUri);
+
+ if ( !$isImage ) {
+ $class = preg_replace('/[^_\-a-z0-9]+/i','_',$wikiName);
+ $link['class'] = "interwiki iw_$class";
+ } else {
+ $link['class'] = 'media';
+ }
+
+ //do we stay at the same server? Use local target
+ if( strpos($url,DOKU_URL) === 0 ){
+ $link['target'] = $conf['target']['wiki'];
+ }
+
+ $link['url'] = $url;
+ $link['title'] = htmlspecialchars($link['url']);
+
+ //output formatted
+ $this->doc .= $this->_formatLink($link);
+ }
+
+ /**
+ */
+ function windowssharelink($url, $name = NULL) {
+ global $conf;
+ global $lang;
+ //simple setup
+ $link['target'] = $conf['target']['windows'];
+ $link['pre'] = '';
+ $link['suf'] = '';
+ $link['style'] = '';
+
+ $link['name'] = $this->_getLinkTitle($name, $url, $isImage);
+ if ( !$isImage ) {
+ $link['class'] = 'windows';
+ } else {
+ $link['class'] = 'media';
+ }
+
+
+ $link['title'] = $this->_xmlEntities($url);
+ $url = str_replace('\\','/',$url);
+ $url = 'file:///'.$url;
+ $link['url'] = $url;
+
+ //output formatted
+ $this->doc .= $this->_formatLink($link);
+ }
+
+ function emaillink($address, $name = NULL) {
+ global $conf;
+ //simple setup
+ $link = array();
+ $link['target'] = '';
+ $link['pre'] = '';
+ $link['suf'] = '';
+ $link['style'] = '';
+ $link['more'] = '';
+
+ $name = $this->_getLinkTitle($name, '', $isImage);
+ if ( !$isImage ) {
+ $link['class']='mail JSnocheck';
+ } else {
+ $link['class']='media JSnocheck';
+ }
+
+ $address = $this->_xmlEntities($address);
+ $address = obfuscate($address);
+ $title = $address;
+
+ if(empty($name)){
+ $name = $address;
+ }
+
+ if($conf['mailguard'] == 'visible') $address = rawurlencode($address);
+
+ $link['url'] = 'mailto:'.$address;
+ $link['name'] = $name;
+ $link['title'] = $title;
+
+ //output formatted
+ $this->doc .= $this->_formatLink($link);
+ }
+
+ function internalmedia ($src, $title=NULL, $align=NULL, $width=NULL,
+ $height=NULL, $cache=NULL, $linking=NULL) {
+ global $ID;
+ list($src,$hash) = explode('#',$src,2);
+ resolve_mediaid(getNS($ID),$src, $exists);
+
+ $noLink = false;
+ $render = ($linking == 'linkonly') ? false : true;
+ $link = $this->_getMediaLinkConf($src, $title, $align, $width, $height, $cache, $render);
+
+ list($ext,$mime,$dl) = mimetype($src,false);
+ if(substr($mime,0,5) == 'image' && $render){
+ $link['url'] = ml($src,array('id'=>$ID,'cache'=>$cache),($linking=='direct'));
+ }elseif($mime == 'application/x-shockwave-flash' && $render){
+ // don't link flash movies
+ $noLink = true;
+ }else{
+ // add file icons
+ $class = preg_replace('/[^_\-a-z0-9]+/i','_',$ext);
+ $link['class'] .= ' mediafile mf_'.$class;
+ $link['url'] = ml($src,array('id'=>$ID,'cache'=>$cache),true);
+ }
+
+ if($hash) $link['url'] .= '#'.$hash;
+
+ //markup non existing files
+ if (!$exists)
+ $link['class'] .= ' wikilink2';
+
+ //output formatted
+ if ($linking == 'nolink' || $noLink) $this->doc .= $link['name'];
+ else $this->doc .= $this->_formatLink($link);
+ }
+
+ function externalmedia ($src, $title=NULL, $align=NULL, $width=NULL,
+ $height=NULL, $cache=NULL, $linking=NULL) {
+ list($src,$hash) = explode('#',$src,2);
+ $noLink = false;
+ $render = ($linking == 'linkonly') ? false : true;
+ $link = $this->_getMediaLinkConf($src, $title, $align, $width, $height, $cache, $render);
+
+ $link['url'] = ml($src,array('cache'=>$cache));
+
+ list($ext,$mime,$dl) = mimetype($src,false);
+ if(substr($mime,0,5) == 'image' && $render){
+ // link only jpeg images
+ // if ($ext != 'jpg' && $ext != 'jpeg') $noLink = true;
+ }elseif($mime == 'application/x-shockwave-flash' && $render){
+ // don't link flash movies
+ $noLink = true;
+ }else{
+ // add file icons
+ $class = preg_replace('/[^_\-a-z0-9]+/i','_',$ext);
+ $link['class'] .= ' mediafile mf_'.$class;
+ }
+
+ if($hash) $link['url'] .= '#'.$hash;
+
+ //output formatted
+ if ($linking == 'nolink' || $noLink) $this->doc .= $link['name'];
+ else $this->doc .= $this->_formatLink($link);
+ }
+
+ /**
+ * Renders an RSS feed
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function rss ($url,$params){
+ global $lang;
+ global $conf;
+
+ require_once(DOKU_INC.'inc/FeedParser.php');
+ $feed = new FeedParser();
+ $feed->set_feed_url($url);
+
+ //disable warning while fetching
+ if (!defined('DOKU_E_LEVEL')) { $elvl = error_reporting(E_ERROR); }
+ $rc = $feed->init();
+ if (!defined('DOKU_E_LEVEL')) { error_reporting($elvl); }
+
+ //decide on start and end
+ if($params['reverse']){
+ $mod = -1;
+ $start = $feed->get_item_quantity()-1;
+ $end = $start - ($params['max']);
+ $end = ($end < -1) ? -1 : $end;
+ }else{
+ $mod = 1;
+ $start = 0;
+ $end = $feed->get_item_quantity();
+ $end = ($end > $params['max']) ? $params['max'] : $end;;
+ }
+
+ $this->doc .= '<ul class="rss">';
+ if($rc){
+ for ($x = $start; $x != $end; $x += $mod) {
+ $item = $feed->get_item($x);
+ $this->doc .= '<li><div class="li">';
+ // support feeds without links
+ $lnkurl = $item->get_permalink();
+ if($lnkurl){
+ // title is escaped by SimplePie, we unescape here because it
+ // is escaped again in externallink() FS#1705
+ $this->externallink($item->get_permalink(),
+ htmlspecialchars_decode($item->get_title()));
+ }else{
+ $this->doc .= ' '.$item->get_title();
+ }
+ if($params['author']){
+ $author = $item->get_author(0);
+ if($author){
+ $name = $author->get_name();
+ if(!$name) $name = $author->get_email();
+ if($name) $this->doc .= ' '.$lang['by'].' '.$name;
+ }
+ }
+ if($params['date']){
+ $this->doc .= ' ('.$item->get_local_date($conf['dformat']).')';
+ }
+ if($params['details']){
+ $this->doc .= '<div class="detail">';
+ if($conf['htmlok']){
+ $this->doc .= $item->get_description();
+ }else{
+ $this->doc .= strip_tags($item->get_description());
+ }
+ $this->doc .= '</div>';
+ }
+
+ $this->doc .= '</div></li>';
+ }
+ }else{
+ $this->doc .= '<li><div class="li">';
+ $this->doc .= '<em>'.$lang['rssfailed'].'</em>';
+ $this->externallink($url);
+ if($conf['allowdebug']){
+ $this->doc .= '<!--'.hsc($feed->error).'-->';
+ }
+ $this->doc .= '</div></li>';
+ }
+ $this->doc .= '</ul>';
+ }
+
+ // $numrows not yet implemented
+ function table_open($maxcols = NULL, $numrows = NULL){
+ // initialize the row counter used for classes
+ $this->_counter['row_counter'] = 0;
+ $this->doc .= '<table class="inline">'.DOKU_LF;
+ }
+
+ function table_close(){
+ $this->doc .= '</table>'.DOKU_LF;
+ }
+
+ function tablerow_open(){
+ // initialize the cell counter used for classes
+ $this->_counter['cell_counter'] = 0;
+ $class = 'row' . $this->_counter['row_counter']++;
+ $this->doc .= DOKU_TAB . '<tr class="'.$class.'">' . DOKU_LF . DOKU_TAB . DOKU_TAB;
+ }
+
+ function tablerow_close(){
+ $this->doc .= DOKU_LF . DOKU_TAB . '</tr>' . DOKU_LF;
+ }
+
+ function tableheader_open($colspan = 1, $align = NULL, $rowspan = 1){
+ $class = 'class="col' . $this->_counter['cell_counter']++;
+ if ( !is_null($align) ) {
+ $class .= ' '.$align.'align';
+ }
+ $class .= '"';
+ $this->doc .= '<th ' . $class;
+ if ( $colspan > 1 ) {
+ $this->_counter['cell_counter'] += $colspan-1;
+ $this->doc .= ' colspan="'.$colspan.'"';
+ }
+ if ( $rowspan > 1 ) {
+ $this->doc .= ' rowspan="'.$rowspan.'"';
+ }
+ $this->doc .= '>';
+ }
+
+ function tableheader_close(){
+ $this->doc .= '</th>';
+ }
+
+ function tablecell_open($colspan = 1, $align = NULL, $rowspan = 1){
+ $class = 'class="col' . $this->_counter['cell_counter']++;
+ if ( !is_null($align) ) {
+ $class .= ' '.$align.'align';
+ }
+ $class .= '"';
+ $this->doc .= '<td '.$class;
+ if ( $colspan > 1 ) {
+ $this->_counter['cell_counter'] += $colspan-1;
+ $this->doc .= ' colspan="'.$colspan.'"';
+ }
+ if ( $rowspan > 1 ) {
+ $this->doc .= ' rowspan="'.$rowspan.'"';
+ }
+ $this->doc .= '>';
+ }
+
+ function tablecell_close(){
+ $this->doc .= '</td>';
+ }
+
+ //----------------------------------------------------------
+ // Utils
+
+ /**
+ * Build a link
+ *
+ * Assembles all parts defined in $link returns HTML for the link
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _formatLink($link){
+ //make sure the url is XHTML compliant (skip mailto)
+ if(substr($link['url'],0,7) != 'mailto:'){
+ $link['url'] = str_replace('&','&amp;',$link['url']);
+ $link['url'] = str_replace('&amp;amp;','&amp;',$link['url']);
+ }
+ //remove double encodings in titles
+ $link['title'] = str_replace('&amp;amp;','&amp;',$link['title']);
+
+ // be sure there are no bad chars in url or title
+ // (we can't do this for name because it can contain an img tag)
+ $link['url'] = strtr($link['url'],array('>'=>'%3E','<'=>'%3C','"'=>'%22'));
+ $link['title'] = strtr($link['title'],array('>'=>'&gt;','<'=>'&lt;','"'=>'&quot;'));
+
+ $ret = '';
+ $ret .= $link['pre'];
+ $ret .= '<a href="'.$link['url'].'"';
+ if(!empty($link['class'])) $ret .= ' class="'.$link['class'].'"';
+ if(!empty($link['target'])) $ret .= ' target="'.$link['target'].'"';
+ if(!empty($link['title'])) $ret .= ' title="'.$link['title'].'"';
+ if(!empty($link['style'])) $ret .= ' style="'.$link['style'].'"';
+ if(!empty($link['rel'])) $ret .= ' rel="'.$link['rel'].'"';
+ if(!empty($link['more'])) $ret .= ' '.$link['more'];
+ $ret .= '>';
+ $ret .= $link['name'];
+ $ret .= '</a>';
+ $ret .= $link['suf'];
+ return $ret;
+ }
+
+ /**
+ * Renders internal and external media
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _media ($src, $title=NULL, $align=NULL, $width=NULL,
+ $height=NULL, $cache=NULL, $render = true) {
+
+ $ret = '';
+
+ list($ext,$mime,$dl) = mimetype($src);
+ if(substr($mime,0,5) == 'image'){
+ // first get the $title
+ if (!is_null($title)) {
+ $title = $this->_xmlEntities($title);
+ }elseif($ext == 'jpg' || $ext == 'jpeg'){
+ //try to use the caption from IPTC/EXIF
+ require_once(DOKU_INC.'inc/JpegMeta.php');
+ $jpeg =& new JpegMeta(mediaFN($src));
+ if($jpeg !== false) $cap = $jpeg->getTitle();
+ if($cap){
+ $title = $this->_xmlEntities($cap);
+ }
+ }
+ if (!$render) {
+ // if the picture is not supposed to be rendered
+ // return the title of the picture
+ if (!$title) {
+ // just show the sourcename
+ $title = $this->_xmlEntities(basename(noNS($src)));
+ }
+ return $title;
+ }
+ //add image tag
+ $ret .= '<img src="'.ml($src,array('w'=>$width,'h'=>$height,'cache'=>$cache)).'"';
+ $ret .= ' class="media'.$align.'"';
+
+ // make left/right alignment for no-CSS view work (feeds)
+ if($align == 'right') $ret .= ' align="right"';
+ if($align == 'left') $ret .= ' align="left"';
+
+ if ($title) {
+ $ret .= ' title="' . $title . '"';
+ $ret .= ' alt="' . $title .'"';
+ }else{
+ $ret .= ' alt=""';
+ }
+
+ if ( !is_null($width) )
+ $ret .= ' width="'.$this->_xmlEntities($width).'"';
+
+ if ( !is_null($height) )
+ $ret .= ' height="'.$this->_xmlEntities($height).'"';
+
+ $ret .= ' />';
+
+ }elseif($mime == 'application/x-shockwave-flash'){
+ if (!$render) {
+ // if the flash is not supposed to be rendered
+ // return the title of the flash
+ if (!$title) {
+ // just show the sourcename
+ $title = basename(noNS($src));
+ }
+ return $this->_xmlEntities($title);
+ }
+
+ $att = array();
+ $att['class'] = "media$align";
+ if($align == 'right') $att['align'] = 'right';
+ if($align == 'left') $att['align'] = 'left';
+ $ret .= html_flashobject(ml($src,array('cache'=>$cache)),$width,$height,
+ array('quality' => 'high'),
+ null,
+ $att,
+ $this->_xmlEntities($title));
+ }elseif($title){
+ // well at least we have a title to display
+ $ret .= $this->_xmlEntities($title);
+ }else{
+ // just show the sourcename
+ $ret .= $this->_xmlEntities(basename(noNS($src)));
+ }
+
+ return $ret;
+ }
+
+ function _xmlEntities($string) {
+ return htmlspecialchars($string,ENT_QUOTES,'UTF-8');
+ }
+
+ /**
+ * Creates a linkid from a headline
+ *
+ * @param string $title The headline title
+ * @param boolean $create Create a new unique ID?
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _headerToLink($title,$create=false) {
+ if($create){
+ return sectionID($title,$this->headers);
+ }else{
+ $check = false;
+ return sectionID($title,$check);
+ }
+ }
+
+ /**
+ * Construct a title and handle images in titles
+ *
+ * @author Harry Fuecks <hfuecks@gmail.com>
+ */
+ function _getLinkTitle($title, $default, & $isImage, $id=NULL, $linktype='content') {
+ global $conf;
+
+ $isImage = false;
+ if ( is_array($title) ) {
+ $isImage = true;
+ return $this->_imageTitle($title);
+ } elseif ( is_null($title) || trim($title)=='') {
+ if (useHeading($linktype) && $id) {
+ $heading = p_get_first_heading($id,true);
+ if ($heading) {
+ return $this->_xmlEntities($heading);
+ }
+ }
+ return $this->_xmlEntities($default);
+ } else {
+ return $this->_xmlEntities($title);
+ }
+ }
+
+ /**
+ * Returns an HTML code for images used in link titles
+ *
+ * @todo Resolve namespace on internal images
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _imageTitle($img) {
+ global $ID;
+
+ // some fixes on $img['src']
+ // see internalmedia() and externalmedia()
+ list($img['src'],$hash) = explode('#',$img['src'],2);
+ if ($img['type'] == 'internalmedia') {
+ resolve_mediaid(getNS($ID),$img['src'],$exists);
+ }
+
+ return $this->_media($img['src'],
+ $img['title'],
+ $img['align'],
+ $img['width'],
+ $img['height'],
+ $img['cache']);
+ }
+
+ /**
+ * _getMediaLinkConf is a helperfunction to internalmedia() and externalmedia()
+ * which returns a basic link to a media.
+ *
+ * @author Pierre Spring <pierre.spring@liip.ch>
+ * @param string $src
+ * @param string $title
+ * @param string $align
+ * @param string $width
+ * @param string $height
+ * @param string $cache
+ * @param string $render
+ * @access protected
+ * @return array
+ */
+ function _getMediaLinkConf($src, $title, $align, $width, $height, $cache, $render)
+ {
+ global $conf;
+
+ $link = array();
+ $link['class'] = 'media';
+ $link['style'] = '';
+ $link['pre'] = '';
+ $link['suf'] = '';
+ $link['more'] = '';
+ $link['target'] = $conf['target']['media'];
+ $link['title'] = $this->_xmlEntities($src);
+ $link['name'] = $this->_media($src, $title, $align, $width, $height, $cache, $render);
+
+ return $link;
+ }
+
+
+}
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/parser/xhtmlsummary.php b/mod/dokuwiki/vendors/dokuwiki/inc/parser/xhtmlsummary.php
new file mode 100644
index 000000000..b187fef01
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/parser/xhtmlsummary.php
@@ -0,0 +1,90 @@
+<?php
+if(!defined('DOKU_INC')) die('meh.');
+require_once DOKU_INC . 'inc/parser/xhtml.php';
+
+/**
+ * The summary XHTML form selects either up to the first two paragraphs
+ * it find in a page or the first section (whichever comes first)
+ * It strips out the table of contents if one exists
+ * Section divs are not used - everything should be nested in a single
+ * div with CSS class "page"
+ * Headings have their a name link removed and section editing links
+ * removed
+ * It also attempts to capture the first heading in a page for
+ * use as the title of the page.
+ *
+ *
+ * @author Harry Fuecks <hfuecks@gmail.com>
+ * @todo Is this currently used anywhere? Should it?
+ */
+class Doku_Renderer_xhtmlsummary extends Doku_Renderer_xhtml {
+
+ // Namespace these variables to
+ // avoid clashes with parent classes
+ var $sum_paragraphs = 0;
+ var $sum_capture = true;
+ var $sum_inSection = false;
+ var $sum_summary = '';
+ var $sum_pageTitle = false;
+
+ function document_start() {
+ $this->doc .= DOKU_LF.'<div>'.DOKU_LF;
+ }
+
+ function document_end() {
+ $this->doc = $this->sum_summary;
+ $this->doc .= DOKU_LF.'</div>'.DOKU_LF;
+ }
+
+ // FIXME not supported anymore
+ function toc_open() {
+ $this->sum_summary .= $this->doc;
+ }
+
+ // FIXME not supported anymore
+ function toc_close() {
+ $this->doc = '';
+ }
+
+ function header($text, $level, $pos) {
+ if ( !$this->sum_pageTitle ) {
+ $this->info['sum_pagetitle'] = $text;
+ $this->sum_pageTitle = true;
+ }
+ $this->doc .= DOKU_LF.'<h'.$level.'>';
+ $this->doc .= $this->_xmlEntities($text);
+ $this->doc .= "</h$level>".DOKU_LF;
+ }
+
+ function section_open($level) {
+ if ( $this->sum_capture ) {
+ $this->sum_inSection = true;
+ }
+ }
+
+ function section_close() {
+ if ( $this->sum_capture && $this->sum_inSection ) {
+ $this->sum_summary .= $this->doc;
+ $this->sum_capture = false;
+ }
+ }
+
+ function p_open() {
+ if ( $this->sum_capture && $this->sum_paragraphs < 2 ) {
+ $this->sum_paragraphs++;
+ }
+ parent :: p_open();
+ }
+
+ function p_close() {
+ parent :: p_close();
+ if ( $this->sum_capture && $this->sum_paragraphs >= 2 ) {
+ $this->sum_summary .= $this->doc;
+ $this->sum_capture = false;
+ }
+ }
+
+}
+
+
+//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/parserutils.php b/mod/dokuwiki/vendors/dokuwiki/inc/parserutils.php
new file mode 100644
index 000000000..e2dd85979
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/parserutils.php
@@ -0,0 +1,672 @@
+<?php
+/**
+ * Utilities for accessing the parser
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Harry Fuecks <hfuecks@gmail.com>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+if(!defined('DOKU_INC')) die('meh.');
+require_once(DOKU_INC.'inc/confutils.php');
+require_once(DOKU_INC.'inc/pageutils.php');
+require_once(DOKU_INC.'inc/pluginutils.php');
+require_once(DOKU_INC.'inc/cache.php');
+
+/**
+ * Returns the parsed Wikitext in XHTML for the given id and revision.
+ *
+ * If $excuse is true an explanation is returned if the file
+ * wasn't found
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function p_wiki_xhtml($id, $rev='', $excuse=true){
+ $file = wikiFN($id,$rev);
+ $ret = '';
+
+ //ensure $id is in global $ID (needed for parsing)
+ global $ID;
+ $keep = $ID;
+ $ID = $id;
+
+ if($rev){
+ if(@file_exists($file)){
+ $ret = p_render('xhtml',p_get_instructions(io_readWikiPage($file,$id,$rev)),$info); //no caching on old revisions
+ }elseif($excuse){
+ $ret = p_locale_xhtml('norev');
+ }
+ }else{
+ if(@file_exists($file)){
+ $ret = p_cached_output($file,'xhtml',$id);
+ }elseif($excuse){
+ $ret = p_locale_xhtml('newpage');
+ }
+ }
+
+ //restore ID (just in case)
+ $ID = $keep;
+
+ return $ret;
+}
+
+/**
+ * Returns starting summary for a page (e.g. the first few
+ * paragraphs), marked up in XHTML.
+ *
+ * If $excuse is true an explanation is returned if the file
+ * wasn't found
+ *
+ * @param string wiki page id
+ * @param reference populated with page title from heading or page id
+ * @deprecated
+ * @author Harry Fuecks <hfuecks@gmail.com>
+ */
+function p_wiki_xhtml_summary($id, &$title, $rev='', $excuse=true){
+ $file = wikiFN($id,$rev);
+ $ret = '';
+
+ //ensure $id is in global $ID (needed for parsing)
+ global $ID;
+ $keep = $ID;
+ $ID = $id;
+
+ if($rev){
+ if(@file_exists($file)){
+ //no caching on old revisions
+ $ins = p_get_instructions(io_readWikiPage($file,$id,$rev));
+ }elseif($excuse){
+ $ret = p_locale_xhtml('norev');
+ //restore ID (just in case)
+ $ID = $keep;
+ return $ret;
+ }
+
+ }else{
+
+ if(@file_exists($file)){
+ // The XHTML for a summary is not cached so use the instruction cache
+ $ins = p_cached_instructions($file);
+ }elseif($excuse){
+ $ret = p_locale_xhtml('newpage');
+ //restore ID (just in case)
+ $ID = $keep;
+ return $ret;
+ }
+ }
+
+ $ret = p_render('xhtmlsummary',$ins,$info);
+
+ if ( $info['sum_pagetitle'] ) {
+ $title = $info['sum_pagetitle'];
+ } else {
+ $title = $id;
+ }
+
+ $ID = $keep;
+ return $ret;
+}
+
+/**
+ * Returns the specified local text in parsed format
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function p_locale_xhtml($id){
+ //fetch parsed locale
+ $html = p_cached_output(localeFN($id));
+ return $html;
+}
+
+/**
+ * *** DEPRECATED ***
+ *
+ * use p_cached_output()
+ *
+ * Returns the given file parsed to XHTML
+ *
+ * Uses and creates a cachefile
+ *
+ * @deprecated
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @todo rewrite to use mode instead of hardcoded XHTML
+ */
+function p_cached_xhtml($file){
+ return p_cached_output($file);
+}
+
+/**
+ * Returns the given file parsed into the requested output format
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Chris Smith <chris@jalakai.co.uk>
+ */
+function p_cached_output($file, $format='xhtml', $id='') {
+ global $conf;
+
+ $cache = new cache_renderer($id, $file, $format);
+ if ($cache->useCache()) {
+ $parsed = $cache->retrieveCache(false);
+ if($conf['allowdebug'] && $format=='xhtml') $parsed .= "\n<!-- cachefile {$cache->cache} used -->\n";
+ } else {
+ $parsed = p_render($format, p_cached_instructions($file,false,$id), $info);
+
+ if ($info['cache']) {
+ $cache->storeCache($parsed); //save cachefile
+ if($conf['allowdebug'] && $format=='xhtml') $parsed .= "\n<!-- no cachefile used, but created {$cache->cache} -->\n";
+ }else{
+ $cache->removeCache(); //try to delete cachefile
+ if($conf['allowdebug'] && $format=='xhtml') $parsed .= "\n<!-- no cachefile used, caching forbidden -->\n";
+ }
+ }
+
+ return $parsed;
+}
+
+/**
+ * Returns the render instructions for a file
+ *
+ * Uses and creates a serialized cache file
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function p_cached_instructions($file,$cacheonly=false,$id='') {
+ global $conf;
+ static $run = null;
+ if(is_null($run)) $run = array();
+
+ $cache = new cache_instructions($id, $file);
+
+ if ($cacheonly || $cache->useCache() || isset($run[$file])) {
+ return $cache->retrieveCache();
+ } else if (@file_exists($file)) {
+ // no cache - do some work
+ $ins = p_get_instructions(io_readWikiPage($file,$id));
+ if ($cache->storeCache($ins)) {
+ $run[$file] = true; // we won't rebuild these instructions in the same run again
+ } else {
+ msg('Unable to save cache file. Hint: disk full; file permissions; safe_mode setting.',-1);
+ }
+ return $ins;
+ }
+
+ return null;
+}
+
+/**
+ * turns a page into a list of instructions
+ *
+ * @author Harry Fuecks <hfuecks@gmail.com>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function p_get_instructions($text){
+
+ $modes = p_get_parsermodes();
+
+ // Create the parser
+ $Parser = & new Doku_Parser();
+
+ // Add the Handler
+ $Parser->Handler = & new Doku_Handler();
+
+ //add modes to parser
+ foreach($modes as $mode){
+ $Parser->addMode($mode['mode'],$mode['obj']);
+ }
+
+ // Do the parsing
+ trigger_event('PARSER_WIKITEXT_PREPROCESS', $text);
+ $p = $Parser->parse($text);
+ // dbg($p);
+ return $p;
+}
+
+/**
+ * returns the metadata of a page
+ *
+ * @author Esther Brunner <esther@kaffeehaus.ch>
+ */
+function p_get_metadata($id, $key=false, $render=false){
+ global $ID, $INFO, $cache_metadata;
+
+ // cache the current page
+ // Benchmarking shows the current page's metadata is generally the only page metadata
+ // accessed several times. This may catch a few other pages, but that shouldn't be an issue.
+ $cache = ($ID == $id);
+ $meta = p_read_metadata($id, $cache);
+
+ // metadata has never been rendered before - do it! (but not for non-existent pages)
+ if ($render && !isset($meta['current']['description']['abstract']) && page_exists($id)){
+ $meta = p_render_metadata($id, $meta);
+ io_saveFile(metaFN($id, '.meta'), serialize($meta));
+
+ // sync cached copies, including $INFO metadata
+ if (!empty($cache_metadata[$id])) $cache_metadata[$id] = $meta;
+ if (!empty($INFO) && ($id == $INFO['id'])) { $INFO['meta'] = $meta['current']; }
+ }
+
+ // filter by $key
+ if ($key){
+ list($key, $subkey) = explode(' ', $key, 2);
+ $subkey = trim($subkey);
+
+ if ($subkey) {
+ return isset($meta['current'][$key][$subkey]) ? $meta['current'][$key][$subkey] : null;
+ }
+
+ return isset($meta['current'][$key]) ? $meta['current'][$key] : null;
+ }
+
+ return $meta['current'];
+}
+
+/**
+ * sets metadata elements of a page
+ *
+ * @author Esther Brunner <esther@kaffeehaus.ch>
+ */
+function p_set_metadata($id, $data, $render=false, $persistent=true){
+ if (!is_array($data)) return false;
+
+ global $ID;
+
+ // cache the current page
+ $cache = ($ID == $id);
+ $orig = p_read_metadata($id, $cache);
+
+ // render metadata first?
+ $meta = $render ? p_render_metadata($id, $orig) : $orig;
+
+ // now add the passed metadata
+ $protected = array('description', 'date', 'contributor');
+ foreach ($data as $key => $value){
+
+ // be careful with sub-arrays of $meta['relation']
+ if ($key == 'relation'){
+
+ foreach ($value as $subkey => $subvalue){
+ $meta['current'][$key][$subkey] = !empty($meta['current'][$key][$subkey]) ? array_merge($meta['current'][$key][$subkey], $subvalue) : $subvalue;
+ if ($persistent)
+ $meta['persistent'][$key][$subkey] = !empty($meta['persistent'][$key][$subkey]) ? array_merge($meta['persistent'][$key][$subkey], $subvalue) : $subvalue;
+ }
+
+ // be careful with some senisitive arrays of $meta
+ } elseif (in_array($key, $protected)){
+
+ // these keys, must have subkeys - a legitimate value must be an array
+ if (is_array($value)) {
+ $meta['current'][$key] = !empty($meta['current'][$key]) ? array_merge($meta['current'][$key],$value) : $value;
+
+ if ($persistent) {
+ $meta['persistent'][$key] = !empty($meta['persistent'][$key]) ? array_merge($meta['persistent'][$key],$value) : $value;
+ }
+ }
+
+ // no special treatment for the rest
+ } else {
+ $meta['current'][$key] = $value;
+ if ($persistent) $meta['persistent'][$key] = $value;
+ }
+ }
+
+ // save only if metadata changed
+ if ($meta == $orig) return true;
+
+ // sync cached copies, including $INFO metadata
+ global $cache_metadata, $INFO;
+
+ if (!empty($cache_metadata[$id])) $cache_metadata[$id] = $meta;
+ if (!empty($INFO) && ($id == $INFO['id'])) { $INFO['meta'] = $meta['current']; }
+
+ return io_saveFile(metaFN($id, '.meta'), serialize($meta));
+}
+
+/**
+ * Purges the non-persistant part of the meta data
+ * used on page deletion
+ *
+ * @author Michael Klier <chi@chimeric.de>
+ */
+function p_purge_metadata($id) {
+ $metafn = metaFN('id', '.meta');
+ $meta = p_read_metadata($id);
+ foreach($meta['current'] as $key => $value) {
+ if(is_array($meta[$key])) {
+ $meta['current'][$key] = array();
+ } else {
+ $meta['current'][$key] = '';
+ }
+ }
+ return io_saveFile(metaFN($id, '.meta'), serialize($meta));
+}
+
+/**
+ * read the metadata from source/cache for $id
+ * (internal use only - called by p_get_metadata & p_set_metadata)
+ *
+ * this function also converts the metadata from the original format to
+ * the current format ('current' & 'persistent' arrays)
+ *
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ *
+ * @param string $id absolute wiki page id
+ * @param bool $cache whether or not to cache metadata in memory
+ * (only use for metadata likely to be accessed several times)
+ *
+ * @return array metadata
+ */
+function p_read_metadata($id,$cache=false) {
+ global $cache_metadata;
+
+ if (isset($cache_metadata[(string)$id])) return $cache_metadata[(string)$id];
+
+ $file = metaFN($id, '.meta');
+ $meta = @file_exists($file) ? unserialize(io_readFile($file, false)) : array('current'=>array(),'persistent'=>array());
+
+ // convert $meta from old format to new (current+persistent) format
+ if (!isset($meta['current'])) {
+ $meta = array('current'=>$meta,'persistent'=>$meta);
+
+ // remove non-persistent keys
+ unset($meta['persistent']['title']);
+ unset($meta['persistent']['description']['abstract']);
+ unset($meta['persistent']['description']['tableofcontents']);
+ unset($meta['persistent']['relation']['haspart']);
+ unset($meta['persistent']['relation']['references']);
+ unset($meta['persistent']['date']['valid']);
+
+ if (empty($meta['persistent']['description'])) unset($meta['persistent']['description']);
+ if (empty($meta['persistent']['relation'])) unset($meta['persistent']['relation']);
+ if (empty($meta['persistent']['date'])) unset($meta['persistent']['date']);
+
+ // save converted metadata
+ io_saveFile($file, serialize($meta));
+ }
+
+ if ($cache) {
+ $cache_metadata[(string)$id] = $meta;
+ }
+
+ return $meta;
+}
+
+/**
+ * renders the metadata of a page
+ *
+ * @author Esther Brunner <esther@kaffeehaus.ch>
+ */
+function p_render_metadata($id, $orig){
+ // make sure the correct ID is in global ID
+ global $ID;
+ $keep = $ID;
+ $ID = $id;
+
+ // add an extra key for the event - to tell event handlers the page whose metadata this is
+ $orig['page'] = $id;
+ $evt = new Doku_Event('PARSER_METADATA_RENDER', $orig);
+ if ($evt->advise_before()) {
+
+ require_once DOKU_INC."inc/parser/metadata.php";
+
+ // get instructions
+ $instructions = p_cached_instructions(wikiFN($id),false,$id);
+ if(is_null($instructions)){
+ $ID = $keep;
+ return null; // something went wrong with the instructions
+ }
+
+ // set up the renderer
+ $renderer = & new Doku_Renderer_metadata();
+ $renderer->meta = $orig['current'];
+ $renderer->persistent = $orig['persistent'];
+
+ // loop through the instructions
+ foreach ($instructions as $instruction){
+ // execute the callback against the renderer
+ call_user_func_array(array(&$renderer, $instruction[0]), $instruction[1]);
+ }
+
+ $evt->result = array('current'=>$renderer->meta,'persistent'=>$renderer->persistent);
+ }
+ $evt->advise_after();
+
+ $ID = $keep;
+ return $evt->result;
+}
+
+/**
+ * returns all available parser syntax modes in correct order
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function p_get_parsermodes(){
+ global $conf;
+
+ //reuse old data
+ static $modes = null;
+ if($modes != null){
+ return $modes;
+ }
+
+ //import parser classes and mode definitions
+ require_once DOKU_INC . 'inc/parser/parser.php';
+
+ // we now collect all syntax modes and their objects, then they will
+ // be sorted and added to the parser in correct order
+ $modes = array();
+
+ // add syntax plugins
+ $pluginlist = plugin_list('syntax');
+ if(count($pluginlist)){
+ global $PARSER_MODES;
+ $obj = null;
+ foreach($pluginlist as $p){
+ if(!$obj =& plugin_load('syntax',$p)) continue; //attempt to load plugin into $obj
+ $PARSER_MODES[$obj->getType()][] = "plugin_$p"; //register mode type
+ //add to modes
+ $modes[] = array(
+ 'sort' => $obj->getSort(),
+ 'mode' => "plugin_$p",
+ 'obj' => $obj,
+ );
+ unset($obj); //remove the reference
+ }
+ }
+
+ // add default modes
+ $std_modes = array('listblock','preformatted','notoc','nocache',
+ 'header','table','linebreak','footnote','hr',
+ 'unformatted','php','html','code','file','quote',
+ 'internallink','rss','media','externallink',
+ 'emaillink','windowssharelink','eol');
+ if($conf['typography']){
+ $std_modes[] = 'quotes';
+ $std_modes[] = 'multiplyentity';
+ }
+ foreach($std_modes as $m){
+ $class = "Doku_Parser_Mode_$m";
+ $obj = new $class();
+ $modes[] = array(
+ 'sort' => $obj->getSort(),
+ 'mode' => $m,
+ 'obj' => $obj
+ );
+ }
+
+ // add formatting modes
+ $fmt_modes = array('strong','emphasis','underline','monospace',
+ 'subscript','superscript','deleted');
+ foreach($fmt_modes as $m){
+ $obj = new Doku_Parser_Mode_formatting($m);
+ $modes[] = array(
+ 'sort' => $obj->getSort(),
+ 'mode' => $m,
+ 'obj' => $obj
+ );
+ }
+
+ // add modes which need files
+ $obj = new Doku_Parser_Mode_smiley(array_keys(getSmileys()));
+ $modes[] = array('sort' => $obj->getSort(), 'mode' => 'smiley','obj' => $obj );
+ $obj = new Doku_Parser_Mode_acronym(array_keys(getAcronyms()));
+ $modes[] = array('sort' => $obj->getSort(), 'mode' => 'acronym','obj' => $obj );
+ $obj = new Doku_Parser_Mode_entity(array_keys(getEntities()));
+ $modes[] = array('sort' => $obj->getSort(), 'mode' => 'entity','obj' => $obj );
+
+ // add optional camelcase mode
+ if($conf['camelcase']){
+ $obj = new Doku_Parser_Mode_camelcaselink();
+ $modes[] = array('sort' => $obj->getSort(), 'mode' => 'camelcaselink','obj' => $obj );
+ }
+
+ //sort modes
+ usort($modes,'p_sort_modes');
+
+ return $modes;
+}
+
+/**
+ * Callback function for usort
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function p_sort_modes($a, $b){
+ if($a['sort'] == $b['sort']) return 0;
+ return ($a['sort'] < $b['sort']) ? -1 : 1;
+}
+
+/**
+ * Renders a list of instruction to the specified output mode
+ *
+ * In the $info array are informations from the renderer returned
+ *
+ * @author Harry Fuecks <hfuecks@gmail.com>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function p_render($mode,$instructions,&$info){
+ if(is_null($instructions)) return '';
+
+ $Renderer =& p_get_renderer($mode);
+ if (is_null($Renderer)) return null;
+
+ $Renderer->reset();
+
+ $Renderer->smileys = getSmileys();
+ $Renderer->entities = getEntities();
+ $Renderer->acronyms = getAcronyms();
+ $Renderer->interwiki = getInterwiki();
+
+ // Loop through the instructions
+ foreach ( $instructions as $instruction ) {
+ // Execute the callback against the Renderer
+ call_user_func_array(array(&$Renderer, $instruction[0]),$instruction[1]);
+ }
+
+ //set info array
+ $info = $Renderer->info;
+
+ // Post process and return the output
+ $data = array($mode,& $Renderer->doc);
+ trigger_event('RENDERER_CONTENT_POSTPROCESS',$data);
+ return $Renderer->doc;
+}
+
+function & p_get_renderer($mode) {
+ global $conf, $plugin_controller;
+
+ $rname = !empty($conf['renderer_'.$mode]) ? $conf['renderer_'.$mode] : $mode;
+
+ // try default renderer first:
+ $file = DOKU_INC."inc/parser/$rname.php";
+ if(@file_exists($file)){
+ require_once $file;
+ $rclass = "Doku_Renderer_$rname";
+
+ if ( !class_exists($rclass) ) {
+ trigger_error("Unable to resolve render class $rclass",E_USER_WARNING);
+ msg("Renderer '$rname' for $mode not valid",-1);
+ return null;
+ }
+ $Renderer = & new $rclass();
+ }else{
+ // Maybe a plugin/component is available?
+ list($plugin, $component) = $plugin_controller->_splitName($rname);
+ if (!$plugin_controller->isdisabled($plugin)){
+ $Renderer =& $plugin_controller->load('renderer',$rname, true);
+ }
+
+ if(is_null($Renderer)){
+ msg("No renderer '$rname' found for mode '$mode'",-1);
+ return null;
+ }
+ }
+
+ return $Renderer;
+}
+
+/**
+ * Gets the first heading from a file
+ *
+ * @param string $id dokuwiki page id
+ * @param bool $render rerender if first heading not known
+ * default: true -- must be set to false for calls from the metadata renderer to
+ * protects against loops and excessive resource usage when pages
+ * for which only a first heading is required will attempt to
+ * render metadata for all the pages for which they require first
+ * headings ... and so on.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function p_get_first_heading($id, $render=true){
+ return p_get_metadata($id,'title',$render);
+}
+
+/**
+ * Wrapper for GeSHi Code Highlighter, provides caching of its output
+ *
+ * @param string $code source code to be highlighted
+ * @param string $language language to provide highlighting
+ * @param string $wrapper html element to wrap the returned highlighted text
+ *
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function p_xhtml_cached_geshi($code, $language, $wrapper='pre') {
+ global $conf, $config_cascade;
+ $language = strtolower($language);
+
+ // remove any leading or trailing blank lines
+ $code = preg_replace('/^\s*?\n|\s*?\n$/','',$code);
+
+ $cache = getCacheName($language.$code,".code");
+ $ctime = @filemtime($cache);
+ if($ctime && !$_REQUEST['purge'] &&
+ $ctime > filemtime(DOKU_INC.'inc/geshi.php') && // geshi changed
+ $ctime > @filemtime(DOKU_INC.'inc/geshi/'.$language.'.php') && // language syntax definition changed
+ $ctime > filemtime(reset($config_cascade['main']['default']))){ // dokuwiki changed
+ $highlighted_code = io_readFile($cache, false);
+
+ } else {
+
+ require_once(DOKU_INC . 'inc/geshi.php');
+
+ $geshi = new GeSHi($code, $language, DOKU_INC . 'inc/geshi');
+ $geshi->set_encoding('utf-8');
+ $geshi->enable_classes();
+ $geshi->set_header_type(GESHI_HEADER_PRE);
+ $geshi->set_link_target($conf['target']['extern']);
+
+ // remove GeSHi's wrapper element (we'll replace it with our own later)
+ // we need to use a GeSHi wrapper to avoid <BR> throughout the highlighted text
+ $highlighted_code = trim(preg_replace('!^<pre[^>]*>|</pre>$!','',$geshi->parse_code()),"\n\r");
+ io_saveFile($cache,$highlighted_code);
+ }
+
+ // add a wrapper element if required
+ if ($wrapper) {
+ return "<$wrapper class=\"code $language\">$highlighted_code</$wrapper>";
+ } else {
+ return $highlighted_code;
+ }
+}
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/plugin.php b/mod/dokuwiki/vendors/dokuwiki/inc/plugin.php
new file mode 100644
index 000000000..364534739
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/plugin.php
@@ -0,0 +1,248 @@
+<?php
+/**
+ * DokuWiki Plugin base class
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ */
+
+/**
+ * Do not inherit directly from this class, instead inherit from the specialized
+ * ones in lib/plugin
+ */
+class DokuWiki_Plugin {
+
+ var $localised = false; // set to true by setupLocale() after loading language dependent strings
+ var $lang = array(); // array to hold language dependent strings, best accessed via ->getLang()
+ var $configloaded = false; // set to true by loadConfig() after loading plugin configuration variables
+ var $conf = array(); // array to hold plugin settings, best accessed via ->getConf()
+
+ /**
+ * General Info
+ *
+ * Needs to return a associative array with the following values:
+ *
+ * author - Author of the plugin
+ * email - Email address to contact the author
+ * date - Last modified date of the plugin in YYYY-MM-DD format
+ * name - Name of the plugin
+ * desc - Short description of the plugin (Text only)
+ * url - Website with more information on the plugin (eg. syntax description)
+ */
+ function getInfo(){
+ $parts = explode('_',get_class($this));
+ $info = DOKU_PLUGIN.'/'.$parts[2].'/plugin.info.txt';
+ if(@file_exists($info)) return confToHash($info);
+ trigger_error('getInfo() not implemented in '.get_class($this).' and '.$info.' not found', E_USER_WARNING);
+ }
+
+ // plugin introspection methods
+ // extract from class name, format = <plugin type>_plugin_<name>[_<component name>]
+ function getPluginType() {
+ list($t) = explode('_', get_class($this), 2);
+ return $t;
+ }
+ function getPluginName() {
+ list($t, $p, $n) = explode('_', get_class($this), 4);
+ return $n;
+ }
+ function getPluginComponent() {
+ list($t, $p, $n, $c) = explode('_', get_class($this), 4);
+ return (isset($c)?$c:'');
+ }
+
+ // localisation methods
+ /**
+ * getLang($id)
+ * use this function to access plugin language strings
+ * to try to minimise unnecessary loading of the strings when the plugin doesn't require them
+ * e.g. when info plugin is querying plugins for information about themselves.
+ *
+ * @param $id id of the string to be retrieved
+ * @return string string in appropriate language or english if not available
+ */
+ function getLang($id) {
+ if (!$this->localised) $this->setupLocale();
+
+ return (isset($this->lang[$id]) ? $this->lang[$id] : '');
+ }
+
+ /**
+ * locale_xhtml($id)
+ *
+ * retrieve a language dependent file and pass to xhtml renderer for display
+ * plugin equivalent of p_locale_xhtml()
+ *
+ * @param $id id of language dependent wiki page
+ * @return string parsed contents of the wiki page in xhtml format
+ */
+ function locale_xhtml($id) {
+ return p_cached_output($this->localFN($id));
+ }
+
+ /**
+ * localFN($id)
+ * prepends appropriate path for a language dependent filename
+ * plugin equivalent of localFN()
+ */
+ function localFN($id) {
+ global $conf;
+ $plugin = $this->getPluginName();
+ $file = DOKU_PLUGIN.$plugin.'/lang/'.$conf['lang'].'/'.$id.'.txt';
+ if(!@file_exists($file)){
+ //fall back to english
+ $file = DOKU_PLUGIN.$plugin.'/lang/en/'.$id.'.txt';
+ }
+ return $file;
+ }
+
+ /**
+ * setupLocale()
+ * reads all the plugins language dependent strings into $this->lang
+ * this function is automatically called by getLang()
+ */
+ function setupLocale() {
+ if ($this->localised) return;
+
+ global $conf; // definitely don't invoke "global $lang"
+ $path = DOKU_PLUGIN.$this->getPluginName().'/lang/';
+
+ $lang = array();
+
+ // don't include once, in case several plugin components require the same language file
+ @include($path.'en/lang.php');
+ if ($conf['lang'] != 'en') @include($path.$conf['lang'].'/lang.php');
+
+ $this->lang = $lang;
+ $this->localised = true;
+ }
+
+ // configuration methods
+ /**
+ * getConf($setting)
+ *
+ * use this function to access plugin configuration variables
+ */
+ function getConf($setting){
+
+ if (!$this->configloaded){ $this->loadConfig(); }
+
+ return $this->conf[$setting];
+ }
+
+ /**
+ * loadConfig()
+ * merges the plugin's default settings with any local settings
+ * this function is automatically called through getConf()
+ */
+ function loadConfig(){
+ global $conf;
+
+ $defaults = $this->readDefaultSettings();
+ $plugin = $this->getPluginName();
+
+ foreach ($defaults as $key => $value) {
+ if (isset($conf['plugin'][$plugin][$key])) continue;
+ $conf['plugin'][$plugin][$key] = $value;
+ }
+
+ $this->configloaded = true;
+ $this->conf =& $conf['plugin'][$plugin];
+ }
+
+ /**
+ * read the plugin's default configuration settings from conf/default.php
+ * this function is automatically called through getConf()
+ *
+ * @return array setting => value
+ */
+ function readDefaultSettings() {
+
+ $path = DOKU_PLUGIN.$this->getPluginName().'/conf/';
+ $conf = array();
+
+ if (@file_exists($path.'default.php')) {
+ include($path.'default.php');
+ }
+
+ return $conf;
+ }
+
+ /**
+ * Loads a given helper plugin (if enabled)
+ *
+ * @author Esther Brunner <wikidesign@gmail.com>
+ *
+ * @param $name name of plugin to load
+ * @param $msg message to display in case the plugin is not available
+ *
+ * @return object helper plugin object
+ */
+ function loadHelper($name, $msg){
+ if (!plugin_isdisabled($name)){
+ $obj =& plugin_load('helper',$name);
+ }else{
+ $obj = null;
+ }
+ if (is_null($obj) && $msg) msg("Helper plugin $name is not available or invalid.",-1);
+ return $obj;
+ }
+
+ // standard functions for outputing email addresses and links
+ // use these to avoid having to duplicate code to produce links in line with the installation configuration
+
+ /**
+ * email
+ * standardised function to generate an email link according to obfuscation settings
+ */
+ function email($email, $name='', $class='', $more='') {
+ if (!$email) return $name;
+ $email = obfuscate($email);
+ if (!$name) $name = $email;
+ $class = "class='".($class ? $class : 'mail')."'";
+ return "<a href='mailto:$email' $class title='$email' $more>$name</a>";
+ }
+
+ /**
+ * external_link
+ * standardised function to generate an external link according to conf settings
+ */
+ function external_link($link, $title='', $class='', $target='', $more='') {
+ global $conf;
+
+ $link = htmlentities($link);
+ if (!$title) $title = $link;
+ if (!$target) $target = $conf['target']['extern'];
+ if ($conf['relnofollow']) $more .= ' rel="nofollow"';
+
+ if ($class) $class = " class='$class'";
+ if ($target) $target = " target='$target'";
+ if ($more) $more = " ".trim($more);
+
+ return "<a href='$link'$class$target$more>$title</a>";
+ }
+
+ /**
+ * output text string through the parser, allows dokuwiki markup to be used
+ * very ineffecient for small pieces of data - try not to use
+ */
+ function render($text, $format='xhtml') {
+ return p_render($format, p_get_instructions($text),$info);
+ }
+
+ /**
+ * Allow the plugin to prevent DokuWiki creating a second instance of itself
+ *
+ * @return bool true if the plugin can not be instantiated more than once
+ */
+ function isSingleton() {
+ return false;
+ }
+
+ // deprecated functions
+ function plugin_localFN($id) { return $this->localFN($id); }
+ function plugin_locale_xhtml($id) { return $this->locale_xhtml($id); }
+ function plugin_email($e, $n='', $c='', $m='') { return $this->email($e, $n, $c, $m); }
+ function plugin_link($l, $t='', $c='', $to='', $m='') { return $this->external_link($l, $t, $c, $to, $m); }
+ function plugin_render($t, $f='xhtml') { return $this->render($t, $f); }
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/plugincontroller.class.php b/mod/dokuwiki/vendors/dokuwiki/inc/plugincontroller.class.php
new file mode 100644
index 000000000..4400a4187
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/plugincontroller.class.php
@@ -0,0 +1,172 @@
+<?php
+/**
+ * Class to encapsulate access to dokuwiki plugins
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ */
+
+// plugin related constants
+if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
+
+class Doku_Plugin_Controller {
+
+ var $list_enabled = array();
+ var $list_disabled = array();
+ var $list_bytype = array();
+
+ function Doku_Plugin_Controller() {
+ $this->_populateMasterList();
+ }
+
+ /**
+ * Returns a list of available plugins of given type
+ *
+ * @param $type string, plugin_type name;
+ * the type of plugin to return,
+ * use empty string for all types
+ * @param $all bool;
+ * false to only return enabled plugins,
+ * true to return both enabled and disabled plugins
+ *
+ * @return array of plugin names
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function getList($type='',$all=false){
+
+ // request the complete list
+ if (!$type) {
+ return $all ? array_merge($this->list_enabled,$this->list_disabled) : $this->list_enabled;
+ }
+
+ if (!isset($this->list_bytype[$type]['enabled'])) {
+ $this->list_bytype[$type]['enabled'] = $this->_getListByType($type,true);
+ }
+ if ($all && !isset($this->list_bytype[$type]['disabled'])) {
+ $this->list_bytype[$type]['disabled'] = $this->_getListByType($type,false);
+ }
+
+ return $all ? array_merge($this->list_bytype[$type]['enabled'],$this->list_bytype[$type]['disabled']) : $this->list_bytype[$type]['enabled'];
+ }
+
+ /**
+ * Loads the given plugin and creates an object of it
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ *
+ * @param $type string type of plugin to load
+ * @param $name string name of the plugin to load
+ * @param $new bool true to return a new instance of the plugin, false to use an already loaded instance
+ * @return objectreference the plugin object or null on failure
+ */
+ function &load($type,$name,$new=false){
+ //we keep all loaded plugins available in global scope for reuse
+ global $DOKU_PLUGINS;
+
+ //plugin already loaded?
+ if(!empty($DOKU_PLUGINS[$type][$name])){
+ if ($new && !$DOKU_PLUGINS[$type][$name]->isSingleton()) {
+ $class = $type.'_plugin_'.$name;
+ return class_exists($class) ? new $class : null;
+ } else {
+ return $DOKU_PLUGINS[$type][$name];
+ }
+ }
+
+ //try to load the wanted plugin file
+ list($plugin,$component) = $this->_splitName($name);
+ $dir = $this->get_directory($plugin);
+ $file = $component ? "$type/$component.php" : "$type.php";
+
+ if(!is_file(DOKU_PLUGIN."$dir/$file")){
+ return null;
+ }
+
+ if (!include_once(DOKU_PLUGIN."$dir/$file")) {
+ return null;
+ }
+
+ //construct class and instantiate
+ $class = $type.'_plugin_'.$name;
+ if (!class_exists($class)) return null;
+
+ $DOKU_PLUGINS[$type][$name] = new $class;
+ return $DOKU_PLUGINS[$type][$name];
+ }
+
+ function isdisabled($plugin) {
+ return (array_search($plugin, $this->list_enabled) === false);
+ }
+
+ function enable($plugin) {
+ if (array_search($plugin, $this->list_disabled) !== false) {
+ return @unlink(DOKU_PLUGIN.$plugin.'/disabled');
+ }
+ return false;
+ }
+
+ function disable($plugin) {
+ if (array_search($plugin, $this->list_enabled) !== false) {
+ return @touch(DOKU_PLUGIN.$plugin.'/disabled');
+ }
+ return false;
+ }
+
+ function get_directory($plugin) {
+ return $plugin;
+ }
+
+ function _populateMasterList() {
+ if ($dh = opendir(DOKU_PLUGIN)) {
+ while (false !== ($plugin = readdir($dh))) {
+ if ($plugin == '.' || $plugin == '..' || $plugin == 'tmp') continue;
+ if (is_file(DOKU_PLUGIN.$plugin)) continue;
+
+ if (substr($plugin,-9) == '.disabled') {
+ // the plugin was disabled by rc2009-01-26
+ // disabling mechanism was changed back very soon again
+ // to keep everything simple we just skip the plugin completely
+ }elseif(@file_exists(DOKU_PLUGIN.$plugin.'/disabled')){
+ $this->list_disabled[] = $plugin;
+ } else {
+ $this->list_enabled[] = $plugin;
+ }
+ }
+ }
+ }
+
+ function _getListByType($type, $enabled) {
+ $master_list = $enabled ? $this->list_enabled : $this->list_disabled;
+
+ $plugins = array();
+ foreach ($master_list as $plugin) {
+ $dir = $this->get_directory($plugin);
+
+ if (@file_exists(DOKU_PLUGIN."$dir/$type.php")){
+ $plugins[] = $plugin;
+ } else {
+ if ($dp = @opendir(DOKU_PLUGIN."$dir/$type/")) {
+ while (false !== ($component = readdir($dp))) {
+ if (substr($component,0,1) == '.' || strtolower(substr($component, -4)) != ".php") continue;
+ if (is_file(DOKU_PLUGIN."$dir/$type/$component")) {
+ $plugins[] = $plugin.'_'.substr($component, 0, -4);
+ }
+ }
+ closedir($dp);
+ }
+ }
+ }
+
+ return $plugins;
+ }
+
+ function _splitName($name) {
+ if (array_search($name, $this->list_enabled + $this->list_disabled) === false) {
+ return explode('_',$name,2);
+ }
+
+ return array($name,'');
+ }
+
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/pluginutils.php b/mod/dokuwiki/vendors/dokuwiki/inc/pluginutils.php
new file mode 100644
index 000000000..8294d1ec8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/pluginutils.php
@@ -0,0 +1,47 @@
+<?php
+/**
+ * Utilities for handling plugins
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+// plugin related constants
+if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
+require_once(DOKU_INC.'inc/plugincontroller.class.php');
+
+$plugin_types = array('admin','syntax','action','renderer', 'helper');
+
+global $plugin_controller_class, $plugin_controller;
+if (empty($plugin_controller_class)) $plugin_controller_class = 'Doku_Plugin_Controller';
+
+$plugin_controller = new $plugin_controller_class();
+
+/**
+ * Original plugin functions, remain for backwards compatibility
+ */
+function plugin_list($type='',$all=false) {
+ global $plugin_controller;
+ return $plugin_controller->getList($type,$all);
+}
+function &plugin_load($type,$name,$new=false) {
+ global $plugin_controller;
+ return $plugin_controller->load($type,$name,$new);
+}
+function plugin_isdisabled($plugin) {
+ global $plugin_controller;
+ return $plugin_controller->isdisabled($plugin);
+}
+function plugin_enable($plugin) {
+ global $plugin_controller;
+ return $plugin_controller->enable($plugin);
+}
+function plugin_disable($plugin) {
+ global $plugin_controller;
+ return $plugin_controller->disable($plugin);
+}
+function plugin_directory($plugin) {
+ global $plugin_controller;
+ return $plugin_controller->get_directory($plugin);
+}
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/search.php b/mod/dokuwiki/vendors/dokuwiki/inc/search.php
new file mode 100644
index 000000000..2b9a51fb3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/search.php
@@ -0,0 +1,630 @@
+<?php
+/**
+ * DokuWiki search functions
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+if(!defined('DOKU_INC')) die('meh.');
+require_once(DOKU_INC.'inc/common.php');
+
+/**
+ * recurse direcory
+ *
+ * This function recurses into a given base directory
+ * and calls the supplied function for each file and directory
+ *
+ * @param array ref $data The results of the search are stored here
+ * @param string $base Where to start the search
+ * @param callback $func Callback (function name or arayy with object,method)
+ * @param string $dir Current directory beyond $base
+ * @param int $lvl Recursion Level
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function search(&$data,$base,$func,$opts,$dir='',$lvl=1){
+ $dirs = array();
+ $files = array();
+
+ //read in directories and files
+ $dh = @opendir($base.'/'.$dir);
+ if(!$dh) return;
+ while(($file = readdir($dh)) !== false){
+ if(preg_match('/^[\._]/',$file)) continue; //skip hidden files and upper dirs
+ if(is_dir($base.'/'.$dir.'/'.$file)){
+ $dirs[] = $dir.'/'.$file;
+ continue;
+ }
+ $files[] = $dir.'/'.$file;
+ }
+ closedir($dh);
+ sort($files);
+ sort($dirs);
+
+ //give directories to userfunction then recurse
+ foreach($dirs as $dir){
+ if (call_user_func_array($func, array(&$data,$base,$dir,'d',$lvl,$opts))){
+ search($data,$base,$func,$opts,$dir,$lvl+1);
+ }
+ }
+ //now handle the files
+ foreach($files as $file){
+ call_user_func_array($func, array(&$data,$base,$file,'f',$lvl,$opts));
+ }
+}
+
+/**
+ * Wrapper around call_user_func_array.
+ *
+ * @deprecated
+ */
+function search_callback($func,&$data,$base,$file,$type,$lvl,$opts){
+ return call_user_func_array($func, array(&$data,$base,$file,$type,$lvl,$opts));
+}
+
+/**
+ * The following functions are userfunctions to use with the search
+ * function above. This function is called for every found file or
+ * directory. When a directory is given to the function it has to
+ * decide if this directory should be traversed (true) or not (false)
+ * The function has to accept the following parameters:
+ *
+ * &$data - Reference to the result data structure
+ * $base - Base usually $conf['datadir']
+ * $file - current file or directory relative to $base
+ * $type - Type either 'd' for directory or 'f' for file
+ * $lvl - Current recursion depht
+ * $opts - option array as given to search()
+ *
+ * return values for files are ignored
+ *
+ * All functions should check the ACL for document READ rights
+ * namespaces (directories) are NOT checked as this would break
+ * the recursion (You can have an nonreadable dir over a readable
+ * one deeper nested) also make sure to check the file type (for example
+ * in case of lockfiles).
+ */
+
+/**
+ * Searches for pages beginning with the given query
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function search_qsearch(&$data,$base,$file,$type,$lvl,$opts){
+ $opts = array(
+ 'idmatch' => '(^|:)'.preg_quote($opts['query'],'/').'/',
+ 'listfiles' => true,
+ 'pagesonly' => true,
+ );
+ return search_universal($data,$base,$file,$type,$lvl,$opts);
+}
+
+/**
+ * Build the browsable index of pages
+ *
+ * $opts['ns'] is the current namespace
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function search_index(&$data,$base,$file,$type,$lvl,$opts){
+ global $conf;
+ $return = true;
+
+ $item = array();
+
+ if($type == 'd' && !preg_match('#^'.$file.'(/|$)#','/'.$opts['ns'])){
+ //add but don't recurse
+ $return = false;
+ }elseif($type == 'f' && ($opts['nofiles'] || substr($file,-4) != '.txt')){
+ //don't add
+ return false;
+ }
+
+ $id = pathID($file);
+
+ if($type=='d' && $conf['sneaky_index'] && auth_quickaclcheck($id.':') < AUTH_READ){
+ return false;
+ }
+
+ //check hidden
+ if(isHiddenPage($id)){
+ return false;
+ }
+
+ //check ACL
+ if($type=='f' && auth_quickaclcheck($id) < AUTH_READ){
+ return false;
+ }
+
+ $data[]=array( 'id' => $id,
+ 'type' => $type,
+ 'level' => $lvl,
+ 'open' => $return );
+ return $return;
+}
+
+/**
+ * List all namespaces
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function search_namespaces(&$data,$base,$file,$type,$lvl,$opts){
+ $opts = array(
+ 'listdirs' => true,
+ );
+ return search_universal($data,$base,$file,$type,$lvl,$opts);
+}
+
+/**
+ * List all mediafiles in a namespace
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function search_media(&$data,$base,$file,$type,$lvl,$opts){
+
+ //we do nothing with directories
+ if($type == 'd') {
+ if(!$opts['depth']) return true; // recurse forever
+ $depth = substr_count($file,'/');
+ if($depth >= $opts['depth']) return false; // depth reached
+ return true;
+ }
+
+ $info = array();
+ $info['id'] = pathID($file,true);
+ if($info['id'] != cleanID($info['id'])){
+ if($opts['showmsg'])
+ msg(hsc($info['id']).' is not a valid file name for DokuWiki - skipped',-1);
+ return false; // skip non-valid files
+ }
+
+ //check ACL for namespace (we have no ACL for mediafiles)
+ $info['perm'] = auth_quickaclcheck(getNS($info['id']).':*');
+ if(!$opts['skipacl'] && $info['perm'] < AUTH_READ){
+ return false;
+ }
+
+ //check pattern filter
+ if($opts['pattern'] && !@preg_match($opts['pattern'], $info['id'])){
+ return false;
+ }
+
+ $info['file'] = basename($file);
+ $info['size'] = filesize($base.'/'.$file);
+ $info['mtime'] = filemtime($base.'/'.$file);
+ $info['writable'] = is_writable($base.'/'.$file);
+ if(preg_match("/\.(jpe?g|gif|png)$/",$file)){
+ $info['isimg'] = true;
+ require_once(DOKU_INC.'inc/JpegMeta.php');
+ $info['meta'] = new JpegMeta($base.'/'.$file);
+ }else{
+ $info['isimg'] = false;
+ }
+ if($opts['hash']){
+ $info['hash'] = md5(io_readFile(wikiFN($info['id']),false));
+ }
+
+ $data[] = $info;
+
+ return false;
+}
+
+/**
+ * This function just lists documents (for RSS namespace export)
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function search_list(&$data,$base,$file,$type,$lvl,$opts){
+ //we do nothing with directories
+ if($type == 'd') return false;
+ //only search txt files
+ if(substr($file,-4) == '.txt'){
+ //check ACL
+ $id = pathID($file);
+ if(auth_quickaclcheck($id) < AUTH_READ){
+ return false;
+ }
+ $data[]['id'] = $id;
+ }
+ return false;
+}
+
+/**
+ * Quicksearch for searching matching pagenames
+ *
+ * $opts['query'] is the search query
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function search_pagename(&$data,$base,$file,$type,$lvl,$opts){
+ //we do nothing with directories
+ if($type == 'd') return true;
+ //only search txt files
+ if(substr($file,-4) != '.txt') return true;
+
+ //simple stringmatching
+ if (!empty($opts['query'])){
+ if(strpos($file,$opts['query']) !== false){
+ //check ACL
+ $id = pathID($file);
+ if(auth_quickaclcheck($id) < AUTH_READ){
+ return false;
+ }
+ $data[]['id'] = $id;
+ }
+ }
+ return true;
+}
+
+/**
+ * Just lists all documents
+ *
+ * $opts['depth'] recursion level, 0 for all
+ * $opts['hash'] do md5 sum of content?
+ * $opts['skipacl'] list everything regardless of ACL
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function search_allpages(&$data,$base,$file,$type,$lvl,$opts){
+ //we do nothing with directories
+ if($type == 'd'){
+ if(!$opts['depth']) return true; // recurse forever
+ $parts = explode('/',ltrim($file,'/'));
+ if(count($parts) == $opts['depth']) return false; // depth reached
+ return true;
+ }
+
+ //only search txt files
+ if(substr($file,-4) != '.txt') return true;
+
+ $item['id'] = pathID($file);
+ if(!$opts['skipacl'] && auth_quickaclcheck($item['id']) < AUTH_READ){
+ return false;
+ }
+
+ $item['rev'] = filemtime($base.'/'.$file);
+ $item['mtime'] = $item['rev'];
+ $item['size'] = filesize($base.'/'.$file);
+ if($opts['hash']){
+ $item['hash'] = md5(trim(rawWiki($item['id'])));
+ }
+
+ $data[] = $item;
+ return true;
+}
+
+/**
+ * Search for backlinks to a given page
+ *
+ * $opts['ns'] namespace of the page
+ * $opts['name'] name of the page without namespace
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @deprecated Replaced by ft_backlinks()
+ */
+function search_backlinks(&$data,$base,$file,$type,$lvl,$opts){
+ //we do nothing with directories
+ if($type == 'd') return true;
+ //only search txt files
+ if(substr($file,-4) != '.txt') return true;
+
+ //absolute search id
+ $sid = cleanID($opts['ns'].':'.$opts['name']);
+
+ //current id and namespace
+ $cid = pathID($file);
+ $cns = getNS($cid);
+
+ //check ACL
+ if(auth_quickaclcheck($cid) < AUTH_READ){
+ return false;
+ }
+
+ //fetch instructions
+ require_once(DOKU_INC.'inc/parserutils.php');
+ $instructions = p_cached_instructions($base.$file,true);
+ if(is_null($instructions)) return false;
+
+ //check all links for match
+ foreach($instructions as $ins){
+ if($ins[0] == 'internallink' || ($conf['camelcase'] && $ins[0] == 'camelcaselink') ){
+ $mid = $ins[1][0];
+ resolve_pageid($cns,$mid,$exists); //exists is not used
+ if($mid == $sid){
+ //we have a match - finish
+ $data[]['id'] = $cid;
+ break;
+ }
+ }
+ }
+
+ return false;
+}
+
+/**
+ * Fulltextsearch
+ *
+ * $opts['query'] is the search query
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @deprecated - fulltext indexer is used instead
+ */
+function search_fulltext(&$data,$base,$file,$type,$lvl,$opts){
+ //we do nothing with directories
+ if($type == 'd') return true;
+ //only search txt files
+ if(substr($file,-4) != '.txt') return true;
+
+ //check ACL
+ $id = pathID($file);
+ if(auth_quickaclcheck($id) < AUTH_READ){
+ return false;
+ }
+
+ //create regexp from queries
+ $poswords = array();
+ $negwords = array();
+ $qpreg = preg_split('/\s+/',$opts['query']);
+
+ foreach($qpreg as $word){
+ switch(substr($word,0,1)){
+ case '-':
+ if(strlen($word) > 1){ // catch single '-'
+ array_push($negwords,preg_quote(substr($word,1),'#'));
+ }
+ break;
+ case '+':
+ if(strlen($word) > 1){ // catch single '+'
+ array_push($poswords,preg_quote(substr($word,1),'#'));
+ }
+ break;
+ default:
+ array_push($poswords,preg_quote($word,'#'));
+ break;
+ }
+ }
+
+ // a search without any posword is useless
+ if (!count($poswords)) return true;
+
+ $reg = '^(?=.*?'.join(')(?=.*?',$poswords).')';
+ $reg .= count($negwords) ? '((?!'.join('|',$negwords).').)*$' : '.*$';
+ search_regex($data,$base,$file,$reg,$poswords);
+ return true;
+ }
+
+ /**
+ * Reference search
+ * This fuction searches for existing references to a given media file
+ * and returns an array with the found pages. It doesn't pay any
+ * attention to ACL permissions to find every reference. The caller
+ * must check if the user has the appropriate rights to see the found
+ * page and eventually have to prevent the result from displaying.
+ *
+ * @param array $data Reference to the result data structure
+ * @param string $base Base usually $conf['datadir']
+ * @param string $file current file or directory relative to $base
+ * @param char $type Type either 'd' for directory or 'f' for file
+ * @param int $lvl Current recursion depht
+ * @param mixed $opts option array as given to search()
+ *
+ * $opts['query'] is the demanded media file name
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+function search_reference(&$data,$base,$file,$type,$lvl,$opts){
+ global $conf;
+
+ //we do nothing with directories
+ if($type == 'd') return true;
+
+ //only search txt files
+ if(substr($file,-4) != '.txt') return true;
+
+ //we finish after 'cnt' references found. The return value
+ //'false' will skip subdirectories to speed search up.
+ $cnt = $conf['refshow'] > 0 ? $conf['refshow'] : 1;
+ if(count($data) >= $cnt) return false;
+
+ $reg = '\{\{ *\:?'.$opts['query'].' *(\|.*)?\}\}';
+ search_regex($data,$base,$file,$reg,array($opts['query']));
+ return true;
+}
+
+/* ------------- helper functions below -------------- */
+
+/**
+ * fulltext search helper
+ * searches a text file with a given regular expression
+ * no ACL checks are performed. This have to be done by
+ * the caller if necessary.
+ *
+ * @param array $data reference to array for results
+ * @param string $base base directory
+ * @param string $file file name to search in
+ * @param string $reg regular expression to search for
+ * @param array $words words that should be marked in the results
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ *
+ * @deprecated - fulltext indexer is used instead
+ */
+function search_regex(&$data,$base,$file,$reg,$words){
+
+ //get text
+ $text = io_readfile($base.'/'.$file);
+ //lowercase text (u modifier does not help with case)
+ $lctext = utf8_strtolower($text);
+
+ //do the fulltext search
+ $matches = array();
+ if($cnt = preg_match_all('#'.$reg.'#usi',$lctext,$matches)){
+ //this is not the best way for snippet generation but the fastest I could find
+ $q = $words[0]; //use first word for snippet creation
+ $p = utf8_strpos($lctext,$q);
+ $f = $p - 100;
+ $l = utf8_strlen($q) + 200;
+ if($f < 0) $f = 0;
+ $snippet = '<span class="search_sep"> ... </span>'.
+ htmlspecialchars(utf8_substr($text,$f,$l)).
+ '<span class="search_sep"> ... </span>';
+ $mark = '('.join('|', $words).')';
+ $snippet = preg_replace('#'.$mark.'#si','<strong class="search_hit">\\1</strong>',$snippet);
+
+ $data[] = array(
+ 'id' => pathID($file),
+ 'count' => preg_match_all('#'.$mark.'#usi',$lctext,$matches),
+ 'poswords' => join(' ',$words),
+ 'snippet' => $snippet,
+ );
+ }
+
+ return true;
+}
+
+
+/**
+ * fulltext sort
+ *
+ * Callback sort function for use with usort to sort the data
+ * structure created by search_fulltext. Sorts descending by count
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function sort_search_fulltext($a,$b){
+ if($a['count'] > $b['count']){
+ return -1;
+ }elseif($a['count'] < $b['count']){
+ return 1;
+ }else{
+ return strcmp($a['id'],$b['id']);
+ }
+}
+
+/**
+ * translates a document path to an ID
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @todo move to pageutils
+ */
+function pathID($path,$keeptxt=false){
+ $id = utf8_decodeFN($path);
+ $id = str_replace('/',':',$id);
+ if(!$keeptxt) $id = preg_replace('#\.txt$#','',$id);
+ $id = preg_replace('#^:+#','',$id);
+ $id = preg_replace('#:+$#','',$id);
+ return $id;
+}
+
+
+/**
+ * This is a very universal callback for the search() function, replacing
+ * many of the former individual functions at the cost of a more complex
+ * setup.
+ *
+ * How the function behaves, depends on the options passed in the $opts
+ * array, where the following settings can be used.
+ *
+ * depth int recursion depth. 0 for unlimited
+ * keeptxt bool keep .txt extension for IDs
+ * listfiles bool include files in listing
+ * listdirs bool include namespaces in listing
+ * pagesonly bool restrict files to pages
+ * skipacl bool do not check for READ permission
+ * sneakyacl bool don't recurse into nonreadable dirs
+ * hash bool create MD5 hash for files
+ * meta bool return file metadata
+ * filematch string match files against this regexp
+ * idmatch string match full ID against this regexp
+ * dirmatch string match directory against this regexp when adding
+ * nsmatch string match namespace against this regexp when adding
+ * recmatch string match directory against this regexp when recursing
+ * showmsg bool warn about non-ID files
+ * showhidden bool show hidden files too
+ * firsthead bool return first heading for pages
+ *
+ * @author Andreas Gohr <gohr@cosmocode.de>
+ */
+function search_universal(&$data,$base,$file,$type,$lvl,$opts){
+ $item = array();
+ $return = true;
+
+ // get ID and check if it is a valid one
+ $item['id'] = pathID($file);
+ if($item['id'] != cleanID($item['id'])){
+ if($opts['showmsg'])
+ msg(hsc($item['id']).' is not a valid file name for DokuWiki - skipped',-1);
+ return false; // skip non-valid files
+ }
+ $item['ns'] = getNS($item['id']);
+
+ if($type == 'd') {
+ // decide if to recursion into this directory is wanted
+ if(!$opts['depth']){
+ $return = true; // recurse forever
+ }else{
+ $depth = substr_count($file,'/');
+ if($depth >= $opts['depth']){
+ $return = false; // depth reached
+ }else{
+ $return = true;
+ }
+ }
+ if($return && !preg_match('/'.$opts['recmatch'].'/',$file)){
+ $return = false; // doesn't match
+ }
+ }
+
+ // check ACL
+ if(!$opts['skipacl']){
+ if($type == 'd'){
+ $item['perm'] = auth_quickaclcheck($item['id'].':*');
+ }else{
+ $item['perm'] = auth_quickaclcheck($item['id']); //FIXME check namespace for media files
+ }
+ }else{
+ $item['perm'] = AUTH_DELETE;
+ }
+
+ // are we done here maybe?
+ if($type == 'd'){
+ if(!$opts['listdirs']) return $return;
+ if(!$opts['skipacl'] && $opts['sneakyacl'] && $item['perm'] < AUTH_READ) return false; //neither list nor recurse
+ if($opts['dirmatch'] && !preg_match('/'.$opts['dirmatch'].'/',$file)) return $return;
+ if($opts['nsmatch'] && !preg_match('/'.$opts['nsmatch'].'/',$item['ns'])) return $return;
+ }else{
+ if(!$opts['listfiles']) return $return;
+ if(!$opts['skipacl'] && $item['perm'] < AUTH_READ) return $return;
+ if($opts['pagesonly'] && (substr($file,-4) != '.txt')) return $return;
+ if(!$conf['showhidden'] && isHiddenPage($id)) return $return;
+ if($opts['filematch'] && !preg_match('/'.$opts['filematch'].'/',$file)) return $return;
+ if($opts['idmatch'] && !preg_match('/'.$opts['idmatch'].'/',$item['id'])) return $return;
+ }
+
+ // still here? prepare the item
+ $item['type'] = $type;
+ $item['level'] = $lvl;
+ $item['open'] = $return;
+
+ if($opts['meta']){
+ $item['file'] = basename($file);
+ $item['size'] = filesize($base.'/'.$file);
+ $item['mtime'] = filemtime($base.'/'.$file);
+ $item['rev'] = $item['mtime'];
+ $item['writable'] = is_writable($base.'/'.$file);
+ $item['executable'] = is_executable($base.'/'.$file);
+ }
+
+ if($type == 'f'){
+ if($opts['hash']) $item['hash'] = md5(io_readFile($base.'/'.$file,false));
+ if($opts['firsthead']) $item['title'] = p_get_first_heading($item['id'],false);
+ }
+
+ // finally add the item
+ $data[] = $item;
+ return $return;
+}
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/template.php b/mod/dokuwiki/vendors/dokuwiki/inc/template.php
new file mode 100644
index 000000000..b7790060c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/template.php
@@ -0,0 +1,1413 @@
+<?php
+/**
+ * DokuWiki template functions
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+if(!defined('DOKU_INC')) die('meh.');
+
+/**
+ * Returns the path to the given template, uses
+ * default one if the custom version doesn't exist.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function template($tpl){
+ global $conf;
+
+ if(@is_readable(DOKU_INC.'lib/tpl/'.$conf['template'].'/'.$tpl))
+ return DOKU_INC.'lib/tpl/'.$conf['template'].'/'.$tpl;
+
+ return DOKU_INC.'lib/tpl/default/'.$tpl;
+}
+
+/**
+ * Print the content
+ *
+ * This function is used for printing all the usual content
+ * (defined by the global $ACT var) by calling the appropriate
+ * outputfunction(s) from html.php
+ *
+ * Everything that doesn't use the main template file isn't
+ * handled by this function. ACL stuff is not done here either.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+function tpl_content($prependTOC=true) {
+ global $ACT;
+ global $INFO;
+ $INFO['prependTOC'] = $prependTOC;
+
+ ob_start();
+ trigger_event('TPL_ACT_RENDER',$ACT,'tpl_content_core');
+ $html_output = ob_get_clean();
+ trigger_event('TPL_CONTENT_DISPLAY',$html_output,'ptln');
+
+ return !empty($html_output);
+}
+
+function tpl_content_core(){
+ global $ACT;
+ global $TEXT;
+ global $PRE;
+ global $SUF;
+ global $SUM;
+ global $IDX;
+
+ switch($ACT){
+ case 'show':
+ html_show();
+ break;
+ case 'preview':
+ html_edit($TEXT);
+ html_show($TEXT);
+ break;
+ case 'recover':
+ html_edit($TEXT);
+ break;
+ case 'edit':
+ html_edit();
+ break;
+ case 'draft':
+ html_draft();
+ break;
+ case 'wordblock':
+ html_edit($TEXT,'wordblock');
+ break;
+ case 'search':
+ html_search();
+ break;
+ case 'revisions':
+ $first = isset($_REQUEST['first']) ? intval($_REQUEST['first']) : 0;
+ html_revisions($first);
+ break;
+ case 'diff':
+ html_diff();
+ break;
+ case 'recent':
+ if (is_array($_REQUEST['first'])) {
+ $_REQUEST['first'] = array_keys($_REQUEST['first']);
+ $_REQUEST['first'] = $_REQUEST['first'][0];
+ }
+ $first = is_numeric($_REQUEST['first']) ? intval($_REQUEST['first']) : 0;
+ html_recent($first);
+ break;
+ case 'index':
+ html_index($IDX); #FIXME can this be pulled from globals? is it sanitized correctly?
+ break;
+ case 'backlink':
+ html_backlinks();
+ break;
+ case 'conflict':
+ html_conflict(con($PRE,$TEXT,$SUF),$SUM);
+ html_diff(con($PRE,$TEXT,$SUF),false);
+ break;
+ case 'locked':
+ html_locked();
+ html_edit();
+ break;
+ case 'login':
+ html_login();
+ break;
+ case 'register':
+ html_register();
+ break;
+ case 'resendpwd':
+ html_resendpwd();
+ break;
+ case 'denied':
+ print p_locale_xhtml('denied');
+ break;
+ case 'profile' :
+ html_updateprofile();
+ break;
+ case 'admin':
+ tpl_admin();
+ break;
+ default:
+ $evt = new Doku_Event('TPL_ACT_UNKNOWN',$ACT);
+ if ($evt->advise_before())
+ msg("Failed to handle command: ".hsc($ACT),-1);
+ $evt->advise_after();
+ unset($evt);
+ return false;
+ }
+ return true;
+}
+
+/**
+ * Places the TOC where the function is called
+ *
+ * If you use this you most probably want to call tpl_content with
+ * a false argument
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function tpl_toc($return=false){
+ global $TOC;
+ global $ACT;
+ global $ID;
+ global $REV;
+ global $INFO;
+ global $conf;
+ $toc = array();
+
+ if(is_array($TOC)){
+ // if a TOC was prepared in global scope, always use it
+ $toc = $TOC;
+ }elseif(($ACT == 'show' || substr($ACT,0,6) == 'export') && !$REV && $INFO['exists']){
+ // get TOC from metadata, render if neccessary
+ $meta = p_get_metadata($ID, false, true);
+ if(isset($meta['internal']['toc'])){
+ $tocok = $meta['internal']['toc'];
+ }else{
+ $tocok = true;
+ }
+ $toc = $meta['description']['tableofcontents'];
+ if(!$tocok || !is_array($toc) || !$conf['tocminheads'] || count($toc) < $conf['tocminheads']){
+ $toc = array();
+ }
+ }elseif($ACT == 'admin'){
+ // try to load admin plugin TOC FIXME: duplicates code from tpl_admin
+ $plugin = null;
+ $page = get_input('dokupage');
+ if (!empty($page)) {
+ $pluginlist = plugin_list('admin');
+ if (in_array($page, $pluginlist)) {
+ // attempt to load the plugin
+ $plugin =& plugin_load('admin',$page);
+ }
+ }
+ if ( ($plugin !== null) &&
+ (!$plugin->forAdminOnly() || $INFO['isadmin']) ){
+ $toc = $plugin->getTOC();
+ $TOC = $toc; // avoid later rebuild
+ }
+ }
+
+ trigger_event('TPL_TOC_RENDER', $toc, NULL, false);
+ $html = html_TOC($toc);
+ if($return) return $html;
+ echo $html;
+}
+
+/**
+ * Handle the admin page contents
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function tpl_admin(){
+ global $INFO;
+ global $TOC;
+
+ $plugin = null;
+ $page = get_input('dokupage');
+ if (!empty($page)) {
+ $pluginlist = plugin_list('admin');
+
+ if (in_array($page, $pluginlist)) {
+
+ // attempt to load the plugin
+ $plugin =& plugin_load('admin',$page);
+ }
+ }
+
+ if ($plugin !== null){
+ if($plugin->forAdminOnly() && !$INFO['isadmin']){
+ msg('For admins only',-1);
+ html_admin();
+ }else{
+ if(!is_array($TOC)) $TOC = $plugin->getTOC(); //if TOC wasn't requested yet
+ if($INFO['prependTOC']) tpl_toc();
+ $plugin->html();
+ }
+ }else{
+ html_admin();
+ }
+ return true;
+}
+
+/**
+ * Print the correct HTML meta headers
+ *
+ * This has to go into the head section of your template.
+ *
+ * @triggers TPL_METAHEADER_OUTPUT
+ * @param boolean $alt Should feeds and alternative format links be added?
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function tpl_metaheaders($alt=true){
+ global $ID;
+ global $REV;
+ global $INFO;
+ global $JSINFO;
+ global $ACT;
+ global $QUERY;
+ global $lang;
+ global $conf;
+ $it=2;
+
+ // prepare the head array
+ $head = array();
+
+ // prepare seed for js and css
+ $tseed = 0;
+ $depends = getConfigFiles('main');
+ foreach($depends as $f) {
+ $time = @filemtime($f);
+ if($time > $tseed) $tseed = $time;
+ }
+
+ // the usual stuff
+ $head['meta'][] = array( 'name'=>'generator', 'content'=>'DokuWiki '.getVersion() );
+ $head['link'][] = array( 'rel'=>'search', 'type'=>'application/opensearchdescription+xml',
+ 'href'=>DOKU_BASE.'lib/exe/opensearch.php', 'title'=>$conf['title'] );
+ $head['link'][] = array( 'rel'=>'start', 'href'=>DOKU_BASE );
+ if(actionOK('index')){
+ $head['link'][] = array( 'rel'=>'contents', 'href'=> wl($ID,'do=index',false,'&'),
+ 'title'=>$lang['btn_index'] );
+ }
+
+ if($alt){
+ $head['link'][] = array( 'rel'=>'alternate', 'type'=>'application/rss+xml',
+ 'title'=>'Recent Changes', 'href'=>DOKU_BASE.'feed.php');
+ $head['link'][] = array( 'rel'=>'alternate', 'type'=>'application/rss+xml',
+ 'title'=>'Current Namespace',
+ 'href'=>DOKU_BASE.'feed.php?mode=list&ns='.$INFO['namespace']);
+ if(($ACT == 'show' || $ACT == 'search') && $INFO['writable']){
+ $head['link'][] = array( 'rel'=>'edit',
+ 'title'=>$lang['btn_edit'],
+ 'href'=> wl($ID,'do=edit',false,'&'));
+ }
+
+ if($ACT == 'search'){
+ $head['link'][] = array( 'rel'=>'alternate', 'type'=>'application/rss+xml',
+ 'title'=>'Search Result',
+ 'href'=>DOKU_BASE.'feed.php?mode=search&q='.$QUERY);
+ }
+
+ if(actionOK('export_xhtml')){
+ $head['link'][] = array( 'rel'=>'alternate', 'type'=>'text/html', 'title'=>'Plain HTML',
+ 'href'=>exportlink($ID, 'xhtml', '', false, '&'));
+ }
+
+ if(actionOK('export_raw')){
+ $head['link'][] = array( 'rel'=>'alternate', 'type'=>'text/plain', 'title'=>'Wiki Markup',
+ 'href'=>exportlink($ID, 'raw', '', false, '&'));
+ }
+ }
+
+ // setup robot tags apropriate for different modes
+ if( ($ACT=='show' || $ACT=='export_xhtml') && !$REV){
+ if($INFO['exists']){
+ //delay indexing:
+ if((time() - $INFO['lastmod']) >= $conf['indexdelay']){
+ $head['meta'][] = array( 'name'=>'robots', 'content'=>'index,follow');
+ }else{
+ $head['meta'][] = array( 'name'=>'robots', 'content'=>'noindex,nofollow');
+ }
+ $head['link'][] = array( 'rel'=>'canonical', 'href'=>wl($ID,'',true,'&') );
+ }else{
+ $head['meta'][] = array( 'name'=>'robots', 'content'=>'noindex,follow');
+ }
+ }elseif(defined('DOKU_MEDIADETAIL')){
+ $head['meta'][] = array( 'name'=>'robots', 'content'=>'index,follow');
+ }else{
+ $head['meta'][] = array( 'name'=>'robots', 'content'=>'noindex,nofollow');
+ }
+
+ // set metadata
+ if($ACT == 'show' || $ACT=='export_xhtml'){
+ // date of modification
+ if($REV){
+ $head['meta'][] = array( 'name'=>'date', 'content'=>date('Y-m-d\TH:i:sO',$REV));
+ }else{
+ $head['meta'][] = array( 'name'=>'date', 'content'=>date('Y-m-d\TH:i:sO',$INFO['lastmod']));
+ }
+
+ // keywords (explicit or implicit)
+ if(!empty($INFO['meta']['subject'])){
+ $head['meta'][] = array( 'name'=>'keywords', 'content'=>join(',',$INFO['meta']['subject']));
+ }else{
+ $head['meta'][] = array( 'name'=>'keywords', 'content'=>str_replace(':',',',$ID));
+ }
+ }
+
+ // load stylesheets
+ $head['link'][] = array('rel'=>'stylesheet', 'media'=>'all', 'type'=>'text/css',
+ 'href'=>DOKU_BASE.'lib/exe/css.php?s=all&t='.$conf['template'].'&tseed='.$tseed);
+ $head['link'][] = array('rel'=>'stylesheet', 'media'=>'screen', 'type'=>'text/css',
+ 'href'=>DOKU_BASE.'lib/exe/css.php?t='.$conf['template'].'&tseed='.$tseed);
+ $head['link'][] = array('rel'=>'stylesheet', 'media'=>'print', 'type'=>'text/css',
+ 'href'=>DOKU_BASE.'lib/exe/css.php?s=print&t='.$conf['template'].'&tseed='.$tseed);
+
+ // make $INFO and other vars available to JavaScripts
+ require_once(DOKU_INC.'inc/JSON.php');
+ $json = new JSON();
+ $script = "var NS='".$INFO['namespace']."';";
+ if($conf['useacl'] && $_SERVER['REMOTE_USER']){
+ require_once(DOKU_INC.'inc/toolbar.php');
+ $script .= "var SIG='".toolbar_signature()."';";
+ }
+ $script .= 'var JSINFO = '.$json->encode($JSINFO).';';
+ $head['script'][] = array( 'type'=>'text/javascript', 'charset'=>'utf-8',
+ '_data'=> $script);
+
+ // load external javascript
+ $head['script'][] = array( 'type'=>'text/javascript', 'charset'=>'utf-8', '_data'=>'',
+ 'src'=>DOKU_BASE.'lib/exe/js.php'.'?tseed='.$tseed);
+
+
+ // trigger event here
+ trigger_event('TPL_METAHEADER_OUTPUT',$head,'_tpl_metaheaders_action',true);
+ return true;
+}
+
+/**
+ * prints the array build by tpl_metaheaders
+ *
+ * $data is an array of different header tags. Each tag can have multiple
+ * instances. Attributes are given as key value pairs. Values will be HTML
+ * encoded automatically so they should be provided as is in the $data array.
+ *
+ * For tags having a body attribute specify the the body data in the special
+ * attribute '_data'. This field will NOT BE ESCAPED automatically.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function _tpl_metaheaders_action($data){
+ foreach($data as $tag => $inst){
+ foreach($inst as $attr){
+ echo '<',$tag,' ',buildAttributes($attr);
+ if(isset($attr['_data']) || $tag == 'script'){
+ if($tag == 'script' && $attr['_data'])
+ $attr['_data'] = "<!--//--><![CDATA[//><!--\n".
+ $attr['_data'].
+ "\n//--><!]]>";
+
+ echo '>',$attr['_data'],'</',$tag,'>';
+ }else{
+ echo '/>';
+ }
+ echo "\n";
+ }
+ }
+}
+
+/**
+ * Print a link
+ *
+ * Just builds a link.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function tpl_link($url,$name,$more='',$return=false){
+ $out = '<a href="'.$url.'" ';
+ if ($more) $out .= ' '.$more;
+ $out .= ">$name</a>";
+ if ($return) return $out;
+ print $out;
+ return true;
+}
+
+/**
+ * Prints a link to a WikiPage
+ *
+ * Wrapper around html_wikilink
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function tpl_pagelink($id,$name=NULL){
+ print html_wikilink($id,$name);
+ return true;
+}
+
+/**
+ * get the parent page
+ *
+ * Tries to find out which page is parent.
+ * returns false if none is available
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function tpl_getparent($id){
+ global $conf;
+ $parent = getNS($id).':';
+ resolve_pageid('',$parent,$exists);
+ if($parent == $id) {
+ $pos = strrpos (getNS($id),':');
+ $parent = substr($parent,0,$pos).':';
+ resolve_pageid('',$parent,$exists);
+ if($parent == $id) return false;
+ }
+ return $parent;
+}
+
+/**
+ * Print one of the buttons
+ *
+ * Available Buttons are
+ *
+ * edit - edit/create/show/draft button
+ * history - old revisions
+ * recent - recent changes
+ * login - login/logout button - if ACL enabled
+ * profile - user profile button (if logged in)
+ * index - The index
+ * admin - admin page - if enough rights
+ * top - a back to top button
+ * back - a back to parent button - if available
+ * backlink - links to the list of backlinks
+ * subscription- subscribe/unsubscribe button
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+function tpl_button($type,$return=false){
+ global $ACT;
+ global $ID;
+ global $REV;
+ global $NS;
+ global $INFO;
+ global $conf;
+ global $auth;
+
+ // check disabled actions and fix the badly named ones
+ $ctype = $type;
+ if($type == 'history') $ctype='revisions';
+ if(!actionOK($ctype)) return false;
+
+ $out = '';
+ switch($type){
+ case 'edit':
+ #most complicated type - we need to decide on current action
+ if($ACT == 'show' || $ACT == 'search'){
+ if($INFO['writable']){
+ if(!empty($INFO['draft'])){
+ $out .= html_btn('draft',$ID,'e',array('do' => 'draft'),'post');
+ }else{
+ if($INFO['exists']){
+ $out .= html_btn('edit',$ID,'e',array('do' => 'edit','rev' => $REV),'post');
+ }else{
+ $out .= html_btn('create',$ID,'e',array('do' => 'edit','rev' => $REV),'post');
+ }
+ }
+ }else{
+ if(!actionOK('source')) return false; //pseudo action
+ $out .= html_btn('source',$ID,'v',array('do' => 'edit','rev' => $REV),'post');
+ }
+ }else{
+ $out .= html_btn('show',$ID,'v',array('do' => 'show'));
+ }
+ break;
+ case 'history':
+ if(actionOK('revisions'))
+ $out .= html_btn('revs',$ID,'o',array('do' => 'revisions'));
+ break;
+ case 'recent':
+ if(actionOK('recent'))
+ $out .= html_btn('recent',$ID,'r',array('do' => 'recent'));
+ break;
+ case 'index':
+ if(actionOK('index'))
+ $out .= html_btn('index',$ID,'x',array('do' => 'index'));
+ break;
+ case 'back':
+ if ($parent = tpl_getparent($ID)) {
+ $out .= html_btn('back',$parent,'b',array('do' => 'show'));
+ }
+ break;
+ case 'top':
+ $out .= html_topbtn();
+ break;
+ case 'login':
+ if($conf['useacl'] && $auth){
+ if(isset($_SERVER['REMOTE_USER'])){
+ $out .= html_btn('logout',$ID,'',array('do' => 'logout', 'sectok' => getSecurityToken()));
+ }else{
+ $out .= html_btn('login',$ID,'',array('do' => 'login', 'sectok' => getSecurityToken()));
+ }
+ }
+ break;
+ case 'admin':
+ if($INFO['ismanager']){
+ $out .= html_btn('admin',$ID,'',array('do' => 'admin'));
+ }
+ break;
+ case 'revert':
+ if($INFO['ismanager'] && $REV && $INFO['writable'] && actionOK('revert')){
+ $out .= html_btn('revert',$ID,'',array('do' => 'revert', 'rev' => $REV, 'sectok' => getSecurityToken()));
+ }
+ break;
+ case 'subscribe':
+ case 'subscription':
+ if($conf['useacl'] && $auth && $ACT == 'show' && $conf['subscribers'] == 1){
+ if($_SERVER['REMOTE_USER']){
+ if($INFO['subscribed']){
+ if(actionOK('unsubscribe'))
+ $out .= html_btn('unsubscribe',$ID,'',array('do' => 'unsubscribe',));
+ } else {
+ if(actionOK('subscribe'))
+ $out .= html_btn('subscribe',$ID,'',array('do' => 'subscribe',));
+ }
+ }
+ }
+ if($type == 'subscribe') break;
+ // else: fall through for backward compatibility
+ case 'subscribens':
+ if($conf['useacl'] && $auth && $ACT == 'show' && $conf['subscribers'] == 1){
+ if($_SERVER['REMOTE_USER']){
+ if($INFO['subscribedns']){
+ if(actionOK('unsubscribens'))
+ $out .= html_btn('unsubscribens',$ID,'',array('do' => 'unsubscribens',));
+ } else {
+ if(actionOK('subscribens'))
+ $out .= html_btn('subscribens',$ID,'',array('do' => 'subscribens',));
+ }
+ }
+ }
+ break;
+ case 'backlink':
+ if(actionOK('backlink'))
+ $out .= html_btn('backlink',$ID,'',array('do' => 'backlink'));
+ break;
+ case 'profile':
+ if($conf['useacl'] && isset($_SERVER['REMOTE_USER']) && $auth &&
+ $auth->canDo('Profile') && ($ACT!='profile')){
+ $out .= html_btn('profile',$ID,'',array('do' => 'profile'));
+ }
+ break;
+ default:
+ $out .= '[unknown button type]';
+ break;
+ }
+ if ($return) return $out;
+ print $out;
+ return $out ? true : false;
+}
+
+/**
+ * Like the action buttons but links
+ *
+ * Available links are
+ *
+ * edit - edit/create/show link
+ * history - old revisions
+ * recent - recent changes
+ * login - login/logout link - if ACL enabled
+ * profile - user profile link (if logged in)
+ * index - The index
+ * admin - admin page - if enough rights
+ * top - a back to top link
+ * back - a back to parent link - if available
+ * backlink - links to the list of backlinks
+ * subscribe/subscription - subscribe/unsubscribe link
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ * @see tpl_button
+ */
+function tpl_actionlink($type,$pre='',$suf='',$inner='',$return=false){
+ global $ID;
+ global $INFO;
+ global $REV;
+ global $ACT;
+ global $conf;
+ global $lang;
+ global $auth;
+
+ // check disabled actions and fix the badly named ones
+ $ctype = $type;
+ if($type == 'history') $ctype='revisions';
+ if(!actionOK($ctype)) return false;
+
+ $out = '';
+ switch($type){
+ case 'edit':
+ #most complicated type - we need to decide on current action
+ if($ACT == 'show' || $ACT == 'search'){
+ if($INFO['writable']){
+ if(!empty($INFO['draft'])) {
+ $out .= tpl_link(wl($ID,'do=draft'),
+ $pre.(($inner)?$inner:$lang['btn_draft']).$suf,
+ 'class="action edit" accesskey="e" rel="nofollow"',1);
+ } else {
+ if($INFO['exists']){
+ $out .= tpl_link(wl($ID,'do=edit&amp;rev='.$REV),
+ $pre.(($inner)?$inner:$lang['btn_edit']).$suf,
+ 'class="action edit" accesskey="e" rel="nofollow"',1);
+ }else{
+ $out .= tpl_link(wl($ID,'do=edit&amp;rev='.$REV),
+ $pre.(($inner)?$inner:$lang['btn_create']).$suf,
+ 'class="action create" accesskey="e" rel="nofollow"',1);
+ }
+ }
+ }else{
+ if(actionOK('source')) //pseudo action
+ $out .= tpl_link(wl($ID,'do=edit&amp;rev='.$REV),
+ $pre.(($inner)?$inner:$lang['btn_source']).$suf,
+ 'class="action source" accesskey="v" rel="nofollow"',1);
+ }
+ }else{
+ $out .= tpl_link(wl($ID,'do=show'),
+ $pre.(($inner)?$inner:$lang['btn_show']).$suf,
+ 'class="action show" accesskey="v" rel="nofollow"',1);
+ }
+ break;
+ case 'history':
+ if(actionOK('revisions'))
+ $out .= tpl_link(wl($ID,'do=revisions'),
+ $pre.(($inner)?$inner:$lang['btn_revs']).$suf,
+ 'class="action revisions" accesskey="o" rel="nofollow"',1);
+ break;
+ case 'recent':
+ if(actionOK('recent'))
+ $out .= tpl_link(wl($ID,'do=recent'),
+ $pre.(($inner)?$inner:$lang['btn_recent']).$suf,
+ 'class="action recent" accesskey="r" rel="nofollow"',1);
+ break;
+ case 'index':
+ if(actionOK('index'))
+ $out .= tpl_link(wl($ID,'do=index'),
+ $pre.(($inner)?$inner:$lang['btn_index']).$suf,
+ 'class="action index" accesskey="x" rel="nofollow"',1);
+ break;
+ case 'top':
+ $out .= '<a href="#dokuwiki__top" class="action top" accesskey="x">'.
+ $pre.(($inner)?$inner:$lang['btn_top']).$suf.'</a>';
+ break;
+ case 'back':
+ if ($parent = tpl_getparent($ID)) {
+ $out .= tpl_link(wl($parent,'do=show'),
+ $pre.(($inner)?$inner:$lang['btn_back']).$suf,
+ 'class="action back" accesskey="b" rel="nofollow"',1);
+ }
+ break;
+ case 'login':
+ if($conf['useacl'] && $auth){
+ if($_SERVER['REMOTE_USER']){
+ $out .= tpl_link(wl($ID,'do=logout&amp;sectok='.getSecurityToken()),
+ $pre.(($inner)?$inner:$lang['btn_logout']).$suf,
+ 'class="action logout" rel="nofollow"',1);
+ }else{
+ $out .= tpl_link(wl($ID,'do=login&amp;sectok='.getSecurityToken()),
+ $pre.(($inner)?$inner:$lang['btn_login']).$suf,
+ 'class="action login" rel="nofollow"',1);
+ }
+ }
+ break;
+ case 'admin':
+ if($INFO['ismanager']){
+ $out .= tpl_link(wl($ID,'do=admin'),
+ $pre.(($inner)?$inner:$lang['btn_admin']).$suf,
+ 'class="action admin" rel="nofollow"',1);
+ }
+ break;
+ case 'revert':
+ if($INFO['ismanager'] && $REV && $INFO['writable'] && actionOK('revert')){
+ $out .= tpl_link(wl($ID,array('do' => 'revert', 'rev' => $REV, 'sectok' => getSecurityToken())),
+ $pre.(($inner)?$inner:$lang['btn_revert']).$suf,
+ 'class="action revert" rel="nofollow"',1);
+ }
+ break;
+ case 'subscribe':
+ case 'subscription':
+ if($conf['useacl'] && $auth && $ACT == 'show' && $conf['subscribers'] == 1){
+ if($_SERVER['REMOTE_USER']){
+ if($INFO['subscribed']) {
+ if(actionOK('unsubscribe'))
+ $out .= tpl_link(wl($ID,'do=unsubscribe'),
+ $pre.(($inner)?$inner:$lang['btn_unsubscribe']).$suf,
+ 'class="action unsubscribe" rel="nofollow"',1);
+ } else {
+ if(actionOK('subscribe'))
+ $out .= tpl_link(wl($ID,'do=subscribe'),
+ $pre.(($inner)?$inner:$lang['btn_subscribe']).$suf,
+ 'class="action subscribe" rel="nofollow"',1);
+ }
+ }
+ }
+ if($type == 'subscribe') break;
+ // else: fall through for backward compatibility
+ case 'subscribens':
+ if($conf['useacl'] && $auth && $ACT == 'show' && $conf['subscribers'] == 1){
+ if($_SERVER['REMOTE_USER']){
+ if($INFO['subscribedns']) {
+ if(actionOK('unsubscribens'))
+ $out .= tpl_link(wl($ID,'do=unsubscribens'),
+ $pre.(($inner)?$inner:$lang['btn_unsubscribens']).$suf,
+ 'class="action unsubscribens" rel="nofollow"',1);
+ } else {
+ if(actionOK('subscribens'))
+ $out .= tpl_link(wl($ID,'do=subscribens'),
+ $pre.(($inner)?$inner:$lang['btn_subscribens']).$suf,
+ 'class="action subscribens" rel="nofollow"',1);
+ }
+ }
+ }
+ break;
+ case 'backlink':
+ if(actionOK('backlink'))
+ $out .= tpl_link(wl($ID,'do=backlink'),
+ $pre.(($inner)?$inner:$lang['btn_backlink']).$suf,
+ 'class="action backlink" rel="nofollow"',1);
+ break;
+ case 'profile':
+ if($conf['useacl'] && $auth && $_SERVER['REMOTE_USER'] &&
+ $auth->canDo('Profile') && ($ACT!='profile')){
+ $out .= tpl_link(wl($ID,'do=profile'),
+ $pre.(($inner)?$inner:$lang['btn_profile']).$suf,
+ 'class="action profile" rel="nofollow"',1);
+ }
+ break;
+ default:
+ $out .= '[unknown link type]';
+ break;
+ }
+ if ($return) return $out;
+ print $out;
+ return $out ? true : false;
+}
+
+/**
+ * Wrapper around tpl_button() and tpl_actionlink()
+ *
+ * @author Anika Henke <anika@selfthinker.org>
+ */
+function tpl_action($type,$link=0,$wrapper=false,$return=false,$pre='',$suf='',$inner='') {
+ $out = '';
+ if ($link) $out .= tpl_actionlink($type,$pre,$suf,$inner,1);
+ else $out .= tpl_button($type,1);
+ if ($out && $wrapper) $out = "<$wrapper>$out</$wrapper>";
+
+ if ($return) return $out;
+ print $out;
+ return $out ? true : false;
+}
+
+/**
+ * Print the search form
+ *
+ * If the first parameter is given a div with the ID 'qsearch_out' will
+ * be added which instructs the ajax pagequicksearch to kick in and place
+ * its output into this div. The second parameter controls the propritary
+ * attribute autocomplete. If set to false this attribute will be set with an
+ * value of "off" to instruct the browser to disable it's own built in
+ * autocompletion feature (MSIE and Firefox)
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function tpl_searchform($ajax=true,$autocomplete=true){
+ global $lang;
+ global $ACT;
+ global $QUERY;
+
+ // don't print the search form if search action has been disabled
+ if (!actionOk('search')) return false;
+
+ print '<form action="'.wl().'" accept-charset="utf-8" class="search" id="dw__search"><div class="no">';
+ print '<input type="hidden" name="do" value="search" />';
+ print '<input type="text" ';
+ if($ACT == 'search') print 'value="'.htmlspecialchars($QUERY).'" ';
+ if(!$autocomplete) print 'autocomplete="off" ';
+ print 'id="qsearch__in" accesskey="f" name="id" class="edit" title="[F]" />';
+ print '<input type="submit" value="'.$lang['btn_search'].'" class="button" title="'.$lang['btn_search'].'" />';
+ if($ajax) print '<div id="qsearch__out" class="ajax_qsearch JSpopup"></div>';
+ print '</div></form>';
+ return true;
+}
+
+/**
+ * Print the breadcrumbs trace
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function tpl_breadcrumbs($sep='&raquo;'){
+ global $lang;
+ global $conf;
+
+ //check if enabled
+ if(!$conf['breadcrumbs']) return false;
+
+ $crumbs = breadcrumbs(); //setup crumb trace
+
+ //reverse crumborder in right-to-left mode, add RLM character to fix heb/eng display mixups
+ if($lang['direction'] == 'rtl') {
+ $crumbs = array_reverse($crumbs,true);
+ $crumbs_sep = ' &#8207;<span class="bcsep">'.$sep.'</span>&#8207; ';
+ } else {
+ $crumbs_sep = ' <span class="bcsep">'.$sep.'</span> ';
+ }
+
+ //render crumbs, highlight the last one
+ print '<span class="bchead">'.$lang['breadcrumb'].':</span>';
+ $last = count($crumbs);
+ $i = 0;
+ foreach ($crumbs as $id => $name){
+ $i++;
+ echo $crumbs_sep;
+ if ($i == $last) print '<span class="curid">';
+ tpl_link(wl($id),hsc($name),'class="breadcrumbs" title="'.$id.'"');
+ if ($i == $last) print '</span>';
+ }
+ return true;
+}
+
+/**
+ * Hierarchical breadcrumbs
+ *
+ * This code was suggested as replacement for the usual breadcrumbs.
+ * It only makes sense with a deep site structure.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Nigel McNie <oracle.shinoda@gmail.com>
+ * @author Sean Coates <sean@caedmon.net>
+ * @author <fredrik@averpil.com>
+ * @todo May behave strangely in RTL languages
+ */
+function tpl_youarehere($sep=' &raquo; '){
+ global $conf;
+ global $ID;
+ global $lang;
+
+ // check if enabled
+ if(!$conf['youarehere']) return false;
+
+ $parts = explode(':', $ID);
+ $count = count($parts);
+
+ if($GLOBALS['ACT'] == 'search')
+ {
+ $parts = array($conf['start']);
+ $count = 1;
+ }
+
+ echo '<span class="bchead">'.$lang['youarehere'].': </span>';
+
+ // always print the startpage
+ $title = useHeading('navigation') ? p_get_first_heading($conf['start']) : $conf['start'];
+ if(!$title) $title = $conf['start'];
+ tpl_link(wl($conf['start']),hsc($title),'title="'.$conf['start'].'"');
+
+ // print intermediate namespace links
+ $part = '';
+ for($i=0; $i<$count - 1; $i++){
+ $part .= $parts[$i].':';
+ $page = $part;
+ resolve_pageid('',$page,$exists);
+ if ($page == $conf['start']) continue; // Skip startpage
+
+ // output
+ echo $sep;
+ if($exists){
+ $title = useHeading('navigation') ? p_get_first_heading($page) : $parts[$i];
+ tpl_link(wl($page),hsc($title),'title="'.$page.'"');
+ }else{
+ tpl_link(wl($page),$parts[$i],'title="'.$page.'" class="wikilink2" rel="nofollow"');
+ }
+ }
+
+ // print current page, skipping start page, skipping for namespace index
+ if(isset($page) && $page==$part.$parts[$i]) return;
+ $page = $part.$parts[$i];
+ if($page == $conf['start']) return;
+ echo $sep;
+ if(page_exists($page)){
+ $title = useHeading('navigation') ? p_get_first_heading($page) : $parts[$i];
+ tpl_link(wl($page),hsc($title),'title="'.$page.'"');
+ }else{
+ tpl_link(wl($page),$parts[$i],'title="'.$page.'" class="wikilink2" rel="nofollow"');
+ }
+ return true;
+}
+
+/**
+ * Print info if the user is logged in
+ * and show full name in that case
+ *
+ * Could be enhanced with a profile link in future?
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function tpl_userinfo(){
+ global $lang;
+ global $INFO;
+ if(isset($_SERVER['REMOTE_USER'])){
+ print $lang['loggedinas'].': '.$INFO['userinfo']['name'].' ('.$_SERVER['REMOTE_USER'].')';
+ return true;
+ }
+ return false;
+}
+
+/**
+ * Print some info about the current page
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function tpl_pageinfo($ret=false){
+ global $conf;
+ global $lang;
+ global $INFO;
+ global $ID;
+
+ // return if we are not allowed to view the page
+ if (!auth_quickaclcheck($ID)) { return false; }
+
+ // prepare date and path
+ $fn = $INFO['filepath'];
+ if(!$conf['fullpath']){
+ if($INFO['rev']){
+ $fn = str_replace(fullpath($conf['olddir']).'/','',$fn);
+ }else{
+ $fn = str_replace(fullpath($conf['datadir']).'/','',$fn);
+ }
+ }
+ $fn = utf8_decodeFN($fn);
+ $date = dformat($INFO['lastmod']);
+
+ // print it
+ if($INFO['exists']){
+ $out = '';
+ $out .= $fn;
+ $out .= ' &middot; ';
+ $out .= $lang['lastmod'];
+ $out .= ': ';
+ $out .= $date;
+ if($INFO['editor']){
+ $out .= ' '.$lang['by'].' ';
+ $out .= editorinfo($INFO['editor']);
+ }else{
+ $out .= ' ('.$lang['external_edit'].')';
+ }
+ if($INFO['locked']){
+ $out .= ' &middot; ';
+ $out .= $lang['lockedby'];
+ $out .= ': ';
+ $out .= editorinfo($INFO['locked']);
+ }
+ if($ret){
+ return $out;
+ }else{
+ echo $out;
+ return true;
+ }
+ }
+ return false;
+}
+
+/**
+ * Prints or returns the name of the given page (current one if none given).
+ *
+ * If useheading is enabled this will use the first headline else
+ * the given ID is used.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function tpl_pagetitle($id=null, $ret=false){
+ global $conf;
+ if(is_null($id)){
+ global $ID;
+ $id = $ID;
+ }
+
+ $name = $id;
+ if (useHeading('navigation')) {
+ $title = p_get_first_heading($id);
+ if ($title) $name = $title;
+ }
+
+ if ($ret) {
+ return hsc($name);
+ } else {
+ print hsc($name);
+ return true;
+ }
+}
+
+/**
+ * Returns the requested EXIF/IPTC tag from the current image
+ *
+ * If $tags is an array all given tags are tried until a
+ * value is found. If no value is found $alt is returned.
+ *
+ * Which texts are known is defined in the functions _exifTagNames
+ * and _iptcTagNames() in inc/jpeg.php (You need to prepend IPTC
+ * to the names of the latter one)
+ *
+ * Only allowed in: detail.php
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function tpl_img_getTag($tags,$alt='',$src=null){
+ // Init Exif Reader
+ global $SRC;
+
+ if(is_null($src)) $src = $SRC;
+
+ static $meta = null;
+ if(is_null($meta)) $meta = new JpegMeta($src);
+ if($meta === false) return $alt;
+ $info = $meta->getField($tags);
+ if($info == false) return $alt;
+ return $info;
+}
+
+/**
+ * Prints the image with a link to the full sized version
+ *
+ * Only allowed in: detail.php
+ */
+function tpl_img($maxwidth=0,$maxheight=0){
+ global $IMG;
+ $w = tpl_img_getTag('File.Width');
+ $h = tpl_img_getTag('File.Height');
+
+ //resize to given max values
+ $ratio = 1;
+ if($w >= $h){
+ if($maxwidth && $w >= $maxwidth){
+ $ratio = $maxwidth/$w;
+ }elseif($maxheight && $h > $maxheight){
+ $ratio = $maxheight/$h;
+ }
+ }else{
+ if($maxheight && $h >= $maxheight){
+ $ratio = $maxheight/$h;
+ }elseif($maxwidth && $w > $maxwidth){
+ $ratio = $maxwidth/$w;
+ }
+ }
+ if($ratio){
+ $w = floor($ratio*$w);
+ $h = floor($ratio*$h);
+ }
+
+ //prepare URLs
+ $url=ml($IMG,array('cache'=>$_REQUEST['cache']));
+ $src=ml($IMG,array('cache'=>$_REQUEST['cache'],'w'=>$w,'h'=>$h));
+
+ //prepare attributes
+ $alt=tpl_img_getTag('Simple.Title');
+ $p = array();
+ if($w) $p['width'] = $w;
+ if($h) $p['height'] = $h;
+ $p['class'] = 'img_detail';
+ if($alt){
+ $p['alt'] = $alt;
+ $p['title'] = $alt;
+ }else{
+ $p['alt'] = '';
+ }
+ $p = buildAttributes($p);
+
+ print '<a href="'.$url.'">';
+ print '<img src="'.$src.'" '.$p.'/>';
+ print '</a>';
+ return true;
+}
+
+/**
+ * This function inserts a 1x1 pixel gif which in reality
+ * is the indexer function.
+ *
+ * Should be called somewhere at the very end of the main.php
+ * template
+ */
+function tpl_indexerWebBug(){
+ global $ID;
+ global $INFO;
+ if(!$INFO['exists']) return false;
+
+ if(isHiddenPage($ID)) return false; //no need to index hidden pages
+
+ $p = array();
+ $p['src'] = DOKU_BASE.'lib/exe/indexer.php?id='.rawurlencode($ID).
+ '&'.time();
+ $p['width'] = 1;
+ $p['height'] = 1;
+ $p['alt'] = '';
+ $att = buildAttributes($p);
+ print "<img $att />";
+ return true;
+}
+
+// configuration methods
+/**
+ * tpl_getConf($id)
+ *
+ * use this function to access template configuration variables
+ */
+function tpl_getConf($id){
+ global $conf;
+ global $tpl_configloaded;
+
+ $tpl = $conf['template'];
+
+ if (!$tpl_configloaded){
+ $tconf = tpl_loadConfig();
+ if ($tconf !== false){
+ foreach ($tconf as $key => $value){
+ if (isset($conf['tpl'][$tpl][$key])) continue;
+ $conf['tpl'][$tpl][$key] = $value;
+ }
+ $tpl_configloaded = true;
+ }
+ }
+
+ return $conf['tpl'][$tpl][$id];
+}
+
+/**
+ * tpl_loadConfig()
+ * reads all template configuration variables
+ * this function is automatically called by tpl_getConf()
+ */
+function tpl_loadConfig(){
+
+ $file = DOKU_TPLINC.'/conf/default.php';
+ $conf = array();
+
+ if (!@file_exists($file)) return false;
+
+ // load default config file
+ include($file);
+
+ return $conf;
+}
+
+/**
+ * prints the "main content" in the mediamanger popup
+ *
+ * Depending on the user's actions this may be a list of
+ * files in a namespace, the meta editing dialog or
+ * a message of referencing pages
+ *
+ * Only allowed in mediamanager.php
+ *
+ * @triggers MEDIAMANAGER_CONTENT_OUTPUT
+ * @param bool $fromajax - set true when calling this function via ajax
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function tpl_mediaContent($fromajax=false){
+ global $IMG;
+ global $AUTH;
+ global $INUSE;
+ global $NS;
+ global $JUMPTO;
+
+ if(is_array($_REQUEST['do'])){
+ $do = array_shift(array_keys($_REQUEST['do']));
+ }else{
+ $do = $_REQUEST['do'];
+ }
+ if(in_array($do,array('save','cancel'))) $do = '';
+
+ if(!$do){
+ if($_REQUEST['edit']){
+ $do = 'metaform';
+ }elseif(is_array($INUSE)){
+ $do = 'filesinuse';
+ }else{
+ $do = 'filelist';
+ }
+ }
+
+ // output the content pane, wrapped in an event.
+ if(!$fromajax) ptln('<div id="media__content">');
+ $data = array( 'do' => $do);
+ $evt = new Doku_Event('MEDIAMANAGER_CONTENT_OUTPUT', $data);
+ if ($evt->advise_before()) {
+ $do = $data['do'];
+ if($do == 'metaform'){
+ media_metaform($IMG,$AUTH);
+ }elseif($do == 'filesinuse'){
+ media_filesinuse($INUSE,$IMG);
+ }elseif($do == 'filelist'){
+ media_filelist($NS,$AUTH,$JUMPTO);
+ }elseif($do == 'searchlist'){
+ media_searchlist($_REQUEST['q'],$NS,$AUTH);
+ }else{
+ msg('Unknown action '.hsc($do),-1);
+ }
+ }
+ $evt->advise_after();
+ unset($evt);
+ if(!$fromajax) ptln('</div>');
+
+}
+
+/**
+ * prints the namespace tree in the mediamanger popup
+ *
+ * Only allowed in mediamanager.php
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function tpl_mediaTree(){
+ global $NS;
+
+ ptln('<div id="media__tree">');
+ media_nstree($NS);
+ ptln('</div>');
+}
+
+
+/**
+ * Print a dropdown menu with all DokuWiki actions
+ *
+ * Note: this will not use any pretty URLs
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function tpl_actiondropdown($empty='',$button='&gt;'){
+ global $ID;
+ global $INFO;
+ global $REV;
+ global $ACT;
+ global $conf;
+ global $lang;
+ global $auth;
+
+
+ echo '<form method="post" accept-charset="utf-8">'; #FIXME action
+ echo '<input type="hidden" name="id" value="'.$ID.'" />';
+ if($REV) echo '<input type="hidden" name="rev" value="'.$REV.'" />';
+ echo '<input type="hidden" name="sectok" value="'.getSecurityToken().'" />';
+
+ echo '<select name="do" id="action__selector" class="edit">';
+ echo '<option value="">'.$empty.'</option>';
+
+ echo '<optgroup label=" &mdash; ">';
+ // 'edit' - most complicated type, we need to decide on current action
+ if($ACT == 'show' || $ACT == 'search'){
+ if($INFO['writable']){
+ if(!empty($INFO['draft'])) {
+ echo '<option value="edit">'.$lang['btn_draft'].'</option>';
+ } else {
+ if($INFO['exists']){
+ echo '<option value="edit">'.$lang['btn_edit'].'</option>';
+ }else{
+ echo '<option value="edit">'.$lang['btn_create'].'</option>';
+ }
+ }
+ }else if(actionOK('source')) { //pseudo action
+ echo '<option value="edit">'.$lang['btn_source'].'</option>';
+ }
+ }else{
+ echo '<option value="show">'.$lang['btn_show'].'</option>';
+ }
+
+ echo '<option value="revisions">'.$lang['btn_revs'].'</option>';
+ if($INFO['ismanager'] && $REV && $INFO['writable'] && actionOK('revert')){
+ echo '<option value="revert">'.$lang['btn_revert'].'</option>';
+ }
+ echo '<option value="backlink">'.$lang['btn_backlink'].'</option>';
+ echo '</optgroup>';
+
+ echo '<optgroup label=" &mdash; ">';
+ echo '<option value="recent">'.$lang['btn_recent'].'</option>';
+ echo '<option value="index">'.$lang['btn_index'].'</option>';
+ echo '</optgroup>';
+
+ echo '<optgroup label=" &mdash; ">';
+ if($conf['useacl'] && $auth){
+ if($_SERVER['REMOTE_USER']){
+ echo '<option value="logout">'.$lang['btn_logout'].'</option>';
+ }else{
+ echo '<option value="login">'.$lang['btn_login'].'</option>';
+ }
+ }
+
+ if($conf['useacl'] && $auth && $_SERVER['REMOTE_USER'] &&
+ $auth->canDo('Profile') && ($ACT!='profile')){
+ echo '<option value="profile">'.$lang['btn_profile'].'</option>';
+ }
+
+ if($conf['useacl'] && $auth && $ACT == 'show' && $conf['subscribers'] == 1){
+ if($_SERVER['REMOTE_USER']){
+ if($INFO['subscribed']) {
+ echo '<option value="unsubscribe">'.$lang['btn_unsubscribe'].'</option>';
+ } else {
+ echo '<option value="subscribe">'.$lang['btn_subscribe'].'</option>';
+ }
+ }
+ }
+
+ if($conf['useacl'] && $auth && $ACT == 'show' && $conf['subscribers'] == 1){
+ if($_SERVER['REMOTE_USER']){
+ if($INFO['subscribedns']) {
+ echo '<option value="unsubscribens">'.$lang['btn_unsubscribens'].'</option>';
+ } else {
+ echo '<option value="subscribens">'.$lang['btn_subscribens'].'</option>';
+ }
+ }
+ }
+
+ if($INFO['ismanager']){
+ echo '<option value="admin">'.$lang['btn_admin'].'</option>';
+ }
+ echo '</optgroup>';
+
+ echo '</select>';
+ echo '<input type="submit" value="'.$button.'" id="action__selectorbtn" />';
+ echo '</form>';
+}
+
+/**
+ * Print a informational line about the used license
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @param string $img - print image? (|button|badge)
+ * @param bool $return - when true don't print, but return HTML
+ */
+function tpl_license($img='badge',$imgonly=false,$return=false){
+ global $license;
+ global $conf;
+ global $lang;
+ if(!$conf['license']) return '';
+ if(!is_array($license[$conf['license']])) return '';
+ $lic = $license[$conf['license']];
+
+ $out = '<div class="license">';
+ if($img){
+ $src = license_img($img);
+ if($src){
+ $out .= '<a href="'.$lic['url'].'" rel="license"';
+ if($conf['target']['external']) $out .= ' target="'.$conf['target']['external'].'"';
+ $out .= '><img src="'.DOKU_BASE.$src.'" class="medialeft lic'.$img.'" alt="'.$lic['name'].'" /></a> ';
+ }
+ }
+ if(!$imgonly) {
+ $out .= $lang['license'];
+ $out .= '<a href="'.$lic['url'].'" rel="license" class="urlextern"';
+ if(isset($conf['target']['external'])) $out .= ' target="'.$conf['target']['external'].'"';
+ $out .= '>'.$lic['name'].'</a>';
+ }
+ $out .= '</div>';
+
+ if($return) return $out;
+ echo $out;
+}
+
+
+/**
+ * Includes the rendered XHTML of a given page
+ *
+ * This function is useful to populate sidebars or similar features in a
+ * template
+ */
+function tpl_include_page($pageid,$print=true){
+ global $ID;
+ $oldid = $ID;
+ $html = p_wiki_xhtml($pageid,'',false);
+ $ID = $oldid;
+
+ if(!$print) return $html;
+ echo $html;
+}
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/toolbar.php b/mod/dokuwiki/vendors/dokuwiki/inc/toolbar.php
new file mode 100644
index 000000000..9140970d1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/toolbar.php
@@ -0,0 +1,241 @@
+<?php
+/**
+ * Editing toolbar functions
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+if(!defined('DOKU_INC')) die('meh.');
+require_once(DOKU_INC.'inc/JSON.php');
+
+
+/**
+ * Prepares and prints an JavaScript array with all toolbar buttons
+ *
+ * @emits TOOLBAR_DEFINE
+ * @param string $varname Name of the JS variable to fill
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function toolbar_JSdefines($varname){
+ global $ID;
+ global $conf;
+ global $lang;
+
+ $menu = array();
+
+ $evt = new Doku_Event('TOOLBAR_DEFINE', $menu);
+ if ($evt->advise_before()){
+
+ // build button array
+ $menu = array_merge($menu, array(
+ array(
+ 'type' => 'format',
+ 'title' => $lang['qb_bold'],
+ 'icon' => 'bold.png',
+ 'key' => 'b',
+ 'open' => '**',
+ 'close' => '**',
+ ),
+ array(
+ 'type' => 'format',
+ 'title' => $lang['qb_italic'],
+ 'icon' => 'italic.png',
+ 'key' => 'i',
+ 'open' => '//',
+ 'close' => '//',
+ ),
+ array(
+ 'type' => 'format',
+ 'title' => $lang['qb_underl'],
+ 'icon' => 'underline.png',
+ 'key' => 'u',
+ 'open' => '__',
+ 'close' => '__',
+ ),
+ array(
+ 'type' => 'format',
+ 'title' => $lang['qb_code'],
+ 'icon' => 'mono.png',
+ 'key' => 'c',
+ 'open' => "''",
+ 'close' => "''",
+ ),
+ array(
+ 'type' => 'format',
+ 'title' => $lang['qb_strike'],
+ 'icon' => 'strike.png',
+ 'key' => 'd',
+ 'open' => '<del>',
+ 'close' => '</del>',
+ ),
+
+ array(
+ 'type' => 'autohead',
+ 'title' => $lang['qb_hequal'],
+ 'icon' => 'hequal.png',
+ 'key' => '8',
+ 'text' => $lang['qb_h'],
+ 'mod' => 0
+ ),
+ array(
+ 'type' => 'autohead',
+ 'title' => $lang['qb_hminus'],
+ 'icon' => 'hminus.png',
+ 'key' => '9',
+ 'text' => $lang['qb_h'],
+ 'mod' => 1
+ ),
+ array(
+ 'type' => 'autohead',
+ 'title' => $lang['qb_hplus'],
+ 'icon' => 'hplus.png',
+ 'key' => '0',
+ 'text' => $lang['qb_h'],
+ 'mod' => -1
+ ),
+
+ array(
+ 'type' => 'picker',
+ 'title' => $lang['qb_hs'],
+ 'icon' => 'h.png',
+ 'class' => 'pk_hl',
+ 'list' => array(
+ array(
+ 'type' => 'format',
+ 'title' => $lang['qb_h1'],
+ 'icon' => 'h1.png',
+ 'key' => '1',
+ 'open' => '====== ',
+ 'close' => ' ======\n',
+ ),
+ array(
+ 'type' => 'format',
+ 'title' => $lang['qb_h2'],
+ 'icon' => 'h2.png',
+ 'key' => '2',
+ 'open' => '===== ',
+ 'close' => ' =====\n',
+ ),
+ array(
+ 'type' => 'format',
+ 'title' => $lang['qb_h3'],
+ 'icon' => 'h3.png',
+ 'key' => '3',
+ 'open' => '==== ',
+ 'close' => ' ====\n',
+ ),
+ array(
+ 'type' => 'format',
+ 'title' => $lang['qb_h4'],
+ 'icon' => 'h4.png',
+ 'key' => '4',
+ 'open' => '=== ',
+ 'close' => ' ===\n',
+ ),
+ array(
+ 'type' => 'format',
+ 'title' => $lang['qb_h5'],
+ 'icon' => 'h5.png',
+ 'key' => '5',
+ 'open' => '== ',
+ 'close' => ' ==\n',
+ ),
+ )
+ ),
+
+ array(
+ 'type' => 'linkwiz',
+ 'title' => $lang['qb_link'],
+ 'icon' => 'link.png',
+ 'key' => 'l',
+ 'open' => '[[',
+ 'close' => ']]',
+ ),
+ array(
+ 'type' => 'format',
+ 'title' => $lang['qb_extlink'],
+ 'icon' => 'linkextern.png',
+ 'open' => '[[',
+ 'close' => ']]',
+ 'sample' => 'http://example.com|'.$lang['qb_extlink'],
+ ),
+ array(
+ 'type' => 'formatln',
+ 'title' => $lang['qb_ol'],
+ 'icon' => 'ol.png',
+ 'open' => ' - ',
+ 'close' => '',
+ 'key' => '-',
+ ),
+ array(
+ 'type' => 'formatln',
+ 'title' => $lang['qb_ul'],
+ 'icon' => 'ul.png',
+ 'open' => ' * ',
+ 'close' => '',
+ 'key' => '.',
+ ),
+ array(
+ 'type' => 'insert',
+ 'title' => $lang['qb_hr'],
+ 'icon' => 'hr.png',
+ 'insert' => '\n----\n',
+ ),
+ array(
+ 'type' => 'mediapopup',
+ 'title' => $lang['qb_media'],
+ 'icon' => 'image.png',
+ 'url' => 'lib/exe/mediamanager.php?ns=',
+ 'name' => 'mediaselect',
+ 'options'=> 'width=750,height=500,left=20,top=20,scrollbars=yes,resizable=yes',
+ ),
+ array(
+ 'type' => 'picker',
+ 'title' => $lang['qb_smileys'],
+ 'icon' => 'smiley.png',
+ 'list' => getSmileys(),
+ 'icobase'=> 'smileys',
+ ),
+ array(
+ 'type' => 'picker',
+ 'title' => $lang['qb_chars'],
+ 'icon' => 'chars.png',
+ 'list' => explode(' ','À à à á  â à ã Ä ä Ç ÇŽ Ä‚ ă Ã… Ã¥ Ä€ Ä Ä„ Ä… Æ æ Ć ć Ç ç ÄŒ Ä Äˆ ĉ ÄŠ Ä‹ à đ ð ÄŽ Ä Ãˆ è É é Ê ê Ë ë Äš Ä› Ä’ Ä“ Ä– Ä— Ę Ä™ Ä¢ Ä£ Äœ Ä Äž ÄŸ Ä  Ä¡ Ĥ Ä¥ ÃŒ ì à í ÃŽ î à ï Ç Ç Äª Ä« Ä° ı Ä® į Ä´ ĵ Ķ Ä· Ĺ ĺ Ä» ļ Ľ ľ Å Å‚ Ä¿ Å€ Ń Å„ Ñ ñ Å… ņ Ň ň Ã’ ò Ó ó Ô ô Õ õ Ö ö Ç‘ Ç’ ÅŒ Å Å Å‘ Å’ Å“ Ø ø Å” Å• Å– Å— Ř Å™ Åš Å› Åž ÅŸ Å  Å¡ Åœ ŠŢ Å£ Ť Å¥ Ù ù Ú ú Û û Ãœ ü Ç“ Ç” Ŭ Å­ Ū Å« Å® ů Ç– ǘ Çš Çœ Ų ų Å° ű Å´ ŵ à ý Ÿ ÿ Ŷ Å· Ź ź Ž ž Å» ż Þ þ ß Ħ ħ ¿ ¡ ¢ £ ¤ Â¥ € ¦ § ª ¬ ¯ ° ± ÷ ‰ ¼ ½ ¾ ¹ ² ³ µ ¶ † ‡ · • º ∀ ∂ ∃ Æ É™ ∅ ∇ ∈ ∉ ∋ ∠∑ ‾ − ∗ √ ∠∞ ∠ ∧ ∨ ∩ ∪ ∫ ∴ ∼ ≅ ≈ ≠ ≡ ≤ ≥ ⊂ ⊃ ⊄ ⊆ ⊇ ⊕ ⊗ ⊥ â‹… â—Š ℘ â„‘ â„œ ℵ â™  ♣ ♥ ♦ α β Γ γ Δ δ ε ζ η Θ θ ι κ Λ λ μ Ξ ξ Π Ï€ Ï Î£ σ Τ Ï„ Ï… Φ φ χ Ψ ψ Ω ω ★ ☆ ☎ ☚ ☛ ☜ ☠☞ ☟ ☹ ☺ ✔ ✘ × „ “ †‚ ‘ ’ « » ‹ › — – … ↠↑ → ↓ ↔ ⇠⇑ ⇒ ⇓ ⇔ © â„¢ ® ′ ″ [ ] { } ~ ( ) % § $ # | @'),
+ ),
+ array(
+ 'type' => 'signature',
+ 'title' => $lang['qb_sig'],
+ 'icon' => 'sig.png',
+ 'key' => 'y',
+ ),
+ ));
+ } // end event TOOLBAR_DEFINE default action
+ $evt->advise_after();
+ unset($evt);
+
+ // use JSON to build the JavaScript array
+ $json = new JSON();
+ print "var $varname = ".$json->encode($menu).";\n";
+}
+
+/**
+ * prepares the signature string as configured in the config
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function toolbar_signature(){
+ global $conf;
+ global $INFO;
+
+ $sig = $conf['signature'];
+ $sig = strftime($sig);
+ $sig = str_replace('@USER@',$_SERVER['REMOTE_USER'],$sig);
+ $sig = str_replace('@NAME@',$INFO['userinfo']['name'],$sig);
+ $sig = str_replace('@MAIL@',$INFO['userinfo']['mail'],$sig);
+ $sig = str_replace('@DATE@',dformat(),$sig);
+ $sig = str_replace('\\\\n','\\n',addslashes($sig));
+ return $sig;
+}
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/utf8.php b/mod/dokuwiki/vendors/dokuwiki/inc/utf8.php
new file mode 100644
index 000000000..b078540d2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/utf8.php
@@ -0,0 +1,1657 @@
+<?php
+/**
+ * UTF8 helper functions
+ *
+ * @license LGPL (http://www.gnu.org/copyleft/lesser.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+/**
+ * check for mb_string support
+ */
+if(!defined('UTF8_MBSTRING')){
+ if(function_exists('mb_substr') && !defined('UTF8_NOMBSTRING')){
+ define('UTF8_MBSTRING',1);
+ }else{
+ define('UTF8_MBSTRING',0);
+ }
+}
+
+if(UTF8_MBSTRING){ mb_internal_encoding('UTF-8'); }
+
+if(!function_exists('utf8_encodeFN')){
+ /**
+ * URL-Encode a filename to allow unicodecharacters
+ *
+ * Slashes are not encoded
+ *
+ * When the second parameter is true the string will
+ * be encoded only if non ASCII characters are detected -
+ * This makes it safe to run it multiple times on the
+ * same string (default is true)
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @see urlencode
+ */
+ function utf8_encodeFN($file,$safe=true){
+ if($safe && preg_match('#^[a-zA-Z0-9/_\-.%]+$#',$file)){
+ return $file;
+ }
+ $file = urlencode($file);
+ $file = str_replace('%2F','/',$file);
+ return $file;
+ }
+}
+
+if(!function_exists('utf8_decodeFN')){
+ /**
+ * URL-Decode a filename
+ *
+ * This is just a wrapper around urldecode
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @see urldecode
+ */
+ function utf8_decodeFN($file){
+ $file = urldecode($file);
+ return $file;
+ }
+}
+
+if(!function_exists('utf8_isASCII')){
+ /**
+ * Checks if a string contains 7bit ASCII only
+ *
+ * @author Andreas Haerter <netzmeister@andreas-haerter.de>
+ */
+ function utf8_isASCII($str){
+ return (preg_match('/(?:[^\x00-\x7F])/', $str) !== 1);
+ }
+}
+
+if(!function_exists('utf8_strip')){
+ /**
+ * Strips all highbyte chars
+ *
+ * Returns a pure ASCII7 string
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function utf8_strip($str){
+ $ascii = '';
+ $len = strlen($str);
+ for($i=0; $i<$len; $i++){
+ if(ord($str{$i}) <128){
+ $ascii .= $str{$i};
+ }
+ }
+ return $ascii;
+ }
+}
+
+if(!function_exists('utf8_check')){
+ /**
+ * Tries to detect if a string is in Unicode encoding
+ *
+ * @author <bmorel@ssi.fr>
+ * @link http://www.php.net/manual/en/function.utf8-encode.php
+ */
+ function utf8_check($Str) {
+ $len = strlen($Str);
+ for ($i=0; $i<$len; $i++) {
+ $b = ord($Str[$i]);
+ if ($b < 0x80) continue; # 0bbbbbbb
+ elseif (($b & 0xE0) == 0xC0) $n=1; # 110bbbbb
+ elseif (($b & 0xF0) == 0xE0) $n=2; # 1110bbbb
+ elseif (($b & 0xF8) == 0xF0) $n=3; # 11110bbb
+ elseif (($b & 0xFC) == 0xF8) $n=4; # 111110bb
+ elseif (($b & 0xFE) == 0xFC) $n=5; # 1111110b
+ else return false; # Does not match any model
+
+ for ($j=0; $j<$n; $j++) { # n bytes matching 10bbbbbb follow ?
+ if ((++$i == $len) || ((ord($Str[$i]) & 0xC0) != 0x80))
+ return false;
+ }
+ }
+ return true;
+ }
+}
+
+if(!function_exists('utf8_strlen')){
+ /**
+ * Unicode aware replacement for strlen()
+ *
+ * utf8_decode() converts characters that are not in ISO-8859-1
+ * to '?', which, for the purpose of counting, is alright - It's
+ * even faster than mb_strlen.
+ *
+ * @author <chernyshevsky at hotmail dot com>
+ * @see strlen()
+ * @see utf8_decode()
+ */
+ function utf8_strlen($string){
+ return strlen(utf8_decode($string));
+ }
+}
+
+if(!function_exists('utf8_substr')){
+ /**
+ * UTF-8 aware alternative to substr
+ *
+ * Return part of a string given character offset (and optionally length)
+ *
+ * @author Harry Fuecks <hfuecks@gmail.com>
+ * @author Chris Smith <chris@jalakai.co.uk>
+ * @param string
+ * @param integer number of UTF-8 characters offset (from left)
+ * @param integer (optional) length in UTF-8 characters from offset
+ * @return mixed string or false if failure
+ */
+ function utf8_substr($str, $offset, $length = null) {
+ if(UTF8_MBSTRING){
+ if( $length === null ){
+ return mb_substr($str, $offset);
+ }else{
+ return mb_substr($str, $offset, $length);
+ }
+ }
+
+ /*
+ * Notes:
+ *
+ * no mb string support, so we'll use pcre regex's with 'u' flag
+ * pcre only supports repetitions of less than 65536, in order to accept up to MAXINT values for
+ * offset and length, we'll repeat a group of 65535 characters when needed (ok, up to MAXINT-65536)
+ *
+ * substr documentation states false can be returned in some cases (e.g. offset > string length)
+ * mb_substr never returns false, it will return an empty string instead.
+ *
+ * calculating the number of characters in the string is a relatively expensive operation, so
+ * we only carry it out when necessary. It isn't necessary for +ve offsets and no specified length
+ */
+
+ // cast parameters to appropriate types to avoid multiple notices/warnings
+ $str = (string)$str; // generates E_NOTICE for PHP4 objects, but not PHP5 objects
+ $offset = (int)$offset;
+ if (!is_null($length)) $length = (int)$length;
+
+ // handle trivial cases
+ if ($length === 0) return '';
+ if ($offset < 0 && $length < 0 && $length < $offset) return '';
+
+ $offset_pattern = '';
+ $length_pattern = '';
+
+ // normalise -ve offsets (we could use a tail anchored pattern, but they are horribly slow!)
+ if ($offset < 0) {
+ $strlen = strlen(utf8_decode($str)); // see notes
+ $offset = $strlen + $offset;
+ if ($offset < 0) $offset = 0;
+ }
+
+ // establish a pattern for offset, a non-captured group equal in length to offset
+ if ($offset > 0) {
+ $Ox = (int)($offset/65535);
+ $Oy = $offset%65535;
+
+ if ($Ox) $offset_pattern = '(?:.{65535}){'.$Ox.'}';
+ $offset_pattern = '^(?:'.$offset_pattern.'.{'.$Oy.'})';
+ } else {
+ $offset_pattern = '^'; // offset == 0; just anchor the pattern
+ }
+
+ // establish a pattern for length
+ if (is_null($length)) {
+ $length_pattern = '(.*)$'; // the rest of the string
+ } else {
+
+ if (!isset($strlen)) $strlen = strlen(utf8_decode($str)); // see notes
+ if ($offset > $strlen) return ''; // another trivial case
+
+ if ($length > 0) {
+
+ $length = min($strlen-$offset, $length); // reduce any length that would go passed the end of the string
+
+ $Lx = (int)($length/65535);
+ $Ly = $length%65535;
+
+ // +ve length requires ... a captured group of length characters
+ if ($Lx) $length_pattern = '(?:.{65535}){'.$Lx.'}';
+ $length_pattern = '('.$length_pattern.'.{'.$Ly.'})';
+
+ } else if ($length < 0) {
+
+ if ($length < ($offset - $strlen)) return '';
+
+ $Lx = (int)((-$length)/65535);
+ $Ly = (-$length)%65535;
+
+ // -ve length requires ... capture everything except a group of -length characters
+ // anchored at the tail-end of the string
+ if ($Lx) $length_pattern = '(?:.{65535}){'.$Lx.'}';
+ $length_pattern = '(.*)(?:'.$length_pattern.'.{'.$Ly.'})$';
+ }
+ }
+
+ if (!preg_match('#'.$offset_pattern.$length_pattern.'#us',$str,$match)) return '';
+ return $match[1];
+ }
+}
+
+if(!function_exists('utf8_substr_replace')){
+ /**
+ * Unicode aware replacement for substr_replace()
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @see substr_replace()
+ */
+ function utf8_substr_replace($string, $replacement, $start , $length=0 ){
+ $ret = '';
+ if($start>0) $ret .= utf8_substr($string, 0, $start);
+ $ret .= $replacement;
+ $ret .= utf8_substr($string, $start+$length);
+ return $ret;
+ }
+}
+
+if(!function_exists('utf8_ltrim')){
+ /**
+ * Unicode aware replacement for ltrim()
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @see ltrim()
+ * @return string
+ */
+ function utf8_ltrim($str,$charlist=''){
+ if($charlist == '') return ltrim($str);
+
+ //quote charlist for use in a characterclass
+ $charlist = preg_replace('!([\\\\\\-\\]\\[/])!','\\\${1}',$charlist);
+
+ return preg_replace('/^['.$charlist.']+/u','',$str);
+ }
+}
+
+if(!function_exists('utf8_rtrim')){
+ /**
+ * Unicode aware replacement for rtrim()
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @see rtrim()
+ * @return string
+ */
+ function utf8_rtrim($str,$charlist=''){
+ if($charlist == '') return rtrim($str);
+
+ //quote charlist for use in a characterclass
+ $charlist = preg_replace('!([\\\\\\-\\]\\[/])!','\\\${1}',$charlist);
+
+ return preg_replace('/['.$charlist.']+$/u','',$str);
+ }
+}
+
+if(!function_exists('utf8_trim')){
+ /**
+ * Unicode aware replacement for trim()
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @see trim()
+ * @return string
+ */
+ function utf8_trim($str,$charlist='') {
+ if($charlist == '') return trim($str);
+
+ return utf8_ltrim(utf8_rtrim($str,$charlist),$charlist);
+ }
+}
+
+if(!function_exists('utf8_strtolower')){
+ /**
+ * This is a unicode aware replacement for strtolower()
+ *
+ * Uses mb_string extension if available
+ *
+ * @author Leo Feyer <leo@typolight.org>
+ * @see strtolower()
+ * @see utf8_strtoupper()
+ */
+ function utf8_strtolower($string){
+ if(UTF8_MBSTRING) return mb_strtolower($string,'utf-8');
+
+ global $UTF8_UPPER_TO_LOWER;
+ return strtr($string,$UTF8_UPPER_TO_LOWER);
+ }
+}
+
+if(!function_exists('utf8_strtoupper')){
+ /**
+ * This is a unicode aware replacement for strtoupper()
+ *
+ * Uses mb_string extension if available
+ *
+ * @author Leo Feyer <leo@typolight.org>
+ * @see strtoupper()
+ * @see utf8_strtoupper()
+ */
+ function utf8_strtoupper($string){
+ if(UTF8_MBSTRING) return mb_strtoupper($string,'utf-8');
+
+ global $UTF8_LOWER_TO_UPPER;
+ return strtr($string,$UTF8_LOWER_TO_UPPER);
+ }
+}
+
+if(!function_exists('utf8_ucfirst')){
+ /**
+ * UTF-8 aware alternative to ucfirst
+ * Make a string's first character uppercase
+ *
+ * @author Harry Fuecks
+ * @param string
+ * @return string with first character as upper case (if applicable)
+ */
+ function utf8_ucfirst($str){
+ switch ( utf8_strlen($str) ) {
+ case 0:
+ return '';
+ case 1:
+ return utf8_strtoupper($str);
+ default:
+ preg_match('/^(.{1})(.*)$/us', $str, $matches);
+ return utf8_strtoupper($matches[1]).$matches[2];
+ }
+ }
+}
+
+if(!function_exists('utf8_ucwords')){
+ /**
+ * UTF-8 aware alternative to ucwords
+ * Uppercase the first character of each word in a string
+ *
+ * @author Harry Fuecks
+ * @param string
+ * @return string with first char of each word uppercase
+ * @see http://www.php.net/ucwords
+ */
+ function utf8_ucwords($str) {
+ // Note: [\x0c\x09\x0b\x0a\x0d\x20] matches;
+ // form feeds, horizontal tabs, vertical tabs, linefeeds and carriage returns
+ // This corresponds to the definition of a "word" defined at http://www.php.net/ucwords
+ $pattern = '/(^|([\x0c\x09\x0b\x0a\x0d\x20]+))([^\x0c\x09\x0b\x0a\x0d\x20]{1})[^\x0c\x09\x0b\x0a\x0d\x20]*/u';
+
+ return preg_replace_callback($pattern, 'utf8_ucwords_callback',$str);
+ }
+
+ /**
+ * Callback function for preg_replace_callback call in utf8_ucwords
+ * You don't need to call this yourself
+ *
+ * @author Harry Fuecks
+ * @param array of matches corresponding to a single word
+ * @return string with first char of the word in uppercase
+ * @see utf8_ucwords
+ * @see utf8_strtoupper
+ */
+ function utf8_ucwords_callback($matches) {
+ $leadingws = $matches[2];
+ $ucfirst = utf8_strtoupper($matches[3]);
+ $ucword = utf8_substr_replace(ltrim($matches[0]),$ucfirst,0,1);
+ return $leadingws . $ucword;
+ }
+}
+
+if(!function_exists('utf8_deaccent')){
+ /**
+ * Replace accented UTF-8 characters by unaccented ASCII-7 equivalents
+ *
+ * Use the optional parameter to just deaccent lower ($case = -1) or upper ($case = 1)
+ * letters. Default is to deaccent both cases ($case = 0)
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function utf8_deaccent($string,$case=0){
+ if($case <= 0){
+ global $UTF8_LOWER_ACCENTS;
+ $string = strtr($string,$UTF8_LOWER_ACCENTS);
+ }
+ if($case >= 0){
+ global $UTF8_UPPER_ACCENTS;
+ $string = strtr($string,$UTF8_UPPER_ACCENTS);
+ }
+ return $string;
+ }
+}
+
+if(!function_exists('utf8_romanize')){
+ /**
+ * Romanize a non-latin string
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function utf8_romanize($string){
+ if(utf8_isASCII($string)) return $string; //nothing to do
+
+ global $UTF8_ROMANIZATION;
+ return strtr($string,$UTF8_ROMANIZATION);
+ }
+}
+
+if(!function_exists('utf8_stripspecials')){
+ /**
+ * Removes special characters (nonalphanumeric) from a UTF-8 string
+ *
+ * This function adds the controlchars 0x00 to 0x19 to the array of
+ * stripped chars (they are not included in $UTF8_SPECIAL_CHARS)
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @param string $string The UTF8 string to strip of special chars
+ * @param string $repl Replace special with this string
+ * @param string $additional Additional chars to strip (used in regexp char class)
+ */
+ function utf8_stripspecials($string,$repl='',$additional=''){
+ global $UTF8_SPECIAL_CHARS;
+ global $UTF8_SPECIAL_CHARS2;
+
+ static $specials = null;
+ if(is_null($specials)){
+ #$specials = preg_quote(unicode_to_utf8($UTF8_SPECIAL_CHARS), '/');
+ $specials = preg_quote($UTF8_SPECIAL_CHARS2, '/');
+ }
+
+ return preg_replace('/['.$additional.'\x00-\x19'.$specials.']/u',$repl,$string);
+ }
+}
+
+if(!function_exists('utf8_strpos')){
+ /**
+ * This is an Unicode aware replacement for strpos
+ *
+ * @author Leo Feyer <leo@typolight.org>
+ * @see strpos()
+ * @param string
+ * @param string
+ * @param integer
+ * @return integer
+ */
+ function utf8_strpos($haystack, $needle, $offset=0){
+ $comp = 0;
+ $length = null;
+
+ while (is_null($length) || $length < $offset) {
+ $pos = strpos($haystack, $needle, $offset + $comp);
+
+ if ($pos === false)
+ return false;
+
+ $length = utf8_strlen(substr($haystack, 0, $pos));
+
+ if ($length < $offset)
+ $comp = $pos - $length;
+ }
+
+ return $length;
+ }
+}
+
+if(!function_exists('utf8_tohtml')){
+ /**
+ * Encodes UTF-8 characters to HTML entities
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ * @author <vpribish at shopping dot com>
+ * @link http://www.php.net/manual/en/function.utf8-decode.php
+ */
+ function utf8_tohtml ($str) {
+ $ret = '';
+ foreach (utf8_to_unicode($str) as $cp) {
+ if ($cp < 0x80)
+ $ret .= chr($cp);
+ elseif ($cp < 0x100)
+ $ret .= "&#$cp;";
+ else
+ $ret .= '&#x'.dechex($cp).';';
+ }
+ return $ret;
+ }
+}
+
+if(!function_exists('utf8_unhtml')){
+ /**
+ * Decodes HTML entities to UTF-8 characters
+ *
+ * Convert any &#..; entity to a codepoint,
+ * The entities flag defaults to only decoding numeric entities.
+ * Pass HTML_ENTITIES and named entities, including &amp; &lt; etc.
+ * are handled as well. Avoids the problem that would occur if you
+ * had to decode "&amp;#38;&#38;amp;#38;"
+ *
+ * unhtmlspecialchars(utf8_unhtml($s)) -> "&#38;&#38;"
+ * utf8_unhtml(unhtmlspecialchars($s)) -> "&&amp#38;"
+ * what it should be -> "&#38;&amp#38;"
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ * @param string $str UTF-8 encoded string
+ * @param boolean $entities Flag controlling decoding of named entities.
+ * @return UTF-8 encoded string with numeric (and named) entities replaced.
+ */
+ function utf8_unhtml($str, $entities=null) {
+ static $decoder = null;
+ if (is_null($decoder))
+ $decoder = new utf8_entity_decoder();
+ if (is_null($entities))
+ return preg_replace_callback('/(&#([Xx])?([0-9A-Za-z]+);)/m',
+ 'utf8_decode_numeric', $str);
+ else
+ return preg_replace_callback('/&(#)?([Xx])?([0-9A-Za-z]+);/m',
+ array(&$decoder, 'decode'), $str);
+ }
+}
+
+if(!function_exists('utf8_decode_numeric')){
+ function utf8_decode_numeric($ent) {
+ switch ($ent[2]) {
+ case 'X':
+ case 'x':
+ $cp = hexdec($ent[3]);
+ break;
+ default:
+ $cp = intval($ent[3]);
+ break;
+ }
+ return unicode_to_utf8(array($cp));
+ }
+}
+
+if(!class_exists('utf8_entity_decoder')){
+ class utf8_entity_decoder {
+ var $table;
+ function utf8_entity_decoder() {
+ $table = get_html_translation_table(HTML_ENTITIES);
+ $table = array_flip($table);
+ $this->table = array_map(array(&$this,'makeutf8'), $table);
+ }
+ function makeutf8($c) {
+ return unicode_to_utf8(array(ord($c)));
+ }
+ function decode($ent) {
+ if ($ent[1] == '#') {
+ return utf8_decode_numeric($ent);
+ } elseif (array_key_exists($ent[0],$this->table)) {
+ return $this->table[$ent[0]];
+ } else {
+ return $ent[0];
+ }
+ }
+ }
+}
+
+if(!function_exists('utf8_to_unicode')){
+ /**
+ * Takes an UTF-8 string and returns an array of ints representing the
+ * Unicode characters. Astral planes are supported ie. the ints in the
+ * output can be > 0xFFFF. Occurrances of the BOM are ignored. Surrogates
+ * are not allowed.
+ *
+ * If $strict is set to true the function returns false if the input
+ * string isn't a valid UTF-8 octet sequence and raises a PHP error at
+ * level E_USER_WARNING
+ *
+ * Note: this function has been modified slightly in this library to
+ * trigger errors on encountering bad bytes
+ *
+ * @author <hsivonen@iki.fi>
+ * @author Harry Fuecks <hfuecks@gmail.com>
+ * @param string UTF-8 encoded string
+ * @param boolean Check for invalid sequences?
+ * @return mixed array of unicode code points or false if UTF-8 invalid
+ * @see unicode_to_utf8
+ * @link http://hsivonen.iki.fi/php-utf8/
+ * @link http://sourceforge.net/projects/phputf8/
+ */
+ function utf8_to_unicode($str,$strict=false) {
+ $mState = 0; // cached expected number of octets after the current octet
+ // until the beginning of the next UTF8 character sequence
+ $mUcs4 = 0; // cached Unicode character
+ $mBytes = 1; // cached expected number of octets in the current sequence
+
+ $out = array();
+
+ $len = strlen($str);
+
+ for($i = 0; $i < $len; $i++) {
+
+ $in = ord($str{$i});
+
+ if ( $mState == 0) {
+
+ // When mState is zero we expect either a US-ASCII character or a
+ // multi-octet sequence.
+ if (0 == (0x80 & ($in))) {
+ // US-ASCII, pass straight through.
+ $out[] = $in;
+ $mBytes = 1;
+
+ } else if (0xC0 == (0xE0 & ($in))) {
+ // First octet of 2 octet sequence
+ $mUcs4 = ($in);
+ $mUcs4 = ($mUcs4 & 0x1F) << 6;
+ $mState = 1;
+ $mBytes = 2;
+
+ } else if (0xE0 == (0xF0 & ($in))) {
+ // First octet of 3 octet sequence
+ $mUcs4 = ($in);
+ $mUcs4 = ($mUcs4 & 0x0F) << 12;
+ $mState = 2;
+ $mBytes = 3;
+
+ } else if (0xF0 == (0xF8 & ($in))) {
+ // First octet of 4 octet sequence
+ $mUcs4 = ($in);
+ $mUcs4 = ($mUcs4 & 0x07) << 18;
+ $mState = 3;
+ $mBytes = 4;
+
+ } else if (0xF8 == (0xFC & ($in))) {
+ /* First octet of 5 octet sequence.
+ *
+ * This is illegal because the encoded codepoint must be either
+ * (a) not the shortest form or
+ * (b) outside the Unicode range of 0-0x10FFFF.
+ * Rather than trying to resynchronize, we will carry on until the end
+ * of the sequence and let the later error handling code catch it.
+ */
+ $mUcs4 = ($in);
+ $mUcs4 = ($mUcs4 & 0x03) << 24;
+ $mState = 4;
+ $mBytes = 5;
+
+ } else if (0xFC == (0xFE & ($in))) {
+ // First octet of 6 octet sequence, see comments for 5 octet sequence.
+ $mUcs4 = ($in);
+ $mUcs4 = ($mUcs4 & 1) << 30;
+ $mState = 5;
+ $mBytes = 6;
+
+ } elseif($strict) {
+ /* Current octet is neither in the US-ASCII range nor a legal first
+ * octet of a multi-octet sequence.
+ */
+ trigger_error(
+ 'utf8_to_unicode: Illegal sequence identifier '.
+ 'in UTF-8 at byte '.$i,
+ E_USER_WARNING
+ );
+ return false;
+
+ }
+
+ } else {
+
+ // When mState is non-zero, we expect a continuation of the multi-octet
+ // sequence
+ if (0x80 == (0xC0 & ($in))) {
+
+ // Legal continuation.
+ $shift = ($mState - 1) * 6;
+ $tmp = $in;
+ $tmp = ($tmp & 0x0000003F) << $shift;
+ $mUcs4 |= $tmp;
+
+ /**
+ * End of the multi-octet sequence. mUcs4 now contains the final
+ * Unicode codepoint to be output
+ */
+ if (0 == --$mState) {
+
+ /*
+ * Check for illegal sequences and codepoints.
+ */
+ // From Unicode 3.1, non-shortest form is illegal
+ if (((2 == $mBytes) && ($mUcs4 < 0x0080)) ||
+ ((3 == $mBytes) && ($mUcs4 < 0x0800)) ||
+ ((4 == $mBytes) && ($mUcs4 < 0x10000)) ||
+ (4 < $mBytes) ||
+ // From Unicode 3.2, surrogate characters are illegal
+ (($mUcs4 & 0xFFFFF800) == 0xD800) ||
+ // Codepoints outside the Unicode range are illegal
+ ($mUcs4 > 0x10FFFF)) {
+
+ if($strict){
+ trigger_error(
+ 'utf8_to_unicode: Illegal sequence or codepoint '.
+ 'in UTF-8 at byte '.$i,
+ E_USER_WARNING
+ );
+
+ return false;
+ }
+
+ }
+
+ if (0xFEFF != $mUcs4) {
+ // BOM is legal but we don't want to output it
+ $out[] = $mUcs4;
+ }
+
+ //initialize UTF8 cache
+ $mState = 0;
+ $mUcs4 = 0;
+ $mBytes = 1;
+ }
+
+ } elseif($strict) {
+ /**
+ *((0xC0 & (*in) != 0x80) && (mState != 0))
+ * Incomplete multi-octet sequence.
+ */
+ trigger_error(
+ 'utf8_to_unicode: Incomplete multi-octet '.
+ ' sequence in UTF-8 at byte '.$i,
+ E_USER_WARNING
+ );
+
+ return false;
+ }
+ }
+ }
+ return $out;
+ }
+}
+
+if(!function_exists('unicode_to_utf8')){
+ /**
+ * Takes an array of ints representing the Unicode characters and returns
+ * a UTF-8 string. Astral planes are supported ie. the ints in the
+ * input can be > 0xFFFF. Occurrances of the BOM are ignored. Surrogates
+ * are not allowed.
+ *
+ * If $strict is set to true the function returns false if the input
+ * array contains ints that represent surrogates or are outside the
+ * Unicode range and raises a PHP error at level E_USER_WARNING
+ *
+ * Note: this function has been modified slightly in this library to use
+ * output buffering to concatenate the UTF-8 string (faster) as well as
+ * reference the array by it's keys
+ *
+ * @param array of unicode code points representing a string
+ * @param boolean Check for invalid sequences?
+ * @return mixed UTF-8 string or false if array contains invalid code points
+ * @author <hsivonen@iki.fi>
+ * @author Harry Fuecks <hfuecks@gmail.com>
+ * @see utf8_to_unicode
+ * @link http://hsivonen.iki.fi/php-utf8/
+ * @link http://sourceforge.net/projects/phputf8/
+ */
+ function unicode_to_utf8($arr,$strict=false) {
+ if (!is_array($arr)) return '';
+ ob_start();
+
+ foreach (array_keys($arr) as $k) {
+
+ if ( ($arr[$k] >= 0) && ($arr[$k] <= 0x007f) ) {
+ # ASCII range (including control chars)
+
+ echo chr($arr[$k]);
+
+ } else if ($arr[$k] <= 0x07ff) {
+ # 2 byte sequence
+
+ echo chr(0xc0 | ($arr[$k] >> 6));
+ echo chr(0x80 | ($arr[$k] & 0x003f));
+
+ } else if($arr[$k] == 0xFEFF) {
+ # Byte order mark (skip)
+
+ // nop -- zap the BOM
+
+ } else if ($arr[$k] >= 0xD800 && $arr[$k] <= 0xDFFF) {
+ # Test for illegal surrogates
+
+ // found a surrogate
+ if($strict){
+ trigger_error(
+ 'unicode_to_utf8: Illegal surrogate '.
+ 'at index: '.$k.', value: '.$arr[$k],
+ E_USER_WARNING
+ );
+ return false;
+ }
+
+ } else if ($arr[$k] <= 0xffff) {
+ # 3 byte sequence
+
+ echo chr(0xe0 | ($arr[$k] >> 12));
+ echo chr(0x80 | (($arr[$k] >> 6) & 0x003f));
+ echo chr(0x80 | ($arr[$k] & 0x003f));
+
+ } else if ($arr[$k] <= 0x10ffff) {
+ # 4 byte sequence
+
+ echo chr(0xf0 | ($arr[$k] >> 18));
+ echo chr(0x80 | (($arr[$k] >> 12) & 0x3f));
+ echo chr(0x80 | (($arr[$k] >> 6) & 0x3f));
+ echo chr(0x80 | ($arr[$k] & 0x3f));
+
+ } elseif($strict) {
+
+ trigger_error(
+ 'unicode_to_utf8: Codepoint out of Unicode range '.
+ 'at index: '.$k.', value: '.$arr[$k],
+ E_USER_WARNING
+ );
+
+ // out of range
+ return false;
+ }
+ }
+
+ $result = ob_get_contents();
+ ob_end_clean();
+ return $result;
+ }
+}
+
+if(!function_exists('utf8_to_utf16be')){
+ /**
+ * UTF-8 to UTF-16BE conversion.
+ *
+ * Maybe really UCS-2 without mb_string due to utf8_to_unicode limits
+ */
+ function utf8_to_utf16be(&$str, $bom = false) {
+ $out = $bom ? "\xFE\xFF" : '';
+ if(UTF8_MBSTRING) return $out.mb_convert_encoding($str,'UTF-16BE','UTF-8');
+
+ $uni = utf8_to_unicode($str);
+ foreach($uni as $cp){
+ $out .= pack('n',$cp);
+ }
+ return $out;
+ }
+}
+
+if(!function_exists('utf16be_to_utf8')){
+ /**
+ * UTF-8 to UTF-16BE conversion.
+ *
+ * Maybe really UCS-2 without mb_string due to utf8_to_unicode limits
+ */
+ function utf16be_to_utf8(&$str) {
+ $uni = unpack('n*',$str);
+ return unicode_to_utf8($uni);
+ }
+}
+
+if(!function_exists('utf8_bad_replace')){
+ /**
+ * Replace bad bytes with an alternative character
+ *
+ * ASCII character is recommended for replacement char
+ *
+ * PCRE Pattern to locate bad bytes in a UTF-8 string
+ * Comes from W3 FAQ: Multilingual Forms
+ * Note: modified to include full ASCII range including control chars
+ *
+ * @author Harry Fuecks <hfuecks@gmail.com>
+ * @see http://www.w3.org/International/questions/qa-forms-utf-8
+ * @param string to search
+ * @param string to replace bad bytes with (defaults to '?') - use ASCII
+ * @return string
+ */
+ function utf8_bad_replace($str, $replace = '') {
+ $UTF8_BAD =
+ '([\x00-\x7F]'. # ASCII (including control chars)
+ '|[\xC2-\xDF][\x80-\xBF]'. # non-overlong 2-byte
+ '|\xE0[\xA0-\xBF][\x80-\xBF]'. # excluding overlongs
+ '|[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}'. # straight 3-byte
+ '|\xED[\x80-\x9F][\x80-\xBF]'. # excluding surrogates
+ '|\xF0[\x90-\xBF][\x80-\xBF]{2}'. # planes 1-3
+ '|[\xF1-\xF3][\x80-\xBF]{3}'. # planes 4-15
+ '|\xF4[\x80-\x8F][\x80-\xBF]{2}'. # plane 16
+ '|(.{1}))'; # invalid byte
+ ob_start();
+ while (preg_match('/'.$UTF8_BAD.'/S', $str, $matches)) {
+ if ( !isset($matches[2])) {
+ echo $matches[0];
+ } else {
+ echo $replace;
+ }
+ $str = substr($str,strlen($matches[0]));
+ }
+ $result = ob_get_contents();
+ ob_end_clean();
+ return $result;
+ }
+}
+
+if(!function_exists('utf8_correctIdx')){
+ /**
+ * adjust a byte index into a utf8 string to a utf8 character boundary
+ *
+ * @param $str string utf8 character string
+ * @param $i int byte index into $str
+ * @param $next bool direction to search for boundary,
+ * false = up (current character)
+ * true = down (next character)
+ *
+ * @return int byte index into $str now pointing to a utf8 character boundary
+ *
+ * @author chris smith <chris@jalakai.co.uk>
+ */
+ function utf8_correctIdx(&$str,$i,$next=false) {
+
+ if ($i <= 0) return 0;
+
+ $limit = strlen($str);
+ if ($i>=$limit) return $limit;
+
+ if ($next) {
+ while (($i<$limit) && ((ord($str[$i]) & 0xC0) == 0x80)) $i++;
+ } else {
+ while ($i && ((ord($str[$i]) & 0xC0) == 0x80)) $i--;
+ }
+
+ return $i;
+ }
+}
+
+// only needed if no mb_string available
+if(!UTF8_MBSTRING){
+ /**
+ * UTF-8 Case lookup table
+ *
+ * This lookuptable defines the upper case letters to their correspponding
+ * lower case letter in UTF-8
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ global $UTF8_LOWER_TO_UPPER;
+ if(empty($UTF8_LOWER_TO_UPPER)) $UTF8_LOWER_TO_UPPER = array(
+ "z"=>"Z","y"=>"Y","x"=>"X","w"=>"W","v"=>"V","u"=>"U","t"=>"T","s"=>"S","r"=>"R","q"=>"Q",
+ "ï½"=>"ï¼°","ï½"=>"O","n"=>"ï¼®","ï½"=>"ï¼­","l"=>"L","k"=>"K","j"=>"J","i"=>"I","h"=>"H","g"=>"G",
+ "f"=>"F","ï½…"=>"ï¼¥","d"=>"D","c"=>"ï¼£","b"=>"ï¼¢","ï½"=>"A","ῳ"=>"ῼ","á¿¥"=>"Ῥ","á¿¡"=>"á¿©","á¿‘"=>"á¿™",
+ "á¿"=>"Ῐ","ῃ"=>"á¿Œ","á¾¾"=>"Ι","á¾³"=>"á¾¼","á¾±"=>"á¾¹","á¾°"=>"Ᾰ","ᾧ"=>"ᾯ","ᾦ"=>"á¾®","á¾¥"=>"á¾­","ᾤ"=>"ᾬ",
+ "á¾£"=>"ᾫ","á¾¢"=>"ᾪ","ᾡ"=>"ᾩ","á¾—"=>"ᾟ","á¾–"=>"ᾞ","ᾕ"=>"á¾","á¾”"=>"ᾜ","ᾓ"=>"á¾›","á¾’"=>"ᾚ","ᾑ"=>"á¾™",
+ "á¾"=>"ᾘ","ᾇ"=>"á¾","ᾆ"=>"ᾎ","á¾…"=>"á¾","ᾄ"=>"ᾌ","ᾃ"=>"ᾋ","ᾂ"=>"ᾊ","á¾"=>"ᾉ","á¾€"=>"ᾈ","á½½"=>"á¿»",
+ "ὼ"=>"Ὼ","ύ"=>"Ύ","ὺ"=>"Ὺ","ό"=>"Ό","ὸ"=>"Ὸ","ί"=>"Ί","ὶ"=>"Ὶ","ή"=>"Ή","ὴ"=>"Ὴ","έ"=>"Έ",
+ "ὲ"=>"Ὲ","ά"=>"Ά","ὰ"=>"Ὰ","ὧ"=>"Ὧ","ὦ"=>"Ὦ","ὥ"=>"Ὥ","ὤ"=>"Ὤ","ὣ"=>"Ὣ","ὢ"=>"Ὢ","ὡ"=>"Ὡ",
+ "á½—"=>"Ὗ","ὕ"=>"á½","ὓ"=>"á½›","ὑ"=>"á½™","á½…"=>"á½","ὄ"=>"Ὄ","ὃ"=>"Ὃ","ὂ"=>"Ὂ","á½"=>"Ὁ","á½€"=>"Ὀ",
+ "ἷ"=>"Ἷ","ἶ"=>"Ἶ","ἵ"=>"Ἵ","ἴ"=>"Ἴ","ἳ"=>"Ἳ","ἲ"=>"Ἲ","ἱ"=>"Ἱ","ἰ"=>"Ἰ","ἧ"=>"Ἧ","ἦ"=>"Ἦ",
+ "á¼¥"=>"á¼­","ἤ"=>"Ἤ","á¼£"=>"Ἣ","á¼¢"=>"Ἢ","ἡ"=>"Ἡ","ἕ"=>"á¼","á¼”"=>"Ἔ","ἓ"=>"á¼›","á¼’"=>"Ἒ","ἑ"=>"á¼™",
+ "á¼"=>"Ἐ","ἇ"=>"á¼","ἆ"=>"Ἆ","á¼…"=>"á¼","ἄ"=>"Ἄ","ἃ"=>"Ἃ","ἂ"=>"Ἂ","á¼"=>"Ἁ","á¼€"=>"Ἀ","ỹ"=>"Ỹ",
+ "ỷ"=>"Ỷ","ỵ"=>"Ỵ","ỳ"=>"Ỳ","ự"=>"Ự","ữ"=>"Ữ","ử"=>"Ử","ừ"=>"Ừ","ứ"=>"Ứ","ủ"=>"Ủ","ụ"=>"Ụ",
+ "ợ"=>"Ợ","ỡ"=>"á» ","ở"=>"Ở","á»"=>"Ờ","á»›"=>"Ớ","á»™"=>"Ộ","á»—"=>"á»–","ổ"=>"á»”","ồ"=>"á»’","ố"=>"á»",
+ "á»"=>"Ỏ","á»"=>"Ọ","ị"=>"Ị","ỉ"=>"Ỉ","ệ"=>"Ệ","á»…"=>"Ễ","ể"=>"Ể","á»"=>"Ề","ế"=>"Ế","ẽ"=>"Ẽ",
+ "ẻ"=>"Ẻ","ẹ"=>"Ẹ","ặ"=>"Ặ","ẵ"=>"Ẵ","ẳ"=>"Ẳ","ằ"=>"Ằ","ắ"=>"Ắ","ậ"=>"Ậ","ẫ"=>"Ẫ","ẩ"=>"Ẩ",
+ "ầ"=>"Ầ","ấ"=>"Ấ","ả"=>"Ả","ạ"=>"Ạ","ẛ"=>"á¹ ","ẕ"=>"Ẕ","ẓ"=>"Ẓ","ẑ"=>"áº","áº"=>"Ẏ","áº"=>"Ẍ",
+ "ẋ"=>"Ẋ","ẉ"=>"Ẉ","ẇ"=>"Ẇ","ẅ"=>"Ẅ","ẃ"=>"Ẃ","áº"=>"Ẁ","ṿ"=>"á¹¾","á¹½"=>"á¹¼","á¹»"=>"Ṻ","á¹¹"=>"Ṹ",
+ "ṷ"=>"Ṷ","ṵ"=>"Ṵ","ṳ"=>"Ṳ","ṱ"=>"Ṱ","ṯ"=>"Ṯ","ṭ"=>"Ṭ","ṫ"=>"Ṫ","ṩ"=>"Ṩ","ṧ"=>"Ṧ","ṥ"=>"Ṥ",
+ "á¹£"=>"á¹¢","ṡ"=>"á¹ ","ṟ"=>"Ṟ","á¹"=>"Ṝ","á¹›"=>"Ṛ","á¹™"=>"Ṙ","á¹—"=>"á¹–","ṕ"=>"á¹”","ṓ"=>"á¹’","ṑ"=>"á¹",
+ "á¹"=>"Ṏ","á¹"=>"Ṍ","ṋ"=>"Ṋ","ṉ"=>"Ṉ","ṇ"=>"Ṇ","á¹…"=>"Ṅ","ṃ"=>"Ṃ","á¹"=>"á¹€","ḿ"=>"Ḿ","ḽ"=>"Ḽ",
+ "ḻ"=>"Ḻ","ḹ"=>"Ḹ","ḷ"=>"Ḷ","ḵ"=>"Ḵ","ḳ"=>"Ḳ","ḱ"=>"Ḱ","ḯ"=>"Ḯ","ḭ"=>"Ḭ","ḫ"=>"Ḫ","ḩ"=>"Ḩ",
+ "ḧ"=>"Ḧ","ḥ"=>"Ḥ","ḣ"=>"Ḣ","ḡ"=>"Ḡ","ḟ"=>"Ḟ","á¸"=>"Ḝ","ḛ"=>"Ḛ","ḙ"=>"Ḙ","ḗ"=>"Ḗ","ḕ"=>"Ḕ",
+ "ḓ"=>"Ḓ","ḑ"=>"á¸","á¸"=>"Ḏ","á¸"=>"Ḍ","ḋ"=>"Ḋ","ḉ"=>"Ḉ","ḇ"=>"Ḇ","ḅ"=>"Ḅ","ḃ"=>"Ḃ","á¸"=>"Ḁ",
+ "Ö†"=>"Õ–","Ö…"=>"Õ•","Ö„"=>"Õ”","Öƒ"=>"Õ“","Ö‚"=>"Õ’","Ö"=>"Õ‘","Ö€"=>"Õ","Õ¿"=>"Õ","Õ¾"=>"ÕŽ","Õ½"=>"Õ",
+ "ռ"=>"Ռ","ջ"=>"Ջ","պ"=>"Պ","չ"=>"Չ","ո"=>"Ո","շ"=>"Շ","ն"=>"Ն","յ"=>"Յ","մ"=>"Մ","ճ"=>"Ճ",
+ "Õ²"=>"Õ‚","Õ±"=>"Õ","Õ°"=>"Õ€","Õ¯"=>"Ô¿","Õ®"=>"Ô¾","Õ­"=>"Ô½","Õ¬"=>"Ô¼","Õ«"=>"Ô»","Õª"=>"Ôº","Õ©"=>"Ô¹",
+ "Õ¨"=>"Ô¸","Õ§"=>"Ô·","Õ¦"=>"Ô¶","Õ¥"=>"Ôµ","Õ¤"=>"Ô´","Õ£"=>"Ô³","Õ¢"=>"Ô²","Õ¡"=>"Ô±","Ô"=>"ÔŽ","Ô"=>"ÔŒ",
+ "Ô‹"=>"ÔŠ","Ô‰"=>"Ôˆ","Ô‡"=>"Ô†","Ô…"=>"Ô„","Ôƒ"=>"Ô‚","Ô"=>"Ô€","Ó¹"=>"Ó¸","Óµ"=>"Ó´","Ó³"=>"Ó²","Ó±"=>"Ó°",
+ "Ó¯"=>"Ó®","Ó­"=>"Ó¬","Ó«"=>"Óª","Ó©"=>"Ó¨","Ó§"=>"Ó¦","Ó¥"=>"Ó¤","Ó£"=>"Ó¢","Ó¡"=>"Ó ","ÓŸ"=>"Óž","Ó"=>"Óœ",
+ "Ó›"=>"Óš","Ó™"=>"Ó˜","Ó—"=>"Ó–","Ó•"=>"Ó”","Ó“"=>"Ó’","Ó‘"=>"Ó","ÓŽ"=>"Ó","ÓŒ"=>"Ó‹","ÓŠ"=>"Ó‰","Óˆ"=>"Ó‡",
+ "Ó†"=>"Ó…","Ó„"=>"Óƒ","Ó‚"=>"Ó","Ò¿"=>"Ò¾","Ò½"=>"Ò¼","Ò»"=>"Òº","Ò¹"=>"Ò¸","Ò·"=>"Ò¶","Òµ"=>"Ò´","Ò³"=>"Ò²",
+ "Ò±"=>"Ò°","Ò¯"=>"Ò®","Ò­"=>"Ò¬","Ò«"=>"Òª","Ò©"=>"Ò¨","Ò§"=>"Ò¦","Ò¥"=>"Ò¤","Ò£"=>"Ò¢","Ò¡"=>"Ò ","ÒŸ"=>"Òž",
+ "Ò"=>"Òœ","Ò›"=>"Òš","Ò™"=>"Ò˜","Ò—"=>"Ò–","Ò•"=>"Ò”","Ò“"=>"Ò’","Ò‘"=>"Ò","Ò"=>"ÒŽ","Ò"=>"ÒŒ","Ò‹"=>"ÒŠ",
+ "Ò"=>"Ò€","Ñ¿"=>"Ѿ","ѽ"=>"Ѽ","Ñ»"=>"Ѻ","ѹ"=>"Ѹ","Ñ·"=>"Ѷ","ѵ"=>"Ñ´","ѳ"=>"Ѳ","ѱ"=>"Ñ°","ѯ"=>"Ñ®",
+ "Ñ­"=>"Ѭ","Ñ«"=>"Ѫ","Ñ©"=>"Ѩ","ѧ"=>"Ѧ","Ñ¥"=>"Ѥ","Ñ£"=>"Ñ¢","Ñ¡"=>"Ñ ","ÑŸ"=>"Ð","Ñž"=>"ÐŽ","Ñ"=>"Ð",
+ "ќ"=>"Ќ","ћ"=>"Ћ","њ"=>"Њ","љ"=>"Љ","ј"=>"Ј","ї"=>"Ї","і"=>"І","ѕ"=>"Ѕ","є"=>"Є","ѓ"=>"Ѓ",
+ "Ñ’"=>"Ђ","Ñ‘"=>"Ð","Ñ"=>"Ѐ","Ñ"=>"Я","ÑŽ"=>"Ю","Ñ"=>"Э","ÑŒ"=>"Ь","Ñ‹"=>"Ы","ÑŠ"=>"Ъ","щ"=>"Щ",
+ "ш"=>"Ш","ч"=>"Ч","ц"=>"Ц","Ñ…"=>"Ð¥","Ñ„"=>"Ф","у"=>"У","Ñ‚"=>"Т","Ñ"=>"С","Ñ€"=>"Р","п"=>"П",
+ "о"=>"О","н"=>"Ð","м"=>"Ðœ","л"=>"Л","к"=>"К","й"=>"Й","и"=>"И","з"=>"З","ж"=>"Ж","е"=>"Е",
+ "д"=>"Д","г"=>"Г","в"=>"Ð’","б"=>"Б","а"=>"Ð","ϵ"=>"Ε","ϲ"=>"Σ","ϱ"=>"Ρ","Ï°"=>"Κ","ϯ"=>"Ï®",
+ "Ï­"=>"Ϭ","Ï«"=>"Ϫ","Ï©"=>"Ϩ","ϧ"=>"Ϧ","Ï¥"=>"Ϥ","Ï£"=>"Ï¢","Ï¡"=>"Ï ","ÏŸ"=>"Ïž","Ï"=>"Ïœ","Ï›"=>"Ïš",
+ "Ï™"=>"Ϙ","Ï–"=>"Π","Ï•"=>"Φ","Ï‘"=>"Θ","Ï"=>"Î’","ÏŽ"=>"Î","Ï"=>"ÎŽ","ÏŒ"=>"ÎŒ","Ï‹"=>"Ϋ","ÏŠ"=>"Ϊ",
+ "ω"=>"Ω","ψ"=>"Ψ","χ"=>"Χ","φ"=>"Φ","Ï…"=>"Î¥","Ï„"=>"Τ","σ"=>"Σ","Ï‚"=>"Σ","Ï"=>"Ρ","Ï€"=>"Π",
+ "ο"=>"Ο","ξ"=>"Ξ","ν"=>"Î","μ"=>"Îœ","λ"=>"Λ","κ"=>"Κ","ι"=>"Ι","θ"=>"Θ","η"=>"Η","ζ"=>"Ζ",
+ "ε"=>"Ε","δ"=>"Δ","γ"=>"Γ","β"=>"Β","α"=>"Α","ί"=>"Ί","ή"=>"Ή","έ"=>"Έ","ά"=>"Ά","ʒ"=>"Ʒ",
+ "Ê‹"=>"Ʋ","ÊŠ"=>"Ʊ","ʈ"=>"Æ®","ʃ"=>"Æ©","Ê€"=>"Ʀ","ɵ"=>"ÆŸ","ɲ"=>"Æ","ɯ"=>"Æœ","É©"=>"Æ–","ɨ"=>"Æ—",
+ "É£"=>"Æ”","É›"=>"Æ","É™"=>"Æ","É—"=>"ÆŠ","É–"=>"Ɖ","É”"=>"Ɔ","É“"=>"Æ","ȳ"=>"Ȳ","ȱ"=>"È°","ȯ"=>"È®",
+ "È­"=>"Ȭ","È«"=>"Ȫ","È©"=>"Ȩ","ȧ"=>"Ȧ","È¥"=>"Ȥ","È£"=>"È¢","ÈŸ"=>"Èž","È"=>"Èœ","È›"=>"Èš","È™"=>"Ș",
+ "È—"=>"È–","È•"=>"È”","È“"=>"È’","È‘"=>"È","È"=>"ÈŽ","È"=>"ÈŒ","È‹"=>"ÈŠ","ȉ"=>"Ȉ","ȇ"=>"Ȇ","È…"=>"È„",
+ "ȃ"=>"È‚","È"=>"È€","Ç¿"=>"Ǿ","ǽ"=>"Ǽ","Ç»"=>"Ǻ","ǹ"=>"Ǹ","ǵ"=>"Ç´","dz"=>"Dz","ǯ"=>"Ç®","Ç­"=>"Ǭ",
+ "Ç«"=>"Ǫ","Ç©"=>"Ǩ","ǧ"=>"Ǧ","Ç¥"=>"Ǥ","Ç£"=>"Ç¢","Ç¡"=>"Ç ","ÇŸ"=>"Çž","Ç"=>"ÆŽ","Çœ"=>"Ç›","Çš"=>"Ç™",
+ "ǘ"=>"Ç—","Ç–"=>"Ç•","Ç”"=>"Ç“","Ç’"=>"Ç‘","Ç"=>"Ç","ÇŽ"=>"Ç","ÇŒ"=>"Ç‹","lj"=>"Lj","dž"=>"Ç…","Æ¿"=>"Ç·",
+ "ƽ"=>"Ƽ","ƹ"=>"Ƹ","ƶ"=>"Ƶ","ƴ"=>"Ƴ","ư"=>"Ư","ƭ"=>"Ƭ","ƨ"=>"Ƨ","ƥ"=>"Ƥ","ƣ"=>"Ƣ","ơ"=>"Ơ",
+ "ƞ"=>"Ƞ","ƙ"=>"Ƙ","ƕ"=>"Ƕ","ƒ"=>"Ƒ","ƌ"=>"Ƌ","ƈ"=>"Ƈ","ƅ"=>"Ƅ","ƃ"=>"Ƃ","ſ"=>"S","ž"=>"Ž",
+ "ż"=>"Ż","ź"=>"Ź","ŷ"=>"Ŷ","ŵ"=>"Ŵ","ų"=>"Ų","ű"=>"Ű","ů"=>"Ů","ŭ"=>"Ŭ","ū"=>"Ū","ũ"=>"Ũ",
+ "ŧ"=>"Ŧ","Å¥"=>"Ť","Å£"=>"Å¢","Å¡"=>"Å ","ÅŸ"=>"Åž","Å"=>"Åœ","Å›"=>"Åš","Å™"=>"Ř","Å—"=>"Å–","Å•"=>"Å”",
+ "Å“"=>"Å’","Å‘"=>"Å","Å"=>"ÅŽ","Å"=>"ÅŒ","Å‹"=>"ÅŠ","ň"=>"Ň","ņ"=>"Å…","Å„"=>"Ń","Å‚"=>"Å","Å€"=>"Ä¿",
+ "ľ"=>"Ľ","ļ"=>"Ļ","ĺ"=>"Ĺ","ķ"=>"Ķ","ĵ"=>"Ĵ","ij"=>"IJ","ı"=>"I","į"=>"Į","ĭ"=>"Ĭ","ī"=>"Ī",
+ "Ä©"=>"Ĩ","ħ"=>"Ħ","Ä¥"=>"Ĥ","Ä£"=>"Ä¢","Ä¡"=>"Ä ","ÄŸ"=>"Äž","Ä"=>"Äœ","Ä›"=>"Äš","Ä™"=>"Ę","Ä—"=>"Ä–",
+ "Ä•"=>"Ä”","Ä“"=>"Ä’","Ä‘"=>"Ä","Ä"=>"ÄŽ","Ä"=>"ÄŒ","Ä‹"=>"ÄŠ","ĉ"=>"Ĉ","ć"=>"Ć","Ä…"=>"Ä„","ă"=>"Ä‚",
+ "Ä"=>"Ä€","ÿ"=>"Ÿ","þ"=>"Þ","ý"=>"Ã","ü"=>"Ãœ","û"=>"Û","ú"=>"Ú","ù"=>"Ù","ø"=>"Ø","ö"=>"Ö",
+ "õ"=>"Õ","ô"=>"Ô","ó"=>"Ó","ò"=>"Ã’","ñ"=>"Ñ","ð"=>"Ã","ï"=>"Ã","î"=>"ÃŽ","í"=>"Ã","ì"=>"ÃŒ",
+ "ë"=>"Ë","ê"=>"Ê","é"=>"É","è"=>"È","ç"=>"Ç","æ"=>"Æ","å"=>"Å","ä"=>"Ä","ã"=>"Ã","â"=>"Â",
+ "á"=>"Ã","à"=>"À","µ"=>"Îœ","z"=>"Z","y"=>"Y","x"=>"X","w"=>"W","v"=>"V","u"=>"U","t"=>"T",
+ "s"=>"S","r"=>"R","q"=>"Q","p"=>"P","o"=>"O","n"=>"N","m"=>"M","l"=>"L","k"=>"K","j"=>"J",
+ "i"=>"I","h"=>"H","g"=>"G","f"=>"F","e"=>"E","d"=>"D","c"=>"C","b"=>"B","a"=>"A"
+ );
+
+ /**
+ * UTF-8 Case lookup table
+ *
+ * This lookuptable defines the lower case letters to their correspponding
+ * upper case letter in UTF-8
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ global $UTF8_UPPER_TO_LOWER;
+ if(empty($UTF8_UPPER_TO_LOWER)) $UTF8_UPPER_TO_LOWER = array (
+ "Z"=>"z","Y"=>"y","X"=>"x","W"=>"w","V"=>"v","U"=>"u","T"=>"t","S"=>"s","R"=>"r","Q"=>"q",
+ "ï¼°"=>"ï½","O"=>"ï½","ï¼®"=>"n","ï¼­"=>"ï½","L"=>"l","K"=>"k","J"=>"j","I"=>"i","H"=>"h","G"=>"g",
+ "F"=>"f","ï¼¥"=>"ï½…","D"=>"d","ï¼£"=>"c","ï¼¢"=>"b","A"=>"ï½","ῼ"=>"ῳ","Ῥ"=>"á¿¥","á¿©"=>"á¿¡","á¿™"=>"á¿‘",
+ "Ῐ"=>"á¿","á¿Œ"=>"ῃ","Ι"=>"á¾¾","á¾¼"=>"á¾³","á¾¹"=>"á¾±","Ᾰ"=>"á¾°","ᾯ"=>"ᾧ","á¾®"=>"ᾦ","á¾­"=>"á¾¥","ᾬ"=>"ᾤ",
+ "ᾫ"=>"á¾£","ᾪ"=>"á¾¢","ᾩ"=>"ᾡ","ᾟ"=>"á¾—","ᾞ"=>"á¾–","á¾"=>"ᾕ","ᾜ"=>"á¾”","á¾›"=>"ᾓ","ᾚ"=>"á¾’","á¾™"=>"ᾑ",
+ "ᾘ"=>"á¾","á¾"=>"ᾇ","ᾎ"=>"ᾆ","á¾"=>"á¾…","ᾌ"=>"ᾄ","ᾋ"=>"ᾃ","ᾊ"=>"ᾂ","ᾉ"=>"á¾","ᾈ"=>"á¾€","á¿»"=>"á½½",
+ "Ὼ"=>"ὼ","Ύ"=>"ύ","Ὺ"=>"ὺ","Ό"=>"ό","Ὸ"=>"ὸ","Ί"=>"ί","Ὶ"=>"ὶ","Ή"=>"ή","Ὴ"=>"ὴ","Έ"=>"έ",
+ "Ὲ"=>"ὲ","Ά"=>"ά","Ὰ"=>"ὰ","Ὧ"=>"ὧ","Ὦ"=>"ὦ","Ὥ"=>"ὥ","Ὤ"=>"ὤ","Ὣ"=>"ὣ","Ὢ"=>"ὢ","Ὡ"=>"ὡ",
+ "Ὗ"=>"á½—","á½"=>"ὕ","á½›"=>"ὓ","á½™"=>"ὑ","á½"=>"á½…","Ὄ"=>"ὄ","Ὃ"=>"ὃ","Ὂ"=>"ὂ","Ὁ"=>"á½","Ὀ"=>"á½€",
+ "Ἷ"=>"ἷ","Ἶ"=>"ἶ","Ἵ"=>"ἵ","Ἴ"=>"ἴ","Ἳ"=>"ἳ","Ἲ"=>"ἲ","Ἱ"=>"ἱ","Ἰ"=>"ἰ","Ἧ"=>"ἧ","Ἦ"=>"ἦ",
+ "á¼­"=>"á¼¥","Ἤ"=>"ἤ","Ἣ"=>"á¼£","Ἢ"=>"á¼¢","Ἡ"=>"ἡ","á¼"=>"ἕ","Ἔ"=>"á¼”","á¼›"=>"ἓ","Ἒ"=>"á¼’","á¼™"=>"ἑ",
+ "Ἐ"=>"á¼","á¼"=>"ἇ","Ἆ"=>"ἆ","á¼"=>"á¼…","Ἄ"=>"ἄ","Ἃ"=>"ἃ","Ἂ"=>"ἂ","Ἁ"=>"á¼","Ἀ"=>"á¼€","Ỹ"=>"ỹ",
+ "Ỷ"=>"ỷ","Ỵ"=>"ỵ","Ỳ"=>"ỳ","Ự"=>"ự","Ữ"=>"ữ","Ử"=>"ử","Ừ"=>"ừ","Ứ"=>"ứ","Ủ"=>"ủ","Ụ"=>"ụ",
+ "Ợ"=>"ợ","á» "=>"ỡ","Ở"=>"ở","Ờ"=>"á»","Ớ"=>"á»›","Ộ"=>"á»™","á»–"=>"á»—","á»”"=>"ổ","á»’"=>"ồ","á»"=>"ố",
+ "Ỏ"=>"á»","Ọ"=>"á»","Ị"=>"ị","Ỉ"=>"ỉ","Ệ"=>"ệ","Ễ"=>"á»…","Ể"=>"ể","Ề"=>"á»","Ế"=>"ế","Ẽ"=>"ẽ",
+ "Ẻ"=>"ẻ","Ẹ"=>"ẹ","Ặ"=>"ặ","Ẵ"=>"ẵ","Ẳ"=>"ẳ","Ằ"=>"ằ","Ắ"=>"ắ","Ậ"=>"ậ","Ẫ"=>"ẫ","Ẩ"=>"ẩ",
+ "Ầ"=>"ầ","Ấ"=>"ấ","Ả"=>"ả","Ạ"=>"ạ","á¹ "=>"ẛ","Ẕ"=>"ẕ","Ẓ"=>"ẓ","áº"=>"ẑ","Ẏ"=>"áº","Ẍ"=>"áº",
+ "Ẋ"=>"ẋ","Ẉ"=>"ẉ","Ẇ"=>"ẇ","Ẅ"=>"ẅ","Ẃ"=>"ẃ","Ẁ"=>"áº","á¹¾"=>"ṿ","á¹¼"=>"á¹½","Ṻ"=>"á¹»","Ṹ"=>"á¹¹",
+ "Ṷ"=>"ṷ","Ṵ"=>"ṵ","Ṳ"=>"ṳ","Ṱ"=>"ṱ","Ṯ"=>"ṯ","Ṭ"=>"ṭ","Ṫ"=>"ṫ","Ṩ"=>"ṩ","Ṧ"=>"ṧ","Ṥ"=>"ṥ",
+ "á¹¢"=>"á¹£","á¹ "=>"ṡ","Ṟ"=>"ṟ","Ṝ"=>"á¹","Ṛ"=>"á¹›","Ṙ"=>"á¹™","á¹–"=>"á¹—","á¹”"=>"ṕ","á¹’"=>"ṓ","á¹"=>"ṑ",
+ "Ṏ"=>"á¹","Ṍ"=>"á¹","Ṋ"=>"ṋ","Ṉ"=>"ṉ","Ṇ"=>"ṇ","Ṅ"=>"á¹…","Ṃ"=>"ṃ","á¹€"=>"á¹","Ḿ"=>"ḿ","Ḽ"=>"ḽ",
+ "Ḻ"=>"ḻ","Ḹ"=>"ḹ","Ḷ"=>"ḷ","Ḵ"=>"ḵ","Ḳ"=>"ḳ","Ḱ"=>"ḱ","Ḯ"=>"ḯ","Ḭ"=>"ḭ","Ḫ"=>"ḫ","Ḩ"=>"ḩ",
+ "Ḧ"=>"ḧ","Ḥ"=>"ḥ","Ḣ"=>"ḣ","Ḡ"=>"ḡ","Ḟ"=>"ḟ","Ḝ"=>"á¸","Ḛ"=>"ḛ","Ḙ"=>"ḙ","Ḗ"=>"ḗ","Ḕ"=>"ḕ",
+ "Ḓ"=>"ḓ","á¸"=>"ḑ","Ḏ"=>"á¸","Ḍ"=>"á¸","Ḋ"=>"ḋ","Ḉ"=>"ḉ","Ḇ"=>"ḇ","Ḅ"=>"ḅ","Ḃ"=>"ḃ","Ḁ"=>"á¸",
+ "Õ–"=>"Ö†","Õ•"=>"Ö…","Õ”"=>"Ö„","Õ“"=>"Öƒ","Õ’"=>"Ö‚","Õ‘"=>"Ö","Õ"=>"Ö€","Õ"=>"Õ¿","ÕŽ"=>"Õ¾","Õ"=>"Õ½",
+ "Ռ"=>"ռ","Ջ"=>"ջ","Պ"=>"պ","Չ"=>"չ","Ո"=>"ո","Շ"=>"շ","Ն"=>"ն","Յ"=>"յ","Մ"=>"մ","Ճ"=>"ճ",
+ "Õ‚"=>"Õ²","Õ"=>"Õ±","Õ€"=>"Õ°","Ô¿"=>"Õ¯","Ô¾"=>"Õ®","Ô½"=>"Õ­","Ô¼"=>"Õ¬","Ô»"=>"Õ«","Ôº"=>"Õª","Ô¹"=>"Õ©",
+ "Ô¸"=>"Õ¨","Ô·"=>"Õ§","Ô¶"=>"Õ¦","Ôµ"=>"Õ¥","Ô´"=>"Õ¤","Ô³"=>"Õ£","Ô²"=>"Õ¢","Ô±"=>"Õ¡","ÔŽ"=>"Ô","ÔŒ"=>"Ô",
+ "ÔŠ"=>"Ô‹","Ôˆ"=>"Ô‰","Ô†"=>"Ô‡","Ô„"=>"Ô…","Ô‚"=>"Ôƒ","Ô€"=>"Ô","Ó¸"=>"Ó¹","Ó´"=>"Óµ","Ó²"=>"Ó³","Ó°"=>"Ó±",
+ "Ó®"=>"Ó¯","Ó¬"=>"Ó­","Óª"=>"Ó«","Ó¨"=>"Ó©","Ó¦"=>"Ó§","Ó¤"=>"Ó¥","Ó¢"=>"Ó£","Ó "=>"Ó¡","Óž"=>"ÓŸ","Óœ"=>"Ó",
+ "Óš"=>"Ó›","Ó˜"=>"Ó™","Ó–"=>"Ó—","Ó”"=>"Ó•","Ó’"=>"Ó“","Ó"=>"Ó‘","Ó"=>"ÓŽ","Ó‹"=>"ÓŒ","Ó‰"=>"ÓŠ","Ó‡"=>"Óˆ",
+ "Ó…"=>"Ó†","Óƒ"=>"Ó„","Ó"=>"Ó‚","Ò¾"=>"Ò¿","Ò¼"=>"Ò½","Òº"=>"Ò»","Ò¸"=>"Ò¹","Ò¶"=>"Ò·","Ò´"=>"Òµ","Ò²"=>"Ò³",
+ "Ò°"=>"Ò±","Ò®"=>"Ò¯","Ò¬"=>"Ò­","Òª"=>"Ò«","Ò¨"=>"Ò©","Ò¦"=>"Ò§","Ò¤"=>"Ò¥","Ò¢"=>"Ò£","Ò "=>"Ò¡","Òž"=>"ÒŸ",
+ "Òœ"=>"Ò","Òš"=>"Ò›","Ò˜"=>"Ò™","Ò–"=>"Ò—","Ò”"=>"Ò•","Ò’"=>"Ò“","Ò"=>"Ò‘","ÒŽ"=>"Ò","ÒŒ"=>"Ò","ÒŠ"=>"Ò‹",
+ "Ò€"=>"Ò","Ѿ"=>"Ñ¿","Ѽ"=>"ѽ","Ѻ"=>"Ñ»","Ѹ"=>"ѹ","Ѷ"=>"Ñ·","Ñ´"=>"ѵ","Ѳ"=>"ѳ","Ñ°"=>"ѱ","Ñ®"=>"ѯ",
+ "Ѭ"=>"Ñ­","Ѫ"=>"Ñ«","Ѩ"=>"Ñ©","Ѧ"=>"ѧ","Ѥ"=>"Ñ¥","Ñ¢"=>"Ñ£","Ñ "=>"Ñ¡","Ð"=>"ÑŸ","ÐŽ"=>"Ñž","Ð"=>"Ñ",
+ "Ќ"=>"ќ","Ћ"=>"ћ","Њ"=>"њ","Љ"=>"љ","Ј"=>"ј","Ї"=>"ї","І"=>"і","Ѕ"=>"ѕ","Є"=>"є","Ѓ"=>"ѓ",
+ "Ђ"=>"Ñ’","Ð"=>"Ñ‘","Ѐ"=>"Ñ","Я"=>"Ñ","Ю"=>"ÑŽ","Э"=>"Ñ","Ь"=>"ÑŒ","Ы"=>"Ñ‹","Ъ"=>"ÑŠ","Щ"=>"щ",
+ "Ш"=>"ш","Ч"=>"ч","Ц"=>"ц","Ð¥"=>"Ñ…","Ф"=>"Ñ„","У"=>"у","Т"=>"Ñ‚","С"=>"Ñ","Р"=>"Ñ€","П"=>"п",
+ "О"=>"о","Ð"=>"н","Ðœ"=>"м","Л"=>"л","К"=>"к","Й"=>"й","И"=>"и","З"=>"з","Ж"=>"ж","Е"=>"е",
+ "Д"=>"д","Г"=>"г","Ð’"=>"в","Б"=>"б","Ð"=>"а","Ε"=>"ϵ","Σ"=>"ϲ","Ρ"=>"ϱ","Κ"=>"Ï°","Ï®"=>"ϯ",
+ "Ϭ"=>"Ï­","Ϫ"=>"Ï«","Ϩ"=>"Ï©","Ϧ"=>"ϧ","Ϥ"=>"Ï¥","Ï¢"=>"Ï£","Ï "=>"Ï¡","Ïž"=>"ÏŸ","Ïœ"=>"Ï","Ïš"=>"Ï›",
+ "Ϙ"=>"Ï™","Π"=>"Ï–","Φ"=>"Ï•","Θ"=>"Ï‘","Î’"=>"Ï","Î"=>"ÏŽ","ÎŽ"=>"Ï","ÎŒ"=>"ÏŒ","Ϋ"=>"Ï‹","Ϊ"=>"ÏŠ",
+ "Ω"=>"ω","Ψ"=>"ψ","Χ"=>"χ","Φ"=>"φ","Î¥"=>"Ï…","Τ"=>"Ï„","Σ"=>"σ","Σ"=>"Ï‚","Ρ"=>"Ï","Π"=>"Ï€",
+ "Ο"=>"ο","Ξ"=>"ξ","Î"=>"ν","Îœ"=>"μ","Λ"=>"λ","Κ"=>"κ","Ι"=>"ι","Θ"=>"θ","Η"=>"η","Ζ"=>"ζ",
+ "Ε"=>"ε","Δ"=>"δ","Γ"=>"γ","Β"=>"β","Α"=>"α","Ί"=>"ί","Ή"=>"ή","Έ"=>"έ","Ά"=>"ά","Ʒ"=>"ʒ",
+ "Ʋ"=>"Ê‹","Ʊ"=>"ÊŠ","Æ®"=>"ʈ","Æ©"=>"ʃ","Ʀ"=>"Ê€","ÆŸ"=>"ɵ","Æ"=>"ɲ","Æœ"=>"ɯ","Æ–"=>"É©","Æ—"=>"ɨ",
+ "Æ”"=>"É£","Æ"=>"É›","Æ"=>"É™","ÆŠ"=>"É—","Ɖ"=>"É–","Ɔ"=>"É”","Æ"=>"É“","Ȳ"=>"ȳ","È°"=>"ȱ","È®"=>"ȯ",
+ "Ȭ"=>"È­","Ȫ"=>"È«","Ȩ"=>"È©","Ȧ"=>"ȧ","Ȥ"=>"È¥","È¢"=>"È£","Èž"=>"ÈŸ","Èœ"=>"È","Èš"=>"È›","Ș"=>"È™",
+ "È–"=>"È—","È”"=>"È•","È’"=>"È“","È"=>"È‘","ÈŽ"=>"È","ÈŒ"=>"È","ÈŠ"=>"È‹","Ȉ"=>"ȉ","Ȇ"=>"ȇ","È„"=>"È…",
+ "È‚"=>"ȃ","È€"=>"È","Ǿ"=>"Ç¿","Ǽ"=>"ǽ","Ǻ"=>"Ç»","Ǹ"=>"ǹ","Ç´"=>"ǵ","Dz"=>"dz","Ç®"=>"ǯ","Ǭ"=>"Ç­",
+ "Ǫ"=>"Ç«","Ǩ"=>"Ç©","Ǧ"=>"ǧ","Ǥ"=>"Ç¥","Ç¢"=>"Ç£","Ç "=>"Ç¡","Çž"=>"ÇŸ","ÆŽ"=>"Ç","Ç›"=>"Çœ","Ç™"=>"Çš",
+ "Ç—"=>"ǘ","Ç•"=>"Ç–","Ç“"=>"Ç”","Ç‘"=>"Ç’","Ç"=>"Ç","Ç"=>"ÇŽ","Ç‹"=>"ÇŒ","Lj"=>"lj","Ç…"=>"dž","Ç·"=>"Æ¿",
+ "Ƽ"=>"ƽ","Ƹ"=>"ƹ","Ƶ"=>"ƶ","Ƴ"=>"ƴ","Ư"=>"ư","Ƭ"=>"ƭ","Ƨ"=>"ƨ","Ƥ"=>"ƥ","Ƣ"=>"ƣ","Ơ"=>"ơ",
+ "Ƞ"=>"ƞ","Ƙ"=>"ƙ","Ƕ"=>"ƕ","Ƒ"=>"ƒ","Ƌ"=>"ƌ","Ƈ"=>"ƈ","Ƅ"=>"ƅ","Ƃ"=>"ƃ","S"=>"ſ","Ž"=>"ž",
+ "Ż"=>"ż","Ź"=>"ź","Ŷ"=>"ŷ","Ŵ"=>"ŵ","Ų"=>"ų","Ű"=>"ű","Ů"=>"ů","Ŭ"=>"ŭ","Ū"=>"ū","Ũ"=>"ũ",
+ "Ŧ"=>"ŧ","Ť"=>"Å¥","Å¢"=>"Å£","Å "=>"Å¡","Åž"=>"ÅŸ","Åœ"=>"Å","Åš"=>"Å›","Ř"=>"Å™","Å–"=>"Å—","Å”"=>"Å•",
+ "Å’"=>"Å“","Å"=>"Å‘","ÅŽ"=>"Å","ÅŒ"=>"Å","ÅŠ"=>"Å‹","Ň"=>"ň","Å…"=>"ņ","Ń"=>"Å„","Å"=>"Å‚","Ä¿"=>"Å€",
+ "Ľ"=>"ľ","Ļ"=>"ļ","Ĺ"=>"ĺ","Ķ"=>"ķ","Ĵ"=>"ĵ","IJ"=>"ij","I"=>"ı","Į"=>"į","Ĭ"=>"ĭ","Ī"=>"ī",
+ "Ĩ"=>"Ä©","Ħ"=>"ħ","Ĥ"=>"Ä¥","Ä¢"=>"Ä£","Ä "=>"Ä¡","Äž"=>"ÄŸ","Äœ"=>"Ä","Äš"=>"Ä›","Ę"=>"Ä™","Ä–"=>"Ä—",
+ "Ä”"=>"Ä•","Ä’"=>"Ä“","Ä"=>"Ä‘","ÄŽ"=>"Ä","ÄŒ"=>"Ä","ÄŠ"=>"Ä‹","Ĉ"=>"ĉ","Ć"=>"ć","Ä„"=>"Ä…","Ä‚"=>"ă",
+ "Ä€"=>"Ä","Ÿ"=>"ÿ","Þ"=>"þ","Ã"=>"ý","Ãœ"=>"ü","Û"=>"û","Ú"=>"ú","Ù"=>"ù","Ø"=>"ø","Ö"=>"ö",
+ "Õ"=>"õ","Ô"=>"ô","Ó"=>"ó","Ã’"=>"ò","Ñ"=>"ñ","Ã"=>"ð","Ã"=>"ï","ÃŽ"=>"î","Ã"=>"í","ÃŒ"=>"ì",
+ "Ë"=>"ë","Ê"=>"ê","É"=>"é","È"=>"è","Ç"=>"ç","Æ"=>"æ","Å"=>"å","Ä"=>"ä","Ã"=>"ã","Â"=>"â",
+ "Ã"=>"á","À"=>"à","Îœ"=>"µ","Z"=>"z","Y"=>"y","X"=>"x","W"=>"w","V"=>"v","U"=>"u","T"=>"t",
+ "S"=>"s","R"=>"r","Q"=>"q","P"=>"p","O"=>"o","N"=>"n","M"=>"m","L"=>"l","K"=>"k","J"=>"j",
+ "I"=>"i","H"=>"h","G"=>"g","F"=>"f","E"=>"e","D"=>"d","C"=>"c","B"=>"b","A"=>"a"
+ );
+}; // end of case lookup tables
+
+/**
+ * UTF-8 lookup table for lower case accented letters
+ *
+ * This lookuptable defines replacements for accented characters from the ASCII-7
+ * range. This are lower case letters only.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @see utf8_deaccent()
+ */
+global $UTF8_LOWER_ACCENTS;
+if(empty($UTF8_LOWER_ACCENTS)) $UTF8_LOWER_ACCENTS = array(
+ 'à' => 'a', 'ô' => 'o', 'Ä' => 'd', 'ḟ' => 'f', 'ë' => 'e', 'Å¡' => 's', 'Æ¡' => 'o',
+ 'ß' => 'ss', 'ă' => 'a', 'Å™' => 'r', 'È›' => 't', 'ň' => 'n', 'Ä' => 'a', 'Ä·' => 'k',
+ 'Å' => 's', 'ỳ' => 'y', 'ņ' => 'n', 'ĺ' => 'l', 'ħ' => 'h', 'á¹—' => 'p', 'ó' => 'o',
+ 'ú' => 'u', 'Ä›' => 'e', 'é' => 'e', 'ç' => 'c', 'áº' => 'w', 'Ä‹' => 'c', 'õ' => 'o',
+ 'ṡ' => 's', 'ø' => 'o', 'ģ' => 'g', 'ŧ' => 't', 'ș' => 's', 'ė' => 'e', 'ĉ' => 'c',
+ 'ś' => 's', 'î' => 'i', 'ű' => 'u', 'ć' => 'c', 'ę' => 'e', 'ŵ' => 'w', 'ṫ' => 't',
+ 'Å«' => 'u', 'Ä' => 'c', 'ö' => 'oe', 'è' => 'e', 'Å·' => 'y', 'Ä…' => 'a', 'Å‚' => 'l',
+ 'ų' => 'u', 'ů' => 'u', 'ş' => 's', 'ğ' => 'g', 'ļ' => 'l', 'ƒ' => 'f', 'ž' => 'z',
+ 'ẃ' => 'w', 'ḃ' => 'b', 'å' => 'a', 'ì' => 'i', 'ï' => 'i', 'ḋ' => 'd', 'ť' => 't',
+ 'ŗ' => 'r', 'ä' => 'ae', 'í' => 'i', 'ŕ' => 'r', 'ê' => 'e', 'ü' => 'ue', 'ò' => 'o',
+ 'Ä“' => 'e', 'ñ' => 'n', 'Å„' => 'n', 'Ä¥' => 'h', 'Ä' => 'g', 'Ä‘' => 'd', 'ĵ' => 'j',
+ 'ÿ' => 'y', 'ũ' => 'u', 'ŭ' => 'u', 'ư' => 'u', 'ţ' => 't', 'ý' => 'y', 'ő' => 'o',
+ 'â' => 'a', 'ľ' => 'l', 'ẅ' => 'w', 'ż' => 'z', 'ī' => 'i', 'ã' => 'a', 'ġ' => 'g',
+ 'á¹' => 'm', 'Å' => 'o', 'Ä©' => 'i', 'ù' => 'u', 'į' => 'i', 'ź' => 'z', 'á' => 'a',
+ 'û' => 'u', 'þ' => 'th', 'ð' => 'dh', 'æ' => 'ae', 'µ' => 'u', 'ĕ' => 'e',
+);
+
+/**
+ * UTF-8 lookup table for upper case accented letters
+ *
+ * This lookuptable defines replacements for accented characters from the ASCII-7
+ * range. This are upper case letters only.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @see utf8_deaccent()
+ */
+global $UTF8_UPPER_ACCENTS;
+if(empty($UTF8_UPPER_ACCENTS)) $UTF8_UPPER_ACCENTS = array(
+ 'À' => 'A', 'Ô' => 'O', 'Ď' => 'D', 'Ḟ' => 'F', 'Ë' => 'E', 'Š' => 'S', 'Ơ' => 'O',
+ 'Ă' => 'A', 'Ř' => 'R', 'Ț' => 'T', 'Ň' => 'N', 'Ā' => 'A', 'Ķ' => 'K',
+ 'Ŝ' => 'S', 'Ỳ' => 'Y', 'Ņ' => 'N', 'Ĺ' => 'L', 'Ħ' => 'H', 'Ṗ' => 'P', 'Ó' => 'O',
+ 'Ú' => 'U', 'Ě' => 'E', 'É' => 'E', 'Ç' => 'C', 'Ẁ' => 'W', 'Ċ' => 'C', 'Õ' => 'O',
+ 'Ṡ' => 'S', 'Ø' => 'O', 'Ģ' => 'G', 'Ŧ' => 'T', 'Ș' => 'S', 'Ė' => 'E', 'Ĉ' => 'C',
+ 'Ś' => 'S', 'Î' => 'I', 'Ű' => 'U', 'Ć' => 'C', 'Ę' => 'E', 'Ŵ' => 'W', 'Ṫ' => 'T',
+ 'Ū' => 'U', 'ÄŒ' => 'C', 'Ö' => 'Oe', 'È' => 'E', 'Ŷ' => 'Y', 'Ä„' => 'A', 'Å' => 'L',
+ 'Ų' => 'U', 'Ů' => 'U', 'Ş' => 'S', 'Ğ' => 'G', 'Ļ' => 'L', 'Ƒ' => 'F', 'Ž' => 'Z',
+ 'Ẃ' => 'W', 'Ḃ' => 'B', 'Ã…' => 'A', 'ÃŒ' => 'I', 'Ã' => 'I', 'Ḋ' => 'D', 'Ť' => 'T',
+ 'Å–' => 'R', 'Ä' => 'Ae', 'Ã' => 'I', 'Å”' => 'R', 'Ê' => 'E', 'Ãœ' => 'Ue', 'Ã’' => 'O',
+ 'Ä’' => 'E', 'Ñ' => 'N', 'Ń' => 'N', 'Ĥ' => 'H', 'Äœ' => 'G', 'Ä' => 'D', 'Ä´' => 'J',
+ 'Ÿ' => 'Y', 'Ũ' => 'U', 'Ŭ' => 'U', 'Ư' => 'U', 'Å¢' => 'T', 'Ã' => 'Y', 'Å' => 'O',
+ 'Â' => 'A', 'Ľ' => 'L', 'Ẅ' => 'W', 'Ż' => 'Z', 'Ī' => 'I', 'Ã' => 'A', 'Ġ' => 'G',
+ 'á¹€' => 'M', 'ÅŒ' => 'O', 'Ĩ' => 'I', 'Ù' => 'U', 'Ä®' => 'I', 'Ź' => 'Z', 'Ã' => 'A',
+ 'Û' => 'U', 'Þ' => 'Th', 'Ã' => 'Dh', 'Æ' => 'Ae', 'Ä”' => 'E',
+);
+
+/**
+ * UTF-8 array of common special characters
+ *
+ * This array should contain all special characters (not a letter or digit)
+ * defined in the various local charsets - it's not a complete list of non-alphanum
+ * characters in UTF-8. It's not perfect but should match most cases of special
+ * chars.
+ *
+ * The controlchars 0x00 to 0x19 are _not_ included in this array. The space 0x20 is!
+ * These chars are _not_ in the array either: _ (0x5f), : 0x3a, . 0x2e, - 0x2d, * 0x2a
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @see utf8_stripspecials()
+ */
+global $UTF8_SPECIAL_CHARS;
+if(empty($UTF8_SPECIAL_CHARS)) $UTF8_SPECIAL_CHARS = array(
+ 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, 0x0020, 0x0021, 0x0022, 0x0023,
+ 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002b, 0x002c,
+ 0x002f, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, 0x0040, 0x005b,
+ 0x005c, 0x005d, 0x005e, 0x0060, 0x007b, 0x007c, 0x007d, 0x007e,
+ 0x007f, 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 0x0088,
+ 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, 0x0090, 0x0091, 0x0092,
+ 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 0x0098, 0x0099, 0x009a, 0x009b, 0x009c,
+ 0x009d, 0x009e, 0x009f, 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6,
+ 0x00a7, 0x00a8, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, 0x00b0,
+ 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, 0x00b8, 0x00b9, 0x00ba,
+ 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf, 0x00d7, 0x00f7, 0x02c7, 0x02d8, 0x02d9,
+ 0x02da, 0x02db, 0x02dc, 0x02dd, 0x0300, 0x0301, 0x0303, 0x0309, 0x0323, 0x0384,
+ 0x0385, 0x0387, 0x03c6, 0x03d1, 0x03d2, 0x03d5, 0x03d6, 0x05b0, 0x05b1,
+ 0x05b2, 0x05b3, 0x05b4, 0x05b5, 0x05b6, 0x05b7, 0x05b8, 0x05b9, 0x05bb, 0x05bc,
+ 0x05bd, 0x05be, 0x05bf, 0x05c0, 0x05c1, 0x05c2, 0x05c3, 0x05f3, 0x05f4, 0x060c,
+ 0x061b, 0x061f, 0x0640, 0x064b, 0x064c, 0x064d, 0x064e, 0x064f, 0x0650, 0x0651,
+ 0x0652, 0x066a, 0x0e3f, 0x200c, 0x200d, 0x200e, 0x200f, 0x2013, 0x2014, 0x2015,
+ 0x2017, 0x2018, 0x2019, 0x201a, 0x201c, 0x201d, 0x201e, 0x2020, 0x2021, 0x2022,
+ 0x2026, 0x2030, 0x2032, 0x2033, 0x2039, 0x203a, 0x2044, 0x20a7, 0x20aa, 0x20ab,
+ 0x20ac, 0x2116, 0x2118, 0x2122, 0x2126, 0x2135, 0x2190, 0x2191, 0x2192, 0x2193,
+ 0x2194, 0x2195, 0x21b5, 0x21d0, 0x21d1, 0x21d2, 0x21d3, 0x21d4, 0x2200, 0x2202,
+ 0x2203, 0x2205, 0x2206, 0x2207, 0x2208, 0x2209, 0x220b, 0x220f, 0x2211, 0x2212,
+ 0x2215, 0x2217, 0x2219, 0x221a, 0x221d, 0x221e, 0x2220, 0x2227, 0x2228, 0x2229,
+ 0x222a, 0x222b, 0x2234, 0x223c, 0x2245, 0x2248, 0x2260, 0x2261, 0x2264, 0x2265,
+ 0x2282, 0x2283, 0x2284, 0x2286, 0x2287, 0x2295, 0x2297, 0x22a5, 0x22c5, 0x2310,
+ 0x2320, 0x2321, 0x2329, 0x232a, 0x2469, 0x2500, 0x2502, 0x250c, 0x2510, 0x2514,
+ 0x2518, 0x251c, 0x2524, 0x252c, 0x2534, 0x253c, 0x2550, 0x2551, 0x2552, 0x2553,
+ 0x2554, 0x2555, 0x2556, 0x2557, 0x2558, 0x2559, 0x255a, 0x255b, 0x255c, 0x255d,
+ 0x255e, 0x255f, 0x2560, 0x2561, 0x2562, 0x2563, 0x2564, 0x2565, 0x2566, 0x2567,
+ 0x2568, 0x2569, 0x256a, 0x256b, 0x256c, 0x2580, 0x2584, 0x2588, 0x258c, 0x2590,
+ 0x2591, 0x2592, 0x2593, 0x25a0, 0x25b2, 0x25bc, 0x25c6, 0x25ca, 0x25cf, 0x25d7,
+ 0x2605, 0x260e, 0x261b, 0x261e, 0x2660, 0x2663, 0x2665, 0x2666, 0x2701, 0x2702,
+ 0x2703, 0x2704, 0x2706, 0x2707, 0x2708, 0x2709, 0x270c, 0x270d, 0x270e, 0x270f,
+ 0x2710, 0x2711, 0x2712, 0x2713, 0x2714, 0x2715, 0x2716, 0x2717, 0x2718, 0x2719,
+ 0x271a, 0x271b, 0x271c, 0x271d, 0x271e, 0x271f, 0x2720, 0x2721, 0x2722, 0x2723,
+ 0x2724, 0x2725, 0x2726, 0x2727, 0x2729, 0x272a, 0x272b, 0x272c, 0x272d, 0x272e,
+ 0x272f, 0x2730, 0x2731, 0x2732, 0x2733, 0x2734, 0x2735, 0x2736, 0x2737, 0x2738,
+ 0x2739, 0x273a, 0x273b, 0x273c, 0x273d, 0x273e, 0x273f, 0x2740, 0x2741, 0x2742,
+ 0x2743, 0x2744, 0x2745, 0x2746, 0x2747, 0x2748, 0x2749, 0x274a, 0x274b, 0x274d,
+ 0x274f, 0x2750, 0x2751, 0x2752, 0x2756, 0x2758, 0x2759, 0x275a, 0x275b, 0x275c,
+ 0x275d, 0x275e, 0x2761, 0x2762, 0x2763, 0x2764, 0x2765, 0x2766, 0x2767, 0x277f,
+ 0x2789, 0x2793, 0x2794, 0x2798, 0x2799, 0x279a, 0x279b, 0x279c, 0x279d, 0x279e,
+ 0x279f, 0x27a0, 0x27a1, 0x27a2, 0x27a3, 0x27a4, 0x27a5, 0x27a6, 0x27a7, 0x27a8,
+ 0x27a9, 0x27aa, 0x27ab, 0x27ac, 0x27ad, 0x27ae, 0x27af, 0x27b1, 0x27b2, 0x27b3,
+ 0x27b4, 0x27b5, 0x27b6, 0x27b7, 0x27b8, 0x27b9, 0x27ba, 0x27bb, 0x27bc, 0x27bd,
+ 0x27be, 0x3000, 0x3001, 0x3002, 0x3003, 0x3008, 0x3009, 0x300a, 0x300b, 0x300c,
+ 0x300d, 0x300e, 0x300f, 0x3010, 0x3011, 0x3012, 0x3014, 0x3015, 0x3016, 0x3017,
+ 0x3018, 0x3019, 0x301a, 0x301b, 0x3036,
+ 0xf6d9, 0xf6da, 0xf6db, 0xf8d7, 0xf8d8, 0xf8d9, 0xf8da, 0xf8db, 0xf8dc,
+ 0xf8dd, 0xf8de, 0xf8df, 0xf8e0, 0xf8e1, 0xf8e2, 0xf8e3, 0xf8e4, 0xf8e5, 0xf8e6,
+ 0xf8e7, 0xf8e8, 0xf8e9, 0xf8ea, 0xf8eb, 0xf8ec, 0xf8ed, 0xf8ee, 0xf8ef, 0xf8f0,
+ 0xf8f1, 0xf8f2, 0xf8f3, 0xf8f4, 0xf8f5, 0xf8f6, 0xf8f7, 0xf8f8, 0xf8f9, 0xf8fa,
+ 0xf8fb, 0xf8fc, 0xf8fd, 0xf8fe, 0xfe7c, 0xfe7d,
+ 0xff01, 0xff02, 0xff03, 0xff04, 0xff05, 0xff06, 0xff07, 0xff08, 0xff09,
+ 0xff09, 0xff0a, 0xff0b, 0xff0c, 0xff0d, 0xff0e, 0xff0f, 0xff1a, 0xff1b, 0xff1c,
+ 0xff1d, 0xff1e, 0xff1f, 0xff20, 0xff3b, 0xff3c, 0xff3d, 0xff3e, 0xff40, 0xff5b,
+ 0xff5c, 0xff5d, 0xff5e, 0xff5f, 0xff60, 0xff61, 0xff62, 0xff63, 0xff64, 0xff65,
+ 0xffe0, 0xffe1, 0xffe2, 0xffe3, 0xffe4, 0xffe5, 0xffe6, 0xffe8, 0xffe9, 0xffea,
+ 0xffeb, 0xffec, 0xffed, 0xffee,
+ 0x01d6fc, 0x01d6fd, 0x01d6fe, 0x01d6ff, 0x01d700, 0x01d701, 0x01d702, 0x01d703,
+ 0x01d704, 0x01d705, 0x01d706, 0x01d707, 0x01d708, 0x01d709, 0x01d70a, 0x01d70b,
+ 0x01d70c, 0x01d70d, 0x01d70e, 0x01d70f, 0x01d710, 0x01d711, 0x01d712, 0x01d713,
+ 0x01d714, 0x01d715, 0x01d716, 0x01d717, 0x01d718, 0x01d719, 0x01d71a, 0x01d71b,
+ 0xc2a0, 0xe28087, 0xe280af, 0xe281a0, 0xefbbbf,
+);
+
+// utf8 version of above data
+global $UTF8_SPECIAL_CHARS2;
+if(empty($UTF8_SPECIAL_CHARS2)) $UTF8_SPECIAL_CHARS2 =
+ "\x1A".' !"#$%&\'()+,/;<=>?@[\]^`{|}~€Â‚ƒ„…†‡ˆ‰Š‹ŒÂŽ‘’“”•�'.
+ '�—˜™š›œÂžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½�'.
+ '�¿×÷ˇ˘˙˚˛˜ËÌ€Ị̀̃̉΄΅·ϖְֱֲֳִֵֶַָֹֻּֽ־ֿ�'.
+ '�×ׂ׃׳״،؛؟ـًٌÙÙŽÙÙّْ٪฿‌â€â€Žâ€â€“—―‗‘’‚“â€ï¿½'.
+ '��†‡•…‰′″‹›â„₧₪₫€№℘™Ωℵâ†â†‘→↓↔↕↵'.
+ 'â‡â‡‘⇒⇓⇔∀∂∃∅∆∇∈∉∋âˆâˆ‘−∕∗∙√âˆâˆžâˆ âˆ§âˆ¨ï¿½'.
+ '�∪∫∴∼≅≈≠≡≤≥⊂⊃⊄⊆⊇⊕⊗⊥⋅âŒâŒ âŒ¡âŒ©âŒªâ‘©â”€ï¿½'.
+ '��┌â”└┘├┤┬┴┼â•â•‘╒╓╔╕╖╗╘╙╚╛╜â•â•žâ•Ÿâ• '.
+ '╡╢╣╤╥╦╧╨╩╪╫╬▀▄█▌â–░▒▓■▲▼◆◊â—�'.
+ '�★☎☛☞♠♣♥♦âœâœ‚✃✄✆✇✈✉✌âœâœŽâœâœâœ‘✒✓✔✕�'.
+ '��✗✘✙✚✛✜âœâœžâœŸâœ âœ¡âœ¢âœ£âœ¤âœ¥âœ¦âœ§âœ©âœªâœ«âœ¬âœ­âœ®âœ¯âœ°âœ±'.
+ '✲✳✴✵✶✷✸✹✺✻✼✽✾✿â€ââ‚âƒâ„â…â†â‡âˆâ‰âŠâ‹ï¿½'.
+ '�âââ‘â’â–â˜â™âšâ›âœââžâ¡â¢â£â¤â¥â¦â§â¿âž‰âž“➔➘➙➚�'.
+ '��➜âžâžžâžŸâž âž¡âž¢âž£âž¤âž¥âž¦âž§âž¨âž©âžªâž«âž¬âž­âž®âž¯âž±âž²âž³âž´âžµâž¶'.
+ '➷➸➹➺➻➼➽➾'.
+ ' ã€ã€‚〃〈〉《》「ã€ã€Žã€ã€ã€‘〒〔〕〖〗〘〙〚〛〶'.
+ 'ï£ï£žï£Ÿï£ ï£¡ï£¢ï££ï£¤ï£¥ï¿½'.
+ '�ﹼﹽ'.
+ 'ï¼ï¼‚#$%&'()*+,ï¼ï¼Žï¼ï¼šï¼›ï¼œï¼ï¼žï¼Ÿï¼ ï¼»ï¼¼ï¼½ï¼¾ï½€ï½›ï½œï½ï½ž'.
+ '⦅⦆。「」、・¢£¬ ̄¦¥₩│←↑→↓■○'.
+ 'ð›¼ð›½ð›¾ð›¿ðœ€ðœðœ‚ðœƒðœ„ðœ…ðœ†ðœ‡ðœˆðœ‰ðœŠðœ‹ðœŒðœðœŽðœðœðœ‘ðœ’ðœ“ðœ”ðœ•ðœ–ðœ—ðœ˜ðœ™ðœšðœ›'.
+ '   â ï»¿';
+
+/**
+ * Romanization lookup table
+ *
+ * This lookup tables provides a way to transform strings written in a language
+ * different from the ones based upon latin letters into plain ASCII.
+ *
+ * Please note: this is not a scientific transliteration table. It only works
+ * oneway from nonlatin to ASCII and it works by simple character replacement
+ * only. Specialities of each language are not supported.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Vitaly Blokhin <vitinfo@vitn.com>
+ * @link http://www.uconv.com/translit.htm
+ * @author Bisqwit <bisqwit@iki.fi>
+ * @link http://kanjidict.stc.cx/hiragana.php?src=2
+ * @link http://www.translatum.gr/converter/greek-transliteration.htm
+ * @link http://en.wikipedia.org/wiki/Royal_Thai_General_System_of_Transcription
+ * @link http://www.btranslations.com/resources/romanization/korean.asp
+ * @author Arthit Suriyawongkul <arthit@gmail.com>
+ * @author Denis Scheither <amorphis@uni-bremen.de>
+ */
+global $UTF8_ROMANIZATION;
+if(empty($UTF8_ROMANIZATION)) $UTF8_ROMANIZATION = array(
+ // scandinavian - differs from what we do in deaccent
+ 'å'=>'a','Å'=>'A','ä'=>'a','Ä'=>'A','ö'=>'o','Ö'=>'O',
+
+ //russian cyrillic
+ 'а'=>'a','Ð'=>'A','б'=>'b','Б'=>'B','в'=>'v','Ð’'=>'V','г'=>'g','Г'=>'G',
+ 'д'=>'d','Д'=>'D','е'=>'e','Е'=>'E','Ñ‘'=>'jo','Ð'=>'Jo','ж'=>'zh','Ж'=>'Zh',
+ 'з'=>'z','З'=>'Z','и'=>'i','И'=>'I','й'=>'j','Й'=>'J','к'=>'k','К'=>'K',
+ 'л'=>'l','Л'=>'L','м'=>'m','Ðœ'=>'M','н'=>'n','Ð'=>'N','о'=>'o','О'=>'O',
+ 'п'=>'p','П'=>'P','Ñ€'=>'r','Р'=>'R','Ñ'=>'s','С'=>'S','Ñ‚'=>'t','Т'=>'T',
+ 'у'=>'u','У'=>'U','ф'=>'f','Ф'=>'F','х'=>'x','Х'=>'X','ц'=>'c','Ц'=>'C',
+ 'ч'=>'ch','Ч'=>'Ch','ш'=>'sh','Ш'=>'Sh','щ'=>'sch','Щ'=>'Sch','ъ'=>'',
+ 'Ъ'=>'','Ñ‹'=>'y','Ы'=>'Y','ÑŒ'=>'','Ь'=>'','Ñ'=>'eh','Э'=>'Eh','ÑŽ'=>'ju',
+ 'Ю'=>'Ju','Ñ'=>'ja','Я'=>'Ja',
+ // Ukrainian cyrillic
+ 'Ò'=>'Gh','Ò‘'=>'gh','Є'=>'Je','Ñ”'=>'je','І'=>'I','Ñ–'=>'i','Ї'=>'Ji','Ñ—'=>'ji',
+ // Georgian
+ 'áƒ'=>'a','ბ'=>'b','გ'=>'g','დ'=>'d','ე'=>'e','ვ'=>'v','ზ'=>'z','თ'=>'th',
+ 'ი'=>'i','კ'=>'p','ლ'=>'l','მ'=>'m','ნ'=>'n','áƒ'=>'o','პ'=>'p','ჟ'=>'zh',
+ 'რ'=>'r','ს'=>'s','ტ'=>'t','უ'=>'u','ფ'=>'ph','ქ'=>'kh','ღ'=>'gh','ყ'=>'q',
+ 'შ'=>'sh','ჩ'=>'ch','ც'=>'c','ძ'=>'dh','წ'=>'w','ჭ'=>'j','ხ'=>'x','ჯ'=>'jh',
+ 'ჰ'=>'xh',
+ //Sanskrit
+ 'अ'=>'a','आ'=>'ah','इ'=>'i','ई'=>'ih','उ'=>'u','ऊ'=>'uh','ऋ'=>'ry',
+ 'ॠ'=>'ryh','ऌ'=>'ly','ॡ'=>'lyh','à¤'=>'e','à¤'=>'ay','ओ'=>'o','औ'=>'aw',
+ 'अं'=>'amh','अः'=>'aq','क'=>'k','ख'=>'kh','ग'=>'g','घ'=>'gh','ङ'=>'nh',
+ 'च'=>'c','छ'=>'ch','ज'=>'j','à¤'=>'jh','ञ'=>'ny','ट'=>'tq','ठ'=>'tqh',
+ 'ड'=>'dq','ढ'=>'dqh','ण'=>'nq','त'=>'t','थ'=>'th','द'=>'d','ध'=>'dh',
+ 'न'=>'n','प'=>'p','फ'=>'ph','ब'=>'b','भ'=>'bh','म'=>'m','य'=>'z','र'=>'r',
+ 'ल'=>'l','व'=>'v','श'=>'sh','ष'=>'sqh','स'=>'s','ह'=>'x',
+ //Hebrew
+ '×'=>'a', 'ב'=>'b','×’'=>'g','ד'=>'d','×”'=>'h','ו'=>'v','×–'=>'z','×—'=>'kh','ט'=>'th',
+ '×™'=>'y','ך'=>'h','×›'=>'k','ל'=>'l','×'=>'m','מ'=>'m','ן'=>'n','× '=>'n',
+ 'ס'=>'s','ע'=>'ah','ף'=>'f','פ'=>'p','ץ'=>'c','צ'=>'c','ק'=>'q','ר'=>'r',
+ 'ש'=>'sh','ת'=>'t',
+ //Arabic
+ 'ا'=>'a','ب'=>'b','ت'=>'t','ث'=>'th','ج'=>'g','ح'=>'xh','خ'=>'x','د'=>'d',
+ 'ذ'=>'dh','ر'=>'r','ز'=>'z','س'=>'s','ش'=>'sh','ص'=>'s\'','ض'=>'d\'',
+ 'Ø·'=>'t\'','ظ'=>'z\'','ع'=>'y','غ'=>'gh','Ù'=>'f','Ù‚'=>'q','Ùƒ'=>'k',
+ 'Ù„'=>'l','Ù…'=>'m','Ù†'=>'n','Ù‡'=>'x\'','Ùˆ'=>'u','ÙŠ'=>'i',
+
+ // Japanese characters (last update: 2008-05-09)
+
+ // Japanese hiragana
+
+ // 3 character syllables, 㣠doubles the consonant after
+ 'ã£ã¡ã‚ƒ'=>'ccha','ã£ã¡ã‡'=>'cche','ã£ã¡ã‚‡'=>'ccho','ã£ã¡ã‚…'=>'cchu',
+ 'ã£ã³ã‚ƒ'=>'bbya','ã£ã³ã‡'=>'bbye','ã£ã³ãƒ'=>'bbyi','ã£ã³ã‚‡'=>'bbyo','ã£ã³ã‚…'=>'bbyu',
+ 'ã£ã´ã‚ƒ'=>'ppya','ã£ã´ã‡'=>'ppye','ã£ã´ãƒ'=>'ppyi','ã£ã´ã‚‡'=>'ppyo','ã£ã´ã‚…'=>'ppyu',
+ 'ã£ã¡ã‚ƒ'=>'ccha','ã£ã¡ã‡'=>'cche','ã£ã¡'=>'cchi','ã£ã¡ã‚‡'=>'ccho','ã£ã¡ã‚…'=>'cchu',
+ // 'ã£ã²ã‚ƒ'=>'hya','ã£ã²ã‡'=>'hye','ã£ã²ãƒ'=>'hyi','ã£ã²ã‚‡'=>'hyo','ã£ã²ã‚…'=>'hyu',
+ 'ã£ãゃ'=>'kkya','ã£ãã‡'=>'kkye','ã£ããƒ'=>'kkyi','ã£ãょ'=>'kkyo','ã£ãã‚…'=>'kkyu',
+ 'ã£ãŽã‚ƒ'=>'ggya','ã£ãŽã‡'=>'ggye','ã£ãŽãƒ'=>'ggyi','ã£ãŽã‚‡'=>'ggyo','ã£ãŽã‚…'=>'ggyu',
+ 'ã£ã¿ã‚ƒ'=>'mmya','ã£ã¿ã‡'=>'mmye','ã£ã¿ãƒ'=>'mmyi','ã£ã¿ã‚‡'=>'mmyo','ã£ã¿ã‚…'=>'mmyu',
+ 'ã£ã«ã‚ƒ'=>'nnya','ã£ã«ã‡'=>'nnye','ã£ã«ãƒ'=>'nnyi','ã£ã«ã‚‡'=>'nnyo','ã£ã«ã‚…'=>'nnyu',
+ 'ã£ã‚Šã‚ƒ'=>'rrya','ã£ã‚Šã‡'=>'rrye','ã£ã‚Šãƒ'=>'rryi','ã£ã‚Šã‚‡'=>'rryo','ã£ã‚Šã‚…'=>'rryu',
+ 'ã£ã—ゃ'=>'ssha','ã£ã—ã‡'=>'sshe','ã£ã—'=>'sshi','ã£ã—ょ'=>'ssho','ã£ã—ã‚…'=>'sshu',
+
+ // seperate hiragana 'n' ('n' + 'i' != 'ni', normally we would write "kon'nichi wa" but the apostrophe would be converted to _ anyway)
+ 'ã‚“ã‚'=>'n_a','ã‚“ãˆ'=>'n_e','ã‚“ã„'=>'n_i','ã‚“ãŠ'=>'n_o','ã‚“ã†'=>'n_u',
+ 'んや'=>'n_ya','んよ'=>'n_yo','んゆ'=>'n_yu',
+
+ // 2 character syllables - normal
+ 'ãµã'=>'fa','ãµã‡'=>'fe','ãµãƒ'=>'fi','ãµã‰'=>'fo',
+ 'ã¡ã‚ƒ'=>'cha','ã¡ã‡'=>'che','ã¡'=>'chi','ã¡ã‚‡'=>'cho','ã¡ã‚…'=>'chu',
+ 'ã²ã‚ƒ'=>'hya','ã²ã‡'=>'hye','ã²ãƒ'=>'hyi','ã²ã‚‡'=>'hyo','ã²ã‚…'=>'hyu',
+ 'ã³ã‚ƒ'=>'bya','ã³ã‡'=>'bye','ã³ãƒ'=>'byi','ã³ã‚‡'=>'byo','ã³ã‚…'=>'byu',
+ 'ã´ã‚ƒ'=>'pya','ã´ã‡'=>'pye','ã´ãƒ'=>'pyi','ã´ã‚‡'=>'pyo','ã´ã‚…'=>'pyu',
+ 'ãゃ'=>'kya','ãã‡'=>'kye','ããƒ'=>'kyi','ãょ'=>'kyo','ãã‚…'=>'kyu',
+ 'ãŽã‚ƒ'=>'gya','ãŽã‡'=>'gye','ãŽãƒ'=>'gyi','ãŽã‚‡'=>'gyo','ãŽã‚…'=>'gyu',
+ 'ã¿ã‚ƒ'=>'mya','ã¿ã‡'=>'mye','ã¿ãƒ'=>'myi','ã¿ã‚‡'=>'myo','ã¿ã‚…'=>'myu',
+ 'ã«ã‚ƒ'=>'nya','ã«ã‡'=>'nye','ã«ãƒ'=>'nyi','ã«ã‚‡'=>'nyo','ã«ã‚…'=>'nyu',
+ 'りゃ'=>'rya','ã‚Šã‡'=>'rye','ã‚Šãƒ'=>'ryi','りょ'=>'ryo','ã‚Šã‚…'=>'ryu',
+ 'ã—ゃ'=>'sha','ã—ã‡'=>'she','ã—'=>'shi','ã—ょ'=>'sho','ã—ã‚…'=>'shu',
+ 'ã˜ã‚ƒ'=>'ja','ã˜ã‡'=>'je','ã˜ã‚‡'=>'jo','ã˜ã‚…'=>'ju',
+ 'ã†ã‡'=>'we','ã†ãƒ'=>'wi',
+ 'ã„ã‡'=>'ye',
+
+ // 2 character syllables, 㣠doubles the consonant after
+ 'ã£ã°'=>'bba','ã£ã¹'=>'bbe','ã£ã³'=>'bbi','ã£ã¼'=>'bbo','ã£ã¶'=>'bbu',
+ 'ã£ã±'=>'ppa','ã£ãº'=>'ppe','ã£ã´'=>'ppi','ã£ã½'=>'ppo','ã£ã·'=>'ppu',
+ 'ã£ãŸ'=>'tta','ã£ã¦'=>'tte','ã£ã¡'=>'cchi','ã£ã¨'=>'tto','ã£ã¤'=>'ttsu',
+ 'ã£ã '=>'dda','ã£ã§'=>'dde','ã£ã¢'=>'ddi','ã£ã©'=>'ddo','ã£ã¥'=>'ddu',
+ 'ã£ãŒ'=>'gga','ã£ã’'=>'gge','ã£ãŽ'=>'ggi','ã£ã”'=>'ggo','ã£ã'=>'ggu',
+ 'ã£ã‹'=>'kka','ã£ã‘'=>'kke','ã£ã'=>'kki','ã£ã“'=>'kko','ã£ã'=>'kku',
+ 'ã£ã¾'=>'mma','ã£ã‚'=>'mme','ã£ã¿'=>'mmi','ã£ã‚‚'=>'mmo','ã£ã‚€'=>'mmu',
+ 'ã£ãª'=>'nna','ã£ã­'=>'nne','ã£ã«'=>'nni','ã£ã®'=>'nno','ã£ã¬'=>'nnu',
+ 'ã£ã‚‰'=>'rra','ã£ã‚Œ'=>'rre','ã£ã‚Š'=>'rri','ã£ã‚'=>'rro','ã£ã‚‹'=>'rru',
+ 'ã£ã•'=>'ssa','ã£ã›'=>'sse','ã£ã—'=>'sshi','ã£ã'=>'sso','ã£ã™'=>'ssu',
+ 'ã£ã–'=>'zza','ã£ãœ'=>'zze','ã£ã˜'=>'jji','ã£ãž'=>'zzo','ã£ãš'=>'zzu',
+
+ // 1 character syllabels
+ 'ã‚'=>'a','ãˆ'=>'e','ã„'=>'i','ãŠ'=>'o','ã†'=>'u','ã‚“'=>'n',
+ 'ã¯'=>'ha','ã¸'=>'he','ã²'=>'hi','ã»'=>'ho','ãµ'=>'fu',
+ 'ã°'=>'ba','ã¹'=>'be','ã³'=>'bi','ã¼'=>'bo','ã¶'=>'bu',
+ 'ã±'=>'pa','ãº'=>'pe','ã´'=>'pi','ã½'=>'po','ã·'=>'pu',
+ 'ãŸ'=>'ta','ã¦'=>'te','ã¡'=>'chi','ã¨'=>'to','ã¤'=>'tsu',
+ 'ã '=>'da','ã§'=>'de','ã¢'=>'di','ã©'=>'do','ã¥'=>'du',
+ 'ãŒ'=>'ga','ã’'=>'ge','ãŽ'=>'gi','ã”'=>'go','ã'=>'gu',
+ 'ã‹'=>'ka','ã‘'=>'ke','ã'=>'ki','ã“'=>'ko','ã'=>'ku',
+ 'ã¾'=>'ma','ã‚'=>'me','ã¿'=>'mi','ã‚‚'=>'mo','ã‚€'=>'mu',
+ 'ãª'=>'na','ã­'=>'ne','ã«'=>'ni','ã®'=>'no','ã¬'=>'nu',
+ 'ら'=>'ra','ã‚Œ'=>'re','ã‚Š'=>'ri','ã‚'=>'ro','ã‚‹'=>'ru',
+ 'ã•'=>'sa','ã›'=>'se','ã—'=>'shi','ã'=>'so','ã™'=>'su',
+ 'ã‚'=>'wa','ã‚’'=>'wo',
+ 'ã–'=>'za','ãœ'=>'ze','ã˜'=>'ji','ãž'=>'zo','ãš'=>'zu',
+ 'や'=>'ya','よ'=>'yo','ゆ'=>'yu',
+ // old characters
+ 'ã‚‘'=>'we','ã‚'=>'wi',
+
+ // convert what's left (probably only kicks in when something's missing above)
+ // 'ã'=>'a','ã‡'=>'e','ãƒ'=>'i','ã‰'=>'o','ã…'=>'u',
+ // 'ゃ'=>'ya','ょ'=>'yo','ゅ'=>'yu',
+
+ // never seen one of those (disabled for the moment)
+ // 'ヴã'=>'va','ヴã‡'=>'ve','ヴãƒ'=>'vi','ヴã‰'=>'vo','ヴ'=>'vu',
+ // 'ã§ã‚ƒ'=>'dha','ã§ã‡'=>'dhe','ã§ãƒ'=>'dhi','ã§ã‚‡'=>'dho','ã§ã‚…'=>'dhu',
+ // 'ã©ã'=>'dwa','ã©ã‡'=>'dwe','ã©ãƒ'=>'dwi','ã©ã‰'=>'dwo','ã©ã…'=>'dwu',
+ // 'ã¢ã‚ƒ'=>'dya','ã¢ã‡'=>'dye','ã¢ãƒ'=>'dyi','ã¢ã‚‡'=>'dyo','ã¢ã‚…'=>'dyu',
+ // 'ãµã'=>'fwa','ãµã‡'=>'fwe','ãµãƒ'=>'fwi','ãµã‰'=>'fwo','ãµã…'=>'fwu',
+ // 'ãµã‚ƒ'=>'fya','ãµã‡'=>'fye','ãµãƒ'=>'fyi','ãµã‚‡'=>'fyo','ãµã‚…'=>'fyu',
+ // 'ã™ã'=>'swa','ã™ã‡'=>'swe','ã™ãƒ'=>'swi','ã™ã‰'=>'swo','ã™ã…'=>'swu',
+ // 'ã¦ã‚ƒ'=>'tha','ã¦ã‡'=>'the','ã¦ãƒ'=>'thi','ã¦ã‚‡'=>'tho','ã¦ã‚…'=>'thu',
+ // 'ã¤ã‚ƒ'=>'tsa','ã¤ã‡'=>'tse','ã¤ãƒ'=>'tsi','ã¤ã‚‡'=>'tso','ã¤'=>'tsu',
+ // 'ã¨ã'=>'twa','ã¨ã‡'=>'twe','ã¨ãƒ'=>'twi','ã¨ã‰'=>'two','ã¨ã…'=>'twu',
+ // 'ヴゃ'=>'vya','ヴã‡'=>'vye','ヴãƒ'=>'vyi','ヴょ'=>'vyo','ヴゅ'=>'vyu',
+ // 'ã†ã'=>'wha','ã†ã‡'=>'whe','ã†ãƒ'=>'whi','ã†ã‰'=>'who','ã†ã…'=>'whu',
+ // 'ã˜ã‚ƒ'=>'zha','ã˜ã‡'=>'zhe','ã˜ãƒ'=>'zhi','ã˜ã‚‡'=>'zho','ã˜ã‚…'=>'zhu',
+ // 'ã˜ã‚ƒ'=>'zya','ã˜ã‡'=>'zye','ã˜ãƒ'=>'zyi','ã˜ã‚‡'=>'zyo','ã˜ã‚…'=>'zyu',
+
+ // 'spare' characters from other romanization systems
+ // 'ã '=>'da','ã§'=>'de','ã¢'=>'di','ã©'=>'do','ã¥'=>'du',
+ // 'ら'=>'la','ã‚Œ'=>'le','ã‚Š'=>'li','ã‚'=>'lo','ã‚‹'=>'lu',
+ // 'ã•'=>'sa','ã›'=>'se','ã—'=>'si','ã'=>'so','ã™'=>'su',
+ // 'ã¡ã‚ƒ'=>'cya','ã¡ã‡'=>'cye','ã¡ãƒ'=>'cyi','ã¡ã‚‡'=>'cyo','ã¡ã‚…'=>'cyu',
+ //'ã˜ã‚ƒ'=>'jya','ã˜ã‡'=>'jye','ã˜ãƒ'=>'jyi','ã˜ã‚‡'=>'jyo','ã˜ã‚…'=>'jyu',
+ //'りゃ'=>'lya','ã‚Šã‡'=>'lye','ã‚Šãƒ'=>'lyi','りょ'=>'lyo','ã‚Šã‚…'=>'lyu',
+ //'ã—ゃ'=>'sya','ã—ã‡'=>'sye','ã—ãƒ'=>'syi','ã—ょ'=>'syo','ã—ã‚…'=>'syu',
+ //'ã¡ã‚ƒ'=>'tya','ã¡ã‡'=>'tye','ã¡ãƒ'=>'tyi','ã¡ã‚‡'=>'tyo','ã¡ã‚…'=>'tyu',
+ //'ã—'=>'ci',,ã„'=>'yi','ã¢'=>'dzi',
+ //'ã£ã˜ã‚ƒ'=>'jja','ã£ã˜ã‡'=>'jje','ã£ã˜'=>'jji','ã£ã˜ã‚‡'=>'jjo','ã£ã˜ã‚…'=>'jju',
+
+
+ // Japanese katakana
+
+ // 4 character syllables: ッ doubles the consonant after, ー doubles the vowel before (usualy written with macron, but we don't want that in our URLs)
+ 'ッビャー'=>'bbyaa','ッビェー'=>'bbyee','ッビィー'=>'bbyii','ッビョー'=>'bbyoo','ッビュー'=>'bbyuu',
+ 'ッピャー'=>'ppyaa','ッピェー'=>'ppyee','ッピィー'=>'ppyii','ッピョー'=>'ppyoo','ッピュー'=>'ppyuu',
+ 'ッキャー'=>'kkyaa','ッキェー'=>'kkyee','ッキィー'=>'kkyii','ッキョー'=>'kkyoo','ッキュー'=>'kkyuu',
+ 'ッギャー'=>'ggyaa','ッギェー'=>'ggyee','ッギィー'=>'ggyii','ッギョー'=>'ggyoo','ッギュー'=>'ggyuu',
+ 'ッミャー'=>'mmyaa','ッミェー'=>'mmyee','ッミィー'=>'mmyii','ッミョー'=>'mmyoo','ッミュー'=>'mmyuu',
+ 'ッニャー'=>'nnyaa','ッニェー'=>'nnyee','ッニィー'=>'nnyii','ッニョー'=>'nnyoo','ッニュー'=>'nnyuu',
+ 'ッリャー'=>'rryaa','ッリェー'=>'rryee','ッリィー'=>'rryii','ッリョー'=>'rryoo','ッリュー'=>'rryuu',
+ 'ッシャー'=>'sshaa','ッシェー'=>'sshee','ッシー'=>'sshii','ッショー'=>'sshoo','ッシュー'=>'sshuu',
+ 'ッãƒãƒ£ãƒ¼'=>'cchaa','ッãƒã‚§ãƒ¼'=>'cchee','ッãƒãƒ¼'=>'cchii','ッãƒãƒ§ãƒ¼'=>'cchoo','ッãƒãƒ¥ãƒ¼'=>'cchuu',
+ 'ッティー'=>'ttii',
+ 'ッヂィー'=>'ddii',
+
+ // 3 character syllables - doubled vowels
+ 'ファー'=>'faa','フェー'=>'fee','フィー'=>'fii','フォー'=>'foo',
+ 'フャー'=>'fyaa','フェー'=>'fyee','フィー'=>'fyii','フョー'=>'fyoo','フュー'=>'fyuu',
+ 'ヒャー'=>'hyaa','ヒェー'=>'hyee','ヒィー'=>'hyii','ヒョー'=>'hyoo','ヒュー'=>'hyuu',
+ 'ビャー'=>'byaa','ビェー'=>'byee','ビィー'=>'byii','ビョー'=>'byoo','ビュー'=>'byuu',
+ 'ピャー'=>'pyaa','ピェー'=>'pyee','ピィー'=>'pyii','ピョー'=>'pyoo','ピュー'=>'pyuu',
+ 'キャー'=>'kyaa','キェー'=>'kyee','キィー'=>'kyii','キョー'=>'kyoo','キュー'=>'kyuu',
+ 'ギャー'=>'gyaa','ギェー'=>'gyee','ギィー'=>'gyii','ギョー'=>'gyoo','ギュー'=>'gyuu',
+ 'ミャー'=>'myaa','ミェー'=>'myee','ミィー'=>'myii','ミョー'=>'myoo','ミュー'=>'myuu',
+ 'ニャー'=>'nyaa','ニェー'=>'nyee','ニィー'=>'nyii','ニョー'=>'nyoo','ニュー'=>'nyuu',
+ 'リャー'=>'ryaa','リェー'=>'ryee','リィー'=>'ryii','リョー'=>'ryoo','リュー'=>'ryuu',
+ 'シャー'=>'shaa','シェー'=>'shee','シー'=>'shii','ショー'=>'shoo','シュー'=>'shuu',
+ 'ジャー'=>'jaa','ジェー'=>'jee','ジー'=>'jii','ジョー'=>'joo','ジュー'=>'juu',
+ 'スァー'=>'swaa','スェー'=>'swee','スィー'=>'swii','スォー'=>'swoo','スゥー'=>'swuu',
+ 'デァー'=>'daa','デェー'=>'dee','ディー'=>'dii','デォー'=>'doo','デゥー'=>'duu',
+ 'ãƒãƒ£ãƒ¼'=>'chaa','ãƒã‚§ãƒ¼'=>'chee','ãƒãƒ¼'=>'chii','ãƒãƒ§ãƒ¼'=>'choo','ãƒãƒ¥ãƒ¼'=>'chuu',
+ 'ヂャー'=>'dyaa','ヂェー'=>'dyee','ヂィー'=>'dyii','ヂョー'=>'dyoo','ヂュー'=>'dyuu',
+ 'ツャー'=>'tsaa','ツェー'=>'tsee','ツィー'=>'tsii','ツョー'=>'tsoo','ツー'=>'tsuu',
+ 'トァー'=>'twaa','トェー'=>'twee','トィー'=>'twii','トォー'=>'twoo','トゥー'=>'twuu',
+ 'ドァー'=>'dwaa','ドェー'=>'dwee','ドィー'=>'dwii','ドォー'=>'dwoo','ドゥー'=>'dwuu',
+ 'ウァー'=>'whaa','ウェー'=>'whee','ウィー'=>'whii','ウォー'=>'whoo','ウゥー'=>'whuu',
+ 'ヴャー'=>'vyaa','ヴェー'=>'vyee','ヴィー'=>'vyii','ヴョー'=>'vyoo','ヴュー'=>'vyuu',
+ 'ヴァー'=>'vaa','ヴェー'=>'vee','ヴィー'=>'vii','ヴォー'=>'voo','ヴー'=>'vuu',
+ 'ウェー'=>'wee','ウィー'=>'wii',
+ 'イェー'=>'yee',
+ 'ティー'=>'tii',
+ 'ヂィー'=>'dii',
+
+ // 3 character syllables - doubled consonants
+ 'ッビャ'=>'bbya','ッビェ'=>'bbye','ッビィ'=>'bbyi','ッビョ'=>'bbyo','ッビュ'=>'bbyu',
+ 'ッピャ'=>'ppya','ッピェ'=>'ppye','ッピィ'=>'ppyi','ッピョ'=>'ppyo','ッピュ'=>'ppyu',
+ 'ッキャ'=>'kkya','ッキェ'=>'kkye','ッキィ'=>'kkyi','ッキョ'=>'kkyo','ッキュ'=>'kkyu',
+ 'ッギャ'=>'ggya','ッギェ'=>'ggye','ッギィ'=>'ggyi','ッギョ'=>'ggyo','ッギュ'=>'ggyu',
+ 'ッミャ'=>'mmya','ッミェ'=>'mmye','ッミィ'=>'mmyi','ッミョ'=>'mmyo','ッミュ'=>'mmyu',
+ 'ッニャ'=>'nnya','ッニェ'=>'nnye','ッニィ'=>'nnyi','ッニョ'=>'nnyo','ッニュ'=>'nnyu',
+ 'ッリャ'=>'rrya','ッリェ'=>'rrye','ッリィ'=>'rryi','ッリョ'=>'rryo','ッリュ'=>'rryu',
+ 'ッシャ'=>'ssha','ッシェ'=>'sshe','ッシ'=>'sshi','ッショ'=>'ssho','ッシュ'=>'sshu',
+ 'ッãƒãƒ£'=>'ccha','ッãƒã‚§'=>'cche','ッãƒ'=>'cchi','ッãƒãƒ§'=>'ccho','ッãƒãƒ¥'=>'cchu',
+ 'ッティ'=>'tti',
+ 'ッヂィ'=>'ddi',
+
+ // 3 character syllables - doubled vowel and consonants
+ 'ッãƒãƒ¼'=>'bbaa','ッベー'=>'bbee','ッビー'=>'bbii','ッボー'=>'bboo','ッブー'=>'bbuu',
+ 'ッパー'=>'ppaa','ッペー'=>'ppee','ッピー'=>'ppii','ッãƒãƒ¼'=>'ppoo','ップー'=>'ppuu',
+ 'ッケー'=>'kkee','ッキー'=>'kkii','ッコー'=>'kkoo','ックー'=>'kkuu','ッカー'=>'kkaa',
+ 'ッガー'=>'ggaa','ッゲー'=>'ggee','ッギー'=>'ggii','ッゴー'=>'ggoo','ッグー'=>'gguu',
+ 'ッマー'=>'maa','ッメー'=>'mee','ッミー'=>'mii','ッモー'=>'moo','ッムー'=>'muu',
+ 'ッナー'=>'nnaa','ッãƒãƒ¼'=>'nnee','ッニー'=>'nnii','ッノー'=>'nnoo','ッヌー'=>'nnuu',
+ 'ッラー'=>'rraa','ッレー'=>'rree','ッリー'=>'rrii','ッロー'=>'rroo','ッルー'=>'rruu',
+ 'ッサー'=>'ssaa','ッセー'=>'ssee','ッシー'=>'sshii','ッソー'=>'ssoo','ッスー'=>'ssuu',
+ 'ッザー'=>'zzaa','ッゼー'=>'zzee','ッジー'=>'jjii','ッゾー'=>'zzoo','ッズー'=>'zzuu',
+ 'ッター'=>'ttaa','ッテー'=>'ttee','ッãƒãƒ¼'=>'chii','ットー'=>'ttoo','ッツー'=>'ttsuu',
+ 'ッダー'=>'ddaa','ッデー'=>'ddee','ッヂー'=>'ddii','ッドー'=>'ddoo','ッヅー'=>'dduu',
+
+ // 2 character syllables - normal
+ 'ファ'=>'fa','フェ'=>'fe','フィ'=>'fi','フォ'=>'fo','フゥ'=>'fu',
+ // 'フャ'=>'fya','フェ'=>'fye','フィ'=>'fyi','フョ'=>'fyo','フュ'=>'fyu',
+ 'フャ'=>'fa','フェ'=>'fe','フィ'=>'fi','フョ'=>'fo','フュ'=>'fu',
+ 'ヒャ'=>'hya','ヒェ'=>'hye','ヒィ'=>'hyi','ヒョ'=>'hyo','ヒュ'=>'hyu',
+ 'ビャ'=>'bya','ビェ'=>'bye','ビィ'=>'byi','ビョ'=>'byo','ビュ'=>'byu',
+ 'ピャ'=>'pya','ピェ'=>'pye','ピィ'=>'pyi','ピョ'=>'pyo','ピュ'=>'pyu',
+ 'キャ'=>'kya','キェ'=>'kye','キィ'=>'kyi','キョ'=>'kyo','キュ'=>'kyu',
+ 'ギャ'=>'gya','ギェ'=>'gye','ギィ'=>'gyi','ギョ'=>'gyo','ギュ'=>'gyu',
+ 'ミャ'=>'mya','ミェ'=>'mye','ミィ'=>'myi','ミョ'=>'myo','ミュ'=>'myu',
+ 'ニャ'=>'nya','ニェ'=>'nye','ニィ'=>'nyi','ニョ'=>'nyo','ニュ'=>'nyu',
+ 'リャ'=>'rya','リェ'=>'rye','リィ'=>'ryi','リョ'=>'ryo','リュ'=>'ryu',
+ 'シャ'=>'sha','シェ'=>'she','ショ'=>'sho','シュ'=>'shu',
+ 'ジャ'=>'ja','ジェ'=>'je','ジョ'=>'jo','ジュ'=>'ju',
+ 'スァ'=>'swa','スェ'=>'swe','スィ'=>'swi','スォ'=>'swo','スゥ'=>'swu',
+ 'デァ'=>'da','デェ'=>'de','ディ'=>'di','デォ'=>'do','デゥ'=>'du',
+ 'ãƒãƒ£'=>'cha','ãƒã‚§'=>'che','ãƒ'=>'chi','ãƒãƒ§'=>'cho','ãƒãƒ¥'=>'chu',
+ // 'ヂャ'=>'dya','ヂェ'=>'dye','ヂィ'=>'dyi','ヂョ'=>'dyo','ヂュ'=>'dyu',
+ 'ツャ'=>'tsa','ツェ'=>'tse','ツィ'=>'tsi','ツョ'=>'tso','ツ'=>'tsu',
+ 'トァ'=>'twa','トェ'=>'twe','トィ'=>'twi','トォ'=>'two','トゥ'=>'twu',
+ 'ドァ'=>'dwa','ドェ'=>'dwe','ドィ'=>'dwi','ドォ'=>'dwo','ドゥ'=>'dwu',
+ 'ウァ'=>'wha','ウェ'=>'whe','ウィ'=>'whi','ウォ'=>'who','ウゥ'=>'whu',
+ 'ヴャ'=>'vya','ヴェ'=>'vye','ヴィ'=>'vyi','ヴョ'=>'vyo','ヴュ'=>'vyu',
+ 'ヴァ'=>'va','ヴェ'=>'ve','ヴィ'=>'vi','ヴォ'=>'vo','ヴ'=>'vu',
+ 'ウェ'=>'we','ウィ'=>'wi',
+ 'イェ'=>'ye',
+ 'ティ'=>'ti',
+ 'ヂィ'=>'di',
+
+ // 2 character syllables - doubled vocal
+ 'アー'=>'aa','エー'=>'ee','イー'=>'ii','オー'=>'oo','ウー'=>'uu',
+ 'ダー'=>'daa','デー'=>'dee','ヂー'=>'dii','ドー'=>'doo','ヅー'=>'duu',
+ 'ãƒãƒ¼'=>'haa','ヘー'=>'hee','ヒー'=>'hii','ホー'=>'hoo','フー'=>'fuu',
+ 'ãƒãƒ¼'=>'baa','ベー'=>'bee','ビー'=>'bii','ボー'=>'boo','ブー'=>'buu',
+ 'パー'=>'paa','ペー'=>'pee','ピー'=>'pii','ãƒãƒ¼'=>'poo','プー'=>'puu',
+ 'ケー'=>'kee','キー'=>'kii','コー'=>'koo','クー'=>'kuu','カー'=>'kaa',
+ 'ガー'=>'gaa','ゲー'=>'gee','ギー'=>'gii','ゴー'=>'goo','グー'=>'guu',
+ 'マー'=>'maa','メー'=>'mee','ミー'=>'mii','モー'=>'moo','ムー'=>'muu',
+ 'ナー'=>'naa','ãƒãƒ¼'=>'nee','ニー'=>'nii','ノー'=>'noo','ヌー'=>'nuu',
+ 'ラー'=>'raa','レー'=>'ree','リー'=>'rii','ロー'=>'roo','ルー'=>'ruu',
+ 'サー'=>'saa','セー'=>'see','シー'=>'shii','ソー'=>'soo','スー'=>'suu',
+ 'ザー'=>'zaa','ゼー'=>'zee','ジー'=>'jii','ゾー'=>'zoo','ズー'=>'zuu',
+ 'ター'=>'taa','テー'=>'tee','ãƒãƒ¼'=>'chii','トー'=>'too','ツー'=>'tsuu',
+ 'ワー'=>'waa','ヲー'=>'woo',
+ 'ヤー'=>'yaa','ヨー'=>'yoo','ユー'=>'yuu',
+ 'ヵー'=>'kaa','ヶー'=>'kee',
+ // old characters
+ 'ヱー'=>'wee','ヰー'=>'wii',
+
+ // seperate katakana 'n'
+ 'ンア'=>'n_a','ンエ'=>'n_e','ンイ'=>'n_i','ンオ'=>'n_o','ンウ'=>'n_u',
+ 'ンヤ'=>'n_ya','ンヨ'=>'n_yo','ンユ'=>'n_yu',
+
+ // 2 character syllables - doubled consonants
+ 'ッãƒ'=>'bba','ッベ'=>'bbe','ッビ'=>'bbi','ッボ'=>'bbo','ッブ'=>'bbu',
+ 'ッパ'=>'ppa','ッペ'=>'ppe','ッピ'=>'ppi','ッãƒ'=>'ppo','ップ'=>'ppu',
+ 'ッケ'=>'kke','ッキ'=>'kki','ッコ'=>'kko','ック'=>'kku','ッカ'=>'kka',
+ 'ッガ'=>'gga','ッゲ'=>'gge','ッギ'=>'ggi','ッゴ'=>'ggo','ッグ'=>'ggu',
+ 'ッマ'=>'ma','ッメ'=>'me','ッミ'=>'mi','ッモ'=>'mo','ッム'=>'mu',
+ 'ッナ'=>'nna','ッãƒ'=>'nne','ッニ'=>'nni','ッノ'=>'nno','ッヌ'=>'nnu',
+ 'ッラ'=>'rra','ッレ'=>'rre','ッリ'=>'rri','ッロ'=>'rro','ッル'=>'rru',
+ 'ッサ'=>'ssa','ッセ'=>'sse','ッシ'=>'sshi','ッソ'=>'sso','ッス'=>'ssu',
+ 'ッザ'=>'zza','ッゼ'=>'zze','ッジ'=>'jji','ッゾ'=>'zzo','ッズ'=>'zzu',
+ 'ッタ'=>'tta','ッテ'=>'tte','ッãƒ'=>'cchi','ット'=>'tto','ッツ'=>'ttsu',
+ 'ッダ'=>'dda','ッデ'=>'dde','ッヂ'=>'ddi','ッド'=>'ddo','ッヅ'=>'ddu',
+
+ // 1 character syllables
+ 'ア'=>'a','エ'=>'e','イ'=>'i','オ'=>'o','ウ'=>'u','ン'=>'n',
+ 'ãƒ'=>'ha','ヘ'=>'he','ヒ'=>'hi','ホ'=>'ho','フ'=>'fu',
+ 'ãƒ'=>'ba','ベ'=>'be','ビ'=>'bi','ボ'=>'bo','ブ'=>'bu',
+ 'パ'=>'pa','ペ'=>'pe','ピ'=>'pi','ãƒ'=>'po','プ'=>'pu',
+ 'ケ'=>'ke','キ'=>'ki','コ'=>'ko','ク'=>'ku','カ'=>'ka',
+ 'ガ'=>'ga','ゲ'=>'ge','ギ'=>'gi','ゴ'=>'go','グ'=>'gu',
+ 'マ'=>'ma','メ'=>'me','ミ'=>'mi','モ'=>'mo','ム'=>'mu',
+ 'ナ'=>'na','ãƒ'=>'ne','ニ'=>'ni','ノ'=>'no','ヌ'=>'nu',
+ 'ラ'=>'ra','レ'=>'re','リ'=>'ri','ロ'=>'ro','ル'=>'ru',
+ 'サ'=>'sa','セ'=>'se','シ'=>'shi','ソ'=>'so','ス'=>'su',
+ 'ザ'=>'za','ゼ'=>'ze','ジ'=>'ji','ゾ'=>'zo','ズ'=>'zu',
+ 'ã‚¿'=>'ta','テ'=>'te','ãƒ'=>'chi','ト'=>'to','ツ'=>'tsu',
+ 'ダ'=>'da','デ'=>'de','ヂ'=>'di','ド'=>'do','ヅ'=>'du',
+ 'ワ'=>'wa','ヲ'=>'wo',
+ 'ヤ'=>'ya','ヨ'=>'yo','ユ'=>'yu',
+ 'ヵ'=>'ka','ヶ'=>'ke',
+ // old characters
+ 'ヱ'=>'we','ヰ'=>'wi',
+
+ // convert what's left (probably only kicks in when something's missing above)
+ 'ァ'=>'a','ェ'=>'e','ィ'=>'i','ォ'=>'o','ゥ'=>'u',
+ 'ャ'=>'ya','ョ'=>'yo','ュ'=>'yu',
+
+ // special characters
+ '・'=>'_','ã€'=>'_',
+ 'ー'=>'_', // when used with hiragana (seldom), this character would not be converted otherwise
+
+ // 'ラ'=>'la','レ'=>'le','リ'=>'li','ロ'=>'lo','ル'=>'lu',
+ // 'ãƒãƒ£'=>'cya','ãƒã‚§'=>'cye','ãƒã‚£'=>'cyi','ãƒãƒ§'=>'cyo','ãƒãƒ¥'=>'cyu',
+ //'デャ'=>'dha','デェ'=>'dhe','ディ'=>'dhi','デョ'=>'dho','デュ'=>'dhu',
+ // 'リャ'=>'lya','リェ'=>'lye','リィ'=>'lyi','リョ'=>'lyo','リュ'=>'lyu',
+ // 'テャ'=>'tha','テェ'=>'the','ティ'=>'thi','テョ'=>'tho','テュ'=>'thu',
+ //'ファ'=>'fwa','フェ'=>'fwe','フィ'=>'fwi','フォ'=>'fwo','フゥ'=>'fwu',
+ //'ãƒãƒ£'=>'tya','ãƒã‚§'=>'tye','ãƒã‚£'=>'tyi','ãƒãƒ§'=>'tyo','ãƒãƒ¥'=>'tyu',
+ // 'ジャ'=>'jya','ジェ'=>'jye','ジィ'=>'jyi','ジョ'=>'jyo','ジュ'=>'jyu',
+ // 'ジャ'=>'zha','ジェ'=>'zhe','ジィ'=>'zhi','ジョ'=>'zho','ジュ'=>'zhu',
+ //'ジャ'=>'zya','ジェ'=>'zye','ジィ'=>'zyi','ジョ'=>'zyo','ジュ'=>'zyu',
+ //'シャ'=>'sya','シェ'=>'sye','シィ'=>'syi','ショ'=>'syo','シュ'=>'syu',
+ //'ã‚·'=>'ci','フ'=>'hu',ã‚·'=>'si','ãƒ'=>'ti','ツ'=>'tu','イ'=>'yi','ヂ'=>'dzi',
+
+ // "Greeklish"
+ 'Γ'=>'G','Δ'=>'E','Θ'=>'Th','Λ'=>'L','Ξ'=>'X','Π'=>'P','Σ'=>'S','Φ'=>'F','Ψ'=>'Ps',
+ 'γ'=>'g','δ'=>'e','θ'=>'th','λ'=>'l','ξ'=>'x','π'=>'p','σ'=>'s','φ'=>'f','ψ'=>'ps',
+
+ // Thai
+ 'à¸'=>'k','ข'=>'kh','ฃ'=>'kh','ค'=>'kh','ฅ'=>'kh','ฆ'=>'kh','ง'=>'ng','จ'=>'ch',
+ 'ฉ'=>'ch','ช'=>'ch','ซ'=>'s','ฌ'=>'ch','à¸'=>'y','ฎ'=>'d','à¸'=>'t','à¸'=>'th',
+ 'ฑ'=>'d','ฒ'=>'th','ณ'=>'n','ด'=>'d','ต'=>'t','ถ'=>'th','ท'=>'th','ธ'=>'th',
+ 'น'=>'n','บ'=>'b','ป'=>'p','ผ'=>'ph','à¸'=>'f','พ'=>'ph','ฟ'=>'f','ภ'=>'ph',
+ 'ม'=>'m','ย'=>'y','ร'=>'r','ฤ'=>'rue','ฤๅ'=>'rue','ล'=>'l','ฦ'=>'lue',
+ 'ฦๅ'=>'lue','ว'=>'w','ศ'=>'s','ษ'=>'s','ส'=>'s','ห'=>'h','ฬ'=>'l','ฮ'=>'h',
+ 'ะ'=>'a','ั'=>'a','รร'=>'a','า'=>'a','ๅ'=>'a','ำ'=>'am','à¹à¸²'=>'am',
+ 'ิ'=>'i','ี'=>'i','ึ'=>'ue','ี'=>'ue','ุ'=>'u','ู'=>'u',
+ 'เ'=>'e','à¹'=>'ae','โ'=>'o','อ'=>'o',
+ 'ียะ'=>'ia','ีย'=>'ia','ือะ'=>'uea','ือ'=>'uea','ัวะ'=>'ua','ัว'=>'ua',
+ 'ใ'=>'ai','ไ'=>'ai','ัย'=>'ai','าย'=>'ai','าว'=>'ao',
+ 'ุย'=>'ui','อย'=>'oi','ือย'=>'ueai','วย'=>'uai',
+ 'ิว'=>'io','็ว'=>'eo','ียว'=>'iao',
+ '่'=>'','้'=>'','๊'=>'','๋'=>'','็'=>'',
+ '์'=>'','๎'=>'','à¹'=>'','ฺ'=>'',
+ 'ๆ'=>'2','à¹'=>'o','ฯ'=>'-','๚'=>'-','๛'=>'-',
+ 'à¹'=>'0','๑'=>'1','๒'=>'2','๓'=>'3','๔'=>'4',
+ '๕'=>'5','๖'=>'6','๗'=>'7','๘'=>'8','๙'=>'9',
+
+ // Korean
+ 'ㄱ'=>'k','ㅋ'=>'kh','ㄲ'=>'kk','ㄷ'=>'t','ㅌ'=>'th','ㄸ'=>'tt','ㅂ'=>'p',
+ 'ã…'=>'ph','ã…ƒ'=>'pp','ã…ˆ'=>'c','ã…Š'=>'ch','ã…‰'=>'cc','ã……'=>'s','ã…†'=>'ss',
+ 'ã…Ž'=>'h','ã…‡'=>'ng','ã„´'=>'n','ㄹ'=>'l','ã…'=>'m', 'ã…'=>'a','ã…“'=>'e','ã…—'=>'o',
+ 'ã…œ'=>'wu','ã…¡'=>'u','ã…£'=>'i','ã…'=>'ay','ã…”'=>'ey','ã…š'=>'oy','ã…˜'=>'wa','ã…'=>'we',
+ 'ã…Ÿ'=>'wi','ã…™'=>'way','ã…ž'=>'wey','ã…¢'=>'uy','ã…‘'=>'ya','ã…•'=>'ye','ã…›'=>'oy',
+ 'ã… '=>'yu','ã…’'=>'yay','ã…–'=>'yey',
+);
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/index.php b/mod/dokuwiki/vendors/dokuwiki/index.php
new file mode 100644
index 000000000..ad0807727
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/index.php
@@ -0,0 +1,8 @@
+<?php
+/**
+ * Forwarder to doku.php
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+header("Location: doku.php");
diff --git a/mod/dokuwiki/vendors/dokuwiki/install.php b/mod/dokuwiki/vendors/dokuwiki/install.php
new file mode 100644
index 000000000..414d3e99e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/install.php
@@ -0,0 +1,516 @@
+<?php
+/**
+ * Dokuwiki installation assistance
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ */
+
+if(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/');
+if(!defined('DOKU_CONF')) define('DOKU_CONF',DOKU_INC.'conf/');
+if(!defined('DOKU_LOCAL')) define('DOKU_LOCAL',DOKU_INC.'conf/');
+
+// check for error reporting override or set error reporting to sane values
+if (!defined('DOKU_E_LEVEL')) { error_reporting(E_ALL ^ E_NOTICE); }
+else { error_reporting(DOKU_E_LEVEL); }
+
+// kill magic quotes
+if (get_magic_quotes_gpc() && !defined('MAGIC_QUOTES_STRIPPED')) {
+ if (!empty($_GET)) remove_magic_quotes($_GET);
+ if (!empty($_POST)) remove_magic_quotes($_POST);
+ if (!empty($_COOKIE)) remove_magic_quotes($_COOKIE);
+ if (!empty($_REQUEST)) remove_magic_quotes($_REQUEST);
+ @ini_set('magic_quotes_gpc', 0);
+ define('MAGIC_QUOTES_STRIPPED',1);
+}
+@set_magic_quotes_runtime(0);
+@ini_set('magic_quotes_sybase',0);
+
+// language strings
+require_once(DOKU_INC.'inc/lang/en/lang.php');
+$LC = preg_replace('/[^a-z\-]+/','',$_REQUEST['l']);
+if(!$LC) $LC = 'en';
+if($LC && $LC != 'en' ) {
+ require_once(DOKU_INC.'inc/lang/'.$LC.'/lang.php');
+}
+
+// initialise variables ...
+$error = array();
+
+$dokuwiki_hash = array(
+ '2005-09-22' => 'e33223e957b0b0a130d0520db08f8fb7',
+ '2006-03-05' => '51295727f79ab9af309a2fd9e0b61acc',
+ '2006-03-09' => '51295727f79ab9af309a2fd9e0b61acc',
+ '2006-11-06' => 'b3a8af76845977c2000d85d6990dd72b',
+ '2007-05-24' => 'd80f2740c84c4a6a791fd3c7a353536f',
+ '2007-06-26' => 'b3ca19c7a654823144119980be73cd77',
+ '2008-05-04' => '1e5c42eac3219d9e21927c39e3240aad',
+ '2009-02-14' => 'ec8c04210732a14fdfce0f7f6eead865',
+ '2009-12-25' => '993c4b2b385643efe5abf8e7010e11f4',
+);
+
+
+
+// begin output
+header('Content-Type: text/html; charset=utf-8');
+?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $LC?>"
+ lang="<?php echo $LC?>" dir="<?php echo $lang['direction']?>">
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title><?php echo $lang['i_installer']?></title>
+ <style type="text/css">
+ body { width: 90%; margin: 0 auto; font: 84% Verdana, Helvetica, Arial, sans-serif; }
+ img { border: none }
+ br.cl { clear:both; }
+ code { font-size: 110%; color: #800000; }
+ fieldset { border: none }
+ label { display: block; margin-top: 0.5em; }
+ select.text, input.text { width: 30em; margin: 0 0.5em; }
+ </style>
+ <script type="text/javascript" language="javascript">
+ function acltoggle(){
+ var cb = document.getElementById('acl');
+ var fs = document.getElementById('acldep');
+ if(!cb || !fs) return;
+ if(cb.checked){
+ fs.style.display = '';
+ }else{
+ fs.style.display = 'none';
+ }
+ }
+ window.onload = function(){
+ acltoggle();
+ var cb = document.getElementById('acl');
+ if(cb) cb.onchange = acltoggle;
+ };
+ </script>
+</head>
+<body style="">
+ <h1 style="float:left">
+ <img src="lib/exe/fetch.php?media=wiki:dokuwiki-128.png&w=64"
+ style="vertical-align: middle;" alt="" />
+ <?php echo $lang['i_installer']?>
+ </h1>
+ <div style="float:right; margin: 1em;">
+ <?php langsel()?>
+ </div>
+ <br class="cl" />
+
+ <div style="float: right; width: 34%;">
+ <?php
+ if(@file_exists(DOKU_INC.'inc/lang/'.$LC.'/install.html')){
+ include(DOKU_INC.'inc/lang/'.$LC.'/install.html');
+ }else{
+ print "<div lang=\"en\" dir=\"ltr\">\n";
+ include(DOKU_INC.'inc/lang/en/install.html');
+ print "</div>\n";
+ }
+ ?>
+ </div>
+
+ <div style="float: left; width: 58%;">
+ <?php
+ if(! (check_functions() && check_permissions()) ){
+ echo '<p>'.$lang['i_problems'].'</p>';
+ print_errors();
+ print_retry();
+ }elseif(!check_configs()){
+ echo '<p>'.$lang['i_modified'].'</p>';
+ print_errors();
+ }elseif($_REQUEST['submit']){
+ if(!check_data($_REQUEST['d'])){
+ print_errors();
+ print_form($_REQUEST['d']);
+ }elseif(!store_data($_REQUEST['d'])){
+ echo '<p>'.$lang['i_failure'].'</p>';
+ print_errors();
+ }else{
+ echo '<p>'.$lang['i_success'].'</p>';
+ }
+ }else{
+ print_form($_REQUEST['d']);
+ }
+ ?>
+ </div>
+
+<div style="clear: both">
+ <a href="http://dokuwiki.org/"><img src="lib/tpl/default/images/button-dw.png" alt="driven by DokuWiki" /></a>
+ <a href="http://www.php.net"><img src="lib/tpl/default/images/button-php.gif" alt="powered by PHP" /></a>
+</div>
+</body>
+</html>
+<?php
+
+/**
+ * Print the input form
+ */
+function print_form($d){
+ global $lang;
+ global $LC;
+
+ if(!is_array($d)) $d = array();
+ $d = array_map('htmlspecialchars',$d);
+
+ if(!isset($d['acl'])) $d['acl']=1;
+
+ ?>
+ <form action="" method="post">
+ <input type="hidden" name="l" value="<?php echo $LC ?>" />
+ <fieldset>
+ <label for="title"><?php echo $lang['i_wikiname']?>
+ <input type="text" name="d[title]" id="title" value="<?php echo $d['title'] ?>" style="width: 20em;" />
+ </label>
+
+ <fieldset style="margin-top: 1em;">
+ <label for="acl">
+ <input type="checkbox" name="d[acl]" id="acl" <?php echo(($d['acl'] ? 'checked="checked"' : ''));?> />
+ <?php echo $lang['i_enableacl']?></label>
+
+ <fieldset id="acldep">
+ <label for="superuser"><?php echo $lang['i_superuser']?></label>
+ <input class="text" type="text" name="d[superuser]" id="superuser" value="<?php echo $d['superuser'] ?>" />
+
+ <label for="fullname"><?php echo $lang['fullname']?></label>
+ <input class="text" type="text" name="d[fullname]" id="fullname" value="<?php echo $d['fullname'] ?>" />
+
+ <label for="email"><?php echo $lang['email']?></label>
+ <input class="text" type="text" name="d[email]" id="email" value="<?php echo $d['email'] ?>" />
+
+ <label for="password"><?php echo $lang['pass']?></label>
+ <input class="text" type="password" name="d[password]" id="password" />
+
+ <label for="confirm"><?php echo $lang['passchk']?></label>
+ <input class="text" type="password" name="d[confirm]" id="confirm" />
+
+ <label for="policy"><?php echo $lang['i_policy']?></label>
+ <select class="text" name="d[policy]" id="policy">
+ <option value="0" <?php echo ($d['policy'] == 0)?'selected="selected"':'' ?>><?php echo $lang['i_pol0']?></option>
+ <option value="1" <?php echo ($d['policy'] == 1)?'selected="selected"':'' ?>><?php echo $lang['i_pol1']?></option>
+ <option value="2" <?php echo ($d['policy'] == 2)?'selected="selected"':'' ?>><?php echo $lang['i_pol2']?></option>
+ </select>
+ </fieldset>
+ </fieldset>
+
+ </fieldset>
+ <fieldset id="process">
+ <input class="button" type="submit" name="submit" value="<?php echo $lang['btn_save']?>" />
+ </fieldset>
+ </form>
+ <?php
+}
+
+function print_retry() {
+ global $lang;
+ global $LC;
+?>
+ <form action="" method="get">
+ <fieldset>
+ <input type="hidden" name="l" value="<?php echo $LC ?>" />
+ <input class="button" type="submit" value="<?php echo $lang['i_retry'];?>" />
+ </fieldset>
+ </form>
+<?php
+}
+
+/**
+ * Check validity of data
+ *
+ * @author Andreas Gohr
+ */
+function check_data(&$d){
+ global $lang;
+ global $error;
+
+ //autolowercase the username
+ $d['superuser'] = strtolower($d['superuser']);
+
+ $ok = true;
+
+ // check input
+ if(empty($d['title'])){
+ $error[] = sprintf($lang['i_badval'],$lang['i_wikiname']);
+ $ok = false;
+ }
+ if($d['acl']){
+ if(!preg_match('/^[a-z1-9_]+$/',$d['superuser'])){
+ $error[] = sprintf($lang['i_badval'],$lang['i_superuser']);
+ $ok = false;
+ }
+ if(empty($d['password'])){
+ $error[] = sprintf($lang['i_badval'],$lang['pass']);
+ $ok = false;
+ }
+ if($d['confirm'] != $d['password']){
+ $error[] = sprintf($lang['i_badval'],$lang['passchk']);
+ $ok = false;
+ }
+ if(empty($d['fullname']) || strstr($d['fullname'],':')){
+ $error[] = sprintf($lang['i_badval'],$lang['fullname']);
+ $ok = false;
+ }
+ if(empty($d['email']) || strstr($d['email'],':') || !strstr($d['email'],'@')){
+ $error[] = sprintf($lang['i_badval'],$lang['email']);
+ $ok = false;
+ }
+ }
+ return $ok;
+}
+
+/**
+ * Writes the data to the config files
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ */
+function store_data($d){
+ global $LC;
+ $ok = true;
+ $d['policy'] = (int) $d['policy'];
+
+ // create local.php
+ $now = date('r');
+ $output = <<<EOT
+<?php
+/**
+ * Dokuwiki's Main Configuration File - Local Settings
+ * Auto-generated by install script
+ * Date: $now
+ */
+
+EOT;
+ $output .= '$conf[\'title\'] = \''.addslashes($d['title'])."';\n";
+ $output .= '$conf[\'lang\'] = \''.addslashes($LC)."';\n";
+ if($d['acl']){
+ $output .= '$conf[\'useacl\'] = 1'.";\n";
+ $output .= "\$conf['superuser'] = '@admin';\n";
+ }
+ $ok = $ok && fileWrite(DOKU_LOCAL.'local.php',$output);
+
+ if ($d['acl']) {
+ // create users.auth.php
+ // --- user:MD5password:Real Name:email:groups,comma,seperated
+ $output = join(":",array($d['superuser'], md5($d['password']), $d['fullname'], $d['email'], 'admin,user'));
+ $output = @file_get_contents(DOKU_CONF.'users.auth.php.dist')."\n$output\n";
+ $ok = $ok && fileWrite(DOKU_LOCAL.'users.auth.php', $output);
+
+ // create acl.auth.php
+ $output = <<<EOT
+# acl.auth.php
+# <?php exit()?>
+# Don't modify the lines above
+#
+# Access Control Lists
+#
+# Auto-generated by install script
+# Date: $now
+
+EOT;
+ if($d['policy'] == 2){
+ $output .= "* @ALL 0\n";
+ $output .= "* @user 8\n";
+ }elseif($d['policy'] == 1){
+ $output .= "* @ALL 1\n";
+ $output .= "* @user 8\n";
+ }else{
+ $output .= "* @ALL 8\n";
+ }
+ $ok = $ok && fileWrite(DOKU_LOCAL.'acl.auth.php', $output);
+ }
+ return $ok;
+}
+
+/**
+ * Write the given content to a file
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ */
+function fileWrite($filename, $data) {
+ global $error;
+ global $lang;
+
+ if (($fp = @fopen($filename, 'wb')) === false) {
+ $filename = str_replace($_SERVER['DOCUMENT_ROOT'],'{DOCUMENT_ROOT}/', $filename);
+ $error[] = sprintf($lang['i_writeerr'],$filename);
+ return false;
+ }
+
+ if (!empty($data)) { fwrite($fp, $data); }
+ fclose($fp);
+ return true;
+}
+
+
+/**
+ * check installation dependent local config files and tests for a known
+ * unmodified main config file
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ */
+function check_configs(){
+ global $error;
+ global $lang;
+ global $dokuwiki_hash;
+
+ $ok = true;
+
+ $config_files = array(
+ 'local' => DOKU_LOCAL.'local.php',
+ 'users' => DOKU_LOCAL.'users.auth.php',
+ 'auth' => DOKU_LOCAL.'acl.auth.php'
+ );
+
+
+ // main dokuwiki config file (conf/dokuwiki.php) must not have been modified
+ $installation_hash = md5(preg_replace("/(\015\012)|(\015)/","\012",
+ @file_get_contents(DOKU_CONF.'dokuwiki.php')));
+ if (!in_array($installation_hash, $dokuwiki_hash)) {
+ $error[] = sprintf($lang['i_badhash'],$installation_hash);
+ $ok = false;
+ }
+
+ // configs shouldn't exist
+ foreach ($config_files as $file) {
+ if (@file_exists($file)) {
+ $file = str_replace($_SERVER['DOCUMENT_ROOT'],'{DOCUMENT_ROOT}/', $file);
+ $error[] = sprintf($lang['i_confexists'],$file);
+ $ok = false;
+ }
+ }
+ return $ok;
+}
+
+
+/**
+ * Check other installation dir/file permission requirements
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ */
+function check_permissions(){
+ global $error;
+ global $lang;
+
+ $dirs = array(
+ 'conf' => DOKU_LOCAL,
+ 'data' => DOKU_INC.'data',
+ 'pages' => DOKU_INC.'data/pages',
+ 'attic' => DOKU_INC.'data/attic',
+ 'media' => DOKU_INC.'data/media',
+ 'meta' => DOKU_INC.'data/meta',
+ 'cache' => DOKU_INC.'data/cache',
+ 'locks' => DOKU_INC.'data/locks',
+ 'index' => DOKU_INC.'data/index',
+ 'tmp' => DOKU_INC.'data/tmp'
+ );
+
+ $ok = true;
+ foreach($dirs as $dir){
+ if(!@file_exists("$dir/.") || !@is_writable($dir)){
+ $dir = str_replace($_SERVER['DOCUMENT_ROOT'],'{DOCUMENT_ROOT}', $dir);
+ $error[] = sprintf($lang['i_permfail'],$dir);
+ $ok = false;
+ }
+ }
+ return $ok;
+}
+
+/**
+ * Check the availability of functions used in DokuWiki and the PHP version
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function check_functions(){
+ global $error;
+ global $lang;
+ $ok = true;
+
+ if(version_compare(phpversion(),'5.1.2','<')){
+ $error[] = sprintf($lang['i_phpver'],phpversion(),'5.1.2');
+ $ok = false;
+ }
+
+ $funcs = explode(' ','addslashes basename call_user_func chmod copy fgets '.
+ 'file file_exists fseek flush filesize ftell fopen '.
+ 'glob header ignore_user_abort ini_get mail mkdir '.
+ 'ob_start opendir parse_ini_file readfile realpath '.
+ 'rename rmdir serialize session_start unlink usleep '.
+ 'preg_replace file_get_contents htmlspecialchars_decode');
+
+ if (!function_exists('mb_substr')) {
+ $funcs[] = 'utf8_encode';
+ $funcs[] = 'utf8_decode';
+ }
+
+ foreach($funcs as $func){
+ if(!function_exists($func)){
+ $error[] = sprintf($lang['i_funcna'],$func);
+ $ok = false;
+ }
+ }
+ return $ok;
+}
+
+/**
+ * Print language selection
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function langsel(){
+ global $lang;
+ global $LC;
+
+ $dir = DOKU_INC.'inc/lang';
+ $dh = opendir($dir);
+ if(!$dh) return;
+
+ $langs = array();
+ while (($file = readdir($dh)) !== false) {
+ if(preg_match('/^[\._]/',$file)) continue;
+ if(is_dir($dir.'/'.$file) && @file_exists($dir.'/'.$file.'/lang.php')){
+ $langs[] = $file;
+ }
+ }
+ closedir($dh);
+ sort($langs);
+
+ echo '<form action="">';
+ echo $lang['i_chooselang'];
+ echo ': <select name="l" onchange="submit()">';
+ foreach($langs as $l){
+ $sel = ($l == $LC) ? 'selected="selected"' : '';
+ echo '<option value="'.$l.'" '.$sel.'>'.$l.'</option>';
+ }
+ echo '</select> ';
+ echo '<input type="submit" value="'.$lang['btn_update'].'" />';
+ echo '</form>';
+}
+
+/**
+ * Print global error array
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function print_errors(){
+ global $error;
+ echo '<ul>';
+ foreach ($error as $err){
+ echo "<li>$err</li>";
+ }
+ echo '</ul>';
+}
+
+/**
+ * remove magic quotes recursivly
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function remove_magic_quotes(&$array) {
+ foreach (array_keys($array) as $key) {
+ if (is_array($array[$key])) {
+ remove_magic_quotes($array[$key]);
+ }else {
+ $array[$key] = stripslashes($array[$key]);
+ }
+ }
+}
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/_fla/MultipleUpload.as b/mod/dokuwiki/vendors/dokuwiki/lib/_fla/MultipleUpload.as
new file mode 100644
index 000000000..c5e7799f9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/_fla/MultipleUpload.as
@@ -0,0 +1,329 @@
+/**
+ * Flash Multi Upload
+ *
+ * Based on a example from Alastair Dawson
+ *
+ * @link http://blog.vixiom.com/2006/09/08/multiple-file-upload-with-flash-and-ruby-on-rails/
+ * @author Alastair Dawson
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+// delegate
+import mx.utils.Delegate;
+// ui components
+import mx.controls.DataGrid;
+import mx.controls.gridclasses.DataGridColumn
+import mx.controls.Button;
+import mx.controls.TextInput;
+import mx.controls.CheckBox;
+import mx.controls.Label;
+// file reference
+import flash.net.FileReferenceList;
+import flash.net.FileReference;
+
+class MultipleUpload {
+
+ private var fileRef:FileReferenceList;
+ private var fileRefListener:Object;
+ private var list:Array;
+ private var dp:Array;
+
+ private var files_dg:DataGrid;
+ private var browse_btn:Button;
+ private var upload_btn:Button;
+ private var ns_input:TextInput;
+ private var ns_label:Label;
+ private var overwrite_cb:CheckBox;
+
+ private var url:String;
+ private var upurl:String;
+ private var current:Number;
+ private var done:Number;
+ private var lasterror:String;
+
+ /**
+ * Constructor.
+ *
+ * Initializes the needed objects and stage objects
+ */
+ public function MultipleUpload(fdg:DataGrid, bb:Button, ub:Button, nsi:TextInput, nsl:Label, ob:CheckBox) {
+ // references for objects on the stage
+ files_dg = fdg;
+ browse_btn = bb;
+ upload_btn = ub;
+ ns_input = nsi;
+ ns_label = nsl;
+ overwrite_cb = ob;
+
+ // file list references & listener
+ fileRef = new FileReferenceList();
+ fileRefListener = new Object();
+ fileRef.addListener(fileRefListener);
+
+ // setup
+ iniUI();
+ inifileRefListener();
+ }
+
+ /**
+ * Initializes the User Interface
+ *
+ * Uses flashvars to access possibly localized names
+ */
+ private function iniUI() {
+ // register button handlers
+ browse_btn.onRelease = Delegate.create(this, this.browse);
+ upload_btn.onRelease = Delegate.create(this, this.upload);
+
+ // columns for dataGrid
+ var col:DataGridColumn;
+ col = new DataGridColumn('name');
+ col.headerText = ( _root.L_gridname ? _root.L_gridname : 'Filename' );
+ col.sortable = false;
+ files_dg.addColumn(col);
+ col = new DataGridColumn('size');
+ col.headerText = ( _root.L_gridsize ? _root.L_gridsize : 'Size' );
+ col.sortable = false;
+ files_dg.addColumn(col);
+ col = new DataGridColumn('status');
+ col.headerText = ( _root.L_gridstat ? _root.L_gridstat : 'Status' );
+ col.sortable = false;
+ files_dg.addColumn(col);
+
+ // label translations
+ if(_root.L_overwrite) overwrite_cb.label = _root.L_overwrite;
+ if(_root.L_browse) browse_btn.label = _root.L_browse;
+ if(_root.L_upload) upload_btn.label = _root.L_upload;
+ if(_root.L_namespace) ns_label.text = _root.L_namespace;
+
+ // prefill input field
+ if(_root.O_ns) ns_input.text = _root.O_ns;
+
+ // disable buttons
+ upload_btn.enabled = false;
+ if(!_root.O_overwrite) overwrite_cb.visible = false;
+
+ // initalize the data provider list
+ dp = new Array();
+ list = new Array();
+ files_dg.spaceColumnsEqually();
+ }
+
+ /**
+ * Open files selection dialog
+ *
+ * Adds the allowed file types
+ */
+ private function browse() {
+ if(_root.O_extensions){
+ var exts:Array = _root.O_extensions.split('|');
+ var filter:Object = new Object();
+ filter.description = (_root.L_filetypes ? _root.L_filetypes : 'Allowed filetypes');
+ filter.extension = '';
+ for(var i:Number = 0; i<exts.length; i++){
+ filter.extension += '*.'+exts[i]+';';
+ }
+ filter.extension = filter.extension.substr(0,filter.extension.length-1);
+ var apply:Array = new Array();
+ apply.push(filter);
+ fileRef.browse(apply);
+ }else{
+ fileRef.browse();
+ }
+ }
+
+ /**
+ * Initiates the upload process
+ */
+ private function upload() {
+ // prepare backend URL
+ this.url = _root.O_backend; // from flashvars
+ this.url += '&ns='+escape(ns_input.text);
+
+ // prepare upload url
+ this.upurl = this.url;
+ this.upurl += '&sectok='+escape(_root.O_sectok);
+ this.upurl += '&authtok='+escape(_root.O_authtok);
+ if(overwrite_cb.selected) this.upurl += '&ow=1';
+
+ // disable buttons
+ upload_btn.enabled = false;
+ browse_btn.enabled = false;
+ ns_input.enabled = false;
+ overwrite_cb.enabled = false;
+
+ // init states
+ this.current = -1;
+ this.done = 0;
+ this.lasterror = '';
+
+ // start process detached
+ _global.setTimeout(this,'uploadNext',100);
+ nextFrame();
+ }
+
+ /**
+ * Uploads the next file in the list
+ */
+ private function uploadNext(){
+ this.current++;
+ if(this.current >= this.list.length){
+ return this.uploadDone();
+ }
+
+ var file = this.list[this.current];
+
+ if(_root.O_maxsize && (file.size > _root.O_maxsize)){
+ this.lasterror = (_root.L_toobig ? _root.L_toobig : 'too big');
+ _global.setTimeout(this,'uploadNext',100);
+ nextFrame();
+ }else{
+ file.addListener(fileRefListener);
+ file.upload(upurl);
+ // continues in the handlers
+ }
+ }
+
+ /**
+ * Redirect to the namespace and set a success/error message
+ *
+ * Called when all files in the list where processed
+ */
+ private function uploadDone(){
+ var info = (_root.L_info ? _root.L_info : 'files uploaded');
+ if(this.done == this.list.length){
+ this.url += '&msg1='+escape(this.done+'/'+this.list.length+' '+info);
+ }else{
+ var lasterr = (_root.L_lasterr ? _root.L_lasterr : 'Last error:');
+ this.url += '&err='+escape(this.done+'/'+this.list.length+' '+info+' '+lasterr+' '+this.lasterror);
+ }
+
+ // when done redirect
+ getURL(this.url,'_self');
+ }
+
+ /**
+ * Set the status of a given file in the data grid
+ */
+ private function setStatus(file,msg){
+ for(var i:Number = 0; i < list.length; i++) {
+ if (list[i].name == file.name) {
+ files_dg.editField(i, 'status', msg);
+ nextFrame();
+ return;
+ }
+ }
+ }
+
+ /**
+ * Initialize the file reference listener
+ */
+ private function inifileRefListener() {
+ fileRefListener.onSelect = Delegate.create(this, this.onSelect);
+ fileRefListener.onCancel = Delegate.create(this, this.onCancel);
+ fileRefListener.onOpen = Delegate.create(this, this.onOpen);
+ fileRefListener.onProgress = Delegate.create(this, this.onProgress);
+ fileRefListener.onComplete = Delegate.create(this, this.onComplete);
+ fileRefListener.onHTTPError = Delegate.create(this, this.onHTTPError);
+ fileRefListener.onIOError = Delegate.create(this, this.onIOError);
+ fileRefListener.onSecurityError = Delegate.create(this, this.onSecurityError);
+ }
+
+ /**
+ * Handle file selection
+ *
+ * Files are added as in a list of references and beautified into the data grid dataprovider array
+ *
+ * Multiple browses will add to the list
+ */
+ private function onSelect(fileRefList:FileReferenceList) {
+ var sel = fileRefList.fileList;
+ for(var i:Number = 0; i < sel.length; i++) {
+ // check size
+ var stat:String;
+ if(_root.O_maxsize && sel[i].size > _root.O_maxsize){
+ stat = (_root.L_toobig ? _root.L_toobig : 'too big');
+ }else{
+ stat = (_root.L_ready ? _root.L_ready : 'ready for upload');
+ }
+ // add to grid
+ dp.push({name:sel[i].name, size:Math.round(sel[i].size / 1000) + " kb", status:stat});
+ // add to reference list
+ list.push(sel[i]);
+ }
+ // update dataGrid
+ files_dg.dataProvider = dp;
+ files_dg.spaceColumnsEqually();
+
+ if(list.length > 0) upload_btn.enabled = true;
+ }
+
+ /**
+ * Does nothing
+ */
+ private function onCancel() {
+ }
+
+ /**
+ * Does nothing
+ */
+ private function onOpen(file:FileReference) {
+ }
+
+ /**
+ * Set the upload progress
+ */
+ private function onProgress(file:FileReference, bytesLoaded:Number, bytesTotal:Number) {
+ var percentDone = Math.round((bytesLoaded / bytesTotal) * 100);
+ var msg:String = 'uploading @PCT@%';
+ if(_root.L_progress) msg = _root.L_progress;
+ msg = msg.split('@PCT@').join(percentDone);
+ this.setStatus(file,msg);
+ }
+
+ /**
+ * Handle upload completion
+ */
+ private function onComplete(file:FileReference) {
+ this.setStatus(file,(_root.L_done ? _root.L_done : 'complete'));
+ this.done++;
+ uploadNext();
+ }
+
+ /**
+ * Handle upload errors
+ */
+ private function onHTTPError(file:FileReference, httpError:Number) {
+ var error;
+ if(httpError == 400){
+ error = (_root.L_fail ? _root.L_fail : 'failed');
+ }else if(httpError == 401){
+ error = (_root.L_authfail ? _root.L_authfail : 'auth failed');
+ }else{
+ error = "HTTP Error " + httpError
+ }
+ this.setStatus(file,error);
+ this.lasterror = error;
+ uploadNext();
+ }
+
+ /**
+ * Handle IO errors
+ */
+ private function onIOError(file:FileReference) {
+ this.setStatus(file,"IO Error");
+ this.lasterror = "IO Error";
+ uploadNext();
+ }
+
+ /**
+ * Handle Security errors
+ */
+ private function onSecurityError(file:FileReference, errorString:String) {
+ this.setStatus(file,"SecurityError: " + errorString);
+ this.lasterror = "SecurityError: " + errorString;
+ uploadNext();
+ }
+
+
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/_fla/README b/mod/dokuwiki/vendors/dokuwiki/lib/_fla/README
new file mode 100644
index 000000000..6ecc72ac1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/_fla/README
@@ -0,0 +1,4 @@
+This directory contains the sources for the Flash Multiuploader. Its based on
+a example from Alastair Dawson given at
+http://blog.vixiom.com/2006/09/08/multiple-file-upload-with-flash-and-ruby-on-rails/
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/_fla/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/_fla/index.html
new file mode 100644
index 000000000..d614603ac
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/_fla/index.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="refresh" content="0; URL=../../" />
+<meta name="robots" content="noindex" />
+<title>nothing here...</title>
+</head>
+<body>
+<!-- this is just here to prevent directory browsing -->
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/_fla/multipleUpload.fla b/mod/dokuwiki/vendors/dokuwiki/lib/_fla/multipleUpload.fla
new file mode 100644
index 000000000..220616960
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/_fla/multipleUpload.fla
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/exe/ajax.php b/mod/dokuwiki/vendors/dokuwiki/lib/exe/ajax.php
new file mode 100644
index 000000000..4618abd71
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/exe/ajax.php
@@ -0,0 +1,370 @@
+<?php
+/**
+ * DokuWiki AJAX call handler
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+//fix for Opera XMLHttpRequests
+if(!count($_POST) && $HTTP_RAW_POST_DATA){
+ parse_str($HTTP_RAW_POST_DATA, $_POST);
+}
+
+if(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/../../');
+require_once(DOKU_INC.'inc/init.php');
+require_once(DOKU_INC.'inc/common.php');
+require_once(DOKU_INC.'inc/pageutils.php');
+require_once(DOKU_INC.'inc/auth.php');
+//close sesseion
+session_write_close();
+
+header('Content-Type: text/html; charset=utf-8');
+
+
+//call the requested function
+if(isset($_POST['call']))
+ $call = $_POST['call'];
+else if(isset($_GET['call']))
+ $call = $_GET['call'];
+else
+ exit;
+
+$callfn = 'ajax_'.$call;
+
+if(function_exists($callfn)){
+ $callfn();
+}else{
+ $evt = new Doku_Event('AJAX_CALL_UNKNOWN', $call);
+ if ($evt->advise_before()) {
+ print "AJAX call '".htmlspecialchars($call)."' unknown!\n";
+ exit;
+ }
+ $evt->advise_after();
+ unset($evt);
+}
+
+/**
+ * Searches for matching pagenames
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function ajax_qsearch(){
+ global $conf;
+ global $lang;
+
+ $query = cleanID($_POST['q']);
+ if(empty($query)) $query = cleanID($_GET['q']);
+ if(empty($query)) return;
+
+ require_once(DOKU_INC.'inc/html.php');
+ require_once(DOKU_INC.'inc/fulltext.php');
+
+ $data = array();
+ $data = ft_pageLookup($query);
+
+ if(!count($data)) return;
+
+ print '<strong>'.$lang['quickhits'].'</strong>';
+ print '<ul>';
+ foreach($data as $id){
+ print '<li>';
+ $ns = getNS($id);
+ if($ns){
+ $name = shorten(noNS($id), ' ('.$ns.')',30);
+ }else{
+ $name = $id;
+ }
+ print html_wikilink(':'.$id,$name);
+ print '</li>';
+ }
+ print '</ul>';
+}
+
+/**
+ * Support OpenSearch suggestions
+ *
+ * @link http://www.opensearch.org/Specifications/OpenSearch/Extensions/Suggestions/1.0
+ * @author Mike Frysinger <vapier@gentoo.org>
+ */
+function ajax_suggestions() {
+ global $conf;
+ global $lang;
+
+ $query = cleanID($_POST['q']);
+ if(empty($query)) $query = cleanID($_GET['q']);
+ if(empty($query)) return;
+
+ require_once(DOKU_INC.'inc/html.php');
+ require_once(DOKU_INC.'inc/fulltext.php');
+ require_once(DOKU_INC.'inc/JSON.php');
+
+ $data = array();
+ $data = ft_pageLookup($query);
+ if(!count($data)) return;
+
+ // limit results to 15 hits
+ $data = array_slice($data, 0, 15);
+ $data = array_map('trim',$data);
+ $data = array_map('noNS',$data);
+ $data = array_unique($data);
+ sort($data);
+
+ /* now construct a json */
+ $suggestions = array(
+ $query, // the original query
+ $data, // some suggestions
+ array(), // no description
+ array() // no urls
+ );
+ $json = new JSON();
+
+ header('Content-Type: application/x-suggestions+json');
+ print $json->encode($suggestions);
+}
+
+/**
+ * Refresh a page lock and save draft
+ *
+ * Andreas Gohr <andi@splitbrain.org>
+ */
+function ajax_lock(){
+ global $conf;
+ global $lang;
+ $id = cleanID($_POST['id']);
+ if(empty($id)) return;
+
+ if(!checklock($id)){
+ lock($id);
+ echo 1;
+ }
+
+ if($conf['usedraft'] && $_POST['wikitext']){
+ $client = $_SERVER['REMOTE_USER'];
+ if(!$client) $client = clientIP(true);
+
+ $draft = array('id' => $id,
+ 'prefix' => $_POST['prefix'],
+ 'text' => $_POST['wikitext'],
+ 'suffix' => $_POST['suffix'],
+ 'date' => $_POST['date'],
+ 'client' => $client,
+ );
+ $cname = getCacheName($draft['client'].$id,'.draft');
+ if(io_saveFile($cname,serialize($draft))){
+ echo $lang['draftdate'].' '.dformat();
+ }
+ }
+
+}
+
+/**
+ * Delete a draft
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function ajax_draftdel(){
+ $id = cleanID($_POST['id']);
+ if(empty($id)) return;
+
+ $client = $_SERVER['REMOTE_USER'];
+ if(!$client) $client = clientIP(true);
+
+ $cname = getCacheName($client.$id,'.draft');
+ @unlink($cname);
+}
+
+/**
+ * Return subnamespaces for the Mediamanager
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function ajax_medians(){
+ global $conf;
+ require_once(DOKU_INC.'inc/search.php');
+ require_once(DOKU_INC.'inc/media.php');
+
+ // wanted namespace
+ $ns = cleanID($_POST['ns']);
+ $dir = utf8_encodeFN(str_replace(':','/',$ns));
+
+ $lvl = count(explode(':',$ns));
+
+ $data = array();
+ search($data,$conf['mediadir'],'search_index',array('nofiles' => true),$dir);
+ foreach($data as $item){
+ $item['level'] = $lvl+1;
+ echo media_nstree_li($item);
+ echo media_nstree_item($item);
+ echo '</li>';
+ }
+}
+
+/**
+ * Return list of files for the Mediamanager
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function ajax_medialist(){
+ global $conf;
+ global $NS;
+ require_once(DOKU_INC.'inc/media.php');
+ require_once(DOKU_INC.'inc/template.php');
+
+ $NS = $_POST['ns'];
+ tpl_mediaContent(true);
+}
+
+/**
+ * Return list of search result for the Mediamanager
+ *
+ * @author Tobias Sarnowski <sarnowski@cosmocode.de>
+ */
+function ajax_mediasearchlist(){
+ global $conf;
+ require_once(DOKU_INC.'inc/media.php');
+
+ media_searchlist($_POST['ns']);
+}
+
+/**
+ * Return sub index for index view
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function ajax_index(){
+ global $conf;
+ require_once(DOKU_INC.'inc/search.php');
+ require_once(DOKU_INC.'inc/html.php');
+
+ // wanted namespace
+ $ns = cleanID($_POST['idx']);
+ $dir = utf8_encodeFN(str_replace(':','/',$ns));
+
+ $lvl = count(explode(':',$ns));
+
+ $data = array();
+ search($data,$conf['datadir'],'search_index',array('ns' => $ns),$dir);
+ foreach($data as $item){
+ $item['level'] = $lvl+1;
+ echo html_li_index($item);
+ echo '<div class="li">';
+ echo html_list_index($item);
+ echo '</div>';
+ echo '</li>';
+ }
+}
+
+/**
+ * List matching namespaces and pages for the link wizard
+ *
+ * @author Andreas Gohr <gohr@cosmocode.de>
+ */
+function ajax_linkwiz(){
+ global $conf;
+ global $lang;
+ require_once(DOKU_INC.'inc/html.php');
+
+ $q = ltrim($_POST['q'],':');
+ $id = noNS($q);
+ $ns = getNS($q);
+
+ $ns = cleanID($ns);
+ $id = cleanID($id);
+
+ $nsd = utf8_encodeFN(str_replace(':','/',$ns));
+ $idd = utf8_encodeFN(str_replace(':','/',$id));
+
+ $data = array();
+ if($q && !$ns){
+
+ // use index to lookup matching pages
+ require_once(DOKU_INC.'inc/fulltext.php');
+ require_once(DOKU_INC.'inc/parserutils.php');
+ $pages = array();
+ $pages = ft_pageLookup($id,false);
+
+ // result contains matches in pages and namespaces
+ // we now extract the matching namespaces to show
+ // them seperately
+ $dirs = array();
+ $count = count($pages);
+ for($i=0; $i<$count; $i++){
+ if(strpos(noNS($pages[$i]),$id) === false){
+ // match was in the namespace
+ $dirs[getNS($pages[$i])] = 1; // assoc array avoids dupes
+ }else{
+ // it is a matching page, add it to the result
+ $data[] = array(
+ 'id' => $pages[$i],
+ 'title' => p_get_first_heading($pages[$i],false),
+ 'type' => 'f',
+ );
+ }
+ unset($pages[$i]);
+ }
+ foreach($dirs as $dir => $junk){
+ $data[] = array(
+ 'id' => $dir,
+ 'type' => 'd',
+ );
+ }
+
+ }else{
+
+ require_once(DOKU_INC.'inc/search.php');
+ $opts = array(
+ 'depth' => 1,
+ 'listfiles' => true,
+ 'listdirs' => true,
+ 'pagesonly' => true,
+ 'firsthead' => true,
+ );
+ if($id) $opts['filematch'] = '^.*\/'.$id;
+ if($id) $opts['dirmatch'] = '^.*\/'.$id;
+ search($data,$conf['datadir'],'search_universal',$opts,$nsd);
+
+ // add back to upper
+ if($ns){
+ array_unshift($data,array(
+ 'id' => getNS($ns),
+ 'type' => 'u',
+ ));
+ }
+ }
+
+ // fixme sort results in a useful way ?
+
+ if(!count($data)){
+ echo $lang['nothingfound'];
+ exit;
+ }
+
+ // output the found data
+ $even = 1;
+ foreach($data as $item){
+ $even *= -1; //zebra
+
+ if(($item['type'] == 'd' || $item['type'] == 'u') && $item['id']) $item['id'] .= ':';
+ $link = wl($item['id']);
+
+ echo '<div class="'.(($even > 0)?'even':'odd').' type_'.$item['type'].'">';
+
+
+ if($item['type'] == 'u'){
+ $name = $lang['upperns'];
+ }else{
+ $name = htmlspecialchars($item['id']);
+ }
+
+ echo '<a href="'.$link.'" title="'.htmlspecialchars($item['id']).'" class="wikilink1">'.$name.'</a>';
+
+ if($item['title']){
+ echo '<span>'.htmlspecialchars($item['title']).'</span>';
+ }
+ echo '</div>';
+ }
+
+}
+
+//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/exe/css.php b/mod/dokuwiki/vendors/dokuwiki/lib/exe/css.php
new file mode 100644
index 000000000..2cb383de0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/exe/css.php
@@ -0,0 +1,330 @@
+<?php
+/**
+ * DokuWiki StyleSheet creator
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+if(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/../../');
+if(!defined('NOSESSION')) define('NOSESSION',true); // we do not use a session or authentication here (better caching)
+if(!defined('DOKU_DISABLE_GZIP_OUTPUT')) define('DOKU_DISABLE_GZIP_OUTPUT',1); // we gzip ourself here
+require_once(DOKU_INC.'inc/init.php');
+require_once(DOKU_INC.'inc/pageutils.php');
+require_once(DOKU_INC.'inc/httputils.php');
+require_once(DOKU_INC.'inc/io.php');
+require_once(DOKU_INC.'inc/confutils.php');
+
+// Main (don't run when UNIT test)
+if(!defined('SIMPLE_TEST')){
+ header('Content-Type: text/css; charset=utf-8');
+ css_out();
+}
+
+
+// ---------------------- functions ------------------------------
+
+/**
+ * Output all needed Styles
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function css_out(){
+ global $conf;
+ global $lang;
+ $style = '';
+ if (isset($_REQUEST['s']) &&
+ in_array($_REQUEST['s'], array('all', 'print', 'feed'))) {
+ $style = $_REQUEST['s'];
+ }
+
+ $tpl = trim(preg_replace('/[^\w-]+/','',$_REQUEST['t']));
+ if($tpl){
+ $tplinc = DOKU_INC.'lib/tpl/'.$tpl.'/';
+ $tpldir = DOKU_BASE.'lib/tpl/'.$tpl.'/';
+ }else{
+ $tplinc = DOKU_TPLINC;
+ $tpldir = DOKU_TPL;
+ }
+
+ // The generated script depends on some dynamic options
+ $cache = getCacheName('styles'.$_SERVER['HTTP_HOST'].$_SERVER['SERVER_PORT'].DOKU_BASE.$tplinc.$style,'.css');
+
+ // load template styles
+ $tplstyles = array();
+ if(@file_exists($tplinc.'style.ini')){
+ $ini = parse_ini_file($tplinc.'style.ini',true);
+ foreach($ini['stylesheets'] as $file => $mode){
+ $tplstyles[$mode][$tplinc.$file] = $tpldir;
+ }
+ }
+
+ // Array of needed files and their web locations, the latter ones
+ // are needed to fix relative paths in the stylesheets
+ $files = array();
+ //if (isset($tplstyles['all'])) $files = array_merge($files, $tplstyles['all']);
+ if(!empty($style)){
+ $files[DOKU_INC.'lib/styles/'.$style.'.css'] = DOKU_MEDIA.'lib/styles/';
+ // load plugin, template, user styles
+ $files = array_merge($files, css_pluginstyles($style));
+ if (isset($tplstyles[$style])) $files = array_merge($files, $tplstyles[$style]);
+ $files[DOKU_CONF.'user'.$style.'.css'] = DOKU_MEDIA;
+ }else{
+ $files[DOKU_INC.'lib/styles/style.css'] = DOKU_MEDIA.'lib/styles/';
+ // load plugin, template, user styles
+ $files = array_merge($files, css_pluginstyles('screen'));
+ if (isset($tplstyles['screen'])) $files = array_merge($files, $tplstyles['screen']);
+ if($lang['direction'] == 'rtl'){
+ if (isset($tplstyles['rtl'])) $files = array_merge($files, $tplstyles['rtl']);
+ }
+ $files[DOKU_CONF.'userstyle.css'] = DOKU_BASE;
+ }
+
+ // check cache age & handle conditional request
+ header('Cache-Control: public, max-age=3600');
+ header('Pragma: public');
+ if(css_cacheok($cache,array_keys($files),$tplinc)){
+ http_conditionalRequest(filemtime($cache));
+ if($conf['allowdebug']) header("X-CacheUsed: $cache");
+
+ // finally send output
+ if ($conf['gzip_output'] && http_gzip_valid($cache)) {
+ header('Vary: Accept-Encoding');
+ header('Content-Encoding: gzip');
+ readfile($cache.".gz");
+ } else {
+ if (!http_sendfile($cache)) readfile($cache);
+ }
+
+ return;
+ } else {
+ http_conditionalRequest(time());
+ }
+
+ // start output buffering and build the stylesheet
+ ob_start();
+
+ // print the default classes for interwiki links and file downloads
+ css_interwiki();
+ css_filetypes();
+
+ // load files
+ foreach($files as $file => $location){
+ print css_loadfile($file, $location);
+ }
+
+ // end output buffering and get contents
+ $css = ob_get_contents();
+ ob_end_clean();
+
+ // apply style replacements
+ $css = css_applystyle($css,$tplinc);
+
+ // compress whitespace and comments
+ if($conf['compress']){
+ $css = css_compress($css);
+ }
+
+ // save cache file
+ io_saveFile($cache,$css);
+ if(function_exists('gzopen')) io_saveFile("$cache.gz",$css);
+
+ // finally send output
+ if ($conf['gzip_output']) {
+ header('Vary: Accept-Encoding');
+ header('Content-Encoding: gzip');
+ print gzencode($css,9,FORCE_GZIP);
+ } else {
+ print $css;
+ }
+}
+
+/**
+ * Checks if a CSS Cache file still is valid
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function css_cacheok($cache,$files,$tplinc){
+ global $config_cascade;
+
+ if(isset($_REQUEST['purge'])) return false; //support purge request
+
+ $ctime = @filemtime($cache);
+ if(!$ctime) return false; //There is no cache
+
+ // some additional files to check
+ $files = array_merge($files, getConfigFiles('main'));
+ $files[] = $tplinc.'style.ini';
+ $files[] = __FILE__;
+
+ // now walk the files
+ foreach($files as $file){
+ if(@filemtime($file) > $ctime){
+ return false;
+ }
+ }
+ return true;
+}
+
+/**
+ * Does placeholder replacements in the style according to
+ * the ones defined in a templates style.ini file
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function css_applystyle($css,$tplinc){
+ if(@file_exists($tplinc.'style.ini')){
+ $ini = parse_ini_file($tplinc.'style.ini',true);
+ $css = strtr($css,$ini['replacements']);
+ }
+ return $css;
+}
+
+/**
+ * Prints classes for interwikilinks
+ *
+ * Interwiki links have two classes: 'interwiki' and 'iw_$name>' where
+ * $name is the identifier given in the config. All Interwiki links get
+ * an default style with a default icon. If a special icon is available
+ * for an interwiki URL it is set in it's own class. Both classes can be
+ * overwritten in the template or userstyles.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function css_interwiki(){
+
+ // default style
+ echo 'a.interwiki {';
+ echo ' background: transparent url('.DOKU_MEDIA.'lib/images/interwiki.png) 0px 1px no-repeat;';
+ echo ' padding-left: 16px;';
+ echo '}';
+
+ // additional styles when icon available
+ $iwlinks = getInterwiki();
+ foreach(array_keys($iwlinks) as $iw){
+ $class = preg_replace('/[^_\-a-z0-9]+/i','_',$iw);
+ if(@file_exists(DOKU_INC.'lib/images/interwiki/'.$iw.'.png')){
+ echo "a.iw_$class {";
+ echo ' background-image: url('.DOKU_MEDIA.'lib/images/interwiki/'.$iw.'.png)';
+ echo '}';
+ }elseif(@file_exists(DOKU_INC.'lib/images/interwiki/'.$iw.'.gif')){
+ echo "a.iw_$class {";
+ echo ' background-image: url('.DOKU_MEDIA.'lib/images/interwiki/'.$iw.'.gif)';
+ echo '}';
+ }
+ }
+}
+
+/**
+ * Prints classes for file download links
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function css_filetypes(){
+
+ // default style
+ echo 'a.mediafile {';
+ echo ' background: transparent url('.DOKU_MEDIA.'lib/images/fileicons/file.png) 0px 1px no-repeat;';
+ echo ' padding-left: 18px;';
+ echo ' padding-bottom: 1px;';
+ echo '}';
+
+ // additional styles when icon available
+ // scan directory for all icons
+ $exts = array();
+ if($dh = opendir(DOKU_INC.'lib/images/fileicons')){
+ while(false !== ($file = readdir($dh))){
+ if(preg_match('/([_\-a-z0-9]+(?:\.[_\-a-z0-9]+)*?)\.(png|gif)/i',$file,$match)){
+ $ext = strtolower($match[1]);
+ $type = '.'.strtolower($match[2]);
+ if($ext!='file' && (!isset($exts[$ext]) || $type=='.png')){
+ $exts[$ext] = $type;
+ }
+ }
+ }
+ closedir($dh);
+ }
+ foreach($exts as $ext=>$type){
+ $class = preg_replace('/[^_\-a-z0-9]+/','_',$ext);
+ echo "a.mf_$class {";
+ echo ' background-image: url('.DOKU_MEDIA.'lib/images/fileicons/'.$ext.$type.')';
+ echo '}';
+ }
+}
+
+/**
+ * Loads a given file and fixes relative URLs with the
+ * given location prefix
+ */
+function css_loadfile($file,$location=''){
+ if(!@file_exists($file)) return '';
+ $css = io_readFile($file);
+ if(!$location) return $css;
+
+ $css = preg_replace('#(url\([ \'"]*)((?!/|http://|https://| |\'|"))#','\\1'.$location.'\\3',$css);
+ return $css;
+}
+
+
+/**
+ * Returns a list of possible Plugin Styles (no existance check here)
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function css_pluginstyles($mode='screen'){
+ global $lang;
+ $list = array();
+ $plugins = plugin_list();
+ foreach ($plugins as $p){
+ if($mode == 'all'){
+ $list[DOKU_PLUGIN."$p/all.css"] = DOKU_BASE."lib/plugins/$p/";
+ }elseif($mode == 'print'){
+ $list[DOKU_PLUGIN."$p/print.css"] = DOKU_BASE."lib/plugins/$p/";
+ }elseif($mode == 'feed'){
+ $list[DOKU_PLUGIN."$p/feed.css"] = DOKU_BASE."lib/plugins/$p/";
+ }else{
+ $list[DOKU_PLUGIN."$p/style.css"] = DOKU_BASE."lib/plugins/$p/";
+ $list[DOKU_PLUGIN."$p/screen.css"] = DOKU_BASE."lib/plugins/$p/";
+ }
+ if($lang['direction'] == 'rtl'){
+ $list[DOKU_PLUGIN."$p/rtl.css"] = DOKU_BASE."lib/plugins/$p/";
+ }
+ }
+ return $list;
+}
+
+/**
+ * Very simple CSS optimizer
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function css_compress($css){
+ //strip comments through a callback
+ $css = preg_replace_callback('#(/\*)(.*?)(\*/)#s','css_comment_cb',$css);
+
+ //strip (incorrect but common) one line comments
+ $css = preg_replace('/(?<!:)\/\/.*$/m','',$css);
+
+ // strip whitespaces
+ $css = preg_replace('![\r\n\t ]+!',' ',$css);
+ $css = preg_replace('/ ?([:;,{}\/]) ?/','\\1',$css);
+
+ // shorten colors
+ $css = preg_replace("/#([0-9a-fA-F]{1})\\1([0-9a-fA-F]{1})\\2([0-9a-fA-F]{1})\\3/", "#\\1\\2\\3",$css);
+
+ return $css;
+}
+
+/**
+ * Callback for css_compress()
+ *
+ * Keeps short comments (< 5 chars) to maintain typical browser hacks
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function css_comment_cb($matches){
+ if(strlen($matches[2]) > 4) return '';
+ return $matches[0];
+}
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/exe/detail.php b/mod/dokuwiki/vendors/dokuwiki/lib/exe/detail.php
new file mode 100644
index 000000000..f30e039d4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/exe/detail.php
@@ -0,0 +1,58 @@
+<?php
+ if(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/../../');
+ define('DOKU_MEDIADETAIL',1);
+ require_once(DOKU_INC.'inc/init.php');
+ require_once(DOKU_INC.'inc/common.php');
+ require_once(DOKU_INC.'inc/lang/en/lang.php');
+ require_once(DOKU_INC.'inc/lang/'.$conf['lang'].'/lang.php');
+ require_once(DOKU_INC.'inc/JpegMeta.php');
+ require_once(DOKU_INC.'inc/html.php');
+ require_once(DOKU_INC.'inc/template.php');
+ require_once(DOKU_INC.'inc/auth.php');
+ //close session
+ session_write_close();
+
+ $IMG = getID('media');
+ $ID = cleanID($_REQUEST['id']);
+
+ if($conf['allowdebug'] && $_REQUEST['debug']){
+ print '<pre>';
+ foreach(explode(' ','basedir userewrite baseurl useslash') as $x){
+ print '$'."conf['$x'] = '".$conf[$x]."';\n";
+ }
+ foreach(explode(' ','DOCUMENT_ROOT HTTP_HOST SCRIPT_FILENAME PHP_SELF '.
+ 'REQUEST_URI SCRIPT_NAME PATH_INFO PATH_TRANSLATED') as $x){
+ print '$'."_SERVER['$x'] = '".$_SERVER[$x]."';\n";
+ }
+ print "getID('media'): ".getID('media')."\n";
+ print "getID('media',false): ".getID('media',false)."\n";
+ print '</pre>';
+ }
+
+ $ERROR = false;
+ // check image permissions
+ $AUTH = auth_quickaclcheck($IMG);
+ if($AUTH >= AUTH_READ){
+ // check if image exists
+ $SRC = mediaFN($IMG);
+ if(!@file_exists($SRC)){
+ //doesn't exist!
+
+ }
+ }else{
+ // no auth
+ $ERROR = p_locale_xhtml('denied');
+ }
+
+ /*if(!$ERROR){
+ // load EXIF/IPTC/image details
+ $INFO = array();
+ $INFO['std']['']
+ imagesize
+ }*/
+
+
+ //start output and load template
+ header('Content-Type: text/html; charset=utf-8');
+ include(template('detail.php'));
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/exe/fetch.php b/mod/dokuwiki/vendors/dokuwiki/lib/exe/fetch.php
new file mode 100644
index 000000000..11877ef36
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/exe/fetch.php
@@ -0,0 +1,173 @@
+<?php
+/**
+ * DokuWiki media passthrough file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+ if(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/../../');
+ define('DOKU_DISABLE_GZIP_OUTPUT', 1);
+ require_once(DOKU_INC.'inc/init.php');
+ require_once(DOKU_INC.'inc/common.php');
+ require_once(DOKU_INC.'inc/media.php');
+ require_once(DOKU_INC.'inc/pageutils.php');
+ require_once(DOKU_INC.'inc/httputils.php');
+ require_once(DOKU_INC.'inc/confutils.php');
+ require_once(DOKU_INC.'inc/auth.php');
+
+ //close sesseion
+ session_write_close();
+
+ $mimetypes = getMimeTypes();
+
+ //get input
+ $MEDIA = stripctl(getID('media',false)); // no cleaning except control chars - maybe external
+ $CACHE = calc_cache($_REQUEST['cache']);
+ $WIDTH = (int) $_REQUEST['w'];
+ $HEIGHT = (int) $_REQUEST['h'];
+ list($EXT,$MIME,$DL) = mimetype($MEDIA,false);
+ if($EXT === false){
+ $EXT = 'unknown';
+ $MIME = 'application/octet-stream';
+ $DL = true;
+ }
+
+ //media to local file
+ if(preg_match('#^(https?)://#i',$MEDIA)){
+ //check hash
+ if(substr(md5(auth_cookiesalt().$MEDIA),0,6) != $_REQUEST['hash']){
+ header("HTTP/1.0 412 Precondition Failed");
+ print 'Precondition Failed';
+ exit;
+ }
+ //handle external images
+ if(strncmp($MIME,'image/',6) == 0) $FILE = media_get_from_URL($MEDIA,$EXT,$CACHE);
+ if(!$FILE){
+ //download failed - redirect to original URL
+ header('Location: '.$MEDIA);
+ exit;
+ }
+ }else{
+ $MEDIA = cleanID($MEDIA);
+ if(empty($MEDIA)){
+ header("HTTP/1.0 400 Bad Request");
+ print 'Bad request';
+ exit;
+ }
+
+ //check permissions (namespace only)
+ if(auth_quickaclcheck(getNS($MEDIA).':X') < AUTH_READ){
+ header("HTTP/1.0 401 Unauthorized");
+ //fixme add some image for imagefiles
+ print 'Unauthorized';
+ exit;
+ }
+ $FILE = mediaFN($MEDIA);
+ }
+
+ //check file existance
+ if(!@file_exists($FILE)){
+ header("HTTP/1.0 404 Not Found");
+ //FIXME add some default broken image
+ print 'Not Found';
+ exit;
+ }
+
+ $ORIG = $FILE;
+
+ //handle image resizing/cropping
+ if((substr($MIME,0,5) == 'image') && $WIDTH){
+ if($HEIGHT){
+ $FILE = media_crop_image($FILE,$EXT,$WIDTH,$HEIGHT);
+ }else{
+ $FILE = media_resize_image($FILE,$EXT,$WIDTH,$HEIGHT);
+ }
+ }
+
+ // finally send the file to the client
+ $data = array('file' => $FILE,
+ 'mime' => $MIME,
+ 'download' => $DL,
+ 'cache' => $CACHE,
+ 'orig' => $ORIG,
+ 'ext' => $EXT,
+ 'width' => $WIDTH,
+ 'height' => $HEIGHT);
+
+ $evt = new Doku_Event('MEDIA_SENDFILE', $data);
+ if ($evt->advise_before()) {
+ sendFile($data['file'],$data['mime'],$data['download'],$data['cache']);
+ }
+
+/* ------------------------------------------------------------------------ */
+
+/**
+ * Set headers and send the file to the client
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Ben Coburn <btcoburn@silicodon.net>
+ */
+function sendFile($file,$mime,$dl,$cache){
+ global $conf;
+ $fmtime = @filemtime($file);
+ // send headers
+ header("Content-Type: $mime");
+ // smart http caching headers
+ if ($cache==-1) {
+ // cache
+ // cachetime or one hour
+ header('Expires: '.gmdate("D, d M Y H:i:s", time()+max($conf['cachetime'], 3600)).' GMT');
+ header('Cache-Control: public, proxy-revalidate, no-transform, max-age='.max($conf['cachetime'], 3600));
+ header('Pragma: public');
+ } else if ($cache>0) {
+ // recache
+ // remaining cachetime + 10 seconds so the newly recached media is used
+ header('Expires: '.gmdate("D, d M Y H:i:s", $fmtime+$conf['cachetime']+10).' GMT');
+ header('Cache-Control: public, proxy-revalidate, no-transform, max-age='.max($fmtime-time()+$conf['cachetime']+10, 0));
+ header('Pragma: public');
+ } else if ($cache==0) {
+ // nocache
+ header('Cache-Control: must-revalidate, no-transform, post-check=0, pre-check=0');
+ header('Pragma: public');
+ }
+ //send important headers first, script stops here if '304 Not Modified' response
+ http_conditionalRequest($fmtime);
+
+
+ //download or display?
+ if($dl){
+ header('Content-Disposition: attachment; filename="'.basename($file).'";');
+ }else{
+ header('Content-Disposition: inline; filename="'.basename($file).'";');
+ }
+
+ //use x-sendfile header to pass the delivery to compatible webservers
+ if (http_sendfile($file)) exit;
+
+ // send file contents
+ $fp = @fopen($file,"rb");
+ if($fp){
+ http_rangeRequest($fp,filesize($file),$mime);
+ }else{
+ header("HTTP/1.0 500 Internal Server Error");
+ print "Could not read $file - bad permissions?";
+ }
+}
+
+/**
+ * Returns the wanted cachetime in seconds
+ *
+ * Resolves named constants
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function calc_cache($cache){
+ global $conf;
+
+ if(strtolower($cache) == 'nocache') return 0; //never cache
+ if(strtolower($cache) == 'recache') return $conf['cachetime']; //use standard cache
+ return -1; //cache endless
+}
+
+//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/exe/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/exe/index.html
new file mode 100644
index 000000000..d614603ac
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/exe/index.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="refresh" content="0; URL=../../" />
+<meta name="robots" content="noindex" />
+<title>nothing here...</title>
+</head>
+<body>
+<!-- this is just here to prevent directory browsing -->
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/exe/indexer.php b/mod/dokuwiki/vendors/dokuwiki/lib/exe/indexer.php
new file mode 100644
index 000000000..872f6b5be
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/exe/indexer.php
@@ -0,0 +1,375 @@
+<?php
+/**
+ * DokuWiki indexer
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+if(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/../../');
+define('DOKU_DISABLE_GZIP_OUTPUT',1);
+require_once(DOKU_INC.'inc/init.php');
+require_once(DOKU_INC.'inc/auth.php');
+require_once(DOKU_INC.'inc/events.php');
+session_write_close(); //close session
+if(!defined('NL')) define('NL',"\n");
+global $ID;
+// Version tag used to force rebuild on upgrade
+define('INDEXER_VERSION', 2);
+
+// keep running after browser closes connection
+@ignore_user_abort(true);
+
+// check if user abort worked, if yes send output early
+$defer = !@ignore_user_abort() || $conf['broken_iua'];
+if(!$defer){
+ sendGIF(); // send gif
+}
+
+$ID = cleanID($_REQUEST['id']);
+
+// Catch any possible output (e.g. errors)
+if(!isset($_REQUEST['debug'])) ob_start();
+
+// run one of the jobs
+$tmp = array(); // No event data
+$evt = new Doku_Event('INDEXER_TASKS_RUN', $tmp);
+if ($evt->advise_before()) {
+ runIndexer() or
+ metaUpdate() or
+ runSitemapper() or
+ runTrimRecentChanges() or
+ runTrimRecentChanges(true) or
+ $evt->advise_after();
+}
+if($defer) sendGIF();
+
+if(!isset($_REQUEST['debug'])) ob_end_clean();
+exit;
+
+// --------------------------------------------------------------------
+
+/**
+ * Trims the recent changes cache (or imports the old changelog) as needed.
+ *
+ * @param media_changes If the media changelog shall be trimmed instead of
+ * the page changelog
+ *
+ * @author Ben Coburn <btcoburn@silicodon.net>
+ */
+function runTrimRecentChanges($media_changes = false) {
+ global $conf;
+
+ $fn = ($media_changes ? $conf['media_changelog'] : $conf['changelog']);
+
+ // Trim the Recent Changes
+ // Trims the recent changes cache to the last $conf['changes_days'] recent
+ // changes or $conf['recent'] items, which ever is larger.
+ // The trimming is only done once a day.
+ if (@file_exists($fn) &&
+ (@filemtime($fn.'.trimmed')+86400)<time() &&
+ !@file_exists($fn.'_tmp')) {
+ @touch($fn.'.trimmed');
+ io_lock($fn);
+ $lines = file($fn);
+ if (count($lines)<=$conf['recent']) {
+ // nothing to trim
+ io_unlock($fn);
+ return false;
+ }
+
+ io_saveFile($fn.'_tmp', ''); // presave tmp as 2nd lock
+ $trim_time = time() - $conf['recent_days']*86400;
+ $out_lines = array();
+
+ for ($i=0; $i<count($lines); $i++) {
+ $log = parseChangelogLine($lines[$i]);
+ if ($log === false) continue; // discard junk
+ if ($log['date'] < $trim_time) {
+ $old_lines[$log['date'].".$i"] = $lines[$i]; // keep old lines for now (append .$i to prevent key collisions)
+ } else {
+ $out_lines[$log['date'].".$i"] = $lines[$i]; // definitely keep these lines
+ }
+ }
+
+ if (count($lines)==count($out_lines)) {
+ // nothing to trim
+ @unlink($fn.'_tmp');
+ io_unlock($fn);
+ return false;
+ }
+
+ // sort the final result, it shouldn't be necessary,
+ // however the extra robustness in making the changelog cache self-correcting is worth it
+ ksort($out_lines);
+ $extra = $conf['recent'] - count($out_lines); // do we need extra lines do bring us up to minimum
+ if ($extra > 0) {
+ ksort($old_lines);
+ $out_lines = array_merge(array_slice($old_lines,-$extra),$out_lines);
+ }
+
+ // save trimmed changelog
+ io_saveFile($fn.'_tmp', implode('', $out_lines));
+ @unlink($fn);
+ if (!rename($fn.'_tmp', $fn)) {
+ // rename failed so try another way...
+ io_unlock($fn);
+ io_saveFile($fn, implode('', $out_lines));
+ @unlink($fn.'_tmp');
+ } else {
+ io_unlock($fn);
+ }
+ return true;
+ }
+
+ // nothing done
+ return false;
+}
+
+/**
+ * Runs the indexer for the current page
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function runIndexer(){
+ global $ID;
+ global $conf;
+ print "runIndexer(): started".NL;
+
+ // Move index files (if needed)
+ // Uses the importoldindex plugin to upgrade the index automatically.
+ // FIXME: Remove this from runIndexer when it is no longer needed.
+ if (@file_exists($conf['cachedir'].'/page.idx') &&
+ (!@file_exists($conf['indexdir'].'/page.idx') ||
+ !filesize($conf['indexdir'].'/page.idx')) &&
+ !@file_exists($conf['indexdir'].'/index_importing')) {
+ echo "trigger TEMPORARY_INDEX_UPGRADE_EVENT\n";
+ $tmp = array(); // no event data
+ trigger_event('TEMPORARY_INDEX_UPGRADE_EVENT', $tmp);
+ }
+
+ if(!$ID) return false;
+
+ // check if indexing needed
+ $idxtag = metaFN($ID,'.indexed');
+ if(@file_exists($idxtag)){
+ if(io_readFile($idxtag) >= INDEXER_VERSION){
+ $last = @filemtime($idxtag);
+ if($last > @filemtime(wikiFN($ID))){
+ print "runIndexer(): index for $ID up to date".NL;
+ return false;
+ }
+ }
+ }
+
+ // try to aquire a lock
+ $lock = $conf['lockdir'].'/_indexer.lock';
+ while(!@mkdir($lock,$conf['dmode'])){
+ usleep(50);
+ if(time()-@filemtime($lock) > 60*5){
+ // looks like a stale lock - remove it
+ @rmdir($lock);
+ print "runIndexer(): stale lock removed".NL;
+ }else{
+ print "runIndexer(): indexer locked".NL;
+ return false;
+ }
+ }
+ if($conf['dperm']) chmod($lock, $conf['dperm']);
+
+ require_once(DOKU_INC.'inc/indexer.php');
+
+ // upgrade to version 2
+ if (!@file_exists($conf['indexdir'].'/pageword.idx'))
+ idx_upgradePageWords();
+
+ // do the work
+ idx_addPage($ID);
+
+ // we're finished - save and free lock
+ io_saveFile(metaFN($ID,'.indexed'),INDEXER_VERSION);
+ @rmdir($lock);
+ print "runIndexer(): finished".NL;
+ return true;
+}
+
+/**
+ * Will render the metadata for the page if not exists yet
+ *
+ * This makes sure pages which are created from outside DokuWiki will
+ * gain their data when viewed for the first time.
+ */
+function metaUpdate(){
+ global $ID;
+ print "metaUpdate(): started".NL;
+
+ if(!$ID) return false;
+ $file = metaFN($ID, '.meta');
+ echo "meta file: $file".NL;
+
+ // rendering needed?
+ if (@file_exists($file)) return false;
+ if (!@file_exists(wikiFN($ID))) return false;
+
+ require_once(DOKU_INC.'inc/common.php');
+ require_once(DOKU_INC.'inc/parserutils.php');
+ global $conf;
+
+
+ // gather some additional info from changelog
+ $info = io_grep($conf['changelog'],
+ '/^(\d+)\t(\d+\.\d+\.\d+\.\d+)\t'.preg_quote($ID,'/').'\t([^\t]+)\t([^\t\n]+)/',
+ 0,true);
+
+ $meta = array();
+ if(!empty($info)){
+ $meta['date']['created'] = $info[0][1];
+ foreach($info as $item){
+ if($item[4] != '*'){
+ $meta['date']['modified'] = $item[1];
+ if($item[3]){
+ $meta['contributor'][$item[3]] = $item[3];
+ }
+ }
+ }
+ }
+
+ $meta = p_render_metadata($ID, $meta);
+ io_saveFile($file, serialize($meta));
+
+ echo "metaUpdate(): finished".NL;
+ return true;
+}
+
+/**
+ * Builds a Google Sitemap of all public pages known to the indexer
+ *
+ * The map is placed in the root directory named sitemap.xml.gz - This
+ * file needs to be writable!
+ *
+ * @author Andreas Gohr
+ * @link https://www.google.com/webmasters/sitemaps/docs/en/about.html
+ */
+function runSitemapper(){
+ global $conf;
+ print "runSitemapper(): started".NL;
+ if(!$conf['sitemap']) return false;
+
+ if($conf['compression'] == 'bz2' || $conf['compression'] == 'gz'){
+ $sitemap = 'sitemap.xml.gz';
+ }else{
+ $sitemap = 'sitemap.xml';
+ }
+ print "runSitemapper(): using $sitemap".NL;
+
+ if(@file_exists(DOKU_INC.$sitemap)){
+ if(!is_writable(DOKU_INC.$sitemap)) return false;
+ }else{
+ if(!is_writable(DOKU_INC)) return false;
+ }
+
+ if(@filesize(DOKU_INC.$sitemap) &&
+ @filemtime(DOKU_INC.$sitemap) > (time()-($conf['sitemap']*60*60*24))){
+ print 'runSitemapper(): Sitemap up to date'.NL;
+ return false;
+ }
+
+ $pages = file($conf['indexdir'].'/page.idx');
+ print 'runSitemapper(): creating sitemap using '.count($pages).' pages'.NL;
+
+ // build the sitemap
+ ob_start();
+ print '<?xml version="1.0" encoding="UTF-8"?>'.NL;
+ print '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'.NL;
+ foreach($pages as $id){
+ $id = trim($id);
+ $file = wikiFN($id);
+
+ //skip hidden, non existing and restricted files
+ if(isHiddenPage($id)) continue;
+ $date = @filemtime($file);
+ if(!$date) continue;
+ if(auth_aclcheck($id,'','') < AUTH_READ) continue;
+
+ print ' <url>'.NL;
+ print ' <loc>'.wl($id,'',true).'</loc>'.NL;
+ print ' <lastmod>'.date_iso8601($date).'</lastmod>'.NL;
+ print ' </url>'.NL;
+ }
+ print '</urlset>'.NL;
+ $data = ob_get_contents();
+ ob_end_clean();
+
+ //save the new sitemap
+ io_saveFile(DOKU_INC.$sitemap,$data);
+
+ //ping search engines...
+ $http = new DokuHTTPClient();
+ $http->timeout = 8;
+
+ //ping google
+ print 'runSitemapper(): pinging google'.NL;
+ $url = 'http://www.google.com/webmasters/sitemaps/ping?sitemap=';
+ $url .= urlencode(DOKU_URL.$sitemap);
+ $resp = $http->get($url);
+ if($http->error) print 'runSitemapper(): '.$http->error.NL;
+ print 'runSitemapper(): '.preg_replace('/[\n\r]/',' ',strip_tags($resp)).NL;
+
+ //ping yahoo
+ print 'runSitemapper(): pinging yahoo'.NL;
+ $url = 'http://search.yahooapis.com/SiteExplorerService/V1/updateNotification?appid=dokuwiki&url=';
+ $url .= urlencode(DOKU_URL.$sitemap);
+ $resp = $http->get($url);
+ if($http->error) print 'runSitemapper(): '.$http->error.NL;
+ print 'runSitemapper(): '.preg_replace('/[\n\r]/',' ',strip_tags($resp)).NL;
+
+ //ping microsoft
+ print 'runSitemapper(): pinging microsoft'.NL;
+ $url = 'http://www.bing.com/webmaster/ping.aspx?siteMap=';
+ $url .= urlencode(DOKU_URL.$sitemap);
+ $resp = $http->get($url);
+ if($http->error) print 'runSitemapper(): '.$http->error.NL;
+ print 'runSitemapper(): '.preg_replace('/[\n\r]/',' ',strip_tags($resp)).NL;
+
+ print 'runSitemapper(): finished'.NL;
+ return true;
+}
+
+/**
+ * Formats a timestamp as ISO 8601 date
+ *
+ * @author <ungu at terong dot com>
+ * @link http://www.php.net/manual/en/function.date.php#54072
+ */
+function date_iso8601($int_date) {
+ //$int_date: current date in UNIX timestamp
+ $date_mod = date('Y-m-d\TH:i:s', $int_date);
+ $pre_timezone = date('O', $int_date);
+ $time_zone = substr($pre_timezone, 0, 3).":".substr($pre_timezone, 3, 2);
+ $date_mod .= $time_zone;
+ return $date_mod;
+}
+
+/**
+ * Just send a 1x1 pixel blank gif to the browser
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Harry Fuecks <fuecks@gmail.com>
+ */
+function sendGIF(){
+ if(isset($_REQUEST['debug'])){
+ header('Content-Type: text/plain');
+ return;
+ }
+ $img = base64_decode('R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAEALAAAAAABAAEAAAIBTAA7');
+ header('Content-Type: image/gif');
+ header('Content-Length: '.strlen($img));
+ header('Connection: Close');
+ print $img;
+ flush();
+ // Browser should drop connection after this
+ // Thinks it's got the whole image
+}
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
+// No trailing PHP closing tag - no output please!
+// See Note at http://www.php.net/manual/en/language.basic-syntax.instruction-separation.php
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/exe/js.php b/mod/dokuwiki/vendors/dokuwiki/lib/exe/js.php
new file mode 100644
index 000000000..cb1016231
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/exe/js.php
@@ -0,0 +1,397 @@
+<?php
+/**
+ * DokuWiki JavaScript creator
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+if(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/../../');
+if(!defined('NOSESSION')) define('NOSESSION',true); // we do not use a session or authentication here (better caching)
+if(!defined('NL')) define('NL',"\n");
+if(!defined('DOKU_DISABLE_GZIP_OUTPUT')) define('DOKU_DISABLE_GZIP_OUTPUT',1); // we gzip ourself here
+require_once(DOKU_INC.'inc/init.php');
+require_once(DOKU_INC.'inc/pageutils.php');
+require_once(DOKU_INC.'inc/httputils.php');
+require_once(DOKU_INC.'inc/io.php');
+require_once(DOKU_INC.'inc/JSON.php');
+
+// Main (don't run when UNIT test)
+if(!defined('SIMPLE_TEST')){
+ header('Content-Type: text/javascript; charset=utf-8');
+ js_out();
+}
+
+
+// ---------------------- functions ------------------------------
+
+/**
+ * Output all needed JavaScript
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function js_out(){
+ global $conf;
+ global $lang;
+
+ // The generated script depends on some dynamic options
+ $cache = getCacheName('scripts'.$_SERVER['HTTP_HOST'].$_SERVER['SERVER_PORT'],'.js');
+
+ // array of core files
+ $files = array(
+ DOKU_INC.'lib/scripts/helpers.js',
+ DOKU_INC.'lib/scripts/events.js',
+ DOKU_INC.'lib/scripts/cookie.js',
+ DOKU_INC.'lib/scripts/script.js',
+ DOKU_INC.'lib/scripts/tw-sack.js',
+ DOKU_INC.'lib/scripts/ajax.js',
+ DOKU_INC.'lib/scripts/index.js',
+ DOKU_INC.'lib/scripts/drag.js',
+ DOKU_INC.'lib/scripts/textselection.js',
+ DOKU_INC.'lib/scripts/toolbar.js',
+ DOKU_INC.'lib/scripts/edit.js',
+ DOKU_INC.'lib/scripts/linkwiz.js',
+ DOKU_INC.'lib/scripts/media.js',
+ DOKU_TPLINC.'script.js',
+ );
+
+ // add possible plugin scripts and userscript
+ $files = array_merge($files,js_pluginscripts());
+ $files[] = DOKU_CONF.'userscript.js';
+
+ // check cache age & handle conditional request
+ header('Cache-Control: public, max-age=3600');
+ header('Pragma: public');
+ if(js_cacheok($cache,$files)){
+ http_conditionalRequest(filemtime($cache));
+ if($conf['allowdebug']) header("X-CacheUsed: $cache");
+
+ // finally send output
+ if ($conf['gzip_output'] && http_gzip_valid($cache)) {
+ header('Vary: Accept-Encoding');
+ header('Content-Encoding: gzip');
+ readfile($cache.".gz");
+ } else {
+ if (!http_sendfile($cache)) readfile($cache);
+ }
+ return;
+ } else {
+ http_conditionalRequest(time());
+ }
+
+ // start output buffering and build the script
+ ob_start();
+
+ // add some global variables
+ print "var DOKU_BASE = '".DOKU_BASE."';";
+ print "var DOKU_MEDIA = '".DOKU_MEDIA."';";
+ print "var DOKU_TPL = '".DOKU_TPL."';";
+ print "var DOKU_UHN = ".((int) useHeading('navigation')).";";
+ print "var DOKU_UHC = ".((int) useHeading('content')).";";
+
+ // load JS specific translations
+ $json = new JSON();
+ $lang['js']['plugins'] = js_pluginstrings();
+ echo 'LANG = '.$json->encode($lang['js']).";\n";
+
+ // load toolbar
+ require_once(DOKU_INC.'inc/toolbar.php');
+ toolbar_JSdefines('toolbar');
+
+ // load files
+ foreach($files as $file){
+ echo "\n\n/* XXXXXXXXXX begin of ".str_replace(DOKU_INC, '', $file) ." XXXXXXXXXX */\n\n";
+ js_load($file);
+ echo "\n\n/* XXXXXXXXXX end of " . str_replace(DOKU_INC, '', $file) . " XXXXXXXXXX */\n\n";
+ }
+
+
+ // init stuff
+ js_runonstart("ajax_qsearch.init('qsearch__in','qsearch__out')");
+ js_runonstart("addEvent(document,'click',closePopups)");
+ js_runonstart('addTocToggle()');
+ js_runonstart("initSizeCtl('size__ctl','wiki__text')");
+ js_runonstart("initToolbar('tool__bar','wiki__text',toolbar)");
+ js_runonstart("initChangeCheck('".js_escape($lang['notsavedyet'])."')");
+ js_runonstart("locktimer.init(".($conf['locktime'] - 60).",'".js_escape($lang['willexpire'])."',".$conf['usedraft'].")");
+ js_runonstart('scrollToMarker()');
+ js_runonstart('focusMarker()');
+
+ // end output buffering and get contents
+ $js = ob_get_contents();
+ ob_end_clean();
+
+ // compress whitespace and comments
+ if($conf['compress']){
+ $js = js_compress($js);
+ }
+
+ $js .= "\n"; // https://bugzilla.mozilla.org/show_bug.cgi?id=316033
+
+ // save cache file
+ io_saveFile($cache,$js);
+ if(function_exists('gzopen')) io_saveFile("$cache.gz",$js);
+
+ // finally send output
+ if ($conf['gzip_output']) {
+ header('Vary: Accept-Encoding');
+ header('Content-Encoding: gzip');
+ print gzencode($js,9,FORCE_GZIP);
+ } else {
+ print $js;
+ }
+}
+
+/**
+ * Load the given file, handle include calls and print it
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function js_load($file){
+ if(!@file_exists($file)) return;
+ static $loaded = array();
+
+ $data = io_readFile($file);
+ while(preg_match('#/\*\s*DOKUWIKI:include(_once)?\s+([\w\./]+)\s*\*/#',$data,$match)){
+ $ifile = $match[2];
+
+ // is it a include_once?
+ if($match[1]){
+ $base = basename($ifile);
+ if($loaded[$base]) continue;
+ $loaded[$base] = true;
+ }
+
+ if($ifile{0} != '/') $ifile = dirname($file).'/'.$ifile;
+
+ if(@file_exists($ifile)){
+ $idata = io_readFile($ifile);
+ }else{
+ $idata = '';
+ }
+ $data = str_replace($match[0],$idata,$data);
+ }
+ echo $data;
+}
+
+/**
+ * Checks if a JavaScript Cache file still is valid
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function js_cacheok($cache,$files){
+ if(isset($_REQUEST['purge'])) return false; //support purge request
+
+ $ctime = @filemtime($cache);
+ if(!$ctime) return false; //There is no cache
+
+ // some additional files to check
+ $files = array_merge($files, getConfigFiles('main'));
+ $files[] = DOKU_CONF.'userscript.js';
+ $files[] = __FILE__;
+
+ // now walk the files
+ foreach($files as $file){
+ if(@filemtime($file) > $ctime){
+ return false;
+ }
+ }
+ return true;
+}
+
+/**
+ * Returns a list of possible Plugin Scripts (no existance check here)
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function js_pluginscripts(){
+ $list = array();
+ $plugins = plugin_list();
+ foreach ($plugins as $p){
+ $list[] = DOKU_PLUGIN."$p/script.js";
+ }
+ return $list;
+}
+
+/**
+ * Return an two-dimensional array with strings from the language file of each plugin.
+ *
+ * - $lang['js'] must be an array.
+ * - Nothing is returned for plugins without an entry for $lang['js']
+ *
+ * @author Gabriel Birke <birke@d-scribe.de>
+ */
+function js_pluginstrings()
+{
+ global $conf;
+ $pluginstrings = array();
+ $plugins = plugin_list();
+ foreach ($plugins as $p){
+ if (isset($lang)) unset($lang);
+ if (@file_exists(DOKU_PLUGIN."$p/lang/en/lang.php")) {
+ include DOKU_PLUGIN."$p/lang/en/lang.php";
+ }
+ if (isset($conf['lang']) && $conf['lang']!='en' && @file_exists(DOKU_PLUGIN."$p/lang/".$conf['lang']."/lang.php")) {
+ include DOKU_PLUGIN."$p/lang/".$conf['lang']."/lang.php";
+ }
+ if (isset($lang['js'])) {
+ $pluginstrings[$p] = $lang['js'];
+ }
+ }
+ return $pluginstrings;
+}
+
+/**
+ * Escapes a String to be embedded in a JavaScript call, keeps \n
+ * as newline
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function js_escape($string){
+ return str_replace('\\\\n','\\n',addslashes($string));
+}
+
+/**
+ * Adds the given JavaScript code to the window.onload() event
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function js_runonstart($func){
+ echo "addInitEvent(function(){ $func; });".NL;
+}
+
+/**
+ * Strip comments and whitespaces from given JavaScript Code
+ *
+ * This is a port of Nick Galbreath's python tool jsstrip.py which is
+ * released under BSD license. See link for original code.
+ *
+ * @author Nick Galbreath <nickg@modp.com>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @link http://code.google.com/p/jsstrip/
+ */
+function js_compress($s){
+ $s = ltrim($s); // strip all initial whitespace
+ $s .= "\n";
+ $i = 0; // char index for input string
+ $j = 0; // char forward index for input string
+ $line = 0; // line number of file (close to it anyways)
+ $slen = strlen($s); // size of input string
+ $lch = ''; // last char added
+ $result = ''; // we store the final result here
+
+ // items that don't need spaces next to them
+ $chars = "^&|!+\-*\/%=\?:;,{}()<>% \t\n\r'\"[]";
+
+ $regex_starters = array("(", "=", "[", "," , ":");
+
+ $whitespaces_chars = array(" ", "\t", "\n", "\r", "\0", "\x0B");
+
+ while($i < $slen){
+ // skip all "boring" characters. This is either
+ // reserved word (e.g. "for", "else", "if") or a
+ // variable/object/method (e.g. "foo.color")
+ while ($i < $slen && (strpos($chars,$s[$i]) === false) ){
+ $result .= $s{$i};
+ $i = $i + 1;
+ }
+
+ $ch = $s{$i};
+ // multiline comments (keeping IE conditionals)
+ if($ch == '/' && $s{$i+1} == '*' && $s{$i+2} != '@'){
+ $endC = strpos($s,'*/',$i+2);
+ if($endC === false) trigger_error('Found invalid /*..*/ comment', E_USER_ERROR);
+ $i = $endC + 2;
+ continue;
+ }
+
+ // singleline
+ if($ch == '/' && $s{$i+1} == '/'){
+ $endC = strpos($s,"\n",$i+2);
+ if($endC === false) trigger_error('Invalid comment', E_USER_ERROR);
+ $i = $endC;
+ continue;
+ }
+
+ // tricky. might be an RE
+ if($ch == '/'){
+ // rewind, skip white space
+ $j = 1;
+ while(in_array($s{$i-$j}, $whitespaces_chars)){
+ $j = $j + 1;
+ }
+ if( in_array($s{$i-$j}, $regex_starters) ){
+ // yes, this is an re
+ // now move forward and find the end of it
+ $j = 1;
+ while($s{$i+$j} != '/'){
+ while( ($s{$i+$j} != '\\') && ($s{$i+$j} != '/')){
+ $j = $j + 1;
+ }
+ if($s{$i+$j} == '\\') $j = $j + 2;
+ }
+ $result .= substr($s,$i,$j+1);
+ $i = $i + $j + 1;
+ continue;
+ }
+ }
+
+ // double quote strings
+ if($ch == '"'){
+ $j = 1;
+ while( $s{$i+$j} != '"' && ($i+$j < $slen)){
+ if( $s{$i+$j} == '\\' && ($s{$i+$j+1} == '"' || $s{$i+$j+1} == '\\') ){
+ $j += 2;
+ }else{
+ $j += 1;
+ }
+ }
+ $result .= substr($s,$i,$j+1);
+ $i = $i + $j + 1;
+ continue;
+ }
+
+ // single quote strings
+ if($ch == "'"){
+ $j = 1;
+ while( $s{$i+$j} != "'" && ($i+$j < $slen)){
+ if( $s{$i+$j} == '\\' && ($s{$i+$j+1} == "'" || $s{$i+$j+1} == '\\') ){
+ $j += 2;
+ }else{
+ $j += 1;
+ }
+ }
+ $result .= substr($s,$i,$j+1);
+ $i = $i + $j + 1;
+ continue;
+ }
+
+ // whitespaces
+ if( $ch == ' ' || $ch == "\r" || $ch == "\n" || $ch == "\t" ){
+ // leading spaces
+ if($i+1 < $slen && (strpos($chars,$s[$i+1]) !== false)){
+ $i = $i + 1;
+ continue;
+ }
+ // trailing spaces
+ // if this ch is space AND the last char processed
+ // is special, then skip the space
+ $lch = substr($result,-1);
+ if($lch && (strpos($chars,$lch) !== false)){
+ $i = $i + 1;
+ continue;
+ }
+ // else after all of this convert the "whitespace" to
+ // a single space. It will get appended below
+ $ch = ' ';
+ }
+
+ // other chars
+ $result .= $ch;
+ $i = $i + 1;
+ }
+
+ return trim($result);
+}
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/exe/mediamanager.php b/mod/dokuwiki/vendors/dokuwiki/lib/exe/mediamanager.php
new file mode 100644
index 000000000..f6e91b858
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/exe/mediamanager.php
@@ -0,0 +1,105 @@
+<?php
+ if(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/../../');
+ define('DOKU_MEDIAMANAGER',1);
+
+ // for multi uploader:
+ @ini_set('session.use_only_cookies',0);
+
+ require_once(DOKU_INC.'inc/init.php');
+ require_once(DOKU_INC.'inc/lang/en/lang.php');
+ require_once(DOKU_INC.'inc/lang/'.$conf['lang'].'/lang.php');
+ require_once(DOKU_INC.'inc/media.php');
+ require_once(DOKU_INC.'inc/common.php');
+ require_once(DOKU_INC.'inc/search.php');
+ require_once(DOKU_INC.'inc/template.php');
+ require_once(DOKU_INC.'inc/auth.php');
+
+ trigger_event('MEDIAMANAGER_STARTED',$tmp=array());
+ session_write_close(); //close session
+
+ // handle passed message
+ if($_REQUEST['msg1']) msg(hsc($_REQUEST['msg1']),1);
+ if($_REQUEST['err']) msg(hsc($_REQUEST['err']),-1);
+
+
+ // get namespace to display (either direct or from deletion order)
+ if($_REQUEST['delete']){
+ $DEL = cleanID($_REQUEST['delete']);
+ $IMG = $DEL;
+ $NS = getNS($DEL);
+ }elseif($_REQUEST['edit']){
+ $IMG = cleanID($_REQUEST['edit']);
+ $NS = getNS($IMG);
+ }elseif($_REQUEST['img']){
+ $IMG = cleanID($_REQUEST['img']);
+ $NS = getNS($IMG);
+ }else{
+ $NS = $_REQUEST['ns'];
+ $NS = cleanID($NS);
+ }
+
+ // check auth
+ $AUTH = auth_quickaclcheck("$NS:*");
+
+ // create the given namespace (just for beautification)
+ if($AUTH >= AUTH_UPLOAD) { io_createNamespace("$NS:xxx", 'media'); }
+
+ // handle flash upload
+ if(isset($_FILES['Filedata'])){
+ $_FILES['upload'] =& $_FILES['Filedata'];
+ $JUMPTO = media_upload($NS,$AUTH);
+ if($JUMPTO == false){
+ header("HTTP/1.0 400 Bad Request");
+ echo 'Upload failed';
+ }
+ echo 'ok';
+ exit;
+ }
+
+ // give info on PHP catched upload errors
+ if($_FILES['upload']['error']){
+ switch($_FILES['upload']['error']){
+ case 1:
+ case 2:
+ msg(sprintf($lang['uploadsize'],
+ filesize_h(php_to_byte(ini_get('upload_max_filesize')))),-1);
+ break;
+ default:
+ msg($lang['uploadfail'].' ('.$_FILES['upload']['error'].')',-1);
+ }
+ unset($_FILES['upload']);
+ }
+
+ // handle upload
+ if($_FILES['upload']['tmp_name']){
+ $JUMPTO = media_upload($NS,$AUTH);
+ if($JUMPTO) $NS = getNS($JUMPTO);
+ }
+
+ // handle meta saving
+ if($IMG && $_REQUEST['do']['save']){
+ $JUMPTO = media_metasave($IMG,$AUTH,$_REQUEST['meta']);
+ }
+
+ // handle deletion
+ if($DEL) {
+ $INUSE = media_inuse($DEL);
+ if(!$INUSE) {
+ if(media_delete($DEL,$AUTH)) {
+ msg(sprintf($lang['deletesucc'],noNS($DEL)),1);
+ } else {
+ msg(sprintf($lang['deletefail'],noNS($DEL)),-1);
+ }
+ } else {
+ if(!$conf['refshow']) {
+ unset($INUSE);
+ msg(sprintf($lang['mediainuse'],noNS($DEL)),0);
+ }
+ }
+ }
+
+ // finished - start output
+ header('Content-Type: text/html; charset=utf-8');
+ include(template('mediamanager.php'));
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/exe/multipleUpload.swf b/mod/dokuwiki/vendors/dokuwiki/lib/exe/multipleUpload.swf
new file mode 100644
index 000000000..888aab045
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/exe/multipleUpload.swf
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/exe/opensearch.php b/mod/dokuwiki/vendors/dokuwiki/lib/exe/opensearch.php
new file mode 100644
index 000000000..f16b4f681
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/exe/opensearch.php
@@ -0,0 +1,38 @@
+<?php
+/**
+ * DokuWiki OpenSearch creator
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @link http://www.opensearch.org/
+ * @author Mike Frysinger <vapier@gentoo.org>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+if(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/../../');
+if(!defined('NOSESSION')) define('NOSESSION',true); // we do not use a session or authentication here (better caching)
+if(!defined('NL')) define('NL',"\n");
+require_once(DOKU_INC.'inc/init.php');
+
+// try to be clever about the favicon location
+if(file_exists(DOKU_INC.'favicon.ico')){
+ $ico = DOKU_URL.'favicon.ico';
+}elseif(file_exists(DOKU_TPLINC.'images/favicon.ico')){
+ $ico = DOKU_URL.'lib/tpl/'.$conf['template'].'/images/favicon.ico';
+}elseif(file_exists(DOKU_TPLINC.'favicon.ico')){
+ $ico = DOKU_URL.'lib/tpl/'.$conf['template'].'/favicon.ico';
+}else{
+ $ico = DOKU_URL.'lib/tpl/default/images/favicon.ico';
+}
+
+// output
+header('Content-Type: application/opensearchdescription+xml; charset=utf-8');
+echo '<?xml version="1.0"?>'.NL;
+echo '<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">'.NL;
+echo ' <ShortName>'.htmlspecialchars($conf['title']).'</ShortName>'.NL;
+echo ' <Image width="16" height="16" type="image/x-icon">'.$ico.'</Image>'.NL;
+echo ' <Url type="text/html" template="'.DOKU_URL.DOKU_SCRIPT.'?do=search&amp;id={searchTerms}" />'.NL;
+echo ' <Url type="application/x-suggestions+json" template="'.
+ DOKU_URL.'lib/exe/ajax.php?call=suggestions&amp;q={searchTerms}" />'.NL;
+echo '</OpenSearchDescription>'.NL;
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/exe/xmlrpc.php b/mod/dokuwiki/vendors/dokuwiki/lib/exe/xmlrpc.php
new file mode 100644
index 000000000..d3913482f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/exe/xmlrpc.php
@@ -0,0 +1,921 @@
+<?php
+if(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/../../');
+
+// fix when '<?xml' isn't on the very first line
+if(isset($HTTP_RAW_POST_DATA)) $HTTP_RAW_POST_DATA = trim($HTTP_RAW_POST_DATA);
+
+/**
+ * Increased whenever the API is changed
+ */
+define('DOKU_XMLRPC_API_VERSION',2);
+
+require_once(DOKU_INC.'inc/init.php');
+require_once(DOKU_INC.'inc/common.php');
+require_once(DOKU_INC.'inc/auth.php');
+session_write_close(); //close session
+
+if(!$conf['xmlrpc']) die('XML-RPC server not enabled.');
+
+require_once(DOKU_INC.'inc/IXR_Library.php');
+
+
+/**
+ * Contains needed wrapper functions and registers all available
+ * XMLRPC functions.
+ */
+class dokuwiki_xmlrpc_server extends IXR_IntrospectionServer {
+ var $methods = array();
+ var $public_methods = array();
+
+ /**
+ * Checks if the current user is allowed to execute non anonymous methods
+ */
+ function checkAuth(){
+ global $conf;
+ global $USERINFO;
+
+ if(!$conf['useacl']) return true; //no ACL - then no checks
+
+ $allowed = explode(',',$conf['xmlrpcuser']);
+ $allowed = array_map('trim', $allowed);
+ $allowed = array_unique($allowed);
+ $allowed = array_filter($allowed);
+
+ if(!count($allowed)) return true; //no restrictions
+
+ $user = $_SERVER['REMOTE_USER'];
+ $groups = (array) $USERINFO['grps'];
+
+ if(in_array($user,$allowed)) return true; //user explicitly mentioned
+
+ //check group memberships
+ foreach($groups as $group){
+ if(in_array('@'.$group,$allowed)) return true;
+ }
+
+ //still here? no access!
+ return false;
+ }
+
+ /**
+ * Adds a callback, extends parent method
+ *
+ * add another parameter to define if anonymous access to
+ * this method should be granted.
+ */
+ function addCallback($method, $callback, $args, $help, $public=false){
+ if($public) $this->public_methods[] = $method;
+ return parent::addCallback($method, $callback, $args, $help);
+ }
+
+ /**
+ * Execute a call, extends parent method
+ *
+ * Checks for authentication first
+ */
+ function call($methodname, $args){
+ if(!in_array($methodname,$this->public_methods) && !$this->checkAuth()){
+ return new IXR_Error(-32603, 'server error. not authorized to call method "'.$methodname.'".');
+ }
+ return parent::call($methodname, $args);
+ }
+
+ /**
+ * Constructor. Register methods and run Server
+ */
+ function dokuwiki_xmlrpc_server(){
+ $this->IXR_IntrospectionServer();
+
+ /* DokuWiki's own methods */
+ $this->addCallback(
+ 'dokuwiki.getXMLRPCAPIVersion',
+ 'this:getAPIVersion',
+ array('integer'),
+ 'Returns the XMLRPC API version.',
+ true
+ );
+
+ $this->addCallback(
+ 'dokuwiki.getVersion',
+ 'getVersion',
+ array('string'),
+ 'Returns the running DokuWiki version.',
+ true
+ );
+
+ $this->addCallback(
+ 'dokuwiki.login',
+ 'this:login',
+ array('integer','string','string'),
+ 'Tries to login with the given credentials and sets auth cookies.',
+ true
+ );
+
+ $this->addCallback(
+ 'dokuwiki.getPagelist',
+ 'this:readNamespace',
+ array('struct','string','struct'),
+ 'List all pages within the given namespace.'
+ );
+
+ $this->addCallback(
+ 'dokuwiki.getTime',
+ 'time',
+ array('int'),
+ 'Return the current time at the wiki server.'
+ );
+
+ $this->addCallback(
+ 'dokuwiki.setLocks',
+ 'this:setLocks',
+ array('struct','struct'),
+ 'Lock or unlock pages.'
+ );
+
+ /* Wiki API v2 http://www.jspwiki.org/wiki/WikiRPCInterface2 */
+ $this->addCallback(
+ 'wiki.getRPCVersionSupported',
+ 'this:wiki_RPCVersion',
+ array('int'),
+ 'Returns 2 with the supported RPC API version.',
+ true
+ );
+ $this->addCallback(
+ 'wiki.getPage',
+ 'this:rawPage',
+ array('string','string'),
+ 'Get the raw Wiki text of page, latest version.'
+ );
+ $this->addCallback(
+ 'wiki.getPageVersion',
+ 'this:rawPage',
+ array('string','string','int'),
+ 'Get the raw Wiki text of page.'
+ );
+ $this->addCallback(
+ 'wiki.getPageHTML',
+ 'this:htmlPage',
+ array('string','string'),
+ 'Return page in rendered HTML, latest version.'
+ );
+ $this->addCallback(
+ 'wiki.getPageHTMLVersion',
+ 'this:htmlPage',
+ array('string','string','int'),
+ 'Return page in rendered HTML.'
+ );
+ $this->addCallback(
+ 'wiki.getAllPages',
+ 'this:listPages',
+ array('struct'),
+ 'Returns a list of all pages. The result is an array of utf8 pagenames.'
+ );
+ $this->addCallback(
+ 'wiki.getAttachments',
+ 'this:listAttachments',
+ array('struct', 'string', 'struct'),
+ 'Returns a list of all media files.'
+ );
+ $this->addCallback(
+ 'wiki.getBackLinks',
+ 'this:listBackLinks',
+ array('struct','string'),
+ 'Returns the pages that link to this page.'
+ );
+ $this->addCallback(
+ 'wiki.getPageInfo',
+ 'this:pageInfo',
+ array('struct','string'),
+ 'Returns a struct with infos about the page.'
+ );
+ $this->addCallback(
+ 'wiki.getPageInfoVersion',
+ 'this:pageInfo',
+ array('struct','string','int'),
+ 'Returns a struct with infos about the page.'
+ );
+ $this->addCallback(
+ 'wiki.getPageVersions',
+ 'this:pageVersions',
+ array('struct','string','int'),
+ 'Returns the available revisions of the page.'
+ );
+ $this->addCallback(
+ 'wiki.putPage',
+ 'this:putPage',
+ array('int', 'string', 'string', 'struct'),
+ 'Saves a wiki page.'
+ );
+ $this->addCallback(
+ 'wiki.listLinks',
+ 'this:listLinks',
+ array('struct','string'),
+ 'Lists all links contained in a wiki page.'
+ );
+ $this->addCallback(
+ 'wiki.getRecentChanges',
+ 'this:getRecentChanges',
+ array('struct','int'),
+ 'Returns a struct about all recent changes since given timestamp.'
+ );
+ $this->addCallback(
+ 'wiki.getRecentMediaChanges',
+ 'this:getRecentMediaChanges',
+ array('struct','int'),
+ 'Returns a struct about all recent media changes since given timestamp.'
+ );
+ $this->addCallback(
+ 'wiki.aclCheck',
+ 'this:aclCheck',
+ array('int', 'string'),
+ 'Returns the permissions of a given wiki page.'
+ );
+ $this->addCallback(
+ 'wiki.putAttachment',
+ 'this:putAttachment',
+ array('struct', 'string', 'base64', 'struct'),
+ 'Upload a file to the wiki.'
+ );
+ $this->addCallback(
+ 'wiki.deleteAttachment',
+ 'this:deleteAttachment',
+ array('int', 'string'),
+ 'Delete a file from the wiki.'
+ );
+ $this->addCallback(
+ 'wiki.getAttachment',
+ 'this:getAttachment',
+ array('base64', 'string'),
+ 'Download a file from the wiki.'
+ );
+ $this->addCallback(
+ 'wiki.getAttachmentInfo',
+ 'this:getAttachmentInfo',
+ array('struct', 'string'),
+ 'Returns a struct with infos about the attachment.'
+ );
+
+ /**
+ * Trigger XMLRPC_CALLBACK_REGISTER, action plugins can use this event
+ * to extend the XMLRPC interface and register their own callbacks.
+ *
+ * Event data:
+ * The XMLRPC server object:
+ *
+ * $event->data->addCallback() - register a callback, the second
+ * paramter has to be of the form "plugin:<pluginname>:<plugin
+ * method>"
+ *
+ * $event->data->callbacks - an array which holds all awaylable
+ * callbacks
+ */
+ trigger_event('XMLRPC_CALLBACK_REGISTER', $this);
+
+ $this->serve();
+ }
+
+ /**
+ * Return a raw wiki page
+ */
+ function rawPage($id,$rev=''){
+ if(auth_quickaclcheck($id) < AUTH_READ){
+ return new IXR_Error(1, 'You are not allowed to read this page');
+ }
+ $text = rawWiki($id,$rev);
+ if(!$text) {
+ $data = array($id);
+ return trigger_event('HTML_PAGE_FROMTEMPLATE',$data,'pageTemplate',true);
+ } else {
+ return $text;
+ }
+ }
+
+ /**
+ * Return a media file encoded in base64
+ *
+ * @author Gina Haeussge <osd@foosel.net>
+ */
+ function getAttachment($id){
+ $id = cleanID($id);
+ if (auth_quickaclcheck(getNS($id).':*') < AUTH_READ)
+ return new IXR_Error(1, 'You are not allowed to read this file');
+
+ $file = mediaFN($id);
+ if (!@ file_exists($file))
+ return new IXR_Error(1, 'The requested file does not exist');
+
+ $data = io_readFile($file, false);
+ $base64 = base64_encode($data);
+ return $base64;
+ }
+
+ /**
+ * Return info about a media file
+ *
+ * @author Gina Haeussge <osd@foosel.net>
+ */
+ function getAttachmentInfo($id){
+ $id = cleanID($id);
+ $info = array(
+ 'lastModified' => 0,
+ 'size' => 0,
+ );
+
+ $file = mediaFN($id);
+ if ((auth_quickaclcheck(getNS($id).':*') >= AUTH_READ) && file_exists($file)){
+ $info['lastModified'] = new IXR_Date(filemtime($file));
+ $info['size'] = filesize($file);
+ }
+
+ return $info;
+ }
+
+ /**
+ * Return a wiki page rendered to html
+ */
+ function htmlPage($id,$rev=''){
+ if(auth_quickaclcheck($id) < AUTH_READ){
+ return new IXR_Error(1, 'You are not allowed to read this page');
+ }
+ return p_wiki_xhtml($id,$rev,false);
+ }
+
+ /**
+ * List all pages - we use the indexer list here
+ */
+ function listPages(){
+ global $conf;
+
+ $list = array();
+ $pages = file($conf['indexdir'] . '/page.idx');
+ $pages = array_filter($pages, 'isVisiblePage');
+
+ foreach(array_keys($pages) as $idx) {
+ if(page_exists($pages[$idx])) {
+ $perm = auth_quickaclcheck($pages[$idx]);
+ if($perm >= AUTH_READ) {
+ $page = array();
+ $page['id'] = trim($pages[$idx]);
+ $page['perms'] = $perm;
+ $page['size'] = @filesize(wikiFN($pages[$idx]));
+ $page['lastModified'] = new IXR_Date(@filemtime(wikiFN($pages[$idx])));
+ $list[] = $page;
+ }
+ }
+ }
+
+ return $list;
+ }
+
+ /**
+ * List all pages in the given namespace (and below)
+ */
+ function readNamespace($ns,$opts){
+ global $conf;
+
+ if(!is_array($opts)) $opts=array();
+
+ $ns = cleanID($ns);
+ $dir = utf8_encodeFN(str_replace(':', '/', $ns));
+ $data = array();
+ require_once(DOKU_INC.'inc/search.php');
+ $opts['skipacl'] = 0; // no ACL skipping for XMLRPC
+ search($data, $conf['datadir'], 'search_allpages', $opts, $dir);
+ return $data;
+ }
+
+ /**
+ * List all media files.
+ *
+ * Available options are 'recursive' for also including the subnamespaces
+ * in the listing, and 'pattern' for filtering the returned files against
+ * a regular expression matching their name.
+ *
+ * @author Gina Haeussge <osd@foosel.net>
+ */
+ function listAttachments($ns, $options = array()) {
+ global $conf;
+ global $lang;
+
+ $ns = cleanID($ns);
+
+ if (!is_array($options)) $options = array();
+ $options['skipacl'] = 0; // no ACL skipping for XMLRPC
+
+
+ if(auth_quickaclcheck($ns.':*') >= AUTH_READ) {
+ $dir = utf8_encodeFN(str_replace(':', '/', $ns));
+
+ $data = array();
+ require_once(DOKU_INC.'inc/search.php');
+ search($data, $conf['mediadir'], 'search_media', $options, $dir);
+ $len = count($data);
+ if(!$len) return array();
+
+ for($i=0; $i<$len; $i++) {
+ unset($data[$i]['meta']);
+ $data[$i]['lastModified'] = new IXR_Date($data[$i]['mtime']);
+ }
+ return $data;
+ } else {
+ return new IXR_Error(1, 'You are not allowed to list media files.');
+ }
+ }
+
+ /**
+ * Return a list of backlinks
+ */
+ function listBackLinks($id){
+ require_once(DOKU_INC.'inc/fulltext.php');
+ return ft_backlinks($id);
+ }
+
+ /**
+ * Return some basic data about a page
+ */
+ function pageInfo($id,$rev=''){
+ if(auth_quickaclcheck($id) < AUTH_READ){
+ return new IXR_Error(1, 'You are not allowed to read this page');
+ }
+ $file = wikiFN($id,$rev);
+ $time = @filemtime($file);
+ if(!$time){
+ return new IXR_Error(10, 'The requested page does not exist');
+ }
+
+ $info = getRevisionInfo($id, $time, 1024);
+
+ $data = array(
+ 'name' => $id,
+ 'lastModified' => new IXR_Date($time),
+ 'author' => (($info['user']) ? $info['user'] : $info['ip']),
+ 'version' => $time
+ );
+
+ return ($data);
+ }
+
+ /**
+ * Save a wiki page
+ *
+ * @author Michael Klier <chi@chimeric.de>
+ */
+ function putPage($id, $text, $params) {
+ global $TEXT;
+ global $lang;
+ global $conf;
+
+ $id = cleanID($id);
+ $TEXT = cleanText($text);
+ $sum = $params['sum'];
+ $minor = $params['minor'];
+
+ if(empty($id))
+ return new IXR_Error(1, 'Empty page ID');
+
+ if(!page_exists($id) && trim($TEXT) == '' ) {
+ return new IXR_ERROR(1, 'Refusing to write an empty new wiki page');
+ }
+
+ if(auth_quickaclcheck($id) < AUTH_EDIT)
+ return new IXR_Error(1, 'You are not allowed to edit this page');
+
+ // Check, if page is locked
+ if(checklock($id))
+ return new IXR_Error(1, 'The page is currently locked');
+
+ // SPAM check
+ if(checkwordblock())
+ return new IXR_Error(1, 'Positive wordblock check');
+
+ // autoset summary on new pages
+ if(!page_exists($id) && empty($sum)) {
+ $sum = $lang['created'];
+ }
+
+ // autoset summary on deleted pages
+ if(page_exists($id) && empty($TEXT) && empty($sum)) {
+ $sum = $lang['deleted'];
+ }
+
+ lock($id);
+
+ saveWikiText($id,$TEXT,$sum,$minor);
+
+ unlock($id);
+
+ // run the indexer if page wasn't indexed yet
+ if(!@file_exists(metaFN($id, '.indexed'))) {
+ // try to aquire a lock
+ $lock = $conf['lockdir'].'/_indexer.lock';
+ while(!@mkdir($lock,$conf['dmode'])){
+ usleep(50);
+ if(time()-@filemtime($lock) > 60*5){
+ // looks like a stale lock - remove it
+ @rmdir($lock);
+ }else{
+ return false;
+ }
+ }
+ if($conf['dperm']) chmod($lock, $conf['dperm']);
+
+ require_once(DOKU_INC.'inc/indexer.php');
+
+ // do the work
+ idx_addPage($id);
+
+ // we're finished - save and free lock
+ io_saveFile(metaFN($id,'.indexed'),INDEXER_VERSION);
+ @rmdir($lock);
+ }
+
+ return 0;
+ }
+
+ /**
+ * Uploads a file to the wiki.
+ *
+ * Michael Klier <chi@chimeric.de>
+ */
+ function putAttachment($id, $file, $params) {
+ global $conf;
+ global $lang;
+
+ $auth = auth_quickaclcheck(getNS($id).':*');
+ if($auth >= AUTH_UPLOAD) {
+ if(!isset($id)) {
+ return new IXR_ERROR(1, 'Filename not given.');
+ }
+
+ $ftmp = $conf['tmpdir'] . '/' . $id;
+
+ // save temporary file
+ @unlink($ftmp);
+ $buff = base64_decode($file);
+ io_saveFile($ftmp, $buff);
+
+ // get filename
+ list($iext, $imime,$dl) = mimetype($id);
+ $id = cleanID($id);
+ $fn = mediaFN($id);
+
+ // get filetype regexp
+ $types = array_keys(getMimeTypes());
+ $types = array_map(create_function('$q','return preg_quote($q,"/");'),$types);
+ $regex = join('|',$types);
+
+ // because a temp file was created already
+ if(preg_match('/\.('.$regex.')$/i',$fn)) {
+ //check for overwrite
+ $overwrite = @file_exists($fn);
+ if($overwrite && (!$params['ow'] || $auth < AUTH_DELETE)) {
+ return new IXR_ERROR(1, $lang['uploadexist'].'1');
+ }
+ // check for valid content
+ @require_once(DOKU_INC.'inc/media.php');
+ $ok = media_contentcheck($ftmp, $imime);
+ if($ok == -1) {
+ return new IXR_ERROR(1, sprintf($lang['uploadexist'].'2', ".$iext"));
+ } elseif($ok == -2) {
+ return new IXR_ERROR(1, $lang['uploadspam']);
+ } elseif($ok == -3) {
+ return new IXR_ERROR(1, $lang['uploadxss']);
+ }
+
+ // prepare event data
+ $data[0] = $ftmp;
+ $data[1] = $fn;
+ $data[2] = $id;
+ $data[3] = $imime;
+ $data[4] = $overwrite;
+
+ // trigger event
+ require_once(DOKU_INC.'inc/events.php');
+ return trigger_event('MEDIA_UPLOAD_FINISH', $data, array($this, '_media_upload_action'), true);
+
+ } else {
+ return new IXR_ERROR(1, $lang['uploadwrong']);
+ }
+ } else {
+ return new IXR_ERROR(1, "You don't have permissions to upload files.");
+ }
+ }
+
+ /**
+ * Deletes a file from the wiki.
+ *
+ * @author Gina Haeussge <osd@foosel.net>
+ */
+ function deleteAttachment($id){
+ $auth = auth_quickaclcheck(getNS($id).':*');
+ if($auth < AUTH_DELETE) return new IXR_ERROR(1, "You don't have permissions to delete files.");
+ global $conf;
+ global $lang;
+
+ // check for references if needed
+ $mediareferences = array();
+ if($conf['refcheck']){
+ require_once(DOKU_INC.'inc/fulltext.php');
+ $mediareferences = ft_mediause($id,$conf['refshow']);
+ }
+
+ if(!count($mediareferences)){
+ $file = mediaFN($id);
+ if(@unlink($file)){
+ require_once(DOKU_INC.'inc/changelog.php');
+ addMediaLogEntry(time(), $id, DOKU_CHANGE_TYPE_DELETE);
+ io_sweepNS($id,'mediadir');
+ return 0;
+ }
+ //something went wrong
+ return new IXR_ERROR(1, 'Could not delete file');
+ } else {
+ return new IXR_ERROR(1, 'File is still referenced');
+ }
+ }
+
+ /**
+ * Moves the temporary file to its final destination.
+ *
+ * Michael Klier <chi@chimeric.de>
+ */
+ function _media_upload_action($data) {
+ global $conf;
+
+ if(is_array($data) && count($data)===5) {
+ io_createNamespace($data[2], 'media');
+ if(rename($data[0], $data[1])) {
+ chmod($data[1], $conf['fmode']);
+ media_notify($data[2], $data[1], $data[3]);
+ // add a log entry to the media changelog
+ require_once(DOKU_INC.'inc/changelog.php');
+ if ($data[4]) {
+ addMediaLogEntry(time(), $data[2], DOKU_CHANGE_TYPE_EDIT);
+ } else {
+ addMediaLogEntry(time(), $data[2], DOKU_CHANGE_TYPE_CREATE);
+ }
+ return $data[2];
+ } else {
+ return new IXR_ERROR(1, 'Upload failed.');
+ }
+ } else {
+ return new IXR_ERROR(1, 'Upload failed.');
+ }
+ }
+
+ /**
+ * Returns the permissions of a given wiki page
+ */
+ function aclCheck($id) {
+ return auth_quickaclcheck($id);
+ }
+
+ /**
+ * Lists all links contained in a wiki page
+ *
+ * @author Michael Klier <chi@chimeric.de>
+ */
+ function listLinks($id) {
+ if(auth_quickaclcheck($id) < AUTH_READ){
+ return new IXR_Error(1, 'You are not allowed to read this page');
+ }
+ $links = array();
+
+ // resolve page instructions
+ $ins = p_cached_instructions(wikiFN(cleanID($id)));
+
+ // instantiate new Renderer - needed for interwiki links
+ include(DOKU_INC.'inc/parser/xhtml.php');
+ $Renderer = new Doku_Renderer_xhtml();
+ $Renderer->interwiki = getInterwiki();
+
+ // parse parse instructions
+ foreach($ins as $in) {
+ $link = array();
+ switch($in[0]) {
+ case 'internallink':
+ $link['type'] = 'local';
+ $link['page'] = $in[1][0];
+ $link['href'] = wl($in[1][0]);
+ array_push($links,$link);
+ break;
+ case 'externallink':
+ $link['type'] = 'extern';
+ $link['page'] = $in[1][0];
+ $link['href'] = $in[1][0];
+ array_push($links,$link);
+ break;
+ case 'interwikilink':
+ $url = $Renderer->_resolveInterWiki($in[1][2],$in[1][3]);
+ $link['type'] = 'extern';
+ $link['page'] = $url;
+ $link['href'] = $url;
+ array_push($links,$link);
+ break;
+ }
+ }
+
+ return ($links);
+ }
+
+ /**
+ * Returns a list of recent changes since give timestamp
+ *
+ * @author Michael Hamann <michael@content-space.de>
+ * @author Michael Klier <chi@chimeric.de>
+ */
+ function getRecentChanges($timestamp) {
+ if(strlen($timestamp) != 10)
+ return new IXR_Error(20, 'The provided value is not a valid timestamp');
+
+ require_once(DOKU_INC.'inc/changelog.php');
+ require_once(DOKU_INC.'inc/pageutils.php');
+
+ $recents = getRecentsSince($timestamp);
+
+ $changes = array();
+
+ foreach ($recents as $recent) {
+ $change = array();
+ $change['name'] = $recent['id'];
+ $change['lastModified'] = new IXR_Date($recent['date']);
+ $change['author'] = $recent['user'];
+ $change['version'] = $recent['date'];
+ $change['perms'] = $recent['perms'];
+ $change['size'] = @filesize(wikiFN($recent['id']));
+ array_push($changes, $change);
+ }
+
+ if (!empty($changes)) {
+ return $changes;
+ } else {
+ // in case we still have nothing at this point
+ return new IXR_Error(30, 'There are no changes in the specified timeframe');
+ }
+ }
+
+ /**
+ * Returns a list of recent media changes since give timestamp
+ *
+ * @author Michael Hamann <michael@content-space.de>
+ * @author Michael Klier <chi@chimeric.de>
+ */
+ function getRecentMediaChanges($timestamp) {
+ if(strlen($timestamp) != 10)
+ return new IXR_Error(20, 'The provided value is not a valid timestamp');
+
+ require_once(DOKU_INC.'inc/changelog.php');
+ require_once(DOKU_INC.'inc/pageutils.php');
+
+ $recents = getRecentsSince($timestamp, null, '', RECENTS_MEDIA_CHANGES);
+
+ $changes = array();
+
+ foreach ($recents as $recent) {
+ $change = array();
+ $change['name'] = $recent['id'];
+ $change['lastModified'] = new IXR_Date($recent['date']);
+ $change['author'] = $recent['user'];
+ $change['version'] = $recent['date'];
+ $change['perms'] = $recent['perms'];
+ $change['size'] = @filesize(mediaFN($recent['id']));
+ array_push($changes, $change);
+ }
+
+ if (!empty($changes)) {
+ return $changes;
+ } else {
+ // in case we still have nothing at this point
+ return new IXR_Error(30, 'There are no changes in the specified timeframe');
+ }
+ }
+
+ /**
+ * Returns a list of available revisions of a given wiki page
+ *
+ * @author Michael Klier <chi@chimeric.de>
+ */
+ function pageVersions($id, $first) {
+ global $conf;
+
+ $versions = array();
+
+ if(empty($id))
+ return new IXR_Error(1, 'Empty page ID');
+
+ require_once(DOKU_INC.'inc/changelog.php');
+
+ $revisions = getRevisions($id, $first, $conf['recent']+1);
+
+ if(count($revisions)==0 && $first!=0) {
+ $first=0;
+ $revisions = getRevisions($id, $first, $conf['recent']+1);
+ }
+
+ if(count($revisions)>0 && $first==0) {
+ array_unshift($revisions, ''); // include current revision
+ array_pop($revisions); // remove extra log entry
+ }
+
+ $hasNext = false;
+ if(count($revisions)>$conf['recent']) {
+ $hasNext = true;
+ array_pop($revisions); // remove extra log entry
+ }
+
+ if(!empty($revisions)) {
+ foreach($revisions as $rev) {
+ $file = wikiFN($id,$rev);
+ $time = @filemtime($file);
+ // we check if the page actually exists, if this is not the
+ // case this can lead to less pages being returned than
+ // specified via $conf['recent']
+ if($time){
+ $info = getRevisionInfo($id, $time, 1024);
+ if(!empty($info)) {
+ $data['user'] = $info['user'];
+ $data['ip'] = $info['ip'];
+ $data['type'] = $info['type'];
+ $data['sum'] = $info['sum'];
+ $data['modified'] = new IXR_Date($info['date']);
+ $data['version'] = $info['date'];
+ array_push($versions, $data);
+ }
+ }
+ }
+ return $versions;
+ } else {
+ return array();
+ }
+ }
+
+ /**
+ * The version of Wiki RPC API supported
+ */
+ function wiki_RPCVersion(){
+ return 2;
+ }
+
+
+ /**
+ * Locks or unlocks a given batch of pages
+ *
+ * Give an associative array with two keys: lock and unlock. Both should contain a
+ * list of pages to lock or unlock
+ *
+ * Returns an associative array with the keys locked, lockfail, unlocked and
+ * unlockfail, each containing lists of pages.
+ */
+ function setLocks($set){
+ $locked = array();
+ $lockfail = array();
+ $unlocked = array();
+ $unlockfail = array();
+
+ foreach((array) $set['lock'] as $id){
+ if(checklock($id)){
+ $lockfail[] = $id;
+ }else{
+ lock($id);
+ $locked[] = $id;
+ }
+ }
+
+ foreach((array) $set['unlock'] as $id){
+ if(unlock($id)){
+ $unlocked[] = $id;
+ }else{
+ $unlockfail[] = $id;
+ }
+ }
+
+ return array(
+ 'locked' => $locked,
+ 'lockfail' => $lockfail,
+ 'unlocked' => $unlocked,
+ 'unlockfail' => $unlockfail,
+ );
+ }
+
+ function getAPIVersion(){
+ return DOKU_XMLRPC_API_VERSION;
+ }
+
+ function login($user,$pass){
+ global $conf;
+ global $auth;
+ if(!$conf['useacl']) return 0;
+ if(!$auth) return 0;
+ if($auth->canDo('external')){
+ return $auth->trustExternal($user,$pass,false);
+ }else{
+ return auth_login($user,$pass,false,true);
+ }
+ }
+
+
+}
+
+$server = new dokuwiki_xmlrpc_server();
+
+// vim:ts=4:sw=4:et:enc=utf-8:
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/README b/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/README
new file mode 100644
index 000000000..90bab9578
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/README
@@ -0,0 +1,2 @@
+These icons were taken from the nuvoX KDE icon theme and are GPL licensed
+See http://www.kde-look.org/content/show.php/nuvoX?content=38467
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/acl.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/acl.png
new file mode 100644
index 000000000..96fb4cd56
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/acl.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/config.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/config.png
new file mode 100644
index 000000000..e4d376d85
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/config.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/plugin.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/plugin.png
new file mode 100644
index 000000000..e2823bac7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/plugin.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/popularity.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/popularity.png
new file mode 100644
index 000000000..4e22aaf0d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/popularity.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/revert.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/revert.png
new file mode 100644
index 000000000..002d3a75b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/revert.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/usermanager.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/usermanager.png
new file mode 100644
index 000000000..c5c8dc6d6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/usermanager.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/arrow_down.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/arrow_down.gif
new file mode 100644
index 000000000..ff13b9585
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/arrow_down.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/arrow_up.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/arrow_up.gif
new file mode 100644
index 000000000..d491c18db
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/arrow_up.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/at.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/at.gif
new file mode 100644
index 000000000..8bdf40d54
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/at.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/blank.gif
new file mode 100644
index 000000000..9935f8210
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/blank.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/close.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/close.png
new file mode 100644
index 000000000..e1b498c14
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/close.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/del.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/del.png
new file mode 100644
index 000000000..a3260d718
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/del.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/diff.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/diff.png
new file mode 100644
index 000000000..0b98d79ac
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/diff.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/edit.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/edit.gif
new file mode 100644
index 000000000..a2a23de7b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/edit.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/error.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/error.png
new file mode 100644
index 000000000..8a1ba4c66
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/error.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/bz2.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/bz2.png
new file mode 100644
index 000000000..d48cae038
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/bz2.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/c.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/c.png
new file mode 100644
index 000000000..9446afcb4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/c.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/conf.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/conf.png
new file mode 100644
index 000000000..ddffe6fd1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/conf.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/cpp.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/cpp.png
new file mode 100644
index 000000000..2dc51b16d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/cpp.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/cs.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/cs.png
new file mode 100644
index 000000000..d5db29ba5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/cs.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/css.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/css.png
new file mode 100644
index 000000000..89c1537fd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/css.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/deb.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/deb.png
new file mode 100644
index 000000000..9229d8783
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/deb.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/doc.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/doc.png
new file mode 100644
index 000000000..932567f8a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/doc.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/file.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/file.png
new file mode 100644
index 000000000..817014fa7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/file.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/gif.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/gif.png
new file mode 100644
index 000000000..b4c07a912
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/gif.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/gz.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/gz.png
new file mode 100644
index 000000000..2426bd169
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/gz.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/htm.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/htm.png
new file mode 100644
index 000000000..1a6812185
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/htm.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/html.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/html.png
new file mode 100644
index 000000000..672cbce42
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/html.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/index.php b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/index.php
new file mode 100644
index 000000000..c1e64fe2a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/index.php
@@ -0,0 +1,50 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
+ lang="en" dir="ltr">
+<head>
+ <title>filetype icons</title>
+
+ <style type="text/css">
+ body {
+ background-color: #ccc;
+ font-family: Arial;
+ }
+
+ .box {
+ width: 200px;
+ float:left;
+ padding: 0.5em;
+ margin: 0;
+ }
+
+ .white {
+ background-color: #fff;
+ }
+
+ .black {
+ background-color: #000;
+ }
+ </style>
+
+</head>
+<body>
+
+<div class="white box">
+<?php
+foreach (glob('*.png') as $img) {
+ echo '<img src="'.$img.'" alt="'.$img.'" title="'.$img.'" /> ';
+}
+?>
+</div>
+
+<div class="black box">
+<?php
+foreach (glob('*.png') as $img) {
+ echo '<img src="'.$img.'" alt="'.$img.'" title="'.$img.'" /> ';
+}
+?>
+</div>
+
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/java.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/java.png
new file mode 100644
index 000000000..c5f2fd09f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/java.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/jpeg.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/jpeg.png
new file mode 100644
index 000000000..aa4cc23a5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/jpeg.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/jpg.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/jpg.png
new file mode 100644
index 000000000..1fb6cc1fb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/jpg.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/js.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/js.png
new file mode 100644
index 000000000..0c314eb56
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/js.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/lua.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/lua.png
new file mode 100644
index 000000000..7c07d023f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/lua.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odc.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odc.png
new file mode 100644
index 000000000..47f65c84d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odc.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odf.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odf.png
new file mode 100644
index 000000000..a2fbc5195
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odf.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odg.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odg.png
new file mode 100644
index 000000000..434f18262
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odg.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odi.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odi.png
new file mode 100644
index 000000000..74f6303d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odi.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odp.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odp.png
new file mode 100644
index 000000000..a5c77f845
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odp.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/ods.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/ods.png
new file mode 100644
index 000000000..2ab1273f0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/ods.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odt.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odt.png
new file mode 100644
index 000000000..b0c21fc1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odt.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/pdf.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/pdf.png
new file mode 100644
index 000000000..638066dea
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/pdf.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/php.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/php.png
new file mode 100644
index 000000000..e735f875b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/php.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/pl.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/pl.png
new file mode 100644
index 000000000..6ac381cd7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/pl.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/png.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/png.png
new file mode 100644
index 000000000..f0b5b00ee
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/png.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/ppt.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/ppt.png
new file mode 100644
index 000000000..adaefc602
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/ppt.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/ps.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/ps.png
new file mode 100644
index 000000000..c51c763ab
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/ps.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/py.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/py.png
new file mode 100644
index 000000000..a21b8da49
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/py.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rar.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rar.png
new file mode 100644
index 000000000..a6af4d1ca
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rar.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rb.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rb.png
new file mode 100644
index 000000000..45f448978
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rb.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rpm.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rpm.png
new file mode 100644
index 000000000..22212eafa
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rpm.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rtf.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rtf.png
new file mode 100644
index 000000000..d8bada5fe
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rtf.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/swf.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/swf.png
new file mode 100644
index 000000000..0729ed020
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/swf.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxc.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxc.png
new file mode 100644
index 000000000..419c183c1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxc.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxd.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxd.png
new file mode 100644
index 000000000..5801bb23a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxi.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxi.png
new file mode 100644
index 000000000..2a94290d7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxi.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxw.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxw.png
new file mode 100644
index 000000000..6da97beb3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxw.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/tar.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/tar.png
new file mode 100644
index 000000000..5a2f717fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/tar.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/tgz.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/tgz.png
new file mode 100644
index 000000000..141acf564
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/tgz.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/txt.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/txt.png
new file mode 100644
index 000000000..da20009c6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/txt.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/xls.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/xls.png
new file mode 100644
index 000000000..e8cd58dc0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/xls.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/xml.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/xml.png
new file mode 100644
index 000000000..eb4632397
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/xml.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/zip.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/zip.png
new file mode 100644
index 000000000..999ffbe80
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/zip.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/history.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/history.png
new file mode 100644
index 000000000..ef9e311d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/history.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/images/index.html
new file mode 100644
index 000000000..d614603ac
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/index.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="refresh" content="0; URL=../../" />
+<meta name="robots" content="noindex" />
+<title>nothing here...</title>
+</head>
+<body>
+<!-- this is just here to prevent directory browsing -->
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/info.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/info.png
new file mode 100644
index 000000000..a237c1782
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/info.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki.png
new file mode 100644
index 000000000..73d6f8d39
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/amazon.de.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/amazon.de.gif
new file mode 100644
index 000000000..f52c1c581
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/amazon.de.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/amazon.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/amazon.gif
new file mode 100644
index 000000000..f52c1c581
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/amazon.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/amazon.uk.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/amazon.uk.gif
new file mode 100644
index 000000000..f52c1c581
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/amazon.uk.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/coral.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/coral.gif
new file mode 100644
index 000000000..0f9f67587
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/coral.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/doku.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/doku.gif
new file mode 100644
index 000000000..7dc4248e8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/doku.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/dokubug.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/dokubug.gif
new file mode 100644
index 000000000..3432b8d57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/dokubug.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/google.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/google.gif
new file mode 100644
index 000000000..fb39f6152
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/google.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/meatball.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/meatball.gif
new file mode 100644
index 000000000..7ac545436
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/meatball.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/phpfn.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/phpfn.gif
new file mode 100644
index 000000000..638d4c450
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/phpfn.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/sb.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/sb.gif
new file mode 100644
index 000000000..e272a29b7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/sb.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wiki.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wiki.gif
new file mode 100644
index 000000000..e8dc5d274
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wiki.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wp.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wp.gif
new file mode 100644
index 000000000..ca853b8c9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wp.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpde.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpde.gif
new file mode 100644
index 000000000..ca853b8c9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpde.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpes.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpes.gif
new file mode 100644
index 000000000..ca853b8c9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpes.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpfr.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpfr.gif
new file mode 100644
index 000000000..ca853b8c9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpfr.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpjp.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpjp.gif
new file mode 100644
index 000000000..ca853b8c9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpjp.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpmeta.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpmeta.gif
new file mode 100644
index 000000000..ca853b8c9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpmeta.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wppl.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wppl.gif
new file mode 100644
index 000000000..ca853b8c9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wppl.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/larger.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/larger.gif
new file mode 100644
index 000000000..e137c92fa
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/larger.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-nc-nd.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-nc-nd.png
new file mode 100644
index 000000000..49f272f82
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-nc-nd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-nc-sa.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-nc-sa.png
new file mode 100644
index 000000000..0f2a0f107
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-nc-sa.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-nc.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-nc.png
new file mode 100644
index 000000000..5f9821470
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-nc.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-nd.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-nd.png
new file mode 100644
index 000000000..8f317035e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-nd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-sa.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-sa.png
new file mode 100644
index 000000000..f0a944e0b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-sa.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by.png
new file mode 100644
index 000000000..822491edb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc.png
new file mode 100644
index 000000000..a66f4d1a0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/gnufdl.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/gnufdl.png
new file mode 100644
index 000000000..1371aba88
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/gnufdl.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/publicdomain.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/publicdomain.png
new file mode 100644
index 000000000..cedc39c62
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/publicdomain.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-nc-nd.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-nc-nd.png
new file mode 100644
index 000000000..b27ead2f6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-nc-nd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-nc-sa.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-nc-sa.png
new file mode 100644
index 000000000..1c54f994d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-nc-sa.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-nc.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-nc.png
new file mode 100644
index 000000000..33c7b1fa4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-nc.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-nd.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-nd.png
new file mode 100644
index 000000000..52073c043
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-nd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-sa.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-sa.png
new file mode 100644
index 000000000..0b1880f91
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-sa.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by.png
new file mode 100644
index 000000000..99d8efd35
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc.png
new file mode 100644
index 000000000..adfa085bd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/gnufdl.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/gnufdl.png
new file mode 100644
index 000000000..cb815ac13
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/gnufdl.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/publicdomain.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/publicdomain.png
new file mode 100644
index 000000000..f78e73d02
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/publicdomain.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/list-minus.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/list-minus.gif
new file mode 100644
index 000000000..36902f159
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/list-minus.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/list-plus.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/list-plus.gif
new file mode 100644
index 000000000..adc3fac8a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/list-plus.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/loading.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/loading.gif
new file mode 100644
index 000000000..240bd88c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/loading.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/magnifier.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/magnifier.png
new file mode 100644
index 000000000..cf3d97f75
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/magnifier.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/minus.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/minus.gif
new file mode 100644
index 000000000..499a2e2aa
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/minus.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/multiupload.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/multiupload.png
new file mode 100644
index 000000000..1e8efa063
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/multiupload.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/notify.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/notify.png
new file mode 100644
index 000000000..6e0015df4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/notify.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/ns.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/ns.png
new file mode 100644
index 000000000..da3c2a2d7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/ns.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/page.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/page.png
new file mode 100644
index 000000000..03ddd799f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/page.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/pencil.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/pencil.png
new file mode 100644
index 000000000..0bfecd50e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/pencil.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/plus.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/plus.gif
new file mode 100644
index 000000000..9306686d8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/plus.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smaller.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smaller.gif
new file mode 100644
index 000000000..66d3a51e7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smaller.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/delete.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/delete.gif
new file mode 100644
index 000000000..d668348b9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/delete.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/fixme.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/fixme.gif
new file mode 100644
index 000000000..b66ea99d6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/fixme.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_arrow.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_arrow.gif
new file mode 100644
index 000000000..2880055cc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_arrow.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_biggrin.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_biggrin.gif
new file mode 100644
index 000000000..d3527723c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_biggrin.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_confused.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_confused.gif
new file mode 100644
index 000000000..0c49e0698
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_confused.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_cool.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_cool.gif
new file mode 100644
index 000000000..cead0306c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_cool.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_cry.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_cry.gif
new file mode 100644
index 000000000..7d54b1f99
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_cry.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_doubt.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_doubt.gif
new file mode 100644
index 000000000..fd7903b19
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_doubt.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_doubt2.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_doubt2.gif
new file mode 100644
index 000000000..eb4b70b66
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_doubt2.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_eek.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_eek.gif
new file mode 100644
index 000000000..5d3978106
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_eek.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_evil.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_evil.gif
new file mode 100644
index 000000000..ab1aa8e12
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_evil.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_exclaim.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_exclaim.gif
new file mode 100644
index 000000000..6e50e2eec
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_exclaim.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_frown.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_frown.gif
new file mode 100644
index 000000000..d2ac78c04
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_frown.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_fun.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_fun.gif
new file mode 100644
index 000000000..a8bb8a303
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_fun.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_idea.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_idea.gif
new file mode 100644
index 000000000..a40ae0d7e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_idea.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_kaddi.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_kaddi.gif
new file mode 100644
index 000000000..1410f7f1e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_kaddi.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_lol.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_lol.gif
new file mode 100644
index 000000000..374ba150f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_lol.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_mrgreen.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_mrgreen.gif
new file mode 100644
index 000000000..b54cd0f94
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_mrgreen.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_neutral.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_neutral.gif
new file mode 100644
index 000000000..4f311567e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_neutral.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_question.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_question.gif
new file mode 100644
index 000000000..9d072265b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_question.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_razz.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_razz.gif
new file mode 100644
index 000000000..29da2a2fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_razz.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_redface.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_redface.gif
new file mode 100644
index 000000000..ad7628320
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_redface.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_rolleyes.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_rolleyes.gif
new file mode 100644
index 000000000..d7f5f2f4b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_rolleyes.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_sad.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_sad.gif
new file mode 100644
index 000000000..d2ac78c04
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_sad.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_silenced.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_silenced.gif
new file mode 100644
index 000000000..448399b2b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_silenced.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_smile.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_smile.gif
new file mode 100644
index 000000000..7b1f6d304
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_smile.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_smile2.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_smile2.gif
new file mode 100644
index 000000000..769639d32
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_smile2.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_surprised.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_surprised.gif
new file mode 100644
index 000000000..cb2142431
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_surprised.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_twisted.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_twisted.gif
new file mode 100644
index 000000000..502fe247e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_twisted.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_wink.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_wink.gif
new file mode 100644
index 000000000..d14828804
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_wink.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/success.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/success.png
new file mode 100644
index 000000000..a5ae9f11b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/success.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/throbber.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/throbber.gif
new file mode 100644
index 000000000..d04bd3949
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/throbber.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/bold.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/bold.png
new file mode 100644
index 000000000..7ebe99ee9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/bold.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/chars.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/chars.png
new file mode 100644
index 000000000..3f3396aeb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/chars.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h.png
new file mode 100644
index 000000000..aae052462
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h1.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h1.png
new file mode 100644
index 000000000..93dae935f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h1.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h2.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h2.png
new file mode 100644
index 000000000..f0eee3bd0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h2.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h3.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h3.png
new file mode 100644
index 000000000..8cfd4c077
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h3.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h4.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h4.png
new file mode 100644
index 000000000..7b8f51a1b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h4.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h5.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h5.png
new file mode 100644
index 000000000..44b00d9c8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h5.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hequal.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hequal.png
new file mode 100644
index 000000000..8fc6b0d75
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hequal.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hminus.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hminus.png
new file mode 100644
index 000000000..f9d67adcb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hminus.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hplus.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hplus.png
new file mode 100644
index 000000000..66f3d5e33
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hplus.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hr.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hr.png
new file mode 100644
index 000000000..f86a8ec94
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hr.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/image.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/image.png
new file mode 100644
index 000000000..1aab5d7de
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/image.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/italic.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/italic.png
new file mode 100644
index 000000000..324e7c036
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/italic.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/link.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/link.png
new file mode 100644
index 000000000..41e52c6ab
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/linkextern.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/linkextern.png
new file mode 100644
index 000000000..75afd3dc2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/linkextern.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/mono.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/mono.png
new file mode 100644
index 000000000..178cec9f2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/mono.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/ol.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/ol.png
new file mode 100644
index 000000000..3162fa21d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/ol.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/sig.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/sig.png
new file mode 100644
index 000000000..ef997b7cd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/sig.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/smiley.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/smiley.png
new file mode 100644
index 000000000..e92845cb4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/smiley.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/strike.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/strike.png
new file mode 100644
index 000000000..203aacc2b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/strike.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/ul.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/ul.png
new file mode 100644
index 000000000..471171db4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/ul.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/underline.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/underline.png
new file mode 100644
index 000000000..bf9665a68
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/underline.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/trash.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/trash.png
new file mode 100644
index 000000000..ebad933c8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/trash.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/up.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/up.png
new file mode 100644
index 000000000..557d5e6a9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/up.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/wrap.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/wrap.gif
new file mode 100644
index 000000000..f2253e4a2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/wrap.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/index.html
new file mode 100644
index 000000000..8cb33512e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/index.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="refresh" content="0; URL=../" />
+<meta name="robots" content="noindex" />
+<title>nothing here...</title>
+</head>
+<body>
+<!-- this is just here to prevent directory browsing -->
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/admin.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/admin.php
new file mode 100644
index 000000000..34149ea05
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/admin.php
@@ -0,0 +1,809 @@
+<?php
+/**
+ * ACL administration functions
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Anika Henke <anika@selfthinker.org> (concepts)
+ * @author Frank Schubert <frank@schokilade.de> (old version)
+ */
+// must be run within Dokuwiki
+if(!defined('DOKU_INC')) die();
+
+if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
+require_once(DOKU_PLUGIN.'admin.php');
+
+/**
+ * All DokuWiki plugins to extend the admin function
+ * need to inherit from this class
+ */
+class admin_plugin_acl extends DokuWiki_Admin_Plugin {
+ var $acl = null;
+ var $ns = null;
+ var $who = '';
+ var $usersgroups = array();
+ var $specials = array();
+
+ /**
+ * return some info
+ */
+ function getInfo(){
+ return array(
+ 'author' => 'Andreas Gohr',
+ 'email' => 'andi@splitbrain.org',
+ 'date' => '2010-01-17',
+ 'name' => 'ACL Manager',
+ 'desc' => 'Manage Page Access Control Lists',
+ 'url' => 'http://dokuwiki.org/plugin:acl',
+ );
+ }
+
+ /**
+ * return prompt for admin menu
+ */
+ function getMenuText($language) {
+ return $this->getLang('admin_acl');
+ }
+
+ /**
+ * return sort order for position in admin menu
+ */
+ function getMenuSort() {
+ return 1;
+ }
+
+ /**
+ * handle user request
+ *
+ * Initializes internal vars and handles modifications
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function handle() {
+ global $AUTH_ACL;
+ global $ID;
+ global $auth;
+ // fresh 1:1 copy without replacements
+ $AUTH_ACL = $this->load_acl_config(false);
+ // namespace given?
+ if($_REQUEST['ns'] == '*'){
+ $this->ns = '*';
+ }else{
+ $this->ns = cleanID($_REQUEST['ns']);
+ }
+
+ // user or group choosen?
+ $who = trim($_REQUEST['acl_w']);
+ if($_REQUEST['acl_t'] == '__g__' && $who){
+ $this->who = '@'.ltrim($auth->cleanGroup($who),'@');
+ }elseif($_REQUEST['acl_t'] == '__u__' && $who){
+ $this->who = ltrim($auth->cleanUser($who),'@');
+ }elseif($_REQUEST['acl_t'] &&
+ $_REQUEST['acl_t'] != '__u__' &&
+ $_REQUEST['acl_t'] != '__g__'){
+ $this->who = $_REQUEST['acl_t'];
+ }elseif($who){
+ $this->who = $who;
+ }
+
+ // handle modifications
+ if(isset($_REQUEST['cmd']) && checkSecurityToken()){
+
+ //error_log("dokuwiki:acl:cms!!!");
+ // scope for modifications
+ if($this->ns){
+ if($this->ns == '*'){
+ $scope = '*';
+ }else{
+ $scope = $this->ns.':*';
+ }
+ }else{
+ $scope = $ID;
+ }
+
+ if(isset($_REQUEST['cmd']['save']) && $scope && $this->who && isset($_REQUEST['acl'])){
+ //error_log("dokuwiki:acl:save!!!");
+ // handle additions or single modifications
+ $this->_acl_del($scope, $this->who);
+ $this->_acl_add($scope, $this->who, (int) $_REQUEST['acl']);
+ }elseif(isset($_REQUEST['cmd']['del']) && $scope && $this->who){
+ //error_log("dokuwiki:acl:delete!!!");
+ // handle single deletions
+ $this->_acl_del($scope, $this->who);
+ }elseif(isset($_REQUEST['cmd']['update'])){
+ //error_log("dokuwiki:acl:update!!!");
+ // handle update of the whole file
+ foreach((array) $_REQUEST['del'] as $where => $names){
+ // remove all rules marked for deletion
+ foreach($names as $who) {
+ unset($_REQUEST['acl'][$where][$who]);
+ //error_log("dokuwiki:acl:where_who:".$where.":".$who);
+ }
+ }
+ // prepare lines
+ $lines = array();
+ // keep header
+ foreach($AUTH_ACL as $line){
+ if($line{0} == '#'){
+ $lines[] = $line."\n";
+ }else{
+ $lines[] = $line."\n";
+ }
+ }
+ // re-add all rules
+ foreach((array) $_REQUEST['acl'] as $where => $opt){
+ foreach($opt as $who => $perm){
+ //error_log("dokuwiki:acl:where_acl:".$where.":".$who);
+ $who = auth_nameencode($who,true);
+ $lines[] = "$where\t$who\t$perm\n";
+ }
+ }
+ // save it
+ $AUTH_ACL = $this->save_acl_config(join('',$lines));
+
+ }
+
+ $AUTH_ACL = $this->load_acl_config(false);
+ }
+
+ // initialize ACL array
+ $this->_init_acl_config();
+ }
+
+ /**
+ * ACL Output function
+ *
+ * print a table with all significant permissions for the
+ * current id
+ *
+ * @author Frank Schubert <frank@schokilade.de>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function html() {
+ global $ID;
+
+ echo '<div id="acl_manager">'.NL;
+ echo '<h1>'.$this->getLang('admin_acl').'</h1>'.NL;
+ echo '<div class="level1">'.NL;
+
+ echo '<div id="acl__tree">'.NL;
+ $this->_html_explorer($_REQUEST['ns']);
+ echo '</div>'.NL;
+
+ echo '<div id="acl__detail">'.NL;
+ $this->_html_detail();
+ echo '</div>'.NL;
+ echo '</div>'.NL;
+
+ echo '<div class="clearer"></div>';
+ echo '<h2>'.$this->getLang('current').'</h2>'.NL;
+ echo '<div class="level2">'.NL;
+ $this->_html_table();
+ echo '</div>'.NL;
+
+ echo '<div class="footnotes"><div class="fn">'.NL;
+ echo '<sup><a id="fn__1" class="fn_bot" name="fn__1" href="#fnt__1">1)</a></sup>'.NL;
+ echo $this->getLang('p_include');
+ echo '</div></div>';
+
+ echo '</div>'.NL;
+ }
+
+ /**
+ * returns array with set options for building links
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _get_opts($addopts=null){
+ global $ID;
+ $opts = array(
+ 'do'=>'admin',
+ 'dokupage'=>'acl',
+ );
+ if($this->ns) $opts['ns'] = $this->ns;
+ if($this->who) $opts['acl_w'] = $this->who;
+
+ if(is_null($addopts)) return $opts;
+ return array_merge($opts, $addopts);
+ }
+
+ /**
+ * Display a tree menu to select a page or namespace
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _html_explorer(){
+ require_once(DOKU_INC.'inc/search.php');
+ global $conf;
+ global $ID;
+ global $lang;
+
+ $dir = $conf['datadir'];
+ $ns = $this->ns;
+ if(empty($ns)){
+ $ns = dirname(str_replace(':','/',$ID));
+ if($ns == '.') $ns ='';
+ }elseif($ns == '*'){
+ $ns ='';
+ }
+ $ns = utf8_encodeFN(str_replace(':','/',$ns));
+
+ $data = $this->_get_tree($ns);
+
+ // wrap a list with the root level around the other namespaces
+ $item = array( 'level' => 0, 'id' => '*', 'type' => 'd',
+ 'open' =>'true', 'label' => '['.$lang['mediaroot'].']');
+
+ echo '<ul class="acltree">';
+ echo $this->_html_li_acl($item);
+ echo '<div class="li">';
+ echo $this->_html_list_acl($item);
+ echo '</div>';
+ echo html_buildlist($data,'acl',
+ array($this,'_html_list_acl'),
+ array($this,'_html_li_acl'));
+ echo '</li>';
+ echo '</ul>';
+
+ }
+
+ /**
+ * get a combined list of media and page files
+ *
+ * @param string $folder an already converted filesystem folder of the current namespace
+ * @param string $limit limit the search to this folder
+ */
+ function _get_tree($folder,$limit=''){
+ global $conf;
+
+ // read tree structure from pages and media
+ $data = array();
+ search($data,$conf['datadir'],'search_index',array('ns' => $folder),$limit);
+ $media = array();
+ search($media,$conf['mediadir'],'search_index',array('ns' => $folder, 'nofiles' => true),$limit);
+ $data = array_merge($data,$media);
+ unset($media);
+
+ // combine by sorting and removing duplicates
+ usort($data,array($this,'_tree_sort'));
+ $count = count($data);
+ if($count>0) for($i=1; $i<$count; $i++){
+ if($data[$i]['type'] == 'f') break; // namespaces come first, we're done
+ if($data[$i-1]['id'] == $data[$i]['id']) unset($data[$i]);
+ }
+ return $data;
+ }
+
+ /**
+ * usort callback
+ *
+ * Sorts the combined trees of media and page files
+ */
+ function _tree_sort($a,$b){
+ if($a['type'] == 'd' && $b['type'] == 'f'){
+ return -1;
+ }elseif($a['type'] == 'f' && $b['type'] == 'd'){
+ return 1;
+ }else{
+ return strcmp($a['id'],$b['id']);
+ }
+ }
+
+ /**
+ * Display the current ACL for selected where/who combination with
+ * selectors and modification form
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _html_detail(){
+ global $conf;
+ global $ID;
+
+ echo '<form action="'.wl().'" method="post" accept-charset="utf-8"><div class="no">'.NL;
+
+ echo '<div id="acl__user">';
+ echo $this->getLang('acl_perms').' ';
+ $inl = $this->_html_select();
+ echo '<input type="text" name="acl_w" class="edit" value="'.(($inl)?'':hsc(ltrim($this->who,'@'))).'" />'.NL;
+ echo '<input type="submit" value="'.$this->getLang('btn_select').'" class="button" />'.NL;
+ echo '</div>'.NL;
+
+ echo '<div id="acl__info">';
+ $this->_html_info();
+ echo '</div>';
+
+ echo '<input type="hidden" name="ns" value="'.hsc($this->ns).'" />'.NL;
+ echo '<input type="hidden" name="id" value="'.hsc($ID).'" />'.NL;
+ echo '<input type="hidden" name="do" value="admin" />'.NL;
+ echo '<input type="hidden" name="dokupage" value="acl" />'.NL;
+ echo '<input type="hidden" name="sectok" value="'.getSecurityToken().'" />'.NL;
+ echo '</div></form>'.NL;
+ }
+
+ /**
+ * Print infos and editor
+ */
+ function _html_info(){
+ global $ID;
+
+ if($this->who){
+ $current = $this->_get_exact_perm();
+
+ // explain current permissions
+ $this->_html_explain($current);
+ // load editor
+ $this->_html_acleditor($current);
+ }else{
+ echo '<p>';
+ if($this->ns){
+ printf($this->getLang('p_choose_ns'),hsc($this->ns));
+ }else{
+ printf($this->getLang('p_choose_id'),hsc($ID));
+ }
+ echo '</p>';
+
+ echo $this->locale_xhtml('help');
+ }
+ }
+
+ /**
+ * Display the ACL editor
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _html_acleditor($current){
+ global $lang;
+
+ echo '<fieldset>';
+ if(is_null($current)){
+ echo '<legend>'.$this->getLang('acl_new').'</legend>';
+ }else{
+ echo '<legend>'.$this->getLang('acl_mod').'</legend>';
+ }
+
+
+ echo $this->_html_checkboxes($current,empty($this->ns),'acl');
+
+ if(is_null($current)){
+ echo '<input type="submit" name="cmd[save]" class="button" value="'.$lang['btn_save'].'" />'.NL;
+ }else{
+ echo '<input type="submit" name="cmd[save]" class="button" value="'.$lang['btn_update'].'" />'.NL;
+ echo '<input type="submit" name="cmd[del]" class="button" value="'.$lang['btn_delete'].'" />'.NL;
+ }
+
+ echo '</fieldset>';
+ }
+
+ /**
+ * Explain the currently set permissions in plain english/$lang
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _html_explain($current){
+ global $ID;
+ global $auth;
+
+ $who = $this->who;
+ $ns = $this->ns;
+
+ // prepare where to check
+ if($ns){
+ if($ns == '*'){
+ $check='*';
+ }else{
+ $check=$ns.':*';
+ }
+ }else{
+ $check = $ID;
+ }
+
+ // prepare who to check
+ if($who{0} == '@'){
+ $user = '';
+ $groups = array(ltrim($who,'@'));
+ }else{
+ $user = auth_nameencode($who);
+ $info = $auth->getUserData($user);
+ if($info === false){
+ $groups = array();
+ }else{
+ $groups = $info['grps'];
+ }
+ }
+
+ // check the permissions
+ $perm = auth_aclcheck($check,$user,$groups);
+
+ // build array of named permissions
+ $names = array();
+ if($perm){
+ if($ns){
+ if($perm >= AUTH_DELETE) $names[] = $this->getLang('acl_perm16');
+ if($perm >= AUTH_UPLOAD) $names[] = $this->getLang('acl_perm8');
+ if($perm >= AUTH_CREATE) $names[] = $this->getLang('acl_perm4');
+ }
+ if($perm >= AUTH_EDIT) $names[] = $this->getLang('acl_perm2');
+ if($perm >= AUTH_READ) $names[] = $this->getLang('acl_perm1');
+ $names = array_reverse($names);
+ }else{
+ $names[] = $this->getLang('acl_perm0');
+ }
+
+ // print permission explanation
+ echo '<p>';
+ if($user){
+ if($ns){
+ printf($this->getLang('p_user_ns'),hsc($who),hsc($ns),join(', ',$names));
+ }else{
+ printf($this->getLang('p_user_id'),hsc($who),hsc($ID),join(', ',$names));
+ }
+ }else{
+ if($ns){
+ printf($this->getLang('p_group_ns'),hsc(ltrim($who,'@')),hsc($ns),join(', ',$names));
+ }else{
+ printf($this->getLang('p_group_id'),hsc(ltrim($who,'@')),hsc($ID),join(', ',$names));
+ }
+ }
+ echo '</p>';
+
+ // add note if admin
+ if($perm == AUTH_ADMIN){
+ echo '<p>'.$this->getLang('p_isadmin').'</p>';
+ }elseif(is_null($current)){
+ echo '<p>'.$this->getLang('p_inherited').'</p>';
+ }
+ }
+
+
+ /**
+ * Item formatter for the tree view
+ *
+ * User function for html_buildlist()
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _html_list_acl($item){
+ global $ID;
+ $ret = '';
+ // what to display
+ if($item['label']){
+ $base = $item['label'];
+ }else{
+ $base = ':'.$item['id'];
+ $base = substr($base,strrpos($base,':')+1);
+ }
+
+ // highlight?
+ if( ($item['type']=='d' && $item['id'] == $this->ns) ||
+ ($item['type']!='d' && $item['id'] == $ID)) $cl = ' cur';
+
+ // namespace or page?
+ if($item['type']=='d'){
+ if($item['open']){
+ $img = DOKU_BASE.'lib/images/minus.gif';
+ $alt = '&minus;';
+ }else{
+ $img = DOKU_BASE.'lib/images/plus.gif';
+ $alt = '+';
+ }
+ $ret .= '<img src="'.$img.'" alt="'.$alt.'" />';
+ $ret .= '<a href="'.wl('',$this->_get_opts(array('ns'=>$item['id'],'sectok'=>getSecurityToken()))).'" class="idx_dir'.$cl.'">';
+ $ret .= $base;
+ $ret .= '</a>';
+ }else{
+ $ret .= '<a href="'.wl('',$this->_get_opts(array('id'=>$item['id'],'ns'=>'','sectok'=>getSecurityToken()))).'" class="wikilink1'.$cl.'">';
+ $ret .= noNS($item['id']);
+ $ret .= '</a>';
+ }
+ return $ret;
+ }
+
+
+ function _html_li_acl($item){
+ return '<li class="level'.$item['level'].'">';
+ }
+
+
+ /**
+ * Get current ACL settings as multidim array
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _init_acl_config(){
+ global $AUTH_ACL;
+ global $conf;
+ $acl_config=array();
+ $usersgroups = array();
+
+ // get special users and groups
+ $this->specials[] = '@ALL';
+ $this->specials[] = '@'.$conf['defaultgroup'];
+ if($conf['manager'] != '!!not set!!'){
+ $this->specials = array_merge($this->specials,
+ array_map('trim',
+ explode(',',$conf['manager'])));
+ }
+ $this->specials = array_filter($this->specials);
+ $this->specials = array_unique($this->specials);
+ sort($this->specials);
+
+ foreach($AUTH_ACL as $line){
+ $line = trim(preg_replace('/#.*$/','',$line)); //ignore comments
+ if(!$line) continue;
+
+ $acl = preg_split('/\s+/',$line);
+ //0 is pagename, 1 is user, 2 is acl
+
+ $acl[1] = rawurldecode($acl[1]);
+ $acl_config[$acl[0]][$acl[1]] = $acl[2];
+
+ // store non-special users and groups for later selection dialog
+ $ug = $acl[1];
+ if(in_array($ug,$this->specials)) continue;
+ $usersgroups[] = $ug;
+ }
+
+ $usersgroups = array_unique($usersgroups);
+ sort($usersgroups);
+ ksort($acl_config);
+
+ $this->acl = $acl_config;
+ $this->usersgroups = $usersgroups;
+ }
+
+ /**
+ * Display all currently set permissions in a table
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _html_table(){
+ global $lang;
+ global $ID;
+
+ echo '<form action="'.wl().'" method="post" accept-charset="utf-8"><div class="no">'.NL;
+ if($this->ns){
+ echo '<input type="hidden" name="ns" value="'.hsc($this->ns).'" />'.NL;
+ }else{
+ echo '<input type="hidden" name="id" value="'.hsc($ID).'" />'.NL;
+ }
+ echo '<input type="hidden" name="acl_w" value="'.hsc($this->who).'" />'.NL;
+ echo '<input type="hidden" name="do" value="admin" />'.NL;
+ echo '<input type="hidden" name="dokupage" value="acl" />'.NL;
+ echo '<input type="hidden" name="sectok" value="'.getSecurityToken().'" />'.NL;
+ echo '<table class="inline">';
+ echo '<tr>';
+ echo '<th>'.$this->getLang('where').'</th>';
+ echo '<th>'.$this->getLang('who').'</th>';
+ echo '<th>'.$this->getLang('perm').'<sup><a id="fnt__1" class="fn_top" name="fnt__1" href="#fn__1">1)</a></sup></th>';
+ echo '<th>'.$lang['btn_delete'].'</th>';
+ echo '</tr>';
+ foreach($this->acl as $where => $set){
+ foreach($set as $who => $perm){
+ echo '<tr>';
+ echo '<td>';
+ if(substr($where,-1) == '*'){
+ echo '<span class="aclns">'.hsc($where).'</span>';
+ $ispage = false;
+ }else{
+ echo '<span class="aclpage">'.hsc($where).'</span>';
+ $ispage = true;
+ }
+ echo '</td>';
+
+ echo '<td>';
+ if($who{0} == '@'){
+ echo '<span class="aclgroup">'.hsc($who).'</span>';
+ }else{
+ echo '<span class="acluser">'.hsc($who).'</span>';
+ }
+ echo '</td>';
+
+ echo '<td>';
+ echo $this->_html_checkboxes($perm,$ispage,'acl['.$where.']['.$who.']');
+ echo '</td>';
+
+ echo '<td align="center">';
+ echo '<input type="checkbox" name="del['.hsc($where).'][]" value="'.hsc($who).'" />';
+ echo '</td>';
+ echo '</tr>';
+ }
+ }
+
+ echo '<tr>';
+ echo '<th align="right" colspan="4">';
+ echo '<input type="submit" value="'.$lang['btn_update'].'" name="cmd[update]" class="button" />';
+ echo '</th>';
+ echo '</tr>';
+ echo '</table>';
+ echo '</div></form>'.NL;
+ }
+
+
+ /**
+ * Returns the permission which were set for exactly the given user/group
+ * and page/namespace. Returns null if no exact match is available
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _get_exact_perm(){
+ global $ID;
+ if($this->ns){
+ if($this->ns == '*'){
+ $check = '*';
+ }else{
+ $check = $this->ns.':*';
+ }
+ }else{
+ $check = $ID;
+ }
+
+ if(isset($this->acl[$check][$this->who])){
+ return $this->acl[$check][$this->who];
+ }else{
+ return null;
+ }
+ }
+
+ function load_acl_config($full) {
+ global $auth;
+ if($auth->cando['getACL']) {
+ $acl = $auth->getACL();
+ } else {
+ $acl = file(DOKU_CONF.'acl.auth.php');
+ }
+ if ($full) return join("\n", $acl)."\n";
+ return $acl;
+ }
+ function save_acl_config($newconfig) {
+ global $auth;
+ if($auth->cando['getACL']) {
+ $auth->setACL($newconfig);
+ return true;
+ } else {
+ return io_saveFile(DOKU_CONF.'acl.auth.php', $newconfig);
+ }
+
+ }
+
+ /**
+ * adds new acl-entry to conf/acl.auth.php
+ *
+ * @author Frank Schubert <frank@schokilade.de>
+ */
+ function _acl_add($acl_scope, $acl_user, $acl_level){
+ $acl_config = $this->load_acl_config(true);
+ $acl_user = auth_nameencode($acl_user,true);
+
+ // max level for pagenames is edit
+ if(strpos($acl_scope,'*') === false) {
+ if($acl_level > AUTH_EDIT) $acl_level = AUTH_EDIT;
+ }
+
+
+ $new_acl = "$acl_scope\t$acl_user\t$acl_level\n";
+
+ $new_config = $acl_config.$new_acl;
+ return $this->save_acl_config($new_config);
+ }
+
+ /**
+ * remove acl-entry from conf/acl.auth.php
+ *
+ * @author Frank Schubert <frank@schokilade.de>
+ */
+ function _acl_del($acl_scope, $acl_user){
+ $acl_config = $this->load_acl_config(false);
+ $acl_user = auth_nameencode($acl_user,true);
+
+ $acl_pattern = '^'.preg_quote($acl_scope,'/').'\s+'.$acl_user.'\s+[0-8].*$';
+
+ // save all non!-matching
+ $new_config = preg_grep("/$acl_pattern/", $acl_config, PREG_GREP_INVERT);
+
+ return $this->save_acl_config(join("\n",$new_config)."\n");
+ }
+
+ /**
+ * print the permission radio boxes
+ *
+ * @author Frank Schubert <frank@schokilade.de>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _html_checkboxes($setperm,$ispage,$name){
+ global $lang;
+
+ static $label = 0; //number labels
+ $ret = '';
+
+ if($ispage && $setperm > AUTH_EDIT) $perm = AUTH_EDIT;
+
+ foreach(array(AUTH_NONE,AUTH_READ,AUTH_EDIT,AUTH_CREATE,AUTH_UPLOAD,AUTH_DELETE) as $perm){
+ $label += 1;
+
+ //general checkbox attributes
+ $atts = array( 'type' => 'radio',
+ 'id' => 'pbox'.$label,
+ 'name' => $name,
+ 'value' => $perm );
+ //dynamic attributes
+ if(!is_null($setperm) && $setperm == $perm) $atts['checked'] = 'checked';
+ if($ispage && $perm > AUTH_EDIT){
+ $atts['disabled'] = 'disabled';
+ $class = ' class="disabled"';
+ }else{
+ $class = '';
+ }
+
+ //build code
+ $ret .= '<label for="pbox'.$label.'" title="'.$this->getLang('acl_perm'.$perm).'"'.$class.'>';
+ $ret .= '<input '.html_attbuild($atts).' />&nbsp;';
+ $ret .= $this->getLang('acl_perm'.$perm);
+ $ret .= '</label>'.NL;
+ }
+ return $ret;
+ }
+
+ /**
+ * Print a user/group selector (reusing already used users and groups)
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _html_select(){
+ global $conf;
+ $inlist = false;
+
+ if($this->who &&
+ !in_array($this->who,$this->usersgroups) &&
+ !in_array($this->who,$this->specials)){
+
+ if($this->who{0} == '@'){
+ $gsel = ' selected="selected"';
+ }else{
+ $usel = ' selected="selected"';
+ }
+ }else{
+ $usel = '';
+ $gsel = '';
+ $inlist = true;
+ }
+
+
+ echo '<select name="acl_t" class="edit">'.NL;
+ echo ' <option value="__g__" class="aclgroup"'.$gsel.'>'.$this->getLang('acl_group').':</option>'.NL;
+ echo ' <option value="__u__" class="acluser"'.$usel.'>'.$this->getLang('acl_user').':</option>'.NL;
+ echo ' <optgroup label="&nbsp;">'.NL;
+ foreach($this->specials as $ug){
+ if($ug == $this->who){
+ $sel = ' selected="selected"';
+ $inlist = true;
+ }else{
+ $sel = '';
+ }
+
+ if($ug{0} == '@'){
+ echo ' <option value="'.hsc($ug).'" class="aclgroup"'.$sel.'>'.hsc($ug).'</option>'.NL;
+ }else{
+ echo ' <option value="'.hsc($ug).'" class="acluser"'.$sel.'>'.hsc($ug).'</option>'.NL;
+ }
+ }
+ echo ' </optgroup>'.NL;
+ echo ' <optgroup label="&nbsp;">'.NL;
+ foreach($this->usersgroups as $ug){
+ if($ug == $this->who){
+ $sel = ' selected="selected"';
+ $inlist = true;
+ }else{
+ $sel = '';
+ }
+
+ if($ug{0} == '@'){
+ echo ' <option value="'.hsc($ug).'" class="aclgroup"'.$sel.'>'.hsc($ug).'</option>'.NL;
+ }else{
+ echo ' <option value="'.hsc($ug).'" class="acluser"'.$sel.'>'.hsc($ug).'</option>'.NL;
+ }
+ }
+ echo ' </optgroup>'.NL;
+ echo '</select>'.NL;
+ return $inlist;
+ }
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/ajax.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/ajax.php
new file mode 100644
index 000000000..d3e88d932
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/ajax.php
@@ -0,0 +1,62 @@
+<?php
+/**
+ * AJAX call handler for ACL plugin
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+//fix for Opera XMLHttpRequests
+if(!count($_POST) && $HTTP_RAW_POST_DATA){
+ parse_str($HTTP_RAW_POST_DATA, $_POST);
+}
+
+if(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/../../../');
+require_once(DOKU_INC.'inc/init.php');
+require_once(DOKU_INC.'inc/common.php');
+require_once(DOKU_INC.'inc/pageutils.php');
+require_once(DOKU_INC.'inc/auth.php');
+//close session
+session_write_close();
+
+if(!auth_isadmin()) die('for admins only');
+if(!checkSecurityToken()) die('CRSF Attack');
+
+$ID = getID();
+
+require_once(DOKU_INC.'inc/pluginutils.php');
+require_once(DOKU_INC.'inc/html.php');
+$acl = plugin_load('admin','acl');
+$acl->handle();
+
+$ajax = $_REQUEST['ajax'];
+header('Content-Type: text/html; charset=utf-8');
+
+if($ajax == 'info'){
+ $acl->_html_info();
+}elseif($ajax == 'tree'){
+ require_once(DOKU_INC.'inc/search.php');
+ global $conf;
+ global $ID;
+
+ $dir = $conf['datadir'];
+ $ns = $_REQUEST['ns'];
+ if($ns == '*'){
+ $ns ='';
+ }
+ $ns = cleanID($ns);
+ $lvl = count(explode(':',$ns));
+ $ns = utf8_encodeFN(str_replace(':','/',$ns));
+
+ $data = $acl->_get_tree($ns,$ns);
+
+ foreach($data as $item){
+ $item['level'] = $lvl+1;
+ echo $acl->_html_li_acl($item);
+ echo '<div class="li">';
+ echo $acl->_html_list_acl($item);
+ echo '</div>';
+ echo '</li>';
+ }
+}
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/af/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/af/lang.php
new file mode 100644
index 000000000..04d9b0acf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/af/lang.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * Afrikaans language file
+ *
+ */
+$lang['page'] = 'Bladsy';
+$lang['acl_perm0'] = 'Niks';
+$lang['acl_perm1'] = 'Lees';
+$lang['acl_perm2'] = 'Verander';
+$lang['acl_perm4'] = 'Maak';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ar/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ar/lang.php
new file mode 100644
index 000000000..ced250243
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ar/lang.php
@@ -0,0 +1,24 @@
+<?php
+/**
+ * Arabic language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Mostafa Hussein <mostafa@gmail.com>
+ * @author Yaman Hokan <always.smile.yh@hotmail.com>
+ */
+$lang['admin_acl'] = 'إدارة قوائم التحكم بالدخول';
+$lang['acl_group'] = 'مجموعة';
+$lang['acl_user'] = 'مستخدم';
+$lang['acl_perms'] = 'ترخيص لـ';
+$lang['page'] = 'صÙحة';
+$lang['namespace'] = 'Ùضاء التسمية';
+$lang['btn_select'] = 'اختيار';
+$lang['who'] = 'اسم المستخدم / المجموعة';
+$lang['perm'] = 'التصاريح';
+$lang['acl_perm0'] = 'لا يوجد';
+$lang['acl_perm1'] = 'قراءة';
+$lang['acl_perm2'] = 'تحرير';
+$lang['acl_perm4'] = 'إنشاء';
+$lang['acl_perm8'] = 'تحميل';
+$lang['acl_perm16'] = 'مسح';
+$lang['acl_new'] = 'أض٠أضاÙØ© جديدة';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/bg/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/bg/help.txt
new file mode 100644
index 000000000..23028cb35
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/bg/help.txt
@@ -0,0 +1,11 @@
+=== Помощ ===
+
+Ðа тази Ñтраница можете да добавÑте и премахвате Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð·Ð° определÑне на имена и Ñтраници във Вашето Wiki.
+
+ЛевиÑÑ‚ панел показва вÑички налични имена и Ñтраници.
+
+Формата по-горе ви позволÑва да видите и промените разрешениÑта на Ð¸Ð·Ð±Ñ€Ð°Ð½Ð¸Ñ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ» или група.
+
+Ð’ таблицата по-долу Ñа показани вÑички актуални правила за контрол на доÑтъпа. Можете да Ñ Ð¸Ð·Ð¿Ð¾Ð»Ð·Ð²Ð°Ñ‚Ðµ за бързо изтриване или промÑна на множеÑтво правила.
+
+Четене на [[doku>acl|ACL документациÑта]] може да ви помогне да разберете напълно как работи контрола на доÑтъпа в DokuWiki. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/bg/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/bg/lang.php
new file mode 100644
index 000000000..9facd4259
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/bg/lang.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * bulgarian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Nikolay Vladimirov <nikolay@vladimiroff.com>
+ * @author Viktor Usunov <usun0v@mail.bg>
+ */
+$lang['admin_acl'] = 'Управление на ÑпиÑъците за доÑтъп';
+$lang['acl_group'] = 'Група';
+$lang['acl_user'] = 'Потребител';
+$lang['acl_perms'] = 'Права за';
+$lang['page'] = 'Страница';
+$lang['namespace'] = 'Именно проÑтранÑтво';
+$lang['btn_select'] = 'Избери';
+$lang['p_user_id'] = 'ПотребителÑÑ‚ <b class="acluser">%s</b> има в момента Ñледните права за Ñтраницата <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'ПотребителÑÑ‚ <b class="acluser">%s</b> има в момента Ñледните права в именното проÑтранÑтво <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Членове на групата <b class="aclgroup">%s</b> имат в момента Ñледните права за Ñтраницата <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Членове на групата <b class="aclgroup">%s</b> имат в момента Ñледните права в именното проÑтранÑтво <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'ÐœÐ¾Ð»Ñ <b>въведете потребител или група</b> в полето горе, за да видите или промените правата за Ñтраницата <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'ÐœÐ¾Ð»Ñ <b>въведете потребител или група</b> в полето горе, за да видите или промените правата за именното проÑтранÑтво <b class="aclns">%s</b>.';
+$lang['p_inherited'] = 'Забележка: Тези Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð½Ðµ Ñа определени изрично, но Ñа били наÑледени от други групи или именни проÑтранÑтва.';
+$lang['p_isadmin'] = 'Забележка: Избраните група или потребител притежават пълни права, Ñпоред конфигурациÑта им.';
+$lang['p_include'] = 'ВиÑши Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð²ÐºÐ»ÑŽÑ‡Ð²Ð°Ñ‚ по-ниÑши такива. Създаване или премахване на Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ñе прилага Ñамо за именни проÑтранÑтва, не за Ñтраници.';
+$lang['current'] = 'Текущи ACL права';
+$lang['where'] = 'Страница/Именно поÑтранÑтво';
+$lang['who'] = 'Потребител/Група';
+$lang['perm'] = 'Права';
+$lang['acl_perm0'] = 'Ðикакви';
+$lang['acl_perm1'] = 'Четене';
+$lang['acl_perm2'] = 'Редактиране';
+$lang['acl_perm4'] = 'Създаване';
+$lang['acl_perm8'] = 'Качване';
+$lang['acl_perm16'] = 'Изтриване';
+$lang['acl_new'] = 'ДобавÑне на ново';
+$lang['acl_mod'] = 'ПромÑна на впиÑване';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca-valencia/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca-valencia/help.txt
new file mode 100644
index 000000000..87450d2fa
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca-valencia/help.txt
@@ -0,0 +1,15 @@
+=== Ajuda ràpida: ===
+
+En esta pàgina pot afegir i llevar permissos per a espais de noms i
+pàgines del wiki.
+
+El panel esquerre mostra tots els espais de noms i pàgines disponibles.
+
+El formulari de dalt permet vore i modificar els permissos de l'usuari
+o grup seleccionat.
+
+En la taula de baix es mostren totes les regles d'accés actuals. Pot
+usar-la per a canviar o borrar ràpidament vàries regles.
+
+Llegint la [[doku>acl|documentació oficial sobre ACL]] podrà
+comprendre millor com funciona el control d'accés en DokuWiki.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca-valencia/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca-valencia/lang.php
new file mode 100644
index 000000000..ef0ae92eb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca-valencia/lang.php
@@ -0,0 +1,37 @@
+<?php
+/**
+ * valencian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Bernat Arlandis i Mañó <berarma@ya.com>
+ * @author Bernat Arlandis <berarma@ya.com>
+ * @author Bernat Arlandis <berarma@llenguaitecnologia.com>
+ */
+$lang['admin_acl'] = 'Gestor de les llistes de control d\'accés';
+$lang['acl_group'] = 'Grup';
+$lang['acl_user'] = 'Usuari';
+$lang['acl_perms'] = 'Permissos per a';
+$lang['page'] = 'Pàgina';
+$lang['namespace'] = 'Espai de noms';
+$lang['btn_select'] = 'Seleccionar';
+$lang['p_user_id'] = 'L\'usuari <b class="acluser">%s</b> té actualment els següents permissos en la pàgina <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'L\'usuari <b class="acluser">%s</b> té actualment els següents permissos en l\'espai de noms <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Els membres del grup <b class="aclgroup">%s</b> tenen actualment els següents permissos en la pàgina <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Els membres del grup <b class="aclgroup">%s</b> tenen actualment els següents permissos en l\'espai de noms <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'Per favor, <b>introduïxca un usuari o grup</b> en el formulari de dalt per a vore o editar els per a la pàgina <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'Per favor, <b>introduïxca un usuari o grup</b> en el formulari de dalt per a vore o editar els permissos per a l\'espai de noms <b class="aclns">%s</b>.';
+$lang['p_inherited'] = 'Nota: estos permissos no s\'han indicat explícitament sino que s\'hereten d\'atres grups o d\'espais de noms antecessors.';
+$lang['p_isadmin'] = 'Nota: el grup o usuari seleccionat té sempre tots els permissos perque està configurat com a super-usuari.';
+$lang['p_include'] = 'Els permissos més alts inclouen als més baixos. Els permissos per a crear, enviar i borrar només valen per a espais de noms, pàgines no.';
+$lang['current'] = 'Regles ACL actuals';
+$lang['where'] = 'Pàgina/espai de noms';
+$lang['who'] = 'Usuari/grup';
+$lang['perm'] = 'Permissos';
+$lang['acl_perm0'] = 'Cap';
+$lang['acl_perm1'] = 'Llegir';
+$lang['acl_perm2'] = 'Editar';
+$lang['acl_perm4'] = 'Crear';
+$lang['acl_perm8'] = 'Pujar';
+$lang['acl_perm16'] = 'Borrar';
+$lang['acl_new'] = 'Afegir entrada nova';
+$lang['acl_mod'] = 'Modificar entrada';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca/help.txt
new file mode 100644
index 000000000..d9bcc126d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca/help.txt
@@ -0,0 +1,11 @@
+=== Ajuda ràpida ===
+
+En aquesta pàgina podeu afegir i treure permisos per a espais i pàgines del vostre wiki.
+
+La subfinestra de l'esquerra mostra tots els espais i pàgines disponibles.
+
+El formulari de dalt us permet veure i modificar els permisos de l'usuari o grup que seleccioneu.
+
+En la taula de baix es mostren totes les regles de control d'accés que hagin estat definides. Podeu utilitzar aquesta taula per suprimir o modificar ràpidament totes les regles que vulgueu.
+
+Llegir la [[doku>acl|documentació oficial sobre ACL]] us pot ajudar a entendre del tot com funciona el control d'accés en DokuWiki. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca/lang.php
new file mode 100644
index 000000000..10f656062
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca/lang.php
@@ -0,0 +1,38 @@
+<?php
+/**
+ * catalan language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Carles Bellver <carles.bellver@cent.uji.es>
+ * @author Carles Bellver <carles.bellver@gmail.com>
+ * @author carles.bellver@gmail.com
+ * @author carles.bellver@cent.uji.es
+ */
+$lang['admin_acl'] = 'Gestió de la Llista de Control d\'Accés';
+$lang['acl_group'] = 'Grup';
+$lang['acl_user'] = 'Usuari';
+$lang['acl_perms'] = 'Permisos per a';
+$lang['page'] = 'Pàgina';
+$lang['namespace'] = 'Espai';
+$lang['btn_select'] = 'Selecciona';
+$lang['p_user_id'] = 'L\'usuari <b class="acluser">%s</b> té a hores d\'ara els permisos següents en la pàgina <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'L\'usuari <b class="acluser">%s</b> té a hores d\'ara els permisos següents en l\'espai <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Els membres del grup <b class="aclgroup">%s</b> tenen a hores d\'ara els permisos següents en la pàgina <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Els membres del grup <b class="aclgroup">%s</b> tenen a hores d\'ara els permisos següents en l\'espai <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = '<b>Introduïu un usuari o grup</b> en el formulari de dalt per veure o editar els seus permisos en la pàgina <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = '<b>Introduïu un usuari o grup</b> en el formulari de dalt per veure o editar els seus permisos en l\'espai <b class="aclns">%s</b>.';
+$lang['p_inherited'] = 'Nota: aquests permisos no s\'han definit explícitament, sinó que són heretats d\'altres grups o d\'espais d\'ordre superior.';
+$lang['p_isadmin'] = 'Nota: l\'usuari o grup seleccionat té sempre tots els permisos perquè ha estat configurat com a superusuari.';
+$lang['p_include'] = 'Els permisos més alts inclouen tots els permisos inferiors. Els permisos per a crear, penjar i suprimir només s\'apliquen als espais, no a pàgines.';
+$lang['current'] = 'Regles ACL actuals';
+$lang['where'] = 'Pàgina/espai';
+$lang['who'] = 'Usuari/grup';
+$lang['perm'] = 'Permisos';
+$lang['acl_perm0'] = 'Cap';
+$lang['acl_perm1'] = 'Lectura';
+$lang['acl_perm2'] = 'Edició';
+$lang['acl_perm4'] = 'Creació';
+$lang['acl_perm8'] = 'Penjar fitxers';
+$lang['acl_perm16'] = 'Suprimir';
+$lang['acl_new'] = 'Afegeix nova entrada';
+$lang['acl_mod'] = 'Modifica entrada';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/cs/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/cs/help.txt
new file mode 100644
index 000000000..1dbc88ad0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/cs/help.txt
@@ -0,0 +1,11 @@
+=== Nápověda: ===
+
+Na této stránce můžete přidávat a odebírat oprávnění na jmenné prostory a stránky Vaší wiki.
+
+Levý panel zobrazuje všechny dostupné jmenné prostory a stránky.
+
+Formulář výše umožňuje vidět a modifikovat oprávnění vybraného uživatele nebo skupiny.
+
+V tabulce uvedené níže jsou zobrazeny všechny aktuální pravidla pro řízení přístupu (oprávnění). Zde můžete rychle odebírat a měnit více položek (oprávnění) najednou.
+
+Pro detailnÄ›jší nápovÄ›du si pÅ™eÄtÄ›te stránku [[doku>acl|oficiální dokumentaci ACL]], která Vám může pomoci plnÄ› pochopit princip, jak řízení přístupu na DokuWiki funguje.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/cs/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/cs/lang.php
new file mode 100644
index 000000000..899d30ced
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/cs/lang.php
@@ -0,0 +1,37 @@
+<?php
+/**
+ * Czech language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Bohumir Zamecnik <bohumir@zamecnik.org>
+ * @author Zbynek Krivka <zbynek.krivka@seznam.cz>
+ * @author tomas@valenta.cz
+ */
+$lang['admin_acl'] = 'Správa přístupových práv';
+$lang['acl_group'] = 'Skupina';
+$lang['acl_user'] = 'Uživatel';
+$lang['acl_perms'] = 'Práva pro';
+$lang['page'] = 'Stránka';
+$lang['namespace'] = 'Jmenný prostor';
+$lang['btn_select'] = 'Vybrat';
+$lang['p_user_id'] = 'Uživatel <b class="acluser">%s</b> má nyní na stránku <b class="aclpage">%s</b> následující oprávnění: <i>%s</i>.';
+$lang['p_user_ns'] = 'Uživatel <b class="acluser">%s</b> má nyní na jmenný prostor <b class="aclns">%s</b> následující oprávnění: <i>%s</i>.';
+$lang['p_group_id'] = 'Členové skupiny <b class="aclgroup">%s</b> mají nyní na stránku <b class="aclpage">%s</b> následující oprávnění: <i>%s</i>.';
+$lang['p_group_ns'] = 'Členové skupiny <b class="aclgroup">%s</b> mají nyní na jmenný prostor <b class="aclns">%s</b> následující oprávnění: <i>%s</i>.';
+$lang['p_choose_id'] = 'Prosím, <b>vložte uživatele nebo skupinu</b> ve formě uvedené výše, abyste mohli prohlížet a editovat množinu oprávnění pro stránku <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'Prosím, <b>vložte uživatele nebo skupinu</b> ve formě uvedené výše, abyste mohli prohlížet a editovat množinu oprávnění pro jmenný prostor <b class="aclns">%s</b>.';
+$lang['p_inherited'] = 'Poznámka: Tato oprávnění nebyla nastavena explicitně, ale jsou zděděna z jiné skupiny nebo z nadřazeného jmenného prostoru.';
+$lang['p_isadmin'] = 'Poznámka: Vybraná skupina nebo uživatel má vždy plná oprávnění, protože je nastaven jako správce (superuser).';
+$lang['p_include'] = 'Vyšší oprávnění zahrnují nižší oprávnění. Vytvořit, Nahrát a Smazat se vztahují jen k jmenným prostorů, nikoliv ke stránkám.';
+$lang['current'] = 'Aktuální ACL pravidla';
+$lang['where'] = 'Stránka/Jmenný prostor';
+$lang['who'] = 'Uživatel/Skupina';
+$lang['perm'] = 'Oprávnění';
+$lang['acl_perm0'] = 'Žádné';
+$lang['acl_perm1'] = 'Čtení';
+$lang['acl_perm2'] = 'Úpravy';
+$lang['acl_perm4'] = 'Vytvoření';
+$lang['acl_perm8'] = 'Upload';
+$lang['acl_perm16'] = 'Mazání';
+$lang['acl_new'] = 'Přidat novou položku';
+$lang['acl_mod'] = 'Editovat položku';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/da/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/da/help.txt
new file mode 100644
index 000000000..c8eedfc48
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/da/help.txt
@@ -0,0 +1,11 @@
+=== Vejledning ===
+
+På denne side kan du tilføje og fjerne tilladelser for navnerum og sider i din wiki.
+
+Panelet i venstre side viser alle tilgængelige navnerum og sider.
+
+I kassen for oven giver dig mulighed for at se og ændre tilladelser for en bestemt bruger eller gruppe.
+
+Nedenstående skema viser dig alle de satte regler for adgangskontrol. Du kan bruge den til hurtigt at slette eller ændre nogle af dem.
+
+Ved at læse [[doku>acl|den officielle vejledning til ACL]] kan du opnå yderligere hjælp til at blive sat helt ind i, hvordan adgangskontrol virker i DokuWiki. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/da/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/da/lang.php
new file mode 100644
index 000000000..c95ff1582
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/da/lang.php
@@ -0,0 +1,42 @@
+<?php
+/**
+ * Danish language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author koeppe <koeppe@kazur.dk>
+ * @author Jon Bendtsen <bendtsen@diku.dk>
+ * @author Lars Næsbye Christensen <larsnaesbye@stud.ku.dk>
+ * @author Kalle Sommer Nielsen <kalle@php.net>
+ * @author Esben Laursen <hyber@hyber.dk>
+ * @author Harith <haj@berlingske.dk>
+ * @author Daniel Ejsing-Duun <dokuwiki@zilvador.dk>
+ * @author Erik Bjørn Pedersen <erik.pedersen@shaw.ca>
+ */
+$lang['admin_acl'] = 'Rettighedsadministration';
+$lang['acl_group'] = 'Gruppe';
+$lang['acl_user'] = 'Bruger';
+$lang['acl_perms'] = 'Rettigheder for';
+$lang['page'] = 'Dokument';
+$lang['namespace'] = 'Navnerum';
+$lang['btn_select'] = 'Vælg';
+$lang['p_user_id'] = 'Bruger <b class="acluser">%s</b> har følgende adgang på siden <b class="aclpage">%s</b>: <i>%s</i>';
+$lang['p_user_ns'] = 'Bruger <b class="acluser">%s</b> har foreløbig følgende tilladelse i navnerummet <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Medlemmerne af gruppen <b class="aclgroup">%s</b> har foreløbigt de følgende tilladelser på siden <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Medlemmerne af gruppen <b class="aclgroup">%s</b> har foreløbigt de følgende tilladelser i navnerummet <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'Venligst <b>udfyld en bruger eller gruppe</b> i ovennævnte formular for at se eller redigere tilladelserne for denne side<b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'Venligst <b>udfyld en bruger eller gruppe</b> i ovennævnte formular for at se eller redigere tilladelserne for navnerummet <b class="aclns">%s</b>.';
+$lang['p_inherited'] = 'Bemærk: Disse tilladelser var ikke lagt entydigt ind, men var arvet fra andre grupper eller højere navnerum.';
+$lang['p_isadmin'] = 'Bemærk: Den valgte gruppe eller bruger har altid fuld adgang, fordi den er sat til at være en supergruppe eller -bruger';
+$lang['p_include'] = 'Højere tilladelse inkluderer også lavere. Tilladelser til at oprette, lægge filer op og slette gælder kun for navnerum, ikke sider.';
+$lang['current'] = 'Aktuelle ACL-regler';
+$lang['where'] = 'Side/navnerum';
+$lang['who'] = 'Bruger/gruppe';
+$lang['perm'] = 'Adgangsniveau';
+$lang['acl_perm0'] = 'Ingen';
+$lang['acl_perm1'] = 'Læs';
+$lang['acl_perm2'] = 'Skriv';
+$lang['acl_perm4'] = 'Opret';
+$lang['acl_perm8'] = 'Overføre';
+$lang['acl_perm16'] = 'Slet';
+$lang['acl_new'] = 'Tilføj ny post';
+$lang['acl_mod'] = 'Ændre post';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de-informal/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de-informal/help.txt
new file mode 100644
index 000000000..d7930f8df
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de-informal/help.txt
@@ -0,0 +1,11 @@
+=== Schnellhilfe ===
+
+Auf dieser Seite kannst Du Rechte für Namensräume und Seiten in deinem Wiki hinzufügen oder entfernen.
+
+Der linke Bereich zeigt alle Namensräume und Seiten.
+
+Das obere Formular zeigt die die Rechte der ausgewählten Gruppe bzw. Benutzers.
+
+In der Tabelle unten werden alle momentan gesetzten Zugriffsregeln gezeigt. Hier kannst Du schnell mehrere Regeln löschen oder ändern.
+
+Das Lesen von [[doku>acl|official documentation on ACL]] kann Dir helfen zu verstehen, wie die Zugriffskontrole in DokuWiki funktioniert.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de-informal/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de-informal/lang.php
new file mode 100644
index 000000000..56dedfc61
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de-informal/lang.php
@@ -0,0 +1,35 @@
+<?php
+/**
+ * German (informal) language file
+ *
+ * @author Alexander Fischer <tbanus@os-forge.net>
+ * @author Juergen Schwarzer <jschwarzer@freenet.de>
+ */
+$lang['admin_acl'] = 'Zugriffskontrollsystem Management';
+$lang['acl_group'] = 'Gruppe';
+$lang['acl_user'] = 'Benutzer';
+$lang['acl_perms'] = 'Rechte für';
+$lang['page'] = 'Seite';
+$lang['namespace'] = 'Namensraum';
+$lang['btn_select'] = 'Auswählen';
+$lang['p_user_id'] = 'Benutzer <b class="acluser">%s</b> hat im Moment folgende Rechte auf der Seite <b class="aclpage">%s</b>: <i>%s</i>';
+$lang['p_user_ns'] = 'Benutzer <b class="acluser">%s</b> hat momentan die folgenden Rechte im Namensraum<b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Die Gruppenmitglieder <b class="aclgroup">%s</b> haben momentan die folgenden Rechte auf der Seite <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Die Mitglieder der Gruppe <b class="aclgroup">%s</b> haben gerade Zugriff in folgenden Namensräumen <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'Bitte <b>gib einen Nutzer oder eine Gruppe</b> in das Formular ein, um die Berechtigungen der Seite<b class="aclpage">%s</b> anzusehen oder zu bearbeiten.';
+$lang['p_choose_ns'] = 'Bitte <b>gib einen Nutzer oder eine Gruppe</b> in das Formular ein, um die Berechtigungen des Namenraumes<b class="aclpage">%s</b> anzusehen oder zu bearbeiten.';
+$lang['p_inherited'] = 'Hinweis: Diese Rechte wuredn nicht explizit gesetzt sondern geerbt von anderen Grupen oder übergeordneten Namensräumen.';
+$lang['p_isadmin'] = 'Hinweis: Die gewählte Gruppe oder der Benutzer haben immer die vollen Rechte, weil sie als Superuser konfiguriert sind.';
+$lang['p_include'] = 'Höhere Rechte schließen kleinere mit ein. Hochlade- und Loeschrechte sind nur fuer Namensräume, nicht fuer Seiten.';
+$lang['current'] = 'Momentane Zugriffsregeln';
+$lang['where'] = 'Seite/Namensraum';
+$lang['who'] = 'Benutzer/Gruppe';
+$lang['perm'] = 'Rechte';
+$lang['acl_perm0'] = 'Keine';
+$lang['acl_perm1'] = 'Lesen';
+$lang['acl_perm2'] = 'Editieren';
+$lang['acl_perm4'] = 'Erstellen';
+$lang['acl_perm8'] = 'Hochladen';
+$lang['acl_perm16'] = 'Löschen';
+$lang['acl_new'] = 'Neuen Eintrag zufügen';
+$lang['acl_mod'] = 'Eintrag modifizieren';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de/help.txt
new file mode 100644
index 000000000..783ae22e7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de/help.txt
@@ -0,0 +1,11 @@
+=== Kurzhilfe ===
+
+Auf dieser Seite können sie Zugriffsberechtigungen für Seiten und Namensräume festlegen und ändern.
+
+Die Liste links zeigt alle verfügbaren Namensräume und Seiten.
+
+Das Formular oben erlaubt Anzeige, Ändern und Hinzufügen von Zugriffsregeln für einen ausgewählten Nutzer oder eine Gruppe.
+
+In der Tabelle unten werden alle bestehenden Regeln aufgeführt und können dort modifiziert oder gelöscht werden.
+
+Für ein tiefergehendes Verständnis wie Zugriffsbeschränkungen in DokuWiki funktionieren, sollten Sie die [[doku>acl|offizielle Dokumentation]] lesen. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de/lang.php
new file mode 100644
index 000000000..022ea6683
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de/lang.php
@@ -0,0 +1,47 @@
+<?php
+/**
+ * german language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Christof <gagi@fin.de>
+ * @author Anika Henke <anika@selfthinker.org>
+ * @author Esther Brunner <esther@kaffeehaus.ch>
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ * @author Michael Klier <chi@chimeric.de>
+ * @author Leo Moll <leo@yeasoft.com>
+ * @author Florian Anderiasch <fa@art-core.org>
+ * @author Robin Kluth <commi1993@gmail.com>
+ * @author Arne Pelka <mail@arnepelka.de>
+ * @author Dirk Einecke <dirk@dirkeinecke.de>
+ * @author Blitzi94@gmx.de
+ * @author Robert Bogenschneider <robog@GMX.de>
+ */
+$lang['admin_acl'] = 'Zugangsverwaltung';
+$lang['acl_group'] = 'Gruppe';
+$lang['acl_user'] = 'Benutzer';
+$lang['acl_perms'] = 'Berechtigungen für';
+$lang['page'] = 'Seite';
+$lang['namespace'] = 'Namensraum';
+$lang['btn_select'] = 'Auswählen';
+$lang['p_user_id'] = 'Nutzer <b class="acluser">%s</b> hat momentan folgende Berechtigungen für die Seite <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'Nutzer <b class="acluser">%s</b> hat momentan folgende Berechtigungen im Namensraum <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Mitglieder der Gruppe <b class="aclgroup">%s</b> haben momentan folgende Berechtigungen für die Seite <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Mitglieder der Gruppe <b class="aclgroup">%s</b> haben momentan folgende Berechtigungen für den Namensraum <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'Bitte geben Sie in obigem Formular eine <b>einen Nutzer oder eine Gruppe</b> an, um die Berechtigungen für die Seite <b class="aclpage">%s</b> zu sehen oder zu ändern.';
+$lang['p_choose_ns'] = 'Bitte geben Sie in obigem Formular eine <b>einen Nutzer oder eine Gruppe</b> an, um die Berechtigungen für den Namensraum <b class="aclns">%s</b> zu sehen oder zu ändern.';
+$lang['p_inherited'] = 'Hinweis: Diese Berechtigungen wurden nicht explizit gesetzt sondern von anderen Gruppen oder höher liegenden Namensräumen geerbt.';
+$lang['p_isadmin'] = 'Hinweis: Die ausgewählte Gruppe oder Nutzer haben immer alle Berechtigungen das sie als Superuser konfiguriert wurden.';
+$lang['p_include'] = 'Höhere Berechtigungen schließen niedrigere mit ein. Anlegen, Hochladen und Entfernen gilt nur für Namensräume, nicht für einzelne Seiten';
+$lang['current'] = 'Momentane Zugriffsregeln';
+$lang['where'] = 'Seite/Namensraum';
+$lang['who'] = 'Nutzer/Gruppe';
+$lang['perm'] = 'Berechtigungen';
+$lang['acl_perm0'] = 'Keine';
+$lang['acl_perm1'] = 'Lesen';
+$lang['acl_perm2'] = 'Bearbeiten';
+$lang['acl_perm4'] = 'Anlegen';
+$lang['acl_perm8'] = 'Hochladen';
+$lang['acl_perm16'] = 'Entfernen';
+$lang['acl_new'] = 'Eintrag hinzufügen';
+$lang['acl_mod'] = 'Eintrag bearbeiten';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/el/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/el/help.txt
new file mode 100644
index 000000000..ea2f816c0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/el/help.txt
@@ -0,0 +1,10 @@
+=== ΓÏήγοÏη Βοήθεια: ===
+
+Στη σελίδα αυτή μποÏείτε να Ï€Ïοσθέσετε και αφαιÏέσετε δικαιώματα Ï€Ïόσβασης για φακέλους και σελίδες στο wiki σας.
+
+Το αÏιστεÏÏŒ πλαίσιο δείχνει όλους τους διαθέσιμους φακέλους και αÏχεία.
+
+Η παÏαπάνω φόÏμα επιτÏέπει να δείτε και να Ï„Ïοποποιήσετε τα διακαιώματα μίας επιλεγμένης ομάδας χÏηστών ή ενός χÏήστη.
+
+Στον παÏακάτω πίνακα εμφανίζονται όλοι οι Ï„Ïέχοντες κανόνες παÏαχώÏησης δικαιωμάτων Ï€Ïόσβασης. ΜποÏείτε να τον χÏησιμοποιήσετε ώστε να σβήσετε ή να Ï„Ïοποποιήσετε γÏήγοÏα πολλαπλοÏÏ‚ κανόνες.
+Διαβάζοντας την [[doku>acl|επίσημη τεκμηÏίωση για τις Λίστες Δικαιωμάτων ΠÏόσβασης - ACL]] ίσως σας βοηθήσει να καταλάβετε πλήÏως το πως αυτές εφαÏμόζονται στην DokuWiki. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/el/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/el/lang.php
new file mode 100644
index 000000000..da8a72ab3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/el/lang.php
@@ -0,0 +1,43 @@
+<?php
+/**
+ * Greek language file
+ *
+ * Based on DokuWiki Version rc2007-05-24 english language file
+ * Original english language file contents included for reference
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Anika Henke <anika@selfthinker.org>
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ * @author Thanos Massias <tm@thriasio.gr>
+ * @author Αθανάσιος Îταής <homunculus@wana.gr>
+ * @author Konstantinos Koryllos <koryllos@gmail.com>
+ */
+$lang['admin_acl'] = 'ΔιαχείÏιση Δικαιωμάτων ΠÏόσβασης';
+$lang['acl_group'] = 'Ομάδα';
+$lang['acl_user'] = 'ΧÏήστης';
+$lang['acl_perms'] = 'Δικαιώματα για';
+$lang['page'] = 'Σελίδα';
+$lang['namespace'] = 'Φάκελος';
+$lang['btn_select'] = 'Επιλογή';
+$lang['p_user_id'] = 'Ο χÏήστης <b class="acluser">%s</b> έχει τα ακόλουθα δικαιώματα Ï€Ïόσβασης στην σελίδα <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'Ο χÏήστης <b class="acluser">%s</b> έχει τα ακόλουθα δικαιώματα Ï€Ïόσβασης στον φάκελο <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Τα μέλη της ομάδας <b class="aclgroup">%s</b> έχουν τα ακόλουθα δικαιώματα Ï€Ïόσβασης στην σελίδα <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Τα μέλη της ομάδας <b class="aclgroup">%s</b> έχουν τα ακόλουθα δικαιώματα Ï€Ïόσβασης στον φάκελο <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'ΠαÏακαλώ <b>δώστε ένα όνομα χÏήστη ή ομάδας χÏηστών</b> στην παÏαπάνω μοÏφή για να δείτε τα αντίστοιχα δικαιώματα Ï€Ïόσβασης για την σελίδα <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'ΠαÏακαλώ <b>δώστε ένα όνομα χÏήστη ή ομάδας χÏηστών</b> στην παÏαπάνω μοÏφή για να δείτε τα αντίστοιχα δικαιώματα Ï€Ïόσβασης για τον φάκελο <b class="aclns">%s</b>.';
+$lang['p_inherited'] = 'Σημείωση: Αυτά τα διακαιώματα χÏήσης δεν οÏίστηκαν άμεσα αλλά κληÏονομήθηκαν από άλλες ομάδες χÏηστών ή φακέλους σε υψηλότεÏο επίπεδο.';
+$lang['p_isadmin'] = 'Σημείωση: Η επιλεγμένη ομάδα χÏηστών ή χÏήστης έχει πάντα πλήÏη διακαιώματα Ï€Ïόσβασης διότι είναι δηλωμένος σαν υπεÏχÏήστης (superuser).';
+$lang['p_include'] = 'Τα υψηλότεÏα δικαιώματα Ï€Ïόσβασης πεÏιλαμβάνουν τα χαμηλότεÏα. Τα δικαιώματα για ΔημιουÏγία, ΦόÏτωση και ΔιαγÏαφή αφοÏοÏν μόνο φακέλους και όχι σελίδες. ';
+$lang['current'] = 'ΤÏέχοντες κανόνες Λίστας Δικαιωμάτων ΠÏόσβασης - ACL';
+$lang['where'] = 'Σελίδα/Φάκελος';
+$lang['who'] = 'ΧÏήστης/Ομάδα χÏηστών';
+$lang['perm'] = 'Δικαιώματα Ï€Ïόσβασης';
+$lang['acl_perm0'] = 'Κανένα';
+$lang['acl_perm1'] = 'Ανάγνωση';
+$lang['acl_perm2'] = 'ΤÏοποποίηση';
+$lang['acl_perm4'] = 'ΔημιουÏγία';
+$lang['acl_perm8'] = 'ΦόÏτωση';
+$lang['acl_perm16'] = 'ΔιαγÏαφή';
+$lang['acl_new'] = 'ΠÏοσθήκη νέας εγγÏαφής';
+$lang['acl_mod'] = 'ΤÏοποποίηση εγγÏαφής';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/en/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/en/help.txt
new file mode 100644
index 000000000..2b80cc4c7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/en/help.txt
@@ -0,0 +1,12 @@
+=== Quick Help: ===
+
+On this page you can add and remove permissions for namespaces and pages in your wiki.
+
+The left pane displays all available namespaces and pages.
+
+The form above allows you to see and modify the permissions of a selected user or group.
+
+In the table below all currently set access control rules are shown. You can use it to quickly delete or change multiple rules.
+
+Reading the [[doku>acl|official documentation on ACL]] might help you to fully understand how access control works in DokuWiki.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/en/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/en/lang.php
new file mode 100644
index 000000000..38ff20c88
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/en/lang.php
@@ -0,0 +1,46 @@
+<?php
+/**
+ * english language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Anika Henke <anika@selfthinker.org>
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+
+$lang['admin_acl'] = 'Access Control List Management';
+$lang['acl_group'] = 'Group';
+$lang['acl_user'] = 'User';
+$lang['acl_perms'] = 'Permissions for';
+$lang['page'] = 'Page';
+$lang['namespace'] = 'Namespace';
+
+$lang['btn_select'] = 'Select';
+
+$lang['p_user_id'] = 'User <b class="acluser">%s</b> currently has the following permissions on page <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'User <b class="acluser">%s</b> currently has the following permissions in namespace <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Members of group <b class="aclgroup">%s</b> currently have the following permissions on page <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Members of group <b class="aclgroup">%s</b> currently have the following permissions in namespace <b class="aclns">%s</b>: <i>%s</i>.';
+
+$lang['p_choose_id'] = 'Please <b>enter a user or group</b> in the form above to view or edit the permissions set for the page <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'Please <b>enter a user or group</b> in the form above to view or edit the permissions set for the namespace <b class="aclns">%s</b>.';
+
+
+$lang['p_inherited'] = 'Note: Those permissions were not set explicitly but were inherited from other groups or higher namespaces.';
+$lang['p_isadmin'] = 'Note: The selected group or user has always full permissions because it is configured as superuser.';
+$lang['p_include'] = 'Higher permissions include lower ones. Create, Upload and Delete permissions only apply to namespaces, not pages.';
+
+$lang['current'] = 'Current ACL Rules';
+$lang['where'] = 'Page/Namespace';
+$lang['who'] = 'User/Group';
+$lang['perm'] = 'Permissions';
+
+$lang['acl_perm0'] = 'None';
+$lang['acl_perm1'] = 'Read';
+$lang['acl_perm2'] = 'Edit';
+$lang['acl_perm4'] = 'Create';
+$lang['acl_perm8'] = 'Upload';
+$lang['acl_perm16'] = 'Delete';
+$lang['acl_new'] = 'Add new Entry';
+$lang['acl_mod'] = 'Modify Entry';
+//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eo/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eo/help.txt
new file mode 100644
index 000000000..0c03b8605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eo/help.txt
@@ -0,0 +1,11 @@
+=== Helpeto: ===
+
+En tiu ĉi paÄo vi povas aldoni kaj forigi rajtojn por nomspacoj kaj paÄoj en via vikio.
+
+La maldekstra panelo montras ĉiujn disponeblajn nomspacojn kaj paÄojn.
+
+La suba agordilo permesas al vi rigardi kaj modifi la rajtojn de elektita uzanto aÅ­ grupo.
+
+En la suba tabelo ĉiuj aktuale difinitaj alirkontrolaj reguloj estas montritaj. Vi povas uzi Äin por rapide forigi aÅ­ ÅanÄi multoblajn regulojn.
+
+Legado de la [[doku>acl|oficiala dokumentaro pri ACL]] povus helpi vin bone kompreni kiel alirkontrolo funkcias en DokuWiki. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eo/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eo/lang.php
new file mode 100644
index 000000000..97a07c3c9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eo/lang.php
@@ -0,0 +1,40 @@
+<?php
+/**
+ * Esperantolanguage file
+ *
+ * @author Felipe Castro <fefcas@uol.com.br>
+ * @author Felipo Kastro <fefcas@gmail.com>
+ * @author Felipe Castro <fefcas@gmail.com>
+ * @author Robert Bogenschneider <robog@gmx.de>
+ * @author Erik Pedersen <erik pedersen@shaw.ca>
+ * @author Erik Pedersen <erik.pedersen@shaw.ca>
+ * @author Robert Bogenschneider <robog@GMX.de>
+ */
+$lang['admin_acl'] = 'Administrado de Alirkontrola Listo (ACL)';
+$lang['acl_group'] = 'Grupo';
+$lang['acl_user'] = 'Uzanto';
+$lang['acl_perms'] = 'Rajtoj por';
+$lang['page'] = 'PaÄo';
+$lang['namespace'] = 'Nomspaco';
+$lang['btn_select'] = 'Elekti';
+$lang['p_user_id'] = 'Uzanto <b class="acluser">%s</b> aktuale havas la jenajn rajtojn en la paÄo <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'Uzanto <b class="acluser">%s</b> aktuale havas la jenajn rajtojn en la nomspaco <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Anoj de la grupo <b class="aclgroup">%s</b> aktuale havas la jenajn rajtojn en la paÄo <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Anoj de la grupo <b class="aclgroup">%s</b> aktuale havas la jenajn rajtojn en la nomspaco <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'Bonvole <b>enmeti uzanton aÅ­ grupon</b> en la suba agordilo por rigardi aÅ­ redakti la aron da rajtoj por la paÄo <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'Bonvole <b>enmeti uzanton aÅ­ grupon</b> en la suba agordilo por rigardi aÅ­ redakti la aron da rajtoj por la nomspaco <b class="aclns">%s</b>.';
+$lang['p_inherited'] = 'Rimarko: tiuj rajtoj ne estis rekte difinitaj, sed ili estis hereditaj el aliaj pli superaj grupoj aÅ­ nomspacoj.';
+$lang['p_isadmin'] = 'Rimarko: la elektita grupo aÅ­ uzanto ĉiam havas plenan rajtaron ĉar Äi estas difinita kiel superuzanto.';
+$lang['p_include'] = 'Plialtaj permesoj inkluzivas malpli altajn. La permesoj por Krei, AlÅuti kaj Forigi nur aplikeblas al nomspacoj, ne al paÄoj.';
+$lang['current'] = 'Aktuala regularo ACL';
+$lang['where'] = 'PaÄo/Nomspaco';
+$lang['who'] = 'Uzanto/Grupo';
+$lang['perm'] = 'Rajtoj';
+$lang['acl_perm0'] = 'Nenio';
+$lang['acl_perm1'] = 'Legi';
+$lang['acl_perm2'] = 'Redakti';
+$lang['acl_perm4'] = 'Krei';
+$lang['acl_perm8'] = 'AlÅuti';
+$lang['acl_perm16'] = 'Forigi';
+$lang['acl_new'] = 'Aldoni novan Enmetaĵon';
+$lang['acl_mod'] = 'Modifi Enmetaĵon';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/es/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/es/help.txt
new file mode 100644
index 000000000..c683477a8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/es/help.txt
@@ -0,0 +1,11 @@
+=== Ayuda rápida: ===
+
+En esta página puede agregar o retirar permisos para los espacios de nombres y páginas en su wiki.
+
+El panel de la izquierda muiestra todos los espacios de nombres y páginas
+
+El formulario inferior permite ver y modificar los permisos del usuario o grupo elegido.
+
+En la tabla anterior se muestran todas las reglas de control de acceso vigentes Puede usarla para borrar o cambiar varias reglas rápidamente.
+
+Consultar el [[doku>acl|official documentation on ACL]] puede ayudarle a entender completamente como el control de acceso trabaja en DokuWiki.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/es/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/es/lang.php
new file mode 100644
index 000000000..3a23c71da
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/es/lang.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * Spanish language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Miguel Pagano <miguel.pagano@gmail.com>
+ * @author Oscar M. Lage <r0sk10@gmail.com>
+ * @author Gabriel Castillo <gch@pumas.ii.unam.mx>
+ * @author oliver@samera.com.py
+ * @author Enrico Nicoletto <liverig@gmail.com>
+ * @author Manuel Meco <manuel.meco@gmail.com>
+ * @author VictorCastelan <victorcastelan@gmail.com>
+ * @author Jordan Mero hack.jord@gmail.com
+ * @author Felipe Martinez <metalmartinez@gmail.com>
+ * @author Javier Aranda <internet@javierav.com>
+ * @author Zerial <fernando@zerial.org>
+ * @author Marvin Ortega <maty1206@maryanlinux.com>
+ * @author Daniel Castro Alvarado <dancas2@gmail.com>
+ * @author Fernando J. Gómez <fjgomez@gmail.com>
+ */
+$lang['admin_acl'] = 'Administración de lista de control de acceso';
+$lang['acl_group'] = 'Grupo';
+$lang['acl_user'] = 'Usuario';
+$lang['acl_perms'] = 'Permiso para';
+$lang['page'] = 'Página';
+$lang['namespace'] = 'Espacio de nombres';
+$lang['btn_select'] = 'Seleccionar';
+$lang['p_user_id'] = 'El usuario <b class="acluser">%s</b> tiene los siguientes permisos sobre la página <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'El usuario <b class="acluser">%s</b> tiene los siguientes permisos sobre el espacio de nombres <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Los miembros del grupo <b class="aclgroup">%s</b> tienen actualmente los siguientes permisos sobre la página <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Los miembros del grupo <b class="aclgroup">%s</b> tienen actualmente los siguientes permisos sobre el espacio de nombres <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'Por favor <b>proporcione un usuario o grupo</b>en el formulario arriba mostrado para ver o editar los permisos asignados sobre la página<b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'Por favor <b>proporcione un usuario o grupo</b>en el formulario arriba mostrado para ver o editar los permisos asignados sobre el espacio de nombres <b class="aclns">%s</b>.';
+$lang['p_inherited'] = 'Nota: Esos permisos no fueron establecidos explícitamente sino que fueron heredados desde otros grupos o espacios de nombres superiores';
+$lang['p_isadmin'] = 'Nota: El grupo o usuario seleccionado simepre tiene permisos totales debido a que se encuentra configurado como superusuario.';
+$lang['p_include'] = 'Los permisos superiores incluyen a los inferiores. Los permisos Crear, Cargar y Eliminar sólo se aplican a los espacios de nombres, no a las páginas.';
+$lang['current'] = 'Reglas ACL vigentes';
+$lang['where'] = 'Página/Espacio de nombres';
+$lang['who'] = 'Usuario/Grupo';
+$lang['perm'] = 'Permisos';
+$lang['acl_perm0'] = 'ninguno';
+$lang['acl_perm1'] = 'Leer';
+$lang['acl_perm2'] = 'Editar';
+$lang['acl_perm4'] = 'Crear';
+$lang['acl_perm8'] = 'Subir un fichero';
+$lang['acl_perm16'] = 'Borrar';
+$lang['acl_new'] = 'Agregar una nueva entrada';
+$lang['acl_mod'] = 'Modificar una entrada';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/et/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/et/lang.php
new file mode 100644
index 000000000..e90d5eaa9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/et/lang.php
@@ -0,0 +1,23 @@
+<?php
+/**
+ * Estonian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Oliver S6ro <seem.iges@mail.ee>
+ * @author Aari Juhanson <aari@vmg.vil.ee>
+ * @author Kaiko Kaur <kaiko@kultuur.edu.ee>
+ */
+
+$lang['admin_acl'] = 'Ligipääsukontrolli nimekirja haldamine';
+$lang['acl_group'] = 'Grupp';
+$lang['acl_user'] = 'Kasutaja';
+$lang['acl_perms'] = 'Lubatud';
+$lang['page'] = 'leht';
+$lang['namespace'] = 'alajaotus';
+
+$lang['acl_perm1'] = 'Lugemine';
+$lang['acl_perm2'] = 'Toimetamine';
+$lang['acl_perm4'] = 'Tekitamine';
+$lang['acl_perm8'] = 'Ãœles laadimine';
+$lang['acl_new'] = 'Uue kirje lisamine';
+//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eu/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eu/help.txt
new file mode 100644
index 000000000..9e6070a10
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eu/help.txt
@@ -0,0 +1,11 @@
+=== Laguntza Bizkorra: ===
+
+Orri honetan wiki-ko orri eta izen-espazioen baimenak gehitu eta kendu ahal ditzakezu.
+
+Ezkerreko panelak eskuragarri dauden orri eta izen-espazioak erakusten ditu.
+
+Goiko formularioak aukeratutako erabiltzaile edo taldearen baimenak ikusi eta aldatzea ahalbidetzen dizu.
+
+Beheko taulan une honetan ezarritako atzipen kontrol arauak daude. Hainbat arau bizkor ezabatu edo aldatzeko erabili dezakezu.
+
+[[doku>acl|Atzipen Kontrol Listen inguruko dokumentazio ofiziala]] irakurtzeak atzipen kontrolak DokuWiki-n nola funtzionatzen duen ulertzen lagundu zaitzaike.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eu/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eu/lang.php
new file mode 100644
index 000000000..99e70ad00
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eu/lang.php
@@ -0,0 +1,34 @@
+<?php
+/**
+ * Basque language file
+ *
+ * @author Inko Illarramendi <inko.i.a@gmail.com>
+ */
+$lang['admin_acl'] = 'Atzipen Kontrol Listaren Kudeaketa';
+$lang['acl_group'] = 'Taldea';
+$lang['acl_user'] = 'Erabiltzailea';
+$lang['acl_perms'] = 'Baimenak honetarako:';
+$lang['page'] = 'Orria';
+$lang['namespace'] = 'Izen-espazioa';
+$lang['btn_select'] = 'Aukeratu';
+$lang['p_user_id'] = '<b class="acluser">%s</b> erabiltzaileak une honetan honako baimenak ditu <b class="aclpage">%s</b> orrian: <i>%s</i>.';
+$lang['p_user_ns'] = '<b class="acluser">%s</b> erabiltzaileak une honetan honako baimenak ditu <b class="aclns">%s</b> izen-espazioan: <i>%s</i>.';
+$lang['p_group_id'] = '<b class="aclgroup">%s</b> taldeko kideek une honetan honako baimenak dituzte <b class="aclpage">%s</b> orrian: <i>%s</i>.';
+$lang['p_group_ns'] = '<b class="aclgroup">%s</b> taldeko kideek une honetan honako baimenak dituzte <b class="aclns">%s</b> izen-espazioan: <i>%s</i>.';
+$lang['p_choose_id'] = 'Mesedez <b>sartu erabiltzaile edo taldea</b> goiko formularioan <b class="aclpage">%s</b> orrian ezarritako baimenak ikusi edo aldatzeko.';
+$lang['p_choose_ns'] = 'Mesedez <b>sartu erabiltzaile edo taldea</b> goiko formularioan <b class="aclns">%s</b> izen-espazioan ezarritako baimenak ikusi edo aldatzeko.';
+$lang['p_inherited'] = 'Oharra: Baimen horiek ez dira esplizituki jarriak, beste talde batzuetatik edo goragoko izen-espazioetatik heredatuak baizik.';
+$lang['p_isadmin'] = 'Oharra: Aukeratutako talde edo erabiltzaileak beti daika baimen osoa, supererabiltzaile gisa konfiguratuta baitago.';
+$lang['p_include'] = 'Baimen handiagoek baimen txikiagoak barneratzen dituzte. Sortu, Igo eta Ezabatu baimenak izen-espazioei soilik aplikatzen zaizkie, ez orriei.';
+$lang['current'] = 'Uneko AKL Arauak';
+$lang['where'] = 'Orria/Izen-espazioa';
+$lang['who'] = 'Erabiltzailea/Taldea';
+$lang['perm'] = 'Baimenak';
+$lang['acl_perm0'] = 'Inork';
+$lang['acl_perm1'] = 'Irakurri';
+$lang['acl_perm2'] = 'Editatu';
+$lang['acl_perm4'] = 'Sortu';
+$lang['acl_perm8'] = 'Igo';
+$lang['acl_perm16'] = 'Ezabatu';
+$lang['acl_new'] = 'Sarrera berri bat gehitu';
+$lang['acl_mod'] = 'Aldatu Sarrera';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fa/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fa/help.txt
new file mode 100644
index 000000000..1ec797faf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fa/help.txt
@@ -0,0 +1,11 @@
+=== راهنما: ===
+
+در این صÙحه شما می‌توانید دسترسی صÙحات Ùˆ Ùضای‌نام‌ها را مدیریت کنید.
+
+در قسمت سمت راست، لیست تمام صÙحات Ùˆ Ùضای‌نام‌ها را مشاهده می‌کنید.
+
+در Ùرم بالا می‌توانید دسترسی‌های کاربران Ùˆ گروه‌های مختل٠را مشاهده Ùˆ ویرایش کنید.
+
+در جدول زیر، تمامی قوانین مدیریتی را مشاهده می‌کنید. شما می‌توانید آن‌ها را حذ٠یا تعدادی از آن‌ها رو تغییر دهید.
+
+ممکن است خواندن [[doku>acl|مطلب رسمی در مورد مدیریت دسترسی‌ها]] شما را در درک بهتر این قسمت DokuWiki یاری کند. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fa/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fa/lang.php
new file mode 100644
index 000000000..ed576c271
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fa/lang.php
@@ -0,0 +1,38 @@
+<?php
+/**
+ * Persian language file
+ *
+ * @author behrad eslamifar <behrad_es@yahoo.com)
+ * @author Mohsen Firoozmandan <info@mambolearn.com>
+ * @author omidmr@gmail.com
+ * @author Omid Mottaghi <omidmr@gmail.com>
+ * @author Mohammad Reza Shoaei <shoaei@gmail.com>
+ */
+$lang['admin_acl'] = 'مدیریت کنترل دسترسی‌ها';
+$lang['acl_group'] = 'گروه';
+$lang['acl_user'] = 'کاربر';
+$lang['acl_perms'] = 'مجوز برای';
+$lang['page'] = 'صÙحه';
+$lang['namespace'] = 'Ùضای‌نام';
+$lang['btn_select'] = 'انتخاب';
+$lang['p_user_id'] = 'کاربر <b class="acluser">%s</b> دسترسی‌های زیر را برای صÙحه‌ی <b class="aclpage">%s</b> دارد: <i>%s</i>.';
+$lang['p_user_ns'] = 'کاربر <b class="acluser">%s</b> دسترسی‌های زیر را برای Ùضای‌نام <b class="aclpage">%s</b> دارد: <i>%s</i>.';
+$lang['p_group_id'] = 'اعضای گروه <b class="aclgroup">%s</b> دسترسی‌های زیر را برای صÙحه‌ی <b class="aclpage">%s</b> دارند: <i>%s</i>.';
+$lang['p_group_ns'] = 'اعضای گروه <b class="aclgroup">%s</b> دسترسی‌های زیر را برای Ùضای‌نام <b class="aclpage">%s</b> دارند: <i>%s</i>.';
+$lang['p_choose_id'] = 'خواهشمندیم <b>نام یک کاربر یا گروه</b> را در Ùرم بالا وارد کنید تا دسترسی‌های آن را برای صÙحه‌ی <b class="aclpage">%s</b> ببینید Ùˆ ویرایش کنید.';
+$lang['p_choose_ns'] = 'خواهشمندیم <b>نام یک کاربر یا گروه</b> را در Ùرم بالا وارد کنید تا دسترسی‌های آن را برای Ùضای‌نام <b class="aclpage">%s</b> ببینید Ùˆ ویرایش کنید.';
+$lang['p_inherited'] = 'توجه: دسترسی‌ها مستقیمن مقداردهی نشده است، بلکه از گروه‌های بالا یا Ùضای‌نام گرÙته شده است.';
+$lang['p_isadmin'] = 'توجه: کاربر یا گروه انتخاب شده همیشه با تمام دسترسی می‌باشد، زیرا به عنوان «superuser» انتخاب شده است.';
+$lang['p_include'] = 'دسترسی‌های بالا، دسترسی‌های پایین را شامل می‌شود. ایجاد، ارسال Ùˆ حذ٠Ùقط به Ùضای‌نام الحاق می‌شود.';
+$lang['current'] = 'قوانین دسترسی Ùعلی';
+$lang['where'] = 'صÙحه/Ùضای‌نام';
+$lang['who'] = 'کاربر/گروه';
+$lang['perm'] = 'دسترسی‌ها';
+$lang['acl_perm0'] = 'هیچ‌کدام';
+$lang['acl_perm1'] = 'خواندن';
+$lang['acl_perm2'] = 'ویزایش';
+$lang['acl_perm4'] = 'ایجاد';
+$lang['acl_perm8'] = 'ارسال';
+$lang['acl_perm16'] = 'حذÙ';
+$lang['acl_new'] = 'اضاÙÙ‡ کردن ورودی جدید';
+$lang['acl_mod'] = 'ویرایش ورودی';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fi/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fi/help.txt
new file mode 100644
index 000000000..d821f2d89
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fi/help.txt
@@ -0,0 +1,11 @@
+=== Pika-apu: ===
+
+Tällä sivulla voit lisätä tai poistaa oikeuksia wikisi nimiavaruuksiin tai sivuihin.
+
+Vasen osa näyttää kaikki tarjolla olevat nimiavaruudet ja sivut.
+
+Yllä olevan kaavakkeen avulla voit katsoa ja muokata oikeuksia valitulle käyttäjälle ja ryhmälle.
+
+Alla olevassa taulukossa on näkyvissä päällä olevat pääsyoikeudet. Voit käyttää sitä muokataksesi tai poistaaksesi useita oikeuksia.
+
+[[doku>acl|Virallisen käyttöoikeus (ACL) dokumentaation]] lukeminen voi helpottaa sinua täysin ymmärtämään mitän käyttöoikeudet toimivat DokuWikissä.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fi/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fi/lang.php
new file mode 100644
index 000000000..04074d8d4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fi/lang.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * Finnish language file
+ *
+ * @author otto@valjakko.net
+ * @author Otto Vainio <otto@valjakko.net>
+ * @author Teemu Mattila <ghcsystems@gmail.com>
+ */
+$lang['admin_acl'] = 'Käyttöoikeudet (ACL)';
+$lang['acl_group'] = 'Ryhmä';
+$lang['acl_user'] = 'Käyttäjä';
+$lang['acl_perms'] = 'Oikeudet';
+$lang['page'] = 'Sivu';
+$lang['namespace'] = 'Nimiavaruus';
+$lang['btn_select'] = 'Valitse';
+$lang['p_user_id'] = 'Käyttäjällä <b class="acluser">%s</b> on tällä hetkellä seuraavat oikeudet sivulla <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'Käyttäjällä <b class="acluser">%s</b> on tällä hetkellä seuraavat oikeudet nimiavaruudessa <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Ryhmän <b class="aclgroup">%s</b> jäsenillä on tällä hetkellä seuraavat oikeudet sivulla <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Ryhmän <b class="aclgroup">%s</b> jäsenillä on tällä hetkellä seuraavat oikeudet nimiavaruudessa <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'Ole hyvä ja <b>syötä ryhmän nimi</b> yllä olevaan kaavakkeeseen katsoaksesi tai muokataksesi oikeuksia sivulle <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'Ole hyvä ja <b>syötä ryhmän nimi</b> yllä olevaan kaavakkeeseen katsoaksesi tai muokataksesi oikeuksia nimiavaruuteen <b class="aclpage">%s</b>.';
+$lang['p_inherited'] = 'Huomaa: Oikeuksia ei ole erikseen asetettu, vaan ne on peritty toiselta ryhmältä tai ylemmältä nimiavaruudelta.';
+$lang['p_isadmin'] = 'Huomaa: Valitulla ryhmällä tai käyttäjällä on aina täydet oikeudet, koska se on määritelty pääkäyttäjäksi (Superuser)';
+$lang['p_include'] = 'Korkeammat oikeudet sisältävät matalammat. Luonti-, Lähetys- ja Poisto-oikeudet vaikuttavat vain nimiavaruuksiin, ei sivuihin.';
+$lang['current'] = 'Tämänhetkiset käyttöoikeudet (ACL)';
+$lang['where'] = 'Sivu/Nimiavaruus';
+$lang['who'] = 'Käyttäjä/Ryhmä';
+$lang['perm'] = 'Oikeudet';
+$lang['acl_perm0'] = 'Ei mitään';
+$lang['acl_perm1'] = 'Luku';
+$lang['acl_perm2'] = 'Muokkaus';
+$lang['acl_perm4'] = 'Luonti';
+$lang['acl_perm8'] = 'Lähetys';
+$lang['acl_perm16'] = 'Poisto';
+$lang['acl_new'] = 'Lisää uusi';
+$lang['acl_mod'] = 'Muokkaa';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fr/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fr/help.txt
new file mode 100644
index 000000000..69661bb9b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fr/help.txt
@@ -0,0 +1,9 @@
+=== Aide rapide : ===
+
+Cette page vous permet d'ajouter ou de supprimer des permissions pour les catégories et les pages de votre wiki. Le panneau de gauche liste toutes les catégories et les pages disponibles.
+
+Le formulaire au dessus permet d'afficher et de modifier les permissions d'un utilisateur ou d'un groupe sélectionné.
+
+Dans la table ci-dessous toutes les listes de contrôle d'accès actuelles sont affichées. Vous pouvez l'utiliser pour supprimer ou modifier rapidement plusieurs ACLs.
+
+La lecture de [[doku>acl|la documentation officielle des ACLs]] pourra vous permettre de comprendre complètement le fonctionnement du contrôle d'accès dans DokuWiki.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fr/lang.php
new file mode 100644
index 000000000..efdc5f074
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fr/lang.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * french language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Sébastien Bauer <sebastien.bauer@advalvas.be>
+ * @author Antoine Fixary <antoine.fixary@freesbee.fr>
+ * @author cumulus <pta-n56@myamail.com>
+ * @author Gwenn Gueguen <contact@demisel.net>
+ * @author Guy Brand <gb@isis.u-strasbg.fr>
+ * @author Fabien Chabreuil <fabien@integralpersonality.com>
+ * @author Stéphane Chamberland <stephane.chamberland@ec.gc.ca>
+ * @author Maurice A. LeBlanc <leblancma@cooptel.qc.ca>
+ * @author gb@isis.u-strasbg.fr
+ * @author stephane.gully@gmail.com
+ * @author Guillaume Turri <guillaume.turri@gmail.com>
+ * @author Erik Pedersen <erik.pedersen@shaw.ca>
+ * @author olivier duperray <duperray.olivier@laposte.net>
+ * @author Vincent Feltz <psycho@feltzv.fr>
+ */
+$lang['admin_acl'] = 'Gestion de la liste des contrôles d\'accès (ACL)';
+$lang['acl_group'] = 'Groupe';
+$lang['acl_user'] = 'Utilisateur';
+$lang['acl_perms'] = 'Permission pour';
+$lang['page'] = 'Page';
+$lang['namespace'] = 'Catégorie';
+$lang['btn_select'] = 'Sélectionner';
+$lang['p_user_id'] = 'Permissions actuelles de l\'utilisateur <b class="acluser">%s</b> sur la page <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'Permissions actuelles de l\'utilisateur <b class="acluser">%s</b> sur la catégorie <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Permissions actuelles des membres du groupe <b class="aclgroup">%s</b> sur la page <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Permissions actuelles des membres du groupe <b class="aclgroup">%s</b> sur la catégorie <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'Saisissez un nom <b>d\'utilisateur ou de groupe</b> dans le formulaire ci-dessus pour afficher ou éditer les permissions relatives à la page <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'Saisissez un nom <b>d\'utilisateur ou de groupe</b> dans le formulaire ci-dessous pour afficher ou éditer les permissions relatives à la catégorie <b class="aclns">%s</b>.';
+$lang['p_inherited'] = 'Note : Ces permissions n\'ont pas été explicitement fixées mais sont héritées d\'autres groupes ou catégories supérieures.';
+$lang['p_isadmin'] = 'Note : Le groupe ou l\'utilisateur sélectionné dispose de toutes les permissions car il est paramétré en tant que superutilisateur.';
+$lang['p_include'] = 'Les permissions les plus élevées induisent les plus faibles. Création, Télécharger, et Effacer, ne s\'appliquent qu\'aux catégories ; pas aux pages.';
+$lang['current'] = 'ACL actuelles';
+$lang['where'] = 'Page/Catégorie';
+$lang['who'] = 'Utilisateur/Groupe';
+$lang['perm'] = 'Permissions';
+$lang['acl_perm0'] = 'Aucune';
+$lang['acl_perm1'] = 'Lecture';
+$lang['acl_perm2'] = 'Écriture';
+$lang['acl_perm4'] = 'Création';
+$lang['acl_perm8'] = 'Télécharger';
+$lang['acl_perm16'] = 'Effacer';
+$lang['acl_new'] = 'Ajouter une nouvelle entrée';
+$lang['acl_mod'] = 'Modifier l\'entrée';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/gl/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/gl/help.txt
new file mode 100644
index 000000000..c427b182f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/gl/help.txt
@@ -0,0 +1,11 @@
+=== Axuda rápida: ===
+
+Nesta páxina pode engadir e eliminar os permisos para os nomes de espazo e as páxinas do seu wiki.
+
+O panel da esquerda mostra todos os nomes de espazo e páxinas dispoñíbeis.
+
+O formulario de arriba permítelle ver e modificar os permisos da persoa usuaria ou grupo seleccionada.
+
+Na táboa de abaixo móstranse todas as regras de control de accesos estabelecidas. Pode empregala para cambiar ou eliminar varias regras dun xeito rápido.
+
+A lectura da [[doku>acl|documentación oficial da ACL]] pode servirlle de axuda para comprender como funciona o control de accesos no Dokuwiki.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/gl/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/gl/lang.php
new file mode 100644
index 000000000..184cf7e1d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/gl/lang.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * Galicianlanguage file
+ *
+ * @author CiberIrmandade da Fala <infoxeral@ciberirmandade.org>
+ * @author Tagen Ata <localizacion@tagenata.com>
+ * @author Leandro Regueiro <leandro.regueiro@gmail.com>
+ */
+$lang['admin_acl'] = 'Xestión da Lista de control de acceso (ACL)';
+$lang['acl_group'] = 'Grupo';
+$lang['acl_user'] = 'Usuaria/o';
+$lang['acl_perms'] = 'Permisos para';
+$lang['page'] = 'Páxina';
+$lang['namespace'] = 'Nome de espazo';
+$lang['btn_select'] = 'Selecciona';
+$lang['p_user_id'] = 'A persoa usuaria <b class="acluser">%s</b> dispón actualmente dos seguintes permisos na páxina <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'A persoa usuaria <b class="acluser">%s</b> dispón actualmente dos seguintes permisos no nome de espazo <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'As e os integrantes do grupo <b class="aclgroup">%s</b> dispoñen actualmente dos seguintes permisos na páxina <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'As e os integrantes do grupo <b class="aclgroup">%s</b> dispoñen actualmente dos seguintes permisos no nome de espazo <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = '<b>Insira un nome de usuaria/o ou grupo</b> no formulario de arriba para ver ou editar os permisos estabelecidos para a páxina <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = '<b>Insira un nome de usuaria/o ou grupo</b> no formulario de arriba para ver ou editar os permisos estabelecidos no nome de espazo <b class="aclns">%s</b>.';
+$lang['p_inherited'] = 'Nota: Estes permisos non foron estabelecidos explicitamente senón que foron herdados doutros grupos ou nomes de espazo maiores.';
+$lang['p_isadmin'] = 'Nota: O grupo ou a persoa usuaria seleccionado terá sempre permisos completos por estar configurado como superusuaria/o.';
+$lang['p_include'] = 'Os permisos máis grandes inclúen os menores. Os permisos de Creación, Subida e Eliminación só se aplican aos nomes de espazo, non ás páxinas.';
+$lang['current'] = 'Regras ACL actuais';
+$lang['where'] = 'Páxina/Nome de espazo';
+$lang['who'] = 'Usuaria/o/Grupo';
+$lang['perm'] = 'Permisos';
+$lang['acl_perm0'] = 'Ningún';
+$lang['acl_perm1'] = 'Ler';
+$lang['acl_perm2'] = 'Editar';
+$lang['acl_perm4'] = 'Crear';
+$lang['acl_perm8'] = 'Subir ficheiros';
+$lang['acl_perm16'] = 'Eliminar';
+$lang['acl_new'] = 'Engadir una entrada';
+$lang['acl_mod'] = 'Modificar unha entrada';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/he/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/he/help.txt
new file mode 100644
index 000000000..33f2933b9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/he/help.txt
@@ -0,0 +1,11 @@
+=== עזרה חפוזה: ===
+
+בדף ×–×” ניתן להוסיף ולהסיר הרש×ות למרחבי שמות ×•×œ×“×¤×™× ×‘×•×™×§×™ שלך.
+
+הצד השמ×לי מציג ×ת כל מרבי השמות ×•×”×“×¤×™× ×”×–×ž×™× ×™×.
+
+הטופס מעלה מ×פשר לך לר×ות ולשנות ×ת ההרש×ות של משתמש ×ו קבוצה נבחרי×.
+
+בטבלה מטה ×ž×•×¦×’×™× ×›×œ כללי בקרת הגישה הנוכחיי×. ניתן להשתמש בה כדי למחוק ×ו לשנות מספר ×›×œ×œ×™× ×‘×ž×”×™×¨×•×ª.
+
+קרי×ת [[doku>acl|התיעוד הרשמי ל-ACL ACL]] יכולה לעזור לך להבין ב×ופן ×ž×œ× ×›×™×¦×“ בקרת הגישה עובדת בדוקוויקי.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/he/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/he/lang.php
new file mode 100644
index 000000000..7d73c63dd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/he/lang.php
@@ -0,0 +1,35 @@
+<?php
+/**
+ * hebrew language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author DoK <kamberd@yahoo.com>
+ * @author Dotan Kamber <kamberd@yahoo.com>
+ * @author Moshe Kaplan <mokplan@gmail.com>
+ */
+$lang['admin_acl'] = 'ניהול רשימת בקרת גישות';
+$lang['acl_group'] = 'קבוצה';
+$lang['acl_user'] = 'משתמש';
+$lang['acl_perms'] = 'הרש×ות עבור';
+$lang['page'] = 'דף';
+$lang['namespace'] = 'מרחב שמות';
+$lang['p_user_id'] = 'למשתמש <b class="acluser">%s</b> יש כרגע ×ת ההרש×ות הב×ות בדף <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'למשתמש <b class="acluser">%s</b> יש כרגע ×ת ההרש×ות הב×ות במרחב ×”×©× <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'לחברי קבוצת <b class="aclgroup">%s</b> יש כרגע ×ת ההרש×ות הב×ות בדף <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'לחברי קבוצת <b class="aclgroup">%s</b> יש כרגע ×ת ההרש×ות הב×ות במרחב ×”×©× <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = '× × <b>להזין משתמש ×ו קבוצה</b> בטופס מעלה כדי לצפות ×ו לערוך ×ת ההרש×ות המוגדרות עבור הדף <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = '× × <b>להזין משתמש ×ו קבוצה</b> בטופס מעלה כדי לצפות ×ו לערוך ×ת ההרש×ות המוגדרות עבור מרחב ×”×©× <b class="aclns">%s</b>.';
+$lang['p_inherited'] = 'לתשומת לבך: הרש×ות ×לו ×œ× ×”×•×’×“×¨×• ב×ופן מפורש ××œ× × ×•×¨×©×• מקבוצות ×חרות ×ו ממרחב שמות גבוה יותר.';
+$lang['p_isadmin'] = 'לתשומת לבך: לקבוצה ×ו המשתמש שנבחרו יש תמיד הרש×ות מל×ות בגלל ×”×’×“×¨×ª× ×›×ž×©×ª×ž×©-על.';
+$lang['current'] = 'חוקי ×”-ACL הנוכחיי×';
+$lang['where'] = 'דף/מרחב ש×';
+$lang['who'] = 'משתמש/קבוצה';
+$lang['perm'] = 'הרש×ות';
+$lang['acl_perm0'] = 'לל×';
+$lang['acl_perm1'] = 'קרי××”';
+$lang['acl_perm2'] = 'עריכה';
+$lang['acl_perm4'] = 'יצירה';
+$lang['acl_perm8'] = 'העל××”';
+$lang['acl_perm16'] = 'מחיקה';
+$lang['acl_new'] = 'הוספת רשומה חדשה';
+$lang['acl_mod'] = 'שינויי מוב××”';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hi/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hi/lang.php
new file mode 100644
index 000000000..d8630a281
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hi/lang.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * Hindi language file
+ *
+ * @author Abhinav Tyagi <abhinavtyagi11@gmail.com>
+ */
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hr/lang.php
new file mode 100644
index 000000000..d2094b77b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hr/lang.php
@@ -0,0 +1,7 @@
+<?php
+/**
+ * Croatian language file
+ *
+ * @author Branko Rihtman <theney@gmail.com>
+ * @author Dražen Odobašić <dodobasic@gmail.com>
+ */
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hu/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hu/help.txt
new file mode 100644
index 000000000..57f16a39c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hu/help.txt
@@ -0,0 +1,12 @@
+=== Hozzáférési lista (ACL) kezelő ===
+
+Ezen az oldalon jogokat oszthat és vehet el a wiki oldalakhoz és névterekhez.
+
+A bal oldalon látható az összes névtér és oldal.
+
+A felső form segít a kiválasztott felhasználó vagy csoport jogosultságainak megtekintésében vagy változtatásában.
+
+Az alsó táblázat mutatja az összes jelenleg érvényes hozzáférési szabályt. Ennek segítségével gyorsan törölhetők vagy megváltoztathatók a szabályok.
+
+A [[doku>acl|hivatalos ACL dokumentáció]] segíthet a DokuWiki hozzáférés-kezelés működésének megértésében.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hu/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hu/lang.php
new file mode 100644
index 000000000..4fb1720ae
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hu/lang.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * Hungarian language file
+ *
+ * @author Sandor TIHANYI <stihanyi+dw@gmail.com>
+ * @author Siaynoq Mage <siaynoqmage@gmail.com>
+ * @author schilling.janos@gmail.com
+ */
+$lang['admin_acl'] = 'Hozzáférési lista (ACL) kezelő';
+$lang['acl_group'] = 'Csoport:';
+$lang['acl_user'] = 'Felhasználó:';
+$lang['acl_perms'] = 'Jogosultság ehhez:';
+$lang['page'] = 'oldal';
+$lang['namespace'] = 'névtér';
+$lang['btn_select'] = 'Kiválaszt';
+$lang['p_user_id'] = 'A(z) <b class="acluser">%s</b> felhasználónak jelenleg a következő jogosultsága van ezen az oldalon: <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'A(z) <b class="acluser">%s</b> felhasználónak jelenleg a következő jogosultsága van ebben a névtérben: <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'A(z) <b class="aclgroup">%s</b> csoport tagjainak jelenleg a következő jogosultsága van ezen az oldalon: <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'A(z) <b class="aclgroup">%s</b> csoport tagjainak jelenleg a következő jogosultsága van ebben a névtérben: <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'A felső formon <b>adjon meg egy felhasználót vagy csoportot</b>, akinek a(z) <b class="aclpage">%s</b> oldalhoz beállított jogosultságait megtekinteni vagy változtatni szeretné.';
+$lang['p_choose_ns'] = 'A felső formon <b>adjon meg egy felhasználót vagy csoportot</b>, akinek a(z) <b class="aclns">%s</b> névtérhez beállított jogosultságait megtekinteni vagy változtatni szeretné.';
+$lang['p_inherited'] = 'Megjegyzés: ezek a jogok nem itt lettek explicit beállítva, hanem öröklődtek egyéb csoportokból vagy felsőbb névterekből.';
+$lang['p_isadmin'] = 'Megjegyzés: a kiválasztott csoportnak vagy felhasználónak mindig teljes jogosultsága lesz, mert Wiki-gazdának van beállítva.';
+$lang['p_include'] = 'A magasabb jogok tartalmazzák az alacsonyabbakat. A Létrehozás, Feltöltés és Törlés jogosultságok csak névterekre alkalmazhatók, az egyes oldalakra nem.';
+$lang['current'] = 'Jelenlegi hozzáférési szabályok';
+$lang['where'] = 'Oldal/névtér';
+$lang['who'] = 'Felhasználó/Csoport';
+$lang['perm'] = 'Jogosultságok';
+$lang['acl_perm0'] = 'Semmi';
+$lang['acl_perm1'] = 'Olvasás';
+$lang['acl_perm2'] = 'Szerkesztés';
+$lang['acl_perm4'] = 'Létrehozás';
+$lang['acl_perm8'] = 'Feltöltés';
+$lang['acl_perm16'] = 'Törlés';
+$lang['acl_new'] = 'Új bejegyzés hozzáadása';
+$lang['acl_mod'] = 'Bejegyzés módosítása';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/id-ni/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/id-ni/lang.php
new file mode 100644
index 000000000..d367340b7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/id-ni/lang.php
@@ -0,0 +1,7 @@
+<?php
+/**
+ * idni language file
+ *
+ * @author Harefa <fidelis@harefa.com>
+ * @author Yustinus Waruwu <juswaruwu@gmail.com>
+ */
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/id/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/id/lang.php
new file mode 100644
index 000000000..650637635
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/id/lang.php
@@ -0,0 +1,21 @@
+<?php
+/**
+ * Indonesian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author mubaidillah <mubaidillah@gmail.com>
+ * @author Yustinus Waruwu <juswaruwu@gmail.com>
+ */
+$lang['admin_acl'] = 'Manajemen Daftar Pengendali Akses';
+$lang['acl_group'] = 'Grup';
+$lang['acl_user'] = 'User';
+$lang['acl_perms'] = 'Ijin untuk';
+$lang['page'] = 'Halaman';
+$lang['namespace'] = 'Namespace';
+$lang['btn_select'] = 'Pilih';
+$lang['acl_perm1'] = 'Baca';
+$lang['acl_perm2'] = 'Ubah';
+$lang['acl_perm4'] = 'Buat';
+$lang['acl_perm8'] = 'Upload';
+$lang['acl_perm16'] = 'Hapus';
+$lang['acl_new'] = 'Tambah Entry baru';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/is/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/is/lang.php
new file mode 100644
index 000000000..b45faa80a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/is/lang.php
@@ -0,0 +1,15 @@
+<?php
+/**
+ * Icelandic language file
+ *
+ * @author Hrannar Baldursson <hrannar.baldursson@gmail.com>
+ * @author Ólafur Gunnlaugsson <oli@audiotools.com>
+ * @author Erik Bjørn Pedersen <erik.pedersen@shaw.ca>
+ */
+$lang['acl_group'] = 'Hópur';
+$lang['acl_user'] = 'Notandi';
+$lang['page'] = 'Síða';
+$lang['namespace'] = 'Nafnrými';
+$lang['btn_select'] = 'Veldu';
+$lang['where'] = 'Síða/Nafnrými';
+$lang['acl_perm16'] = 'Eyða';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/it/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/it/help.txt
new file mode 100644
index 000000000..5e4b08dd6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/it/help.txt
@@ -0,0 +1,11 @@
+=== Breve Aiuto: ===
+
+In questa pagina puoi aggiungere e rimuovere permessi per categorie e pagine del tuo wiki.
+
+Il pannello di sinistra mostra tutte le categorie e le pagine disponibili.
+
+Il campo sopra ti permette di vedere e modificare i permessi di un utente o gruppo selezionato.
+
+Nella tabella sotto, sono riportate tutte le regole di controllo degli accessi attualmente impostate. Puoi utilizzarla per cancellare o cambiare al volo varie regole.
+
+Leggere la [[doku>acl|official documentation on ACL]] può aiutarti a capire pienamente come funziona il controllo degli accessi in DokuWiki.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/it/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/it/lang.php
new file mode 100644
index 000000000..344987e8b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/it/lang.php
@@ -0,0 +1,42 @@
+<?php
+/**
+ * Italian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Giorgio Vecchiocattivi <giorgio@vecchio.it>
+ * @author Roberto Bolli <http://www.rbnet.it/>
+ * @author Pietro Battiston toobaz@email.it
+ * @author Diego Pierotto ita.translations@tiscali.it
+ * @author ita.translations@tiscali.it
+ * @author Lorenzo Breda <lbreda@gmail.com>
+ * @author snarchio@alice.it
+ * @author robocap <robocap1@gmail.com>
+ */
+$lang['admin_acl'] = 'Gestione Lista Controllo Accessi (ACL)';
+$lang['acl_group'] = 'Gruppo';
+$lang['acl_user'] = 'Utente';
+$lang['acl_perms'] = 'Permessi per';
+$lang['page'] = 'Pagina';
+$lang['namespace'] = 'Categoria';
+$lang['btn_select'] = 'Seleziona';
+$lang['p_user_id'] = 'L\'utente <b class="acluser">%s</b> attualmente ha i seguenti permessi sulla pagina <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'L\'utente <b class="acluser">%s</b> attualmente ha i seguenti permessi per la categoria <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'I membri del gruppo<b class="aclgroup">%s</b> attualmente hanno i seguenti permessi sulla pagina <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'I membri del gruppo<b class="aclgroup">%s</b> attualmente hanno i seguenti permessi per la categoria <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'Per favore <b>inserisci un utente o gruppo</b> nel campo sopra per modificare i permessi impostati per la pagina <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'Per favore <b>inserisci un utente o un gruppo</b> nel campo sopra per modificare i permessi impostati per la categoria <b class="aclns">%s</b>.';
+$lang['p_inherited'] = 'Nota: Questi permessi non sono stati esplicitamente impostati, ma sono stati ereditati da altri gruppi o da categorie superiori.';
+$lang['p_isadmin'] = 'Nota: Il gruppo o utente selezionato ha sempre tutti i permessi perché è configurato come amministratore.';
+$lang['p_include'] = 'I permessi più elevati includono i permessi inferiori. I permessi di Creazione, Upload e Cancellazione si applicano soltanto alle categorie e non alle pagine.';
+$lang['current'] = 'Regole ACL attuali';
+$lang['where'] = 'Pagina/Categoria';
+$lang['who'] = 'Utente/Gruppo';
+$lang['perm'] = 'Permessi';
+$lang['acl_perm0'] = 'Nessuno';
+$lang['acl_perm1'] = 'Lettura';
+$lang['acl_perm2'] = 'Modifica';
+$lang['acl_perm4'] = 'Creazione';
+$lang['acl_perm8'] = 'Upload';
+$lang['acl_perm16'] = 'Cancellazione';
+$lang['acl_new'] = 'Aggiungi nuovo record';
+$lang['acl_mod'] = 'Modifica record';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ja/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ja/help.txt
new file mode 100644
index 000000000..f7867f8e2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ja/help.txt
@@ -0,0 +1,11 @@
+=== クイックヘルプ: ===
+
+ã“ã®ãƒšãƒ¼ã‚¸ã§ã¯ã€Wiki内ã®åå‰ç©ºé–“ã¨ãƒšãƒ¼ã‚¸ã«å¯¾ã™ã‚‹æ¨©é™ã‚’追加・削除ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
+
+å·¦å´ã®ãƒœãƒƒã‚¯ã‚¹ã«ã¯å­˜åœ¨ã™ã‚‹åå‰ç©ºé–“ã¨ãƒšãƒ¼ã‚¸ãŒè¡¨ç¤ºã•ã‚Œã¦ã„ã¾ã™ã€‚
+
+上記ã®ãƒ•ã‚©ãƒ¼ãƒ ã‚’使ã£ã¦ã€é¸æŠžã—ãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚‚ã—ãã¯ã‚°ãƒ«ãƒ¼ãƒ—ã®æ¨©é™ã‚’閲覧・変更ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
+
+以下ã®ãƒ†ãƒ¼ãƒ—ルã«ã¯ã€ç¾åœ¨è¨­å®šã•ã‚Œã¦ã„るアクセスコントロールã®ãƒ«ãƒ¼ãƒ«ãŒè¡¨ç¤ºã•ã‚Œã¦ã„ã¾ã™ã€‚ã“ã®ãƒ†ãƒ¼ãƒ–ルを使ã£ã¦ã€è¤‡æ•°ã®ãƒ«ãƒ¼ãƒ«ã‚’ç´ æ—©ã変更・削除ã™ã‚‹ã“ã¨ãŒå¯èƒ½ã§ã™ã€‚
+
+DokuWikiã®ã‚¢ã‚¯ã‚»ã‚¹ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ã«ã¤ã„ã¦ã¯ã€[[doku>acl|official documentation on ACL]] ã‚’ãŠèª­ã¿ä¸‹ã•ã„。 \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ja/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ja/lang.php
new file mode 100644
index 000000000..831fd2d5c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ja/lang.php
@@ -0,0 +1,39 @@
+<?php
+/**
+ * japanese language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Davilin(Yuji Takenaka) <webmaster@davilin.com>
+ * @author Yuji Takenaka <webmaster@davilin.com>
+ * @author Ikuo Obataya <i.obataya@gmail.com>
+ * @author Daniel Dupriest <kououken@gmail.com>
+ * @author Kazutaka Miyasaka <kazmiya@gmail.com>
+ */
+$lang['admin_acl'] = 'アクセスコントロール管ç†';
+$lang['acl_group'] = 'グループ';
+$lang['acl_user'] = 'ユーザー';
+$lang['acl_perms'] = '権é™ã‚’追加';
+$lang['page'] = '文書';
+$lang['namespace'] = 'åå‰ç©ºé–“';
+$lang['btn_select'] = 'é¸æŠž';
+$lang['p_user_id'] = 'ユーザー <b class="acluser">%s</b> ã¯ã€ãƒšãƒ¼ã‚¸ <b class="aclpage">%s</b> ã«å¯¾ã—ã¦æ¬¡ã®æ¨©é™ã‚’æŒã£ã¦ã„ã¾ã™: <i>%s</i>';
+$lang['p_user_ns'] = 'ユーザー <b class="acluser">%s</b> ã¯ã€åå‰ç©ºé–“ <b class="aclns">%s</b> ã«å¯¾ã—ã¦æ¬¡ã®æ¨©é™ã‚’æŒã£ã¦ã„ã¾ã™: <i>%s</i>';
+$lang['p_group_id'] = 'グループ <b class="aclgroup">%s</b> ã®ãƒ¡ãƒ³ãƒãƒ¼ã¯ã€ãƒšãƒ¼ã‚¸ <b class="aclpage">%s</b> ã«å¯¾ã—ã¦æ¬¡ã®æ¨©é™ã‚’æŒã£ã¦ã„ã¾ã™: <i>%s</i>';
+$lang['p_group_ns'] = 'グループ <b class="aclgroup">%s</b> ã®ãƒ¡ãƒ³ãƒãƒ¼ã¯ã€åå‰ç©ºé–“ <b class="aclns">%s</b> ã«å¯¾ã—ã¦æ¬¡ã®æ¨©é™ã‚’æŒã£ã¦ã„ã¾ã™: <i>%s</i>';
+$lang['p_choose_id'] = 'ページ <b class="aclpage">%s</b> ã«ã‚»ãƒƒãƒˆã•ã‚ŒãŸæ¨©é™ã‚’閲覧・編集ã™ã‚‹ãŸã‚ã«ã¯ã€ä¸Šè¨˜ã®ãƒ•ã‚©ãƒ¼ãƒ ã«<b>ユーザーåã‚‚ã—ãã¯ã‚°ãƒ«ãƒ¼ãƒ—åを入力ã—ã¦ä¸‹ã•ã„</b>。';
+$lang['p_choose_ns'] = 'åå‰ç©ºé–“ <b class="aclns">%s</b> ã«ã‚»ãƒƒãƒˆã•ã‚ŒãŸæ¨©é™ã‚’閲覧・編集ã™ã‚‹ãŸã‚ã«ã¯ã€ä¸Šè¨˜ã®ãƒ•ã‚©ãƒ¼ãƒ ã«<b>ユーザーåã‚‚ã—ãã¯ã‚°ãƒ«ãƒ¼ãƒ—åを入力ã—ã¦ä¸‹ã•ã„</b>。';
+$lang['p_inherited'] = '注æ„:ã“れらã®æ¨©é™ã¯æ˜Žç¤ºã•ã‚Œã¦ã„ã¾ã›ã‚“ãŒã€ä»–ã®ã‚°ãƒ«ãƒ¼ãƒ—ã‚‚ã—ãã¯ä¸Šä½ã®åå‰ç©ºé–“ã®æ¨©é™ã‚’継承ã—ã¾ã™ã€‚';
+$lang['p_isadmin'] = '注æ„:é¸æŠžã—ãŸã‚°ãƒ«ãƒ¼ãƒ—ã‚‚ã—ãã¯ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ã‚¹ãƒ¼ãƒ‘ーユーザーã§ã‚ã‚‹ãŸã‚ã€å…¨ã¦ã®æ¨©é™ãŒã‚ã‚Šã¾ã™ã€‚';
+$lang['p_include'] = '高次ã®æ¨©é™ã¯ã€ãれより低次ã®æ¨©é™ã‚’å«ã¿ã¾ã™ã€‚作æˆãƒ»ã‚¢ãƒƒãƒ—ロード・削除ã®æ¨©é™ã¯ã€ãƒšãƒ¼ã‚¸ã§ã¯ãªãåå‰ç©ºé–“ã®ã¿ã«é©ç”¨ã•ã‚Œã¾ã™ã€‚';
+$lang['current'] = 'ç¾åœ¨ã®ACLルール';
+$lang['where'] = 'ページ/åå‰ç©ºé–“';
+$lang['who'] = 'ユーザー/グループ';
+$lang['perm'] = '権é™';
+$lang['acl_perm0'] = 'ç„¡ã—';
+$lang['acl_perm1'] = '読å–';
+$lang['acl_perm2'] = '編集';
+$lang['acl_perm4'] = '作æˆ';
+$lang['acl_perm8'] = 'アップロード';
+$lang['acl_perm16'] = '削除';
+$lang['acl_new'] = 'æ–°è¦ã‚¨ãƒ³ãƒˆãƒª';
+$lang['acl_mod'] = 'エントリã®ç·¨é›†';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ko/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ko/help.txt
new file mode 100644
index 000000000..516198ee5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ko/help.txt
@@ -0,0 +1,11 @@
+=== ë„움ë§: ===
+
+현재 페ì´ì§€ì—ì„œ 위키 네임스페ì´ìŠ¤ì™€ 페ì´ì§€ì— 대한 ì ‘ê·¼ ê¶Œí•œì„ ì¶”ê°€í•˜ê±°ë‚˜ 삭제할 수 있습니다.
+
+왼쪽 ì˜ì—­ì„ ì„ íƒê°€ëŠ¥í•œ 네임스페ì´ìŠ¤ë“¤ê³¼ 페ì´ì§€ 목ë¡ì„ ë³´ì—¬ì¤ë‹ˆë‹¤.
+
+위쪽 ìž…ë ¥ ì–‘ì‹ì—ì„œ ì„ íƒëœ 사용ìžì™€ ê·¸ë£¹ì˜ ì ‘ê·¼ ê¶Œí•œì„ ë³´ê±°ë‚˜ 변경할 수 있습니다.
+
+아래 í…Œì´ë¸”ì—ì„œ 현재 ì„¤ì •ëœ ëª¨ë“  ì ‘ê·¼ 제어 ê·œì¹™ë“¤ì„ ë³¼ 수 있으며, 즉시 여러 ê·œì¹™ë“¤ì„ ì‚­ì œí•˜ê±°ë‚˜ 변경할 수 있습니다.
+
+DokuWikiì—ì„œ ì ‘ê·¼ 제어가 어떻게 ë™ìž‘ë˜ëŠ”지 알려면 [[doku>acl|official documentation on ACL]] ì½ê¸° ë°”ëžë‹ˆë‹¤. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ko/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ko/lang.php
new file mode 100644
index 000000000..43a5ceeeb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ko/lang.php
@@ -0,0 +1,41 @@
+<?php
+/**
+ * korean language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Anika Henke <anika@selfthinker.org>
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ * @author jk Lee
+ * @author dongnak@gmail.com
+ * @author Song Younghwan <purluno@gmail.com>
+ * @author SONG Younghwan <purluno@gmail.com>
+ */
+$lang['admin_acl'] = 'ì ‘ê·¼ 제어 ëª©ë¡ ê´€ë¦¬';
+$lang['acl_group'] = '그룹';
+$lang['acl_user'] = '사용ìž';
+$lang['acl_perms'] = '권한';
+$lang['page'] = '페ì´ì§€';
+$lang['namespace'] = '네임스페ì´ìŠ¤';
+$lang['btn_select'] = 'ì„ íƒ';
+$lang['p_user_id'] = 'ì‚¬ìš©ìž <b class="acluser">%s</b>는 현재 <b class="aclpage">%s</b>: <i>%s</i> 페ì´ì§€ ì ‘ê·¼ì´ ê°€ëŠ¥í•©ë‹ˆë‹¤.';
+$lang['p_user_ns'] = 'ì‚¬ìš©ìž <b class="acluser">%s</b>는 현재 <b class="aclns">%s</b>: <i>%s</i> 네임스페ì´ìŠ¤ ì ‘ê·¼ì´ ê°€ëŠ¥í•©ë‹ˆë‹¤.';
+$lang['p_group_id'] = '그룹 <b class="aclgroup">%s</b> 사용ìžëŠ” 현재 <b class="aclpage">%s</b>: <i>%s</i> 페ì´ì§€ ì ‘ê·¼ì´ ê°€ëŠ¥í•©ë‹ˆë‹¤.';
+$lang['p_group_ns'] = '그룹 <b class="aclgroup">%s</b> 사용ìžëŠ” 현재 <b class="aclns">%s</b>: <i>%s</i> 네임스페ì´ìŠ¤ ì ‘ê·¼ì´ ê°€ëŠ¥í•©ë‹ˆë‹¤.';
+$lang['p_choose_id'] = '<b class="aclpage">%s</b> 페ì´ì§€ ì ‘ê·¼ ê¶Œí•œì„ ë³´ê±°ë‚˜ 변경하려면 <b>사용ìž</b>나 <b>그룹</b>ì„ ìœ„ ì–‘ì‹ì— 입력하기 ë°”ëžë‹ˆë‹¤.';
+$lang['p_choose_ns'] = '<b class="aclns">%s</b> 네임스페ì´ìŠ¤ ì ‘ê·¼ ê¶Œí•œì„ ë³´ê±°ë‚˜ 변경하려면 <b>사용ìž</b>나 <b>그룹</b>ì„ ìœ„ ì–‘ì‹ì— 입력하기 ë°”ëžë‹ˆë‹¤.';
+$lang['p_inherited'] = '주ì˜: ê¶Œí•œì´ ëª…ì‹œì ìœ¼ë¡œ 설정ë˜ì§€ 않았으므로 다른 그룹들ì´ë‚˜ ìƒìœ„ 네임스페ì´ìŠ¤ë¡œ 부터 가져왔습니다.';
+$lang['p_isadmin'] = '주ì˜: 슈í¼ìœ ì €ë¡œ 설정ë˜ì–´ 있으므로 ì„ íƒëœ 그룹ì´ë‚˜ 사용ìžëŠ” 언제나 모든 ì ‘ê·¼ ê¶Œí•œì„ ê°€ì§‘ë‹ˆë‹¤.';
+$lang['p_include'] = 'ë” ë†’ì€ ì ‘ê·¼ê¶Œí•œì€ í•˜ìœ„ë¥¼ í¬í•¨í•©ë‹ˆë‹¤. 페ì´ì§€ê°€ ì•„ë‹Œ 네임스페ì´ìŠ¤ì—는 ìƒì„±, 업로드, ì‚­ì œ 권한만 ì ìš©ë©ë‹ˆë‹¤.';
+$lang['current'] = '현 ACL 규칙';
+$lang['where'] = '페ì´ì§€/네임스페ì´ìŠ¤';
+$lang['who'] = '사용ìž/그룹';
+$lang['perm'] = '접근 권한';
+$lang['acl_perm0'] = 'ì—†ìŒ';
+$lang['acl_perm1'] = 'ì½ê¸°';
+$lang['acl_perm2'] = '수정';
+$lang['acl_perm4'] = 'ìƒì„±';
+$lang['acl_perm8'] = '업로드';
+$lang['acl_perm16'] = '삭제';
+$lang['acl_new'] = '새 항목 추가';
+$lang['acl_mod'] = 'ì„ íƒ í•­ëª© 변경';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/lt/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/lt/lang.php
new file mode 100644
index 000000000..f11944746
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/lt/lang.php
@@ -0,0 +1,22 @@
+<?php
+/**
+ * lithuanian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Linas Valiukas <shirshegsm@gmail.com>
+ * @author audrius.klevas@gmail.com
+ * @author Arunas Vaitekunas <aras@fan.lt>
+ */
+$lang['admin_acl'] = 'Priėjimo Kontrolės Sąrašų valdymas';
+$lang['acl_group'] = 'GrupÄ—';
+$lang['acl_user'] = 'Vartotojas';
+$lang['acl_perms'] = 'Leidimai';
+$lang['page'] = 'Puslapis';
+$lang['namespace'] = 'Pavadinimas';
+$lang['btn_select'] = 'Rinktis';
+$lang['acl_perm1'] = 'Skaityti';
+$lang['acl_perm2'] = 'Redaguoti';
+$lang['acl_perm4'] = 'Sukurti';
+$lang['acl_perm8'] = 'Atsiųsti';
+$lang['acl_perm16'] = 'IÅ¡trinti';
+$lang['acl_new'] = 'Pridėti naują įrašą';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/lv/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/lv/help.txt
new file mode 100644
index 000000000..f570d798c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/lv/help.txt
@@ -0,0 +1,11 @@
+=== Īsa palīdzība ===
+
+Å ajÄ lapÄ var uzdot un noņemt tiesÄ«bas uz lapÄm un nodaļÄm.
+
+KreisajÄ pusÄ“ parÄdÄ«tas visas pieejamÄs nodaļas un lapas.
+
+FormÄ augÅ¡pusÄ“ var redzÄ“t un grozÄ«t norÄdÄ«tÄ lietotÄja vai grupas tiesÄ«bas .
+
+ApakÅ¡Ä tabulÄ parÄdÄ«ts visu tiesÄ«bu saraksts. To var lietot, lai Ätri mainÄ«tu vairÄkus pieejas tiesÄ«bu noteikumus.
+
+[[doku>acl|OfficiÄlajos piekļuves tiesÄ«bu noteikumu dokumentos]] var atrast izvÄ“rstu informÄciju, kÄ darbojas DokuWiki sistÄ“mas piekļuves tiesÄ«bu kontrole.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/lv/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/lv/lang.php
new file mode 100644
index 000000000..f478b32c6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/lv/lang.php
@@ -0,0 +1,35 @@
+<?php
+/**
+ * latvian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Aivars Miška <allefm@gmail.com>
+ */
+$lang['admin_acl'] = 'Piekļuves tiesību vadība';
+$lang['acl_group'] = 'Grupa';
+$lang['acl_user'] = 'LietotÄjs';
+$lang['acl_perms'] = 'Tiesības';
+$lang['page'] = 'Lapa';
+$lang['namespace'] = 'Nodaļa';
+$lang['btn_select'] = 'Izvēlēties';
+$lang['p_user_id'] = 'LietotÄjam <b class="acluser">%s</b> ir tiesÄ«bas <i>%s</i> lapu <b class="aclpage">%s</b> .';
+$lang['p_user_ns'] = 'LietotÄjam <b class="acluser">%s</b> nodaÄ¼Ä <b class="aclns">%s</b> ir tiesÄ«bas <i>%s</i>.';
+$lang['p_group_id'] = 'Grupas <b class="aclgroup">%s</b> biedriem ir tiesības <i>%s</i> lapu <b class="aclpage">%s</b>.';
+$lang['p_group_ns'] = 'Grupas <b class="aclgroup">%s</b> biedriem ir tiesības <i>%s</i> nodaļu <b class="aclns">%s</b>: .';
+$lang['p_choose_id'] = 'LÅ«dzu <b>ieraksti lietotÄju vai grupu</b> augstÄk norÄdÄ«tajÄ laukÄ, lai skatÄ«tu vai labotu tiesÄ«bas lapai <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'LÅ«dzu <b>ieraksti lietotÄju vai grupu</b> augstÄk norÄdÄ«tajÄ laukÄ, lai skatÄ«tu vai labotu tiesÄ«bas nodaļai <b class="aclpage">%s</b>.';
+$lang['p_inherited'] = 'IevÄ“ro: Å Ä«s tiesÄ«bas nav tieÅ¡i uzdotas, bet mantotas no citÄm grupÄm vai augstÄkÄm nodaļÄm. ';
+$lang['p_isadmin'] = 'IevÄ“ro: NorÄdÄ«tajai grupai vai lietotÄjam vienmÄ“r ir visas tiesÄ«bas, jo tas konfigurÄ“ts kÄ <i>superuser</i>.';
+$lang['p_include'] = 'AugstÄka atļauja iekļauj arÄ« zemÄkÄs tiesÄ«bas. IzveidoÅ¡anas, augÅ¡upielÄdÄ“Å¡anas un dzÄ“Å¡anas tiesÄ«bas attiecas tikai uz nodaļÄm, nevis lapÄm.';
+$lang['current'] = 'Patreizējo tiesību saraksts (ACL)';
+$lang['where'] = 'Lapa/nodaļa';
+$lang['who'] = 'LietotÄjs/grupa';
+$lang['perm'] = 'Tiesības';
+$lang['acl_perm0'] = 'nekÄdas';
+$lang['acl_perm1'] = 'lasīt';
+$lang['acl_perm2'] = 'labot';
+$lang['acl_perm4'] = 'izveidot';
+$lang['acl_perm8'] = 'augÅ¡upielÄdÄ“t';
+$lang['acl_perm16'] = 'dzēst';
+$lang['acl_new'] = 'pievienot jaunu Å¡Ä·irkli';
+$lang['acl_mod'] = 'labot Å¡Ä·irkli';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/mr/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/mr/help.txt
new file mode 100644
index 000000000..e8aa13b52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/mr/help.txt
@@ -0,0 +1,12 @@
+=== तà¥à¤µà¤°à¤¿à¤¤ मदत ===
+
+या पानावर तà¥à¤®à¤šà¥€ तà¥à¤®à¤šà¥à¤¯à¤¾ विकी मधील पाने किंवा नेमसà¥à¤ªà¥‡à¤¸ वरील परवानगà¥à¤¯à¤¾ बदलू शकता.
+
+डाविकडील मारà¥à¤œà¤¿à¤¨ मधे सरà¥à¤µ उपलबà¥à¤§ पाने आणि नेमसà¥à¤ªà¥‡à¤¸ दाखवले आहेत.
+
+वरील फॉरà¥à¤® वापरून तà¥à¤®à¤šà¥€ निवडलेलà¥à¤¯à¤¾ सदसà¥à¤¯ किंवा गटाचà¥à¤¯à¤¾ परवानगà¥à¤¯à¤¾ बदलू शकता.
+
+खालील टेबल मधे सधà¥à¤¯à¤¾ सेट असलेले नियम दिलेले आहेत.
+हे टेबल वापरून तà¥à¤®à¥à¤¹à¥€ चटकन हे नियम बदलू शकता.
+
+[[doku>acl| ACL वरील अधिकृत माहितीसंगà¥à¤°à¤¹ ]] वाचून तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ डॉकà¥à¤¯à¥à¤µà¤¿à¤•à¤¿à¤®à¤§à¥‡ परवानगीची वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾ कशी काम करते ते नीट समजेल. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/mr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/mr/lang.php
new file mode 100644
index 000000000..978df758a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/mr/lang.php
@@ -0,0 +1,37 @@
+<?php
+/**
+ * Marathi language file
+ *
+ * @author ghatothkach@hotmail.com
+ * @author Padmanabh Kulkarni <kulkarnipadmanabh@gmail.com>
+ * @author Padmanabh Kulkarni<kulkarnipadmanabh@gmail.com>
+ * @author shantanoo@gmail.com
+ */
+$lang['admin_acl'] = 'Access Control List वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤¨';
+$lang['acl_group'] = 'गट';
+$lang['acl_user'] = 'सदसà¥à¤¯';
+$lang['acl_perms'] = 'परवानगी \'चà¥à¤¯à¤¾ साठी';
+$lang['page'] = 'पान';
+$lang['namespace'] = 'नेमसà¥à¤ªà¥‡à¤¸';
+$lang['btn_select'] = 'निवडा';
+$lang['p_user_id'] = '<b class="acluser">%s</b> हà¥à¤¯à¤¾ सदसà¥à¤¯à¤¾à¤²à¤¾ सधà¥à¤¯à¤¾ <b class="aclpage">%s</b> या पानावर पà¥à¤¢à¥€à¤² परवानगà¥à¤¯à¤¾ आहेत : <i>%s</i>.';
+$lang['p_user_ns'] = '<b class="acluser">%s</b> या सदसà¥à¤¯à¤¾à¤²à¤¾ सधà¥à¤¯à¤¾ <b class="aclns">%s</b> या नेमसà¥à¤ªà¥‡à¤¸à¤µà¤° पà¥à¤¢à¥€à¤² परवानगà¥à¤¯à¤¾ आहेत : <i>%s</i>.';
+$lang['p_group_id'] = '<b class="aclgroup">%s</b> या गटाचà¥à¤¯à¤¾ सदसà¥à¤¯à¤¾à¤¨à¤¾ सधà¥à¤¯à¤¾ <b class="aclpage">%s</b> या पानावर पà¥à¤¢à¥€à¤² परवानगà¥à¤¯à¤¾ आहेत : <i>%s</i>.';
+$lang['p_group_ns'] = '<b class="aclgroup">%s</b> या गटाचà¥à¤¯à¤¾ सदसà¥à¤¯à¤¾à¤¨à¤¾ सधà¥à¤¯à¤¾ <b class="aclns">%s</b> या नेमसà¥à¤ªà¥‡à¤¸à¤µà¤° पà¥à¤¢à¥€à¤² परवानगà¥à¤¯à¤¾ आहेत : <i>%s</i>.';
+$lang['p_choose_id'] = 'वरील फॉरà¥à¤® मधे à¤à¤–ादà¥à¤¯à¤¾ <b>सदसà¥à¤¯ किंवा गटाचे </b> नाव टाकà¥à¤¨ <b class="aclpage">%s</b> या पानासाठी तà¥à¤¯à¤¾à¤‚चà¥à¤¯à¤¾ परवानगà¥à¤¯à¤¾ पाहू/बदलू शकता.';
+$lang['p_choose_ns'] = 'वरील फॉरà¥à¤® मधे à¤à¤–ादà¥à¤¯à¤¾ <b>सदसà¥à¤¯ किंवा गटाचे </b> नाव टाकà¥à¤¨ <b class="aclns">%s</b> या नेमसà¥à¤ªà¥‡à¤¸à¤¸à¤¾à¤ à¥€ तà¥à¤¯à¤¾à¤‚चà¥à¤¯à¤¾ परवानगà¥à¤¯à¤¾ पाहू/बदलू शकता.';
+$lang['p_inherited'] = 'टीप : हà¥à¤¯à¤¾ परवानगà¥à¤¯à¤¾ पà¥à¤°à¤¤à¥à¤¯à¤•à¥à¤· सेट केलà¥à¤¯à¤¾ नसून तà¥à¤¯à¤¾ इतर गट किंवा अधिक उचà¥à¤š नेमसà¥à¤ªà¥‡à¤¸ कडून वारसाहकà¥à¤•à¤¾à¤¨à¥‡ :) आलà¥à¤¯à¤¾ आहेत.';
+$lang['p_isadmin'] = 'टीप : निवडलेलà¥à¤¯à¤¾ सदसà¥à¤¯ किंवा गटाला कायम सरà¥à¤µ परवानगà¥à¤¯à¤¾ असतात कारण तो सà¥à¤ªà¤° सदसà¥à¤¯ मà¥à¤¹à¤£à¥à¤¨ सेट केला आहे.';
+$lang['p_include'] = 'उचà¥à¤š परवानगà¥à¤¯à¤¾à¤‚मधे तà¥à¤¯à¤¾à¤–ालिल परवानगà¥à¤¯à¤¾ अधà¥à¤¯à¤¾à¤¹à¥ƒà¤¤ असतात. कà¥à¤°à¤¿à¤à¤Ÿ, अपलोड आणि डिलीट परवानगà¥à¤¯à¤¾ फ़कà¥à¤¤ नामसमà¥à¤¹à¤¾à¤µà¤° (नेमसà¥à¤ªà¥‡à¤¸) लागू असतात, पानांवर नाही.';
+$lang['current'] = 'सदà¥à¤¯ ACL नियम';
+$lang['where'] = 'पान/नेमसà¥à¤ªà¥‡à¤¸';
+$lang['who'] = 'सदसà¥à¤¯/गट';
+$lang['perm'] = 'परवानगà¥à¤¯à¤¾';
+$lang['acl_perm0'] = 'काही नाही.';
+$lang['acl_perm1'] = 'वाचन';
+$lang['acl_perm2'] = 'संपादन';
+$lang['acl_perm4'] = 'निरà¥à¤®à¤¾à¤£';
+$lang['acl_perm8'] = 'अपलोड';
+$lang['acl_perm16'] = 'डिलीट';
+$lang['acl_new'] = 'नवीन à¤à¤‚टà¥à¤°à¥€ करा';
+$lang['acl_mod'] = 'à¤à¤‚टà¥à¤°à¥€ बदला';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ne/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ne/lang.php
new file mode 100644
index 000000000..6a29a9fa8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ne/lang.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Nepali language file
+ *
+ * @author Saroj Kumar Dhakal <lotusnagarkot@gmail.com>
+ * @author SarojKumar Dhakal <lotusnagarkot@yahoo.com>
+ * @author Saroj Dhakal<lotusnagarkot@yahoo.com>
+ */
+$lang['admin_acl'] = 'à¤à¤•à¥à¤¸à¥‡à¤¸ कनà¥à¤Ÿà¥à¤°à¥‹à¤² लिसà¥à¤Ÿ वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤¨';
+$lang['acl_group'] = 'समूह';
+$lang['acl_user'] = 'पà¥à¤°à¥‹à¤—करà¥à¤¤à¤¾';
+$lang['acl_perms'] = 'को लागि अनà¥à¤®à¤¤à¤¿';
+$lang['page'] = 'पृषà¥à¤ ';
+$lang['namespace'] = 'नेमसà¥à¤ªà¥‡à¤¸';
+$lang['btn_select'] = 'छानà¥à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['current'] = 'हालैको ACL नियमहरॠ';
+$lang['where'] = 'पृषà¥à¤  / नेमसà¥à¤ªà¥‡à¤¸';
+$lang['who'] = 'पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ / समूह ';
+$lang['perm'] = 'अनà¥à¤®à¤¤à¤¿';
+$lang['acl_perm0'] = 'कà¥à¤¨à¥ˆ पनि होइन';
+$lang['acl_perm1'] = 'पठन गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['acl_perm2'] = 'समà¥à¤ªà¤¾à¤¦à¤¨ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['acl_perm4'] = 'निरà¥à¤®à¤¾à¤£ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['acl_perm8'] = 'अपलोड गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['acl_perm16'] = 'मेटाउनà¥à¤¹à¥‹à¤¸à¥';
+$lang['acl_new'] = 'नयाठपà¥à¤°à¤µà¤¿à¤·à¥à¤ à¤¿ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['acl_mod'] = 'पà¥à¤°à¤µà¤¿à¤·à¥à¤ à¤¿ सचà¥à¤¯à¤¾à¤‰à¤¨à¥à¤¹à¥‹à¤¸à¥';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/nl/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/nl/help.txt
new file mode 100644
index 000000000..255f21ba0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/nl/help.txt
@@ -0,0 +1,11 @@
+=== Snelle hulp: ===
+
+Op deze pagina kun je bevoegdheden toevoegen en verwijderen voor namespaces en pagina's in je wiki.
+
+Het linkerpaneel geeft alle beschikbare namespaces en pagina's weer.
+
+In het formulier hierboven kun je bevoegdheden zien en aanpassen voor een selecteerde gebruiker of groep.
+
+In de tabel hieronder worden alle momenteel ingestelde toegangsregels weergegeven. Je kunt hier snel regels wijzigen of verwijderen.
+
+Lees de [[doku>acl|documentatie over ACLs]] om de mogelijkheden volledig te begrijpen.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/nl/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/nl/lang.php
new file mode 100644
index 000000000..d45bb5907
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/nl/lang.php
@@ -0,0 +1,45 @@
+<?php
+/**
+ * dutch language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author François Kooman <fkooman.tuxed.net>
+ * @author Jack van Klaren <dokuwiki@afentoe.xs4all.nl>
+ * @author Riny Heijdendael <riny@heijdendael.nl>
+ * @author Koen Huybrechts <huybkoen@gmail.com>
+ * @author Wouter Schoot <wouter@schoot.org>
+ * @author John de Graaff <john@de-graaff.net>
+ * @author Niels Schoot <niels.schoot@quintiq.com>
+ * @author Dion Nicolaas <dion@nicolaas.net>
+ * @author Danny Rotsaert <danny.rotsaert@edpnet.be>
+ * @author Marijn Hofstra hofstra.m@gmail.com
+ * @author Matthias Carchon webmaster@c-mattic.be
+ */
+$lang['admin_acl'] = 'Toegangsrechten';
+$lang['acl_group'] = 'Groep';
+$lang['acl_user'] = 'Gebruiker';
+$lang['acl_perms'] = 'Permissies voor';
+$lang['page'] = 'Pagina';
+$lang['namespace'] = 'Namespace';
+$lang['btn_select'] = 'Selecteer';
+$lang['p_user_id'] = 'Gebruiker <b class="acluser">%s</b> heeft momenteel de volgende bevoegdheden op pagina <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'Gebruiker <b class="acluser">%s</b> heeft momenteel de volgende bevoegdheden op namespace <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Leden van groep <b class="aclgroup">%s</b> hebben momenteel de volgende bevoegdheden op pagina <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Leden van groep <b class="aclgroup">%s</b>hebben momenteel de volgende bevoegdheden op namespace <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'Vul een <b>gebruiker of groep</b> in in het bovenstaande formulier om de bevoegdheden te bekijken of te bewerken voor de pagina <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'Vul een <b>gebruiker of groep</b> in in het bovenstaande formulier om de bevoegdheden te bekijken of te bewerken voor de namespace <b class="aclns">%s</b>.';
+$lang['p_inherited'] = 'Let op: Deze permissies zijn niet expliciet ingesteld maar overerfd van andere groepen of hogere namespaces.';
+$lang['p_isadmin'] = 'Let op: De geselecteerde groep of gebruiker heeft altijd volledige toegangsrechten omdat hij als superuser geconfigureerd is.';
+$lang['p_include'] = 'Hogere permissies bevatten ook de lagere. Aanmaken, uploaden en verwijderen gelden alleen voor namespaces, niet voor pagina\'s.';
+$lang['current'] = 'Huidige ACL regels';
+$lang['where'] = 'Pagina/namespace';
+$lang['who'] = 'Gebruiker/Groep';
+$lang['perm'] = 'Bevoegdheden';
+$lang['acl_perm0'] = 'Geen';
+$lang['acl_perm1'] = 'Lezen';
+$lang['acl_perm2'] = 'Bewerken';
+$lang['acl_perm4'] = 'Aanmaken';
+$lang['acl_perm8'] = 'Uploaden';
+$lang['acl_perm16'] = 'Verwijderen';
+$lang['acl_new'] = 'Nieuwe regel toevoegen';
+$lang['acl_mod'] = 'Regel aanpassen';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/no/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/no/help.txt
new file mode 100644
index 000000000..f02b6bdbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/no/help.txt
@@ -0,0 +1,11 @@
+===Lynhjelp===
+
+PÃ¥ denne siden kan du legge til og fjerne tillatelser for navnerom og sider i din wiki.
+
+Venstre panel viser alle tilgjengelige navnerom og sider.
+
+Skjemaet over tillater deg å se og modifisere tillatelser for en valgt bruker eller gruppe.
+
+I tabellen nedenfor vises alle nærværende satte adgangskontroll-regler. Du kan bruke den til raskt å slette eller endre mange regler i slengen.
+
+Å lese [[doku>acl|den offisielle dokumentasjonen for ACL]] kan hjelpe deg å fullt ut forstå hvordan adgangskontroll fungerer i DokuWiki.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/no/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/no/lang.php
new file mode 100644
index 000000000..cd9e2edfb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/no/lang.php
@@ -0,0 +1,46 @@
+<?php
+/**
+ * Norwegian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Reidar Mosvold <Reidar.Mosvold@hit.no>
+ * @author Jorge Barrera Grandon <jorge@digitalwolves.org>
+ * @author Thomas Nygreen <nygreen@gmail.com>
+ * @author Arild Burud <arildb@met.no>
+ * @author Torkill Bruland <torkar-b@online.no>
+ * @author Rune M. Andersen <rune.andersen@gmail.com>
+ * @author Jakob Vad Nielsen (me@jakobnielsen.net)
+ * @author Kjell Tore Næsgaard <kjell.t.nasgaard@ntnu.no>
+ * @author Knut Staring <knutst@gmail.com>
+ * @author Lisa Ditlefsen <lisa@vervesearch.com>
+ * @author Erik Pedersen <erik.pedersen@shaw.ca>
+ * @author Erik Bjørn Pedersen <erik.pedersen@shaw.ca>
+ */
+$lang['admin_acl'] = 'Administrasjon av lister for adgangskontroll (ACL)';
+$lang['acl_group'] = 'Gruppe';
+$lang['acl_user'] = 'Bruker';
+$lang['acl_perms'] = 'Rettigheter for';
+$lang['page'] = 'Side';
+$lang['namespace'] = 'Navnerom';
+$lang['btn_select'] = 'Velg';
+$lang['p_user_id'] = 'Bruker <b class="acluser">%s</b> har for tiden følgende tillatelser i for siden <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'Bruker <b class="acluser">%s</b> har for tiden følgende tillatelser i navnerom <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Medlemmer av gruppe <b class="aclgroup">%s</b> har for tiden følgende tillatelser i for siden <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Medlemmer av gruppe <b class="aclgroup">%s</b> har for tiden følgende tillatelser i navnerom <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = '<b>Før inn en bruker eller gruppe</b> i skjemaet over for å vise eller redigere tillatelser satt for siden <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = '<b>Før inn en bruker eller gruppe</b> i skjemaet over for å vise eller redigere tillatelser satt for navnerommet <b class="aclns">%s</b>.';
+$lang['p_inherited'] = 'Merk: Disse tillatelser ble ikke eksplisitt satt, men ble arvet fra andre grupper eller høyere navnerom.';
+$lang['p_isadmin'] = 'Merk: Den valgte gruppen eller bruker har altid fulle tillatelser fordi vedkommende er konfigurert som superbruker.';
+$lang['p_include'] = 'Høyere tillgangsrettigheter inkluderer lavere. Rettigheter for å opprette, laste opp og slette gjelder bare for navnerom, ikke enkeltsider.';
+$lang['current'] = 'NÃ¥gjeldende ACL-regler';
+$lang['where'] = 'Side/Navnerom';
+$lang['who'] = 'Bruker/Gruppe';
+$lang['perm'] = 'Tillatelser';
+$lang['acl_perm0'] = 'Ingen';
+$lang['acl_perm1'] = 'Lese';
+$lang['acl_perm2'] = 'Redigere';
+$lang['acl_perm4'] = 'Lage';
+$lang['acl_perm8'] = 'Laste opp';
+$lang['acl_perm16'] = 'Slette';
+$lang['acl_new'] = 'Legg til ny oppføring';
+$lang['acl_mod'] = 'Modifiser oppføring';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pl/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pl/help.txt
new file mode 100644
index 000000000..331fd2a7a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pl/help.txt
@@ -0,0 +1,11 @@
+=== Pomoc ===
+
+Na tej stronie możesz zmienić uprawnienia do stron i katalogów w wiki.
+
+Lewy panel pokazuje wszystkie dostępne katalogi i strony.
+
+Formularz powyżej pozwala wyświetlać uprawnienia wybranego użytkownika oraz grupy.
+
+W tabeli poniżej znajdują się wszystkie aktywne reguły dotyczące uprawnień.
+
+Więcej informacji na temat uprawnień w DokuWiki możesz znaleźć w [[doku>acl|oficjalnej dokumentacji uprawnień]].
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pl/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pl/lang.php
new file mode 100644
index 000000000..63a870c50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pl/lang.php
@@ -0,0 +1,38 @@
+<?php
+/**
+ * polish language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Grzegorz Żur <grzegorz.zur@gmail.com>
+ * @author Mariusz Kujawski <marinespl@gmail.com>
+ * @author Maciej Kurczewski <pipijajko@gmail.com>
+ * @author SÅ‚awomir Boczek <slawkens@gmail.com>
+ */
+$lang['admin_acl'] = 'ZarzÄ…dzanie uprawnieniami';
+$lang['acl_group'] = 'Grupa';
+$lang['acl_user'] = 'Użytkownik';
+$lang['acl_perms'] = 'Uprawnienia użytkownika';
+$lang['page'] = 'Strona';
+$lang['namespace'] = 'Katalog';
+$lang['btn_select'] = 'Wybierz';
+$lang['p_user_id'] = 'Użytkownik <b class="acluser">%s</b> posiada następujące uprawnienia do strony <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'Użytkownik <b class="acluser">%s</b> posiada następujące uprawnienia do katalogów <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Członkowie grupy <b class="aclgroup">%s</b> posiadają następujące uprawnienia do strony <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Członkowie grupy <b class="aclgroup">%s</b> posiadają następujące uprawnienia do strony <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'Podaj <b>nazwę użytkownika lub grupy</b> w powyższym formularzu, by wyświetlić lub zmienić uprawnienia do strony <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'Podaj <b>nazwę użytkownika lub grupy</b> w powyższym formularzu, by wyświetlić lub zmienić uprawnienia do katalogu <b class="aclns">%s</b>.';
+$lang['p_inherited'] = 'Uwaga: Uprawnienia nie zostały nadane wprost ale są dziedziczone z grupy lub katalogu.';
+$lang['p_isadmin'] = 'Uwaga: Wybrana grupa lub użytkownika zawsze dysponuje pełnymi uprawnieniami ponieważ posiada uprawnienia administratora.';
+$lang['p_include'] = 'Szersze uprawnienia zawierają węższe. Tworzenie, przesyłanie plików oraz usuwanie mają znaczenie tylko dla katalogów, nie dla stron.';
+$lang['current'] = 'Aktywne reguły zarządzania uprawnieniami';
+$lang['where'] = 'Strona/Katalog';
+$lang['who'] = 'Użytkownik/Grupa';
+$lang['perm'] = 'Uprawnienie';
+$lang['acl_perm0'] = 'Żadne';
+$lang['acl_perm1'] = 'Czytanie';
+$lang['acl_perm2'] = 'Zmiana';
+$lang['acl_perm4'] = 'Tworzenie';
+$lang['acl_perm8'] = 'Przesyłanie plików';
+$lang['acl_perm16'] = 'Usuwanie';
+$lang['acl_new'] = 'Dodaj nowy wpis';
+$lang['acl_mod'] = 'Zmień wpis';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt-br/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt-br/help.txt
new file mode 100644
index 000000000..b2a49a90d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt-br/help.txt
@@ -0,0 +1,11 @@
+=== Ajuda rápida: ===
+
+Nessa página você pode adicionar e remover permissões para espaços de nomes e páginas do seu wiki.
+
+O painel à esquerda mostra todos os espaços de nomes e páginas disponíveis.
+
+O formulário acima permite a visualização e modificação das permissões de um determinado usuário ou grupo.
+
+Na tabela abaixo são exibidas todas as regras de controle de acesso definidas. Você pode usá-la para excluir ou mudar rapidamente várias regras.
+
+A leitura da [[doku>acl|documentação oficial sobre ACL]] pode ajudar a compreender melhor como o controle de acessos funciona no DokuWiki.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt-br/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt-br/lang.php
new file mode 100644
index 000000000..82a19b290
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt-br/lang.php
@@ -0,0 +1,47 @@
+<?php
+/**
+ * Brazilian Portuguese language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Luis Fernando Enciso <lfenciso@certto.com.br>
+ * @author Alauton/Loug
+ * @author Frederico Gonçalves Guimarães <frederico@teia.bio.br>
+ * @author Felipe Castro <fefcas@gmail.com>
+ * @author Lucien Raven <lucienraven@yahoo.com.br>
+ * @author Enrico Nicoletto <liverig@gmail.com>
+ * @author Flávio Veras <flaviove@gmail.com>
+ * @author Jeferson Propheta <jeferson.propheta@gmail.com>
+ * @author jair.henrique@gmail.com
+ * @author Luis Dantas <luis@dantas.com>
+ * @author Frederico Guimarães <frederico@teia.bio.br>
+ * @author Jair Henrique <jair.henrique@gmail.com>
+ * @author Luis Dantas <luisdantas@gmail.com>
+ */
+$lang['admin_acl'] = 'Administração da Lista de Controles de Acesso';
+$lang['acl_group'] = 'Grupo';
+$lang['acl_user'] = 'Usuário';
+$lang['acl_perms'] = 'Permissões para';
+$lang['page'] = 'Página';
+$lang['namespace'] = 'Espaço de nomes';
+$lang['btn_select'] = 'Selecionar';
+$lang['p_user_id'] = 'O usuário <b class="acluser">%s</b> possui as seguintes permissões na página <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'O usuário <b class="acluser">%s</b> possui as seguintes permissões no espaço de nomes <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Os membros do grupo <b class="aclgroup">%s</b> possuem as seguintes permissões na página <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Os membros do grupo <b class="aclgroup">%s</b> possuem as seguintes permissões no espaço de nomes <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'Por favor <b>digite um usuário ou grupo</b> no formulário acima para ver ou editar as permissões para a página <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'Por favor <b>digite um usuário ou grupo</b> no formulário acima para ver ou editar as permissões para o espaço de nomes <b class="aclpage">%s</b>.';
+$lang['p_inherited'] = 'Nota: Essas permissões não foram definidas explicitamente, mas sim herdadas de outros grupos ou espaço de nomes superiores.';
+$lang['p_isadmin'] = 'Nota: O grupo ou usuário selecionado sempre tem permissões completas, porque ele está configurado como superusuário.';
+$lang['p_include'] = 'As permissões superiores incluem as inferiores. Permissões para Criar, Enviar e Apagar aplicam-se apenas aos espaços de nomes e não às páginas.';
+$lang['current'] = 'Regras atuais da ACL';
+$lang['where'] = 'Página/Espaço de nomes';
+$lang['who'] = 'Usuário/Grupo';
+$lang['perm'] = 'Permissões';
+$lang['acl_perm0'] = 'Nenhuma';
+$lang['acl_perm1'] = 'Ler';
+$lang['acl_perm2'] = 'Editar';
+$lang['acl_perm4'] = 'Criar';
+$lang['acl_perm8'] = 'Enviar';
+$lang['acl_perm16'] = 'Excluir';
+$lang['acl_new'] = 'Adicionar nova entrada';
+$lang['acl_mod'] = 'Modificar a entrada';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt/help.txt
new file mode 100644
index 000000000..cf4619deb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt/help.txt
@@ -0,0 +1,9 @@
+=== Auxílio Rápido ===
+
+Nesta página podes adicionar e remover permissões para espaço de nomes e páginas no seu wiki.
+
+O painel esquerdo exibe todos os espaço de nomes e páginas. O formulario acima permite a visualização e modificar as permissões de um selecionado utilizador ou grupo.
+
+Na tabela inferior são exibidas todas as actuais regras de controle de acesso. Podes utilisá-la para excluir ou mudar rapidamente várias regras ao mesmo tempo.
+
+A leitura da [[doku>acl|documentação oficial acerca ACL]] pode ajudar a compreender melhor como o controle de acessos funciona no DokuWiki.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt/lang.php
new file mode 100644
index 000000000..6e094fd74
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt/lang.php
@@ -0,0 +1,39 @@
+<?php
+/**
+ * Portuguese language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author José Carlos Monteiro <jose.c.monteiro@netcabo.pt>
+ * @author José Monteiro <Jose.Monteiro@DoWeDo-IT.com>
+ * @author Enrico Nicoletto <liverig@gmail.com>
+ * @author Fil <fil@meteopt.com>
+ * @author André Neves <drakferion@gmail.com>
+ */
+$lang['admin_acl'] = 'Gestão de ACLs';
+$lang['acl_group'] = 'Grupo';
+$lang['acl_user'] = 'Utilizador';
+$lang['acl_perms'] = 'Permissão para';
+$lang['page'] = 'Documento';
+$lang['namespace'] = 'Namespace';
+$lang['btn_select'] = 'Selecionar';
+$lang['p_user_id'] = 'O utilizador <b class="acluser">%s</b> tem as seguintes permissões na página <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'O utilizador <b class="acluser">%s</b> tem as seguintes permissões no espaço de nomes <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Os membros do grupo <b class="aclgroup">%s</b> têm as seguintes permissões na página <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Os membros do grupo <b class="aclgroup">%s</b> têm as seguintes permissões no espaço de nomes <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'Por favor <b>digite um utilizador ou grupo</b> no formulário acima para ver ou editar as permissões para a página <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'Por favor <b>digite um utilizador ou grupo</b> no formulário acima para ver ou editar as permissões para o espaço de nomes <b class="aclpage">%s</b>.';
+$lang['p_inherited'] = 'Nota: Essas permissões não foram definidas explicitamente, mas sim herdadas de outros grupos ou espaço de nomes superiores.';
+$lang['p_isadmin'] = 'Nota: O grupo ou utilizador seleccionado tem sempre permissões completas, porque ele está configurado como superutilizador.';
+$lang['p_include'] = 'As permissões superiores incluem as inferiores. Permissões para Criar, Enviar e Apagar aplicam-se apenas aos espaços de nomes e não às páginas.';
+$lang['current'] = 'Regras Actuais ACL';
+$lang['where'] = 'Página/Espaço de Nomes';
+$lang['who'] = 'Utilizador/Grupo';
+$lang['perm'] = 'Permissões';
+$lang['acl_perm0'] = 'Nenhum';
+$lang['acl_perm1'] = 'Ler';
+$lang['acl_perm2'] = 'Editar';
+$lang['acl_perm4'] = 'Criar';
+$lang['acl_perm8'] = 'Carregar';
+$lang['acl_perm16'] = 'Remover';
+$lang['acl_new'] = 'Adicionar nova entrada';
+$lang['acl_mod'] = 'Modificar Entrada';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ro/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ro/help.txt
new file mode 100644
index 000000000..3f762613c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ro/help.txt
@@ -0,0 +1,11 @@
+=== Quick Help: ===
+
+Pe această pagină puteţi adăuga şi elimina autorizaţiile pentru spaţiile de nume şi paginile din wiki.
+
+Panoul din stânga afişează toate spaţiile de nume şi paginile disponibile.
+
+Formularul de sus vă permite să vedeţi şi să modificaţi autorizaţiile unui anume utilizator sau grup.
+
+In tabelul de jos sunt arătate toate regulile de control a accesului setate. Îl puteţi folosi pentru a şterge sau modifica rapid mai multe reguli.
+
+Consultarea [[doku>acl|official documentation on ACL]] vă poate ajuta să înţelegeţi deplin cum funcţionează controlul accesului în DocuWiki. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ro/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ro/lang.php
new file mode 100644
index 000000000..296baa291
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ro/lang.php
@@ -0,0 +1,39 @@
+<?php
+/**
+ * Romanian language file
+ *
+ * @author Sergiu Baltariu <s_baltariu@yahoo.com>
+ * @author s_baltariu@yahoo.com
+ * @author Emanuel-Emeric Andrasi <n30@mandrivausers.ro>
+ * @author Emanuel-Emeric Andrași <n30@mandrivausers.ro>
+ * @author Emanuel-Emeric AndraÅŸi <em.andrasi@mandrivausers.ro>
+ * @author Emanuel-Emeric Andrasi <em.andrasi@mandrivausers.ro>
+ */
+$lang['admin_acl'] = 'Managementul Listei de Control a Accesului';
+$lang['acl_group'] = 'Grup';
+$lang['acl_user'] = 'Utilizator';
+$lang['acl_perms'] = 'Autorizare pentru';
+$lang['page'] = 'Pagina';
+$lang['namespace'] = 'Spaţiu de nume';
+$lang['btn_select'] = 'Selectează';
+$lang['p_user_id'] = 'Utilizatorul <b class="acluser">%s</b> are următoarele autorizaţii pe pagină <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'Utilizatorul <b class="acluser">%s</b> are următoarele autorizaţii pe spaţiul de nume <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Membrii grupului <b class="aclgroup">%s</b> au următoarele autorizaţii pe pagină <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Membrii grupului <b class="aclgroup">%s</b> au următoarele autorizaţii pe spaţiul de nume <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = '<b>Introduceţi un utilizator sau un grup</b> în formularul de mai sus pentru a vizualiza sau edita autorizaţiile paginii <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = '<b>Introduceţi un utilizator sau un grup</b> în formularul de mai sus pentru a vizualiza sau edita autorizaţiile spaţiului de nume <b class="aclns">%s</b>.';
+$lang['p_inherited'] = 'Notă: Aceste autorizaţii nu au fost setate explicit ci au fost moştenite de la alte grupuri sau spaţii de nume superioare ierarhic.';
+$lang['p_isadmin'] = 'Notă: Grupul sau utilizatorul selectat are intotdeauna toate autorizatiile întrucât este configurat ca superutilizator.';
+$lang['p_include'] = 'Permisiunile superioare le includ pe cele inferioare. Permisiunile de Creare, Upload şi Ştergere se aplică doar numelor de spaţiu, nu paginilor.';
+$lang['current'] = 'Reguli ACL actuale';
+$lang['where'] = 'Pagină/Spaţiu de nume';
+$lang['who'] = 'Utilizator/Grup';
+$lang['perm'] = 'Autorizaţii';
+$lang['acl_perm0'] = 'Nici una';
+$lang['acl_perm1'] = 'Citire';
+$lang['acl_perm2'] = 'Editare';
+$lang['acl_perm4'] = 'Creare';
+$lang['acl_perm8'] = 'Încărcare';
+$lang['acl_perm16'] = 'Åžtergere';
+$lang['acl_new'] = 'Adaugă intrare nouă';
+$lang['acl_mod'] = 'Modifică intrare';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ru/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ru/help.txt
new file mode 100644
index 000000000..f969151fe
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ru/help.txt
@@ -0,0 +1,11 @@
+=== ÐšÑ€Ð°Ñ‚ÐºÐ°Ñ Ð¡Ð¿Ñ€Ð°Ð²ÐºÐ°: ===
+
+Ðа Ñтой Ñтранице вы можете добавить или удалить права доÑтупа к проÑтранÑтвам имён и Ñтраницам вашей вики.
+
+Ðа панели Ñлева отображены доÑтупные проÑтранÑтва имён и Ñтраницы.
+
+Форма выше позволÑет вам проÑмотреть и изменить права доÑтупа Ð´Ð»Ñ Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ð¾Ð³Ð¾ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð»Ð¸ группы.
+
+Текущие права доÑтупа отображены в таблице ниже. Ð’Ñ‹ можете иÑпользовать её Ð´Ð»Ñ Ð±Ñ‹Ñтрого ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð°Ð²Ð¸Ð».
+
+Прочтение [[doku>acl|официальной документации по ACL]] может помочь вам в полном понимании работы ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð°Ð²Ð°Ð¼Ð¸ доÑтупа в DokuWiki.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ru/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ru/lang.php
new file mode 100644
index 000000000..496e67510
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ru/lang.php
@@ -0,0 +1,42 @@
+<?php
+/**
+ * Russian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Denis Simakov <akinoame1@gmail.com>
+ * @author Змей ЭтерийÑкий evil_snake@eternion.ru
+ * @author Hikaru Nakajima <jisatsu@mail.ru>
+ * @author Alexei Tereschenko <alexeitlex@yahoo.com>
+ * @author Irina Ponomareva irinaponomareva@webperfectionist.com
+ * @author Alexander Sorkin <kibizoid@gmail.com>
+ * @author Kirill Krasnov <krasnovforum@gmail.com>
+ * @author Vlad Tsybenko <vlad.development@gmail.com>
+ */
+$lang['admin_acl'] = 'Управление ÑпиÑками ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð´Ð¾Ñтупа';
+$lang['acl_group'] = 'Группа';
+$lang['acl_user'] = 'Пользователь';
+$lang['acl_perms'] = 'Права доÑтупа длÑ';
+$lang['page'] = 'Страница';
+$lang['namespace'] = 'ПроÑтранÑтво имен';
+$lang['btn_select'] = 'Выбрать';
+$lang['p_user_id'] = 'Ð¡ÐµÐ¹Ñ‡Ð°Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒ <b class="acluser">%s</b> имеет Ñледующие права на доÑтуп к Ñтранице <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'Ð¡ÐµÐ¹Ñ‡Ð°Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒ <b class="acluser">%s</b> имеет Ñледующие права на доÑтуп к проÑтранÑтву имён <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Ð¡ÐµÐ¹Ñ‡Ð°Ñ Ñ‡Ð»ÐµÐ½Ñ‹ группы <b class="aclgroup">%s</b> имеют Ñледующие права на доÑтуп к Ñтранице <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Ð¡ÐµÐ¹Ñ‡Ð°Ñ Ñ‡Ð»ÐµÐ½Ñ‹ группы <b class="aclgroup">%s</b> cимеют Ñледующие права на доÑтуп к проÑтранÑтву имён <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'ПожалуйÑта, <b>введите Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð»Ð¸ группу</b> в форме выше, чтобы проÑмотреть или отредактировать права на доÑтуп к Ñтранице <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'ПожалуйÑта, <b>введите Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð»Ð¸ группу</b> в форме выше, чтобы проÑмотреть или отредактировать права на доÑтуп к проÑтранÑтву имён <b class="aclns">%s</b>.';
+$lang['p_inherited'] = 'Замечание: Эти права доÑтупа не были заданы Ñвно, а были унаÑледованы от других групп или проÑтранÑтв имён более выÑокого порÑдка.';
+$lang['p_isadmin'] = 'Замечание: Выбранный пользователь вÑегда имеет полные права так, как он ÑвлÑетÑÑ Ñуперпользователем.';
+$lang['p_include'] = 'Более выÑокие права доÑтупа включают в ÑÐµÐ±Ñ Ð±Ð¾Ð»ÐµÐµ низкие. Права доÑтупа Создание, Загрузка и Удаление отноÑÑÑ‚ÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ к проÑтранÑтвам имён, а не к Ñтраницам.';
+$lang['current'] = 'Текущие права ACL';
+$lang['where'] = 'Страница/ПроÑтранÑтво имён';
+$lang['who'] = 'Пользователь/Группа';
+$lang['perm'] = 'Права доÑтупа';
+$lang['acl_perm0'] = 'Ðет доÑтупа';
+$lang['acl_perm1'] = 'Чтение';
+$lang['acl_perm2'] = 'Правка';
+$lang['acl_perm4'] = 'Создание';
+$lang['acl_perm8'] = 'Загрузка файлов';
+$lang['acl_perm16'] = 'Удаление';
+$lang['acl_new'] = 'Добавить новую запиÑÑŒ';
+$lang['acl_mod'] = 'Отредактировать запиÑÑŒ';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sk/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sk/help.txt
new file mode 100644
index 000000000..1167bf5e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sk/help.txt
@@ -0,0 +1,11 @@
+=== Krátka nápoveda: ===
+
+Na tejto stránke môžete pridávať alebo rušiť oprávnenia pre menné priestory a stránky vo Vašej wiki.
+
+Ľavý panel zobrazuje všetky dostupné menné priestory a stránky.
+
+Formulár zobrazený vyššie Vam dovoľuje prehliadať a meniť oprávnenia pre vybraného používateľa alebo skupinu.
+
+V tabuľke nižšie sú zobrazené všetky aktuálne prístupové pravidlá. Môžete v nej rýchlo rušiť alebo meniť viacero pravidiel naraz.
+
+PreÄítanie [[doku>acl|oficiálnej dokumentácie ACL]] Vám môže pomôcÅ¥ plne pochopiÅ¥ spôsob ako fungujú prístupové pravidlá (oprávnenia) v DokuWiki. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sk/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sk/lang.php
new file mode 100644
index 000000000..398f8c63d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sk/lang.php
@@ -0,0 +1,38 @@
+<?php
+/**
+ * Slovak language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Ondrej Vegh <ov@vsieti.sk>
+ * @author Michal Mesko <michal.mesko@gmail.com>
+ * @author exusik@gmail.com
+ * @author Martin Michalek <michalek.dev@gmail.com>
+ */
+$lang['admin_acl'] = 'Správa zoznamu prístupových práv';
+$lang['acl_group'] = 'Skupina';
+$lang['acl_user'] = 'Užívateľ';
+$lang['acl_perms'] = 'Práva pre';
+$lang['page'] = 'Stránka';
+$lang['namespace'] = 'Menný priestor';
+$lang['btn_select'] = 'Vybrať';
+$lang['p_user_id'] = 'Používateľ <b class="acluser">%s</b> má aktuálne nasledujúce oprávnenia k stránke <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'Používateľ <b class="acluser">%s</b> má aktuálne nasledujúce oprávnenia v mennom priestore <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Členovia skupiny <b class="aclgroup">%s</b> majú aktuálne nasledujúce oprávnenia k stránke <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Členovia skupiny <b class="aclgroup">%s</b> majú aktuálne nasledujúce oprávnenia v mennom priestore <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'Prosím <b>zadajte používateľa alebo skupinu</b> do formulára zobrazeného vyššie, aby ste mohli prezerať alebo meniť oprávnenia k stránke <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'Prosím <b>zadajte používateľa alebo skupinu</b> do formulára zobrazeného vyššie, aby ste mohli prezerať alebo meniť oprávnenia v mennom priestore <b class="aclns">%s</b>.';
+$lang['p_inherited'] = 'Poznámka: Tieto oprávnenia neboli nastavené explicitne, ale boli odvodené z inej skupiny alebo nadradeného menného priestoru.';
+$lang['p_isadmin'] = 'Poznámka: Vybraná skupina alebo používateľ má vždy najvyššie oprávnenia, pretože je vedená/vedený ako správca.';
+$lang['p_include'] = 'Vyššie oprávnenia zahŕňajú nižšie. Oprávnenie Vytvoriť, Nahrať a Zmazať sa vzťahujú iba k menným priestorom, nie ku stránkam.';
+$lang['current'] = 'Aktuálne pravidlá prístupu (ACL)';
+$lang['where'] = 'Stránka/Menný priestor';
+$lang['who'] = 'Používateľ/Skupina';
+$lang['perm'] = 'Povolenia';
+$lang['acl_perm0'] = 'Žiadne';
+$lang['acl_perm1'] = 'Čítať';
+$lang['acl_perm2'] = 'Zmeniť';
+$lang['acl_perm4'] = 'Vytvoriť';
+$lang['acl_perm8'] = 'Nahrať súbor';
+$lang['acl_perm16'] = 'Zmazať';
+$lang['acl_new'] = 'Pridať nový záznam';
+$lang['acl_mod'] = 'Upraviť záznam';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sl/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sl/lang.php
new file mode 100644
index 000000000..32141fbce
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sl/lang.php
@@ -0,0 +1,21 @@
+<?php
+/**
+ * Slovenian language file
+ *
+ * @author Dejan Levec <webphp@gmail.com>
+ * @author BoÅ¡tjan SeniÄar <senicar@gmail.com>
+ */
+$lang['acl_group'] = 'Skupina';
+$lang['acl_user'] = 'Uporabnik';
+$lang['acl_perms'] = 'Dovoljenja za';
+$lang['page'] = 'Stran';
+$lang['btn_select'] = 'Izberi';
+$lang['who'] = 'Uporabnik/Skupina';
+$lang['perm'] = 'Dovoljenja';
+$lang['acl_perm1'] = 'Preberi';
+$lang['acl_perm2'] = 'Uredi';
+$lang['acl_perm4'] = 'Ustvari';
+$lang['acl_perm8'] = 'Naloži';
+$lang['acl_perm16'] = 'Zbriši';
+$lang['acl_new'] = 'Dodaj nov zapis';
+$lang['acl_mod'] = 'Spremeni zapis';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sr/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sr/help.txt
new file mode 100644
index 000000000..0ec8921d4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sr/help.txt
@@ -0,0 +1,11 @@
+=== Приручна помоћ: ===
+
+Ðа овој Ñтрани можете додати или уклонити дозволе за Ñтранице и именÑке проÑторе на Вашем викију.
+
+Леви панел приказује Ñве доÑтупне именÑке проÑторе и Ñтранице.
+
+Формулар изнад омогућава приказ и измену дозвола за одабране кориÑнике или групе.
+
+У табели иÑпод Ñу приказане Ñве тренутно поÑтављене дозволе. Можете је кориÑтити за брзо бриÑање или измену више правила.
+
+Читање [[doku>acl|званичне документације о ACL]] Вам може помоћи у потпуном разумевању рада дозвола приÑтупа у DokuWiki-ју.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sr/lang.php
new file mode 100644
index 000000000..6e1649992
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sr/lang.php
@@ -0,0 +1,37 @@
+<?php
+/**
+ * serbian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Filip Brcic <brcha@users.sourceforge.net>
+ * @author Иван Петровић petrovicivan@ubuntusrbija.org
+ * @author Ivan Petrovic <petrovicivan@ubuntusrbija.org>
+ */
+$lang['admin_acl'] = 'Управљање лиÑтом контроле приÑтупа';
+$lang['acl_group'] = 'Група';
+$lang['acl_user'] = 'КориÑник';
+$lang['acl_perms'] = 'Дозволе за';
+$lang['page'] = 'Страница';
+$lang['namespace'] = 'ИменÑки проÑтор';
+$lang['btn_select'] = 'Одабери';
+$lang['p_user_id'] = 'КориÑник <b class="acluser">%s</b> тренутно има Ñледеће дозволе за ову Ñтраницу <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'КориÑник <b class="acluser">%s</b> тренутно има Ñледеће дозволе за овај именÑки проÑтор <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Чланови групе <b class="acluser">%s</b> тренутно имају Ñледеће дозволе за ову Ñтраницу <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Чланови групе <b class="acluser">%s</b> тренутно имају Ñледеће дозволе за овај именÑки проÑтор <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'Молим Ð’Ð°Ñ <b>унеÑите кориÑника или групу</b> у формулар изнад да биÑте приказали или изменили дозволе за Ñтраницу <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'Молим Ð’Ð°Ñ <b>унеÑите кориÑника или групу</b> у формулар изнад да биÑте приказали или изменили дозволе за именÑки проÑтор <b class="aclpage">%s</b>.';
+$lang['p_inherited'] = 'Ðапомена: Ове дозволе Ñе не поÑтављају екÑплицитно већ Ñамо тамо где Ñе не Ñударају Ñа оÑталим групама или вишем иманÑком проÑтору.';
+$lang['p_isadmin'] = 'Ðапомена: Одабран кориÑник или група има увек пуне дозволе јер је поÑтављен за ÑуперкориÑника.';
+$lang['p_include'] = 'Више дозволе укључују ниже. Дозволе одавања, Ñлања и бриÑања ће бити примењене Ñамо на именÑке проÑторе, не и на Ñтране.';
+$lang['current'] = 'Тренутна правила проÑтупа';
+$lang['where'] = 'Страница/ИменÑки проÑтор';
+$lang['who'] = 'КориÑник/Група';
+$lang['perm'] = 'Дозволе';
+$lang['acl_perm0'] = 'Ðишта';
+$lang['acl_perm1'] = 'Читање';
+$lang['acl_perm2'] = 'Измена';
+$lang['acl_perm4'] = 'Прављење';
+$lang['acl_perm8'] = 'Слање';
+$lang['acl_perm16'] = 'БриÑање';
+$lang['acl_new'] = 'Додај нови уноÑ';
+$lang['acl_mod'] = 'Измени уноÑ';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sv/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sv/help.txt
new file mode 100644
index 000000000..5ba770fa0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sv/help.txt
@@ -0,0 +1,8 @@
+=== Hjälp ===
+På den här sidan kan du lägga till och ta bort åtkomsträttigheter för namnrymder och enstaka sidor i din wiki.
+
+Till vänster visas alla tillgängliga namnrymder och sidor du kan välja. I formuläret ovanför kan du sedan välja användare eller grupp för vilken åtkomsträttigheterna ska visas eller ändras.
+
+Tabellen nedanför visar samtliga uppsatta regler för åtkomsträttigheter. Den kan du använda för att snabbt ta bort eller ändra flera regler på en gång.
+
+Läs gärna [[doku>acl|den officiella dokumentationen för ACL]] som kan hjälpa dig till fullo förstå hur åtkomsträttigheter fungerar i DokuWiki. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sv/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sv/lang.php
new file mode 100644
index 000000000..b5fd3b866
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sv/lang.php
@@ -0,0 +1,46 @@
+<?php
+/**
+ * swedish language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Per Foreby <per@foreby.se>
+ * @author Nicklas Henriksson <nicklas[at]nihe.se>
+ * @author HÃ¥kan Sandell <hakan.sandell[at]mydata.se>
+ * @author Dennis Karlsson
+ * @author Tormod Otter Johansson <tormod@latast.se>
+ * @author emil@sys.nu
+ * @author Pontus Bergendahl <pontus.bergendahl@gmail.com>
+ * @author Tormod Johansson tormod.otter.johansson@gmail.com
+ * @author Emil Lind <emil@sys.nu>
+ * @author Bogge Bogge <bogge@bogge.com>
+ * @author Peter Åström <eaustreum@gmail.com>
+ * @author HÃ¥kan Sandell <hakan.sandell@home.se>
+ */
+$lang['admin_acl'] = 'Hantera behörighetslistan (ACL)';
+$lang['acl_group'] = 'Grupp';
+$lang['acl_user'] = 'Användare';
+$lang['acl_perms'] = 'Behörighet för';
+$lang['page'] = 'Sida';
+$lang['namespace'] = 'Namnrymd';
+$lang['btn_select'] = 'Välj';
+$lang['p_user_id'] = 'Användaren <b class="acluser">%s</b> har förnärvarande följande rättigheter på sidan <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'Användaren <b class="acluser">%s</b> har för närvarande följande rättigheter i namnrymden <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Medlemmar av gruppen <b class="aclgroup">%s</b> har för närvarande följande rättigheter på sidan <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Medlemmar av gruppen <b class="aclgroup">%s</b> har för närvarande följande rättigheter i namnrymden <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'Vänligen <b>ange en användare eller grupp</b> i formuläret ovan för att visa eller ändra rättigheterna för sidan <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'Vänligen <b>ange en användare eller grupp</b> i formuläret ovan för att visa eller ändra rättigheterna för namnrymden <b class="aclns">%s</b>.';
+$lang['p_inherited'] = 'Notering: De här rättigheterna är inte explicit satta utan var ärvda från andra grupper eller högre namnrymder.';
+$lang['p_isadmin'] = 'Notering: Den valda gruppen eller användaren har alltid fulla rättigheter på grund av att den är konfigurerad som superanvändare.';
+$lang['p_include'] = 'Högre rättigheter inkluderar lägre. Rättigheter för Skapa, Ladda upp och Radera är endast applicerbara namnrymder, inte sidor.';
+$lang['current'] = 'Nuvarande ACL regler';
+$lang['where'] = 'Sida/Namnrymd';
+$lang['who'] = 'Användare/Grupp';
+$lang['perm'] = 'Rättigheter';
+$lang['acl_perm0'] = 'Inga';
+$lang['acl_perm1'] = 'Läsa';
+$lang['acl_perm2'] = 'Redigera';
+$lang['acl_perm4'] = 'Skapa';
+$lang['acl_perm8'] = 'Ladda upp';
+$lang['acl_perm16'] = 'Radera';
+$lang['acl_new'] = 'Lägg till ny behörighet';
+$lang['acl_mod'] = 'Ändra behörighet';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/th/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/th/help.txt
new file mode 100644
index 000000000..52edca93f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/th/help.txt
@@ -0,0 +1,11 @@
+=== ตัวช่วยอย่างเร็ว ===
+
+ในหน้านี้คุณสามารถเพิ่มà¹à¸¥à¸°à¸–อดสิทธิ์สำหรับเนมสเปซ à¹à¸¥à¸°à¹€à¸žà¸ˆà¹ƒà¸™à¸§à¸´à¸à¸´à¸‚องคุณ
+
+à¹à¸–บด้านซ้ายจะà¹à¸ªà¸”งรายชื่อเนมสเปซ à¹à¸¥à¸°à¹€à¸žà¸ˆà¸—ี่มีอยู่ทั้งหมด
+
+à¹à¸šà¸šà¸Ÿà¸­à¸£à¹Œà¸¡à¸‚้างบนอนุà¸à¸²à¸•à¸´à¹ƒà¸«à¹‰à¸„ุณมองเห็น à¹à¸¥à¸°à¹à¸à¹‰à¹„ขสิทธิ์ของผู้ใช้หรือà¸à¸¥à¸¸à¹ˆà¸¡à¸—ี่เลือà¸à¹„ว้ได้
+
+ในตารางด้านล่างได้à¹à¸ªà¸”งà¸à¸à¸„วบคุมà¸à¸²à¸£à¹€à¸‚้าถึงทั้งหมดไว้ คุณสามารถใช้มันลบ หรือเปลี่ยนà¸à¸à¸„รั้งละหลายๆตัวพร้อมà¸à¸±à¸™à¹„ด้อย่างรวดเร็ว
+
+à¸à¸²à¸£à¸­à¹ˆà¸²à¸™ [[doku>acl|official documentation on ACL]] น่าจะช่วยให้คุณเข้าใจวิธีควบคุมà¸à¸²à¸£à¹€à¸‚้าถึงของโดà¸à¸¸à¸§à¸´à¸à¸´à¹„ด้อย่างถ่องà¹à¸—้ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/th/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/th/lang.php
new file mode 100644
index 000000000..472c33cdc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/th/lang.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Thai language file
+ *
+ * @author Komgrit Niyomrath <n.komgrit@gmail.com>
+ * @author Kittithat Arnontavilas mrtomyum@gmail.com
+ * @author Kittithat Arnontavilas <mrtomyum@gmail.com>
+ * @author Thanasak Sompaisansin <jombthep@gmail.com>
+ */
+$lang['admin_acl'] = 'จัดà¸à¸²à¸£à¸£à¸²à¸¢à¸Šà¸·à¹ˆà¸­à¹€à¸žà¸·à¹ˆà¸­à¸„วบคุมà¸à¸²à¸£à¹€à¸‚้าถึง (Access Control List:ACL)';
+$lang['acl_group'] = 'à¸à¸¥à¸¸à¹ˆà¸¡';
+$lang['acl_user'] = 'ผู้ใช้';
+$lang['acl_perms'] = 'สิทธิสำหรับ';
+$lang['page'] = 'เพจ';
+$lang['namespace'] = 'เนมสเปซ';
+$lang['btn_select'] = 'เลือà¸';
+$lang['where'] = 'เพจ/เนมสเปซ';
+$lang['who'] = 'ผู้ใช้/à¸à¸¥à¸¸à¹ˆà¸¡';
+$lang['perm'] = 'สิทธิ์';
+$lang['acl_perm0'] = 'ไร้สิทธิ์';
+$lang['acl_perm1'] = 'อ่าน';
+$lang['acl_perm2'] = 'à¹à¸à¹‰à¹„ข';
+$lang['acl_perm4'] = 'สร้าง';
+$lang['acl_perm8'] = 'อัพโหลด';
+$lang['acl_perm16'] = 'ลบ';
+$lang['acl_new'] = 'เพิ่มเนื้อหาใหม่';
+$lang['acl_mod'] = 'ปรับà¹à¸à¹‰à¹€à¸™à¸·à¹‰à¸­à¸«à¸²';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/tr/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/tr/help.txt
new file mode 100644
index 000000000..b467c5019
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/tr/help.txt
@@ -0,0 +1,11 @@
+=== Hızlı yardım: ===
+
+Bu sayfada Wiki'nizin namespace ve sayfaları için izinleri belirleyebilirsiniz.
+
+Soldaki kısım varolan namespace ve sayfaları listeler.
+
+Yukarıdaki kısım seçilen bir kullanıcı veya grup için izinleri görüp değiştirmenizi sağlar.
+
+Aşağıdaki tablo ise varolan erişim kontrol kurallarını gösterir. Bu tabloyu birden fazla kuralı hızlıca silip değiştirmek için kullanabilirsiniz.
+
+Resmi ACL dökümanını ([[doku>acl|official documentation on ACL]]) okuyarak erişim kontrolünün nasıl çalıştığını öğrenebilirsiniz.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/tr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/tr/lang.php
new file mode 100644
index 000000000..45fbe7489
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/tr/lang.php
@@ -0,0 +1,40 @@
+<?php
+/**
+ * turkish language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Selim FarsakoÄŸlu <farsakogluselim@yahoo.de>
+ * @author Aydın Coşkuner aydinweb@gmail.com
+ * @author Aydın Coşkuner <aydinweb@gmail.com>
+ * @author yavuzselim@gmail.com
+ * @author Cihan Kahveci kahvecicihan@gmail.com
+ * @author Yavuz Selim <yavuzselim@gmail.com>
+ */
+$lang['admin_acl'] = 'Erişim Kontrol Listesi (ACL) Yönetimi';
+$lang['acl_group'] = 'Grup';
+$lang['acl_user'] = 'Kullanıcı';
+$lang['acl_perms'] = 'Şunun için yetkiler:';
+$lang['page'] = 'Sayfa';
+$lang['namespace'] = 'Namespace';
+$lang['btn_select'] = 'Seç';
+$lang['p_user_id'] = '<b class="acluser">%s</b> kullanıcısının şu anda <b class="aclpage">%s</b> sayfası için yetkisi: <i>%s</i>.';
+$lang['p_user_ns'] = '<b class="acluser">%s</b> kullanıcısının şu anda <b class="aclns">%s</b> namesapace\'i için yetkisi: <i>%s</i>.';
+$lang['p_group_id'] = '<b class="aclgroup">%s</b> grubunun şu anda <b class="aclpage">%s</b> sayfası için yetkisi: <i>%s</i>.';
+$lang['p_group_ns'] = '<b class="aclgroup">%s</b> grubunun şu anda <b class="aclns">%s</b> namesapace\'i için yetkisi: <i>%s</i>.';
+$lang['p_choose_id'] = 'Lütfen <b class="aclpage">%s</b> sayfasına izin verilen yetkilerini görmek veya değiştirmek için yukarıdaki forma <b>bir kullanıcı veya grup adı</b> girin.';
+$lang['p_choose_ns'] = 'Lütfen <b class="aclpage">%s</b> namespace\'ie izin verilen yetkileri görmek veya değiştirmek için yukarıdaki forma <b>bir kullanıcı veya grup adı</b> girin.';
+$lang['p_inherited'] = 'Not: Bu izinler doğrudan ayarlanmadan başka grup veya üst namespace\'lerden gelmektedir.';
+$lang['p_isadmin'] = 'Not: Seçili grup veya kullanıcı, "Ana kullanıcı" olarak atandığından tüm izinlere sahiptir.';
+$lang['p_include'] = 'Üst seviye izinler alt izinleri içermektedir. Oluşturma, Yükleme ve Silme yetkisi sadece namespace\'e uygulanmaktadır. Bu yetki sayfalara uygulanmaz.';
+$lang['current'] = 'Şimdiki ACL(İzin Kontrol listesi) kuralları';
+$lang['where'] = 'Sayfa/Namespace';
+$lang['who'] = 'Kullanıcı/Grup';
+$lang['perm'] = 'Ä°zinler';
+$lang['acl_perm0'] = 'Yok';
+$lang['acl_perm1'] = 'Okuma';
+$lang['acl_perm2'] = 'DeÄŸiÅŸtirme';
+$lang['acl_perm4'] = 'OluÅŸturma';
+$lang['acl_perm8'] = 'Yükleme';
+$lang['acl_perm16'] = 'Silme';
+$lang['acl_new'] = 'Yeni giriÅŸ ekle';
+$lang['acl_mod'] = 'Eski giriÅŸi deÄŸiÅŸtirme';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/uk/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/uk/help.txt
new file mode 100644
index 000000000..d16af0aa9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/uk/help.txt
@@ -0,0 +1,11 @@
+=== Швидка довідка: ===
+
+Ðа цій Ñторінці ви можете додавати чи знищувати права доÑтупу Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñторів імен чи Ñторінок вашої вікі.
+
+Ліва панель показує вÑÑ– доÑтупні проÑтори імен Ñ– Ñторінки.
+
+Ð’ÐµÑ€Ñ…Ð½Ñ Ñ„Ð¾Ñ€Ð¼Ð° дозволÑÑ” переглÑнути Ñ– редагувати права доÑтупу Ð´Ð»Ñ Ð¾Ð±Ñ€Ð°Ð½Ð¾Ð³Ð¾ кориÑтувача чи групи
+
+Ð’ таблиці знизу показані вÑÑ– оголошені правила доÑтупу. Можете Ñ—Ñ— викориÑтовувати Ð´Ð»Ñ ÑˆÐ²Ð¸Ð´ÐºÐ¾Ð³Ð¾ Ð·Ð½Ð¸Ñ‰ÐµÐ½Ð½Ñ Ñ‡Ð¸ модифікації кількох правил.
+
+Додаткова допомога в [[doku>acl|офіційній документації по ACL]] допоможе вам більше зрозуміти Ñк працює контроль доÑтупу у ДокуВікі. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/uk/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/uk/lang.php
new file mode 100644
index 000000000..dc3e6a963
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/uk/lang.php
@@ -0,0 +1,39 @@
+<?php
+/**
+ * ukrainian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Oleksiy Voronin <ovoronin@gmail.com>
+ * @author serg_stetsuk@ukr.net
+ * @author okunia@gmail.com
+ * @author Oleksandr Kunytsia <okunia@gmail.com>
+ * @author Uko uko@uar.net
+ */
+$lang['admin_acl'] = 'ÐšÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ ÑпиÑками контролю доÑтупу';
+$lang['acl_group'] = 'Група';
+$lang['acl_user'] = 'КориÑтувач';
+$lang['acl_perms'] = 'Права доÑтупу длÑ';
+$lang['page'] = 'Сторінка';
+$lang['namespace'] = 'ПроÑÑ‚Ñ–Ñ€ імен';
+$lang['btn_select'] = 'Вибрати';
+$lang['p_user_id'] = 'КориÑтувач <b class="acluser">%s</b> зараз має такі права доÑтупу до Ñторінки <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'КориÑтувач <b class="acluser">%s</b> зараз має такі права доÑтупу до проÑтору імен <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Члени групи <b class="aclgroup">%s</b> зараз мають такі права Ð´Ð»Ñ Ñторінки <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Члени групи <b class="aclgroup">%s</b> зараз мають такі права доÑтупу до проÑтору імен <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'Будь-лаÑка <b>введіть кориÑтувача або групу<b> в поле зверху, щоб подивитиÑÑ Ñ‡Ð¸ змінити права доÑтупу до Ñторінки <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'Будь-лаÑка <b>введіть кориÑтувача або групу<b> у вікно зверху, щоб подивитиÑÑ Ñ‡Ð¸ змінити права доÑтупу до Ñторінки <b class="aclns">%s</b>.';
+$lang['p_inherited'] = 'Зверніть увагу! Права доÑтупу, не вÑтановлені Ñвно, наÑлідуютьÑÑ Ð²Ñ–Ð´ інших груп чи вищих проÑторів імен.';
+$lang['p_isadmin'] = 'Зверніть увагу! Обрані група чи кориÑтувач завжди мають повні права доÑтупу, оÑкільки вони Ñ” ÑуперкориÑтувачами.';
+$lang['p_include'] = 'Старші права доÑтупу включають молодші. СтвореннÑ, Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñ– Ð’Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð·Ð°ÑтоÑовні лише до проÑторів імен.';
+$lang['current'] = 'Поточні правила ACL';
+$lang['where'] = 'Сторінка/ПроÑÑ‚Ñ–Ñ€ імен';
+$lang['who'] = 'КориÑтувач/Група';
+$lang['perm'] = 'Права доÑтупу';
+$lang['acl_perm0'] = 'Жодних';
+$lang['acl_perm1'] = 'ЧитаннÑ';
+$lang['acl_perm2'] = 'РедагуваннÑ';
+$lang['acl_perm4'] = 'СтвореннÑ';
+$lang['acl_perm8'] = 'ЗавантаженнÑ';
+$lang['acl_perm16'] = 'ВилученнÑ';
+$lang['acl_new'] = 'Додати новий запиÑ';
+$lang['acl_mod'] = 'Змінити запиÑ';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/vi/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/vi/lang.php
new file mode 100644
index 000000000..4458d806b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/vi/lang.php
@@ -0,0 +1,21 @@
+<?php
+/**
+ * vietnamese language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author James Do <jdo@myrealbox.com>
+ */
+
+$lang['admin_acl'] = 'Quản lý phép truy nhật {Access Control List}';
+$lang['acl_group'] = 'Nhóm';
+$lang['acl_user'] = 'NgÆ°á»i';
+$lang['acl_perms'] = 'Phép truy nhập cho';
+$lang['page'] = 'Trang';
+$lang['namespace'] = 'Không gian tên';
+
+$lang['acl_perm1'] = 'Äá»c';
+$lang['acl_perm2'] = 'Biên soạn';
+$lang['acl_perm4'] = 'Tạo';
+$lang['acl_perm8'] = 'Tải lên';
+$lang['acl_new'] = 'Thêm mục mới';
+//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh-tw/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh-tw/help.txt
new file mode 100644
index 000000000..871c1f4f1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh-tw/help.txt
@@ -0,0 +1,11 @@
+=== 快速指å—: ===
+
+在此é é¢ä½ å¯ä»¥ç‚ºä½ çš„wiki中的namespace以åŠé é¢å¢žåŠ æˆ–移除權é™
+
+左方的é¢æ¿é¡¯ç¤ºäº†æ‰€æœ‰çš„namespace以åŠé é¢
+
+上方的表格å…許你觀看以åŠä¿®æ”¹è¢«é¸æ“‡çš„使用者或群組的權é™
+
+下方的表格顯示了目å‰æ‰€æœ‰çš„å­˜å–控制è¦å‰‡(ACL) ä½ å¯ä»¥ä½¿ç”¨å®ƒå¿«é€Ÿçš„刪除或更改多項è¦å‰‡
+
+閱讀 [[doku>acl|official documentation on ACL]] 也許å¯ä»¥å¹«åŠ©ä½ åŽ»å®Œæ•´åœ°äº†è§£åœ¨DokuWiki中, å­˜å–控制是如何é‹ä½œçš„.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh-tw/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh-tw/lang.php
new file mode 100644
index 000000000..d64e85a92
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh-tw/lang.php
@@ -0,0 +1,40 @@
+<?php
+/**
+ * Chinese(Traditional) language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author chinsan <chinsan@mail2000.com.tw>
+ * @author Li-Jiun Huang <ljhuang.tw@gmail.com>
+ * @author http://www.chinese-tools.com/tools/converter-simptrad.html
+ * @author Wayne San <waynesan@zerozone.tw>
+ * @author Li-Jiun Huang <ljhuang.tw@gmai.com>
+ * @author Cheng-Wei Chien <e.cwchien@gmail.com>
+ */
+$lang['admin_acl'] = '設定 ACL å­˜å–åå–®';
+$lang['acl_group'] = '群組';
+$lang['acl_user'] = '帳號';
+$lang['acl_perms'] = '設定權é™æ–¼';
+$lang['page'] = 'é é¢';
+$lang['namespace'] = '命å空間';
+$lang['btn_select'] = 'é¸æ“‡';
+$lang['p_user_id'] = '使用者 <b class="acluser">%s</b> 在é é¢ <b class="aclpage">%s</b>ç›®å‰æ“有以下的權é™: <i>%s</i>.';
+$lang['p_user_ns'] = '用戶 <b class=\"acluser\">%s</b> 當å‰åœ¨å‘½å空間 <b class=\"aclns\">%s</b> æ“有以下權é™ï¼š<i>%s</i>。';
+$lang['p_group_id'] = '群組 <b class="aclgroup">%s</b> çš„æˆå“¡ç›®å‰å°æ–¼é é¢ <b class="aclpage">%s</b> æ“有以下的權é™: <i>%s</i>.';
+$lang['p_group_ns'] = '<b class=\"aclgroup\">%s</b> 組æˆå“¡ç•¶å‰åœ¨å‘½å空間 <b class=\"aclns\">%s</b> æ“有以下權é™ï¼š<i>%s</i>。';
+$lang['p_choose_id'] = '請在上方的表格中 <b>輸入一個帳號或群組</b> 來觀看或編輯é é¢ <b class="aclpage">%s</b> 的權é™.';
+$lang['p_choose_ns'] = '請在上表中<b>輸入用戶å或組å稱</b>,來查看或編輯命å空間 <b class=\"aclns\">%s</b> 的權é™è¨­ç½®ã€‚';
+$lang['p_inherited'] = '請注æ„:這些權é™ä¸¦æ²’有明確設定,而是從其他組或更高級的å稱空間繼承而來。';
+$lang['p_isadmin'] = '請注æ„:é¸å®šçš„組或用戶æ“有完全權é™ï¼Œå› ç‚ºå®ƒè¢«è¨­å®šç‚ºè¶…級用戶。';
+$lang['p_include'] = '較高的權é™äº¦åŒ…å«äº†è¼ƒä½Žçš„權é™ã€‚新增ã€ä¸Šå‚³èˆ‡åˆªé™¤æ¬Šé™åªèƒ½åœ¨å‘½å空間中使用,而éžé é¢ã€‚';
+$lang['current'] = 'ç›®å‰çš„ACLè¦å‰‡';
+$lang['where'] = 'é é¢/命å空間';
+$lang['who'] = '使用者/群組';
+$lang['perm'] = '權é™';
+$lang['acl_perm0'] = 'ç„¡';
+$lang['acl_perm1'] = '讀å–權é™';
+$lang['acl_perm2'] = '編輯é é¢';
+$lang['acl_perm4'] = '新增é é¢';
+$lang['acl_perm8'] = '上傳圖檔';
+$lang['acl_perm16'] = '刪除檔案';
+$lang['acl_new'] = '新增管ç†è¦å‰‡';
+$lang['acl_mod'] = '修改è¦å‰‡';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh/help.txt
new file mode 100644
index 000000000..526dcee9b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh/help.txt
@@ -0,0 +1,11 @@
+=== 快速帮助 ===
+
+本页中您å¯ä»¥æ·»åŠ æˆ–移除命å空间或页é¢çš„æƒé™ã€‚
+
+左边的窗格显示的是全部å¯ç”¨çš„命å空间和页é¢ã€‚
+
+您å¯ä»¥åœ¨ä¸Šæ–¹çš„表格中查看并修改选定用户或组的æƒé™ã€‚
+
+下方的表格中显示的是当å‰è®¾ç½®çš„全部访问控制规则。 您å¯ä»¥é€šè¿‡å®ƒå¿«é€Ÿåˆ é™¤æˆ–更改多æ¡è§„则。
+
+å‚阅 [[doku>acl|official documentation on ACL]] 能帮助您完整地ç†è§£ DokuWiki 中的访问控制是如何工作的。
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh/lang.php
new file mode 100644
index 000000000..6ae32b01c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh/lang.php
@@ -0,0 +1,39 @@
+<?php
+/**
+ * Chinese(Simplified) language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author ZDYX <zhangduyixiong@gmail.com>
+ * @author http://www.chinese-tools.com/tools/converter-tradsimp.html
+ * @author George Sheraton guxd@163.com
+ * @author Simon zhan <simonzhan@21cn.com>
+ * @author mr.jinyi@gmail.com
+ */
+$lang['admin_acl'] = '访问控制列表(ACL)管ç†å™¨';
+$lang['acl_group'] = '组';
+$lang['acl_user'] = '用户';
+$lang['acl_perms'] = '许å¯ç»™';
+$lang['page'] = '页é¢';
+$lang['namespace'] = '命å空间';
+$lang['btn_select'] = 'é¸æ“‡';
+$lang['p_user_id'] = '用户 <b class="acluser">%s</b> 当å‰åœ¨é¡µé¢ <b class="aclpage">%s</b> 拥有以下æƒé™ï¼š<i>%s</i>。';
+$lang['p_user_ns'] = '用户 <b class="acluser">%s</b> 当å‰åœ¨å‘½å空间 <b class="aclns">%s</b> 拥有以下æƒé™ï¼š<i>%s</i>。';
+$lang['p_group_id'] = '<b class="aclgroup">%s</b> 组æˆå‘˜å½“å‰åœ¨é¡µé¢ <b class="aclpage">%s</b> 拥有以下æƒé™ï¼š<i>%s</i>。';
+$lang['p_group_ns'] = '<b class="aclgroup">%s</b> 组æˆå‘˜å½“å‰åœ¨å‘½å空间 <b class="aclns">%s</b> 拥有以下æƒé™ï¼š<i>%s</i>。';
+$lang['p_choose_id'] = '请在上表中<b>输入用户å或组å称</b>,æ¥æŸ¥çœ‹æˆ–ç¼–è¾‘é¡µé¢ <b class="aclpage">%s</b> çš„æƒé™è®¾ç½®ã€‚';
+$lang['p_choose_ns'] = '请在上表中<b>输入用户å或组å称</b>,æ¥æŸ¥çœ‹æˆ–编辑命å空间 <b class="aclns">%s</b> çš„æƒé™è®¾ç½®ã€‚';
+$lang['p_inherited'] = '请注æ„:这些æƒé™å¹¶æ²¡æœ‰æ˜Žç¡®è®¾å®šï¼Œè€Œæ˜¯ä»Žå…¶ä»–组或更高级的å称空间继承而æ¥ã€‚';
+$lang['p_isadmin'] = '请注æ„:选定的组或用户拥有完全æƒé™ï¼Œå› ä¸ºå®ƒè¢«è®¾å®šä¸ºè¶…级用户。';
+$lang['p_include'] = '高æƒé™åŒ…å«ä½Žæƒé™ã€‚创建ã€ä¸Šä¼ å’Œåˆ é™¤æƒé™åªèƒ½åº”用于å称空间,而ä¸æ˜¯å•ä¸ªé¡µé¢ã€‚';
+$lang['current'] = 'å½“å‰ ACL 规则';
+$lang['where'] = '页é¢/命å空间';
+$lang['who'] = '用户/组';
+$lang['perm'] = 'æƒé™';
+$lang['acl_perm0'] = 'æ— ';
+$lang['acl_perm1'] = '读å–';
+$lang['acl_perm2'] = '编辑';
+$lang['acl_perm4'] = '创建';
+$lang['acl_perm8'] = '上传';
+$lang['acl_perm16'] = '删除';
+$lang['acl_new'] = '添加新æ¡ç›®';
+$lang['acl_mod'] = '编辑æ¡ç›®';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/group.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/group.png
new file mode 100644
index 000000000..7fb4e1f1e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/group.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/ns.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/ns.png
new file mode 100644
index 000000000..da3c2a2d7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/ns.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/page.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/page.png
new file mode 100644
index 000000000..03ddd799f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/page.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/user.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/user.png
new file mode 100644
index 000000000..8fd539e9c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/user.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/script.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/script.js
new file mode 100644
index 000000000..21f161a97
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/script.js
@@ -0,0 +1,163 @@
+acl = {
+ init: function(){
+ this.ctl = DOKUid('acl_manager');
+ if(!this.ctl) return;
+
+ var sel = DOKUid('acl__user').getElementsByTagName('select')[0];
+
+ addEvent(sel,'change',acl.userselhandler);
+ addEvent(DOKUid('acl__tree'),'click',acl.treehandler);
+ addEvent(DOKUid('acl__user').getElementsByTagName('input')[1],'click',acl.loadinfo);
+ },
+
+
+ /**
+ * Handle user dropdown
+ */
+ userselhandler: function(e){
+ // make entry field visible/invisible
+ if(this.value == '__g__' || this.value == '__u__'){
+ DOKUid('acl__user').getElementsByTagName('input')[0].style.display = ''; //acl_w
+ DOKUid('acl__user').getElementsByTagName('input')[1].style.display = ''; //submit
+ }else{
+ DOKUid('acl__user').getElementsByTagName('input')[0].style.display = 'none';
+ DOKUid('acl__user').getElementsByTagName('input')[1].style.display = 'none';
+ }
+
+ acl.loadinfo();
+ },
+
+ /**
+ * Load the current permission info and edit form
+ *
+ * @param frm - Form element with needed data
+ */
+ loadinfo: function(){
+ // get form
+ var frm = DOKUid('acl__detail').getElementsByTagName('form')[0];
+
+ // prepare an AJAX call
+ var ajax = new sack(DOKU_BASE + 'lib/plugins/acl/ajax.php');
+ ajax.AjaxFailedAlert = '';
+ ajax.encodeURIString = false;
+ if(ajax.failed) return true;
+
+ // prepare data
+ var data = Array();
+ data[0] = ajax.encVar('ns',frm.elements['ns'].value);
+ data[1] = ajax.encVar('id',frm.elements['id'].value);
+ data[2] = ajax.encVar('acl_t',frm.elements['acl_t'].value);
+ data[3] = ajax.encVar('acl_w',frm.elements['acl_w'].value);
+ data[4] = ajax.encVar('sectok',frm.elements['sectok'].value);
+ data[5] = ajax.encVar('ajax','info');
+
+ ajax.elementObj = DOKUid('acl__info');
+
+ ajax.runAJAX(data.join('&'));
+ return false;
+ },
+
+ /**
+ * parse URL attributes into a associative array
+ *
+ * @todo put into global script lib?
+ */
+ parseatt: function(str){
+ if(str[0] == '?') str = str.substr(1);
+ var attributes = {};
+ var all = str.split('&');
+ for(var i=0; i<all.length; i++){
+ var att = all[i].split('=');
+ attributes[att[0]] = decodeURIComponent(att[1]);
+ }
+ return attributes;
+ },
+
+ /**
+ * htmlspecialchars equivalent
+ *
+ * @todo put in gloabl scripts lib?
+ */
+ hsc: function(str) {
+ str = str.replace(/&/g,"&amp;");
+ str = str.replace(/\"/g,"&quot;");
+ str = str.replace(/\'/g,"&#039;");
+ str = str.replace(/</g,"&lt;");
+ str = str.replace(/>/g,"&gt;");
+ return str;
+ },
+
+
+ /**
+ * Open or close a subtree using AJAX
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ treetoggle: function(clicky){
+ var listitem = clicky.parentNode.parentNode;
+
+ // if already open, close by removing the sublist
+ var sublists = listitem.getElementsByTagName('ul');
+ if(sublists.length){
+ listitem.removeChild(sublists[0]);
+ clicky.src = DOKU_BASE+'lib/images/plus.gif';
+ clicky.alt = '+';
+ return false;
+ }
+
+ // get the enclosed link (is always the first one)
+ var link = listitem.getElementsByTagName('a')[0];
+
+ // prepare an AJAX call to fetch the subtree
+ var ajax = new sack(DOKU_BASE + 'lib/plugins/acl/ajax.php');
+ ajax.AjaxFailedAlert = '';
+ ajax.encodeURIString = false;
+ if(ajax.failed) return true;
+
+ //prepare the new ul
+ var ul = document.createElement('ul');
+ listitem.appendChild(ul);
+ ajax.elementObj = ul;
+ ajax.runAJAX(link.search.substr(1)+'&ajax=tree');
+ clicky.src = DOKU_BASE+'lib/images/minus.gif';
+ return false;
+ },
+
+ /**
+ * Handles all clicks in the tree, dispatching the right action based on the
+ * clicked element
+ */
+ treehandler: function(e){
+ if(e.target.src){ // is it an image?
+ acl.treetoggle(e.target);
+ } else if(e.target.href){ // is it a link?
+ // remove highlighting
+ var obj = getElementsByClass('cur',DOKUid('acl__tree'),'a');
+ for(var i=0; i<obj.length; i++){
+ obj[i].className = obj[i].className.replace(/ cur/,'');
+ }
+
+ // add new highlighting
+ e.target.className += ' cur';
+
+ // set new page to detail form
+ var frm = DOKUid('acl__detail').getElementsByTagName('form')[0];
+ if(e.target.className.search(/wikilink1/) > -1){
+ frm.elements['ns'].value = '';
+ frm.elements['id'].value = acl.hsc(acl.parseatt(e.target.search)['id']);
+ }else if(e.target.className.search(/idx_dir/) > -1){
+ frm.elements['ns'].value = acl.hsc(acl.parseatt(e.target.search)['ns']);
+ frm.elements['id'].value = '';
+ }
+
+ acl.loadinfo();
+ }
+
+ e.stopPropagation();
+ e.preventDefault();
+ return false;
+ }
+
+};
+
+addInitEvent(acl.init);
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/style.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/style.css
new file mode 100644
index 000000000..0c5a9819b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/style.css
@@ -0,0 +1,96 @@
+
+div#acl_manager div#acl__tree {
+ font-size: 90%;
+ width: 25%;
+ height: 300px;
+ float: left;
+ overflow: auto;
+ border: 1px solid __border__;
+ text-align: left;
+}
+
+div#acl_manager div#acl__tree a.cur {
+ background-color: __highlight__;
+ font-weight: bold;
+}
+
+div#acl_manager div#acl__tree ul {
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+}
+
+div#acl_manager div#acl__tree li {
+ padding-left: 1em;
+}
+
+div#acl_manager div#acl__tree ul img {
+ margin-right: 0.25em;
+ cursor: pointer;
+}
+
+div#acl_manager div#acl__detail {
+ width: 73%;
+ height: 300px;
+ float: right;
+ overflow: auto;
+}
+
+div#acl_manager div#acl__detail fieldset {
+ width: 90%;
+}
+
+div#acl_manager div#acl__detail div#acl__user {
+ border: 1px solid __border__;
+ padding: 0.5em;
+ margin-bottom: 0.6em;
+}
+
+div#acl_manager table.inline {
+ width: 100%;
+ margin: 0;
+}
+
+div#acl_manager .aclgroup {
+ background: transparent url(pix/group.png) 0px 1px no-repeat;
+ padding: 1px 0px 1px 18px;
+}
+
+div#acl_manager .acluser {
+ background: transparent url(pix/user.png) 0px 1px no-repeat;
+ padding: 1px 0px 1px 18px;
+}
+
+div#acl_manager .aclpage {
+ background: transparent url(pix/page.png) 0px 1px no-repeat;
+ padding: 1px 0px 1px 18px;
+}
+
+div#acl_manager .aclns {
+ background: transparent url(pix/ns.png) 0px 1px no-repeat;
+ padding: 1px 0px 1px 18px;
+}
+
+div#acl_manager label.disabled {
+ color: __text_neu__!important;
+}
+
+#acl_manager label {
+ text-align: left;
+ font-weight: normal;
+ display: inline;
+}
+
+#acl_manager table {
+ margin-left: 10%;
+ width: 80%;
+}
+
+#acl_manager table tr {
+ background-color: inherit;
+}
+
+#acl_manager table tr:hover {
+ background-color: __background_alt__;
+}
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/action.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/action.php
new file mode 100644
index 000000000..a26bc654a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/action.php
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Action Plugin Prototype
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ */
+// must be run within Dokuwiki
+if(!defined('DOKU_INC')) die();
+
+if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
+require_once(DOKU_INC.'inc/plugin.php');
+
+/**
+ * All DokuWiki plugins to interfere with the event system
+ * need to inherit from this class
+ */
+class DokuWiki_Action_Plugin extends DokuWiki_Plugin {
+
+ /**
+ * Registers a callback function for a given event
+ */
+ function register($controller) {
+ trigger_error('register() not implemented in '.get_class($this), E_USER_WARNING);
+ }
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/admin.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/admin.php
new file mode 100644
index 000000000..2eeda3f7b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/admin.php
@@ -0,0 +1,49 @@
+<?php
+/**
+ * Admin Plugin Prototype
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ */
+// must be run within Dokuwiki
+if(!defined('DOKU_INC')) die();
+
+if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
+require_once(DOKU_INC.'inc/plugin.php');
+
+/**
+ * All DokuWiki plugins to extend the admin function
+ * need to inherit from this class
+ */
+class DokuWiki_Admin_Plugin extends DokuWiki_Plugin {
+
+ function getMenuText($language) {
+ $menutext = $this->getLang('menu');
+ if (!$menutext) {
+ $info = $this->getInfo();
+ $menutext = $info['name'].' ...';
+ }
+ return $menutext;
+ }
+
+ function getMenuSort() {
+ return 1000;
+ }
+
+ function handle() {
+ trigger_error('handle() not implemented in '.get_class($this), E_USER_WARNING);
+ }
+
+ function html() {
+ trigger_error('html() not implemented in '.get_class($this), E_USER_WARNING);
+ }
+
+ function forAdminOnly() {
+ return true;
+ }
+
+ function getTOC(){
+ return array();
+ }
+}
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/box/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/box/print.css
new file mode 100644
index 000000000..956b8a38b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/box/print.css
@@ -0,0 +1,274 @@
+@CHARSET "UTF-8";
+
+/* plugin:box */
+div.box {
+ width: 50%;
+ margin: 1em auto;
+ border: 1px solid;
+ padding: 4px;
+ overflow: hidden;
+}
+
+/* rounded corners styles from Stu Nicholls snazzy borders, http://www.cssplay.co.uk/boxes/snazzy.html */
+.xtop, .xbottom {background:transparent; font-size:0; line-height: 1px;}
+.xb1, .xb2, .xb3, .xb4 {display:block; overflow:hidden; border-style: solid;}
+.xb2, .xb3 {height:1px;}
+.xb2, .xb3, .xb4 {border-width:0 1px;}
+.xb1 {height: 0; margin:0 5px; border-width:1px 0 0 0;}
+.xb2 {margin:0 3px; border-width:0 2px;}
+.xb3 {margin:0 2px;}
+.xb4 {height:2px; margin:0 1px;}
+
+div.box .xtop, div.box .xbottom {display: none;}
+div.box.round > .xtop, div.box.round > .xbottom {display: block;}
+
+div.box.round { border: none; padding: 0;}
+div.box.round > .xbox {display:block; border-width:0 1px; border-style: solid; padding: 0 4px; }
+
+div.box p.box_title, div.box p.box_caption {
+ font-size: 90%;
+ margin: 0;
+ padding: 2px 6px;
+ line-height: 1.2;
+}
+
+div.box p.box_title { margin-bottom: 4px;}
+div.box p.box_caption { margin-top: 4px;}
+
+div.box .box_content {
+ margin: 0;
+ padding: 0 6px;
+ border-width: 1px;
+ border-style: dashed;
+ line-height: 1.2;
+}
+
+/* floating alignment */
+
+div.box.left {
+ float: left;
+ margin-right: 1em;
+}
+
+div.box.right {
+ float: right;
+ margin-left: 1em;
+}
+
+/* colours */
+/* default */
+div.box, div.box .box_content, div.box .xbox, div.box .xb1, div.box .xb2, div.box .xb3, div.box .xb4 {
+ border-color: __dark__;
+}
+
+div.box, div.box .xbox, div.box .xb1, div.box .xb2, div.box .xb3, div.box .xb4 {
+ background: __light__;
+}
+
+div.box p.box_title, div.box p.box_caption { background: __medium__;}
+div.box .box_content { background: __lighter__;}
+
+/* blue */
+div.box.blue, div.box.blue > * > .box_content, div.box.blue > .xbox,
+div.box.blue > * > .xb1, div.box.blue > * > .xb2, div.box.blue > * > .xb3, div.box.blue > * > .xb4 {
+ border-color: #bbbbdd;
+}
+
+div.box.blue, div.box.blue > .xbox,
+div.box.blue > * > .xb1, div.box.blue > * > .xb2, div.box.blue > * > .xb3, div.box.blue > * > .xb4 {
+ background: #e4ecf8;
+}
+
+div.box.blue > * > p.box_title, div.box.blue > * > p.box_caption {background: #cad0ee;}
+div.box.blue > * > .box_content {background: #f4f8fd;}
+
+/* red */
+div.box.red, div.box.red > * > .box_content, div.box.red > .xbox,
+div.box.red > * > .xb1, div.box.red > * > .xb2, div.box.red > * > .xb3, div.box.red > * > .xb4 {
+ border-color: #ddbbbb;
+}
+
+div.box.red, div.box.red > .xbox,
+div.box.red > * > .xb1, div.box.red > * > .xb2, div.box.red > * > .xb3, div.box.red > * > .xb4 {
+ background: #f8ece4;
+}
+
+div.box.red > * > p.box_title, div.box.red > * > p.box_caption {background: #eed0ca;}
+div.box.red > * > .box_content {background: #fdf4ec;}
+
+/* green */
+div.box.green, div.box.green > * > .box_content, div.box.green > .xbox,
+div.box.green > * > .xb1, div.box.green > * > .xb2, div.box.green > * > .xb3, div.box.green > * > .xb4 {
+ border-color: #bbddbb;
+}
+
+div.box.green, div.box.green > .xbox,
+div.box.green > * > .xb1, div.box.green > * > .xb2, div.box.green > * > .xb3, div.box.green > * > .xb4 {
+ background: #e4f8f2;
+}
+
+div.box.green > * > p.box_title, div.box.green > * > p.box_caption {background: #c4e4d4;}
+div.box.green > * > .box_content {background: #ecfaf6;}
+
+/* orange */
+div.box.orange, div.box.orange > * > .box_content, div.box.orange > .xbox,
+div.box.orange > * > .xb1, div.box.orange > * > .xb2, div.box.orange > * > .xb3, div.box.orange > * > .xb4 {
+ border-color: #da3;
+}
+
+div.box.orange, div.box.orange > .xbox,
+div.box.orange > * > .xb1, div.box.orange > * > .xb2, div.box.orange > * > .xb3, div.box.orange > * > .xb4 {
+ background: #f4e8ca;
+}
+
+div.box.orange > * > p.box_title, div.box.orange > * > p.box_caption {background: #f0d499;}
+div.box.orange > * > .box_content {background: #f8f0da;}
+
+/* must come last to override coloured background when using rounded corners */
+
+div.box.round {
+ background: transparent !important;
+}
+
+/* IE fixes for unsupported child selector \*/
+
+* html div.box div.box, * html div.box div.box .box_content, * html div.box div.box .xbox,
+* html div.box div.box .xb1, * html div.box div.box .xb2,
+* html div.box div.box .xb3, * html div.box div.box .xb4 {
+ border-color: __dark__;
+}
+
+* html div.box div.box, * html div.box div.box .xbox,
+* html div.box div.box .xb1, * html div.box div.box .xb2,
+* html div.box div.box .xb3, * html div.box div.box .xb4 {
+ background: __light__;
+}
+
+* html div.box div.box p.box_title, * html div.box div.box p.box_caption { background: __medium__;}
+* html div.box div.box .box_content { background: __lighter__;}
+
+* html div.box.round .xtop, * html div.box.round .xbottom {display: block;}
+* html div.box.round .xbox {display:block; border-width:0 1px; border-style: solid; padding: 0 4px; }
+
+/* blue */
+* html div.box.blue .box_content, * html div.box.blue .xbox,
+* html div.box.blue .xb1, * html div.box.blue .xb2, * html div.box.blue .xb3, * html div.box.blue .xb4 {
+ border-color: #bbbbdd;
+}
+
+* html div.box.blue .xbox,
+* html div.box.blue .xb1, * html div.box.blue .xb2, * html div.box.blue .xb3, * html div.box.blue .xb4 {
+ background: #e4ecf8;
+}
+
+* html div.box.blue p.box_title, * html div.box.blue p.box_caption {background: #cad0ee;}
+* html div.box.blue .box_content {background: #f4f8fd;}
+
+/* nested blue */
+* html div.box div.box.blue .box_content, * html div.box div.box.blue .xbox,
+* html div.box div.box.blue .xb1, * html div.box div.box.blue .xb2,
+* html div.box div.box.blue .xb3, * html div.box div.box.blue .xb4 {
+ border-color: #bbbbdd;
+}
+
+* html div.box div.box.blue .xbox,
+* html div.box div.box.blue .xb1, * html div.box div.box.blue .xb2,
+* html div.box div.box.blue .xb3, * html div.box div.box.blue .xb4 {
+ background: #e4ecf8;
+}
+
+* html div.box div.box.blue p.box_title,
+* html div.box div.box.blue p.box_caption {background: #cad0ee;}
+* html div.box div.box.blue .box_content {background: #f4f8fd;}
+
+/* red */
+* html div.box.red .box_content, * html div.box.red .xbox,
+* html div.box.red .xb1, * html div.box.red .xb2, * html div.box.red .xb3, * html div.box.red .xb4 {
+ border-color: #ddbbbb;
+}
+
+* html div.box.red .xbox,
+* html div.box.red .xb1, * html div.box.red .xb2, * html div.box.red .xb3, * html div.box.red .xb4 {
+ background: #f8ece4;
+}
+
+* html div.box.red p.box_title, * html div.box.red p.box_caption {background: #eed0ca;}
+* html div.box.red .box_content {background: #fdf4ec;}
+
+/* nested red */
+* html div.box div.box.red .box_content, * html div.box div.box.red .xbox,
+* html div.box div.box.red .xb1, * html div.box div.box.red .xb2,
+* html div.box div.box.red .xb3, * html div.box div.box.red .xb4 {
+ border-color: #ddbbbb;
+}
+
+* html div.box div.box.red .xbox,
+* html div.box div.box.red .xb1, * html div.box div.box.red .xb2,
+* html div.box div.box.red .xb3, * html div.box div.box.red .xb4 {
+ background: #f8ece4;
+}
+
+* html div.box div.box.red p.box_title, * html div.box div.box.red p.box_caption {background: #eed0ca;}
+* html div.box div.box.red .box_content {background: #fdf4ec;}
+
+/* green */
+* html div.box.green .box_content, * html div.box.green .xbox,
+* html div.box.green .xb1, * html div.box.green .xb2, * html div.box.green .xb3, * html div.box.green .xb4 {
+ border-color: #bbddbb;
+}
+
+* html div.box.green .xbox,
+* html div.box.green .xb1, * html div.box.green .xb2, * html div.box.green .xb3, * html div.box.green .xb4 {
+ background: #e4f8f2;
+}
+
+* html div.box.green p.box_title, * html div.box.green p.box_caption {background: #c4e4d4;}
+* html div.box.green .box_content {background: #ecfaf6;}
+
+/* nested green */
+* html div.box div.box.green .box_content, * html div.box div.box.green .xbox,
+* html div.box div.box.green .xb1, * html div.box div.box.green .xb2,
+* html div.box div.box.green .xb3, * html div.box div.box.green .xb4 {
+ border-color: #bbddbb;
+}
+
+* html div.box div.box.green .xbox,
+* html div.box div.box.green .xb1, * html div.box div.box.green .xb2,
+* html div.box div.box.green .xb3, * html div.box div.box.green .xb4 {
+ background: #e4f8f2;
+}
+
+* html div.box div.box.green p.box_title, * html div.box div.box.green p.box_caption {background: #c4e4d4;}
+* html div.box div.box.green .box_content {background: #ecfaf6;}
+
+/* orange */
+* html div.box.orange .box_content, * html div.box.orange .xbox,
+* html div.box.orange .xb1, * html div.box.orange .xb2, * html div.box.orange .xb3, * html div.box.orange .xb4 {
+ border-color: #da3;
+}
+
+* html div.box.orange .xbox,
+* html div.box.orange .xb1, * html div.box.orange .xb2, * html div.box.orange .xb3, * html div.box.orange .xb4 {
+ background: #f4e8ca;
+}
+
+* html div.box.orange p.box_title, * html div.box.orange p.box_caption {background: #f0d499;}
+* html div.box.orange .box_content {background: #f8f0da;}
+
+/* nestedorange */
+* html div.box div.box.orange .box_content, * html div.box div.box.orange .xbox,
+* html div.box div.box.orange .xb1, * html div.box div.box.orange .xb2,
+* html div.box div.box.orange .xb3, * html div.box div.box.orange .xb4 {
+ border-color: #da3;
+}
+
+* html div.box div.box.orange .xbox,
+* html div.box div.box.orange .xb1, * html div.box div.box.orange .xb2,
+* html div.box div.box.orange .xb3, * html div.box div.box.orange .xb4 {
+ background: #f4e8ca;
+}
+
+* html div.box div.box.orange p.box_title, * html div.box div.box.orange p.box_caption {background: #f0d499;}
+* html div.box div.box.orange .box_content {background: #f8f0da;}
+
+/* end plugin:box */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/box/style.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/box/style.css
new file mode 100644
index 000000000..f20d765bc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/box/style.css
@@ -0,0 +1,272 @@
+/* plugin:box */
+div.box {
+ width: 50%;
+ margin: 1em auto;
+ border: 1px solid;
+ padding: 4px;
+ overflow: hidden;
+}
+
+/* rounded corners styles from Stu Nicholls snazzy borders, http://www.cssplay.co.uk/boxes/snazzy.html */
+.xtop, .xbottom {background:transparent; font-size:0; line-height: 1px;}
+.xb1, .xb2, .xb3, .xb4 {display:block; overflow:hidden; border-style: solid;}
+.xb2, .xb3 {height:1px;}
+.xb2, .xb3, .xb4 {border-width:0 1px;}
+.xb1 {height: 0; margin:0 5px; border-width:1px 0 0 0;}
+.xb2 {margin:0 3px; border-width:0 2px;}
+.xb3 {margin:0 2px;}
+.xb4 {height:2px; margin:0 1px;}
+
+div.box .xtop, div.box .xbottom {display: none;}
+div.box.round > .xtop, div.box.round > .xbottom {display: block;}
+
+div.box.round { border: none; padding: 0;}
+div.box.round > .xbox {display:block; border-width:0 1px; border-style: solid; padding: 0 4px; }
+
+div.box p.box_title, div.box p.box_caption {
+ font-size: 90%;
+ margin: 0;
+ padding: 2px 6px;
+ line-height: 1.2;
+}
+
+div.box p.box_title { margin-bottom: 4px;}
+div.box p.box_caption { margin-top: 4px;}
+
+div.box .box_content {
+ margin: 0;
+ padding: 0 6px;
+ border-width: 1px;
+ border-style: dashed;
+ line-height: 1.2;
+}
+
+/* floating alignment */
+
+div.box.left {
+ float: left;
+ margin-right: 1em;
+}
+
+div.box.right {
+ float: right;
+ margin-left: 1em;
+}
+
+/* colours */
+/* default */
+div.box, div.box .box_content, div.box .xbox, div.box .xb1, div.box .xb2, div.box .xb3, div.box .xb4 {
+ border-color: __dark__;
+}
+
+div.box, div.box .xbox, div.box .xb1, div.box .xb2, div.box .xb3, div.box .xb4 {
+ background: __light__;
+}
+
+div.box p.box_title, div.box p.box_caption { background: __medium__;}
+div.box .box_content { background: __lighter__;}
+
+/* blue */
+div.box.blue, div.box.blue > * > .box_content, div.box.blue > .xbox,
+div.box.blue > * > .xb1, div.box.blue > * > .xb2, div.box.blue > * > .xb3, div.box.blue > * > .xb4 {
+ border-color: #bbbbdd;
+}
+
+div.box.blue, div.box.blue > .xbox,
+div.box.blue > * > .xb1, div.box.blue > * > .xb2, div.box.blue > * > .xb3, div.box.blue > * > .xb4 {
+ background: #e4ecf8;
+}
+
+div.box.blue > * > p.box_title, div.box.blue > * > p.box_caption {background: #cad0ee;}
+div.box.blue > * > .box_content {background: #f4f8fd;}
+
+/* red */
+div.box.red, div.box.red > * > .box_content, div.box.red > .xbox,
+div.box.red > * > .xb1, div.box.red > * > .xb2, div.box.red > * > .xb3, div.box.red > * > .xb4 {
+ border-color: #ddbbbb;
+}
+
+div.box.red, div.box.red > .xbox,
+div.box.red > * > .xb1, div.box.red > * > .xb2, div.box.red > * > .xb3, div.box.red > * > .xb4 {
+ background: #f8ece4;
+}
+
+div.box.red > * > p.box_title, div.box.red > * > p.box_caption {background: #eed0ca;}
+div.box.red > * > .box_content {background: #fdf4ec;}
+
+/* green */
+div.box.green, div.box.green > * > .box_content, div.box.green > .xbox,
+div.box.green > * > .xb1, div.box.green > * > .xb2, div.box.green > * > .xb3, div.box.green > * > .xb4 {
+ border-color: #bbddbb;
+}
+
+div.box.green, div.box.green > .xbox,
+div.box.green > * > .xb1, div.box.green > * > .xb2, div.box.green > * > .xb3, div.box.green > * > .xb4 {
+ background: #e4f8f2;
+}
+
+div.box.green > * > p.box_title, div.box.green > * > p.box_caption {background: #c4e4d4;}
+div.box.green > * > .box_content {background: #ecfaf6;}
+
+/* orange */
+div.box.orange, div.box.orange > * > .box_content, div.box.orange > .xbox,
+div.box.orange > * > .xb1, div.box.orange > * > .xb2, div.box.orange > * > .xb3, div.box.orange > * > .xb4 {
+ border-color: #da3;
+}
+
+div.box.orange, div.box.orange > .xbox,
+div.box.orange > * > .xb1, div.box.orange > * > .xb2, div.box.orange > * > .xb3, div.box.orange > * > .xb4 {
+ background: #f4e8ca;
+}
+
+div.box.orange > * > p.box_title, div.box.orange > * > p.box_caption {background: #f0d499;}
+div.box.orange > * > .box_content {background: #f8f0da;}
+
+/* must come last to override coloured background when using rounded corners */
+
+div.box.round {
+ background: transparent !important;
+}
+
+/* IE fixes for unsupported child selector \*/
+
+* html div.box div.box, * html div.box div.box .box_content, * html div.box div.box .xbox,
+* html div.box div.box .xb1, * html div.box div.box .xb2,
+* html div.box div.box .xb3, * html div.box div.box .xb4 {
+ border-color: __dark__;
+}
+
+* html div.box div.box, * html div.box div.box .xbox,
+* html div.box div.box .xb1, * html div.box div.box .xb2,
+* html div.box div.box .xb3, * html div.box div.box .xb4 {
+ background: __light__;
+}
+
+* html div.box div.box p.box_title, * html div.box div.box p.box_caption { background: __medium__;}
+* html div.box div.box .box_content { background: __lighter__;}
+
+* html div.box.round .xtop, * html div.box.round .xbottom {display: block;}
+* html div.box.round .xbox {display:block; border-width:0 1px; border-style: solid; padding: 0 4px; }
+
+/* blue */
+* html div.box.blue .box_content, * html div.box.blue .xbox,
+* html div.box.blue .xb1, * html div.box.blue .xb2, * html div.box.blue .xb3, * html div.box.blue .xb4 {
+ border-color: #bbbbdd;
+}
+
+* html div.box.blue .xbox,
+* html div.box.blue .xb1, * html div.box.blue .xb2, * html div.box.blue .xb3, * html div.box.blue .xb4 {
+ background: #e4ecf8;
+}
+
+* html div.box.blue p.box_title, * html div.box.blue p.box_caption {background: #cad0ee;}
+* html div.box.blue .box_content {background: #f4f8fd;}
+
+/* nested blue */
+* html div.box div.box.blue .box_content, * html div.box div.box.blue .xbox,
+* html div.box div.box.blue .xb1, * html div.box div.box.blue .xb2,
+* html div.box div.box.blue .xb3, * html div.box div.box.blue .xb4 {
+ border-color: #bbbbdd;
+}
+
+* html div.box div.box.blue .xbox,
+* html div.box div.box.blue .xb1, * html div.box div.box.blue .xb2,
+* html div.box div.box.blue .xb3, * html div.box div.box.blue .xb4 {
+ background: #e4ecf8;
+}
+
+* html div.box div.box.blue p.box_title,
+* html div.box div.box.blue p.box_caption {background: #cad0ee;}
+* html div.box div.box.blue .box_content {background: #f4f8fd;}
+
+/* red */
+* html div.box.red .box_content, * html div.box.red .xbox,
+* html div.box.red .xb1, * html div.box.red .xb2, * html div.box.red .xb3, * html div.box.red .xb4 {
+ border-color: #ddbbbb;
+}
+
+* html div.box.red .xbox,
+* html div.box.red .xb1, * html div.box.red .xb2, * html div.box.red .xb3, * html div.box.red .xb4 {
+ background: #f8ece4;
+}
+
+* html div.box.red p.box_title, * html div.box.red p.box_caption {background: #eed0ca;}
+* html div.box.red .box_content {background: #fdf4ec;}
+
+/* nested red */
+* html div.box div.box.red .box_content, * html div.box div.box.red .xbox,
+* html div.box div.box.red .xb1, * html div.box div.box.red .xb2,
+* html div.box div.box.red .xb3, * html div.box div.box.red .xb4 {
+ border-color: #ddbbbb;
+}
+
+* html div.box div.box.red .xbox,
+* html div.box div.box.red .xb1, * html div.box div.box.red .xb2,
+* html div.box div.box.red .xb3, * html div.box div.box.red .xb4 {
+ background: #f8ece4;
+}
+
+* html div.box div.box.red p.box_title, * html div.box div.box.red p.box_caption {background: #eed0ca;}
+* html div.box div.box.red .box_content {background: #fdf4ec;}
+
+/* green */
+* html div.box.green .box_content, * html div.box.green .xbox,
+* html div.box.green .xb1, * html div.box.green .xb2, * html div.box.green .xb3, * html div.box.green .xb4 {
+ border-color: #bbddbb;
+}
+
+* html div.box.green .xbox,
+* html div.box.green .xb1, * html div.box.green .xb2, * html div.box.green .xb3, * html div.box.green .xb4 {
+ background: #e4f8f2;
+}
+
+* html div.box.green p.box_title, * html div.box.green p.box_caption {background: #c4e4d4;}
+* html div.box.green .box_content {background: #ecfaf6;}
+
+/* nested green */
+* html div.box div.box.green .box_content, * html div.box div.box.green .xbox,
+* html div.box div.box.green .xb1, * html div.box div.box.green .xb2,
+* html div.box div.box.green .xb3, * html div.box div.box.green .xb4 {
+ border-color: #bbddbb;
+}
+
+* html div.box div.box.green .xbox,
+* html div.box div.box.green .xb1, * html div.box div.box.green .xb2,
+* html div.box div.box.green .xb3, * html div.box div.box.green .xb4 {
+ background: #e4f8f2;
+}
+
+* html div.box div.box.green p.box_title, * html div.box div.box.green p.box_caption {background: #c4e4d4;}
+* html div.box div.box.green .box_content {background: #ecfaf6;}
+
+/* orange */
+* html div.box.orange .box_content, * html div.box.orange .xbox,
+* html div.box.orange .xb1, * html div.box.orange .xb2, * html div.box.orange .xb3, * html div.box.orange .xb4 {
+ border-color: #da3;
+}
+
+* html div.box.orange .xbox,
+* html div.box.orange .xb1, * html div.box.orange .xb2, * html div.box.orange .xb3, * html div.box.orange .xb4 {
+ background: #f4e8ca;
+}
+
+* html div.box.orange p.box_title, * html div.box.orange p.box_caption {background: #f0d499;}
+* html div.box.orange .box_content {background: #f8f0da;}
+
+/* nestedorange */
+* html div.box div.box.orange .box_content, * html div.box div.box.orange .xbox,
+* html div.box div.box.orange .xb1, * html div.box div.box.orange .xb2,
+* html div.box div.box.orange .xb3, * html div.box div.box.orange .xb4 {
+ border-color: #da3;
+}
+
+* html div.box div.box.orange .xbox,
+* html div.box div.box.orange .xb1, * html div.box div.box.orange .xb2,
+* html div.box div.box.orange .xb3, * html div.box div.box.orange .xb4 {
+ background: #f4e8ca;
+}
+
+* html div.box div.box.orange p.box_title, * html div.box div.box.orange p.box_caption {background: #f0d499;}
+* html div.box div.box.orange .box_content {background: #f8f0da;}
+
+/* end plugin:box */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/box/syntax.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/box/syntax.php
new file mode 100644
index 000000000..35f96f85a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/box/syntax.php
@@ -0,0 +1,287 @@
+<?php
+/**
+ * Box Plugin: Draw highlighting boxes around wiki markup
+ *
+ * Syntax: <box width% classes|title>
+ * width% width of the box, must use % unit
+ * classes one or more classes used to style the box, several predefined styles included in style.css
+ * title (optional) all text after '|' will be rendered above the main code text with a
+ * different style.
+ *
+ * Acknowledgements:
+ * Rounded corners based on snazzy borders by Stu Nicholls (http://www.cssplay.co.uk/boxes/snazzy)
+ * which is in turn based on nifty corners by Alessandro Fulciniti (http://pro.html.it/esempio/nifty/)
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ */
+
+if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/');
+if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
+require_once(DOKU_PLUGIN.'syntax.php');
+
+/**
+ * All DokuWiki plugins to extend the parser/rendering mechanism
+ * need to inherit from this class
+ */
+class syntax_plugin_box extends DokuWiki_Syntax_Plugin {
+
+ var $title_mode = false;
+
+ // the following are used in rendering and are set by _xhtml_boxopen()
+ var $_xb_colours = '';
+ var $_content_colours = '';
+ var $_title_colours = '';
+
+ /**
+ * return some info
+ */
+ function getInfo(){
+ return array(
+ 'author' => 'Christopher Smith',
+ 'email' => 'chris@jalakai.co.uk',
+ 'date' => '2008-11-11',
+ 'name' => 'Box Plugin',
+ 'desc' => 'Boxes with titles, colour and rounded corners.
+ Syntax: <box width class colours|title> ... </box|caption>
+ width, class, colours title & caption are optional.
+ The title can include some wiki markup, the box
+ contents can include almost any wiki markup.',
+ 'url' => 'http://www.dokuwiki.org/plugin:boxes',
+ );
+ }
+
+ function getType(){ return 'protected';}
+ function getAllowedTypes() { return array('container','substition','protected','disabled','formatting','paragraphs'); }
+ function getPType(){ return 'block';}
+
+ // must return a number lower than returned by native 'code' mode (200)
+ function getSort(){ return 195; }
+
+ // override default accepts() method to allow nesting
+ // - ie, to get the plugin accepts its own entry syntax
+ function accepts($mode) {
+ if ($mode == substr(get_class($this), 7)) return true;
+
+ return parent::accepts($mode);
+ }
+
+ /**
+ * Connect pattern to lexer
+ */
+ function connectTo($mode) {
+ $this->Lexer->addEntryPattern('<box>(?=.*?</box.*?>)',$mode,'plugin_box');
+ $this->Lexer->addEntryPattern('<box\s[^\r\n\|]*?>(?=.*?</box.*?>)',$mode,'plugin_box');
+ $this->Lexer->addEntryPattern('<box\|(?=[^\r\n]*?\>.*?</box.*?\>)',$mode,'plugin_box');
+ $this->Lexer->addEntryPattern('<box\s[^\r\n\|]*?\|(?=[^\r\n]*?>.*?</box.*?>)',$mode,'plugin_box');
+ }
+
+ function postConnect() {
+ $this->Lexer->addPattern('>', 'plugin_box');
+ $this->Lexer->addExitPattern('</box.*?>', 'plugin_box');
+ }
+
+ /**
+ * Handle the match
+ */
+ function handle($match, $state, $pos, &$handler){
+
+ switch ($state) {
+ case DOKU_LEXER_ENTER:
+ $data = $this->_boxstyle(trim(substr($match, 4, -1)));
+ if (substr($match, -1) == '|') {
+ $this->title_mode = true;
+ return array('title_open',$data);
+ } else {
+ return array('box_open',$data);
+ }
+
+ case DOKU_LEXER_MATCHED:
+ if ($this->title_mode) {
+ $this->title_mode = false;
+ return array('box_open','');
+ } else {
+ return array('data', $match);
+ }
+
+ case DOKU_LEXER_UNMATCHED:
+ $handler->_addCall('cdata',array($match), $pos);
+ return false;
+
+ case DOKU_LEXER_EXIT:
+ $data = trim(substr($match, 5, -1));
+ $title = ($data && $data{0} == "|") ? substr($data,1) : '';
+
+ return array('box_close', $title);
+
+ }
+ return false;
+ }
+
+ /**
+ * Create output
+ */
+ function render($mode, &$renderer, $indata) {
+
+ if (empty($indata)) return false;
+ list($instr, $data) = $indata;
+
+ if($mode == 'xhtml'){
+ switch ($instr) {
+ case 'title_open' :
+ $this->title_mode = true;
+ $renderer->doc .= $this->_xhtml_boxopen($data)."<p class='box_title'{$this->_title_colours}>";
+ break;
+
+ case 'box_open' :
+ if ($this->title_mode) {
+ $this->title_mode = false;
+ $renderer->doc .= "</p>\n<div class='box_content'{$this->_content_colours}>";
+ } else {
+ $renderer->doc .= $this->_xhtml_boxopen($data)."<div class='box_content'{$this->_content_colours}>";
+ }
+ break;
+
+ case 'data' :
+ $renderer->doc .= $renderer->_xmlEntities($data);
+ break;
+
+ case 'box_close' :
+ $renderer->doc .= "</div>\n";
+
+ if ($data) {
+ $renderer->doc .= "<p class='box_caption'{$this->_title_colours}>".$renderer->_xmlEntities($data)."</p>\n";
+ }
+ $renderer->doc .= $this->_xhtml_boxclose();
+ break;
+ }
+
+ return true;
+ }
+ return false;
+ }
+
+ function _boxstyle($str) {
+ if (!strlen($str)) return array();
+
+ $styles = array();
+
+ $tokens = preg_split('/\s+/', $str, 9); // limit is defensive
+ foreach ($tokens as $token) {
+ if (preg_match('/^\d*\.?\d+(%|px|em|ex|pt|cm|mm|pi|in)$/', $token)) {
+ $styles['width'] = $token;
+ continue;
+ }
+
+ if (preg_match('/^(
+ (\#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))| #colorvalue
+ (rgb\(([0-9]{1,3}%?,){2}[0-9]{1,3}%?\)) #rgb triplet
+ )$/x', $token)) {
+ $styles['colour'][] = $token;
+ continue;
+ }
+
+ // restrict token (class names) characters to prevent any malicious data
+ if (preg_match('/[^A-Za-z0-9_-]/',$token)) continue;
+ $styles['class'] = (isset($styles['class']) ? $styles['class'].' ' : '').$token;
+ }
+ if (!empty($styles['colour'])) {
+ $styles['colour'] = $this->_box_colours($styles['colour']);
+ }
+
+ return $styles;
+ }
+
+ function _box_colours($colours) {
+ $triplets = array();
+
+ // only need the first four colours
+ if (count($colours) > 4) $colours = array_slice($colours,0,4);
+ foreach ($colours as $colour) {
+ $triplet[] = $this->_colourToTriplet($colour);
+ }
+
+ // there must be one colour to get here - the primary background
+ // calculate title background colour if not present
+ if (empty($triplet[1])) {
+ $triplet[1] = $triplet[0];
+ }
+
+ // calculate outer background colour if not present
+ if (empty($triplet[2])) {
+ $triplet[2] = $triplet[0];
+ }
+
+ // calculate border colour if not present
+ if (empty($triplet[3])) {
+ $triplet[3] = $triplet[0];
+ }
+
+ // convert triplets back to style sheet colours
+ $style_colours['content_background'] = 'rgb('.join(',',$triplet[0]).')';
+ $style_colours['title_background'] = 'rgb('.join(',',$triplet[1]).')';
+ $style_colours['outer_background'] = 'rgb('.join(',',$triplet[2]).')';
+ $style_colours['borders'] = 'rgb('.join(',',$triplet[3]).')';
+
+ return $style_colours;
+ }
+
+ function _colourToTriplet($colour) {
+ if ($colour{0} == '#') {
+ if (strlen($colour) == 4) {
+ // format #FFF
+ return array(hexdec($colour{1}.$colour{1}),hexdec($colour{2}.$colour{2}),hexdec($colour{3}.$colour{3}));
+ } else {
+ // format #FFFFFF
+ return array(hexdec(substr($colour,1,2)),hexdec(substr($colour,3,2)), hexdec(substr($colour,5,2)));
+ }
+ } else {
+ // format rgb(x,y,z)
+ return explode(',',substr($colour,4,-1));
+ }
+ }
+
+ function _xhtml_boxopen($styles) {
+ $class = 'class="box' . (isset($styles['class']) ? ' '.$styles['class'] : '') . '"';
+ $style = isset($styles['width']) ? "width: {$styles['width']};" : '';
+
+ if (isset($styles['colour'])) {
+ $colours = 'background-color: '.$styles['colour']['outer_background'].'; ';
+ $colours .= 'border-color: '.$styles['colour']['borders'].';';
+
+ $this->_content_colours = 'style="background-color: '.$styles['colour']['content_background'].'; border-color: '.$styles['colour']['borders'].'"';
+ $this->_title_colours = 'style="background-color: '.$styles['colour']['title_background'].';"';
+
+ } else {
+ $colours = '';
+
+ $this->_content_colours = '';
+ $this->_title_colours = '';
+ }
+
+ if ($style || $colours) $style = ' style="'.$style.' '.$colours.'"';
+ if ($colours) $colours = ' style="'.$colours.'"';
+
+ $this->_xb_colours = $colours;
+
+ $html = "<div $class$style>\n";
+ $html .=" <b class='xtop'><b class='xb1'$colours></b><b class='xb2'$colours></b><b class='xb3'$colours></b><b class='xb4'$colours></b></b>\n";
+ $html .=" <div class='xbox'$colours>\n";
+
+ return $html;
+ }
+
+ function _xhtml_boxclose() {
+
+ $colours = $this->_xb_colours;
+
+ $html = " </div>\n";
+ $html .= " <b class='xbottom'><b class='xb4'$colours></b><b class='xb3'$colours></b><b class='xb2'$colours></b><b class='xb1'$colours></b></b>\n";
+ $html .= "</div>\n";
+
+ return $html;
+ }
+
+}
+
+//Setup VIM: ex: et ts=4 enc=utf-8 : \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/index.html
new file mode 100644
index 000000000..d614603ac
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/index.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="refresh" content="0; URL=../../" />
+<meta name="robots" content="noindex" />
+<title>nothing here...</title>
+</head>
+<body>
+<!-- this is just here to prevent directory browsing -->
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/COPYING b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/COPYING
new file mode 100644
index 000000000..d60c31a97
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/COPYING
@@ -0,0 +1,340 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/CREDITS b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/CREDITS
new file mode 100644
index 000000000..cb03c247d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/CREDITS
@@ -0,0 +1,58 @@
+Thanks to:
+
+Geir Landro:
+ Dtree Javascript code.
+
+Roland Hellebart:
+ The Dtree idea.
+
+Chris Beetle:
+ The root namespace index.
+
+Gleb:
+ The nons e headpage option suggestion.
+
+Malyfred:
+ Resolved incorrect namespaces levels bug.
+
+Raymond Elferink:
+ Resolved incorrect ACLs bug.
+
+Ilya Lebedev:
+ Skip index option.
+
+Franck Baron:
+ Js id option.
+
+Jon B:
+ Skip file option.
+
+Neosky:
+ Javascript toolbar bug.
+
+Paul Grove:
+ Css dynamic properties and suggestion of js theme with differents image formats
+
+Anja Vag:
+ Great help in testing and finding bugs.
+
+Blaz:
+ Current page highliting suggestion.
+
+Adrien CLERC:
+ Start page bug.
+
+Ryan Jake and Fullindex plugin:
+ Sort by metada suggestion.
+
+Herman Huitema:
+ Context menu search function and great help in testing patches.
+
+Thomas Binder:
+ Fixed a bug with msort/nsort that did not manage empty arrays.
+
+Fabian Pfannes:
+ German language
+
+Urban:
+ Context menu patch and other suggestions
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/VERSION.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/VERSION.txt
new file mode 100644
index 000000000..db43bc514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/VERSION.txt
@@ -0,0 +1 @@
+2009-08-29
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/action.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/action.php
new file mode 100644
index 000000000..ee09a980d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/action.php
@@ -0,0 +1,169 @@
+<?php
+/**
+ * Indexmenu Action Plugin: Indexmenu Component.
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+
+if(!defined('DOKU_INC')) die();
+if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
+require_once(DOKU_PLUGIN.'action.php');
+
+class action_plugin_indexmenu extends DokuWiki_Action_Plugin {
+
+ /**
+ * return some info
+ */
+ function getInfo(){
+ return array(
+ 'author' => 'Samuele Tognini',
+ 'email' => 'samuele@netsons.org',
+ 'date' => rtrim(io_readFile(DOKU_PLUGIN.'indexmenu/VERSION.txt')),
+ 'name' => 'Indexmenu (action plugin component)',
+ 'desc' => 'Indexmenu action functions.',
+ 'url' => 'http://wiki.splitbrain.org/plugin:indexmenu',
+ );
+ }
+
+ /*
+ * plugin should use this method to register its handlers with the dokuwiki's event controller
+ */
+ function register(&$controller) {
+ if ($this->getConf('only_admins')) $controller->register_hook('IO_WIKIPAGE_WRITE', 'BEFORE', $this, '_checkperm');
+ if ($this->getConf('page_index') != '') $controller->register_hook('TPL_ACT_RENDER', 'BEFORE', $this, '_loadindex');
+ $controller->register_hook('TPL_METAHEADER_OUTPUT', 'BEFORE', $this, '_hookjs');
+ $controller->register_hook('PARSER_CACHE_USE', 'BEFORE', $this, '_purgecache');
+ if ($this->getConf('show_sort')) $controller->register_hook('TPL_CONTENT_DISPLAY', 'BEFORE', $this, '_showsort');
+ }
+
+ /**
+ * Check if user has permission to insert indexmenu
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function _checkperm(&$event, $param) {
+ if ($this->_notadmin()) {
+ $event->data[0][1]= preg_replace("/{{indexmenu(|_n)>.+?}}/","",$event->data[0][1]);
+ }
+ }
+
+ /**
+ * Hook js script into page headers.
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function _hookjs(&$event, $param) {
+ global $ID;
+ global $INFO;
+ $jsmenu=DOKU_BASE."lib/plugins/indexmenu/jsmenu/";
+
+ if ($INFO['userinfo']['grps']) {
+ $jsmenu .= ($this->_notadmin()) ? "usrmenu.js" : "admmenu.js";
+ } else {
+ $jsmenu .= "menu.js";
+ }
+
+ $event->data["script"][] = array ( "type" => "text/javascript",
+ "charset" => "utf-8",
+ "_data" => "",
+ "src" => $jsmenu
+ );
+
+ $event->data["script"][] = array ( "type" => "text/javascript",
+ "charset" => "utf-8",
+ "_data" => "",
+ "src" => DOKU_BASE."lib/plugins/indexmenu/indexmenu.js"
+ );
+
+ $event->data["script"][] = array ( "type" => "text/javascript",
+ "charset" => "utf-8",
+ "_data" => "var indexmenu_ID='".idfilter($ID)."'"
+ );
+ }
+
+ /**
+ * Check for pages changes and eventually purge cache.
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function _purgecache(&$event, $param) {
+ global $ID;
+ global $conf;
+ $cache = &$event->data;
+
+ if (!isset($cache->page)) return;
+ //purge only xhtml cache
+ if ($cache->mode != "xhtml") return;
+ //Check if it is an indexmenu page
+ if (!p_get_metadata($ID,'indexmenu')) return;
+ $aclcache=$this->getConf('aclcache');
+ if ($conf['useacl']) {
+ $newkey=false;
+ if ($aclcache == 'user') {
+ //Cache per user
+ if ($_SERVER['REMOTE_USER']) $newkey=$_SERVER['REMOTE_USER'];
+ } else if ($aclcache == 'groups') {
+ //Cache per groups
+ global $INFO;
+ if ($INFO['userinfo']['grps']) $newkey=implode('#',$INFO['userinfo']['grps']);
+ }
+ if ($newkey) {
+ $cache->key .= "#".$newkey;
+ $cache->cache = getCacheName($cache->key, $cache->ext);
+ }
+ }
+ //Check if a page is more recent than purgefile.
+ if (@filemtime($cache->cache) < @filemtime($conf['cachedir'].'/purgefile')) {
+ $event->preventDefault();
+ $event->stopPropagation();
+ $event->result = false;
+ }
+ }
+
+ /**
+ * Render a defined page as index.
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function _loadindex(&$event, $param) {
+ if ('index' != $event->data) return;
+ if (!file_exists(wikiFN($this->getConf('page_index')))) return;
+ global $lang;
+ print '<h1><a id="index" name="index">'.$lang['btn_index']."</a></h1>\n";
+ print p_wiki_xhtml($this->getConf('page_index'));
+ $event->preventDefault();
+ $event->stopPropagation();
+
+ }
+
+ /**
+ * Display the indexmenu sort number.
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function _showsort(&$event, $param) {
+ global $ID,$ACT;
+ if ($ACT != 'show' || $this->_notadmin()) return;
+ if ($n=p_get_metadata($ID,'indexmenu_n')) {
+ ptln('<div class="info">');
+ ptln($this->getLang('showsort').$n);
+ ptln('</div>');
+ }
+ }
+
+ /**
+ * Check if user is administrator..
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function _notadmin() {
+ global $conf;
+ global $INFO;
+
+ if ($conf['useacl'] && $INFO['perm'] < AUTH_ADMIN) {
+ return true;
+ }
+ return false;
+ }
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/admin.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/admin.php
new file mode 100644
index 000000000..99b6e12a2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/admin.php
@@ -0,0 +1,453 @@
+<?php
+/**
+ * Indexmenu Admin Plugin: Indexmenu Component.
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+
+if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/');
+if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
+require_once(DOKU_PLUGIN.'admin.php');
+require_once (DOKU_INC.'inc/HTTPClient.php');
+require_once(DOKU_PLUGIN."indexmenu/inc/pclzip.lib.php");
+if(!defined('INDEXMENU_IMG_ABSDIR')) define('INDEXMENU_IMG_ABSDIR',DOKU_PLUGIN."indexmenu/images");
+define('INDEXMENU_ICOS','base,folder,folderopen,folderh,folderhopen,page,plus,minus,nolines_plus,nolines_minus,minusbottom,plusbottom,join,joinbottom,line,empty');
+
+class admin_plugin_indexmenu extends DokuWiki_Admin_Plugin {
+ var $req = 'fetch';
+ var $repos = array (
+ "url" => array(DOKU_URL),
+ "status" => array(""),
+ );
+
+ var $selected=-1;
+
+ /**
+ * return some info
+ */
+ function getInfo(){
+ return array(
+ 'author' => 'Samuele Tognini',
+ 'email' => 'samuele@netsons.org',
+ 'date' => rtrim(io_readFile(DOKU_PLUGIN.'indexmenu/VERSION.txt')),
+ 'name' => 'Indexmenu (admin plugin component)',
+ 'desc' => 'Indexmenu admin functions.',
+ 'url' => 'http://wiki.splitbrain.org/plugin:indexmenu',
+ );
+ }
+
+ /**
+ * return sort order for position in admin menu
+ */
+ function getMenuSort() {
+ return 999;
+ }
+
+ /**
+ * handle user request
+ */
+ function handle() {
+ $url=$this->getConf('themes_url');
+ if (empty($url)) {
+ $this->repos['url'][]=$this->getLang('no_repos');
+ $this->repos['status'][]="disabled";
+ $this->repos['install'][]=-1;
+ } else {
+ $this->repos['url']= array_merge($this->repos['url'],explode(',',$url));
+ }
+
+ if (!isset($_REQUEST['req'])) return; // first time - nothing to do
+ $this->req=$_REQUEST['req'];
+
+ if (is_numeric($_REQUEST['repo'])) $this->selected=$_REQUEST['repo'];
+ }
+
+ /**
+ * output appropriate html
+ */
+ function html() {
+ global $conf;
+ ptln('<div id="config__manager">');
+ ptln(' <h1>'.$this->getLang('menu').'</h1>');
+ ptln($this->_donate());
+ ptln(' <fieldset>');
+ ptln(' <legend>'.$this->getLang('checkupdates').'</legend>');
+ $this->_form_open("checkupdates");
+ $this->_form_close('check');
+ if ($this->req=='checkupdates') {
+ $this->_checkupdates();
+ }
+ ptln(' </fieldset>');
+ ptln(' <fieldset>');
+ ptln(' <legend>Themes</legend>');
+ ptln(' <table class="inline">');
+ ptln(' <tr class="default"><td class="label" colspan="2">');
+ ptln(' <span class="outkey">'.$this->getLang('infos').'</span>');
+ ptln(' </td></tr>');
+ $n=0;
+ //cycles thru repositories urls
+ foreach ($this->repos['url'] as $url) {
+ ptln(' <tr class="search_hit"><td>');
+ $legend=($n == 0) ? $conf['title'] : $this->repos['url'][$n];
+ ptln(' <span><label><strong>'.$legend.'</strong></label></span>');
+ ptln(' </td>');
+ ptln(' <td class="value">');
+ $this->_form_open("fetch",$n);
+ $this->_form_close("fetch");
+ ptln(' </td></tr>');
+ //list requested theme
+ if ($n==$this->selected) {
+ ptln(' <tr class="default"><td colspan="2">');
+ if ($this->req=='install') $this->install($this->selected,$_REQUEST['name']);
+ if ($this->req=='upload' && $_REQUEST['name']) {
+ $info="";
+ if (isset($_REQUEST['author_info'])) {
+ $obfuscate = array('@' => ' [at] ', '.' => ' [dot] ', '-' => ' [dash] ');
+ $info .= "author=".strtr($_REQUEST['author_info'], $obfuscate)."\n";
+ }
+ if (isset($_REQUEST['url_info'])) $info .= "url=".$_REQUEST['url_info']."\n";
+ if (isset($_REQUEST['author_info'])) $info .= "description=".$_REQUEST['author_info'];
+ if (!$this->upload($_REQUEST['name'],$info)) msg($this->getLang('install_no'),-1);
+ }
+ if ($this->req=='delete' && $_REQUEST['name']) $this->_delete($_REQUEST['name']);
+ ptln(' </td></tr><tr><td colspan="2">');
+ $this->dolist($n);
+ ptln(' </td></tr>');
+ }
+ $n++;
+ }
+ ptln(' </table>');
+ ptln(' </fieldset>');
+ ptln('</div>');
+ }
+
+ /**
+ * Connect to theme repository and list themes
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function dolist($n) {
+ global $INFO;
+ if ($n === false) return;
+ //info.txt keys to parse
+ $keys=array('author','url','description');
+ $icos=explode(',',INDEXMENU_ICOS);
+ $turl="";
+ $info="";
+ //get list
+ $data=$this->_remotequery($this->repos['url'][$n]."/lib/plugins/indexmenu/ajax.php?req=local");
+ $data=explode(",",$data);
+ //print themes
+ for ($i=3;$i<count($data);$i++) {
+ $theme=$data[$i];
+ $turl=$data[1].$data[2]."/".$theme;
+ ptln(' <em>'.$theme.'</em>');
+ ptln(' <div class="indexmenu_list_themes">');
+ ptln(' <div>');
+ //print images
+ foreach (array_slice($icos,0,8) as $ico) {
+ $ext = explode(".", $theme);
+ $ext=array_pop($ext);
+ $ext=($ext == $theme) ? '.gif' : ".$ext";
+ ptln(' <img src="'.$turl."/".$ico.$ext.'" title="'.$ico.'" alt="'.$ico.'" />');
+ }
+ ptln(' </div>');
+ //get theme info.txt
+ if ($info=$this->_remotequery($turl."/info.txt",false)) {
+ foreach ($keys as $key) {
+ if (!preg_match('/'.$key.'=(.*)/',$info,$out)) continue;
+ ptln(" <div>");
+ ptln(" <strong>".hsc($key).": </strong>".hsc($out[1]));
+ ptln(" </div>");
+ }
+ }
+ if ($n == 0) {
+ $act="upload";
+ if ($theme != "default" ) {
+ $this->_form_open("delete",$n);
+ ptln(' <input type="hidden" name="name" value="'.$theme.'" />');
+ $this->_form_close("delete");
+ }
+ } else {
+ $act="install";
+ ptln(' <a href="'.$this->repos['url'][$n]."$repo/lib/plugins/indexmenu/ajax.php?req=send&amp;t=".$theme.'">Download</a>');
+ }
+ $this->_form_open($act,$n);
+ if ($n==0 && !is_file(INDEXMENU_IMG_ABSDIR."/".$theme."/info.txt")) {
+ ptln(' <div><strong>author:</strong><input type="text" name="author_info" value="'.$INFO["userinfo"]["name"].hsc(" <".$INFO["userinfo"]["mail"].">").'" size="50" maxlength="100" /><br />');
+ ptln(' <strong>url:</strong><input type="text" name="url_info" value="'.$this->repos['url'][$n].'" size="50" maxlength="200" /><br />');
+ ptln(' <strong>description:</strong><input type="text" name="description_info" value="" size="50" maxlength="200" /></div>');
+ }
+ ptln(' <input type="hidden" name="name" value="'.$theme.'" />');
+ $this->_form_close($act);
+ ptln(' <br /><br /></div>');
+ }
+ }
+
+ /**
+ * Download and install themes
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function install ($n,$name) {
+ $repo=$this->repos['url'][$n];
+ if (!isset($name)) return false;
+ $return=true;
+ if (!$absdir=$this->checktmpsubdir()) return;
+ $tmp=$absdir."/tmp";
+
+ //send theme list request
+ if (!$zipfile=io_download($repo."/lib/plugins/indexmenu/ajax.php?req=send&t=".$name,"$tmp/",true)) {
+ msg($this->getLang('down_err').": $name",-1);
+ $return=false;
+ } else {
+ //create zip
+ $zip=new PclZip("$tmp/$zipfile");
+ $regexp="/^".$name."\/(info.txt)|(style.css)|(".str_replace(",","|",INDEXMENU_ICOS).")\.(gif|png|jpg)$/i";
+ $status=$zip->extract(PCLZIP_OPT_PATH,$absdir."/",PCLZIP_OPT_BY_PREG,$regexp);
+ //error
+ if ($status == 0) {
+ msg($this->getLang('zip_err')." $tmp/$zipfile: ".$zip->errorName(true),-1);
+ $return=false;
+ } else {
+ msg("<strong>$name</strong> ".$this->getLang('install_ok'),1);
+ }
+ }
+ //clean tmp
+ $this->_rm_dir($tmp);
+ return $return;
+ }
+
+
+ /**
+ * Remove a directory
+ *
+ */
+ function _rm_dir($path) {
+ if (!is_string($path) || $path == "") return false;
+
+ if (is_dir($path)) {
+ if (!$dh = @opendir($path)) return false;
+
+ while ($f = readdir($dh)) {
+ if ($f == '..' || $f == '.') continue;
+ $this->_rm_dir("$path/$f");
+ }
+
+ closedir($dh);
+ return @rmdir($path);
+ } else {
+ return @unlink($path);
+ }
+
+ return false;
+ }
+
+ /**
+ * Retrive and create themes tmp directory
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function checktmpsubdir () {
+ $tmp=INDEXMENU_IMG_ABSDIR."/tmp";
+ if (!io_mkdir_p($tmp)) {
+ msg($this->getLang('dir_err').": $tmp",-1);
+ return false;
+ }
+ return INDEXMENU_IMG_ABSDIR;
+ }
+
+
+ /**
+ * Upload a theme into my site
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function upload($theme,$info) {
+ $return=true;
+ $host='samuele.netsons.org';
+ $path='/dokuwiki/lib/plugins/indexmenu/upload/index.php';
+ //TODO: merge zip creation with that in ajax.php (create a class?)
+ if (!$absdir=$this->checktmpsubdir()) return false;
+ $tmp=$absdir."/tmp";
+ $zipfile="$theme.zip";
+ $filelist="$absdir/$theme";
+ //create info
+ if (!empty($info)) {
+ io_savefile("$tmp/$theme/info.txt",$info);
+ $filelist .= ",$tmp/$theme";
+ }
+ //create zip
+ $zip=new PclZip("$tmp/$zipfile");
+ $status=$zip->create($filelist,PCLZIP_OPT_REMOVE_ALL_PATH);
+ if ($status == 0) {
+ //error
+ msg($this->getLang('zip_err').": ".$zip->errorName(true),-1);
+ $return=false;
+ } else {
+ //prepare POST headers.
+ $boundary = "---------------------------".uniqid("");
+ $data=join("", file("$tmp/$zipfile"));
+ $header="POST $path HTTP/1.0\r\n";
+ $header.= "Host: $host\r\n";
+ $header.= "User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1) Gecko/20061024 Iceweasel/2.0 (Debian-2.0+dfsg-1)\r\n";
+ $header.= "Content-type: multipart/form-data, boundary=$boundary\r\n";
+ $body="--".$boundary."\r\n";
+ $body.= "Content-Disposition: form-data; name=\"userfile\"; filename=\"$zipfile\"\r\n";
+ $body.= "Content-Type: application/x-zip-compressed\r\n\r\n";
+ $body.=$data."\r\n";
+ $body.= "--".$boundary."\r\n";
+ $body.= "Content-Disposition: form-data; name=\"upload\"\r\n\r\n";
+ $body.= "Upload\r\n";
+ $body.="--".$boundary."--\r\n";
+ $header.= "Content-Length: ".strlen($body)."\r\n\r\n";
+
+ //connect and send zip
+ if ($fp = fsockopen($host, 80)) {
+ fwrite($fp,$header.$body);
+ //reply
+ $buf="";
+ while (!feof($fp)) {
+ $buf .= fgets($fp,3200);
+ }
+ fclose($fp);
+ //parse resply
+ if (preg_match("/<!--indexmenu-->(.*)<!--\/indexmenu-->/s",$buf,$match)) {
+ $str=substr($match[1],4,7);
+ switch ($str) {
+ case "ERROR ":
+ $mesg_type=-1;
+ break;
+ case "SUCCESS":
+ $mesg_type=1;
+ break;
+ default:
+ $mesg_type=2;
+ }
+ msg($match[1],$mesg_type);
+ } else {
+ $return=false;
+ }
+ } else {
+ $return=false;
+ }
+ }
+
+ $this->_rm_dir($tmp);
+ return $return;
+ }
+
+ /**
+ * Check for new messages from upstream
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function _checkupdates() {
+ require_once (DOKU_INC.'inc/HTTPClient.php');
+ global $conf;
+ global $INFO;
+ $w=-1;
+ $date=$this->getInfo('date');
+ $date=$date['date'];
+ $data=$this->_remotequery("http://samuele.netsons.org/dokuwiki/lib/plugins/indexmenu/remote.php?check=$date");
+ if ($data==="") {
+ msg($this->getLang('noupdates'),1);
+ $data .= @preg_replace('/\n\n.*$/s','',@io_readFile(DOKU_PLUGIN.'indexmenu/changelog'))."\n%\n";
+ $w=1;
+ } else {
+ $data=preg_replace('/\<br(\s*)?\/?\>/i',"", $data);
+ $data=preg_replace('/\t/'," ", $data);
+ }
+ $data=preg_replace('/\[\[(?!(http|https))(.:)(.*?)\]\]/s',"[[plugin:$3]]", $data);
+ $data=preg_replace('/\[\[(?!(http|https))(.*?)\]\]/s',"[[http://www.dokuwiki.org/$2]]", $data);
+ $msgs = explode("\n%\n",$data);
+ foreach($msgs as $msg){
+ if($msg) {
+ $msg= p_render('xhtml',p_get_instructions($msg),$info);
+ msg($msg,$w);
+ }
+ }
+ }
+
+
+ /**
+ * Get url response and check it
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function _remotequery($url,$tag=true) {
+ require_once (DOKU_INC.'inc/HTTPClient.php');
+ $http = new DokuHTTPClient();
+ $http->timeout = 8;
+ $data = $http->get($url);
+ if ($tag) {
+ if ($data===false) {
+ msg($this->getLang('conn_err'),-1);
+ } else {
+ (substr($data,0,9)==="indexmenu") ? $data=substr($data,9): $data="";
+ }
+ }
+ return $data;
+ }
+
+
+ /**
+ * Open an html form
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function _form_open($act,$n=-1) {
+ ptln(' <form action="'.wl($ID).'" method="post">');
+ ptln(' <input type="hidden" name="do" value="admin" />');
+ ptln(' <input type="hidden" name="page" value="'.$this->getPluginName().'" />');
+ ptln(' <input type="hidden" name="req" value="'.$act.'" />');
+ ptln(' <input type="hidden" name="repo" value="'.$n.'" />');
+ }
+
+ /**
+ * Close the html form
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function _form_close($act) {
+ ptln(' <input type="submit" name="btn" '.$this->repos['status'][$n].' value="'.$this->getLang($act).'" />');
+ ptln(' </form>');
+ }
+
+ /**
+ * Remove an installed theme
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function _delete($theme) {
+ if ($theme=="default") return;
+ if ($this->_rm_dir(INDEXMENU_IMG_ABSDIR."/".utf8_encodeFN(basename($theme)))) {
+ msg($this->getLang('delete_ok').": $theme.",1);
+ } else {
+ msg($this->getLang('delete_no').": $theme.",-1);
+ }
+ }
+
+ /**
+ * Print the donate button.
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function _donate() {
+ $out = "<fieldset>\n";
+ $out .= '<p>'.$this->getLang('donation_text').'</p>';
+ $out .= '<form action="https://www.paypal.com/cgi-bin/webscr" method="post">'."\n";
+ $out .= '<input type="hidden" name="cmd" value="_s-xclick" />'."\n";
+ $out .= '<input type="hidden" name="hosted_button_id" value="102873" />'."\n";
+ $out .= '<input type="image" src="https://www.paypal.com/en_US/i/btn/btn_donateCC_LG.gif" name="submit" alt="" />'."\n";
+ $out .= '<img alt="" src="https://www.paypal.com/it_IT/i/scr/pixel.gif" width="1" height="1" />'."\n";
+ $out .= "</form></fieldset>\n";
+ return $out;
+ }
+
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/ajax.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/ajax.php
new file mode 100644
index 000000000..93b3d5f07
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/ajax.php
@@ -0,0 +1,196 @@
+<?php
+/**
+ * AJAX Backend for indexmenu
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ */
+
+//fix for Opera XMLHttpRequests
+if(!count($_POST) && @$HTTP_RAW_POST_DATA){
+ parse_str($HTTP_RAW_POST_DATA, $_POST);
+}
+
+if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../../').'/');
+if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
+require_once(DOKU_INC.'inc/init.php');
+require_once(DOKU_INC.'inc/auth.php');
+if(!defined('INDEXMENU_IMG_ABSDIR')) define('INDEXMENU_IMG_ABSDIR',DOKU_PLUGIN."indexmenu/images");
+//close session
+session_write_close();
+
+$ajax_indexmenu=new ajax_indexmenu_plugin;
+$ajax_indexmenu->render();
+
+class ajax_indexmenu_plugin {
+ /**
+ * Output
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+
+ function render () {
+ $req=$_REQUEST['req'];
+ $succ=false;
+ //send the zip
+ if ($req == 'send' and isset($_REQUEST['t'])) {
+ include(DOKU_PLUGIN.'indexmenu/inc/repo.class.php');
+ $repo=new repo_indexmenu_plugin;
+ $succ=$repo->send_theme($_REQUEST['t']);
+ }
+ if ($succ) return true;
+
+ header('Content-Type: text/html; charset=utf-8');
+ header('Cache-Control: public, max-age=3600');
+ header('Pragma: public');
+ switch ($req) {
+ case 'local':
+ //list themes
+ print $this->local_themes();
+ break;
+ case 'toc':
+ //print toc preview
+ if (isset($_REQUEST['id'])) print $this->print_toc($_REQUEST['id']);
+ break;
+ case 'index':
+ //print index
+ if (isset($_REQUEST['idx'])) print $this->print_index($_REQUEST['idx']);
+ break;
+ }
+ }
+
+ /**
+ * Print a list of local themes
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+
+ function local_themes() {
+ $list='indexmenu,'.DOKU_URL.",lib/plugins/indexmenu/images,";
+ $data=array();
+ $handle=@opendir(INDEXMENU_IMG_ABSDIR);
+ while (false !== ($file = readdir($handle))) {
+ if ( is_dir (INDEXMENU_IMG_ABSDIR.'/'.$file)
+ && $file != "."
+ && $file != ".."
+ && $file != "repository"
+ && $file != "tmp"
+ ) {
+ $data[]=$file;
+ }
+ }
+ closedir($handle);
+ sort($data);
+ $list .= implode(",",$data);
+ return $list;
+ }
+
+ /**
+ * Print a toc preview
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function print_toc($id) {
+ require_once(DOKU_INC.'inc/parser/xhtml.php');
+ $id=cleanID($id);
+ if (auth_quickaclcheck($id) < AUTH_READ) return;
+ $meta = p_get_metadata($id);
+ $toc = $meta['description']['tableofcontents'];
+ $out .= '<div class="tocheader toctoggle">'.DOKU_LF;
+ if (count($toc)>1) {
+ $out .= $this->render_toc($toc);
+ } else {
+ $out .= '<a href="'.wl($id).'">';
+ $out .= ($meta['title']) ? htmlspecialchars($meta['title']) : htmlspecialchars(noNS($id));
+ $out .= '</a>'.DOKU_LF;
+ if ($meta['description']['abstract']) {
+ $out .= '</div>'.DOKU_LF;
+ $out .= '<div class="indexmenu_toc_inside">'.DOKU_LF;
+ $out .= p_render('xhtml',p_get_instructions($meta['description']['abstract']),$info);
+ $out .= '</div>'.DOKU_LF;
+ }
+ }
+ $out .= '</div>'.DOKU_LF;
+ return $out;
+ }
+
+ /**
+ * Return the TOC rendered to XHTML
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function render_toc($toc){
+ global $lang;
+ $r = new Doku_Renderer_xhtml;
+ $r->toc = $toc;
+ $out .= $lang['toc'];
+ $out .= '</div>'.DOKU_LF;
+ $out .= '<div class="indexmenu_toc_inside">'.DOKU_LF;
+ $out .= html_buildlist($r->toc,'toc',array($this,'_tocitem'));
+ $out .= '</div>'.DOKU_LF;
+ return $out;
+ }
+
+ /**
+ * Callback for html_buildlist
+ */
+ function _tocitem($item){
+ $id=cleanID($_POST['id']);
+ return '<span class="li"><a href="'.wl($id,'#'.$item['hid'],false,'').'" class="toc">'.
+ htmlspecialchars($item['title']).'</a></span>';
+ }
+
+ /**
+ * Print index nodes
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function print_index($ns) {
+ require_once(DOKU_PLUGIN.'indexmenu/syntax/indexmenu.php');
+ global $conf;
+ $idxm=new syntax_plugin_indexmenu_indexmenu();
+ $ns=$idxm->_parse_ns($ns);
+ $level=-1;
+ $max=0;
+ $data = array();
+ if ($_REQUEST['max'] > 0) {
+ $max=$_REQUEST['max'];
+ $level=$max;
+ }
+ $nss= ($_REQUEST['nss']) ? cleanID($_REQUEST['nss']) : '';
+ $idxm->sort=$_REQUEST['sort'];
+ $idxm->msort=$_REQUEST['msort'];
+ $idxm->rsort=$_REQUEST['rsort'];
+ $idxm->nsort=$_REQUEST['nsort'];
+ $fsdir="/".utf8_encodeFN(str_replace(':','/',$ns));
+ $opts= array('level' => $level,
+ 'nons' => $_REQUEST['nons'],
+ 'nss' => array(array($nss,1)),
+ 'max' => $max,
+ 'js' => false,
+ 'nopg' => $_REQUEST['nopg'],
+ 'skip_index' => $idxm->getConf('skip_index'),
+ 'skip_file' => $idxm->getConf('skip_file'),
+ 'headpage' => $idxm->getConf('headpage'),
+ 'hide_headpage' => $idxm->getConf('hide_headpage')
+ );
+ if ($idxm->sort||$idxm->msort||$idxm->rsort) {
+ $idxm->_search($data,$conf['datadir'],array($idxm,'_search_index'),$opts,$fsdir);
+ } else {
+ search($data,$conf['datadir'],array($idxm,'_search_index'),$opts,$fsdir);
+ }
+ if ($_REQUEST['nojs']) {
+ require_once(DOKU_INC.'inc/html.php');
+ $out_tmp=html_buildlist($data,'idx',array($idxm,"_html_list_index"),"html_li_index");
+ $out.=preg_replace('/<ul class="idx">(.*)<\/ul>/s',"$1",$out_tmp);
+ } else {
+ $nodes=$idxm->_jsnodes($data,'',0);
+ $out="ajxnodes = [";
+ $out.=rtrim($nodes[0],",");
+ $out.="];";
+ }
+ return $out;
+ }
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/changelog b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/changelog
new file mode 100644
index 000000000..ec78c7c38
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/changelog
@@ -0,0 +1,207 @@
+ * **2009-08-29 Version 4.6**:
+ * //New Feature//: Namespace declaration complies with dokuwiki [[:namespaces#creating namespaces|namespaces]]. :!: **Important before upgrading from previuos versions**: according to the new dokuwiki syntax, a simple //main namespace// without relative declaration prefix (i.e: "playground") doesn't refer anymore to the subnamespace in the root namespace but in the **current** namespace. To refer to the root namespace, you need to prepend the ":" declaration to it. :!:
+ * //New Feature//: Added the //context// option. It resolves relative requested namespaces starting from the current user location instead of the page containing the indexmenu syntax.
+ * //New Feature//: Changed skip_file and skip_index syntax to use dokuwiki id instead of system paths. Thanks to Dmitry Katsubo.
+ * //New Feature//: Metatada titles are not rendered when recursively bulding the indexmenu tree. This will speed up the page loading when cache expires, but could not display the heading title for nodes without metadata infos.
+ * //New Feature//: Added the nojs button in the edit toolbar and toolbar CSS classes.
+ * //New Feature//: The right JS context menu is closed by any document click. Thanks to Urban.
+ * //Bug//: Fixed a bug which prevents page caching when it contains only indexmenu syntax.
+ * //Bug//: Disable JS indexmenu cookies in preview mode.
+ * //Bug//: Fixed an acl issue.
+ * //Bug//: Fixed UTF8 toc preview bug.
+
+ * **2009-01-04 Version 4.5**:
+ * //Bug//: Fixed a stupid bug with toolbar.
+
+ * **2008-12-02 Version 4.4**:
+ * //New Feature//: Added ajax for the nojs index view.
+ * //New Feature//: Added navbar support also in nojs mode, but unlike js mode, its page does not use cache.
+ * //New Feature//: Added nopg option. Thanks to Sebastian E.
+ * //New Feature//: Toc preview displays rendered instructions instead of raw text when toc is empty.
+ * //New Feature//: German translation by Fabian Pfannes.
+ * //Bug//: Fixed acl bugs that prevents js mode to work correctly.
+ * //Bug//: Fixed a bug with [[plugin:indexmenu#only_admins|Only Admins]] option.
+ * //Bug//: Fixed a bug that prevents to disable the context menu.
+ * //Bug & Features//: id for navbar trees is now random by default + Minor bug fixes and improvements.
+ * //Others//: [[http://samuele.netsons.org/dokuwiki/doku.php?id=dokuwiki:plugins:indexmenu#donation|Donation]] button added.
+
+ * **2008-04-12 Version 4.3**:
+ * New Feature: Different js [[plugin:indexmenu#the_context_menu|context menus]] for anonymous, authenticated and admin user.
+ * Bug: Dokuwiki RC2008-04-11 compatible.
+ * Bug: Context menu should now support all userewrite and useslash DW config options.
+ * Bug: Fixed msort to work with nsort when in non-js mode.
+
+ * **2008-03-10 Version 4.2**:
+ * Bug: Fixed loop with nsort option. Thanks to Thomas Binder.
+ * Bug: Do not display empty namespace icon for empty headpages.
+ * Bug: Fixed navbar not working with max option and a main namespace different from root.
+ * Bug: Context menu "New page here" item creates the right page for headpages.
+
+ * **2008-02-16 Version 4.1**:
+ * New Feature: Indexmenu tree behaviour depends on the [[wiki:config#sneaky_index]] option. More info in the [[.:indexmenu#about ACLs]] section. Please read carefully the note about dokuwiki versions that do not support it.
+ * New Feature: Fixed some issues with Acls and empty namespaces. More info in the section [[.:indexmenu#about empty namespaces]].
+ * New Feature: Added the "Search in this namespace" option in the contextmenu. Thanks to Herman Huitema.
+ * Bug: Fixed broken js tree with dokuwiki search engine when node contains an highlighted word.
+ * Bugs: Fixed broken toolbar element when the dokuwiki js compact option is on.
+ * Bug: Single quote in dokuwiki config [[wiki:config#title]] breaks js tree when [[.:indexmenu#Namespaces title and link|headpage]] option is not configured.
+ * Changes: Minor contextmenu styling changes.
+
+ * **2007-10-26 Version 4.0**:
+ * New Feature: Added a customizable context menu (right click) for pages/namespaces common actions.
+ * New Feature: Added nsort option in order to sorts namespaces according to tsort/dsort/msort options.
+ * Bugs: Fixed a xhtml compatibility bug with msort and max option.
+ * Changes: Automatically scroll navbar menu to fit the current page.
+
+ * **2007-08-30 Version 3.9**:
+ * New Feature: Added options to sort by title, date and by custom metadata. Infos in the [[.:indexmenu#syntax]] section. Metadata sorting idea was "stolen" from [[.:fullindex]] plugin so thanks to the its author.
+ * New Feature: Added the %%{{indexmenu_n>N}}%% syntax to set a custom number used by metadata sorting. Infos in the [[.:indexmenu#syntax]] section.
+ * New Feature: Support for custom css styles based on theme. Infos in the [[.:indexmenu#css style]] section. An example is in the thread theme on the indexmenu repository.
+ * Changes: Added more options to the indexmenu toolbar in edit mode.
+ * Changes: Changed the scrolling tree style and usability. It does not anymore scroll automatically when node gets focus.
+
+ * **2007-07-11 Version 3.8**:
+ * Bug: Solved bugs when using url rewriting.
+ * Bug: Solved a bug in the css width property of toc preview div.
+
+ * **2007-07-07 Version 3.7**:
+ * Bug: Navbar did not work in ie6/7 with max option on.
+ * Bug: The js tree was wrong with headpages off.
+
+ * **2007-07-05 Version 3.6**:
+ * New Feature: Added max option to load nodes from ajax. This will significantly speed up the index in sites with an high amount of pages.
+ * Changes: Old max option renamed to maxjs.
+
+ * **2007-06-10 Version 3.5**:
+ * Bug: tsort option did not sort namespaces.
+
+ * **2007-06-08 Version 3.4**:
+ * New Feature: Added option "tsort" to sort nodes by title.
+ * Security Fix: Fixed ajax security with toc preview.
+
+ * **2007-06-04 Version 3.3**:
+ * :!: You could need to purge browser cache after installing it.
+ * New Feature: Added a Toc preview for javascript tree. You can disable it with "notoc" option.
+ * New Feature: The tree is always automatically updated with every requested namespace. You don't need anymore any ~~NOCACHE~~ or &purge options.
+ * New Feature: Acls work correctly with every requested namespace. Be sure to set correctly the [[.:indexmenu#acl cache]] option.
+ * New Feature: Added a global option to replace the dokuwiki index with an indexmenu page.
+ * New Feature: Added the global "Acl cache" option in order to optimize the acl caching mechanism. Please, read info at [[.:indexmenu#acl cache]].
+ * Changes: The size of the scrolling arrow image adjusts itself dynamically.
+ * Changes: Added the uncompressed javascript file for development purpose.
+ * Bug: The "Deny indexmenu to no-admins" now works correctly.
+
+ * **2007-05-10 Version 3.2**:
+ * Bug: Solved acl bug. It works only for root requested namespace.
+ * Bug: Solved start page bug. Patch by Adrien CLERC, thanks.
+
+ * **2007-03-14 Version 3.1**:
+ * :!: You could need to purge browser cache after installing it.
+ * New Feature: Themes deleting option in admin panel.
+ * Bug-New Feature: No-tree message now works and it supports wiki instructions.
+ * Bug: Js tree does not scroll anymore when nodes are visibles.
+ * Bug: Solved a bug with utf8 that prevented hidepages to work with no ASCII characters.
+ * Changes: Removed the automatic checking for updates option, because it slows down a bit the pages loading. Now it's manual and it's in admin panel.
+
+ * **2007-01-25 Version 3.0**:
+ * New Feature: Quick initial tree render thanks to the max option.
+ * New Feature: Max option to set how many js tree levels initially render. By default is set to 1 to speed up initial page loading.
+ * New feature: Scrolling js tree when nodes length do not fit its container.
+ * New Feature: Js tree highligts the current page.
+ * New Feature: Added js tooltips.
+ * Change: Removed the theme images directory setting to avoid problems. A symlink do the same work and in a simplest way.
+ * Change: Nojs tree is displayed when javascript is disabled or fails.
+ * Bug: The heading titles option for pages now works only if the global useheading setting is on.
+ * Bug: Pages that does not contain anymore indexmenu instructions are nomore cache purged by indexmenu itself.
+ * Bug: Indexmenu is xhtml compatible.
+ * Others: Code improvements and cleaning. A big thanks to Anja Wagenbret for testing and helping.
+
+ * **2006-12-19 Version 2.9**:
+ * New feature: The tree is automatically updated when the specified namespaces is the site root (..).
+ You don't need anymore to use the NOCACHE istruction.
+ * New feature: Indexmenu theme management in admin panel. You can download and share js themes.
+ * New feature: "navbar" option: the tree opens automatically itself at the current page namespace.
+ Good as navigation sidebar.
+ * Changed: Disabled custom css style for nojs menu when headpage is off.
+ * Bug: Firefox sometimes corrupt cached dokuwiki javascript.
+ This is an attempt to solve this bug, i hope it works (any feedback is welcome).
+ * Bug: Displayed incorrect titles when headpages are disable.
+
+ * **2006-11-09 Version 2.8**:
+ * New Feature: Option to deny the indexmenu use to no-admins.
+ * New Feature: Option to check for indexmenu updates when in admin mode ((need web connection to my site)).
+ * New Feature: Css style for namespaces and headpages links in nojs status as suggested by Mathiasm.
+ * New Feature: Support for png and jpg images formats for the js theme.
+ * Bug: Solved the Call-time pass-by-reference php5 bug.
+ * Changed: Changed some static css property into dynamic.
+
+ * **2006-10-23 Version 2.7**:
+ * :!: The default release is Compatible with Dokuwiki RC and it's configurable throught [[plugin:config|Configuration Manager]]. 2006-09-03 Dokuwiki users should read the [[.:indexmenu#How to install]] infos.
+ * Changes: Optional namespaces now works as you expect.
+ * Bug Fixed: Indexmenu button toolbar not showed when page is readonly. Thanks to [[neospams@vodafone.de|Neosky]].
+ * Bug Fixed: Escape of html in titles.
+ * Changes: Better displaying of default theme icons on dark background. Thanks to Paul Grove.
+ * Cosmetic code changes.
+ * **2006-10-7 Version 2.6**:
+ * New feature: Optional namespaces option.
+ * New feature: ".:ns" now specifies the "ns" namespace inside current namespace.
+ * Changes: "Cookie" option substituted by "nocookie" option. Now cookies are enabled by default.
+ * New feature: Custom headpages icon and css style in js mode.
+ * New feature: Added a Dtree option that should speed up the tree rendering.
+ * New feature: If scripts are disabled by the browser, standard tree will be showed in place of js one.
+ * New feature: Skip files option. Coded by Jon B (thanks).
+ * New feature: Customizable js theme directory path.
+ * New feature: Indexmenu toolbar in "edit page" mode.
+
+ * **2006-09-10 Version 2.5**:
+ * New feature: More customizable headpage option ((old "true" value is automatically translated into the :inside: option)).
+ * New feature: Js cookie option.
+ * New feature: Js id option. Many thanks to [[frbaron@gmail.com|Franck Baron]].
+ * New feature: Skip index option. Many thanks to [[ilya@lebedev.net|Ilya Lebedev AKA WingedFox]].
+ * Fixed bug: Incorrect ACL namespace. Many thanks to [[raymond@raycom.com|Raymond Elferink]].
+
+ * **2006-07-10 Version 2.4**:
+ * Fixed bug: Strange behaviours when using [[wiki:config#userewrite]] and [[wiki:config#useslash]].
+ * Fixed bug: No namespace title when the "." namespace is requested.
+ * Fixed bug: When title of the page contains %%'%% symbol, indexmenu fails.
+
+ * **2006-06-25 Version 2.3**:
+ * Fixed bug: incorrect namespaces levels. Many thanks to [[http://fredfred.net/skriker|malyfred]].
+ * Fixed bug: empty namespace title if headpage has no title.
+ * Fixed bug: nons doesn't work with js option.
+ * Fixed bug: parameters check.
+ * Fixed bug: start page is not hidden with js option.
+ * Fixed bug: acl denied namespaces are displayed. info [[.:indexmenu#about_acl|here]].
+
+ * **2006-06-13 Version 2.2**:
+is for the [[http://www.destroydrop.com/javascripts/tree/|dTree]] menu. Thanks to the [[.:tree]] plugin for the idea.
+ * Custom themes and style for javascript menu.
+
+ * **2006-06-12 Version 2.1**:
+ * Changed the way ''headpage'' option works.
+ * Added ''hide_headpage'' option to hide headpages.
+
+ * **2006-06-12 Version 2.0**:
+ * Added the ''headpage'' global configuration option to customize namespaces title and link. Thanks to [[bru@inbox.ru|Gleb]] for this nice idea.
+ *Javascript level bug fixed.
+ *Changed the base icon in default js theme.
+
+ * **2006-04-05 Version 1.9**:
+ * Added the javascript tree method. Thanks to Geir Landr
+
+ * **2006-04-05 Version 1.4**:
+ * Replaced the ''closed'' argument with a more powerful level number option. I guess it is the last modification on this argument.
+ * Small code fix.
+
+ * **2006-04-04 Version 1.3**:
+ * New ''nons'' option for excluding namespace items from index as suggested by //[[bru@inbox.ru|Gleb]]//.
+ * Some cosmetic changes (changed the argument name for closed index).
+
+ * **2006-04-01 Version 1.2**:
+ * Root namespace index. Thanks to [[cbeetle@physics.fau.edu|Chris Beetle]].
+
+ * **2006-03-29 Version 1.1**:
+ * Recursive tree index of all pages and namespaces beneath the specified namespace.
+ * Lexical option for disabling the tree index and only showing the first level.
+
+ * **2006-03-24 Version 1.0**:
+ * Released.
+ * Fixed bug in namespaces title visualization.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/conf/default.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/conf/default.php
new file mode 100644
index 000000000..7c0f46228
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/conf/default.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Default configuration for indexmenu plugin
+ *
+ * @license: GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author: Samuele Tognini <samuele@netsons.org>
+ */
+$conf['only_admins'] = 0;
+$conf['aclcache'] = 'groups';
+$conf['headpage'] = ':start:,:same:,:inside:';
+$conf['hide_headpage'] = 1;
+$conf['page_index'] = '';
+$conf['empty_msg'] = '';
+$conf['skip_index'] = '';
+$conf['skip_file'] = 'sidebar';
+$conf['show_sort'] = true;
+$conf['themes_url'] = 'http://samuele.netsons.org/dokuwiki';
+$conf['be_repo'] = false;
+$conf['sneaky_index'] = (isset($GLOBALS['conf']['sneaky_index'])) ? $GLOBALS['conf']['sneaky_index'] : true;
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/conf/metadata.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/conf/metadata.php
new file mode 100644
index 000000000..cd45f163a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/conf/metadata.php
@@ -0,0 +1,18 @@
+<?php
+/**
+ * Configuration-manager metadata for indexmenu plugin
+ *
+ * @license: GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author: Samuele Tognini <samuele@netsons.org>
+ */
+$meta['only_admins'] = array('onoff');
+$meta['aclcache'] = array('multichoice', '_choices' => array('none', 'user' ,'groups'));
+$meta['headpage'] = array('multicheckbox', '_choices' => array(':start:', ':same:' ,':inside:'));
+$meta['hide_headpage'] = array('onoff');
+$meta['page_index'] = array('string', '_pattern' => '#^[a-z:]*#');
+$meta['empty_msg'] = array('string');
+$meta['skip_index'] = array('string','_pattern' => '/^($|\/.*\/.*$)/');
+$meta['skip_file'] = array('string','_pattern' => '/^($|\/.*\/.*$)/');
+$meta['show_sort'] = array('onoff');
+//$meta['themes_url'] = array('string','_pattern' => '/^($|http:\/\/\S+$)/i');
+//$meta['be_repo'] = array('onoff');
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/edit-full.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/edit-full.js
new file mode 100644
index 000000000..9ab87c8a8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/edit-full.js
@@ -0,0 +1,152 @@
+function indexmenu_toolbar_additions() {
+ var edbtn,cmenu,indx_btn,toolbar = DOKUid('tool__bar');
+ if(!toolbar) return;
+ edbtn = DOKUid('edbtn__save');
+ if(!edbtn) return;
+ var indx_list = indexmenu_createPicker('picker_plugin_indexmenu');
+ indx_btn = indexmenu_createToolbar();
+ toolbar.appendChild(indx_btn);
+ indx_btn.onclick = function(){indexmenu_ajaxmenu('req=local',indx_list,this,false,indexmenu_createThemes);return false;};
+ cmenu=window.indexmenu_contextmenu;
+ if(cmenu[1]) {
+ window.indexmenu_contextmenu[0]=cmenu[1].concat(cmenu[0]);
+ }
+}
+
+function indexmenu_createThemes(data,indx_list) {
+ if (data.substring(0,9) != 'indexmenu') {
+ indx_list.innerHTML="Retrieving error";
+ return;
+ }
+ var checkboxes=[['<p><strong><em>Navigation</em></strong></p>',0],
+ ['navbar','The tree opens at the current namespace'],
+ ['context','Display the tree of the current wiki namespace context'],
+ ['nocookie','Don\t remember open/closed nodes during user navigation'],
+ ['noscroll','Prevent to scrolling the tree when it does not fit its container width'],
+ ['notoc','Disable the toc preview feature'],
+ ['<p><strong><em>Sort</em></strong></p>',0],
+ ['nsort','Sort also namespaces'],
+ ['tsort','By title'],
+ ['dsort','By date'],
+ ['msort','By meta tag'],
+ ['<p><strong><em>Performance</em></strong></p>',0],
+ ['max#2','How many levels to render with ajax when a node is opened'],
+ ['maxjs#2','How many levels to render in the client browser when a node is opened'],
+ ['<p><strong><em>Filters</em></strong></p>',0],
+ ['nons','Show only pages'],
+ ['nopg','Show only namespaces']];
+
+ var btn,key,theme_url,adata,f,f2,l,fo;
+ adata=data.split(',');
+ theme_url = DOKU_MEDIA + 'lib/plugins/indexmenu/images/';
+ f=indexmenu_toolFrame(indx_list,'Indexmenu');
+ l = document.createElement('div');
+ l.className = 'no indexmenu_nojstoolbar';
+ f.appendChild(l);
+ btn = createToolButton(DOKU_MEDIA + 'lib/tpl/default/images/open.gif','nojs index');
+ btn.innerHTML += 'Nojs';
+ btn.className = 'pickerbutton';
+ eval('btn.onclick = function(){indexmenu_opts("");}');
+ l.appendChild(btn);
+
+ l = document.createElement('div');
+ l.className = 'no indexmenu_jstoolbar';
+ f.appendChild(l);
+ if (adata[0] != 'indexmenu') {
+ l.innerHTML += 'No themes';
+ adata=[];
+ } else {
+ adata.splice(0,3);
+ }
+ for (key in adata) {
+ btn = createToolButton(theme_url + adata[key]+'/base.'+indexmenu_findExt(adata[key]),adata[key]);
+ btn.className = 'pickerbutton';
+ eval('btn.onclick = function(){indexmenu_opts("js#'+adata[key]+'");}');
+ l.appendChild(btn);
+ }
+ f2=indexmenu_toolFrame(indx_list,'Options');
+ fo=document.createElement('form');
+ fo.id='indexmenu_optfrm';
+ fo.className='indexmenu_opts';
+ f2.appendChild(fo);
+ for (key in checkboxes) {
+ lc = document.createElement('label');
+ lc.innerHTML=checkboxes[key][0]+' ';
+ if (checkboxes[key][1]) {
+ lc.title= checkboxes[key][1];
+ btn=document.createElement('input');
+ btn.type = 'checkbox';
+ btn.name = 'check';
+ btn.title = checkboxes[key][1];
+ btn.value = checkboxes[key][0];
+ fo.appendChild(btn);
+ }
+ fo.appendChild(lc);
+ }
+
+ l = document.createElement('div');
+ l.className = 'indexmenu_extratoolbar';
+ l.innerHTML='<p><strong><em>Extra</em></strong></p>';
+ f.appendChild(l);
+ btn = createToolButton(theme_url+'/msort.gif','Insert the sort meta-number');
+ btn.className = 'pickerbutton';
+ btn.onclick = function(){insertTags(
+ 'wiki__text',
+ '{{indexmenu_n>',
+ '}}',
+ '1'
+ );
+ DOKUid('picker_plugin_indexmenu').style.display='none';
+ return false;
+ };
+ l.appendChild(btn);
+}
+
+function indexmenu_createToolbar (){
+ var indx_ico = document.createElement('img');
+ indx_ico.src = DOKU_MEDIA + 'lib/plugins/indexmenu/images/indexmenu_toolbar.png';
+ var indx_btn = document.createElement('button');
+ indx_btn.id = 'syntax_plugin_indexmenu';
+ indx_btn.className = 'toolbutton';
+ indx_btn.title = 'Insert the Indexmenu tree';
+ indx_btn.appendChild(indx_ico);
+ return indx_btn;
+}
+
+function indexmenu_opts(m) {
+ var i,v = '';
+ var f=DOKUid('indexmenu_optfrm');
+ for (i=0; i < f.length; i++) {
+ if (f[i].checked) {
+ v = v + ' ' + f[i].value;
+ }
+ }
+ insertTags(
+ 'wiki__text',
+ '{{indexmenu>',
+ ((m||v)?'|':'')+m.replace(/#default$/,'')+v+'}}',
+ '#1'
+ );
+ DOKUid('picker_plugin_indexmenu').style.display='none';
+ return false;
+}
+
+function indexmenu_insertTags(lnk,sep) {
+ var r,l=lnk;
+ if (sep) {
+ r=new RegExp (sep,"g");
+ l=lnk.replace(r,':');
+ }
+ insertTags('wiki__text','[[',']]',l);
+}
+
+function indexmenu_toolFrame(parent,txt) {
+ f=document.createElement('fieldset');
+ l=document.createElement('legend');
+ l.innerHTML='<strong>'+txt+'</strong>';
+ f.appendChild(l);
+ parent.appendChild(f);
+ return f;
+}
+
+indexmenu_toolbar_additions();
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/edit.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/edit.js
new file mode 100644
index 000000000..7deb5a596
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/edit.js
@@ -0,0 +1 @@
+function indexmenu_toolbar_additions(){var e,d,c,b=DOKUid("tool__bar");if(!b){return;}e=DOKUid("edbtn__save");if(!e){return;}var a=indexmenu_createPicker("picker_plugin_indexmenu");c=indexmenu_createToolbar();b.appendChild(c);c.onclick=(function(){indexmenu_ajaxmenu("req=local",a,this,false,indexmenu_createThemes);return false;});d=window.indexmenu_contextmenu;if(d[1]){window.indexmenu_contextmenu[0]=d[1].concat(d[0]);}}function indexmenu_createThemes(k,j){if(k.substring(0,9)!="indexmenu"){j.innerHTML="Retrieving error";return;}var i=[["<p><strong><em>Navigation</em></strong></p>",0],["navbar","The tree opens at the current namespace"],["context","Display the tree of the current wiki namespace context"],["nocookie","Don\t remember open/closed nodes during user navigation"],["noscroll","Prevent to scrolling the tree when it does not fit its container width"],["notoc","Disable the toc preview feature"],["<p><strong><em>Sort</em></strong></p>",0],["nsort","Sort also namespaces"],["tsort","By title"],["dsort","By date"],["msort","By meta tag"],["<p><strong><em>Performance</em></strong></p>",0],["max#2","How many levels to render with ajax when a node is opened"],["maxjs#2","How many levels to render in the client browser when a node is opened"],["<p><strong><em>Filters</em></strong></p>",0],["nons","Show only pages"],["nopg","Show only namespaces"]];var h,g,f,e,d,c,b,a;e=k.split(",");f=DOKU_MEDIA+"lib/plugins/indexmenu/images/";d=indexmenu_toolFrame(j,"Indexmenu");b=document.createElement("div");b.className="no indexmenu_nojstoolbar";d.appendChild(b);h=createToolButton(DOKU_MEDIA+"lib/tpl/default/images/open.gif","nojs index");h.innerHTML+="Nojs";h.className="pickerbutton";eval("b.onclick = function(){indexmenu_opts(\"\");}");b.appendChild(h);b=document.createElement("div");b.className="no indexmenu_jstoolbar";d.appendChild(b);if(e[0]!="indexmenu"){b.innerHTML+="No themes";e=[];}else{e.splice(0,3);}for(g in e){h=createToolButton(f+e[g]+"/base."+indexmenu_findExt(e[g]),e[g]);h.className="pickerbutton";eval("h.onclick = function(){indexmenu_opts(\"js#"+e[g]+"\");}");b.appendChild(h);}c=indexmenu_toolFrame(j,"Options");a=document.createElement("form");a.id="indexmenu_optfrm";a.className="indexmenu_opts";c.appendChild(a);for(g in i){lc=document.createElement("label");lc.innerHTML=i[g][0]+" ";if(i[g][1]){lc.title=i[g][1];h=document.createElement("input");h.type="checkbox";h.name="check";h.title=i[g][1];h.value=i[g][0];a.appendChild(h);}a.appendChild(lc);}b=document.createElement("div");b.className="indexmenu_extratoolbar";b.innerHTML="<p><strong><em>Extra</em></strong></p>";d.appendChild(b);h=createToolButton(f+"/msort.gif","Insert the sort meta-number");h.className="pickerbutton";h.onclick=(function(){insertTags("wiki__text","{{indexmenu_n>","}}","1");DOKUid("picker_plugin_indexmenu").style.display="none";return false;});b.appendChild(h);}function indexmenu_createToolbar(){var b=document.createElement("img");b.src=DOKU_MEDIA+"lib/plugins/indexmenu/images/indexmenu_toolbar.png";var a=document.createElement("button");a.id="syntax_plugin_indexmenu";a.className="toolbutton";a.title="Insert the Indexmenu tree";a.appendChild(b);return a;}function indexmenu_opts(d){var c,b="";var a=DOKUid("indexmenu_optfrm");for(c=0;c<a.length;c++){if(a[c].checked){b=b+" "+a[c].value;}}insertTags("wiki__text","{{indexmenu>",((d||b)?"|":"")+d.replace(/#default$/,"")+b+"}}","#1");DOKUid("picker_plugin_indexmenu").style.display="none";return false;}function indexmenu_insertTags(d,c){var b,a=d;if(c){b=new RegExp(c,"g");a=d.replace(b,":");}insertTags("wiki__text","[[","]]",a);}function indexmenu_toolFrame(b,a){f=document.createElement("fieldset");l=document.createElement("legend");l.innerHTML="<strong>"+a+"</strong>";f.appendChild(l);b.appendChild(f);return f;}indexmenu_toolbar_additions();
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/close.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/close.gif
new file mode 100644
index 000000000..8c07da8ad
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/close.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/base.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/base.gif
new file mode 100644
index 000000000..ced7f0879
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/base.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/empty.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/empty.gif
new file mode 100644
index 000000000..b5cf52378
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/empty.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folder.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folder.gif
new file mode 100644
index 000000000..0d7d6431b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folder.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folderh.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folderh.gif
new file mode 100644
index 000000000..c7c9f7ed6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folderh.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folderhopen.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folderhopen.gif
new file mode 100644
index 000000000..20fe6ace1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folderhopen.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folderopen.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folderopen.gif
new file mode 100644
index 000000000..a9c466a5b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folderopen.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/info.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/info.txt
new file mode 100644
index 000000000..1b1d8cde3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/info.txt
@@ -0,0 +1,2 @@
+author=Samuele Tognini
+url=http://samuele.netsons.org/dokuwiki
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/join.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/join.gif
new file mode 100644
index 000000000..34dd47610
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/join.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/joinbottom.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/joinbottom.gif
new file mode 100644
index 000000000..48b81c80a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/joinbottom.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/line.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/line.gif
new file mode 100644
index 000000000..1a259eea0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/line.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/minus.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/minus.gif
new file mode 100644
index 000000000..3d212a97a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/minus.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/minusbottom.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/minusbottom.gif
new file mode 100644
index 000000000..dc3198be2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/minusbottom.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/nolines_minus.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/nolines_minus.gif
new file mode 100644
index 000000000..2592ac20f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/nolines_minus.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/nolines_plus.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/nolines_plus.gif
new file mode 100644
index 000000000..f258ce211
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/nolines_plus.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/page.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/page.gif
new file mode 100644
index 000000000..5d120fa99
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/page.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/plus.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/plus.gif
new file mode 100644
index 000000000..b2c997233
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/plus.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/plusbottom.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/plusbottom.gif
new file mode 100644
index 000000000..b5671d891
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/plusbottom.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/empty.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/empty.gif
new file mode 100644
index 000000000..afbe6429d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/empty.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/indexmenu_toolbar.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/indexmenu_toolbar.png
new file mode 100644
index 000000000..460e0f981
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/indexmenu_toolbar.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/larrow.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/larrow.gif
new file mode 100644
index 000000000..a0f09e9d1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/larrow.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/msort.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/msort.gif
new file mode 100644
index 000000000..5dae8131d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/msort.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/rarrow.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/rarrow.gif
new file mode 100644
index 000000000..58a4158f5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/rarrow.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/toc_bullet.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/toc_bullet.gif
new file mode 100644
index 000000000..a90924ce8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/toc_bullet.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/inc/pclzip.lib.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/inc/pclzip.lib.php
new file mode 100644
index 000000000..19f20b9da
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/inc/pclzip.lib.php
@@ -0,0 +1,5748 @@
+<?php
+// --------------------------------------------------------------------------------
+// PhpConcept Library - Zip Module 2.5
+// --------------------------------------------------------------------------------
+// License GNU/LGPL - Vincent Blavet - March 2006
+// http://www.phpconcept.net
+// --------------------------------------------------------------------------------
+//
+// Presentation :
+// PclZip is a PHP library that manage ZIP archives.
+// So far tests show that archives generated by PclZip are readable by
+// WinZip application and other tools.
+//
+// Description :
+// See readme.txt and http://www.phpconcept.net
+//
+// Warning :
+// This library and the associated files are non commercial, non professional
+// work.
+// It should not have unexpected results. However if any damage is caused by
+// this software the author can not be responsible.
+// The use of this software is at the risk of the user.
+//
+// --------------------------------------------------------------------------------
+// $Id: pclzip.lib.php,v 1.44 2006/03/08 21:23:59 vblavet Exp $
+// --------------------------------------------------------------------------------
+
+ // ----- Constants
+ define( 'PCLZIP_READ_BLOCK_SIZE', 2048 );
+
+ // ----- File list separator
+ // In version 1.x of PclZip, the separator for file list is a space
+ // (which is not a very smart choice, specifically for windows paths !).
+ // A better separator should be a comma (,). This constant gives you the
+ // abilty to change that.
+ // However notice that changing this value, may have impact on existing
+ // scripts, using space separated filenames.
+ // Recommanded values for compatibility with older versions :
+ //define( 'PCLZIP_SEPARATOR', ' ' );
+ // Recommanded values for smart separation of filenames.
+ define( 'PCLZIP_SEPARATOR', ',' );
+
+ // ----- Error configuration
+ // 0 : PclZip Class integrated error handling
+ // 1 : PclError external library error handling. By enabling this
+ // you must ensure that you have included PclError library.
+ // [2,...] : reserved for futur use
+ define( 'PCLZIP_ERROR_EXTERNAL', 0 );
+
+ // ----- Optional static temporary directory
+ // By default temporary files are generated in the script current
+ // path.
+ // If defined :
+ // - MUST BE terminated by a '/'.
+ // - MUST be a valid, already created directory
+ // Samples :
+ // define( 'PCLZIP_TEMPORARY_DIR', '/temp/' );
+ // define( 'PCLZIP_TEMPORARY_DIR', 'C:/Temp/' );
+ define( 'PCLZIP_TEMPORARY_DIR', '' );
+
+// --------------------------------------------------------------------------------
+// ***** UNDER THIS LINE NOTHING NEEDS TO BE MODIFIED *****
+// --------------------------------------------------------------------------------
+
+ // ----- Global variables
+ $g_pclzip_version = "2.5";
+
+ // ----- Error codes
+ // -1 : Unable to open file in binary write mode
+ // -2 : Unable to open file in binary read mode
+ // -3 : Invalid parameters
+ // -4 : File does not exist
+ // -5 : Filename is too long (max. 255)
+ // -6 : Not a valid zip file
+ // -7 : Invalid extracted file size
+ // -8 : Unable to create directory
+ // -9 : Invalid archive extension
+ // -10 : Invalid archive format
+ // -11 : Unable to delete file (unlink)
+ // -12 : Unable to rename file (rename)
+ // -13 : Invalid header checksum
+ // -14 : Invalid archive size
+ define( 'PCLZIP_ERR_USER_ABORTED', 2 );
+ define( 'PCLZIP_ERR_NO_ERROR', 0 );
+ define( 'PCLZIP_ERR_WRITE_OPEN_FAIL', -1 );
+ define( 'PCLZIP_ERR_READ_OPEN_FAIL', -2 );
+ define( 'PCLZIP_ERR_INVALID_PARAMETER', -3 );
+ define( 'PCLZIP_ERR_MISSING_FILE', -4 );
+ define( 'PCLZIP_ERR_FILENAME_TOO_LONG', -5 );
+ define( 'PCLZIP_ERR_INVALID_ZIP', -6 );
+ define( 'PCLZIP_ERR_BAD_EXTRACTED_FILE', -7 );
+ define( 'PCLZIP_ERR_DIR_CREATE_FAIL', -8 );
+ define( 'PCLZIP_ERR_BAD_EXTENSION', -9 );
+ define( 'PCLZIP_ERR_BAD_FORMAT', -10 );
+ define( 'PCLZIP_ERR_DELETE_FILE_FAIL', -11 );
+ define( 'PCLZIP_ERR_RENAME_FILE_FAIL', -12 );
+ define( 'PCLZIP_ERR_BAD_CHECKSUM', -13 );
+ define( 'PCLZIP_ERR_INVALID_ARCHIVE_ZIP', -14 );
+ define( 'PCLZIP_ERR_MISSING_OPTION_VALUE', -15 );
+ define( 'PCLZIP_ERR_INVALID_OPTION_VALUE', -16 );
+ define( 'PCLZIP_ERR_ALREADY_A_DIRECTORY', -17 );
+ define( 'PCLZIP_ERR_UNSUPPORTED_COMPRESSION', -18 );
+ define( 'PCLZIP_ERR_UNSUPPORTED_ENCRYPTION', -19 );
+ define( 'PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE', -20 );
+ define( 'PCLZIP_ERR_DIRECTORY_RESTRICTION', -21 );
+
+ // ----- Options values
+ define( 'PCLZIP_OPT_PATH', 77001 );
+ define( 'PCLZIP_OPT_ADD_PATH', 77002 );
+ define( 'PCLZIP_OPT_REMOVE_PATH', 77003 );
+ define( 'PCLZIP_OPT_REMOVE_ALL_PATH', 77004 );
+ define( 'PCLZIP_OPT_SET_CHMOD', 77005 );
+ define( 'PCLZIP_OPT_EXTRACT_AS_STRING', 77006 );
+ define( 'PCLZIP_OPT_NO_COMPRESSION', 77007 );
+ define( 'PCLZIP_OPT_BY_NAME', 77008 );
+ define( 'PCLZIP_OPT_BY_INDEX', 77009 );
+ define( 'PCLZIP_OPT_BY_EREG', 77010 );
+ define( 'PCLZIP_OPT_BY_PREG', 77011 );
+ define( 'PCLZIP_OPT_COMMENT', 77012 );
+ define( 'PCLZIP_OPT_ADD_COMMENT', 77013 );
+ define( 'PCLZIP_OPT_PREPEND_COMMENT', 77014 );
+ define( 'PCLZIP_OPT_EXTRACT_IN_OUTPUT', 77015 );
+ define( 'PCLZIP_OPT_REPLACE_NEWER', 77016 );
+ define( 'PCLZIP_OPT_STOP_ON_ERROR', 77017 );
+ // Having big trouble with crypt. Need to multiply 2 long int
+ // which is not correctly supported by PHP ...
+ //define( 'PCLZIP_OPT_CRYPT', 77018 );
+ define( 'PCLZIP_OPT_EXTRACT_DIR_RESTRICTION', 77019 );
+
+ // ----- File description attributes
+ define( 'PCLZIP_ATT_FILE_NAME', 79001 );
+ define( 'PCLZIP_ATT_FILE_NEW_SHORT_NAME', 79002 );
+ define( 'PCLZIP_ATT_FILE_NEW_FULL_NAME', 79003 );
+
+ // ----- Call backs values
+ define( 'PCLZIP_CB_PRE_EXTRACT', 78001 );
+ define( 'PCLZIP_CB_POST_EXTRACT', 78002 );
+ define( 'PCLZIP_CB_PRE_ADD', 78003 );
+ define( 'PCLZIP_CB_POST_ADD', 78004 );
+ /* For futur use
+ define( 'PCLZIP_CB_PRE_LIST', 78005 );
+ define( 'PCLZIP_CB_POST_LIST', 78006 );
+ define( 'PCLZIP_CB_PRE_DELETE', 78007 );
+ define( 'PCLZIP_CB_POST_DELETE', 78008 );
+ */
+
+ // --------------------------------------------------------------------------------
+ // Class : PclZip
+ // Description :
+ // PclZip is the class that represent a Zip archive.
+ // The public methods allow the manipulation of the archive.
+ // Attributes :
+ // Attributes must not be accessed directly.
+ // Methods :
+ // PclZip() : Object creator
+ // create() : Creates the Zip archive
+ // listContent() : List the content of the Zip archive
+ // extract() : Extract the content of the archive
+ // properties() : List the properties of the archive
+ // --------------------------------------------------------------------------------
+ class PclZip
+ {
+ // ----- Filename of the zip file
+ var $zipname = '';
+
+ // ----- File descriptor of the zip file
+ var $zip_fd = 0;
+
+ // ----- Internal error handling
+ var $error_code = 1;
+ var $error_string = '';
+
+ // ----- Current status of the magic_quotes_runtime
+ // This value store the php configuration for magic_quotes
+ // The class can then disable the magic_quotes and reset it after
+ var $magic_quotes_status;
+
+ // --------------------------------------------------------------------------------
+ // Function : PclZip()
+ // Description :
+ // Creates a PclZip object and set the name of the associated Zip archive
+ // filename.
+ // Note that no real action is taken, if the archive does not exist it is not
+ // created. Use create() for that.
+ // --------------------------------------------------------------------------------
+ function PclZip($p_zipname)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::PclZip', "zipname=$p_zipname");
+
+ // ----- Tests the zlib
+ if (!function_exists('gzopen'))
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 1, "zlib extension seems to be missing");
+ die('Abort '.basename(__FILE__).' : Missing zlib extensions');
+ }
+
+ // ----- Set the attributes
+ $this->zipname = $p_zipname;
+ $this->zip_fd = 0;
+ $this->magic_quotes_status = -1;
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 1);
+ return;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function :
+ // create($p_filelist, $p_add_dir="", $p_remove_dir="")
+ // create($p_filelist, $p_option, $p_option_value, ...)
+ // Description :
+ // This method supports two different synopsis. The first one is historical.
+ // This method creates a Zip Archive. The Zip file is created in the
+ // filesystem. The files and directories indicated in $p_filelist
+ // are added in the archive. See the parameters description for the
+ // supported format of $p_filelist.
+ // When a directory is in the list, the directory and its content is added
+ // in the archive.
+ // In this synopsis, the function takes an optional variable list of
+ // options. See bellow the supported options.
+ // Parameters :
+ // $p_filelist : An array containing file or directory names, or
+ // a string containing one filename or one directory name, or
+ // a string containing a list of filenames and/or directory
+ // names separated by spaces.
+ // $p_add_dir : A path to add before the real path of the archived file,
+ // in order to have it memorized in the archive.
+ // $p_remove_dir : A path to remove from the real path of the file to archive,
+ // in order to have a shorter path memorized in the archive.
+ // When $p_add_dir and $p_remove_dir are set, $p_remove_dir
+ // is removed first, before $p_add_dir is added.
+ // Options :
+ // PCLZIP_OPT_ADD_PATH :
+ // PCLZIP_OPT_REMOVE_PATH :
+ // PCLZIP_OPT_REMOVE_ALL_PATH :
+ // PCLZIP_OPT_COMMENT :
+ // PCLZIP_CB_PRE_ADD :
+ // PCLZIP_CB_POST_ADD :
+ // Return Values :
+ // 0 on failure,
+ // The list of the added files, with a status of the add action.
+ // (see PclZip::listContent() for list entry format)
+ // --------------------------------------------------------------------------------
+ function create($p_filelist)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::create', "filelist='$p_filelist', ...");
+ $v_result=1;
+
+ // ----- Reset the error handler
+ $this->privErrorReset();
+
+ // ----- Set default values
+ $v_options = array();
+ $v_options[PCLZIP_OPT_NO_COMPRESSION] = FALSE;
+
+ // ----- Look for variable options arguments
+ $v_size = func_num_args();
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "$v_size arguments passed to the method");
+
+ // ----- Look for arguments
+ if ($v_size > 1) {
+ // ----- Get the arguments
+ $v_arg_list = func_get_args();
+
+ // ----- Remove from the options list the first argument
+ array_shift($v_arg_list);
+ $v_size--;
+
+ // ----- Look for first arg
+ if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Variable list of options detected");
+
+ // ----- Parse the options
+ $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options,
+ array (PCLZIP_OPT_REMOVE_PATH => 'optional',
+ PCLZIP_OPT_REMOVE_ALL_PATH => 'optional',
+ PCLZIP_OPT_ADD_PATH => 'optional',
+ PCLZIP_CB_PRE_ADD => 'optional',
+ PCLZIP_CB_POST_ADD => 'optional',
+ PCLZIP_OPT_NO_COMPRESSION => 'optional',
+ PCLZIP_OPT_COMMENT => 'optional'
+ //, PCLZIP_OPT_CRYPT => 'optional'
+ ));
+ if ($v_result != 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return 0;
+ }
+ }
+
+ // ----- Look for 2 args
+ // Here we need to support the first historic synopsis of the
+ // method.
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Static synopsis");
+
+ // ----- Get the first argument
+ $v_options[PCLZIP_OPT_ADD_PATH] = $v_arg_list[0];
+
+ // ----- Look for the optional second argument
+ if ($v_size == 2) {
+ $v_options[PCLZIP_OPT_REMOVE_PATH] = $v_arg_list[1];
+ }
+ else if ($v_size > 2) {
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER,
+ "Invalid number / type of arguments");
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return 0;
+ }
+ }
+ }
+
+ // ----- Init
+ $v_string_list = array();
+ $v_att_list = array();
+ $v_filedescr_list = array();
+ $p_result_list = array();
+
+ // ----- Look if the $p_filelist is really an array
+ if (is_array($p_filelist)) {
+
+ // ----- Look if the first element is also an array
+ // This will mean that this is a file description entry
+ if (isset($p_filelist[0]) && is_array($p_filelist[0])) {
+ $v_att_list = $p_filelist;
+ }
+
+ // ----- The list is a list of string names
+ else {
+ $v_string_list = $p_filelist;
+ }
+ }
+
+ // ----- Look if the $p_filelist is a string
+ else if (is_string($p_filelist)) {
+ // ----- Create a list from the string
+ $v_string_list = explode(PCLZIP_SEPARATOR, $p_filelist);
+ }
+
+ // ----- Invalid variable type for $p_filelist
+ else {
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type p_filelist");
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return 0;
+ }
+
+ // ----- Reformat the string list
+ if (sizeof($v_string_list) != 0) {
+ foreach ($v_string_list as $v_string) {
+ if ($v_string != '') {
+ $v_att_list[][PCLZIP_ATT_FILE_NAME] = $v_string;
+ }
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Ignore an empty filename");
+ }
+ }
+ }
+
+ // ----- For each file in the list check the attributes
+ $v_supported_attributes
+ = array ( PCLZIP_ATT_FILE_NAME => 'mandatory'
+ ,PCLZIP_ATT_FILE_NEW_SHORT_NAME => 'optional'
+ ,PCLZIP_ATT_FILE_NEW_FULL_NAME => 'optional'
+ );
+ foreach ($v_att_list as $v_entry) {
+ $v_result = $this->privFileDescrParseAtt($v_entry,
+ $v_filedescr_list[],
+ $v_options,
+ $v_supported_attributes);
+ if ($v_result != 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return 0;
+ }
+ }
+
+ // ----- Expand the filelist (expand directories)
+ $v_result = $this->privFileDescrExpand($v_filedescr_list, $v_options);
+ if ($v_result != 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return 0;
+ }
+
+ // ----- Call the create fct
+ $v_result = $this->privCreate($v_filedescr_list, $p_result_list, $v_options);
+ if ($v_result != 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return 0;
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $p_result_list);
+ return $p_result_list;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function :
+ // add($p_filelist, $p_add_dir="", $p_remove_dir="")
+ // add($p_filelist, $p_option, $p_option_value, ...)
+ // Description :
+ // This method supports two synopsis. The first one is historical.
+ // This methods add the list of files in an existing archive.
+ // If a file with the same name already exists, it is added at the end of the
+ // archive, the first one is still present.
+ // If the archive does not exist, it is created.
+ // Parameters :
+ // $p_filelist : An array containing file or directory names, or
+ // a string containing one filename or one directory name, or
+ // a string containing a list of filenames and/or directory
+ // names separated by spaces.
+ // $p_add_dir : A path to add before the real path of the archived file,
+ // in order to have it memorized in the archive.
+ // $p_remove_dir : A path to remove from the real path of the file to archive,
+ // in order to have a shorter path memorized in the archive.
+ // When $p_add_dir and $p_remove_dir are set, $p_remove_dir
+ // is removed first, before $p_add_dir is added.
+ // Options :
+ // PCLZIP_OPT_ADD_PATH :
+ // PCLZIP_OPT_REMOVE_PATH :
+ // PCLZIP_OPT_REMOVE_ALL_PATH :
+ // PCLZIP_OPT_COMMENT :
+ // PCLZIP_OPT_ADD_COMMENT :
+ // PCLZIP_OPT_PREPEND_COMMENT :
+ // PCLZIP_CB_PRE_ADD :
+ // PCLZIP_CB_POST_ADD :
+ // Return Values :
+ // 0 on failure,
+ // The list of the added files, with a status of the add action.
+ // (see PclZip::listContent() for list entry format)
+ // --------------------------------------------------------------------------------
+ function add($p_filelist)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::add', "filelist='$p_filelist', ...");
+ $v_result=1;
+
+ // ----- Reset the error handler
+ $this->privErrorReset();
+
+ // ----- Set default values
+ $v_options = array();
+ $v_options[PCLZIP_OPT_NO_COMPRESSION] = FALSE;
+
+ // ----- Look for variable options arguments
+ $v_size = func_num_args();
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "$v_size arguments passed to the method");
+
+ // ----- Look for arguments
+ if ($v_size > 1) {
+ // ----- Get the arguments
+ $v_arg_list = func_get_args();
+
+ // ----- Remove form the options list the first argument
+ array_shift($v_arg_list);
+ $v_size--;
+
+ // ----- Look for first arg
+ if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Variable list of options detected");
+
+ // ----- Parse the options
+ $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options,
+ array (PCLZIP_OPT_REMOVE_PATH => 'optional',
+ PCLZIP_OPT_REMOVE_ALL_PATH => 'optional',
+ PCLZIP_OPT_ADD_PATH => 'optional',
+ PCLZIP_CB_PRE_ADD => 'optional',
+ PCLZIP_CB_POST_ADD => 'optional',
+ PCLZIP_OPT_NO_COMPRESSION => 'optional',
+ PCLZIP_OPT_COMMENT => 'optional',
+ PCLZIP_OPT_ADD_COMMENT => 'optional',
+ PCLZIP_OPT_PREPEND_COMMENT => 'optional'
+ //, PCLZIP_OPT_CRYPT => 'optional'
+ ));
+ if ($v_result != 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return 0;
+ }
+ }
+
+ // ----- Look for 2 args
+ // Here we need to support the first historic synopsis of the
+ // method.
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Static synopsis");
+
+ // ----- Get the first argument
+ $v_options[PCLZIP_OPT_ADD_PATH] = $v_add_path = $v_arg_list[0];
+
+ // ----- Look for the optional second argument
+ if ($v_size == 2) {
+ $v_options[PCLZIP_OPT_REMOVE_PATH] = $v_arg_list[1];
+ }
+ else if ($v_size > 2) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid number / type of arguments");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return 0;
+ }
+ }
+ }
+
+ // ----- Init
+ $v_string_list = array();
+ $v_att_list = array();
+ $v_filedescr_list = array();
+ $p_result_list = array();
+
+ // ----- Look if the $p_filelist is really an array
+ if (is_array($p_filelist)) {
+
+ // ----- Look if the first element is also an array
+ // This will mean that this is a file description entry
+ if (isset($p_filelist[0]) && is_array($p_filelist[0])) {
+ $v_att_list = $p_filelist;
+ }
+
+ // ----- The list is a list of string names
+ else {
+ $v_string_list = $p_filelist;
+ }
+ }
+
+ // ----- Look if the $p_filelist is a string
+ else if (is_string($p_filelist)) {
+ // ----- Create a list from the string
+ $v_string_list = explode(PCLZIP_SEPARATOR, $p_filelist);
+ }
+
+ // ----- Invalid variable type for $p_filelist
+ else {
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type '".gettype($p_filelist)."' for p_filelist");
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return 0;
+ }
+
+ // ----- Reformat the string list
+ if (sizeof($v_string_list) != 0) {
+ foreach ($v_string_list as $v_string) {
+ $v_att_list[][PCLZIP_ATT_FILE_NAME] = $v_string;
+ }
+ }
+
+ // ----- For each file in the list check the attributes
+ $v_supported_attributes
+ = array ( PCLZIP_ATT_FILE_NAME => 'mandatory'
+ ,PCLZIP_ATT_FILE_NEW_SHORT_NAME => 'optional'
+ ,PCLZIP_ATT_FILE_NEW_FULL_NAME => 'optional'
+ );
+ foreach ($v_att_list as $v_entry) {
+ $v_result = $this->privFileDescrParseAtt($v_entry,
+ $v_filedescr_list[],
+ $v_options,
+ $v_supported_attributes);
+ if ($v_result != 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return 0;
+ }
+ }
+
+ // ----- Expand the filelist (expand directories)
+ $v_result = $this->privFileDescrExpand($v_filedescr_list, $v_options);
+ if ($v_result != 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return 0;
+ }
+
+ // ----- Call the create fct
+ $v_result = $this->privAdd($v_filedescr_list, $p_result_list, $v_options);
+ if ($v_result != 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return 0;
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $p_result_list);
+ return $p_result_list;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : listContent()
+ // Description :
+ // This public method, gives the list of the files and directories, with their
+ // properties.
+ // The properties of each entries in the list are (used also in other functions) :
+ // filename : Name of the file. For a create or add action it is the filename
+ // given by the user. For an extract function it is the filename
+ // of the extracted file.
+ // stored_filename : Name of the file / directory stored in the archive.
+ // size : Size of the stored file.
+ // compressed_size : Size of the file's data compressed in the archive
+ // (without the headers overhead)
+ // mtime : Last known modification date of the file (UNIX timestamp)
+ // comment : Comment associated with the file
+ // folder : true | false
+ // index : index of the file in the archive
+ // status : status of the action (depending of the action) :
+ // Values are :
+ // ok : OK !
+ // filtered : the file / dir is not extracted (filtered by user)
+ // already_a_directory : the file can not be extracted because a
+ // directory with the same name already exists
+ // write_protected : the file can not be extracted because a file
+ // with the same name already exists and is
+ // write protected
+ // newer_exist : the file was not extracted because a newer file exists
+ // path_creation_fail : the file is not extracted because the folder
+ // does not exists and can not be created
+ // write_error : the file was not extracted because there was a
+ // error while writing the file
+ // read_error : the file was not extracted because there was a error
+ // while reading the file
+ // invalid_header : the file was not extracted because of an archive
+ // format error (bad file header)
+ // Note that each time a method can continue operating when there
+ // is an action error on a file, the error is only logged in the file status.
+ // Return Values :
+ // 0 on an unrecoverable failure,
+ // The list of the files in the archive.
+ // --------------------------------------------------------------------------------
+ function listContent()
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::listContent', "");
+ $v_result=1;
+
+ // ----- Reset the error handler
+ $this->privErrorReset();
+
+ // ----- Check archive
+ if (!$this->privCheckFormat()) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return(0);
+ }
+
+ // ----- Call the extracting fct
+ $p_list = array();
+ if (($v_result = $this->privList($p_list)) != 1)
+ {
+ unset($p_list);
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0, PclZip::errorInfo());
+ return(0);
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $p_list);
+ return $p_list;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function :
+ // extract($p_path="./", $p_remove_path="")
+ // extract([$p_option, $p_option_value, ...])
+ // Description :
+ // This method supports two synopsis. The first one is historical.
+ // This method extract all the files / directories from the archive to the
+ // folder indicated in $p_path.
+ // If you want to ignore the 'root' part of path of the memorized files
+ // you can indicate this in the optional $p_remove_path parameter.
+ // By default, if a newer file with the same name already exists, the
+ // file is not extracted.
+ //
+ // If both PCLZIP_OPT_PATH and PCLZIP_OPT_ADD_PATH aoptions
+ // are used, the path indicated in PCLZIP_OPT_ADD_PATH is append
+ // at the end of the path value of PCLZIP_OPT_PATH.
+ // Parameters :
+ // $p_path : Path where the files and directories are to be extracted
+ // $p_remove_path : First part ('root' part) of the memorized path
+ // (if any similar) to remove while extracting.
+ // Options :
+ // PCLZIP_OPT_PATH :
+ // PCLZIP_OPT_ADD_PATH :
+ // PCLZIP_OPT_REMOVE_PATH :
+ // PCLZIP_OPT_REMOVE_ALL_PATH :
+ // PCLZIP_CB_PRE_EXTRACT :
+ // PCLZIP_CB_POST_EXTRACT :
+ // Return Values :
+ // 0 or a negative value on failure,
+ // The list of the extracted files, with a status of the action.
+ // (see PclZip::listContent() for list entry format)
+ // --------------------------------------------------------------------------------
+ function extract()
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::extract", "");
+ $v_result=1;
+
+ // ----- Reset the error handler
+ $this->privErrorReset();
+
+ // ----- Check archive
+ if (!$this->privCheckFormat()) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return(0);
+ }
+
+ // ----- Set default values
+ $v_options = array();
+// $v_path = "./";
+ $v_path = '';
+ $v_remove_path = "";
+ $v_remove_all_path = false;
+
+ // ----- Look for variable options arguments
+ $v_size = func_num_args();
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "$v_size arguments passed to the method");
+
+ // ----- Default values for option
+ $v_options[PCLZIP_OPT_EXTRACT_AS_STRING] = FALSE;
+
+ // ----- Look for arguments
+ if ($v_size > 0) {
+ // ----- Get the arguments
+ $v_arg_list = func_get_args();
+
+ // ----- Look for first arg
+ if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Variable list of options");
+
+ // ----- Parse the options
+ $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options,
+ array (PCLZIP_OPT_PATH => 'optional',
+ PCLZIP_OPT_REMOVE_PATH => 'optional',
+ PCLZIP_OPT_REMOVE_ALL_PATH => 'optional',
+ PCLZIP_OPT_ADD_PATH => 'optional',
+ PCLZIP_CB_PRE_EXTRACT => 'optional',
+ PCLZIP_CB_POST_EXTRACT => 'optional',
+ PCLZIP_OPT_SET_CHMOD => 'optional',
+ PCLZIP_OPT_BY_NAME => 'optional',
+ PCLZIP_OPT_BY_EREG => 'optional',
+ PCLZIP_OPT_BY_PREG => 'optional',
+ PCLZIP_OPT_BY_INDEX => 'optional',
+ PCLZIP_OPT_EXTRACT_AS_STRING => 'optional',
+ PCLZIP_OPT_EXTRACT_IN_OUTPUT => 'optional',
+ PCLZIP_OPT_REPLACE_NEWER => 'optional'
+ ,PCLZIP_OPT_STOP_ON_ERROR => 'optional'
+ ,PCLZIP_OPT_EXTRACT_DIR_RESTRICTION => 'optional'
+ ));
+ if ($v_result != 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return 0;
+ }
+
+ // ----- Set the arguments
+ if (isset($v_options[PCLZIP_OPT_PATH])) {
+ $v_path = $v_options[PCLZIP_OPT_PATH];
+ }
+ if (isset($v_options[PCLZIP_OPT_REMOVE_PATH])) {
+ $v_remove_path = $v_options[PCLZIP_OPT_REMOVE_PATH];
+ }
+ if (isset($v_options[PCLZIP_OPT_REMOVE_ALL_PATH])) {
+ $v_remove_all_path = $v_options[PCLZIP_OPT_REMOVE_ALL_PATH];
+ }
+ if (isset($v_options[PCLZIP_OPT_ADD_PATH])) {
+ // ----- Check for '/' in last path char
+ if ((strlen($v_path) > 0) && (substr($v_path, -1) != '/')) {
+ $v_path .= '/';
+ }
+ $v_path .= $v_options[PCLZIP_OPT_ADD_PATH];
+ }
+ }
+
+ // ----- Look for 2 args
+ // Here we need to support the first historic synopsis of the
+ // method.
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Static synopsis");
+
+ // ----- Get the first argument
+ $v_path = $v_arg_list[0];
+
+ // ----- Look for the optional second argument
+ if ($v_size == 2) {
+ $v_remove_path = $v_arg_list[1];
+ }
+ else if ($v_size > 2) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid number / type of arguments");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0, PclZip::errorInfo());
+ return 0;
+ }
+ }
+ }
+
+ // ----- Trace
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "path='$v_path', remove_path='$v_remove_path', remove_all_path='".($v_remove_path?'true':'false')."'");
+
+ // ----- Call the extracting fct
+ $p_list = array();
+ $v_result = $this->privExtractByRule($p_list, $v_path, $v_remove_path,
+ $v_remove_all_path, $v_options);
+ if ($v_result < 1) {
+ unset($p_list);
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0, PclZip::errorInfo());
+ return(0);
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $p_list);
+ return $p_list;
+ }
+ // --------------------------------------------------------------------------------
+
+
+ // --------------------------------------------------------------------------------
+ // Function :
+ // extractByIndex($p_index, $p_path="./", $p_remove_path="")
+ // extractByIndex($p_index, [$p_option, $p_option_value, ...])
+ // Description :
+ // This method supports two synopsis. The first one is historical.
+ // This method is doing a partial extract of the archive.
+ // The extracted files or folders are identified by their index in the
+ // archive (from 0 to n).
+ // Note that if the index identify a folder, only the folder entry is
+ // extracted, not all the files included in the archive.
+ // Parameters :
+ // $p_index : A single index (integer) or a string of indexes of files to
+ // extract. The form of the string is "0,4-6,8-12" with only numbers
+ // and '-' for range or ',' to separate ranges. No spaces or ';'
+ // are allowed.
+ // $p_path : Path where the files and directories are to be extracted
+ // $p_remove_path : First part ('root' part) of the memorized path
+ // (if any similar) to remove while extracting.
+ // Options :
+ // PCLZIP_OPT_PATH :
+ // PCLZIP_OPT_ADD_PATH :
+ // PCLZIP_OPT_REMOVE_PATH :
+ // PCLZIP_OPT_REMOVE_ALL_PATH :
+ // PCLZIP_OPT_EXTRACT_AS_STRING : The files are extracted as strings and
+ // not as files.
+ // The resulting content is in a new field 'content' in the file
+ // structure.
+ // This option must be used alone (any other options are ignored).
+ // PCLZIP_CB_PRE_EXTRACT :
+ // PCLZIP_CB_POST_EXTRACT :
+ // Return Values :
+ // 0 on failure,
+ // The list of the extracted files, with a status of the action.
+ // (see PclZip::listContent() for list entry format)
+ // --------------------------------------------------------------------------------
+ //function extractByIndex($p_index, options...)
+ function extractByIndex($p_index)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::extractByIndex", "index='$p_index', ...");
+ $v_result=1;
+
+ // ----- Reset the error handler
+ $this->privErrorReset();
+
+ // ----- Check archive
+ if (!$this->privCheckFormat()) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return(0);
+ }
+
+ // ----- Set default values
+ $v_options = array();
+// $v_path = "./";
+ $v_path = '';
+ $v_remove_path = "";
+ $v_remove_all_path = false;
+
+ // ----- Look for variable options arguments
+ $v_size = func_num_args();
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "$v_size arguments passed to the method");
+
+ // ----- Default values for option
+ $v_options[PCLZIP_OPT_EXTRACT_AS_STRING] = FALSE;
+
+ // ----- Look for arguments
+ if ($v_size > 1) {
+ // ----- Get the arguments
+ $v_arg_list = func_get_args();
+
+ // ----- Remove form the options list the first argument
+ array_shift($v_arg_list);
+ $v_size--;
+
+ // ----- Look for first arg
+ if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Variable list of options");
+
+ // ----- Parse the options
+ $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options,
+ array (PCLZIP_OPT_PATH => 'optional',
+ PCLZIP_OPT_REMOVE_PATH => 'optional',
+ PCLZIP_OPT_REMOVE_ALL_PATH => 'optional',
+ PCLZIP_OPT_EXTRACT_AS_STRING => 'optional',
+ PCLZIP_OPT_ADD_PATH => 'optional',
+ PCLZIP_CB_PRE_EXTRACT => 'optional',
+ PCLZIP_CB_POST_EXTRACT => 'optional',
+ PCLZIP_OPT_SET_CHMOD => 'optional',
+ PCLZIP_OPT_REPLACE_NEWER => 'optional'
+ ,PCLZIP_OPT_STOP_ON_ERROR => 'optional'
+ ,PCLZIP_OPT_EXTRACT_DIR_RESTRICTION => 'optional'
+ ));
+ if ($v_result != 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return 0;
+ }
+
+ // ----- Set the arguments
+ if (isset($v_options[PCLZIP_OPT_PATH])) {
+ $v_path = $v_options[PCLZIP_OPT_PATH];
+ }
+ if (isset($v_options[PCLZIP_OPT_REMOVE_PATH])) {
+ $v_remove_path = $v_options[PCLZIP_OPT_REMOVE_PATH];
+ }
+ if (isset($v_options[PCLZIP_OPT_REMOVE_ALL_PATH])) {
+ $v_remove_all_path = $v_options[PCLZIP_OPT_REMOVE_ALL_PATH];
+ }
+ if (isset($v_options[PCLZIP_OPT_ADD_PATH])) {
+ // ----- Check for '/' in last path char
+ if ((strlen($v_path) > 0) && (substr($v_path, -1) != '/')) {
+ $v_path .= '/';
+ }
+ $v_path .= $v_options[PCLZIP_OPT_ADD_PATH];
+ }
+ if (!isset($v_options[PCLZIP_OPT_EXTRACT_AS_STRING])) {
+ $v_options[PCLZIP_OPT_EXTRACT_AS_STRING] = FALSE;
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Option PCLZIP_OPT_EXTRACT_AS_STRING not set.");
+ }
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Option PCLZIP_OPT_EXTRACT_AS_STRING set.");
+ }
+ }
+
+ // ----- Look for 2 args
+ // Here we need to support the first historic synopsis of the
+ // method.
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Static synopsis");
+
+ // ----- Get the first argument
+ $v_path = $v_arg_list[0];
+
+ // ----- Look for the optional second argument
+ if ($v_size == 2) {
+ $v_remove_path = $v_arg_list[1];
+ }
+ else if ($v_size > 2) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid number / type of arguments");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return 0;
+ }
+ }
+ }
+
+ // ----- Trace
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "index='$p_index', path='$v_path', remove_path='$v_remove_path', remove_all_path='".($v_remove_path?'true':'false')."'");
+
+ // ----- Trick
+ // Here I want to reuse extractByRule(), so I need to parse the $p_index
+ // with privParseOptions()
+ $v_arg_trick = array (PCLZIP_OPT_BY_INDEX, $p_index);
+ $v_options_trick = array();
+ $v_result = $this->privParseOptions($v_arg_trick, sizeof($v_arg_trick), $v_options_trick,
+ array (PCLZIP_OPT_BY_INDEX => 'optional' ));
+ if ($v_result != 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return 0;
+ }
+ $v_options[PCLZIP_OPT_BY_INDEX] = $v_options_trick[PCLZIP_OPT_BY_INDEX];
+
+ // ----- Call the extracting fct
+ if (($v_result = $this->privExtractByRule($p_list, $v_path, $v_remove_path, $v_remove_all_path, $v_options)) < 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0, PclZip::errorInfo());
+ return(0);
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $p_list);
+ return $p_list;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function :
+ // delete([$p_option, $p_option_value, ...])
+ // Description :
+ // This method removes files from the archive.
+ // If no parameters are given, then all the archive is emptied.
+ // Parameters :
+ // None or optional arguments.
+ // Options :
+ // PCLZIP_OPT_BY_INDEX :
+ // PCLZIP_OPT_BY_NAME :
+ // PCLZIP_OPT_BY_EREG :
+ // PCLZIP_OPT_BY_PREG :
+ // Return Values :
+ // 0 on failure,
+ // The list of the files which are still present in the archive.
+ // (see PclZip::listContent() for list entry format)
+ // --------------------------------------------------------------------------------
+ function delete()
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::delete", "");
+ $v_result=1;
+
+ // ----- Reset the error handler
+ $this->privErrorReset();
+
+ // ----- Check archive
+ if (!$this->privCheckFormat()) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return(0);
+ }
+
+ // ----- Set default values
+ $v_options = array();
+
+ // ----- Look for variable options arguments
+ $v_size = func_num_args();
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "$v_size arguments passed to the method");
+
+ // ----- Look for arguments
+ if ($v_size > 0) {
+ // ----- Get the arguments
+ $v_arg_list = func_get_args();
+
+ // ----- Parse the options
+ $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options,
+ array (PCLZIP_OPT_BY_NAME => 'optional',
+ PCLZIP_OPT_BY_EREG => 'optional',
+ PCLZIP_OPT_BY_PREG => 'optional',
+ PCLZIP_OPT_BY_INDEX => 'optional' ));
+ if ($v_result != 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return 0;
+ }
+ }
+
+ // ----- Magic quotes trick
+ $this->privDisableMagicQuotes();
+
+ // ----- Call the delete fct
+ $v_list = array();
+ if (($v_result = $this->privDeleteByRule($v_list, $v_options)) != 1) {
+ $this->privSwapBackMagicQuotes();
+ unset($v_list);
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0, PclZip::errorInfo());
+ return(0);
+ }
+
+ // ----- Magic quotes trick
+ $this->privSwapBackMagicQuotes();
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_list);
+ return $v_list;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : deleteByIndex()
+ // Description :
+ // ***** Deprecated *****
+ // delete(PCLZIP_OPT_BY_INDEX, $p_index) should be prefered.
+ // --------------------------------------------------------------------------------
+ function deleteByIndex($p_index)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::deleteByIndex", "index='$p_index'");
+
+ $p_list = $this->delete(PCLZIP_OPT_BY_INDEX, $p_index);
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $p_list);
+ return $p_list;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : properties()
+ // Description :
+ // This method gives the properties of the archive.
+ // The properties are :
+ // nb : Number of files in the archive
+ // comment : Comment associated with the archive file
+ // status : not_exist, ok
+ // Parameters :
+ // None
+ // Return Values :
+ // 0 on failure,
+ // An array with the archive properties.
+ // --------------------------------------------------------------------------------
+ function properties()
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::properties", "");
+
+ // ----- Reset the error handler
+ $this->privErrorReset();
+
+ // ----- Magic quotes trick
+ $this->privDisableMagicQuotes();
+
+ // ----- Check archive
+ if (!$this->privCheckFormat()) {
+ $this->privSwapBackMagicQuotes();
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return(0);
+ }
+
+ // ----- Default properties
+ $v_prop = array();
+ $v_prop['comment'] = '';
+ $v_prop['nb'] = 0;
+ $v_prop['status'] = 'not_exist';
+
+ // ----- Look if file exists
+ if (@is_file($this->zipname))
+ {
+ // ----- Open the zip file
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Open file in binary read mode");
+ if (($this->zip_fd = @fopen($this->zipname, 'rb')) == 0)
+ {
+ $this->privSwapBackMagicQuotes();
+
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive \''.$this->zipname.'\' in binary read mode');
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), 0);
+ return 0;
+ }
+
+ // ----- Read the central directory informations
+ $v_central_dir = array();
+ if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1)
+ {
+ $this->privSwapBackMagicQuotes();
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return 0;
+ }
+
+ // ----- Close the zip file
+ $this->privCloseFd();
+
+ // ----- Set the user attributes
+ $v_prop['comment'] = $v_central_dir['comment'];
+ $v_prop['nb'] = $v_central_dir['entries'];
+ $v_prop['status'] = 'ok';
+ }
+
+ // ----- Magic quotes trick
+ $this->privSwapBackMagicQuotes();
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_prop);
+ return $v_prop;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : duplicate()
+ // Description :
+ // This method creates an archive by copying the content of an other one. If
+ // the archive already exist, it is replaced by the new one without any warning.
+ // Parameters :
+ // $p_archive : The filename of a valid archive, or
+ // a valid PclZip object.
+ // Return Values :
+ // 1 on success.
+ // 0 or a negative value on error (error code).
+ // --------------------------------------------------------------------------------
+ function duplicate($p_archive)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::duplicate", "");
+ $v_result = 1;
+
+ // ----- Reset the error handler
+ $this->privErrorReset();
+
+ // ----- Look if the $p_archive is a PclZip object
+ if ((is_object($p_archive)) && (get_class($p_archive) == 'pclzip'))
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "The parameter is valid PclZip object '".$p_archive->zipname."'");
+
+ // ----- Duplicate the archive
+ $v_result = $this->privDuplicate($p_archive->zipname);
+ }
+
+ // ----- Look if the $p_archive is a string (so a filename)
+ else if (is_string($p_archive))
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "The parameter is a filename '$p_archive'");
+
+ // ----- Check that $p_archive is a valid zip file
+ // TBC : Should also check the archive format
+ if (!is_file($p_archive)) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, "No file with filename '".$p_archive."'");
+ $v_result = PCLZIP_ERR_MISSING_FILE;
+ }
+ else {
+ // ----- Duplicate the archive
+ $v_result = $this->privDuplicate($p_archive);
+ }
+ }
+
+ // ----- Invalid variable
+ else
+ {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type p_archive_to_add");
+ $v_result = PCLZIP_ERR_INVALID_PARAMETER;
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : merge()
+ // Description :
+ // This method merge the $p_archive_to_add archive at the end of the current
+ // one ($this).
+ // If the archive ($this) does not exist, the merge becomes a duplicate.
+ // If the $p_archive_to_add archive does not exist, the merge is a success.
+ // Parameters :
+ // $p_archive_to_add : It can be directly the filename of a valid zip archive,
+ // or a PclZip object archive.
+ // Return Values :
+ // 1 on success,
+ // 0 or negative values on error (see below).
+ // --------------------------------------------------------------------------------
+ function merge($p_archive_to_add)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::merge", "");
+ $v_result = 1;
+
+ // ----- Reset the error handler
+ $this->privErrorReset();
+
+ // ----- Check archive
+ if (!$this->privCheckFormat()) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return(0);
+ }
+
+ // ----- Look if the $p_archive_to_add is a PclZip object
+ if ((is_object($p_archive_to_add)) && (get_class($p_archive_to_add) == 'pclzip'))
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "The parameter is valid PclZip object");
+
+ // ----- Merge the archive
+ $v_result = $this->privMerge($p_archive_to_add);
+ }
+
+ // ----- Look if the $p_archive_to_add is a string (so a filename)
+ else if (is_string($p_archive_to_add))
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "The parameter is a filename");
+
+ // ----- Create a temporary archive
+ $v_object_archive = new PclZip($p_archive_to_add);
+
+ // ----- Merge the archive
+ $v_result = $this->privMerge($v_object_archive);
+ }
+
+ // ----- Invalid variable
+ else
+ {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type p_archive_to_add");
+ $v_result = PCLZIP_ERR_INVALID_PARAMETER;
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+
+
+ // --------------------------------------------------------------------------------
+ // Function : errorCode()
+ // Description :
+ // Parameters :
+ // --------------------------------------------------------------------------------
+ function errorCode()
+ {
+ if (PCLZIP_ERROR_EXTERNAL == 1) {
+ return(PclErrorCode());
+ }
+ else {
+ return($this->error_code);
+ }
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : errorName()
+ // Description :
+ // Parameters :
+ // --------------------------------------------------------------------------------
+ function errorName($p_with_code=false)
+ {
+ $v_name = array ( PCLZIP_ERR_NO_ERROR => 'PCLZIP_ERR_NO_ERROR',
+ PCLZIP_ERR_WRITE_OPEN_FAIL => 'PCLZIP_ERR_WRITE_OPEN_FAIL',
+ PCLZIP_ERR_READ_OPEN_FAIL => 'PCLZIP_ERR_READ_OPEN_FAIL',
+ PCLZIP_ERR_INVALID_PARAMETER => 'PCLZIP_ERR_INVALID_PARAMETER',
+ PCLZIP_ERR_MISSING_FILE => 'PCLZIP_ERR_MISSING_FILE',
+ PCLZIP_ERR_FILENAME_TOO_LONG => 'PCLZIP_ERR_FILENAME_TOO_LONG',
+ PCLZIP_ERR_INVALID_ZIP => 'PCLZIP_ERR_INVALID_ZIP',
+ PCLZIP_ERR_BAD_EXTRACTED_FILE => 'PCLZIP_ERR_BAD_EXTRACTED_FILE',
+ PCLZIP_ERR_DIR_CREATE_FAIL => 'PCLZIP_ERR_DIR_CREATE_FAIL',
+ PCLZIP_ERR_BAD_EXTENSION => 'PCLZIP_ERR_BAD_EXTENSION',
+ PCLZIP_ERR_BAD_FORMAT => 'PCLZIP_ERR_BAD_FORMAT',
+ PCLZIP_ERR_DELETE_FILE_FAIL => 'PCLZIP_ERR_DELETE_FILE_FAIL',
+ PCLZIP_ERR_RENAME_FILE_FAIL => 'PCLZIP_ERR_RENAME_FILE_FAIL',
+ PCLZIP_ERR_BAD_CHECKSUM => 'PCLZIP_ERR_BAD_CHECKSUM',
+ PCLZIP_ERR_INVALID_ARCHIVE_ZIP => 'PCLZIP_ERR_INVALID_ARCHIVE_ZIP',
+ PCLZIP_ERR_MISSING_OPTION_VALUE => 'PCLZIP_ERR_MISSING_OPTION_VALUE',
+ PCLZIP_ERR_INVALID_OPTION_VALUE => 'PCLZIP_ERR_INVALID_OPTION_VALUE',
+ PCLZIP_ERR_UNSUPPORTED_COMPRESSION => 'PCLZIP_ERR_UNSUPPORTED_COMPRESSION',
+ PCLZIP_ERR_UNSUPPORTED_ENCRYPTION => 'PCLZIP_ERR_UNSUPPORTED_ENCRYPTION'
+ ,PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE => 'PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE'
+ ,PCLZIP_ERR_DIRECTORY_RESTRICTION => 'PCLZIP_ERR_DIRECTORY_RESTRICTION'
+ );
+
+ if (isset($v_name[$this->error_code])) {
+ $v_value = $v_name[$this->error_code];
+ }
+ else {
+ $v_value = 'NoName';
+ }
+
+ if ($p_with_code) {
+ return($v_value.' ('.$this->error_code.')');
+ }
+ else {
+ return($v_value);
+ }
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : errorInfo()
+ // Description :
+ // Parameters :
+ // --------------------------------------------------------------------------------
+ function errorInfo($p_full=false)
+ {
+ if (PCLZIP_ERROR_EXTERNAL == 1) {
+ return(PclErrorString());
+ }
+ else {
+ if ($p_full) {
+ return($this->errorName(true)." : ".$this->error_string);
+ }
+ else {
+ return($this->error_string." [code ".$this->error_code."]");
+ }
+ }
+ }
+ // --------------------------------------------------------------------------------
+
+
+// --------------------------------------------------------------------------------
+// ***** UNDER THIS LINE ARE DEFINED PRIVATE INTERNAL FUNCTIONS *****
+// ***** *****
+// ***** THESES FUNCTIONS MUST NOT BE USED DIRECTLY *****
+// --------------------------------------------------------------------------------
+
+
+
+ // --------------------------------------------------------------------------------
+ // Function : privCheckFormat()
+ // Description :
+ // This method check that the archive exists and is a valid zip archive.
+ // Several level of check exists. (futur)
+ // Parameters :
+ // $p_level : Level of check. Default 0.
+ // 0 : Check the first bytes (magic codes) (default value))
+ // 1 : 0 + Check the central directory (futur)
+ // 2 : 1 + Check each file header (futur)
+ // Return Values :
+ // true on success,
+ // false on error, the error code is set.
+ // --------------------------------------------------------------------------------
+ function privCheckFormat($p_level=0)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privCheckFormat", "");
+ $v_result = true;
+
+ // ----- Reset the file system cache
+ clearstatcache();
+
+ // ----- Reset the error handler
+ $this->privErrorReset();
+
+ // ----- Look if the file exits
+ if (!is_file($this->zipname)) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, "Missing archive file '".$this->zipname."'");
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, false, PclZip::errorInfo());
+ return(false);
+ }
+
+ // ----- Check that the file is readeable
+ if (!is_readable($this->zipname)) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, "Unable to read archive '".$this->zipname."'");
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, false, PclZip::errorInfo());
+ return(false);
+ }
+
+ // ----- Check the magic code
+ // TBC
+
+ // ----- Check the central header
+ // TBC
+
+ // ----- Check each file header
+ // TBC
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privParseOptions()
+ // Description :
+ // This internal methods reads the variable list of arguments ($p_options_list,
+ // $p_size) and generate an array with the options and values ($v_result_list).
+ // $v_requested_options contains the options that can be present and those that
+ // must be present.
+ // $v_requested_options is an array, with the option value as key, and 'optional',
+ // or 'mandatory' as value.
+ // Parameters :
+ // See above.
+ // Return Values :
+ // 1 on success.
+ // 0 on failure.
+ // --------------------------------------------------------------------------------
+ function privParseOptions(&$p_options_list, $p_size, &$v_result_list, $v_requested_options=false)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privParseOptions", "");
+ $v_result=1;
+
+ // ----- Read the options
+ $i=0;
+ while ($i<$p_size) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Looking for table index $i, option = '".PclZipUtilOptionText($p_options_list[$i])."(".$p_options_list[$i].")'");
+
+ // ----- Check if the option is supported
+ if (!isset($v_requested_options[$p_options_list[$i]])) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid optional parameter '".$p_options_list[$i]."' for this method");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Look for next option
+ switch ($p_options_list[$i]) {
+ // ----- Look for options that request a path value
+ case PCLZIP_OPT_PATH :
+ case PCLZIP_OPT_REMOVE_PATH :
+ case PCLZIP_OPT_ADD_PATH :
+ // ----- Check the number of parameters
+ if (($i+1) >= $p_size) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Get the value
+ $v_result_list[$p_options_list[$i]] = PclZipUtilTranslateWinPath($p_options_list[$i+1], false);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($p_options_list[$i])." = '".$v_result_list[$p_options_list[$i]]."'");
+ $i++;
+ break;
+
+ case PCLZIP_OPT_EXTRACT_DIR_RESTRICTION :
+ // ----- Check the number of parameters
+ if (($i+1) >= $p_size) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Get the value
+ if ( is_string($p_options_list[$i+1])
+ && ($p_options_list[$i+1] != '')) {
+ $v_result_list[$p_options_list[$i]] = PclZipUtilTranslateWinPath($p_options_list[$i+1], false);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($p_options_list[$i])." = '".$v_result_list[$p_options_list[$i]]."'");
+ $i++;
+ }
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($p_options_list[$i])." set with an empty value is ignored.");
+ }
+ break;
+
+ // ----- Look for options that request an array of string for value
+ case PCLZIP_OPT_BY_NAME :
+ // ----- Check the number of parameters
+ if (($i+1) >= $p_size) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Get the value
+ if (is_string($p_options_list[$i+1])) {
+ $v_result_list[$p_options_list[$i]][0] = $p_options_list[$i+1];
+ }
+ else if (is_array($p_options_list[$i+1])) {
+ $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1];
+ }
+ else {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Wrong parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ ////--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($p_options_list[$i])." = '".$v_result_list[$p_options_list[$i]]."'");
+ $i++;
+ break;
+
+ // ----- Look for options that request an EREG or PREG expression
+ case PCLZIP_OPT_BY_EREG :
+ case PCLZIP_OPT_BY_PREG :
+ //case PCLZIP_OPT_CRYPT :
+ // ----- Check the number of parameters
+ if (($i+1) >= $p_size) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Get the value
+ if (is_string($p_options_list[$i+1])) {
+ $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1];
+ }
+ else {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Wrong parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($p_options_list[$i])." = '".$v_result_list[$p_options_list[$i]]."'");
+ $i++;
+ break;
+
+ // ----- Look for options that takes a string
+ case PCLZIP_OPT_COMMENT :
+ case PCLZIP_OPT_ADD_COMMENT :
+ case PCLZIP_OPT_PREPEND_COMMENT :
+ // ----- Check the number of parameters
+ if (($i+1) >= $p_size) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE,
+ "Missing parameter value for option '"
+ .PclZipUtilOptionText($p_options_list[$i])
+ ."'");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Get the value
+ if (is_string($p_options_list[$i+1])) {
+ $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1];
+ }
+ else {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE,
+ "Wrong parameter value for option '"
+ .PclZipUtilOptionText($p_options_list[$i])
+ ."'");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($p_options_list[$i])." = '".$v_result_list[$p_options_list[$i]]."'");
+ $i++;
+ break;
+
+ // ----- Look for options that request an array of index
+ case PCLZIP_OPT_BY_INDEX :
+ // ----- Check the number of parameters
+ if (($i+1) >= $p_size) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Get the value
+ $v_work_list = array();
+ if (is_string($p_options_list[$i+1])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Index value is a string '".$p_options_list[$i+1]."'");
+
+ // ----- Remove spaces
+ $p_options_list[$i+1] = strtr($p_options_list[$i+1], ' ', '');
+
+ // ----- Parse items
+ $v_work_list = explode(",", $p_options_list[$i+1]);
+ }
+ else if (is_integer($p_options_list[$i+1])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Index value is an integer '".$p_options_list[$i+1]."'");
+ $v_work_list[0] = $p_options_list[$i+1].'-'.$p_options_list[$i+1];
+ }
+ else if (is_array($p_options_list[$i+1])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Index value is an array");
+ $v_work_list = $p_options_list[$i+1];
+ }
+ else {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Value must be integer, string or array for option '".PclZipUtilOptionText($p_options_list[$i])."'");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Reduce the index list
+ // each index item in the list must be a couple with a start and
+ // an end value : [0,3], [5-5], [8-10], ...
+ // ----- Check the format of each item
+ $v_sort_flag=false;
+ $v_sort_value=0;
+ for ($j=0; $j<sizeof($v_work_list); $j++) {
+ // ----- Explode the item
+ $v_item_list = explode("-", $v_work_list[$j]);
+ $v_size_item_list = sizeof($v_item_list);
+
+ // ----- TBC : Here we might check that each item is a
+ // real integer ...
+
+ // ----- Look for single value
+ if ($v_size_item_list == 1) {
+ // ----- Set the option value
+ $v_result_list[$p_options_list[$i]][$j]['start'] = $v_item_list[0];
+ $v_result_list[$p_options_list[$i]][$j]['end'] = $v_item_list[0];
+ }
+ elseif ($v_size_item_list == 2) {
+ // ----- Set the option value
+ $v_result_list[$p_options_list[$i]][$j]['start'] = $v_item_list[0];
+ $v_result_list[$p_options_list[$i]][$j]['end'] = $v_item_list[1];
+ }
+ else {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Too many values in index range for option '".PclZipUtilOptionText($p_options_list[$i])."'");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Extracted index item = [".$v_result_list[$p_options_list[$i]][$j]['start'].",".$v_result_list[$p_options_list[$i]][$j]['end']."]");
+
+ // ----- Look for list sort
+ if ($v_result_list[$p_options_list[$i]][$j]['start'] < $v_sort_value) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "The list should be sorted ...");
+ $v_sort_flag=true;
+
+ // ----- TBC : An automatic sort should be writen ...
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Invalid order of index range for option '".PclZipUtilOptionText($p_options_list[$i])."'");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ $v_sort_value = $v_result_list[$p_options_list[$i]][$j]['start'];
+ }
+
+ // ----- Sort the items
+ if ($v_sort_flag) {
+ // TBC : To Be Completed
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "List sorting is not yet write ...");
+ }
+
+ // ----- Next option
+ $i++;
+ break;
+
+ // ----- Look for options that request no value
+ case PCLZIP_OPT_REMOVE_ALL_PATH :
+ case PCLZIP_OPT_EXTRACT_AS_STRING :
+ case PCLZIP_OPT_NO_COMPRESSION :
+ case PCLZIP_OPT_EXTRACT_IN_OUTPUT :
+ case PCLZIP_OPT_REPLACE_NEWER :
+ case PCLZIP_OPT_STOP_ON_ERROR :
+ $v_result_list[$p_options_list[$i]] = true;
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($p_options_list[$i])." = '".$v_result_list[$p_options_list[$i]]."'");
+ break;
+
+ // ----- Look for options that request an octal value
+ case PCLZIP_OPT_SET_CHMOD :
+ // ----- Check the number of parameters
+ if (($i+1) >= $p_size) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Get the value
+ $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($p_options_list[$i])." = '".$v_result_list[$p_options_list[$i]]."'");
+ $i++;
+ break;
+
+ // ----- Look for options that request a call-back
+ case PCLZIP_CB_PRE_EXTRACT :
+ case PCLZIP_CB_POST_EXTRACT :
+ case PCLZIP_CB_PRE_ADD :
+ case PCLZIP_CB_POST_ADD :
+ /* for futur use
+ case PCLZIP_CB_PRE_DELETE :
+ case PCLZIP_CB_POST_DELETE :
+ case PCLZIP_CB_PRE_LIST :
+ case PCLZIP_CB_POST_LIST :
+ */
+ // ----- Check the number of parameters
+ if (($i+1) >= $p_size) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Get the value
+ $v_function_name = $p_options_list[$i+1];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "call-back ".PclZipUtilOptionText($p_options_list[$i])." = '".$v_function_name."'");
+
+ // ----- Check that the value is a valid existing function
+ if (!function_exists($v_function_name)) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Function '".$v_function_name."()' is not an existing function for option '".PclZipUtilOptionText($p_options_list[$i])."'");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Set the attribute
+ $v_result_list[$p_options_list[$i]] = $v_function_name;
+ $i++;
+ break;
+
+ default :
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER,
+ "Unknown parameter '"
+ .$p_options_list[$i]."'");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Next options
+ $i++;
+ }
+
+ // ----- Look for mandatory options
+ if ($v_requested_options !== false) {
+ for ($key=reset($v_requested_options); $key=key($v_requested_options); $key=next($v_requested_options)) {
+ // ----- Look for mandatory option
+ if ($v_requested_options[$key] == 'mandatory') {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Detect a mandatory option : ".PclZipUtilOptionText($key)."(".$key.")");
+ // ----- Look if present
+ if (!isset($v_result_list[$key])) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Missing mandatory parameter ".PclZipUtilOptionText($key)."(".$key.")");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ }
+ }
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privFileDescrParseAtt()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // 1 on success.
+ // 0 on failure.
+ // --------------------------------------------------------------------------------
+ function privFileDescrParseAtt(&$p_file_list, &$p_filedescr, $v_options, $v_requested_options=false)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privFileDescrParseAtt", "");
+ $v_result=1;
+
+ // ----- For each file in the list check the attributes
+ foreach ($p_file_list as $v_key => $v_value) {
+
+ // ----- Check if the option is supported
+ if (!isset($v_requested_options[$v_key])) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid file attribute '".$v_key."' for this file");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Look for attribute
+ switch ($v_key) {
+ case PCLZIP_ATT_FILE_NAME :
+ if (!is_string($v_value)) {
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". String expected for attribute '".PclZipUtilOptionText($v_key)."'");
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ $p_filedescr['filename'] = PclZipUtilPathReduction($v_value);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($v_key)." = '".$v_value."'");
+
+ if ($p_filedescr['filename'] == '') {
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid empty filename for attribute '".PclZipUtilOptionText($v_key)."'");
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ break;
+
+ case PCLZIP_ATT_FILE_NEW_SHORT_NAME :
+ if (!is_string($v_value)) {
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". String expected for attribute '".PclZipUtilOptionText($v_key)."'");
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ $p_filedescr['new_short_name'] = PclZipUtilPathReduction($v_value);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($v_key)." = '".$v_value."'");
+
+ if ($p_filedescr['new_short_name'] == '') {
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid empty short filename for attribute '".PclZipUtilOptionText($v_key)."'");
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ break;
+
+ case PCLZIP_ATT_FILE_NEW_FULL_NAME :
+ if (!is_string($v_value)) {
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". String expected for attribute '".PclZipUtilOptionText($v_key)."'");
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ $p_filedescr['new_full_name'] = PclZipUtilPathReduction($v_value);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($v_key)." = '".$v_value."'");
+
+ if ($p_filedescr['new_full_name'] == '') {
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid empty full filename for attribute '".PclZipUtilOptionText($v_key)."'");
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ break;
+
+ default :
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER,
+ "Unknown parameter '".$v_key."'");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Look for mandatory options
+ if ($v_requested_options !== false) {
+ for ($key=reset($v_requested_options); $key=key($v_requested_options); $key=next($v_requested_options)) {
+ // ----- Look for mandatory option
+ if ($v_requested_options[$key] == 'mandatory') {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Detect a mandatory option : ".PclZipUtilOptionText($key)."(".$key.")");
+ // ----- Look if present
+ if (!isset($p_file_list[$key])) {
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Missing mandatory parameter ".PclZipUtilOptionText($key)."(".$key.")");
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ }
+ }
+ }
+
+ // end foreach
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privFileDescrExpand()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // 1 on success.
+ // 0 on failure.
+ // --------------------------------------------------------------------------------
+ function privFileDescrExpand(&$p_filedescr_list, &$p_options)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privFileDescrExpand", "");
+ $v_result=1;
+
+ // ----- Create a result list
+ $v_result_list = array();
+
+ // ----- Look each entry
+ for ($i=0; $i<sizeof($p_filedescr_list); $i++) {
+ // ----- Get filedescr
+ $v_descr = $p_filedescr_list[$i];
+
+ // ----- Reduce the filename
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Filedescr before reduction :'".$v_descr['filename']."'");
+ $v_descr['filename'] = PclZipUtilTranslateWinPath($v_descr['filename']);
+ $v_descr['filename'] = PclZipUtilPathReduction($v_descr['filename']);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Filedescr after reduction :'".$v_descr['filename']."'");
+
+ // ----- Get type of descr
+ if (!file_exists($v_descr['filename'])) {
+ // ----- Error log
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "File '".$v_descr['filename']."' does not exists");
+ PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, "File '".$v_descr['filename']."' does not exists");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ if (@is_file($v_descr['filename'])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "This is a file");
+ $v_descr['type'] = 'file';
+ }
+ else if (@is_dir($v_descr['filename'])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "This is a folder");
+ $v_descr['type'] = 'folder';
+ }
+ else if (@is_link($v_descr['filename'])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Unsupported file type : link");
+ // skip
+ continue;
+ }
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Unsupported file type : unknown type");
+ // skip
+ continue;
+ }
+
+ // ----- Calculate the stored filename
+ $this->privCalculateStoredFilename($v_descr, $p_options);
+
+ // ----- Add the descriptor in result list
+ $v_result_list[sizeof($v_result_list)] = $v_descr;
+
+ // ----- Look for folder
+ if ($v_descr['type'] == 'folder') {
+ // ----- List of items in folder
+ $v_dirlist_descr = array();
+ $v_dirlist_nb = 0;
+ if ($v_folder_handler = @opendir($v_descr['filename'])) {
+ while (($v_item_handler = @readdir($v_folder_handler)) !== false) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Looking for '".$v_item_handler."' in the directory");
+
+ // ----- Skip '.' and '..'
+ if (($v_item_handler == '.') || ($v_item_handler == '..')) {
+ continue;
+ }
+
+ // ----- Compose the full filename
+ $v_dirlist_descr[$v_dirlist_nb]['filename'] = $v_descr['filename'].'/'.$v_item_handler;
+
+ // ----- Look for different stored filename
+ // Because the name of the folder was changed, the name of the
+ // files/sub-folders also change
+ if ($v_descr['stored_filename'] != $v_descr['filename']) {
+ $v_dirlist_descr[$v_dirlist_nb]['new_full_name'] = $v_descr['stored_filename'].'/'.$v_item_handler;
+ }
+
+ $v_dirlist_nb++;
+ }
+ }
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Unable to open dir '".$v_descr['filename']."' in read mode. Skipped.");
+ // TBC : unable to open folder in read mode
+ }
+
+ // ----- Expand each element of the list
+ if ($v_dirlist_nb != 0) {
+ // ----- Expand
+ if (($v_result = $this->privFileDescrExpand($v_dirlist_descr, $p_options)) != 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Concat the resulting list
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Merging result list (size '".sizeof($v_result_list)."') with dirlist (size '".sizeof($v_dirlist_descr)."')");
+ $v_result_list = array_merge($v_result_list, $v_dirlist_descr);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "merged result list is size '".sizeof($v_result_list)."'");
+ }
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Nothing in this folder to expand.");
+ }
+
+ // ----- Free local array
+ unset($v_dirlist_descr);
+ }
+ }
+
+ // ----- Get the result list
+ $p_filedescr_list = $v_result_list;
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privCreate()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privCreate($p_filedescr_list, &$p_result_list, &$p_options)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privCreate", "list");
+ $v_result=1;
+ $v_list_detail = array();
+
+ // ----- Magic quotes trick
+ $this->privDisableMagicQuotes();
+
+ // ----- Open the file in write mode
+ if (($v_result = $this->privOpenFd('wb')) != 1)
+ {
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Add the list of files
+ $v_result = $this->privAddList($p_filedescr_list, $p_result_list, $p_options);
+
+ // ----- Close
+ $this->privCloseFd();
+
+ // ----- Magic quotes trick
+ $this->privSwapBackMagicQuotes();
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privAdd()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privAdd($p_filedescr_list, &$p_result_list, &$p_options)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privAdd", "list");
+ $v_result=1;
+ $v_list_detail = array();
+
+ // ----- Look if the archive exists or is empty
+ if ((!is_file($this->zipname)) || (filesize($this->zipname) == 0))
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Archive does not exist, or is empty, create it.");
+
+ // ----- Do a create
+ $v_result = $this->privCreate($p_filedescr_list, $p_result_list, $p_options);
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // ----- Magic quotes trick
+ $this->privDisableMagicQuotes();
+
+ // ----- Open the zip file
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Open file in binary read mode");
+ if (($v_result=$this->privOpenFd('rb')) != 1)
+ {
+ // ----- Magic quotes trick
+ $this->privSwapBackMagicQuotes();
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Read the central directory informations
+ $v_central_dir = array();
+ if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1)
+ {
+ $this->privCloseFd();
+ $this->privSwapBackMagicQuotes();
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Go to beginning of File
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position in file : ".ftell($this->zip_fd)."'");
+ @rewind($this->zip_fd);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position in file : ".ftell($this->zip_fd)."'");
+
+ // ----- Creates a temporay file
+ $v_zip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.tmp';
+
+ // ----- Open the temporary file in write mode
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Open file in binary read mode");
+ if (($v_zip_temp_fd = @fopen($v_zip_temp_name, 'wb')) == 0)
+ {
+ $this->privCloseFd();
+ $this->privSwapBackMagicQuotes();
+
+ PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_zip_temp_name.'\' in binary write mode');
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Copy the files from the archive to the temporary file
+ // TBC : Here I should better append the file and go back to erase the central dir
+ $v_size = $v_central_dir['offset'];
+ while ($v_size != 0)
+ {
+ $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Read $v_read_size bytes");
+ $v_buffer = fread($this->zip_fd, $v_read_size);
+ @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size);
+ $v_size -= $v_read_size;
+ }
+
+ // ----- Swap the file descriptor
+ // Here is a trick : I swap the temporary fd with the zip fd, in order to use
+ // the following methods on the temporary fil and not the real archive
+ $v_swap = $this->zip_fd;
+ $this->zip_fd = $v_zip_temp_fd;
+ $v_zip_temp_fd = $v_swap;
+
+ // ----- Add the files
+ $v_header_list = array();
+ if (($v_result = $this->privAddFileList($p_filedescr_list, $v_header_list, $p_options)) != 1)
+ {
+ fclose($v_zip_temp_fd);
+ $this->privCloseFd();
+ @unlink($v_zip_temp_name);
+ $this->privSwapBackMagicQuotes();
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Store the offset of the central dir
+ $v_offset = @ftell($this->zip_fd);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "New offset of central dir : $v_offset");
+
+ // ----- Copy the block of file headers from the old archive
+ $v_size = $v_central_dir['size'];
+ while ($v_size != 0)
+ {
+ $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Read $v_read_size bytes");
+ $v_buffer = @fread($v_zip_temp_fd, $v_read_size);
+ @fwrite($this->zip_fd, $v_buffer, $v_read_size);
+ $v_size -= $v_read_size;
+ }
+
+ // ----- Create the Central Dir files header
+ for ($i=0, $v_count=0; $i<sizeof($v_header_list); $i++)
+ {
+ // ----- Create the file header
+ if ($v_header_list[$i]['status'] == 'ok') {
+ if (($v_result = $this->privWriteCentralFileHeader($v_header_list[$i])) != 1) {
+ fclose($v_zip_temp_fd);
+ $this->privCloseFd();
+ @unlink($v_zip_temp_name);
+ $this->privSwapBackMagicQuotes();
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ $v_count++;
+ }
+
+ // ----- Transform the header to a 'usable' info
+ $this->privConvertHeader2FileInfo($v_header_list[$i], $p_result_list[$i]);
+ }
+
+ // ----- Zip file comment
+ $v_comment = $v_central_dir['comment'];
+ if (isset($p_options[PCLZIP_OPT_COMMENT])) {
+ $v_comment = $p_options[PCLZIP_OPT_COMMENT];
+ }
+ if (isset($p_options[PCLZIP_OPT_ADD_COMMENT])) {
+ $v_comment = $v_comment.$p_options[PCLZIP_OPT_ADD_COMMENT];
+ }
+ if (isset($p_options[PCLZIP_OPT_PREPEND_COMMENT])) {
+ $v_comment = $p_options[PCLZIP_OPT_PREPEND_COMMENT].$v_comment;
+ }
+
+ // ----- Calculate the size of the central header
+ $v_size = @ftell($this->zip_fd)-$v_offset;
+
+ // ----- Create the central dir footer
+ if (($v_result = $this->privWriteCentralHeader($v_count+$v_central_dir['entries'], $v_size, $v_offset, $v_comment)) != 1)
+ {
+ // ----- Reset the file list
+ unset($v_header_list);
+ $this->privSwapBackMagicQuotes();
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Swap back the file descriptor
+ $v_swap = $this->zip_fd;
+ $this->zip_fd = $v_zip_temp_fd;
+ $v_zip_temp_fd = $v_swap;
+
+ // ----- Close
+ $this->privCloseFd();
+
+ // ----- Close the temporary file
+ @fclose($v_zip_temp_fd);
+
+ // ----- Magic quotes trick
+ $this->privSwapBackMagicQuotes();
+
+ // ----- Delete the zip file
+ // TBC : I should test the result ...
+ @unlink($this->zipname);
+
+ // ----- Rename the temporary file
+ // TBC : I should test the result ...
+ //@rename($v_zip_temp_name, $this->zipname);
+ PclZipUtilRename($v_zip_temp_name, $this->zipname);
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privOpenFd()
+ // Description :
+ // Parameters :
+ // --------------------------------------------------------------------------------
+ function privOpenFd($p_mode)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privOpenFd", 'mode='.$p_mode);
+ $v_result=1;
+
+ // ----- Look if already open
+ if ($this->zip_fd != 0)
+ {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Zip file \''.$this->zipname.'\' already open');
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Open the zip file
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Open file in '.$p_mode.' mode');
+ if (($this->zip_fd = @fopen($this->zipname, $p_mode)) == 0)
+ {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive \''.$this->zipname.'\' in '.$p_mode.' mode');
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privCloseFd()
+ // Description :
+ // Parameters :
+ // --------------------------------------------------------------------------------
+ function privCloseFd()
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privCloseFd", "");
+ $v_result=1;
+
+ if ($this->zip_fd != 0)
+ @fclose($this->zip_fd);
+ $this->zip_fd = 0;
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privAddList()
+ // Description :
+ // $p_add_dir and $p_remove_dir will give the ability to memorize a path which is
+ // different from the real path of the file. This is usefull if you want to have PclTar
+ // running in any directory, and memorize relative path from an other directory.
+ // Parameters :
+ // $p_list : An array containing the file or directory names to add in the tar
+ // $p_result_list : list of added files with their properties (specially the status field)
+ // $p_add_dir : Path to add in the filename path archived
+ // $p_remove_dir : Path to remove in the filename path archived
+ // Return Values :
+ // --------------------------------------------------------------------------------
+// function privAddList($p_list, &$p_result_list, $p_add_dir, $p_remove_dir, $p_remove_all_dir, &$p_options)
+ function privAddList($p_filedescr_list, &$p_result_list, &$p_options)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privAddList", "list");
+ $v_result=1;
+
+ // ----- Add the files
+ $v_header_list = array();
+ if (($v_result = $this->privAddFileList($p_filedescr_list, $v_header_list, $p_options)) != 1)
+ {
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Store the offset of the central dir
+ $v_offset = @ftell($this->zip_fd);
+
+ // ----- Create the Central Dir files header
+ for ($i=0,$v_count=0; $i<sizeof($v_header_list); $i++)
+ {
+ // ----- Create the file header
+ if ($v_header_list[$i]['status'] == 'ok') {
+ if (($v_result = $this->privWriteCentralFileHeader($v_header_list[$i])) != 1) {
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ $v_count++;
+ }
+
+ // ----- Transform the header to a 'usable' info
+ $this->privConvertHeader2FileInfo($v_header_list[$i], $p_result_list[$i]);
+ }
+
+ // ----- Zip file comment
+ $v_comment = '';
+ if (isset($p_options[PCLZIP_OPT_COMMENT])) {
+ $v_comment = $p_options[PCLZIP_OPT_COMMENT];
+ }
+
+ // ----- Calculate the size of the central header
+ $v_size = @ftell($this->zip_fd)-$v_offset;
+
+ // ----- Create the central dir footer
+ if (($v_result = $this->privWriteCentralHeader($v_count, $v_size, $v_offset, $v_comment)) != 1)
+ {
+ // ----- Reset the file list
+ unset($v_header_list);
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privAddFileList()
+ // Description :
+ // Parameters :
+ // $p_filedescr_list : An array containing the file description
+ // or directory names to add in the zip
+ // $p_result_list : list of added files with their properties (specially the status field)
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privAddFileList($p_filedescr_list, &$p_result_list, &$p_options)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privAddFileList", "filedescr_list");
+ $v_result=1;
+ $v_header = array();
+
+ // ----- Recuperate the current number of elt in list
+ $v_nb = sizeof($p_result_list);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Before add, list have ".$v_nb." elements");
+
+ // ----- Loop on the files
+ for ($j=0; ($j<sizeof($p_filedescr_list)) && ($v_result==1); $j++) {
+ // ----- Format the filename
+ $p_filedescr_list[$j]['filename']
+ = PclZipUtilTranslateWinPath($p_filedescr_list[$j]['filename'], false);
+
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Looking for file '".$p_filedescr_list[$j]['filename']."'");
+
+ // ----- Skip empty file names
+ // TBC : Can this be possible ? not checked in DescrParseAtt ?
+ if ($p_filedescr_list[$j]['filename'] == "") {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Skip empty filename");
+ continue;
+ }
+
+ // ----- Check the filename
+ if (!file_exists($p_filedescr_list[$j]['filename'])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "File '".$p_filedescr_list[$j]['filename']."' does not exists");
+ PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, "File '".$p_filedescr_list[$j]['filename']."' does not exists");
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Look if it is a file or a dir with no all path remove option
+ if ( (is_file($p_filedescr_list[$j]['filename']))
+ || ( is_dir($p_filedescr_list[$j]['filename'])
+ && ( !isset($p_options[PCLZIP_OPT_REMOVE_ALL_PATH])
+ || !$p_options[PCLZIP_OPT_REMOVE_ALL_PATH]))) {
+
+ // ----- Add the file
+ $v_result = $this->privAddFile($p_filedescr_list[$j], $v_header,
+ $p_options);
+ if ($v_result != 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Store the file infos
+ $p_result_list[$v_nb++] = $v_header;
+ }
+ }
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "After add, list have ".$v_nb." elements");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privAddFile()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privAddFile($p_filedescr, &$p_header, &$p_options)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privAddFile", "filename='".$p_filedescr['filename']."'");
+ $v_result=1;
+
+ // ----- Working variable
+ $p_filename = $p_filedescr['filename'];
+
+ // TBC : Already done in the fileAtt check ... ?
+ if ($p_filename == "") {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid file list parameter (invalid or empty list)");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Look for a stored different filename
+ if (isset($p_filedescr['stored_filename'])) {
+ $v_stored_filename = $p_filedescr['stored_filename'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, 'Stored filename is NOT the same "'.$v_stored_filename.'"');
+ }
+ else {
+ $v_stored_filename = $p_filedescr['stored_filename'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, 'Stored filename is the same');
+ }
+
+ // ----- Set the file properties
+ clearstatcache();
+ $p_header['version'] = 20;
+ $p_header['version_extracted'] = 10;
+ $p_header['flag'] = 0;
+ $p_header['compression'] = 0;
+ $p_header['mtime'] = filemtime($p_filename);
+ $p_header['crc'] = 0;
+ $p_header['compressed_size'] = 0;
+ $p_header['size'] = filesize($p_filename);
+ $p_header['filename_len'] = strlen($p_filename);
+ $p_header['extra_len'] = 0;
+ $p_header['comment_len'] = 0;
+ $p_header['disk'] = 0;
+ $p_header['internal'] = 0;
+// $p_header['external'] = (is_file($p_filename)?0xFE49FFE0:0x41FF0010);
+ $p_header['external'] = (is_file($p_filename)?0x00000000:0x00000010);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Header external extension '".sprintf("0x%X",$p_header['external'])."'");
+ $p_header['offset'] = 0;
+ $p_header['filename'] = $p_filename;
+ $p_header['stored_filename'] = $v_stored_filename;
+ $p_header['extra'] = '';
+ $p_header['comment'] = '';
+ $p_header['status'] = 'ok';
+ $p_header['index'] = -1;
+
+ // ----- Look for pre-add callback
+ if (isset($p_options[PCLZIP_CB_PRE_ADD])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "A pre-callback '".$p_options[PCLZIP_CB_PRE_ADD]."()') is defined for the extraction");
+
+ // ----- Generate a local information
+ $v_local_header = array();
+ $this->privConvertHeader2FileInfo($p_header, $v_local_header);
+
+ // ----- Call the callback
+ // Here I do not use call_user_func() because I need to send a reference to the
+ // header.
+ eval('$v_result = '.$p_options[PCLZIP_CB_PRE_ADD].'(PCLZIP_CB_PRE_ADD, $v_local_header);');
+ if ($v_result == 0) {
+ // ----- Change the file status
+ $p_header['status'] = "skipped";
+ $v_result = 1;
+ }
+
+ // ----- Update the informations
+ // Only some fields can be modified
+ if ($p_header['stored_filename'] != $v_local_header['stored_filename']) {
+ $p_header['stored_filename'] = PclZipUtilPathReduction($v_local_header['stored_filename']);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "New stored filename is '".$p_header['stored_filename']."'");
+ }
+ }
+
+ // ----- Look for empty stored filename
+ if ($p_header['stored_filename'] == "") {
+ $p_header['status'] = "filtered";
+ }
+
+ // ----- Check the path length
+ if (strlen($p_header['stored_filename']) > 0xFF) {
+ $p_header['status'] = 'filename_too_long';
+ }
+
+ // ----- Look if no error, or file not skipped
+ if ($p_header['status'] == 'ok') {
+
+ // ----- Look for a file
+ if (is_file($p_filename))
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "'".$p_filename."' is a file");
+ // ----- Open the source file
+ if (($v_file = @fopen($p_filename, "rb")) == 0) {
+ PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, "Unable to open file '$p_filename' in binary read mode");
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ if ($p_options[PCLZIP_OPT_NO_COMPRESSION]) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "File will not be compressed");
+ // ----- Read the file content
+ $v_content_compressed = @fread($v_file, $p_header['size']);
+
+ // ----- Calculate the CRC
+ $p_header['crc'] = @crc32($v_content_compressed);
+
+ // ----- Set header parameters
+ $p_header['compressed_size'] = $p_header['size'];
+ $p_header['compression'] = 0;
+ }
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "File will be compressed");
+ // ----- Read the file content
+ $v_content = @fread($v_file, $p_header['size']);
+
+ // ----- Calculate the CRC
+ $p_header['crc'] = @crc32($v_content);
+
+ // ----- Compress the file
+ $v_content_compressed = @gzdeflate($v_content);
+
+ // ----- Set header parameters
+ $p_header['compressed_size'] = strlen($v_content_compressed);
+ $p_header['compression'] = 8;
+ }
+
+ // ----- Look for encryption
+ /*
+ if ((isset($p_options[PCLZIP_OPT_CRYPT]))
+ && ($p_options[PCLZIP_OPT_CRYPT] != "")) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "File need to be crypted ....");
+
+ // Should be a random header
+ $v_header = 'xxxxxxxxxxxx';
+ $v_content_compressed = PclZipUtilZipEncrypt($v_content_compressed,
+ $p_header['compressed_size'],
+ $v_header,
+ $p_header['crc'],
+ "test");
+
+ $p_header['compressed_size'] += 12;
+ $p_header['flag'] = 1;
+
+ // ----- Add the header to the data
+ $v_content_compressed = $v_header.$v_content_compressed;
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Size after header : ".strlen($v_content_compressed)."");
+ }
+ */
+
+ // ----- Call the header generation
+ if (($v_result = $this->privWriteFileHeader($p_header)) != 1) {
+ @fclose($v_file);
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Write the compressed (or not) content
+ @fwrite($this->zip_fd,
+ $v_content_compressed, $p_header['compressed_size']);
+
+ // ----- Close the file
+ @fclose($v_file);
+ }
+
+ // ----- Look for a directory
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "'".$p_filename."' is a folder");
+ // ----- Look for directory last '/'
+ if (@substr($p_header['stored_filename'], -1) != '/') {
+ $p_header['stored_filename'] .= '/';
+ }
+
+ // ----- Set the file properties
+ $p_header['size'] = 0;
+ //$p_header['external'] = 0x41FF0010; // Value for a folder : to be checked
+ $p_header['external'] = 0x00000010; // Value for a folder : to be checked
+
+ // ----- Call the header generation
+ if (($v_result = $this->privWriteFileHeader($p_header)) != 1)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ }
+ }
+
+ // ----- Look for post-add callback
+ if (isset($p_options[PCLZIP_CB_POST_ADD])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "A post-callback '".$p_options[PCLZIP_CB_POST_ADD]."()') is defined for the extraction");
+
+ // ----- Generate a local information
+ $v_local_header = array();
+ $this->privConvertHeader2FileInfo($p_header, $v_local_header);
+
+ // ----- Call the callback
+ // Here I do not use call_user_func() because I need to send a reference to the
+ // header.
+ eval('$v_result = '.$p_options[PCLZIP_CB_POST_ADD].'(PCLZIP_CB_POST_ADD, $v_local_header);');
+ if ($v_result == 0) {
+ // ----- Ignored
+ $v_result = 1;
+ }
+
+ // ----- Update the informations
+ // Nothing can be modified
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privCalculateStoredFilename()
+ // Description :
+ // Based on file descriptor properties and global options, this method
+ // calculate the filename that will be stored in the archive.
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privCalculateStoredFilename(&$p_filedescr, &$p_options)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privCalculateStoredFilename", "filename='".$p_filedescr['filename']."'");
+ $v_result=1;
+
+ // ----- Working variables
+ $p_filename = $p_filedescr['filename'];
+ if (isset($p_options[PCLZIP_OPT_ADD_PATH])) {
+ $p_add_dir = $p_options[PCLZIP_OPT_ADD_PATH];
+ }
+ else {
+ $p_add_dir = '';
+ }
+ if (isset($p_options[PCLZIP_OPT_REMOVE_PATH])) {
+ $p_remove_dir = $p_options[PCLZIP_OPT_REMOVE_PATH];
+ }
+ else {
+ $p_remove_dir = '';
+ }
+ if (isset($p_options[PCLZIP_OPT_REMOVE_ALL_PATH])) {
+ $p_remove_all_dir = $p_options[PCLZIP_OPT_REMOVE_ALL_PATH];
+ }
+ else {
+ $p_remove_all_dir = 0;
+ }
+
+ // ----- Look for full name change
+ if (isset($p_filedescr['new_full_name'])) {
+ $v_stored_filename = $p_filedescr['new_full_name'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Changing full name of '".$p_filename."' for '".$v_stored_filename."'");
+ }
+
+ // ----- Look for path and/or short name change
+ else {
+
+ // ----- Look for short name change
+ if (isset($p_filedescr['new_short_name'])) {
+ $v_path_info = pathinfo($p_filename);
+ $v_dir = '';
+ if ($v_path_info['dirname'] != '') {
+ $v_dir = $v_path_info['dirname'].'/';
+ }
+ $v_stored_filename = $v_dir.$p_filedescr['new_short_name'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Changing short name of '".$p_filename."' for '".$v_stored_filename."'");
+ }
+ else {
+ // ----- Calculate the stored filename
+ $v_stored_filename = $p_filename;
+ }
+
+ // ----- Look for all path to remove
+ if ($p_remove_all_dir) {
+ $v_stored_filename = basename($p_filename);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Remove all path selected change '".$p_filename."' for '".$v_stored_filename."'");
+ }
+ // ----- Look for partial path remove
+ else if ($p_remove_dir != "") {
+ if (substr($p_remove_dir, -1) != '/')
+ $p_remove_dir .= "/";
+
+ if ( (substr($p_filename, 0, 2) == "./")
+ || (substr($p_remove_dir, 0, 2) == "./")) {
+
+ if ( (substr($p_filename, 0, 2) == "./")
+ && (substr($p_remove_dir, 0, 2) != "./")) {
+ $p_remove_dir = "./".$p_remove_dir;
+ }
+ if ( (substr($p_filename, 0, 2) != "./")
+ && (substr($p_remove_dir, 0, 2) == "./")) {
+ $p_remove_dir = substr($p_remove_dir, 2);
+ }
+ }
+
+ $v_compare = PclZipUtilPathInclusion($p_remove_dir,
+ $v_stored_filename);
+ if ($v_compare > 0) {
+ if ($v_compare == 2) {
+ $v_stored_filename = "";
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Path to remove is the current folder");
+ }
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Remove path '$p_remove_dir' in file '$v_stored_filename'");
+ $v_stored_filename = substr($v_stored_filename,
+ strlen($p_remove_dir));
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Result is '$v_stored_filename'");
+ }
+ }
+ }
+ // ----- Look for path to add
+ if ($p_add_dir != "") {
+ if (substr($p_add_dir, -1) == "/")
+ $v_stored_filename = $p_add_dir.$v_stored_filename;
+ else
+ $v_stored_filename = $p_add_dir."/".$v_stored_filename;
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Add path '$p_add_dir' in file '$p_filename' = '$v_stored_filename'");
+ }
+ }
+
+ // ----- Filename (reduce the path of stored name)
+ $v_stored_filename = PclZipUtilPathReduction($v_stored_filename);
+ $p_filedescr['stored_filename'] = $v_stored_filename;
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Stored filename will be '".$p_filedescr['stored_filename']."', strlen ".strlen($p_filedescr['stored_filename']));
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privWriteFileHeader()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privWriteFileHeader(&$p_header)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privWriteFileHeader", 'file="'.$p_header['filename'].'", stored as "'.$p_header['stored_filename'].'"');
+ $v_result=1;
+
+ // ----- Store the offset position of the file
+ $p_header['offset'] = ftell($this->zip_fd);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, 'File offset of the header :'.$p_header['offset']);
+
+ // ----- Transform UNIX mtime to DOS format mdate/mtime
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Date : \''.date("d/m/y H:i:s", $p_header['mtime']).'\'');
+ $v_date = getdate($p_header['mtime']);
+ $v_mtime = ($v_date['hours']<<11) + ($v_date['minutes']<<5) + $v_date['seconds']/2;
+ $v_mdate = (($v_date['year']-1980)<<9) + ($v_date['mon']<<5) + $v_date['mday'];
+
+ // ----- Packed data
+ $v_binary_data = pack("VvvvvvVVVvv", 0x04034b50,
+ $p_header['version_extracted'], $p_header['flag'],
+ $p_header['compression'], $v_mtime, $v_mdate,
+ $p_header['crc'], $p_header['compressed_size'],
+ $p_header['size'],
+ strlen($p_header['stored_filename']),
+ $p_header['extra_len']);
+
+ // ----- Write the first 148 bytes of the header in the archive
+ fputs($this->zip_fd, $v_binary_data, 30);
+
+ // ----- Write the variable fields
+ if (strlen($p_header['stored_filename']) != 0)
+ {
+ fputs($this->zip_fd, $p_header['stored_filename'], strlen($p_header['stored_filename']));
+ }
+ if ($p_header['extra_len'] != 0)
+ {
+ fputs($this->zip_fd, $p_header['extra'], $p_header['extra_len']);
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privWriteCentralFileHeader()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privWriteCentralFileHeader(&$p_header)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privWriteCentralFileHeader", 'file="'.$p_header['filename'].'", stored as "'.$p_header['stored_filename'].'"');
+ $v_result=1;
+
+ // TBC
+ //for(reset($p_header); $key = key($p_header); next($p_header)) {
+ // //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "header[$key] = ".$p_header[$key]);
+ //}
+
+ // ----- Transform UNIX mtime to DOS format mdate/mtime
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Date : \''.date("d/m/y H:i:s", $p_header['mtime']).'\'');
+ $v_date = getdate($p_header['mtime']);
+ $v_mtime = ($v_date['hours']<<11) + ($v_date['minutes']<<5) + $v_date['seconds']/2;
+ $v_mdate = (($v_date['year']-1980)<<9) + ($v_date['mon']<<5) + $v_date['mday'];
+
+ // ----- Packed data
+ $v_binary_data = pack("VvvvvvvVVVvvvvvVV", 0x02014b50,
+ $p_header['version'], $p_header['version_extracted'],
+ $p_header['flag'], $p_header['compression'],
+ $v_mtime, $v_mdate, $p_header['crc'],
+ $p_header['compressed_size'], $p_header['size'],
+ strlen($p_header['stored_filename']),
+ $p_header['extra_len'], $p_header['comment_len'],
+ $p_header['disk'], $p_header['internal'],
+ $p_header['external'], $p_header['offset']);
+
+ // ----- Write the 42 bytes of the header in the zip file
+ fputs($this->zip_fd, $v_binary_data, 46);
+
+ // ----- Write the variable fields
+ if (strlen($p_header['stored_filename']) != 0)
+ {
+ fputs($this->zip_fd, $p_header['stored_filename'], strlen($p_header['stored_filename']));
+ }
+ if ($p_header['extra_len'] != 0)
+ {
+ fputs($this->zip_fd, $p_header['extra'], $p_header['extra_len']);
+ }
+ if ($p_header['comment_len'] != 0)
+ {
+ fputs($this->zip_fd, $p_header['comment'], $p_header['comment_len']);
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privWriteCentralHeader()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privWriteCentralHeader($p_nb_entries, $p_size, $p_offset, $p_comment)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privWriteCentralHeader", 'nb_entries='.$p_nb_entries.', size='.$p_size.', offset='.$p_offset.', comment="'.$p_comment.'"');
+ $v_result=1;
+
+ // ----- Packed data
+ $v_binary_data = pack("VvvvvVVv", 0x06054b50, 0, 0, $p_nb_entries,
+ $p_nb_entries, $p_size,
+ $p_offset, strlen($p_comment));
+
+ // ----- Write the 22 bytes of the header in the zip file
+ fputs($this->zip_fd, $v_binary_data, 22);
+
+ // ----- Write the variable fields
+ if (strlen($p_comment) != 0)
+ {
+ fputs($this->zip_fd, $p_comment, strlen($p_comment));
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privList()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privList(&$p_list)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privList", "list");
+ $v_result=1;
+
+ // ----- Magic quotes trick
+ $this->privDisableMagicQuotes();
+
+ // ----- Open the zip file
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Open file in binary read mode");
+ if (($this->zip_fd = @fopen($this->zipname, 'rb')) == 0)
+ {
+ // ----- Magic quotes trick
+ $this->privSwapBackMagicQuotes();
+
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive \''.$this->zipname.'\' in binary read mode');
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Read the central directory informations
+ $v_central_dir = array();
+ if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1)
+ {
+ $this->privSwapBackMagicQuotes();
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Go to beginning of Central Dir
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Offset : ".$v_central_dir['offset']."'");
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Position in file : ".ftell($this->zip_fd)."'");
+ @rewind($this->zip_fd);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Position in file : ".ftell($this->zip_fd)."'");
+ if (@fseek($this->zip_fd, $v_central_dir['offset']))
+ {
+ $this->privSwapBackMagicQuotes();
+
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size');
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Position in file : ".ftell($this->zip_fd)."'");
+
+ // ----- Read each entry
+ for ($i=0; $i<$v_central_dir['entries']; $i++)
+ {
+ // ----- Read the file header
+ if (($v_result = $this->privReadCentralFileHeader($v_header)) != 1)
+ {
+ $this->privSwapBackMagicQuotes();
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ $v_header['index'] = $i;
+
+ // ----- Get the only interesting attributes
+ $this->privConvertHeader2FileInfo($v_header, $p_list[$i]);
+ unset($v_header);
+ }
+
+ // ----- Close the zip file
+ $this->privCloseFd();
+
+ // ----- Magic quotes trick
+ $this->privSwapBackMagicQuotes();
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privConvertHeader2FileInfo()
+ // Description :
+ // This function takes the file informations from the central directory
+ // entries and extract the interesting parameters that will be given back.
+ // The resulting file infos are set in the array $p_info
+ // $p_info['filename'] : Filename with full path. Given by user (add),
+ // extracted in the filesystem (extract).
+ // $p_info['stored_filename'] : Stored filename in the archive.
+ // $p_info['size'] = Size of the file.
+ // $p_info['compressed_size'] = Compressed size of the file.
+ // $p_info['mtime'] = Last modification date of the file.
+ // $p_info['comment'] = Comment associated with the file.
+ // $p_info['folder'] = true/false : indicates if the entry is a folder or not.
+ // $p_info['status'] = status of the action on the file.
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privConvertHeader2FileInfo($p_header, &$p_info)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privConvertHeader2FileInfo", "Filename='".$p_header['filename']."'");
+ $v_result=1;
+
+ // ----- Get the interesting attributes
+ $p_info['filename'] = $p_header['filename'];
+ $p_info['stored_filename'] = $p_header['stored_filename'];
+ $p_info['size'] = $p_header['size'];
+ $p_info['compressed_size'] = $p_header['compressed_size'];
+ $p_info['mtime'] = $p_header['mtime'];
+ $p_info['comment'] = $p_header['comment'];
+ $p_info['folder'] = (($p_header['external']&0x00000010)==0x00000010);
+ $p_info['index'] = $p_header['index'];
+ $p_info['status'] = $p_header['status'];
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privExtractByRule()
+ // Description :
+ // Extract a file or directory depending of rules (by index, by name, ...)
+ // Parameters :
+ // $p_file_list : An array where will be placed the properties of each
+ // extracted file
+ // $p_path : Path to add while writing the extracted files
+ // $p_remove_path : Path to remove (from the file memorized path) while writing the
+ // extracted files. If the path does not match the file path,
+ // the file is extracted with its memorized path.
+ // $p_remove_path does not apply to 'list' mode.
+ // $p_path and $p_remove_path are commulative.
+ // Return Values :
+ // 1 on success,0 or less on error (see error code list)
+ // --------------------------------------------------------------------------------
+ function privExtractByRule(&$p_file_list, $p_path, $p_remove_path, $p_remove_all_path, &$p_options)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privExtractByRule", "path='$p_path', remove_path='$p_remove_path', remove_all_path='".($p_remove_all_path?'true':'false')."'");
+ $v_result=1;
+
+ // ----- Magic quotes trick
+ $this->privDisableMagicQuotes();
+
+ // ----- Check the path
+ if ( ($p_path == "")
+ || ( (substr($p_path, 0, 1) != "/")
+ && (substr($p_path, 0, 3) != "../")
+ && (substr($p_path,1,2)!=":/")))
+ $p_path = "./".$p_path;
+
+ // ----- Reduce the path last (and duplicated) '/'
+ if (($p_path != "./") && ($p_path != "/"))
+ {
+ // ----- Look for the path end '/'
+ while (substr($p_path, -1) == "/")
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Destination path [$p_path] ends by '/'");
+ $p_path = substr($p_path, 0, strlen($p_path)-1);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Modified to [$p_path]");
+ }
+ }
+
+ // ----- Look for path to remove format (should end by /)
+ if (($p_remove_path != "") && (substr($p_remove_path, -1) != '/'))
+ {
+ $p_remove_path .= '/';
+ }
+ $p_remove_path_size = strlen($p_remove_path);
+
+ // ----- Open the zip file
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Open file in binary read mode");
+ if (($v_result = $this->privOpenFd('rb')) != 1)
+ {
+ $this->privSwapBackMagicQuotes();
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Read the central directory informations
+ $v_central_dir = array();
+ if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1)
+ {
+ // ----- Close the zip file
+ $this->privCloseFd();
+ $this->privSwapBackMagicQuotes();
+
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Start at beginning of Central Dir
+ $v_pos_entry = $v_central_dir['offset'];
+
+ // ----- Read each entry
+ $j_start = 0;
+ for ($i=0, $v_nb_extracted=0; $i<$v_central_dir['entries']; $i++)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Read next file header entry : '$i'");
+
+ // ----- Read next Central dir entry
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Position before rewind : ".ftell($this->zip_fd)."'");
+ @rewind($this->zip_fd);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Position after rewind : ".ftell($this->zip_fd)."'");
+ if (@fseek($this->zip_fd, $v_pos_entry))
+ {
+ // ----- Close the zip file
+ $this->privCloseFd();
+ $this->privSwapBackMagicQuotes();
+
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size');
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Position after fseek : ".ftell($this->zip_fd)."'");
+
+ // ----- Read the file header
+ $v_header = array();
+ if (($v_result = $this->privReadCentralFileHeader($v_header)) != 1)
+ {
+ // ----- Close the zip file
+ $this->privCloseFd();
+ $this->privSwapBackMagicQuotes();
+
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Store the index
+ $v_header['index'] = $i;
+
+ // ----- Store the file position
+ $v_pos_entry = ftell($this->zip_fd);
+
+ // ----- Look for the specific extract rules
+ $v_extract = false;
+
+ // ----- Look for extract by name rule
+ if ( (isset($p_options[PCLZIP_OPT_BY_NAME]))
+ && ($p_options[PCLZIP_OPT_BY_NAME] != 0)) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Extract with rule 'ByName'");
+
+ // ----- Look if the filename is in the list
+ for ($j=0; ($j<sizeof($p_options[PCLZIP_OPT_BY_NAME])) && (!$v_extract); $j++) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Compare with file '".$p_options[PCLZIP_OPT_BY_NAME][$j]."'");
+
+ // ----- Look for a directory
+ if (substr($p_options[PCLZIP_OPT_BY_NAME][$j], -1) == "/") {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "The searched item is a directory");
+
+ // ----- Look if the directory is in the filename path
+ if ( (strlen($v_header['stored_filename']) > strlen($p_options[PCLZIP_OPT_BY_NAME][$j]))
+ && (substr($v_header['stored_filename'], 0, strlen($p_options[PCLZIP_OPT_BY_NAME][$j])) == $p_options[PCLZIP_OPT_BY_NAME][$j])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "The directory is in the file path");
+ $v_extract = true;
+ }
+ }
+ // ----- Look for a filename
+ elseif ($v_header['stored_filename'] == $p_options[PCLZIP_OPT_BY_NAME][$j]) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "The file is the right one.");
+ $v_extract = true;
+ }
+ }
+ }
+
+ // ----- Look for extract by ereg rule
+ else if ( (isset($p_options[PCLZIP_OPT_BY_EREG]))
+ && ($p_options[PCLZIP_OPT_BY_EREG] != "")) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Extract by ereg '".$p_options[PCLZIP_OPT_BY_EREG]."'");
+
+ if (ereg($p_options[PCLZIP_OPT_BY_EREG], $v_header['stored_filename'])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Filename match the regular expression");
+ $v_extract = true;
+ }
+ }
+
+ // ----- Look for extract by preg rule
+ else if ( (isset($p_options[PCLZIP_OPT_BY_PREG]))
+ && ($p_options[PCLZIP_OPT_BY_PREG] != "")) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Extract with rule 'ByEreg'");
+
+ if (preg_match($p_options[PCLZIP_OPT_BY_PREG], $v_header['stored_filename'])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Filename match the regular expression");
+ $v_extract = true;
+ }
+ }
+
+ // ----- Look for extract by index rule
+ else if ( (isset($p_options[PCLZIP_OPT_BY_INDEX]))
+ && ($p_options[PCLZIP_OPT_BY_INDEX] != 0)) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Extract with rule 'ByIndex'");
+
+ // ----- Look if the index is in the list
+ for ($j=$j_start; ($j<sizeof($p_options[PCLZIP_OPT_BY_INDEX])) && (!$v_extract); $j++) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Look if index '$i' is in [".$p_options[PCLZIP_OPT_BY_INDEX][$j]['start'].",".$p_options[PCLZIP_OPT_BY_INDEX][$j]['end']."]");
+
+ if (($i>=$p_options[PCLZIP_OPT_BY_INDEX][$j]['start']) && ($i<=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end'])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Found as part of an index range");
+ $v_extract = true;
+ }
+ if ($i>=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end']) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Do not look this index range for next loop");
+ $j_start = $j+1;
+ }
+
+ if ($p_options[PCLZIP_OPT_BY_INDEX][$j]['start']>$i) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Index range is greater than index, stop loop");
+ break;
+ }
+ }
+ }
+
+ // ----- Look for no rule, which means extract all the archive
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Extract with no rule (extract all)");
+ $v_extract = true;
+ }
+
+ // ----- Check compression method
+ if ( ($v_extract)
+ && ( ($v_header['compression'] != 8)
+ && ($v_header['compression'] != 0))) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Unsupported compression method (".$v_header['compression'].")");
+ $v_header['status'] = 'unsupported_compression';
+
+ // ----- Look for PCLZIP_OPT_STOP_ON_ERROR
+ if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR]))
+ && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "PCLZIP_OPT_STOP_ON_ERROR is selected, extraction will be stopped");
+
+ $this->privSwapBackMagicQuotes();
+
+ PclZip::privErrorLog(PCLZIP_ERR_UNSUPPORTED_COMPRESSION,
+ "Filename '".$v_header['stored_filename']."' is "
+ ."compressed by an unsupported compression "
+ ."method (".$v_header['compression'].") ");
+
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ }
+
+ // ----- Check encrypted files
+ if (($v_extract) && (($v_header['flag'] & 1) == 1)) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Unsupported file encryption");
+ $v_header['status'] = 'unsupported_encryption';
+
+ // ----- Look for PCLZIP_OPT_STOP_ON_ERROR
+ if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR]))
+ && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "PCLZIP_OPT_STOP_ON_ERROR is selected, extraction will be stopped");
+
+ $this->privSwapBackMagicQuotes();
+
+ PclZip::privErrorLog(PCLZIP_ERR_UNSUPPORTED_ENCRYPTION,
+ "Unsupported encryption for "
+ ." filename '".$v_header['stored_filename']
+ ."'");
+
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ }
+
+ // ----- Look for real extraction
+ if (($v_extract) && ($v_header['status'] != 'ok')) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "No need for extract");
+ $v_result = $this->privConvertHeader2FileInfo($v_header,
+ $p_file_list[$v_nb_extracted++]);
+ if ($v_result != 1) {
+ $this->privCloseFd();
+ $this->privSwapBackMagicQuotes();
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ $v_extract = false;
+ }
+
+ // ----- Look for real extraction
+ if ($v_extract)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extracting file '".$v_header['filename']."', index '$i'");
+
+ // ----- Go to the file position
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position before rewind : ".ftell($this->zip_fd)."'");
+ @rewind($this->zip_fd);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position after rewind : ".ftell($this->zip_fd)."'");
+ if (@fseek($this->zip_fd, $v_header['offset']))
+ {
+ // ----- Close the zip file
+ $this->privCloseFd();
+
+ $this->privSwapBackMagicQuotes();
+
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size');
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position after fseek : ".ftell($this->zip_fd)."'");
+
+ // ----- Look for extraction as string
+ if ($p_options[PCLZIP_OPT_EXTRACT_AS_STRING]) {
+
+ // ----- Extracting the file
+ $v_result1 = $this->privExtractFileAsString($v_header, $v_string);
+ if ($v_result1 < 1) {
+ $this->privCloseFd();
+ $this->privSwapBackMagicQuotes();
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result1);
+ return $v_result1;
+ }
+
+ // ----- Get the only interesting attributes
+ if (($v_result = $this->privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted])) != 1)
+ {
+ // ----- Close the zip file
+ $this->privCloseFd();
+ $this->privSwapBackMagicQuotes();
+
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Set the file content
+ $p_file_list[$v_nb_extracted]['content'] = $v_string;
+
+ // ----- Next extracted file
+ $v_nb_extracted++;
+
+ // ----- Look for user callback abort
+ if ($v_result1 == 2) {
+ break;
+ }
+ }
+ // ----- Look for extraction in standard output
+ elseif ( (isset($p_options[PCLZIP_OPT_EXTRACT_IN_OUTPUT]))
+ && ($p_options[PCLZIP_OPT_EXTRACT_IN_OUTPUT])) {
+ // ----- Extracting the file in standard output
+ $v_result1 = $this->privExtractFileInOutput($v_header, $p_options);
+ if ($v_result1 < 1) {
+ $this->privCloseFd();
+ $this->privSwapBackMagicQuotes();
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result1);
+ return $v_result1;
+ }
+
+ // ----- Get the only interesting attributes
+ if (($v_result = $this->privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted++])) != 1) {
+ $this->privCloseFd();
+ $this->privSwapBackMagicQuotes();
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Look for user callback abort
+ if ($v_result1 == 2) {
+ break;
+ }
+ }
+ // ----- Look for normal extraction
+ else {
+ // ----- Extracting the file
+ $v_result1 = $this->privExtractFile($v_header,
+ $p_path, $p_remove_path,
+ $p_remove_all_path,
+ $p_options);
+ if ($v_result1 < 1) {
+ $this->privCloseFd();
+ $this->privSwapBackMagicQuotes();
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result1);
+ return $v_result1;
+ }
+
+ // ----- Get the only interesting attributes
+ if (($v_result = $this->privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted++])) != 1)
+ {
+ // ----- Close the zip file
+ $this->privCloseFd();
+ $this->privSwapBackMagicQuotes();
+
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Look for user callback abort
+ if ($v_result1 == 2) {
+ break;
+ }
+ }
+ }
+ }
+
+ // ----- Close the zip file
+ $this->privCloseFd();
+ $this->privSwapBackMagicQuotes();
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privExtractFile()
+ // Description :
+ // Parameters :
+ // Return Values :
+ //
+ // 1 : ... ?
+ // PCLZIP_ERR_USER_ABORTED(2) : User ask for extraction stop in callback
+ // --------------------------------------------------------------------------------
+ function privExtractFile(&$p_entry, $p_path, $p_remove_path, $p_remove_all_path, &$p_options)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::privExtractFile', "path='$p_path', remove_path='$p_remove_path', remove_all_path='".($p_remove_all_path?'true':'false')."'");
+ $v_result=1;
+
+ // ----- Read the file header
+ if (($v_result = $this->privReadFileHeader($v_header)) != 1)
+ {
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Found file '".$v_header['filename']."', size '".$v_header['size']."'");
+
+ // ----- Check that the file header is coherent with $p_entry info
+ if ($this->privCheckFileHeaders($v_header, $p_entry) != 1) {
+ // TBC
+ }
+
+ // ----- Look for all path to remove
+ if ($p_remove_all_path == true) {
+ // ----- Look for folder entry that not need to be extracted
+ if (($p_entry['external']&0x00000010)==0x00000010) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "The entry is a folder : need to be filtered");
+
+ $p_entry['status'] = "filtered";
+
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "All path is removed");
+ // ----- Get the basename of the path
+ $p_entry['filename'] = basename($p_entry['filename']);
+ }
+
+ // ----- Look for path to remove
+ else if ($p_remove_path != "")
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Look for some path to remove");
+ if (PclZipUtilPathInclusion($p_remove_path, $p_entry['filename']) == 2)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "The folder is the same as the removed path '".$p_entry['filename']."'");
+
+ // ----- Change the file status
+ $p_entry['status'] = "filtered";
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ $p_remove_path_size = strlen($p_remove_path);
+ if (substr($p_entry['filename'], 0, $p_remove_path_size) == $p_remove_path)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Found path '$p_remove_path' to remove in file '".$p_entry['filename']."'");
+
+ // ----- Remove the path
+ $p_entry['filename'] = substr($p_entry['filename'], $p_remove_path_size);
+
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Resulting file is '".$p_entry['filename']."'");
+ }
+ }
+
+ // ----- Add the path
+ if ($p_path != '') {
+ $p_entry['filename'] = $p_path."/".$p_entry['filename'];
+ }
+
+ // ----- Check a base_dir_restriction
+ if (isset($p_options[PCLZIP_OPT_EXTRACT_DIR_RESTRICTION])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Check the extract directory restriction");
+ $v_inclusion
+ = PclZipUtilPathInclusion($p_options[PCLZIP_OPT_EXTRACT_DIR_RESTRICTION],
+ $p_entry['filename']);
+ if ($v_inclusion == 0) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "PCLZIP_OPT_EXTRACT_DIR_RESTRICTION is selected, file is outside restriction");
+
+ PclZip::privErrorLog(PCLZIP_ERR_DIRECTORY_RESTRICTION,
+ "Filename '".$p_entry['filename']."' is "
+ ."outside PCLZIP_OPT_EXTRACT_DIR_RESTRICTION");
+
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ }
+
+ // ----- Look for pre-extract callback
+ if (isset($p_options[PCLZIP_CB_PRE_EXTRACT])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "A pre-callback '".$p_options[PCLZIP_CB_PRE_EXTRACT]."()') is defined for the extraction");
+
+ // ----- Generate a local information
+ $v_local_header = array();
+ $this->privConvertHeader2FileInfo($p_entry, $v_local_header);
+
+ // ----- Call the callback
+ // Here I do not use call_user_func() because I need to send a reference to the
+ // header.
+ eval('$v_result = '.$p_options[PCLZIP_CB_PRE_EXTRACT].'(PCLZIP_CB_PRE_EXTRACT, $v_local_header);');
+ if ($v_result == 0) {
+ // ----- Change the file status
+ $p_entry['status'] = "skipped";
+ $v_result = 1;
+ }
+
+ // ----- Look for abort result
+ if ($v_result == 2) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "User callback abort the extraction");
+ // ----- This status is internal and will be changed in 'skipped'
+ $p_entry['status'] = "aborted";
+ $v_result = PCLZIP_ERR_USER_ABORTED;
+ }
+
+ // ----- Update the informations
+ // Only some fields can be modified
+ $p_entry['filename'] = $v_local_header['filename'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "New filename is '".$p_entry['filename']."'");
+ }
+
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extracting file (with path) '".$p_entry['filename']."', size '$v_header[size]'");
+
+ // ----- Look if extraction should be done
+ if ($p_entry['status'] == 'ok') {
+
+ // ----- Look for specific actions while the file exist
+ if (file_exists($p_entry['filename']))
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "File '".$p_entry['filename']."' already exists");
+
+ // ----- Look if file is a directory
+ if (is_dir($p_entry['filename']))
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Existing file '".$p_entry['filename']."' is a directory");
+
+ // ----- Change the file status
+ $p_entry['status'] = "already_a_directory";
+
+ // ----- Look for PCLZIP_OPT_STOP_ON_ERROR
+ // For historical reason first PclZip implementation does not stop
+ // when this kind of error occurs.
+ if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR]))
+ && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "PCLZIP_OPT_STOP_ON_ERROR is selected, extraction will be stopped");
+
+ PclZip::privErrorLog(PCLZIP_ERR_ALREADY_A_DIRECTORY,
+ "Filename '".$p_entry['filename']."' is "
+ ."already used by an existing directory");
+
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ }
+ // ----- Look if file is write protected
+ else if (!is_writeable($p_entry['filename']))
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Existing file '".$p_entry['filename']."' is write protected");
+
+ // ----- Change the file status
+ $p_entry['status'] = "write_protected";
+
+ // ----- Look for PCLZIP_OPT_STOP_ON_ERROR
+ // For historical reason first PclZip implementation does not stop
+ // when this kind of error occurs.
+ if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR]))
+ && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "PCLZIP_OPT_STOP_ON_ERROR is selected, extraction will be stopped");
+
+ PclZip::privErrorLog(PCLZIP_ERR_WRITE_OPEN_FAIL,
+ "Filename '".$p_entry['filename']."' exists "
+ ."and is write protected");
+
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ }
+
+ // ----- Look if the extracted file is older
+ else if (filemtime($p_entry['filename']) > $p_entry['mtime'])
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Existing file '".$p_entry['filename']."' is newer (".date("l dS of F Y h:i:s A", filemtime($p_entry['filename'])).") than the extracted file (".date("l dS of F Y h:i:s A", $p_entry['mtime']).")");
+ // ----- Change the file status
+ if ( (isset($p_options[PCLZIP_OPT_REPLACE_NEWER]))
+ && ($p_options[PCLZIP_OPT_REPLACE_NEWER]===true)) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "PCLZIP_OPT_REPLACE_NEWER is selected, file will be replaced");
+ }
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "File will not be replaced");
+ $p_entry['status'] = "newer_exist";
+
+ // ----- Look for PCLZIP_OPT_STOP_ON_ERROR
+ // For historical reason first PclZip implementation does not stop
+ // when this kind of error occurs.
+ if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR]))
+ && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "PCLZIP_OPT_STOP_ON_ERROR is selected, extraction will be stopped");
+
+ PclZip::privErrorLog(PCLZIP_ERR_WRITE_OPEN_FAIL,
+ "Newer version of '".$p_entry['filename']."' exists "
+ ."and option PCLZIP_OPT_REPLACE_NEWER is not selected");
+
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ }
+ }
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Existing file '".$p_entry['filename']."' is older than the extrated one - will be replaced by the extracted one (".date("l dS of F Y h:i:s A", filemtime($p_entry['filename'])).") than the extracted file (".date("l dS of F Y h:i:s A", $p_entry['mtime']).")");
+ }
+ }
+
+ // ----- Check the directory availability and create it if necessary
+ else {
+ if ((($p_entry['external']&0x00000010)==0x00000010) || (substr($p_entry['filename'], -1) == '/'))
+ $v_dir_to_check = $p_entry['filename'];
+ else if (!strstr($p_entry['filename'], "/"))
+ $v_dir_to_check = "";
+ else
+ $v_dir_to_check = dirname($p_entry['filename']);
+
+ if (($v_result = $this->privDirCheck($v_dir_to_check, (($p_entry['external']&0x00000010)==0x00000010))) != 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Unable to create path for '".$p_entry['filename']."'");
+
+ // ----- Change the file status
+ $p_entry['status'] = "path_creation_fail";
+
+ // ----- Return
+ ////--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ //return $v_result;
+ $v_result = 1;
+ }
+ }
+ }
+
+ // ----- Look if extraction should be done
+ if ($p_entry['status'] == 'ok') {
+
+ // ----- Do the extraction (if not a folder)
+ if (!(($p_entry['external']&0x00000010)==0x00000010))
+ {
+ // ----- Look for not compressed file
+ if ($p_entry['compression'] == 0) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extracting an un-compressed file");
+
+ // ----- Opening destination file
+ if (($v_dest_file = @fopen($p_entry['filename'], 'wb')) == 0)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Error while opening '".$p_entry['filename']."' in write binary mode");
+
+ // ----- Change the file status
+ $p_entry['status'] = "write_error";
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Read '".$p_entry['size']."' bytes");
+
+ // ----- Read the file by PCLZIP_READ_BLOCK_SIZE octets blocks
+ $v_size = $p_entry['compressed_size'];
+ while ($v_size != 0)
+ {
+ $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Read $v_read_size bytes");
+ $v_buffer = @fread($this->zip_fd, $v_read_size);
+ /* Try to speed up the code
+ $v_binary_data = pack('a'.$v_read_size, $v_buffer);
+ @fwrite($v_dest_file, $v_binary_data, $v_read_size);
+ */
+ @fwrite($v_dest_file, $v_buffer, $v_read_size);
+ $v_size -= $v_read_size;
+ }
+
+ // ----- Closing the destination file
+ fclose($v_dest_file);
+
+ // ----- Change the file mtime
+ touch($p_entry['filename'], $p_entry['mtime']);
+
+
+ }
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extracting a compressed file (Compression method ".$p_entry['compression'].")");
+ // ----- TBC
+ // Need to be finished
+ if (($p_entry['flag'] & 1) == 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "File is encrypted");
+ /*
+ // ----- Read the encryption header
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Read 12 encryption header bytes");
+ $v_encryption_header = @fread($this->zip_fd, 12);
+
+ // ----- Read the encrypted & compressed file in a buffer
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Read '".($p_entry['compressed_size']-12)."' compressed & encrypted bytes");
+ $v_buffer = @fread($this->zip_fd, $p_entry['compressed_size']-12);
+
+ // ----- Decrypt the buffer
+ $this->privDecrypt($v_encryption_header, $v_buffer,
+ $p_entry['compressed_size']-12, $p_entry['crc']);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Buffer is '".$v_buffer."'");
+ */
+ }
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Read '".$p_entry['compressed_size']."' compressed bytes");
+ // ----- Read the compressed file in a buffer (one shot)
+ $v_buffer = @fread($this->zip_fd, $p_entry['compressed_size']);
+ }
+
+ // ----- Decompress the file
+ $v_file_content = @gzinflate($v_buffer);
+ unset($v_buffer);
+ if ($v_file_content === FALSE) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Unable to inflate compressed file");
+
+ // ----- Change the file status
+ // TBC
+ $p_entry['status'] = "error";
+
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Opening destination file
+ if (($v_dest_file = @fopen($p_entry['filename'], 'wb')) == 0) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Error while opening '".$p_entry['filename']."' in write binary mode");
+
+ // ----- Change the file status
+ $p_entry['status'] = "write_error";
+
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Write the uncompressed data
+ @fwrite($v_dest_file, $v_file_content, $p_entry['size']);
+ unset($v_file_content);
+
+ // ----- Closing the destination file
+ @fclose($v_dest_file);
+
+ // ----- Change the file mtime
+ @touch($p_entry['filename'], $p_entry['mtime']);
+ }
+
+ // ----- Look for chmod option
+ if (isset($p_options[PCLZIP_OPT_SET_CHMOD])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "chmod option activated '".$p_options[PCLZIP_OPT_SET_CHMOD]."'");
+
+ // ----- Change the mode of the file
+ @chmod($p_entry['filename'], $p_options[PCLZIP_OPT_SET_CHMOD]);
+ }
+
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extraction done");
+ }
+ }
+
+ // ----- Change abort status
+ if ($p_entry['status'] == "aborted") {
+ $p_entry['status'] = "skipped";
+ }
+
+ // ----- Look for post-extract callback
+ elseif (isset($p_options[PCLZIP_CB_POST_EXTRACT])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "A post-callback '".$p_options[PCLZIP_CB_POST_EXTRACT]."()') is defined for the extraction");
+
+ // ----- Generate a local information
+ $v_local_header = array();
+ $this->privConvertHeader2FileInfo($p_entry, $v_local_header);
+
+ // ----- Call the callback
+ // Here I do not use call_user_func() because I need to send a reference to the
+ // header.
+ eval('$v_result = '.$p_options[PCLZIP_CB_POST_EXTRACT].'(PCLZIP_CB_POST_EXTRACT, $v_local_header);');
+
+ // ----- Look for abort result
+ if ($v_result == 2) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "User callback abort the extraction");
+ $v_result = PCLZIP_ERR_USER_ABORTED;
+ }
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privExtractFileInOutput()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privExtractFileInOutput(&$p_entry, &$p_options)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::privExtractFileInOutput', "");
+ $v_result=1;
+
+ // ----- Read the file header
+ if (($v_result = $this->privReadFileHeader($v_header)) != 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Found file '".$v_header['filename']."', size '".$v_header['size']."'");
+
+ // ----- Check that the file header is coherent with $p_entry info
+ if ($this->privCheckFileHeaders($v_header, $p_entry) != 1) {
+ // TBC
+ }
+
+ // ----- Look for pre-extract callback
+ if (isset($p_options[PCLZIP_CB_PRE_EXTRACT])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "A pre-callback '".$p_options[PCLZIP_CB_PRE_EXTRACT]."()') is defined for the extraction");
+
+ // ----- Generate a local information
+ $v_local_header = array();
+ $this->privConvertHeader2FileInfo($p_entry, $v_local_header);
+
+ // ----- Call the callback
+ // Here I do not use call_user_func() because I need to send a reference to the
+ // header.
+ eval('$v_result = '.$p_options[PCLZIP_CB_PRE_EXTRACT].'(PCLZIP_CB_PRE_EXTRACT, $v_local_header);');
+ if ($v_result == 0) {
+ // ----- Change the file status
+ $p_entry['status'] = "skipped";
+ $v_result = 1;
+ }
+
+ // ----- Look for abort result
+ if ($v_result == 2) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "User callback abort the extraction");
+ // ----- This status is internal and will be changed in 'skipped'
+ $p_entry['status'] = "aborted";
+ $v_result = PCLZIP_ERR_USER_ABORTED;
+ }
+
+ // ----- Update the informations
+ // Only some fields can be modified
+ $p_entry['filename'] = $v_local_header['filename'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "New filename is '".$p_entry['filename']."'");
+ }
+
+ // ----- Trace
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extracting file (with path) '".$p_entry['filename']."', size '$v_header[size]'");
+
+ // ----- Look if extraction should be done
+ if ($p_entry['status'] == 'ok') {
+
+ // ----- Do the extraction (if not a folder)
+ if (!(($p_entry['external']&0x00000010)==0x00000010)) {
+ // ----- Look for not compressed file
+ if ($p_entry['compressed_size'] == $p_entry['size']) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extracting an un-compressed file");
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Reading '".$p_entry['size']."' bytes");
+
+ // ----- Read the file in a buffer (one shot)
+ $v_buffer = @fread($this->zip_fd, $p_entry['compressed_size']);
+
+ // ----- Send the file to the output
+ echo $v_buffer;
+ unset($v_buffer);
+ }
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extracting a compressed file");
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Reading '".$p_entry['size']."' bytes");
+
+ // ----- Read the compressed file in a buffer (one shot)
+ $v_buffer = @fread($this->zip_fd, $p_entry['compressed_size']);
+
+ // ----- Decompress the file
+ $v_file_content = gzinflate($v_buffer);
+ unset($v_buffer);
+
+ // ----- Send the file to the output
+ echo $v_file_content;
+ unset($v_file_content);
+ }
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extraction done");
+ }
+ }
+
+ // ----- Change abort status
+ if ($p_entry['status'] == "aborted") {
+ $p_entry['status'] = "skipped";
+ }
+
+ // ----- Look for post-extract callback
+ elseif (isset($p_options[PCLZIP_CB_POST_EXTRACT])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "A post-callback '".$p_options[PCLZIP_CB_POST_EXTRACT]."()') is defined for the extraction");
+
+ // ----- Generate a local information
+ $v_local_header = array();
+ $this->privConvertHeader2FileInfo($p_entry, $v_local_header);
+
+ // ----- Call the callback
+ // Here I do not use call_user_func() because I need to send a reference to the
+ // header.
+ eval('$v_result = '.$p_options[PCLZIP_CB_POST_EXTRACT].'(PCLZIP_CB_POST_EXTRACT, $v_local_header);');
+
+ // ----- Look for abort result
+ if ($v_result == 2) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "User callback abort the extraction");
+ $v_result = PCLZIP_ERR_USER_ABORTED;
+ }
+ }
+
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privExtractFileAsString()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privExtractFileAsString(&$p_entry, &$p_string)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::privExtractFileAsString', "p_entry['filename']='".$p_entry['filename']."'");
+ $v_result=1;
+
+ // ----- Read the file header
+ $v_header = array();
+ if (($v_result = $this->privReadFileHeader($v_header)) != 1)
+ {
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Found file '".$v_header['filename']."', size '".$v_header['size']."'");
+
+ // ----- Check that the file header is coherent with $p_entry info
+ if ($this->privCheckFileHeaders($v_header, $p_entry) != 1) {
+ // TBC
+ }
+
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extracting file in string (with path) '".$p_entry['filename']."', size '$v_header[size]'");
+
+ // ----- Do the extraction (if not a folder)
+ if (!(($p_entry['external']&0x00000010)==0x00000010))
+ {
+ // ----- Look for not compressed file
+// if ($p_entry['compressed_size'] == $p_entry['size'])
+ if ($p_entry['compression'] == 0) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extracting an un-compressed file");
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Reading '".$p_entry['size']."' bytes");
+
+ // ----- Reading the file
+ $p_string = @fread($this->zip_fd, $p_entry['compressed_size']);
+ }
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extracting a compressed file (compression method '".$p_entry['compression']."')");
+
+ // ----- Reading the file
+ $v_data = @fread($this->zip_fd, $p_entry['compressed_size']);
+
+ // ----- Decompress the file
+ if (($p_string = @gzinflate($v_data)) === FALSE) {
+ // TBC
+ }
+ }
+
+ // ----- Trace
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extraction done");
+ }
+ else {
+ // TBC : error : can not extract a folder in a string
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privReadFileHeader()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privReadFileHeader(&$p_header)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privReadFileHeader", "");
+ $v_result=1;
+
+ // ----- Read the 4 bytes signature
+ $v_binary_data = @fread($this->zip_fd, 4);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Binary data is : '".sprintf("%08x", $v_binary_data)."'");
+ $v_data = unpack('Vid', $v_binary_data);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Binary signature is : '".sprintf("0x%08x", $v_data['id'])."'");
+
+ // ----- Check signature
+ if ($v_data['id'] != 0x04034b50)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Invalid File header");
+
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Invalid archive structure');
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Read the first 42 bytes of the header
+ $v_binary_data = fread($this->zip_fd, 26);
+
+ // ----- Look for invalid block size
+ if (strlen($v_binary_data) != 26)
+ {
+ $p_header['filename'] = "";
+ $p_header['status'] = "invalid_header";
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Invalid block size : ".strlen($v_binary_data));
+
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Invalid block size : ".strlen($v_binary_data));
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Extract the values
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Header : '".$v_binary_data."'");
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Header (Hex) : '".bin2hex($v_binary_data)."'");
+ $v_data = unpack('vversion/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len', $v_binary_data);
+
+ // ----- Get filename
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "File name length : ".$v_data['filename_len']);
+ $p_header['filename'] = fread($this->zip_fd, $v_data['filename_len']);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Filename : \''.$p_header['filename'].'\'');
+
+ // ----- Get extra_fields
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Extra field length : ".$v_data['extra_len']);
+ if ($v_data['extra_len'] != 0) {
+ $p_header['extra'] = fread($this->zip_fd, $v_data['extra_len']);
+ }
+ else {
+ $p_header['extra'] = '';
+ }
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Extra field : \''.bin2hex($p_header['extra']).'\'');
+
+ // ----- Extract properties
+ $p_header['version_extracted'] = $v_data['version'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Version need to extract : ('.$p_header['version_extracted'].') \''.($p_header['version_extracted']/10).'.'.($p_header['version_extracted']%10).'\'');
+ $p_header['compression'] = $v_data['compression'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Compression method : \''.$p_header['compression'].'\'');
+ $p_header['size'] = $v_data['size'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Size : \''.$p_header['size'].'\'');
+ $p_header['compressed_size'] = $v_data['compressed_size'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Compressed Size : \''.$p_header['compressed_size'].'\'');
+ $p_header['crc'] = $v_data['crc'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'CRC : \''.sprintf("0x%X", $p_header['crc']).'\'');
+ $p_header['flag'] = $v_data['flag'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Flag : \''.$p_header['flag'].'\'');
+ $p_header['filename_len'] = $v_data['filename_len'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Filename_len : \''.$p_header['filename_len'].'\'');
+
+ // ----- Recuperate date in UNIX format
+ $p_header['mdate'] = $v_data['mdate'];
+ $p_header['mtime'] = $v_data['mtime'];
+ if ($p_header['mdate'] && $p_header['mtime'])
+ {
+ // ----- Extract time
+ $v_hour = ($p_header['mtime'] & 0xF800) >> 11;
+ $v_minute = ($p_header['mtime'] & 0x07E0) >> 5;
+ $v_seconde = ($p_header['mtime'] & 0x001F)*2;
+
+ // ----- Extract date
+ $v_year = (($p_header['mdate'] & 0xFE00) >> 9) + 1980;
+ $v_month = ($p_header['mdate'] & 0x01E0) >> 5;
+ $v_day = $p_header['mdate'] & 0x001F;
+
+ // ----- Get UNIX date format
+ $p_header['mtime'] = mktime($v_hour, $v_minute, $v_seconde, $v_month, $v_day, $v_year);
+
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Date : \''.date("d/m/y H:i:s", $p_header['mtime']).'\'');
+ }
+ else
+ {
+ $p_header['mtime'] = time();
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Date is actual : \''.date("d/m/y H:i:s", $p_header['mtime']).'\'');
+ }
+
+ // TBC
+ //for(reset($v_data); $key = key($v_data); next($v_data)) {
+ // //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Attribut[$key] = ".$v_data[$key]);
+ //}
+
+ // ----- Set the stored filename
+ $p_header['stored_filename'] = $p_header['filename'];
+
+ // ----- Set the status field
+ $p_header['status'] = "ok";
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privReadCentralFileHeader()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privReadCentralFileHeader(&$p_header)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privReadCentralFileHeader", "");
+ $v_result=1;
+
+ // ----- Read the 4 bytes signature
+ $v_binary_data = @fread($this->zip_fd, 4);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Binary data is : '".sprintf("%08x", $v_binary_data)."'");
+ $v_data = unpack('Vid', $v_binary_data);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Binary signature is : '".sprintf("0x%08x", $v_data['id'])."'");
+
+ // ----- Check signature
+ if ($v_data['id'] != 0x02014b50)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Invalid Central Dir File signature");
+
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Invalid archive structure');
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Read the first 42 bytes of the header
+ $v_binary_data = fread($this->zip_fd, 42);
+
+ // ----- Look for invalid block size
+ if (strlen($v_binary_data) != 42)
+ {
+ $p_header['filename'] = "";
+ $p_header['status'] = "invalid_header";
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Invalid block size : ".strlen($v_binary_data));
+
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Invalid block size : ".strlen($v_binary_data));
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Extract the values
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Header : '".$v_binary_data."'");
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Header (Hex) : '".bin2hex($v_binary_data)."'");
+ $p_header = unpack('vversion/vversion_extracted/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len/vcomment_len/vdisk/vinternal/Vexternal/Voffset', $v_binary_data);
+
+ // ----- Get filename
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "File name length : ".$p_header['filename_len']);
+ if ($p_header['filename_len'] != 0)
+ $p_header['filename'] = fread($this->zip_fd, $p_header['filename_len']);
+ else
+ $p_header['filename'] = '';
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Filename : \''.$p_header['filename'].'\'');
+
+ // ----- Get extra
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Extra length : ".$p_header['extra_len']);
+ if ($p_header['extra_len'] != 0)
+ $p_header['extra'] = fread($this->zip_fd, $p_header['extra_len']);
+ else
+ $p_header['extra'] = '';
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Extra : \''.$p_header['extra'].'\'');
+
+ // ----- Get comment
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Comment length : ".$p_header['comment_len']);
+ if ($p_header['comment_len'] != 0)
+ $p_header['comment'] = fread($this->zip_fd, $p_header['comment_len']);
+ else
+ $p_header['comment'] = '';
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Comment : \''.$p_header['comment'].'\'');
+
+ // ----- Extract properties
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Version : \''.($p_header['version']/10).'.'.($p_header['version']%10).'\'');
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Version need to extract : \''.($p_header['version_extracted']/10).'.'.($p_header['version_extracted']%10).'\'');
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Size : \''.$p_header['size'].'\'');
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Compressed Size : \''.$p_header['compressed_size'].'\'');
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'CRC : \''.sprintf("0x%X", $p_header['crc']).'\'');
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Flag : \''.$p_header['flag'].'\'');
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Offset : \''.$p_header['offset'].'\'');
+
+ // ----- Recuperate date in UNIX format
+ if ($p_header['mdate'] && $p_header['mtime'])
+ {
+ // ----- Extract time
+ $v_hour = ($p_header['mtime'] & 0xF800) >> 11;
+ $v_minute = ($p_header['mtime'] & 0x07E0) >> 5;
+ $v_seconde = ($p_header['mtime'] & 0x001F)*2;
+
+ // ----- Extract date
+ $v_year = (($p_header['mdate'] & 0xFE00) >> 9) + 1980;
+ $v_month = ($p_header['mdate'] & 0x01E0) >> 5;
+ $v_day = $p_header['mdate'] & 0x001F;
+
+ // ----- Get UNIX date format
+ $p_header['mtime'] = mktime($v_hour, $v_minute, $v_seconde, $v_month, $v_day, $v_year);
+
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Date : \''.date("d/m/y H:i:s", $p_header['mtime']).'\'');
+ }
+ else
+ {
+ $p_header['mtime'] = time();
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Date is actual : \''.date("d/m/y H:i:s", $p_header['mtime']).'\'');
+ }
+
+ // ----- Set the stored filename
+ $p_header['stored_filename'] = $p_header['filename'];
+
+ // ----- Set default status to ok
+ $p_header['status'] = 'ok';
+
+ // ----- Look if it is a directory
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Internal (Hex) : '".sprintf("Ox%04X", $p_header['internal'])."'");
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "External (Hex) : '".sprintf("Ox%04X", $p_header['external'])."' (".(($p_header['external']&0x00000010)==0x00000010?'is a folder':'is a file').')');
+ if (substr($p_header['filename'], -1) == '/') {
+ //$p_header['external'] = 0x41FF0010;
+ $p_header['external'] = 0x00000010;
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Force folder external : \''.sprintf("Ox%04X", $p_header['external']).'\'');
+ }
+
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Header of filename : \''.$p_header['filename'].'\'');
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privCheckFileHeaders()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // 1 on success,
+ // 0 on error;
+ // --------------------------------------------------------------------------------
+ function privCheckFileHeaders(&$p_local_header, &$p_central_header)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privCheckFileHeaders", "");
+ $v_result=1;
+
+ // ----- Check the static values
+ // TBC
+ if ($p_local_header['filename'] != $p_central_header['filename']) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Bad check "filename" : TBC To Be Completed');
+ }
+ if ($p_local_header['version_extracted'] != $p_central_header['version_extracted']) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Bad check "version_extracted" : TBC To Be Completed');
+ }
+ if ($p_local_header['flag'] != $p_central_header['flag']) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Bad check "flag" : TBC To Be Completed');
+ }
+ if ($p_local_header['compression'] != $p_central_header['compression']) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Bad check "compression" : TBC To Be Completed');
+ }
+ if ($p_local_header['mtime'] != $p_central_header['mtime']) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Bad check "mtime" : TBC To Be Completed');
+ }
+ if ($p_local_header['filename_len'] != $p_central_header['filename_len']) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Bad check "filename_len" : TBC To Be Completed');
+ }
+
+ // ----- Look for flag bit 3
+ if (($p_local_header['flag'] & 8) == 8) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Purpose bit flag bit 3 set !');
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'File size, compression size and crc found in central header');
+ $p_local_header['size'] = $p_central_header['size'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Size : \''.$p_local_header['size'].'\'');
+ $p_local_header['compressed_size'] = $p_central_header['compressed_size'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Compressed Size : \''.$p_local_header['compressed_size'].'\'');
+ $p_local_header['crc'] = $p_central_header['crc'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'CRC : \''.sprintf("0x%X", $p_local_header['crc']).'\'');
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privReadEndCentralDir()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privReadEndCentralDir(&$p_central_dir)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privReadEndCentralDir", "");
+ $v_result=1;
+
+ // ----- Go to the end of the zip file
+ $v_size = filesize($this->zipname);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Size of the file :$v_size");
+ @fseek($this->zip_fd, $v_size);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Position at end of zip file : \''.ftell($this->zip_fd).'\'');
+ if (@ftell($this->zip_fd) != $v_size)
+ {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Unable to go to the end of the archive \''.$this->zipname.'\'');
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- First try : look if this is an archive with no commentaries (most of the time)
+ // in this case the end of central dir is at 22 bytes of the file end
+ $v_found = 0;
+ if ($v_size > 26) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Look for central dir with no comment');
+ @fseek($this->zip_fd, $v_size-22);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Position after min central position : \''.ftell($this->zip_fd).'\'');
+ if (($v_pos = @ftell($this->zip_fd)) != ($v_size-22))
+ {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Unable to seek back to the middle of the archive \''.$this->zipname.'\'');
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Read for bytes
+ $v_binary_data = @fread($this->zip_fd, 4);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Binary data is : '".sprintf("%08x", $v_binary_data)."'");
+ $v_data = @unpack('Vid', $v_binary_data);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Binary signature is : '".sprintf("0x%08x", $v_data['id'])."'");
+
+ // ----- Check signature
+ if ($v_data['id'] == 0x06054b50) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Found central dir at the default position.");
+ $v_found = 1;
+ }
+
+ $v_pos = ftell($this->zip_fd);
+ }
+
+ // ----- Go back to the maximum possible size of the Central Dir End Record
+ if (!$v_found) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Start extended search of end central dir');
+ $v_maximum_size = 65557; // 0xFFFF + 22;
+ if ($v_maximum_size > $v_size)
+ $v_maximum_size = $v_size;
+ @fseek($this->zip_fd, $v_size-$v_maximum_size);
+ if (@ftell($this->zip_fd) != ($v_size-$v_maximum_size))
+ {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Unable to seek back to the middle of the archive \''.$this->zipname.'\'');
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Position after max central position : \''.ftell($this->zip_fd).'\'');
+
+ // ----- Read byte per byte in order to find the signature
+ $v_pos = ftell($this->zip_fd);
+ $v_bytes = 0x00000000;
+ while ($v_pos < $v_size)
+ {
+ // ----- Read a byte
+ $v_byte = @fread($this->zip_fd, 1);
+
+ // ----- Add the byte
+ $v_bytes = ($v_bytes << 8) | Ord($v_byte);
+
+ // ----- Compare the bytes
+ if ($v_bytes == 0x504b0506)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Found End Central Dir signature at position : \''.ftell($this->zip_fd).'\'');
+ $v_pos++;
+ break;
+ }
+
+ $v_pos++;
+ }
+
+ // ----- Look if not found end of central dir
+ if ($v_pos == $v_size)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Unable to find End of Central Dir Record signature");
+
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Unable to find End of Central Dir Record signature");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ }
+
+ // ----- Read the first 18 bytes of the header
+ $v_binary_data = fread($this->zip_fd, 18);
+
+ // ----- Look for invalid block size
+ if (strlen($v_binary_data) != 18)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Invalid End of Central Dir Record size : ".strlen($v_binary_data));
+
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Invalid End of Central Dir Record size : ".strlen($v_binary_data));
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Extract the values
+ ////--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Central Dir Record : '".$v_binary_data."'");
+ ////--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Central Dir Record (Hex) : '".bin2hex($v_binary_data)."'");
+ $v_data = unpack('vdisk/vdisk_start/vdisk_entries/ventries/Vsize/Voffset/vcomment_size', $v_binary_data);
+
+ // ----- Check the global size
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Comment length : ".$v_data['comment_size']);
+ if (($v_pos + $v_data['comment_size'] + 18) != $v_size) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "The central dir is not at the end of the archive. Some trailing bytes exists after the archive.");
+
+ // ----- Removed in release 2.2 see readme file
+ // The check of the file size is a little too strict.
+ // Some bugs where found when a zip is encrypted/decrypted with 'crypt'.
+ // While decrypted, zip has training 0 bytes
+ if (0) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT,
+ 'The central dir is not at the end of the archive.'
+ .' Some trailing bytes exists after the archive.');
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ }
+
+ // ----- Get comment
+ if ($v_data['comment_size'] != 0)
+ $p_central_dir['comment'] = fread($this->zip_fd, $v_data['comment_size']);
+ else
+ $p_central_dir['comment'] = '';
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Comment : \''.$p_central_dir['comment'].'\'');
+
+ $p_central_dir['entries'] = $v_data['entries'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Nb of entries : \''.$p_central_dir['entries'].'\'');
+ $p_central_dir['disk_entries'] = $v_data['disk_entries'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Nb of entries for this disk : \''.$p_central_dir['disk_entries'].'\'');
+ $p_central_dir['offset'] = $v_data['offset'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Offset of Central Dir : \''.$p_central_dir['offset'].'\'');
+ $p_central_dir['size'] = $v_data['size'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Size of Central Dir : \''.$p_central_dir['size'].'\'');
+ $p_central_dir['disk'] = $v_data['disk'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Disk number : \''.$p_central_dir['disk'].'\'');
+ $p_central_dir['disk_start'] = $v_data['disk_start'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Start disk number : \''.$p_central_dir['disk_start'].'\'');
+
+ // TBC
+ //for(reset($p_central_dir); $key = key($p_central_dir); next($p_central_dir)) {
+ // //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "central_dir[$key] = ".$p_central_dir[$key]);
+ //}
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privDeleteByRule()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privDeleteByRule(&$p_result_list, &$p_options)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privDeleteByRule", "");
+ $v_result=1;
+ $v_list_detail = array();
+
+ // ----- Open the zip file
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Open file in binary read mode");
+ if (($v_result=$this->privOpenFd('rb')) != 1)
+ {
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Read the central directory informations
+ $v_central_dir = array();
+ if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1)
+ {
+ $this->privCloseFd();
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Go to beginning of File
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position in file : ".ftell($this->zip_fd)."'");
+ @rewind($this->zip_fd);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position in file : ".ftell($this->zip_fd)."'");
+
+ // ----- Scan all the files
+ // ----- Start at beginning of Central Dir
+ $v_pos_entry = $v_central_dir['offset'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position before rewind : ".ftell($this->zip_fd)."'");
+ @rewind($this->zip_fd);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position after rewind : ".ftell($this->zip_fd)."'");
+ if (@fseek($this->zip_fd, $v_pos_entry))
+ {
+ // ----- Close the zip file
+ $this->privCloseFd();
+
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size');
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position after fseek : ".ftell($this->zip_fd)."'");
+
+ // ----- Read each entry
+ $v_header_list = array();
+ $j_start = 0;
+ for ($i=0, $v_nb_extracted=0; $i<$v_central_dir['entries']; $i++)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Read next file header entry (index '$i')");
+
+ // ----- Read the file header
+ $v_header_list[$v_nb_extracted] = array();
+ if (($v_result = $this->privReadCentralFileHeader($v_header_list[$v_nb_extracted])) != 1)
+ {
+ // ----- Close the zip file
+ $this->privCloseFd();
+
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Filename (index '$i') : '".$v_header_list[$v_nb_extracted]['stored_filename']."'");
+
+ // ----- Store the index
+ $v_header_list[$v_nb_extracted]['index'] = $i;
+
+ // ----- Look for the specific extract rules
+ $v_found = false;
+
+ // ----- Look for extract by name rule
+ if ( (isset($p_options[PCLZIP_OPT_BY_NAME]))
+ && ($p_options[PCLZIP_OPT_BY_NAME] != 0)) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Extract with rule 'ByName'");
+
+ // ----- Look if the filename is in the list
+ for ($j=0; ($j<sizeof($p_options[PCLZIP_OPT_BY_NAME])) && (!$v_found); $j++) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Compare with file '".$p_options[PCLZIP_OPT_BY_NAME][$j]."'");
+
+ // ----- Look for a directory
+ if (substr($p_options[PCLZIP_OPT_BY_NAME][$j], -1) == "/") {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "The searched item is a directory");
+
+ // ----- Look if the directory is in the filename path
+ if ( (strlen($v_header_list[$v_nb_extracted]['stored_filename']) > strlen($p_options[PCLZIP_OPT_BY_NAME][$j]))
+ && (substr($v_header_list[$v_nb_extracted]['stored_filename'], 0, strlen($p_options[PCLZIP_OPT_BY_NAME][$j])) == $p_options[PCLZIP_OPT_BY_NAME][$j])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "The directory is in the file path");
+ $v_found = true;
+ }
+ elseif ( (($v_header_list[$v_nb_extracted]['external']&0x00000010)==0x00000010) /* Indicates a folder */
+ && ($v_header_list[$v_nb_extracted]['stored_filename'].'/' == $p_options[PCLZIP_OPT_BY_NAME][$j])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "The entry is the searched directory");
+ $v_found = true;
+ }
+ }
+ // ----- Look for a filename
+ elseif ($v_header_list[$v_nb_extracted]['stored_filename'] == $p_options[PCLZIP_OPT_BY_NAME][$j]) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "The file is the right one.");
+ $v_found = true;
+ }
+ }
+ }
+
+ // ----- Look for extract by ereg rule
+ else if ( (isset($p_options[PCLZIP_OPT_BY_EREG]))
+ && ($p_options[PCLZIP_OPT_BY_EREG] != "")) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Extract by ereg '".$p_options[PCLZIP_OPT_BY_EREG]."'");
+
+ if (ereg($p_options[PCLZIP_OPT_BY_EREG], $v_header_list[$v_nb_extracted]['stored_filename'])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Filename match the regular expression");
+ $v_found = true;
+ }
+ }
+
+ // ----- Look for extract by preg rule
+ else if ( (isset($p_options[PCLZIP_OPT_BY_PREG]))
+ && ($p_options[PCLZIP_OPT_BY_PREG] != "")) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Extract with rule 'ByEreg'");
+
+ if (preg_match($p_options[PCLZIP_OPT_BY_PREG], $v_header_list[$v_nb_extracted]['stored_filename'])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Filename match the regular expression");
+ $v_found = true;
+ }
+ }
+
+ // ----- Look for extract by index rule
+ else if ( (isset($p_options[PCLZIP_OPT_BY_INDEX]))
+ && ($p_options[PCLZIP_OPT_BY_INDEX] != 0)) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Extract with rule 'ByIndex'");
+
+ // ----- Look if the index is in the list
+ for ($j=$j_start; ($j<sizeof($p_options[PCLZIP_OPT_BY_INDEX])) && (!$v_found); $j++) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Look if index '$i' is in [".$p_options[PCLZIP_OPT_BY_INDEX][$j]['start'].",".$p_options[PCLZIP_OPT_BY_INDEX][$j]['end']."]");
+
+ if (($i>=$p_options[PCLZIP_OPT_BY_INDEX][$j]['start']) && ($i<=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end'])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Found as part of an index range");
+ $v_found = true;
+ }
+ if ($i>=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end']) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Do not look this index range for next loop");
+ $j_start = $j+1;
+ }
+
+ if ($p_options[PCLZIP_OPT_BY_INDEX][$j]['start']>$i) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Index range is greater than index, stop loop");
+ break;
+ }
+ }
+ }
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "No argument mean remove all file");
+ $v_found = true;
+ }
+
+ // ----- Look for deletion
+ if ($v_found)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "File '".$v_header_list[$v_nb_extracted]['stored_filename']."', index '$i' need to be deleted");
+ unset($v_header_list[$v_nb_extracted]);
+ }
+ else
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "File '".$v_header_list[$v_nb_extracted]['stored_filename']."', index '$i' will not be deleted");
+ $v_nb_extracted++;
+ }
+ }
+
+ // ----- Look if something need to be deleted
+ if ($v_nb_extracted > 0) {
+
+ // ----- Creates a temporay file
+ $v_zip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.tmp';
+
+ // ----- Creates a temporary zip archive
+ $v_temp_zip = new PclZip($v_zip_temp_name);
+
+ // ----- Open the temporary zip file in write mode
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Open file in binary write mode");
+ if (($v_result = $v_temp_zip->privOpenFd('wb')) != 1) {
+ $this->privCloseFd();
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Look which file need to be kept
+ for ($i=0; $i<sizeof($v_header_list); $i++) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Keep entry index '$i' : '".$v_header_list[$i]['filename']."'");
+
+ // ----- Calculate the position of the header
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Offset='". $v_header_list[$i]['offset']."'");
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position before rewind : ".ftell($this->zip_fd)."'");
+ @rewind($this->zip_fd);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position after rewind : ".ftell($this->zip_fd)."'");
+ if (@fseek($this->zip_fd, $v_header_list[$i]['offset'])) {
+ // ----- Close the zip file
+ $this->privCloseFd();
+ $v_temp_zip->privCloseFd();
+ @unlink($v_zip_temp_name);
+
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size');
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position after fseek : ".ftell($this->zip_fd)."'");
+
+ // ----- Read the file header
+ $v_local_header = array();
+ if (($v_result = $this->privReadFileHeader($v_local_header)) != 1) {
+ // ----- Close the zip file
+ $this->privCloseFd();
+ $v_temp_zip->privCloseFd();
+ @unlink($v_zip_temp_name);
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Check that local file header is same as central file header
+ if ($this->privCheckFileHeaders($v_local_header,
+ $v_header_list[$i]) != 1) {
+ // TBC
+ }
+ unset($v_local_header);
+
+ // ----- Write the file header
+ if (($v_result = $v_temp_zip->privWriteFileHeader($v_header_list[$i])) != 1) {
+ // ----- Close the zip file
+ $this->privCloseFd();
+ $v_temp_zip->privCloseFd();
+ @unlink($v_zip_temp_name);
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Offset for this file is '".$v_header_list[$i]['offset']."'");
+
+ // ----- Read/write the data block
+ if (($v_result = PclZipUtilCopyBlock($this->zip_fd, $v_temp_zip->zip_fd, $v_header_list[$i]['compressed_size'])) != 1) {
+ // ----- Close the zip file
+ $this->privCloseFd();
+ $v_temp_zip->privCloseFd();
+ @unlink($v_zip_temp_name);
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ }
+
+ // ----- Store the offset of the central dir
+ $v_offset = @ftell($v_temp_zip->zip_fd);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "New offset of central dir : $v_offset");
+
+ // ----- Re-Create the Central Dir files header
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Creates the new central directory");
+ for ($i=0; $i<sizeof($v_header_list); $i++) {
+ // ----- Create the file header
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Offset of file : ".$v_header_list[$i]['offset']);
+ if (($v_result = $v_temp_zip->privWriteCentralFileHeader($v_header_list[$i])) != 1) {
+ $v_temp_zip->privCloseFd();
+ $this->privCloseFd();
+ @unlink($v_zip_temp_name);
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Transform the header to a 'usable' info
+ $v_temp_zip->privConvertHeader2FileInfo($v_header_list[$i], $p_result_list[$i]);
+ }
+
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Creates the central directory footer");
+
+ // ----- Zip file comment
+ $v_comment = '';
+ if (isset($p_options[PCLZIP_OPT_COMMENT])) {
+ $v_comment = $p_options[PCLZIP_OPT_COMMENT];
+ }
+
+ // ----- Calculate the size of the central header
+ $v_size = @ftell($v_temp_zip->zip_fd)-$v_offset;
+
+ // ----- Create the central dir footer
+ if (($v_result = $v_temp_zip->privWriteCentralHeader(sizeof($v_header_list), $v_size, $v_offset, $v_comment)) != 1) {
+ // ----- Reset the file list
+ unset($v_header_list);
+ $v_temp_zip->privCloseFd();
+ $this->privCloseFd();
+ @unlink($v_zip_temp_name);
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Close
+ $v_temp_zip->privCloseFd();
+ $this->privCloseFd();
+
+ // ----- Delete the zip file
+ // TBC : I should test the result ...
+ @unlink($this->zipname);
+
+ // ----- Rename the temporary file
+ // TBC : I should test the result ...
+ //@rename($v_zip_temp_name, $this->zipname);
+ PclZipUtilRename($v_zip_temp_name, $this->zipname);
+
+ // ----- Destroy the temporary archive
+ unset($v_temp_zip);
+ }
+
+ // ----- Remove every files : reset the file
+ else if ($v_central_dir['entries'] != 0) {
+ $this->privCloseFd();
+
+ if (($v_result = $this->privOpenFd('wb')) != 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ if (($v_result = $this->privWriteCentralHeader(0, 0, 0, '')) != 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ $this->privCloseFd();
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privDirCheck()
+ // Description :
+ // Check if a directory exists, if not it creates it and all the parents directory
+ // which may be useful.
+ // Parameters :
+ // $p_dir : Directory path to check.
+ // Return Values :
+ // 1 : OK
+ // -1 : Unable to create directory
+ // --------------------------------------------------------------------------------
+ function privDirCheck($p_dir, $p_is_dir=false)
+ {
+ $v_result = 1;
+
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privDirCheck", "entry='$p_dir', is_dir='".($p_is_dir?"true":"false")."'");
+
+ // ----- Remove the final '/'
+ if (($p_is_dir) && (substr($p_dir, -1)=='/'))
+ {
+ $p_dir = substr($p_dir, 0, strlen($p_dir)-1);
+ }
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Looking for entry '$p_dir'");
+
+ // ----- Check the directory availability
+ if ((is_dir($p_dir)) || ($p_dir == ""))
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, "'$p_dir' is a directory");
+ return 1;
+ }
+
+ // ----- Extract parent directory
+ $p_parent_dir = dirname($p_dir);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Parent directory is '$p_parent_dir'");
+
+ // ----- Just a check
+ if ($p_parent_dir != $p_dir)
+ {
+ // ----- Look for parent directory
+ if ($p_parent_dir != "")
+ {
+ if (($v_result = $this->privDirCheck($p_parent_dir)) != 1)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ }
+ }
+
+ // ----- Create the directory
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Create directory '$p_dir'");
+ if (!@mkdir($p_dir, 0777))
+ {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_DIR_CREATE_FAIL, "Unable to create directory '$p_dir'");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result, "Directory '$p_dir' created");
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privMerge()
+ // Description :
+ // If $p_archive_to_add does not exist, the function exit with a success result.
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privMerge(&$p_archive_to_add)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privMerge", "archive='".$p_archive_to_add->zipname."'");
+ $v_result=1;
+
+ // ----- Look if the archive_to_add exists
+ if (!is_file($p_archive_to_add->zipname))
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Archive to add does not exist. End of merge.");
+
+ // ----- Nothing to merge, so merge is a success
+ $v_result = 1;
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Look if the archive exists
+ if (!is_file($this->zipname))
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Archive does not exist, duplicate the archive_to_add.");
+
+ // ----- Do a duplicate
+ $v_result = $this->privDuplicate($p_archive_to_add->zipname);
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Open the zip file
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Open file in binary read mode");
+ if (($v_result=$this->privOpenFd('rb')) != 1)
+ {
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Read the central directory informations
+ $v_central_dir = array();
+ if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1)
+ {
+ $this->privCloseFd();
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Go to beginning of File
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position in zip : ".ftell($this->zip_fd)."'");
+ @rewind($this->zip_fd);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position in zip : ".ftell($this->zip_fd)."'");
+
+ // ----- Open the archive_to_add file
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Open archive_to_add in binary read mode");
+ if (($v_result=$p_archive_to_add->privOpenFd('rb')) != 1)
+ {
+ $this->privCloseFd();
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Read the central directory informations
+ $v_central_dir_to_add = array();
+ if (($v_result = $p_archive_to_add->privReadEndCentralDir($v_central_dir_to_add)) != 1)
+ {
+ $this->privCloseFd();
+ $p_archive_to_add->privCloseFd();
+
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Go to beginning of File
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position in archive_to_add : ".ftell($p_archive_to_add->zip_fd)."'");
+ @rewind($p_archive_to_add->zip_fd);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position in archive_to_add : ".ftell($p_archive_to_add->zip_fd)."'");
+
+ // ----- Creates a temporay file
+ $v_zip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.tmp';
+
+ // ----- Open the temporary file in write mode
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Open file in binary read mode");
+ if (($v_zip_temp_fd = @fopen($v_zip_temp_name, 'wb')) == 0)
+ {
+ $this->privCloseFd();
+ $p_archive_to_add->privCloseFd();
+
+ PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_zip_temp_name.'\' in binary write mode');
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Copy the files from the archive to the temporary file
+ // TBC : Here I should better append the file and go back to erase the central dir
+ $v_size = $v_central_dir['offset'];
+ while ($v_size != 0)
+ {
+ $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Read $v_read_size bytes");
+ $v_buffer = fread($this->zip_fd, $v_read_size);
+ @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size);
+ $v_size -= $v_read_size;
+ }
+
+ // ----- Copy the files from the archive_to_add into the temporary file
+ $v_size = $v_central_dir_to_add['offset'];
+ while ($v_size != 0)
+ {
+ $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Read $v_read_size bytes");
+ $v_buffer = fread($p_archive_to_add->zip_fd, $v_read_size);
+ @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size);
+ $v_size -= $v_read_size;
+ }
+
+ // ----- Store the offset of the central dir
+ $v_offset = @ftell($v_zip_temp_fd);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "New offset of central dir : $v_offset");
+
+ // ----- Copy the block of file headers from the old archive
+ $v_size = $v_central_dir['size'];
+ while ($v_size != 0)
+ {
+ $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Read $v_read_size bytes");
+ $v_buffer = @fread($this->zip_fd, $v_read_size);
+ @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size);
+ $v_size -= $v_read_size;
+ }
+
+ // ----- Copy the block of file headers from the archive_to_add
+ $v_size = $v_central_dir_to_add['size'];
+ while ($v_size != 0)
+ {
+ $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Read $v_read_size bytes");
+ $v_buffer = @fread($p_archive_to_add->zip_fd, $v_read_size);
+ @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size);
+ $v_size -= $v_read_size;
+ }
+
+ // ----- Merge the file comments
+ $v_comment = $v_central_dir['comment'].' '.$v_central_dir_to_add['comment'];
+
+ // ----- Calculate the size of the (new) central header
+ $v_size = @ftell($v_zip_temp_fd)-$v_offset;
+
+ // ----- Swap the file descriptor
+ // Here is a trick : I swap the temporary fd with the zip fd, in order to use
+ // the following methods on the temporary fil and not the real archive fd
+ $v_swap = $this->zip_fd;
+ $this->zip_fd = $v_zip_temp_fd;
+ $v_zip_temp_fd = $v_swap;
+
+ // ----- Create the central dir footer
+ if (($v_result = $this->privWriteCentralHeader($v_central_dir['entries']+$v_central_dir_to_add['entries'], $v_size, $v_offset, $v_comment)) != 1)
+ {
+ $this->privCloseFd();
+ $p_archive_to_add->privCloseFd();
+ @fclose($v_zip_temp_fd);
+ $this->zip_fd = null;
+
+ // ----- Reset the file list
+ unset($v_header_list);
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Swap back the file descriptor
+ $v_swap = $this->zip_fd;
+ $this->zip_fd = $v_zip_temp_fd;
+ $v_zip_temp_fd = $v_swap;
+
+ // ----- Close
+ $this->privCloseFd();
+ $p_archive_to_add->privCloseFd();
+
+ // ----- Close the temporary file
+ @fclose($v_zip_temp_fd);
+
+ // ----- Delete the zip file
+ // TBC : I should test the result ...
+ @unlink($this->zipname);
+
+ // ----- Rename the temporary file
+ // TBC : I should test the result ...
+ //@rename($v_zip_temp_name, $this->zipname);
+ PclZipUtilRename($v_zip_temp_name, $this->zipname);
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privDuplicate()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privDuplicate($p_archive_filename)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privDuplicate", "archive_filename='$p_archive_filename'");
+ $v_result=1;
+
+ // ----- Look if the $p_archive_filename exists
+ if (!is_file($p_archive_filename))
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Archive to duplicate does not exist. End of duplicate.");
+
+ // ----- Nothing to duplicate, so duplicate is a success.
+ $v_result = 1;
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Open the zip file
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Open file in binary read mode");
+ if (($v_result=$this->privOpenFd('wb')) != 1)
+ {
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Open the temporary file in write mode
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Open file in binary read mode");
+ if (($v_zip_temp_fd = @fopen($p_archive_filename, 'rb')) == 0)
+ {
+ $this->privCloseFd();
+
+ PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive file \''.$p_archive_filename.'\' in binary write mode');
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Copy the files from the archive to the temporary file
+ // TBC : Here I should better append the file and go back to erase the central dir
+ $v_size = filesize($p_archive_filename);
+ while ($v_size != 0)
+ {
+ $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Read $v_read_size bytes");
+ $v_buffer = fread($v_zip_temp_fd, $v_read_size);
+ @fwrite($this->zip_fd, $v_buffer, $v_read_size);
+ $v_size -= $v_read_size;
+ }
+
+ // ----- Close
+ $this->privCloseFd();
+
+ // ----- Close the temporary file
+ @fclose($v_zip_temp_fd);
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privErrorLog()
+ // Description :
+ // Parameters :
+ // --------------------------------------------------------------------------------
+ function privErrorLog($p_error_code=0, $p_error_string='')
+ {
+ if (PCLZIP_ERROR_EXTERNAL == 1) {
+ PclError($p_error_code, $p_error_string);
+ }
+ else {
+ $this->error_code = $p_error_code;
+ $this->error_string = $p_error_string;
+ }
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privErrorReset()
+ // Description :
+ // Parameters :
+ // --------------------------------------------------------------------------------
+ function privErrorReset()
+ {
+ if (PCLZIP_ERROR_EXTERNAL == 1) {
+ PclErrorReset();
+ }
+ else {
+ $this->error_code = 0;
+ $this->error_string = '';
+ }
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privDecrypt()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privDecrypt($p_encryption_header, &$p_buffer, $p_size, $p_crc)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::privDecrypt', "size=".$p_size."");
+ $v_result=1;
+
+ // ----- To Be Modified ;-)
+ $v_pwd = "test";
+
+ $p_buffer = PclZipUtilZipDecrypt($p_buffer, $p_size, $p_encryption_header,
+ $p_crc, $v_pwd);
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privDisableMagicQuotes()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privDisableMagicQuotes()
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::privDisableMagicQuotes', "");
+ $v_result=1;
+
+ // ----- Look if function exists
+ if ( (!function_exists("get_magic_quotes_runtime"))
+ || (!function_exists("set_magic_quotes_runtime"))) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Functions *et_magic_quotes_runtime are not supported");
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Look if already done
+ if ($this->magic_quotes_status != -1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "magic_quote already disabled");
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Get and memorize the magic_quote value
+ $this->magic_quotes_status = @get_magic_quotes_runtime();
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Current magic_quotes_runtime status is '".($this->magic_quotes_status==0?'disable':'enable')."'");
+
+ // ----- Disable magic_quotes
+ if ($this->magic_quotes_status == 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Disable magic_quotes");
+ @set_magic_quotes_runtime(0);
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privSwapBackMagicQuotes()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privSwapBackMagicQuotes()
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::privSwapBackMagicQuotes', "");
+ $v_result=1;
+
+ // ----- Look if function exists
+ if ( (!function_exists("get_magic_quotes_runtime"))
+ || (!function_exists("set_magic_quotes_runtime"))) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Functions *et_magic_quotes_runtime are not supported");
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Look if something to do
+ if ($this->magic_quotes_status != -1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "magic_quote not modified");
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Swap back magic_quotes
+ if ($this->magic_quotes_status == 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Enable back magic_quotes");
+ @set_magic_quotes_runtime($this->magic_quotes_status);
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ }
+ // End of class
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : PclZipUtilPathReduction()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function PclZipUtilPathReduction($p_dir)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZipUtilPathReduction", "dir='$p_dir'");
+ $v_result = "";
+
+ // ----- Look for not empty path
+ if ($p_dir != "") {
+ // ----- Explode path by directory names
+ $v_list = explode("/", $p_dir);
+
+ // ----- Study directories from last to first
+ $v_skip = 0;
+ for ($i=sizeof($v_list)-1; $i>=0; $i--) {
+ // ----- Look for current path
+ if ($v_list[$i] == ".") {
+ // ----- Ignore this directory
+ // Should be the first $i=0, but no check is done
+ }
+ else if ($v_list[$i] == "..") {
+ $v_skip++;
+ }
+ else if ($v_list[$i] == "") {
+ // ----- First '/' i.e. root slash
+ if ($i == 0) {
+ $v_result = "/".$v_result;
+ if ($v_skip > 0) {
+ // ----- It is an invalid path, so the path is not modified
+ // TBC
+ $v_result = $p_dir;
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Invalid path is unchanged");
+ $v_skip = 0;
+ }
+ }
+ // ----- Last '/' i.e. indicates a directory
+ else if ($i == (sizeof($v_list)-1)) {
+ $v_result = $v_list[$i];
+ }
+ // ----- Double '/' inside the path
+ else {
+ // ----- Ignore only the double '//' in path,
+ // but not the first and last '/'
+ }
+ }
+ else {
+ // ----- Look for item to skip
+ if ($v_skip > 0) {
+ $v_skip--;
+ }
+ else {
+ $v_result = $v_list[$i].($i!=(sizeof($v_list)-1)?"/".$v_result:"");
+ }
+ }
+ }
+
+ // ----- Look for skip
+ if ($v_skip > 0) {
+ while ($v_skip > 0) {
+ $v_result = '../'.$v_result;
+ $v_skip--;
+ }
+ }
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : PclZipUtilPathInclusion()
+ // Description :
+ // This function indicates if the path $p_path is under the $p_dir tree. Or,
+ // said in an other way, if the file or sub-dir $p_path is inside the dir
+ // $p_dir.
+ // The function indicates also if the path is exactly the same as the dir.
+ // This function supports path with duplicated '/' like '//', but does not
+ // support '.' or '..' statements.
+ // Parameters :
+ // Return Values :
+ // 0 if $p_path is not inside directory $p_dir
+ // 1 if $p_path is inside directory $p_dir
+ // 2 if $p_path is exactly the same as $p_dir
+ // --------------------------------------------------------------------------------
+ function PclZipUtilPathInclusion($p_dir, $p_path)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZipUtilPathInclusion", "dir='$p_dir', path='$p_path'");
+ $v_result = 1;
+
+ // ----- Look for path beginning by ./
+ if ( ($p_dir == '.')
+ || ((strlen($p_dir) >=2) && (substr($p_dir, 0, 2) == './'))) {
+ $p_dir = PclZipUtilTranslateWinPath(getcwd(), FALSE).'/'.substr($p_dir, 1);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Replacing ./ by full path in p_dir '".$p_dir."'");
+ }
+ if ( ($p_path == '.')
+ || ((strlen($p_path) >=2) && (substr($p_path, 0, 2) == './'))) {
+ $p_path = PclZipUtilTranslateWinPath(getcwd(), FALSE).'/'.substr($p_path, 1);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Replacing ./ by full path in p_path '".$p_path."'");
+ }
+
+ // ----- Explode dir and path by directory separator
+ $v_list_dir = explode("/", $p_dir);
+ $v_list_dir_size = sizeof($v_list_dir);
+ $v_list_path = explode("/", $p_path);
+ $v_list_path_size = sizeof($v_list_path);
+
+ // ----- Study directories paths
+ $i = 0;
+ $j = 0;
+ while (($i < $v_list_dir_size) && ($j < $v_list_path_size) && ($v_result)) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Working on dir($i)='".$v_list_dir[$i]."' and path($j)='".$v_list_path[$j]."'");
+
+ // ----- Look for empty dir (path reduction)
+ if ($v_list_dir[$i] == '') {
+ $i++;
+ continue;
+ }
+ if ($v_list_path[$j] == '') {
+ $j++;
+ continue;
+ }
+
+ // ----- Compare the items
+ if (($v_list_dir[$i] != $v_list_path[$j]) && ($v_list_dir[$i] != '') && ( $v_list_path[$j] != '')) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Items ($i,$j) are different");
+ $v_result = 0;
+ }
+
+ // ----- Next items
+ $i++;
+ $j++;
+ }
+
+ // ----- Look if everything seems to be the same
+ if ($v_result) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Look for tie break");
+ // ----- Skip all the empty items
+ while (($j < $v_list_path_size) && ($v_list_path[$j] == '')) $j++;
+ while (($i < $v_list_dir_size) && ($v_list_dir[$i] == '')) $i++;
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Looking on dir($i)='".($i < $v_list_dir_size?$v_list_dir[$i]:'')."' and path($j)='".($j < $v_list_path_size?$v_list_path[$j]:'')."'");
+
+ if (($i >= $v_list_dir_size) && ($j >= $v_list_path_size)) {
+ // ----- There are exactly the same
+ $v_result = 2;
+ }
+ else if ($i < $v_list_dir_size) {
+ // ----- The path is shorter than the dir
+ $v_result = 0;
+ }
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : PclZipUtilCopyBlock()
+ // Description :
+ // Parameters :
+ // $p_mode : read/write compression mode
+ // 0 : src & dest normal
+ // 1 : src gzip, dest normal
+ // 2 : src normal, dest gzip
+ // 3 : src & dest gzip
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function PclZipUtilCopyBlock($p_src, $p_dest, $p_size, $p_mode=0)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZipUtilCopyBlock", "size=$p_size, mode=$p_mode");
+ $v_result = 1;
+
+ if ($p_mode==0)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Src offset before read :".(@ftell($p_src)));
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Dest offset before write :".(@ftell($p_dest)));
+ while ($p_size != 0)
+ {
+ $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Read $v_read_size bytes");
+ $v_buffer = @fread($p_src, $v_read_size);
+ @fwrite($p_dest, $v_buffer, $v_read_size);
+ $p_size -= $v_read_size;
+ }
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Src offset after read :".(@ftell($p_src)));
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Dest offset after write :".(@ftell($p_dest)));
+ }
+ else if ($p_mode==1)
+ {
+ while ($p_size != 0)
+ {
+ $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Read $v_read_size bytes");
+ $v_buffer = @gzread($p_src, $v_read_size);
+ @fwrite($p_dest, $v_buffer, $v_read_size);
+ $p_size -= $v_read_size;
+ }
+ }
+ else if ($p_mode==2)
+ {
+ while ($p_size != 0)
+ {
+ $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Read $v_read_size bytes");
+ $v_buffer = @fread($p_src, $v_read_size);
+ @gzwrite($p_dest, $v_buffer, $v_read_size);
+ $p_size -= $v_read_size;
+ }
+ }
+ else if ($p_mode==3)
+ {
+ while ($p_size != 0)
+ {
+ $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Read $v_read_size bytes");
+ $v_buffer = @gzread($p_src, $v_read_size);
+ @gzwrite($p_dest, $v_buffer, $v_read_size);
+ $p_size -= $v_read_size;
+ }
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : PclZipUtilRename()
+ // Description :
+ // This function tries to do a simple rename() function. If it fails, it
+ // tries to copy the $p_src file in a new $p_dest file and then unlink the
+ // first one.
+ // Parameters :
+ // $p_src : Old filename
+ // $p_dest : New filename
+ // Return Values :
+ // 1 on success, 0 on failure.
+ // --------------------------------------------------------------------------------
+ function PclZipUtilRename($p_src, $p_dest)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZipUtilRename", "source=$p_src, destination=$p_dest");
+ $v_result = 1;
+
+ // ----- Try to rename the files
+ if (!@rename($p_src, $p_dest)) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Fail to rename file, try copy+unlink");
+
+ // ----- Try to copy & unlink the src
+ if (!@copy($p_src, $p_dest)) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Fail to copy file");
+ $v_result = 0;
+ }
+ else if (!@unlink($p_src)) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Fail to unlink old filename");
+ $v_result = 0;
+ }
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : PclZipUtilOptionText()
+ // Description :
+ // Translate option value in text. Mainly for debug purpose.
+ // Parameters :
+ // $p_option : the option value.
+ // Return Values :
+ // The option text value.
+ // --------------------------------------------------------------------------------
+ function PclZipUtilOptionText($p_option)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZipUtilOptionText", "option='".$p_option."'");
+
+ $v_list = get_defined_constants();
+ for (reset($v_list); $v_key = key($v_list); next($v_list)) {
+ $v_prefix = substr($v_key, 0, 10);
+ if (( ($v_prefix == 'PCLZIP_OPT')
+ || ($v_prefix == 'PCLZIP_CB_')
+ || ($v_prefix == 'PCLZIP_ATT'))
+ && ($v_list[$v_key] == $p_option)) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_key);
+ return $v_key;
+ }
+ }
+
+ $v_result = 'Unknown';
+
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : PclZipUtilTranslateWinPath()
+ // Description :
+ // Translate windows path by replacing '\' by '/' and optionally removing
+ // drive letter.
+ // Parameters :
+ // $p_path : path to translate.
+ // $p_remove_disk_letter : true | false
+ // Return Values :
+ // The path translated.
+ // --------------------------------------------------------------------------------
+ function PclZipUtilTranslateWinPath($p_path, $p_remove_disk_letter=true)
+ {
+ if (stristr(php_uname(), 'windows')) {
+ // ----- Look for potential disk letter
+ if (($p_remove_disk_letter) && (($v_position = strpos($p_path, ':')) != false)) {
+ $p_path = substr($p_path, $v_position+1);
+ }
+ // ----- Change potential windows directory separator
+ if ((strpos($p_path, '\\') > 0) || (substr($p_path, 0,1) == '\\')) {
+ $p_path = strtr($p_path, '\\', '/');
+ }
+ }
+ return $p_path;
+ }
+ // --------------------------------------------------------------------------------
+
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/inc/repo.class.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/inc/repo.class.php
new file mode 100644
index 000000000..04dc75675
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/inc/repo.class.php
@@ -0,0 +1,51 @@
+<?php
+class repo_indexmenu_plugin {
+ /**
+ * Send a zipped theme
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+
+ function send_theme ($file) {
+ require_once(DOKU_PLUGIN.'indexmenu/syntax/indexmenu.php');
+ $idxm=new syntax_plugin_indexmenu_indexmenu();
+ //clean the file name
+ $file=cleanID($file);
+ //check config
+ if(!$idxm->getConf('be_repo') || empty($file)) return false;
+ $repodir=INDEXMENU_IMG_ABSDIR."/repository";
+ $zipfile=$repodir."/$file.zip";
+ $localtheme=INDEXMENU_IMG_ABSDIR."/$file/";
+ //theme does not exists
+ if (!file_exists($localtheme)) return false;
+ if (!io_mkdir_p($repodir)) return false;
+ $lm=@filemtime($zipfile);
+ //no cached zip or older than 1 day
+ if ($lm < time()-(60*60*24)) {
+ //create the zip
+ require_once(DOKU_PLUGIN."indexmenu/inc/pclzip.lib.php");
+ @unlink($zipfile);
+ $zip=new PclZip($zipfile);
+ $status=$zip->add($localtheme,PCLZIP_OPT_REMOVE_ALL_PATH);
+ //error
+ if ($status == 0) return false;
+ }
+ $len = (int) filesize($zipfile);
+ //don't send large zips
+ if ($len > 2*1024*1024) return false;
+ //headers
+ header('Cache-Control: must-revalidate, no-transform, post-check=0, pre-check=0');
+ header('Pragma: public');
+ header('Content-Type: application/zip');
+ header('Content-Disposition: attachment; filename="'.basename($zipfile).'";');
+ header("Content-Transfer-Encoding: binary");
+ //send zip
+ $fp=@fopen($zipfile, 'rb');
+ if ($fp) {
+ $ct=@fread($fp, $len);
+ print $ct;
+ }
+ @fclose($fp);
+ return true;
+ }
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/indexmenu-full.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/indexmenu-full.js
new file mode 100644
index 000000000..7c60ceffe
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/indexmenu-full.js
@@ -0,0 +1,640 @@
+/*----------------------------------------------------|
+ | dTree 2.05 | www.destroydrop.com/javascript/tree/ |
+ |---------------------------------------------------|
+ | Copyright (c) 2002-2003 Geir Landro |
+ | |
+ | This script can be used freely as long as all |
+ | copyright messages are intact. |
+ | |
+ | Updated: 17.04.2003 |
+ |---------------------------------------------------|
+ | Modified for Dokuwiki by |
+ | Samuele Tognini <samuele@netsons.org> |
+ | under GPL 2 license |
+ | (http://www.gnu.org/licenses/gpl.html) |
+ | Updated: 29.08.2009 |
+ |---------------------------------------------------|
+ | indexmenu | wiki.splitbrain.org/plugin:indexmenu |
+ |--------------------------------------------------*/
+
+// Node object
+function Node(dokuid, id, pid, name, hns, isdir, ajax) {
+ this.dokuid = dokuid;
+ this.id = id;
+ this.pid = pid;
+ this.name = name;
+ this.hns = hns;
+ this.isdir = isdir;
+ this.ajax = ajax;
+ this._io = 0;
+ this._is = false;
+ this._ls = false;
+ this._hc = ajax;
+ this._ai = 0;
+ this._p = false;
+ this._lv = 0;
+ this._ok = false;
+ this._cp=false;
+}
+// Tree object
+function dTree(objName,theme) {
+ var objExt = indexmenu_findExt(theme);
+ this.config = {
+ urlbase:DOKU_BASE+'doku.php?id=',
+ plugbase:DOKU_BASE+'lib/plugins/indexmenu',
+ useCookies: true,
+ scroll:true,
+ toc:true,
+ maxjs:1,
+ jsajax:'',
+ sepchar:':',
+ theme:theme
+ };
+ var objImg=this.config.plugbase+'/images/'+theme+'/';
+ this.icon = {
+ root: objImg + 'base.'+objExt,
+ folder: objImg + 'folder.'+objExt,
+ folderH: objImg + 'folderh.'+objExt,
+ folderOpen: objImg + 'folderopen.'+objExt,
+ folderHOpen: objImg + 'folderhopen.'+objExt,
+ node: objImg + 'page.'+objExt,
+ empty: objImg + 'empty.'+objExt,
+ line: objImg + 'line.'+objExt,
+ join: objImg + 'join.'+objExt,
+ joinBottom: objImg + 'joinbottom.'+objExt,
+ plus: objImg + 'plus.'+objExt,
+ plusBottom: objImg + 'plusbottom.'+objExt,
+ minus: objImg + 'minus.'+objExt,
+ minusBottom: objImg + 'minusbottom.'+objExt,
+ nlPlus: objImg + 'nolines_plus.'+objExt,
+ nlMinus: objImg + 'nolines_minus.'+objExt
+ };
+ this.obj = objName;
+ this.aNodes = [];
+ this.aIndent = [];
+ this.root = new Node(false,-1);
+ this.selectedNode = null;
+ this.selectedFound = false;
+ this.completed = false;
+ this.scrllTmr=0;
+ this.pageid=window.indexmenu_ID||'';
+ this.fajax=false;
+}
+
+// Adds a new node to the node array
+dTree.prototype.add = function(dokuid, id, pid, name, hns, isdir, ajax) {
+ this.aNodes[this.aNodes.length] = new Node(dokuid, id, pid, name, hns, isdir, ajax);
+};
+
+// Open/close all nodes
+dTree.prototype.openAll = function() {
+ if (!this.getCookie('co' + this.obj)) {
+ this.oAll(true);
+ }
+};
+
+// Outputs the tree to the page
+dTree.prototype.toString = function() {
+ var str='';
+ if (this.config.scroll) {str += '<div id="cdtree_'+this.obj+'" class="dtree" style="position:relative;overflow:hidden;width:100%;">';}
+ str += '<div id="dtree_'+this.obj+'" class="dtree '+this.config.theme+'" style="overflow:';
+ if (this.config.scroll) { str += 'visible;position:relative;width:100%"';} else {str += 'hidden;"';}
+ str += '>';
+ if (DOKUid('dtree_'+this.obj)) {str += '<div class="error">Indexmenu id conflict</div>';}
+ if (this.config.toc) {
+ str += '<div id="t' + this.obj + '" class="indexmenu_tocbullet '+this.config.theme+'" style="display:none;" title="Table of contents"></div>';
+ str += '<div id="toc_' + this.obj + '" style="display:none;"></div>';
+ }
+ if (this.config.useCookies) { this.selectedNode = this.getSelected(); }
+ str += this.addNode(this.root)+'</div>';
+ if (this.config.scroll) {
+ str += '<div id="z' + this.obj + '" class="indexmenu_rarrow"></div>';
+ str += '<div id="left_'+this.obj+'" class="indexmenu_larrow" style="display:none;" title="Click to scroll back" onmousedown="javascript:'+this.obj+'.scroll(\'r\',1);" onmouseup="javascript:'+this.obj+'.stopscroll();"></div>';
+ str += '</div>';
+ }
+ this.completed = true;
+ this.divdisplay('nojs_',0);
+ return str;
+};
+
+// Creates the tree structure
+dTree.prototype.addNode = function(pNode) {
+ var str = '',cn,n=pNode._ai,l=pNode._lv+1;
+ for (n; n<this.aNodes.length; n++) {
+ if (this.aNodes[n].pid == pNode.id) {
+ cn = this.aNodes[n];
+ cn._p = pNode;
+ cn._ai = n;
+ cn._lv=l;
+ this.setCS(cn);
+ if (cn._hc && !cn._io && this.config.useCookies) {cn._io = this.isOpen(cn.id);}
+ if (this.pageid == (!cn.hns && cn.dokuid || cn.hns)) {
+ cn._cp=true;
+ } else if (cn.id == this.selectedNode && !this.selectedFound) {
+ cn._is = true;
+ this.selectedNode = n;
+ this.selectedFound = true;
+ }
+ if (!cn._hc && cn.isdir && !cn.ajax && !cn.hns) {
+ if (cn._ls) {str += this.noderr(cn, n);}
+ } else {
+ str += this.node(cn, n);
+ }
+ if (cn._ls) {break;}
+ }
+ }
+ return str;
+};
+
+dTree.prototype.noderr = function(node, nodeId) {
+ var str = '<div class="dTreeNode">' + this.indent(node, nodeId);
+ str += '<div class="emptynode" title="Empty"></div></div>';
+ return str;
+};
+
+// Creates the node icon, url and text
+dTree.prototype.node = function(node, nodeId) {
+ var h=1,jsfnc,str;
+ jsfnc='onmouseover="'+this.obj+'.show_feat(\''+nodeId+'\');" onmousedown="return indexmenu_checkcontextm(\''+nodeId+'\','+this.obj+',event);" oncontextmenu="return indexmenu_stopevt(event)"';
+ if (node._lv > this.config.maxjs) {h=0;} else {node._ok=true;}
+ str = '<div class="dTreeNode">' + this.indent(node, nodeId);
+ node.icon = (this.root.id == node.pid) ? this.icon.root : ((node.hns) ? this.icon.folderH : ((node._hc) ? this.icon.folder : this.icon.node));
+ node.iconOpen = (node._hc) ? ((node.hns) ? this.icon.folderHOpen : this.icon.folderOpen) : this.icon.node;
+ if (this.root.id == node.pid) {
+ node.icon = this.icon.root;
+ node.iconOpen = this.icon.root;
+ }
+ str += '<img id="i' + this.obj + nodeId + '" src="' + ((node._io) ? node.iconOpen : node.icon) + '" alt="" />';
+ if (!node._hc || node.hns) {
+ str += '<a id="s' + this.obj + nodeId + '" class="' + ((node._cp) ? 'navSel' : ((node._is) ? 'nodeSel' : (node._hc) ? 'nodeFdUrl' : 'nodeUrl')) ;
+ str += '" href="' + this.config.urlbase;
+ (node.hns) ? str +=node.hns : str += node.dokuid;
+ str += '"' + ' title="' + node.name + '"' +jsfnc;
+ str += ' onclick="javascript: ' + this.obj + '.s(' + nodeId + ');"';
+ str += '>'+node.name+'</a>';
+ }
+ else if (node.pid != this.root.id) {
+ str += '<a id="s' + this.obj + nodeId + '" href="javascript: ' + this.obj + '.o(' + nodeId + '); " class="node"' + jsfnc + '>'+node.name+'</a>';
+ } else {
+ str += node.name;
+ }
+ str += '</div>';
+ if (node._hc) {
+ str += '<div id="d' + this.obj + nodeId + '" class="clip" style="display:' + ((this.root.id == node.pid || node._io) ? 'block' : 'none') + ';">';
+ if (h) {str += this.addNode(node);}
+ str += '</div>';
+ }
+ this.aIndent.pop();
+ return str;
+};
+
+// Adds the empty and line icons
+dTree.prototype.indent = function(node, nodeId) {
+ var n,str = '';
+ if (this.root.id != node.pid) {
+ for (n=0; n<this.aIndent.length; n++) {
+ str += '<img src="' + ( (this.aIndent[n] == 1) ? this.icon.line : this.icon.empty ) + '" alt="" />';
+ }
+ if (node._ls) {
+ this.aIndent.push(0);
+ } else {
+ this.aIndent.push(1);
+ }
+ if (node._hc) {
+ str += '<a href="javascript: ' + this.obj + '.o(' + nodeId+');"><img id="j' + this.obj + nodeId + '" src="';
+ str += ( (node._io) ? ((node._ls) ? this.icon.minusBottom : this.icon.minus) : ((node._ls) ? this.icon.plusBottom : this.icon.plus ) );
+ str += '" alt="" /></a>';
+ } else {str += '<img src="' + ((node._ls) ? this.icon.joinBottom : this.icon.join) + '" alt="" />';}
+ }
+ return str;
+};
+
+// Checks if a node has any children and if it is the last sibling
+dTree.prototype.setCS = function(node) {
+ var lastId,n;
+ for (n=0; n<this.aNodes.length; n++) {
+ if (this.aNodes[n].pid == node.id) {node._hc = true;}
+ if (this.aNodes[n].pid == node.pid) {lastId = this.aNodes[n].id;}
+ }
+ if (lastId==node.id) {node._ls = true;}
+};
+
+// Returns the selected node
+dTree.prototype.getSelected = function() {
+ var sn = this.getCookie('cs' + this.obj);
+ return (sn) ? sn : null;
+};
+
+// Highlights the selected node
+dTree.prototype.s = function(id) {
+ var eOld,eNew,cn = this.aNodes[id];
+ if (this.selectedNode != id) {
+ eNew = DOKUid("s" + this.obj + id);
+ if (!eNew ) {return;}
+ if (this.selectedNode || this.selectedNode===0) {
+ eOld = DOKUid("s" + this.obj + this.selectedNode);
+ eOld.className = "node";
+ }
+ eNew.className = "nodeSel";
+ this.selectedNode = id;
+ if (this.config.useCookies) {this.setCookie('cs' + this.obj, cn.id);}
+ }
+};
+
+// Toggle Open or close
+dTree.prototype.o = function(id) {
+ var cn = this.aNodes[id];
+ this.nodeStatus(!cn._io, id, cn._ls);
+ cn._io = !cn._io;
+ if (this.config.useCookies) {this.updateCookie();}
+ this.divdisplay('z',0);
+ this.resizescroll("block");
+};
+
+// Open or close all nodes
+dTree.prototype.oAll = function(status) {
+ for (var n=0; n<this.aNodes.length; n++) {
+ if (this.aNodes[n]._hc && this.aNodes[n].pid != this.root.id) {
+ this.nodeStatus(status, n, this.aNodes[n]._ls);
+ this.aNodes[n]._io = status;
+ }
+ }
+ if (this.config.useCookies) {this.updateCookie();}
+};
+
+// Opens the tree to a specific node
+dTree.prototype.openTo = function(nId, bSelect, bFirst) {
+ var n,cn;
+ if (!bFirst) {
+ for (n=0; n<this.aNodes.length; n++) {
+ if (this.aNodes[n].id == nId) {
+ nId=n;
+ break;
+ }
+ }
+ }
+ this.fill(this.aNodes[nId].pid);
+ cn=this.aNodes[nId];
+ if (cn.pid==this.root.id || !cn._p) {return;}
+ cn._io = 1;
+ if (this.completed && cn._hc) {this.nodeStatus(true, cn._ai, cn._ls);}
+ if (cn._is) {
+ (this.completed) ? this.s(cn._ai) : this._sn=cn._ai;
+ }
+ this.openTo(cn._p._ai, false, true);
+};
+
+dTree.prototype.getOpenTo = function(nodes) {
+ if (nodes === '') {
+ this.openAll();
+ } else if (!this.config.useCookies ||!this.getCookie('co' + this.obj)) {
+ for (var n=0; n<nodes.length; n++) {
+ this.openTo(nodes[n],false,true);
+ }
+ }
+};
+
+// Change the status of a node(open or closed)
+dTree.prototype.nodeStatus = function(status, id, bottom) {
+ if (status && !this.fill(id)) {return;}
+ var eJoin,eIcon;
+ eJoin= DOKUid('j' + this.obj + id);
+ eIcon= DOKUid('i' + this.obj + id);
+ eIcon.src = (status) ? this.aNodes[id].iconOpen : this.aNodes[id].icon;
+ eJoin.src = ((status)?((bottom)?this.icon.minusBottom:this.icon.minus):((bottom)?this.icon.plusBottom:this.icon.plus));
+ DOKUid('d' + this.obj + id).style.display = (status) ? 'block': 'none';
+};
+
+// [Cookie] Clears a cookie
+dTree.prototype.clearCookie = function() {
+ var now,yday;
+ now = new Date();
+ yday = new Date(now.getTime() - 1000 * 60 * 60 * 24);
+ this.setCookie('co'+this.obj, 'cookieValue', yday);
+ this.setCookie('cs'+this.obj, 'cookieValue', yday);
+};
+
+// [Cookie] Sets value in a cookie
+dTree.prototype.setCookie = function(cookieName, cookieValue, expires, path, domain, secure) {
+ document.cookie =
+ escape(cookieName) + '=' + escape(cookieValue) +
+ (expires ? '; expires=' + expires.toGMTString() : '') +
+ ';path=/' +
+ (domain ? '; domain=' + domain : '') +
+ (secure ? '; secure' : '');
+};
+
+// [Cookie] Gets a value from a cookie
+dTree.prototype.getCookie = function(cookieName) {
+ var cookieValue = '',pN,posValue,endPos;
+ pN = document.cookie.indexOf(escape(cookieName) + '=');
+ if (pN != -1) {
+ posValue = pN + (escape(cookieName) + '=').length;
+ endPos = document.cookie.indexOf(';', posValue);
+ if (endPos != -1) {cookieValue = unescape(document.cookie.substring(posValue, endPos));}
+ else {cookieValue = unescape(document.cookie.substring(posValue));}
+ }
+ return (cookieValue);
+};
+
+// [Cookie] Returns ids of open nodes as a string
+dTree.prototype.updateCookie = function() {
+ var str = '',n;
+ for (n=0; n<this.aNodes.length; n++) {
+ if (this.aNodes[n]._io && this.aNodes[n].pid != this.root.id) {
+ if (str) {str += '.';}
+ str += this.aNodes[n].id;
+ }
+ }
+ this.setCookie('co' + this.obj, str);
+};
+
+// [Cookie] Checks if a node id is in a cookie
+dTree.prototype.isOpen = function(id) {
+ var n,aOpen = this.getCookie('co' + this.obj).split('.');
+ for (n=0; n<aOpen.length; n++){
+ if (aOpen[n] == id) {return true;}
+ }
+ return false;
+};
+
+dTree.prototype.openCurNS = function (max){
+ var r,cn,match,t,i,n,cnsa,cna,cns=this.pageid;
+ r=new RegExp ("\\b"+this.config.sepchar+"\\b","g");
+ match=cns.match(r)||-1;
+ if (max>0 && match.length >= max) {
+ t = cns.split(this.config.sepchar);
+ n = (this.aNodes[0].dokuid == '') ? 0 :this.aNodes[0].dokuid.split(this.config.sepchar).length;
+ t.splice(max + n,t.length);
+ cnsa=t.join(this.config.sepchar);
+ }
+ for (i=0; i<this.aNodes.length; i++){
+ cn=this.aNodes[i];
+ if (cns == cn.dokuid || cns == cn.hns) {
+ this.openTo(cn.id,false,true);
+ this.fajax=false;
+ if (cn.pid >= 0) {
+ addInitEvent(this.scroll("l",4,cn.pid,1));
+ }
+ break;
+ }
+ if (cnsa == cn.dokuid || cnsa == cn.hns) {
+ cna=cn;
+ this.fajax=true;
+ }
+ }
+ if (cna) {this.openTo(cna.id,false,true);}
+};
+
+dTree.prototype.fill = function(id) {
+ if (id == -1 || this.aNodes[id]._ok ) {return true;}
+ var n=id,eLoad,node,a,rd,ln,eDiv;
+ if (this.aNodes[n].ajax) {
+ eLoad=DOKUid('l' + this.obj);
+ node=DOKUid('s'+this.obj+n);
+ if (!eLoad) {eLoad=indexmenu_createPicker('l' + this.obj);}
+ eLoad.innerHTML='Loading ...';
+ DOKUid('s'+this.obj+n).parentNode.appendChild(eLoad);
+ eLoad.style.width='auto';
+ eLoad.style.display='inline';
+ this.getAjax(n);
+ return true;
+ }
+ rd = [];
+ while (!this.aNodes[n]._ok) {
+ rd[rd.length]=n;
+ n=this.aNodes[n].pid;
+ }
+ for (ln=rd.length-1; ln>=0; ln--) {
+ id=rd[ln];
+ a=this.aNodes[id];
+ eDiv=DOKUid('d' + this.obj + id);
+ if (!eDiv) {return false;}
+ this.aIndent = [];
+ n=a;
+ while (n.pid>=0) {
+ if (n._ls) {
+ this.aIndent.unshift(0);
+ } else {
+ this.aIndent.unshift(1);
+ }
+ n=n._p;
+ }
+ eDiv.innerHTML=this.addNode(a);
+ a._ok=true;
+ }
+ return true;
+};
+
+dTree.prototype.openCookies = function() {
+ var n,cn,aOpen = this.getCookie('co' + this.obj).split('.');
+ for (n=0; n<aOpen.length; n++){
+ if (aOpen[n] === "") {break;}
+ cn = this.aNodes[aOpen[n]];
+ if (!cn._ok) {this.nodeStatus(true, aOpen[n], cn._ls);cn._io = 1;}
+ }
+};
+
+dTree.prototype.scroll = function (where,s,n,i){
+ if (!this.config.scroll) {return false;}
+ var w,dtree,dtreel,nodeId;
+ dtree=DOKUid('dtree_'+this.obj);
+ dtreel=parseInt(dtree.offsetLeft,0);
+ if (where=="r") {
+ DOKUid('left_'+this.obj).style.border="thin inset";
+ this.scrollRight(dtreel,s);
+ } else {
+ nodeId=DOKUid('s'+this.obj+n);
+ w = parseInt(dtree.parentNode.offsetWidth - nodeId.offsetWidth - nodeId.offsetLeft,0);
+ if (this.config.toc) {w=w-11;}
+ if (dtreel <= w) {return;}
+ this.resizescroll("none");
+ this.stopscroll();
+ this.scrollLeft(dtreel,s,w-3,i);
+ }
+};
+
+dTree.prototype.scrollLeft = function (lft,s,w,i){
+ if(lft < w - i -10) {
+ this.divdisplay('z',0);
+ this.scrllTmr=0;
+ return;
+ }
+ var self=this;
+ DOKUid('dtree_'+self.obj).style.left = lft + "px";
+ this.scrllTmr=setTimeout(function (){self.scrollLeft(lft - s,s+i,w,i);},20);
+};
+
+//Scroll Back
+dTree.prototype.scrollRight = function (lft,s){
+ if(lft >= s) {
+ this.divdisplay('left_',0);
+ this.stopscroll();
+ return;
+ }
+ var self=this;
+ DOKUid('dtree_'+self.obj).style.left = lft + "px";
+ if (lft>-15) {s=1;}
+ this.scrllTmr=setTimeout(function (){self.scrollRight(lft+s,s+1);},20);
+};
+
+dTree.prototype.stopscroll = function (){
+ DOKUid('left_'+this.obj).style.border="none";
+ clearTimeout(this.scrllTmr);
+ this.scrllTmr=0;
+};
+
+dTree.prototype.show_feat = function (n){
+ var w,div,id,dtree,dtreel,self,node=DOKUid('s'+this.obj+n);
+ self=this;
+ if (this.config.toc && node.className != "node") {
+ div=DOKUid('t'+this.obj);
+ id =(this.aNodes[n].hns) ? this.aNodes[n].hns : this.aNodes[n].dokuid;
+ div.onmousedown=function (){indexmenu_createTocMenu('req=toc&id='+decodeURIComponent(id),'picker_'+self.obj,'t'+self.obj);};
+ node.parentNode.appendChild(div);
+ if (div.style.display=="none") {div.style.display="inline";}
+ }
+ if (this.config.scroll) {
+ div=DOKUid('z'+this.obj);
+ div.onmouseover=function(){div.style.border="none";self.scroll("l",1,n,0);};
+ div.onmousedown=function(){div.style.border="thin inset";self.scroll("l",4,n,1);};
+ div.onmouseout=function(){div.style.border="none";self.stopscroll();};
+ div.onmouseup=div.onmouseover;
+ dtree=DOKUid('dtree_'+this.obj);
+ dtreel=parseInt(dtree.offsetLeft,0);
+ w = parseInt(dtree.parentNode.offsetWidth - node.offsetWidth - node.offsetLeft + 1,0);
+ if (dtreel > w) {
+ div.style.display="none";
+ div.style.top = node.offsetTop+"px";
+ div.style.left = parseInt(node.offsetLeft + node.offsetWidth + w - 12,0)+"px";
+ div.style.display="block";
+ }
+ }
+};
+
+dTree.prototype.resizescroll = function (status){
+ var dtree,w,h,left=DOKUid('left_'+this.obj);
+ if (!left) {return;}
+ if (left.style.display==status) {
+ dtree=DOKUid('dtree_'+this.obj);
+ w=parseInt(dtree.offsetHeight/3,0);
+ h= parseInt(w/50,0)*50;
+ if (h < 50) {h=50;}
+ left.style.height=h+"px";
+ left.style.top = w+"px";
+ if (status=="none") {left.style.display="block";}
+ }
+};
+
+// Toggle Open or close
+dTree.prototype.getAjax = function(n) {
+ var node,req,curns,selft=this;
+ node=selft.aNodes[n];
+ // We use SACK to do the AJAX requests
+ var Ajax = new sack(DOKU_BASE+'lib/plugins/indexmenu/ajax.php');
+ req='req=index&idx='+node.dokuid+decodeURIComponent(this.config.jsajax);
+ curns=this.pageid.substring(0,this.pageid.lastIndexOf(this.config.sepchar));
+ Ajax.encodeURIString=false;
+ Ajax.onCompletion = function(){
+ var i,ajxnodes,ajxnode,plus;
+ plus=selft.aNodes.length -1;
+ eval(this.response);
+ if (!isArray(ajxnodes) || ajxnodes.length < 1) {
+ ajxnodes=[['', 1, 0, '', 0, 1, 0]];
+ }
+ node.ajax=false;
+ for(i=0;i<ajxnodes.length;i++){
+ ajxnode=ajxnodes[i];
+ ajxnode[2]=(ajxnode[2]==0) ? node.id : ajxnode[2] + plus;
+ ajxnode[1] += plus;
+ selft.add(ajxnode[0],ajxnode[1],ajxnode[2],ajxnode[3],ajxnode[4],ajxnode[5],ajxnode[6]);
+ }
+ if (selft.fajax) {
+ selft.fajax=false;
+ selft.openCurNS(0);
+ } else {
+ selft.openTo(node.id,false,true);
+ }
+ DOKUid('l'+selft.obj).style.display='none';
+ };
+ if (this.fajax) {
+ req +='&nss='+curns+'&max=1';
+ }
+ Ajax.encodeURIString = false;
+ Ajax.runAJAX(encodeURI(req));
+};
+
+//Load custom css
+dTree.prototype.loadCss = function() {
+ var oLink = document.createElement("link");
+ oLink.href = this.config.plugbase+'/images/'+this.config.theme+'/style.css';
+ oLink.rel = "stylesheet";
+ oLink.type = "text/css";
+ document.getElementsByTagName('head')[0].appendChild(oLink);
+};
+
+//Right click
+dTree.prototype.contextmenu = function(n,e) {
+ var li,id,html,type,node,self,cmenu,cdtree,rmenu,X=0,Y=0,i;
+ cdtree= DOKUid("cdtree_" + this.obj);
+ rmenu=DOKUid('r' + this.obj);
+ if(!rmenu) { return true; }
+ indexmenu_mouseposition(rmenu,e);
+ cmenu=window.indexmenu_contextmenu[0];
+ node =this.aNodes[n];
+ self=this;
+ rmenu.innerHTML='<div class="indexmenu_rmenuhead" title="'+node.name+'">'+node.name+"</div>";
+ for (i=0; i<cmenu.length; i++,i++,i++,i++) {
+ if (((!node._hc || node.hns) && !cmenu[i+2])||(node._hc && !node.hns && !cmenu[i+3])) {continue;}
+ html=cmenu[i];
+ if (cmenu[i+1]) {
+ type='li';
+ id =(node.hns) ? node.hns : node.dokuid;
+ html='<a title="'+cmenu[i]+'" href="'+eval(cmenu[i+1])+'">'+html+'</a>';
+ } else {
+ type='span';
+ rmenu.appendChild(document.createElement('ul'));
+ }
+ li=document.createElement(type);
+ li.innerHTML=html;
+ rmenu.lastChild.appendChild(li);
+ }
+ rmenu.style.display='inline';
+ return false;
+};
+
+dTree.prototype.divdisplay = function(obj,v) {
+ var o=DOKUid(obj+this.obj);
+ if (!o) {return false;}
+ (v) ? o.style.display='inline': o.style.display='none' ;
+};
+
+dTree.prototype.init = function(s,c,n,nav,max) {
+ if (s) {this.loadCss();}
+ if (!c) {this.openCookies();}
+ if (n) {this.getOpenTo(n.split(" "));}
+ if (nav) {this.openCurNS(max);}
+ if (window.indexmenu_contextmenu) {
+ var self = this;
+ indexmenu_createPicker('r'+ this.obj,'indexmenu_rmenu '+this.config.theme);
+ DOKUid('r'+ this.obj).oncontextmenu=indexmenu_stopevt;
+ addEvent(document, 'click', function() {self.divdisplay('r',0);});
+ }
+};
+
+// If Push and pop is not implemented by the browser
+if (!Array.prototype.push) {
+ Array.prototype.push = function array_push() {
+ for(var i=0;i<arguments.length;i++){
+ this[this.length]=arguments[i];
+ }
+ return this.length;
+ };
+}
+if (!Array.prototype.pop) {
+ Array.prototype.pop = function array_pop() {
+ var lstEl = this[this.length-1];
+ this.length = Math.max(this.length-1,0);
+ return lstEl;
+ };
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/indexmenu.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/indexmenu.js
new file mode 100644
index 000000000..ce5937c3d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/indexmenu.js
@@ -0,0 +1,18 @@
+/*----------------------------------------------------|
+ | dTree 2.05 | www.destroydrop.com/javascript/tree/ |
+ |---------------------------------------------------|
+ | Copyright (c) 2002-2003 Geir Landro |
+ | |
+ | This script can be used freely as long as all |
+ | copyright messages are intact. |
+ | |
+ | Updated: 17.04.2003 |
+ |---------------------------------------------------|
+ | Modified for Dokuwiki by |
+ | Samuele Tognini <samuele@netsons.org> |
+ | under GPL 2 license |
+ | (http://www.gnu.org/licenses/gpl.html) |
+ | Updated: 29.08.2009 |
+ |---------------------------------------------------|
+ | indexmenu | wiki.splitbrain.org/plugin:indexmenu |
+ |--------------------------------------------------*/ function Node(g,f,e,d,c,b,a){this.dokuid=g;this.id=f;this.pid=e;this.name=d;this.hns=c;this.isdir=b;this.ajax=a;this._io=0;this._is=false;this._ls=false;this._hc=a;this._ai=0;this._p=false;this._lv=0;this._ok=false;this._cp=false;}function dTree(d,c){var b=indexmenu_findExt(c);this.config={urlbase:DOKU_BASE+"doku.php?id=",plugbase:DOKU_MEDIA+"lib/plugins/indexmenu",useCookies:true,scroll:true,toc:true,maxjs:1,jsajax:"",sepchar:":",theme:c};var a=this.config.plugbase+"/images/"+c+"/";this.icon={root:a+"base."+b,folder:a+"folder."+b,folderH:a+"folderh."+b,folderOpen:a+"folderopen."+b,folderHOpen:a+"folderhopen."+b,node:a+"page."+b,empty:a+"empty."+b,line:a+"line."+b,join:a+"join."+b,joinBottom:a+"joinbottom."+b,plus:a+"plus."+b,plusBottom:a+"plusbottom."+b,minus:a+"minus."+b,minusBottom:a+"minusbottom."+b,nlPlus:a+"nolines_plus."+b,nlMinus:a+"nolines_minus."+b};this.obj=d;this.aNodes=[];this.aIndent=[];this.root=new Node(false,-1);this.selectedNode=null;this.selectedFound=false;this.completed=false;this.scrllTmr=0;this.pageid=window.indexmenu_ID||"";this.fajax=false;}dTree.prototype.add=(function(g,f,e,d,c,b,a){this.aNodes[this.aNodes.length]=new Node(g,f,e,d,c,b,a);});dTree.prototype.openAll=(function(){if(!this.getCookie("co"+this.obj)){this.oAll(true);}});dTree.prototype.toString=(function(){var str="";if(this.config.scroll){str+="<div id=\"cdtree_"+this.obj+"\" class=\"dtree\" style=\"position:relative;overflow:hidden;width:100%;\">";}str+="<div id=\"dtree_"+this.obj+"\" class=\"dtree "+this.config.theme+"\" style=\"overflow:";if(this.config.scroll){str+="visible;position:relative;width:100%\"";}else{str+="hidden;\"";}str+=">";if(DOKUid("dtree_"+this.obj)){str+="<div class=\"error\">Indexmenu id conflict</div>";}if(this.config.toc){str+="<div id=\"t"+this.obj+"\" class=\"indexmenu_tocbullet "+this.config.theme+"\" style=\"display:none;\" title=\"Table of contents\"></div>";str+="<div id=\"toc_"+this.obj+"\" style=\"display:none;\"></div>";}if(this.config.useCookies){this.selectedNode=this.getSelected();}str+=this.addNode(this.root)+"</div>";if(this.config.scroll){str+="<div id=\"z"+this.obj+"\" class=\"indexmenu_rarrow\"></div>";str+="<div id=\"left_"+this.obj+"\" class=\"indexmenu_larrow\" style=\"display:none;\" title=\"Click to scroll back\" onmousedown=\"javascript:"+this.obj+".scroll('r',1);\" onmouseup=\"javascript:"+this.obj+".stopscroll();\"></div>";str+="</div>";}this.completed=true;this.divdisplay("nojs_",0);return str;});dTree.prototype.addNode=(function(pNode){var str="",cn,n=pNode._ai,l=pNode._lv+1;for(n;n<this.aNodes.length;n++){if(this.aNodes[n].pid==pNode.id){cn=this.aNodes[n];cn._p=pNode;cn._ai=n;cn._lv=l;this.setCS(cn);if(cn._hc&&!cn._io&&this.config.useCookies){cn._io=this.isOpen(cn.id);}if(this.pageid==(!cn.hns&&cn.dokuid||cn.hns)){cn._cp=true;}else{if(cn.id==this.selectedNode&&!this.selectedFound){cn._is=true;this.selectedNode=n;this.selectedFound=true;}}if(!cn._hc&&cn.isdir&&!cn.ajax&&!cn.hns){if(cn._ls){str+=this.noderr(cn,n);}}else{str+=this.node(cn,n);}if(cn._ls){break;}}}return str;});dTree.prototype.noderr=(function(node,nodeId){var str="<div class=\"dTreeNode\">"+this.indent(node,nodeId);str+="<div class=\"emptynode\" title=\"Empty\"></div></div>";return str;});dTree.prototype.node=(function(node,nodeId){var h=1,jsfnc,str;jsfnc="onmouseover=\""+this.obj+".show_feat('"+nodeId+"');\" onmousedown=\"return indexmenu_checkcontextm('"+nodeId+"',"+this.obj+",event);\" oncontextmenu=\"return indexmenu_stopevt(event)\"";if(node._lv>this.config.maxjs){h=0;}else{node._ok=true;}str="<div class=\"dTreeNode\">"+this.indent(node,nodeId);node.icon=(this.root.id==node.pid)?this.icon.root:((node.hns)?this.icon.folderH:((node._hc)?this.icon.folder:this.icon.node));node.iconOpen=(node._hc)?((node.hns)?this.icon.folderHOpen:this.icon.folderOpen):this.icon.node;if(this.root.id==node.pid){node.icon=this.icon.root;node.iconOpen=this.icon.root;}str+="<img id=\"i"+this.obj+nodeId+"\" src=\""+((node._io)?node.iconOpen:node.icon)+"\" alt=\"\" />";if(!node._hc||node.hns){str+="<a id=\"s"+this.obj+nodeId+"\" class=\""+((node._cp)?"navSel":((node._is)?"nodeSel":(node._hc)?"nodeFdUrl":"nodeUrl"));str+="\" href=\""+this.config.urlbase;(node.hns)?str+=node.hns:str+=node.dokuid;str+="\" title=\""+node.name+"\""+jsfnc;str+=" onclick=\"javascript: "+this.obj+".s("+nodeId+");\"";str+=">"+node.name+"</a>";}else{if(node.pid!=this.root.id){str+="<a id=\"s"+this.obj+nodeId+"\" href=\"javascript: "+this.obj+".o("+nodeId+"); \" class=\"node\""+jsfnc+">"+node.name+"</a>";}else{str+=node.name;}}str+="</div>";if(node._hc){str+="<div id=\"d"+this.obj+nodeId+"\" class=\"clip\" style=\"display:"+((this.root.id==node.pid||node._io)?"block":"none")+";\">";if(h){str+=this.addNode(node);}str+="</div>";}this.aIndent.pop();return str;});dTree.prototype.indent=(function(node,nodeId){var n,str="";if(this.root.id!=node.pid){for(n=0;n<this.aIndent.length;n++){str+="<img src=\""+((this.aIndent[n]==1)?this.icon.line:this.icon.empty)+"\" alt=\"\" />";}if(node._ls){this.aIndent.push(0);}else{this.aIndent.push(1);}if(node._hc){str+="<a href=\"javascript: "+this.obj+".o("+nodeId+");\"><img id=\"j"+this.obj+nodeId+"\" src=\"";str+=((node._io)?((node._ls)?this.icon.minusBottom:this.icon.minus):((node._ls)?this.icon.plusBottom:this.icon.plus));str+="\" alt=\"\" /></a>";}else{str+="<img src=\""+((node._ls)?this.icon.joinBottom:this.icon.join)+"\" alt=\"\" />";}}return str;});dTree.prototype.setCS=(function(node){var lastId,n;for(n=0;n<this.aNodes.length;n++){if(this.aNodes[n].pid==node.id){node._hc=true;}if(this.aNodes[n].pid==node.pid){lastId=this.aNodes[n].id;}}if(lastId==node.id){node._ls=true;}});dTree.prototype.getSelected=(function(){var sn=this.getCookie("cs"+this.obj);return(sn)?sn:null;});dTree.prototype.s=(function(id){var eOld,eNew,cn=this.aNodes[id];if(this.selectedNode!=id){eNew=DOKUid("s"+this.obj+id);if(!eNew){return;}if(this.selectedNode||this.selectedNode===0){eOld=DOKUid("s"+this.obj+this.selectedNode);eOld.className="node";}eNew.className="nodeSel";this.selectedNode=id;if(this.config.useCookies){this.setCookie("cs"+this.obj,cn.id);}}});dTree.prototype.o=(function(id){var cn=this.aNodes[id];this.nodeStatus(!cn._io,id,cn._ls);cn._io=!cn._io;if(this.config.useCookies){this.updateCookie();}this.divdisplay("z",0);this.resizescroll("block");});dTree.prototype.oAll=(function(status){for(var n=0;n<this.aNodes.length;n++){if(this.aNodes[n]._hc&&this.aNodes[n].pid!=this.root.id){this.nodeStatus(status,n,this.aNodes[n]._ls);this.aNodes[n]._io=status;}}if(this.config.useCookies){this.updateCookie();}});dTree.prototype.openTo=(function(nId,bSelect,bFirst){var n,cn;if(!bFirst){for(n=0;n<this.aNodes.length;n++){if(this.aNodes[n].id==nId){nId=n;break;}}}this.fill(this.aNodes[nId].pid);cn=this.aNodes[nId];if(cn.pid==this.root.id||!cn._p){return;}cn._io=1;if(this.completed&&cn._hc){this.nodeStatus(true,cn._ai,cn._ls);}if(cn._is){(this.completed)?this.s(cn._ai):this._sn=cn._ai;}this.openTo(cn._p._ai,false,true);});dTree.prototype.getOpenTo=(function(nodes){if(nodes===""){this.openAll();}else{if(!this.config.useCookies||!this.getCookie("co"+this.obj)){for(var n=0;n<nodes.length;n++){this.openTo(nodes[n],false,true);}}}});dTree.prototype.nodeStatus=(function(status,id,bottom){if(status&&!this.fill(id)){return;}var eJoin,eIcon;eJoin=DOKUid("j"+this.obj+id);eIcon=DOKUid("i"+this.obj+id);eIcon.src=(status)?this.aNodes[id].iconOpen:this.aNodes[id].icon;eJoin.src=((status)?((bottom)?this.icon.minusBottom:this.icon.minus):((bottom)?this.icon.plusBottom:this.icon.plus));DOKUid("d"+this.obj+id).style.display=(status)?"block":"none";});dTree.prototype.clearCookie=(function(){var now,yday;now=new Date();yday=new Date(now.getTime()-86400000);this.setCookie("co"+this.obj,"cookieValue",yday);this.setCookie("cs"+this.obj,"cookieValue",yday);});dTree.prototype.setCookie=(function(cookieName,cookieValue,expires,path,domain,secure){document.cookie=escape(cookieName)+"="+escape(cookieValue)+(expires?"; expires="+expires.toGMTString():"")+";path=/"+(domain?"; domain="+domain:"")+(secure?"; secure":"");});dTree.prototype.getCookie=(function(cookieName){var cookieValue="",pN,posValue,endPos;pN=document.cookie.indexOf(escape(cookieName)+"=");if(pN!=-1){posValue=pN+(escape(cookieName)+"=").length;endPos=document.cookie.indexOf(";",posValue);if(endPos!=-1){cookieValue=unescape(document.cookie.substring(posValue,endPos));}else{cookieValue=unescape(document.cookie.substring(posValue));}}return(cookieValue);});dTree.prototype.updateCookie=(function(){var str="",n;for(n=0;n<this.aNodes.length;n++){if(this.aNodes[n]._io&&this.aNodes[n].pid!=this.root.id){if(str){str+=".";}str+=this.aNodes[n].id;}}this.setCookie("co"+this.obj,str);});dTree.prototype.isOpen=(function(id){var n,aOpen=this.getCookie("co"+this.obj).split(".");for(n=0;n<aOpen.length;n++){if(aOpen[n]==id){return true;}}return false;});dTree.prototype.openCurNS=(function(max){var r,cn,match,t,i,n,cnsa,cna,cns=this.pageid;r=new RegExp("\\b"+this.config.sepchar+"\\b","g");match=cns.match(r)||-1;if(max>0&&match.length>=max){t=cns.split(this.config.sepchar);n=(this.aNodes[0].dokuid=="")?0:this.aNodes[0].dokuid.split(this.config.sepchar).length;t.splice(max+n,t.length);cnsa=t.join(this.config.sepchar);}for(i=0;i<this.aNodes.length;i++){cn=this.aNodes[i];if(cns==cn.dokuid||cns==cn.hns){this.openTo(cn.id,false,true);this.fajax=false;if(cn.pid>=0){addInitEvent(this.scroll("l",4,cn.pid,1));}break;}if(cnsa==cn.dokuid||cnsa==cn.hns){cna=cn;this.fajax=true;}}if(cna){this.openTo(cna.id,false,true);}});dTree.prototype.fill=(function(id){if(id==-1||this.aNodes[id]._ok){return true;}var n=id,eLoad,node,a,rd,ln,eDiv;if(this.aNodes[n].ajax){eLoad=DOKUid("l"+this.obj);node=DOKUid("s"+this.obj+n);if(!eLoad){eLoad=indexmenu_createPicker("l"+this.obj);}eLoad.innerHTML="Loading ...";DOKUid("s"+this.obj+n).parentNode.appendChild(eLoad);eLoad.style.width="auto";eLoad.style.display="inline";this.getAjax(n);return true;}rd=[];while(!this.aNodes[n]._ok){rd[rd.length]=n;n=this.aNodes[n].pid;}for(ln=rd.length-1;ln>=0;ln--){id=rd[ln];a=this.aNodes[id];eDiv=DOKUid("d"+this.obj+id);if(!eDiv){return false;}this.aIndent=[];n=a;while(n.pid>=0){if(n._ls){this.aIndent.unshift(0);}else{this.aIndent.unshift(1);}n=n._p;}eDiv.innerHTML=this.addNode(a);a._ok=true;}return true;});dTree.prototype.openCookies=(function(){var n,cn,aOpen=this.getCookie("co"+this.obj).split(".");for(n=0;n<aOpen.length;n++){if(aOpen[n]===""){break;}cn=this.aNodes[aOpen[n]];if(!cn._ok){this.nodeStatus(true,aOpen[n],cn._ls);cn._io=1;}}});dTree.prototype.scroll=(function(where,s,n,i){if(!this.config.scroll){return false;}var w,dtree,dtreel,nodeId;dtree=DOKUid("dtree_"+this.obj);dtreel=parseInt(dtree.offsetLeft,0);if(where=="r"){DOKUid("left_"+this.obj).style.border="thin inset";this.scrollRight(dtreel,s);}else{nodeId=DOKUid("s"+this.obj+n);w=parseInt(dtree.parentNode.offsetWidth-nodeId.offsetWidth-nodeId.offsetLeft,0);if(this.config.toc){w=w-11;}if(dtreel<=w){return;}this.resizescroll("none");this.stopscroll();this.scrollLeft(dtreel,s,w-3,i);}});dTree.prototype.scrollLeft=(function(lft,s,w,i){if(lft<w-i-10){this.divdisplay("z",0);this.scrllTmr=0;return;}var self=this;DOKUid("dtree_"+self.obj).style.left=lft+"px";this.scrllTmr=setTimeout((function(){self.scrollLeft(lft-s,s+i,w,i);}),20);});dTree.prototype.scrollRight=(function(lft,s){if(lft>=s){this.divdisplay("left_",0);this.stopscroll();return;}var self=this;DOKUid("dtree_"+self.obj).style.left=lft+"px";if(lft>-15){s=1;}this.scrllTmr=setTimeout((function(){self.scrollRight(lft+s,s+1);}),20);});dTree.prototype.stopscroll=(function(){DOKUid("left_"+this.obj).style.border="none";clearTimeout(this.scrllTmr);this.scrllTmr=0;});dTree.prototype.show_feat=(function(n){var w,div,id,dtree,dtreel,self,node=DOKUid("s"+this.obj+n);self=this;if(this.config.toc&&node.className!="node"){div=DOKUid("t"+this.obj);id=(this.aNodes[n].hns)?this.aNodes[n].hns:this.aNodes[n].dokuid;div.onmousedown=(function(){indexmenu_createTocMenu("req=toc&id="+decodeURIComponent(id),"picker_"+self.obj,"t"+self.obj);});node.parentNode.appendChild(div);if(div.style.display=="none"){div.style.display="inline";}}if(this.config.scroll){div=DOKUid("z"+this.obj);div.onmouseover=(function(){div.style.border="none";self.scroll("l",1,n,0);});div.onmousedown=(function(){div.style.border="thin inset";self.scroll("l",4,n,1);});div.onmouseout=(function(){div.style.border="none";self.stopscroll();});div.onmouseup=div.onmouseover;dtree=DOKUid("dtree_"+this.obj);dtreel=parseInt(dtree.offsetLeft,0);w=parseInt(dtree.parentNode.offsetWidth-node.offsetWidth-node.offsetLeft+1,0);if(dtreel>w){div.style.display="none";div.style.top=node.offsetTop+"px";div.style.left=parseInt(node.offsetLeft+node.offsetWidth+w-12,0)+"px";div.style.display="block";}}});dTree.prototype.resizescroll=(function(status){var dtree,w,h,left=DOKUid("left_"+this.obj);if(!left){return;}if(left.style.display==status){dtree=DOKUid("dtree_"+this.obj);w=parseInt(dtree.offsetHeight/3,0);h=parseInt(w/50,0)*50;if(h<50){h=50;}left.style.height=h+"px";left.style.top=w+"px";if(status=="none"){left.style.display="block";}}});dTree.prototype.getAjax=(function(n){var node,req,curns,selft=this;node=selft.aNodes[n];var Ajax=new sack(DOKU_BASE+"lib/plugins/indexmenu/ajax.php");req="req=index&idx="+node.dokuid+decodeURIComponent(this.config.jsajax);curns=this.pageid.substring(0,this.pageid.lastIndexOf(this.config.sepchar));Ajax.encodeURIString=false;Ajax.onCompletion=(function(){var i,ajxnodes,ajxnode,plus;plus=selft.aNodes.length-1;eval(this.response);if(!isArray(ajxnodes)||ajxnodes.length<1){ajxnodes=[["",1,0,"",0,1,0]];}node.ajax=false;for(i=0;i<ajxnodes.length;i++){ajxnode=ajxnodes[i];ajxnode[2]=(ajxnode[2]==0)?node.id:ajxnode[2]+plus;ajxnode[1]+=plus;selft.add(ajxnode[0],ajxnode[1],ajxnode[2],ajxnode[3],ajxnode[4],ajxnode[5],ajxnode[6]);}if(selft.fajax){selft.fajax=false;selft.openCurNS(0);}else{selft.openTo(node.id,false,true);}DOKUid("l"+selft.obj).style.display="none";});if(this.fajax){req+="&nss="+curns+"&max=1";}Ajax.encodeURIString=false;Ajax.runAJAX(encodeURI(req));});dTree.prototype.loadCss=(function(){var oLink=document.createElement("link");oLink.href=this.config.plugbase+"/images/"+this.config.theme+"/style.css";oLink.rel="stylesheet";oLink.type="text/css";document.getElementsByTagName("head")[0].appendChild(oLink);});dTree.prototype.contextmenu=(function(n,e){var li,id,html,type,node,self,cmenu,cdtree,rmenu,X=0,Y=0,i;cdtree=DOKUid("cdtree_"+this.obj);rmenu=DOKUid("r"+this.obj);if(!rmenu){return true;}indexmenu_mouseposition(rmenu,e);cmenu=window.indexmenu_contextmenu[0];node=this.aNodes[n];self=this;rmenu.innerHTML="<div class=\"indexmenu_rmenuhead\" title=\""+node.name+"\">"+node.name+"</div>";for(i=0;i<cmenu.length;i++,i++,i++,i++){if(((!node._hc||node.hns)&&!cmenu[i+2])||(node._hc&&!node.hns&&!cmenu[i+3])){continue;}html=cmenu[i];if(cmenu[i+1]){type="li";id=(node.hns)?node.hns:node.dokuid;html="<a title=\""+cmenu[i]+"\" href=\""+eval(cmenu[i+1])+"\">"+html+"</a>";}else{type="span";rmenu.appendChild(document.createElement("ul"));}li=document.createElement(type);li.innerHTML=html;rmenu.lastChild.appendChild(li);}rmenu.style.display="inline";return false;});dTree.prototype.divdisplay=(function(obj,v){var o=DOKUid(obj+this.obj);if(!o){return false;}(v)?o.style.display="inline":o.style.display="none";});dTree.prototype.init=(function(s,c,n,nav,max){if(s){this.loadCss();}if(!c){this.openCookies();}if(n){this.getOpenTo(n.split(" "));}if(nav){this.openCurNS(max);}if(window.indexmenu_contextmenu){var self=this;indexmenu_createPicker("r"+this.obj,"indexmenu_rmenu "+this.config.theme);DOKUid("r"+this.obj).oncontextmenu=indexmenu_stopevt;addEvent(document,"click",(function(){self.divdisplay("r",0);}));}});if(!Array.prototype.push){Array.prototype.push=(function array_push(){for(var i=0;i<arguments.length;i++){this[this.length]=arguments[i];}return this.length;});}if(!Array.prototype.pop){Array.prototype.pop=(function array_pop(){var lstEl=this[this.length-1];this.length=Math.max(this.length-1,0);return lstEl;});}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/jsmenu/admmenu.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/jsmenu/admmenu.js
new file mode 100644
index 000000000..2ea6e32f2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/jsmenu/admmenu.js
@@ -0,0 +1,71 @@
+/* Right Context Menu configuration for admin users:
+ Menu is built from four array items: title, link, show if page or headpage, show if namespace.
+ Link is not created if it's 0, otherwise it's evaluated.
+ Second array is displayed only in edit mode.
+
+ Some usefull variables:
+ node.hns = headpage id;
+ node.isdir = node is namespace;
+ node.dokuid = the DW id (namespace parent in case of headpage);
+ id = the DW id of the selected node (headpage id in case of headpage);
+ this.config.urlbase = Url Base;
+ this.config.sepchar = Url separator;
+*/
+
+var indexmenu_contextmenu=new Array(
+ //Standard right menu
+ new Array(
+ '<b><em>Page action:</em></b>',0,1,0,
+ '<b><em>Namespace action:</em></b>',0,0,1,
+ 'New page here','"javascript: indexmenu_reqpage(\'"+this.config.urlbase+"\',\'"+this.config.sepchar+"\',\'"+node.dokuid+"\');"',1,1,
+ 'Headpage here','"javascript: indexmenu_reqpage(\'"+this.config.urlbase+"\',\'"+this.config.sepchar+"\',\'"+node.dokuid+"\',\'"+node.name+"\');"',0,1,
+ 'Edit','indexmenu_getid(this.config.urlbase,id)+"do=edit"',1,0,
+ 'Search','"javascript: indexmenu_srchpage(\'"+this.config.urlbase+"\',\'"+this.config.sepchar+"\',\'"+node.isdir+"\',\'"+node.dokuid+"\');"',1,1,
+ 'Toc preview','"javascript: indexmenu_createTocMenu(\'req=toc&id="+id+"\',\'picker_"+this.obj+"\',\'s"+this.obj+node.id+"\');"',1,0,
+ 'Revisions','indexmenu_getid(this.config.urlbase,id)+"do=revisions"',1,0,
+ 'Purge cache','indexmenu_getid(this.config.urlbase,id)+"purge=true"',1,0,
+ 'Acls','indexmenu_getid(this.config.urlbase,id)+"do=admin&dokupage=acl"',1,1
+ ),
+
+ //Right menu in edit mode.
+ new Array(
+ '<b><em>Edit action:</em></b>',0,1,0,
+ 'Insert as DWlink','"javascript: indexmenu_insertTags(\'"+id+"\',\'"+this.config.sepchar+"\');"+this.obj+".divdisplay(\'r\',0);"',1,0
+ )
+ );
+
+/*Custom User Functions
+Insert your custom functions here.
+*/
+function indexmenu_reqpage(b,s,id,n) {
+ var r,u=b;
+ if (n) {
+ r = id + s + n;
+ } else {
+ r = prompt("Insert the pagename to create","");
+ if (!r) {return;}
+ r = id + s + r;
+ }
+ if (r) window.location.href = indexmenu_getid(u,r);
+}
+
+function indexmenu_srchpage(u,s,isdir,nid) {
+ var r = prompt("Insert keyword(s) to search for within this namespace","");
+ if (r)
+ {
+ var fnid = nid;
+ if (isdir == "0") {
+ fnid = fnid.substring(0,nid.lastIndexOf(s));
+ }
+ var b=u,re = new RegExp(s, 'g');
+ fnid = fnid.replace(re, ":");
+ b += (u.indexOf("?id=") < 0) ? '?id=': '';
+ window.location.href = indexmenu_getid(b,r+" @"+fnid)+"do=search";
+ }
+}
+
+function indexmenu_getid(u,id) {
+ var url=(u||'')+encodeURI(id||'');
+ url += (u.indexOf("?") < 0) ? '?': '&';
+ return url;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/jsmenu/menu.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/jsmenu/menu.js
new file mode 100644
index 000000000..d92956141
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/jsmenu/menu.js
@@ -0,0 +1,56 @@
+/* Right Context Menu configuration for anonymous users:
+ Menu is built from four array items: title, link, show if page or headpage, show if namespace.
+ Link is not created if it's 0, otherwise it's evaluated.
+ Second array is displayed only in edit mode.
+
+ Some usefull variables:
+ node.hns = headpage id;
+ node.isdir = node is namespace;
+ node.dokuid = the DW id (namespace parent in case of headpage);
+ id = the DW id of the selected node (headpage id in case of headpage);
+ this.config.urlbase = Url Base;
+ this.config.sepchar = Url separator;
+*/
+
+var indexmenu_contextmenu=new Array(
+ //Standard right menu
+ new Array(
+ '<b><em>Page action:</em></b>',0,1,0,
+ '<b><em>Namespace action:</em></b>',0,0,1,
+ 'Search','"javascript: indexmenu_srchpage(\'"+this.config.urlbase+"\',\'"+this.config.sepchar+"\',\'"+node.isdir+"\',\'"+node.dokuid+"\');"',1,1,
+ 'Toc preview','"javascript: indexmenu_createTocMenu(\'req=toc&id="+id+"\',\'picker_"+this.obj+"\',\'s"+this.obj+node.id+"\');"',1,0,
+ 'Revisions','indexmenu_getid(this.config.urlbase,id)+"do=revisions"',1,0
+ ),
+
+ //Right menu in edit mode.
+ new Array(
+ '<b><em>Edit action:</em></b>',0,1,0,
+ 'Insert as DWlink','"javascript: indexmenu_insertTags(\'"+id+"\',\'"+this.config.sepchar+"\');"+this.obj+".divdisplay(\'r\',0);"',1,0,
+ 'Edit','indexmenu_getid(this.config.urlbase,id)+"do=edit"',1,0
+ )
+ );
+
+/*Custom User Functions
+Insert your custom functions here.
+*/
+
+function indexmenu_srchpage(u,s,isdir,nid) {
+ var r = prompt("Insert keyword(s) to search for within this namespace","");
+ if (r)
+ {
+ var fnid = nid;
+ if (isdir == "0") {
+ fnid = fnid.substring(0,nid.lastIndexOf(s));
+ }
+ var b=u,re = new RegExp(s, 'g');
+ fnid = fnid.replace(re, ":");
+ b += (u.indexOf("?id=") < 0) ? '?id=': '';
+ window.location.href = indexmenu_getid(b,r+" @"+fnid)+"do=search";
+ }
+}
+
+function indexmenu_getid(u,id) {
+ var url=(u||'')+encodeURI(id||'');
+ url += (u.indexOf("?") < 0) ? '?': '&';
+ return url;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/jsmenu/usrmenu.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/jsmenu/usrmenu.js
new file mode 100644
index 000000000..d58ae3802
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/jsmenu/usrmenu.js
@@ -0,0 +1,69 @@
+/* Right Context Menu configuration for authenticated users:
+ Menu is built from four array items: title, link, show if page or headpage, show if namespace.
+ Link is not created if it's 0, otherwise it's evaluated.
+ Second array is displayed only in edit mode.
+
+ Some usefull variables:
+ node.hns = headpage id;
+ node.isdir = node is namespace;
+ node.dokuid = the DW id (namespace parent in case of headpage);
+ id = the DW id of the selected node (headpage id in case of headpage);
+ this.config.urlbase = Url Base;
+ this.config.sepchar = Url separator;
+*/
+
+var indexmenu_contextmenu=new Array(
+ //Standard right menu
+ new Array(
+ '<b><em>Page action:</em></b>',0,1,0,
+ '<b><em>Namespace action:</em></b>',0,0,1,
+ 'New page here','"javascript: indexmenu_reqpage(\'"+this.config.urlbase+"\',\'"+this.config.sepchar+"\',\'"+node.dokuid+"\');"',1,1,
+ 'Headpage here','"javascript: indexmenu_reqpage(\'"+this.config.urlbase+"\',\'"+this.config.sepchar+"\',\'"+node.dokuid+"\',\'"+node.name+"\');"',0,1,
+ 'Edit','indexmenu_getid(this.config.urlbase,id)+"do=edit"',1,0,
+ 'Search','"javascript: indexmenu_srchpage(\'"+this.config.urlbase+"\',\'"+this.config.sepchar+"\',\'"+node.isdir+"\',\'"+node.dokuid+"\');"',1,1,
+ 'Toc preview','"javascript: indexmenu_createTocMenu(\'req=toc&id="+id+"\',\'picker_"+this.obj+"\',\'s"+this.obj+node.id+"\');"',1,0,
+ 'Revisions','indexmenu_getid(this.config.urlbase,id)+"do=revisions"',1,0
+ ),
+
+ //Right menu in edit mode.
+ new Array(
+ '<b><em>Edit action:</em></b>',0,1,0,
+ 'Insert as DWlink','"javascript: indexmenu_insertTags(\'"+id+"\',\'"+this.config.sepchar+"\');"+this.obj+".divdisplay(\'r\',0);"',1,0
+ )
+ );
+
+/*Custom User Functions
+Insert your custom functions here.
+*/
+function indexmenu_reqpage(b,s,id,n) {
+ var r,u=b;
+ if (n) {
+ r = id + s + n;
+ } else {
+ r = prompt("Insert the pagename to create","");
+ if (!r) {return;}
+ r = id + s + r;
+ }
+ if (r) window.location.href = indexmenu_getid(u,r);
+}
+
+function indexmenu_srchpage(u,s,isdir,nid) {
+ var r = prompt("Insert keyword(s) to search for within this namespace","");
+ if (r)
+ {
+ var fnid = nid;
+ if (isdir == "0") {
+ fnid = fnid.substring(0,nid.lastIndexOf(s));
+ }
+ var b=u,re = new RegExp(s, 'g');
+ fnid = fnid.replace(re, ":");
+ b += (u.indexOf("?id=") < 0) ? '?id=': '';
+ window.location.href = indexmenu_getid(b,r+" @"+fnid)+"do=search";
+ }
+}
+
+function indexmenu_getid(u,id) {
+ var url=(u||'')+encodeURI(id||'');
+ url += (u.indexOf("?") < 0) ? '?': '&';
+ return url;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/de/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/de/lang.php
new file mode 100644
index 000000000..29d939aa5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/de/lang.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * German language for indexmenu plugin
+ *
+ * @license: GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author: Fabian Pfannes <fpfannes@web.de>
+ */
+$lang['menu'] = 'Indexmenu Werkzeuge';
+$lang['fetch'] = 'Anzeigen';
+$lang['install'] = 'Installieren';
+$lang['delete'] = 'L&ouml;schen';
+$lang['check'] = '&Uuml;berpr&uuml;fen';
+$lang['no_repos'] = 'Keine URL f&uuml;r ein Template Repository vorhanden.';
+$lang['disabled'] = 'Deaktiviert';
+$lang['conn_err'] = 'Verbindung fehlgeschlagen';
+$lang['dir_err'] = 'Fehler bei der Erzeugung eines Verzeichnises. Designvorlage konnte nicht gespeichert werden';
+$lang['down_err'] = 'Fehler beim Herunterladen der Designvorlage';
+$lang['zip_err'] = 'Fehler beim Erstellen oder Entpacken der Zip-Datei';
+$lang['install_ok'] = 'Designvorlage wurde erfolgreich erstellt. Die neue Designvorlage ist in der Werkzeugleiste der Konfigurationsseite oder &uuml;ber die js#theme_name Option verf&uuml;gbar.';
+$lang['install_no'] = 'Verbindungsfehler. Sie k&ouml;nnen aber versuchen die Designvorlage <a href="http://samuele.netsons.org/dokuwiki/lib/plugins/indexmenu/upload/">hier</a> hochzuladen.';
+$lang['delete_ok'] = 'Designvorlage wurde erfolgreich gel&ouml;scht.';
+$lang['delete_no'] = 'Beim L&ouml;schen ist ein Fehler aufgetreten';
+$lang['upload'] = 'Hochladen';
+$lang['checkupdates'] = 'Plugin updaten';
+$lang['noupdates'] = "Indexmenu muss nicht upgedated werden. Sie haben bereits die aktuellste Version:";
+$lang['infos'] = 'Sie k&ouml;nnen eine neue Designvorlage erstellen. Beachten Sie die Anleitung im <a href="http://wiki.splitbrain.org/plugin:indexmenu#theme_tutorial">Designvorlagen Tutorial</a. <br />Wenn Sie den "Hochladen" Button unter der Desingvorlage dr&uuml;cken k&ouml;nnen Sie viele Leute gl&uuml;cklich machen :-) dadurch, dass Sie sie im &ouml;ffentliche Indexmenu Repository bereitstellen.';
+$lang['showsort']="Indexmenu Sortierungsnummer: ";
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/en/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/en/lang.php
new file mode 100644
index 000000000..e298caa44
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/en/lang.php
@@ -0,0 +1,28 @@
+<?php
+/**
+ * English language for indexmenu plugin
+ *
+ * @license: GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author: Samuele Tognini <samuele@netsons.org>
+ */
+$lang['menu'] = 'Indexmenu Utilities';
+$lang['fetch'] = 'Show';
+$lang['install'] = 'Install';
+$lang['delete'] = 'Delete';
+$lang['check'] = 'Check';
+$lang['no_repos'] = 'No theme repository url configured.';
+$lang['disabled'] = 'Disabled';
+$lang['conn_err'] = 'Connection error';
+$lang['dir_err'] = 'Unable to create temporary folder to receive theme';
+$lang['down_err'] = 'Unable to receive theme';
+$lang['zip_err'] = 'Zip creation or extraction error';
+$lang['install_ok'] = 'theme installed successfully. The new theme is avaiable in the toolbar of the edit page or with the js#theme_name option.';
+$lang['install_no'] = 'Connection error. However you can try to upload manually your theme from <a href="http://samuele.netsons.org/dokuwiki/lib/plugins/indexmenu/upload/">here</a>.';
+$lang['delete_ok'] = 'Theme is successfully deleted.';
+$lang['delete_no'] = 'An error occurred during theme deleting';
+$lang['upload'] = 'Share';
+$lang['checkupdates'] = 'Plugin updates';
+$lang['noupdates'] = "Indexmenu does not need to be update. You have already the last release:";
+$lang['infos'] = 'You can create your theme following the instructions at the <a href="http://wiki.splitbrain.org/plugin:indexmenu#theme_tutorial">Theme Tutorial</a> page. <br />Then you could make more people happy :-) sending it to the public indexmenu repository, with the "share" button under that theme.';
+$lang['showsort']="Indexmenu sort number: ";
+$lang['donation_text'] = 'The indexmenu plugin is not sponsored by anyone but i develop and support it for free during my spare time. If you gain something thanks to it or you want to support its development, you can consider to make a donation.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/es/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/es/lang.php
new file mode 100644
index 000000000..114237f32
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/es/lang.php
@@ -0,0 +1,28 @@
+<?php
+/**
+ * spanish language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Digna González Otero <digna.gonzalezotero [at] gmail [dot] com>
+ */
+
+$lang['menu'] = 'Utilidades de Indexmenu';
+$lang['fetch'] = 'Mostrar';
+$lang['install'] = 'Instalar';
+$lang['delete'] = 'Eliminar';
+$lang['check'] = 'Seleccionar';
+$lang['no_repos'] = 'Url de repositorio de temas no configurado.';
+$lang['disabled'] = 'Desactivado';
+$lang['conn_err'] = 'Error de conexión';
+$lang['dir_err'] = 'Imposible crear directorio temporar para almacenar el tema';
+$lang['down_err'] = 'Imposible recibir el tema';
+$lang['zip_err'] = 'Error de creación o extracción de Zip';
+$lang['install_ok'] = 'Tema instalado satisfactoriamente. El nuevo tema está disponible en la barra de herramientas de la página a editar o con el comando js#nombre_del_tema opción.';
+$lang['install_no'] = 'Error de conexión. Puedes intentar subir tu tema manualmente desde <a href="http://samuele.netsons.org/dokuwiki/lib/plugins/indexmenu/upload/">here</a>.';
+$lang['delete_ok'] = 'Tema eliminado correctamente.';
+$lang['delete_no'] = 'Ocurrió un error durante la eliminación del tema';
+$lang['upload'] = 'Compartir';
+$lang['checkupdates'] = 'Actualizaciones de plugin';
+$lang['noupdates'] = "No es necesario actualizar Indexmenu. Ya tienes la última versión:";
+$lang['infos'] = 'Puedes crear tu tema siguiendo las instrucciones de la página <a href="http://wiki.splitbrain.org/plugin:indexmenu#theme_tutorial">Theme Tutorial</a>. <br />Después puedes hacer feliz a más gente:-) enviándolo al repositorio público de indexmenu, con el botón de "compartir" bajo ese tema.';
+$lang['showsort']="Número de posición de Indexmenu: ";
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/it/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/it/lang.php
new file mode 100644
index 000000000..4f6bbcd54
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/it/lang.php
@@ -0,0 +1,29 @@
+<?php
+/**
+ * Italian language for indexmenu plugin
+ *
+ * @license: GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author: Samuele Tognini <samuele@netsons.org>
+ */
+$lang['menu'] = "Utility di Indexmenu";
+$lang['fetch'] = 'Mostra';
+$lang['install'] = 'Installa';
+$lang['delete'] = 'Elimina';
+$lang['check'] = 'Controlla';
+$lang['no_repos'] = 'Non &egrave stato configurato nessun indirizzo web per il repository dei temi.';
+$lang['disabled'] = 'Disabilitato';
+$lang['conn_err'] = 'Errore di connessione';
+$lang['local_themes'] = 'Temi installati';
+$lang['dir_err'] = 'Impossibile creare la directory temporanea per scaricare il tema';
+$lang['down_err'] = 'Impossibile scaricare il tema';
+$lang['zip_err'] = 'Errore durante la creazione o scompattazione dell\' archivio';
+$lang['install_ok'] = "tema installato correttamente. Il nuovo tema &egrave accessibile dalla toolbar degli strumenti quando crei una pagina oppure tramite l' opzione js#nome_tema di indexmenu.";
+$lang['install_no'] = 'Errore durante l\' upload. Puoi comunque provare ad inviarmi manualmente il tema da <a href="http://samuele.netsons.org/dokuwiki/lib/plugins/indexmenu/upload/">qui</a>.';
+$lang['delete_ok'] = 'Rimozione del tema avvenuta con successo';
+$lang['delete_no'] = "Errore durante la rimozione del tema";
+$lang['upload'] = 'Condividi';
+$lang['checkupdates'] = 'Aggiornamenti plugin';
+$lang['noupdates'] = "Indexmenu non ha bisogno di essere aggiornato. Hai gi&agrave l'ultima release:";
+$lang['infos'] = 'Puoi creare il tuo tema seguendo le istruzioni nella pagina del <a href="http://wiki.splitbrain.org/plugin:indexmenu#theme_tutorial">Tutorial dei temi</a>.<br /> Poi potreste rendere felice pi&ugrave gente :-) inviandolo nel repository pubblico di indexemnu tramite il pulsante "condividi" sotto il tema della lista.';
+$lang['showsort']="Ordinamento in indexmenu: ";
+$lang['donation_text'] = 'Il plugin indexmenu non &egrave sponsorizzato da nessuno, ma lo sviluppo e supporto gratuitamente nel mio tempo libero. Se guadagni qualcosa grazie a questo plugin o vuoi supportarne lo sviluppo, puoi farlo con una donazione.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/nojsindex-full.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/nojsindex-full.js
new file mode 100644
index 000000000..34c8266cc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/nojsindex-full.js
@@ -0,0 +1,101 @@
+/**
+ * Javascript for index view
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+indexmenu_nojs = {
+ /**
+ * Delay in ms before showing the throbber.
+ * Used to skip the throbber for fast AJAX calls.
+ */
+ throbber_delay: 500,
+
+ /**
+ * Attach event handlers to all "folders" below the given element
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ treeattach: function(iobj){
+ var obj=DOKUid('nojs_'+iobj[0]);
+ if (!obj) return;
+
+ var items = getElementsByClass('indexmenu_idx',obj,'a');
+ for(var i=0; i<items.length; i++){
+ var elem = items[i];
+
+ // attach action to make the link clickable by AJAX
+ addEvent(elem,'click',function(e){ return indexmenu_nojs.toggle(e,this,iobj[1]); });
+ }
+ },
+
+ /**
+ * Open or close a subtree using AJAX
+ * The contents of subtrees are "cached" untill the page is reloaded.
+ * A "loading" indicator is shown only when the AJAX call is slow.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Ben Coburn <btcoburn@silicodon.net>
+ * Modified by Samuele Tognini <samuele@netsons.org> for the indexmenu plugin
+ */
+ toggle: function(e,clicky,jsajax){
+ var listitem = clicky.parentNode.parentNode;
+
+ // if already open, close by removing the sublist
+ var sublists = listitem.getElementsByTagName('ul');
+ if(sublists.length && listitem.className=='open'){
+ sublists[0].style.display='none';
+ listitem.className='closed';
+ e.preventDefault();
+ return false;
+ }
+
+ // just show if already loaded
+ if(sublists.length && listitem.className=='closed'){
+ sublists[0].style.display='';
+ listitem.className='open';
+ e.preventDefault();
+ return false;
+ }
+
+ // prepare an AJAX call to fetch the subtree
+ var ajax = new sack(DOKU_BASE+'lib/plugins/indexmenu/ajax.php');
+ ajax.AjaxFailedAlert = '';
+ ajax.encodeURIString = false;
+ if(ajax.failed) return true;
+
+ //prepare the new ul
+ var ul = document.createElement('ul');
+ ul.className = 'idx';
+ timeout = window.setTimeout(function(){
+ // show the throbber as needed
+ ul.innerHTML = '<li><img src="'+DOKU_BASE+'lib/images/throbber.gif" alt="loading..." title="loading..." /></li>';
+ listitem.appendChild(ul);
+ listitem.className='open';
+ }, this.throbber_delay);
+ ajax.elementObj = ul;
+ ajax.afterCompletion = function(){
+ window.clearTimeout(timeout);
+ indexmenu_nojs.treeattach(ul);
+ if (listitem.className!='open') {
+ listitem.appendChild(ul);
+ listitem.className='open';
+ }
+ };
+ ajax.runAJAX(encodeURI('req=index&nojs=1&'+clicky.search.substr(1)+'&max=1'+decodeURIComponent(jsajax)));
+ e.preventDefault();
+ return false;
+ },
+
+ /* Find all nojs indexmenu objects */
+ treefind: function () {
+ var aobj=indexmenu_nojsqueue;
+ if (!aobj) return;
+
+ for (var i in aobj) {
+ indexmenu_nojs.treeattach(aobj[i]);
+ }
+ }
+};
+
+indexmenu_nojs.treefind();
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/nojsindex.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/nojsindex.js
new file mode 100644
index 000000000..ac437321e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/nojsindex.js
@@ -0,0 +1 @@
+indexmenu_nojs={throbber_delay:500,treeattach:(function(iobj){var obj=DOKUid("nojs_"+iobj[0]);if(!obj){return;}var items=getElementsByClass("indexmenu_idx",obj,"a");for(var i=0;i<items.length;i++){var elem=items[i];addEvent(elem,"click",(function(e){return indexmenu_nojs.toggle(e,this,iobj[1]);}));}}),toggle:(function(e,clicky,jsajax){var listitem=clicky.parentNode.parentNode;var sublists=listitem.getElementsByTagName("ul");if(sublists.length&&listitem.className=="open"){sublists[0].style.display="none";listitem.className="closed";e.preventDefault();return false;}if(sublists.length&&listitem.className=="closed"){sublists[0].style.display="";listitem.className="open";e.preventDefault();return false;}var ajax=new sack(DOKU_BASE+"lib/plugins/indexmenu/ajax.php");ajax.AjaxFailedAlert="";ajax.encodeURIString=false;if(ajax.failed){return true;}var ul=document.createElement("ul");ul.className="idx";timeout=window.setTimeout((function(){ul.innerHTML="<li><img src=\""+DOKU_BASE+"lib/images/throbber.gif\" alt=\"loading...\" title=\"loading...\" /></li>";listitem.appendChild(ul);listitem.className="open";}),this.throbber_delay);ajax.elementObj=ul;ajax.afterCompletion=(function(){window.clearTimeout(timeout);indexmenu_nojs.treeattach(ul);if(listitem.className!="open"){listitem.appendChild(ul);listitem.className="open";}});ajax.runAJAX(encodeURI("req=index&nojs=1&"+clicky.search.substr(1)+"&max=1"+decodeURIComponent(jsajax)));e.preventDefault();return false;}),treefind:(function(){var aobj=indexmenu_nojsqueue;if(!aobj){return;}for(var i in aobj){indexmenu_nojs.treeattach(aobj[i]);}})};indexmenu_nojs.treefind();
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/script.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/script.js
new file mode 100644
index 000000000..411f0fde5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/script.js
@@ -0,0 +1,152 @@
+/* Queue of loaded script files */
+var indexmenu_jsqueue = [];
+/* Queue of loaded css files */
+var indexmenu_cssqueue = [];
+/* Queue of nojs trees */
+var indexmenu_nojsqueue = [];
+
+function indexmenu_findExt(path){
+ var ext = "gif";
+ var cext = path.lastIndexOf(".");
+ if ( cext > -1){
+ cext++;
+ cext = path.substring(cext, path.length).toLowerCase();
+ if ((cext == "png") || (cext == "jpg")) {ext = cext;}
+ }
+ return ext;
+}
+
+function indexmenu_createTocMenu(get,picker,btn) {
+ var toc_picker = DOKUid(picker);
+ if (!toc_picker) {
+ toc_picker=indexmenu_createPicker(picker);
+ toc_picker.className='dokuwiki indexmenu_toc';
+ toc_picker.innerHTML='<a href="#"><img src="'+DOKU_BASE+'lib/plugins/indexmenu/images/close.gif" class="indexmenu_close" /></a><div />';
+ addEvent(toc_picker.firstChild, 'click',function (event) {event.stopPropagation();return indexmenu_showPicker(picker)});
+ } else {
+ toc_picker.style.display = 'none';
+ }
+ indexmenu_ajaxmenu(get,toc_picker,DOKUid(btn),toc_picker.childNodes[1]);
+}
+
+function indexmenu_ajaxmenu(get,picker,btn,container,oncomplete) {
+ var indx_list;
+ if (container) {
+ indx_list = container;
+ } else {
+ indx_list = picker;
+ }
+ if (!indexmenu_showPicker(picker,btn)) return;
+ // We use SACK to do the AJAX requests
+ var ajax = new sack(DOKU_BASE+'lib/plugins/indexmenu/ajax.php');
+ ajax.encodeURIString=false;
+ ajax.onLoading = function () {
+ indx_list.innerHTML='<div class="tocheader">Loading .....</div>';
+ };
+
+ // define callback
+ ajax.onCompletion = function(){
+ var data = this.response;
+ indx_list.innerHTML="";
+ if (isFunction(oncomplete)) {
+ oncomplete(data,indx_list);
+ } else {
+ indx_list.innerHTML=data;
+ }
+ };
+
+ ajax.runAJAX(encodeURI(get));
+}
+
+function indexmenu_createPicker(id,cl) {
+ var indx_list = document.createElement('div');
+ indx_list.className = cl || 'picker';
+ indx_list.id=id;
+ indx_list.style.position = 'absolute';
+ indx_list.style.display = 'none';
+ var body = document.getElementsByTagName('body')[0];
+ body.appendChild(indx_list);
+ return indx_list;
+}
+
+function indexmenu_showPicker(pickerid,btn){
+ var x = 3, y = 3, picker = DOKUid(pickerid);
+ if(picker.style.display == 'none'){
+ x += findPosX(btn);
+ y += findPosY(btn);
+ if (picker.id != 'picker_plugin_indexmenu') {
+ x += btn.offsetWidth-3;
+ } else {
+ y += btn.offsetHeight;
+ }
+ picker.style.display = 'block';
+ picker.style.left = x+'px';
+ picker.style.top = y+'px';
+ return true;
+ }else{
+ picker.style.display = 'none';
+ return false;
+ }
+}
+
+function indexmenu_loadtoolbar(){
+ var toolbar = DOKUid('tool__bar');
+ if(!toolbar) return;
+ indexmenu_loadJs(DOKU_BASE+'lib/plugins/indexmenu/edit.js');
+}
+
+function indexmenu_loadJs(f){
+ var basef = f.replace(/^.*[\/\\]/g, '');
+ if (indexmenu_notinarray(indexmenu_jsqueue,basef)) {
+ var oLink = document.createElement("script");
+ oLink.src = f;
+ oLink.type = "text/javascript";
+ oLink.charset="utf-8";
+ indexmenu_jsqueue.push(basef);
+ document.getElementsByTagName("head")[0].appendChild(oLink);
+ }
+}
+
+function indexmenu_checkcontextm(n,obj,e){
+ var k=0;
+ e=e||event;
+ if ((e.which == 3 || e.button == 2) || (window.opera && e.which == 1 && e.ctrlKey)) {
+ obj.contextmenu (n,e);
+ indexmenu_stopevt(e);
+ }
+}
+
+function indexmenu_stopevt(e) {
+ if (!window.indexmenu_contextmenu) {
+ return true;
+ }
+ e=e||event;
+ e.preventdefault? e.preventdefault() : e.returnValue = false;
+ return false;
+}
+
+function indexmenu_notinarray(array,val) {
+ for (var i = 0; i < array.length; i++) {
+ if (array[i] == val) {
+ return false;
+ }
+ }
+ return true;
+}
+
+function indexmenu_mouseposition(obj,e) {
+/*http://www.quirksmode.org/js/events_properties.html*/
+ if (!e) e = window.event;
+ if (e.pageX || e.pageY) {
+ X = e.pageX;
+ Y = e.pageY;
+ }
+ else if (e.clientX || e.clientY) {
+ X = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
+ Y = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
+ }
+ obj.style.left=X-5+'px';
+ obj.style.top=Y-5+'px';
+}
+
+addInitEvent(indexmenu_loadtoolbar);
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/style.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/style.css
new file mode 100644
index 000000000..a70cbebfe
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/style.css
@@ -0,0 +1,190 @@
+/*--------------------------------------------------|
+| dTree 2.05 | www.destroydrop.com/javascript/tree/ |
+|---------------------------------------------------|
+| Copyright (c) 2002-2003 Geir Landro |
+|--------------------------------------------------*/
+/*
+ a.nodeFdUrl Namespace with url link (headpage) js
+ a.node Namespace without url link js
+ a.nodeUrl Page js
+ a.nodeSel Last visited page js
+ a.navSel Current page js
+ a.indexmenu_idx_head link style of a namespace with url (headpage) nojs
+ a.indexmenu_idx link style of a namespace without url nojs
+ */
+
+/* dtree properties. No need to change*/
+
+.dtree {
+ font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;
+ font-size: 11px;
+ color: __text__;
+ white-space: nowrap;
+ line-height: normal;
+}
+
+.dtree img {
+ border: 0px;
+ vertical-align: top;
+}
+
+/*Properties that can be edit*/
+
+/*Link properties*/
+.dtree a {
+ color: __existing__;
+ text-decoration: none;
+}
+
+/*Link properties*/
+.dtree a.node, .dtree a.nodeSel a.navSel {
+ white-space: nowrap;
+ padding: 1px 2px 1px 2px;
+}
+/* Last visited page highlighting*/
+.dtree a.nodeSel {
+ background-color: __background_alt__;
+}
+/* Current page highlighting*/
+.dtree a.navSel {
+ background-color: __highlight__;
+}
+
+/*
+.dtree .clip {
+}
+*/
+
+/*nojs tree div*/
+.indexmenu_nojs {
+ display: block;
+}
+
+/*Namespace without page link in nojs mode. !important has to be used*/
+div.li a.indexmenu_idx {
+ color: __missing__ !important;
+ text-decoration: none !important;
+ font-weight: bold;
+}
+
+/*Namespace with page link (headpage) in nojs mode. !important has to be used*/
+
+div.li a.indexmenu_idx_head {
+ font-weight: bold;
+}
+
+
+/*Style for admin panel interface*/
+div.dokuwiki div.indexmenu_list_themes {
+ clear: both;
+ border-top: 2px solid __border__;
+ padding-left: 1em;
+}
+
+/*Mouseover property*/
+.dtree a.nodeFdUrl:hover, .dtree a.nodeSel:hover, a.navSel:hover, .dtree a.nodeUrl:hover {
+ color: __existing__;
+ text-decoration: underline;
+ background-color: __background_alt__;
+}
+/*Mouseover property*/
+.dtree a.node:hover {
+ text-decoration: none;
+}
+
+/*tocbullet property*/
+.dtree .indexmenu_tocbullet {
+ position:absolute;
+ background: transparent url(images/toc_bullet.gif) no-repeat scroll;
+ vertical-align: middle;
+ width: 11px;
+ height: 11px;
+}
+
+/*scrolling arrow property*/
+.dtree .indexmenu_larrow {
+ position:absolute;
+ filter:alpha(opacity=60);-moz-opacity:.60;opacity:.60;
+ background:transparent url(images/larrow.gif) repeat-y scroll;
+ padding-left:22px;
+ z-index:100;
+}
+
+/*toc property*/
+.indexmenu_toc {
+ font-size: 80%;
+ line-height: 1.2em;
+ white-space: normal;
+ overflow: hidden;
+ width: 200px !important;
+ z-index:100 !important;
+ word-wrap: break-word;
+}
+
+.indexmenu_toc .indexmenu_toc_inside {
+ border: 1px solid __border__;
+ background-color: __background__;
+ text-align: left;
+ padding: 0.5em 0 0.7em 0;
+ max-height: 300px;
+ height: expression( this.scrollHeight > 300 ? "300px" : "auto" );
+ overflow: auto;
+}
+
+.dtree .indexmenu_rarrow {
+ position:absolute;
+ background:white url(images/rarrow.gif) no-repeat scroll;
+ width:11px;
+ height:15px;
+}
+
+.indexmenu_rmenu {
+ position: absolute;
+ z-index: 100;
+ background-color: #fff;
+ border: 1px solid black;
+ font-size: 80%;
+ line-height: 100%;
+ padding-bottom: 5px;
+}
+
+.indexmenu_rmenuhead {
+ background-color: #CCFFCC;
+ border-bottom: 1px solid __text__;
+ color: __text__;
+ font-size: 90%;
+ margin: 0pt;
+ text-align: center;
+ padding: 1px 5px;
+ vertical-align: middle;
+ overflow: hidden;
+ width: 80px;
+}
+
+.indexmenu_rmenu ul,.indexmenu_rmenu li {
+ list-style-type: none !important;
+ list-style-image: none !important;
+ color: #000 !important;
+ margin: 2px !important;
+ text-align: center;
+}
+
+.indexmenu_rmenu a:hover {
+ background-color: #000 !important;
+ color: #fff !important;
+}
+
+.indexmenu_opts {
+ font-size: 80%;
+}
+
+.dtree .emptynode {
+ background: transparent url(images/empty.gif) no-repeat scroll;
+ display: inline;
+ padding: 1px 8px;
+ width: 16px;
+ height: 16px;
+ vertical-align: top;
+ /* needed by ie7 */
+ zoom: 1;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/syntax/indexmenu.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/syntax/indexmenu.php
new file mode 100644
index 000000000..a1653437d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/syntax/indexmenu.php
@@ -0,0 +1,720 @@
+<?php
+/**
+ * Info Indexmenu: Displays the index of a specified namespace.
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Samuele Tognini <samuele@netsons.org>
+ *
+ */
+
+if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/');
+if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
+if(!defined('INDEXMENU_IMG_ABSDIR')) define('INDEXMENU_IMG_ABSDIR',DOKU_PLUGIN."indexmenu/images");
+require_once(DOKU_PLUGIN.'syntax.php');
+require_once(DOKU_INC.'inc/search.php');
+
+/**
+ * All DokuWiki plugins to extend the parser/rendering mechanism
+ * need to inherit from this class
+ */
+class syntax_plugin_indexmenu_indexmenu extends DokuWiki_Syntax_Plugin {
+
+ var $sort=false;
+ var $msort=false;
+ var $rsort=false;
+ var $nsort=false;
+
+ /**
+ * return some info
+ */
+ function getInfo(){
+ return array(
+ 'author' => 'Samuele Tognini',
+ 'email' => 'samuele@netsons.org',
+ 'date' => rtrim(io_readFile(DOKU_PLUGIN.'indexmenu/VERSION.txt')),
+ 'name' => 'Indexmenu',
+ 'desc' => 'Insert the index of a specified namespace.',
+ 'url' => 'http://wiki.splitbrain.org/plugin:indexmenu'
+ );
+ }
+
+ /**
+ * What kind of syntax are we?
+ */
+ function getType(){
+ return 'substition';
+ }
+
+ function getPType(){
+ return 'block';
+ }
+
+ /**
+ * Where to sort in?
+ */
+ function getSort(){
+ return 138;
+ }
+
+ /**
+ * Connect pattern to lexer
+ */
+ function connectTo($mode) {
+ $this->Lexer->addSpecialPattern('{{indexmenu>.+?}}',$mode,'plugin_indexmenu_indexmenu');
+ }
+
+ /**
+ * Handle the match
+ */
+ function handle($match, $state, $pos, &$handler){
+ $theme="default";
+ $ns=".";
+ $level = -1;
+ $nons = true;
+ $gen_id='random';
+ $maxjs=0;
+ $max=0;
+ $jsajax='';
+ $nss=array();
+ $match = substr($match,12,-2);
+ //split namespace,level,theme
+ $match = preg_split('/\|/u', $match, 2);
+ //split options
+ $opts=preg_split('/ /u',$match[1]);
+ //Context option
+ $context = in_array('context',$opts);
+ //split optional namespaces
+ $nss_temp=preg_split("/ /u",$match[0],-1,PREG_SPLIT_NO_EMPTY);
+ //Array optional namespace => level
+ for ($i = 1; $i < count($nss_temp); $i++) {
+ $nsss=preg_split("/#/u",$nss_temp[$i]);
+ if (!$context) {
+ $nsss[0] = $this->_parse_ns($nsss[0]);
+ }
+ $nss[]=array($nsss[0],(is_numeric($nsss[1])) ? $nsss[1] : $level);
+ }
+ //split main requested namespace
+ if (preg_match('/(.*)#(\S*)/u',$nss_temp[0],$ns_opt)) {
+ //split level
+ $ns = $ns_opt[1];
+ if (is_numeric($ns_opt[2])) $level=$ns_opt[2];
+ } else {
+ $ns = $nss_temp[0];
+ }
+ if (!$context) {
+ $ns = $this->_parse_ns($ns);
+ }
+ //nocookie option (disable for uncached pages)
+ $nocookie=$context||in_array('nocookie',$opts);
+ //noscroll option
+ $noscroll=in_array('noscroll',$opts);
+ //Open at current namespace option
+ $navbar=in_array('navbar',$opts);
+ //no namespaces options
+ $nons = in_array('nons',$opts);
+ //no pages option
+ $nopg = in_array('nopg',$opts);
+ //disable toc preview
+ $notoc = in_array('notoc',$opts);
+ //Main sort method
+ if (in_array('tsort',$opts)) {
+ $sort='t';
+ } elseif (in_array('dsort',$opts)) {
+ $sort='d';
+ } else $sort=0;
+ //Directory sort
+ $nsort=in_array('nsort',$opts);
+ //Metadata sort method
+ if ($msort = in_array('msort',$opts)) {
+ $msort='indexmenu_n';
+ } elseif (preg_match('/msort#(\S+)/u',$match[1],$msort_tmp) >0) $msort=str_replace(':',' ',$msort_tmp[1]);
+ //reverse sort
+ $rsort=in_array('rsort',$opts);
+ //javascript option
+ if (!$js= in_array('js',$opts)) {
+ //split theme
+ if (preg_match('/js#(\S*)/u',$match[1],$tmp_theme) > 0) {
+ if (is_dir(INDEXMENU_IMG_ABSDIR."/".$tmp_theme[1])) {
+ $theme=$tmp_theme[1];
+ }
+ $js=true;
+ }
+ }
+ //id generation method
+ if (preg_match('/id#(\S+)/u',$match[1],$id) >0) $gen_id=$id[1];
+ //max option
+ if (preg_match('/max#(\d+)($|\s+|#(\d+))/u',$match[1],$maxtmp) >0) {
+ $max=$maxtmp[1];
+ if ($maxtmp[3]) $jsajax = "&max=".$maxtmp[3];
+ //disable cookie to avoid javascript errors
+ $nocookie=true;
+ }
+ if ($sort) $jsajax .= "&sort=".$sort;
+ if ($msort) $jsajax .= "&msort=".$msort;
+ if ($rsort) $jsajax .= "&rsort=1";
+ if ($nsort) $jsajax .= "&nsort=1";
+ if ($nopg) $jsajax .= "&nopg=1";
+ //max js option
+ if (preg_match('/maxjs#(\d+)/u',$match[1],$maxtmp) >0) $maxjs=$maxtmp[1];
+ //js options
+ $js_opts=compact('theme','gen_id','nocookie','navbar','noscroll','maxjs','notoc','jsajax','context');
+ return array($ns,
+ $js_opts,
+ $sort,
+ $msort,
+ $rsort,
+ $nsort,
+ array('level' => $level,
+ 'nons' => $nons,
+ 'nopg' => $nopg,
+ 'nss' => $nss,
+ 'max' => $max,
+ 'js' => $js,
+ 'skip_index' => $this->getConf('skip_index'),
+ 'skip_file' => $this->getConf('skip_file'),
+ 'headpage' => $this->getConf('headpage'),
+ 'hide_headpage' => $this->getConf('hide_headpage')
+ )
+ );
+ }
+
+ /**
+ * Render output
+ */
+ function render($mode, &$renderer, $data) {
+ global $ACT;
+ global $conf;
+ global $INFO;
+ if($mode == 'xhtml'){
+ if ($ACT == 'preview') {
+ //Check user permission to display indexmenu in a preview page
+ if( $this->getConf('only_admins') &&
+ $conf['useacl'] &&
+ $INFO['perm'] < AUTH_ADMIN)
+ return false;
+ //disable cookies
+ $data[1]['nocookie']=true;
+ }
+ //Navbar with nojs
+ if ($data[1]['navbar'] && !$data[6]['js']) {
+ if (!isset($data[0])) $data[0]='..';
+ $data[6]['nss'][]=array(getNS($INFO['id']));
+ $renderer->info['cache'] = FALSE;
+ }
+
+ if ($data[1]['context']) {
+ //resolve current id relative namespaces
+ $data[0]=$this->_parse_ns($data[0],$INFO['id']);
+ foreach ($data[6]['nss'] as $key=>$value) {
+ $data[6]['nss'][$key][0] = $this->_parse_ns($value[0],$INFO['id']);
+ }
+ $renderer->info['cache'] = FALSE;
+ }
+ $n = $this->_indexmenu($data);
+ if (!@$n) {
+ $n = $this->getConf('empty_msg');
+ $n = str_replace('{{ns}}',cleanID($data[0]),$n);
+ $n = p_render('xhtml',p_get_instructions($n),$info);
+ }
+ $renderer->doc .= $n;
+ return true;
+ } else if ($mode == 'metadata') {
+ if (!($data[1]['navbar'] && !$data[6]['js']) && !$data[1]['context']) {
+ //this is an indexmenu page that needs the PARSER_CACHE_USE event trigger;
+ $renderer->meta['indexmenu'] = TRUE;
+ }
+ $renderer->doc .= ((empty($data[0])) ? $conf['title'] : nons($data[0])) ." index\n\n";
+ unset($renderer->persistent['indexmenu']);
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * Return the index
+ * @author Samuele Tognini <samuele@netsons.org>
+ *
+ * This function is a simple hack of Dokuwiki html_index($ns)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _indexmenu($myns) {
+ global $conf;
+ $ns = $myns[0];
+ $js_opts=$myns[1];
+ $this->sort = $myns[2];
+ $this->msort = $myns[3];
+ $this->rsort = $myns[4];
+ $this->nsort = $myns[5];
+ $opts = $myns[6];
+ $output=false;
+ $data = array();
+ $js_name="indexmenu_";
+ $fsdir="/".utf8_encodeFN(str_replace(':','/',$ns));
+ if ($this->sort || $this->msort || $this->rsort) {
+ $custsrch=$this->_search($data,$conf['datadir'],array($this,'_search_index'),$opts,$fsdir);
+ } else {
+ search($data,$conf['datadir'],array($this,'_search_index'),$opts,$fsdir);
+ }
+ if (!$data) return false;
+
+ // Id generation method
+ if (is_numeric($js_opts['gen_id'])) {
+ $js_name .= $js_opts['gen_id'];
+ } elseif ($js_opts['gen_id'] == 'ns') {
+ $js_name .= sprintf("%u",crc32($ns));
+ } else {
+ $js_name .= uniqid(rand());
+ }
+
+ //javascript index
+ if ($opts['js']) {
+ $ns = str_replace('/',':',$ns);
+ $output_tmp=$this->_jstree($data,$ns,$js_opts,$js_name,$opts['max']);
+ //remove unwanted nodes from standard index
+ $this->_clean_data($data);
+ } else {
+ $output .= "<script type='text/javascript' charset='utf-8'>\n";
+ $output .= "<!--//--><![CDATA[//><!--\n";
+ $output .= "indexmenu_nojsqueue.push(new Array('".$js_name."','".utf8_encodeFN($js_opts['jsajax'])."'));\n";
+ $output .= "addInitEvent(function(){indexmenu_loadJs(DOKU_BASE+'lib/plugins/indexmenu/nojsindex.js');});\n";
+ $output .= "//--><!]]>\n";
+ $output .= "</script>\n";
+ }
+ //Nojs dokuwiki index
+ $output.="\n".'<div id="nojs_'.$js_name.'" class="indexmenu_nojs"';
+ $output.=">\n";
+ $output.=html_buildlist($data,'idx',array($this,"_html_list_index"),"html_li_index");
+ $output.="</div>\n";
+ $output.=$output_tmp;
+ return $output;
+ }
+
+ /**
+ * Build the browsable index of pages using javascript
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function _jstree($data,$ns,$js_opts,$js_name,$max) {
+ global $conf;
+ $hns=false;
+ if (empty($data)) return false;
+ //Render requested ns as root
+ $headpage=$this->getConf('headpage');
+ if (empty($ns) && !empty($headpage)) $headpage.=','.$conf['start'];
+ $title=$this->_getTitle($ns,$headpage,$hns);
+ if (empty($title)) {
+ (empty($ns)) ? $title = htmlspecialchars($conf['title'],ENT_QUOTES) : $title=$ns;
+ }
+ $out = "<script type='text/javascript' charset='utf-8'>\n";
+ $out .= "<!--//--><![CDATA[//><!--\n";
+ $out .= "var $js_name = new dTree('".$js_name."','".$js_opts['theme']."');\n";
+ $sepchar = idfilter(':');
+ $out .= "$js_name.config.urlbase='".substr(wl(":"), 0, -1)."';\n";
+ $out .= "$js_name.config.sepchar='".$sepchar."';\n";
+ if ($js_opts['notoc']) $out .="$js_name.config.toc=false;\n";
+ if ($js_opts['nocookie']) $out .="$js_name.config.useCookies=false;\n";
+ if ($js_opts['noscroll']) $out .="$js_name.config.scroll=false;\n";
+ if ($js_opts['maxjs'] > 0) $out .= "$js_name.config.maxjs=".$js_opts['maxjs'].";\n";
+ if (!empty($js_opts['jsajax'])) $out .= "$js_name.config.jsajax='".utf8_encodeFN($js_opts['jsajax'])."';\n";
+ $out .= $js_name.".add('".idfilter(cleanID($ns))."',0,-1,'".$title."'";
+ if ($hns) $out .= ",'".idfilter(cleanID($hns))."'";
+ $out .= ");\n";
+ $anodes = $this->_jsnodes($data,$js_name);
+ $out .= $anodes[0];
+ $out .= "document.write(".$js_name.");\n";
+ $out .= "addInitEvent(function(){".$js_name.".init(";
+ $out .= (int) is_file(INDEXMENU_IMG_ABSDIR.'/'.$js_opts['theme'].'/style.css').",";
+ $out .= (int) $js_opts['nocookie'].",";
+ $out .= '"'.$anodes[1].'",';
+ $out .= (int) $js_opts['navbar'].",$max";
+ $out .= ");});\n";
+ $out .= "//--><!]]>\n";
+ $out .= "</script>\n";
+ return $out;
+ }
+
+ /**
+ * Return array of javascript nodes and nodes to open.
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function _jsnodes($data,$js_name,$noajax=1) {
+ if (empty($data)) return false;
+ //Array of nodes to check
+ $q=array('0');
+ //Current open node
+ $node=0;
+ $out='';
+ $extra='';
+ if ($noajax) {
+ $jscmd=$js_name.".add";
+ $com=";\n";
+ } else {
+ $jscmd="new Array ";
+ $com=",";
+ }
+ foreach ($data as $i=>$item){
+ $i++;
+ //Remove already processed nodes (greater level = lower level)
+ while ($item['level'] <= $data[end($q)-1]['level']) {
+ array_pop($q);
+ }
+
+ //till i found its father node
+ if ($item['level']==1) {
+ //root node
+ $father='0';
+ } else {
+ //Father node
+ $father=end($q);
+ }
+ //add node and its options
+ if ($item['type'] == 'd' ) {
+ //Search the lowest open node of a tree branch in order to open it.
+ if ($item['open']) ($item['level'] < $data[$node]['level']) ? $node=$i : $extra .= "$i ";
+ //insert node in last position
+ array_push($q,$i);
+ }
+ $out .= $jscmd."('".idfilter($item['id'])."',$i,".$father.",'".$item['title']."'";
+ //hns
+ ($item['hns']) ? $out .= ",'".idfilter($item['hns'])."'" : $out .= ",0";
+ ($item['type'] == 'd' || $item['type']=='l') ? $out .= ",1" : $out .= ",0";
+ //MAX option
+ ($item['type']=='l') ? $out .= ",1" : $out .= ",0";
+ $out .= ")".$com;
+ }
+ $extra=rtrim($extra,' ');
+ return array($out,$extra);
+ }
+ /**
+ * Get page title, checking for headpages
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function _getTitle ($ns,$headpage,&$hns) {
+ global $conf;
+ $hns=false;
+ $title=noNS($ns);
+ if (empty($headpage)) return $title;
+ $ahp=explode(",",$headpage);
+ foreach ($ahp as $hp) {
+ switch ($hp) {
+ case ":inside:":
+ $page=$ns.":".noNS($ns);
+ break;
+ case ":same:":
+ $page=$ns;
+ break;
+ //it's an inside start
+ case ":start:":
+ $page=ltrim($ns.":".$conf['start'],":");
+ break;
+ //inside pages
+ default:
+ $page=$ns.":".$hp;
+ }
+ //check headpage
+ if (@file_exists(wikiFN($page)) && auth_quickaclcheck($page) >= AUTH_READ) {
+ if ($conf['useheading'] && $title_tmp=p_get_first_heading($page,FALSE)) $title=$title_tmp;
+ $title=htmlspecialchars($title,ENT_QUOTES);
+ $hns=$page;
+ //headpage found, exit for
+ break;
+ }
+ }
+ return $title;
+ }
+
+ /**
+ * Parse namespace request
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function _parse_ns ($ns,$id=FALSE) {
+ if (!$id) {
+ global $ID;
+ $id = $ID;
+ }
+ //Just for old reelases compatibility
+ if (empty($ns) || $ns == '..') $ns=":..";
+ return resolve_id(getNS($id),$ns);
+ }
+
+ /**
+ * Clean index data from unwanted nodes in nojs mode.
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function _clean_data(&$data) {
+ foreach ($data as $i=>$item) {
+ //closed node
+ if ($item['type'] == "d" && !$item['open']) {
+ $a=$i+1;
+ $level=$data[$i]['level'];
+ //search and remove every lower and closed nodes
+ while ($data[$a]['level'] > $level && !$data[$a]['open']) {
+ unset($data[$a]);
+ $a++;
+ }
+ }
+ $i++;
+ }
+ }
+
+ /**
+ * Build the browsable index of pages
+ *
+ * $opts['ns'] is the current namespace
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * modified by Samuele Tognini <samuele@netsons.org>
+ */
+ function _search_index(&$data,$base,$file,$type,$lvl,$opts){
+ global $conf;
+ $hns=false;
+ $return=false;
+ $isopen=false;
+ $skip_index=$opts['skip_index'];
+ $skip_file=$opts['skip_file'];
+ $headpage=$opts['headpage'];
+ $id = pathID($file);
+ if($type == 'd'){
+ // Skip folders in plugin conf
+ if (!empty($skip_index) &&
+ preg_match($skip_index, $id))
+ return false;
+ //check ACL (for sneaky_index namespaces too).
+ if ($this->getConf('sneaky_index') && auth_quickaclcheck($id.':') < AUTH_READ) return false;
+ //Open requested level
+ if ($opts['level'] > $lvl || $opts['level'] == -1) $isopen=true;
+ //Search optional namespaces
+ if (!empty($opts['nss'])){
+ $nss=$opts['nss'];
+ for ($a=0; $a<count($nss);$a++) {
+ if (preg_match("/^".$id."($|:.+)/i",$nss[$a][0],$match)) {
+ //It contains an optional namespace
+ $isopen=true;
+ } elseif (preg_match("/^".$nss[$a][0]."(:.*)/i",$id,$match)) {
+ //It's inside an optional namespace
+ if ($nss[$a][1] == -1 || substr_count($match[1],":") < $nss[$a][1]) {
+ $isopen=true;
+ } else {
+ $isopen=false;
+ }
+ }
+ }
+ }
+ if ($opts['nons']) {
+ return $isopen;
+ } elseif ($opts['max'] >0 && !$isopen && $lvl >= $opts['max']) {
+ $isopen=false;
+ //Stop recursive searching
+ $return=false;
+ //change type
+ $type="l";
+ } elseif ($opts['js']) {
+ $return=true;
+ } else {
+ $return=$isopen;
+ }
+ //Set title and headpage
+ $title=$this->_getTitle($id,$headpage,$hns);
+ if (!$hns && $opts['nopg']) $hns=$id.":".$conf['start'];
+ } else {
+ //Nopg.Dont show pages
+ if ($opts['nopg']) return false;
+ $return=true;
+ //Nons.Set all pages at first level
+ if ($opts['nons']) $lvl=1;
+ //don't add
+ if (substr($file,-4) != '.txt') return false;
+ //check hiddens and acl
+ if (isHiddenPage($id) || auth_quickaclcheck($id) < AUTH_READ) return false;
+ //Skip files in plugin conf
+ if (!empty($skip_file) &&
+ preg_match($skip_file, $id))
+ return false;
+ //Skip headpages to hide
+ if (!$opts['nons'] &&
+ !empty($headpage) &&
+ $opts['hide_headpage']) {
+ if ($id==$conf['start']) return false;
+ $ahp=explode(",",$headpage);
+ foreach ($ahp as $hp) {
+ switch ($hp) {
+ case ":inside:":
+ if (noNS($id)==noNS(getNS($id))) return false;
+ break;
+ case ":same:":
+ if (@is_dir(dirname(wikiFN($id))."/".utf8_encodeFN(noNS($id)))) return false;
+ break;
+ //it' s an inside start
+ case ":start:":
+ if (noNS($id)==$conf['start']) return false;
+ break;
+ default:
+ if (noNS($id)==cleanID($hp)) return false;
+ }
+ }
+ }
+ //Set title
+ if (!$conf['useheading'] || !$title=p_get_first_heading($id,FALSE)) $title=noNS($id);
+ $title=htmlspecialchars($title,ENT_QUOTES);
+ }
+
+ $item = array( 'id' => $id,
+ 'type' => $type,
+ 'level' => $lvl,
+ 'open' => $isopen,
+ 'title' => $title,
+ 'hns' => $hns,
+ 'file' => $file,
+ 'return' => $return
+ );
+ $item['sort'] = $this->_setorder($item);
+ $data[] = $item;
+ return $return;
+ }
+
+
+ /**
+ * Index item formatter
+ *
+ * User function for html_buildlist()
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * modified by Samuele Tognini <samuele@netsons.org>
+ */
+ function _html_list_index($item){
+ $ret = '';
+ //namespace
+ if($item['type']=='d' || $item['type']=='l'){
+ $link=$item['id'];
+ $more='idx='.$item['id'];
+ //namespace link
+ if ($item['hns']) {
+ $link=$item['hns'];
+ $tagid="indexmenu_idx_head";
+ $more='';
+ } else {
+ //namespace with headpage
+ $tagid="indexmenu_idx";
+ if ($item['open']) $tagid.=' open';
+ }
+ $ret .= '<a href="'.wl($link,$more).'" class="'.$tagid.'">';
+ $ret .= $item['title'];
+ $ret .= '</a>';
+ }else{
+ //page link
+ $ret .= html_wikilink(':'.$item['id']);
+ }
+ return $ret;
+ }
+
+
+ /**
+ * recurse direcory
+ *
+ * This function recurses into a given base directory
+ * and calls the supplied function for each file and directory
+ *
+ * @param array ref $data The results of the search are stored here
+ * @param string $base Where to start the search
+ * @param callback $func Callback (function name or arayy with object,method)
+ * @param string $dir Current directory beyond $base
+ * @param int $lvl Recursion Level
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * modified by Samuele Tognini <samuele@netsons.org>
+ */
+ function _search(&$data,$base,$func,$opts,$dir='',$lvl=1){
+ $dirs = array();
+ $files = array();
+ $files_tmp=array();
+ $dirs_tmp=array();
+
+ //read in directories and files
+ $dh = @opendir($base.'/'.$dir);
+ if(!$dh) return;
+ while(($file = readdir($dh)) !== false){
+ //skip hidden files and upper dirs
+ if(preg_match('/^[\._]/',$file)) continue;
+ if(is_dir($base.'/'.$dir.'/'.$file)){
+ $dirs[] = $dir.'/'.$file;
+ continue;
+ }
+ $files[] = $dir.'/'.$file;
+ }
+ closedir($dh);
+ //Sort dirs
+ if ($this->nsort) {
+ foreach($dirs as $dir){
+ search_callback($func,$dirs_tmp,$base,$dir,'d',$lvl,$opts);
+ }
+ usort($dirs_tmp,array($this,"_cmp"));
+ foreach ($dirs_tmp as $dir) {
+ $data[]=$dir;
+ if ($dir['return']) $this->_search($data,$base,$func,$opts,$dir['file'],$lvl+1);
+ }
+ } else {
+ sort($dirs);
+ foreach($dirs as $dir){
+ if (search_callback($func,$data,$base,$dir,'d',$lvl,$opts)) $this->_search($data,$base,$func,$opts,$dir,$lvl+1);
+ }
+ }
+ //Sort files
+ foreach($files as $file){
+ search_callback($func,$files_tmp,$base,$file,'f',$lvl,$opts);
+ }
+ usort($files_tmp,array($this,"_cmp"));
+ if (empty($dirs) && empty($files_tmp)) {
+ $v=end($data);
+ if (!$v['hns']) array_pop($data);
+ } else {
+ $data=array_merge($data,$files_tmp);
+ }
+ return true;
+ }
+
+ /**
+ * Sort nodes
+ *
+ */
+ function _cmp($a, $b) {
+ if ($this->rsort) {
+ return strnatcasecmp($b['sort'], $a['sort']);
+ } else {
+ return strnatcasecmp($a['sort'], $b['sort']);
+ }
+ }
+
+
+ /**
+ * Add sort information to item.
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function _setorder($item) {
+ $sort=false;
+ if ($item['type']=='d') {
+ //Fake order info when nsort is not requested
+ ($this->nsort) ? $page=$item['hns'] : $sort=0;
+ }
+ if ($item['type']=='f') $page=$item['id'];
+ if ($page) {
+ if ($this->msort) $sort=p_get_metadata($page,$this->msort);
+ if (!$sort && $this->sort) {
+ switch ($this->sort) {
+ case 't':
+ $sort=$item['title'];
+ break;
+ case 'd':
+ $sort=@filectime(wikiFN($page));
+ break;
+ }
+ }
+ }
+ if ($sort===false) $sort=noNS($item['id']);
+ return $sort;
+ }
+} //Indexmenu class end
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/syntax/tag.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/syntax/tag.php
new file mode 100644
index 000000000..962f7efca
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/syntax/tag.php
@@ -0,0 +1,70 @@
+<?php
+
+/**
+ * Info Indexmenu tag: Tag a page with a sort number.
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Samuele Tognini <samuele@netsons.org>
+ *
+ */
+
+if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/');
+if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
+require_once(DOKU_PLUGIN.'syntax.php');
+
+/**
+ * All DokuWiki plugins to extend the parser/rendering mechanism
+ * need to inherit from this class
+ */
+class syntax_plugin_indexmenu_tag extends DokuWiki_Syntax_Plugin {
+
+ /**
+ * return some info
+ */
+ function getInfo(){
+ return array(
+ 'author' => 'Samuele Tognini',
+ 'email' => 'samuele@netsons.org',
+ 'date' => rtrim(io_readFile(DOKU_PLUGIN.'indexmenu/VERSION.txt')),
+ 'name' => 'Indexmenu tag',
+ 'desc' => 'Indexmenu tag plugin.',
+ 'url' => 'http://wiki.splitbrain.org/plugin:indexmenu'
+ );
+ }
+
+ /**
+ * What kind of syntax are we?
+ */
+ function getType(){
+ return 'substition';
+ }
+
+ /**
+ * Where to sort in?
+ */
+ function getSort(){
+ return 139;
+ }
+
+ /**
+ * Connect pattern to lexer
+ */
+ function connectTo($mode) {
+ $this->Lexer->addSpecialPattern('{{indexmenu_n>.+?}}',$mode,'plugin_indexmenu_tag');
+ }
+
+ /**
+ * Handle the match
+ */
+ function handle($match, $state, $pos, &$handler){
+ $match = substr($match,14,-2);
+ return array($match);
+ }
+
+ /**
+ * Render output
+ */
+ function render($mode, &$renderer, $data) {
+ if (is_numeric($data[0])) $renderer->meta['indexmenu_n'] = $data[0];;
+ }
+} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/info/syntax.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/info/syntax.php
new file mode 100644
index 000000000..dc0a7d2fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/info/syntax.php
@@ -0,0 +1,259 @@
+<?php
+/**
+ * Info Plugin: Displays information about various DokuWiki internals
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Esther Brunner <wikidesign@gmail.com>
+ */
+// must be run within Dokuwiki
+if(!defined('DOKU_INC')) die();
+
+if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
+require_once(DOKU_PLUGIN.'syntax.php');
+
+/**
+ * All DokuWiki plugins to extend the parser/rendering mechanism
+ * need to inherit from this class
+ */
+class syntax_plugin_info extends DokuWiki_Syntax_Plugin {
+
+ /**
+ * return some info
+ */
+ function getInfo(){
+ return array(
+ 'author' => 'Andreas Gohr',
+ 'email' => 'andi@splitbrain.org',
+ 'date' => '2008-09-12',
+ 'name' => 'Info Plugin',
+ 'desc' => 'Displays information about various DokuWiki internals',
+ 'url' => 'http://dokuwiki.org/plugin:info',
+ );
+ }
+
+ /**
+ * What kind of syntax are we?
+ */
+ function getType(){
+ return 'substition';
+ }
+
+ /**
+ * What about paragraphs?
+ */
+ function getPType(){
+ return 'block';
+ }
+
+ /**
+ * Where to sort in?
+ */
+ function getSort(){
+ return 155;
+ }
+
+
+ /**
+ * Connect pattern to lexer
+ */
+ function connectTo($mode) {
+ $this->Lexer->addSpecialPattern('~~INFO:\w+~~',$mode,'plugin_info');
+ }
+
+
+ /**
+ * Handle the match
+ */
+ function handle($match, $state, $pos, &$handler){
+ $match = substr($match,7,-2); //strip ~~INFO: from start and ~~ from end
+ return array(strtolower($match));
+ }
+
+ /**
+ * Create output
+ */
+ function render($format, &$renderer, $data) {
+ if($format == 'xhtml'){
+ //handle various info stuff
+ switch ($data[0]){
+ case 'version':
+ $renderer->doc .= getVersion();
+ break;
+ case 'syntaxmodes':
+ $renderer->doc .= $this->_syntaxmodes_xhtml();
+ break;
+ case 'syntaxtypes':
+ $renderer->doc .= $this->_syntaxtypes_xhtml();
+ break;
+ case 'syntaxplugins':
+ $this->_plugins_xhtml('syntax', $renderer);
+ break;
+ case 'adminplugins':
+ $this->_plugins_xhtml('admin', $renderer);
+ break;
+ case 'actionplugins':
+ $this->_plugins_xhtml('action', $renderer);
+ break;
+ case 'rendererplugins':
+ $this->_plugins_xhtml('renderer', $renderer);
+ break;
+ case 'helperplugins':
+ $this->_plugins_xhtml('helper', $renderer);
+ break;
+ case 'helpermethods':
+ $this->_helpermethods_xhtml($renderer);
+ break;
+ default:
+ $renderer->doc .= "no info about ".htmlspecialchars($data[0]);
+ }
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * list all installed plugins
+ *
+ * uses some of the original renderer methods
+ */
+ function _plugins_xhtml($type, &$renderer){
+ global $lang;
+ $renderer->doc .= '<ul>';
+
+ $plugins = plugin_list($type);
+ $plginfo = array();
+
+ // remove subparts
+ foreach($plugins as $p){
+ if (!$po =& plugin_load($type,$p)) continue;
+ list($name,$part) = explode('_',$p,2);
+ $plginfo[$name] = $po->getInfo();
+ }
+
+ // list them
+ foreach($plginfo as $info){
+ $renderer->doc .= '<li><div class="li">';
+ $renderer->externallink($info['url'],$info['name']);
+ $renderer->doc .= ' ';
+ $renderer->doc .= '<em>'.$info['date'].'</em>';
+ $renderer->doc .= ' ';
+ $renderer->doc .= $lang['by'];
+ $renderer->doc .= ' ';
+ $renderer->emaillink($info['email'],$info['author']);
+ $renderer->doc .= '<br />';
+ $renderer->doc .= strtr(hsc($info['desc']),array("\n"=>"<br />"));
+ $renderer->doc .= '</div></li>';
+ unset($po);
+ }
+
+ $renderer->doc .= '</ul>';
+ }
+
+ /**
+ * list all installed plugins
+ *
+ * uses some of the original renderer methods
+ */
+ function _helpermethods_xhtml(&$renderer){
+ global $lang;
+
+ $plugins = plugin_list('helper');
+ foreach($plugins as $p){
+ if (!$po =& plugin_load('helper',$p)) continue;
+
+ if (!method_exists($po, 'getMethods')) continue;
+ $methods = $po->getMethods();
+ $info = $po->getInfo();
+
+ $hid = $this->_addToTOC($info['name'], 2, $renderer);
+ $doc = '<h2><a name="'.$hid.'" id="'.$hid.'">'.hsc($info['name']).'</a></h2>';
+ $doc .= '<div class="level2">';
+ $doc .= '<p>'.strtr(hsc($info['desc']), array("\n"=>"<br />")).'</p>';
+ $doc .= '<pre class="code">$'.$p." =& plugin_load('helper', '".$p."');</pre>";
+ $doc .= '</div>';
+ foreach ($methods as $method){
+ $title = '$'.$p.'->'.$method['name'].'()';
+ $hid = $this->_addToTOC($title, 3, $renderer);
+ $doc .= '<h3><a name="'.$hid.'" id="'.$hid.'">'.hsc($title).'</a></h3>';
+ $doc .= '<div class="level3">';
+ $doc .= '<table class="inline"><tbody>';
+ $doc .= '<tr><th>Description</th><td colspan="2">'.$method['desc'].
+ '</td></tr>';
+ if ($method['params']){
+ $c = count($method['params']);
+ $doc .= '<tr><th rowspan="'.$c.'">Parameters</th><td>';
+ $params = array();
+ foreach ($method['params'] as $desc => $type){
+ $params[] = hsc($desc).'</td><td>'.hsc($type);
+ }
+ $doc .= join($params, '</td></tr><tr><td>').'</td></tr>';
+ }
+ if ($method['return']){
+ $doc .= '<tr><th>Return value</th><td>'.hsc(key($method['return'])).
+ '</td><td>'.hsc(current($method['return'])).'</td></tr>';
+ }
+ $doc .= '</tbody></table>';
+ $doc .= '</div>';
+ }
+ unset($po);
+
+ $renderer->doc .= $doc;
+ }
+ }
+
+ /**
+ * lists all known syntax types and their registered modes
+ */
+ function _syntaxtypes_xhtml(){
+ global $PARSER_MODES;
+ $doc = '';
+
+ $doc .= '<table class="inline"><tbody>';
+ foreach($PARSER_MODES as $mode => $modes){
+ $doc .= '<tr>';
+ $doc .= '<td class="leftalign">';
+ $doc .= $mode;
+ $doc .= '</td>';
+ $doc .= '<td class="leftalign">';
+ $doc .= join(', ',$modes);
+ $doc .= '</td>';
+ $doc .= '</tr>';
+ }
+ $doc .= '</tbody></table>';
+ return $doc;
+ }
+
+ /**
+ * lists all known syntax modes and their sorting value
+ */
+ function _syntaxmodes_xhtml(){
+ $modes = p_get_parsermodes();
+ $doc = '';
+
+ foreach ($modes as $mode){
+ $doc .= $mode['mode'].' ('.$mode['sort'].'), ';
+ }
+ return $doc;
+ }
+
+ /**
+ * Adds a TOC item
+ */
+ function _addToTOC($text, $level, &$renderer){
+ global $conf;
+
+ if (($level >= $conf['toptoclevel']) && ($level <= $conf['maxtoclevel'])){
+ $hid = $renderer->_headerToLink($text, 'true');
+ $renderer->toc[] = array(
+ 'hid' => $hid,
+ 'title' => $text,
+ 'type' => 'ul',
+ 'level' => $level - $conf['toptoclevel'] + 1
+ );
+ }
+ return $hid;
+ }
+}
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/important.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/important.png
new file mode 100644
index 000000000..dc8c8a457
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/important.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/note.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/note.png
new file mode 100644
index 000000000..df1e0a926
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/note.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_important.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_important.png
new file mode 100644
index 000000000..d853518de
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_important.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_note.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_note.png
new file mode 100644
index 000000000..f5c931603
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_note.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_tip.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_tip.png
new file mode 100644
index 000000000..f127e91c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_tip.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_warning.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_warning.png
new file mode 100644
index 000000000..892c83393
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_warning.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tip.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tip.png
new file mode 100644
index 000000000..2000f2085
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tip.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/warning.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/warning.png
new file mode 100644
index 000000000..3c8a37df5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/warning.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/info.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/info.txt
new file mode 100644
index 000000000..5226345f4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/info.txt
@@ -0,0 +1,8 @@
+# General Plugin Info do not edit
+
+author Olivier Cortès / Eric Hameleers / Christopher Smith / Aurélien Bompard
+email olive@deep-ocean.net
+date 2009-06-15
+name Note Plugin
+desc Add Note/Important/Tip/Warning Capability (DIV+CSS box)
+url http://www.dokuwiki.org/plugin:note
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/script.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/script.js
new file mode 100644
index 000000000..c21120727
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/script.js
@@ -0,0 +1,36 @@
+/* Add Note buttons to the toolbar */
+/* from http://wiki.splitbrain.org/wiki:tips:toolbarbutton */
+
+/* Disabled because this does not allow to select a text and turn it into a note like the type:format does
+var notes_arr = new Array(); // key = insertion string , value = icon filename.
+notes_arr['<note></note>\\n']='tb_note.png';
+notes_arr['<note tip></note>\\n']='tb_tip.png';
+notes_arr['<note important></note>\\n']='tb_important.png';
+notes_arr['<note warning></note>\\n']='tb_warning.png';
+
+toolbar[toolbar.length] = {"type":"picker",
+ "title":"Notes",
+ "icon":"../../plugins/note/images/tb_note.png",
+ "key":"",
+ "list": notes_arr,
+ "icobase":"../plugins/note/images"};
+*/
+
+if(toolbar){
+ toolbar[toolbar.length] = {"type":"format", "title":"note", "key":"",
+ "icon":"../../plugins/note/images/tb_note.png",
+ "open":"<note>", "close":"</note>"
+ };
+ toolbar[toolbar.length] = {"type":"format", "title":"tip", "key":"",
+ "icon":"../../plugins/note/images/tb_tip.png",
+ "open":"<note tip>", "close":"</note>"
+ };
+ toolbar[toolbar.length] = {"type":"format", "title":"important", "key":"",
+ "icon":"../../plugins/note/images/tb_important.png",
+ "open":"<note important>", "close":"</note>"
+ };
+ toolbar[toolbar.length] = {"type":"format", "title":"warning", "key":"",
+ "icon":"../../plugins/note/images/tb_warning.png",
+ "open":"<note warning>", "close":"</note>"
+ };
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/style.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/style.css
new file mode 100644
index 000000000..8b97dea06
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/style.css
@@ -0,0 +1,41 @@
+.noteclassic, .noteimportant, .notewarning, .notetip {
+ margin: 2em;
+ margin-left: auto;
+ margin-right: auto;
+ width: 70% !important;
+ min-height: 40px;
+ clear: both;
+ text-align: justify;
+ vertical-align: middle;
+ border-collapse: collapse;
+ padding: 15px 20px 15px 80px;
+ background-position: 20px 50%;
+ background-repeat: no-repeat;
+ -moz-border-radius: 20px;
+ -khtml-border-radius: 20px;
+ border-radius: 20px;
+}
+
+.noteclassic {
+ /*border: 1px solid #99D;*/
+ background-color: #eef;
+ background-image: url(images/note.png);
+}
+
+.noteimportant {
+ /*border: 1px solid #ff0;*/
+ background-color: #ffc;
+ background-image: url(images/important.png);
+}
+
+.notewarning {
+ /*border: 1px solid #d99;*/
+ background-color: #fdd;
+ background-image: url(images/warning.png);
+}
+
+.notetip {
+ /*border: 1px solid #9d9;*/
+ background-color: #dfd;
+ background-image: url(images/tip.png);
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/syntax.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/syntax.php
new file mode 100644
index 000000000..368d0d412
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/syntax.php
@@ -0,0 +1,191 @@
+<?php
+/**
+ * Add Note capability to dokuwiki
+ *
+ * <note>This is note</note>
+ * <note classic>This is note</note>
+ * <note important>This is an important note</note>
+ * <note warning>This is a big warning</note>
+ * <note tip>This is a tip</note>
+ *
+ * by Olivier Cortès <olive@deep-ocean.net>
+ * under the terms of the GNU GPL v2.
+ *
+ * Originaly derived from the work of :
+ * Stephane Chamberland <stephane.chamberland@ec.gc.ca> (Side Notes PlugIn)
+ * Carl-Christian Salvesen <calle@ioslo.net> (Graphviz plugin)
+ *
+ * Contributions by Eric Hameleers <alien [at] slackware [dot] com> :
+ * use <div> instead of <table>,
+ * contain the images and stylesheet inside the plugin,
+ * permit nesting of notes,
+ *
+ * Contributed by Christopher Smith <chris [at] jalakai [dot] co [dot] uk>
+ * fix some parsing problems and a security hole.
+ * make note types case independent
+ * simplify code reading
+ * modernise the plugin for changes/fixes/improvements to the underlying Dokuwiki plugin class,
+ * improve efficiency.
+ *
+ * Contributed by Aurélien Bompard <aurelien [at] bompard [dot] org>
+ * support for the ODT output format.
+ *
+ * @license GNU_GPL_v2
+ * @author Olivier Cortes <olive@deep-ocean.net>
+ */
+
+if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/');
+if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
+require_once(DOKU_PLUGIN.'syntax.php');
+
+
+class syntax_plugin_note extends DokuWiki_Syntax_Plugin {
+
+ var $notes = array(
+ 'noteimportant' => array('important', 'importante'),
+ 'notewarning' => array('warning','bloquante','critique'),
+ 'notetip' => array('tip','tuyau','idée'),
+ 'noteclassic' => array('','classic','classique')
+ );
+
+ var $default = 'noteclassic';
+
+ function getInfo(){
+ return confToHash(dirname(__FILE__).'/info.txt');
+ }
+
+
+ function getType(){ return 'container'; }
+ function getPType(){ return 'normal'; }
+ function getAllowedTypes() {
+ return array('container','substition','protected','disabled','formatting','paragraphs');
+ }
+ function getSort(){ return 195; }
+
+ // override default accepts() method to allow nesting
+ // - ie, to get the plugin accepts its own entry syntax
+ function accepts($mode) {
+ if ($mode == substr(get_class($this), 7)) return true;
+ return parent::accepts($mode);
+ }
+
+ function connectTo($mode) {
+ $this->Lexer->addEntryPattern('<note.*?>(?=.*?</note>)',$mode,'plugin_note');
+ }
+ function postConnect() {
+ $this->Lexer->addExitPattern('</note>','plugin_note');
+ }
+
+ function handle($match, $state, $pos, &$handler){
+
+ switch ($state) {
+
+ case DOKU_LEXER_ENTER :
+ $note = strtolower(trim(substr($match,5,-1)));
+
+ foreach( $this->notes as $class => $names ) {
+ if (in_array($note, $names))
+ return array($state, $class);
+ }
+
+ return array($state, $this->default);
+
+ case DOKU_LEXER_UNMATCHED :
+ return array($state, $match);
+
+ default:
+ return array($state);
+ }
+ }
+
+ function render($mode, &$renderer, $indata) {
+
+ if($mode == 'xhtml'){
+
+ list($state, $data) = $indata;
+
+ switch ($state) {
+ case DOKU_LEXER_ENTER :
+ $renderer->doc .= '<p><div class="'.$data.'">';
+ break;
+
+ case DOKU_LEXER_UNMATCHED :
+ $renderer->doc .= $renderer->_xmlEntities($data);
+ break;
+
+ case DOKU_LEXER_EXIT :
+ $renderer->doc .= "\n</div></p>";
+ break;
+ }
+ return true;
+
+ } elseif ($mode == 'odt'){
+
+ list($state, $data) = $indata;
+
+ switch ($state) {
+ case DOKU_LEXER_ENTER :
+ $type = substr($data, 4);
+ if ($type == "classic") {
+ $type = "note"; // the icon for classic notes is named note.png
+ }
+ $colors = array("note"=>"#eeffff", "warning"=>"#ffdddd", "important"=>"#ffffcc", "tip"=>"#ddffdd");
+ $renderer->autostyles["pluginnote"] = '
+ <style:style style:name="pluginnote" style:family="table">
+ <style:table-properties style:width="15cm" table:align="center" style:shadow="#808080 0.18cm 0.18cm"/>
+ </style:style>';
+ $renderer->autostyles["pluginnote.A"] = '
+ <style:style style:name="pluginnote.A" style:family="table-column">
+ <style:table-column-properties style:column-width="1.5cm"/>
+ </style:style>';
+ $renderer->autostyles["pluginnote.B"] = '
+ <style:style style:name="pluginnote.B" style:family="table-column">
+ <style:table-column-properties style:column-width="13.5cm"/>
+ </style:style>';
+ $renderer->autostyles["pluginnote".$type.".A1"] = '
+ <style:style style:name="pluginnote'.$type.'.A1" style:family="table-cell">
+ <style:table-cell-properties style:vertical-align="middle" fo:padding="0.1cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000" fo:background-color="'.$colors[$type].'"/>
+ </style:style>';
+ $renderer->autostyles["pluginnote".$type.".B1"] = '
+ <style:style style:name="pluginnote'.$type.'.B1" style:family="table-cell">
+ <style:table-cell-properties style:vertical-align="middle" fo:padding="0.3cm" fo:border-left="none" fo:border-right="0.002cm solid #000000" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000" fo:background-color="'.$colors[$type].'"/>
+ </style:style>';
+ // Content
+ $renderer->p_close();
+ $renderer->doc .= '<table:table table:name="" table:style-name="pluginnote">';
+ $renderer->doc .= '<table:table-column table:style-name="pluginnote.A"/>';
+ $renderer->doc .= '<table:table-column table:style-name="pluginnote.B"/>';
+ $renderer->doc .= '<table:table-row>';
+ $renderer->doc .= '<table:table-cell table:style-name="pluginnote'.$type.'.A1" office:value-type="string">';
+ // Don't use p_open, as it's not the same style-name
+ $renderer->doc .= '<text:p text:style-name="Table_20_Contents">';
+ $src = DOKU_PLUGIN."note/images/".$type.".png";
+ $renderer->_odtAddImage($src);
+ $renderer->doc .= '</text:p>';
+ $renderer->doc .= '</table:table-cell>';
+ $renderer->doc .= '<table:table-cell table:style-name="pluginnote'.$type.'.B1" office:value-type="string">';
+ $renderer->p_open();
+ break;
+
+ case DOKU_LEXER_UNMATCHED :
+ $renderer->cdata($data);
+ break;
+
+ case DOKU_LEXER_EXIT :
+ $renderer->p_close();
+ $renderer->doc .= '</table:table-cell>';
+ $renderer->doc .= '</table:table-row>';
+ $renderer->doc .= '</table:table>';
+ $renderer->p_open();
+ break;
+ }
+ return true;
+ }
+
+ // unsupported $mode
+ return false;
+ }
+}
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/ChangeLog.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/ChangeLog.txt
new file mode 100644
index 000000000..4c9835a1d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/ChangeLog.txt
@@ -0,0 +1,255 @@
+2010-07-17 Aurélien Bompard <aurelien@bompard.org>
+
+ * action.php, syntax.php: Better handling of the cache system The
+ template used for the ODT export is now added in the page's
+ dependencies, so the cached ODT page will not be used if the
+ template has been updated.
+
+2010-05-24 Aurélien Bompard <aurelien@bompard.org>
+
+ * lang/ru/lang.php, lang/ru/settings.php: Add translation by Yuri
+ Timofeev
+
+2010-05-12 Aurélien Bompard <aurelien@bompard.org>
+
+ * lang/zh/lang.php, lang/zh/settings.php: Add Chinese translation by
+ lainme
+
+2010-04-04 Aurélien Bompard <aurelien@bompard.org>
+
+ * ChangeLog, ChangeLog.txt: Add .txt to the ChangeLog for our
+ Windows-based friends
+
+2010-04-04 Aurélien Bompard <aurelien@bompard.org>
+
+ * ChangeLog: Cleanup changelog
+
+2010-04-04 Aurélien Bompard <aurelien@bompard.org>
+
+ * renderer.php: Fix a small syntax error
+
+2010-04-04 Aurélien Bompard <aurelien@bompard.org>
+
+ * renderer.php: Better tag replacement in the template ODT file
+
+2010-04-04 Aurélien Bompard <aurelien@bompard.org>
+
+ * README.txt, info.txt: Prepare for a new release
+
+2010-04-04 Aurélien Bompard <aurelien@bompard.org>
+
+ * renderer.php: Add options to cut off a part of the ODT template
+ In an ODT file, the only styles that will be saved are the styles
+ which are applied to some content in the document. If you want to
+ create an empty ODT document for this plugin, and still want to
+ define styles which will be applied to the wiki content, you have to
+ write some dummy text, apply the styles to this text, and surround
+ the text in the DOKUWIKI-ODT-CUT-START and DOKUWIKI-ODT-CUT-STOP
+ tags. This way, the styles will be retained in the ODT file, but the
+ dummy text will be removed on export.
+
+2010-04-04 Aurélien Bompard <aurelien@bompard.org>
+
+ * renderer.php: Better tag replacement in the template ODT file
+
+2010-04-04 Aurélien Bompard <aurelien@bompard.org>
+
+ * renderer.php: Better tag replacement in the template ODT file
+
+2010-04-04 Aurélien Bompard <aurelien@bompard.org>
+
+ * renderer.php: replace with unicode entities instead of HTML (not
+ always defined)
+
+2009-08-15 Martin Braure de Calignon <braure@free.fr>
+
+ * syntax.php: Fix button link to export old revisions
+
+2009-07-02 Aurélien Bompard <aurelien@bompard.org>
+
+ * ChangeLog, info.txt: prepare for release
+
+2009-07-02 Aurélien Bompard <aurelien@bompard.org>
+
+ * ChangeLog, renderer.php: Fixes from Andy Webber (thanks !)
+
+2009-06-07 Aurélien Bompard <aurelien@bompard.org>
+
+ * ChangeLog, renderer.php: use $['savedir'] as suggested on the wiki
+ page
+
+2009-06-07 Aurélien Bompard <aurelien@bompard.org>
+
+ * ChangeLog, info.txt: release
+
+2009-06-07 Aurélien Bompard <aurelien@bompard.org>
+
+ * renderer.php: add patch by Korsani
+
+2009-06-07 Aurélien Bompard <aurelien@bompard.org>
+
+ * renderer.php: typo
+
+2009-02-11 Aurélien Bompard <aurelien@bompard.org>
+
+ * info.txt, renderer.php: Make the renderer class a singleton Only
+ make a single instance of the renderer. This is needed for Dokuwiki
+ >= rc2009-02-06. For details, see:
+ http://bugs.splitbrain.org/index.php?do=details&task_id=1598
+
+2009-02-09 Aurélien Bompard <aurelien@bompard.org>
+
+ * renderer.php: Revert "Create zipper on-demand" This reverts
+ commit 5e746e84b62fb0fdcd5607d7f9abc636a7710e2e.
+
+2009-02-08 Aurélien Bompard <aurelien@bompard.org>
+
+ * renderer.php: Create zipper on-demand
+
+2009-01-15 Aurélien Bompard <aurelien@bompard.org>
+
+ * ChangeLog, info.txt: prepare for new release
+
+2009-01-15 Aurélien Bompard <aurelien@bompard.org>
+
+ * ChangeLog, renderer.php: don't compress mimetype declaration
+
+2008-11-11 Aurélien Bompard <aurelien@bompard.org>
+
+ * renderer.php: more safeguards. wiki:syntax now passes validators
+
+2008-09-28 Aurélien Bompard <aurelien@bompard.org>
+
+ * lang/ja/lang.php, lang/ja/settings.php: Add Japanese translation
+ from Ikuo Obataya. Thanks !
+
+2008-05-07 Aurélien Bompard <aurelien@bompard.org>
+
+ * ChangeLog, info.txt: new release
+
+2008-05-07 Aurélien Bompard <aurelien@bompard.org>
+
+ * ChangeLog: update ChangeLog
+
+2008-05-07 Aurélien Bompard <aurelien@bompard.org>
+
+ * lang/es/lang.php, lang/es/settings.php: complete spanish
+ translation
+
+2008-05-07 Aurélien Bompard <aurelien@bompard.org>
+
+ * renderer.php, syntax.php: leftover from history cleaning
+
+2008-05-07 Aurélien Bompard <aurelien@bompard.org>
+
+ * lang/es/lang.php: spanish translation, 1st part
+
+2008-05-06 Aurélien Bompard <aurelien@bompard.org>
+
+ * ChangeLog: add changelog in changelog...
+
+2008-05-05 Aurélien Bompard <aurelien@bompard.org>
+
+ * ChangeLog: add ChangeLog (thanks to http://josefsson.org/git2cl/)
+
+
+2008-05-05 Aurélien Bompard <aurelien@bompard.org>
+
+ * README.txt, info.txt: update metadata for new release
+
+2008-05-05 Aurélien Bompard <aurelien@bompard.org>
+
+ * renderer.php: use new headers/caching system if available
+
+2008-04-22 Aurélien Bompard <aurelien@bompard.org>
+
+ * renderer.php: choose appropriate ZipLib file
+
+2008-04-21 Aurélien Bompard <aurelien@bompard.org>
+
+ * renderer.php: dokuwiki's future temp dir is data/tmp, not
+ data/temp
+
+2008-04-08 Aurélien Bompard <aurelien@bompard.org>
+
+ * README.txt, TODO, TODO.txt, info.txt: ready for release
+
+2008-04-08 Aurélien Bompard <aurelien@bompard.org>
+
+ * lang/it/lang.php: add italian translation
+
+2008-04-07 Aurélien Bompard <aurelien@bompard.org>
+
+ * README.txt, TODO, info.txt: get ready for release
+
+2008-03-08 Aurélien Bompard <aurelien@bompard.org>
+
+ * .gitignore: ignore Makefile
+
+2008-03-06 Aurélien Bompard <aurelien@bompard.org>
+
+ * renderer.php: fix quotes
+
+2008-03-06 root <root@shiva.c-s.fr>
+
+ * renderer.php: extract template before checking for the styles
+
+2008-03-04 Aurélien Bompard <aurelien@bompard.org>
+
+ * syntax.php: leftover
+
+2008-03-05 root <root@shiva.c-s.fr>
+
+ * syntax.php: Revert "leftover" This reverts commit
+ 93d7c67d705f3a6a5847554b15384dc5a1a50de6.
+
+2008-03-05 root <root@shiva.c-s.fr>
+
+ * renderer.php: fix <code> tag in list items
+
+2008-03-04 Aurélien Bompard <aurelien@bompard.org>
+
+ * syntax.php: leftover
+
+2008-03-04 Aurélien Bompard <aurelien@bompard.org>
+
+ * renderer.php: cleanup for patch
+
+2008-03-04 Aurélien Bompard <aurelien@bompard.org>
+
+ * README.txt, info.txt: even better doc
+
+2008-03-04 Aurélien Bompard <aurelien@bompard.org>
+
+ * README.txt: better doc
+
+2008-03-04 Aurélien Bompard <aurelien@bompard.org>
+
+ * README.txt: doc
+
+2008-03-03 Aurélien Bompard <aurelien@bompard.org>
+
+ * renderer.php: spit into the fields plugin
+
+2008-03-01 Aurélien Bompard <aurelien@bompard.org>
+
+ * TODO, renderer.php, styles.xml, syntax.php: closer to upstream
+
+2008-03-01 Aurélien Bompard <aurelien@bompard.org>
+
+ * TODO, admin.php, conf/default.php, conf/metadata.php,
+ lang/de/lang.php, lang/en/lang.php, lang/en/settings.php,
+ lang/fr/lang.php, lang/fr/settings.php, renderer.php: niiice :)
+
+2008-02-29 Aurélien Bompard <aurelien@bompard.org>
+
+ * admin.php, lang/en/lang.php: bla
+
+2008-02-28 Aurélien Bompard <aurelien@bompard.org>
+
+ * admin.php, lang/en/lang.php: niice
+
+2008-05-07 Aurélien Bompard <aurelien@bompard.org>
+
+ * initial commit from existing repo
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/README.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/README.txt
new file mode 100644
index 000000000..3d4c97f8d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/README.txt
@@ -0,0 +1,16 @@
+====== Dokuwiki ODT plugin ======
+
+This plugin lets you export wiki pages to ODT, the OpenDocument Text format as
+used by many applications, included OpenOffice.org
+
+Further documentation on the OpenDocument format is available here :
+http://en.wikipedia.org/wiki/OpenDocument
+
+
+===== Official documentation =====
+
+For installation and usage documentation, please refer to
+http://www.dokuwiki.org/plugin:odt
+
+This version of the plugin works with Dokuwiki 2007-06-26 and later.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/ZipLib.class.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/ZipLib.class.php
new file mode 100644
index 000000000..20e74a0e8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/ZipLib.class.php
@@ -0,0 +1,391 @@
+<?php
+
+/**
+ * @author bouchon
+ * @link http://dev.maxg.info
+ * @link http://forum.maxg.info
+ *
+ * Modified for Dokuwiki
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ */
+class ZipLib
+{
+
+ var $datasec, $ctrl_dir = array();
+ var $eof_ctrl_dir = "\x50\x4b\x05\x06\x00\x00\x00\x00";
+ var $old_offset = 0; var $dirs = Array(".");
+
+ function get_List($zip_name)
+ {
+ $zip = @fopen($zip_name, 'rb');
+ if(!$zip) return(0);
+ $centd = $this->ReadCentralDir($zip,$zip_name);
+
+ @rewind($zip);
+ @fseek($zip, $centd['offset']);
+
+ for ($i=0; $i<$centd['entries']; $i++)
+ {
+ $header = $this->ReadCentralFileHeaders($zip);
+ $header['index'] = $i;$info['filename'] = $header['filename'];
+ $info['stored_filename'] = $header['stored_filename'];
+ $info['size'] = $header['size'];$info['compressed_size']=$header['compressed_size'];
+ $info['crc'] = strtoupper(dechex( $header['crc'] ));
+ $info['mtime'] = $header['mtime']; $info['comment'] = $header['comment'];
+ $info['folder'] = ($header['external']==0x41FF0010||$header['external']==16)?1:0;
+ $info['index'] = $header['index'];$info['status'] = $header['status'];
+ $ret[]=$info; unset($header);
+ }
+ return $ret;
+ }
+
+ function Add($files,$compact)
+ {
+ if(!is_array($files[0])) $files=Array($files);
+
+ for($i=0;$files[$i];$i++){
+ $fn = $files[$i];
+ if(!in_Array(dirname($fn[0]),$this->dirs))
+ $this->add_Dir(dirname($fn[0]));
+ if(basename($fn[0]))
+ $ret[basename($fn[0])]=$this->add_File($fn[1],$fn[0],$compact);
+ }
+ return $ret;
+ }
+
+ /**
+ * Zips recursively the $folder directory, from the $basedir directory
+ */
+ function Compress($folder, $basedir=null, $parent=null)
+ {
+ $full_path = $basedir."/".$parent.$folder;
+ $zip_path = $parent.$folder;
+ if ($zip_path) {
+ $zip_path .= "/";
+ $this->add_dir($zip_path);
+ }
+ $dir = opendir($full_path);
+ while (false !== ($filename = readdir($dir))) {
+ if ($filename != "." && $filename != "..") {
+ if (is_dir($full_path."/".$filename)) {
+ $this->Compress($filename, $basedir, $zip_path);
+ } else {
+ $content = join('', file($full_path.'/'.$filename));
+ $this->add_File($content, $zip_path.$filename);
+ }
+ }
+ }
+ }
+
+ /**
+ * Returns the Zip file
+ */
+ function get_file()
+ {
+ $data = implode('', $this -> datasec);
+ $ctrldir = implode('', $this -> ctrl_dir);
+
+ return $data . $ctrldir . $this -> eof_ctrl_dir .
+ pack('v', sizeof($this -> ctrl_dir)).pack('v', sizeof($this -> ctrl_dir)).
+ pack('V', strlen($ctrldir)) . pack('V', strlen($data)) . "\x00\x00";
+ }
+
+ function add_dir($name)
+ {
+ $name = str_replace("\\", "/", $name);
+ $fr = "\x50\x4b\x03\x04\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00";
+
+ $fr .= pack("V",0).pack("V",0).pack("V",0).pack("v", strlen($name) );
+ $fr .= pack("v", 0 ).$name.pack("V", 0).pack("V", 0).pack("V", 0);
+ $this -> datasec[] = $fr;
+
+ $new_offset = strlen(implode("", $this->datasec));
+
+ $cdrec = "\x50\x4b\x01\x02\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00";
+ $cdrec .= pack("V",0).pack("V",0).pack("V",0).pack("v", strlen($name) );
+ $cdrec .= pack("v", 0 ).pack("v", 0 ).pack("v", 0 ).pack("v", 0 );
+ $ext = "\xff\xff\xff\xff";
+ $cdrec .= pack("V", 16 ).pack("V", $this -> old_offset ).$name;
+
+ $this -> ctrl_dir[] = $cdrec;
+ $this -> old_offset = $new_offset;
+ $this -> dirs[] = $name;
+ }
+
+ /**
+ * Add a file named $name from a string $data
+ */
+ function add_File($data, $name, $compact = 1)
+ {
+ $name = str_replace('\\', '/', $name);
+ $dtime = dechex($this->DosTime());
+
+ $hexdtime = '\x' . $dtime[6] . $dtime[7].'\x'.$dtime[4] . $dtime[5]
+ . '\x' . $dtime[2] . $dtime[3].'\x'.$dtime[0].$dtime[1];
+ eval('$hexdtime = "' . $hexdtime . '";');
+
+ if($compact)
+ $fr = "\x50\x4b\x03\x04\x14\x00\x00\x00\x08\x00".$hexdtime;
+ else $fr = "\x50\x4b\x03\x04\x0a\x00\x00\x00\x00\x00".$hexdtime;
+ $unc_len = strlen($data); $crc = crc32($data);
+
+ if($compact){
+ $zdata = gzcompress($data); $c_len = strlen($zdata);
+ $zdata = substr(substr($zdata, 0, strlen($zdata) - 4), 2);
+ }else{
+ $zdata = $data;
+ }
+ $c_len=strlen($zdata);
+ $fr .= pack('V', $crc).pack('V', $c_len).pack('V', $unc_len);
+ $fr .= pack('v', strlen($name)).pack('v', 0).$name.$zdata;
+
+ $fr .= pack('V', $crc).pack('V', $c_len).pack('V', $unc_len);
+
+ $this -> datasec[] = $fr;
+ $new_offset = strlen(implode('', $this->datasec));
+ if($compact)
+ $cdrec = "\x50\x4b\x01\x02\x00\x00\x14\x00\x00\x00\x08\x00";
+ else $cdrec = "\x50\x4b\x01\x02\x14\x00\x0a\x00\x00\x00\x00\x00";
+ $cdrec .= $hexdtime.pack('V', $crc).pack('V', $c_len).pack('V', $unc_len);
+ $cdrec .= pack('v', strlen($name) ).pack('v', 0 ).pack('v', 0 );
+ $cdrec .= pack('v', 0 ).pack('v', 0 ).pack('V', 32 );
+ $cdrec .= pack('V', $this -> old_offset );
+
+ $this -> old_offset = $new_offset;
+ $cdrec .= $name;
+ $this -> ctrl_dir[] = $cdrec;
+ return true;
+ }
+
+ function DosTime() {
+ $timearray = getdate();
+ if ($timearray['year'] < 1980) {
+ $timearray['year'] = 1980; $timearray['mon'] = 1;
+ $timearray['mday'] = 1; $timearray['hours'] = 0;
+ $timearray['minutes'] = 0; $timearray['seconds'] = 0;
+ }
+ return (($timearray['year'] - 1980) << 25) | ($timearray['mon'] << 21) | ($timearray['mday'] << 16) | ($timearray['hours'] << 11) |
+ ($timearray['minutes'] << 5) | ($timearray['seconds'] >> 1);
+ }
+
+ /**
+ * Extract a zip file $zn to the $to directory
+ */
+ function Extract ( $zn, $to, $index = Array(-1) )
+ {
+ if(!@is_dir($to)) @mkdir($to,0777);
+ $ok = 0; $zip = @fopen($zn,'rb');
+ if(!$zip) return(-1);
+ $cdir = $this->ReadCentralDir($zip,$zn);
+ $pos_entry = $cdir['offset'];
+
+ if(!is_array($index)){ $index = array($index); }
+ for($i=0; isset($index[$i]);$i++){
+ if(intval($index[$i])!=$index[$i]||$index[$i]>$cdir['entries'])
+ return(-1);
+ }
+
+ for ($i=0; $i<$cdir['entries']; $i++)
+ {
+ @fseek($zip, $pos_entry);
+ $header = $this->ReadCentralFileHeaders($zip);
+ $header['index'] = $i; $pos_entry = ftell($zip);
+ @rewind($zip); fseek($zip, $header['offset']);
+ if(in_array("-1",$index)||in_array($i,$index))
+ $stat[$header['filename']]=$this->ExtractFile($header, $to, $zip);
+
+ }
+ fclose($zip);
+ return $stat;
+ }
+
+ function ReadFileHeader($zip, $header)
+ {
+ $binary_data = fread($zip, 30);
+ $data = unpack('vchk/vid/vversion/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len', $binary_data);
+
+ $header['filename'] = fread($zip, $data['filename_len']);
+ if ($data['extra_len'] != 0) {
+ $header['extra'] = fread($zip, $data['extra_len']);
+ } else { $header['extra'] = ''; }
+
+ $header['compression'] = $data['compression'];
+ $header['flag'] = $data['flag'];
+ $header['mdate'] = $data['mdate'];$header['mtime'] = $data['mtime'];
+ if (($header['flag'] & 8) != 8) { // Purpose bit flag bit 3 not set, overwrite the central header values
+ foreach (array('size','compressed_size','crc') as $hd) {
+ $header[$hd] = $data[$hd];
+ }
+ }
+
+ if ($header['mdate'] && $header['mtime']){
+ $hour=($header['mtime']&0xF800)>>11;$minute=($header['mtime']&0x07E0)>>5;
+ $seconde=($header['mtime']&0x001F)*2;$year=(($header['mdate']&0xFE00)>>9)+1980;
+ $month=($header['mdate']&0x01E0)>>5;$day=$header['mdate']&0x001F;
+ $header['mtime'] = mktime($hour, $minute, $seconde, $month, $day, $year);
+ }else{$header['mtime'] = time();}
+
+ $header['stored_filename'] = $header['filename'];
+ $header['status'] = "ok";
+ return $header;
+ }
+
+ function ReadCentralFileHeaders($zip){
+ $binary_data = fread($zip, 46);
+ $header = unpack('vchkid/vid/vversion/vversion_extracted/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len/vcomment_len/vdisk/vinternal/Vexternal/Voffset', $binary_data);
+
+ if ($header['filename_len'] != 0)
+ $header['filename'] = fread($zip,$header['filename_len']);
+ else $header['filename'] = '';
+
+ if ($header['extra_len'] != 0)
+ $header['extra'] = fread($zip, $header['extra_len']);
+ else $header['extra'] = '';
+
+ if ($header['comment_len'] != 0)
+ $header['comment'] = fread($zip, $header['comment_len']);
+ else $header['comment'] = '';
+
+ if ($header['mdate'] && $header['mtime'])
+ {
+ $hour = ($header['mtime'] & 0xF800) >> 11;
+ $minute = ($header['mtime'] & 0x07E0) >> 5;
+ $seconde = ($header['mtime'] & 0x001F)*2;
+ $year = (($header['mdate'] & 0xFE00) >> 9) + 1980;
+ $month = ($header['mdate'] & 0x01E0) >> 5;
+ $day = $header['mdate'] & 0x001F;
+ $header['mtime'] = mktime($hour, $minute, $seconde, $month, $day, $year);
+ } else {
+ $header['mtime'] = time();
+ }
+ $header['stored_filename'] = $header['filename'];
+ $header['status'] = 'ok';
+ if (substr($header['filename'], -1) == '/')
+ $header['external'] = 0x41FF0010;
+ return $header;
+ }
+
+ function ReadCentralDir($zip,$zip_name)
+ {
+ $size = filesize($zip_name);
+ if ($size < 277) $maximum_size = $size;
+ else $maximum_size=277;
+
+ @fseek($zip, $size-$maximum_size);
+ $pos = ftell($zip); $bytes = 0x00000000;
+
+ while ($pos < $size)
+ {
+ $byte = @fread($zip, 1);
+ $bytes=(($bytes << 8) & 0xFFFFFFFF) | Ord($byte);
+ if ($bytes == 0x504b0506){ $pos++; break; } $pos++;
+ }
+
+ $data=unpack('vdisk/vdisk_start/vdisk_entries/ventries/Vsize/Voffset/vcomment_size',
+ fread($zip, 18));
+
+ if ($data['comment_size'] != 0)
+ $centd['comment'] = fread($zip, $data['comment_size']);
+ else $centd['comment'] = ''; $centd['entries'] = $data['entries'];
+ $centd['disk_entries'] = $data['disk_entries'];
+ $centd['offset'] = $data['offset'];$centd['disk_start'] = $data['disk_start'];
+ $centd['size'] = $data['size']; $centd['disk'] = $data['disk'];
+ return $centd;
+ }
+
+ function ExtractFile($header,$to,$zip)
+ {
+ $header = $this->readfileheader($zip, $header);
+
+ if(substr($to,-1)!="/") $to.="/";
+ if(substr($header['filename'],-1)=="/")
+ {
+// @mkdir($to.$header['filename']); --CS
+ $this->_mkdir($to.$header['filename']); //-- CS
+ return +2;
+ }
+
+// $pth = explode("/",dirname($header['filename']));
+// for($i=0,$tmp="";isset($pth[$i]);$i++){
+// if(!$pth[$i]) continue;
+// if(!is_dir($to.$tmp.$pth[$i])) @mkdir($to.$pth[$i],0777);
+// $tmp.=$pth[$i]."/";
+// }
+ if (!$this->_mkdir($to.dirname($header['filename']))) return (-1); //--CS
+
+ if (!array_key_exists("external", $header) || (!($header['external']==0x41FF0010)&&!($header['external']==16)))
+ {
+ if ($header['compression']==0)
+ {
+ $fp = @fopen($to.$header['filename'], 'wb');
+ if(!$fp) return(-1);
+ $size = $header['compressed_size'];
+
+ while ($size != 0)
+ {
+ $read_size = ($size < 2048 ? $size : 2048);
+ $buffer = fread($zip, $read_size);
+ $binary_data = pack('a'.$read_size, $buffer);
+ @fwrite($fp, $binary_data, $read_size);
+ $size -= $read_size;
+ }
+ fclose($fp);
+ touch($to.$header['filename'], $header['mtime']);
+
+ }else{
+ if (!is_dir(dirname($to.$header['filename']))) $this->_mkdir(dirname($to.$header['filename'])); //-CS
+ $fp = fopen($to.$header['filename'].'.gz','wb');
+ if(!$fp) return(-1);
+ $binary_data = pack('va1a1Va1a1', 0x8b1f, Chr($header['compression']),
+ Chr(0x00), time(), Chr(0x00), Chr(3));
+
+ fwrite($fp, $binary_data, 10);
+ $size = $header['compressed_size'];
+
+ while ($size != 0)
+ {
+ $read_size = ($size < 1024 ? $size : 1024);
+ $buffer = fread($zip, $read_size);
+ $binary_data = pack('a'.$read_size, $buffer);
+ @fwrite($fp, $binary_data, $read_size);
+ $size -= $read_size;
+ }
+
+ $binary_data = pack('VV', $header['crc'], $header['size']);
+ fwrite($fp, $binary_data,8); fclose($fp);
+
+ $gzp = @gzopen($to.$header['filename'].'.gz','rb');
+ if(!$gzp){
+ @gzclose($gzp); @unlink($to.$header['filename']);
+ die("Archive is compressed whereas ZLIB is not enabled.");
+ }
+ $fp = @fopen($to.$header['filename'],'wb');
+ if(!$fp) return(-1);
+ $size = $header['size'];
+
+ while ($size != 0)
+ {
+ $read_size = ($size < 2048 ? $size : 2048);
+ $buffer = gzread($gzp, $read_size);
+ $binary_data = pack('a'.$read_size, $buffer);
+ @fwrite($fp, $binary_data, $read_size);
+ $size -= $read_size;
+ }
+ fclose($fp); gzclose($gzp);
+
+ touch($to.$header['filename'], $header['mtime']);
+ @unlink($to.$header['filename'].'.gz');
+
+ }}
+ return true;
+ }
+
+ //--CS start
+ // centralize mkdir calls and use dokuwiki io functions
+ function _mkdir($d) {
+ return io_mkdir_p($d); // --AB
+ //return ap_mkdir($d);
+ }
+ //--CS end
+}
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/action.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/action.php
new file mode 100644
index 000000000..0ca861518
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/action.php
@@ -0,0 +1,41 @@
+<?php
+/**
+ * ODT Plugin: Exports to ODT
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Aurelien Bompard <aurelien@bompard.org>
+ */
+// must be run within Dokuwiki
+if(!defined('DOKU_INC')) die();
+
+if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
+require_once(DOKU_PLUGIN.'action.php');
+
+/**
+ * Add the template as a page dependency for the caching system
+ */
+class action_plugin_odt extends DokuWiki_Action_Plugin {
+
+ function register($controller) {
+ $controller->register_hook('PARSER_CACHE_USE','BEFORE', $this, 'handle_cache_prepare');
+ }
+
+ function handle_cache_prepare(&$event, $param) {
+ global $conf, $ID;
+ $cache =& $event->data;
+ // only the ODT rendering mode needs caching tweaks
+ if ($cache->mode != "odt") return;
+ $odt_meta = p_get_metadata($ID, 'relation odt');
+ $template_name = $odt_meta["template"];
+ if (!$template_name) {
+ return;
+ }
+ $template_path = $conf['mediadir'].'/'.$this->getConf("tpl_dir")."/".$template_name;
+ if (file_exists($template_path)) {
+ $cache->depends['files'][] = $template_path;
+ }
+ }
+
+}
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/conf/default.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/conf/default.php
new file mode 100644
index 000000000..d69966874
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/conf/default.php
@@ -0,0 +1,7 @@
+<?php
+/**
+ * @author Aurelien Bompard <aurelien@bompard.org>
+ */
+
+// Directory of the templates in the media manager
+$conf['tpl_dir'] = 'odt';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/conf/metadata.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/conf/metadata.php
new file mode 100644
index 000000000..7614f3c73
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/conf/metadata.php
@@ -0,0 +1,8 @@
+<?php
+/**
+ * Options for the odt plugin
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+$meta['tpl_dir'] = array('string');
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/info.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/info.txt
new file mode 100644
index 000000000..3006078be
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/info.txt
@@ -0,0 +1,8 @@
+# General Plugin Info do not edit
+
+author Andreas Gohr, Aurelien Bompard
+email andi@splitbrain.org, aurelien@bompard.org
+date 2010-07-24
+name Open Document Plugin
+desc Export the current Wiki page to a OpenOffice ODT file
+url http://www.dokuwiki.org/plugin:odt
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/de/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/de/lang.php
new file mode 100644
index 000000000..607ff99e3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/de/lang.php
@@ -0,0 +1,9 @@
+<?php
+
+// settings must be present and set appropriately for the language
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+
+// export button
+$lang['view'] = 'Ins Open-Document-Format exportieren';
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/en/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/en/lang.php
new file mode 100644
index 000000000..4a6d50985
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/en/lang.php
@@ -0,0 +1,12 @@
+<?php
+
+// settings must be present and set appropriately for the language
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+
+// export button
+$lang['view'] = 'Export page to Open Document format';
+
+// template not found in the directory
+$lang['tpl_not_found'] = 'WARNING : the ODT template "%s" was not found in the templates directory "%s". Using the default template.';
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/es/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/es/lang.php
new file mode 100644
index 000000000..f86a80426
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/es/lang.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Spanish language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Rodolfo Pilas <rodolfo@pilas.net>
+ */
+
+
+// settings must be present and set appropriately for the language
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+
+// export button
+$lang['view'] = 'Exportar p&aacute;gina en formato Open Document';
+
+// template not found in the directory
+$lang['tpl_not_found'] = 'ATENCION : la plantilla ODT "%s" no ha sido encontrada en el directorio de plantillas "%s". Se usa la plantilla por defecto.';
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/fr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/fr/lang.php
new file mode 100644
index 000000000..4290573ec
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/fr/lang.php
@@ -0,0 +1,12 @@
+<?php
+
+// settings must be present and set appropriately for the language
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+
+// export button
+$lang['view'] = 'Exporter la page au format Open Document';
+
+// template not found in the directory
+$lang['tpl_not_found'] = 'ATTENTION: le modèle ODT "%s" n\'a pas été trouvé dans le répertoire de modèles "%s". L\'export est réalisé avec le modèle par défaut.';
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/it/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/it/lang.php
new file mode 100644
index 000000000..45e171be5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/it/lang.php
@@ -0,0 +1,7 @@
+<?php
+/**
+ * Options for odt plugin
+ * @author Diego Pierotto <ita.translations@tiscali.it>
+ */
+
+$lang['view'] = 'Esporta pagina in formato Open Document';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/ja/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/ja/lang.php
new file mode 100644
index 000000000..6df1be2d0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/ja/lang.php
@@ -0,0 +1,12 @@
+<?php
+
+// settings must be present and set appropriately for the language
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+
+// export button
+$lang['view'] = 'ã“ã®ãƒšãƒ¼ã‚¸ã‚’Open Documentフォーマットã§ä¿å­˜';
+
+// template not found in the directory
+$lang['tpl_not_found'] = '注æ„:ODTテンプレート "%s" ã¯ãƒ†ãƒ³ãƒ—レートディレクトリ "%s"ã®ä¸­ã«ã‚ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚デフォルトã®ãƒ†ãƒ³ãƒ—レートを使用ã—ã¾ã™ã€‚';
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/ru/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/ru/lang.php
new file mode 100644
index 000000000..9eaaf2c43
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/ru/lang.php
@@ -0,0 +1,12 @@
+<?php
+
+// settings must be present and set appropriately for the language
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+
+// export button
+$lang['view'] = 'ЭкÑпорт Ñтраницы в формат Open Document';
+
+// template not found in the directory
+$lang['tpl_not_found'] = 'Ð’ÐИМÐÐИЕ: ODT шаблон "%s" не найден в каталоге Ð´Ð»Ñ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð¾Ð² "%s". ИÑпользуетÑÑ ÑˆÐ°Ð±Ð»Ð¾Ð½ по умолчанию.';
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/zh/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/zh/lang.php
new file mode 100644
index 000000000..808b248e0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/zh/lang.php
@@ -0,0 +1,12 @@
+<?php
+
+// settings must be present and set appropriately for the language
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+
+// export button
+$lang['view'] = '将页é¢å¯¼å‡ºä¸ºå¼€æ”¾æ–‡æ¡£æ ¼å¼';
+
+// template not found in the directory
+$lang['tpl_not_found'] = '警告:模æ¿ç›®å½•ä¸­æ²¡æœ‰æ‰¾åˆ°ODTæ¨¡æ¿ â€œ%sâ€ã€‚;
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/odt.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/odt.png
new file mode 100644
index 000000000..4ea3cec8f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/odt.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/renderer.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/renderer.php
new file mode 100644
index 000000000..5525e4926
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/renderer.php
@@ -0,0 +1,1232 @@
+<?php
+/**
+ * ODT Plugin: Exports to ODT
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Aurelien Bompard <aurelien@bompard.org>
+ */
+// must be run within Dokuwiki
+if(!defined('DOKU_INC')) die();
+
+require_once DOKU_INC.'inc/parser/renderer.php';
+
+// ZipLib.class.php
+$dw_version = preg_replace('/[^\d]/', '', getversion());
+if (version_compare($dw_version, "20070626") and
+ version_compare(PHP_VERSION,'5.0.0','>')) {
+ // If strictly newer than 2007-06-26 and use PHP5, fixes to ZipLib are
+ // included in Dokuwiki's ZipLib
+ require_once DOKU_INC.'inc/ZipLib.class.php';
+} else { // for DW up to 2007-06-26, we need the patched version
+ require_once 'ZipLib.class.php';
+}
+
+/**
+ * The Renderer
+ */
+class renderer_plugin_odt extends Doku_Renderer {
+ var $ZIP = null;
+ var $meta;
+ var $store = '';
+ var $footnotes = array();
+ var $manifest = array();
+ var $headers = array();
+ var $template = "";
+ var $fields = array();
+ var $in_list_item = false;
+ var $in_paragraph = false;
+ // Automatic styles. Will always be added to content.xml and styles.xml
+ var $autostyles = array(
+ "pm1"=>'
+ <style:page-layout style:name="pm1">
+ <style:page-layout-properties fo:page-width="21cm" fo:page-height="29.7cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="2cm" fo:margin-bottom="2cm" fo:margin-left="2cm" fo:margin-right="2cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm">
+ <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.1cm" style:distance-after-sep="0.1cm" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
+ </style:page-layout-properties>
+ <style:header-style/>
+ <style:footer-style/>
+ </style:page-layout>',
+ "sub"=>'
+ <style:style style:name="sub" style:family="text">
+ <style:text-properties style:text-position="-33% 80%"/>
+ </style:style>',
+ "sup"=>'
+ <style:style style:name="sup" style:family="text">
+ <style:text-properties style:text-position="33% 80%"/>
+ </style:style>',
+ "del"=>'
+ <style:style style:name="del" style:family="text">
+ <style:text-properties style:text-line-through-style="solid"/>
+ </style:style>',
+ "underline"=>'
+ <style:style style:name="underline" style:family="text">
+ <style:text-properties style:text-underline-style="solid"
+ style:text-underline-width="auto" style:text-underline-color="font-color"/>
+ </style:style>',
+ "media"=>'
+ <style:style style:name="media" style:family="graphic" style:parent-style-name="Graphics">
+ <style:graphic-properties style:run-through="foreground" style:wrap="parallel" style:number-wrapped-paragraphs="no-limit"
+ style:wrap-contour="false" style:vertical-pos="top" style:vertical-rel="baseline" style:horizontal-pos="left"
+ style:horizontal-rel="paragraph"/>
+ </style:style>',
+ "medialeft"=>'
+ <style:style style:name="medialeft" style:family="graphic" style:parent-style-name="Graphics">
+ <style:graphic-properties style:run-through="foreground" style:wrap="parallel" style:number-wrapped-paragraphs="no-limit"
+ style:wrap-contour="false" style:horizontal-pos="left" style:horizontal-rel="paragraph"/>
+ </style:style>',
+ "mediaright"=>'
+ <style:style style:name="mediaright" style:family="graphic" style:parent-style-name="Graphics">
+ <style:graphic-properties style:run-through="foreground" style:wrap="parallel" style:number-wrapped-paragraphs="no-limit"
+ style:wrap-contour="false" style:horizontal-pos="right" style:horizontal-rel="paragraph"/>
+ </style:style>',
+ "mediacenter"=>'
+ <style:style style:name="mediacenter" style:family="graphic" style:parent-style-name="Graphics">
+ <style:graphic-properties style:run-through="foreground" style:wrap="none" style:horizontal-pos="center"
+ style:horizontal-rel="paragraph"/>
+ </style:style>',
+ "tablealigncenter"=>'
+ <style:style style:name="tablealigncenter" style:family="paragraph" style:parent-style-name="Table_20_Contents">
+ <style:paragraph-properties fo:text-align="center"/>
+ </style:style>',
+ "tablealignright"=>'
+ <style:style style:name="tablealignright" style:family="paragraph" style:parent-style-name="Table_20_Contents">
+ <style:paragraph-properties fo:text-align="end"/>
+ </style:style>',
+ "tablealignleft"=>'
+ <style:style style:name="tablealignleft" style:family="paragraph" style:parent-style-name="Table_20_Contents">
+ <style:paragraph-properties fo:text-align="left"/>
+ </style:style>',
+ "tableheader"=>'
+ <style:style style:name="tableheader" style:family="table-cell">
+ <style:table-cell-properties fo:padding="0.05cm" fo:border-left="0.002cm solid #000000" fo:border-right="0.002cm solid #000000" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
+ </style:style>',
+ "tablecell"=>'
+ <style:style style:name="tablecell" style:family="table-cell">
+ <style:table-cell-properties fo:padding="0.05cm" fo:border-left="0.002cm solid #000000" fo:border-right="0.002cm solid #000000" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
+ </style:style>',
+ "legendcenter"=>'
+ <style:style style:name="legendcenter" style:family="paragraph" style:parent-style-name="Illustration">
+ <style:paragraph-properties fo:text-align="center"/>
+ </style:style>',
+ );
+ // Regular styles. May not be present if in template mode, in which case they will be added to styles.xml
+ var $styles = array(
+ "Source_20_Text"=>'
+ <style:style style:name="Source_20_Text" style:display-name="Source Text" style:family="text">
+ <style:text-properties style:font-name="Bitstream Vera Sans Mono" style:font-name-asian="Bitstream Vera Sans Mono" style:font-name-complex="Bitstream Vera Sans Mono"/>
+ </style:style>',
+ "Preformatted_20_Text"=>'
+ <style:style style:name="Preformatted_20_Text" style:display-name="Preformatted Text" style:family="paragraph" style:parent-style-name="Standard" style:class="html">
+ <style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm"/>
+ <style:text-properties style:font-name="Bitstream Vera Sans Mono" style:font-name-asian="Bitstream Vera Sans Mono" style:font-name-complex="Bitstream Vera Sans Mono"/>
+ </style:style>',
+ "Horizontal_20_Line"=>'
+ <style:style style:name="Horizontal_20_Line" style:display-name="Horizontal Line" style:family="paragraph" style:parent-style-name="Standard" style:next-style-name="Text_20_body" style:class="html">
+ <style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0.5cm" style:border-line-width-bottom="0.002cm 0.035cm 0.002cm" fo:padding="0cm" fo:border-left="none" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.04cm double #808080" text:number-lines="false" text:line-number="0" style:join-border="false"/>
+ <style:text-properties fo:font-size="6pt" style:font-size-asian="6pt" style:font-size-complex="6pt"/>
+ </style:style>',
+ "Footnote"=>'
+ <style:style style:name="Footnote" style:family="paragraph" style:parent-style-name="Standard" style:class="extra">
+ <style:paragraph-properties fo:margin-left="0.5cm" fo:margin-right="0cm" fo:text-indent="-0.5cm" style:auto-text-indent="false" text:number-lines="false" text:line-number="0"/>
+ <style:text-properties fo:font-size="10pt" style:font-size-asian="10pt" style:font-size-complex="10pt"/>
+ </style:style>',
+ "Emphasis"=>'
+ <style:style style:name="Emphasis" style:family="text">
+ <style:text-properties fo:font-style="italic" style:font-style-asian="italic" style:font-style-complex="italic"/>
+ </style:style>',
+ "Strong_20_Emphasis"=>'
+ <style:style style:name="Strong_20_Emphasis" style:display-name="Strong Emphasis" style:family="text">
+ <style:text-properties fo:font-weight="bold" style:font-weight-asian="bold" style:font-weight-complex="bold"/>
+ </style:style>',
+ );
+ // Font definitions. May not be present if in template mode, in which case they will be added to styles.xml
+ var $fonts = array(
+ "StarSymbol"=>'<style:font-face style:name="StarSymbol" svg:font-family="StarSymbol"/>', // for bullets
+ "Bitstream Vera Sans Mono"=>'<style:font-face style:name="Bitstream Vera Sans Mono" svg:font-family="\'Bitstream Vera Sans Mono\'" style:font-family-generic="modern" style:font-pitch="fixed"/>', // for source code
+ );
+
+ /**
+ * Return version info
+ */
+ function getInfo(){
+ return confToHash(dirname(__FILE__).'/info.txt');
+ }
+
+ /**
+ * Returns the format produced by this renderer.
+ */
+ function getFormat(){
+ return "odt";
+ }
+
+ /**
+ * Do not make multiple instances of this class
+ */
+ function isSingleton(){
+ return true;
+ }
+
+
+ /**
+ * Initialize the rendering
+ */
+ function document_start() {
+ global $ID;
+
+ // If older or equal to 2007-06-26, we need to disable caching
+ $dw_version = preg_replace('/[^\d]/', '', getversion());
+ if (version_compare($dw_version, "20070626", "<=")) {
+ $this->info["cache"] = false;
+ }
+
+ // prepare the zipper
+ $this->ZIP = new ZipLib();
+
+ // prepare meta data
+ $this->meta = array(
+ 'meta:generator' => 'DokuWiki '.getversion(),
+ 'meta:initial-creator' => 'Generated',
+ 'meta:creation-date' => date('Y-m-d\\TH::i:s', null), //FIXME
+ 'dc:creator' => 'Generated',
+ 'dc:date' => date('Y-m-d\\TH::i:s', null),
+ 'dc:language' => 'en-US',
+ 'meta:editing-cycles' => '1',
+ 'meta:editing-duration' => 'PT0S',
+ );
+
+ // send the content type header, new method after 2007-06-26 (handles caching)
+ $output_filename = str_replace(':','-',$ID).".odt";
+ if (version_compare($dw_version, "20070626")) {
+ // store the content type headers in metadata
+ $headers = array(
+ 'Content-Type' => 'application/vnd.oasis.opendocument.text',
+ 'Content-Disposition' => 'attachment; filename="'.$output_filename.'";',
+ );
+ p_set_metadata($ID,array('format' => array('odt' => $headers) ));
+ } else { // older method
+ header('Content-Type: application/vnd.oasis.opendocument.text');
+ header('Content-Disposition: attachment; filename="'.$output_filename.'";');
+ }
+ }
+
+ /**
+ * Prepare meta.xml
+ */
+ function _odtMeta(){
+ $value = '<' . '?xml version="1.0" encoding="UTF-8"?' . ">\n";
+ $value .= '<office:document-meta ';
+ $value .= 'xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" ';
+ $value .= 'xmlns:xlink="http://www.w3.org/1999/xlink" ';
+ $value .= 'xmlns:dc="http://purl.org/dc/elements/1.1/" ';
+ $value .= 'xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" ';
+ $value .= 'office:version="1.0">';
+ $value .= '<office:meta>';
+ # FIXME
+ # foreach($meta as $meta_key => $meta_value)
+ # $value .= '<' . $meta_key . '>' . ODUtils::encode($meta_value) . '</' . $meta_key . '>';
+ $value .= '</office:meta>';
+ $value .= '</office:document-meta>';
+ $this->ZIP->add_File($value,'meta.xml');
+ }
+
+ /**
+ * Prepare manifest.xml
+ */
+ function _odtManifest(){
+ $value = '<' . '?xml version="1.0" encoding="UTF-8"?' . ">\n";
+ $value .= '<manifest:manifest xmlns:manifest="urn:oasis:names:tc:opendocument:xmlns:manifest:1.0">';
+ $value .= '<manifest:file-entry manifest:media-type="application/vnd.oasis.opendocument.text" manifest:full-path="/"/>';
+ $value .= '<manifest:file-entry manifest:media-type="text/xml" manifest:full-path="settings.xml"/>';
+ $value .= '<manifest:file-entry manifest:media-type="text/xml" manifest:full-path="meta.xml"/>';
+ $value .= '<manifest:file-entry manifest:media-type="text/xml" manifest:full-path="content.xml"/>';
+ $value .= '<manifest:file-entry manifest:media-type="text/xml" manifest:full-path="styles.xml"/>';
+
+ foreach($this->manifest as $path => $type){
+ $value .= '<manifest:file-entry manifest:media-type="'.$this->_xmlEntities($type).
+ '" manifest:full-path="'.$this->_xmlEntities($path).'"/>';
+ }
+
+ $value .= '</manifest:manifest>';
+ $this->ZIP->add_File($value,'META-INF/manifest.xml');
+ }
+
+ /**
+ * Prepare settings.xml
+ */
+ function _odtSettings(){
+ $value = '<' . '?xml version="1.0" encoding="UTF-8"?' . ">\n";
+ $value .= '<office:document-settings xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" office:version="1.0"><office:settings><config:config-item-set config:name="dummy-settings"><config:config-item config:name="MakeValidatorHappy" config:type="boolean">true</config:config-item></config:config-item-set></office:settings></office:document-settings>';
+ $this->ZIP->add_File($value,'settings.xml');
+ }
+
+
+
+
+ /**
+ * Closes the document
+ */
+ function document_end(){
+ global $conf;
+ if ($this->template) { // template chosen
+ if (file_exists($conf['mediadir'].'/'.$this->getConf("tpl_dir")."/".$this->template)) { //template found
+ $this->document_end_template();
+ } else { // template chosen but not found : warn the user and use the default template
+ $this->doc = '<text:p text:style-name="Text_20_body"><text:span text:style-name="Strong_20_Emphasis">'
+ .$this->_xmlEntities( sprintf($this->getLang('tpl_not_found'),$this->template,$this->getConf("tpl_dir")) )
+ .'</text:span></text:p>'.$this->doc;
+ $this->document_end_scratch();
+ }
+ } else {
+ $this->document_end_scratch();
+ }
+ $this->doc = $this->ZIP->get_file();
+ }
+
+
+ /**
+ * Closes the document when not using a template
+ */
+ function document_end_scratch(){
+ $autostyles = $this->_odtAutoStyles();
+ $userfields = $this->_odtUserFields();
+
+ // add defaults
+ $this->ZIP->add_File('application/vnd.oasis.opendocument.text', 'mimetype', 0);
+
+ $this->_odtMeta();
+ $this->_odtSettings();
+
+ $value = '<' . '?xml version="1.0" encoding="UTF-8"?' . ">\n";
+ $value .= '<office:document-content ';
+ $value .= 'xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" ';
+ $value .= 'xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" ';
+ $value .= 'xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" ';
+ $value .= 'xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" ';
+ $value .= 'xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" ';
+ $value .= 'xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" ';
+ $value .= 'xmlns:xlink="http://www.w3.org/1999/xlink" ';
+ $value .= 'xmlns:dc="http://purl.org/dc/elements/1.1/" ';
+ $value .= 'xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" ';
+ $value .= 'xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" ';
+ $value .= 'xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" ';
+ $value .= 'xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" ';
+ $value .= 'xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" ';
+ $value .= 'xmlns:math="http://www.w3.org/1998/Math/MathML" ';
+ $value .= 'xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" ';
+ $value .= 'xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" ';
+ $value .= 'xmlns:dom="http://www.w3.org/2001/xml-events" ';
+ $value .= 'xmlns:xforms="http://www.w3.org/2002/xforms" ';
+ $value .= 'xmlns:xsd="http://www.w3.org/2001/XMLSchema" ';
+ $value .= 'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ';
+ $value .= 'office:version="1.0">';
+ $value .= '<office:scripts/>';
+ $value .= '<office:font-face-decls>';
+ $value .= '<style:font-face style:name="Tahoma1" svg:font-family="Tahoma"/>';
+ $value .= '<style:font-face style:name="Lucida Sans Unicode" svg:font-family="&apos;Lucida Sans Unicode&apos;" style:font-pitch="variable"/>';
+ $value .= '<style:font-face style:name="Tahoma" svg:font-family="Tahoma" style:font-pitch="variable"/>';
+ $value .= '<style:font-face style:name="Times New Roman" svg:font-family="&apos;Times New Roman&apos;" style:font-family-generic="roman" style:font-pitch="variable"/>';
+ $value .= '</office:font-face-decls>';
+ $value .= $autostyles;
+ $value .= '<office:body>';
+ $value .= '<office:text>';
+ $value .= '<office:forms form:automatic-focus="false" form:apply-design-mode="false"/>';
+ $value .= '<text:sequence-decls>';
+ $value .= '<text:sequence-decl text:display-outline-level="0" text:name="Illustration"/>';
+ $value .= '<text:sequence-decl text:display-outline-level="0" text:name="Table"/>';
+ $value .= '<text:sequence-decl text:display-outline-level="0" text:name="Text"/>';
+ $value .= '<text:sequence-decl text:display-outline-level="0" text:name="Drawing"/>';
+ $value .= '</text:sequence-decls>';
+ $value .= $userfields;
+ $value .= $this->doc;
+ $value .= '</office:text>';
+ $value .= '</office:body>';
+ $value .= '</office:document-content>';
+
+ $this->ZIP->add_File($value,'content.xml');
+
+ $value = io_readFile(DOKU_PLUGIN.'odt/styles.xml');
+ $value = str_replace('<office:automatic-styles/>', $autostyles, $value);
+ $this->ZIP->add_File($value,'styles.xml');
+
+ // build final manifest
+ $this->_odtManifest();
+ }
+
+ /**
+ * Closes the document using a template
+ */
+ function document_end_template(){
+ global $conf, $ID; // for the temp dir
+
+ // Temp dir
+ if (is_dir($conf['tmpdir'])) {
+ $temp_dir = $conf['tmpdir']; // version > 20070626
+ } else {
+ $temp_dir = $conf['savedir'].'/cache/tmp'; // version <= 20070626
+ }
+ $this->temp_dir = $temp_dir."/odt/".str_replace(':','-',$ID);
+ if (is_dir($this->temp_dir)) { $this->io_rm_rf($this->temp_dir); }
+ io_mkdir_p($this->temp_dir);
+
+ // Extract template
+ $template_path = $conf['mediadir'].'/'.$this->getConf("tpl_dir")."/".$this->template;
+ $this->ZIP->Extract($template_path, $this->temp_dir);
+
+ // Prepare content
+ $autostyles = $this->_odtAutoStyles();
+ $missingstyles = $this->_odtStyles();
+ $missingfonts = $this->_odtFonts();
+ $userfields = $this->_odtUserFields();
+
+ // Insert content
+ $old_content = io_readFile($this->temp_dir.'/content.xml');
+ if (strpos($old_content, 'DOKUWIKI-ODT-INSERT') !== FALSE) { // Replace the mark
+ $this->_odtReplaceInFile('/<text:p[^>]*>DOKUWIKI-ODT-INSERT<\/text:p>/',
+ $this->doc, $this->temp_dir.'/content.xml', true);
+ } else { // Append to the template
+ $this->_odtReplaceInFile('</office:text>', $this->doc.'</office:text>', $this->temp_dir.'/content.xml');
+ }
+
+ // Cut off unwanted content
+ if (strpos($old_content, 'DOKUWIKI-ODT-CUT-START') !== FALSE
+ && strpos($old_content, 'DOKUWIKI-ODT-CUT-STOP') !== FALSE) {
+ $this->_odtReplaceInFile('/DOKUWIKI-ODT-CUT-START.*DOKUWIKI-ODT-CUT-STOP/',
+ '', $this->temp_dir.'/content.xml', true);
+ }
+
+ // Insert userfields
+ if (strpos($old_content, "text:user-field-decls") === FALSE) { // no existing userfields
+ $this->_odtReplaceInFile('/<office:text([^>]*)>/U', '<office:text\1>'.$userfields, $this->temp_dir.'/content.xml', TRUE);
+ } else {
+ $this->_odtReplaceInFile('</text:user-field-decls>', substr($userfields,23), $this->temp_dir.'/content.xml');
+ }
+
+ // Insert styles & fonts
+ $this->_odtReplaceInFile('</office:automatic-styles>', substr($autostyles, 25), $this->temp_dir.'/content.xml');
+ $this->_odtReplaceInFile('</office:automatic-styles>', substr($autostyles, 25), $this->temp_dir.'/styles.xml');
+ $this->_odtReplaceInFile('</office:styles>', $missingstyles.'</office:styles>', $this->temp_dir.'/styles.xml');
+ $this->_odtReplaceInFile('</office:font-face-decls>', $missingfonts.'</office:font-face-decls>', $this->temp_dir.'/styles.xml');
+
+ // Build the Zip
+ $this->ZIP->Compress(null, $this->temp_dir, null);
+ $this->io_rm_rf($this->temp_dir);
+ }
+
+ function _odtReplaceInFile($from, $to, $file, $regexp=FALSE) {
+ $value = io_readFile($file);
+ if ($regexp) {
+ $value = preg_replace($from, $to, $value);
+ } else {
+ $value = str_replace($from, $to, $value);
+ }
+ $file_f = fopen($file, 'w');
+ fwrite($file_f, $value);
+ fclose($file_f);
+ }
+
+ /**
+ * Recursively deletes a directory (equivalent to the "rm -rf" command)
+ * Found in comments on http://www.php.net/rmdir
+ */
+ function io_rm_rf($f) {
+ if (is_dir($f)) {
+ foreach(glob($f.'/*') as $sf) {
+ if (is_dir($sf) && !is_link($sf)) {
+ $this->io_rm_rf($sf);
+ } else {
+ unlink($sf);
+ }
+ }
+ } else { // avoid nasty consequenses if something wrong is given
+ die("Error: not a directory - $f");
+ }
+ rmdir($f);
+ }
+
+ // not supported - use OpenOffice builtin tools instead!
+ function render_TOC() { return ''; }
+
+ function toc_additem($id, $text, $level) {}
+
+ function _odtAutoStyles() {
+ $value = '<office:automatic-styles>';
+ foreach ($this->autostyles as $stylename=>$stylexml) {
+ $value .= $stylexml;
+ }
+ $value .= '</office:automatic-styles>';
+ return $value;
+ }
+
+ function _odtUserFields() {
+ $value = '<text:user-field-decls>';
+ foreach ($this->fields as $fname=>$fvalue) {
+ $value .= '<text:user-field-decl office:value-type="string" text:name="'.$fname.'" office:string-value="'.$fvalue.'"/>';
+ }
+ $value .= '</text:user-field-decls>';
+ return $value;
+ }
+
+ /* Add missing styles in the template */
+ function _odtStyles() {
+ $value = '';
+ $existing_styles = io_readFile($this->temp_dir.'/styles.xml');
+ foreach ($this->styles as $stylename=>$stylexml) {
+ if (strpos($existing_styles, 'style:name="'.$stylename.'"') === FALSE) {
+ $value .= $stylexml;
+ }
+ }
+ // Loop on bullet/numerotation styles
+ if (strpos($existing_styles, 'style:name="List_20_1"') === FALSE) {
+ $value .= '<text:list-style style:name="List_20_1" style:display-name="List 1">';
+ for ($i=1;$i<=10;$i++) {
+ $value .= '<text:list-level-style-bullet text:level="'.$i.'" text:style-name="Numbering_20_Symbols" text:bullet-char="•">
+ <style:list-level-properties text:space-before="'.(0.4*($i-1)).'cm" text:min-label-width="0.4cm"/>
+ <style:text-properties style:font-name="StarSymbol"/>
+ </text:list-level-style-bullet>';
+ }
+ $value .= '</text:list-style>';
+ }
+ if (strpos($existing_styles, 'style:name="Numbering_20_1"') === FALSE) {
+ $value .= '<text:list-style style:name="Numbering_20_1" style:display-name="Numbering 1">';
+ for ($i=1;$i<=10;$i++) {
+ $value .= '<text:list-level-style-number text:level="'.$i.'" text:style-name="Numbering_20_Symbols" style:num-suffix="." style:num-format="1">
+ <style:list-level-properties text:space-before="'.(0.5*($i-1)).'cm" text:min-label-width="0.5cm"/>
+ </text:list-level-style-number>';
+ }
+ $value .= '</text:list-style>';
+ }
+ return $value;
+ }
+
+ /* Add missing fonts in the template */
+ function _odtFonts() {
+ $value = '';
+ $existing_styles = io_readFile($this->temp_dir.'/styles.xml');
+ foreach ($this->fonts as $name=>$xml) {
+ if (strpos($existing_styles, 'style:name="'.$name.'"') === FALSE) {
+ $value .= $xml;
+ }
+ }
+ return $value;
+ }
+
+ function cdata($text) {
+ $this->doc .= $this->_xmlEntities($text);
+ }
+
+ function p_open($style='Text_20_body'){
+ if (!$this->in_paragraph) { // opening a paragraph inside another paragraph is illegal
+ $this->in_paragraph = true;
+ $this->doc .= '<text:p text:style-name="'.$style.'">';
+ }
+ }
+
+ function p_close(){
+ if ($this->in_paragraph) {
+ $this->in_paragraph = false;
+ $this->doc .= '</text:p>';
+ }
+ }
+
+ function header($text, $level, $pos){
+ $hid = $this->_headerToLink($text,true);
+ $this->doc .= '<text:h text:style-name="Heading_20_'.$level.'" text:outline-level="'.$level.'">';
+ $this->doc .= '<text:bookmark-start text:name="'.$hid.'"/>';
+ $this->doc .= $this->_xmlEntities($text);
+ $this->doc .= '<text:bookmark-end text:name="'.$hid.'"/>';
+ $this->doc .= '</text:h>';
+ }
+
+ function hr() {
+ $this->doc .= '<text:p text:style-name="Horizontal_20_Line"/>';
+ }
+
+ function linebreak() {
+ $this->doc .= '<text:line-break/>';
+ }
+
+ function strong_open() {
+ $this->doc .= '<text:span text:style-name="Strong_20_Emphasis">';
+ }
+
+ function strong_close() {
+ $this->doc .= '</text:span>';
+ }
+
+ function emphasis_open() {
+ $this->doc .= '<text:span text:style-name="Emphasis">';
+ }
+
+ function emphasis_close() {
+ $this->doc .= '</text:span>';
+ }
+
+ function underline_open() {
+ $this->doc .= '<text:span text:style-name="underline">';
+ }
+
+ function underline_close() {
+ $this->doc .= '</text:span>';
+ }
+
+ function monospace_open() {
+ $this->doc .= '<text:span text:style-name="Source_20_Text">';
+ }
+
+ function monospace_close() {
+ $this->doc .= '</text:span>';
+ }
+
+ function subscript_open() {
+ $this->doc .= '<text:span text:style-name="sub">';
+ }
+
+ function subscript_close() {
+ $this->doc .= '</text:span>';
+ }
+
+ function superscript_open() {
+ $this->doc .= '<text:span text:style-name="sup">';
+ }
+
+ function superscript_close() {
+ $this->doc .= '</text:span>';
+ }
+
+ function deleted_open() {
+ $this->doc .= '<text:span text:style-name="del">';
+ }
+
+ function deleted_close() {
+ $this->doc .= '</text:span>';
+ }
+
+ /*
+ * Tables
+ */
+ function table_open($maxcols = NULL, $numrows = NULL){
+ $this->doc .= '<table:table>';
+ for($i=0; $i<$maxcols; $i++){
+ $this->doc .= '<table:table-column />';
+ }
+ }
+
+ function table_close(){
+ $this->doc .= '</table:table>';
+ }
+
+ function tablerow_open(){
+ $this->doc .= '<table:table-row>';
+ }
+
+ function tablerow_close(){
+ $this->doc .= '</table:table-row>';
+ }
+
+ function tableheader_open($colspan = 1, $align = "left"){
+ $this->doc .= '<table:table-cell office:value-type="string" table:style-name="tableheader" ';
+ //$this->doc .= ' table:style-name="tablealign'.$align.'"';
+ if ( $colspan > 1 ) {
+ $this->doc .= ' table:number-columns-spanned="'.$colspan.'"';
+ }
+ $this->doc .= '>';
+ $this->p_open('Table_20_Heading');
+ }
+
+ function tableheader_close(){
+ $this->p_close();
+ $this->doc .= '</table:table-cell>';
+ }
+
+ function tablecell_open($colspan = 1, $align = "left"){
+ $this->doc .= '<table:table-cell office:value-type="string" table:style-name="tablecell" ';
+ if ( $colspan > 1 ) {
+ $this->doc .= ' table:number-columns-spanned="'.$colspan.'"';
+ }
+ $this->doc .= '>';
+ if (!$align) $align = "left";
+ $style = "tablealign".$align;
+ $this->p_open($style);
+ }
+
+ function tablecell_close(){
+ $this->p_close();
+ $this->doc .= '</table:table-cell>';
+ }
+
+ /**
+ * Callback for footnote start syntax
+ *
+ * All following content will go to the footnote instead of
+ * the document. To achieve this the previous rendered content
+ * is moved to $store and $doc is cleared
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function footnote_open() {
+
+ // move current content to store and record footnote
+ $this->store = $this->doc;
+ $this->doc = '';
+ }
+
+ /**
+ * Callback for footnote end syntax
+ *
+ * All rendered content is moved to the $footnotes array and the old
+ * content is restored from $store again
+ *
+ * @author Andreas Gohr
+ */
+ function footnote_close() {
+ // recover footnote into the stack and restore old content
+ $footnote = $this->doc;
+ $this->doc = $this->store;
+ $this->store = '';
+
+ // check to see if this footnote has been seen before
+ $i = array_search($footnote, $this->footnotes);
+
+ if ($i === false) {
+ $i = count($this->footnotes);
+ // its a new footnote, add it to the $footnotes array
+ $this->footnotes[$i] = $footnote;
+
+ $this->doc .= '<text:note text:id="ftn'.$i.'" text:note-class="footnote">';
+ $this->doc .= '<text:note-citation>'.($i+1).'</text:note-citation>';
+ $this->doc .= '<text:note-body>';
+ $this->doc .= '<text:p text:style-name="Footnote">';
+ $this->doc .= $footnote;
+ $this->doc .= '</text:p>';
+ $this->doc .= '</text:note-body>';
+ $this->doc .= '</text:note>';
+
+ } else {
+ // seen this one before - just reference it FIXME: style isn't correct yet
+ $this->doc .= '<text:note-ref text:note-class="footnote" text:ref-name="ftn'.$i.'">'.($i+1).'</text:note-ref>';
+ }
+ }
+
+ function listu_open() {
+ $this->p_close();
+ $this->doc .= '<text:list text:style-name="List_20_1">';
+ }
+
+ function listu_close() {
+ $this->doc .= '</text:list>';
+ }
+
+ function listo_open() {
+ $this->p_close();
+ $this->doc .= '<text:list text:style-name="Numbering_20_1">';
+ }
+
+ function listo_close() {
+ $this->doc .= '</text:list>';
+ }
+
+ function listitem_open($level) {
+ $this->in_list_item = true;
+ $this->doc .= '<text:list-item>';
+ }
+
+ function listitem_close() {
+ $this->in_list_item = false;
+ $this->doc .= '</text:list-item>';
+ }
+
+ function listcontent_open() {
+ $this->doc .= '<text:p text:style-name="Text_20_body">';
+ }
+
+ function listcontent_close() {
+ $this->doc .= '</text:p>';
+ }
+
+ function unformatted($text) {
+ $this->doc .= $this->_xmlEntities($text);
+ }
+
+ function acronym($acronym) {
+ $this->doc .= $this->_xmlEntities($acronym);
+ }
+
+ function smiley($smiley) {
+ if ( array_key_exists($smiley, $this->smileys) ) {
+ $src = DOKU_INC."lib/images/smileys/".$this->smileys[$smiley];
+ $this->_odtAddImage($src);
+ } else {
+ $this->doc .= $this->_xmlEntities($smiley);
+ }
+ }
+
+ function entity($entity) {
+ # UTF-8 entity decoding is broken in PHP <5
+ if (version_compare(phpversion(), "5.0.0") and array_key_exists($entity, $this->entities) ) {
+ # decoding may fail for missing Multibyte-Support in entity_decode
+ $dec = @html_entity_decode($this->entities[$entity],ENT_NOQUOTES,'UTF-8');
+ if($dec){
+ $this->doc .= $this->_xmlEntities($dec);
+ }else{
+ $this->doc .= $this->_xmlEntities($entity);
+ }
+ } else {
+ $this->doc .= $this->_xmlEntities($entity);
+ }
+ }
+
+ function multiplyentity($x, $y) {
+ $this->doc .= $x.'×'.$y;
+ }
+
+ function singlequoteopening() {
+ global $lang;
+ $this->doc .= $lang['singlequoteopening'];
+ }
+
+ function singlequoteclosing() {
+ global $lang;
+ $this->doc .= $lang['singlequoteclosing'];
+ }
+
+ function apostrophe() {
+ global $lang;
+ $this->doc .= $lang['apostrophe'];
+ }
+
+ function doublequoteopening() {
+ global $lang;
+ $this->doc .= $lang['doublequoteopening'];
+ }
+
+ function doublequoteclosing() {
+ global $lang;
+ $this->doc .= $lang['doublequoteclosing'];
+ }
+
+ function php($text, $wrapper='dummy') {
+ $this->monospace_open();
+ $this->doc .= $this->_xmlEntities($text);
+ $this->monospace_close();
+ }
+ function phpblock($text) {
+ $this->file($text);
+ }
+
+ function html($text, $wrapper='dummy') {
+ $this->monospace_open();
+ $this->doc .= $this->_xmlEntities($text);
+ $this->monospace_close();
+ }
+ function htmlblock($text) {
+ $this->file($text);
+ }
+
+ /**
+ * static call back to replace spaces
+ */
+ function _preserveSpace($matches){
+ $spaces = $matches[1];
+ $len = strlen($spaces);
+ return '<text:s text:c="'.$len.'"/>';
+ }
+
+ function preformatted($text) {
+ $text = $this->_xmlEntities($text);
+ if (strpos($text, "\n") !== FALSE and strpos($text, "\n") == 0) {
+ // text starts with a newline, remove it
+ $text = substr($text,1);
+ }
+ $text = str_replace("\n",'<text:line-break/>',$text);
+ $text = preg_replace_callback('/( +)/',array('renderer_plugin_odt','_preserveSpace'),$text);
+
+ if ($this->in_list_item) { // if we're in a list item, we must close the <text:p> tag
+ $this->doc .= '</text:p>';
+ $this->doc .= '<text:p text:style-name="Preformatted_20_Text">';
+ $this->doc .= $text;
+ $this->doc .= '</text:p>';
+ $this->doc .= '<text:p>';
+ } else {
+ $this->doc .= '<text:p text:style-name="Preformatted_20_Text">';
+ $this->doc .= $text;
+ $this->doc .= '</text:p>';
+ }
+ }
+
+ function file($text) {
+ $this->preformatted($text);
+ }
+
+ function quote_open() {
+ if (!$this->in_paragraph) { // only start a new par if we're not already in one
+ $this->p_open();
+ }
+ $this->doc .= "&gt;";
+ }
+
+ function quote_close() {
+ if ($this->in_paragraph) { // only close the paragraph if we're actually in one
+ $this->p_close();
+ }
+ }
+
+ function code($text, $language = NULL) {
+ // FIXME we could convert GeSHi HTML and CSS classes to ODT XML here
+ $this->preformatted($text);
+ }
+
+ function internalmedia ($src, $title=NULL, $align=NULL, $width=NULL,
+ $height=NULL, $cache=NULL, $linking=NULL) {
+ global $conf;
+ global $ID;
+ resolve_mediaid(getNS($ID),$src, $exists);
+ list($ext,$mime) = mimetype($src);
+
+ if(substr($mime,0,5) == 'image'){
+ $file = mediaFN($src);
+ $this->_odtAddImage($file, $width, $height, $align, $title);
+ }else{
+ // FIXME build absolute medialink and call externallink()
+ $this->code('FIXME internalmedia: '.$src);
+ }
+ }
+
+ function externalmedia ($src, $title=NULL, $align=NULL, $width=NULL,
+ $height=NULL, $cache=NULL, $linking=NULL) {
+ global $conf;
+ global $ID;
+ list($ext,$mime) = mimetype($src);
+
+ if(substr($mime,0,5) == 'image'){
+ if($width) {
+ $width = 'svg:width="'.(($width/96.0)*2.54).'cm"';
+ } else {
+ $width = 'svg:rel-width="100%"';
+ }
+ if($height) {
+ $height = 'svg:height="'.(($height/96.0)*2.54).'cm"';
+ } else {
+ $height = 'svg:rel-height="100%"';
+ }
+
+ $style = 'media'.$align;
+ if($align){
+ $anchor = 'paragraph';
+ }else{
+ $anchor = 'as-char';
+ }
+
+ $this->doc .= '<draw:frame draw:style-name="'.$style.'" draw:name="'.$this->_xmlEntities($title).'"
+ text:anchor-type="'.$anchor.'" draw:z-index="0"
+ '.$width.' '.$height.' >';
+ $this->doc .= '<draw:image xlink:href="'.$this->_xmlEntities($src).'"
+ xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad"/>';
+ $this->doc .= '</draw:frame>';
+ }else{
+ $this->externallink($src,$title);
+ }
+ }
+
+ function camelcaselink($link) {
+ $this->internallink($link,$link);
+ }
+
+ function reference($id, $name = NULL) {
+ $this->doc .= '<text:a xlink:type="simple" xlink:href="#'.$id.'"';
+ if ($name) {
+ $this->doc .= '>'.$this->_xmlEntities($name).'</text:a>';
+ } else {
+ $this->doc .= '/>';
+ }
+ }
+
+ /**
+ * Render an internal Wiki Link
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function internallink($id, $name = NULL) {
+ global $conf;
+ global $ID;
+ // default name is based on $id as given
+ $default = $this->_simpleTitle($id);
+ // now first resolve and clean up the $id
+ resolve_pageid(getNS($ID),$id,$exists);
+ $name = $this->_getLinkTitle($name, $default, $isImage, $id);
+
+ // build the absolute URL (keeping a hash if any)
+ list($id,$hash) = explode('#',$id,2);
+ $url = wl($id,'',true);
+ if($hash) $url .='#'.$hash;
+
+ if ($ID == $id) {
+ $this->reference($hash, $name);
+ } else {
+ $this->_doLink($url,$name);
+ }
+ }
+
+ /**
+ * Add external link
+ */
+ function externallink($url, $name = NULL) {
+ global $conf;
+
+ $name = $this->_getLinkTitle($name, $url, $isImage);
+
+ $this->_doLink($url,$name);
+ }
+
+ /**
+ * Just print local links
+ *
+ * @fixme add image handling
+ */
+ function locallink($hash, $name = NULL){
+ $name = $this->_getLinkTitle($name, $hash, $isImage);
+ $this->doc .= $name;
+ }
+
+ /**
+ * InterWiki links
+ */
+ function interwikilink($match, $name = NULL, $wikiName, $wikiUri) {
+ $name = $this->_getLinkTitle($name, $wikiUri, $isImage);
+ $url = $this-> _resolveInterWiki($wikiName,$wikiUri);
+ $this->_doLink($url,$name);
+ }
+
+ /**
+ * Just print WindowsShare links
+ *
+ * @fixme add image handling
+ */
+ function windowssharelink($url, $name = NULL) {
+ $name = $this->_getLinkTitle($name, $url, $isImage);
+ $this->doc .= $name;
+ }
+
+ /**
+ * Just print email links
+ *
+ * @fixme add image handling
+ */
+ function emaillink($address, $name = NULL) {
+ $name = $this->_getLinkTitle($name, $address, $isImage);
+ $this->_doLink("mailto:".$address,$name);
+ }
+
+ /**
+ * Add a hyperlink, handling Images correctly
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _doLink($url,$name){
+ $url = $this->_xmlEntities($url);
+ if(is_array($name)){
+ // Images
+ if($url) $this->doc .= '<draw:a xlink:type="simple" xlink:href="'.$url.'">';
+
+ if($name['type'] == 'internalmedia'){
+ $this->internalmedia($name['src'],
+ $name['title'],
+ $name['align'],
+ $name['width'],
+ $name['height'],
+ $name['cache'],
+ $name['linking']);
+ }
+
+ if($url) $this->doc .= '</draw:a>';
+ }else{
+ // Text
+ if($url) $this->doc .= '<text:a xlink:type="simple" xlink:href="'.$url.'">';
+ $this->doc .= $name; // we get the name already XML encoded
+ if($url) $this->doc .= '</text:a>';
+ }
+ }
+
+ /**
+ * Construct a title and handle images in titles
+ *
+ * @author Harry Fuecks <hfuecks@gmail.com>
+ */
+ function _getLinkTitle($title, $default, & $isImage, $id=null) {
+ global $conf;
+
+ $isImage = false;
+ if ( is_null($title) ) {
+ if ($conf['useheading'] && $id) {
+ $heading = p_get_first_heading($id);
+ if ($heading) {
+ return $this->_xmlEntities($heading);
+ }
+ }
+ return $this->_xmlEntities($default);
+ } else if ( is_string($title) ) {
+ return $this->_xmlEntities($title);
+ } else if ( is_array($title) ) {
+ $isImage = true;
+ return $title;
+ }
+ }
+
+ /**
+ * Creates a linkid from a headline
+ *
+ * @param string $title The headline title
+ * @param boolean $create Create a new unique ID?
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _headerToLink($title,$create=false) {
+ $title = str_replace(':','',cleanID($title));
+ $title = ltrim($title,'0123456789._-');
+ if(empty($title)) $title='section';
+
+ if($create){
+ // make sure tiles are unique
+ $num = '';
+ while(in_array($title.$num,$this->headers)){
+ ($num) ? $num++ : $num = 1;
+ }
+ $title = $title.$num;
+ $this->headers[] = $title;
+ }
+
+ return $title;
+ }
+
+
+ function _xmlEntities($value) {
+ return str_replace( array('&','"',"'",'<','>'), array('&#38;','&#34;','&#39;','&#60;','&#62;'), $value);
+ }
+
+ function rss ($url,$params){
+ global $lang;
+ global $conf;
+
+ require_once(DOKU_INC.'inc/FeedParser.php');
+ $feed = new FeedParser();
+ $feed->feed_url($url);
+
+ //disable warning while fetching
+ if (!defined('DOKU_E_LEVEL')) { $elvl = error_reporting(E_ERROR); }
+ $rc = $feed->init();
+ if (!defined('DOKU_E_LEVEL')) { error_reporting($elvl); }
+
+ //decide on start and end
+ if($params['reverse']){
+ $mod = -1;
+ $start = $feed->get_item_quantity()-1;
+ $end = $start - ($params['max']);
+ $end = ($end < -1) ? -1 : $end;
+ }else{
+ $mod = 1;
+ $start = 0;
+ $end = $feed->get_item_quantity();
+ $end = ($end > $params['max']) ? $params['max'] : $end;;
+ }
+
+ $this->listu_open();
+ if($rc){
+ for ($x = $start; $x != $end; $x += $mod) {
+ $item = $feed->get_item($x);
+ $this->listitem_open(0);
+ $this->listcontent_open();
+ $this->externallink($item->get_permalink(),
+ $item->get_title());
+ if($params['author']){
+ $author = $item->get_author(0);
+ if($author){
+ $name = $author->get_name();
+ if(!$name) $name = $author->get_email();
+ if($name) $this->cdata(' '.$lang['by'].' '.$name);
+ }
+ }
+ if($params['date']){
+ $this->cdata(' ('.$item->get_date($conf['dformat']).')');
+ }
+ if($params['details']){
+ $this->cdata(strip_tags($item->get_description()));
+ }
+ $this->listcontent_close();
+ $this->listitem_close();
+ }
+ }else{
+ $this->listitem_open(0);
+ $this->listcontent_open();
+ $this->emphasis_open();
+ $this->cdata($lang['rssfailed']);
+ $this->emphasis_close();
+ $this->externallink($url);
+ $this->listcontent_close();
+ $this->listitem_close();
+ }
+ $this->listu_close();
+ }
+
+
+ function _odtAddImage($src, $width = NULL, $height = NULL, $align = NULL, $title = NULL, $style = NULL){
+ list($ext,$mime) = mimetype($src);
+ $name = 'Pictures/'.md5($src).'.'.$ext;
+ if(!$this->manifest[$name]){
+ $this->manifest[$name] = $mime;
+ $this->ZIP->add_File(io_readfile($src,false),$name,0);
+ }
+ // make sure width and height is available
+ // FIXME we don't have the dimension of an external file
+ // (except it's cached, but this is not the default) there seems
+ // to be no way to specify "use original image" in ODF - thus
+ // a hardcoded default size of 200 pixel here
+ if(!$width || !$height){
+ $info = getimagesize($src);
+ if(!$width){
+ $width = $info[0];
+ $height = $info[1];
+ }else{
+ $height = round(($width * $info[1]) / $info[0]);
+ }
+ }
+
+ // convert from pixel to centimeters
+ $width = (($width/96.0)*2.54);
+ $height = (($height/96.0)*2.54);
+ // Don't be wider than the page
+ if ($width >= 17){ // FIXME : this assumes A4 page format with 2cm margins
+ $width = $width.'cm" style:rel-width="100%';
+ $height = $height.'cm" style:rel-height="scale';
+ } else {
+ $width = $width.'cm';
+ $height = $height.'cm';
+ }
+
+ if($align){
+ $anchor = 'paragraph';
+ }else{
+ $anchor = 'as-char';
+ }
+
+ if (!$style or !array_key_exists($style, $this->autostyles)) {
+ $style = 'media'.$align;
+ }
+
+ if ($title) {
+ $this->doc .= '<draw:frame draw:style-name="'.$style.'" draw:name="'.$this->_xmlEntities($title).' Legend"
+ text:anchor-type="'.$anchor.'" draw:z-index="0" svg:width="'.$width.'">';
+ $this->doc .= '<draw:text-box>';
+ $this->doc .= '<text:p text:style-name="legendcenter">';
+ }
+ $this->doc .= '<draw:frame draw:style-name="'.$style.'" draw:name="'.$this->_xmlEntities($title).'"
+ text:anchor-type="'.$anchor.'" draw:z-index="0"
+ svg:width="'.$width.'" svg:height="'.$height.'" >';
+ $this->doc .= '<draw:image xlink:href="'.$this->_xmlEntities($name).'"
+ xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad"/>';
+ $this->doc .= '</draw:frame>';
+ if ($title) {
+ $this->doc .= $this->_xmlEntities($title).'</text:p></draw:text-box></draw:frame>';
+ }
+ }
+
+}
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/styles.xml b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/styles.xml
new file mode 100644
index 000000000..c328464f3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/styles.xml
@@ -0,0 +1,158 @@
+<?xml version="1.0"?>
+<!--
+ This file defines how the document is styled. This was extracted from a ODT file
+ created in OpenOffice 2.0 and could probably be much simpler.
+
+ You probably want to replace this file with a style fitting your corporate identity.
+
+ To do so, export the wiki:syntax page, edit it's style definitions (be sure to keep
+ the names) and save the resulting file. Extract the resulting file with unzip and
+ copy the styles.xml over this one.
+-->
+<office:document-styles xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" office:version="1.0">
+ <office:font-face-decls>
+ <style:font-face style:name="StarSymbol" svg:font-family="StarSymbol"/>
+ <style:font-face style:name="Bitstream Vera Sans Mono" svg:font-family="'Bitstream Vera Sans Mono'" style:font-family-generic="modern" style:font-pitch="fixed"/>
+ <style:font-face style:name="Bitstream Vera Sans" svg:font-family="'Bitstream Vera Sans'" style:font-family-generic="roman" style:font-pitch="variable"/>
+ <style:font-face style:name="Bitstream Vera Sans1" svg:font-family="'Bitstream Vera Sans'" style:font-family-generic="swiss" style:font-pitch="variable"/>
+ <style:font-face style:name="Bitstream Vera Sans2" svg:font-family="'Bitstream Vera Sans'" style:font-family-generic="system" style:font-pitch="variable"/>
+ </office:font-face-decls>
+ <office:styles>
+ <style:default-style style:family="graphic">
+ <style:graphic-properties draw:shadow-offset-x="0.3cm" draw:shadow-offset-y="0.3cm" draw:start-line-spacing-horizontal="0.283cm" draw:start-line-spacing-vertical="0.283cm" draw:end-line-spacing-horizontal="0.283cm" draw:end-line-spacing-vertical="0.283cm" style:flow-with-text="false"/>
+ <style:paragraph-properties style:text-autospace="ideograph-alpha" style:line-break="strict" style:writing-mode="lr-tb" style:font-independent-line-spacing="false">
+ <style:tab-stops/>
+ </style:paragraph-properties>
+ <style:text-properties style:use-window-font-color="true" fo:font-size="12pt" style:font-size-asian="12pt" style:font-size-complex="12pt"/>
+ </style:default-style>
+ <style:default-style style:family="paragraph">
+ <style:paragraph-properties fo:hyphenation-ladder-count="no-limit" style:text-autospace="ideograph-alpha" style:punctuation-wrap="hanging" style:line-break="strict" style:tab-stop-distance="1.251cm" style:writing-mode="page"/>
+ <style:text-properties style:use-window-font-color="true" style:font-name="Bitstream Vera Sans" fo:font-size="12pt" style:font-name-asian="Bitstream Vera Sans2" style:font-size-asian="12pt" style:font-name-complex="Bitstream Vera Sans2" style:font-size-complex="12pt" fo:hyphenate="false" fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="2"/>
+ </style:default-style>
+ <style:default-style style:family="table">
+ <style:table-properties table:border-model="collapsing"/>
+ </style:default-style>
+ <style:default-style style:family="table-row">
+ <style:table-row-properties fo:keep-together="auto"/>
+ </style:default-style>
+ <style:style style:name="Standard" style:family="paragraph" style:class="text"/>
+ <style:style style:name="Text_20_body" style:display-name="Text body" style:family="paragraph" style:parent-style-name="Standard" style:class="text">
+ <style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0.212cm" fo:text-align="justify" style:justify-single-word="false"/>
+ </style:style>
+ <style:style style:name="Heading" style:family="paragraph" style:parent-style-name="Standard" style:next-style-name="Text_20_body" style:class="text">
+ <style:paragraph-properties fo:margin-top="0.423cm" fo:margin-bottom="0.212cm" fo:keep-with-next="always"/>
+ <style:text-properties style:font-name="Bitstream Vera Sans1" fo:font-size="14pt" style:font-name-asian="Bitstream Vera Sans2" style:font-size-asian="14pt" style:font-name-complex="Bitstream Vera Sans2" style:font-size-complex="14pt"/>
+ </style:style>
+ <style:style style:name="Heading_20_1" style:display-name="Heading 1" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text_20_body" style:class="text" style:default-outline-level="1">
+ <style:text-properties style:font-name="Bitstream Vera Sans" fo:font-size="24pt" fo:font-weight="bold" style:font-name-asian="Bitstream Vera Sans2" style:font-size-asian="24pt" style:font-weight-asian="bold" style:font-name-complex="Bitstream Vera Sans2" style:font-size-complex="24pt" style:font-weight-complex="bold"/>
+ </style:style>
+ <style:style style:name="Heading_20_2" style:display-name="Heading 2" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text_20_body" style:class="text" style:default-outline-level="2">
+ <style:text-properties style:font-name="Bitstream Vera Sans" fo:font-size="18pt" fo:font-weight="bold" style:font-name-asian="Bitstream Vera Sans2" style:font-size-asian="18pt" style:font-weight-asian="bold" style:font-name-complex="Bitstream Vera Sans2" style:font-size-complex="18pt" style:font-weight-complex="bold"/>
+ </style:style>
+ <style:style style:name="Heading_20_3" style:display-name="Heading 3" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text_20_body" style:class="text" style:default-outline-level="3">
+ <style:text-properties style:font-name="Bitstream Vera Sans" fo:font-size="14pt" fo:font-weight="bold" style:font-name-asian="Bitstream Vera Sans2" style:font-size-asian="14pt" style:font-weight-asian="bold" style:font-name-complex="Bitstream Vera Sans2" style:font-size-complex="14pt" style:font-weight-complex="bold"/>
+ </style:style>
+ <style:style style:name="Heading_20_4" style:display-name="Heading 4" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text_20_body" style:class="text" style:default-outline-level="4">
+ <style:text-properties style:font-name="Bitstream Vera Sans" fo:font-size="12pt" fo:font-weight="bold" style:font-name-asian="Bitstream Vera Sans2" style:font-size-asian="12pt" style:font-weight-asian="bold" style:font-name-complex="Bitstream Vera Sans2" style:font-size-complex="12pt" style:font-weight-complex="bold"/>
+ </style:style>
+ <style:style style:name="Heading_20_5" style:display-name="Heading 5" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text_20_body" style:class="text" style:default-outline-level="5">
+ <style:text-properties style:font-name="Bitstream Vera Sans" fo:font-size="10pt" fo:font-weight="bold" style:font-name-asian="Bitstream Vera Sans2" style:font-size-asian="10pt" style:font-weight-asian="bold" style:font-name-complex="Bitstream Vera Sans2" style:font-size-complex="10pt" style:font-weight-complex="bold"/>
+ </style:style>
+ <style:style style:name="List" style:family="paragraph" style:parent-style-name="Text_20_body" style:class="list"/>
+ <style:style style:name="Table_20_Contents" style:display-name="Table Contents" style:family="paragraph" style:parent-style-name="Standard" style:class="extra">
+ <style:paragraph-properties text:number-lines="false" text:line-number="0"/>
+ </style:style>
+ <style:style style:name="Table_20_Heading" style:display-name="Table Heading" style:family="paragraph" style:parent-style-name="Table_20_Contents" style:class="extra">
+ <style:paragraph-properties fo:text-align="center" style:justify-single-word="false" text:number-lines="false" text:line-number="0"/>
+ <style:text-properties fo:font-weight="bold" style:font-weight-asian="bold" style:font-weight-complex="bold"/>
+ </style:style>
+ <style:style style:name="Caption" style:family="paragraph" style:parent-style-name="Standard" style:class="extra">
+ <style:paragraph-properties fo:margin-top="0.212cm" fo:margin-bottom="0.212cm" text:number-lines="false" text:line-number="0"/>
+ <style:text-properties fo:font-size="12pt" fo:font-style="italic" style:font-size-asian="12pt" style:font-style-asian="italic" style:font-size-complex="12pt" style:font-style-complex="italic"/>
+ </style:style>
+ <style:style style:name="Index" style:family="paragraph" style:parent-style-name="Standard" style:class="index">
+ <style:paragraph-properties text:number-lines="false" text:line-number="0"/>
+ </style:style>
+ <style:style style:name="Quotations" style:family="paragraph" style:parent-style-name="Standard" style:class="html">
+ <style:paragraph-properties fo:margin-left="1cm" fo:margin-right="1cm" fo:margin-top="0cm" fo:margin-bottom="0.499cm" fo:text-indent="0cm" style:auto-text-indent="false"/>
+ </style:style>
+ <style:style style:name="Preformatted_20_Text" style:display-name="Preformatted Text" style:family="paragraph" style:parent-style-name="Standard" style:class="html">
+ <style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm"/>
+ <style:text-properties style:font-name="Bitstream Vera Sans Mono" fo:font-size="10pt" style:font-name-asian="Bitstream Vera Sans Mono" style:font-size-asian="10pt" style:font-name-complex="Bitstream Vera Sans Mono" style:font-size-complex="10pt"/>
+ </style:style>
+ <style:style style:name="Horizontal_20_Line" style:display-name="Horizontal Line" style:family="paragraph" style:parent-style-name="Standard" style:next-style-name="Text_20_body" style:class="html">
+ <style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0.499cm" style:border-line-width-bottom="0.002cm 0.035cm 0.002cm" fo:padding="0cm" fo:border-left="none" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.039cm double #808080" text:number-lines="false" text:line-number="0" style:join-border="false"/>
+ <style:text-properties fo:font-size="6pt" style:font-size-asian="6pt" style:font-size-complex="6pt"/>
+ </style:style>
+ <style:style style:name="Footnote" style:family="paragraph" style:parent-style-name="Standard" style:class="extra">
+ <style:paragraph-properties fo:margin-left="0.5cm" fo:margin-right="0cm" fo:text-indent="-0.5cm" style:auto-text-indent="false" text:number-lines="false" text:line-number="0"/>
+ <style:text-properties fo:font-size="10pt" style:font-size-asian="10pt" style:font-size-complex="10pt"/>
+ </style:style>
+ <style:style style:name="Numbering_20_Symbols" style:display-name="Numbering Symbols" style:family="text"/>
+ <style:style style:name="Bullet_20_Symbols" style:display-name="Bullet Symbols" style:family="text">
+ <style:text-properties style:font-name="StarSymbol" fo:font-size="9pt" style:font-name-asian="StarSymbol" style:font-size-asian="9pt" style:font-name-complex="StarSymbol" style:font-size-complex="9pt"/>
+ </style:style>
+ <style:style style:name="Internet_20_link" style:display-name="Internet link" style:family="text">
+ <style:text-properties fo:color="#000080" style:text-underline-style="solid" style:text-underline-width="auto" style:text-underline-color="font-color"/>
+ </style:style>
+ <style:style style:name="Emphasis" style:family="text">
+ <style:text-properties fo:font-style="italic" style:font-style-asian="italic" style:font-style-complex="italic"/>
+ </style:style>
+ <style:style style:name="Strong_20_Emphasis" style:display-name="Strong Emphasis" style:family="text">
+ <style:text-properties fo:font-weight="bold" style:font-weight-asian="bold" style:font-weight-complex="bold"/>
+ </style:style>
+ <style:style style:name="Source_20_Text" style:display-name="Source Text" style:family="text">
+ <style:text-properties style:font-name="Bitstream Vera Sans Mono" style:font-name-asian="Bitstream Vera Sans Mono" style:font-name-complex="Bitstream Vera Sans Mono"/>
+ </style:style>
+ <style:style style:name="Graphics" style:family="graphic">
+ <style:graphic-properties text:anchor-type="paragraph" svg:x="0cm" svg:y="0cm" style:wrap="dynamic" style:number-wrapped-paragraphs="no-limit" style:wrap-contour="false" style:vertical-pos="top" style:vertical-rel="paragraph" style:horizontal-pos="center" style:horizontal-rel="paragraph"/>
+ </style:style>
+ <text:outline-style>
+ <text:outline-level-style text:level="1" style:num-format="">
+ <style:list-level-properties text:min-label-distance="0.381cm"/>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="2" style:num-format="">
+ <style:list-level-properties text:min-label-distance="0.381cm"/>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="3" style:num-format="">
+ <style:list-level-properties text:min-label-distance="0.381cm"/>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="4" style:num-format="">
+ <style:list-level-properties text:min-label-distance="0.381cm"/>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="5" style:num-format="">
+ <style:list-level-properties text:min-label-distance="0.381cm"/>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="6" style:num-format="">
+ <style:list-level-properties text:min-label-distance="0.381cm"/>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="7" style:num-format="">
+ <style:list-level-properties text:min-label-distance="0.381cm"/>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="8" style:num-format="">
+ <style:list-level-properties text:min-label-distance="0.381cm"/>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="9" style:num-format="">
+ <style:list-level-properties text:min-label-distance="0.381cm"/>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="10" style:num-format="">
+ <style:list-level-properties text:min-label-distance="0.381cm"/>
+ </text:outline-level-style>
+ </text:outline-style>
+
+ <text:list-style style:name="Numbering_20_1" style:display-name="Numbering 1"/>
+ <text:list-style style:name="List_20_1" style:display-name="List 1"/>
+
+ <text:notes-configuration text:note-class="footnote" style:num-format="1" text:start-value="0" text:footnotes-position="page" text:start-numbering-at="document"/>
+ <text:notes-configuration text:note-class="endnote" style:num-format="i" text:start-value="0"/>
+ <text:linenumbering-configuration text:number-lines="false" text:offset="0.499cm" style:num-format="1" text:number-position="left" text:increment="5"/>
+
+ </office:styles>
+
+ <office:automatic-styles/>
+
+ <office:master-styles>
+ <style:master-page style:name="Standard" style:page-layout-name="pm1"/>
+ </office:master-styles>
+</office:document-styles>
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/syntax.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/syntax.php
new file mode 100644
index 000000000..a8d0832d7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/syntax.php
@@ -0,0 +1,96 @@
+<?php
+/**
+ * ODT Plugin: Exports to ODT
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Aurelien Bompard <aurelien@bompard.org>
+ */
+// must be run within Dokuwiki
+if(!defined('DOKU_INC')) die();
+
+if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
+require_once(DOKU_PLUGIN.'syntax.php');
+
+class syntax_plugin_odt extends DokuWiki_Syntax_Plugin {
+
+ /**
+ * return some info
+ */
+ function getInfo(){
+ return confToHash(dirname(__FILE__).'/info.txt');
+ }
+
+ /**
+ * What kind of syntax are we?
+ */
+ function getType(){
+ return 'substition';
+ }
+
+ /**
+ * What about paragraphs?
+ */
+ function getPType(){
+ return 'normal';
+ }
+
+ /**
+ * Where to sort in?
+ */
+ function getSort(){
+ return 319; // Before image detection, which uses {{...}} and is 320
+ }
+
+ /**
+ * Connect pattern to lexer
+ */
+ function connectTo($mode) {
+ $this->Lexer->addSpecialPattern('~~ODT~~',$mode,'plugin_odt');
+ $this->Lexer->addSpecialPattern('{{odt>.+?}}',$mode,'plugin_odt');
+ }
+
+ /**
+ * Handle the match
+ */
+ function handle($match, $state, $pos, &$handler){
+ // Export button
+ if ($match == '~~ODT~~') { return array(); }
+ // Extended info
+ $match = substr($match,6,-2); //strip markup
+ $extinfo = explode(':',$match);
+ $info_type = $extinfo[0];
+ if (count($extinfo) < 2) { // no value
+ $info_value = '';
+ } elseif (count($extinfo) == 2) {
+ $info_value = $extinfo[1];
+ } else { // value may contain colons
+ $info_value = implode(array_slice($extinfo,1), ':');
+ }
+ return array($info_type, $info_value);
+ }
+
+ /**
+ * Create output
+ */
+ function render($format, &$renderer, $data) {
+ global $ID, $REV;
+ if (!$data) { // Export button
+ if($format != 'xhtml') return false;
+ $renderer->doc .= '<a href="'.exportlink($ID, 'odt', ($REV != '' ? 'rev='.$REV : '')).'" title="'.$this->getLang('view').'">';
+ $renderer->doc .= '<img src="'.DOKU_BASE.'lib/plugins/odt/odt.png" align="right" alt="'.$this->getLang('view').'" width="48" height="48" />';
+ $renderer->doc .= '</a>';
+ return true;
+ } else { // Extended info
+ list($info_type, $info_value) = $data;
+ if ($info_type == "template") { // Template-based export
+ $renderer->template = $info_value;
+ p_set_metadata($ID, array("relation"=> array("odt"=>array("template"=>$info_value))));
+ }
+ }
+ return false;
+ }
+
+}
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/admin.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/admin.php
new file mode 100644
index 000000000..b24b1ff6e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/admin.php
@@ -0,0 +1,202 @@
+<?php
+// must be run within Dokuwiki
+if(!defined('DOKU_INC')) die();
+
+if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
+require_once(DOKU_PLUGIN.'admin.php');
+require_once(DOKU_INC.'inc/changelog.php');
+
+/**
+ * All DokuWiki plugins to extend the admin function
+ * need to inherit from this class
+ */
+class admin_plugin_revert extends DokuWiki_Admin_Plugin {
+ var $cmd;
+ // some vars which might need tuning later
+ var $max_lines = 800; // lines to read from changelog
+ var $max_revs = 20; // numer of old revisions to check
+
+
+ /**
+ * Constructor
+ */
+ function admin_plugin_revert(){
+ $this->setupLocale();
+ }
+
+ /**
+ * return some info
+ */
+ function getInfo(){
+ return array(
+ 'author' => 'Andreas Gohr',
+ 'email' => 'andi@splitbrain.org',
+ 'date' => '2008-12-10',
+ 'name' => 'Revert Manager',
+ 'desc' => 'Allows you to mass revert recent edits',
+ 'url' => 'http://dokuwiki.org/plugin:revert',
+ );
+ }
+
+ /**
+ * access for managers
+ */
+ function forAdminOnly(){
+ return false;
+ }
+
+ /**
+ * return sort order for position in admin menu
+ */
+ function getMenuSort() {
+ return 40;
+ }
+
+ /**
+ * handle user request
+ */
+ function handle() {
+ }
+
+ /**
+ * output appropriate html
+ */
+ function html() {
+
+ echo $this->plugin_locale_xhtml('intro');
+
+ $this->_searchform();
+
+ if(is_array($_REQUEST['revert']) && checkSecurityToken()){
+ $this->_revert($_REQUEST['revert'],$_REQUEST['filter']);
+ }elseif(isset($_REQUEST['filter'])){
+ $this->_list($_REQUEST['filter']);
+ }
+ }
+
+ /**
+ * Display the form for searching spam pages
+ */
+ function _searchform(){
+ global $lang;
+ echo '<form action="" method="post"><div class="no">';
+ echo '<label>'.$this->getLang('filter').': </label>';
+ echo '<input type="text" name="filter" class="edit" value="'.hsc($_REQUEST['filter']).'" />';
+ echo '<input type="submit" class="button" value="'.$lang['btn_search'].'" />';
+ echo ' <span>'.$this->getLang('note1').'</span>';
+ echo '</div></form><br /><br />';
+ }
+
+ /**
+ * Start the reversion process
+ */
+ function _revert($revert,$filter){
+ global $conf;
+
+ echo '<hr /><br />';
+ echo '<p>'.$this->getLang('revstart').'</p>';
+
+ echo '<ul>';
+ foreach($revert as $id){
+ global $REV;
+
+ // find the last non-spammy revision
+ $data = '';
+ $old = getRevisions($id, 0, $this->max_revs);
+ if(count($old)){
+ foreach($old as $REV){
+ $data = rawWiki($id,$REV);
+ if(strpos($data,$filter) === false) break;
+ }
+ }
+
+ if($data){
+ saveWikiText($id,$data,'old revision restored',false);
+ printf('<li><div class="li">'.$this->getLang('reverted').'</div></li>',$id,$REV);
+ }else{
+ saveWikiText($id,'','',false);
+ printf('<li><div class="li">'.$this->getLang('removed').'</div></li>',$id);
+ }
+ @set_time_limit(10);
+ flush();
+ }
+ echo '</ul>';
+
+ echo '<p>'.$this->getLang('revstop').'</p>';
+ }
+
+ /**
+ * List recent edits matching the given filter
+ */
+ function _list($filter){
+ global $conf;
+ echo '<hr /><br />';
+ echo '<form action="" method="post"><div class="no">';
+ echo '<input type="hidden" name="filter" value="'.hsc($filter).'" />';
+ formSecurityToken();
+
+ $recents = getRecents(0,$this->max_lines);
+ echo '<ul>';
+
+
+ $cnt = 0;
+ foreach($recents as $recent){
+ if($filter){
+ if(strpos(rawWiki($recent['id']),$filter) === false) continue;
+ }
+
+ $cnt++;
+ $date = strftime($conf['dformat'],$recent['date']);
+
+ echo ($recent['type']===DOKU_CHANGE_TYPE_MINOR_EDIT) ? '<li class="minor">' : '<li>';
+ echo '<div class="li">';
+ echo '<input type="checkbox" name="revert[]" value="'.hsc($recent['id']).'" checked="checked" id="revert__'.$cnt.'" />';
+ echo '<label for="revert__'.$cnt.'">'.$date.'</label> ';
+
+ echo '<a href="'.wl($recent['id'],"do=diff").'">';
+ $p = array();
+ $p['src'] = DOKU_BASE.'lib/images/diff.png';
+ $p['width'] = 15;
+ $p['height'] = 11;
+ $p['title'] = $lang['diff'];
+ $p['alt'] = $lang['diff'];
+ $att = buildAttributes($p);
+ echo "<img $att />";
+ echo '</a> ';
+
+ echo '<a href="'.wl($recent['id'],"do=revisions").'">';
+ $p = array();
+ $p['src'] = DOKU_BASE.'lib/images/history.png';
+ $p['width'] = 12;
+ $p['height'] = 14;
+ $p['title'] = $lang['btn_revs'];
+ $p['alt'] = $lang['btn_revs'];
+ $att = buildAttributes($p);
+ echo "<img $att />";
+ echo '</a> ';
+
+ echo html_wikilink(':'.$recent['id'],(useHeading('navigation'))?NULL:$recent['id']);
+ echo ' &ndash; '.htmlspecialchars($recent['sum']);
+
+ echo ' <span class="user">';
+ echo $recent['user'].' '.$recent['ip'];
+ echo '</span>';
+
+ echo '</div>';
+ echo '</li>';
+
+ @set_time_limit(10);
+ flush();
+ }
+ echo '</ul>';
+
+ echo '<p>';
+ echo '<input type="submit" class="button" value="'.$this->getLang('revert').'" /> ';
+ printf($this->getLang('note2'),hsc($filter));
+ echo '</p>';
+
+ echo '</div></form>';
+ }
+
+}
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/af/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/af/lang.php
new file mode 100644
index 000000000..1fff08db3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/af/lang.php
@@ -0,0 +1,5 @@
+<?php
+/**
+ * Afrikaans language file
+ *
+ */
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ar/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ar/lang.php
new file mode 100644
index 000000000..cdab0cf43
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ar/lang.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * Arabic language file
+ *
+ * @author Yaman Hokan <always.smile.yh@hotmail.com>
+ */
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/bg/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/bg/intro.txt
new file mode 100644
index 000000000..ab7308d6d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/bg/intro.txt
@@ -0,0 +1,4 @@
+====== ВъзÑтановÑване ======
+
+Тази Ñтраница помага при автоматичното възÑтановÑване от Ñпам-атака. За да намерите ÑпиÑък ÑÑŠÑ Ñпамнати Ñтраници, въведете текÑÑ‚ за Ñ‚ÑŠÑ€Ñене(пр. Ñпам препратка), Ñлед това потвърдете, че намерените Ñтраници Ñа наиÑтина Ñпам и възÑтановете редакциите.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/bg/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/bg/lang.php
new file mode 100644
index 000000000..6f0ff0672
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/bg/lang.php
@@ -0,0 +1,15 @@
+<?php
+/**
+ * bulgarian language file
+ * @author Nikolay Vladimirov <nikolay@vladimiroff.com>
+ * @author Viktor Usunov <usun0v@mail.bg>
+ */
+$lang['menu'] = 'ВъзÑтановÑване';
+$lang['filter'] = 'ТърÑене на Ñпамната Ñтраници';
+$lang['revert'] = 'Избрани Ñтраници за възÑтановÑване';
+$lang['reverted'] = '%s върнат до верÑÐ¸Ñ %s';
+$lang['removed'] = '%s премахнат';
+$lang['revstart'] = 'ПроцеÑÑŠÑ‚ на възÑтановÑване започна. Това може да отнеме много време. Ðко Ñкриптът Ñе проÑрочи преди да завърши, Ñ‚Ñ€Ñбва да възÑтановÑвате на по-малки парчета.';
+$lang['revstop'] = 'ПроцеÑÑŠÑ‚ на възÑтановÑване завърши уÑпешно.';
+$lang['note1'] = 'Забележка: за Ñ‚ÑŠÑ€Ñенето имат значение малки/големи букви';
+$lang['note2'] = 'Забележка: Ñтраницата ще бъде възвърната без да Ñъдържа Ñпам терминът <i>%s</i>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca-valencia/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca-valencia/intro.txt
new file mode 100644
index 000000000..fed2cb9cc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca-valencia/intro.txt
@@ -0,0 +1,4 @@
+====== Gestor de reversions ======
+
+Esta pàgina ajuda en la reversió automàtica d'atacs de spam. Per a
+trobar una llista de pàgines que tinguen spam introduïxca una cadena de busca (p. e. una URL de spam), confirme que les pàgines trobades tenen realment spam i revertixca les edicions.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca-valencia/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca-valencia/lang.php
new file mode 100644
index 000000000..77dd5808e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca-valencia/lang.php
@@ -0,0 +1,15 @@
+<?php
+/**
+ * valencian language file
+ * @author Bernat Arlandis <berarma@ya.com>
+ * @author Bernat Arlandis <berarma@llenguaitecnologia.com>
+ */
+$lang['menu'] = 'Gestor de reversions';
+$lang['filter'] = 'Buscar pàgines en spam';
+$lang['revert'] = 'Revertir pàgines seleccionades';
+$lang['reverted'] = '%s revertides a la versió %s';
+$lang['removed'] = '%s llevades';
+$lang['revstart'] = 'El procés de reversió ha començat. Açò pot dur prou de temps. Si es talla abans d\'acabar, haurà de revertir per parts.';
+$lang['revstop'] = 'El procés de reversió ha finalisat correctament.';
+$lang['note1'] = 'Nota: esta busca és sensible a mayúscules';
+$lang['note2'] = 'Nota: esta pàgina es revertirà a l\'última versió que no continga el spam definit pel terme <i>%s</i>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca/intro.txt
new file mode 100644
index 000000000..0af2e8e6d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca/intro.txt
@@ -0,0 +1,3 @@
+====== Gestió de reversions ======
+
+Aquesta pàgina us ajuda a revertir automàticament els canvis que siguin producte d'un atac amb brossa. Per trobar la llista de pàgines atacades, cerqueu una cadena adequada (p. ex. un URL de propaganda), confirmeu que les pàgines trobades contenen realment brossa i llavors revertiu-les a revisions anteriors. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca/lang.php
new file mode 100644
index 000000000..b8800911f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca/lang.php
@@ -0,0 +1,18 @@
+<?php
+/**
+ * Catalan language file
+ *
+ * @author Carles Bellver <carles.bellver@gmail.com>
+ * @author carles.bellver@gmail.com
+ * @author carles.bellver@cent.uji.es
+ * @author Carles Bellver <carles.bellver@cent.uji.es>
+ */
+$lang['menu'] = 'Gestió de reversions';
+$lang['filter'] = 'Cerca pàgines brossa';
+$lang['revert'] = 'Reverteix les pàgines seleccionades';
+$lang['reverted'] = 'S\'ha revertit %s a la revisió %s';
+$lang['removed'] = 'S\'ha suprimit %s';
+$lang['revstart'] = 'S\'ha iniciat el procés de reversió. Això pot trigar una bona estona. Si s\'excedeix el temps d\'espera màxim del servidor, haureu de tornar a intentar-ho per parts.';
+$lang['revstop'] = 'El procés de reversió ha acabat amb èxit.';
+$lang['note1'] = 'Nota: aquesta cerca distingeix entre majúscules i minúscules.';
+$lang['note2'] = 'Nota: la pàgina es revertirà a la darrera versió que no contingui el terme brossa especificat <em>%s</em>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/cs/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/cs/intro.txt
new file mode 100644
index 000000000..bbc0df25a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/cs/intro.txt
@@ -0,0 +1,3 @@
+====== Obnova zaspamovaných stránek ======
+
+Tato stránka pomůže pÅ™i automatické obnovÄ› po spamovém útoku. Pro nalezení seznamu zaspamovaných stránek nedřív zadejte hledaný výraz (napÅ™. spamové URL) a pak potvrÄte, že nalezené stránky opravdu obsahují spam a mohou být obnoveny.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/cs/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/cs/lang.php
new file mode 100644
index 000000000..cdfe0e96c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/cs/lang.php
@@ -0,0 +1,22 @@
+<?php
+/**
+ * Czech language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Bohumir Zamecnik <bohumir@zamecnik.org>
+ * @author Zbynek Krivka <zbynek.krivka@seznam.cz>
+ * @author tomas@valenta.cz
+ */
+$lang['menu'] = 'Obnova zaspamovaných stránek';
+$lang['filter'] = 'Hledat zaspamované stránky';
+$lang['revert'] = 'Obnovit vybrané stránky';
+$lang['reverted'] = '%s vrácena do verze %s';
+$lang['removed'] = '%s odstraněna';
+$lang['revstart'] = 'Obnova stránek zaÄala. Tento proces může trvat dlouho. Pokud
+skriptu vyprší Äas, budete muset obnovovat po menších blocích
+stránek.';
+$lang['revstop'] = 'Proces obnovy stránek byl úspěšnÄ› dokonÄen.';
+$lang['note1'] = 'Poznámka: toto vyhledávání je citlivé na velikost písmen';
+$lang['note2'] = 'Poznámka: tato stránka bude obnovena na poslední verze, která
+neobsahovala dané spamové slovo <i>%s</i>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/da/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/da/intro.txt
new file mode 100644
index 000000000..fdb0c5f32
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/da/intro.txt
@@ -0,0 +1,3 @@
+===== Gendannelsesstyring =====
+
+Denne side hjælper dig med at gendanne sider efter et angreb af uønskede indlæg. For at finde en liste af sider, der muligvis er blevet ændret, så skriv en søgestreng (for eksempel. en uønsket netadresse) og bekræft, at de fundne sider virkeligt er uønskede og gendan ændringerne. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/da/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/da/lang.php
new file mode 100644
index 000000000..97e15f361
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/da/lang.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Danish language file
+ *
+ * @author Kalle Sommer Nielsen <kalle@php.net>
+ * @author Esben Laursen <hyber@hyber.dk>
+ * @author Harith <haj@berlingske.dk>
+ * @author Daniel Ejsing-Duun <dokuwiki@zilvador.dk>
+ * @author Erik Bjørn Pedersen <erik.pedersen@shaw.ca>
+ */
+$lang['menu'] = 'Gendannelsesstyring';
+$lang['filter'] = 'Søg efter uønskede sider';
+$lang['revert'] = 'Gendan valgte sider';
+$lang['reverted'] = '%s gendannet til ændring %s';
+$lang['removed'] = '%s fjernet';
+$lang['revstart'] = 'Gendannelsesforløbet er startet. Dette kan tage et stykke tid. Hvis kodefilen giver "time out" før processen færdiggøres, skal du gendanne i mindre dele.';
+$lang['revstop'] = 'Gendannelsesforløbet fuldført uden fejl';
+$lang['note1'] = 'Bemærk: Der er forskel på store og små bogstaver i søgningen';
+$lang['note2'] = 'Bemærk: Denne side vil blive gendannet til den seneste udgave, der ikke indeholder det givne uønskede udtryk <i>%s</i>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/de-informal/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/de-informal/lang.php
new file mode 100644
index 000000000..fd6e81c8a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/de-informal/lang.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * German (informal) language file
+ *
+ * @author Alexander Fischer <tbanus@os-forge.net>
+ * @author Juergen Schwarzer <jschwarzer@freenet.de>
+ */
+$lang['menu'] = 'Zurückstellungsmanager';
+$lang['revert'] = 'Stelle ausgewählte Seiten zurück.';
+$lang['removed'] = '%s entfernt';
+$lang['revstart'] = 'Zurückstellungsprozess gestartet. Dies kann eine längere Zeit dauern. Wenn das Skript vor Fertigstellung stopt, sollten Sie es in kleineren Stücken versuchen.';
+$lang['revstop'] = 'Zurückstellungsprozess erfolgreich beendet.';
+$lang['note1'] = 'Beachte: Diese Suche berücksichtigt Gross- und Kleinschreibung';
+$lang['note2'] = 'Beachte: Diese Seite wid zurückgestellt auf die letzte Version, die nicht den Spam-Ausdruck <i>%s</i> enthält.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/de/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/de/intro.txt
new file mode 100644
index 000000000..d5a092155
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/de/intro.txt
@@ -0,0 +1,3 @@
+====== Seiten wieder herstellen ======
+
+Dieses Plugin dient der automatischen Wiederherstellung von Seiten nach einem Spam-Angriff. Geben Sie zunächst einen Suchbegriff (z.B. eine Spam URL) ein um eine Liste betroffener Seiten zu erhalten. Nachdem Sie sich vergewissert haben, dass die gefundenen Seiten wirklich Spam enthalten, können Sie die Seiten wieder herstellen.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/de/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/de/lang.php
new file mode 100644
index 000000000..d26413ac1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/de/lang.php
@@ -0,0 +1,23 @@
+<?php
+/**
+ * Germanlanguage file
+ *
+ * @author Michael Klier <chi@chimeric.de>
+ * @author Leo Moll <leo@yeasoft.com>
+ * @author Florian Anderiasch <fa@art-core.org>
+ * @author Robin Kluth <commi1993@gmail.com>
+ * @author Arne Pelka <mail@arnepelka.de>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Dirk Einecke <dirk@dirkeinecke.de>
+ * @author Blitzi94@gmx.de
+ * @author Robert Bogenschneider <robog@GMX.de>
+ */
+$lang['menu'] = 'Seiten wieder herstellen';
+$lang['filter'] = 'Nach betroffenen Seiten suchen';
+$lang['revert'] = 'Ausgewählte Seiten wieder herstellen';
+$lang['reverted'] = '%s wieder hergestellt zu Version %s';
+$lang['removed'] = '%s entfernt';
+$lang['revstart'] = 'Wiederherstellung gestartet. Dies kann einige Zeit dauern. Wenn das Script abbricht, bevor alle Seiten wieder hergestellt wurden, reduzieren Sie die Anzahl der Seiten und wiederholen Sie den Vorgang.';
+$lang['revstop'] = 'Wiederherstellung erfolgreich abgeschlossen.';
+$lang['note1'] = 'Anmerkung: diese Suche unterscheidet Groß- und Kleinschreibung';
+$lang['note2'] = 'Anmerkung: die Seite wird zur letzten Version, die nicht den angegebenen Spam Begriff <i>%s</i> enthält, wieder hergestellt.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/el/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/el/intro.txt
new file mode 100644
index 000000000..9b583bc6b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/el/intro.txt
@@ -0,0 +1,3 @@
+====== Αποκατάσταση κακόβουλων αλλαγών σελίδων ======
+
+Αυτή η σελίδα σας βοηθά να αποκαταστήσετε αυτόματα τις κακόβουλες αλλαγές σελίδων που Ï€ÏοκαλοÏν οι επιθέσεις spam. Για να βÏείτε τις σελίδες που Ï€Ïέπει να Ï„ÏοποποιηθοÏν, Ï€Ïώτα δώστε έναν ÏŒÏο αναζήτησης (Ï€.χ. έναν σÏνδεσμο spam) και έπειτα επιβεβαιώστε ότι οι σελίδες που θα βÏεθοÏν όντως πεÏιέχουν spam και Ï€ÏοχωÏήστε στην αποκατάστασή τους.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/el/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/el/lang.php
new file mode 100644
index 000000000..7b6fde803
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/el/lang.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Greek language file
+ *
+ * Based on DokuWiki Version rc2007-05-24 english language file
+ * Original english language file contents included for reference
+ *
+ * @author Thanos Massias <tm@thriasio.gr>
+ * @author Αθανάσιος Îταής <homunculus@wana.gr>
+ * @author Konstantinos Koryllos <koryllos@gmail.com>
+ */
+$lang['menu'] = 'Αποκατάσταση κακόβουλων αλλαγών σελίδων';
+$lang['filter'] = 'Αναζήτηση σελίδων που πεÏιέχουν spam';
+$lang['revert'] = 'ΕπαναφοÏά παλαιότεÏων εκδόσεων των επιλεγμένων σελίδων';
+$lang['reverted'] = 'Η σελίδα %s επεναφέÏθηκε στην έκδοση %s';
+$lang['removed'] = 'Η σελίδα %s διαγÏάφηκε';
+$lang['revstart'] = 'Η διαδικασία αποκατάστασης άÏχισε. Αυτό ίσως πάÏει αÏκετό χÏόνο. Εάν η εφαÏμογή υπεÏβεί το διαθέσιμο χÏονικό ÏŒÏιο και τεÏματιστεί Ï€Ïιν τελειώσει, θα χÏειαστεί να επαναλάβετε αυτή τη διαδικασία για μικÏότεÏα τμήματα.';
+$lang['revstop'] = 'Η διαδικασία αποκατάστασης ολοκληÏώθηκε με επιτυχία.';
+$lang['note1'] = '<br />Σημείωση: η αναζήτηση επηÏεάζεται από το εάν οι χαÏακτήÏες είναι πεζοί ή κεφαλαίοι';
+$lang['note2'] = '<br />Σημείωση: η σελίδα θα επαναφεÏθεί στην πλέον Ï€Ïόσφατη έκδοση που δεν πεÏιέχει τον ÏŒÏο <i>%s</i>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/en/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/en/intro.txt
new file mode 100644
index 000000000..b8f355854
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/en/intro.txt
@@ -0,0 +1,3 @@
+====== Revert Manager ======
+
+This page helps you with the automatic reversion of a spam attack. To find a list of spammy pages first enter a search string (eg. a spam URL), then confirm that the found pages are really spam and revert the edits.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/en/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/en/lang.php
new file mode 100644
index 000000000..a2002f1a7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/en/lang.php
@@ -0,0 +1,23 @@
+<?php
+/**
+ * english language file
+ */
+
+// for admin plugins, the menu prompt to be displayed in the admin menu
+// if set here, the plugin doesn't need to override the getMenuText() method
+$lang['menu'] = 'Revert Manager';
+
+// custom language strings for the plugin
+
+$lang['filter'] = 'Search spammy pages';
+$lang['revert'] = 'Revert selected pages';
+$lang['reverted'] = '%s reverted to revision %s';
+$lang['removed'] = '%s removed';
+$lang['revstart'] = 'Reversion process started. This can take a long time. If the
+ script times out before finishing, you need to revert in smaller
+ chunks.';
+$lang['revstop'] = 'Reversion process finished successfully.';
+$lang['note1'] = 'Note: this search is case sensitive';
+$lang['note2'] = 'Note: the page will be reverted to the last version not containing the given spam term <i>%s</i>.';
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eo/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eo/intro.txt
new file mode 100644
index 000000000..14e831467
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eo/intro.txt
@@ -0,0 +1,3 @@
+====== Administro de Restarigo ======
+
+Tiu ĉi paÄo helpas vin pri aÅ­tomata restarigo el spama atako. Por trovi liston de spamecaj paÄoj, unue mendu serĉan liter-ĉenon (ekz. spama URL), do konfirmu, ke la trovitaj paÄoj fakte estas spamaj kaj restarigu la antaÅ­ajn versiojn bonajn.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eo/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eo/lang.php
new file mode 100644
index 000000000..7ed2a4777
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eo/lang.php
@@ -0,0 +1,22 @@
+<?php
+/**
+ * Esperantolanguage file
+ *
+ * @author Felipe Castro <fefcas@uol.com.br>
+ * @author Felipe Castro <fefcas@gmail.com>
+ * @author Felipe Castro <fefcas (cxe) gmail (punkto) com>
+ * @author Felipo Kastro <fefcas@gmail.com>
+ * @author Robert Bogenschneider <robog@gmx.de>
+ * @author Erik Pedersen <erik pedersen@shaw.ca>
+ * @author Erik Pedersen <erik.pedersen@shaw.ca>
+ * @author Robert Bogenschneider <robog@GMX.de>
+ */
+$lang['menu'] = 'Administrado de restarigo';
+$lang['filter'] = 'Serĉi spamecajn paÄojn';
+$lang['revert'] = 'Restarigi la elektitajn paÄojn';
+$lang['reverted'] = '%s estas restarigita al revizio %s';
+$lang['removed'] = '%s estas forigita';
+$lang['revstart'] = 'Restariga procezo estas ekigita. Tio povas daÅ­ri longan tempon. Se la skripto tro prokrastos antaÅ­ plenumo, vi bezonos restarigi po pli etaj blokoj.';
+$lang['revstop'] = 'Restariga procezo plenumiÄis sukcese.';
+$lang['note1'] = 'Rimarko: tiu ĉi serĉo distingas usklecon';
+$lang['note2'] = 'Rimarko: la paÄo restariÄos al la lasta versio ne enhavanta la menditan spaman terminon <i>%s</i>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/es/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/es/intro.txt
new file mode 100644
index 000000000..39c5b047d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/es/intro.txt
@@ -0,0 +1,3 @@
+====== Restaurador ======
+
+Esta página te ayuda con la restauración de ataques spam. Para encontrar una lista de páginas con spam introduce una cadena , luego confirma que las páginas encontradas son realmente un spam y restaura la edición. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/es/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/es/lang.php
new file mode 100644
index 000000000..2886528d6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/es/lang.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Spanish language file
+ *
+ * @author Oscar M. Lage <r0sk10@gmail.com>
+ * @author Gabriel Castillo <gch@pumas.ii.unam.mx>
+ * @author oliver@samera.com.py
+ * @author Enrico Nicoletto <liverig@gmail.com>
+ * @author Manuel Meco <manuel.meco@gmail.com>
+ * @author VictorCastelan <victorcastelan@gmail.com>
+ * @author Jordan Mero hack.jord@gmail.com
+ * @author Felipe Martinez <metalmartinez@gmail.com>
+ * @author Javier Aranda <internet@javierav.com>
+ * @author Zerial <fernando@zerial.org>
+ * @author Marvin Ortega <maty1206@maryanlinux.com>
+ * @author Daniel Castro Alvarado <dancas2@gmail.com>
+ * @author Fernando J. Gómez <fjgomez@gmail.com>
+ */
+$lang['menu'] = 'Restaurador';
+$lang['filter'] = 'Buscar páginas con spam';
+$lang['revert'] = 'Restaurar las páginas seleccionadas';
+$lang['reverted'] = '%s ha restaurado la revisión %s';
+$lang['removed'] = '%s borrado';
+$lang['revstart'] = 'El proceso de restaurado ha comenzado. Puede llevar bastante tiempo. Si el script se para antes de acabar, deberías restaurar cadenas más pequeñas.';
+$lang['revstop'] = 'El proceso de restaurado ha finalizado satisfactoriamente.';
+$lang['note1'] = 'Nota: la búsqueda diferencia entre mayúsculas y minúsculas.';
+$lang['note2'] = 'Nota: la página será restaurada a la última versión que no tenga el término de spam dado <em>%s</em>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eu/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eu/intro.txt
new file mode 100644
index 000000000..c5a5a5afa
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eu/intro.txt
@@ -0,0 +1,3 @@
+====== Berrezartze Kudeatzailea ======
+
+Orri honek spam eraso baten berrezartze automatikoarekin laguntzen dizu. Spam-a duten orriak bilatzeko, lehenik sartu bilaketa katea (adb. spam URL bat), eta ondoren baieztatu bilatutako orriak benetan spam-a dutela, gero aldaketak berrezartzeko.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eu/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eu/lang.php
new file mode 100644
index 000000000..e94f07b2a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eu/lang.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Basque language file
+ *
+ * @author Inko Illarramendi <inko.i.a@gmail.com>
+ */
+$lang['menu'] = 'Berrezartze Kudeatzailea';
+$lang['filter'] = 'Bilatu spam duten orriak';
+$lang['revert'] = 'Berrezarri aukeratutako orriak';
+$lang['reverted'] = '%s berrezarria %s berrikuspenera';
+$lang['removed'] = '%s ezabatua';
+$lang['revstart'] = 'Berrezartze prozesua hasi da. Honek denbora luzea eraman dezake.
+Script-a denbora mugara iristen bada, zati txikiagotan berrezarri
+beharko duzu. ';
+$lang['revstop'] = 'Berrezartze prozesua arrakastaz bukatu da.';
+$lang['note1'] = 'Oharra: bilaketa honek maiuskulak eta minuskulak bereizten ditu';
+$lang['note2'] = 'Oharra: orria azken bertsiora berrezarriko da, emandako <i>%s</i> spam terminorik ez duelarik.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fa/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fa/intro.txt
new file mode 100644
index 000000000..0ccdb089a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fa/intro.txt
@@ -0,0 +1,3 @@
+====== مدیریت برگشت‌ها ======
+
+این صÙحه، در بازیابی صÙحاتی Ú©Ù‡ به آن‌ها اسپم ارسال شده است Ú©Ù…Ú© می‌رساند. برای مشاهده‌ی صÙحات اسپم شده، ابتدا جستجو کنید، سپس از اسپم شدن صÙحه‌ی مورد نظر اطمینان حاصل کنید Ùˆ تغییرات اعمال شده را برگردانید. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fa/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fa/lang.php
new file mode 100644
index 000000000..02d2aabd2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fa/lang.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Persian language file
+ *
+ * @author behrad eslamifar <behrad_es@yahoo.com)
+ * @author Mohsen Firoozmandan <info@mambolearn.com>
+ * @author omidmr@gmail.com
+ * @author Omid Mottaghi <omidmr@gmail.com>
+ * @author Mohammad Reza Shoaei <shoaei@gmail.com>
+ */
+$lang['menu'] = 'مدیریت برگشت‌ها';
+$lang['filter'] = 'جستجوی صÙحات اسپم شده';
+$lang['revert'] = 'بازگردانی صÙحات انتخاب شده';
+$lang['reverted'] = '%s به نگارش %s بازگردانده شد';
+$lang['removed'] = '%s حذ٠شد';
+$lang['revstart'] = 'در حال بازگرداندن. ممکن است مدتی زمان ببرد. اگر اجرای برنامه، پیش از اتمام به پایان رسید، باید در بخش‌های کوچک‌تری بازگردانی را انجام دهید.';
+$lang['revstop'] = 'بازگرداندن با موÙقیت به پایان رسید.';
+$lang['note1'] = 'توجه: جستجو حساس به حرو٠کوچک و بزرگ است';
+$lang['note2'] = 'توجه: صÙحه به آخرین نسخه‌ای Ú©Ù‡ حاوی اسپم <i>%s</i> نیست بازگردانده خواهد شد.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fi/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fi/intro.txt
new file mode 100644
index 000000000..3b3ce5daa
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fi/intro.txt
@@ -0,0 +1,3 @@
+====== Palautuksenhallinta ======
+
+Tämä sivu auttaa sinua automaattisen palautuksenhallinnan kanssa spam hyökkäyksen jälkeen. Löytääksesi listan spammatyistä sivuista anna ensin hakusana (esim. spm URL), sen jälkeen varmista, että löytyneet sivut todella ovat spammia ja palauta sitten sivut.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fi/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fi/lang.php
new file mode 100644
index 000000000..26bc6b76a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fi/lang.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Finnish language file
+ *
+ * @author otto@valjakko.net
+ * @author Otto Vainio <otto@valjakko.net>
+ * @author Teemu Mattila <ghcsystems@gmail.com>
+ */
+$lang['menu'] = 'Palautuksenhallinta';
+$lang['filter'] = 'Etsi spammattyjä sivuja';
+$lang['revert'] = 'Palauta valitut sivut';
+$lang['reverted'] = '%s palautettu versioon %s';
+$lang['removed'] = '%s poistettu';
+$lang['revstart'] = 'Palautusprosessi käynnistetty. Tämä voi viedä pidemmän aikaa. Jos ajo katkeaa aikakatkaisuun ennen loppua, niin sinun pitää palauttaa pienemmissä osissa.';
+$lang['revstop'] = 'Palautusprosessi lopetti onnistuneesti.';
+$lang['note1'] = 'Huomioi: tämä haku on kirjainkoosta riippuva';
+$lang['note2'] = 'Huomioi: tämä sivu palautetaan viimeiseen versioon, jossa ei ole annettua spamtermiä <i>%s</i>';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fr/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fr/intro.txt
new file mode 100644
index 000000000..db61ac9cf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fr/intro.txt
@@ -0,0 +1,3 @@
+====== Gestion des réversions ======
+
+Cette page peut vous aider à restaurer des pages après une attaque de spam. Pour trouver la liste des pages victimes des spammeurs, entrez un motif de recherche (tel qu'une URL de spam), puis confirmez que les pages trouvées contiennent du spam et annulez leurs éditions.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fr/lang.php
new file mode 100644
index 000000000..8d17280d4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fr/lang.php
@@ -0,0 +1,22 @@
+<?php
+/**
+ * french language file
+ * @author Delassaux Julien <julien@delassaux.fr>
+ * @author Maurice A. LeBlanc <leblancma@cooptel.qc.ca>
+ * @author Guy Brand <gb@isis.u-strasbg.fr>
+ * @author gb@isis.u-strasbg.fr
+ * @author stephane.gully@gmail.com
+ * @author Guillaume Turri <guillaume.turri@gmail.com>
+ * @author Erik Pedersen <erik.pedersen@shaw.ca>
+ * @author olivier duperray <duperray.olivier@laposte.net>
+ * @author Vincent Feltz <psycho@feltzv.fr>
+ */
+$lang['menu'] = 'Gestionnaire de réversions';
+$lang['filter'] = 'Trouver les pages spammées ';
+$lang['revert'] = 'Annuler les éditions sélectionnées';
+$lang['reverted'] = '%s restauré à la révision %s';
+$lang['removed'] = '%s supprimé';
+$lang['revstart'] = 'Processus de réversion démarré. Ceci peut prendre longtemps. Si le script dépasse le délai avant de terminer, vous devrez restaurer de plus petits groupes de pages.';
+$lang['revstop'] = 'Processus de réversion terminé avec succès.';
+$lang['note1'] = 'Note : cette recherche est insensible à la casse';
+$lang['note2'] = 'Note: cette page sera révisée à la version précédente ne contenant pas le terme spammeur <i>%s</i>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/gl/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/gl/intro.txt
new file mode 100644
index 000000000..81e98f1d5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/gl/intro.txt
@@ -0,0 +1,3 @@
+====== Xestor de recuperación ======
+
+Esta páxina axudarao a se recuperar automaticamente dun ataque de spam. Para encontrar unha listaxe de páxinas que conteñan spam, primeiro debe inserir unha cadea de procura (por ex. un URL de spam) e despois confirmar que as páxinas encontradas conteñen realmente spam, antes de reverter as edicións.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/gl/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/gl/lang.php
new file mode 100644
index 000000000..33472090d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/gl/lang.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Galicianlanguage file
+ *
+ * @author CiberIrmandade da Fala <infoxeral@ciberirmandade.org>
+ * @author Tagen Ata <localizacion@tagenata.com>
+ * @author Leandro Regueiro <leandro.regueiro@gmail.com>
+ */
+$lang['menu'] = 'Xestor de recuperación';
+$lang['filter'] = 'Procurar páxinas con spam';
+$lang['revert'] = 'Recuperar as páxinas seleccionadas';
+$lang['reverted'] = '%s foi revertida á revisión %s';
+$lang['removed'] = '%s foi eliminada';
+$lang['revstart'] = 'O proceso de recuperación foi iniciado. Isto podería demorar un certo tempo. Se o script falla por ter superado o seu límite de tempo antes de rematar, terá que efectuar a recuperación sobre fragmentos máis pequenos.';
+$lang['revstop'] = 'O proceso de recuperación rematou correctamente.';
+$lang['note1'] = 'Nota: Esta procura distingue entre maiúsculas e minúsculas';
+$lang['note2'] = 'Nota: A páxina será revertida á última versión que non conteña o termo de spam <i>%s</i> indicado.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/he/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/he/intro.txt
new file mode 100644
index 000000000..44b78dfea
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/he/intro.txt
@@ -0,0 +1,3 @@
+====== מנהל השחזור ======
+
+דף ×–×” יסיע בידך לשחזר ב×ופן ×וטומטי ×חרי התקפת ספ××. כדי לקבל ×ת רשימת ×”×“×¤×™× ×¢× ×”×¡×¤×× ×¢×œ×™×š ר×שית מחרוזת לחיפוש (לדוגמה כתובת ספ××) ×חר כך עליך ל×שר ×©×”×“×¤×™× ×©× ×ž×¦×ו ב×מת ×ž×›×™×œ×™× ×¡×¤×× ×•×œ×©×—×–×¨ ×ת העריכות.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/he/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/he/lang.php
new file mode 100644
index 000000000..e09ffeaab
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/he/lang.php
@@ -0,0 +1,16 @@
+<?php
+/**
+ * Hebrew language file
+ *
+ * @author Dotan Kamber <kamberd@yahoo.com>
+ * @author Moshe Kaplan <mokplan@gmail.com>
+ */
+$lang['menu'] = 'מנהל שחזור';
+$lang['filter'] = 'חפש ×“×¤×™× ×¢× ×¡×¤××';
+$lang['revert'] = 'שחזר ×ת ×”×“×¤×™× ×”× ×‘×—×¨×™×';
+$lang['reverted'] = '%s שוחזרו לגרסה %s';
+$lang['removed'] = '%s הוסרו';
+$lang['revstart'] = 'תהליך השחזור החל. התהליך עלול להיות ממושך. ×× ×ª×¡×¨×™×˜ מגיע למגבלת פסק הזמן לפני ×©×”×¡×ª×™×™× ×”×ª×”×œ×™×š ×™×”×™×” צורך לבצע ×ת השחזור ×‘×ž×§×˜×¢×™× ×§×˜× ×™× ×™×•×ª×¨.';
+$lang['revstop'] = 'תהליך השחזור ×”×•×©×œ× ×‘×”×¦×œ×—×”.';
+$lang['note1'] = 'לתשומת לבך: החיפוש ער לגודל ×”×ותיות הלועזיות.';
+$lang['note2'] = 'לתשות לבך: הדף ישוחזר לגרסה ×”×חרונה ש××™× ×” מכילה ×ת מונח הספ×× <i>%s</i>';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hi/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hi/lang.php
new file mode 100644
index 000000000..d8630a281
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hi/lang.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * Hindi language file
+ *
+ * @author Abhinav Tyagi <abhinavtyagi11@gmail.com>
+ */
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hr/lang.php
new file mode 100644
index 000000000..d2094b77b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hr/lang.php
@@ -0,0 +1,7 @@
+<?php
+/**
+ * Croatian language file
+ *
+ * @author Branko Rihtman <theney@gmail.com>
+ * @author Dražen Odobašić <dodobasic@gmail.com>
+ */
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hu/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hu/intro.txt
new file mode 100644
index 000000000..e2c2dadd9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hu/intro.txt
@@ -0,0 +1,3 @@
+====== Visszaállítás kezelő ======
+
+Segítséget nyújtunk SPAM támadások utáni automatikus visszaállításhoz. A fertőzött oldalak kereséséhez meg kell adni egy karaktersorozatot (pl. egy SPAM URL-t). A találatok közül kiválasztva a valóban SPAM-et tartalmazó oldakat, visszaállítjuk őket a lehetséges utolsó SPAM mentes állapotra. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hu/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hu/lang.php
new file mode 100644
index 000000000..58f17007d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hu/lang.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Hungarian language file
+ *
+ * @author Sandor TIHANYI <stihanyi+dw@gmail.com>
+ * @author Siaynoq Mage <siaynoqmage@gmail.com>
+ * @author schilling.janos@gmail.com
+ */
+$lang['menu'] = 'Visszaállítás kezelő (anti-SPAM)';
+$lang['filter'] = 'SPAM tartalmú oldalak keresése';
+$lang['revert'] = 'Kiválasztott oldalak visszaállítása';
+$lang['reverted'] = '%s a következő változatra lett visszaállítva: %s';
+$lang['removed'] = '%s törölve';
+$lang['revstart'] = 'A visszaállítási folyamat elindult. Ez hosszú ideig eltarthat. Ha időtúllépés miatt nem tud lefutni, kisebb darabbal kell próbálkozni.';
+$lang['revstop'] = 'A visszaállítási folyamat sikeresen befejeződött.';
+$lang['note1'] = 'Megjegyzés: a keresés kisbetű-nagybetűre érzékeny';
+$lang['note2'] = 'Megjegyzés: Az oldalt az utolsó olyan változatra állítjuk vissza, ami nem tartalmazza a megadott spam kifejezést: <i>%s</i>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/id-ni/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/id-ni/lang.php
new file mode 100644
index 000000000..d367340b7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/id-ni/lang.php
@@ -0,0 +1,7 @@
+<?php
+/**
+ * idni language file
+ *
+ * @author Harefa <fidelis@harefa.com>
+ * @author Yustinus Waruwu <juswaruwu@gmail.com>
+ */
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/id/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/id/lang.php
new file mode 100644
index 000000000..c3d485930
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/id/lang.php
@@ -0,0 +1,7 @@
+<?php
+/**
+ * Indonesian language file
+ *
+ * @author Irwan Butar Butar <irwansah.putra@gmail.com>
+ * @author Yustinus Waruwu <juswaruwu@gmail.com>
+ */
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/is/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/is/lang.php
new file mode 100644
index 000000000..9de404992
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/is/lang.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * Icelandic language file
+ *
+ * @author Hrannar Baldursson <hrannar.baldursson@gmail.com>
+ * @author Ólafur Gunnlaugsson <oli@audiotools.com>
+ * @author Erik Bjørn Pedersen <erik.pedersen@shaw.ca>
+ */
+$lang['removed'] = '%s eytt';
+$lang['note1'] = 'Athugaðu að þegar leitað er þá skiftir stafsetur máli, það að segja leitarvélin gerir mun á hástöfum og lágstöfum';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/it/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/it/intro.txt
new file mode 100644
index 000000000..1577af7ec
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/it/intro.txt
@@ -0,0 +1,3 @@
+====== Gestore di ripristini ======
+
+Questa pagina aiuta il controllo automatico degli attacchi spam. Per cercare una lista delle pagine con spam, inserisci innanzitutto una stringa di ricerca (ad esempio l'URL di un sito di spam), quindi conferma che le pagine trovate contengono realmente spam e ripristinale ad una versione precedente.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/it/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/it/lang.php
new file mode 100644
index 000000000..0c2b265de
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/it/lang.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Italian language file
+ *
+ * @author Pietro Battiston toobaz@email.it
+ * @author Diego Pierotto ita.translations@tiscali.it
+ * @author ita.translations@tiscali.it
+ * @author Lorenzo Breda <lbreda@gmail.com>
+ * @author snarchio@alice.it
+ * @author robocap <robocap1@gmail.com>
+ */
+$lang['menu'] = 'Gestore di ripristini';
+$lang['filter'] = 'Cerca pagine con spam';
+$lang['revert'] = 'Ripristina le pagine selezionate';
+$lang['reverted'] = '%s ripristinata alla versione %s';
+$lang['removed'] = '%s rimossa';
+$lang['revstart'] = 'Processo di ripristino avviato. Può essere necessario molto tempo. Se lo script non fa in tempo a finire, sarà necessario ripristinare in blocchi più piccoli.';
+$lang['revstop'] = 'Processo di ripristino finito con successo.';
+$lang['note1'] = 'Nota: questa ricerca distingue le maiuscole';
+$lang['note2'] = 'Nota: la pagina verrà ripristinata all\'ultima versione non contenente la parola di spam data <i>%s</i>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ja/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ja/intro.txt
new file mode 100644
index 000000000..995a57fd7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ja/intro.txt
@@ -0,0 +1,3 @@
+====== å¾©å…ƒç®¡ç† ======
+
+ã“ã®ãƒšãƒ¼ã‚¸ã¯ã€ã‚¹ãƒ‘ムã«ã‚ˆã‚Šç·¨é›†ã•ã‚ŒãŸãƒšãƒ¼ã‚¸ã‚’自動的ã«å¾©å…ƒã™ã‚‹ãŸã‚ã®æ©Ÿèƒ½ã‚’管ç†ã—ã¾ã™ã€‚ スパムをå—ã‘ãŸãƒšãƒ¼ã‚¸ã‚’検索ã™ã‚‹ãŸã‚ã€ã‚¹ãƒ‘ムURLãªã©ã®ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ã‚’入力ã—ã¦ãã ã•ã„。 ãã®å¾Œã€æ¤œç´¢çµæžœã«å«ã¾ã‚Œã¦ã„るページãŒã‚¹ãƒ‘ムã•ã‚Œã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¦ã‹ã‚‰å¾©å…ƒã‚’è¡Œã„ã¾ã™ã€‚
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ja/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ja/lang.php
new file mode 100644
index 000000000..0cd8c6f9b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ja/lang.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * japanese language file
+ * @author Yuji Takenaka <webmaster@davilin.com>
+ * @author Ikuo Obataya <i.obataya@gmail.com>
+ * @author Daniel Dupriest <kououken@gmail.com>
+ * @author Kazutaka Miyasaka <kazmiya@gmail.com>
+ */
+$lang['menu'] = '復元管ç†';
+$lang['filter'] = 'スパムをå—ã‘ãŸãƒšãƒ¼ã‚¸ã‚’検索';
+$lang['revert'] = 'é¸æŠžã—ãŸãƒšãƒ¼ã‚¸ã‚’検索';
+$lang['reverted'] = '%s ã¯ãƒªãƒ“ジョン %s ã¸å¾©å…ƒã•ã‚Œã¾ã—ãŸ';
+$lang['removed'] = '%s ã¯å‰Šé™¤ã•ã‚Œã¾ã—ãŸ';
+$lang['revstart'] = '復元処ç†ä¸­ã§ã™ã€‚時間ãŒæŽ›ã‹ã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ãŒã€ã‚‚ã—タイムアウトã—ãŸå ´åˆã¯ã€å¾©å…ƒã‚’複数回ã«åˆ†ã‘ã¦è¡Œã£ã¦ãã ã•ã„。';
+$lang['revstop'] = '復元処ç†ãŒæ­£ã—ã完了ã—ã¾ã—ãŸã€‚';
+$lang['note1'] = '注æ„:検索語å¥ã¯å¤§æ–‡å­—・å°æ–‡å­—を区別ã—ã¾ã™';
+$lang['note2'] = '注æ„:最新ã®å†…容ã«æ¤œç´¢ã—ãŸã‚¹ãƒ‘ムキーワード <i>%s</i> ãŒå«ã¾ã‚Œã¦ã„ãªã„ページãŒå¾©å…ƒã•ã‚Œã¾ã™ã€‚';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ko/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ko/intro.txt
new file mode 100644
index 000000000..a0164dc4f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ko/intro.txt
@@ -0,0 +1,3 @@
+====== 복구 ê´€ë¦¬ìž ======
+
+스팸 공격으로 부터 ìžë™ìœ¼ë¡œ ë³µêµ¬í•˜ëŠ”ë° ì´íŽ˜ì´ì§€ëŠ” ë„ì›€ì´ ë  ìˆ˜ 있습니다. 스팸 ê³µê²©ë°›ì€ íŽ˜ì´ì§€ 목ë¡ì„ 찾으려면 문ìžì—´ì„ 입력하기 ë°”ëžë‹ˆë‹¤(예. 스팸 URL), ê·¸ 후 ê²€ìƒ‰ëœ íŽ˜ì´ì§€ë“¤ì´ 스팸 공격받았는지 확ì¸í•˜ê³  복구합니다.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ko/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ko/lang.php
new file mode 100644
index 000000000..5e070de92
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ko/lang.php
@@ -0,0 +1,18 @@
+<?php
+/**
+ * Korean language file
+ *
+ * @author jk lee
+ * @author dongnak@gmail.com
+ * @author Song Younghwan <purluno@gmail.com>
+ * @author SONG Younghwan <purluno@gmail.com>
+ */
+$lang['menu'] = '복구 관리ìž';
+$lang['filter'] = '스팸 페ì´ì§€ 검색 ';
+$lang['revert'] = 'ì„ íƒ íŽ˜ì´ì§€ë“¤ 복구';
+$lang['reverted'] = '%s를 ì´ì „ 버전 %s 으로 복구';
+$lang['removed'] = '%s 삭제';
+$lang['revstart'] = '복구 ìž‘ì—…ì„ ì‹œìž‘í•©ë‹ˆë‹¤. 오랜 ì‹œê°„ì´ ê±¸ë¦´ 수 있습니다. 완료ë˜ê¸° ì „ì— ìŠ¤í¬ë¦½íŠ¸ time outì´ ë°œìƒí•œë‹¤ë©´ ë” ìž‘ì€ ìž‘ì—…ë“¤ë¡œ 나누어서 복구하기 ë°”ëžë‹ˆë‹¤. ';
+$lang['revstop'] = '복구 ìž‘ì—…ì´ ì„±ê³µì ìœ¼ë¡œ ë났습니다.';
+$lang['note1'] = '주ì˜: ëŒ€ì†Œë¬¸ìž êµ¬ë³„í•˜ì—¬ 검색합니다.';
+$lang['note2'] = '주ì˜: ì´ íŽ˜ì´ì§€ëŠ” 스팸 단어 <i>%s</i>를 í¬í•¨í•˜ì§€ ì•Šì€ ê°€ìž¥ 최근 과거 문서 버전으로 복구ë©ë‹ˆë‹¤. ';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/lt/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/lt/lang.php
new file mode 100644
index 000000000..103485864
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/lt/lang.php
@@ -0,0 +1,7 @@
+<?php
+/**
+ * Lithuanian language file
+ *
+ * @author audrius.klevas@gmail.com
+ * @author Arunas Vaitekunas <aras@fan.lt>
+ */
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/lv/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/lv/intro.txt
new file mode 100644
index 000000000..edcdab2cd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/lv/intro.txt
@@ -0,0 +1,3 @@
+====== PiemÄ“sloto lapu atjaunotÄjs ======
+
+Å Ä« lapa palÄ«dzÄ“s automÄtiski atjaunot saturu pÄ“c huligÄnisma . Lai atrastu piedrazotÄs lapas ieraksti meklÄ“jamo izteiksmi (piem. smaperu URL), tad apstiprini, ka atrastÄs ir "mÄ“slapas" un atcel izdarÄ«tÄs izmaiņas .
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/lv/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/lv/lang.php
new file mode 100644
index 000000000..0101f2698
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/lv/lang.php
@@ -0,0 +1,15 @@
+<?php
+/**
+ * Latvian, Lettish language file
+ *
+ * @author Aivars Miška <allefm@gmail.com>
+ */
+$lang['menu'] = 'PiemÄ“sloto lapu atjaunotÄjs';
+$lang['filter'] = 'MeklÄ“t piemÄ“slotÄs lapas';
+$lang['revert'] = 'Atjaunot norÄdÄ«tÄs lapas ';
+$lang['reverted'] = '%s atjaunots uz %s stÄvokli';
+$lang['removed'] = '% dzēsts';
+$lang['revstart'] = 'AtjaunoÅ¡ana uzsÄkta. Tas var aizņemt ilgÄku laiku. Ja darbÄ«ba pÄrtrÅ«kst noilguma dēļ, atjaunoÅ¡ana jÄveic pa mazÄkÄm porcijÄm.';
+$lang['revstop'] = 'Atjaunošana veiksmīgi pabeigta. ';
+$lang['note1'] = 'Ievēro: Meklēšana atšķir lielos un mazos burtus.';
+$lang['note2'] = 'IevÄ“ro: Lapu atjaunos ar pÄ“dÄ“jo versiju, kas nesatur uzdoto spama vÄrdu <i>%s</i>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/mr/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/mr/intro.txt
new file mode 100644
index 000000000..efca2430d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/mr/intro.txt
@@ -0,0 +1,5 @@
+====== फेरबदल वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤• ======
+
+हà¥à¤¯à¤¾ पानादà¥à¤µà¤¾à¤°à¥‡ तà¥à¤®à¥à¤¹à¥€ भंकस हलà¥à¤²à¥à¤¯à¤¾à¤¦à¥à¤µà¤¾à¤°à¥‡ à¤à¤¾à¤²à¥‡à¤²à¥‡ बदल आपोआप फेरबदल करू शकता.
+भंकस पानांची यादी बनवणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ पà¥à¤°à¤¥à¤® à¤à¤–ादा शबà¥à¤¦à¤¸à¤®à¥‚ह टाका ( उदा. à¤à¤–ादं भंकस URL ),
+मग जी पाने सापडतील टी भंकस असलà¥à¤¯à¤¾à¤šà¥‡ नकà¥à¤•à¥€ करा आणि तà¥à¤¯à¤¾à¤¤à¥€à¤² बदल रदà¥à¤¦ करा. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/mr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/mr/lang.php
new file mode 100644
index 000000000..3912bb967
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/mr/lang.php
@@ -0,0 +1,18 @@
+<?php
+/**
+ * Marathi language file
+ *
+ * @author ghatothkach@hotmail.com
+ * @author Padmanabh Kulkarni <kulkarnipadmanabh@gmail.com>
+ * @author Padmanabh Kulkarni<kulkarnipadmanabh@gmail.com>
+ * @author shantanoo@gmail.com
+ */
+$lang['menu'] = 'फेर बदल वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤•';
+$lang['filter'] = 'भंकस पाने शोधा';
+$lang['revert'] = 'निवडलेली पानातील बदल रदà¥à¤¦ करा';
+$lang['reverted'] = '%s फेरबदलून %s आवृतà¥à¤¤à¤¿à¤®à¤§à¥‡ आणला आहे';
+$lang['removed'] = '%s काढला आहे.';
+$lang['revstart'] = 'फेरबदलाची पà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾ चालॠà¤à¤¾à¤²à¥€ आहे.याला बराच वेळ लागू शकतो. जर सà¥à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿ समà¥à¤ªà¤£à¥à¤¯à¤¾à¤†à¤§à¤¿ तà¥à¤¯à¤¾à¤šà¥€ कालमरà¥à¤¯à¤¾à¤¦à¤¾ उलटून गेली तर छोटà¥à¤¯à¤¾-छोटà¥à¤¯à¤¾ तà¥à¤•à¤¡à¥à¤¯à¤¾à¤‚मधे फेरबदल करा.';
+$lang['revstop'] = 'फेरबदलाची पà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾ यशसà¥à¤µà¥€à¤°à¥€à¤¤à¥à¤¯à¤¾ पूरà¥à¤£ à¤à¤¾à¤²à¥€.';
+$lang['note1'] = 'टीप : हा शोध केस-सेंसिटिव आहे ( फ़कà¥à¤¤ इंगà¥à¤°à¤œà¥€à¤¸à¤¾à¤ à¥€ लागू )';
+$lang['note2'] = 'टीप : हे पान फेरबदल करून जà¥à¤¯à¤¾ शेवटचà¥à¤¯à¤¾ आवृतà¥à¤¤à¤¿à¤®à¤§à¥‡ <i>%s</i> हा दिलेला भंकस शबà¥à¤¦ नाही तà¥à¤¯à¤¾à¤¤ बदलले जाईल.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ne/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ne/lang.php
new file mode 100644
index 000000000..4fd337532
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ne/lang.php
@@ -0,0 +1,16 @@
+<?php
+/**
+ * Nepali language file
+ *
+ * @author Saroj Kumar Dhakal <lotusnagarkot@gmail.com>
+ * @author SarojKumar Dhakal <lotusnagarkot@yahoo.com>
+ * @author Saroj Dhakal<lotusnagarkot@yahoo.com>
+ */
+$lang['menu'] = 'पूरà¥à¤µà¤¸à¥à¤¥à¤¿à¤¤à¥€ वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤•';
+$lang['filter'] = 'सà¥à¤ªà¥à¤¯à¤¾à¤®à¤¯à¥à¤•à¥à¤¤ पृषà¥à¤ à¤¹à¤°à¥ खोजà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ ';
+$lang['revert'] = 'छानिà¤à¤• पृषà¥à¤ à¤¹à¤°à¥à¤²à¤¾à¤ˆ पूरà¥à¤µà¤¸à¥à¤¥à¤¿à¤¤à¤¿à¤®à¤¾ फरà¥à¤•à¤¾à¤‰à¤¨à¥à¤¹à¥‹à¤¸à¥ ।';
+$lang['reverted'] = '%s लाई %s संसà¥à¤•à¤°à¤£à¤®à¤¾ फरà¥à¤•à¤¾à¤‡à¤¯à¥‹ ।';
+$lang['removed'] = '%s लाई हटाइयो ।';
+$lang['revstart'] = 'पूरà¥à¤µà¤¸à¥à¤¥à¤¿à¤¤à¤¿à¤®à¤¾ फरà¥à¤•à¤¾à¤‰à¤¨à¥‡ कारà¥à¤¯ सà¥à¤°à¥ भयो । यसले लामो समय लिन सकà¥à¤›à¥¤ यदि सà¥à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿà¤•à¥‹ समय काà¥à¤°à¥à¤¯ सकिनॠपूरà¥à¤µ सकियो भने । तपाईले सानो सानो टà¥à¤•à¥à¤°à¤¾ लिà¤à¤° पà¥à¤°à¥à¤µà¤°à¥à¤ªà¤®à¤¾ फरà¥à¤•à¤¾à¤‰à¤¨à¥ परà¥à¤¨à¥‡ हà¥à¤¨à¥à¤› ।';
+$lang['revstop'] = 'पूरà¥à¤µà¤¸à¥à¤¥à¤¿à¤¤à¤¿à¤®à¤¾ फरà¥à¤•à¤¾à¤‰à¤¨à¥‡ कारà¥à¤¯ सफलतापूरà¥à¤µà¤• सकियो ।';
+$lang['note1'] = 'नोट: यो खोज वरà¥à¤£ समà¥à¤µà¥‡à¤¦à¤¨à¤¶à¥€à¤² छ';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/nl/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/nl/intro.txt
new file mode 100644
index 000000000..db8f5a06c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/nl/intro.txt
@@ -0,0 +1,3 @@
+===== Herstelmanager =====
+
+Deze pagina helpt u bij het herstellen van pagina's na een spam-aanval. Vul een zoekterm in (bijvoorbeeld een spam url) om een lijst te krijgen van bekladde pagina's, bevestig dat de pagina's inderdaad spam bevatten en herstel de wijzigingen.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/nl/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/nl/lang.php
new file mode 100644
index 000000000..3b5c4e0fe
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/nl/lang.php
@@ -0,0 +1,21 @@
+<?php
+/**
+ * Dutch language file
+ *
+ * @author Wouter Schoot <wouter@schoot.org>
+ * @author John de Graaff <john@de-graaff.net>
+ * @author Niels Schoot <niels.schoot@quintiq.com>
+ * @author Dion Nicolaas <dion@nicolaas.net>
+ * @author Danny Rotsaert <danny.rotsaert@edpnet.be>
+ * @author Marijn Hofstra hofstra.m@gmail.com
+ * @author Matthias Carchon webmaster@c-mattic.be
+ */
+$lang['menu'] = 'Herstelmanager';
+$lang['filter'] = 'Zoek naar bekladde pagina\'s';
+$lang['revert'] = 'Herstel geselecteerde pagina\'s';
+$lang['reverted'] = '%s hersteld naar revisie %s';
+$lang['removed'] = '%s verwijderd';
+$lang['revstart'] = 'Herstelproces begonnen. Dit kan een lange tijd duren. Als het script een timeout genereerd voor het klaar is, moet je in kleinere selecties herstellen.';
+$lang['revstop'] = 'Herstelproces succesvol afgerond.';
+$lang['note1'] = 'NB: deze zoekopdracht is hoofdlettergevoelig';
+$lang['note2'] = 'NB: de pagina zal hersteld worden naar de laatste versie waar de opgegeven spam-term <i>%s</i> niet op voorkomt.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/no/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/no/intro.txt
new file mode 100644
index 000000000..f48b98749
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/no/intro.txt
@@ -0,0 +1,3 @@
+====== Tilbakestillingsbehandler ======
+
+Denne siden hjelper deg å automatisk reversere forsøpling av sidene. For å finne en liste over forsøplede sider, skriv inn en søkestreng (f.eks. en søppel-URL). Bekreft deretter at de funnede sidene virkelig er forsøplet og tilbakestill endringene.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/no/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/no/lang.php
new file mode 100644
index 000000000..262ea3fe5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/no/lang.php
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Norwegianlanguage file
+ *
+ * @author Thomas Nygreen <nygreen@gmail.com>
+ * @author Arild Burud <arildb@met.no>
+ * @author Torkill Bruland <torkar-b@online.no>
+ * @author Rune M. Andersen <rune.andersen@gmail.com>
+ * @author Jakob Vad Nielsen (me@jakobnielsen.net)
+ * @author Kjell Tore Næsgaard <kjell.t.nasgaard@ntnu.no>
+ * @author Knut Staring <knutst@gmail.com>
+ * @author Lisa Ditlefsen <lisa@vervesearch.com>
+ * @author Erik Pedersen <erik.pedersen@shaw.ca>
+ * @author Erik Bjørn Pedersen <erik.pedersen@shaw.ca>
+ */
+$lang['menu'] = 'Tilbakestillingsbehandler';
+$lang['filter'] = 'Søk etter søppelmeldinger';
+$lang['revert'] = 'Tilbakestill valgte sider';
+$lang['reverted'] = '%s tilbakestilt til revisjon %s';
+$lang['removed'] = '%s fjernet';
+$lang['revstart'] = 'Prosessen med tilbakestilling er startet. Hvis det skjer et
+tidsavbrudd før prosessen er ferdig, må du tilbakestille
+færre sider om gangen.';
+$lang['revstop'] = 'Tilbakestillingen er fullført.';
+$lang['note1'] = 'Merk: søket skiller mellom store og små bokstaver';
+$lang['note2'] = 'Merk: siden vil bli tilbakestilt til den siste versjonen som ikke inneholder det oppgitte søppel-ordet <i>%s</i>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pl/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pl/intro.txt
new file mode 100644
index 000000000..410948a2f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pl/intro.txt
@@ -0,0 +1,3 @@
+====== Menadżer przywracania ======
+
+Menadżer przywracania przeznaczony jest do automatycznego naprawiania stron, które uległy wandalizmom. W celu naprawienia uszkodzonych stron, wyszukaj je a następnie oznacz i przywróć poprzednie wersje.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pl/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pl/lang.php
new file mode 100644
index 000000000..8ad68b5f8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pl/lang.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * polish language file
+ * @author Grzegorz Żur <grzegorz.zur@gmail.com>
+ * @author Mariusz Kujawski <marinespl@gmail.com>
+ * @author Maciej Kurczewski <pipijajko@gmail.com>
+ * @author SÅ‚awomir Boczek <slawkens@gmail.com>
+ */
+$lang['menu'] = 'Menadżer przywracania';
+$lang['filter'] = 'Wyszukaj uszkodzone strony';
+$lang['revert'] = 'Napraw zaznaczone strony';
+$lang['reverted'] = 'StronÄ™ %s zastÄ…piono wersjÄ… %s';
+$lang['removed'] = 'Stronę %s usunięto';
+$lang['revstart'] = 'Naprawa rozpoczęta. To może zająć kilka minut. Jeśli strona przestanie się ładować, spróbuj ponownie zaznaczając mniejszą liczbę stron.';
+$lang['revstop'] = 'Naprawa zakończona pomyślnie!';
+$lang['note1'] = 'Uwaga: duże i małe litery są rozróżniane';
+$lang['note2'] = 'Uwaga: zostanie przywrócona ostatnia wersja strony niezawierająca wyrażenia <i>%s</i>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt-br/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt-br/intro.txt
new file mode 100644
index 000000000..5ce9890db
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt-br/intro.txt
@@ -0,0 +1,3 @@
+====== Gerenciador de Reversões ======
+
+Essa página ajuda a reverter automaticamente um ataque de spam. Para encontrar as páginas que sofreram ataque, primeiro entre com um termo na busca (ex.: a URL do spam), então confirme que as páginas encontradas são realmente spam e reverta as edições.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt-br/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt-br/lang.php
new file mode 100644
index 000000000..93c8bf4e1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt-br/lang.php
@@ -0,0 +1,25 @@
+<?php
+/**
+ * Portuguese language file
+ *
+ * @author Frederico Gonçalves Guimarães <frederico@teia.bio.br>
+ * @author Felipe Castro <fefcas@gmail.com>
+ * @author Lucien Raven <lucienraven@yahoo.com.br>
+ * @author Enrico Nicoletto <liverig@gmail.com>
+ * @author Flávio Veras <flaviove@gmail.com>
+ * @author Jeferson Propheta <jeferson.propheta@gmail.com>
+ * @author jair.henrique@gmail.com
+ * @author Luis Dantas <luis@dantas.com>
+ * @author Frederico Guimarães <frederico@teia.bio.br>
+ * @author Jair Henrique <jair.henrique@gmail.com>
+ * @author Luis Dantas <luisdantas@gmail.com>
+ */
+$lang['menu'] = 'Gerenciador de reversões';
+$lang['filter'] = 'Procura por páginas com spam';
+$lang['revert'] = 'Reverte as páginas selecionadas';
+$lang['reverted'] = '%s revertida para a revisão %s';
+$lang['removed'] = '% removida';
+$lang['revstart'] = 'O processo de reversão foi iniciado. Isso pode levar muito tempo. Se o tempo de execução do script expirar antes dele encerrar, você deverá tentar novamente usando blocos menores.';
+$lang['revstop'] = 'O processo de reversão terminou com sucesso.';
+$lang['note1'] = 'Nota: esta busca diferencia maiúsculas/minúsculas';
+$lang['note2'] = 'Nota: a página será revertida para a última versão que não contém o termo de spam <i>%s</i>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt/intro.txt
new file mode 100644
index 000000000..7adfe5f21
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt/intro.txt
@@ -0,0 +1,3 @@
+====== Gerir Reversões ======
+
+Esta página ajuda a reverter automaticamente de um ataque spam. Para encontrar as páginas afectadas insira primeiro um texto de pesquisa (i.e spam URL), confirme as páginas encontradas como sendo resultantes de um ataque spam e reverta essas edições. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt/lang.php
new file mode 100644
index 000000000..4ad114efe
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt/lang.php
@@ -0,0 +1,18 @@
+<?php
+/**
+ * Portuguese language file
+ *
+ * @author José Monteiro <Jose.Monteiro@DoWeDo-IT.com>
+ * @author Enrico Nicoletto <liverig@gmail.com>
+ * @author Fil <fil@meteopt.com>
+ * @author André Neves <drakferion@gmail.com>
+ */
+$lang['menu'] = 'Gestor de Reversões';
+$lang['filter'] = 'Pesquisar por páginas "spammy"';
+$lang['revert'] = 'Reverter páginas seleccionadas';
+$lang['reverted'] = '%s revertida para revisão %s';
+$lang['removed'] = '%s removidas.';
+$lang['revstart'] = 'Processo de reversão iniciado. A sua execução pode demorar. Se der timeout antes de terminar então é preciso escolher quantidades menores de páginas a reverter.';
+$lang['revstop'] = 'Processo de reversão bem sucedido.';
+$lang['note1'] = 'Nota: a pesquisa é case-sensitive';
+$lang['note2'] = 'Nota: a página será revertida para a versão anterior que não contém os termos spam pesquisados: <i>%s</i>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ro/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ro/intro.txt
new file mode 100644
index 000000000..3a030359b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ro/intro.txt
@@ -0,0 +1,3 @@
+====== Manager Reveniri ======
+
+Această pagină ajută revenirea automată în cazul unui atac spam. Pentru a găsi o listă a paginilor cu spam, întroduceţi mai întâi un şir de căutat (de ex. Un URL spam), apoi confirmaţi dacă paginile găsite conţin într-adevăr spam şi anulaţi editările.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ro/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ro/lang.php
new file mode 100644
index 000000000..6e534fd37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ro/lang.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Romanian language file
+ *
+ * @author Sergiu Baltariu <s_baltariu@yahoo.com>
+ * @author s_baltariu@yahoo.com
+ * @author Emanuel-Emeric Andrasi <n30@mandrivausers.ro>
+ * @author Emanuel-Emeric Andrași <n30@mandrivausers.ro>
+ * @author Emanuel-Emeric AndraÅŸi <em.andrasi@mandrivausers.ro>
+ * @author Emanuel-Emeric Andrasi <em.andrasi@mandrivausers.ro>
+ */
+$lang['menu'] = 'Manager Reveniri';
+$lang['filter'] = 'Caută pagini cu posibil spam';
+$lang['revert'] = 'Revenire pentru paginile selectate';
+$lang['reverted'] = '%s revenită la versiunea %s';
+$lang['removed'] = '%s eliminată';
+$lang['revstart'] = 'Procesul de revenire a început. Acesta poate dura mult timp.Dacă scriptul expiră înainte de finalizare, trebuie să reveniţi în paşi mai mici.';
+$lang['revstop'] = 'Procesul de revenire s-a finalizat cu succes.';
+$lang['note1'] = 'Notă: această căutare este sensibilă la majuscule.';
+$lang['note2'] = 'Notă: pagina va reveni la ultima versiune ce nu conţine termenul de spam <i>%s</i>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ru/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ru/intro.txt
new file mode 100644
index 000000000..6f08c9961
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ru/intro.txt
@@ -0,0 +1,3 @@
+====== Менеджер откаток ======
+
+Эта Ñтраница поможет вам в автоматичеÑкой откатке изменений поÑле Ñпам-атаки. Ð”Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы найти Ñпам-Ñтраницы, введите ключевые Ñлова и произведите поиÑк (например, по URL Ñпаммера). Затем убедитеÑÑŒ, что найденные Ñтраницы дейÑтвительно Ñодержат Ñпам, и Ñделайте откатку изменений.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ru/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ru/lang.php
new file mode 100644
index 000000000..a78210777
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ru/lang.php
@@ -0,0 +1,22 @@
+<?php
+/**
+ * russian language file
+ * @author Denis Simakov <akinoame1@gmail.com>
+ * @author Andrew Pleshakov <beotiger@mail.ru>
+ * @author Змей ЭтерийÑкий evil_snake@eternion.ru
+ * @author Hikaru Nakajima <jisatsu@mail.ru>
+ * @author Alexei Tereschenko <alexeitlex@yahoo.com>
+ * @author Irina Ponomareva irinaponomareva@webperfectionist.com
+ * @author Alexander Sorkin <kibizoid@gmail.com>
+ * @author Kirill Krasnov <krasnovforum@gmail.com>
+ * @author Vlad Tsybenko <vlad.development@gmail.com>
+ */
+$lang['menu'] = 'Менеджер откаток';
+$lang['filter'] = 'ПоиÑк Ñпам-Ñтраниц';
+$lang['revert'] = 'Откатить Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ñ‹Ñ… Ñтраниц';
+$lang['reverted'] = '%s откачена к верÑии %s';
+$lang['removed'] = '%s удалена';
+$lang['revstart'] = 'Ðачат процеÑÑ Ð¾Ñ‚ÐºÐ°Ñ‚ÐºÐ¸. Он может занÑÑ‚ÑŒ много времени. ЕÑли Ñкрипт не уÑпевает завершить работу и выдает ошибку, необходимо произвеÑти откатку более маленькими чаÑÑ‚Ñми.';
+$lang['revstop'] = 'ПроцеÑÑ Ð¾Ñ‚ÐºÐ°Ñ‚ÐºÐ¸ уÑпешно завершен.';
+$lang['note1'] = 'Замечание: поиÑк Ñ ÑƒÑ‡ÐµÑ‚Ð¾Ð¼ региÑтра';
+$lang['note2'] = 'Замечание: Ñтраница будет откачена к поÑледней верÑии, не Ñодержащей Ñпам-термин <i>%s</i>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sk/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sk/intro.txt
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sk/intro.txt
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sk/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sk/lang.php
new file mode 100644
index 000000000..822837de0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sk/lang.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Slovaklanguage file
+ *
+ * @author Michal Mesko <michal.mesko@gmail.com>
+ * @author exusik@gmail.com
+ * @author Martin Michalek <michalek.dev@gmail.com>
+ */
+$lang['menu'] = 'Reverzný menežér';
+$lang['filter'] = 'Hľadať spamerské stránky';
+$lang['revert'] = 'Vrátiť vybrané stránky';
+$lang['reverted'] = '%s vrátená na revíziu %s';
+$lang['removed'] = '%s odstránená';
+$lang['revstart'] = 'Proces reverzie bol spustený. Toto môže trvaÅ¥ dlhý Äas. Ak skript vyprší pred tým, ako skonÄí, musíte urobiÅ¥ reverziu v menších dávkach.';
+$lang['revstop'] = 'Proces reverzie sa úspeÅ¡ne skonÄil.';
+$lang['note1'] = 'Poznámka: vyhľadávanie rozlišuje medzi veľkými a malými písmenami';
+$lang['note2'] = 'Poznámka: táto stránka bude vrátená do poslednej verzie, ktorá neobsahuje spamový výraz <i>%s</i>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sl/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sl/lang.php
new file mode 100644
index 000000000..1fcf4ca36
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sl/lang.php
@@ -0,0 +1,7 @@
+<?php
+/**
+ * Slovenian language file
+ *
+ * @author Dejan Levec <webphp@gmail.com>
+ * @author BoÅ¡tjan SeniÄar <senicar@gmail.com>
+ */
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sr/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sr/intro.txt
new file mode 100644
index 000000000..8c288e7f1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sr/intro.txt
@@ -0,0 +1,3 @@
+====== Управљач за враћање ======
+
+Ова Ñтрана вам помаже од напада Ñпама аутоматÑким враћањем на Ñтаре верзије Ñтраница. Да биÑте пронашли Ñпамоване Ñтранице откуцајте реч за претрагу (тј. реч која Ñе појављује у Ñпаму), затим потврдите да Ñе на пронађеним Ñтраницама Ñтварно налази Ñпам и онда вратите на Ñтање пре промена. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sr/lang.php
new file mode 100644
index 000000000..3b28a1729
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sr/lang.php
@@ -0,0 +1,16 @@
+<?php
+/**
+ * Serbian language file
+ *
+ * @author Иван Петровић petrovicivan@ubuntusrbija.org
+ * @author Ivan Petrovic <petrovicivan@ubuntusrbija.org>
+ */
+$lang['menu'] = 'Управљач за враћање';
+$lang['filter'] = 'Претрага Ñпам Ñтраница';
+$lang['revert'] = 'Врати одабране Ñтранице';
+$lang['reverted'] = '%s враћена на ревизију %s';
+$lang['removed'] = '%s је уклоњена';
+$lang['revstart'] = 'ÐŸÑ€Ð¾Ñ†ÐµÑ Ð²Ñ€Ð°Ñ›Ð°ÑšÐ° је покренут. Може потрајати дуже време. Ðко иÑтекне време пре завршетка потребно је да покренете у мањим деловима.';
+$lang['revstop'] = 'ÐŸÑ€Ð¾Ñ†ÐµÑ Ð²Ñ€Ð°Ñ›Ð°ÑšÐ° је уÑпешно завршен.';
+$lang['note1'] = 'Ðапомена: ова претрага разликује велика и мала Ñлова';
+$lang['note2'] = 'Ðапомена: Ñтраница ће бити враћена на поÑледњу верзију која не Ñадржи Ñпам израз <i>%s</i>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sv/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sv/intro.txt
new file mode 100644
index 000000000..cd7f322a3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sv/intro.txt
@@ -0,0 +1,3 @@
+====== Hantera återställningar ======
+
+Den här sidan hjälper till med automatiskt återställning efter en spamattack. För att hitta spammade sidor, ange först en söksträng (till exempel en webbadress). Kontrollera sedan att sidorna som hittades verkligen är spam, och återställ sedan redigeringarna.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sv/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sv/lang.php
new file mode 100644
index 000000000..1b6ca3374
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sv/lang.php
@@ -0,0 +1,28 @@
+<?php
+/**
+ * Swedish language file
+ *
+ * @author Per Foreby <per@foreby.se>
+ * @author Nicklas Henriksson <nicklas[at]nihe.se>
+ * @author HÃ¥kan Sandell <hakan.sandell[at]mydata.se>
+ * @author Dennis Karlsson
+ * @author Tormod Otter Johansson <tormod@latast.se>
+ * @author emil@sys.nu
+ * @author Pontus Bergendahl <pontus.bergendahl@gmail.com>
+ * @author Tormod Johansson tormod.otter.johansson@gmail.com
+ * @author Emil Lind <emil@sys.nu>
+ * @author Bogge Bogge <bogge@bogge.com>
+ * @author Peter Åström <eaustreum@gmail.com>
+ * @author HÃ¥kan Sandell <hakan.sandell@home.se>
+ */
+$lang['menu'] = 'Hantera återställningar';
+$lang['filter'] = 'Sök efter spamsidor';
+$lang['revert'] = 'Återställ markerade redigeringar';
+$lang['reverted'] = '%s återställd till version %s';
+$lang['removed'] = '%s borttagen';
+$lang['revstart'] = 'Återställningen startad. Detta kan ta lång tid. Om
+ skriptet får en timeout innan det är färdigt måste du köra återställningen
+ med färre sidor åt gången.';
+$lang['revstop'] = 'Återställningen avslutades utan problem.';
+$lang['note1'] = 'OBS: sökningen skiljer på stora och små bokstäver';
+$lang['note2'] = 'OBS: sidan kommer att återställas till den senaste versionen som inte innehåller den angivna söksträngen <i>%s</i>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/th/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/th/intro.txt
new file mode 100644
index 000000000..2bfd27e59
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/th/intro.txt
@@ -0,0 +1,3 @@
+====== ตัวจัดà¸à¸²à¸£à¸à¸¹à¹‰à¸„ืนสภาพเอà¸à¸ªà¸²à¸£ ======
+
+หน้านี้จะช่วยคุณด้วยà¸à¸²à¸£à¸à¸¹à¹‰à¸„ืนหน้าที่ถูà¸à¹à¸ªà¸›à¸¡à¹‚ดยอัตโนมัติ เพื่อที่จะค้นหารายà¸à¸²à¸£à¸«à¸™à¹‰à¸²à¸—ี่ถูà¸à¸ªà¹à¸›à¸¡ อันดับà¹à¸£à¸à¹ƒà¸«à¹‰à¸à¸£à¸­à¸à¸‚้อความสืบค้น (เช่น URL เว็บโฆษณาที่มาสà¹à¸›à¸¡à¹„ว้), จาà¸à¸™à¸±à¹‰à¸™à¹ƒà¸«à¹‰à¸¢à¸·à¸™à¸¢à¸±à¸™à¸§à¹ˆà¸²à¹€à¸žà¸ˆà¸—ี่พบนั้นถูà¸à¸ªà¹à¸›à¸¡à¸ˆà¸£à¸´à¸‡à¹† à¹à¸¥à¹‰à¸§à¸ˆà¸¶à¸‡à¸ªà¸±à¹ˆà¸‡à¸„ืนสภาพต้นฉบับ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/th/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/th/lang.php
new file mode 100644
index 000000000..86e4f9ca4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/th/lang.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Thai language file
+ *
+ * @author Komgrit Niyomrath <n.komgrit@gmail.com>
+ * @author Kittithat Arnontavilas mrtomyum@gmail.com
+ * @author Arthit Suriyawongkul <arthit@gmail.com>
+ * @author Kittithat Arnontavilas <mrtomyum@gmail.com>
+ * @author Thanasak Sompaisansin <jombthep@gmail.com>
+ */
+$lang['menu'] = 'ตัวจัดà¸à¸²à¸£à¸„ืนสภาพเอà¸à¸ªà¸²à¸£à¸‰à¸šà¸±à¸šà¹€à¸”ิม';
+$lang['filter'] = 'ค้นหาเพจที่ถูà¸à¹à¸ªà¸›à¸¡';
+$lang['revert'] = 'คืนสภาพเพจที่เลือà¸à¹„ว้';
+$lang['reverted'] = 'คืนสภาพ %s à¸à¸¥à¸±à¸šà¹„ปเป็นฉบับ %s';
+$lang['removed'] = 'ถอดทิ้ง %s';
+$lang['revstart'] = 'à¸à¸£à¸°à¸šà¸§à¸™à¸à¸²à¸£à¸„ืนสภาพได้เริ่มต้นà¹à¸¥à¹‰à¸§ นี่อาจต้องใช้เวลานาน ถ้าหมดเวลาที่à¸à¸³à¸«à¸™à¸”สำหรับสคริปต์à¸à¹ˆà¸­à¸™à¸—ี่จะสำเร็จ คุณต้องไปทำà¸à¸²à¸£à¹à¸šà¹ˆà¸‡à¸‚้อมูลให้เล็à¸à¸¥à¸‡à¹€à¸žà¸·à¹ˆà¸­à¸à¸²à¸£à¸„ืนสภาพทีละส่วน';
+$lang['revstop'] = 'à¸à¸£à¸°à¸šà¸§à¸™à¸à¸²à¸£à¸„ืนสภาพสำเร็จเรียบร้อย';
+$lang['note1'] = 'คำเตือน: à¸à¸²à¸£à¸„้นนี้นับตัวพิมพ์ใหà¸à¹ˆà¹€à¸¥à¹‡à¸ (case sensitive)';
+$lang['note2'] = 'คำเตือน: เพจจะถูà¸à¸„ืนสภาพไปยังรุ่นล่าสุดที่ไม่มีประโยคสà¹à¸›à¸¡à¸™à¸µà¹‰ <i>%s</i>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/tr/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/tr/intro.txt
new file mode 100644
index 000000000..ff123995a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/tr/intro.txt
@@ -0,0 +1,3 @@
+====== Eskiye Döndürme Yöneticisi ======
+
+Bu sayfa spam saldırılarına karşı otomatik eski haline çevirim yapmanızı sağlar. Spam içerikli sayfayı bulmak için bir anahtar kelime girin (mesela spam URLsi), daha sonra spame maruz kalan sayfalar olduğundan emin olup eski haline çevirin. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/tr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/tr/lang.php
new file mode 100644
index 000000000..164a8ec4f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/tr/lang.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Turkish language file
+ *
+ * @author Aydın Coşkuner aydinweb@gmail.com
+ * @author Aydın Coşkuner <aydinweb@gmail.com>
+ * @author yavuzselim@gmail.com
+ * @author Cihan Kahveci kahvecicihan@gmail.com
+ * @author Yavuz Selim <yavuzselim@gmail.com>
+ */
+$lang['menu'] = 'Eskiye Döndürme';
+$lang['filter'] = 'Spam bulunan sayfaları ara';
+$lang['revert'] = 'Seçili sayfaları eskiye döndür';
+$lang['reverted'] = '%s %s sürümüne geri çevrildi. ';
+$lang['removed'] = '%s kaldırıldı';
+$lang['revstart'] = 'Eskiye döndürme işlemi başlatıldı. Bu işlem uzun sürebilir. Eğer script işlemi tamamlayamadan zaman aşımına uğrarsa küçük parçalar halinde işlemi uygulayın.';
+$lang['revstop'] = 'Eskiye döndürme işlemi başarıyla tamamlandı.';
+$lang['note1'] = 'Not: bu aramada küçük harf büyük harf ayrımı vardır.';
+$lang['note2'] = 'Not: bu sayfa <i>%s</i> spam kelimelerini içermeyen son haline geri çevirilecektir.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/uk/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/uk/intro.txt
new file mode 100644
index 000000000..7bf5dfcb9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/uk/intro.txt
@@ -0,0 +1,3 @@
+====== Менеджер Ð²Ñ–Ð´Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ ======
+
+Ð¦Ñ Ñторінка дозволÑÑ” вам автоматично відновлюватиÑÑ Ð¿Ñ–ÑÐ»Ñ ÑпамерÑьких атак. Ð”Ð»Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ ÑпиÑку зіпÑутих Ñторінок Ñпочатку введіть Ñ€Ñдок (напр. ÑпамерÑьке поÑиланнÑ), а потім підтвердіть, що знайдена Ñторінка дійÑно Ñ” Ñпамом Ñ– відновіть редагуваннÑ. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/uk/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/uk/lang.php
new file mode 100644
index 000000000..37104bdd2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/uk/lang.php
@@ -0,0 +1,18 @@
+<?php
+/**
+ * Ukrainian language file
+ *
+ * @author serg_stetsuk@ukr.net
+ * @author okunia@gmail.com
+ * @author Oleksandr Kunytsia <okunia@gmail.com>
+ * @author Uko uko@uar.net
+ */
+$lang['menu'] = 'Менеджер відновленнÑ';
+$lang['filter'] = 'Пошук Ñпамних Ñторінок';
+$lang['revert'] = 'Відновити обрані Ñторінки';
+$lang['reverted'] = '%s відновлено до верÑÑ–Ñ— %s';
+$lang['removed'] = '%s вилучено';
+$lang['revstart'] = 'Розпочато Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð²Ñ–Ð´Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ. Це може зайнÑти багато чаÑу. Якщо Ñкрипт закінчує роботу по таймауту, необхідно відновлювати меншими чаÑтинами.';
+$lang['revstop'] = 'ÐŸÑ€Ð¾Ñ†ÐµÑ Ð²Ñ–Ð´Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ ÑƒÑпішно закінчено.';
+$lang['note1'] = 'Увага: пошук залежить від регіÑтру Ñимволів';
+$lang['note2'] = 'Увага: Ñторінку буде відновлено до оÑтанньої верÑÑ–Ñ—, Ñка не міÑтить ÑпамерÑького терміну <i>%s</i>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh-tw/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh-tw/intro.txt
new file mode 100644
index 000000000..2aad10206
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh-tw/intro.txt
@@ -0,0 +1,3 @@
+====== 還原管ç†å™¨ ======
+
+該é é¢èƒ½å¹«åŠ©æ‚¨çš„é é¢å¾žåžƒåœ¾ä¿¡æ¯çš„攻擊中自動還原éŽä¾†ã€‚ 請先輸入關éµè©žæœç´¢åŒ…å«åžƒåœ¾ä¿¡æ¯çš„é é¢ï¼ˆå¦‚æŸå€‹åžƒåœ¾ä¿¡æ¯çš„ URL),然åŽè«‹ç¢ºå®šæœç´¢çµæžœçš„確包å«åžƒåœ¾ä¿¡æ¯ï¼Œä¸¦å°‡å…¶é‚„原至先å‰çš„修訂版。
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh-tw/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh-tw/lang.php
new file mode 100644
index 000000000..40a137dc0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh-tw/lang.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Chinese Traditional language file
+ *
+ * @author Li-Jiun Huang <ljhuang.tw@gmail.com>
+ * @author http://www.chinese-tools.com/tools/converter-simptrad.html
+ * @author Wayne San <waynesan@zerozone.tw>
+ * @author Li-Jiun Huang <ljhuang.tw@gmai.com>
+ * @author Cheng-Wei Chien <e.cwchien@gmail.com>
+ */
+$lang['menu'] = '還原管ç†';
+$lang['filter'] = 'æœç´¢åŒ…å«åžƒåœ¾ä¿¡æ¯çš„é é¢';
+$lang['revert'] = '還原所é¸çš„é é¢';
+$lang['reverted'] = '%s已還原到版本%s';
+$lang['removed'] = '%s已移除';
+$lang['revstart'] = '已開始還原æ“作。有å¯èƒ½éœ€è¦å¾ˆé•·æ™‚間。如果計時器在還原æ“作完æˆå‰åœæ­¢äº†ï¼Œè«‹å˜—試還原較少的內容。';
+$lang['revstop'] = '還原程åºå·²æˆå·¥çš„完æˆã€‚';
+$lang['note1'] = '注æ„: æœå°‹æœ‰åˆ†å¤§å°å¯«';
+$lang['note2'] = '注æ„: æ­¤é å°‡æœƒè¢«é‚„原到ä¸åŒ…å«çµ¦äºˆçš„spam term <i>%s</i> 的最新版本.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh/intro.txt
new file mode 100644
index 000000000..c697f8aea
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh/intro.txt
@@ -0,0 +1,3 @@
+====== 还原管ç†å™¨ ======
+
+该页é¢èƒ½å¸®åŠ©æ‚¨çš„页é¢ä»Žåžƒåœ¾ä¿¡æ¯çš„攻击中自动还原过æ¥ã€‚ 请先输入关键è¯æœç´¢åŒ…å«åžƒåœ¾ä¿¡æ¯çš„页é¢ï¼ˆå¦‚æŸä¸ªåžƒåœ¾ä¿¡æ¯çš„ URL),然åŽè¯·ç¡®å®šæœç´¢ç»“果的确包å«åžƒåœ¾ä¿¡æ¯ï¼Œå¹¶å°†å…¶è¿˜åŽŸè‡³å…ˆå‰çš„修订版。
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh/lang.php
new file mode 100644
index 000000000..6241b712b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh/lang.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Chinese(Simplified) language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author ZDYX <zhangduyixiong@gmail.com>
+ * @author http://www.chinese-tools.com/tools/converter-tradsimp.html
+ * @author George Sheraton guxd@163.com
+ * @author Simon zhan <simonzhan@21cn.com>
+ * @author mr.jinyi@gmail.com
+ */
+$lang['menu'] = '还原管ç†å™¨';
+$lang['filter'] = 'æœç´¢åŒ…å«åžƒåœ¾ä¿¡æ¯çš„页é¢';
+$lang['revert'] = '还原选中的页é¢';
+$lang['reverted'] = '%s 还原至修订版 %s';
+$lang['removed'] = '%s 已移除';
+$lang['revstart'] = '已开始还原æ“作。有å¯èƒ½éœ€è¦å¾ˆé•¿æ—¶é—´ã€‚如果计时器在还原æ“作完æˆå‰åœæ­¢äº†ï¼Œè¯·å°è¯•è¿˜åŽŸè¾ƒå°‘的内容。';
+$lang['revstop'] = '还原æ“作æˆåŠŸå®Œæˆã€‚';
+$lang['note1'] = '请注æ„:本次æœç´¢åŒºåˆ†å¤§å°å†™';
+$lang['note2'] = '请注æ„:本页é¢å°†è¢«è¿˜åŽŸè‡³ä¸åŒ…å«ç»™å®šåžƒåœ¾ä¿¡æ¯ <i>%s</i> 的最近的修订版。';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/README b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/README
new file mode 100644
index 000000000..21c5dcfae
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/README
@@ -0,0 +1,20 @@
+S5: A Simple Standards-Based Slide Show System
+http://meyerweb.com/eric/tools/s5/
+by Eric Meyer
+
+S5 reloaded version by Christian Effenberger
+
+Additional Themes from
+http://www.yatil.de/s5/download/
+by Martin Hense and Eric Eggert
+
+"dokuwiki" theme based on work by Anika Henke
+
+Additional themes from JesusDA at http://www.jesusda.com/projects/presentaciones_s5
+
+Scriptaculous was developed by Thomas Fuchs, http://script.aculo.us.
+
+Presentacular was developed by Jose Manuel Caicedo, http://cavorite.com/.
+
+The presentation icon was found at
+http://www.linkmatrix.de/index.php?id=icon
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/conf/default.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/conf/default.php
new file mode 100644
index 000000000..cd1f40c86
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/conf/default.php
@@ -0,0 +1,4 @@
+<?php
+
+$conf['template'] = 'dokuwiki';
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/conf/metadata.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/conf/metadata.php
new file mode 100644
index 000000000..7e83909ba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/conf/metadata.php
@@ -0,0 +1,4 @@
+<?php
+
+$meta['template'] = array('dirchoice','_dir' => DOKU_INC.'lib/plugins/s5/ui/');
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/lang/en/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/lang/en/lang.php
new file mode 100644
index 000000000..d38a3633a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/lang/en/lang.php
@@ -0,0 +1,3 @@
+<?php
+
+$lang['view'] = 'View page as slide show';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/lang/ru/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/lang/ru/lang.php
new file mode 100644
index 000000000..3091a7eaf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/lang/ru/lang.php
@@ -0,0 +1,3 @@
+<?php
+
+$lang['view'] = 'Смотреть Ñтраницу как Ñлайд-шоу';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/lang/sp/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/lang/sp/lang.php
new file mode 100644
index 000000000..bd8bf02f9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/lang/sp/lang.php
@@ -0,0 +1,3 @@
+<?php
+
+$lang['view'] = 'Mostrar como presentación';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/plugin.info.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/plugin.info.txt
new file mode 100644
index 000000000..9692c8d2e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/plugin.info.txt
@@ -0,0 +1,8 @@
+# General Plugin Info do not edit
+base s5reloaded
+author Tomas Alonso
+email t.alonso@oan.es
+date 2010-07-18
+name S5 Reloaded Slideshow Plugin including Presentacular
+desc Display a Wiki page as S5 reloaded slideshow presentation with advanced effects using Presentacular
+url http://www.dokuwiki.org/plugin:s5reloaded
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/renderer.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/renderer.php
new file mode 100644
index 000000000..d0822a1ce
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/renderer.php
@@ -0,0 +1,338 @@
+<?php
+/**
+ * Renderer for XHTML output
+ *
+ * @author Harry Fuecks <hfuecks@gmail.com>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+// must be run within Dokuwiki
+if(!defined('DOKU_INC')) die();
+
+// we inherit from the XHTML renderer instead directly of the base renderer
+require_once DOKU_INC.'inc/parser/xhtml.php';
+
+/**
+ * The Renderer
+ */
+class renderer_plugin_s5reloaded extends Doku_Renderer_xhtml {
+ var $slideopen = false;
+ var $notesopen = false;
+ var $base='';
+ var $tpl='';
+
+ /**
+ * the format we produce
+ */
+ function getFormat(){
+ // this should be 's5' usally, but we inherit from the xhtml renderer
+ // and produce XHTML as well, so we can gain magically compatibility
+ // by saying we're the 'xhtml' renderer here.
+ return 'xhtml';
+ }
+
+
+ /**
+ * Initialize the rendering
+ */
+ function document_start() {
+ global $ID;
+
+ // call the parent
+ parent::document_start();
+
+ // store the content type headers in metadata
+ $headers = array(
+ 'Content-Type' => 'text/html; charset=utf-8'
+ );
+ p_set_metadata($ID,array('format' => array('s5reloaded' => $headers) ));
+ $this->base = DOKU_MEDIA.'lib/plugins/s5reloaded/ui/';
+/* $this->tpl = $this->getConf('template'); */
+ $this->tpl = isset($_GET['s5theme'])?$_GET['s5theme']:$this->getConf('template');
+ }
+
+ /**
+ * Print the header of the page
+ *
+ * Gets called when the very first H1 header is discovered. It includes
+ * all the S5 CSS and JavaScript magic
+ */
+ function s5reloaded_init($title){
+ global $conf;
+ global $lang;
+ global $INFO;
+ global $ID;
+
+ //throw away any previous content
+ $this->doc = '
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="'.$conf['lang'].'"
+ lang="'.$conf['lang'].'" dir="'.$lang['direction'].'">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<title>'.hsc($title).'</title>
+<!-- metadata -->
+<meta name="generator" content="S5" />
+<meta name="version" content="S5 1.3" />
+<meta name="author" content="Eric A. Meyer" />
+<meta name="company" content="Complex Spiral Consulting" />
+<!-- meta extensions -->
+<meta name="subject" content="S5 1.3beta7" />
+<meta name="creator" content="Christian Effenberger" />
+<meta name="contributor" content="youcan[64]netzgesta[46]de" />
+<meta name="publisher" content="s5.netzgesta.de" />
+<meta name="description" content="S5 1.3 is a very flexible and lightweight slide show system available for anyone to use (including transitions and scalable fonts and images)" />
+<meta name="keywords" content="S5, slide show, projection-mode, powerpoint-like, scala-like, keynote-like, incremental display, scalable fonts, scalable images, transitions, notes, osf, xoxo, css, javascript, xhtml, public domain" />
+<!-- configuration parameters -->
+<meta name="defaultView" content="slideshow" />
+<meta name="controlVis" content="hidden" />
+<meta name="tranSitions" content="true" />
+<meta name="fadeDuration" content="500" />
+<meta name="incrDuration" content="250" />
+<!-- configuration autoplay extension -->
+<meta name="autoMatic" content="false" />
+<meta name="playLoop" content="true" />
+<meta name="playDelay" content="10" />
+<!-- configuration audio extension -->
+<meta name="audioSupport" content="true" />
+<meta name="audioVolume" content="100" />
+<meta name="audioError" content="true" />
+<!-- configuration audio debug -->
+<meta name="audioDebug" content="false" />
+<!-- style sheet links -->
+<link rel="stylesheet" href="'.$this->base.$this->tpl.'/slides.css" type="text/css" media="projection" id="slideProj" />
+<link rel="stylesheet" href="'.$this->base.$this->tpl.'/outline.css" type="text/css" media="screen" id="outlineStyle" />
+<link rel="stylesheet" href="'.$this->base.$this->tpl.'/print.css" type="text/css" media="print" id="slidePrint" />
+<link rel="stylesheet" href="'.$this->base.$this->tpl.'/opera.css" type="text/css" media="projection" id="operaFix" />
+<link rel="stylesheet" href="'.$this->base.$this->tpl.'/wrap.css" type="text/css" />
+
+<style type="text/css" media="all">
+.imgcon {width: 100%; margin: 0 auto; padding: 0; text-align: center;}
+#anim {width: 33%; height: 320px; position: relative;}
+#anim img {position: absolute; top: 0px; left: 0px;}
+.logo {margin: 0.2em 0 0 0.15em; padding: 0;}
+.clock {margin: 0.1em 0.2em; padding: 0; position: absolute; top: 0em; right: 0em;}
+.red {color: #C02;}
+</style>
+
+<!-- S5 JS -->
+<script src="'.$this->base.$this->tpl.'/slides.js" type="text/javascript"></script>
+
+<!-- prototype + scriptaculous -->
+<script src="'.$this->base.'effects_support/prototype.js" type="text/javascript"></script>
+<script src="'.$this->base.'effects_support/scriptaculous.js" type="text/javascript"></script>
+
+<!-- Presentaculous JS -->
+<script src="'.$this->base.'effects_support/presentacular.js" type="text/javascript"></script>
+
+<script type="text/javascript" charset="utf-8" src="'.$this->base.'../../asciimath/asciimathml148r.js" ></script>
+
+
+</head>
+<body>
+
+<div class="layout">
+<div id="controls"><!-- DO NOT EDIT --></div>
+<div id="currentSlide"><!-- DO NOT EDIT --></div>
+<div id="header">
+<div class="scale" id="logo" style="background:url('.elgg_get_page_owner_entity()->getIcon('small').') no-repeat;"><!-- DO NOT EDIT --></div>
+</div>
+<div id="footer">
+<h1>'.$title.'</h1>
+<h2>'.hsc($conf['title']).' &#8226; '.strftime($conf['dformat'],$INFO['lastmod']).'</h2>
+<div class="scale" id="logo_bottom"><!-- DO NOT EDIT --></div>
+</div>
+</div>
+<div class="presentation">
+';
+ }
+
+ /**
+ * Closes the document
+ */
+ function document_end(){
+ // we don't care for footnotes and toc
+ // but cleanup is nice
+ $this->doc = preg_replace('#<p>\s*</p>#','',$this->doc);
+
+ if($this->slideopen){
+ $this->doc .= '</div>'.DOKU_LF; //close previous slide
+ }
+ if($this->notesopen){
+ $this->doc .= '</div>'.DOKU_LF; //close notes
+ $this->notesopen = false;
+ }
+ $this->doc .= '</div>
+ </body>
+ </html>';
+ }
+
+ /**
+ * This is what creates new slides
+ *
+ * A new slide is started for each H2 header
+ */
+ function header($text, $level, $pos) {
+ if($level == 1){
+ if(!$this->slideopen){
+ $this->s5reloaded_init($text); // this is the first slide
+ $level = 2;
+ }else{
+ return;
+ }
+ }
+
+ if($level == 2){
+ $this->last_h1 = $text;
+ }
+ if($level > 1){
+ //if($level == 2){
+ if($this->notesopen){
+ $this->doc .= '</div>'.DOKU_LF; //close notes
+ $this->notesopen = false;
+ }
+ $this->doc .= '<div class="slide">'.DOKU_LF;
+ $this->slideopen = true;
+ }
+ $this->doc .= '<h1>';
+ if ($this->last_h1 && $level > 2) {
+ $this->doc .= $this->_xmlEntities($this->last_h1.": ".$text);
+ $this->doc .= '</h1>'.DOKU_LF;
+ /* $this->doc .= '<h'.($level-1).'> ';
+ $this->doc .= '</h'.($level-1).'>'.DOKU_LF;
+ $this->doc .= '<h'.($level-1).'>';
+ $this->doc .= $text;
+ $this->doc .= '</h'.($level-1).'>'.DOKU_LF;*/
+ }
+ else {
+ $this->doc .= $this->_xmlEntities($text);
+ $this->doc .= '</h1>'.DOKU_LF;
+ }
+ }
+
+ /**
+ * Top-Level Sections are slides
+ */
+ function section_open($level) {
+// if($level < 3){
+// $this->doc .= '<div class="slidecontent">'.DOKU_LF;
+// }else{
+// $this->doc .= '<div>'.DOKU_LF;
+// }
+ // we don't use it
+ }
+
+ /**
+ * Throw away footnote
+ */
+ function footnote_close() {
+ // recover footnote into the stack and restore old content
+ $footnote = $this->doc;
+ $this->doc = $this->store;
+ $this->store = '';
+ }
+
+ /**
+ * No acronyms in a presentation
+ */
+ function acronym($acronym){
+ $this->doc .= $this->_xmlEntities($acronym);
+ }
+
+ /**
+ * A line stops the slide and start the handout section
+ */
+ function hr() {
+ $this->doc .= '<div class="notes">'.DOKU_LF;
+ $this->notesopen = true;
+ }
+
+ /**
+ * Renders internal and external media
+ */
+ function _media ($src, $title=NULL, $align=NULL, $width=NULL,
+ $height=NULL, $cache=NULL, $render = true) {
+
+ $ret = '';
+
+ list($ext,$mime,$dl) = mimetype($src);
+ if(substr($mime,0,5) == 'image'){
+ // first get the $title
+ if (!is_null($title)) {
+ $title = $this->_xmlEntities($title);
+ }elseif($ext == 'jpg' || $ext == 'jpeg'){
+ //try to use the caption from IPTC/EXIF
+ require_once(DOKU_INC.'inc/JpegMeta.php');
+ $jpeg =& new JpegMeta(mediaFN($src));
+ if($jpeg !== false) $cap = $jpeg->getTitle();
+ if($cap){
+ $title = $this->_xmlEntities($cap);
+ }
+ }
+ if (!$render) {
+ // if the picture is not supposed to be rendered
+ // return the title of the picture
+ if (!$title) {
+ // just show the sourcename
+ $title = $this->_xmlEntities(basename(noNS($src)));
+ }
+ return $title;
+ }
+ //add image tag
+ $ret .= '<img src="'.ml($src,array('w'=>$width,'h'=>$height,'cache'=>$cache)).'"';
+ $ret .= ' class="scale"';
+
+ // make left/right alignment for no-CSS view work (feeds)
+ if($align == 'right') $ret .= ' align="right"';
+ if($align == 'left') $ret .= ' align="left"';
+
+ if ($title) {
+ $ret .= ' title="' . $title . '"';
+ $ret .= ' alt="' . $title .'"';
+ }else{
+ $ret .= ' alt=""';
+ }
+
+ if ( !is_null($width) )
+ $ret .= ' width="'.$this->_xmlEntities($width).'"';
+
+ if ( !is_null($height) )
+ $ret .= ' height="'.$this->_xmlEntities($height).'"';
+
+ $ret .= ' />';
+
+ }elseif($mime == 'application/x-shockwave-flash'){
+ if (!$render) {
+ // if the flash is not supposed to be rendered
+ // return the title of the flash
+ if (!$title) {
+ // just show the sourcename
+ $title = basename(noNS($src));
+ }
+ return $this->_xmlEntities($title);
+ }
+
+ $att = array();
+ $att['class'] = "media$align";
+ if($align == 'right') $att['align'] = 'right';
+ if($align == 'left') $att['align'] = 'left';
+ $ret .= html_flashobject(ml($src,array('cache'=>$cache)),$width,$height,
+ array('quality' => 'high'),
+ null,
+ $att,
+ $this->_xmlEntities($title));
+ }elseif($title){
+ // well at least we have a title to display
+ $ret .= $this->_xmlEntities($title);
+ }else{
+ // just show the sourcename
+ $ret .= $this->_xmlEntities(basename(noNS($src)));
+ }
+
+ return $ret;
+ }
+
+}
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/screen.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/screen.gif
new file mode 100644
index 000000000..0c506e397
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/screen.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/syntax.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/syntax.php
new file mode 100644
index 000000000..40b1d0630
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/syntax.php
@@ -0,0 +1,72 @@
+<?php
+/**
+ * S5 Reloaded Plugin: Display a Wiki page as S5 reloaded slideshow presentation
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Tomas Alonso <t.alonso@oan.es>, Andreas Gohr <andi@splitbrain.org>
+ */
+// must be run within Dokuwiki
+if(!defined('DOKU_INC')) die();
+
+if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
+require_once(DOKU_PLUGIN.'syntax.php');
+
+/**
+ * All DokuWiki plugins to extend the parser/rendering mechanism
+ * need to inherit from this class
+ */
+class syntax_plugin_s5reloaded extends DokuWiki_Syntax_Plugin {
+
+ /**
+ * What kind of syntax are we?
+ */
+ function getType(){
+ return 'substition';
+ }
+
+ /**
+ * What about paragraphs?
+ */
+ function getPType(){
+ return 'normal';
+ }
+
+ /**
+ * Where to sort in?
+ */
+ function getSort(){
+ return 800;
+ }
+
+
+ /**
+ * Connect pattern to lexer
+ */
+ function connectTo($mode) {
+ $this->Lexer->addSpecialPattern('~~SLIDESHOW[^~]*~~',$mode,'plugin_s5reloaded');
+ }
+
+
+ /**
+ * Handle the match
+ */
+ function handle($match, $state, $pos, &$handler){
+ if($match!='~~SLIDESHOW~~') return array(trim(substr($match,11,-2)));
+ return array();
+ }
+
+ /**
+ * Create output
+ */
+ function render($format, &$renderer, $data) {
+ global $ID;
+ if($format != 'xhtml') return false;
+
+ $renderer->doc .= '<a href="'.exportlink($ID, 's5reloaded',sizeof($data)?array('s5theme'=>$data[0]):null).'" title="'.$this->getLang('view').'">';
+ $renderer->doc .= '<img src="'.DOKU_BASE.'lib/plugins/s5reloaded/screen.gif" align="right" alt="'.$this->getLang('view').'" width="48" height="48" />';
+ $renderer->doc .= '</a>';
+ return true;
+ }
+}
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/license.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/license.txt
new file mode 100755
index 000000000..1a17182fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/license.txt
@@ -0,0 +1,29 @@
+Software License Agreement (BSD License)
+
+Copyright (c) 2007, Scott Schiller (schillmania.com)
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright notice, this
+ list of conditions and the following disclaimer in the documentation and/or
+ other materials provided with the distribution.
+
+* Neither the name of schillmania.com nor the names of its contributors may be
+ used to endorse or promote products derived from this software without
+ specific prior written permission from schillmania.com.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/null.mp3 b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/null.mp3
new file mode 100755
index 000000000..43cc6135d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/null.mp3
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/soundmanager2.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/soundmanager2.js
new file mode 100644
index 000000000..9095b5de3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/soundmanager2.js
@@ -0,0 +1,658 @@
+/*
+ SoundManager 2: Javascript Sound for the Web.
+ --------------------------------------------------
+ http://www.schillmania.com/projects/soundmanager2/
+
+ Copyright (c) 2007, Scott Schiller. All rights reserved.
+ Code licensed under the BSD License:
+ http://www.schillmania.com/projects/soundmanager2/license.txt
+
+ Beta V2.0b.20070118
+*/
+
+function SoundManager(smURL,smID) {
+ var self = this;
+ this.enabled = false;
+ this.o = null;
+ this.url = (smURL||s5Path+'ui/audio_support/soundmanager2.swf');
+ this.id = (smID||'sm2movie');
+ this.oMC = null;
+ this.sounds = [];
+ this.soundIDs = [];
+ this.allowPolling = true; // allow flash to poll for status update (required for "while playing", "progress" etc. to work.)
+ this.isIE = (navigator.userAgent.match(/MSIE/));
+ this.isSafari = (navigator.userAgent.match(/safari/i));
+ this._didAppend = false;
+ this._didInit = false;
+ this._disabled = false;
+ this.version = 'V2.0b.20070118';
+
+ this.defaultOptions = {
+ // -----------------
+ 'debugMode': false, // enable debug/status messaging, handy for development/troubleshooting - will be written to a DIV with an ID of "soundmanager-debug", you can use CSS to make it pretty
+ 'autoLoad': false, // enable automatic loading (otherwise .load() will be called on demand with .play(), the latter being nicer on bandwidth - if you want to .load yourself, you also can)
+ 'stream': true, // allows playing before entire file has loaded (recommended)
+ 'autoPlay': false, // enable playing of file as soon as possible (much faster if "stream" is true)
+ 'onid3': null, // callback function for "ID3 data is added/available"
+ 'onload': null, // callback function for "load finished"
+ 'whileloading': null, // callback function for "download progress update" (X of Y bytes received)
+ 'onplay': null, // callback for "play" start
+ 'whileplaying': null, // callback during play (position update)
+ 'onstop': null, // callback for "user stop"
+ 'onfinish': null, // callback function for "sound finished playing"
+ 'onbeforefinish': null, // callback for "before sound finished playing (at [time])"
+ 'onbeforefinishtime': 2000, // offset (milliseconds) before end of sound to trigger beforefinish (eg. 1000 msec = 1 second)
+ 'onbeforefinishcomplete':null, // function to call when said sound finishes playing
+ 'onjustbeforefinish':null, // callback for [n] msec before end of current sound
+ 'onjustbeforefinishtime':200, // [n] - if not using, set to 0 (or null handler) and event will not fire.
+ 'multiShot': true, // let sounds "restart" or layer on top of each other when played multiple times, rather than one-shot/one at a time
+ 'pan': 0, // "pan" settings, left-to-right, -100 to 100
+ 'volume': 100, // self-explanatory. 0-100, the latter being the max.
+ // -----------------
+ 'foo': 'bar' // you don't need to change this one - it's actually an intentional filler.
+ }
+
+ // --- public methods ---
+
+ this.getMovie = function(smID) {
+ // return self.isIE?window[smID]:document[smID];
+ return self.isIE?window[smID]:(self.isSafari?document[smID+'-embed']:document.getElementById(smID+'-embed'));
+ }
+
+ this.loadFromXML = function(sXmlUrl) {
+ try {
+ self.o._loadFromXML(sXmlUrl);
+ } catch(e) {
+ self._failSafely();
+ return true;
+ }
+ }
+
+ this.createSound = function(oOptions) {
+ if (!self._didInit) throw new Error('soundManager.createSound(): Not loaded yet - wait for soundManager.onload() before calling sound-related methods');
+ if (arguments.length==2) {
+ // function overloading in JS! :) ..assume simple createSound(id,url) use case
+ oOptions = {'id':arguments[0],'url':arguments[1]}
+ }
+ var thisOptions = self._mergeObjects(oOptions);
+ self._writeDebug('soundManager.createSound(): "<a href="#" onclick="soundManager.play(\''+thisOptions.id+'\');return false" title="play this sound">'+thisOptions.id+'</a>" ('+thisOptions.url+')');
+ if (self._idCheck(thisOptions.id,true)) {
+ self._writeDebug('sound '+thisOptions.id+' already defined - exiting');
+ return false;
+ }
+ self.sounds[thisOptions.id] = new SMSound(self,thisOptions);
+ self.soundIDs[self.soundIDs.length] = thisOptions.id;
+ try {
+ self.o._createSound(thisOptions.id,thisOptions.onjustbeforefinishtime);
+ } catch(e) {
+ self._failSafely();
+ return true;
+ }
+ if (thisOptions.autoLoad || thisOptions.autoPlay) self.sounds[thisOptions.id].load(thisOptions);
+ if (thisOptions.autoPlay) self.sounds[thisOptions.id].playState = 1; // we can only assume this sound will be playing soon.
+ }
+
+ this.load = function(sID,oOptions) {
+ if (!self._idCheck(sID)) return false;
+ self.sounds[sID].load(oOptions);
+ }
+
+ this.unload = function(sID) {
+ if (!self._idCheck(sID)) return false;
+ self.sounds[sID].unload();
+ }
+
+ this.play = function(sID,oOptions) {
+ if (!self._idCheck(sID)) {
+ if (typeof oOptions != 'Object') oOptions = {url:oOptions}; // overloading use case: play('mySound','/path/to/some.mp3');
+ if (oOptions && oOptions.url) {
+ // overloading use case, creation + playing of sound: .play('someID',{url:'/path/to.mp3'});
+ self._writeDebug('soundController.play(): attempting to create "'+sID+'"');
+ oOptions.id = sID;
+ self.createSound(oOptions);
+ } else {
+ return false;
+ }
+ }
+ self.sounds[sID].play(oOptions);
+ }
+
+ this.start = this.play; // just for convenience
+
+ this.setPosition = function(sID,nMsecOffset) {
+ if (!self._idCheck(sID)) return false;
+ self.sounds[sID].setPosition(nMsecOffset);
+ }
+
+ this.stop = function(sID) {
+ if (!self._idCheck(sID)) return false;
+ self._writeDebug('soundManager.stop('+sID+')');
+ self.sounds[sID].stop();
+ }
+
+ this.stopAll = function() {
+ for (var oSound in self.sounds) {
+ if (oSound instanceof SMSound) oSound.stop(); // apply only to sound objects
+ }
+ }
+
+ this.pause = function(sID) {
+ if (!self._idCheck(sID)) return false;
+ self.sounds[sID].pause();
+ }
+
+ this.resume = function(sID) {
+ if (!self._idCheck(sID)) return false;
+ self.sounds[sID].resume();
+ }
+
+ this.togglePause = function(sID) {
+ if (!self._idCheck(sID)) return false;
+ self.sounds[sID].togglePause();
+ }
+
+ this.setPan = function(sID,nPan) {
+ if (!self._idCheck(sID)) return false;
+ self.sounds[sID].setPan(nPan);
+ }
+
+ this.setVolume = function(sID,nVol) {
+ if (!self._idCheck(sID)) return false;
+ self.sounds[sID].setVolume(nVol);
+ }
+
+ this.setPolling = function(bPolling) {
+ if (!self.o || !self.allowPolling) return false;
+ self._writeDebug('soundManager.setPolling('+bPolling+')');
+ self.o._setPolling(bPolling);
+ }
+
+ this.disable = function() {
+ // destroy all functions
+ if (self._disabled) return false;
+ self._disabled = true;
+ self._writeDebug('soundManager.disable(): Disabling all functions - future calls will return false.');
+ for (var i=self.soundIDs.length; i--;) {
+ self._disableObject(self.sounds[self.soundIDs[i]]);
+ }
+ self.initComplete(); // fire "complete", despite fail
+ self._disableObject(self);
+ }
+
+ this.getSoundById = function(sID,suppressDebug) {
+ if (!sID) throw new Error('SoundManager.getSoundById(): sID is null/undefined');
+ var result = self.sounds[sID];
+ if (!result && !suppressDebug) {
+ self._writeDebug('"'+sID+'" is an invalid sound ID.');
+ // soundManager._writeDebug('trace: '+arguments.callee.caller);
+ }
+ return result;
+ }
+
+ this.onload = function() {
+ onloadSM2();
+ // window.onload() equivalent for SM2, ready to create sounds etc.
+ // this is a stub - you can override this in your own external script, eg. soundManager.onload = function() {}
+ // soundManager._writeDebug('<em>Warning</em>: soundManager.onload() is undefined.');
+ }
+
+ this.onerror = function() {
+ onerrorSM2();
+ // stub for user handler, called when SM2 fails to load/init
+ }
+
+ // --- "private" methods ---
+
+ this._idCheck = this.getSoundById;
+
+ this._disableObject = function(o) {
+ for (var oProp in o) {
+ if (typeof o[oProp] == 'function') o[oProp] = function(){return false;}
+ }
+ oProp = null;
+ }
+
+ this._failSafely = function() {
+ // exception handler for "object doesn't support this property or method"
+ var flashCPLink = 'http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04.html';
+ var fpgssTitle = 'You may need to whitelist this location/domain eg. file://C:/ or C:/ or mysite.com, or set ALWAYS ALLOW under the Flash Player Global Security Settings page. Note that this seems to apply only to file system viewing.';
+ var flashCPL = '<a href="'+flashCPLink+'" title="'+fpgssTitle+'">view/edit</a>';
+ var FPGSS = '<a href="'+flashCPLink+'" title="Flash Player Global Security Settings">FPGSS</a>';
+ if (!self._disabled) {
+ self._writeDebug('soundManager: JS-&gt;Flash communication failed. Possible causes: flash/browser security restrictions ('+flashCPL+'), insufficient browser/plugin support, or .swf not found');
+ self._writeDebug('Verify that the movie path of <em>'+self.url+'</em> is correct (<a href="'+self.url+'" title="If you get a 404/not found, fix it!">test link</a>)');
+ if (self._didAppend) {
+ if (!document.domain) {
+ self._writeDebug('Loading from local file system? (document.domain appears to be null, this location may need whitelisting by '+FPGSS+')');
+ self._writeDebug('Possible security/domain restrictions ('+flashCPL+'), should work when served by http on same domain');
+ }
+ // self._writeDebug('Note: Movie added via JS method, static object/embed in-page markup method may work instead.');
+ }
+ self.disable();
+ }
+ }
+
+ this._createMovie = function(smID,smURL) {
+ var useDOM = !self.isIE; // IE needs document.write() to work, long story short - lame
+ if (window.location.href.indexOf('debug=1')+1) self.defaultOptions.debugMode = true; // allow force of debug mode via URL
+ var html = ['<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="16" height="16" id="'+smID+'"><param name="movie" value="'+smURL+'"><param name="quality" value="high"><param name="allowScriptAccess" value="always" /></object>','<embed name="'+smID+'-embed" id="'+smID+'-embed" src="'+smURL+'" width="1" height="1" quality="high" allowScriptAccess="always" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash"></embed>'];
+ var debugID = 'soundmanager-debug';
+ var debugHTML = '<div id="'+debugID+'" style="display:'+(self.defaultOptions.debugMode?'block':'none')+'"></div>';
+ if (useDOM) {
+ self.oMC = document.createElement('div');
+ self.oMC.className = 'movieContainer';
+ // "hide" flash movie
+ self.oMC.style.position = 'absolute';
+ self.oMC.style.left = '-256px';
+ self.oMC.style.width = '1px';
+ self.oMC.style.height = '1px';
+ self.oMC.innerHTML = html[self.isIE?0:1];
+ var oTarget = (!self.isIE && document.body?document.body:document.getElementsByTagName('div')[0]);
+ oTarget.appendChild(self.oMC); // append to body here can throw "operation aborted" under IE
+ if (!document.getElementById(debugID)) {
+ var oDebug = document.createElement('div');
+ oDebug.id = debugID;
+ oDebug.style.display = (self.defaultOptions.debugMode?'block':'none');
+ oTarget.appendChild(oDebug);
+ }
+ oTarget = null;
+ } else {
+ // IE method - local file system, may cause strange JS error at line 53?
+ // I hate this method, but it appears to be the only one that will work (createElement works, but JS->Flash communication oddly fails when viewing locally.)
+ // Finally, IE doesn't do application/xhtml+xml yet (thus document.write() is still minimally acceptable here.)
+ if (document.getElementById(debugID)) debugHTML = ''; // avoid overwriting
+ document.write('<div style="position:absolute;left:-256px;top:-256px;width:1px;height:1px" class="movieContainer">'+html[self.isIE?0:1]+'</div>'+debugHTML);
+ }
+ self._didAppend = true;
+ self._writeDebug('-- SoundManager 2 Version '+self.version.substr(1)+' --');
+ self._writeDebug('soundManager._createMovie(): trying to load <a href="'+smURL+'" title="Test this link (404=bad)">'+smURL+'</a>');
+ }
+
+ this._writeDebug = function(sText) {
+ if (!self.defaultOptions.debugMode) return false;
+ var sDID = 'soundmanager-debug';
+ try {
+ var o = document.getElementById(sDID);
+ if (!o) {
+ // attempt to create soundManager debug element
+ var oNew = document.createElement('div');
+ oNew.id = sDID;
+ // o = document.body.appendChild(oNew);
+ o = null;
+ if (!o) return false;
+ }
+ var p = document.createElement('div');
+ p.innerHTML = sText;
+ // o.appendChild(p); // top-to-bottom
+ o.insertBefore(p,o.firstChild); // bottom-to-top
+ } catch(e) {
+ // oh well
+ }
+ o = null;
+ }
+
+ this._debug = function() {
+ self._writeDebug('soundManager._debug(): sounds by id/url:');
+ for (var i=0,j=self.soundIDs.length; i<j; i++) {
+ self._writeDebug(self.sounds[self.soundIDs[i]].sID+' | '+self.sounds[self.soundIDs[i]].url);
+ }
+ }
+
+ this._mergeObjects = function(oMain,oAdd) {
+ // non-destructive merge
+ var o1 = oMain;
+ var o2 = (typeof oAdd == 'undefined'?self.defaultOptions:oAdd);
+ for (var o in o2) {
+ if (typeof o1[o] == 'undefined') o1[o] = o2[o];
+ }
+ return o1;
+ }
+
+ this.createMovie = function(sURL) {
+ self._writeDebug('soundManager.createMovie('+(sURL||'')+')');
+ if (sURL) self.url = sURL;
+ self._initMovie();
+ }
+
+ this._initMovie = function() {
+ // attempt to get, or create, movie
+ if (self.o) return false; // pre-init may have fired this function before window.onload(), may already exist
+ self.o = self.getMovie(self.id); // try to get flash movie (inline markup)
+ if (!self.o) {
+ // try to create
+ self._createMovie(self.id,self.url);
+ self.o = self.getMovie(self.id);
+ }
+ if (!self.o) {
+ self._writeDebug('SoundManager(): Could not find object/embed element. Sound will be disabled.');
+ self.disable();
+ } else {
+ self._writeDebug('SoundManager(): Got '+self.o.nodeName+' element ('+(self._didAppend?'created via JS':'static HTML')+')');
+ }
+ }
+
+ this.initComplete = function() {
+ if (self._didInit) return false;
+ self._didInit = true;
+ self._writeDebug('-- SoundManager 2 '+(self._disabled?'failed to load':'loaded')+' ('+(self._disabled?'security/load error':'OK')+') --');
+ if (self._disabled) {
+ self._writeDebug('soundManager.initComplete(): calling soundManager.onerror()');
+ self.onerror.apply(window);
+ return false;
+ }
+ self._writeDebug('soundManager.initComplete(): calling soundManager.onload()');
+ try {
+ // call user-defined "onload", scoped to window
+ self.onload.apply(window);
+ } catch(e) {
+ // something broke (likely JS error in user function)
+ self._writeDebug('soundManager.onload() threw an exception: '+e.message);
+ throw e; // (so browser/console gets message)
+ }
+ self._writeDebug('soundManager.onload() complete');
+ }
+
+ this.init = function() {
+ // called after onload()
+ self._initMovie();
+ // event cleanup
+ if (window.removeEventListener) {
+ window.removeEventListener('load',self.beginInit,false);
+ } else if (window.detachEvent) {
+ window.detachEvent('onload',self.beginInit);
+ }
+ try {
+ self.o._externalInterfaceTest(); // attempt to talk to Flash
+ self._writeDebug('Flash ExternalInterface call (JS -&gt; Flash) succeeded.');
+ if (!self.allowPolling) self._writeDebug('Polling (whileloading/whileplaying support) is disabled.');
+ self.setPolling(true);
+ self.enabled = true;
+ } catch(e) {
+ self._failSafely();
+ self.initComplete();
+ return false;
+ }
+ self.initComplete();
+ }
+
+ this.beginInit = function() {
+ self._initMovie();
+ setTimeout(self.init,1000); // some delay required, otherwise JS<->Flash/ExternalInterface communication fails under non-IE (?!)
+ }
+
+ this.destruct = function() {
+ if (self.isSafari) {
+ /* --
+ Safari 1.3.2 (v312.6)/OSX 10.3.9 and perhaps newer will crash if a sound is actively loading when user exits/refreshes/leaves page
+ (Apparently related to ExternalInterface making calls to an unloading/unloaded page?)
+ Unloading sounds (detaching handlers and so on) may help to prevent this
+ -- */
+ for (var i=self.soundIDs.length; i--;) {
+ if (self.sounds[self.soundIDs[i]].readyState == 1) self.sounds[self.soundIDs[i]].unload();
+ }
+ }
+ self.disable();
+ // self.o = null;
+ // self.oMC = null;
+ }
+
+}
+
+function SMSound(oSM,oOptions) {
+ var self = this;
+ var sm = oSM;
+ this.sID = oOptions.id;
+ this.url = oOptions.url;
+ this.options = sm._mergeObjects(oOptions);
+ this.id3 = {
+ /*
+ Name/value pairs set via Flash when available - see reference for names:
+ http://livedocs.macromedia.com/flash/8/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00001567.html
+ (eg., this.id3.songname or this.id3['songname'])
+ */
+ }
+
+ self.resetProperties = function(bLoaded) {
+ self.bytesLoaded = null;
+ self.bytesTotal = null;
+ self.position = null;
+ self.duration = null;
+ self.durationEstimate = null;
+ self.loaded = false;
+ self.loadSuccess = null;
+ self.playState = 0;
+ self.paused = false;
+ self.readyState = 0; // 0 = uninitialised, 1 = loading, 2 = failed/error, 3 = loaded/success
+ self.didBeforeFinish = false;
+ self.didJustBeforeFinish = false;
+ }
+
+ self.resetProperties();
+
+ // --- public methods ---
+
+ this.load = function(oOptions) {
+ self.loaded = false;
+ self.loadSuccess = null;
+ self.readyState = 1;
+ self.playState = (oOptions.autoPlay||false); // if autoPlay, assume "playing" is true (no way to detect when it actually starts in Flash unless onPlay is watched?)
+ var thisOptions = sm._mergeObjects(oOptions);
+ if (typeof thisOptions.url == 'undefined') thisOptions.url = self.url;
+ try {
+ sm._writeDebug('loading '+thisOptions.url);
+ sm.o._load(self.sID,thisOptions.url,thisOptions.stream,thisOptions.autoPlay,thisOptions.whileloading?1:0);
+ } catch(e) {
+ sm._writeDebug('SMSound().load(): JS-&gt;Flash communication failed.');
+ }
+ }
+
+ this.unload = function() {
+ // Flash 8/AS2 can't "close" a stream - fake it by loading an empty MP3
+ sm._writeDebug('SMSound().unload()');
+ self.setPosition(0); // reset current sound positioning
+ sm.o._unload(self.sID,s5Path+'ui/audio_support/null.mp3');
+ // reset load/status flags
+ self.resetProperties();
+ }
+
+ this.play = function(oOptions) {
+ if (!oOptions) oOptions = {};
+
+ // --- TODO: make event handlers specified via oOptions only apply to this instance of play() (eg. onfinish applies but will reset to default on finish)
+ if (oOptions.onfinish) self.options.onfinish = oOptions.onfinish;
+ if (oOptions.onbeforefinish) self.options.onbeforefinish = oOptions.onbeforefinish;
+ if (oOptions.onjustbeforefinish) self.options.onjustbeforefinish = oOptions.onjustbeforefinish;
+ // ---
+
+ var thisOptions = sm._mergeObjects(oOptions);
+ if (self.playState == 1) {
+ // var allowMulti = typeof oOptions.multiShot!='undefined'?oOptions.multiShot:sm.defaultOptions.multiShot;
+ var allowMulti = thisOptions.multiShot;
+ if (!allowMulti) {
+ sm._writeDebug('SMSound.play(): "'+self.sID+'" already playing? (one-shot)');
+ return false;
+ } else {
+ sm._writeDebug('SMSound.play(): "'+self.sID+'" already playing (multi-shot)');
+ }
+ }
+ if (!self.loaded) {
+ if (self.readyState == 0) {
+ sm._writeDebug('SMSound.play(): .play() before load request. Attempting to load "'+self.sID+'"');
+ // try to get this sound playing ASAP
+ thisOptions.stream = true;
+ thisOptions.autoPlay = true;
+ // TODO: need to investigate when false, double-playing
+ // if (typeof oOptions.autoPlay=='undefined') thisOptions.autoPlay = true; // only set autoPlay if unspecified here
+ self.load(thisOptions); // try to get this sound playing ASAP
+ } else if (self.readyState == 2) {
+ sm._writeDebug('SMSound.play(): Could not load "'+self.sID+'" - exiting');
+ return false;
+ } else {
+ sm._writeDebug('SMSound.play(): "'+self.sID+'" is loading - attempting to play..');
+ }
+ } else {
+ sm._writeDebug('SMSound.play(): "'+self.sID+'"');
+ }
+ if (self.paused) {
+ self.resume();
+ } else {
+ self.playState = 1;
+ self.position = (thisOptions.offset||0);
+ if (thisOptions.onplay) thisOptions.onplay.apply(self);
+ self.setVolume(thisOptions.volume);
+ self.setPan(thisOptions.pan);
+ if (!thisOptions.autoPlay) {
+ sm._writeDebug('starting sound '+self.sID);
+ sm.o._start(self.sID,thisOptions.loop||1,self.position); // TODO: verify !autoPlay doesn't cause issue
+ }
+ }
+ }
+
+ this.start = this.play; // just for convenience
+
+ this.stop = function(bAll) {
+ if (self.playState == 1) {
+ self.playState = 0;
+ self.paused = false;
+ if (sm.defaultOptions.onstop) sm.defaultOptions.onstop.apply(self);
+ sm.o._stop(self.sID);
+ }
+ }
+
+ this.setPosition = function(nMsecOffset) {
+ // sm._writeDebug('setPosition('+nMsecOffset+')');
+ sm.o._setPosition(self.sID,nMsecOffset/1000,self.paused||!self.playState); // if paused or not playing, will not resume (by playing)
+ }
+
+ this.pause = function() {
+ if (self.paused) return false;
+ sm._writeDebug('SMSound.pause()');
+ self.paused = true;
+ sm.o._pause(self.sID);
+ }
+
+ this.resume = function() {
+ if (!self.paused) return false;
+ sm._writeDebug('SMSound.resume()');
+ self.paused = false;
+ sm.o._pause(self.sID); // flash method is toggle-based (pause/resume)
+ }
+
+ this.togglePause = function() {
+ // if playing, pauses - if paused, resumes playing.
+ sm._writeDebug('SMSound.togglePause()');
+ if (!self.playState) {
+ // self.setPosition();
+ self.play({offset:self.position/1000});
+ return false;
+ }
+ if (self.paused) {
+ sm._writeDebug('SMSound.togglePause(): resuming..');
+ self.resume();
+ } else {
+ sm._writeDebug('SMSound.togglePause(): pausing..');
+ self.pause();
+ }
+ }
+
+ this.setPan = function(nPan) {
+ if (typeof nPan == 'undefined') nPan = 0;
+ sm.o._setPan(self.sID,nPan);
+ self.options.pan = nPan;
+ }
+
+ this.setVolume = function(nVol) {
+ if (typeof nVol == 'undefined') nVol = 100;
+ sm.o._setVolume(self.sID,nVol);
+ self.options.volume = nVol;
+ }
+
+ // --- "private" methods called by Flash ---
+
+ this._whileloading = function(nBytesLoaded,nBytesTotal,nDuration) {
+ self.bytesLoaded = nBytesLoaded;
+ self.bytesTotal = nBytesTotal;
+ self.duration = nDuration;
+ self.durationEstimate = parseInt((self.bytesTotal/self.bytesLoaded)*self.duration); // estimate total time (will only be accurate with CBR MP3s.)
+ if (self.readyState != 3 && self.options.whileloading) self.options.whileloading.apply(self);
+ // soundManager._writeDebug('duration/durationEst: '+self.duration+' / '+self.durationEstimate);
+ }
+
+ this._onid3 = function(oID3PropNames,oID3Data) {
+ // oID3PropNames: string array (names)
+ // ID3Data: string array (data)
+ sm._writeDebug('SMSound()._onid3(): "'+this.sID+'" ID3 data received.');
+ var oData = [];
+ for (var i=0,j=oID3PropNames.length; i<j; i++) {
+ oData[oID3PropNames[i]] = oID3Data[i];
+ // sm._writeDebug(oID3PropNames[i]+': '+oID3Data[i]);
+ }
+ self.id3 = sm._mergeObjects(self.id3,oData);
+ if (self.options.onid3) self.options.onid3.apply(self);
+ }
+
+ this._whileplaying = function(nPosition) {
+ if (isNaN(nPosition) || nPosition == null) return false; // Flash may return NaN at times
+ self.position = nPosition;
+ if (self.playState == 1) {
+ if (self.options.whileplaying) self.options.whileplaying.apply(self); // flash may call after actual finish
+ if (self.loaded && self.options.onbeforefinish && self.options.onbeforefinishtime && !self.didBeforeFinish && self.duration-self.position <= self.options.onbeforefinishtime) {
+ sm._writeDebug('duration-position &lt;= onbeforefinishtime: '+self.duration+' - '+self.position+' &lt= '+self.options.onbeforefinishtime+' ('+(self.duration-self.position)+')');
+ self._onbeforefinish();
+ }
+ }
+ }
+
+ this._onload = function(bSuccess) {
+ bSuccess = (bSuccess==1?true:false);
+ sm._writeDebug('SMSound._onload(): "'+self.sID+'"'+(bSuccess?' loaded.':' failed to load (or loaded from cache - weird bug) - [<a href="'+self.url+'">test URL</a>]'));
+ self.loaded = bSuccess;
+ self.loadSuccess = bSuccess;
+ self.readyState = bSuccess?3:2;
+ if (self.options.onload) self.options.onload.apply(self);
+ }
+
+ this._onbeforefinish = function() {
+ if (!self.didBeforeFinish) {
+ self.didBeforeFinish = true;
+ if (self.options.onbeforefinish) self.options.onbeforefinish.apply(self);
+ }
+ }
+
+ this._onjustbeforefinish = function(msOffset) {
+ // msOffset: "end of sound" delay actual value (eg. 200 msec, value at event fire time was 187)
+ if (!self.didJustBeforeFinish) {
+ self.didJustBeforeFinish = true;
+ soundManager._writeDebug('SMSound._onjustbeforefinish()');
+ if (self.options.onjustbeforefinish) self.options.onjustbeforefinish.apply(self);;
+ }
+ }
+
+ this._onfinish = function() {
+ // sound has finished playing
+ sm._writeDebug('SMSound._onfinish(): "'+self.sID+'" finished playing');
+ self.playState = 0;
+ self.paused = false;
+ if (self.options.onfinish) self.options.onfinish.apply(self);
+ if (self.options.onbeforefinishcomplete) self.options.onbeforefinishcomplete.apply(self);
+ // reset some state items
+ self.setPosition(0);
+ self.didBeforeFinish = false;
+ self.didJustBeforeFinish = false;
+ }
+
+}
+
+var soundManager = new SoundManager();
+
+// attach onload handler
+if (window.addEventListener) {
+ window.addEventListener('load',soundManager.beginInit,false);
+ window.addEventListener('beforeunload',soundManager.destruct,false);
+} else if (window.attachEvent) {
+ window.attachEvent('onload',soundManager.beginInit);
+ window.attachEvent('beforeunload',soundManager.destruct);
+} else {
+ // no add/attachevent support - safe to assume no JS->Flash either.
+ soundManager.disable();
+} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/soundmanager2.swf b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/soundmanager2.swf
new file mode 100755
index 000000000..234a83343
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/soundmanager2.swf
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/audio_link.png
new file mode 100644
index 000000000..daa740c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/audio_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/audio_on.png
new file mode 100644
index 000000000..cd590aae9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/audio_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/audio_over.png
new file mode 100644
index 000000000..cf537a008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/audio_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/auto_link.png
new file mode 100644
index 000000000..1c2ca4817
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/auto_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/auto_on.png
new file mode 100644
index 000000000..4b0c923b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/auto_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/auto_over.png
new file mode 100644
index 000000000..dbea88975
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/auto_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/backgrnd.png
new file mode 100644
index 000000000..0e48413d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/backgrnd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/bluebg.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/bluebg.gif
new file mode 100644
index 000000000..909490511
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/bluebg.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/bluebottom.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/bluebottom.gif
new file mode 100644
index 000000000..938a0795c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/bluebottom.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/bluefooter.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/bluefooter.gif
new file mode 100644
index 000000000..6fe83f2c7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/bluefooter.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/delay_link.png
new file mode 100644
index 000000000..c4d99cd57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/delay_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/exit_link.png
new file mode 100644
index 000000000..1bfd38790
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/exit_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/exit_over.png
new file mode 100644
index 000000000..0fdd1c605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/exit_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/fade_link.png
new file mode 100644
index 000000000..482e4d53e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/fade_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/fade_on.png
new file mode 100644
index 000000000..e12561fb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/fade_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/fade_over.png
new file mode 100644
index 000000000..fb8943c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/fade_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/footer.jpg
new file mode 100644
index 000000000..49370dbba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/footer.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/framing.css
new file mode 100755
index 000000000..14d8509e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/framing.css
@@ -0,0 +1,23 @@
+/* The following styles size, place, and layer the slide components.
+ Edit these if you want to change the overall slide layout.
+ The commented lines can be uncommented (and modified, if necessary)
+ to help you with the rearrangement process. */
+
+/* target = 1024x768 */
+
+div#header, div#footer, .slide {width: 100%; top: 0; left: 0;}
+div#header {top: 0; height: 3em; z-index: 1;}
+div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;}
+.slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;}
+div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;}
+div#controls form {position: absolute; bottom: 0; right: 0; width: 100%;
+ margin: 0;}
+#currentSlide {position: absolute; width: 10%; left: 45%; bottom: 1em; z-index: 10;}
+html>body #currentSlide {position: fixed;}
+
+/*
+div#header {background: #FCC;}
+div#footer {background: #CCF;}
+div#controls {background: #BBD;}
+div#currentSlide {background: #FFC;}
+*/
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/header.png
new file mode 100644
index 000000000..929dabba1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/last_link.png
new file mode 100644
index 000000000..4f158d35d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/last_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/last_over.png
new file mode 100644
index 000000000..a7b629995
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/last_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/list_link.png
new file mode 100644
index 000000000..7e299bb50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/list_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/loop_link.png
new file mode 100644
index 000000000..41e12cb15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/loop_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/loop_on.png
new file mode 100644
index 000000000..2ffcacae1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/loop_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/loop_over.png
new file mode 100644
index 000000000..9fe420153
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/loop_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/next_link.png
new file mode 100644
index 000000000..2b9f44c4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/next_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/next_over.png
new file mode 100644
index 000000000..25788124d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/next_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/notes_link.png
new file mode 100644
index 000000000..bb4a8ae37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/notes_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/notes_over.png
new file mode 100644
index 000000000..c6bfe69fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/notes_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/opera.css
new file mode 100755
index 000000000..9e9d2a3c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/opera.css
@@ -0,0 +1,7 @@
+/* DO NOT CHANGE THESE unless you really want to break Opera Show */
+.slide {
+ visibility: visible !important;
+ position: static !important;
+ page-break-before: always;
+}
+#slide0 {page-break-before: avoid;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/outline.css
new file mode 100755
index 000000000..62db519ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/outline.css
@@ -0,0 +1,15 @@
+/* don't change this unless you want the layout stuff to show up in the outline view! */
+
+.layout div, #footer *, #controlForm * {display: none;}
+#footer, #controls, #controlForm, #navLinks, #toggle {
+ display: block; visibility: visible; margin: 0; padding: 0;}
+#toggle {float: right; padding: 0.5em;}
+html>body #toggle {position: fixed; top: 0; right: 0;}
+
+/* making the outline look pretty-ish */
+
+#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
+#slide0 h1 {padding-top: 1.5em;}
+.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em;
+ border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
+#toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pause_link.png
new file mode 100644
index 000000000..2561cb4a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pause_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pause_on.png
new file mode 100644
index 000000000..2fc9c4a4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pause_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pause_over.png
new file mode 100644
index 000000000..7a7c80ddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pause_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pretty.css
new file mode 100644
index 000000000..48b1657fd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pretty.css
@@ -0,0 +1,173 @@
+/* Blue Theme 2004 by Martin Hense ::: www.lounge7.de */
+
+/* Following are the presentation styles -- edit away!
+ Note that the 'body' font size may have to be changed if the resolution is
+ different than expected. */
+
+body {background: #000294 url(bluebottom.gif) right bottom no-repeat; color: #fff; font-size: 1.8em;}
+:link, :visited {text-decoration: none; color: #F8B73E;}
+h1, h2, h3, h4 {font-size: 100%; margin: 0; padding: 0; font-weight: inherit;}
+ul, pre {margin: 0; line-height: 1em;}
+html, body {margin: 0; padding: 0;}
+
+blockquote, q {font-style: italic;}
+blockquote {padding: 0 2em 0.5em; margin: 0 1.5em 0.5em; text-align: center; font-size: 1em;}
+blockquote p {margin: 0;}
+blockquote i {font-style: normal;}
+blockquote b {display: block; margin-top: 0.5em; font-weight: normal; font-size: smaller; font-style: normal;}
+blockquote b i {font-style: italic;}
+
+kbd {font-weight: bold; font-size: 1em;}
+sup {font-size: smaller; line-height: 1px;}
+
+code {padding: 2px 0.25em; font-weight: bold; color: #AAABF8;}
+code.bad, code del {color: red;}
+code.old {color: silver;}
+pre {padding: 0; margin: 0.25em 0 0.5em 0.5em; color: #533; font-size: 90%;}
+pre code {display: block;}
+ul {margin-left: 5%; margin-right: 7%; list-style: disc;}
+li {margin-top: 0.75em; margin-right: 0;}
+ul ul {line-height: 1;}
+ul ul li {margin: .2em; font-size: 85%; list-style: square;}
+img.leader {display: block; margin: 0 auto;}
+
+div#header, div#footer {background: #005; color: #9183BF;
+ font-family: Verdana, Helvetica, sans-serif;}
+div#header {background: #005 url(bodybg.gif) -16px 0 no-repeat;
+ line-height: 1px;}
+div#footer {font-size: 0.5em; font-weight: bold; padding: 1em 0; height: 36px; border-top: 1px solid #08093F; background: #000136 url(bluefooter.gif) top right no-repeat; }
+#footer h1, #footer h2 {display: block; padding: 0 1em;}
+#footer h2 {font-style: italic;}
+
+div.long {font-size: 0.75em;}
+.slide {
+ font-family: georgia, Times, 'Times New Roman', serif;
+ background: transparent url(bluebg.gif) repeat-x;
+}
+.slide h1 {position: absolute; left: 87px; z-index: 1;
+ white-space: nowrap;
+ text-transform: capitalize;
+ top: 1em; width: 80%;
+ margin: 0 auto; text-align: center; padding: 0;
+ font: 150%/1em georgia, Times, 'Times New Roman', serif;
+ color: #fff; background: transparent;
+ }
+.slide h3 {font-size: 130%;}
+h1 abbr {font-variant: small-caps;}
+
+#currentSlide {text-align: center; font-size: 0.5em; color: #9183BF; font-family: Verdana, Helvetica, sans-serif;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 1.33em; padding: 0;
+ white-space: normal;
+ background: transparent;
+margin: 0 auto; width: 75%; text-align: center;
+ font: 2.5em Georgia, Times, 'Times New Roman', serif; height: 281px;
+ color: #fff;}
+#slide0 h3 {font-size: 1.5em;}
+#slide0 h4 {font-size: 1em;}
+#slide0 h3, #slide0 h4, #slide0 p {margin: 0; text-align: center; color: #fff;}
+#slide0 p {margin-top: 0.7em;}
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.notes {display: none;}
+
+div#controls {position: absolute; left: 0; bottom: 0; width: 100%; text-align: center; font: bold 1em Verdana, Arial, Helvetica, sans-serif;}
+html>body div#controls {background: transparent; position: fixed; padding: 0; top: auto; text-align: center;}
+#controls #sheet {display: none;}
+#controls #controlForm {height: 32px; width: 100%; text-align: center; vertical-align: middle;}
+#controls #navLinks {border-top: 1px solid #999; overflow: hidden; padding: 0; margin: 0; height: 32px; width: 100%; background-color: #808080; text-align: center; vertical-align: middle; white-space: nowrap;}
+#controls #navLinks ul {margin: 0 auto; padding: 0; height: 32px; width: 500px; white-space: nowrap; text-align: center;}
+#controls #navLinks ul li {list-style: none; display: inline; margin: 0; padding: 0; float: left; height: 32px; width: 32px; text-align: center; background-color: transparent;}
+#controls #navLinks ul li.vr {list-style: none; display: inline; margin: 0px 2px; padding: 0; float: left; height: 32px; width: 1px; text-align: center; background-color: #606060;}
+#controls #navLinks ul li a {margin: 0; padding: 0; float: left; height: 32px; width: 32px; background-color: transparent;}
+
+#controls #navLinks ul li#exit {background: url(exit_link.png) no-repeat top left;}
+#controls #navLinks ul li#exit a:hover {background: url(exit_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#toggle {background: url(toggle_link.png) no-repeat top left;}
+#controls #navLinks ul li#toggle a:hover {background: url(toggle_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#show-notes {background: url(notes_link.png) no-repeat top left;}
+#controls #navLinks ul li#show-notes a:hover {background: url(notes_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#zero {background: url(zero_link.png) no-repeat top left;}
+#controls #navLinks ul li#zero a:hover {background: url(zero_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#prev {background: url(prev_link.png) no-repeat top left;}
+#controls #navLinks ul li#prev a:hover {background: url(prev_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#next {background: url(next_link.png) no-repeat top left;}
+#controls #navLinks ul li#next a:hover {background: url(next_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#last {background: url(last_link.png) no-repeat top left;}
+#controls #navLinks ul li#last a:hover {background: url(last_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#lst {background: url(list_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#fade a.isoff {background: url(fade_link.png) no-repeat top left;}
+#controls #navLinks ul li#fade a.ison {background: url(fade_on.png) no-repeat top right;}
+#controls #navLinks ul li#fade a:hover {background: url(fade_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#audio {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.isoff {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.ison {background: url(audio_on.png) no-repeat top right;}
+#controls #navLinks ul li#audio a:hover {background: url(audio_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#vol {background: url(volume_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#auto a.isoff {background: url(auto_link.png) no-repeat top left;}
+#controls #navLinks ul li#auto a.ison {background: url(auto_on.png) no-repeat top right;}
+#controls #navLinks ul li#auto a:hover {background: url(auto_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#pause a.isoff {background: url(pause_link.png) no-repeat top left;}
+#controls #navLinks ul li#pause a.ison {background: url(pause_on.png) no-repeat top right;}
+#controls #navLinks ul li#pause a:hover {background: url(pause_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#loop a.isoff {background: url(loop_link.png) no-repeat top left;}
+#controls #navLinks ul li#loop a.ison {background: url(loop_on.png) no-repeat top right;}
+#controls #navLinks ul li#loop a:hover {background: url(loop_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#del {background: url(delay_link.png) no-repeat top left;}
+
+#jumplist, #volumelist, #delaylist {padding: 0; margin: 0; width: 32px; height: 32px; cursor: n-resize;}
+
+#guru {position: absolute; visibility: visible; left: 0px; top: 0px; padding: 4px; width: 99%; height: auto; text-align: center; background-color: black; z-index: 10;}
+#guru div {border: solid 3px red; padding: 4px; font-family: monospace; font-size: 60%; width: auto; height: auto; color: red; text-align: center;}
+
+/*
+#currentSlide {white-space: nowrap; text-align: center; margin-bottom: -0.5em; font-size: 0.5em; background-color: transparent; color: #999;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 0; padding: 0; font: bold 2em Verdana, Arial, Helvetica, sans-serif; font-variant: small-caps; text-shadow: 0.1em 0.1em 0.1em #666; white-space: normal; color: #222; background-color: transparent;}
+#slide0 h2 {font: bold italic 1em Arial, Helvetica, sans-serif; margin: 0.25em;}
+#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+*/
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.external {border-bottom: 1px dotted gray;}
+html>body .external {border-bottom: none;}
+.external:after {content: " \274F"; font-size: smaller; color: #999;}
+
+.incremental, .incremental *, .incremental *:after {color: #ccc; visibility: visible;}
+img.incremental, canvas.incremental {visibility: hidden;}
+.slide .current {color: #B02;}
+
+/* diagnostics
+li:after {content: " [" attr(class) "]"; color: #F88;}
+*/
+
+table.piechart, table.barchart, table.linechart { border-spacing: 0.3em 0.15em; }
+table.piechart tr th, table.barchart tr th, table.linechart tr th { white-space: nowrap; }
+table.piechart tr td, table.barchart tr td, table.linechart tr td { vertical-align: top; white-space: nowrap; }
+table.piechart tr td.col, table.barchart tr td.col, table.linechart tr td.col { border-bottom: 1px solid #555; border-right: 1px solid #555; }
+table.fs90 tr td, table.fs90 tr th, div.fs90, pre.fs90, p.fs90 ,ul.fs90 {font-size: 0.9em; }
+table.fs75 tr td, table.fs75 tr th, div.fs75, pre.fs75, p.fs75 ,ul.fs75 {font-size: 0.75em; }
+table.fs66 tr td, table.fs66 tr th, div.fs66, pre.fs66, p.fs66 ,ul.fs66 {font-size: 0.66em; }
+table.fs50 tr td, table.fs50 tr th, div.fs50, pre.fs50, p.fs50 ,ul.fs50 {font-size: 0.5em; }
+
+#soundmanager-debug {position:fixed; top:0px; right:0px; width:30em; height:20em; overflow:auto; border:1px solid red; padding:1em; margin:2em; font-family:"sans serif"; font-size: 12px;color: black; background-color:#f6f6f6; z-index: 100;}
+#soundmanager-debug code {font-size: 11px;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/prev_link.png
new file mode 100644
index 000000000..c31d21350
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/prev_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/prev_over.png
new file mode 100644
index 000000000..6fef4fa52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/prev_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/print.css
new file mode 100755
index 000000000..220083260
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/print.css
@@ -0,0 +1 @@
+/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul { page-break-inside: avoid; visibility: visible !important; } h1 { page-break-after: avoid; } html { width:100%; overflow:hidden; } body { font-size: 12pt; background: white; width:100%; } * { color: black; } #slide0 h1 { font-size: 200%; border: none; margin: 0.5em 0 0.25em; } #slide0 h3 { margin: 0; padding: 0; } #slide0 h4 { margin: 0 0 0.5em; padding: 0; } #slide0 { margin-bottom: 3em; } h1 { border-top: 2pt solid gray; border-bottom: 1px dotted silver; padding:0.2em 0 0.3em 0; } .extra { background: transparent !important; } div.extra, pre.extra, .example { font-size: 10pt; color: #333; } ul.extra a { font-weight: bold; } p.example { display: none; } #header { display: none; } #footer h1 { margin: 0; border-bottom: 1px solid; color: gray; font-style: italic; } #footer h2, #controls { display: none; } div.handout { display:block; border-top: 2px dotted #ccc; background:url(pics/back-handout-print.png) top right no-repeat #fff; min-height:6em; padding-right:6em; margin-bottom:1em; } .slide { display:block; background:url(pics/back-slide-print.png) top right no-repeat #fff; min-height:6em; margin-bottom:1em; } table { display:block; /* display:none; */ font-size:90%; overflow:hidden; margin-top:1em; margin-bottom:1em; } pre , code { margin:0; font-size:1pt; overflow:auto; } img { max-width:100% !important; } /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .layout, .layout * { display: none !important; } \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/s5-core.css
new file mode 100755
index 000000000..86444e041
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/s5-core.css
@@ -0,0 +1,9 @@
+/* Do not edit or override these styles! The system will likely break if you do. */
+
+div#header, div#footer, div#controls, .slide {position: absolute;}
+html>body div#header, html>body div#footer,
+ html>body div#controls, html>body .slide {position: fixed;}
+.handout {display: none;}
+.layout {display: block;}
+.slide, .hideme, .incremental {visibility: hidden;}
+#slide0 {visibility: visible;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/slides.css
new file mode 100755
index 000000000..0786d7dbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/slides.css
@@ -0,0 +1,3 @@
+@import url(s5-core.css); /* required to make the slide show run at all */
+@import url(framing.css); /* sets basic placement and size of slide components */
+@import url(pretty.css); /* stuff that makes the slides look better than blah */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/slides.js
new file mode 100644
index 000000000..510a04c0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/slides.js
@@ -0,0 +1,2812 @@
+// S5 1.3beta7 (18-Apr-2007) advanced version by C. Effenberger
+// Please see http://s5.netzgesta.de/ for more information
+// based on S5 v1.2a1 slides.js -- released into the Public Domain
+// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
+// about all the wonderful and talented contributors to this code!
+// audio extension: soundmanager2 is NOT Public Domain
+// Please see http://www.schillmania.com/projects/soundmanager2/ for information
+
+var undef;
+var slideCSS = '';
+var snum = 0;
+var smax = 1;
+var incpos = 0;
+var number = undef;
+var firstTime = 1;
+var s5mode = true;
+var helpmode = false;
+var defaultView = 'slideshow'; //outline
+var controlVis = 'visible';
+var s5Path = 'lib/plugins/s5reloaded/';
+
+// scalable images extension
+var empx = 0;
+var images = new Array();
+var canvas = new Array();
+var medias = new Array();
+var piecharts = new Array();
+var barcharts = new Array();
+var linecharts = new Array();
+// scalable images extension
+
+// transition extension
+var tranSitions = false;
+var fadeModus = false;
+var fadeDuration = 500;
+var incrDuration = 250;
+var opac = 1;
+var cid = '';
+var nid = '';
+var tid = '';
+var jl = '';
+// transition extension
+
+// autoplay extension
+var autoMatic = false;
+var playLoop = false;
+var playPause = false;
+var autoRun = false;
+var playDelay = 5000;
+var remainDer = 0;
+var incrDelay = 0;
+// autoplay extension
+
+// audio extension
+var sound = new Array();
+var audioSupport = false;
+var audioVolume = 100;
+var audioError = false;
+var swfUnloaded = true;
+var bgSoundItem = 9999;
+var curSoundID = -1;
+// audio extension
+
+// panel extension
+var imgWidth = 32;
+var imgHeight = 32;
+// panel extension
+
+// canvas chart extension
+var canvasSupport = false;
+var ChartData = new Array();
+var colorSlice = new Array();
+var font = document.createElement("img");
+font.setAttribute("src", s5Path+"ui/graphic_support/numeric.png");
+signs = {
+ '0': {sx: 0, sy: 0, sw: 48, sh: 64},
+ '1': {sx: 48, sy: 0, sw: 48, sh: 64},
+ '2': {sx: 96, sy: 0, sw: 48, sh: 64},
+ '3': {sx: 144, sy: 0, sw: 48, sh: 64},
+ '4': {sx: 192, sy: 0, sw: 48, sh: 64},
+ '5': {sx: 240, sy: 0, sw: 48, sh: 64},
+ '6': {sx: 288, sy: 0, sw: 48, sh: 64},
+ '7': {sx: 336, sy: 0, sw: 48, sh: 64},
+ '8': {sx: 384, sy: 0, sw: 48, sh: 64},
+ '9': {sx: 432, sy: 0, sw: 48, sh: 64},
+ '%': {sx: 480, sy: 0, sw: 48, sh: 64},
+ '.': {sx: 528, sy: 0, sw: 24, sh: 64}
+};
+var colorNames= new Array();
+colorNames["black"]="#000000"; colorNames["maroon"]="#800000";
+colorNames["green"]="#008000"; colorNames["olive"]="#808000";
+colorNames["navy"]="#000080"; colorNames["purple"]="#800080";
+colorNames["teal"]="#008080"; colorNames["gray"]="#808080";
+colorNames["silver"]="#C0C0C0"; colorNames["red"]="#FF0000";
+colorNames["lime"]="#00FF00"; colorNames["yellow"]="#FFFF00";
+colorNames["blue"]="#0000FF"; colorNames["fuchsia"]="#FF00FF";
+colorNames["aqua"]="#00FFFF"; colorNames["white"]="#FFFFFF";
+colorNames["aliceblue"]="#F0F8FF"; colorNames["antiquewhite"]="#FAEBD7";
+colorNames["aquamarine"]="#7FFFD4"; colorNames["azure"]="#F0FFFF";
+colorNames["beige"]="#F5F5DC"; colorNames["blueviolet"]="#8A2BE2";
+colorNames["brown"]="#A52A2A"; colorNames["burlywood"]="#DEB887";
+colorNames["cadetblue"]="#5F9EA0"; colorNames["chartreuse"]="#7FFF00";
+colorNames["chocolate"]="#D2691E"; colorNames["coral"]="#FF7F50";
+colorNames["cornflowerblue"]="#6495ED"; colorNames["cornsilk"]="#FFF8DC";
+colorNames["crimson"]="#DC143C"; colorNames["darkblue"]="#00008B";
+colorNames["darkcyan"]="#008B8B"; colorNames["darkgoldenrod"]="#B8860B";
+colorNames["darkgray"]="#A9A9A9"; colorNames["darkgreen"]="#006400";
+colorNames["darkkhaki"]="#BDB76B"; colorNames["darkmagenta"]="#8B008B";
+colorNames["darkolivegreen"]="#556B2F"; colorNames["darkorange"]="#FF8C00";
+colorNames["darkorchid"]="#9932CC"; colorNames["darkred"]="#8B0000";
+colorNames["darksalmon"]="#E9967A"; colorNames["darkseagreen"]="#8FBC8F";
+colorNames["darkslateblue"]="#483D8B"; colorNames["darkslategray"]="#2F4F4F";
+colorNames["darkturquoise"]="#00CED1"; colorNames["darkviolet"]="#9400D3";
+colorNames["deeppink"]="#FF1493"; colorNames["deepskyblue"]="#00BFFF";
+colorNames["dimgray"]="#696969"; colorNames["dodgerblue"]="#1E90FF";
+colorNames["firebrick"]="#B22222"; colorNames["floralwhite"]="#FFFAF0";
+colorNames["forestgreen"]="#228B22"; colorNames["gainsboro"]="#DCDCDC";
+colorNames["ghostwhite"]="#F8F8FF"; colorNames["gold"]="#FFD700";
+colorNames["goldenrod"]="#DAA520"; colorNames["greenyellow"]="#ADFF2F";
+colorNames["honeydew"]="#F0FFF0"; colorNames["hotpink"]="#FF69B4";
+colorNames["indianred"]="#CD5C5C"; colorNames["indigo"]="#4B0082";
+colorNames["ivory"]="#FFFFF0"; colorNames["khaki"]="#F0E68C";
+colorNames["lavender"]="#E6E6FA"; colorNames["lavenderblush"]="#FFF0F5";
+colorNames["lawngreen"]="#7CFC00"; colorNames["lemonchiffon"]="#FFFACD";
+colorNames["lightblue"]="#ADD8E6"; colorNames["lightcoral"]="#F08080";
+colorNames["lightcyan"]="#E0FFFF"; colorNames["lightgoldenrodyellow"]="#FAFAD2";
+colorNames["lightgreen"]="#90EE90"; colorNames["lightgrey"]="#D3D3D3";
+colorNames["lightpink"]="#FFB6C1"; colorNames["lightsalmon"]="#FFA07A";
+colorNames["lightseagreen"]="#20B2AA"; colorNames["lightskyblue"]="#87CEFA";
+colorNames["lightslategray"]="#778899"; colorNames["lightsteelblue"]="#B0C4DE";
+colorNames["lightyellow"]="#FFFFE0"; colorNames["limegreen"]="#32CD32";
+colorNames["linen"]="#FAF0E6"; colorNames["mediumaquamarine"]="#66CDAA";
+colorNames["mediumblue"]="#0000CD"; colorNames["mediumorchid"]="#BA55D3";
+colorNames["ediumpurple"]="#9370D"; colorNames["mediumseagreen"]="#3CB371";
+colorNames["mediumslateblue"]="#7B68EE"; colorNames["mediumspringgreen"]="#00FA9A";
+colorNames["mediumturquoise"]="#48D1CC"; colorNames["mediumvioletred"]="#C71585";
+colorNames["midnightblue"]="#191970"; colorNames["mintcream"]="#F5FFFA";
+colorNames["mistyrose"]="#FFE4E1"; colorNames["moccasin"]="#FFE4B5";
+colorNames["navajowhite"]="#FFDEAD"; colorNames["oldlace"]="#FDF5E6";
+colorNames["olivedrab"]="#6B8E23"; colorNames["orange"]="#FFA500";
+colorNames["orangered"]="#FF4500"; colorNames["orchid"]="#DA70D6";
+colorNames["palegoldenrod"]="#EEE8AA"; colorNames["palegreen"]="#98FB98";
+colorNames["paleturquoise"]="#AFEEEE"; colorNames["palevioletred"]="#DB7093";
+colorNames["papayawhip"]="#FFEFD5"; colorNames["peachpuff"]="#FFDAB9";
+colorNames["peru"]="#CD853F"; colorNames["pink"]="#FFC0CB";
+colorNames["plum"]="#DDA0DD"; colorNames["powderblue"]="#B0E0E6";
+colorNames["rosybrown"]="#BC8F8F"; colorNames["royalblue"]="#4169E1";
+colorNames["saddlebrown"]="#8B4513"; colorNames["salmon"]="#FA8072";
+colorNames["sandybrown"]="#F4A460"; colorNames["seagreen"]="#2E8B57";
+colorNames["seashell"]="#FFF5EE"; colorNames["sienna"]="#A0522D";
+colorNames["skyblue"]="#87CEEB"; colorNames["slateblue"]="#6A5ACD";
+colorNames["slategray"]="#708090"; colorNames["snow"]="#FFFAFA";
+colorNames["springgreen"]="#00FF7F"; colorNames["steelblue"]="#4682B4";
+colorNames["tan"]="#D2B48C"; colorNames["thistle"]="#D8BFD8";
+colorNames["tomato"]="#FF6347"; colorNames["turquoise"]="#40E0D0";
+colorNames["violet"]="#EE82EE"; colorNames["wheat"]="#F5DEB3";
+colorNames["whitesmoke"]="#F5F5F5"; colorNames["yellowgreen"]="#9ACD32";
+var canvas_bgcolor = "";
+var canvas_width = 200;
+var canvas_height = 200;
+var canvas_noshade = 0;
+var canvas_nofill = 0;
+var canvas_noshadow = 0;
+var canvas_htmltext = 0;
+var canvas_imgtext = 0;
+var canvas_notext = 0;
+// canvas chart extension
+
+var s5NotesWindow;
+var s5NotesWindowLoaded = false;
+var previousSlide = 0;
+var presentationStart = new Date();
+var slideStart = new Date();
+
+var countdown = {
+ timer: 0,
+ state: 'pause',
+ start: new Date(),
+ end: 0,
+ remaining: 0
+};
+
+var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
+if(isIE) var notIE7 = parseInt(navigator.appVersion) < 7 ? 1 : 0;
+var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
+var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
+var isS2 = navigator.userAgent.indexOf('Safari') >= 2 ? 1 : 0;
+
+function hasClass(object, className) {
+ if (!object.className) return false;
+ return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
+}
+
+function hasValue(object, value) {
+ if (!object) return false;
+ return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
+}
+
+function removeClass(object,className) {
+ if (!object || !hasClass(object,className)) return;
+ object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
+}
+
+function addClass(object,className) {
+ if (!object || hasClass(object, className)) return;
+ if (object.className) {
+ object.className += ' '+className;
+ } else {
+ object.className = className;
+ }
+}
+
+function changeClass(object,className) {
+ if (!object) return;
+ object.firstChild.className = className;
+}
+
+function GetElementsWithClassName(elementName,className) {
+ var allElements = document.getElementsByTagName(elementName);
+ var elemColl = new Array();
+ for (var i = 0; i< allElements.length; i++) {
+ if (hasClass(allElements[i], className)) {
+ elemColl[elemColl.length] = allElements[i];
+ }
+ }
+ return elemColl;
+}
+
+function isParentOrSelf(element, id) {
+ if (element == null || element.nodeName=='BODY') return false;
+ else if (element.id == id) return true;
+ else return isParentOrSelf(element.parentNode, id);
+}
+
+function nodeValue(node) {
+ var result = "";
+ if (node.nodeType == 1) {
+ var children = node.childNodes;
+ for (var i = 0; i < children.length; ++i) {
+ result += nodeValue(children[i]);
+ }
+ }
+ else if (node.nodeType == 3) {
+ result = node.nodeValue;
+ }
+ return(result);
+}
+
+function slideLabel() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var list = document.getElementById('jumplist');
+ smax = slideColl.length;
+ for (var n = 0; n < smax; n++) {
+ var obj = slideColl[n];
+ var did = 'slide' + n.toString();
+ obj.setAttribute('id',did);
+ var otext = '';
+ var menu = obj.firstChild;
+ if (!menu) continue; // to cope with empty slides
+ while (menu && menu.nodeType == 3) {
+ menu = menu.nextSibling;
+ }
+ if (!menu) continue; // to cope with slides with only text nodes
+ var menunodes = menu.childNodes;
+ for (var o = 0; o < menunodes.length; o++) {
+ otext += nodeValue(menunodes[o]);
+ }
+ list.options[list.length] = new Option(n + ' : ' + otext, n);
+ }
+}
+
+function currentSlide() {
+ var cs, at, fd, ss;
+ if (document.getElementById) {
+ cs = document.getElementById('currentSlide');
+ } else {
+ cs = document.currentSlide;
+ }
+ fd = fadeModus?"F":"&ndash;";
+ ss = audioSupport?"S":"&ndash;";
+ at = (autoMatic?(playPause?"||":(playLoop?"&gt;0":"&gt;|")):"&ndash;&ndash;");
+ cs.innerHTML = '<div id="plink" nowrap="nowrap">' +
+ '<span id="csFade">[' + fd + ss + ']<\/span>&nbsp;' +
+ '<span id="csHere"><strong>' + snum + '<\/strong><\/span>' +
+ '<span id="csSep">\/<\/span>' +
+ '<span id="csTotal">' + (smax-1) + '<\/span>&nbsp;' +
+ '<span id="csAuto">[' + at + ']<\/span>' +
+ '<\/div>';
+
+ if (snum == 0) {
+ cs.style.visibility = 'hidden';
+ } else {
+ cs.style.visibility = 'visible';
+ }
+}
+
+function go(step) {
+ if (document.getElementById('slideProj').disabled || step == 0) return;
+ jl = document.getElementById('jumplist');
+ cid = 'slide' + snum;
+ var ce = document.getElementById(cid);
+ if (incrementals[snum].length > 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ removeClass(incrementals[snum][i], 'current');
+ removeClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ if (step != 'j') {
+ snum += step;
+ lmax = smax - 1;
+ if (snum > lmax) snum = lmax;
+ if (snum < 0) snum = 0;
+ }else {
+ snum = parseInt(jl.value);
+ }
+ nid = 'slide' + snum;
+ var ne = document.getElementById(nid);
+ if (!ne) {
+ ne = document.getElementById('slide0');
+ nid = 'slide0';
+ snum = 0;
+ }
+ if (step < 0) {
+ incpos = incrementals[snum].length
+ }else {
+ incpos = 0;
+ }
+ if (incrementals[snum].length > 0 && incpos == 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ if (hasClass(incrementals[snum][i], 'current')) {
+ incpos = i + 1;
+ }else {
+ addClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ }
+ if (incrementals[snum].length > 0 && incpos > 0) {
+ addClass(incrementals[snum][incpos - 1], 'current');
+ }
+ var guru = document.getElementById('guru');
+ if(guru && snum==0) {
+ guru.style.visibility = 'visible';
+ }else if(guru && snum>0) {
+ guru.style.visibility = 'hidden';
+ }
+ if(tranSitions && s5mode && fadeModus) {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {fadeoutSound(curSoundID,true); } // audio support
+ }
+ changeOpac(0,nid);
+ changeOpac(100,cid);
+ ce.style.visibility = 'visible';
+ shiftOpacity(cid,fadeDuration);
+ window.setTimeout("changeSlides()",fadeDuration);
+ }else {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {stopSound(curSoundID); } // audio support
+ }
+ ce.style.visibility = 'hidden';
+ if (isOp) location.hash = nid;
+ ne.style.visibility = 'visible';
+ finishSlides();
+ }
+}
+
+function changeSlides() {
+ if(nid != cid) changeOpac(100,cid);
+ document.getElementById(cid).style.visibility = 'hidden';
+ document.getElementById(nid).style.visibility = 'visible';
+ if (isOp) location.hash = nid;
+ shiftOpacity(nid,fadeDuration);
+ window.setTimeout("finishSlides()",fadeDuration);
+}
+
+function finishSlides() {
+ jl.selectedIndex = snum;
+ currentSlide();
+ loadNote();
+ permaLink();
+ number = undef;
+ if(sound[getSoundID(nid)]) {
+ playSound(nid); // audio support
+ }else if(sound[bgSoundItem] && curSoundID != bgSoundItem) {
+ playSound(bgSoundItem); // audio support
+ }
+}
+
+function goTo(target) {
+ if (target >= smax || target == snum) return;
+ go(target - snum);
+}
+
+function subgo(step) {
+ if (step > 0) {
+ removeClass(incrementals[snum][incpos - 1],'current');
+ removeClass(incrementals[snum][incpos], 'incremental');
+ if(tranSitions && s5mode && fadeModus) {
+ if(!incrementals[snum][incpos].id) {
+ var tmp = new Date(); tid = "inc" + String(tmp.getTime());
+ incrementals[snum][incpos].id = tid;
+ }else {
+ tid = incrementals[snum][incpos].id;
+ }
+ if(typeof(incrementals[snum][incpos].src) != "undefined" || incrementals[snum][incpos].getContext) {
+ changeOpac(0,tid);
+ addClass(incrementals[snum][incpos],'current');
+ shiftOpacity(tid,incrDuration);
+ setTimeout("nextInc()",incrDuration);
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ } else {
+ incpos--;
+ removeClass(incrementals[snum][incpos],'current');
+ addClass(incrementals[snum][incpos], 'incremental');
+ addClass(incrementals[snum][incpos - 1],'current');
+ loadNote();
+ }
+}
+
+function nextInc() {
+ incpos++;
+ loadNote();
+}
+
+function toggle() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ var guru = document.getElementById('guru');
+ if (!slides.disabled) {
+ stopPlay();
+ if(audioSupport && !swfUnloaded) stopAllSounds();
+ slides.disabled = true;
+ outline.disabled = false;
+ s5mode = false;
+ fontSize(1,'em');
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'visible';
+ }
+ if(guru) guru.style.visibility = 'hidden';
+ } else {
+ slides.disabled = false;
+ outline.disabled = true;
+ s5mode = true;
+ fontScale();
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'hidden';
+ }
+ slideColl[snum].style.visibility = 'visible';
+ if(guru && snum==0) guru.style.visibility = 'visible';
+ }
+}
+
+function showHide(action) {
+ var obj = GetElementsWithClassName('*','hideme')[0];
+ switch (action) {
+ case 's':
+ obj.style.visibility = 'visible';
+ break;
+ case 'h':
+ obj.style.visibility = 'hidden';
+ break;
+ case 'k':
+ if (obj.style.visibility != 'visible') {
+ obj.style.visibility = 'visible';
+ } else {
+ obj.style.visibility = 'hidden';
+ }
+ break;
+ }
+}
+
+function keys(key) {
+ if (!key) {
+ key = event;
+ key.which = key.keyCode;
+ }
+ if (helpmode) {
+ dumpHelpReq();
+ return;
+ }
+ if (key.which == 84 && !isOp) {
+ toggle();
+ return;
+ }
+ if (s5mode) {
+ if (autoMatic) {
+ switch (key.which) {
+ case 70: // f/ading on/off
+ switchFade();
+ break;
+ case 83: // s/ound on/off
+ toggleSounds();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 65: // a/utoplay on/off
+ stopPlay();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 80: // p/ause
+ case 32: // spacebar
+ pausePlay();
+ break;
+ }
+ }else {
+ switch (key.which) {
+ case 8: // backspace = HELP
+ createHelpReq();
+ break;
+ case 10: // return
+ case 13: // enter
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ if(number != undef) {
+ goTo(number);
+ break;
+ }
+ case 32: // spacebar
+ case 34: // page down
+ case 39: // rightkey
+ case 40: // downkey
+ if(number != undef) {
+ go(number);
+ } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ break;
+ case 33: // page up
+ case 37: // leftkey
+ case 38: // upkey
+ if(number != undef) {
+ go(-1 * number);
+ } else if (!incrementals[snum] || incpos <= 0) {
+ go(-1);
+ } else {
+ subgo(-1);
+ }
+ break;
+ case 65: // a/utoplay
+ startPlay();
+ break;
+ case 72: // h
+ case 36: // home
+ goTo(0);
+ break;
+ case 69: // e
+ case 35: // end
+ goTo(smax-1);
+ break;
+ case 70: // f/ade transitions on/off
+ switchFade();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 83: // s/ound support on/off
+ toggleSounds();
+ break;
+ case 27: // escape
+ case 81: // q
+ if(!isOp) byby();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 78: // n
+ createNotesWindow();
+ break;
+ }
+ if (key.which < 48 || key.which > 57) {
+ number = undef;
+ } else {
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
+ }
+ }
+ }
+ return false;
+}
+
+function clicker(e) {
+ number = undef;
+ var target;
+ if (window.event) {
+ target = window.event.srcElement;
+ e = window.event;
+ } else {
+ target = e.target;
+ }
+ if (target.href != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
+ if (!helpmode) {
+ if (!e.which || e.which == 1) {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ }
+ } else {
+ dumpHelpReq();
+ }
+}
+
+function findSlide(hash) {
+ var target = null;
+ var slides = GetElementsWithClassName('*','slide');
+ for (var i = 0; i < slides.length; i++) {
+ var targetSlide = slides[i];
+ if ( (targetSlide.name && targetSlide.name == hash)
+ || (targetSlide.id && targetSlide.id == hash) ) {
+ target = targetSlide;
+ break;
+ }
+ }
+ while(target != null && target.nodeName != 'BODY') {
+ if (hasClass(target, 'slide')) {
+ return parseInt(target.id.slice(5));
+ }
+ target = target.parentNode;
+ }
+ return null;
+}
+
+function slideJump() {
+ if (window.location.hash == null) return;
+ var sregex = /^#slide(\d+)$/;
+ var matches = sregex.exec(window.location.hash);
+ var dest = null;
+ if (matches != null) {
+ dest = parseInt(matches[1]);
+ } else {
+ dest = findSlide(window.location.hash.slice(1));
+ }
+ if (dest != null)
+ go(dest - snum);
+}
+
+function fixLinks() {
+ var thisUri = window.location.href;
+ thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
+ var aelements = document.getElementsByTagName('A');
+ for (var i = 0; i < aelements.length; i++) {
+ var a = aelements[i].href;
+ var slideID = a.match('\#slide[0-9]{1,2}');
+ if ((slideID) && (slideID[0].slice(0,1) == '#')) {
+ var dest = findSlide(slideID[0].slice(1));
+ if (dest != null) {
+ if (aelements[i].addEventListener) {
+ aelements[i].addEventListener("click", new Function("e",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "if (e.preventDefault) e.preventDefault();"), true);
+ } else if (aelements[i].attachEvent) {
+ aelements[i].attachEvent("onclick", new Function("",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "event.returnValue = false;"));
+ }
+ }
+ }
+ }
+}
+
+function externalLinks() {
+ if (!document.getElementsByTagName) return;
+ var anchors = document.getElementsByTagName('a');
+ for (var i=0; i<anchors.length; i++) {
+ var anchor = anchors[i];
+ if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
+ anchor.target = '_blank';
+ addClass(anchor,'external');
+ }
+ }
+}
+
+function permaLink() {
+ document.getElementById('plink').href = window.location.pathname + '#slide' + snum;
+}
+
+function createControls() {
+ var controlsDiv = document.getElementById("controls");
+ if (!controlsDiv) return;
+ var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
+ var hideDiv, hideList = '';
+ if (controlVis == 'hidden') {
+ hideDiv = hider;
+ } else {
+ hideList = hider;
+ }
+ if(isOp) {
+ var str = '';
+ }else {
+ var str = '<a accesskey="t" id="sheet" title="toggle CSS" href="javascript:toggle();">&plusmn;<\/a>';
+ }
+ if(isIE) {
+ var tmp = "move around&xA0;until the color&xA0;change to red!";
+ }else if(isS2) {
+ var tmp = "move around\r\nuntil the color\r\nchange to red!";
+ }else {
+ var tmp = "move around until color change to red!";
+ }
+ if(isIE) {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] for keyboard help!"><ul>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst" style="vertical-align: middle; width: 160px;"><select style="cursor: auto; width: 160px; height: auto;" id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del" style="vertical-align: middle; width: 52px;"><select style="cursor: auto; width: 52px; height: auto;" id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul><\/div><\/form>';
+ }else {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] or double click this area for keyboard help!" ondblclick="createHelpReq();"><ul>' +
+ '<li id="exit"><a href="javascript:byby();" accesskey="q" title="exit Show"><\/a><\/li>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li class="vr"><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst"><a id="list" style="cursor:wait;" title="' + tmp + '"><\/a><select id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="fadeLinks" class="vr"><\/li>' +
+ '<li id="fade"><a class="isoff" href="javascript:switchFade();" accesskey="f" title="Transions"><\/a><\/li>' +
+ '<li id="audioLinks" class="vr"><\/li>' +
+ '<li id="audio"><a class="isoff" href="javascript:toggleSounds();" accesskey="s" title="Sounds" ><\/a><\/li>' +
+ '<li id="vol"><a id="volume" style="cursor:wait;" title="' + tmp + '"><\/a><select id="volumelist" title="select Volume" onchange="setVolume();"><option value="100">100<\/option><option value="90">90<\/option><option value="80">80<\/option><option value="70">70<\/option><option value="60">60<\/option><option value="50">50<\/option><option value="40">40<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="10">10<\/option><option value="0">0<\/option><\/select><\/li>' +
+ '<li id="autoLinks" class="vr"><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del"><a id="delay" style="cursor:wait;" title="' + tmp + '"><\/a><select id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul>' +
+ '<a href="http://s5.netzgesta.de" target="_blank" title="S5 Reloaded"><img style="position: absolute; right: 0; bottom: 0;" src="data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAYAAAASYli2AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAYpSURBVHjaYvz//z8DOYCRkZEZRAEx0Ij/f2HiAAHEgqYIpACkkB1J7g8Q/wLRIJ1QNSB5fiDmAOLvQKHPQPoHSB4ggFiQDGMCUnxALAPECkAsBLIdiD8A8SMgfghU8wlqkTgQK1ZVVWldv3792fr16y8D+c9AhgMEECPIy1DDRIDYAojdzMzMWNXV1UG2/v/y5Qvzw4cPP587d24/kH8Gar/uwoULQ+/cufNFXFyciZmZ+UVmZuZKoFmvAQII5kJOIDbi4uKK2Llz53EbG5vP6GGWn5+vMWnSpJtA5jcg5v327Rtnc3PzfSD79+rVq2WBNBtIHUAAwQzkAWKzBQsWnIUZFhISovXmzZsfkpKSDD09PY8kJCR+QtWCguGvrKwsz7Rp07Q4ODh+srCwgILiH0gSIIBgBrICsUBoaCgorBiANgqvXbtWDMg8AcQf9+7d+x0o9xbI/gJV/3fVqlUvmJiY/gIdcaWhoYETahEDQADBDPwNxO9h3gNpBiq6f/HiRbWjR4+yvnr16grQNbeh6kCWsxkYGIhClT8yNDQUgyYhBoAAYoIKfgXi06mpqUowQ+vr6x+uW7fu0suXL8+uWbOGS0BAwB7kC6jXvqmoqLDIyclxzZo1S4udnR2WtBgAAggWyyCXSgOxZUxMjGpWVtY7S0vLr8iRsnnzZl4/P7/DQCYoYtSA2DApKUkVGNNPDh06dBrIvwU06xNAAMEM5AIKqAOxCjQsmHl5eXWdnJx4N2zYcB4prd4CUpfwJRuAAGJCimULoGYpbm5uZ5DBnz9/5tq4caPWkSNHeJEc+g0aTFzfv3/nACabjzk5OW8FBQVloLmHASCAYJECUiTg7+//HJiQTzY2NsrfvXv3n7m5+T5YMgJGEkjDS2gY/pKRkeHt7Ow0Bsb0v9+/fz+HxTJAAMG8DHKFLTC9aRUXF79BT9Qgw4CWHAAy70FdYgjEDgkJCTpWVlYMQBfeAaaMPqBZbwECCGYgMzQGQSleCehS0X///jEDvf9lxYoVoOTyAIjfANX+BqrlBrL1gLFf09vb+0FaWvoHMBctA6USUKQABBAjrPiCliKg7AOKIG5ougLlju9Ipc1foDJWqMWGhYWFtsBg4RISEnrg5uY2BWQgQACxIBkGMkQKijmRfPwXWuI8ASp7DQ1vEP4DDO8PwBzzDJheT0CLPQaAAEJOh0o8zAzeihwMiv+gGZ0B4sz/bIwM797/YTh1/wfDIWj5qAfMmtFnzpz5ICIiwqKoqPgjKChoOtCs5wABhJyXpUCGzddgOIethJ71jEFi1nNwgQrKz8zv37//097eDop15qVLl0pAzWAACCAWhEMYOJFdduELA++b3wxsTIwMfzmYGH6xMDG8gYYpKAg+cnJy/gB6VwuYZFiA7E+wvAwQQCy46ozexwzG17+BYx6UVE4B8Vmo68CRFR0dDQo3UAHBBUwJ4lCLGAACCNnAv4zQxAkCxbIMZ0EuBIYb98EPDFo3voGTzjOogVzArGf969cvNmC2+wssHD7BDAQIIBakmHwPDPy3MAMNeBhgpfbbVEkGhqQbDJaXvjI8BPJB4jz79u37DcwlP+fPn38NuTwECCBkA1+8+8Nwtusxg+STHwwcP/8z8EuwMXA1KjBcBSlwEmRgBhrID/U2O7QMBIEHxsbGkrAwBAggmIGgNMT64AfDWyB+By0EQMVZlC0/wwsXQYa38hzgCGGBWv5ZU1OT4c+fP8yLFi1SA3r5Haw8BAggmIGg5KBpJ8BgeOYTg8S3f2DN/OxMDNwgw0AKnv0EJ+avsITu7u6+EZqzQEHwHFqaMwAEEAtShS/pLcTwrU+Z4QwsyQANOwIL06tfGV5BqwmQWoGKigoLYJnJvWPHjhstLS169vb2M0DqAAIIVh6CXHT/9ndIawEUITCXgUDrQwbGbe8YjkJdAzZQVVVV/t69e8LAgtUYaNgxWKQABBByacMHzfTK9gIMYkBZpj//GT4c+8gAKm1AsfseqPYPtHTXAtaEacBqlgHoyq+srKw3XV1dFwHlvwEEECNyYwmp3cIJjbUf0DbLP7RGEg+0bcMCjQxQzH8BWQgQQIzktr5wAYAAYmKgMgAIMAAp8Fx3osz1lgAAAABJRU5ErkJggg==" width="20" height="32" alt="S5" \/><\/a>' +
+ '<\/div><\/form>';
+ }
+ if (controlVis == 'hidden') {
+ var hidden = document.getElementById('navLinks');
+ } else {
+ var hidden = document.getElementById('jumplist');
+ }
+ addClass(hidden,'hideme');
+}
+
+function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
+ if (!s5mode && !isOp) return false;
+ var hScreen = screen.width; var vScreen = screen.height;
+ var vWindow = window.outerHeight; var hWindow = window.outerWidth;
+ if (isOp && s5mode && defaultView=='slideshow' && ((hScreen != hWindow) || (vScreen != vWindow))) {
+ toggle();
+ return false;
+ }
+ if (isOp && !s5mode && ((hScreen != hWindow) || (vScreen != vWindow))) return false;
+ if (isOp && !s5mode && (hScreen == hWindow) && (vScreen == vWindow)) toggle();
+ var vScale = 48; // both yield 16 (the usual browser default) at 1024x768
+ var hScale = 64; // perhaps should auto-calculate based on theme's declared value?
+ if (window.innerHeight) {
+ var vSize = window.innerHeight;
+ var hSize = window.innerWidth;
+ } else if (document.documentElement.clientHeight) {
+ var vSize = document.documentElement.clientHeight;
+ var hSize = document.documentElement.clientWidth;
+ } else if (document.body.clientHeight) {
+ var vSize = document.body.clientHeight;
+ var hSize = document.body.clientWidth;
+ } else {
+ var vSize = 700; // assuming 1024x768, minus chrome and such equals 8:5
+ var hSize = 1024; // these do not account for kiosk mode or Opera Show
+ }
+ var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
+ extendImgSizes(newSize); // scalable images extension
+ extendCanSizes(newSize); // scalable canvas extension
+ extendObjSizes(newSize); // scalable object extension
+ fontSize(newSize,"px");
+ if(!isS2 || firstTime==0) {
+ generateCanvas(); // dynamic canvas extension
+ }
+ if (isGe) { // hack to counter incremental reflow bugs
+ var obj = document.getElementsByTagName('body')[0];
+ obj.style.visibility = 'hidden';
+ obj.style.display = 'none';
+ obj.style.display = 'block';
+ obj.style.visibility = 'visible';
+ changeOpac(100,'slide' + snum);
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("fixReflow()",10);
+ }else {
+ setListPos(); // invisible select extension
+ }
+}
+
+function fixReflow() {
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("finishReflow()",10);
+}
+function finishReflow() {
+ setListPos(); // invisible select extension
+}
+
+function fontSize(val,fmt) {
+ var value = val + fmt;
+ if (!(s5ss = document.getElementById('s5ss'))) {
+ if (!document.createStyleSheet) {
+ document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
+ s5ss.setAttribute('media','screen, projection');
+ s5ss.setAttribute('id','s5ss');
+ } else {
+ document.createStyleSheet();
+ document.s5ss = document.styleSheets[document.styleSheets.length - 1];
+ }
+ }
+ if (!(document.s5ss && document.s5ss.addRule)) {
+ while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
+ s5ss.appendChild(document.createTextNode('html {font-size: ' + value + ' !important;}'));
+ } else {
+ document.s5ss.addRule('html','font-size: ' + value + ' !important;');
+ }
+}
+
+function windowChange() {
+ fontScale();
+}
+
+function notOperaFix() {
+ slideCSS = document.getElementById('slideProj').href;
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ slides.setAttribute('media','screen');
+ outline.disabled = true;
+ if (isGe) {
+ slides.setAttribute('href','null'); // Gecko fix
+ slides.setAttribute('href',slideCSS); // Gecko fix
+ }
+ if ((isIE && notIE7) && document.styleSheets && document.styleSheets[0]) {
+ document.styleSheets[0].addRule('img', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('div', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('.slide', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ }
+}
+
+function getIncrementals(obj) {
+ var incrementals = new Array();
+ if (!obj)
+ return incrementals;
+ var children = obj.childNodes;
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ if (hasClass(child, 'incremental')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'incremental');
+ for (var j = 0; j < child.childNodes.length; j++) {
+ if (child.childNodes[j].nodeType == 1) {
+ addClass(child.childNodes[j], 'incremental');
+ }
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ removeClass(child,'incremental');
+ }
+ }
+ if (hasClass(child, 'show-first')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'show-first');
+ if (child.childNodes[isGe].nodeType == 1) {
+ removeClass(child.childNodes[isGe], 'incremental');
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ }
+ }
+ incrementals = incrementals.concat(getIncrementals(child));
+ }
+ return incrementals;
+}
+
+function createIncrementals() {
+ var incrementals = new Array();
+ for (var i = 0; i < smax; i++) {
+ incrementals[i] = getIncrementals(document.getElementById('slide'+i));
+ }
+ return incrementals;
+}
+
+function trap(e) {
+ if (!e) {
+ e = event;
+ e.which = e.keyCode;
+ }
+ try {
+ modifierKey = e.ctrlKey || e.altKey || e.metaKey;
+ }
+ catch(e) {
+ modifierKey = false;
+ }
+ return modifierKey || e.which == 0;
+}
+
+// notes extension
+function noteLabel() { // Gives notes id's to match parent slides
+ var notes = GetElementsWithClassName('div','notes');
+ for (var i = 0; i < notes.length; i++) {
+ var note = notes[i];
+ var id = 'note' + note.parentNode.id.substring(5);
+ note.setAttribute('id',id);
+ }
+ resetElapsedSlide();
+ resetRemainingTime();
+ window.setInterval('updateElaspedTime()', 1000);
+}
+
+function createNotesWindow() { // creates a window for our notes
+ if (!s5NotesWindow || s5NotesWindow.closed) { // Create the window if it doesn't exist
+ s5NotesWindowLoaded = false;
+ // Note: Safari has a tendency to ignore window options preferring to default to the settings of the parent window, grr.
+ s5NotesWindow = window.open(s5Path+'ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0');
+ }
+ if (s5NotesWindowLoaded) { // Load the current note if the Note HTML has loaded
+ loadNote();
+ } else { // Keep trying...
+ window.setTimeout('createNotesWindow()', 50);
+ }
+}
+
+function loadNote() {
+// Loads a note into the note window
+ var notes = nextNotes = '<em class="disclaimer">There are no notes for this slide.</em>';
+ if (document.getElementById('note' + snum)) {
+ notes = document.getElementById('note' + snum).innerHTML;
+ }
+ if (document.getElementById('note' + (snum + 1))) {
+ nextNotes = document.getElementById('note' + (snum + 1)).innerHTML;
+ }
+
+ var jl = document.getElementById('jumplist');
+ var slideTitle = jl.options[jl.selectedIndex].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex) ? ' (' + jl.selectedIndex + '/' + (smax - 1) + ')' : '');
+ if (incrementals[snum].length > 0) {
+ slideTitle += ' <small>[' + incpos + '/' + incrementals[snum].length + ']</small>';
+ }
+ if (jl.selectedIndex < smax - 1) {
+ var nextTitle = jl.options[jl.selectedIndex + 1].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex + 1) ? ' (' + (jl.selectedIndex + 1) + '/' + (smax - 1) + ')' : '');
+ } else {
+ var nextTitle = '[end of slide show]';
+ }
+
+ if (s5NotesWindow && !s5NotesWindow.closed && s5NotesWindow.document) {
+ s5NotesWindow.document.getElementById('slide').innerHTML = slideTitle;
+ s5NotesWindow.document.getElementById('notes').innerHTML = notes;
+ s5NotesWindow.document.getElementById('next').innerHTML = nextTitle;
+ s5NotesWindow.document.getElementById('nextnotes').innerHTML = nextNotes;
+ }
+ resetElapsedSlide();
+}
+
+function minimizeTimer(id) {
+ var obj = s5NotesWindow.document.getElementById(id);
+ if (hasClass(obj,'collapsed')) {
+ removeClass(obj,'collapsed');
+ } else {
+ addClass(obj,'collapsed');
+ }
+}
+
+function resetElapsedTime() {
+ presentationStart = new Date();
+ slideStart = new Date();
+ updateElaspedTime();
+}
+
+function resetElapsedSlide() {
+ if (snum != previousSlide) {
+ slideStart = new Date();
+ previousSlide = snum;
+ updateElaspedTime();
+ }
+}
+
+function updateElaspedTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var now = new Date();
+ var ep = s5NotesWindow.document.getElementById('elapsed-presentation');
+ var es = s5NotesWindow.document.getElementById('elapsed-slide');
+ ep.innerHTML = formatTime(now.valueOf() - presentationStart.valueOf());
+ es.innerHTML = formatTime(now.valueOf() - slideStart.valueOf());
+}
+
+function resetRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var startField = s5NotesWindow.document.getElementById('startFrom');
+ startFrom = readTime(startField.value);
+ countdown.remaining = startFrom * 60000; // convert to msecs
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var timeLeft = formatTime(countdown.remaining);
+ tl.innerHTML = timeLeft;
+}
+
+function updateRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var now = new Date();
+ if (countdown.state == 'run') {
+ countdown.remaining = countdown.end - now;
+ }
+ tl.style.color = '';
+ tl.style.backgroundColor = '';
+ if (countdown.remaining >= 0) {
+ var timeLeft = formatTime(countdown.remaining);
+ removeClass(tl,'overtime');
+ if (countdown.remaining < 300000) {
+ tl.style.color = 'rgb(' + (255-Math.round(countdown.remaining/2000)) + ',0,0)';
+ tl.style.backgroundColor = 'rgb(255,255,' + (Math.round(countdown.remaining/2000)) + ')';
+ }
+ } else {
+ var timeLeft = '-' + formatTime(-countdown.remaining);
+ addClass(tl,'overtime');
+ }
+ tl.innerHTML = timeLeft;
+}
+
+function toggleRemainingTime() {
+ if (countdown.state == 'pause') countdown.state = 'run'; else countdown.state = 'pause';
+ if (countdown.state == 'pause') {
+ window.clearInterval(countdown.timer);
+ }
+ if (countdown.state == 'run') {
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ countdown.timer = window.setInterval('updateRemainingTime()', 1000);
+ }
+}
+
+function alterRemainingTime(amt) {
+ var change = amt * 60000; // convert to msecs
+ countdown.end += change;
+ countdown.remaining += change;
+ updateRemainingTime();
+}
+
+function formatTime(msecs) {
+ var time = new Date(msecs);
+
+ var hrs = time.getUTCHours() + ((time.getUTCDate() -1) * 24); // I doubt anyone will spend more than 24 hours on a presentation or single slide but just in case...
+ hrs = (hrs < 10) ? '0'+hrs : hrs;
+ if (hrs == 'NaN' || isNaN(hrs)) hrs = '--';
+
+ var min = time.getUTCMinutes();
+ min = (min < 10) ? '0'+min : min;
+ if (min == 'NaN' || isNaN(min)) min = '--';
+
+ var sec = time.getUTCSeconds();
+ sec = (sec < 10) ? '0'+sec : sec;
+ if (sec == 'NaN' || isNaN(sec)) sec = '--';
+
+ return hrs + ':' + min + ':' + sec;
+}
+
+function readTime(val) {
+ var sregex = /:/;
+ var matches = sregex.exec(val);
+ if (matches == null) {
+ return val;
+ } else {
+ var times = val.split(':');
+ var hours = parseInt(times[0]);
+ var mins = parseInt(times[1]);
+ var total = (hours * 60) + mins;
+ return total;
+ }
+}
+// notes extension
+
+// startup process
+function createSlideShow() {
+ defaultCheck();
+ if(!isIE) createDetector(); // (degrade IE) scalable images extension
+ if(opac!=0 || isIE) { // &&!isIE (degrade IE)
+ tranSitions = false;
+ fadeModus = false;
+ }
+ if(tranSitions && document.getElementById && document.createElement){
+ createProgress();
+ var nop=document.getElementById('StartupControl');
+ nop.onload = dumpProgress;
+ }else {
+ startup();
+ showAll();
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+ }
+}
+
+function defaultCheck() {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'defaultView') {
+ defaultView = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'controlVis') {
+ controlVis = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'tranSitions') {
+ tranSitions = (allMetas[i].content == "true") ? true : false;
+ fadeModus = (tranSitions == true) ? true : false;
+ }
+ if (allMetas[i].name == 'fadeDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ fadeDuration = Math.max(200,Math.min(tmp,2000));
+ }
+ if (allMetas[i].name == 'incrDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ incrDuration = Math.max(50,Math.min(tmp,500));
+ }
+ if (allMetas[i].name == 'autoMatic') {
+ autoMatic = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playLoop') {
+ playLoop = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playDelay') {
+ var tmp = parseInt(allMetas[i].content);
+ playDelay = Math.max(5,Math.min(tmp,90))*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ }
+ if (allMetas[i].name == 'audioSupport') {
+ audioSupport = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'audioVolume') {
+ var tmp = parseInt(allMetas[i].content);
+ audioVolume = Math.max(0,Math.min(tmp,100));
+ }
+ if (allMetas[i].name == 'audioError') {
+ audioError = (allMetas[i].content == "true") ? true : false;
+ }
+ }
+}
+
+function createProgress() {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "StartupProgress";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=100)";
+ }else {
+ pg.style.opacity = 1.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/progress.gif)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+
+ var im = document.createElement('img');
+ im.id = "StartupControl";
+ im.src = s5Path+"ui/graphic_support/blank.gif?" + new Date().valueOf();
+ document.getElementsByTagName("body")[0].appendChild(im);
+}
+
+function startup() {
+ createControls(); // hallvord
+ slideLabel();
+ incrementals = createIncrementals();
+ noteLabel(); // [SI:060104] must follow slideLabel()
+ loadNote();
+ fixLinks();
+ externalLinks();
+ fontScale();
+ if (!isOp) {
+ if(isIE) {
+ document.getElementById('lst').style.backgroundImage = 'none';
+ document.getElementById('del').style.backgroundImage = 'none';
+ }else {
+ document.getElementById('audio').style.backgroundImage = 'none';
+ }
+ notOperaFix();
+ }else if(isOp) {
+ var obj = document.getElementById('exit');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('exit').style.opacity = 0.5;
+ obj = document.getElementById('toggle');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('toggle').style.opacity = 0.5;
+ document.getElementById('jumplist').style.visibility = 'hidden';
+ document.getElementById('list').style.visibility = 'hidden';
+ document.getElementById('lst').style.opacity = 0.5;
+ obj = document.getElementById('audio');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('audio').style.opacity = 0.5;
+ document.getElementById('volumelist').style.visibility = 'hidden';
+ document.getElementById('volume').style.visibility = 'hidden';
+ document.getElementById('vol').style.opacity = 0.5;
+ document.getElementById('delaylist').style.visibility = 'hidden';
+ document.getElementById('delay').style.visibility = 'hidden';
+ document.getElementById('del').style.opacity = 0.5;
+ }
+ slideJump();
+ if (defaultView == 'outline') toggle();
+ document.onkeyup = keys;
+ document.onkeypress = trap;
+ document.onclick = clicker;
+}
+
+function preloadImgages() {
+ var temp = '';
+ var objects = document.getElementsByTagName('img');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].src != '') {
+ temp = new Image();
+ temp.src = objects[i].src;
+ }
+ }
+}
+
+function showAll() {
+ var obj1 = GetElementsWithClassName('div','presentation')[0];
+ if(!obj1) var obj1 = GetElementsWithClassName('ol','presentation')[0];
+ var obj2 = GetElementsWithClassName('div','layout')[0];
+ if(!obj1){}else {obj1.style.display = 'block'};
+ if(!obj2){}else {obj2.style.display = 'block'};
+}
+
+function dumpProgress() {
+ document.body.removeChild(document.getElementById('StartupControl'));
+ startup();
+ preloadImgages();
+ showAll();
+ createSoundManagerScript();
+ shiftOpacity('StartupProgress',1000);
+ window.setTimeout("removeProgress()",1000);
+}
+
+function removeProgress() {
+ document.body.removeChild(document.getElementById('StartupProgress'));
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+}
+function panelSetup() {
+ if(playPause) {
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ if(playLoop) {
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ if(audioSupport && !isIE && !isOp) {
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ }
+ if(fadeModus && !isIE) {
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ if(autoMatic) {
+ var obj = document.getElementById('auto'); changeClass(obj,'ison');
+ startPlay();
+ }
+ if(audioVolume && !isIE && !isOp) {
+ var idx = 0;
+ if(audioVolume >= 95 && audioVolume <= 100) {idx = 0;}
+ else if(audioVolume >= 85 && audioVolume < 95) {idx = 1;}
+ else if(audioVolume >= 75 && audioVolume < 85) {idx = 2;}
+ else if(audioVolume >= 65 && audioVolume < 75) {idx = 3;}
+ else if(audioVolume >= 55 && audioVolume < 65) {idx = 4;}
+ else if(audioVolume >= 45 && audioVolume < 55) {idx = 5;}
+ else if(audioVolume >= 35 && audioVolume < 45) {idx = 6;}
+ else if(audioVolume >= 25 && audioVolume < 35) {idx = 7;}
+ else if(audioVolume >= 15 && audioVolume < 25) {idx = 8;}
+ else if(audioVolume >= 5 && audioVolume < 15) {idx = 9;}
+ else {idx = 10;}
+ document.getElementById('volumelist').selectedIndex = idx;
+ }
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+}
+// startup process
+
+// shutdown process
+function byby() {
+ stopPlay();
+ if(tranSitions && fadeModus && s5mode && !isOp) {
+ fadeoutSound(curSoundID,true); // audio support
+ var pg = document.createElement('div');
+ pg.id = "GoodBy";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=0)";
+ }else {
+ pg.style.opacity = 0.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/finish.gif)";
+ document.getElementsByTagName("body")[0].appendChild(pg);
+ shiftOpacity('GoodBy',1000);
+ window.setTimeout("history.back()",1000);
+ }else {
+ stopSound(curSoundID);
+ history.back();
+ }
+}
+// shutdown process
+
+// scalable images extension
+function createDetector() {
+ var em = document.createElement('div');
+ em.id='EMSizeControl'; em.style.position="absolute"; em.style.left="-999px";
+ em.style.width="1em"; em.style.height="1em"; em.style.opacity=0.0;
+ document.getElementsByTagName("body")[0].appendChild(em);
+ var nop=document.getElementById('EMSizeControl');
+ if(!nop||findPosX(nop)!=-999) {}else {
+ opac=document.getElementById('EMSizeControl').style.opacity;
+ empx=document.getElementById('EMSizeControl').offsetHeight;
+ document.body.removeChild(document.getElementById('EMSizeControl'));
+ var objects = document.getElementsByTagName('img');
+ var j = 0; var i = 0; var k = 0; var d; var obj;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ images[j] = objects[i];
+ ++j;
+ }
+ }
+ var objects = document.getElementsByTagName('canvas'); j = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ canvas[objects[i].id] = objects[i];
+ if(j==0) {
+ if(objects[i].getContext) {
+ canvasSupport = true;
+ }
+ ++j;
+ }
+ }
+ }
+ if(canvasSupport!=true) {
+ for (d in canvas) {
+ try {
+ canvas[d].setAttribute("width",1);
+ canvas[d].setAttribute("height",1);
+ } catch (e) {
+ }
+ }
+ }
+ var objects = document.getElementsByTagName('table');
+ j = 0; k = 0; l = 0; var w; var h; var tmp; var cnt;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^piechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ piecharts[j] = objects[i];
+ em = piecharts[j].getAttribute("summary");
+ if(em != "") em = "," + em;
+ piecharts[j].setAttribute("summary", w + "," + h + em);
+ ++j;
+ }
+ }
+ }
+ if(objects[i].className.match(/^barchart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ barcharts[k] = objects[i];
+ em = barcharts[k].getAttribute("summary");
+ if(em != "") em = "," + em;
+ barcharts[k].setAttribute("summary", w + "," + h + em);
+ ++k;
+ }
+ }
+ }
+ if(objects[i].className.match(/^linechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ linecharts[l] = objects[i];
+ em = linecharts[l].getAttribute("summary");
+ if(em != "") em = "," + em;
+ linecharts[l].setAttribute("summary", w + "," + h + em);
+ ++l;
+ }
+ }
+ }
+ }
+ objects = document.getElementsByTagName('object'); j = 0; i = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ medias[j] = objects[i]; ++j;
+ if(!isIE) {
+ if(objects[i].getAttributeNode("classid")) objects[i].removeAttributeNode(objects[i].getAttributeNode("classid"));
+ if(objects[i].getAttributeNode("codebase")) objects[i].removeAttributeNode(objects[i].getAttributeNode("codebase"));
+ }
+ }
+ }
+ }
+}
+function extendImgSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < images.length; i++) {
+ w=images[i].getAttribute("width",0);
+ h=images[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ images[i].style.width=Math.floor(w*q)+"px";
+ images[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+
+function extendCanSizes(f) {
+ if(empx>0 && canvasSupport) {
+ var q = (f/empx); var w = 0; var h = 0; var tmp = ""; var cnt; var obj;
+ for(var i=0; i < piecharts.length; i++) {
+ if(piecharts[i].getAttribute("summary")) {
+ tmp = piecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = piecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < barcharts.length; i++) {
+ if(barcharts[i].getAttribute("summary")) {
+ tmp = barcharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = barcharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < linecharts.length; i++) {
+ if(linecharts[i].getAttribute("summary")) {
+ tmp = linecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = linecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ }
+}
+function extendObjSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < medias.length; i++) {
+ w=medias[i].getAttribute("width",0);
+ h=medias[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ medias[i].style.width=Math.floor(w*q)+"px";
+ medias[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+function findPosX(obj) {
+ var posLeft = 0;
+ while (obj.offsetParent) {
+ posLeft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ return posLeft;
+}
+function findPosY(obj) {
+ var posTop = 0;
+ while (obj.offsetParent) {
+ posTop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ return posTop;
+}
+// scalable images extension
+
+// canvas chart extension
+function deg2rad(degrees) {
+ return Math.PI *degrees/180;
+}
+function rad2deg(radians) {
+ return 180.0 *radians/Math.PI;
+}
+function circle_point_x(radians, diameter) {
+ var x = Math.cos(radians)*(diameter/2);
+ return x;
+}
+function circle_point_y(radians, diameter) {
+ var y = Math.sin(radians)*(diameter/2);
+ return y;
+}
+function roundTo(val,dig) {
+ var num = val;
+ if (val > 8191 && val < 10485) {
+ val = val-5000;
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ num = num+5000;
+ } else {
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ }
+ return num;
+}
+function searchColor(value) {
+ for (var dat in colorNames) {
+ if(dat==value) return colorNames[dat];
+ }
+ return false;
+}
+function scanColor(value) {
+ if(value.match(/^#[0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var val1 = value.substr(1,1).toLowerCase();
+ var val2 = value.substr(2,1).toLowerCase();
+ var val3 = value.substr(3,1).toLowerCase();
+ value = '#' + val1 + val1 + val2 + val2 + val3 + val3;
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var tmp = searchColor(value.toLowerCase());
+ if(!tmp) {}else{value = tmp;}
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ value = '#000000';
+ }
+ return value.toLowerCase();
+}
+function hex2rgb(val,trans) {
+ if(val.length==7) {
+ var tp1 = Math.max(0,Math.min(parseInt(val.substr(1,2),16),255));
+ var tp2 = Math.max(0,Math.min(parseInt(val.substr(3,2),16),255));
+ var tp3 = Math.max(0,Math.min(parseInt(val.substr(5,2),16),255));
+ return 'rgba(' + tp1 + ',' + tp2 + ',' + tp3 + ',' + trans + ')';
+ }
+}
+function trim(str) {
+ return (str.replace(/\s+$/,"").replace(/^\s+/,""));
+}
+function roundedRect(ctx,x,y,width,height,radius){
+ ctx.beginPath();
+ ctx.moveTo(x,y+radius);
+ ctx.lineTo(x,y+height-radius);
+ ctx.quadraticCurveTo(x,y+height,x+radius,y+height);
+ ctx.lineTo(x+width-radius,y+height);
+ ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius);
+ ctx.lineTo(x+width,y+radius);
+ ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
+ ctx.lineTo(x+radius,y);
+ ctx.quadraticCurveTo(x,y,x,y+radius);
+ ctx.closePath();
+}
+function drawString(ctx, text, fc, tx, ty) {
+ var xp = 0; var c = "";
+ ctx.beginPath();
+ for (var i = 0; i < text.length; i++) {
+ c = text[i];
+ ctx.drawImage(font, signs[c].sx, signs[c].sy, signs[c].sw, signs[c].sh, tx+xp, ty, signs[c].sw*fc, signs[c].sh*fc);
+ xp += (signs[c].sw*fc);
+ }
+ ctx.closePath();
+}
+function strokeString(ctx, txt, col, fh, tx, ty) {
+ var fw = fh*0.666666; var lw = fh*0.125;
+ var ls = lw/2; var cr = lw; var xp = 0;
+ ctx.lineCap = "round"; ctx.lineJoin = "round"
+ ctx.lineWidth = lw; ctx.strokeStyle = col;
+ for (var i = 0; i < txt.length; i++) {
+ strokeSymbol(ctx, txt[i], ls, tx+xp, ty, fw, fh);
+ xp += (txt[i]!="."?fw+cr:(fw/2)+cr);
+ }
+}
+function strokeSymbol(ctx, symbol, fc, cx, cy, cw, ch) {
+ ctx.beginPath();
+ switch (symbol) {
+ case "0":
+ ctx.moveTo(cx+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+(cw/2),(cw/2)-fc,deg2rad(180),0, false);
+ ctx.arc(cx+(cw/2),(cy+ch)-(cw/2),(cw/2)-fc,0,deg2rad(180), false);
+ ctx.closePath();
+ break;
+ case "1":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.moveTo(cx+(cw*0.666666),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.666666),cy+fc);
+ ctx.lineTo(cx+(cw*0.25),cy+(ch*0.25));
+ break;
+ case "2":
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.8));
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+fc,cy+ch-fc);
+ ctx.arc(cx+(cw/2),cy+(cw*0.425),(cw*0.425)-fc,deg2rad(45),deg2rad(-180), true);
+ break;
+ case "3":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-90),deg2rad(180), false);
+ break;
+ case "4":
+ ctx.moveTo(cx+(cw*0.75),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.5),cy+ch-fc);
+ break;
+ case "5":
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-80),deg2rad(180), false);
+ break;
+ case "6":
+ ctx.moveTo(cx+fc,cy+ch-(cw*0.5)-fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-180),deg2rad(180), false);
+ ctx.bezierCurveTo(cx+fc,cy+fc,cx+fc,cy+fc,cx+(cw*0.9)-fc,cy+fc);
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ break;
+ case "7":
+ ctx.moveTo(cx+(cw*0.5),cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.25)-fc);
+ break;
+ case "8":
+ ctx.moveTo(cx+(cw*0.92)-fc,cy+(cw*0.59));
+ ctx.arc(cx+(cw/2),cy+(cw*0.45),(cw*0.45)-fc,deg2rad(25),deg2rad(-205), true);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-135),deg2rad(-45), true);
+ ctx.closePath();
+ ctx.moveTo(cx+(cw*0.79),cy+(ch*0.47));
+ ctx.lineTo(cx+(cw*0.21),cy+(ch*0.47));
+ break;
+ case "9":
+ ctx.moveTo(cx+cw-fc,cy+(cw*0.5));
+ ctx.arc(cx+(cw/2),cy+(cw*0.5),(cw*0.5)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.bezierCurveTo(cx+cw-fc,cy+ch-fc,cx+cw-fc,cy+ch-fc,cx+(cw*0.1)+fc,cy+ch-fc);
+ break;
+ case "%":
+ ctx.moveTo(cx+fc,cy+(ch*0.75));
+ ctx.lineTo(cx+cw-fc,cy+(ch*0.25));
+ ctx.moveTo(cx+(cw*0.505),cy+(cw*0.3));
+ ctx.arc(cx+(cw*0.3),cy+(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.moveTo(cx+(cw*0.905),cy+ch-(cw*0.3));
+ ctx.arc(cx+(cw*0.7),cy+ch-(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ break;
+ case ".":
+ ctx.moveTo(cx+(cw*0.25),cy+ch-fc-fc);
+ ctx.arc(cx+(cw*0.25),cy+ch-fc-fc,fc,deg2rad(0),deg2rad(360), false);
+ ctx.closePath();
+ break;
+ default:
+ break;
+ }
+ ctx.stroke();
+}
+function drawBar(ctx,x,y,width,height,color,value,textdiv){
+ var rw = width/2; var rh = rw/2;
+ height = Math.max(height,rw);
+ var dh = Math.max(height-(2*rh),0.1); var S2L;
+ var xx = rw/8; var yy = rh/4;
+ var yo = rh/2; y = y - yy;
+ if(canvas_noshadow <= 0 && canvas_noshade <= 0) {
+ ctx.save();
+ S2L = ctx.createRadialGradient(x+rw+rh,y+height-rw+yy+rh,0,x+rw,y+height-rw+yy,rw);
+ S2L.addColorStop(0, 'rgba(0,0,0,0.5)');
+ S2L.addColorStop(0.7, 'rgba(0,0,0,0.25)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = S2L;
+ ctx.scale(1,0.5);
+ ctx.translate(xx,y+height+yy);
+ if(isOp){
+ ctx.fillRect(x,y+yy+height-width,width,width);
+ }else {
+ ctx.arc(x+rw,y+yy+height-width,width,0,deg2rad(360), false);
+ ctx.fill();
+ }
+ ctx.restore();
+ }else if(canvas_noshadow <= 0 && canvas_noshade >= 1) {
+ ctx.fillStyle = 'rgba(0,0,0,0.2)';
+ ctx.fillRect(x+yo,y+rh+yo+yo,width,dh);
+ }
+
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x,y+(height/2),x+width,y+(height/2));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.75)');
+ S2L.addColorStop(0.2, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.3, 'rgba(0,0,0,0)');
+ S2L.addColorStop(0.5, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.35)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.1)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.strokeStyle = S2L;
+ ctx.stroke();
+ }else {
+ ctx.fillStyle = color;
+ ctx.fillRect(x,y+rh+yo,width,dh);
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var bw = width; var bh = bw/4;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ var c; var w;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,x+(width/2)-(bw/2),y,bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext <= 0) {
+ strokeString(ctx, value + "%","rgba(48,48,48,1)", th, x+(width/2)-(w/2), y+((bh-th)/2));
+ }else {
+ drawString(ctx, value + "%", tf, x+(width/2)-(w/2), y+((bh-th)/2.2));
+ }
+ }else {
+ var bh = bw/3; var th = roundTo(bh*0.75,0);
+ roundedRect(ctx,x,y,bw,bh,bh/4);
+ ctx.fill();
+ var obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = x + "px";
+ obj.style.top = y+((bh-th)/2.2) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+
+ }
+}
+function drawLine(ctx,x,y,width,height,dist,array,factor,color,fill){
+ if(fill <= 0){
+ var style = hex2rgb(color,0.5);
+ ctx.lineJoin = "miter";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height);
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.lineTo(x+width,y+height);
+ ctx.lineTo(x,y+height);
+ ctx.closePath();
+ ctx.fillStyle = style;
+ ctx.fill();
+ }
+ ctx.lineJoin = "round";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height-(array[0]*factor));
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.strokeStyle = color;
+ ctx.stroke();
+}
+function setDataURL(cid) {
+ if(cid.toDataURL) {
+ var obj = document.getElementById(cid.id + "_link");
+ if(obj) {
+ obj.setAttribute("title", "To Data URL");
+ obj.setAttribute("target", "_blank");
+ obj.setAttribute("href", cid.toDataURL());
+ }
+ }
+}
+function get_input(dataobj,canvasobj,linechart) {
+ var table = document.getElementById(dataobj);
+ var canvas = document.getElementById(canvasobj);
+ var row; var clm; var cnt = 0; var val = 0; var nme = ""; var col = "";
+ if(canvas.getContext) {
+ canvas_width = parseInt(canvas.style.width);
+ canvas_height = parseInt(canvas.style.height);
+ if(canvas_width >= 16 && canvas_height >= 16) {
+ var tmp = table.getAttribute("summary");
+ canvas_noshade = 0; canvas_noshadow = 0;
+ canvas_notext = 0; canvas_imgtext = 0;
+ canvas_htmltext = 0; canvas_nofill = 0;
+ if(tmp.search(/noshadow/) != -1) canvas_noshadow = 1;
+ if(tmp.search(/noshade/) != -1) canvas_noshade = 1;
+ if(tmp.search(/nofill/) != -1) canvas_nofill = 1;
+ if(tmp.search(/notext/) != -1) canvas_notext = 1;
+ if(tmp.search(/htmltext/) != -1) canvas_htmltext = 1;
+ if(tmp.search(/imgtext/) != -1) canvas_imgtext = 1;
+ if(table.getAttribute("bgcolor")) {
+ canvas_bgcolor = scanColor(table.getAttribute("bgcolor"));
+ }
+ ChartData = new Array(); colorSlice = new Array();
+ if(table.getElementsByTagName("tr")[0].getElementsByTagName("th")[0]) cnt = 1;
+ for(var r = cnt; r < table.getElementsByTagName("tr").length; r++) {
+ row = table.getElementsByTagName("tr")[r];
+ clm = row.getElementsByTagName("td").length;
+ if(row.getElementsByTagName("td")[0].getAttribute("bgcolor")) {
+ col = scanColor(row.getElementsByTagName("td")[0].getAttribute("bgcolor")); val = 0;
+ nme = trim(row.getElementsByTagName("td")[1].innerHTML.replace(/<[^>]+>/g,""));
+ if(!linechart) {
+ if(clm > 3) {
+ for(var z = 2; z < clm; z++) {
+ val += parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ }else {
+ val = parseFloat(row.getElementsByTagName("td")[2].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ if(!isNaN(val) && val > 0 && nme != '') {
+ colorSlice[r-cnt] = col; ChartData[nme] = Math.abs(val);
+ }else {
+ break;
+ }
+ }else {
+ val = 0; i = 0;
+ if(clm > 3 && nme != '') {
+ ChartData[r-cnt] = new Array();
+ colorSlice[r-cnt] = col;
+ for(var z = 2; z < clm; z++) {
+ val = Math.abs(parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,"")));
+ if(!isNaN(val) && val >= 0) {
+ ChartData[r-cnt][i] = val; i++;
+ }else {
+ ChartData[r-cnt][i] = 0; i++;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }
+ }
+}
+function setPieChart(canvasobj,textobj) {
+ var cd = (Math.min(canvas_width,canvas_height)/110)*100;
+ var cp = cd*0.1; var cr = cd/2;
+ var sr = cr*0.93; var cw = cd+cp; var ch = cw;
+ var cx = (cd/2)+(cp/2); var cy = cx; var ct = 0;
+ for (var data in ChartData) {
+ ct += ChartData[data];
+ }
+ var poc = ct/100;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ }
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,cw,ch);
+ }else {
+ ctx.clearRect(0,0,cw,ch);
+ }
+ if(canvas_noshadow <= 0) {
+ if(!isOp) {
+ ctx.beginPath();
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),cr,cx+(cr*0.1),cy+(cr*0.1),sr*0.9);
+ B2B.addColorStop(0, 'rgba(0,0,0,0)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.arc(cx+(cr*0.1),cy+(cr*0.1),cr,0,deg2rad(360), false);
+ ctx.closePath();
+ ctx.fillStyle = B2B;
+ ctx.fill();
+ }else {
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),0,cx+(cr*0.1),cy+(cr*0.1),cr);
+ B2B.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(0.87, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = B2B;
+ ctx.fillRect(0,0,cw,ch);
+ }
+ }
+ var val = 0; var deg = 0; var idx = 0; var data;
+ for (data in ChartData) {
+ val = ChartData[data]; sdeg = deg;
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ ctx.beginPath();
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr,sdeg,edeg, false);
+ ctx.lineTo(cx,cy);
+ ctx.closePath();
+ ctx.fillStyle = colorSlice[(idx++)];
+ ctx.fill();
+ }
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ var W2T = ctx.createLinearGradient(cp*2,cp*2,cx,cy);
+ W2T.addColorStop(0, 'rgba(255,255,255,0.8)');
+ W2T.addColorStop(1, 'rgba(255,255,255,0)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.fillStyle = W2T;
+ ctx.fill();
+ ctx.beginPath();
+ var T2B = ctx.createLinearGradient(cx,cy,cw-(cp*2),ch-(cp*2));
+ T2B.addColorStop(0, 'rgba(0,0,0,0)');
+ T2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.fillStyle = T2B;
+ ctx.fill();
+ ctx.beginPath();
+ var B2T = ctx.createLinearGradient(cx,cy,cw-(cp*1.9),ch-(cp*1.9));
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.strokeStyle = B2T;
+ ctx.stroke();
+ ctx.beginPath();
+ var T2W = ctx.createLinearGradient(cx,cy,(cp*1.9),(cp*1.9));
+ T2W.addColorStop(0, 'rgba(255,255,255,0)');
+ T2W.addColorStop(1, 'rgba(255,255,255,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.strokeStyle = T2W;
+ ctx.stroke();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var mpos = 0; var per = 0; var gx = 0;
+ var gy = 0; var tx = 0; var ty = 0;
+ var obj = ""; var w = 0; var c = 0;
+ var bw = cr*0.45; var bh = cr*0.125;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext >= 1) {
+ bw = (cr*0.365);
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ for (data in ChartData) {
+ val = ChartData[data];
+ sdeg = deg; mpos = deg+(((val/2)/ct)*deg2rad(360));
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ per = roundTo(val/poc,2);
+ gx = circle_point_x(mpos, cd);
+ gy = circle_point_y(mpos, cd);
+ tx = parseFloat((cx+(2*Math.floor(cx + gx)))/3);
+ ty = (cy+(2*Math.floor(cy + gy)))/3;
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext >= 1) {
+ drawString(ctx, per + "%", tf, tx-(w/2), ty-(th/1.8));
+ }else {
+ strokeString(ctx, per + "%","rgba(48,48,48,1)", th, tx-(w/2), ty-(th/2));
+ }
+ }else {
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = (tx-(bw/2)) + "px";
+ obj.style.top = ty-(th/1.8) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+ }
+ }
+ }
+}
+function setBarChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9; var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05; var ph = canvas_height*0.05;
+ var cm = 0; var ct = 0;
+ for (var data in ChartData) {
+ cm = Math.max(cm,ChartData[data]);
+ ct += ChartData[data];
+ }
+ var hf = ih/cm; var bs = colorSlice.length;
+ var bw = iw/(bs*1.1); var poc = ct/100;
+ var th = roundTo((bw/3)*0.75,0);
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ var obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ var cc = ""; var bh = 0; var idx = 0; var t = 0; per = 0;
+ for (var data in ChartData) {
+ per = roundTo(ChartData[data]/poc,2);
+ bh = ChartData[data]*hf;
+ drawBar(ctx,pw+(t*(bw*1.1)),ph+ih-bh,bw,bh,colorSlice[(idx++)],per,textdiv);
+ t++;
+ }
+ }
+}
+function setLineChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9;
+ var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05;
+ var ph = canvas_height*0.05;
+ var cm = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ cm = Math.max(cm,ChartData[i][j]);
+ }
+ }
+ var hf = (ih*0.95)/cm; var bw = iw;
+ var dw = iw/(ChartData[0].length-1)
+ var dh = ih/(ChartData[0].length-1)
+ var ps = Math.min(pw,ph); lw = ps/4;
+ var B2T;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_noshadow <= 0) {
+ B2T = ctx.createLinearGradient(pw+ps,ph+ih+1,pw+ps+ps,ph+ih+1);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps,ph+ih);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.lineTo(pw+ps+ps,ph+ih);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+ps+ps,ph+ih,pw+ps+ps,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps+ps,ph+ih);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+ps+iw,ph+ih+ps);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.closePath();
+ ctx.fill();
+ var B2T = ctx.createLinearGradient(pw+iw+1,ph+ps,pw+iw+1,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.35)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps);
+ ctx.lineTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+iw,ph+ps+ps,pw+iw+ps,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.35)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+iw+ps,ph+ih+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = lw/2;
+ ctx.strokeStyle = "rgba(255,255,255,0.25)";
+ if(canvas_nofill <= 0) {
+ ctx.fillStyle = "rgba(240,240,240,0.8)";
+ ctx.strokeStyle = "rgba(255,255,255,1)";
+ ctx.fillRect(pw,ph,iw,ih);
+ }
+ for (var i = 0; i < ChartData[0].length-1; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph);
+ ctx.lineTo(pw+(i*dw),ph+ih);
+ ctx.stroke();
+ }
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw,ph+(i*dh));
+ ctx.lineTo(pw+iw,ph+(i*dh));
+ ctx.stroke();
+ }
+ ctx.lineWidth = lw;
+ var cc = ""; var bh = 0; var idx = 0; var t = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ t = Math.max(t,ChartData[i][j]);
+ }
+ bh = t*hf; cc = colorSlice[(idx++)];
+ drawLine(ctx,pw,ph+ih-bh,bw,bh,dw,ChartData[i],hf,cc,canvas_nofill);
+ }
+ ctx.beginPath();
+ ctx.moveTo(pw,ph);
+ ctx.lineTo(pw,ph+ih);
+ ctx.lineTo(pw+iw+(lw/2),ph+ih);
+ ctx.strokeStyle = "rgba(48,48,48,1)";
+ ctx.stroke();
+ ctx.lineWidth = lw/2;
+ B2T = ctx.createLinearGradient(pw,ph+ih,pw,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,1)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.strokeStyle = B2T;
+ for (var i = 0; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph+ih);
+ ctx.lineTo(pw+(i*dw),ph+ih+ps);
+ ctx.stroke();
+ }
+ B2T = ctx.createLinearGradient(pw-ps,ph,pw,ph);
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,1)');
+ ctx.strokeStyle = B2T;
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw-ps,ph+(i*dh));
+ ctx.lineTo(pw,ph+(i*dh));
+ ctx.stroke();
+ }
+ }
+}
+function generateCanvas() {
+ if(canvasSupport) {
+ var canvasID; var tdataID; var textID;
+ var tmp; var dat; var i; var j;
+ for(i=0; i < piecharts.length; i++) {
+ tmp = piecharts[i].id.split("_");
+ tdataID = piecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setPieChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < barcharts.length; i++) {
+ tmp = barcharts[i].id.split("_");
+ tdataID = barcharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setBarChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < linecharts.length; i++) {
+ tmp = linecharts[i].id.split("_");
+ tdataID = linecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID,true);
+ if(colorSlice.length > 0) {
+ if(ChartData.length == colorSlice.length) {
+ setLineChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ }
+}
+// canvas chart extension
+
+// invisible select extension
+function setListPos(opt) {
+ if(!isIE) { //(degrade IE)
+ var ref = document.getElementById('list');
+ var x = findPosX(ref); var y = findPosY(ref);
+ var obj = document.getElementById('jumplist');
+ obj.style.position = 'fixed'; obj.style.left = x + 'px'; obj.style.top = y + 'px';
+ var vol = document.getElementById('volumelist');
+ ref = document.getElementById('volume');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ vol.style.position = 'fixed'; vol.style.left = x + 'px'; vol.style.top = y + 'px';
+ var del = document.getElementById('delaylist');
+ ref = document.getElementById('delay');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ del.style.position = 'fixed'; del.style.left = x + 'px'; del.style.top = y + 'px';
+ var pnl = document.getElementById('navLinks');
+ }
+ if(opt) {
+ if(isIE) {
+ //(degrade IE)
+ //pnl.style.filter = "alpha(opacity=80)";
+ }else {
+ obj.style.opacity = 0.0;
+ vol.style.opacity = 0.0;
+ del.style.opacity = 0.0;
+ pnl.style.opacity = 0.8;
+ }
+ }
+}
+// invisible select extension
+
+// transition extension
+function switchFade() {
+ if(tranSitions && s5mode && fadeModus) {
+ fadeModus = false;
+ playDelay = playDelay-(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'isoff');
+ }else if(tranSitions && s5mode && !fadeModus) {
+ fadeModus = true;
+ playDelay = playDelay+(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ currentSlide();
+}
+function opacity(ids, opacStart, opacEnd, millisec) {
+ var speed = Math.round(millisec / 100);
+ var timer = 0;
+ if(opacStart > opacEnd) {
+ for(var i = opacStart; i >= opacEnd; i--) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ } else if(opacStart < opacEnd) {
+ for(var i = opacStart; i <= opacEnd; i++) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ }
+}
+function changeOpac(opacity, ids) {
+ var obj = document.getElementById(ids);
+ if (isIE) {
+ obj.style.filter = "alpha(opacity=" + opacity + ")";
+ } else {
+ obj.style.opacity = (opacity / 100);
+ }
+}
+function shiftOpacity(ids, millisec) {
+ if(document.getElementById(ids).style.opacity != '') {
+ var currentOpac = document.getElementById(ids).style.opacity * 100;
+ } else {
+ var currentOpac = 0;
+ }
+ if(currentOpac == 0) {
+ opacity(ids, currentOpac, 100, millisec);
+ } else if(currentOpac > 0) {
+ opacity(ids, currentOpac, 0, millisec);
+ }
+}
+// transition extension
+
+// autoplay extension
+function autoPlay() {
+ if (s5mode && autoMatic && !playPause) {
+ if ((snum >= (smax-1)) && playLoop) {
+ goTo(0);
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }else if ((snum >= (smax-1)) && !playLoop) {
+ stopPlay();
+ }else {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ if (incrementals[snum].length >0) {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = parseInt(playDelay/(incrementals[snum].length+1));
+ remainDer = parseInt(playDelay-(incrDelay*incrementals[snum].length));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ } else {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = incrDuration;
+ remainDer = parseInt(playDelay-(incrementals[snum].length*incrDuration));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }
+ }
+}
+function autoPlayIncr() {
+ if (incpos < incrementals[snum].length) {
+ subgo(1);
+ autoRun = setTimeout('autoPlayIncr();',incrDelay);
+ }else {
+ autoRun = setTimeout('nop();',remainDer);
+ }
+}
+function nop() {
+ // no operation dummy
+}
+function togglePlay() {
+ if (autoRun && s5mode) {
+ stopPlay();
+ }else if (!autoRun && s5mode) {
+ startPlay();
+ }
+}
+function stopPlay() {
+ if (autoRun && s5mode) {
+ clearTimeout(autoRun); autoRun = null;
+ autoMatic = false; playPause = false; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'isoff');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ currentSlide();
+ }
+}
+function startPlay() {
+ if (!autoRun && s5mode) {
+ playPause = false; autoMatic = true; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'ison');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ autoRun = setTimeout('autoPlay();',playDelay);
+ currentSlide();
+ }
+}
+function pausePlay() {
+ if (s5mode && autoMatic) {
+ if (playPause) {
+ playPause = false; autoRun = setTimeout('autoPlay();',playDelay);
+ var obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ }else {
+ if (autoRun){
+ clearTimeout(autoRun); autoRun = null; playPause = true;
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+ }
+}
+function switchLoop() {
+ if(s5mode) {
+ if (playLoop) {
+ playLoop = false;
+ var obj = document.getElementById('loop'); changeClass(obj,'isoff');
+ }else {
+ playLoop = true;
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+}
+function setDelay() {
+ var val = document.getElementById('delaylist');
+ if(s5mode) {
+ var delay = Math.max(5,Math.min(parseInt(val.value),300));
+ playDelay = (fadeModus == true) ? ((delay*1000)+(2*fadeDuration)) : (delay*1000);
+ }
+}
+// autoplay extension
+
+// audio extension
+function createSoundManagerScript() {
+ if(typeof soundManager=="undefined") {
+ onerrorSM2();
+ }else {
+ var script=document.createElement('SCRIPT');
+ var tx=document.createTextNode("soundManager.createMovie();");
+ script.appendChild(tx);
+ document.getElementsByTagName("body")[0].appendChild(script);
+ }
+}
+//soundManager.onload = function() {
+function onloadSM2() {
+ if(!isIE) { //(degrade IE)
+ swfUnloaded = false;
+ preloadSounds();
+ }
+}
+//soundManager.onerror = function() {
+function onerrorSM2() {
+ if(typeof soundManager!="undefined") {
+ soundManager.destruct;
+ delete soundManager;
+ }
+ audioSupport = false; swfUnloaded = true;
+ if(audioError && !isIE && !isOp) {
+ var dv = document.createElement('div'); dv.id = "guru";
+ var d2=document.createElement('div'); dv.appendChild(d2);
+ var tx=document.createTextNode('Guru Meditation - SoundManager failed to load/initialize!');
+ d2.appendChild(tx); document.getElementById('slide0').appendChild(dv);
+ }
+}
+function audioSetup() {
+ if(sound[0]) {
+ playSound(0);
+ }else if(sound[bgSoundItem] && !sound[0]) {
+ playSound(bgSoundItem);
+ }
+}
+function fadeoutSound(ids, option) {
+ if(curSoundID >= 0 && !swfUnloaded) {
+ if(isNaN(ids)) {
+ if(ids == "bgSound") {
+ var cnum = parseInt(bgSoundItem);
+ }else {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && ids == sound[i]["id"]) {
+ var cnum = i;
+ break;
+ }
+ }
+ }
+ }else {
+ var cnum = ids;
+ ids = sound[cnum]["id"];
+ }
+ var vol = getMaxVolume(sound[cnum]["volume"]);
+ var millisec = fadeDuration;
+ var speed = Math.round(millisec / vol);
+ var timer = 0;
+ for(var i = vol; i > 0; i--) {
+ setTimeout("fadeout(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ if(option) setTimeout("stopSound('"+ids+"')",millisec);
+ }
+}
+function fadeout(volume, id) {
+ soundManager.setVolume(id,volume);
+}
+function stopSound(ids) {
+ var sid;
+ if(isNaN(ids)) {
+ sid = ids;
+ }else if(sound[ids]) {
+ sid = sound[ids]["id"];
+ }
+ if(sid!='' && curSoundID >= 0) {
+ soundManager.stop(sid);
+ curSoundID = -1;
+ }
+}
+function toggleSounds() {
+ if(audioSupport && !swfUnloaded) {
+ stopAllSounds();
+ }else if (!audioSupport && !swfUnloaded) {
+ allowSounds();
+ }
+}
+function allowSounds() {
+ if(!swfUnloaded) {
+ audioSupport = true;
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ currentSlide();
+ }
+}
+function stopAllSounds() {
+ if(curSoundID >= 0) {
+ stopSound(curSoundID);
+ }else {
+ soundManager.stopAll();
+ curSoundID = -1;
+ }
+ audioSupport = false;
+ var obj = document.getElementById('audio'); changeClass(obj,'isoff');
+ currentSlide();
+}
+function playSound(id) {
+ if(audioSupport && !swfUnloaded) {
+ var url, sid, vol, lps, cnum;
+ if(isNaN(id)) {
+ sid = id;
+ if(sid == "bgSound") {
+ cnum = parseInt(bgSoundItem);
+ }else {
+ cnum = getSoundID(id);
+ }
+ }else {
+ cnum = parseInt(id);
+ if(sound[cnum]) sid = sound[cnum]["id"];
+ }
+ if(sound[cnum] && sound[cnum]["url"]!='' && sid!=''){
+ url = sound[cnum]["url"];
+ vol = (sound[cnum]["volume"]!='')?getMaxVolume(sound[cnum]["volume"]):getMaxVolume(100);
+ lps = (sound[cnum]["loops"])?true:false;
+ if(lps) {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){soundManager.play(sid,{volume:getMaxVolume(sound[cnum]["volume"])});}});
+ }else {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){curSoundID=-1;}});
+ }
+ }
+ }
+}
+function getSoundID(str) {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && str == sound[i]["id"]) {
+ var id = i;
+ break;
+ }
+ }
+ return id;
+}
+function setVolume() {
+ var vol = document.getElementById('volumelist');
+ if(audioSupport && !swfUnloaded) {
+ audioVolume = parseInt(vol.value);
+ if(curSoundID >= 0) {
+ if(sound[curSoundID]) {
+ var sid = sound[curSoundID]["id"];
+ var vid = getMaxVolume(sound[curSoundID]["volume"]);
+ soundManager.setVolume(sid,vid);
+ }
+ }
+ }
+}
+function getMaxVolume(value) {
+ if(audioVolume>0) {var factor = audioVolume/100;}else {var factor = 0;}
+ return Math.max(0,Math.min(parseInt(value*factor),audioVolume));
+}
+function preloadSounds() {
+ var temp = ''; var parm = ''; var t = ''; var cl = '';
+ var objects = document.getElementsByTagName('object');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].type.toLowerCase() == 'audio/mp3' && objects[i].data != '') {
+ objects[i].width = 0; objects[i].height = 0;
+ if(objects[i].parentNode.tagName == 'DIV') {
+ cl = objects[i].parentNode.className.toLowerCase();
+ if(cl == 'presentation' || cl == 'slide') {
+ if(cl == 'presentation') {
+ t = parseInt(bgSoundItem);
+ }else {
+ t = parseInt(objects[i].parentNode.id.slice(5, objects[i].parentNode.id.length));
+ }
+ sound[t] = new Object();
+ if(t < bgSoundItem) {
+ sound[t]["id"] = objects[i].parentNode.id;
+ }else {
+ sound[t]["id"] = "bgSound";
+ }
+ sound[t]["url"] = objects[i].data;
+ sound[t]["volume"] = 100; sound[t]["loops"] = false;
+ if(objects[i].archive != '') {
+ parm = objects[i].archive.toLowerCase().split(',');
+ for (var j=0; j < parm.length; j++) {
+ if(parm[j] == 'loop') sound[t]["loops"] = true;
+ if(parm[j].search(/^volume/) != -1) {
+ var tmp = parm[j].split(':');
+ sound[t]["volume"] = parseInt(tmp[1]);
+ }
+ }
+ }
+ soundManager.createSound(sound[t]["id"],sound[t]["url"]);
+ }
+ }
+ }
+ }
+}
+// audio extension
+
+// help extension
+function createHelpReq() {
+ if(!document.getElementById("HelpReq")) {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "HelpReq";
+ if (pg.addEventListener) {
+ pg.addEventListener("onclick",dumpHelpReq,false);
+ } else if (pg.attachEvent) {
+ pg.attachEvent("onclick",dumpHelpReq);
+ }
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=90)";
+ } else {
+ pg.style.opacity = 0.9;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(64,64,64)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/help.jpg)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+ if(document.getElementById("HelpReq")) {
+ helpmode = true;
+ }
+ }
+}
+function dumpHelpReq() {
+ if(document.getElementById("HelpReq")) {
+ document.body.removeChild(document.getElementById('HelpReq'));
+ helpmode = false;
+ }
+}
+// help extension
+
+//DEBUG
+function ConsoleLog(value) {
+ if(window.console) {
+ window.console.log(value);
+ }
+}
+//DEBUG
+
+document.write('<style type="text/css" media="screen" id="blockStyle">.presentation, .layout {display: none; }</style>');
+
+if(!isIE && !isOp) {
+ document.write('<script type="text/javascript" src="'+s5Path+'ui/audio_support/soundmanager2.js"></script>');
+ if(typeof soundManager!="undefined") {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'audioDebug') {
+ var audioDebug = (allMetas[i].content == "true") ? true : false;
+ soundManager.defaultOptions.debugMode = audioDebug;
+ }
+ }
+ }
+}
+
+window.onload = createSlideShow;
+window.onresize = function(){setTimeout('windowChange()',5);} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/toggle_link.png
new file mode 100644
index 000000000..4588e2514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/toggle_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/toggle_over.png
new file mode 100644
index 000000000..400f613b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/toggle_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/volume_link.png
new file mode 100644
index 000000000..f362acd1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/volume_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/wrap.css
new file mode 100644
index 000000000..a37315552
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/wrap.css
@@ -0,0 +1,410 @@
+/********************************************************************
+Screen and Print Styles for the Wrap Plugin
+********************************************************************/
+
+/* tables in columns and boxes should span the whole width */
+.wrap_column table,
+.wrap_left table, .wrap_right table, .wrap_center table,
+.wrap_box table,
+.wrap_info table, .wrap_important table, .wrap_alert table, .wrap_tip table, .wrap_help table, .wrap_todo table, .wrap_download table {
+ width: 100%;
+}
+/* emulate a headline */
+.wrap_column em strong,
+.wrap_left em strong, .wrap_right em strong, .wrap_center em strong,
+.wrap_box em strong,
+.wrap_info em strong, .wrap_important em strong, .wrap_alert em strong, .wrap_tip em strong, .wrap_help em strong, .wrap_todo em strong, .wrap_download em strong {
+ font-size: 130%;
+ font-weight: bold;
+ font-style: normal;
+ display: block;
+}
+/* emulate a bigger headline with a bottom border */
+.wrap_column em strong em.u,
+.wrap_left em strong em.u, .wrap_right em strong em.u, .wrap_center em strong em.u,
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ font-size: 115%;
+ border-bottom: 1px solid __border__;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+}
+/* different bigger headline for safety notes */
+.wrap_danger em strong em.u, .wrap_warning em strong em.u, .wrap_caution em strong em.u, .wrap_notice em strong em.u, .wrap_safety em strong em.u {
+ font-size: 115%;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+ text-transform: uppercase;
+ border-bottom-width: 0;
+}
+/* change border colour of emulated headlines inside boxes to something more neutral
+ (to match all the different background colours) */
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ border-bottom-color: #999;
+}
+
+
+/* columns
+********************************************************************/
+
+.wrap_left,
+.wrap_column {
+ float: left;
+ margin-right: 1.5em;
+}
+.wrap_right {
+ float: right;
+ margin-left: 1.5em;
+}
+.wrap_center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+/*
+.wrap_column,
+.wrap_left,
+.wrap_right {
+ overflow: hidden;
+}
+*/
+.wrap_container {
+ margin-right: -1.5em;
+}
+
+
+/* alignments
+********************************************************************/
+
+.wrap_leftalign {
+ text-align: left;
+}
+.wrap_centeralign {
+ text-align: center;
+}
+.wrap_rightalign {
+ text-align: right;
+}
+.wrap_justify {
+ text-align: justify;
+}
+
+
+/* box
+********************************************************************/
+
+/* see styles for boxes and notes with icons in style.css */
+
+/*____________ rounded corners ____________*/
+/* (only for modern browsers) */
+
+div.wrap_round {
+ border-radius: 20px;
+ -moz-border-radius: 20px;
+ -webkit-border-radius: 20px;
+ -khtml-border-radius: 20px;
+}
+span.wrap_round {
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -khtml-border-radius: 2px;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_lo {
+ color: __text_neu__;
+ font-size: 85%;
+}
+div.wrap_em {
+ color: #c00;
+ font-weight: bold;
+}
+
+/* see styles for highlighted text in style.css */
+
+
+/* typography
+********************************************************************/
+
+/*____________ fonts ____________*/
+
+div.wrap_sansserif {
+ font-family: Verdana,Tahoma,Geneva,"DejaVu Sans","Bitstream Vera Sans","Liberation Sans", Arial,Helvetica,FreeSans,"Liberation Sans","Nimbus Sans L", sans-serif;
+}
+div.wrap_serif {
+ font-family: Georgia,Garamond,"Palatino Linotype","Book Antiqua",Palatino,Palladio,"URW Palladio L","Liberation Serif",Didot,Gentium,"Bitstream Charter","Century Schoolbook L", "Times New Roman",Times,"Nimbus Roman No9 L","FreeSerif", serif;
+}
+div.wrap_monospace {
+ font-family: Courier,"Courier New",FreeMono,"Nimbus Mono L","Liberation Mono", "Lucida Console",Monaco,"DejaVu Sans Mono","Bitstream Vera Sans Mono", monospace;
+}
+
+/*____________ font size ____________*/
+
+div.wrap_bigger {
+ font-size: 125%;
+}
+div.wrap_muchbigger {
+ font-size: 200%;
+}
+div.wrap_smaller {
+ font-size: 75%;
+}
+
+/*____________ font colours ____________*/
+
+div.wrap_fgred {
+ color: #900;
+}
+div.wrap_fggreen {
+ color: #090;
+}
+div.wrap_fgblue {
+ color: #009;
+}
+div.wrap_fgcyan {
+ color: #099;
+}
+div.wrap_fgviolet {
+ color: #909;
+}
+div.wrap_fgyellow {
+ color: #990;
+}
+div.wrap_fggrey {
+ color: #666;
+}
+div.wrap_fgblack {
+ color: #000;
+}
+
+/* see styles for background colours and white font colour in style.css */
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ indent ____________*/
+
+div.wrap_indent {
+ padding-left: 1.5em;
+}
+
+/*____________ outdent ____________*/
+
+div.wrap_outdent {
+ margin-left: -1.5em;
+}
+
+/*____________ word wrapping in pre ____________*/
+
+divdiv.wrap_prewrap pre {
+ white-space: pre-wrap;
+ word-wrap: break-word;/* for IE < 8 */
+ /* white-space: -moz-pre-wrap; for FF < 3 */
+}
+
+/*____________ spoiler ____________*/
+
+divdiv.wrap_spoiler {
+ margin-bottom: 1.5em;
+}
+/* see rest of spoiler styles in style.css */
+
+/*____________ clear float ____________*/
+
+div.wrap_clear {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ font-size: 1px;
+ visibility: hidden;
+ overflow: hidden;
+}
+
+/*____________ hide ____________*/
+
+div.wrap_hide {
+ display: none;
+}
+
+
+/* STYLE.CSS */
+
+/* box
+********************************************************************/
+
+.wrap_box {
+ background: __background_alt__;
+ color: __text__;
+/*
+ overflow: hidden;
+*/
+}
+div.wrap_box,
+div.wrap_danger, div.wrap_warning, div.wrap_caution, div.wrap_notice, div.wrap_safety {
+ padding: 1em 1em .5em;
+ margin-bottom: 1.5em;
+}
+span.wrap_box,
+span.wrap_danger, span.wrap_warning, span.wrap_caution, span.wrap_notice, span.wrap_safety {
+ padding: 0 .3em;
+}
+
+/*____________ notes with icons ____________*/
+
+/* general styles for all note divs */
+div.wrap_info, div.wrap_important, div.wrap_alert, div.wrap_tip, div.wrap_help, div.wrap_todo, div.wrap_download {
+ padding: 1em 1em .5em 70px;
+ margin-bottom: 1.5em;
+ min-height: 68px;
+ background-position: 10px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html div.wrap_info, * html div.wrap_important, * html div.wrap_alert, * html div.wrap_tip, * html div.wrap_help, * html div.wrap_todo, * html div.wrap_download {
+ height: 68px;
+}
+/* general styles for all note spans */
+span.wrap_info, span.wrap_important, span.wrap_alert, span.wrap_tip, span.wrap_help, span.wrap_todo, span.wrap_download {
+ padding: 0 2px 0 20px;
+ min-height: 20px;
+ background-position: 2px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html span.wrap_info, * html span.wrap_important, * html span.wrap_alert, * html span.wrap_tip, * html span.wrap_help, * html span.wrap_todo, * html span.wrap_download {
+ height: 20px;
+}
+
+/*____________ info ____________*/
+.wrap_info { background-color: #d1d7df; }
+div.wrap_info { background-image: url(../../../wrap/images/note/48/info.png); }
+span.wrap_info { background-image: url(../../../wrap/images/note/16/info.png); }
+
+/*____________ important ____________*/
+.wrap_important { background-color: #ffd39f; }
+div.wrap_important { background-image: url(../../../wrap/images/note/48/important.png); }
+span.wrap_important { background-image: url(../../../wrap/images/note/16/important.png); }
+
+/*____________ alert ____________*/
+.wrap_alert { background-color: #ffbcaf; }
+div.wrap_alert { background-image: url(../../../wrap/images/note/48/alert.png); }
+span.wrap_alert { background-image: url(../../../wrap/images/note/16/alert.png); }
+
+/*____________ tip ____________*/
+.wrap_tip { background-color: #fff79f; }
+div.wrap_tip { background-image: url(../../../wrap/images/note/48/tip.png); }
+span.wrap_tip { background-image: url(../../../wrap/images/note/16/tip.png); }
+
+/*____________ help ____________*/
+.wrap_help { background-color: #dcc2ef; }
+div.wrap_help { background-image: url(../../../wrap/images/note/48/help.png); }
+span.wrap_help { background-image: url(../../../wrap/images/note/16/help.png); }
+
+/*____________ todo ____________*/
+.wrap_todo { background-color: #c2efdd; }
+div.wrap_todo { background-image: url(../../../wrap/images/note/48/todo.png); }
+span.wrap_todo { background-image: url(../../../wrap/images/note/16/todo.png); }
+
+/*____________ download ____________*/
+.wrap_download { background-color: #d6efc2; }
+div.wrap_download { background-image: url(../../../wrap/images/note/48/download.png); }
+span.wrap_download { background-image: url(../../../wrap/images/note/16/download.png); }
+
+
+/*____________ safety notes ____________*/
+
+.wrap_danger {
+ background-color: #c00;
+ color: #fff;
+}
+.wrap_warning {
+ background-color: #f60;
+ color: #000;
+}
+.wrap_caution {
+ background-color: #ff0;
+ color: #000;
+}
+.wrap_notice {
+ background-color: #06f;
+ color: #fff;
+}
+.wrap_safety {
+ background-color: #090;
+ color: #fff;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_hi {
+ background-color: #ff9;
+}
+
+/* typography
+********************************************************************/
+
+/*____________ font colours ____________*/
+
+div.wrap_fgwhite {
+ color: #fff;
+}
+
+/*____________ background colours ____________*/
+
+div.wrap_bgred {
+ background-color: #fcc;
+}
+div.wrap_bggreen {
+ background-color: #cfc;
+}
+div.wrap_bgblue {
+ background-color: #ccf;
+}
+div.wrap_bgcyan {
+ background-color: #9ff;
+}
+div.wrap_bgviolet {
+ background-color: #f9f;
+}
+div.wrap_bgyellow {
+ background-color: #ff9;
+}
+div.wrap_bggrey {
+ background-color: #ccc;
+}
+div.wrap_bgwhite {
+ background-color: #fff;
+}
+div.wrap_bgblack {
+ background-color: #000;
+}
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ spoiler ____________*/
+
+div.wrap_spoiler {
+ background-color: __background__ !important;
+ color: __background__ !important;
+ border: 1px dotted red;
+}
+
+/*____________ only print ____________*/
+
+div.wrap_onlyprint {
+ display: none;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/zero_link.png
new file mode 100644
index 000000000..5610884d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/zero_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/zero_over.png
new file mode 100644
index 000000000..3a14a577e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/zero_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/audio_link.png
new file mode 100644
index 000000000..daa740c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/audio_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/audio_on.png
new file mode 100644
index 000000000..cd590aae9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/audio_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/audio_over.png
new file mode 100644
index 000000000..cf537a008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/audio_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/auto_link.png
new file mode 100644
index 000000000..1c2ca4817
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/auto_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/auto_on.png
new file mode 100644
index 000000000..4b0c923b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/auto_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/auto_over.png
new file mode 100644
index 000000000..dbea88975
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/auto_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/backgrnd.png
new file mode 100644
index 000000000..0e48413d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/backgrnd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/blank.gif
new file mode 100644
index 000000000..75b945d25
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/blank.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/bodybg.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/bodybg.gif
new file mode 100644
index 000000000..5f448a16f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/bodybg.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/delay_link.png
new file mode 100644
index 000000000..c4d99cd57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/delay_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/exit_link.png
new file mode 100644
index 000000000..1bfd38790
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/exit_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/exit_over.png
new file mode 100644
index 000000000..0fdd1c605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/exit_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/fade_link.png
new file mode 100644
index 000000000..482e4d53e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/fade_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/fade_on.png
new file mode 100644
index 000000000..e12561fb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/fade_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/fade_over.png
new file mode 100644
index 000000000..fb8943c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/fade_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/footer.jpg
new file mode 100644
index 000000000..49370dbba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/footer.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/framing.css
new file mode 100644
index 000000000..14d8509e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/framing.css
@@ -0,0 +1,23 @@
+/* The following styles size, place, and layer the slide components.
+ Edit these if you want to change the overall slide layout.
+ The commented lines can be uncommented (and modified, if necessary)
+ to help you with the rearrangement process. */
+
+/* target = 1024x768 */
+
+div#header, div#footer, .slide {width: 100%; top: 0; left: 0;}
+div#header {top: 0; height: 3em; z-index: 1;}
+div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;}
+.slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;}
+div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;}
+div#controls form {position: absolute; bottom: 0; right: 0; width: 100%;
+ margin: 0;}
+#currentSlide {position: absolute; width: 10%; left: 45%; bottom: 1em; z-index: 10;}
+html>body #currentSlide {position: fixed;}
+
+/*
+div#header {background: #FCC;}
+div#footer {background: #CCF;}
+div#controls {background: #BBD;}
+div#currentSlide {background: #FFC;}
+*/
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/header.png
new file mode 100644
index 000000000..929dabba1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/iepngfix.htc
new file mode 100644
index 000000000..4d90c87a9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/iepngfix.htc
@@ -0,0 +1,42 @@
+<public:component>
+<public:attach event="onpropertychange" onevent="doFix()" />
+
+<script>
+
+// IE5.5+ PNG Alpha Fix v1.0 by Angus Turnbull http://www.twinhelix.com
+// Free usage permitted as long as this notice remains intact.
+
+// This must be a path to a blank image. That's all the configuration you need here.
+var blankImg = 'v11rc1/default/blank.gif';
+
+var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
+
+function filt(s, m) {
+ if (filters[f]) {
+ filters[f].enabled = s ? true : false;
+ if (s) with (filters[f]) { src = s; sizingMethod = m }
+ } else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")';
+}
+
+function doFix() {
+ if ((parseFloat(navigator.userAgent.match(/MSIE (\S+)/)[1]) < 5.5) ||
+ (event && !/(background|src)/.test(event.propertyName))) return;
+
+ if (tagName == 'IMG') {
+ if ((/\.png$/i).test(src)) {
+ filt(src, 'image'); // was 'scale'
+ src = blankImg;
+ } else if (src.indexOf(blankImg) < 0) filt();
+ } else if (style.backgroundImage) {
+ if (style.backgroundImage.match(/^url[("']+(.*\.png)[)"']+$/i)) {
+ var s = RegExp.$1;
+ style.backgroundImage = '';
+ filt(s, 'crop');
+ } else filt();
+ }
+}
+
+doFix();
+
+</script>
+</public:component> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/last_link.png
new file mode 100644
index 000000000..4f158d35d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/last_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/last_over.png
new file mode 100644
index 000000000..a7b629995
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/last_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/list_link.png
new file mode 100644
index 000000000..7e299bb50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/list_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/loop_link.png
new file mode 100644
index 000000000..41e12cb15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/loop_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/loop_on.png
new file mode 100644
index 000000000..2ffcacae1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/loop_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/loop_over.png
new file mode 100644
index 000000000..9fe420153
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/loop_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/next_link.png
new file mode 100644
index 000000000..2b9f44c4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/next_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/next_over.png
new file mode 100644
index 000000000..25788124d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/next_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/notes_link.png
new file mode 100644
index 000000000..bb4a8ae37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/notes_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/notes_over.png
new file mode 100644
index 000000000..c6bfe69fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/notes_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/opera.css
new file mode 100644
index 000000000..9e9d2a3c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/opera.css
@@ -0,0 +1,7 @@
+/* DO NOT CHANGE THESE unless you really want to break Opera Show */
+.slide {
+ visibility: visible !important;
+ position: static !important;
+ page-break-before: always;
+}
+#slide0 {page-break-before: avoid;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/outline.css
new file mode 100644
index 000000000..62db519ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/outline.css
@@ -0,0 +1,15 @@
+/* don't change this unless you want the layout stuff to show up in the outline view! */
+
+.layout div, #footer *, #controlForm * {display: none;}
+#footer, #controls, #controlForm, #navLinks, #toggle {
+ display: block; visibility: visible; margin: 0; padding: 0;}
+#toggle {float: right; padding: 0.5em;}
+html>body #toggle {position: fixed; top: 0; right: 0;}
+
+/* making the outline look pretty-ish */
+
+#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
+#slide0 h1 {padding-top: 1.5em;}
+.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em;
+ border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
+#toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pause_link.png
new file mode 100644
index 000000000..2561cb4a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pause_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pause_on.png
new file mode 100644
index 000000000..2fc9c4a4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pause_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pause_over.png
new file mode 100644
index 000000000..7a7c80ddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pause_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pretty.css
new file mode 100644
index 000000000..f5c2666b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pretty.css
@@ -0,0 +1,156 @@
+/* Following are the presentation styles -- edit away! */
+
+body {background: #FFF url(bodybg.gif) -16px 0 no-repeat; color: #000; font-size: 2em;}
+:link, :visited {text-decoration: none; color: #00C;}
+#controls :active {color: #88A !important;}
+#controls :focus {outline: 1px dotted #227;}
+h1, h2, h3, h4 {font-size: 100%; margin: 0; padding: 0; font-weight: inherit;}
+ul, pre {margin: 0; line-height: 1em;}
+html, body {margin: 0; padding: 0;}
+
+blockquote, q {font-style: italic;}
+blockquote {padding: 0 2em 0.5em; margin: 0 1.5em 0.5em; text-align: center; font-size: 1em;}
+blockquote p {margin: 0;}
+blockquote i {font-style: normal;}
+blockquote b {display: block; margin-top: 0.5em; font-weight: normal; font-size: smaller; font-style: normal;}
+blockquote b i {font-style: italic;}
+
+kbd {font-weight: bold; font-size: 1em;}
+sup {font-size: smaller; line-height: 1px;}
+
+.slide code {padding: 2px 0.25em; font-weight: bold; color: #533;}
+.slide code.bad, code del {color: red;}
+.slide code.old {color: silver;}
+.slide pre {padding: 0; margin: 0.25em 0 0.5em 0.5em; color: #533; font-size: 90%;}
+.slide pre code {display: block;}
+.slide ul {margin-left: 5%; margin-right: 7%; list-style: disc;}
+.slide li {margin-top: 0.75em; margin-right: 0;}
+.slide ul ul {line-height: 1;}
+.slide ul ul li {margin: .2em; font-size: 85%; list-style: square;}
+.slide img.leader {display: block; margin: 0 auto;}
+
+div#header, div#footer {background: #005; color: #AAB;
+ font-family: Verdana, Helvetica, sans-serif;}
+div#header {background: #005 url(bodybg.gif) -16px 0 no-repeat;
+ line-height: 1px;}
+div#footer {font-size: 0.5em; font-weight: bold; padding: 1em 0;}
+#footer h1, #footer h2 {display: block; padding: 0 1em;}
+#footer h2 {font-style: italic;}
+
+div.long {font-size: 0.75em;}
+.slide h1 {position: absolute; top: 0.7em; left: 87px; z-index: 1;
+ margin: 0; padding: 0.3em 0 0 50px; white-space: nowrap;
+ font: bold 150%/1em Helvetica, sans-serif; text-transform: capitalize;
+ color: #DDE; background: #005;}
+.slide h3 {font-size: 130%;}
+h1 abbr {font-variant: small-caps;}
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.note {display: none;}
+.external {border-bottom: 1px dotted gray;}
+html>body .external {border-bottom: none;}
+.external:after {content: " \274F"; font-size: smaller; color: #77B;}
+
+.incremental, .incremental *, .incremental *:after {color: #DDE; visibility: visible;}
+img.incremental {visibility: hidden;}
+.slide .current {color: #B02;}
+
+
+div#controls {position: absolute; left: 0; bottom: 0; width: 100%; text-align: center; font: bold 1em Verdana, Arial, Helvetica, sans-serif;}
+html>body div#controls {background: transparent; position: fixed; padding: 0; top: auto; text-align: center;}
+#controls #sheet {display: none;}
+#controls #controlForm {height: 32px; width: 100%; text-align: center; vertical-align: middle;}
+#controls #navLinks {border-top: 1px solid #999; overflow: hidden; padding: 0; margin: 0; height: 32px; width: 100%; background-color: #808080; text-align: center; vertical-align: middle; white-space: nowrap;}
+#controls #navLinks ul {margin: 0 auto; padding: 0; height: 32px; width: 500px; white-space: nowrap; text-align: center;}
+#controls #navLinks ul li {list-style: none; display: inline; margin: 0; padding: 0; float: left; height: 32px; width: 32px; text-align: center; background-color: transparent;}
+#controls #navLinks ul li.vr {list-style: none; display: inline; margin: 0px 2px; padding: 0; float: left; height: 32px; width: 1px; text-align: center; background-color: #606060;}
+#controls #navLinks ul li a {margin: 0; padding: 0; float: left; height: 32px; width: 32px; background-color: transparent;}
+
+#controls #navLinks ul li#exit {background: url(exit_link.png) no-repeat top left;}
+#controls #navLinks ul li#exit a:hover {background: url(exit_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#toggle {background: url(toggle_link.png) no-repeat top left;}
+#controls #navLinks ul li#toggle a:hover {background: url(toggle_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#show-notes {background: url(notes_link.png) no-repeat top left;}
+#controls #navLinks ul li#show-notes a:hover {background: url(notes_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#zero {background: url(zero_link.png) no-repeat top left;}
+#controls #navLinks ul li#zero a:hover {background: url(zero_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#prev {background: url(prev_link.png) no-repeat top left;}
+#controls #navLinks ul li#prev a:hover {background: url(prev_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#next {background: url(next_link.png) no-repeat top left;}
+#controls #navLinks ul li#next a:hover {background: url(next_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#last {background: url(last_link.png) no-repeat top left;}
+#controls #navLinks ul li#last a:hover {background: url(last_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#lst {background: url(list_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#fade a.isoff {background: url(fade_link.png) no-repeat top left;}
+#controls #navLinks ul li#fade a.ison {background: url(fade_on.png) no-repeat top right;}
+#controls #navLinks ul li#fade a:hover {background: url(fade_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#audio {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.isoff {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.ison {background: url(audio_on.png) no-repeat top right;}
+#controls #navLinks ul li#audio a:hover {background: url(audio_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#vol {background: url(volume_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#auto a.isoff {background: url(auto_link.png) no-repeat top left;}
+#controls #navLinks ul li#auto a.ison {background: url(auto_on.png) no-repeat top right;}
+#controls #navLinks ul li#auto a:hover {background: url(auto_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#pause a.isoff {background: url(pause_link.png) no-repeat top left;}
+#controls #navLinks ul li#pause a.ison {background: url(pause_on.png) no-repeat top right;}
+#controls #navLinks ul li#pause a:hover {background: url(pause_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#loop a.isoff {background: url(loop_link.png) no-repeat top left;}
+#controls #navLinks ul li#loop a.ison {background: url(loop_on.png) no-repeat top right;}
+#controls #navLinks ul li#loop a:hover {background: url(loop_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#del {background: url(delay_link.png) no-repeat top left;}
+
+#jumplist, #volumelist, #delaylist {padding: 0; margin: 0; width: 32px; height: 32px; cursor: n-resize;}
+
+#currentSlide {white-space: nowrap; text-align: center; margin-bottom: -0.5em; font-size: 0.5em; background-color: transparent; color: #999;}
+
+#guru {position: absolute; visibility: visible; left: 0px; top: 0px; padding: 4px; width: 99%; height: auto; text-align: center; background-color: black; z-index: 10;}
+#guru div {border: solid 3px red; padding: 4px; font-family: monospace; font-size: 60%; width: auto; height: auto; color: red; text-align: center;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 0; padding: 0; font: bold 2em Verdana, Arial, Helvetica, sans-serif; font-variant: small-caps; text-shadow: 0.1em 0.1em 0.1em #666; white-space: normal; color: #222; background-color: transparent;}
+#slide0 h2 {font: bold italic 1em Arial, Helvetica, sans-serif; margin: 0.25em;}
+#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.note {display: none;}
+.external {border-bottom: 1px dotted gray;}
+html>body .external {border-bottom: none;}
+.external:after {content: " \274F"; font-size: smaller; color: #999;}
+
+.incremental, .incremental *, .incremental *:after {color: #ccc; visibility: visible;}
+img.incremental, canvas.incremental {visibility: hidden;}
+.slide .current {color: #B02;}
+
+/* diagnostics
+li:after {content: " [" attr(class) "]"; color: #F88;}
+*/
+
+table.piechart, table.barchart, table.linechart { border-spacing: 0.3em 0.15em; }
+table.piechart tr th, table.barchart tr th, table.linechart tr th { white-space: nowrap; }
+table.piechart tr td, table.barchart tr td, table.linechart tr td { vertical-align: top; white-space: nowrap; }
+table.piechart tr td.col, table.barchart tr td.col, table.linechart tr td.col { border-bottom: 1px solid #555; border-right: 1px solid #555; }
+table.fs90 tr td, table.fs90 tr th, div.fs90, pre.fs90, p.fs90 ,ul.fs90 {font-size: 0.9em; }
+table.fs75 tr td, table.fs75 tr th, div.fs75, pre.fs75, p.fs75 ,ul.fs75 {font-size: 0.75em; }
+table.fs66 tr td, table.fs66 tr th, div.fs66, pre.fs66, p.fs66 ,ul.fs66 {font-size: 0.66em; }
+table.fs50 tr td, table.fs50 tr th, div.fs50, pre.fs50, p.fs50 ,ul.fs50 {font-size: 0.5em; }
+
+#soundmanager-debug {position:fixed; top:0px; right:0px; width:30em; height:20em; overflow:auto; border:1px solid red; padding:1em; margin:2em; font-family:"sans serif"; font-size: 12px;color: black; background-color:#f6f6f6; z-index: 100;}
+#soundmanager-debug code {font-size: 11px;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/prev_link.png
new file mode 100644
index 000000000..c31d21350
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/prev_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/prev_over.png
new file mode 100644
index 000000000..6fef4fa52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/prev_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/print.css
new file mode 100644
index 000000000..e7a71d145
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/print.css
@@ -0,0 +1 @@
+/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul {page-break-inside: avoid; visibility: visible !important;} h1 {page-break-after: avoid;} body {font-size: 12pt; background: white;} * {color: black;} #slide0 h1 {font-size: 200%; border: none; margin: 0.5em 0 0.25em;} #slide0 h3 {margin: 0; padding: 0;} #slide0 h4 {margin: 0 0 0.5em; padding: 0;} #slide0 {margin-bottom: 3em;} h1 {border-top: 2pt solid gray; border-bottom: 1px dotted silver;} .extra {background: transparent !important;} div.extra, pre.extra, .example {font-size: 10pt; color: #333;} ul.extra a {font-weight: bold;} p.example {display: none;} #header {display: none;} #footer h1 {margin: 0; border-bottom: 1px solid; color: gray; font-style: italic;} #footer h2, #controls {display: none;} /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .layout, .layout * {display: none !important;} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/s5-core.css
new file mode 100644
index 000000000..86444e041
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/s5-core.css
@@ -0,0 +1,9 @@
+/* Do not edit or override these styles! The system will likely break if you do. */
+
+div#header, div#footer, div#controls, .slide {position: absolute;}
+html>body div#header, html>body div#footer,
+ html>body div#controls, html>body .slide {position: fixed;}
+.handout {display: none;}
+.layout {display: block;}
+.slide, .hideme, .incremental {visibility: hidden;}
+#slide0 {visibility: visible;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/slides.css
new file mode 100644
index 000000000..0786d7dbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/slides.css
@@ -0,0 +1,3 @@
+@import url(s5-core.css); /* required to make the slide show run at all */
+@import url(framing.css); /* sets basic placement and size of slide components */
+@import url(pretty.css); /* stuff that makes the slides look better than blah */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/slides.js
new file mode 100644
index 000000000..510a04c0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/slides.js
@@ -0,0 +1,2812 @@
+// S5 1.3beta7 (18-Apr-2007) advanced version by C. Effenberger
+// Please see http://s5.netzgesta.de/ for more information
+// based on S5 v1.2a1 slides.js -- released into the Public Domain
+// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
+// about all the wonderful and talented contributors to this code!
+// audio extension: soundmanager2 is NOT Public Domain
+// Please see http://www.schillmania.com/projects/soundmanager2/ for information
+
+var undef;
+var slideCSS = '';
+var snum = 0;
+var smax = 1;
+var incpos = 0;
+var number = undef;
+var firstTime = 1;
+var s5mode = true;
+var helpmode = false;
+var defaultView = 'slideshow'; //outline
+var controlVis = 'visible';
+var s5Path = 'lib/plugins/s5reloaded/';
+
+// scalable images extension
+var empx = 0;
+var images = new Array();
+var canvas = new Array();
+var medias = new Array();
+var piecharts = new Array();
+var barcharts = new Array();
+var linecharts = new Array();
+// scalable images extension
+
+// transition extension
+var tranSitions = false;
+var fadeModus = false;
+var fadeDuration = 500;
+var incrDuration = 250;
+var opac = 1;
+var cid = '';
+var nid = '';
+var tid = '';
+var jl = '';
+// transition extension
+
+// autoplay extension
+var autoMatic = false;
+var playLoop = false;
+var playPause = false;
+var autoRun = false;
+var playDelay = 5000;
+var remainDer = 0;
+var incrDelay = 0;
+// autoplay extension
+
+// audio extension
+var sound = new Array();
+var audioSupport = false;
+var audioVolume = 100;
+var audioError = false;
+var swfUnloaded = true;
+var bgSoundItem = 9999;
+var curSoundID = -1;
+// audio extension
+
+// panel extension
+var imgWidth = 32;
+var imgHeight = 32;
+// panel extension
+
+// canvas chart extension
+var canvasSupport = false;
+var ChartData = new Array();
+var colorSlice = new Array();
+var font = document.createElement("img");
+font.setAttribute("src", s5Path+"ui/graphic_support/numeric.png");
+signs = {
+ '0': {sx: 0, sy: 0, sw: 48, sh: 64},
+ '1': {sx: 48, sy: 0, sw: 48, sh: 64},
+ '2': {sx: 96, sy: 0, sw: 48, sh: 64},
+ '3': {sx: 144, sy: 0, sw: 48, sh: 64},
+ '4': {sx: 192, sy: 0, sw: 48, sh: 64},
+ '5': {sx: 240, sy: 0, sw: 48, sh: 64},
+ '6': {sx: 288, sy: 0, sw: 48, sh: 64},
+ '7': {sx: 336, sy: 0, sw: 48, sh: 64},
+ '8': {sx: 384, sy: 0, sw: 48, sh: 64},
+ '9': {sx: 432, sy: 0, sw: 48, sh: 64},
+ '%': {sx: 480, sy: 0, sw: 48, sh: 64},
+ '.': {sx: 528, sy: 0, sw: 24, sh: 64}
+};
+var colorNames= new Array();
+colorNames["black"]="#000000"; colorNames["maroon"]="#800000";
+colorNames["green"]="#008000"; colorNames["olive"]="#808000";
+colorNames["navy"]="#000080"; colorNames["purple"]="#800080";
+colorNames["teal"]="#008080"; colorNames["gray"]="#808080";
+colorNames["silver"]="#C0C0C0"; colorNames["red"]="#FF0000";
+colorNames["lime"]="#00FF00"; colorNames["yellow"]="#FFFF00";
+colorNames["blue"]="#0000FF"; colorNames["fuchsia"]="#FF00FF";
+colorNames["aqua"]="#00FFFF"; colorNames["white"]="#FFFFFF";
+colorNames["aliceblue"]="#F0F8FF"; colorNames["antiquewhite"]="#FAEBD7";
+colorNames["aquamarine"]="#7FFFD4"; colorNames["azure"]="#F0FFFF";
+colorNames["beige"]="#F5F5DC"; colorNames["blueviolet"]="#8A2BE2";
+colorNames["brown"]="#A52A2A"; colorNames["burlywood"]="#DEB887";
+colorNames["cadetblue"]="#5F9EA0"; colorNames["chartreuse"]="#7FFF00";
+colorNames["chocolate"]="#D2691E"; colorNames["coral"]="#FF7F50";
+colorNames["cornflowerblue"]="#6495ED"; colorNames["cornsilk"]="#FFF8DC";
+colorNames["crimson"]="#DC143C"; colorNames["darkblue"]="#00008B";
+colorNames["darkcyan"]="#008B8B"; colorNames["darkgoldenrod"]="#B8860B";
+colorNames["darkgray"]="#A9A9A9"; colorNames["darkgreen"]="#006400";
+colorNames["darkkhaki"]="#BDB76B"; colorNames["darkmagenta"]="#8B008B";
+colorNames["darkolivegreen"]="#556B2F"; colorNames["darkorange"]="#FF8C00";
+colorNames["darkorchid"]="#9932CC"; colorNames["darkred"]="#8B0000";
+colorNames["darksalmon"]="#E9967A"; colorNames["darkseagreen"]="#8FBC8F";
+colorNames["darkslateblue"]="#483D8B"; colorNames["darkslategray"]="#2F4F4F";
+colorNames["darkturquoise"]="#00CED1"; colorNames["darkviolet"]="#9400D3";
+colorNames["deeppink"]="#FF1493"; colorNames["deepskyblue"]="#00BFFF";
+colorNames["dimgray"]="#696969"; colorNames["dodgerblue"]="#1E90FF";
+colorNames["firebrick"]="#B22222"; colorNames["floralwhite"]="#FFFAF0";
+colorNames["forestgreen"]="#228B22"; colorNames["gainsboro"]="#DCDCDC";
+colorNames["ghostwhite"]="#F8F8FF"; colorNames["gold"]="#FFD700";
+colorNames["goldenrod"]="#DAA520"; colorNames["greenyellow"]="#ADFF2F";
+colorNames["honeydew"]="#F0FFF0"; colorNames["hotpink"]="#FF69B4";
+colorNames["indianred"]="#CD5C5C"; colorNames["indigo"]="#4B0082";
+colorNames["ivory"]="#FFFFF0"; colorNames["khaki"]="#F0E68C";
+colorNames["lavender"]="#E6E6FA"; colorNames["lavenderblush"]="#FFF0F5";
+colorNames["lawngreen"]="#7CFC00"; colorNames["lemonchiffon"]="#FFFACD";
+colorNames["lightblue"]="#ADD8E6"; colorNames["lightcoral"]="#F08080";
+colorNames["lightcyan"]="#E0FFFF"; colorNames["lightgoldenrodyellow"]="#FAFAD2";
+colorNames["lightgreen"]="#90EE90"; colorNames["lightgrey"]="#D3D3D3";
+colorNames["lightpink"]="#FFB6C1"; colorNames["lightsalmon"]="#FFA07A";
+colorNames["lightseagreen"]="#20B2AA"; colorNames["lightskyblue"]="#87CEFA";
+colorNames["lightslategray"]="#778899"; colorNames["lightsteelblue"]="#B0C4DE";
+colorNames["lightyellow"]="#FFFFE0"; colorNames["limegreen"]="#32CD32";
+colorNames["linen"]="#FAF0E6"; colorNames["mediumaquamarine"]="#66CDAA";
+colorNames["mediumblue"]="#0000CD"; colorNames["mediumorchid"]="#BA55D3";
+colorNames["ediumpurple"]="#9370D"; colorNames["mediumseagreen"]="#3CB371";
+colorNames["mediumslateblue"]="#7B68EE"; colorNames["mediumspringgreen"]="#00FA9A";
+colorNames["mediumturquoise"]="#48D1CC"; colorNames["mediumvioletred"]="#C71585";
+colorNames["midnightblue"]="#191970"; colorNames["mintcream"]="#F5FFFA";
+colorNames["mistyrose"]="#FFE4E1"; colorNames["moccasin"]="#FFE4B5";
+colorNames["navajowhite"]="#FFDEAD"; colorNames["oldlace"]="#FDF5E6";
+colorNames["olivedrab"]="#6B8E23"; colorNames["orange"]="#FFA500";
+colorNames["orangered"]="#FF4500"; colorNames["orchid"]="#DA70D6";
+colorNames["palegoldenrod"]="#EEE8AA"; colorNames["palegreen"]="#98FB98";
+colorNames["paleturquoise"]="#AFEEEE"; colorNames["palevioletred"]="#DB7093";
+colorNames["papayawhip"]="#FFEFD5"; colorNames["peachpuff"]="#FFDAB9";
+colorNames["peru"]="#CD853F"; colorNames["pink"]="#FFC0CB";
+colorNames["plum"]="#DDA0DD"; colorNames["powderblue"]="#B0E0E6";
+colorNames["rosybrown"]="#BC8F8F"; colorNames["royalblue"]="#4169E1";
+colorNames["saddlebrown"]="#8B4513"; colorNames["salmon"]="#FA8072";
+colorNames["sandybrown"]="#F4A460"; colorNames["seagreen"]="#2E8B57";
+colorNames["seashell"]="#FFF5EE"; colorNames["sienna"]="#A0522D";
+colorNames["skyblue"]="#87CEEB"; colorNames["slateblue"]="#6A5ACD";
+colorNames["slategray"]="#708090"; colorNames["snow"]="#FFFAFA";
+colorNames["springgreen"]="#00FF7F"; colorNames["steelblue"]="#4682B4";
+colorNames["tan"]="#D2B48C"; colorNames["thistle"]="#D8BFD8";
+colorNames["tomato"]="#FF6347"; colorNames["turquoise"]="#40E0D0";
+colorNames["violet"]="#EE82EE"; colorNames["wheat"]="#F5DEB3";
+colorNames["whitesmoke"]="#F5F5F5"; colorNames["yellowgreen"]="#9ACD32";
+var canvas_bgcolor = "";
+var canvas_width = 200;
+var canvas_height = 200;
+var canvas_noshade = 0;
+var canvas_nofill = 0;
+var canvas_noshadow = 0;
+var canvas_htmltext = 0;
+var canvas_imgtext = 0;
+var canvas_notext = 0;
+// canvas chart extension
+
+var s5NotesWindow;
+var s5NotesWindowLoaded = false;
+var previousSlide = 0;
+var presentationStart = new Date();
+var slideStart = new Date();
+
+var countdown = {
+ timer: 0,
+ state: 'pause',
+ start: new Date(),
+ end: 0,
+ remaining: 0
+};
+
+var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
+if(isIE) var notIE7 = parseInt(navigator.appVersion) < 7 ? 1 : 0;
+var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
+var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
+var isS2 = navigator.userAgent.indexOf('Safari') >= 2 ? 1 : 0;
+
+function hasClass(object, className) {
+ if (!object.className) return false;
+ return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
+}
+
+function hasValue(object, value) {
+ if (!object) return false;
+ return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
+}
+
+function removeClass(object,className) {
+ if (!object || !hasClass(object,className)) return;
+ object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
+}
+
+function addClass(object,className) {
+ if (!object || hasClass(object, className)) return;
+ if (object.className) {
+ object.className += ' '+className;
+ } else {
+ object.className = className;
+ }
+}
+
+function changeClass(object,className) {
+ if (!object) return;
+ object.firstChild.className = className;
+}
+
+function GetElementsWithClassName(elementName,className) {
+ var allElements = document.getElementsByTagName(elementName);
+ var elemColl = new Array();
+ for (var i = 0; i< allElements.length; i++) {
+ if (hasClass(allElements[i], className)) {
+ elemColl[elemColl.length] = allElements[i];
+ }
+ }
+ return elemColl;
+}
+
+function isParentOrSelf(element, id) {
+ if (element == null || element.nodeName=='BODY') return false;
+ else if (element.id == id) return true;
+ else return isParentOrSelf(element.parentNode, id);
+}
+
+function nodeValue(node) {
+ var result = "";
+ if (node.nodeType == 1) {
+ var children = node.childNodes;
+ for (var i = 0; i < children.length; ++i) {
+ result += nodeValue(children[i]);
+ }
+ }
+ else if (node.nodeType == 3) {
+ result = node.nodeValue;
+ }
+ return(result);
+}
+
+function slideLabel() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var list = document.getElementById('jumplist');
+ smax = slideColl.length;
+ for (var n = 0; n < smax; n++) {
+ var obj = slideColl[n];
+ var did = 'slide' + n.toString();
+ obj.setAttribute('id',did);
+ var otext = '';
+ var menu = obj.firstChild;
+ if (!menu) continue; // to cope with empty slides
+ while (menu && menu.nodeType == 3) {
+ menu = menu.nextSibling;
+ }
+ if (!menu) continue; // to cope with slides with only text nodes
+ var menunodes = menu.childNodes;
+ for (var o = 0; o < menunodes.length; o++) {
+ otext += nodeValue(menunodes[o]);
+ }
+ list.options[list.length] = new Option(n + ' : ' + otext, n);
+ }
+}
+
+function currentSlide() {
+ var cs, at, fd, ss;
+ if (document.getElementById) {
+ cs = document.getElementById('currentSlide');
+ } else {
+ cs = document.currentSlide;
+ }
+ fd = fadeModus?"F":"&ndash;";
+ ss = audioSupport?"S":"&ndash;";
+ at = (autoMatic?(playPause?"||":(playLoop?"&gt;0":"&gt;|")):"&ndash;&ndash;");
+ cs.innerHTML = '<div id="plink" nowrap="nowrap">' +
+ '<span id="csFade">[' + fd + ss + ']<\/span>&nbsp;' +
+ '<span id="csHere"><strong>' + snum + '<\/strong><\/span>' +
+ '<span id="csSep">\/<\/span>' +
+ '<span id="csTotal">' + (smax-1) + '<\/span>&nbsp;' +
+ '<span id="csAuto">[' + at + ']<\/span>' +
+ '<\/div>';
+
+ if (snum == 0) {
+ cs.style.visibility = 'hidden';
+ } else {
+ cs.style.visibility = 'visible';
+ }
+}
+
+function go(step) {
+ if (document.getElementById('slideProj').disabled || step == 0) return;
+ jl = document.getElementById('jumplist');
+ cid = 'slide' + snum;
+ var ce = document.getElementById(cid);
+ if (incrementals[snum].length > 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ removeClass(incrementals[snum][i], 'current');
+ removeClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ if (step != 'j') {
+ snum += step;
+ lmax = smax - 1;
+ if (snum > lmax) snum = lmax;
+ if (snum < 0) snum = 0;
+ }else {
+ snum = parseInt(jl.value);
+ }
+ nid = 'slide' + snum;
+ var ne = document.getElementById(nid);
+ if (!ne) {
+ ne = document.getElementById('slide0');
+ nid = 'slide0';
+ snum = 0;
+ }
+ if (step < 0) {
+ incpos = incrementals[snum].length
+ }else {
+ incpos = 0;
+ }
+ if (incrementals[snum].length > 0 && incpos == 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ if (hasClass(incrementals[snum][i], 'current')) {
+ incpos = i + 1;
+ }else {
+ addClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ }
+ if (incrementals[snum].length > 0 && incpos > 0) {
+ addClass(incrementals[snum][incpos - 1], 'current');
+ }
+ var guru = document.getElementById('guru');
+ if(guru && snum==0) {
+ guru.style.visibility = 'visible';
+ }else if(guru && snum>0) {
+ guru.style.visibility = 'hidden';
+ }
+ if(tranSitions && s5mode && fadeModus) {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {fadeoutSound(curSoundID,true); } // audio support
+ }
+ changeOpac(0,nid);
+ changeOpac(100,cid);
+ ce.style.visibility = 'visible';
+ shiftOpacity(cid,fadeDuration);
+ window.setTimeout("changeSlides()",fadeDuration);
+ }else {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {stopSound(curSoundID); } // audio support
+ }
+ ce.style.visibility = 'hidden';
+ if (isOp) location.hash = nid;
+ ne.style.visibility = 'visible';
+ finishSlides();
+ }
+}
+
+function changeSlides() {
+ if(nid != cid) changeOpac(100,cid);
+ document.getElementById(cid).style.visibility = 'hidden';
+ document.getElementById(nid).style.visibility = 'visible';
+ if (isOp) location.hash = nid;
+ shiftOpacity(nid,fadeDuration);
+ window.setTimeout("finishSlides()",fadeDuration);
+}
+
+function finishSlides() {
+ jl.selectedIndex = snum;
+ currentSlide();
+ loadNote();
+ permaLink();
+ number = undef;
+ if(sound[getSoundID(nid)]) {
+ playSound(nid); // audio support
+ }else if(sound[bgSoundItem] && curSoundID != bgSoundItem) {
+ playSound(bgSoundItem); // audio support
+ }
+}
+
+function goTo(target) {
+ if (target >= smax || target == snum) return;
+ go(target - snum);
+}
+
+function subgo(step) {
+ if (step > 0) {
+ removeClass(incrementals[snum][incpos - 1],'current');
+ removeClass(incrementals[snum][incpos], 'incremental');
+ if(tranSitions && s5mode && fadeModus) {
+ if(!incrementals[snum][incpos].id) {
+ var tmp = new Date(); tid = "inc" + String(tmp.getTime());
+ incrementals[snum][incpos].id = tid;
+ }else {
+ tid = incrementals[snum][incpos].id;
+ }
+ if(typeof(incrementals[snum][incpos].src) != "undefined" || incrementals[snum][incpos].getContext) {
+ changeOpac(0,tid);
+ addClass(incrementals[snum][incpos],'current');
+ shiftOpacity(tid,incrDuration);
+ setTimeout("nextInc()",incrDuration);
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ } else {
+ incpos--;
+ removeClass(incrementals[snum][incpos],'current');
+ addClass(incrementals[snum][incpos], 'incremental');
+ addClass(incrementals[snum][incpos - 1],'current');
+ loadNote();
+ }
+}
+
+function nextInc() {
+ incpos++;
+ loadNote();
+}
+
+function toggle() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ var guru = document.getElementById('guru');
+ if (!slides.disabled) {
+ stopPlay();
+ if(audioSupport && !swfUnloaded) stopAllSounds();
+ slides.disabled = true;
+ outline.disabled = false;
+ s5mode = false;
+ fontSize(1,'em');
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'visible';
+ }
+ if(guru) guru.style.visibility = 'hidden';
+ } else {
+ slides.disabled = false;
+ outline.disabled = true;
+ s5mode = true;
+ fontScale();
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'hidden';
+ }
+ slideColl[snum].style.visibility = 'visible';
+ if(guru && snum==0) guru.style.visibility = 'visible';
+ }
+}
+
+function showHide(action) {
+ var obj = GetElementsWithClassName('*','hideme')[0];
+ switch (action) {
+ case 's':
+ obj.style.visibility = 'visible';
+ break;
+ case 'h':
+ obj.style.visibility = 'hidden';
+ break;
+ case 'k':
+ if (obj.style.visibility != 'visible') {
+ obj.style.visibility = 'visible';
+ } else {
+ obj.style.visibility = 'hidden';
+ }
+ break;
+ }
+}
+
+function keys(key) {
+ if (!key) {
+ key = event;
+ key.which = key.keyCode;
+ }
+ if (helpmode) {
+ dumpHelpReq();
+ return;
+ }
+ if (key.which == 84 && !isOp) {
+ toggle();
+ return;
+ }
+ if (s5mode) {
+ if (autoMatic) {
+ switch (key.which) {
+ case 70: // f/ading on/off
+ switchFade();
+ break;
+ case 83: // s/ound on/off
+ toggleSounds();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 65: // a/utoplay on/off
+ stopPlay();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 80: // p/ause
+ case 32: // spacebar
+ pausePlay();
+ break;
+ }
+ }else {
+ switch (key.which) {
+ case 8: // backspace = HELP
+ createHelpReq();
+ break;
+ case 10: // return
+ case 13: // enter
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ if(number != undef) {
+ goTo(number);
+ break;
+ }
+ case 32: // spacebar
+ case 34: // page down
+ case 39: // rightkey
+ case 40: // downkey
+ if(number != undef) {
+ go(number);
+ } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ break;
+ case 33: // page up
+ case 37: // leftkey
+ case 38: // upkey
+ if(number != undef) {
+ go(-1 * number);
+ } else if (!incrementals[snum] || incpos <= 0) {
+ go(-1);
+ } else {
+ subgo(-1);
+ }
+ break;
+ case 65: // a/utoplay
+ startPlay();
+ break;
+ case 72: // h
+ case 36: // home
+ goTo(0);
+ break;
+ case 69: // e
+ case 35: // end
+ goTo(smax-1);
+ break;
+ case 70: // f/ade transitions on/off
+ switchFade();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 83: // s/ound support on/off
+ toggleSounds();
+ break;
+ case 27: // escape
+ case 81: // q
+ if(!isOp) byby();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 78: // n
+ createNotesWindow();
+ break;
+ }
+ if (key.which < 48 || key.which > 57) {
+ number = undef;
+ } else {
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
+ }
+ }
+ }
+ return false;
+}
+
+function clicker(e) {
+ number = undef;
+ var target;
+ if (window.event) {
+ target = window.event.srcElement;
+ e = window.event;
+ } else {
+ target = e.target;
+ }
+ if (target.href != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
+ if (!helpmode) {
+ if (!e.which || e.which == 1) {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ }
+ } else {
+ dumpHelpReq();
+ }
+}
+
+function findSlide(hash) {
+ var target = null;
+ var slides = GetElementsWithClassName('*','slide');
+ for (var i = 0; i < slides.length; i++) {
+ var targetSlide = slides[i];
+ if ( (targetSlide.name && targetSlide.name == hash)
+ || (targetSlide.id && targetSlide.id == hash) ) {
+ target = targetSlide;
+ break;
+ }
+ }
+ while(target != null && target.nodeName != 'BODY') {
+ if (hasClass(target, 'slide')) {
+ return parseInt(target.id.slice(5));
+ }
+ target = target.parentNode;
+ }
+ return null;
+}
+
+function slideJump() {
+ if (window.location.hash == null) return;
+ var sregex = /^#slide(\d+)$/;
+ var matches = sregex.exec(window.location.hash);
+ var dest = null;
+ if (matches != null) {
+ dest = parseInt(matches[1]);
+ } else {
+ dest = findSlide(window.location.hash.slice(1));
+ }
+ if (dest != null)
+ go(dest - snum);
+}
+
+function fixLinks() {
+ var thisUri = window.location.href;
+ thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
+ var aelements = document.getElementsByTagName('A');
+ for (var i = 0; i < aelements.length; i++) {
+ var a = aelements[i].href;
+ var slideID = a.match('\#slide[0-9]{1,2}');
+ if ((slideID) && (slideID[0].slice(0,1) == '#')) {
+ var dest = findSlide(slideID[0].slice(1));
+ if (dest != null) {
+ if (aelements[i].addEventListener) {
+ aelements[i].addEventListener("click", new Function("e",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "if (e.preventDefault) e.preventDefault();"), true);
+ } else if (aelements[i].attachEvent) {
+ aelements[i].attachEvent("onclick", new Function("",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "event.returnValue = false;"));
+ }
+ }
+ }
+ }
+}
+
+function externalLinks() {
+ if (!document.getElementsByTagName) return;
+ var anchors = document.getElementsByTagName('a');
+ for (var i=0; i<anchors.length; i++) {
+ var anchor = anchors[i];
+ if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
+ anchor.target = '_blank';
+ addClass(anchor,'external');
+ }
+ }
+}
+
+function permaLink() {
+ document.getElementById('plink').href = window.location.pathname + '#slide' + snum;
+}
+
+function createControls() {
+ var controlsDiv = document.getElementById("controls");
+ if (!controlsDiv) return;
+ var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
+ var hideDiv, hideList = '';
+ if (controlVis == 'hidden') {
+ hideDiv = hider;
+ } else {
+ hideList = hider;
+ }
+ if(isOp) {
+ var str = '';
+ }else {
+ var str = '<a accesskey="t" id="sheet" title="toggle CSS" href="javascript:toggle();">&plusmn;<\/a>';
+ }
+ if(isIE) {
+ var tmp = "move around&xA0;until the color&xA0;change to red!";
+ }else if(isS2) {
+ var tmp = "move around\r\nuntil the color\r\nchange to red!";
+ }else {
+ var tmp = "move around until color change to red!";
+ }
+ if(isIE) {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] for keyboard help!"><ul>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst" style="vertical-align: middle; width: 160px;"><select style="cursor: auto; width: 160px; height: auto;" id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del" style="vertical-align: middle; width: 52px;"><select style="cursor: auto; width: 52px; height: auto;" id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul><\/div><\/form>';
+ }else {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] or double click this area for keyboard help!" ondblclick="createHelpReq();"><ul>' +
+ '<li id="exit"><a href="javascript:byby();" accesskey="q" title="exit Show"><\/a><\/li>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li class="vr"><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst"><a id="list" style="cursor:wait;" title="' + tmp + '"><\/a><select id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="fadeLinks" class="vr"><\/li>' +
+ '<li id="fade"><a class="isoff" href="javascript:switchFade();" accesskey="f" title="Transions"><\/a><\/li>' +
+ '<li id="audioLinks" class="vr"><\/li>' +
+ '<li id="audio"><a class="isoff" href="javascript:toggleSounds();" accesskey="s" title="Sounds" ><\/a><\/li>' +
+ '<li id="vol"><a id="volume" style="cursor:wait;" title="' + tmp + '"><\/a><select id="volumelist" title="select Volume" onchange="setVolume();"><option value="100">100<\/option><option value="90">90<\/option><option value="80">80<\/option><option value="70">70<\/option><option value="60">60<\/option><option value="50">50<\/option><option value="40">40<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="10">10<\/option><option value="0">0<\/option><\/select><\/li>' +
+ '<li id="autoLinks" class="vr"><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del"><a id="delay" style="cursor:wait;" title="' + tmp + '"><\/a><select id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul>' +
+ '<a href="http://s5.netzgesta.de" target="_blank" title="S5 Reloaded"><img style="position: absolute; right: 0; bottom: 0;" src="data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAYAAAASYli2AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAYpSURBVHjaYvz//z8DOYCRkZEZRAEx0Ij/f2HiAAHEgqYIpACkkB1J7g8Q/wLRIJ1QNSB5fiDmAOLvQKHPQPoHSB4ggFiQDGMCUnxALAPECkAsBLIdiD8A8SMgfghU8wlqkTgQK1ZVVWldv3792fr16y8D+c9AhgMEECPIy1DDRIDYAojdzMzMWNXV1UG2/v/y5Qvzw4cPP587d24/kH8Gar/uwoULQ+/cufNFXFyciZmZ+UVmZuZKoFmvAQII5kJOIDbi4uKK2Llz53EbG5vP6GGWn5+vMWnSpJtA5jcg5v327Rtnc3PzfSD79+rVq2WBNBtIHUAAwQzkAWKzBQsWnIUZFhISovXmzZsfkpKSDD09PY8kJCR+QtWCguGvrKwsz7Rp07Q4ODh+srCwgILiH0gSIIBgBrICsUBoaCgorBiANgqvXbtWDMg8AcQf9+7d+x0o9xbI/gJV/3fVqlUvmJiY/gIdcaWhoYETahEDQADBDPwNxO9h3gNpBiq6f/HiRbWjR4+yvnr16grQNbeh6kCWsxkYGIhClT8yNDQUgyYhBoAAYoIKfgXi06mpqUowQ+vr6x+uW7fu0suXL8+uWbOGS0BAwB7kC6jXvqmoqLDIyclxzZo1S4udnR2WtBgAAggWyyCXSgOxZUxMjGpWVtY7S0vLr8iRsnnzZl4/P7/DQCYoYtSA2DApKUkVGNNPDh06dBrIvwU06xNAAMEM5AIKqAOxCjQsmHl5eXWdnJx4N2zYcB4prd4CUpfwJRuAAGJCimULoGYpbm5uZ5DBnz9/5tq4caPWkSNHeJEc+g0aTFzfv3/nACabjzk5OW8FBQVloLmHASCAYJECUiTg7+//HJiQTzY2NsrfvXv3n7m5+T5YMgJGEkjDS2gY/pKRkeHt7Ow0Bsb0v9+/fz+HxTJAAMG8DHKFLTC9aRUXF79BT9Qgw4CWHAAy70FdYgjEDgkJCTpWVlYMQBfeAaaMPqBZbwECCGYgMzQGQSleCehS0X///jEDvf9lxYoVoOTyAIjfANX+BqrlBrL1gLFf09vb+0FaWvoHMBctA6USUKQABBAjrPiCliKg7AOKIG5ougLlju9Ipc1foDJWqMWGhYWFtsBg4RISEnrg5uY2BWQgQACxIBkGMkQKijmRfPwXWuI8ASp7DQ1vEP4DDO8PwBzzDJheT0CLPQaAAEJOh0o8zAzeihwMiv+gGZ0B4sz/bIwM797/YTh1/wfDIWj5qAfMmtFnzpz5ICIiwqKoqPgjKChoOtCs5wABhJyXpUCGzddgOIethJ71jEFi1nNwgQrKz8zv37//097eDop15qVLl0pAzWAACCAWhEMYOJFdduELA++b3wxsTIwMfzmYGH6xMDG8gYYpKAg+cnJy/gB6VwuYZFiA7E+wvAwQQCy46ozexwzG17+BYx6UVE4B8Vmo68CRFR0dDQo3UAHBBUwJ4lCLGAACCNnAv4zQxAkCxbIMZ0EuBIYb98EPDFo3voGTzjOogVzArGf969cvNmC2+wssHD7BDAQIIBakmHwPDPy3MAMNeBhgpfbbVEkGhqQbDJaXvjI8BPJB4jz79u37DcwlP+fPn38NuTwECCBkA1+8+8Nwtusxg+STHwwcP/8z8EuwMXA1KjBcBSlwEmRgBhrID/U2O7QMBIEHxsbGkrAwBAggmIGgNMT64AfDWyB+By0EQMVZlC0/wwsXQYa38hzgCGGBWv5ZU1OT4c+fP8yLFi1SA3r5Haw8BAggmIGg5KBpJ8BgeOYTg8S3f2DN/OxMDNwgw0AKnv0EJ+avsITu7u6+EZqzQEHwHFqaMwAEEAtShS/pLcTwrU+Z4QwsyQANOwIL06tfGV5BqwmQWoGKigoLYJnJvWPHjhstLS169vb2M0DqAAIIVh6CXHT/9ndIawEUITCXgUDrQwbGbe8YjkJdAzZQVVVV/t69e8LAgtUYaNgxWKQABBByacMHzfTK9gIMYkBZpj//GT4c+8gAKm1AsfseqPYPtHTXAtaEacBqlgHoyq+srKw3XV1dFwHlvwEEECNyYwmp3cIJjbUf0DbLP7RGEg+0bcMCjQxQzH8BWQgQQIzktr5wAYAAYmKgMgAIMAAp8Fx3osz1lgAAAABJRU5ErkJggg==" width="20" height="32" alt="S5" \/><\/a>' +
+ '<\/div><\/form>';
+ }
+ if (controlVis == 'hidden') {
+ var hidden = document.getElementById('navLinks');
+ } else {
+ var hidden = document.getElementById('jumplist');
+ }
+ addClass(hidden,'hideme');
+}
+
+function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
+ if (!s5mode && !isOp) return false;
+ var hScreen = screen.width; var vScreen = screen.height;
+ var vWindow = window.outerHeight; var hWindow = window.outerWidth;
+ if (isOp && s5mode && defaultView=='slideshow' && ((hScreen != hWindow) || (vScreen != vWindow))) {
+ toggle();
+ return false;
+ }
+ if (isOp && !s5mode && ((hScreen != hWindow) || (vScreen != vWindow))) return false;
+ if (isOp && !s5mode && (hScreen == hWindow) && (vScreen == vWindow)) toggle();
+ var vScale = 48; // both yield 16 (the usual browser default) at 1024x768
+ var hScale = 64; // perhaps should auto-calculate based on theme's declared value?
+ if (window.innerHeight) {
+ var vSize = window.innerHeight;
+ var hSize = window.innerWidth;
+ } else if (document.documentElement.clientHeight) {
+ var vSize = document.documentElement.clientHeight;
+ var hSize = document.documentElement.clientWidth;
+ } else if (document.body.clientHeight) {
+ var vSize = document.body.clientHeight;
+ var hSize = document.body.clientWidth;
+ } else {
+ var vSize = 700; // assuming 1024x768, minus chrome and such equals 8:5
+ var hSize = 1024; // these do not account for kiosk mode or Opera Show
+ }
+ var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
+ extendImgSizes(newSize); // scalable images extension
+ extendCanSizes(newSize); // scalable canvas extension
+ extendObjSizes(newSize); // scalable object extension
+ fontSize(newSize,"px");
+ if(!isS2 || firstTime==0) {
+ generateCanvas(); // dynamic canvas extension
+ }
+ if (isGe) { // hack to counter incremental reflow bugs
+ var obj = document.getElementsByTagName('body')[0];
+ obj.style.visibility = 'hidden';
+ obj.style.display = 'none';
+ obj.style.display = 'block';
+ obj.style.visibility = 'visible';
+ changeOpac(100,'slide' + snum);
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("fixReflow()",10);
+ }else {
+ setListPos(); // invisible select extension
+ }
+}
+
+function fixReflow() {
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("finishReflow()",10);
+}
+function finishReflow() {
+ setListPos(); // invisible select extension
+}
+
+function fontSize(val,fmt) {
+ var value = val + fmt;
+ if (!(s5ss = document.getElementById('s5ss'))) {
+ if (!document.createStyleSheet) {
+ document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
+ s5ss.setAttribute('media','screen, projection');
+ s5ss.setAttribute('id','s5ss');
+ } else {
+ document.createStyleSheet();
+ document.s5ss = document.styleSheets[document.styleSheets.length - 1];
+ }
+ }
+ if (!(document.s5ss && document.s5ss.addRule)) {
+ while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
+ s5ss.appendChild(document.createTextNode('html {font-size: ' + value + ' !important;}'));
+ } else {
+ document.s5ss.addRule('html','font-size: ' + value + ' !important;');
+ }
+}
+
+function windowChange() {
+ fontScale();
+}
+
+function notOperaFix() {
+ slideCSS = document.getElementById('slideProj').href;
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ slides.setAttribute('media','screen');
+ outline.disabled = true;
+ if (isGe) {
+ slides.setAttribute('href','null'); // Gecko fix
+ slides.setAttribute('href',slideCSS); // Gecko fix
+ }
+ if ((isIE && notIE7) && document.styleSheets && document.styleSheets[0]) {
+ document.styleSheets[0].addRule('img', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('div', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('.slide', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ }
+}
+
+function getIncrementals(obj) {
+ var incrementals = new Array();
+ if (!obj)
+ return incrementals;
+ var children = obj.childNodes;
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ if (hasClass(child, 'incremental')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'incremental');
+ for (var j = 0; j < child.childNodes.length; j++) {
+ if (child.childNodes[j].nodeType == 1) {
+ addClass(child.childNodes[j], 'incremental');
+ }
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ removeClass(child,'incremental');
+ }
+ }
+ if (hasClass(child, 'show-first')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'show-first');
+ if (child.childNodes[isGe].nodeType == 1) {
+ removeClass(child.childNodes[isGe], 'incremental');
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ }
+ }
+ incrementals = incrementals.concat(getIncrementals(child));
+ }
+ return incrementals;
+}
+
+function createIncrementals() {
+ var incrementals = new Array();
+ for (var i = 0; i < smax; i++) {
+ incrementals[i] = getIncrementals(document.getElementById('slide'+i));
+ }
+ return incrementals;
+}
+
+function trap(e) {
+ if (!e) {
+ e = event;
+ e.which = e.keyCode;
+ }
+ try {
+ modifierKey = e.ctrlKey || e.altKey || e.metaKey;
+ }
+ catch(e) {
+ modifierKey = false;
+ }
+ return modifierKey || e.which == 0;
+}
+
+// notes extension
+function noteLabel() { // Gives notes id's to match parent slides
+ var notes = GetElementsWithClassName('div','notes');
+ for (var i = 0; i < notes.length; i++) {
+ var note = notes[i];
+ var id = 'note' + note.parentNode.id.substring(5);
+ note.setAttribute('id',id);
+ }
+ resetElapsedSlide();
+ resetRemainingTime();
+ window.setInterval('updateElaspedTime()', 1000);
+}
+
+function createNotesWindow() { // creates a window for our notes
+ if (!s5NotesWindow || s5NotesWindow.closed) { // Create the window if it doesn't exist
+ s5NotesWindowLoaded = false;
+ // Note: Safari has a tendency to ignore window options preferring to default to the settings of the parent window, grr.
+ s5NotesWindow = window.open(s5Path+'ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0');
+ }
+ if (s5NotesWindowLoaded) { // Load the current note if the Note HTML has loaded
+ loadNote();
+ } else { // Keep trying...
+ window.setTimeout('createNotesWindow()', 50);
+ }
+}
+
+function loadNote() {
+// Loads a note into the note window
+ var notes = nextNotes = '<em class="disclaimer">There are no notes for this slide.</em>';
+ if (document.getElementById('note' + snum)) {
+ notes = document.getElementById('note' + snum).innerHTML;
+ }
+ if (document.getElementById('note' + (snum + 1))) {
+ nextNotes = document.getElementById('note' + (snum + 1)).innerHTML;
+ }
+
+ var jl = document.getElementById('jumplist');
+ var slideTitle = jl.options[jl.selectedIndex].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex) ? ' (' + jl.selectedIndex + '/' + (smax - 1) + ')' : '');
+ if (incrementals[snum].length > 0) {
+ slideTitle += ' <small>[' + incpos + '/' + incrementals[snum].length + ']</small>';
+ }
+ if (jl.selectedIndex < smax - 1) {
+ var nextTitle = jl.options[jl.selectedIndex + 1].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex + 1) ? ' (' + (jl.selectedIndex + 1) + '/' + (smax - 1) + ')' : '');
+ } else {
+ var nextTitle = '[end of slide show]';
+ }
+
+ if (s5NotesWindow && !s5NotesWindow.closed && s5NotesWindow.document) {
+ s5NotesWindow.document.getElementById('slide').innerHTML = slideTitle;
+ s5NotesWindow.document.getElementById('notes').innerHTML = notes;
+ s5NotesWindow.document.getElementById('next').innerHTML = nextTitle;
+ s5NotesWindow.document.getElementById('nextnotes').innerHTML = nextNotes;
+ }
+ resetElapsedSlide();
+}
+
+function minimizeTimer(id) {
+ var obj = s5NotesWindow.document.getElementById(id);
+ if (hasClass(obj,'collapsed')) {
+ removeClass(obj,'collapsed');
+ } else {
+ addClass(obj,'collapsed');
+ }
+}
+
+function resetElapsedTime() {
+ presentationStart = new Date();
+ slideStart = new Date();
+ updateElaspedTime();
+}
+
+function resetElapsedSlide() {
+ if (snum != previousSlide) {
+ slideStart = new Date();
+ previousSlide = snum;
+ updateElaspedTime();
+ }
+}
+
+function updateElaspedTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var now = new Date();
+ var ep = s5NotesWindow.document.getElementById('elapsed-presentation');
+ var es = s5NotesWindow.document.getElementById('elapsed-slide');
+ ep.innerHTML = formatTime(now.valueOf() - presentationStart.valueOf());
+ es.innerHTML = formatTime(now.valueOf() - slideStart.valueOf());
+}
+
+function resetRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var startField = s5NotesWindow.document.getElementById('startFrom');
+ startFrom = readTime(startField.value);
+ countdown.remaining = startFrom * 60000; // convert to msecs
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var timeLeft = formatTime(countdown.remaining);
+ tl.innerHTML = timeLeft;
+}
+
+function updateRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var now = new Date();
+ if (countdown.state == 'run') {
+ countdown.remaining = countdown.end - now;
+ }
+ tl.style.color = '';
+ tl.style.backgroundColor = '';
+ if (countdown.remaining >= 0) {
+ var timeLeft = formatTime(countdown.remaining);
+ removeClass(tl,'overtime');
+ if (countdown.remaining < 300000) {
+ tl.style.color = 'rgb(' + (255-Math.round(countdown.remaining/2000)) + ',0,0)';
+ tl.style.backgroundColor = 'rgb(255,255,' + (Math.round(countdown.remaining/2000)) + ')';
+ }
+ } else {
+ var timeLeft = '-' + formatTime(-countdown.remaining);
+ addClass(tl,'overtime');
+ }
+ tl.innerHTML = timeLeft;
+}
+
+function toggleRemainingTime() {
+ if (countdown.state == 'pause') countdown.state = 'run'; else countdown.state = 'pause';
+ if (countdown.state == 'pause') {
+ window.clearInterval(countdown.timer);
+ }
+ if (countdown.state == 'run') {
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ countdown.timer = window.setInterval('updateRemainingTime()', 1000);
+ }
+}
+
+function alterRemainingTime(amt) {
+ var change = amt * 60000; // convert to msecs
+ countdown.end += change;
+ countdown.remaining += change;
+ updateRemainingTime();
+}
+
+function formatTime(msecs) {
+ var time = new Date(msecs);
+
+ var hrs = time.getUTCHours() + ((time.getUTCDate() -1) * 24); // I doubt anyone will spend more than 24 hours on a presentation or single slide but just in case...
+ hrs = (hrs < 10) ? '0'+hrs : hrs;
+ if (hrs == 'NaN' || isNaN(hrs)) hrs = '--';
+
+ var min = time.getUTCMinutes();
+ min = (min < 10) ? '0'+min : min;
+ if (min == 'NaN' || isNaN(min)) min = '--';
+
+ var sec = time.getUTCSeconds();
+ sec = (sec < 10) ? '0'+sec : sec;
+ if (sec == 'NaN' || isNaN(sec)) sec = '--';
+
+ return hrs + ':' + min + ':' + sec;
+}
+
+function readTime(val) {
+ var sregex = /:/;
+ var matches = sregex.exec(val);
+ if (matches == null) {
+ return val;
+ } else {
+ var times = val.split(':');
+ var hours = parseInt(times[0]);
+ var mins = parseInt(times[1]);
+ var total = (hours * 60) + mins;
+ return total;
+ }
+}
+// notes extension
+
+// startup process
+function createSlideShow() {
+ defaultCheck();
+ if(!isIE) createDetector(); // (degrade IE) scalable images extension
+ if(opac!=0 || isIE) { // &&!isIE (degrade IE)
+ tranSitions = false;
+ fadeModus = false;
+ }
+ if(tranSitions && document.getElementById && document.createElement){
+ createProgress();
+ var nop=document.getElementById('StartupControl');
+ nop.onload = dumpProgress;
+ }else {
+ startup();
+ showAll();
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+ }
+}
+
+function defaultCheck() {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'defaultView') {
+ defaultView = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'controlVis') {
+ controlVis = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'tranSitions') {
+ tranSitions = (allMetas[i].content == "true") ? true : false;
+ fadeModus = (tranSitions == true) ? true : false;
+ }
+ if (allMetas[i].name == 'fadeDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ fadeDuration = Math.max(200,Math.min(tmp,2000));
+ }
+ if (allMetas[i].name == 'incrDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ incrDuration = Math.max(50,Math.min(tmp,500));
+ }
+ if (allMetas[i].name == 'autoMatic') {
+ autoMatic = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playLoop') {
+ playLoop = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playDelay') {
+ var tmp = parseInt(allMetas[i].content);
+ playDelay = Math.max(5,Math.min(tmp,90))*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ }
+ if (allMetas[i].name == 'audioSupport') {
+ audioSupport = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'audioVolume') {
+ var tmp = parseInt(allMetas[i].content);
+ audioVolume = Math.max(0,Math.min(tmp,100));
+ }
+ if (allMetas[i].name == 'audioError') {
+ audioError = (allMetas[i].content == "true") ? true : false;
+ }
+ }
+}
+
+function createProgress() {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "StartupProgress";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=100)";
+ }else {
+ pg.style.opacity = 1.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/progress.gif)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+
+ var im = document.createElement('img');
+ im.id = "StartupControl";
+ im.src = s5Path+"ui/graphic_support/blank.gif?" + new Date().valueOf();
+ document.getElementsByTagName("body")[0].appendChild(im);
+}
+
+function startup() {
+ createControls(); // hallvord
+ slideLabel();
+ incrementals = createIncrementals();
+ noteLabel(); // [SI:060104] must follow slideLabel()
+ loadNote();
+ fixLinks();
+ externalLinks();
+ fontScale();
+ if (!isOp) {
+ if(isIE) {
+ document.getElementById('lst').style.backgroundImage = 'none';
+ document.getElementById('del').style.backgroundImage = 'none';
+ }else {
+ document.getElementById('audio').style.backgroundImage = 'none';
+ }
+ notOperaFix();
+ }else if(isOp) {
+ var obj = document.getElementById('exit');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('exit').style.opacity = 0.5;
+ obj = document.getElementById('toggle');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('toggle').style.opacity = 0.5;
+ document.getElementById('jumplist').style.visibility = 'hidden';
+ document.getElementById('list').style.visibility = 'hidden';
+ document.getElementById('lst').style.opacity = 0.5;
+ obj = document.getElementById('audio');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('audio').style.opacity = 0.5;
+ document.getElementById('volumelist').style.visibility = 'hidden';
+ document.getElementById('volume').style.visibility = 'hidden';
+ document.getElementById('vol').style.opacity = 0.5;
+ document.getElementById('delaylist').style.visibility = 'hidden';
+ document.getElementById('delay').style.visibility = 'hidden';
+ document.getElementById('del').style.opacity = 0.5;
+ }
+ slideJump();
+ if (defaultView == 'outline') toggle();
+ document.onkeyup = keys;
+ document.onkeypress = trap;
+ document.onclick = clicker;
+}
+
+function preloadImgages() {
+ var temp = '';
+ var objects = document.getElementsByTagName('img');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].src != '') {
+ temp = new Image();
+ temp.src = objects[i].src;
+ }
+ }
+}
+
+function showAll() {
+ var obj1 = GetElementsWithClassName('div','presentation')[0];
+ if(!obj1) var obj1 = GetElementsWithClassName('ol','presentation')[0];
+ var obj2 = GetElementsWithClassName('div','layout')[0];
+ if(!obj1){}else {obj1.style.display = 'block'};
+ if(!obj2){}else {obj2.style.display = 'block'};
+}
+
+function dumpProgress() {
+ document.body.removeChild(document.getElementById('StartupControl'));
+ startup();
+ preloadImgages();
+ showAll();
+ createSoundManagerScript();
+ shiftOpacity('StartupProgress',1000);
+ window.setTimeout("removeProgress()",1000);
+}
+
+function removeProgress() {
+ document.body.removeChild(document.getElementById('StartupProgress'));
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+}
+function panelSetup() {
+ if(playPause) {
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ if(playLoop) {
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ if(audioSupport && !isIE && !isOp) {
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ }
+ if(fadeModus && !isIE) {
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ if(autoMatic) {
+ var obj = document.getElementById('auto'); changeClass(obj,'ison');
+ startPlay();
+ }
+ if(audioVolume && !isIE && !isOp) {
+ var idx = 0;
+ if(audioVolume >= 95 && audioVolume <= 100) {idx = 0;}
+ else if(audioVolume >= 85 && audioVolume < 95) {idx = 1;}
+ else if(audioVolume >= 75 && audioVolume < 85) {idx = 2;}
+ else if(audioVolume >= 65 && audioVolume < 75) {idx = 3;}
+ else if(audioVolume >= 55 && audioVolume < 65) {idx = 4;}
+ else if(audioVolume >= 45 && audioVolume < 55) {idx = 5;}
+ else if(audioVolume >= 35 && audioVolume < 45) {idx = 6;}
+ else if(audioVolume >= 25 && audioVolume < 35) {idx = 7;}
+ else if(audioVolume >= 15 && audioVolume < 25) {idx = 8;}
+ else if(audioVolume >= 5 && audioVolume < 15) {idx = 9;}
+ else {idx = 10;}
+ document.getElementById('volumelist').selectedIndex = idx;
+ }
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+}
+// startup process
+
+// shutdown process
+function byby() {
+ stopPlay();
+ if(tranSitions && fadeModus && s5mode && !isOp) {
+ fadeoutSound(curSoundID,true); // audio support
+ var pg = document.createElement('div');
+ pg.id = "GoodBy";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=0)";
+ }else {
+ pg.style.opacity = 0.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/finish.gif)";
+ document.getElementsByTagName("body")[0].appendChild(pg);
+ shiftOpacity('GoodBy',1000);
+ window.setTimeout("history.back()",1000);
+ }else {
+ stopSound(curSoundID);
+ history.back();
+ }
+}
+// shutdown process
+
+// scalable images extension
+function createDetector() {
+ var em = document.createElement('div');
+ em.id='EMSizeControl'; em.style.position="absolute"; em.style.left="-999px";
+ em.style.width="1em"; em.style.height="1em"; em.style.opacity=0.0;
+ document.getElementsByTagName("body")[0].appendChild(em);
+ var nop=document.getElementById('EMSizeControl');
+ if(!nop||findPosX(nop)!=-999) {}else {
+ opac=document.getElementById('EMSizeControl').style.opacity;
+ empx=document.getElementById('EMSizeControl').offsetHeight;
+ document.body.removeChild(document.getElementById('EMSizeControl'));
+ var objects = document.getElementsByTagName('img');
+ var j = 0; var i = 0; var k = 0; var d; var obj;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ images[j] = objects[i];
+ ++j;
+ }
+ }
+ var objects = document.getElementsByTagName('canvas'); j = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ canvas[objects[i].id] = objects[i];
+ if(j==0) {
+ if(objects[i].getContext) {
+ canvasSupport = true;
+ }
+ ++j;
+ }
+ }
+ }
+ if(canvasSupport!=true) {
+ for (d in canvas) {
+ try {
+ canvas[d].setAttribute("width",1);
+ canvas[d].setAttribute("height",1);
+ } catch (e) {
+ }
+ }
+ }
+ var objects = document.getElementsByTagName('table');
+ j = 0; k = 0; l = 0; var w; var h; var tmp; var cnt;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^piechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ piecharts[j] = objects[i];
+ em = piecharts[j].getAttribute("summary");
+ if(em != "") em = "," + em;
+ piecharts[j].setAttribute("summary", w + "," + h + em);
+ ++j;
+ }
+ }
+ }
+ if(objects[i].className.match(/^barchart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ barcharts[k] = objects[i];
+ em = barcharts[k].getAttribute("summary");
+ if(em != "") em = "," + em;
+ barcharts[k].setAttribute("summary", w + "," + h + em);
+ ++k;
+ }
+ }
+ }
+ if(objects[i].className.match(/^linechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ linecharts[l] = objects[i];
+ em = linecharts[l].getAttribute("summary");
+ if(em != "") em = "," + em;
+ linecharts[l].setAttribute("summary", w + "," + h + em);
+ ++l;
+ }
+ }
+ }
+ }
+ objects = document.getElementsByTagName('object'); j = 0; i = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ medias[j] = objects[i]; ++j;
+ if(!isIE) {
+ if(objects[i].getAttributeNode("classid")) objects[i].removeAttributeNode(objects[i].getAttributeNode("classid"));
+ if(objects[i].getAttributeNode("codebase")) objects[i].removeAttributeNode(objects[i].getAttributeNode("codebase"));
+ }
+ }
+ }
+ }
+}
+function extendImgSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < images.length; i++) {
+ w=images[i].getAttribute("width",0);
+ h=images[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ images[i].style.width=Math.floor(w*q)+"px";
+ images[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+
+function extendCanSizes(f) {
+ if(empx>0 && canvasSupport) {
+ var q = (f/empx); var w = 0; var h = 0; var tmp = ""; var cnt; var obj;
+ for(var i=0; i < piecharts.length; i++) {
+ if(piecharts[i].getAttribute("summary")) {
+ tmp = piecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = piecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < barcharts.length; i++) {
+ if(barcharts[i].getAttribute("summary")) {
+ tmp = barcharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = barcharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < linecharts.length; i++) {
+ if(linecharts[i].getAttribute("summary")) {
+ tmp = linecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = linecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ }
+}
+function extendObjSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < medias.length; i++) {
+ w=medias[i].getAttribute("width",0);
+ h=medias[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ medias[i].style.width=Math.floor(w*q)+"px";
+ medias[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+function findPosX(obj) {
+ var posLeft = 0;
+ while (obj.offsetParent) {
+ posLeft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ return posLeft;
+}
+function findPosY(obj) {
+ var posTop = 0;
+ while (obj.offsetParent) {
+ posTop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ return posTop;
+}
+// scalable images extension
+
+// canvas chart extension
+function deg2rad(degrees) {
+ return Math.PI *degrees/180;
+}
+function rad2deg(radians) {
+ return 180.0 *radians/Math.PI;
+}
+function circle_point_x(radians, diameter) {
+ var x = Math.cos(radians)*(diameter/2);
+ return x;
+}
+function circle_point_y(radians, diameter) {
+ var y = Math.sin(radians)*(diameter/2);
+ return y;
+}
+function roundTo(val,dig) {
+ var num = val;
+ if (val > 8191 && val < 10485) {
+ val = val-5000;
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ num = num+5000;
+ } else {
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ }
+ return num;
+}
+function searchColor(value) {
+ for (var dat in colorNames) {
+ if(dat==value) return colorNames[dat];
+ }
+ return false;
+}
+function scanColor(value) {
+ if(value.match(/^#[0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var val1 = value.substr(1,1).toLowerCase();
+ var val2 = value.substr(2,1).toLowerCase();
+ var val3 = value.substr(3,1).toLowerCase();
+ value = '#' + val1 + val1 + val2 + val2 + val3 + val3;
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var tmp = searchColor(value.toLowerCase());
+ if(!tmp) {}else{value = tmp;}
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ value = '#000000';
+ }
+ return value.toLowerCase();
+}
+function hex2rgb(val,trans) {
+ if(val.length==7) {
+ var tp1 = Math.max(0,Math.min(parseInt(val.substr(1,2),16),255));
+ var tp2 = Math.max(0,Math.min(parseInt(val.substr(3,2),16),255));
+ var tp3 = Math.max(0,Math.min(parseInt(val.substr(5,2),16),255));
+ return 'rgba(' + tp1 + ',' + tp2 + ',' + tp3 + ',' + trans + ')';
+ }
+}
+function trim(str) {
+ return (str.replace(/\s+$/,"").replace(/^\s+/,""));
+}
+function roundedRect(ctx,x,y,width,height,radius){
+ ctx.beginPath();
+ ctx.moveTo(x,y+radius);
+ ctx.lineTo(x,y+height-radius);
+ ctx.quadraticCurveTo(x,y+height,x+radius,y+height);
+ ctx.lineTo(x+width-radius,y+height);
+ ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius);
+ ctx.lineTo(x+width,y+radius);
+ ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
+ ctx.lineTo(x+radius,y);
+ ctx.quadraticCurveTo(x,y,x,y+radius);
+ ctx.closePath();
+}
+function drawString(ctx, text, fc, tx, ty) {
+ var xp = 0; var c = "";
+ ctx.beginPath();
+ for (var i = 0; i < text.length; i++) {
+ c = text[i];
+ ctx.drawImage(font, signs[c].sx, signs[c].sy, signs[c].sw, signs[c].sh, tx+xp, ty, signs[c].sw*fc, signs[c].sh*fc);
+ xp += (signs[c].sw*fc);
+ }
+ ctx.closePath();
+}
+function strokeString(ctx, txt, col, fh, tx, ty) {
+ var fw = fh*0.666666; var lw = fh*0.125;
+ var ls = lw/2; var cr = lw; var xp = 0;
+ ctx.lineCap = "round"; ctx.lineJoin = "round"
+ ctx.lineWidth = lw; ctx.strokeStyle = col;
+ for (var i = 0; i < txt.length; i++) {
+ strokeSymbol(ctx, txt[i], ls, tx+xp, ty, fw, fh);
+ xp += (txt[i]!="."?fw+cr:(fw/2)+cr);
+ }
+}
+function strokeSymbol(ctx, symbol, fc, cx, cy, cw, ch) {
+ ctx.beginPath();
+ switch (symbol) {
+ case "0":
+ ctx.moveTo(cx+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+(cw/2),(cw/2)-fc,deg2rad(180),0, false);
+ ctx.arc(cx+(cw/2),(cy+ch)-(cw/2),(cw/2)-fc,0,deg2rad(180), false);
+ ctx.closePath();
+ break;
+ case "1":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.moveTo(cx+(cw*0.666666),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.666666),cy+fc);
+ ctx.lineTo(cx+(cw*0.25),cy+(ch*0.25));
+ break;
+ case "2":
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.8));
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+fc,cy+ch-fc);
+ ctx.arc(cx+(cw/2),cy+(cw*0.425),(cw*0.425)-fc,deg2rad(45),deg2rad(-180), true);
+ break;
+ case "3":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-90),deg2rad(180), false);
+ break;
+ case "4":
+ ctx.moveTo(cx+(cw*0.75),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.5),cy+ch-fc);
+ break;
+ case "5":
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-80),deg2rad(180), false);
+ break;
+ case "6":
+ ctx.moveTo(cx+fc,cy+ch-(cw*0.5)-fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-180),deg2rad(180), false);
+ ctx.bezierCurveTo(cx+fc,cy+fc,cx+fc,cy+fc,cx+(cw*0.9)-fc,cy+fc);
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ break;
+ case "7":
+ ctx.moveTo(cx+(cw*0.5),cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.25)-fc);
+ break;
+ case "8":
+ ctx.moveTo(cx+(cw*0.92)-fc,cy+(cw*0.59));
+ ctx.arc(cx+(cw/2),cy+(cw*0.45),(cw*0.45)-fc,deg2rad(25),deg2rad(-205), true);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-135),deg2rad(-45), true);
+ ctx.closePath();
+ ctx.moveTo(cx+(cw*0.79),cy+(ch*0.47));
+ ctx.lineTo(cx+(cw*0.21),cy+(ch*0.47));
+ break;
+ case "9":
+ ctx.moveTo(cx+cw-fc,cy+(cw*0.5));
+ ctx.arc(cx+(cw/2),cy+(cw*0.5),(cw*0.5)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.bezierCurveTo(cx+cw-fc,cy+ch-fc,cx+cw-fc,cy+ch-fc,cx+(cw*0.1)+fc,cy+ch-fc);
+ break;
+ case "%":
+ ctx.moveTo(cx+fc,cy+(ch*0.75));
+ ctx.lineTo(cx+cw-fc,cy+(ch*0.25));
+ ctx.moveTo(cx+(cw*0.505),cy+(cw*0.3));
+ ctx.arc(cx+(cw*0.3),cy+(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.moveTo(cx+(cw*0.905),cy+ch-(cw*0.3));
+ ctx.arc(cx+(cw*0.7),cy+ch-(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ break;
+ case ".":
+ ctx.moveTo(cx+(cw*0.25),cy+ch-fc-fc);
+ ctx.arc(cx+(cw*0.25),cy+ch-fc-fc,fc,deg2rad(0),deg2rad(360), false);
+ ctx.closePath();
+ break;
+ default:
+ break;
+ }
+ ctx.stroke();
+}
+function drawBar(ctx,x,y,width,height,color,value,textdiv){
+ var rw = width/2; var rh = rw/2;
+ height = Math.max(height,rw);
+ var dh = Math.max(height-(2*rh),0.1); var S2L;
+ var xx = rw/8; var yy = rh/4;
+ var yo = rh/2; y = y - yy;
+ if(canvas_noshadow <= 0 && canvas_noshade <= 0) {
+ ctx.save();
+ S2L = ctx.createRadialGradient(x+rw+rh,y+height-rw+yy+rh,0,x+rw,y+height-rw+yy,rw);
+ S2L.addColorStop(0, 'rgba(0,0,0,0.5)');
+ S2L.addColorStop(0.7, 'rgba(0,0,0,0.25)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = S2L;
+ ctx.scale(1,0.5);
+ ctx.translate(xx,y+height+yy);
+ if(isOp){
+ ctx.fillRect(x,y+yy+height-width,width,width);
+ }else {
+ ctx.arc(x+rw,y+yy+height-width,width,0,deg2rad(360), false);
+ ctx.fill();
+ }
+ ctx.restore();
+ }else if(canvas_noshadow <= 0 && canvas_noshade >= 1) {
+ ctx.fillStyle = 'rgba(0,0,0,0.2)';
+ ctx.fillRect(x+yo,y+rh+yo+yo,width,dh);
+ }
+
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x,y+(height/2),x+width,y+(height/2));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.75)');
+ S2L.addColorStop(0.2, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.3, 'rgba(0,0,0,0)');
+ S2L.addColorStop(0.5, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.35)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.1)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.strokeStyle = S2L;
+ ctx.stroke();
+ }else {
+ ctx.fillStyle = color;
+ ctx.fillRect(x,y+rh+yo,width,dh);
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var bw = width; var bh = bw/4;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ var c; var w;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,x+(width/2)-(bw/2),y,bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext <= 0) {
+ strokeString(ctx, value + "%","rgba(48,48,48,1)", th, x+(width/2)-(w/2), y+((bh-th)/2));
+ }else {
+ drawString(ctx, value + "%", tf, x+(width/2)-(w/2), y+((bh-th)/2.2));
+ }
+ }else {
+ var bh = bw/3; var th = roundTo(bh*0.75,0);
+ roundedRect(ctx,x,y,bw,bh,bh/4);
+ ctx.fill();
+ var obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = x + "px";
+ obj.style.top = y+((bh-th)/2.2) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+
+ }
+}
+function drawLine(ctx,x,y,width,height,dist,array,factor,color,fill){
+ if(fill <= 0){
+ var style = hex2rgb(color,0.5);
+ ctx.lineJoin = "miter";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height);
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.lineTo(x+width,y+height);
+ ctx.lineTo(x,y+height);
+ ctx.closePath();
+ ctx.fillStyle = style;
+ ctx.fill();
+ }
+ ctx.lineJoin = "round";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height-(array[0]*factor));
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.strokeStyle = color;
+ ctx.stroke();
+}
+function setDataURL(cid) {
+ if(cid.toDataURL) {
+ var obj = document.getElementById(cid.id + "_link");
+ if(obj) {
+ obj.setAttribute("title", "To Data URL");
+ obj.setAttribute("target", "_blank");
+ obj.setAttribute("href", cid.toDataURL());
+ }
+ }
+}
+function get_input(dataobj,canvasobj,linechart) {
+ var table = document.getElementById(dataobj);
+ var canvas = document.getElementById(canvasobj);
+ var row; var clm; var cnt = 0; var val = 0; var nme = ""; var col = "";
+ if(canvas.getContext) {
+ canvas_width = parseInt(canvas.style.width);
+ canvas_height = parseInt(canvas.style.height);
+ if(canvas_width >= 16 && canvas_height >= 16) {
+ var tmp = table.getAttribute("summary");
+ canvas_noshade = 0; canvas_noshadow = 0;
+ canvas_notext = 0; canvas_imgtext = 0;
+ canvas_htmltext = 0; canvas_nofill = 0;
+ if(tmp.search(/noshadow/) != -1) canvas_noshadow = 1;
+ if(tmp.search(/noshade/) != -1) canvas_noshade = 1;
+ if(tmp.search(/nofill/) != -1) canvas_nofill = 1;
+ if(tmp.search(/notext/) != -1) canvas_notext = 1;
+ if(tmp.search(/htmltext/) != -1) canvas_htmltext = 1;
+ if(tmp.search(/imgtext/) != -1) canvas_imgtext = 1;
+ if(table.getAttribute("bgcolor")) {
+ canvas_bgcolor = scanColor(table.getAttribute("bgcolor"));
+ }
+ ChartData = new Array(); colorSlice = new Array();
+ if(table.getElementsByTagName("tr")[0].getElementsByTagName("th")[0]) cnt = 1;
+ for(var r = cnt; r < table.getElementsByTagName("tr").length; r++) {
+ row = table.getElementsByTagName("tr")[r];
+ clm = row.getElementsByTagName("td").length;
+ if(row.getElementsByTagName("td")[0].getAttribute("bgcolor")) {
+ col = scanColor(row.getElementsByTagName("td")[0].getAttribute("bgcolor")); val = 0;
+ nme = trim(row.getElementsByTagName("td")[1].innerHTML.replace(/<[^>]+>/g,""));
+ if(!linechart) {
+ if(clm > 3) {
+ for(var z = 2; z < clm; z++) {
+ val += parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ }else {
+ val = parseFloat(row.getElementsByTagName("td")[2].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ if(!isNaN(val) && val > 0 && nme != '') {
+ colorSlice[r-cnt] = col; ChartData[nme] = Math.abs(val);
+ }else {
+ break;
+ }
+ }else {
+ val = 0; i = 0;
+ if(clm > 3 && nme != '') {
+ ChartData[r-cnt] = new Array();
+ colorSlice[r-cnt] = col;
+ for(var z = 2; z < clm; z++) {
+ val = Math.abs(parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,"")));
+ if(!isNaN(val) && val >= 0) {
+ ChartData[r-cnt][i] = val; i++;
+ }else {
+ ChartData[r-cnt][i] = 0; i++;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }
+ }
+}
+function setPieChart(canvasobj,textobj) {
+ var cd = (Math.min(canvas_width,canvas_height)/110)*100;
+ var cp = cd*0.1; var cr = cd/2;
+ var sr = cr*0.93; var cw = cd+cp; var ch = cw;
+ var cx = (cd/2)+(cp/2); var cy = cx; var ct = 0;
+ for (var data in ChartData) {
+ ct += ChartData[data];
+ }
+ var poc = ct/100;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ }
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,cw,ch);
+ }else {
+ ctx.clearRect(0,0,cw,ch);
+ }
+ if(canvas_noshadow <= 0) {
+ if(!isOp) {
+ ctx.beginPath();
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),cr,cx+(cr*0.1),cy+(cr*0.1),sr*0.9);
+ B2B.addColorStop(0, 'rgba(0,0,0,0)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.arc(cx+(cr*0.1),cy+(cr*0.1),cr,0,deg2rad(360), false);
+ ctx.closePath();
+ ctx.fillStyle = B2B;
+ ctx.fill();
+ }else {
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),0,cx+(cr*0.1),cy+(cr*0.1),cr);
+ B2B.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(0.87, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = B2B;
+ ctx.fillRect(0,0,cw,ch);
+ }
+ }
+ var val = 0; var deg = 0; var idx = 0; var data;
+ for (data in ChartData) {
+ val = ChartData[data]; sdeg = deg;
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ ctx.beginPath();
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr,sdeg,edeg, false);
+ ctx.lineTo(cx,cy);
+ ctx.closePath();
+ ctx.fillStyle = colorSlice[(idx++)];
+ ctx.fill();
+ }
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ var W2T = ctx.createLinearGradient(cp*2,cp*2,cx,cy);
+ W2T.addColorStop(0, 'rgba(255,255,255,0.8)');
+ W2T.addColorStop(1, 'rgba(255,255,255,0)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.fillStyle = W2T;
+ ctx.fill();
+ ctx.beginPath();
+ var T2B = ctx.createLinearGradient(cx,cy,cw-(cp*2),ch-(cp*2));
+ T2B.addColorStop(0, 'rgba(0,0,0,0)');
+ T2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.fillStyle = T2B;
+ ctx.fill();
+ ctx.beginPath();
+ var B2T = ctx.createLinearGradient(cx,cy,cw-(cp*1.9),ch-(cp*1.9));
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.strokeStyle = B2T;
+ ctx.stroke();
+ ctx.beginPath();
+ var T2W = ctx.createLinearGradient(cx,cy,(cp*1.9),(cp*1.9));
+ T2W.addColorStop(0, 'rgba(255,255,255,0)');
+ T2W.addColorStop(1, 'rgba(255,255,255,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.strokeStyle = T2W;
+ ctx.stroke();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var mpos = 0; var per = 0; var gx = 0;
+ var gy = 0; var tx = 0; var ty = 0;
+ var obj = ""; var w = 0; var c = 0;
+ var bw = cr*0.45; var bh = cr*0.125;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext >= 1) {
+ bw = (cr*0.365);
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ for (data in ChartData) {
+ val = ChartData[data];
+ sdeg = deg; mpos = deg+(((val/2)/ct)*deg2rad(360));
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ per = roundTo(val/poc,2);
+ gx = circle_point_x(mpos, cd);
+ gy = circle_point_y(mpos, cd);
+ tx = parseFloat((cx+(2*Math.floor(cx + gx)))/3);
+ ty = (cy+(2*Math.floor(cy + gy)))/3;
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext >= 1) {
+ drawString(ctx, per + "%", tf, tx-(w/2), ty-(th/1.8));
+ }else {
+ strokeString(ctx, per + "%","rgba(48,48,48,1)", th, tx-(w/2), ty-(th/2));
+ }
+ }else {
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = (tx-(bw/2)) + "px";
+ obj.style.top = ty-(th/1.8) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+ }
+ }
+ }
+}
+function setBarChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9; var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05; var ph = canvas_height*0.05;
+ var cm = 0; var ct = 0;
+ for (var data in ChartData) {
+ cm = Math.max(cm,ChartData[data]);
+ ct += ChartData[data];
+ }
+ var hf = ih/cm; var bs = colorSlice.length;
+ var bw = iw/(bs*1.1); var poc = ct/100;
+ var th = roundTo((bw/3)*0.75,0);
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ var obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ var cc = ""; var bh = 0; var idx = 0; var t = 0; per = 0;
+ for (var data in ChartData) {
+ per = roundTo(ChartData[data]/poc,2);
+ bh = ChartData[data]*hf;
+ drawBar(ctx,pw+(t*(bw*1.1)),ph+ih-bh,bw,bh,colorSlice[(idx++)],per,textdiv);
+ t++;
+ }
+ }
+}
+function setLineChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9;
+ var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05;
+ var ph = canvas_height*0.05;
+ var cm = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ cm = Math.max(cm,ChartData[i][j]);
+ }
+ }
+ var hf = (ih*0.95)/cm; var bw = iw;
+ var dw = iw/(ChartData[0].length-1)
+ var dh = ih/(ChartData[0].length-1)
+ var ps = Math.min(pw,ph); lw = ps/4;
+ var B2T;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_noshadow <= 0) {
+ B2T = ctx.createLinearGradient(pw+ps,ph+ih+1,pw+ps+ps,ph+ih+1);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps,ph+ih);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.lineTo(pw+ps+ps,ph+ih);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+ps+ps,ph+ih,pw+ps+ps,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps+ps,ph+ih);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+ps+iw,ph+ih+ps);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.closePath();
+ ctx.fill();
+ var B2T = ctx.createLinearGradient(pw+iw+1,ph+ps,pw+iw+1,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.35)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps);
+ ctx.lineTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+iw,ph+ps+ps,pw+iw+ps,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.35)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+iw+ps,ph+ih+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = lw/2;
+ ctx.strokeStyle = "rgba(255,255,255,0.25)";
+ if(canvas_nofill <= 0) {
+ ctx.fillStyle = "rgba(240,240,240,0.8)";
+ ctx.strokeStyle = "rgba(255,255,255,1)";
+ ctx.fillRect(pw,ph,iw,ih);
+ }
+ for (var i = 0; i < ChartData[0].length-1; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph);
+ ctx.lineTo(pw+(i*dw),ph+ih);
+ ctx.stroke();
+ }
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw,ph+(i*dh));
+ ctx.lineTo(pw+iw,ph+(i*dh));
+ ctx.stroke();
+ }
+ ctx.lineWidth = lw;
+ var cc = ""; var bh = 0; var idx = 0; var t = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ t = Math.max(t,ChartData[i][j]);
+ }
+ bh = t*hf; cc = colorSlice[(idx++)];
+ drawLine(ctx,pw,ph+ih-bh,bw,bh,dw,ChartData[i],hf,cc,canvas_nofill);
+ }
+ ctx.beginPath();
+ ctx.moveTo(pw,ph);
+ ctx.lineTo(pw,ph+ih);
+ ctx.lineTo(pw+iw+(lw/2),ph+ih);
+ ctx.strokeStyle = "rgba(48,48,48,1)";
+ ctx.stroke();
+ ctx.lineWidth = lw/2;
+ B2T = ctx.createLinearGradient(pw,ph+ih,pw,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,1)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.strokeStyle = B2T;
+ for (var i = 0; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph+ih);
+ ctx.lineTo(pw+(i*dw),ph+ih+ps);
+ ctx.stroke();
+ }
+ B2T = ctx.createLinearGradient(pw-ps,ph,pw,ph);
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,1)');
+ ctx.strokeStyle = B2T;
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw-ps,ph+(i*dh));
+ ctx.lineTo(pw,ph+(i*dh));
+ ctx.stroke();
+ }
+ }
+}
+function generateCanvas() {
+ if(canvasSupport) {
+ var canvasID; var tdataID; var textID;
+ var tmp; var dat; var i; var j;
+ for(i=0; i < piecharts.length; i++) {
+ tmp = piecharts[i].id.split("_");
+ tdataID = piecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setPieChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < barcharts.length; i++) {
+ tmp = barcharts[i].id.split("_");
+ tdataID = barcharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setBarChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < linecharts.length; i++) {
+ tmp = linecharts[i].id.split("_");
+ tdataID = linecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID,true);
+ if(colorSlice.length > 0) {
+ if(ChartData.length == colorSlice.length) {
+ setLineChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ }
+}
+// canvas chart extension
+
+// invisible select extension
+function setListPos(opt) {
+ if(!isIE) { //(degrade IE)
+ var ref = document.getElementById('list');
+ var x = findPosX(ref); var y = findPosY(ref);
+ var obj = document.getElementById('jumplist');
+ obj.style.position = 'fixed'; obj.style.left = x + 'px'; obj.style.top = y + 'px';
+ var vol = document.getElementById('volumelist');
+ ref = document.getElementById('volume');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ vol.style.position = 'fixed'; vol.style.left = x + 'px'; vol.style.top = y + 'px';
+ var del = document.getElementById('delaylist');
+ ref = document.getElementById('delay');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ del.style.position = 'fixed'; del.style.left = x + 'px'; del.style.top = y + 'px';
+ var pnl = document.getElementById('navLinks');
+ }
+ if(opt) {
+ if(isIE) {
+ //(degrade IE)
+ //pnl.style.filter = "alpha(opacity=80)";
+ }else {
+ obj.style.opacity = 0.0;
+ vol.style.opacity = 0.0;
+ del.style.opacity = 0.0;
+ pnl.style.opacity = 0.8;
+ }
+ }
+}
+// invisible select extension
+
+// transition extension
+function switchFade() {
+ if(tranSitions && s5mode && fadeModus) {
+ fadeModus = false;
+ playDelay = playDelay-(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'isoff');
+ }else if(tranSitions && s5mode && !fadeModus) {
+ fadeModus = true;
+ playDelay = playDelay+(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ currentSlide();
+}
+function opacity(ids, opacStart, opacEnd, millisec) {
+ var speed = Math.round(millisec / 100);
+ var timer = 0;
+ if(opacStart > opacEnd) {
+ for(var i = opacStart; i >= opacEnd; i--) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ } else if(opacStart < opacEnd) {
+ for(var i = opacStart; i <= opacEnd; i++) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ }
+}
+function changeOpac(opacity, ids) {
+ var obj = document.getElementById(ids);
+ if (isIE) {
+ obj.style.filter = "alpha(opacity=" + opacity + ")";
+ } else {
+ obj.style.opacity = (opacity / 100);
+ }
+}
+function shiftOpacity(ids, millisec) {
+ if(document.getElementById(ids).style.opacity != '') {
+ var currentOpac = document.getElementById(ids).style.opacity * 100;
+ } else {
+ var currentOpac = 0;
+ }
+ if(currentOpac == 0) {
+ opacity(ids, currentOpac, 100, millisec);
+ } else if(currentOpac > 0) {
+ opacity(ids, currentOpac, 0, millisec);
+ }
+}
+// transition extension
+
+// autoplay extension
+function autoPlay() {
+ if (s5mode && autoMatic && !playPause) {
+ if ((snum >= (smax-1)) && playLoop) {
+ goTo(0);
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }else if ((snum >= (smax-1)) && !playLoop) {
+ stopPlay();
+ }else {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ if (incrementals[snum].length >0) {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = parseInt(playDelay/(incrementals[snum].length+1));
+ remainDer = parseInt(playDelay-(incrDelay*incrementals[snum].length));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ } else {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = incrDuration;
+ remainDer = parseInt(playDelay-(incrementals[snum].length*incrDuration));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }
+ }
+}
+function autoPlayIncr() {
+ if (incpos < incrementals[snum].length) {
+ subgo(1);
+ autoRun = setTimeout('autoPlayIncr();',incrDelay);
+ }else {
+ autoRun = setTimeout('nop();',remainDer);
+ }
+}
+function nop() {
+ // no operation dummy
+}
+function togglePlay() {
+ if (autoRun && s5mode) {
+ stopPlay();
+ }else if (!autoRun && s5mode) {
+ startPlay();
+ }
+}
+function stopPlay() {
+ if (autoRun && s5mode) {
+ clearTimeout(autoRun); autoRun = null;
+ autoMatic = false; playPause = false; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'isoff');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ currentSlide();
+ }
+}
+function startPlay() {
+ if (!autoRun && s5mode) {
+ playPause = false; autoMatic = true; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'ison');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ autoRun = setTimeout('autoPlay();',playDelay);
+ currentSlide();
+ }
+}
+function pausePlay() {
+ if (s5mode && autoMatic) {
+ if (playPause) {
+ playPause = false; autoRun = setTimeout('autoPlay();',playDelay);
+ var obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ }else {
+ if (autoRun){
+ clearTimeout(autoRun); autoRun = null; playPause = true;
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+ }
+}
+function switchLoop() {
+ if(s5mode) {
+ if (playLoop) {
+ playLoop = false;
+ var obj = document.getElementById('loop'); changeClass(obj,'isoff');
+ }else {
+ playLoop = true;
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+}
+function setDelay() {
+ var val = document.getElementById('delaylist');
+ if(s5mode) {
+ var delay = Math.max(5,Math.min(parseInt(val.value),300));
+ playDelay = (fadeModus == true) ? ((delay*1000)+(2*fadeDuration)) : (delay*1000);
+ }
+}
+// autoplay extension
+
+// audio extension
+function createSoundManagerScript() {
+ if(typeof soundManager=="undefined") {
+ onerrorSM2();
+ }else {
+ var script=document.createElement('SCRIPT');
+ var tx=document.createTextNode("soundManager.createMovie();");
+ script.appendChild(tx);
+ document.getElementsByTagName("body")[0].appendChild(script);
+ }
+}
+//soundManager.onload = function() {
+function onloadSM2() {
+ if(!isIE) { //(degrade IE)
+ swfUnloaded = false;
+ preloadSounds();
+ }
+}
+//soundManager.onerror = function() {
+function onerrorSM2() {
+ if(typeof soundManager!="undefined") {
+ soundManager.destruct;
+ delete soundManager;
+ }
+ audioSupport = false; swfUnloaded = true;
+ if(audioError && !isIE && !isOp) {
+ var dv = document.createElement('div'); dv.id = "guru";
+ var d2=document.createElement('div'); dv.appendChild(d2);
+ var tx=document.createTextNode('Guru Meditation - SoundManager failed to load/initialize!');
+ d2.appendChild(tx); document.getElementById('slide0').appendChild(dv);
+ }
+}
+function audioSetup() {
+ if(sound[0]) {
+ playSound(0);
+ }else if(sound[bgSoundItem] && !sound[0]) {
+ playSound(bgSoundItem);
+ }
+}
+function fadeoutSound(ids, option) {
+ if(curSoundID >= 0 && !swfUnloaded) {
+ if(isNaN(ids)) {
+ if(ids == "bgSound") {
+ var cnum = parseInt(bgSoundItem);
+ }else {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && ids == sound[i]["id"]) {
+ var cnum = i;
+ break;
+ }
+ }
+ }
+ }else {
+ var cnum = ids;
+ ids = sound[cnum]["id"];
+ }
+ var vol = getMaxVolume(sound[cnum]["volume"]);
+ var millisec = fadeDuration;
+ var speed = Math.round(millisec / vol);
+ var timer = 0;
+ for(var i = vol; i > 0; i--) {
+ setTimeout("fadeout(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ if(option) setTimeout("stopSound('"+ids+"')",millisec);
+ }
+}
+function fadeout(volume, id) {
+ soundManager.setVolume(id,volume);
+}
+function stopSound(ids) {
+ var sid;
+ if(isNaN(ids)) {
+ sid = ids;
+ }else if(sound[ids]) {
+ sid = sound[ids]["id"];
+ }
+ if(sid!='' && curSoundID >= 0) {
+ soundManager.stop(sid);
+ curSoundID = -1;
+ }
+}
+function toggleSounds() {
+ if(audioSupport && !swfUnloaded) {
+ stopAllSounds();
+ }else if (!audioSupport && !swfUnloaded) {
+ allowSounds();
+ }
+}
+function allowSounds() {
+ if(!swfUnloaded) {
+ audioSupport = true;
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ currentSlide();
+ }
+}
+function stopAllSounds() {
+ if(curSoundID >= 0) {
+ stopSound(curSoundID);
+ }else {
+ soundManager.stopAll();
+ curSoundID = -1;
+ }
+ audioSupport = false;
+ var obj = document.getElementById('audio'); changeClass(obj,'isoff');
+ currentSlide();
+}
+function playSound(id) {
+ if(audioSupport && !swfUnloaded) {
+ var url, sid, vol, lps, cnum;
+ if(isNaN(id)) {
+ sid = id;
+ if(sid == "bgSound") {
+ cnum = parseInt(bgSoundItem);
+ }else {
+ cnum = getSoundID(id);
+ }
+ }else {
+ cnum = parseInt(id);
+ if(sound[cnum]) sid = sound[cnum]["id"];
+ }
+ if(sound[cnum] && sound[cnum]["url"]!='' && sid!=''){
+ url = sound[cnum]["url"];
+ vol = (sound[cnum]["volume"]!='')?getMaxVolume(sound[cnum]["volume"]):getMaxVolume(100);
+ lps = (sound[cnum]["loops"])?true:false;
+ if(lps) {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){soundManager.play(sid,{volume:getMaxVolume(sound[cnum]["volume"])});}});
+ }else {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){curSoundID=-1;}});
+ }
+ }
+ }
+}
+function getSoundID(str) {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && str == sound[i]["id"]) {
+ var id = i;
+ break;
+ }
+ }
+ return id;
+}
+function setVolume() {
+ var vol = document.getElementById('volumelist');
+ if(audioSupport && !swfUnloaded) {
+ audioVolume = parseInt(vol.value);
+ if(curSoundID >= 0) {
+ if(sound[curSoundID]) {
+ var sid = sound[curSoundID]["id"];
+ var vid = getMaxVolume(sound[curSoundID]["volume"]);
+ soundManager.setVolume(sid,vid);
+ }
+ }
+ }
+}
+function getMaxVolume(value) {
+ if(audioVolume>0) {var factor = audioVolume/100;}else {var factor = 0;}
+ return Math.max(0,Math.min(parseInt(value*factor),audioVolume));
+}
+function preloadSounds() {
+ var temp = ''; var parm = ''; var t = ''; var cl = '';
+ var objects = document.getElementsByTagName('object');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].type.toLowerCase() == 'audio/mp3' && objects[i].data != '') {
+ objects[i].width = 0; objects[i].height = 0;
+ if(objects[i].parentNode.tagName == 'DIV') {
+ cl = objects[i].parentNode.className.toLowerCase();
+ if(cl == 'presentation' || cl == 'slide') {
+ if(cl == 'presentation') {
+ t = parseInt(bgSoundItem);
+ }else {
+ t = parseInt(objects[i].parentNode.id.slice(5, objects[i].parentNode.id.length));
+ }
+ sound[t] = new Object();
+ if(t < bgSoundItem) {
+ sound[t]["id"] = objects[i].parentNode.id;
+ }else {
+ sound[t]["id"] = "bgSound";
+ }
+ sound[t]["url"] = objects[i].data;
+ sound[t]["volume"] = 100; sound[t]["loops"] = false;
+ if(objects[i].archive != '') {
+ parm = objects[i].archive.toLowerCase().split(',');
+ for (var j=0; j < parm.length; j++) {
+ if(parm[j] == 'loop') sound[t]["loops"] = true;
+ if(parm[j].search(/^volume/) != -1) {
+ var tmp = parm[j].split(':');
+ sound[t]["volume"] = parseInt(tmp[1]);
+ }
+ }
+ }
+ soundManager.createSound(sound[t]["id"],sound[t]["url"]);
+ }
+ }
+ }
+ }
+}
+// audio extension
+
+// help extension
+function createHelpReq() {
+ if(!document.getElementById("HelpReq")) {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "HelpReq";
+ if (pg.addEventListener) {
+ pg.addEventListener("onclick",dumpHelpReq,false);
+ } else if (pg.attachEvent) {
+ pg.attachEvent("onclick",dumpHelpReq);
+ }
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=90)";
+ } else {
+ pg.style.opacity = 0.9;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(64,64,64)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/help.jpg)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+ if(document.getElementById("HelpReq")) {
+ helpmode = true;
+ }
+ }
+}
+function dumpHelpReq() {
+ if(document.getElementById("HelpReq")) {
+ document.body.removeChild(document.getElementById('HelpReq'));
+ helpmode = false;
+ }
+}
+// help extension
+
+//DEBUG
+function ConsoleLog(value) {
+ if(window.console) {
+ window.console.log(value);
+ }
+}
+//DEBUG
+
+document.write('<style type="text/css" media="screen" id="blockStyle">.presentation, .layout {display: none; }</style>');
+
+if(!isIE && !isOp) {
+ document.write('<script type="text/javascript" src="'+s5Path+'ui/audio_support/soundmanager2.js"></script>');
+ if(typeof soundManager!="undefined") {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'audioDebug') {
+ var audioDebug = (allMetas[i].content == "true") ? true : false;
+ soundManager.defaultOptions.debugMode = audioDebug;
+ }
+ }
+ }
+}
+
+window.onload = createSlideShow;
+window.onresize = function(){setTimeout('windowChange()',5);} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/toggle_link.png
new file mode 100644
index 000000000..4588e2514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/toggle_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/toggle_over.png
new file mode 100644
index 000000000..400f613b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/toggle_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/volume_link.png
new file mode 100644
index 000000000..f362acd1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/volume_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/wrap.css
new file mode 100644
index 000000000..a37315552
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/wrap.css
@@ -0,0 +1,410 @@
+/********************************************************************
+Screen and Print Styles for the Wrap Plugin
+********************************************************************/
+
+/* tables in columns and boxes should span the whole width */
+.wrap_column table,
+.wrap_left table, .wrap_right table, .wrap_center table,
+.wrap_box table,
+.wrap_info table, .wrap_important table, .wrap_alert table, .wrap_tip table, .wrap_help table, .wrap_todo table, .wrap_download table {
+ width: 100%;
+}
+/* emulate a headline */
+.wrap_column em strong,
+.wrap_left em strong, .wrap_right em strong, .wrap_center em strong,
+.wrap_box em strong,
+.wrap_info em strong, .wrap_important em strong, .wrap_alert em strong, .wrap_tip em strong, .wrap_help em strong, .wrap_todo em strong, .wrap_download em strong {
+ font-size: 130%;
+ font-weight: bold;
+ font-style: normal;
+ display: block;
+}
+/* emulate a bigger headline with a bottom border */
+.wrap_column em strong em.u,
+.wrap_left em strong em.u, .wrap_right em strong em.u, .wrap_center em strong em.u,
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ font-size: 115%;
+ border-bottom: 1px solid __border__;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+}
+/* different bigger headline for safety notes */
+.wrap_danger em strong em.u, .wrap_warning em strong em.u, .wrap_caution em strong em.u, .wrap_notice em strong em.u, .wrap_safety em strong em.u {
+ font-size: 115%;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+ text-transform: uppercase;
+ border-bottom-width: 0;
+}
+/* change border colour of emulated headlines inside boxes to something more neutral
+ (to match all the different background colours) */
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ border-bottom-color: #999;
+}
+
+
+/* columns
+********************************************************************/
+
+.wrap_left,
+.wrap_column {
+ float: left;
+ margin-right: 1.5em;
+}
+.wrap_right {
+ float: right;
+ margin-left: 1.5em;
+}
+.wrap_center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+/*
+.wrap_column,
+.wrap_left,
+.wrap_right {
+ overflow: hidden;
+}
+*/
+.wrap_container {
+ margin-right: -1.5em;
+}
+
+
+/* alignments
+********************************************************************/
+
+.wrap_leftalign {
+ text-align: left;
+}
+.wrap_centeralign {
+ text-align: center;
+}
+.wrap_rightalign {
+ text-align: right;
+}
+.wrap_justify {
+ text-align: justify;
+}
+
+
+/* box
+********************************************************************/
+
+/* see styles for boxes and notes with icons in style.css */
+
+/*____________ rounded corners ____________*/
+/* (only for modern browsers) */
+
+div.wrap_round {
+ border-radius: 20px;
+ -moz-border-radius: 20px;
+ -webkit-border-radius: 20px;
+ -khtml-border-radius: 20px;
+}
+span.wrap_round {
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -khtml-border-radius: 2px;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_lo {
+ color: __text_neu__;
+ font-size: 85%;
+}
+div.wrap_em {
+ color: #c00;
+ font-weight: bold;
+}
+
+/* see styles for highlighted text in style.css */
+
+
+/* typography
+********************************************************************/
+
+/*____________ fonts ____________*/
+
+div.wrap_sansserif {
+ font-family: Verdana,Tahoma,Geneva,"DejaVu Sans","Bitstream Vera Sans","Liberation Sans", Arial,Helvetica,FreeSans,"Liberation Sans","Nimbus Sans L", sans-serif;
+}
+div.wrap_serif {
+ font-family: Georgia,Garamond,"Palatino Linotype","Book Antiqua",Palatino,Palladio,"URW Palladio L","Liberation Serif",Didot,Gentium,"Bitstream Charter","Century Schoolbook L", "Times New Roman",Times,"Nimbus Roman No9 L","FreeSerif", serif;
+}
+div.wrap_monospace {
+ font-family: Courier,"Courier New",FreeMono,"Nimbus Mono L","Liberation Mono", "Lucida Console",Monaco,"DejaVu Sans Mono","Bitstream Vera Sans Mono", monospace;
+}
+
+/*____________ font size ____________*/
+
+div.wrap_bigger {
+ font-size: 125%;
+}
+div.wrap_muchbigger {
+ font-size: 200%;
+}
+div.wrap_smaller {
+ font-size: 75%;
+}
+
+/*____________ font colours ____________*/
+
+div.wrap_fgred {
+ color: #900;
+}
+div.wrap_fggreen {
+ color: #090;
+}
+div.wrap_fgblue {
+ color: #009;
+}
+div.wrap_fgcyan {
+ color: #099;
+}
+div.wrap_fgviolet {
+ color: #909;
+}
+div.wrap_fgyellow {
+ color: #990;
+}
+div.wrap_fggrey {
+ color: #666;
+}
+div.wrap_fgblack {
+ color: #000;
+}
+
+/* see styles for background colours and white font colour in style.css */
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ indent ____________*/
+
+div.wrap_indent {
+ padding-left: 1.5em;
+}
+
+/*____________ outdent ____________*/
+
+div.wrap_outdent {
+ margin-left: -1.5em;
+}
+
+/*____________ word wrapping in pre ____________*/
+
+divdiv.wrap_prewrap pre {
+ white-space: pre-wrap;
+ word-wrap: break-word;/* for IE < 8 */
+ /* white-space: -moz-pre-wrap; for FF < 3 */
+}
+
+/*____________ spoiler ____________*/
+
+divdiv.wrap_spoiler {
+ margin-bottom: 1.5em;
+}
+/* see rest of spoiler styles in style.css */
+
+/*____________ clear float ____________*/
+
+div.wrap_clear {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ font-size: 1px;
+ visibility: hidden;
+ overflow: hidden;
+}
+
+/*____________ hide ____________*/
+
+div.wrap_hide {
+ display: none;
+}
+
+
+/* STYLE.CSS */
+
+/* box
+********************************************************************/
+
+.wrap_box {
+ background: __background_alt__;
+ color: __text__;
+/*
+ overflow: hidden;
+*/
+}
+div.wrap_box,
+div.wrap_danger, div.wrap_warning, div.wrap_caution, div.wrap_notice, div.wrap_safety {
+ padding: 1em 1em .5em;
+ margin-bottom: 1.5em;
+}
+span.wrap_box,
+span.wrap_danger, span.wrap_warning, span.wrap_caution, span.wrap_notice, span.wrap_safety {
+ padding: 0 .3em;
+}
+
+/*____________ notes with icons ____________*/
+
+/* general styles for all note divs */
+div.wrap_info, div.wrap_important, div.wrap_alert, div.wrap_tip, div.wrap_help, div.wrap_todo, div.wrap_download {
+ padding: 1em 1em .5em 70px;
+ margin-bottom: 1.5em;
+ min-height: 68px;
+ background-position: 10px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html div.wrap_info, * html div.wrap_important, * html div.wrap_alert, * html div.wrap_tip, * html div.wrap_help, * html div.wrap_todo, * html div.wrap_download {
+ height: 68px;
+}
+/* general styles for all note spans */
+span.wrap_info, span.wrap_important, span.wrap_alert, span.wrap_tip, span.wrap_help, span.wrap_todo, span.wrap_download {
+ padding: 0 2px 0 20px;
+ min-height: 20px;
+ background-position: 2px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html span.wrap_info, * html span.wrap_important, * html span.wrap_alert, * html span.wrap_tip, * html span.wrap_help, * html span.wrap_todo, * html span.wrap_download {
+ height: 20px;
+}
+
+/*____________ info ____________*/
+.wrap_info { background-color: #d1d7df; }
+div.wrap_info { background-image: url(../../../wrap/images/note/48/info.png); }
+span.wrap_info { background-image: url(../../../wrap/images/note/16/info.png); }
+
+/*____________ important ____________*/
+.wrap_important { background-color: #ffd39f; }
+div.wrap_important { background-image: url(../../../wrap/images/note/48/important.png); }
+span.wrap_important { background-image: url(../../../wrap/images/note/16/important.png); }
+
+/*____________ alert ____________*/
+.wrap_alert { background-color: #ffbcaf; }
+div.wrap_alert { background-image: url(../../../wrap/images/note/48/alert.png); }
+span.wrap_alert { background-image: url(../../../wrap/images/note/16/alert.png); }
+
+/*____________ tip ____________*/
+.wrap_tip { background-color: #fff79f; }
+div.wrap_tip { background-image: url(../../../wrap/images/note/48/tip.png); }
+span.wrap_tip { background-image: url(../../../wrap/images/note/16/tip.png); }
+
+/*____________ help ____________*/
+.wrap_help { background-color: #dcc2ef; }
+div.wrap_help { background-image: url(../../../wrap/images/note/48/help.png); }
+span.wrap_help { background-image: url(../../../wrap/images/note/16/help.png); }
+
+/*____________ todo ____________*/
+.wrap_todo { background-color: #c2efdd; }
+div.wrap_todo { background-image: url(../../../wrap/images/note/48/todo.png); }
+span.wrap_todo { background-image: url(../../../wrap/images/note/16/todo.png); }
+
+/*____________ download ____________*/
+.wrap_download { background-color: #d6efc2; }
+div.wrap_download { background-image: url(../../../wrap/images/note/48/download.png); }
+span.wrap_download { background-image: url(../../../wrap/images/note/16/download.png); }
+
+
+/*____________ safety notes ____________*/
+
+.wrap_danger {
+ background-color: #c00;
+ color: #fff;
+}
+.wrap_warning {
+ background-color: #f60;
+ color: #000;
+}
+.wrap_caution {
+ background-color: #ff0;
+ color: #000;
+}
+.wrap_notice {
+ background-color: #06f;
+ color: #fff;
+}
+.wrap_safety {
+ background-color: #090;
+ color: #fff;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_hi {
+ background-color: #ff9;
+}
+
+/* typography
+********************************************************************/
+
+/*____________ font colours ____________*/
+
+div.wrap_fgwhite {
+ color: #fff;
+}
+
+/*____________ background colours ____________*/
+
+div.wrap_bgred {
+ background-color: #fcc;
+}
+div.wrap_bggreen {
+ background-color: #cfc;
+}
+div.wrap_bgblue {
+ background-color: #ccf;
+}
+div.wrap_bgcyan {
+ background-color: #9ff;
+}
+div.wrap_bgviolet {
+ background-color: #f9f;
+}
+div.wrap_bgyellow {
+ background-color: #ff9;
+}
+div.wrap_bggrey {
+ background-color: #ccc;
+}
+div.wrap_bgwhite {
+ background-color: #fff;
+}
+div.wrap_bgblack {
+ background-color: #000;
+}
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ spoiler ____________*/
+
+div.wrap_spoiler {
+ background-color: __background__ !important;
+ color: __background__ !important;
+ border: 1px dotted red;
+}
+
+/*____________ only print ____________*/
+
+div.wrap_onlyprint {
+ display: none;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/zero_link.png
new file mode 100644
index 000000000..5610884d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/zero_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/zero_over.png
new file mode 100644
index 000000000..3a14a577e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/zero_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/audio_link.png
new file mode 100644
index 000000000..daa740c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/audio_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/audio_on.png
new file mode 100644
index 000000000..cd590aae9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/audio_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/audio_over.png
new file mode 100644
index 000000000..cf537a008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/audio_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/auto_link.png
new file mode 100644
index 000000000..1c2ca4817
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/auto_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/auto_on.png
new file mode 100644
index 000000000..4b0c923b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/auto_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/auto_over.png
new file mode 100644
index 000000000..dbea88975
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/auto_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/backgrnd.png
new file mode 100644
index 000000000..0e48413d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/backgrnd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/blank.gif
new file mode 100644
index 000000000..75b945d25
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/blank.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/delay_link.png
new file mode 100644
index 000000000..c4d99cd57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/delay_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/exit_link.png
new file mode 100644
index 000000000..1bfd38790
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/exit_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/exit_over.png
new file mode 100644
index 000000000..0fdd1c605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/exit_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/fade_link.png
new file mode 100644
index 000000000..482e4d53e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/fade_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/fade_on.png
new file mode 100644
index 000000000..e12561fb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/fade_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/fade_over.png
new file mode 100644
index 000000000..fb8943c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/fade_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/footer.jpg
new file mode 100644
index 000000000..49370dbba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/footer.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/framing.css
new file mode 100644
index 000000000..74f0fdfba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/framing.css
@@ -0,0 +1,23 @@
+/* The following styles size, place, and layer the slide components.
+ Edit these if you want to change the overall slide layout.
+ The commented lines can be uncommented (and modified, if necessary)
+ to help you with the rearrangement process. */
+
+/* target = 1024x768 */
+
+div#header, div#footer, .slide {width: 100%; top: 0; left: 0;}
+div#header {top: 0; height: 2em; z-index: 1;}
+div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;}
+.slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;}
+div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;}
+div#controls form {position: absolute; bottom: 0; right: 0; width: 100%;
+ margin: 0;}
+#currentSlide {position: absolute; width: 10%; left: 45%; bottom: 1em; z-index: 10;}
+html>body #currentSlide {position: fixed;}
+
+/*
+div#header {background: #FCC;}
+div#footer {background: #CCF;}
+div#controls {background: #BBD;}
+div#currentSlide {background: #FFC;}
+*/
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/header.png
new file mode 100644
index 000000000..929dabba1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/iepngfix.htc
new file mode 100644
index 000000000..bba2db756
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/iepngfix.htc
@@ -0,0 +1,42 @@
+<public:component>
+<public:attach event="onpropertychange" onevent="doFix()" />
+
+<script>
+
+// IE5.5+ PNG Alpha Fix v1.0 by Angus Turnbull http://www.twinhelix.com
+// Free usage permitted as long as this notice remains intact.
+
+// This must be a path to a blank image. That's all the configuration you need here.
+var blankImg = 'ui/default/blank.gif';
+
+var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
+
+function filt(s, m) {
+ if (filters[f]) {
+ filters[f].enabled = s ? true : false;
+ if (s) with (filters[f]) { src = s; sizingMethod = m }
+ } else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")';
+}
+
+function doFix() {
+ if ((parseFloat(navigator.userAgent.match(/MSIE (\S+)/)[1]) < 5.5) ||
+ (event && !/(background|src)/.test(event.propertyName))) return;
+
+ if (tagName == 'IMG') {
+ if ((/\.png$/i).test(src)) {
+ filt(src, 'image'); // was 'scale'
+ src = blankImg;
+ } else if (src.indexOf(blankImg) < 0) filt();
+ } else if (style.backgroundImage) {
+ if (style.backgroundImage.match(/^url[("']+(.*\.png)[)"']+$/i)) {
+ var s = RegExp.$1;
+ style.backgroundImage = '';
+ filt(s, 'crop');
+ } else filt();
+ }
+}
+
+doFix();
+
+</script>
+</public:component> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/last_link.png
new file mode 100644
index 000000000..4f158d35d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/last_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/last_over.png
new file mode 100644
index 000000000..a7b629995
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/last_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/list_link.png
new file mode 100644
index 000000000..7e299bb50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/list_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/logo.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/logo.png
new file mode 100644
index 000000000..653814eef
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/logo.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/loop_link.png
new file mode 100644
index 000000000..41e12cb15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/loop_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/loop_on.png
new file mode 100644
index 000000000..2ffcacae1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/loop_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/loop_over.png
new file mode 100644
index 000000000..9fe420153
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/loop_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/next_link.png
new file mode 100644
index 000000000..2b9f44c4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/next_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/next_over.png
new file mode 100644
index 000000000..25788124d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/next_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/notes_link.png
new file mode 100644
index 000000000..bb4a8ae37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/notes_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/notes_over.png
new file mode 100644
index 000000000..c6bfe69fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/notes_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/opera.css
new file mode 100644
index 000000000..9e9d2a3c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/opera.css
@@ -0,0 +1,7 @@
+/* DO NOT CHANGE THESE unless you really want to break Opera Show */
+.slide {
+ visibility: visible !important;
+ position: static !important;
+ page-break-before: always;
+}
+#slide0 {page-break-before: avoid;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/outline.css
new file mode 100644
index 000000000..62db519ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/outline.css
@@ -0,0 +1,15 @@
+/* don't change this unless you want the layout stuff to show up in the outline view! */
+
+.layout div, #footer *, #controlForm * {display: none;}
+#footer, #controls, #controlForm, #navLinks, #toggle {
+ display: block; visibility: visible; margin: 0; padding: 0;}
+#toggle {float: right; padding: 0.5em;}
+html>body #toggle {position: fixed; top: 0; right: 0;}
+
+/* making the outline look pretty-ish */
+
+#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
+#slide0 h1 {padding-top: 1.5em;}
+.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em;
+ border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
+#toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pause_link.png
new file mode 100644
index 000000000..2561cb4a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pause_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pause_on.png
new file mode 100644
index 000000000..2fc9c4a4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pause_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pause_over.png
new file mode 100644
index 000000000..7a7c80ddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pause_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pretty.css
new file mode 100644
index 000000000..c004defcd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pretty.css
@@ -0,0 +1,163 @@
+/**
+ * Theme: dokuwiki
+ * @author Eric A. Meyer (http://meyerweb.com/) [default theme]
+ * @author Anika Henke <a.c.henke@arcor.de>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+body {background: #fff url(logo.png) top right no-repeat; color: #000; font-size: 1.9em;}
+:link, :visited {text-decoration: none; color: #436976;font-style:italic;}
+#controls :active {color: #436976 !important;}
+#controls :focus {outline: 1px dotted #436976;}
+h1, h2, h3, h4 {font-size: 100%; margin: 0; padding: 0; font-weight: inherit;}
+ul, pre {margin: 0; line-height: 1em;}
+html, body {margin: 0; padding: 0; font-family: Verdana, Helvetica, sans-serif;}
+
+blockquote, q {font-style: italic;}
+blockquote {padding: 0 2em 0.5em; margin: 0 1.5em 0.5em; text-align: center; font-size: 1em;}
+blockquote p {margin: 0;}
+blockquote em {font-style: normal;}
+blockquote strong {display: block; margin-top: 0.5em; font-weight: normal; font-size: smaller; font-style: normal;}
+blockquote strong em {font-style: italic;}
+
+.slide code {padding: 2px 0.25em; font-weight: bold; color: #000;}
+.slide pre {padding: 0.5em; margin: 0.25em 0 0.5em 0.5em; color: #000; font-size: 80%;background:#dee7ec;border:1px dashed #8cacbb;}
+.slide ul {margin-left: 5%; margin-right: 7%; list-style: disc;}
+.slide li {margin-top: 0.75em; margin-right: 0;}
+.slide ul ul {line-height: 1;}
+.slide ul ul li {margin: .2em; font-size: 85%; list-style: square;}
+
+div#header, div#footer {background: #dee7ec; color: #000;
+ font-family: Verdana, Helvetica, sans-serif;}
+div#header {background: #dee7ec url(logo.png) top right no-repeat;
+ line-height: 1px;}
+div#footer {font-size: 0.5em; font-weight: bold; padding: 1em 0;border-top:1px solid #8cacbb;}
+#footer h1, #footer h2 {display: block; padding: 0 1em;}
+#footer h2 {font-style: italic;}
+
+div.long {font-size: 0.75em;}
+.slide h1 {position: absolute; top: 0.1em; left: 1.5%; z-index: 1;
+ margin: 0; padding: 0.3em 0 0 25px; white-space: nowrap;
+ font: bold 150%/1em Verdana, Helvetica, sans-serif;
+ color: #436976; background: inherit;}
+.slide h2 {font-size: 140%;}
+.slide h3 {font-size: 130%;}
+h1 abbr {font-variant: small-caps;}
+
+#currentSlide {text-align: center; font-size: 0.5em; color: #436976;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 0; padding: 0;
+ font: bold 2em Verdana, Helvetica, sans-serif; white-space: normal;
+ color: #436976; background: transparent;
+ /*letter-spacing:0.25em; border-bottom:2px dashed #f90;border-right:2px dashed #f90;*/}
+#slide0 h2 {font: bold 1.5em Verdana, Helvetica, sans-serif; margin: 0.25em;
+ color: #638c9c; background: transparent;}
+#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+
+img{border: none;}
+
+ul li {list-style-type: square}
+li {color: #436976; font-weight: bold; }
+li div.li {color: #000; font-weight:normal; }
+
+div#controls {position: absolute; left: 0; bottom: 0; width: 100%; text-align: center; font: bold 1em Verdana, Arial, Helvetica, sans-serif;}
+html>body div#controls {background: transparent; position: fixed; padding: 0; top: auto; text-align: center;}
+#controls #sheet {display: none;}
+#controls #controlForm {height: 32px; width: 100%; text-align: center; vertical-align: middle;}
+#controls #navLinks {border-top: 1px solid #999; overflow: hidden; padding: 0; margin: 0; height: 32px; width: 100%; background-color: #808080; text-align: center; vertical-align: middle; white-space: nowrap;}
+#controls #navLinks ul {margin: 0 auto; padding: 0; height: 32px; width: 500px; white-space: nowrap; text-align: center;}
+#controls #navLinks ul li {list-style: none; display: inline; margin: 0; padding: 0; float: left; height: 32px; width: 32px; text-align: center; background-color: transparent;}
+#controls #navLinks ul li.vr {list-style: none; display: inline; margin: 0px 2px; padding: 0; float: left; height: 32px; width: 1px; text-align: center; background-color: #606060;}
+#controls #navLinks ul li a {margin: 0; padding: 0; float: left; height: 32px; width: 32px; background-color: transparent;}
+
+#controls #navLinks ul li#exit {background: url(exit_link.png) no-repeat top left;}
+#controls #navLinks ul li#exit a:hover {background: url(exit_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#toggle {background: url(toggle_link.png) no-repeat top left;}
+#controls #navLinks ul li#toggle a:hover {background: url(toggle_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#show-notes {background: url(notes_link.png) no-repeat top left;}
+#controls #navLinks ul li#show-notes a:hover {background: url(notes_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#zero {background: url(zero_link.png) no-repeat top left;}
+#controls #navLinks ul li#zero a:hover {background: url(zero_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#prev {background: url(prev_link.png) no-repeat top left;}
+#controls #navLinks ul li#prev a:hover {background: url(prev_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#next {background: url(next_link.png) no-repeat top left;}
+#controls #navLinks ul li#next a:hover {background: url(next_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#last {background: url(last_link.png) no-repeat top left;}
+#controls #navLinks ul li#last a:hover {background: url(last_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#lst {background: url(list_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#fade a.isoff {background: url(fade_link.png) no-repeat top left;}
+#controls #navLinks ul li#fade a.ison {background: url(fade_on.png) no-repeat top right;}
+#controls #navLinks ul li#fade a:hover {background: url(fade_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#audio {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.isoff {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.ison {background: url(audio_on.png) no-repeat top right;}
+#controls #navLinks ul li#audio a:hover {background: url(audio_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#vol {background: url(volume_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#auto a.isoff {background: url(auto_link.png) no-repeat top left;}
+#controls #navLinks ul li#auto a.ison {background: url(auto_on.png) no-repeat top right;}
+#controls #navLinks ul li#auto a:hover {background: url(auto_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#pause a.isoff {background: url(pause_link.png) no-repeat top left;}
+#controls #navLinks ul li#pause a.ison {background: url(pause_on.png) no-repeat top right;}
+#controls #navLinks ul li#pause a:hover {background: url(pause_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#loop a.isoff {background: url(loop_link.png) no-repeat top left;}
+#controls #navLinks ul li#loop a.ison {background: url(loop_on.png) no-repeat top right;}
+#controls #navLinks ul li#loop a:hover {background: url(loop_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#del {background: url(delay_link.png) no-repeat top left;}
+
+#jumplist, #volumelist, #delaylist {padding: 0; margin: 0; width: 32px; height: 32px; cursor: n-resize;}
+
+#guru {position: absolute; visibility: visible; left: 0px; top: 0px; padding: 4px; width: 99%; height: auto; text-align: center; background-color: black; z-index: 10;}
+#guru div {border: solid 3px red; padding: 4px; font-family: monospace; font-size: 60%; width: auto; height: auto; color: red; text-align: center;}
+
+/*
+#currentSlide {white-space: nowrap; text-align: center; margin-bottom: -0.5em; font-size: 0.5em; background-color: transparent; color: #999;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 0; padding: 0; font: bold 2em Verdana, Arial, Helvetica, sans-serif; font-variant: small-caps; text-shadow: 0.1em 0.1em 0.1em #666; white-space: normal; color: #222; background-color: transparent;}
+#slide0 h2 {font: bold italic 1em Arial, Helvetica, sans-serif; margin: 0.25em;}
+#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+*/
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.notes {display: none;}
+.external {border-bottom: 1px dotted gray;}
+html>body .external {border-bottom: none;}
+.external:after {content: " \274F"; font-size: smaller; color: #999;}
+
+.incremental, .incremental *, .incremental *:after {color: #ccc; visibility: visible;}
+img.incremental, canvas.incremental {visibility: hidden;}
+.slide .current {color: #B02;}
+
+/* diagnostics
+li:after {content: " [" attr(class) "]"; color: #F88;}
+*/
+
+table.piechart, table.barchart, table.linechart { border-spacing: 0.3em 0.15em; }
+table.piechart tr th, table.barchart tr th, table.linechart tr th { white-space: nowrap; }
+table.piechart tr td, table.barchart tr td, table.linechart tr td { vertical-align: top; white-space: nowrap; }
+table.piechart tr td.col, table.barchart tr td.col, table.linechart tr td.col { border-bottom: 1px solid #555; border-right: 1px solid #555; }
+table.fs90 tr td, table.fs90 tr th, div.fs90, pre.fs90, p.fs90 ,ul.fs90 {font-size: 0.9em; }
+table.fs75 tr td, table.fs75 tr th, div.fs75, pre.fs75, p.fs75 ,ul.fs75 {font-size: 0.75em; }
+table.fs66 tr td, table.fs66 tr th, div.fs66, pre.fs66, p.fs66 ,ul.fs66 {font-size: 0.66em; }
+table.fs50 tr td, table.fs50 tr th, div.fs50, pre.fs50, p.fs50 ,ul.fs50 {font-size: 0.5em; }
+
+#soundmanager-debug {position:fixed; top:0px; right:0px; width:30em; height:20em; overflow:auto; border:1px solid red; padding:1em; margin:2em; font-family:"sans serif"; font-size: 12px;color: black; background-color:#f6f6f6; z-index: 100;}
+#soundmanager-debug code {font-size: 11px;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/prev_link.png
new file mode 100644
index 000000000..c31d21350
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/prev_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/prev_over.png
new file mode 100644
index 000000000..6fef4fa52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/prev_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/print.css
new file mode 100644
index 000000000..e7a71d145
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/print.css
@@ -0,0 +1 @@
+/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul {page-break-inside: avoid; visibility: visible !important;} h1 {page-break-after: avoid;} body {font-size: 12pt; background: white;} * {color: black;} #slide0 h1 {font-size: 200%; border: none; margin: 0.5em 0 0.25em;} #slide0 h3 {margin: 0; padding: 0;} #slide0 h4 {margin: 0 0 0.5em; padding: 0;} #slide0 {margin-bottom: 3em;} h1 {border-top: 2pt solid gray; border-bottom: 1px dotted silver;} .extra {background: transparent !important;} div.extra, pre.extra, .example {font-size: 10pt; color: #333;} ul.extra a {font-weight: bold;} p.example {display: none;} #header {display: none;} #footer h1 {margin: 0; border-bottom: 1px solid; color: gray; font-style: italic;} #footer h2, #controls {display: none;} /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .layout, .layout * {display: none !important;} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/s5-core.css
new file mode 100644
index 000000000..86444e041
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/s5-core.css
@@ -0,0 +1,9 @@
+/* Do not edit or override these styles! The system will likely break if you do. */
+
+div#header, div#footer, div#controls, .slide {position: absolute;}
+html>body div#header, html>body div#footer,
+ html>body div#controls, html>body .slide {position: fixed;}
+.handout {display: none;}
+.layout {display: block;}
+.slide, .hideme, .incremental {visibility: hidden;}
+#slide0 {visibility: visible;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/slides.css
new file mode 100644
index 000000000..0786d7dbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/slides.css
@@ -0,0 +1,3 @@
+@import url(s5-core.css); /* required to make the slide show run at all */
+@import url(framing.css); /* sets basic placement and size of slide components */
+@import url(pretty.css); /* stuff that makes the slides look better than blah */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/slides.js
new file mode 100644
index 000000000..510a04c0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/slides.js
@@ -0,0 +1,2812 @@
+// S5 1.3beta7 (18-Apr-2007) advanced version by C. Effenberger
+// Please see http://s5.netzgesta.de/ for more information
+// based on S5 v1.2a1 slides.js -- released into the Public Domain
+// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
+// about all the wonderful and talented contributors to this code!
+// audio extension: soundmanager2 is NOT Public Domain
+// Please see http://www.schillmania.com/projects/soundmanager2/ for information
+
+var undef;
+var slideCSS = '';
+var snum = 0;
+var smax = 1;
+var incpos = 0;
+var number = undef;
+var firstTime = 1;
+var s5mode = true;
+var helpmode = false;
+var defaultView = 'slideshow'; //outline
+var controlVis = 'visible';
+var s5Path = 'lib/plugins/s5reloaded/';
+
+// scalable images extension
+var empx = 0;
+var images = new Array();
+var canvas = new Array();
+var medias = new Array();
+var piecharts = new Array();
+var barcharts = new Array();
+var linecharts = new Array();
+// scalable images extension
+
+// transition extension
+var tranSitions = false;
+var fadeModus = false;
+var fadeDuration = 500;
+var incrDuration = 250;
+var opac = 1;
+var cid = '';
+var nid = '';
+var tid = '';
+var jl = '';
+// transition extension
+
+// autoplay extension
+var autoMatic = false;
+var playLoop = false;
+var playPause = false;
+var autoRun = false;
+var playDelay = 5000;
+var remainDer = 0;
+var incrDelay = 0;
+// autoplay extension
+
+// audio extension
+var sound = new Array();
+var audioSupport = false;
+var audioVolume = 100;
+var audioError = false;
+var swfUnloaded = true;
+var bgSoundItem = 9999;
+var curSoundID = -1;
+// audio extension
+
+// panel extension
+var imgWidth = 32;
+var imgHeight = 32;
+// panel extension
+
+// canvas chart extension
+var canvasSupport = false;
+var ChartData = new Array();
+var colorSlice = new Array();
+var font = document.createElement("img");
+font.setAttribute("src", s5Path+"ui/graphic_support/numeric.png");
+signs = {
+ '0': {sx: 0, sy: 0, sw: 48, sh: 64},
+ '1': {sx: 48, sy: 0, sw: 48, sh: 64},
+ '2': {sx: 96, sy: 0, sw: 48, sh: 64},
+ '3': {sx: 144, sy: 0, sw: 48, sh: 64},
+ '4': {sx: 192, sy: 0, sw: 48, sh: 64},
+ '5': {sx: 240, sy: 0, sw: 48, sh: 64},
+ '6': {sx: 288, sy: 0, sw: 48, sh: 64},
+ '7': {sx: 336, sy: 0, sw: 48, sh: 64},
+ '8': {sx: 384, sy: 0, sw: 48, sh: 64},
+ '9': {sx: 432, sy: 0, sw: 48, sh: 64},
+ '%': {sx: 480, sy: 0, sw: 48, sh: 64},
+ '.': {sx: 528, sy: 0, sw: 24, sh: 64}
+};
+var colorNames= new Array();
+colorNames["black"]="#000000"; colorNames["maroon"]="#800000";
+colorNames["green"]="#008000"; colorNames["olive"]="#808000";
+colorNames["navy"]="#000080"; colorNames["purple"]="#800080";
+colorNames["teal"]="#008080"; colorNames["gray"]="#808080";
+colorNames["silver"]="#C0C0C0"; colorNames["red"]="#FF0000";
+colorNames["lime"]="#00FF00"; colorNames["yellow"]="#FFFF00";
+colorNames["blue"]="#0000FF"; colorNames["fuchsia"]="#FF00FF";
+colorNames["aqua"]="#00FFFF"; colorNames["white"]="#FFFFFF";
+colorNames["aliceblue"]="#F0F8FF"; colorNames["antiquewhite"]="#FAEBD7";
+colorNames["aquamarine"]="#7FFFD4"; colorNames["azure"]="#F0FFFF";
+colorNames["beige"]="#F5F5DC"; colorNames["blueviolet"]="#8A2BE2";
+colorNames["brown"]="#A52A2A"; colorNames["burlywood"]="#DEB887";
+colorNames["cadetblue"]="#5F9EA0"; colorNames["chartreuse"]="#7FFF00";
+colorNames["chocolate"]="#D2691E"; colorNames["coral"]="#FF7F50";
+colorNames["cornflowerblue"]="#6495ED"; colorNames["cornsilk"]="#FFF8DC";
+colorNames["crimson"]="#DC143C"; colorNames["darkblue"]="#00008B";
+colorNames["darkcyan"]="#008B8B"; colorNames["darkgoldenrod"]="#B8860B";
+colorNames["darkgray"]="#A9A9A9"; colorNames["darkgreen"]="#006400";
+colorNames["darkkhaki"]="#BDB76B"; colorNames["darkmagenta"]="#8B008B";
+colorNames["darkolivegreen"]="#556B2F"; colorNames["darkorange"]="#FF8C00";
+colorNames["darkorchid"]="#9932CC"; colorNames["darkred"]="#8B0000";
+colorNames["darksalmon"]="#E9967A"; colorNames["darkseagreen"]="#8FBC8F";
+colorNames["darkslateblue"]="#483D8B"; colorNames["darkslategray"]="#2F4F4F";
+colorNames["darkturquoise"]="#00CED1"; colorNames["darkviolet"]="#9400D3";
+colorNames["deeppink"]="#FF1493"; colorNames["deepskyblue"]="#00BFFF";
+colorNames["dimgray"]="#696969"; colorNames["dodgerblue"]="#1E90FF";
+colorNames["firebrick"]="#B22222"; colorNames["floralwhite"]="#FFFAF0";
+colorNames["forestgreen"]="#228B22"; colorNames["gainsboro"]="#DCDCDC";
+colorNames["ghostwhite"]="#F8F8FF"; colorNames["gold"]="#FFD700";
+colorNames["goldenrod"]="#DAA520"; colorNames["greenyellow"]="#ADFF2F";
+colorNames["honeydew"]="#F0FFF0"; colorNames["hotpink"]="#FF69B4";
+colorNames["indianred"]="#CD5C5C"; colorNames["indigo"]="#4B0082";
+colorNames["ivory"]="#FFFFF0"; colorNames["khaki"]="#F0E68C";
+colorNames["lavender"]="#E6E6FA"; colorNames["lavenderblush"]="#FFF0F5";
+colorNames["lawngreen"]="#7CFC00"; colorNames["lemonchiffon"]="#FFFACD";
+colorNames["lightblue"]="#ADD8E6"; colorNames["lightcoral"]="#F08080";
+colorNames["lightcyan"]="#E0FFFF"; colorNames["lightgoldenrodyellow"]="#FAFAD2";
+colorNames["lightgreen"]="#90EE90"; colorNames["lightgrey"]="#D3D3D3";
+colorNames["lightpink"]="#FFB6C1"; colorNames["lightsalmon"]="#FFA07A";
+colorNames["lightseagreen"]="#20B2AA"; colorNames["lightskyblue"]="#87CEFA";
+colorNames["lightslategray"]="#778899"; colorNames["lightsteelblue"]="#B0C4DE";
+colorNames["lightyellow"]="#FFFFE0"; colorNames["limegreen"]="#32CD32";
+colorNames["linen"]="#FAF0E6"; colorNames["mediumaquamarine"]="#66CDAA";
+colorNames["mediumblue"]="#0000CD"; colorNames["mediumorchid"]="#BA55D3";
+colorNames["ediumpurple"]="#9370D"; colorNames["mediumseagreen"]="#3CB371";
+colorNames["mediumslateblue"]="#7B68EE"; colorNames["mediumspringgreen"]="#00FA9A";
+colorNames["mediumturquoise"]="#48D1CC"; colorNames["mediumvioletred"]="#C71585";
+colorNames["midnightblue"]="#191970"; colorNames["mintcream"]="#F5FFFA";
+colorNames["mistyrose"]="#FFE4E1"; colorNames["moccasin"]="#FFE4B5";
+colorNames["navajowhite"]="#FFDEAD"; colorNames["oldlace"]="#FDF5E6";
+colorNames["olivedrab"]="#6B8E23"; colorNames["orange"]="#FFA500";
+colorNames["orangered"]="#FF4500"; colorNames["orchid"]="#DA70D6";
+colorNames["palegoldenrod"]="#EEE8AA"; colorNames["palegreen"]="#98FB98";
+colorNames["paleturquoise"]="#AFEEEE"; colorNames["palevioletred"]="#DB7093";
+colorNames["papayawhip"]="#FFEFD5"; colorNames["peachpuff"]="#FFDAB9";
+colorNames["peru"]="#CD853F"; colorNames["pink"]="#FFC0CB";
+colorNames["plum"]="#DDA0DD"; colorNames["powderblue"]="#B0E0E6";
+colorNames["rosybrown"]="#BC8F8F"; colorNames["royalblue"]="#4169E1";
+colorNames["saddlebrown"]="#8B4513"; colorNames["salmon"]="#FA8072";
+colorNames["sandybrown"]="#F4A460"; colorNames["seagreen"]="#2E8B57";
+colorNames["seashell"]="#FFF5EE"; colorNames["sienna"]="#A0522D";
+colorNames["skyblue"]="#87CEEB"; colorNames["slateblue"]="#6A5ACD";
+colorNames["slategray"]="#708090"; colorNames["snow"]="#FFFAFA";
+colorNames["springgreen"]="#00FF7F"; colorNames["steelblue"]="#4682B4";
+colorNames["tan"]="#D2B48C"; colorNames["thistle"]="#D8BFD8";
+colorNames["tomato"]="#FF6347"; colorNames["turquoise"]="#40E0D0";
+colorNames["violet"]="#EE82EE"; colorNames["wheat"]="#F5DEB3";
+colorNames["whitesmoke"]="#F5F5F5"; colorNames["yellowgreen"]="#9ACD32";
+var canvas_bgcolor = "";
+var canvas_width = 200;
+var canvas_height = 200;
+var canvas_noshade = 0;
+var canvas_nofill = 0;
+var canvas_noshadow = 0;
+var canvas_htmltext = 0;
+var canvas_imgtext = 0;
+var canvas_notext = 0;
+// canvas chart extension
+
+var s5NotesWindow;
+var s5NotesWindowLoaded = false;
+var previousSlide = 0;
+var presentationStart = new Date();
+var slideStart = new Date();
+
+var countdown = {
+ timer: 0,
+ state: 'pause',
+ start: new Date(),
+ end: 0,
+ remaining: 0
+};
+
+var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
+if(isIE) var notIE7 = parseInt(navigator.appVersion) < 7 ? 1 : 0;
+var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
+var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
+var isS2 = navigator.userAgent.indexOf('Safari') >= 2 ? 1 : 0;
+
+function hasClass(object, className) {
+ if (!object.className) return false;
+ return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
+}
+
+function hasValue(object, value) {
+ if (!object) return false;
+ return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
+}
+
+function removeClass(object,className) {
+ if (!object || !hasClass(object,className)) return;
+ object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
+}
+
+function addClass(object,className) {
+ if (!object || hasClass(object, className)) return;
+ if (object.className) {
+ object.className += ' '+className;
+ } else {
+ object.className = className;
+ }
+}
+
+function changeClass(object,className) {
+ if (!object) return;
+ object.firstChild.className = className;
+}
+
+function GetElementsWithClassName(elementName,className) {
+ var allElements = document.getElementsByTagName(elementName);
+ var elemColl = new Array();
+ for (var i = 0; i< allElements.length; i++) {
+ if (hasClass(allElements[i], className)) {
+ elemColl[elemColl.length] = allElements[i];
+ }
+ }
+ return elemColl;
+}
+
+function isParentOrSelf(element, id) {
+ if (element == null || element.nodeName=='BODY') return false;
+ else if (element.id == id) return true;
+ else return isParentOrSelf(element.parentNode, id);
+}
+
+function nodeValue(node) {
+ var result = "";
+ if (node.nodeType == 1) {
+ var children = node.childNodes;
+ for (var i = 0; i < children.length; ++i) {
+ result += nodeValue(children[i]);
+ }
+ }
+ else if (node.nodeType == 3) {
+ result = node.nodeValue;
+ }
+ return(result);
+}
+
+function slideLabel() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var list = document.getElementById('jumplist');
+ smax = slideColl.length;
+ for (var n = 0; n < smax; n++) {
+ var obj = slideColl[n];
+ var did = 'slide' + n.toString();
+ obj.setAttribute('id',did);
+ var otext = '';
+ var menu = obj.firstChild;
+ if (!menu) continue; // to cope with empty slides
+ while (menu && menu.nodeType == 3) {
+ menu = menu.nextSibling;
+ }
+ if (!menu) continue; // to cope with slides with only text nodes
+ var menunodes = menu.childNodes;
+ for (var o = 0; o < menunodes.length; o++) {
+ otext += nodeValue(menunodes[o]);
+ }
+ list.options[list.length] = new Option(n + ' : ' + otext, n);
+ }
+}
+
+function currentSlide() {
+ var cs, at, fd, ss;
+ if (document.getElementById) {
+ cs = document.getElementById('currentSlide');
+ } else {
+ cs = document.currentSlide;
+ }
+ fd = fadeModus?"F":"&ndash;";
+ ss = audioSupport?"S":"&ndash;";
+ at = (autoMatic?(playPause?"||":(playLoop?"&gt;0":"&gt;|")):"&ndash;&ndash;");
+ cs.innerHTML = '<div id="plink" nowrap="nowrap">' +
+ '<span id="csFade">[' + fd + ss + ']<\/span>&nbsp;' +
+ '<span id="csHere"><strong>' + snum + '<\/strong><\/span>' +
+ '<span id="csSep">\/<\/span>' +
+ '<span id="csTotal">' + (smax-1) + '<\/span>&nbsp;' +
+ '<span id="csAuto">[' + at + ']<\/span>' +
+ '<\/div>';
+
+ if (snum == 0) {
+ cs.style.visibility = 'hidden';
+ } else {
+ cs.style.visibility = 'visible';
+ }
+}
+
+function go(step) {
+ if (document.getElementById('slideProj').disabled || step == 0) return;
+ jl = document.getElementById('jumplist');
+ cid = 'slide' + snum;
+ var ce = document.getElementById(cid);
+ if (incrementals[snum].length > 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ removeClass(incrementals[snum][i], 'current');
+ removeClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ if (step != 'j') {
+ snum += step;
+ lmax = smax - 1;
+ if (snum > lmax) snum = lmax;
+ if (snum < 0) snum = 0;
+ }else {
+ snum = parseInt(jl.value);
+ }
+ nid = 'slide' + snum;
+ var ne = document.getElementById(nid);
+ if (!ne) {
+ ne = document.getElementById('slide0');
+ nid = 'slide0';
+ snum = 0;
+ }
+ if (step < 0) {
+ incpos = incrementals[snum].length
+ }else {
+ incpos = 0;
+ }
+ if (incrementals[snum].length > 0 && incpos == 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ if (hasClass(incrementals[snum][i], 'current')) {
+ incpos = i + 1;
+ }else {
+ addClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ }
+ if (incrementals[snum].length > 0 && incpos > 0) {
+ addClass(incrementals[snum][incpos - 1], 'current');
+ }
+ var guru = document.getElementById('guru');
+ if(guru && snum==0) {
+ guru.style.visibility = 'visible';
+ }else if(guru && snum>0) {
+ guru.style.visibility = 'hidden';
+ }
+ if(tranSitions && s5mode && fadeModus) {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {fadeoutSound(curSoundID,true); } // audio support
+ }
+ changeOpac(0,nid);
+ changeOpac(100,cid);
+ ce.style.visibility = 'visible';
+ shiftOpacity(cid,fadeDuration);
+ window.setTimeout("changeSlides()",fadeDuration);
+ }else {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {stopSound(curSoundID); } // audio support
+ }
+ ce.style.visibility = 'hidden';
+ if (isOp) location.hash = nid;
+ ne.style.visibility = 'visible';
+ finishSlides();
+ }
+}
+
+function changeSlides() {
+ if(nid != cid) changeOpac(100,cid);
+ document.getElementById(cid).style.visibility = 'hidden';
+ document.getElementById(nid).style.visibility = 'visible';
+ if (isOp) location.hash = nid;
+ shiftOpacity(nid,fadeDuration);
+ window.setTimeout("finishSlides()",fadeDuration);
+}
+
+function finishSlides() {
+ jl.selectedIndex = snum;
+ currentSlide();
+ loadNote();
+ permaLink();
+ number = undef;
+ if(sound[getSoundID(nid)]) {
+ playSound(nid); // audio support
+ }else if(sound[bgSoundItem] && curSoundID != bgSoundItem) {
+ playSound(bgSoundItem); // audio support
+ }
+}
+
+function goTo(target) {
+ if (target >= smax || target == snum) return;
+ go(target - snum);
+}
+
+function subgo(step) {
+ if (step > 0) {
+ removeClass(incrementals[snum][incpos - 1],'current');
+ removeClass(incrementals[snum][incpos], 'incremental');
+ if(tranSitions && s5mode && fadeModus) {
+ if(!incrementals[snum][incpos].id) {
+ var tmp = new Date(); tid = "inc" + String(tmp.getTime());
+ incrementals[snum][incpos].id = tid;
+ }else {
+ tid = incrementals[snum][incpos].id;
+ }
+ if(typeof(incrementals[snum][incpos].src) != "undefined" || incrementals[snum][incpos].getContext) {
+ changeOpac(0,tid);
+ addClass(incrementals[snum][incpos],'current');
+ shiftOpacity(tid,incrDuration);
+ setTimeout("nextInc()",incrDuration);
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ } else {
+ incpos--;
+ removeClass(incrementals[snum][incpos],'current');
+ addClass(incrementals[snum][incpos], 'incremental');
+ addClass(incrementals[snum][incpos - 1],'current');
+ loadNote();
+ }
+}
+
+function nextInc() {
+ incpos++;
+ loadNote();
+}
+
+function toggle() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ var guru = document.getElementById('guru');
+ if (!slides.disabled) {
+ stopPlay();
+ if(audioSupport && !swfUnloaded) stopAllSounds();
+ slides.disabled = true;
+ outline.disabled = false;
+ s5mode = false;
+ fontSize(1,'em');
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'visible';
+ }
+ if(guru) guru.style.visibility = 'hidden';
+ } else {
+ slides.disabled = false;
+ outline.disabled = true;
+ s5mode = true;
+ fontScale();
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'hidden';
+ }
+ slideColl[snum].style.visibility = 'visible';
+ if(guru && snum==0) guru.style.visibility = 'visible';
+ }
+}
+
+function showHide(action) {
+ var obj = GetElementsWithClassName('*','hideme')[0];
+ switch (action) {
+ case 's':
+ obj.style.visibility = 'visible';
+ break;
+ case 'h':
+ obj.style.visibility = 'hidden';
+ break;
+ case 'k':
+ if (obj.style.visibility != 'visible') {
+ obj.style.visibility = 'visible';
+ } else {
+ obj.style.visibility = 'hidden';
+ }
+ break;
+ }
+}
+
+function keys(key) {
+ if (!key) {
+ key = event;
+ key.which = key.keyCode;
+ }
+ if (helpmode) {
+ dumpHelpReq();
+ return;
+ }
+ if (key.which == 84 && !isOp) {
+ toggle();
+ return;
+ }
+ if (s5mode) {
+ if (autoMatic) {
+ switch (key.which) {
+ case 70: // f/ading on/off
+ switchFade();
+ break;
+ case 83: // s/ound on/off
+ toggleSounds();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 65: // a/utoplay on/off
+ stopPlay();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 80: // p/ause
+ case 32: // spacebar
+ pausePlay();
+ break;
+ }
+ }else {
+ switch (key.which) {
+ case 8: // backspace = HELP
+ createHelpReq();
+ break;
+ case 10: // return
+ case 13: // enter
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ if(number != undef) {
+ goTo(number);
+ break;
+ }
+ case 32: // spacebar
+ case 34: // page down
+ case 39: // rightkey
+ case 40: // downkey
+ if(number != undef) {
+ go(number);
+ } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ break;
+ case 33: // page up
+ case 37: // leftkey
+ case 38: // upkey
+ if(number != undef) {
+ go(-1 * number);
+ } else if (!incrementals[snum] || incpos <= 0) {
+ go(-1);
+ } else {
+ subgo(-1);
+ }
+ break;
+ case 65: // a/utoplay
+ startPlay();
+ break;
+ case 72: // h
+ case 36: // home
+ goTo(0);
+ break;
+ case 69: // e
+ case 35: // end
+ goTo(smax-1);
+ break;
+ case 70: // f/ade transitions on/off
+ switchFade();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 83: // s/ound support on/off
+ toggleSounds();
+ break;
+ case 27: // escape
+ case 81: // q
+ if(!isOp) byby();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 78: // n
+ createNotesWindow();
+ break;
+ }
+ if (key.which < 48 || key.which > 57) {
+ number = undef;
+ } else {
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
+ }
+ }
+ }
+ return false;
+}
+
+function clicker(e) {
+ number = undef;
+ var target;
+ if (window.event) {
+ target = window.event.srcElement;
+ e = window.event;
+ } else {
+ target = e.target;
+ }
+ if (target.href != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
+ if (!helpmode) {
+ if (!e.which || e.which == 1) {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ }
+ } else {
+ dumpHelpReq();
+ }
+}
+
+function findSlide(hash) {
+ var target = null;
+ var slides = GetElementsWithClassName('*','slide');
+ for (var i = 0; i < slides.length; i++) {
+ var targetSlide = slides[i];
+ if ( (targetSlide.name && targetSlide.name == hash)
+ || (targetSlide.id && targetSlide.id == hash) ) {
+ target = targetSlide;
+ break;
+ }
+ }
+ while(target != null && target.nodeName != 'BODY') {
+ if (hasClass(target, 'slide')) {
+ return parseInt(target.id.slice(5));
+ }
+ target = target.parentNode;
+ }
+ return null;
+}
+
+function slideJump() {
+ if (window.location.hash == null) return;
+ var sregex = /^#slide(\d+)$/;
+ var matches = sregex.exec(window.location.hash);
+ var dest = null;
+ if (matches != null) {
+ dest = parseInt(matches[1]);
+ } else {
+ dest = findSlide(window.location.hash.slice(1));
+ }
+ if (dest != null)
+ go(dest - snum);
+}
+
+function fixLinks() {
+ var thisUri = window.location.href;
+ thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
+ var aelements = document.getElementsByTagName('A');
+ for (var i = 0; i < aelements.length; i++) {
+ var a = aelements[i].href;
+ var slideID = a.match('\#slide[0-9]{1,2}');
+ if ((slideID) && (slideID[0].slice(0,1) == '#')) {
+ var dest = findSlide(slideID[0].slice(1));
+ if (dest != null) {
+ if (aelements[i].addEventListener) {
+ aelements[i].addEventListener("click", new Function("e",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "if (e.preventDefault) e.preventDefault();"), true);
+ } else if (aelements[i].attachEvent) {
+ aelements[i].attachEvent("onclick", new Function("",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "event.returnValue = false;"));
+ }
+ }
+ }
+ }
+}
+
+function externalLinks() {
+ if (!document.getElementsByTagName) return;
+ var anchors = document.getElementsByTagName('a');
+ for (var i=0; i<anchors.length; i++) {
+ var anchor = anchors[i];
+ if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
+ anchor.target = '_blank';
+ addClass(anchor,'external');
+ }
+ }
+}
+
+function permaLink() {
+ document.getElementById('plink').href = window.location.pathname + '#slide' + snum;
+}
+
+function createControls() {
+ var controlsDiv = document.getElementById("controls");
+ if (!controlsDiv) return;
+ var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
+ var hideDiv, hideList = '';
+ if (controlVis == 'hidden') {
+ hideDiv = hider;
+ } else {
+ hideList = hider;
+ }
+ if(isOp) {
+ var str = '';
+ }else {
+ var str = '<a accesskey="t" id="sheet" title="toggle CSS" href="javascript:toggle();">&plusmn;<\/a>';
+ }
+ if(isIE) {
+ var tmp = "move around&xA0;until the color&xA0;change to red!";
+ }else if(isS2) {
+ var tmp = "move around\r\nuntil the color\r\nchange to red!";
+ }else {
+ var tmp = "move around until color change to red!";
+ }
+ if(isIE) {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] for keyboard help!"><ul>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst" style="vertical-align: middle; width: 160px;"><select style="cursor: auto; width: 160px; height: auto;" id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del" style="vertical-align: middle; width: 52px;"><select style="cursor: auto; width: 52px; height: auto;" id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul><\/div><\/form>';
+ }else {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] or double click this area for keyboard help!" ondblclick="createHelpReq();"><ul>' +
+ '<li id="exit"><a href="javascript:byby();" accesskey="q" title="exit Show"><\/a><\/li>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li class="vr"><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst"><a id="list" style="cursor:wait;" title="' + tmp + '"><\/a><select id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="fadeLinks" class="vr"><\/li>' +
+ '<li id="fade"><a class="isoff" href="javascript:switchFade();" accesskey="f" title="Transions"><\/a><\/li>' +
+ '<li id="audioLinks" class="vr"><\/li>' +
+ '<li id="audio"><a class="isoff" href="javascript:toggleSounds();" accesskey="s" title="Sounds" ><\/a><\/li>' +
+ '<li id="vol"><a id="volume" style="cursor:wait;" title="' + tmp + '"><\/a><select id="volumelist" title="select Volume" onchange="setVolume();"><option value="100">100<\/option><option value="90">90<\/option><option value="80">80<\/option><option value="70">70<\/option><option value="60">60<\/option><option value="50">50<\/option><option value="40">40<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="10">10<\/option><option value="0">0<\/option><\/select><\/li>' +
+ '<li id="autoLinks" class="vr"><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del"><a id="delay" style="cursor:wait;" title="' + tmp + '"><\/a><select id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul>' +
+ '<a href="http://s5.netzgesta.de" target="_blank" title="S5 Reloaded"><img style="position: absolute; right: 0; bottom: 0;" src="data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAYAAAASYli2AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAYpSURBVHjaYvz//z8DOYCRkZEZRAEx0Ij/f2HiAAHEgqYIpACkkB1J7g8Q/wLRIJ1QNSB5fiDmAOLvQKHPQPoHSB4ggFiQDGMCUnxALAPECkAsBLIdiD8A8SMgfghU8wlqkTgQK1ZVVWldv3792fr16y8D+c9AhgMEECPIy1DDRIDYAojdzMzMWNXV1UG2/v/y5Qvzw4cPP587d24/kH8Gar/uwoULQ+/cufNFXFyciZmZ+UVmZuZKoFmvAQII5kJOIDbi4uKK2Llz53EbG5vP6GGWn5+vMWnSpJtA5jcg5v327Rtnc3PzfSD79+rVq2WBNBtIHUAAwQzkAWKzBQsWnIUZFhISovXmzZsfkpKSDD09PY8kJCR+QtWCguGvrKwsz7Rp07Q4ODh+srCwgILiH0gSIIBgBrICsUBoaCgorBiANgqvXbtWDMg8AcQf9+7d+x0o9xbI/gJV/3fVqlUvmJiY/gIdcaWhoYETahEDQADBDPwNxO9h3gNpBiq6f/HiRbWjR4+yvnr16grQNbeh6kCWsxkYGIhClT8yNDQUgyYhBoAAYoIKfgXi06mpqUowQ+vr6x+uW7fu0suXL8+uWbOGS0BAwB7kC6jXvqmoqLDIyclxzZo1S4udnR2WtBgAAggWyyCXSgOxZUxMjGpWVtY7S0vLr8iRsnnzZl4/P7/DQCYoYtSA2DApKUkVGNNPDh06dBrIvwU06xNAAMEM5AIKqAOxCjQsmHl5eXWdnJx4N2zYcB4prd4CUpfwJRuAAGJCimULoGYpbm5uZ5DBnz9/5tq4caPWkSNHeJEc+g0aTFzfv3/nACabjzk5OW8FBQVloLmHASCAYJECUiTg7+//HJiQTzY2NsrfvXv3n7m5+T5YMgJGEkjDS2gY/pKRkeHt7Ow0Bsb0v9+/fz+HxTJAAMG8DHKFLTC9aRUXF79BT9Qgw4CWHAAy70FdYgjEDgkJCTpWVlYMQBfeAaaMPqBZbwECCGYgMzQGQSleCehS0X///jEDvf9lxYoVoOTyAIjfANX+BqrlBrL1gLFf09vb+0FaWvoHMBctA6USUKQABBAjrPiCliKg7AOKIG5ougLlju9Ipc1foDJWqMWGhYWFtsBg4RISEnrg5uY2BWQgQACxIBkGMkQKijmRfPwXWuI8ASp7DQ1vEP4DDO8PwBzzDJheT0CLPQaAAEJOh0o8zAzeihwMiv+gGZ0B4sz/bIwM797/YTh1/wfDIWj5qAfMmtFnzpz5ICIiwqKoqPgjKChoOtCs5wABhJyXpUCGzddgOIethJ71jEFi1nNwgQrKz8zv37//097eDop15qVLl0pAzWAACCAWhEMYOJFdduELA++b3wxsTIwMfzmYGH6xMDG8gYYpKAg+cnJy/gB6VwuYZFiA7E+wvAwQQCy46ozexwzG17+BYx6UVE4B8Vmo68CRFR0dDQo3UAHBBUwJ4lCLGAACCNnAv4zQxAkCxbIMZ0EuBIYb98EPDFo3voGTzjOogVzArGf969cvNmC2+wssHD7BDAQIIBakmHwPDPy3MAMNeBhgpfbbVEkGhqQbDJaXvjI8BPJB4jz79u37DcwlP+fPn38NuTwECCBkA1+8+8Nwtusxg+STHwwcP/8z8EuwMXA1KjBcBSlwEmRgBhrID/U2O7QMBIEHxsbGkrAwBAggmIGgNMT64AfDWyB+By0EQMVZlC0/wwsXQYa38hzgCGGBWv5ZU1OT4c+fP8yLFi1SA3r5Haw8BAggmIGg5KBpJ8BgeOYTg8S3f2DN/OxMDNwgw0AKnv0EJ+avsITu7u6+EZqzQEHwHFqaMwAEEAtShS/pLcTwrU+Z4QwsyQANOwIL06tfGV5BqwmQWoGKigoLYJnJvWPHjhstLS169vb2M0DqAAIIVh6CXHT/9ndIawEUITCXgUDrQwbGbe8YjkJdAzZQVVVV/t69e8LAgtUYaNgxWKQABBByacMHzfTK9gIMYkBZpj//GT4c+8gAKm1AsfseqPYPtHTXAtaEacBqlgHoyq+srKw3XV1dFwHlvwEEECNyYwmp3cIJjbUf0DbLP7RGEg+0bcMCjQxQzH8BWQgQQIzktr5wAYAAYmKgMgAIMAAp8Fx3osz1lgAAAABJRU5ErkJggg==" width="20" height="32" alt="S5" \/><\/a>' +
+ '<\/div><\/form>';
+ }
+ if (controlVis == 'hidden') {
+ var hidden = document.getElementById('navLinks');
+ } else {
+ var hidden = document.getElementById('jumplist');
+ }
+ addClass(hidden,'hideme');
+}
+
+function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
+ if (!s5mode && !isOp) return false;
+ var hScreen = screen.width; var vScreen = screen.height;
+ var vWindow = window.outerHeight; var hWindow = window.outerWidth;
+ if (isOp && s5mode && defaultView=='slideshow' && ((hScreen != hWindow) || (vScreen != vWindow))) {
+ toggle();
+ return false;
+ }
+ if (isOp && !s5mode && ((hScreen != hWindow) || (vScreen != vWindow))) return false;
+ if (isOp && !s5mode && (hScreen == hWindow) && (vScreen == vWindow)) toggle();
+ var vScale = 48; // both yield 16 (the usual browser default) at 1024x768
+ var hScale = 64; // perhaps should auto-calculate based on theme's declared value?
+ if (window.innerHeight) {
+ var vSize = window.innerHeight;
+ var hSize = window.innerWidth;
+ } else if (document.documentElement.clientHeight) {
+ var vSize = document.documentElement.clientHeight;
+ var hSize = document.documentElement.clientWidth;
+ } else if (document.body.clientHeight) {
+ var vSize = document.body.clientHeight;
+ var hSize = document.body.clientWidth;
+ } else {
+ var vSize = 700; // assuming 1024x768, minus chrome and such equals 8:5
+ var hSize = 1024; // these do not account for kiosk mode or Opera Show
+ }
+ var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
+ extendImgSizes(newSize); // scalable images extension
+ extendCanSizes(newSize); // scalable canvas extension
+ extendObjSizes(newSize); // scalable object extension
+ fontSize(newSize,"px");
+ if(!isS2 || firstTime==0) {
+ generateCanvas(); // dynamic canvas extension
+ }
+ if (isGe) { // hack to counter incremental reflow bugs
+ var obj = document.getElementsByTagName('body')[0];
+ obj.style.visibility = 'hidden';
+ obj.style.display = 'none';
+ obj.style.display = 'block';
+ obj.style.visibility = 'visible';
+ changeOpac(100,'slide' + snum);
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("fixReflow()",10);
+ }else {
+ setListPos(); // invisible select extension
+ }
+}
+
+function fixReflow() {
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("finishReflow()",10);
+}
+function finishReflow() {
+ setListPos(); // invisible select extension
+}
+
+function fontSize(val,fmt) {
+ var value = val + fmt;
+ if (!(s5ss = document.getElementById('s5ss'))) {
+ if (!document.createStyleSheet) {
+ document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
+ s5ss.setAttribute('media','screen, projection');
+ s5ss.setAttribute('id','s5ss');
+ } else {
+ document.createStyleSheet();
+ document.s5ss = document.styleSheets[document.styleSheets.length - 1];
+ }
+ }
+ if (!(document.s5ss && document.s5ss.addRule)) {
+ while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
+ s5ss.appendChild(document.createTextNode('html {font-size: ' + value + ' !important;}'));
+ } else {
+ document.s5ss.addRule('html','font-size: ' + value + ' !important;');
+ }
+}
+
+function windowChange() {
+ fontScale();
+}
+
+function notOperaFix() {
+ slideCSS = document.getElementById('slideProj').href;
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ slides.setAttribute('media','screen');
+ outline.disabled = true;
+ if (isGe) {
+ slides.setAttribute('href','null'); // Gecko fix
+ slides.setAttribute('href',slideCSS); // Gecko fix
+ }
+ if ((isIE && notIE7) && document.styleSheets && document.styleSheets[0]) {
+ document.styleSheets[0].addRule('img', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('div', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('.slide', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ }
+}
+
+function getIncrementals(obj) {
+ var incrementals = new Array();
+ if (!obj)
+ return incrementals;
+ var children = obj.childNodes;
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ if (hasClass(child, 'incremental')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'incremental');
+ for (var j = 0; j < child.childNodes.length; j++) {
+ if (child.childNodes[j].nodeType == 1) {
+ addClass(child.childNodes[j], 'incremental');
+ }
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ removeClass(child,'incremental');
+ }
+ }
+ if (hasClass(child, 'show-first')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'show-first');
+ if (child.childNodes[isGe].nodeType == 1) {
+ removeClass(child.childNodes[isGe], 'incremental');
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ }
+ }
+ incrementals = incrementals.concat(getIncrementals(child));
+ }
+ return incrementals;
+}
+
+function createIncrementals() {
+ var incrementals = new Array();
+ for (var i = 0; i < smax; i++) {
+ incrementals[i] = getIncrementals(document.getElementById('slide'+i));
+ }
+ return incrementals;
+}
+
+function trap(e) {
+ if (!e) {
+ e = event;
+ e.which = e.keyCode;
+ }
+ try {
+ modifierKey = e.ctrlKey || e.altKey || e.metaKey;
+ }
+ catch(e) {
+ modifierKey = false;
+ }
+ return modifierKey || e.which == 0;
+}
+
+// notes extension
+function noteLabel() { // Gives notes id's to match parent slides
+ var notes = GetElementsWithClassName('div','notes');
+ for (var i = 0; i < notes.length; i++) {
+ var note = notes[i];
+ var id = 'note' + note.parentNode.id.substring(5);
+ note.setAttribute('id',id);
+ }
+ resetElapsedSlide();
+ resetRemainingTime();
+ window.setInterval('updateElaspedTime()', 1000);
+}
+
+function createNotesWindow() { // creates a window for our notes
+ if (!s5NotesWindow || s5NotesWindow.closed) { // Create the window if it doesn't exist
+ s5NotesWindowLoaded = false;
+ // Note: Safari has a tendency to ignore window options preferring to default to the settings of the parent window, grr.
+ s5NotesWindow = window.open(s5Path+'ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0');
+ }
+ if (s5NotesWindowLoaded) { // Load the current note if the Note HTML has loaded
+ loadNote();
+ } else { // Keep trying...
+ window.setTimeout('createNotesWindow()', 50);
+ }
+}
+
+function loadNote() {
+// Loads a note into the note window
+ var notes = nextNotes = '<em class="disclaimer">There are no notes for this slide.</em>';
+ if (document.getElementById('note' + snum)) {
+ notes = document.getElementById('note' + snum).innerHTML;
+ }
+ if (document.getElementById('note' + (snum + 1))) {
+ nextNotes = document.getElementById('note' + (snum + 1)).innerHTML;
+ }
+
+ var jl = document.getElementById('jumplist');
+ var slideTitle = jl.options[jl.selectedIndex].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex) ? ' (' + jl.selectedIndex + '/' + (smax - 1) + ')' : '');
+ if (incrementals[snum].length > 0) {
+ slideTitle += ' <small>[' + incpos + '/' + incrementals[snum].length + ']</small>';
+ }
+ if (jl.selectedIndex < smax - 1) {
+ var nextTitle = jl.options[jl.selectedIndex + 1].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex + 1) ? ' (' + (jl.selectedIndex + 1) + '/' + (smax - 1) + ')' : '');
+ } else {
+ var nextTitle = '[end of slide show]';
+ }
+
+ if (s5NotesWindow && !s5NotesWindow.closed && s5NotesWindow.document) {
+ s5NotesWindow.document.getElementById('slide').innerHTML = slideTitle;
+ s5NotesWindow.document.getElementById('notes').innerHTML = notes;
+ s5NotesWindow.document.getElementById('next').innerHTML = nextTitle;
+ s5NotesWindow.document.getElementById('nextnotes').innerHTML = nextNotes;
+ }
+ resetElapsedSlide();
+}
+
+function minimizeTimer(id) {
+ var obj = s5NotesWindow.document.getElementById(id);
+ if (hasClass(obj,'collapsed')) {
+ removeClass(obj,'collapsed');
+ } else {
+ addClass(obj,'collapsed');
+ }
+}
+
+function resetElapsedTime() {
+ presentationStart = new Date();
+ slideStart = new Date();
+ updateElaspedTime();
+}
+
+function resetElapsedSlide() {
+ if (snum != previousSlide) {
+ slideStart = new Date();
+ previousSlide = snum;
+ updateElaspedTime();
+ }
+}
+
+function updateElaspedTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var now = new Date();
+ var ep = s5NotesWindow.document.getElementById('elapsed-presentation');
+ var es = s5NotesWindow.document.getElementById('elapsed-slide');
+ ep.innerHTML = formatTime(now.valueOf() - presentationStart.valueOf());
+ es.innerHTML = formatTime(now.valueOf() - slideStart.valueOf());
+}
+
+function resetRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var startField = s5NotesWindow.document.getElementById('startFrom');
+ startFrom = readTime(startField.value);
+ countdown.remaining = startFrom * 60000; // convert to msecs
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var timeLeft = formatTime(countdown.remaining);
+ tl.innerHTML = timeLeft;
+}
+
+function updateRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var now = new Date();
+ if (countdown.state == 'run') {
+ countdown.remaining = countdown.end - now;
+ }
+ tl.style.color = '';
+ tl.style.backgroundColor = '';
+ if (countdown.remaining >= 0) {
+ var timeLeft = formatTime(countdown.remaining);
+ removeClass(tl,'overtime');
+ if (countdown.remaining < 300000) {
+ tl.style.color = 'rgb(' + (255-Math.round(countdown.remaining/2000)) + ',0,0)';
+ tl.style.backgroundColor = 'rgb(255,255,' + (Math.round(countdown.remaining/2000)) + ')';
+ }
+ } else {
+ var timeLeft = '-' + formatTime(-countdown.remaining);
+ addClass(tl,'overtime');
+ }
+ tl.innerHTML = timeLeft;
+}
+
+function toggleRemainingTime() {
+ if (countdown.state == 'pause') countdown.state = 'run'; else countdown.state = 'pause';
+ if (countdown.state == 'pause') {
+ window.clearInterval(countdown.timer);
+ }
+ if (countdown.state == 'run') {
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ countdown.timer = window.setInterval('updateRemainingTime()', 1000);
+ }
+}
+
+function alterRemainingTime(amt) {
+ var change = amt * 60000; // convert to msecs
+ countdown.end += change;
+ countdown.remaining += change;
+ updateRemainingTime();
+}
+
+function formatTime(msecs) {
+ var time = new Date(msecs);
+
+ var hrs = time.getUTCHours() + ((time.getUTCDate() -1) * 24); // I doubt anyone will spend more than 24 hours on a presentation or single slide but just in case...
+ hrs = (hrs < 10) ? '0'+hrs : hrs;
+ if (hrs == 'NaN' || isNaN(hrs)) hrs = '--';
+
+ var min = time.getUTCMinutes();
+ min = (min < 10) ? '0'+min : min;
+ if (min == 'NaN' || isNaN(min)) min = '--';
+
+ var sec = time.getUTCSeconds();
+ sec = (sec < 10) ? '0'+sec : sec;
+ if (sec == 'NaN' || isNaN(sec)) sec = '--';
+
+ return hrs + ':' + min + ':' + sec;
+}
+
+function readTime(val) {
+ var sregex = /:/;
+ var matches = sregex.exec(val);
+ if (matches == null) {
+ return val;
+ } else {
+ var times = val.split(':');
+ var hours = parseInt(times[0]);
+ var mins = parseInt(times[1]);
+ var total = (hours * 60) + mins;
+ return total;
+ }
+}
+// notes extension
+
+// startup process
+function createSlideShow() {
+ defaultCheck();
+ if(!isIE) createDetector(); // (degrade IE) scalable images extension
+ if(opac!=0 || isIE) { // &&!isIE (degrade IE)
+ tranSitions = false;
+ fadeModus = false;
+ }
+ if(tranSitions && document.getElementById && document.createElement){
+ createProgress();
+ var nop=document.getElementById('StartupControl');
+ nop.onload = dumpProgress;
+ }else {
+ startup();
+ showAll();
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+ }
+}
+
+function defaultCheck() {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'defaultView') {
+ defaultView = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'controlVis') {
+ controlVis = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'tranSitions') {
+ tranSitions = (allMetas[i].content == "true") ? true : false;
+ fadeModus = (tranSitions == true) ? true : false;
+ }
+ if (allMetas[i].name == 'fadeDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ fadeDuration = Math.max(200,Math.min(tmp,2000));
+ }
+ if (allMetas[i].name == 'incrDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ incrDuration = Math.max(50,Math.min(tmp,500));
+ }
+ if (allMetas[i].name == 'autoMatic') {
+ autoMatic = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playLoop') {
+ playLoop = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playDelay') {
+ var tmp = parseInt(allMetas[i].content);
+ playDelay = Math.max(5,Math.min(tmp,90))*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ }
+ if (allMetas[i].name == 'audioSupport') {
+ audioSupport = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'audioVolume') {
+ var tmp = parseInt(allMetas[i].content);
+ audioVolume = Math.max(0,Math.min(tmp,100));
+ }
+ if (allMetas[i].name == 'audioError') {
+ audioError = (allMetas[i].content == "true") ? true : false;
+ }
+ }
+}
+
+function createProgress() {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "StartupProgress";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=100)";
+ }else {
+ pg.style.opacity = 1.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/progress.gif)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+
+ var im = document.createElement('img');
+ im.id = "StartupControl";
+ im.src = s5Path+"ui/graphic_support/blank.gif?" + new Date().valueOf();
+ document.getElementsByTagName("body")[0].appendChild(im);
+}
+
+function startup() {
+ createControls(); // hallvord
+ slideLabel();
+ incrementals = createIncrementals();
+ noteLabel(); // [SI:060104] must follow slideLabel()
+ loadNote();
+ fixLinks();
+ externalLinks();
+ fontScale();
+ if (!isOp) {
+ if(isIE) {
+ document.getElementById('lst').style.backgroundImage = 'none';
+ document.getElementById('del').style.backgroundImage = 'none';
+ }else {
+ document.getElementById('audio').style.backgroundImage = 'none';
+ }
+ notOperaFix();
+ }else if(isOp) {
+ var obj = document.getElementById('exit');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('exit').style.opacity = 0.5;
+ obj = document.getElementById('toggle');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('toggle').style.opacity = 0.5;
+ document.getElementById('jumplist').style.visibility = 'hidden';
+ document.getElementById('list').style.visibility = 'hidden';
+ document.getElementById('lst').style.opacity = 0.5;
+ obj = document.getElementById('audio');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('audio').style.opacity = 0.5;
+ document.getElementById('volumelist').style.visibility = 'hidden';
+ document.getElementById('volume').style.visibility = 'hidden';
+ document.getElementById('vol').style.opacity = 0.5;
+ document.getElementById('delaylist').style.visibility = 'hidden';
+ document.getElementById('delay').style.visibility = 'hidden';
+ document.getElementById('del').style.opacity = 0.5;
+ }
+ slideJump();
+ if (defaultView == 'outline') toggle();
+ document.onkeyup = keys;
+ document.onkeypress = trap;
+ document.onclick = clicker;
+}
+
+function preloadImgages() {
+ var temp = '';
+ var objects = document.getElementsByTagName('img');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].src != '') {
+ temp = new Image();
+ temp.src = objects[i].src;
+ }
+ }
+}
+
+function showAll() {
+ var obj1 = GetElementsWithClassName('div','presentation')[0];
+ if(!obj1) var obj1 = GetElementsWithClassName('ol','presentation')[0];
+ var obj2 = GetElementsWithClassName('div','layout')[0];
+ if(!obj1){}else {obj1.style.display = 'block'};
+ if(!obj2){}else {obj2.style.display = 'block'};
+}
+
+function dumpProgress() {
+ document.body.removeChild(document.getElementById('StartupControl'));
+ startup();
+ preloadImgages();
+ showAll();
+ createSoundManagerScript();
+ shiftOpacity('StartupProgress',1000);
+ window.setTimeout("removeProgress()",1000);
+}
+
+function removeProgress() {
+ document.body.removeChild(document.getElementById('StartupProgress'));
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+}
+function panelSetup() {
+ if(playPause) {
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ if(playLoop) {
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ if(audioSupport && !isIE && !isOp) {
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ }
+ if(fadeModus && !isIE) {
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ if(autoMatic) {
+ var obj = document.getElementById('auto'); changeClass(obj,'ison');
+ startPlay();
+ }
+ if(audioVolume && !isIE && !isOp) {
+ var idx = 0;
+ if(audioVolume >= 95 && audioVolume <= 100) {idx = 0;}
+ else if(audioVolume >= 85 && audioVolume < 95) {idx = 1;}
+ else if(audioVolume >= 75 && audioVolume < 85) {idx = 2;}
+ else if(audioVolume >= 65 && audioVolume < 75) {idx = 3;}
+ else if(audioVolume >= 55 && audioVolume < 65) {idx = 4;}
+ else if(audioVolume >= 45 && audioVolume < 55) {idx = 5;}
+ else if(audioVolume >= 35 && audioVolume < 45) {idx = 6;}
+ else if(audioVolume >= 25 && audioVolume < 35) {idx = 7;}
+ else if(audioVolume >= 15 && audioVolume < 25) {idx = 8;}
+ else if(audioVolume >= 5 && audioVolume < 15) {idx = 9;}
+ else {idx = 10;}
+ document.getElementById('volumelist').selectedIndex = idx;
+ }
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+}
+// startup process
+
+// shutdown process
+function byby() {
+ stopPlay();
+ if(tranSitions && fadeModus && s5mode && !isOp) {
+ fadeoutSound(curSoundID,true); // audio support
+ var pg = document.createElement('div');
+ pg.id = "GoodBy";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=0)";
+ }else {
+ pg.style.opacity = 0.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/finish.gif)";
+ document.getElementsByTagName("body")[0].appendChild(pg);
+ shiftOpacity('GoodBy',1000);
+ window.setTimeout("history.back()",1000);
+ }else {
+ stopSound(curSoundID);
+ history.back();
+ }
+}
+// shutdown process
+
+// scalable images extension
+function createDetector() {
+ var em = document.createElement('div');
+ em.id='EMSizeControl'; em.style.position="absolute"; em.style.left="-999px";
+ em.style.width="1em"; em.style.height="1em"; em.style.opacity=0.0;
+ document.getElementsByTagName("body")[0].appendChild(em);
+ var nop=document.getElementById('EMSizeControl');
+ if(!nop||findPosX(nop)!=-999) {}else {
+ opac=document.getElementById('EMSizeControl').style.opacity;
+ empx=document.getElementById('EMSizeControl').offsetHeight;
+ document.body.removeChild(document.getElementById('EMSizeControl'));
+ var objects = document.getElementsByTagName('img');
+ var j = 0; var i = 0; var k = 0; var d; var obj;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ images[j] = objects[i];
+ ++j;
+ }
+ }
+ var objects = document.getElementsByTagName('canvas'); j = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ canvas[objects[i].id] = objects[i];
+ if(j==0) {
+ if(objects[i].getContext) {
+ canvasSupport = true;
+ }
+ ++j;
+ }
+ }
+ }
+ if(canvasSupport!=true) {
+ for (d in canvas) {
+ try {
+ canvas[d].setAttribute("width",1);
+ canvas[d].setAttribute("height",1);
+ } catch (e) {
+ }
+ }
+ }
+ var objects = document.getElementsByTagName('table');
+ j = 0; k = 0; l = 0; var w; var h; var tmp; var cnt;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^piechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ piecharts[j] = objects[i];
+ em = piecharts[j].getAttribute("summary");
+ if(em != "") em = "," + em;
+ piecharts[j].setAttribute("summary", w + "," + h + em);
+ ++j;
+ }
+ }
+ }
+ if(objects[i].className.match(/^barchart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ barcharts[k] = objects[i];
+ em = barcharts[k].getAttribute("summary");
+ if(em != "") em = "," + em;
+ barcharts[k].setAttribute("summary", w + "," + h + em);
+ ++k;
+ }
+ }
+ }
+ if(objects[i].className.match(/^linechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ linecharts[l] = objects[i];
+ em = linecharts[l].getAttribute("summary");
+ if(em != "") em = "," + em;
+ linecharts[l].setAttribute("summary", w + "," + h + em);
+ ++l;
+ }
+ }
+ }
+ }
+ objects = document.getElementsByTagName('object'); j = 0; i = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ medias[j] = objects[i]; ++j;
+ if(!isIE) {
+ if(objects[i].getAttributeNode("classid")) objects[i].removeAttributeNode(objects[i].getAttributeNode("classid"));
+ if(objects[i].getAttributeNode("codebase")) objects[i].removeAttributeNode(objects[i].getAttributeNode("codebase"));
+ }
+ }
+ }
+ }
+}
+function extendImgSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < images.length; i++) {
+ w=images[i].getAttribute("width",0);
+ h=images[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ images[i].style.width=Math.floor(w*q)+"px";
+ images[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+
+function extendCanSizes(f) {
+ if(empx>0 && canvasSupport) {
+ var q = (f/empx); var w = 0; var h = 0; var tmp = ""; var cnt; var obj;
+ for(var i=0; i < piecharts.length; i++) {
+ if(piecharts[i].getAttribute("summary")) {
+ tmp = piecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = piecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < barcharts.length; i++) {
+ if(barcharts[i].getAttribute("summary")) {
+ tmp = barcharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = barcharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < linecharts.length; i++) {
+ if(linecharts[i].getAttribute("summary")) {
+ tmp = linecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = linecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ }
+}
+function extendObjSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < medias.length; i++) {
+ w=medias[i].getAttribute("width",0);
+ h=medias[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ medias[i].style.width=Math.floor(w*q)+"px";
+ medias[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+function findPosX(obj) {
+ var posLeft = 0;
+ while (obj.offsetParent) {
+ posLeft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ return posLeft;
+}
+function findPosY(obj) {
+ var posTop = 0;
+ while (obj.offsetParent) {
+ posTop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ return posTop;
+}
+// scalable images extension
+
+// canvas chart extension
+function deg2rad(degrees) {
+ return Math.PI *degrees/180;
+}
+function rad2deg(radians) {
+ return 180.0 *radians/Math.PI;
+}
+function circle_point_x(radians, diameter) {
+ var x = Math.cos(radians)*(diameter/2);
+ return x;
+}
+function circle_point_y(radians, diameter) {
+ var y = Math.sin(radians)*(diameter/2);
+ return y;
+}
+function roundTo(val,dig) {
+ var num = val;
+ if (val > 8191 && val < 10485) {
+ val = val-5000;
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ num = num+5000;
+ } else {
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ }
+ return num;
+}
+function searchColor(value) {
+ for (var dat in colorNames) {
+ if(dat==value) return colorNames[dat];
+ }
+ return false;
+}
+function scanColor(value) {
+ if(value.match(/^#[0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var val1 = value.substr(1,1).toLowerCase();
+ var val2 = value.substr(2,1).toLowerCase();
+ var val3 = value.substr(3,1).toLowerCase();
+ value = '#' + val1 + val1 + val2 + val2 + val3 + val3;
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var tmp = searchColor(value.toLowerCase());
+ if(!tmp) {}else{value = tmp;}
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ value = '#000000';
+ }
+ return value.toLowerCase();
+}
+function hex2rgb(val,trans) {
+ if(val.length==7) {
+ var tp1 = Math.max(0,Math.min(parseInt(val.substr(1,2),16),255));
+ var tp2 = Math.max(0,Math.min(parseInt(val.substr(3,2),16),255));
+ var tp3 = Math.max(0,Math.min(parseInt(val.substr(5,2),16),255));
+ return 'rgba(' + tp1 + ',' + tp2 + ',' + tp3 + ',' + trans + ')';
+ }
+}
+function trim(str) {
+ return (str.replace(/\s+$/,"").replace(/^\s+/,""));
+}
+function roundedRect(ctx,x,y,width,height,radius){
+ ctx.beginPath();
+ ctx.moveTo(x,y+radius);
+ ctx.lineTo(x,y+height-radius);
+ ctx.quadraticCurveTo(x,y+height,x+radius,y+height);
+ ctx.lineTo(x+width-radius,y+height);
+ ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius);
+ ctx.lineTo(x+width,y+radius);
+ ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
+ ctx.lineTo(x+radius,y);
+ ctx.quadraticCurveTo(x,y,x,y+radius);
+ ctx.closePath();
+}
+function drawString(ctx, text, fc, tx, ty) {
+ var xp = 0; var c = "";
+ ctx.beginPath();
+ for (var i = 0; i < text.length; i++) {
+ c = text[i];
+ ctx.drawImage(font, signs[c].sx, signs[c].sy, signs[c].sw, signs[c].sh, tx+xp, ty, signs[c].sw*fc, signs[c].sh*fc);
+ xp += (signs[c].sw*fc);
+ }
+ ctx.closePath();
+}
+function strokeString(ctx, txt, col, fh, tx, ty) {
+ var fw = fh*0.666666; var lw = fh*0.125;
+ var ls = lw/2; var cr = lw; var xp = 0;
+ ctx.lineCap = "round"; ctx.lineJoin = "round"
+ ctx.lineWidth = lw; ctx.strokeStyle = col;
+ for (var i = 0; i < txt.length; i++) {
+ strokeSymbol(ctx, txt[i], ls, tx+xp, ty, fw, fh);
+ xp += (txt[i]!="."?fw+cr:(fw/2)+cr);
+ }
+}
+function strokeSymbol(ctx, symbol, fc, cx, cy, cw, ch) {
+ ctx.beginPath();
+ switch (symbol) {
+ case "0":
+ ctx.moveTo(cx+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+(cw/2),(cw/2)-fc,deg2rad(180),0, false);
+ ctx.arc(cx+(cw/2),(cy+ch)-(cw/2),(cw/2)-fc,0,deg2rad(180), false);
+ ctx.closePath();
+ break;
+ case "1":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.moveTo(cx+(cw*0.666666),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.666666),cy+fc);
+ ctx.lineTo(cx+(cw*0.25),cy+(ch*0.25));
+ break;
+ case "2":
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.8));
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+fc,cy+ch-fc);
+ ctx.arc(cx+(cw/2),cy+(cw*0.425),(cw*0.425)-fc,deg2rad(45),deg2rad(-180), true);
+ break;
+ case "3":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-90),deg2rad(180), false);
+ break;
+ case "4":
+ ctx.moveTo(cx+(cw*0.75),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.5),cy+ch-fc);
+ break;
+ case "5":
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-80),deg2rad(180), false);
+ break;
+ case "6":
+ ctx.moveTo(cx+fc,cy+ch-(cw*0.5)-fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-180),deg2rad(180), false);
+ ctx.bezierCurveTo(cx+fc,cy+fc,cx+fc,cy+fc,cx+(cw*0.9)-fc,cy+fc);
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ break;
+ case "7":
+ ctx.moveTo(cx+(cw*0.5),cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.25)-fc);
+ break;
+ case "8":
+ ctx.moveTo(cx+(cw*0.92)-fc,cy+(cw*0.59));
+ ctx.arc(cx+(cw/2),cy+(cw*0.45),(cw*0.45)-fc,deg2rad(25),deg2rad(-205), true);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-135),deg2rad(-45), true);
+ ctx.closePath();
+ ctx.moveTo(cx+(cw*0.79),cy+(ch*0.47));
+ ctx.lineTo(cx+(cw*0.21),cy+(ch*0.47));
+ break;
+ case "9":
+ ctx.moveTo(cx+cw-fc,cy+(cw*0.5));
+ ctx.arc(cx+(cw/2),cy+(cw*0.5),(cw*0.5)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.bezierCurveTo(cx+cw-fc,cy+ch-fc,cx+cw-fc,cy+ch-fc,cx+(cw*0.1)+fc,cy+ch-fc);
+ break;
+ case "%":
+ ctx.moveTo(cx+fc,cy+(ch*0.75));
+ ctx.lineTo(cx+cw-fc,cy+(ch*0.25));
+ ctx.moveTo(cx+(cw*0.505),cy+(cw*0.3));
+ ctx.arc(cx+(cw*0.3),cy+(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.moveTo(cx+(cw*0.905),cy+ch-(cw*0.3));
+ ctx.arc(cx+(cw*0.7),cy+ch-(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ break;
+ case ".":
+ ctx.moveTo(cx+(cw*0.25),cy+ch-fc-fc);
+ ctx.arc(cx+(cw*0.25),cy+ch-fc-fc,fc,deg2rad(0),deg2rad(360), false);
+ ctx.closePath();
+ break;
+ default:
+ break;
+ }
+ ctx.stroke();
+}
+function drawBar(ctx,x,y,width,height,color,value,textdiv){
+ var rw = width/2; var rh = rw/2;
+ height = Math.max(height,rw);
+ var dh = Math.max(height-(2*rh),0.1); var S2L;
+ var xx = rw/8; var yy = rh/4;
+ var yo = rh/2; y = y - yy;
+ if(canvas_noshadow <= 0 && canvas_noshade <= 0) {
+ ctx.save();
+ S2L = ctx.createRadialGradient(x+rw+rh,y+height-rw+yy+rh,0,x+rw,y+height-rw+yy,rw);
+ S2L.addColorStop(0, 'rgba(0,0,0,0.5)');
+ S2L.addColorStop(0.7, 'rgba(0,0,0,0.25)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = S2L;
+ ctx.scale(1,0.5);
+ ctx.translate(xx,y+height+yy);
+ if(isOp){
+ ctx.fillRect(x,y+yy+height-width,width,width);
+ }else {
+ ctx.arc(x+rw,y+yy+height-width,width,0,deg2rad(360), false);
+ ctx.fill();
+ }
+ ctx.restore();
+ }else if(canvas_noshadow <= 0 && canvas_noshade >= 1) {
+ ctx.fillStyle = 'rgba(0,0,0,0.2)';
+ ctx.fillRect(x+yo,y+rh+yo+yo,width,dh);
+ }
+
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x,y+(height/2),x+width,y+(height/2));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.75)');
+ S2L.addColorStop(0.2, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.3, 'rgba(0,0,0,0)');
+ S2L.addColorStop(0.5, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.35)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.1)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.strokeStyle = S2L;
+ ctx.stroke();
+ }else {
+ ctx.fillStyle = color;
+ ctx.fillRect(x,y+rh+yo,width,dh);
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var bw = width; var bh = bw/4;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ var c; var w;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,x+(width/2)-(bw/2),y,bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext <= 0) {
+ strokeString(ctx, value + "%","rgba(48,48,48,1)", th, x+(width/2)-(w/2), y+((bh-th)/2));
+ }else {
+ drawString(ctx, value + "%", tf, x+(width/2)-(w/2), y+((bh-th)/2.2));
+ }
+ }else {
+ var bh = bw/3; var th = roundTo(bh*0.75,0);
+ roundedRect(ctx,x,y,bw,bh,bh/4);
+ ctx.fill();
+ var obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = x + "px";
+ obj.style.top = y+((bh-th)/2.2) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+
+ }
+}
+function drawLine(ctx,x,y,width,height,dist,array,factor,color,fill){
+ if(fill <= 0){
+ var style = hex2rgb(color,0.5);
+ ctx.lineJoin = "miter";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height);
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.lineTo(x+width,y+height);
+ ctx.lineTo(x,y+height);
+ ctx.closePath();
+ ctx.fillStyle = style;
+ ctx.fill();
+ }
+ ctx.lineJoin = "round";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height-(array[0]*factor));
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.strokeStyle = color;
+ ctx.stroke();
+}
+function setDataURL(cid) {
+ if(cid.toDataURL) {
+ var obj = document.getElementById(cid.id + "_link");
+ if(obj) {
+ obj.setAttribute("title", "To Data URL");
+ obj.setAttribute("target", "_blank");
+ obj.setAttribute("href", cid.toDataURL());
+ }
+ }
+}
+function get_input(dataobj,canvasobj,linechart) {
+ var table = document.getElementById(dataobj);
+ var canvas = document.getElementById(canvasobj);
+ var row; var clm; var cnt = 0; var val = 0; var nme = ""; var col = "";
+ if(canvas.getContext) {
+ canvas_width = parseInt(canvas.style.width);
+ canvas_height = parseInt(canvas.style.height);
+ if(canvas_width >= 16 && canvas_height >= 16) {
+ var tmp = table.getAttribute("summary");
+ canvas_noshade = 0; canvas_noshadow = 0;
+ canvas_notext = 0; canvas_imgtext = 0;
+ canvas_htmltext = 0; canvas_nofill = 0;
+ if(tmp.search(/noshadow/) != -1) canvas_noshadow = 1;
+ if(tmp.search(/noshade/) != -1) canvas_noshade = 1;
+ if(tmp.search(/nofill/) != -1) canvas_nofill = 1;
+ if(tmp.search(/notext/) != -1) canvas_notext = 1;
+ if(tmp.search(/htmltext/) != -1) canvas_htmltext = 1;
+ if(tmp.search(/imgtext/) != -1) canvas_imgtext = 1;
+ if(table.getAttribute("bgcolor")) {
+ canvas_bgcolor = scanColor(table.getAttribute("bgcolor"));
+ }
+ ChartData = new Array(); colorSlice = new Array();
+ if(table.getElementsByTagName("tr")[0].getElementsByTagName("th")[0]) cnt = 1;
+ for(var r = cnt; r < table.getElementsByTagName("tr").length; r++) {
+ row = table.getElementsByTagName("tr")[r];
+ clm = row.getElementsByTagName("td").length;
+ if(row.getElementsByTagName("td")[0].getAttribute("bgcolor")) {
+ col = scanColor(row.getElementsByTagName("td")[0].getAttribute("bgcolor")); val = 0;
+ nme = trim(row.getElementsByTagName("td")[1].innerHTML.replace(/<[^>]+>/g,""));
+ if(!linechart) {
+ if(clm > 3) {
+ for(var z = 2; z < clm; z++) {
+ val += parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ }else {
+ val = parseFloat(row.getElementsByTagName("td")[2].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ if(!isNaN(val) && val > 0 && nme != '') {
+ colorSlice[r-cnt] = col; ChartData[nme] = Math.abs(val);
+ }else {
+ break;
+ }
+ }else {
+ val = 0; i = 0;
+ if(clm > 3 && nme != '') {
+ ChartData[r-cnt] = new Array();
+ colorSlice[r-cnt] = col;
+ for(var z = 2; z < clm; z++) {
+ val = Math.abs(parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,"")));
+ if(!isNaN(val) && val >= 0) {
+ ChartData[r-cnt][i] = val; i++;
+ }else {
+ ChartData[r-cnt][i] = 0; i++;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }
+ }
+}
+function setPieChart(canvasobj,textobj) {
+ var cd = (Math.min(canvas_width,canvas_height)/110)*100;
+ var cp = cd*0.1; var cr = cd/2;
+ var sr = cr*0.93; var cw = cd+cp; var ch = cw;
+ var cx = (cd/2)+(cp/2); var cy = cx; var ct = 0;
+ for (var data in ChartData) {
+ ct += ChartData[data];
+ }
+ var poc = ct/100;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ }
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,cw,ch);
+ }else {
+ ctx.clearRect(0,0,cw,ch);
+ }
+ if(canvas_noshadow <= 0) {
+ if(!isOp) {
+ ctx.beginPath();
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),cr,cx+(cr*0.1),cy+(cr*0.1),sr*0.9);
+ B2B.addColorStop(0, 'rgba(0,0,0,0)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.arc(cx+(cr*0.1),cy+(cr*0.1),cr,0,deg2rad(360), false);
+ ctx.closePath();
+ ctx.fillStyle = B2B;
+ ctx.fill();
+ }else {
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),0,cx+(cr*0.1),cy+(cr*0.1),cr);
+ B2B.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(0.87, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = B2B;
+ ctx.fillRect(0,0,cw,ch);
+ }
+ }
+ var val = 0; var deg = 0; var idx = 0; var data;
+ for (data in ChartData) {
+ val = ChartData[data]; sdeg = deg;
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ ctx.beginPath();
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr,sdeg,edeg, false);
+ ctx.lineTo(cx,cy);
+ ctx.closePath();
+ ctx.fillStyle = colorSlice[(idx++)];
+ ctx.fill();
+ }
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ var W2T = ctx.createLinearGradient(cp*2,cp*2,cx,cy);
+ W2T.addColorStop(0, 'rgba(255,255,255,0.8)');
+ W2T.addColorStop(1, 'rgba(255,255,255,0)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.fillStyle = W2T;
+ ctx.fill();
+ ctx.beginPath();
+ var T2B = ctx.createLinearGradient(cx,cy,cw-(cp*2),ch-(cp*2));
+ T2B.addColorStop(0, 'rgba(0,0,0,0)');
+ T2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.fillStyle = T2B;
+ ctx.fill();
+ ctx.beginPath();
+ var B2T = ctx.createLinearGradient(cx,cy,cw-(cp*1.9),ch-(cp*1.9));
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.strokeStyle = B2T;
+ ctx.stroke();
+ ctx.beginPath();
+ var T2W = ctx.createLinearGradient(cx,cy,(cp*1.9),(cp*1.9));
+ T2W.addColorStop(0, 'rgba(255,255,255,0)');
+ T2W.addColorStop(1, 'rgba(255,255,255,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.strokeStyle = T2W;
+ ctx.stroke();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var mpos = 0; var per = 0; var gx = 0;
+ var gy = 0; var tx = 0; var ty = 0;
+ var obj = ""; var w = 0; var c = 0;
+ var bw = cr*0.45; var bh = cr*0.125;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext >= 1) {
+ bw = (cr*0.365);
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ for (data in ChartData) {
+ val = ChartData[data];
+ sdeg = deg; mpos = deg+(((val/2)/ct)*deg2rad(360));
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ per = roundTo(val/poc,2);
+ gx = circle_point_x(mpos, cd);
+ gy = circle_point_y(mpos, cd);
+ tx = parseFloat((cx+(2*Math.floor(cx + gx)))/3);
+ ty = (cy+(2*Math.floor(cy + gy)))/3;
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext >= 1) {
+ drawString(ctx, per + "%", tf, tx-(w/2), ty-(th/1.8));
+ }else {
+ strokeString(ctx, per + "%","rgba(48,48,48,1)", th, tx-(w/2), ty-(th/2));
+ }
+ }else {
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = (tx-(bw/2)) + "px";
+ obj.style.top = ty-(th/1.8) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+ }
+ }
+ }
+}
+function setBarChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9; var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05; var ph = canvas_height*0.05;
+ var cm = 0; var ct = 0;
+ for (var data in ChartData) {
+ cm = Math.max(cm,ChartData[data]);
+ ct += ChartData[data];
+ }
+ var hf = ih/cm; var bs = colorSlice.length;
+ var bw = iw/(bs*1.1); var poc = ct/100;
+ var th = roundTo((bw/3)*0.75,0);
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ var obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ var cc = ""; var bh = 0; var idx = 0; var t = 0; per = 0;
+ for (var data in ChartData) {
+ per = roundTo(ChartData[data]/poc,2);
+ bh = ChartData[data]*hf;
+ drawBar(ctx,pw+(t*(bw*1.1)),ph+ih-bh,bw,bh,colorSlice[(idx++)],per,textdiv);
+ t++;
+ }
+ }
+}
+function setLineChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9;
+ var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05;
+ var ph = canvas_height*0.05;
+ var cm = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ cm = Math.max(cm,ChartData[i][j]);
+ }
+ }
+ var hf = (ih*0.95)/cm; var bw = iw;
+ var dw = iw/(ChartData[0].length-1)
+ var dh = ih/(ChartData[0].length-1)
+ var ps = Math.min(pw,ph); lw = ps/4;
+ var B2T;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_noshadow <= 0) {
+ B2T = ctx.createLinearGradient(pw+ps,ph+ih+1,pw+ps+ps,ph+ih+1);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps,ph+ih);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.lineTo(pw+ps+ps,ph+ih);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+ps+ps,ph+ih,pw+ps+ps,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps+ps,ph+ih);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+ps+iw,ph+ih+ps);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.closePath();
+ ctx.fill();
+ var B2T = ctx.createLinearGradient(pw+iw+1,ph+ps,pw+iw+1,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.35)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps);
+ ctx.lineTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+iw,ph+ps+ps,pw+iw+ps,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.35)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+iw+ps,ph+ih+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = lw/2;
+ ctx.strokeStyle = "rgba(255,255,255,0.25)";
+ if(canvas_nofill <= 0) {
+ ctx.fillStyle = "rgba(240,240,240,0.8)";
+ ctx.strokeStyle = "rgba(255,255,255,1)";
+ ctx.fillRect(pw,ph,iw,ih);
+ }
+ for (var i = 0; i < ChartData[0].length-1; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph);
+ ctx.lineTo(pw+(i*dw),ph+ih);
+ ctx.stroke();
+ }
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw,ph+(i*dh));
+ ctx.lineTo(pw+iw,ph+(i*dh));
+ ctx.stroke();
+ }
+ ctx.lineWidth = lw;
+ var cc = ""; var bh = 0; var idx = 0; var t = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ t = Math.max(t,ChartData[i][j]);
+ }
+ bh = t*hf; cc = colorSlice[(idx++)];
+ drawLine(ctx,pw,ph+ih-bh,bw,bh,dw,ChartData[i],hf,cc,canvas_nofill);
+ }
+ ctx.beginPath();
+ ctx.moveTo(pw,ph);
+ ctx.lineTo(pw,ph+ih);
+ ctx.lineTo(pw+iw+(lw/2),ph+ih);
+ ctx.strokeStyle = "rgba(48,48,48,1)";
+ ctx.stroke();
+ ctx.lineWidth = lw/2;
+ B2T = ctx.createLinearGradient(pw,ph+ih,pw,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,1)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.strokeStyle = B2T;
+ for (var i = 0; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph+ih);
+ ctx.lineTo(pw+(i*dw),ph+ih+ps);
+ ctx.stroke();
+ }
+ B2T = ctx.createLinearGradient(pw-ps,ph,pw,ph);
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,1)');
+ ctx.strokeStyle = B2T;
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw-ps,ph+(i*dh));
+ ctx.lineTo(pw,ph+(i*dh));
+ ctx.stroke();
+ }
+ }
+}
+function generateCanvas() {
+ if(canvasSupport) {
+ var canvasID; var tdataID; var textID;
+ var tmp; var dat; var i; var j;
+ for(i=0; i < piecharts.length; i++) {
+ tmp = piecharts[i].id.split("_");
+ tdataID = piecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setPieChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < barcharts.length; i++) {
+ tmp = barcharts[i].id.split("_");
+ tdataID = barcharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setBarChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < linecharts.length; i++) {
+ tmp = linecharts[i].id.split("_");
+ tdataID = linecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID,true);
+ if(colorSlice.length > 0) {
+ if(ChartData.length == colorSlice.length) {
+ setLineChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ }
+}
+// canvas chart extension
+
+// invisible select extension
+function setListPos(opt) {
+ if(!isIE) { //(degrade IE)
+ var ref = document.getElementById('list');
+ var x = findPosX(ref); var y = findPosY(ref);
+ var obj = document.getElementById('jumplist');
+ obj.style.position = 'fixed'; obj.style.left = x + 'px'; obj.style.top = y + 'px';
+ var vol = document.getElementById('volumelist');
+ ref = document.getElementById('volume');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ vol.style.position = 'fixed'; vol.style.left = x + 'px'; vol.style.top = y + 'px';
+ var del = document.getElementById('delaylist');
+ ref = document.getElementById('delay');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ del.style.position = 'fixed'; del.style.left = x + 'px'; del.style.top = y + 'px';
+ var pnl = document.getElementById('navLinks');
+ }
+ if(opt) {
+ if(isIE) {
+ //(degrade IE)
+ //pnl.style.filter = "alpha(opacity=80)";
+ }else {
+ obj.style.opacity = 0.0;
+ vol.style.opacity = 0.0;
+ del.style.opacity = 0.0;
+ pnl.style.opacity = 0.8;
+ }
+ }
+}
+// invisible select extension
+
+// transition extension
+function switchFade() {
+ if(tranSitions && s5mode && fadeModus) {
+ fadeModus = false;
+ playDelay = playDelay-(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'isoff');
+ }else if(tranSitions && s5mode && !fadeModus) {
+ fadeModus = true;
+ playDelay = playDelay+(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ currentSlide();
+}
+function opacity(ids, opacStart, opacEnd, millisec) {
+ var speed = Math.round(millisec / 100);
+ var timer = 0;
+ if(opacStart > opacEnd) {
+ for(var i = opacStart; i >= opacEnd; i--) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ } else if(opacStart < opacEnd) {
+ for(var i = opacStart; i <= opacEnd; i++) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ }
+}
+function changeOpac(opacity, ids) {
+ var obj = document.getElementById(ids);
+ if (isIE) {
+ obj.style.filter = "alpha(opacity=" + opacity + ")";
+ } else {
+ obj.style.opacity = (opacity / 100);
+ }
+}
+function shiftOpacity(ids, millisec) {
+ if(document.getElementById(ids).style.opacity != '') {
+ var currentOpac = document.getElementById(ids).style.opacity * 100;
+ } else {
+ var currentOpac = 0;
+ }
+ if(currentOpac == 0) {
+ opacity(ids, currentOpac, 100, millisec);
+ } else if(currentOpac > 0) {
+ opacity(ids, currentOpac, 0, millisec);
+ }
+}
+// transition extension
+
+// autoplay extension
+function autoPlay() {
+ if (s5mode && autoMatic && !playPause) {
+ if ((snum >= (smax-1)) && playLoop) {
+ goTo(0);
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }else if ((snum >= (smax-1)) && !playLoop) {
+ stopPlay();
+ }else {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ if (incrementals[snum].length >0) {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = parseInt(playDelay/(incrementals[snum].length+1));
+ remainDer = parseInt(playDelay-(incrDelay*incrementals[snum].length));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ } else {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = incrDuration;
+ remainDer = parseInt(playDelay-(incrementals[snum].length*incrDuration));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }
+ }
+}
+function autoPlayIncr() {
+ if (incpos < incrementals[snum].length) {
+ subgo(1);
+ autoRun = setTimeout('autoPlayIncr();',incrDelay);
+ }else {
+ autoRun = setTimeout('nop();',remainDer);
+ }
+}
+function nop() {
+ // no operation dummy
+}
+function togglePlay() {
+ if (autoRun && s5mode) {
+ stopPlay();
+ }else if (!autoRun && s5mode) {
+ startPlay();
+ }
+}
+function stopPlay() {
+ if (autoRun && s5mode) {
+ clearTimeout(autoRun); autoRun = null;
+ autoMatic = false; playPause = false; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'isoff');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ currentSlide();
+ }
+}
+function startPlay() {
+ if (!autoRun && s5mode) {
+ playPause = false; autoMatic = true; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'ison');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ autoRun = setTimeout('autoPlay();',playDelay);
+ currentSlide();
+ }
+}
+function pausePlay() {
+ if (s5mode && autoMatic) {
+ if (playPause) {
+ playPause = false; autoRun = setTimeout('autoPlay();',playDelay);
+ var obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ }else {
+ if (autoRun){
+ clearTimeout(autoRun); autoRun = null; playPause = true;
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+ }
+}
+function switchLoop() {
+ if(s5mode) {
+ if (playLoop) {
+ playLoop = false;
+ var obj = document.getElementById('loop'); changeClass(obj,'isoff');
+ }else {
+ playLoop = true;
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+}
+function setDelay() {
+ var val = document.getElementById('delaylist');
+ if(s5mode) {
+ var delay = Math.max(5,Math.min(parseInt(val.value),300));
+ playDelay = (fadeModus == true) ? ((delay*1000)+(2*fadeDuration)) : (delay*1000);
+ }
+}
+// autoplay extension
+
+// audio extension
+function createSoundManagerScript() {
+ if(typeof soundManager=="undefined") {
+ onerrorSM2();
+ }else {
+ var script=document.createElement('SCRIPT');
+ var tx=document.createTextNode("soundManager.createMovie();");
+ script.appendChild(tx);
+ document.getElementsByTagName("body")[0].appendChild(script);
+ }
+}
+//soundManager.onload = function() {
+function onloadSM2() {
+ if(!isIE) { //(degrade IE)
+ swfUnloaded = false;
+ preloadSounds();
+ }
+}
+//soundManager.onerror = function() {
+function onerrorSM2() {
+ if(typeof soundManager!="undefined") {
+ soundManager.destruct;
+ delete soundManager;
+ }
+ audioSupport = false; swfUnloaded = true;
+ if(audioError && !isIE && !isOp) {
+ var dv = document.createElement('div'); dv.id = "guru";
+ var d2=document.createElement('div'); dv.appendChild(d2);
+ var tx=document.createTextNode('Guru Meditation - SoundManager failed to load/initialize!');
+ d2.appendChild(tx); document.getElementById('slide0').appendChild(dv);
+ }
+}
+function audioSetup() {
+ if(sound[0]) {
+ playSound(0);
+ }else if(sound[bgSoundItem] && !sound[0]) {
+ playSound(bgSoundItem);
+ }
+}
+function fadeoutSound(ids, option) {
+ if(curSoundID >= 0 && !swfUnloaded) {
+ if(isNaN(ids)) {
+ if(ids == "bgSound") {
+ var cnum = parseInt(bgSoundItem);
+ }else {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && ids == sound[i]["id"]) {
+ var cnum = i;
+ break;
+ }
+ }
+ }
+ }else {
+ var cnum = ids;
+ ids = sound[cnum]["id"];
+ }
+ var vol = getMaxVolume(sound[cnum]["volume"]);
+ var millisec = fadeDuration;
+ var speed = Math.round(millisec / vol);
+ var timer = 0;
+ for(var i = vol; i > 0; i--) {
+ setTimeout("fadeout(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ if(option) setTimeout("stopSound('"+ids+"')",millisec);
+ }
+}
+function fadeout(volume, id) {
+ soundManager.setVolume(id,volume);
+}
+function stopSound(ids) {
+ var sid;
+ if(isNaN(ids)) {
+ sid = ids;
+ }else if(sound[ids]) {
+ sid = sound[ids]["id"];
+ }
+ if(sid!='' && curSoundID >= 0) {
+ soundManager.stop(sid);
+ curSoundID = -1;
+ }
+}
+function toggleSounds() {
+ if(audioSupport && !swfUnloaded) {
+ stopAllSounds();
+ }else if (!audioSupport && !swfUnloaded) {
+ allowSounds();
+ }
+}
+function allowSounds() {
+ if(!swfUnloaded) {
+ audioSupport = true;
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ currentSlide();
+ }
+}
+function stopAllSounds() {
+ if(curSoundID >= 0) {
+ stopSound(curSoundID);
+ }else {
+ soundManager.stopAll();
+ curSoundID = -1;
+ }
+ audioSupport = false;
+ var obj = document.getElementById('audio'); changeClass(obj,'isoff');
+ currentSlide();
+}
+function playSound(id) {
+ if(audioSupport && !swfUnloaded) {
+ var url, sid, vol, lps, cnum;
+ if(isNaN(id)) {
+ sid = id;
+ if(sid == "bgSound") {
+ cnum = parseInt(bgSoundItem);
+ }else {
+ cnum = getSoundID(id);
+ }
+ }else {
+ cnum = parseInt(id);
+ if(sound[cnum]) sid = sound[cnum]["id"];
+ }
+ if(sound[cnum] && sound[cnum]["url"]!='' && sid!=''){
+ url = sound[cnum]["url"];
+ vol = (sound[cnum]["volume"]!='')?getMaxVolume(sound[cnum]["volume"]):getMaxVolume(100);
+ lps = (sound[cnum]["loops"])?true:false;
+ if(lps) {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){soundManager.play(sid,{volume:getMaxVolume(sound[cnum]["volume"])});}});
+ }else {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){curSoundID=-1;}});
+ }
+ }
+ }
+}
+function getSoundID(str) {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && str == sound[i]["id"]) {
+ var id = i;
+ break;
+ }
+ }
+ return id;
+}
+function setVolume() {
+ var vol = document.getElementById('volumelist');
+ if(audioSupport && !swfUnloaded) {
+ audioVolume = parseInt(vol.value);
+ if(curSoundID >= 0) {
+ if(sound[curSoundID]) {
+ var sid = sound[curSoundID]["id"];
+ var vid = getMaxVolume(sound[curSoundID]["volume"]);
+ soundManager.setVolume(sid,vid);
+ }
+ }
+ }
+}
+function getMaxVolume(value) {
+ if(audioVolume>0) {var factor = audioVolume/100;}else {var factor = 0;}
+ return Math.max(0,Math.min(parseInt(value*factor),audioVolume));
+}
+function preloadSounds() {
+ var temp = ''; var parm = ''; var t = ''; var cl = '';
+ var objects = document.getElementsByTagName('object');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].type.toLowerCase() == 'audio/mp3' && objects[i].data != '') {
+ objects[i].width = 0; objects[i].height = 0;
+ if(objects[i].parentNode.tagName == 'DIV') {
+ cl = objects[i].parentNode.className.toLowerCase();
+ if(cl == 'presentation' || cl == 'slide') {
+ if(cl == 'presentation') {
+ t = parseInt(bgSoundItem);
+ }else {
+ t = parseInt(objects[i].parentNode.id.slice(5, objects[i].parentNode.id.length));
+ }
+ sound[t] = new Object();
+ if(t < bgSoundItem) {
+ sound[t]["id"] = objects[i].parentNode.id;
+ }else {
+ sound[t]["id"] = "bgSound";
+ }
+ sound[t]["url"] = objects[i].data;
+ sound[t]["volume"] = 100; sound[t]["loops"] = false;
+ if(objects[i].archive != '') {
+ parm = objects[i].archive.toLowerCase().split(',');
+ for (var j=0; j < parm.length; j++) {
+ if(parm[j] == 'loop') sound[t]["loops"] = true;
+ if(parm[j].search(/^volume/) != -1) {
+ var tmp = parm[j].split(':');
+ sound[t]["volume"] = parseInt(tmp[1]);
+ }
+ }
+ }
+ soundManager.createSound(sound[t]["id"],sound[t]["url"]);
+ }
+ }
+ }
+ }
+}
+// audio extension
+
+// help extension
+function createHelpReq() {
+ if(!document.getElementById("HelpReq")) {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "HelpReq";
+ if (pg.addEventListener) {
+ pg.addEventListener("onclick",dumpHelpReq,false);
+ } else if (pg.attachEvent) {
+ pg.attachEvent("onclick",dumpHelpReq);
+ }
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=90)";
+ } else {
+ pg.style.opacity = 0.9;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(64,64,64)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/help.jpg)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+ if(document.getElementById("HelpReq")) {
+ helpmode = true;
+ }
+ }
+}
+function dumpHelpReq() {
+ if(document.getElementById("HelpReq")) {
+ document.body.removeChild(document.getElementById('HelpReq'));
+ helpmode = false;
+ }
+}
+// help extension
+
+//DEBUG
+function ConsoleLog(value) {
+ if(window.console) {
+ window.console.log(value);
+ }
+}
+//DEBUG
+
+document.write('<style type="text/css" media="screen" id="blockStyle">.presentation, .layout {display: none; }</style>');
+
+if(!isIE && !isOp) {
+ document.write('<script type="text/javascript" src="'+s5Path+'ui/audio_support/soundmanager2.js"></script>');
+ if(typeof soundManager!="undefined") {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'audioDebug') {
+ var audioDebug = (allMetas[i].content == "true") ? true : false;
+ soundManager.defaultOptions.debugMode = audioDebug;
+ }
+ }
+ }
+}
+
+window.onload = createSlideShow;
+window.onresize = function(){setTimeout('windowChange()',5);} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/toggle_link.png
new file mode 100644
index 000000000..4588e2514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/toggle_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/toggle_over.png
new file mode 100644
index 000000000..400f613b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/toggle_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/volume_link.png
new file mode 100644
index 000000000..f362acd1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/volume_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/wrap.css
new file mode 100644
index 000000000..a37315552
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/wrap.css
@@ -0,0 +1,410 @@
+/********************************************************************
+Screen and Print Styles for the Wrap Plugin
+********************************************************************/
+
+/* tables in columns and boxes should span the whole width */
+.wrap_column table,
+.wrap_left table, .wrap_right table, .wrap_center table,
+.wrap_box table,
+.wrap_info table, .wrap_important table, .wrap_alert table, .wrap_tip table, .wrap_help table, .wrap_todo table, .wrap_download table {
+ width: 100%;
+}
+/* emulate a headline */
+.wrap_column em strong,
+.wrap_left em strong, .wrap_right em strong, .wrap_center em strong,
+.wrap_box em strong,
+.wrap_info em strong, .wrap_important em strong, .wrap_alert em strong, .wrap_tip em strong, .wrap_help em strong, .wrap_todo em strong, .wrap_download em strong {
+ font-size: 130%;
+ font-weight: bold;
+ font-style: normal;
+ display: block;
+}
+/* emulate a bigger headline with a bottom border */
+.wrap_column em strong em.u,
+.wrap_left em strong em.u, .wrap_right em strong em.u, .wrap_center em strong em.u,
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ font-size: 115%;
+ border-bottom: 1px solid __border__;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+}
+/* different bigger headline for safety notes */
+.wrap_danger em strong em.u, .wrap_warning em strong em.u, .wrap_caution em strong em.u, .wrap_notice em strong em.u, .wrap_safety em strong em.u {
+ font-size: 115%;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+ text-transform: uppercase;
+ border-bottom-width: 0;
+}
+/* change border colour of emulated headlines inside boxes to something more neutral
+ (to match all the different background colours) */
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ border-bottom-color: #999;
+}
+
+
+/* columns
+********************************************************************/
+
+.wrap_left,
+.wrap_column {
+ float: left;
+ margin-right: 1.5em;
+}
+.wrap_right {
+ float: right;
+ margin-left: 1.5em;
+}
+.wrap_center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+/*
+.wrap_column,
+.wrap_left,
+.wrap_right {
+ overflow: hidden;
+}
+*/
+.wrap_container {
+ margin-right: -1.5em;
+}
+
+
+/* alignments
+********************************************************************/
+
+.wrap_leftalign {
+ text-align: left;
+}
+.wrap_centeralign {
+ text-align: center;
+}
+.wrap_rightalign {
+ text-align: right;
+}
+.wrap_justify {
+ text-align: justify;
+}
+
+
+/* box
+********************************************************************/
+
+/* see styles for boxes and notes with icons in style.css */
+
+/*____________ rounded corners ____________*/
+/* (only for modern browsers) */
+
+div.wrap_round {
+ border-radius: 20px;
+ -moz-border-radius: 20px;
+ -webkit-border-radius: 20px;
+ -khtml-border-radius: 20px;
+}
+span.wrap_round {
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -khtml-border-radius: 2px;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_lo {
+ color: __text_neu__;
+ font-size: 85%;
+}
+div.wrap_em {
+ color: #c00;
+ font-weight: bold;
+}
+
+/* see styles for highlighted text in style.css */
+
+
+/* typography
+********************************************************************/
+
+/*____________ fonts ____________*/
+
+div.wrap_sansserif {
+ font-family: Verdana,Tahoma,Geneva,"DejaVu Sans","Bitstream Vera Sans","Liberation Sans", Arial,Helvetica,FreeSans,"Liberation Sans","Nimbus Sans L", sans-serif;
+}
+div.wrap_serif {
+ font-family: Georgia,Garamond,"Palatino Linotype","Book Antiqua",Palatino,Palladio,"URW Palladio L","Liberation Serif",Didot,Gentium,"Bitstream Charter","Century Schoolbook L", "Times New Roman",Times,"Nimbus Roman No9 L","FreeSerif", serif;
+}
+div.wrap_monospace {
+ font-family: Courier,"Courier New",FreeMono,"Nimbus Mono L","Liberation Mono", "Lucida Console",Monaco,"DejaVu Sans Mono","Bitstream Vera Sans Mono", monospace;
+}
+
+/*____________ font size ____________*/
+
+div.wrap_bigger {
+ font-size: 125%;
+}
+div.wrap_muchbigger {
+ font-size: 200%;
+}
+div.wrap_smaller {
+ font-size: 75%;
+}
+
+/*____________ font colours ____________*/
+
+div.wrap_fgred {
+ color: #900;
+}
+div.wrap_fggreen {
+ color: #090;
+}
+div.wrap_fgblue {
+ color: #009;
+}
+div.wrap_fgcyan {
+ color: #099;
+}
+div.wrap_fgviolet {
+ color: #909;
+}
+div.wrap_fgyellow {
+ color: #990;
+}
+div.wrap_fggrey {
+ color: #666;
+}
+div.wrap_fgblack {
+ color: #000;
+}
+
+/* see styles for background colours and white font colour in style.css */
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ indent ____________*/
+
+div.wrap_indent {
+ padding-left: 1.5em;
+}
+
+/*____________ outdent ____________*/
+
+div.wrap_outdent {
+ margin-left: -1.5em;
+}
+
+/*____________ word wrapping in pre ____________*/
+
+divdiv.wrap_prewrap pre {
+ white-space: pre-wrap;
+ word-wrap: break-word;/* for IE < 8 */
+ /* white-space: -moz-pre-wrap; for FF < 3 */
+}
+
+/*____________ spoiler ____________*/
+
+divdiv.wrap_spoiler {
+ margin-bottom: 1.5em;
+}
+/* see rest of spoiler styles in style.css */
+
+/*____________ clear float ____________*/
+
+div.wrap_clear {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ font-size: 1px;
+ visibility: hidden;
+ overflow: hidden;
+}
+
+/*____________ hide ____________*/
+
+div.wrap_hide {
+ display: none;
+}
+
+
+/* STYLE.CSS */
+
+/* box
+********************************************************************/
+
+.wrap_box {
+ background: __background_alt__;
+ color: __text__;
+/*
+ overflow: hidden;
+*/
+}
+div.wrap_box,
+div.wrap_danger, div.wrap_warning, div.wrap_caution, div.wrap_notice, div.wrap_safety {
+ padding: 1em 1em .5em;
+ margin-bottom: 1.5em;
+}
+span.wrap_box,
+span.wrap_danger, span.wrap_warning, span.wrap_caution, span.wrap_notice, span.wrap_safety {
+ padding: 0 .3em;
+}
+
+/*____________ notes with icons ____________*/
+
+/* general styles for all note divs */
+div.wrap_info, div.wrap_important, div.wrap_alert, div.wrap_tip, div.wrap_help, div.wrap_todo, div.wrap_download {
+ padding: 1em 1em .5em 70px;
+ margin-bottom: 1.5em;
+ min-height: 68px;
+ background-position: 10px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html div.wrap_info, * html div.wrap_important, * html div.wrap_alert, * html div.wrap_tip, * html div.wrap_help, * html div.wrap_todo, * html div.wrap_download {
+ height: 68px;
+}
+/* general styles for all note spans */
+span.wrap_info, span.wrap_important, span.wrap_alert, span.wrap_tip, span.wrap_help, span.wrap_todo, span.wrap_download {
+ padding: 0 2px 0 20px;
+ min-height: 20px;
+ background-position: 2px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html span.wrap_info, * html span.wrap_important, * html span.wrap_alert, * html span.wrap_tip, * html span.wrap_help, * html span.wrap_todo, * html span.wrap_download {
+ height: 20px;
+}
+
+/*____________ info ____________*/
+.wrap_info { background-color: #d1d7df; }
+div.wrap_info { background-image: url(../../../wrap/images/note/48/info.png); }
+span.wrap_info { background-image: url(../../../wrap/images/note/16/info.png); }
+
+/*____________ important ____________*/
+.wrap_important { background-color: #ffd39f; }
+div.wrap_important { background-image: url(../../../wrap/images/note/48/important.png); }
+span.wrap_important { background-image: url(../../../wrap/images/note/16/important.png); }
+
+/*____________ alert ____________*/
+.wrap_alert { background-color: #ffbcaf; }
+div.wrap_alert { background-image: url(../../../wrap/images/note/48/alert.png); }
+span.wrap_alert { background-image: url(../../../wrap/images/note/16/alert.png); }
+
+/*____________ tip ____________*/
+.wrap_tip { background-color: #fff79f; }
+div.wrap_tip { background-image: url(../../../wrap/images/note/48/tip.png); }
+span.wrap_tip { background-image: url(../../../wrap/images/note/16/tip.png); }
+
+/*____________ help ____________*/
+.wrap_help { background-color: #dcc2ef; }
+div.wrap_help { background-image: url(../../../wrap/images/note/48/help.png); }
+span.wrap_help { background-image: url(../../../wrap/images/note/16/help.png); }
+
+/*____________ todo ____________*/
+.wrap_todo { background-color: #c2efdd; }
+div.wrap_todo { background-image: url(../../../wrap/images/note/48/todo.png); }
+span.wrap_todo { background-image: url(../../../wrap/images/note/16/todo.png); }
+
+/*____________ download ____________*/
+.wrap_download { background-color: #d6efc2; }
+div.wrap_download { background-image: url(../../../wrap/images/note/48/download.png); }
+span.wrap_download { background-image: url(../../../wrap/images/note/16/download.png); }
+
+
+/*____________ safety notes ____________*/
+
+.wrap_danger {
+ background-color: #c00;
+ color: #fff;
+}
+.wrap_warning {
+ background-color: #f60;
+ color: #000;
+}
+.wrap_caution {
+ background-color: #ff0;
+ color: #000;
+}
+.wrap_notice {
+ background-color: #06f;
+ color: #fff;
+}
+.wrap_safety {
+ background-color: #090;
+ color: #fff;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_hi {
+ background-color: #ff9;
+}
+
+/* typography
+********************************************************************/
+
+/*____________ font colours ____________*/
+
+div.wrap_fgwhite {
+ color: #fff;
+}
+
+/*____________ background colours ____________*/
+
+div.wrap_bgred {
+ background-color: #fcc;
+}
+div.wrap_bggreen {
+ background-color: #cfc;
+}
+div.wrap_bgblue {
+ background-color: #ccf;
+}
+div.wrap_bgcyan {
+ background-color: #9ff;
+}
+div.wrap_bgviolet {
+ background-color: #f9f;
+}
+div.wrap_bgyellow {
+ background-color: #ff9;
+}
+div.wrap_bggrey {
+ background-color: #ccc;
+}
+div.wrap_bgwhite {
+ background-color: #fff;
+}
+div.wrap_bgblack {
+ background-color: #000;
+}
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ spoiler ____________*/
+
+div.wrap_spoiler {
+ background-color: __background__ !important;
+ color: __background__ !important;
+ border: 1px dotted red;
+}
+
+/*____________ only print ____________*/
+
+div.wrap_onlyprint {
+ display: none;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/zero_link.png
new file mode 100644
index 000000000..5610884d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/zero_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/zero_over.png
new file mode 100644
index 000000000..3a14a577e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/zero_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/MIT-LICENSE b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/MIT-LICENSE
new file mode 100644
index 000000000..6d1340dbc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/MIT-LICENSE
@@ -0,0 +1,20 @@
+Copyright (c) 2005-2009 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/builder.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/builder.js
new file mode 100644
index 000000000..53ea36f64
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/builder.js
@@ -0,0 +1,136 @@
+// script.aculo.us builder.js v1.8.3, Thu Oct 08 11:23:33 +0200 2009
+
+// Copyright (c) 2005-2009 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
+//
+// script.aculo.us is freely distributable under the terms of an MIT-style license.
+// For details, see the script.aculo.us web site: http://script.aculo.us/
+
+var Builder = {
+ NODEMAP: {
+ AREA: 'map',
+ CAPTION: 'table',
+ COL: 'table',
+ COLGROUP: 'table',
+ LEGEND: 'fieldset',
+ OPTGROUP: 'select',
+ OPTION: 'select',
+ PARAM: 'object',
+ TBODY: 'table',
+ TD: 'table',
+ TFOOT: 'table',
+ TH: 'table',
+ THEAD: 'table',
+ TR: 'table'
+ },
+ // note: For Firefox < 1.5, OPTION and OPTGROUP tags are currently broken,
+ // due to a Firefox bug
+ node: function(elementName) {
+ elementName = elementName.toUpperCase();
+
+ // try innerHTML approach
+ var parentTag = this.NODEMAP[elementName] || 'div';
+ var parentElement = document.createElement(parentTag);
+ try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707
+ parentElement.innerHTML = "<" + elementName + "></" + elementName + ">";
+ } catch(e) {}
+ var element = parentElement.firstChild || null;
+
+ // see if browser added wrapping tags
+ if(element && (element.tagName.toUpperCase() != elementName))
+ element = element.getElementsByTagName(elementName)[0];
+
+ // fallback to createElement approach
+ if(!element) element = document.createElement(elementName);
+
+ // abort if nothing could be created
+ if(!element) return;
+
+ // attributes (or text)
+ if(arguments[1])
+ if(this._isStringOrNumber(arguments[1]) ||
+ (arguments[1] instanceof Array) ||
+ arguments[1].tagName) {
+ this._children(element, arguments[1]);
+ } else {
+ var attrs = this._attributes(arguments[1]);
+ if(attrs.length) {
+ try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707
+ parentElement.innerHTML = "<" +elementName + " " +
+ attrs + "></" + elementName + ">";
+ } catch(e) {}
+ element = parentElement.firstChild || null;
+ // workaround firefox 1.0.X bug
+ if(!element) {
+ element = document.createElement(elementName);
+ for(attr in arguments[1])
+ element[attr == 'class' ? 'className' : attr] = arguments[1][attr];
+ }
+ if(element.tagName.toUpperCase() != elementName)
+ element = parentElement.getElementsByTagName(elementName)[0];
+ }
+ }
+
+ // text, or array of children
+ if(arguments[2])
+ this._children(element, arguments[2]);
+
+ return DOKUid(element);
+ },
+ _text: function(text) {
+ return document.createTextNode(text);
+ },
+
+ ATTR_MAP: {
+ 'className': 'class',
+ 'htmlFor': 'for'
+ },
+
+ _attributes: function(attributes) {
+ var attrs = [];
+ for(attribute in attributes)
+ attrs.push((attribute in this.ATTR_MAP ? this.ATTR_MAP[attribute] : attribute) +
+ '="' + attributes[attribute].toString().escapeHTML().gsub(/"/,'&quot;') + '"');
+ return attrs.join(" ");
+ },
+ _children: function(element, children) {
+ if(children.tagName) {
+ element.appendChild(children);
+ return;
+ }
+ if(typeof children=='object') { // array can hold nodes and text
+ children.flatten().each( function(e) {
+ if(typeof e=='object')
+ element.appendChild(e);
+ else
+ if(Builder._isStringOrNumber(e))
+ element.appendChild(Builder._text(e));
+ });
+ } else
+ if(Builder._isStringOrNumber(children))
+ element.appendChild(Builder._text(children));
+ },
+ _isStringOrNumber: function(param) {
+ return(typeof param=='string' || typeof param=='number');
+ },
+ build: function(html) {
+ var element = this.node('div');
+ DOKUid(element).update(html.strip());
+ return element.down();
+ },
+ dump: function(scope) {
+ if(typeof scope != 'object' && typeof scope != 'function') scope = window; //global scope
+
+ var tags = ("A ABBR ACRONYM ADDRESS APPLET AREA B BASE BASEFONT BDO BIG BLOCKQUOTE BODY " +
+ "BR BUTTON CAPTION CENTER CITE CODE COL COLGROUP DD DEL DFN DIR DIV DL DT EM FIELDSET " +
+ "FONT FORM FRAME FRAMESET H1 H2 H3 H4 H5 H6 HEAD HR HTML I IFRAME IMG INPUT INS ISINDEX "+
+ "KBD LABEL LEGEND LI LINK MAP MENU META NOFRAMES NOSCRIPT OBJECT OL OPTGROUP OPTION P "+
+ "PARAM PRE Q S SAMP SCRIPT SELECT SMALL SPAN STRIKE STRONG STYLE SUB SUP TABLE TBODY TD "+
+ "TEXTAREA TFOOT TH THEAD TITLE TR TT U UL VAR").split(/\s+/);
+
+ tags.each( function(tag){
+ scope[tag] = function() {
+ return Builder.node.apply(Builder, [tag].concat($A(arguments)));
+ };
+ });
+ }
+}; \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/controls.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/controls.js
new file mode 100644
index 000000000..eb9c4c08a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/controls.js
@@ -0,0 +1,965 @@
+// script.aculo.us controls.js v1.8.3, Thu Oct 08 11:23:33 +0200 2009
+
+// Copyright (c) 2005-2009 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
+// (c) 2005-2009 Ivan Krstic (http://blogs.law.harvard.edu/ivan)
+// (c) 2005-2009 Jon Tirsen (http://www.tirsen.com)
+// Contributors:
+// Richard Livsey
+// Rahul Bhargava
+// Rob Wills
+//
+// script.aculo.us is freely distributable under the terms of an MIT-style license.
+// For details, see the script.aculo.us web site: http://script.aculo.us/
+
+// Autocompleter.Base handles all the autocompletion functionality
+// that's independent of the data source for autocompletion. This
+// includes drawing the autocompletion menu, observing keyboard
+// and mouse events, and similar.
+//
+// Specific autocompleters need to provide, at the very least,
+// a getUpdatedChoices function that will be invoked every time
+// the text inside the monitored textbox changes. This method
+// should get the text for which to provide autocompletion by
+// invoking this.getToken(), NOT by directly accessing
+// this.element.value. This is to allow incremental tokenized
+// autocompletion. Specific auto-completion logic (AJAX, etc)
+// belongs in getUpdatedChoices.
+//
+// Tokenized incremental autocompletion is enabled automatically
+// when an autocompleter is instantiated with the 'tokens' option
+// in the options parameter, e.g.:
+// new Ajax.Autocompleter('id','upd', '/url/', { tokens: ',' });
+// will incrementally autocomplete with a comma as the token.
+// Additionally, ',' in the above example can be replaced with
+// a token array, e.g. { tokens: [',', '\n'] } which
+// enables autocompletion on multiple tokens. This is most
+// useful when one of the tokens is \n (a newline), as it
+// allows smart autocompletion after linebreaks.
+
+if(typeof Effect == 'undefined')
+ throw("controls.js requires including script.aculo.us' effects.js library");
+
+var Autocompleter = { };
+Autocompleter.Base = Class.create({
+ baseInitialize: function(element, update, options) {
+ element = DOKUid(element);
+ this.element = element;
+ this.update = DOKUid(update);
+ this.hasFocus = false;
+ this.changed = false;
+ this.active = false;
+ this.index = 0;
+ this.entryCount = 0;
+ this.oldElementValue = this.element.value;
+
+ if(this.setOptions)
+ this.setOptions(options);
+ else
+ this.options = options || { };
+
+ this.options.paramName = this.options.paramName || this.element.name;
+ this.options.tokens = this.options.tokens || [];
+ this.options.frequency = this.options.frequency || 0.4;
+ this.options.minChars = this.options.minChars || 1;
+ this.options.onShow = this.options.onShow ||
+ function(element, update){
+ if(!update.style.position || update.style.position=='absolute') {
+ update.style.position = 'absolute';
+ Position.clone(element, update, {
+ setHeight: false,
+ offsetTop: element.offsetHeight
+ });
+ }
+ Effect.Appear(update,{duration:0.15});
+ };
+ this.options.onHide = this.options.onHide ||
+ function(element, update){ new Effect.Fade(update,{duration:0.15}) };
+
+ if(typeof(this.options.tokens) == 'string')
+ this.options.tokens = new Array(this.options.tokens);
+ // Force carriage returns as token delimiters anyway
+ if (!this.options.tokens.include('\n'))
+ this.options.tokens.push('\n');
+
+ this.observer = null;
+
+ this.element.setAttribute('autocomplete','off');
+
+ Element.hide(this.update);
+
+ Event.observe(this.element, 'blur', this.onBlur.bindAsEventListener(this));
+ Event.observe(this.element, 'keydown', this.onKeyPress.bindAsEventListener(this));
+ },
+
+ show: function() {
+ if(Element.getStyle(this.update, 'display')=='none') this.options.onShow(this.element, this.update);
+ if(!this.iefix &&
+ (Prototype.Browser.IE) &&
+ (Element.getStyle(this.update, 'position')=='absolute')) {
+ new Insertion.After(this.update,
+ '<iframe id="' + this.update.id + '_iefix" '+
+ 'style="display:none;position:absolute;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);" ' +
+ 'src="javascript:false;" frameborder="0" scrolling="no"></iframe>');
+ this.iefix = DOKUid(this.update.id+'_iefix');
+ }
+ if(this.iefix) setTimeout(this.fixIEOverlapping.bind(this), 50);
+ },
+
+ fixIEOverlapping: function() {
+ Position.clone(this.update, this.iefix, {setTop:(!this.update.style.height)});
+ this.iefix.style.zIndex = 1;
+ this.update.style.zIndex = 2;
+ Element.show(this.iefix);
+ },
+
+ hide: function() {
+ this.stopIndicator();
+ if(Element.getStyle(this.update, 'display')!='none') this.options.onHide(this.element, this.update);
+ if(this.iefix) Element.hide(this.iefix);
+ },
+
+ startIndicator: function() {
+ if(this.options.indicator) Element.show(this.options.indicator);
+ },
+
+ stopIndicator: function() {
+ if(this.options.indicator) Element.hide(this.options.indicator);
+ },
+
+ onKeyPress: function(event) {
+ if(this.active)
+ switch(event.keyCode) {
+ case Event.KEY_TAB:
+ case Event.KEY_RETURN:
+ this.selectEntry();
+ Event.stop(event);
+ case Event.KEY_ESC:
+ this.hide();
+ this.active = false;
+ Event.stop(event);
+ return;
+ case Event.KEY_LEFT:
+ case Event.KEY_RIGHT:
+ return;
+ case Event.KEY_UP:
+ this.markPrevious();
+ this.render();
+ Event.stop(event);
+ return;
+ case Event.KEY_DOWN:
+ this.markNext();
+ this.render();
+ Event.stop(event);
+ return;
+ }
+ else
+ if(event.keyCode==Event.KEY_TAB || event.keyCode==Event.KEY_RETURN ||
+ (Prototype.Browser.WebKit > 0 && event.keyCode == 0)) return;
+
+ this.changed = true;
+ this.hasFocus = true;
+
+ if(this.observer) clearTimeout(this.observer);
+ this.observer =
+ setTimeout(this.onObserverEvent.bind(this), this.options.frequency*1000);
+ },
+
+ activate: function() {
+ this.changed = false;
+ this.hasFocus = true;
+ this.getUpdatedChoices();
+ },
+
+ onHover: function(event) {
+ var element = Event.findElement(event, 'LI');
+ if(this.index != element.autocompleteIndex)
+ {
+ this.index = element.autocompleteIndex;
+ this.render();
+ }
+ Event.stop(event);
+ },
+
+ onClick: function(event) {
+ var element = Event.findElement(event, 'LI');
+ this.index = element.autocompleteIndex;
+ this.selectEntry();
+ this.hide();
+ },
+
+ onBlur: function(event) {
+ // needed to make click events working
+ setTimeout(this.hide.bind(this), 250);
+ this.hasFocus = false;
+ this.active = false;
+ },
+
+ render: function() {
+ if(this.entryCount > 0) {
+ for (var i = 0; i < this.entryCount; i++)
+ this.index==i ?
+ Element.addClassName(this.getEntry(i),"selected") :
+ Element.removeClassName(this.getEntry(i),"selected");
+ if(this.hasFocus) {
+ this.show();
+ this.active = true;
+ }
+ } else {
+ this.active = false;
+ this.hide();
+ }
+ },
+
+ markPrevious: function() {
+ if(this.index > 0) this.index--;
+ else this.index = this.entryCount-1;
+ this.getEntry(this.index).scrollIntoView(true);
+ },
+
+ markNext: function() {
+ if(this.index < this.entryCount-1) this.index++;
+ else this.index = 0;
+ this.getEntry(this.index).scrollIntoView(false);
+ },
+
+ getEntry: function(index) {
+ return this.update.firstChild.childNodes[index];
+ },
+
+ getCurrentEntry: function() {
+ return this.getEntry(this.index);
+ },
+
+ selectEntry: function() {
+ this.active = false;
+ this.updateElement(this.getCurrentEntry());
+ },
+
+ updateElement: function(selectedElement) {
+ if (this.options.updateElement) {
+ this.options.updateElement(selectedElement);
+ return;
+ }
+ var value = '';
+ if (this.options.select) {
+ var nodes = DOKUid(selectedElement).select('.' + this.options.select) || [];
+ if(nodes.length>0) value = Element.collectTextNodes(nodes[0], this.options.select);
+ } else
+ value = Element.collectTextNodesIgnoreClass(selectedElement, 'informal');
+
+ var bounds = this.getTokenBounds();
+ if (bounds[0] != -1) {
+ var newValue = this.element.value.substr(0, bounds[0]);
+ var whitespace = this.element.value.substr(bounds[0]).match(/^\s+/);
+ if (whitespace)
+ newValue += whitespace[0];
+ this.element.value = newValue + value + this.element.value.substr(bounds[1]);
+ } else {
+ this.element.value = value;
+ }
+ this.oldElementValue = this.element.value;
+ this.element.focus();
+
+ if (this.options.afterUpdateElement)
+ this.options.afterUpdateElement(this.element, selectedElement);
+ },
+
+ updateChoices: function(choices) {
+ if(!this.changed && this.hasFocus) {
+ this.update.innerHTML = choices;
+ Element.cleanWhitespace(this.update);
+ Element.cleanWhitespace(this.update.down());
+
+ if(this.update.firstChild && this.update.down().childNodes) {
+ this.entryCount =
+ this.update.down().childNodes.length;
+ for (var i = 0; i < this.entryCount; i++) {
+ var entry = this.getEntry(i);
+ entry.autocompleteIndex = i;
+ this.addObservers(entry);
+ }
+ } else {
+ this.entryCount = 0;
+ }
+
+ this.stopIndicator();
+ this.index = 0;
+
+ if(this.entryCount==1 && this.options.autoSelect) {
+ this.selectEntry();
+ this.hide();
+ } else {
+ this.render();
+ }
+ }
+ },
+
+ addObservers: function(element) {
+ Event.observe(element, "mouseover", this.onHover.bindAsEventListener(this));
+ Event.observe(element, "click", this.onClick.bindAsEventListener(this));
+ },
+
+ onObserverEvent: function() {
+ this.changed = false;
+ this.tokenBounds = null;
+ if(this.getToken().length>=this.options.minChars) {
+ this.getUpdatedChoices();
+ } else {
+ this.active = false;
+ this.hide();
+ }
+ this.oldElementValue = this.element.value;
+ },
+
+ getToken: function() {
+ var bounds = this.getTokenBounds();
+ return this.element.value.substring(bounds[0], bounds[1]).strip();
+ },
+
+ getTokenBounds: function() {
+ if (null != this.tokenBounds) return this.tokenBounds;
+ var value = this.element.value;
+ if (value.strip().empty()) return [-1, 0];
+ var diff = arguments.callee.getFirstDifferencePos(value, this.oldElementValue);
+ var offset = (diff == this.oldElementValue.length ? 1 : 0);
+ var prevTokenPos = -1, nextTokenPos = value.length;
+ var tp;
+ for (var index = 0, l = this.options.tokens.length; index < l; ++index) {
+ tp = value.lastIndexOf(this.options.tokens[index], diff + offset - 1);
+ if (tp > prevTokenPos) prevTokenPos = tp;
+ tp = value.indexOf(this.options.tokens[index], diff + offset);
+ if (-1 != tp && tp < nextTokenPos) nextTokenPos = tp;
+ }
+ return (this.tokenBounds = [prevTokenPos + 1, nextTokenPos]);
+ }
+});
+
+Autocompleter.Base.prototype.getTokenBounds.getFirstDifferencePos = function(newS, oldS) {
+ var boundary = Math.min(newS.length, oldS.length);
+ for (var index = 0; index < boundary; ++index)
+ if (newS[index] != oldS[index])
+ return index;
+ return boundary;
+};
+
+Ajax.Autocompleter = Class.create(Autocompleter.Base, {
+ initialize: function(element, update, url, options) {
+ this.baseInitialize(element, update, options);
+ this.options.asynchronous = true;
+ this.options.onComplete = this.onComplete.bind(this);
+ this.options.defaultParams = this.options.parameters || null;
+ this.url = url;
+ },
+
+ getUpdatedChoices: function() {
+ this.startIndicator();
+
+ var entry = encodeURIComponent(this.options.paramName) + '=' +
+ encodeURIComponent(this.getToken());
+
+ this.options.parameters = this.options.callback ?
+ this.options.callback(this.element, entry) : entry;
+
+ if(this.options.defaultParams)
+ this.options.parameters += '&' + this.options.defaultParams;
+
+ new Ajax.Request(this.url, this.options);
+ },
+
+ onComplete: function(request) {
+ this.updateChoices(request.responseText);
+ }
+});
+
+// The local array autocompleter. Used when you'd prefer to
+// inject an array of autocompletion options into the page, rather
+// than sending out Ajax queries, which can be quite slow sometimes.
+//
+// The constructor takes four parameters. The first two are, as usual,
+// the id of the monitored textbox, and id of the autocompletion menu.
+// The third is the array you want to autocomplete from, and the fourth
+// is the options block.
+//
+// Extra local autocompletion options:
+// - choices - How many autocompletion choices to offer
+//
+// - partialSearch - If false, the autocompleter will match entered
+// text only at the beginning of strings in the
+// autocomplete array. Defaults to true, which will
+// match text at the beginning of any *word* in the
+// strings in the autocomplete array. If you want to
+// search anywhere in the string, additionally set
+// the option fullSearch to true (default: off).
+//
+// - fullSsearch - Search anywhere in autocomplete array strings.
+//
+// - partialChars - How many characters to enter before triggering
+// a partial match (unlike minChars, which defines
+// how many characters are required to do any match
+// at all). Defaults to 2.
+//
+// - ignoreCase - Whether to ignore case when autocompleting.
+// Defaults to true.
+//
+// It's possible to pass in a custom function as the 'selector'
+// option, if you prefer to write your own autocompletion logic.
+// In that case, the other options above will not apply unless
+// you support them.
+
+Autocompleter.Local = Class.create(Autocompleter.Base, {
+ initialize: function(element, update, array, options) {
+ this.baseInitialize(element, update, options);
+ this.options.array = array;
+ },
+
+ getUpdatedChoices: function() {
+ this.updateChoices(this.options.selector(this));
+ },
+
+ setOptions: function(options) {
+ this.options = Object.extend({
+ choices: 10,
+ partialSearch: true,
+ partialChars: 2,
+ ignoreCase: true,
+ fullSearch: false,
+ selector: function(instance) {
+ var ret = []; // Beginning matches
+ var partial = []; // Inside matches
+ var entry = instance.getToken();
+ var count = 0;
+
+ for (var i = 0; i < instance.options.array.length &&
+ ret.length < instance.options.choices ; i++) {
+
+ var elem = instance.options.array[i];
+ var foundPos = instance.options.ignoreCase ?
+ elem.toLowerCase().indexOf(entry.toLowerCase()) :
+ elem.indexOf(entry);
+
+ while (foundPos != -1) {
+ if (foundPos == 0 && elem.length != entry.length) {
+ ret.push("<li><strong>" + elem.substr(0, entry.length) + "</strong>" +
+ elem.substr(entry.length) + "</li>");
+ break;
+ } else if (entry.length >= instance.options.partialChars &&
+ instance.options.partialSearch && foundPos != -1) {
+ if (instance.options.fullSearch || /\s/.test(elem.substr(foundPos-1,1))) {
+ partial.push("<li>" + elem.substr(0, foundPos) + "<strong>" +
+ elem.substr(foundPos, entry.length) + "</strong>" + elem.substr(
+ foundPos + entry.length) + "</li>");
+ break;
+ }
+ }
+
+ foundPos = instance.options.ignoreCase ?
+ elem.toLowerCase().indexOf(entry.toLowerCase(), foundPos + 1) :
+ elem.indexOf(entry, foundPos + 1);
+
+ }
+ }
+ if (partial.length)
+ ret = ret.concat(partial.slice(0, instance.options.choices - ret.length));
+ return "<ul>" + ret.join('') + "</ul>";
+ }
+ }, options || { });
+ }
+});
+
+// AJAX in-place editor and collection editor
+// Full rewrite by Christophe Porteneuve <tdd@tddsworld.com> (April 2007).
+
+// Use this if you notice weird scrolling problems on some browsers,
+// the DOM might be a bit confused when this gets called so do this
+// waits 1 ms (with setTimeout) until it does the activation
+Field.scrollFreeActivate = function(field) {
+ setTimeout(function() {
+ Field.activate(field);
+ }, 1);
+};
+
+Ajax.InPlaceEditor = Class.create({
+ initialize: function(element, url, options) {
+ this.url = url;
+ this.element = element = DOKUid(element);
+ this.prepareOptions();
+ this._controls = { };
+ arguments.callee.dealWithDeprecatedOptions(options); // DEPRECATION LAYER!!!
+ Object.extend(this.options, options || { });
+ if (!this.options.formId && this.element.id) {
+ this.options.formId = this.element.id + '-inplaceeditor';
+ if (DOKUid(this.options.formId))
+ this.options.formId = '';
+ }
+ if (this.options.externalControl)
+ this.options.externalControl = DOKUid(this.options.externalControl);
+ if (!this.options.externalControl)
+ this.options.externalControlOnly = false;
+ this._originalBackground = this.element.getStyle('background-color') || 'transparent';
+ this.element.title = this.options.clickToEditText;
+ this._boundCancelHandler = this.handleFormCancellation.bind(this);
+ this._boundComplete = (this.options.onComplete || Prototype.emptyFunction).bind(this);
+ this._boundFailureHandler = this.handleAJAXFailure.bind(this);
+ this._boundSubmitHandler = this.handleFormSubmission.bind(this);
+ this._boundWrapperHandler = this.wrapUp.bind(this);
+ this.registerListeners();
+ },
+ checkForEscapeOrReturn: function(e) {
+ if (!this._editing || e.ctrlKey || e.altKey || e.shiftKey) return;
+ if (Event.KEY_ESC == e.keyCode)
+ this.handleFormCancellation(e);
+ else if (Event.KEY_RETURN == e.keyCode)
+ this.handleFormSubmission(e);
+ },
+ createControl: function(mode, handler, extraClasses) {
+ var control = this.options[mode + 'Control'];
+ var text = this.options[mode + 'Text'];
+ if ('button' == control) {
+ var btn = document.createElement('input');
+ btn.type = 'submit';
+ btn.value = text;
+ btn.className = 'editor_' + mode + '_button';
+ if ('cancel' == mode)
+ btn.onclick = this._boundCancelHandler;
+ this._form.appendChild(btn);
+ this._controls[mode] = btn;
+ } else if ('link' == control) {
+ var link = document.createElement('a');
+ link.href = '#';
+ link.appendChild(document.createTextNode(text));
+ link.onclick = 'cancel' == mode ? this._boundCancelHandler : this._boundSubmitHandler;
+ link.className = 'editor_' + mode + '_link';
+ if (extraClasses)
+ link.className += ' ' + extraClasses;
+ this._form.appendChild(link);
+ this._controls[mode] = link;
+ }
+ },
+ createEditField: function() {
+ var text = (this.options.loadTextURL ? this.options.loadingText : this.getText());
+ var fld;
+ if (1 >= this.options.rows && !/\r|\n/.test(this.getText())) {
+ fld = document.createElement('input');
+ fld.type = 'text';
+ var size = this.options.size || this.options.cols || 0;
+ if (0 < size) fld.size = size;
+ } else {
+ fld = document.createElement('textarea');
+ fld.rows = (1 >= this.options.rows ? this.options.autoRows : this.options.rows);
+ fld.cols = this.options.cols || 40;
+ }
+ fld.name = this.options.paramName;
+ fld.value = text; // No HTML breaks conversion anymore
+ fld.className = 'editor_field';
+ if (this.options.submitOnBlur)
+ fld.onblur = this._boundSubmitHandler;
+ this._controls.editor = fld;
+ if (this.options.loadTextURL)
+ this.loadExternalText();
+ this._form.appendChild(this._controls.editor);
+ },
+ createForm: function() {
+ var ipe = this;
+ function addText(mode, condition) {
+ var text = ipe.options['text' + mode + 'Controls'];
+ if (!text || condition === false) return;
+ ipe._form.appendChild(document.createTextNode(text));
+ };
+ this._form = DOKUid(document.createElement('form'));
+ this._form.id = this.options.formId;
+ this._form.addClassName(this.options.formClassName);
+ this._form.onsubmit = this._boundSubmitHandler;
+ this.createEditField();
+ if ('textarea' == this._controls.editor.tagName.toLowerCase())
+ this._form.appendChild(document.createElement('br'));
+ if (this.options.onFormCustomization)
+ this.options.onFormCustomization(this, this._form);
+ addText('Before', this.options.okControl || this.options.cancelControl);
+ this.createControl('ok', this._boundSubmitHandler);
+ addText('Between', this.options.okControl && this.options.cancelControl);
+ this.createControl('cancel', this._boundCancelHandler, 'editor_cancel');
+ addText('After', this.options.okControl || this.options.cancelControl);
+ },
+ destroy: function() {
+ if (this._oldInnerHTML)
+ this.element.innerHTML = this._oldInnerHTML;
+ this.leaveEditMode();
+ this.unregisterListeners();
+ },
+ enterEditMode: function(e) {
+ if (this._saving || this._editing) return;
+ this._editing = true;
+ this.triggerCallback('onEnterEditMode');
+ if (this.options.externalControl)
+ this.options.externalControl.hide();
+ this.element.hide();
+ this.createForm();
+ this.element.parentNode.insertBefore(this._form, this.element);
+ if (!this.options.loadTextURL)
+ this.postProcessEditField();
+ if (e) Event.stop(e);
+ },
+ enterHover: function(e) {
+ if (this.options.hoverClassName)
+ this.element.addClassName(this.options.hoverClassName);
+ if (this._saving) return;
+ this.triggerCallback('onEnterHover');
+ },
+ getText: function() {
+ return this.element.innerHTML.unescapeHTML();
+ },
+ handleAJAXFailure: function(transport) {
+ this.triggerCallback('onFailure', transport);
+ if (this._oldInnerHTML) {
+ this.element.innerHTML = this._oldInnerHTML;
+ this._oldInnerHTML = null;
+ }
+ },
+ handleFormCancellation: function(e) {
+ this.wrapUp();
+ if (e) Event.stop(e);
+ },
+ handleFormSubmission: function(e) {
+ var form = this._form;
+ var value = $F(this._controls.editor);
+ this.prepareSubmission();
+ var params = this.options.callback(form, value) || '';
+ if (Object.isString(params))
+ params = params.toQueryParams();
+ params.editorId = this.element.id;
+ if (this.options.htmlResponse) {
+ var options = Object.extend({ evalScripts: true }, this.options.ajaxOptions);
+ Object.extend(options, {
+ parameters: params,
+ onComplete: this._boundWrapperHandler,
+ onFailure: this._boundFailureHandler
+ });
+ new Ajax.Updater({ success: this.element }, this.url, options);
+ } else {
+ var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
+ Object.extend(options, {
+ parameters: params,
+ onComplete: this._boundWrapperHandler,
+ onFailure: this._boundFailureHandler
+ });
+ new Ajax.Request(this.url, options);
+ }
+ if (e) Event.stop(e);
+ },
+ leaveEditMode: function() {
+ this.element.removeClassName(this.options.savingClassName);
+ this.removeForm();
+ this.leaveHover();
+ this.element.style.backgroundColor = this._originalBackground;
+ this.element.show();
+ if (this.options.externalControl)
+ this.options.externalControl.show();
+ this._saving = false;
+ this._editing = false;
+ this._oldInnerHTML = null;
+ this.triggerCallback('onLeaveEditMode');
+ },
+ leaveHover: function(e) {
+ if (this.options.hoverClassName)
+ this.element.removeClassName(this.options.hoverClassName);
+ if (this._saving) return;
+ this.triggerCallback('onLeaveHover');
+ },
+ loadExternalText: function() {
+ this._form.addClassName(this.options.loadingClassName);
+ this._controls.editor.disabled = true;
+ var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
+ Object.extend(options, {
+ parameters: 'editorId=' + encodeURIComponent(this.element.id),
+ onComplete: Prototype.emptyFunction,
+ onSuccess: function(transport) {
+ this._form.removeClassName(this.options.loadingClassName);
+ var text = transport.responseText;
+ if (this.options.stripLoadedTextTags)
+ text = text.stripTags();
+ this._controls.editor.value = text;
+ this._controls.editor.disabled = false;
+ this.postProcessEditField();
+ }.bind(this),
+ onFailure: this._boundFailureHandler
+ });
+ new Ajax.Request(this.options.loadTextURL, options);
+ },
+ postProcessEditField: function() {
+ var fpc = this.options.fieldPostCreation;
+ if (fpc)
+ DOKUid(this._controls.editor)['focus' == fpc ? 'focus' : 'activate']();
+ },
+ prepareOptions: function() {
+ this.options = Object.clone(Ajax.InPlaceEditor.DefaultOptions);
+ Object.extend(this.options, Ajax.InPlaceEditor.DefaultCallbacks);
+ [this._extraDefaultOptions].flatten().compact().each(function(defs) {
+ Object.extend(this.options, defs);
+ }.bind(this));
+ },
+ prepareSubmission: function() {
+ this._saving = true;
+ this.removeForm();
+ this.leaveHover();
+ this.showSaving();
+ },
+ registerListeners: function() {
+ this._listeners = { };
+ var listener;
+ $H(Ajax.InPlaceEditor.Listeners).each(function(pair) {
+ listener = this[pair.value].bind(this);
+ this._listeners[pair.key] = listener;
+ if (!this.options.externalControlOnly)
+ this.element.observe(pair.key, listener);
+ if (this.options.externalControl)
+ this.options.externalControl.observe(pair.key, listener);
+ }.bind(this));
+ },
+ removeForm: function() {
+ if (!this._form) return;
+ this._form.remove();
+ this._form = null;
+ this._controls = { };
+ },
+ showSaving: function() {
+ this._oldInnerHTML = this.element.innerHTML;
+ this.element.innerHTML = this.options.savingText;
+ this.element.addClassName(this.options.savingClassName);
+ this.element.style.backgroundColor = this._originalBackground;
+ this.element.show();
+ },
+ triggerCallback: function(cbName, arg) {
+ if ('function' == typeof this.options[cbName]) {
+ this.options[cbName](this, arg);
+ }
+ },
+ unregisterListeners: function() {
+ $H(this._listeners).each(function(pair) {
+ if (!this.options.externalControlOnly)
+ this.element.stopObserving(pair.key, pair.value);
+ if (this.options.externalControl)
+ this.options.externalControl.stopObserving(pair.key, pair.value);
+ }.bind(this));
+ },
+ wrapUp: function(transport) {
+ this.leaveEditMode();
+ // Can't use triggerCallback due to backward compatibility: requires
+ // binding + direct element
+ this._boundComplete(transport, this.element);
+ }
+});
+
+Object.extend(Ajax.InPlaceEditor.prototype, {
+ dispose: Ajax.InPlaceEditor.prototype.destroy
+});
+
+Ajax.InPlaceCollectionEditor = Class.create(Ajax.InPlaceEditor, {
+ initialize: function($super, element, url, options) {
+ this._extraDefaultOptions = Ajax.InPlaceCollectionEditor.DefaultOptions;
+ $super(element, url, options);
+ },
+
+ createEditField: function() {
+ var list = document.createElement('select');
+ list.name = this.options.paramName;
+ list.size = 1;
+ this._controls.editor = list;
+ this._collection = this.options.collection || [];
+ if (this.options.loadCollectionURL)
+ this.loadCollection();
+ else
+ this.checkForExternalText();
+ this._form.appendChild(this._controls.editor);
+ },
+
+ loadCollection: function() {
+ this._form.addClassName(this.options.loadingClassName);
+ this.showLoadingText(this.options.loadingCollectionText);
+ var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
+ Object.extend(options, {
+ parameters: 'editorId=' + encodeURIComponent(this.element.id),
+ onComplete: Prototype.emptyFunction,
+ onSuccess: function(transport) {
+ var js = transport.responseText.strip();
+ if (!/^\[.*\]$/.test(js)) // TODO: improve sanity check
+ throw('Server returned an invalid collection representation.');
+ this._collection = eval(js);
+ this.checkForExternalText();
+ }.bind(this),
+ onFailure: this.onFailure
+ });
+ new Ajax.Request(this.options.loadCollectionURL, options);
+ },
+
+ showLoadingText: function(text) {
+ this._controls.editor.disabled = true;
+ var tempOption = this._controls.editor.firstChild;
+ if (!tempOption) {
+ tempOption = document.createElement('option');
+ tempOption.value = '';
+ this._controls.editor.appendChild(tempOption);
+ tempOption.selected = true;
+ }
+ tempOption.update((text || '').stripScripts().stripTags());
+ },
+
+ checkForExternalText: function() {
+ this._text = this.getText();
+ if (this.options.loadTextURL)
+ this.loadExternalText();
+ else
+ this.buildOptionList();
+ },
+
+ loadExternalText: function() {
+ this.showLoadingText(this.options.loadingText);
+ var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
+ Object.extend(options, {
+ parameters: 'editorId=' + encodeURIComponent(this.element.id),
+ onComplete: Prototype.emptyFunction,
+ onSuccess: function(transport) {
+ this._text = transport.responseText.strip();
+ this.buildOptionList();
+ }.bind(this),
+ onFailure: this.onFailure
+ });
+ new Ajax.Request(this.options.loadTextURL, options);
+ },
+
+ buildOptionList: function() {
+ this._form.removeClassName(this.options.loadingClassName);
+ this._collection = this._collection.map(function(entry) {
+ return 2 === entry.length ? entry : [entry, entry].flatten();
+ });
+ var marker = ('value' in this.options) ? this.options.value : this._text;
+ var textFound = this._collection.any(function(entry) {
+ return entry[0] == marker;
+ }.bind(this));
+ this._controls.editor.update('');
+ var option;
+ this._collection.each(function(entry, index) {
+ option = document.createElement('option');
+ option.value = entry[0];
+ option.selected = textFound ? entry[0] == marker : 0 == index;
+ option.appendChild(document.createTextNode(entry[1]));
+ this._controls.editor.appendChild(option);
+ }.bind(this));
+ this._controls.editor.disabled = false;
+ Field.scrollFreeActivate(this._controls.editor);
+ }
+});
+
+//**** DEPRECATION LAYER FOR InPlace[Collection]Editor! ****
+//**** This only exists for a while, in order to let ****
+//**** users adapt to the new API. Read up on the new ****
+//**** API and convert your code to it ASAP! ****
+
+Ajax.InPlaceEditor.prototype.initialize.dealWithDeprecatedOptions = function(options) {
+ if (!options) return;
+ function fallback(name, expr) {
+ if (name in options || expr === undefined) return;
+ options[name] = expr;
+ };
+ fallback('cancelControl', (options.cancelLink ? 'link' : (options.cancelButton ? 'button' :
+ options.cancelLink == options.cancelButton == false ? false : undefined)));
+ fallback('okControl', (options.okLink ? 'link' : (options.okButton ? 'button' :
+ options.okLink == options.okButton == false ? false : undefined)));
+ fallback('highlightColor', options.highlightcolor);
+ fallback('highlightEndColor', options.highlightendcolor);
+};
+
+Object.extend(Ajax.InPlaceEditor, {
+ DefaultOptions: {
+ ajaxOptions: { },
+ autoRows: 3, // Use when multi-line w/ rows == 1
+ cancelControl: 'link', // 'link'|'button'|false
+ cancelText: 'cancel',
+ clickToEditText: 'Click to edit',
+ externalControl: null, // id|elt
+ externalControlOnly: false,
+ fieldPostCreation: 'activate', // 'activate'|'focus'|false
+ formClassName: 'inplaceeditor-form',
+ formId: null, // id|elt
+ highlightColor: '#ffff99',
+ highlightEndColor: '#ffffff',
+ hoverClassName: '',
+ htmlResponse: true,
+ loadingClassName: 'inplaceeditor-loading',
+ loadingText: 'Loading...',
+ okControl: 'button', // 'link'|'button'|false
+ okText: 'ok',
+ paramName: 'value',
+ rows: 1, // If 1 and multi-line, uses autoRows
+ savingClassName: 'inplaceeditor-saving',
+ savingText: 'Saving...',
+ size: 0,
+ stripLoadedTextTags: false,
+ submitOnBlur: false,
+ textAfterControls: '',
+ textBeforeControls: '',
+ textBetweenControls: ''
+ },
+ DefaultCallbacks: {
+ callback: function(form) {
+ return Form.serialize(form);
+ },
+ onComplete: function(transport, element) {
+ // For backward compatibility, this one is bound to the IPE, and passes
+ // the element directly. It was too often customized, so we don't break it.
+ new Effect.Highlight(element, {
+ startcolor: this.options.highlightColor, keepBackgroundImage: true });
+ },
+ onEnterEditMode: null,
+ onEnterHover: function(ipe) {
+ ipe.element.style.backgroundColor = ipe.options.highlightColor;
+ if (ipe._effect)
+ ipe._effect.cancel();
+ },
+ onFailure: function(transport, ipe) {
+ alert('Error communication with the server: ' + transport.responseText.stripTags());
+ },
+ onFormCustomization: null, // Takes the IPE and its generated form, after editor, before controls.
+ onLeaveEditMode: null,
+ onLeaveHover: function(ipe) {
+ ipe._effect = new Effect.Highlight(ipe.element, {
+ startcolor: ipe.options.highlightColor, endcolor: ipe.options.highlightEndColor,
+ restorecolor: ipe._originalBackground, keepBackgroundImage: true
+ });
+ }
+ },
+ Listeners: {
+ click: 'enterEditMode',
+ keydown: 'checkForEscapeOrReturn',
+ mouseover: 'enterHover',
+ mouseout: 'leaveHover'
+ }
+});
+
+Ajax.InPlaceCollectionEditor.DefaultOptions = {
+ loadingCollectionText: 'Loading options...'
+};
+
+// Delayed observer, like Form.Element.Observer,
+// but waits for delay after last key input
+// Ideal for live-search fields
+
+Form.Element.DelayedObserver = Class.create({
+ initialize: function(element, delay, callback) {
+ this.delay = delay || 0.5;
+ this.element = DOKUid(element);
+ this.callback = callback;
+ this.timer = null;
+ this.lastValue = $F(this.element);
+ Event.observe(this.element,'keyup',this.delayedListener.bindAsEventListener(this));
+ },
+ delayedListener: function(event) {
+ if(this.lastValue == $F(this.element)) return;
+ if(this.timer) clearTimeout(this.timer);
+ this.timer = setTimeout(this.onTimerEvent.bind(this), this.delay * 1000);
+ this.lastValue = $F(this.element);
+ },
+ onTimerEvent: function() {
+ this.timer = null;
+ this.callback(this.element, $F(this.element));
+ }
+}); \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/dragdrop.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/dragdrop.js
new file mode 100644
index 000000000..6e3a1f872
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/dragdrop.js
@@ -0,0 +1,974 @@
+// script.aculo.us dragdrop.js v1.8.3, Thu Oct 08 11:23:33 +0200 2009
+
+// Copyright (c) 2005-2009 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
+//
+// script.aculo.us is freely distributable under the terms of an MIT-style license.
+// For details, see the script.aculo.us web site: http://script.aculo.us/
+
+if(Object.isUndefined(Effect))
+ throw("dragdrop.js requires including script.aculo.us' effects.js library");
+
+var Droppables = {
+ drops: [],
+
+ remove: function(element) {
+ this.drops = this.drops.reject(function(d) { return d.element==DOKUid(element) });
+ },
+
+ add: function(element) {
+ element = DOKUid(element);
+ var options = Object.extend({
+ greedy: true,
+ hoverclass: null,
+ tree: false
+ }, arguments[1] || { });
+
+ // cache containers
+ if(options.containment) {
+ options._containers = [];
+ var containment = options.containment;
+ if(Object.isArray(containment)) {
+ containment.each( function(c) { options._containers.push(DOKUid(c)) });
+ } else {
+ options._containers.push(DOKUid(containment));
+ }
+ }
+
+ if(options.accept) options.accept = [options.accept].flatten();
+
+ Element.makePositioned(element); // fix IE
+ options.element = element;
+
+ this.drops.push(options);
+ },
+
+ findDeepestChild: function(drops) {
+ deepest = drops[0];
+
+ for (i = 1; i < drops.length; ++i)
+ if (Element.isParent(drops[i].element, deepest.element))
+ deepest = drops[i];
+
+ return deepest;
+ },
+
+ isContained: function(element, drop) {
+ var containmentNode;
+ if(drop.tree) {
+ containmentNode = element.treeNode;
+ } else {
+ containmentNode = element.parentNode;
+ }
+ return drop._containers.detect(function(c) { return containmentNode == c });
+ },
+
+ isAffected: function(point, element, drop) {
+ return (
+ (drop.element!=element) &&
+ ((!drop._containers) ||
+ this.isContained(element, drop)) &&
+ ((!drop.accept) ||
+ (Element.classNames(element).detect(
+ function(v) { return drop.accept.include(v) } ) )) &&
+ Position.within(drop.element, point[0], point[1]) );
+ },
+
+ deactivate: function(drop) {
+ if(drop.hoverclass)
+ Element.removeClassName(drop.element, drop.hoverclass);
+ this.last_active = null;
+ },
+
+ activate: function(drop) {
+ if(drop.hoverclass)
+ Element.addClassName(drop.element, drop.hoverclass);
+ this.last_active = drop;
+ },
+
+ show: function(point, element) {
+ if(!this.drops.length) return;
+ var drop, affected = [];
+
+ this.drops.each( function(drop) {
+ if(Droppables.isAffected(point, element, drop))
+ affected.push(drop);
+ });
+
+ if(affected.length>0)
+ drop = Droppables.findDeepestChild(affected);
+
+ if(this.last_active && this.last_active != drop) this.deactivate(this.last_active);
+ if (drop) {
+ Position.within(drop.element, point[0], point[1]);
+ if(drop.onHover)
+ drop.onHover(element, drop.element, Position.overlap(drop.overlap, drop.element));
+
+ if (drop != this.last_active) Droppables.activate(drop);
+ }
+ },
+
+ fire: function(event, element) {
+ if(!this.last_active) return;
+ Position.prepare();
+
+ if (this.isAffected([Event.pointerX(event), Event.pointerY(event)], element, this.last_active))
+ if (this.last_active.onDrop) {
+ this.last_active.onDrop(element, this.last_active.element, event);
+ return true;
+ }
+ },
+
+ reset: function() {
+ if(this.last_active)
+ this.deactivate(this.last_active);
+ }
+};
+
+var Draggables = {
+ drags: [],
+ observers: [],
+
+ register: function(draggable) {
+ if(this.drags.length == 0) {
+ this.eventMouseUp = this.endDrag.bindAsEventListener(this);
+ this.eventMouseMove = this.updateDrag.bindAsEventListener(this);
+ this.eventKeypress = this.keyPress.bindAsEventListener(this);
+
+ Event.observe(document, "mouseup", this.eventMouseUp);
+ Event.observe(document, "mousemove", this.eventMouseMove);
+ Event.observe(document, "keypress", this.eventKeypress);
+ }
+ this.drags.push(draggable);
+ },
+
+ unregister: function(draggable) {
+ this.drags = this.drags.reject(function(d) { return d==draggable });
+ if(this.drags.length == 0) {
+ Event.stopObserving(document, "mouseup", this.eventMouseUp);
+ Event.stopObserving(document, "mousemove", this.eventMouseMove);
+ Event.stopObserving(document, "keypress", this.eventKeypress);
+ }
+ },
+
+ activate: function(draggable) {
+ if(draggable.options.delay) {
+ this._timeout = setTimeout(function() {
+ Draggables._timeout = null;
+ window.focus();
+ Draggables.activeDraggable = draggable;
+ }.bind(this), draggable.options.delay);
+ } else {
+ window.focus(); // allows keypress events if window isn't currently focused, fails for Safari
+ this.activeDraggable = draggable;
+ }
+ },
+
+ deactivate: function() {
+ this.activeDraggable = null;
+ },
+
+ updateDrag: function(event) {
+ if(!this.activeDraggable) return;
+ var pointer = [Event.pointerX(event), Event.pointerY(event)];
+ // Mozilla-based browsers fire successive mousemove events with
+ // the same coordinates, prevent needless redrawing (moz bug?)
+ if(this._lastPointer && (this._lastPointer.inspect() == pointer.inspect())) return;
+ this._lastPointer = pointer;
+
+ this.activeDraggable.updateDrag(event, pointer);
+ },
+
+ endDrag: function(event) {
+ if(this._timeout) {
+ clearTimeout(this._timeout);
+ this._timeout = null;
+ }
+ if(!this.activeDraggable) return;
+ this._lastPointer = null;
+ this.activeDraggable.endDrag(event);
+ this.activeDraggable = null;
+ },
+
+ keyPress: function(event) {
+ if(this.activeDraggable)
+ this.activeDraggable.keyPress(event);
+ },
+
+ addObserver: function(observer) {
+ this.observers.push(observer);
+ this._cacheObserverCallbacks();
+ },
+
+ removeObserver: function(element) { // element instead of observer fixes mem leaks
+ this.observers = this.observers.reject( function(o) { return o.element==element });
+ this._cacheObserverCallbacks();
+ },
+
+ notify: function(eventName, draggable, event) { // 'onStart', 'onEnd', 'onDrag'
+ if(this[eventName+'Count'] > 0)
+ this.observers.each( function(o) {
+ if(o[eventName]) o[eventName](eventName, draggable, event);
+ });
+ if(draggable.options[eventName]) draggable.options[eventName](draggable, event);
+ },
+
+ _cacheObserverCallbacks: function() {
+ ['onStart','onEnd','onDrag'].each( function(eventName) {
+ Draggables[eventName+'Count'] = Draggables.observers.select(
+ function(o) { return o[eventName]; }
+ ).length;
+ });
+ }
+};
+
+/*--------------------------------------------------------------------------*/
+
+var Draggable = Class.create({
+ initialize: function(element) {
+ var defaults = {
+ handle: false,
+ reverteffect: function(element, top_offset, left_offset) {
+ var dur = Math.sqrt(Math.abs(top_offset^2)+Math.abs(left_offset^2))*0.02;
+ new Effect.Move(element, { x: -left_offset, y: -top_offset, duration: dur,
+ queue: {scope:'_draggable', position:'end'}
+ });
+ },
+ endeffect: function(element) {
+ var toOpacity = Object.isNumber(element._opacity) ? element._opacity : 1.0;
+ new Effect.Opacity(element, {duration:0.2, from:0.7, to:toOpacity,
+ queue: {scope:'_draggable', position:'end'},
+ afterFinish: function(){
+ Draggable._dragging[element] = false
+ }
+ });
+ },
+ zindex: 1000,
+ revert: false,
+ quiet: false,
+ scroll: false,
+ scrollSensitivity: 20,
+ scrollSpeed: 15,
+ snap: false, // false, or xy or [x,y] or function(x,y){ return [x,y] }
+ delay: 0
+ };
+
+ if(!arguments[1] || Object.isUndefined(arguments[1].endeffect))
+ Object.extend(defaults, {
+ starteffect: function(element) {
+ element._opacity = Element.getOpacity(element);
+ Draggable._dragging[element] = true;
+ new Effect.Opacity(element, {duration:0.2, from:element._opacity, to:0.7});
+ }
+ });
+
+ var options = Object.extend(defaults, arguments[1] || { });
+
+ this.element = DOKUid(element);
+
+ if(options.handle && Object.isString(options.handle))
+ this.handle = this.element.down('.'+options.handle, 0);
+
+ if(!this.handle) this.handle = DOKUid(options.handle);
+ if(!this.handle) this.handle = this.element;
+
+ if(options.scroll && !options.scroll.scrollTo && !options.scroll.outerHTML) {
+ options.scroll = DOKUid(options.scroll);
+ this._isScrollChild = Element.childOf(this.element, options.scroll);
+ }
+
+ Element.makePositioned(this.element); // fix IE
+
+ this.options = options;
+ this.dragging = false;
+
+ this.eventMouseDown = this.initDrag.bindAsEventListener(this);
+ Event.observe(this.handle, "mousedown", this.eventMouseDown);
+
+ Draggables.register(this);
+ },
+
+ destroy: function() {
+ Event.stopObserving(this.handle, "mousedown", this.eventMouseDown);
+ Draggables.unregister(this);
+ },
+
+ currentDelta: function() {
+ return([
+ parseInt(Element.getStyle(this.element,'left') || '0'),
+ parseInt(Element.getStyle(this.element,'top') || '0')]);
+ },
+
+ initDrag: function(event) {
+ if(!Object.isUndefined(Draggable._dragging[this.element]) &&
+ Draggable._dragging[this.element]) return;
+ if(Event.isLeftClick(event)) {
+ // abort on form elements, fixes a Firefox issue
+ var src = Event.element(event);
+ if((tag_name = src.tagName.toUpperCase()) && (
+ tag_name=='INPUT' ||
+ tag_name=='SELECT' ||
+ tag_name=='OPTION' ||
+ tag_name=='BUTTON' ||
+ tag_name=='TEXTAREA')) return;
+
+ var pointer = [Event.pointerX(event), Event.pointerY(event)];
+ var pos = this.element.cumulativeOffset();
+ this.offset = [0,1].map( function(i) { return (pointer[i] - pos[i]) });
+
+ Draggables.activate(this);
+ Event.stop(event);
+ }
+ },
+
+ startDrag: function(event) {
+ this.dragging = true;
+ if(!this.delta)
+ this.delta = this.currentDelta();
+
+ if(this.options.zindex) {
+ this.originalZ = parseInt(Element.getStyle(this.element,'z-index') || 0);
+ this.element.style.zIndex = this.options.zindex;
+ }
+
+ if(this.options.ghosting) {
+ this._clone = this.element.cloneNode(true);
+ this._originallyAbsolute = (this.element.getStyle('position') == 'absolute');
+ if (!this._originallyAbsolute)
+ Position.absolutize(this.element);
+ this.element.parentNode.insertBefore(this._clone, this.element);
+ }
+
+ if(this.options.scroll) {
+ if (this.options.scroll == window) {
+ var where = this._getWindowScroll(this.options.scroll);
+ this.originalScrollLeft = where.left;
+ this.originalScrollTop = where.top;
+ } else {
+ this.originalScrollLeft = this.options.scroll.scrollLeft;
+ this.originalScrollTop = this.options.scroll.scrollTop;
+ }
+ }
+
+ Draggables.notify('onStart', this, event);
+
+ if(this.options.starteffect) this.options.starteffect(this.element);
+ },
+
+ updateDrag: function(event, pointer) {
+ if(!this.dragging) this.startDrag(event);
+
+ if(!this.options.quiet){
+ Position.prepare();
+ Droppables.show(pointer, this.element);
+ }
+
+ Draggables.notify('onDrag', this, event);
+
+ this.draw(pointer);
+ if(this.options.change) this.options.change(this);
+
+ if(this.options.scroll) {
+ this.stopScrolling();
+
+ var p;
+ if (this.options.scroll == window) {
+ with(this._getWindowScroll(this.options.scroll)) { p = [ left, top, left+width, top+height ]; }
+ } else {
+ p = Position.page(this.options.scroll);
+ p[0] += this.options.scroll.scrollLeft + Position.deltaX;
+ p[1] += this.options.scroll.scrollTop + Position.deltaY;
+ p.push(p[0]+this.options.scroll.offsetWidth);
+ p.push(p[1]+this.options.scroll.offsetHeight);
+ }
+ var speed = [0,0];
+ if(pointer[0] < (p[0]+this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[0]+this.options.scrollSensitivity);
+ if(pointer[1] < (p[1]+this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[1]+this.options.scrollSensitivity);
+ if(pointer[0] > (p[2]-this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[2]-this.options.scrollSensitivity);
+ if(pointer[1] > (p[3]-this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[3]-this.options.scrollSensitivity);
+ this.startScrolling(speed);
+ }
+
+ // fix AppleWebKit rendering
+ if(Prototype.Browser.WebKit) window.scrollBy(0,0);
+
+ Event.stop(event);
+ },
+
+ finishDrag: function(event, success) {
+ this.dragging = false;
+
+ if(this.options.quiet){
+ Position.prepare();
+ var pointer = [Event.pointerX(event), Event.pointerY(event)];
+ Droppables.show(pointer, this.element);
+ }
+
+ if(this.options.ghosting) {
+ if (!this._originallyAbsolute)
+ Position.relativize(this.element);
+ delete this._originallyAbsolute;
+ Element.remove(this._clone);
+ this._clone = null;
+ }
+
+ var dropped = false;
+ if(success) {
+ dropped = Droppables.fire(event, this.element);
+ if (!dropped) dropped = false;
+ }
+ if(dropped && this.options.onDropped) this.options.onDropped(this.element);
+ Draggables.notify('onEnd', this, event);
+
+ var revert = this.options.revert;
+ if(revert && Object.isFunction(revert)) revert = revert(this.element);
+
+ var d = this.currentDelta();
+ if(revert && this.options.reverteffect) {
+ if (dropped == 0 || revert != 'failure')
+ this.options.reverteffect(this.element,
+ d[1]-this.delta[1], d[0]-this.delta[0]);
+ } else {
+ this.delta = d;
+ }
+
+ if(this.options.zindex)
+ this.element.style.zIndex = this.originalZ;
+
+ if(this.options.endeffect)
+ this.options.endeffect(this.element);
+
+ Draggables.deactivate(this);
+ Droppables.reset();
+ },
+
+ keyPress: function(event) {
+ if(event.keyCode!=Event.KEY_ESC) return;
+ this.finishDrag(event, false);
+ Event.stop(event);
+ },
+
+ endDrag: function(event) {
+ if(!this.dragging) return;
+ this.stopScrolling();
+ this.finishDrag(event, true);
+ Event.stop(event);
+ },
+
+ draw: function(point) {
+ var pos = this.element.cumulativeOffset();
+ if(this.options.ghosting) {
+ var r = Position.realOffset(this.element);
+ pos[0] += r[0] - Position.deltaX; pos[1] += r[1] - Position.deltaY;
+ }
+
+ var d = this.currentDelta();
+ pos[0] -= d[0]; pos[1] -= d[1];
+
+ if(this.options.scroll && (this.options.scroll != window && this._isScrollChild)) {
+ pos[0] -= this.options.scroll.scrollLeft-this.originalScrollLeft;
+ pos[1] -= this.options.scroll.scrollTop-this.originalScrollTop;
+ }
+
+ var p = [0,1].map(function(i){
+ return (point[i]-pos[i]-this.offset[i])
+ }.bind(this));
+
+ if(this.options.snap) {
+ if(Object.isFunction(this.options.snap)) {
+ p = this.options.snap(p[0],p[1],this);
+ } else {
+ if(Object.isArray(this.options.snap)) {
+ p = p.map( function(v, i) {
+ return (v/this.options.snap[i]).round()*this.options.snap[i] }.bind(this));
+ } else {
+ p = p.map( function(v) {
+ return (v/this.options.snap).round()*this.options.snap }.bind(this));
+ }
+ }}
+
+ var style = this.element.style;
+ if((!this.options.constraint) || (this.options.constraint=='horizontal'))
+ style.left = p[0] + "px";
+ if((!this.options.constraint) || (this.options.constraint=='vertical'))
+ style.top = p[1] + "px";
+
+ if(style.visibility=="hidden") style.visibility = ""; // fix gecko rendering
+ },
+
+ stopScrolling: function() {
+ if(this.scrollInterval) {
+ clearInterval(this.scrollInterval);
+ this.scrollInterval = null;
+ Draggables._lastScrollPointer = null;
+ }
+ },
+
+ startScrolling: function(speed) {
+ if(!(speed[0] || speed[1])) return;
+ this.scrollSpeed = [speed[0]*this.options.scrollSpeed,speed[1]*this.options.scrollSpeed];
+ this.lastScrolled = new Date();
+ this.scrollInterval = setInterval(this.scroll.bind(this), 10);
+ },
+
+ scroll: function() {
+ var current = new Date();
+ var delta = current - this.lastScrolled;
+ this.lastScrolled = current;
+ if(this.options.scroll == window) {
+ with (this._getWindowScroll(this.options.scroll)) {
+ if (this.scrollSpeed[0] || this.scrollSpeed[1]) {
+ var d = delta / 1000;
+ this.options.scroll.scrollTo( left + d*this.scrollSpeed[0], top + d*this.scrollSpeed[1] );
+ }
+ }
+ } else {
+ this.options.scroll.scrollLeft += this.scrollSpeed[0] * delta / 1000;
+ this.options.scroll.scrollTop += this.scrollSpeed[1] * delta / 1000;
+ }
+
+ Position.prepare();
+ Droppables.show(Draggables._lastPointer, this.element);
+ Draggables.notify('onDrag', this);
+ if (this._isScrollChild) {
+ Draggables._lastScrollPointer = Draggables._lastScrollPointer || $A(Draggables._lastPointer);
+ Draggables._lastScrollPointer[0] += this.scrollSpeed[0] * delta / 1000;
+ Draggables._lastScrollPointer[1] += this.scrollSpeed[1] * delta / 1000;
+ if (Draggables._lastScrollPointer[0] < 0)
+ Draggables._lastScrollPointer[0] = 0;
+ if (Draggables._lastScrollPointer[1] < 0)
+ Draggables._lastScrollPointer[1] = 0;
+ this.draw(Draggables._lastScrollPointer);
+ }
+
+ if(this.options.change) this.options.change(this);
+ },
+
+ _getWindowScroll: function(w) {
+ var T, L, W, H;
+ with (w.document) {
+ if (w.document.documentElement && documentElement.scrollTop) {
+ T = documentElement.scrollTop;
+ L = documentElement.scrollLeft;
+ } else if (w.document.body) {
+ T = body.scrollTop;
+ L = body.scrollLeft;
+ }
+ if (w.innerWidth) {
+ W = w.innerWidth;
+ H = w.innerHeight;
+ } else if (w.document.documentElement && documentElement.clientWidth) {
+ W = documentElement.clientWidth;
+ H = documentElement.clientHeight;
+ } else {
+ W = body.offsetWidth;
+ H = body.offsetHeight;
+ }
+ }
+ return { top: T, left: L, width: W, height: H };
+ }
+});
+
+Draggable._dragging = { };
+
+/*--------------------------------------------------------------------------*/
+
+var SortableObserver = Class.create({
+ initialize: function(element, observer) {
+ this.element = DOKUid(element);
+ this.observer = observer;
+ this.lastValue = Sortable.serialize(this.element);
+ },
+
+ onStart: function() {
+ this.lastValue = Sortable.serialize(this.element);
+ },
+
+ onEnd: function() {
+ Sortable.unmark();
+ if(this.lastValue != Sortable.serialize(this.element))
+ this.observer(this.element)
+ }
+});
+
+var Sortable = {
+ SERIALIZE_RULE: /^[^_\-](?:[A-Za-z0-9\-\_]*)[_](.*)$/,
+
+ sortables: { },
+
+ _findRootElement: function(element) {
+ while (element.tagName.toUpperCase() != "BODY") {
+ if(element.id && Sortable.sortables[element.id]) return element;
+ element = element.parentNode;
+ }
+ },
+
+ options: function(element) {
+ element = Sortable._findRootElement(DOKUid(element));
+ if(!element) return;
+ return Sortable.sortables[element.id];
+ },
+
+ destroy: function(element){
+ element = DOKUid(element);
+ var s = Sortable.sortables[element.id];
+
+ if(s) {
+ Draggables.removeObserver(s.element);
+ s.droppables.each(function(d){ Droppables.remove(d) });
+ s.draggables.invoke('destroy');
+
+ delete Sortable.sortables[s.element.id];
+ }
+ },
+
+ create: function(element) {
+ element = DOKUid(element);
+ var options = Object.extend({
+ element: element,
+ tag: 'li', // assumes li children, override with tag: 'tagname'
+ dropOnEmpty: false,
+ tree: false,
+ treeTag: 'ul',
+ overlap: 'vertical', // one of 'vertical', 'horizontal'
+ constraint: 'vertical', // one of 'vertical', 'horizontal', false
+ containment: element, // also takes array of elements (or id's); or false
+ handle: false, // or a CSS class
+ only: false,
+ delay: 0,
+ hoverclass: null,
+ ghosting: false,
+ quiet: false,
+ scroll: false,
+ scrollSensitivity: 20,
+ scrollSpeed: 15,
+ format: this.SERIALIZE_RULE,
+
+ // these take arrays of elements or ids and can be
+ // used for better initialization performance
+ elements: false,
+ handles: false,
+
+ onChange: Prototype.emptyFunction,
+ onUpdate: Prototype.emptyFunction
+ }, arguments[1] || { });
+
+ // clear any old sortable with same element
+ this.destroy(element);
+
+ // build options for the draggables
+ var options_for_draggable = {
+ revert: true,
+ quiet: options.quiet,
+ scroll: options.scroll,
+ scrollSpeed: options.scrollSpeed,
+ scrollSensitivity: options.scrollSensitivity,
+ delay: options.delay,
+ ghosting: options.ghosting,
+ constraint: options.constraint,
+ handle: options.handle };
+
+ if(options.starteffect)
+ options_for_draggable.starteffect = options.starteffect;
+
+ if(options.reverteffect)
+ options_for_draggable.reverteffect = options.reverteffect;
+ else
+ if(options.ghosting) options_for_draggable.reverteffect = function(element) {
+ element.style.top = 0;
+ element.style.left = 0;
+ };
+
+ if(options.endeffect)
+ options_for_draggable.endeffect = options.endeffect;
+
+ if(options.zindex)
+ options_for_draggable.zindex = options.zindex;
+
+ // build options for the droppables
+ var options_for_droppable = {
+ overlap: options.overlap,
+ containment: options.containment,
+ tree: options.tree,
+ hoverclass: options.hoverclass,
+ onHover: Sortable.onHover
+ };
+
+ var options_for_tree = {
+ onHover: Sortable.onEmptyHover,
+ overlap: options.overlap,
+ containment: options.containment,
+ hoverclass: options.hoverclass
+ };
+
+ // fix for gecko engine
+ Element.cleanWhitespace(element);
+
+ options.draggables = [];
+ options.droppables = [];
+
+ // drop on empty handling
+ if(options.dropOnEmpty || options.tree) {
+ Droppables.add(element, options_for_tree);
+ options.droppables.push(element);
+ }
+
+ (options.elements || this.findElements(element, options) || []).each( function(e,i) {
+ var handle = options.handles ? DOKUid(options.handles[i]) :
+ (options.handle ? DOKUid(e).select('.' + options.handle)[0] : e);
+ options.draggables.push(
+ new Draggable(e, Object.extend(options_for_draggable, { handle: handle })));
+ Droppables.add(e, options_for_droppable);
+ if(options.tree) e.treeNode = element;
+ options.droppables.push(e);
+ });
+
+ if(options.tree) {
+ (Sortable.findTreeElements(element, options) || []).each( function(e) {
+ Droppables.add(e, options_for_tree);
+ e.treeNode = element;
+ options.droppables.push(e);
+ });
+ }
+
+ // keep reference
+ this.sortables[element.identify()] = options;
+
+ // for onupdate
+ Draggables.addObserver(new SortableObserver(element, options.onUpdate));
+
+ },
+
+ // return all suitable-for-sortable elements in a guaranteed order
+ findElements: function(element, options) {
+ return Element.findChildren(
+ element, options.only, options.tree ? true : false, options.tag);
+ },
+
+ findTreeElements: function(element, options) {
+ return Element.findChildren(
+ element, options.only, options.tree ? true : false, options.treeTag);
+ },
+
+ onHover: function(element, dropon, overlap) {
+ if(Element.isParent(dropon, element)) return;
+
+ if(overlap > .33 && overlap < .66 && Sortable.options(dropon).tree) {
+ return;
+ } else if(overlap>0.5) {
+ Sortable.mark(dropon, 'before');
+ if(dropon.previousSibling != element) {
+ var oldParentNode = element.parentNode;
+ element.style.visibility = "hidden"; // fix gecko rendering
+ dropon.parentNode.insertBefore(element, dropon);
+ if(dropon.parentNode!=oldParentNode)
+ Sortable.options(oldParentNode).onChange(element);
+ Sortable.options(dropon.parentNode).onChange(element);
+ }
+ } else {
+ Sortable.mark(dropon, 'after');
+ var nextElement = dropon.nextSibling || null;
+ if(nextElement != element) {
+ var oldParentNode = element.parentNode;
+ element.style.visibility = "hidden"; // fix gecko rendering
+ dropon.parentNode.insertBefore(element, nextElement);
+ if(dropon.parentNode!=oldParentNode)
+ Sortable.options(oldParentNode).onChange(element);
+ Sortable.options(dropon.parentNode).onChange(element);
+ }
+ }
+ },
+
+ onEmptyHover: function(element, dropon, overlap) {
+ var oldParentNode = element.parentNode;
+ var droponOptions = Sortable.options(dropon);
+
+ if(!Element.isParent(dropon, element)) {
+ var index;
+
+ var children = Sortable.findElements(dropon, {tag: droponOptions.tag, only: droponOptions.only});
+ var child = null;
+
+ if(children) {
+ var offset = Element.offsetSize(dropon, droponOptions.overlap) * (1.0 - overlap);
+
+ for (index = 0; index < children.length; index += 1) {
+ if (offset - Element.offsetSize (children[index], droponOptions.overlap) >= 0) {
+ offset -= Element.offsetSize (children[index], droponOptions.overlap);
+ } else if (offset - (Element.offsetSize (children[index], droponOptions.overlap) / 2) >= 0) {
+ child = index + 1 < children.length ? children[index + 1] : null;
+ break;
+ } else {
+ child = children[index];
+ break;
+ }
+ }
+ }
+
+ dropon.insertBefore(element, child);
+
+ Sortable.options(oldParentNode).onChange(element);
+ droponOptions.onChange(element);
+ }
+ },
+
+ unmark: function() {
+ if(Sortable._marker) Sortable._marker.hide();
+ },
+
+ mark: function(dropon, position) {
+ // mark on ghosting only
+ var sortable = Sortable.options(dropon.parentNode);
+ if(sortable && !sortable.ghosting) return;
+
+ if(!Sortable._marker) {
+ Sortable._marker =
+ (DOKUid('dropmarker') || Element.extend(document.createElement('DIV'))).
+ hide().addClassName('dropmarker').setStyle({position:'absolute'});
+ document.getElementsByTagName("body").item(0).appendChild(Sortable._marker);
+ }
+ var offsets = dropon.cumulativeOffset();
+ Sortable._marker.setStyle({left: offsets[0]+'px', top: offsets[1] + 'px'});
+
+ if(position=='after')
+ if(sortable.overlap == 'horizontal')
+ Sortable._marker.setStyle({left: (offsets[0]+dropon.clientWidth) + 'px'});
+ else
+ Sortable._marker.setStyle({top: (offsets[1]+dropon.clientHeight) + 'px'});
+
+ Sortable._marker.show();
+ },
+
+ _tree: function(element, options, parent) {
+ var children = Sortable.findElements(element, options) || [];
+
+ for (var i = 0; i < children.length; ++i) {
+ var match = children[i].id.match(options.format);
+
+ if (!match) continue;
+
+ var child = {
+ id: encodeURIComponent(match ? match[1] : null),
+ element: element,
+ parent: parent,
+ children: [],
+ position: parent.children.length,
+ container: DOKUid(children[i]).down(options.treeTag)
+ };
+
+ /* Get the element containing the children and recurse over it */
+ if (child.container)
+ this._tree(child.container, options, child);
+
+ parent.children.push (child);
+ }
+
+ return parent;
+ },
+
+ tree: function(element) {
+ element = DOKUid(element);
+ var sortableOptions = this.options(element);
+ var options = Object.extend({
+ tag: sortableOptions.tag,
+ treeTag: sortableOptions.treeTag,
+ only: sortableOptions.only,
+ name: element.id,
+ format: sortableOptions.format
+ }, arguments[1] || { });
+
+ var root = {
+ id: null,
+ parent: null,
+ children: [],
+ container: element,
+ position: 0
+ };
+
+ return Sortable._tree(element, options, root);
+ },
+
+ /* Construct a [i] index for a particular node */
+ _constructIndex: function(node) {
+ var index = '';
+ do {
+ if (node.id) index = '[' + node.position + ']' + index;
+ } while ((node = node.parent) != null);
+ return index;
+ },
+
+ sequence: function(element) {
+ element = DOKUid(element);
+ var options = Object.extend(this.options(element), arguments[1] || { });
+
+ return DOKUid(this.findElements(element, options) || []).map( function(item) {
+ return item.id.match(options.format) ? item.id.match(options.format)[1] : '';
+ });
+ },
+
+ setSequence: function(element, new_sequence) {
+ element = DOKUid(element);
+ var options = Object.extend(this.options(element), arguments[2] || { });
+
+ var nodeMap = { };
+ this.findElements(element, options).each( function(n) {
+ if (n.id.match(options.format))
+ nodeMap[n.id.match(options.format)[1]] = [n, n.parentNode];
+ n.parentNode.removeChild(n);
+ });
+
+ new_sequence.each(function(ident) {
+ var n = nodeMap[ident];
+ if (n) {
+ n[1].appendChild(n[0]);
+ delete nodeMap[ident];
+ }
+ });
+ },
+
+ serialize: function(element) {
+ element = DOKUid(element);
+ var options = Object.extend(Sortable.options(element), arguments[1] || { });
+ var name = encodeURIComponent(
+ (arguments[1] && arguments[1].name) ? arguments[1].name : element.id);
+
+ if (options.tree) {
+ return Sortable.tree(element, arguments[1]).children.map( function (item) {
+ return [name + Sortable._constructIndex(item) + "[id]=" +
+ encodeURIComponent(item.id)].concat(item.children.map(arguments.callee));
+ }).flatten().join('&');
+ } else {
+ return Sortable.sequence(element, arguments[1]).map( function(item) {
+ return name + "[]=" + encodeURIComponent(item);
+ }).join('&');
+ }
+ }
+};
+
+// Returns true if child is contained within element
+Element.isParent = function(child, element) {
+ if (!child.parentNode || child == element) return false;
+ if (child.parentNode == element) return true;
+ return Element.isParent(child.parentNode, element);
+};
+
+Element.findChildren = function(element, only, recursive, tagName) {
+ if(!element.hasChildNodes()) return null;
+ tagName = tagName.toUpperCase();
+ if(only) only = [only].flatten();
+ var elements = [];
+ $A(element.childNodes).each( function(e) {
+ if(e.tagName && e.tagName.toUpperCase()==tagName &&
+ (!only || (Element.classNames(e).detect(function(v) { return only.include(v) }))))
+ elements.push(e);
+ if(recursive) {
+ var grandchildren = Element.findChildren(e, only, recursive, tagName);
+ if(grandchildren) elements.push(grandchildren);
+ }
+ });
+
+ return (elements.length>0 ? elements.flatten() : []);
+};
+
+Element.offsetSize = function (element, type) {
+ return element['offset' + ((type=='vertical' || type=='height') ? 'Height' : 'Width')];
+}; \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/effects.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/effects.js
new file mode 100644
index 000000000..5ee17d3e2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/effects.js
@@ -0,0 +1,1123 @@
+// script.aculo.us effects.js v1.8.3, Thu Oct 08 11:23:33 +0200 2009
+
+// Copyright (c) 2005-2009 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
+// Contributors:
+// Justin Palmer (http://encytemedia.com/)
+// Mark Pilgrim (http://diveintomark.org/)
+// Martin Bialasinki
+//
+// script.aculo.us is freely distributable under the terms of an MIT-style license.
+// For details, see the script.aculo.us web site: http://script.aculo.us/
+
+// converts rgb() and #xxx to #xxxxxx format,
+// returns self (or first argument) if not convertable
+String.prototype.parseColor = function() {
+ var color = '#';
+ if (this.slice(0,4) == 'rgb(') {
+ var cols = this.slice(4,this.length-1).split(',');
+ var i=0; do { color += parseInt(cols[i]).toColorPart() } while (++i<3);
+ } else {
+ if (this.slice(0,1) == '#') {
+ if (this.length==4) for(var i=1;i<4;i++) color += (this.charAt(i) + this.charAt(i)).toLowerCase();
+ if (this.length==7) color = this.toLowerCase();
+ }
+ }
+ return (color.length==7 ? color : (arguments[0] || this));
+};
+
+/*--------------------------------------------------------------------------*/
+
+Element.collectTextNodes = function(element) {
+ return $A(DOKUid(element).childNodes).collect( function(node) {
+ return (node.nodeType==3 ? node.nodeValue :
+ (node.hasChildNodes() ? Element.collectTextNodes(node) : ''));
+ }).flatten().join('');
+};
+
+Element.collectTextNodesIgnoreClass = function(element, className) {
+ return $A(DOKUid(element).childNodes).collect( function(node) {
+ return (node.nodeType==3 ? node.nodeValue :
+ ((node.hasChildNodes() && !Element.hasClassName(node,className)) ?
+ Element.collectTextNodesIgnoreClass(node, className) : ''));
+ }).flatten().join('');
+};
+
+Element.setContentZoom = function(element, percent) {
+ element = DOKUid(element);
+ element.setStyle({fontSize: (percent/100) + 'em'});
+ if (Prototype.Browser.WebKit) window.scrollBy(0,0);
+ return element;
+};
+
+Element.getInlineOpacity = function(element){
+ return DOKUid(element).style.opacity || '';
+};
+
+Element.forceRerendering = function(element) {
+ try {
+ element = DOKUid(element);
+ var n = document.createTextNode(' ');
+ element.appendChild(n);
+ element.removeChild(n);
+ } catch(e) { }
+};
+
+/*--------------------------------------------------------------------------*/
+
+var Effect = {
+ _elementDoesNotExistError: {
+ name: 'ElementDoesNotExistError',
+ message: 'The specified DOM element does not exist, but is required for this effect to operate'
+ },
+ Transitions: {
+ linear: Prototype.K,
+ sinoidal: function(pos) {
+ return (-Math.cos(pos*Math.PI)/2) + .5;
+ },
+ reverse: function(pos) {
+ return 1-pos;
+ },
+ flicker: function(pos) {
+ var pos = ((-Math.cos(pos*Math.PI)/4) + .75) + Math.random()/4;
+ return pos > 1 ? 1 : pos;
+ },
+ wobble: function(pos) {
+ return (-Math.cos(pos*Math.PI*(9*pos))/2) + .5;
+ },
+ pulse: function(pos, pulses) {
+ return (-Math.cos((pos*((pulses||5)-.5)*2)*Math.PI)/2) + .5;
+ },
+ spring: function(pos) {
+ return 1 - (Math.cos(pos * 4.5 * Math.PI) * Math.exp(-pos * 6));
+ },
+ none: function(pos) {
+ return 0;
+ },
+ full: function(pos) {
+ return 1;
+ }
+ },
+ DefaultOptions: {
+ duration: 1.0, // seconds
+ fps: 100, // 100= assume 66fps max.
+ sync: false, // true for combining
+ from: 0.0,
+ to: 1.0,
+ delay: 0.0,
+ queue: 'parallel'
+ },
+ tagifyText: function(element) {
+ var tagifyStyle = 'position:relative';
+ if (Prototype.Browser.IE) tagifyStyle += ';zoom:1';
+
+ element = DOKUid(element);
+ $A(element.childNodes).each( function(child) {
+ if (child.nodeType==3) {
+ child.nodeValue.toArray().each( function(character) {
+ element.insertBefore(
+ new Element('span', {style: tagifyStyle}).update(
+ character == ' ' ? String.fromCharCode(160) : character),
+ child);
+ });
+ Element.remove(child);
+ }
+ });
+ },
+ multiple: function(element, effect) {
+ var elements;
+ if (((typeof element == 'object') ||
+ Object.isFunction(element)) &&
+ (element.length))
+ elements = element;
+ else
+ elements = DOKUid(element).childNodes;
+
+ var options = Object.extend({
+ speed: 0.1,
+ delay: 0.0
+ }, arguments[2] || { });
+ var masterDelay = options.delay;
+
+ $A(elements).each( function(element, index) {
+ new effect(element, Object.extend(options, { delay: index * options.speed + masterDelay }));
+ });
+ },
+ PAIRS: {
+ 'slide': ['SlideDown','SlideUp'],
+ 'blind': ['BlindDown','BlindUp'],
+ 'appear': ['Appear','Fade']
+ },
+ toggle: function(element, effect, options) {
+ element = DOKUid(element);
+ effect = (effect || 'appear').toLowerCase();
+
+ return Effect[ Effect.PAIRS[ effect ][ element.visible() ? 1 : 0 ] ](element, Object.extend({
+ queue: { position:'end', scope:(element.id || 'global'), limit: 1 }
+ }, options || {}));
+ }
+};
+
+Effect.DefaultOptions.transition = Effect.Transitions.sinoidal;
+
+/* ------------- core effects ------------- */
+
+Effect.ScopedQueue = Class.create(Enumerable, {
+ initialize: function() {
+ this.effects = [];
+ this.interval = null;
+ },
+ _each: function(iterator) {
+ this.effects._each(iterator);
+ },
+ add: function(effect) {
+ var timestamp = new Date().getTime();
+
+ var position = Object.isString(effect.options.queue) ?
+ effect.options.queue : effect.options.queue.position;
+
+ switch(position) {
+ case 'front':
+ // move unstarted effects after this effect
+ this.effects.findAll(function(e){ return e.state=='idle' }).each( function(e) {
+ e.startOn += effect.finishOn;
+ e.finishOn += effect.finishOn;
+ });
+ break;
+ case 'with-last':
+ timestamp = this.effects.pluck('startOn').max() || timestamp;
+ break;
+ case 'end':
+ // start effect after last queued effect has finished
+ timestamp = this.effects.pluck('finishOn').max() || timestamp;
+ break;
+ }
+
+ effect.startOn += timestamp;
+ effect.finishOn += timestamp;
+
+ if (!effect.options.queue.limit || (this.effects.length < effect.options.queue.limit))
+ this.effects.push(effect);
+
+ if (!this.interval)
+ this.interval = setInterval(this.loop.bind(this), 15);
+ },
+ remove: function(effect) {
+ this.effects = this.effects.reject(function(e) { return e==effect });
+ if (this.effects.length == 0) {
+ clearInterval(this.interval);
+ this.interval = null;
+ }
+ },
+ loop: function() {
+ var timePos = new Date().getTime();
+ for(var i=0, len=this.effects.length;i<len;i++)
+ this.effects[i] && this.effects[i].loop(timePos);
+ }
+});
+
+Effect.Queues = {
+ instances: $H(),
+ get: function(queueName) {
+ if (!Object.isString(queueName)) return queueName;
+
+ return this.instances.get(queueName) ||
+ this.instances.set(queueName, new Effect.ScopedQueue());
+ }
+};
+Effect.Queue = Effect.Queues.get('global');
+
+Effect.Base = Class.create({
+ position: null,
+ start: function(options) {
+ if (options && options.transition === false) options.transition = Effect.Transitions.linear;
+ this.options = Object.extend(Object.extend({ },Effect.DefaultOptions), options || { });
+ this.currentFrame = 0;
+ this.state = 'idle';
+ this.startOn = this.options.delay*1000;
+ this.finishOn = this.startOn+(this.options.duration*1000);
+ this.fromToDelta = this.options.to-this.options.from;
+ this.totalTime = this.finishOn-this.startOn;
+ this.totalFrames = this.options.fps*this.options.duration;
+
+ this.render = (function() {
+ function dispatch(effect, eventName) {
+ if (effect.options[eventName + 'Internal'])
+ effect.options[eventName + 'Internal'](effect);
+ if (effect.options[eventName])
+ effect.options[eventName](effect);
+ }
+
+ return function(pos) {
+ if (this.state === "idle") {
+ this.state = "running";
+ dispatch(this, 'beforeSetup');
+ if (this.setup) this.setup();
+ dispatch(this, 'afterSetup');
+ }
+ if (this.state === "running") {
+ pos = (this.options.transition(pos) * this.fromToDelta) + this.options.from;
+ this.position = pos;
+ dispatch(this, 'beforeUpdate');
+ if (this.update) this.update(pos);
+ dispatch(this, 'afterUpdate');
+ }
+ };
+ })();
+
+ this.event('beforeStart');
+ if (!this.options.sync)
+ Effect.Queues.get(Object.isString(this.options.queue) ?
+ 'global' : this.options.queue.scope).add(this);
+ },
+ loop: function(timePos) {
+ if (timePos >= this.startOn) {
+ if (timePos >= this.finishOn) {
+ this.render(1.0);
+ this.cancel();
+ this.event('beforeFinish');
+ if (this.finish) this.finish();
+ this.event('afterFinish');
+ return;
+ }
+ var pos = (timePos - this.startOn) / this.totalTime,
+ frame = (pos * this.totalFrames).round();
+ if (frame > this.currentFrame) {
+ this.render(pos);
+ this.currentFrame = frame;
+ }
+ }
+ },
+ cancel: function() {
+ if (!this.options.sync)
+ Effect.Queues.get(Object.isString(this.options.queue) ?
+ 'global' : this.options.queue.scope).remove(this);
+ this.state = 'finished';
+ },
+ event: function(eventName) {
+ if (this.options[eventName + 'Internal']) this.options[eventName + 'Internal'](this);
+ if (this.options[eventName]) this.options[eventName](this);
+ },
+ inspect: function() {
+ var data = $H();
+ for(property in this)
+ if (!Object.isFunction(this[property])) data.set(property, this[property]);
+ return '#<Effect:' + data.inspect() + ',options:' + $H(this.options).inspect() + '>';
+ }
+});
+
+Effect.Parallel = Class.create(Effect.Base, {
+ initialize: function(effects) {
+ this.effects = effects || [];
+ this.start(arguments[1]);
+ },
+ update: function(position) {
+ this.effects.invoke('render', position);
+ },
+ finish: function(position) {
+ this.effects.each( function(effect) {
+ effect.render(1.0);
+ effect.cancel();
+ effect.event('beforeFinish');
+ if (effect.finish) effect.finish(position);
+ effect.event('afterFinish');
+ });
+ }
+});
+
+Effect.Tween = Class.create(Effect.Base, {
+ initialize: function(object, from, to) {
+ object = Object.isString(object) ? DOKUid(object) : object;
+ var args = $A(arguments), method = args.last(),
+ options = args.length == 5 ? args[3] : null;
+ this.method = Object.isFunction(method) ? method.bind(object) :
+ Object.isFunction(object[method]) ? object[method].bind(object) :
+ function(value) { object[method] = value };
+ this.start(Object.extend({ from: from, to: to }, options || { }));
+ },
+ update: function(position) {
+ this.method(position);
+ }
+});
+
+Effect.Event = Class.create(Effect.Base, {
+ initialize: function() {
+ this.start(Object.extend({ duration: 0 }, arguments[0] || { }));
+ },
+ update: Prototype.emptyFunction
+});
+
+Effect.Opacity = Class.create(Effect.Base, {
+ initialize: function(element) {
+ this.element = DOKUid(element);
+ if (!this.element) throw(Effect._elementDoesNotExistError);
+ // make this work on IE on elements without 'layout'
+ if (Prototype.Browser.IE && (!this.element.currentStyle.hasLayout))
+ this.element.setStyle({zoom: 1});
+ var options = Object.extend({
+ from: this.element.getOpacity() || 0.0,
+ to: 1.0
+ }, arguments[1] || { });
+ this.start(options);
+ },
+ update: function(position) {
+ this.element.setOpacity(position);
+ }
+});
+
+Effect.Move = Class.create(Effect.Base, {
+ initialize: function(element) {
+ this.element = DOKUid(element);
+ if (!this.element) throw(Effect._elementDoesNotExistError);
+ var options = Object.extend({
+ x: 0,
+ y: 0,
+ mode: 'relative'
+ }, arguments[1] || { });
+ this.start(options);
+ },
+ setup: function() {
+ this.element.makePositioned();
+ this.originalLeft = parseFloat(this.element.getStyle('left') || '0');
+ this.originalTop = parseFloat(this.element.getStyle('top') || '0');
+ if (this.options.mode == 'absolute') {
+ this.options.x = this.options.x - this.originalLeft;
+ this.options.y = this.options.y - this.originalTop;
+ }
+ },
+ update: function(position) {
+ this.element.setStyle({
+ left: (this.options.x * position + this.originalLeft).round() + 'px',
+ top: (this.options.y * position + this.originalTop).round() + 'px'
+ });
+ }
+});
+
+// for backwards compatibility
+Effect.MoveBy = function(element, toTop, toLeft) {
+ return new Effect.Move(element,
+ Object.extend({ x: toLeft, y: toTop }, arguments[3] || { }));
+};
+
+Effect.Scale = Class.create(Effect.Base, {
+ initialize: function(element, percent) {
+ this.element = DOKUid(element);
+ if (!this.element) throw(Effect._elementDoesNotExistError);
+ var options = Object.extend({
+ scaleX: true,
+ scaleY: true,
+ scaleContent: true,
+ scaleFromCenter: false,
+ scaleMode: 'box', // 'box' or 'contents' or { } with provided values
+ scaleFrom: 100.0,
+ scaleTo: percent
+ }, arguments[2] || { });
+ this.start(options);
+ },
+ setup: function() {
+ this.restoreAfterFinish = this.options.restoreAfterFinish || false;
+ this.elementPositioning = this.element.getStyle('position');
+
+ this.originalStyle = { };
+ ['top','left','width','height','fontSize'].each( function(k) {
+ this.originalStyle[k] = this.element.style[k];
+ }.bind(this));
+
+ this.originalTop = this.element.offsetTop;
+ this.originalLeft = this.element.offsetLeft;
+
+ var fontSize = this.element.getStyle('font-size') || '100%';
+ ['em','px','%','pt'].each( function(fontSizeType) {
+ if (fontSize.indexOf(fontSizeType)>0) {
+ this.fontSize = parseFloat(fontSize);
+ this.fontSizeType = fontSizeType;
+ }
+ }.bind(this));
+
+ this.factor = (this.options.scaleTo - this.options.scaleFrom)/100;
+
+ this.dims = null;
+ if (this.options.scaleMode=='box')
+ this.dims = [this.element.offsetHeight, this.element.offsetWidth];
+ if (/^content/.test(this.options.scaleMode))
+ this.dims = [this.element.scrollHeight, this.element.scrollWidth];
+ if (!this.dims)
+ this.dims = [this.options.scaleMode.originalHeight,
+ this.options.scaleMode.originalWidth];
+ },
+ update: function(position) {
+ var currentScale = (this.options.scaleFrom/100.0) + (this.factor * position);
+ if (this.options.scaleContent && this.fontSize)
+ this.element.setStyle({fontSize: this.fontSize * currentScale + this.fontSizeType });
+ this.setDimensions(this.dims[0] * currentScale, this.dims[1] * currentScale);
+ },
+ finish: function(position) {
+ if (this.restoreAfterFinish) this.element.setStyle(this.originalStyle);
+ },
+ setDimensions: function(height, width) {
+ var d = { };
+ if (this.options.scaleX) d.width = width.round() + 'px';
+ if (this.options.scaleY) d.height = height.round() + 'px';
+ if (this.options.scaleFromCenter) {
+ var topd = (height - this.dims[0])/2;
+ var leftd = (width - this.dims[1])/2;
+ if (this.elementPositioning == 'absolute') {
+ if (this.options.scaleY) d.top = this.originalTop-topd + 'px';
+ if (this.options.scaleX) d.left = this.originalLeft-leftd + 'px';
+ } else {
+ if (this.options.scaleY) d.top = -topd + 'px';
+ if (this.options.scaleX) d.left = -leftd + 'px';
+ }
+ }
+ this.element.setStyle(d);
+ }
+});
+
+Effect.Highlight = Class.create(Effect.Base, {
+ initialize: function(element) {
+ this.element = DOKUid(element);
+ if (!this.element) throw(Effect._elementDoesNotExistError);
+ var options = Object.extend({ startcolor: '#ffff99' }, arguments[1] || { });
+ this.start(options);
+ },
+ setup: function() {
+ // Prevent executing on elements not in the layout flow
+ if (this.element.getStyle('display')=='none') { this.cancel(); return; }
+ // Disable background image during the effect
+ this.oldStyle = { };
+ if (!this.options.keepBackgroundImage) {
+ this.oldStyle.backgroundImage = this.element.getStyle('background-image');
+ this.element.setStyle({backgroundImage: 'none'});
+ }
+ if (!this.options.endcolor)
+ this.options.endcolor = this.element.getStyle('background-color').parseColor('#ffffff');
+ if (!this.options.restorecolor)
+ this.options.restorecolor = this.element.getStyle('background-color');
+ // init color calculations
+ this._base = $R(0,2).map(function(i){ return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16) }.bind(this));
+ this._delta = $R(0,2).map(function(i){ return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i] }.bind(this));
+ },
+ update: function(position) {
+ this.element.setStyle({backgroundColor: $R(0,2).inject('#',function(m,v,i){
+ return m+((this._base[i]+(this._delta[i]*position)).round().toColorPart()); }.bind(this)) });
+ },
+ finish: function() {
+ this.element.setStyle(Object.extend(this.oldStyle, {
+ backgroundColor: this.options.restorecolor
+ }));
+ }
+});
+
+Effect.ScrollTo = function(element) {
+ var options = arguments[1] || { },
+ scrollOffsets = document.viewport.getScrollOffsets(),
+ elementOffsets = DOKUid(element).cumulativeOffset();
+
+ if (options.offset) elementOffsets[1] += options.offset;
+
+ return new Effect.Tween(null,
+ scrollOffsets.top,
+ elementOffsets[1],
+ options,
+ function(p){ scrollTo(scrollOffsets.left, p.round()); }
+ );
+};
+
+/* ------------- combination effects ------------- */
+
+Effect.Fade = function(element) {
+ element = DOKUid(element);
+ var oldOpacity = element.getInlineOpacity();
+ var options = Object.extend({
+ from: element.getOpacity() || 1.0,
+ to: 0.0,
+ afterFinishInternal: function(effect) {
+ if (effect.options.to!=0) return;
+ effect.element.hide().setStyle({opacity: oldOpacity});
+ }
+ }, arguments[1] || { });
+ return new Effect.Opacity(element,options);
+};
+
+Effect.Appear = function(element) {
+ element = DOKUid(element);
+ var options = Object.extend({
+ from: (element.getStyle('display') == 'none' ? 0.0 : element.getOpacity() || 0.0),
+ to: 1.0,
+ // force Safari to render floated elements properly
+ afterFinishInternal: function(effect) {
+ effect.element.forceRerendering();
+ },
+ beforeSetup: function(effect) {
+ effect.element.setOpacity(effect.options.from).show();
+ }}, arguments[1] || { });
+ return new Effect.Opacity(element,options);
+};
+
+Effect.Puff = function(element) {
+ element = DOKUid(element);
+ var oldStyle = {
+ opacity: element.getInlineOpacity(),
+ position: element.getStyle('position'),
+ top: element.style.top,
+ left: element.style.left,
+ width: element.style.width,
+ height: element.style.height
+ };
+ return new Effect.Parallel(
+ [ new Effect.Scale(element, 200,
+ { sync: true, scaleFromCenter: true, scaleContent: true, restoreAfterFinish: true }),
+ new Effect.Opacity(element, { sync: true, to: 0.0 } ) ],
+ Object.extend({ duration: 1.0,
+ beforeSetupInternal: function(effect) {
+ Position.absolutize(effect.effects[0].element);
+ },
+ afterFinishInternal: function(effect) {
+ effect.effects[0].element.hide().setStyle(oldStyle); }
+ }, arguments[1] || { })
+ );
+};
+
+Effect.BlindUp = function(element) {
+ element = DOKUid(element);
+ element.makeClipping();
+ return new Effect.Scale(element, 0,
+ Object.extend({ scaleContent: false,
+ scaleX: false,
+ restoreAfterFinish: true,
+ afterFinishInternal: function(effect) {
+ effect.element.hide().undoClipping();
+ }
+ }, arguments[1] || { })
+ );
+};
+
+Effect.BlindDown = function(element) {
+ element = DOKUid(element);
+ var elementDimensions = element.getDimensions();
+ return new Effect.Scale(element, 100, Object.extend({
+ scaleContent: false,
+ scaleX: false,
+ scaleFrom: 0,
+ scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
+ restoreAfterFinish: true,
+ afterSetup: function(effect) {
+ effect.element.makeClipping().setStyle({height: '0px'}).show();
+ },
+ afterFinishInternal: function(effect) {
+ effect.element.undoClipping();
+ }
+ }, arguments[1] || { }));
+};
+
+Effect.SwitchOff = function(element) {
+ element = DOKUid(element);
+ var oldOpacity = element.getInlineOpacity();
+ return new Effect.Appear(element, Object.extend({
+ duration: 0.4,
+ from: 0,
+ transition: Effect.Transitions.flicker,
+ afterFinishInternal: function(effect) {
+ new Effect.Scale(effect.element, 1, {
+ duration: 0.3, scaleFromCenter: true,
+ scaleX: false, scaleContent: false, restoreAfterFinish: true,
+ beforeSetup: function(effect) {
+ effect.element.makePositioned().makeClipping();
+ },
+ afterFinishInternal: function(effect) {
+ effect.element.hide().undoClipping().undoPositioned().setStyle({opacity: oldOpacity});
+ }
+ });
+ }
+ }, arguments[1] || { }));
+};
+
+Effect.DropOut = function(element) {
+ element = DOKUid(element);
+ var oldStyle = {
+ top: element.getStyle('top'),
+ left: element.getStyle('left'),
+ opacity: element.getInlineOpacity() };
+ return new Effect.Parallel(
+ [ new Effect.Move(element, {x: 0, y: 100, sync: true }),
+ new Effect.Opacity(element, { sync: true, to: 0.0 }) ],
+ Object.extend(
+ { duration: 0.5,
+ beforeSetup: function(effect) {
+ effect.effects[0].element.makePositioned();
+ },
+ afterFinishInternal: function(effect) {
+ effect.effects[0].element.hide().undoPositioned().setStyle(oldStyle);
+ }
+ }, arguments[1] || { }));
+};
+
+Effect.Shake = function(element) {
+ element = DOKUid(element);
+ var options = Object.extend({
+ distance: 20,
+ duration: 0.5
+ }, arguments[1] || {});
+ var distance = parseFloat(options.distance);
+ var split = parseFloat(options.duration) / 10.0;
+ var oldStyle = {
+ top: element.getStyle('top'),
+ left: element.getStyle('left') };
+ return new Effect.Move(element,
+ { x: distance, y: 0, duration: split, afterFinishInternal: function(effect) {
+ new Effect.Move(effect.element,
+ { x: -distance*2, y: 0, duration: split*2, afterFinishInternal: function(effect) {
+ new Effect.Move(effect.element,
+ { x: distance*2, y: 0, duration: split*2, afterFinishInternal: function(effect) {
+ new Effect.Move(effect.element,
+ { x: -distance*2, y: 0, duration: split*2, afterFinishInternal: function(effect) {
+ new Effect.Move(effect.element,
+ { x: distance*2, y: 0, duration: split*2, afterFinishInternal: function(effect) {
+ new Effect.Move(effect.element,
+ { x: -distance, y: 0, duration: split, afterFinishInternal: function(effect) {
+ effect.element.undoPositioned().setStyle(oldStyle);
+ }}); }}); }}); }}); }}); }});
+};
+
+Effect.SlideDown = function(element) {
+ element = DOKUid(element).cleanWhitespace();
+ // SlideDown need to have the content of the element wrapped in a container element with fixed height!
+ var oldInnerBottom = element.down().getStyle('bottom');
+ var elementDimensions = element.getDimensions();
+ return new Effect.Scale(element, 100, Object.extend({
+ scaleContent: false,
+ scaleX: false,
+ scaleFrom: window.opera ? 0 : 1,
+ scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
+ restoreAfterFinish: true,
+ afterSetup: function(effect) {
+ effect.element.makePositioned();
+ effect.element.down().makePositioned();
+ if (window.opera) effect.element.setStyle({top: ''});
+ effect.element.makeClipping().setStyle({height: '0px'}).show();
+ },
+ afterUpdateInternal: function(effect) {
+ effect.element.down().setStyle({bottom:
+ (effect.dims[0] - effect.element.clientHeight) + 'px' });
+ },
+ afterFinishInternal: function(effect) {
+ effect.element.undoClipping().undoPositioned();
+ effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom}); }
+ }, arguments[1] || { })
+ );
+};
+
+Effect.SlideUp = function(element) {
+ element = DOKUid(element).cleanWhitespace();
+ var oldInnerBottom = element.down().getStyle('bottom');
+ var elementDimensions = element.getDimensions();
+ return new Effect.Scale(element, window.opera ? 0 : 1,
+ Object.extend({ scaleContent: false,
+ scaleX: false,
+ scaleMode: 'box',
+ scaleFrom: 100,
+ scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
+ restoreAfterFinish: true,
+ afterSetup: function(effect) {
+ effect.element.makePositioned();
+ effect.element.down().makePositioned();
+ if (window.opera) effect.element.setStyle({top: ''});
+ effect.element.makeClipping().show();
+ },
+ afterUpdateInternal: function(effect) {
+ effect.element.down().setStyle({bottom:
+ (effect.dims[0] - effect.element.clientHeight) + 'px' });
+ },
+ afterFinishInternal: function(effect) {
+ effect.element.hide().undoClipping().undoPositioned();
+ effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom});
+ }
+ }, arguments[1] || { })
+ );
+};
+
+// Bug in opera makes the TD containing this element expand for a instance after finish
+Effect.Squish = function(element) {
+ return new Effect.Scale(element, window.opera ? 1 : 0, {
+ restoreAfterFinish: true,
+ beforeSetup: function(effect) {
+ effect.element.makeClipping();
+ },
+ afterFinishInternal: function(effect) {
+ effect.element.hide().undoClipping();
+ }
+ });
+};
+
+Effect.Grow = function(element) {
+ element = DOKUid(element);
+ var options = Object.extend({
+ direction: 'center',
+ moveTransition: Effect.Transitions.sinoidal,
+ scaleTransition: Effect.Transitions.sinoidal,
+ opacityTransition: Effect.Transitions.full
+ }, arguments[1] || { });
+ var oldStyle = {
+ top: element.style.top,
+ left: element.style.left,
+ height: element.style.height,
+ width: element.style.width,
+ opacity: element.getInlineOpacity() };
+
+ var dims = element.getDimensions();
+ var initialMoveX, initialMoveY;
+ var moveX, moveY;
+
+ switch (options.direction) {
+ case 'top-left':
+ initialMoveX = initialMoveY = moveX = moveY = 0;
+ break;
+ case 'top-right':
+ initialMoveX = dims.width;
+ initialMoveY = moveY = 0;
+ moveX = -dims.width;
+ break;
+ case 'bottom-left':
+ initialMoveX = moveX = 0;
+ initialMoveY = dims.height;
+ moveY = -dims.height;
+ break;
+ case 'bottom-right':
+ initialMoveX = dims.width;
+ initialMoveY = dims.height;
+ moveX = -dims.width;
+ moveY = -dims.height;
+ break;
+ case 'center':
+ initialMoveX = dims.width / 2;
+ initialMoveY = dims.height / 2;
+ moveX = -dims.width / 2;
+ moveY = -dims.height / 2;
+ break;
+ }
+
+ return new Effect.Move(element, {
+ x: initialMoveX,
+ y: initialMoveY,
+ duration: 0.01,
+ beforeSetup: function(effect) {
+ effect.element.hide().makeClipping().makePositioned();
+ },
+ afterFinishInternal: function(effect) {
+ new Effect.Parallel(
+ [ new Effect.Opacity(effect.element, { sync: true, to: 1.0, from: 0.0, transition: options.opacityTransition }),
+ new Effect.Move(effect.element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition }),
+ new Effect.Scale(effect.element, 100, {
+ scaleMode: { originalHeight: dims.height, originalWidth: dims.width },
+ sync: true, scaleFrom: window.opera ? 1 : 0, transition: options.scaleTransition, restoreAfterFinish: true})
+ ], Object.extend({
+ beforeSetup: function(effect) {
+ effect.effects[0].element.setStyle({height: '0px'}).show();
+ },
+ afterFinishInternal: function(effect) {
+ effect.effects[0].element.undoClipping().undoPositioned().setStyle(oldStyle);
+ }
+ }, options)
+ );
+ }
+ });
+};
+
+Effect.Shrink = function(element) {
+ element = DOKUid(element);
+ var options = Object.extend({
+ direction: 'center',
+ moveTransition: Effect.Transitions.sinoidal,
+ scaleTransition: Effect.Transitions.sinoidal,
+ opacityTransition: Effect.Transitions.none
+ }, arguments[1] || { });
+ var oldStyle = {
+ top: element.style.top,
+ left: element.style.left,
+ height: element.style.height,
+ width: element.style.width,
+ opacity: element.getInlineOpacity() };
+
+ var dims = element.getDimensions();
+ var moveX, moveY;
+
+ switch (options.direction) {
+ case 'top-left':
+ moveX = moveY = 0;
+ break;
+ case 'top-right':
+ moveX = dims.width;
+ moveY = 0;
+ break;
+ case 'bottom-left':
+ moveX = 0;
+ moveY = dims.height;
+ break;
+ case 'bottom-right':
+ moveX = dims.width;
+ moveY = dims.height;
+ break;
+ case 'center':
+ moveX = dims.width / 2;
+ moveY = dims.height / 2;
+ break;
+ }
+
+ return new Effect.Parallel(
+ [ new Effect.Opacity(element, { sync: true, to: 0.0, from: 1.0, transition: options.opacityTransition }),
+ new Effect.Scale(element, window.opera ? 1 : 0, { sync: true, transition: options.scaleTransition, restoreAfterFinish: true}),
+ new Effect.Move(element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition })
+ ], Object.extend({
+ beforeStartInternal: function(effect) {
+ effect.effects[0].element.makePositioned().makeClipping();
+ },
+ afterFinishInternal: function(effect) {
+ effect.effects[0].element.hide().undoClipping().undoPositioned().setStyle(oldStyle); }
+ }, options)
+ );
+};
+
+Effect.Pulsate = function(element) {
+ element = DOKUid(element);
+ var options = arguments[1] || { },
+ oldOpacity = element.getInlineOpacity(),
+ transition = options.transition || Effect.Transitions.linear,
+ reverser = function(pos){
+ return 1 - transition((-Math.cos((pos*(options.pulses||5)*2)*Math.PI)/2) + .5);
+ };
+
+ return new Effect.Opacity(element,
+ Object.extend(Object.extend({ duration: 2.0, from: 0,
+ afterFinishInternal: function(effect) { effect.element.setStyle({opacity: oldOpacity}); }
+ }, options), {transition: reverser}));
+};
+
+Effect.Fold = function(element) {
+ element = DOKUid(element);
+ var oldStyle = {
+ top: element.style.top,
+ left: element.style.left,
+ width: element.style.width,
+ height: element.style.height };
+ element.makeClipping();
+ return new Effect.Scale(element, 5, Object.extend({
+ scaleContent: false,
+ scaleX: false,
+ afterFinishInternal: function(effect) {
+ new Effect.Scale(element, 1, {
+ scaleContent: false,
+ scaleY: false,
+ afterFinishInternal: function(effect) {
+ effect.element.hide().undoClipping().setStyle(oldStyle);
+ } });
+ }}, arguments[1] || { }));
+};
+
+Effect.Morph = Class.create(Effect.Base, {
+ initialize: function(element) {
+ this.element = DOKUid(element);
+ if (!this.element) throw(Effect._elementDoesNotExistError);
+ var options = Object.extend({
+ style: { }
+ }, arguments[1] || { });
+
+ if (!Object.isString(options.style)) this.style = $H(options.style);
+ else {
+ if (options.style.include(':'))
+ this.style = options.style.parseStyle();
+ else {
+ this.element.addClassName(options.style);
+ this.style = $H(this.element.getStyles());
+ this.element.removeClassName(options.style);
+ var css = this.element.getStyles();
+ this.style = this.style.reject(function(style) {
+ return style.value == css[style.key];
+ });
+ options.afterFinishInternal = function(effect) {
+ effect.element.addClassName(effect.options.style);
+ effect.transforms.each(function(transform) {
+ effect.element.style[transform.style] = '';
+ });
+ };
+ }
+ }
+ this.start(options);
+ },
+
+ setup: function(){
+ function parseColor(color){
+ if (!color || ['rgba(0, 0, 0, 0)','transparent'].include(color)) color = '#ffffff';
+ color = color.parseColor();
+ return $R(0,2).map(function(i){
+ return parseInt( color.slice(i*2+1,i*2+3), 16 );
+ });
+ }
+ this.transforms = this.style.map(function(pair){
+ var property = pair[0], value = pair[1], unit = null;
+
+ if (value.parseColor('#zzzzzz') != '#zzzzzz') {
+ value = value.parseColor();
+ unit = 'color';
+ } else if (property == 'opacity') {
+ value = parseFloat(value);
+ if (Prototype.Browser.IE && (!this.element.currentStyle.hasLayout))
+ this.element.setStyle({zoom: 1});
+ } else if (Element.CSS_LENGTH.test(value)) {
+ var components = value.match(/^([\+\-]?[0-9\.]+)(.*)$/);
+ value = parseFloat(components[1]);
+ unit = (components.length == 3) ? components[2] : null;
+ }
+
+ var originalValue = this.element.getStyle(property);
+ return {
+ style: property.camelize(),
+ originalValue: unit=='color' ? parseColor(originalValue) : parseFloat(originalValue || 0),
+ targetValue: unit=='color' ? parseColor(value) : value,
+ unit: unit
+ };
+ }.bind(this)).reject(function(transform){
+ return (
+ (transform.originalValue == transform.targetValue) ||
+ (
+ transform.unit != 'color' &&
+ (isNaN(transform.originalValue) || isNaN(transform.targetValue))
+ )
+ );
+ });
+ },
+ update: function(position) {
+ var style = { }, transform, i = this.transforms.length;
+ while(i--)
+ style[(transform = this.transforms[i]).style] =
+ transform.unit=='color' ? '#'+
+ (Math.round(transform.originalValue[0]+
+ (transform.targetValue[0]-transform.originalValue[0])*position)).toColorPart() +
+ (Math.round(transform.originalValue[1]+
+ (transform.targetValue[1]-transform.originalValue[1])*position)).toColorPart() +
+ (Math.round(transform.originalValue[2]+
+ (transform.targetValue[2]-transform.originalValue[2])*position)).toColorPart() :
+ (transform.originalValue +
+ (transform.targetValue - transform.originalValue) * position).toFixed(3) +
+ (transform.unit === null ? '' : transform.unit);
+ this.element.setStyle(style, true);
+ }
+});
+
+Effect.Transform = Class.create({
+ initialize: function(tracks){
+ this.tracks = [];
+ this.options = arguments[1] || { };
+ this.addTracks(tracks);
+ },
+ addTracks: function(tracks){
+ tracks.each(function(track){
+ track = $H(track);
+ var data = track.values().first();
+ this.tracks.push($H({
+ ids: track.keys().first(),
+ effect: Effect.Morph,
+ options: { style: data }
+ }));
+ }.bind(this));
+ return this;
+ },
+ play: function(){
+ return new Effect.Parallel(
+ this.tracks.map(function(track){
+ var ids = track.get('ids'), effect = track.get('effect'), options = track.get('options');
+ var elements = [DOKUid(ids) || $$(ids)].flatten();
+ return elements.map(function(e){ return new effect(e, Object.extend({ sync:true }, options)) });
+ }).flatten(),
+ this.options
+ );
+ }
+});
+
+Element.CSS_PROPERTIES = $w(
+ 'backgroundColor backgroundPosition borderBottomColor borderBottomStyle ' +
+ 'borderBottomWidth borderLeftColor borderLeftStyle borderLeftWidth ' +
+ 'borderRightColor borderRightStyle borderRightWidth borderSpacing ' +
+ 'borderTopColor borderTopStyle borderTopWidth bottom clip color ' +
+ 'fontSize fontWeight height left letterSpacing lineHeight ' +
+ 'marginBottom marginLeft marginRight marginTop markerOffset maxHeight '+
+ 'maxWidth minHeight minWidth opacity outlineColor outlineOffset ' +
+ 'outlineWidth paddingBottom paddingLeft paddingRight paddingTop ' +
+ 'right textIndent top width wordSpacing zIndex');
+
+Element.CSS_LENGTH = /^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/;
+
+String.__parseStyleElement = document.createElement('div');
+String.prototype.parseStyle = function(){
+ var style, styleRules = $H();
+ if (Prototype.Browser.WebKit)
+ style = new Element('div',{style:this}).style;
+ else {
+ String.__parseStyleElement.innerHTML = '<div style="' + this + '"></div>';
+ style = String.__parseStyleElement.childNodes[0].style;
+ }
+
+ Element.CSS_PROPERTIES.each(function(property){
+ if (style[property]) styleRules.set(property, style[property]);
+ });
+
+ if (Prototype.Browser.IE && this.include('opacity'))
+ styleRules.set('opacity', this.match(/opacity:\s*((?:0|1)?(?:\.\d*)?)/)[1]);
+
+ return styleRules;
+};
+
+if (document.defaultView && document.defaultView.getComputedStyle) {
+ Element.getStyles = function(element) {
+ var css = document.defaultView.getComputedStyle(DOKUid(element), null);
+ return Element.CSS_PROPERTIES.inject({ }, function(styles, property) {
+ styles[property] = css[property];
+ return styles;
+ });
+ };
+} else {
+ Element.getStyles = function(element) {
+ element = DOKUid(element);
+ var css = element.currentStyle, styles;
+ styles = Element.CSS_PROPERTIES.inject({ }, function(results, property) {
+ results[property] = css[property];
+ return results;
+ });
+ if (!styles.opacity) styles.opacity = element.getOpacity();
+ return styles;
+ };
+}
+
+Effect.Methods = {
+ morph: function(element, style) {
+ element = DOKUid(element);
+ new Effect.Morph(element, Object.extend({ style: style }, arguments[2] || { }));
+ return element;
+ },
+ visualEffect: function(element, effect, options) {
+ element = DOKUid(element);
+ var s = effect.dasherize().camelize(), klass = s.charAt(0).toUpperCase() + s.substring(1);
+ new Effect[klass](element, options);
+ return element;
+ },
+ highlight: function(element, options) {
+ element = DOKUid(element);
+ new Effect.Highlight(element, options);
+ return element;
+ }
+};
+
+$w('fade appear grow shrink fold blindUp blindDown slideUp slideDown '+
+ 'pulsate shake puff squish switchOff dropOut').each(
+ function(effect) {
+ Effect.Methods[effect] = function(element, options){
+ element = DOKUid(element);
+ Effect[effect.charAt(0).toUpperCase() + effect.substring(1)](element, options);
+ return element;
+ };
+ }
+);
+
+$w('getInlineOpacity forceRerendering setContentZoom collectTextNodes collectTextNodesIgnoreClass getStyles').each(
+ function(f) { Effect.Methods[f] = Element[f]; }
+);
+
+Element.addMethods(Effect.Methods);
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/presentacular.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/presentacular.js
new file mode 100755
index 000000000..d6ec5cd63
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/presentacular.js
@@ -0,0 +1,153 @@
+/*
+Presentacular. v 0.1
+http://labs.cavorite.com/presentacular/
+(c) 2005, Juan Manuel Caicedo
+
+This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
+
+See http://www.gnu.org/copyleft/gpl.html for more information
+
+*/
+
+/*
+Creates a chain function.
+
+Todo:
+ Handle return values
+ Add a chained property with a reference to the original function
+
+Static method
+*/
+Function.chain = function(from,ext){
+ return function() {
+ from.apply(this,arguments)
+ ext.apply(this,arguments)
+ }
+}
+
+/*
+Creates a chained function
+Instance method
+*/
+Function.prototype.chain = function(){
+ var __source = this
+ var exts = arguments
+ return function(){
+ __source.apply(this,arguments)
+ for (e = 0; e < exts.length; e++){
+ exts[e].apply(this,arguments)
+ }
+ }
+}
+
+/*
+Applies function f to each element of the list
+*/
+function Map(list,f){
+ var r = []
+ for (var i=0; i < list.length; i++){
+ r.push(f.call(this,list[i]))
+ }
+ return r
+}
+
+
+
+var Presentacular = {}
+
+/*
+Available effects
+TODO: Provide a function to add effects
+*/
+Presentacular.effects = {
+ blinddown: Effect.BlindDown,
+ blindup: Effect.BlindUp,
+ appear: Effect.Appear,
+ puff: Effect.Puff,
+ shake: Effect.Shake,
+ pulsate: Effect.Pulsate,
+ slidedown: Effect.SlideDown,
+ slideup: Effect.SlideUp,
+ highlight: Effect.Highlight,
+ grow: Effect.Grow,
+ fade: Effect.Fade,
+ fold: Effect.Fold,
+ shrink: Effect.Shrink,
+ dropout: Effect.DropOut,
+ switchoff: Effect.SwitchOff,
+ squish: Effect.Squish
+}
+
+/*
+Apply effects to element elm.
+
+parentClasses: If true, include effects defined in the parent element. Used for lists (ul, ol)
+
+*/
+Presentacular.applyEffects = function(elm,parentClasses){
+
+ var c = []
+ if (parentClasses && elm.className)
+ try {
+ c = c.concat(elm.parentNode.className.split(' '))
+ c = c.concat(elm.className.split(' '))
+ } catch (exc) {
+ return;
+ }
+ Map(c, function(cl){
+ if (!cl) return
+
+
+ //Proof of concept. this code could (and should) be more elegant
+ cl = cl.toLowerCase().split('_')
+
+ var opts = {duration: 1}
+ if (cl.length > 1){
+ opts.duration = cl[1]
+ }
+
+ if (Presentacular.effects[cl[0]]){
+ Presentacular.effects[cl[0]].call(this,elm,opts)
+ }
+ return
+ })
+}
+
+
+/*
+Chained function
+*/
+function ChangeSlide(step){
+
+ var ce = DOKUid('slide' + snum)
+
+ //Apply slide effects
+ Presentacular.applyEffects(ce)
+
+ //Apply effects to all elements but the incrementals
+ Map(ce.getElementsByTagName('*'), function(elm){
+ if (!hasClass(elm,"incremental")){
+ Presentacular.applyEffects(elm)
+ }
+ })
+}
+
+
+/*
+Chained function
+*/
+function ApplyCurrentElement(elm,className){
+ if (className == "current"){
+ Presentacular.applyEffects(elm,true)
+ }
+}
+
+/*
+Function chaining: execute the second function after the first one has finished
+
+This was necesary in order to keep the same function names and because I want
+to *extend* S5 instead of *edit* it.
+
+*/
+window.addClass = addClass.chain(ApplyCurrentElement)
+window.go = go.chain(ChangeSlide)
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/prototype.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/prototype.js
new file mode 100644
index 000000000..f100f84a7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/prototype.js
@@ -0,0 +1,4874 @@
+/* Prototype JavaScript framework, version 1.6.1
+ * (c) 2005-2009 Sam Stephenson
+ *
+ * Prototype is freely distributable under the terms of an MIT-style license.
+ * For details, see the Prototype web site: http://www.prototypejs.org/
+ *
+ *--------------------------------------------------------------------------*/
+
+var Prototype = {
+ Version: '1.6.1',
+
+ Browser: (function(){
+ var ua = navigator.userAgent;
+ var isOpera = Object.prototype.toString.call(window.opera) == '[object Opera]';
+ return {
+ IE: !!window.attachEvent && !isOpera,
+ Opera: isOpera,
+ WebKit: ua.indexOf('AppleWebKit/') > -1,
+ Gecko: ua.indexOf('Gecko') > -1 && ua.indexOf('KHTML') === -1,
+ MobileSafari: /Apple.*Mobile.*Safari/.test(ua)
+ }
+ })(),
+
+ BrowserFeatures: {
+ XPath: !!document.evaluate,
+ SelectorsAPI: !!document.querySelector,
+ ElementExtensions: (function() {
+ var constructor = window.Element || window.HTMLElement;
+ return !!(constructor && constructor.prototype);
+ })(),
+ SpecificElementExtensions: (function() {
+ if (typeof window.HTMLDivElement !== 'undefined')
+ return true;
+
+ var div = document.createElement('div');
+ var form = document.createElement('form');
+ var isSupported = false;
+
+ if (div['__proto__'] && (div['__proto__'] !== form['__proto__'])) {
+ isSupported = true;
+ }
+
+ div = form = null;
+
+ return isSupported;
+ })()
+ },
+
+ ScriptFragment: '<script[^>]*>([\\S\\s]*?)<\/script>',
+ JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/,
+
+ emptyFunction: function() { },
+ K: function(x) { return x }
+};
+
+if (Prototype.Browser.MobileSafari)
+ Prototype.BrowserFeatures.SpecificElementExtensions = false;
+
+
+var Abstract = { };
+
+
+var Try = {
+ these: function() {
+ var returnValue;
+
+ for (var i = 0, length = arguments.length; i < length; i++) {
+ var lambda = arguments[i];
+ try {
+ returnValue = lambda();
+ break;
+ } catch (e) { }
+ }
+
+ return returnValue;
+ }
+};
+
+/* Based on Alex Arnell's inheritance implementation. */
+
+var Class = (function() {
+ function subclass() {};
+ function create() {
+ var parent = null, properties = $A(arguments);
+ if (Object.isFunction(properties[0]))
+ parent = properties.shift();
+
+ function klass() {
+ this.initialize.apply(this, arguments);
+ }
+
+ Object.extend(klass, Class.Methods);
+ klass.superclass = parent;
+ klass.subclasses = [];
+
+ if (parent) {
+ subclass.prototype = parent.prototype;
+ klass.prototype = new subclass;
+ parent.subclasses.push(klass);
+ }
+
+ for (var i = 0; i < properties.length; i++)
+ klass.addMethods(properties[i]);
+
+ if (!klass.prototype.initialize)
+ klass.prototype.initialize = Prototype.emptyFunction;
+
+ klass.prototype.constructor = klass;
+ return klass;
+ }
+
+ function addMethods(source) {
+ var ancestor = this.superclass && this.superclass.prototype;
+ var properties = Object.keys(source);
+
+ if (!Object.keys({ toString: true }).length) {
+ if (source.toString != Object.prototype.toString)
+ properties.push("toString");
+ if (source.valueOf != Object.prototype.valueOf)
+ properties.push("valueOf");
+ }
+
+ for (var i = 0, length = properties.length; i < length; i++) {
+ var property = properties[i], value = source[property];
+ if (ancestor && Object.isFunction(value) &&
+ value.argumentNames().first() == "$super") {
+ var method = value;
+ value = (function(m) {
+ return function() { return ancestor[m].apply(this, arguments); };
+ })(property).wrap(method);
+
+ value.valueOf = method.valueOf.bind(method);
+ value.toString = method.toString.bind(method);
+ }
+ this.prototype[property] = value;
+ }
+
+ return this;
+ }
+
+ return {
+ create: create,
+ Methods: {
+ addMethods: addMethods
+ }
+ };
+})();
+(function() {
+
+ var _toString = Object.prototype.toString;
+
+ function extend(destination, source) {
+ for (var property in source)
+ destination[property] = source[property];
+ return destination;
+ }
+
+ function inspect(object) {
+ try {
+ if (isUndefined(object)) return 'undefined';
+ if (object === null) return 'null';
+ return object.inspect ? object.inspect() : String(object);
+ } catch (e) {
+ if (e instanceof RangeError) return '...';
+ throw e;
+ }
+ }
+
+ function toJSON(object) {
+ var type = typeof object;
+ switch (type) {
+ case 'undefined':
+ case 'function':
+ case 'unknown': return;
+ case 'boolean': return object.toString();
+ }
+
+ if (object === null) return 'null';
+ if (object.toJSON) return object.toJSON();
+ if (isElement(object)) return;
+
+ var results = [];
+ for (var property in object) {
+ var value = toJSON(object[property]);
+ if (!isUndefined(value))
+ results.push(property.toJSON() + ': ' + value);
+ }
+
+ return '{' + results.join(', ') + '}';
+ }
+
+ function toQueryString(object) {
+ return $H(object).toQueryString();
+ }
+
+ function toHTML(object) {
+ return object && object.toHTML ? object.toHTML() : String.interpret(object);
+ }
+
+ function keys(object) {
+ var results = [];
+ for (var property in object)
+ results.push(property);
+ return results;
+ }
+
+ function values(object) {
+ var results = [];
+ for (var property in object)
+ results.push(object[property]);
+ return results;
+ }
+
+ function clone(object) {
+ return extend({ }, object);
+ }
+
+ function isElement(object) {
+ return !!(object && object.nodeType == 1);
+ }
+
+ function isArray(object) {
+ return _toString.call(object) == "[object Array]";
+ }
+
+
+ function isHash(object) {
+ return object instanceof Hash;
+ }
+
+ function isFunction(object) {
+ return typeof object === "function";
+ }
+
+ function isString(object) {
+ return _toString.call(object) == "[object String]";
+ }
+
+ function isNumber(object) {
+ return _toString.call(object) == "[object Number]";
+ }
+
+ function isUndefined(object) {
+ return typeof object === "undefined";
+ }
+
+ extend(Object, {
+ extend: extend,
+ inspect: inspect,
+ toJSON: toJSON,
+ toQueryString: toQueryString,
+ toHTML: toHTML,
+ keys: keys,
+ values: values,
+ clone: clone,
+ isElement: isElement,
+ isArray: isArray,
+ isHash: isHash,
+ isFunction: isFunction,
+ isString: isString,
+ isNumber: isNumber,
+ isUndefined: isUndefined
+ });
+})();
+Object.extend(Function.prototype, (function() {
+ var slice = Array.prototype.slice;
+
+ function update(array, args) {
+ var arrayLength = array.length, length = args.length;
+ while (length--) array[arrayLength + length] = args[length];
+ return array;
+ }
+
+ function merge(array, args) {
+ array = slice.call(array, 0);
+ return update(array, args);
+ }
+
+ function argumentNames() {
+ var names = this.toString().match(/^[\s\(]*function[^(]*\(([^)]*)\)/)[1]
+ .replace(/\/\/.*?[\r\n]|\/\*(?:.|[\r\n])*?\*\//g, '')
+ .replace(/\s+/g, '').split(',');
+ return names.length == 1 && !names[0] ? [] : names;
+ }
+
+ function bind(context) {
+ if (arguments.length < 2 && Object.isUndefined(arguments[0])) return this;
+ var __method = this, args = slice.call(arguments, 1);
+ return function() {
+ var a = merge(args, arguments);
+ return __method.apply(context, a);
+ }
+ }
+
+ function bindAsEventListener(context) {
+ var __method = this, args = slice.call(arguments, 1);
+ return function(event) {
+ var a = update([event || window.event], args);
+ return __method.apply(context, a);
+ }
+ }
+
+ function curry() {
+ if (!arguments.length) return this;
+ var __method = this, args = slice.call(arguments, 0);
+ return function() {
+ var a = merge(args, arguments);
+ return __method.apply(this, a);
+ }
+ }
+
+ function delay(timeout) {
+ var __method = this, args = slice.call(arguments, 1);
+ timeout = timeout * 1000
+ return window.setTimeout(function() {
+ return __method.apply(__method, args);
+ }, timeout);
+ }
+
+ function defer() {
+ var args = update([0.01], arguments);
+ return this.delay.apply(this, args);
+ }
+
+ function wrap(wrapper) {
+ var __method = this;
+ return function() {
+ var a = update([__method.bind(this)], arguments);
+ return wrapper.apply(this, a);
+ }
+ }
+
+ function methodize() {
+ if (this._methodized) return this._methodized;
+ var __method = this;
+ return this._methodized = function() {
+ var a = update([this], arguments);
+ return __method.apply(null, a);
+ };
+ }
+
+ return {
+ argumentNames: argumentNames,
+ bind: bind,
+ bindAsEventListener: bindAsEventListener,
+ curry: curry,
+ delay: delay,
+ defer: defer,
+ wrap: wrap,
+ methodize: methodize
+ }
+})());
+
+
+Date.prototype.toJSON = function() {
+ return '"' + this.getUTCFullYear() + '-' +
+ (this.getUTCMonth() + 1).toPaddedString(2) + '-' +
+ this.getUTCDate().toPaddedString(2) + 'T' +
+ this.getUTCHours().toPaddedString(2) + ':' +
+ this.getUTCMinutes().toPaddedString(2) + ':' +
+ this.getUTCSeconds().toPaddedString(2) + 'Z"';
+};
+
+
+RegExp.prototype.match = RegExp.prototype.test;
+
+RegExp.escape = function(str) {
+ return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1');
+};
+var PeriodicalExecuter = Class.create({
+ initialize: function(callback, frequency) {
+ this.callback = callback;
+ this.frequency = frequency;
+ this.currentlyExecuting = false;
+
+ this.registerCallback();
+ },
+
+ registerCallback: function() {
+ this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
+ },
+
+ execute: function() {
+ this.callback(this);
+ },
+
+ stop: function() {
+ if (!this.timer) return;
+ clearInterval(this.timer);
+ this.timer = null;
+ },
+
+ onTimerEvent: function() {
+ if (!this.currentlyExecuting) {
+ try {
+ this.currentlyExecuting = true;
+ this.execute();
+ this.currentlyExecuting = false;
+ } catch(e) {
+ this.currentlyExecuting = false;
+ throw e;
+ }
+ }
+ }
+});
+Object.extend(String, {
+ interpret: function(value) {
+ return value == null ? '' : String(value);
+ },
+ specialChar: {
+ '\b': '\\b',
+ '\t': '\\t',
+ '\n': '\\n',
+ '\f': '\\f',
+ '\r': '\\r',
+ '\\': '\\\\'
+ }
+});
+
+Object.extend(String.prototype, (function() {
+
+ function prepareReplacement(replacement) {
+ if (Object.isFunction(replacement)) return replacement;
+ var template = new Template(replacement);
+ return function(match) { return template.evaluate(match) };
+ }
+
+ function gsub(pattern, replacement) {
+ var result = '', source = this, match;
+ replacement = prepareReplacement(replacement);
+
+ if (Object.isString(pattern))
+ pattern = RegExp.escape(pattern);
+
+ if (!(pattern.length || pattern.source)) {
+ replacement = replacement('');
+ return replacement + source.split('').join(replacement) + replacement;
+ }
+
+ while (source.length > 0) {
+ if (match = source.match(pattern)) {
+ result += source.slice(0, match.index);
+ result += String.interpret(replacement(match));
+ source = source.slice(match.index + match[0].length);
+ } else {
+ result += source, source = '';
+ }
+ }
+ return result;
+ }
+
+ function sub(pattern, replacement, count) {
+ replacement = prepareReplacement(replacement);
+ count = Object.isUndefined(count) ? 1 : count;
+
+ return this.gsub(pattern, function(match) {
+ if (--count < 0) return match[0];
+ return replacement(match);
+ });
+ }
+
+ function scan(pattern, iterator) {
+ this.gsub(pattern, iterator);
+ return String(this);
+ }
+
+ function truncate(length, truncation) {
+ length = length || 30;
+ truncation = Object.isUndefined(truncation) ? '...' : truncation;
+ return this.length > length ?
+ this.slice(0, length - truncation.length) + truncation : String(this);
+ }
+
+ function strip() {
+ return this.replace(/^\s+/, '').replace(/\s+$/, '');
+ }
+
+ function stripTags() {
+ return this.replace(/<\w+(\s+("[^"]*"|'[^']*'|[^>])+)?>|<\/\w+>/gi, '');
+ }
+
+ function stripScripts() {
+ return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');
+ }
+
+ function extractScripts() {
+ var matchAll = new RegExp(Prototype.ScriptFragment, 'img');
+ var matchOne = new RegExp(Prototype.ScriptFragment, 'im');
+ return (this.match(matchAll) || []).map(function(scriptTag) {
+ return (scriptTag.match(matchOne) || ['', ''])[1];
+ });
+ }
+
+ function evalScripts() {
+ return this.extractScripts().map(function(script) { return eval(script) });
+ }
+
+ function escapeHTML() {
+ return this.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');
+ }
+
+ function unescapeHTML() {
+ return this.stripTags().replace(/&lt;/g,'<').replace(/&gt;/g,'>').replace(/&amp;/g,'&');
+ }
+
+
+ function toQueryParams(separator) {
+ var match = this.strip().match(/([^?#]*)(#.*)?$/);
+ if (!match) return { };
+
+ return match[1].split(separator || '&').inject({ }, function(hash, pair) {
+ if ((pair = pair.split('='))[0]) {
+ var key = decodeURIComponent(pair.shift());
+ var value = pair.length > 1 ? pair.join('=') : pair[0];
+ if (value != undefined) value = decodeURIComponent(value);
+
+ if (key in hash) {
+ if (!Object.isArray(hash[key])) hash[key] = [hash[key]];
+ hash[key].push(value);
+ }
+ else hash[key] = value;
+ }
+ return hash;
+ });
+ }
+
+ function toArray() {
+ return this.split('');
+ }
+
+ function succ() {
+ return this.slice(0, this.length - 1) +
+ String.fromCharCode(this.charCodeAt(this.length - 1) + 1);
+ }
+
+ function times(count) {
+ return count < 1 ? '' : new Array(count + 1).join(this);
+ }
+
+ function camelize() {
+ var parts = this.split('-'), len = parts.length;
+ if (len == 1) return parts[0];
+
+ var camelized = this.charAt(0) == '-'
+ ? parts[0].charAt(0).toUpperCase() + parts[0].substring(1)
+ : parts[0];
+
+ for (var i = 1; i < len; i++)
+ camelized += parts[i].charAt(0).toUpperCase() + parts[i].substring(1);
+
+ return camelized;
+ }
+
+ function capitalize() {
+ return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase();
+ }
+
+ function underscore() {
+ return this.replace(/::/g, '/')
+ .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2')
+ .replace(/([a-z\d])([A-Z])/g, '$1_$2')
+ .replace(/-/g, '_')
+ .toLowerCase();
+ }
+
+ function dasherize() {
+ return this.replace(/_/g, '-');
+ }
+
+ function inspect(useDoubleQuotes) {
+ var escapedString = this.replace(/[\x00-\x1f\\]/g, function(character) {
+ if (character in String.specialChar) {
+ return String.specialChar[character];
+ }
+ return '\\u00' + character.charCodeAt().toPaddedString(2, 16);
+ });
+ if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') + '"';
+ return "'" + escapedString.replace(/'/g, '\\\'') + "'";
+ }
+
+ function toJSON() {
+ return this.inspect(true);
+ }
+
+ function unfilterJSON(filter) {
+ return this.replace(filter || Prototype.JSONFilter, '$1');
+ }
+
+ function isJSON() {
+ var str = this;
+ if (str.blank()) return false;
+ str = this.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, '');
+ return (/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str);
+ }
+
+ function evalJSON(sanitize) {
+ var json = this.unfilterJSON();
+ try {
+ if (!sanitize || json.isJSON()) return eval('(' + json + ')');
+ } catch (e) { }
+ throw new SyntaxError('Badly formed JSON string: ' + this.inspect());
+ }
+
+ function include(pattern) {
+ return this.indexOf(pattern) > -1;
+ }
+
+ function startsWith(pattern) {
+ return this.indexOf(pattern) === 0;
+ }
+
+ function endsWith(pattern) {
+ var d = this.length - pattern.length;
+ return d >= 0 && this.lastIndexOf(pattern) === d;
+ }
+
+ function empty() {
+ return this == '';
+ }
+
+ function blank() {
+ return /^\s*$/.test(this);
+ }
+
+ function interpolate(object, pattern) {
+ return new Template(this, pattern).evaluate(object);
+ }
+
+ return {
+ gsub: gsub,
+ sub: sub,
+ scan: scan,
+ truncate: truncate,
+ strip: String.prototype.trim ? String.prototype.trim : strip,
+ stripTags: stripTags,
+ stripScripts: stripScripts,
+ extractScripts: extractScripts,
+ evalScripts: evalScripts,
+ escapeHTML: escapeHTML,
+ unescapeHTML: unescapeHTML,
+ toQueryParams: toQueryParams,
+ parseQuery: toQueryParams,
+ toArray: toArray,
+ succ: succ,
+ times: times,
+ camelize: camelize,
+ capitalize: capitalize,
+ underscore: underscore,
+ dasherize: dasherize,
+ inspect: inspect,
+ toJSON: toJSON,
+ unfilterJSON: unfilterJSON,
+ isJSON: isJSON,
+ evalJSON: evalJSON,
+ include: include,
+ startsWith: startsWith,
+ endsWith: endsWith,
+ empty: empty,
+ blank: blank,
+ interpolate: interpolate
+ };
+})());
+
+var Template = Class.create({
+ initialize: function(template, pattern) {
+ this.template = template.toString();
+ this.pattern = pattern || Template.Pattern;
+ },
+
+ evaluate: function(object) {
+ if (object && Object.isFunction(object.toTemplateReplacements))
+ object = object.toTemplateReplacements();
+
+ return this.template.gsub(this.pattern, function(match) {
+ if (object == null) return (match[1] + '');
+
+ var before = match[1] || '';
+ if (before == '\\') return match[2];
+
+ var ctx = object, expr = match[3];
+ var pattern = /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/;
+ match = pattern.exec(expr);
+ if (match == null) return before;
+
+ while (match != null) {
+ var comp = match[1].startsWith('[') ? match[2].replace(/\\\\]/g, ']') : match[1];
+ ctx = ctx[comp];
+ if (null == ctx || '' == match[3]) break;
+ expr = expr.substring('[' == match[3] ? match[1].length : match[0].length);
+ match = pattern.exec(expr);
+ }
+
+ return before + String.interpret(ctx);
+ });
+ }
+});
+Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/;
+
+var $break = { };
+
+var Enumerable = (function() {
+ function each(iterator, context) {
+ var index = 0;
+ try {
+ this._each(function(value) {
+ iterator.call(context, value, index++);
+ });
+ } catch (e) {
+ if (e != $break) throw e;
+ }
+ return this;
+ }
+
+ function eachSlice(number, iterator, context) {
+ var index = -number, slices = [], array = this.toArray();
+ if (number < 1) return array;
+ while ((index += number) < array.length)
+ slices.push(array.slice(index, index+number));
+ return slices.collect(iterator, context);
+ }
+
+ function all(iterator, context) {
+ iterator = iterator || Prototype.K;
+ var result = true;
+ this.each(function(value, index) {
+ result = result && !!iterator.call(context, value, index);
+ if (!result) throw $break;
+ });
+ return result;
+ }
+
+ function any(iterator, context) {
+ iterator = iterator || Prototype.K;
+ var result = false;
+ this.each(function(value, index) {
+ if (result = !!iterator.call(context, value, index))
+ throw $break;
+ });
+ return result;
+ }
+
+ function collect(iterator, context) {
+ iterator = iterator || Prototype.K;
+ var results = [];
+ this.each(function(value, index) {
+ results.push(iterator.call(context, value, index));
+ });
+ return results;
+ }
+
+ function detect(iterator, context) {
+ var result;
+ this.each(function(value, index) {
+ if (iterator.call(context, value, index)) {
+ result = value;
+ throw $break;
+ }
+ });
+ return result;
+ }
+
+ function findAll(iterator, context) {
+ var results = [];
+ this.each(function(value, index) {
+ if (iterator.call(context, value, index))
+ results.push(value);
+ });
+ return results;
+ }
+
+ function grep(filter, iterator, context) {
+ iterator = iterator || Prototype.K;
+ var results = [];
+
+ if (Object.isString(filter))
+ filter = new RegExp(RegExp.escape(filter));
+
+ this.each(function(value, index) {
+ if (filter.match(value))
+ results.push(iterator.call(context, value, index));
+ });
+ return results;
+ }
+
+ function include(object) {
+ if (Object.isFunction(this.indexOf))
+ if (this.indexOf(object) != -1) return true;
+
+ var found = false;
+ this.each(function(value) {
+ if (value == object) {
+ found = true;
+ throw $break;
+ }
+ });
+ return found;
+ }
+
+ function inGroupsOf(number, fillWith) {
+ fillWith = Object.isUndefined(fillWith) ? null : fillWith;
+ return this.eachSlice(number, function(slice) {
+ while(slice.length < number) slice.push(fillWith);
+ return slice;
+ });
+ }
+
+ function inject(memo, iterator, context) {
+ this.each(function(value, index) {
+ memo = iterator.call(context, memo, value, index);
+ });
+ return memo;
+ }
+
+ function invoke(method) {
+ var args = $A(arguments).slice(1);
+ return this.map(function(value) {
+ return value[method].apply(value, args);
+ });
+ }
+
+ function max(iterator, context) {
+ iterator = iterator || Prototype.K;
+ var result;
+ this.each(function(value, index) {
+ value = iterator.call(context, value, index);
+ if (result == null || value >= result)
+ result = value;
+ });
+ return result;
+ }
+
+ function min(iterator, context) {
+ iterator = iterator || Prototype.K;
+ var result;
+ this.each(function(value, index) {
+ value = iterator.call(context, value, index);
+ if (result == null || value < result)
+ result = value;
+ });
+ return result;
+ }
+
+ function partition(iterator, context) {
+ iterator = iterator || Prototype.K;
+ var trues = [], falses = [];
+ this.each(function(value, index) {
+ (iterator.call(context, value, index) ?
+ trues : falses).push(value);
+ });
+ return [trues, falses];
+ }
+
+ function pluck(property) {
+ var results = [];
+ this.each(function(value) {
+ results.push(value[property]);
+ });
+ return results;
+ }
+
+ function reject(iterator, context) {
+ var results = [];
+ this.each(function(value, index) {
+ if (!iterator.call(context, value, index))
+ results.push(value);
+ });
+ return results;
+ }
+
+ function sortBy(iterator, context) {
+ return this.map(function(value, index) {
+ return {
+ value: value,
+ criteria: iterator.call(context, value, index)
+ };
+ }).sort(function(left, right) {
+ var a = left.criteria, b = right.criteria;
+ return a < b ? -1 : a > b ? 1 : 0;
+ }).pluck('value');
+ }
+
+ function toArray() {
+ return this.map();
+ }
+
+ function zip() {
+ var iterator = Prototype.K, args = $A(arguments);
+ if (Object.isFunction(args.last()))
+ iterator = args.pop();
+
+ var collections = [this].concat(args).map($A);
+ return this.map(function(value, index) {
+ return iterator(collections.pluck(index));
+ });
+ }
+
+ function size() {
+ return this.toArray().length;
+ }
+
+ function inspect() {
+ return '#<Enumerable:' + this.toArray().inspect() + '>';
+ }
+
+
+
+
+
+
+
+
+
+ return {
+ each: each,
+ eachSlice: eachSlice,
+ all: all,
+ every: all,
+ any: any,
+ some: any,
+ collect: collect,
+ map: collect,
+ detect: detect,
+ findAll: findAll,
+ select: findAll,
+ filter: findAll,
+ grep: grep,
+ include: include,
+ member: include,
+ inGroupsOf: inGroupsOf,
+ inject: inject,
+ invoke: invoke,
+ max: max,
+ min: min,
+ partition: partition,
+ pluck: pluck,
+ reject: reject,
+ sortBy: sortBy,
+ toArray: toArray,
+ entries: toArray,
+ zip: zip,
+ size: size,
+ inspect: inspect,
+ find: detect
+ };
+})();
+function $A(iterable) {
+ if (!iterable) return [];
+ if ('toArray' in Object(iterable)) return iterable.toArray();
+ var length = iterable.length || 0, results = new Array(length);
+ while (length--) results[length] = iterable[length];
+ return results;
+}
+
+function $w(string) {
+ if (!Object.isString(string)) return [];
+ string = string.strip();
+ return string ? string.split(/\s+/) : [];
+}
+
+Array.from = $A;
+
+
+(function() {
+ var arrayProto = Array.prototype,
+ slice = arrayProto.slice,
+ _each = arrayProto.forEach; // use native browser JS 1.6 implementation if available
+
+ function each(iterator) {
+ for (var i = 0, length = this.length; i < length; i++)
+ iterator(this[i]);
+ }
+ if (!_each) _each = each;
+
+ function clear() {
+ this.length = 0;
+ return this;
+ }
+
+ function first() {
+ return this[0];
+ }
+
+ function last() {
+ return this[this.length - 1];
+ }
+
+ function compact() {
+ return this.select(function(value) {
+ return value != null;
+ });
+ }
+
+ function flatten() {
+ return this.inject([], function(array, value) {
+ if (Object.isArray(value))
+ return array.concat(value.flatten());
+ array.push(value);
+ return array;
+ });
+ }
+
+ function without() {
+ var values = slice.call(arguments, 0);
+ return this.select(function(value) {
+ return !values.include(value);
+ });
+ }
+
+ function reverse(inline) {
+ return (inline !== false ? this : this.toArray())._reverse();
+ }
+
+ function uniq(sorted) {
+ return this.inject([], function(array, value, index) {
+ if (0 == index || (sorted ? array.last() != value : !array.include(value)))
+ array.push(value);
+ return array;
+ });
+ }
+
+ function intersect(array) {
+ return this.uniq().findAll(function(item) {
+ return array.detect(function(value) { return item === value });
+ });
+ }
+
+
+ function clone() {
+ return slice.call(this, 0);
+ }
+
+ function size() {
+ return this.length;
+ }
+
+ function inspect() {
+ return '[' + this.map(Object.inspect).join(', ') + ']';
+ }
+
+ function toJSON() {
+ var results = [];
+ this.each(function(object) {
+ var value = Object.toJSON(object);
+ if (!Object.isUndefined(value)) results.push(value);
+ });
+ return '[' + results.join(', ') + ']';
+ }
+
+ function indexOf(item, i) {
+ i || (i = 0);
+ var length = this.length;
+ if (i < 0) i = length + i;
+ for (; i < length; i++)
+ if (this[i] === item) return i;
+ return -1;
+ }
+
+ function lastIndexOf(item, i) {
+ i = isNaN(i) ? this.length : (i < 0 ? this.length + i : i) + 1;
+ var n = this.slice(0, i).reverse().indexOf(item);
+ return (n < 0) ? n : i - n - 1;
+ }
+
+ function concat() {
+ var array = slice.call(this, 0), item;
+ for (var i = 0, length = arguments.length; i < length; i++) {
+ item = arguments[i];
+ if (Object.isArray(item) && !('callee' in item)) {
+ for (var j = 0, arrayLength = item.length; j < arrayLength; j++)
+ array.push(item[j]);
+ } else {
+ array.push(item);
+ }
+ }
+ return array;
+ }
+
+ Object.extend(arrayProto, Enumerable);
+
+ if (!arrayProto._reverse)
+ arrayProto._reverse = arrayProto.reverse;
+
+ Object.extend(arrayProto, {
+ _each: _each,
+ clear: clear,
+ first: first,
+ last: last,
+ compact: compact,
+ flatten: flatten,
+ without: without,
+ reverse: reverse,
+ uniq: uniq,
+ intersect: intersect,
+ clone: clone,
+ toArray: clone,
+ size: size,
+ inspect: inspect,
+ toJSON: toJSON
+ });
+
+ var CONCAT_ARGUMENTS_BUGGY = (function() {
+ return [].concat(arguments)[0][0] !== 1;
+ })(1,2)
+
+ if (CONCAT_ARGUMENTS_BUGGY) arrayProto.concat = concat;
+
+ if (!arrayProto.indexOf) arrayProto.indexOf = indexOf;
+ if (!arrayProto.lastIndexOf) arrayProto.lastIndexOf = lastIndexOf;
+})();
+function $H(object) {
+ return new Hash(object);
+};
+
+var Hash = Class.create(Enumerable, (function() {
+ function initialize(object) {
+ this._object = Object.isHash(object) ? object.toObject() : Object.clone(object);
+ }
+
+ function _each(iterator) {
+ for (var key in this._object) {
+ var value = this._object[key], pair = [key, value];
+ pair.key = key;
+ pair.value = value;
+ iterator(pair);
+ }
+ }
+
+ function set(key, value) {
+ return this._object[key] = value;
+ }
+
+ function get(key) {
+ if (this._object[key] !== Object.prototype[key])
+ return this._object[key];
+ }
+
+ function unset(key) {
+ var value = this._object[key];
+ delete this._object[key];
+ return value;
+ }
+
+ function toObject() {
+ return Object.clone(this._object);
+ }
+
+ function keys() {
+ return this.pluck('key');
+ }
+
+ function values() {
+ return this.pluck('value');
+ }
+
+ function index(value) {
+ var match = this.detect(function(pair) {
+ return pair.value === value;
+ });
+ return match && match.key;
+ }
+
+ function merge(object) {
+ return this.clone().update(object);
+ }
+
+ function update(object) {
+ return new Hash(object).inject(this, function(result, pair) {
+ result.set(pair.key, pair.value);
+ return result;
+ });
+ }
+
+ function toQueryPair(key, value) {
+ if (Object.isUndefined(value)) return key;
+ return key + '=' + encodeURIComponent(String.interpret(value));
+ }
+
+ function toQueryString() {
+ return this.inject([], function(results, pair) {
+ var key = encodeURIComponent(pair.key), values = pair.value;
+
+ if (values && typeof values == 'object') {
+ if (Object.isArray(values))
+ return results.concat(values.map(toQueryPair.curry(key)));
+ } else results.push(toQueryPair(key, values));
+ return results;
+ }).join('&');
+ }
+
+ function inspect() {
+ return '#<Hash:{' + this.map(function(pair) {
+ return pair.map(Object.inspect).join(': ');
+ }).join(', ') + '}>';
+ }
+
+ function toJSON() {
+ return Object.toJSON(this.toObject());
+ }
+
+ function clone() {
+ return new Hash(this);
+ }
+
+ return {
+ initialize: initialize,
+ _each: _each,
+ set: set,
+ get: get,
+ unset: unset,
+ toObject: toObject,
+ toTemplateReplacements: toObject,
+ keys: keys,
+ values: values,
+ index: index,
+ merge: merge,
+ update: update,
+ toQueryString: toQueryString,
+ inspect: inspect,
+ toJSON: toJSON,
+ clone: clone
+ };
+})());
+
+Hash.from = $H;
+Object.extend(Number.prototype, (function() {
+ function toColorPart() {
+ return this.toPaddedString(2, 16);
+ }
+
+ function succ() {
+ return this + 1;
+ }
+
+ function times(iterator, context) {
+ $R(0, this, true).each(iterator, context);
+ return this;
+ }
+
+ function toPaddedString(length, radix) {
+ var string = this.toString(radix || 10);
+ return '0'.times(length - string.length) + string;
+ }
+
+ function toJSON() {
+ return isFinite(this) ? this.toString() : 'null';
+ }
+
+ function abs() {
+ return Math.abs(this);
+ }
+
+ function round() {
+ return Math.round(this);
+ }
+
+ function ceil() {
+ return Math.ceil(this);
+ }
+
+ function floor() {
+ return Math.floor(this);
+ }
+
+ return {
+ toColorPart: toColorPart,
+ succ: succ,
+ times: times,
+ toPaddedString: toPaddedString,
+ toJSON: toJSON,
+ abs: abs,
+ round: round,
+ ceil: ceil,
+ floor: floor
+ };
+})());
+
+function $R(start, end, exclusive) {
+ return new ObjectRange(start, end, exclusive);
+}
+
+var ObjectRange = Class.create(Enumerable, (function() {
+ function initialize(start, end, exclusive) {
+ this.start = start;
+ this.end = end;
+ this.exclusive = exclusive;
+ }
+
+ function _each(iterator) {
+ var value = this.start;
+ while (this.include(value)) {
+ iterator(value);
+ value = value.succ();
+ }
+ }
+
+ function include(value) {
+ if (value < this.start)
+ return false;
+ if (this.exclusive)
+ return value < this.end;
+ return value <= this.end;
+ }
+
+ return {
+ initialize: initialize,
+ _each: _each,
+ include: include
+ };
+})());
+
+
+
+var Ajax = {
+ getTransport: function() {
+ return Try.these(
+ function() {return new XMLHttpRequest()},
+ function() {return new ActiveXObject('Msxml2.XMLHTTP')},
+ function() {return new ActiveXObject('Microsoft.XMLHTTP')}
+ ) || false;
+ },
+
+ activeRequestCount: 0
+};
+
+Ajax.Responders = {
+ responders: [],
+
+ _each: function(iterator) {
+ this.responders._each(iterator);
+ },
+
+ register: function(responder) {
+ if (!this.include(responder))
+ this.responders.push(responder);
+ },
+
+ unregister: function(responder) {
+ this.responders = this.responders.without(responder);
+ },
+
+ dispatch: function(callback, request, transport, json) {
+ this.each(function(responder) {
+ if (Object.isFunction(responder[callback])) {
+ try {
+ responder[callback].apply(responder, [request, transport, json]);
+ } catch (e) { }
+ }
+ });
+ }
+};
+
+Object.extend(Ajax.Responders, Enumerable);
+
+Ajax.Responders.register({
+ onCreate: function() { Ajax.activeRequestCount++ },
+ onComplete: function() { Ajax.activeRequestCount-- }
+});
+Ajax.Base = Class.create({
+ initialize: function(options) {
+ this.options = {
+ method: 'post',
+ asynchronous: true,
+ contentType: 'application/x-www-form-urlencoded',
+ encoding: 'UTF-8',
+ parameters: '',
+ evalJSON: true,
+ evalJS: true
+ };
+ Object.extend(this.options, options || { });
+
+ this.options.method = this.options.method.toLowerCase();
+
+ if (Object.isString(this.options.parameters))
+ this.options.parameters = this.options.parameters.toQueryParams();
+ else if (Object.isHash(this.options.parameters))
+ this.options.parameters = this.options.parameters.toObject();
+ }
+});
+Ajax.Request = Class.create(Ajax.Base, {
+ _complete: false,
+
+ initialize: function($super, url, options) {
+ $super(options);
+ this.transport = Ajax.getTransport();
+ this.request(url);
+ },
+
+ request: function(url) {
+ this.url = url;
+ this.method = this.options.method;
+ var params = Object.clone(this.options.parameters);
+
+ if (!['get', 'post'].include(this.method)) {
+ params['_method'] = this.method;
+ this.method = 'post';
+ }
+
+ this.parameters = params;
+
+ if (params = Object.toQueryString(params)) {
+ if (this.method == 'get')
+ this.url += (this.url.include('?') ? '&' : '?') + params;
+ else if (/Konqueror|Safari|KHTML/.test(navigator.userAgent))
+ params += '&_=';
+ }
+
+ try {
+ var response = new Ajax.Response(this);
+ if (this.options.onCreate) this.options.onCreate(response);
+ Ajax.Responders.dispatch('onCreate', this, response);
+
+ this.transport.open(this.method.toUpperCase(), this.url,
+ this.options.asynchronous);
+
+ if (this.options.asynchronous) this.respondToReadyState.bind(this).defer(1);
+
+ this.transport.onreadystatechange = this.onStateChange.bind(this);
+ this.setRequestHeaders();
+
+ this.body = this.method == 'post' ? (this.options.postBody || params) : null;
+ this.transport.send(this.body);
+
+ /* Force Firefox to handle ready state 4 for synchronous requests */
+ if (!this.options.asynchronous && this.transport.overrideMimeType)
+ this.onStateChange();
+
+ }
+ catch (e) {
+ this.dispatchException(e);
+ }
+ },
+
+ onStateChange: function() {
+ var readyState = this.transport.readyState;
+ if (readyState > 1 && !((readyState == 4) && this._complete))
+ this.respondToReadyState(this.transport.readyState);
+ },
+
+ setRequestHeaders: function() {
+ var headers = {
+ 'X-Requested-With': 'XMLHttpRequest',
+ 'X-Prototype-Version': Prototype.Version,
+ 'Accept': 'text/javascript, text/html, application/xml, text/xml, */*'
+ };
+
+ if (this.method == 'post') {
+ headers['Content-type'] = this.options.contentType +
+ (this.options.encoding ? '; charset=' + this.options.encoding : '');
+
+ /* Force "Connection: close" for older Mozilla browsers to work
+ * around a bug where XMLHttpRequest sends an incorrect
+ * Content-length header. See Mozilla Bugzilla #246651.
+ */
+ if (this.transport.overrideMimeType &&
+ (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005)
+ headers['Connection'] = 'close';
+ }
+
+ if (typeof this.options.requestHeaders == 'object') {
+ var extras = this.options.requestHeaders;
+
+ if (Object.isFunction(extras.push))
+ for (var i = 0, length = extras.length; i < length; i += 2)
+ headers[extras[i]] = extras[i+1];
+ else
+ $H(extras).each(function(pair) { headers[pair.key] = pair.value });
+ }
+
+ for (var name in headers)
+ this.transport.setRequestHeader(name, headers[name]);
+ },
+
+ success: function() {
+ var status = this.getStatus();
+ return !status || (status >= 200 && status < 300);
+ },
+
+ getStatus: function() {
+ try {
+ return this.transport.status || 0;
+ } catch (e) { return 0 }
+ },
+
+ respondToReadyState: function(readyState) {
+ var state = Ajax.Request.Events[readyState], response = new Ajax.Response(this);
+
+ if (state == 'Complete') {
+ try {
+ this._complete = true;
+ (this.options['on' + response.status]
+ || this.options['on' + (this.success() ? 'Success' : 'Failure')]
+ || Prototype.emptyFunction)(response, response.headerJSON);
+ } catch (e) {
+ this.dispatchException(e);
+ }
+
+ var contentType = response.getHeader('Content-type');
+ if (this.options.evalJS == 'force'
+ || (this.options.evalJS && this.isSameOrigin() && contentType
+ && contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i)))
+ this.evalResponse();
+ }
+
+ try {
+ (this.options['on' + state] || Prototype.emptyFunction)(response, response.headerJSON);
+ Ajax.Responders.dispatch('on' + state, this, response, response.headerJSON);
+ } catch (e) {
+ this.dispatchException(e);
+ }
+
+ if (state == 'Complete') {
+ this.transport.onreadystatechange = Prototype.emptyFunction;
+ }
+ },
+
+ isSameOrigin: function() {
+ var m = this.url.match(/^\s*https?:\/\/[^\/]*/);
+ return !m || (m[0] == '#{protocol}//#{domain}#{port}'.interpolate({
+ protocol: location.protocol,
+ domain: document.domain,
+ port: location.port ? ':' + location.port : ''
+ }));
+ },
+
+ getHeader: function(name) {
+ try {
+ return this.transport.getResponseHeader(name) || null;
+ } catch (e) { return null; }
+ },
+
+ evalResponse: function() {
+ try {
+ return eval((this.transport.responseText || '').unfilterJSON());
+ } catch (e) {
+ this.dispatchException(e);
+ }
+ },
+
+ dispatchException: function(exception) {
+ (this.options.onException || Prototype.emptyFunction)(this, exception);
+ Ajax.Responders.dispatch('onException', this, exception);
+ }
+});
+
+Ajax.Request.Events =
+ ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];
+
+
+
+
+
+
+
+
+Ajax.Response = Class.create({
+ initialize: function(request){
+ this.request = request;
+ var transport = this.transport = request.transport,
+ readyState = this.readyState = transport.readyState;
+
+ if((readyState > 2 && !Prototype.Browser.IE) || readyState == 4) {
+ this.status = this.getStatus();
+ this.statusText = this.getStatusText();
+ this.responseText = String.interpret(transport.responseText);
+ this.headerJSON = this._getHeaderJSON();
+ }
+
+ if(readyState == 4) {
+ var xml = transport.responseXML;
+ this.responseXML = Object.isUndefined(xml) ? null : xml;
+ this.responseJSON = this._getResponseJSON();
+ }
+ },
+
+ status: 0,
+
+ statusText: '',
+
+ getStatus: Ajax.Request.prototype.getStatus,
+
+ getStatusText: function() {
+ try {
+ return this.transport.statusText || '';
+ } catch (e) { return '' }
+ },
+
+ getHeader: Ajax.Request.prototype.getHeader,
+
+ getAllHeaders: function() {
+ try {
+ return this.getAllResponseHeaders();
+ } catch (e) { return null }
+ },
+
+ getResponseHeader: function(name) {
+ return this.transport.getResponseHeader(name);
+ },
+
+ getAllResponseHeaders: function() {
+ return this.transport.getAllResponseHeaders();
+ },
+
+ _getHeaderJSON: function() {
+ var json = this.getHeader('X-JSON');
+ if (!json) return null;
+ json = decodeURIComponent(escape(json));
+ try {
+ return json.evalJSON(this.request.options.sanitizeJSON ||
+ !this.request.isSameOrigin());
+ } catch (e) {
+ this.request.dispatchException(e);
+ }
+ },
+
+ _getResponseJSON: function() {
+ var options = this.request.options;
+ if (!options.evalJSON || (options.evalJSON != 'force' &&
+ !(this.getHeader('Content-type') || '').include('application/json')) ||
+ this.responseText.blank())
+ return null;
+ try {
+ return this.responseText.evalJSON(options.sanitizeJSON ||
+ !this.request.isSameOrigin());
+ } catch (e) {
+ this.request.dispatchException(e);
+ }
+ }
+});
+
+Ajax.Updater = Class.create(Ajax.Request, {
+ initialize: function($super, container, url, options) {
+ this.container = {
+ success: (container.success || container),
+ failure: (container.failure || (container.success ? null : container))
+ };
+
+ options = Object.clone(options);
+ var onComplete = options.onComplete;
+ options.onComplete = (function(response, json) {
+ this.updateContent(response.responseText);
+ if (Object.isFunction(onComplete)) onComplete(response, json);
+ }).bind(this);
+
+ $super(url, options);
+ },
+
+ updateContent: function(responseText) {
+ var receiver = this.container[this.success() ? 'success' : 'failure'],
+ options = this.options;
+
+ if (!options.evalScripts) responseText = responseText.stripScripts();
+
+ if (receiver = DOKUid(receiver)) {
+ if (options.insertion) {
+ if (Object.isString(options.insertion)) {
+ var insertion = { }; insertion[options.insertion] = responseText;
+ receiver.insert(insertion);
+ }
+ else options.insertion(receiver, responseText);
+ }
+ else receiver.update(responseText);
+ }
+ }
+});
+
+Ajax.PeriodicalUpdater = Class.create(Ajax.Base, {
+ initialize: function($super, container, url, options) {
+ $super(options);
+ this.onComplete = this.options.onComplete;
+
+ this.frequency = (this.options.frequency || 2);
+ this.decay = (this.options.decay || 1);
+
+ this.updater = { };
+ this.container = container;
+ this.url = url;
+
+ this.start();
+ },
+
+ start: function() {
+ this.options.onComplete = this.updateComplete.bind(this);
+ this.onTimerEvent();
+ },
+
+ stop: function() {
+ this.updater.options.onComplete = undefined;
+ clearTimeout(this.timer);
+ (this.onComplete || Prototype.emptyFunction).apply(this, arguments);
+ },
+
+ updateComplete: function(response) {
+ if (this.options.decay) {
+ this.decay = (response.responseText == this.lastText ?
+ this.decay * this.options.decay : 1);
+
+ this.lastText = response.responseText;
+ }
+ this.timer = this.onTimerEvent.bind(this).delay(this.decay * this.frequency);
+ },
+
+ onTimerEvent: function() {
+ this.updater = new Ajax.Updater(this.container, this.url, this.options);
+ }
+});
+
+
+
+function DOKUid(element) {
+ if (arguments.length > 1) {
+ for (var i = 0, elements = [], length = arguments.length; i < length; i++)
+ elements.push(DOKUid(arguments[i]));
+ return elements;
+ }
+ if (Object.isString(element))
+ element = document.getElementById(element);
+ return Element.extend(element);
+}
+
+if (Prototype.BrowserFeatures.XPath) {
+ document._getElementsByXPath = function(expression, parentElement) {
+ var results = [];
+ var query = document.evaluate(expression, DOKUid(parentElement) || document,
+ null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
+ for (var i = 0, length = query.snapshotLength; i < length; i++)
+ results.push(Element.extend(query.snapshotItem(i)));
+ return results;
+ };
+}
+
+/*--------------------------------------------------------------------------*/
+
+if (!window.Node) var Node = { };
+
+if (!Node.ELEMENT_NODE) {
+ Object.extend(Node, {
+ ELEMENT_NODE: 1,
+ ATTRIBUTE_NODE: 2,
+ TEXT_NODE: 3,
+ CDATA_SECTION_NODE: 4,
+ ENTITY_REFERENCE_NODE: 5,
+ ENTITY_NODE: 6,
+ PROCESSING_INSTRUCTION_NODE: 7,
+ COMMENT_NODE: 8,
+ DOCUMENT_NODE: 9,
+ DOCUMENT_TYPE_NODE: 10,
+ DOCUMENT_FRAGMENT_NODE: 11,
+ NOTATION_NODE: 12
+ });
+}
+
+
+(function(global) {
+
+ var SETATTRIBUTE_IGNORES_NAME = (function(){
+ var elForm = document.createElement("form");
+ var elInput = document.createElement("input");
+ var root = document.documentElement;
+ elInput.setAttribute("name", "test");
+ elForm.appendChild(elInput);
+ root.appendChild(elForm);
+ var isBuggy = elForm.elements
+ ? (typeof elForm.elements.test == "undefined")
+ : null;
+ root.removeChild(elForm);
+ elForm = elInput = null;
+ return isBuggy;
+ })();
+
+ var element = global.Element;
+ global.Element = function(tagName, attributes) {
+ attributes = attributes || { };
+ tagName = tagName.toLowerCase();
+ var cache = Element.cache;
+ if (SETATTRIBUTE_IGNORES_NAME && attributes.name) {
+ tagName = '<' + tagName + ' name="' + attributes.name + '">';
+ delete attributes.name;
+ return Element.writeAttribute(document.createElement(tagName), attributes);
+ }
+ if (!cache[tagName]) cache[tagName] = Element.extend(document.createElement(tagName));
+ return Element.writeAttribute(cache[tagName].cloneNode(false), attributes);
+ };
+ Object.extend(global.Element, element || { });
+ if (element) global.Element.prototype = element.prototype;
+})(this);
+
+Element.cache = { };
+Element.idCounter = 1;
+
+Element.Methods = {
+ visible: function(element) {
+ return DOKUid(element).style.display != 'none';
+ },
+
+ toggle: function(element) {
+ element = DOKUid(element);
+ Element[Element.visible(element) ? 'hide' : 'show'](element);
+ return element;
+ },
+
+
+ hide: function(element) {
+ element = DOKUid(element);
+ element.style.display = 'none';
+ return element;
+ },
+
+ show: function(element) {
+ element = DOKUid(element);
+ element.style.display = '';
+ return element;
+ },
+
+ remove: function(element) {
+ element = DOKUid(element);
+ element.parentNode.removeChild(element);
+ return element;
+ },
+
+ update: (function(){
+
+ var SELECT_ELEMENT_INNERHTML_BUGGY = (function(){
+ var el = document.createElement("select"),
+ isBuggy = true;
+ el.innerHTML = "<option value=\"test\">test</option>";
+ if (el.options && el.options[0]) {
+ isBuggy = el.options[0].nodeName.toUpperCase() !== "OPTION";
+ }
+ el = null;
+ return isBuggy;
+ })();
+
+ var TABLE_ELEMENT_INNERHTML_BUGGY = (function(){
+ try {
+ var el = document.createElement("table");
+ if (el && el.tBodies) {
+ el.innerHTML = "<tbody><tr><td>test</td></tr></tbody>";
+ var isBuggy = typeof el.tBodies[0] == "undefined";
+ el = null;
+ return isBuggy;
+ }
+ } catch (e) {
+ return true;
+ }
+ })();
+
+ var SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING = (function () {
+ var s = document.createElement("script"),
+ isBuggy = false;
+ try {
+ s.appendChild(document.createTextNode(""));
+ isBuggy = !s.firstChild ||
+ s.firstChild && s.firstChild.nodeType !== 3;
+ } catch (e) {
+ isBuggy = true;
+ }
+ s = null;
+ return isBuggy;
+ })();
+
+ function update(element, content) {
+ element = DOKUid(element);
+
+ if (content && content.toElement)
+ content = content.toElement();
+
+ if (Object.isElement(content))
+ return element.update().insert(content);
+
+ content = Object.toHTML(content);
+
+ var tagName = element.tagName.toUpperCase();
+
+ if (tagName === 'SCRIPT' && SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING) {
+ element.text = content;
+ return element;
+ }
+
+ if (SELECT_ELEMENT_INNERHTML_BUGGY || TABLE_ELEMENT_INNERHTML_BUGGY) {
+ if (tagName in Element._insertionTranslations.tags) {
+ while (element.firstChild) {
+ element.removeChild(element.firstChild);
+ }
+ Element._getContentFromAnonymousElement(tagName, content.stripScripts())
+ .each(function(node) {
+ element.appendChild(node)
+ });
+ }
+ else {
+ element.innerHTML = content.stripScripts();
+ }
+ }
+ else {
+ element.innerHTML = content.stripScripts();
+ }
+
+ content.evalScripts.bind(content).defer();
+ return element;
+ }
+
+ return update;
+ })(),
+
+ replace: function(element, content) {
+ element = DOKUid(element);
+ if (content && content.toElement) content = content.toElement();
+ else if (!Object.isElement(content)) {
+ content = Object.toHTML(content);
+ var range = element.ownerDocument.createRange();
+ range.selectNode(element);
+ content.evalScripts.bind(content).defer();
+ content = range.createContextualFragment(content.stripScripts());
+ }
+ element.parentNode.replaceChild(content, element);
+ return element;
+ },
+
+ insert: function(element, insertions) {
+ element = DOKUid(element);
+
+ if (Object.isString(insertions) || Object.isNumber(insertions) ||
+ Object.isElement(insertions) || (insertions && (insertions.toElement || insertions.toHTML)))
+ insertions = {bottom:insertions};
+
+ var content, insert, tagName, childNodes;
+
+ for (var position in insertions) {
+ content = insertions[position];
+ position = position.toLowerCase();
+ insert = Element._insertionTranslations[position];
+
+ if (content && content.toElement) content = content.toElement();
+ if (Object.isElement(content)) {
+ insert(element, content);
+ continue;
+ }
+
+ content = Object.toHTML(content);
+
+ tagName = ((position == 'before' || position == 'after')
+ ? element.parentNode : element).tagName.toUpperCase();
+
+ childNodes = Element._getContentFromAnonymousElement(tagName, content.stripScripts());
+
+ if (position == 'top' || position == 'after') childNodes.reverse();
+ childNodes.each(insert.curry(element));
+
+ content.evalScripts.bind(content).defer();
+ }
+
+ return element;
+ },
+
+ wrap: function(element, wrapper, attributes) {
+ element = DOKUid(element);
+ if (Object.isElement(wrapper))
+ DOKUid(wrapper).writeAttribute(attributes || { });
+ else if (Object.isString(wrapper)) wrapper = new Element(wrapper, attributes);
+ else wrapper = new Element('div', wrapper);
+ if (element.parentNode)
+ element.parentNode.replaceChild(wrapper, element);
+ wrapper.appendChild(element);
+ return wrapper;
+ },
+
+ inspect: function(element) {
+ element = DOKUid(element);
+ var result = '<' + element.tagName.toLowerCase();
+ $H({'id': 'id', 'className': 'class'}).each(function(pair) {
+ var property = pair.first(), attribute = pair.last();
+ var value = (element[property] || '').toString();
+ if (value) result += ' ' + attribute + '=' + value.inspect(true);
+ });
+ return result + '>';
+ },
+
+ recursivelyCollect: function(element, property) {
+ element = DOKUid(element);
+ var elements = [];
+ while (element = element[property])
+ if (element.nodeType == 1)
+ elements.push(Element.extend(element));
+ return elements;
+ },
+
+ ancestors: function(element) {
+ return Element.recursivelyCollect(element, 'parentNode');
+ },
+
+ descendants: function(element) {
+ return Element.select(element, "*");
+ },
+
+ firstDescendant: function(element) {
+ element = DOKUid(element).firstChild;
+ while (element && element.nodeType != 1) element = element.nextSibling;
+ return DOKUid(element);
+ },
+
+ immediateDescendants: function(element) {
+ if (!(element = DOKUid(element).firstChild)) return [];
+ while (element && element.nodeType != 1) element = element.nextSibling;
+ if (element) return [element].concat(DOKUid(element).nextSiblings());
+ return [];
+ },
+
+ previousSiblings: function(element) {
+ return Element.recursivelyCollect(element, 'previousSibling');
+ },
+
+ nextSiblings: function(element) {
+ return Element.recursivelyCollect(element, 'nextSibling');
+ },
+
+ siblings: function(element) {
+ element = DOKUid(element);
+ return Element.previousSiblings(element).reverse()
+ .concat(Element.nextSiblings(element));
+ },
+
+ match: function(element, selector) {
+ if (Object.isString(selector))
+ selector = new Selector(selector);
+ return selector.match(DOKUid(element));
+ },
+
+ up: function(element, expression, index) {
+ element = DOKUid(element);
+ if (arguments.length == 1) return DOKUid(element.parentNode);
+ var ancestors = Element.ancestors(element);
+ return Object.isNumber(expression) ? ancestors[expression] :
+ Selector.findElement(ancestors, expression, index);
+ },
+
+ down: function(element, expression, index) {
+ element = DOKUid(element);
+ if (arguments.length == 1) return Element.firstDescendant(element);
+ return Object.isNumber(expression) ? Element.descendants(element)[expression] :
+ Element.select(element, expression)[index || 0];
+ },
+
+ previous: function(element, expression, index) {
+ element = DOKUid(element);
+ if (arguments.length == 1) return DOKUid(Selector.handlers.previousElementSibling(element));
+ var previousSiblings = Element.previousSiblings(element);
+ return Object.isNumber(expression) ? previousSiblings[expression] :
+ Selector.findElement(previousSiblings, expression, index);
+ },
+
+ next: function(element, expression, index) {
+ element = DOKUid(element);
+ if (arguments.length == 1) return DOKUid(Selector.handlers.nextElementSibling(element));
+ var nextSiblings = Element.nextSiblings(element);
+ return Object.isNumber(expression) ? nextSiblings[expression] :
+ Selector.findElement(nextSiblings, expression, index);
+ },
+
+
+ select: function(element) {
+ var args = Array.prototype.slice.call(arguments, 1);
+ return Selector.findChildElements(element, args);
+ },
+
+ adjacent: function(element) {
+ var args = Array.prototype.slice.call(arguments, 1);
+ return Selector.findChildElements(element.parentNode, args).without(element);
+ },
+
+ identify: function(element) {
+ element = DOKUid(element);
+ var id = Element.readAttribute(element, 'id');
+ if (id) return id;
+ do { id = 'anonymous_element_' + Element.idCounter++ } while (DOKUid(id));
+ Element.writeAttribute(element, 'id', id);
+ return id;
+ },
+
+ readAttribute: function(element, name) {
+ element = DOKUid(element);
+ if (Prototype.Browser.IE) {
+ var t = Element._attributeTranslations.read;
+ if (t.values[name]) return t.values[name](element, name);
+ if (t.names[name]) name = t.names[name];
+ if (name.include(':')) {
+ return (!element.attributes || !element.attributes[name]) ? null :
+ element.attributes[name].value;
+ }
+ }
+ return element.getAttribute(name);
+ },
+
+ writeAttribute: function(element, name, value) {
+ element = DOKUid(element);
+ var attributes = { }, t = Element._attributeTranslations.write;
+
+ if (typeof name == 'object') attributes = name;
+ else attributes[name] = Object.isUndefined(value) ? true : value;
+
+ for (var attr in attributes) {
+ name = t.names[attr] || attr;
+ value = attributes[attr];
+ if (t.values[attr]) name = t.values[attr](element, value);
+ if (value === false || value === null)
+ element.removeAttribute(name);
+ else if (value === true)
+ element.setAttribute(name, name);
+ else element.setAttribute(name, value);
+ }
+ return element;
+ },
+
+ getHeight: function(element) {
+ return Element.getDimensions(element).height;
+ },
+
+ getWidth: function(element) {
+ return Element.getDimensions(element).width;
+ },
+
+ classNames: function(element) {
+ return new Element.ClassNames(element);
+ },
+
+ hasClassName: function(element, className) {
+ if (!(element = DOKUid(element))) return;
+ var elementClassName = element.className;
+ return (elementClassName.length > 0 && (elementClassName == className ||
+ new RegExp("(^|\\s)" + className + "(\\s|$)").test(elementClassName)));
+ },
+
+ addClassName: function(element, className) {
+ if (!(element = DOKUid(element))) return;
+ if (!Element.hasClassName(element, className))
+ element.className += (element.className ? ' ' : '') + className;
+ return element;
+ },
+
+ removeClassName: function(element, className) {
+ if (!(element = DOKUid(element))) return;
+ element.className = element.className.replace(
+ new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' ').strip();
+ return element;
+ },
+
+ toggleClassName: function(element, className) {
+ if (!(element = DOKUid(element))) return;
+ return Element[Element.hasClassName(element, className) ?
+ 'removeClassName' : 'addClassName'](element, className);
+ },
+
+ cleanWhitespace: function(element) {
+ element = DOKUid(element);
+ var node = element.firstChild;
+ while (node) {
+ var nextNode = node.nextSibling;
+ if (node.nodeType == 3 && !/\S/.test(node.nodeValue))
+ element.removeChild(node);
+ node = nextNode;
+ }
+ return element;
+ },
+
+ empty: function(element) {
+ return DOKUid(element).innerHTML.blank();
+ },
+
+ descendantOf: function(element, ancestor) {
+ element = DOKUid(element), ancestor = DOKUid(ancestor);
+
+ if (element.compareDocumentPosition)
+ return (element.compareDocumentPosition(ancestor) & 8) === 8;
+
+ if (ancestor.contains)
+ return ancestor.contains(element) && ancestor !== element;
+
+ while (element = element.parentNode)
+ if (element == ancestor) return true;
+
+ return false;
+ },
+
+ scrollTo: function(element) {
+ element = DOKUid(element);
+ var pos = Element.cumulativeOffset(element);
+ window.scrollTo(pos[0], pos[1]);
+ return element;
+ },
+
+ getStyle: function(element, style) {
+ element = DOKUid(element);
+ style = style == 'float' ? 'cssFloat' : style.camelize();
+ var value = element.style[style];
+ if (!value || value == 'auto') {
+ var css = document.defaultView.getComputedStyle(element, null);
+ value = css ? css[style] : null;
+ }
+ if (style == 'opacity') return value ? parseFloat(value) : 1.0;
+ return value == 'auto' ? null : value;
+ },
+
+ getOpacity: function(element) {
+ return DOKUid(element).getStyle('opacity');
+ },
+
+ setStyle: function(element, styles) {
+ element = DOKUid(element);
+ var elementStyle = element.style, match;
+ if (Object.isString(styles)) {
+ element.style.cssText += ';' + styles;
+ return styles.include('opacity') ?
+ element.setOpacity(styles.match(/opacity:\s*(\d?\.?\d*)/)[1]) : element;
+ }
+ for (var property in styles)
+ if (property == 'opacity') element.setOpacity(styles[property]);
+ else
+ elementStyle[(property == 'float' || property == 'cssFloat') ?
+ (Object.isUndefined(elementStyle.styleFloat) ? 'cssFloat' : 'styleFloat') :
+ property] = styles[property];
+
+ return element;
+ },
+
+ setOpacity: function(element, value) {
+ element = DOKUid(element);
+ element.style.opacity = (value == 1 || value === '') ? '' :
+ (value < 0.00001) ? 0 : value;
+ return element;
+ },
+
+ getDimensions: function(element) {
+ element = DOKUid(element);
+ var display = Element.getStyle(element, 'display');
+ if (display != 'none' && display != null) // Safari bug
+ return {width: element.offsetWidth, height: element.offsetHeight};
+
+ var els = element.style;
+ var originalVisibility = els.visibility;
+ var originalPosition = els.position;
+ var originalDisplay = els.display;
+ els.visibility = 'hidden';
+ if (originalPosition != 'fixed') // Switching fixed to absolute causes issues in Safari
+ els.position = 'absolute';
+ els.display = 'block';
+ var originalWidth = element.clientWidth;
+ var originalHeight = element.clientHeight;
+ els.display = originalDisplay;
+ els.position = originalPosition;
+ els.visibility = originalVisibility;
+ return {width: originalWidth, height: originalHeight};
+ },
+
+ makePositioned: function(element) {
+ element = DOKUid(element);
+ var pos = Element.getStyle(element, 'position');
+ if (pos == 'static' || !pos) {
+ element._madePositioned = true;
+ element.style.position = 'relative';
+ if (Prototype.Browser.Opera) {
+ element.style.top = 0;
+ element.style.left = 0;
+ }
+ }
+ return element;
+ },
+
+ undoPositioned: function(element) {
+ element = DOKUid(element);
+ if (element._madePositioned) {
+ element._madePositioned = undefined;
+ element.style.position =
+ element.style.top =
+ element.style.left =
+ element.style.bottom =
+ element.style.right = '';
+ }
+ return element;
+ },
+
+ makeClipping: function(element) {
+ element = DOKUid(element);
+ if (element._overflow) return element;
+ element._overflow = Element.getStyle(element, 'overflow') || 'auto';
+ if (element._overflow !== 'hidden')
+ element.style.overflow = 'hidden';
+ return element;
+ },
+
+ undoClipping: function(element) {
+ element = DOKUid(element);
+ if (!element._overflow) return element;
+ element.style.overflow = element._overflow == 'auto' ? '' : element._overflow;
+ element._overflow = null;
+ return element;
+ },
+
+ cumulativeOffset: function(element) {
+ var valueT = 0, valueL = 0;
+ do {
+ valueT += element.offsetTop || 0;
+ valueL += element.offsetLeft || 0;
+ element = element.offsetParent;
+ } while (element);
+ return Element._returnOffset(valueL, valueT);
+ },
+
+ positionedOffset: function(element) {
+ var valueT = 0, valueL = 0;
+ do {
+ valueT += element.offsetTop || 0;
+ valueL += element.offsetLeft || 0;
+ element = element.offsetParent;
+ if (element) {
+ if (element.tagName.toUpperCase() == 'BODY') break;
+ var p = Element.getStyle(element, 'position');
+ if (p !== 'static') break;
+ }
+ } while (element);
+ return Element._returnOffset(valueL, valueT);
+ },
+
+ absolutize: function(element) {
+ element = DOKUid(element);
+ if (Element.getStyle(element, 'position') == 'absolute') return element;
+
+ var offsets = Element.positionedOffset(element);
+ var top = offsets[1];
+ var left = offsets[0];
+ var width = element.clientWidth;
+ var height = element.clientHeight;
+
+ element._originalLeft = left - parseFloat(element.style.left || 0);
+ element._originalTop = top - parseFloat(element.style.top || 0);
+ element._originalWidth = element.style.width;
+ element._originalHeight = element.style.height;
+
+ element.style.position = 'absolute';
+ element.style.top = top + 'px';
+ element.style.left = left + 'px';
+ element.style.width = width + 'px';
+ element.style.height = height + 'px';
+ return element;
+ },
+
+ relativize: function(element) {
+ element = DOKUid(element);
+ if (Element.getStyle(element, 'position') == 'relative') return element;
+
+ element.style.position = 'relative';
+ var top = parseFloat(element.style.top || 0) - (element._originalTop || 0);
+ var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0);
+
+ element.style.top = top + 'px';
+ element.style.left = left + 'px';
+ element.style.height = element._originalHeight;
+ element.style.width = element._originalWidth;
+ return element;
+ },
+
+ cumulativeScrollOffset: function(element) {
+ var valueT = 0, valueL = 0;
+ do {
+ valueT += element.scrollTop || 0;
+ valueL += element.scrollLeft || 0;
+ element = element.parentNode;
+ } while (element);
+ return Element._returnOffset(valueL, valueT);
+ },
+
+ getOffsetParent: function(element) {
+ if (element.offsetParent) return DOKUid(element.offsetParent);
+ if (element == document.body) return DOKUid(element);
+
+ while ((element = element.parentNode) && element != document.body)
+ if (Element.getStyle(element, 'position') != 'static')
+ return DOKUid(element);
+
+ return DOKUid(document.body);
+ },
+
+ viewportOffset: function(forElement) {
+ var valueT = 0, valueL = 0;
+
+ var element = forElement;
+ do {
+ valueT += element.offsetTop || 0;
+ valueL += element.offsetLeft || 0;
+
+ if (element.offsetParent == document.body &&
+ Element.getStyle(element, 'position') == 'absolute') break;
+
+ } while (element = element.offsetParent);
+
+ element = forElement;
+ do {
+ if (!Prototype.Browser.Opera || (element.tagName && (element.tagName.toUpperCase() == 'BODY'))) {
+ valueT -= element.scrollTop || 0;
+ valueL -= element.scrollLeft || 0;
+ }
+ } while (element = element.parentNode);
+
+ return Element._returnOffset(valueL, valueT);
+ },
+
+ clonePosition: function(element, source) {
+ var options = Object.extend({
+ setLeft: true,
+ setTop: true,
+ setWidth: true,
+ setHeight: true,
+ offsetTop: 0,
+ offsetLeft: 0
+ }, arguments[2] || { });
+
+ source = DOKUid(source);
+ var p = Element.viewportOffset(source);
+
+ element = DOKUid(element);
+ var delta = [0, 0];
+ var parent = null;
+ if (Element.getStyle(element, 'position') == 'absolute') {
+ parent = Element.getOffsetParent(element);
+ delta = Element.viewportOffset(parent);
+ }
+
+ if (parent == document.body) {
+ delta[0] -= document.body.offsetLeft;
+ delta[1] -= document.body.offsetTop;
+ }
+
+ if (options.setLeft) element.style.left = (p[0] - delta[0] + options.offsetLeft) + 'px';
+ if (options.setTop) element.style.top = (p[1] - delta[1] + options.offsetTop) + 'px';
+ if (options.setWidth) element.style.width = source.offsetWidth + 'px';
+ if (options.setHeight) element.style.height = source.offsetHeight + 'px';
+ return element;
+ }
+};
+
+Object.extend(Element.Methods, {
+ getElementsBySelector: Element.Methods.select,
+
+ childElements: Element.Methods.immediateDescendants
+});
+
+Element._attributeTranslations = {
+ write: {
+ names: {
+ className: 'class',
+ htmlFor: 'for'
+ },
+ values: { }
+ }
+};
+
+if (Prototype.Browser.Opera) {
+ Element.Methods.getStyle = Element.Methods.getStyle.wrap(
+ function(proceed, element, style) {
+ switch (style) {
+ case 'left': case 'top': case 'right': case 'bottom':
+ if (proceed(element, 'position') === 'static') return null;
+ case 'height': case 'width':
+ if (!Element.visible(element)) return null;
+
+ var dim = parseInt(proceed(element, style), 10);
+
+ if (dim !== element['offset' + style.capitalize()])
+ return dim + 'px';
+
+ var properties;
+ if (style === 'height') {
+ properties = ['border-top-width', 'padding-top',
+ 'padding-bottom', 'border-bottom-width'];
+ }
+ else {
+ properties = ['border-left-width', 'padding-left',
+ 'padding-right', 'border-right-width'];
+ }
+ return properties.inject(dim, function(memo, property) {
+ var val = proceed(element, property);
+ return val === null ? memo : memo - parseInt(val, 10);
+ }) + 'px';
+ default: return proceed(element, style);
+ }
+ }
+ );
+
+ Element.Methods.readAttribute = Element.Methods.readAttribute.wrap(
+ function(proceed, element, attribute) {
+ if (attribute === 'title') return element.title;
+ return proceed(element, attribute);
+ }
+ );
+}
+
+else if (Prototype.Browser.IE) {
+ Element.Methods.getOffsetParent = Element.Methods.getOffsetParent.wrap(
+ function(proceed, element) {
+ element = DOKUid(element);
+ try { element.offsetParent }
+ catch(e) { return DOKUid(document.body) }
+ var position = element.getStyle('position');
+ if (position !== 'static') return proceed(element);
+ element.setStyle({ position: 'relative' });
+ var value = proceed(element);
+ element.setStyle({ position: position });
+ return value;
+ }
+ );
+
+ $w('positionedOffset viewportOffset').each(function(method) {
+ Element.Methods[method] = Element.Methods[method].wrap(
+ function(proceed, element) {
+ element = DOKUid(element);
+ try { element.offsetParent }
+ catch(e) { return Element._returnOffset(0,0) }
+ var position = element.getStyle('position');
+ if (position !== 'static') return proceed(element);
+ var offsetParent = element.getOffsetParent();
+ if (offsetParent && offsetParent.getStyle('position') === 'fixed')
+ offsetParent.setStyle({ zoom: 1 });
+ element.setStyle({ position: 'relative' });
+ var value = proceed(element);
+ element.setStyle({ position: position });
+ return value;
+ }
+ );
+ });
+
+ Element.Methods.cumulativeOffset = Element.Methods.cumulativeOffset.wrap(
+ function(proceed, element) {
+ try { element.offsetParent }
+ catch(e) { return Element._returnOffset(0,0) }
+ return proceed(element);
+ }
+ );
+
+ Element.Methods.getStyle = function(element, style) {
+ element = DOKUid(element);
+ style = (style == 'float' || style == 'cssFloat') ? 'styleFloat' : style.camelize();
+ var value = element.style[style];
+ if (!value && element.currentStyle) value = element.currentStyle[style];
+
+ if (style == 'opacity') {
+ if (value = (element.getStyle('filter') || '').match(/alpha\(opacity=(.*)\)/))
+ if (value[1]) return parseFloat(value[1]) / 100;
+ return 1.0;
+ }
+
+ if (value == 'auto') {
+ if ((style == 'width' || style == 'height') && (element.getStyle('display') != 'none'))
+ return element['offset' + style.capitalize()] + 'px';
+ return null;
+ }
+ return value;
+ };
+
+ Element.Methods.setOpacity = function(element, value) {
+ function stripAlpha(filter){
+ return filter.replace(/alpha\([^\)]*\)/gi,'');
+ }
+ element = DOKUid(element);
+ var currentStyle = element.currentStyle;
+ if ((currentStyle && !currentStyle.hasLayout) ||
+ (!currentStyle && element.style.zoom == 'normal'))
+ element.style.zoom = 1;
+
+ var filter = element.getStyle('filter'), style = element.style;
+ if (value == 1 || value === '') {
+ (filter = stripAlpha(filter)) ?
+ style.filter = filter : style.removeAttribute('filter');
+ return element;
+ } else if (value < 0.00001) value = 0;
+ style.filter = stripAlpha(filter) +
+ 'alpha(opacity=' + (value * 100) + ')';
+ return element;
+ };
+
+ Element._attributeTranslations = (function(){
+
+ var classProp = 'className';
+ var forProp = 'for';
+
+ var el = document.createElement('div');
+
+ el.setAttribute(classProp, 'x');
+
+ if (el.className !== 'x') {
+ el.setAttribute('class', 'x');
+ if (el.className === 'x') {
+ classProp = 'class';
+ }
+ }
+ el = null;
+
+ el = document.createElement('label');
+ el.setAttribute(forProp, 'x');
+ if (el.htmlFor !== 'x') {
+ el.setAttribute('htmlFor', 'x');
+ if (el.htmlFor === 'x') {
+ forProp = 'htmlFor';
+ }
+ }
+ el = null;
+
+ return {
+ read: {
+ names: {
+ 'class': classProp,
+ 'className': classProp,
+ 'for': forProp,
+ 'htmlFor': forProp
+ },
+ values: {
+ _getAttr: function(element, attribute) {
+ return element.getAttribute(attribute);
+ },
+ _getAttr2: function(element, attribute) {
+ return element.getAttribute(attribute, 2);
+ },
+ _getAttrNode: function(element, attribute) {
+ var node = element.getAttributeNode(attribute);
+ return node ? node.value : "";
+ },
+ _getEv: (function(){
+
+ var el = document.createElement('div');
+ el.onclick = Prototype.emptyFunction;
+ var value = el.getAttribute('onclick');
+ var f;
+
+ if (String(value).indexOf('{') > -1) {
+ f = function(element, attribute) {
+ attribute = element.getAttribute(attribute);
+ if (!attribute) return null;
+ attribute = attribute.toString();
+ attribute = attribute.split('{')[1];
+ attribute = attribute.split('}')[0];
+ return attribute.strip();
+ };
+ }
+ else if (value === '') {
+ f = function(element, attribute) {
+ attribute = element.getAttribute(attribute);
+ if (!attribute) return null;
+ return attribute.strip();
+ };
+ }
+ el = null;
+ return f;
+ })(),
+ _flag: function(element, attribute) {
+ return DOKUid(element).hasAttribute(attribute) ? attribute : null;
+ },
+ style: function(element) {
+ return element.style.cssText.toLowerCase();
+ },
+ title: function(element) {
+ return element.title;
+ }
+ }
+ }
+ }
+ })();
+
+ Element._attributeTranslations.write = {
+ names: Object.extend({
+ cellpadding: 'cellPadding',
+ cellspacing: 'cellSpacing'
+ }, Element._attributeTranslations.read.names),
+ values: {
+ checked: function(element, value) {
+ element.checked = !!value;
+ },
+
+ style: function(element, value) {
+ element.style.cssText = value ? value : '';
+ }
+ }
+ };
+
+ Element._attributeTranslations.has = {};
+
+ $w('colSpan rowSpan vAlign dateTime accessKey tabIndex ' +
+ 'encType maxLength readOnly longDesc frameBorder').each(function(attr) {
+ Element._attributeTranslations.write.names[attr.toLowerCase()] = attr;
+ Element._attributeTranslations.has[attr.toLowerCase()] = attr;
+ });
+
+ (function(v) {
+ Object.extend(v, {
+ href: v._getAttr2,
+ src: v._getAttr2,
+ type: v._getAttr,
+ action: v._getAttrNode,
+ disabled: v._flag,
+ checked: v._flag,
+ readonly: v._flag,
+ multiple: v._flag,
+ onload: v._getEv,
+ onunload: v._getEv,
+ onclick: v._getEv,
+ ondblclick: v._getEv,
+ onmousedown: v._getEv,
+ onmouseup: v._getEv,
+ onmouseover: v._getEv,
+ onmousemove: v._getEv,
+ onmouseout: v._getEv,
+ onfocus: v._getEv,
+ onblur: v._getEv,
+ onkeypress: v._getEv,
+ onkeydown: v._getEv,
+ onkeyup: v._getEv,
+ onsubmit: v._getEv,
+ onreset: v._getEv,
+ onselect: v._getEv,
+ onchange: v._getEv
+ });
+ })(Element._attributeTranslations.read.values);
+
+ if (Prototype.BrowserFeatures.ElementExtensions) {
+ (function() {
+ function _descendants(element) {
+ var nodes = element.getElementsByTagName('*'), results = [];
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (node.tagName !== "!") // Filter out comment nodes.
+ results.push(node);
+ return results;
+ }
+
+ Element.Methods.down = function(element, expression, index) {
+ element = DOKUid(element);
+ if (arguments.length == 1) return element.firstDescendant();
+ return Object.isNumber(expression) ? _descendants(element)[expression] :
+ Element.select(element, expression)[index || 0];
+ }
+ })();
+ }
+
+}
+
+else if (Prototype.Browser.Gecko && /rv:1\.8\.0/.test(navigator.userAgent)) {
+ Element.Methods.setOpacity = function(element, value) {
+ element = DOKUid(element);
+ element.style.opacity = (value == 1) ? 0.999999 :
+ (value === '') ? '' : (value < 0.00001) ? 0 : value;
+ return element;
+ };
+}
+
+else if (Prototype.Browser.WebKit) {
+ Element.Methods.setOpacity = function(element, value) {
+ element = DOKUid(element);
+ element.style.opacity = (value == 1 || value === '') ? '' :
+ (value < 0.00001) ? 0 : value;
+
+ if (value == 1)
+ if(element.tagName.toUpperCase() == 'IMG' && element.width) {
+ element.width++; element.width--;
+ } else try {
+ var n = document.createTextNode(' ');
+ element.appendChild(n);
+ element.removeChild(n);
+ } catch (e) { }
+
+ return element;
+ };
+
+ Element.Methods.cumulativeOffset = function(element) {
+ var valueT = 0, valueL = 0;
+ do {
+ valueT += element.offsetTop || 0;
+ valueL += element.offsetLeft || 0;
+ if (element.offsetParent == document.body)
+ if (Element.getStyle(element, 'position') == 'absolute') break;
+
+ element = element.offsetParent;
+ } while (element);
+
+ return Element._returnOffset(valueL, valueT);
+ };
+}
+
+if ('outerHTML' in document.documentElement) {
+ Element.Methods.replace = function(element, content) {
+ element = DOKUid(element);
+
+ if (content && content.toElement) content = content.toElement();
+ if (Object.isElement(content)) {
+ element.parentNode.replaceChild(content, element);
+ return element;
+ }
+
+ content = Object.toHTML(content);
+ var parent = element.parentNode, tagName = parent.tagName.toUpperCase();
+
+ if (Element._insertionTranslations.tags[tagName]) {
+ var nextSibling = element.next();
+ var fragments = Element._getContentFromAnonymousElement(tagName, content.stripScripts());
+ parent.removeChild(element);
+ if (nextSibling)
+ fragments.each(function(node) { parent.insertBefore(node, nextSibling) });
+ else
+ fragments.each(function(node) { parent.appendChild(node) });
+ }
+ else element.outerHTML = content.stripScripts();
+
+ content.evalScripts.bind(content).defer();
+ return element;
+ };
+}
+
+Element._returnOffset = function(l, t) {
+ var result = [l, t];
+ result.left = l;
+ result.top = t;
+ return result;
+};
+
+Element._getContentFromAnonymousElement = function(tagName, html) {
+ var div = new Element('div'), t = Element._insertionTranslations.tags[tagName];
+ if (t) {
+ div.innerHTML = t[0] + html + t[1];
+ t[2].times(function() { div = div.firstChild });
+ } else div.innerHTML = html;
+ return $A(div.childNodes);
+};
+
+Element._insertionTranslations = {
+ before: function(element, node) {
+ element.parentNode.insertBefore(node, element);
+ },
+ top: function(element, node) {
+ element.insertBefore(node, element.firstChild);
+ },
+ bottom: function(element, node) {
+ element.appendChild(node);
+ },
+ after: function(element, node) {
+ element.parentNode.insertBefore(node, element.nextSibling);
+ },
+ tags: {
+ TABLE: ['<table>', '</table>', 1],
+ TBODY: ['<table><tbody>', '</tbody></table>', 2],
+ TR: ['<table><tbody><tr>', '</tr></tbody></table>', 3],
+ TD: ['<table><tbody><tr><td>', '</td></tr></tbody></table>', 4],
+ SELECT: ['<select>', '</select>', 1]
+ }
+};
+
+(function() {
+ var tags = Element._insertionTranslations.tags;
+ Object.extend(tags, {
+ THEAD: tags.TBODY,
+ TFOOT: tags.TBODY,
+ TH: tags.TD
+ });
+})();
+
+Element.Methods.Simulated = {
+ hasAttribute: function(element, attribute) {
+ attribute = Element._attributeTranslations.has[attribute] || attribute;
+ var node = DOKUid(element).getAttributeNode(attribute);
+ return !!(node && node.specified);
+ }
+};
+
+Element.Methods.ByTag = { };
+
+Object.extend(Element, Element.Methods);
+
+(function(div) {
+
+ if (!Prototype.BrowserFeatures.ElementExtensions && div['__proto__']) {
+ window.HTMLElement = { };
+ window.HTMLElement.prototype = div['__proto__'];
+ Prototype.BrowserFeatures.ElementExtensions = true;
+ }
+
+ div = null;
+
+})(document.createElement('div'))
+
+Element.extend = (function() {
+
+ function checkDeficiency(tagName) {
+ if (typeof window.Element != 'undefined') {
+ var proto = window.Element.prototype;
+ if (proto) {
+ var id = '_' + (Math.random()+'').slice(2);
+ var el = document.createElement(tagName);
+ proto[id] = 'x';
+ var isBuggy = (el[id] !== 'x');
+ delete proto[id];
+ el = null;
+ return isBuggy;
+ }
+ }
+ return false;
+ }
+
+ function extendElementWith(element, methods) {
+ for (var property in methods) {
+ var value = methods[property];
+ if (Object.isFunction(value) && !(property in element))
+ element[property] = value.methodize();
+ }
+ }
+
+ var HTMLOBJECTELEMENT_PROTOTYPE_BUGGY = checkDeficiency('object');
+
+ if (Prototype.BrowserFeatures.SpecificElementExtensions) {
+ if (HTMLOBJECTELEMENT_PROTOTYPE_BUGGY) {
+ return function(element) {
+ if (element && typeof element._extendedByPrototype == 'undefined') {
+ var t = element.tagName;
+ if (t && (/^(?:object|applet|embed)$/i.test(t))) {
+ extendElementWith(element, Element.Methods);
+ extendElementWith(element, Element.Methods.Simulated);
+ extendElementWith(element, Element.Methods.ByTag[t.toUpperCase()]);
+ }
+ }
+ return element;
+ }
+ }
+ return Prototype.K;
+ }
+
+ var Methods = { }, ByTag = Element.Methods.ByTag;
+
+ var extend = Object.extend(function(element) {
+ if (!element || typeof element._extendedByPrototype != 'undefined' ||
+ element.nodeType != 1 || element == window) return element;
+
+ var methods = Object.clone(Methods),
+ tagName = element.tagName.toUpperCase();
+
+ if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]);
+
+ extendElementWith(element, methods);
+
+ element._extendedByPrototype = Prototype.emptyFunction;
+ return element;
+
+ }, {
+ refresh: function() {
+ if (!Prototype.BrowserFeatures.ElementExtensions) {
+ Object.extend(Methods, Element.Methods);
+ Object.extend(Methods, Element.Methods.Simulated);
+ }
+ }
+ });
+
+ extend.refresh();
+ return extend;
+})();
+
+Element.hasAttribute = function(element, attribute) {
+ if (element.hasAttribute) return element.hasAttribute(attribute);
+ return Element.Methods.Simulated.hasAttribute(element, attribute);
+};
+
+Element.addMethods = function(methods) {
+ var F = Prototype.BrowserFeatures, T = Element.Methods.ByTag;
+
+ if (!methods) {
+ Object.extend(Form, Form.Methods);
+ Object.extend(Form.Element, Form.Element.Methods);
+ Object.extend(Element.Methods.ByTag, {
+ "FORM": Object.clone(Form.Methods),
+ "INPUT": Object.clone(Form.Element.Methods),
+ "SELECT": Object.clone(Form.Element.Methods),
+ "TEXTAREA": Object.clone(Form.Element.Methods)
+ });
+ }
+
+ if (arguments.length == 2) {
+ var tagName = methods;
+ methods = arguments[1];
+ }
+
+ if (!tagName) Object.extend(Element.Methods, methods || { });
+ else {
+ if (Object.isArray(tagName)) tagName.each(extend);
+ else extend(tagName);
+ }
+
+ function extend(tagName) {
+ tagName = tagName.toUpperCase();
+ if (!Element.Methods.ByTag[tagName])
+ Element.Methods.ByTag[tagName] = { };
+ Object.extend(Element.Methods.ByTag[tagName], methods);
+ }
+
+ function copy(methods, destination, onlyIfAbsent) {
+ onlyIfAbsent = onlyIfAbsent || false;
+ for (var property in methods) {
+ var value = methods[property];
+ if (!Object.isFunction(value)) continue;
+ if (!onlyIfAbsent || !(property in destination))
+ destination[property] = value.methodize();
+ }
+ }
+
+ function findDOMClass(tagName) {
+ var klass;
+ var trans = {
+ "OPTGROUP": "OptGroup", "TEXTAREA": "TextArea", "P": "Paragraph",
+ "FIELDSET": "FieldSet", "UL": "UList", "OL": "OList", "DL": "DList",
+ "DIR": "Directory", "H1": "Heading", "H2": "Heading", "H3": "Heading",
+ "H4": "Heading", "H5": "Heading", "H6": "Heading", "Q": "Quote",
+ "INS": "Mod", "DEL": "Mod", "A": "Anchor", "IMG": "Image", "CAPTION":
+ "TableCaption", "COL": "TableCol", "COLGROUP": "TableCol", "THEAD":
+ "TableSection", "TFOOT": "TableSection", "TBODY": "TableSection", "TR":
+ "TableRow", "TH": "TableCell", "TD": "TableCell", "FRAMESET":
+ "FrameSet", "IFRAME": "IFrame"
+ };
+ if (trans[tagName]) klass = 'HTML' + trans[tagName] + 'Element';
+ if (window[klass]) return window[klass];
+ klass = 'HTML' + tagName + 'Element';
+ if (window[klass]) return window[klass];
+ klass = 'HTML' + tagName.capitalize() + 'Element';
+ if (window[klass]) return window[klass];
+
+ var element = document.createElement(tagName);
+ var proto = element['__proto__'] || element.constructor.prototype;
+ element = null;
+ return proto;
+ }
+
+ var elementPrototype = window.HTMLElement ? HTMLElement.prototype :
+ Element.prototype;
+
+ if (F.ElementExtensions) {
+ copy(Element.Methods, elementPrototype);
+ copy(Element.Methods.Simulated, elementPrototype, true);
+ }
+
+ if (F.SpecificElementExtensions) {
+ for (var tag in Element.Methods.ByTag) {
+ var klass = findDOMClass(tag);
+ if (Object.isUndefined(klass)) continue;
+ copy(T[tag], klass.prototype);
+ }
+ }
+
+ Object.extend(Element, Element.Methods);
+ delete Element.ByTag;
+
+ if (Element.extend.refresh) Element.extend.refresh();
+ Element.cache = { };
+};
+
+
+document.viewport = {
+
+ getDimensions: function() {
+ return { width: this.getWidth(), height: this.getHeight() };
+ },
+
+ getScrollOffsets: function() {
+ return Element._returnOffset(
+ window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft,
+ window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop);
+ }
+};
+
+(function(viewport) {
+ var B = Prototype.Browser, doc = document, element, property = {};
+
+ function getRootElement() {
+ if (B.WebKit && !doc.evaluate)
+ return document;
+
+ if (B.Opera && window.parseFloat(window.opera.version()) < 9.5)
+ return document.body;
+
+ return document.documentElement;
+ }
+
+ function define(D) {
+ if (!element) element = getRootElement();
+
+ property[D] = 'client' + D;
+
+ viewport['get' + D] = function() { return element[property[D]] };
+ return viewport['get' + D]();
+ }
+
+ viewport.getWidth = define.curry('Width');
+
+ viewport.getHeight = define.curry('Height');
+})(document.viewport);
+
+
+Element.Storage = {
+ UID: 1
+};
+
+Element.addMethods({
+ getStorage: function(element) {
+ if (!(element = DOKUid(element))) return;
+
+ var uid;
+ if (element === window) {
+ uid = 0;
+ } else {
+ if (typeof element._prototypeUID === "undefined")
+ element._prototypeUID = [Element.Storage.UID++];
+ uid = element._prototypeUID[0];
+ }
+
+ if (!Element.Storage[uid])
+ Element.Storage[uid] = $H();
+
+ return Element.Storage[uid];
+ },
+
+ store: function(element, key, value) {
+ if (!(element = DOKUid(element))) return;
+
+ if (arguments.length === 2) {
+ Element.getStorage(element).update(key);
+ } else {
+ Element.getStorage(element).set(key, value);
+ }
+
+ return element;
+ },
+
+ retrieve: function(element, key, defaultValue) {
+ if (!(element = DOKUid(element))) return;
+ var hash = Element.getStorage(element), value = hash.get(key);
+
+ if (Object.isUndefined(value)) {
+ hash.set(key, defaultValue);
+ value = defaultValue;
+ }
+
+ return value;
+ },
+
+ clone: function(element, deep) {
+ if (!(element = DOKUid(element))) return;
+ var clone = element.cloneNode(deep);
+ clone._prototypeUID = void 0;
+ if (deep) {
+ var descendants = Element.select(clone, '*'),
+ i = descendants.length;
+ while (i--) {
+ descendants[i]._prototypeUID = void 0;
+ }
+ }
+ return Element.extend(clone);
+ }
+});
+/* Portions of the Selector class are derived from Jack Slocum's DomQuery,
+ * part of YUI-Ext version 0.40, distributed under the terms of an MIT-style
+ * license. Please see http://www.yui-ext.com/ for more information. */
+
+var Selector = Class.create({
+ initialize: function(expression) {
+ this.expression = expression.strip();
+
+ if (this.shouldUseSelectorsAPI()) {
+ this.mode = 'selectorsAPI';
+ } else if (this.shouldUseXPath()) {
+ this.mode = 'xpath';
+ this.compileXPathMatcher();
+ } else {
+ this.mode = "normal";
+ this.compileMatcher();
+ }
+
+ },
+
+ shouldUseXPath: (function() {
+
+ var IS_DESCENDANT_SELECTOR_BUGGY = (function(){
+ var isBuggy = false;
+ if (document.evaluate && window.XPathResult) {
+ var el = document.createElement('div');
+ el.innerHTML = '<ul><li></li></ul><div><ul><li></li></ul></div>';
+
+ var xpath = ".//*[local-name()='ul' or local-name()='UL']" +
+ "//*[local-name()='li' or local-name()='LI']";
+
+ var result = document.evaluate(xpath, el, null,
+ XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
+
+ isBuggy = (result.snapshotLength !== 2);
+ el = null;
+ }
+ return isBuggy;
+ })();
+
+ return function() {
+ if (!Prototype.BrowserFeatures.XPath) return false;
+
+ var e = this.expression;
+
+ if (Prototype.Browser.WebKit &&
+ (e.include("-of-type") || e.include(":empty")))
+ return false;
+
+ if ((/(\[[\w-]*?:|:checked)/).test(e))
+ return false;
+
+ if (IS_DESCENDANT_SELECTOR_BUGGY) return false;
+
+ return true;
+ }
+
+ })(),
+
+ shouldUseSelectorsAPI: function() {
+ if (!Prototype.BrowserFeatures.SelectorsAPI) return false;
+
+ if (Selector.CASE_INSENSITIVE_CLASS_NAMES) return false;
+
+ if (!Selector._div) Selector._div = new Element('div');
+
+ try {
+ Selector._div.querySelector(this.expression);
+ } catch(e) {
+ return false;
+ }
+
+ return true;
+ },
+
+ compileMatcher: function() {
+ var e = this.expression, ps = Selector.patterns, h = Selector.handlers,
+ c = Selector.criteria, le, p, m, len = ps.length, name;
+
+ if (Selector._cache[e]) {
+ this.matcher = Selector._cache[e];
+ return;
+ }
+
+ this.matcher = ["this.matcher = function(root) {",
+ "var r = root, h = Selector.handlers, c = false, n;"];
+
+ while (e && le != e && (/\S/).test(e)) {
+ le = e;
+ for (var i = 0; i<len; i++) {
+ p = ps[i].re;
+ name = ps[i].name;
+ if (m = e.match(p)) {
+ this.matcher.push(Object.isFunction(c[name]) ? c[name](m) :
+ new Template(c[name]).evaluate(m));
+ e = e.replace(m[0], '');
+ break;
+ }
+ }
+ }
+
+ this.matcher.push("return h.unique(n);\n}");
+ eval(this.matcher.join('\n'));
+ Selector._cache[this.expression] = this.matcher;
+ },
+
+ compileXPathMatcher: function() {
+ var e = this.expression, ps = Selector.patterns,
+ x = Selector.xpath, le, m, len = ps.length, name;
+
+ if (Selector._cache[e]) {
+ this.xpath = Selector._cache[e]; return;
+ }
+
+ this.matcher = ['.//*'];
+ while (e && le != e && (/\S/).test(e)) {
+ le = e;
+ for (var i = 0; i<len; i++) {
+ name = ps[i].name;
+ if (m = e.match(ps[i].re)) {
+ this.matcher.push(Object.isFunction(x[name]) ? x[name](m) :
+ new Template(x[name]).evaluate(m));
+ e = e.replace(m[0], '');
+ break;
+ }
+ }
+ }
+
+ this.xpath = this.matcher.join('');
+ Selector._cache[this.expression] = this.xpath;
+ },
+
+ findElements: function(root) {
+ root = root || document;
+ var e = this.expression, results;
+
+ switch (this.mode) {
+ case 'selectorsAPI':
+ if (root !== document) {
+ var oldId = root.id, id = DOKUid(root).identify();
+ id = id.replace(/([\.:])/g, "\\$1");
+ e = "#" + id + " " + e;
+ }
+
+ results = $A(root.querySelectorAll(e)).map(Element.extend);
+ root.id = oldId;
+
+ return results;
+ case 'xpath':
+ return document._getElementsByXPath(this.xpath, root);
+ default:
+ return this.matcher(root);
+ }
+ },
+
+ match: function(element) {
+ this.tokens = [];
+
+ var e = this.expression, ps = Selector.patterns, as = Selector.assertions;
+ var le, p, m, len = ps.length, name;
+
+ while (e && le !== e && (/\S/).test(e)) {
+ le = e;
+ for (var i = 0; i<len; i++) {
+ p = ps[i].re;
+ name = ps[i].name;
+ if (m = e.match(p)) {
+ if (as[name]) {
+ this.tokens.push([name, Object.clone(m)]);
+ e = e.replace(m[0], '');
+ } else {
+ return this.findElements(document).include(element);
+ }
+ }
+ }
+ }
+
+ var match = true, name, matches;
+ for (var i = 0, token; token = this.tokens[i]; i++) {
+ name = token[0], matches = token[1];
+ if (!Selector.assertions[name](element, matches)) {
+ match = false; break;
+ }
+ }
+
+ return match;
+ },
+
+ toString: function() {
+ return this.expression;
+ },
+
+ inspect: function() {
+ return "#<Selector:" + this.expression.inspect() + ">";
+ }
+});
+
+if (Prototype.BrowserFeatures.SelectorsAPI &&
+ document.compatMode === 'BackCompat') {
+ Selector.CASE_INSENSITIVE_CLASS_NAMES = (function(){
+ var div = document.createElement('div'),
+ span = document.createElement('span');
+
+ div.id = "prototype_test_id";
+ span.className = 'Test';
+ div.appendChild(span);
+ var isIgnored = (div.querySelector('#prototype_test_id .test') !== null);
+ div = span = null;
+ return isIgnored;
+ })();
+}
+
+Object.extend(Selector, {
+ _cache: { },
+
+ xpath: {
+ descendant: "//*",
+ child: "/*",
+ adjacent: "/following-sibling::*[1]",
+ laterSibling: '/following-sibling::*',
+ tagName: function(m) {
+ if (m[1] == '*') return '';
+ return "[local-name()='" + m[1].toLowerCase() +
+ "' or local-name()='" + m[1].toUpperCase() + "']";
+ },
+ className: "[contains(concat(' ', @class, ' '), ' #{1} ')]",
+ id: "[@id='#{1}']",
+ attrPresence: function(m) {
+ m[1] = m[1].toLowerCase();
+ return new Template("[@#{1}]").evaluate(m);
+ },
+ attr: function(m) {
+ m[1] = m[1].toLowerCase();
+ m[3] = m[5] || m[6];
+ return new Template(Selector.xpath.operators[m[2]]).evaluate(m);
+ },
+ pseudo: function(m) {
+ var h = Selector.xpath.pseudos[m[1]];
+ if (!h) return '';
+ if (Object.isFunction(h)) return h(m);
+ return new Template(Selector.xpath.pseudos[m[1]]).evaluate(m);
+ },
+ operators: {
+ '=': "[@#{1}='#{3}']",
+ '!=': "[@#{1}!='#{3}']",
+ '^=': "[starts-with(@#{1}, '#{3}')]",
+ '$=': "[substring(@#{1}, (string-length(@#{1}) - string-length('#{3}') + 1))='#{3}']",
+ '*=': "[contains(@#{1}, '#{3}')]",
+ '~=': "[contains(concat(' ', @#{1}, ' '), ' #{3} ')]",
+ '|=': "[contains(concat('-', @#{1}, '-'), '-#{3}-')]"
+ },
+ pseudos: {
+ 'first-child': '[not(preceding-sibling::*)]',
+ 'last-child': '[not(following-sibling::*)]',
+ 'only-child': '[not(preceding-sibling::* or following-sibling::*)]',
+ 'empty': "[count(*) = 0 and (count(text()) = 0)]",
+ 'checked': "[@checked]",
+ 'disabled': "[(@disabled) and (@type!='hidden')]",
+ 'enabled': "[not(@disabled) and (@type!='hidden')]",
+ 'not': function(m) {
+ var e = m[6], p = Selector.patterns,
+ x = Selector.xpath, le, v, len = p.length, name;
+
+ var exclusion = [];
+ while (e && le != e && (/\S/).test(e)) {
+ le = e;
+ for (var i = 0; i<len; i++) {
+ name = p[i].name
+ if (m = e.match(p[i].re)) {
+ v = Object.isFunction(x[name]) ? x[name](m) : new Template(x[name]).evaluate(m);
+ exclusion.push("(" + v.substring(1, v.length - 1) + ")");
+ e = e.replace(m[0], '');
+ break;
+ }
+ }
+ }
+ return "[not(" + exclusion.join(" and ") + ")]";
+ },
+ 'nth-child': function(m) {
+ return Selector.xpath.pseudos.nth("(count(./preceding-sibling::*) + 1) ", m);
+ },
+ 'nth-last-child': function(m) {
+ return Selector.xpath.pseudos.nth("(count(./following-sibling::*) + 1) ", m);
+ },
+ 'nth-of-type': function(m) {
+ return Selector.xpath.pseudos.nth("position() ", m);
+ },
+ 'nth-last-of-type': function(m) {
+ return Selector.xpath.pseudos.nth("(last() + 1 - position()) ", m);
+ },
+ 'first-of-type': function(m) {
+ m[6] = "1"; return Selector.xpath.pseudos['nth-of-type'](m);
+ },
+ 'last-of-type': function(m) {
+ m[6] = "1"; return Selector.xpath.pseudos['nth-last-of-type'](m);
+ },
+ 'only-of-type': function(m) {
+ var p = Selector.xpath.pseudos; return p['first-of-type'](m) + p['last-of-type'](m);
+ },
+ nth: function(fragment, m) {
+ var mm, formula = m[6], predicate;
+ if (formula == 'even') formula = '2n+0';
+ if (formula == 'odd') formula = '2n+1';
+ if (mm = formula.match(/^(\d+)$/)) // digit only
+ return '[' + fragment + "= " + mm[1] + ']';
+ if (mm = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b
+ if (mm[1] == "-") mm[1] = -1;
+ var a = mm[1] ? Number(mm[1]) : 1;
+ var b = mm[2] ? Number(mm[2]) : 0;
+ predicate = "[((#{fragment} - #{b}) mod #{a} = 0) and " +
+ "((#{fragment} - #{b}) div #{a} >= 0)]";
+ return new Template(predicate).evaluate({
+ fragment: fragment, a: a, b: b });
+ }
+ }
+ }
+ },
+
+ criteria: {
+ tagName: 'n = h.tagName(n, r, "#{1}", c); c = false;',
+ className: 'n = h.className(n, r, "#{1}", c); c = false;',
+ id: 'n = h.id(n, r, "#{1}", c); c = false;',
+ attrPresence: 'n = h.attrPresence(n, r, "#{1}", c); c = false;',
+ attr: function(m) {
+ m[3] = (m[5] || m[6]);
+ return new Template('n = h.attr(n, r, "#{1}", "#{3}", "#{2}", c); c = false;').evaluate(m);
+ },
+ pseudo: function(m) {
+ if (m[6]) m[6] = m[6].replace(/"/g, '\\"');
+ return new Template('n = h.pseudo(n, "#{1}", "#{6}", r, c); c = false;').evaluate(m);
+ },
+ descendant: 'c = "descendant";',
+ child: 'c = "child";',
+ adjacent: 'c = "adjacent";',
+ laterSibling: 'c = "laterSibling";'
+ },
+
+ patterns: [
+ { name: 'laterSibling', re: /^\s*~\s*/ },
+ { name: 'child', re: /^\s*>\s*/ },
+ { name: 'adjacent', re: /^\s*\+\s*/ },
+ { name: 'descendant', re: /^\s/ },
+
+ { name: 'tagName', re: /^\s*(\*|[\w\-]+)(\b|$)?/ },
+ { name: 'id', re: /^#([\w\-\*]+)(\b|$)/ },
+ { name: 'className', re: /^\.([\w\-\*]+)(\b|$)/ },
+ { name: 'pseudo', re: /^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|(?=\s|[:+~>]))/ },
+ { name: 'attrPresence', re: /^\[((?:[\w-]+:)?[\w-]+)\]/ },
+ { name: 'attr', re: /\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['"])([^\4]*?)\4|([^'"][^\]]*?)))?\]/ }
+ ],
+
+ assertions: {
+ tagName: function(element, matches) {
+ return matches[1].toUpperCase() == element.tagName.toUpperCase();
+ },
+
+ className: function(element, matches) {
+ return Element.hasClassName(element, matches[1]);
+ },
+
+ id: function(element, matches) {
+ return element.id === matches[1];
+ },
+
+ attrPresence: function(element, matches) {
+ return Element.hasAttribute(element, matches[1]);
+ },
+
+ attr: function(element, matches) {
+ var nodeValue = Element.readAttribute(element, matches[1]);
+ return nodeValue && Selector.operators[matches[2]](nodeValue, matches[5] || matches[6]);
+ }
+ },
+
+ handlers: {
+ concat: function(a, b) {
+ for (var i = 0, node; node = b[i]; i++)
+ a.push(node);
+ return a;
+ },
+
+ mark: function(nodes) {
+ var _true = Prototype.emptyFunction;
+ for (var i = 0, node; node = nodes[i]; i++)
+ node._countedByPrototype = _true;
+ return nodes;
+ },
+
+ unmark: (function(){
+
+ var PROPERTIES_ATTRIBUTES_MAP = (function(){
+ var el = document.createElement('div'),
+ isBuggy = false,
+ propName = '_countedByPrototype',
+ value = 'x'
+ el[propName] = value;
+ isBuggy = (el.getAttribute(propName) === value);
+ el = null;
+ return isBuggy;
+ })();
+
+ return PROPERTIES_ATTRIBUTES_MAP ?
+ function(nodes) {
+ for (var i = 0, node; node = nodes[i]; i++)
+ node.removeAttribute('_countedByPrototype');
+ return nodes;
+ } :
+ function(nodes) {
+ for (var i = 0, node; node = nodes[i]; i++)
+ node._countedByPrototype = void 0;
+ return nodes;
+ }
+ })(),
+
+ index: function(parentNode, reverse, ofType) {
+ parentNode._countedByPrototype = Prototype.emptyFunction;
+ if (reverse) {
+ for (var nodes = parentNode.childNodes, i = nodes.length - 1, j = 1; i >= 0; i--) {
+ var node = nodes[i];
+ if (node.nodeType == 1 && (!ofType || node._countedByPrototype)) node.nodeIndex = j++;
+ }
+ } else {
+ for (var i = 0, j = 1, nodes = parentNode.childNodes; node = nodes[i]; i++)
+ if (node.nodeType == 1 && (!ofType || node._countedByPrototype)) node.nodeIndex = j++;
+ }
+ },
+
+ unique: function(nodes) {
+ if (nodes.length == 0) return nodes;
+ var results = [], n;
+ for (var i = 0, l = nodes.length; i < l; i++)
+ if (typeof (n = nodes[i])._countedByPrototype == 'undefined') {
+ n._countedByPrototype = Prototype.emptyFunction;
+ results.push(Element.extend(n));
+ }
+ return Selector.handlers.unmark(results);
+ },
+
+ descendant: function(nodes) {
+ var h = Selector.handlers;
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ h.concat(results, node.getElementsByTagName('*'));
+ return results;
+ },
+
+ child: function(nodes) {
+ var h = Selector.handlers;
+ for (var i = 0, results = [], node; node = nodes[i]; i++) {
+ for (var j = 0, child; child = node.childNodes[j]; j++)
+ if (child.nodeType == 1 && child.tagName != '!') results.push(child);
+ }
+ return results;
+ },
+
+ adjacent: function(nodes) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++) {
+ var next = this.nextElementSibling(node);
+ if (next) results.push(next);
+ }
+ return results;
+ },
+
+ laterSibling: function(nodes) {
+ var h = Selector.handlers;
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ h.concat(results, Element.nextSiblings(node));
+ return results;
+ },
+
+ nextElementSibling: function(node) {
+ while (node = node.nextSibling)
+ if (node.nodeType == 1) return node;
+ return null;
+ },
+
+ previousElementSibling: function(node) {
+ while (node = node.previousSibling)
+ if (node.nodeType == 1) return node;
+ return null;
+ },
+
+ tagName: function(nodes, root, tagName, combinator) {
+ var uTagName = tagName.toUpperCase();
+ var results = [], h = Selector.handlers;
+ if (nodes) {
+ if (combinator) {
+ if (combinator == "descendant") {
+ for (var i = 0, node; node = nodes[i]; i++)
+ h.concat(results, node.getElementsByTagName(tagName));
+ return results;
+ } else nodes = this[combinator](nodes);
+ if (tagName == "*") return nodes;
+ }
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (node.tagName.toUpperCase() === uTagName) results.push(node);
+ return results;
+ } else return root.getElementsByTagName(tagName);
+ },
+
+ id: function(nodes, root, id, combinator) {
+ var targetNode = DOKUid(id), h = Selector.handlers;
+
+ if (root == document) {
+ if (!targetNode) return [];
+ if (!nodes) return [targetNode];
+ } else {
+ if (!root.sourceIndex || root.sourceIndex < 1) {
+ var nodes = root.getElementsByTagName('*');
+ for (var j = 0, node; node = nodes[j]; j++) {
+ if (node.id === id) return [node];
+ }
+ }
+ }
+
+ if (nodes) {
+ if (combinator) {
+ if (combinator == 'child') {
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (targetNode.parentNode == node) return [targetNode];
+ } else if (combinator == 'descendant') {
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (Element.descendantOf(targetNode, node)) return [targetNode];
+ } else if (combinator == 'adjacent') {
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (Selector.handlers.previousElementSibling(targetNode) == node)
+ return [targetNode];
+ } else nodes = h[combinator](nodes);
+ }
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (node == targetNode) return [targetNode];
+ return [];
+ }
+ return (targetNode && Element.descendantOf(targetNode, root)) ? [targetNode] : [];
+ },
+
+ className: function(nodes, root, className, combinator) {
+ if (nodes && combinator) nodes = this[combinator](nodes);
+ return Selector.handlers.byClassName(nodes, root, className);
+ },
+
+ byClassName: function(nodes, root, className) {
+ if (!nodes) nodes = Selector.handlers.descendant([root]);
+ var needle = ' ' + className + ' ';
+ for (var i = 0, results = [], node, nodeClassName; node = nodes[i]; i++) {
+ nodeClassName = node.className;
+ if (nodeClassName.length == 0) continue;
+ if (nodeClassName == className || (' ' + nodeClassName + ' ').include(needle))
+ results.push(node);
+ }
+ return results;
+ },
+
+ attrPresence: function(nodes, root, attr, combinator) {
+ if (!nodes) nodes = root.getElementsByTagName("*");
+ if (nodes && combinator) nodes = this[combinator](nodes);
+ var results = [];
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (Element.hasAttribute(node, attr)) results.push(node);
+ return results;
+ },
+
+ attr: function(nodes, root, attr, value, operator, combinator) {
+ if (!nodes) nodes = root.getElementsByTagName("*");
+ if (nodes && combinator) nodes = this[combinator](nodes);
+ var handler = Selector.operators[operator], results = [];
+ for (var i = 0, node; node = nodes[i]; i++) {
+ var nodeValue = Element.readAttribute(node, attr);
+ if (nodeValue === null) continue;
+ if (handler(nodeValue, value)) results.push(node);
+ }
+ return results;
+ },
+
+ pseudo: function(nodes, name, value, root, combinator) {
+ if (nodes && combinator) nodes = this[combinator](nodes);
+ if (!nodes) nodes = root.getElementsByTagName("*");
+ return Selector.pseudos[name](nodes, value, root);
+ }
+ },
+
+ pseudos: {
+ 'first-child': function(nodes, value, root) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++) {
+ if (Selector.handlers.previousElementSibling(node)) continue;
+ results.push(node);
+ }
+ return results;
+ },
+ 'last-child': function(nodes, value, root) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++) {
+ if (Selector.handlers.nextElementSibling(node)) continue;
+ results.push(node);
+ }
+ return results;
+ },
+ 'only-child': function(nodes, value, root) {
+ var h = Selector.handlers;
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ if (!h.previousElementSibling(node) && !h.nextElementSibling(node))
+ results.push(node);
+ return results;
+ },
+ 'nth-child': function(nodes, formula, root) {
+ return Selector.pseudos.nth(nodes, formula, root);
+ },
+ 'nth-last-child': function(nodes, formula, root) {
+ return Selector.pseudos.nth(nodes, formula, root, true);
+ },
+ 'nth-of-type': function(nodes, formula, root) {
+ return Selector.pseudos.nth(nodes, formula, root, false, true);
+ },
+ 'nth-last-of-type': function(nodes, formula, root) {
+ return Selector.pseudos.nth(nodes, formula, root, true, true);
+ },
+ 'first-of-type': function(nodes, formula, root) {
+ return Selector.pseudos.nth(nodes, "1", root, false, true);
+ },
+ 'last-of-type': function(nodes, formula, root) {
+ return Selector.pseudos.nth(nodes, "1", root, true, true);
+ },
+ 'only-of-type': function(nodes, formula, root) {
+ var p = Selector.pseudos;
+ return p['last-of-type'](p['first-of-type'](nodes, formula, root), formula, root);
+ },
+
+ getIndices: function(a, b, total) {
+ if (a == 0) return b > 0 ? [b] : [];
+ return $R(1, total).inject([], function(memo, i) {
+ if (0 == (i - b) % a && (i - b) / a >= 0) memo.push(i);
+ return memo;
+ });
+ },
+
+ nth: function(nodes, formula, root, reverse, ofType) {
+ if (nodes.length == 0) return [];
+ if (formula == 'even') formula = '2n+0';
+ if (formula == 'odd') formula = '2n+1';
+ var h = Selector.handlers, results = [], indexed = [], m;
+ h.mark(nodes);
+ for (var i = 0, node; node = nodes[i]; i++) {
+ if (!node.parentNode._countedByPrototype) {
+ h.index(node.parentNode, reverse, ofType);
+ indexed.push(node.parentNode);
+ }
+ }
+ if (formula.match(/^\d+$/)) { // just a number
+ formula = Number(formula);
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (node.nodeIndex == formula) results.push(node);
+ } else if (m = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b
+ if (m[1] == "-") m[1] = -1;
+ var a = m[1] ? Number(m[1]) : 1;
+ var b = m[2] ? Number(m[2]) : 0;
+ var indices = Selector.pseudos.getIndices(a, b, nodes.length);
+ for (var i = 0, node, l = indices.length; node = nodes[i]; i++) {
+ for (var j = 0; j < l; j++)
+ if (node.nodeIndex == indices[j]) results.push(node);
+ }
+ }
+ h.unmark(nodes);
+ h.unmark(indexed);
+ return results;
+ },
+
+ 'empty': function(nodes, value, root) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++) {
+ if (node.tagName == '!' || node.firstChild) continue;
+ results.push(node);
+ }
+ return results;
+ },
+
+ 'not': function(nodes, selector, root) {
+ var h = Selector.handlers, selectorType, m;
+ var exclusions = new Selector(selector).findElements(root);
+ h.mark(exclusions);
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ if (!node._countedByPrototype) results.push(node);
+ h.unmark(exclusions);
+ return results;
+ },
+
+ 'enabled': function(nodes, value, root) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ if (!node.disabled && (!node.type || node.type !== 'hidden'))
+ results.push(node);
+ return results;
+ },
+
+ 'disabled': function(nodes, value, root) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ if (node.disabled) results.push(node);
+ return results;
+ },
+
+ 'checked': function(nodes, value, root) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ if (node.checked) results.push(node);
+ return results;
+ }
+ },
+
+ operators: {
+ '=': function(nv, v) { return nv == v; },
+ '!=': function(nv, v) { return nv != v; },
+ '^=': function(nv, v) { return nv == v || nv && nv.startsWith(v); },
+ '$=': function(nv, v) { return nv == v || nv && nv.endsWith(v); },
+ '*=': function(nv, v) { return nv == v || nv && nv.include(v); },
+ '~=': function(nv, v) { return (' ' + nv + ' ').include(' ' + v + ' '); },
+ '|=': function(nv, v) { return ('-' + (nv || "").toUpperCase() +
+ '-').include('-' + (v || "").toUpperCase() + '-'); }
+ },
+
+ split: function(expression) {
+ var expressions = [];
+ expression.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/, function(m) {
+ expressions.push(m[1].strip());
+ });
+ return expressions;
+ },
+
+ matchElements: function(elements, expression) {
+ var matches = $$(expression), h = Selector.handlers;
+ h.mark(matches);
+ for (var i = 0, results = [], element; element = elements[i]; i++)
+ if (element._countedByPrototype) results.push(element);
+ h.unmark(matches);
+ return results;
+ },
+
+ findElement: function(elements, expression, index) {
+ if (Object.isNumber(expression)) {
+ index = expression; expression = false;
+ }
+ return Selector.matchElements(elements, expression || '*')[index || 0];
+ },
+
+ findChildElements: function(element, expressions) {
+ expressions = Selector.split(expressions.join(','));
+ var results = [], h = Selector.handlers;
+ for (var i = 0, l = expressions.length, selector; i < l; i++) {
+ selector = new Selector(expressions[i].strip());
+ h.concat(results, selector.findElements(element));
+ }
+ return (l > 1) ? h.unique(results) : results;
+ }
+});
+
+if (Prototype.Browser.IE) {
+ Object.extend(Selector.handlers, {
+ concat: function(a, b) {
+ for (var i = 0, node; node = b[i]; i++)
+ if (node.tagName !== "!") a.push(node);
+ return a;
+ }
+ });
+}
+
+function $$() {
+ return Selector.findChildElements(document, $A(arguments));
+}
+
+var Form = {
+ reset: function(form) {
+ form = DOKUid(form);
+ form.reset();
+ return form;
+ },
+
+ serializeElements: function(elements, options) {
+ if (typeof options != 'object') options = { hash: !!options };
+ else if (Object.isUndefined(options.hash)) options.hash = true;
+ var key, value, submitted = false, submit = options.submit;
+
+ var data = elements.inject({ }, function(result, element) {
+ if (!element.disabled && element.name) {
+ key = element.name; value = DOKUid(element).getValue();
+ if (value != null && element.type != 'file' && (element.type != 'submit' || (!submitted &&
+ submit !== false && (!submit || key == submit) && (submitted = true)))) {
+ if (key in result) {
+ if (!Object.isArray(result[key])) result[key] = [result[key]];
+ result[key].push(value);
+ }
+ else result[key] = value;
+ }
+ }
+ return result;
+ });
+
+ return options.hash ? data : Object.toQueryString(data);
+ }
+};
+
+Form.Methods = {
+ serialize: function(form, options) {
+ return Form.serializeElements(Form.getElements(form), options);
+ },
+
+ getElements: function(form) {
+ var elements = DOKUid(form).getElementsByTagName('*'),
+ element,
+ arr = [ ],
+ serializers = Form.Element.Serializers;
+ for (var i = 0; element = elements[i]; i++) {
+ arr.push(element);
+ }
+ return arr.inject([], function(elements, child) {
+ if (serializers[child.tagName.toLowerCase()])
+ elements.push(Element.extend(child));
+ return elements;
+ })
+ },
+
+ getInputs: function(form, typeName, name) {
+ form = DOKUid(form);
+ var inputs = form.getElementsByTagName('input');
+
+ if (!typeName && !name) return $A(inputs).map(Element.extend);
+
+ for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) {
+ var input = inputs[i];
+ if ((typeName && input.type != typeName) || (name && input.name != name))
+ continue;
+ matchingInputs.push(Element.extend(input));
+ }
+
+ return matchingInputs;
+ },
+
+ disable: function(form) {
+ form = DOKUid(form);
+ Form.getElements(form).invoke('disable');
+ return form;
+ },
+
+ enable: function(form) {
+ form = DOKUid(form);
+ Form.getElements(form).invoke('enable');
+ return form;
+ },
+
+ findFirstElement: function(form) {
+ var elements = DOKUid(form).getElements().findAll(function(element) {
+ return 'hidden' != element.type && !element.disabled;
+ });
+ var firstByIndex = elements.findAll(function(element) {
+ return element.hasAttribute('tabIndex') && element.tabIndex >= 0;
+ }).sortBy(function(element) { return element.tabIndex }).first();
+
+ return firstByIndex ? firstByIndex : elements.find(function(element) {
+ return /^(?:input|select|textarea)$/i.test(element.tagName);
+ });
+ },
+
+ focusFirstElement: function(form) {
+ form = DOKUid(form);
+ form.findFirstElement().activate();
+ return form;
+ },
+
+ request: function(form, options) {
+ form = DOKUid(form), options = Object.clone(options || { });
+
+ var params = options.parameters, action = form.readAttribute('action') || '';
+ if (action.blank()) action = window.location.href;
+ options.parameters = form.serialize(true);
+
+ if (params) {
+ if (Object.isString(params)) params = params.toQueryParams();
+ Object.extend(options.parameters, params);
+ }
+
+ if (form.hasAttribute('method') && !options.method)
+ options.method = form.method;
+
+ return new Ajax.Request(action, options);
+ }
+};
+
+/*--------------------------------------------------------------------------*/
+
+
+Form.Element = {
+ focus: function(element) {
+ DOKUid(element).focus();
+ return element;
+ },
+
+ select: function(element) {
+ DOKUid(element).select();
+ return element;
+ }
+};
+
+Form.Element.Methods = {
+
+ serialize: function(element) {
+ element = DOKUid(element);
+ if (!element.disabled && element.name) {
+ var value = element.getValue();
+ if (value != undefined) {
+ var pair = { };
+ pair[element.name] = value;
+ return Object.toQueryString(pair);
+ }
+ }
+ return '';
+ },
+
+ getValue: function(element) {
+ element = DOKUid(element);
+ var method = element.tagName.toLowerCase();
+ return Form.Element.Serializers[method](element);
+ },
+
+ setValue: function(element, value) {
+ element = DOKUid(element);
+ var method = element.tagName.toLowerCase();
+ Form.Element.Serializers[method](element, value);
+ return element;
+ },
+
+ clear: function(element) {
+ DOKUid(element).value = '';
+ return element;
+ },
+
+ present: function(element) {
+ return DOKUid(element).value != '';
+ },
+
+ activate: function(element) {
+ element = DOKUid(element);
+ try {
+ element.focus();
+ if (element.select && (element.tagName.toLowerCase() != 'input' ||
+ !(/^(?:button|reset|submit)$/i.test(element.type))))
+ element.select();
+ } catch (e) { }
+ return element;
+ },
+
+ disable: function(element) {
+ element = DOKUid(element);
+ element.disabled = true;
+ return element;
+ },
+
+ enable: function(element) {
+ element = DOKUid(element);
+ element.disabled = false;
+ return element;
+ }
+};
+
+/*--------------------------------------------------------------------------*/
+
+var Field = Form.Element;
+
+var $F = Form.Element.Methods.getValue;
+
+/*--------------------------------------------------------------------------*/
+
+Form.Element.Serializers = {
+ input: function(element, value) {
+ switch (element.type.toLowerCase()) {
+ case 'checkbox':
+ case 'radio':
+ return Form.Element.Serializers.inputSelector(element, value);
+ default:
+ return Form.Element.Serializers.textarea(element, value);
+ }
+ },
+
+ inputSelector: function(element, value) {
+ if (Object.isUndefined(value)) return element.checked ? element.value : null;
+ else element.checked = !!value;
+ },
+
+ textarea: function(element, value) {
+ if (Object.isUndefined(value)) return element.value;
+ else element.value = value;
+ },
+
+ select: function(element, value) {
+ if (Object.isUndefined(value))
+ return this[element.type == 'select-one' ?
+ 'selectOne' : 'selectMany'](element);
+ else {
+ var opt, currentValue, single = !Object.isArray(value);
+ for (var i = 0, length = element.length; i < length; i++) {
+ opt = element.options[i];
+ currentValue = this.optionValue(opt);
+ if (single) {
+ if (currentValue == value) {
+ opt.selected = true;
+ return;
+ }
+ }
+ else opt.selected = value.include(currentValue);
+ }
+ }
+ },
+
+ selectOne: function(element) {
+ var index = element.selectedIndex;
+ return index >= 0 ? this.optionValue(element.options[index]) : null;
+ },
+
+ selectMany: function(element) {
+ var values, length = element.length;
+ if (!length) return null;
+
+ for (var i = 0, values = []; i < length; i++) {
+ var opt = element.options[i];
+ if (opt.selected) values.push(this.optionValue(opt));
+ }
+ return values;
+ },
+
+ optionValue: function(opt) {
+ return Element.extend(opt).hasAttribute('value') ? opt.value : opt.text;
+ }
+};
+
+/*--------------------------------------------------------------------------*/
+
+
+Abstract.TimedObserver = Class.create(PeriodicalExecuter, {
+ initialize: function($super, element, frequency, callback) {
+ $super(callback, frequency);
+ this.element = DOKUid(element);
+ this.lastValue = this.getValue();
+ },
+
+ execute: function() {
+ var value = this.getValue();
+ if (Object.isString(this.lastValue) && Object.isString(value) ?
+ this.lastValue != value : String(this.lastValue) != String(value)) {
+ this.callback(this.element, value);
+ this.lastValue = value;
+ }
+ }
+});
+
+Form.Element.Observer = Class.create(Abstract.TimedObserver, {
+ getValue: function() {
+ return Form.Element.getValue(this.element);
+ }
+});
+
+Form.Observer = Class.create(Abstract.TimedObserver, {
+ getValue: function() {
+ return Form.serialize(this.element);
+ }
+});
+
+/*--------------------------------------------------------------------------*/
+
+Abstract.EventObserver = Class.create({
+ initialize: function(element, callback) {
+ this.element = DOKUid(element);
+ this.callback = callback;
+
+ this.lastValue = this.getValue();
+ if (this.element.tagName.toLowerCase() == 'form')
+ this.registerFormCallbacks();
+ else
+ this.registerCallback(this.element);
+ },
+
+ onElementEvent: function() {
+ var value = this.getValue();
+ if (this.lastValue != value) {
+ this.callback(this.element, value);
+ this.lastValue = value;
+ }
+ },
+
+ registerFormCallbacks: function() {
+ Form.getElements(this.element).each(this.registerCallback, this);
+ },
+
+ registerCallback: function(element) {
+ if (element.type) {
+ switch (element.type.toLowerCase()) {
+ case 'checkbox':
+ case 'radio':
+ Event.observe(element, 'click', this.onElementEvent.bind(this));
+ break;
+ default:
+ Event.observe(element, 'change', this.onElementEvent.bind(this));
+ break;
+ }
+ }
+ }
+});
+
+Form.Element.EventObserver = Class.create(Abstract.EventObserver, {
+ getValue: function() {
+ return Form.Element.getValue(this.element);
+ }
+});
+
+Form.EventObserver = Class.create(Abstract.EventObserver, {
+ getValue: function() {
+ return Form.serialize(this.element);
+ }
+});
+(function() {
+
+ var Event = {
+ KEY_BACKSPACE: 8,
+ KEY_TAB: 9,
+ KEY_RETURN: 13,
+ KEY_ESC: 27,
+ KEY_LEFT: 37,
+ KEY_UP: 38,
+ KEY_RIGHT: 39,
+ KEY_DOWN: 40,
+ KEY_DELETE: 46,
+ KEY_HOME: 36,
+ KEY_END: 35,
+ KEY_PAGEUP: 33,
+ KEY_PAGEDOWN: 34,
+ KEY_INSERT: 45,
+
+ cache: {}
+ };
+
+ var docEl = document.documentElement;
+ var MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED = 'onmouseenter' in docEl
+ && 'onmouseleave' in docEl;
+
+ var _isButton;
+ if (Prototype.Browser.IE) {
+ var buttonMap = { 0: 1, 1: 4, 2: 2 };
+ _isButton = function(event, code) {
+ return event.button === buttonMap[code];
+ };
+ } else if (Prototype.Browser.WebKit) {
+ _isButton = function(event, code) {
+ switch (code) {
+ case 0: return event.which == 1 && !event.metaKey;
+ case 1: return event.which == 1 && event.metaKey;
+ default: return false;
+ }
+ };
+ } else {
+ _isButton = function(event, code) {
+ return event.which ? (event.which === code + 1) : (event.button === code);
+ };
+ }
+
+ function isLeftClick(event) { return _isButton(event, 0) }
+
+ function isMiddleClick(event) { return _isButton(event, 1) }
+
+ function isRightClick(event) { return _isButton(event, 2) }
+
+ function element(event) {
+ event = Event.extend(event);
+
+ var node = event.target, type = event.type,
+ currentTarget = event.currentTarget;
+
+ if (currentTarget && currentTarget.tagName) {
+ if (type === 'load' || type === 'error' ||
+ (type === 'click' && currentTarget.tagName.toLowerCase() === 'input'
+ && currentTarget.type === 'radio'))
+ node = currentTarget;
+ }
+
+ if (node.nodeType == Node.TEXT_NODE)
+ node = node.parentNode;
+
+ return Element.extend(node);
+ }
+
+ function findElement(event, expression) {
+ var element = Event.element(event);
+ if (!expression) return element;
+ var elements = [element].concat(element.ancestors());
+ return Selector.findElement(elements, expression, 0);
+ }
+
+ function pointer(event) {
+ return { x: pointerX(event), y: pointerY(event) };
+ }
+
+ function pointerX(event) {
+ var docElement = document.documentElement,
+ body = document.body || { scrollLeft: 0 };
+
+ return event.pageX || (event.clientX +
+ (docElement.scrollLeft || body.scrollLeft) -
+ (docElement.clientLeft || 0));
+ }
+
+ function pointerY(event) {
+ var docElement = document.documentElement,
+ body = document.body || { scrollTop: 0 };
+
+ return event.pageY || (event.clientY +
+ (docElement.scrollTop || body.scrollTop) -
+ (docElement.clientTop || 0));
+ }
+
+
+ function stop(event) {
+ Event.extend(event);
+ event.preventDefault();
+ event.stopPropagation();
+
+ event.stopped = true;
+ }
+
+ Event.Methods = {
+ isLeftClick: isLeftClick,
+ isMiddleClick: isMiddleClick,
+ isRightClick: isRightClick,
+
+ element: element,
+ findElement: findElement,
+
+ pointer: pointer,
+ pointerX: pointerX,
+ pointerY: pointerY,
+
+ stop: stop
+ };
+
+
+ var methods = Object.keys(Event.Methods).inject({ }, function(m, name) {
+ m[name] = Event.Methods[name].methodize();
+ return m;
+ });
+
+ if (Prototype.Browser.IE) {
+ function _relatedTarget(event) {
+ var element;
+ switch (event.type) {
+ case 'mouseover': element = event.fromElement; break;
+ case 'mouseout': element = event.toElement; break;
+ default: return null;
+ }
+ return Element.extend(element);
+ }
+
+ Object.extend(methods, {
+ stopPropagation: function() { this.cancelBubble = true },
+ preventDefault: function() { this.returnValue = false },
+ inspect: function() { return '[object Event]' }
+ });
+
+ Event.extend = function(event, element) {
+ if (!event) return false;
+ if (event._extendedByPrototype) return event;
+
+ event._extendedByPrototype = Prototype.emptyFunction;
+ var pointer = Event.pointer(event);
+
+ Object.extend(event, {
+ target: event.srcElement || element,
+ relatedTarget: _relatedTarget(event),
+ pageX: pointer.x,
+ pageY: pointer.y
+ });
+
+ return Object.extend(event, methods);
+ };
+ } else {
+ Event.prototype = window.Event.prototype || document.createEvent('HTMLEvents').__proto__;
+ Object.extend(Event.prototype, methods);
+ Event.extend = Prototype.K;
+ }
+
+ function _createResponder(element, eventName, handler) {
+ var registry = Element.retrieve(element, 'prototype_event_registry');
+
+ if (Object.isUndefined(registry)) {
+ CACHE.push(element);
+ registry = Element.retrieve(element, 'prototype_event_registry', $H());
+ }
+
+ var respondersForEvent = registry.get(eventName);
+ if (Object.isUndefined(respondersForEvent)) {
+ respondersForEvent = [];
+ registry.set(eventName, respondersForEvent);
+ }
+
+ if (respondersForEvent.pluck('handler').include(handler)) return false;
+
+ var responder;
+ if (eventName.include(":")) {
+ responder = function(event) {
+ if (Object.isUndefined(event.eventName))
+ return false;
+
+ if (event.eventName !== eventName)
+ return false;
+
+ Event.extend(event, element);
+ handler.call(element, event);
+ };
+ } else {
+ if (!MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED &&
+ (eventName === "mouseenter" || eventName === "mouseleave")) {
+ if (eventName === "mouseenter" || eventName === "mouseleave") {
+ responder = function(event) {
+ Event.extend(event, element);
+
+ var parent = event.relatedTarget;
+ while (parent && parent !== element) {
+ try { parent = parent.parentNode; }
+ catch(e) { parent = element; }
+ }
+
+ if (parent === element) return;
+
+ handler.call(element, event);
+ };
+ }
+ } else {
+ responder = function(event) {
+ Event.extend(event, element);
+ handler.call(element, event);
+ };
+ }
+ }
+
+ responder.handler = handler;
+ respondersForEvent.push(responder);
+ return responder;
+ }
+
+ function _destroyCache() {
+ for (var i = 0, length = CACHE.length; i < length; i++) {
+ Event.stopObserving(CACHE[i]);
+ CACHE[i] = null;
+ }
+ }
+
+ var CACHE = [];
+
+ if (Prototype.Browser.IE)
+ window.attachEvent('onunload', _destroyCache);
+
+ if (Prototype.Browser.WebKit)
+ window.addEventListener('unload', Prototype.emptyFunction, false);
+
+
+ var _getDOMEventName = Prototype.K;
+
+ if (!MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED) {
+ _getDOMEventName = function(eventName) {
+ var translations = { mouseenter: "mouseover", mouseleave: "mouseout" };
+ return eventName in translations ? translations[eventName] : eventName;
+ };
+ }
+
+ function observe(element, eventName, handler) {
+ element = DOKUid(element);
+
+ var responder = _createResponder(element, eventName, handler);
+
+ if (!responder) return element;
+
+ if (eventName.include(':')) {
+ if (element.addEventListener)
+ element.addEventListener("dataavailable", responder, false);
+ else {
+ element.attachEvent("ondataavailable", responder);
+ element.attachEvent("onfilterchange", responder);
+ }
+ } else {
+ var actualEventName = _getDOMEventName(eventName);
+
+ if (element.addEventListener)
+ element.addEventListener(actualEventName, responder, false);
+ else
+ element.attachEvent("on" + actualEventName, responder);
+ }
+
+ return element;
+ }
+
+ function stopObserving(element, eventName, handler) {
+ element = DOKUid(element);
+
+ var registry = Element.retrieve(element, 'prototype_event_registry');
+
+ if (Object.isUndefined(registry)) return element;
+
+ if (eventName && !handler) {
+ var responders = registry.get(eventName);
+
+ if (Object.isUndefined(responders)) return element;
+
+ responders.each( function(r) {
+ Element.stopObserving(element, eventName, r.handler);
+ });
+ return element;
+ } else if (!eventName) {
+ registry.each( function(pair) {
+ var eventName = pair.key, responders = pair.value;
+
+ responders.each( function(r) {
+ Element.stopObserving(element, eventName, r.handler);
+ });
+ });
+ return element;
+ }
+
+ var responders = registry.get(eventName);
+
+ if (!responders) return;
+
+ var responder = responders.find( function(r) { return r.handler === handler; });
+ if (!responder) return element;
+
+ var actualEventName = _getDOMEventName(eventName);
+
+ if (eventName.include(':')) {
+ if (element.removeEventListener)
+ element.removeEventListener("dataavailable", responder, false);
+ else {
+ element.detachEvent("ondataavailable", responder);
+ element.detachEvent("onfilterchange", responder);
+ }
+ } else {
+ if (element.removeEventListener)
+ element.removeEventListener(actualEventName, responder, false);
+ else
+ element.detachEvent('on' + actualEventName, responder);
+ }
+
+ registry.set(eventName, responders.without(responder));
+
+ return element;
+ }
+
+ function fire(element, eventName, memo, bubble) {
+ element = DOKUid(element);
+
+ if (Object.isUndefined(bubble))
+ bubble = true;
+
+ if (element == document && document.createEvent && !element.dispatchEvent)
+ element = document.documentElement;
+
+ var event;
+ if (document.createEvent) {
+ event = document.createEvent('HTMLEvents');
+ event.initEvent('dataavailable', true, true);
+ } else {
+ event = document.createEventObject();
+ event.eventType = bubble ? 'ondataavailable' : 'onfilterchange';
+ }
+
+ event.eventName = eventName;
+ event.memo = memo || { };
+
+ if (document.createEvent)
+ element.dispatchEvent(event);
+ else
+ element.fireEvent(event.eventType, event);
+
+ return Event.extend(event);
+ }
+
+
+ Object.extend(Event, Event.Methods);
+
+ Object.extend(Event, {
+ fire: fire,
+ observe: observe,
+ stopObserving: stopObserving
+ });
+
+ Element.addMethods({
+ fire: fire,
+
+ observe: observe,
+
+ stopObserving: stopObserving
+ });
+
+ Object.extend(document, {
+ fire: fire.methodize(),
+
+ observe: observe.methodize(),
+
+ stopObserving: stopObserving.methodize(),
+
+ loaded: false
+ });
+
+ if (window.Event) Object.extend(window.Event, Event);
+ else window.Event = Event;
+})();
+
+(function() {
+ /* Support for the DOMContentLoaded event is based on work by Dan Webb,
+ Matthias Miller, Dean Edwards, John Resig, and Diego Perini. */
+
+ var timer;
+
+ function fireContentLoadedEvent() {
+ if (document.loaded) return;
+ if (timer) window.clearTimeout(timer);
+ document.loaded = true;
+ document.fire('dom:loaded');
+ }
+
+ function checkReadyState() {
+ if (document.readyState === 'complete') {
+ document.stopObserving('readystatechange', checkReadyState);
+ fireContentLoadedEvent();
+ }
+ }
+
+ function pollDoScroll() {
+ try { document.documentElement.doScroll('left'); }
+ catch(e) {
+ timer = pollDoScroll.defer();
+ return;
+ }
+ fireContentLoadedEvent();
+ }
+
+ if (document.addEventListener) {
+ document.addEventListener('DOMContentLoaded', fireContentLoadedEvent, false);
+ } else {
+ document.observe('readystatechange', checkReadyState);
+ if (window == top)
+ timer = pollDoScroll.defer();
+ }
+
+ Event.observe(window, 'load', fireContentLoadedEvent);
+})();
+
+Element.addMethods();
+
+/*------------------------------- DEPRECATED -------------------------------*/
+
+Hash.toQueryString = Object.toQueryString;
+
+var Toggle = { display: Element.toggle };
+
+Element.Methods.childOf = Element.Methods.descendantOf;
+
+var Insertion = {
+ Before: function(element, content) {
+ return Element.insert(element, {before:content});
+ },
+
+ Top: function(element, content) {
+ return Element.insert(element, {top:content});
+ },
+
+ Bottom: function(element, content) {
+ return Element.insert(element, {bottom:content});
+ },
+
+ After: function(element, content) {
+ return Element.insert(element, {after:content});
+ }
+};
+
+var $continue = new Error('"throw $continue" is deprecated, use "return" instead');
+
+var Position = {
+ includeScrollOffsets: false,
+
+ prepare: function() {
+ this.deltaX = window.pageXOffset
+ || document.documentElement.scrollLeft
+ || document.body.scrollLeft
+ || 0;
+ this.deltaY = window.pageYOffset
+ || document.documentElement.scrollTop
+ || document.body.scrollTop
+ || 0;
+ },
+
+ within: function(element, x, y) {
+ if (this.includeScrollOffsets)
+ return this.withinIncludingScrolloffsets(element, x, y);
+ this.xcomp = x;
+ this.ycomp = y;
+ this.offset = Element.cumulativeOffset(element);
+
+ return (y >= this.offset[1] &&
+ y < this.offset[1] + element.offsetHeight &&
+ x >= this.offset[0] &&
+ x < this.offset[0] + element.offsetWidth);
+ },
+
+ withinIncludingScrolloffsets: function(element, x, y) {
+ var offsetcache = Element.cumulativeScrollOffset(element);
+
+ this.xcomp = x + offsetcache[0] - this.deltaX;
+ this.ycomp = y + offsetcache[1] - this.deltaY;
+ this.offset = Element.cumulativeOffset(element);
+
+ return (this.ycomp >= this.offset[1] &&
+ this.ycomp < this.offset[1] + element.offsetHeight &&
+ this.xcomp >= this.offset[0] &&
+ this.xcomp < this.offset[0] + element.offsetWidth);
+ },
+
+ overlap: function(mode, element) {
+ if (!mode) return 0;
+ if (mode == 'vertical')
+ return ((this.offset[1] + element.offsetHeight) - this.ycomp) /
+ element.offsetHeight;
+ if (mode == 'horizontal')
+ return ((this.offset[0] + element.offsetWidth) - this.xcomp) /
+ element.offsetWidth;
+ },
+
+
+ cumulativeOffset: Element.Methods.cumulativeOffset,
+
+ positionedOffset: Element.Methods.positionedOffset,
+
+ absolutize: function(element) {
+ Position.prepare();
+ return Element.absolutize(element);
+ },
+
+ relativize: function(element) {
+ Position.prepare();
+ return Element.relativize(element);
+ },
+
+ realOffset: Element.Methods.cumulativeScrollOffset,
+
+ offsetParent: Element.Methods.getOffsetParent,
+
+ page: Element.Methods.viewportOffset,
+
+ clone: function(source, target, options) {
+ options = options || { };
+ return Element.clonePosition(target, source, options);
+ }
+};
+
+/*--------------------------------------------------------------------------*/
+
+if (!document.getElementsByClassName) document.getElementsByClassName = function(instanceMethods){
+ function iter(name) {
+ return name.blank() ? null : "[contains(concat(' ', @class, ' '), ' " + name + " ')]";
+ }
+
+ instanceMethods.getElementsByClassName = Prototype.BrowserFeatures.XPath ?
+ function(element, className) {
+ className = className.toString().strip();
+ var cond = /\s/.test(className) ? $w(className).map(iter).join('') : iter(className);
+ return cond ? document._getElementsByXPath('.//*' + cond, element) : [];
+ } : function(element, className) {
+ className = className.toString().strip();
+ var elements = [], classNames = (/\s/.test(className) ? $w(className) : null);
+ if (!classNames && !className) return elements;
+
+ var nodes = DOKUid(element).getElementsByTagName('*');
+ className = ' ' + className + ' ';
+
+ for (var i = 0, child, cn; child = nodes[i]; i++) {
+ if (child.className && (cn = ' ' + child.className + ' ') && (cn.include(className) ||
+ (classNames && classNames.all(function(name) {
+ return !name.toString().blank() && cn.include(' ' + name + ' ');
+ }))))
+ elements.push(Element.extend(child));
+ }
+ return elements;
+ };
+
+ return function(className, parentElement) {
+ return DOKUid(parentElement || document.body).getElementsByClassName(className);
+ };
+}(Element.Methods);
+
+/*--------------------------------------------------------------------------*/
+
+Element.ClassNames = Class.create();
+Element.ClassNames.prototype = {
+ initialize: function(element) {
+ this.element = DOKUid(element);
+ },
+
+ _each: function(iterator) {
+ this.element.className.split(/\s+/).select(function(name) {
+ return name.length > 0;
+ })._each(iterator);
+ },
+
+ set: function(className) {
+ this.element.className = className;
+ },
+
+ add: function(classNameToAdd) {
+ if (this.include(classNameToAdd)) return;
+ this.set($A(this).concat(classNameToAdd).join(' '));
+ },
+
+ remove: function(classNameToRemove) {
+ if (!this.include(classNameToRemove)) return;
+ this.set($A(this).without(classNameToRemove).join(' '));
+ },
+
+ toString: function() {
+ return $A(this).join(' ');
+ }
+};
+
+Object.extend(Element.ClassNames.prototype, Enumerable);
+
+/*--------------------------------------------------------------------------*/ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/scriptaculous.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/scriptaculous.js
new file mode 100644
index 000000000..37a0733a5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/scriptaculous.js
@@ -0,0 +1,68 @@
+// script.aculo.us scriptaculous.js v1.8.3, Thu Oct 08 11:23:33 +0200 2009
+
+// Copyright (c) 2005-2009 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+// For details, see the script.aculo.us web site: http://script.aculo.us/
+
+var Scriptaculous = {
+ Version: '1.8.3',
+ require: function(libraryName) {
+ try{
+ // inserting via DOM fails in Safari 2.0, so brute force approach
+ document.write('<script type="text/javascript" src="'+libraryName+'"><\/script>');
+ } catch(e) {
+ // for xhtml+xml served content, fall back to DOM methods
+ var script = document.createElement('script');
+ script.type = 'text/javascript';
+ script.src = libraryName;
+ document.getElementsByTagName('head')[0].appendChild(script);
+ }
+ },
+ REQUIRED_PROTOTYPE: '1.6.0.3',
+ load: function() {
+ function convertVersionString(versionString) {
+ var v = versionString.replace(/_.*|\./g, '');
+ v = parseInt(v + '0'.times(4-v.length));
+ return versionString.indexOf('_') > -1 ? v-1 : v;
+ }
+
+ if((typeof Prototype=='undefined') ||
+ (typeof Element == 'undefined') ||
+ (typeof Element.Methods=='undefined') ||
+ (convertVersionString(Prototype.Version) <
+ convertVersionString(Scriptaculous.REQUIRED_PROTOTYPE)))
+ throw("script.aculo.us requires the Prototype JavaScript framework >= " +
+ Scriptaculous.REQUIRED_PROTOTYPE);
+
+ var js = /scriptaculous\.js(\?.*)?$/;
+ $$('head script[src]').findAll(function(s) {
+ return s.src.match(js);
+ }).each(function(s) {
+ var path = s.src.replace(js, ''),
+ includes = s.src.match(/\?.*load=([a-z,]*)/);
+ (includes ? includes[1] : 'builder,effects,dragdrop,controls,slider').split(',').each(
+ function(include) { Scriptaculous.require(path+include+'.js') });
+ });
+ }
+};
+
+Scriptaculous.load(); \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/slider.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/slider.js
new file mode 100644
index 000000000..ac2fef2d5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/slider.js
@@ -0,0 +1,275 @@
+// script.aculo.us slider.js v1.8.3, Thu Oct 08 11:23:33 +0200 2009
+
+// Copyright (c) 2005-2009 Marty Haught, Thomas Fuchs
+//
+// script.aculo.us is freely distributable under the terms of an MIT-style license.
+// For details, see the script.aculo.us web site: http://script.aculo.us/
+
+if (!Control) var Control = { };
+
+// options:
+// axis: 'vertical', or 'horizontal' (default)
+//
+// callbacks:
+// onChange(value)
+// onSlide(value)
+Control.Slider = Class.create({
+ initialize: function(handle, track, options) {
+ var slider = this;
+
+ if (Object.isArray(handle)) {
+ this.handles = handle.collect( function(e) { return DOKUid(e) });
+ } else {
+ this.handles = [DOKUid(handle)];
+ }
+
+ this.track = DOKUid(track);
+ this.options = options || { };
+
+ this.axis = this.options.axis || 'horizontal';
+ this.increment = this.options.increment || 1;
+ this.step = parseInt(this.options.step || '1');
+ this.range = this.options.range || $R(0,1);
+
+ this.value = 0; // assure backwards compat
+ this.values = this.handles.map( function() { return 0 });
+ this.spans = this.options.spans ? this.options.spans.map(function(s){ return DOKUid(s) }) : false;
+ this.options.startSpan = DOKUid(this.options.startSpan || null);
+ this.options.endSpan = DOKUid(this.options.endSpan || null);
+
+ this.restricted = this.options.restricted || false;
+
+ this.maximum = this.options.maximum || this.range.end;
+ this.minimum = this.options.minimum || this.range.start;
+
+ // Will be used to align the handle onto the track, if necessary
+ this.alignX = parseInt(this.options.alignX || '0');
+ this.alignY = parseInt(this.options.alignY || '0');
+
+ this.trackLength = this.maximumOffset() - this.minimumOffset();
+
+ this.handleLength = this.isVertical() ?
+ (this.handles[0].offsetHeight != 0 ?
+ this.handles[0].offsetHeight : this.handles[0].style.height.replace(/px$/,"")) :
+ (this.handles[0].offsetWidth != 0 ? this.handles[0].offsetWidth :
+ this.handles[0].style.width.replace(/px$/,""));
+
+ this.active = false;
+ this.dragging = false;
+ this.disabled = false;
+
+ if (this.options.disabled) this.setDisabled();
+
+ // Allowed values array
+ this.allowedValues = this.options.values ? this.options.values.sortBy(Prototype.K) : false;
+ if (this.allowedValues) {
+ this.minimum = this.allowedValues.min();
+ this.maximum = this.allowedValues.max();
+ }
+
+ this.eventMouseDown = this.startDrag.bindAsEventListener(this);
+ this.eventMouseUp = this.endDrag.bindAsEventListener(this);
+ this.eventMouseMove = this.update.bindAsEventListener(this);
+
+ // Initialize handles in reverse (make sure first handle is active)
+ this.handles.each( function(h,i) {
+ i = slider.handles.length-1-i;
+ slider.setValue(parseFloat(
+ (Object.isArray(slider.options.sliderValue) ?
+ slider.options.sliderValue[i] : slider.options.sliderValue) ||
+ slider.range.start), i);
+ h.makePositioned().observe("mousedown", slider.eventMouseDown);
+ });
+
+ this.track.observe("mousedown", this.eventMouseDown);
+ document.observe("mouseup", this.eventMouseUp);
+ document.observe("mousemove", this.eventMouseMove);
+
+ this.initialized = true;
+ },
+ dispose: function() {
+ var slider = this;
+ Event.stopObserving(this.track, "mousedown", this.eventMouseDown);
+ Event.stopObserving(document, "mouseup", this.eventMouseUp);
+ Event.stopObserving(document, "mousemove", this.eventMouseMove);
+ this.handles.each( function(h) {
+ Event.stopObserving(h, "mousedown", slider.eventMouseDown);
+ });
+ },
+ setDisabled: function(){
+ this.disabled = true;
+ },
+ setEnabled: function(){
+ this.disabled = false;
+ },
+ getNearestValue: function(value){
+ if (this.allowedValues){
+ if (value >= this.allowedValues.max()) return(this.allowedValues.max());
+ if (value <= this.allowedValues.min()) return(this.allowedValues.min());
+
+ var offset = Math.abs(this.allowedValues[0] - value);
+ var newValue = this.allowedValues[0];
+ this.allowedValues.each( function(v) {
+ var currentOffset = Math.abs(v - value);
+ if (currentOffset <= offset){
+ newValue = v;
+ offset = currentOffset;
+ }
+ });
+ return newValue;
+ }
+ if (value > this.range.end) return this.range.end;
+ if (value < this.range.start) return this.range.start;
+ return value;
+ },
+ setValue: function(sliderValue, handleIdx){
+ if (!this.active) {
+ this.activeHandleIdx = handleIdx || 0;
+ this.activeHandle = this.handles[this.activeHandleIdx];
+ this.updateStyles();
+ }
+ handleIdx = handleIdx || this.activeHandleIdx || 0;
+ if (this.initialized && this.restricted) {
+ if ((handleIdx>0) && (sliderValue<this.values[handleIdx-1]))
+ sliderValue = this.values[handleIdx-1];
+ if ((handleIdx < (this.handles.length-1)) && (sliderValue>this.values[handleIdx+1]))
+ sliderValue = this.values[handleIdx+1];
+ }
+ sliderValue = this.getNearestValue(sliderValue);
+ this.values[handleIdx] = sliderValue;
+ this.value = this.values[0]; // assure backwards compat
+
+ this.handles[handleIdx].style[this.isVertical() ? 'top' : 'left'] =
+ this.translateToPx(sliderValue);
+
+ this.drawSpans();
+ if (!this.dragging || !this.event) this.updateFinished();
+ },
+ setValueBy: function(delta, handleIdx) {
+ this.setValue(this.values[handleIdx || this.activeHandleIdx || 0] + delta,
+ handleIdx || this.activeHandleIdx || 0);
+ },
+ translateToPx: function(value) {
+ return Math.round(
+ ((this.trackLength-this.handleLength)/(this.range.end-this.range.start)) *
+ (value - this.range.start)) + "px";
+ },
+ translateToValue: function(offset) {
+ return ((offset/(this.trackLength-this.handleLength) *
+ (this.range.end-this.range.start)) + this.range.start);
+ },
+ getRange: function(range) {
+ var v = this.values.sortBy(Prototype.K);
+ range = range || 0;
+ return $R(v[range],v[range+1]);
+ },
+ minimumOffset: function(){
+ return(this.isVertical() ? this.alignY : this.alignX);
+ },
+ maximumOffset: function(){
+ return(this.isVertical() ?
+ (this.track.offsetHeight != 0 ? this.track.offsetHeight :
+ this.track.style.height.replace(/px$/,"")) - this.alignY :
+ (this.track.offsetWidth != 0 ? this.track.offsetWidth :
+ this.track.style.width.replace(/px$/,"")) - this.alignX);
+ },
+ isVertical: function(){
+ return (this.axis == 'vertical');
+ },
+ drawSpans: function() {
+ var slider = this;
+ if (this.spans)
+ $R(0, this.spans.length-1).each(function(r) { slider.setSpan(slider.spans[r], slider.getRange(r)) });
+ if (this.options.startSpan)
+ this.setSpan(this.options.startSpan,
+ $R(0, this.values.length>1 ? this.getRange(0).min() : this.value ));
+ if (this.options.endSpan)
+ this.setSpan(this.options.endSpan,
+ $R(this.values.length>1 ? this.getRange(this.spans.length-1).max() : this.value, this.maximum));
+ },
+ setSpan: function(span, range) {
+ if (this.isVertical()) {
+ span.style.top = this.translateToPx(range.start);
+ span.style.height = this.translateToPx(range.end - range.start + this.range.start);
+ } else {
+ span.style.left = this.translateToPx(range.start);
+ span.style.width = this.translateToPx(range.end - range.start + this.range.start);
+ }
+ },
+ updateStyles: function() {
+ this.handles.each( function(h){ Element.removeClassName(h, 'selected') });
+ Element.addClassName(this.activeHandle, 'selected');
+ },
+ startDrag: function(event) {
+ if (Event.isLeftClick(event)) {
+ if (!this.disabled){
+ this.active = true;
+
+ var handle = Event.element(event);
+ var pointer = [Event.pointerX(event), Event.pointerY(event)];
+ var track = handle;
+ if (track==this.track) {
+ var offsets = this.track.cumulativeOffset();
+ this.event = event;
+ this.setValue(this.translateToValue(
+ (this.isVertical() ? pointer[1]-offsets[1] : pointer[0]-offsets[0])-(this.handleLength/2)
+ ));
+ var offsets = this.activeHandle.cumulativeOffset();
+ this.offsetX = (pointer[0] - offsets[0]);
+ this.offsetY = (pointer[1] - offsets[1]);
+ } else {
+ // find the handle (prevents issues with Safari)
+ while((this.handles.indexOf(handle) == -1) && handle.parentNode)
+ handle = handle.parentNode;
+
+ if (this.handles.indexOf(handle)!=-1) {
+ this.activeHandle = handle;
+ this.activeHandleIdx = this.handles.indexOf(this.activeHandle);
+ this.updateStyles();
+
+ var offsets = this.activeHandle.cumulativeOffset();
+ this.offsetX = (pointer[0] - offsets[0]);
+ this.offsetY = (pointer[1] - offsets[1]);
+ }
+ }
+ }
+ Event.stop(event);
+ }
+ },
+ update: function(event) {
+ if (this.active) {
+ if (!this.dragging) this.dragging = true;
+ this.draw(event);
+ if (Prototype.Browser.WebKit) window.scrollBy(0,0);
+ Event.stop(event);
+ }
+ },
+ draw: function(event) {
+ var pointer = [Event.pointerX(event), Event.pointerY(event)];
+ var offsets = this.track.cumulativeOffset();
+ pointer[0] -= this.offsetX + offsets[0];
+ pointer[1] -= this.offsetY + offsets[1];
+ this.event = event;
+ this.setValue(this.translateToValue( this.isVertical() ? pointer[1] : pointer[0] ));
+ if (this.initialized && this.options.onSlide)
+ this.options.onSlide(this.values.length>1 ? this.values : this.value, this);
+ },
+ endDrag: function(event) {
+ if (this.active && this.dragging) {
+ this.finishDrag(event, true);
+ Event.stop(event);
+ }
+ this.active = false;
+ this.dragging = false;
+ },
+ finishDrag: function(event, success) {
+ this.active = false;
+ this.dragging = false;
+ this.updateFinished();
+ },
+ updateFinished: function() {
+ if (this.initialized && this.options.onChange)
+ this.options.onChange(this.values.length>1 ? this.values : this.value, this);
+ this.event = null;
+ }
+}); \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/sound.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/sound.js
new file mode 100644
index 000000000..edacf4101
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/sound.js
@@ -0,0 +1,59 @@
+// script.aculo.us sound.js v1.8.3, Thu Oct 08 11:23:33 +0200 2009
+
+// Copyright (c) 2005-2009 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
+//
+// Based on code created by Jules Gravinese (http://www.webveteran.com/)
+//
+// script.aculo.us is freely distributable under the terms of an MIT-style license.
+// For details, see the script.aculo.us web site: http://script.aculo.us/
+
+Sound = {
+ tracks: {},
+ _enabled: true,
+ template:
+ new Template('<embed style="height:0" id="sound_#{track}_#{id}" src="#{url}" loop="false" autostart="true" hidden="true"/>'),
+ enable: function(){
+ Sound._enabled = true;
+ },
+ disable: function(){
+ Sound._enabled = false;
+ },
+ play: function(url){
+ if(!Sound._enabled) return;
+ var options = Object.extend({
+ track: 'global', url: url, replace: false
+ }, arguments[1] || {});
+
+ if(options.replace && this.tracks[options.track]) {
+ $R(0, this.tracks[options.track].id).each(function(id){
+ var sound = DOKUid('sound_'+options.track+'_'+id);
+ sound.Stop && sound.Stop();
+ sound.remove();
+ });
+ this.tracks[options.track] = null;
+ }
+
+ if(!this.tracks[options.track])
+ this.tracks[options.track] = { id: 0 };
+ else
+ this.tracks[options.track].id++;
+
+ options.id = this.tracks[options.track].id;
+ $$('body')[0].insert(
+ Prototype.Browser.IE ? new Element('bgsound',{
+ id: 'sound_'+options.track+'_'+options.id,
+ src: options.url, loop: 1, autostart: true
+ }) : Sound.template.evaluate(options));
+ }
+};
+
+if(Prototype.Browser.Gecko && navigator.userAgent.indexOf("Win") > 0){
+ if(navigator.plugins && $A(navigator.plugins).detect(function(p){ return p.name.indexOf('QuickTime') != -1 }))
+ Sound.template = new Template('<object id="sound_#{track}_#{id}" width="0" height="0" type="audio/mpeg" data="#{url}"/>');
+ else if(navigator.plugins && $A(navigator.plugins).detect(function(p){ return p.name.indexOf('Windows Media') != -1 }))
+ Sound.template = new Template('<object id="sound_#{track}_#{id}" type="application/x-mplayer2" data="#{url}"></object>');
+ else if(navigator.plugins && $A(navigator.plugins).detect(function(p){ return p.name.indexOf('RealPlayer') != -1 }))
+ Sound.template = new Template('<embed type="audio/x-pn-realaudio-plugin" style="height:0" id="sound_#{track}_#{id}" src="#{url}" loop="false" autostart="true" hidden="true"/>');
+ else
+ Sound.play = function(){};
+} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/unittest.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/unittest.js
new file mode 100644
index 000000000..90e97b8d6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/unittest.js
@@ -0,0 +1,568 @@
+// script.aculo.us unittest.js v1.8.3, Thu Oct 08 11:23:33 +0200 2009
+
+// Copyright (c) 2005-2009 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
+// (c) 2005-2009 Jon Tirsen (http://www.tirsen.com)
+// (c) 2005-2009 Michael Schuerig (http://www.schuerig.de/michael/)
+//
+// script.aculo.us is freely distributable under the terms of an MIT-style license.
+// For details, see the script.aculo.us web site: http://script.aculo.us/
+
+// experimental, Firefox-only
+Event.simulateMouse = function(element, eventName) {
+ var options = Object.extend({
+ pointerX: 0,
+ pointerY: 0,
+ buttons: 0,
+ ctrlKey: false,
+ altKey: false,
+ shiftKey: false,
+ metaKey: false
+ }, arguments[2] || {});
+ var oEvent = document.createEvent("MouseEvents");
+ oEvent.initMouseEvent(eventName, true, true, document.defaultView,
+ options.buttons, options.pointerX, options.pointerY, options.pointerX, options.pointerY,
+ options.ctrlKey, options.altKey, options.shiftKey, options.metaKey, 0, DOKUid(element));
+
+ if(this.mark) Element.remove(this.mark);
+ this.mark = document.createElement('div');
+ this.mark.appendChild(document.createTextNode(" "));
+ document.body.appendChild(this.mark);
+ this.mark.style.position = 'absolute';
+ this.mark.style.top = options.pointerY + "px";
+ this.mark.style.left = options.pointerX + "px";
+ this.mark.style.width = "5px";
+ this.mark.style.height = "5px;";
+ this.mark.style.borderTop = "1px solid red;";
+ this.mark.style.borderLeft = "1px solid red;";
+
+ if(this.step)
+ alert('['+new Date().getTime().toString()+'] '+eventName+'/'+Test.Unit.inspect(options));
+
+ DOKUid(element).dispatchEvent(oEvent);
+};
+
+// Note: Due to a fix in Firefox 1.0.5/6 that probably fixed "too much", this doesn't work in 1.0.6 or DP2.
+// You need to downgrade to 1.0.4 for now to get this working
+// See https://bugzilla.mozilla.org/show_bug.cgi?id=289940 for the fix that fixed too much
+Event.simulateKey = function(element, eventName) {
+ var options = Object.extend({
+ ctrlKey: false,
+ altKey: false,
+ shiftKey: false,
+ metaKey: false,
+ keyCode: 0,
+ charCode: 0
+ }, arguments[2] || {});
+
+ var oEvent = document.createEvent("KeyEvents");
+ oEvent.initKeyEvent(eventName, true, true, window,
+ options.ctrlKey, options.altKey, options.shiftKey, options.metaKey,
+ options.keyCode, options.charCode );
+ DOKUid(element).dispatchEvent(oEvent);
+};
+
+Event.simulateKeys = function(element, command) {
+ for(var i=0; i<command.length; i++) {
+ Event.simulateKey(element,'keypress',{charCode:command.charCodeAt(i)});
+ }
+};
+
+var Test = {};
+Test.Unit = {};
+
+// security exception workaround
+Test.Unit.inspect = Object.inspect;
+
+Test.Unit.Logger = Class.create();
+Test.Unit.Logger.prototype = {
+ initialize: function(log) {
+ this.log = DOKUid(log);
+ if (this.log) {
+ this._createLogTable();
+ }
+ },
+ start: function(testName) {
+ if (!this.log) return;
+ this.testName = testName;
+ this.lastLogLine = document.createElement('tr');
+ this.statusCell = document.createElement('td');
+ this.nameCell = document.createElement('td');
+ this.nameCell.className = "nameCell";
+ this.nameCell.appendChild(document.createTextNode(testName));
+ this.messageCell = document.createElement('td');
+ this.lastLogLine.appendChild(this.statusCell);
+ this.lastLogLine.appendChild(this.nameCell);
+ this.lastLogLine.appendChild(this.messageCell);
+ this.loglines.appendChild(this.lastLogLine);
+ },
+ finish: function(status, summary) {
+ if (!this.log) return;
+ this.lastLogLine.className = status;
+ this.statusCell.innerHTML = status;
+ this.messageCell.innerHTML = this._toHTML(summary);
+ this.addLinksToResults();
+ },
+ message: function(message) {
+ if (!this.log) return;
+ this.messageCell.innerHTML = this._toHTML(message);
+ },
+ summary: function(summary) {
+ if (!this.log) return;
+ this.logsummary.innerHTML = this._toHTML(summary);
+ },
+ _createLogTable: function() {
+ this.log.innerHTML =
+ '<div id="logsummary"></div>' +
+ '<table id="logtable">' +
+ '<thead><tr><th>Status</th><th>Test</th><th>Message</th></tr></thead>' +
+ '<tbody id="loglines"></tbody>' +
+ '</table>';
+ this.logsummary = DOKUid('logsummary');
+ this.loglines = DOKUid('loglines');
+ },
+ _toHTML: function(txt) {
+ return txt.escapeHTML().replace(/\n/g,"<br/>");
+ },
+ addLinksToResults: function(){
+ $$("tr.failed .nameCell").each( function(td){ // todo: limit to children of this.log
+ td.title = "Run only this test";
+ Event.observe(td, 'click', function(){ window.location.search = "?tests=" + td.innerHTML;});
+ });
+ $$("tr.passed .nameCell").each( function(td){ // todo: limit to children of this.log
+ td.title = "Run all tests";
+ Event.observe(td, 'click', function(){ window.location.search = "";});
+ });
+ }
+};
+
+Test.Unit.Runner = Class.create();
+Test.Unit.Runner.prototype = {
+ initialize: function(testcases) {
+ this.options = Object.extend({
+ testLog: 'testlog'
+ }, arguments[1] || {});
+ this.options.resultsURL = this.parseResultsURLQueryParameter();
+ this.options.tests = this.parseTestsQueryParameter();
+ if (this.options.testLog) {
+ this.options.testLog = DOKUid(this.options.testLog) || null;
+ }
+ if(this.options.tests) {
+ this.tests = [];
+ for(var i = 0; i < this.options.tests.length; i++) {
+ if(/^test/.test(this.options.tests[i])) {
+ this.tests.push(new Test.Unit.Testcase(this.options.tests[i], testcases[this.options.tests[i]], testcases["setup"], testcases["teardown"]));
+ }
+ }
+ } else {
+ if (this.options.test) {
+ this.tests = [new Test.Unit.Testcase(this.options.test, testcases[this.options.test], testcases["setup"], testcases["teardown"])];
+ } else {
+ this.tests = [];
+ for(var testcase in testcases) {
+ if(/^test/.test(testcase)) {
+ this.tests.push(
+ new Test.Unit.Testcase(
+ this.options.context ? ' -> ' + this.options.titles[testcase] : testcase,
+ testcases[testcase], testcases["setup"], testcases["teardown"]
+ ));
+ }
+ }
+ }
+ }
+ this.currentTest = 0;
+ this.logger = new Test.Unit.Logger(this.options.testLog);
+ setTimeout(this.runTests.bind(this), 1000);
+ },
+ parseResultsURLQueryParameter: function() {
+ return window.location.search.parseQuery()["resultsURL"];
+ },
+ parseTestsQueryParameter: function(){
+ if (window.location.search.parseQuery()["tests"]){
+ return window.location.search.parseQuery()["tests"].split(',');
+ };
+ },
+ // Returns:
+ // "ERROR" if there was an error,
+ // "FAILURE" if there was a failure, or
+ // "SUCCESS" if there was neither
+ getResult: function() {
+ var hasFailure = false;
+ for(var i=0;i<this.tests.length;i++) {
+ if (this.tests[i].errors > 0) {
+ return "ERROR";
+ }
+ if (this.tests[i].failures > 0) {
+ hasFailure = true;
+ }
+ }
+ if (hasFailure) {
+ return "FAILURE";
+ } else {
+ return "SUCCESS";
+ }
+ },
+ postResults: function() {
+ if (this.options.resultsURL) {
+ new Ajax.Request(this.options.resultsURL,
+ { method: 'get', parameters: 'result=' + this.getResult(), asynchronous: false });
+ }
+ },
+ runTests: function() {
+ var test = this.tests[this.currentTest];
+ if (!test) {
+ // finished!
+ this.postResults();
+ this.logger.summary(this.summary());
+ return;
+ }
+ if(!test.isWaiting) {
+ this.logger.start(test.name);
+ }
+ test.run();
+ if(test.isWaiting) {
+ this.logger.message("Waiting for " + test.timeToWait + "ms");
+ setTimeout(this.runTests.bind(this), test.timeToWait || 1000);
+ } else {
+ this.logger.finish(test.status(), test.summary());
+ this.currentTest++;
+ // tail recursive, hopefully the browser will skip the stackframe
+ this.runTests();
+ }
+ },
+ summary: function() {
+ var assertions = 0;
+ var failures = 0;
+ var errors = 0;
+ var messages = [];
+ for(var i=0;i<this.tests.length;i++) {
+ assertions += this.tests[i].assertions;
+ failures += this.tests[i].failures;
+ errors += this.tests[i].errors;
+ }
+ return (
+ (this.options.context ? this.options.context + ': ': '') +
+ this.tests.length + " tests, " +
+ assertions + " assertions, " +
+ failures + " failures, " +
+ errors + " errors");
+ }
+};
+
+Test.Unit.Assertions = Class.create();
+Test.Unit.Assertions.prototype = {
+ initialize: function() {
+ this.assertions = 0;
+ this.failures = 0;
+ this.errors = 0;
+ this.messages = [];
+ },
+ summary: function() {
+ return (
+ this.assertions + " assertions, " +
+ this.failures + " failures, " +
+ this.errors + " errors" + "\n" +
+ this.messages.join("\n"));
+ },
+ pass: function() {
+ this.assertions++;
+ },
+ fail: function(message) {
+ this.failures++;
+ this.messages.push("Failure: " + message);
+ },
+ info: function(message) {
+ this.messages.push("Info: " + message);
+ },
+ error: function(error) {
+ this.errors++;
+ this.messages.push(error.name + ": "+ error.message + "(" + Test.Unit.inspect(error) +")");
+ },
+ status: function() {
+ if (this.failures > 0) return 'failed';
+ if (this.errors > 0) return 'error';
+ return 'passed';
+ },
+ assert: function(expression) {
+ var message = arguments[1] || 'assert: got "' + Test.Unit.inspect(expression) + '"';
+ try { expression ? this.pass() :
+ this.fail(message); }
+ catch(e) { this.error(e); }
+ },
+ assertEqual: function(expected, actual) {
+ var message = arguments[2] || "assertEqual";
+ try { (expected == actual) ? this.pass() :
+ this.fail(message + ': expected "' + Test.Unit.inspect(expected) +
+ '", actual "' + Test.Unit.inspect(actual) + '"'); }
+ catch(e) { this.error(e); }
+ },
+ assertInspect: function(expected, actual) {
+ var message = arguments[2] || "assertInspect";
+ try { (expected == actual.inspect()) ? this.pass() :
+ this.fail(message + ': expected "' + Test.Unit.inspect(expected) +
+ '", actual "' + Test.Unit.inspect(actual) + '"'); }
+ catch(e) { this.error(e); }
+ },
+ assertEnumEqual: function(expected, actual) {
+ var message = arguments[2] || "assertEnumEqual";
+ try { $A(expected).length == $A(actual).length &&
+ expected.zip(actual).all(function(pair) { return pair[0] == pair[1] }) ?
+ this.pass() : this.fail(message + ': expected ' + Test.Unit.inspect(expected) +
+ ', actual ' + Test.Unit.inspect(actual)); }
+ catch(e) { this.error(e); }
+ },
+ assertNotEqual: function(expected, actual) {
+ var message = arguments[2] || "assertNotEqual";
+ try { (expected != actual) ? this.pass() :
+ this.fail(message + ': got "' + Test.Unit.inspect(actual) + '"'); }
+ catch(e) { this.error(e); }
+ },
+ assertIdentical: function(expected, actual) {
+ var message = arguments[2] || "assertIdentical";
+ try { (expected === actual) ? this.pass() :
+ this.fail(message + ': expected "' + Test.Unit.inspect(expected) +
+ '", actual "' + Test.Unit.inspect(actual) + '"'); }
+ catch(e) { this.error(e); }
+ },
+ assertNotIdentical: function(expected, actual) {
+ var message = arguments[2] || "assertNotIdentical";
+ try { !(expected === actual) ? this.pass() :
+ this.fail(message + ': expected "' + Test.Unit.inspect(expected) +
+ '", actual "' + Test.Unit.inspect(actual) + '"'); }
+ catch(e) { this.error(e); }
+ },
+ assertNull: function(obj) {
+ var message = arguments[1] || 'assertNull';
+ try { (obj==null) ? this.pass() :
+ this.fail(message + ': got "' + Test.Unit.inspect(obj) + '"'); }
+ catch(e) { this.error(e); }
+ },
+ assertMatch: function(expected, actual) {
+ var message = arguments[2] || 'assertMatch';
+ var regex = new RegExp(expected);
+ try { (regex.exec(actual)) ? this.pass() :
+ this.fail(message + ' : regex: "' + Test.Unit.inspect(expected) + ' did not match: ' + Test.Unit.inspect(actual) + '"'); }
+ catch(e) { this.error(e); }
+ },
+ assertHidden: function(element) {
+ var message = arguments[1] || 'assertHidden';
+ this.assertEqual("none", element.style.display, message);
+ },
+ assertNotNull: function(object) {
+ var message = arguments[1] || 'assertNotNull';
+ this.assert(object != null, message);
+ },
+ assertType: function(expected, actual) {
+ var message = arguments[2] || 'assertType';
+ try {
+ (actual.constructor == expected) ? this.pass() :
+ this.fail(message + ': expected "' + Test.Unit.inspect(expected) +
+ '", actual "' + (actual.constructor) + '"'); }
+ catch(e) { this.error(e); }
+ },
+ assertNotOfType: function(expected, actual) {
+ var message = arguments[2] || 'assertNotOfType';
+ try {
+ (actual.constructor != expected) ? this.pass() :
+ this.fail(message + ': expected "' + Test.Unit.inspect(expected) +
+ '", actual "' + (actual.constructor) + '"'); }
+ catch(e) { this.error(e); }
+ },
+ assertInstanceOf: function(expected, actual) {
+ var message = arguments[2] || 'assertInstanceOf';
+ try {
+ (actual instanceof expected) ? this.pass() :
+ this.fail(message + ": object was not an instance of the expected type"); }
+ catch(e) { this.error(e); }
+ },
+ assertNotInstanceOf: function(expected, actual) {
+ var message = arguments[2] || 'assertNotInstanceOf';
+ try {
+ !(actual instanceof expected) ? this.pass() :
+ this.fail(message + ": object was an instance of the not expected type"); }
+ catch(e) { this.error(e); }
+ },
+ assertRespondsTo: function(method, obj) {
+ var message = arguments[2] || 'assertRespondsTo';
+ try {
+ (obj[method] && typeof obj[method] == 'function') ? this.pass() :
+ this.fail(message + ": object doesn't respond to [" + method + "]"); }
+ catch(e) { this.error(e); }
+ },
+ assertReturnsTrue: function(method, obj) {
+ var message = arguments[2] || 'assertReturnsTrue';
+ try {
+ var m = obj[method];
+ if(!m) m = obj['is'+method.charAt(0).toUpperCase()+method.slice(1)];
+ m() ? this.pass() :
+ this.fail(message + ": method returned false"); }
+ catch(e) { this.error(e); }
+ },
+ assertReturnsFalse: function(method, obj) {
+ var message = arguments[2] || 'assertReturnsFalse';
+ try {
+ var m = obj[method];
+ if(!m) m = obj['is'+method.charAt(0).toUpperCase()+method.slice(1)];
+ !m() ? this.pass() :
+ this.fail(message + ": method returned true"); }
+ catch(e) { this.error(e); }
+ },
+ assertRaise: function(exceptionName, method) {
+ var message = arguments[2] || 'assertRaise';
+ try {
+ method();
+ this.fail(message + ": exception expected but none was raised"); }
+ catch(e) {
+ ((exceptionName == null) || (e.name==exceptionName)) ? this.pass() : this.error(e);
+ }
+ },
+ assertElementsMatch: function() {
+ var expressions = $A(arguments), elements = $A(expressions.shift());
+ if (elements.length != expressions.length) {
+ this.fail('assertElementsMatch: size mismatch: ' + elements.length + ' elements, ' + expressions.length + ' expressions');
+ return false;
+ }
+ elements.zip(expressions).all(function(pair, index) {
+ var element = DOKUid(pair.first()), expression = pair.last();
+ if (element.match(expression)) return true;
+ this.fail('assertElementsMatch: (in index ' + index + ') expected ' + expression.inspect() + ' but got ' + element.inspect());
+ }.bind(this)) && this.pass();
+ },
+ assertElementMatches: function(element, expression) {
+ this.assertElementsMatch([element], expression);
+ },
+ benchmark: function(operation, iterations) {
+ var startAt = new Date();
+ (iterations || 1).times(operation);
+ var timeTaken = ((new Date())-startAt);
+ this.info((arguments[2] || 'Operation') + ' finished ' +
+ iterations + ' iterations in ' + (timeTaken/1000)+'s' );
+ return timeTaken;
+ },
+ _isVisible: function(element) {
+ element = DOKUid(element);
+ if(!element.parentNode) return true;
+ this.assertNotNull(element);
+ if(element.style && Element.getStyle(element, 'display') == 'none')
+ return false;
+
+ return this._isVisible(element.parentNode);
+ },
+ assertNotVisible: function(element) {
+ this.assert(!this._isVisible(element), Test.Unit.inspect(element) + " was not hidden and didn't have a hidden parent either. " + ("" || arguments[1]));
+ },
+ assertVisible: function(element) {
+ this.assert(this._isVisible(element), Test.Unit.inspect(element) + " was not visible. " + ("" || arguments[1]));
+ },
+ benchmark: function(operation, iterations) {
+ var startAt = new Date();
+ (iterations || 1).times(operation);
+ var timeTaken = ((new Date())-startAt);
+ this.info((arguments[2] || 'Operation') + ' finished ' +
+ iterations + ' iterations in ' + (timeTaken/1000)+'s' );
+ return timeTaken;
+ }
+};
+
+Test.Unit.Testcase = Class.create();
+Object.extend(Object.extend(Test.Unit.Testcase.prototype, Test.Unit.Assertions.prototype), {
+ initialize: function(name, test, setup, teardown) {
+ Test.Unit.Assertions.prototype.initialize.bind(this)();
+ this.name = name;
+
+ if(typeof test == 'string') {
+ test = test.gsub(/(\.should[^\(]+\()/,'#{0}this,');
+ test = test.gsub(/(\.should[^\(]+)\(this,\)/,'#{1}(this)');
+ this.test = function() {
+ eval('with(this){'+test+'}');
+ }
+ } else {
+ this.test = test || function() {};
+ }
+
+ this.setup = setup || function() {};
+ this.teardown = teardown || function() {};
+ this.isWaiting = false;
+ this.timeToWait = 1000;
+ },
+ wait: function(time, nextPart) {
+ this.isWaiting = true;
+ this.test = nextPart;
+ this.timeToWait = time;
+ },
+ run: function() {
+ try {
+ try {
+ if (!this.isWaiting) this.setup.bind(this)();
+ this.isWaiting = false;
+ this.test.bind(this)();
+ } finally {
+ if(!this.isWaiting) {
+ this.teardown.bind(this)();
+ }
+ }
+ }
+ catch(e) { this.error(e); }
+ }
+});
+
+// *EXPERIMENTAL* BDD-style testing to please non-technical folk
+// This draws many ideas from RSpec http://rspec.rubyforge.org/
+
+Test.setupBDDExtensionMethods = function(){
+ var METHODMAP = {
+ shouldEqual: 'assertEqual',
+ shouldNotEqual: 'assertNotEqual',
+ shouldEqualEnum: 'assertEnumEqual',
+ shouldBeA: 'assertType',
+ shouldNotBeA: 'assertNotOfType',
+ shouldBeAn: 'assertType',
+ shouldNotBeAn: 'assertNotOfType',
+ shouldBeNull: 'assertNull',
+ shouldNotBeNull: 'assertNotNull',
+
+ shouldBe: 'assertReturnsTrue',
+ shouldNotBe: 'assertReturnsFalse',
+ shouldRespondTo: 'assertRespondsTo'
+ };
+ var makeAssertion = function(assertion, args, object) {
+ this[assertion].apply(this,(args || []).concat([object]));
+ };
+
+ Test.BDDMethods = {};
+ $H(METHODMAP).each(function(pair) {
+ Test.BDDMethods[pair.key] = function() {
+ var args = $A(arguments);
+ var scope = args.shift();
+ makeAssertion.apply(scope, [pair.value, args, this]); };
+ });
+
+ [Array.prototype, String.prototype, Number.prototype, Boolean.prototype].each(
+ function(p){ Object.extend(p, Test.BDDMethods) }
+ );
+};
+
+Test.context = function(name, spec, log){
+ Test.setupBDDExtensionMethods();
+
+ var compiledSpec = {};
+ var titles = {};
+ for(specName in spec) {
+ switch(specName){
+ case "setup":
+ case "teardown":
+ compiledSpec[specName] = spec[specName];
+ break;
+ default:
+ var testName = 'test'+specName.gsub(/\s+/,'-').camelize();
+ var body = spec[specName].toString().split('\n').slice(1);
+ if(/^\{/.test(body[0])) body = body.slice(1);
+ body.pop();
+ body = body.map(function(statement){
+ return statement.strip()
+ });
+ compiledSpec[testName] = body.join('\n');
+ titles[testName] = specName;
+ }
+ }
+ new Test.Unit.Runner(compiledSpec, { titles: titles, testLog: log || 'testlog', context: name });
+}; \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/LEEME.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/LEEME.txt
new file mode 100755
index 000000000..5c00e8abd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/LEEME.txt
@@ -0,0 +1,31 @@
+EXECUTIVE
+
+Tema para S5, creado originalmente por jEsuSdA 8)
+http://www.jesusda.com
+
+Más temas en: http://www.jesusda.com/projects/presentaciones_s5
+
+
+
+Para customizar este tema modifica el archivo CSS:
+
+s5-ultraviolet/ui/default/pretty.css
+
+
+
+Los archivos gráficos referentes al tema están en la carpeta:
+
+/ui/default/pics
+
+
+Puedes personalizar el favicon copiando el tuyo en la carpeta:
+
+/ui/default/pics
+
+con el nombre favicon.ico
+
+
+
+Para cualquier sugerencia e idea, por favor, contacta conmigo a través de mi web. ;)
+
+--jEsuSdA 8) \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/audio_link.png
new file mode 100644
index 000000000..daa740c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/audio_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/audio_on.png
new file mode 100644
index 000000000..cd590aae9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/audio_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/audio_over.png
new file mode 100644
index 000000000..cf537a008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/audio_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/auto_link.png
new file mode 100644
index 000000000..1c2ca4817
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/auto_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/auto_on.png
new file mode 100644
index 000000000..4b0c923b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/auto_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/auto_over.png
new file mode 100644
index 000000000..dbea88975
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/auto_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/backgrnd.png
new file mode 100644
index 000000000..0e48413d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/backgrnd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/blank.gif
new file mode 100755
index 000000000..75b945d25
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/blank.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/delay_link.png
new file mode 100644
index 000000000..c4d99cd57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/delay_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/exit_link.png
new file mode 100644
index 000000000..1bfd38790
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/exit_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/exit_over.png
new file mode 100644
index 000000000..0fdd1c605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/exit_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/fade_link.png
new file mode 100644
index 000000000..482e4d53e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/fade_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/fade_on.png
new file mode 100644
index 000000000..e12561fb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/fade_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/fade_over.png
new file mode 100644
index 000000000..fb8943c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/fade_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/footer.jpg
new file mode 100644
index 000000000..49370dbba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/footer.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/framing.css
new file mode 100755
index 000000000..14d8509e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/framing.css
@@ -0,0 +1,23 @@
+/* The following styles size, place, and layer the slide components.
+ Edit these if you want to change the overall slide layout.
+ The commented lines can be uncommented (and modified, if necessary)
+ to help you with the rearrangement process. */
+
+/* target = 1024x768 */
+
+div#header, div#footer, .slide {width: 100%; top: 0; left: 0;}
+div#header {top: 0; height: 3em; z-index: 1;}
+div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;}
+.slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;}
+div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;}
+div#controls form {position: absolute; bottom: 0; right: 0; width: 100%;
+ margin: 0;}
+#currentSlide {position: absolute; width: 10%; left: 45%; bottom: 1em; z-index: 10;}
+html>body #currentSlide {position: fixed;}
+
+/*
+div#header {background: #FCC;}
+div#footer {background: #CCF;}
+div#controls {background: #BBD;}
+div#currentSlide {background: #FFC;}
+*/
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/header.png
new file mode 100644
index 000000000..929dabba1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/iepngfix.htc
new file mode 100755
index 000000000..bba2db756
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/iepngfix.htc
@@ -0,0 +1,42 @@
+<public:component>
+<public:attach event="onpropertychange" onevent="doFix()" />
+
+<script>
+
+// IE5.5+ PNG Alpha Fix v1.0 by Angus Turnbull http://www.twinhelix.com
+// Free usage permitted as long as this notice remains intact.
+
+// This must be a path to a blank image. That's all the configuration you need here.
+var blankImg = 'ui/default/blank.gif';
+
+var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
+
+function filt(s, m) {
+ if (filters[f]) {
+ filters[f].enabled = s ? true : false;
+ if (s) with (filters[f]) { src = s; sizingMethod = m }
+ } else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")';
+}
+
+function doFix() {
+ if ((parseFloat(navigator.userAgent.match(/MSIE (\S+)/)[1]) < 5.5) ||
+ (event && !/(background|src)/.test(event.propertyName))) return;
+
+ if (tagName == 'IMG') {
+ if ((/\.png$/i).test(src)) {
+ filt(src, 'image'); // was 'scale'
+ src = blankImg;
+ } else if (src.indexOf(blankImg) < 0) filt();
+ } else if (style.backgroundImage) {
+ if (style.backgroundImage.match(/^url[("']+(.*\.png)[)"']+$/i)) {
+ var s = RegExp.$1;
+ style.backgroundImage = '';
+ filt(s, 'crop');
+ } else filt();
+ }
+}
+
+doFix();
+
+</script>
+</public:component> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/index.html
new file mode 100755
index 000000000..39d8f46ad
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/index.html
@@ -0,0 +1,100 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es-es" >
+
+
+<head>
+
+ <title>[Título de la presentación aquí]</title>
+ <!-- metadata -->
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta http-equiv="content-language" content="es" />
+
+ <!--titulo y datos de publicación de la presentación-->
+
+ <meta name="description" content="[Título de la presentación aquí]" />
+
+ <meta name="keywords" content="[keywords aquí]" />
+ <meta name="presdate" content="[Aquí la fecha de publicación en formato aaaammdd]" />
+
+ <meta name="author" lang="es" content="[Nombre del autor de la presentación aquí]" />
+ <meta name="company" content="[Organización del autor de la presentación aquí]" />
+
+ <link rel="shortcut icon" href="ui/default/pics/favicon.ico" />
+
+ <meta name="generator" content="S5" />
+ <meta name="progid" content="quanta+" />
+ <meta name="version" content="S5 · jEsuSdA · 1.1" />
+ <!--Versión adaptada del estandard S5 1.1 por jEsuSdA-->
+
+ <meta name="robots" content="all" />
+
+ <!-- configuration parameters -->
+ <meta name="defaultView" content="slideshow" />
+ <meta name="controlVis" content="hidden" />
+
+ <!-- style sheet links -->
+ <link rel="stylesheet" href="ui/default/slides.css" type="text/css" media="projection" id="slideProj" />
+ <link rel="stylesheet" href="ui/default/outline.css" type="text/css" media="screen" id="outlineStyle" />
+ <link rel="stylesheet" href="ui/default/print.css" type="text/css" media="print" id="slidePrint" />
+ <link rel="stylesheet" href="ui/default/opera.css" type="text/css" media="projection" id="operaFix" />
+
+ <!-- S5 JS -->
+ <script src="ui/default/slides.js" type="text/javascript"></script>
+
+</head>
+
+<body>
+
+ <div class="layout">
+ <div id="controls"><!-- NO EDITAR --></div>
+ <div id="currentSlide"><!-- NO EDITAR --></div>
+
+ <div id="header">
+ <div id="logo"><!-- NO EDITAR --></div>
+ </div>
+
+ </div>
+
+ <div id="footer">
+ <h1>[Lugar/Fecha de la presentación aquí]</h1>
+ <h2>[Título de la presentación aquí]</h2>
+ </div>
+
+
+
+
+<div class="presentation">
+
+ <div class="slide">
+ <h1>[Título de la presentación aquí]</h1>
+ <h3>[Nombre del ponente aquí]</h3>
+ <h4>[Datos extra aquí]</h4>
+ </div>
+
+
+ <div class="slide">
+ <h1>[Título de la diapositiva]</h1>
+
+ <ul>
+ <li>[Punto uno]</li>
+ <li>[Punto dos]</li>
+ <li>[Punto tres]</li>
+ <li>[Punto cuatro]</li>
+ <li>[Punto cinco]</li>
+ </ul>
+
+ <div class="handout">
+
+ [Añade aquí cualquier nota o información que desees mostrar en la versión impresa, pero no en la versión en pantalla]
+
+ </div>
+
+ </div>
+ <!--fin slide-->
+
+</div>
+
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/last_link.png
new file mode 100644
index 000000000..4f158d35d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/last_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/last_over.png
new file mode 100644
index 000000000..a7b629995
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/last_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/list_link.png
new file mode 100644
index 000000000..7e299bb50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/list_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/loop_link.png
new file mode 100644
index 000000000..41e12cb15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/loop_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/loop_on.png
new file mode 100644
index 000000000..2ffcacae1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/loop_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/loop_over.png
new file mode 100644
index 000000000..9fe420153
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/loop_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/next_link.png
new file mode 100644
index 000000000..2b9f44c4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/next_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/next_over.png
new file mode 100644
index 000000000..25788124d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/next_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/notes_link.png
new file mode 100644
index 000000000..bb4a8ae37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/notes_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/notes_over.png
new file mode 100644
index 000000000..c6bfe69fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/notes_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/opera.css
new file mode 100755
index 000000000..9e9d2a3c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/opera.css
@@ -0,0 +1,7 @@
+/* DO NOT CHANGE THESE unless you really want to break Opera Show */
+.slide {
+ visibility: visible !important;
+ position: static !important;
+ page-break-before: always;
+}
+#slide0 {page-break-before: avoid;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/outline.css
new file mode 100755
index 000000000..62db519ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/outline.css
@@ -0,0 +1,15 @@
+/* don't change this unless you want the layout stuff to show up in the outline view! */
+
+.layout div, #footer *, #controlForm * {display: none;}
+#footer, #controls, #controlForm, #navLinks, #toggle {
+ display: block; visibility: visible; margin: 0; padding: 0;}
+#toggle {float: right; padding: 0.5em;}
+html>body #toggle {position: fixed; top: 0; right: 0;}
+
+/* making the outline look pretty-ish */
+
+#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
+#slide0 h1 {padding-top: 1.5em;}
+.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em;
+ border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
+#toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pause_link.png
new file mode 100644
index 000000000..2561cb4a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pause_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pause_on.png
new file mode 100644
index 000000000..2fc9c4a4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pause_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pause_over.png
new file mode 100644
index 000000000..7a7c80ddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pause_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/back-handout-print.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/back-handout-print.png
new file mode 100755
index 000000000..9e49dd625
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/back-handout-print.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/back-slide-print.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/back-slide-print.png
new file mode 100755
index 000000000..e8b5f9d82
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/back-slide-print.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/back_console.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/back_console.png
new file mode 100755
index 000000000..ac1708379
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/back_console.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-foot.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-foot.png
new file mode 100755
index 000000000..811b676bf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-foot.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-head.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-head.png
new file mode 100755
index 000000000..c1df59a15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-head.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-head.xcf b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-head.xcf
new file mode 100755
index 000000000..ff6497417
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-head.xcf
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-main.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-main.png
new file mode 100755
index 000000000..9ed390d97
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-main.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/favicon.ico b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/favicon.ico
new file mode 100755
index 000000000..10ee10936
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/favicon.ico
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/logo.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/logo.png
new file mode 100755
index 000000000..119fe742e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/logo.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/table-background.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/table-background.png
new file mode 100755
index 000000000..89a7e4fa2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/table-background.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/table-header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/table-header.png
new file mode 100755
index 000000000..1001624dd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/table-header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pretty.css
new file mode 100755
index 000000000..e34ead879
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pretty.css
@@ -0,0 +1,545 @@
+/* Following are the presentation styles -- edit away! */
+
+body
+{
+ background: #FFF url(pics/background-main.png) top left repeat;
+ color: #000; font-size: 2em;
+/* font-family: Trebuchet MS, Arial, Helvetica, sans-serif; */
+ font-family: Arial, Helvetica, sans-serif;
+
+}
+
+:link, :visited
+{
+ text-decoration: none;
+ color: #00C;
+}
+
+
+
+h1, h2, h3, h4
+{
+ font-size: 100%;
+ margin: 0;
+ padding: 0;
+ font-weight: inherit;
+}
+
+h1 abbr
+{
+ font-variant: small-caps;
+}
+
+ul, pre
+{
+ margin: 0;
+ line-height: 1em;
+}
+
+html, body
+{
+ margin: 0;
+ padding: 0;
+}
+
+blockquote, q
+{
+ font-style: italic;
+}
+
+blockquote
+{
+ padding: 0 2em 0.5em;
+ margin: 0 1.5em 0.5em;
+ text-align: center;
+ font-size: 1em;
+}
+
+blockquote p
+{
+ margin: 0;
+}
+
+blockquote i
+{
+ font-style: normal;
+}
+
+blockquote b
+{
+ display: block;
+ margin-top: 0.5em;
+ font-weight: normal;
+ font-size: smaller;
+ font-style: normal;
+}
+
+blockquote b i
+{
+ font-style: italic;
+}
+
+kbd
+{
+ font-weight: bold;
+ font-size: 1em;
+}
+
+sup
+{
+ font-size: smaller;
+ line-height: 1px;
+}
+
+
+ul.urls
+{
+ list-style: none;
+ display: inline;
+ margin: 0;
+}
+
+.urls li
+{
+ display: inline;
+ margin: 0;
+}
+
+.notes
+{
+ display: none;
+}
+
+.external
+{
+ border-bottom: 1px dotted gray;
+}
+
+html>body .external
+{
+ border-bottom: none;
+}
+
+.external:after
+{
+ content: " \274F";
+ font-size: smaller;
+ color: #fff;
+}
+
+.incremental, .incremental *, .incremental *:after
+{
+ color: #fff;
+ visibility: visible;
+}
+
+img.incremental
+{
+ visibility: hidden;
+}
+
+.slide .current
+{
+ color: #fff;
+}
+
+
+/* ============== */
+/* === SLIDES === */
+/* ============== */
+
+.slide code
+{
+ padding: 2px 0.25em;
+ font-weight: bold;
+}
+
+.slide code.bad, code del
+{
+ color: red;
+}
+
+.slide code.old
+{
+ color: silver;
+}
+
+.slide pre
+{
+
+ color: #ffca00;
+ display:block;
+ font-weight:bold;
+ font-family: Arial, Sans-Serif !important;
+ font-size:41.5%;
+ line-height:1.5em;
+ background:#2e3436 url(pics/back_console.png) right bottom no-repeat ;
+ border:5px solid #ccc;
+ padding:1em 1em 1em 1em;
+
+
+}
+
+.slide pre code
+{
+ font-family: Arial, Sans-Serif !important;
+ display:block;
+ margin:0;
+ padding:0;
+}
+
+
+
+.slide ul
+{
+ margin-left: 5%;
+ margin-right: 7%;
+ list-style: disc;
+}
+
+.slide li
+{
+ margin-top: 0.75em;
+ margin-right: 0;
+}
+
+.slide ul ul
+{
+ line-height: 1;
+}
+
+.slide ul ul li
+{
+ margin: .2em;
+ font-size: 85%;
+ list-style: square;
+}
+
+.slide img.leader
+{
+ display: block;
+ margin: 0 auto;
+}
+
+
+/* ========================= */
+/* === HEADER AND FOOTER === */
+/* ========================= */
+
+div#logo
+{
+ position:absolute;
+ top:0%;
+ right:0%;
+ background:url(pics/logo.png) 50% 50% no-repeat;
+ height:200%;
+ width:150px;
+}
+
+div#header, div#footer
+{
+ background: #a80231;
+ color: #FFF;
+}
+
+
+div#header
+{
+ background:#000 url(pics/background-head.png) bottom left repeat-x;
+ line-height: 1px;
+}
+
+div#footer
+{
+ background:#000 url(pics/background-foot.png) top left repeat-x;
+ font-size: 0.5em;
+ font-weight: bold;
+ padding: 1em 0;
+}
+
+
+
+
+
+#footer h1, #footer h2
+{
+ display: block;
+ padding: 0 1em;
+}
+
+#footer h2
+{
+ font-style: italic;
+}
+
+
+
+/* ============== */
+/* === CLASES === */
+/* ============== */
+
+div.long
+{
+ font-size: 0.75em;
+}
+
+.slide h1
+{
+ position: absolute;
+ top: 0.7em;
+ left: 87px;
+ z-index: 1;
+ margin: 0;
+ padding: 0.3em 0 0 50px;
+ white-space: nowrap;
+ font-weight: bold;
+ font-size: 1em;
+
+ text-transform: capitalize;
+ color: #fff;
+ background: transparent;
+}
+
+.slide h3
+{
+ font-size: 130%;
+}
+
+/* ================ */
+/* === CONTROLS === */
+/* ================ */
+
+#controls :active
+{
+ color: #fff !important;
+}
+
+#controls :focus
+{
+ outline: 1px dotted #227;
+}
+
+
+/* ================ */
+/* === JESUSDA === */
+/* ================ */
+
+.first-pic
+{
+
+ float:right;
+ margin-top:-2em;
+}
+
+/* ================ */
+
+.align-center
+{
+ text-align:center;
+}
+/* ================ */
+
+.float-left , .left-column
+{
+ float:left !important;
+ width:49% !important;
+}
+
+.float-right , .right-column
+{
+ float:right !important;
+ width:49% !important;
+}
+/* ================ */
+.fullscreen
+{
+ z-index:1000 !important;
+ position:fixed !important;
+ top:0;
+ left:0;
+ width:100% !important;
+ height:100% !important;
+
+ background: #fff url(pics/background-main.png) top left no-repeat;
+
+ text-align:center;
+ margin-left:-1.65em;
+
+}
+
+.fullscreen h1
+{
+ display:none;
+}
+
+.rotulo
+{
+ font-size:800%;
+ text-align:center;
+ margin-top:-0.05em;
+
+}
+
+.rotulo2
+{
+ font-size:200%;
+ text-align:center;
+ font-weight:bolder;
+ margin-top:-0.05em;
+
+}
+
+.align-center img
+{
+ margin:auto;
+ text-align:center;
+ margin:0;
+}
+
+/* ========================= */
+/* === TABLAS === */
+/* ========================= */
+
+table
+{
+ background:url(pics/table-background.png) bottom left repeat-x #fff;
+ margin-right:1em;
+ font-size:70%;
+ border:1px solid #d2d7cf !important;
+ border-spacing: 0;
+ text-align:center;
+}
+
+table td
+{
+ padding:0.5em;
+ font-size:90%;
+ border:1px solid #d2d7cf !important;
+ border-spacing: 0;
+ text-align:center;
+}
+
+th
+{
+ background:url(pics/table-header.png) bottom left repeat-x #000;
+ color:#fff;
+}
+
+th a
+{
+ color:#fff !important;
+}
+
+
+
+table caption
+{
+ margin-bottom:1em;
+ margin-top:1em;
+ margin-left:-7em;
+
+
+}
+
+
+display-none
+{
+ display:none;
+}
+
+div#controls {position: absolute; left: 0; bottom: 0; width: 100%; text-align: center; font: bold 1em Verdana, Arial, Helvetica, sans-serif;}
+html>body div#controls {background: transparent; position: fixed; padding: 0; top: auto; text-align: center;}
+#controls #sheet {display: none;}
+#controls #controlForm {height: 32px; width: 100%; text-align: center; vertical-align: middle;}
+#controls #navLinks {border-top: 1px solid #999; overflow: hidden; padding: 0; margin: 0; height: 32px; width: 100%; background-color: #808080; text-align: center; vertical-align: middle; white-space: nowrap;}
+#controls #navLinks ul {margin: 0 auto; padding: 0; height: 32px; width: 500px; white-space: nowrap; text-align: center;}
+#controls #navLinks ul li {list-style: none; display: inline; margin: 0; padding: 0; float: left; height: 32px; width: 32px; text-align: center; background-color: transparent;}
+#controls #navLinks ul li.vr {list-style: none; display: inline; margin: 0px 2px; padding: 0; float: left; height: 32px; width: 1px; text-align: center; background-color: #606060;}
+#controls #navLinks ul li a {margin: 0; padding: 0; float: left; height: 32px; width: 32px; background-color: transparent;}
+
+#controls #navLinks ul li#exit {background: url(exit_link.png) no-repeat top left;}
+#controls #navLinks ul li#exit a:hover {background: url(exit_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#toggle {background: url(toggle_link.png) no-repeat top left;}
+#controls #navLinks ul li#toggle a:hover {background: url(toggle_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#show-notes {background: url(notes_link.png) no-repeat top left;}
+#controls #navLinks ul li#show-notes a:hover {background: url(notes_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#zero {background: url(zero_link.png) no-repeat top left;}
+#controls #navLinks ul li#zero a:hover {background: url(zero_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#prev {background: url(prev_link.png) no-repeat top left;}
+#controls #navLinks ul li#prev a:hover {background: url(prev_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#next {background: url(next_link.png) no-repeat top left;}
+#controls #navLinks ul li#next a:hover {background: url(next_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#last {background: url(last_link.png) no-repeat top left;}
+#controls #navLinks ul li#last a:hover {background: url(last_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#lst {background: url(list_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#fade a.isoff {background: url(fade_link.png) no-repeat top left;}
+#controls #navLinks ul li#fade a.ison {background: url(fade_on.png) no-repeat top right;}
+#controls #navLinks ul li#fade a:hover {background: url(fade_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#audio {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.isoff {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.ison {background: url(audio_on.png) no-repeat top right;}
+#controls #navLinks ul li#audio a:hover {background: url(audio_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#vol {background: url(volume_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#auto a.isoff {background: url(auto_link.png) no-repeat top left;}
+#controls #navLinks ul li#auto a.ison {background: url(auto_on.png) no-repeat top right;}
+#controls #navLinks ul li#auto a:hover {background: url(auto_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#pause a.isoff {background: url(pause_link.png) no-repeat top left;}
+#controls #navLinks ul li#pause a.ison {background: url(pause_on.png) no-repeat top right;}
+#controls #navLinks ul li#pause a:hover {background: url(pause_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#loop a.isoff {background: url(loop_link.png) no-repeat top left;}
+#controls #navLinks ul li#loop a.ison {background: url(loop_on.png) no-repeat top right;}
+#controls #navLinks ul li#loop a:hover {background: url(loop_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#del {background: url(delay_link.png) no-repeat top left;}
+
+#jumplist, #volumelist, #delaylist {padding: 0; margin: 0; width: 32px; height: 32px; cursor: n-resize;}
+
+#currentSlide {white-space: nowrap; text-align: center; margin-bottom: -0.5em; font-size: 0.5em; background-color: transparent; color: #999;}
+
+#guru {position: absolute; visibility: visible; left: 0px; top: 0px; padding: 4px; width: 99%; height: auto; text-align: center; background-color: black; z-index: 10;}
+#guru div {border: solid 3px red; padding: 4px; font-family: monospace; font-size: 60%; width: auto; height: auto; color: red; text-align: center;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 0; padding: 0; font: bold 2em Verdana, Arial, Helvetica, sans-serif; font-variant: small-caps; text-shadow: 0.1em 0.1em 0.1em #666; white-space: normal; color: #222; background-color: transparent;}
+#slide0 h2 {font: bold italic 1em Arial, Helvetica, sans-serif; margin: 0.25em;}
+#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.external {border-bottom: 1px dotted gray;}
+html>body .external {border-bottom: none;}
+.external:after {content: " \274F"; font-size: smaller; color: #999;}
+
+.incremental, .incremental *, .incremental *:after {color: #ccc; visibility: visible;}
+img.incremental, canvas.incremental {visibility: hidden;}
+.slide .current {color: #B02;}
+
+/* diagnostics
+li:after {content: " [" attr(class) "]"; color: #F88;}
+*/
+
+table.piechart, table.barchart, table.linechart { border-spacing: 0.3em 0.15em; }
+table.piechart tr th, table.barchart tr th, table.linechart tr th { white-space: nowrap; }
+table.piechart tr td, table.barchart tr td, table.linechart tr td { vertical-align: top; white-space: nowrap; }
+table.piechart tr td.col, table.barchart tr td.col, table.linechart tr td.col { border-bottom: 1px solid #555; border-right: 1px solid #555; }
+table.fs90 tr td, table.fs90 tr th, div.fs90, pre.fs90, p.fs90 ,ul.fs90 {font-size: 0.9em; }
+table.fs75 tr td, table.fs75 tr th, div.fs75, pre.fs75, p.fs75 ,ul.fs75 {font-size: 0.75em; }
+table.fs66 tr td, table.fs66 tr th, div.fs66, pre.fs66, p.fs66 ,ul.fs66 {font-size: 0.66em; }
+table.fs50 tr td, table.fs50 tr th, div.fs50, pre.fs50, p.fs50 ,ul.fs50 {font-size: 0.5em; }
+
+#soundmanager-debug {position:fixed; top:0px; right:0px; width:30em; height:20em; overflow:auto; border:1px solid red; padding:1em; margin:2em; font-family:"sans serif"; font-size: 12px;color: black; background-color:#f6f6f6; z-index: 100;}
+#soundmanager-debug code {font-size: 11px;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/prev_link.png
new file mode 100644
index 000000000..c31d21350
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/prev_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/prev_over.png
new file mode 100644
index 000000000..6fef4fa52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/prev_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/print.css
new file mode 100755
index 000000000..220083260
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/print.css
@@ -0,0 +1 @@
+/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul { page-break-inside: avoid; visibility: visible !important; } h1 { page-break-after: avoid; } html { width:100%; overflow:hidden; } body { font-size: 12pt; background: white; width:100%; } * { color: black; } #slide0 h1 { font-size: 200%; border: none; margin: 0.5em 0 0.25em; } #slide0 h3 { margin: 0; padding: 0; } #slide0 h4 { margin: 0 0 0.5em; padding: 0; } #slide0 { margin-bottom: 3em; } h1 { border-top: 2pt solid gray; border-bottom: 1px dotted silver; padding:0.2em 0 0.3em 0; } .extra { background: transparent !important; } div.extra, pre.extra, .example { font-size: 10pt; color: #333; } ul.extra a { font-weight: bold; } p.example { display: none; } #header { display: none; } #footer h1 { margin: 0; border-bottom: 1px solid; color: gray; font-style: italic; } #footer h2, #controls { display: none; } div.handout { display:block; border-top: 2px dotted #ccc; background:url(pics/back-handout-print.png) top right no-repeat #fff; min-height:6em; padding-right:6em; margin-bottom:1em; } .slide { display:block; background:url(pics/back-slide-print.png) top right no-repeat #fff; min-height:6em; margin-bottom:1em; } table { display:block; /* display:none; */ font-size:90%; overflow:hidden; margin-top:1em; margin-bottom:1em; } pre , code { margin:0; font-size:1pt; overflow:auto; } img { max-width:100% !important; } /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .layout, .layout * { display: none !important; } \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/s5-core.css
new file mode 100755
index 000000000..86444e041
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/s5-core.css
@@ -0,0 +1,9 @@
+/* Do not edit or override these styles! The system will likely break if you do. */
+
+div#header, div#footer, div#controls, .slide {position: absolute;}
+html>body div#header, html>body div#footer,
+ html>body div#controls, html>body .slide {position: fixed;}
+.handout {display: none;}
+.layout {display: block;}
+.slide, .hideme, .incremental {visibility: hidden;}
+#slide0 {visibility: visible;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/slides.css
new file mode 100755
index 000000000..0786d7dbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/slides.css
@@ -0,0 +1,3 @@
+@import url(s5-core.css); /* required to make the slide show run at all */
+@import url(framing.css); /* sets basic placement and size of slide components */
+@import url(pretty.css); /* stuff that makes the slides look better than blah */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/slides.js
new file mode 100644
index 000000000..510a04c0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/slides.js
@@ -0,0 +1,2812 @@
+// S5 1.3beta7 (18-Apr-2007) advanced version by C. Effenberger
+// Please see http://s5.netzgesta.de/ for more information
+// based on S5 v1.2a1 slides.js -- released into the Public Domain
+// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
+// about all the wonderful and talented contributors to this code!
+// audio extension: soundmanager2 is NOT Public Domain
+// Please see http://www.schillmania.com/projects/soundmanager2/ for information
+
+var undef;
+var slideCSS = '';
+var snum = 0;
+var smax = 1;
+var incpos = 0;
+var number = undef;
+var firstTime = 1;
+var s5mode = true;
+var helpmode = false;
+var defaultView = 'slideshow'; //outline
+var controlVis = 'visible';
+var s5Path = 'lib/plugins/s5reloaded/';
+
+// scalable images extension
+var empx = 0;
+var images = new Array();
+var canvas = new Array();
+var medias = new Array();
+var piecharts = new Array();
+var barcharts = new Array();
+var linecharts = new Array();
+// scalable images extension
+
+// transition extension
+var tranSitions = false;
+var fadeModus = false;
+var fadeDuration = 500;
+var incrDuration = 250;
+var opac = 1;
+var cid = '';
+var nid = '';
+var tid = '';
+var jl = '';
+// transition extension
+
+// autoplay extension
+var autoMatic = false;
+var playLoop = false;
+var playPause = false;
+var autoRun = false;
+var playDelay = 5000;
+var remainDer = 0;
+var incrDelay = 0;
+// autoplay extension
+
+// audio extension
+var sound = new Array();
+var audioSupport = false;
+var audioVolume = 100;
+var audioError = false;
+var swfUnloaded = true;
+var bgSoundItem = 9999;
+var curSoundID = -1;
+// audio extension
+
+// panel extension
+var imgWidth = 32;
+var imgHeight = 32;
+// panel extension
+
+// canvas chart extension
+var canvasSupport = false;
+var ChartData = new Array();
+var colorSlice = new Array();
+var font = document.createElement("img");
+font.setAttribute("src", s5Path+"ui/graphic_support/numeric.png");
+signs = {
+ '0': {sx: 0, sy: 0, sw: 48, sh: 64},
+ '1': {sx: 48, sy: 0, sw: 48, sh: 64},
+ '2': {sx: 96, sy: 0, sw: 48, sh: 64},
+ '3': {sx: 144, sy: 0, sw: 48, sh: 64},
+ '4': {sx: 192, sy: 0, sw: 48, sh: 64},
+ '5': {sx: 240, sy: 0, sw: 48, sh: 64},
+ '6': {sx: 288, sy: 0, sw: 48, sh: 64},
+ '7': {sx: 336, sy: 0, sw: 48, sh: 64},
+ '8': {sx: 384, sy: 0, sw: 48, sh: 64},
+ '9': {sx: 432, sy: 0, sw: 48, sh: 64},
+ '%': {sx: 480, sy: 0, sw: 48, sh: 64},
+ '.': {sx: 528, sy: 0, sw: 24, sh: 64}
+};
+var colorNames= new Array();
+colorNames["black"]="#000000"; colorNames["maroon"]="#800000";
+colorNames["green"]="#008000"; colorNames["olive"]="#808000";
+colorNames["navy"]="#000080"; colorNames["purple"]="#800080";
+colorNames["teal"]="#008080"; colorNames["gray"]="#808080";
+colorNames["silver"]="#C0C0C0"; colorNames["red"]="#FF0000";
+colorNames["lime"]="#00FF00"; colorNames["yellow"]="#FFFF00";
+colorNames["blue"]="#0000FF"; colorNames["fuchsia"]="#FF00FF";
+colorNames["aqua"]="#00FFFF"; colorNames["white"]="#FFFFFF";
+colorNames["aliceblue"]="#F0F8FF"; colorNames["antiquewhite"]="#FAEBD7";
+colorNames["aquamarine"]="#7FFFD4"; colorNames["azure"]="#F0FFFF";
+colorNames["beige"]="#F5F5DC"; colorNames["blueviolet"]="#8A2BE2";
+colorNames["brown"]="#A52A2A"; colorNames["burlywood"]="#DEB887";
+colorNames["cadetblue"]="#5F9EA0"; colorNames["chartreuse"]="#7FFF00";
+colorNames["chocolate"]="#D2691E"; colorNames["coral"]="#FF7F50";
+colorNames["cornflowerblue"]="#6495ED"; colorNames["cornsilk"]="#FFF8DC";
+colorNames["crimson"]="#DC143C"; colorNames["darkblue"]="#00008B";
+colorNames["darkcyan"]="#008B8B"; colorNames["darkgoldenrod"]="#B8860B";
+colorNames["darkgray"]="#A9A9A9"; colorNames["darkgreen"]="#006400";
+colorNames["darkkhaki"]="#BDB76B"; colorNames["darkmagenta"]="#8B008B";
+colorNames["darkolivegreen"]="#556B2F"; colorNames["darkorange"]="#FF8C00";
+colorNames["darkorchid"]="#9932CC"; colorNames["darkred"]="#8B0000";
+colorNames["darksalmon"]="#E9967A"; colorNames["darkseagreen"]="#8FBC8F";
+colorNames["darkslateblue"]="#483D8B"; colorNames["darkslategray"]="#2F4F4F";
+colorNames["darkturquoise"]="#00CED1"; colorNames["darkviolet"]="#9400D3";
+colorNames["deeppink"]="#FF1493"; colorNames["deepskyblue"]="#00BFFF";
+colorNames["dimgray"]="#696969"; colorNames["dodgerblue"]="#1E90FF";
+colorNames["firebrick"]="#B22222"; colorNames["floralwhite"]="#FFFAF0";
+colorNames["forestgreen"]="#228B22"; colorNames["gainsboro"]="#DCDCDC";
+colorNames["ghostwhite"]="#F8F8FF"; colorNames["gold"]="#FFD700";
+colorNames["goldenrod"]="#DAA520"; colorNames["greenyellow"]="#ADFF2F";
+colorNames["honeydew"]="#F0FFF0"; colorNames["hotpink"]="#FF69B4";
+colorNames["indianred"]="#CD5C5C"; colorNames["indigo"]="#4B0082";
+colorNames["ivory"]="#FFFFF0"; colorNames["khaki"]="#F0E68C";
+colorNames["lavender"]="#E6E6FA"; colorNames["lavenderblush"]="#FFF0F5";
+colorNames["lawngreen"]="#7CFC00"; colorNames["lemonchiffon"]="#FFFACD";
+colorNames["lightblue"]="#ADD8E6"; colorNames["lightcoral"]="#F08080";
+colorNames["lightcyan"]="#E0FFFF"; colorNames["lightgoldenrodyellow"]="#FAFAD2";
+colorNames["lightgreen"]="#90EE90"; colorNames["lightgrey"]="#D3D3D3";
+colorNames["lightpink"]="#FFB6C1"; colorNames["lightsalmon"]="#FFA07A";
+colorNames["lightseagreen"]="#20B2AA"; colorNames["lightskyblue"]="#87CEFA";
+colorNames["lightslategray"]="#778899"; colorNames["lightsteelblue"]="#B0C4DE";
+colorNames["lightyellow"]="#FFFFE0"; colorNames["limegreen"]="#32CD32";
+colorNames["linen"]="#FAF0E6"; colorNames["mediumaquamarine"]="#66CDAA";
+colorNames["mediumblue"]="#0000CD"; colorNames["mediumorchid"]="#BA55D3";
+colorNames["ediumpurple"]="#9370D"; colorNames["mediumseagreen"]="#3CB371";
+colorNames["mediumslateblue"]="#7B68EE"; colorNames["mediumspringgreen"]="#00FA9A";
+colorNames["mediumturquoise"]="#48D1CC"; colorNames["mediumvioletred"]="#C71585";
+colorNames["midnightblue"]="#191970"; colorNames["mintcream"]="#F5FFFA";
+colorNames["mistyrose"]="#FFE4E1"; colorNames["moccasin"]="#FFE4B5";
+colorNames["navajowhite"]="#FFDEAD"; colorNames["oldlace"]="#FDF5E6";
+colorNames["olivedrab"]="#6B8E23"; colorNames["orange"]="#FFA500";
+colorNames["orangered"]="#FF4500"; colorNames["orchid"]="#DA70D6";
+colorNames["palegoldenrod"]="#EEE8AA"; colorNames["palegreen"]="#98FB98";
+colorNames["paleturquoise"]="#AFEEEE"; colorNames["palevioletred"]="#DB7093";
+colorNames["papayawhip"]="#FFEFD5"; colorNames["peachpuff"]="#FFDAB9";
+colorNames["peru"]="#CD853F"; colorNames["pink"]="#FFC0CB";
+colorNames["plum"]="#DDA0DD"; colorNames["powderblue"]="#B0E0E6";
+colorNames["rosybrown"]="#BC8F8F"; colorNames["royalblue"]="#4169E1";
+colorNames["saddlebrown"]="#8B4513"; colorNames["salmon"]="#FA8072";
+colorNames["sandybrown"]="#F4A460"; colorNames["seagreen"]="#2E8B57";
+colorNames["seashell"]="#FFF5EE"; colorNames["sienna"]="#A0522D";
+colorNames["skyblue"]="#87CEEB"; colorNames["slateblue"]="#6A5ACD";
+colorNames["slategray"]="#708090"; colorNames["snow"]="#FFFAFA";
+colorNames["springgreen"]="#00FF7F"; colorNames["steelblue"]="#4682B4";
+colorNames["tan"]="#D2B48C"; colorNames["thistle"]="#D8BFD8";
+colorNames["tomato"]="#FF6347"; colorNames["turquoise"]="#40E0D0";
+colorNames["violet"]="#EE82EE"; colorNames["wheat"]="#F5DEB3";
+colorNames["whitesmoke"]="#F5F5F5"; colorNames["yellowgreen"]="#9ACD32";
+var canvas_bgcolor = "";
+var canvas_width = 200;
+var canvas_height = 200;
+var canvas_noshade = 0;
+var canvas_nofill = 0;
+var canvas_noshadow = 0;
+var canvas_htmltext = 0;
+var canvas_imgtext = 0;
+var canvas_notext = 0;
+// canvas chart extension
+
+var s5NotesWindow;
+var s5NotesWindowLoaded = false;
+var previousSlide = 0;
+var presentationStart = new Date();
+var slideStart = new Date();
+
+var countdown = {
+ timer: 0,
+ state: 'pause',
+ start: new Date(),
+ end: 0,
+ remaining: 0
+};
+
+var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
+if(isIE) var notIE7 = parseInt(navigator.appVersion) < 7 ? 1 : 0;
+var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
+var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
+var isS2 = navigator.userAgent.indexOf('Safari') >= 2 ? 1 : 0;
+
+function hasClass(object, className) {
+ if (!object.className) return false;
+ return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
+}
+
+function hasValue(object, value) {
+ if (!object) return false;
+ return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
+}
+
+function removeClass(object,className) {
+ if (!object || !hasClass(object,className)) return;
+ object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
+}
+
+function addClass(object,className) {
+ if (!object || hasClass(object, className)) return;
+ if (object.className) {
+ object.className += ' '+className;
+ } else {
+ object.className = className;
+ }
+}
+
+function changeClass(object,className) {
+ if (!object) return;
+ object.firstChild.className = className;
+}
+
+function GetElementsWithClassName(elementName,className) {
+ var allElements = document.getElementsByTagName(elementName);
+ var elemColl = new Array();
+ for (var i = 0; i< allElements.length; i++) {
+ if (hasClass(allElements[i], className)) {
+ elemColl[elemColl.length] = allElements[i];
+ }
+ }
+ return elemColl;
+}
+
+function isParentOrSelf(element, id) {
+ if (element == null || element.nodeName=='BODY') return false;
+ else if (element.id == id) return true;
+ else return isParentOrSelf(element.parentNode, id);
+}
+
+function nodeValue(node) {
+ var result = "";
+ if (node.nodeType == 1) {
+ var children = node.childNodes;
+ for (var i = 0; i < children.length; ++i) {
+ result += nodeValue(children[i]);
+ }
+ }
+ else if (node.nodeType == 3) {
+ result = node.nodeValue;
+ }
+ return(result);
+}
+
+function slideLabel() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var list = document.getElementById('jumplist');
+ smax = slideColl.length;
+ for (var n = 0; n < smax; n++) {
+ var obj = slideColl[n];
+ var did = 'slide' + n.toString();
+ obj.setAttribute('id',did);
+ var otext = '';
+ var menu = obj.firstChild;
+ if (!menu) continue; // to cope with empty slides
+ while (menu && menu.nodeType == 3) {
+ menu = menu.nextSibling;
+ }
+ if (!menu) continue; // to cope with slides with only text nodes
+ var menunodes = menu.childNodes;
+ for (var o = 0; o < menunodes.length; o++) {
+ otext += nodeValue(menunodes[o]);
+ }
+ list.options[list.length] = new Option(n + ' : ' + otext, n);
+ }
+}
+
+function currentSlide() {
+ var cs, at, fd, ss;
+ if (document.getElementById) {
+ cs = document.getElementById('currentSlide');
+ } else {
+ cs = document.currentSlide;
+ }
+ fd = fadeModus?"F":"&ndash;";
+ ss = audioSupport?"S":"&ndash;";
+ at = (autoMatic?(playPause?"||":(playLoop?"&gt;0":"&gt;|")):"&ndash;&ndash;");
+ cs.innerHTML = '<div id="plink" nowrap="nowrap">' +
+ '<span id="csFade">[' + fd + ss + ']<\/span>&nbsp;' +
+ '<span id="csHere"><strong>' + snum + '<\/strong><\/span>' +
+ '<span id="csSep">\/<\/span>' +
+ '<span id="csTotal">' + (smax-1) + '<\/span>&nbsp;' +
+ '<span id="csAuto">[' + at + ']<\/span>' +
+ '<\/div>';
+
+ if (snum == 0) {
+ cs.style.visibility = 'hidden';
+ } else {
+ cs.style.visibility = 'visible';
+ }
+}
+
+function go(step) {
+ if (document.getElementById('slideProj').disabled || step == 0) return;
+ jl = document.getElementById('jumplist');
+ cid = 'slide' + snum;
+ var ce = document.getElementById(cid);
+ if (incrementals[snum].length > 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ removeClass(incrementals[snum][i], 'current');
+ removeClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ if (step != 'j') {
+ snum += step;
+ lmax = smax - 1;
+ if (snum > lmax) snum = lmax;
+ if (snum < 0) snum = 0;
+ }else {
+ snum = parseInt(jl.value);
+ }
+ nid = 'slide' + snum;
+ var ne = document.getElementById(nid);
+ if (!ne) {
+ ne = document.getElementById('slide0');
+ nid = 'slide0';
+ snum = 0;
+ }
+ if (step < 0) {
+ incpos = incrementals[snum].length
+ }else {
+ incpos = 0;
+ }
+ if (incrementals[snum].length > 0 && incpos == 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ if (hasClass(incrementals[snum][i], 'current')) {
+ incpos = i + 1;
+ }else {
+ addClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ }
+ if (incrementals[snum].length > 0 && incpos > 0) {
+ addClass(incrementals[snum][incpos - 1], 'current');
+ }
+ var guru = document.getElementById('guru');
+ if(guru && snum==0) {
+ guru.style.visibility = 'visible';
+ }else if(guru && snum>0) {
+ guru.style.visibility = 'hidden';
+ }
+ if(tranSitions && s5mode && fadeModus) {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {fadeoutSound(curSoundID,true); } // audio support
+ }
+ changeOpac(0,nid);
+ changeOpac(100,cid);
+ ce.style.visibility = 'visible';
+ shiftOpacity(cid,fadeDuration);
+ window.setTimeout("changeSlides()",fadeDuration);
+ }else {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {stopSound(curSoundID); } // audio support
+ }
+ ce.style.visibility = 'hidden';
+ if (isOp) location.hash = nid;
+ ne.style.visibility = 'visible';
+ finishSlides();
+ }
+}
+
+function changeSlides() {
+ if(nid != cid) changeOpac(100,cid);
+ document.getElementById(cid).style.visibility = 'hidden';
+ document.getElementById(nid).style.visibility = 'visible';
+ if (isOp) location.hash = nid;
+ shiftOpacity(nid,fadeDuration);
+ window.setTimeout("finishSlides()",fadeDuration);
+}
+
+function finishSlides() {
+ jl.selectedIndex = snum;
+ currentSlide();
+ loadNote();
+ permaLink();
+ number = undef;
+ if(sound[getSoundID(nid)]) {
+ playSound(nid); // audio support
+ }else if(sound[bgSoundItem] && curSoundID != bgSoundItem) {
+ playSound(bgSoundItem); // audio support
+ }
+}
+
+function goTo(target) {
+ if (target >= smax || target == snum) return;
+ go(target - snum);
+}
+
+function subgo(step) {
+ if (step > 0) {
+ removeClass(incrementals[snum][incpos - 1],'current');
+ removeClass(incrementals[snum][incpos], 'incremental');
+ if(tranSitions && s5mode && fadeModus) {
+ if(!incrementals[snum][incpos].id) {
+ var tmp = new Date(); tid = "inc" + String(tmp.getTime());
+ incrementals[snum][incpos].id = tid;
+ }else {
+ tid = incrementals[snum][incpos].id;
+ }
+ if(typeof(incrementals[snum][incpos].src) != "undefined" || incrementals[snum][incpos].getContext) {
+ changeOpac(0,tid);
+ addClass(incrementals[snum][incpos],'current');
+ shiftOpacity(tid,incrDuration);
+ setTimeout("nextInc()",incrDuration);
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ } else {
+ incpos--;
+ removeClass(incrementals[snum][incpos],'current');
+ addClass(incrementals[snum][incpos], 'incremental');
+ addClass(incrementals[snum][incpos - 1],'current');
+ loadNote();
+ }
+}
+
+function nextInc() {
+ incpos++;
+ loadNote();
+}
+
+function toggle() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ var guru = document.getElementById('guru');
+ if (!slides.disabled) {
+ stopPlay();
+ if(audioSupport && !swfUnloaded) stopAllSounds();
+ slides.disabled = true;
+ outline.disabled = false;
+ s5mode = false;
+ fontSize(1,'em');
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'visible';
+ }
+ if(guru) guru.style.visibility = 'hidden';
+ } else {
+ slides.disabled = false;
+ outline.disabled = true;
+ s5mode = true;
+ fontScale();
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'hidden';
+ }
+ slideColl[snum].style.visibility = 'visible';
+ if(guru && snum==0) guru.style.visibility = 'visible';
+ }
+}
+
+function showHide(action) {
+ var obj = GetElementsWithClassName('*','hideme')[0];
+ switch (action) {
+ case 's':
+ obj.style.visibility = 'visible';
+ break;
+ case 'h':
+ obj.style.visibility = 'hidden';
+ break;
+ case 'k':
+ if (obj.style.visibility != 'visible') {
+ obj.style.visibility = 'visible';
+ } else {
+ obj.style.visibility = 'hidden';
+ }
+ break;
+ }
+}
+
+function keys(key) {
+ if (!key) {
+ key = event;
+ key.which = key.keyCode;
+ }
+ if (helpmode) {
+ dumpHelpReq();
+ return;
+ }
+ if (key.which == 84 && !isOp) {
+ toggle();
+ return;
+ }
+ if (s5mode) {
+ if (autoMatic) {
+ switch (key.which) {
+ case 70: // f/ading on/off
+ switchFade();
+ break;
+ case 83: // s/ound on/off
+ toggleSounds();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 65: // a/utoplay on/off
+ stopPlay();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 80: // p/ause
+ case 32: // spacebar
+ pausePlay();
+ break;
+ }
+ }else {
+ switch (key.which) {
+ case 8: // backspace = HELP
+ createHelpReq();
+ break;
+ case 10: // return
+ case 13: // enter
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ if(number != undef) {
+ goTo(number);
+ break;
+ }
+ case 32: // spacebar
+ case 34: // page down
+ case 39: // rightkey
+ case 40: // downkey
+ if(number != undef) {
+ go(number);
+ } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ break;
+ case 33: // page up
+ case 37: // leftkey
+ case 38: // upkey
+ if(number != undef) {
+ go(-1 * number);
+ } else if (!incrementals[snum] || incpos <= 0) {
+ go(-1);
+ } else {
+ subgo(-1);
+ }
+ break;
+ case 65: // a/utoplay
+ startPlay();
+ break;
+ case 72: // h
+ case 36: // home
+ goTo(0);
+ break;
+ case 69: // e
+ case 35: // end
+ goTo(smax-1);
+ break;
+ case 70: // f/ade transitions on/off
+ switchFade();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 83: // s/ound support on/off
+ toggleSounds();
+ break;
+ case 27: // escape
+ case 81: // q
+ if(!isOp) byby();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 78: // n
+ createNotesWindow();
+ break;
+ }
+ if (key.which < 48 || key.which > 57) {
+ number = undef;
+ } else {
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
+ }
+ }
+ }
+ return false;
+}
+
+function clicker(e) {
+ number = undef;
+ var target;
+ if (window.event) {
+ target = window.event.srcElement;
+ e = window.event;
+ } else {
+ target = e.target;
+ }
+ if (target.href != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
+ if (!helpmode) {
+ if (!e.which || e.which == 1) {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ }
+ } else {
+ dumpHelpReq();
+ }
+}
+
+function findSlide(hash) {
+ var target = null;
+ var slides = GetElementsWithClassName('*','slide');
+ for (var i = 0; i < slides.length; i++) {
+ var targetSlide = slides[i];
+ if ( (targetSlide.name && targetSlide.name == hash)
+ || (targetSlide.id && targetSlide.id == hash) ) {
+ target = targetSlide;
+ break;
+ }
+ }
+ while(target != null && target.nodeName != 'BODY') {
+ if (hasClass(target, 'slide')) {
+ return parseInt(target.id.slice(5));
+ }
+ target = target.parentNode;
+ }
+ return null;
+}
+
+function slideJump() {
+ if (window.location.hash == null) return;
+ var sregex = /^#slide(\d+)$/;
+ var matches = sregex.exec(window.location.hash);
+ var dest = null;
+ if (matches != null) {
+ dest = parseInt(matches[1]);
+ } else {
+ dest = findSlide(window.location.hash.slice(1));
+ }
+ if (dest != null)
+ go(dest - snum);
+}
+
+function fixLinks() {
+ var thisUri = window.location.href;
+ thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
+ var aelements = document.getElementsByTagName('A');
+ for (var i = 0; i < aelements.length; i++) {
+ var a = aelements[i].href;
+ var slideID = a.match('\#slide[0-9]{1,2}');
+ if ((slideID) && (slideID[0].slice(0,1) == '#')) {
+ var dest = findSlide(slideID[0].slice(1));
+ if (dest != null) {
+ if (aelements[i].addEventListener) {
+ aelements[i].addEventListener("click", new Function("e",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "if (e.preventDefault) e.preventDefault();"), true);
+ } else if (aelements[i].attachEvent) {
+ aelements[i].attachEvent("onclick", new Function("",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "event.returnValue = false;"));
+ }
+ }
+ }
+ }
+}
+
+function externalLinks() {
+ if (!document.getElementsByTagName) return;
+ var anchors = document.getElementsByTagName('a');
+ for (var i=0; i<anchors.length; i++) {
+ var anchor = anchors[i];
+ if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
+ anchor.target = '_blank';
+ addClass(anchor,'external');
+ }
+ }
+}
+
+function permaLink() {
+ document.getElementById('plink').href = window.location.pathname + '#slide' + snum;
+}
+
+function createControls() {
+ var controlsDiv = document.getElementById("controls");
+ if (!controlsDiv) return;
+ var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
+ var hideDiv, hideList = '';
+ if (controlVis == 'hidden') {
+ hideDiv = hider;
+ } else {
+ hideList = hider;
+ }
+ if(isOp) {
+ var str = '';
+ }else {
+ var str = '<a accesskey="t" id="sheet" title="toggle CSS" href="javascript:toggle();">&plusmn;<\/a>';
+ }
+ if(isIE) {
+ var tmp = "move around&xA0;until the color&xA0;change to red!";
+ }else if(isS2) {
+ var tmp = "move around\r\nuntil the color\r\nchange to red!";
+ }else {
+ var tmp = "move around until color change to red!";
+ }
+ if(isIE) {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] for keyboard help!"><ul>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst" style="vertical-align: middle; width: 160px;"><select style="cursor: auto; width: 160px; height: auto;" id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del" style="vertical-align: middle; width: 52px;"><select style="cursor: auto; width: 52px; height: auto;" id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul><\/div><\/form>';
+ }else {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] or double click this area for keyboard help!" ondblclick="createHelpReq();"><ul>' +
+ '<li id="exit"><a href="javascript:byby();" accesskey="q" title="exit Show"><\/a><\/li>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li class="vr"><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst"><a id="list" style="cursor:wait;" title="' + tmp + '"><\/a><select id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="fadeLinks" class="vr"><\/li>' +
+ '<li id="fade"><a class="isoff" href="javascript:switchFade();" accesskey="f" title="Transions"><\/a><\/li>' +
+ '<li id="audioLinks" class="vr"><\/li>' +
+ '<li id="audio"><a class="isoff" href="javascript:toggleSounds();" accesskey="s" title="Sounds" ><\/a><\/li>' +
+ '<li id="vol"><a id="volume" style="cursor:wait;" title="' + tmp + '"><\/a><select id="volumelist" title="select Volume" onchange="setVolume();"><option value="100">100<\/option><option value="90">90<\/option><option value="80">80<\/option><option value="70">70<\/option><option value="60">60<\/option><option value="50">50<\/option><option value="40">40<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="10">10<\/option><option value="0">0<\/option><\/select><\/li>' +
+ '<li id="autoLinks" class="vr"><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del"><a id="delay" style="cursor:wait;" title="' + tmp + '"><\/a><select id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul>' +
+ '<a href="http://s5.netzgesta.de" target="_blank" title="S5 Reloaded"><img style="position: absolute; right: 0; bottom: 0;" src="data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAYAAAASYli2AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAYpSURBVHjaYvz//z8DOYCRkZEZRAEx0Ij/f2HiAAHEgqYIpACkkB1J7g8Q/wLRIJ1QNSB5fiDmAOLvQKHPQPoHSB4ggFiQDGMCUnxALAPECkAsBLIdiD8A8SMgfghU8wlqkTgQK1ZVVWldv3792fr16y8D+c9AhgMEECPIy1DDRIDYAojdzMzMWNXV1UG2/v/y5Qvzw4cPP587d24/kH8Gar/uwoULQ+/cufNFXFyciZmZ+UVmZuZKoFmvAQII5kJOIDbi4uKK2Llz53EbG5vP6GGWn5+vMWnSpJtA5jcg5v327Rtnc3PzfSD79+rVq2WBNBtIHUAAwQzkAWKzBQsWnIUZFhISovXmzZsfkpKSDD09PY8kJCR+QtWCguGvrKwsz7Rp07Q4ODh+srCwgILiH0gSIIBgBrICsUBoaCgorBiANgqvXbtWDMg8AcQf9+7d+x0o9xbI/gJV/3fVqlUvmJiY/gIdcaWhoYETahEDQADBDPwNxO9h3gNpBiq6f/HiRbWjR4+yvnr16grQNbeh6kCWsxkYGIhClT8yNDQUgyYhBoAAYoIKfgXi06mpqUowQ+vr6x+uW7fu0suXL8+uWbOGS0BAwB7kC6jXvqmoqLDIyclxzZo1S4udnR2WtBgAAggWyyCXSgOxZUxMjGpWVtY7S0vLr8iRsnnzZl4/P7/DQCYoYtSA2DApKUkVGNNPDh06dBrIvwU06xNAAMEM5AIKqAOxCjQsmHl5eXWdnJx4N2zYcB4prd4CUpfwJRuAAGJCimULoGYpbm5uZ5DBnz9/5tq4caPWkSNHeJEc+g0aTFzfv3/nACabjzk5OW8FBQVloLmHASCAYJECUiTg7+//HJiQTzY2NsrfvXv3n7m5+T5YMgJGEkjDS2gY/pKRkeHt7Ow0Bsb0v9+/fz+HxTJAAMG8DHKFLTC9aRUXF79BT9Qgw4CWHAAy70FdYgjEDgkJCTpWVlYMQBfeAaaMPqBZbwECCGYgMzQGQSleCehS0X///jEDvf9lxYoVoOTyAIjfANX+BqrlBrL1gLFf09vb+0FaWvoHMBctA6USUKQABBAjrPiCliKg7AOKIG5ougLlju9Ipc1foDJWqMWGhYWFtsBg4RISEnrg5uY2BWQgQACxIBkGMkQKijmRfPwXWuI8ASp7DQ1vEP4DDO8PwBzzDJheT0CLPQaAAEJOh0o8zAzeihwMiv+gGZ0B4sz/bIwM797/YTh1/wfDIWj5qAfMmtFnzpz5ICIiwqKoqPgjKChoOtCs5wABhJyXpUCGzddgOIethJ71jEFi1nNwgQrKz8zv37//097eDop15qVLl0pAzWAACCAWhEMYOJFdduELA++b3wxsTIwMfzmYGH6xMDG8gYYpKAg+cnJy/gB6VwuYZFiA7E+wvAwQQCy46ozexwzG17+BYx6UVE4B8Vmo68CRFR0dDQo3UAHBBUwJ4lCLGAACCNnAv4zQxAkCxbIMZ0EuBIYb98EPDFo3voGTzjOogVzArGf969cvNmC2+wssHD7BDAQIIBakmHwPDPy3MAMNeBhgpfbbVEkGhqQbDJaXvjI8BPJB4jz79u37DcwlP+fPn38NuTwECCBkA1+8+8Nwtusxg+STHwwcP/8z8EuwMXA1KjBcBSlwEmRgBhrID/U2O7QMBIEHxsbGkrAwBAggmIGgNMT64AfDWyB+By0EQMVZlC0/wwsXQYa38hzgCGGBWv5ZU1OT4c+fP8yLFi1SA3r5Haw8BAggmIGg5KBpJ8BgeOYTg8S3f2DN/OxMDNwgw0AKnv0EJ+avsITu7u6+EZqzQEHwHFqaMwAEEAtShS/pLcTwrU+Z4QwsyQANOwIL06tfGV5BqwmQWoGKigoLYJnJvWPHjhstLS169vb2M0DqAAIIVh6CXHT/9ndIawEUITCXgUDrQwbGbe8YjkJdAzZQVVVV/t69e8LAgtUYaNgxWKQABBByacMHzfTK9gIMYkBZpj//GT4c+8gAKm1AsfseqPYPtHTXAtaEacBqlgHoyq+srKw3XV1dFwHlvwEEECNyYwmp3cIJjbUf0DbLP7RGEg+0bcMCjQxQzH8BWQgQQIzktr5wAYAAYmKgMgAIMAAp8Fx3osz1lgAAAABJRU5ErkJggg==" width="20" height="32" alt="S5" \/><\/a>' +
+ '<\/div><\/form>';
+ }
+ if (controlVis == 'hidden') {
+ var hidden = document.getElementById('navLinks');
+ } else {
+ var hidden = document.getElementById('jumplist');
+ }
+ addClass(hidden,'hideme');
+}
+
+function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
+ if (!s5mode && !isOp) return false;
+ var hScreen = screen.width; var vScreen = screen.height;
+ var vWindow = window.outerHeight; var hWindow = window.outerWidth;
+ if (isOp && s5mode && defaultView=='slideshow' && ((hScreen != hWindow) || (vScreen != vWindow))) {
+ toggle();
+ return false;
+ }
+ if (isOp && !s5mode && ((hScreen != hWindow) || (vScreen != vWindow))) return false;
+ if (isOp && !s5mode && (hScreen == hWindow) && (vScreen == vWindow)) toggle();
+ var vScale = 48; // both yield 16 (the usual browser default) at 1024x768
+ var hScale = 64; // perhaps should auto-calculate based on theme's declared value?
+ if (window.innerHeight) {
+ var vSize = window.innerHeight;
+ var hSize = window.innerWidth;
+ } else if (document.documentElement.clientHeight) {
+ var vSize = document.documentElement.clientHeight;
+ var hSize = document.documentElement.clientWidth;
+ } else if (document.body.clientHeight) {
+ var vSize = document.body.clientHeight;
+ var hSize = document.body.clientWidth;
+ } else {
+ var vSize = 700; // assuming 1024x768, minus chrome and such equals 8:5
+ var hSize = 1024; // these do not account for kiosk mode or Opera Show
+ }
+ var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
+ extendImgSizes(newSize); // scalable images extension
+ extendCanSizes(newSize); // scalable canvas extension
+ extendObjSizes(newSize); // scalable object extension
+ fontSize(newSize,"px");
+ if(!isS2 || firstTime==0) {
+ generateCanvas(); // dynamic canvas extension
+ }
+ if (isGe) { // hack to counter incremental reflow bugs
+ var obj = document.getElementsByTagName('body')[0];
+ obj.style.visibility = 'hidden';
+ obj.style.display = 'none';
+ obj.style.display = 'block';
+ obj.style.visibility = 'visible';
+ changeOpac(100,'slide' + snum);
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("fixReflow()",10);
+ }else {
+ setListPos(); // invisible select extension
+ }
+}
+
+function fixReflow() {
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("finishReflow()",10);
+}
+function finishReflow() {
+ setListPos(); // invisible select extension
+}
+
+function fontSize(val,fmt) {
+ var value = val + fmt;
+ if (!(s5ss = document.getElementById('s5ss'))) {
+ if (!document.createStyleSheet) {
+ document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
+ s5ss.setAttribute('media','screen, projection');
+ s5ss.setAttribute('id','s5ss');
+ } else {
+ document.createStyleSheet();
+ document.s5ss = document.styleSheets[document.styleSheets.length - 1];
+ }
+ }
+ if (!(document.s5ss && document.s5ss.addRule)) {
+ while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
+ s5ss.appendChild(document.createTextNode('html {font-size: ' + value + ' !important;}'));
+ } else {
+ document.s5ss.addRule('html','font-size: ' + value + ' !important;');
+ }
+}
+
+function windowChange() {
+ fontScale();
+}
+
+function notOperaFix() {
+ slideCSS = document.getElementById('slideProj').href;
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ slides.setAttribute('media','screen');
+ outline.disabled = true;
+ if (isGe) {
+ slides.setAttribute('href','null'); // Gecko fix
+ slides.setAttribute('href',slideCSS); // Gecko fix
+ }
+ if ((isIE && notIE7) && document.styleSheets && document.styleSheets[0]) {
+ document.styleSheets[0].addRule('img', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('div', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('.slide', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ }
+}
+
+function getIncrementals(obj) {
+ var incrementals = new Array();
+ if (!obj)
+ return incrementals;
+ var children = obj.childNodes;
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ if (hasClass(child, 'incremental')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'incremental');
+ for (var j = 0; j < child.childNodes.length; j++) {
+ if (child.childNodes[j].nodeType == 1) {
+ addClass(child.childNodes[j], 'incremental');
+ }
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ removeClass(child,'incremental');
+ }
+ }
+ if (hasClass(child, 'show-first')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'show-first');
+ if (child.childNodes[isGe].nodeType == 1) {
+ removeClass(child.childNodes[isGe], 'incremental');
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ }
+ }
+ incrementals = incrementals.concat(getIncrementals(child));
+ }
+ return incrementals;
+}
+
+function createIncrementals() {
+ var incrementals = new Array();
+ for (var i = 0; i < smax; i++) {
+ incrementals[i] = getIncrementals(document.getElementById('slide'+i));
+ }
+ return incrementals;
+}
+
+function trap(e) {
+ if (!e) {
+ e = event;
+ e.which = e.keyCode;
+ }
+ try {
+ modifierKey = e.ctrlKey || e.altKey || e.metaKey;
+ }
+ catch(e) {
+ modifierKey = false;
+ }
+ return modifierKey || e.which == 0;
+}
+
+// notes extension
+function noteLabel() { // Gives notes id's to match parent slides
+ var notes = GetElementsWithClassName('div','notes');
+ for (var i = 0; i < notes.length; i++) {
+ var note = notes[i];
+ var id = 'note' + note.parentNode.id.substring(5);
+ note.setAttribute('id',id);
+ }
+ resetElapsedSlide();
+ resetRemainingTime();
+ window.setInterval('updateElaspedTime()', 1000);
+}
+
+function createNotesWindow() { // creates a window for our notes
+ if (!s5NotesWindow || s5NotesWindow.closed) { // Create the window if it doesn't exist
+ s5NotesWindowLoaded = false;
+ // Note: Safari has a tendency to ignore window options preferring to default to the settings of the parent window, grr.
+ s5NotesWindow = window.open(s5Path+'ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0');
+ }
+ if (s5NotesWindowLoaded) { // Load the current note if the Note HTML has loaded
+ loadNote();
+ } else { // Keep trying...
+ window.setTimeout('createNotesWindow()', 50);
+ }
+}
+
+function loadNote() {
+// Loads a note into the note window
+ var notes = nextNotes = '<em class="disclaimer">There are no notes for this slide.</em>';
+ if (document.getElementById('note' + snum)) {
+ notes = document.getElementById('note' + snum).innerHTML;
+ }
+ if (document.getElementById('note' + (snum + 1))) {
+ nextNotes = document.getElementById('note' + (snum + 1)).innerHTML;
+ }
+
+ var jl = document.getElementById('jumplist');
+ var slideTitle = jl.options[jl.selectedIndex].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex) ? ' (' + jl.selectedIndex + '/' + (smax - 1) + ')' : '');
+ if (incrementals[snum].length > 0) {
+ slideTitle += ' <small>[' + incpos + '/' + incrementals[snum].length + ']</small>';
+ }
+ if (jl.selectedIndex < smax - 1) {
+ var nextTitle = jl.options[jl.selectedIndex + 1].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex + 1) ? ' (' + (jl.selectedIndex + 1) + '/' + (smax - 1) + ')' : '');
+ } else {
+ var nextTitle = '[end of slide show]';
+ }
+
+ if (s5NotesWindow && !s5NotesWindow.closed && s5NotesWindow.document) {
+ s5NotesWindow.document.getElementById('slide').innerHTML = slideTitle;
+ s5NotesWindow.document.getElementById('notes').innerHTML = notes;
+ s5NotesWindow.document.getElementById('next').innerHTML = nextTitle;
+ s5NotesWindow.document.getElementById('nextnotes').innerHTML = nextNotes;
+ }
+ resetElapsedSlide();
+}
+
+function minimizeTimer(id) {
+ var obj = s5NotesWindow.document.getElementById(id);
+ if (hasClass(obj,'collapsed')) {
+ removeClass(obj,'collapsed');
+ } else {
+ addClass(obj,'collapsed');
+ }
+}
+
+function resetElapsedTime() {
+ presentationStart = new Date();
+ slideStart = new Date();
+ updateElaspedTime();
+}
+
+function resetElapsedSlide() {
+ if (snum != previousSlide) {
+ slideStart = new Date();
+ previousSlide = snum;
+ updateElaspedTime();
+ }
+}
+
+function updateElaspedTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var now = new Date();
+ var ep = s5NotesWindow.document.getElementById('elapsed-presentation');
+ var es = s5NotesWindow.document.getElementById('elapsed-slide');
+ ep.innerHTML = formatTime(now.valueOf() - presentationStart.valueOf());
+ es.innerHTML = formatTime(now.valueOf() - slideStart.valueOf());
+}
+
+function resetRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var startField = s5NotesWindow.document.getElementById('startFrom');
+ startFrom = readTime(startField.value);
+ countdown.remaining = startFrom * 60000; // convert to msecs
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var timeLeft = formatTime(countdown.remaining);
+ tl.innerHTML = timeLeft;
+}
+
+function updateRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var now = new Date();
+ if (countdown.state == 'run') {
+ countdown.remaining = countdown.end - now;
+ }
+ tl.style.color = '';
+ tl.style.backgroundColor = '';
+ if (countdown.remaining >= 0) {
+ var timeLeft = formatTime(countdown.remaining);
+ removeClass(tl,'overtime');
+ if (countdown.remaining < 300000) {
+ tl.style.color = 'rgb(' + (255-Math.round(countdown.remaining/2000)) + ',0,0)';
+ tl.style.backgroundColor = 'rgb(255,255,' + (Math.round(countdown.remaining/2000)) + ')';
+ }
+ } else {
+ var timeLeft = '-' + formatTime(-countdown.remaining);
+ addClass(tl,'overtime');
+ }
+ tl.innerHTML = timeLeft;
+}
+
+function toggleRemainingTime() {
+ if (countdown.state == 'pause') countdown.state = 'run'; else countdown.state = 'pause';
+ if (countdown.state == 'pause') {
+ window.clearInterval(countdown.timer);
+ }
+ if (countdown.state == 'run') {
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ countdown.timer = window.setInterval('updateRemainingTime()', 1000);
+ }
+}
+
+function alterRemainingTime(amt) {
+ var change = amt * 60000; // convert to msecs
+ countdown.end += change;
+ countdown.remaining += change;
+ updateRemainingTime();
+}
+
+function formatTime(msecs) {
+ var time = new Date(msecs);
+
+ var hrs = time.getUTCHours() + ((time.getUTCDate() -1) * 24); // I doubt anyone will spend more than 24 hours on a presentation or single slide but just in case...
+ hrs = (hrs < 10) ? '0'+hrs : hrs;
+ if (hrs == 'NaN' || isNaN(hrs)) hrs = '--';
+
+ var min = time.getUTCMinutes();
+ min = (min < 10) ? '0'+min : min;
+ if (min == 'NaN' || isNaN(min)) min = '--';
+
+ var sec = time.getUTCSeconds();
+ sec = (sec < 10) ? '0'+sec : sec;
+ if (sec == 'NaN' || isNaN(sec)) sec = '--';
+
+ return hrs + ':' + min + ':' + sec;
+}
+
+function readTime(val) {
+ var sregex = /:/;
+ var matches = sregex.exec(val);
+ if (matches == null) {
+ return val;
+ } else {
+ var times = val.split(':');
+ var hours = parseInt(times[0]);
+ var mins = parseInt(times[1]);
+ var total = (hours * 60) + mins;
+ return total;
+ }
+}
+// notes extension
+
+// startup process
+function createSlideShow() {
+ defaultCheck();
+ if(!isIE) createDetector(); // (degrade IE) scalable images extension
+ if(opac!=0 || isIE) { // &&!isIE (degrade IE)
+ tranSitions = false;
+ fadeModus = false;
+ }
+ if(tranSitions && document.getElementById && document.createElement){
+ createProgress();
+ var nop=document.getElementById('StartupControl');
+ nop.onload = dumpProgress;
+ }else {
+ startup();
+ showAll();
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+ }
+}
+
+function defaultCheck() {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'defaultView') {
+ defaultView = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'controlVis') {
+ controlVis = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'tranSitions') {
+ tranSitions = (allMetas[i].content == "true") ? true : false;
+ fadeModus = (tranSitions == true) ? true : false;
+ }
+ if (allMetas[i].name == 'fadeDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ fadeDuration = Math.max(200,Math.min(tmp,2000));
+ }
+ if (allMetas[i].name == 'incrDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ incrDuration = Math.max(50,Math.min(tmp,500));
+ }
+ if (allMetas[i].name == 'autoMatic') {
+ autoMatic = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playLoop') {
+ playLoop = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playDelay') {
+ var tmp = parseInt(allMetas[i].content);
+ playDelay = Math.max(5,Math.min(tmp,90))*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ }
+ if (allMetas[i].name == 'audioSupport') {
+ audioSupport = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'audioVolume') {
+ var tmp = parseInt(allMetas[i].content);
+ audioVolume = Math.max(0,Math.min(tmp,100));
+ }
+ if (allMetas[i].name == 'audioError') {
+ audioError = (allMetas[i].content == "true") ? true : false;
+ }
+ }
+}
+
+function createProgress() {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "StartupProgress";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=100)";
+ }else {
+ pg.style.opacity = 1.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/progress.gif)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+
+ var im = document.createElement('img');
+ im.id = "StartupControl";
+ im.src = s5Path+"ui/graphic_support/blank.gif?" + new Date().valueOf();
+ document.getElementsByTagName("body")[0].appendChild(im);
+}
+
+function startup() {
+ createControls(); // hallvord
+ slideLabel();
+ incrementals = createIncrementals();
+ noteLabel(); // [SI:060104] must follow slideLabel()
+ loadNote();
+ fixLinks();
+ externalLinks();
+ fontScale();
+ if (!isOp) {
+ if(isIE) {
+ document.getElementById('lst').style.backgroundImage = 'none';
+ document.getElementById('del').style.backgroundImage = 'none';
+ }else {
+ document.getElementById('audio').style.backgroundImage = 'none';
+ }
+ notOperaFix();
+ }else if(isOp) {
+ var obj = document.getElementById('exit');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('exit').style.opacity = 0.5;
+ obj = document.getElementById('toggle');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('toggle').style.opacity = 0.5;
+ document.getElementById('jumplist').style.visibility = 'hidden';
+ document.getElementById('list').style.visibility = 'hidden';
+ document.getElementById('lst').style.opacity = 0.5;
+ obj = document.getElementById('audio');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('audio').style.opacity = 0.5;
+ document.getElementById('volumelist').style.visibility = 'hidden';
+ document.getElementById('volume').style.visibility = 'hidden';
+ document.getElementById('vol').style.opacity = 0.5;
+ document.getElementById('delaylist').style.visibility = 'hidden';
+ document.getElementById('delay').style.visibility = 'hidden';
+ document.getElementById('del').style.opacity = 0.5;
+ }
+ slideJump();
+ if (defaultView == 'outline') toggle();
+ document.onkeyup = keys;
+ document.onkeypress = trap;
+ document.onclick = clicker;
+}
+
+function preloadImgages() {
+ var temp = '';
+ var objects = document.getElementsByTagName('img');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].src != '') {
+ temp = new Image();
+ temp.src = objects[i].src;
+ }
+ }
+}
+
+function showAll() {
+ var obj1 = GetElementsWithClassName('div','presentation')[0];
+ if(!obj1) var obj1 = GetElementsWithClassName('ol','presentation')[0];
+ var obj2 = GetElementsWithClassName('div','layout')[0];
+ if(!obj1){}else {obj1.style.display = 'block'};
+ if(!obj2){}else {obj2.style.display = 'block'};
+}
+
+function dumpProgress() {
+ document.body.removeChild(document.getElementById('StartupControl'));
+ startup();
+ preloadImgages();
+ showAll();
+ createSoundManagerScript();
+ shiftOpacity('StartupProgress',1000);
+ window.setTimeout("removeProgress()",1000);
+}
+
+function removeProgress() {
+ document.body.removeChild(document.getElementById('StartupProgress'));
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+}
+function panelSetup() {
+ if(playPause) {
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ if(playLoop) {
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ if(audioSupport && !isIE && !isOp) {
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ }
+ if(fadeModus && !isIE) {
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ if(autoMatic) {
+ var obj = document.getElementById('auto'); changeClass(obj,'ison');
+ startPlay();
+ }
+ if(audioVolume && !isIE && !isOp) {
+ var idx = 0;
+ if(audioVolume >= 95 && audioVolume <= 100) {idx = 0;}
+ else if(audioVolume >= 85 && audioVolume < 95) {idx = 1;}
+ else if(audioVolume >= 75 && audioVolume < 85) {idx = 2;}
+ else if(audioVolume >= 65 && audioVolume < 75) {idx = 3;}
+ else if(audioVolume >= 55 && audioVolume < 65) {idx = 4;}
+ else if(audioVolume >= 45 && audioVolume < 55) {idx = 5;}
+ else if(audioVolume >= 35 && audioVolume < 45) {idx = 6;}
+ else if(audioVolume >= 25 && audioVolume < 35) {idx = 7;}
+ else if(audioVolume >= 15 && audioVolume < 25) {idx = 8;}
+ else if(audioVolume >= 5 && audioVolume < 15) {idx = 9;}
+ else {idx = 10;}
+ document.getElementById('volumelist').selectedIndex = idx;
+ }
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+}
+// startup process
+
+// shutdown process
+function byby() {
+ stopPlay();
+ if(tranSitions && fadeModus && s5mode && !isOp) {
+ fadeoutSound(curSoundID,true); // audio support
+ var pg = document.createElement('div');
+ pg.id = "GoodBy";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=0)";
+ }else {
+ pg.style.opacity = 0.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/finish.gif)";
+ document.getElementsByTagName("body")[0].appendChild(pg);
+ shiftOpacity('GoodBy',1000);
+ window.setTimeout("history.back()",1000);
+ }else {
+ stopSound(curSoundID);
+ history.back();
+ }
+}
+// shutdown process
+
+// scalable images extension
+function createDetector() {
+ var em = document.createElement('div');
+ em.id='EMSizeControl'; em.style.position="absolute"; em.style.left="-999px";
+ em.style.width="1em"; em.style.height="1em"; em.style.opacity=0.0;
+ document.getElementsByTagName("body")[0].appendChild(em);
+ var nop=document.getElementById('EMSizeControl');
+ if(!nop||findPosX(nop)!=-999) {}else {
+ opac=document.getElementById('EMSizeControl').style.opacity;
+ empx=document.getElementById('EMSizeControl').offsetHeight;
+ document.body.removeChild(document.getElementById('EMSizeControl'));
+ var objects = document.getElementsByTagName('img');
+ var j = 0; var i = 0; var k = 0; var d; var obj;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ images[j] = objects[i];
+ ++j;
+ }
+ }
+ var objects = document.getElementsByTagName('canvas'); j = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ canvas[objects[i].id] = objects[i];
+ if(j==0) {
+ if(objects[i].getContext) {
+ canvasSupport = true;
+ }
+ ++j;
+ }
+ }
+ }
+ if(canvasSupport!=true) {
+ for (d in canvas) {
+ try {
+ canvas[d].setAttribute("width",1);
+ canvas[d].setAttribute("height",1);
+ } catch (e) {
+ }
+ }
+ }
+ var objects = document.getElementsByTagName('table');
+ j = 0; k = 0; l = 0; var w; var h; var tmp; var cnt;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^piechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ piecharts[j] = objects[i];
+ em = piecharts[j].getAttribute("summary");
+ if(em != "") em = "," + em;
+ piecharts[j].setAttribute("summary", w + "," + h + em);
+ ++j;
+ }
+ }
+ }
+ if(objects[i].className.match(/^barchart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ barcharts[k] = objects[i];
+ em = barcharts[k].getAttribute("summary");
+ if(em != "") em = "," + em;
+ barcharts[k].setAttribute("summary", w + "," + h + em);
+ ++k;
+ }
+ }
+ }
+ if(objects[i].className.match(/^linechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ linecharts[l] = objects[i];
+ em = linecharts[l].getAttribute("summary");
+ if(em != "") em = "," + em;
+ linecharts[l].setAttribute("summary", w + "," + h + em);
+ ++l;
+ }
+ }
+ }
+ }
+ objects = document.getElementsByTagName('object'); j = 0; i = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ medias[j] = objects[i]; ++j;
+ if(!isIE) {
+ if(objects[i].getAttributeNode("classid")) objects[i].removeAttributeNode(objects[i].getAttributeNode("classid"));
+ if(objects[i].getAttributeNode("codebase")) objects[i].removeAttributeNode(objects[i].getAttributeNode("codebase"));
+ }
+ }
+ }
+ }
+}
+function extendImgSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < images.length; i++) {
+ w=images[i].getAttribute("width",0);
+ h=images[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ images[i].style.width=Math.floor(w*q)+"px";
+ images[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+
+function extendCanSizes(f) {
+ if(empx>0 && canvasSupport) {
+ var q = (f/empx); var w = 0; var h = 0; var tmp = ""; var cnt; var obj;
+ for(var i=0; i < piecharts.length; i++) {
+ if(piecharts[i].getAttribute("summary")) {
+ tmp = piecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = piecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < barcharts.length; i++) {
+ if(barcharts[i].getAttribute("summary")) {
+ tmp = barcharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = barcharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < linecharts.length; i++) {
+ if(linecharts[i].getAttribute("summary")) {
+ tmp = linecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = linecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ }
+}
+function extendObjSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < medias.length; i++) {
+ w=medias[i].getAttribute("width",0);
+ h=medias[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ medias[i].style.width=Math.floor(w*q)+"px";
+ medias[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+function findPosX(obj) {
+ var posLeft = 0;
+ while (obj.offsetParent) {
+ posLeft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ return posLeft;
+}
+function findPosY(obj) {
+ var posTop = 0;
+ while (obj.offsetParent) {
+ posTop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ return posTop;
+}
+// scalable images extension
+
+// canvas chart extension
+function deg2rad(degrees) {
+ return Math.PI *degrees/180;
+}
+function rad2deg(radians) {
+ return 180.0 *radians/Math.PI;
+}
+function circle_point_x(radians, diameter) {
+ var x = Math.cos(radians)*(diameter/2);
+ return x;
+}
+function circle_point_y(radians, diameter) {
+ var y = Math.sin(radians)*(diameter/2);
+ return y;
+}
+function roundTo(val,dig) {
+ var num = val;
+ if (val > 8191 && val < 10485) {
+ val = val-5000;
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ num = num+5000;
+ } else {
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ }
+ return num;
+}
+function searchColor(value) {
+ for (var dat in colorNames) {
+ if(dat==value) return colorNames[dat];
+ }
+ return false;
+}
+function scanColor(value) {
+ if(value.match(/^#[0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var val1 = value.substr(1,1).toLowerCase();
+ var val2 = value.substr(2,1).toLowerCase();
+ var val3 = value.substr(3,1).toLowerCase();
+ value = '#' + val1 + val1 + val2 + val2 + val3 + val3;
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var tmp = searchColor(value.toLowerCase());
+ if(!tmp) {}else{value = tmp;}
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ value = '#000000';
+ }
+ return value.toLowerCase();
+}
+function hex2rgb(val,trans) {
+ if(val.length==7) {
+ var tp1 = Math.max(0,Math.min(parseInt(val.substr(1,2),16),255));
+ var tp2 = Math.max(0,Math.min(parseInt(val.substr(3,2),16),255));
+ var tp3 = Math.max(0,Math.min(parseInt(val.substr(5,2),16),255));
+ return 'rgba(' + tp1 + ',' + tp2 + ',' + tp3 + ',' + trans + ')';
+ }
+}
+function trim(str) {
+ return (str.replace(/\s+$/,"").replace(/^\s+/,""));
+}
+function roundedRect(ctx,x,y,width,height,radius){
+ ctx.beginPath();
+ ctx.moveTo(x,y+radius);
+ ctx.lineTo(x,y+height-radius);
+ ctx.quadraticCurveTo(x,y+height,x+radius,y+height);
+ ctx.lineTo(x+width-radius,y+height);
+ ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius);
+ ctx.lineTo(x+width,y+radius);
+ ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
+ ctx.lineTo(x+radius,y);
+ ctx.quadraticCurveTo(x,y,x,y+radius);
+ ctx.closePath();
+}
+function drawString(ctx, text, fc, tx, ty) {
+ var xp = 0; var c = "";
+ ctx.beginPath();
+ for (var i = 0; i < text.length; i++) {
+ c = text[i];
+ ctx.drawImage(font, signs[c].sx, signs[c].sy, signs[c].sw, signs[c].sh, tx+xp, ty, signs[c].sw*fc, signs[c].sh*fc);
+ xp += (signs[c].sw*fc);
+ }
+ ctx.closePath();
+}
+function strokeString(ctx, txt, col, fh, tx, ty) {
+ var fw = fh*0.666666; var lw = fh*0.125;
+ var ls = lw/2; var cr = lw; var xp = 0;
+ ctx.lineCap = "round"; ctx.lineJoin = "round"
+ ctx.lineWidth = lw; ctx.strokeStyle = col;
+ for (var i = 0; i < txt.length; i++) {
+ strokeSymbol(ctx, txt[i], ls, tx+xp, ty, fw, fh);
+ xp += (txt[i]!="."?fw+cr:(fw/2)+cr);
+ }
+}
+function strokeSymbol(ctx, symbol, fc, cx, cy, cw, ch) {
+ ctx.beginPath();
+ switch (symbol) {
+ case "0":
+ ctx.moveTo(cx+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+(cw/2),(cw/2)-fc,deg2rad(180),0, false);
+ ctx.arc(cx+(cw/2),(cy+ch)-(cw/2),(cw/2)-fc,0,deg2rad(180), false);
+ ctx.closePath();
+ break;
+ case "1":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.moveTo(cx+(cw*0.666666),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.666666),cy+fc);
+ ctx.lineTo(cx+(cw*0.25),cy+(ch*0.25));
+ break;
+ case "2":
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.8));
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+fc,cy+ch-fc);
+ ctx.arc(cx+(cw/2),cy+(cw*0.425),(cw*0.425)-fc,deg2rad(45),deg2rad(-180), true);
+ break;
+ case "3":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-90),deg2rad(180), false);
+ break;
+ case "4":
+ ctx.moveTo(cx+(cw*0.75),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.5),cy+ch-fc);
+ break;
+ case "5":
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-80),deg2rad(180), false);
+ break;
+ case "6":
+ ctx.moveTo(cx+fc,cy+ch-(cw*0.5)-fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-180),deg2rad(180), false);
+ ctx.bezierCurveTo(cx+fc,cy+fc,cx+fc,cy+fc,cx+(cw*0.9)-fc,cy+fc);
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ break;
+ case "7":
+ ctx.moveTo(cx+(cw*0.5),cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.25)-fc);
+ break;
+ case "8":
+ ctx.moveTo(cx+(cw*0.92)-fc,cy+(cw*0.59));
+ ctx.arc(cx+(cw/2),cy+(cw*0.45),(cw*0.45)-fc,deg2rad(25),deg2rad(-205), true);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-135),deg2rad(-45), true);
+ ctx.closePath();
+ ctx.moveTo(cx+(cw*0.79),cy+(ch*0.47));
+ ctx.lineTo(cx+(cw*0.21),cy+(ch*0.47));
+ break;
+ case "9":
+ ctx.moveTo(cx+cw-fc,cy+(cw*0.5));
+ ctx.arc(cx+(cw/2),cy+(cw*0.5),(cw*0.5)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.bezierCurveTo(cx+cw-fc,cy+ch-fc,cx+cw-fc,cy+ch-fc,cx+(cw*0.1)+fc,cy+ch-fc);
+ break;
+ case "%":
+ ctx.moveTo(cx+fc,cy+(ch*0.75));
+ ctx.lineTo(cx+cw-fc,cy+(ch*0.25));
+ ctx.moveTo(cx+(cw*0.505),cy+(cw*0.3));
+ ctx.arc(cx+(cw*0.3),cy+(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.moveTo(cx+(cw*0.905),cy+ch-(cw*0.3));
+ ctx.arc(cx+(cw*0.7),cy+ch-(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ break;
+ case ".":
+ ctx.moveTo(cx+(cw*0.25),cy+ch-fc-fc);
+ ctx.arc(cx+(cw*0.25),cy+ch-fc-fc,fc,deg2rad(0),deg2rad(360), false);
+ ctx.closePath();
+ break;
+ default:
+ break;
+ }
+ ctx.stroke();
+}
+function drawBar(ctx,x,y,width,height,color,value,textdiv){
+ var rw = width/2; var rh = rw/2;
+ height = Math.max(height,rw);
+ var dh = Math.max(height-(2*rh),0.1); var S2L;
+ var xx = rw/8; var yy = rh/4;
+ var yo = rh/2; y = y - yy;
+ if(canvas_noshadow <= 0 && canvas_noshade <= 0) {
+ ctx.save();
+ S2L = ctx.createRadialGradient(x+rw+rh,y+height-rw+yy+rh,0,x+rw,y+height-rw+yy,rw);
+ S2L.addColorStop(0, 'rgba(0,0,0,0.5)');
+ S2L.addColorStop(0.7, 'rgba(0,0,0,0.25)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = S2L;
+ ctx.scale(1,0.5);
+ ctx.translate(xx,y+height+yy);
+ if(isOp){
+ ctx.fillRect(x,y+yy+height-width,width,width);
+ }else {
+ ctx.arc(x+rw,y+yy+height-width,width,0,deg2rad(360), false);
+ ctx.fill();
+ }
+ ctx.restore();
+ }else if(canvas_noshadow <= 0 && canvas_noshade >= 1) {
+ ctx.fillStyle = 'rgba(0,0,0,0.2)';
+ ctx.fillRect(x+yo,y+rh+yo+yo,width,dh);
+ }
+
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x,y+(height/2),x+width,y+(height/2));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.75)');
+ S2L.addColorStop(0.2, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.3, 'rgba(0,0,0,0)');
+ S2L.addColorStop(0.5, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.35)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.1)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.strokeStyle = S2L;
+ ctx.stroke();
+ }else {
+ ctx.fillStyle = color;
+ ctx.fillRect(x,y+rh+yo,width,dh);
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var bw = width; var bh = bw/4;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ var c; var w;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,x+(width/2)-(bw/2),y,bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext <= 0) {
+ strokeString(ctx, value + "%","rgba(48,48,48,1)", th, x+(width/2)-(w/2), y+((bh-th)/2));
+ }else {
+ drawString(ctx, value + "%", tf, x+(width/2)-(w/2), y+((bh-th)/2.2));
+ }
+ }else {
+ var bh = bw/3; var th = roundTo(bh*0.75,0);
+ roundedRect(ctx,x,y,bw,bh,bh/4);
+ ctx.fill();
+ var obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = x + "px";
+ obj.style.top = y+((bh-th)/2.2) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+
+ }
+}
+function drawLine(ctx,x,y,width,height,dist,array,factor,color,fill){
+ if(fill <= 0){
+ var style = hex2rgb(color,0.5);
+ ctx.lineJoin = "miter";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height);
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.lineTo(x+width,y+height);
+ ctx.lineTo(x,y+height);
+ ctx.closePath();
+ ctx.fillStyle = style;
+ ctx.fill();
+ }
+ ctx.lineJoin = "round";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height-(array[0]*factor));
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.strokeStyle = color;
+ ctx.stroke();
+}
+function setDataURL(cid) {
+ if(cid.toDataURL) {
+ var obj = document.getElementById(cid.id + "_link");
+ if(obj) {
+ obj.setAttribute("title", "To Data URL");
+ obj.setAttribute("target", "_blank");
+ obj.setAttribute("href", cid.toDataURL());
+ }
+ }
+}
+function get_input(dataobj,canvasobj,linechart) {
+ var table = document.getElementById(dataobj);
+ var canvas = document.getElementById(canvasobj);
+ var row; var clm; var cnt = 0; var val = 0; var nme = ""; var col = "";
+ if(canvas.getContext) {
+ canvas_width = parseInt(canvas.style.width);
+ canvas_height = parseInt(canvas.style.height);
+ if(canvas_width >= 16 && canvas_height >= 16) {
+ var tmp = table.getAttribute("summary");
+ canvas_noshade = 0; canvas_noshadow = 0;
+ canvas_notext = 0; canvas_imgtext = 0;
+ canvas_htmltext = 0; canvas_nofill = 0;
+ if(tmp.search(/noshadow/) != -1) canvas_noshadow = 1;
+ if(tmp.search(/noshade/) != -1) canvas_noshade = 1;
+ if(tmp.search(/nofill/) != -1) canvas_nofill = 1;
+ if(tmp.search(/notext/) != -1) canvas_notext = 1;
+ if(tmp.search(/htmltext/) != -1) canvas_htmltext = 1;
+ if(tmp.search(/imgtext/) != -1) canvas_imgtext = 1;
+ if(table.getAttribute("bgcolor")) {
+ canvas_bgcolor = scanColor(table.getAttribute("bgcolor"));
+ }
+ ChartData = new Array(); colorSlice = new Array();
+ if(table.getElementsByTagName("tr")[0].getElementsByTagName("th")[0]) cnt = 1;
+ for(var r = cnt; r < table.getElementsByTagName("tr").length; r++) {
+ row = table.getElementsByTagName("tr")[r];
+ clm = row.getElementsByTagName("td").length;
+ if(row.getElementsByTagName("td")[0].getAttribute("bgcolor")) {
+ col = scanColor(row.getElementsByTagName("td")[0].getAttribute("bgcolor")); val = 0;
+ nme = trim(row.getElementsByTagName("td")[1].innerHTML.replace(/<[^>]+>/g,""));
+ if(!linechart) {
+ if(clm > 3) {
+ for(var z = 2; z < clm; z++) {
+ val += parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ }else {
+ val = parseFloat(row.getElementsByTagName("td")[2].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ if(!isNaN(val) && val > 0 && nme != '') {
+ colorSlice[r-cnt] = col; ChartData[nme] = Math.abs(val);
+ }else {
+ break;
+ }
+ }else {
+ val = 0; i = 0;
+ if(clm > 3 && nme != '') {
+ ChartData[r-cnt] = new Array();
+ colorSlice[r-cnt] = col;
+ for(var z = 2; z < clm; z++) {
+ val = Math.abs(parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,"")));
+ if(!isNaN(val) && val >= 0) {
+ ChartData[r-cnt][i] = val; i++;
+ }else {
+ ChartData[r-cnt][i] = 0; i++;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }
+ }
+}
+function setPieChart(canvasobj,textobj) {
+ var cd = (Math.min(canvas_width,canvas_height)/110)*100;
+ var cp = cd*0.1; var cr = cd/2;
+ var sr = cr*0.93; var cw = cd+cp; var ch = cw;
+ var cx = (cd/2)+(cp/2); var cy = cx; var ct = 0;
+ for (var data in ChartData) {
+ ct += ChartData[data];
+ }
+ var poc = ct/100;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ }
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,cw,ch);
+ }else {
+ ctx.clearRect(0,0,cw,ch);
+ }
+ if(canvas_noshadow <= 0) {
+ if(!isOp) {
+ ctx.beginPath();
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),cr,cx+(cr*0.1),cy+(cr*0.1),sr*0.9);
+ B2B.addColorStop(0, 'rgba(0,0,0,0)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.arc(cx+(cr*0.1),cy+(cr*0.1),cr,0,deg2rad(360), false);
+ ctx.closePath();
+ ctx.fillStyle = B2B;
+ ctx.fill();
+ }else {
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),0,cx+(cr*0.1),cy+(cr*0.1),cr);
+ B2B.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(0.87, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = B2B;
+ ctx.fillRect(0,0,cw,ch);
+ }
+ }
+ var val = 0; var deg = 0; var idx = 0; var data;
+ for (data in ChartData) {
+ val = ChartData[data]; sdeg = deg;
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ ctx.beginPath();
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr,sdeg,edeg, false);
+ ctx.lineTo(cx,cy);
+ ctx.closePath();
+ ctx.fillStyle = colorSlice[(idx++)];
+ ctx.fill();
+ }
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ var W2T = ctx.createLinearGradient(cp*2,cp*2,cx,cy);
+ W2T.addColorStop(0, 'rgba(255,255,255,0.8)');
+ W2T.addColorStop(1, 'rgba(255,255,255,0)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.fillStyle = W2T;
+ ctx.fill();
+ ctx.beginPath();
+ var T2B = ctx.createLinearGradient(cx,cy,cw-(cp*2),ch-(cp*2));
+ T2B.addColorStop(0, 'rgba(0,0,0,0)');
+ T2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.fillStyle = T2B;
+ ctx.fill();
+ ctx.beginPath();
+ var B2T = ctx.createLinearGradient(cx,cy,cw-(cp*1.9),ch-(cp*1.9));
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.strokeStyle = B2T;
+ ctx.stroke();
+ ctx.beginPath();
+ var T2W = ctx.createLinearGradient(cx,cy,(cp*1.9),(cp*1.9));
+ T2W.addColorStop(0, 'rgba(255,255,255,0)');
+ T2W.addColorStop(1, 'rgba(255,255,255,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.strokeStyle = T2W;
+ ctx.stroke();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var mpos = 0; var per = 0; var gx = 0;
+ var gy = 0; var tx = 0; var ty = 0;
+ var obj = ""; var w = 0; var c = 0;
+ var bw = cr*0.45; var bh = cr*0.125;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext >= 1) {
+ bw = (cr*0.365);
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ for (data in ChartData) {
+ val = ChartData[data];
+ sdeg = deg; mpos = deg+(((val/2)/ct)*deg2rad(360));
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ per = roundTo(val/poc,2);
+ gx = circle_point_x(mpos, cd);
+ gy = circle_point_y(mpos, cd);
+ tx = parseFloat((cx+(2*Math.floor(cx + gx)))/3);
+ ty = (cy+(2*Math.floor(cy + gy)))/3;
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext >= 1) {
+ drawString(ctx, per + "%", tf, tx-(w/2), ty-(th/1.8));
+ }else {
+ strokeString(ctx, per + "%","rgba(48,48,48,1)", th, tx-(w/2), ty-(th/2));
+ }
+ }else {
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = (tx-(bw/2)) + "px";
+ obj.style.top = ty-(th/1.8) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+ }
+ }
+ }
+}
+function setBarChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9; var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05; var ph = canvas_height*0.05;
+ var cm = 0; var ct = 0;
+ for (var data in ChartData) {
+ cm = Math.max(cm,ChartData[data]);
+ ct += ChartData[data];
+ }
+ var hf = ih/cm; var bs = colorSlice.length;
+ var bw = iw/(bs*1.1); var poc = ct/100;
+ var th = roundTo((bw/3)*0.75,0);
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ var obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ var cc = ""; var bh = 0; var idx = 0; var t = 0; per = 0;
+ for (var data in ChartData) {
+ per = roundTo(ChartData[data]/poc,2);
+ bh = ChartData[data]*hf;
+ drawBar(ctx,pw+(t*(bw*1.1)),ph+ih-bh,bw,bh,colorSlice[(idx++)],per,textdiv);
+ t++;
+ }
+ }
+}
+function setLineChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9;
+ var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05;
+ var ph = canvas_height*0.05;
+ var cm = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ cm = Math.max(cm,ChartData[i][j]);
+ }
+ }
+ var hf = (ih*0.95)/cm; var bw = iw;
+ var dw = iw/(ChartData[0].length-1)
+ var dh = ih/(ChartData[0].length-1)
+ var ps = Math.min(pw,ph); lw = ps/4;
+ var B2T;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_noshadow <= 0) {
+ B2T = ctx.createLinearGradient(pw+ps,ph+ih+1,pw+ps+ps,ph+ih+1);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps,ph+ih);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.lineTo(pw+ps+ps,ph+ih);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+ps+ps,ph+ih,pw+ps+ps,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps+ps,ph+ih);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+ps+iw,ph+ih+ps);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.closePath();
+ ctx.fill();
+ var B2T = ctx.createLinearGradient(pw+iw+1,ph+ps,pw+iw+1,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.35)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps);
+ ctx.lineTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+iw,ph+ps+ps,pw+iw+ps,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.35)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+iw+ps,ph+ih+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = lw/2;
+ ctx.strokeStyle = "rgba(255,255,255,0.25)";
+ if(canvas_nofill <= 0) {
+ ctx.fillStyle = "rgba(240,240,240,0.8)";
+ ctx.strokeStyle = "rgba(255,255,255,1)";
+ ctx.fillRect(pw,ph,iw,ih);
+ }
+ for (var i = 0; i < ChartData[0].length-1; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph);
+ ctx.lineTo(pw+(i*dw),ph+ih);
+ ctx.stroke();
+ }
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw,ph+(i*dh));
+ ctx.lineTo(pw+iw,ph+(i*dh));
+ ctx.stroke();
+ }
+ ctx.lineWidth = lw;
+ var cc = ""; var bh = 0; var idx = 0; var t = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ t = Math.max(t,ChartData[i][j]);
+ }
+ bh = t*hf; cc = colorSlice[(idx++)];
+ drawLine(ctx,pw,ph+ih-bh,bw,bh,dw,ChartData[i],hf,cc,canvas_nofill);
+ }
+ ctx.beginPath();
+ ctx.moveTo(pw,ph);
+ ctx.lineTo(pw,ph+ih);
+ ctx.lineTo(pw+iw+(lw/2),ph+ih);
+ ctx.strokeStyle = "rgba(48,48,48,1)";
+ ctx.stroke();
+ ctx.lineWidth = lw/2;
+ B2T = ctx.createLinearGradient(pw,ph+ih,pw,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,1)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.strokeStyle = B2T;
+ for (var i = 0; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph+ih);
+ ctx.lineTo(pw+(i*dw),ph+ih+ps);
+ ctx.stroke();
+ }
+ B2T = ctx.createLinearGradient(pw-ps,ph,pw,ph);
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,1)');
+ ctx.strokeStyle = B2T;
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw-ps,ph+(i*dh));
+ ctx.lineTo(pw,ph+(i*dh));
+ ctx.stroke();
+ }
+ }
+}
+function generateCanvas() {
+ if(canvasSupport) {
+ var canvasID; var tdataID; var textID;
+ var tmp; var dat; var i; var j;
+ for(i=0; i < piecharts.length; i++) {
+ tmp = piecharts[i].id.split("_");
+ tdataID = piecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setPieChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < barcharts.length; i++) {
+ tmp = barcharts[i].id.split("_");
+ tdataID = barcharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setBarChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < linecharts.length; i++) {
+ tmp = linecharts[i].id.split("_");
+ tdataID = linecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID,true);
+ if(colorSlice.length > 0) {
+ if(ChartData.length == colorSlice.length) {
+ setLineChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ }
+}
+// canvas chart extension
+
+// invisible select extension
+function setListPos(opt) {
+ if(!isIE) { //(degrade IE)
+ var ref = document.getElementById('list');
+ var x = findPosX(ref); var y = findPosY(ref);
+ var obj = document.getElementById('jumplist');
+ obj.style.position = 'fixed'; obj.style.left = x + 'px'; obj.style.top = y + 'px';
+ var vol = document.getElementById('volumelist');
+ ref = document.getElementById('volume');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ vol.style.position = 'fixed'; vol.style.left = x + 'px'; vol.style.top = y + 'px';
+ var del = document.getElementById('delaylist');
+ ref = document.getElementById('delay');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ del.style.position = 'fixed'; del.style.left = x + 'px'; del.style.top = y + 'px';
+ var pnl = document.getElementById('navLinks');
+ }
+ if(opt) {
+ if(isIE) {
+ //(degrade IE)
+ //pnl.style.filter = "alpha(opacity=80)";
+ }else {
+ obj.style.opacity = 0.0;
+ vol.style.opacity = 0.0;
+ del.style.opacity = 0.0;
+ pnl.style.opacity = 0.8;
+ }
+ }
+}
+// invisible select extension
+
+// transition extension
+function switchFade() {
+ if(tranSitions && s5mode && fadeModus) {
+ fadeModus = false;
+ playDelay = playDelay-(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'isoff');
+ }else if(tranSitions && s5mode && !fadeModus) {
+ fadeModus = true;
+ playDelay = playDelay+(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ currentSlide();
+}
+function opacity(ids, opacStart, opacEnd, millisec) {
+ var speed = Math.round(millisec / 100);
+ var timer = 0;
+ if(opacStart > opacEnd) {
+ for(var i = opacStart; i >= opacEnd; i--) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ } else if(opacStart < opacEnd) {
+ for(var i = opacStart; i <= opacEnd; i++) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ }
+}
+function changeOpac(opacity, ids) {
+ var obj = document.getElementById(ids);
+ if (isIE) {
+ obj.style.filter = "alpha(opacity=" + opacity + ")";
+ } else {
+ obj.style.opacity = (opacity / 100);
+ }
+}
+function shiftOpacity(ids, millisec) {
+ if(document.getElementById(ids).style.opacity != '') {
+ var currentOpac = document.getElementById(ids).style.opacity * 100;
+ } else {
+ var currentOpac = 0;
+ }
+ if(currentOpac == 0) {
+ opacity(ids, currentOpac, 100, millisec);
+ } else if(currentOpac > 0) {
+ opacity(ids, currentOpac, 0, millisec);
+ }
+}
+// transition extension
+
+// autoplay extension
+function autoPlay() {
+ if (s5mode && autoMatic && !playPause) {
+ if ((snum >= (smax-1)) && playLoop) {
+ goTo(0);
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }else if ((snum >= (smax-1)) && !playLoop) {
+ stopPlay();
+ }else {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ if (incrementals[snum].length >0) {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = parseInt(playDelay/(incrementals[snum].length+1));
+ remainDer = parseInt(playDelay-(incrDelay*incrementals[snum].length));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ } else {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = incrDuration;
+ remainDer = parseInt(playDelay-(incrementals[snum].length*incrDuration));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }
+ }
+}
+function autoPlayIncr() {
+ if (incpos < incrementals[snum].length) {
+ subgo(1);
+ autoRun = setTimeout('autoPlayIncr();',incrDelay);
+ }else {
+ autoRun = setTimeout('nop();',remainDer);
+ }
+}
+function nop() {
+ // no operation dummy
+}
+function togglePlay() {
+ if (autoRun && s5mode) {
+ stopPlay();
+ }else if (!autoRun && s5mode) {
+ startPlay();
+ }
+}
+function stopPlay() {
+ if (autoRun && s5mode) {
+ clearTimeout(autoRun); autoRun = null;
+ autoMatic = false; playPause = false; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'isoff');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ currentSlide();
+ }
+}
+function startPlay() {
+ if (!autoRun && s5mode) {
+ playPause = false; autoMatic = true; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'ison');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ autoRun = setTimeout('autoPlay();',playDelay);
+ currentSlide();
+ }
+}
+function pausePlay() {
+ if (s5mode && autoMatic) {
+ if (playPause) {
+ playPause = false; autoRun = setTimeout('autoPlay();',playDelay);
+ var obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ }else {
+ if (autoRun){
+ clearTimeout(autoRun); autoRun = null; playPause = true;
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+ }
+}
+function switchLoop() {
+ if(s5mode) {
+ if (playLoop) {
+ playLoop = false;
+ var obj = document.getElementById('loop'); changeClass(obj,'isoff');
+ }else {
+ playLoop = true;
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+}
+function setDelay() {
+ var val = document.getElementById('delaylist');
+ if(s5mode) {
+ var delay = Math.max(5,Math.min(parseInt(val.value),300));
+ playDelay = (fadeModus == true) ? ((delay*1000)+(2*fadeDuration)) : (delay*1000);
+ }
+}
+// autoplay extension
+
+// audio extension
+function createSoundManagerScript() {
+ if(typeof soundManager=="undefined") {
+ onerrorSM2();
+ }else {
+ var script=document.createElement('SCRIPT');
+ var tx=document.createTextNode("soundManager.createMovie();");
+ script.appendChild(tx);
+ document.getElementsByTagName("body")[0].appendChild(script);
+ }
+}
+//soundManager.onload = function() {
+function onloadSM2() {
+ if(!isIE) { //(degrade IE)
+ swfUnloaded = false;
+ preloadSounds();
+ }
+}
+//soundManager.onerror = function() {
+function onerrorSM2() {
+ if(typeof soundManager!="undefined") {
+ soundManager.destruct;
+ delete soundManager;
+ }
+ audioSupport = false; swfUnloaded = true;
+ if(audioError && !isIE && !isOp) {
+ var dv = document.createElement('div'); dv.id = "guru";
+ var d2=document.createElement('div'); dv.appendChild(d2);
+ var tx=document.createTextNode('Guru Meditation - SoundManager failed to load/initialize!');
+ d2.appendChild(tx); document.getElementById('slide0').appendChild(dv);
+ }
+}
+function audioSetup() {
+ if(sound[0]) {
+ playSound(0);
+ }else if(sound[bgSoundItem] && !sound[0]) {
+ playSound(bgSoundItem);
+ }
+}
+function fadeoutSound(ids, option) {
+ if(curSoundID >= 0 && !swfUnloaded) {
+ if(isNaN(ids)) {
+ if(ids == "bgSound") {
+ var cnum = parseInt(bgSoundItem);
+ }else {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && ids == sound[i]["id"]) {
+ var cnum = i;
+ break;
+ }
+ }
+ }
+ }else {
+ var cnum = ids;
+ ids = sound[cnum]["id"];
+ }
+ var vol = getMaxVolume(sound[cnum]["volume"]);
+ var millisec = fadeDuration;
+ var speed = Math.round(millisec / vol);
+ var timer = 0;
+ for(var i = vol; i > 0; i--) {
+ setTimeout("fadeout(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ if(option) setTimeout("stopSound('"+ids+"')",millisec);
+ }
+}
+function fadeout(volume, id) {
+ soundManager.setVolume(id,volume);
+}
+function stopSound(ids) {
+ var sid;
+ if(isNaN(ids)) {
+ sid = ids;
+ }else if(sound[ids]) {
+ sid = sound[ids]["id"];
+ }
+ if(sid!='' && curSoundID >= 0) {
+ soundManager.stop(sid);
+ curSoundID = -1;
+ }
+}
+function toggleSounds() {
+ if(audioSupport && !swfUnloaded) {
+ stopAllSounds();
+ }else if (!audioSupport && !swfUnloaded) {
+ allowSounds();
+ }
+}
+function allowSounds() {
+ if(!swfUnloaded) {
+ audioSupport = true;
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ currentSlide();
+ }
+}
+function stopAllSounds() {
+ if(curSoundID >= 0) {
+ stopSound(curSoundID);
+ }else {
+ soundManager.stopAll();
+ curSoundID = -1;
+ }
+ audioSupport = false;
+ var obj = document.getElementById('audio'); changeClass(obj,'isoff');
+ currentSlide();
+}
+function playSound(id) {
+ if(audioSupport && !swfUnloaded) {
+ var url, sid, vol, lps, cnum;
+ if(isNaN(id)) {
+ sid = id;
+ if(sid == "bgSound") {
+ cnum = parseInt(bgSoundItem);
+ }else {
+ cnum = getSoundID(id);
+ }
+ }else {
+ cnum = parseInt(id);
+ if(sound[cnum]) sid = sound[cnum]["id"];
+ }
+ if(sound[cnum] && sound[cnum]["url"]!='' && sid!=''){
+ url = sound[cnum]["url"];
+ vol = (sound[cnum]["volume"]!='')?getMaxVolume(sound[cnum]["volume"]):getMaxVolume(100);
+ lps = (sound[cnum]["loops"])?true:false;
+ if(lps) {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){soundManager.play(sid,{volume:getMaxVolume(sound[cnum]["volume"])});}});
+ }else {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){curSoundID=-1;}});
+ }
+ }
+ }
+}
+function getSoundID(str) {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && str == sound[i]["id"]) {
+ var id = i;
+ break;
+ }
+ }
+ return id;
+}
+function setVolume() {
+ var vol = document.getElementById('volumelist');
+ if(audioSupport && !swfUnloaded) {
+ audioVolume = parseInt(vol.value);
+ if(curSoundID >= 0) {
+ if(sound[curSoundID]) {
+ var sid = sound[curSoundID]["id"];
+ var vid = getMaxVolume(sound[curSoundID]["volume"]);
+ soundManager.setVolume(sid,vid);
+ }
+ }
+ }
+}
+function getMaxVolume(value) {
+ if(audioVolume>0) {var factor = audioVolume/100;}else {var factor = 0;}
+ return Math.max(0,Math.min(parseInt(value*factor),audioVolume));
+}
+function preloadSounds() {
+ var temp = ''; var parm = ''; var t = ''; var cl = '';
+ var objects = document.getElementsByTagName('object');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].type.toLowerCase() == 'audio/mp3' && objects[i].data != '') {
+ objects[i].width = 0; objects[i].height = 0;
+ if(objects[i].parentNode.tagName == 'DIV') {
+ cl = objects[i].parentNode.className.toLowerCase();
+ if(cl == 'presentation' || cl == 'slide') {
+ if(cl == 'presentation') {
+ t = parseInt(bgSoundItem);
+ }else {
+ t = parseInt(objects[i].parentNode.id.slice(5, objects[i].parentNode.id.length));
+ }
+ sound[t] = new Object();
+ if(t < bgSoundItem) {
+ sound[t]["id"] = objects[i].parentNode.id;
+ }else {
+ sound[t]["id"] = "bgSound";
+ }
+ sound[t]["url"] = objects[i].data;
+ sound[t]["volume"] = 100; sound[t]["loops"] = false;
+ if(objects[i].archive != '') {
+ parm = objects[i].archive.toLowerCase().split(',');
+ for (var j=0; j < parm.length; j++) {
+ if(parm[j] == 'loop') sound[t]["loops"] = true;
+ if(parm[j].search(/^volume/) != -1) {
+ var tmp = parm[j].split(':');
+ sound[t]["volume"] = parseInt(tmp[1]);
+ }
+ }
+ }
+ soundManager.createSound(sound[t]["id"],sound[t]["url"]);
+ }
+ }
+ }
+ }
+}
+// audio extension
+
+// help extension
+function createHelpReq() {
+ if(!document.getElementById("HelpReq")) {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "HelpReq";
+ if (pg.addEventListener) {
+ pg.addEventListener("onclick",dumpHelpReq,false);
+ } else if (pg.attachEvent) {
+ pg.attachEvent("onclick",dumpHelpReq);
+ }
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=90)";
+ } else {
+ pg.style.opacity = 0.9;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(64,64,64)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/help.jpg)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+ if(document.getElementById("HelpReq")) {
+ helpmode = true;
+ }
+ }
+}
+function dumpHelpReq() {
+ if(document.getElementById("HelpReq")) {
+ document.body.removeChild(document.getElementById('HelpReq'));
+ helpmode = false;
+ }
+}
+// help extension
+
+//DEBUG
+function ConsoleLog(value) {
+ if(window.console) {
+ window.console.log(value);
+ }
+}
+//DEBUG
+
+document.write('<style type="text/css" media="screen" id="blockStyle">.presentation, .layout {display: none; }</style>');
+
+if(!isIE && !isOp) {
+ document.write('<script type="text/javascript" src="'+s5Path+'ui/audio_support/soundmanager2.js"></script>');
+ if(typeof soundManager!="undefined") {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'audioDebug') {
+ var audioDebug = (allMetas[i].content == "true") ? true : false;
+ soundManager.defaultOptions.debugMode = audioDebug;
+ }
+ }
+ }
+}
+
+window.onload = createSlideShow;
+window.onresize = function(){setTimeout('windowChange()',5);} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/toggle_link.png
new file mode 100644
index 000000000..4588e2514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/toggle_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/toggle_over.png
new file mode 100644
index 000000000..400f613b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/toggle_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/volume_link.png
new file mode 100644
index 000000000..f362acd1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/volume_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/wrap.css
new file mode 100644
index 000000000..a37315552
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/wrap.css
@@ -0,0 +1,410 @@
+/********************************************************************
+Screen and Print Styles for the Wrap Plugin
+********************************************************************/
+
+/* tables in columns and boxes should span the whole width */
+.wrap_column table,
+.wrap_left table, .wrap_right table, .wrap_center table,
+.wrap_box table,
+.wrap_info table, .wrap_important table, .wrap_alert table, .wrap_tip table, .wrap_help table, .wrap_todo table, .wrap_download table {
+ width: 100%;
+}
+/* emulate a headline */
+.wrap_column em strong,
+.wrap_left em strong, .wrap_right em strong, .wrap_center em strong,
+.wrap_box em strong,
+.wrap_info em strong, .wrap_important em strong, .wrap_alert em strong, .wrap_tip em strong, .wrap_help em strong, .wrap_todo em strong, .wrap_download em strong {
+ font-size: 130%;
+ font-weight: bold;
+ font-style: normal;
+ display: block;
+}
+/* emulate a bigger headline with a bottom border */
+.wrap_column em strong em.u,
+.wrap_left em strong em.u, .wrap_right em strong em.u, .wrap_center em strong em.u,
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ font-size: 115%;
+ border-bottom: 1px solid __border__;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+}
+/* different bigger headline for safety notes */
+.wrap_danger em strong em.u, .wrap_warning em strong em.u, .wrap_caution em strong em.u, .wrap_notice em strong em.u, .wrap_safety em strong em.u {
+ font-size: 115%;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+ text-transform: uppercase;
+ border-bottom-width: 0;
+}
+/* change border colour of emulated headlines inside boxes to something more neutral
+ (to match all the different background colours) */
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ border-bottom-color: #999;
+}
+
+
+/* columns
+********************************************************************/
+
+.wrap_left,
+.wrap_column {
+ float: left;
+ margin-right: 1.5em;
+}
+.wrap_right {
+ float: right;
+ margin-left: 1.5em;
+}
+.wrap_center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+/*
+.wrap_column,
+.wrap_left,
+.wrap_right {
+ overflow: hidden;
+}
+*/
+.wrap_container {
+ margin-right: -1.5em;
+}
+
+
+/* alignments
+********************************************************************/
+
+.wrap_leftalign {
+ text-align: left;
+}
+.wrap_centeralign {
+ text-align: center;
+}
+.wrap_rightalign {
+ text-align: right;
+}
+.wrap_justify {
+ text-align: justify;
+}
+
+
+/* box
+********************************************************************/
+
+/* see styles for boxes and notes with icons in style.css */
+
+/*____________ rounded corners ____________*/
+/* (only for modern browsers) */
+
+div.wrap_round {
+ border-radius: 20px;
+ -moz-border-radius: 20px;
+ -webkit-border-radius: 20px;
+ -khtml-border-radius: 20px;
+}
+span.wrap_round {
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -khtml-border-radius: 2px;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_lo {
+ color: __text_neu__;
+ font-size: 85%;
+}
+div.wrap_em {
+ color: #c00;
+ font-weight: bold;
+}
+
+/* see styles for highlighted text in style.css */
+
+
+/* typography
+********************************************************************/
+
+/*____________ fonts ____________*/
+
+div.wrap_sansserif {
+ font-family: Verdana,Tahoma,Geneva,"DejaVu Sans","Bitstream Vera Sans","Liberation Sans", Arial,Helvetica,FreeSans,"Liberation Sans","Nimbus Sans L", sans-serif;
+}
+div.wrap_serif {
+ font-family: Georgia,Garamond,"Palatino Linotype","Book Antiqua",Palatino,Palladio,"URW Palladio L","Liberation Serif",Didot,Gentium,"Bitstream Charter","Century Schoolbook L", "Times New Roman",Times,"Nimbus Roman No9 L","FreeSerif", serif;
+}
+div.wrap_monospace {
+ font-family: Courier,"Courier New",FreeMono,"Nimbus Mono L","Liberation Mono", "Lucida Console",Monaco,"DejaVu Sans Mono","Bitstream Vera Sans Mono", monospace;
+}
+
+/*____________ font size ____________*/
+
+div.wrap_bigger {
+ font-size: 125%;
+}
+div.wrap_muchbigger {
+ font-size: 200%;
+}
+div.wrap_smaller {
+ font-size: 75%;
+}
+
+/*____________ font colours ____________*/
+
+div.wrap_fgred {
+ color: #900;
+}
+div.wrap_fggreen {
+ color: #090;
+}
+div.wrap_fgblue {
+ color: #009;
+}
+div.wrap_fgcyan {
+ color: #099;
+}
+div.wrap_fgviolet {
+ color: #909;
+}
+div.wrap_fgyellow {
+ color: #990;
+}
+div.wrap_fggrey {
+ color: #666;
+}
+div.wrap_fgblack {
+ color: #000;
+}
+
+/* see styles for background colours and white font colour in style.css */
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ indent ____________*/
+
+div.wrap_indent {
+ padding-left: 1.5em;
+}
+
+/*____________ outdent ____________*/
+
+div.wrap_outdent {
+ margin-left: -1.5em;
+}
+
+/*____________ word wrapping in pre ____________*/
+
+divdiv.wrap_prewrap pre {
+ white-space: pre-wrap;
+ word-wrap: break-word;/* for IE < 8 */
+ /* white-space: -moz-pre-wrap; for FF < 3 */
+}
+
+/*____________ spoiler ____________*/
+
+divdiv.wrap_spoiler {
+ margin-bottom: 1.5em;
+}
+/* see rest of spoiler styles in style.css */
+
+/*____________ clear float ____________*/
+
+div.wrap_clear {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ font-size: 1px;
+ visibility: hidden;
+ overflow: hidden;
+}
+
+/*____________ hide ____________*/
+
+div.wrap_hide {
+ display: none;
+}
+
+
+/* STYLE.CSS */
+
+/* box
+********************************************************************/
+
+.wrap_box {
+ background: __background_alt__;
+ color: __text__;
+/*
+ overflow: hidden;
+*/
+}
+div.wrap_box,
+div.wrap_danger, div.wrap_warning, div.wrap_caution, div.wrap_notice, div.wrap_safety {
+ padding: 1em 1em .5em;
+ margin-bottom: 1.5em;
+}
+span.wrap_box,
+span.wrap_danger, span.wrap_warning, span.wrap_caution, span.wrap_notice, span.wrap_safety {
+ padding: 0 .3em;
+}
+
+/*____________ notes with icons ____________*/
+
+/* general styles for all note divs */
+div.wrap_info, div.wrap_important, div.wrap_alert, div.wrap_tip, div.wrap_help, div.wrap_todo, div.wrap_download {
+ padding: 1em 1em .5em 70px;
+ margin-bottom: 1.5em;
+ min-height: 68px;
+ background-position: 10px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html div.wrap_info, * html div.wrap_important, * html div.wrap_alert, * html div.wrap_tip, * html div.wrap_help, * html div.wrap_todo, * html div.wrap_download {
+ height: 68px;
+}
+/* general styles for all note spans */
+span.wrap_info, span.wrap_important, span.wrap_alert, span.wrap_tip, span.wrap_help, span.wrap_todo, span.wrap_download {
+ padding: 0 2px 0 20px;
+ min-height: 20px;
+ background-position: 2px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html span.wrap_info, * html span.wrap_important, * html span.wrap_alert, * html span.wrap_tip, * html span.wrap_help, * html span.wrap_todo, * html span.wrap_download {
+ height: 20px;
+}
+
+/*____________ info ____________*/
+.wrap_info { background-color: #d1d7df; }
+div.wrap_info { background-image: url(../../../wrap/images/note/48/info.png); }
+span.wrap_info { background-image: url(../../../wrap/images/note/16/info.png); }
+
+/*____________ important ____________*/
+.wrap_important { background-color: #ffd39f; }
+div.wrap_important { background-image: url(../../../wrap/images/note/48/important.png); }
+span.wrap_important { background-image: url(../../../wrap/images/note/16/important.png); }
+
+/*____________ alert ____________*/
+.wrap_alert { background-color: #ffbcaf; }
+div.wrap_alert { background-image: url(../../../wrap/images/note/48/alert.png); }
+span.wrap_alert { background-image: url(../../../wrap/images/note/16/alert.png); }
+
+/*____________ tip ____________*/
+.wrap_tip { background-color: #fff79f; }
+div.wrap_tip { background-image: url(../../../wrap/images/note/48/tip.png); }
+span.wrap_tip { background-image: url(../../../wrap/images/note/16/tip.png); }
+
+/*____________ help ____________*/
+.wrap_help { background-color: #dcc2ef; }
+div.wrap_help { background-image: url(../../../wrap/images/note/48/help.png); }
+span.wrap_help { background-image: url(../../../wrap/images/note/16/help.png); }
+
+/*____________ todo ____________*/
+.wrap_todo { background-color: #c2efdd; }
+div.wrap_todo { background-image: url(../../../wrap/images/note/48/todo.png); }
+span.wrap_todo { background-image: url(../../../wrap/images/note/16/todo.png); }
+
+/*____________ download ____________*/
+.wrap_download { background-color: #d6efc2; }
+div.wrap_download { background-image: url(../../../wrap/images/note/48/download.png); }
+span.wrap_download { background-image: url(../../../wrap/images/note/16/download.png); }
+
+
+/*____________ safety notes ____________*/
+
+.wrap_danger {
+ background-color: #c00;
+ color: #fff;
+}
+.wrap_warning {
+ background-color: #f60;
+ color: #000;
+}
+.wrap_caution {
+ background-color: #ff0;
+ color: #000;
+}
+.wrap_notice {
+ background-color: #06f;
+ color: #fff;
+}
+.wrap_safety {
+ background-color: #090;
+ color: #fff;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_hi {
+ background-color: #ff9;
+}
+
+/* typography
+********************************************************************/
+
+/*____________ font colours ____________*/
+
+div.wrap_fgwhite {
+ color: #fff;
+}
+
+/*____________ background colours ____________*/
+
+div.wrap_bgred {
+ background-color: #fcc;
+}
+div.wrap_bggreen {
+ background-color: #cfc;
+}
+div.wrap_bgblue {
+ background-color: #ccf;
+}
+div.wrap_bgcyan {
+ background-color: #9ff;
+}
+div.wrap_bgviolet {
+ background-color: #f9f;
+}
+div.wrap_bgyellow {
+ background-color: #ff9;
+}
+div.wrap_bggrey {
+ background-color: #ccc;
+}
+div.wrap_bgwhite {
+ background-color: #fff;
+}
+div.wrap_bgblack {
+ background-color: #000;
+}
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ spoiler ____________*/
+
+div.wrap_spoiler {
+ background-color: __background__ !important;
+ color: __background__ !important;
+ border: 1px dotted red;
+}
+
+/*____________ only print ____________*/
+
+div.wrap_onlyprint {
+ display: none;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/zero_link.png
new file mode 100644
index 000000000..5610884d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/zero_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/zero_over.png
new file mode 100644
index 000000000..3a14a577e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/zero_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/across.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/across.png
new file mode 100755
index 000000000..66cb21ce9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/across.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/audio_link.png
new file mode 100644
index 000000000..daa740c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/audio_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/audio_on.png
new file mode 100644
index 000000000..cd590aae9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/audio_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/audio_over.png
new file mode 100644
index 000000000..cf537a008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/audio_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/auto_link.png
new file mode 100644
index 000000000..1c2ca4817
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/auto_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/auto_on.png
new file mode 100644
index 000000000..4b0c923b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/auto_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/auto_over.png
new file mode 100644
index 000000000..dbea88975
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/auto_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/blank.gif
new file mode 100755
index 000000000..75b945d25
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/blank.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/bottom.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/bottom.png
new file mode 100755
index 000000000..79ed780d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/bottom.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/delay_link.png
new file mode 100644
index 000000000..c4d99cd57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/delay_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/druplicon.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/druplicon.png
new file mode 100755
index 000000000..340b839bb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/druplicon.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/exit_link.png
new file mode 100644
index 000000000..1bfd38790
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/exit_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/exit_over.png
new file mode 100644
index 000000000..0fdd1c605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/exit_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/fade_link.png
new file mode 100644
index 000000000..482e4d53e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/fade_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/fade_on.png
new file mode 100644
index 000000000..e12561fb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/fade_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/fade_over.png
new file mode 100644
index 000000000..fb8943c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/fade_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/framing.css
new file mode 100755
index 000000000..c44e23877
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/framing.css
@@ -0,0 +1,65 @@
+/* The following styles size, place, and layer the slide components.
+ Edit these if you want to change the overall slide layout.
+ The commented lines can be uncommented (and modified, if necessary)
+ to help you with the rearrangement process. */
+
+/* target = 1024x768 */
+
+div#header, div#footer, .slide {
+ width: 100%;
+ top: 0;
+ left: 0;
+}
+
+div#header {
+ top: 0;
+ height: 3em;
+ z-index: 1;
+}
+
+div#footer {
+ top: auto;
+ bottom: 0;
+ height: 2.5em;
+ z-index: 5;
+}
+
+.slide {
+ top: 0;
+ width: 92%;
+ padding: 3.5em 4% 4%;
+ z-index: 2;
+ list-style: none;
+}
+
+div#controls {
+ left: 50%;
+ bottom: 0;
+ width: 50%;
+ z-index: 100;
+}
+
+div#controls form {
+ text-align: right;
+ width: 100%;
+ margin: 0;
+}
+
+#currentSlide {
+ position: absolute;
+ width: 10%;
+ left: 45%;
+ bottom: 1em;
+ z-index: 10;
+}
+
+html>body #currentSlide {
+ position: fixed;
+}
+
+/*
+div#header {background: #FCC;}
+div#footer {background: #CCF;}
+div#controls {background: #BBD;}
+div#currentSlide {background: #FFC;}
+*/ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/iepngfix.htc
new file mode 100755
index 000000000..9ec89fbeb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/iepngfix.htc
@@ -0,0 +1,42 @@
+<public:component>
+<public:attach event="onpropertychange" onevent="doFix()" />
+
+<script>
+
+// IE5.5+ PNG Alpha Fix v1.0 by Angus Turnbull http://www.twinhelix.com
+// Free usage permitted as long as this notice remains intact.
+
+// This must be a path to a blank image. That's all the configuration you need here.
+var blankImg = 'ui/drupal/blank.gif';
+
+var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
+
+function filt(s, m) {
+ if (filters[f]) {
+ filters[f].enabled = s ? true : false;
+ if (s) with (filters[f]) { src = s; sizingMethod = m }
+ } else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")';
+}
+
+function doFix() {
+ if ((parseFloat(navigator.userAgent.match(/MSIE (\S+)/)[1]) < 5.5) ||
+ (event && !/(background|src)/.test(event.propertyName))) return;
+
+ if (tagName == 'IMG') {
+ if ((/\.png$/i).test(src)) {
+ filt(src, 'image'); // was 'scale'
+ src = blankImg;
+ } else if (src.indexOf(blankImg) < 0) filt();
+ } else if (style.backgroundImage) {
+ if (style.backgroundImage.match(/^url[("']+(.*\.png)[)"']+$/i)) {
+ var s = RegExp.$1;
+ style.backgroundImage = '';
+ filt(s, 'crop');
+ } else filt();
+ }
+}
+
+doFix();
+
+</script>
+</public:component> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/last_link.png
new file mode 100644
index 000000000..4f158d35d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/last_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/last_over.png
new file mode 100644
index 000000000..a7b629995
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/last_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/list_link.png
new file mode 100644
index 000000000..7e299bb50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/list_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/loop_link.png
new file mode 100644
index 000000000..41e12cb15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/loop_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/loop_on.png
new file mode 100644
index 000000000..2ffcacae1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/loop_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/loop_over.png
new file mode 100644
index 000000000..9fe420153
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/loop_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/next_link.png
new file mode 100644
index 000000000..2b9f44c4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/next_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/next_over.png
new file mode 100644
index 000000000..25788124d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/next_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/notes.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/notes.css
new file mode 100755
index 000000000..5858cf2bc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/notes.css
@@ -0,0 +1,122 @@
+/* Following are the note styles -- edit away! */
+
+body {
+ margin: 0;
+ padding: 1.0em;
+ background: #333;
+ color: #FFF;
+ font: 2em/1.4em 'Lucida Grande', Verdana, sans-serif;
+}
+
+div.timers {
+ background: #FFF;
+ color: #333;
+ border: 0.08em solid #222;
+ border-top-width: 1px;
+ border-left-width: 1px;
+ float: left;
+ padding: 0.2em;
+ margin: 0 0 0.5em;
+ position: relative;
+}
+
+div.timers h1 {
+ text-align: left;
+ font-size: 0.6em;
+ line-height: 1.4em;
+ background-color: #FF9;
+ padding: 0 0.75em;
+ margin: 0.25em 0 0;
+ border: 1px solid #EE8;
+}
+
+div.timers div.controls {
+ position: absolute;
+ right: 0.25em;
+ top: 0.1em;
+ line-height: 1em;
+}
+
+div.timers h1 a {
+ text-decoration: none;
+ color: #000;
+}
+
+div.timers div.controls a {
+ font-size: 0.5em;
+ padding: 0;
+ color: #330;
+}
+
+div.timers a.control {
+ position: absolute;
+ text-decoration: none;
+ padding: 0 0.25em;
+ color: #AAA;
+ outline: 0;
+}
+
+#minus {
+ left: 0.25em;
+}
+
+#plus {
+ right: 0.25em;
+}
+
+.overtime {
+ background: yellow;
+ color: red;
+ border: 3px solid;
+ padding: 0.1em 0.25em;
+ font-weight: bold;
+}
+
+div.timers h2 {
+ font-size: 0.6em;
+ line-height: 1.0em;
+ font-weight: normal;
+ margin: 0 0 -0.25em;
+ padding-top: 0.5em;
+ color: #666;
+}
+
+div.timers p {margin: 0; padding: 0 0.5em;}
+div.timers form {margin: 0;}
+
+div.timers span.clock {
+ font-family: monospace;
+}
+
+div.timers ul {margin: 0; padding: 0; list-style: none;}
+div.timers li {float: left; width: 5em; margin: 0; padding: 0 0.5em;
+ text-align: center;}
+
+div#elapsed {width: 12.1em;}
+div#remaining {clear: left; width: 12.1em;}
+div#remaining p {text-align: center;}
+
+#slide,
+#next,
+#notes,
+#nextnotes {
+ font-size: 0.75em;
+ line-height: 1.4em;
+ clear: left;
+/* max-width: 30.0em; */
+ text-shadow: 0.1em 0.1em 0.1em #111;
+}
+
+#next {margin-top: 2.5em;}
+#next, #nextnotes {
+ color: #999;
+ font-size: 0.66em;
+}
+
+em.disclaimer {
+ color: #666;
+}
+
+div.collapsed h1 {display: block; font-size: 0.33em;}
+div.collapsed h1 a {display: inline;}
+div.collapsed * {display: none;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/notes_link.png
new file mode 100644
index 000000000..bb4a8ae37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/notes_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/notes_over.png
new file mode 100644
index 000000000..c6bfe69fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/notes_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/opera.css
new file mode 100755
index 000000000..9e9d2a3c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/opera.css
@@ -0,0 +1,7 @@
+/* DO NOT CHANGE THESE unless you really want to break Opera Show */
+.slide {
+ visibility: visible !important;
+ position: static !important;
+ page-break-before: always;
+}
+#slide0 {page-break-before: avoid;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/outline.css
new file mode 100755
index 000000000..62db519ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/outline.css
@@ -0,0 +1,15 @@
+/* don't change this unless you want the layout stuff to show up in the outline view! */
+
+.layout div, #footer *, #controlForm * {display: none;}
+#footer, #controls, #controlForm, #navLinks, #toggle {
+ display: block; visibility: visible; margin: 0; padding: 0;}
+#toggle {float: right; padding: 0.5em;}
+html>body #toggle {position: fixed; top: 0; right: 0;}
+
+/* making the outline look pretty-ish */
+
+#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
+#slide0 h1 {padding-top: 1.5em;}
+.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em;
+ border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
+#toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pause_link.png
new file mode 100644
index 000000000..2561cb4a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pause_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pause_on.png
new file mode 100644
index 000000000..2fc9c4a4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pause_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pause_over.png
new file mode 100644
index 000000000..7a7c80ddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pause_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pretty.css
new file mode 100644
index 000000000..abe2c2659
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pretty.css
@@ -0,0 +1,354 @@
+/* Following are the presentation styles -- edit away! */
+
+body {
+ background: #1077BE url(top.png) no-repeat right top;
+ color: #FFF;
+ font-family: "Gill Sans", Optima, "Lucida Grande", Lucida, Verdana, sans-serif;
+ font-size: 2.25em;
+}
+
+:link, :visited {
+ text-decoration: none;
+ color: #62ccff;
+}
+
+#controls :active {
+ color: #88A !important;
+}
+
+#controls :focus {
+ outline: 1px dotted #227;
+}
+
+h1, h2, h3, h4 {
+ font-size: 100%;
+ margin: 0;
+ padding: 0;
+ font-weight: inherit;
+}
+
+ul, pre {
+ margin: 0;
+ line-height: 1em;
+}
+
+html, body {
+ margin: 0;
+ padding: 0;
+}
+
+blockquote, q {
+ font-style: italic;
+}
+
+blockquote {
+ padding: 0 2em 0.5em;
+ margin: 0 1.5em 0.5em;
+ text-align: center;
+ font-size: 1em;
+}
+
+blockquote p {
+ margin: 0;
+}
+
+blockquote i {
+ font-style: normal;
+}
+
+blockquote b {
+ display: block;
+ margin-top: 0.5em;
+ font-weight: normal;
+ font-size: smaller;
+ font-style: normal;
+}
+
+blockquote b i {
+ font-style: italic;
+}
+
+kbd {
+ font-weight: bold;
+ font-size: 1em;
+}
+
+sup {
+ font-size: smaller;
+ line-height: 1px;
+}
+
+.slide {
+ background: transparent url(druplicon.png) no-repeat 16px 16px;
+}
+
+.slide code {
+ padding: 2px 0.25em;
+ font-weight: bold;
+ color: white;
+ font-family: "Bitstream Vera Sans Mono", Monaco, "Lucida Console", monospace;
+ background-color: black;
+}
+
+.slide code.bad, code del {
+ color: red;
+}
+
+.slide code.old {
+ color: silver;
+}
+
+.slide pre {
+ font-family: "Bitstream Vera Sans Mono", Monaco, "Lucida Console", monospace;
+ padding: 0;
+ margin: 0.25em 0 0.5em 0.5em;
+ color: #533;
+ font-size: 90%;
+}
+
+.slide pre code {
+ display: block;
+}
+
+.slide ul {
+ margin-left: 5%;
+ margin-right: 7%;
+ list-style: disc;
+}
+
+.slide li {
+ margin-top: 0.75em;
+ margin-right: 0;
+}
+
+.slide ul ul {
+ line-height: 1;
+}
+
+.slide ul ul li {
+ margin: .2em;
+ font-size: 85%;
+ list-style: square;
+}
+
+.slide img.leader {
+ display: block;
+ margin: 0 auto;
+}
+
+div#header, div#footer {
+ color: #fff;
+ font-family: "Lucida Grande", Lucida, Verdana, sans-serif;
+}
+
+div#header {
+ line-height: 1px;
+}
+
+div#footer {
+ font-size: 0.5em;
+ font-weight: bold;
+ padding: 1em 0;
+ background: transparent url(bottom.png) repeat-x -546px top;
+}
+
+#footer h1, #footer h2 {
+ display: block;
+ padding: 0 1em;
+}
+
+#footer h2 {
+ font-style: italic;
+}
+
+div.long {
+ font-size: 0.75em;
+}
+
+.slide h1 {
+ position: absolute;
+ top: 0.7em;
+ width: 100%;
+ left: 0;
+ text-align: center;
+ z-index: 1;
+ margin: 0;
+ white-space: nowrap;
+ font: bold 150%/1em "Gill Sans", Optima, "Lucida Grande", Lucida, Verdana, sans-serif;
+ text-transform: capitalize;
+ color: #FFF;
+}
+
+.slide h3 {
+ font-size: 130%;
+}
+
+h1 abbr {
+ font-variant: small-caps;
+}
+
+#plink {
+ color: #FFF;
+}
+
+
+#currentSlide {
+ text-align: center;
+ font-size: 0.5em;
+ color: #449;
+}
+
+#slide0 {
+ background: transparent url(across.png) no-repeat;
+ padding-top: 3.5em;
+ font-size: 90%;
+}
+
+#slide0 h1 {
+ position: static;
+ margin: 1em 0 0;
+ padding: 0;
+ font: bold 3em "Gill Sans", Optima, "Lucida Grande", Lucida, Verdana, sans-serif;
+ white-space: normal;
+ color: #FFF;
+ background-color: transparent;
+}
+
+#slide0 h2 {
+ font: bold italic 1em Helvetica, sans-serif;
+ margin: 0.25em;
+}
+
+#slide0 h3 {
+ margin-top: 1.5em;
+ font-size: 1.5em;
+}
+
+#slide0 h4 {
+ margin-top: 0;
+ font-size: 1em;
+}
+
+ul.urls {
+ list-style: none;
+ display: inline;
+ margin: 0;
+}
+
+.urls li {
+ display: inline;
+ margin: 0;
+}
+
+.note {
+ display: none;
+}
+
+.external {
+ border-bottom: 1px dotted gray;
+}
+
+html>body .external {
+ border-bottom: none;
+}
+
+.external:after {
+ content: " \274F";
+ font-size: smaller;
+ color: #62ccff;
+}
+
+.incremental, .incremental *, .incremental *:after {
+ color: #DDE;
+ visibility: visible;
+}
+
+img.incremental {
+ visibility: hidden;
+}
+
+.slide .current {
+ color: #FB5;
+}
+
+
+
+div#controls {position: absolute; left: 0; bottom: 0; width: 100%; text-align: center; font: bold 1em Verdana, Arial, Helvetica, sans-serif;}
+html>body div#controls {background: transparent; position: fixed; padding: 0; top: auto; text-align: center;}
+#controls #sheet {display: none;}
+#controls #controlForm {height: 32px; width: 100%; text-align: center; vertical-align: middle;}
+#controls #navLinks {border-top: 1px solid #999; overflow: hidden; padding: 0; margin: 0; height: 32px; width: 100%; background-color: #808080; text-align: center; vertical-align: middle; white-space: nowrap;}
+#controls #navLinks ul {margin: 0 auto; padding: 0; height: 32px; width: 500px; white-space: nowrap; text-align: center;}
+#controls #navLinks ul li {list-style: none; display: inline; margin: 0; padding: 0; float: left; height: 32px; width: 32px; text-align: center; background-color: transparent;}
+#controls #navLinks ul li.vr {list-style: none; display: inline; margin: 0px 2px; padding: 0; float: left; height: 32px; width: 1px; text-align: center; background-color: #606060;}
+#controls #navLinks ul li a {margin: 0; padding: 0; float: left; height: 32px; width: 32px; background-color: transparent;}
+
+#controls #navLinks ul li#exit {background: url(exit_link.png) no-repeat top left;}
+#controls #navLinks ul li#exit a:hover {background: url(exit_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#toggle {background: url(toggle_link.png) no-repeat top left;}
+#controls #navLinks ul li#toggle a:hover {background: url(toggle_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#show-notes {background: url(notes_link.png) no-repeat top left;}
+#controls #navLinks ul li#show-notes a:hover {background: url(notes_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#zero {background: url(zero_link.png) no-repeat top left;}
+#controls #navLinks ul li#zero a:hover {background: url(zero_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#prev {background: url(prev_link.png) no-repeat top left;}
+#controls #navLinks ul li#prev a:hover {background: url(prev_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#next {background: url(next_link.png) no-repeat top left;}
+#controls #navLinks ul li#next a:hover {background: url(next_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#last {background: url(last_link.png) no-repeat top left;}
+#controls #navLinks ul li#last a:hover {background: url(last_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#lst {background: url(list_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#fade a.isoff {background: url(fade_link.png) no-repeat top left;}
+#controls #navLinks ul li#fade a.ison {background: url(fade_on.png) no-repeat top right;}
+#controls #navLinks ul li#fade a:hover {background: url(fade_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#audio {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.isoff {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.ison {background: url(audio_on.png) no-repeat top right;}
+#controls #navLinks ul li#audio a:hover {background: url(audio_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#vol {background: url(volume_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#auto a.isoff {background: url(auto_link.png) no-repeat top left;}
+#controls #navLinks ul li#auto a.ison {background: url(auto_on.png) no-repeat top right;}
+#controls #navLinks ul li#auto a:hover {background: url(auto_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#pause a.isoff {background: url(pause_link.png) no-repeat top left;}
+#controls #navLinks ul li#pause a.ison {background: url(pause_on.png) no-repeat top right;}
+#controls #navLinks ul li#pause a:hover {background: url(pause_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#loop a.isoff {background: url(loop_link.png) no-repeat top left;}
+#controls #navLinks ul li#loop a.ison {background: url(loop_on.png) no-repeat top right;}
+#controls #navLinks ul li#loop a:hover {background: url(loop_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#del {background: url(delay_link.png) no-repeat top left;}
+
+#jumplist, #volumelist, #delaylist {padding: 0; margin: 0; width: 32px; height: 32px; cursor: n-resize;}
+
+#guru {position: absolute; visibility: visible; left: 0px; top: 0px; padding: 4px; width: 99%; height: auto; text-align: center; background-color: black; z-index: 10;}
+#guru div {border: solid 3px red; padding: 4px; font-family: monospace; font-size: 60%; width: auto; height: auto; color: red; text-align: center;}
+
+
+/* diagnostics
+li:after {content: " [" attr(class) "]"; color: #F88;}
+*/
+
+table.piechart, table.barchart, table.linechart { border-spacing: 0.3em 0.15em; }
+table.piechart tr th, table.barchart tr th, table.linechart tr th { white-space: nowrap; }
+table.piechart tr td, table.barchart tr td, table.linechart tr td { vertical-align: top; white-space: nowrap; }
+table.piechart tr td.col, table.barchart tr td.col, table.linechart tr td.col { border-bottom: 1px solid #555; border-right: 1px solid #555; }
+table.fs90 tr td, table.fs90 tr th, div.fs90, pre.fs90, p.fs90 ,ul.fs90 {font-size: 0.9em; }
+table.fs75 tr td, table.fs75 tr th, div.fs75, pre.fs75, p.fs75 ,ul.fs75 {font-size: 0.75em; }
+table.fs66 tr td, table.fs66 tr th, div.fs66, pre.fs66, p.fs66 ,ul.fs66 {font-size: 0.66em; }
+table.fs50 tr td, table.fs50 tr th, div.fs50, pre.fs50, p.fs50 ,ul.fs50 {font-size: 0.5em; }
+
+#soundmanager-debug {position:fixed; top:0px; right:0px; width:30em; height:20em; overflow:auto; border:1px solid red; padding:1em; margin:2em; font-family:"sans serif"; font-size: 12px;color: black; background-color:#f6f6f6; z-index: 100;}
+#soundmanager-debug code {font-size: 11px;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/prev_link.png
new file mode 100644
index 000000000..c31d21350
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/prev_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/prev_over.png
new file mode 100644
index 000000000..6fef4fa52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/prev_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/print.css
new file mode 100755
index 000000000..e7a71d145
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/print.css
@@ -0,0 +1 @@
+/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul {page-break-inside: avoid; visibility: visible !important;} h1 {page-break-after: avoid;} body {font-size: 12pt; background: white;} * {color: black;} #slide0 h1 {font-size: 200%; border: none; margin: 0.5em 0 0.25em;} #slide0 h3 {margin: 0; padding: 0;} #slide0 h4 {margin: 0 0 0.5em; padding: 0;} #slide0 {margin-bottom: 3em;} h1 {border-top: 2pt solid gray; border-bottom: 1px dotted silver;} .extra {background: transparent !important;} div.extra, pre.extra, .example {font-size: 10pt; color: #333;} ul.extra a {font-weight: bold;} p.example {display: none;} #header {display: none;} #footer h1 {margin: 0; border-bottom: 1px solid; color: gray; font-style: italic;} #footer h2, #controls {display: none;} /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .layout, .layout * {display: none !important;} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/s5-core.css
new file mode 100755
index 000000000..ad1530b9c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/s5-core.css
@@ -0,0 +1,9 @@
+/* Do not edit or override these styles! The system will likely break if you do. */
+
+div#header, div#footer, div#controls, .slide {position: absolute;}
+html>body div#header, html>body div#footer,
+ html>body div#controls, html>body .slide {position: fixed;}
+.handout, .notes {display: none;}
+.layout {display: block;}
+.slide, .hideme, .incremental {visibility: hidden;}
+#slide0 {visibility: visible;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/slides.css
new file mode 100755
index 000000000..0786d7dbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/slides.css
@@ -0,0 +1,3 @@
+@import url(s5-core.css); /* required to make the slide show run at all */
+@import url(framing.css); /* sets basic placement and size of slide components */
+@import url(pretty.css); /* stuff that makes the slides look better than blah */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/slides.js
new file mode 100644
index 000000000..510a04c0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/slides.js
@@ -0,0 +1,2812 @@
+// S5 1.3beta7 (18-Apr-2007) advanced version by C. Effenberger
+// Please see http://s5.netzgesta.de/ for more information
+// based on S5 v1.2a1 slides.js -- released into the Public Domain
+// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
+// about all the wonderful and talented contributors to this code!
+// audio extension: soundmanager2 is NOT Public Domain
+// Please see http://www.schillmania.com/projects/soundmanager2/ for information
+
+var undef;
+var slideCSS = '';
+var snum = 0;
+var smax = 1;
+var incpos = 0;
+var number = undef;
+var firstTime = 1;
+var s5mode = true;
+var helpmode = false;
+var defaultView = 'slideshow'; //outline
+var controlVis = 'visible';
+var s5Path = 'lib/plugins/s5reloaded/';
+
+// scalable images extension
+var empx = 0;
+var images = new Array();
+var canvas = new Array();
+var medias = new Array();
+var piecharts = new Array();
+var barcharts = new Array();
+var linecharts = new Array();
+// scalable images extension
+
+// transition extension
+var tranSitions = false;
+var fadeModus = false;
+var fadeDuration = 500;
+var incrDuration = 250;
+var opac = 1;
+var cid = '';
+var nid = '';
+var tid = '';
+var jl = '';
+// transition extension
+
+// autoplay extension
+var autoMatic = false;
+var playLoop = false;
+var playPause = false;
+var autoRun = false;
+var playDelay = 5000;
+var remainDer = 0;
+var incrDelay = 0;
+// autoplay extension
+
+// audio extension
+var sound = new Array();
+var audioSupport = false;
+var audioVolume = 100;
+var audioError = false;
+var swfUnloaded = true;
+var bgSoundItem = 9999;
+var curSoundID = -1;
+// audio extension
+
+// panel extension
+var imgWidth = 32;
+var imgHeight = 32;
+// panel extension
+
+// canvas chart extension
+var canvasSupport = false;
+var ChartData = new Array();
+var colorSlice = new Array();
+var font = document.createElement("img");
+font.setAttribute("src", s5Path+"ui/graphic_support/numeric.png");
+signs = {
+ '0': {sx: 0, sy: 0, sw: 48, sh: 64},
+ '1': {sx: 48, sy: 0, sw: 48, sh: 64},
+ '2': {sx: 96, sy: 0, sw: 48, sh: 64},
+ '3': {sx: 144, sy: 0, sw: 48, sh: 64},
+ '4': {sx: 192, sy: 0, sw: 48, sh: 64},
+ '5': {sx: 240, sy: 0, sw: 48, sh: 64},
+ '6': {sx: 288, sy: 0, sw: 48, sh: 64},
+ '7': {sx: 336, sy: 0, sw: 48, sh: 64},
+ '8': {sx: 384, sy: 0, sw: 48, sh: 64},
+ '9': {sx: 432, sy: 0, sw: 48, sh: 64},
+ '%': {sx: 480, sy: 0, sw: 48, sh: 64},
+ '.': {sx: 528, sy: 0, sw: 24, sh: 64}
+};
+var colorNames= new Array();
+colorNames["black"]="#000000"; colorNames["maroon"]="#800000";
+colorNames["green"]="#008000"; colorNames["olive"]="#808000";
+colorNames["navy"]="#000080"; colorNames["purple"]="#800080";
+colorNames["teal"]="#008080"; colorNames["gray"]="#808080";
+colorNames["silver"]="#C0C0C0"; colorNames["red"]="#FF0000";
+colorNames["lime"]="#00FF00"; colorNames["yellow"]="#FFFF00";
+colorNames["blue"]="#0000FF"; colorNames["fuchsia"]="#FF00FF";
+colorNames["aqua"]="#00FFFF"; colorNames["white"]="#FFFFFF";
+colorNames["aliceblue"]="#F0F8FF"; colorNames["antiquewhite"]="#FAEBD7";
+colorNames["aquamarine"]="#7FFFD4"; colorNames["azure"]="#F0FFFF";
+colorNames["beige"]="#F5F5DC"; colorNames["blueviolet"]="#8A2BE2";
+colorNames["brown"]="#A52A2A"; colorNames["burlywood"]="#DEB887";
+colorNames["cadetblue"]="#5F9EA0"; colorNames["chartreuse"]="#7FFF00";
+colorNames["chocolate"]="#D2691E"; colorNames["coral"]="#FF7F50";
+colorNames["cornflowerblue"]="#6495ED"; colorNames["cornsilk"]="#FFF8DC";
+colorNames["crimson"]="#DC143C"; colorNames["darkblue"]="#00008B";
+colorNames["darkcyan"]="#008B8B"; colorNames["darkgoldenrod"]="#B8860B";
+colorNames["darkgray"]="#A9A9A9"; colorNames["darkgreen"]="#006400";
+colorNames["darkkhaki"]="#BDB76B"; colorNames["darkmagenta"]="#8B008B";
+colorNames["darkolivegreen"]="#556B2F"; colorNames["darkorange"]="#FF8C00";
+colorNames["darkorchid"]="#9932CC"; colorNames["darkred"]="#8B0000";
+colorNames["darksalmon"]="#E9967A"; colorNames["darkseagreen"]="#8FBC8F";
+colorNames["darkslateblue"]="#483D8B"; colorNames["darkslategray"]="#2F4F4F";
+colorNames["darkturquoise"]="#00CED1"; colorNames["darkviolet"]="#9400D3";
+colorNames["deeppink"]="#FF1493"; colorNames["deepskyblue"]="#00BFFF";
+colorNames["dimgray"]="#696969"; colorNames["dodgerblue"]="#1E90FF";
+colorNames["firebrick"]="#B22222"; colorNames["floralwhite"]="#FFFAF0";
+colorNames["forestgreen"]="#228B22"; colorNames["gainsboro"]="#DCDCDC";
+colorNames["ghostwhite"]="#F8F8FF"; colorNames["gold"]="#FFD700";
+colorNames["goldenrod"]="#DAA520"; colorNames["greenyellow"]="#ADFF2F";
+colorNames["honeydew"]="#F0FFF0"; colorNames["hotpink"]="#FF69B4";
+colorNames["indianred"]="#CD5C5C"; colorNames["indigo"]="#4B0082";
+colorNames["ivory"]="#FFFFF0"; colorNames["khaki"]="#F0E68C";
+colorNames["lavender"]="#E6E6FA"; colorNames["lavenderblush"]="#FFF0F5";
+colorNames["lawngreen"]="#7CFC00"; colorNames["lemonchiffon"]="#FFFACD";
+colorNames["lightblue"]="#ADD8E6"; colorNames["lightcoral"]="#F08080";
+colorNames["lightcyan"]="#E0FFFF"; colorNames["lightgoldenrodyellow"]="#FAFAD2";
+colorNames["lightgreen"]="#90EE90"; colorNames["lightgrey"]="#D3D3D3";
+colorNames["lightpink"]="#FFB6C1"; colorNames["lightsalmon"]="#FFA07A";
+colorNames["lightseagreen"]="#20B2AA"; colorNames["lightskyblue"]="#87CEFA";
+colorNames["lightslategray"]="#778899"; colorNames["lightsteelblue"]="#B0C4DE";
+colorNames["lightyellow"]="#FFFFE0"; colorNames["limegreen"]="#32CD32";
+colorNames["linen"]="#FAF0E6"; colorNames["mediumaquamarine"]="#66CDAA";
+colorNames["mediumblue"]="#0000CD"; colorNames["mediumorchid"]="#BA55D3";
+colorNames["ediumpurple"]="#9370D"; colorNames["mediumseagreen"]="#3CB371";
+colorNames["mediumslateblue"]="#7B68EE"; colorNames["mediumspringgreen"]="#00FA9A";
+colorNames["mediumturquoise"]="#48D1CC"; colorNames["mediumvioletred"]="#C71585";
+colorNames["midnightblue"]="#191970"; colorNames["mintcream"]="#F5FFFA";
+colorNames["mistyrose"]="#FFE4E1"; colorNames["moccasin"]="#FFE4B5";
+colorNames["navajowhite"]="#FFDEAD"; colorNames["oldlace"]="#FDF5E6";
+colorNames["olivedrab"]="#6B8E23"; colorNames["orange"]="#FFA500";
+colorNames["orangered"]="#FF4500"; colorNames["orchid"]="#DA70D6";
+colorNames["palegoldenrod"]="#EEE8AA"; colorNames["palegreen"]="#98FB98";
+colorNames["paleturquoise"]="#AFEEEE"; colorNames["palevioletred"]="#DB7093";
+colorNames["papayawhip"]="#FFEFD5"; colorNames["peachpuff"]="#FFDAB9";
+colorNames["peru"]="#CD853F"; colorNames["pink"]="#FFC0CB";
+colorNames["plum"]="#DDA0DD"; colorNames["powderblue"]="#B0E0E6";
+colorNames["rosybrown"]="#BC8F8F"; colorNames["royalblue"]="#4169E1";
+colorNames["saddlebrown"]="#8B4513"; colorNames["salmon"]="#FA8072";
+colorNames["sandybrown"]="#F4A460"; colorNames["seagreen"]="#2E8B57";
+colorNames["seashell"]="#FFF5EE"; colorNames["sienna"]="#A0522D";
+colorNames["skyblue"]="#87CEEB"; colorNames["slateblue"]="#6A5ACD";
+colorNames["slategray"]="#708090"; colorNames["snow"]="#FFFAFA";
+colorNames["springgreen"]="#00FF7F"; colorNames["steelblue"]="#4682B4";
+colorNames["tan"]="#D2B48C"; colorNames["thistle"]="#D8BFD8";
+colorNames["tomato"]="#FF6347"; colorNames["turquoise"]="#40E0D0";
+colorNames["violet"]="#EE82EE"; colorNames["wheat"]="#F5DEB3";
+colorNames["whitesmoke"]="#F5F5F5"; colorNames["yellowgreen"]="#9ACD32";
+var canvas_bgcolor = "";
+var canvas_width = 200;
+var canvas_height = 200;
+var canvas_noshade = 0;
+var canvas_nofill = 0;
+var canvas_noshadow = 0;
+var canvas_htmltext = 0;
+var canvas_imgtext = 0;
+var canvas_notext = 0;
+// canvas chart extension
+
+var s5NotesWindow;
+var s5NotesWindowLoaded = false;
+var previousSlide = 0;
+var presentationStart = new Date();
+var slideStart = new Date();
+
+var countdown = {
+ timer: 0,
+ state: 'pause',
+ start: new Date(),
+ end: 0,
+ remaining: 0
+};
+
+var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
+if(isIE) var notIE7 = parseInt(navigator.appVersion) < 7 ? 1 : 0;
+var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
+var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
+var isS2 = navigator.userAgent.indexOf('Safari') >= 2 ? 1 : 0;
+
+function hasClass(object, className) {
+ if (!object.className) return false;
+ return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
+}
+
+function hasValue(object, value) {
+ if (!object) return false;
+ return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
+}
+
+function removeClass(object,className) {
+ if (!object || !hasClass(object,className)) return;
+ object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
+}
+
+function addClass(object,className) {
+ if (!object || hasClass(object, className)) return;
+ if (object.className) {
+ object.className += ' '+className;
+ } else {
+ object.className = className;
+ }
+}
+
+function changeClass(object,className) {
+ if (!object) return;
+ object.firstChild.className = className;
+}
+
+function GetElementsWithClassName(elementName,className) {
+ var allElements = document.getElementsByTagName(elementName);
+ var elemColl = new Array();
+ for (var i = 0; i< allElements.length; i++) {
+ if (hasClass(allElements[i], className)) {
+ elemColl[elemColl.length] = allElements[i];
+ }
+ }
+ return elemColl;
+}
+
+function isParentOrSelf(element, id) {
+ if (element == null || element.nodeName=='BODY') return false;
+ else if (element.id == id) return true;
+ else return isParentOrSelf(element.parentNode, id);
+}
+
+function nodeValue(node) {
+ var result = "";
+ if (node.nodeType == 1) {
+ var children = node.childNodes;
+ for (var i = 0; i < children.length; ++i) {
+ result += nodeValue(children[i]);
+ }
+ }
+ else if (node.nodeType == 3) {
+ result = node.nodeValue;
+ }
+ return(result);
+}
+
+function slideLabel() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var list = document.getElementById('jumplist');
+ smax = slideColl.length;
+ for (var n = 0; n < smax; n++) {
+ var obj = slideColl[n];
+ var did = 'slide' + n.toString();
+ obj.setAttribute('id',did);
+ var otext = '';
+ var menu = obj.firstChild;
+ if (!menu) continue; // to cope with empty slides
+ while (menu && menu.nodeType == 3) {
+ menu = menu.nextSibling;
+ }
+ if (!menu) continue; // to cope with slides with only text nodes
+ var menunodes = menu.childNodes;
+ for (var o = 0; o < menunodes.length; o++) {
+ otext += nodeValue(menunodes[o]);
+ }
+ list.options[list.length] = new Option(n + ' : ' + otext, n);
+ }
+}
+
+function currentSlide() {
+ var cs, at, fd, ss;
+ if (document.getElementById) {
+ cs = document.getElementById('currentSlide');
+ } else {
+ cs = document.currentSlide;
+ }
+ fd = fadeModus?"F":"&ndash;";
+ ss = audioSupport?"S":"&ndash;";
+ at = (autoMatic?(playPause?"||":(playLoop?"&gt;0":"&gt;|")):"&ndash;&ndash;");
+ cs.innerHTML = '<div id="plink" nowrap="nowrap">' +
+ '<span id="csFade">[' + fd + ss + ']<\/span>&nbsp;' +
+ '<span id="csHere"><strong>' + snum + '<\/strong><\/span>' +
+ '<span id="csSep">\/<\/span>' +
+ '<span id="csTotal">' + (smax-1) + '<\/span>&nbsp;' +
+ '<span id="csAuto">[' + at + ']<\/span>' +
+ '<\/div>';
+
+ if (snum == 0) {
+ cs.style.visibility = 'hidden';
+ } else {
+ cs.style.visibility = 'visible';
+ }
+}
+
+function go(step) {
+ if (document.getElementById('slideProj').disabled || step == 0) return;
+ jl = document.getElementById('jumplist');
+ cid = 'slide' + snum;
+ var ce = document.getElementById(cid);
+ if (incrementals[snum].length > 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ removeClass(incrementals[snum][i], 'current');
+ removeClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ if (step != 'j') {
+ snum += step;
+ lmax = smax - 1;
+ if (snum > lmax) snum = lmax;
+ if (snum < 0) snum = 0;
+ }else {
+ snum = parseInt(jl.value);
+ }
+ nid = 'slide' + snum;
+ var ne = document.getElementById(nid);
+ if (!ne) {
+ ne = document.getElementById('slide0');
+ nid = 'slide0';
+ snum = 0;
+ }
+ if (step < 0) {
+ incpos = incrementals[snum].length
+ }else {
+ incpos = 0;
+ }
+ if (incrementals[snum].length > 0 && incpos == 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ if (hasClass(incrementals[snum][i], 'current')) {
+ incpos = i + 1;
+ }else {
+ addClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ }
+ if (incrementals[snum].length > 0 && incpos > 0) {
+ addClass(incrementals[snum][incpos - 1], 'current');
+ }
+ var guru = document.getElementById('guru');
+ if(guru && snum==0) {
+ guru.style.visibility = 'visible';
+ }else if(guru && snum>0) {
+ guru.style.visibility = 'hidden';
+ }
+ if(tranSitions && s5mode && fadeModus) {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {fadeoutSound(curSoundID,true); } // audio support
+ }
+ changeOpac(0,nid);
+ changeOpac(100,cid);
+ ce.style.visibility = 'visible';
+ shiftOpacity(cid,fadeDuration);
+ window.setTimeout("changeSlides()",fadeDuration);
+ }else {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {stopSound(curSoundID); } // audio support
+ }
+ ce.style.visibility = 'hidden';
+ if (isOp) location.hash = nid;
+ ne.style.visibility = 'visible';
+ finishSlides();
+ }
+}
+
+function changeSlides() {
+ if(nid != cid) changeOpac(100,cid);
+ document.getElementById(cid).style.visibility = 'hidden';
+ document.getElementById(nid).style.visibility = 'visible';
+ if (isOp) location.hash = nid;
+ shiftOpacity(nid,fadeDuration);
+ window.setTimeout("finishSlides()",fadeDuration);
+}
+
+function finishSlides() {
+ jl.selectedIndex = snum;
+ currentSlide();
+ loadNote();
+ permaLink();
+ number = undef;
+ if(sound[getSoundID(nid)]) {
+ playSound(nid); // audio support
+ }else if(sound[bgSoundItem] && curSoundID != bgSoundItem) {
+ playSound(bgSoundItem); // audio support
+ }
+}
+
+function goTo(target) {
+ if (target >= smax || target == snum) return;
+ go(target - snum);
+}
+
+function subgo(step) {
+ if (step > 0) {
+ removeClass(incrementals[snum][incpos - 1],'current');
+ removeClass(incrementals[snum][incpos], 'incremental');
+ if(tranSitions && s5mode && fadeModus) {
+ if(!incrementals[snum][incpos].id) {
+ var tmp = new Date(); tid = "inc" + String(tmp.getTime());
+ incrementals[snum][incpos].id = tid;
+ }else {
+ tid = incrementals[snum][incpos].id;
+ }
+ if(typeof(incrementals[snum][incpos].src) != "undefined" || incrementals[snum][incpos].getContext) {
+ changeOpac(0,tid);
+ addClass(incrementals[snum][incpos],'current');
+ shiftOpacity(tid,incrDuration);
+ setTimeout("nextInc()",incrDuration);
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ } else {
+ incpos--;
+ removeClass(incrementals[snum][incpos],'current');
+ addClass(incrementals[snum][incpos], 'incremental');
+ addClass(incrementals[snum][incpos - 1],'current');
+ loadNote();
+ }
+}
+
+function nextInc() {
+ incpos++;
+ loadNote();
+}
+
+function toggle() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ var guru = document.getElementById('guru');
+ if (!slides.disabled) {
+ stopPlay();
+ if(audioSupport && !swfUnloaded) stopAllSounds();
+ slides.disabled = true;
+ outline.disabled = false;
+ s5mode = false;
+ fontSize(1,'em');
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'visible';
+ }
+ if(guru) guru.style.visibility = 'hidden';
+ } else {
+ slides.disabled = false;
+ outline.disabled = true;
+ s5mode = true;
+ fontScale();
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'hidden';
+ }
+ slideColl[snum].style.visibility = 'visible';
+ if(guru && snum==0) guru.style.visibility = 'visible';
+ }
+}
+
+function showHide(action) {
+ var obj = GetElementsWithClassName('*','hideme')[0];
+ switch (action) {
+ case 's':
+ obj.style.visibility = 'visible';
+ break;
+ case 'h':
+ obj.style.visibility = 'hidden';
+ break;
+ case 'k':
+ if (obj.style.visibility != 'visible') {
+ obj.style.visibility = 'visible';
+ } else {
+ obj.style.visibility = 'hidden';
+ }
+ break;
+ }
+}
+
+function keys(key) {
+ if (!key) {
+ key = event;
+ key.which = key.keyCode;
+ }
+ if (helpmode) {
+ dumpHelpReq();
+ return;
+ }
+ if (key.which == 84 && !isOp) {
+ toggle();
+ return;
+ }
+ if (s5mode) {
+ if (autoMatic) {
+ switch (key.which) {
+ case 70: // f/ading on/off
+ switchFade();
+ break;
+ case 83: // s/ound on/off
+ toggleSounds();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 65: // a/utoplay on/off
+ stopPlay();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 80: // p/ause
+ case 32: // spacebar
+ pausePlay();
+ break;
+ }
+ }else {
+ switch (key.which) {
+ case 8: // backspace = HELP
+ createHelpReq();
+ break;
+ case 10: // return
+ case 13: // enter
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ if(number != undef) {
+ goTo(number);
+ break;
+ }
+ case 32: // spacebar
+ case 34: // page down
+ case 39: // rightkey
+ case 40: // downkey
+ if(number != undef) {
+ go(number);
+ } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ break;
+ case 33: // page up
+ case 37: // leftkey
+ case 38: // upkey
+ if(number != undef) {
+ go(-1 * number);
+ } else if (!incrementals[snum] || incpos <= 0) {
+ go(-1);
+ } else {
+ subgo(-1);
+ }
+ break;
+ case 65: // a/utoplay
+ startPlay();
+ break;
+ case 72: // h
+ case 36: // home
+ goTo(0);
+ break;
+ case 69: // e
+ case 35: // end
+ goTo(smax-1);
+ break;
+ case 70: // f/ade transitions on/off
+ switchFade();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 83: // s/ound support on/off
+ toggleSounds();
+ break;
+ case 27: // escape
+ case 81: // q
+ if(!isOp) byby();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 78: // n
+ createNotesWindow();
+ break;
+ }
+ if (key.which < 48 || key.which > 57) {
+ number = undef;
+ } else {
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
+ }
+ }
+ }
+ return false;
+}
+
+function clicker(e) {
+ number = undef;
+ var target;
+ if (window.event) {
+ target = window.event.srcElement;
+ e = window.event;
+ } else {
+ target = e.target;
+ }
+ if (target.href != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
+ if (!helpmode) {
+ if (!e.which || e.which == 1) {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ }
+ } else {
+ dumpHelpReq();
+ }
+}
+
+function findSlide(hash) {
+ var target = null;
+ var slides = GetElementsWithClassName('*','slide');
+ for (var i = 0; i < slides.length; i++) {
+ var targetSlide = slides[i];
+ if ( (targetSlide.name && targetSlide.name == hash)
+ || (targetSlide.id && targetSlide.id == hash) ) {
+ target = targetSlide;
+ break;
+ }
+ }
+ while(target != null && target.nodeName != 'BODY') {
+ if (hasClass(target, 'slide')) {
+ return parseInt(target.id.slice(5));
+ }
+ target = target.parentNode;
+ }
+ return null;
+}
+
+function slideJump() {
+ if (window.location.hash == null) return;
+ var sregex = /^#slide(\d+)$/;
+ var matches = sregex.exec(window.location.hash);
+ var dest = null;
+ if (matches != null) {
+ dest = parseInt(matches[1]);
+ } else {
+ dest = findSlide(window.location.hash.slice(1));
+ }
+ if (dest != null)
+ go(dest - snum);
+}
+
+function fixLinks() {
+ var thisUri = window.location.href;
+ thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
+ var aelements = document.getElementsByTagName('A');
+ for (var i = 0; i < aelements.length; i++) {
+ var a = aelements[i].href;
+ var slideID = a.match('\#slide[0-9]{1,2}');
+ if ((slideID) && (slideID[0].slice(0,1) == '#')) {
+ var dest = findSlide(slideID[0].slice(1));
+ if (dest != null) {
+ if (aelements[i].addEventListener) {
+ aelements[i].addEventListener("click", new Function("e",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "if (e.preventDefault) e.preventDefault();"), true);
+ } else if (aelements[i].attachEvent) {
+ aelements[i].attachEvent("onclick", new Function("",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "event.returnValue = false;"));
+ }
+ }
+ }
+ }
+}
+
+function externalLinks() {
+ if (!document.getElementsByTagName) return;
+ var anchors = document.getElementsByTagName('a');
+ for (var i=0; i<anchors.length; i++) {
+ var anchor = anchors[i];
+ if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
+ anchor.target = '_blank';
+ addClass(anchor,'external');
+ }
+ }
+}
+
+function permaLink() {
+ document.getElementById('plink').href = window.location.pathname + '#slide' + snum;
+}
+
+function createControls() {
+ var controlsDiv = document.getElementById("controls");
+ if (!controlsDiv) return;
+ var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
+ var hideDiv, hideList = '';
+ if (controlVis == 'hidden') {
+ hideDiv = hider;
+ } else {
+ hideList = hider;
+ }
+ if(isOp) {
+ var str = '';
+ }else {
+ var str = '<a accesskey="t" id="sheet" title="toggle CSS" href="javascript:toggle();">&plusmn;<\/a>';
+ }
+ if(isIE) {
+ var tmp = "move around&xA0;until the color&xA0;change to red!";
+ }else if(isS2) {
+ var tmp = "move around\r\nuntil the color\r\nchange to red!";
+ }else {
+ var tmp = "move around until color change to red!";
+ }
+ if(isIE) {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] for keyboard help!"><ul>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst" style="vertical-align: middle; width: 160px;"><select style="cursor: auto; width: 160px; height: auto;" id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del" style="vertical-align: middle; width: 52px;"><select style="cursor: auto; width: 52px; height: auto;" id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul><\/div><\/form>';
+ }else {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] or double click this area for keyboard help!" ondblclick="createHelpReq();"><ul>' +
+ '<li id="exit"><a href="javascript:byby();" accesskey="q" title="exit Show"><\/a><\/li>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li class="vr"><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst"><a id="list" style="cursor:wait;" title="' + tmp + '"><\/a><select id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="fadeLinks" class="vr"><\/li>' +
+ '<li id="fade"><a class="isoff" href="javascript:switchFade();" accesskey="f" title="Transions"><\/a><\/li>' +
+ '<li id="audioLinks" class="vr"><\/li>' +
+ '<li id="audio"><a class="isoff" href="javascript:toggleSounds();" accesskey="s" title="Sounds" ><\/a><\/li>' +
+ '<li id="vol"><a id="volume" style="cursor:wait;" title="' + tmp + '"><\/a><select id="volumelist" title="select Volume" onchange="setVolume();"><option value="100">100<\/option><option value="90">90<\/option><option value="80">80<\/option><option value="70">70<\/option><option value="60">60<\/option><option value="50">50<\/option><option value="40">40<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="10">10<\/option><option value="0">0<\/option><\/select><\/li>' +
+ '<li id="autoLinks" class="vr"><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del"><a id="delay" style="cursor:wait;" title="' + tmp + '"><\/a><select id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul>' +
+ '<a href="http://s5.netzgesta.de" target="_blank" title="S5 Reloaded"><img style="position: absolute; right: 0; bottom: 0;" src="data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAYAAAASYli2AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAYpSURBVHjaYvz//z8DOYCRkZEZRAEx0Ij/f2HiAAHEgqYIpACkkB1J7g8Q/wLRIJ1QNSB5fiDmAOLvQKHPQPoHSB4ggFiQDGMCUnxALAPECkAsBLIdiD8A8SMgfghU8wlqkTgQK1ZVVWldv3792fr16y8D+c9AhgMEECPIy1DDRIDYAojdzMzMWNXV1UG2/v/y5Qvzw4cPP587d24/kH8Gar/uwoULQ+/cufNFXFyciZmZ+UVmZuZKoFmvAQII5kJOIDbi4uKK2Llz53EbG5vP6GGWn5+vMWnSpJtA5jcg5v327Rtnc3PzfSD79+rVq2WBNBtIHUAAwQzkAWKzBQsWnIUZFhISovXmzZsfkpKSDD09PY8kJCR+QtWCguGvrKwsz7Rp07Q4ODh+srCwgILiH0gSIIBgBrICsUBoaCgorBiANgqvXbtWDMg8AcQf9+7d+x0o9xbI/gJV/3fVqlUvmJiY/gIdcaWhoYETahEDQADBDPwNxO9h3gNpBiq6f/HiRbWjR4+yvnr16grQNbeh6kCWsxkYGIhClT8yNDQUgyYhBoAAYoIKfgXi06mpqUowQ+vr6x+uW7fu0suXL8+uWbOGS0BAwB7kC6jXvqmoqLDIyclxzZo1S4udnR2WtBgAAggWyyCXSgOxZUxMjGpWVtY7S0vLr8iRsnnzZl4/P7/DQCYoYtSA2DApKUkVGNNPDh06dBrIvwU06xNAAMEM5AIKqAOxCjQsmHl5eXWdnJx4N2zYcB4prd4CUpfwJRuAAGJCimULoGYpbm5uZ5DBnz9/5tq4caPWkSNHeJEc+g0aTFzfv3/nACabjzk5OW8FBQVloLmHASCAYJECUiTg7+//HJiQTzY2NsrfvXv3n7m5+T5YMgJGEkjDS2gY/pKRkeHt7Ow0Bsb0v9+/fz+HxTJAAMG8DHKFLTC9aRUXF79BT9Qgw4CWHAAy70FdYgjEDgkJCTpWVlYMQBfeAaaMPqBZbwECCGYgMzQGQSleCehS0X///jEDvf9lxYoVoOTyAIjfANX+BqrlBrL1gLFf09vb+0FaWvoHMBctA6USUKQABBAjrPiCliKg7AOKIG5ougLlju9Ipc1foDJWqMWGhYWFtsBg4RISEnrg5uY2BWQgQACxIBkGMkQKijmRfPwXWuI8ASp7DQ1vEP4DDO8PwBzzDJheT0CLPQaAAEJOh0o8zAzeihwMiv+gGZ0B4sz/bIwM797/YTh1/wfDIWj5qAfMmtFnzpz5ICIiwqKoqPgjKChoOtCs5wABhJyXpUCGzddgOIethJ71jEFi1nNwgQrKz8zv37//097eDop15qVLl0pAzWAACCAWhEMYOJFdduELA++b3wxsTIwMfzmYGH6xMDG8gYYpKAg+cnJy/gB6VwuYZFiA7E+wvAwQQCy46ozexwzG17+BYx6UVE4B8Vmo68CRFR0dDQo3UAHBBUwJ4lCLGAACCNnAv4zQxAkCxbIMZ0EuBIYb98EPDFo3voGTzjOogVzArGf969cvNmC2+wssHD7BDAQIIBakmHwPDPy3MAMNeBhgpfbbVEkGhqQbDJaXvjI8BPJB4jz79u37DcwlP+fPn38NuTwECCBkA1+8+8Nwtusxg+STHwwcP/8z8EuwMXA1KjBcBSlwEmRgBhrID/U2O7QMBIEHxsbGkrAwBAggmIGgNMT64AfDWyB+By0EQMVZlC0/wwsXQYa38hzgCGGBWv5ZU1OT4c+fP8yLFi1SA3r5Haw8BAggmIGg5KBpJ8BgeOYTg8S3f2DN/OxMDNwgw0AKnv0EJ+avsITu7u6+EZqzQEHwHFqaMwAEEAtShS/pLcTwrU+Z4QwsyQANOwIL06tfGV5BqwmQWoGKigoLYJnJvWPHjhstLS169vb2M0DqAAIIVh6CXHT/9ndIawEUITCXgUDrQwbGbe8YjkJdAzZQVVVV/t69e8LAgtUYaNgxWKQABBByacMHzfTK9gIMYkBZpj//GT4c+8gAKm1AsfseqPYPtHTXAtaEacBqlgHoyq+srKw3XV1dFwHlvwEEECNyYwmp3cIJjbUf0DbLP7RGEg+0bcMCjQxQzH8BWQgQQIzktr5wAYAAYmKgMgAIMAAp8Fx3osz1lgAAAABJRU5ErkJggg==" width="20" height="32" alt="S5" \/><\/a>' +
+ '<\/div><\/form>';
+ }
+ if (controlVis == 'hidden') {
+ var hidden = document.getElementById('navLinks');
+ } else {
+ var hidden = document.getElementById('jumplist');
+ }
+ addClass(hidden,'hideme');
+}
+
+function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
+ if (!s5mode && !isOp) return false;
+ var hScreen = screen.width; var vScreen = screen.height;
+ var vWindow = window.outerHeight; var hWindow = window.outerWidth;
+ if (isOp && s5mode && defaultView=='slideshow' && ((hScreen != hWindow) || (vScreen != vWindow))) {
+ toggle();
+ return false;
+ }
+ if (isOp && !s5mode && ((hScreen != hWindow) || (vScreen != vWindow))) return false;
+ if (isOp && !s5mode && (hScreen == hWindow) && (vScreen == vWindow)) toggle();
+ var vScale = 48; // both yield 16 (the usual browser default) at 1024x768
+ var hScale = 64; // perhaps should auto-calculate based on theme's declared value?
+ if (window.innerHeight) {
+ var vSize = window.innerHeight;
+ var hSize = window.innerWidth;
+ } else if (document.documentElement.clientHeight) {
+ var vSize = document.documentElement.clientHeight;
+ var hSize = document.documentElement.clientWidth;
+ } else if (document.body.clientHeight) {
+ var vSize = document.body.clientHeight;
+ var hSize = document.body.clientWidth;
+ } else {
+ var vSize = 700; // assuming 1024x768, minus chrome and such equals 8:5
+ var hSize = 1024; // these do not account for kiosk mode or Opera Show
+ }
+ var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
+ extendImgSizes(newSize); // scalable images extension
+ extendCanSizes(newSize); // scalable canvas extension
+ extendObjSizes(newSize); // scalable object extension
+ fontSize(newSize,"px");
+ if(!isS2 || firstTime==0) {
+ generateCanvas(); // dynamic canvas extension
+ }
+ if (isGe) { // hack to counter incremental reflow bugs
+ var obj = document.getElementsByTagName('body')[0];
+ obj.style.visibility = 'hidden';
+ obj.style.display = 'none';
+ obj.style.display = 'block';
+ obj.style.visibility = 'visible';
+ changeOpac(100,'slide' + snum);
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("fixReflow()",10);
+ }else {
+ setListPos(); // invisible select extension
+ }
+}
+
+function fixReflow() {
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("finishReflow()",10);
+}
+function finishReflow() {
+ setListPos(); // invisible select extension
+}
+
+function fontSize(val,fmt) {
+ var value = val + fmt;
+ if (!(s5ss = document.getElementById('s5ss'))) {
+ if (!document.createStyleSheet) {
+ document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
+ s5ss.setAttribute('media','screen, projection');
+ s5ss.setAttribute('id','s5ss');
+ } else {
+ document.createStyleSheet();
+ document.s5ss = document.styleSheets[document.styleSheets.length - 1];
+ }
+ }
+ if (!(document.s5ss && document.s5ss.addRule)) {
+ while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
+ s5ss.appendChild(document.createTextNode('html {font-size: ' + value + ' !important;}'));
+ } else {
+ document.s5ss.addRule('html','font-size: ' + value + ' !important;');
+ }
+}
+
+function windowChange() {
+ fontScale();
+}
+
+function notOperaFix() {
+ slideCSS = document.getElementById('slideProj').href;
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ slides.setAttribute('media','screen');
+ outline.disabled = true;
+ if (isGe) {
+ slides.setAttribute('href','null'); // Gecko fix
+ slides.setAttribute('href',slideCSS); // Gecko fix
+ }
+ if ((isIE && notIE7) && document.styleSheets && document.styleSheets[0]) {
+ document.styleSheets[0].addRule('img', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('div', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('.slide', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ }
+}
+
+function getIncrementals(obj) {
+ var incrementals = new Array();
+ if (!obj)
+ return incrementals;
+ var children = obj.childNodes;
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ if (hasClass(child, 'incremental')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'incremental');
+ for (var j = 0; j < child.childNodes.length; j++) {
+ if (child.childNodes[j].nodeType == 1) {
+ addClass(child.childNodes[j], 'incremental');
+ }
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ removeClass(child,'incremental');
+ }
+ }
+ if (hasClass(child, 'show-first')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'show-first');
+ if (child.childNodes[isGe].nodeType == 1) {
+ removeClass(child.childNodes[isGe], 'incremental');
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ }
+ }
+ incrementals = incrementals.concat(getIncrementals(child));
+ }
+ return incrementals;
+}
+
+function createIncrementals() {
+ var incrementals = new Array();
+ for (var i = 0; i < smax; i++) {
+ incrementals[i] = getIncrementals(document.getElementById('slide'+i));
+ }
+ return incrementals;
+}
+
+function trap(e) {
+ if (!e) {
+ e = event;
+ e.which = e.keyCode;
+ }
+ try {
+ modifierKey = e.ctrlKey || e.altKey || e.metaKey;
+ }
+ catch(e) {
+ modifierKey = false;
+ }
+ return modifierKey || e.which == 0;
+}
+
+// notes extension
+function noteLabel() { // Gives notes id's to match parent slides
+ var notes = GetElementsWithClassName('div','notes');
+ for (var i = 0; i < notes.length; i++) {
+ var note = notes[i];
+ var id = 'note' + note.parentNode.id.substring(5);
+ note.setAttribute('id',id);
+ }
+ resetElapsedSlide();
+ resetRemainingTime();
+ window.setInterval('updateElaspedTime()', 1000);
+}
+
+function createNotesWindow() { // creates a window for our notes
+ if (!s5NotesWindow || s5NotesWindow.closed) { // Create the window if it doesn't exist
+ s5NotesWindowLoaded = false;
+ // Note: Safari has a tendency to ignore window options preferring to default to the settings of the parent window, grr.
+ s5NotesWindow = window.open(s5Path+'ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0');
+ }
+ if (s5NotesWindowLoaded) { // Load the current note if the Note HTML has loaded
+ loadNote();
+ } else { // Keep trying...
+ window.setTimeout('createNotesWindow()', 50);
+ }
+}
+
+function loadNote() {
+// Loads a note into the note window
+ var notes = nextNotes = '<em class="disclaimer">There are no notes for this slide.</em>';
+ if (document.getElementById('note' + snum)) {
+ notes = document.getElementById('note' + snum).innerHTML;
+ }
+ if (document.getElementById('note' + (snum + 1))) {
+ nextNotes = document.getElementById('note' + (snum + 1)).innerHTML;
+ }
+
+ var jl = document.getElementById('jumplist');
+ var slideTitle = jl.options[jl.selectedIndex].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex) ? ' (' + jl.selectedIndex + '/' + (smax - 1) + ')' : '');
+ if (incrementals[snum].length > 0) {
+ slideTitle += ' <small>[' + incpos + '/' + incrementals[snum].length + ']</small>';
+ }
+ if (jl.selectedIndex < smax - 1) {
+ var nextTitle = jl.options[jl.selectedIndex + 1].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex + 1) ? ' (' + (jl.selectedIndex + 1) + '/' + (smax - 1) + ')' : '');
+ } else {
+ var nextTitle = '[end of slide show]';
+ }
+
+ if (s5NotesWindow && !s5NotesWindow.closed && s5NotesWindow.document) {
+ s5NotesWindow.document.getElementById('slide').innerHTML = slideTitle;
+ s5NotesWindow.document.getElementById('notes').innerHTML = notes;
+ s5NotesWindow.document.getElementById('next').innerHTML = nextTitle;
+ s5NotesWindow.document.getElementById('nextnotes').innerHTML = nextNotes;
+ }
+ resetElapsedSlide();
+}
+
+function minimizeTimer(id) {
+ var obj = s5NotesWindow.document.getElementById(id);
+ if (hasClass(obj,'collapsed')) {
+ removeClass(obj,'collapsed');
+ } else {
+ addClass(obj,'collapsed');
+ }
+}
+
+function resetElapsedTime() {
+ presentationStart = new Date();
+ slideStart = new Date();
+ updateElaspedTime();
+}
+
+function resetElapsedSlide() {
+ if (snum != previousSlide) {
+ slideStart = new Date();
+ previousSlide = snum;
+ updateElaspedTime();
+ }
+}
+
+function updateElaspedTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var now = new Date();
+ var ep = s5NotesWindow.document.getElementById('elapsed-presentation');
+ var es = s5NotesWindow.document.getElementById('elapsed-slide');
+ ep.innerHTML = formatTime(now.valueOf() - presentationStart.valueOf());
+ es.innerHTML = formatTime(now.valueOf() - slideStart.valueOf());
+}
+
+function resetRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var startField = s5NotesWindow.document.getElementById('startFrom');
+ startFrom = readTime(startField.value);
+ countdown.remaining = startFrom * 60000; // convert to msecs
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var timeLeft = formatTime(countdown.remaining);
+ tl.innerHTML = timeLeft;
+}
+
+function updateRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var now = new Date();
+ if (countdown.state == 'run') {
+ countdown.remaining = countdown.end - now;
+ }
+ tl.style.color = '';
+ tl.style.backgroundColor = '';
+ if (countdown.remaining >= 0) {
+ var timeLeft = formatTime(countdown.remaining);
+ removeClass(tl,'overtime');
+ if (countdown.remaining < 300000) {
+ tl.style.color = 'rgb(' + (255-Math.round(countdown.remaining/2000)) + ',0,0)';
+ tl.style.backgroundColor = 'rgb(255,255,' + (Math.round(countdown.remaining/2000)) + ')';
+ }
+ } else {
+ var timeLeft = '-' + formatTime(-countdown.remaining);
+ addClass(tl,'overtime');
+ }
+ tl.innerHTML = timeLeft;
+}
+
+function toggleRemainingTime() {
+ if (countdown.state == 'pause') countdown.state = 'run'; else countdown.state = 'pause';
+ if (countdown.state == 'pause') {
+ window.clearInterval(countdown.timer);
+ }
+ if (countdown.state == 'run') {
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ countdown.timer = window.setInterval('updateRemainingTime()', 1000);
+ }
+}
+
+function alterRemainingTime(amt) {
+ var change = amt * 60000; // convert to msecs
+ countdown.end += change;
+ countdown.remaining += change;
+ updateRemainingTime();
+}
+
+function formatTime(msecs) {
+ var time = new Date(msecs);
+
+ var hrs = time.getUTCHours() + ((time.getUTCDate() -1) * 24); // I doubt anyone will spend more than 24 hours on a presentation or single slide but just in case...
+ hrs = (hrs < 10) ? '0'+hrs : hrs;
+ if (hrs == 'NaN' || isNaN(hrs)) hrs = '--';
+
+ var min = time.getUTCMinutes();
+ min = (min < 10) ? '0'+min : min;
+ if (min == 'NaN' || isNaN(min)) min = '--';
+
+ var sec = time.getUTCSeconds();
+ sec = (sec < 10) ? '0'+sec : sec;
+ if (sec == 'NaN' || isNaN(sec)) sec = '--';
+
+ return hrs + ':' + min + ':' + sec;
+}
+
+function readTime(val) {
+ var sregex = /:/;
+ var matches = sregex.exec(val);
+ if (matches == null) {
+ return val;
+ } else {
+ var times = val.split(':');
+ var hours = parseInt(times[0]);
+ var mins = parseInt(times[1]);
+ var total = (hours * 60) + mins;
+ return total;
+ }
+}
+// notes extension
+
+// startup process
+function createSlideShow() {
+ defaultCheck();
+ if(!isIE) createDetector(); // (degrade IE) scalable images extension
+ if(opac!=0 || isIE) { // &&!isIE (degrade IE)
+ tranSitions = false;
+ fadeModus = false;
+ }
+ if(tranSitions && document.getElementById && document.createElement){
+ createProgress();
+ var nop=document.getElementById('StartupControl');
+ nop.onload = dumpProgress;
+ }else {
+ startup();
+ showAll();
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+ }
+}
+
+function defaultCheck() {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'defaultView') {
+ defaultView = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'controlVis') {
+ controlVis = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'tranSitions') {
+ tranSitions = (allMetas[i].content == "true") ? true : false;
+ fadeModus = (tranSitions == true) ? true : false;
+ }
+ if (allMetas[i].name == 'fadeDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ fadeDuration = Math.max(200,Math.min(tmp,2000));
+ }
+ if (allMetas[i].name == 'incrDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ incrDuration = Math.max(50,Math.min(tmp,500));
+ }
+ if (allMetas[i].name == 'autoMatic') {
+ autoMatic = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playLoop') {
+ playLoop = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playDelay') {
+ var tmp = parseInt(allMetas[i].content);
+ playDelay = Math.max(5,Math.min(tmp,90))*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ }
+ if (allMetas[i].name == 'audioSupport') {
+ audioSupport = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'audioVolume') {
+ var tmp = parseInt(allMetas[i].content);
+ audioVolume = Math.max(0,Math.min(tmp,100));
+ }
+ if (allMetas[i].name == 'audioError') {
+ audioError = (allMetas[i].content == "true") ? true : false;
+ }
+ }
+}
+
+function createProgress() {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "StartupProgress";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=100)";
+ }else {
+ pg.style.opacity = 1.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/progress.gif)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+
+ var im = document.createElement('img');
+ im.id = "StartupControl";
+ im.src = s5Path+"ui/graphic_support/blank.gif?" + new Date().valueOf();
+ document.getElementsByTagName("body")[0].appendChild(im);
+}
+
+function startup() {
+ createControls(); // hallvord
+ slideLabel();
+ incrementals = createIncrementals();
+ noteLabel(); // [SI:060104] must follow slideLabel()
+ loadNote();
+ fixLinks();
+ externalLinks();
+ fontScale();
+ if (!isOp) {
+ if(isIE) {
+ document.getElementById('lst').style.backgroundImage = 'none';
+ document.getElementById('del').style.backgroundImage = 'none';
+ }else {
+ document.getElementById('audio').style.backgroundImage = 'none';
+ }
+ notOperaFix();
+ }else if(isOp) {
+ var obj = document.getElementById('exit');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('exit').style.opacity = 0.5;
+ obj = document.getElementById('toggle');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('toggle').style.opacity = 0.5;
+ document.getElementById('jumplist').style.visibility = 'hidden';
+ document.getElementById('list').style.visibility = 'hidden';
+ document.getElementById('lst').style.opacity = 0.5;
+ obj = document.getElementById('audio');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('audio').style.opacity = 0.5;
+ document.getElementById('volumelist').style.visibility = 'hidden';
+ document.getElementById('volume').style.visibility = 'hidden';
+ document.getElementById('vol').style.opacity = 0.5;
+ document.getElementById('delaylist').style.visibility = 'hidden';
+ document.getElementById('delay').style.visibility = 'hidden';
+ document.getElementById('del').style.opacity = 0.5;
+ }
+ slideJump();
+ if (defaultView == 'outline') toggle();
+ document.onkeyup = keys;
+ document.onkeypress = trap;
+ document.onclick = clicker;
+}
+
+function preloadImgages() {
+ var temp = '';
+ var objects = document.getElementsByTagName('img');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].src != '') {
+ temp = new Image();
+ temp.src = objects[i].src;
+ }
+ }
+}
+
+function showAll() {
+ var obj1 = GetElementsWithClassName('div','presentation')[0];
+ if(!obj1) var obj1 = GetElementsWithClassName('ol','presentation')[0];
+ var obj2 = GetElementsWithClassName('div','layout')[0];
+ if(!obj1){}else {obj1.style.display = 'block'};
+ if(!obj2){}else {obj2.style.display = 'block'};
+}
+
+function dumpProgress() {
+ document.body.removeChild(document.getElementById('StartupControl'));
+ startup();
+ preloadImgages();
+ showAll();
+ createSoundManagerScript();
+ shiftOpacity('StartupProgress',1000);
+ window.setTimeout("removeProgress()",1000);
+}
+
+function removeProgress() {
+ document.body.removeChild(document.getElementById('StartupProgress'));
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+}
+function panelSetup() {
+ if(playPause) {
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ if(playLoop) {
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ if(audioSupport && !isIE && !isOp) {
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ }
+ if(fadeModus && !isIE) {
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ if(autoMatic) {
+ var obj = document.getElementById('auto'); changeClass(obj,'ison');
+ startPlay();
+ }
+ if(audioVolume && !isIE && !isOp) {
+ var idx = 0;
+ if(audioVolume >= 95 && audioVolume <= 100) {idx = 0;}
+ else if(audioVolume >= 85 && audioVolume < 95) {idx = 1;}
+ else if(audioVolume >= 75 && audioVolume < 85) {idx = 2;}
+ else if(audioVolume >= 65 && audioVolume < 75) {idx = 3;}
+ else if(audioVolume >= 55 && audioVolume < 65) {idx = 4;}
+ else if(audioVolume >= 45 && audioVolume < 55) {idx = 5;}
+ else if(audioVolume >= 35 && audioVolume < 45) {idx = 6;}
+ else if(audioVolume >= 25 && audioVolume < 35) {idx = 7;}
+ else if(audioVolume >= 15 && audioVolume < 25) {idx = 8;}
+ else if(audioVolume >= 5 && audioVolume < 15) {idx = 9;}
+ else {idx = 10;}
+ document.getElementById('volumelist').selectedIndex = idx;
+ }
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+}
+// startup process
+
+// shutdown process
+function byby() {
+ stopPlay();
+ if(tranSitions && fadeModus && s5mode && !isOp) {
+ fadeoutSound(curSoundID,true); // audio support
+ var pg = document.createElement('div');
+ pg.id = "GoodBy";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=0)";
+ }else {
+ pg.style.opacity = 0.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/finish.gif)";
+ document.getElementsByTagName("body")[0].appendChild(pg);
+ shiftOpacity('GoodBy',1000);
+ window.setTimeout("history.back()",1000);
+ }else {
+ stopSound(curSoundID);
+ history.back();
+ }
+}
+// shutdown process
+
+// scalable images extension
+function createDetector() {
+ var em = document.createElement('div');
+ em.id='EMSizeControl'; em.style.position="absolute"; em.style.left="-999px";
+ em.style.width="1em"; em.style.height="1em"; em.style.opacity=0.0;
+ document.getElementsByTagName("body")[0].appendChild(em);
+ var nop=document.getElementById('EMSizeControl');
+ if(!nop||findPosX(nop)!=-999) {}else {
+ opac=document.getElementById('EMSizeControl').style.opacity;
+ empx=document.getElementById('EMSizeControl').offsetHeight;
+ document.body.removeChild(document.getElementById('EMSizeControl'));
+ var objects = document.getElementsByTagName('img');
+ var j = 0; var i = 0; var k = 0; var d; var obj;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ images[j] = objects[i];
+ ++j;
+ }
+ }
+ var objects = document.getElementsByTagName('canvas'); j = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ canvas[objects[i].id] = objects[i];
+ if(j==0) {
+ if(objects[i].getContext) {
+ canvasSupport = true;
+ }
+ ++j;
+ }
+ }
+ }
+ if(canvasSupport!=true) {
+ for (d in canvas) {
+ try {
+ canvas[d].setAttribute("width",1);
+ canvas[d].setAttribute("height",1);
+ } catch (e) {
+ }
+ }
+ }
+ var objects = document.getElementsByTagName('table');
+ j = 0; k = 0; l = 0; var w; var h; var tmp; var cnt;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^piechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ piecharts[j] = objects[i];
+ em = piecharts[j].getAttribute("summary");
+ if(em != "") em = "," + em;
+ piecharts[j].setAttribute("summary", w + "," + h + em);
+ ++j;
+ }
+ }
+ }
+ if(objects[i].className.match(/^barchart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ barcharts[k] = objects[i];
+ em = barcharts[k].getAttribute("summary");
+ if(em != "") em = "," + em;
+ barcharts[k].setAttribute("summary", w + "," + h + em);
+ ++k;
+ }
+ }
+ }
+ if(objects[i].className.match(/^linechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ linecharts[l] = objects[i];
+ em = linecharts[l].getAttribute("summary");
+ if(em != "") em = "," + em;
+ linecharts[l].setAttribute("summary", w + "," + h + em);
+ ++l;
+ }
+ }
+ }
+ }
+ objects = document.getElementsByTagName('object'); j = 0; i = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ medias[j] = objects[i]; ++j;
+ if(!isIE) {
+ if(objects[i].getAttributeNode("classid")) objects[i].removeAttributeNode(objects[i].getAttributeNode("classid"));
+ if(objects[i].getAttributeNode("codebase")) objects[i].removeAttributeNode(objects[i].getAttributeNode("codebase"));
+ }
+ }
+ }
+ }
+}
+function extendImgSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < images.length; i++) {
+ w=images[i].getAttribute("width",0);
+ h=images[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ images[i].style.width=Math.floor(w*q)+"px";
+ images[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+
+function extendCanSizes(f) {
+ if(empx>0 && canvasSupport) {
+ var q = (f/empx); var w = 0; var h = 0; var tmp = ""; var cnt; var obj;
+ for(var i=0; i < piecharts.length; i++) {
+ if(piecharts[i].getAttribute("summary")) {
+ tmp = piecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = piecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < barcharts.length; i++) {
+ if(barcharts[i].getAttribute("summary")) {
+ tmp = barcharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = barcharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < linecharts.length; i++) {
+ if(linecharts[i].getAttribute("summary")) {
+ tmp = linecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = linecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ }
+}
+function extendObjSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < medias.length; i++) {
+ w=medias[i].getAttribute("width",0);
+ h=medias[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ medias[i].style.width=Math.floor(w*q)+"px";
+ medias[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+function findPosX(obj) {
+ var posLeft = 0;
+ while (obj.offsetParent) {
+ posLeft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ return posLeft;
+}
+function findPosY(obj) {
+ var posTop = 0;
+ while (obj.offsetParent) {
+ posTop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ return posTop;
+}
+// scalable images extension
+
+// canvas chart extension
+function deg2rad(degrees) {
+ return Math.PI *degrees/180;
+}
+function rad2deg(radians) {
+ return 180.0 *radians/Math.PI;
+}
+function circle_point_x(radians, diameter) {
+ var x = Math.cos(radians)*(diameter/2);
+ return x;
+}
+function circle_point_y(radians, diameter) {
+ var y = Math.sin(radians)*(diameter/2);
+ return y;
+}
+function roundTo(val,dig) {
+ var num = val;
+ if (val > 8191 && val < 10485) {
+ val = val-5000;
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ num = num+5000;
+ } else {
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ }
+ return num;
+}
+function searchColor(value) {
+ for (var dat in colorNames) {
+ if(dat==value) return colorNames[dat];
+ }
+ return false;
+}
+function scanColor(value) {
+ if(value.match(/^#[0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var val1 = value.substr(1,1).toLowerCase();
+ var val2 = value.substr(2,1).toLowerCase();
+ var val3 = value.substr(3,1).toLowerCase();
+ value = '#' + val1 + val1 + val2 + val2 + val3 + val3;
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var tmp = searchColor(value.toLowerCase());
+ if(!tmp) {}else{value = tmp;}
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ value = '#000000';
+ }
+ return value.toLowerCase();
+}
+function hex2rgb(val,trans) {
+ if(val.length==7) {
+ var tp1 = Math.max(0,Math.min(parseInt(val.substr(1,2),16),255));
+ var tp2 = Math.max(0,Math.min(parseInt(val.substr(3,2),16),255));
+ var tp3 = Math.max(0,Math.min(parseInt(val.substr(5,2),16),255));
+ return 'rgba(' + tp1 + ',' + tp2 + ',' + tp3 + ',' + trans + ')';
+ }
+}
+function trim(str) {
+ return (str.replace(/\s+$/,"").replace(/^\s+/,""));
+}
+function roundedRect(ctx,x,y,width,height,radius){
+ ctx.beginPath();
+ ctx.moveTo(x,y+radius);
+ ctx.lineTo(x,y+height-radius);
+ ctx.quadraticCurveTo(x,y+height,x+radius,y+height);
+ ctx.lineTo(x+width-radius,y+height);
+ ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius);
+ ctx.lineTo(x+width,y+radius);
+ ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
+ ctx.lineTo(x+radius,y);
+ ctx.quadraticCurveTo(x,y,x,y+radius);
+ ctx.closePath();
+}
+function drawString(ctx, text, fc, tx, ty) {
+ var xp = 0; var c = "";
+ ctx.beginPath();
+ for (var i = 0; i < text.length; i++) {
+ c = text[i];
+ ctx.drawImage(font, signs[c].sx, signs[c].sy, signs[c].sw, signs[c].sh, tx+xp, ty, signs[c].sw*fc, signs[c].sh*fc);
+ xp += (signs[c].sw*fc);
+ }
+ ctx.closePath();
+}
+function strokeString(ctx, txt, col, fh, tx, ty) {
+ var fw = fh*0.666666; var lw = fh*0.125;
+ var ls = lw/2; var cr = lw; var xp = 0;
+ ctx.lineCap = "round"; ctx.lineJoin = "round"
+ ctx.lineWidth = lw; ctx.strokeStyle = col;
+ for (var i = 0; i < txt.length; i++) {
+ strokeSymbol(ctx, txt[i], ls, tx+xp, ty, fw, fh);
+ xp += (txt[i]!="."?fw+cr:(fw/2)+cr);
+ }
+}
+function strokeSymbol(ctx, symbol, fc, cx, cy, cw, ch) {
+ ctx.beginPath();
+ switch (symbol) {
+ case "0":
+ ctx.moveTo(cx+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+(cw/2),(cw/2)-fc,deg2rad(180),0, false);
+ ctx.arc(cx+(cw/2),(cy+ch)-(cw/2),(cw/2)-fc,0,deg2rad(180), false);
+ ctx.closePath();
+ break;
+ case "1":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.moveTo(cx+(cw*0.666666),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.666666),cy+fc);
+ ctx.lineTo(cx+(cw*0.25),cy+(ch*0.25));
+ break;
+ case "2":
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.8));
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+fc,cy+ch-fc);
+ ctx.arc(cx+(cw/2),cy+(cw*0.425),(cw*0.425)-fc,deg2rad(45),deg2rad(-180), true);
+ break;
+ case "3":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-90),deg2rad(180), false);
+ break;
+ case "4":
+ ctx.moveTo(cx+(cw*0.75),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.5),cy+ch-fc);
+ break;
+ case "5":
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-80),deg2rad(180), false);
+ break;
+ case "6":
+ ctx.moveTo(cx+fc,cy+ch-(cw*0.5)-fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-180),deg2rad(180), false);
+ ctx.bezierCurveTo(cx+fc,cy+fc,cx+fc,cy+fc,cx+(cw*0.9)-fc,cy+fc);
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ break;
+ case "7":
+ ctx.moveTo(cx+(cw*0.5),cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.25)-fc);
+ break;
+ case "8":
+ ctx.moveTo(cx+(cw*0.92)-fc,cy+(cw*0.59));
+ ctx.arc(cx+(cw/2),cy+(cw*0.45),(cw*0.45)-fc,deg2rad(25),deg2rad(-205), true);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-135),deg2rad(-45), true);
+ ctx.closePath();
+ ctx.moveTo(cx+(cw*0.79),cy+(ch*0.47));
+ ctx.lineTo(cx+(cw*0.21),cy+(ch*0.47));
+ break;
+ case "9":
+ ctx.moveTo(cx+cw-fc,cy+(cw*0.5));
+ ctx.arc(cx+(cw/2),cy+(cw*0.5),(cw*0.5)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.bezierCurveTo(cx+cw-fc,cy+ch-fc,cx+cw-fc,cy+ch-fc,cx+(cw*0.1)+fc,cy+ch-fc);
+ break;
+ case "%":
+ ctx.moveTo(cx+fc,cy+(ch*0.75));
+ ctx.lineTo(cx+cw-fc,cy+(ch*0.25));
+ ctx.moveTo(cx+(cw*0.505),cy+(cw*0.3));
+ ctx.arc(cx+(cw*0.3),cy+(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.moveTo(cx+(cw*0.905),cy+ch-(cw*0.3));
+ ctx.arc(cx+(cw*0.7),cy+ch-(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ break;
+ case ".":
+ ctx.moveTo(cx+(cw*0.25),cy+ch-fc-fc);
+ ctx.arc(cx+(cw*0.25),cy+ch-fc-fc,fc,deg2rad(0),deg2rad(360), false);
+ ctx.closePath();
+ break;
+ default:
+ break;
+ }
+ ctx.stroke();
+}
+function drawBar(ctx,x,y,width,height,color,value,textdiv){
+ var rw = width/2; var rh = rw/2;
+ height = Math.max(height,rw);
+ var dh = Math.max(height-(2*rh),0.1); var S2L;
+ var xx = rw/8; var yy = rh/4;
+ var yo = rh/2; y = y - yy;
+ if(canvas_noshadow <= 0 && canvas_noshade <= 0) {
+ ctx.save();
+ S2L = ctx.createRadialGradient(x+rw+rh,y+height-rw+yy+rh,0,x+rw,y+height-rw+yy,rw);
+ S2L.addColorStop(0, 'rgba(0,0,0,0.5)');
+ S2L.addColorStop(0.7, 'rgba(0,0,0,0.25)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = S2L;
+ ctx.scale(1,0.5);
+ ctx.translate(xx,y+height+yy);
+ if(isOp){
+ ctx.fillRect(x,y+yy+height-width,width,width);
+ }else {
+ ctx.arc(x+rw,y+yy+height-width,width,0,deg2rad(360), false);
+ ctx.fill();
+ }
+ ctx.restore();
+ }else if(canvas_noshadow <= 0 && canvas_noshade >= 1) {
+ ctx.fillStyle = 'rgba(0,0,0,0.2)';
+ ctx.fillRect(x+yo,y+rh+yo+yo,width,dh);
+ }
+
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x,y+(height/2),x+width,y+(height/2));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.75)');
+ S2L.addColorStop(0.2, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.3, 'rgba(0,0,0,0)');
+ S2L.addColorStop(0.5, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.35)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.1)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.strokeStyle = S2L;
+ ctx.stroke();
+ }else {
+ ctx.fillStyle = color;
+ ctx.fillRect(x,y+rh+yo,width,dh);
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var bw = width; var bh = bw/4;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ var c; var w;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,x+(width/2)-(bw/2),y,bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext <= 0) {
+ strokeString(ctx, value + "%","rgba(48,48,48,1)", th, x+(width/2)-(w/2), y+((bh-th)/2));
+ }else {
+ drawString(ctx, value + "%", tf, x+(width/2)-(w/2), y+((bh-th)/2.2));
+ }
+ }else {
+ var bh = bw/3; var th = roundTo(bh*0.75,0);
+ roundedRect(ctx,x,y,bw,bh,bh/4);
+ ctx.fill();
+ var obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = x + "px";
+ obj.style.top = y+((bh-th)/2.2) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+
+ }
+}
+function drawLine(ctx,x,y,width,height,dist,array,factor,color,fill){
+ if(fill <= 0){
+ var style = hex2rgb(color,0.5);
+ ctx.lineJoin = "miter";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height);
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.lineTo(x+width,y+height);
+ ctx.lineTo(x,y+height);
+ ctx.closePath();
+ ctx.fillStyle = style;
+ ctx.fill();
+ }
+ ctx.lineJoin = "round";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height-(array[0]*factor));
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.strokeStyle = color;
+ ctx.stroke();
+}
+function setDataURL(cid) {
+ if(cid.toDataURL) {
+ var obj = document.getElementById(cid.id + "_link");
+ if(obj) {
+ obj.setAttribute("title", "To Data URL");
+ obj.setAttribute("target", "_blank");
+ obj.setAttribute("href", cid.toDataURL());
+ }
+ }
+}
+function get_input(dataobj,canvasobj,linechart) {
+ var table = document.getElementById(dataobj);
+ var canvas = document.getElementById(canvasobj);
+ var row; var clm; var cnt = 0; var val = 0; var nme = ""; var col = "";
+ if(canvas.getContext) {
+ canvas_width = parseInt(canvas.style.width);
+ canvas_height = parseInt(canvas.style.height);
+ if(canvas_width >= 16 && canvas_height >= 16) {
+ var tmp = table.getAttribute("summary");
+ canvas_noshade = 0; canvas_noshadow = 0;
+ canvas_notext = 0; canvas_imgtext = 0;
+ canvas_htmltext = 0; canvas_nofill = 0;
+ if(tmp.search(/noshadow/) != -1) canvas_noshadow = 1;
+ if(tmp.search(/noshade/) != -1) canvas_noshade = 1;
+ if(tmp.search(/nofill/) != -1) canvas_nofill = 1;
+ if(tmp.search(/notext/) != -1) canvas_notext = 1;
+ if(tmp.search(/htmltext/) != -1) canvas_htmltext = 1;
+ if(tmp.search(/imgtext/) != -1) canvas_imgtext = 1;
+ if(table.getAttribute("bgcolor")) {
+ canvas_bgcolor = scanColor(table.getAttribute("bgcolor"));
+ }
+ ChartData = new Array(); colorSlice = new Array();
+ if(table.getElementsByTagName("tr")[0].getElementsByTagName("th")[0]) cnt = 1;
+ for(var r = cnt; r < table.getElementsByTagName("tr").length; r++) {
+ row = table.getElementsByTagName("tr")[r];
+ clm = row.getElementsByTagName("td").length;
+ if(row.getElementsByTagName("td")[0].getAttribute("bgcolor")) {
+ col = scanColor(row.getElementsByTagName("td")[0].getAttribute("bgcolor")); val = 0;
+ nme = trim(row.getElementsByTagName("td")[1].innerHTML.replace(/<[^>]+>/g,""));
+ if(!linechart) {
+ if(clm > 3) {
+ for(var z = 2; z < clm; z++) {
+ val += parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ }else {
+ val = parseFloat(row.getElementsByTagName("td")[2].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ if(!isNaN(val) && val > 0 && nme != '') {
+ colorSlice[r-cnt] = col; ChartData[nme] = Math.abs(val);
+ }else {
+ break;
+ }
+ }else {
+ val = 0; i = 0;
+ if(clm > 3 && nme != '') {
+ ChartData[r-cnt] = new Array();
+ colorSlice[r-cnt] = col;
+ for(var z = 2; z < clm; z++) {
+ val = Math.abs(parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,"")));
+ if(!isNaN(val) && val >= 0) {
+ ChartData[r-cnt][i] = val; i++;
+ }else {
+ ChartData[r-cnt][i] = 0; i++;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }
+ }
+}
+function setPieChart(canvasobj,textobj) {
+ var cd = (Math.min(canvas_width,canvas_height)/110)*100;
+ var cp = cd*0.1; var cr = cd/2;
+ var sr = cr*0.93; var cw = cd+cp; var ch = cw;
+ var cx = (cd/2)+(cp/2); var cy = cx; var ct = 0;
+ for (var data in ChartData) {
+ ct += ChartData[data];
+ }
+ var poc = ct/100;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ }
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,cw,ch);
+ }else {
+ ctx.clearRect(0,0,cw,ch);
+ }
+ if(canvas_noshadow <= 0) {
+ if(!isOp) {
+ ctx.beginPath();
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),cr,cx+(cr*0.1),cy+(cr*0.1),sr*0.9);
+ B2B.addColorStop(0, 'rgba(0,0,0,0)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.arc(cx+(cr*0.1),cy+(cr*0.1),cr,0,deg2rad(360), false);
+ ctx.closePath();
+ ctx.fillStyle = B2B;
+ ctx.fill();
+ }else {
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),0,cx+(cr*0.1),cy+(cr*0.1),cr);
+ B2B.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(0.87, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = B2B;
+ ctx.fillRect(0,0,cw,ch);
+ }
+ }
+ var val = 0; var deg = 0; var idx = 0; var data;
+ for (data in ChartData) {
+ val = ChartData[data]; sdeg = deg;
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ ctx.beginPath();
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr,sdeg,edeg, false);
+ ctx.lineTo(cx,cy);
+ ctx.closePath();
+ ctx.fillStyle = colorSlice[(idx++)];
+ ctx.fill();
+ }
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ var W2T = ctx.createLinearGradient(cp*2,cp*2,cx,cy);
+ W2T.addColorStop(0, 'rgba(255,255,255,0.8)');
+ W2T.addColorStop(1, 'rgba(255,255,255,0)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.fillStyle = W2T;
+ ctx.fill();
+ ctx.beginPath();
+ var T2B = ctx.createLinearGradient(cx,cy,cw-(cp*2),ch-(cp*2));
+ T2B.addColorStop(0, 'rgba(0,0,0,0)');
+ T2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.fillStyle = T2B;
+ ctx.fill();
+ ctx.beginPath();
+ var B2T = ctx.createLinearGradient(cx,cy,cw-(cp*1.9),ch-(cp*1.9));
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.strokeStyle = B2T;
+ ctx.stroke();
+ ctx.beginPath();
+ var T2W = ctx.createLinearGradient(cx,cy,(cp*1.9),(cp*1.9));
+ T2W.addColorStop(0, 'rgba(255,255,255,0)');
+ T2W.addColorStop(1, 'rgba(255,255,255,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.strokeStyle = T2W;
+ ctx.stroke();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var mpos = 0; var per = 0; var gx = 0;
+ var gy = 0; var tx = 0; var ty = 0;
+ var obj = ""; var w = 0; var c = 0;
+ var bw = cr*0.45; var bh = cr*0.125;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext >= 1) {
+ bw = (cr*0.365);
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ for (data in ChartData) {
+ val = ChartData[data];
+ sdeg = deg; mpos = deg+(((val/2)/ct)*deg2rad(360));
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ per = roundTo(val/poc,2);
+ gx = circle_point_x(mpos, cd);
+ gy = circle_point_y(mpos, cd);
+ tx = parseFloat((cx+(2*Math.floor(cx + gx)))/3);
+ ty = (cy+(2*Math.floor(cy + gy)))/3;
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext >= 1) {
+ drawString(ctx, per + "%", tf, tx-(w/2), ty-(th/1.8));
+ }else {
+ strokeString(ctx, per + "%","rgba(48,48,48,1)", th, tx-(w/2), ty-(th/2));
+ }
+ }else {
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = (tx-(bw/2)) + "px";
+ obj.style.top = ty-(th/1.8) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+ }
+ }
+ }
+}
+function setBarChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9; var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05; var ph = canvas_height*0.05;
+ var cm = 0; var ct = 0;
+ for (var data in ChartData) {
+ cm = Math.max(cm,ChartData[data]);
+ ct += ChartData[data];
+ }
+ var hf = ih/cm; var bs = colorSlice.length;
+ var bw = iw/(bs*1.1); var poc = ct/100;
+ var th = roundTo((bw/3)*0.75,0);
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ var obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ var cc = ""; var bh = 0; var idx = 0; var t = 0; per = 0;
+ for (var data in ChartData) {
+ per = roundTo(ChartData[data]/poc,2);
+ bh = ChartData[data]*hf;
+ drawBar(ctx,pw+(t*(bw*1.1)),ph+ih-bh,bw,bh,colorSlice[(idx++)],per,textdiv);
+ t++;
+ }
+ }
+}
+function setLineChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9;
+ var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05;
+ var ph = canvas_height*0.05;
+ var cm = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ cm = Math.max(cm,ChartData[i][j]);
+ }
+ }
+ var hf = (ih*0.95)/cm; var bw = iw;
+ var dw = iw/(ChartData[0].length-1)
+ var dh = ih/(ChartData[0].length-1)
+ var ps = Math.min(pw,ph); lw = ps/4;
+ var B2T;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_noshadow <= 0) {
+ B2T = ctx.createLinearGradient(pw+ps,ph+ih+1,pw+ps+ps,ph+ih+1);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps,ph+ih);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.lineTo(pw+ps+ps,ph+ih);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+ps+ps,ph+ih,pw+ps+ps,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps+ps,ph+ih);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+ps+iw,ph+ih+ps);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.closePath();
+ ctx.fill();
+ var B2T = ctx.createLinearGradient(pw+iw+1,ph+ps,pw+iw+1,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.35)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps);
+ ctx.lineTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+iw,ph+ps+ps,pw+iw+ps,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.35)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+iw+ps,ph+ih+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = lw/2;
+ ctx.strokeStyle = "rgba(255,255,255,0.25)";
+ if(canvas_nofill <= 0) {
+ ctx.fillStyle = "rgba(240,240,240,0.8)";
+ ctx.strokeStyle = "rgba(255,255,255,1)";
+ ctx.fillRect(pw,ph,iw,ih);
+ }
+ for (var i = 0; i < ChartData[0].length-1; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph);
+ ctx.lineTo(pw+(i*dw),ph+ih);
+ ctx.stroke();
+ }
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw,ph+(i*dh));
+ ctx.lineTo(pw+iw,ph+(i*dh));
+ ctx.stroke();
+ }
+ ctx.lineWidth = lw;
+ var cc = ""; var bh = 0; var idx = 0; var t = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ t = Math.max(t,ChartData[i][j]);
+ }
+ bh = t*hf; cc = colorSlice[(idx++)];
+ drawLine(ctx,pw,ph+ih-bh,bw,bh,dw,ChartData[i],hf,cc,canvas_nofill);
+ }
+ ctx.beginPath();
+ ctx.moveTo(pw,ph);
+ ctx.lineTo(pw,ph+ih);
+ ctx.lineTo(pw+iw+(lw/2),ph+ih);
+ ctx.strokeStyle = "rgba(48,48,48,1)";
+ ctx.stroke();
+ ctx.lineWidth = lw/2;
+ B2T = ctx.createLinearGradient(pw,ph+ih,pw,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,1)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.strokeStyle = B2T;
+ for (var i = 0; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph+ih);
+ ctx.lineTo(pw+(i*dw),ph+ih+ps);
+ ctx.stroke();
+ }
+ B2T = ctx.createLinearGradient(pw-ps,ph,pw,ph);
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,1)');
+ ctx.strokeStyle = B2T;
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw-ps,ph+(i*dh));
+ ctx.lineTo(pw,ph+(i*dh));
+ ctx.stroke();
+ }
+ }
+}
+function generateCanvas() {
+ if(canvasSupport) {
+ var canvasID; var tdataID; var textID;
+ var tmp; var dat; var i; var j;
+ for(i=0; i < piecharts.length; i++) {
+ tmp = piecharts[i].id.split("_");
+ tdataID = piecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setPieChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < barcharts.length; i++) {
+ tmp = barcharts[i].id.split("_");
+ tdataID = barcharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setBarChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < linecharts.length; i++) {
+ tmp = linecharts[i].id.split("_");
+ tdataID = linecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID,true);
+ if(colorSlice.length > 0) {
+ if(ChartData.length == colorSlice.length) {
+ setLineChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ }
+}
+// canvas chart extension
+
+// invisible select extension
+function setListPos(opt) {
+ if(!isIE) { //(degrade IE)
+ var ref = document.getElementById('list');
+ var x = findPosX(ref); var y = findPosY(ref);
+ var obj = document.getElementById('jumplist');
+ obj.style.position = 'fixed'; obj.style.left = x + 'px'; obj.style.top = y + 'px';
+ var vol = document.getElementById('volumelist');
+ ref = document.getElementById('volume');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ vol.style.position = 'fixed'; vol.style.left = x + 'px'; vol.style.top = y + 'px';
+ var del = document.getElementById('delaylist');
+ ref = document.getElementById('delay');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ del.style.position = 'fixed'; del.style.left = x + 'px'; del.style.top = y + 'px';
+ var pnl = document.getElementById('navLinks');
+ }
+ if(opt) {
+ if(isIE) {
+ //(degrade IE)
+ //pnl.style.filter = "alpha(opacity=80)";
+ }else {
+ obj.style.opacity = 0.0;
+ vol.style.opacity = 0.0;
+ del.style.opacity = 0.0;
+ pnl.style.opacity = 0.8;
+ }
+ }
+}
+// invisible select extension
+
+// transition extension
+function switchFade() {
+ if(tranSitions && s5mode && fadeModus) {
+ fadeModus = false;
+ playDelay = playDelay-(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'isoff');
+ }else if(tranSitions && s5mode && !fadeModus) {
+ fadeModus = true;
+ playDelay = playDelay+(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ currentSlide();
+}
+function opacity(ids, opacStart, opacEnd, millisec) {
+ var speed = Math.round(millisec / 100);
+ var timer = 0;
+ if(opacStart > opacEnd) {
+ for(var i = opacStart; i >= opacEnd; i--) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ } else if(opacStart < opacEnd) {
+ for(var i = opacStart; i <= opacEnd; i++) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ }
+}
+function changeOpac(opacity, ids) {
+ var obj = document.getElementById(ids);
+ if (isIE) {
+ obj.style.filter = "alpha(opacity=" + opacity + ")";
+ } else {
+ obj.style.opacity = (opacity / 100);
+ }
+}
+function shiftOpacity(ids, millisec) {
+ if(document.getElementById(ids).style.opacity != '') {
+ var currentOpac = document.getElementById(ids).style.opacity * 100;
+ } else {
+ var currentOpac = 0;
+ }
+ if(currentOpac == 0) {
+ opacity(ids, currentOpac, 100, millisec);
+ } else if(currentOpac > 0) {
+ opacity(ids, currentOpac, 0, millisec);
+ }
+}
+// transition extension
+
+// autoplay extension
+function autoPlay() {
+ if (s5mode && autoMatic && !playPause) {
+ if ((snum >= (smax-1)) && playLoop) {
+ goTo(0);
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }else if ((snum >= (smax-1)) && !playLoop) {
+ stopPlay();
+ }else {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ if (incrementals[snum].length >0) {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = parseInt(playDelay/(incrementals[snum].length+1));
+ remainDer = parseInt(playDelay-(incrDelay*incrementals[snum].length));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ } else {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = incrDuration;
+ remainDer = parseInt(playDelay-(incrementals[snum].length*incrDuration));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }
+ }
+}
+function autoPlayIncr() {
+ if (incpos < incrementals[snum].length) {
+ subgo(1);
+ autoRun = setTimeout('autoPlayIncr();',incrDelay);
+ }else {
+ autoRun = setTimeout('nop();',remainDer);
+ }
+}
+function nop() {
+ // no operation dummy
+}
+function togglePlay() {
+ if (autoRun && s5mode) {
+ stopPlay();
+ }else if (!autoRun && s5mode) {
+ startPlay();
+ }
+}
+function stopPlay() {
+ if (autoRun && s5mode) {
+ clearTimeout(autoRun); autoRun = null;
+ autoMatic = false; playPause = false; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'isoff');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ currentSlide();
+ }
+}
+function startPlay() {
+ if (!autoRun && s5mode) {
+ playPause = false; autoMatic = true; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'ison');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ autoRun = setTimeout('autoPlay();',playDelay);
+ currentSlide();
+ }
+}
+function pausePlay() {
+ if (s5mode && autoMatic) {
+ if (playPause) {
+ playPause = false; autoRun = setTimeout('autoPlay();',playDelay);
+ var obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ }else {
+ if (autoRun){
+ clearTimeout(autoRun); autoRun = null; playPause = true;
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+ }
+}
+function switchLoop() {
+ if(s5mode) {
+ if (playLoop) {
+ playLoop = false;
+ var obj = document.getElementById('loop'); changeClass(obj,'isoff');
+ }else {
+ playLoop = true;
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+}
+function setDelay() {
+ var val = document.getElementById('delaylist');
+ if(s5mode) {
+ var delay = Math.max(5,Math.min(parseInt(val.value),300));
+ playDelay = (fadeModus == true) ? ((delay*1000)+(2*fadeDuration)) : (delay*1000);
+ }
+}
+// autoplay extension
+
+// audio extension
+function createSoundManagerScript() {
+ if(typeof soundManager=="undefined") {
+ onerrorSM2();
+ }else {
+ var script=document.createElement('SCRIPT');
+ var tx=document.createTextNode("soundManager.createMovie();");
+ script.appendChild(tx);
+ document.getElementsByTagName("body")[0].appendChild(script);
+ }
+}
+//soundManager.onload = function() {
+function onloadSM2() {
+ if(!isIE) { //(degrade IE)
+ swfUnloaded = false;
+ preloadSounds();
+ }
+}
+//soundManager.onerror = function() {
+function onerrorSM2() {
+ if(typeof soundManager!="undefined") {
+ soundManager.destruct;
+ delete soundManager;
+ }
+ audioSupport = false; swfUnloaded = true;
+ if(audioError && !isIE && !isOp) {
+ var dv = document.createElement('div'); dv.id = "guru";
+ var d2=document.createElement('div'); dv.appendChild(d2);
+ var tx=document.createTextNode('Guru Meditation - SoundManager failed to load/initialize!');
+ d2.appendChild(tx); document.getElementById('slide0').appendChild(dv);
+ }
+}
+function audioSetup() {
+ if(sound[0]) {
+ playSound(0);
+ }else if(sound[bgSoundItem] && !sound[0]) {
+ playSound(bgSoundItem);
+ }
+}
+function fadeoutSound(ids, option) {
+ if(curSoundID >= 0 && !swfUnloaded) {
+ if(isNaN(ids)) {
+ if(ids == "bgSound") {
+ var cnum = parseInt(bgSoundItem);
+ }else {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && ids == sound[i]["id"]) {
+ var cnum = i;
+ break;
+ }
+ }
+ }
+ }else {
+ var cnum = ids;
+ ids = sound[cnum]["id"];
+ }
+ var vol = getMaxVolume(sound[cnum]["volume"]);
+ var millisec = fadeDuration;
+ var speed = Math.round(millisec / vol);
+ var timer = 0;
+ for(var i = vol; i > 0; i--) {
+ setTimeout("fadeout(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ if(option) setTimeout("stopSound('"+ids+"')",millisec);
+ }
+}
+function fadeout(volume, id) {
+ soundManager.setVolume(id,volume);
+}
+function stopSound(ids) {
+ var sid;
+ if(isNaN(ids)) {
+ sid = ids;
+ }else if(sound[ids]) {
+ sid = sound[ids]["id"];
+ }
+ if(sid!='' && curSoundID >= 0) {
+ soundManager.stop(sid);
+ curSoundID = -1;
+ }
+}
+function toggleSounds() {
+ if(audioSupport && !swfUnloaded) {
+ stopAllSounds();
+ }else if (!audioSupport && !swfUnloaded) {
+ allowSounds();
+ }
+}
+function allowSounds() {
+ if(!swfUnloaded) {
+ audioSupport = true;
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ currentSlide();
+ }
+}
+function stopAllSounds() {
+ if(curSoundID >= 0) {
+ stopSound(curSoundID);
+ }else {
+ soundManager.stopAll();
+ curSoundID = -1;
+ }
+ audioSupport = false;
+ var obj = document.getElementById('audio'); changeClass(obj,'isoff');
+ currentSlide();
+}
+function playSound(id) {
+ if(audioSupport && !swfUnloaded) {
+ var url, sid, vol, lps, cnum;
+ if(isNaN(id)) {
+ sid = id;
+ if(sid == "bgSound") {
+ cnum = parseInt(bgSoundItem);
+ }else {
+ cnum = getSoundID(id);
+ }
+ }else {
+ cnum = parseInt(id);
+ if(sound[cnum]) sid = sound[cnum]["id"];
+ }
+ if(sound[cnum] && sound[cnum]["url"]!='' && sid!=''){
+ url = sound[cnum]["url"];
+ vol = (sound[cnum]["volume"]!='')?getMaxVolume(sound[cnum]["volume"]):getMaxVolume(100);
+ lps = (sound[cnum]["loops"])?true:false;
+ if(lps) {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){soundManager.play(sid,{volume:getMaxVolume(sound[cnum]["volume"])});}});
+ }else {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){curSoundID=-1;}});
+ }
+ }
+ }
+}
+function getSoundID(str) {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && str == sound[i]["id"]) {
+ var id = i;
+ break;
+ }
+ }
+ return id;
+}
+function setVolume() {
+ var vol = document.getElementById('volumelist');
+ if(audioSupport && !swfUnloaded) {
+ audioVolume = parseInt(vol.value);
+ if(curSoundID >= 0) {
+ if(sound[curSoundID]) {
+ var sid = sound[curSoundID]["id"];
+ var vid = getMaxVolume(sound[curSoundID]["volume"]);
+ soundManager.setVolume(sid,vid);
+ }
+ }
+ }
+}
+function getMaxVolume(value) {
+ if(audioVolume>0) {var factor = audioVolume/100;}else {var factor = 0;}
+ return Math.max(0,Math.min(parseInt(value*factor),audioVolume));
+}
+function preloadSounds() {
+ var temp = ''; var parm = ''; var t = ''; var cl = '';
+ var objects = document.getElementsByTagName('object');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].type.toLowerCase() == 'audio/mp3' && objects[i].data != '') {
+ objects[i].width = 0; objects[i].height = 0;
+ if(objects[i].parentNode.tagName == 'DIV') {
+ cl = objects[i].parentNode.className.toLowerCase();
+ if(cl == 'presentation' || cl == 'slide') {
+ if(cl == 'presentation') {
+ t = parseInt(bgSoundItem);
+ }else {
+ t = parseInt(objects[i].parentNode.id.slice(5, objects[i].parentNode.id.length));
+ }
+ sound[t] = new Object();
+ if(t < bgSoundItem) {
+ sound[t]["id"] = objects[i].parentNode.id;
+ }else {
+ sound[t]["id"] = "bgSound";
+ }
+ sound[t]["url"] = objects[i].data;
+ sound[t]["volume"] = 100; sound[t]["loops"] = false;
+ if(objects[i].archive != '') {
+ parm = objects[i].archive.toLowerCase().split(',');
+ for (var j=0; j < parm.length; j++) {
+ if(parm[j] == 'loop') sound[t]["loops"] = true;
+ if(parm[j].search(/^volume/) != -1) {
+ var tmp = parm[j].split(':');
+ sound[t]["volume"] = parseInt(tmp[1]);
+ }
+ }
+ }
+ soundManager.createSound(sound[t]["id"],sound[t]["url"]);
+ }
+ }
+ }
+ }
+}
+// audio extension
+
+// help extension
+function createHelpReq() {
+ if(!document.getElementById("HelpReq")) {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "HelpReq";
+ if (pg.addEventListener) {
+ pg.addEventListener("onclick",dumpHelpReq,false);
+ } else if (pg.attachEvent) {
+ pg.attachEvent("onclick",dumpHelpReq);
+ }
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=90)";
+ } else {
+ pg.style.opacity = 0.9;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(64,64,64)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/help.jpg)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+ if(document.getElementById("HelpReq")) {
+ helpmode = true;
+ }
+ }
+}
+function dumpHelpReq() {
+ if(document.getElementById("HelpReq")) {
+ document.body.removeChild(document.getElementById('HelpReq'));
+ helpmode = false;
+ }
+}
+// help extension
+
+//DEBUG
+function ConsoleLog(value) {
+ if(window.console) {
+ window.console.log(value);
+ }
+}
+//DEBUG
+
+document.write('<style type="text/css" media="screen" id="blockStyle">.presentation, .layout {display: none; }</style>');
+
+if(!isIE && !isOp) {
+ document.write('<script type="text/javascript" src="'+s5Path+'ui/audio_support/soundmanager2.js"></script>');
+ if(typeof soundManager!="undefined") {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'audioDebug') {
+ var audioDebug = (allMetas[i].content == "true") ? true : false;
+ soundManager.defaultOptions.debugMode = audioDebug;
+ }
+ }
+ }
+}
+
+window.onload = createSlideShow;
+window.onresize = function(){setTimeout('windowChange()',5);} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/toggle_link.png
new file mode 100644
index 000000000..4588e2514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/toggle_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/toggle_over.png
new file mode 100644
index 000000000..400f613b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/toggle_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/top.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/top.png
new file mode 100755
index 000000000..9251f8935
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/top.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/volume_link.png
new file mode 100644
index 000000000..f362acd1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/volume_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/wrap.css
new file mode 100644
index 000000000..a37315552
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/wrap.css
@@ -0,0 +1,410 @@
+/********************************************************************
+Screen and Print Styles for the Wrap Plugin
+********************************************************************/
+
+/* tables in columns and boxes should span the whole width */
+.wrap_column table,
+.wrap_left table, .wrap_right table, .wrap_center table,
+.wrap_box table,
+.wrap_info table, .wrap_important table, .wrap_alert table, .wrap_tip table, .wrap_help table, .wrap_todo table, .wrap_download table {
+ width: 100%;
+}
+/* emulate a headline */
+.wrap_column em strong,
+.wrap_left em strong, .wrap_right em strong, .wrap_center em strong,
+.wrap_box em strong,
+.wrap_info em strong, .wrap_important em strong, .wrap_alert em strong, .wrap_tip em strong, .wrap_help em strong, .wrap_todo em strong, .wrap_download em strong {
+ font-size: 130%;
+ font-weight: bold;
+ font-style: normal;
+ display: block;
+}
+/* emulate a bigger headline with a bottom border */
+.wrap_column em strong em.u,
+.wrap_left em strong em.u, .wrap_right em strong em.u, .wrap_center em strong em.u,
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ font-size: 115%;
+ border-bottom: 1px solid __border__;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+}
+/* different bigger headline for safety notes */
+.wrap_danger em strong em.u, .wrap_warning em strong em.u, .wrap_caution em strong em.u, .wrap_notice em strong em.u, .wrap_safety em strong em.u {
+ font-size: 115%;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+ text-transform: uppercase;
+ border-bottom-width: 0;
+}
+/* change border colour of emulated headlines inside boxes to something more neutral
+ (to match all the different background colours) */
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ border-bottom-color: #999;
+}
+
+
+/* columns
+********************************************************************/
+
+.wrap_left,
+.wrap_column {
+ float: left;
+ margin-right: 1.5em;
+}
+.wrap_right {
+ float: right;
+ margin-left: 1.5em;
+}
+.wrap_center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+/*
+.wrap_column,
+.wrap_left,
+.wrap_right {
+ overflow: hidden;
+}
+*/
+.wrap_container {
+ margin-right: -1.5em;
+}
+
+
+/* alignments
+********************************************************************/
+
+.wrap_leftalign {
+ text-align: left;
+}
+.wrap_centeralign {
+ text-align: center;
+}
+.wrap_rightalign {
+ text-align: right;
+}
+.wrap_justify {
+ text-align: justify;
+}
+
+
+/* box
+********************************************************************/
+
+/* see styles for boxes and notes with icons in style.css */
+
+/*____________ rounded corners ____________*/
+/* (only for modern browsers) */
+
+div.wrap_round {
+ border-radius: 20px;
+ -moz-border-radius: 20px;
+ -webkit-border-radius: 20px;
+ -khtml-border-radius: 20px;
+}
+span.wrap_round {
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -khtml-border-radius: 2px;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_lo {
+ color: __text_neu__;
+ font-size: 85%;
+}
+div.wrap_em {
+ color: #c00;
+ font-weight: bold;
+}
+
+/* see styles for highlighted text in style.css */
+
+
+/* typography
+********************************************************************/
+
+/*____________ fonts ____________*/
+
+div.wrap_sansserif {
+ font-family: Verdana,Tahoma,Geneva,"DejaVu Sans","Bitstream Vera Sans","Liberation Sans", Arial,Helvetica,FreeSans,"Liberation Sans","Nimbus Sans L", sans-serif;
+}
+div.wrap_serif {
+ font-family: Georgia,Garamond,"Palatino Linotype","Book Antiqua",Palatino,Palladio,"URW Palladio L","Liberation Serif",Didot,Gentium,"Bitstream Charter","Century Schoolbook L", "Times New Roman",Times,"Nimbus Roman No9 L","FreeSerif", serif;
+}
+div.wrap_monospace {
+ font-family: Courier,"Courier New",FreeMono,"Nimbus Mono L","Liberation Mono", "Lucida Console",Monaco,"DejaVu Sans Mono","Bitstream Vera Sans Mono", monospace;
+}
+
+/*____________ font size ____________*/
+
+div.wrap_bigger {
+ font-size: 125%;
+}
+div.wrap_muchbigger {
+ font-size: 200%;
+}
+div.wrap_smaller {
+ font-size: 75%;
+}
+
+/*____________ font colours ____________*/
+
+div.wrap_fgred {
+ color: #900;
+}
+div.wrap_fggreen {
+ color: #090;
+}
+div.wrap_fgblue {
+ color: #009;
+}
+div.wrap_fgcyan {
+ color: #099;
+}
+div.wrap_fgviolet {
+ color: #909;
+}
+div.wrap_fgyellow {
+ color: #990;
+}
+div.wrap_fggrey {
+ color: #666;
+}
+div.wrap_fgblack {
+ color: #000;
+}
+
+/* see styles for background colours and white font colour in style.css */
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ indent ____________*/
+
+div.wrap_indent {
+ padding-left: 1.5em;
+}
+
+/*____________ outdent ____________*/
+
+div.wrap_outdent {
+ margin-left: -1.5em;
+}
+
+/*____________ word wrapping in pre ____________*/
+
+divdiv.wrap_prewrap pre {
+ white-space: pre-wrap;
+ word-wrap: break-word;/* for IE < 8 */
+ /* white-space: -moz-pre-wrap; for FF < 3 */
+}
+
+/*____________ spoiler ____________*/
+
+divdiv.wrap_spoiler {
+ margin-bottom: 1.5em;
+}
+/* see rest of spoiler styles in style.css */
+
+/*____________ clear float ____________*/
+
+div.wrap_clear {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ font-size: 1px;
+ visibility: hidden;
+ overflow: hidden;
+}
+
+/*____________ hide ____________*/
+
+div.wrap_hide {
+ display: none;
+}
+
+
+/* STYLE.CSS */
+
+/* box
+********************************************************************/
+
+.wrap_box {
+ background: __background_alt__;
+ color: __text__;
+/*
+ overflow: hidden;
+*/
+}
+div.wrap_box,
+div.wrap_danger, div.wrap_warning, div.wrap_caution, div.wrap_notice, div.wrap_safety {
+ padding: 1em 1em .5em;
+ margin-bottom: 1.5em;
+}
+span.wrap_box,
+span.wrap_danger, span.wrap_warning, span.wrap_caution, span.wrap_notice, span.wrap_safety {
+ padding: 0 .3em;
+}
+
+/*____________ notes with icons ____________*/
+
+/* general styles for all note divs */
+div.wrap_info, div.wrap_important, div.wrap_alert, div.wrap_tip, div.wrap_help, div.wrap_todo, div.wrap_download {
+ padding: 1em 1em .5em 70px;
+ margin-bottom: 1.5em;
+ min-height: 68px;
+ background-position: 10px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html div.wrap_info, * html div.wrap_important, * html div.wrap_alert, * html div.wrap_tip, * html div.wrap_help, * html div.wrap_todo, * html div.wrap_download {
+ height: 68px;
+}
+/* general styles for all note spans */
+span.wrap_info, span.wrap_important, span.wrap_alert, span.wrap_tip, span.wrap_help, span.wrap_todo, span.wrap_download {
+ padding: 0 2px 0 20px;
+ min-height: 20px;
+ background-position: 2px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html span.wrap_info, * html span.wrap_important, * html span.wrap_alert, * html span.wrap_tip, * html span.wrap_help, * html span.wrap_todo, * html span.wrap_download {
+ height: 20px;
+}
+
+/*____________ info ____________*/
+.wrap_info { background-color: #d1d7df; }
+div.wrap_info { background-image: url(../../../wrap/images/note/48/info.png); }
+span.wrap_info { background-image: url(../../../wrap/images/note/16/info.png); }
+
+/*____________ important ____________*/
+.wrap_important { background-color: #ffd39f; }
+div.wrap_important { background-image: url(../../../wrap/images/note/48/important.png); }
+span.wrap_important { background-image: url(../../../wrap/images/note/16/important.png); }
+
+/*____________ alert ____________*/
+.wrap_alert { background-color: #ffbcaf; }
+div.wrap_alert { background-image: url(../../../wrap/images/note/48/alert.png); }
+span.wrap_alert { background-image: url(../../../wrap/images/note/16/alert.png); }
+
+/*____________ tip ____________*/
+.wrap_tip { background-color: #fff79f; }
+div.wrap_tip { background-image: url(../../../wrap/images/note/48/tip.png); }
+span.wrap_tip { background-image: url(../../../wrap/images/note/16/tip.png); }
+
+/*____________ help ____________*/
+.wrap_help { background-color: #dcc2ef; }
+div.wrap_help { background-image: url(../../../wrap/images/note/48/help.png); }
+span.wrap_help { background-image: url(../../../wrap/images/note/16/help.png); }
+
+/*____________ todo ____________*/
+.wrap_todo { background-color: #c2efdd; }
+div.wrap_todo { background-image: url(../../../wrap/images/note/48/todo.png); }
+span.wrap_todo { background-image: url(../../../wrap/images/note/16/todo.png); }
+
+/*____________ download ____________*/
+.wrap_download { background-color: #d6efc2; }
+div.wrap_download { background-image: url(../../../wrap/images/note/48/download.png); }
+span.wrap_download { background-image: url(../../../wrap/images/note/16/download.png); }
+
+
+/*____________ safety notes ____________*/
+
+.wrap_danger {
+ background-color: #c00;
+ color: #fff;
+}
+.wrap_warning {
+ background-color: #f60;
+ color: #000;
+}
+.wrap_caution {
+ background-color: #ff0;
+ color: #000;
+}
+.wrap_notice {
+ background-color: #06f;
+ color: #fff;
+}
+.wrap_safety {
+ background-color: #090;
+ color: #fff;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_hi {
+ background-color: #ff9;
+}
+
+/* typography
+********************************************************************/
+
+/*____________ font colours ____________*/
+
+div.wrap_fgwhite {
+ color: #fff;
+}
+
+/*____________ background colours ____________*/
+
+div.wrap_bgred {
+ background-color: #fcc;
+}
+div.wrap_bggreen {
+ background-color: #cfc;
+}
+div.wrap_bgblue {
+ background-color: #ccf;
+}
+div.wrap_bgcyan {
+ background-color: #9ff;
+}
+div.wrap_bgviolet {
+ background-color: #f9f;
+}
+div.wrap_bgyellow {
+ background-color: #ff9;
+}
+div.wrap_bggrey {
+ background-color: #ccc;
+}
+div.wrap_bgwhite {
+ background-color: #fff;
+}
+div.wrap_bgblack {
+ background-color: #000;
+}
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ spoiler ____________*/
+
+div.wrap_spoiler {
+ background-color: __background__ !important;
+ color: __background__ !important;
+ border: 1px dotted red;
+}
+
+/*____________ only print ____________*/
+
+div.wrap_onlyprint {
+ display: none;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/zero_link.png
new file mode 100644
index 000000000..5610884d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/zero_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/zero_over.png
new file mode 100644
index 000000000..3a14a577e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/zero_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/audio_link.png
new file mode 100644
index 000000000..daa740c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/audio_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/audio_on.png
new file mode 100644
index 000000000..cd590aae9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/audio_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/audio_over.png
new file mode 100644
index 000000000..cf537a008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/audio_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/auto_link.png
new file mode 100644
index 000000000..1c2ca4817
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/auto_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/auto_on.png
new file mode 100644
index 000000000..4b0c923b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/auto_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/auto_over.png
new file mode 100644
index 000000000..dbea88975
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/auto_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/backgrnd.png
new file mode 100644
index 000000000..0e48413d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/backgrnd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/blume.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/blume.jpg
new file mode 100644
index 000000000..248743c94
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/blume.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/blumerechts.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/blumerechts.jpg
new file mode 100644
index 000000000..430d21174
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/blumerechts.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/delay_link.png
new file mode 100644
index 000000000..c4d99cd57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/delay_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/exit_link.png
new file mode 100644
index 000000000..1bfd38790
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/exit_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/exit_over.png
new file mode 100644
index 000000000..0fdd1c605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/exit_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/fade_link.png
new file mode 100644
index 000000000..482e4d53e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/fade_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/fade_on.png
new file mode 100644
index 000000000..e12561fb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/fade_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/fade_over.png
new file mode 100644
index 000000000..fb8943c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/fade_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/footer.jpg
new file mode 100644
index 000000000..49370dbba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/footer.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/framing.css
new file mode 100755
index 000000000..14d8509e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/framing.css
@@ -0,0 +1,23 @@
+/* The following styles size, place, and layer the slide components.
+ Edit these if you want to change the overall slide layout.
+ The commented lines can be uncommented (and modified, if necessary)
+ to help you with the rearrangement process. */
+
+/* target = 1024x768 */
+
+div#header, div#footer, .slide {width: 100%; top: 0; left: 0;}
+div#header {top: 0; height: 3em; z-index: 1;}
+div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;}
+.slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;}
+div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;}
+div#controls form {position: absolute; bottom: 0; right: 0; width: 100%;
+ margin: 0;}
+#currentSlide {position: absolute; width: 10%; left: 45%; bottom: 1em; z-index: 10;}
+html>body #currentSlide {position: fixed;}
+
+/*
+div#header {background: #FCC;}
+div#footer {background: #CCF;}
+div#controls {background: #BBD;}
+div#currentSlide {background: #FFC;}
+*/
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/header.png
new file mode 100644
index 000000000..929dabba1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/last_link.png
new file mode 100644
index 000000000..4f158d35d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/last_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/last_over.png
new file mode 100644
index 000000000..a7b629995
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/last_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/list_link.png
new file mode 100644
index 000000000..7e299bb50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/list_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/loop_link.png
new file mode 100644
index 000000000..41e12cb15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/loop_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/loop_on.png
new file mode 100644
index 000000000..2ffcacae1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/loop_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/loop_over.png
new file mode 100644
index 000000000..9fe420153
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/loop_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/next_link.png
new file mode 100644
index 000000000..2b9f44c4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/next_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/next_over.png
new file mode 100644
index 000000000..25788124d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/next_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/notes_link.png
new file mode 100644
index 000000000..bb4a8ae37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/notes_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/notes_over.png
new file mode 100644
index 000000000..c6bfe69fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/notes_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/opera.css
new file mode 100755
index 000000000..9e9d2a3c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/opera.css
@@ -0,0 +1,7 @@
+/* DO NOT CHANGE THESE unless you really want to break Opera Show */
+.slide {
+ visibility: visible !important;
+ position: static !important;
+ page-break-before: always;
+}
+#slide0 {page-break-before: avoid;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/outline.css
new file mode 100755
index 000000000..62db519ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/outline.css
@@ -0,0 +1,15 @@
+/* don't change this unless you want the layout stuff to show up in the outline view! */
+
+.layout div, #footer *, #controlForm * {display: none;}
+#footer, #controls, #controlForm, #navLinks, #toggle {
+ display: block; visibility: visible; margin: 0; padding: 0;}
+#toggle {float: right; padding: 0.5em;}
+html>body #toggle {position: fixed; top: 0; right: 0;}
+
+/* making the outline look pretty-ish */
+
+#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
+#slide0 h1 {padding-top: 1.5em;}
+.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em;
+ border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
+#toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pause_link.png
new file mode 100644
index 000000000..2561cb4a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pause_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pause_on.png
new file mode 100644
index 000000000..2fc9c4a4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pause_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pause_over.png
new file mode 100644
index 000000000..7a7c80ddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pause_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pretty.css
new file mode 100644
index 000000000..0da0ff300
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pretty.css
@@ -0,0 +1,168 @@
+/* Flower Theme 2004 by Martin Hense ::: www.lounge7.de */
+
+/* Following are the presentation styles -- edit away!
+ Note that the 'body' font size may have to be changed if the resolution is
+ different than expected. */
+
+body {background: #fff url(blume.jpg) no-repeat; color: #222; font-size: 2em;}
+:link, :visited {text-decoration: none;}
+h1, h2, h3, h4 {font-size: 100%; margin: 0; padding: 0; font-weight: inherit;}
+ul, pre {margin: 0; line-height: 1em;}
+html, body {margin: 0; padding: 0;}
+
+blockquote, q {font-style: italic;}
+blockquote {padding: 0 2em 0.5em; margin: 0 1.5em 0.5em; text-align: center; font-size: 1em;}
+blockquote p {margin: 0;}
+blockquote i {font-style: normal;}
+blockquote b {display: block; margin-top: 0.5em; font-weight: normal; font-size: smaller; font-style: normal;}
+blockquote b i {font-style: italic;}
+
+kbd {font-weight: bold; font-size: 1em;}
+sup {font-size: smaller; line-height: 1px;}
+
+code {padding: 2px 0.25em; font-weight: bold; color: #533;}
+code.bad, code del {color: red;}
+code.old {color: silver;}
+pre {padding: 0; margin: 0.25em 0 0.5em 0.5em; color: #533; font-size: 90%;}
+pre code {display: block;}
+ul {margin-right: 7%; margin-left: 50px; padding: 0; list-style: circle;}
+li {margin-top: 0.75em; margin-right: 0;}
+ul ul {line-height: 1;}
+ul ul li {margin: .2em; font-size: 85%; list-style: disc;}
+img.leader {display: block; margin: 0 auto;}
+
+div#header, div#footer {background: transparent; color: #BA9384;
+ font-family: Verdana, Helvetica, sans-serif;}
+div#header {line-height: 1px;}
+div#footer {font-size: 0.5em; font-weight: bold; padding: 1em 0;
+border-top: 1px solid #999999; background: #FFF0CF;}
+#footer h1, #footer h2 {display: block; padding: 0 1em;}
+#footer h2 {font-style: italic;}
+
+div.long {font-size: 0.75em;}
+.slide {
+font-family: georgia, times, 'Times New Roman', serif; background: transparent url(blumerechts.jpg) right top no-repeat;
+}
+.slide h1 {position: absolute; z-index: 1;
+ margin: 0; padding: 0.3em 0 0 50px; white-space: nowrap;
+ text-transform: capitalize;
+ top: 35px; left: 60px; color: #4A040A;
+ font: 150%/1em georgia, times, 'Times New Roman', serif;
+ background: transparent;}
+.slide h3 {font-size: 130%;}
+h1 abbr {font-variant: small-caps;}
+
+
+#currentSlide {text-align: center; font-size: 0.5em;
+color: #646587; font-family: Verdana, Helvetica, sans-serif; font-weight: bold;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 1.33em; padding: 0;
+ white-space: normal;
+ color: #000; background: transparent;
+ font: 2em georgia, times, 'Times New Roman', serif;}
+#slide0 h3 {margin-top: 0.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.notes {display: none;}
+
+div#controls {position: absolute; left: 0; bottom: 0; width: 100%; text-align: center; font: bold 1em Verdana, Arial, Helvetica, sans-serif;}
+html>body div#controls {background: transparent; position: fixed; padding: 0; top: auto; text-align: center;}
+#controls #sheet {display: none;}
+#controls #controlForm {height: 32px; width: 100%; text-align: center; vertical-align: middle;}
+#controls #navLinks {border-top: 1px solid #999; overflow: hidden; padding: 0; margin: 0; height: 32px; width: 100%; background-color: #808080; text-align: center; vertical-align: middle; white-space: nowrap;}
+#controls #navLinks ul {margin: 0 auto; padding: 0; height: 32px; width: 500px; white-space: nowrap; text-align: center;}
+#controls #navLinks ul li {list-style: none; display: inline; margin: 0; padding: 0; float: left; height: 32px; width: 32px; text-align: center; background-color: transparent;}
+#controls #navLinks ul li.vr {list-style: none; display: inline; margin: 0px 2px; padding: 0; float: left; height: 32px; width: 1px; text-align: center; background-color: #606060;}
+#controls #navLinks ul li a {margin: 0; padding: 0; float: left; height: 32px; width: 32px; background-color: transparent;}
+
+#controls #navLinks ul li#exit {background: url(exit_link.png) no-repeat top left;}
+#controls #navLinks ul li#exit a:hover {background: url(exit_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#toggle {background: url(toggle_link.png) no-repeat top left;}
+#controls #navLinks ul li#toggle a:hover {background: url(toggle_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#show-notes {background: url(notes_link.png) no-repeat top left;}
+#controls #navLinks ul li#show-notes a:hover {background: url(notes_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#zero {background: url(zero_link.png) no-repeat top left;}
+#controls #navLinks ul li#zero a:hover {background: url(zero_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#prev {background: url(prev_link.png) no-repeat top left;}
+#controls #navLinks ul li#prev a:hover {background: url(prev_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#next {background: url(next_link.png) no-repeat top left;}
+#controls #navLinks ul li#next a:hover {background: url(next_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#last {background: url(last_link.png) no-repeat top left;}
+#controls #navLinks ul li#last a:hover {background: url(last_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#lst {background: url(list_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#fade a.isoff {background: url(fade_link.png) no-repeat top left;}
+#controls #navLinks ul li#fade a.ison {background: url(fade_on.png) no-repeat top right;}
+#controls #navLinks ul li#fade a:hover {background: url(fade_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#audio {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.isoff {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.ison {background: url(audio_on.png) no-repeat top right;}
+#controls #navLinks ul li#audio a:hover {background: url(audio_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#vol {background: url(volume_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#auto a.isoff {background: url(auto_link.png) no-repeat top left;}
+#controls #navLinks ul li#auto a.ison {background: url(auto_on.png) no-repeat top right;}
+#controls #navLinks ul li#auto a:hover {background: url(auto_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#pause a.isoff {background: url(pause_link.png) no-repeat top left;}
+#controls #navLinks ul li#pause a.ison {background: url(pause_on.png) no-repeat top right;}
+#controls #navLinks ul li#pause a:hover {background: url(pause_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#loop a.isoff {background: url(loop_link.png) no-repeat top left;}
+#controls #navLinks ul li#loop a.ison {background: url(loop_on.png) no-repeat top right;}
+#controls #navLinks ul li#loop a:hover {background: url(loop_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#del {background: url(delay_link.png) no-repeat top left;}
+
+#jumplist, #volumelist, #delaylist {padding: 0; margin: 0; width: 32px; height: 32px; cursor: n-resize;}
+
+#guru {position: absolute; visibility: visible; left: 0px; top: 0px; padding: 4px; width: 99%; height: auto; text-align: center; background-color: black; z-index: 10;}
+#guru div {border: solid 3px red; padding: 4px; font-family: monospace; font-size: 60%; width: auto; height: auto; color: red; text-align: center;}
+
+/*
+#currentSlide {white-space: nowrap; text-align: center; margin-bottom: -0.5em; font-size: 0.5em; background-color: transparent; color: #999;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 0; padding: 0; font: bold 2em Verdana, Arial, Helvetica, sans-serif; font-variant: small-caps; text-shadow: 0.1em 0.1em 0.1em #666; white-space: normal; color: #222; background-color: transparent;}
+#slide0 h2 {font: bold italic 1em Arial, Helvetica, sans-serif; margin: 0.25em;}
+#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+*/
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.external {border-bottom: 1px dotted gray;}
+html>body .external {border-bottom: none;}
+.external:after {content: " \274F"; font-size: smaller; color: #999;}
+
+.incremental, .incremental *, .incremental *:after {color: #ccc; visibility: visible;}
+img.incremental, canvas.incremental {visibility: hidden;}
+.slide .current {color: #B02;}
+
+/* diagnostics
+li:after {content: " [" attr(class) "]"; color: #F88;}
+*/
+
+table.piechart, table.barchart, table.linechart { border-spacing: 0.3em 0.15em; }
+table.piechart tr th, table.barchart tr th, table.linechart tr th { white-space: nowrap; }
+table.piechart tr td, table.barchart tr td, table.linechart tr td { vertical-align: top; white-space: nowrap; }
+table.piechart tr td.col, table.barchart tr td.col, table.linechart tr td.col { border-bottom: 1px solid #555; border-right: 1px solid #555; }
+table.fs90 tr td, table.fs90 tr th, div.fs90, pre.fs90, p.fs90 ,ul.fs90 {font-size: 0.9em; }
+table.fs75 tr td, table.fs75 tr th, div.fs75, pre.fs75, p.fs75 ,ul.fs75 {font-size: 0.75em; }
+table.fs66 tr td, table.fs66 tr th, div.fs66, pre.fs66, p.fs66 ,ul.fs66 {font-size: 0.66em; }
+table.fs50 tr td, table.fs50 tr th, div.fs50, pre.fs50, p.fs50 ,ul.fs50 {font-size: 0.5em; }
+
+#soundmanager-debug {position:fixed; top:0px; right:0px; width:30em; height:20em; overflow:auto; border:1px solid red; padding:1em; margin:2em; font-family:"sans serif"; font-size: 12px;color: black; background-color:#f6f6f6; z-index: 100;}
+#soundmanager-debug code {font-size: 11px;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/prev_link.png
new file mode 100644
index 000000000..c31d21350
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/prev_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/prev_over.png
new file mode 100644
index 000000000..6fef4fa52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/prev_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/print.css
new file mode 100755
index 000000000..220083260
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/print.css
@@ -0,0 +1 @@
+/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul { page-break-inside: avoid; visibility: visible !important; } h1 { page-break-after: avoid; } html { width:100%; overflow:hidden; } body { font-size: 12pt; background: white; width:100%; } * { color: black; } #slide0 h1 { font-size: 200%; border: none; margin: 0.5em 0 0.25em; } #slide0 h3 { margin: 0; padding: 0; } #slide0 h4 { margin: 0 0 0.5em; padding: 0; } #slide0 { margin-bottom: 3em; } h1 { border-top: 2pt solid gray; border-bottom: 1px dotted silver; padding:0.2em 0 0.3em 0; } .extra { background: transparent !important; } div.extra, pre.extra, .example { font-size: 10pt; color: #333; } ul.extra a { font-weight: bold; } p.example { display: none; } #header { display: none; } #footer h1 { margin: 0; border-bottom: 1px solid; color: gray; font-style: italic; } #footer h2, #controls { display: none; } div.handout { display:block; border-top: 2px dotted #ccc; background:url(pics/back-handout-print.png) top right no-repeat #fff; min-height:6em; padding-right:6em; margin-bottom:1em; } .slide { display:block; background:url(pics/back-slide-print.png) top right no-repeat #fff; min-height:6em; margin-bottom:1em; } table { display:block; /* display:none; */ font-size:90%; overflow:hidden; margin-top:1em; margin-bottom:1em; } pre , code { margin:0; font-size:1pt; overflow:auto; } img { max-width:100% !important; } /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .layout, .layout * { display: none !important; } \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/s5-core.css
new file mode 100755
index 000000000..86444e041
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/s5-core.css
@@ -0,0 +1,9 @@
+/* Do not edit or override these styles! The system will likely break if you do. */
+
+div#header, div#footer, div#controls, .slide {position: absolute;}
+html>body div#header, html>body div#footer,
+ html>body div#controls, html>body .slide {position: fixed;}
+.handout {display: none;}
+.layout {display: block;}
+.slide, .hideme, .incremental {visibility: hidden;}
+#slide0 {visibility: visible;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/slides.css
new file mode 100755
index 000000000..0786d7dbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/slides.css
@@ -0,0 +1,3 @@
+@import url(s5-core.css); /* required to make the slide show run at all */
+@import url(framing.css); /* sets basic placement and size of slide components */
+@import url(pretty.css); /* stuff that makes the slides look better than blah */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/slides.js
new file mode 100644
index 000000000..510a04c0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/slides.js
@@ -0,0 +1,2812 @@
+// S5 1.3beta7 (18-Apr-2007) advanced version by C. Effenberger
+// Please see http://s5.netzgesta.de/ for more information
+// based on S5 v1.2a1 slides.js -- released into the Public Domain
+// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
+// about all the wonderful and talented contributors to this code!
+// audio extension: soundmanager2 is NOT Public Domain
+// Please see http://www.schillmania.com/projects/soundmanager2/ for information
+
+var undef;
+var slideCSS = '';
+var snum = 0;
+var smax = 1;
+var incpos = 0;
+var number = undef;
+var firstTime = 1;
+var s5mode = true;
+var helpmode = false;
+var defaultView = 'slideshow'; //outline
+var controlVis = 'visible';
+var s5Path = 'lib/plugins/s5reloaded/';
+
+// scalable images extension
+var empx = 0;
+var images = new Array();
+var canvas = new Array();
+var medias = new Array();
+var piecharts = new Array();
+var barcharts = new Array();
+var linecharts = new Array();
+// scalable images extension
+
+// transition extension
+var tranSitions = false;
+var fadeModus = false;
+var fadeDuration = 500;
+var incrDuration = 250;
+var opac = 1;
+var cid = '';
+var nid = '';
+var tid = '';
+var jl = '';
+// transition extension
+
+// autoplay extension
+var autoMatic = false;
+var playLoop = false;
+var playPause = false;
+var autoRun = false;
+var playDelay = 5000;
+var remainDer = 0;
+var incrDelay = 0;
+// autoplay extension
+
+// audio extension
+var sound = new Array();
+var audioSupport = false;
+var audioVolume = 100;
+var audioError = false;
+var swfUnloaded = true;
+var bgSoundItem = 9999;
+var curSoundID = -1;
+// audio extension
+
+// panel extension
+var imgWidth = 32;
+var imgHeight = 32;
+// panel extension
+
+// canvas chart extension
+var canvasSupport = false;
+var ChartData = new Array();
+var colorSlice = new Array();
+var font = document.createElement("img");
+font.setAttribute("src", s5Path+"ui/graphic_support/numeric.png");
+signs = {
+ '0': {sx: 0, sy: 0, sw: 48, sh: 64},
+ '1': {sx: 48, sy: 0, sw: 48, sh: 64},
+ '2': {sx: 96, sy: 0, sw: 48, sh: 64},
+ '3': {sx: 144, sy: 0, sw: 48, sh: 64},
+ '4': {sx: 192, sy: 0, sw: 48, sh: 64},
+ '5': {sx: 240, sy: 0, sw: 48, sh: 64},
+ '6': {sx: 288, sy: 0, sw: 48, sh: 64},
+ '7': {sx: 336, sy: 0, sw: 48, sh: 64},
+ '8': {sx: 384, sy: 0, sw: 48, sh: 64},
+ '9': {sx: 432, sy: 0, sw: 48, sh: 64},
+ '%': {sx: 480, sy: 0, sw: 48, sh: 64},
+ '.': {sx: 528, sy: 0, sw: 24, sh: 64}
+};
+var colorNames= new Array();
+colorNames["black"]="#000000"; colorNames["maroon"]="#800000";
+colorNames["green"]="#008000"; colorNames["olive"]="#808000";
+colorNames["navy"]="#000080"; colorNames["purple"]="#800080";
+colorNames["teal"]="#008080"; colorNames["gray"]="#808080";
+colorNames["silver"]="#C0C0C0"; colorNames["red"]="#FF0000";
+colorNames["lime"]="#00FF00"; colorNames["yellow"]="#FFFF00";
+colorNames["blue"]="#0000FF"; colorNames["fuchsia"]="#FF00FF";
+colorNames["aqua"]="#00FFFF"; colorNames["white"]="#FFFFFF";
+colorNames["aliceblue"]="#F0F8FF"; colorNames["antiquewhite"]="#FAEBD7";
+colorNames["aquamarine"]="#7FFFD4"; colorNames["azure"]="#F0FFFF";
+colorNames["beige"]="#F5F5DC"; colorNames["blueviolet"]="#8A2BE2";
+colorNames["brown"]="#A52A2A"; colorNames["burlywood"]="#DEB887";
+colorNames["cadetblue"]="#5F9EA0"; colorNames["chartreuse"]="#7FFF00";
+colorNames["chocolate"]="#D2691E"; colorNames["coral"]="#FF7F50";
+colorNames["cornflowerblue"]="#6495ED"; colorNames["cornsilk"]="#FFF8DC";
+colorNames["crimson"]="#DC143C"; colorNames["darkblue"]="#00008B";
+colorNames["darkcyan"]="#008B8B"; colorNames["darkgoldenrod"]="#B8860B";
+colorNames["darkgray"]="#A9A9A9"; colorNames["darkgreen"]="#006400";
+colorNames["darkkhaki"]="#BDB76B"; colorNames["darkmagenta"]="#8B008B";
+colorNames["darkolivegreen"]="#556B2F"; colorNames["darkorange"]="#FF8C00";
+colorNames["darkorchid"]="#9932CC"; colorNames["darkred"]="#8B0000";
+colorNames["darksalmon"]="#E9967A"; colorNames["darkseagreen"]="#8FBC8F";
+colorNames["darkslateblue"]="#483D8B"; colorNames["darkslategray"]="#2F4F4F";
+colorNames["darkturquoise"]="#00CED1"; colorNames["darkviolet"]="#9400D3";
+colorNames["deeppink"]="#FF1493"; colorNames["deepskyblue"]="#00BFFF";
+colorNames["dimgray"]="#696969"; colorNames["dodgerblue"]="#1E90FF";
+colorNames["firebrick"]="#B22222"; colorNames["floralwhite"]="#FFFAF0";
+colorNames["forestgreen"]="#228B22"; colorNames["gainsboro"]="#DCDCDC";
+colorNames["ghostwhite"]="#F8F8FF"; colorNames["gold"]="#FFD700";
+colorNames["goldenrod"]="#DAA520"; colorNames["greenyellow"]="#ADFF2F";
+colorNames["honeydew"]="#F0FFF0"; colorNames["hotpink"]="#FF69B4";
+colorNames["indianred"]="#CD5C5C"; colorNames["indigo"]="#4B0082";
+colorNames["ivory"]="#FFFFF0"; colorNames["khaki"]="#F0E68C";
+colorNames["lavender"]="#E6E6FA"; colorNames["lavenderblush"]="#FFF0F5";
+colorNames["lawngreen"]="#7CFC00"; colorNames["lemonchiffon"]="#FFFACD";
+colorNames["lightblue"]="#ADD8E6"; colorNames["lightcoral"]="#F08080";
+colorNames["lightcyan"]="#E0FFFF"; colorNames["lightgoldenrodyellow"]="#FAFAD2";
+colorNames["lightgreen"]="#90EE90"; colorNames["lightgrey"]="#D3D3D3";
+colorNames["lightpink"]="#FFB6C1"; colorNames["lightsalmon"]="#FFA07A";
+colorNames["lightseagreen"]="#20B2AA"; colorNames["lightskyblue"]="#87CEFA";
+colorNames["lightslategray"]="#778899"; colorNames["lightsteelblue"]="#B0C4DE";
+colorNames["lightyellow"]="#FFFFE0"; colorNames["limegreen"]="#32CD32";
+colorNames["linen"]="#FAF0E6"; colorNames["mediumaquamarine"]="#66CDAA";
+colorNames["mediumblue"]="#0000CD"; colorNames["mediumorchid"]="#BA55D3";
+colorNames["ediumpurple"]="#9370D"; colorNames["mediumseagreen"]="#3CB371";
+colorNames["mediumslateblue"]="#7B68EE"; colorNames["mediumspringgreen"]="#00FA9A";
+colorNames["mediumturquoise"]="#48D1CC"; colorNames["mediumvioletred"]="#C71585";
+colorNames["midnightblue"]="#191970"; colorNames["mintcream"]="#F5FFFA";
+colorNames["mistyrose"]="#FFE4E1"; colorNames["moccasin"]="#FFE4B5";
+colorNames["navajowhite"]="#FFDEAD"; colorNames["oldlace"]="#FDF5E6";
+colorNames["olivedrab"]="#6B8E23"; colorNames["orange"]="#FFA500";
+colorNames["orangered"]="#FF4500"; colorNames["orchid"]="#DA70D6";
+colorNames["palegoldenrod"]="#EEE8AA"; colorNames["palegreen"]="#98FB98";
+colorNames["paleturquoise"]="#AFEEEE"; colorNames["palevioletred"]="#DB7093";
+colorNames["papayawhip"]="#FFEFD5"; colorNames["peachpuff"]="#FFDAB9";
+colorNames["peru"]="#CD853F"; colorNames["pink"]="#FFC0CB";
+colorNames["plum"]="#DDA0DD"; colorNames["powderblue"]="#B0E0E6";
+colorNames["rosybrown"]="#BC8F8F"; colorNames["royalblue"]="#4169E1";
+colorNames["saddlebrown"]="#8B4513"; colorNames["salmon"]="#FA8072";
+colorNames["sandybrown"]="#F4A460"; colorNames["seagreen"]="#2E8B57";
+colorNames["seashell"]="#FFF5EE"; colorNames["sienna"]="#A0522D";
+colorNames["skyblue"]="#87CEEB"; colorNames["slateblue"]="#6A5ACD";
+colorNames["slategray"]="#708090"; colorNames["snow"]="#FFFAFA";
+colorNames["springgreen"]="#00FF7F"; colorNames["steelblue"]="#4682B4";
+colorNames["tan"]="#D2B48C"; colorNames["thistle"]="#D8BFD8";
+colorNames["tomato"]="#FF6347"; colorNames["turquoise"]="#40E0D0";
+colorNames["violet"]="#EE82EE"; colorNames["wheat"]="#F5DEB3";
+colorNames["whitesmoke"]="#F5F5F5"; colorNames["yellowgreen"]="#9ACD32";
+var canvas_bgcolor = "";
+var canvas_width = 200;
+var canvas_height = 200;
+var canvas_noshade = 0;
+var canvas_nofill = 0;
+var canvas_noshadow = 0;
+var canvas_htmltext = 0;
+var canvas_imgtext = 0;
+var canvas_notext = 0;
+// canvas chart extension
+
+var s5NotesWindow;
+var s5NotesWindowLoaded = false;
+var previousSlide = 0;
+var presentationStart = new Date();
+var slideStart = new Date();
+
+var countdown = {
+ timer: 0,
+ state: 'pause',
+ start: new Date(),
+ end: 0,
+ remaining: 0
+};
+
+var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
+if(isIE) var notIE7 = parseInt(navigator.appVersion) < 7 ? 1 : 0;
+var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
+var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
+var isS2 = navigator.userAgent.indexOf('Safari') >= 2 ? 1 : 0;
+
+function hasClass(object, className) {
+ if (!object.className) return false;
+ return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
+}
+
+function hasValue(object, value) {
+ if (!object) return false;
+ return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
+}
+
+function removeClass(object,className) {
+ if (!object || !hasClass(object,className)) return;
+ object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
+}
+
+function addClass(object,className) {
+ if (!object || hasClass(object, className)) return;
+ if (object.className) {
+ object.className += ' '+className;
+ } else {
+ object.className = className;
+ }
+}
+
+function changeClass(object,className) {
+ if (!object) return;
+ object.firstChild.className = className;
+}
+
+function GetElementsWithClassName(elementName,className) {
+ var allElements = document.getElementsByTagName(elementName);
+ var elemColl = new Array();
+ for (var i = 0; i< allElements.length; i++) {
+ if (hasClass(allElements[i], className)) {
+ elemColl[elemColl.length] = allElements[i];
+ }
+ }
+ return elemColl;
+}
+
+function isParentOrSelf(element, id) {
+ if (element == null || element.nodeName=='BODY') return false;
+ else if (element.id == id) return true;
+ else return isParentOrSelf(element.parentNode, id);
+}
+
+function nodeValue(node) {
+ var result = "";
+ if (node.nodeType == 1) {
+ var children = node.childNodes;
+ for (var i = 0; i < children.length; ++i) {
+ result += nodeValue(children[i]);
+ }
+ }
+ else if (node.nodeType == 3) {
+ result = node.nodeValue;
+ }
+ return(result);
+}
+
+function slideLabel() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var list = document.getElementById('jumplist');
+ smax = slideColl.length;
+ for (var n = 0; n < smax; n++) {
+ var obj = slideColl[n];
+ var did = 'slide' + n.toString();
+ obj.setAttribute('id',did);
+ var otext = '';
+ var menu = obj.firstChild;
+ if (!menu) continue; // to cope with empty slides
+ while (menu && menu.nodeType == 3) {
+ menu = menu.nextSibling;
+ }
+ if (!menu) continue; // to cope with slides with only text nodes
+ var menunodes = menu.childNodes;
+ for (var o = 0; o < menunodes.length; o++) {
+ otext += nodeValue(menunodes[o]);
+ }
+ list.options[list.length] = new Option(n + ' : ' + otext, n);
+ }
+}
+
+function currentSlide() {
+ var cs, at, fd, ss;
+ if (document.getElementById) {
+ cs = document.getElementById('currentSlide');
+ } else {
+ cs = document.currentSlide;
+ }
+ fd = fadeModus?"F":"&ndash;";
+ ss = audioSupport?"S":"&ndash;";
+ at = (autoMatic?(playPause?"||":(playLoop?"&gt;0":"&gt;|")):"&ndash;&ndash;");
+ cs.innerHTML = '<div id="plink" nowrap="nowrap">' +
+ '<span id="csFade">[' + fd + ss + ']<\/span>&nbsp;' +
+ '<span id="csHere"><strong>' + snum + '<\/strong><\/span>' +
+ '<span id="csSep">\/<\/span>' +
+ '<span id="csTotal">' + (smax-1) + '<\/span>&nbsp;' +
+ '<span id="csAuto">[' + at + ']<\/span>' +
+ '<\/div>';
+
+ if (snum == 0) {
+ cs.style.visibility = 'hidden';
+ } else {
+ cs.style.visibility = 'visible';
+ }
+}
+
+function go(step) {
+ if (document.getElementById('slideProj').disabled || step == 0) return;
+ jl = document.getElementById('jumplist');
+ cid = 'slide' + snum;
+ var ce = document.getElementById(cid);
+ if (incrementals[snum].length > 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ removeClass(incrementals[snum][i], 'current');
+ removeClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ if (step != 'j') {
+ snum += step;
+ lmax = smax - 1;
+ if (snum > lmax) snum = lmax;
+ if (snum < 0) snum = 0;
+ }else {
+ snum = parseInt(jl.value);
+ }
+ nid = 'slide' + snum;
+ var ne = document.getElementById(nid);
+ if (!ne) {
+ ne = document.getElementById('slide0');
+ nid = 'slide0';
+ snum = 0;
+ }
+ if (step < 0) {
+ incpos = incrementals[snum].length
+ }else {
+ incpos = 0;
+ }
+ if (incrementals[snum].length > 0 && incpos == 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ if (hasClass(incrementals[snum][i], 'current')) {
+ incpos = i + 1;
+ }else {
+ addClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ }
+ if (incrementals[snum].length > 0 && incpos > 0) {
+ addClass(incrementals[snum][incpos - 1], 'current');
+ }
+ var guru = document.getElementById('guru');
+ if(guru && snum==0) {
+ guru.style.visibility = 'visible';
+ }else if(guru && snum>0) {
+ guru.style.visibility = 'hidden';
+ }
+ if(tranSitions && s5mode && fadeModus) {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {fadeoutSound(curSoundID,true); } // audio support
+ }
+ changeOpac(0,nid);
+ changeOpac(100,cid);
+ ce.style.visibility = 'visible';
+ shiftOpacity(cid,fadeDuration);
+ window.setTimeout("changeSlides()",fadeDuration);
+ }else {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {stopSound(curSoundID); } // audio support
+ }
+ ce.style.visibility = 'hidden';
+ if (isOp) location.hash = nid;
+ ne.style.visibility = 'visible';
+ finishSlides();
+ }
+}
+
+function changeSlides() {
+ if(nid != cid) changeOpac(100,cid);
+ document.getElementById(cid).style.visibility = 'hidden';
+ document.getElementById(nid).style.visibility = 'visible';
+ if (isOp) location.hash = nid;
+ shiftOpacity(nid,fadeDuration);
+ window.setTimeout("finishSlides()",fadeDuration);
+}
+
+function finishSlides() {
+ jl.selectedIndex = snum;
+ currentSlide();
+ loadNote();
+ permaLink();
+ number = undef;
+ if(sound[getSoundID(nid)]) {
+ playSound(nid); // audio support
+ }else if(sound[bgSoundItem] && curSoundID != bgSoundItem) {
+ playSound(bgSoundItem); // audio support
+ }
+}
+
+function goTo(target) {
+ if (target >= smax || target == snum) return;
+ go(target - snum);
+}
+
+function subgo(step) {
+ if (step > 0) {
+ removeClass(incrementals[snum][incpos - 1],'current');
+ removeClass(incrementals[snum][incpos], 'incremental');
+ if(tranSitions && s5mode && fadeModus) {
+ if(!incrementals[snum][incpos].id) {
+ var tmp = new Date(); tid = "inc" + String(tmp.getTime());
+ incrementals[snum][incpos].id = tid;
+ }else {
+ tid = incrementals[snum][incpos].id;
+ }
+ if(typeof(incrementals[snum][incpos].src) != "undefined" || incrementals[snum][incpos].getContext) {
+ changeOpac(0,tid);
+ addClass(incrementals[snum][incpos],'current');
+ shiftOpacity(tid,incrDuration);
+ setTimeout("nextInc()",incrDuration);
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ } else {
+ incpos--;
+ removeClass(incrementals[snum][incpos],'current');
+ addClass(incrementals[snum][incpos], 'incremental');
+ addClass(incrementals[snum][incpos - 1],'current');
+ loadNote();
+ }
+}
+
+function nextInc() {
+ incpos++;
+ loadNote();
+}
+
+function toggle() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ var guru = document.getElementById('guru');
+ if (!slides.disabled) {
+ stopPlay();
+ if(audioSupport && !swfUnloaded) stopAllSounds();
+ slides.disabled = true;
+ outline.disabled = false;
+ s5mode = false;
+ fontSize(1,'em');
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'visible';
+ }
+ if(guru) guru.style.visibility = 'hidden';
+ } else {
+ slides.disabled = false;
+ outline.disabled = true;
+ s5mode = true;
+ fontScale();
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'hidden';
+ }
+ slideColl[snum].style.visibility = 'visible';
+ if(guru && snum==0) guru.style.visibility = 'visible';
+ }
+}
+
+function showHide(action) {
+ var obj = GetElementsWithClassName('*','hideme')[0];
+ switch (action) {
+ case 's':
+ obj.style.visibility = 'visible';
+ break;
+ case 'h':
+ obj.style.visibility = 'hidden';
+ break;
+ case 'k':
+ if (obj.style.visibility != 'visible') {
+ obj.style.visibility = 'visible';
+ } else {
+ obj.style.visibility = 'hidden';
+ }
+ break;
+ }
+}
+
+function keys(key) {
+ if (!key) {
+ key = event;
+ key.which = key.keyCode;
+ }
+ if (helpmode) {
+ dumpHelpReq();
+ return;
+ }
+ if (key.which == 84 && !isOp) {
+ toggle();
+ return;
+ }
+ if (s5mode) {
+ if (autoMatic) {
+ switch (key.which) {
+ case 70: // f/ading on/off
+ switchFade();
+ break;
+ case 83: // s/ound on/off
+ toggleSounds();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 65: // a/utoplay on/off
+ stopPlay();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 80: // p/ause
+ case 32: // spacebar
+ pausePlay();
+ break;
+ }
+ }else {
+ switch (key.which) {
+ case 8: // backspace = HELP
+ createHelpReq();
+ break;
+ case 10: // return
+ case 13: // enter
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ if(number != undef) {
+ goTo(number);
+ break;
+ }
+ case 32: // spacebar
+ case 34: // page down
+ case 39: // rightkey
+ case 40: // downkey
+ if(number != undef) {
+ go(number);
+ } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ break;
+ case 33: // page up
+ case 37: // leftkey
+ case 38: // upkey
+ if(number != undef) {
+ go(-1 * number);
+ } else if (!incrementals[snum] || incpos <= 0) {
+ go(-1);
+ } else {
+ subgo(-1);
+ }
+ break;
+ case 65: // a/utoplay
+ startPlay();
+ break;
+ case 72: // h
+ case 36: // home
+ goTo(0);
+ break;
+ case 69: // e
+ case 35: // end
+ goTo(smax-1);
+ break;
+ case 70: // f/ade transitions on/off
+ switchFade();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 83: // s/ound support on/off
+ toggleSounds();
+ break;
+ case 27: // escape
+ case 81: // q
+ if(!isOp) byby();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 78: // n
+ createNotesWindow();
+ break;
+ }
+ if (key.which < 48 || key.which > 57) {
+ number = undef;
+ } else {
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
+ }
+ }
+ }
+ return false;
+}
+
+function clicker(e) {
+ number = undef;
+ var target;
+ if (window.event) {
+ target = window.event.srcElement;
+ e = window.event;
+ } else {
+ target = e.target;
+ }
+ if (target.href != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
+ if (!helpmode) {
+ if (!e.which || e.which == 1) {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ }
+ } else {
+ dumpHelpReq();
+ }
+}
+
+function findSlide(hash) {
+ var target = null;
+ var slides = GetElementsWithClassName('*','slide');
+ for (var i = 0; i < slides.length; i++) {
+ var targetSlide = slides[i];
+ if ( (targetSlide.name && targetSlide.name == hash)
+ || (targetSlide.id && targetSlide.id == hash) ) {
+ target = targetSlide;
+ break;
+ }
+ }
+ while(target != null && target.nodeName != 'BODY') {
+ if (hasClass(target, 'slide')) {
+ return parseInt(target.id.slice(5));
+ }
+ target = target.parentNode;
+ }
+ return null;
+}
+
+function slideJump() {
+ if (window.location.hash == null) return;
+ var sregex = /^#slide(\d+)$/;
+ var matches = sregex.exec(window.location.hash);
+ var dest = null;
+ if (matches != null) {
+ dest = parseInt(matches[1]);
+ } else {
+ dest = findSlide(window.location.hash.slice(1));
+ }
+ if (dest != null)
+ go(dest - snum);
+}
+
+function fixLinks() {
+ var thisUri = window.location.href;
+ thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
+ var aelements = document.getElementsByTagName('A');
+ for (var i = 0; i < aelements.length; i++) {
+ var a = aelements[i].href;
+ var slideID = a.match('\#slide[0-9]{1,2}');
+ if ((slideID) && (slideID[0].slice(0,1) == '#')) {
+ var dest = findSlide(slideID[0].slice(1));
+ if (dest != null) {
+ if (aelements[i].addEventListener) {
+ aelements[i].addEventListener("click", new Function("e",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "if (e.preventDefault) e.preventDefault();"), true);
+ } else if (aelements[i].attachEvent) {
+ aelements[i].attachEvent("onclick", new Function("",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "event.returnValue = false;"));
+ }
+ }
+ }
+ }
+}
+
+function externalLinks() {
+ if (!document.getElementsByTagName) return;
+ var anchors = document.getElementsByTagName('a');
+ for (var i=0; i<anchors.length; i++) {
+ var anchor = anchors[i];
+ if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
+ anchor.target = '_blank';
+ addClass(anchor,'external');
+ }
+ }
+}
+
+function permaLink() {
+ document.getElementById('plink').href = window.location.pathname + '#slide' + snum;
+}
+
+function createControls() {
+ var controlsDiv = document.getElementById("controls");
+ if (!controlsDiv) return;
+ var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
+ var hideDiv, hideList = '';
+ if (controlVis == 'hidden') {
+ hideDiv = hider;
+ } else {
+ hideList = hider;
+ }
+ if(isOp) {
+ var str = '';
+ }else {
+ var str = '<a accesskey="t" id="sheet" title="toggle CSS" href="javascript:toggle();">&plusmn;<\/a>';
+ }
+ if(isIE) {
+ var tmp = "move around&xA0;until the color&xA0;change to red!";
+ }else if(isS2) {
+ var tmp = "move around\r\nuntil the color\r\nchange to red!";
+ }else {
+ var tmp = "move around until color change to red!";
+ }
+ if(isIE) {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] for keyboard help!"><ul>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst" style="vertical-align: middle; width: 160px;"><select style="cursor: auto; width: 160px; height: auto;" id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del" style="vertical-align: middle; width: 52px;"><select style="cursor: auto; width: 52px; height: auto;" id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul><\/div><\/form>';
+ }else {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] or double click this area for keyboard help!" ondblclick="createHelpReq();"><ul>' +
+ '<li id="exit"><a href="javascript:byby();" accesskey="q" title="exit Show"><\/a><\/li>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li class="vr"><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst"><a id="list" style="cursor:wait;" title="' + tmp + '"><\/a><select id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="fadeLinks" class="vr"><\/li>' +
+ '<li id="fade"><a class="isoff" href="javascript:switchFade();" accesskey="f" title="Transions"><\/a><\/li>' +
+ '<li id="audioLinks" class="vr"><\/li>' +
+ '<li id="audio"><a class="isoff" href="javascript:toggleSounds();" accesskey="s" title="Sounds" ><\/a><\/li>' +
+ '<li id="vol"><a id="volume" style="cursor:wait;" title="' + tmp + '"><\/a><select id="volumelist" title="select Volume" onchange="setVolume();"><option value="100">100<\/option><option value="90">90<\/option><option value="80">80<\/option><option value="70">70<\/option><option value="60">60<\/option><option value="50">50<\/option><option value="40">40<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="10">10<\/option><option value="0">0<\/option><\/select><\/li>' +
+ '<li id="autoLinks" class="vr"><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del"><a id="delay" style="cursor:wait;" title="' + tmp + '"><\/a><select id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul>' +
+ '<a href="http://s5.netzgesta.de" target="_blank" title="S5 Reloaded"><img style="position: absolute; right: 0; bottom: 0;" src="data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAYAAAASYli2AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAYpSURBVHjaYvz//z8DOYCRkZEZRAEx0Ij/f2HiAAHEgqYIpACkkB1J7g8Q/wLRIJ1QNSB5fiDmAOLvQKHPQPoHSB4ggFiQDGMCUnxALAPECkAsBLIdiD8A8SMgfghU8wlqkTgQK1ZVVWldv3792fr16y8D+c9AhgMEECPIy1DDRIDYAojdzMzMWNXV1UG2/v/y5Qvzw4cPP587d24/kH8Gar/uwoULQ+/cufNFXFyciZmZ+UVmZuZKoFmvAQII5kJOIDbi4uKK2Llz53EbG5vP6GGWn5+vMWnSpJtA5jcg5v327Rtnc3PzfSD79+rVq2WBNBtIHUAAwQzkAWKzBQsWnIUZFhISovXmzZsfkpKSDD09PY8kJCR+QtWCguGvrKwsz7Rp07Q4ODh+srCwgILiH0gSIIBgBrICsUBoaCgorBiANgqvXbtWDMg8AcQf9+7d+x0o9xbI/gJV/3fVqlUvmJiY/gIdcaWhoYETahEDQADBDPwNxO9h3gNpBiq6f/HiRbWjR4+yvnr16grQNbeh6kCWsxkYGIhClT8yNDQUgyYhBoAAYoIKfgXi06mpqUowQ+vr6x+uW7fu0suXL8+uWbOGS0BAwB7kC6jXvqmoqLDIyclxzZo1S4udnR2WtBgAAggWyyCXSgOxZUxMjGpWVtY7S0vLr8iRsnnzZl4/P7/DQCYoYtSA2DApKUkVGNNPDh06dBrIvwU06xNAAMEM5AIKqAOxCjQsmHl5eXWdnJx4N2zYcB4prd4CUpfwJRuAAGJCimULoGYpbm5uZ5DBnz9/5tq4caPWkSNHeJEc+g0aTFzfv3/nACabjzk5OW8FBQVloLmHASCAYJECUiTg7+//HJiQTzY2NsrfvXv3n7m5+T5YMgJGEkjDS2gY/pKRkeHt7Ow0Bsb0v9+/fz+HxTJAAMG8DHKFLTC9aRUXF79BT9Qgw4CWHAAy70FdYgjEDgkJCTpWVlYMQBfeAaaMPqBZbwECCGYgMzQGQSleCehS0X///jEDvf9lxYoVoOTyAIjfANX+BqrlBrL1gLFf09vb+0FaWvoHMBctA6USUKQABBAjrPiCliKg7AOKIG5ougLlju9Ipc1foDJWqMWGhYWFtsBg4RISEnrg5uY2BWQgQACxIBkGMkQKijmRfPwXWuI8ASp7DQ1vEP4DDO8PwBzzDJheT0CLPQaAAEJOh0o8zAzeihwMiv+gGZ0B4sz/bIwM797/YTh1/wfDIWj5qAfMmtFnzpz5ICIiwqKoqPgjKChoOtCs5wABhJyXpUCGzddgOIethJ71jEFi1nNwgQrKz8zv37//097eDop15qVLl0pAzWAACCAWhEMYOJFdduELA++b3wxsTIwMfzmYGH6xMDG8gYYpKAg+cnJy/gB6VwuYZFiA7E+wvAwQQCy46ozexwzG17+BYx6UVE4B8Vmo68CRFR0dDQo3UAHBBUwJ4lCLGAACCNnAv4zQxAkCxbIMZ0EuBIYb98EPDFo3voGTzjOogVzArGf969cvNmC2+wssHD7BDAQIIBakmHwPDPy3MAMNeBhgpfbbVEkGhqQbDJaXvjI8BPJB4jz79u37DcwlP+fPn38NuTwECCBkA1+8+8Nwtusxg+STHwwcP/8z8EuwMXA1KjBcBSlwEmRgBhrID/U2O7QMBIEHxsbGkrAwBAggmIGgNMT64AfDWyB+By0EQMVZlC0/wwsXQYa38hzgCGGBWv5ZU1OT4c+fP8yLFi1SA3r5Haw8BAggmIGg5KBpJ8BgeOYTg8S3f2DN/OxMDNwgw0AKnv0EJ+avsITu7u6+EZqzQEHwHFqaMwAEEAtShS/pLcTwrU+Z4QwsyQANOwIL06tfGV5BqwmQWoGKigoLYJnJvWPHjhstLS169vb2M0DqAAIIVh6CXHT/9ndIawEUITCXgUDrQwbGbe8YjkJdAzZQVVVV/t69e8LAgtUYaNgxWKQABBByacMHzfTK9gIMYkBZpj//GT4c+8gAKm1AsfseqPYPtHTXAtaEacBqlgHoyq+srKw3XV1dFwHlvwEEECNyYwmp3cIJjbUf0DbLP7RGEg+0bcMCjQxQzH8BWQgQQIzktr5wAYAAYmKgMgAIMAAp8Fx3osz1lgAAAABJRU5ErkJggg==" width="20" height="32" alt="S5" \/><\/a>' +
+ '<\/div><\/form>';
+ }
+ if (controlVis == 'hidden') {
+ var hidden = document.getElementById('navLinks');
+ } else {
+ var hidden = document.getElementById('jumplist');
+ }
+ addClass(hidden,'hideme');
+}
+
+function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
+ if (!s5mode && !isOp) return false;
+ var hScreen = screen.width; var vScreen = screen.height;
+ var vWindow = window.outerHeight; var hWindow = window.outerWidth;
+ if (isOp && s5mode && defaultView=='slideshow' && ((hScreen != hWindow) || (vScreen != vWindow))) {
+ toggle();
+ return false;
+ }
+ if (isOp && !s5mode && ((hScreen != hWindow) || (vScreen != vWindow))) return false;
+ if (isOp && !s5mode && (hScreen == hWindow) && (vScreen == vWindow)) toggle();
+ var vScale = 48; // both yield 16 (the usual browser default) at 1024x768
+ var hScale = 64; // perhaps should auto-calculate based on theme's declared value?
+ if (window.innerHeight) {
+ var vSize = window.innerHeight;
+ var hSize = window.innerWidth;
+ } else if (document.documentElement.clientHeight) {
+ var vSize = document.documentElement.clientHeight;
+ var hSize = document.documentElement.clientWidth;
+ } else if (document.body.clientHeight) {
+ var vSize = document.body.clientHeight;
+ var hSize = document.body.clientWidth;
+ } else {
+ var vSize = 700; // assuming 1024x768, minus chrome and such equals 8:5
+ var hSize = 1024; // these do not account for kiosk mode or Opera Show
+ }
+ var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
+ extendImgSizes(newSize); // scalable images extension
+ extendCanSizes(newSize); // scalable canvas extension
+ extendObjSizes(newSize); // scalable object extension
+ fontSize(newSize,"px");
+ if(!isS2 || firstTime==0) {
+ generateCanvas(); // dynamic canvas extension
+ }
+ if (isGe) { // hack to counter incremental reflow bugs
+ var obj = document.getElementsByTagName('body')[0];
+ obj.style.visibility = 'hidden';
+ obj.style.display = 'none';
+ obj.style.display = 'block';
+ obj.style.visibility = 'visible';
+ changeOpac(100,'slide' + snum);
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("fixReflow()",10);
+ }else {
+ setListPos(); // invisible select extension
+ }
+}
+
+function fixReflow() {
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("finishReflow()",10);
+}
+function finishReflow() {
+ setListPos(); // invisible select extension
+}
+
+function fontSize(val,fmt) {
+ var value = val + fmt;
+ if (!(s5ss = document.getElementById('s5ss'))) {
+ if (!document.createStyleSheet) {
+ document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
+ s5ss.setAttribute('media','screen, projection');
+ s5ss.setAttribute('id','s5ss');
+ } else {
+ document.createStyleSheet();
+ document.s5ss = document.styleSheets[document.styleSheets.length - 1];
+ }
+ }
+ if (!(document.s5ss && document.s5ss.addRule)) {
+ while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
+ s5ss.appendChild(document.createTextNode('html {font-size: ' + value + ' !important;}'));
+ } else {
+ document.s5ss.addRule('html','font-size: ' + value + ' !important;');
+ }
+}
+
+function windowChange() {
+ fontScale();
+}
+
+function notOperaFix() {
+ slideCSS = document.getElementById('slideProj').href;
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ slides.setAttribute('media','screen');
+ outline.disabled = true;
+ if (isGe) {
+ slides.setAttribute('href','null'); // Gecko fix
+ slides.setAttribute('href',slideCSS); // Gecko fix
+ }
+ if ((isIE && notIE7) && document.styleSheets && document.styleSheets[0]) {
+ document.styleSheets[0].addRule('img', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('div', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('.slide', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ }
+}
+
+function getIncrementals(obj) {
+ var incrementals = new Array();
+ if (!obj)
+ return incrementals;
+ var children = obj.childNodes;
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ if (hasClass(child, 'incremental')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'incremental');
+ for (var j = 0; j < child.childNodes.length; j++) {
+ if (child.childNodes[j].nodeType == 1) {
+ addClass(child.childNodes[j], 'incremental');
+ }
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ removeClass(child,'incremental');
+ }
+ }
+ if (hasClass(child, 'show-first')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'show-first');
+ if (child.childNodes[isGe].nodeType == 1) {
+ removeClass(child.childNodes[isGe], 'incremental');
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ }
+ }
+ incrementals = incrementals.concat(getIncrementals(child));
+ }
+ return incrementals;
+}
+
+function createIncrementals() {
+ var incrementals = new Array();
+ for (var i = 0; i < smax; i++) {
+ incrementals[i] = getIncrementals(document.getElementById('slide'+i));
+ }
+ return incrementals;
+}
+
+function trap(e) {
+ if (!e) {
+ e = event;
+ e.which = e.keyCode;
+ }
+ try {
+ modifierKey = e.ctrlKey || e.altKey || e.metaKey;
+ }
+ catch(e) {
+ modifierKey = false;
+ }
+ return modifierKey || e.which == 0;
+}
+
+// notes extension
+function noteLabel() { // Gives notes id's to match parent slides
+ var notes = GetElementsWithClassName('div','notes');
+ for (var i = 0; i < notes.length; i++) {
+ var note = notes[i];
+ var id = 'note' + note.parentNode.id.substring(5);
+ note.setAttribute('id',id);
+ }
+ resetElapsedSlide();
+ resetRemainingTime();
+ window.setInterval('updateElaspedTime()', 1000);
+}
+
+function createNotesWindow() { // creates a window for our notes
+ if (!s5NotesWindow || s5NotesWindow.closed) { // Create the window if it doesn't exist
+ s5NotesWindowLoaded = false;
+ // Note: Safari has a tendency to ignore window options preferring to default to the settings of the parent window, grr.
+ s5NotesWindow = window.open(s5Path+'ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0');
+ }
+ if (s5NotesWindowLoaded) { // Load the current note if the Note HTML has loaded
+ loadNote();
+ } else { // Keep trying...
+ window.setTimeout('createNotesWindow()', 50);
+ }
+}
+
+function loadNote() {
+// Loads a note into the note window
+ var notes = nextNotes = '<em class="disclaimer">There are no notes for this slide.</em>';
+ if (document.getElementById('note' + snum)) {
+ notes = document.getElementById('note' + snum).innerHTML;
+ }
+ if (document.getElementById('note' + (snum + 1))) {
+ nextNotes = document.getElementById('note' + (snum + 1)).innerHTML;
+ }
+
+ var jl = document.getElementById('jumplist');
+ var slideTitle = jl.options[jl.selectedIndex].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex) ? ' (' + jl.selectedIndex + '/' + (smax - 1) + ')' : '');
+ if (incrementals[snum].length > 0) {
+ slideTitle += ' <small>[' + incpos + '/' + incrementals[snum].length + ']</small>';
+ }
+ if (jl.selectedIndex < smax - 1) {
+ var nextTitle = jl.options[jl.selectedIndex + 1].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex + 1) ? ' (' + (jl.selectedIndex + 1) + '/' + (smax - 1) + ')' : '');
+ } else {
+ var nextTitle = '[end of slide show]';
+ }
+
+ if (s5NotesWindow && !s5NotesWindow.closed && s5NotesWindow.document) {
+ s5NotesWindow.document.getElementById('slide').innerHTML = slideTitle;
+ s5NotesWindow.document.getElementById('notes').innerHTML = notes;
+ s5NotesWindow.document.getElementById('next').innerHTML = nextTitle;
+ s5NotesWindow.document.getElementById('nextnotes').innerHTML = nextNotes;
+ }
+ resetElapsedSlide();
+}
+
+function minimizeTimer(id) {
+ var obj = s5NotesWindow.document.getElementById(id);
+ if (hasClass(obj,'collapsed')) {
+ removeClass(obj,'collapsed');
+ } else {
+ addClass(obj,'collapsed');
+ }
+}
+
+function resetElapsedTime() {
+ presentationStart = new Date();
+ slideStart = new Date();
+ updateElaspedTime();
+}
+
+function resetElapsedSlide() {
+ if (snum != previousSlide) {
+ slideStart = new Date();
+ previousSlide = snum;
+ updateElaspedTime();
+ }
+}
+
+function updateElaspedTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var now = new Date();
+ var ep = s5NotesWindow.document.getElementById('elapsed-presentation');
+ var es = s5NotesWindow.document.getElementById('elapsed-slide');
+ ep.innerHTML = formatTime(now.valueOf() - presentationStart.valueOf());
+ es.innerHTML = formatTime(now.valueOf() - slideStart.valueOf());
+}
+
+function resetRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var startField = s5NotesWindow.document.getElementById('startFrom');
+ startFrom = readTime(startField.value);
+ countdown.remaining = startFrom * 60000; // convert to msecs
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var timeLeft = formatTime(countdown.remaining);
+ tl.innerHTML = timeLeft;
+}
+
+function updateRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var now = new Date();
+ if (countdown.state == 'run') {
+ countdown.remaining = countdown.end - now;
+ }
+ tl.style.color = '';
+ tl.style.backgroundColor = '';
+ if (countdown.remaining >= 0) {
+ var timeLeft = formatTime(countdown.remaining);
+ removeClass(tl,'overtime');
+ if (countdown.remaining < 300000) {
+ tl.style.color = 'rgb(' + (255-Math.round(countdown.remaining/2000)) + ',0,0)';
+ tl.style.backgroundColor = 'rgb(255,255,' + (Math.round(countdown.remaining/2000)) + ')';
+ }
+ } else {
+ var timeLeft = '-' + formatTime(-countdown.remaining);
+ addClass(tl,'overtime');
+ }
+ tl.innerHTML = timeLeft;
+}
+
+function toggleRemainingTime() {
+ if (countdown.state == 'pause') countdown.state = 'run'; else countdown.state = 'pause';
+ if (countdown.state == 'pause') {
+ window.clearInterval(countdown.timer);
+ }
+ if (countdown.state == 'run') {
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ countdown.timer = window.setInterval('updateRemainingTime()', 1000);
+ }
+}
+
+function alterRemainingTime(amt) {
+ var change = amt * 60000; // convert to msecs
+ countdown.end += change;
+ countdown.remaining += change;
+ updateRemainingTime();
+}
+
+function formatTime(msecs) {
+ var time = new Date(msecs);
+
+ var hrs = time.getUTCHours() + ((time.getUTCDate() -1) * 24); // I doubt anyone will spend more than 24 hours on a presentation or single slide but just in case...
+ hrs = (hrs < 10) ? '0'+hrs : hrs;
+ if (hrs == 'NaN' || isNaN(hrs)) hrs = '--';
+
+ var min = time.getUTCMinutes();
+ min = (min < 10) ? '0'+min : min;
+ if (min == 'NaN' || isNaN(min)) min = '--';
+
+ var sec = time.getUTCSeconds();
+ sec = (sec < 10) ? '0'+sec : sec;
+ if (sec == 'NaN' || isNaN(sec)) sec = '--';
+
+ return hrs + ':' + min + ':' + sec;
+}
+
+function readTime(val) {
+ var sregex = /:/;
+ var matches = sregex.exec(val);
+ if (matches == null) {
+ return val;
+ } else {
+ var times = val.split(':');
+ var hours = parseInt(times[0]);
+ var mins = parseInt(times[1]);
+ var total = (hours * 60) + mins;
+ return total;
+ }
+}
+// notes extension
+
+// startup process
+function createSlideShow() {
+ defaultCheck();
+ if(!isIE) createDetector(); // (degrade IE) scalable images extension
+ if(opac!=0 || isIE) { // &&!isIE (degrade IE)
+ tranSitions = false;
+ fadeModus = false;
+ }
+ if(tranSitions && document.getElementById && document.createElement){
+ createProgress();
+ var nop=document.getElementById('StartupControl');
+ nop.onload = dumpProgress;
+ }else {
+ startup();
+ showAll();
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+ }
+}
+
+function defaultCheck() {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'defaultView') {
+ defaultView = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'controlVis') {
+ controlVis = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'tranSitions') {
+ tranSitions = (allMetas[i].content == "true") ? true : false;
+ fadeModus = (tranSitions == true) ? true : false;
+ }
+ if (allMetas[i].name == 'fadeDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ fadeDuration = Math.max(200,Math.min(tmp,2000));
+ }
+ if (allMetas[i].name == 'incrDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ incrDuration = Math.max(50,Math.min(tmp,500));
+ }
+ if (allMetas[i].name == 'autoMatic') {
+ autoMatic = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playLoop') {
+ playLoop = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playDelay') {
+ var tmp = parseInt(allMetas[i].content);
+ playDelay = Math.max(5,Math.min(tmp,90))*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ }
+ if (allMetas[i].name == 'audioSupport') {
+ audioSupport = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'audioVolume') {
+ var tmp = parseInt(allMetas[i].content);
+ audioVolume = Math.max(0,Math.min(tmp,100));
+ }
+ if (allMetas[i].name == 'audioError') {
+ audioError = (allMetas[i].content == "true") ? true : false;
+ }
+ }
+}
+
+function createProgress() {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "StartupProgress";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=100)";
+ }else {
+ pg.style.opacity = 1.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/progress.gif)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+
+ var im = document.createElement('img');
+ im.id = "StartupControl";
+ im.src = s5Path+"ui/graphic_support/blank.gif?" + new Date().valueOf();
+ document.getElementsByTagName("body")[0].appendChild(im);
+}
+
+function startup() {
+ createControls(); // hallvord
+ slideLabel();
+ incrementals = createIncrementals();
+ noteLabel(); // [SI:060104] must follow slideLabel()
+ loadNote();
+ fixLinks();
+ externalLinks();
+ fontScale();
+ if (!isOp) {
+ if(isIE) {
+ document.getElementById('lst').style.backgroundImage = 'none';
+ document.getElementById('del').style.backgroundImage = 'none';
+ }else {
+ document.getElementById('audio').style.backgroundImage = 'none';
+ }
+ notOperaFix();
+ }else if(isOp) {
+ var obj = document.getElementById('exit');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('exit').style.opacity = 0.5;
+ obj = document.getElementById('toggle');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('toggle').style.opacity = 0.5;
+ document.getElementById('jumplist').style.visibility = 'hidden';
+ document.getElementById('list').style.visibility = 'hidden';
+ document.getElementById('lst').style.opacity = 0.5;
+ obj = document.getElementById('audio');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('audio').style.opacity = 0.5;
+ document.getElementById('volumelist').style.visibility = 'hidden';
+ document.getElementById('volume').style.visibility = 'hidden';
+ document.getElementById('vol').style.opacity = 0.5;
+ document.getElementById('delaylist').style.visibility = 'hidden';
+ document.getElementById('delay').style.visibility = 'hidden';
+ document.getElementById('del').style.opacity = 0.5;
+ }
+ slideJump();
+ if (defaultView == 'outline') toggle();
+ document.onkeyup = keys;
+ document.onkeypress = trap;
+ document.onclick = clicker;
+}
+
+function preloadImgages() {
+ var temp = '';
+ var objects = document.getElementsByTagName('img');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].src != '') {
+ temp = new Image();
+ temp.src = objects[i].src;
+ }
+ }
+}
+
+function showAll() {
+ var obj1 = GetElementsWithClassName('div','presentation')[0];
+ if(!obj1) var obj1 = GetElementsWithClassName('ol','presentation')[0];
+ var obj2 = GetElementsWithClassName('div','layout')[0];
+ if(!obj1){}else {obj1.style.display = 'block'};
+ if(!obj2){}else {obj2.style.display = 'block'};
+}
+
+function dumpProgress() {
+ document.body.removeChild(document.getElementById('StartupControl'));
+ startup();
+ preloadImgages();
+ showAll();
+ createSoundManagerScript();
+ shiftOpacity('StartupProgress',1000);
+ window.setTimeout("removeProgress()",1000);
+}
+
+function removeProgress() {
+ document.body.removeChild(document.getElementById('StartupProgress'));
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+}
+function panelSetup() {
+ if(playPause) {
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ if(playLoop) {
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ if(audioSupport && !isIE && !isOp) {
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ }
+ if(fadeModus && !isIE) {
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ if(autoMatic) {
+ var obj = document.getElementById('auto'); changeClass(obj,'ison');
+ startPlay();
+ }
+ if(audioVolume && !isIE && !isOp) {
+ var idx = 0;
+ if(audioVolume >= 95 && audioVolume <= 100) {idx = 0;}
+ else if(audioVolume >= 85 && audioVolume < 95) {idx = 1;}
+ else if(audioVolume >= 75 && audioVolume < 85) {idx = 2;}
+ else if(audioVolume >= 65 && audioVolume < 75) {idx = 3;}
+ else if(audioVolume >= 55 && audioVolume < 65) {idx = 4;}
+ else if(audioVolume >= 45 && audioVolume < 55) {idx = 5;}
+ else if(audioVolume >= 35 && audioVolume < 45) {idx = 6;}
+ else if(audioVolume >= 25 && audioVolume < 35) {idx = 7;}
+ else if(audioVolume >= 15 && audioVolume < 25) {idx = 8;}
+ else if(audioVolume >= 5 && audioVolume < 15) {idx = 9;}
+ else {idx = 10;}
+ document.getElementById('volumelist').selectedIndex = idx;
+ }
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+}
+// startup process
+
+// shutdown process
+function byby() {
+ stopPlay();
+ if(tranSitions && fadeModus && s5mode && !isOp) {
+ fadeoutSound(curSoundID,true); // audio support
+ var pg = document.createElement('div');
+ pg.id = "GoodBy";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=0)";
+ }else {
+ pg.style.opacity = 0.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/finish.gif)";
+ document.getElementsByTagName("body")[0].appendChild(pg);
+ shiftOpacity('GoodBy',1000);
+ window.setTimeout("history.back()",1000);
+ }else {
+ stopSound(curSoundID);
+ history.back();
+ }
+}
+// shutdown process
+
+// scalable images extension
+function createDetector() {
+ var em = document.createElement('div');
+ em.id='EMSizeControl'; em.style.position="absolute"; em.style.left="-999px";
+ em.style.width="1em"; em.style.height="1em"; em.style.opacity=0.0;
+ document.getElementsByTagName("body")[0].appendChild(em);
+ var nop=document.getElementById('EMSizeControl');
+ if(!nop||findPosX(nop)!=-999) {}else {
+ opac=document.getElementById('EMSizeControl').style.opacity;
+ empx=document.getElementById('EMSizeControl').offsetHeight;
+ document.body.removeChild(document.getElementById('EMSizeControl'));
+ var objects = document.getElementsByTagName('img');
+ var j = 0; var i = 0; var k = 0; var d; var obj;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ images[j] = objects[i];
+ ++j;
+ }
+ }
+ var objects = document.getElementsByTagName('canvas'); j = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ canvas[objects[i].id] = objects[i];
+ if(j==0) {
+ if(objects[i].getContext) {
+ canvasSupport = true;
+ }
+ ++j;
+ }
+ }
+ }
+ if(canvasSupport!=true) {
+ for (d in canvas) {
+ try {
+ canvas[d].setAttribute("width",1);
+ canvas[d].setAttribute("height",1);
+ } catch (e) {
+ }
+ }
+ }
+ var objects = document.getElementsByTagName('table');
+ j = 0; k = 0; l = 0; var w; var h; var tmp; var cnt;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^piechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ piecharts[j] = objects[i];
+ em = piecharts[j].getAttribute("summary");
+ if(em != "") em = "," + em;
+ piecharts[j].setAttribute("summary", w + "," + h + em);
+ ++j;
+ }
+ }
+ }
+ if(objects[i].className.match(/^barchart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ barcharts[k] = objects[i];
+ em = barcharts[k].getAttribute("summary");
+ if(em != "") em = "," + em;
+ barcharts[k].setAttribute("summary", w + "," + h + em);
+ ++k;
+ }
+ }
+ }
+ if(objects[i].className.match(/^linechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ linecharts[l] = objects[i];
+ em = linecharts[l].getAttribute("summary");
+ if(em != "") em = "," + em;
+ linecharts[l].setAttribute("summary", w + "," + h + em);
+ ++l;
+ }
+ }
+ }
+ }
+ objects = document.getElementsByTagName('object'); j = 0; i = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ medias[j] = objects[i]; ++j;
+ if(!isIE) {
+ if(objects[i].getAttributeNode("classid")) objects[i].removeAttributeNode(objects[i].getAttributeNode("classid"));
+ if(objects[i].getAttributeNode("codebase")) objects[i].removeAttributeNode(objects[i].getAttributeNode("codebase"));
+ }
+ }
+ }
+ }
+}
+function extendImgSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < images.length; i++) {
+ w=images[i].getAttribute("width",0);
+ h=images[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ images[i].style.width=Math.floor(w*q)+"px";
+ images[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+
+function extendCanSizes(f) {
+ if(empx>0 && canvasSupport) {
+ var q = (f/empx); var w = 0; var h = 0; var tmp = ""; var cnt; var obj;
+ for(var i=0; i < piecharts.length; i++) {
+ if(piecharts[i].getAttribute("summary")) {
+ tmp = piecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = piecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < barcharts.length; i++) {
+ if(barcharts[i].getAttribute("summary")) {
+ tmp = barcharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = barcharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < linecharts.length; i++) {
+ if(linecharts[i].getAttribute("summary")) {
+ tmp = linecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = linecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ }
+}
+function extendObjSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < medias.length; i++) {
+ w=medias[i].getAttribute("width",0);
+ h=medias[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ medias[i].style.width=Math.floor(w*q)+"px";
+ medias[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+function findPosX(obj) {
+ var posLeft = 0;
+ while (obj.offsetParent) {
+ posLeft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ return posLeft;
+}
+function findPosY(obj) {
+ var posTop = 0;
+ while (obj.offsetParent) {
+ posTop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ return posTop;
+}
+// scalable images extension
+
+// canvas chart extension
+function deg2rad(degrees) {
+ return Math.PI *degrees/180;
+}
+function rad2deg(radians) {
+ return 180.0 *radians/Math.PI;
+}
+function circle_point_x(radians, diameter) {
+ var x = Math.cos(radians)*(diameter/2);
+ return x;
+}
+function circle_point_y(radians, diameter) {
+ var y = Math.sin(radians)*(diameter/2);
+ return y;
+}
+function roundTo(val,dig) {
+ var num = val;
+ if (val > 8191 && val < 10485) {
+ val = val-5000;
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ num = num+5000;
+ } else {
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ }
+ return num;
+}
+function searchColor(value) {
+ for (var dat in colorNames) {
+ if(dat==value) return colorNames[dat];
+ }
+ return false;
+}
+function scanColor(value) {
+ if(value.match(/^#[0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var val1 = value.substr(1,1).toLowerCase();
+ var val2 = value.substr(2,1).toLowerCase();
+ var val3 = value.substr(3,1).toLowerCase();
+ value = '#' + val1 + val1 + val2 + val2 + val3 + val3;
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var tmp = searchColor(value.toLowerCase());
+ if(!tmp) {}else{value = tmp;}
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ value = '#000000';
+ }
+ return value.toLowerCase();
+}
+function hex2rgb(val,trans) {
+ if(val.length==7) {
+ var tp1 = Math.max(0,Math.min(parseInt(val.substr(1,2),16),255));
+ var tp2 = Math.max(0,Math.min(parseInt(val.substr(3,2),16),255));
+ var tp3 = Math.max(0,Math.min(parseInt(val.substr(5,2),16),255));
+ return 'rgba(' + tp1 + ',' + tp2 + ',' + tp3 + ',' + trans + ')';
+ }
+}
+function trim(str) {
+ return (str.replace(/\s+$/,"").replace(/^\s+/,""));
+}
+function roundedRect(ctx,x,y,width,height,radius){
+ ctx.beginPath();
+ ctx.moveTo(x,y+radius);
+ ctx.lineTo(x,y+height-radius);
+ ctx.quadraticCurveTo(x,y+height,x+radius,y+height);
+ ctx.lineTo(x+width-radius,y+height);
+ ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius);
+ ctx.lineTo(x+width,y+radius);
+ ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
+ ctx.lineTo(x+radius,y);
+ ctx.quadraticCurveTo(x,y,x,y+radius);
+ ctx.closePath();
+}
+function drawString(ctx, text, fc, tx, ty) {
+ var xp = 0; var c = "";
+ ctx.beginPath();
+ for (var i = 0; i < text.length; i++) {
+ c = text[i];
+ ctx.drawImage(font, signs[c].sx, signs[c].sy, signs[c].sw, signs[c].sh, tx+xp, ty, signs[c].sw*fc, signs[c].sh*fc);
+ xp += (signs[c].sw*fc);
+ }
+ ctx.closePath();
+}
+function strokeString(ctx, txt, col, fh, tx, ty) {
+ var fw = fh*0.666666; var lw = fh*0.125;
+ var ls = lw/2; var cr = lw; var xp = 0;
+ ctx.lineCap = "round"; ctx.lineJoin = "round"
+ ctx.lineWidth = lw; ctx.strokeStyle = col;
+ for (var i = 0; i < txt.length; i++) {
+ strokeSymbol(ctx, txt[i], ls, tx+xp, ty, fw, fh);
+ xp += (txt[i]!="."?fw+cr:(fw/2)+cr);
+ }
+}
+function strokeSymbol(ctx, symbol, fc, cx, cy, cw, ch) {
+ ctx.beginPath();
+ switch (symbol) {
+ case "0":
+ ctx.moveTo(cx+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+(cw/2),(cw/2)-fc,deg2rad(180),0, false);
+ ctx.arc(cx+(cw/2),(cy+ch)-(cw/2),(cw/2)-fc,0,deg2rad(180), false);
+ ctx.closePath();
+ break;
+ case "1":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.moveTo(cx+(cw*0.666666),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.666666),cy+fc);
+ ctx.lineTo(cx+(cw*0.25),cy+(ch*0.25));
+ break;
+ case "2":
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.8));
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+fc,cy+ch-fc);
+ ctx.arc(cx+(cw/2),cy+(cw*0.425),(cw*0.425)-fc,deg2rad(45),deg2rad(-180), true);
+ break;
+ case "3":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-90),deg2rad(180), false);
+ break;
+ case "4":
+ ctx.moveTo(cx+(cw*0.75),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.5),cy+ch-fc);
+ break;
+ case "5":
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-80),deg2rad(180), false);
+ break;
+ case "6":
+ ctx.moveTo(cx+fc,cy+ch-(cw*0.5)-fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-180),deg2rad(180), false);
+ ctx.bezierCurveTo(cx+fc,cy+fc,cx+fc,cy+fc,cx+(cw*0.9)-fc,cy+fc);
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ break;
+ case "7":
+ ctx.moveTo(cx+(cw*0.5),cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.25)-fc);
+ break;
+ case "8":
+ ctx.moveTo(cx+(cw*0.92)-fc,cy+(cw*0.59));
+ ctx.arc(cx+(cw/2),cy+(cw*0.45),(cw*0.45)-fc,deg2rad(25),deg2rad(-205), true);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-135),deg2rad(-45), true);
+ ctx.closePath();
+ ctx.moveTo(cx+(cw*0.79),cy+(ch*0.47));
+ ctx.lineTo(cx+(cw*0.21),cy+(ch*0.47));
+ break;
+ case "9":
+ ctx.moveTo(cx+cw-fc,cy+(cw*0.5));
+ ctx.arc(cx+(cw/2),cy+(cw*0.5),(cw*0.5)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.bezierCurveTo(cx+cw-fc,cy+ch-fc,cx+cw-fc,cy+ch-fc,cx+(cw*0.1)+fc,cy+ch-fc);
+ break;
+ case "%":
+ ctx.moveTo(cx+fc,cy+(ch*0.75));
+ ctx.lineTo(cx+cw-fc,cy+(ch*0.25));
+ ctx.moveTo(cx+(cw*0.505),cy+(cw*0.3));
+ ctx.arc(cx+(cw*0.3),cy+(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.moveTo(cx+(cw*0.905),cy+ch-(cw*0.3));
+ ctx.arc(cx+(cw*0.7),cy+ch-(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ break;
+ case ".":
+ ctx.moveTo(cx+(cw*0.25),cy+ch-fc-fc);
+ ctx.arc(cx+(cw*0.25),cy+ch-fc-fc,fc,deg2rad(0),deg2rad(360), false);
+ ctx.closePath();
+ break;
+ default:
+ break;
+ }
+ ctx.stroke();
+}
+function drawBar(ctx,x,y,width,height,color,value,textdiv){
+ var rw = width/2; var rh = rw/2;
+ height = Math.max(height,rw);
+ var dh = Math.max(height-(2*rh),0.1); var S2L;
+ var xx = rw/8; var yy = rh/4;
+ var yo = rh/2; y = y - yy;
+ if(canvas_noshadow <= 0 && canvas_noshade <= 0) {
+ ctx.save();
+ S2L = ctx.createRadialGradient(x+rw+rh,y+height-rw+yy+rh,0,x+rw,y+height-rw+yy,rw);
+ S2L.addColorStop(0, 'rgba(0,0,0,0.5)');
+ S2L.addColorStop(0.7, 'rgba(0,0,0,0.25)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = S2L;
+ ctx.scale(1,0.5);
+ ctx.translate(xx,y+height+yy);
+ if(isOp){
+ ctx.fillRect(x,y+yy+height-width,width,width);
+ }else {
+ ctx.arc(x+rw,y+yy+height-width,width,0,deg2rad(360), false);
+ ctx.fill();
+ }
+ ctx.restore();
+ }else if(canvas_noshadow <= 0 && canvas_noshade >= 1) {
+ ctx.fillStyle = 'rgba(0,0,0,0.2)';
+ ctx.fillRect(x+yo,y+rh+yo+yo,width,dh);
+ }
+
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x,y+(height/2),x+width,y+(height/2));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.75)');
+ S2L.addColorStop(0.2, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.3, 'rgba(0,0,0,0)');
+ S2L.addColorStop(0.5, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.35)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.1)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.strokeStyle = S2L;
+ ctx.stroke();
+ }else {
+ ctx.fillStyle = color;
+ ctx.fillRect(x,y+rh+yo,width,dh);
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var bw = width; var bh = bw/4;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ var c; var w;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,x+(width/2)-(bw/2),y,bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext <= 0) {
+ strokeString(ctx, value + "%","rgba(48,48,48,1)", th, x+(width/2)-(w/2), y+((bh-th)/2));
+ }else {
+ drawString(ctx, value + "%", tf, x+(width/2)-(w/2), y+((bh-th)/2.2));
+ }
+ }else {
+ var bh = bw/3; var th = roundTo(bh*0.75,0);
+ roundedRect(ctx,x,y,bw,bh,bh/4);
+ ctx.fill();
+ var obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = x + "px";
+ obj.style.top = y+((bh-th)/2.2) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+
+ }
+}
+function drawLine(ctx,x,y,width,height,dist,array,factor,color,fill){
+ if(fill <= 0){
+ var style = hex2rgb(color,0.5);
+ ctx.lineJoin = "miter";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height);
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.lineTo(x+width,y+height);
+ ctx.lineTo(x,y+height);
+ ctx.closePath();
+ ctx.fillStyle = style;
+ ctx.fill();
+ }
+ ctx.lineJoin = "round";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height-(array[0]*factor));
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.strokeStyle = color;
+ ctx.stroke();
+}
+function setDataURL(cid) {
+ if(cid.toDataURL) {
+ var obj = document.getElementById(cid.id + "_link");
+ if(obj) {
+ obj.setAttribute("title", "To Data URL");
+ obj.setAttribute("target", "_blank");
+ obj.setAttribute("href", cid.toDataURL());
+ }
+ }
+}
+function get_input(dataobj,canvasobj,linechart) {
+ var table = document.getElementById(dataobj);
+ var canvas = document.getElementById(canvasobj);
+ var row; var clm; var cnt = 0; var val = 0; var nme = ""; var col = "";
+ if(canvas.getContext) {
+ canvas_width = parseInt(canvas.style.width);
+ canvas_height = parseInt(canvas.style.height);
+ if(canvas_width >= 16 && canvas_height >= 16) {
+ var tmp = table.getAttribute("summary");
+ canvas_noshade = 0; canvas_noshadow = 0;
+ canvas_notext = 0; canvas_imgtext = 0;
+ canvas_htmltext = 0; canvas_nofill = 0;
+ if(tmp.search(/noshadow/) != -1) canvas_noshadow = 1;
+ if(tmp.search(/noshade/) != -1) canvas_noshade = 1;
+ if(tmp.search(/nofill/) != -1) canvas_nofill = 1;
+ if(tmp.search(/notext/) != -1) canvas_notext = 1;
+ if(tmp.search(/htmltext/) != -1) canvas_htmltext = 1;
+ if(tmp.search(/imgtext/) != -1) canvas_imgtext = 1;
+ if(table.getAttribute("bgcolor")) {
+ canvas_bgcolor = scanColor(table.getAttribute("bgcolor"));
+ }
+ ChartData = new Array(); colorSlice = new Array();
+ if(table.getElementsByTagName("tr")[0].getElementsByTagName("th")[0]) cnt = 1;
+ for(var r = cnt; r < table.getElementsByTagName("tr").length; r++) {
+ row = table.getElementsByTagName("tr")[r];
+ clm = row.getElementsByTagName("td").length;
+ if(row.getElementsByTagName("td")[0].getAttribute("bgcolor")) {
+ col = scanColor(row.getElementsByTagName("td")[0].getAttribute("bgcolor")); val = 0;
+ nme = trim(row.getElementsByTagName("td")[1].innerHTML.replace(/<[^>]+>/g,""));
+ if(!linechart) {
+ if(clm > 3) {
+ for(var z = 2; z < clm; z++) {
+ val += parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ }else {
+ val = parseFloat(row.getElementsByTagName("td")[2].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ if(!isNaN(val) && val > 0 && nme != '') {
+ colorSlice[r-cnt] = col; ChartData[nme] = Math.abs(val);
+ }else {
+ break;
+ }
+ }else {
+ val = 0; i = 0;
+ if(clm > 3 && nme != '') {
+ ChartData[r-cnt] = new Array();
+ colorSlice[r-cnt] = col;
+ for(var z = 2; z < clm; z++) {
+ val = Math.abs(parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,"")));
+ if(!isNaN(val) && val >= 0) {
+ ChartData[r-cnt][i] = val; i++;
+ }else {
+ ChartData[r-cnt][i] = 0; i++;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }
+ }
+}
+function setPieChart(canvasobj,textobj) {
+ var cd = (Math.min(canvas_width,canvas_height)/110)*100;
+ var cp = cd*0.1; var cr = cd/2;
+ var sr = cr*0.93; var cw = cd+cp; var ch = cw;
+ var cx = (cd/2)+(cp/2); var cy = cx; var ct = 0;
+ for (var data in ChartData) {
+ ct += ChartData[data];
+ }
+ var poc = ct/100;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ }
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,cw,ch);
+ }else {
+ ctx.clearRect(0,0,cw,ch);
+ }
+ if(canvas_noshadow <= 0) {
+ if(!isOp) {
+ ctx.beginPath();
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),cr,cx+(cr*0.1),cy+(cr*0.1),sr*0.9);
+ B2B.addColorStop(0, 'rgba(0,0,0,0)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.arc(cx+(cr*0.1),cy+(cr*0.1),cr,0,deg2rad(360), false);
+ ctx.closePath();
+ ctx.fillStyle = B2B;
+ ctx.fill();
+ }else {
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),0,cx+(cr*0.1),cy+(cr*0.1),cr);
+ B2B.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(0.87, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = B2B;
+ ctx.fillRect(0,0,cw,ch);
+ }
+ }
+ var val = 0; var deg = 0; var idx = 0; var data;
+ for (data in ChartData) {
+ val = ChartData[data]; sdeg = deg;
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ ctx.beginPath();
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr,sdeg,edeg, false);
+ ctx.lineTo(cx,cy);
+ ctx.closePath();
+ ctx.fillStyle = colorSlice[(idx++)];
+ ctx.fill();
+ }
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ var W2T = ctx.createLinearGradient(cp*2,cp*2,cx,cy);
+ W2T.addColorStop(0, 'rgba(255,255,255,0.8)');
+ W2T.addColorStop(1, 'rgba(255,255,255,0)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.fillStyle = W2T;
+ ctx.fill();
+ ctx.beginPath();
+ var T2B = ctx.createLinearGradient(cx,cy,cw-(cp*2),ch-(cp*2));
+ T2B.addColorStop(0, 'rgba(0,0,0,0)');
+ T2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.fillStyle = T2B;
+ ctx.fill();
+ ctx.beginPath();
+ var B2T = ctx.createLinearGradient(cx,cy,cw-(cp*1.9),ch-(cp*1.9));
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.strokeStyle = B2T;
+ ctx.stroke();
+ ctx.beginPath();
+ var T2W = ctx.createLinearGradient(cx,cy,(cp*1.9),(cp*1.9));
+ T2W.addColorStop(0, 'rgba(255,255,255,0)');
+ T2W.addColorStop(1, 'rgba(255,255,255,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.strokeStyle = T2W;
+ ctx.stroke();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var mpos = 0; var per = 0; var gx = 0;
+ var gy = 0; var tx = 0; var ty = 0;
+ var obj = ""; var w = 0; var c = 0;
+ var bw = cr*0.45; var bh = cr*0.125;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext >= 1) {
+ bw = (cr*0.365);
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ for (data in ChartData) {
+ val = ChartData[data];
+ sdeg = deg; mpos = deg+(((val/2)/ct)*deg2rad(360));
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ per = roundTo(val/poc,2);
+ gx = circle_point_x(mpos, cd);
+ gy = circle_point_y(mpos, cd);
+ tx = parseFloat((cx+(2*Math.floor(cx + gx)))/3);
+ ty = (cy+(2*Math.floor(cy + gy)))/3;
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext >= 1) {
+ drawString(ctx, per + "%", tf, tx-(w/2), ty-(th/1.8));
+ }else {
+ strokeString(ctx, per + "%","rgba(48,48,48,1)", th, tx-(w/2), ty-(th/2));
+ }
+ }else {
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = (tx-(bw/2)) + "px";
+ obj.style.top = ty-(th/1.8) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+ }
+ }
+ }
+}
+function setBarChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9; var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05; var ph = canvas_height*0.05;
+ var cm = 0; var ct = 0;
+ for (var data in ChartData) {
+ cm = Math.max(cm,ChartData[data]);
+ ct += ChartData[data];
+ }
+ var hf = ih/cm; var bs = colorSlice.length;
+ var bw = iw/(bs*1.1); var poc = ct/100;
+ var th = roundTo((bw/3)*0.75,0);
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ var obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ var cc = ""; var bh = 0; var idx = 0; var t = 0; per = 0;
+ for (var data in ChartData) {
+ per = roundTo(ChartData[data]/poc,2);
+ bh = ChartData[data]*hf;
+ drawBar(ctx,pw+(t*(bw*1.1)),ph+ih-bh,bw,bh,colorSlice[(idx++)],per,textdiv);
+ t++;
+ }
+ }
+}
+function setLineChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9;
+ var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05;
+ var ph = canvas_height*0.05;
+ var cm = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ cm = Math.max(cm,ChartData[i][j]);
+ }
+ }
+ var hf = (ih*0.95)/cm; var bw = iw;
+ var dw = iw/(ChartData[0].length-1)
+ var dh = ih/(ChartData[0].length-1)
+ var ps = Math.min(pw,ph); lw = ps/4;
+ var B2T;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_noshadow <= 0) {
+ B2T = ctx.createLinearGradient(pw+ps,ph+ih+1,pw+ps+ps,ph+ih+1);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps,ph+ih);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.lineTo(pw+ps+ps,ph+ih);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+ps+ps,ph+ih,pw+ps+ps,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps+ps,ph+ih);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+ps+iw,ph+ih+ps);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.closePath();
+ ctx.fill();
+ var B2T = ctx.createLinearGradient(pw+iw+1,ph+ps,pw+iw+1,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.35)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps);
+ ctx.lineTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+iw,ph+ps+ps,pw+iw+ps,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.35)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+iw+ps,ph+ih+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = lw/2;
+ ctx.strokeStyle = "rgba(255,255,255,0.25)";
+ if(canvas_nofill <= 0) {
+ ctx.fillStyle = "rgba(240,240,240,0.8)";
+ ctx.strokeStyle = "rgba(255,255,255,1)";
+ ctx.fillRect(pw,ph,iw,ih);
+ }
+ for (var i = 0; i < ChartData[0].length-1; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph);
+ ctx.lineTo(pw+(i*dw),ph+ih);
+ ctx.stroke();
+ }
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw,ph+(i*dh));
+ ctx.lineTo(pw+iw,ph+(i*dh));
+ ctx.stroke();
+ }
+ ctx.lineWidth = lw;
+ var cc = ""; var bh = 0; var idx = 0; var t = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ t = Math.max(t,ChartData[i][j]);
+ }
+ bh = t*hf; cc = colorSlice[(idx++)];
+ drawLine(ctx,pw,ph+ih-bh,bw,bh,dw,ChartData[i],hf,cc,canvas_nofill);
+ }
+ ctx.beginPath();
+ ctx.moveTo(pw,ph);
+ ctx.lineTo(pw,ph+ih);
+ ctx.lineTo(pw+iw+(lw/2),ph+ih);
+ ctx.strokeStyle = "rgba(48,48,48,1)";
+ ctx.stroke();
+ ctx.lineWidth = lw/2;
+ B2T = ctx.createLinearGradient(pw,ph+ih,pw,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,1)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.strokeStyle = B2T;
+ for (var i = 0; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph+ih);
+ ctx.lineTo(pw+(i*dw),ph+ih+ps);
+ ctx.stroke();
+ }
+ B2T = ctx.createLinearGradient(pw-ps,ph,pw,ph);
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,1)');
+ ctx.strokeStyle = B2T;
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw-ps,ph+(i*dh));
+ ctx.lineTo(pw,ph+(i*dh));
+ ctx.stroke();
+ }
+ }
+}
+function generateCanvas() {
+ if(canvasSupport) {
+ var canvasID; var tdataID; var textID;
+ var tmp; var dat; var i; var j;
+ for(i=0; i < piecharts.length; i++) {
+ tmp = piecharts[i].id.split("_");
+ tdataID = piecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setPieChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < barcharts.length; i++) {
+ tmp = barcharts[i].id.split("_");
+ tdataID = barcharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setBarChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < linecharts.length; i++) {
+ tmp = linecharts[i].id.split("_");
+ tdataID = linecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID,true);
+ if(colorSlice.length > 0) {
+ if(ChartData.length == colorSlice.length) {
+ setLineChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ }
+}
+// canvas chart extension
+
+// invisible select extension
+function setListPos(opt) {
+ if(!isIE) { //(degrade IE)
+ var ref = document.getElementById('list');
+ var x = findPosX(ref); var y = findPosY(ref);
+ var obj = document.getElementById('jumplist');
+ obj.style.position = 'fixed'; obj.style.left = x + 'px'; obj.style.top = y + 'px';
+ var vol = document.getElementById('volumelist');
+ ref = document.getElementById('volume');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ vol.style.position = 'fixed'; vol.style.left = x + 'px'; vol.style.top = y + 'px';
+ var del = document.getElementById('delaylist');
+ ref = document.getElementById('delay');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ del.style.position = 'fixed'; del.style.left = x + 'px'; del.style.top = y + 'px';
+ var pnl = document.getElementById('navLinks');
+ }
+ if(opt) {
+ if(isIE) {
+ //(degrade IE)
+ //pnl.style.filter = "alpha(opacity=80)";
+ }else {
+ obj.style.opacity = 0.0;
+ vol.style.opacity = 0.0;
+ del.style.opacity = 0.0;
+ pnl.style.opacity = 0.8;
+ }
+ }
+}
+// invisible select extension
+
+// transition extension
+function switchFade() {
+ if(tranSitions && s5mode && fadeModus) {
+ fadeModus = false;
+ playDelay = playDelay-(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'isoff');
+ }else if(tranSitions && s5mode && !fadeModus) {
+ fadeModus = true;
+ playDelay = playDelay+(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ currentSlide();
+}
+function opacity(ids, opacStart, opacEnd, millisec) {
+ var speed = Math.round(millisec / 100);
+ var timer = 0;
+ if(opacStart > opacEnd) {
+ for(var i = opacStart; i >= opacEnd; i--) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ } else if(opacStart < opacEnd) {
+ for(var i = opacStart; i <= opacEnd; i++) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ }
+}
+function changeOpac(opacity, ids) {
+ var obj = document.getElementById(ids);
+ if (isIE) {
+ obj.style.filter = "alpha(opacity=" + opacity + ")";
+ } else {
+ obj.style.opacity = (opacity / 100);
+ }
+}
+function shiftOpacity(ids, millisec) {
+ if(document.getElementById(ids).style.opacity != '') {
+ var currentOpac = document.getElementById(ids).style.opacity * 100;
+ } else {
+ var currentOpac = 0;
+ }
+ if(currentOpac == 0) {
+ opacity(ids, currentOpac, 100, millisec);
+ } else if(currentOpac > 0) {
+ opacity(ids, currentOpac, 0, millisec);
+ }
+}
+// transition extension
+
+// autoplay extension
+function autoPlay() {
+ if (s5mode && autoMatic && !playPause) {
+ if ((snum >= (smax-1)) && playLoop) {
+ goTo(0);
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }else if ((snum >= (smax-1)) && !playLoop) {
+ stopPlay();
+ }else {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ if (incrementals[snum].length >0) {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = parseInt(playDelay/(incrementals[snum].length+1));
+ remainDer = parseInt(playDelay-(incrDelay*incrementals[snum].length));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ } else {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = incrDuration;
+ remainDer = parseInt(playDelay-(incrementals[snum].length*incrDuration));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }
+ }
+}
+function autoPlayIncr() {
+ if (incpos < incrementals[snum].length) {
+ subgo(1);
+ autoRun = setTimeout('autoPlayIncr();',incrDelay);
+ }else {
+ autoRun = setTimeout('nop();',remainDer);
+ }
+}
+function nop() {
+ // no operation dummy
+}
+function togglePlay() {
+ if (autoRun && s5mode) {
+ stopPlay();
+ }else if (!autoRun && s5mode) {
+ startPlay();
+ }
+}
+function stopPlay() {
+ if (autoRun && s5mode) {
+ clearTimeout(autoRun); autoRun = null;
+ autoMatic = false; playPause = false; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'isoff');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ currentSlide();
+ }
+}
+function startPlay() {
+ if (!autoRun && s5mode) {
+ playPause = false; autoMatic = true; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'ison');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ autoRun = setTimeout('autoPlay();',playDelay);
+ currentSlide();
+ }
+}
+function pausePlay() {
+ if (s5mode && autoMatic) {
+ if (playPause) {
+ playPause = false; autoRun = setTimeout('autoPlay();',playDelay);
+ var obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ }else {
+ if (autoRun){
+ clearTimeout(autoRun); autoRun = null; playPause = true;
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+ }
+}
+function switchLoop() {
+ if(s5mode) {
+ if (playLoop) {
+ playLoop = false;
+ var obj = document.getElementById('loop'); changeClass(obj,'isoff');
+ }else {
+ playLoop = true;
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+}
+function setDelay() {
+ var val = document.getElementById('delaylist');
+ if(s5mode) {
+ var delay = Math.max(5,Math.min(parseInt(val.value),300));
+ playDelay = (fadeModus == true) ? ((delay*1000)+(2*fadeDuration)) : (delay*1000);
+ }
+}
+// autoplay extension
+
+// audio extension
+function createSoundManagerScript() {
+ if(typeof soundManager=="undefined") {
+ onerrorSM2();
+ }else {
+ var script=document.createElement('SCRIPT');
+ var tx=document.createTextNode("soundManager.createMovie();");
+ script.appendChild(tx);
+ document.getElementsByTagName("body")[0].appendChild(script);
+ }
+}
+//soundManager.onload = function() {
+function onloadSM2() {
+ if(!isIE) { //(degrade IE)
+ swfUnloaded = false;
+ preloadSounds();
+ }
+}
+//soundManager.onerror = function() {
+function onerrorSM2() {
+ if(typeof soundManager!="undefined") {
+ soundManager.destruct;
+ delete soundManager;
+ }
+ audioSupport = false; swfUnloaded = true;
+ if(audioError && !isIE && !isOp) {
+ var dv = document.createElement('div'); dv.id = "guru";
+ var d2=document.createElement('div'); dv.appendChild(d2);
+ var tx=document.createTextNode('Guru Meditation - SoundManager failed to load/initialize!');
+ d2.appendChild(tx); document.getElementById('slide0').appendChild(dv);
+ }
+}
+function audioSetup() {
+ if(sound[0]) {
+ playSound(0);
+ }else if(sound[bgSoundItem] && !sound[0]) {
+ playSound(bgSoundItem);
+ }
+}
+function fadeoutSound(ids, option) {
+ if(curSoundID >= 0 && !swfUnloaded) {
+ if(isNaN(ids)) {
+ if(ids == "bgSound") {
+ var cnum = parseInt(bgSoundItem);
+ }else {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && ids == sound[i]["id"]) {
+ var cnum = i;
+ break;
+ }
+ }
+ }
+ }else {
+ var cnum = ids;
+ ids = sound[cnum]["id"];
+ }
+ var vol = getMaxVolume(sound[cnum]["volume"]);
+ var millisec = fadeDuration;
+ var speed = Math.round(millisec / vol);
+ var timer = 0;
+ for(var i = vol; i > 0; i--) {
+ setTimeout("fadeout(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ if(option) setTimeout("stopSound('"+ids+"')",millisec);
+ }
+}
+function fadeout(volume, id) {
+ soundManager.setVolume(id,volume);
+}
+function stopSound(ids) {
+ var sid;
+ if(isNaN(ids)) {
+ sid = ids;
+ }else if(sound[ids]) {
+ sid = sound[ids]["id"];
+ }
+ if(sid!='' && curSoundID >= 0) {
+ soundManager.stop(sid);
+ curSoundID = -1;
+ }
+}
+function toggleSounds() {
+ if(audioSupport && !swfUnloaded) {
+ stopAllSounds();
+ }else if (!audioSupport && !swfUnloaded) {
+ allowSounds();
+ }
+}
+function allowSounds() {
+ if(!swfUnloaded) {
+ audioSupport = true;
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ currentSlide();
+ }
+}
+function stopAllSounds() {
+ if(curSoundID >= 0) {
+ stopSound(curSoundID);
+ }else {
+ soundManager.stopAll();
+ curSoundID = -1;
+ }
+ audioSupport = false;
+ var obj = document.getElementById('audio'); changeClass(obj,'isoff');
+ currentSlide();
+}
+function playSound(id) {
+ if(audioSupport && !swfUnloaded) {
+ var url, sid, vol, lps, cnum;
+ if(isNaN(id)) {
+ sid = id;
+ if(sid == "bgSound") {
+ cnum = parseInt(bgSoundItem);
+ }else {
+ cnum = getSoundID(id);
+ }
+ }else {
+ cnum = parseInt(id);
+ if(sound[cnum]) sid = sound[cnum]["id"];
+ }
+ if(sound[cnum] && sound[cnum]["url"]!='' && sid!=''){
+ url = sound[cnum]["url"];
+ vol = (sound[cnum]["volume"]!='')?getMaxVolume(sound[cnum]["volume"]):getMaxVolume(100);
+ lps = (sound[cnum]["loops"])?true:false;
+ if(lps) {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){soundManager.play(sid,{volume:getMaxVolume(sound[cnum]["volume"])});}});
+ }else {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){curSoundID=-1;}});
+ }
+ }
+ }
+}
+function getSoundID(str) {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && str == sound[i]["id"]) {
+ var id = i;
+ break;
+ }
+ }
+ return id;
+}
+function setVolume() {
+ var vol = document.getElementById('volumelist');
+ if(audioSupport && !swfUnloaded) {
+ audioVolume = parseInt(vol.value);
+ if(curSoundID >= 0) {
+ if(sound[curSoundID]) {
+ var sid = sound[curSoundID]["id"];
+ var vid = getMaxVolume(sound[curSoundID]["volume"]);
+ soundManager.setVolume(sid,vid);
+ }
+ }
+ }
+}
+function getMaxVolume(value) {
+ if(audioVolume>0) {var factor = audioVolume/100;}else {var factor = 0;}
+ return Math.max(0,Math.min(parseInt(value*factor),audioVolume));
+}
+function preloadSounds() {
+ var temp = ''; var parm = ''; var t = ''; var cl = '';
+ var objects = document.getElementsByTagName('object');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].type.toLowerCase() == 'audio/mp3' && objects[i].data != '') {
+ objects[i].width = 0; objects[i].height = 0;
+ if(objects[i].parentNode.tagName == 'DIV') {
+ cl = objects[i].parentNode.className.toLowerCase();
+ if(cl == 'presentation' || cl == 'slide') {
+ if(cl == 'presentation') {
+ t = parseInt(bgSoundItem);
+ }else {
+ t = parseInt(objects[i].parentNode.id.slice(5, objects[i].parentNode.id.length));
+ }
+ sound[t] = new Object();
+ if(t < bgSoundItem) {
+ sound[t]["id"] = objects[i].parentNode.id;
+ }else {
+ sound[t]["id"] = "bgSound";
+ }
+ sound[t]["url"] = objects[i].data;
+ sound[t]["volume"] = 100; sound[t]["loops"] = false;
+ if(objects[i].archive != '') {
+ parm = objects[i].archive.toLowerCase().split(',');
+ for (var j=0; j < parm.length; j++) {
+ if(parm[j] == 'loop') sound[t]["loops"] = true;
+ if(parm[j].search(/^volume/) != -1) {
+ var tmp = parm[j].split(':');
+ sound[t]["volume"] = parseInt(tmp[1]);
+ }
+ }
+ }
+ soundManager.createSound(sound[t]["id"],sound[t]["url"]);
+ }
+ }
+ }
+ }
+}
+// audio extension
+
+// help extension
+function createHelpReq() {
+ if(!document.getElementById("HelpReq")) {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "HelpReq";
+ if (pg.addEventListener) {
+ pg.addEventListener("onclick",dumpHelpReq,false);
+ } else if (pg.attachEvent) {
+ pg.attachEvent("onclick",dumpHelpReq);
+ }
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=90)";
+ } else {
+ pg.style.opacity = 0.9;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(64,64,64)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/help.jpg)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+ if(document.getElementById("HelpReq")) {
+ helpmode = true;
+ }
+ }
+}
+function dumpHelpReq() {
+ if(document.getElementById("HelpReq")) {
+ document.body.removeChild(document.getElementById('HelpReq'));
+ helpmode = false;
+ }
+}
+// help extension
+
+//DEBUG
+function ConsoleLog(value) {
+ if(window.console) {
+ window.console.log(value);
+ }
+}
+//DEBUG
+
+document.write('<style type="text/css" media="screen" id="blockStyle">.presentation, .layout {display: none; }</style>');
+
+if(!isIE && !isOp) {
+ document.write('<script type="text/javascript" src="'+s5Path+'ui/audio_support/soundmanager2.js"></script>');
+ if(typeof soundManager!="undefined") {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'audioDebug') {
+ var audioDebug = (allMetas[i].content == "true") ? true : false;
+ soundManager.defaultOptions.debugMode = audioDebug;
+ }
+ }
+ }
+}
+
+window.onload = createSlideShow;
+window.onresize = function(){setTimeout('windowChange()',5);} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/toggle_link.png
new file mode 100644
index 000000000..4588e2514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/toggle_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/toggle_over.png
new file mode 100644
index 000000000..400f613b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/toggle_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/volume_link.png
new file mode 100644
index 000000000..f362acd1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/volume_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/wrap.css
new file mode 100644
index 000000000..a37315552
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/wrap.css
@@ -0,0 +1,410 @@
+/********************************************************************
+Screen and Print Styles for the Wrap Plugin
+********************************************************************/
+
+/* tables in columns and boxes should span the whole width */
+.wrap_column table,
+.wrap_left table, .wrap_right table, .wrap_center table,
+.wrap_box table,
+.wrap_info table, .wrap_important table, .wrap_alert table, .wrap_tip table, .wrap_help table, .wrap_todo table, .wrap_download table {
+ width: 100%;
+}
+/* emulate a headline */
+.wrap_column em strong,
+.wrap_left em strong, .wrap_right em strong, .wrap_center em strong,
+.wrap_box em strong,
+.wrap_info em strong, .wrap_important em strong, .wrap_alert em strong, .wrap_tip em strong, .wrap_help em strong, .wrap_todo em strong, .wrap_download em strong {
+ font-size: 130%;
+ font-weight: bold;
+ font-style: normal;
+ display: block;
+}
+/* emulate a bigger headline with a bottom border */
+.wrap_column em strong em.u,
+.wrap_left em strong em.u, .wrap_right em strong em.u, .wrap_center em strong em.u,
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ font-size: 115%;
+ border-bottom: 1px solid __border__;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+}
+/* different bigger headline for safety notes */
+.wrap_danger em strong em.u, .wrap_warning em strong em.u, .wrap_caution em strong em.u, .wrap_notice em strong em.u, .wrap_safety em strong em.u {
+ font-size: 115%;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+ text-transform: uppercase;
+ border-bottom-width: 0;
+}
+/* change border colour of emulated headlines inside boxes to something more neutral
+ (to match all the different background colours) */
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ border-bottom-color: #999;
+}
+
+
+/* columns
+********************************************************************/
+
+.wrap_left,
+.wrap_column {
+ float: left;
+ margin-right: 1.5em;
+}
+.wrap_right {
+ float: right;
+ margin-left: 1.5em;
+}
+.wrap_center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+/*
+.wrap_column,
+.wrap_left,
+.wrap_right {
+ overflow: hidden;
+}
+*/
+.wrap_container {
+ margin-right: -1.5em;
+}
+
+
+/* alignments
+********************************************************************/
+
+.wrap_leftalign {
+ text-align: left;
+}
+.wrap_centeralign {
+ text-align: center;
+}
+.wrap_rightalign {
+ text-align: right;
+}
+.wrap_justify {
+ text-align: justify;
+}
+
+
+/* box
+********************************************************************/
+
+/* see styles for boxes and notes with icons in style.css */
+
+/*____________ rounded corners ____________*/
+/* (only for modern browsers) */
+
+div.wrap_round {
+ border-radius: 20px;
+ -moz-border-radius: 20px;
+ -webkit-border-radius: 20px;
+ -khtml-border-radius: 20px;
+}
+span.wrap_round {
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -khtml-border-radius: 2px;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_lo {
+ color: __text_neu__;
+ font-size: 85%;
+}
+div.wrap_em {
+ color: #c00;
+ font-weight: bold;
+}
+
+/* see styles for highlighted text in style.css */
+
+
+/* typography
+********************************************************************/
+
+/*____________ fonts ____________*/
+
+div.wrap_sansserif {
+ font-family: Verdana,Tahoma,Geneva,"DejaVu Sans","Bitstream Vera Sans","Liberation Sans", Arial,Helvetica,FreeSans,"Liberation Sans","Nimbus Sans L", sans-serif;
+}
+div.wrap_serif {
+ font-family: Georgia,Garamond,"Palatino Linotype","Book Antiqua",Palatino,Palladio,"URW Palladio L","Liberation Serif",Didot,Gentium,"Bitstream Charter","Century Schoolbook L", "Times New Roman",Times,"Nimbus Roman No9 L","FreeSerif", serif;
+}
+div.wrap_monospace {
+ font-family: Courier,"Courier New",FreeMono,"Nimbus Mono L","Liberation Mono", "Lucida Console",Monaco,"DejaVu Sans Mono","Bitstream Vera Sans Mono", monospace;
+}
+
+/*____________ font size ____________*/
+
+div.wrap_bigger {
+ font-size: 125%;
+}
+div.wrap_muchbigger {
+ font-size: 200%;
+}
+div.wrap_smaller {
+ font-size: 75%;
+}
+
+/*____________ font colours ____________*/
+
+div.wrap_fgred {
+ color: #900;
+}
+div.wrap_fggreen {
+ color: #090;
+}
+div.wrap_fgblue {
+ color: #009;
+}
+div.wrap_fgcyan {
+ color: #099;
+}
+div.wrap_fgviolet {
+ color: #909;
+}
+div.wrap_fgyellow {
+ color: #990;
+}
+div.wrap_fggrey {
+ color: #666;
+}
+div.wrap_fgblack {
+ color: #000;
+}
+
+/* see styles for background colours and white font colour in style.css */
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ indent ____________*/
+
+div.wrap_indent {
+ padding-left: 1.5em;
+}
+
+/*____________ outdent ____________*/
+
+div.wrap_outdent {
+ margin-left: -1.5em;
+}
+
+/*____________ word wrapping in pre ____________*/
+
+divdiv.wrap_prewrap pre {
+ white-space: pre-wrap;
+ word-wrap: break-word;/* for IE < 8 */
+ /* white-space: -moz-pre-wrap; for FF < 3 */
+}
+
+/*____________ spoiler ____________*/
+
+divdiv.wrap_spoiler {
+ margin-bottom: 1.5em;
+}
+/* see rest of spoiler styles in style.css */
+
+/*____________ clear float ____________*/
+
+div.wrap_clear {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ font-size: 1px;
+ visibility: hidden;
+ overflow: hidden;
+}
+
+/*____________ hide ____________*/
+
+div.wrap_hide {
+ display: none;
+}
+
+
+/* STYLE.CSS */
+
+/* box
+********************************************************************/
+
+.wrap_box {
+ background: __background_alt__;
+ color: __text__;
+/*
+ overflow: hidden;
+*/
+}
+div.wrap_box,
+div.wrap_danger, div.wrap_warning, div.wrap_caution, div.wrap_notice, div.wrap_safety {
+ padding: 1em 1em .5em;
+ margin-bottom: 1.5em;
+}
+span.wrap_box,
+span.wrap_danger, span.wrap_warning, span.wrap_caution, span.wrap_notice, span.wrap_safety {
+ padding: 0 .3em;
+}
+
+/*____________ notes with icons ____________*/
+
+/* general styles for all note divs */
+div.wrap_info, div.wrap_important, div.wrap_alert, div.wrap_tip, div.wrap_help, div.wrap_todo, div.wrap_download {
+ padding: 1em 1em .5em 70px;
+ margin-bottom: 1.5em;
+ min-height: 68px;
+ background-position: 10px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html div.wrap_info, * html div.wrap_important, * html div.wrap_alert, * html div.wrap_tip, * html div.wrap_help, * html div.wrap_todo, * html div.wrap_download {
+ height: 68px;
+}
+/* general styles for all note spans */
+span.wrap_info, span.wrap_important, span.wrap_alert, span.wrap_tip, span.wrap_help, span.wrap_todo, span.wrap_download {
+ padding: 0 2px 0 20px;
+ min-height: 20px;
+ background-position: 2px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html span.wrap_info, * html span.wrap_important, * html span.wrap_alert, * html span.wrap_tip, * html span.wrap_help, * html span.wrap_todo, * html span.wrap_download {
+ height: 20px;
+}
+
+/*____________ info ____________*/
+.wrap_info { background-color: #d1d7df; }
+div.wrap_info { background-image: url(../../../wrap/images/note/48/info.png); }
+span.wrap_info { background-image: url(../../../wrap/images/note/16/info.png); }
+
+/*____________ important ____________*/
+.wrap_important { background-color: #ffd39f; }
+div.wrap_important { background-image: url(../../../wrap/images/note/48/important.png); }
+span.wrap_important { background-image: url(../../../wrap/images/note/16/important.png); }
+
+/*____________ alert ____________*/
+.wrap_alert { background-color: #ffbcaf; }
+div.wrap_alert { background-image: url(../../../wrap/images/note/48/alert.png); }
+span.wrap_alert { background-image: url(../../../wrap/images/note/16/alert.png); }
+
+/*____________ tip ____________*/
+.wrap_tip { background-color: #fff79f; }
+div.wrap_tip { background-image: url(../../../wrap/images/note/48/tip.png); }
+span.wrap_tip { background-image: url(../../../wrap/images/note/16/tip.png); }
+
+/*____________ help ____________*/
+.wrap_help { background-color: #dcc2ef; }
+div.wrap_help { background-image: url(../../../wrap/images/note/48/help.png); }
+span.wrap_help { background-image: url(../../../wrap/images/note/16/help.png); }
+
+/*____________ todo ____________*/
+.wrap_todo { background-color: #c2efdd; }
+div.wrap_todo { background-image: url(../../../wrap/images/note/48/todo.png); }
+span.wrap_todo { background-image: url(../../../wrap/images/note/16/todo.png); }
+
+/*____________ download ____________*/
+.wrap_download { background-color: #d6efc2; }
+div.wrap_download { background-image: url(../../../wrap/images/note/48/download.png); }
+span.wrap_download { background-image: url(../../../wrap/images/note/16/download.png); }
+
+
+/*____________ safety notes ____________*/
+
+.wrap_danger {
+ background-color: #c00;
+ color: #fff;
+}
+.wrap_warning {
+ background-color: #f60;
+ color: #000;
+}
+.wrap_caution {
+ background-color: #ff0;
+ color: #000;
+}
+.wrap_notice {
+ background-color: #06f;
+ color: #fff;
+}
+.wrap_safety {
+ background-color: #090;
+ color: #fff;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_hi {
+ background-color: #ff9;
+}
+
+/* typography
+********************************************************************/
+
+/*____________ font colours ____________*/
+
+div.wrap_fgwhite {
+ color: #fff;
+}
+
+/*____________ background colours ____________*/
+
+div.wrap_bgred {
+ background-color: #fcc;
+}
+div.wrap_bggreen {
+ background-color: #cfc;
+}
+div.wrap_bgblue {
+ background-color: #ccf;
+}
+div.wrap_bgcyan {
+ background-color: #9ff;
+}
+div.wrap_bgviolet {
+ background-color: #f9f;
+}
+div.wrap_bgyellow {
+ background-color: #ff9;
+}
+div.wrap_bggrey {
+ background-color: #ccc;
+}
+div.wrap_bgwhite {
+ background-color: #fff;
+}
+div.wrap_bgblack {
+ background-color: #000;
+}
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ spoiler ____________*/
+
+div.wrap_spoiler {
+ background-color: __background__ !important;
+ color: __background__ !important;
+ border: 1px dotted red;
+}
+
+/*____________ only print ____________*/
+
+div.wrap_onlyprint {
+ display: none;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/zero_link.png
new file mode 100644
index 000000000..5610884d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/zero_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/zero_over.png
new file mode 100644
index 000000000..3a14a577e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/zero_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/audio_link.png
new file mode 100644
index 000000000..daa740c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/audio_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/audio_on.png
new file mode 100644
index 000000000..cd590aae9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/audio_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/audio_over.png
new file mode 100644
index 000000000..cf537a008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/audio_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/auto_link.png
new file mode 100644
index 000000000..1c2ca4817
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/auto_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/auto_on.png
new file mode 100644
index 000000000..4b0c923b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/auto_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/auto_over.png
new file mode 100644
index 000000000..dbea88975
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/auto_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/bg-slide.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/bg-slide.jpg
new file mode 100755
index 000000000..6da2a0090
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/bg-slide.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/delay_link.png
new file mode 100644
index 000000000..c4d99cd57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/delay_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/exit_link.png
new file mode 100644
index 000000000..1bfd38790
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/exit_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/exit_over.png
new file mode 100644
index 000000000..0fdd1c605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/exit_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/fade_link.png
new file mode 100644
index 000000000..482e4d53e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/fade_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/fade_on.png
new file mode 100644
index 000000000..e12561fb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/fade_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/fade_over.png
new file mode 100644
index 000000000..fb8943c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/fade_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/framing.css
new file mode 100644
index 000000000..24b5fb0e4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/framing.css
@@ -0,0 +1,23 @@
+/* The following styles size and place the slide components.
+ Edit them if you want to change the overall slide layout.
+ The commented lines can be uncommented (and modified, if necessary)
+ to help you with the rearrangement process. */
+
+div#header, div#footer, .slide {width: 100%; top: 0; left: 0;}
+div#header {top: 0; left: 0; z-index: 1;}
+div#footer {top: auto; bottom: 0; width: 100%; z-index: 5;}
+.slide {top: 0; width: 80%; padding: 1em 9% 2em 9%; z-index: 2; height: 100%;}
+
+div#controls {bottom: 1.5em; left: 0; width: 100%; text-align: center; z-index: 1000;}
+div#controls form {margin: 0; padding: 0;}
+
+#currentSlide {position: absolute; left: 0; bottom: 0.5em; z-index: 10;
+ width: 100%; text-align: center;}
+html>body #currentSlide {position: fixed;}
+
+/*
+div#header {background: #FCC;}
+div#footer {background: #CCF;}
+div#controls {background: #BBD;}
+div#currentSlide {background: #FFC;}
+*/
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/iepngfix.htc
new file mode 100755
index 000000000..bba2db756
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/iepngfix.htc
@@ -0,0 +1,42 @@
+<public:component>
+<public:attach event="onpropertychange" onevent="doFix()" />
+
+<script>
+
+// IE5.5+ PNG Alpha Fix v1.0 by Angus Turnbull http://www.twinhelix.com
+// Free usage permitted as long as this notice remains intact.
+
+// This must be a path to a blank image. That's all the configuration you need here.
+var blankImg = 'ui/default/blank.gif';
+
+var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
+
+function filt(s, m) {
+ if (filters[f]) {
+ filters[f].enabled = s ? true : false;
+ if (s) with (filters[f]) { src = s; sizingMethod = m }
+ } else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")';
+}
+
+function doFix() {
+ if ((parseFloat(navigator.userAgent.match(/MSIE (\S+)/)[1]) < 5.5) ||
+ (event && !/(background|src)/.test(event.propertyName))) return;
+
+ if (tagName == 'IMG') {
+ if ((/\.png$/i).test(src)) {
+ filt(src, 'image'); // was 'scale'
+ src = blankImg;
+ } else if (src.indexOf(blankImg) < 0) filt();
+ } else if (style.backgroundImage) {
+ if (style.backgroundImage.match(/^url[("']+(.*\.png)[)"']+$/i)) {
+ var s = RegExp.$1;
+ style.backgroundImage = '';
+ filt(s, 'crop');
+ } else filt();
+ }
+}
+
+doFix();
+
+</script>
+</public:component> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/last_link.png
new file mode 100644
index 000000000..4f158d35d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/last_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/last_over.png
new file mode 100644
index 000000000..a7b629995
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/last_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/list_link.png
new file mode 100644
index 000000000..7e299bb50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/list_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/loop_link.png
new file mode 100644
index 000000000..41e12cb15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/loop_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/loop_on.png
new file mode 100644
index 000000000..2ffcacae1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/loop_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/loop_over.png
new file mode 100644
index 000000000..9fe420153
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/loop_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/next_link.png
new file mode 100644
index 000000000..2b9f44c4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/next_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/next_over.png
new file mode 100644
index 000000000..25788124d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/next_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/notes_link.png
new file mode 100644
index 000000000..bb4a8ae37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/notes_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/notes_over.png
new file mode 100644
index 000000000..c6bfe69fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/notes_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/opera.css
new file mode 100755
index 000000000..9e9d2a3c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/opera.css
@@ -0,0 +1,7 @@
+/* DO NOT CHANGE THESE unless you really want to break Opera Show */
+.slide {
+ visibility: visible !important;
+ position: static !important;
+ page-break-before: always;
+}
+#slide0 {page-break-before: avoid;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/outline.css
new file mode 100755
index 000000000..62db519ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/outline.css
@@ -0,0 +1,15 @@
+/* don't change this unless you want the layout stuff to show up in the outline view! */
+
+.layout div, #footer *, #controlForm * {display: none;}
+#footer, #controls, #controlForm, #navLinks, #toggle {
+ display: block; visibility: visible; margin: 0; padding: 0;}
+#toggle {float: right; padding: 0.5em;}
+html>body #toggle {position: fixed; top: 0; right: 0;}
+
+/* making the outline look pretty-ish */
+
+#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
+#slide0 h1 {padding-top: 1.5em;}
+.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em;
+ border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
+#toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pause_link.png
new file mode 100644
index 000000000..2561cb4a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pause_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pause_on.png
new file mode 100644
index 000000000..2fc9c4a4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pause_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pause_over.png
new file mode 100644
index 000000000..7a7c80ddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pause_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pretty.css
new file mode 100644
index 000000000..80fad55d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pretty.css
@@ -0,0 +1,130 @@
+/*
+ Theme: Drupal S5
+*/
+
+html {
+ height: 99%;
+}
+
+body {background: #E5F3FC url('bg-slide.jpg');
+ background-position: bottom left;
+ height: 100%;
+ color: #012C46; font: 32px Arial, sans-serif;}
+a {text-decoration: none; color: #336; border-bottom: 1px dotted;}
+h1, h2, h3, h4, h5, h6 {font-size: 1em; margin: 0;}
+sup {font-size: 0.75em; font-weight: normal;
+ vertical-align: 0.5em; line-height: 1px;}
+ul {margin-left: 1em; padding-left: 0;}
+li {margin-bottom: 0.66em;}
+li li {margin: 0.33em 0; font-size: smaller;}
+
+#header {background: transparent;
+ padding-bottom: 2em;}
+#footer {color: #BBB; border-top: 0px solid #333;}
+#header, #footer {font-size: 0.5em;}
+#footer h1, #footer h2 { padding: 0.5em 0.75em;
+ font-weight: normal;}
+#footer h1 {left: 0; font-size: 1em; letter-spacing: 10px;}
+#footer h2 {position: absolute; bottom: 10; right: 10;}
+
+#navList {margin-top: 3px;}
+
+.slide h1 {font-size: 1.3em; line-height: 1; letter-spacing: -1px;
+ margin: 0 -15% 2em 0; padding: 0.25em 15% 0.06125em 0;}
+
+div#controls {position: absolute; left: 0; bottom: 0; width: 100%; text-align: center; font: bold 1em Verdana, Arial, Helvetica, sans-serif;}
+html>body div#controls {background: transparent; position: fixed; padding: 0; top: auto; text-align: center;}
+#controls #sheet {display: none;}
+#controls #controlForm {height: 32px; width: 100%; text-align: center; vertical-align: middle;}
+#controls #navLinks {border-top: 1px solid #999; overflow: hidden; padding: 0; margin: 0; height: 32px; width: 100%; background-color: #808080; text-align: center; vertical-align: middle; white-space: nowrap;}
+#controls #navLinks ul {margin: 0 auto; padding: 0; height: 32px; width: 500px; white-space: nowrap; text-align: center;}
+#controls #navLinks ul li {list-style: none; display: inline; margin: 0; padding: 0; float: left; height: 32px; width: 32px; text-align: center; background-color: transparent;}
+#controls #navLinks ul li.vr {list-style: none; display: inline; margin: 0px 2px; padding: 0; float: left; height: 32px; width: 1px; text-align: center; background-color: #606060;}
+#controls #navLinks ul li a {margin: 0; padding: 0; float: left; height: 32px; width: 32px; background-color: transparent;}
+
+#controls #navLinks ul li#exit {background: url(exit_link.png) no-repeat top left;}
+#controls #navLinks ul li#exit a:hover {background: url(exit_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#toggle {background: url(toggle_link.png) no-repeat top left;}
+#controls #navLinks ul li#toggle a:hover {background: url(toggle_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#show-notes {background: url(notes_link.png) no-repeat top left;}
+#controls #navLinks ul li#show-notes a:hover {background: url(notes_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#zero {background: url(zero_link.png) no-repeat top left;}
+#controls #navLinks ul li#zero a:hover {background: url(zero_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#prev {background: url(prev_link.png) no-repeat top left;}
+#controls #navLinks ul li#prev a:hover {background: url(prev_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#next {background: url(next_link.png) no-repeat top left;}
+#controls #navLinks ul li#next a:hover {background: url(next_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#last {background: url(last_link.png) no-repeat top left;}
+#controls #navLinks ul li#last a:hover {background: url(last_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#lst {background: url(list_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#fade a.isoff {background: url(fade_link.png) no-repeat top left;}
+#controls #navLinks ul li#fade a.ison {background: url(fade_on.png) no-repeat top right;}
+#controls #navLinks ul li#fade a:hover {background: url(fade_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#audio {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.isoff {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.ison {background: url(audio_on.png) no-repeat top right;}
+#controls #navLinks ul li#audio a:hover {background: url(audio_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#vol {background: url(volume_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#auto a.isoff {background: url(auto_link.png) no-repeat top left;}
+#controls #navLinks ul li#auto a.ison {background: url(auto_on.png) no-repeat top right;}
+#controls #navLinks ul li#auto a:hover {background: url(auto_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#pause a.isoff {background: url(pause_link.png) no-repeat top left;}
+#controls #navLinks ul li#pause a.ison {background: url(pause_on.png) no-repeat top right;}
+#controls #navLinks ul li#pause a:hover {background: url(pause_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#loop a.isoff {background: url(loop_link.png) no-repeat top left;}
+#controls #navLinks ul li#loop a.ison {background: url(loop_on.png) no-repeat top right;}
+#controls #navLinks ul li#loop a:hover {background: url(loop_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#del {background: url(delay_link.png) no-repeat top left;}
+
+#jumplist, #volumelist, #delaylist {padding: 0; margin: 0; width: 32px; height: 32px; cursor: n-resize;}
+
+#currentSlide {white-space: nowrap; text-align: center; margin-bottom: -0.5em; font-size: 0.5em; background-color: transparent; color: #999;}
+
+#guru {position: absolute; visibility: visible; left: 0px; top: 0px; padding: 4px; width: 99%; height: auto; text-align: center; background-color: black; z-index: 10;}
+#guru div {border: solid 3px red; padding: 4px; font-family: monospace; font-size: 60%; width: auto; height: auto; color: red; text-align: center;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 0; padding: 0; font: bold 2em Verdana, Arial, Helvetica, sans-serif; font-variant: small-caps; text-shadow: 0.1em 0.1em 0.1em #666; white-space: normal; color: #222; background-color: transparent;}
+#slide0 h2 {font: bold italic 1em Arial, Helvetica, sans-serif; margin: 0.25em;}
+#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.external {border-bottom: 1px dotted gray;}
+html>body .external {border-bottom: none;}
+.external:after {content: " \274F"; font-size: smaller; color: #999;}
+
+.incremental, .incremental *, .incremental *:after {color: #ccc; visibility: visible;}
+img.incremental, canvas.incremental {visibility: hidden;}
+.slide .current {color: #B02;}
+
+/* diagnostics
+li:after {content: " [" attr(class) "]"; color: #F88;}
+*/
+
+table.piechart, table.barchart, table.linechart { border-spacing: 0.3em 0.15em; }
+table.piechart tr th, table.barchart tr th, table.linechart tr th { white-space: nowrap; }
+table.piechart tr td, table.barchart tr td, table.linechart tr td { vertical-align: top; white-space: nowrap; }
+table.piechart tr td.col, table.barchart tr td.col, table.linechart tr td.col { border-bottom: 1px solid #555; border-right: 1px solid #555; }
+table.fs90 tr td, table.fs90 tr th, div.fs90, pre.fs90, p.fs90 ,ul.fs90 {font-size: 0.9em; }
+table.fs75 tr td, table.fs75 tr th, div.fs75, pre.fs75, p.fs75 ,ul.fs75 {font-size: 0.75em; }
+table.fs66 tr td, table.fs66 tr th, div.fs66, pre.fs66, p.fs66 ,ul.fs66 {font-size: 0.66em; }
+table.fs50 tr td, table.fs50 tr th, div.fs50, pre.fs50, p.fs50 ,ul.fs50 {font-size: 0.5em; }
+
+#soundmanager-debug {position:fixed; top:0px; right:0px; width:30em; height:20em; overflow:auto; border:1px solid red; padding:1em; margin:2em; font-family:"sans serif"; font-size: 12px;color: black; background-color:#f6f6f6; z-index: 100;}
+#soundmanager-debug code {font-size: 11px;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/prev_link.png
new file mode 100644
index 000000000..c31d21350
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/prev_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/prev_over.png
new file mode 100644
index 000000000..6fef4fa52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/prev_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/print.css
new file mode 100755
index 000000000..220083260
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/print.css
@@ -0,0 +1 @@
+/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul { page-break-inside: avoid; visibility: visible !important; } h1 { page-break-after: avoid; } html { width:100%; overflow:hidden; } body { font-size: 12pt; background: white; width:100%; } * { color: black; } #slide0 h1 { font-size: 200%; border: none; margin: 0.5em 0 0.25em; } #slide0 h3 { margin: 0; padding: 0; } #slide0 h4 { margin: 0 0 0.5em; padding: 0; } #slide0 { margin-bottom: 3em; } h1 { border-top: 2pt solid gray; border-bottom: 1px dotted silver; padding:0.2em 0 0.3em 0; } .extra { background: transparent !important; } div.extra, pre.extra, .example { font-size: 10pt; color: #333; } ul.extra a { font-weight: bold; } p.example { display: none; } #header { display: none; } #footer h1 { margin: 0; border-bottom: 1px solid; color: gray; font-style: italic; } #footer h2, #controls { display: none; } div.handout { display:block; border-top: 2px dotted #ccc; background:url(pics/back-handout-print.png) top right no-repeat #fff; min-height:6em; padding-right:6em; margin-bottom:1em; } .slide { display:block; background:url(pics/back-slide-print.png) top right no-repeat #fff; min-height:6em; margin-bottom:1em; } table { display:block; /* display:none; */ font-size:90%; overflow:hidden; margin-top:1em; margin-bottom:1em; } pre , code { margin:0; font-size:1pt; overflow:auto; } img { max-width:100% !important; } /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .layout, .layout * { display: none !important; } \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/s5-core.css
new file mode 100644
index 000000000..3b0428edb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/s5-core.css
@@ -0,0 +1,9 @@
+/* Do not edit or override these styles! The system will likely break if you do. */
+
+div#header, div#footer, div#controls, div.slide {position: absolute;}
+html>body div#header, html>body div#footer,
+ html>body div#controls, html>body div.slide {position: fixed;}
+.handout {display: none;}
+.layout {display: block;}
+div.slide, .hideme, .incremental {visibility: hidden;}
+#slide0 {visibility: visible;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/slides.css
new file mode 100644
index 000000000..0786d7dbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/slides.css
@@ -0,0 +1,3 @@
+@import url(s5-core.css); /* required to make the slide show run at all */
+@import url(framing.css); /* sets basic placement and size of slide components */
+@import url(pretty.css); /* stuff that makes the slides look better than blah */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/slides.js
new file mode 100644
index 000000000..510a04c0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/slides.js
@@ -0,0 +1,2812 @@
+// S5 1.3beta7 (18-Apr-2007) advanced version by C. Effenberger
+// Please see http://s5.netzgesta.de/ for more information
+// based on S5 v1.2a1 slides.js -- released into the Public Domain
+// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
+// about all the wonderful and talented contributors to this code!
+// audio extension: soundmanager2 is NOT Public Domain
+// Please see http://www.schillmania.com/projects/soundmanager2/ for information
+
+var undef;
+var slideCSS = '';
+var snum = 0;
+var smax = 1;
+var incpos = 0;
+var number = undef;
+var firstTime = 1;
+var s5mode = true;
+var helpmode = false;
+var defaultView = 'slideshow'; //outline
+var controlVis = 'visible';
+var s5Path = 'lib/plugins/s5reloaded/';
+
+// scalable images extension
+var empx = 0;
+var images = new Array();
+var canvas = new Array();
+var medias = new Array();
+var piecharts = new Array();
+var barcharts = new Array();
+var linecharts = new Array();
+// scalable images extension
+
+// transition extension
+var tranSitions = false;
+var fadeModus = false;
+var fadeDuration = 500;
+var incrDuration = 250;
+var opac = 1;
+var cid = '';
+var nid = '';
+var tid = '';
+var jl = '';
+// transition extension
+
+// autoplay extension
+var autoMatic = false;
+var playLoop = false;
+var playPause = false;
+var autoRun = false;
+var playDelay = 5000;
+var remainDer = 0;
+var incrDelay = 0;
+// autoplay extension
+
+// audio extension
+var sound = new Array();
+var audioSupport = false;
+var audioVolume = 100;
+var audioError = false;
+var swfUnloaded = true;
+var bgSoundItem = 9999;
+var curSoundID = -1;
+// audio extension
+
+// panel extension
+var imgWidth = 32;
+var imgHeight = 32;
+// panel extension
+
+// canvas chart extension
+var canvasSupport = false;
+var ChartData = new Array();
+var colorSlice = new Array();
+var font = document.createElement("img");
+font.setAttribute("src", s5Path+"ui/graphic_support/numeric.png");
+signs = {
+ '0': {sx: 0, sy: 0, sw: 48, sh: 64},
+ '1': {sx: 48, sy: 0, sw: 48, sh: 64},
+ '2': {sx: 96, sy: 0, sw: 48, sh: 64},
+ '3': {sx: 144, sy: 0, sw: 48, sh: 64},
+ '4': {sx: 192, sy: 0, sw: 48, sh: 64},
+ '5': {sx: 240, sy: 0, sw: 48, sh: 64},
+ '6': {sx: 288, sy: 0, sw: 48, sh: 64},
+ '7': {sx: 336, sy: 0, sw: 48, sh: 64},
+ '8': {sx: 384, sy: 0, sw: 48, sh: 64},
+ '9': {sx: 432, sy: 0, sw: 48, sh: 64},
+ '%': {sx: 480, sy: 0, sw: 48, sh: 64},
+ '.': {sx: 528, sy: 0, sw: 24, sh: 64}
+};
+var colorNames= new Array();
+colorNames["black"]="#000000"; colorNames["maroon"]="#800000";
+colorNames["green"]="#008000"; colorNames["olive"]="#808000";
+colorNames["navy"]="#000080"; colorNames["purple"]="#800080";
+colorNames["teal"]="#008080"; colorNames["gray"]="#808080";
+colorNames["silver"]="#C0C0C0"; colorNames["red"]="#FF0000";
+colorNames["lime"]="#00FF00"; colorNames["yellow"]="#FFFF00";
+colorNames["blue"]="#0000FF"; colorNames["fuchsia"]="#FF00FF";
+colorNames["aqua"]="#00FFFF"; colorNames["white"]="#FFFFFF";
+colorNames["aliceblue"]="#F0F8FF"; colorNames["antiquewhite"]="#FAEBD7";
+colorNames["aquamarine"]="#7FFFD4"; colorNames["azure"]="#F0FFFF";
+colorNames["beige"]="#F5F5DC"; colorNames["blueviolet"]="#8A2BE2";
+colorNames["brown"]="#A52A2A"; colorNames["burlywood"]="#DEB887";
+colorNames["cadetblue"]="#5F9EA0"; colorNames["chartreuse"]="#7FFF00";
+colorNames["chocolate"]="#D2691E"; colorNames["coral"]="#FF7F50";
+colorNames["cornflowerblue"]="#6495ED"; colorNames["cornsilk"]="#FFF8DC";
+colorNames["crimson"]="#DC143C"; colorNames["darkblue"]="#00008B";
+colorNames["darkcyan"]="#008B8B"; colorNames["darkgoldenrod"]="#B8860B";
+colorNames["darkgray"]="#A9A9A9"; colorNames["darkgreen"]="#006400";
+colorNames["darkkhaki"]="#BDB76B"; colorNames["darkmagenta"]="#8B008B";
+colorNames["darkolivegreen"]="#556B2F"; colorNames["darkorange"]="#FF8C00";
+colorNames["darkorchid"]="#9932CC"; colorNames["darkred"]="#8B0000";
+colorNames["darksalmon"]="#E9967A"; colorNames["darkseagreen"]="#8FBC8F";
+colorNames["darkslateblue"]="#483D8B"; colorNames["darkslategray"]="#2F4F4F";
+colorNames["darkturquoise"]="#00CED1"; colorNames["darkviolet"]="#9400D3";
+colorNames["deeppink"]="#FF1493"; colorNames["deepskyblue"]="#00BFFF";
+colorNames["dimgray"]="#696969"; colorNames["dodgerblue"]="#1E90FF";
+colorNames["firebrick"]="#B22222"; colorNames["floralwhite"]="#FFFAF0";
+colorNames["forestgreen"]="#228B22"; colorNames["gainsboro"]="#DCDCDC";
+colorNames["ghostwhite"]="#F8F8FF"; colorNames["gold"]="#FFD700";
+colorNames["goldenrod"]="#DAA520"; colorNames["greenyellow"]="#ADFF2F";
+colorNames["honeydew"]="#F0FFF0"; colorNames["hotpink"]="#FF69B4";
+colorNames["indianred"]="#CD5C5C"; colorNames["indigo"]="#4B0082";
+colorNames["ivory"]="#FFFFF0"; colorNames["khaki"]="#F0E68C";
+colorNames["lavender"]="#E6E6FA"; colorNames["lavenderblush"]="#FFF0F5";
+colorNames["lawngreen"]="#7CFC00"; colorNames["lemonchiffon"]="#FFFACD";
+colorNames["lightblue"]="#ADD8E6"; colorNames["lightcoral"]="#F08080";
+colorNames["lightcyan"]="#E0FFFF"; colorNames["lightgoldenrodyellow"]="#FAFAD2";
+colorNames["lightgreen"]="#90EE90"; colorNames["lightgrey"]="#D3D3D3";
+colorNames["lightpink"]="#FFB6C1"; colorNames["lightsalmon"]="#FFA07A";
+colorNames["lightseagreen"]="#20B2AA"; colorNames["lightskyblue"]="#87CEFA";
+colorNames["lightslategray"]="#778899"; colorNames["lightsteelblue"]="#B0C4DE";
+colorNames["lightyellow"]="#FFFFE0"; colorNames["limegreen"]="#32CD32";
+colorNames["linen"]="#FAF0E6"; colorNames["mediumaquamarine"]="#66CDAA";
+colorNames["mediumblue"]="#0000CD"; colorNames["mediumorchid"]="#BA55D3";
+colorNames["ediumpurple"]="#9370D"; colorNames["mediumseagreen"]="#3CB371";
+colorNames["mediumslateblue"]="#7B68EE"; colorNames["mediumspringgreen"]="#00FA9A";
+colorNames["mediumturquoise"]="#48D1CC"; colorNames["mediumvioletred"]="#C71585";
+colorNames["midnightblue"]="#191970"; colorNames["mintcream"]="#F5FFFA";
+colorNames["mistyrose"]="#FFE4E1"; colorNames["moccasin"]="#FFE4B5";
+colorNames["navajowhite"]="#FFDEAD"; colorNames["oldlace"]="#FDF5E6";
+colorNames["olivedrab"]="#6B8E23"; colorNames["orange"]="#FFA500";
+colorNames["orangered"]="#FF4500"; colorNames["orchid"]="#DA70D6";
+colorNames["palegoldenrod"]="#EEE8AA"; colorNames["palegreen"]="#98FB98";
+colorNames["paleturquoise"]="#AFEEEE"; colorNames["palevioletred"]="#DB7093";
+colorNames["papayawhip"]="#FFEFD5"; colorNames["peachpuff"]="#FFDAB9";
+colorNames["peru"]="#CD853F"; colorNames["pink"]="#FFC0CB";
+colorNames["plum"]="#DDA0DD"; colorNames["powderblue"]="#B0E0E6";
+colorNames["rosybrown"]="#BC8F8F"; colorNames["royalblue"]="#4169E1";
+colorNames["saddlebrown"]="#8B4513"; colorNames["salmon"]="#FA8072";
+colorNames["sandybrown"]="#F4A460"; colorNames["seagreen"]="#2E8B57";
+colorNames["seashell"]="#FFF5EE"; colorNames["sienna"]="#A0522D";
+colorNames["skyblue"]="#87CEEB"; colorNames["slateblue"]="#6A5ACD";
+colorNames["slategray"]="#708090"; colorNames["snow"]="#FFFAFA";
+colorNames["springgreen"]="#00FF7F"; colorNames["steelblue"]="#4682B4";
+colorNames["tan"]="#D2B48C"; colorNames["thistle"]="#D8BFD8";
+colorNames["tomato"]="#FF6347"; colorNames["turquoise"]="#40E0D0";
+colorNames["violet"]="#EE82EE"; colorNames["wheat"]="#F5DEB3";
+colorNames["whitesmoke"]="#F5F5F5"; colorNames["yellowgreen"]="#9ACD32";
+var canvas_bgcolor = "";
+var canvas_width = 200;
+var canvas_height = 200;
+var canvas_noshade = 0;
+var canvas_nofill = 0;
+var canvas_noshadow = 0;
+var canvas_htmltext = 0;
+var canvas_imgtext = 0;
+var canvas_notext = 0;
+// canvas chart extension
+
+var s5NotesWindow;
+var s5NotesWindowLoaded = false;
+var previousSlide = 0;
+var presentationStart = new Date();
+var slideStart = new Date();
+
+var countdown = {
+ timer: 0,
+ state: 'pause',
+ start: new Date(),
+ end: 0,
+ remaining: 0
+};
+
+var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
+if(isIE) var notIE7 = parseInt(navigator.appVersion) < 7 ? 1 : 0;
+var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
+var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
+var isS2 = navigator.userAgent.indexOf('Safari') >= 2 ? 1 : 0;
+
+function hasClass(object, className) {
+ if (!object.className) return false;
+ return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
+}
+
+function hasValue(object, value) {
+ if (!object) return false;
+ return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
+}
+
+function removeClass(object,className) {
+ if (!object || !hasClass(object,className)) return;
+ object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
+}
+
+function addClass(object,className) {
+ if (!object || hasClass(object, className)) return;
+ if (object.className) {
+ object.className += ' '+className;
+ } else {
+ object.className = className;
+ }
+}
+
+function changeClass(object,className) {
+ if (!object) return;
+ object.firstChild.className = className;
+}
+
+function GetElementsWithClassName(elementName,className) {
+ var allElements = document.getElementsByTagName(elementName);
+ var elemColl = new Array();
+ for (var i = 0; i< allElements.length; i++) {
+ if (hasClass(allElements[i], className)) {
+ elemColl[elemColl.length] = allElements[i];
+ }
+ }
+ return elemColl;
+}
+
+function isParentOrSelf(element, id) {
+ if (element == null || element.nodeName=='BODY') return false;
+ else if (element.id == id) return true;
+ else return isParentOrSelf(element.parentNode, id);
+}
+
+function nodeValue(node) {
+ var result = "";
+ if (node.nodeType == 1) {
+ var children = node.childNodes;
+ for (var i = 0; i < children.length; ++i) {
+ result += nodeValue(children[i]);
+ }
+ }
+ else if (node.nodeType == 3) {
+ result = node.nodeValue;
+ }
+ return(result);
+}
+
+function slideLabel() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var list = document.getElementById('jumplist');
+ smax = slideColl.length;
+ for (var n = 0; n < smax; n++) {
+ var obj = slideColl[n];
+ var did = 'slide' + n.toString();
+ obj.setAttribute('id',did);
+ var otext = '';
+ var menu = obj.firstChild;
+ if (!menu) continue; // to cope with empty slides
+ while (menu && menu.nodeType == 3) {
+ menu = menu.nextSibling;
+ }
+ if (!menu) continue; // to cope with slides with only text nodes
+ var menunodes = menu.childNodes;
+ for (var o = 0; o < menunodes.length; o++) {
+ otext += nodeValue(menunodes[o]);
+ }
+ list.options[list.length] = new Option(n + ' : ' + otext, n);
+ }
+}
+
+function currentSlide() {
+ var cs, at, fd, ss;
+ if (document.getElementById) {
+ cs = document.getElementById('currentSlide');
+ } else {
+ cs = document.currentSlide;
+ }
+ fd = fadeModus?"F":"&ndash;";
+ ss = audioSupport?"S":"&ndash;";
+ at = (autoMatic?(playPause?"||":(playLoop?"&gt;0":"&gt;|")):"&ndash;&ndash;");
+ cs.innerHTML = '<div id="plink" nowrap="nowrap">' +
+ '<span id="csFade">[' + fd + ss + ']<\/span>&nbsp;' +
+ '<span id="csHere"><strong>' + snum + '<\/strong><\/span>' +
+ '<span id="csSep">\/<\/span>' +
+ '<span id="csTotal">' + (smax-1) + '<\/span>&nbsp;' +
+ '<span id="csAuto">[' + at + ']<\/span>' +
+ '<\/div>';
+
+ if (snum == 0) {
+ cs.style.visibility = 'hidden';
+ } else {
+ cs.style.visibility = 'visible';
+ }
+}
+
+function go(step) {
+ if (document.getElementById('slideProj').disabled || step == 0) return;
+ jl = document.getElementById('jumplist');
+ cid = 'slide' + snum;
+ var ce = document.getElementById(cid);
+ if (incrementals[snum].length > 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ removeClass(incrementals[snum][i], 'current');
+ removeClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ if (step != 'j') {
+ snum += step;
+ lmax = smax - 1;
+ if (snum > lmax) snum = lmax;
+ if (snum < 0) snum = 0;
+ }else {
+ snum = parseInt(jl.value);
+ }
+ nid = 'slide' + snum;
+ var ne = document.getElementById(nid);
+ if (!ne) {
+ ne = document.getElementById('slide0');
+ nid = 'slide0';
+ snum = 0;
+ }
+ if (step < 0) {
+ incpos = incrementals[snum].length
+ }else {
+ incpos = 0;
+ }
+ if (incrementals[snum].length > 0 && incpos == 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ if (hasClass(incrementals[snum][i], 'current')) {
+ incpos = i + 1;
+ }else {
+ addClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ }
+ if (incrementals[snum].length > 0 && incpos > 0) {
+ addClass(incrementals[snum][incpos - 1], 'current');
+ }
+ var guru = document.getElementById('guru');
+ if(guru && snum==0) {
+ guru.style.visibility = 'visible';
+ }else if(guru && snum>0) {
+ guru.style.visibility = 'hidden';
+ }
+ if(tranSitions && s5mode && fadeModus) {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {fadeoutSound(curSoundID,true); } // audio support
+ }
+ changeOpac(0,nid);
+ changeOpac(100,cid);
+ ce.style.visibility = 'visible';
+ shiftOpacity(cid,fadeDuration);
+ window.setTimeout("changeSlides()",fadeDuration);
+ }else {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {stopSound(curSoundID); } // audio support
+ }
+ ce.style.visibility = 'hidden';
+ if (isOp) location.hash = nid;
+ ne.style.visibility = 'visible';
+ finishSlides();
+ }
+}
+
+function changeSlides() {
+ if(nid != cid) changeOpac(100,cid);
+ document.getElementById(cid).style.visibility = 'hidden';
+ document.getElementById(nid).style.visibility = 'visible';
+ if (isOp) location.hash = nid;
+ shiftOpacity(nid,fadeDuration);
+ window.setTimeout("finishSlides()",fadeDuration);
+}
+
+function finishSlides() {
+ jl.selectedIndex = snum;
+ currentSlide();
+ loadNote();
+ permaLink();
+ number = undef;
+ if(sound[getSoundID(nid)]) {
+ playSound(nid); // audio support
+ }else if(sound[bgSoundItem] && curSoundID != bgSoundItem) {
+ playSound(bgSoundItem); // audio support
+ }
+}
+
+function goTo(target) {
+ if (target >= smax || target == snum) return;
+ go(target - snum);
+}
+
+function subgo(step) {
+ if (step > 0) {
+ removeClass(incrementals[snum][incpos - 1],'current');
+ removeClass(incrementals[snum][incpos], 'incremental');
+ if(tranSitions && s5mode && fadeModus) {
+ if(!incrementals[snum][incpos].id) {
+ var tmp = new Date(); tid = "inc" + String(tmp.getTime());
+ incrementals[snum][incpos].id = tid;
+ }else {
+ tid = incrementals[snum][incpos].id;
+ }
+ if(typeof(incrementals[snum][incpos].src) != "undefined" || incrementals[snum][incpos].getContext) {
+ changeOpac(0,tid);
+ addClass(incrementals[snum][incpos],'current');
+ shiftOpacity(tid,incrDuration);
+ setTimeout("nextInc()",incrDuration);
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ } else {
+ incpos--;
+ removeClass(incrementals[snum][incpos],'current');
+ addClass(incrementals[snum][incpos], 'incremental');
+ addClass(incrementals[snum][incpos - 1],'current');
+ loadNote();
+ }
+}
+
+function nextInc() {
+ incpos++;
+ loadNote();
+}
+
+function toggle() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ var guru = document.getElementById('guru');
+ if (!slides.disabled) {
+ stopPlay();
+ if(audioSupport && !swfUnloaded) stopAllSounds();
+ slides.disabled = true;
+ outline.disabled = false;
+ s5mode = false;
+ fontSize(1,'em');
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'visible';
+ }
+ if(guru) guru.style.visibility = 'hidden';
+ } else {
+ slides.disabled = false;
+ outline.disabled = true;
+ s5mode = true;
+ fontScale();
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'hidden';
+ }
+ slideColl[snum].style.visibility = 'visible';
+ if(guru && snum==0) guru.style.visibility = 'visible';
+ }
+}
+
+function showHide(action) {
+ var obj = GetElementsWithClassName('*','hideme')[0];
+ switch (action) {
+ case 's':
+ obj.style.visibility = 'visible';
+ break;
+ case 'h':
+ obj.style.visibility = 'hidden';
+ break;
+ case 'k':
+ if (obj.style.visibility != 'visible') {
+ obj.style.visibility = 'visible';
+ } else {
+ obj.style.visibility = 'hidden';
+ }
+ break;
+ }
+}
+
+function keys(key) {
+ if (!key) {
+ key = event;
+ key.which = key.keyCode;
+ }
+ if (helpmode) {
+ dumpHelpReq();
+ return;
+ }
+ if (key.which == 84 && !isOp) {
+ toggle();
+ return;
+ }
+ if (s5mode) {
+ if (autoMatic) {
+ switch (key.which) {
+ case 70: // f/ading on/off
+ switchFade();
+ break;
+ case 83: // s/ound on/off
+ toggleSounds();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 65: // a/utoplay on/off
+ stopPlay();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 80: // p/ause
+ case 32: // spacebar
+ pausePlay();
+ break;
+ }
+ }else {
+ switch (key.which) {
+ case 8: // backspace = HELP
+ createHelpReq();
+ break;
+ case 10: // return
+ case 13: // enter
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ if(number != undef) {
+ goTo(number);
+ break;
+ }
+ case 32: // spacebar
+ case 34: // page down
+ case 39: // rightkey
+ case 40: // downkey
+ if(number != undef) {
+ go(number);
+ } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ break;
+ case 33: // page up
+ case 37: // leftkey
+ case 38: // upkey
+ if(number != undef) {
+ go(-1 * number);
+ } else if (!incrementals[snum] || incpos <= 0) {
+ go(-1);
+ } else {
+ subgo(-1);
+ }
+ break;
+ case 65: // a/utoplay
+ startPlay();
+ break;
+ case 72: // h
+ case 36: // home
+ goTo(0);
+ break;
+ case 69: // e
+ case 35: // end
+ goTo(smax-1);
+ break;
+ case 70: // f/ade transitions on/off
+ switchFade();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 83: // s/ound support on/off
+ toggleSounds();
+ break;
+ case 27: // escape
+ case 81: // q
+ if(!isOp) byby();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 78: // n
+ createNotesWindow();
+ break;
+ }
+ if (key.which < 48 || key.which > 57) {
+ number = undef;
+ } else {
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
+ }
+ }
+ }
+ return false;
+}
+
+function clicker(e) {
+ number = undef;
+ var target;
+ if (window.event) {
+ target = window.event.srcElement;
+ e = window.event;
+ } else {
+ target = e.target;
+ }
+ if (target.href != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
+ if (!helpmode) {
+ if (!e.which || e.which == 1) {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ }
+ } else {
+ dumpHelpReq();
+ }
+}
+
+function findSlide(hash) {
+ var target = null;
+ var slides = GetElementsWithClassName('*','slide');
+ for (var i = 0; i < slides.length; i++) {
+ var targetSlide = slides[i];
+ if ( (targetSlide.name && targetSlide.name == hash)
+ || (targetSlide.id && targetSlide.id == hash) ) {
+ target = targetSlide;
+ break;
+ }
+ }
+ while(target != null && target.nodeName != 'BODY') {
+ if (hasClass(target, 'slide')) {
+ return parseInt(target.id.slice(5));
+ }
+ target = target.parentNode;
+ }
+ return null;
+}
+
+function slideJump() {
+ if (window.location.hash == null) return;
+ var sregex = /^#slide(\d+)$/;
+ var matches = sregex.exec(window.location.hash);
+ var dest = null;
+ if (matches != null) {
+ dest = parseInt(matches[1]);
+ } else {
+ dest = findSlide(window.location.hash.slice(1));
+ }
+ if (dest != null)
+ go(dest - snum);
+}
+
+function fixLinks() {
+ var thisUri = window.location.href;
+ thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
+ var aelements = document.getElementsByTagName('A');
+ for (var i = 0; i < aelements.length; i++) {
+ var a = aelements[i].href;
+ var slideID = a.match('\#slide[0-9]{1,2}');
+ if ((slideID) && (slideID[0].slice(0,1) == '#')) {
+ var dest = findSlide(slideID[0].slice(1));
+ if (dest != null) {
+ if (aelements[i].addEventListener) {
+ aelements[i].addEventListener("click", new Function("e",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "if (e.preventDefault) e.preventDefault();"), true);
+ } else if (aelements[i].attachEvent) {
+ aelements[i].attachEvent("onclick", new Function("",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "event.returnValue = false;"));
+ }
+ }
+ }
+ }
+}
+
+function externalLinks() {
+ if (!document.getElementsByTagName) return;
+ var anchors = document.getElementsByTagName('a');
+ for (var i=0; i<anchors.length; i++) {
+ var anchor = anchors[i];
+ if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
+ anchor.target = '_blank';
+ addClass(anchor,'external');
+ }
+ }
+}
+
+function permaLink() {
+ document.getElementById('plink').href = window.location.pathname + '#slide' + snum;
+}
+
+function createControls() {
+ var controlsDiv = document.getElementById("controls");
+ if (!controlsDiv) return;
+ var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
+ var hideDiv, hideList = '';
+ if (controlVis == 'hidden') {
+ hideDiv = hider;
+ } else {
+ hideList = hider;
+ }
+ if(isOp) {
+ var str = '';
+ }else {
+ var str = '<a accesskey="t" id="sheet" title="toggle CSS" href="javascript:toggle();">&plusmn;<\/a>';
+ }
+ if(isIE) {
+ var tmp = "move around&xA0;until the color&xA0;change to red!";
+ }else if(isS2) {
+ var tmp = "move around\r\nuntil the color\r\nchange to red!";
+ }else {
+ var tmp = "move around until color change to red!";
+ }
+ if(isIE) {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] for keyboard help!"><ul>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst" style="vertical-align: middle; width: 160px;"><select style="cursor: auto; width: 160px; height: auto;" id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del" style="vertical-align: middle; width: 52px;"><select style="cursor: auto; width: 52px; height: auto;" id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul><\/div><\/form>';
+ }else {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] or double click this area for keyboard help!" ondblclick="createHelpReq();"><ul>' +
+ '<li id="exit"><a href="javascript:byby();" accesskey="q" title="exit Show"><\/a><\/li>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li class="vr"><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst"><a id="list" style="cursor:wait;" title="' + tmp + '"><\/a><select id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="fadeLinks" class="vr"><\/li>' +
+ '<li id="fade"><a class="isoff" href="javascript:switchFade();" accesskey="f" title="Transions"><\/a><\/li>' +
+ '<li id="audioLinks" class="vr"><\/li>' +
+ '<li id="audio"><a class="isoff" href="javascript:toggleSounds();" accesskey="s" title="Sounds" ><\/a><\/li>' +
+ '<li id="vol"><a id="volume" style="cursor:wait;" title="' + tmp + '"><\/a><select id="volumelist" title="select Volume" onchange="setVolume();"><option value="100">100<\/option><option value="90">90<\/option><option value="80">80<\/option><option value="70">70<\/option><option value="60">60<\/option><option value="50">50<\/option><option value="40">40<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="10">10<\/option><option value="0">0<\/option><\/select><\/li>' +
+ '<li id="autoLinks" class="vr"><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del"><a id="delay" style="cursor:wait;" title="' + tmp + '"><\/a><select id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul>' +
+ '<a href="http://s5.netzgesta.de" target="_blank" title="S5 Reloaded"><img style="position: absolute; right: 0; bottom: 0;" src="data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAYAAAASYli2AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAYpSURBVHjaYvz//z8DOYCRkZEZRAEx0Ij/f2HiAAHEgqYIpACkkB1J7g8Q/wLRIJ1QNSB5fiDmAOLvQKHPQPoHSB4ggFiQDGMCUnxALAPECkAsBLIdiD8A8SMgfghU8wlqkTgQK1ZVVWldv3792fr16y8D+c9AhgMEECPIy1DDRIDYAojdzMzMWNXV1UG2/v/y5Qvzw4cPP587d24/kH8Gar/uwoULQ+/cufNFXFyciZmZ+UVmZuZKoFmvAQII5kJOIDbi4uKK2Llz53EbG5vP6GGWn5+vMWnSpJtA5jcg5v327Rtnc3PzfSD79+rVq2WBNBtIHUAAwQzkAWKzBQsWnIUZFhISovXmzZsfkpKSDD09PY8kJCR+QtWCguGvrKwsz7Rp07Q4ODh+srCwgILiH0gSIIBgBrICsUBoaCgorBiANgqvXbtWDMg8AcQf9+7d+x0o9xbI/gJV/3fVqlUvmJiY/gIdcaWhoYETahEDQADBDPwNxO9h3gNpBiq6f/HiRbWjR4+yvnr16grQNbeh6kCWsxkYGIhClT8yNDQUgyYhBoAAYoIKfgXi06mpqUowQ+vr6x+uW7fu0suXL8+uWbOGS0BAwB7kC6jXvqmoqLDIyclxzZo1S4udnR2WtBgAAggWyyCXSgOxZUxMjGpWVtY7S0vLr8iRsnnzZl4/P7/DQCYoYtSA2DApKUkVGNNPDh06dBrIvwU06xNAAMEM5AIKqAOxCjQsmHl5eXWdnJx4N2zYcB4prd4CUpfwJRuAAGJCimULoGYpbm5uZ5DBnz9/5tq4caPWkSNHeJEc+g0aTFzfv3/nACabjzk5OW8FBQVloLmHASCAYJECUiTg7+//HJiQTzY2NsrfvXv3n7m5+T5YMgJGEkjDS2gY/pKRkeHt7Ow0Bsb0v9+/fz+HxTJAAMG8DHKFLTC9aRUXF79BT9Qgw4CWHAAy70FdYgjEDgkJCTpWVlYMQBfeAaaMPqBZbwECCGYgMzQGQSleCehS0X///jEDvf9lxYoVoOTyAIjfANX+BqrlBrL1gLFf09vb+0FaWvoHMBctA6USUKQABBAjrPiCliKg7AOKIG5ougLlju9Ipc1foDJWqMWGhYWFtsBg4RISEnrg5uY2BWQgQACxIBkGMkQKijmRfPwXWuI8ASp7DQ1vEP4DDO8PwBzzDJheT0CLPQaAAEJOh0o8zAzeihwMiv+gGZ0B4sz/bIwM797/YTh1/wfDIWj5qAfMmtFnzpz5ICIiwqKoqPgjKChoOtCs5wABhJyXpUCGzddgOIethJ71jEFi1nNwgQrKz8zv37//097eDop15qVLl0pAzWAACCAWhEMYOJFdduELA++b3wxsTIwMfzmYGH6xMDG8gYYpKAg+cnJy/gB6VwuYZFiA7E+wvAwQQCy46ozexwzG17+BYx6UVE4B8Vmo68CRFR0dDQo3UAHBBUwJ4lCLGAACCNnAv4zQxAkCxbIMZ0EuBIYb98EPDFo3voGTzjOogVzArGf969cvNmC2+wssHD7BDAQIIBakmHwPDPy3MAMNeBhgpfbbVEkGhqQbDJaXvjI8BPJB4jz79u37DcwlP+fPn38NuTwECCBkA1+8+8Nwtusxg+STHwwcP/8z8EuwMXA1KjBcBSlwEmRgBhrID/U2O7QMBIEHxsbGkrAwBAggmIGgNMT64AfDWyB+By0EQMVZlC0/wwsXQYa38hzgCGGBWv5ZU1OT4c+fP8yLFi1SA3r5Haw8BAggmIGg5KBpJ8BgeOYTg8S3f2DN/OxMDNwgw0AKnv0EJ+avsITu7u6+EZqzQEHwHFqaMwAEEAtShS/pLcTwrU+Z4QwsyQANOwIL06tfGV5BqwmQWoGKigoLYJnJvWPHjhstLS169vb2M0DqAAIIVh6CXHT/9ndIawEUITCXgUDrQwbGbe8YjkJdAzZQVVVV/t69e8LAgtUYaNgxWKQABBByacMHzfTK9gIMYkBZpj//GT4c+8gAKm1AsfseqPYPtHTXAtaEacBqlgHoyq+srKw3XV1dFwHlvwEEECNyYwmp3cIJjbUf0DbLP7RGEg+0bcMCjQxQzH8BWQgQQIzktr5wAYAAYmKgMgAIMAAp8Fx3osz1lgAAAABJRU5ErkJggg==" width="20" height="32" alt="S5" \/><\/a>' +
+ '<\/div><\/form>';
+ }
+ if (controlVis == 'hidden') {
+ var hidden = document.getElementById('navLinks');
+ } else {
+ var hidden = document.getElementById('jumplist');
+ }
+ addClass(hidden,'hideme');
+}
+
+function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
+ if (!s5mode && !isOp) return false;
+ var hScreen = screen.width; var vScreen = screen.height;
+ var vWindow = window.outerHeight; var hWindow = window.outerWidth;
+ if (isOp && s5mode && defaultView=='slideshow' && ((hScreen != hWindow) || (vScreen != vWindow))) {
+ toggle();
+ return false;
+ }
+ if (isOp && !s5mode && ((hScreen != hWindow) || (vScreen != vWindow))) return false;
+ if (isOp && !s5mode && (hScreen == hWindow) && (vScreen == vWindow)) toggle();
+ var vScale = 48; // both yield 16 (the usual browser default) at 1024x768
+ var hScale = 64; // perhaps should auto-calculate based on theme's declared value?
+ if (window.innerHeight) {
+ var vSize = window.innerHeight;
+ var hSize = window.innerWidth;
+ } else if (document.documentElement.clientHeight) {
+ var vSize = document.documentElement.clientHeight;
+ var hSize = document.documentElement.clientWidth;
+ } else if (document.body.clientHeight) {
+ var vSize = document.body.clientHeight;
+ var hSize = document.body.clientWidth;
+ } else {
+ var vSize = 700; // assuming 1024x768, minus chrome and such equals 8:5
+ var hSize = 1024; // these do not account for kiosk mode or Opera Show
+ }
+ var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
+ extendImgSizes(newSize); // scalable images extension
+ extendCanSizes(newSize); // scalable canvas extension
+ extendObjSizes(newSize); // scalable object extension
+ fontSize(newSize,"px");
+ if(!isS2 || firstTime==0) {
+ generateCanvas(); // dynamic canvas extension
+ }
+ if (isGe) { // hack to counter incremental reflow bugs
+ var obj = document.getElementsByTagName('body')[0];
+ obj.style.visibility = 'hidden';
+ obj.style.display = 'none';
+ obj.style.display = 'block';
+ obj.style.visibility = 'visible';
+ changeOpac(100,'slide' + snum);
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("fixReflow()",10);
+ }else {
+ setListPos(); // invisible select extension
+ }
+}
+
+function fixReflow() {
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("finishReflow()",10);
+}
+function finishReflow() {
+ setListPos(); // invisible select extension
+}
+
+function fontSize(val,fmt) {
+ var value = val + fmt;
+ if (!(s5ss = document.getElementById('s5ss'))) {
+ if (!document.createStyleSheet) {
+ document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
+ s5ss.setAttribute('media','screen, projection');
+ s5ss.setAttribute('id','s5ss');
+ } else {
+ document.createStyleSheet();
+ document.s5ss = document.styleSheets[document.styleSheets.length - 1];
+ }
+ }
+ if (!(document.s5ss && document.s5ss.addRule)) {
+ while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
+ s5ss.appendChild(document.createTextNode('html {font-size: ' + value + ' !important;}'));
+ } else {
+ document.s5ss.addRule('html','font-size: ' + value + ' !important;');
+ }
+}
+
+function windowChange() {
+ fontScale();
+}
+
+function notOperaFix() {
+ slideCSS = document.getElementById('slideProj').href;
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ slides.setAttribute('media','screen');
+ outline.disabled = true;
+ if (isGe) {
+ slides.setAttribute('href','null'); // Gecko fix
+ slides.setAttribute('href',slideCSS); // Gecko fix
+ }
+ if ((isIE && notIE7) && document.styleSheets && document.styleSheets[0]) {
+ document.styleSheets[0].addRule('img', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('div', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('.slide', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ }
+}
+
+function getIncrementals(obj) {
+ var incrementals = new Array();
+ if (!obj)
+ return incrementals;
+ var children = obj.childNodes;
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ if (hasClass(child, 'incremental')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'incremental');
+ for (var j = 0; j < child.childNodes.length; j++) {
+ if (child.childNodes[j].nodeType == 1) {
+ addClass(child.childNodes[j], 'incremental');
+ }
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ removeClass(child,'incremental');
+ }
+ }
+ if (hasClass(child, 'show-first')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'show-first');
+ if (child.childNodes[isGe].nodeType == 1) {
+ removeClass(child.childNodes[isGe], 'incremental');
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ }
+ }
+ incrementals = incrementals.concat(getIncrementals(child));
+ }
+ return incrementals;
+}
+
+function createIncrementals() {
+ var incrementals = new Array();
+ for (var i = 0; i < smax; i++) {
+ incrementals[i] = getIncrementals(document.getElementById('slide'+i));
+ }
+ return incrementals;
+}
+
+function trap(e) {
+ if (!e) {
+ e = event;
+ e.which = e.keyCode;
+ }
+ try {
+ modifierKey = e.ctrlKey || e.altKey || e.metaKey;
+ }
+ catch(e) {
+ modifierKey = false;
+ }
+ return modifierKey || e.which == 0;
+}
+
+// notes extension
+function noteLabel() { // Gives notes id's to match parent slides
+ var notes = GetElementsWithClassName('div','notes');
+ for (var i = 0; i < notes.length; i++) {
+ var note = notes[i];
+ var id = 'note' + note.parentNode.id.substring(5);
+ note.setAttribute('id',id);
+ }
+ resetElapsedSlide();
+ resetRemainingTime();
+ window.setInterval('updateElaspedTime()', 1000);
+}
+
+function createNotesWindow() { // creates a window for our notes
+ if (!s5NotesWindow || s5NotesWindow.closed) { // Create the window if it doesn't exist
+ s5NotesWindowLoaded = false;
+ // Note: Safari has a tendency to ignore window options preferring to default to the settings of the parent window, grr.
+ s5NotesWindow = window.open(s5Path+'ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0');
+ }
+ if (s5NotesWindowLoaded) { // Load the current note if the Note HTML has loaded
+ loadNote();
+ } else { // Keep trying...
+ window.setTimeout('createNotesWindow()', 50);
+ }
+}
+
+function loadNote() {
+// Loads a note into the note window
+ var notes = nextNotes = '<em class="disclaimer">There are no notes for this slide.</em>';
+ if (document.getElementById('note' + snum)) {
+ notes = document.getElementById('note' + snum).innerHTML;
+ }
+ if (document.getElementById('note' + (snum + 1))) {
+ nextNotes = document.getElementById('note' + (snum + 1)).innerHTML;
+ }
+
+ var jl = document.getElementById('jumplist');
+ var slideTitle = jl.options[jl.selectedIndex].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex) ? ' (' + jl.selectedIndex + '/' + (smax - 1) + ')' : '');
+ if (incrementals[snum].length > 0) {
+ slideTitle += ' <small>[' + incpos + '/' + incrementals[snum].length + ']</small>';
+ }
+ if (jl.selectedIndex < smax - 1) {
+ var nextTitle = jl.options[jl.selectedIndex + 1].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex + 1) ? ' (' + (jl.selectedIndex + 1) + '/' + (smax - 1) + ')' : '');
+ } else {
+ var nextTitle = '[end of slide show]';
+ }
+
+ if (s5NotesWindow && !s5NotesWindow.closed && s5NotesWindow.document) {
+ s5NotesWindow.document.getElementById('slide').innerHTML = slideTitle;
+ s5NotesWindow.document.getElementById('notes').innerHTML = notes;
+ s5NotesWindow.document.getElementById('next').innerHTML = nextTitle;
+ s5NotesWindow.document.getElementById('nextnotes').innerHTML = nextNotes;
+ }
+ resetElapsedSlide();
+}
+
+function minimizeTimer(id) {
+ var obj = s5NotesWindow.document.getElementById(id);
+ if (hasClass(obj,'collapsed')) {
+ removeClass(obj,'collapsed');
+ } else {
+ addClass(obj,'collapsed');
+ }
+}
+
+function resetElapsedTime() {
+ presentationStart = new Date();
+ slideStart = new Date();
+ updateElaspedTime();
+}
+
+function resetElapsedSlide() {
+ if (snum != previousSlide) {
+ slideStart = new Date();
+ previousSlide = snum;
+ updateElaspedTime();
+ }
+}
+
+function updateElaspedTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var now = new Date();
+ var ep = s5NotesWindow.document.getElementById('elapsed-presentation');
+ var es = s5NotesWindow.document.getElementById('elapsed-slide');
+ ep.innerHTML = formatTime(now.valueOf() - presentationStart.valueOf());
+ es.innerHTML = formatTime(now.valueOf() - slideStart.valueOf());
+}
+
+function resetRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var startField = s5NotesWindow.document.getElementById('startFrom');
+ startFrom = readTime(startField.value);
+ countdown.remaining = startFrom * 60000; // convert to msecs
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var timeLeft = formatTime(countdown.remaining);
+ tl.innerHTML = timeLeft;
+}
+
+function updateRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var now = new Date();
+ if (countdown.state == 'run') {
+ countdown.remaining = countdown.end - now;
+ }
+ tl.style.color = '';
+ tl.style.backgroundColor = '';
+ if (countdown.remaining >= 0) {
+ var timeLeft = formatTime(countdown.remaining);
+ removeClass(tl,'overtime');
+ if (countdown.remaining < 300000) {
+ tl.style.color = 'rgb(' + (255-Math.round(countdown.remaining/2000)) + ',0,0)';
+ tl.style.backgroundColor = 'rgb(255,255,' + (Math.round(countdown.remaining/2000)) + ')';
+ }
+ } else {
+ var timeLeft = '-' + formatTime(-countdown.remaining);
+ addClass(tl,'overtime');
+ }
+ tl.innerHTML = timeLeft;
+}
+
+function toggleRemainingTime() {
+ if (countdown.state == 'pause') countdown.state = 'run'; else countdown.state = 'pause';
+ if (countdown.state == 'pause') {
+ window.clearInterval(countdown.timer);
+ }
+ if (countdown.state == 'run') {
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ countdown.timer = window.setInterval('updateRemainingTime()', 1000);
+ }
+}
+
+function alterRemainingTime(amt) {
+ var change = amt * 60000; // convert to msecs
+ countdown.end += change;
+ countdown.remaining += change;
+ updateRemainingTime();
+}
+
+function formatTime(msecs) {
+ var time = new Date(msecs);
+
+ var hrs = time.getUTCHours() + ((time.getUTCDate() -1) * 24); // I doubt anyone will spend more than 24 hours on a presentation or single slide but just in case...
+ hrs = (hrs < 10) ? '0'+hrs : hrs;
+ if (hrs == 'NaN' || isNaN(hrs)) hrs = '--';
+
+ var min = time.getUTCMinutes();
+ min = (min < 10) ? '0'+min : min;
+ if (min == 'NaN' || isNaN(min)) min = '--';
+
+ var sec = time.getUTCSeconds();
+ sec = (sec < 10) ? '0'+sec : sec;
+ if (sec == 'NaN' || isNaN(sec)) sec = '--';
+
+ return hrs + ':' + min + ':' + sec;
+}
+
+function readTime(val) {
+ var sregex = /:/;
+ var matches = sregex.exec(val);
+ if (matches == null) {
+ return val;
+ } else {
+ var times = val.split(':');
+ var hours = parseInt(times[0]);
+ var mins = parseInt(times[1]);
+ var total = (hours * 60) + mins;
+ return total;
+ }
+}
+// notes extension
+
+// startup process
+function createSlideShow() {
+ defaultCheck();
+ if(!isIE) createDetector(); // (degrade IE) scalable images extension
+ if(opac!=0 || isIE) { // &&!isIE (degrade IE)
+ tranSitions = false;
+ fadeModus = false;
+ }
+ if(tranSitions && document.getElementById && document.createElement){
+ createProgress();
+ var nop=document.getElementById('StartupControl');
+ nop.onload = dumpProgress;
+ }else {
+ startup();
+ showAll();
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+ }
+}
+
+function defaultCheck() {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'defaultView') {
+ defaultView = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'controlVis') {
+ controlVis = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'tranSitions') {
+ tranSitions = (allMetas[i].content == "true") ? true : false;
+ fadeModus = (tranSitions == true) ? true : false;
+ }
+ if (allMetas[i].name == 'fadeDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ fadeDuration = Math.max(200,Math.min(tmp,2000));
+ }
+ if (allMetas[i].name == 'incrDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ incrDuration = Math.max(50,Math.min(tmp,500));
+ }
+ if (allMetas[i].name == 'autoMatic') {
+ autoMatic = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playLoop') {
+ playLoop = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playDelay') {
+ var tmp = parseInt(allMetas[i].content);
+ playDelay = Math.max(5,Math.min(tmp,90))*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ }
+ if (allMetas[i].name == 'audioSupport') {
+ audioSupport = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'audioVolume') {
+ var tmp = parseInt(allMetas[i].content);
+ audioVolume = Math.max(0,Math.min(tmp,100));
+ }
+ if (allMetas[i].name == 'audioError') {
+ audioError = (allMetas[i].content == "true") ? true : false;
+ }
+ }
+}
+
+function createProgress() {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "StartupProgress";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=100)";
+ }else {
+ pg.style.opacity = 1.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/progress.gif)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+
+ var im = document.createElement('img');
+ im.id = "StartupControl";
+ im.src = s5Path+"ui/graphic_support/blank.gif?" + new Date().valueOf();
+ document.getElementsByTagName("body")[0].appendChild(im);
+}
+
+function startup() {
+ createControls(); // hallvord
+ slideLabel();
+ incrementals = createIncrementals();
+ noteLabel(); // [SI:060104] must follow slideLabel()
+ loadNote();
+ fixLinks();
+ externalLinks();
+ fontScale();
+ if (!isOp) {
+ if(isIE) {
+ document.getElementById('lst').style.backgroundImage = 'none';
+ document.getElementById('del').style.backgroundImage = 'none';
+ }else {
+ document.getElementById('audio').style.backgroundImage = 'none';
+ }
+ notOperaFix();
+ }else if(isOp) {
+ var obj = document.getElementById('exit');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('exit').style.opacity = 0.5;
+ obj = document.getElementById('toggle');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('toggle').style.opacity = 0.5;
+ document.getElementById('jumplist').style.visibility = 'hidden';
+ document.getElementById('list').style.visibility = 'hidden';
+ document.getElementById('lst').style.opacity = 0.5;
+ obj = document.getElementById('audio');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('audio').style.opacity = 0.5;
+ document.getElementById('volumelist').style.visibility = 'hidden';
+ document.getElementById('volume').style.visibility = 'hidden';
+ document.getElementById('vol').style.opacity = 0.5;
+ document.getElementById('delaylist').style.visibility = 'hidden';
+ document.getElementById('delay').style.visibility = 'hidden';
+ document.getElementById('del').style.opacity = 0.5;
+ }
+ slideJump();
+ if (defaultView == 'outline') toggle();
+ document.onkeyup = keys;
+ document.onkeypress = trap;
+ document.onclick = clicker;
+}
+
+function preloadImgages() {
+ var temp = '';
+ var objects = document.getElementsByTagName('img');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].src != '') {
+ temp = new Image();
+ temp.src = objects[i].src;
+ }
+ }
+}
+
+function showAll() {
+ var obj1 = GetElementsWithClassName('div','presentation')[0];
+ if(!obj1) var obj1 = GetElementsWithClassName('ol','presentation')[0];
+ var obj2 = GetElementsWithClassName('div','layout')[0];
+ if(!obj1){}else {obj1.style.display = 'block'};
+ if(!obj2){}else {obj2.style.display = 'block'};
+}
+
+function dumpProgress() {
+ document.body.removeChild(document.getElementById('StartupControl'));
+ startup();
+ preloadImgages();
+ showAll();
+ createSoundManagerScript();
+ shiftOpacity('StartupProgress',1000);
+ window.setTimeout("removeProgress()",1000);
+}
+
+function removeProgress() {
+ document.body.removeChild(document.getElementById('StartupProgress'));
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+}
+function panelSetup() {
+ if(playPause) {
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ if(playLoop) {
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ if(audioSupport && !isIE && !isOp) {
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ }
+ if(fadeModus && !isIE) {
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ if(autoMatic) {
+ var obj = document.getElementById('auto'); changeClass(obj,'ison');
+ startPlay();
+ }
+ if(audioVolume && !isIE && !isOp) {
+ var idx = 0;
+ if(audioVolume >= 95 && audioVolume <= 100) {idx = 0;}
+ else if(audioVolume >= 85 && audioVolume < 95) {idx = 1;}
+ else if(audioVolume >= 75 && audioVolume < 85) {idx = 2;}
+ else if(audioVolume >= 65 && audioVolume < 75) {idx = 3;}
+ else if(audioVolume >= 55 && audioVolume < 65) {idx = 4;}
+ else if(audioVolume >= 45 && audioVolume < 55) {idx = 5;}
+ else if(audioVolume >= 35 && audioVolume < 45) {idx = 6;}
+ else if(audioVolume >= 25 && audioVolume < 35) {idx = 7;}
+ else if(audioVolume >= 15 && audioVolume < 25) {idx = 8;}
+ else if(audioVolume >= 5 && audioVolume < 15) {idx = 9;}
+ else {idx = 10;}
+ document.getElementById('volumelist').selectedIndex = idx;
+ }
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+}
+// startup process
+
+// shutdown process
+function byby() {
+ stopPlay();
+ if(tranSitions && fadeModus && s5mode && !isOp) {
+ fadeoutSound(curSoundID,true); // audio support
+ var pg = document.createElement('div');
+ pg.id = "GoodBy";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=0)";
+ }else {
+ pg.style.opacity = 0.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/finish.gif)";
+ document.getElementsByTagName("body")[0].appendChild(pg);
+ shiftOpacity('GoodBy',1000);
+ window.setTimeout("history.back()",1000);
+ }else {
+ stopSound(curSoundID);
+ history.back();
+ }
+}
+// shutdown process
+
+// scalable images extension
+function createDetector() {
+ var em = document.createElement('div');
+ em.id='EMSizeControl'; em.style.position="absolute"; em.style.left="-999px";
+ em.style.width="1em"; em.style.height="1em"; em.style.opacity=0.0;
+ document.getElementsByTagName("body")[0].appendChild(em);
+ var nop=document.getElementById('EMSizeControl');
+ if(!nop||findPosX(nop)!=-999) {}else {
+ opac=document.getElementById('EMSizeControl').style.opacity;
+ empx=document.getElementById('EMSizeControl').offsetHeight;
+ document.body.removeChild(document.getElementById('EMSizeControl'));
+ var objects = document.getElementsByTagName('img');
+ var j = 0; var i = 0; var k = 0; var d; var obj;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ images[j] = objects[i];
+ ++j;
+ }
+ }
+ var objects = document.getElementsByTagName('canvas'); j = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ canvas[objects[i].id] = objects[i];
+ if(j==0) {
+ if(objects[i].getContext) {
+ canvasSupport = true;
+ }
+ ++j;
+ }
+ }
+ }
+ if(canvasSupport!=true) {
+ for (d in canvas) {
+ try {
+ canvas[d].setAttribute("width",1);
+ canvas[d].setAttribute("height",1);
+ } catch (e) {
+ }
+ }
+ }
+ var objects = document.getElementsByTagName('table');
+ j = 0; k = 0; l = 0; var w; var h; var tmp; var cnt;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^piechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ piecharts[j] = objects[i];
+ em = piecharts[j].getAttribute("summary");
+ if(em != "") em = "," + em;
+ piecharts[j].setAttribute("summary", w + "," + h + em);
+ ++j;
+ }
+ }
+ }
+ if(objects[i].className.match(/^barchart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ barcharts[k] = objects[i];
+ em = barcharts[k].getAttribute("summary");
+ if(em != "") em = "," + em;
+ barcharts[k].setAttribute("summary", w + "," + h + em);
+ ++k;
+ }
+ }
+ }
+ if(objects[i].className.match(/^linechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ linecharts[l] = objects[i];
+ em = linecharts[l].getAttribute("summary");
+ if(em != "") em = "," + em;
+ linecharts[l].setAttribute("summary", w + "," + h + em);
+ ++l;
+ }
+ }
+ }
+ }
+ objects = document.getElementsByTagName('object'); j = 0; i = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ medias[j] = objects[i]; ++j;
+ if(!isIE) {
+ if(objects[i].getAttributeNode("classid")) objects[i].removeAttributeNode(objects[i].getAttributeNode("classid"));
+ if(objects[i].getAttributeNode("codebase")) objects[i].removeAttributeNode(objects[i].getAttributeNode("codebase"));
+ }
+ }
+ }
+ }
+}
+function extendImgSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < images.length; i++) {
+ w=images[i].getAttribute("width",0);
+ h=images[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ images[i].style.width=Math.floor(w*q)+"px";
+ images[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+
+function extendCanSizes(f) {
+ if(empx>0 && canvasSupport) {
+ var q = (f/empx); var w = 0; var h = 0; var tmp = ""; var cnt; var obj;
+ for(var i=0; i < piecharts.length; i++) {
+ if(piecharts[i].getAttribute("summary")) {
+ tmp = piecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = piecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < barcharts.length; i++) {
+ if(barcharts[i].getAttribute("summary")) {
+ tmp = barcharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = barcharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < linecharts.length; i++) {
+ if(linecharts[i].getAttribute("summary")) {
+ tmp = linecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = linecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ }
+}
+function extendObjSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < medias.length; i++) {
+ w=medias[i].getAttribute("width",0);
+ h=medias[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ medias[i].style.width=Math.floor(w*q)+"px";
+ medias[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+function findPosX(obj) {
+ var posLeft = 0;
+ while (obj.offsetParent) {
+ posLeft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ return posLeft;
+}
+function findPosY(obj) {
+ var posTop = 0;
+ while (obj.offsetParent) {
+ posTop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ return posTop;
+}
+// scalable images extension
+
+// canvas chart extension
+function deg2rad(degrees) {
+ return Math.PI *degrees/180;
+}
+function rad2deg(radians) {
+ return 180.0 *radians/Math.PI;
+}
+function circle_point_x(radians, diameter) {
+ var x = Math.cos(radians)*(diameter/2);
+ return x;
+}
+function circle_point_y(radians, diameter) {
+ var y = Math.sin(radians)*(diameter/2);
+ return y;
+}
+function roundTo(val,dig) {
+ var num = val;
+ if (val > 8191 && val < 10485) {
+ val = val-5000;
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ num = num+5000;
+ } else {
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ }
+ return num;
+}
+function searchColor(value) {
+ for (var dat in colorNames) {
+ if(dat==value) return colorNames[dat];
+ }
+ return false;
+}
+function scanColor(value) {
+ if(value.match(/^#[0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var val1 = value.substr(1,1).toLowerCase();
+ var val2 = value.substr(2,1).toLowerCase();
+ var val3 = value.substr(3,1).toLowerCase();
+ value = '#' + val1 + val1 + val2 + val2 + val3 + val3;
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var tmp = searchColor(value.toLowerCase());
+ if(!tmp) {}else{value = tmp;}
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ value = '#000000';
+ }
+ return value.toLowerCase();
+}
+function hex2rgb(val,trans) {
+ if(val.length==7) {
+ var tp1 = Math.max(0,Math.min(parseInt(val.substr(1,2),16),255));
+ var tp2 = Math.max(0,Math.min(parseInt(val.substr(3,2),16),255));
+ var tp3 = Math.max(0,Math.min(parseInt(val.substr(5,2),16),255));
+ return 'rgba(' + tp1 + ',' + tp2 + ',' + tp3 + ',' + trans + ')';
+ }
+}
+function trim(str) {
+ return (str.replace(/\s+$/,"").replace(/^\s+/,""));
+}
+function roundedRect(ctx,x,y,width,height,radius){
+ ctx.beginPath();
+ ctx.moveTo(x,y+radius);
+ ctx.lineTo(x,y+height-radius);
+ ctx.quadraticCurveTo(x,y+height,x+radius,y+height);
+ ctx.lineTo(x+width-radius,y+height);
+ ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius);
+ ctx.lineTo(x+width,y+radius);
+ ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
+ ctx.lineTo(x+radius,y);
+ ctx.quadraticCurveTo(x,y,x,y+radius);
+ ctx.closePath();
+}
+function drawString(ctx, text, fc, tx, ty) {
+ var xp = 0; var c = "";
+ ctx.beginPath();
+ for (var i = 0; i < text.length; i++) {
+ c = text[i];
+ ctx.drawImage(font, signs[c].sx, signs[c].sy, signs[c].sw, signs[c].sh, tx+xp, ty, signs[c].sw*fc, signs[c].sh*fc);
+ xp += (signs[c].sw*fc);
+ }
+ ctx.closePath();
+}
+function strokeString(ctx, txt, col, fh, tx, ty) {
+ var fw = fh*0.666666; var lw = fh*0.125;
+ var ls = lw/2; var cr = lw; var xp = 0;
+ ctx.lineCap = "round"; ctx.lineJoin = "round"
+ ctx.lineWidth = lw; ctx.strokeStyle = col;
+ for (var i = 0; i < txt.length; i++) {
+ strokeSymbol(ctx, txt[i], ls, tx+xp, ty, fw, fh);
+ xp += (txt[i]!="."?fw+cr:(fw/2)+cr);
+ }
+}
+function strokeSymbol(ctx, symbol, fc, cx, cy, cw, ch) {
+ ctx.beginPath();
+ switch (symbol) {
+ case "0":
+ ctx.moveTo(cx+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+(cw/2),(cw/2)-fc,deg2rad(180),0, false);
+ ctx.arc(cx+(cw/2),(cy+ch)-(cw/2),(cw/2)-fc,0,deg2rad(180), false);
+ ctx.closePath();
+ break;
+ case "1":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.moveTo(cx+(cw*0.666666),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.666666),cy+fc);
+ ctx.lineTo(cx+(cw*0.25),cy+(ch*0.25));
+ break;
+ case "2":
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.8));
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+fc,cy+ch-fc);
+ ctx.arc(cx+(cw/2),cy+(cw*0.425),(cw*0.425)-fc,deg2rad(45),deg2rad(-180), true);
+ break;
+ case "3":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-90),deg2rad(180), false);
+ break;
+ case "4":
+ ctx.moveTo(cx+(cw*0.75),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.5),cy+ch-fc);
+ break;
+ case "5":
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-80),deg2rad(180), false);
+ break;
+ case "6":
+ ctx.moveTo(cx+fc,cy+ch-(cw*0.5)-fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-180),deg2rad(180), false);
+ ctx.bezierCurveTo(cx+fc,cy+fc,cx+fc,cy+fc,cx+(cw*0.9)-fc,cy+fc);
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ break;
+ case "7":
+ ctx.moveTo(cx+(cw*0.5),cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.25)-fc);
+ break;
+ case "8":
+ ctx.moveTo(cx+(cw*0.92)-fc,cy+(cw*0.59));
+ ctx.arc(cx+(cw/2),cy+(cw*0.45),(cw*0.45)-fc,deg2rad(25),deg2rad(-205), true);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-135),deg2rad(-45), true);
+ ctx.closePath();
+ ctx.moveTo(cx+(cw*0.79),cy+(ch*0.47));
+ ctx.lineTo(cx+(cw*0.21),cy+(ch*0.47));
+ break;
+ case "9":
+ ctx.moveTo(cx+cw-fc,cy+(cw*0.5));
+ ctx.arc(cx+(cw/2),cy+(cw*0.5),(cw*0.5)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.bezierCurveTo(cx+cw-fc,cy+ch-fc,cx+cw-fc,cy+ch-fc,cx+(cw*0.1)+fc,cy+ch-fc);
+ break;
+ case "%":
+ ctx.moveTo(cx+fc,cy+(ch*0.75));
+ ctx.lineTo(cx+cw-fc,cy+(ch*0.25));
+ ctx.moveTo(cx+(cw*0.505),cy+(cw*0.3));
+ ctx.arc(cx+(cw*0.3),cy+(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.moveTo(cx+(cw*0.905),cy+ch-(cw*0.3));
+ ctx.arc(cx+(cw*0.7),cy+ch-(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ break;
+ case ".":
+ ctx.moveTo(cx+(cw*0.25),cy+ch-fc-fc);
+ ctx.arc(cx+(cw*0.25),cy+ch-fc-fc,fc,deg2rad(0),deg2rad(360), false);
+ ctx.closePath();
+ break;
+ default:
+ break;
+ }
+ ctx.stroke();
+}
+function drawBar(ctx,x,y,width,height,color,value,textdiv){
+ var rw = width/2; var rh = rw/2;
+ height = Math.max(height,rw);
+ var dh = Math.max(height-(2*rh),0.1); var S2L;
+ var xx = rw/8; var yy = rh/4;
+ var yo = rh/2; y = y - yy;
+ if(canvas_noshadow <= 0 && canvas_noshade <= 0) {
+ ctx.save();
+ S2L = ctx.createRadialGradient(x+rw+rh,y+height-rw+yy+rh,0,x+rw,y+height-rw+yy,rw);
+ S2L.addColorStop(0, 'rgba(0,0,0,0.5)');
+ S2L.addColorStop(0.7, 'rgba(0,0,0,0.25)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = S2L;
+ ctx.scale(1,0.5);
+ ctx.translate(xx,y+height+yy);
+ if(isOp){
+ ctx.fillRect(x,y+yy+height-width,width,width);
+ }else {
+ ctx.arc(x+rw,y+yy+height-width,width,0,deg2rad(360), false);
+ ctx.fill();
+ }
+ ctx.restore();
+ }else if(canvas_noshadow <= 0 && canvas_noshade >= 1) {
+ ctx.fillStyle = 'rgba(0,0,0,0.2)';
+ ctx.fillRect(x+yo,y+rh+yo+yo,width,dh);
+ }
+
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x,y+(height/2),x+width,y+(height/2));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.75)');
+ S2L.addColorStop(0.2, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.3, 'rgba(0,0,0,0)');
+ S2L.addColorStop(0.5, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.35)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.1)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.strokeStyle = S2L;
+ ctx.stroke();
+ }else {
+ ctx.fillStyle = color;
+ ctx.fillRect(x,y+rh+yo,width,dh);
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var bw = width; var bh = bw/4;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ var c; var w;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,x+(width/2)-(bw/2),y,bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext <= 0) {
+ strokeString(ctx, value + "%","rgba(48,48,48,1)", th, x+(width/2)-(w/2), y+((bh-th)/2));
+ }else {
+ drawString(ctx, value + "%", tf, x+(width/2)-(w/2), y+((bh-th)/2.2));
+ }
+ }else {
+ var bh = bw/3; var th = roundTo(bh*0.75,0);
+ roundedRect(ctx,x,y,bw,bh,bh/4);
+ ctx.fill();
+ var obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = x + "px";
+ obj.style.top = y+((bh-th)/2.2) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+
+ }
+}
+function drawLine(ctx,x,y,width,height,dist,array,factor,color,fill){
+ if(fill <= 0){
+ var style = hex2rgb(color,0.5);
+ ctx.lineJoin = "miter";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height);
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.lineTo(x+width,y+height);
+ ctx.lineTo(x,y+height);
+ ctx.closePath();
+ ctx.fillStyle = style;
+ ctx.fill();
+ }
+ ctx.lineJoin = "round";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height-(array[0]*factor));
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.strokeStyle = color;
+ ctx.stroke();
+}
+function setDataURL(cid) {
+ if(cid.toDataURL) {
+ var obj = document.getElementById(cid.id + "_link");
+ if(obj) {
+ obj.setAttribute("title", "To Data URL");
+ obj.setAttribute("target", "_blank");
+ obj.setAttribute("href", cid.toDataURL());
+ }
+ }
+}
+function get_input(dataobj,canvasobj,linechart) {
+ var table = document.getElementById(dataobj);
+ var canvas = document.getElementById(canvasobj);
+ var row; var clm; var cnt = 0; var val = 0; var nme = ""; var col = "";
+ if(canvas.getContext) {
+ canvas_width = parseInt(canvas.style.width);
+ canvas_height = parseInt(canvas.style.height);
+ if(canvas_width >= 16 && canvas_height >= 16) {
+ var tmp = table.getAttribute("summary");
+ canvas_noshade = 0; canvas_noshadow = 0;
+ canvas_notext = 0; canvas_imgtext = 0;
+ canvas_htmltext = 0; canvas_nofill = 0;
+ if(tmp.search(/noshadow/) != -1) canvas_noshadow = 1;
+ if(tmp.search(/noshade/) != -1) canvas_noshade = 1;
+ if(tmp.search(/nofill/) != -1) canvas_nofill = 1;
+ if(tmp.search(/notext/) != -1) canvas_notext = 1;
+ if(tmp.search(/htmltext/) != -1) canvas_htmltext = 1;
+ if(tmp.search(/imgtext/) != -1) canvas_imgtext = 1;
+ if(table.getAttribute("bgcolor")) {
+ canvas_bgcolor = scanColor(table.getAttribute("bgcolor"));
+ }
+ ChartData = new Array(); colorSlice = new Array();
+ if(table.getElementsByTagName("tr")[0].getElementsByTagName("th")[0]) cnt = 1;
+ for(var r = cnt; r < table.getElementsByTagName("tr").length; r++) {
+ row = table.getElementsByTagName("tr")[r];
+ clm = row.getElementsByTagName("td").length;
+ if(row.getElementsByTagName("td")[0].getAttribute("bgcolor")) {
+ col = scanColor(row.getElementsByTagName("td")[0].getAttribute("bgcolor")); val = 0;
+ nme = trim(row.getElementsByTagName("td")[1].innerHTML.replace(/<[^>]+>/g,""));
+ if(!linechart) {
+ if(clm > 3) {
+ for(var z = 2; z < clm; z++) {
+ val += parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ }else {
+ val = parseFloat(row.getElementsByTagName("td")[2].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ if(!isNaN(val) && val > 0 && nme != '') {
+ colorSlice[r-cnt] = col; ChartData[nme] = Math.abs(val);
+ }else {
+ break;
+ }
+ }else {
+ val = 0; i = 0;
+ if(clm > 3 && nme != '') {
+ ChartData[r-cnt] = new Array();
+ colorSlice[r-cnt] = col;
+ for(var z = 2; z < clm; z++) {
+ val = Math.abs(parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,"")));
+ if(!isNaN(val) && val >= 0) {
+ ChartData[r-cnt][i] = val; i++;
+ }else {
+ ChartData[r-cnt][i] = 0; i++;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }
+ }
+}
+function setPieChart(canvasobj,textobj) {
+ var cd = (Math.min(canvas_width,canvas_height)/110)*100;
+ var cp = cd*0.1; var cr = cd/2;
+ var sr = cr*0.93; var cw = cd+cp; var ch = cw;
+ var cx = (cd/2)+(cp/2); var cy = cx; var ct = 0;
+ for (var data in ChartData) {
+ ct += ChartData[data];
+ }
+ var poc = ct/100;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ }
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,cw,ch);
+ }else {
+ ctx.clearRect(0,0,cw,ch);
+ }
+ if(canvas_noshadow <= 0) {
+ if(!isOp) {
+ ctx.beginPath();
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),cr,cx+(cr*0.1),cy+(cr*0.1),sr*0.9);
+ B2B.addColorStop(0, 'rgba(0,0,0,0)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.arc(cx+(cr*0.1),cy+(cr*0.1),cr,0,deg2rad(360), false);
+ ctx.closePath();
+ ctx.fillStyle = B2B;
+ ctx.fill();
+ }else {
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),0,cx+(cr*0.1),cy+(cr*0.1),cr);
+ B2B.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(0.87, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = B2B;
+ ctx.fillRect(0,0,cw,ch);
+ }
+ }
+ var val = 0; var deg = 0; var idx = 0; var data;
+ for (data in ChartData) {
+ val = ChartData[data]; sdeg = deg;
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ ctx.beginPath();
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr,sdeg,edeg, false);
+ ctx.lineTo(cx,cy);
+ ctx.closePath();
+ ctx.fillStyle = colorSlice[(idx++)];
+ ctx.fill();
+ }
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ var W2T = ctx.createLinearGradient(cp*2,cp*2,cx,cy);
+ W2T.addColorStop(0, 'rgba(255,255,255,0.8)');
+ W2T.addColorStop(1, 'rgba(255,255,255,0)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.fillStyle = W2T;
+ ctx.fill();
+ ctx.beginPath();
+ var T2B = ctx.createLinearGradient(cx,cy,cw-(cp*2),ch-(cp*2));
+ T2B.addColorStop(0, 'rgba(0,0,0,0)');
+ T2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.fillStyle = T2B;
+ ctx.fill();
+ ctx.beginPath();
+ var B2T = ctx.createLinearGradient(cx,cy,cw-(cp*1.9),ch-(cp*1.9));
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.strokeStyle = B2T;
+ ctx.stroke();
+ ctx.beginPath();
+ var T2W = ctx.createLinearGradient(cx,cy,(cp*1.9),(cp*1.9));
+ T2W.addColorStop(0, 'rgba(255,255,255,0)');
+ T2W.addColorStop(1, 'rgba(255,255,255,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.strokeStyle = T2W;
+ ctx.stroke();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var mpos = 0; var per = 0; var gx = 0;
+ var gy = 0; var tx = 0; var ty = 0;
+ var obj = ""; var w = 0; var c = 0;
+ var bw = cr*0.45; var bh = cr*0.125;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext >= 1) {
+ bw = (cr*0.365);
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ for (data in ChartData) {
+ val = ChartData[data];
+ sdeg = deg; mpos = deg+(((val/2)/ct)*deg2rad(360));
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ per = roundTo(val/poc,2);
+ gx = circle_point_x(mpos, cd);
+ gy = circle_point_y(mpos, cd);
+ tx = parseFloat((cx+(2*Math.floor(cx + gx)))/3);
+ ty = (cy+(2*Math.floor(cy + gy)))/3;
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext >= 1) {
+ drawString(ctx, per + "%", tf, tx-(w/2), ty-(th/1.8));
+ }else {
+ strokeString(ctx, per + "%","rgba(48,48,48,1)", th, tx-(w/2), ty-(th/2));
+ }
+ }else {
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = (tx-(bw/2)) + "px";
+ obj.style.top = ty-(th/1.8) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+ }
+ }
+ }
+}
+function setBarChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9; var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05; var ph = canvas_height*0.05;
+ var cm = 0; var ct = 0;
+ for (var data in ChartData) {
+ cm = Math.max(cm,ChartData[data]);
+ ct += ChartData[data];
+ }
+ var hf = ih/cm; var bs = colorSlice.length;
+ var bw = iw/(bs*1.1); var poc = ct/100;
+ var th = roundTo((bw/3)*0.75,0);
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ var obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ var cc = ""; var bh = 0; var idx = 0; var t = 0; per = 0;
+ for (var data in ChartData) {
+ per = roundTo(ChartData[data]/poc,2);
+ bh = ChartData[data]*hf;
+ drawBar(ctx,pw+(t*(bw*1.1)),ph+ih-bh,bw,bh,colorSlice[(idx++)],per,textdiv);
+ t++;
+ }
+ }
+}
+function setLineChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9;
+ var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05;
+ var ph = canvas_height*0.05;
+ var cm = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ cm = Math.max(cm,ChartData[i][j]);
+ }
+ }
+ var hf = (ih*0.95)/cm; var bw = iw;
+ var dw = iw/(ChartData[0].length-1)
+ var dh = ih/(ChartData[0].length-1)
+ var ps = Math.min(pw,ph); lw = ps/4;
+ var B2T;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_noshadow <= 0) {
+ B2T = ctx.createLinearGradient(pw+ps,ph+ih+1,pw+ps+ps,ph+ih+1);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps,ph+ih);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.lineTo(pw+ps+ps,ph+ih);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+ps+ps,ph+ih,pw+ps+ps,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps+ps,ph+ih);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+ps+iw,ph+ih+ps);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.closePath();
+ ctx.fill();
+ var B2T = ctx.createLinearGradient(pw+iw+1,ph+ps,pw+iw+1,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.35)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps);
+ ctx.lineTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+iw,ph+ps+ps,pw+iw+ps,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.35)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+iw+ps,ph+ih+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = lw/2;
+ ctx.strokeStyle = "rgba(255,255,255,0.25)";
+ if(canvas_nofill <= 0) {
+ ctx.fillStyle = "rgba(240,240,240,0.8)";
+ ctx.strokeStyle = "rgba(255,255,255,1)";
+ ctx.fillRect(pw,ph,iw,ih);
+ }
+ for (var i = 0; i < ChartData[0].length-1; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph);
+ ctx.lineTo(pw+(i*dw),ph+ih);
+ ctx.stroke();
+ }
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw,ph+(i*dh));
+ ctx.lineTo(pw+iw,ph+(i*dh));
+ ctx.stroke();
+ }
+ ctx.lineWidth = lw;
+ var cc = ""; var bh = 0; var idx = 0; var t = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ t = Math.max(t,ChartData[i][j]);
+ }
+ bh = t*hf; cc = colorSlice[(idx++)];
+ drawLine(ctx,pw,ph+ih-bh,bw,bh,dw,ChartData[i],hf,cc,canvas_nofill);
+ }
+ ctx.beginPath();
+ ctx.moveTo(pw,ph);
+ ctx.lineTo(pw,ph+ih);
+ ctx.lineTo(pw+iw+(lw/2),ph+ih);
+ ctx.strokeStyle = "rgba(48,48,48,1)";
+ ctx.stroke();
+ ctx.lineWidth = lw/2;
+ B2T = ctx.createLinearGradient(pw,ph+ih,pw,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,1)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.strokeStyle = B2T;
+ for (var i = 0; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph+ih);
+ ctx.lineTo(pw+(i*dw),ph+ih+ps);
+ ctx.stroke();
+ }
+ B2T = ctx.createLinearGradient(pw-ps,ph,pw,ph);
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,1)');
+ ctx.strokeStyle = B2T;
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw-ps,ph+(i*dh));
+ ctx.lineTo(pw,ph+(i*dh));
+ ctx.stroke();
+ }
+ }
+}
+function generateCanvas() {
+ if(canvasSupport) {
+ var canvasID; var tdataID; var textID;
+ var tmp; var dat; var i; var j;
+ for(i=0; i < piecharts.length; i++) {
+ tmp = piecharts[i].id.split("_");
+ tdataID = piecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setPieChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < barcharts.length; i++) {
+ tmp = barcharts[i].id.split("_");
+ tdataID = barcharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setBarChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < linecharts.length; i++) {
+ tmp = linecharts[i].id.split("_");
+ tdataID = linecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID,true);
+ if(colorSlice.length > 0) {
+ if(ChartData.length == colorSlice.length) {
+ setLineChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ }
+}
+// canvas chart extension
+
+// invisible select extension
+function setListPos(opt) {
+ if(!isIE) { //(degrade IE)
+ var ref = document.getElementById('list');
+ var x = findPosX(ref); var y = findPosY(ref);
+ var obj = document.getElementById('jumplist');
+ obj.style.position = 'fixed'; obj.style.left = x + 'px'; obj.style.top = y + 'px';
+ var vol = document.getElementById('volumelist');
+ ref = document.getElementById('volume');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ vol.style.position = 'fixed'; vol.style.left = x + 'px'; vol.style.top = y + 'px';
+ var del = document.getElementById('delaylist');
+ ref = document.getElementById('delay');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ del.style.position = 'fixed'; del.style.left = x + 'px'; del.style.top = y + 'px';
+ var pnl = document.getElementById('navLinks');
+ }
+ if(opt) {
+ if(isIE) {
+ //(degrade IE)
+ //pnl.style.filter = "alpha(opacity=80)";
+ }else {
+ obj.style.opacity = 0.0;
+ vol.style.opacity = 0.0;
+ del.style.opacity = 0.0;
+ pnl.style.opacity = 0.8;
+ }
+ }
+}
+// invisible select extension
+
+// transition extension
+function switchFade() {
+ if(tranSitions && s5mode && fadeModus) {
+ fadeModus = false;
+ playDelay = playDelay-(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'isoff');
+ }else if(tranSitions && s5mode && !fadeModus) {
+ fadeModus = true;
+ playDelay = playDelay+(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ currentSlide();
+}
+function opacity(ids, opacStart, opacEnd, millisec) {
+ var speed = Math.round(millisec / 100);
+ var timer = 0;
+ if(opacStart > opacEnd) {
+ for(var i = opacStart; i >= opacEnd; i--) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ } else if(opacStart < opacEnd) {
+ for(var i = opacStart; i <= opacEnd; i++) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ }
+}
+function changeOpac(opacity, ids) {
+ var obj = document.getElementById(ids);
+ if (isIE) {
+ obj.style.filter = "alpha(opacity=" + opacity + ")";
+ } else {
+ obj.style.opacity = (opacity / 100);
+ }
+}
+function shiftOpacity(ids, millisec) {
+ if(document.getElementById(ids).style.opacity != '') {
+ var currentOpac = document.getElementById(ids).style.opacity * 100;
+ } else {
+ var currentOpac = 0;
+ }
+ if(currentOpac == 0) {
+ opacity(ids, currentOpac, 100, millisec);
+ } else if(currentOpac > 0) {
+ opacity(ids, currentOpac, 0, millisec);
+ }
+}
+// transition extension
+
+// autoplay extension
+function autoPlay() {
+ if (s5mode && autoMatic && !playPause) {
+ if ((snum >= (smax-1)) && playLoop) {
+ goTo(0);
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }else if ((snum >= (smax-1)) && !playLoop) {
+ stopPlay();
+ }else {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ if (incrementals[snum].length >0) {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = parseInt(playDelay/(incrementals[snum].length+1));
+ remainDer = parseInt(playDelay-(incrDelay*incrementals[snum].length));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ } else {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = incrDuration;
+ remainDer = parseInt(playDelay-(incrementals[snum].length*incrDuration));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }
+ }
+}
+function autoPlayIncr() {
+ if (incpos < incrementals[snum].length) {
+ subgo(1);
+ autoRun = setTimeout('autoPlayIncr();',incrDelay);
+ }else {
+ autoRun = setTimeout('nop();',remainDer);
+ }
+}
+function nop() {
+ // no operation dummy
+}
+function togglePlay() {
+ if (autoRun && s5mode) {
+ stopPlay();
+ }else if (!autoRun && s5mode) {
+ startPlay();
+ }
+}
+function stopPlay() {
+ if (autoRun && s5mode) {
+ clearTimeout(autoRun); autoRun = null;
+ autoMatic = false; playPause = false; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'isoff');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ currentSlide();
+ }
+}
+function startPlay() {
+ if (!autoRun && s5mode) {
+ playPause = false; autoMatic = true; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'ison');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ autoRun = setTimeout('autoPlay();',playDelay);
+ currentSlide();
+ }
+}
+function pausePlay() {
+ if (s5mode && autoMatic) {
+ if (playPause) {
+ playPause = false; autoRun = setTimeout('autoPlay();',playDelay);
+ var obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ }else {
+ if (autoRun){
+ clearTimeout(autoRun); autoRun = null; playPause = true;
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+ }
+}
+function switchLoop() {
+ if(s5mode) {
+ if (playLoop) {
+ playLoop = false;
+ var obj = document.getElementById('loop'); changeClass(obj,'isoff');
+ }else {
+ playLoop = true;
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+}
+function setDelay() {
+ var val = document.getElementById('delaylist');
+ if(s5mode) {
+ var delay = Math.max(5,Math.min(parseInt(val.value),300));
+ playDelay = (fadeModus == true) ? ((delay*1000)+(2*fadeDuration)) : (delay*1000);
+ }
+}
+// autoplay extension
+
+// audio extension
+function createSoundManagerScript() {
+ if(typeof soundManager=="undefined") {
+ onerrorSM2();
+ }else {
+ var script=document.createElement('SCRIPT');
+ var tx=document.createTextNode("soundManager.createMovie();");
+ script.appendChild(tx);
+ document.getElementsByTagName("body")[0].appendChild(script);
+ }
+}
+//soundManager.onload = function() {
+function onloadSM2() {
+ if(!isIE) { //(degrade IE)
+ swfUnloaded = false;
+ preloadSounds();
+ }
+}
+//soundManager.onerror = function() {
+function onerrorSM2() {
+ if(typeof soundManager!="undefined") {
+ soundManager.destruct;
+ delete soundManager;
+ }
+ audioSupport = false; swfUnloaded = true;
+ if(audioError && !isIE && !isOp) {
+ var dv = document.createElement('div'); dv.id = "guru";
+ var d2=document.createElement('div'); dv.appendChild(d2);
+ var tx=document.createTextNode('Guru Meditation - SoundManager failed to load/initialize!');
+ d2.appendChild(tx); document.getElementById('slide0').appendChild(dv);
+ }
+}
+function audioSetup() {
+ if(sound[0]) {
+ playSound(0);
+ }else if(sound[bgSoundItem] && !sound[0]) {
+ playSound(bgSoundItem);
+ }
+}
+function fadeoutSound(ids, option) {
+ if(curSoundID >= 0 && !swfUnloaded) {
+ if(isNaN(ids)) {
+ if(ids == "bgSound") {
+ var cnum = parseInt(bgSoundItem);
+ }else {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && ids == sound[i]["id"]) {
+ var cnum = i;
+ break;
+ }
+ }
+ }
+ }else {
+ var cnum = ids;
+ ids = sound[cnum]["id"];
+ }
+ var vol = getMaxVolume(sound[cnum]["volume"]);
+ var millisec = fadeDuration;
+ var speed = Math.round(millisec / vol);
+ var timer = 0;
+ for(var i = vol; i > 0; i--) {
+ setTimeout("fadeout(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ if(option) setTimeout("stopSound('"+ids+"')",millisec);
+ }
+}
+function fadeout(volume, id) {
+ soundManager.setVolume(id,volume);
+}
+function stopSound(ids) {
+ var sid;
+ if(isNaN(ids)) {
+ sid = ids;
+ }else if(sound[ids]) {
+ sid = sound[ids]["id"];
+ }
+ if(sid!='' && curSoundID >= 0) {
+ soundManager.stop(sid);
+ curSoundID = -1;
+ }
+}
+function toggleSounds() {
+ if(audioSupport && !swfUnloaded) {
+ stopAllSounds();
+ }else if (!audioSupport && !swfUnloaded) {
+ allowSounds();
+ }
+}
+function allowSounds() {
+ if(!swfUnloaded) {
+ audioSupport = true;
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ currentSlide();
+ }
+}
+function stopAllSounds() {
+ if(curSoundID >= 0) {
+ stopSound(curSoundID);
+ }else {
+ soundManager.stopAll();
+ curSoundID = -1;
+ }
+ audioSupport = false;
+ var obj = document.getElementById('audio'); changeClass(obj,'isoff');
+ currentSlide();
+}
+function playSound(id) {
+ if(audioSupport && !swfUnloaded) {
+ var url, sid, vol, lps, cnum;
+ if(isNaN(id)) {
+ sid = id;
+ if(sid == "bgSound") {
+ cnum = parseInt(bgSoundItem);
+ }else {
+ cnum = getSoundID(id);
+ }
+ }else {
+ cnum = parseInt(id);
+ if(sound[cnum]) sid = sound[cnum]["id"];
+ }
+ if(sound[cnum] && sound[cnum]["url"]!='' && sid!=''){
+ url = sound[cnum]["url"];
+ vol = (sound[cnum]["volume"]!='')?getMaxVolume(sound[cnum]["volume"]):getMaxVolume(100);
+ lps = (sound[cnum]["loops"])?true:false;
+ if(lps) {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){soundManager.play(sid,{volume:getMaxVolume(sound[cnum]["volume"])});}});
+ }else {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){curSoundID=-1;}});
+ }
+ }
+ }
+}
+function getSoundID(str) {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && str == sound[i]["id"]) {
+ var id = i;
+ break;
+ }
+ }
+ return id;
+}
+function setVolume() {
+ var vol = document.getElementById('volumelist');
+ if(audioSupport && !swfUnloaded) {
+ audioVolume = parseInt(vol.value);
+ if(curSoundID >= 0) {
+ if(sound[curSoundID]) {
+ var sid = sound[curSoundID]["id"];
+ var vid = getMaxVolume(sound[curSoundID]["volume"]);
+ soundManager.setVolume(sid,vid);
+ }
+ }
+ }
+}
+function getMaxVolume(value) {
+ if(audioVolume>0) {var factor = audioVolume/100;}else {var factor = 0;}
+ return Math.max(0,Math.min(parseInt(value*factor),audioVolume));
+}
+function preloadSounds() {
+ var temp = ''; var parm = ''; var t = ''; var cl = '';
+ var objects = document.getElementsByTagName('object');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].type.toLowerCase() == 'audio/mp3' && objects[i].data != '') {
+ objects[i].width = 0; objects[i].height = 0;
+ if(objects[i].parentNode.tagName == 'DIV') {
+ cl = objects[i].parentNode.className.toLowerCase();
+ if(cl == 'presentation' || cl == 'slide') {
+ if(cl == 'presentation') {
+ t = parseInt(bgSoundItem);
+ }else {
+ t = parseInt(objects[i].parentNode.id.slice(5, objects[i].parentNode.id.length));
+ }
+ sound[t] = new Object();
+ if(t < bgSoundItem) {
+ sound[t]["id"] = objects[i].parentNode.id;
+ }else {
+ sound[t]["id"] = "bgSound";
+ }
+ sound[t]["url"] = objects[i].data;
+ sound[t]["volume"] = 100; sound[t]["loops"] = false;
+ if(objects[i].archive != '') {
+ parm = objects[i].archive.toLowerCase().split(',');
+ for (var j=0; j < parm.length; j++) {
+ if(parm[j] == 'loop') sound[t]["loops"] = true;
+ if(parm[j].search(/^volume/) != -1) {
+ var tmp = parm[j].split(':');
+ sound[t]["volume"] = parseInt(tmp[1]);
+ }
+ }
+ }
+ soundManager.createSound(sound[t]["id"],sound[t]["url"]);
+ }
+ }
+ }
+ }
+}
+// audio extension
+
+// help extension
+function createHelpReq() {
+ if(!document.getElementById("HelpReq")) {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "HelpReq";
+ if (pg.addEventListener) {
+ pg.addEventListener("onclick",dumpHelpReq,false);
+ } else if (pg.attachEvent) {
+ pg.attachEvent("onclick",dumpHelpReq);
+ }
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=90)";
+ } else {
+ pg.style.opacity = 0.9;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(64,64,64)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/help.jpg)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+ if(document.getElementById("HelpReq")) {
+ helpmode = true;
+ }
+ }
+}
+function dumpHelpReq() {
+ if(document.getElementById("HelpReq")) {
+ document.body.removeChild(document.getElementById('HelpReq'));
+ helpmode = false;
+ }
+}
+// help extension
+
+//DEBUG
+function ConsoleLog(value) {
+ if(window.console) {
+ window.console.log(value);
+ }
+}
+//DEBUG
+
+document.write('<style type="text/css" media="screen" id="blockStyle">.presentation, .layout {display: none; }</style>');
+
+if(!isIE && !isOp) {
+ document.write('<script type="text/javascript" src="'+s5Path+'ui/audio_support/soundmanager2.js"></script>');
+ if(typeof soundManager!="undefined") {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'audioDebug') {
+ var audioDebug = (allMetas[i].content == "true") ? true : false;
+ soundManager.defaultOptions.debugMode = audioDebug;
+ }
+ }
+ }
+}
+
+window.onload = createSlideShow;
+window.onresize = function(){setTimeout('windowChange()',5);} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/toggle_link.png
new file mode 100644
index 000000000..4588e2514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/toggle_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/toggle_over.png
new file mode 100644
index 000000000..400f613b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/toggle_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/volume_link.png
new file mode 100644
index 000000000..f362acd1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/volume_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/wrap.css
new file mode 100644
index 000000000..a37315552
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/wrap.css
@@ -0,0 +1,410 @@
+/********************************************************************
+Screen and Print Styles for the Wrap Plugin
+********************************************************************/
+
+/* tables in columns and boxes should span the whole width */
+.wrap_column table,
+.wrap_left table, .wrap_right table, .wrap_center table,
+.wrap_box table,
+.wrap_info table, .wrap_important table, .wrap_alert table, .wrap_tip table, .wrap_help table, .wrap_todo table, .wrap_download table {
+ width: 100%;
+}
+/* emulate a headline */
+.wrap_column em strong,
+.wrap_left em strong, .wrap_right em strong, .wrap_center em strong,
+.wrap_box em strong,
+.wrap_info em strong, .wrap_important em strong, .wrap_alert em strong, .wrap_tip em strong, .wrap_help em strong, .wrap_todo em strong, .wrap_download em strong {
+ font-size: 130%;
+ font-weight: bold;
+ font-style: normal;
+ display: block;
+}
+/* emulate a bigger headline with a bottom border */
+.wrap_column em strong em.u,
+.wrap_left em strong em.u, .wrap_right em strong em.u, .wrap_center em strong em.u,
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ font-size: 115%;
+ border-bottom: 1px solid __border__;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+}
+/* different bigger headline for safety notes */
+.wrap_danger em strong em.u, .wrap_warning em strong em.u, .wrap_caution em strong em.u, .wrap_notice em strong em.u, .wrap_safety em strong em.u {
+ font-size: 115%;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+ text-transform: uppercase;
+ border-bottom-width: 0;
+}
+/* change border colour of emulated headlines inside boxes to something more neutral
+ (to match all the different background colours) */
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ border-bottom-color: #999;
+}
+
+
+/* columns
+********************************************************************/
+
+.wrap_left,
+.wrap_column {
+ float: left;
+ margin-right: 1.5em;
+}
+.wrap_right {
+ float: right;
+ margin-left: 1.5em;
+}
+.wrap_center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+/*
+.wrap_column,
+.wrap_left,
+.wrap_right {
+ overflow: hidden;
+}
+*/
+.wrap_container {
+ margin-right: -1.5em;
+}
+
+
+/* alignments
+********************************************************************/
+
+.wrap_leftalign {
+ text-align: left;
+}
+.wrap_centeralign {
+ text-align: center;
+}
+.wrap_rightalign {
+ text-align: right;
+}
+.wrap_justify {
+ text-align: justify;
+}
+
+
+/* box
+********************************************************************/
+
+/* see styles for boxes and notes with icons in style.css */
+
+/*____________ rounded corners ____________*/
+/* (only for modern browsers) */
+
+div.wrap_round {
+ border-radius: 20px;
+ -moz-border-radius: 20px;
+ -webkit-border-radius: 20px;
+ -khtml-border-radius: 20px;
+}
+span.wrap_round {
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -khtml-border-radius: 2px;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_lo {
+ color: __text_neu__;
+ font-size: 85%;
+}
+div.wrap_em {
+ color: #c00;
+ font-weight: bold;
+}
+
+/* see styles for highlighted text in style.css */
+
+
+/* typography
+********************************************************************/
+
+/*____________ fonts ____________*/
+
+div.wrap_sansserif {
+ font-family: Verdana,Tahoma,Geneva,"DejaVu Sans","Bitstream Vera Sans","Liberation Sans", Arial,Helvetica,FreeSans,"Liberation Sans","Nimbus Sans L", sans-serif;
+}
+div.wrap_serif {
+ font-family: Georgia,Garamond,"Palatino Linotype","Book Antiqua",Palatino,Palladio,"URW Palladio L","Liberation Serif",Didot,Gentium,"Bitstream Charter","Century Schoolbook L", "Times New Roman",Times,"Nimbus Roman No9 L","FreeSerif", serif;
+}
+div.wrap_monospace {
+ font-family: Courier,"Courier New",FreeMono,"Nimbus Mono L","Liberation Mono", "Lucida Console",Monaco,"DejaVu Sans Mono","Bitstream Vera Sans Mono", monospace;
+}
+
+/*____________ font size ____________*/
+
+div.wrap_bigger {
+ font-size: 125%;
+}
+div.wrap_muchbigger {
+ font-size: 200%;
+}
+div.wrap_smaller {
+ font-size: 75%;
+}
+
+/*____________ font colours ____________*/
+
+div.wrap_fgred {
+ color: #900;
+}
+div.wrap_fggreen {
+ color: #090;
+}
+div.wrap_fgblue {
+ color: #009;
+}
+div.wrap_fgcyan {
+ color: #099;
+}
+div.wrap_fgviolet {
+ color: #909;
+}
+div.wrap_fgyellow {
+ color: #990;
+}
+div.wrap_fggrey {
+ color: #666;
+}
+div.wrap_fgblack {
+ color: #000;
+}
+
+/* see styles for background colours and white font colour in style.css */
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ indent ____________*/
+
+div.wrap_indent {
+ padding-left: 1.5em;
+}
+
+/*____________ outdent ____________*/
+
+div.wrap_outdent {
+ margin-left: -1.5em;
+}
+
+/*____________ word wrapping in pre ____________*/
+
+divdiv.wrap_prewrap pre {
+ white-space: pre-wrap;
+ word-wrap: break-word;/* for IE < 8 */
+ /* white-space: -moz-pre-wrap; for FF < 3 */
+}
+
+/*____________ spoiler ____________*/
+
+divdiv.wrap_spoiler {
+ margin-bottom: 1.5em;
+}
+/* see rest of spoiler styles in style.css */
+
+/*____________ clear float ____________*/
+
+div.wrap_clear {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ font-size: 1px;
+ visibility: hidden;
+ overflow: hidden;
+}
+
+/*____________ hide ____________*/
+
+div.wrap_hide {
+ display: none;
+}
+
+
+/* STYLE.CSS */
+
+/* box
+********************************************************************/
+
+.wrap_box {
+ background: __background_alt__;
+ color: __text__;
+/*
+ overflow: hidden;
+*/
+}
+div.wrap_box,
+div.wrap_danger, div.wrap_warning, div.wrap_caution, div.wrap_notice, div.wrap_safety {
+ padding: 1em 1em .5em;
+ margin-bottom: 1.5em;
+}
+span.wrap_box,
+span.wrap_danger, span.wrap_warning, span.wrap_caution, span.wrap_notice, span.wrap_safety {
+ padding: 0 .3em;
+}
+
+/*____________ notes with icons ____________*/
+
+/* general styles for all note divs */
+div.wrap_info, div.wrap_important, div.wrap_alert, div.wrap_tip, div.wrap_help, div.wrap_todo, div.wrap_download {
+ padding: 1em 1em .5em 70px;
+ margin-bottom: 1.5em;
+ min-height: 68px;
+ background-position: 10px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html div.wrap_info, * html div.wrap_important, * html div.wrap_alert, * html div.wrap_tip, * html div.wrap_help, * html div.wrap_todo, * html div.wrap_download {
+ height: 68px;
+}
+/* general styles for all note spans */
+span.wrap_info, span.wrap_important, span.wrap_alert, span.wrap_tip, span.wrap_help, span.wrap_todo, span.wrap_download {
+ padding: 0 2px 0 20px;
+ min-height: 20px;
+ background-position: 2px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html span.wrap_info, * html span.wrap_important, * html span.wrap_alert, * html span.wrap_tip, * html span.wrap_help, * html span.wrap_todo, * html span.wrap_download {
+ height: 20px;
+}
+
+/*____________ info ____________*/
+.wrap_info { background-color: #d1d7df; }
+div.wrap_info { background-image: url(../../../wrap/images/note/48/info.png); }
+span.wrap_info { background-image: url(../../../wrap/images/note/16/info.png); }
+
+/*____________ important ____________*/
+.wrap_important { background-color: #ffd39f; }
+div.wrap_important { background-image: url(../../../wrap/images/note/48/important.png); }
+span.wrap_important { background-image: url(../../../wrap/images/note/16/important.png); }
+
+/*____________ alert ____________*/
+.wrap_alert { background-color: #ffbcaf; }
+div.wrap_alert { background-image: url(../../../wrap/images/note/48/alert.png); }
+span.wrap_alert { background-image: url(../../../wrap/images/note/16/alert.png); }
+
+/*____________ tip ____________*/
+.wrap_tip { background-color: #fff79f; }
+div.wrap_tip { background-image: url(../../../wrap/images/note/48/tip.png); }
+span.wrap_tip { background-image: url(../../../wrap/images/note/16/tip.png); }
+
+/*____________ help ____________*/
+.wrap_help { background-color: #dcc2ef; }
+div.wrap_help { background-image: url(../../../wrap/images/note/48/help.png); }
+span.wrap_help { background-image: url(../../../wrap/images/note/16/help.png); }
+
+/*____________ todo ____________*/
+.wrap_todo { background-color: #c2efdd; }
+div.wrap_todo { background-image: url(../../../wrap/images/note/48/todo.png); }
+span.wrap_todo { background-image: url(../../../wrap/images/note/16/todo.png); }
+
+/*____________ download ____________*/
+.wrap_download { background-color: #d6efc2; }
+div.wrap_download { background-image: url(../../../wrap/images/note/48/download.png); }
+span.wrap_download { background-image: url(../../../wrap/images/note/16/download.png); }
+
+
+/*____________ safety notes ____________*/
+
+.wrap_danger {
+ background-color: #c00;
+ color: #fff;
+}
+.wrap_warning {
+ background-color: #f60;
+ color: #000;
+}
+.wrap_caution {
+ background-color: #ff0;
+ color: #000;
+}
+.wrap_notice {
+ background-color: #06f;
+ color: #fff;
+}
+.wrap_safety {
+ background-color: #090;
+ color: #fff;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_hi {
+ background-color: #ff9;
+}
+
+/* typography
+********************************************************************/
+
+/*____________ font colours ____________*/
+
+div.wrap_fgwhite {
+ color: #fff;
+}
+
+/*____________ background colours ____________*/
+
+div.wrap_bgred {
+ background-color: #fcc;
+}
+div.wrap_bggreen {
+ background-color: #cfc;
+}
+div.wrap_bgblue {
+ background-color: #ccf;
+}
+div.wrap_bgcyan {
+ background-color: #9ff;
+}
+div.wrap_bgviolet {
+ background-color: #f9f;
+}
+div.wrap_bgyellow {
+ background-color: #ff9;
+}
+div.wrap_bggrey {
+ background-color: #ccc;
+}
+div.wrap_bgwhite {
+ background-color: #fff;
+}
+div.wrap_bgblack {
+ background-color: #000;
+}
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ spoiler ____________*/
+
+div.wrap_spoiler {
+ background-color: __background__ !important;
+ color: __background__ !important;
+ border: 1px dotted red;
+}
+
+/*____________ only print ____________*/
+
+div.wrap_onlyprint {
+ display: none;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/zero_link.png
new file mode 100644
index 000000000..5610884d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/zero_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/zero_over.png
new file mode 100644
index 000000000..3a14a577e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/zero_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/LEEME.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/LEEME.txt
new file mode 100755
index 000000000..f656fa7de
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/LEEME.txt
@@ -0,0 +1,32 @@
+GORILLA
+(Based on the gorilla icon from the gorilla icon theme by Jakub Steiner)
+
+Tema para S5, creado originalmente por jEsuSdA 8)
+http://www.jesusda.com
+
+Más temas en: http://www.jesusda.com/projects/presentaciones_s5
+
+
+
+Para customizar este tema modifica el archivo CSS:
+
+s5-ultraviolet/ui/default/pretty.css
+
+
+
+Los archivos gráficos referentes al tema están en la carpeta:
+
+/ui/default/pics
+
+
+Puedes personalizar el favicon copiando el tuyo en la carpeta:
+
+/ui/default/pics
+
+con el nombre favicon.ico
+
+
+
+Para cualquier sugerencia e idea, por favor, contacta conmigo a través de mi web. ;)
+
+--jEsuSdA 8) \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/audio_link.png
new file mode 100644
index 000000000..daa740c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/audio_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/audio_on.png
new file mode 100644
index 000000000..cd590aae9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/audio_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/audio_over.png
new file mode 100644
index 000000000..cf537a008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/audio_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/auto_link.png
new file mode 100644
index 000000000..1c2ca4817
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/auto_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/auto_on.png
new file mode 100644
index 000000000..4b0c923b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/auto_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/auto_over.png
new file mode 100644
index 000000000..dbea88975
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/auto_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/backgrnd.png
new file mode 100644
index 000000000..0e48413d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/backgrnd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/blank.gif
new file mode 100755
index 000000000..75b945d25
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/blank.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/delay_link.png
new file mode 100644
index 000000000..c4d99cd57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/delay_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/exit_link.png
new file mode 100644
index 000000000..1bfd38790
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/exit_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/exit_over.png
new file mode 100644
index 000000000..0fdd1c605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/exit_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/fade_link.png
new file mode 100644
index 000000000..482e4d53e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/fade_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/fade_on.png
new file mode 100644
index 000000000..e12561fb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/fade_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/fade_over.png
new file mode 100644
index 000000000..fb8943c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/fade_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/footer.jpg
new file mode 100644
index 000000000..49370dbba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/footer.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/framing.css
new file mode 100755
index 000000000..14d8509e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/framing.css
@@ -0,0 +1,23 @@
+/* The following styles size, place, and layer the slide components.
+ Edit these if you want to change the overall slide layout.
+ The commented lines can be uncommented (and modified, if necessary)
+ to help you with the rearrangement process. */
+
+/* target = 1024x768 */
+
+div#header, div#footer, .slide {width: 100%; top: 0; left: 0;}
+div#header {top: 0; height: 3em; z-index: 1;}
+div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;}
+.slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;}
+div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;}
+div#controls form {position: absolute; bottom: 0; right: 0; width: 100%;
+ margin: 0;}
+#currentSlide {position: absolute; width: 10%; left: 45%; bottom: 1em; z-index: 10;}
+html>body #currentSlide {position: fixed;}
+
+/*
+div#header {background: #FCC;}
+div#footer {background: #CCF;}
+div#controls {background: #BBD;}
+div#currentSlide {background: #FFC;}
+*/
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/header.png
new file mode 100644
index 000000000..929dabba1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/iepngfix.htc
new file mode 100755
index 000000000..bba2db756
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/iepngfix.htc
@@ -0,0 +1,42 @@
+<public:component>
+<public:attach event="onpropertychange" onevent="doFix()" />
+
+<script>
+
+// IE5.5+ PNG Alpha Fix v1.0 by Angus Turnbull http://www.twinhelix.com
+// Free usage permitted as long as this notice remains intact.
+
+// This must be a path to a blank image. That's all the configuration you need here.
+var blankImg = 'ui/default/blank.gif';
+
+var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
+
+function filt(s, m) {
+ if (filters[f]) {
+ filters[f].enabled = s ? true : false;
+ if (s) with (filters[f]) { src = s; sizingMethod = m }
+ } else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")';
+}
+
+function doFix() {
+ if ((parseFloat(navigator.userAgent.match(/MSIE (\S+)/)[1]) < 5.5) ||
+ (event && !/(background|src)/.test(event.propertyName))) return;
+
+ if (tagName == 'IMG') {
+ if ((/\.png$/i).test(src)) {
+ filt(src, 'image'); // was 'scale'
+ src = blankImg;
+ } else if (src.indexOf(blankImg) < 0) filt();
+ } else if (style.backgroundImage) {
+ if (style.backgroundImage.match(/^url[("']+(.*\.png)[)"']+$/i)) {
+ var s = RegExp.$1;
+ style.backgroundImage = '';
+ filt(s, 'crop');
+ } else filt();
+ }
+}
+
+doFix();
+
+</script>
+</public:component> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/index.html
new file mode 100755
index 000000000..39d8f46ad
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/index.html
@@ -0,0 +1,100 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es-es" >
+
+
+<head>
+
+ <title>[Título de la presentación aquí]</title>
+ <!-- metadata -->
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta http-equiv="content-language" content="es" />
+
+ <!--titulo y datos de publicación de la presentación-->
+
+ <meta name="description" content="[Título de la presentación aquí]" />
+
+ <meta name="keywords" content="[keywords aquí]" />
+ <meta name="presdate" content="[Aquí la fecha de publicación en formato aaaammdd]" />
+
+ <meta name="author" lang="es" content="[Nombre del autor de la presentación aquí]" />
+ <meta name="company" content="[Organización del autor de la presentación aquí]" />
+
+ <link rel="shortcut icon" href="ui/default/pics/favicon.ico" />
+
+ <meta name="generator" content="S5" />
+ <meta name="progid" content="quanta+" />
+ <meta name="version" content="S5 · jEsuSdA · 1.1" />
+ <!--Versión adaptada del estandard S5 1.1 por jEsuSdA-->
+
+ <meta name="robots" content="all" />
+
+ <!-- configuration parameters -->
+ <meta name="defaultView" content="slideshow" />
+ <meta name="controlVis" content="hidden" />
+
+ <!-- style sheet links -->
+ <link rel="stylesheet" href="ui/default/slides.css" type="text/css" media="projection" id="slideProj" />
+ <link rel="stylesheet" href="ui/default/outline.css" type="text/css" media="screen" id="outlineStyle" />
+ <link rel="stylesheet" href="ui/default/print.css" type="text/css" media="print" id="slidePrint" />
+ <link rel="stylesheet" href="ui/default/opera.css" type="text/css" media="projection" id="operaFix" />
+
+ <!-- S5 JS -->
+ <script src="ui/default/slides.js" type="text/javascript"></script>
+
+</head>
+
+<body>
+
+ <div class="layout">
+ <div id="controls"><!-- NO EDITAR --></div>
+ <div id="currentSlide"><!-- NO EDITAR --></div>
+
+ <div id="header">
+ <div id="logo"><!-- NO EDITAR --></div>
+ </div>
+
+ </div>
+
+ <div id="footer">
+ <h1>[Lugar/Fecha de la presentación aquí]</h1>
+ <h2>[Título de la presentación aquí]</h2>
+ </div>
+
+
+
+
+<div class="presentation">
+
+ <div class="slide">
+ <h1>[Título de la presentación aquí]</h1>
+ <h3>[Nombre del ponente aquí]</h3>
+ <h4>[Datos extra aquí]</h4>
+ </div>
+
+
+ <div class="slide">
+ <h1>[Título de la diapositiva]</h1>
+
+ <ul>
+ <li>[Punto uno]</li>
+ <li>[Punto dos]</li>
+ <li>[Punto tres]</li>
+ <li>[Punto cuatro]</li>
+ <li>[Punto cinco]</li>
+ </ul>
+
+ <div class="handout">
+
+ [Añade aquí cualquier nota o información que desees mostrar en la versión impresa, pero no en la versión en pantalla]
+
+ </div>
+
+ </div>
+ <!--fin slide-->
+
+</div>
+
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/last_link.png
new file mode 100644
index 000000000..4f158d35d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/last_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/last_over.png
new file mode 100644
index 000000000..a7b629995
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/last_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/list_link.png
new file mode 100644
index 000000000..7e299bb50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/list_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/loop_link.png
new file mode 100644
index 000000000..41e12cb15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/loop_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/loop_on.png
new file mode 100644
index 000000000..2ffcacae1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/loop_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/loop_over.png
new file mode 100644
index 000000000..9fe420153
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/loop_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/next_link.png
new file mode 100644
index 000000000..2b9f44c4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/next_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/next_over.png
new file mode 100644
index 000000000..25788124d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/next_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/notes_link.png
new file mode 100644
index 000000000..bb4a8ae37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/notes_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/notes_over.png
new file mode 100644
index 000000000..c6bfe69fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/notes_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/opera.css
new file mode 100755
index 000000000..9e9d2a3c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/opera.css
@@ -0,0 +1,7 @@
+/* DO NOT CHANGE THESE unless you really want to break Opera Show */
+.slide {
+ visibility: visible !important;
+ position: static !important;
+ page-break-before: always;
+}
+#slide0 {page-break-before: avoid;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/outline.css
new file mode 100755
index 000000000..62db519ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/outline.css
@@ -0,0 +1,15 @@
+/* don't change this unless you want the layout stuff to show up in the outline view! */
+
+.layout div, #footer *, #controlForm * {display: none;}
+#footer, #controls, #controlForm, #navLinks, #toggle {
+ display: block; visibility: visible; margin: 0; padding: 0;}
+#toggle {float: right; padding: 0.5em;}
+html>body #toggle {position: fixed; top: 0; right: 0;}
+
+/* making the outline look pretty-ish */
+
+#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
+#slide0 h1 {padding-top: 1.5em;}
+.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em;
+ border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
+#toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pause_link.png
new file mode 100644
index 000000000..2561cb4a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pause_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pause_on.png
new file mode 100644
index 000000000..2fc9c4a4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pause_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pause_over.png
new file mode 100644
index 000000000..7a7c80ddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pause_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/back-handout-print.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/back-handout-print.png
new file mode 100755
index 000000000..9e49dd625
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/back-handout-print.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/back-slide-print.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/back-slide-print.png
new file mode 100755
index 000000000..e8b5f9d82
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/back-slide-print.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/back_console.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/back_console.png
new file mode 100755
index 000000000..ac1708379
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/back_console.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-foot.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-foot.png
new file mode 100755
index 000000000..e007d2946
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-foot.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-head.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-head.png
new file mode 100755
index 000000000..20c90e79d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-head.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-main.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-main.png
new file mode 100755
index 000000000..28e8eee94
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-main.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-main2.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-main2.png
new file mode 100755
index 000000000..074709b5f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-main2.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/favicon.ico b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/favicon.ico
new file mode 100755
index 000000000..834bd85a5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/favicon.ico
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/logo.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/logo.png
new file mode 100755
index 000000000..b542561d7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/logo.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/table-background.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/table-background.png
new file mode 100755
index 000000000..89a7e4fa2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/table-background.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/table-header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/table-header.png
new file mode 100755
index 000000000..565c6fd87
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/table-header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pretty.css
new file mode 100755
index 000000000..aebdafd61
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pretty.css
@@ -0,0 +1,583 @@
+/* Following are the presentation styles -- edit away! */
+
+body
+{
+ background: #FFF url(pics/background-main.png) top left repeat;
+ color: #5d4e3b; font-size: 2em;
+/* font-family: Trebuchet MS, Arial, Helvetica, sans-serif; */
+ font-family: Arial, Helvetica, sans-serif;
+
+}
+
+:link, :visited
+{
+ text-decoration: none;
+ color: #00C;
+}
+
+
+
+h1, h2, h3, h4
+{
+ font-size: 100%;
+ margin: 0;
+ padding: 0;
+ font-weight: inherit;
+}
+
+h1 abbr
+{
+ font-variant: small-caps;
+}
+
+ul, pre
+{
+ margin: 0;
+ line-height: 1em;
+}
+
+html, body
+{
+ margin: 0;
+ padding: 0;
+}
+
+blockquote, q
+{
+ font-style: italic;
+}
+
+blockquote
+{
+ padding: 0 2em 0.5em;
+ margin: 0 1.5em 0.5em;
+ text-align: center;
+ font-size: 1em;
+}
+
+blockquote p
+{
+ margin: 0;
+}
+
+blockquote i
+{
+ font-style: normal;
+}
+
+blockquote b
+{
+ display: block;
+ margin-top: 0.5em;
+ font-weight: normal;
+ font-size: smaller;
+ font-style: normal;
+}
+
+blockquote b i
+{
+ font-style: italic;
+}
+
+kbd
+{
+ font-weight: bold;
+ font-size: 1em;
+}
+
+sup
+{
+ font-size: smaller;
+ line-height: 1px;
+}
+
+
+ul.urls
+{
+ list-style: none;
+ display: inline;
+ margin: 0;
+}
+
+.urls li
+{
+ display: inline;
+ margin: 0;
+}
+
+.notes
+{
+ display: none;
+}
+
+.external
+{
+ border-bottom: 1px dotted gray;
+}
+
+html>body .external
+{
+ border-bottom: none;
+}
+
+.external:after
+{
+ content: " \274F";
+ font-size: smaller;
+ color: #fff;
+}
+
+.incremental, .incremental *, .incremental *:after
+{
+ color: #fff;
+ visibility: visible;
+}
+
+img.incremental
+{
+ visibility: hidden;
+}
+
+.slide .current
+{
+ color: #fff;
+}
+
+
+/* ============== */
+/* === SLIDES === */
+/* ============== */
+
+.slide code
+{
+ padding: 2px 0.25em;
+ font-weight: bold;
+}
+
+.slide code.bad, code del
+{
+ color: red;
+}
+
+.slide code.old
+{
+ color: silver;
+}
+
+.slide pre
+{
+
+ color: #ffca00;
+ display:block;
+ font-weight:bold;
+ font-family: Arial, Sans-Serif !important;
+ font-size:41.5%;
+ line-height:1.5em;
+ background:#2e3436 url(pics/back_console.png) right bottom no-repeat ;
+ border:5px solid #ccc;
+ padding:1em 1em 1em 1em;
+
+
+}
+
+.slide pre code
+{
+ font-family: Arial, Sans-Serif !important;
+ display:block;
+ margin:0;
+ padding:0;
+}
+
+
+
+.slide ul
+{
+ margin-left: 5%;
+ margin-right: 7%;
+ list-style: disc;
+}
+
+.slide li
+{
+ margin-top: 0.75em;
+ margin-right: 0;
+}
+
+.slide ul ul
+{
+ line-height: 1;
+}
+
+.slide ul ul li
+{
+ margin: .2em;
+ font-size: 85%;
+ list-style: square;
+}
+
+.slide img.leader
+{
+ display: block;
+ margin: 0 auto;
+}
+
+
+/* ========================= */
+/* === HEADER AND FOOTER === */
+/* ========================= */
+
+div#logo
+{
+ position:absolute;
+ top:0%;
+ right:0%;
+ background:url(pics/logo.png) 50% 50% no-repeat;
+ height:200%;
+ width:150px;
+}
+
+div#header, div#footer
+{
+ background: #a80231;
+ color: #FFF;
+}
+
+
+div#header
+{
+ background:url(pics/background-head.png) bottom left no-repeat transparent;
+ line-height: 1px;
+}
+
+div#footer
+{
+ background:#7ea1c9 url(pics/background-foot.png) top left repeat-x;
+ font-size: 0.5em;
+ font-weight: bold;
+ padding: 1em 0;
+}
+
+
+
+
+
+#footer h1, #footer h2
+{
+ display: block;
+ padding: 0 1em;
+}
+
+#footer h2
+{
+ font-style: italic;
+}
+
+
+
+/* ============== */
+/* === CLASES === */
+/* ============== */
+
+div.long
+{
+ font-size: 0.75em;
+}
+
+.slide h1
+{
+ position: absolute;
+ top: 0.7em;
+ left: 87px;
+ z-index: 1;
+ margin: 0;
+ padding: 0.3em 0 0 50px;
+ white-space: nowrap;
+ font-weight: bold;
+ font-size: 150%/1em;
+
+ text-transform: capitalize;
+ color: #fff;
+ background: transparent;
+}
+
+.slide h3
+{
+ font-size: 130%;
+}
+
+/* ================ */
+/* === CONTROLS === */
+/* ================ */
+
+#currentSlide
+{
+ text-align: center;
+ font-size: 0.6em;
+ font-weight:bold;
+ color: #fff;
+}
+
+#slide0
+{
+ padding-top: 3.5em;
+ font-size: 90%;
+}
+
+#slide0 h1
+{
+ position: static;
+ margin: 1em 0 0;
+ padding: 0;
+/* font: bold 2em Helvetica, sans-serif; */
+ font-weight: bold;
+ font-size:2em;
+ white-space: normal;
+ color: #000;
+ background: transparent;
+}
+
+#slide0 h2
+{
+ font-weight: bold;
+ font-style: italic;
+ font-size: 1em;
+ margin: 0.25em;
+}
+
+#slide0 h3
+{
+ margin-top: 1.5em;
+ font-size: 1.5em;
+}
+
+#slide0 h4
+{
+ margin-top: 0;
+ font-size: 1em;
+}
+
+/* ================ */
+/* === JESUSDA === */
+/* ================ */
+
+.first-pic
+{
+
+ float:right;
+ margin-top:-2em;
+}
+
+/* ================ */
+
+.align-center
+{
+ text-align:center;
+}
+/* ================ */
+
+.float-left , .left-column
+{
+ float:left !important;
+ width:49% !important;
+}
+
+.float-right , .right-column
+{
+ float:right !important;
+ width:49% !important;
+}
+/* ================ */
+.fullscreen
+{
+ z-index:1000 !important;
+ position:fixed !important;
+ top:0;
+ left:0;
+ width:100% !important;
+ height:100% !important;
+
+ background: #fff url(pics/background-main.png) top left no-repeat;
+
+ text-align:center;
+ margin-left:-1.65em;
+
+}
+
+.fullscreen h1
+{
+ display:none;
+}
+
+.rotulo
+{
+ font-size:800%;
+ text-align:center;
+ margin-top:-0.05em;
+
+}
+
+.rotulo2
+{
+ font-size:200%;
+ text-align:center;
+ font-weight:bolder;
+ margin-top:-0.05em;
+
+}
+
+.align-center img
+{
+ margin:auto;
+ text-align:center;
+ margin:0;
+}
+
+/* ========================= */
+/* === TABLAS === */
+/* ========================= */
+
+table
+{
+ background:url(pics/table-background.png) bottom left repeat-x #fff;
+ margin-right:1em;
+ font-size:70%;
+ border:1px solid #5d4e3b !important;
+ border-spacing: 0;
+ text-align:center;
+}
+
+table td
+{
+ padding:0.5em;
+ font-size:90%;
+ border:1px solid #5d4e3b !important;
+ border-spacing: 0;
+ text-align:center;
+}
+
+th
+{
+ background:url(pics/table-header.png) bottom left repeat-x #6b5a45;
+ color:#fff;
+}
+
+th a
+{
+ color:#fff !important;
+}
+
+
+
+table caption
+{
+ margin-bottom:1em;
+ margin-top:1em;
+ margin-left:-7em;
+
+
+}
+
+
+display-none
+{
+ display:none;
+}
+
+div#controls {position: absolute; left: 0; bottom: 0; width: 100%; text-align: center; font: bold 1em Verdana, Arial, Helvetica, sans-serif;}
+html>body div#controls {background: transparent; position: fixed; padding: 0; top: auto; text-align: center;}
+#controls #sheet {display: none;}
+#controls #controlForm {height: 32px; width: 100%; text-align: center; vertical-align: middle;}
+#controls #navLinks {border-top: 1px solid #999; overflow: hidden; padding: 0; margin: 0; height: 32px; width: 100%; background-color: #808080; text-align: center; vertical-align: middle; white-space: nowrap;}
+#controls #navLinks ul {margin: 0 auto; padding: 0; height: 32px; width: 500px; white-space: nowrap; text-align: center;}
+#controls #navLinks ul li {list-style: none; display: inline; margin: 0; padding: 0; float: left; height: 32px; width: 32px; text-align: center; background-color: transparent;}
+#controls #navLinks ul li.vr {list-style: none; display: inline; margin: 0px 2px; padding: 0; float: left; height: 32px; width: 1px; text-align: center; background-color: #606060;}
+#controls #navLinks ul li a {margin: 0; padding: 0; float: left; height: 32px; width: 32px; background-color: transparent;}
+
+#controls #navLinks ul li#exit {background: url(exit_link.png) no-repeat top left;}
+#controls #navLinks ul li#exit a:hover {background: url(exit_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#toggle {background: url(toggle_link.png) no-repeat top left;}
+#controls #navLinks ul li#toggle a:hover {background: url(toggle_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#show-notes {background: url(notes_link.png) no-repeat top left;}
+#controls #navLinks ul li#show-notes a:hover {background: url(notes_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#zero {background: url(zero_link.png) no-repeat top left;}
+#controls #navLinks ul li#zero a:hover {background: url(zero_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#prev {background: url(prev_link.png) no-repeat top left;}
+#controls #navLinks ul li#prev a:hover {background: url(prev_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#next {background: url(next_link.png) no-repeat top left;}
+#controls #navLinks ul li#next a:hover {background: url(next_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#last {background: url(last_link.png) no-repeat top left;}
+#controls #navLinks ul li#last a:hover {background: url(last_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#lst {background: url(list_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#fade a.isoff {background: url(fade_link.png) no-repeat top left;}
+#controls #navLinks ul li#fade a.ison {background: url(fade_on.png) no-repeat top right;}
+#controls #navLinks ul li#fade a:hover {background: url(fade_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#audio {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.isoff {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.ison {background: url(audio_on.png) no-repeat top right;}
+#controls #navLinks ul li#audio a:hover {background: url(audio_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#vol {background: url(volume_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#auto a.isoff {background: url(auto_link.png) no-repeat top left;}
+#controls #navLinks ul li#auto a.ison {background: url(auto_on.png) no-repeat top right;}
+#controls #navLinks ul li#auto a:hover {background: url(auto_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#pause a.isoff {background: url(pause_link.png) no-repeat top left;}
+#controls #navLinks ul li#pause a.ison {background: url(pause_on.png) no-repeat top right;}
+#controls #navLinks ul li#pause a:hover {background: url(pause_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#loop a.isoff {background: url(loop_link.png) no-repeat top left;}
+#controls #navLinks ul li#loop a.ison {background: url(loop_on.png) no-repeat top right;}
+#controls #navLinks ul li#loop a:hover {background: url(loop_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#del {background: url(delay_link.png) no-repeat top left;}
+
+#jumplist, #volumelist, #delaylist {padding: 0; margin: 0; width: 32px; height: 32px; cursor: n-resize;}
+
+#guru {position: absolute; visibility: visible; left: 0px; top: 0px; padding: 4px; width: 99%; height: auto; text-align: center; background-color: black; z-index: 10;}
+#guru div {border: solid 3px red; padding: 4px; font-family: monospace; font-size: 60%; width: auto; height: auto; color: red; text-align: center;}
+
+/*
+#currentSlide {white-space: nowrap; text-align: center; margin-bottom: -0.5em; font-size: 0.5em; background-color: transparent; color: #999;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 0; padding: 0; font: bold 2em Verdana, Arial, Helvetica, sans-serif; font-variant: small-caps; text-shadow: 0.1em 0.1em 0.1em #666; white-space: normal; color: #222; background-color: transparent;}
+#slide0 h2 {font: bold italic 1em Arial, Helvetica, sans-serif; margin: 0.25em;}
+#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+*/
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.external {border-bottom: 1px dotted gray;}
+html>body .external {border-bottom: none;}
+.external:after {content: " \274F"; font-size: smaller; color: #999;}
+
+.incremental, .incremental *, .incremental *:after {color: #ccc; visibility: visible;}
+img.incremental, canvas.incremental {visibility: hidden;}
+.slide .current {color: #B02;}
+
+/* diagnostics
+li:after {content: " [" attr(class) "]"; color: #F88;}
+*/
+
+table.piechart, table.barchart, table.linechart { border-spacing: 0.3em 0.15em; }
+table.piechart tr th, table.barchart tr th, table.linechart tr th { white-space: nowrap; }
+table.piechart tr td, table.barchart tr td, table.linechart tr td { vertical-align: top; white-space: nowrap; }
+table.piechart tr td.col, table.barchart tr td.col, table.linechart tr td.col { border-bottom: 1px solid #555; border-right: 1px solid #555; }
+table.fs90 tr td, table.fs90 tr th, div.fs90, pre.fs90, p.fs90 ,ul.fs90 {font-size: 0.9em; }
+table.fs75 tr td, table.fs75 tr th, div.fs75, pre.fs75, p.fs75 ,ul.fs75 {font-size: 0.75em; }
+table.fs66 tr td, table.fs66 tr th, div.fs66, pre.fs66, p.fs66 ,ul.fs66 {font-size: 0.66em; }
+table.fs50 tr td, table.fs50 tr th, div.fs50, pre.fs50, p.fs50 ,ul.fs50 {font-size: 0.5em; }
+
+#soundmanager-debug {position:fixed; top:0px; right:0px; width:30em; height:20em; overflow:auto; border:1px solid red; padding:1em; margin:2em; font-family:"sans serif"; font-size: 12px;color: black; background-color:#f6f6f6; z-index: 100;}
+#soundmanager-debug code {font-size: 11px;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/prev_link.png
new file mode 100644
index 000000000..c31d21350
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/prev_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/prev_over.png
new file mode 100644
index 000000000..6fef4fa52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/prev_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/print.css
new file mode 100755
index 000000000..220083260
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/print.css
@@ -0,0 +1 @@
+/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul { page-break-inside: avoid; visibility: visible !important; } h1 { page-break-after: avoid; } html { width:100%; overflow:hidden; } body { font-size: 12pt; background: white; width:100%; } * { color: black; } #slide0 h1 { font-size: 200%; border: none; margin: 0.5em 0 0.25em; } #slide0 h3 { margin: 0; padding: 0; } #slide0 h4 { margin: 0 0 0.5em; padding: 0; } #slide0 { margin-bottom: 3em; } h1 { border-top: 2pt solid gray; border-bottom: 1px dotted silver; padding:0.2em 0 0.3em 0; } .extra { background: transparent !important; } div.extra, pre.extra, .example { font-size: 10pt; color: #333; } ul.extra a { font-weight: bold; } p.example { display: none; } #header { display: none; } #footer h1 { margin: 0; border-bottom: 1px solid; color: gray; font-style: italic; } #footer h2, #controls { display: none; } div.handout { display:block; border-top: 2px dotted #ccc; background:url(pics/back-handout-print.png) top right no-repeat #fff; min-height:6em; padding-right:6em; margin-bottom:1em; } .slide { display:block; background:url(pics/back-slide-print.png) top right no-repeat #fff; min-height:6em; margin-bottom:1em; } table { display:block; /* display:none; */ font-size:90%; overflow:hidden; margin-top:1em; margin-bottom:1em; } pre , code { margin:0; font-size:1pt; overflow:auto; } img { max-width:100% !important; } /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .layout, .layout * { display: none !important; } \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/s5-core.css
new file mode 100755
index 000000000..86444e041
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/s5-core.css
@@ -0,0 +1,9 @@
+/* Do not edit or override these styles! The system will likely break if you do. */
+
+div#header, div#footer, div#controls, .slide {position: absolute;}
+html>body div#header, html>body div#footer,
+ html>body div#controls, html>body .slide {position: fixed;}
+.handout {display: none;}
+.layout {display: block;}
+.slide, .hideme, .incremental {visibility: hidden;}
+#slide0 {visibility: visible;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/slides.css
new file mode 100755
index 000000000..0786d7dbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/slides.css
@@ -0,0 +1,3 @@
+@import url(s5-core.css); /* required to make the slide show run at all */
+@import url(framing.css); /* sets basic placement and size of slide components */
+@import url(pretty.css); /* stuff that makes the slides look better than blah */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/slides.js
new file mode 100644
index 000000000..510a04c0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/slides.js
@@ -0,0 +1,2812 @@
+// S5 1.3beta7 (18-Apr-2007) advanced version by C. Effenberger
+// Please see http://s5.netzgesta.de/ for more information
+// based on S5 v1.2a1 slides.js -- released into the Public Domain
+// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
+// about all the wonderful and talented contributors to this code!
+// audio extension: soundmanager2 is NOT Public Domain
+// Please see http://www.schillmania.com/projects/soundmanager2/ for information
+
+var undef;
+var slideCSS = '';
+var snum = 0;
+var smax = 1;
+var incpos = 0;
+var number = undef;
+var firstTime = 1;
+var s5mode = true;
+var helpmode = false;
+var defaultView = 'slideshow'; //outline
+var controlVis = 'visible';
+var s5Path = 'lib/plugins/s5reloaded/';
+
+// scalable images extension
+var empx = 0;
+var images = new Array();
+var canvas = new Array();
+var medias = new Array();
+var piecharts = new Array();
+var barcharts = new Array();
+var linecharts = new Array();
+// scalable images extension
+
+// transition extension
+var tranSitions = false;
+var fadeModus = false;
+var fadeDuration = 500;
+var incrDuration = 250;
+var opac = 1;
+var cid = '';
+var nid = '';
+var tid = '';
+var jl = '';
+// transition extension
+
+// autoplay extension
+var autoMatic = false;
+var playLoop = false;
+var playPause = false;
+var autoRun = false;
+var playDelay = 5000;
+var remainDer = 0;
+var incrDelay = 0;
+// autoplay extension
+
+// audio extension
+var sound = new Array();
+var audioSupport = false;
+var audioVolume = 100;
+var audioError = false;
+var swfUnloaded = true;
+var bgSoundItem = 9999;
+var curSoundID = -1;
+// audio extension
+
+// panel extension
+var imgWidth = 32;
+var imgHeight = 32;
+// panel extension
+
+// canvas chart extension
+var canvasSupport = false;
+var ChartData = new Array();
+var colorSlice = new Array();
+var font = document.createElement("img");
+font.setAttribute("src", s5Path+"ui/graphic_support/numeric.png");
+signs = {
+ '0': {sx: 0, sy: 0, sw: 48, sh: 64},
+ '1': {sx: 48, sy: 0, sw: 48, sh: 64},
+ '2': {sx: 96, sy: 0, sw: 48, sh: 64},
+ '3': {sx: 144, sy: 0, sw: 48, sh: 64},
+ '4': {sx: 192, sy: 0, sw: 48, sh: 64},
+ '5': {sx: 240, sy: 0, sw: 48, sh: 64},
+ '6': {sx: 288, sy: 0, sw: 48, sh: 64},
+ '7': {sx: 336, sy: 0, sw: 48, sh: 64},
+ '8': {sx: 384, sy: 0, sw: 48, sh: 64},
+ '9': {sx: 432, sy: 0, sw: 48, sh: 64},
+ '%': {sx: 480, sy: 0, sw: 48, sh: 64},
+ '.': {sx: 528, sy: 0, sw: 24, sh: 64}
+};
+var colorNames= new Array();
+colorNames["black"]="#000000"; colorNames["maroon"]="#800000";
+colorNames["green"]="#008000"; colorNames["olive"]="#808000";
+colorNames["navy"]="#000080"; colorNames["purple"]="#800080";
+colorNames["teal"]="#008080"; colorNames["gray"]="#808080";
+colorNames["silver"]="#C0C0C0"; colorNames["red"]="#FF0000";
+colorNames["lime"]="#00FF00"; colorNames["yellow"]="#FFFF00";
+colorNames["blue"]="#0000FF"; colorNames["fuchsia"]="#FF00FF";
+colorNames["aqua"]="#00FFFF"; colorNames["white"]="#FFFFFF";
+colorNames["aliceblue"]="#F0F8FF"; colorNames["antiquewhite"]="#FAEBD7";
+colorNames["aquamarine"]="#7FFFD4"; colorNames["azure"]="#F0FFFF";
+colorNames["beige"]="#F5F5DC"; colorNames["blueviolet"]="#8A2BE2";
+colorNames["brown"]="#A52A2A"; colorNames["burlywood"]="#DEB887";
+colorNames["cadetblue"]="#5F9EA0"; colorNames["chartreuse"]="#7FFF00";
+colorNames["chocolate"]="#D2691E"; colorNames["coral"]="#FF7F50";
+colorNames["cornflowerblue"]="#6495ED"; colorNames["cornsilk"]="#FFF8DC";
+colorNames["crimson"]="#DC143C"; colorNames["darkblue"]="#00008B";
+colorNames["darkcyan"]="#008B8B"; colorNames["darkgoldenrod"]="#B8860B";
+colorNames["darkgray"]="#A9A9A9"; colorNames["darkgreen"]="#006400";
+colorNames["darkkhaki"]="#BDB76B"; colorNames["darkmagenta"]="#8B008B";
+colorNames["darkolivegreen"]="#556B2F"; colorNames["darkorange"]="#FF8C00";
+colorNames["darkorchid"]="#9932CC"; colorNames["darkred"]="#8B0000";
+colorNames["darksalmon"]="#E9967A"; colorNames["darkseagreen"]="#8FBC8F";
+colorNames["darkslateblue"]="#483D8B"; colorNames["darkslategray"]="#2F4F4F";
+colorNames["darkturquoise"]="#00CED1"; colorNames["darkviolet"]="#9400D3";
+colorNames["deeppink"]="#FF1493"; colorNames["deepskyblue"]="#00BFFF";
+colorNames["dimgray"]="#696969"; colorNames["dodgerblue"]="#1E90FF";
+colorNames["firebrick"]="#B22222"; colorNames["floralwhite"]="#FFFAF0";
+colorNames["forestgreen"]="#228B22"; colorNames["gainsboro"]="#DCDCDC";
+colorNames["ghostwhite"]="#F8F8FF"; colorNames["gold"]="#FFD700";
+colorNames["goldenrod"]="#DAA520"; colorNames["greenyellow"]="#ADFF2F";
+colorNames["honeydew"]="#F0FFF0"; colorNames["hotpink"]="#FF69B4";
+colorNames["indianred"]="#CD5C5C"; colorNames["indigo"]="#4B0082";
+colorNames["ivory"]="#FFFFF0"; colorNames["khaki"]="#F0E68C";
+colorNames["lavender"]="#E6E6FA"; colorNames["lavenderblush"]="#FFF0F5";
+colorNames["lawngreen"]="#7CFC00"; colorNames["lemonchiffon"]="#FFFACD";
+colorNames["lightblue"]="#ADD8E6"; colorNames["lightcoral"]="#F08080";
+colorNames["lightcyan"]="#E0FFFF"; colorNames["lightgoldenrodyellow"]="#FAFAD2";
+colorNames["lightgreen"]="#90EE90"; colorNames["lightgrey"]="#D3D3D3";
+colorNames["lightpink"]="#FFB6C1"; colorNames["lightsalmon"]="#FFA07A";
+colorNames["lightseagreen"]="#20B2AA"; colorNames["lightskyblue"]="#87CEFA";
+colorNames["lightslategray"]="#778899"; colorNames["lightsteelblue"]="#B0C4DE";
+colorNames["lightyellow"]="#FFFFE0"; colorNames["limegreen"]="#32CD32";
+colorNames["linen"]="#FAF0E6"; colorNames["mediumaquamarine"]="#66CDAA";
+colorNames["mediumblue"]="#0000CD"; colorNames["mediumorchid"]="#BA55D3";
+colorNames["ediumpurple"]="#9370D"; colorNames["mediumseagreen"]="#3CB371";
+colorNames["mediumslateblue"]="#7B68EE"; colorNames["mediumspringgreen"]="#00FA9A";
+colorNames["mediumturquoise"]="#48D1CC"; colorNames["mediumvioletred"]="#C71585";
+colorNames["midnightblue"]="#191970"; colorNames["mintcream"]="#F5FFFA";
+colorNames["mistyrose"]="#FFE4E1"; colorNames["moccasin"]="#FFE4B5";
+colorNames["navajowhite"]="#FFDEAD"; colorNames["oldlace"]="#FDF5E6";
+colorNames["olivedrab"]="#6B8E23"; colorNames["orange"]="#FFA500";
+colorNames["orangered"]="#FF4500"; colorNames["orchid"]="#DA70D6";
+colorNames["palegoldenrod"]="#EEE8AA"; colorNames["palegreen"]="#98FB98";
+colorNames["paleturquoise"]="#AFEEEE"; colorNames["palevioletred"]="#DB7093";
+colorNames["papayawhip"]="#FFEFD5"; colorNames["peachpuff"]="#FFDAB9";
+colorNames["peru"]="#CD853F"; colorNames["pink"]="#FFC0CB";
+colorNames["plum"]="#DDA0DD"; colorNames["powderblue"]="#B0E0E6";
+colorNames["rosybrown"]="#BC8F8F"; colorNames["royalblue"]="#4169E1";
+colorNames["saddlebrown"]="#8B4513"; colorNames["salmon"]="#FA8072";
+colorNames["sandybrown"]="#F4A460"; colorNames["seagreen"]="#2E8B57";
+colorNames["seashell"]="#FFF5EE"; colorNames["sienna"]="#A0522D";
+colorNames["skyblue"]="#87CEEB"; colorNames["slateblue"]="#6A5ACD";
+colorNames["slategray"]="#708090"; colorNames["snow"]="#FFFAFA";
+colorNames["springgreen"]="#00FF7F"; colorNames["steelblue"]="#4682B4";
+colorNames["tan"]="#D2B48C"; colorNames["thistle"]="#D8BFD8";
+colorNames["tomato"]="#FF6347"; colorNames["turquoise"]="#40E0D0";
+colorNames["violet"]="#EE82EE"; colorNames["wheat"]="#F5DEB3";
+colorNames["whitesmoke"]="#F5F5F5"; colorNames["yellowgreen"]="#9ACD32";
+var canvas_bgcolor = "";
+var canvas_width = 200;
+var canvas_height = 200;
+var canvas_noshade = 0;
+var canvas_nofill = 0;
+var canvas_noshadow = 0;
+var canvas_htmltext = 0;
+var canvas_imgtext = 0;
+var canvas_notext = 0;
+// canvas chart extension
+
+var s5NotesWindow;
+var s5NotesWindowLoaded = false;
+var previousSlide = 0;
+var presentationStart = new Date();
+var slideStart = new Date();
+
+var countdown = {
+ timer: 0,
+ state: 'pause',
+ start: new Date(),
+ end: 0,
+ remaining: 0
+};
+
+var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
+if(isIE) var notIE7 = parseInt(navigator.appVersion) < 7 ? 1 : 0;
+var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
+var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
+var isS2 = navigator.userAgent.indexOf('Safari') >= 2 ? 1 : 0;
+
+function hasClass(object, className) {
+ if (!object.className) return false;
+ return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
+}
+
+function hasValue(object, value) {
+ if (!object) return false;
+ return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
+}
+
+function removeClass(object,className) {
+ if (!object || !hasClass(object,className)) return;
+ object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
+}
+
+function addClass(object,className) {
+ if (!object || hasClass(object, className)) return;
+ if (object.className) {
+ object.className += ' '+className;
+ } else {
+ object.className = className;
+ }
+}
+
+function changeClass(object,className) {
+ if (!object) return;
+ object.firstChild.className = className;
+}
+
+function GetElementsWithClassName(elementName,className) {
+ var allElements = document.getElementsByTagName(elementName);
+ var elemColl = new Array();
+ for (var i = 0; i< allElements.length; i++) {
+ if (hasClass(allElements[i], className)) {
+ elemColl[elemColl.length] = allElements[i];
+ }
+ }
+ return elemColl;
+}
+
+function isParentOrSelf(element, id) {
+ if (element == null || element.nodeName=='BODY') return false;
+ else if (element.id == id) return true;
+ else return isParentOrSelf(element.parentNode, id);
+}
+
+function nodeValue(node) {
+ var result = "";
+ if (node.nodeType == 1) {
+ var children = node.childNodes;
+ for (var i = 0; i < children.length; ++i) {
+ result += nodeValue(children[i]);
+ }
+ }
+ else if (node.nodeType == 3) {
+ result = node.nodeValue;
+ }
+ return(result);
+}
+
+function slideLabel() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var list = document.getElementById('jumplist');
+ smax = slideColl.length;
+ for (var n = 0; n < smax; n++) {
+ var obj = slideColl[n];
+ var did = 'slide' + n.toString();
+ obj.setAttribute('id',did);
+ var otext = '';
+ var menu = obj.firstChild;
+ if (!menu) continue; // to cope with empty slides
+ while (menu && menu.nodeType == 3) {
+ menu = menu.nextSibling;
+ }
+ if (!menu) continue; // to cope with slides with only text nodes
+ var menunodes = menu.childNodes;
+ for (var o = 0; o < menunodes.length; o++) {
+ otext += nodeValue(menunodes[o]);
+ }
+ list.options[list.length] = new Option(n + ' : ' + otext, n);
+ }
+}
+
+function currentSlide() {
+ var cs, at, fd, ss;
+ if (document.getElementById) {
+ cs = document.getElementById('currentSlide');
+ } else {
+ cs = document.currentSlide;
+ }
+ fd = fadeModus?"F":"&ndash;";
+ ss = audioSupport?"S":"&ndash;";
+ at = (autoMatic?(playPause?"||":(playLoop?"&gt;0":"&gt;|")):"&ndash;&ndash;");
+ cs.innerHTML = '<div id="plink" nowrap="nowrap">' +
+ '<span id="csFade">[' + fd + ss + ']<\/span>&nbsp;' +
+ '<span id="csHere"><strong>' + snum + '<\/strong><\/span>' +
+ '<span id="csSep">\/<\/span>' +
+ '<span id="csTotal">' + (smax-1) + '<\/span>&nbsp;' +
+ '<span id="csAuto">[' + at + ']<\/span>' +
+ '<\/div>';
+
+ if (snum == 0) {
+ cs.style.visibility = 'hidden';
+ } else {
+ cs.style.visibility = 'visible';
+ }
+}
+
+function go(step) {
+ if (document.getElementById('slideProj').disabled || step == 0) return;
+ jl = document.getElementById('jumplist');
+ cid = 'slide' + snum;
+ var ce = document.getElementById(cid);
+ if (incrementals[snum].length > 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ removeClass(incrementals[snum][i], 'current');
+ removeClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ if (step != 'j') {
+ snum += step;
+ lmax = smax - 1;
+ if (snum > lmax) snum = lmax;
+ if (snum < 0) snum = 0;
+ }else {
+ snum = parseInt(jl.value);
+ }
+ nid = 'slide' + snum;
+ var ne = document.getElementById(nid);
+ if (!ne) {
+ ne = document.getElementById('slide0');
+ nid = 'slide0';
+ snum = 0;
+ }
+ if (step < 0) {
+ incpos = incrementals[snum].length
+ }else {
+ incpos = 0;
+ }
+ if (incrementals[snum].length > 0 && incpos == 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ if (hasClass(incrementals[snum][i], 'current')) {
+ incpos = i + 1;
+ }else {
+ addClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ }
+ if (incrementals[snum].length > 0 && incpos > 0) {
+ addClass(incrementals[snum][incpos - 1], 'current');
+ }
+ var guru = document.getElementById('guru');
+ if(guru && snum==0) {
+ guru.style.visibility = 'visible';
+ }else if(guru && snum>0) {
+ guru.style.visibility = 'hidden';
+ }
+ if(tranSitions && s5mode && fadeModus) {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {fadeoutSound(curSoundID,true); } // audio support
+ }
+ changeOpac(0,nid);
+ changeOpac(100,cid);
+ ce.style.visibility = 'visible';
+ shiftOpacity(cid,fadeDuration);
+ window.setTimeout("changeSlides()",fadeDuration);
+ }else {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {stopSound(curSoundID); } // audio support
+ }
+ ce.style.visibility = 'hidden';
+ if (isOp) location.hash = nid;
+ ne.style.visibility = 'visible';
+ finishSlides();
+ }
+}
+
+function changeSlides() {
+ if(nid != cid) changeOpac(100,cid);
+ document.getElementById(cid).style.visibility = 'hidden';
+ document.getElementById(nid).style.visibility = 'visible';
+ if (isOp) location.hash = nid;
+ shiftOpacity(nid,fadeDuration);
+ window.setTimeout("finishSlides()",fadeDuration);
+}
+
+function finishSlides() {
+ jl.selectedIndex = snum;
+ currentSlide();
+ loadNote();
+ permaLink();
+ number = undef;
+ if(sound[getSoundID(nid)]) {
+ playSound(nid); // audio support
+ }else if(sound[bgSoundItem] && curSoundID != bgSoundItem) {
+ playSound(bgSoundItem); // audio support
+ }
+}
+
+function goTo(target) {
+ if (target >= smax || target == snum) return;
+ go(target - snum);
+}
+
+function subgo(step) {
+ if (step > 0) {
+ removeClass(incrementals[snum][incpos - 1],'current');
+ removeClass(incrementals[snum][incpos], 'incremental');
+ if(tranSitions && s5mode && fadeModus) {
+ if(!incrementals[snum][incpos].id) {
+ var tmp = new Date(); tid = "inc" + String(tmp.getTime());
+ incrementals[snum][incpos].id = tid;
+ }else {
+ tid = incrementals[snum][incpos].id;
+ }
+ if(typeof(incrementals[snum][incpos].src) != "undefined" || incrementals[snum][incpos].getContext) {
+ changeOpac(0,tid);
+ addClass(incrementals[snum][incpos],'current');
+ shiftOpacity(tid,incrDuration);
+ setTimeout("nextInc()",incrDuration);
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ } else {
+ incpos--;
+ removeClass(incrementals[snum][incpos],'current');
+ addClass(incrementals[snum][incpos], 'incremental');
+ addClass(incrementals[snum][incpos - 1],'current');
+ loadNote();
+ }
+}
+
+function nextInc() {
+ incpos++;
+ loadNote();
+}
+
+function toggle() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ var guru = document.getElementById('guru');
+ if (!slides.disabled) {
+ stopPlay();
+ if(audioSupport && !swfUnloaded) stopAllSounds();
+ slides.disabled = true;
+ outline.disabled = false;
+ s5mode = false;
+ fontSize(1,'em');
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'visible';
+ }
+ if(guru) guru.style.visibility = 'hidden';
+ } else {
+ slides.disabled = false;
+ outline.disabled = true;
+ s5mode = true;
+ fontScale();
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'hidden';
+ }
+ slideColl[snum].style.visibility = 'visible';
+ if(guru && snum==0) guru.style.visibility = 'visible';
+ }
+}
+
+function showHide(action) {
+ var obj = GetElementsWithClassName('*','hideme')[0];
+ switch (action) {
+ case 's':
+ obj.style.visibility = 'visible';
+ break;
+ case 'h':
+ obj.style.visibility = 'hidden';
+ break;
+ case 'k':
+ if (obj.style.visibility != 'visible') {
+ obj.style.visibility = 'visible';
+ } else {
+ obj.style.visibility = 'hidden';
+ }
+ break;
+ }
+}
+
+function keys(key) {
+ if (!key) {
+ key = event;
+ key.which = key.keyCode;
+ }
+ if (helpmode) {
+ dumpHelpReq();
+ return;
+ }
+ if (key.which == 84 && !isOp) {
+ toggle();
+ return;
+ }
+ if (s5mode) {
+ if (autoMatic) {
+ switch (key.which) {
+ case 70: // f/ading on/off
+ switchFade();
+ break;
+ case 83: // s/ound on/off
+ toggleSounds();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 65: // a/utoplay on/off
+ stopPlay();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 80: // p/ause
+ case 32: // spacebar
+ pausePlay();
+ break;
+ }
+ }else {
+ switch (key.which) {
+ case 8: // backspace = HELP
+ createHelpReq();
+ break;
+ case 10: // return
+ case 13: // enter
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ if(number != undef) {
+ goTo(number);
+ break;
+ }
+ case 32: // spacebar
+ case 34: // page down
+ case 39: // rightkey
+ case 40: // downkey
+ if(number != undef) {
+ go(number);
+ } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ break;
+ case 33: // page up
+ case 37: // leftkey
+ case 38: // upkey
+ if(number != undef) {
+ go(-1 * number);
+ } else if (!incrementals[snum] || incpos <= 0) {
+ go(-1);
+ } else {
+ subgo(-1);
+ }
+ break;
+ case 65: // a/utoplay
+ startPlay();
+ break;
+ case 72: // h
+ case 36: // home
+ goTo(0);
+ break;
+ case 69: // e
+ case 35: // end
+ goTo(smax-1);
+ break;
+ case 70: // f/ade transitions on/off
+ switchFade();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 83: // s/ound support on/off
+ toggleSounds();
+ break;
+ case 27: // escape
+ case 81: // q
+ if(!isOp) byby();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 78: // n
+ createNotesWindow();
+ break;
+ }
+ if (key.which < 48 || key.which > 57) {
+ number = undef;
+ } else {
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
+ }
+ }
+ }
+ return false;
+}
+
+function clicker(e) {
+ number = undef;
+ var target;
+ if (window.event) {
+ target = window.event.srcElement;
+ e = window.event;
+ } else {
+ target = e.target;
+ }
+ if (target.href != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
+ if (!helpmode) {
+ if (!e.which || e.which == 1) {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ }
+ } else {
+ dumpHelpReq();
+ }
+}
+
+function findSlide(hash) {
+ var target = null;
+ var slides = GetElementsWithClassName('*','slide');
+ for (var i = 0; i < slides.length; i++) {
+ var targetSlide = slides[i];
+ if ( (targetSlide.name && targetSlide.name == hash)
+ || (targetSlide.id && targetSlide.id == hash) ) {
+ target = targetSlide;
+ break;
+ }
+ }
+ while(target != null && target.nodeName != 'BODY') {
+ if (hasClass(target, 'slide')) {
+ return parseInt(target.id.slice(5));
+ }
+ target = target.parentNode;
+ }
+ return null;
+}
+
+function slideJump() {
+ if (window.location.hash == null) return;
+ var sregex = /^#slide(\d+)$/;
+ var matches = sregex.exec(window.location.hash);
+ var dest = null;
+ if (matches != null) {
+ dest = parseInt(matches[1]);
+ } else {
+ dest = findSlide(window.location.hash.slice(1));
+ }
+ if (dest != null)
+ go(dest - snum);
+}
+
+function fixLinks() {
+ var thisUri = window.location.href;
+ thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
+ var aelements = document.getElementsByTagName('A');
+ for (var i = 0; i < aelements.length; i++) {
+ var a = aelements[i].href;
+ var slideID = a.match('\#slide[0-9]{1,2}');
+ if ((slideID) && (slideID[0].slice(0,1) == '#')) {
+ var dest = findSlide(slideID[0].slice(1));
+ if (dest != null) {
+ if (aelements[i].addEventListener) {
+ aelements[i].addEventListener("click", new Function("e",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "if (e.preventDefault) e.preventDefault();"), true);
+ } else if (aelements[i].attachEvent) {
+ aelements[i].attachEvent("onclick", new Function("",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "event.returnValue = false;"));
+ }
+ }
+ }
+ }
+}
+
+function externalLinks() {
+ if (!document.getElementsByTagName) return;
+ var anchors = document.getElementsByTagName('a');
+ for (var i=0; i<anchors.length; i++) {
+ var anchor = anchors[i];
+ if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
+ anchor.target = '_blank';
+ addClass(anchor,'external');
+ }
+ }
+}
+
+function permaLink() {
+ document.getElementById('plink').href = window.location.pathname + '#slide' + snum;
+}
+
+function createControls() {
+ var controlsDiv = document.getElementById("controls");
+ if (!controlsDiv) return;
+ var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
+ var hideDiv, hideList = '';
+ if (controlVis == 'hidden') {
+ hideDiv = hider;
+ } else {
+ hideList = hider;
+ }
+ if(isOp) {
+ var str = '';
+ }else {
+ var str = '<a accesskey="t" id="sheet" title="toggle CSS" href="javascript:toggle();">&plusmn;<\/a>';
+ }
+ if(isIE) {
+ var tmp = "move around&xA0;until the color&xA0;change to red!";
+ }else if(isS2) {
+ var tmp = "move around\r\nuntil the color\r\nchange to red!";
+ }else {
+ var tmp = "move around until color change to red!";
+ }
+ if(isIE) {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] for keyboard help!"><ul>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst" style="vertical-align: middle; width: 160px;"><select style="cursor: auto; width: 160px; height: auto;" id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del" style="vertical-align: middle; width: 52px;"><select style="cursor: auto; width: 52px; height: auto;" id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul><\/div><\/form>';
+ }else {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] or double click this area for keyboard help!" ondblclick="createHelpReq();"><ul>' +
+ '<li id="exit"><a href="javascript:byby();" accesskey="q" title="exit Show"><\/a><\/li>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li class="vr"><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst"><a id="list" style="cursor:wait;" title="' + tmp + '"><\/a><select id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="fadeLinks" class="vr"><\/li>' +
+ '<li id="fade"><a class="isoff" href="javascript:switchFade();" accesskey="f" title="Transions"><\/a><\/li>' +
+ '<li id="audioLinks" class="vr"><\/li>' +
+ '<li id="audio"><a class="isoff" href="javascript:toggleSounds();" accesskey="s" title="Sounds" ><\/a><\/li>' +
+ '<li id="vol"><a id="volume" style="cursor:wait;" title="' + tmp + '"><\/a><select id="volumelist" title="select Volume" onchange="setVolume();"><option value="100">100<\/option><option value="90">90<\/option><option value="80">80<\/option><option value="70">70<\/option><option value="60">60<\/option><option value="50">50<\/option><option value="40">40<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="10">10<\/option><option value="0">0<\/option><\/select><\/li>' +
+ '<li id="autoLinks" class="vr"><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del"><a id="delay" style="cursor:wait;" title="' + tmp + '"><\/a><select id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul>' +
+ '<a href="http://s5.netzgesta.de" target="_blank" title="S5 Reloaded"><img style="position: absolute; right: 0; bottom: 0;" src="data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAYAAAASYli2AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAYpSURBVHjaYvz//z8DOYCRkZEZRAEx0Ij/f2HiAAHEgqYIpACkkB1J7g8Q/wLRIJ1QNSB5fiDmAOLvQKHPQPoHSB4ggFiQDGMCUnxALAPECkAsBLIdiD8A8SMgfghU8wlqkTgQK1ZVVWldv3792fr16y8D+c9AhgMEECPIy1DDRIDYAojdzMzMWNXV1UG2/v/y5Qvzw4cPP587d24/kH8Gar/uwoULQ+/cufNFXFyciZmZ+UVmZuZKoFmvAQII5kJOIDbi4uKK2Llz53EbG5vP6GGWn5+vMWnSpJtA5jcg5v327Rtnc3PzfSD79+rVq2WBNBtIHUAAwQzkAWKzBQsWnIUZFhISovXmzZsfkpKSDD09PY8kJCR+QtWCguGvrKwsz7Rp07Q4ODh+srCwgILiH0gSIIBgBrICsUBoaCgorBiANgqvXbtWDMg8AcQf9+7d+x0o9xbI/gJV/3fVqlUvmJiY/gIdcaWhoYETahEDQADBDPwNxO9h3gNpBiq6f/HiRbWjR4+yvnr16grQNbeh6kCWsxkYGIhClT8yNDQUgyYhBoAAYoIKfgXi06mpqUowQ+vr6x+uW7fu0suXL8+uWbOGS0BAwB7kC6jXvqmoqLDIyclxzZo1S4udnR2WtBgAAggWyyCXSgOxZUxMjGpWVtY7S0vLr8iRsnnzZl4/P7/DQCYoYtSA2DApKUkVGNNPDh06dBrIvwU06xNAAMEM5AIKqAOxCjQsmHl5eXWdnJx4N2zYcB4prd4CUpfwJRuAAGJCimULoGYpbm5uZ5DBnz9/5tq4caPWkSNHeJEc+g0aTFzfv3/nACabjzk5OW8FBQVloLmHASCAYJECUiTg7+//HJiQTzY2NsrfvXv3n7m5+T5YMgJGEkjDS2gY/pKRkeHt7Ow0Bsb0v9+/fz+HxTJAAMG8DHKFLTC9aRUXF79BT9Qgw4CWHAAy70FdYgjEDgkJCTpWVlYMQBfeAaaMPqBZbwECCGYgMzQGQSleCehS0X///jEDvf9lxYoVoOTyAIjfANX+BqrlBrL1gLFf09vb+0FaWvoHMBctA6USUKQABBAjrPiCliKg7AOKIG5ougLlju9Ipc1foDJWqMWGhYWFtsBg4RISEnrg5uY2BWQgQACxIBkGMkQKijmRfPwXWuI8ASp7DQ1vEP4DDO8PwBzzDJheT0CLPQaAAEJOh0o8zAzeihwMiv+gGZ0B4sz/bIwM797/YTh1/wfDIWj5qAfMmtFnzpz5ICIiwqKoqPgjKChoOtCs5wABhJyXpUCGzddgOIethJ71jEFi1nNwgQrKz8zv37//097eDop15qVLl0pAzWAACCAWhEMYOJFdduELA++b3wxsTIwMfzmYGH6xMDG8gYYpKAg+cnJy/gB6VwuYZFiA7E+wvAwQQCy46ozexwzG17+BYx6UVE4B8Vmo68CRFR0dDQo3UAHBBUwJ4lCLGAACCNnAv4zQxAkCxbIMZ0EuBIYb98EPDFo3voGTzjOogVzArGf969cvNmC2+wssHD7BDAQIIBakmHwPDPy3MAMNeBhgpfbbVEkGhqQbDJaXvjI8BPJB4jz79u37DcwlP+fPn38NuTwECCBkA1+8+8Nwtusxg+STHwwcP/8z8EuwMXA1KjBcBSlwEmRgBhrID/U2O7QMBIEHxsbGkrAwBAggmIGgNMT64AfDWyB+By0EQMVZlC0/wwsXQYa38hzgCGGBWv5ZU1OT4c+fP8yLFi1SA3r5Haw8BAggmIGg5KBpJ8BgeOYTg8S3f2DN/OxMDNwgw0AKnv0EJ+avsITu7u6+EZqzQEHwHFqaMwAEEAtShS/pLcTwrU+Z4QwsyQANOwIL06tfGV5BqwmQWoGKigoLYJnJvWPHjhstLS169vb2M0DqAAIIVh6CXHT/9ndIawEUITCXgUDrQwbGbe8YjkJdAzZQVVVV/t69e8LAgtUYaNgxWKQABBByacMHzfTK9gIMYkBZpj//GT4c+8gAKm1AsfseqPYPtHTXAtaEacBqlgHoyq+srKw3XV1dFwHlvwEEECNyYwmp3cIJjbUf0DbLP7RGEg+0bcMCjQxQzH8BWQgQQIzktr5wAYAAYmKgMgAIMAAp8Fx3osz1lgAAAABJRU5ErkJggg==" width="20" height="32" alt="S5" \/><\/a>' +
+ '<\/div><\/form>';
+ }
+ if (controlVis == 'hidden') {
+ var hidden = document.getElementById('navLinks');
+ } else {
+ var hidden = document.getElementById('jumplist');
+ }
+ addClass(hidden,'hideme');
+}
+
+function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
+ if (!s5mode && !isOp) return false;
+ var hScreen = screen.width; var vScreen = screen.height;
+ var vWindow = window.outerHeight; var hWindow = window.outerWidth;
+ if (isOp && s5mode && defaultView=='slideshow' && ((hScreen != hWindow) || (vScreen != vWindow))) {
+ toggle();
+ return false;
+ }
+ if (isOp && !s5mode && ((hScreen != hWindow) || (vScreen != vWindow))) return false;
+ if (isOp && !s5mode && (hScreen == hWindow) && (vScreen == vWindow)) toggle();
+ var vScale = 48; // both yield 16 (the usual browser default) at 1024x768
+ var hScale = 64; // perhaps should auto-calculate based on theme's declared value?
+ if (window.innerHeight) {
+ var vSize = window.innerHeight;
+ var hSize = window.innerWidth;
+ } else if (document.documentElement.clientHeight) {
+ var vSize = document.documentElement.clientHeight;
+ var hSize = document.documentElement.clientWidth;
+ } else if (document.body.clientHeight) {
+ var vSize = document.body.clientHeight;
+ var hSize = document.body.clientWidth;
+ } else {
+ var vSize = 700; // assuming 1024x768, minus chrome and such equals 8:5
+ var hSize = 1024; // these do not account for kiosk mode or Opera Show
+ }
+ var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
+ extendImgSizes(newSize); // scalable images extension
+ extendCanSizes(newSize); // scalable canvas extension
+ extendObjSizes(newSize); // scalable object extension
+ fontSize(newSize,"px");
+ if(!isS2 || firstTime==0) {
+ generateCanvas(); // dynamic canvas extension
+ }
+ if (isGe) { // hack to counter incremental reflow bugs
+ var obj = document.getElementsByTagName('body')[0];
+ obj.style.visibility = 'hidden';
+ obj.style.display = 'none';
+ obj.style.display = 'block';
+ obj.style.visibility = 'visible';
+ changeOpac(100,'slide' + snum);
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("fixReflow()",10);
+ }else {
+ setListPos(); // invisible select extension
+ }
+}
+
+function fixReflow() {
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("finishReflow()",10);
+}
+function finishReflow() {
+ setListPos(); // invisible select extension
+}
+
+function fontSize(val,fmt) {
+ var value = val + fmt;
+ if (!(s5ss = document.getElementById('s5ss'))) {
+ if (!document.createStyleSheet) {
+ document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
+ s5ss.setAttribute('media','screen, projection');
+ s5ss.setAttribute('id','s5ss');
+ } else {
+ document.createStyleSheet();
+ document.s5ss = document.styleSheets[document.styleSheets.length - 1];
+ }
+ }
+ if (!(document.s5ss && document.s5ss.addRule)) {
+ while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
+ s5ss.appendChild(document.createTextNode('html {font-size: ' + value + ' !important;}'));
+ } else {
+ document.s5ss.addRule('html','font-size: ' + value + ' !important;');
+ }
+}
+
+function windowChange() {
+ fontScale();
+}
+
+function notOperaFix() {
+ slideCSS = document.getElementById('slideProj').href;
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ slides.setAttribute('media','screen');
+ outline.disabled = true;
+ if (isGe) {
+ slides.setAttribute('href','null'); // Gecko fix
+ slides.setAttribute('href',slideCSS); // Gecko fix
+ }
+ if ((isIE && notIE7) && document.styleSheets && document.styleSheets[0]) {
+ document.styleSheets[0].addRule('img', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('div', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('.slide', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ }
+}
+
+function getIncrementals(obj) {
+ var incrementals = new Array();
+ if (!obj)
+ return incrementals;
+ var children = obj.childNodes;
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ if (hasClass(child, 'incremental')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'incremental');
+ for (var j = 0; j < child.childNodes.length; j++) {
+ if (child.childNodes[j].nodeType == 1) {
+ addClass(child.childNodes[j], 'incremental');
+ }
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ removeClass(child,'incremental');
+ }
+ }
+ if (hasClass(child, 'show-first')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'show-first');
+ if (child.childNodes[isGe].nodeType == 1) {
+ removeClass(child.childNodes[isGe], 'incremental');
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ }
+ }
+ incrementals = incrementals.concat(getIncrementals(child));
+ }
+ return incrementals;
+}
+
+function createIncrementals() {
+ var incrementals = new Array();
+ for (var i = 0; i < smax; i++) {
+ incrementals[i] = getIncrementals(document.getElementById('slide'+i));
+ }
+ return incrementals;
+}
+
+function trap(e) {
+ if (!e) {
+ e = event;
+ e.which = e.keyCode;
+ }
+ try {
+ modifierKey = e.ctrlKey || e.altKey || e.metaKey;
+ }
+ catch(e) {
+ modifierKey = false;
+ }
+ return modifierKey || e.which == 0;
+}
+
+// notes extension
+function noteLabel() { // Gives notes id's to match parent slides
+ var notes = GetElementsWithClassName('div','notes');
+ for (var i = 0; i < notes.length; i++) {
+ var note = notes[i];
+ var id = 'note' + note.parentNode.id.substring(5);
+ note.setAttribute('id',id);
+ }
+ resetElapsedSlide();
+ resetRemainingTime();
+ window.setInterval('updateElaspedTime()', 1000);
+}
+
+function createNotesWindow() { // creates a window for our notes
+ if (!s5NotesWindow || s5NotesWindow.closed) { // Create the window if it doesn't exist
+ s5NotesWindowLoaded = false;
+ // Note: Safari has a tendency to ignore window options preferring to default to the settings of the parent window, grr.
+ s5NotesWindow = window.open(s5Path+'ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0');
+ }
+ if (s5NotesWindowLoaded) { // Load the current note if the Note HTML has loaded
+ loadNote();
+ } else { // Keep trying...
+ window.setTimeout('createNotesWindow()', 50);
+ }
+}
+
+function loadNote() {
+// Loads a note into the note window
+ var notes = nextNotes = '<em class="disclaimer">There are no notes for this slide.</em>';
+ if (document.getElementById('note' + snum)) {
+ notes = document.getElementById('note' + snum).innerHTML;
+ }
+ if (document.getElementById('note' + (snum + 1))) {
+ nextNotes = document.getElementById('note' + (snum + 1)).innerHTML;
+ }
+
+ var jl = document.getElementById('jumplist');
+ var slideTitle = jl.options[jl.selectedIndex].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex) ? ' (' + jl.selectedIndex + '/' + (smax - 1) + ')' : '');
+ if (incrementals[snum].length > 0) {
+ slideTitle += ' <small>[' + incpos + '/' + incrementals[snum].length + ']</small>';
+ }
+ if (jl.selectedIndex < smax - 1) {
+ var nextTitle = jl.options[jl.selectedIndex + 1].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex + 1) ? ' (' + (jl.selectedIndex + 1) + '/' + (smax - 1) + ')' : '');
+ } else {
+ var nextTitle = '[end of slide show]';
+ }
+
+ if (s5NotesWindow && !s5NotesWindow.closed && s5NotesWindow.document) {
+ s5NotesWindow.document.getElementById('slide').innerHTML = slideTitle;
+ s5NotesWindow.document.getElementById('notes').innerHTML = notes;
+ s5NotesWindow.document.getElementById('next').innerHTML = nextTitle;
+ s5NotesWindow.document.getElementById('nextnotes').innerHTML = nextNotes;
+ }
+ resetElapsedSlide();
+}
+
+function minimizeTimer(id) {
+ var obj = s5NotesWindow.document.getElementById(id);
+ if (hasClass(obj,'collapsed')) {
+ removeClass(obj,'collapsed');
+ } else {
+ addClass(obj,'collapsed');
+ }
+}
+
+function resetElapsedTime() {
+ presentationStart = new Date();
+ slideStart = new Date();
+ updateElaspedTime();
+}
+
+function resetElapsedSlide() {
+ if (snum != previousSlide) {
+ slideStart = new Date();
+ previousSlide = snum;
+ updateElaspedTime();
+ }
+}
+
+function updateElaspedTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var now = new Date();
+ var ep = s5NotesWindow.document.getElementById('elapsed-presentation');
+ var es = s5NotesWindow.document.getElementById('elapsed-slide');
+ ep.innerHTML = formatTime(now.valueOf() - presentationStart.valueOf());
+ es.innerHTML = formatTime(now.valueOf() - slideStart.valueOf());
+}
+
+function resetRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var startField = s5NotesWindow.document.getElementById('startFrom');
+ startFrom = readTime(startField.value);
+ countdown.remaining = startFrom * 60000; // convert to msecs
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var timeLeft = formatTime(countdown.remaining);
+ tl.innerHTML = timeLeft;
+}
+
+function updateRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var now = new Date();
+ if (countdown.state == 'run') {
+ countdown.remaining = countdown.end - now;
+ }
+ tl.style.color = '';
+ tl.style.backgroundColor = '';
+ if (countdown.remaining >= 0) {
+ var timeLeft = formatTime(countdown.remaining);
+ removeClass(tl,'overtime');
+ if (countdown.remaining < 300000) {
+ tl.style.color = 'rgb(' + (255-Math.round(countdown.remaining/2000)) + ',0,0)';
+ tl.style.backgroundColor = 'rgb(255,255,' + (Math.round(countdown.remaining/2000)) + ')';
+ }
+ } else {
+ var timeLeft = '-' + formatTime(-countdown.remaining);
+ addClass(tl,'overtime');
+ }
+ tl.innerHTML = timeLeft;
+}
+
+function toggleRemainingTime() {
+ if (countdown.state == 'pause') countdown.state = 'run'; else countdown.state = 'pause';
+ if (countdown.state == 'pause') {
+ window.clearInterval(countdown.timer);
+ }
+ if (countdown.state == 'run') {
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ countdown.timer = window.setInterval('updateRemainingTime()', 1000);
+ }
+}
+
+function alterRemainingTime(amt) {
+ var change = amt * 60000; // convert to msecs
+ countdown.end += change;
+ countdown.remaining += change;
+ updateRemainingTime();
+}
+
+function formatTime(msecs) {
+ var time = new Date(msecs);
+
+ var hrs = time.getUTCHours() + ((time.getUTCDate() -1) * 24); // I doubt anyone will spend more than 24 hours on a presentation or single slide but just in case...
+ hrs = (hrs < 10) ? '0'+hrs : hrs;
+ if (hrs == 'NaN' || isNaN(hrs)) hrs = '--';
+
+ var min = time.getUTCMinutes();
+ min = (min < 10) ? '0'+min : min;
+ if (min == 'NaN' || isNaN(min)) min = '--';
+
+ var sec = time.getUTCSeconds();
+ sec = (sec < 10) ? '0'+sec : sec;
+ if (sec == 'NaN' || isNaN(sec)) sec = '--';
+
+ return hrs + ':' + min + ':' + sec;
+}
+
+function readTime(val) {
+ var sregex = /:/;
+ var matches = sregex.exec(val);
+ if (matches == null) {
+ return val;
+ } else {
+ var times = val.split(':');
+ var hours = parseInt(times[0]);
+ var mins = parseInt(times[1]);
+ var total = (hours * 60) + mins;
+ return total;
+ }
+}
+// notes extension
+
+// startup process
+function createSlideShow() {
+ defaultCheck();
+ if(!isIE) createDetector(); // (degrade IE) scalable images extension
+ if(opac!=0 || isIE) { // &&!isIE (degrade IE)
+ tranSitions = false;
+ fadeModus = false;
+ }
+ if(tranSitions && document.getElementById && document.createElement){
+ createProgress();
+ var nop=document.getElementById('StartupControl');
+ nop.onload = dumpProgress;
+ }else {
+ startup();
+ showAll();
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+ }
+}
+
+function defaultCheck() {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'defaultView') {
+ defaultView = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'controlVis') {
+ controlVis = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'tranSitions') {
+ tranSitions = (allMetas[i].content == "true") ? true : false;
+ fadeModus = (tranSitions == true) ? true : false;
+ }
+ if (allMetas[i].name == 'fadeDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ fadeDuration = Math.max(200,Math.min(tmp,2000));
+ }
+ if (allMetas[i].name == 'incrDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ incrDuration = Math.max(50,Math.min(tmp,500));
+ }
+ if (allMetas[i].name == 'autoMatic') {
+ autoMatic = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playLoop') {
+ playLoop = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playDelay') {
+ var tmp = parseInt(allMetas[i].content);
+ playDelay = Math.max(5,Math.min(tmp,90))*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ }
+ if (allMetas[i].name == 'audioSupport') {
+ audioSupport = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'audioVolume') {
+ var tmp = parseInt(allMetas[i].content);
+ audioVolume = Math.max(0,Math.min(tmp,100));
+ }
+ if (allMetas[i].name == 'audioError') {
+ audioError = (allMetas[i].content == "true") ? true : false;
+ }
+ }
+}
+
+function createProgress() {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "StartupProgress";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=100)";
+ }else {
+ pg.style.opacity = 1.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/progress.gif)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+
+ var im = document.createElement('img');
+ im.id = "StartupControl";
+ im.src = s5Path+"ui/graphic_support/blank.gif?" + new Date().valueOf();
+ document.getElementsByTagName("body")[0].appendChild(im);
+}
+
+function startup() {
+ createControls(); // hallvord
+ slideLabel();
+ incrementals = createIncrementals();
+ noteLabel(); // [SI:060104] must follow slideLabel()
+ loadNote();
+ fixLinks();
+ externalLinks();
+ fontScale();
+ if (!isOp) {
+ if(isIE) {
+ document.getElementById('lst').style.backgroundImage = 'none';
+ document.getElementById('del').style.backgroundImage = 'none';
+ }else {
+ document.getElementById('audio').style.backgroundImage = 'none';
+ }
+ notOperaFix();
+ }else if(isOp) {
+ var obj = document.getElementById('exit');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('exit').style.opacity = 0.5;
+ obj = document.getElementById('toggle');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('toggle').style.opacity = 0.5;
+ document.getElementById('jumplist').style.visibility = 'hidden';
+ document.getElementById('list').style.visibility = 'hidden';
+ document.getElementById('lst').style.opacity = 0.5;
+ obj = document.getElementById('audio');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('audio').style.opacity = 0.5;
+ document.getElementById('volumelist').style.visibility = 'hidden';
+ document.getElementById('volume').style.visibility = 'hidden';
+ document.getElementById('vol').style.opacity = 0.5;
+ document.getElementById('delaylist').style.visibility = 'hidden';
+ document.getElementById('delay').style.visibility = 'hidden';
+ document.getElementById('del').style.opacity = 0.5;
+ }
+ slideJump();
+ if (defaultView == 'outline') toggle();
+ document.onkeyup = keys;
+ document.onkeypress = trap;
+ document.onclick = clicker;
+}
+
+function preloadImgages() {
+ var temp = '';
+ var objects = document.getElementsByTagName('img');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].src != '') {
+ temp = new Image();
+ temp.src = objects[i].src;
+ }
+ }
+}
+
+function showAll() {
+ var obj1 = GetElementsWithClassName('div','presentation')[0];
+ if(!obj1) var obj1 = GetElementsWithClassName('ol','presentation')[0];
+ var obj2 = GetElementsWithClassName('div','layout')[0];
+ if(!obj1){}else {obj1.style.display = 'block'};
+ if(!obj2){}else {obj2.style.display = 'block'};
+}
+
+function dumpProgress() {
+ document.body.removeChild(document.getElementById('StartupControl'));
+ startup();
+ preloadImgages();
+ showAll();
+ createSoundManagerScript();
+ shiftOpacity('StartupProgress',1000);
+ window.setTimeout("removeProgress()",1000);
+}
+
+function removeProgress() {
+ document.body.removeChild(document.getElementById('StartupProgress'));
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+}
+function panelSetup() {
+ if(playPause) {
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ if(playLoop) {
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ if(audioSupport && !isIE && !isOp) {
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ }
+ if(fadeModus && !isIE) {
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ if(autoMatic) {
+ var obj = document.getElementById('auto'); changeClass(obj,'ison');
+ startPlay();
+ }
+ if(audioVolume && !isIE && !isOp) {
+ var idx = 0;
+ if(audioVolume >= 95 && audioVolume <= 100) {idx = 0;}
+ else if(audioVolume >= 85 && audioVolume < 95) {idx = 1;}
+ else if(audioVolume >= 75 && audioVolume < 85) {idx = 2;}
+ else if(audioVolume >= 65 && audioVolume < 75) {idx = 3;}
+ else if(audioVolume >= 55 && audioVolume < 65) {idx = 4;}
+ else if(audioVolume >= 45 && audioVolume < 55) {idx = 5;}
+ else if(audioVolume >= 35 && audioVolume < 45) {idx = 6;}
+ else if(audioVolume >= 25 && audioVolume < 35) {idx = 7;}
+ else if(audioVolume >= 15 && audioVolume < 25) {idx = 8;}
+ else if(audioVolume >= 5 && audioVolume < 15) {idx = 9;}
+ else {idx = 10;}
+ document.getElementById('volumelist').selectedIndex = idx;
+ }
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+}
+// startup process
+
+// shutdown process
+function byby() {
+ stopPlay();
+ if(tranSitions && fadeModus && s5mode && !isOp) {
+ fadeoutSound(curSoundID,true); // audio support
+ var pg = document.createElement('div');
+ pg.id = "GoodBy";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=0)";
+ }else {
+ pg.style.opacity = 0.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/finish.gif)";
+ document.getElementsByTagName("body")[0].appendChild(pg);
+ shiftOpacity('GoodBy',1000);
+ window.setTimeout("history.back()",1000);
+ }else {
+ stopSound(curSoundID);
+ history.back();
+ }
+}
+// shutdown process
+
+// scalable images extension
+function createDetector() {
+ var em = document.createElement('div');
+ em.id='EMSizeControl'; em.style.position="absolute"; em.style.left="-999px";
+ em.style.width="1em"; em.style.height="1em"; em.style.opacity=0.0;
+ document.getElementsByTagName("body")[0].appendChild(em);
+ var nop=document.getElementById('EMSizeControl');
+ if(!nop||findPosX(nop)!=-999) {}else {
+ opac=document.getElementById('EMSizeControl').style.opacity;
+ empx=document.getElementById('EMSizeControl').offsetHeight;
+ document.body.removeChild(document.getElementById('EMSizeControl'));
+ var objects = document.getElementsByTagName('img');
+ var j = 0; var i = 0; var k = 0; var d; var obj;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ images[j] = objects[i];
+ ++j;
+ }
+ }
+ var objects = document.getElementsByTagName('canvas'); j = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ canvas[objects[i].id] = objects[i];
+ if(j==0) {
+ if(objects[i].getContext) {
+ canvasSupport = true;
+ }
+ ++j;
+ }
+ }
+ }
+ if(canvasSupport!=true) {
+ for (d in canvas) {
+ try {
+ canvas[d].setAttribute("width",1);
+ canvas[d].setAttribute("height",1);
+ } catch (e) {
+ }
+ }
+ }
+ var objects = document.getElementsByTagName('table');
+ j = 0; k = 0; l = 0; var w; var h; var tmp; var cnt;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^piechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ piecharts[j] = objects[i];
+ em = piecharts[j].getAttribute("summary");
+ if(em != "") em = "," + em;
+ piecharts[j].setAttribute("summary", w + "," + h + em);
+ ++j;
+ }
+ }
+ }
+ if(objects[i].className.match(/^barchart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ barcharts[k] = objects[i];
+ em = barcharts[k].getAttribute("summary");
+ if(em != "") em = "," + em;
+ barcharts[k].setAttribute("summary", w + "," + h + em);
+ ++k;
+ }
+ }
+ }
+ if(objects[i].className.match(/^linechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ linecharts[l] = objects[i];
+ em = linecharts[l].getAttribute("summary");
+ if(em != "") em = "," + em;
+ linecharts[l].setAttribute("summary", w + "," + h + em);
+ ++l;
+ }
+ }
+ }
+ }
+ objects = document.getElementsByTagName('object'); j = 0; i = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ medias[j] = objects[i]; ++j;
+ if(!isIE) {
+ if(objects[i].getAttributeNode("classid")) objects[i].removeAttributeNode(objects[i].getAttributeNode("classid"));
+ if(objects[i].getAttributeNode("codebase")) objects[i].removeAttributeNode(objects[i].getAttributeNode("codebase"));
+ }
+ }
+ }
+ }
+}
+function extendImgSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < images.length; i++) {
+ w=images[i].getAttribute("width",0);
+ h=images[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ images[i].style.width=Math.floor(w*q)+"px";
+ images[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+
+function extendCanSizes(f) {
+ if(empx>0 && canvasSupport) {
+ var q = (f/empx); var w = 0; var h = 0; var tmp = ""; var cnt; var obj;
+ for(var i=0; i < piecharts.length; i++) {
+ if(piecharts[i].getAttribute("summary")) {
+ tmp = piecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = piecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < barcharts.length; i++) {
+ if(barcharts[i].getAttribute("summary")) {
+ tmp = barcharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = barcharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < linecharts.length; i++) {
+ if(linecharts[i].getAttribute("summary")) {
+ tmp = linecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = linecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ }
+}
+function extendObjSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < medias.length; i++) {
+ w=medias[i].getAttribute("width",0);
+ h=medias[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ medias[i].style.width=Math.floor(w*q)+"px";
+ medias[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+function findPosX(obj) {
+ var posLeft = 0;
+ while (obj.offsetParent) {
+ posLeft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ return posLeft;
+}
+function findPosY(obj) {
+ var posTop = 0;
+ while (obj.offsetParent) {
+ posTop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ return posTop;
+}
+// scalable images extension
+
+// canvas chart extension
+function deg2rad(degrees) {
+ return Math.PI *degrees/180;
+}
+function rad2deg(radians) {
+ return 180.0 *radians/Math.PI;
+}
+function circle_point_x(radians, diameter) {
+ var x = Math.cos(radians)*(diameter/2);
+ return x;
+}
+function circle_point_y(radians, diameter) {
+ var y = Math.sin(radians)*(diameter/2);
+ return y;
+}
+function roundTo(val,dig) {
+ var num = val;
+ if (val > 8191 && val < 10485) {
+ val = val-5000;
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ num = num+5000;
+ } else {
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ }
+ return num;
+}
+function searchColor(value) {
+ for (var dat in colorNames) {
+ if(dat==value) return colorNames[dat];
+ }
+ return false;
+}
+function scanColor(value) {
+ if(value.match(/^#[0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var val1 = value.substr(1,1).toLowerCase();
+ var val2 = value.substr(2,1).toLowerCase();
+ var val3 = value.substr(3,1).toLowerCase();
+ value = '#' + val1 + val1 + val2 + val2 + val3 + val3;
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var tmp = searchColor(value.toLowerCase());
+ if(!tmp) {}else{value = tmp;}
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ value = '#000000';
+ }
+ return value.toLowerCase();
+}
+function hex2rgb(val,trans) {
+ if(val.length==7) {
+ var tp1 = Math.max(0,Math.min(parseInt(val.substr(1,2),16),255));
+ var tp2 = Math.max(0,Math.min(parseInt(val.substr(3,2),16),255));
+ var tp3 = Math.max(0,Math.min(parseInt(val.substr(5,2),16),255));
+ return 'rgba(' + tp1 + ',' + tp2 + ',' + tp3 + ',' + trans + ')';
+ }
+}
+function trim(str) {
+ return (str.replace(/\s+$/,"").replace(/^\s+/,""));
+}
+function roundedRect(ctx,x,y,width,height,radius){
+ ctx.beginPath();
+ ctx.moveTo(x,y+radius);
+ ctx.lineTo(x,y+height-radius);
+ ctx.quadraticCurveTo(x,y+height,x+radius,y+height);
+ ctx.lineTo(x+width-radius,y+height);
+ ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius);
+ ctx.lineTo(x+width,y+radius);
+ ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
+ ctx.lineTo(x+radius,y);
+ ctx.quadraticCurveTo(x,y,x,y+radius);
+ ctx.closePath();
+}
+function drawString(ctx, text, fc, tx, ty) {
+ var xp = 0; var c = "";
+ ctx.beginPath();
+ for (var i = 0; i < text.length; i++) {
+ c = text[i];
+ ctx.drawImage(font, signs[c].sx, signs[c].sy, signs[c].sw, signs[c].sh, tx+xp, ty, signs[c].sw*fc, signs[c].sh*fc);
+ xp += (signs[c].sw*fc);
+ }
+ ctx.closePath();
+}
+function strokeString(ctx, txt, col, fh, tx, ty) {
+ var fw = fh*0.666666; var lw = fh*0.125;
+ var ls = lw/2; var cr = lw; var xp = 0;
+ ctx.lineCap = "round"; ctx.lineJoin = "round"
+ ctx.lineWidth = lw; ctx.strokeStyle = col;
+ for (var i = 0; i < txt.length; i++) {
+ strokeSymbol(ctx, txt[i], ls, tx+xp, ty, fw, fh);
+ xp += (txt[i]!="."?fw+cr:(fw/2)+cr);
+ }
+}
+function strokeSymbol(ctx, symbol, fc, cx, cy, cw, ch) {
+ ctx.beginPath();
+ switch (symbol) {
+ case "0":
+ ctx.moveTo(cx+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+(cw/2),(cw/2)-fc,deg2rad(180),0, false);
+ ctx.arc(cx+(cw/2),(cy+ch)-(cw/2),(cw/2)-fc,0,deg2rad(180), false);
+ ctx.closePath();
+ break;
+ case "1":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.moveTo(cx+(cw*0.666666),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.666666),cy+fc);
+ ctx.lineTo(cx+(cw*0.25),cy+(ch*0.25));
+ break;
+ case "2":
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.8));
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+fc,cy+ch-fc);
+ ctx.arc(cx+(cw/2),cy+(cw*0.425),(cw*0.425)-fc,deg2rad(45),deg2rad(-180), true);
+ break;
+ case "3":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-90),deg2rad(180), false);
+ break;
+ case "4":
+ ctx.moveTo(cx+(cw*0.75),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.5),cy+ch-fc);
+ break;
+ case "5":
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-80),deg2rad(180), false);
+ break;
+ case "6":
+ ctx.moveTo(cx+fc,cy+ch-(cw*0.5)-fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-180),deg2rad(180), false);
+ ctx.bezierCurveTo(cx+fc,cy+fc,cx+fc,cy+fc,cx+(cw*0.9)-fc,cy+fc);
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ break;
+ case "7":
+ ctx.moveTo(cx+(cw*0.5),cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.25)-fc);
+ break;
+ case "8":
+ ctx.moveTo(cx+(cw*0.92)-fc,cy+(cw*0.59));
+ ctx.arc(cx+(cw/2),cy+(cw*0.45),(cw*0.45)-fc,deg2rad(25),deg2rad(-205), true);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-135),deg2rad(-45), true);
+ ctx.closePath();
+ ctx.moveTo(cx+(cw*0.79),cy+(ch*0.47));
+ ctx.lineTo(cx+(cw*0.21),cy+(ch*0.47));
+ break;
+ case "9":
+ ctx.moveTo(cx+cw-fc,cy+(cw*0.5));
+ ctx.arc(cx+(cw/2),cy+(cw*0.5),(cw*0.5)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.bezierCurveTo(cx+cw-fc,cy+ch-fc,cx+cw-fc,cy+ch-fc,cx+(cw*0.1)+fc,cy+ch-fc);
+ break;
+ case "%":
+ ctx.moveTo(cx+fc,cy+(ch*0.75));
+ ctx.lineTo(cx+cw-fc,cy+(ch*0.25));
+ ctx.moveTo(cx+(cw*0.505),cy+(cw*0.3));
+ ctx.arc(cx+(cw*0.3),cy+(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.moveTo(cx+(cw*0.905),cy+ch-(cw*0.3));
+ ctx.arc(cx+(cw*0.7),cy+ch-(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ break;
+ case ".":
+ ctx.moveTo(cx+(cw*0.25),cy+ch-fc-fc);
+ ctx.arc(cx+(cw*0.25),cy+ch-fc-fc,fc,deg2rad(0),deg2rad(360), false);
+ ctx.closePath();
+ break;
+ default:
+ break;
+ }
+ ctx.stroke();
+}
+function drawBar(ctx,x,y,width,height,color,value,textdiv){
+ var rw = width/2; var rh = rw/2;
+ height = Math.max(height,rw);
+ var dh = Math.max(height-(2*rh),0.1); var S2L;
+ var xx = rw/8; var yy = rh/4;
+ var yo = rh/2; y = y - yy;
+ if(canvas_noshadow <= 0 && canvas_noshade <= 0) {
+ ctx.save();
+ S2L = ctx.createRadialGradient(x+rw+rh,y+height-rw+yy+rh,0,x+rw,y+height-rw+yy,rw);
+ S2L.addColorStop(0, 'rgba(0,0,0,0.5)');
+ S2L.addColorStop(0.7, 'rgba(0,0,0,0.25)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = S2L;
+ ctx.scale(1,0.5);
+ ctx.translate(xx,y+height+yy);
+ if(isOp){
+ ctx.fillRect(x,y+yy+height-width,width,width);
+ }else {
+ ctx.arc(x+rw,y+yy+height-width,width,0,deg2rad(360), false);
+ ctx.fill();
+ }
+ ctx.restore();
+ }else if(canvas_noshadow <= 0 && canvas_noshade >= 1) {
+ ctx.fillStyle = 'rgba(0,0,0,0.2)';
+ ctx.fillRect(x+yo,y+rh+yo+yo,width,dh);
+ }
+
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x,y+(height/2),x+width,y+(height/2));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.75)');
+ S2L.addColorStop(0.2, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.3, 'rgba(0,0,0,0)');
+ S2L.addColorStop(0.5, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.35)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.1)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.strokeStyle = S2L;
+ ctx.stroke();
+ }else {
+ ctx.fillStyle = color;
+ ctx.fillRect(x,y+rh+yo,width,dh);
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var bw = width; var bh = bw/4;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ var c; var w;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,x+(width/2)-(bw/2),y,bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext <= 0) {
+ strokeString(ctx, value + "%","rgba(48,48,48,1)", th, x+(width/2)-(w/2), y+((bh-th)/2));
+ }else {
+ drawString(ctx, value + "%", tf, x+(width/2)-(w/2), y+((bh-th)/2.2));
+ }
+ }else {
+ var bh = bw/3; var th = roundTo(bh*0.75,0);
+ roundedRect(ctx,x,y,bw,bh,bh/4);
+ ctx.fill();
+ var obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = x + "px";
+ obj.style.top = y+((bh-th)/2.2) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+
+ }
+}
+function drawLine(ctx,x,y,width,height,dist,array,factor,color,fill){
+ if(fill <= 0){
+ var style = hex2rgb(color,0.5);
+ ctx.lineJoin = "miter";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height);
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.lineTo(x+width,y+height);
+ ctx.lineTo(x,y+height);
+ ctx.closePath();
+ ctx.fillStyle = style;
+ ctx.fill();
+ }
+ ctx.lineJoin = "round";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height-(array[0]*factor));
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.strokeStyle = color;
+ ctx.stroke();
+}
+function setDataURL(cid) {
+ if(cid.toDataURL) {
+ var obj = document.getElementById(cid.id + "_link");
+ if(obj) {
+ obj.setAttribute("title", "To Data URL");
+ obj.setAttribute("target", "_blank");
+ obj.setAttribute("href", cid.toDataURL());
+ }
+ }
+}
+function get_input(dataobj,canvasobj,linechart) {
+ var table = document.getElementById(dataobj);
+ var canvas = document.getElementById(canvasobj);
+ var row; var clm; var cnt = 0; var val = 0; var nme = ""; var col = "";
+ if(canvas.getContext) {
+ canvas_width = parseInt(canvas.style.width);
+ canvas_height = parseInt(canvas.style.height);
+ if(canvas_width >= 16 && canvas_height >= 16) {
+ var tmp = table.getAttribute("summary");
+ canvas_noshade = 0; canvas_noshadow = 0;
+ canvas_notext = 0; canvas_imgtext = 0;
+ canvas_htmltext = 0; canvas_nofill = 0;
+ if(tmp.search(/noshadow/) != -1) canvas_noshadow = 1;
+ if(tmp.search(/noshade/) != -1) canvas_noshade = 1;
+ if(tmp.search(/nofill/) != -1) canvas_nofill = 1;
+ if(tmp.search(/notext/) != -1) canvas_notext = 1;
+ if(tmp.search(/htmltext/) != -1) canvas_htmltext = 1;
+ if(tmp.search(/imgtext/) != -1) canvas_imgtext = 1;
+ if(table.getAttribute("bgcolor")) {
+ canvas_bgcolor = scanColor(table.getAttribute("bgcolor"));
+ }
+ ChartData = new Array(); colorSlice = new Array();
+ if(table.getElementsByTagName("tr")[0].getElementsByTagName("th")[0]) cnt = 1;
+ for(var r = cnt; r < table.getElementsByTagName("tr").length; r++) {
+ row = table.getElementsByTagName("tr")[r];
+ clm = row.getElementsByTagName("td").length;
+ if(row.getElementsByTagName("td")[0].getAttribute("bgcolor")) {
+ col = scanColor(row.getElementsByTagName("td")[0].getAttribute("bgcolor")); val = 0;
+ nme = trim(row.getElementsByTagName("td")[1].innerHTML.replace(/<[^>]+>/g,""));
+ if(!linechart) {
+ if(clm > 3) {
+ for(var z = 2; z < clm; z++) {
+ val += parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ }else {
+ val = parseFloat(row.getElementsByTagName("td")[2].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ if(!isNaN(val) && val > 0 && nme != '') {
+ colorSlice[r-cnt] = col; ChartData[nme] = Math.abs(val);
+ }else {
+ break;
+ }
+ }else {
+ val = 0; i = 0;
+ if(clm > 3 && nme != '') {
+ ChartData[r-cnt] = new Array();
+ colorSlice[r-cnt] = col;
+ for(var z = 2; z < clm; z++) {
+ val = Math.abs(parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,"")));
+ if(!isNaN(val) && val >= 0) {
+ ChartData[r-cnt][i] = val; i++;
+ }else {
+ ChartData[r-cnt][i] = 0; i++;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }
+ }
+}
+function setPieChart(canvasobj,textobj) {
+ var cd = (Math.min(canvas_width,canvas_height)/110)*100;
+ var cp = cd*0.1; var cr = cd/2;
+ var sr = cr*0.93; var cw = cd+cp; var ch = cw;
+ var cx = (cd/2)+(cp/2); var cy = cx; var ct = 0;
+ for (var data in ChartData) {
+ ct += ChartData[data];
+ }
+ var poc = ct/100;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ }
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,cw,ch);
+ }else {
+ ctx.clearRect(0,0,cw,ch);
+ }
+ if(canvas_noshadow <= 0) {
+ if(!isOp) {
+ ctx.beginPath();
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),cr,cx+(cr*0.1),cy+(cr*0.1),sr*0.9);
+ B2B.addColorStop(0, 'rgba(0,0,0,0)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.arc(cx+(cr*0.1),cy+(cr*0.1),cr,0,deg2rad(360), false);
+ ctx.closePath();
+ ctx.fillStyle = B2B;
+ ctx.fill();
+ }else {
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),0,cx+(cr*0.1),cy+(cr*0.1),cr);
+ B2B.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(0.87, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = B2B;
+ ctx.fillRect(0,0,cw,ch);
+ }
+ }
+ var val = 0; var deg = 0; var idx = 0; var data;
+ for (data in ChartData) {
+ val = ChartData[data]; sdeg = deg;
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ ctx.beginPath();
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr,sdeg,edeg, false);
+ ctx.lineTo(cx,cy);
+ ctx.closePath();
+ ctx.fillStyle = colorSlice[(idx++)];
+ ctx.fill();
+ }
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ var W2T = ctx.createLinearGradient(cp*2,cp*2,cx,cy);
+ W2T.addColorStop(0, 'rgba(255,255,255,0.8)');
+ W2T.addColorStop(1, 'rgba(255,255,255,0)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.fillStyle = W2T;
+ ctx.fill();
+ ctx.beginPath();
+ var T2B = ctx.createLinearGradient(cx,cy,cw-(cp*2),ch-(cp*2));
+ T2B.addColorStop(0, 'rgba(0,0,0,0)');
+ T2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.fillStyle = T2B;
+ ctx.fill();
+ ctx.beginPath();
+ var B2T = ctx.createLinearGradient(cx,cy,cw-(cp*1.9),ch-(cp*1.9));
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.strokeStyle = B2T;
+ ctx.stroke();
+ ctx.beginPath();
+ var T2W = ctx.createLinearGradient(cx,cy,(cp*1.9),(cp*1.9));
+ T2W.addColorStop(0, 'rgba(255,255,255,0)');
+ T2W.addColorStop(1, 'rgba(255,255,255,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.strokeStyle = T2W;
+ ctx.stroke();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var mpos = 0; var per = 0; var gx = 0;
+ var gy = 0; var tx = 0; var ty = 0;
+ var obj = ""; var w = 0; var c = 0;
+ var bw = cr*0.45; var bh = cr*0.125;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext >= 1) {
+ bw = (cr*0.365);
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ for (data in ChartData) {
+ val = ChartData[data];
+ sdeg = deg; mpos = deg+(((val/2)/ct)*deg2rad(360));
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ per = roundTo(val/poc,2);
+ gx = circle_point_x(mpos, cd);
+ gy = circle_point_y(mpos, cd);
+ tx = parseFloat((cx+(2*Math.floor(cx + gx)))/3);
+ ty = (cy+(2*Math.floor(cy + gy)))/3;
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext >= 1) {
+ drawString(ctx, per + "%", tf, tx-(w/2), ty-(th/1.8));
+ }else {
+ strokeString(ctx, per + "%","rgba(48,48,48,1)", th, tx-(w/2), ty-(th/2));
+ }
+ }else {
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = (tx-(bw/2)) + "px";
+ obj.style.top = ty-(th/1.8) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+ }
+ }
+ }
+}
+function setBarChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9; var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05; var ph = canvas_height*0.05;
+ var cm = 0; var ct = 0;
+ for (var data in ChartData) {
+ cm = Math.max(cm,ChartData[data]);
+ ct += ChartData[data];
+ }
+ var hf = ih/cm; var bs = colorSlice.length;
+ var bw = iw/(bs*1.1); var poc = ct/100;
+ var th = roundTo((bw/3)*0.75,0);
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ var obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ var cc = ""; var bh = 0; var idx = 0; var t = 0; per = 0;
+ for (var data in ChartData) {
+ per = roundTo(ChartData[data]/poc,2);
+ bh = ChartData[data]*hf;
+ drawBar(ctx,pw+(t*(bw*1.1)),ph+ih-bh,bw,bh,colorSlice[(idx++)],per,textdiv);
+ t++;
+ }
+ }
+}
+function setLineChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9;
+ var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05;
+ var ph = canvas_height*0.05;
+ var cm = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ cm = Math.max(cm,ChartData[i][j]);
+ }
+ }
+ var hf = (ih*0.95)/cm; var bw = iw;
+ var dw = iw/(ChartData[0].length-1)
+ var dh = ih/(ChartData[0].length-1)
+ var ps = Math.min(pw,ph); lw = ps/4;
+ var B2T;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_noshadow <= 0) {
+ B2T = ctx.createLinearGradient(pw+ps,ph+ih+1,pw+ps+ps,ph+ih+1);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps,ph+ih);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.lineTo(pw+ps+ps,ph+ih);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+ps+ps,ph+ih,pw+ps+ps,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps+ps,ph+ih);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+ps+iw,ph+ih+ps);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.closePath();
+ ctx.fill();
+ var B2T = ctx.createLinearGradient(pw+iw+1,ph+ps,pw+iw+1,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.35)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps);
+ ctx.lineTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+iw,ph+ps+ps,pw+iw+ps,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.35)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+iw+ps,ph+ih+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = lw/2;
+ ctx.strokeStyle = "rgba(255,255,255,0.25)";
+ if(canvas_nofill <= 0) {
+ ctx.fillStyle = "rgba(240,240,240,0.8)";
+ ctx.strokeStyle = "rgba(255,255,255,1)";
+ ctx.fillRect(pw,ph,iw,ih);
+ }
+ for (var i = 0; i < ChartData[0].length-1; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph);
+ ctx.lineTo(pw+(i*dw),ph+ih);
+ ctx.stroke();
+ }
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw,ph+(i*dh));
+ ctx.lineTo(pw+iw,ph+(i*dh));
+ ctx.stroke();
+ }
+ ctx.lineWidth = lw;
+ var cc = ""; var bh = 0; var idx = 0; var t = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ t = Math.max(t,ChartData[i][j]);
+ }
+ bh = t*hf; cc = colorSlice[(idx++)];
+ drawLine(ctx,pw,ph+ih-bh,bw,bh,dw,ChartData[i],hf,cc,canvas_nofill);
+ }
+ ctx.beginPath();
+ ctx.moveTo(pw,ph);
+ ctx.lineTo(pw,ph+ih);
+ ctx.lineTo(pw+iw+(lw/2),ph+ih);
+ ctx.strokeStyle = "rgba(48,48,48,1)";
+ ctx.stroke();
+ ctx.lineWidth = lw/2;
+ B2T = ctx.createLinearGradient(pw,ph+ih,pw,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,1)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.strokeStyle = B2T;
+ for (var i = 0; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph+ih);
+ ctx.lineTo(pw+(i*dw),ph+ih+ps);
+ ctx.stroke();
+ }
+ B2T = ctx.createLinearGradient(pw-ps,ph,pw,ph);
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,1)');
+ ctx.strokeStyle = B2T;
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw-ps,ph+(i*dh));
+ ctx.lineTo(pw,ph+(i*dh));
+ ctx.stroke();
+ }
+ }
+}
+function generateCanvas() {
+ if(canvasSupport) {
+ var canvasID; var tdataID; var textID;
+ var tmp; var dat; var i; var j;
+ for(i=0; i < piecharts.length; i++) {
+ tmp = piecharts[i].id.split("_");
+ tdataID = piecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setPieChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < barcharts.length; i++) {
+ tmp = barcharts[i].id.split("_");
+ tdataID = barcharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setBarChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < linecharts.length; i++) {
+ tmp = linecharts[i].id.split("_");
+ tdataID = linecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID,true);
+ if(colorSlice.length > 0) {
+ if(ChartData.length == colorSlice.length) {
+ setLineChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ }
+}
+// canvas chart extension
+
+// invisible select extension
+function setListPos(opt) {
+ if(!isIE) { //(degrade IE)
+ var ref = document.getElementById('list');
+ var x = findPosX(ref); var y = findPosY(ref);
+ var obj = document.getElementById('jumplist');
+ obj.style.position = 'fixed'; obj.style.left = x + 'px'; obj.style.top = y + 'px';
+ var vol = document.getElementById('volumelist');
+ ref = document.getElementById('volume');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ vol.style.position = 'fixed'; vol.style.left = x + 'px'; vol.style.top = y + 'px';
+ var del = document.getElementById('delaylist');
+ ref = document.getElementById('delay');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ del.style.position = 'fixed'; del.style.left = x + 'px'; del.style.top = y + 'px';
+ var pnl = document.getElementById('navLinks');
+ }
+ if(opt) {
+ if(isIE) {
+ //(degrade IE)
+ //pnl.style.filter = "alpha(opacity=80)";
+ }else {
+ obj.style.opacity = 0.0;
+ vol.style.opacity = 0.0;
+ del.style.opacity = 0.0;
+ pnl.style.opacity = 0.8;
+ }
+ }
+}
+// invisible select extension
+
+// transition extension
+function switchFade() {
+ if(tranSitions && s5mode && fadeModus) {
+ fadeModus = false;
+ playDelay = playDelay-(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'isoff');
+ }else if(tranSitions && s5mode && !fadeModus) {
+ fadeModus = true;
+ playDelay = playDelay+(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ currentSlide();
+}
+function opacity(ids, opacStart, opacEnd, millisec) {
+ var speed = Math.round(millisec / 100);
+ var timer = 0;
+ if(opacStart > opacEnd) {
+ for(var i = opacStart; i >= opacEnd; i--) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ } else if(opacStart < opacEnd) {
+ for(var i = opacStart; i <= opacEnd; i++) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ }
+}
+function changeOpac(opacity, ids) {
+ var obj = document.getElementById(ids);
+ if (isIE) {
+ obj.style.filter = "alpha(opacity=" + opacity + ")";
+ } else {
+ obj.style.opacity = (opacity / 100);
+ }
+}
+function shiftOpacity(ids, millisec) {
+ if(document.getElementById(ids).style.opacity != '') {
+ var currentOpac = document.getElementById(ids).style.opacity * 100;
+ } else {
+ var currentOpac = 0;
+ }
+ if(currentOpac == 0) {
+ opacity(ids, currentOpac, 100, millisec);
+ } else if(currentOpac > 0) {
+ opacity(ids, currentOpac, 0, millisec);
+ }
+}
+// transition extension
+
+// autoplay extension
+function autoPlay() {
+ if (s5mode && autoMatic && !playPause) {
+ if ((snum >= (smax-1)) && playLoop) {
+ goTo(0);
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }else if ((snum >= (smax-1)) && !playLoop) {
+ stopPlay();
+ }else {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ if (incrementals[snum].length >0) {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = parseInt(playDelay/(incrementals[snum].length+1));
+ remainDer = parseInt(playDelay-(incrDelay*incrementals[snum].length));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ } else {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = incrDuration;
+ remainDer = parseInt(playDelay-(incrementals[snum].length*incrDuration));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }
+ }
+}
+function autoPlayIncr() {
+ if (incpos < incrementals[snum].length) {
+ subgo(1);
+ autoRun = setTimeout('autoPlayIncr();',incrDelay);
+ }else {
+ autoRun = setTimeout('nop();',remainDer);
+ }
+}
+function nop() {
+ // no operation dummy
+}
+function togglePlay() {
+ if (autoRun && s5mode) {
+ stopPlay();
+ }else if (!autoRun && s5mode) {
+ startPlay();
+ }
+}
+function stopPlay() {
+ if (autoRun && s5mode) {
+ clearTimeout(autoRun); autoRun = null;
+ autoMatic = false; playPause = false; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'isoff');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ currentSlide();
+ }
+}
+function startPlay() {
+ if (!autoRun && s5mode) {
+ playPause = false; autoMatic = true; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'ison');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ autoRun = setTimeout('autoPlay();',playDelay);
+ currentSlide();
+ }
+}
+function pausePlay() {
+ if (s5mode && autoMatic) {
+ if (playPause) {
+ playPause = false; autoRun = setTimeout('autoPlay();',playDelay);
+ var obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ }else {
+ if (autoRun){
+ clearTimeout(autoRun); autoRun = null; playPause = true;
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+ }
+}
+function switchLoop() {
+ if(s5mode) {
+ if (playLoop) {
+ playLoop = false;
+ var obj = document.getElementById('loop'); changeClass(obj,'isoff');
+ }else {
+ playLoop = true;
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+}
+function setDelay() {
+ var val = document.getElementById('delaylist');
+ if(s5mode) {
+ var delay = Math.max(5,Math.min(parseInt(val.value),300));
+ playDelay = (fadeModus == true) ? ((delay*1000)+(2*fadeDuration)) : (delay*1000);
+ }
+}
+// autoplay extension
+
+// audio extension
+function createSoundManagerScript() {
+ if(typeof soundManager=="undefined") {
+ onerrorSM2();
+ }else {
+ var script=document.createElement('SCRIPT');
+ var tx=document.createTextNode("soundManager.createMovie();");
+ script.appendChild(tx);
+ document.getElementsByTagName("body")[0].appendChild(script);
+ }
+}
+//soundManager.onload = function() {
+function onloadSM2() {
+ if(!isIE) { //(degrade IE)
+ swfUnloaded = false;
+ preloadSounds();
+ }
+}
+//soundManager.onerror = function() {
+function onerrorSM2() {
+ if(typeof soundManager!="undefined") {
+ soundManager.destruct;
+ delete soundManager;
+ }
+ audioSupport = false; swfUnloaded = true;
+ if(audioError && !isIE && !isOp) {
+ var dv = document.createElement('div'); dv.id = "guru";
+ var d2=document.createElement('div'); dv.appendChild(d2);
+ var tx=document.createTextNode('Guru Meditation - SoundManager failed to load/initialize!');
+ d2.appendChild(tx); document.getElementById('slide0').appendChild(dv);
+ }
+}
+function audioSetup() {
+ if(sound[0]) {
+ playSound(0);
+ }else if(sound[bgSoundItem] && !sound[0]) {
+ playSound(bgSoundItem);
+ }
+}
+function fadeoutSound(ids, option) {
+ if(curSoundID >= 0 && !swfUnloaded) {
+ if(isNaN(ids)) {
+ if(ids == "bgSound") {
+ var cnum = parseInt(bgSoundItem);
+ }else {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && ids == sound[i]["id"]) {
+ var cnum = i;
+ break;
+ }
+ }
+ }
+ }else {
+ var cnum = ids;
+ ids = sound[cnum]["id"];
+ }
+ var vol = getMaxVolume(sound[cnum]["volume"]);
+ var millisec = fadeDuration;
+ var speed = Math.round(millisec / vol);
+ var timer = 0;
+ for(var i = vol; i > 0; i--) {
+ setTimeout("fadeout(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ if(option) setTimeout("stopSound('"+ids+"')",millisec);
+ }
+}
+function fadeout(volume, id) {
+ soundManager.setVolume(id,volume);
+}
+function stopSound(ids) {
+ var sid;
+ if(isNaN(ids)) {
+ sid = ids;
+ }else if(sound[ids]) {
+ sid = sound[ids]["id"];
+ }
+ if(sid!='' && curSoundID >= 0) {
+ soundManager.stop(sid);
+ curSoundID = -1;
+ }
+}
+function toggleSounds() {
+ if(audioSupport && !swfUnloaded) {
+ stopAllSounds();
+ }else if (!audioSupport && !swfUnloaded) {
+ allowSounds();
+ }
+}
+function allowSounds() {
+ if(!swfUnloaded) {
+ audioSupport = true;
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ currentSlide();
+ }
+}
+function stopAllSounds() {
+ if(curSoundID >= 0) {
+ stopSound(curSoundID);
+ }else {
+ soundManager.stopAll();
+ curSoundID = -1;
+ }
+ audioSupport = false;
+ var obj = document.getElementById('audio'); changeClass(obj,'isoff');
+ currentSlide();
+}
+function playSound(id) {
+ if(audioSupport && !swfUnloaded) {
+ var url, sid, vol, lps, cnum;
+ if(isNaN(id)) {
+ sid = id;
+ if(sid == "bgSound") {
+ cnum = parseInt(bgSoundItem);
+ }else {
+ cnum = getSoundID(id);
+ }
+ }else {
+ cnum = parseInt(id);
+ if(sound[cnum]) sid = sound[cnum]["id"];
+ }
+ if(sound[cnum] && sound[cnum]["url"]!='' && sid!=''){
+ url = sound[cnum]["url"];
+ vol = (sound[cnum]["volume"]!='')?getMaxVolume(sound[cnum]["volume"]):getMaxVolume(100);
+ lps = (sound[cnum]["loops"])?true:false;
+ if(lps) {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){soundManager.play(sid,{volume:getMaxVolume(sound[cnum]["volume"])});}});
+ }else {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){curSoundID=-1;}});
+ }
+ }
+ }
+}
+function getSoundID(str) {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && str == sound[i]["id"]) {
+ var id = i;
+ break;
+ }
+ }
+ return id;
+}
+function setVolume() {
+ var vol = document.getElementById('volumelist');
+ if(audioSupport && !swfUnloaded) {
+ audioVolume = parseInt(vol.value);
+ if(curSoundID >= 0) {
+ if(sound[curSoundID]) {
+ var sid = sound[curSoundID]["id"];
+ var vid = getMaxVolume(sound[curSoundID]["volume"]);
+ soundManager.setVolume(sid,vid);
+ }
+ }
+ }
+}
+function getMaxVolume(value) {
+ if(audioVolume>0) {var factor = audioVolume/100;}else {var factor = 0;}
+ return Math.max(0,Math.min(parseInt(value*factor),audioVolume));
+}
+function preloadSounds() {
+ var temp = ''; var parm = ''; var t = ''; var cl = '';
+ var objects = document.getElementsByTagName('object');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].type.toLowerCase() == 'audio/mp3' && objects[i].data != '') {
+ objects[i].width = 0; objects[i].height = 0;
+ if(objects[i].parentNode.tagName == 'DIV') {
+ cl = objects[i].parentNode.className.toLowerCase();
+ if(cl == 'presentation' || cl == 'slide') {
+ if(cl == 'presentation') {
+ t = parseInt(bgSoundItem);
+ }else {
+ t = parseInt(objects[i].parentNode.id.slice(5, objects[i].parentNode.id.length));
+ }
+ sound[t] = new Object();
+ if(t < bgSoundItem) {
+ sound[t]["id"] = objects[i].parentNode.id;
+ }else {
+ sound[t]["id"] = "bgSound";
+ }
+ sound[t]["url"] = objects[i].data;
+ sound[t]["volume"] = 100; sound[t]["loops"] = false;
+ if(objects[i].archive != '') {
+ parm = objects[i].archive.toLowerCase().split(',');
+ for (var j=0; j < parm.length; j++) {
+ if(parm[j] == 'loop') sound[t]["loops"] = true;
+ if(parm[j].search(/^volume/) != -1) {
+ var tmp = parm[j].split(':');
+ sound[t]["volume"] = parseInt(tmp[1]);
+ }
+ }
+ }
+ soundManager.createSound(sound[t]["id"],sound[t]["url"]);
+ }
+ }
+ }
+ }
+}
+// audio extension
+
+// help extension
+function createHelpReq() {
+ if(!document.getElementById("HelpReq")) {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "HelpReq";
+ if (pg.addEventListener) {
+ pg.addEventListener("onclick",dumpHelpReq,false);
+ } else if (pg.attachEvent) {
+ pg.attachEvent("onclick",dumpHelpReq);
+ }
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=90)";
+ } else {
+ pg.style.opacity = 0.9;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(64,64,64)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/help.jpg)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+ if(document.getElementById("HelpReq")) {
+ helpmode = true;
+ }
+ }
+}
+function dumpHelpReq() {
+ if(document.getElementById("HelpReq")) {
+ document.body.removeChild(document.getElementById('HelpReq'));
+ helpmode = false;
+ }
+}
+// help extension
+
+//DEBUG
+function ConsoleLog(value) {
+ if(window.console) {
+ window.console.log(value);
+ }
+}
+//DEBUG
+
+document.write('<style type="text/css" media="screen" id="blockStyle">.presentation, .layout {display: none; }</style>');
+
+if(!isIE && !isOp) {
+ document.write('<script type="text/javascript" src="'+s5Path+'ui/audio_support/soundmanager2.js"></script>');
+ if(typeof soundManager!="undefined") {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'audioDebug') {
+ var audioDebug = (allMetas[i].content == "true") ? true : false;
+ soundManager.defaultOptions.debugMode = audioDebug;
+ }
+ }
+ }
+}
+
+window.onload = createSlideShow;
+window.onresize = function(){setTimeout('windowChange()',5);} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/toggle_link.png
new file mode 100644
index 000000000..4588e2514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/toggle_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/toggle_over.png
new file mode 100644
index 000000000..400f613b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/toggle_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/volume_link.png
new file mode 100644
index 000000000..f362acd1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/volume_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/wrap.css
new file mode 100644
index 000000000..a37315552
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/wrap.css
@@ -0,0 +1,410 @@
+/********************************************************************
+Screen and Print Styles for the Wrap Plugin
+********************************************************************/
+
+/* tables in columns and boxes should span the whole width */
+.wrap_column table,
+.wrap_left table, .wrap_right table, .wrap_center table,
+.wrap_box table,
+.wrap_info table, .wrap_important table, .wrap_alert table, .wrap_tip table, .wrap_help table, .wrap_todo table, .wrap_download table {
+ width: 100%;
+}
+/* emulate a headline */
+.wrap_column em strong,
+.wrap_left em strong, .wrap_right em strong, .wrap_center em strong,
+.wrap_box em strong,
+.wrap_info em strong, .wrap_important em strong, .wrap_alert em strong, .wrap_tip em strong, .wrap_help em strong, .wrap_todo em strong, .wrap_download em strong {
+ font-size: 130%;
+ font-weight: bold;
+ font-style: normal;
+ display: block;
+}
+/* emulate a bigger headline with a bottom border */
+.wrap_column em strong em.u,
+.wrap_left em strong em.u, .wrap_right em strong em.u, .wrap_center em strong em.u,
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ font-size: 115%;
+ border-bottom: 1px solid __border__;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+}
+/* different bigger headline for safety notes */
+.wrap_danger em strong em.u, .wrap_warning em strong em.u, .wrap_caution em strong em.u, .wrap_notice em strong em.u, .wrap_safety em strong em.u {
+ font-size: 115%;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+ text-transform: uppercase;
+ border-bottom-width: 0;
+}
+/* change border colour of emulated headlines inside boxes to something more neutral
+ (to match all the different background colours) */
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ border-bottom-color: #999;
+}
+
+
+/* columns
+********************************************************************/
+
+.wrap_left,
+.wrap_column {
+ float: left;
+ margin-right: 1.5em;
+}
+.wrap_right {
+ float: right;
+ margin-left: 1.5em;
+}
+.wrap_center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+/*
+.wrap_column,
+.wrap_left,
+.wrap_right {
+ overflow: hidden;
+}
+*/
+.wrap_container {
+ margin-right: -1.5em;
+}
+
+
+/* alignments
+********************************************************************/
+
+.wrap_leftalign {
+ text-align: left;
+}
+.wrap_centeralign {
+ text-align: center;
+}
+.wrap_rightalign {
+ text-align: right;
+}
+.wrap_justify {
+ text-align: justify;
+}
+
+
+/* box
+********************************************************************/
+
+/* see styles for boxes and notes with icons in style.css */
+
+/*____________ rounded corners ____________*/
+/* (only for modern browsers) */
+
+div.wrap_round {
+ border-radius: 20px;
+ -moz-border-radius: 20px;
+ -webkit-border-radius: 20px;
+ -khtml-border-radius: 20px;
+}
+span.wrap_round {
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -khtml-border-radius: 2px;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_lo {
+ color: __text_neu__;
+ font-size: 85%;
+}
+div.wrap_em {
+ color: #c00;
+ font-weight: bold;
+}
+
+/* see styles for highlighted text in style.css */
+
+
+/* typography
+********************************************************************/
+
+/*____________ fonts ____________*/
+
+div.wrap_sansserif {
+ font-family: Verdana,Tahoma,Geneva,"DejaVu Sans","Bitstream Vera Sans","Liberation Sans", Arial,Helvetica,FreeSans,"Liberation Sans","Nimbus Sans L", sans-serif;
+}
+div.wrap_serif {
+ font-family: Georgia,Garamond,"Palatino Linotype","Book Antiqua",Palatino,Palladio,"URW Palladio L","Liberation Serif",Didot,Gentium,"Bitstream Charter","Century Schoolbook L", "Times New Roman",Times,"Nimbus Roman No9 L","FreeSerif", serif;
+}
+div.wrap_monospace {
+ font-family: Courier,"Courier New",FreeMono,"Nimbus Mono L","Liberation Mono", "Lucida Console",Monaco,"DejaVu Sans Mono","Bitstream Vera Sans Mono", monospace;
+}
+
+/*____________ font size ____________*/
+
+div.wrap_bigger {
+ font-size: 125%;
+}
+div.wrap_muchbigger {
+ font-size: 200%;
+}
+div.wrap_smaller {
+ font-size: 75%;
+}
+
+/*____________ font colours ____________*/
+
+div.wrap_fgred {
+ color: #900;
+}
+div.wrap_fggreen {
+ color: #090;
+}
+div.wrap_fgblue {
+ color: #009;
+}
+div.wrap_fgcyan {
+ color: #099;
+}
+div.wrap_fgviolet {
+ color: #909;
+}
+div.wrap_fgyellow {
+ color: #990;
+}
+div.wrap_fggrey {
+ color: #666;
+}
+div.wrap_fgblack {
+ color: #000;
+}
+
+/* see styles for background colours and white font colour in style.css */
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ indent ____________*/
+
+div.wrap_indent {
+ padding-left: 1.5em;
+}
+
+/*____________ outdent ____________*/
+
+div.wrap_outdent {
+ margin-left: -1.5em;
+}
+
+/*____________ word wrapping in pre ____________*/
+
+divdiv.wrap_prewrap pre {
+ white-space: pre-wrap;
+ word-wrap: break-word;/* for IE < 8 */
+ /* white-space: -moz-pre-wrap; for FF < 3 */
+}
+
+/*____________ spoiler ____________*/
+
+divdiv.wrap_spoiler {
+ margin-bottom: 1.5em;
+}
+/* see rest of spoiler styles in style.css */
+
+/*____________ clear float ____________*/
+
+div.wrap_clear {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ font-size: 1px;
+ visibility: hidden;
+ overflow: hidden;
+}
+
+/*____________ hide ____________*/
+
+div.wrap_hide {
+ display: none;
+}
+
+
+/* STYLE.CSS */
+
+/* box
+********************************************************************/
+
+.wrap_box {
+ background: __background_alt__;
+ color: __text__;
+/*
+ overflow: hidden;
+*/
+}
+div.wrap_box,
+div.wrap_danger, div.wrap_warning, div.wrap_caution, div.wrap_notice, div.wrap_safety {
+ padding: 1em 1em .5em;
+ margin-bottom: 1.5em;
+}
+span.wrap_box,
+span.wrap_danger, span.wrap_warning, span.wrap_caution, span.wrap_notice, span.wrap_safety {
+ padding: 0 .3em;
+}
+
+/*____________ notes with icons ____________*/
+
+/* general styles for all note divs */
+div.wrap_info, div.wrap_important, div.wrap_alert, div.wrap_tip, div.wrap_help, div.wrap_todo, div.wrap_download {
+ padding: 1em 1em .5em 70px;
+ margin-bottom: 1.5em;
+ min-height: 68px;
+ background-position: 10px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html div.wrap_info, * html div.wrap_important, * html div.wrap_alert, * html div.wrap_tip, * html div.wrap_help, * html div.wrap_todo, * html div.wrap_download {
+ height: 68px;
+}
+/* general styles for all note spans */
+span.wrap_info, span.wrap_important, span.wrap_alert, span.wrap_tip, span.wrap_help, span.wrap_todo, span.wrap_download {
+ padding: 0 2px 0 20px;
+ min-height: 20px;
+ background-position: 2px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html span.wrap_info, * html span.wrap_important, * html span.wrap_alert, * html span.wrap_tip, * html span.wrap_help, * html span.wrap_todo, * html span.wrap_download {
+ height: 20px;
+}
+
+/*____________ info ____________*/
+.wrap_info { background-color: #d1d7df; }
+div.wrap_info { background-image: url(../../../wrap/images/note/48/info.png); }
+span.wrap_info { background-image: url(../../../wrap/images/note/16/info.png); }
+
+/*____________ important ____________*/
+.wrap_important { background-color: #ffd39f; }
+div.wrap_important { background-image: url(../../../wrap/images/note/48/important.png); }
+span.wrap_important { background-image: url(../../../wrap/images/note/16/important.png); }
+
+/*____________ alert ____________*/
+.wrap_alert { background-color: #ffbcaf; }
+div.wrap_alert { background-image: url(../../../wrap/images/note/48/alert.png); }
+span.wrap_alert { background-image: url(../../../wrap/images/note/16/alert.png); }
+
+/*____________ tip ____________*/
+.wrap_tip { background-color: #fff79f; }
+div.wrap_tip { background-image: url(../../../wrap/images/note/48/tip.png); }
+span.wrap_tip { background-image: url(../../../wrap/images/note/16/tip.png); }
+
+/*____________ help ____________*/
+.wrap_help { background-color: #dcc2ef; }
+div.wrap_help { background-image: url(../../../wrap/images/note/48/help.png); }
+span.wrap_help { background-image: url(../../../wrap/images/note/16/help.png); }
+
+/*____________ todo ____________*/
+.wrap_todo { background-color: #c2efdd; }
+div.wrap_todo { background-image: url(../../../wrap/images/note/48/todo.png); }
+span.wrap_todo { background-image: url(../../../wrap/images/note/16/todo.png); }
+
+/*____________ download ____________*/
+.wrap_download { background-color: #d6efc2; }
+div.wrap_download { background-image: url(../../../wrap/images/note/48/download.png); }
+span.wrap_download { background-image: url(../../../wrap/images/note/16/download.png); }
+
+
+/*____________ safety notes ____________*/
+
+.wrap_danger {
+ background-color: #c00;
+ color: #fff;
+}
+.wrap_warning {
+ background-color: #f60;
+ color: #000;
+}
+.wrap_caution {
+ background-color: #ff0;
+ color: #000;
+}
+.wrap_notice {
+ background-color: #06f;
+ color: #fff;
+}
+.wrap_safety {
+ background-color: #090;
+ color: #fff;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_hi {
+ background-color: #ff9;
+}
+
+/* typography
+********************************************************************/
+
+/*____________ font colours ____________*/
+
+div.wrap_fgwhite {
+ color: #fff;
+}
+
+/*____________ background colours ____________*/
+
+div.wrap_bgred {
+ background-color: #fcc;
+}
+div.wrap_bggreen {
+ background-color: #cfc;
+}
+div.wrap_bgblue {
+ background-color: #ccf;
+}
+div.wrap_bgcyan {
+ background-color: #9ff;
+}
+div.wrap_bgviolet {
+ background-color: #f9f;
+}
+div.wrap_bgyellow {
+ background-color: #ff9;
+}
+div.wrap_bggrey {
+ background-color: #ccc;
+}
+div.wrap_bgwhite {
+ background-color: #fff;
+}
+div.wrap_bgblack {
+ background-color: #000;
+}
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ spoiler ____________*/
+
+div.wrap_spoiler {
+ background-color: __background__ !important;
+ color: __background__ !important;
+ border: 1px dotted red;
+}
+
+/*____________ only print ____________*/
+
+div.wrap_onlyprint {
+ display: none;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/zero_link.png
new file mode 100644
index 000000000..5610884d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/zero_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/zero_over.png
new file mode 100644
index 000000000..3a14a577e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/zero_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/blank.gif
new file mode 100644
index 000000000..75b945d25
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/blank.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/finish.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/finish.gif
new file mode 100644
index 000000000..55e1ff95e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/finish.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/fixed.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/fixed.js
new file mode 100644
index 000000000..118ae7005
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/fixed.js
@@ -0,0 +1 @@
+// fixed.js: fix fixed positioning and fixed backgrounds in IE/Win // version 1.8, 08-Aug-2003 // written by Andrew Clover <and@doxdesk.com>, use freely /*@cc_on @if (@_win32 && @_jscript_version>4) var fixed_positions= new Array(); var fixed_backgrounds= new Array(); var fixed_viewport; // Initialisation. Called when the <body> tag arrives. Set up viewport so the // rest of the script knows we're going, and add a measurer div, used to detect // font size changes and measure image sizes for backgrounds later function fixed_init() { fixed_viewport= (document.compatMode=='CSS1Compat') ? document.documentElement : document.body; var el= document.createElement('div'); el.setAttribute('id', 'fixed-measure'); el.style.position= 'absolute'; el.style.top= '0'; el.style.left= '0'; el.style.overflow= 'hidden'; el.style.visibility= 'hidden'; el.style.fontSize= 'xx-large'; el.style.height= '5em'; el.style.setExpression('width', 'fixed_measureFont()'); document.body.insertBefore(el, document.body.firstChild); } // Binding. Called every time an element is added to the document, check it // for fixed features, if found add to our lists and set initial props function fixed_bind(el) { var needLayout= false; var tag= el.tagName.toLowerCase(); var st= el.style; var cst= el.currentStyle; var anc; // find fixed-position elements if (cst.position=='fixed') { needLayout= true; fixed_positions[fixed_positions.length]= el; // store original positioning as we'll overwrite it st.position= 'absolute'; st.fixedPLeft= cst.left; st.fixedPTop= cst.top; st.fixedPRight= cst.right; st.fixedPBottom= cst.bottom; st.fixedPWidth= fixed_parseLength(cst.width); st.fixedPHeight= fixed_parseLength(cst.height); // find element that will act as containing box, for convenience later st.fixedCB= null; for (anc= el; (anc= anc.parentElement).parentElement;) { if (anc.currentStyle.position!='static') { st.fixedCB= anc; break; } } // detect nested fixed positioning (only ancestor need move) st.fixedNest= false; for (anc= el; anc= anc.parentElement;) { if (anc.style.fixedNest!=null) st.fixedNest= true; break; } } // find fixed-background elements (not body/html which IE already gets right) if (cst.backgroundAttachment=='fixed' && tag!='body' && tag!='html') { needLayout= true; fixed_backgrounds[fixed_backgrounds.length]= el; // get background offset, converting from keyword if necessary st.fixedBLeft= fixed_parseLength(cst.backgroundPositionX); st.fixedBTop= fixed_parseLength(cst.backgroundPositionY); // if it's a non-zero %age, need to know size of image for layout if (st.fixedBLeft[1]=='%' || st.fixedBTop[1]=='%') { st.fixedBWidth= 0; st.fixedBHeight= 0; fixed_measureBack(el); } } if (needLayout) fixed_layout(); } // Layout. On every window or font size change, recalculate positioning // Request re-layout at next free moment var fixed_delaying= false; function fixed_delayout() { if (fixed_delaying) return; fixed_delaying= true; window.setTimeout(fixed_layout, 0); } var fixed_ARBITRARY= 200; function fixed_layout() { fixed_delaying= false; if (!fixed_viewport) return; var i, el, st, j, pr, tmp, A= 'auto'; var cb, cbLeft, cbTop, cbRight, cbBottom, oLeft, oTop, oRight, oBottom; var vpWidth=fixed_viewport.clientWidth, vpHeight=fixed_viewport.clientHeight; // calculate initial position for fixed-position elements [black magic] for (i= fixed_positions.length; i-->0;) { el= fixed_positions[i]; st= el.style; // find positioning of containing block cb= st.fixedCB; if (!cb) cb= fixed_viewport; cbLeft= fixed_pageLeft(cb); cbTop= fixed_pageTop(cb); if (cb!=fixed_viewport) { cbLeft+= cb.clientLeft; cbTop+= cb.clientTop; } cbRight= fixed_viewport.clientWidth-cbLeft-cb.clientWidth; cbBottom= fixed_viewport.clientHeight-cbTop-cb.clientHeight; // if size is in %, must recalculate relative to viewport if (st.fixedPWidth[1]=='%') st.width= Math.round(vpWidth*st.fixedPWidth[0]/100)+'px'; if (st.fixedPHeight[1]=='%') st.height= Math.round(vpHeight*st.fixedPHeight[0]/100)+'px'; // find out offset values at max size, to account for margins st.left= A; st.right= '0'; st.top= A; st.bottom= '0'; oRight= el.offsetLeft+el.offsetWidth; oBottom= el.offsetTop+el.offsetHeight; st.left= '0'; st.right= A; st.top= '0'; st.bottom= A; oLeft= el.offsetLeft; oTop= el.offsetTop; // use this to convert all edges to pixels st.left= A; st.right= st.fixedPRight; st.top= A; st.bottom= st.fixedPBottom; oRight-= el.offsetLeft+el.offsetWidth; oBottom-= el.offsetTop+el.offsetHeight; st.left= st.fixedPLeft; st.top= st.fixedPTop; oLeft= el.offsetLeft-oLeft; oTop= el.offsetTop-oTop; // edge positioning fix if (st.fixedPWidth[1]==A && st.fixedPLeft!=A && st.fixedPRight!=A) { tmp= el.offsetLeft; st.left= A; st.width= fixed_ARBITRARY+'px'; tmp= fixed_ARBITRARY+el.offsetLeft-tmp+cbLeft+cbRight; st.left= st.fixedPLeft; st.width= ((tmp<1)?1:tmp)+'px'; } if (st.fixedPHeight[1]==A && st.fixedPTop!=A && st.fixedPBottom!=A) { tmp= el.offsetTop; st.top= A; st.height= fixed_ARBITRARY+'px'; tmp= fixed_ARBITRARY+el.offsetTop-tmp+cbTop+cbBottom; st.top= st.fixedPTop; st.height= ((tmp<1)?1:tmp)+'px'; } // move all non-auto edges relative to the viewport st.fixedCLeft= (st.fixedPLeft=='auto') ? oLeft : oLeft-cbLeft; st.fixedCTop= (st.fixedPTop=='auto') ? oTop : oTop-cbTop; st.fixedCRight= (st.fixedPRight=='auto') ? oRight : oRight-cbRight; st.fixedCBottom= (st.fixedPBottom=='auto') ? oBottom : oBottom-cbBottom; // remove left-positioning of right-positioned elements if (st.fixedPLeft=='auto' && st.fixedPRight!='auto') st.fixedCLeft= 'auto'; if (st.fixedPTop=='auto' && st.fixedPBottom!='auto') st.fixedCTop= 'auto'; } // calculate initial positioning of fixed backgrounds for (i= fixed_backgrounds.length; i-->0;) { el= fixed_backgrounds[i]; st= el.style; tmp= st.fixedBImage; if (tmp) { if (tmp.readyState!='uninitialized') { st.fixedBWidth= tmp.offsetWidth; st.fixedBHeight= tmp.offsetHeight; st.fixedBImage= window.undefined; } } st.fixedBX= fixed_length(el, st.fixedBLeft, vpWidth-st.fixedBWidth); st.fixedBY= fixed_length(el, st.fixedBTop, vpHeight-st.fixedBHeight); } // now call scroll() to set the positions from the values just calculated fixed_scroll(); } // Scrolling. Offset fixed elements relative to viewport scrollness var fixed_lastX, fixed_lastY; var fixed_PATCHDELAY= 300; var fixed_patching= false; // callback function after a scroll, because incorrect scroll position is // often reported first go! function fixed_patch() { fixed_patching= false; var scrollX= fixed_viewport.scrollLeft, scrollY= fixed_viewport.scrollTop; if (scrollX!=fixed_lastX && scrollY!=fixed_lastY) fixed_scroll(); } function fixed_scroll() { if (!fixed_viewport) return; var i, el, st, viewportX, viewportY; var scrollX= fixed_viewport.scrollLeft, scrollY= fixed_viewport.scrollTop; fixed_lastX= scrollX; fixed_lastY= scrollY; // move non-nested fixed-position elements for (i= fixed_positions.length; i-->0;) { st= fixed_positions[i].style; viewportX= (st.fixedNest) ? 0 : scrollX; viewportY= (st.fixedNest) ? 0 : scrollY; if (st.fixedCLeft!='auto') st.left= (st.fixedCLeft+viewportX)+'px'; if (st.fixedCTop!='auto') st.top= (st.fixedCTop+viewportY)+'px'; viewportX= (st.fixedCB==null || st.fixedCB==fixed_viewport) ? 0 : viewportX; viewportY= (st.fixedCB==null || st.fixedCB==fixed_viewport) ? 0 : viewportY; st.right= (st.fixedCRight-viewportX+1)+'px'; st.right= (st.fixedCRight-viewportX)+'px'; st.bottom= (st.fixedCBottom-viewportY+1)+'px'; st.bottom= (st.fixedCBottom-viewportY)+'px'; } // align fixed backgrounds to viewport for (i= fixed_backgrounds.length; i-->0;) { el= fixed_backgrounds[i]; st= el.style; viewportX= scrollX; viewportY= scrollY; while (el.offsetParent) { viewportX-= el.offsetLeft+el.clientLeft; viewportY-= el.offsetTop +el.clientTop; el= el.offsetParent; } st.backgroundPositionX= (st.fixedBX+viewportX)+'px'; st.backgroundPositionY= (st.fixedBY+viewportY)+'px'; } // call back again in a tic if (!fixed_patching) { fixed_patching= true; window.setTimeout(fixed_patch, fixed_PATCHDELAY); } } // Measurement. Load bg-image into an invisible element on the page, when // loaded write the width/height to an element's style for layout use; detect // when font size changes function fixed_measureBack(el) { var measure= document.getElementById('fixed-measure'); var img= document.createElement('img'); img.setAttribute('src', fixed_parseURL(el.currentStyle.backgroundImage)); measure.appendChild(img); el.style.fixedBImage= img; if (img.readyState=='uninitialized') img.attachEvent('onreadystatechange', fixed_measureBackImage_ready); } function fixed_measureBackImage_ready() { var img= event.srcElement; if (img && img.readyState!='uninitialized') { img.detachEvent('onreadystatechange', fixed_measureBackImage_ready); fixed_layout(); } } var fixed_fontsize= 0; function fixed_measureFont() { var fs= document.getElementById('fixed-measure').offsetHeight; if (fixed_fontsize!=fs && fixed_fontsize!=0) fixed_delayout(); fixed_fontsize= fs; return '5em'; } // Utility. General-purpose functions // parse url() to get value inside function fixed_parseURL(v) { v= v.substring(4, v.length-1); if (v.charAt(0)=='"' && v.charAt(v.length-1)=='"' || v.charAt(0)=="'" && v.charAt(v.length-1)=="'") return v.substring(1, v.length-1); else return v; } // parse length or auto or background-position keyword into number and unit var fixed_numberChars= '+-0123456789.'; var fixed_ZERO= new Array(0, 'px'); var fixed_50PC= new Array(50, '%'); var fixed_100PC= new Array(100, '%'); var fixed_AUTO= new Array(0, 'auto'); function fixed_parseLength(v) { var num, i; if (v=='left' || v=='top') return fixed_ZERO; if (v=='right' || v=='bottom') return fixed_100PC; if (v=='center') return fixed_50PC; if (v=='auto') return fixed_AUTO; i= 0; while (i<v.length && fixed_numberChars.indexOf(v.charAt(i))!=-1) i++; num= parseFloat(v.substring(0, i)); if (num==0) return fixed_ZERO; else return new Array(num, v.substring(i)); } // convert parsed (number, unit) into a number of pixels function fixed_length(el, l, full) { var tmp, x; if (l[1]=='px') return l[0]; if (l[1]=='%') return Math.round(full*l[0]/100); // other units - measure by setting position; this is rather inefficient // but then these units are used for background-position so seldom... tmp= el.currentStyle.left; el.style.left= '0'; x= el.offsetLeft; el.style.left= l[0]+l[1]; x= el.offsetLeft-x; el.style.left= tmp; return x; } // convert stupid IE offsetLeft/Top to page-relative values function fixed_pageLeft(el) { var v= 0; while (el.offsetParent) { v+= el.offsetLeft; el= el.offsetParent; } return v; } function fixed_pageTop(el) { var v= 0; while (el.offsetParent) { v+= el.offsetTop; el= el.offsetParent; } return v; } // Scanning. Check document every so often until it has finished loading. Do // nothing until <body> arrives, then call main init. Pass any new elements // found on each scan to be bound var fixed_SCANDELAY= 500; function fixed_scan() { if (!document.body) return; if (!fixed_viewport) fixed_init(); var el; for (var i= 0; i<document.all.length; i++) { el= document.all[i]; if (!el.fixed_bound) { el.fixed_bound= true; fixed_bind(el); } } } var fixed_scanner; function fixed_stop() { window.clearInterval(fixed_scanner); fixed_scan(); } fixed_scan(); fixed_scanner= window.setInterval(fixed_scan, fixed_SCANDELAY); window.attachEvent('onload', fixed_stop); window.attachEvent('onresize', fixed_delayout); window.attachEvent('onscroll', fixed_scroll); @end @*/ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/help.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/help.jpg
new file mode 100644
index 000000000..9be4d3369
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/help.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/iepngfix.htc
new file mode 100644
index 000000000..12a8b89f7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/iepngfix.htc
@@ -0,0 +1,42 @@
+<public:component>
+<public:attach event="onpropertychange" onevent="doFix()" />
+
+<script>
+
+// IE5.5+ PNG Alpha Fix v1.0 by Angus Turnbull http://www.twinhelix.com
+// Free usage permitted as long as this notice remains intact.
+
+// This must be a path to a blank image. That's all the configuration you need here.
+var blankImg = 'ui/graphic_support/blank.gif';
+
+var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
+
+function filt(s, m) {
+ if (filters[f]) {
+ filters[f].enabled = s ? true : false;
+ if (s) with (filters[f]) { src = s; sizingMethod = m }
+ } else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")';
+}
+
+function doFix() {
+ if ((parseFloat(navigator.userAgent.match(/MSIE (\S+)/)[1]) < 5.5) ||
+ (event && !/(background|src)/.test(event.propertyName))) return;
+
+ if (tagName == 'IMG') {
+ if ((/\.png$/i).test(src)) {
+ filt(src, 'image'); // was 'scale'
+ src = blankImg;
+ } else if (src.indexOf(blankImg) < 0) filt();
+ } else if (style.backgroundImage) {
+ if (style.backgroundImage.match(/^url[("']+(.*\.png)[)"']+$/i)) {
+ var s = RegExp.$1;
+ style.backgroundImage = '';
+ filt(s, 'crop');
+ } else filt();
+ }
+}
+
+doFix();
+
+</script>
+</public:component> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/numeric.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/numeric.png
new file mode 100644
index 000000000..8f911e778
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/numeric.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/progress.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/progress.gif
new file mode 100644
index 000000000..132368469
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/progress.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/00_head.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/00_head.txt
new file mode 100644
index 000000000..2900ef421
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/00_head.txt
@@ -0,0 +1,8 @@
+<!-- style sheet links -->
+<link rel="stylesheet" href="ui/i18n/slides.css" type="text/css" media="projection" id="slideProj" />
+<link rel="stylesheet" href="ui/default/outline.css" type="text/css" media="screen" id="outlineStyle" />
+<link rel="stylesheet" href="ui/default/print.css" type="text/css" media="print" id="slidePrint" />
+<link rel="stylesheet" href="ui/default/opera.css" type="text/css" media="projection" id="operaFix" />
+
+<!-- S5 JS -->
+<script src="ui/default/slides.js" type="text/javascript"></script>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/audio_link.png
new file mode 100644
index 000000000..daa740c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/audio_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/audio_on.png
new file mode 100644
index 000000000..cd590aae9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/audio_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/audio_over.png
new file mode 100644
index 000000000..cf537a008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/audio_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/auto_link.png
new file mode 100644
index 000000000..1c2ca4817
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/auto_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/auto_on.png
new file mode 100644
index 000000000..4b0c923b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/auto_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/auto_over.png
new file mode 100644
index 000000000..dbea88975
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/auto_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/backgrnd.png
new file mode 100644
index 000000000..0e48413d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/backgrnd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/bg-shade.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/bg-shade.png
new file mode 100644
index 000000000..172c914f6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/bg-shade.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/bg-slide.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/bg-slide.jpg
new file mode 100644
index 000000000..6be0296db
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/bg-slide.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/delay_link.png
new file mode 100644
index 000000000..c4d99cd57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/delay_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/exit_link.png
new file mode 100644
index 000000000..1bfd38790
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/exit_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/exit_over.png
new file mode 100644
index 000000000..0fdd1c605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/exit_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/fade_link.png
new file mode 100644
index 000000000..482e4d53e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/fade_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/fade_on.png
new file mode 100644
index 000000000..e12561fb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/fade_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/fade_over.png
new file mode 100644
index 000000000..fb8943c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/fade_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/footer.jpg
new file mode 100644
index 000000000..49370dbba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/footer.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/framing.css
new file mode 100755
index 000000000..14d8509e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/framing.css
@@ -0,0 +1,23 @@
+/* The following styles size, place, and layer the slide components.
+ Edit these if you want to change the overall slide layout.
+ The commented lines can be uncommented (and modified, if necessary)
+ to help you with the rearrangement process. */
+
+/* target = 1024x768 */
+
+div#header, div#footer, .slide {width: 100%; top: 0; left: 0;}
+div#header {top: 0; height: 3em; z-index: 1;}
+div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;}
+.slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;}
+div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;}
+div#controls form {position: absolute; bottom: 0; right: 0; width: 100%;
+ margin: 0;}
+#currentSlide {position: absolute; width: 10%; left: 45%; bottom: 1em; z-index: 10;}
+html>body #currentSlide {position: fixed;}
+
+/*
+div#header {background: #FCC;}
+div#footer {background: #CCF;}
+div#controls {background: #BBD;}
+div#currentSlide {background: #FFC;}
+*/
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/header.png
new file mode 100644
index 000000000..929dabba1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/last_link.png
new file mode 100644
index 000000000..4f158d35d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/last_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/last_over.png
new file mode 100644
index 000000000..a7b629995
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/last_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/list_link.png
new file mode 100644
index 000000000..7e299bb50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/list_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/loop_link.png
new file mode 100644
index 000000000..41e12cb15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/loop_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/loop_on.png
new file mode 100644
index 000000000..2ffcacae1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/loop_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/loop_over.png
new file mode 100644
index 000000000..9fe420153
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/loop_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/next_link.png
new file mode 100644
index 000000000..2b9f44c4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/next_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/next_over.png
new file mode 100644
index 000000000..25788124d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/next_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/notes_link.png
new file mode 100644
index 000000000..bb4a8ae37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/notes_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/notes_over.png
new file mode 100644
index 000000000..c6bfe69fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/notes_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/opera.css
new file mode 100755
index 000000000..9e9d2a3c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/opera.css
@@ -0,0 +1,7 @@
+/* DO NOT CHANGE THESE unless you really want to break Opera Show */
+.slide {
+ visibility: visible !important;
+ position: static !important;
+ page-break-before: always;
+}
+#slide0 {page-break-before: avoid;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/outline.css
new file mode 100755
index 000000000..62db519ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/outline.css
@@ -0,0 +1,15 @@
+/* don't change this unless you want the layout stuff to show up in the outline view! */
+
+.layout div, #footer *, #controlForm * {display: none;}
+#footer, #controls, #controlForm, #navLinks, #toggle {
+ display: block; visibility: visible; margin: 0; padding: 0;}
+#toggle {float: right; padding: 0.5em;}
+html>body #toggle {position: fixed; top: 0; right: 0;}
+
+/* making the outline look pretty-ish */
+
+#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
+#slide0 h1 {padding-top: 1.5em;}
+.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em;
+ border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
+#toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pause_link.png
new file mode 100644
index 000000000..2561cb4a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pause_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pause_on.png
new file mode 100644
index 000000000..2fc9c4a4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pause_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pause_over.png
new file mode 100644
index 000000000..7a7c80ddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pause_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pretty.css
new file mode 100644
index 000000000..f47a7b5a7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pretty.css
@@ -0,0 +1,139 @@
+/*
+ Theme: i18n
+ Eric A. Meyer (http://meyerweb.com/)
+ Theme placed under CC by-sa 2.0 license
+*/
+
+body {background: #95A7D4 url(bg-slide.jpg) 100% 100% no-repeat; color: #210; font: 28px Arial, sans-serif;}
+a {text-decoration: none; color: #336; border-bottom: 1px dotted;}
+h1, h2, h3, h4, h5, h6 {font-size: 1em; margin: 0;}
+sup {font-size: 0.75em; font-weight: normal;
+ vertical-align: 0.5em; line-height: 1px;}
+ul {margin-left: 1em; padding-left: 0;}
+li {margin-bottom: 0.66em;}
+li li {margin: 0.33em 0; font-size: smaller;}
+
+#header {background: url(bg-shade.png); border-bottom: 1px solid #333;
+ padding-bottom: 2em;}
+#footer {background: url(bg-shade.png); color: #BBB; border-top: 1px solid #333;}
+#header, #footer {font-size: 0.5em;}
+#footer h1, #footer h2 { padding: 0.5em 0.75em;
+ font-weight: normal; font-style: italic;}
+#footer h1 {left: 0; font-size: 1em; letter-spacing: 1px;}
+#footer h2 {position: absolute; bottom: 0; right: 0;}
+
+
+#currentSlide {font-size: 0.5em;}
+#currentSlide span {font-size: 13px; color: rgb(49%,47%,66%);}
+#currentSlide #csSep {display: none;}
+#currentSlide #csHere {font-weight: bold;}
+#currentSlide #csHere:before {content: "#"; font-weight: normal;}
+#currentSlide #csTotal:before {content: " of ";}
+
+.slide h1 {font-size: 1.66em; line-height: 1; letter-spacing: -1px;
+ margin: 0 -15% 1em 0; padding: 0.5em 15% 0.06125em 0; border-bottom: 0.06125em solid rgb(90,94,120);}
+#slide0 h1 {border: none; font-size: 2.25em; letter-spacing: 0; margin: 3em 0 1.5em;}
+#slide0 h3 {margin: 0.5em 0 0;}
+#slide0 h4 {margin-top: 0; font-size: smaller;}
+
+.slide .current {color: #003; text-shadow: 0 0 0.25em #9AABD7;}
+
+div#controls {position: absolute; left: 0; bottom: 0; width: 100%; text-align: center; font: bold 1em Verdana, Arial, Helvetica, sans-serif;}
+html>body div#controls {background: transparent; position: fixed; padding: 0; top: auto; text-align: center;}
+#controls #sheet {display: none;}
+#controls #controlForm {height: 32px; width: 100%; text-align: center; vertical-align: middle;}
+#controls #navLinks {border-top: 1px solid #999; overflow: hidden; padding: 0; margin: 0; height: 32px; width: 100%; background-color: #808080; text-align: center; vertical-align: middle; white-space: nowrap;}
+#controls #navLinks ul {margin: 0 auto; padding: 0; height: 32px; width: 500px; white-space: nowrap; text-align: center;}
+#controls #navLinks ul li {list-style: none; display: inline; margin: 0; padding: 0; float: left; height: 32px; width: 32px; text-align: center; background-color: transparent;}
+#controls #navLinks ul li.vr {list-style: none; display: inline; margin: 0px 2px; padding: 0; float: left; height: 32px; width: 1px; text-align: center; background-color: #606060;}
+#controls #navLinks ul li a {margin: 0; padding: 0; float: left; height: 32px; width: 32px; background-color: transparent;}
+
+#controls #navLinks ul li#exit {background: url(exit_link.png) no-repeat top left;}
+#controls #navLinks ul li#exit a:hover {background: url(exit_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#toggle {background: url(toggle_link.png) no-repeat top left;}
+#controls #navLinks ul li#toggle a:hover {background: url(toggle_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#show-notes {background: url(notes_link.png) no-repeat top left;}
+#controls #navLinks ul li#show-notes a:hover {background: url(notes_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#zero {background: url(zero_link.png) no-repeat top left;}
+#controls #navLinks ul li#zero a:hover {background: url(zero_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#prev {background: url(prev_link.png) no-repeat top left;}
+#controls #navLinks ul li#prev a:hover {background: url(prev_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#next {background: url(next_link.png) no-repeat top left;}
+#controls #navLinks ul li#next a:hover {background: url(next_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#last {background: url(last_link.png) no-repeat top left;}
+#controls #navLinks ul li#last a:hover {background: url(last_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#lst {background: url(list_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#fade a.isoff {background: url(fade_link.png) no-repeat top left;}
+#controls #navLinks ul li#fade a.ison {background: url(fade_on.png) no-repeat top right;}
+#controls #navLinks ul li#fade a:hover {background: url(fade_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#audio {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.isoff {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.ison {background: url(audio_on.png) no-repeat top right;}
+#controls #navLinks ul li#audio a:hover {background: url(audio_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#vol {background: url(volume_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#auto a.isoff {background: url(auto_link.png) no-repeat top left;}
+#controls #navLinks ul li#auto a.ison {background: url(auto_on.png) no-repeat top right;}
+#controls #navLinks ul li#auto a:hover {background: url(auto_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#pause a.isoff {background: url(pause_link.png) no-repeat top left;}
+#controls #navLinks ul li#pause a.ison {background: url(pause_on.png) no-repeat top right;}
+#controls #navLinks ul li#pause a:hover {background: url(pause_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#loop a.isoff {background: url(loop_link.png) no-repeat top left;}
+#controls #navLinks ul li#loop a.ison {background: url(loop_on.png) no-repeat top right;}
+#controls #navLinks ul li#loop a:hover {background: url(loop_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#del {background: url(delay_link.png) no-repeat top left;}
+
+#jumplist, #volumelist, #delaylist {padding: 0; margin: 0; width: 32px; height: 32px; cursor: n-resize;}
+
+#guru {position: absolute; visibility: visible; left: 0px; top: 0px; padding: 4px; width: 99%; height: auto; text-align: center; background-color: black; z-index: 10;}
+#guru div {border: solid 3px red; padding: 4px; font-family: monospace; font-size: 60%; width: auto; height: auto; color: red; text-align: center;}
+
+/*
+#currentSlide {white-space: nowrap; text-align: center; margin-bottom: -0.5em; font-size: 0.5em; background-color: transparent; color: #999;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 0; padding: 0; font: bold 2em Verdana, Arial, Helvetica, sans-serif; font-variant: small-caps; text-shadow: 0.1em 0.1em 0.1em #666; white-space: normal; color: #222; background-color: transparent;}
+#slide0 h2 {font: bold italic 1em Arial, Helvetica, sans-serif; margin: 0.25em;}
+#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+*/
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.notes {display: none;}
+.external {border-bottom: 1px dotted gray;}
+html>body .external {border-bottom: none;}
+.external:after {content: " \274F"; font-size: smaller; color: #999;}
+
+.incremental, .incremental *, .incremental *:after {color: #ccc; visibility: visible;}
+img.incremental, canvas.incremental {visibility: hidden;}
+.slide .current {color: #B02;}
+
+/* diagnostics
+li:after {content: " [" attr(class) "]"; color: #F88;}
+*/
+
+table.piechart, table.barchart, table.linechart { border-spacing: 0.3em 0.15em; }
+table.piechart tr th, table.barchart tr th, table.linechart tr th { white-space: nowrap; }
+table.piechart tr td, table.barchart tr td, table.linechart tr td { vertical-align: top; white-space: nowrap; }
+table.piechart tr td.col, table.barchart tr td.col, table.linechart tr td.col { border-bottom: 1px solid #555; border-right: 1px solid #555; }
+table.fs90 tr td, table.fs90 tr th, div.fs90, pre.fs90, p.fs90 ,ul.fs90 {font-size: 0.9em; }
+table.fs75 tr td, table.fs75 tr th, div.fs75, pre.fs75, p.fs75 ,ul.fs75 {font-size: 0.75em; }
+table.fs66 tr td, table.fs66 tr th, div.fs66, pre.fs66, p.fs66 ,ul.fs66 {font-size: 0.66em; }
+table.fs50 tr td, table.fs50 tr th, div.fs50, pre.fs50, p.fs50 ,ul.fs50 {font-size: 0.5em; }
+
+#soundmanager-debug {position:fixed; top:0px; right:0px; width:30em; height:20em; overflow:auto; border:1px solid red; padding:1em; margin:2em; font-family:"sans serif"; font-size: 12px;color: black; background-color:#f6f6f6; z-index: 100;}
+#soundmanager-debug code {font-size: 11px;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/prev_link.png
new file mode 100644
index 000000000..c31d21350
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/prev_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/prev_over.png
new file mode 100644
index 000000000..6fef4fa52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/prev_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/print.css
new file mode 100755
index 000000000..220083260
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/print.css
@@ -0,0 +1 @@
+/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul { page-break-inside: avoid; visibility: visible !important; } h1 { page-break-after: avoid; } html { width:100%; overflow:hidden; } body { font-size: 12pt; background: white; width:100%; } * { color: black; } #slide0 h1 { font-size: 200%; border: none; margin: 0.5em 0 0.25em; } #slide0 h3 { margin: 0; padding: 0; } #slide0 h4 { margin: 0 0 0.5em; padding: 0; } #slide0 { margin-bottom: 3em; } h1 { border-top: 2pt solid gray; border-bottom: 1px dotted silver; padding:0.2em 0 0.3em 0; } .extra { background: transparent !important; } div.extra, pre.extra, .example { font-size: 10pt; color: #333; } ul.extra a { font-weight: bold; } p.example { display: none; } #header { display: none; } #footer h1 { margin: 0; border-bottom: 1px solid; color: gray; font-style: italic; } #footer h2, #controls { display: none; } div.handout { display:block; border-top: 2px dotted #ccc; background:url(pics/back-handout-print.png) top right no-repeat #fff; min-height:6em; padding-right:6em; margin-bottom:1em; } .slide { display:block; background:url(pics/back-slide-print.png) top right no-repeat #fff; min-height:6em; margin-bottom:1em; } table { display:block; /* display:none; */ font-size:90%; overflow:hidden; margin-top:1em; margin-bottom:1em; } pre , code { margin:0; font-size:1pt; overflow:auto; } img { max-width:100% !important; } /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .layout, .layout * { display: none !important; } \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/s5-core.css
new file mode 100755
index 000000000..86444e041
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/s5-core.css
@@ -0,0 +1,9 @@
+/* Do not edit or override these styles! The system will likely break if you do. */
+
+div#header, div#footer, div#controls, .slide {position: absolute;}
+html>body div#header, html>body div#footer,
+ html>body div#controls, html>body .slide {position: fixed;}
+.handout {display: none;}
+.layout {display: block;}
+.slide, .hideme, .incremental {visibility: hidden;}
+#slide0 {visibility: visible;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/slides.css
new file mode 100755
index 000000000..0786d7dbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/slides.css
@@ -0,0 +1,3 @@
+@import url(s5-core.css); /* required to make the slide show run at all */
+@import url(framing.css); /* sets basic placement and size of slide components */
+@import url(pretty.css); /* stuff that makes the slides look better than blah */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/slides.js
new file mode 100644
index 000000000..510a04c0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/slides.js
@@ -0,0 +1,2812 @@
+// S5 1.3beta7 (18-Apr-2007) advanced version by C. Effenberger
+// Please see http://s5.netzgesta.de/ for more information
+// based on S5 v1.2a1 slides.js -- released into the Public Domain
+// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
+// about all the wonderful and talented contributors to this code!
+// audio extension: soundmanager2 is NOT Public Domain
+// Please see http://www.schillmania.com/projects/soundmanager2/ for information
+
+var undef;
+var slideCSS = '';
+var snum = 0;
+var smax = 1;
+var incpos = 0;
+var number = undef;
+var firstTime = 1;
+var s5mode = true;
+var helpmode = false;
+var defaultView = 'slideshow'; //outline
+var controlVis = 'visible';
+var s5Path = 'lib/plugins/s5reloaded/';
+
+// scalable images extension
+var empx = 0;
+var images = new Array();
+var canvas = new Array();
+var medias = new Array();
+var piecharts = new Array();
+var barcharts = new Array();
+var linecharts = new Array();
+// scalable images extension
+
+// transition extension
+var tranSitions = false;
+var fadeModus = false;
+var fadeDuration = 500;
+var incrDuration = 250;
+var opac = 1;
+var cid = '';
+var nid = '';
+var tid = '';
+var jl = '';
+// transition extension
+
+// autoplay extension
+var autoMatic = false;
+var playLoop = false;
+var playPause = false;
+var autoRun = false;
+var playDelay = 5000;
+var remainDer = 0;
+var incrDelay = 0;
+// autoplay extension
+
+// audio extension
+var sound = new Array();
+var audioSupport = false;
+var audioVolume = 100;
+var audioError = false;
+var swfUnloaded = true;
+var bgSoundItem = 9999;
+var curSoundID = -1;
+// audio extension
+
+// panel extension
+var imgWidth = 32;
+var imgHeight = 32;
+// panel extension
+
+// canvas chart extension
+var canvasSupport = false;
+var ChartData = new Array();
+var colorSlice = new Array();
+var font = document.createElement("img");
+font.setAttribute("src", s5Path+"ui/graphic_support/numeric.png");
+signs = {
+ '0': {sx: 0, sy: 0, sw: 48, sh: 64},
+ '1': {sx: 48, sy: 0, sw: 48, sh: 64},
+ '2': {sx: 96, sy: 0, sw: 48, sh: 64},
+ '3': {sx: 144, sy: 0, sw: 48, sh: 64},
+ '4': {sx: 192, sy: 0, sw: 48, sh: 64},
+ '5': {sx: 240, sy: 0, sw: 48, sh: 64},
+ '6': {sx: 288, sy: 0, sw: 48, sh: 64},
+ '7': {sx: 336, sy: 0, sw: 48, sh: 64},
+ '8': {sx: 384, sy: 0, sw: 48, sh: 64},
+ '9': {sx: 432, sy: 0, sw: 48, sh: 64},
+ '%': {sx: 480, sy: 0, sw: 48, sh: 64},
+ '.': {sx: 528, sy: 0, sw: 24, sh: 64}
+};
+var colorNames= new Array();
+colorNames["black"]="#000000"; colorNames["maroon"]="#800000";
+colorNames["green"]="#008000"; colorNames["olive"]="#808000";
+colorNames["navy"]="#000080"; colorNames["purple"]="#800080";
+colorNames["teal"]="#008080"; colorNames["gray"]="#808080";
+colorNames["silver"]="#C0C0C0"; colorNames["red"]="#FF0000";
+colorNames["lime"]="#00FF00"; colorNames["yellow"]="#FFFF00";
+colorNames["blue"]="#0000FF"; colorNames["fuchsia"]="#FF00FF";
+colorNames["aqua"]="#00FFFF"; colorNames["white"]="#FFFFFF";
+colorNames["aliceblue"]="#F0F8FF"; colorNames["antiquewhite"]="#FAEBD7";
+colorNames["aquamarine"]="#7FFFD4"; colorNames["azure"]="#F0FFFF";
+colorNames["beige"]="#F5F5DC"; colorNames["blueviolet"]="#8A2BE2";
+colorNames["brown"]="#A52A2A"; colorNames["burlywood"]="#DEB887";
+colorNames["cadetblue"]="#5F9EA0"; colorNames["chartreuse"]="#7FFF00";
+colorNames["chocolate"]="#D2691E"; colorNames["coral"]="#FF7F50";
+colorNames["cornflowerblue"]="#6495ED"; colorNames["cornsilk"]="#FFF8DC";
+colorNames["crimson"]="#DC143C"; colorNames["darkblue"]="#00008B";
+colorNames["darkcyan"]="#008B8B"; colorNames["darkgoldenrod"]="#B8860B";
+colorNames["darkgray"]="#A9A9A9"; colorNames["darkgreen"]="#006400";
+colorNames["darkkhaki"]="#BDB76B"; colorNames["darkmagenta"]="#8B008B";
+colorNames["darkolivegreen"]="#556B2F"; colorNames["darkorange"]="#FF8C00";
+colorNames["darkorchid"]="#9932CC"; colorNames["darkred"]="#8B0000";
+colorNames["darksalmon"]="#E9967A"; colorNames["darkseagreen"]="#8FBC8F";
+colorNames["darkslateblue"]="#483D8B"; colorNames["darkslategray"]="#2F4F4F";
+colorNames["darkturquoise"]="#00CED1"; colorNames["darkviolet"]="#9400D3";
+colorNames["deeppink"]="#FF1493"; colorNames["deepskyblue"]="#00BFFF";
+colorNames["dimgray"]="#696969"; colorNames["dodgerblue"]="#1E90FF";
+colorNames["firebrick"]="#B22222"; colorNames["floralwhite"]="#FFFAF0";
+colorNames["forestgreen"]="#228B22"; colorNames["gainsboro"]="#DCDCDC";
+colorNames["ghostwhite"]="#F8F8FF"; colorNames["gold"]="#FFD700";
+colorNames["goldenrod"]="#DAA520"; colorNames["greenyellow"]="#ADFF2F";
+colorNames["honeydew"]="#F0FFF0"; colorNames["hotpink"]="#FF69B4";
+colorNames["indianred"]="#CD5C5C"; colorNames["indigo"]="#4B0082";
+colorNames["ivory"]="#FFFFF0"; colorNames["khaki"]="#F0E68C";
+colorNames["lavender"]="#E6E6FA"; colorNames["lavenderblush"]="#FFF0F5";
+colorNames["lawngreen"]="#7CFC00"; colorNames["lemonchiffon"]="#FFFACD";
+colorNames["lightblue"]="#ADD8E6"; colorNames["lightcoral"]="#F08080";
+colorNames["lightcyan"]="#E0FFFF"; colorNames["lightgoldenrodyellow"]="#FAFAD2";
+colorNames["lightgreen"]="#90EE90"; colorNames["lightgrey"]="#D3D3D3";
+colorNames["lightpink"]="#FFB6C1"; colorNames["lightsalmon"]="#FFA07A";
+colorNames["lightseagreen"]="#20B2AA"; colorNames["lightskyblue"]="#87CEFA";
+colorNames["lightslategray"]="#778899"; colorNames["lightsteelblue"]="#B0C4DE";
+colorNames["lightyellow"]="#FFFFE0"; colorNames["limegreen"]="#32CD32";
+colorNames["linen"]="#FAF0E6"; colorNames["mediumaquamarine"]="#66CDAA";
+colorNames["mediumblue"]="#0000CD"; colorNames["mediumorchid"]="#BA55D3";
+colorNames["ediumpurple"]="#9370D"; colorNames["mediumseagreen"]="#3CB371";
+colorNames["mediumslateblue"]="#7B68EE"; colorNames["mediumspringgreen"]="#00FA9A";
+colorNames["mediumturquoise"]="#48D1CC"; colorNames["mediumvioletred"]="#C71585";
+colorNames["midnightblue"]="#191970"; colorNames["mintcream"]="#F5FFFA";
+colorNames["mistyrose"]="#FFE4E1"; colorNames["moccasin"]="#FFE4B5";
+colorNames["navajowhite"]="#FFDEAD"; colorNames["oldlace"]="#FDF5E6";
+colorNames["olivedrab"]="#6B8E23"; colorNames["orange"]="#FFA500";
+colorNames["orangered"]="#FF4500"; colorNames["orchid"]="#DA70D6";
+colorNames["palegoldenrod"]="#EEE8AA"; colorNames["palegreen"]="#98FB98";
+colorNames["paleturquoise"]="#AFEEEE"; colorNames["palevioletred"]="#DB7093";
+colorNames["papayawhip"]="#FFEFD5"; colorNames["peachpuff"]="#FFDAB9";
+colorNames["peru"]="#CD853F"; colorNames["pink"]="#FFC0CB";
+colorNames["plum"]="#DDA0DD"; colorNames["powderblue"]="#B0E0E6";
+colorNames["rosybrown"]="#BC8F8F"; colorNames["royalblue"]="#4169E1";
+colorNames["saddlebrown"]="#8B4513"; colorNames["salmon"]="#FA8072";
+colorNames["sandybrown"]="#F4A460"; colorNames["seagreen"]="#2E8B57";
+colorNames["seashell"]="#FFF5EE"; colorNames["sienna"]="#A0522D";
+colorNames["skyblue"]="#87CEEB"; colorNames["slateblue"]="#6A5ACD";
+colorNames["slategray"]="#708090"; colorNames["snow"]="#FFFAFA";
+colorNames["springgreen"]="#00FF7F"; colorNames["steelblue"]="#4682B4";
+colorNames["tan"]="#D2B48C"; colorNames["thistle"]="#D8BFD8";
+colorNames["tomato"]="#FF6347"; colorNames["turquoise"]="#40E0D0";
+colorNames["violet"]="#EE82EE"; colorNames["wheat"]="#F5DEB3";
+colorNames["whitesmoke"]="#F5F5F5"; colorNames["yellowgreen"]="#9ACD32";
+var canvas_bgcolor = "";
+var canvas_width = 200;
+var canvas_height = 200;
+var canvas_noshade = 0;
+var canvas_nofill = 0;
+var canvas_noshadow = 0;
+var canvas_htmltext = 0;
+var canvas_imgtext = 0;
+var canvas_notext = 0;
+// canvas chart extension
+
+var s5NotesWindow;
+var s5NotesWindowLoaded = false;
+var previousSlide = 0;
+var presentationStart = new Date();
+var slideStart = new Date();
+
+var countdown = {
+ timer: 0,
+ state: 'pause',
+ start: new Date(),
+ end: 0,
+ remaining: 0
+};
+
+var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
+if(isIE) var notIE7 = parseInt(navigator.appVersion) < 7 ? 1 : 0;
+var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
+var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
+var isS2 = navigator.userAgent.indexOf('Safari') >= 2 ? 1 : 0;
+
+function hasClass(object, className) {
+ if (!object.className) return false;
+ return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
+}
+
+function hasValue(object, value) {
+ if (!object) return false;
+ return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
+}
+
+function removeClass(object,className) {
+ if (!object || !hasClass(object,className)) return;
+ object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
+}
+
+function addClass(object,className) {
+ if (!object || hasClass(object, className)) return;
+ if (object.className) {
+ object.className += ' '+className;
+ } else {
+ object.className = className;
+ }
+}
+
+function changeClass(object,className) {
+ if (!object) return;
+ object.firstChild.className = className;
+}
+
+function GetElementsWithClassName(elementName,className) {
+ var allElements = document.getElementsByTagName(elementName);
+ var elemColl = new Array();
+ for (var i = 0; i< allElements.length; i++) {
+ if (hasClass(allElements[i], className)) {
+ elemColl[elemColl.length] = allElements[i];
+ }
+ }
+ return elemColl;
+}
+
+function isParentOrSelf(element, id) {
+ if (element == null || element.nodeName=='BODY') return false;
+ else if (element.id == id) return true;
+ else return isParentOrSelf(element.parentNode, id);
+}
+
+function nodeValue(node) {
+ var result = "";
+ if (node.nodeType == 1) {
+ var children = node.childNodes;
+ for (var i = 0; i < children.length; ++i) {
+ result += nodeValue(children[i]);
+ }
+ }
+ else if (node.nodeType == 3) {
+ result = node.nodeValue;
+ }
+ return(result);
+}
+
+function slideLabel() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var list = document.getElementById('jumplist');
+ smax = slideColl.length;
+ for (var n = 0; n < smax; n++) {
+ var obj = slideColl[n];
+ var did = 'slide' + n.toString();
+ obj.setAttribute('id',did);
+ var otext = '';
+ var menu = obj.firstChild;
+ if (!menu) continue; // to cope with empty slides
+ while (menu && menu.nodeType == 3) {
+ menu = menu.nextSibling;
+ }
+ if (!menu) continue; // to cope with slides with only text nodes
+ var menunodes = menu.childNodes;
+ for (var o = 0; o < menunodes.length; o++) {
+ otext += nodeValue(menunodes[o]);
+ }
+ list.options[list.length] = new Option(n + ' : ' + otext, n);
+ }
+}
+
+function currentSlide() {
+ var cs, at, fd, ss;
+ if (document.getElementById) {
+ cs = document.getElementById('currentSlide');
+ } else {
+ cs = document.currentSlide;
+ }
+ fd = fadeModus?"F":"&ndash;";
+ ss = audioSupport?"S":"&ndash;";
+ at = (autoMatic?(playPause?"||":(playLoop?"&gt;0":"&gt;|")):"&ndash;&ndash;");
+ cs.innerHTML = '<div id="plink" nowrap="nowrap">' +
+ '<span id="csFade">[' + fd + ss + ']<\/span>&nbsp;' +
+ '<span id="csHere"><strong>' + snum + '<\/strong><\/span>' +
+ '<span id="csSep">\/<\/span>' +
+ '<span id="csTotal">' + (smax-1) + '<\/span>&nbsp;' +
+ '<span id="csAuto">[' + at + ']<\/span>' +
+ '<\/div>';
+
+ if (snum == 0) {
+ cs.style.visibility = 'hidden';
+ } else {
+ cs.style.visibility = 'visible';
+ }
+}
+
+function go(step) {
+ if (document.getElementById('slideProj').disabled || step == 0) return;
+ jl = document.getElementById('jumplist');
+ cid = 'slide' + snum;
+ var ce = document.getElementById(cid);
+ if (incrementals[snum].length > 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ removeClass(incrementals[snum][i], 'current');
+ removeClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ if (step != 'j') {
+ snum += step;
+ lmax = smax - 1;
+ if (snum > lmax) snum = lmax;
+ if (snum < 0) snum = 0;
+ }else {
+ snum = parseInt(jl.value);
+ }
+ nid = 'slide' + snum;
+ var ne = document.getElementById(nid);
+ if (!ne) {
+ ne = document.getElementById('slide0');
+ nid = 'slide0';
+ snum = 0;
+ }
+ if (step < 0) {
+ incpos = incrementals[snum].length
+ }else {
+ incpos = 0;
+ }
+ if (incrementals[snum].length > 0 && incpos == 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ if (hasClass(incrementals[snum][i], 'current')) {
+ incpos = i + 1;
+ }else {
+ addClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ }
+ if (incrementals[snum].length > 0 && incpos > 0) {
+ addClass(incrementals[snum][incpos - 1], 'current');
+ }
+ var guru = document.getElementById('guru');
+ if(guru && snum==0) {
+ guru.style.visibility = 'visible';
+ }else if(guru && snum>0) {
+ guru.style.visibility = 'hidden';
+ }
+ if(tranSitions && s5mode && fadeModus) {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {fadeoutSound(curSoundID,true); } // audio support
+ }
+ changeOpac(0,nid);
+ changeOpac(100,cid);
+ ce.style.visibility = 'visible';
+ shiftOpacity(cid,fadeDuration);
+ window.setTimeout("changeSlides()",fadeDuration);
+ }else {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {stopSound(curSoundID); } // audio support
+ }
+ ce.style.visibility = 'hidden';
+ if (isOp) location.hash = nid;
+ ne.style.visibility = 'visible';
+ finishSlides();
+ }
+}
+
+function changeSlides() {
+ if(nid != cid) changeOpac(100,cid);
+ document.getElementById(cid).style.visibility = 'hidden';
+ document.getElementById(nid).style.visibility = 'visible';
+ if (isOp) location.hash = nid;
+ shiftOpacity(nid,fadeDuration);
+ window.setTimeout("finishSlides()",fadeDuration);
+}
+
+function finishSlides() {
+ jl.selectedIndex = snum;
+ currentSlide();
+ loadNote();
+ permaLink();
+ number = undef;
+ if(sound[getSoundID(nid)]) {
+ playSound(nid); // audio support
+ }else if(sound[bgSoundItem] && curSoundID != bgSoundItem) {
+ playSound(bgSoundItem); // audio support
+ }
+}
+
+function goTo(target) {
+ if (target >= smax || target == snum) return;
+ go(target - snum);
+}
+
+function subgo(step) {
+ if (step > 0) {
+ removeClass(incrementals[snum][incpos - 1],'current');
+ removeClass(incrementals[snum][incpos], 'incremental');
+ if(tranSitions && s5mode && fadeModus) {
+ if(!incrementals[snum][incpos].id) {
+ var tmp = new Date(); tid = "inc" + String(tmp.getTime());
+ incrementals[snum][incpos].id = tid;
+ }else {
+ tid = incrementals[snum][incpos].id;
+ }
+ if(typeof(incrementals[snum][incpos].src) != "undefined" || incrementals[snum][incpos].getContext) {
+ changeOpac(0,tid);
+ addClass(incrementals[snum][incpos],'current');
+ shiftOpacity(tid,incrDuration);
+ setTimeout("nextInc()",incrDuration);
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ } else {
+ incpos--;
+ removeClass(incrementals[snum][incpos],'current');
+ addClass(incrementals[snum][incpos], 'incremental');
+ addClass(incrementals[snum][incpos - 1],'current');
+ loadNote();
+ }
+}
+
+function nextInc() {
+ incpos++;
+ loadNote();
+}
+
+function toggle() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ var guru = document.getElementById('guru');
+ if (!slides.disabled) {
+ stopPlay();
+ if(audioSupport && !swfUnloaded) stopAllSounds();
+ slides.disabled = true;
+ outline.disabled = false;
+ s5mode = false;
+ fontSize(1,'em');
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'visible';
+ }
+ if(guru) guru.style.visibility = 'hidden';
+ } else {
+ slides.disabled = false;
+ outline.disabled = true;
+ s5mode = true;
+ fontScale();
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'hidden';
+ }
+ slideColl[snum].style.visibility = 'visible';
+ if(guru && snum==0) guru.style.visibility = 'visible';
+ }
+}
+
+function showHide(action) {
+ var obj = GetElementsWithClassName('*','hideme')[0];
+ switch (action) {
+ case 's':
+ obj.style.visibility = 'visible';
+ break;
+ case 'h':
+ obj.style.visibility = 'hidden';
+ break;
+ case 'k':
+ if (obj.style.visibility != 'visible') {
+ obj.style.visibility = 'visible';
+ } else {
+ obj.style.visibility = 'hidden';
+ }
+ break;
+ }
+}
+
+function keys(key) {
+ if (!key) {
+ key = event;
+ key.which = key.keyCode;
+ }
+ if (helpmode) {
+ dumpHelpReq();
+ return;
+ }
+ if (key.which == 84 && !isOp) {
+ toggle();
+ return;
+ }
+ if (s5mode) {
+ if (autoMatic) {
+ switch (key.which) {
+ case 70: // f/ading on/off
+ switchFade();
+ break;
+ case 83: // s/ound on/off
+ toggleSounds();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 65: // a/utoplay on/off
+ stopPlay();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 80: // p/ause
+ case 32: // spacebar
+ pausePlay();
+ break;
+ }
+ }else {
+ switch (key.which) {
+ case 8: // backspace = HELP
+ createHelpReq();
+ break;
+ case 10: // return
+ case 13: // enter
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ if(number != undef) {
+ goTo(number);
+ break;
+ }
+ case 32: // spacebar
+ case 34: // page down
+ case 39: // rightkey
+ case 40: // downkey
+ if(number != undef) {
+ go(number);
+ } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ break;
+ case 33: // page up
+ case 37: // leftkey
+ case 38: // upkey
+ if(number != undef) {
+ go(-1 * number);
+ } else if (!incrementals[snum] || incpos <= 0) {
+ go(-1);
+ } else {
+ subgo(-1);
+ }
+ break;
+ case 65: // a/utoplay
+ startPlay();
+ break;
+ case 72: // h
+ case 36: // home
+ goTo(0);
+ break;
+ case 69: // e
+ case 35: // end
+ goTo(smax-1);
+ break;
+ case 70: // f/ade transitions on/off
+ switchFade();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 83: // s/ound support on/off
+ toggleSounds();
+ break;
+ case 27: // escape
+ case 81: // q
+ if(!isOp) byby();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 78: // n
+ createNotesWindow();
+ break;
+ }
+ if (key.which < 48 || key.which > 57) {
+ number = undef;
+ } else {
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
+ }
+ }
+ }
+ return false;
+}
+
+function clicker(e) {
+ number = undef;
+ var target;
+ if (window.event) {
+ target = window.event.srcElement;
+ e = window.event;
+ } else {
+ target = e.target;
+ }
+ if (target.href != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
+ if (!helpmode) {
+ if (!e.which || e.which == 1) {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ }
+ } else {
+ dumpHelpReq();
+ }
+}
+
+function findSlide(hash) {
+ var target = null;
+ var slides = GetElementsWithClassName('*','slide');
+ for (var i = 0; i < slides.length; i++) {
+ var targetSlide = slides[i];
+ if ( (targetSlide.name && targetSlide.name == hash)
+ || (targetSlide.id && targetSlide.id == hash) ) {
+ target = targetSlide;
+ break;
+ }
+ }
+ while(target != null && target.nodeName != 'BODY') {
+ if (hasClass(target, 'slide')) {
+ return parseInt(target.id.slice(5));
+ }
+ target = target.parentNode;
+ }
+ return null;
+}
+
+function slideJump() {
+ if (window.location.hash == null) return;
+ var sregex = /^#slide(\d+)$/;
+ var matches = sregex.exec(window.location.hash);
+ var dest = null;
+ if (matches != null) {
+ dest = parseInt(matches[1]);
+ } else {
+ dest = findSlide(window.location.hash.slice(1));
+ }
+ if (dest != null)
+ go(dest - snum);
+}
+
+function fixLinks() {
+ var thisUri = window.location.href;
+ thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
+ var aelements = document.getElementsByTagName('A');
+ for (var i = 0; i < aelements.length; i++) {
+ var a = aelements[i].href;
+ var slideID = a.match('\#slide[0-9]{1,2}');
+ if ((slideID) && (slideID[0].slice(0,1) == '#')) {
+ var dest = findSlide(slideID[0].slice(1));
+ if (dest != null) {
+ if (aelements[i].addEventListener) {
+ aelements[i].addEventListener("click", new Function("e",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "if (e.preventDefault) e.preventDefault();"), true);
+ } else if (aelements[i].attachEvent) {
+ aelements[i].attachEvent("onclick", new Function("",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "event.returnValue = false;"));
+ }
+ }
+ }
+ }
+}
+
+function externalLinks() {
+ if (!document.getElementsByTagName) return;
+ var anchors = document.getElementsByTagName('a');
+ for (var i=0; i<anchors.length; i++) {
+ var anchor = anchors[i];
+ if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
+ anchor.target = '_blank';
+ addClass(anchor,'external');
+ }
+ }
+}
+
+function permaLink() {
+ document.getElementById('plink').href = window.location.pathname + '#slide' + snum;
+}
+
+function createControls() {
+ var controlsDiv = document.getElementById("controls");
+ if (!controlsDiv) return;
+ var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
+ var hideDiv, hideList = '';
+ if (controlVis == 'hidden') {
+ hideDiv = hider;
+ } else {
+ hideList = hider;
+ }
+ if(isOp) {
+ var str = '';
+ }else {
+ var str = '<a accesskey="t" id="sheet" title="toggle CSS" href="javascript:toggle();">&plusmn;<\/a>';
+ }
+ if(isIE) {
+ var tmp = "move around&xA0;until the color&xA0;change to red!";
+ }else if(isS2) {
+ var tmp = "move around\r\nuntil the color\r\nchange to red!";
+ }else {
+ var tmp = "move around until color change to red!";
+ }
+ if(isIE) {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] for keyboard help!"><ul>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst" style="vertical-align: middle; width: 160px;"><select style="cursor: auto; width: 160px; height: auto;" id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del" style="vertical-align: middle; width: 52px;"><select style="cursor: auto; width: 52px; height: auto;" id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul><\/div><\/form>';
+ }else {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] or double click this area for keyboard help!" ondblclick="createHelpReq();"><ul>' +
+ '<li id="exit"><a href="javascript:byby();" accesskey="q" title="exit Show"><\/a><\/li>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li class="vr"><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst"><a id="list" style="cursor:wait;" title="' + tmp + '"><\/a><select id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="fadeLinks" class="vr"><\/li>' +
+ '<li id="fade"><a class="isoff" href="javascript:switchFade();" accesskey="f" title="Transions"><\/a><\/li>' +
+ '<li id="audioLinks" class="vr"><\/li>' +
+ '<li id="audio"><a class="isoff" href="javascript:toggleSounds();" accesskey="s" title="Sounds" ><\/a><\/li>' +
+ '<li id="vol"><a id="volume" style="cursor:wait;" title="' + tmp + '"><\/a><select id="volumelist" title="select Volume" onchange="setVolume();"><option value="100">100<\/option><option value="90">90<\/option><option value="80">80<\/option><option value="70">70<\/option><option value="60">60<\/option><option value="50">50<\/option><option value="40">40<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="10">10<\/option><option value="0">0<\/option><\/select><\/li>' +
+ '<li id="autoLinks" class="vr"><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del"><a id="delay" style="cursor:wait;" title="' + tmp + '"><\/a><select id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul>' +
+ '<a href="http://s5.netzgesta.de" target="_blank" title="S5 Reloaded"><img style="position: absolute; right: 0; bottom: 0;" src="data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAYAAAASYli2AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAYpSURBVHjaYvz//z8DOYCRkZEZRAEx0Ij/f2HiAAHEgqYIpACkkB1J7g8Q/wLRIJ1QNSB5fiDmAOLvQKHPQPoHSB4ggFiQDGMCUnxALAPECkAsBLIdiD8A8SMgfghU8wlqkTgQK1ZVVWldv3792fr16y8D+c9AhgMEECPIy1DDRIDYAojdzMzMWNXV1UG2/v/y5Qvzw4cPP587d24/kH8Gar/uwoULQ+/cufNFXFyciZmZ+UVmZuZKoFmvAQII5kJOIDbi4uKK2Llz53EbG5vP6GGWn5+vMWnSpJtA5jcg5v327Rtnc3PzfSD79+rVq2WBNBtIHUAAwQzkAWKzBQsWnIUZFhISovXmzZsfkpKSDD09PY8kJCR+QtWCguGvrKwsz7Rp07Q4ODh+srCwgILiH0gSIIBgBrICsUBoaCgorBiANgqvXbtWDMg8AcQf9+7d+x0o9xbI/gJV/3fVqlUvmJiY/gIdcaWhoYETahEDQADBDPwNxO9h3gNpBiq6f/HiRbWjR4+yvnr16grQNbeh6kCWsxkYGIhClT8yNDQUgyYhBoAAYoIKfgXi06mpqUowQ+vr6x+uW7fu0suXL8+uWbOGS0BAwB7kC6jXvqmoqLDIyclxzZo1S4udnR2WtBgAAggWyyCXSgOxZUxMjGpWVtY7S0vLr8iRsnnzZl4/P7/DQCYoYtSA2DApKUkVGNNPDh06dBrIvwU06xNAAMEM5AIKqAOxCjQsmHl5eXWdnJx4N2zYcB4prd4CUpfwJRuAAGJCimULoGYpbm5uZ5DBnz9/5tq4caPWkSNHeJEc+g0aTFzfv3/nACabjzk5OW8FBQVloLmHASCAYJECUiTg7+//HJiQTzY2NsrfvXv3n7m5+T5YMgJGEkjDS2gY/pKRkeHt7Ow0Bsb0v9+/fz+HxTJAAMG8DHKFLTC9aRUXF79BT9Qgw4CWHAAy70FdYgjEDgkJCTpWVlYMQBfeAaaMPqBZbwECCGYgMzQGQSleCehS0X///jEDvf9lxYoVoOTyAIjfANX+BqrlBrL1gLFf09vb+0FaWvoHMBctA6USUKQABBAjrPiCliKg7AOKIG5ougLlju9Ipc1foDJWqMWGhYWFtsBg4RISEnrg5uY2BWQgQACxIBkGMkQKijmRfPwXWuI8ASp7DQ1vEP4DDO8PwBzzDJheT0CLPQaAAEJOh0o8zAzeihwMiv+gGZ0B4sz/bIwM797/YTh1/wfDIWj5qAfMmtFnzpz5ICIiwqKoqPgjKChoOtCs5wABhJyXpUCGzddgOIethJ71jEFi1nNwgQrKz8zv37//097eDop15qVLl0pAzWAACCAWhEMYOJFdduELA++b3wxsTIwMfzmYGH6xMDG8gYYpKAg+cnJy/gB6VwuYZFiA7E+wvAwQQCy46ozexwzG17+BYx6UVE4B8Vmo68CRFR0dDQo3UAHBBUwJ4lCLGAACCNnAv4zQxAkCxbIMZ0EuBIYb98EPDFo3voGTzjOogVzArGf969cvNmC2+wssHD7BDAQIIBakmHwPDPy3MAMNeBhgpfbbVEkGhqQbDJaXvjI8BPJB4jz79u37DcwlP+fPn38NuTwECCBkA1+8+8Nwtusxg+STHwwcP/8z8EuwMXA1KjBcBSlwEmRgBhrID/U2O7QMBIEHxsbGkrAwBAggmIGgNMT64AfDWyB+By0EQMVZlC0/wwsXQYa38hzgCGGBWv5ZU1OT4c+fP8yLFi1SA3r5Haw8BAggmIGg5KBpJ8BgeOYTg8S3f2DN/OxMDNwgw0AKnv0EJ+avsITu7u6+EZqzQEHwHFqaMwAEEAtShS/pLcTwrU+Z4QwsyQANOwIL06tfGV5BqwmQWoGKigoLYJnJvWPHjhstLS169vb2M0DqAAIIVh6CXHT/9ndIawEUITCXgUDrQwbGbe8YjkJdAzZQVVVV/t69e8LAgtUYaNgxWKQABBByacMHzfTK9gIMYkBZpj//GT4c+8gAKm1AsfseqPYPtHTXAtaEacBqlgHoyq+srKw3XV1dFwHlvwEEECNyYwmp3cIJjbUf0DbLP7RGEg+0bcMCjQxQzH8BWQgQQIzktr5wAYAAYmKgMgAIMAAp8Fx3osz1lgAAAABJRU5ErkJggg==" width="20" height="32" alt="S5" \/><\/a>' +
+ '<\/div><\/form>';
+ }
+ if (controlVis == 'hidden') {
+ var hidden = document.getElementById('navLinks');
+ } else {
+ var hidden = document.getElementById('jumplist');
+ }
+ addClass(hidden,'hideme');
+}
+
+function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
+ if (!s5mode && !isOp) return false;
+ var hScreen = screen.width; var vScreen = screen.height;
+ var vWindow = window.outerHeight; var hWindow = window.outerWidth;
+ if (isOp && s5mode && defaultView=='slideshow' && ((hScreen != hWindow) || (vScreen != vWindow))) {
+ toggle();
+ return false;
+ }
+ if (isOp && !s5mode && ((hScreen != hWindow) || (vScreen != vWindow))) return false;
+ if (isOp && !s5mode && (hScreen == hWindow) && (vScreen == vWindow)) toggle();
+ var vScale = 48; // both yield 16 (the usual browser default) at 1024x768
+ var hScale = 64; // perhaps should auto-calculate based on theme's declared value?
+ if (window.innerHeight) {
+ var vSize = window.innerHeight;
+ var hSize = window.innerWidth;
+ } else if (document.documentElement.clientHeight) {
+ var vSize = document.documentElement.clientHeight;
+ var hSize = document.documentElement.clientWidth;
+ } else if (document.body.clientHeight) {
+ var vSize = document.body.clientHeight;
+ var hSize = document.body.clientWidth;
+ } else {
+ var vSize = 700; // assuming 1024x768, minus chrome and such equals 8:5
+ var hSize = 1024; // these do not account for kiosk mode or Opera Show
+ }
+ var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
+ extendImgSizes(newSize); // scalable images extension
+ extendCanSizes(newSize); // scalable canvas extension
+ extendObjSizes(newSize); // scalable object extension
+ fontSize(newSize,"px");
+ if(!isS2 || firstTime==0) {
+ generateCanvas(); // dynamic canvas extension
+ }
+ if (isGe) { // hack to counter incremental reflow bugs
+ var obj = document.getElementsByTagName('body')[0];
+ obj.style.visibility = 'hidden';
+ obj.style.display = 'none';
+ obj.style.display = 'block';
+ obj.style.visibility = 'visible';
+ changeOpac(100,'slide' + snum);
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("fixReflow()",10);
+ }else {
+ setListPos(); // invisible select extension
+ }
+}
+
+function fixReflow() {
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("finishReflow()",10);
+}
+function finishReflow() {
+ setListPos(); // invisible select extension
+}
+
+function fontSize(val,fmt) {
+ var value = val + fmt;
+ if (!(s5ss = document.getElementById('s5ss'))) {
+ if (!document.createStyleSheet) {
+ document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
+ s5ss.setAttribute('media','screen, projection');
+ s5ss.setAttribute('id','s5ss');
+ } else {
+ document.createStyleSheet();
+ document.s5ss = document.styleSheets[document.styleSheets.length - 1];
+ }
+ }
+ if (!(document.s5ss && document.s5ss.addRule)) {
+ while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
+ s5ss.appendChild(document.createTextNode('html {font-size: ' + value + ' !important;}'));
+ } else {
+ document.s5ss.addRule('html','font-size: ' + value + ' !important;');
+ }
+}
+
+function windowChange() {
+ fontScale();
+}
+
+function notOperaFix() {
+ slideCSS = document.getElementById('slideProj').href;
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ slides.setAttribute('media','screen');
+ outline.disabled = true;
+ if (isGe) {
+ slides.setAttribute('href','null'); // Gecko fix
+ slides.setAttribute('href',slideCSS); // Gecko fix
+ }
+ if ((isIE && notIE7) && document.styleSheets && document.styleSheets[0]) {
+ document.styleSheets[0].addRule('img', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('div', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('.slide', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ }
+}
+
+function getIncrementals(obj) {
+ var incrementals = new Array();
+ if (!obj)
+ return incrementals;
+ var children = obj.childNodes;
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ if (hasClass(child, 'incremental')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'incremental');
+ for (var j = 0; j < child.childNodes.length; j++) {
+ if (child.childNodes[j].nodeType == 1) {
+ addClass(child.childNodes[j], 'incremental');
+ }
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ removeClass(child,'incremental');
+ }
+ }
+ if (hasClass(child, 'show-first')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'show-first');
+ if (child.childNodes[isGe].nodeType == 1) {
+ removeClass(child.childNodes[isGe], 'incremental');
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ }
+ }
+ incrementals = incrementals.concat(getIncrementals(child));
+ }
+ return incrementals;
+}
+
+function createIncrementals() {
+ var incrementals = new Array();
+ for (var i = 0; i < smax; i++) {
+ incrementals[i] = getIncrementals(document.getElementById('slide'+i));
+ }
+ return incrementals;
+}
+
+function trap(e) {
+ if (!e) {
+ e = event;
+ e.which = e.keyCode;
+ }
+ try {
+ modifierKey = e.ctrlKey || e.altKey || e.metaKey;
+ }
+ catch(e) {
+ modifierKey = false;
+ }
+ return modifierKey || e.which == 0;
+}
+
+// notes extension
+function noteLabel() { // Gives notes id's to match parent slides
+ var notes = GetElementsWithClassName('div','notes');
+ for (var i = 0; i < notes.length; i++) {
+ var note = notes[i];
+ var id = 'note' + note.parentNode.id.substring(5);
+ note.setAttribute('id',id);
+ }
+ resetElapsedSlide();
+ resetRemainingTime();
+ window.setInterval('updateElaspedTime()', 1000);
+}
+
+function createNotesWindow() { // creates a window for our notes
+ if (!s5NotesWindow || s5NotesWindow.closed) { // Create the window if it doesn't exist
+ s5NotesWindowLoaded = false;
+ // Note: Safari has a tendency to ignore window options preferring to default to the settings of the parent window, grr.
+ s5NotesWindow = window.open(s5Path+'ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0');
+ }
+ if (s5NotesWindowLoaded) { // Load the current note if the Note HTML has loaded
+ loadNote();
+ } else { // Keep trying...
+ window.setTimeout('createNotesWindow()', 50);
+ }
+}
+
+function loadNote() {
+// Loads a note into the note window
+ var notes = nextNotes = '<em class="disclaimer">There are no notes for this slide.</em>';
+ if (document.getElementById('note' + snum)) {
+ notes = document.getElementById('note' + snum).innerHTML;
+ }
+ if (document.getElementById('note' + (snum + 1))) {
+ nextNotes = document.getElementById('note' + (snum + 1)).innerHTML;
+ }
+
+ var jl = document.getElementById('jumplist');
+ var slideTitle = jl.options[jl.selectedIndex].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex) ? ' (' + jl.selectedIndex + '/' + (smax - 1) + ')' : '');
+ if (incrementals[snum].length > 0) {
+ slideTitle += ' <small>[' + incpos + '/' + incrementals[snum].length + ']</small>';
+ }
+ if (jl.selectedIndex < smax - 1) {
+ var nextTitle = jl.options[jl.selectedIndex + 1].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex + 1) ? ' (' + (jl.selectedIndex + 1) + '/' + (smax - 1) + ')' : '');
+ } else {
+ var nextTitle = '[end of slide show]';
+ }
+
+ if (s5NotesWindow && !s5NotesWindow.closed && s5NotesWindow.document) {
+ s5NotesWindow.document.getElementById('slide').innerHTML = slideTitle;
+ s5NotesWindow.document.getElementById('notes').innerHTML = notes;
+ s5NotesWindow.document.getElementById('next').innerHTML = nextTitle;
+ s5NotesWindow.document.getElementById('nextnotes').innerHTML = nextNotes;
+ }
+ resetElapsedSlide();
+}
+
+function minimizeTimer(id) {
+ var obj = s5NotesWindow.document.getElementById(id);
+ if (hasClass(obj,'collapsed')) {
+ removeClass(obj,'collapsed');
+ } else {
+ addClass(obj,'collapsed');
+ }
+}
+
+function resetElapsedTime() {
+ presentationStart = new Date();
+ slideStart = new Date();
+ updateElaspedTime();
+}
+
+function resetElapsedSlide() {
+ if (snum != previousSlide) {
+ slideStart = new Date();
+ previousSlide = snum;
+ updateElaspedTime();
+ }
+}
+
+function updateElaspedTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var now = new Date();
+ var ep = s5NotesWindow.document.getElementById('elapsed-presentation');
+ var es = s5NotesWindow.document.getElementById('elapsed-slide');
+ ep.innerHTML = formatTime(now.valueOf() - presentationStart.valueOf());
+ es.innerHTML = formatTime(now.valueOf() - slideStart.valueOf());
+}
+
+function resetRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var startField = s5NotesWindow.document.getElementById('startFrom');
+ startFrom = readTime(startField.value);
+ countdown.remaining = startFrom * 60000; // convert to msecs
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var timeLeft = formatTime(countdown.remaining);
+ tl.innerHTML = timeLeft;
+}
+
+function updateRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var now = new Date();
+ if (countdown.state == 'run') {
+ countdown.remaining = countdown.end - now;
+ }
+ tl.style.color = '';
+ tl.style.backgroundColor = '';
+ if (countdown.remaining >= 0) {
+ var timeLeft = formatTime(countdown.remaining);
+ removeClass(tl,'overtime');
+ if (countdown.remaining < 300000) {
+ tl.style.color = 'rgb(' + (255-Math.round(countdown.remaining/2000)) + ',0,0)';
+ tl.style.backgroundColor = 'rgb(255,255,' + (Math.round(countdown.remaining/2000)) + ')';
+ }
+ } else {
+ var timeLeft = '-' + formatTime(-countdown.remaining);
+ addClass(tl,'overtime');
+ }
+ tl.innerHTML = timeLeft;
+}
+
+function toggleRemainingTime() {
+ if (countdown.state == 'pause') countdown.state = 'run'; else countdown.state = 'pause';
+ if (countdown.state == 'pause') {
+ window.clearInterval(countdown.timer);
+ }
+ if (countdown.state == 'run') {
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ countdown.timer = window.setInterval('updateRemainingTime()', 1000);
+ }
+}
+
+function alterRemainingTime(amt) {
+ var change = amt * 60000; // convert to msecs
+ countdown.end += change;
+ countdown.remaining += change;
+ updateRemainingTime();
+}
+
+function formatTime(msecs) {
+ var time = new Date(msecs);
+
+ var hrs = time.getUTCHours() + ((time.getUTCDate() -1) * 24); // I doubt anyone will spend more than 24 hours on a presentation or single slide but just in case...
+ hrs = (hrs < 10) ? '0'+hrs : hrs;
+ if (hrs == 'NaN' || isNaN(hrs)) hrs = '--';
+
+ var min = time.getUTCMinutes();
+ min = (min < 10) ? '0'+min : min;
+ if (min == 'NaN' || isNaN(min)) min = '--';
+
+ var sec = time.getUTCSeconds();
+ sec = (sec < 10) ? '0'+sec : sec;
+ if (sec == 'NaN' || isNaN(sec)) sec = '--';
+
+ return hrs + ':' + min + ':' + sec;
+}
+
+function readTime(val) {
+ var sregex = /:/;
+ var matches = sregex.exec(val);
+ if (matches == null) {
+ return val;
+ } else {
+ var times = val.split(':');
+ var hours = parseInt(times[0]);
+ var mins = parseInt(times[1]);
+ var total = (hours * 60) + mins;
+ return total;
+ }
+}
+// notes extension
+
+// startup process
+function createSlideShow() {
+ defaultCheck();
+ if(!isIE) createDetector(); // (degrade IE) scalable images extension
+ if(opac!=0 || isIE) { // &&!isIE (degrade IE)
+ tranSitions = false;
+ fadeModus = false;
+ }
+ if(tranSitions && document.getElementById && document.createElement){
+ createProgress();
+ var nop=document.getElementById('StartupControl');
+ nop.onload = dumpProgress;
+ }else {
+ startup();
+ showAll();
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+ }
+}
+
+function defaultCheck() {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'defaultView') {
+ defaultView = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'controlVis') {
+ controlVis = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'tranSitions') {
+ tranSitions = (allMetas[i].content == "true") ? true : false;
+ fadeModus = (tranSitions == true) ? true : false;
+ }
+ if (allMetas[i].name == 'fadeDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ fadeDuration = Math.max(200,Math.min(tmp,2000));
+ }
+ if (allMetas[i].name == 'incrDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ incrDuration = Math.max(50,Math.min(tmp,500));
+ }
+ if (allMetas[i].name == 'autoMatic') {
+ autoMatic = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playLoop') {
+ playLoop = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playDelay') {
+ var tmp = parseInt(allMetas[i].content);
+ playDelay = Math.max(5,Math.min(tmp,90))*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ }
+ if (allMetas[i].name == 'audioSupport') {
+ audioSupport = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'audioVolume') {
+ var tmp = parseInt(allMetas[i].content);
+ audioVolume = Math.max(0,Math.min(tmp,100));
+ }
+ if (allMetas[i].name == 'audioError') {
+ audioError = (allMetas[i].content == "true") ? true : false;
+ }
+ }
+}
+
+function createProgress() {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "StartupProgress";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=100)";
+ }else {
+ pg.style.opacity = 1.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/progress.gif)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+
+ var im = document.createElement('img');
+ im.id = "StartupControl";
+ im.src = s5Path+"ui/graphic_support/blank.gif?" + new Date().valueOf();
+ document.getElementsByTagName("body")[0].appendChild(im);
+}
+
+function startup() {
+ createControls(); // hallvord
+ slideLabel();
+ incrementals = createIncrementals();
+ noteLabel(); // [SI:060104] must follow slideLabel()
+ loadNote();
+ fixLinks();
+ externalLinks();
+ fontScale();
+ if (!isOp) {
+ if(isIE) {
+ document.getElementById('lst').style.backgroundImage = 'none';
+ document.getElementById('del').style.backgroundImage = 'none';
+ }else {
+ document.getElementById('audio').style.backgroundImage = 'none';
+ }
+ notOperaFix();
+ }else if(isOp) {
+ var obj = document.getElementById('exit');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('exit').style.opacity = 0.5;
+ obj = document.getElementById('toggle');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('toggle').style.opacity = 0.5;
+ document.getElementById('jumplist').style.visibility = 'hidden';
+ document.getElementById('list').style.visibility = 'hidden';
+ document.getElementById('lst').style.opacity = 0.5;
+ obj = document.getElementById('audio');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('audio').style.opacity = 0.5;
+ document.getElementById('volumelist').style.visibility = 'hidden';
+ document.getElementById('volume').style.visibility = 'hidden';
+ document.getElementById('vol').style.opacity = 0.5;
+ document.getElementById('delaylist').style.visibility = 'hidden';
+ document.getElementById('delay').style.visibility = 'hidden';
+ document.getElementById('del').style.opacity = 0.5;
+ }
+ slideJump();
+ if (defaultView == 'outline') toggle();
+ document.onkeyup = keys;
+ document.onkeypress = trap;
+ document.onclick = clicker;
+}
+
+function preloadImgages() {
+ var temp = '';
+ var objects = document.getElementsByTagName('img');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].src != '') {
+ temp = new Image();
+ temp.src = objects[i].src;
+ }
+ }
+}
+
+function showAll() {
+ var obj1 = GetElementsWithClassName('div','presentation')[0];
+ if(!obj1) var obj1 = GetElementsWithClassName('ol','presentation')[0];
+ var obj2 = GetElementsWithClassName('div','layout')[0];
+ if(!obj1){}else {obj1.style.display = 'block'};
+ if(!obj2){}else {obj2.style.display = 'block'};
+}
+
+function dumpProgress() {
+ document.body.removeChild(document.getElementById('StartupControl'));
+ startup();
+ preloadImgages();
+ showAll();
+ createSoundManagerScript();
+ shiftOpacity('StartupProgress',1000);
+ window.setTimeout("removeProgress()",1000);
+}
+
+function removeProgress() {
+ document.body.removeChild(document.getElementById('StartupProgress'));
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+}
+function panelSetup() {
+ if(playPause) {
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ if(playLoop) {
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ if(audioSupport && !isIE && !isOp) {
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ }
+ if(fadeModus && !isIE) {
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ if(autoMatic) {
+ var obj = document.getElementById('auto'); changeClass(obj,'ison');
+ startPlay();
+ }
+ if(audioVolume && !isIE && !isOp) {
+ var idx = 0;
+ if(audioVolume >= 95 && audioVolume <= 100) {idx = 0;}
+ else if(audioVolume >= 85 && audioVolume < 95) {idx = 1;}
+ else if(audioVolume >= 75 && audioVolume < 85) {idx = 2;}
+ else if(audioVolume >= 65 && audioVolume < 75) {idx = 3;}
+ else if(audioVolume >= 55 && audioVolume < 65) {idx = 4;}
+ else if(audioVolume >= 45 && audioVolume < 55) {idx = 5;}
+ else if(audioVolume >= 35 && audioVolume < 45) {idx = 6;}
+ else if(audioVolume >= 25 && audioVolume < 35) {idx = 7;}
+ else if(audioVolume >= 15 && audioVolume < 25) {idx = 8;}
+ else if(audioVolume >= 5 && audioVolume < 15) {idx = 9;}
+ else {idx = 10;}
+ document.getElementById('volumelist').selectedIndex = idx;
+ }
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+}
+// startup process
+
+// shutdown process
+function byby() {
+ stopPlay();
+ if(tranSitions && fadeModus && s5mode && !isOp) {
+ fadeoutSound(curSoundID,true); // audio support
+ var pg = document.createElement('div');
+ pg.id = "GoodBy";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=0)";
+ }else {
+ pg.style.opacity = 0.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/finish.gif)";
+ document.getElementsByTagName("body")[0].appendChild(pg);
+ shiftOpacity('GoodBy',1000);
+ window.setTimeout("history.back()",1000);
+ }else {
+ stopSound(curSoundID);
+ history.back();
+ }
+}
+// shutdown process
+
+// scalable images extension
+function createDetector() {
+ var em = document.createElement('div');
+ em.id='EMSizeControl'; em.style.position="absolute"; em.style.left="-999px";
+ em.style.width="1em"; em.style.height="1em"; em.style.opacity=0.0;
+ document.getElementsByTagName("body")[0].appendChild(em);
+ var nop=document.getElementById('EMSizeControl');
+ if(!nop||findPosX(nop)!=-999) {}else {
+ opac=document.getElementById('EMSizeControl').style.opacity;
+ empx=document.getElementById('EMSizeControl').offsetHeight;
+ document.body.removeChild(document.getElementById('EMSizeControl'));
+ var objects = document.getElementsByTagName('img');
+ var j = 0; var i = 0; var k = 0; var d; var obj;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ images[j] = objects[i];
+ ++j;
+ }
+ }
+ var objects = document.getElementsByTagName('canvas'); j = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ canvas[objects[i].id] = objects[i];
+ if(j==0) {
+ if(objects[i].getContext) {
+ canvasSupport = true;
+ }
+ ++j;
+ }
+ }
+ }
+ if(canvasSupport!=true) {
+ for (d in canvas) {
+ try {
+ canvas[d].setAttribute("width",1);
+ canvas[d].setAttribute("height",1);
+ } catch (e) {
+ }
+ }
+ }
+ var objects = document.getElementsByTagName('table');
+ j = 0; k = 0; l = 0; var w; var h; var tmp; var cnt;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^piechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ piecharts[j] = objects[i];
+ em = piecharts[j].getAttribute("summary");
+ if(em != "") em = "," + em;
+ piecharts[j].setAttribute("summary", w + "," + h + em);
+ ++j;
+ }
+ }
+ }
+ if(objects[i].className.match(/^barchart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ barcharts[k] = objects[i];
+ em = barcharts[k].getAttribute("summary");
+ if(em != "") em = "," + em;
+ barcharts[k].setAttribute("summary", w + "," + h + em);
+ ++k;
+ }
+ }
+ }
+ if(objects[i].className.match(/^linechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ linecharts[l] = objects[i];
+ em = linecharts[l].getAttribute("summary");
+ if(em != "") em = "," + em;
+ linecharts[l].setAttribute("summary", w + "," + h + em);
+ ++l;
+ }
+ }
+ }
+ }
+ objects = document.getElementsByTagName('object'); j = 0; i = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ medias[j] = objects[i]; ++j;
+ if(!isIE) {
+ if(objects[i].getAttributeNode("classid")) objects[i].removeAttributeNode(objects[i].getAttributeNode("classid"));
+ if(objects[i].getAttributeNode("codebase")) objects[i].removeAttributeNode(objects[i].getAttributeNode("codebase"));
+ }
+ }
+ }
+ }
+}
+function extendImgSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < images.length; i++) {
+ w=images[i].getAttribute("width",0);
+ h=images[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ images[i].style.width=Math.floor(w*q)+"px";
+ images[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+
+function extendCanSizes(f) {
+ if(empx>0 && canvasSupport) {
+ var q = (f/empx); var w = 0; var h = 0; var tmp = ""; var cnt; var obj;
+ for(var i=0; i < piecharts.length; i++) {
+ if(piecharts[i].getAttribute("summary")) {
+ tmp = piecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = piecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < barcharts.length; i++) {
+ if(barcharts[i].getAttribute("summary")) {
+ tmp = barcharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = barcharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < linecharts.length; i++) {
+ if(linecharts[i].getAttribute("summary")) {
+ tmp = linecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = linecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ }
+}
+function extendObjSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < medias.length; i++) {
+ w=medias[i].getAttribute("width",0);
+ h=medias[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ medias[i].style.width=Math.floor(w*q)+"px";
+ medias[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+function findPosX(obj) {
+ var posLeft = 0;
+ while (obj.offsetParent) {
+ posLeft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ return posLeft;
+}
+function findPosY(obj) {
+ var posTop = 0;
+ while (obj.offsetParent) {
+ posTop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ return posTop;
+}
+// scalable images extension
+
+// canvas chart extension
+function deg2rad(degrees) {
+ return Math.PI *degrees/180;
+}
+function rad2deg(radians) {
+ return 180.0 *radians/Math.PI;
+}
+function circle_point_x(radians, diameter) {
+ var x = Math.cos(radians)*(diameter/2);
+ return x;
+}
+function circle_point_y(radians, diameter) {
+ var y = Math.sin(radians)*(diameter/2);
+ return y;
+}
+function roundTo(val,dig) {
+ var num = val;
+ if (val > 8191 && val < 10485) {
+ val = val-5000;
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ num = num+5000;
+ } else {
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ }
+ return num;
+}
+function searchColor(value) {
+ for (var dat in colorNames) {
+ if(dat==value) return colorNames[dat];
+ }
+ return false;
+}
+function scanColor(value) {
+ if(value.match(/^#[0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var val1 = value.substr(1,1).toLowerCase();
+ var val2 = value.substr(2,1).toLowerCase();
+ var val3 = value.substr(3,1).toLowerCase();
+ value = '#' + val1 + val1 + val2 + val2 + val3 + val3;
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var tmp = searchColor(value.toLowerCase());
+ if(!tmp) {}else{value = tmp;}
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ value = '#000000';
+ }
+ return value.toLowerCase();
+}
+function hex2rgb(val,trans) {
+ if(val.length==7) {
+ var tp1 = Math.max(0,Math.min(parseInt(val.substr(1,2),16),255));
+ var tp2 = Math.max(0,Math.min(parseInt(val.substr(3,2),16),255));
+ var tp3 = Math.max(0,Math.min(parseInt(val.substr(5,2),16),255));
+ return 'rgba(' + tp1 + ',' + tp2 + ',' + tp3 + ',' + trans + ')';
+ }
+}
+function trim(str) {
+ return (str.replace(/\s+$/,"").replace(/^\s+/,""));
+}
+function roundedRect(ctx,x,y,width,height,radius){
+ ctx.beginPath();
+ ctx.moveTo(x,y+radius);
+ ctx.lineTo(x,y+height-radius);
+ ctx.quadraticCurveTo(x,y+height,x+radius,y+height);
+ ctx.lineTo(x+width-radius,y+height);
+ ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius);
+ ctx.lineTo(x+width,y+radius);
+ ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
+ ctx.lineTo(x+radius,y);
+ ctx.quadraticCurveTo(x,y,x,y+radius);
+ ctx.closePath();
+}
+function drawString(ctx, text, fc, tx, ty) {
+ var xp = 0; var c = "";
+ ctx.beginPath();
+ for (var i = 0; i < text.length; i++) {
+ c = text[i];
+ ctx.drawImage(font, signs[c].sx, signs[c].sy, signs[c].sw, signs[c].sh, tx+xp, ty, signs[c].sw*fc, signs[c].sh*fc);
+ xp += (signs[c].sw*fc);
+ }
+ ctx.closePath();
+}
+function strokeString(ctx, txt, col, fh, tx, ty) {
+ var fw = fh*0.666666; var lw = fh*0.125;
+ var ls = lw/2; var cr = lw; var xp = 0;
+ ctx.lineCap = "round"; ctx.lineJoin = "round"
+ ctx.lineWidth = lw; ctx.strokeStyle = col;
+ for (var i = 0; i < txt.length; i++) {
+ strokeSymbol(ctx, txt[i], ls, tx+xp, ty, fw, fh);
+ xp += (txt[i]!="."?fw+cr:(fw/2)+cr);
+ }
+}
+function strokeSymbol(ctx, symbol, fc, cx, cy, cw, ch) {
+ ctx.beginPath();
+ switch (symbol) {
+ case "0":
+ ctx.moveTo(cx+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+(cw/2),(cw/2)-fc,deg2rad(180),0, false);
+ ctx.arc(cx+(cw/2),(cy+ch)-(cw/2),(cw/2)-fc,0,deg2rad(180), false);
+ ctx.closePath();
+ break;
+ case "1":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.moveTo(cx+(cw*0.666666),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.666666),cy+fc);
+ ctx.lineTo(cx+(cw*0.25),cy+(ch*0.25));
+ break;
+ case "2":
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.8));
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+fc,cy+ch-fc);
+ ctx.arc(cx+(cw/2),cy+(cw*0.425),(cw*0.425)-fc,deg2rad(45),deg2rad(-180), true);
+ break;
+ case "3":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-90),deg2rad(180), false);
+ break;
+ case "4":
+ ctx.moveTo(cx+(cw*0.75),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.5),cy+ch-fc);
+ break;
+ case "5":
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-80),deg2rad(180), false);
+ break;
+ case "6":
+ ctx.moveTo(cx+fc,cy+ch-(cw*0.5)-fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-180),deg2rad(180), false);
+ ctx.bezierCurveTo(cx+fc,cy+fc,cx+fc,cy+fc,cx+(cw*0.9)-fc,cy+fc);
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ break;
+ case "7":
+ ctx.moveTo(cx+(cw*0.5),cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.25)-fc);
+ break;
+ case "8":
+ ctx.moveTo(cx+(cw*0.92)-fc,cy+(cw*0.59));
+ ctx.arc(cx+(cw/2),cy+(cw*0.45),(cw*0.45)-fc,deg2rad(25),deg2rad(-205), true);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-135),deg2rad(-45), true);
+ ctx.closePath();
+ ctx.moveTo(cx+(cw*0.79),cy+(ch*0.47));
+ ctx.lineTo(cx+(cw*0.21),cy+(ch*0.47));
+ break;
+ case "9":
+ ctx.moveTo(cx+cw-fc,cy+(cw*0.5));
+ ctx.arc(cx+(cw/2),cy+(cw*0.5),(cw*0.5)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.bezierCurveTo(cx+cw-fc,cy+ch-fc,cx+cw-fc,cy+ch-fc,cx+(cw*0.1)+fc,cy+ch-fc);
+ break;
+ case "%":
+ ctx.moveTo(cx+fc,cy+(ch*0.75));
+ ctx.lineTo(cx+cw-fc,cy+(ch*0.25));
+ ctx.moveTo(cx+(cw*0.505),cy+(cw*0.3));
+ ctx.arc(cx+(cw*0.3),cy+(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.moveTo(cx+(cw*0.905),cy+ch-(cw*0.3));
+ ctx.arc(cx+(cw*0.7),cy+ch-(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ break;
+ case ".":
+ ctx.moveTo(cx+(cw*0.25),cy+ch-fc-fc);
+ ctx.arc(cx+(cw*0.25),cy+ch-fc-fc,fc,deg2rad(0),deg2rad(360), false);
+ ctx.closePath();
+ break;
+ default:
+ break;
+ }
+ ctx.stroke();
+}
+function drawBar(ctx,x,y,width,height,color,value,textdiv){
+ var rw = width/2; var rh = rw/2;
+ height = Math.max(height,rw);
+ var dh = Math.max(height-(2*rh),0.1); var S2L;
+ var xx = rw/8; var yy = rh/4;
+ var yo = rh/2; y = y - yy;
+ if(canvas_noshadow <= 0 && canvas_noshade <= 0) {
+ ctx.save();
+ S2L = ctx.createRadialGradient(x+rw+rh,y+height-rw+yy+rh,0,x+rw,y+height-rw+yy,rw);
+ S2L.addColorStop(0, 'rgba(0,0,0,0.5)');
+ S2L.addColorStop(0.7, 'rgba(0,0,0,0.25)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = S2L;
+ ctx.scale(1,0.5);
+ ctx.translate(xx,y+height+yy);
+ if(isOp){
+ ctx.fillRect(x,y+yy+height-width,width,width);
+ }else {
+ ctx.arc(x+rw,y+yy+height-width,width,0,deg2rad(360), false);
+ ctx.fill();
+ }
+ ctx.restore();
+ }else if(canvas_noshadow <= 0 && canvas_noshade >= 1) {
+ ctx.fillStyle = 'rgba(0,0,0,0.2)';
+ ctx.fillRect(x+yo,y+rh+yo+yo,width,dh);
+ }
+
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x,y+(height/2),x+width,y+(height/2));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.75)');
+ S2L.addColorStop(0.2, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.3, 'rgba(0,0,0,0)');
+ S2L.addColorStop(0.5, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.35)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.1)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.strokeStyle = S2L;
+ ctx.stroke();
+ }else {
+ ctx.fillStyle = color;
+ ctx.fillRect(x,y+rh+yo,width,dh);
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var bw = width; var bh = bw/4;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ var c; var w;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,x+(width/2)-(bw/2),y,bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext <= 0) {
+ strokeString(ctx, value + "%","rgba(48,48,48,1)", th, x+(width/2)-(w/2), y+((bh-th)/2));
+ }else {
+ drawString(ctx, value + "%", tf, x+(width/2)-(w/2), y+((bh-th)/2.2));
+ }
+ }else {
+ var bh = bw/3; var th = roundTo(bh*0.75,0);
+ roundedRect(ctx,x,y,bw,bh,bh/4);
+ ctx.fill();
+ var obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = x + "px";
+ obj.style.top = y+((bh-th)/2.2) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+
+ }
+}
+function drawLine(ctx,x,y,width,height,dist,array,factor,color,fill){
+ if(fill <= 0){
+ var style = hex2rgb(color,0.5);
+ ctx.lineJoin = "miter";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height);
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.lineTo(x+width,y+height);
+ ctx.lineTo(x,y+height);
+ ctx.closePath();
+ ctx.fillStyle = style;
+ ctx.fill();
+ }
+ ctx.lineJoin = "round";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height-(array[0]*factor));
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.strokeStyle = color;
+ ctx.stroke();
+}
+function setDataURL(cid) {
+ if(cid.toDataURL) {
+ var obj = document.getElementById(cid.id + "_link");
+ if(obj) {
+ obj.setAttribute("title", "To Data URL");
+ obj.setAttribute("target", "_blank");
+ obj.setAttribute("href", cid.toDataURL());
+ }
+ }
+}
+function get_input(dataobj,canvasobj,linechart) {
+ var table = document.getElementById(dataobj);
+ var canvas = document.getElementById(canvasobj);
+ var row; var clm; var cnt = 0; var val = 0; var nme = ""; var col = "";
+ if(canvas.getContext) {
+ canvas_width = parseInt(canvas.style.width);
+ canvas_height = parseInt(canvas.style.height);
+ if(canvas_width >= 16 && canvas_height >= 16) {
+ var tmp = table.getAttribute("summary");
+ canvas_noshade = 0; canvas_noshadow = 0;
+ canvas_notext = 0; canvas_imgtext = 0;
+ canvas_htmltext = 0; canvas_nofill = 0;
+ if(tmp.search(/noshadow/) != -1) canvas_noshadow = 1;
+ if(tmp.search(/noshade/) != -1) canvas_noshade = 1;
+ if(tmp.search(/nofill/) != -1) canvas_nofill = 1;
+ if(tmp.search(/notext/) != -1) canvas_notext = 1;
+ if(tmp.search(/htmltext/) != -1) canvas_htmltext = 1;
+ if(tmp.search(/imgtext/) != -1) canvas_imgtext = 1;
+ if(table.getAttribute("bgcolor")) {
+ canvas_bgcolor = scanColor(table.getAttribute("bgcolor"));
+ }
+ ChartData = new Array(); colorSlice = new Array();
+ if(table.getElementsByTagName("tr")[0].getElementsByTagName("th")[0]) cnt = 1;
+ for(var r = cnt; r < table.getElementsByTagName("tr").length; r++) {
+ row = table.getElementsByTagName("tr")[r];
+ clm = row.getElementsByTagName("td").length;
+ if(row.getElementsByTagName("td")[0].getAttribute("bgcolor")) {
+ col = scanColor(row.getElementsByTagName("td")[0].getAttribute("bgcolor")); val = 0;
+ nme = trim(row.getElementsByTagName("td")[1].innerHTML.replace(/<[^>]+>/g,""));
+ if(!linechart) {
+ if(clm > 3) {
+ for(var z = 2; z < clm; z++) {
+ val += parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ }else {
+ val = parseFloat(row.getElementsByTagName("td")[2].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ if(!isNaN(val) && val > 0 && nme != '') {
+ colorSlice[r-cnt] = col; ChartData[nme] = Math.abs(val);
+ }else {
+ break;
+ }
+ }else {
+ val = 0; i = 0;
+ if(clm > 3 && nme != '') {
+ ChartData[r-cnt] = new Array();
+ colorSlice[r-cnt] = col;
+ for(var z = 2; z < clm; z++) {
+ val = Math.abs(parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,"")));
+ if(!isNaN(val) && val >= 0) {
+ ChartData[r-cnt][i] = val; i++;
+ }else {
+ ChartData[r-cnt][i] = 0; i++;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }
+ }
+}
+function setPieChart(canvasobj,textobj) {
+ var cd = (Math.min(canvas_width,canvas_height)/110)*100;
+ var cp = cd*0.1; var cr = cd/2;
+ var sr = cr*0.93; var cw = cd+cp; var ch = cw;
+ var cx = (cd/2)+(cp/2); var cy = cx; var ct = 0;
+ for (var data in ChartData) {
+ ct += ChartData[data];
+ }
+ var poc = ct/100;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ }
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,cw,ch);
+ }else {
+ ctx.clearRect(0,0,cw,ch);
+ }
+ if(canvas_noshadow <= 0) {
+ if(!isOp) {
+ ctx.beginPath();
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),cr,cx+(cr*0.1),cy+(cr*0.1),sr*0.9);
+ B2B.addColorStop(0, 'rgba(0,0,0,0)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.arc(cx+(cr*0.1),cy+(cr*0.1),cr,0,deg2rad(360), false);
+ ctx.closePath();
+ ctx.fillStyle = B2B;
+ ctx.fill();
+ }else {
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),0,cx+(cr*0.1),cy+(cr*0.1),cr);
+ B2B.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(0.87, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = B2B;
+ ctx.fillRect(0,0,cw,ch);
+ }
+ }
+ var val = 0; var deg = 0; var idx = 0; var data;
+ for (data in ChartData) {
+ val = ChartData[data]; sdeg = deg;
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ ctx.beginPath();
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr,sdeg,edeg, false);
+ ctx.lineTo(cx,cy);
+ ctx.closePath();
+ ctx.fillStyle = colorSlice[(idx++)];
+ ctx.fill();
+ }
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ var W2T = ctx.createLinearGradient(cp*2,cp*2,cx,cy);
+ W2T.addColorStop(0, 'rgba(255,255,255,0.8)');
+ W2T.addColorStop(1, 'rgba(255,255,255,0)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.fillStyle = W2T;
+ ctx.fill();
+ ctx.beginPath();
+ var T2B = ctx.createLinearGradient(cx,cy,cw-(cp*2),ch-(cp*2));
+ T2B.addColorStop(0, 'rgba(0,0,0,0)');
+ T2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.fillStyle = T2B;
+ ctx.fill();
+ ctx.beginPath();
+ var B2T = ctx.createLinearGradient(cx,cy,cw-(cp*1.9),ch-(cp*1.9));
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.strokeStyle = B2T;
+ ctx.stroke();
+ ctx.beginPath();
+ var T2W = ctx.createLinearGradient(cx,cy,(cp*1.9),(cp*1.9));
+ T2W.addColorStop(0, 'rgba(255,255,255,0)');
+ T2W.addColorStop(1, 'rgba(255,255,255,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.strokeStyle = T2W;
+ ctx.stroke();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var mpos = 0; var per = 0; var gx = 0;
+ var gy = 0; var tx = 0; var ty = 0;
+ var obj = ""; var w = 0; var c = 0;
+ var bw = cr*0.45; var bh = cr*0.125;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext >= 1) {
+ bw = (cr*0.365);
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ for (data in ChartData) {
+ val = ChartData[data];
+ sdeg = deg; mpos = deg+(((val/2)/ct)*deg2rad(360));
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ per = roundTo(val/poc,2);
+ gx = circle_point_x(mpos, cd);
+ gy = circle_point_y(mpos, cd);
+ tx = parseFloat((cx+(2*Math.floor(cx + gx)))/3);
+ ty = (cy+(2*Math.floor(cy + gy)))/3;
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext >= 1) {
+ drawString(ctx, per + "%", tf, tx-(w/2), ty-(th/1.8));
+ }else {
+ strokeString(ctx, per + "%","rgba(48,48,48,1)", th, tx-(w/2), ty-(th/2));
+ }
+ }else {
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = (tx-(bw/2)) + "px";
+ obj.style.top = ty-(th/1.8) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+ }
+ }
+ }
+}
+function setBarChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9; var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05; var ph = canvas_height*0.05;
+ var cm = 0; var ct = 0;
+ for (var data in ChartData) {
+ cm = Math.max(cm,ChartData[data]);
+ ct += ChartData[data];
+ }
+ var hf = ih/cm; var bs = colorSlice.length;
+ var bw = iw/(bs*1.1); var poc = ct/100;
+ var th = roundTo((bw/3)*0.75,0);
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ var obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ var cc = ""; var bh = 0; var idx = 0; var t = 0; per = 0;
+ for (var data in ChartData) {
+ per = roundTo(ChartData[data]/poc,2);
+ bh = ChartData[data]*hf;
+ drawBar(ctx,pw+(t*(bw*1.1)),ph+ih-bh,bw,bh,colorSlice[(idx++)],per,textdiv);
+ t++;
+ }
+ }
+}
+function setLineChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9;
+ var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05;
+ var ph = canvas_height*0.05;
+ var cm = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ cm = Math.max(cm,ChartData[i][j]);
+ }
+ }
+ var hf = (ih*0.95)/cm; var bw = iw;
+ var dw = iw/(ChartData[0].length-1)
+ var dh = ih/(ChartData[0].length-1)
+ var ps = Math.min(pw,ph); lw = ps/4;
+ var B2T;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_noshadow <= 0) {
+ B2T = ctx.createLinearGradient(pw+ps,ph+ih+1,pw+ps+ps,ph+ih+1);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps,ph+ih);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.lineTo(pw+ps+ps,ph+ih);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+ps+ps,ph+ih,pw+ps+ps,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps+ps,ph+ih);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+ps+iw,ph+ih+ps);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.closePath();
+ ctx.fill();
+ var B2T = ctx.createLinearGradient(pw+iw+1,ph+ps,pw+iw+1,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.35)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps);
+ ctx.lineTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+iw,ph+ps+ps,pw+iw+ps,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.35)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+iw+ps,ph+ih+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = lw/2;
+ ctx.strokeStyle = "rgba(255,255,255,0.25)";
+ if(canvas_nofill <= 0) {
+ ctx.fillStyle = "rgba(240,240,240,0.8)";
+ ctx.strokeStyle = "rgba(255,255,255,1)";
+ ctx.fillRect(pw,ph,iw,ih);
+ }
+ for (var i = 0; i < ChartData[0].length-1; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph);
+ ctx.lineTo(pw+(i*dw),ph+ih);
+ ctx.stroke();
+ }
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw,ph+(i*dh));
+ ctx.lineTo(pw+iw,ph+(i*dh));
+ ctx.stroke();
+ }
+ ctx.lineWidth = lw;
+ var cc = ""; var bh = 0; var idx = 0; var t = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ t = Math.max(t,ChartData[i][j]);
+ }
+ bh = t*hf; cc = colorSlice[(idx++)];
+ drawLine(ctx,pw,ph+ih-bh,bw,bh,dw,ChartData[i],hf,cc,canvas_nofill);
+ }
+ ctx.beginPath();
+ ctx.moveTo(pw,ph);
+ ctx.lineTo(pw,ph+ih);
+ ctx.lineTo(pw+iw+(lw/2),ph+ih);
+ ctx.strokeStyle = "rgba(48,48,48,1)";
+ ctx.stroke();
+ ctx.lineWidth = lw/2;
+ B2T = ctx.createLinearGradient(pw,ph+ih,pw,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,1)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.strokeStyle = B2T;
+ for (var i = 0; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph+ih);
+ ctx.lineTo(pw+(i*dw),ph+ih+ps);
+ ctx.stroke();
+ }
+ B2T = ctx.createLinearGradient(pw-ps,ph,pw,ph);
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,1)');
+ ctx.strokeStyle = B2T;
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw-ps,ph+(i*dh));
+ ctx.lineTo(pw,ph+(i*dh));
+ ctx.stroke();
+ }
+ }
+}
+function generateCanvas() {
+ if(canvasSupport) {
+ var canvasID; var tdataID; var textID;
+ var tmp; var dat; var i; var j;
+ for(i=0; i < piecharts.length; i++) {
+ tmp = piecharts[i].id.split("_");
+ tdataID = piecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setPieChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < barcharts.length; i++) {
+ tmp = barcharts[i].id.split("_");
+ tdataID = barcharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setBarChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < linecharts.length; i++) {
+ tmp = linecharts[i].id.split("_");
+ tdataID = linecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID,true);
+ if(colorSlice.length > 0) {
+ if(ChartData.length == colorSlice.length) {
+ setLineChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ }
+}
+// canvas chart extension
+
+// invisible select extension
+function setListPos(opt) {
+ if(!isIE) { //(degrade IE)
+ var ref = document.getElementById('list');
+ var x = findPosX(ref); var y = findPosY(ref);
+ var obj = document.getElementById('jumplist');
+ obj.style.position = 'fixed'; obj.style.left = x + 'px'; obj.style.top = y + 'px';
+ var vol = document.getElementById('volumelist');
+ ref = document.getElementById('volume');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ vol.style.position = 'fixed'; vol.style.left = x + 'px'; vol.style.top = y + 'px';
+ var del = document.getElementById('delaylist');
+ ref = document.getElementById('delay');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ del.style.position = 'fixed'; del.style.left = x + 'px'; del.style.top = y + 'px';
+ var pnl = document.getElementById('navLinks');
+ }
+ if(opt) {
+ if(isIE) {
+ //(degrade IE)
+ //pnl.style.filter = "alpha(opacity=80)";
+ }else {
+ obj.style.opacity = 0.0;
+ vol.style.opacity = 0.0;
+ del.style.opacity = 0.0;
+ pnl.style.opacity = 0.8;
+ }
+ }
+}
+// invisible select extension
+
+// transition extension
+function switchFade() {
+ if(tranSitions && s5mode && fadeModus) {
+ fadeModus = false;
+ playDelay = playDelay-(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'isoff');
+ }else if(tranSitions && s5mode && !fadeModus) {
+ fadeModus = true;
+ playDelay = playDelay+(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ currentSlide();
+}
+function opacity(ids, opacStart, opacEnd, millisec) {
+ var speed = Math.round(millisec / 100);
+ var timer = 0;
+ if(opacStart > opacEnd) {
+ for(var i = opacStart; i >= opacEnd; i--) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ } else if(opacStart < opacEnd) {
+ for(var i = opacStart; i <= opacEnd; i++) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ }
+}
+function changeOpac(opacity, ids) {
+ var obj = document.getElementById(ids);
+ if (isIE) {
+ obj.style.filter = "alpha(opacity=" + opacity + ")";
+ } else {
+ obj.style.opacity = (opacity / 100);
+ }
+}
+function shiftOpacity(ids, millisec) {
+ if(document.getElementById(ids).style.opacity != '') {
+ var currentOpac = document.getElementById(ids).style.opacity * 100;
+ } else {
+ var currentOpac = 0;
+ }
+ if(currentOpac == 0) {
+ opacity(ids, currentOpac, 100, millisec);
+ } else if(currentOpac > 0) {
+ opacity(ids, currentOpac, 0, millisec);
+ }
+}
+// transition extension
+
+// autoplay extension
+function autoPlay() {
+ if (s5mode && autoMatic && !playPause) {
+ if ((snum >= (smax-1)) && playLoop) {
+ goTo(0);
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }else if ((snum >= (smax-1)) && !playLoop) {
+ stopPlay();
+ }else {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ if (incrementals[snum].length >0) {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = parseInt(playDelay/(incrementals[snum].length+1));
+ remainDer = parseInt(playDelay-(incrDelay*incrementals[snum].length));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ } else {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = incrDuration;
+ remainDer = parseInt(playDelay-(incrementals[snum].length*incrDuration));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }
+ }
+}
+function autoPlayIncr() {
+ if (incpos < incrementals[snum].length) {
+ subgo(1);
+ autoRun = setTimeout('autoPlayIncr();',incrDelay);
+ }else {
+ autoRun = setTimeout('nop();',remainDer);
+ }
+}
+function nop() {
+ // no operation dummy
+}
+function togglePlay() {
+ if (autoRun && s5mode) {
+ stopPlay();
+ }else if (!autoRun && s5mode) {
+ startPlay();
+ }
+}
+function stopPlay() {
+ if (autoRun && s5mode) {
+ clearTimeout(autoRun); autoRun = null;
+ autoMatic = false; playPause = false; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'isoff');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ currentSlide();
+ }
+}
+function startPlay() {
+ if (!autoRun && s5mode) {
+ playPause = false; autoMatic = true; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'ison');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ autoRun = setTimeout('autoPlay();',playDelay);
+ currentSlide();
+ }
+}
+function pausePlay() {
+ if (s5mode && autoMatic) {
+ if (playPause) {
+ playPause = false; autoRun = setTimeout('autoPlay();',playDelay);
+ var obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ }else {
+ if (autoRun){
+ clearTimeout(autoRun); autoRun = null; playPause = true;
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+ }
+}
+function switchLoop() {
+ if(s5mode) {
+ if (playLoop) {
+ playLoop = false;
+ var obj = document.getElementById('loop'); changeClass(obj,'isoff');
+ }else {
+ playLoop = true;
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+}
+function setDelay() {
+ var val = document.getElementById('delaylist');
+ if(s5mode) {
+ var delay = Math.max(5,Math.min(parseInt(val.value),300));
+ playDelay = (fadeModus == true) ? ((delay*1000)+(2*fadeDuration)) : (delay*1000);
+ }
+}
+// autoplay extension
+
+// audio extension
+function createSoundManagerScript() {
+ if(typeof soundManager=="undefined") {
+ onerrorSM2();
+ }else {
+ var script=document.createElement('SCRIPT');
+ var tx=document.createTextNode("soundManager.createMovie();");
+ script.appendChild(tx);
+ document.getElementsByTagName("body")[0].appendChild(script);
+ }
+}
+//soundManager.onload = function() {
+function onloadSM2() {
+ if(!isIE) { //(degrade IE)
+ swfUnloaded = false;
+ preloadSounds();
+ }
+}
+//soundManager.onerror = function() {
+function onerrorSM2() {
+ if(typeof soundManager!="undefined") {
+ soundManager.destruct;
+ delete soundManager;
+ }
+ audioSupport = false; swfUnloaded = true;
+ if(audioError && !isIE && !isOp) {
+ var dv = document.createElement('div'); dv.id = "guru";
+ var d2=document.createElement('div'); dv.appendChild(d2);
+ var tx=document.createTextNode('Guru Meditation - SoundManager failed to load/initialize!');
+ d2.appendChild(tx); document.getElementById('slide0').appendChild(dv);
+ }
+}
+function audioSetup() {
+ if(sound[0]) {
+ playSound(0);
+ }else if(sound[bgSoundItem] && !sound[0]) {
+ playSound(bgSoundItem);
+ }
+}
+function fadeoutSound(ids, option) {
+ if(curSoundID >= 0 && !swfUnloaded) {
+ if(isNaN(ids)) {
+ if(ids == "bgSound") {
+ var cnum = parseInt(bgSoundItem);
+ }else {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && ids == sound[i]["id"]) {
+ var cnum = i;
+ break;
+ }
+ }
+ }
+ }else {
+ var cnum = ids;
+ ids = sound[cnum]["id"];
+ }
+ var vol = getMaxVolume(sound[cnum]["volume"]);
+ var millisec = fadeDuration;
+ var speed = Math.round(millisec / vol);
+ var timer = 0;
+ for(var i = vol; i > 0; i--) {
+ setTimeout("fadeout(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ if(option) setTimeout("stopSound('"+ids+"')",millisec);
+ }
+}
+function fadeout(volume, id) {
+ soundManager.setVolume(id,volume);
+}
+function stopSound(ids) {
+ var sid;
+ if(isNaN(ids)) {
+ sid = ids;
+ }else if(sound[ids]) {
+ sid = sound[ids]["id"];
+ }
+ if(sid!='' && curSoundID >= 0) {
+ soundManager.stop(sid);
+ curSoundID = -1;
+ }
+}
+function toggleSounds() {
+ if(audioSupport && !swfUnloaded) {
+ stopAllSounds();
+ }else if (!audioSupport && !swfUnloaded) {
+ allowSounds();
+ }
+}
+function allowSounds() {
+ if(!swfUnloaded) {
+ audioSupport = true;
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ currentSlide();
+ }
+}
+function stopAllSounds() {
+ if(curSoundID >= 0) {
+ stopSound(curSoundID);
+ }else {
+ soundManager.stopAll();
+ curSoundID = -1;
+ }
+ audioSupport = false;
+ var obj = document.getElementById('audio'); changeClass(obj,'isoff');
+ currentSlide();
+}
+function playSound(id) {
+ if(audioSupport && !swfUnloaded) {
+ var url, sid, vol, lps, cnum;
+ if(isNaN(id)) {
+ sid = id;
+ if(sid == "bgSound") {
+ cnum = parseInt(bgSoundItem);
+ }else {
+ cnum = getSoundID(id);
+ }
+ }else {
+ cnum = parseInt(id);
+ if(sound[cnum]) sid = sound[cnum]["id"];
+ }
+ if(sound[cnum] && sound[cnum]["url"]!='' && sid!=''){
+ url = sound[cnum]["url"];
+ vol = (sound[cnum]["volume"]!='')?getMaxVolume(sound[cnum]["volume"]):getMaxVolume(100);
+ lps = (sound[cnum]["loops"])?true:false;
+ if(lps) {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){soundManager.play(sid,{volume:getMaxVolume(sound[cnum]["volume"])});}});
+ }else {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){curSoundID=-1;}});
+ }
+ }
+ }
+}
+function getSoundID(str) {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && str == sound[i]["id"]) {
+ var id = i;
+ break;
+ }
+ }
+ return id;
+}
+function setVolume() {
+ var vol = document.getElementById('volumelist');
+ if(audioSupport && !swfUnloaded) {
+ audioVolume = parseInt(vol.value);
+ if(curSoundID >= 0) {
+ if(sound[curSoundID]) {
+ var sid = sound[curSoundID]["id"];
+ var vid = getMaxVolume(sound[curSoundID]["volume"]);
+ soundManager.setVolume(sid,vid);
+ }
+ }
+ }
+}
+function getMaxVolume(value) {
+ if(audioVolume>0) {var factor = audioVolume/100;}else {var factor = 0;}
+ return Math.max(0,Math.min(parseInt(value*factor),audioVolume));
+}
+function preloadSounds() {
+ var temp = ''; var parm = ''; var t = ''; var cl = '';
+ var objects = document.getElementsByTagName('object');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].type.toLowerCase() == 'audio/mp3' && objects[i].data != '') {
+ objects[i].width = 0; objects[i].height = 0;
+ if(objects[i].parentNode.tagName == 'DIV') {
+ cl = objects[i].parentNode.className.toLowerCase();
+ if(cl == 'presentation' || cl == 'slide') {
+ if(cl == 'presentation') {
+ t = parseInt(bgSoundItem);
+ }else {
+ t = parseInt(objects[i].parentNode.id.slice(5, objects[i].parentNode.id.length));
+ }
+ sound[t] = new Object();
+ if(t < bgSoundItem) {
+ sound[t]["id"] = objects[i].parentNode.id;
+ }else {
+ sound[t]["id"] = "bgSound";
+ }
+ sound[t]["url"] = objects[i].data;
+ sound[t]["volume"] = 100; sound[t]["loops"] = false;
+ if(objects[i].archive != '') {
+ parm = objects[i].archive.toLowerCase().split(',');
+ for (var j=0; j < parm.length; j++) {
+ if(parm[j] == 'loop') sound[t]["loops"] = true;
+ if(parm[j].search(/^volume/) != -1) {
+ var tmp = parm[j].split(':');
+ sound[t]["volume"] = parseInt(tmp[1]);
+ }
+ }
+ }
+ soundManager.createSound(sound[t]["id"],sound[t]["url"]);
+ }
+ }
+ }
+ }
+}
+// audio extension
+
+// help extension
+function createHelpReq() {
+ if(!document.getElementById("HelpReq")) {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "HelpReq";
+ if (pg.addEventListener) {
+ pg.addEventListener("onclick",dumpHelpReq,false);
+ } else if (pg.attachEvent) {
+ pg.attachEvent("onclick",dumpHelpReq);
+ }
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=90)";
+ } else {
+ pg.style.opacity = 0.9;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(64,64,64)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/help.jpg)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+ if(document.getElementById("HelpReq")) {
+ helpmode = true;
+ }
+ }
+}
+function dumpHelpReq() {
+ if(document.getElementById("HelpReq")) {
+ document.body.removeChild(document.getElementById('HelpReq'));
+ helpmode = false;
+ }
+}
+// help extension
+
+//DEBUG
+function ConsoleLog(value) {
+ if(window.console) {
+ window.console.log(value);
+ }
+}
+//DEBUG
+
+document.write('<style type="text/css" media="screen" id="blockStyle">.presentation, .layout {display: none; }</style>');
+
+if(!isIE && !isOp) {
+ document.write('<script type="text/javascript" src="'+s5Path+'ui/audio_support/soundmanager2.js"></script>');
+ if(typeof soundManager!="undefined") {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'audioDebug') {
+ var audioDebug = (allMetas[i].content == "true") ? true : false;
+ soundManager.defaultOptions.debugMode = audioDebug;
+ }
+ }
+ }
+}
+
+window.onload = createSlideShow;
+window.onresize = function(){setTimeout('windowChange()',5);} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/toggle_link.png
new file mode 100644
index 000000000..4588e2514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/toggle_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/toggle_over.png
new file mode 100644
index 000000000..400f613b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/toggle_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/volume_link.png
new file mode 100644
index 000000000..f362acd1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/volume_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/wrap.css
new file mode 100644
index 000000000..a37315552
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/wrap.css
@@ -0,0 +1,410 @@
+/********************************************************************
+Screen and Print Styles for the Wrap Plugin
+********************************************************************/
+
+/* tables in columns and boxes should span the whole width */
+.wrap_column table,
+.wrap_left table, .wrap_right table, .wrap_center table,
+.wrap_box table,
+.wrap_info table, .wrap_important table, .wrap_alert table, .wrap_tip table, .wrap_help table, .wrap_todo table, .wrap_download table {
+ width: 100%;
+}
+/* emulate a headline */
+.wrap_column em strong,
+.wrap_left em strong, .wrap_right em strong, .wrap_center em strong,
+.wrap_box em strong,
+.wrap_info em strong, .wrap_important em strong, .wrap_alert em strong, .wrap_tip em strong, .wrap_help em strong, .wrap_todo em strong, .wrap_download em strong {
+ font-size: 130%;
+ font-weight: bold;
+ font-style: normal;
+ display: block;
+}
+/* emulate a bigger headline with a bottom border */
+.wrap_column em strong em.u,
+.wrap_left em strong em.u, .wrap_right em strong em.u, .wrap_center em strong em.u,
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ font-size: 115%;
+ border-bottom: 1px solid __border__;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+}
+/* different bigger headline for safety notes */
+.wrap_danger em strong em.u, .wrap_warning em strong em.u, .wrap_caution em strong em.u, .wrap_notice em strong em.u, .wrap_safety em strong em.u {
+ font-size: 115%;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+ text-transform: uppercase;
+ border-bottom-width: 0;
+}
+/* change border colour of emulated headlines inside boxes to something more neutral
+ (to match all the different background colours) */
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ border-bottom-color: #999;
+}
+
+
+/* columns
+********************************************************************/
+
+.wrap_left,
+.wrap_column {
+ float: left;
+ margin-right: 1.5em;
+}
+.wrap_right {
+ float: right;
+ margin-left: 1.5em;
+}
+.wrap_center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+/*
+.wrap_column,
+.wrap_left,
+.wrap_right {
+ overflow: hidden;
+}
+*/
+.wrap_container {
+ margin-right: -1.5em;
+}
+
+
+/* alignments
+********************************************************************/
+
+.wrap_leftalign {
+ text-align: left;
+}
+.wrap_centeralign {
+ text-align: center;
+}
+.wrap_rightalign {
+ text-align: right;
+}
+.wrap_justify {
+ text-align: justify;
+}
+
+
+/* box
+********************************************************************/
+
+/* see styles for boxes and notes with icons in style.css */
+
+/*____________ rounded corners ____________*/
+/* (only for modern browsers) */
+
+div.wrap_round {
+ border-radius: 20px;
+ -moz-border-radius: 20px;
+ -webkit-border-radius: 20px;
+ -khtml-border-radius: 20px;
+}
+span.wrap_round {
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -khtml-border-radius: 2px;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_lo {
+ color: __text_neu__;
+ font-size: 85%;
+}
+div.wrap_em {
+ color: #c00;
+ font-weight: bold;
+}
+
+/* see styles for highlighted text in style.css */
+
+
+/* typography
+********************************************************************/
+
+/*____________ fonts ____________*/
+
+div.wrap_sansserif {
+ font-family: Verdana,Tahoma,Geneva,"DejaVu Sans","Bitstream Vera Sans","Liberation Sans", Arial,Helvetica,FreeSans,"Liberation Sans","Nimbus Sans L", sans-serif;
+}
+div.wrap_serif {
+ font-family: Georgia,Garamond,"Palatino Linotype","Book Antiqua",Palatino,Palladio,"URW Palladio L","Liberation Serif",Didot,Gentium,"Bitstream Charter","Century Schoolbook L", "Times New Roman",Times,"Nimbus Roman No9 L","FreeSerif", serif;
+}
+div.wrap_monospace {
+ font-family: Courier,"Courier New",FreeMono,"Nimbus Mono L","Liberation Mono", "Lucida Console",Monaco,"DejaVu Sans Mono","Bitstream Vera Sans Mono", monospace;
+}
+
+/*____________ font size ____________*/
+
+div.wrap_bigger {
+ font-size: 125%;
+}
+div.wrap_muchbigger {
+ font-size: 200%;
+}
+div.wrap_smaller {
+ font-size: 75%;
+}
+
+/*____________ font colours ____________*/
+
+div.wrap_fgred {
+ color: #900;
+}
+div.wrap_fggreen {
+ color: #090;
+}
+div.wrap_fgblue {
+ color: #009;
+}
+div.wrap_fgcyan {
+ color: #099;
+}
+div.wrap_fgviolet {
+ color: #909;
+}
+div.wrap_fgyellow {
+ color: #990;
+}
+div.wrap_fggrey {
+ color: #666;
+}
+div.wrap_fgblack {
+ color: #000;
+}
+
+/* see styles for background colours and white font colour in style.css */
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ indent ____________*/
+
+div.wrap_indent {
+ padding-left: 1.5em;
+}
+
+/*____________ outdent ____________*/
+
+div.wrap_outdent {
+ margin-left: -1.5em;
+}
+
+/*____________ word wrapping in pre ____________*/
+
+divdiv.wrap_prewrap pre {
+ white-space: pre-wrap;
+ word-wrap: break-word;/* for IE < 8 */
+ /* white-space: -moz-pre-wrap; for FF < 3 */
+}
+
+/*____________ spoiler ____________*/
+
+divdiv.wrap_spoiler {
+ margin-bottom: 1.5em;
+}
+/* see rest of spoiler styles in style.css */
+
+/*____________ clear float ____________*/
+
+div.wrap_clear {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ font-size: 1px;
+ visibility: hidden;
+ overflow: hidden;
+}
+
+/*____________ hide ____________*/
+
+div.wrap_hide {
+ display: none;
+}
+
+
+/* STYLE.CSS */
+
+/* box
+********************************************************************/
+
+.wrap_box {
+ background: __background_alt__;
+ color: __text__;
+/*
+ overflow: hidden;
+*/
+}
+div.wrap_box,
+div.wrap_danger, div.wrap_warning, div.wrap_caution, div.wrap_notice, div.wrap_safety {
+ padding: 1em 1em .5em;
+ margin-bottom: 1.5em;
+}
+span.wrap_box,
+span.wrap_danger, span.wrap_warning, span.wrap_caution, span.wrap_notice, span.wrap_safety {
+ padding: 0 .3em;
+}
+
+/*____________ notes with icons ____________*/
+
+/* general styles for all note divs */
+div.wrap_info, div.wrap_important, div.wrap_alert, div.wrap_tip, div.wrap_help, div.wrap_todo, div.wrap_download {
+ padding: 1em 1em .5em 70px;
+ margin-bottom: 1.5em;
+ min-height: 68px;
+ background-position: 10px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html div.wrap_info, * html div.wrap_important, * html div.wrap_alert, * html div.wrap_tip, * html div.wrap_help, * html div.wrap_todo, * html div.wrap_download {
+ height: 68px;
+}
+/* general styles for all note spans */
+span.wrap_info, span.wrap_important, span.wrap_alert, span.wrap_tip, span.wrap_help, span.wrap_todo, span.wrap_download {
+ padding: 0 2px 0 20px;
+ min-height: 20px;
+ background-position: 2px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html span.wrap_info, * html span.wrap_important, * html span.wrap_alert, * html span.wrap_tip, * html span.wrap_help, * html span.wrap_todo, * html span.wrap_download {
+ height: 20px;
+}
+
+/*____________ info ____________*/
+.wrap_info { background-color: #d1d7df; }
+div.wrap_info { background-image: url(../../../wrap/images/note/48/info.png); }
+span.wrap_info { background-image: url(../../../wrap/images/note/16/info.png); }
+
+/*____________ important ____________*/
+.wrap_important { background-color: #ffd39f; }
+div.wrap_important { background-image: url(../../../wrap/images/note/48/important.png); }
+span.wrap_important { background-image: url(../../../wrap/images/note/16/important.png); }
+
+/*____________ alert ____________*/
+.wrap_alert { background-color: #ffbcaf; }
+div.wrap_alert { background-image: url(../../../wrap/images/note/48/alert.png); }
+span.wrap_alert { background-image: url(../../../wrap/images/note/16/alert.png); }
+
+/*____________ tip ____________*/
+.wrap_tip { background-color: #fff79f; }
+div.wrap_tip { background-image: url(../../../wrap/images/note/48/tip.png); }
+span.wrap_tip { background-image: url(../../../wrap/images/note/16/tip.png); }
+
+/*____________ help ____________*/
+.wrap_help { background-color: #dcc2ef; }
+div.wrap_help { background-image: url(../../../wrap/images/note/48/help.png); }
+span.wrap_help { background-image: url(../../../wrap/images/note/16/help.png); }
+
+/*____________ todo ____________*/
+.wrap_todo { background-color: #c2efdd; }
+div.wrap_todo { background-image: url(../../../wrap/images/note/48/todo.png); }
+span.wrap_todo { background-image: url(../../../wrap/images/note/16/todo.png); }
+
+/*____________ download ____________*/
+.wrap_download { background-color: #d6efc2; }
+div.wrap_download { background-image: url(../../../wrap/images/note/48/download.png); }
+span.wrap_download { background-image: url(../../../wrap/images/note/16/download.png); }
+
+
+/*____________ safety notes ____________*/
+
+.wrap_danger {
+ background-color: #c00;
+ color: #fff;
+}
+.wrap_warning {
+ background-color: #f60;
+ color: #000;
+}
+.wrap_caution {
+ background-color: #ff0;
+ color: #000;
+}
+.wrap_notice {
+ background-color: #06f;
+ color: #fff;
+}
+.wrap_safety {
+ background-color: #090;
+ color: #fff;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_hi {
+ background-color: #ff9;
+}
+
+/* typography
+********************************************************************/
+
+/*____________ font colours ____________*/
+
+div.wrap_fgwhite {
+ color: #fff;
+}
+
+/*____________ background colours ____________*/
+
+div.wrap_bgred {
+ background-color: #fcc;
+}
+div.wrap_bggreen {
+ background-color: #cfc;
+}
+div.wrap_bgblue {
+ background-color: #ccf;
+}
+div.wrap_bgcyan {
+ background-color: #9ff;
+}
+div.wrap_bgviolet {
+ background-color: #f9f;
+}
+div.wrap_bgyellow {
+ background-color: #ff9;
+}
+div.wrap_bggrey {
+ background-color: #ccc;
+}
+div.wrap_bgwhite {
+ background-color: #fff;
+}
+div.wrap_bgblack {
+ background-color: #000;
+}
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ spoiler ____________*/
+
+div.wrap_spoiler {
+ background-color: __background__ !important;
+ color: __background__ !important;
+ border: 1px dotted red;
+}
+
+/*____________ only print ____________*/
+
+div.wrap_onlyprint {
+ display: none;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/zero_link.png
new file mode 100644
index 000000000..5610884d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/zero_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/zero_over.png
new file mode 100644
index 000000000..3a14a577e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/zero_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/LEEME.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/LEEME.txt
new file mode 100755
index 000000000..c4f982126
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/LEEME.txt
@@ -0,0 +1,31 @@
+MANDARINA
+
+Tema para S5, creado originalmente por jEsuSdA 8)
+http://www.jesusda.com
+
+Más temas en: http://www.jesusda.com/projects/presentaciones_s5
+
+
+
+Para customizar este tema modifica el archivo CSS:
+
+s5-ultraviolet/ui/default/pretty.css
+
+
+
+Los archivos gráficos referentes al tema están en la carpeta:
+
+/ui/default/pics
+
+
+Puedes personalizar el favicon copiando el tuyo en la carpeta:
+
+/ui/default/pics
+
+con el nombre favicon.ico
+
+
+
+Para cualquier sugerencia e idea, por favor, contacta conmigo a través de mi web. ;)
+
+--jEsuSdA 8) \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/audio_link.png
new file mode 100644
index 000000000..daa740c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/audio_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/audio_on.png
new file mode 100644
index 000000000..cd590aae9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/audio_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/audio_over.png
new file mode 100644
index 000000000..cf537a008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/audio_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/auto_link.png
new file mode 100644
index 000000000..1c2ca4817
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/auto_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/auto_on.png
new file mode 100644
index 000000000..4b0c923b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/auto_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/auto_over.png
new file mode 100644
index 000000000..dbea88975
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/auto_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/backgrnd.png
new file mode 100644
index 000000000..0e48413d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/backgrnd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/blank.gif
new file mode 100755
index 000000000..75b945d25
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/blank.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/delay_link.png
new file mode 100644
index 000000000..c4d99cd57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/delay_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/exit_link.png
new file mode 100644
index 000000000..1bfd38790
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/exit_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/exit_over.png
new file mode 100644
index 000000000..0fdd1c605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/exit_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/fade_link.png
new file mode 100644
index 000000000..482e4d53e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/fade_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/fade_on.png
new file mode 100644
index 000000000..e12561fb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/fade_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/fade_over.png
new file mode 100644
index 000000000..fb8943c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/fade_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/footer.jpg
new file mode 100644
index 000000000..49370dbba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/footer.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/framing.css
new file mode 100755
index 000000000..14d8509e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/framing.css
@@ -0,0 +1,23 @@
+/* The following styles size, place, and layer the slide components.
+ Edit these if you want to change the overall slide layout.
+ The commented lines can be uncommented (and modified, if necessary)
+ to help you with the rearrangement process. */
+
+/* target = 1024x768 */
+
+div#header, div#footer, .slide {width: 100%; top: 0; left: 0;}
+div#header {top: 0; height: 3em; z-index: 1;}
+div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;}
+.slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;}
+div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;}
+div#controls form {position: absolute; bottom: 0; right: 0; width: 100%;
+ margin: 0;}
+#currentSlide {position: absolute; width: 10%; left: 45%; bottom: 1em; z-index: 10;}
+html>body #currentSlide {position: fixed;}
+
+/*
+div#header {background: #FCC;}
+div#footer {background: #CCF;}
+div#controls {background: #BBD;}
+div#currentSlide {background: #FFC;}
+*/
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/header.png
new file mode 100644
index 000000000..929dabba1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/iepngfix.htc
new file mode 100755
index 000000000..bba2db756
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/iepngfix.htc
@@ -0,0 +1,42 @@
+<public:component>
+<public:attach event="onpropertychange" onevent="doFix()" />
+
+<script>
+
+// IE5.5+ PNG Alpha Fix v1.0 by Angus Turnbull http://www.twinhelix.com
+// Free usage permitted as long as this notice remains intact.
+
+// This must be a path to a blank image. That's all the configuration you need here.
+var blankImg = 'ui/default/blank.gif';
+
+var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
+
+function filt(s, m) {
+ if (filters[f]) {
+ filters[f].enabled = s ? true : false;
+ if (s) with (filters[f]) { src = s; sizingMethod = m }
+ } else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")';
+}
+
+function doFix() {
+ if ((parseFloat(navigator.userAgent.match(/MSIE (\S+)/)[1]) < 5.5) ||
+ (event && !/(background|src)/.test(event.propertyName))) return;
+
+ if (tagName == 'IMG') {
+ if ((/\.png$/i).test(src)) {
+ filt(src, 'image'); // was 'scale'
+ src = blankImg;
+ } else if (src.indexOf(blankImg) < 0) filt();
+ } else if (style.backgroundImage) {
+ if (style.backgroundImage.match(/^url[("']+(.*\.png)[)"']+$/i)) {
+ var s = RegExp.$1;
+ style.backgroundImage = '';
+ filt(s, 'crop');
+ } else filt();
+ }
+}
+
+doFix();
+
+</script>
+</public:component> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/index.html
new file mode 100755
index 000000000..39d8f46ad
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/index.html
@@ -0,0 +1,100 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es-es" >
+
+
+<head>
+
+ <title>[Título de la presentación aquí]</title>
+ <!-- metadata -->
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta http-equiv="content-language" content="es" />
+
+ <!--titulo y datos de publicación de la presentación-->
+
+ <meta name="description" content="[Título de la presentación aquí]" />
+
+ <meta name="keywords" content="[keywords aquí]" />
+ <meta name="presdate" content="[Aquí la fecha de publicación en formato aaaammdd]" />
+
+ <meta name="author" lang="es" content="[Nombre del autor de la presentación aquí]" />
+ <meta name="company" content="[Organización del autor de la presentación aquí]" />
+
+ <link rel="shortcut icon" href="ui/default/pics/favicon.ico" />
+
+ <meta name="generator" content="S5" />
+ <meta name="progid" content="quanta+" />
+ <meta name="version" content="S5 · jEsuSdA · 1.1" />
+ <!--Versión adaptada del estandard S5 1.1 por jEsuSdA-->
+
+ <meta name="robots" content="all" />
+
+ <!-- configuration parameters -->
+ <meta name="defaultView" content="slideshow" />
+ <meta name="controlVis" content="hidden" />
+
+ <!-- style sheet links -->
+ <link rel="stylesheet" href="ui/default/slides.css" type="text/css" media="projection" id="slideProj" />
+ <link rel="stylesheet" href="ui/default/outline.css" type="text/css" media="screen" id="outlineStyle" />
+ <link rel="stylesheet" href="ui/default/print.css" type="text/css" media="print" id="slidePrint" />
+ <link rel="stylesheet" href="ui/default/opera.css" type="text/css" media="projection" id="operaFix" />
+
+ <!-- S5 JS -->
+ <script src="ui/default/slides.js" type="text/javascript"></script>
+
+</head>
+
+<body>
+
+ <div class="layout">
+ <div id="controls"><!-- NO EDITAR --></div>
+ <div id="currentSlide"><!-- NO EDITAR --></div>
+
+ <div id="header">
+ <div id="logo"><!-- NO EDITAR --></div>
+ </div>
+
+ </div>
+
+ <div id="footer">
+ <h1>[Lugar/Fecha de la presentación aquí]</h1>
+ <h2>[Título de la presentación aquí]</h2>
+ </div>
+
+
+
+
+<div class="presentation">
+
+ <div class="slide">
+ <h1>[Título de la presentación aquí]</h1>
+ <h3>[Nombre del ponente aquí]</h3>
+ <h4>[Datos extra aquí]</h4>
+ </div>
+
+
+ <div class="slide">
+ <h1>[Título de la diapositiva]</h1>
+
+ <ul>
+ <li>[Punto uno]</li>
+ <li>[Punto dos]</li>
+ <li>[Punto tres]</li>
+ <li>[Punto cuatro]</li>
+ <li>[Punto cinco]</li>
+ </ul>
+
+ <div class="handout">
+
+ [Añade aquí cualquier nota o información que desees mostrar en la versión impresa, pero no en la versión en pantalla]
+
+ </div>
+
+ </div>
+ <!--fin slide-->
+
+</div>
+
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/last_link.png
new file mode 100644
index 000000000..4f158d35d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/last_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/last_over.png
new file mode 100644
index 000000000..a7b629995
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/last_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/list_link.png
new file mode 100644
index 000000000..7e299bb50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/list_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/loop_link.png
new file mode 100644
index 000000000..41e12cb15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/loop_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/loop_on.png
new file mode 100644
index 000000000..2ffcacae1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/loop_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/loop_over.png
new file mode 100644
index 000000000..9fe420153
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/loop_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/next_link.png
new file mode 100644
index 000000000..2b9f44c4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/next_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/next_over.png
new file mode 100644
index 000000000..25788124d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/next_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/notes_link.png
new file mode 100644
index 000000000..bb4a8ae37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/notes_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/notes_over.png
new file mode 100644
index 000000000..c6bfe69fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/notes_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/opera.css
new file mode 100755
index 000000000..9e9d2a3c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/opera.css
@@ -0,0 +1,7 @@
+/* DO NOT CHANGE THESE unless you really want to break Opera Show */
+.slide {
+ visibility: visible !important;
+ position: static !important;
+ page-break-before: always;
+}
+#slide0 {page-break-before: avoid;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/outline.css
new file mode 100755
index 000000000..62db519ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/outline.css
@@ -0,0 +1,15 @@
+/* don't change this unless you want the layout stuff to show up in the outline view! */
+
+.layout div, #footer *, #controlForm * {display: none;}
+#footer, #controls, #controlForm, #navLinks, #toggle {
+ display: block; visibility: visible; margin: 0; padding: 0;}
+#toggle {float: right; padding: 0.5em;}
+html>body #toggle {position: fixed; top: 0; right: 0;}
+
+/* making the outline look pretty-ish */
+
+#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
+#slide0 h1 {padding-top: 1.5em;}
+.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em;
+ border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
+#toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pause_link.png
new file mode 100644
index 000000000..2561cb4a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pause_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pause_on.png
new file mode 100644
index 000000000..2fc9c4a4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pause_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pause_over.png
new file mode 100644
index 000000000..7a7c80ddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pause_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/back-handout-print.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/back-handout-print.png
new file mode 100755
index 000000000..6f68dc67e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/back-handout-print.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/back-slide-print.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/back-slide-print.png
new file mode 100755
index 000000000..05b3dc503
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/back-slide-print.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/back_console.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/back_console.png
new file mode 100755
index 000000000..8704104dc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/back_console.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-foot.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-foot.png
new file mode 100755
index 000000000..c5d1ffc64
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-foot.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-head.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-head.png
new file mode 100755
index 000000000..56dfae9e7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-head.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-head.xcf.7z b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-head.xcf.7z
new file mode 100755
index 000000000..da49c8361
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-head.xcf.7z
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-main.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-main.png
new file mode 100755
index 000000000..835c5edfc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-main.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-main2.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-main2.png
new file mode 100755
index 000000000..1f9702ada
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-main2.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/favicon.ico b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/favicon.ico
new file mode 100755
index 000000000..075faddc7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/favicon.ico
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/logo.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/logo.png
new file mode 100755
index 000000000..1db9ca08f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/logo.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/table-background.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/table-background.png
new file mode 100755
index 000000000..89a7e4fa2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/table-background.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/table-header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/table-header.png
new file mode 100755
index 000000000..d759f1576
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/table-header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pretty.css
new file mode 100755
index 000000000..36bfc0a29
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pretty.css
@@ -0,0 +1,584 @@
+/* Following are the presentation styles -- edit away! */
+
+body
+{
+ background: #fbcd15 url(pics/background-main.png) top left no-repeat;
+ color: #000; font-size: 2em;
+ font-family: Trebuchet MS, Arial, Helvetica, sans-serif;
+/* font-family: Arial, Helvetica, sans-serif; */
+
+}
+
+:link, :visited
+{
+ text-decoration: none;
+ color: #00C;
+}
+
+
+
+h1, h2, h3, h4
+{
+ font-size: 100%;
+ margin: 0;
+ padding: 0;
+ font-weight: inherit;
+}
+
+h1 abbr
+{
+ font-variant: small-caps;
+}
+
+ul, pre
+{
+ margin: 0;
+ line-height: 1em;
+}
+
+html, body
+{
+ margin: 0;
+ padding: 0;
+}
+
+blockquote, q
+{
+ font-style: italic;
+}
+
+blockquote
+{
+ padding: 0 2em 0.5em;
+ margin: 0 1.5em 0.5em;
+ text-align: center;
+ font-size: 1em;
+}
+
+blockquote p
+{
+ margin: 0;
+}
+
+blockquote i
+{
+ font-style: normal;
+}
+
+blockquote b
+{
+ display: block;
+ margin-top: 0.5em;
+ font-weight: normal;
+ font-size: smaller;
+ font-style: normal;
+}
+
+blockquote b i
+{
+ font-style: italic;
+}
+
+kbd
+{
+ font-weight: bold;
+ font-size: 1em;
+}
+
+sup
+{
+ font-size: smaller;
+ line-height: 1px;
+}
+
+
+ul.urls
+{
+ list-style: none;
+ display: inline;
+ margin: 0;
+}
+
+.urls li
+{
+ display: inline;
+ margin: 0;
+}
+
+.notes
+{
+ display: none;
+}
+
+.external
+{
+ border-bottom: 1px dotted gray;
+}
+
+html>body .external
+{
+ border-bottom: none;
+}
+
+.external:after
+{
+ content: " \274F";
+ font-size: smaller;
+ color: #fff;
+}
+
+.incremental, .incremental *, .incremental *:after
+{
+ color: #fff;
+ visibility: visible;
+}
+
+img.incremental
+{
+ visibility: hidden;
+}
+
+.slide .current
+{
+ color: #fff;
+}
+
+
+/* ============== */
+/* === SLIDES === */
+/* ============== */
+
+.slide code
+{
+ padding: 2px 0.25em;
+ font-weight: bold;
+}
+
+.slide code.bad, code del
+{
+ color: red;
+}
+
+.slide code.old
+{
+ color: silver;
+}
+
+.slide pre
+{
+
+ color: #fff;
+ display:block;
+ font-weight:bold;
+ font-family: Arial, Sans-Serif !important;
+ font-size:41.5%;
+ line-height:1.5em;
+ background:#2e3436 url(pics/back_console.png) right bottom no-repeat ;
+ border:3px solid #f19c12;
+ padding:1em 1em 1em 1em;
+
+
+}
+
+.slide pre code
+{
+ font-family: Arial, Sans-Serif !important;
+ display:block;
+ margin:0;
+ padding:0;
+}
+
+
+
+.slide ul
+{
+ margin-left: 5%;
+ margin-right: 7%;
+ list-style: disc;
+}
+
+.slide li
+{
+ margin-top: 0.75em;
+ margin-right: 0;
+}
+
+.slide ul ul
+{
+ line-height: 1;
+}
+
+.slide ul ul li
+{
+ margin: .2em;
+ font-size: 85%;
+ list-style: square;
+}
+
+.slide img.leader
+{
+ display: block;
+ margin: 0 auto;
+}
+
+
+/* ========================= */
+/* === HEADER AND FOOTER === */
+/* ========================= */
+
+div#logo
+{
+ position:absolute;
+ top:0%;
+ right:0%;
+ background:url(pics/logo.png) 50% 50% no-repeat;
+ height:200%;
+ width:150px;
+}
+
+div#header, div#footer
+{
+ background: #a80231;
+ color: #FFF;
+}
+
+
+div#header
+{
+ background:#f19c12 url(pics/background-head.png) bottom left repeat-x;
+ line-height: 1px;
+}
+
+div#footer
+{
+ background:#f19c12 url(pics/background-foot.png) top left repeat-x;
+ font-size: 0.5em;
+ font-weight: bold;
+ padding: 1em 0;
+}
+
+
+
+
+
+#footer h1, #footer h2
+{
+ display: block;
+ padding: 0 1em;
+}
+
+#footer h2
+{
+ font-style: italic;
+}
+
+
+
+/* ============== */
+/* === CLASES === */
+/* ============== */
+
+div.long
+{
+ font-size: 0.75em;
+}
+
+.slide h1
+{
+ position: absolute;
+ top: 0.7em;
+ left: 87px;
+ z-index: 1;
+ margin: 0;
+ padding: 0.3em 0 0 50px;
+ white-space: nowrap;
+ font-weight: bold;
+ font-size: 150%/1em;
+
+ text-transform: capitalize;
+ color: #fff;
+ background: transparent;
+}
+
+.slide h3
+{
+ font-size: 130%;
+}
+
+/* ================ */
+/* === CONTROLS === */
+/* ================ */
+
+
+#currentSlide
+{
+ text-align: center;
+ font-size: 0.6em;
+ font-weight:bold;
+ color: #fff;
+}
+
+#slide0
+{
+ padding-top: 3.5em;
+ font-size: 90%;
+}
+
+#slide0 h1
+{
+ position: static;
+ margin: 1em 0 0;
+ padding: 0;
+/* font: bold 2em Helvetica, sans-serif; */
+ font-weight: bold;
+ font-size:2em;
+ white-space: normal;
+ color: #000;
+ background: transparent;
+}
+
+#slide0 h2
+{
+ font-weight: bold;
+ font-style: italic;
+ font-size: 1em;
+ margin: 0.25em;
+}
+
+#slide0 h3
+{
+ margin-top: 1.5em;
+ font-size: 1.5em;
+}
+
+#slide0 h4
+{
+ margin-top: 0;
+ font-size: 1em;
+}
+
+/* ================ */
+/* === JESUSDA === */
+/* ================ */
+
+.first-pic
+{
+
+ float:right;
+ margin-top:-2em;
+}
+
+/* ================ */
+
+.align-center
+{
+ text-align:center;
+}
+/* ================ */
+
+.float-left , .left-column
+{
+ float:left !important;
+ width:49% !important;
+}
+
+.float-right , .right-column
+{
+ float:right !important;
+ width:49% !important;
+}
+/* ================ */
+.fullscreen
+{
+ z-index:1000 !important;
+ position:fixed !important;
+ top:0;
+ left:0;
+ width:100% !important;
+ height:100% !important;
+
+ background: #fff url(pics/background-main.png) top left no-repeat;
+
+ text-align:center;
+ margin-left:-1.65em;
+
+}
+
+.fullscreen h1
+{
+ display:none;
+}
+
+.rotulo
+{
+ font-size:800%;
+ text-align:center;
+ margin-top:-0.05em;
+
+}
+
+.rotulo2
+{
+ font-size:200%;
+ text-align:center;
+ font-weight:bolder;
+ margin-top:-0.05em;
+
+}
+
+.align-center img
+{
+ margin:auto;
+ text-align:center;
+ margin:0;
+}
+
+/* ========================= */
+/* === TABLAS === */
+/* ========================= */
+
+table
+{
+ background:url(pics/table-background.png) bottom left repeat-x #fff;
+ margin-right:1em;
+ font-size:70%;
+ border:3px solid #f19c12 !important;
+ border-spacing: 0;
+ text-align:center;
+}
+
+table td
+{
+ padding:0.5em;
+ font-size:90%;
+ border:1px solid #d2d7cf !important;
+ border-spacing: 0;
+ text-align:center;
+}
+
+th
+{
+ background:url(pics/table-header.png) bottom left repeat-x #f19c12;
+ color:#fff;
+}
+
+th a
+{
+ color:#fff !important;
+}
+
+
+
+table caption
+{
+ margin-bottom:1em;
+ margin-top:1em;
+ margin-left:-7em;
+
+
+}
+
+
+display-none
+{
+ display:none;
+}
+
+div#controls {position: absolute; left: 0; bottom: 0; width: 100%; text-align: center; font: bold 1em Verdana, Arial, Helvetica, sans-serif;}
+html>body div#controls {background: transparent; position: fixed; padding: 0; top: auto; text-align: center;}
+#controls #sheet {display: none;}
+#controls #controlForm {height: 32px; width: 100%; text-align: center; vertical-align: middle;}
+#controls #navLinks {border-top: 1px solid #999; overflow: hidden; padding: 0; margin: 0; height: 32px; width: 100%; background-color: #808080; text-align: center; vertical-align: middle; white-space: nowrap;}
+#controls #navLinks ul {margin: 0 auto; padding: 0; height: 32px; width: 500px; white-space: nowrap; text-align: center;}
+#controls #navLinks ul li {list-style: none; display: inline; margin: 0; padding: 0; float: left; height: 32px; width: 32px; text-align: center; background-color: transparent;}
+#controls #navLinks ul li.vr {list-style: none; display: inline; margin: 0px 2px; padding: 0; float: left; height: 32px; width: 1px; text-align: center; background-color: #606060;}
+#controls #navLinks ul li a {margin: 0; padding: 0; float: left; height: 32px; width: 32px; background-color: transparent;}
+
+#controls #navLinks ul li#exit {background: url(exit_link.png) no-repeat top left;}
+#controls #navLinks ul li#exit a:hover {background: url(exit_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#toggle {background: url(toggle_link.png) no-repeat top left;}
+#controls #navLinks ul li#toggle a:hover {background: url(toggle_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#show-notes {background: url(notes_link.png) no-repeat top left;}
+#controls #navLinks ul li#show-notes a:hover {background: url(notes_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#zero {background: url(zero_link.png) no-repeat top left;}
+#controls #navLinks ul li#zero a:hover {background: url(zero_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#prev {background: url(prev_link.png) no-repeat top left;}
+#controls #navLinks ul li#prev a:hover {background: url(prev_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#next {background: url(next_link.png) no-repeat top left;}
+#controls #navLinks ul li#next a:hover {background: url(next_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#last {background: url(last_link.png) no-repeat top left;}
+#controls #navLinks ul li#last a:hover {background: url(last_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#lst {background: url(list_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#fade a.isoff {background: url(fade_link.png) no-repeat top left;}
+#controls #navLinks ul li#fade a.ison {background: url(fade_on.png) no-repeat top right;}
+#controls #navLinks ul li#fade a:hover {background: url(fade_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#audio {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.isoff {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.ison {background: url(audio_on.png) no-repeat top right;}
+#controls #navLinks ul li#audio a:hover {background: url(audio_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#vol {background: url(volume_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#auto a.isoff {background: url(auto_link.png) no-repeat top left;}
+#controls #navLinks ul li#auto a.ison {background: url(auto_on.png) no-repeat top right;}
+#controls #navLinks ul li#auto a:hover {background: url(auto_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#pause a.isoff {background: url(pause_link.png) no-repeat top left;}
+#controls #navLinks ul li#pause a.ison {background: url(pause_on.png) no-repeat top right;}
+#controls #navLinks ul li#pause a:hover {background: url(pause_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#loop a.isoff {background: url(loop_link.png) no-repeat top left;}
+#controls #navLinks ul li#loop a.ison {background: url(loop_on.png) no-repeat top right;}
+#controls #navLinks ul li#loop a:hover {background: url(loop_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#del {background: url(delay_link.png) no-repeat top left;}
+
+#jumplist, #volumelist, #delaylist {padding: 0; margin: 0; width: 32px; height: 32px; cursor: n-resize;}
+
+#guru {position: absolute; visibility: visible; left: 0px; top: 0px; padding: 4px; width: 99%; height: auto; text-align: center; background-color: black; z-index: 10;}
+#guru div {border: solid 3px red; padding: 4px; font-family: monospace; font-size: 60%; width: auto; height: auto; color: red; text-align: center;}
+
+/*
+#currentSlide {white-space: nowrap; text-align: center; margin-bottom: -0.5em; font-size: 0.5em; background-color: transparent; color: #999;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 0; padding: 0; font: bold 2em Verdana, Arial, Helvetica, sans-serif; font-variant: small-caps; text-shadow: 0.1em 0.1em 0.1em #666; white-space: normal; color: #222; background-color: transparent;}
+#slide0 h2 {font: bold italic 1em Arial, Helvetica, sans-serif; margin: 0.25em;}
+#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+*/
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.external {border-bottom: 1px dotted gray;}
+html>body .external {border-bottom: none;}
+.external:after {content: " \274F"; font-size: smaller; color: #999;}
+
+.incremental, .incremental *, .incremental *:after {color: #ccc; visibility: visible;}
+img.incremental, canvas.incremental {visibility: hidden;}
+.slide .current {color: #B02;}
+
+/* diagnostics
+li:after {content: " [" attr(class) "]"; color: #F88;}
+*/
+
+table.piechart, table.barchart, table.linechart { border-spacing: 0.3em 0.15em; }
+table.piechart tr th, table.barchart tr th, table.linechart tr th { white-space: nowrap; }
+table.piechart tr td, table.barchart tr td, table.linechart tr td { vertical-align: top; white-space: nowrap; }
+table.piechart tr td.col, table.barchart tr td.col, table.linechart tr td.col { border-bottom: 1px solid #555; border-right: 1px solid #555; }
+table.fs90 tr td, table.fs90 tr th, div.fs90, pre.fs90, p.fs90 ,ul.fs90 {font-size: 0.9em; }
+table.fs75 tr td, table.fs75 tr th, div.fs75, pre.fs75, p.fs75 ,ul.fs75 {font-size: 0.75em; }
+table.fs66 tr td, table.fs66 tr th, div.fs66, pre.fs66, p.fs66 ,ul.fs66 {font-size: 0.66em; }
+table.fs50 tr td, table.fs50 tr th, div.fs50, pre.fs50, p.fs50 ,ul.fs50 {font-size: 0.5em; }
+
+#soundmanager-debug {position:fixed; top:0px; right:0px; width:30em; height:20em; overflow:auto; border:1px solid red; padding:1em; margin:2em; font-family:"sans serif"; font-size: 12px;color: black; background-color:#f6f6f6; z-index: 100;}
+#soundmanager-debug code {font-size: 11px;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/prev_link.png
new file mode 100644
index 000000000..c31d21350
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/prev_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/prev_over.png
new file mode 100644
index 000000000..6fef4fa52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/prev_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/print.css
new file mode 100755
index 000000000..220083260
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/print.css
@@ -0,0 +1 @@
+/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul { page-break-inside: avoid; visibility: visible !important; } h1 { page-break-after: avoid; } html { width:100%; overflow:hidden; } body { font-size: 12pt; background: white; width:100%; } * { color: black; } #slide0 h1 { font-size: 200%; border: none; margin: 0.5em 0 0.25em; } #slide0 h3 { margin: 0; padding: 0; } #slide0 h4 { margin: 0 0 0.5em; padding: 0; } #slide0 { margin-bottom: 3em; } h1 { border-top: 2pt solid gray; border-bottom: 1px dotted silver; padding:0.2em 0 0.3em 0; } .extra { background: transparent !important; } div.extra, pre.extra, .example { font-size: 10pt; color: #333; } ul.extra a { font-weight: bold; } p.example { display: none; } #header { display: none; } #footer h1 { margin: 0; border-bottom: 1px solid; color: gray; font-style: italic; } #footer h2, #controls { display: none; } div.handout { display:block; border-top: 2px dotted #ccc; background:url(pics/back-handout-print.png) top right no-repeat #fff; min-height:6em; padding-right:6em; margin-bottom:1em; } .slide { display:block; background:url(pics/back-slide-print.png) top right no-repeat #fff; min-height:6em; margin-bottom:1em; } table { display:block; /* display:none; */ font-size:90%; overflow:hidden; margin-top:1em; margin-bottom:1em; } pre , code { margin:0; font-size:1pt; overflow:auto; } img { max-width:100% !important; } /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .layout, .layout * { display: none !important; } \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/s5-core.css
new file mode 100755
index 000000000..86444e041
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/s5-core.css
@@ -0,0 +1,9 @@
+/* Do not edit or override these styles! The system will likely break if you do. */
+
+div#header, div#footer, div#controls, .slide {position: absolute;}
+html>body div#header, html>body div#footer,
+ html>body div#controls, html>body .slide {position: fixed;}
+.handout {display: none;}
+.layout {display: block;}
+.slide, .hideme, .incremental {visibility: hidden;}
+#slide0 {visibility: visible;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/slides.css
new file mode 100755
index 000000000..0786d7dbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/slides.css
@@ -0,0 +1,3 @@
+@import url(s5-core.css); /* required to make the slide show run at all */
+@import url(framing.css); /* sets basic placement and size of slide components */
+@import url(pretty.css); /* stuff that makes the slides look better than blah */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/slides.js
new file mode 100644
index 000000000..510a04c0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/slides.js
@@ -0,0 +1,2812 @@
+// S5 1.3beta7 (18-Apr-2007) advanced version by C. Effenberger
+// Please see http://s5.netzgesta.de/ for more information
+// based on S5 v1.2a1 slides.js -- released into the Public Domain
+// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
+// about all the wonderful and talented contributors to this code!
+// audio extension: soundmanager2 is NOT Public Domain
+// Please see http://www.schillmania.com/projects/soundmanager2/ for information
+
+var undef;
+var slideCSS = '';
+var snum = 0;
+var smax = 1;
+var incpos = 0;
+var number = undef;
+var firstTime = 1;
+var s5mode = true;
+var helpmode = false;
+var defaultView = 'slideshow'; //outline
+var controlVis = 'visible';
+var s5Path = 'lib/plugins/s5reloaded/';
+
+// scalable images extension
+var empx = 0;
+var images = new Array();
+var canvas = new Array();
+var medias = new Array();
+var piecharts = new Array();
+var barcharts = new Array();
+var linecharts = new Array();
+// scalable images extension
+
+// transition extension
+var tranSitions = false;
+var fadeModus = false;
+var fadeDuration = 500;
+var incrDuration = 250;
+var opac = 1;
+var cid = '';
+var nid = '';
+var tid = '';
+var jl = '';
+// transition extension
+
+// autoplay extension
+var autoMatic = false;
+var playLoop = false;
+var playPause = false;
+var autoRun = false;
+var playDelay = 5000;
+var remainDer = 0;
+var incrDelay = 0;
+// autoplay extension
+
+// audio extension
+var sound = new Array();
+var audioSupport = false;
+var audioVolume = 100;
+var audioError = false;
+var swfUnloaded = true;
+var bgSoundItem = 9999;
+var curSoundID = -1;
+// audio extension
+
+// panel extension
+var imgWidth = 32;
+var imgHeight = 32;
+// panel extension
+
+// canvas chart extension
+var canvasSupport = false;
+var ChartData = new Array();
+var colorSlice = new Array();
+var font = document.createElement("img");
+font.setAttribute("src", s5Path+"ui/graphic_support/numeric.png");
+signs = {
+ '0': {sx: 0, sy: 0, sw: 48, sh: 64},
+ '1': {sx: 48, sy: 0, sw: 48, sh: 64},
+ '2': {sx: 96, sy: 0, sw: 48, sh: 64},
+ '3': {sx: 144, sy: 0, sw: 48, sh: 64},
+ '4': {sx: 192, sy: 0, sw: 48, sh: 64},
+ '5': {sx: 240, sy: 0, sw: 48, sh: 64},
+ '6': {sx: 288, sy: 0, sw: 48, sh: 64},
+ '7': {sx: 336, sy: 0, sw: 48, sh: 64},
+ '8': {sx: 384, sy: 0, sw: 48, sh: 64},
+ '9': {sx: 432, sy: 0, sw: 48, sh: 64},
+ '%': {sx: 480, sy: 0, sw: 48, sh: 64},
+ '.': {sx: 528, sy: 0, sw: 24, sh: 64}
+};
+var colorNames= new Array();
+colorNames["black"]="#000000"; colorNames["maroon"]="#800000";
+colorNames["green"]="#008000"; colorNames["olive"]="#808000";
+colorNames["navy"]="#000080"; colorNames["purple"]="#800080";
+colorNames["teal"]="#008080"; colorNames["gray"]="#808080";
+colorNames["silver"]="#C0C0C0"; colorNames["red"]="#FF0000";
+colorNames["lime"]="#00FF00"; colorNames["yellow"]="#FFFF00";
+colorNames["blue"]="#0000FF"; colorNames["fuchsia"]="#FF00FF";
+colorNames["aqua"]="#00FFFF"; colorNames["white"]="#FFFFFF";
+colorNames["aliceblue"]="#F0F8FF"; colorNames["antiquewhite"]="#FAEBD7";
+colorNames["aquamarine"]="#7FFFD4"; colorNames["azure"]="#F0FFFF";
+colorNames["beige"]="#F5F5DC"; colorNames["blueviolet"]="#8A2BE2";
+colorNames["brown"]="#A52A2A"; colorNames["burlywood"]="#DEB887";
+colorNames["cadetblue"]="#5F9EA0"; colorNames["chartreuse"]="#7FFF00";
+colorNames["chocolate"]="#D2691E"; colorNames["coral"]="#FF7F50";
+colorNames["cornflowerblue"]="#6495ED"; colorNames["cornsilk"]="#FFF8DC";
+colorNames["crimson"]="#DC143C"; colorNames["darkblue"]="#00008B";
+colorNames["darkcyan"]="#008B8B"; colorNames["darkgoldenrod"]="#B8860B";
+colorNames["darkgray"]="#A9A9A9"; colorNames["darkgreen"]="#006400";
+colorNames["darkkhaki"]="#BDB76B"; colorNames["darkmagenta"]="#8B008B";
+colorNames["darkolivegreen"]="#556B2F"; colorNames["darkorange"]="#FF8C00";
+colorNames["darkorchid"]="#9932CC"; colorNames["darkred"]="#8B0000";
+colorNames["darksalmon"]="#E9967A"; colorNames["darkseagreen"]="#8FBC8F";
+colorNames["darkslateblue"]="#483D8B"; colorNames["darkslategray"]="#2F4F4F";
+colorNames["darkturquoise"]="#00CED1"; colorNames["darkviolet"]="#9400D3";
+colorNames["deeppink"]="#FF1493"; colorNames["deepskyblue"]="#00BFFF";
+colorNames["dimgray"]="#696969"; colorNames["dodgerblue"]="#1E90FF";
+colorNames["firebrick"]="#B22222"; colorNames["floralwhite"]="#FFFAF0";
+colorNames["forestgreen"]="#228B22"; colorNames["gainsboro"]="#DCDCDC";
+colorNames["ghostwhite"]="#F8F8FF"; colorNames["gold"]="#FFD700";
+colorNames["goldenrod"]="#DAA520"; colorNames["greenyellow"]="#ADFF2F";
+colorNames["honeydew"]="#F0FFF0"; colorNames["hotpink"]="#FF69B4";
+colorNames["indianred"]="#CD5C5C"; colorNames["indigo"]="#4B0082";
+colorNames["ivory"]="#FFFFF0"; colorNames["khaki"]="#F0E68C";
+colorNames["lavender"]="#E6E6FA"; colorNames["lavenderblush"]="#FFF0F5";
+colorNames["lawngreen"]="#7CFC00"; colorNames["lemonchiffon"]="#FFFACD";
+colorNames["lightblue"]="#ADD8E6"; colorNames["lightcoral"]="#F08080";
+colorNames["lightcyan"]="#E0FFFF"; colorNames["lightgoldenrodyellow"]="#FAFAD2";
+colorNames["lightgreen"]="#90EE90"; colorNames["lightgrey"]="#D3D3D3";
+colorNames["lightpink"]="#FFB6C1"; colorNames["lightsalmon"]="#FFA07A";
+colorNames["lightseagreen"]="#20B2AA"; colorNames["lightskyblue"]="#87CEFA";
+colorNames["lightslategray"]="#778899"; colorNames["lightsteelblue"]="#B0C4DE";
+colorNames["lightyellow"]="#FFFFE0"; colorNames["limegreen"]="#32CD32";
+colorNames["linen"]="#FAF0E6"; colorNames["mediumaquamarine"]="#66CDAA";
+colorNames["mediumblue"]="#0000CD"; colorNames["mediumorchid"]="#BA55D3";
+colorNames["ediumpurple"]="#9370D"; colorNames["mediumseagreen"]="#3CB371";
+colorNames["mediumslateblue"]="#7B68EE"; colorNames["mediumspringgreen"]="#00FA9A";
+colorNames["mediumturquoise"]="#48D1CC"; colorNames["mediumvioletred"]="#C71585";
+colorNames["midnightblue"]="#191970"; colorNames["mintcream"]="#F5FFFA";
+colorNames["mistyrose"]="#FFE4E1"; colorNames["moccasin"]="#FFE4B5";
+colorNames["navajowhite"]="#FFDEAD"; colorNames["oldlace"]="#FDF5E6";
+colorNames["olivedrab"]="#6B8E23"; colorNames["orange"]="#FFA500";
+colorNames["orangered"]="#FF4500"; colorNames["orchid"]="#DA70D6";
+colorNames["palegoldenrod"]="#EEE8AA"; colorNames["palegreen"]="#98FB98";
+colorNames["paleturquoise"]="#AFEEEE"; colorNames["palevioletred"]="#DB7093";
+colorNames["papayawhip"]="#FFEFD5"; colorNames["peachpuff"]="#FFDAB9";
+colorNames["peru"]="#CD853F"; colorNames["pink"]="#FFC0CB";
+colorNames["plum"]="#DDA0DD"; colorNames["powderblue"]="#B0E0E6";
+colorNames["rosybrown"]="#BC8F8F"; colorNames["royalblue"]="#4169E1";
+colorNames["saddlebrown"]="#8B4513"; colorNames["salmon"]="#FA8072";
+colorNames["sandybrown"]="#F4A460"; colorNames["seagreen"]="#2E8B57";
+colorNames["seashell"]="#FFF5EE"; colorNames["sienna"]="#A0522D";
+colorNames["skyblue"]="#87CEEB"; colorNames["slateblue"]="#6A5ACD";
+colorNames["slategray"]="#708090"; colorNames["snow"]="#FFFAFA";
+colorNames["springgreen"]="#00FF7F"; colorNames["steelblue"]="#4682B4";
+colorNames["tan"]="#D2B48C"; colorNames["thistle"]="#D8BFD8";
+colorNames["tomato"]="#FF6347"; colorNames["turquoise"]="#40E0D0";
+colorNames["violet"]="#EE82EE"; colorNames["wheat"]="#F5DEB3";
+colorNames["whitesmoke"]="#F5F5F5"; colorNames["yellowgreen"]="#9ACD32";
+var canvas_bgcolor = "";
+var canvas_width = 200;
+var canvas_height = 200;
+var canvas_noshade = 0;
+var canvas_nofill = 0;
+var canvas_noshadow = 0;
+var canvas_htmltext = 0;
+var canvas_imgtext = 0;
+var canvas_notext = 0;
+// canvas chart extension
+
+var s5NotesWindow;
+var s5NotesWindowLoaded = false;
+var previousSlide = 0;
+var presentationStart = new Date();
+var slideStart = new Date();
+
+var countdown = {
+ timer: 0,
+ state: 'pause',
+ start: new Date(),
+ end: 0,
+ remaining: 0
+};
+
+var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
+if(isIE) var notIE7 = parseInt(navigator.appVersion) < 7 ? 1 : 0;
+var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
+var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
+var isS2 = navigator.userAgent.indexOf('Safari') >= 2 ? 1 : 0;
+
+function hasClass(object, className) {
+ if (!object.className) return false;
+ return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
+}
+
+function hasValue(object, value) {
+ if (!object) return false;
+ return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
+}
+
+function removeClass(object,className) {
+ if (!object || !hasClass(object,className)) return;
+ object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
+}
+
+function addClass(object,className) {
+ if (!object || hasClass(object, className)) return;
+ if (object.className) {
+ object.className += ' '+className;
+ } else {
+ object.className = className;
+ }
+}
+
+function changeClass(object,className) {
+ if (!object) return;
+ object.firstChild.className = className;
+}
+
+function GetElementsWithClassName(elementName,className) {
+ var allElements = document.getElementsByTagName(elementName);
+ var elemColl = new Array();
+ for (var i = 0; i< allElements.length; i++) {
+ if (hasClass(allElements[i], className)) {
+ elemColl[elemColl.length] = allElements[i];
+ }
+ }
+ return elemColl;
+}
+
+function isParentOrSelf(element, id) {
+ if (element == null || element.nodeName=='BODY') return false;
+ else if (element.id == id) return true;
+ else return isParentOrSelf(element.parentNode, id);
+}
+
+function nodeValue(node) {
+ var result = "";
+ if (node.nodeType == 1) {
+ var children = node.childNodes;
+ for (var i = 0; i < children.length; ++i) {
+ result += nodeValue(children[i]);
+ }
+ }
+ else if (node.nodeType == 3) {
+ result = node.nodeValue;
+ }
+ return(result);
+}
+
+function slideLabel() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var list = document.getElementById('jumplist');
+ smax = slideColl.length;
+ for (var n = 0; n < smax; n++) {
+ var obj = slideColl[n];
+ var did = 'slide' + n.toString();
+ obj.setAttribute('id',did);
+ var otext = '';
+ var menu = obj.firstChild;
+ if (!menu) continue; // to cope with empty slides
+ while (menu && menu.nodeType == 3) {
+ menu = menu.nextSibling;
+ }
+ if (!menu) continue; // to cope with slides with only text nodes
+ var menunodes = menu.childNodes;
+ for (var o = 0; o < menunodes.length; o++) {
+ otext += nodeValue(menunodes[o]);
+ }
+ list.options[list.length] = new Option(n + ' : ' + otext, n);
+ }
+}
+
+function currentSlide() {
+ var cs, at, fd, ss;
+ if (document.getElementById) {
+ cs = document.getElementById('currentSlide');
+ } else {
+ cs = document.currentSlide;
+ }
+ fd = fadeModus?"F":"&ndash;";
+ ss = audioSupport?"S":"&ndash;";
+ at = (autoMatic?(playPause?"||":(playLoop?"&gt;0":"&gt;|")):"&ndash;&ndash;");
+ cs.innerHTML = '<div id="plink" nowrap="nowrap">' +
+ '<span id="csFade">[' + fd + ss + ']<\/span>&nbsp;' +
+ '<span id="csHere"><strong>' + snum + '<\/strong><\/span>' +
+ '<span id="csSep">\/<\/span>' +
+ '<span id="csTotal">' + (smax-1) + '<\/span>&nbsp;' +
+ '<span id="csAuto">[' + at + ']<\/span>' +
+ '<\/div>';
+
+ if (snum == 0) {
+ cs.style.visibility = 'hidden';
+ } else {
+ cs.style.visibility = 'visible';
+ }
+}
+
+function go(step) {
+ if (document.getElementById('slideProj').disabled || step == 0) return;
+ jl = document.getElementById('jumplist');
+ cid = 'slide' + snum;
+ var ce = document.getElementById(cid);
+ if (incrementals[snum].length > 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ removeClass(incrementals[snum][i], 'current');
+ removeClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ if (step != 'j') {
+ snum += step;
+ lmax = smax - 1;
+ if (snum > lmax) snum = lmax;
+ if (snum < 0) snum = 0;
+ }else {
+ snum = parseInt(jl.value);
+ }
+ nid = 'slide' + snum;
+ var ne = document.getElementById(nid);
+ if (!ne) {
+ ne = document.getElementById('slide0');
+ nid = 'slide0';
+ snum = 0;
+ }
+ if (step < 0) {
+ incpos = incrementals[snum].length
+ }else {
+ incpos = 0;
+ }
+ if (incrementals[snum].length > 0 && incpos == 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ if (hasClass(incrementals[snum][i], 'current')) {
+ incpos = i + 1;
+ }else {
+ addClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ }
+ if (incrementals[snum].length > 0 && incpos > 0) {
+ addClass(incrementals[snum][incpos - 1], 'current');
+ }
+ var guru = document.getElementById('guru');
+ if(guru && snum==0) {
+ guru.style.visibility = 'visible';
+ }else if(guru && snum>0) {
+ guru.style.visibility = 'hidden';
+ }
+ if(tranSitions && s5mode && fadeModus) {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {fadeoutSound(curSoundID,true); } // audio support
+ }
+ changeOpac(0,nid);
+ changeOpac(100,cid);
+ ce.style.visibility = 'visible';
+ shiftOpacity(cid,fadeDuration);
+ window.setTimeout("changeSlides()",fadeDuration);
+ }else {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {stopSound(curSoundID); } // audio support
+ }
+ ce.style.visibility = 'hidden';
+ if (isOp) location.hash = nid;
+ ne.style.visibility = 'visible';
+ finishSlides();
+ }
+}
+
+function changeSlides() {
+ if(nid != cid) changeOpac(100,cid);
+ document.getElementById(cid).style.visibility = 'hidden';
+ document.getElementById(nid).style.visibility = 'visible';
+ if (isOp) location.hash = nid;
+ shiftOpacity(nid,fadeDuration);
+ window.setTimeout("finishSlides()",fadeDuration);
+}
+
+function finishSlides() {
+ jl.selectedIndex = snum;
+ currentSlide();
+ loadNote();
+ permaLink();
+ number = undef;
+ if(sound[getSoundID(nid)]) {
+ playSound(nid); // audio support
+ }else if(sound[bgSoundItem] && curSoundID != bgSoundItem) {
+ playSound(bgSoundItem); // audio support
+ }
+}
+
+function goTo(target) {
+ if (target >= smax || target == snum) return;
+ go(target - snum);
+}
+
+function subgo(step) {
+ if (step > 0) {
+ removeClass(incrementals[snum][incpos - 1],'current');
+ removeClass(incrementals[snum][incpos], 'incremental');
+ if(tranSitions && s5mode && fadeModus) {
+ if(!incrementals[snum][incpos].id) {
+ var tmp = new Date(); tid = "inc" + String(tmp.getTime());
+ incrementals[snum][incpos].id = tid;
+ }else {
+ tid = incrementals[snum][incpos].id;
+ }
+ if(typeof(incrementals[snum][incpos].src) != "undefined" || incrementals[snum][incpos].getContext) {
+ changeOpac(0,tid);
+ addClass(incrementals[snum][incpos],'current');
+ shiftOpacity(tid,incrDuration);
+ setTimeout("nextInc()",incrDuration);
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ } else {
+ incpos--;
+ removeClass(incrementals[snum][incpos],'current');
+ addClass(incrementals[snum][incpos], 'incremental');
+ addClass(incrementals[snum][incpos - 1],'current');
+ loadNote();
+ }
+}
+
+function nextInc() {
+ incpos++;
+ loadNote();
+}
+
+function toggle() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ var guru = document.getElementById('guru');
+ if (!slides.disabled) {
+ stopPlay();
+ if(audioSupport && !swfUnloaded) stopAllSounds();
+ slides.disabled = true;
+ outline.disabled = false;
+ s5mode = false;
+ fontSize(1,'em');
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'visible';
+ }
+ if(guru) guru.style.visibility = 'hidden';
+ } else {
+ slides.disabled = false;
+ outline.disabled = true;
+ s5mode = true;
+ fontScale();
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'hidden';
+ }
+ slideColl[snum].style.visibility = 'visible';
+ if(guru && snum==0) guru.style.visibility = 'visible';
+ }
+}
+
+function showHide(action) {
+ var obj = GetElementsWithClassName('*','hideme')[0];
+ switch (action) {
+ case 's':
+ obj.style.visibility = 'visible';
+ break;
+ case 'h':
+ obj.style.visibility = 'hidden';
+ break;
+ case 'k':
+ if (obj.style.visibility != 'visible') {
+ obj.style.visibility = 'visible';
+ } else {
+ obj.style.visibility = 'hidden';
+ }
+ break;
+ }
+}
+
+function keys(key) {
+ if (!key) {
+ key = event;
+ key.which = key.keyCode;
+ }
+ if (helpmode) {
+ dumpHelpReq();
+ return;
+ }
+ if (key.which == 84 && !isOp) {
+ toggle();
+ return;
+ }
+ if (s5mode) {
+ if (autoMatic) {
+ switch (key.which) {
+ case 70: // f/ading on/off
+ switchFade();
+ break;
+ case 83: // s/ound on/off
+ toggleSounds();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 65: // a/utoplay on/off
+ stopPlay();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 80: // p/ause
+ case 32: // spacebar
+ pausePlay();
+ break;
+ }
+ }else {
+ switch (key.which) {
+ case 8: // backspace = HELP
+ createHelpReq();
+ break;
+ case 10: // return
+ case 13: // enter
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ if(number != undef) {
+ goTo(number);
+ break;
+ }
+ case 32: // spacebar
+ case 34: // page down
+ case 39: // rightkey
+ case 40: // downkey
+ if(number != undef) {
+ go(number);
+ } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ break;
+ case 33: // page up
+ case 37: // leftkey
+ case 38: // upkey
+ if(number != undef) {
+ go(-1 * number);
+ } else if (!incrementals[snum] || incpos <= 0) {
+ go(-1);
+ } else {
+ subgo(-1);
+ }
+ break;
+ case 65: // a/utoplay
+ startPlay();
+ break;
+ case 72: // h
+ case 36: // home
+ goTo(0);
+ break;
+ case 69: // e
+ case 35: // end
+ goTo(smax-1);
+ break;
+ case 70: // f/ade transitions on/off
+ switchFade();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 83: // s/ound support on/off
+ toggleSounds();
+ break;
+ case 27: // escape
+ case 81: // q
+ if(!isOp) byby();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 78: // n
+ createNotesWindow();
+ break;
+ }
+ if (key.which < 48 || key.which > 57) {
+ number = undef;
+ } else {
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
+ }
+ }
+ }
+ return false;
+}
+
+function clicker(e) {
+ number = undef;
+ var target;
+ if (window.event) {
+ target = window.event.srcElement;
+ e = window.event;
+ } else {
+ target = e.target;
+ }
+ if (target.href != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
+ if (!helpmode) {
+ if (!e.which || e.which == 1) {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ }
+ } else {
+ dumpHelpReq();
+ }
+}
+
+function findSlide(hash) {
+ var target = null;
+ var slides = GetElementsWithClassName('*','slide');
+ for (var i = 0; i < slides.length; i++) {
+ var targetSlide = slides[i];
+ if ( (targetSlide.name && targetSlide.name == hash)
+ || (targetSlide.id && targetSlide.id == hash) ) {
+ target = targetSlide;
+ break;
+ }
+ }
+ while(target != null && target.nodeName != 'BODY') {
+ if (hasClass(target, 'slide')) {
+ return parseInt(target.id.slice(5));
+ }
+ target = target.parentNode;
+ }
+ return null;
+}
+
+function slideJump() {
+ if (window.location.hash == null) return;
+ var sregex = /^#slide(\d+)$/;
+ var matches = sregex.exec(window.location.hash);
+ var dest = null;
+ if (matches != null) {
+ dest = parseInt(matches[1]);
+ } else {
+ dest = findSlide(window.location.hash.slice(1));
+ }
+ if (dest != null)
+ go(dest - snum);
+}
+
+function fixLinks() {
+ var thisUri = window.location.href;
+ thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
+ var aelements = document.getElementsByTagName('A');
+ for (var i = 0; i < aelements.length; i++) {
+ var a = aelements[i].href;
+ var slideID = a.match('\#slide[0-9]{1,2}');
+ if ((slideID) && (slideID[0].slice(0,1) == '#')) {
+ var dest = findSlide(slideID[0].slice(1));
+ if (dest != null) {
+ if (aelements[i].addEventListener) {
+ aelements[i].addEventListener("click", new Function("e",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "if (e.preventDefault) e.preventDefault();"), true);
+ } else if (aelements[i].attachEvent) {
+ aelements[i].attachEvent("onclick", new Function("",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "event.returnValue = false;"));
+ }
+ }
+ }
+ }
+}
+
+function externalLinks() {
+ if (!document.getElementsByTagName) return;
+ var anchors = document.getElementsByTagName('a');
+ for (var i=0; i<anchors.length; i++) {
+ var anchor = anchors[i];
+ if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
+ anchor.target = '_blank';
+ addClass(anchor,'external');
+ }
+ }
+}
+
+function permaLink() {
+ document.getElementById('plink').href = window.location.pathname + '#slide' + snum;
+}
+
+function createControls() {
+ var controlsDiv = document.getElementById("controls");
+ if (!controlsDiv) return;
+ var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
+ var hideDiv, hideList = '';
+ if (controlVis == 'hidden') {
+ hideDiv = hider;
+ } else {
+ hideList = hider;
+ }
+ if(isOp) {
+ var str = '';
+ }else {
+ var str = '<a accesskey="t" id="sheet" title="toggle CSS" href="javascript:toggle();">&plusmn;<\/a>';
+ }
+ if(isIE) {
+ var tmp = "move around&xA0;until the color&xA0;change to red!";
+ }else if(isS2) {
+ var tmp = "move around\r\nuntil the color\r\nchange to red!";
+ }else {
+ var tmp = "move around until color change to red!";
+ }
+ if(isIE) {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] for keyboard help!"><ul>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst" style="vertical-align: middle; width: 160px;"><select style="cursor: auto; width: 160px; height: auto;" id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del" style="vertical-align: middle; width: 52px;"><select style="cursor: auto; width: 52px; height: auto;" id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul><\/div><\/form>';
+ }else {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] or double click this area for keyboard help!" ondblclick="createHelpReq();"><ul>' +
+ '<li id="exit"><a href="javascript:byby();" accesskey="q" title="exit Show"><\/a><\/li>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li class="vr"><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst"><a id="list" style="cursor:wait;" title="' + tmp + '"><\/a><select id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="fadeLinks" class="vr"><\/li>' +
+ '<li id="fade"><a class="isoff" href="javascript:switchFade();" accesskey="f" title="Transions"><\/a><\/li>' +
+ '<li id="audioLinks" class="vr"><\/li>' +
+ '<li id="audio"><a class="isoff" href="javascript:toggleSounds();" accesskey="s" title="Sounds" ><\/a><\/li>' +
+ '<li id="vol"><a id="volume" style="cursor:wait;" title="' + tmp + '"><\/a><select id="volumelist" title="select Volume" onchange="setVolume();"><option value="100">100<\/option><option value="90">90<\/option><option value="80">80<\/option><option value="70">70<\/option><option value="60">60<\/option><option value="50">50<\/option><option value="40">40<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="10">10<\/option><option value="0">0<\/option><\/select><\/li>' +
+ '<li id="autoLinks" class="vr"><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del"><a id="delay" style="cursor:wait;" title="' + tmp + '"><\/a><select id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul>' +
+ '<a href="http://s5.netzgesta.de" target="_blank" title="S5 Reloaded"><img style="position: absolute; right: 0; bottom: 0;" src="data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAYAAAASYli2AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAYpSURBVHjaYvz//z8DOYCRkZEZRAEx0Ij/f2HiAAHEgqYIpACkkB1J7g8Q/wLRIJ1QNSB5fiDmAOLvQKHPQPoHSB4ggFiQDGMCUnxALAPECkAsBLIdiD8A8SMgfghU8wlqkTgQK1ZVVWldv3792fr16y8D+c9AhgMEECPIy1DDRIDYAojdzMzMWNXV1UG2/v/y5Qvzw4cPP587d24/kH8Gar/uwoULQ+/cufNFXFyciZmZ+UVmZuZKoFmvAQII5kJOIDbi4uKK2Llz53EbG5vP6GGWn5+vMWnSpJtA5jcg5v327Rtnc3PzfSD79+rVq2WBNBtIHUAAwQzkAWKzBQsWnIUZFhISovXmzZsfkpKSDD09PY8kJCR+QtWCguGvrKwsz7Rp07Q4ODh+srCwgILiH0gSIIBgBrICsUBoaCgorBiANgqvXbtWDMg8AcQf9+7d+x0o9xbI/gJV/3fVqlUvmJiY/gIdcaWhoYETahEDQADBDPwNxO9h3gNpBiq6f/HiRbWjR4+yvnr16grQNbeh6kCWsxkYGIhClT8yNDQUgyYhBoAAYoIKfgXi06mpqUowQ+vr6x+uW7fu0suXL8+uWbOGS0BAwB7kC6jXvqmoqLDIyclxzZo1S4udnR2WtBgAAggWyyCXSgOxZUxMjGpWVtY7S0vLr8iRsnnzZl4/P7/DQCYoYtSA2DApKUkVGNNPDh06dBrIvwU06xNAAMEM5AIKqAOxCjQsmHl5eXWdnJx4N2zYcB4prd4CUpfwJRuAAGJCimULoGYpbm5uZ5DBnz9/5tq4caPWkSNHeJEc+g0aTFzfv3/nACabjzk5OW8FBQVloLmHASCAYJECUiTg7+//HJiQTzY2NsrfvXv3n7m5+T5YMgJGEkjDS2gY/pKRkeHt7Ow0Bsb0v9+/fz+HxTJAAMG8DHKFLTC9aRUXF79BT9Qgw4CWHAAy70FdYgjEDgkJCTpWVlYMQBfeAaaMPqBZbwECCGYgMzQGQSleCehS0X///jEDvf9lxYoVoOTyAIjfANX+BqrlBrL1gLFf09vb+0FaWvoHMBctA6USUKQABBAjrPiCliKg7AOKIG5ougLlju9Ipc1foDJWqMWGhYWFtsBg4RISEnrg5uY2BWQgQACxIBkGMkQKijmRfPwXWuI8ASp7DQ1vEP4DDO8PwBzzDJheT0CLPQaAAEJOh0o8zAzeihwMiv+gGZ0B4sz/bIwM797/YTh1/wfDIWj5qAfMmtFnzpz5ICIiwqKoqPgjKChoOtCs5wABhJyXpUCGzddgOIethJ71jEFi1nNwgQrKz8zv37//097eDop15qVLl0pAzWAACCAWhEMYOJFdduELA++b3wxsTIwMfzmYGH6xMDG8gYYpKAg+cnJy/gB6VwuYZFiA7E+wvAwQQCy46ozexwzG17+BYx6UVE4B8Vmo68CRFR0dDQo3UAHBBUwJ4lCLGAACCNnAv4zQxAkCxbIMZ0EuBIYb98EPDFo3voGTzjOogVzArGf969cvNmC2+wssHD7BDAQIIBakmHwPDPy3MAMNeBhgpfbbVEkGhqQbDJaXvjI8BPJB4jz79u37DcwlP+fPn38NuTwECCBkA1+8+8Nwtusxg+STHwwcP/8z8EuwMXA1KjBcBSlwEmRgBhrID/U2O7QMBIEHxsbGkrAwBAggmIGgNMT64AfDWyB+By0EQMVZlC0/wwsXQYa38hzgCGGBWv5ZU1OT4c+fP8yLFi1SA3r5Haw8BAggmIGg5KBpJ8BgeOYTg8S3f2DN/OxMDNwgw0AKnv0EJ+avsITu7u6+EZqzQEHwHFqaMwAEEAtShS/pLcTwrU+Z4QwsyQANOwIL06tfGV5BqwmQWoGKigoLYJnJvWPHjhstLS169vb2M0DqAAIIVh6CXHT/9ndIawEUITCXgUDrQwbGbe8YjkJdAzZQVVVV/t69e8LAgtUYaNgxWKQABBByacMHzfTK9gIMYkBZpj//GT4c+8gAKm1AsfseqPYPtHTXAtaEacBqlgHoyq+srKw3XV1dFwHlvwEEECNyYwmp3cIJjbUf0DbLP7RGEg+0bcMCjQxQzH8BWQgQQIzktr5wAYAAYmKgMgAIMAAp8Fx3osz1lgAAAABJRU5ErkJggg==" width="20" height="32" alt="S5" \/><\/a>' +
+ '<\/div><\/form>';
+ }
+ if (controlVis == 'hidden') {
+ var hidden = document.getElementById('navLinks');
+ } else {
+ var hidden = document.getElementById('jumplist');
+ }
+ addClass(hidden,'hideme');
+}
+
+function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
+ if (!s5mode && !isOp) return false;
+ var hScreen = screen.width; var vScreen = screen.height;
+ var vWindow = window.outerHeight; var hWindow = window.outerWidth;
+ if (isOp && s5mode && defaultView=='slideshow' && ((hScreen != hWindow) || (vScreen != vWindow))) {
+ toggle();
+ return false;
+ }
+ if (isOp && !s5mode && ((hScreen != hWindow) || (vScreen != vWindow))) return false;
+ if (isOp && !s5mode && (hScreen == hWindow) && (vScreen == vWindow)) toggle();
+ var vScale = 48; // both yield 16 (the usual browser default) at 1024x768
+ var hScale = 64; // perhaps should auto-calculate based on theme's declared value?
+ if (window.innerHeight) {
+ var vSize = window.innerHeight;
+ var hSize = window.innerWidth;
+ } else if (document.documentElement.clientHeight) {
+ var vSize = document.documentElement.clientHeight;
+ var hSize = document.documentElement.clientWidth;
+ } else if (document.body.clientHeight) {
+ var vSize = document.body.clientHeight;
+ var hSize = document.body.clientWidth;
+ } else {
+ var vSize = 700; // assuming 1024x768, minus chrome and such equals 8:5
+ var hSize = 1024; // these do not account for kiosk mode or Opera Show
+ }
+ var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
+ extendImgSizes(newSize); // scalable images extension
+ extendCanSizes(newSize); // scalable canvas extension
+ extendObjSizes(newSize); // scalable object extension
+ fontSize(newSize,"px");
+ if(!isS2 || firstTime==0) {
+ generateCanvas(); // dynamic canvas extension
+ }
+ if (isGe) { // hack to counter incremental reflow bugs
+ var obj = document.getElementsByTagName('body')[0];
+ obj.style.visibility = 'hidden';
+ obj.style.display = 'none';
+ obj.style.display = 'block';
+ obj.style.visibility = 'visible';
+ changeOpac(100,'slide' + snum);
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("fixReflow()",10);
+ }else {
+ setListPos(); // invisible select extension
+ }
+}
+
+function fixReflow() {
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("finishReflow()",10);
+}
+function finishReflow() {
+ setListPos(); // invisible select extension
+}
+
+function fontSize(val,fmt) {
+ var value = val + fmt;
+ if (!(s5ss = document.getElementById('s5ss'))) {
+ if (!document.createStyleSheet) {
+ document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
+ s5ss.setAttribute('media','screen, projection');
+ s5ss.setAttribute('id','s5ss');
+ } else {
+ document.createStyleSheet();
+ document.s5ss = document.styleSheets[document.styleSheets.length - 1];
+ }
+ }
+ if (!(document.s5ss && document.s5ss.addRule)) {
+ while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
+ s5ss.appendChild(document.createTextNode('html {font-size: ' + value + ' !important;}'));
+ } else {
+ document.s5ss.addRule('html','font-size: ' + value + ' !important;');
+ }
+}
+
+function windowChange() {
+ fontScale();
+}
+
+function notOperaFix() {
+ slideCSS = document.getElementById('slideProj').href;
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ slides.setAttribute('media','screen');
+ outline.disabled = true;
+ if (isGe) {
+ slides.setAttribute('href','null'); // Gecko fix
+ slides.setAttribute('href',slideCSS); // Gecko fix
+ }
+ if ((isIE && notIE7) && document.styleSheets && document.styleSheets[0]) {
+ document.styleSheets[0].addRule('img', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('div', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('.slide', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ }
+}
+
+function getIncrementals(obj) {
+ var incrementals = new Array();
+ if (!obj)
+ return incrementals;
+ var children = obj.childNodes;
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ if (hasClass(child, 'incremental')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'incremental');
+ for (var j = 0; j < child.childNodes.length; j++) {
+ if (child.childNodes[j].nodeType == 1) {
+ addClass(child.childNodes[j], 'incremental');
+ }
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ removeClass(child,'incremental');
+ }
+ }
+ if (hasClass(child, 'show-first')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'show-first');
+ if (child.childNodes[isGe].nodeType == 1) {
+ removeClass(child.childNodes[isGe], 'incremental');
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ }
+ }
+ incrementals = incrementals.concat(getIncrementals(child));
+ }
+ return incrementals;
+}
+
+function createIncrementals() {
+ var incrementals = new Array();
+ for (var i = 0; i < smax; i++) {
+ incrementals[i] = getIncrementals(document.getElementById('slide'+i));
+ }
+ return incrementals;
+}
+
+function trap(e) {
+ if (!e) {
+ e = event;
+ e.which = e.keyCode;
+ }
+ try {
+ modifierKey = e.ctrlKey || e.altKey || e.metaKey;
+ }
+ catch(e) {
+ modifierKey = false;
+ }
+ return modifierKey || e.which == 0;
+}
+
+// notes extension
+function noteLabel() { // Gives notes id's to match parent slides
+ var notes = GetElementsWithClassName('div','notes');
+ for (var i = 0; i < notes.length; i++) {
+ var note = notes[i];
+ var id = 'note' + note.parentNode.id.substring(5);
+ note.setAttribute('id',id);
+ }
+ resetElapsedSlide();
+ resetRemainingTime();
+ window.setInterval('updateElaspedTime()', 1000);
+}
+
+function createNotesWindow() { // creates a window for our notes
+ if (!s5NotesWindow || s5NotesWindow.closed) { // Create the window if it doesn't exist
+ s5NotesWindowLoaded = false;
+ // Note: Safari has a tendency to ignore window options preferring to default to the settings of the parent window, grr.
+ s5NotesWindow = window.open(s5Path+'ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0');
+ }
+ if (s5NotesWindowLoaded) { // Load the current note if the Note HTML has loaded
+ loadNote();
+ } else { // Keep trying...
+ window.setTimeout('createNotesWindow()', 50);
+ }
+}
+
+function loadNote() {
+// Loads a note into the note window
+ var notes = nextNotes = '<em class="disclaimer">There are no notes for this slide.</em>';
+ if (document.getElementById('note' + snum)) {
+ notes = document.getElementById('note' + snum).innerHTML;
+ }
+ if (document.getElementById('note' + (snum + 1))) {
+ nextNotes = document.getElementById('note' + (snum + 1)).innerHTML;
+ }
+
+ var jl = document.getElementById('jumplist');
+ var slideTitle = jl.options[jl.selectedIndex].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex) ? ' (' + jl.selectedIndex + '/' + (smax - 1) + ')' : '');
+ if (incrementals[snum].length > 0) {
+ slideTitle += ' <small>[' + incpos + '/' + incrementals[snum].length + ']</small>';
+ }
+ if (jl.selectedIndex < smax - 1) {
+ var nextTitle = jl.options[jl.selectedIndex + 1].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex + 1) ? ' (' + (jl.selectedIndex + 1) + '/' + (smax - 1) + ')' : '');
+ } else {
+ var nextTitle = '[end of slide show]';
+ }
+
+ if (s5NotesWindow && !s5NotesWindow.closed && s5NotesWindow.document) {
+ s5NotesWindow.document.getElementById('slide').innerHTML = slideTitle;
+ s5NotesWindow.document.getElementById('notes').innerHTML = notes;
+ s5NotesWindow.document.getElementById('next').innerHTML = nextTitle;
+ s5NotesWindow.document.getElementById('nextnotes').innerHTML = nextNotes;
+ }
+ resetElapsedSlide();
+}
+
+function minimizeTimer(id) {
+ var obj = s5NotesWindow.document.getElementById(id);
+ if (hasClass(obj,'collapsed')) {
+ removeClass(obj,'collapsed');
+ } else {
+ addClass(obj,'collapsed');
+ }
+}
+
+function resetElapsedTime() {
+ presentationStart = new Date();
+ slideStart = new Date();
+ updateElaspedTime();
+}
+
+function resetElapsedSlide() {
+ if (snum != previousSlide) {
+ slideStart = new Date();
+ previousSlide = snum;
+ updateElaspedTime();
+ }
+}
+
+function updateElaspedTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var now = new Date();
+ var ep = s5NotesWindow.document.getElementById('elapsed-presentation');
+ var es = s5NotesWindow.document.getElementById('elapsed-slide');
+ ep.innerHTML = formatTime(now.valueOf() - presentationStart.valueOf());
+ es.innerHTML = formatTime(now.valueOf() - slideStart.valueOf());
+}
+
+function resetRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var startField = s5NotesWindow.document.getElementById('startFrom');
+ startFrom = readTime(startField.value);
+ countdown.remaining = startFrom * 60000; // convert to msecs
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var timeLeft = formatTime(countdown.remaining);
+ tl.innerHTML = timeLeft;
+}
+
+function updateRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var now = new Date();
+ if (countdown.state == 'run') {
+ countdown.remaining = countdown.end - now;
+ }
+ tl.style.color = '';
+ tl.style.backgroundColor = '';
+ if (countdown.remaining >= 0) {
+ var timeLeft = formatTime(countdown.remaining);
+ removeClass(tl,'overtime');
+ if (countdown.remaining < 300000) {
+ tl.style.color = 'rgb(' + (255-Math.round(countdown.remaining/2000)) + ',0,0)';
+ tl.style.backgroundColor = 'rgb(255,255,' + (Math.round(countdown.remaining/2000)) + ')';
+ }
+ } else {
+ var timeLeft = '-' + formatTime(-countdown.remaining);
+ addClass(tl,'overtime');
+ }
+ tl.innerHTML = timeLeft;
+}
+
+function toggleRemainingTime() {
+ if (countdown.state == 'pause') countdown.state = 'run'; else countdown.state = 'pause';
+ if (countdown.state == 'pause') {
+ window.clearInterval(countdown.timer);
+ }
+ if (countdown.state == 'run') {
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ countdown.timer = window.setInterval('updateRemainingTime()', 1000);
+ }
+}
+
+function alterRemainingTime(amt) {
+ var change = amt * 60000; // convert to msecs
+ countdown.end += change;
+ countdown.remaining += change;
+ updateRemainingTime();
+}
+
+function formatTime(msecs) {
+ var time = new Date(msecs);
+
+ var hrs = time.getUTCHours() + ((time.getUTCDate() -1) * 24); // I doubt anyone will spend more than 24 hours on a presentation or single slide but just in case...
+ hrs = (hrs < 10) ? '0'+hrs : hrs;
+ if (hrs == 'NaN' || isNaN(hrs)) hrs = '--';
+
+ var min = time.getUTCMinutes();
+ min = (min < 10) ? '0'+min : min;
+ if (min == 'NaN' || isNaN(min)) min = '--';
+
+ var sec = time.getUTCSeconds();
+ sec = (sec < 10) ? '0'+sec : sec;
+ if (sec == 'NaN' || isNaN(sec)) sec = '--';
+
+ return hrs + ':' + min + ':' + sec;
+}
+
+function readTime(val) {
+ var sregex = /:/;
+ var matches = sregex.exec(val);
+ if (matches == null) {
+ return val;
+ } else {
+ var times = val.split(':');
+ var hours = parseInt(times[0]);
+ var mins = parseInt(times[1]);
+ var total = (hours * 60) + mins;
+ return total;
+ }
+}
+// notes extension
+
+// startup process
+function createSlideShow() {
+ defaultCheck();
+ if(!isIE) createDetector(); // (degrade IE) scalable images extension
+ if(opac!=0 || isIE) { // &&!isIE (degrade IE)
+ tranSitions = false;
+ fadeModus = false;
+ }
+ if(tranSitions && document.getElementById && document.createElement){
+ createProgress();
+ var nop=document.getElementById('StartupControl');
+ nop.onload = dumpProgress;
+ }else {
+ startup();
+ showAll();
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+ }
+}
+
+function defaultCheck() {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'defaultView') {
+ defaultView = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'controlVis') {
+ controlVis = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'tranSitions') {
+ tranSitions = (allMetas[i].content == "true") ? true : false;
+ fadeModus = (tranSitions == true) ? true : false;
+ }
+ if (allMetas[i].name == 'fadeDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ fadeDuration = Math.max(200,Math.min(tmp,2000));
+ }
+ if (allMetas[i].name == 'incrDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ incrDuration = Math.max(50,Math.min(tmp,500));
+ }
+ if (allMetas[i].name == 'autoMatic') {
+ autoMatic = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playLoop') {
+ playLoop = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playDelay') {
+ var tmp = parseInt(allMetas[i].content);
+ playDelay = Math.max(5,Math.min(tmp,90))*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ }
+ if (allMetas[i].name == 'audioSupport') {
+ audioSupport = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'audioVolume') {
+ var tmp = parseInt(allMetas[i].content);
+ audioVolume = Math.max(0,Math.min(tmp,100));
+ }
+ if (allMetas[i].name == 'audioError') {
+ audioError = (allMetas[i].content == "true") ? true : false;
+ }
+ }
+}
+
+function createProgress() {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "StartupProgress";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=100)";
+ }else {
+ pg.style.opacity = 1.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/progress.gif)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+
+ var im = document.createElement('img');
+ im.id = "StartupControl";
+ im.src = s5Path+"ui/graphic_support/blank.gif?" + new Date().valueOf();
+ document.getElementsByTagName("body")[0].appendChild(im);
+}
+
+function startup() {
+ createControls(); // hallvord
+ slideLabel();
+ incrementals = createIncrementals();
+ noteLabel(); // [SI:060104] must follow slideLabel()
+ loadNote();
+ fixLinks();
+ externalLinks();
+ fontScale();
+ if (!isOp) {
+ if(isIE) {
+ document.getElementById('lst').style.backgroundImage = 'none';
+ document.getElementById('del').style.backgroundImage = 'none';
+ }else {
+ document.getElementById('audio').style.backgroundImage = 'none';
+ }
+ notOperaFix();
+ }else if(isOp) {
+ var obj = document.getElementById('exit');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('exit').style.opacity = 0.5;
+ obj = document.getElementById('toggle');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('toggle').style.opacity = 0.5;
+ document.getElementById('jumplist').style.visibility = 'hidden';
+ document.getElementById('list').style.visibility = 'hidden';
+ document.getElementById('lst').style.opacity = 0.5;
+ obj = document.getElementById('audio');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('audio').style.opacity = 0.5;
+ document.getElementById('volumelist').style.visibility = 'hidden';
+ document.getElementById('volume').style.visibility = 'hidden';
+ document.getElementById('vol').style.opacity = 0.5;
+ document.getElementById('delaylist').style.visibility = 'hidden';
+ document.getElementById('delay').style.visibility = 'hidden';
+ document.getElementById('del').style.opacity = 0.5;
+ }
+ slideJump();
+ if (defaultView == 'outline') toggle();
+ document.onkeyup = keys;
+ document.onkeypress = trap;
+ document.onclick = clicker;
+}
+
+function preloadImgages() {
+ var temp = '';
+ var objects = document.getElementsByTagName('img');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].src != '') {
+ temp = new Image();
+ temp.src = objects[i].src;
+ }
+ }
+}
+
+function showAll() {
+ var obj1 = GetElementsWithClassName('div','presentation')[0];
+ if(!obj1) var obj1 = GetElementsWithClassName('ol','presentation')[0];
+ var obj2 = GetElementsWithClassName('div','layout')[0];
+ if(!obj1){}else {obj1.style.display = 'block'};
+ if(!obj2){}else {obj2.style.display = 'block'};
+}
+
+function dumpProgress() {
+ document.body.removeChild(document.getElementById('StartupControl'));
+ startup();
+ preloadImgages();
+ showAll();
+ createSoundManagerScript();
+ shiftOpacity('StartupProgress',1000);
+ window.setTimeout("removeProgress()",1000);
+}
+
+function removeProgress() {
+ document.body.removeChild(document.getElementById('StartupProgress'));
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+}
+function panelSetup() {
+ if(playPause) {
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ if(playLoop) {
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ if(audioSupport && !isIE && !isOp) {
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ }
+ if(fadeModus && !isIE) {
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ if(autoMatic) {
+ var obj = document.getElementById('auto'); changeClass(obj,'ison');
+ startPlay();
+ }
+ if(audioVolume && !isIE && !isOp) {
+ var idx = 0;
+ if(audioVolume >= 95 && audioVolume <= 100) {idx = 0;}
+ else if(audioVolume >= 85 && audioVolume < 95) {idx = 1;}
+ else if(audioVolume >= 75 && audioVolume < 85) {idx = 2;}
+ else if(audioVolume >= 65 && audioVolume < 75) {idx = 3;}
+ else if(audioVolume >= 55 && audioVolume < 65) {idx = 4;}
+ else if(audioVolume >= 45 && audioVolume < 55) {idx = 5;}
+ else if(audioVolume >= 35 && audioVolume < 45) {idx = 6;}
+ else if(audioVolume >= 25 && audioVolume < 35) {idx = 7;}
+ else if(audioVolume >= 15 && audioVolume < 25) {idx = 8;}
+ else if(audioVolume >= 5 && audioVolume < 15) {idx = 9;}
+ else {idx = 10;}
+ document.getElementById('volumelist').selectedIndex = idx;
+ }
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+}
+// startup process
+
+// shutdown process
+function byby() {
+ stopPlay();
+ if(tranSitions && fadeModus && s5mode && !isOp) {
+ fadeoutSound(curSoundID,true); // audio support
+ var pg = document.createElement('div');
+ pg.id = "GoodBy";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=0)";
+ }else {
+ pg.style.opacity = 0.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/finish.gif)";
+ document.getElementsByTagName("body")[0].appendChild(pg);
+ shiftOpacity('GoodBy',1000);
+ window.setTimeout("history.back()",1000);
+ }else {
+ stopSound(curSoundID);
+ history.back();
+ }
+}
+// shutdown process
+
+// scalable images extension
+function createDetector() {
+ var em = document.createElement('div');
+ em.id='EMSizeControl'; em.style.position="absolute"; em.style.left="-999px";
+ em.style.width="1em"; em.style.height="1em"; em.style.opacity=0.0;
+ document.getElementsByTagName("body")[0].appendChild(em);
+ var nop=document.getElementById('EMSizeControl');
+ if(!nop||findPosX(nop)!=-999) {}else {
+ opac=document.getElementById('EMSizeControl').style.opacity;
+ empx=document.getElementById('EMSizeControl').offsetHeight;
+ document.body.removeChild(document.getElementById('EMSizeControl'));
+ var objects = document.getElementsByTagName('img');
+ var j = 0; var i = 0; var k = 0; var d; var obj;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ images[j] = objects[i];
+ ++j;
+ }
+ }
+ var objects = document.getElementsByTagName('canvas'); j = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ canvas[objects[i].id] = objects[i];
+ if(j==0) {
+ if(objects[i].getContext) {
+ canvasSupport = true;
+ }
+ ++j;
+ }
+ }
+ }
+ if(canvasSupport!=true) {
+ for (d in canvas) {
+ try {
+ canvas[d].setAttribute("width",1);
+ canvas[d].setAttribute("height",1);
+ } catch (e) {
+ }
+ }
+ }
+ var objects = document.getElementsByTagName('table');
+ j = 0; k = 0; l = 0; var w; var h; var tmp; var cnt;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^piechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ piecharts[j] = objects[i];
+ em = piecharts[j].getAttribute("summary");
+ if(em != "") em = "," + em;
+ piecharts[j].setAttribute("summary", w + "," + h + em);
+ ++j;
+ }
+ }
+ }
+ if(objects[i].className.match(/^barchart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ barcharts[k] = objects[i];
+ em = barcharts[k].getAttribute("summary");
+ if(em != "") em = "," + em;
+ barcharts[k].setAttribute("summary", w + "," + h + em);
+ ++k;
+ }
+ }
+ }
+ if(objects[i].className.match(/^linechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ linecharts[l] = objects[i];
+ em = linecharts[l].getAttribute("summary");
+ if(em != "") em = "," + em;
+ linecharts[l].setAttribute("summary", w + "," + h + em);
+ ++l;
+ }
+ }
+ }
+ }
+ objects = document.getElementsByTagName('object'); j = 0; i = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ medias[j] = objects[i]; ++j;
+ if(!isIE) {
+ if(objects[i].getAttributeNode("classid")) objects[i].removeAttributeNode(objects[i].getAttributeNode("classid"));
+ if(objects[i].getAttributeNode("codebase")) objects[i].removeAttributeNode(objects[i].getAttributeNode("codebase"));
+ }
+ }
+ }
+ }
+}
+function extendImgSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < images.length; i++) {
+ w=images[i].getAttribute("width",0);
+ h=images[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ images[i].style.width=Math.floor(w*q)+"px";
+ images[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+
+function extendCanSizes(f) {
+ if(empx>0 && canvasSupport) {
+ var q = (f/empx); var w = 0; var h = 0; var tmp = ""; var cnt; var obj;
+ for(var i=0; i < piecharts.length; i++) {
+ if(piecharts[i].getAttribute("summary")) {
+ tmp = piecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = piecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < barcharts.length; i++) {
+ if(barcharts[i].getAttribute("summary")) {
+ tmp = barcharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = barcharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < linecharts.length; i++) {
+ if(linecharts[i].getAttribute("summary")) {
+ tmp = linecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = linecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ }
+}
+function extendObjSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < medias.length; i++) {
+ w=medias[i].getAttribute("width",0);
+ h=medias[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ medias[i].style.width=Math.floor(w*q)+"px";
+ medias[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+function findPosX(obj) {
+ var posLeft = 0;
+ while (obj.offsetParent) {
+ posLeft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ return posLeft;
+}
+function findPosY(obj) {
+ var posTop = 0;
+ while (obj.offsetParent) {
+ posTop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ return posTop;
+}
+// scalable images extension
+
+// canvas chart extension
+function deg2rad(degrees) {
+ return Math.PI *degrees/180;
+}
+function rad2deg(radians) {
+ return 180.0 *radians/Math.PI;
+}
+function circle_point_x(radians, diameter) {
+ var x = Math.cos(radians)*(diameter/2);
+ return x;
+}
+function circle_point_y(radians, diameter) {
+ var y = Math.sin(radians)*(diameter/2);
+ return y;
+}
+function roundTo(val,dig) {
+ var num = val;
+ if (val > 8191 && val < 10485) {
+ val = val-5000;
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ num = num+5000;
+ } else {
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ }
+ return num;
+}
+function searchColor(value) {
+ for (var dat in colorNames) {
+ if(dat==value) return colorNames[dat];
+ }
+ return false;
+}
+function scanColor(value) {
+ if(value.match(/^#[0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var val1 = value.substr(1,1).toLowerCase();
+ var val2 = value.substr(2,1).toLowerCase();
+ var val3 = value.substr(3,1).toLowerCase();
+ value = '#' + val1 + val1 + val2 + val2 + val3 + val3;
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var tmp = searchColor(value.toLowerCase());
+ if(!tmp) {}else{value = tmp;}
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ value = '#000000';
+ }
+ return value.toLowerCase();
+}
+function hex2rgb(val,trans) {
+ if(val.length==7) {
+ var tp1 = Math.max(0,Math.min(parseInt(val.substr(1,2),16),255));
+ var tp2 = Math.max(0,Math.min(parseInt(val.substr(3,2),16),255));
+ var tp3 = Math.max(0,Math.min(parseInt(val.substr(5,2),16),255));
+ return 'rgba(' + tp1 + ',' + tp2 + ',' + tp3 + ',' + trans + ')';
+ }
+}
+function trim(str) {
+ return (str.replace(/\s+$/,"").replace(/^\s+/,""));
+}
+function roundedRect(ctx,x,y,width,height,radius){
+ ctx.beginPath();
+ ctx.moveTo(x,y+radius);
+ ctx.lineTo(x,y+height-radius);
+ ctx.quadraticCurveTo(x,y+height,x+radius,y+height);
+ ctx.lineTo(x+width-radius,y+height);
+ ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius);
+ ctx.lineTo(x+width,y+radius);
+ ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
+ ctx.lineTo(x+radius,y);
+ ctx.quadraticCurveTo(x,y,x,y+radius);
+ ctx.closePath();
+}
+function drawString(ctx, text, fc, tx, ty) {
+ var xp = 0; var c = "";
+ ctx.beginPath();
+ for (var i = 0; i < text.length; i++) {
+ c = text[i];
+ ctx.drawImage(font, signs[c].sx, signs[c].sy, signs[c].sw, signs[c].sh, tx+xp, ty, signs[c].sw*fc, signs[c].sh*fc);
+ xp += (signs[c].sw*fc);
+ }
+ ctx.closePath();
+}
+function strokeString(ctx, txt, col, fh, tx, ty) {
+ var fw = fh*0.666666; var lw = fh*0.125;
+ var ls = lw/2; var cr = lw; var xp = 0;
+ ctx.lineCap = "round"; ctx.lineJoin = "round"
+ ctx.lineWidth = lw; ctx.strokeStyle = col;
+ for (var i = 0; i < txt.length; i++) {
+ strokeSymbol(ctx, txt[i], ls, tx+xp, ty, fw, fh);
+ xp += (txt[i]!="."?fw+cr:(fw/2)+cr);
+ }
+}
+function strokeSymbol(ctx, symbol, fc, cx, cy, cw, ch) {
+ ctx.beginPath();
+ switch (symbol) {
+ case "0":
+ ctx.moveTo(cx+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+(cw/2),(cw/2)-fc,deg2rad(180),0, false);
+ ctx.arc(cx+(cw/2),(cy+ch)-(cw/2),(cw/2)-fc,0,deg2rad(180), false);
+ ctx.closePath();
+ break;
+ case "1":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.moveTo(cx+(cw*0.666666),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.666666),cy+fc);
+ ctx.lineTo(cx+(cw*0.25),cy+(ch*0.25));
+ break;
+ case "2":
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.8));
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+fc,cy+ch-fc);
+ ctx.arc(cx+(cw/2),cy+(cw*0.425),(cw*0.425)-fc,deg2rad(45),deg2rad(-180), true);
+ break;
+ case "3":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-90),deg2rad(180), false);
+ break;
+ case "4":
+ ctx.moveTo(cx+(cw*0.75),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.5),cy+ch-fc);
+ break;
+ case "5":
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-80),deg2rad(180), false);
+ break;
+ case "6":
+ ctx.moveTo(cx+fc,cy+ch-(cw*0.5)-fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-180),deg2rad(180), false);
+ ctx.bezierCurveTo(cx+fc,cy+fc,cx+fc,cy+fc,cx+(cw*0.9)-fc,cy+fc);
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ break;
+ case "7":
+ ctx.moveTo(cx+(cw*0.5),cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.25)-fc);
+ break;
+ case "8":
+ ctx.moveTo(cx+(cw*0.92)-fc,cy+(cw*0.59));
+ ctx.arc(cx+(cw/2),cy+(cw*0.45),(cw*0.45)-fc,deg2rad(25),deg2rad(-205), true);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-135),deg2rad(-45), true);
+ ctx.closePath();
+ ctx.moveTo(cx+(cw*0.79),cy+(ch*0.47));
+ ctx.lineTo(cx+(cw*0.21),cy+(ch*0.47));
+ break;
+ case "9":
+ ctx.moveTo(cx+cw-fc,cy+(cw*0.5));
+ ctx.arc(cx+(cw/2),cy+(cw*0.5),(cw*0.5)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.bezierCurveTo(cx+cw-fc,cy+ch-fc,cx+cw-fc,cy+ch-fc,cx+(cw*0.1)+fc,cy+ch-fc);
+ break;
+ case "%":
+ ctx.moveTo(cx+fc,cy+(ch*0.75));
+ ctx.lineTo(cx+cw-fc,cy+(ch*0.25));
+ ctx.moveTo(cx+(cw*0.505),cy+(cw*0.3));
+ ctx.arc(cx+(cw*0.3),cy+(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.moveTo(cx+(cw*0.905),cy+ch-(cw*0.3));
+ ctx.arc(cx+(cw*0.7),cy+ch-(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ break;
+ case ".":
+ ctx.moveTo(cx+(cw*0.25),cy+ch-fc-fc);
+ ctx.arc(cx+(cw*0.25),cy+ch-fc-fc,fc,deg2rad(0),deg2rad(360), false);
+ ctx.closePath();
+ break;
+ default:
+ break;
+ }
+ ctx.stroke();
+}
+function drawBar(ctx,x,y,width,height,color,value,textdiv){
+ var rw = width/2; var rh = rw/2;
+ height = Math.max(height,rw);
+ var dh = Math.max(height-(2*rh),0.1); var S2L;
+ var xx = rw/8; var yy = rh/4;
+ var yo = rh/2; y = y - yy;
+ if(canvas_noshadow <= 0 && canvas_noshade <= 0) {
+ ctx.save();
+ S2L = ctx.createRadialGradient(x+rw+rh,y+height-rw+yy+rh,0,x+rw,y+height-rw+yy,rw);
+ S2L.addColorStop(0, 'rgba(0,0,0,0.5)');
+ S2L.addColorStop(0.7, 'rgba(0,0,0,0.25)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = S2L;
+ ctx.scale(1,0.5);
+ ctx.translate(xx,y+height+yy);
+ if(isOp){
+ ctx.fillRect(x,y+yy+height-width,width,width);
+ }else {
+ ctx.arc(x+rw,y+yy+height-width,width,0,deg2rad(360), false);
+ ctx.fill();
+ }
+ ctx.restore();
+ }else if(canvas_noshadow <= 0 && canvas_noshade >= 1) {
+ ctx.fillStyle = 'rgba(0,0,0,0.2)';
+ ctx.fillRect(x+yo,y+rh+yo+yo,width,dh);
+ }
+
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x,y+(height/2),x+width,y+(height/2));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.75)');
+ S2L.addColorStop(0.2, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.3, 'rgba(0,0,0,0)');
+ S2L.addColorStop(0.5, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.35)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.1)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.strokeStyle = S2L;
+ ctx.stroke();
+ }else {
+ ctx.fillStyle = color;
+ ctx.fillRect(x,y+rh+yo,width,dh);
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var bw = width; var bh = bw/4;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ var c; var w;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,x+(width/2)-(bw/2),y,bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext <= 0) {
+ strokeString(ctx, value + "%","rgba(48,48,48,1)", th, x+(width/2)-(w/2), y+((bh-th)/2));
+ }else {
+ drawString(ctx, value + "%", tf, x+(width/2)-(w/2), y+((bh-th)/2.2));
+ }
+ }else {
+ var bh = bw/3; var th = roundTo(bh*0.75,0);
+ roundedRect(ctx,x,y,bw,bh,bh/4);
+ ctx.fill();
+ var obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = x + "px";
+ obj.style.top = y+((bh-th)/2.2) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+
+ }
+}
+function drawLine(ctx,x,y,width,height,dist,array,factor,color,fill){
+ if(fill <= 0){
+ var style = hex2rgb(color,0.5);
+ ctx.lineJoin = "miter";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height);
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.lineTo(x+width,y+height);
+ ctx.lineTo(x,y+height);
+ ctx.closePath();
+ ctx.fillStyle = style;
+ ctx.fill();
+ }
+ ctx.lineJoin = "round";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height-(array[0]*factor));
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.strokeStyle = color;
+ ctx.stroke();
+}
+function setDataURL(cid) {
+ if(cid.toDataURL) {
+ var obj = document.getElementById(cid.id + "_link");
+ if(obj) {
+ obj.setAttribute("title", "To Data URL");
+ obj.setAttribute("target", "_blank");
+ obj.setAttribute("href", cid.toDataURL());
+ }
+ }
+}
+function get_input(dataobj,canvasobj,linechart) {
+ var table = document.getElementById(dataobj);
+ var canvas = document.getElementById(canvasobj);
+ var row; var clm; var cnt = 0; var val = 0; var nme = ""; var col = "";
+ if(canvas.getContext) {
+ canvas_width = parseInt(canvas.style.width);
+ canvas_height = parseInt(canvas.style.height);
+ if(canvas_width >= 16 && canvas_height >= 16) {
+ var tmp = table.getAttribute("summary");
+ canvas_noshade = 0; canvas_noshadow = 0;
+ canvas_notext = 0; canvas_imgtext = 0;
+ canvas_htmltext = 0; canvas_nofill = 0;
+ if(tmp.search(/noshadow/) != -1) canvas_noshadow = 1;
+ if(tmp.search(/noshade/) != -1) canvas_noshade = 1;
+ if(tmp.search(/nofill/) != -1) canvas_nofill = 1;
+ if(tmp.search(/notext/) != -1) canvas_notext = 1;
+ if(tmp.search(/htmltext/) != -1) canvas_htmltext = 1;
+ if(tmp.search(/imgtext/) != -1) canvas_imgtext = 1;
+ if(table.getAttribute("bgcolor")) {
+ canvas_bgcolor = scanColor(table.getAttribute("bgcolor"));
+ }
+ ChartData = new Array(); colorSlice = new Array();
+ if(table.getElementsByTagName("tr")[0].getElementsByTagName("th")[0]) cnt = 1;
+ for(var r = cnt; r < table.getElementsByTagName("tr").length; r++) {
+ row = table.getElementsByTagName("tr")[r];
+ clm = row.getElementsByTagName("td").length;
+ if(row.getElementsByTagName("td")[0].getAttribute("bgcolor")) {
+ col = scanColor(row.getElementsByTagName("td")[0].getAttribute("bgcolor")); val = 0;
+ nme = trim(row.getElementsByTagName("td")[1].innerHTML.replace(/<[^>]+>/g,""));
+ if(!linechart) {
+ if(clm > 3) {
+ for(var z = 2; z < clm; z++) {
+ val += parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ }else {
+ val = parseFloat(row.getElementsByTagName("td")[2].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ if(!isNaN(val) && val > 0 && nme != '') {
+ colorSlice[r-cnt] = col; ChartData[nme] = Math.abs(val);
+ }else {
+ break;
+ }
+ }else {
+ val = 0; i = 0;
+ if(clm > 3 && nme != '') {
+ ChartData[r-cnt] = new Array();
+ colorSlice[r-cnt] = col;
+ for(var z = 2; z < clm; z++) {
+ val = Math.abs(parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,"")));
+ if(!isNaN(val) && val >= 0) {
+ ChartData[r-cnt][i] = val; i++;
+ }else {
+ ChartData[r-cnt][i] = 0; i++;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }
+ }
+}
+function setPieChart(canvasobj,textobj) {
+ var cd = (Math.min(canvas_width,canvas_height)/110)*100;
+ var cp = cd*0.1; var cr = cd/2;
+ var sr = cr*0.93; var cw = cd+cp; var ch = cw;
+ var cx = (cd/2)+(cp/2); var cy = cx; var ct = 0;
+ for (var data in ChartData) {
+ ct += ChartData[data];
+ }
+ var poc = ct/100;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ }
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,cw,ch);
+ }else {
+ ctx.clearRect(0,0,cw,ch);
+ }
+ if(canvas_noshadow <= 0) {
+ if(!isOp) {
+ ctx.beginPath();
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),cr,cx+(cr*0.1),cy+(cr*0.1),sr*0.9);
+ B2B.addColorStop(0, 'rgba(0,0,0,0)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.arc(cx+(cr*0.1),cy+(cr*0.1),cr,0,deg2rad(360), false);
+ ctx.closePath();
+ ctx.fillStyle = B2B;
+ ctx.fill();
+ }else {
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),0,cx+(cr*0.1),cy+(cr*0.1),cr);
+ B2B.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(0.87, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = B2B;
+ ctx.fillRect(0,0,cw,ch);
+ }
+ }
+ var val = 0; var deg = 0; var idx = 0; var data;
+ for (data in ChartData) {
+ val = ChartData[data]; sdeg = deg;
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ ctx.beginPath();
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr,sdeg,edeg, false);
+ ctx.lineTo(cx,cy);
+ ctx.closePath();
+ ctx.fillStyle = colorSlice[(idx++)];
+ ctx.fill();
+ }
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ var W2T = ctx.createLinearGradient(cp*2,cp*2,cx,cy);
+ W2T.addColorStop(0, 'rgba(255,255,255,0.8)');
+ W2T.addColorStop(1, 'rgba(255,255,255,0)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.fillStyle = W2T;
+ ctx.fill();
+ ctx.beginPath();
+ var T2B = ctx.createLinearGradient(cx,cy,cw-(cp*2),ch-(cp*2));
+ T2B.addColorStop(0, 'rgba(0,0,0,0)');
+ T2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.fillStyle = T2B;
+ ctx.fill();
+ ctx.beginPath();
+ var B2T = ctx.createLinearGradient(cx,cy,cw-(cp*1.9),ch-(cp*1.9));
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.strokeStyle = B2T;
+ ctx.stroke();
+ ctx.beginPath();
+ var T2W = ctx.createLinearGradient(cx,cy,(cp*1.9),(cp*1.9));
+ T2W.addColorStop(0, 'rgba(255,255,255,0)');
+ T2W.addColorStop(1, 'rgba(255,255,255,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.strokeStyle = T2W;
+ ctx.stroke();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var mpos = 0; var per = 0; var gx = 0;
+ var gy = 0; var tx = 0; var ty = 0;
+ var obj = ""; var w = 0; var c = 0;
+ var bw = cr*0.45; var bh = cr*0.125;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext >= 1) {
+ bw = (cr*0.365);
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ for (data in ChartData) {
+ val = ChartData[data];
+ sdeg = deg; mpos = deg+(((val/2)/ct)*deg2rad(360));
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ per = roundTo(val/poc,2);
+ gx = circle_point_x(mpos, cd);
+ gy = circle_point_y(mpos, cd);
+ tx = parseFloat((cx+(2*Math.floor(cx + gx)))/3);
+ ty = (cy+(2*Math.floor(cy + gy)))/3;
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext >= 1) {
+ drawString(ctx, per + "%", tf, tx-(w/2), ty-(th/1.8));
+ }else {
+ strokeString(ctx, per + "%","rgba(48,48,48,1)", th, tx-(w/2), ty-(th/2));
+ }
+ }else {
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = (tx-(bw/2)) + "px";
+ obj.style.top = ty-(th/1.8) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+ }
+ }
+ }
+}
+function setBarChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9; var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05; var ph = canvas_height*0.05;
+ var cm = 0; var ct = 0;
+ for (var data in ChartData) {
+ cm = Math.max(cm,ChartData[data]);
+ ct += ChartData[data];
+ }
+ var hf = ih/cm; var bs = colorSlice.length;
+ var bw = iw/(bs*1.1); var poc = ct/100;
+ var th = roundTo((bw/3)*0.75,0);
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ var obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ var cc = ""; var bh = 0; var idx = 0; var t = 0; per = 0;
+ for (var data in ChartData) {
+ per = roundTo(ChartData[data]/poc,2);
+ bh = ChartData[data]*hf;
+ drawBar(ctx,pw+(t*(bw*1.1)),ph+ih-bh,bw,bh,colorSlice[(idx++)],per,textdiv);
+ t++;
+ }
+ }
+}
+function setLineChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9;
+ var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05;
+ var ph = canvas_height*0.05;
+ var cm = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ cm = Math.max(cm,ChartData[i][j]);
+ }
+ }
+ var hf = (ih*0.95)/cm; var bw = iw;
+ var dw = iw/(ChartData[0].length-1)
+ var dh = ih/(ChartData[0].length-1)
+ var ps = Math.min(pw,ph); lw = ps/4;
+ var B2T;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_noshadow <= 0) {
+ B2T = ctx.createLinearGradient(pw+ps,ph+ih+1,pw+ps+ps,ph+ih+1);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps,ph+ih);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.lineTo(pw+ps+ps,ph+ih);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+ps+ps,ph+ih,pw+ps+ps,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps+ps,ph+ih);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+ps+iw,ph+ih+ps);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.closePath();
+ ctx.fill();
+ var B2T = ctx.createLinearGradient(pw+iw+1,ph+ps,pw+iw+1,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.35)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps);
+ ctx.lineTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+iw,ph+ps+ps,pw+iw+ps,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.35)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+iw+ps,ph+ih+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = lw/2;
+ ctx.strokeStyle = "rgba(255,255,255,0.25)";
+ if(canvas_nofill <= 0) {
+ ctx.fillStyle = "rgba(240,240,240,0.8)";
+ ctx.strokeStyle = "rgba(255,255,255,1)";
+ ctx.fillRect(pw,ph,iw,ih);
+ }
+ for (var i = 0; i < ChartData[0].length-1; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph);
+ ctx.lineTo(pw+(i*dw),ph+ih);
+ ctx.stroke();
+ }
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw,ph+(i*dh));
+ ctx.lineTo(pw+iw,ph+(i*dh));
+ ctx.stroke();
+ }
+ ctx.lineWidth = lw;
+ var cc = ""; var bh = 0; var idx = 0; var t = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ t = Math.max(t,ChartData[i][j]);
+ }
+ bh = t*hf; cc = colorSlice[(idx++)];
+ drawLine(ctx,pw,ph+ih-bh,bw,bh,dw,ChartData[i],hf,cc,canvas_nofill);
+ }
+ ctx.beginPath();
+ ctx.moveTo(pw,ph);
+ ctx.lineTo(pw,ph+ih);
+ ctx.lineTo(pw+iw+(lw/2),ph+ih);
+ ctx.strokeStyle = "rgba(48,48,48,1)";
+ ctx.stroke();
+ ctx.lineWidth = lw/2;
+ B2T = ctx.createLinearGradient(pw,ph+ih,pw,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,1)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.strokeStyle = B2T;
+ for (var i = 0; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph+ih);
+ ctx.lineTo(pw+(i*dw),ph+ih+ps);
+ ctx.stroke();
+ }
+ B2T = ctx.createLinearGradient(pw-ps,ph,pw,ph);
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,1)');
+ ctx.strokeStyle = B2T;
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw-ps,ph+(i*dh));
+ ctx.lineTo(pw,ph+(i*dh));
+ ctx.stroke();
+ }
+ }
+}
+function generateCanvas() {
+ if(canvasSupport) {
+ var canvasID; var tdataID; var textID;
+ var tmp; var dat; var i; var j;
+ for(i=0; i < piecharts.length; i++) {
+ tmp = piecharts[i].id.split("_");
+ tdataID = piecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setPieChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < barcharts.length; i++) {
+ tmp = barcharts[i].id.split("_");
+ tdataID = barcharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setBarChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < linecharts.length; i++) {
+ tmp = linecharts[i].id.split("_");
+ tdataID = linecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID,true);
+ if(colorSlice.length > 0) {
+ if(ChartData.length == colorSlice.length) {
+ setLineChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ }
+}
+// canvas chart extension
+
+// invisible select extension
+function setListPos(opt) {
+ if(!isIE) { //(degrade IE)
+ var ref = document.getElementById('list');
+ var x = findPosX(ref); var y = findPosY(ref);
+ var obj = document.getElementById('jumplist');
+ obj.style.position = 'fixed'; obj.style.left = x + 'px'; obj.style.top = y + 'px';
+ var vol = document.getElementById('volumelist');
+ ref = document.getElementById('volume');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ vol.style.position = 'fixed'; vol.style.left = x + 'px'; vol.style.top = y + 'px';
+ var del = document.getElementById('delaylist');
+ ref = document.getElementById('delay');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ del.style.position = 'fixed'; del.style.left = x + 'px'; del.style.top = y + 'px';
+ var pnl = document.getElementById('navLinks');
+ }
+ if(opt) {
+ if(isIE) {
+ //(degrade IE)
+ //pnl.style.filter = "alpha(opacity=80)";
+ }else {
+ obj.style.opacity = 0.0;
+ vol.style.opacity = 0.0;
+ del.style.opacity = 0.0;
+ pnl.style.opacity = 0.8;
+ }
+ }
+}
+// invisible select extension
+
+// transition extension
+function switchFade() {
+ if(tranSitions && s5mode && fadeModus) {
+ fadeModus = false;
+ playDelay = playDelay-(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'isoff');
+ }else if(tranSitions && s5mode && !fadeModus) {
+ fadeModus = true;
+ playDelay = playDelay+(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ currentSlide();
+}
+function opacity(ids, opacStart, opacEnd, millisec) {
+ var speed = Math.round(millisec / 100);
+ var timer = 0;
+ if(opacStart > opacEnd) {
+ for(var i = opacStart; i >= opacEnd; i--) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ } else if(opacStart < opacEnd) {
+ for(var i = opacStart; i <= opacEnd; i++) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ }
+}
+function changeOpac(opacity, ids) {
+ var obj = document.getElementById(ids);
+ if (isIE) {
+ obj.style.filter = "alpha(opacity=" + opacity + ")";
+ } else {
+ obj.style.opacity = (opacity / 100);
+ }
+}
+function shiftOpacity(ids, millisec) {
+ if(document.getElementById(ids).style.opacity != '') {
+ var currentOpac = document.getElementById(ids).style.opacity * 100;
+ } else {
+ var currentOpac = 0;
+ }
+ if(currentOpac == 0) {
+ opacity(ids, currentOpac, 100, millisec);
+ } else if(currentOpac > 0) {
+ opacity(ids, currentOpac, 0, millisec);
+ }
+}
+// transition extension
+
+// autoplay extension
+function autoPlay() {
+ if (s5mode && autoMatic && !playPause) {
+ if ((snum >= (smax-1)) && playLoop) {
+ goTo(0);
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }else if ((snum >= (smax-1)) && !playLoop) {
+ stopPlay();
+ }else {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ if (incrementals[snum].length >0) {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = parseInt(playDelay/(incrementals[snum].length+1));
+ remainDer = parseInt(playDelay-(incrDelay*incrementals[snum].length));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ } else {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = incrDuration;
+ remainDer = parseInt(playDelay-(incrementals[snum].length*incrDuration));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }
+ }
+}
+function autoPlayIncr() {
+ if (incpos < incrementals[snum].length) {
+ subgo(1);
+ autoRun = setTimeout('autoPlayIncr();',incrDelay);
+ }else {
+ autoRun = setTimeout('nop();',remainDer);
+ }
+}
+function nop() {
+ // no operation dummy
+}
+function togglePlay() {
+ if (autoRun && s5mode) {
+ stopPlay();
+ }else if (!autoRun && s5mode) {
+ startPlay();
+ }
+}
+function stopPlay() {
+ if (autoRun && s5mode) {
+ clearTimeout(autoRun); autoRun = null;
+ autoMatic = false; playPause = false; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'isoff');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ currentSlide();
+ }
+}
+function startPlay() {
+ if (!autoRun && s5mode) {
+ playPause = false; autoMatic = true; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'ison');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ autoRun = setTimeout('autoPlay();',playDelay);
+ currentSlide();
+ }
+}
+function pausePlay() {
+ if (s5mode && autoMatic) {
+ if (playPause) {
+ playPause = false; autoRun = setTimeout('autoPlay();',playDelay);
+ var obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ }else {
+ if (autoRun){
+ clearTimeout(autoRun); autoRun = null; playPause = true;
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+ }
+}
+function switchLoop() {
+ if(s5mode) {
+ if (playLoop) {
+ playLoop = false;
+ var obj = document.getElementById('loop'); changeClass(obj,'isoff');
+ }else {
+ playLoop = true;
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+}
+function setDelay() {
+ var val = document.getElementById('delaylist');
+ if(s5mode) {
+ var delay = Math.max(5,Math.min(parseInt(val.value),300));
+ playDelay = (fadeModus == true) ? ((delay*1000)+(2*fadeDuration)) : (delay*1000);
+ }
+}
+// autoplay extension
+
+// audio extension
+function createSoundManagerScript() {
+ if(typeof soundManager=="undefined") {
+ onerrorSM2();
+ }else {
+ var script=document.createElement('SCRIPT');
+ var tx=document.createTextNode("soundManager.createMovie();");
+ script.appendChild(tx);
+ document.getElementsByTagName("body")[0].appendChild(script);
+ }
+}
+//soundManager.onload = function() {
+function onloadSM2() {
+ if(!isIE) { //(degrade IE)
+ swfUnloaded = false;
+ preloadSounds();
+ }
+}
+//soundManager.onerror = function() {
+function onerrorSM2() {
+ if(typeof soundManager!="undefined") {
+ soundManager.destruct;
+ delete soundManager;
+ }
+ audioSupport = false; swfUnloaded = true;
+ if(audioError && !isIE && !isOp) {
+ var dv = document.createElement('div'); dv.id = "guru";
+ var d2=document.createElement('div'); dv.appendChild(d2);
+ var tx=document.createTextNode('Guru Meditation - SoundManager failed to load/initialize!');
+ d2.appendChild(tx); document.getElementById('slide0').appendChild(dv);
+ }
+}
+function audioSetup() {
+ if(sound[0]) {
+ playSound(0);
+ }else if(sound[bgSoundItem] && !sound[0]) {
+ playSound(bgSoundItem);
+ }
+}
+function fadeoutSound(ids, option) {
+ if(curSoundID >= 0 && !swfUnloaded) {
+ if(isNaN(ids)) {
+ if(ids == "bgSound") {
+ var cnum = parseInt(bgSoundItem);
+ }else {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && ids == sound[i]["id"]) {
+ var cnum = i;
+ break;
+ }
+ }
+ }
+ }else {
+ var cnum = ids;
+ ids = sound[cnum]["id"];
+ }
+ var vol = getMaxVolume(sound[cnum]["volume"]);
+ var millisec = fadeDuration;
+ var speed = Math.round(millisec / vol);
+ var timer = 0;
+ for(var i = vol; i > 0; i--) {
+ setTimeout("fadeout(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ if(option) setTimeout("stopSound('"+ids+"')",millisec);
+ }
+}
+function fadeout(volume, id) {
+ soundManager.setVolume(id,volume);
+}
+function stopSound(ids) {
+ var sid;
+ if(isNaN(ids)) {
+ sid = ids;
+ }else if(sound[ids]) {
+ sid = sound[ids]["id"];
+ }
+ if(sid!='' && curSoundID >= 0) {
+ soundManager.stop(sid);
+ curSoundID = -1;
+ }
+}
+function toggleSounds() {
+ if(audioSupport && !swfUnloaded) {
+ stopAllSounds();
+ }else if (!audioSupport && !swfUnloaded) {
+ allowSounds();
+ }
+}
+function allowSounds() {
+ if(!swfUnloaded) {
+ audioSupport = true;
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ currentSlide();
+ }
+}
+function stopAllSounds() {
+ if(curSoundID >= 0) {
+ stopSound(curSoundID);
+ }else {
+ soundManager.stopAll();
+ curSoundID = -1;
+ }
+ audioSupport = false;
+ var obj = document.getElementById('audio'); changeClass(obj,'isoff');
+ currentSlide();
+}
+function playSound(id) {
+ if(audioSupport && !swfUnloaded) {
+ var url, sid, vol, lps, cnum;
+ if(isNaN(id)) {
+ sid = id;
+ if(sid == "bgSound") {
+ cnum = parseInt(bgSoundItem);
+ }else {
+ cnum = getSoundID(id);
+ }
+ }else {
+ cnum = parseInt(id);
+ if(sound[cnum]) sid = sound[cnum]["id"];
+ }
+ if(sound[cnum] && sound[cnum]["url"]!='' && sid!=''){
+ url = sound[cnum]["url"];
+ vol = (sound[cnum]["volume"]!='')?getMaxVolume(sound[cnum]["volume"]):getMaxVolume(100);
+ lps = (sound[cnum]["loops"])?true:false;
+ if(lps) {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){soundManager.play(sid,{volume:getMaxVolume(sound[cnum]["volume"])});}});
+ }else {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){curSoundID=-1;}});
+ }
+ }
+ }
+}
+function getSoundID(str) {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && str == sound[i]["id"]) {
+ var id = i;
+ break;
+ }
+ }
+ return id;
+}
+function setVolume() {
+ var vol = document.getElementById('volumelist');
+ if(audioSupport && !swfUnloaded) {
+ audioVolume = parseInt(vol.value);
+ if(curSoundID >= 0) {
+ if(sound[curSoundID]) {
+ var sid = sound[curSoundID]["id"];
+ var vid = getMaxVolume(sound[curSoundID]["volume"]);
+ soundManager.setVolume(sid,vid);
+ }
+ }
+ }
+}
+function getMaxVolume(value) {
+ if(audioVolume>0) {var factor = audioVolume/100;}else {var factor = 0;}
+ return Math.max(0,Math.min(parseInt(value*factor),audioVolume));
+}
+function preloadSounds() {
+ var temp = ''; var parm = ''; var t = ''; var cl = '';
+ var objects = document.getElementsByTagName('object');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].type.toLowerCase() == 'audio/mp3' && objects[i].data != '') {
+ objects[i].width = 0; objects[i].height = 0;
+ if(objects[i].parentNode.tagName == 'DIV') {
+ cl = objects[i].parentNode.className.toLowerCase();
+ if(cl == 'presentation' || cl == 'slide') {
+ if(cl == 'presentation') {
+ t = parseInt(bgSoundItem);
+ }else {
+ t = parseInt(objects[i].parentNode.id.slice(5, objects[i].parentNode.id.length));
+ }
+ sound[t] = new Object();
+ if(t < bgSoundItem) {
+ sound[t]["id"] = objects[i].parentNode.id;
+ }else {
+ sound[t]["id"] = "bgSound";
+ }
+ sound[t]["url"] = objects[i].data;
+ sound[t]["volume"] = 100; sound[t]["loops"] = false;
+ if(objects[i].archive != '') {
+ parm = objects[i].archive.toLowerCase().split(',');
+ for (var j=0; j < parm.length; j++) {
+ if(parm[j] == 'loop') sound[t]["loops"] = true;
+ if(parm[j].search(/^volume/) != -1) {
+ var tmp = parm[j].split(':');
+ sound[t]["volume"] = parseInt(tmp[1]);
+ }
+ }
+ }
+ soundManager.createSound(sound[t]["id"],sound[t]["url"]);
+ }
+ }
+ }
+ }
+}
+// audio extension
+
+// help extension
+function createHelpReq() {
+ if(!document.getElementById("HelpReq")) {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "HelpReq";
+ if (pg.addEventListener) {
+ pg.addEventListener("onclick",dumpHelpReq,false);
+ } else if (pg.attachEvent) {
+ pg.attachEvent("onclick",dumpHelpReq);
+ }
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=90)";
+ } else {
+ pg.style.opacity = 0.9;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(64,64,64)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/help.jpg)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+ if(document.getElementById("HelpReq")) {
+ helpmode = true;
+ }
+ }
+}
+function dumpHelpReq() {
+ if(document.getElementById("HelpReq")) {
+ document.body.removeChild(document.getElementById('HelpReq'));
+ helpmode = false;
+ }
+}
+// help extension
+
+//DEBUG
+function ConsoleLog(value) {
+ if(window.console) {
+ window.console.log(value);
+ }
+}
+//DEBUG
+
+document.write('<style type="text/css" media="screen" id="blockStyle">.presentation, .layout {display: none; }</style>');
+
+if(!isIE && !isOp) {
+ document.write('<script type="text/javascript" src="'+s5Path+'ui/audio_support/soundmanager2.js"></script>');
+ if(typeof soundManager!="undefined") {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'audioDebug') {
+ var audioDebug = (allMetas[i].content == "true") ? true : false;
+ soundManager.defaultOptions.debugMode = audioDebug;
+ }
+ }
+ }
+}
+
+window.onload = createSlideShow;
+window.onresize = function(){setTimeout('windowChange()',5);} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/toggle_link.png
new file mode 100644
index 000000000..4588e2514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/toggle_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/toggle_over.png
new file mode 100644
index 000000000..400f613b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/toggle_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/volume_link.png
new file mode 100644
index 000000000..f362acd1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/volume_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/wrap.css
new file mode 100644
index 000000000..a37315552
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/wrap.css
@@ -0,0 +1,410 @@
+/********************************************************************
+Screen and Print Styles for the Wrap Plugin
+********************************************************************/
+
+/* tables in columns and boxes should span the whole width */
+.wrap_column table,
+.wrap_left table, .wrap_right table, .wrap_center table,
+.wrap_box table,
+.wrap_info table, .wrap_important table, .wrap_alert table, .wrap_tip table, .wrap_help table, .wrap_todo table, .wrap_download table {
+ width: 100%;
+}
+/* emulate a headline */
+.wrap_column em strong,
+.wrap_left em strong, .wrap_right em strong, .wrap_center em strong,
+.wrap_box em strong,
+.wrap_info em strong, .wrap_important em strong, .wrap_alert em strong, .wrap_tip em strong, .wrap_help em strong, .wrap_todo em strong, .wrap_download em strong {
+ font-size: 130%;
+ font-weight: bold;
+ font-style: normal;
+ display: block;
+}
+/* emulate a bigger headline with a bottom border */
+.wrap_column em strong em.u,
+.wrap_left em strong em.u, .wrap_right em strong em.u, .wrap_center em strong em.u,
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ font-size: 115%;
+ border-bottom: 1px solid __border__;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+}
+/* different bigger headline for safety notes */
+.wrap_danger em strong em.u, .wrap_warning em strong em.u, .wrap_caution em strong em.u, .wrap_notice em strong em.u, .wrap_safety em strong em.u {
+ font-size: 115%;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+ text-transform: uppercase;
+ border-bottom-width: 0;
+}
+/* change border colour of emulated headlines inside boxes to something more neutral
+ (to match all the different background colours) */
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ border-bottom-color: #999;
+}
+
+
+/* columns
+********************************************************************/
+
+.wrap_left,
+.wrap_column {
+ float: left;
+ margin-right: 1.5em;
+}
+.wrap_right {
+ float: right;
+ margin-left: 1.5em;
+}
+.wrap_center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+/*
+.wrap_column,
+.wrap_left,
+.wrap_right {
+ overflow: hidden;
+}
+*/
+.wrap_container {
+ margin-right: -1.5em;
+}
+
+
+/* alignments
+********************************************************************/
+
+.wrap_leftalign {
+ text-align: left;
+}
+.wrap_centeralign {
+ text-align: center;
+}
+.wrap_rightalign {
+ text-align: right;
+}
+.wrap_justify {
+ text-align: justify;
+}
+
+
+/* box
+********************************************************************/
+
+/* see styles for boxes and notes with icons in style.css */
+
+/*____________ rounded corners ____________*/
+/* (only for modern browsers) */
+
+div.wrap_round {
+ border-radius: 20px;
+ -moz-border-radius: 20px;
+ -webkit-border-radius: 20px;
+ -khtml-border-radius: 20px;
+}
+span.wrap_round {
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -khtml-border-radius: 2px;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_lo {
+ color: __text_neu__;
+ font-size: 85%;
+}
+div.wrap_em {
+ color: #c00;
+ font-weight: bold;
+}
+
+/* see styles for highlighted text in style.css */
+
+
+/* typography
+********************************************************************/
+
+/*____________ fonts ____________*/
+
+div.wrap_sansserif {
+ font-family: Verdana,Tahoma,Geneva,"DejaVu Sans","Bitstream Vera Sans","Liberation Sans", Arial,Helvetica,FreeSans,"Liberation Sans","Nimbus Sans L", sans-serif;
+}
+div.wrap_serif {
+ font-family: Georgia,Garamond,"Palatino Linotype","Book Antiqua",Palatino,Palladio,"URW Palladio L","Liberation Serif",Didot,Gentium,"Bitstream Charter","Century Schoolbook L", "Times New Roman",Times,"Nimbus Roman No9 L","FreeSerif", serif;
+}
+div.wrap_monospace {
+ font-family: Courier,"Courier New",FreeMono,"Nimbus Mono L","Liberation Mono", "Lucida Console",Monaco,"DejaVu Sans Mono","Bitstream Vera Sans Mono", monospace;
+}
+
+/*____________ font size ____________*/
+
+div.wrap_bigger {
+ font-size: 125%;
+}
+div.wrap_muchbigger {
+ font-size: 200%;
+}
+div.wrap_smaller {
+ font-size: 75%;
+}
+
+/*____________ font colours ____________*/
+
+div.wrap_fgred {
+ color: #900;
+}
+div.wrap_fggreen {
+ color: #090;
+}
+div.wrap_fgblue {
+ color: #009;
+}
+div.wrap_fgcyan {
+ color: #099;
+}
+div.wrap_fgviolet {
+ color: #909;
+}
+div.wrap_fgyellow {
+ color: #990;
+}
+div.wrap_fggrey {
+ color: #666;
+}
+div.wrap_fgblack {
+ color: #000;
+}
+
+/* see styles for background colours and white font colour in style.css */
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ indent ____________*/
+
+div.wrap_indent {
+ padding-left: 1.5em;
+}
+
+/*____________ outdent ____________*/
+
+div.wrap_outdent {
+ margin-left: -1.5em;
+}
+
+/*____________ word wrapping in pre ____________*/
+
+divdiv.wrap_prewrap pre {
+ white-space: pre-wrap;
+ word-wrap: break-word;/* for IE < 8 */
+ /* white-space: -moz-pre-wrap; for FF < 3 */
+}
+
+/*____________ spoiler ____________*/
+
+divdiv.wrap_spoiler {
+ margin-bottom: 1.5em;
+}
+/* see rest of spoiler styles in style.css */
+
+/*____________ clear float ____________*/
+
+div.wrap_clear {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ font-size: 1px;
+ visibility: hidden;
+ overflow: hidden;
+}
+
+/*____________ hide ____________*/
+
+div.wrap_hide {
+ display: none;
+}
+
+
+/* STYLE.CSS */
+
+/* box
+********************************************************************/
+
+.wrap_box {
+ background: __background_alt__;
+ color: __text__;
+/*
+ overflow: hidden;
+*/
+}
+div.wrap_box,
+div.wrap_danger, div.wrap_warning, div.wrap_caution, div.wrap_notice, div.wrap_safety {
+ padding: 1em 1em .5em;
+ margin-bottom: 1.5em;
+}
+span.wrap_box,
+span.wrap_danger, span.wrap_warning, span.wrap_caution, span.wrap_notice, span.wrap_safety {
+ padding: 0 .3em;
+}
+
+/*____________ notes with icons ____________*/
+
+/* general styles for all note divs */
+div.wrap_info, div.wrap_important, div.wrap_alert, div.wrap_tip, div.wrap_help, div.wrap_todo, div.wrap_download {
+ padding: 1em 1em .5em 70px;
+ margin-bottom: 1.5em;
+ min-height: 68px;
+ background-position: 10px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html div.wrap_info, * html div.wrap_important, * html div.wrap_alert, * html div.wrap_tip, * html div.wrap_help, * html div.wrap_todo, * html div.wrap_download {
+ height: 68px;
+}
+/* general styles for all note spans */
+span.wrap_info, span.wrap_important, span.wrap_alert, span.wrap_tip, span.wrap_help, span.wrap_todo, span.wrap_download {
+ padding: 0 2px 0 20px;
+ min-height: 20px;
+ background-position: 2px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html span.wrap_info, * html span.wrap_important, * html span.wrap_alert, * html span.wrap_tip, * html span.wrap_help, * html span.wrap_todo, * html span.wrap_download {
+ height: 20px;
+}
+
+/*____________ info ____________*/
+.wrap_info { background-color: #d1d7df; }
+div.wrap_info { background-image: url(../../../wrap/images/note/48/info.png); }
+span.wrap_info { background-image: url(../../../wrap/images/note/16/info.png); }
+
+/*____________ important ____________*/
+.wrap_important { background-color: #ffd39f; }
+div.wrap_important { background-image: url(../../../wrap/images/note/48/important.png); }
+span.wrap_important { background-image: url(../../../wrap/images/note/16/important.png); }
+
+/*____________ alert ____________*/
+.wrap_alert { background-color: #ffbcaf; }
+div.wrap_alert { background-image: url(../../../wrap/images/note/48/alert.png); }
+span.wrap_alert { background-image: url(../../../wrap/images/note/16/alert.png); }
+
+/*____________ tip ____________*/
+.wrap_tip { background-color: #fff79f; }
+div.wrap_tip { background-image: url(../../../wrap/images/note/48/tip.png); }
+span.wrap_tip { background-image: url(../../../wrap/images/note/16/tip.png); }
+
+/*____________ help ____________*/
+.wrap_help { background-color: #dcc2ef; }
+div.wrap_help { background-image: url(../../../wrap/images/note/48/help.png); }
+span.wrap_help { background-image: url(../../../wrap/images/note/16/help.png); }
+
+/*____________ todo ____________*/
+.wrap_todo { background-color: #c2efdd; }
+div.wrap_todo { background-image: url(../../../wrap/images/note/48/todo.png); }
+span.wrap_todo { background-image: url(../../../wrap/images/note/16/todo.png); }
+
+/*____________ download ____________*/
+.wrap_download { background-color: #d6efc2; }
+div.wrap_download { background-image: url(../../../wrap/images/note/48/download.png); }
+span.wrap_download { background-image: url(../../../wrap/images/note/16/download.png); }
+
+
+/*____________ safety notes ____________*/
+
+.wrap_danger {
+ background-color: #c00;
+ color: #fff;
+}
+.wrap_warning {
+ background-color: #f60;
+ color: #000;
+}
+.wrap_caution {
+ background-color: #ff0;
+ color: #000;
+}
+.wrap_notice {
+ background-color: #06f;
+ color: #fff;
+}
+.wrap_safety {
+ background-color: #090;
+ color: #fff;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_hi {
+ background-color: #ff9;
+}
+
+/* typography
+********************************************************************/
+
+/*____________ font colours ____________*/
+
+div.wrap_fgwhite {
+ color: #fff;
+}
+
+/*____________ background colours ____________*/
+
+div.wrap_bgred {
+ background-color: #fcc;
+}
+div.wrap_bggreen {
+ background-color: #cfc;
+}
+div.wrap_bgblue {
+ background-color: #ccf;
+}
+div.wrap_bgcyan {
+ background-color: #9ff;
+}
+div.wrap_bgviolet {
+ background-color: #f9f;
+}
+div.wrap_bgyellow {
+ background-color: #ff9;
+}
+div.wrap_bggrey {
+ background-color: #ccc;
+}
+div.wrap_bgwhite {
+ background-color: #fff;
+}
+div.wrap_bgblack {
+ background-color: #000;
+}
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ spoiler ____________*/
+
+div.wrap_spoiler {
+ background-color: __background__ !important;
+ color: __background__ !important;
+ border: 1px dotted red;
+}
+
+/*____________ only print ____________*/
+
+div.wrap_onlyprint {
+ display: none;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/zero_link.png
new file mode 100644
index 000000000..5610884d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/zero_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/zero_over.png
new file mode 100644
index 000000000..3a14a577e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/zero_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/audio_link.png
new file mode 100644
index 000000000..daa740c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/audio_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/audio_on.png
new file mode 100644
index 000000000..cd590aae9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/audio_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/audio_over.png
new file mode 100644
index 000000000..cf537a008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/audio_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/auto_link.png
new file mode 100644
index 000000000..1c2ca4817
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/auto_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/auto_on.png
new file mode 100644
index 000000000..4b0c923b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/auto_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/auto_over.png
new file mode 100644
index 000000000..dbea88975
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/auto_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/backgrnd.png
new file mode 100644
index 000000000..0e48413d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/backgrnd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/delay_link.png
new file mode 100644
index 000000000..c4d99cd57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/delay_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/exit_link.png
new file mode 100644
index 000000000..1bfd38790
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/exit_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/exit_over.png
new file mode 100644
index 000000000..0fdd1c605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/exit_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/fade_link.png
new file mode 100644
index 000000000..482e4d53e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/fade_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/fade_on.png
new file mode 100644
index 000000000..e12561fb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/fade_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/fade_over.png
new file mode 100644
index 000000000..fb8943c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/fade_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/footer.jpg
new file mode 100644
index 000000000..49370dbba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/footer.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/framing.css
new file mode 100755
index 000000000..14d8509e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/framing.css
@@ -0,0 +1,23 @@
+/* The following styles size, place, and layer the slide components.
+ Edit these if you want to change the overall slide layout.
+ The commented lines can be uncommented (and modified, if necessary)
+ to help you with the rearrangement process. */
+
+/* target = 1024x768 */
+
+div#header, div#footer, .slide {width: 100%; top: 0; left: 0;}
+div#header {top: 0; height: 3em; z-index: 1;}
+div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;}
+.slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;}
+div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;}
+div#controls form {position: absolute; bottom: 0; right: 0; width: 100%;
+ margin: 0;}
+#currentSlide {position: absolute; width: 10%; left: 45%; bottom: 1em; z-index: 10;}
+html>body #currentSlide {position: fixed;}
+
+/*
+div#header {background: #FCC;}
+div#footer {background: #CCF;}
+div#controls {background: #BBD;}
+div#currentSlide {background: #FFC;}
+*/
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/header.png
new file mode 100644
index 000000000..929dabba1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/last_link.png
new file mode 100644
index 000000000..4f158d35d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/last_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/last_over.png
new file mode 100644
index 000000000..a7b629995
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/last_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/list_link.png
new file mode 100644
index 000000000..7e299bb50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/list_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/loop_link.png
new file mode 100644
index 000000000..41e12cb15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/loop_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/loop_on.png
new file mode 100644
index 000000000..2ffcacae1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/loop_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/loop_over.png
new file mode 100644
index 000000000..9fe420153
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/loop_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/next_link.png
new file mode 100644
index 000000000..2b9f44c4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/next_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/next_over.png
new file mode 100644
index 000000000..25788124d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/next_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/notes_link.png
new file mode 100644
index 000000000..bb4a8ae37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/notes_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/notes_over.png
new file mode 100644
index 000000000..c6bfe69fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/notes_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/opera.css
new file mode 100755
index 000000000..9e9d2a3c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/opera.css
@@ -0,0 +1,7 @@
+/* DO NOT CHANGE THESE unless you really want to break Opera Show */
+.slide {
+ visibility: visible !important;
+ position: static !important;
+ page-break-before: always;
+}
+#slide0 {page-break-before: avoid;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/outline.css
new file mode 100755
index 000000000..62db519ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/outline.css
@@ -0,0 +1,15 @@
+/* don't change this unless you want the layout stuff to show up in the outline view! */
+
+.layout div, #footer *, #controlForm * {display: none;}
+#footer, #controls, #controlForm, #navLinks, #toggle {
+ display: block; visibility: visible; margin: 0; padding: 0;}
+#toggle {float: right; padding: 0.5em;}
+html>body #toggle {position: fixed; top: 0; right: 0;}
+
+/* making the outline look pretty-ish */
+
+#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
+#slide0 h1 {padding-top: 1.5em;}
+.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em;
+ border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
+#toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pause_link.png
new file mode 100644
index 000000000..2561cb4a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pause_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pause_on.png
new file mode 100644
index 000000000..2fc9c4a4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pause_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pause_over.png
new file mode 100644
index 000000000..7a7c80ddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pause_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pixelbg.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pixelbg.gif
new file mode 100644
index 000000000..a57ccb106
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pixelbg.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pixelheader.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pixelheader.jpg
new file mode 100644
index 000000000..3c0f13b1e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pixelheader.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pixelslide0bg.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pixelslide0bg.gif
new file mode 100644
index 000000000..fffb08a26
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pixelslide0bg.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pretty.css
new file mode 100644
index 000000000..1b2107b3f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pretty.css
@@ -0,0 +1,166 @@
+/* Pixel Theme 2004 by Martin Hense ::: www.lounge7.de */
+
+/* Following are the presentation styles -- edit away!
+ Note that the 'body' font size may have to be changed if the resolution is
+ different than expected. */
+
+body {background: transparent url(pixelbg.gif) repeat-y; color: #08093F; font-size: 1.8em;}
+:link, :visited {text-decoration: none;}
+#controls :active {color: #88A !important;}
+#controls :focus {outline: 1px dotted #227;}
+h1, h2, h3, h4 {font-size: 100%; margin: 0; padding: 0; font-weight: inherit;}
+ul, pre {margin: 0; line-height: 1em;}
+html, body {margin: 0; padding: 0;}
+
+blockquote, q {font-style: italic;}
+blockquote {padding: 0 2em 0.5em; margin: 0 1.5em 0.5em; text-align: center; font-size: 1em;}
+blockquote p {margin: 0;}
+blockquote i {font-style: normal;}
+blockquote b {display: block; margin-top: 0.5em; font-weight: normal; font-size: smaller; font-style: normal;}
+blockquote b i {font-style: italic;}
+
+kbd {font-weight: bold; font-size: 1em;}
+sup {font-size: smaller; line-height: 1px;}
+
+code {padding: 2px 0.25em; font-weight: bold; color: #533;}
+code.bad, code del {color: red;}
+code.old {color: silver;}
+pre {padding: 0; margin: 0.25em 0 0.5em 0.5em; color: #533; font-size: 90%;}
+pre code {display: block;}
+ul {margin-right: 7%; margin-left: 50px; list-style: square;}
+li {margin-top: 0.75em; margin-right: 0;}
+ul ul {line-height: 1;}
+ul ul li {margin: .2em; font-size: 85%; list-style: square;}
+img.leader {display: block; margin: 0 auto;}
+
+div#header, div#footer {background: #005; color: #646587;
+ font-family: Verdana, Helvetica, sans-serif;}
+div#header {background: transparent url(pixelheader.jpg) 0 0 no-repeat; height: 75px;}
+div#footer {font-size: 0.5em; font-weight: bold; padding: 1em 0; border-top: 1px solid #08093F; background: #fff;}
+#footer h1, #footer h2 {display: block; padding: 0 1em;}
+#footer h2 {font-style: italic;}
+
+div.long {font-size: 0.75em;}
+.slide {font-family: Verdana, Helvetica, Arial, sans-serif;}
+.slide h1 {position: absolute; z-index: 1;
+ margin: 0; padding: 0.3em 0 0 50px; white-space: nowrap;
+ font: bold 150%/1em Helvetica, sans-serif; text-transform: capitalize;
+ top: 1.4em; left: 2%;
+ color: #08093F; background: transparent;}
+.slide h3 {font-size: 130%;}
+h1 abbr {font-variant: small-caps;}
+
+
+#currentSlide {text-align: center; font-size: 0.5em; color: #646587;
+ font-family: Verdana, Helvetica, sans-serif; font-weight: bold;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; white-space: normal;
+ margin: 0; padding: 60px 60px 0 150px; text-align: right;
+ font: bold 2em Helvetica, sans-serif; white-space: normal; height: 281px;
+ color: #fff; background: transparent url(pixelslide0bg.gif) no-repeat;}
+#slide0 h3 {margin-top: 0.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.notes {display: none;}
+
+div#controls {position: absolute; left: 0; bottom: 0; width: 100%; text-align: center; font: bold 1em Verdana, Arial, Helvetica, sans-serif;}
+html>body div#controls {background: transparent; position: fixed; padding: 0; top: auto; text-align: center;}
+#controls #sheet {display: none;}
+#controls #controlForm {height: 32px; width: 100%; text-align: center; vertical-align: middle;}
+#controls #navLinks {border-top: 1px solid #999; overflow: hidden; padding: 0; margin: 0; height: 32px; width: 100%; background-color: #808080; text-align: center; vertical-align: middle; white-space: nowrap;}
+#controls #navLinks ul {margin: 0 auto; padding: 0; height: 32px; width: 500px; white-space: nowrap; text-align: center;}
+#controls #navLinks ul li {list-style: none; display: inline; margin: 0; padding: 0; float: left; height: 32px; width: 32px; text-align: center; background-color: transparent;}
+#controls #navLinks ul li.vr {list-style: none; display: inline; margin: 0px 2px; padding: 0; float: left; height: 32px; width: 1px; text-align: center; background-color: #606060;}
+#controls #navLinks ul li a {margin: 0; padding: 0; float: left; height: 32px; width: 32px; background-color: transparent;}
+
+#controls #navLinks ul li#exit {background: url(exit_link.png) no-repeat top left;}
+#controls #navLinks ul li#exit a:hover {background: url(exit_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#toggle {background: url(toggle_link.png) no-repeat top left;}
+#controls #navLinks ul li#toggle a:hover {background: url(toggle_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#show-notes {background: url(notes_link.png) no-repeat top left;}
+#controls #navLinks ul li#show-notes a:hover {background: url(notes_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#zero {background: url(zero_link.png) no-repeat top left;}
+#controls #navLinks ul li#zero a:hover {background: url(zero_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#prev {background: url(prev_link.png) no-repeat top left;}
+#controls #navLinks ul li#prev a:hover {background: url(prev_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#next {background: url(next_link.png) no-repeat top left;}
+#controls #navLinks ul li#next a:hover {background: url(next_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#last {background: url(last_link.png) no-repeat top left;}
+#controls #navLinks ul li#last a:hover {background: url(last_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#lst {background: url(list_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#fade a.isoff {background: url(fade_link.png) no-repeat top left;}
+#controls #navLinks ul li#fade a.ison {background: url(fade_on.png) no-repeat top right;}
+#controls #navLinks ul li#fade a:hover {background: url(fade_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#audio {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.isoff {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.ison {background: url(audio_on.png) no-repeat top right;}
+#controls #navLinks ul li#audio a:hover {background: url(audio_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#vol {background: url(volume_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#auto a.isoff {background: url(auto_link.png) no-repeat top left;}
+#controls #navLinks ul li#auto a.ison {background: url(auto_on.png) no-repeat top right;}
+#controls #navLinks ul li#auto a:hover {background: url(auto_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#pause a.isoff {background: url(pause_link.png) no-repeat top left;}
+#controls #navLinks ul li#pause a.ison {background: url(pause_on.png) no-repeat top right;}
+#controls #navLinks ul li#pause a:hover {background: url(pause_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#loop a.isoff {background: url(loop_link.png) no-repeat top left;}
+#controls #navLinks ul li#loop a.ison {background: url(loop_on.png) no-repeat top right;}
+#controls #navLinks ul li#loop a:hover {background: url(loop_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#del {background: url(delay_link.png) no-repeat top left;}
+
+#jumplist, #volumelist, #delaylist {padding: 0; margin: 0; width: 32px; height: 32px; cursor: n-resize;}
+
+#guru {position: absolute; visibility: visible; left: 0px; top: 0px; padding: 4px; width: 99%; height: auto; text-align: center; background-color: black; z-index: 10;}
+#guru div {border: solid 3px red; padding: 4px; font-family: monospace; font-size: 60%; width: auto; height: auto; color: red; text-align: center;}
+
+/*
+#currentSlide {white-space: nowrap; text-align: center; margin-bottom: -0.5em; font-size: 0.5em; background-color: transparent; color: #999;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 0; padding: 0; font: bold 2em Verdana, Arial, Helvetica, sans-serif; font-variant: small-caps; text-shadow: 0.1em 0.1em 0.1em #666; white-space: normal; color: #222; background-color: transparent;}
+#slide0 h2 {font: bold italic 1em Arial, Helvetica, sans-serif; margin: 0.25em;}
+#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+*/
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.external {border-bottom: 1px dotted gray;}
+html>body .external {border-bottom: none;}
+.external:after {content: " \274F"; font-size: smaller; color: #999;}
+
+.incremental, .incremental *, .incremental *:after {color: #ccc; visibility: visible;}
+img.incremental, canvas.incremental {visibility: hidden;}
+.slide .current {color: #B02;}
+
+/* diagnostics
+li:after {content: " [" attr(class) "]"; color: #F88;}
+*/
+
+table.piechart, table.barchart, table.linechart { border-spacing: 0.3em 0.15em; }
+table.piechart tr th, table.barchart tr th, table.linechart tr th { white-space: nowrap; }
+table.piechart tr td, table.barchart tr td, table.linechart tr td { vertical-align: top; white-space: nowrap; }
+table.piechart tr td.col, table.barchart tr td.col, table.linechart tr td.col { border-bottom: 1px solid #555; border-right: 1px solid #555; }
+table.fs90 tr td, table.fs90 tr th, div.fs90, pre.fs90, p.fs90 ,ul.fs90 {font-size: 0.9em; }
+table.fs75 tr td, table.fs75 tr th, div.fs75, pre.fs75, p.fs75 ,ul.fs75 {font-size: 0.75em; }
+table.fs66 tr td, table.fs66 tr th, div.fs66, pre.fs66, p.fs66 ,ul.fs66 {font-size: 0.66em; }
+table.fs50 tr td, table.fs50 tr th, div.fs50, pre.fs50, p.fs50 ,ul.fs50 {font-size: 0.5em; }
+
+#soundmanager-debug {position:fixed; top:0px; right:0px; width:30em; height:20em; overflow:auto; border:1px solid red; padding:1em; margin:2em; font-family:"sans serif"; font-size: 12px;color: black; background-color:#f6f6f6; z-index: 100;}
+#soundmanager-debug code {font-size: 11px;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/prev_link.png
new file mode 100644
index 000000000..c31d21350
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/prev_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/prev_over.png
new file mode 100644
index 000000000..6fef4fa52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/prev_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/print.css
new file mode 100755
index 000000000..220083260
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/print.css
@@ -0,0 +1 @@
+/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul { page-break-inside: avoid; visibility: visible !important; } h1 { page-break-after: avoid; } html { width:100%; overflow:hidden; } body { font-size: 12pt; background: white; width:100%; } * { color: black; } #slide0 h1 { font-size: 200%; border: none; margin: 0.5em 0 0.25em; } #slide0 h3 { margin: 0; padding: 0; } #slide0 h4 { margin: 0 0 0.5em; padding: 0; } #slide0 { margin-bottom: 3em; } h1 { border-top: 2pt solid gray; border-bottom: 1px dotted silver; padding:0.2em 0 0.3em 0; } .extra { background: transparent !important; } div.extra, pre.extra, .example { font-size: 10pt; color: #333; } ul.extra a { font-weight: bold; } p.example { display: none; } #header { display: none; } #footer h1 { margin: 0; border-bottom: 1px solid; color: gray; font-style: italic; } #footer h2, #controls { display: none; } div.handout { display:block; border-top: 2px dotted #ccc; background:url(pics/back-handout-print.png) top right no-repeat #fff; min-height:6em; padding-right:6em; margin-bottom:1em; } .slide { display:block; background:url(pics/back-slide-print.png) top right no-repeat #fff; min-height:6em; margin-bottom:1em; } table { display:block; /* display:none; */ font-size:90%; overflow:hidden; margin-top:1em; margin-bottom:1em; } pre , code { margin:0; font-size:1pt; overflow:auto; } img { max-width:100% !important; } /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .layout, .layout * { display: none !important; } \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/s5-core.css
new file mode 100755
index 000000000..86444e041
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/s5-core.css
@@ -0,0 +1,9 @@
+/* Do not edit or override these styles! The system will likely break if you do. */
+
+div#header, div#footer, div#controls, .slide {position: absolute;}
+html>body div#header, html>body div#footer,
+ html>body div#controls, html>body .slide {position: fixed;}
+.handout {display: none;}
+.layout {display: block;}
+.slide, .hideme, .incremental {visibility: hidden;}
+#slide0 {visibility: visible;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/slides.css
new file mode 100755
index 000000000..0786d7dbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/slides.css
@@ -0,0 +1,3 @@
+@import url(s5-core.css); /* required to make the slide show run at all */
+@import url(framing.css); /* sets basic placement and size of slide components */
+@import url(pretty.css); /* stuff that makes the slides look better than blah */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/slides.js
new file mode 100644
index 000000000..510a04c0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/slides.js
@@ -0,0 +1,2812 @@
+// S5 1.3beta7 (18-Apr-2007) advanced version by C. Effenberger
+// Please see http://s5.netzgesta.de/ for more information
+// based on S5 v1.2a1 slides.js -- released into the Public Domain
+// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
+// about all the wonderful and talented contributors to this code!
+// audio extension: soundmanager2 is NOT Public Domain
+// Please see http://www.schillmania.com/projects/soundmanager2/ for information
+
+var undef;
+var slideCSS = '';
+var snum = 0;
+var smax = 1;
+var incpos = 0;
+var number = undef;
+var firstTime = 1;
+var s5mode = true;
+var helpmode = false;
+var defaultView = 'slideshow'; //outline
+var controlVis = 'visible';
+var s5Path = 'lib/plugins/s5reloaded/';
+
+// scalable images extension
+var empx = 0;
+var images = new Array();
+var canvas = new Array();
+var medias = new Array();
+var piecharts = new Array();
+var barcharts = new Array();
+var linecharts = new Array();
+// scalable images extension
+
+// transition extension
+var tranSitions = false;
+var fadeModus = false;
+var fadeDuration = 500;
+var incrDuration = 250;
+var opac = 1;
+var cid = '';
+var nid = '';
+var tid = '';
+var jl = '';
+// transition extension
+
+// autoplay extension
+var autoMatic = false;
+var playLoop = false;
+var playPause = false;
+var autoRun = false;
+var playDelay = 5000;
+var remainDer = 0;
+var incrDelay = 0;
+// autoplay extension
+
+// audio extension
+var sound = new Array();
+var audioSupport = false;
+var audioVolume = 100;
+var audioError = false;
+var swfUnloaded = true;
+var bgSoundItem = 9999;
+var curSoundID = -1;
+// audio extension
+
+// panel extension
+var imgWidth = 32;
+var imgHeight = 32;
+// panel extension
+
+// canvas chart extension
+var canvasSupport = false;
+var ChartData = new Array();
+var colorSlice = new Array();
+var font = document.createElement("img");
+font.setAttribute("src", s5Path+"ui/graphic_support/numeric.png");
+signs = {
+ '0': {sx: 0, sy: 0, sw: 48, sh: 64},
+ '1': {sx: 48, sy: 0, sw: 48, sh: 64},
+ '2': {sx: 96, sy: 0, sw: 48, sh: 64},
+ '3': {sx: 144, sy: 0, sw: 48, sh: 64},
+ '4': {sx: 192, sy: 0, sw: 48, sh: 64},
+ '5': {sx: 240, sy: 0, sw: 48, sh: 64},
+ '6': {sx: 288, sy: 0, sw: 48, sh: 64},
+ '7': {sx: 336, sy: 0, sw: 48, sh: 64},
+ '8': {sx: 384, sy: 0, sw: 48, sh: 64},
+ '9': {sx: 432, sy: 0, sw: 48, sh: 64},
+ '%': {sx: 480, sy: 0, sw: 48, sh: 64},
+ '.': {sx: 528, sy: 0, sw: 24, sh: 64}
+};
+var colorNames= new Array();
+colorNames["black"]="#000000"; colorNames["maroon"]="#800000";
+colorNames["green"]="#008000"; colorNames["olive"]="#808000";
+colorNames["navy"]="#000080"; colorNames["purple"]="#800080";
+colorNames["teal"]="#008080"; colorNames["gray"]="#808080";
+colorNames["silver"]="#C0C0C0"; colorNames["red"]="#FF0000";
+colorNames["lime"]="#00FF00"; colorNames["yellow"]="#FFFF00";
+colorNames["blue"]="#0000FF"; colorNames["fuchsia"]="#FF00FF";
+colorNames["aqua"]="#00FFFF"; colorNames["white"]="#FFFFFF";
+colorNames["aliceblue"]="#F0F8FF"; colorNames["antiquewhite"]="#FAEBD7";
+colorNames["aquamarine"]="#7FFFD4"; colorNames["azure"]="#F0FFFF";
+colorNames["beige"]="#F5F5DC"; colorNames["blueviolet"]="#8A2BE2";
+colorNames["brown"]="#A52A2A"; colorNames["burlywood"]="#DEB887";
+colorNames["cadetblue"]="#5F9EA0"; colorNames["chartreuse"]="#7FFF00";
+colorNames["chocolate"]="#D2691E"; colorNames["coral"]="#FF7F50";
+colorNames["cornflowerblue"]="#6495ED"; colorNames["cornsilk"]="#FFF8DC";
+colorNames["crimson"]="#DC143C"; colorNames["darkblue"]="#00008B";
+colorNames["darkcyan"]="#008B8B"; colorNames["darkgoldenrod"]="#B8860B";
+colorNames["darkgray"]="#A9A9A9"; colorNames["darkgreen"]="#006400";
+colorNames["darkkhaki"]="#BDB76B"; colorNames["darkmagenta"]="#8B008B";
+colorNames["darkolivegreen"]="#556B2F"; colorNames["darkorange"]="#FF8C00";
+colorNames["darkorchid"]="#9932CC"; colorNames["darkred"]="#8B0000";
+colorNames["darksalmon"]="#E9967A"; colorNames["darkseagreen"]="#8FBC8F";
+colorNames["darkslateblue"]="#483D8B"; colorNames["darkslategray"]="#2F4F4F";
+colorNames["darkturquoise"]="#00CED1"; colorNames["darkviolet"]="#9400D3";
+colorNames["deeppink"]="#FF1493"; colorNames["deepskyblue"]="#00BFFF";
+colorNames["dimgray"]="#696969"; colorNames["dodgerblue"]="#1E90FF";
+colorNames["firebrick"]="#B22222"; colorNames["floralwhite"]="#FFFAF0";
+colorNames["forestgreen"]="#228B22"; colorNames["gainsboro"]="#DCDCDC";
+colorNames["ghostwhite"]="#F8F8FF"; colorNames["gold"]="#FFD700";
+colorNames["goldenrod"]="#DAA520"; colorNames["greenyellow"]="#ADFF2F";
+colorNames["honeydew"]="#F0FFF0"; colorNames["hotpink"]="#FF69B4";
+colorNames["indianred"]="#CD5C5C"; colorNames["indigo"]="#4B0082";
+colorNames["ivory"]="#FFFFF0"; colorNames["khaki"]="#F0E68C";
+colorNames["lavender"]="#E6E6FA"; colorNames["lavenderblush"]="#FFF0F5";
+colorNames["lawngreen"]="#7CFC00"; colorNames["lemonchiffon"]="#FFFACD";
+colorNames["lightblue"]="#ADD8E6"; colorNames["lightcoral"]="#F08080";
+colorNames["lightcyan"]="#E0FFFF"; colorNames["lightgoldenrodyellow"]="#FAFAD2";
+colorNames["lightgreen"]="#90EE90"; colorNames["lightgrey"]="#D3D3D3";
+colorNames["lightpink"]="#FFB6C1"; colorNames["lightsalmon"]="#FFA07A";
+colorNames["lightseagreen"]="#20B2AA"; colorNames["lightskyblue"]="#87CEFA";
+colorNames["lightslategray"]="#778899"; colorNames["lightsteelblue"]="#B0C4DE";
+colorNames["lightyellow"]="#FFFFE0"; colorNames["limegreen"]="#32CD32";
+colorNames["linen"]="#FAF0E6"; colorNames["mediumaquamarine"]="#66CDAA";
+colorNames["mediumblue"]="#0000CD"; colorNames["mediumorchid"]="#BA55D3";
+colorNames["ediumpurple"]="#9370D"; colorNames["mediumseagreen"]="#3CB371";
+colorNames["mediumslateblue"]="#7B68EE"; colorNames["mediumspringgreen"]="#00FA9A";
+colorNames["mediumturquoise"]="#48D1CC"; colorNames["mediumvioletred"]="#C71585";
+colorNames["midnightblue"]="#191970"; colorNames["mintcream"]="#F5FFFA";
+colorNames["mistyrose"]="#FFE4E1"; colorNames["moccasin"]="#FFE4B5";
+colorNames["navajowhite"]="#FFDEAD"; colorNames["oldlace"]="#FDF5E6";
+colorNames["olivedrab"]="#6B8E23"; colorNames["orange"]="#FFA500";
+colorNames["orangered"]="#FF4500"; colorNames["orchid"]="#DA70D6";
+colorNames["palegoldenrod"]="#EEE8AA"; colorNames["palegreen"]="#98FB98";
+colorNames["paleturquoise"]="#AFEEEE"; colorNames["palevioletred"]="#DB7093";
+colorNames["papayawhip"]="#FFEFD5"; colorNames["peachpuff"]="#FFDAB9";
+colorNames["peru"]="#CD853F"; colorNames["pink"]="#FFC0CB";
+colorNames["plum"]="#DDA0DD"; colorNames["powderblue"]="#B0E0E6";
+colorNames["rosybrown"]="#BC8F8F"; colorNames["royalblue"]="#4169E1";
+colorNames["saddlebrown"]="#8B4513"; colorNames["salmon"]="#FA8072";
+colorNames["sandybrown"]="#F4A460"; colorNames["seagreen"]="#2E8B57";
+colorNames["seashell"]="#FFF5EE"; colorNames["sienna"]="#A0522D";
+colorNames["skyblue"]="#87CEEB"; colorNames["slateblue"]="#6A5ACD";
+colorNames["slategray"]="#708090"; colorNames["snow"]="#FFFAFA";
+colorNames["springgreen"]="#00FF7F"; colorNames["steelblue"]="#4682B4";
+colorNames["tan"]="#D2B48C"; colorNames["thistle"]="#D8BFD8";
+colorNames["tomato"]="#FF6347"; colorNames["turquoise"]="#40E0D0";
+colorNames["violet"]="#EE82EE"; colorNames["wheat"]="#F5DEB3";
+colorNames["whitesmoke"]="#F5F5F5"; colorNames["yellowgreen"]="#9ACD32";
+var canvas_bgcolor = "";
+var canvas_width = 200;
+var canvas_height = 200;
+var canvas_noshade = 0;
+var canvas_nofill = 0;
+var canvas_noshadow = 0;
+var canvas_htmltext = 0;
+var canvas_imgtext = 0;
+var canvas_notext = 0;
+// canvas chart extension
+
+var s5NotesWindow;
+var s5NotesWindowLoaded = false;
+var previousSlide = 0;
+var presentationStart = new Date();
+var slideStart = new Date();
+
+var countdown = {
+ timer: 0,
+ state: 'pause',
+ start: new Date(),
+ end: 0,
+ remaining: 0
+};
+
+var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
+if(isIE) var notIE7 = parseInt(navigator.appVersion) < 7 ? 1 : 0;
+var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
+var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
+var isS2 = navigator.userAgent.indexOf('Safari') >= 2 ? 1 : 0;
+
+function hasClass(object, className) {
+ if (!object.className) return false;
+ return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
+}
+
+function hasValue(object, value) {
+ if (!object) return false;
+ return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
+}
+
+function removeClass(object,className) {
+ if (!object || !hasClass(object,className)) return;
+ object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
+}
+
+function addClass(object,className) {
+ if (!object || hasClass(object, className)) return;
+ if (object.className) {
+ object.className += ' '+className;
+ } else {
+ object.className = className;
+ }
+}
+
+function changeClass(object,className) {
+ if (!object) return;
+ object.firstChild.className = className;
+}
+
+function GetElementsWithClassName(elementName,className) {
+ var allElements = document.getElementsByTagName(elementName);
+ var elemColl = new Array();
+ for (var i = 0; i< allElements.length; i++) {
+ if (hasClass(allElements[i], className)) {
+ elemColl[elemColl.length] = allElements[i];
+ }
+ }
+ return elemColl;
+}
+
+function isParentOrSelf(element, id) {
+ if (element == null || element.nodeName=='BODY') return false;
+ else if (element.id == id) return true;
+ else return isParentOrSelf(element.parentNode, id);
+}
+
+function nodeValue(node) {
+ var result = "";
+ if (node.nodeType == 1) {
+ var children = node.childNodes;
+ for (var i = 0; i < children.length; ++i) {
+ result += nodeValue(children[i]);
+ }
+ }
+ else if (node.nodeType == 3) {
+ result = node.nodeValue;
+ }
+ return(result);
+}
+
+function slideLabel() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var list = document.getElementById('jumplist');
+ smax = slideColl.length;
+ for (var n = 0; n < smax; n++) {
+ var obj = slideColl[n];
+ var did = 'slide' + n.toString();
+ obj.setAttribute('id',did);
+ var otext = '';
+ var menu = obj.firstChild;
+ if (!menu) continue; // to cope with empty slides
+ while (menu && menu.nodeType == 3) {
+ menu = menu.nextSibling;
+ }
+ if (!menu) continue; // to cope with slides with only text nodes
+ var menunodes = menu.childNodes;
+ for (var o = 0; o < menunodes.length; o++) {
+ otext += nodeValue(menunodes[o]);
+ }
+ list.options[list.length] = new Option(n + ' : ' + otext, n);
+ }
+}
+
+function currentSlide() {
+ var cs, at, fd, ss;
+ if (document.getElementById) {
+ cs = document.getElementById('currentSlide');
+ } else {
+ cs = document.currentSlide;
+ }
+ fd = fadeModus?"F":"&ndash;";
+ ss = audioSupport?"S":"&ndash;";
+ at = (autoMatic?(playPause?"||":(playLoop?"&gt;0":"&gt;|")):"&ndash;&ndash;");
+ cs.innerHTML = '<div id="plink" nowrap="nowrap">' +
+ '<span id="csFade">[' + fd + ss + ']<\/span>&nbsp;' +
+ '<span id="csHere"><strong>' + snum + '<\/strong><\/span>' +
+ '<span id="csSep">\/<\/span>' +
+ '<span id="csTotal">' + (smax-1) + '<\/span>&nbsp;' +
+ '<span id="csAuto">[' + at + ']<\/span>' +
+ '<\/div>';
+
+ if (snum == 0) {
+ cs.style.visibility = 'hidden';
+ } else {
+ cs.style.visibility = 'visible';
+ }
+}
+
+function go(step) {
+ if (document.getElementById('slideProj').disabled || step == 0) return;
+ jl = document.getElementById('jumplist');
+ cid = 'slide' + snum;
+ var ce = document.getElementById(cid);
+ if (incrementals[snum].length > 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ removeClass(incrementals[snum][i], 'current');
+ removeClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ if (step != 'j') {
+ snum += step;
+ lmax = smax - 1;
+ if (snum > lmax) snum = lmax;
+ if (snum < 0) snum = 0;
+ }else {
+ snum = parseInt(jl.value);
+ }
+ nid = 'slide' + snum;
+ var ne = document.getElementById(nid);
+ if (!ne) {
+ ne = document.getElementById('slide0');
+ nid = 'slide0';
+ snum = 0;
+ }
+ if (step < 0) {
+ incpos = incrementals[snum].length
+ }else {
+ incpos = 0;
+ }
+ if (incrementals[snum].length > 0 && incpos == 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ if (hasClass(incrementals[snum][i], 'current')) {
+ incpos = i + 1;
+ }else {
+ addClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ }
+ if (incrementals[snum].length > 0 && incpos > 0) {
+ addClass(incrementals[snum][incpos - 1], 'current');
+ }
+ var guru = document.getElementById('guru');
+ if(guru && snum==0) {
+ guru.style.visibility = 'visible';
+ }else if(guru && snum>0) {
+ guru.style.visibility = 'hidden';
+ }
+ if(tranSitions && s5mode && fadeModus) {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {fadeoutSound(curSoundID,true); } // audio support
+ }
+ changeOpac(0,nid);
+ changeOpac(100,cid);
+ ce.style.visibility = 'visible';
+ shiftOpacity(cid,fadeDuration);
+ window.setTimeout("changeSlides()",fadeDuration);
+ }else {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {stopSound(curSoundID); } // audio support
+ }
+ ce.style.visibility = 'hidden';
+ if (isOp) location.hash = nid;
+ ne.style.visibility = 'visible';
+ finishSlides();
+ }
+}
+
+function changeSlides() {
+ if(nid != cid) changeOpac(100,cid);
+ document.getElementById(cid).style.visibility = 'hidden';
+ document.getElementById(nid).style.visibility = 'visible';
+ if (isOp) location.hash = nid;
+ shiftOpacity(nid,fadeDuration);
+ window.setTimeout("finishSlides()",fadeDuration);
+}
+
+function finishSlides() {
+ jl.selectedIndex = snum;
+ currentSlide();
+ loadNote();
+ permaLink();
+ number = undef;
+ if(sound[getSoundID(nid)]) {
+ playSound(nid); // audio support
+ }else if(sound[bgSoundItem] && curSoundID != bgSoundItem) {
+ playSound(bgSoundItem); // audio support
+ }
+}
+
+function goTo(target) {
+ if (target >= smax || target == snum) return;
+ go(target - snum);
+}
+
+function subgo(step) {
+ if (step > 0) {
+ removeClass(incrementals[snum][incpos - 1],'current');
+ removeClass(incrementals[snum][incpos], 'incremental');
+ if(tranSitions && s5mode && fadeModus) {
+ if(!incrementals[snum][incpos].id) {
+ var tmp = new Date(); tid = "inc" + String(tmp.getTime());
+ incrementals[snum][incpos].id = tid;
+ }else {
+ tid = incrementals[snum][incpos].id;
+ }
+ if(typeof(incrementals[snum][incpos].src) != "undefined" || incrementals[snum][incpos].getContext) {
+ changeOpac(0,tid);
+ addClass(incrementals[snum][incpos],'current');
+ shiftOpacity(tid,incrDuration);
+ setTimeout("nextInc()",incrDuration);
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ } else {
+ incpos--;
+ removeClass(incrementals[snum][incpos],'current');
+ addClass(incrementals[snum][incpos], 'incremental');
+ addClass(incrementals[snum][incpos - 1],'current');
+ loadNote();
+ }
+}
+
+function nextInc() {
+ incpos++;
+ loadNote();
+}
+
+function toggle() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ var guru = document.getElementById('guru');
+ if (!slides.disabled) {
+ stopPlay();
+ if(audioSupport && !swfUnloaded) stopAllSounds();
+ slides.disabled = true;
+ outline.disabled = false;
+ s5mode = false;
+ fontSize(1,'em');
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'visible';
+ }
+ if(guru) guru.style.visibility = 'hidden';
+ } else {
+ slides.disabled = false;
+ outline.disabled = true;
+ s5mode = true;
+ fontScale();
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'hidden';
+ }
+ slideColl[snum].style.visibility = 'visible';
+ if(guru && snum==0) guru.style.visibility = 'visible';
+ }
+}
+
+function showHide(action) {
+ var obj = GetElementsWithClassName('*','hideme')[0];
+ switch (action) {
+ case 's':
+ obj.style.visibility = 'visible';
+ break;
+ case 'h':
+ obj.style.visibility = 'hidden';
+ break;
+ case 'k':
+ if (obj.style.visibility != 'visible') {
+ obj.style.visibility = 'visible';
+ } else {
+ obj.style.visibility = 'hidden';
+ }
+ break;
+ }
+}
+
+function keys(key) {
+ if (!key) {
+ key = event;
+ key.which = key.keyCode;
+ }
+ if (helpmode) {
+ dumpHelpReq();
+ return;
+ }
+ if (key.which == 84 && !isOp) {
+ toggle();
+ return;
+ }
+ if (s5mode) {
+ if (autoMatic) {
+ switch (key.which) {
+ case 70: // f/ading on/off
+ switchFade();
+ break;
+ case 83: // s/ound on/off
+ toggleSounds();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 65: // a/utoplay on/off
+ stopPlay();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 80: // p/ause
+ case 32: // spacebar
+ pausePlay();
+ break;
+ }
+ }else {
+ switch (key.which) {
+ case 8: // backspace = HELP
+ createHelpReq();
+ break;
+ case 10: // return
+ case 13: // enter
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ if(number != undef) {
+ goTo(number);
+ break;
+ }
+ case 32: // spacebar
+ case 34: // page down
+ case 39: // rightkey
+ case 40: // downkey
+ if(number != undef) {
+ go(number);
+ } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ break;
+ case 33: // page up
+ case 37: // leftkey
+ case 38: // upkey
+ if(number != undef) {
+ go(-1 * number);
+ } else if (!incrementals[snum] || incpos <= 0) {
+ go(-1);
+ } else {
+ subgo(-1);
+ }
+ break;
+ case 65: // a/utoplay
+ startPlay();
+ break;
+ case 72: // h
+ case 36: // home
+ goTo(0);
+ break;
+ case 69: // e
+ case 35: // end
+ goTo(smax-1);
+ break;
+ case 70: // f/ade transitions on/off
+ switchFade();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 83: // s/ound support on/off
+ toggleSounds();
+ break;
+ case 27: // escape
+ case 81: // q
+ if(!isOp) byby();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 78: // n
+ createNotesWindow();
+ break;
+ }
+ if (key.which < 48 || key.which > 57) {
+ number = undef;
+ } else {
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
+ }
+ }
+ }
+ return false;
+}
+
+function clicker(e) {
+ number = undef;
+ var target;
+ if (window.event) {
+ target = window.event.srcElement;
+ e = window.event;
+ } else {
+ target = e.target;
+ }
+ if (target.href != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
+ if (!helpmode) {
+ if (!e.which || e.which == 1) {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ }
+ } else {
+ dumpHelpReq();
+ }
+}
+
+function findSlide(hash) {
+ var target = null;
+ var slides = GetElementsWithClassName('*','slide');
+ for (var i = 0; i < slides.length; i++) {
+ var targetSlide = slides[i];
+ if ( (targetSlide.name && targetSlide.name == hash)
+ || (targetSlide.id && targetSlide.id == hash) ) {
+ target = targetSlide;
+ break;
+ }
+ }
+ while(target != null && target.nodeName != 'BODY') {
+ if (hasClass(target, 'slide')) {
+ return parseInt(target.id.slice(5));
+ }
+ target = target.parentNode;
+ }
+ return null;
+}
+
+function slideJump() {
+ if (window.location.hash == null) return;
+ var sregex = /^#slide(\d+)$/;
+ var matches = sregex.exec(window.location.hash);
+ var dest = null;
+ if (matches != null) {
+ dest = parseInt(matches[1]);
+ } else {
+ dest = findSlide(window.location.hash.slice(1));
+ }
+ if (dest != null)
+ go(dest - snum);
+}
+
+function fixLinks() {
+ var thisUri = window.location.href;
+ thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
+ var aelements = document.getElementsByTagName('A');
+ for (var i = 0; i < aelements.length; i++) {
+ var a = aelements[i].href;
+ var slideID = a.match('\#slide[0-9]{1,2}');
+ if ((slideID) && (slideID[0].slice(0,1) == '#')) {
+ var dest = findSlide(slideID[0].slice(1));
+ if (dest != null) {
+ if (aelements[i].addEventListener) {
+ aelements[i].addEventListener("click", new Function("e",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "if (e.preventDefault) e.preventDefault();"), true);
+ } else if (aelements[i].attachEvent) {
+ aelements[i].attachEvent("onclick", new Function("",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "event.returnValue = false;"));
+ }
+ }
+ }
+ }
+}
+
+function externalLinks() {
+ if (!document.getElementsByTagName) return;
+ var anchors = document.getElementsByTagName('a');
+ for (var i=0; i<anchors.length; i++) {
+ var anchor = anchors[i];
+ if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
+ anchor.target = '_blank';
+ addClass(anchor,'external');
+ }
+ }
+}
+
+function permaLink() {
+ document.getElementById('plink').href = window.location.pathname + '#slide' + snum;
+}
+
+function createControls() {
+ var controlsDiv = document.getElementById("controls");
+ if (!controlsDiv) return;
+ var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
+ var hideDiv, hideList = '';
+ if (controlVis == 'hidden') {
+ hideDiv = hider;
+ } else {
+ hideList = hider;
+ }
+ if(isOp) {
+ var str = '';
+ }else {
+ var str = '<a accesskey="t" id="sheet" title="toggle CSS" href="javascript:toggle();">&plusmn;<\/a>';
+ }
+ if(isIE) {
+ var tmp = "move around&xA0;until the color&xA0;change to red!";
+ }else if(isS2) {
+ var tmp = "move around\r\nuntil the color\r\nchange to red!";
+ }else {
+ var tmp = "move around until color change to red!";
+ }
+ if(isIE) {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] for keyboard help!"><ul>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst" style="vertical-align: middle; width: 160px;"><select style="cursor: auto; width: 160px; height: auto;" id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del" style="vertical-align: middle; width: 52px;"><select style="cursor: auto; width: 52px; height: auto;" id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul><\/div><\/form>';
+ }else {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] or double click this area for keyboard help!" ondblclick="createHelpReq();"><ul>' +
+ '<li id="exit"><a href="javascript:byby();" accesskey="q" title="exit Show"><\/a><\/li>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li class="vr"><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst"><a id="list" style="cursor:wait;" title="' + tmp + '"><\/a><select id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="fadeLinks" class="vr"><\/li>' +
+ '<li id="fade"><a class="isoff" href="javascript:switchFade();" accesskey="f" title="Transions"><\/a><\/li>' +
+ '<li id="audioLinks" class="vr"><\/li>' +
+ '<li id="audio"><a class="isoff" href="javascript:toggleSounds();" accesskey="s" title="Sounds" ><\/a><\/li>' +
+ '<li id="vol"><a id="volume" style="cursor:wait;" title="' + tmp + '"><\/a><select id="volumelist" title="select Volume" onchange="setVolume();"><option value="100">100<\/option><option value="90">90<\/option><option value="80">80<\/option><option value="70">70<\/option><option value="60">60<\/option><option value="50">50<\/option><option value="40">40<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="10">10<\/option><option value="0">0<\/option><\/select><\/li>' +
+ '<li id="autoLinks" class="vr"><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del"><a id="delay" style="cursor:wait;" title="' + tmp + '"><\/a><select id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul>' +
+ '<a href="http://s5.netzgesta.de" target="_blank" title="S5 Reloaded"><img style="position: absolute; right: 0; bottom: 0;" src="data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAYAAAASYli2AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAYpSURBVHjaYvz//z8DOYCRkZEZRAEx0Ij/f2HiAAHEgqYIpACkkB1J7g8Q/wLRIJ1QNSB5fiDmAOLvQKHPQPoHSB4ggFiQDGMCUnxALAPECkAsBLIdiD8A8SMgfghU8wlqkTgQK1ZVVWldv3792fr16y8D+c9AhgMEECPIy1DDRIDYAojdzMzMWNXV1UG2/v/y5Qvzw4cPP587d24/kH8Gar/uwoULQ+/cufNFXFyciZmZ+UVmZuZKoFmvAQII5kJOIDbi4uKK2Llz53EbG5vP6GGWn5+vMWnSpJtA5jcg5v327Rtnc3PzfSD79+rVq2WBNBtIHUAAwQzkAWKzBQsWnIUZFhISovXmzZsfkpKSDD09PY8kJCR+QtWCguGvrKwsz7Rp07Q4ODh+srCwgILiH0gSIIBgBrICsUBoaCgorBiANgqvXbtWDMg8AcQf9+7d+x0o9xbI/gJV/3fVqlUvmJiY/gIdcaWhoYETahEDQADBDPwNxO9h3gNpBiq6f/HiRbWjR4+yvnr16grQNbeh6kCWsxkYGIhClT8yNDQUgyYhBoAAYoIKfgXi06mpqUowQ+vr6x+uW7fu0suXL8+uWbOGS0BAwB7kC6jXvqmoqLDIyclxzZo1S4udnR2WtBgAAggWyyCXSgOxZUxMjGpWVtY7S0vLr8iRsnnzZl4/P7/DQCYoYtSA2DApKUkVGNNPDh06dBrIvwU06xNAAMEM5AIKqAOxCjQsmHl5eXWdnJx4N2zYcB4prd4CUpfwJRuAAGJCimULoGYpbm5uZ5DBnz9/5tq4caPWkSNHeJEc+g0aTFzfv3/nACabjzk5OW8FBQVloLmHASCAYJECUiTg7+//HJiQTzY2NsrfvXv3n7m5+T5YMgJGEkjDS2gY/pKRkeHt7Ow0Bsb0v9+/fz+HxTJAAMG8DHKFLTC9aRUXF79BT9Qgw4CWHAAy70FdYgjEDgkJCTpWVlYMQBfeAaaMPqBZbwECCGYgMzQGQSleCehS0X///jEDvf9lxYoVoOTyAIjfANX+BqrlBrL1gLFf09vb+0FaWvoHMBctA6USUKQABBAjrPiCliKg7AOKIG5ougLlju9Ipc1foDJWqMWGhYWFtsBg4RISEnrg5uY2BWQgQACxIBkGMkQKijmRfPwXWuI8ASp7DQ1vEP4DDO8PwBzzDJheT0CLPQaAAEJOh0o8zAzeihwMiv+gGZ0B4sz/bIwM797/YTh1/wfDIWj5qAfMmtFnzpz5ICIiwqKoqPgjKChoOtCs5wABhJyXpUCGzddgOIethJ71jEFi1nNwgQrKz8zv37//097eDop15qVLl0pAzWAACCAWhEMYOJFdduELA++b3wxsTIwMfzmYGH6xMDG8gYYpKAg+cnJy/gB6VwuYZFiA7E+wvAwQQCy46ozexwzG17+BYx6UVE4B8Vmo68CRFR0dDQo3UAHBBUwJ4lCLGAACCNnAv4zQxAkCxbIMZ0EuBIYb98EPDFo3voGTzjOogVzArGf969cvNmC2+wssHD7BDAQIIBakmHwPDPy3MAMNeBhgpfbbVEkGhqQbDJaXvjI8BPJB4jz79u37DcwlP+fPn38NuTwECCBkA1+8+8Nwtusxg+STHwwcP/8z8EuwMXA1KjBcBSlwEmRgBhrID/U2O7QMBIEHxsbGkrAwBAggmIGgNMT64AfDWyB+By0EQMVZlC0/wwsXQYa38hzgCGGBWv5ZU1OT4c+fP8yLFi1SA3r5Haw8BAggmIGg5KBpJ8BgeOYTg8S3f2DN/OxMDNwgw0AKnv0EJ+avsITu7u6+EZqzQEHwHFqaMwAEEAtShS/pLcTwrU+Z4QwsyQANOwIL06tfGV5BqwmQWoGKigoLYJnJvWPHjhstLS169vb2M0DqAAIIVh6CXHT/9ndIawEUITCXgUDrQwbGbe8YjkJdAzZQVVVV/t69e8LAgtUYaNgxWKQABBByacMHzfTK9gIMYkBZpj//GT4c+8gAKm1AsfseqPYPtHTXAtaEacBqlgHoyq+srKw3XV1dFwHlvwEEECNyYwmp3cIJjbUf0DbLP7RGEg+0bcMCjQxQzH8BWQgQQIzktr5wAYAAYmKgMgAIMAAp8Fx3osz1lgAAAABJRU5ErkJggg==" width="20" height="32" alt="S5" \/><\/a>' +
+ '<\/div><\/form>';
+ }
+ if (controlVis == 'hidden') {
+ var hidden = document.getElementById('navLinks');
+ } else {
+ var hidden = document.getElementById('jumplist');
+ }
+ addClass(hidden,'hideme');
+}
+
+function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
+ if (!s5mode && !isOp) return false;
+ var hScreen = screen.width; var vScreen = screen.height;
+ var vWindow = window.outerHeight; var hWindow = window.outerWidth;
+ if (isOp && s5mode && defaultView=='slideshow' && ((hScreen != hWindow) || (vScreen != vWindow))) {
+ toggle();
+ return false;
+ }
+ if (isOp && !s5mode && ((hScreen != hWindow) || (vScreen != vWindow))) return false;
+ if (isOp && !s5mode && (hScreen == hWindow) && (vScreen == vWindow)) toggle();
+ var vScale = 48; // both yield 16 (the usual browser default) at 1024x768
+ var hScale = 64; // perhaps should auto-calculate based on theme's declared value?
+ if (window.innerHeight) {
+ var vSize = window.innerHeight;
+ var hSize = window.innerWidth;
+ } else if (document.documentElement.clientHeight) {
+ var vSize = document.documentElement.clientHeight;
+ var hSize = document.documentElement.clientWidth;
+ } else if (document.body.clientHeight) {
+ var vSize = document.body.clientHeight;
+ var hSize = document.body.clientWidth;
+ } else {
+ var vSize = 700; // assuming 1024x768, minus chrome and such equals 8:5
+ var hSize = 1024; // these do not account for kiosk mode or Opera Show
+ }
+ var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
+ extendImgSizes(newSize); // scalable images extension
+ extendCanSizes(newSize); // scalable canvas extension
+ extendObjSizes(newSize); // scalable object extension
+ fontSize(newSize,"px");
+ if(!isS2 || firstTime==0) {
+ generateCanvas(); // dynamic canvas extension
+ }
+ if (isGe) { // hack to counter incremental reflow bugs
+ var obj = document.getElementsByTagName('body')[0];
+ obj.style.visibility = 'hidden';
+ obj.style.display = 'none';
+ obj.style.display = 'block';
+ obj.style.visibility = 'visible';
+ changeOpac(100,'slide' + snum);
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("fixReflow()",10);
+ }else {
+ setListPos(); // invisible select extension
+ }
+}
+
+function fixReflow() {
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("finishReflow()",10);
+}
+function finishReflow() {
+ setListPos(); // invisible select extension
+}
+
+function fontSize(val,fmt) {
+ var value = val + fmt;
+ if (!(s5ss = document.getElementById('s5ss'))) {
+ if (!document.createStyleSheet) {
+ document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
+ s5ss.setAttribute('media','screen, projection');
+ s5ss.setAttribute('id','s5ss');
+ } else {
+ document.createStyleSheet();
+ document.s5ss = document.styleSheets[document.styleSheets.length - 1];
+ }
+ }
+ if (!(document.s5ss && document.s5ss.addRule)) {
+ while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
+ s5ss.appendChild(document.createTextNode('html {font-size: ' + value + ' !important;}'));
+ } else {
+ document.s5ss.addRule('html','font-size: ' + value + ' !important;');
+ }
+}
+
+function windowChange() {
+ fontScale();
+}
+
+function notOperaFix() {
+ slideCSS = document.getElementById('slideProj').href;
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ slides.setAttribute('media','screen');
+ outline.disabled = true;
+ if (isGe) {
+ slides.setAttribute('href','null'); // Gecko fix
+ slides.setAttribute('href',slideCSS); // Gecko fix
+ }
+ if ((isIE && notIE7) && document.styleSheets && document.styleSheets[0]) {
+ document.styleSheets[0].addRule('img', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('div', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('.slide', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ }
+}
+
+function getIncrementals(obj) {
+ var incrementals = new Array();
+ if (!obj)
+ return incrementals;
+ var children = obj.childNodes;
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ if (hasClass(child, 'incremental')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'incremental');
+ for (var j = 0; j < child.childNodes.length; j++) {
+ if (child.childNodes[j].nodeType == 1) {
+ addClass(child.childNodes[j], 'incremental');
+ }
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ removeClass(child,'incremental');
+ }
+ }
+ if (hasClass(child, 'show-first')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'show-first');
+ if (child.childNodes[isGe].nodeType == 1) {
+ removeClass(child.childNodes[isGe], 'incremental');
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ }
+ }
+ incrementals = incrementals.concat(getIncrementals(child));
+ }
+ return incrementals;
+}
+
+function createIncrementals() {
+ var incrementals = new Array();
+ for (var i = 0; i < smax; i++) {
+ incrementals[i] = getIncrementals(document.getElementById('slide'+i));
+ }
+ return incrementals;
+}
+
+function trap(e) {
+ if (!e) {
+ e = event;
+ e.which = e.keyCode;
+ }
+ try {
+ modifierKey = e.ctrlKey || e.altKey || e.metaKey;
+ }
+ catch(e) {
+ modifierKey = false;
+ }
+ return modifierKey || e.which == 0;
+}
+
+// notes extension
+function noteLabel() { // Gives notes id's to match parent slides
+ var notes = GetElementsWithClassName('div','notes');
+ for (var i = 0; i < notes.length; i++) {
+ var note = notes[i];
+ var id = 'note' + note.parentNode.id.substring(5);
+ note.setAttribute('id',id);
+ }
+ resetElapsedSlide();
+ resetRemainingTime();
+ window.setInterval('updateElaspedTime()', 1000);
+}
+
+function createNotesWindow() { // creates a window for our notes
+ if (!s5NotesWindow || s5NotesWindow.closed) { // Create the window if it doesn't exist
+ s5NotesWindowLoaded = false;
+ // Note: Safari has a tendency to ignore window options preferring to default to the settings of the parent window, grr.
+ s5NotesWindow = window.open(s5Path+'ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0');
+ }
+ if (s5NotesWindowLoaded) { // Load the current note if the Note HTML has loaded
+ loadNote();
+ } else { // Keep trying...
+ window.setTimeout('createNotesWindow()', 50);
+ }
+}
+
+function loadNote() {
+// Loads a note into the note window
+ var notes = nextNotes = '<em class="disclaimer">There are no notes for this slide.</em>';
+ if (document.getElementById('note' + snum)) {
+ notes = document.getElementById('note' + snum).innerHTML;
+ }
+ if (document.getElementById('note' + (snum + 1))) {
+ nextNotes = document.getElementById('note' + (snum + 1)).innerHTML;
+ }
+
+ var jl = document.getElementById('jumplist');
+ var slideTitle = jl.options[jl.selectedIndex].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex) ? ' (' + jl.selectedIndex + '/' + (smax - 1) + ')' : '');
+ if (incrementals[snum].length > 0) {
+ slideTitle += ' <small>[' + incpos + '/' + incrementals[snum].length + ']</small>';
+ }
+ if (jl.selectedIndex < smax - 1) {
+ var nextTitle = jl.options[jl.selectedIndex + 1].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex + 1) ? ' (' + (jl.selectedIndex + 1) + '/' + (smax - 1) + ')' : '');
+ } else {
+ var nextTitle = '[end of slide show]';
+ }
+
+ if (s5NotesWindow && !s5NotesWindow.closed && s5NotesWindow.document) {
+ s5NotesWindow.document.getElementById('slide').innerHTML = slideTitle;
+ s5NotesWindow.document.getElementById('notes').innerHTML = notes;
+ s5NotesWindow.document.getElementById('next').innerHTML = nextTitle;
+ s5NotesWindow.document.getElementById('nextnotes').innerHTML = nextNotes;
+ }
+ resetElapsedSlide();
+}
+
+function minimizeTimer(id) {
+ var obj = s5NotesWindow.document.getElementById(id);
+ if (hasClass(obj,'collapsed')) {
+ removeClass(obj,'collapsed');
+ } else {
+ addClass(obj,'collapsed');
+ }
+}
+
+function resetElapsedTime() {
+ presentationStart = new Date();
+ slideStart = new Date();
+ updateElaspedTime();
+}
+
+function resetElapsedSlide() {
+ if (snum != previousSlide) {
+ slideStart = new Date();
+ previousSlide = snum;
+ updateElaspedTime();
+ }
+}
+
+function updateElaspedTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var now = new Date();
+ var ep = s5NotesWindow.document.getElementById('elapsed-presentation');
+ var es = s5NotesWindow.document.getElementById('elapsed-slide');
+ ep.innerHTML = formatTime(now.valueOf() - presentationStart.valueOf());
+ es.innerHTML = formatTime(now.valueOf() - slideStart.valueOf());
+}
+
+function resetRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var startField = s5NotesWindow.document.getElementById('startFrom');
+ startFrom = readTime(startField.value);
+ countdown.remaining = startFrom * 60000; // convert to msecs
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var timeLeft = formatTime(countdown.remaining);
+ tl.innerHTML = timeLeft;
+}
+
+function updateRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var now = new Date();
+ if (countdown.state == 'run') {
+ countdown.remaining = countdown.end - now;
+ }
+ tl.style.color = '';
+ tl.style.backgroundColor = '';
+ if (countdown.remaining >= 0) {
+ var timeLeft = formatTime(countdown.remaining);
+ removeClass(tl,'overtime');
+ if (countdown.remaining < 300000) {
+ tl.style.color = 'rgb(' + (255-Math.round(countdown.remaining/2000)) + ',0,0)';
+ tl.style.backgroundColor = 'rgb(255,255,' + (Math.round(countdown.remaining/2000)) + ')';
+ }
+ } else {
+ var timeLeft = '-' + formatTime(-countdown.remaining);
+ addClass(tl,'overtime');
+ }
+ tl.innerHTML = timeLeft;
+}
+
+function toggleRemainingTime() {
+ if (countdown.state == 'pause') countdown.state = 'run'; else countdown.state = 'pause';
+ if (countdown.state == 'pause') {
+ window.clearInterval(countdown.timer);
+ }
+ if (countdown.state == 'run') {
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ countdown.timer = window.setInterval('updateRemainingTime()', 1000);
+ }
+}
+
+function alterRemainingTime(amt) {
+ var change = amt * 60000; // convert to msecs
+ countdown.end += change;
+ countdown.remaining += change;
+ updateRemainingTime();
+}
+
+function formatTime(msecs) {
+ var time = new Date(msecs);
+
+ var hrs = time.getUTCHours() + ((time.getUTCDate() -1) * 24); // I doubt anyone will spend more than 24 hours on a presentation or single slide but just in case...
+ hrs = (hrs < 10) ? '0'+hrs : hrs;
+ if (hrs == 'NaN' || isNaN(hrs)) hrs = '--';
+
+ var min = time.getUTCMinutes();
+ min = (min < 10) ? '0'+min : min;
+ if (min == 'NaN' || isNaN(min)) min = '--';
+
+ var sec = time.getUTCSeconds();
+ sec = (sec < 10) ? '0'+sec : sec;
+ if (sec == 'NaN' || isNaN(sec)) sec = '--';
+
+ return hrs + ':' + min + ':' + sec;
+}
+
+function readTime(val) {
+ var sregex = /:/;
+ var matches = sregex.exec(val);
+ if (matches == null) {
+ return val;
+ } else {
+ var times = val.split(':');
+ var hours = parseInt(times[0]);
+ var mins = parseInt(times[1]);
+ var total = (hours * 60) + mins;
+ return total;
+ }
+}
+// notes extension
+
+// startup process
+function createSlideShow() {
+ defaultCheck();
+ if(!isIE) createDetector(); // (degrade IE) scalable images extension
+ if(opac!=0 || isIE) { // &&!isIE (degrade IE)
+ tranSitions = false;
+ fadeModus = false;
+ }
+ if(tranSitions && document.getElementById && document.createElement){
+ createProgress();
+ var nop=document.getElementById('StartupControl');
+ nop.onload = dumpProgress;
+ }else {
+ startup();
+ showAll();
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+ }
+}
+
+function defaultCheck() {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'defaultView') {
+ defaultView = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'controlVis') {
+ controlVis = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'tranSitions') {
+ tranSitions = (allMetas[i].content == "true") ? true : false;
+ fadeModus = (tranSitions == true) ? true : false;
+ }
+ if (allMetas[i].name == 'fadeDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ fadeDuration = Math.max(200,Math.min(tmp,2000));
+ }
+ if (allMetas[i].name == 'incrDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ incrDuration = Math.max(50,Math.min(tmp,500));
+ }
+ if (allMetas[i].name == 'autoMatic') {
+ autoMatic = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playLoop') {
+ playLoop = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playDelay') {
+ var tmp = parseInt(allMetas[i].content);
+ playDelay = Math.max(5,Math.min(tmp,90))*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ }
+ if (allMetas[i].name == 'audioSupport') {
+ audioSupport = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'audioVolume') {
+ var tmp = parseInt(allMetas[i].content);
+ audioVolume = Math.max(0,Math.min(tmp,100));
+ }
+ if (allMetas[i].name == 'audioError') {
+ audioError = (allMetas[i].content == "true") ? true : false;
+ }
+ }
+}
+
+function createProgress() {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "StartupProgress";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=100)";
+ }else {
+ pg.style.opacity = 1.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/progress.gif)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+
+ var im = document.createElement('img');
+ im.id = "StartupControl";
+ im.src = s5Path+"ui/graphic_support/blank.gif?" + new Date().valueOf();
+ document.getElementsByTagName("body")[0].appendChild(im);
+}
+
+function startup() {
+ createControls(); // hallvord
+ slideLabel();
+ incrementals = createIncrementals();
+ noteLabel(); // [SI:060104] must follow slideLabel()
+ loadNote();
+ fixLinks();
+ externalLinks();
+ fontScale();
+ if (!isOp) {
+ if(isIE) {
+ document.getElementById('lst').style.backgroundImage = 'none';
+ document.getElementById('del').style.backgroundImage = 'none';
+ }else {
+ document.getElementById('audio').style.backgroundImage = 'none';
+ }
+ notOperaFix();
+ }else if(isOp) {
+ var obj = document.getElementById('exit');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('exit').style.opacity = 0.5;
+ obj = document.getElementById('toggle');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('toggle').style.opacity = 0.5;
+ document.getElementById('jumplist').style.visibility = 'hidden';
+ document.getElementById('list').style.visibility = 'hidden';
+ document.getElementById('lst').style.opacity = 0.5;
+ obj = document.getElementById('audio');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('audio').style.opacity = 0.5;
+ document.getElementById('volumelist').style.visibility = 'hidden';
+ document.getElementById('volume').style.visibility = 'hidden';
+ document.getElementById('vol').style.opacity = 0.5;
+ document.getElementById('delaylist').style.visibility = 'hidden';
+ document.getElementById('delay').style.visibility = 'hidden';
+ document.getElementById('del').style.opacity = 0.5;
+ }
+ slideJump();
+ if (defaultView == 'outline') toggle();
+ document.onkeyup = keys;
+ document.onkeypress = trap;
+ document.onclick = clicker;
+}
+
+function preloadImgages() {
+ var temp = '';
+ var objects = document.getElementsByTagName('img');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].src != '') {
+ temp = new Image();
+ temp.src = objects[i].src;
+ }
+ }
+}
+
+function showAll() {
+ var obj1 = GetElementsWithClassName('div','presentation')[0];
+ if(!obj1) var obj1 = GetElementsWithClassName('ol','presentation')[0];
+ var obj2 = GetElementsWithClassName('div','layout')[0];
+ if(!obj1){}else {obj1.style.display = 'block'};
+ if(!obj2){}else {obj2.style.display = 'block'};
+}
+
+function dumpProgress() {
+ document.body.removeChild(document.getElementById('StartupControl'));
+ startup();
+ preloadImgages();
+ showAll();
+ createSoundManagerScript();
+ shiftOpacity('StartupProgress',1000);
+ window.setTimeout("removeProgress()",1000);
+}
+
+function removeProgress() {
+ document.body.removeChild(document.getElementById('StartupProgress'));
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+}
+function panelSetup() {
+ if(playPause) {
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ if(playLoop) {
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ if(audioSupport && !isIE && !isOp) {
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ }
+ if(fadeModus && !isIE) {
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ if(autoMatic) {
+ var obj = document.getElementById('auto'); changeClass(obj,'ison');
+ startPlay();
+ }
+ if(audioVolume && !isIE && !isOp) {
+ var idx = 0;
+ if(audioVolume >= 95 && audioVolume <= 100) {idx = 0;}
+ else if(audioVolume >= 85 && audioVolume < 95) {idx = 1;}
+ else if(audioVolume >= 75 && audioVolume < 85) {idx = 2;}
+ else if(audioVolume >= 65 && audioVolume < 75) {idx = 3;}
+ else if(audioVolume >= 55 && audioVolume < 65) {idx = 4;}
+ else if(audioVolume >= 45 && audioVolume < 55) {idx = 5;}
+ else if(audioVolume >= 35 && audioVolume < 45) {idx = 6;}
+ else if(audioVolume >= 25 && audioVolume < 35) {idx = 7;}
+ else if(audioVolume >= 15 && audioVolume < 25) {idx = 8;}
+ else if(audioVolume >= 5 && audioVolume < 15) {idx = 9;}
+ else {idx = 10;}
+ document.getElementById('volumelist').selectedIndex = idx;
+ }
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+}
+// startup process
+
+// shutdown process
+function byby() {
+ stopPlay();
+ if(tranSitions && fadeModus && s5mode && !isOp) {
+ fadeoutSound(curSoundID,true); // audio support
+ var pg = document.createElement('div');
+ pg.id = "GoodBy";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=0)";
+ }else {
+ pg.style.opacity = 0.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/finish.gif)";
+ document.getElementsByTagName("body")[0].appendChild(pg);
+ shiftOpacity('GoodBy',1000);
+ window.setTimeout("history.back()",1000);
+ }else {
+ stopSound(curSoundID);
+ history.back();
+ }
+}
+// shutdown process
+
+// scalable images extension
+function createDetector() {
+ var em = document.createElement('div');
+ em.id='EMSizeControl'; em.style.position="absolute"; em.style.left="-999px";
+ em.style.width="1em"; em.style.height="1em"; em.style.opacity=0.0;
+ document.getElementsByTagName("body")[0].appendChild(em);
+ var nop=document.getElementById('EMSizeControl');
+ if(!nop||findPosX(nop)!=-999) {}else {
+ opac=document.getElementById('EMSizeControl').style.opacity;
+ empx=document.getElementById('EMSizeControl').offsetHeight;
+ document.body.removeChild(document.getElementById('EMSizeControl'));
+ var objects = document.getElementsByTagName('img');
+ var j = 0; var i = 0; var k = 0; var d; var obj;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ images[j] = objects[i];
+ ++j;
+ }
+ }
+ var objects = document.getElementsByTagName('canvas'); j = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ canvas[objects[i].id] = objects[i];
+ if(j==0) {
+ if(objects[i].getContext) {
+ canvasSupport = true;
+ }
+ ++j;
+ }
+ }
+ }
+ if(canvasSupport!=true) {
+ for (d in canvas) {
+ try {
+ canvas[d].setAttribute("width",1);
+ canvas[d].setAttribute("height",1);
+ } catch (e) {
+ }
+ }
+ }
+ var objects = document.getElementsByTagName('table');
+ j = 0; k = 0; l = 0; var w; var h; var tmp; var cnt;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^piechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ piecharts[j] = objects[i];
+ em = piecharts[j].getAttribute("summary");
+ if(em != "") em = "," + em;
+ piecharts[j].setAttribute("summary", w + "," + h + em);
+ ++j;
+ }
+ }
+ }
+ if(objects[i].className.match(/^barchart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ barcharts[k] = objects[i];
+ em = barcharts[k].getAttribute("summary");
+ if(em != "") em = "," + em;
+ barcharts[k].setAttribute("summary", w + "," + h + em);
+ ++k;
+ }
+ }
+ }
+ if(objects[i].className.match(/^linechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ linecharts[l] = objects[i];
+ em = linecharts[l].getAttribute("summary");
+ if(em != "") em = "," + em;
+ linecharts[l].setAttribute("summary", w + "," + h + em);
+ ++l;
+ }
+ }
+ }
+ }
+ objects = document.getElementsByTagName('object'); j = 0; i = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ medias[j] = objects[i]; ++j;
+ if(!isIE) {
+ if(objects[i].getAttributeNode("classid")) objects[i].removeAttributeNode(objects[i].getAttributeNode("classid"));
+ if(objects[i].getAttributeNode("codebase")) objects[i].removeAttributeNode(objects[i].getAttributeNode("codebase"));
+ }
+ }
+ }
+ }
+}
+function extendImgSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < images.length; i++) {
+ w=images[i].getAttribute("width",0);
+ h=images[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ images[i].style.width=Math.floor(w*q)+"px";
+ images[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+
+function extendCanSizes(f) {
+ if(empx>0 && canvasSupport) {
+ var q = (f/empx); var w = 0; var h = 0; var tmp = ""; var cnt; var obj;
+ for(var i=0; i < piecharts.length; i++) {
+ if(piecharts[i].getAttribute("summary")) {
+ tmp = piecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = piecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < barcharts.length; i++) {
+ if(barcharts[i].getAttribute("summary")) {
+ tmp = barcharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = barcharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < linecharts.length; i++) {
+ if(linecharts[i].getAttribute("summary")) {
+ tmp = linecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = linecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ }
+}
+function extendObjSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < medias.length; i++) {
+ w=medias[i].getAttribute("width",0);
+ h=medias[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ medias[i].style.width=Math.floor(w*q)+"px";
+ medias[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+function findPosX(obj) {
+ var posLeft = 0;
+ while (obj.offsetParent) {
+ posLeft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ return posLeft;
+}
+function findPosY(obj) {
+ var posTop = 0;
+ while (obj.offsetParent) {
+ posTop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ return posTop;
+}
+// scalable images extension
+
+// canvas chart extension
+function deg2rad(degrees) {
+ return Math.PI *degrees/180;
+}
+function rad2deg(radians) {
+ return 180.0 *radians/Math.PI;
+}
+function circle_point_x(radians, diameter) {
+ var x = Math.cos(radians)*(diameter/2);
+ return x;
+}
+function circle_point_y(radians, diameter) {
+ var y = Math.sin(radians)*(diameter/2);
+ return y;
+}
+function roundTo(val,dig) {
+ var num = val;
+ if (val > 8191 && val < 10485) {
+ val = val-5000;
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ num = num+5000;
+ } else {
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ }
+ return num;
+}
+function searchColor(value) {
+ for (var dat in colorNames) {
+ if(dat==value) return colorNames[dat];
+ }
+ return false;
+}
+function scanColor(value) {
+ if(value.match(/^#[0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var val1 = value.substr(1,1).toLowerCase();
+ var val2 = value.substr(2,1).toLowerCase();
+ var val3 = value.substr(3,1).toLowerCase();
+ value = '#' + val1 + val1 + val2 + val2 + val3 + val3;
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var tmp = searchColor(value.toLowerCase());
+ if(!tmp) {}else{value = tmp;}
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ value = '#000000';
+ }
+ return value.toLowerCase();
+}
+function hex2rgb(val,trans) {
+ if(val.length==7) {
+ var tp1 = Math.max(0,Math.min(parseInt(val.substr(1,2),16),255));
+ var tp2 = Math.max(0,Math.min(parseInt(val.substr(3,2),16),255));
+ var tp3 = Math.max(0,Math.min(parseInt(val.substr(5,2),16),255));
+ return 'rgba(' + tp1 + ',' + tp2 + ',' + tp3 + ',' + trans + ')';
+ }
+}
+function trim(str) {
+ return (str.replace(/\s+$/,"").replace(/^\s+/,""));
+}
+function roundedRect(ctx,x,y,width,height,radius){
+ ctx.beginPath();
+ ctx.moveTo(x,y+radius);
+ ctx.lineTo(x,y+height-radius);
+ ctx.quadraticCurveTo(x,y+height,x+radius,y+height);
+ ctx.lineTo(x+width-radius,y+height);
+ ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius);
+ ctx.lineTo(x+width,y+radius);
+ ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
+ ctx.lineTo(x+radius,y);
+ ctx.quadraticCurveTo(x,y,x,y+radius);
+ ctx.closePath();
+}
+function drawString(ctx, text, fc, tx, ty) {
+ var xp = 0; var c = "";
+ ctx.beginPath();
+ for (var i = 0; i < text.length; i++) {
+ c = text[i];
+ ctx.drawImage(font, signs[c].sx, signs[c].sy, signs[c].sw, signs[c].sh, tx+xp, ty, signs[c].sw*fc, signs[c].sh*fc);
+ xp += (signs[c].sw*fc);
+ }
+ ctx.closePath();
+}
+function strokeString(ctx, txt, col, fh, tx, ty) {
+ var fw = fh*0.666666; var lw = fh*0.125;
+ var ls = lw/2; var cr = lw; var xp = 0;
+ ctx.lineCap = "round"; ctx.lineJoin = "round"
+ ctx.lineWidth = lw; ctx.strokeStyle = col;
+ for (var i = 0; i < txt.length; i++) {
+ strokeSymbol(ctx, txt[i], ls, tx+xp, ty, fw, fh);
+ xp += (txt[i]!="."?fw+cr:(fw/2)+cr);
+ }
+}
+function strokeSymbol(ctx, symbol, fc, cx, cy, cw, ch) {
+ ctx.beginPath();
+ switch (symbol) {
+ case "0":
+ ctx.moveTo(cx+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+(cw/2),(cw/2)-fc,deg2rad(180),0, false);
+ ctx.arc(cx+(cw/2),(cy+ch)-(cw/2),(cw/2)-fc,0,deg2rad(180), false);
+ ctx.closePath();
+ break;
+ case "1":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.moveTo(cx+(cw*0.666666),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.666666),cy+fc);
+ ctx.lineTo(cx+(cw*0.25),cy+(ch*0.25));
+ break;
+ case "2":
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.8));
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+fc,cy+ch-fc);
+ ctx.arc(cx+(cw/2),cy+(cw*0.425),(cw*0.425)-fc,deg2rad(45),deg2rad(-180), true);
+ break;
+ case "3":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-90),deg2rad(180), false);
+ break;
+ case "4":
+ ctx.moveTo(cx+(cw*0.75),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.5),cy+ch-fc);
+ break;
+ case "5":
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-80),deg2rad(180), false);
+ break;
+ case "6":
+ ctx.moveTo(cx+fc,cy+ch-(cw*0.5)-fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-180),deg2rad(180), false);
+ ctx.bezierCurveTo(cx+fc,cy+fc,cx+fc,cy+fc,cx+(cw*0.9)-fc,cy+fc);
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ break;
+ case "7":
+ ctx.moveTo(cx+(cw*0.5),cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.25)-fc);
+ break;
+ case "8":
+ ctx.moveTo(cx+(cw*0.92)-fc,cy+(cw*0.59));
+ ctx.arc(cx+(cw/2),cy+(cw*0.45),(cw*0.45)-fc,deg2rad(25),deg2rad(-205), true);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-135),deg2rad(-45), true);
+ ctx.closePath();
+ ctx.moveTo(cx+(cw*0.79),cy+(ch*0.47));
+ ctx.lineTo(cx+(cw*0.21),cy+(ch*0.47));
+ break;
+ case "9":
+ ctx.moveTo(cx+cw-fc,cy+(cw*0.5));
+ ctx.arc(cx+(cw/2),cy+(cw*0.5),(cw*0.5)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.bezierCurveTo(cx+cw-fc,cy+ch-fc,cx+cw-fc,cy+ch-fc,cx+(cw*0.1)+fc,cy+ch-fc);
+ break;
+ case "%":
+ ctx.moveTo(cx+fc,cy+(ch*0.75));
+ ctx.lineTo(cx+cw-fc,cy+(ch*0.25));
+ ctx.moveTo(cx+(cw*0.505),cy+(cw*0.3));
+ ctx.arc(cx+(cw*0.3),cy+(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.moveTo(cx+(cw*0.905),cy+ch-(cw*0.3));
+ ctx.arc(cx+(cw*0.7),cy+ch-(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ break;
+ case ".":
+ ctx.moveTo(cx+(cw*0.25),cy+ch-fc-fc);
+ ctx.arc(cx+(cw*0.25),cy+ch-fc-fc,fc,deg2rad(0),deg2rad(360), false);
+ ctx.closePath();
+ break;
+ default:
+ break;
+ }
+ ctx.stroke();
+}
+function drawBar(ctx,x,y,width,height,color,value,textdiv){
+ var rw = width/2; var rh = rw/2;
+ height = Math.max(height,rw);
+ var dh = Math.max(height-(2*rh),0.1); var S2L;
+ var xx = rw/8; var yy = rh/4;
+ var yo = rh/2; y = y - yy;
+ if(canvas_noshadow <= 0 && canvas_noshade <= 0) {
+ ctx.save();
+ S2L = ctx.createRadialGradient(x+rw+rh,y+height-rw+yy+rh,0,x+rw,y+height-rw+yy,rw);
+ S2L.addColorStop(0, 'rgba(0,0,0,0.5)');
+ S2L.addColorStop(0.7, 'rgba(0,0,0,0.25)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = S2L;
+ ctx.scale(1,0.5);
+ ctx.translate(xx,y+height+yy);
+ if(isOp){
+ ctx.fillRect(x,y+yy+height-width,width,width);
+ }else {
+ ctx.arc(x+rw,y+yy+height-width,width,0,deg2rad(360), false);
+ ctx.fill();
+ }
+ ctx.restore();
+ }else if(canvas_noshadow <= 0 && canvas_noshade >= 1) {
+ ctx.fillStyle = 'rgba(0,0,0,0.2)';
+ ctx.fillRect(x+yo,y+rh+yo+yo,width,dh);
+ }
+
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x,y+(height/2),x+width,y+(height/2));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.75)');
+ S2L.addColorStop(0.2, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.3, 'rgba(0,0,0,0)');
+ S2L.addColorStop(0.5, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.35)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.1)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.strokeStyle = S2L;
+ ctx.stroke();
+ }else {
+ ctx.fillStyle = color;
+ ctx.fillRect(x,y+rh+yo,width,dh);
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var bw = width; var bh = bw/4;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ var c; var w;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,x+(width/2)-(bw/2),y,bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext <= 0) {
+ strokeString(ctx, value + "%","rgba(48,48,48,1)", th, x+(width/2)-(w/2), y+((bh-th)/2));
+ }else {
+ drawString(ctx, value + "%", tf, x+(width/2)-(w/2), y+((bh-th)/2.2));
+ }
+ }else {
+ var bh = bw/3; var th = roundTo(bh*0.75,0);
+ roundedRect(ctx,x,y,bw,bh,bh/4);
+ ctx.fill();
+ var obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = x + "px";
+ obj.style.top = y+((bh-th)/2.2) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+
+ }
+}
+function drawLine(ctx,x,y,width,height,dist,array,factor,color,fill){
+ if(fill <= 0){
+ var style = hex2rgb(color,0.5);
+ ctx.lineJoin = "miter";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height);
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.lineTo(x+width,y+height);
+ ctx.lineTo(x,y+height);
+ ctx.closePath();
+ ctx.fillStyle = style;
+ ctx.fill();
+ }
+ ctx.lineJoin = "round";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height-(array[0]*factor));
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.strokeStyle = color;
+ ctx.stroke();
+}
+function setDataURL(cid) {
+ if(cid.toDataURL) {
+ var obj = document.getElementById(cid.id + "_link");
+ if(obj) {
+ obj.setAttribute("title", "To Data URL");
+ obj.setAttribute("target", "_blank");
+ obj.setAttribute("href", cid.toDataURL());
+ }
+ }
+}
+function get_input(dataobj,canvasobj,linechart) {
+ var table = document.getElementById(dataobj);
+ var canvas = document.getElementById(canvasobj);
+ var row; var clm; var cnt = 0; var val = 0; var nme = ""; var col = "";
+ if(canvas.getContext) {
+ canvas_width = parseInt(canvas.style.width);
+ canvas_height = parseInt(canvas.style.height);
+ if(canvas_width >= 16 && canvas_height >= 16) {
+ var tmp = table.getAttribute("summary");
+ canvas_noshade = 0; canvas_noshadow = 0;
+ canvas_notext = 0; canvas_imgtext = 0;
+ canvas_htmltext = 0; canvas_nofill = 0;
+ if(tmp.search(/noshadow/) != -1) canvas_noshadow = 1;
+ if(tmp.search(/noshade/) != -1) canvas_noshade = 1;
+ if(tmp.search(/nofill/) != -1) canvas_nofill = 1;
+ if(tmp.search(/notext/) != -1) canvas_notext = 1;
+ if(tmp.search(/htmltext/) != -1) canvas_htmltext = 1;
+ if(tmp.search(/imgtext/) != -1) canvas_imgtext = 1;
+ if(table.getAttribute("bgcolor")) {
+ canvas_bgcolor = scanColor(table.getAttribute("bgcolor"));
+ }
+ ChartData = new Array(); colorSlice = new Array();
+ if(table.getElementsByTagName("tr")[0].getElementsByTagName("th")[0]) cnt = 1;
+ for(var r = cnt; r < table.getElementsByTagName("tr").length; r++) {
+ row = table.getElementsByTagName("tr")[r];
+ clm = row.getElementsByTagName("td").length;
+ if(row.getElementsByTagName("td")[0].getAttribute("bgcolor")) {
+ col = scanColor(row.getElementsByTagName("td")[0].getAttribute("bgcolor")); val = 0;
+ nme = trim(row.getElementsByTagName("td")[1].innerHTML.replace(/<[^>]+>/g,""));
+ if(!linechart) {
+ if(clm > 3) {
+ for(var z = 2; z < clm; z++) {
+ val += parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ }else {
+ val = parseFloat(row.getElementsByTagName("td")[2].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ if(!isNaN(val) && val > 0 && nme != '') {
+ colorSlice[r-cnt] = col; ChartData[nme] = Math.abs(val);
+ }else {
+ break;
+ }
+ }else {
+ val = 0; i = 0;
+ if(clm > 3 && nme != '') {
+ ChartData[r-cnt] = new Array();
+ colorSlice[r-cnt] = col;
+ for(var z = 2; z < clm; z++) {
+ val = Math.abs(parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,"")));
+ if(!isNaN(val) && val >= 0) {
+ ChartData[r-cnt][i] = val; i++;
+ }else {
+ ChartData[r-cnt][i] = 0; i++;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }
+ }
+}
+function setPieChart(canvasobj,textobj) {
+ var cd = (Math.min(canvas_width,canvas_height)/110)*100;
+ var cp = cd*0.1; var cr = cd/2;
+ var sr = cr*0.93; var cw = cd+cp; var ch = cw;
+ var cx = (cd/2)+(cp/2); var cy = cx; var ct = 0;
+ for (var data in ChartData) {
+ ct += ChartData[data];
+ }
+ var poc = ct/100;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ }
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,cw,ch);
+ }else {
+ ctx.clearRect(0,0,cw,ch);
+ }
+ if(canvas_noshadow <= 0) {
+ if(!isOp) {
+ ctx.beginPath();
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),cr,cx+(cr*0.1),cy+(cr*0.1),sr*0.9);
+ B2B.addColorStop(0, 'rgba(0,0,0,0)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.arc(cx+(cr*0.1),cy+(cr*0.1),cr,0,deg2rad(360), false);
+ ctx.closePath();
+ ctx.fillStyle = B2B;
+ ctx.fill();
+ }else {
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),0,cx+(cr*0.1),cy+(cr*0.1),cr);
+ B2B.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(0.87, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = B2B;
+ ctx.fillRect(0,0,cw,ch);
+ }
+ }
+ var val = 0; var deg = 0; var idx = 0; var data;
+ for (data in ChartData) {
+ val = ChartData[data]; sdeg = deg;
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ ctx.beginPath();
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr,sdeg,edeg, false);
+ ctx.lineTo(cx,cy);
+ ctx.closePath();
+ ctx.fillStyle = colorSlice[(idx++)];
+ ctx.fill();
+ }
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ var W2T = ctx.createLinearGradient(cp*2,cp*2,cx,cy);
+ W2T.addColorStop(0, 'rgba(255,255,255,0.8)');
+ W2T.addColorStop(1, 'rgba(255,255,255,0)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.fillStyle = W2T;
+ ctx.fill();
+ ctx.beginPath();
+ var T2B = ctx.createLinearGradient(cx,cy,cw-(cp*2),ch-(cp*2));
+ T2B.addColorStop(0, 'rgba(0,0,0,0)');
+ T2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.fillStyle = T2B;
+ ctx.fill();
+ ctx.beginPath();
+ var B2T = ctx.createLinearGradient(cx,cy,cw-(cp*1.9),ch-(cp*1.9));
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.strokeStyle = B2T;
+ ctx.stroke();
+ ctx.beginPath();
+ var T2W = ctx.createLinearGradient(cx,cy,(cp*1.9),(cp*1.9));
+ T2W.addColorStop(0, 'rgba(255,255,255,0)');
+ T2W.addColorStop(1, 'rgba(255,255,255,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.strokeStyle = T2W;
+ ctx.stroke();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var mpos = 0; var per = 0; var gx = 0;
+ var gy = 0; var tx = 0; var ty = 0;
+ var obj = ""; var w = 0; var c = 0;
+ var bw = cr*0.45; var bh = cr*0.125;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext >= 1) {
+ bw = (cr*0.365);
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ for (data in ChartData) {
+ val = ChartData[data];
+ sdeg = deg; mpos = deg+(((val/2)/ct)*deg2rad(360));
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ per = roundTo(val/poc,2);
+ gx = circle_point_x(mpos, cd);
+ gy = circle_point_y(mpos, cd);
+ tx = parseFloat((cx+(2*Math.floor(cx + gx)))/3);
+ ty = (cy+(2*Math.floor(cy + gy)))/3;
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext >= 1) {
+ drawString(ctx, per + "%", tf, tx-(w/2), ty-(th/1.8));
+ }else {
+ strokeString(ctx, per + "%","rgba(48,48,48,1)", th, tx-(w/2), ty-(th/2));
+ }
+ }else {
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = (tx-(bw/2)) + "px";
+ obj.style.top = ty-(th/1.8) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+ }
+ }
+ }
+}
+function setBarChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9; var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05; var ph = canvas_height*0.05;
+ var cm = 0; var ct = 0;
+ for (var data in ChartData) {
+ cm = Math.max(cm,ChartData[data]);
+ ct += ChartData[data];
+ }
+ var hf = ih/cm; var bs = colorSlice.length;
+ var bw = iw/(bs*1.1); var poc = ct/100;
+ var th = roundTo((bw/3)*0.75,0);
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ var obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ var cc = ""; var bh = 0; var idx = 0; var t = 0; per = 0;
+ for (var data in ChartData) {
+ per = roundTo(ChartData[data]/poc,2);
+ bh = ChartData[data]*hf;
+ drawBar(ctx,pw+(t*(bw*1.1)),ph+ih-bh,bw,bh,colorSlice[(idx++)],per,textdiv);
+ t++;
+ }
+ }
+}
+function setLineChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9;
+ var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05;
+ var ph = canvas_height*0.05;
+ var cm = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ cm = Math.max(cm,ChartData[i][j]);
+ }
+ }
+ var hf = (ih*0.95)/cm; var bw = iw;
+ var dw = iw/(ChartData[0].length-1)
+ var dh = ih/(ChartData[0].length-1)
+ var ps = Math.min(pw,ph); lw = ps/4;
+ var B2T;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_noshadow <= 0) {
+ B2T = ctx.createLinearGradient(pw+ps,ph+ih+1,pw+ps+ps,ph+ih+1);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps,ph+ih);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.lineTo(pw+ps+ps,ph+ih);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+ps+ps,ph+ih,pw+ps+ps,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps+ps,ph+ih);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+ps+iw,ph+ih+ps);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.closePath();
+ ctx.fill();
+ var B2T = ctx.createLinearGradient(pw+iw+1,ph+ps,pw+iw+1,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.35)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps);
+ ctx.lineTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+iw,ph+ps+ps,pw+iw+ps,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.35)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+iw+ps,ph+ih+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = lw/2;
+ ctx.strokeStyle = "rgba(255,255,255,0.25)";
+ if(canvas_nofill <= 0) {
+ ctx.fillStyle = "rgba(240,240,240,0.8)";
+ ctx.strokeStyle = "rgba(255,255,255,1)";
+ ctx.fillRect(pw,ph,iw,ih);
+ }
+ for (var i = 0; i < ChartData[0].length-1; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph);
+ ctx.lineTo(pw+(i*dw),ph+ih);
+ ctx.stroke();
+ }
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw,ph+(i*dh));
+ ctx.lineTo(pw+iw,ph+(i*dh));
+ ctx.stroke();
+ }
+ ctx.lineWidth = lw;
+ var cc = ""; var bh = 0; var idx = 0; var t = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ t = Math.max(t,ChartData[i][j]);
+ }
+ bh = t*hf; cc = colorSlice[(idx++)];
+ drawLine(ctx,pw,ph+ih-bh,bw,bh,dw,ChartData[i],hf,cc,canvas_nofill);
+ }
+ ctx.beginPath();
+ ctx.moveTo(pw,ph);
+ ctx.lineTo(pw,ph+ih);
+ ctx.lineTo(pw+iw+(lw/2),ph+ih);
+ ctx.strokeStyle = "rgba(48,48,48,1)";
+ ctx.stroke();
+ ctx.lineWidth = lw/2;
+ B2T = ctx.createLinearGradient(pw,ph+ih,pw,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,1)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.strokeStyle = B2T;
+ for (var i = 0; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph+ih);
+ ctx.lineTo(pw+(i*dw),ph+ih+ps);
+ ctx.stroke();
+ }
+ B2T = ctx.createLinearGradient(pw-ps,ph,pw,ph);
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,1)');
+ ctx.strokeStyle = B2T;
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw-ps,ph+(i*dh));
+ ctx.lineTo(pw,ph+(i*dh));
+ ctx.stroke();
+ }
+ }
+}
+function generateCanvas() {
+ if(canvasSupport) {
+ var canvasID; var tdataID; var textID;
+ var tmp; var dat; var i; var j;
+ for(i=0; i < piecharts.length; i++) {
+ tmp = piecharts[i].id.split("_");
+ tdataID = piecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setPieChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < barcharts.length; i++) {
+ tmp = barcharts[i].id.split("_");
+ tdataID = barcharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setBarChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < linecharts.length; i++) {
+ tmp = linecharts[i].id.split("_");
+ tdataID = linecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID,true);
+ if(colorSlice.length > 0) {
+ if(ChartData.length == colorSlice.length) {
+ setLineChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ }
+}
+// canvas chart extension
+
+// invisible select extension
+function setListPos(opt) {
+ if(!isIE) { //(degrade IE)
+ var ref = document.getElementById('list');
+ var x = findPosX(ref); var y = findPosY(ref);
+ var obj = document.getElementById('jumplist');
+ obj.style.position = 'fixed'; obj.style.left = x + 'px'; obj.style.top = y + 'px';
+ var vol = document.getElementById('volumelist');
+ ref = document.getElementById('volume');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ vol.style.position = 'fixed'; vol.style.left = x + 'px'; vol.style.top = y + 'px';
+ var del = document.getElementById('delaylist');
+ ref = document.getElementById('delay');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ del.style.position = 'fixed'; del.style.left = x + 'px'; del.style.top = y + 'px';
+ var pnl = document.getElementById('navLinks');
+ }
+ if(opt) {
+ if(isIE) {
+ //(degrade IE)
+ //pnl.style.filter = "alpha(opacity=80)";
+ }else {
+ obj.style.opacity = 0.0;
+ vol.style.opacity = 0.0;
+ del.style.opacity = 0.0;
+ pnl.style.opacity = 0.8;
+ }
+ }
+}
+// invisible select extension
+
+// transition extension
+function switchFade() {
+ if(tranSitions && s5mode && fadeModus) {
+ fadeModus = false;
+ playDelay = playDelay-(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'isoff');
+ }else if(tranSitions && s5mode && !fadeModus) {
+ fadeModus = true;
+ playDelay = playDelay+(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ currentSlide();
+}
+function opacity(ids, opacStart, opacEnd, millisec) {
+ var speed = Math.round(millisec / 100);
+ var timer = 0;
+ if(opacStart > opacEnd) {
+ for(var i = opacStart; i >= opacEnd; i--) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ } else if(opacStart < opacEnd) {
+ for(var i = opacStart; i <= opacEnd; i++) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ }
+}
+function changeOpac(opacity, ids) {
+ var obj = document.getElementById(ids);
+ if (isIE) {
+ obj.style.filter = "alpha(opacity=" + opacity + ")";
+ } else {
+ obj.style.opacity = (opacity / 100);
+ }
+}
+function shiftOpacity(ids, millisec) {
+ if(document.getElementById(ids).style.opacity != '') {
+ var currentOpac = document.getElementById(ids).style.opacity * 100;
+ } else {
+ var currentOpac = 0;
+ }
+ if(currentOpac == 0) {
+ opacity(ids, currentOpac, 100, millisec);
+ } else if(currentOpac > 0) {
+ opacity(ids, currentOpac, 0, millisec);
+ }
+}
+// transition extension
+
+// autoplay extension
+function autoPlay() {
+ if (s5mode && autoMatic && !playPause) {
+ if ((snum >= (smax-1)) && playLoop) {
+ goTo(0);
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }else if ((snum >= (smax-1)) && !playLoop) {
+ stopPlay();
+ }else {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ if (incrementals[snum].length >0) {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = parseInt(playDelay/(incrementals[snum].length+1));
+ remainDer = parseInt(playDelay-(incrDelay*incrementals[snum].length));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ } else {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = incrDuration;
+ remainDer = parseInt(playDelay-(incrementals[snum].length*incrDuration));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }
+ }
+}
+function autoPlayIncr() {
+ if (incpos < incrementals[snum].length) {
+ subgo(1);
+ autoRun = setTimeout('autoPlayIncr();',incrDelay);
+ }else {
+ autoRun = setTimeout('nop();',remainDer);
+ }
+}
+function nop() {
+ // no operation dummy
+}
+function togglePlay() {
+ if (autoRun && s5mode) {
+ stopPlay();
+ }else if (!autoRun && s5mode) {
+ startPlay();
+ }
+}
+function stopPlay() {
+ if (autoRun && s5mode) {
+ clearTimeout(autoRun); autoRun = null;
+ autoMatic = false; playPause = false; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'isoff');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ currentSlide();
+ }
+}
+function startPlay() {
+ if (!autoRun && s5mode) {
+ playPause = false; autoMatic = true; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'ison');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ autoRun = setTimeout('autoPlay();',playDelay);
+ currentSlide();
+ }
+}
+function pausePlay() {
+ if (s5mode && autoMatic) {
+ if (playPause) {
+ playPause = false; autoRun = setTimeout('autoPlay();',playDelay);
+ var obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ }else {
+ if (autoRun){
+ clearTimeout(autoRun); autoRun = null; playPause = true;
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+ }
+}
+function switchLoop() {
+ if(s5mode) {
+ if (playLoop) {
+ playLoop = false;
+ var obj = document.getElementById('loop'); changeClass(obj,'isoff');
+ }else {
+ playLoop = true;
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+}
+function setDelay() {
+ var val = document.getElementById('delaylist');
+ if(s5mode) {
+ var delay = Math.max(5,Math.min(parseInt(val.value),300));
+ playDelay = (fadeModus == true) ? ((delay*1000)+(2*fadeDuration)) : (delay*1000);
+ }
+}
+// autoplay extension
+
+// audio extension
+function createSoundManagerScript() {
+ if(typeof soundManager=="undefined") {
+ onerrorSM2();
+ }else {
+ var script=document.createElement('SCRIPT');
+ var tx=document.createTextNode("soundManager.createMovie();");
+ script.appendChild(tx);
+ document.getElementsByTagName("body")[0].appendChild(script);
+ }
+}
+//soundManager.onload = function() {
+function onloadSM2() {
+ if(!isIE) { //(degrade IE)
+ swfUnloaded = false;
+ preloadSounds();
+ }
+}
+//soundManager.onerror = function() {
+function onerrorSM2() {
+ if(typeof soundManager!="undefined") {
+ soundManager.destruct;
+ delete soundManager;
+ }
+ audioSupport = false; swfUnloaded = true;
+ if(audioError && !isIE && !isOp) {
+ var dv = document.createElement('div'); dv.id = "guru";
+ var d2=document.createElement('div'); dv.appendChild(d2);
+ var tx=document.createTextNode('Guru Meditation - SoundManager failed to load/initialize!');
+ d2.appendChild(tx); document.getElementById('slide0').appendChild(dv);
+ }
+}
+function audioSetup() {
+ if(sound[0]) {
+ playSound(0);
+ }else if(sound[bgSoundItem] && !sound[0]) {
+ playSound(bgSoundItem);
+ }
+}
+function fadeoutSound(ids, option) {
+ if(curSoundID >= 0 && !swfUnloaded) {
+ if(isNaN(ids)) {
+ if(ids == "bgSound") {
+ var cnum = parseInt(bgSoundItem);
+ }else {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && ids == sound[i]["id"]) {
+ var cnum = i;
+ break;
+ }
+ }
+ }
+ }else {
+ var cnum = ids;
+ ids = sound[cnum]["id"];
+ }
+ var vol = getMaxVolume(sound[cnum]["volume"]);
+ var millisec = fadeDuration;
+ var speed = Math.round(millisec / vol);
+ var timer = 0;
+ for(var i = vol; i > 0; i--) {
+ setTimeout("fadeout(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ if(option) setTimeout("stopSound('"+ids+"')",millisec);
+ }
+}
+function fadeout(volume, id) {
+ soundManager.setVolume(id,volume);
+}
+function stopSound(ids) {
+ var sid;
+ if(isNaN(ids)) {
+ sid = ids;
+ }else if(sound[ids]) {
+ sid = sound[ids]["id"];
+ }
+ if(sid!='' && curSoundID >= 0) {
+ soundManager.stop(sid);
+ curSoundID = -1;
+ }
+}
+function toggleSounds() {
+ if(audioSupport && !swfUnloaded) {
+ stopAllSounds();
+ }else if (!audioSupport && !swfUnloaded) {
+ allowSounds();
+ }
+}
+function allowSounds() {
+ if(!swfUnloaded) {
+ audioSupport = true;
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ currentSlide();
+ }
+}
+function stopAllSounds() {
+ if(curSoundID >= 0) {
+ stopSound(curSoundID);
+ }else {
+ soundManager.stopAll();
+ curSoundID = -1;
+ }
+ audioSupport = false;
+ var obj = document.getElementById('audio'); changeClass(obj,'isoff');
+ currentSlide();
+}
+function playSound(id) {
+ if(audioSupport && !swfUnloaded) {
+ var url, sid, vol, lps, cnum;
+ if(isNaN(id)) {
+ sid = id;
+ if(sid == "bgSound") {
+ cnum = parseInt(bgSoundItem);
+ }else {
+ cnum = getSoundID(id);
+ }
+ }else {
+ cnum = parseInt(id);
+ if(sound[cnum]) sid = sound[cnum]["id"];
+ }
+ if(sound[cnum] && sound[cnum]["url"]!='' && sid!=''){
+ url = sound[cnum]["url"];
+ vol = (sound[cnum]["volume"]!='')?getMaxVolume(sound[cnum]["volume"]):getMaxVolume(100);
+ lps = (sound[cnum]["loops"])?true:false;
+ if(lps) {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){soundManager.play(sid,{volume:getMaxVolume(sound[cnum]["volume"])});}});
+ }else {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){curSoundID=-1;}});
+ }
+ }
+ }
+}
+function getSoundID(str) {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && str == sound[i]["id"]) {
+ var id = i;
+ break;
+ }
+ }
+ return id;
+}
+function setVolume() {
+ var vol = document.getElementById('volumelist');
+ if(audioSupport && !swfUnloaded) {
+ audioVolume = parseInt(vol.value);
+ if(curSoundID >= 0) {
+ if(sound[curSoundID]) {
+ var sid = sound[curSoundID]["id"];
+ var vid = getMaxVolume(sound[curSoundID]["volume"]);
+ soundManager.setVolume(sid,vid);
+ }
+ }
+ }
+}
+function getMaxVolume(value) {
+ if(audioVolume>0) {var factor = audioVolume/100;}else {var factor = 0;}
+ return Math.max(0,Math.min(parseInt(value*factor),audioVolume));
+}
+function preloadSounds() {
+ var temp = ''; var parm = ''; var t = ''; var cl = '';
+ var objects = document.getElementsByTagName('object');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].type.toLowerCase() == 'audio/mp3' && objects[i].data != '') {
+ objects[i].width = 0; objects[i].height = 0;
+ if(objects[i].parentNode.tagName == 'DIV') {
+ cl = objects[i].parentNode.className.toLowerCase();
+ if(cl == 'presentation' || cl == 'slide') {
+ if(cl == 'presentation') {
+ t = parseInt(bgSoundItem);
+ }else {
+ t = parseInt(objects[i].parentNode.id.slice(5, objects[i].parentNode.id.length));
+ }
+ sound[t] = new Object();
+ if(t < bgSoundItem) {
+ sound[t]["id"] = objects[i].parentNode.id;
+ }else {
+ sound[t]["id"] = "bgSound";
+ }
+ sound[t]["url"] = objects[i].data;
+ sound[t]["volume"] = 100; sound[t]["loops"] = false;
+ if(objects[i].archive != '') {
+ parm = objects[i].archive.toLowerCase().split(',');
+ for (var j=0; j < parm.length; j++) {
+ if(parm[j] == 'loop') sound[t]["loops"] = true;
+ if(parm[j].search(/^volume/) != -1) {
+ var tmp = parm[j].split(':');
+ sound[t]["volume"] = parseInt(tmp[1]);
+ }
+ }
+ }
+ soundManager.createSound(sound[t]["id"],sound[t]["url"]);
+ }
+ }
+ }
+ }
+}
+// audio extension
+
+// help extension
+function createHelpReq() {
+ if(!document.getElementById("HelpReq")) {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "HelpReq";
+ if (pg.addEventListener) {
+ pg.addEventListener("onclick",dumpHelpReq,false);
+ } else if (pg.attachEvent) {
+ pg.attachEvent("onclick",dumpHelpReq);
+ }
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=90)";
+ } else {
+ pg.style.opacity = 0.9;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(64,64,64)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/help.jpg)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+ if(document.getElementById("HelpReq")) {
+ helpmode = true;
+ }
+ }
+}
+function dumpHelpReq() {
+ if(document.getElementById("HelpReq")) {
+ document.body.removeChild(document.getElementById('HelpReq'));
+ helpmode = false;
+ }
+}
+// help extension
+
+//DEBUG
+function ConsoleLog(value) {
+ if(window.console) {
+ window.console.log(value);
+ }
+}
+//DEBUG
+
+document.write('<style type="text/css" media="screen" id="blockStyle">.presentation, .layout {display: none; }</style>');
+
+if(!isIE && !isOp) {
+ document.write('<script type="text/javascript" src="'+s5Path+'ui/audio_support/soundmanager2.js"></script>');
+ if(typeof soundManager!="undefined") {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'audioDebug') {
+ var audioDebug = (allMetas[i].content == "true") ? true : false;
+ soundManager.defaultOptions.debugMode = audioDebug;
+ }
+ }
+ }
+}
+
+window.onload = createSlideShow;
+window.onresize = function(){setTimeout('windowChange()',5);} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/toggle_link.png
new file mode 100644
index 000000000..4588e2514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/toggle_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/toggle_over.png
new file mode 100644
index 000000000..400f613b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/toggle_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/volume_link.png
new file mode 100644
index 000000000..f362acd1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/volume_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/wrap.css
new file mode 100644
index 000000000..a37315552
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/wrap.css
@@ -0,0 +1,410 @@
+/********************************************************************
+Screen and Print Styles for the Wrap Plugin
+********************************************************************/
+
+/* tables in columns and boxes should span the whole width */
+.wrap_column table,
+.wrap_left table, .wrap_right table, .wrap_center table,
+.wrap_box table,
+.wrap_info table, .wrap_important table, .wrap_alert table, .wrap_tip table, .wrap_help table, .wrap_todo table, .wrap_download table {
+ width: 100%;
+}
+/* emulate a headline */
+.wrap_column em strong,
+.wrap_left em strong, .wrap_right em strong, .wrap_center em strong,
+.wrap_box em strong,
+.wrap_info em strong, .wrap_important em strong, .wrap_alert em strong, .wrap_tip em strong, .wrap_help em strong, .wrap_todo em strong, .wrap_download em strong {
+ font-size: 130%;
+ font-weight: bold;
+ font-style: normal;
+ display: block;
+}
+/* emulate a bigger headline with a bottom border */
+.wrap_column em strong em.u,
+.wrap_left em strong em.u, .wrap_right em strong em.u, .wrap_center em strong em.u,
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ font-size: 115%;
+ border-bottom: 1px solid __border__;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+}
+/* different bigger headline for safety notes */
+.wrap_danger em strong em.u, .wrap_warning em strong em.u, .wrap_caution em strong em.u, .wrap_notice em strong em.u, .wrap_safety em strong em.u {
+ font-size: 115%;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+ text-transform: uppercase;
+ border-bottom-width: 0;
+}
+/* change border colour of emulated headlines inside boxes to something more neutral
+ (to match all the different background colours) */
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ border-bottom-color: #999;
+}
+
+
+/* columns
+********************************************************************/
+
+.wrap_left,
+.wrap_column {
+ float: left;
+ margin-right: 1.5em;
+}
+.wrap_right {
+ float: right;
+ margin-left: 1.5em;
+}
+.wrap_center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+/*
+.wrap_column,
+.wrap_left,
+.wrap_right {
+ overflow: hidden;
+}
+*/
+.wrap_container {
+ margin-right: -1.5em;
+}
+
+
+/* alignments
+********************************************************************/
+
+.wrap_leftalign {
+ text-align: left;
+}
+.wrap_centeralign {
+ text-align: center;
+}
+.wrap_rightalign {
+ text-align: right;
+}
+.wrap_justify {
+ text-align: justify;
+}
+
+
+/* box
+********************************************************************/
+
+/* see styles for boxes and notes with icons in style.css */
+
+/*____________ rounded corners ____________*/
+/* (only for modern browsers) */
+
+div.wrap_round {
+ border-radius: 20px;
+ -moz-border-radius: 20px;
+ -webkit-border-radius: 20px;
+ -khtml-border-radius: 20px;
+}
+span.wrap_round {
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -khtml-border-radius: 2px;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_lo {
+ color: __text_neu__;
+ font-size: 85%;
+}
+div.wrap_em {
+ color: #c00;
+ font-weight: bold;
+}
+
+/* see styles for highlighted text in style.css */
+
+
+/* typography
+********************************************************************/
+
+/*____________ fonts ____________*/
+
+div.wrap_sansserif {
+ font-family: Verdana,Tahoma,Geneva,"DejaVu Sans","Bitstream Vera Sans","Liberation Sans", Arial,Helvetica,FreeSans,"Liberation Sans","Nimbus Sans L", sans-serif;
+}
+div.wrap_serif {
+ font-family: Georgia,Garamond,"Palatino Linotype","Book Antiqua",Palatino,Palladio,"URW Palladio L","Liberation Serif",Didot,Gentium,"Bitstream Charter","Century Schoolbook L", "Times New Roman",Times,"Nimbus Roman No9 L","FreeSerif", serif;
+}
+div.wrap_monospace {
+ font-family: Courier,"Courier New",FreeMono,"Nimbus Mono L","Liberation Mono", "Lucida Console",Monaco,"DejaVu Sans Mono","Bitstream Vera Sans Mono", monospace;
+}
+
+/*____________ font size ____________*/
+
+div.wrap_bigger {
+ font-size: 125%;
+}
+div.wrap_muchbigger {
+ font-size: 200%;
+}
+div.wrap_smaller {
+ font-size: 75%;
+}
+
+/*____________ font colours ____________*/
+
+div.wrap_fgred {
+ color: #900;
+}
+div.wrap_fggreen {
+ color: #090;
+}
+div.wrap_fgblue {
+ color: #009;
+}
+div.wrap_fgcyan {
+ color: #099;
+}
+div.wrap_fgviolet {
+ color: #909;
+}
+div.wrap_fgyellow {
+ color: #990;
+}
+div.wrap_fggrey {
+ color: #666;
+}
+div.wrap_fgblack {
+ color: #000;
+}
+
+/* see styles for background colours and white font colour in style.css */
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ indent ____________*/
+
+div.wrap_indent {
+ padding-left: 1.5em;
+}
+
+/*____________ outdent ____________*/
+
+div.wrap_outdent {
+ margin-left: -1.5em;
+}
+
+/*____________ word wrapping in pre ____________*/
+
+divdiv.wrap_prewrap pre {
+ white-space: pre-wrap;
+ word-wrap: break-word;/* for IE < 8 */
+ /* white-space: -moz-pre-wrap; for FF < 3 */
+}
+
+/*____________ spoiler ____________*/
+
+divdiv.wrap_spoiler {
+ margin-bottom: 1.5em;
+}
+/* see rest of spoiler styles in style.css */
+
+/*____________ clear float ____________*/
+
+div.wrap_clear {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ font-size: 1px;
+ visibility: hidden;
+ overflow: hidden;
+}
+
+/*____________ hide ____________*/
+
+div.wrap_hide {
+ display: none;
+}
+
+
+/* STYLE.CSS */
+
+/* box
+********************************************************************/
+
+.wrap_box {
+ background: __background_alt__;
+ color: __text__;
+/*
+ overflow: hidden;
+*/
+}
+div.wrap_box,
+div.wrap_danger, div.wrap_warning, div.wrap_caution, div.wrap_notice, div.wrap_safety {
+ padding: 1em 1em .5em;
+ margin-bottom: 1.5em;
+}
+span.wrap_box,
+span.wrap_danger, span.wrap_warning, span.wrap_caution, span.wrap_notice, span.wrap_safety {
+ padding: 0 .3em;
+}
+
+/*____________ notes with icons ____________*/
+
+/* general styles for all note divs */
+div.wrap_info, div.wrap_important, div.wrap_alert, div.wrap_tip, div.wrap_help, div.wrap_todo, div.wrap_download {
+ padding: 1em 1em .5em 70px;
+ margin-bottom: 1.5em;
+ min-height: 68px;
+ background-position: 10px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html div.wrap_info, * html div.wrap_important, * html div.wrap_alert, * html div.wrap_tip, * html div.wrap_help, * html div.wrap_todo, * html div.wrap_download {
+ height: 68px;
+}
+/* general styles for all note spans */
+span.wrap_info, span.wrap_important, span.wrap_alert, span.wrap_tip, span.wrap_help, span.wrap_todo, span.wrap_download {
+ padding: 0 2px 0 20px;
+ min-height: 20px;
+ background-position: 2px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html span.wrap_info, * html span.wrap_important, * html span.wrap_alert, * html span.wrap_tip, * html span.wrap_help, * html span.wrap_todo, * html span.wrap_download {
+ height: 20px;
+}
+
+/*____________ info ____________*/
+.wrap_info { background-color: #d1d7df; }
+div.wrap_info { background-image: url(../../../wrap/images/note/48/info.png); }
+span.wrap_info { background-image: url(../../../wrap/images/note/16/info.png); }
+
+/*____________ important ____________*/
+.wrap_important { background-color: #ffd39f; }
+div.wrap_important { background-image: url(../../../wrap/images/note/48/important.png); }
+span.wrap_important { background-image: url(../../../wrap/images/note/16/important.png); }
+
+/*____________ alert ____________*/
+.wrap_alert { background-color: #ffbcaf; }
+div.wrap_alert { background-image: url(../../../wrap/images/note/48/alert.png); }
+span.wrap_alert { background-image: url(../../../wrap/images/note/16/alert.png); }
+
+/*____________ tip ____________*/
+.wrap_tip { background-color: #fff79f; }
+div.wrap_tip { background-image: url(../../../wrap/images/note/48/tip.png); }
+span.wrap_tip { background-image: url(../../../wrap/images/note/16/tip.png); }
+
+/*____________ help ____________*/
+.wrap_help { background-color: #dcc2ef; }
+div.wrap_help { background-image: url(../../../wrap/images/note/48/help.png); }
+span.wrap_help { background-image: url(../../../wrap/images/note/16/help.png); }
+
+/*____________ todo ____________*/
+.wrap_todo { background-color: #c2efdd; }
+div.wrap_todo { background-image: url(../../../wrap/images/note/48/todo.png); }
+span.wrap_todo { background-image: url(../../../wrap/images/note/16/todo.png); }
+
+/*____________ download ____________*/
+.wrap_download { background-color: #d6efc2; }
+div.wrap_download { background-image: url(../../../wrap/images/note/48/download.png); }
+span.wrap_download { background-image: url(../../../wrap/images/note/16/download.png); }
+
+
+/*____________ safety notes ____________*/
+
+.wrap_danger {
+ background-color: #c00;
+ color: #fff;
+}
+.wrap_warning {
+ background-color: #f60;
+ color: #000;
+}
+.wrap_caution {
+ background-color: #ff0;
+ color: #000;
+}
+.wrap_notice {
+ background-color: #06f;
+ color: #fff;
+}
+.wrap_safety {
+ background-color: #090;
+ color: #fff;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_hi {
+ background-color: #ff9;
+}
+
+/* typography
+********************************************************************/
+
+/*____________ font colours ____________*/
+
+div.wrap_fgwhite {
+ color: #fff;
+}
+
+/*____________ background colours ____________*/
+
+div.wrap_bgred {
+ background-color: #fcc;
+}
+div.wrap_bggreen {
+ background-color: #cfc;
+}
+div.wrap_bgblue {
+ background-color: #ccf;
+}
+div.wrap_bgcyan {
+ background-color: #9ff;
+}
+div.wrap_bgviolet {
+ background-color: #f9f;
+}
+div.wrap_bgyellow {
+ background-color: #ff9;
+}
+div.wrap_bggrey {
+ background-color: #ccc;
+}
+div.wrap_bgwhite {
+ background-color: #fff;
+}
+div.wrap_bgblack {
+ background-color: #000;
+}
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ spoiler ____________*/
+
+div.wrap_spoiler {
+ background-color: __background__ !important;
+ color: __background__ !important;
+ border: 1px dotted red;
+}
+
+/*____________ only print ____________*/
+
+div.wrap_onlyprint {
+ display: none;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/zero_link.png
new file mode 100644
index 000000000..5610884d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/zero_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/zero_over.png
new file mode 100644
index 000000000..3a14a577e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/zero_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/LEEME.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/LEEME.txt
new file mode 100755
index 000000000..d09fdc819
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/LEEME.txt
@@ -0,0 +1,31 @@
+QUALITY
+
+Tema para S5, creado originalmente por jEsuSdA 8)
+http://www.jesusda.com
+
+Más temas en: http://www.jesusda.com/projects/presentaciones_s5
+
+
+
+Para customizar este tema modifica el archivo CSS:
+
+s5-ultraviolet/ui/default/pretty.css
+
+
+
+Los archivos gráficos referentes al tema están en la carpeta:
+
+/ui/default/pics
+
+
+Puedes personalizar el favicon copiando el tuyo en la carpeta:
+
+/ui/default/pics
+
+con el nombre favicon.ico
+
+
+
+Para cualquier sugerencia e idea, por favor, contacta conmigo a través de mi web. ;)
+
+--jEsuSdA 8) \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/audio_link.png
new file mode 100644
index 000000000..daa740c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/audio_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/audio_on.png
new file mode 100644
index 000000000..cd590aae9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/audio_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/audio_over.png
new file mode 100644
index 000000000..cf537a008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/audio_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/auto_link.png
new file mode 100644
index 000000000..1c2ca4817
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/auto_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/auto_on.png
new file mode 100644
index 000000000..4b0c923b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/auto_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/auto_over.png
new file mode 100644
index 000000000..dbea88975
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/auto_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/backgrnd.png
new file mode 100644
index 000000000..0e48413d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/backgrnd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/blank.gif
new file mode 100755
index 000000000..75b945d25
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/blank.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/delay_link.png
new file mode 100644
index 000000000..c4d99cd57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/delay_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/exit_link.png
new file mode 100644
index 000000000..1bfd38790
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/exit_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/exit_over.png
new file mode 100644
index 000000000..0fdd1c605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/exit_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/fade_link.png
new file mode 100644
index 000000000..482e4d53e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/fade_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/fade_on.png
new file mode 100644
index 000000000..e12561fb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/fade_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/fade_over.png
new file mode 100644
index 000000000..fb8943c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/fade_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/footer.jpg
new file mode 100644
index 000000000..49370dbba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/footer.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/framing.css
new file mode 100755
index 000000000..14d8509e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/framing.css
@@ -0,0 +1,23 @@
+/* The following styles size, place, and layer the slide components.
+ Edit these if you want to change the overall slide layout.
+ The commented lines can be uncommented (and modified, if necessary)
+ to help you with the rearrangement process. */
+
+/* target = 1024x768 */
+
+div#header, div#footer, .slide {width: 100%; top: 0; left: 0;}
+div#header {top: 0; height: 3em; z-index: 1;}
+div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;}
+.slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;}
+div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;}
+div#controls form {position: absolute; bottom: 0; right: 0; width: 100%;
+ margin: 0;}
+#currentSlide {position: absolute; width: 10%; left: 45%; bottom: 1em; z-index: 10;}
+html>body #currentSlide {position: fixed;}
+
+/*
+div#header {background: #FCC;}
+div#footer {background: #CCF;}
+div#controls {background: #BBD;}
+div#currentSlide {background: #FFC;}
+*/
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/header.png
new file mode 100644
index 000000000..929dabba1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/iepngfix.htc
new file mode 100755
index 000000000..bba2db756
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/iepngfix.htc
@@ -0,0 +1,42 @@
+<public:component>
+<public:attach event="onpropertychange" onevent="doFix()" />
+
+<script>
+
+// IE5.5+ PNG Alpha Fix v1.0 by Angus Turnbull http://www.twinhelix.com
+// Free usage permitted as long as this notice remains intact.
+
+// This must be a path to a blank image. That's all the configuration you need here.
+var blankImg = 'ui/default/blank.gif';
+
+var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
+
+function filt(s, m) {
+ if (filters[f]) {
+ filters[f].enabled = s ? true : false;
+ if (s) with (filters[f]) { src = s; sizingMethod = m }
+ } else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")';
+}
+
+function doFix() {
+ if ((parseFloat(navigator.userAgent.match(/MSIE (\S+)/)[1]) < 5.5) ||
+ (event && !/(background|src)/.test(event.propertyName))) return;
+
+ if (tagName == 'IMG') {
+ if ((/\.png$/i).test(src)) {
+ filt(src, 'image'); // was 'scale'
+ src = blankImg;
+ } else if (src.indexOf(blankImg) < 0) filt();
+ } else if (style.backgroundImage) {
+ if (style.backgroundImage.match(/^url[("']+(.*\.png)[)"']+$/i)) {
+ var s = RegExp.$1;
+ style.backgroundImage = '';
+ filt(s, 'crop');
+ } else filt();
+ }
+}
+
+doFix();
+
+</script>
+</public:component> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/index.html
new file mode 100755
index 000000000..47d9a6b83
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/index.html
@@ -0,0 +1,100 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es-es" >
+
+
+<head>
+
+ <title>[Título de la presentación aquí]</title>
+ <!-- metadata -->
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta http-equiv="content-language" content="es" />
+
+ <!--titulo y datos de publicación de la presentación-->
+
+ <meta name="description" content="[Título de la presentación aquí]" />
+
+ <meta name="keywords" content="[keywords aquí]" />
+ <meta name="presdate" content="[Aquí la fecha de publicación en formato aaaammdd]" />
+
+ <meta name="author" lang="es" content="[Nombre del autor de la presentación aquí]" />
+ <meta name="company" content="[Organización del autor de la presentación aquí]" />
+
+ <link rel="shortcut icon" href="images/favicon.ico" />
+
+ <meta name="generator" content="S5" />
+ <meta name="progid" content="quanta+" />
+ <meta name="version" content="S5 · jEsuSdA · 1.1" />
+ <!--Versión adaptada del estandard S5 1.1 por jEsuSdA-->
+
+ <meta name="robots" content="all" />
+
+ <!-- configuration parameters -->
+ <meta name="defaultView" content="slideshow" />
+ <meta name="controlVis" content="hidden" />
+
+ <!-- style sheet links -->
+ <link rel="stylesheet" href="ui/default/slides.css" type="text/css" media="projection" id="slideProj" />
+ <link rel="stylesheet" href="ui/default/outline.css" type="text/css" media="screen" id="outlineStyle" />
+ <link rel="stylesheet" href="ui/default/print.css" type="text/css" media="print" id="slidePrint" />
+ <link rel="stylesheet" href="ui/default/opera.css" type="text/css" media="projection" id="operaFix" />
+
+ <!-- S5 JS -->
+ <script src="ui/default/slides.js" type="text/javascript"></script>
+
+</head>
+
+<body>
+
+ <div class="layout">
+ <div id="controls"><!-- NO EDITAR --></div>
+ <div id="currentSlide"><!-- NO EDITAR --></div>
+
+ <div id="header">
+ <div id="logo"><!-- NO EDITAR --></div>
+ </div>
+
+ </div>
+
+ <div id="footer">
+ <h1>[Lugar/Fecha de la presentación aquí]</h1>
+ <h2>[Título de la presentación aquí]</h2>
+ </div>
+
+
+
+
+<div class="presentation">
+
+ <div class="slide">
+ <h1>[Título de la presentación aquí]</h1>
+ <h3>[Nombre del ponente aquí]</h3>
+ <h4>[Datos extra aquí]</h4>
+ </div>
+
+
+ <div class="slide">
+ <h1>[Título de la diapositiva]</h1>
+
+ <ul>
+ <li>[Punto uno]</li>
+ <li>[Punto dos]</li>
+ <li>[Punto tres]</li>
+ <li>[Punto cuatro]</li>
+ <li>[Punto cinco]</li>
+ </ul>
+
+ <div class="handout">
+
+ [Añade aquí cualquier nota o información que desees mostrar en la versión impresa, pero no en la versión en pantalla]
+
+ </div>
+
+ </div>
+ <!--fin slide-->
+
+</div>
+
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/last_link.png
new file mode 100644
index 000000000..4f158d35d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/last_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/last_over.png
new file mode 100644
index 000000000..a7b629995
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/last_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/list_link.png
new file mode 100644
index 000000000..7e299bb50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/list_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/loop_link.png
new file mode 100644
index 000000000..41e12cb15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/loop_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/loop_on.png
new file mode 100644
index 000000000..2ffcacae1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/loop_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/loop_over.png
new file mode 100644
index 000000000..9fe420153
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/loop_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/next_link.png
new file mode 100644
index 000000000..2b9f44c4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/next_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/next_over.png
new file mode 100644
index 000000000..25788124d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/next_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/notes_link.png
new file mode 100644
index 000000000..bb4a8ae37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/notes_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/notes_over.png
new file mode 100644
index 000000000..c6bfe69fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/notes_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/opera.css
new file mode 100755
index 000000000..9e9d2a3c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/opera.css
@@ -0,0 +1,7 @@
+/* DO NOT CHANGE THESE unless you really want to break Opera Show */
+.slide {
+ visibility: visible !important;
+ position: static !important;
+ page-break-before: always;
+}
+#slide0 {page-break-before: avoid;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/outline.css
new file mode 100755
index 000000000..62db519ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/outline.css
@@ -0,0 +1,15 @@
+/* don't change this unless you want the layout stuff to show up in the outline view! */
+
+.layout div, #footer *, #controlForm * {display: none;}
+#footer, #controls, #controlForm, #navLinks, #toggle {
+ display: block; visibility: visible; margin: 0; padding: 0;}
+#toggle {float: right; padding: 0.5em;}
+html>body #toggle {position: fixed; top: 0; right: 0;}
+
+/* making the outline look pretty-ish */
+
+#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
+#slide0 h1 {padding-top: 1.5em;}
+.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em;
+ border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
+#toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pause_link.png
new file mode 100644
index 000000000..2561cb4a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pause_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pause_on.png
new file mode 100644
index 000000000..2fc9c4a4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pause_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pause_over.png
new file mode 100644
index 000000000..7a7c80ddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pause_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back-handout-print.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back-handout-print.png
new file mode 100755
index 000000000..9e49dd625
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back-handout-print.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back-index.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back-index.png
new file mode 100755
index 000000000..e0c18c4fe
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back-index.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back-slide-print.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back-slide-print.png
new file mode 100755
index 000000000..e8b5f9d82
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back-slide-print.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back_console.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back_console.png
new file mode 100755
index 000000000..ac1708379
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back_console.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/background-foot.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/background-foot.png
new file mode 100755
index 000000000..af3be4e6b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/background-foot.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/background-head.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/background-head.png
new file mode 100755
index 000000000..12d6402ee
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/background-head.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/background-main.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/background-main.png
new file mode 100755
index 000000000..3d7595d78
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/background-main.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/favicon.ico b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/favicon.ico
new file mode 100755
index 000000000..f1cdf0d62
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/favicon.ico
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/logo.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/logo.png
new file mode 100755
index 000000000..dce12c815
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/logo.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/table-background.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/table-background.png
new file mode 100755
index 000000000..89a7e4fa2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/table-background.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/table-header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/table-header.png
new file mode 100755
index 000000000..2f8795842
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/table-header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pretty.css
new file mode 100755
index 000000000..05d30adaf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pretty.css
@@ -0,0 +1,585 @@
+/* Following are the presentation styles -- edit away! */
+
+body
+{
+ background: #FFF url(pics/background-main.png) top left no-repeat;
+ color: #000; font-size: 2em;
+ font-family: Interstate-LightCondensed, Arial, Helvetica, sans-serif;
+/* font-family: Interstate-RegularCondensed, Arial, Helvetica, sans-serif; */
+/* font-family: Arial, Helvetica, sans-serif; */
+
+}
+
+:link, :visited
+{
+ text-decoration: none;
+ color: #00C;
+}
+
+
+
+h1, h2, h3, h4
+{
+ font-size: 100%;
+ margin: 0;
+ padding: 0;
+ font-weight: inherit;
+}
+
+h1 abbr
+{
+ font-variant: small-caps;
+}
+
+ul, pre
+{
+ margin: 0;
+ line-height: 1em;
+}
+
+html, body
+{
+ margin: 0;
+ padding: 0;
+}
+
+blockquote, q
+{
+ font-style: italic;
+}
+
+blockquote
+{
+ padding: 0 2em 0.5em;
+ margin: 0 1.5em 0.5em;
+ text-align: center;
+ font-size: 1em;
+}
+
+blockquote p
+{
+ margin: 0;
+}
+
+blockquote i
+{
+ font-style: normal;
+}
+
+blockquote b
+{
+ display: block;
+ margin-top: 0.5em;
+ font-weight: normal;
+ font-size: smaller;
+ font-style: normal;
+}
+
+blockquote b i
+{
+ font-style: italic;
+}
+
+kbd
+{
+ font-weight: bold;
+ font-size: 1em;
+}
+
+sup
+{
+ font-size: smaller;
+ line-height: 1px;
+}
+
+
+ul.urls
+{
+ list-style: none;
+ display: inline;
+ margin: 0;
+}
+
+.urls li
+{
+ display: inline;
+ margin: 0;
+}
+
+.notes
+{
+ display: none;
+}
+
+.external
+{
+ border-bottom: 1px dotted gray;
+}
+
+html>body .external
+{
+ border-bottom: none;
+}
+
+.external:after
+{
+ content: " \274F";
+ font-size: smaller;
+ color: #fff;
+}
+
+.incremental, .incremental *, .incremental *:after
+{
+/* color: #DDE; */
+ color: #fff;
+ visibility: visible;
+}
+
+img.incremental
+{
+ visibility: hidden;
+}
+
+.slide .current
+{
+ color: #fff;
+}
+
+
+/* ============== */
+/* === SLIDES === */
+/* ============== */
+
+.slide code
+{
+ padding: 2px 0.25em;
+ font-weight: bold;
+}
+
+.slide code.bad, code del
+{
+ color: red;
+}
+
+.slide code.old
+{
+ color: silver;
+}
+
+.slide pre
+{
+
+ color: #ffca00;
+ display:block;
+ font-weight:bold;
+ font-family: Arial, Sans-Serif !important;
+ font-size:41.5%;
+ line-height:1.5em;
+ background:#2e3436 url(pics/back_console.png) right bottom no-repeat ;
+ border:5px solid #ccc;
+ padding:1em 1em 1em 1em;
+
+
+}
+
+.slide pre code
+{
+ font-family: Arial, Sans-Serif !important;
+ display:block;
+ margin:0;
+ padding:0;
+}
+
+
+
+.slide ul
+{
+ margin-left: 5%;
+ margin-right: 7%;
+ list-style: disc;
+}
+
+.slide li
+{
+ margin-top: 0.75em;
+ margin-right: 0;
+}
+
+.slide ul ul
+{
+ line-height: 1;
+}
+
+.slide ul ul li
+{
+ margin: .2em;
+ font-size: 85%;
+ list-style: square;
+}
+
+.slide img.leader
+{
+ display: block;
+ margin: 0 auto;
+}
+
+
+/* ========================= */
+/* === HEADER AND FOOTER === */
+/* ========================= */
+
+div#logo
+{
+ position:absolute;
+ top:0%;
+ right:0%;
+ background:url(pics/logo.png) 50% 50% no-repeat;
+ height:100%;
+ width:50px;
+}
+
+div#header, div#footer
+{
+ background: #a80231;
+ color: #FFF;
+}
+
+
+div#header
+{
+ background:#a80231 url(pics/background-head.png) bottom left repeat-x;
+ line-height: 1px;
+}
+
+div#footer
+{
+ background:#a80231 url(pics/background-foot.png) top left repeat-x;
+ font-size: 0.5em;
+ font-weight: bold;
+ padding: 1em 0;
+}
+
+
+
+
+
+#footer h1, #footer h2
+{
+ display: block;
+ padding: 0 1em;
+}
+
+#footer h2
+{
+ font-style: italic;
+}
+
+
+
+/* ============== */
+/* === CLASES === */
+/* ============== */
+
+div.long
+{
+ font-size: 0.75em;
+}
+
+.slide h1
+{
+ position: absolute;
+ top: 0.7em;
+ left: 87px;
+ z-index: 1;
+ margin: 0;
+ padding: 0.3em 0 0 50px;
+ white-space: nowrap;
+ font-weight: bold;
+ font-size: 150%/1em;
+
+ text-transform: capitalize;
+ color: #fff;
+ background: transparent;
+}
+
+.slide h3
+{
+ font-size: 130%;
+}
+
+/* ================ */
+/* === CONTROLS === */
+/* ================ */
+
+#currentSlide
+{
+ text-align: center;
+ font-size: 0.6em;
+ font-weight:bold;
+ color: #fff;
+}
+
+#slide0
+{
+ padding-top: 3.5em;
+ font-size: 90%;
+}
+
+#slide0 h1
+{
+ position: static;
+ margin: 1em 0 0;
+ padding: 0;
+/* font: bold 2em Helvetica, sans-serif; */
+ font-weight: bold;
+ font-size:2em;
+ white-space: normal;
+ color: #000;
+ background: transparent;
+}
+
+#slide0 h2
+{
+ font-weight: bold;
+ font-style: italic;
+ font-size: 1em;
+ margin: 0.25em;
+}
+
+#slide0 h3
+{
+ margin-top: 1.5em;
+ font-size: 1.5em;
+}
+
+#slide0 h4
+{
+ margin-top: 0;
+ font-size: 1em;
+}
+
+/* ================ */
+/* === JESUSDA === */
+/* ================ */
+
+.first-pic
+{
+
+ float:right;
+ margin-top:-2em;
+}
+
+/* ================ */
+
+.align-center
+{
+ text-align:center;
+}
+/* ================ */
+
+.float-left , .left-column
+{
+ float:left !important;
+ width:49% !important;
+}
+
+.float-right , .right-column
+{
+ float:right !important;
+ width:49% !important;
+}
+/* ================ */
+.fullscreen
+{
+ z-index:1000 !important;
+ position:fixed !important;
+ top:0;
+ left:0;
+ width:100% !important;
+ height:100% !important;
+
+ background: #fff url(pics/background-main.png) top left no-repeat;
+
+ text-align:center;
+ margin-left:-1.65em;
+
+}
+
+.fullscreen h1
+{
+ display:none;
+}
+
+.rotulo
+{
+ font-size:800%;
+ text-align:center;
+ margin-top:-0.05em;
+
+}
+
+.rotulo2
+{
+ font-size:200%;
+ text-align:center;
+ font-weight:bolder;
+ margin-top:-0.05em;
+
+}
+
+.align-center img
+{
+ margin:auto;
+ text-align:center;
+ margin:0;
+}
+
+/* ========================= */
+/* === TABLAS === */
+/* ========================= */
+
+table
+{
+ background:url(pics/table-background.png) bottom left repeat-x #fff;
+ margin-right:1em;
+ font-size:70%;
+ border:1px solid #d2d7cf !important;
+ border-spacing: 0;
+ text-align:center;
+}
+
+table td
+{
+ padding:0.5em;
+ font-size:90%;
+ border:1px solid #d2d7cf !important;
+ border-spacing: 0;
+ text-align:center;
+}
+
+th
+{
+ background:url(pics/table-header.png) top left repeat-x #a70131;
+ color:#fff;
+}
+
+th a
+{
+ color:#fff !important;
+}
+
+
+
+table caption
+{
+ margin-bottom:1em;
+ margin-top:1em;
+ margin-left:-7em;
+
+
+}
+
+
+display-none
+{
+ display:none;
+}
+
+div#controls {position: absolute; left: 0; bottom: 0; width: 100%; text-align: center; font: bold 1em Verdana, Arial, Helvetica, sans-serif;}
+html>body div#controls {background: transparent; position: fixed; padding: 0; top: auto; text-align: center;}
+#controls #sheet {display: none;}
+#controls #controlForm {height: 32px; width: 100%; text-align: center; vertical-align: middle;}
+#controls #navLinks {border-top: 1px solid #999; overflow: hidden; padding: 0; margin: 0; height: 32px; width: 100%; background-color: #808080; text-align: center; vertical-align: middle; white-space: nowrap;}
+#controls #navLinks ul {margin: 0 auto; padding: 0; height: 32px; width: 500px; white-space: nowrap; text-align: center;}
+#controls #navLinks ul li {list-style: none; display: inline; margin: 0; padding: 0; float: left; height: 32px; width: 32px; text-align: center; background-color: transparent;}
+#controls #navLinks ul li.vr {list-style: none; display: inline; margin: 0px 2px; padding: 0; float: left; height: 32px; width: 1px; text-align: center; background-color: #606060;}
+#controls #navLinks ul li a {margin: 0; padding: 0; float: left; height: 32px; width: 32px; background-color: transparent;}
+
+#controls #navLinks ul li#exit {background: url(exit_link.png) no-repeat top left;}
+#controls #navLinks ul li#exit a:hover {background: url(exit_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#toggle {background: url(toggle_link.png) no-repeat top left;}
+#controls #navLinks ul li#toggle a:hover {background: url(toggle_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#show-notes {background: url(notes_link.png) no-repeat top left;}
+#controls #navLinks ul li#show-notes a:hover {background: url(notes_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#zero {background: url(zero_link.png) no-repeat top left;}
+#controls #navLinks ul li#zero a:hover {background: url(zero_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#prev {background: url(prev_link.png) no-repeat top left;}
+#controls #navLinks ul li#prev a:hover {background: url(prev_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#next {background: url(next_link.png) no-repeat top left;}
+#controls #navLinks ul li#next a:hover {background: url(next_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#last {background: url(last_link.png) no-repeat top left;}
+#controls #navLinks ul li#last a:hover {background: url(last_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#lst {background: url(list_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#fade a.isoff {background: url(fade_link.png) no-repeat top left;}
+#controls #navLinks ul li#fade a.ison {background: url(fade_on.png) no-repeat top right;}
+#controls #navLinks ul li#fade a:hover {background: url(fade_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#audio {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.isoff {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.ison {background: url(audio_on.png) no-repeat top right;}
+#controls #navLinks ul li#audio a:hover {background: url(audio_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#vol {background: url(volume_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#auto a.isoff {background: url(auto_link.png) no-repeat top left;}
+#controls #navLinks ul li#auto a.ison {background: url(auto_on.png) no-repeat top right;}
+#controls #navLinks ul li#auto a:hover {background: url(auto_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#pause a.isoff {background: url(pause_link.png) no-repeat top left;}
+#controls #navLinks ul li#pause a.ison {background: url(pause_on.png) no-repeat top right;}
+#controls #navLinks ul li#pause a:hover {background: url(pause_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#loop a.isoff {background: url(loop_link.png) no-repeat top left;}
+#controls #navLinks ul li#loop a.ison {background: url(loop_on.png) no-repeat top right;}
+#controls #navLinks ul li#loop a:hover {background: url(loop_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#del {background: url(delay_link.png) no-repeat top left;}
+
+#jumplist, #volumelist, #delaylist {padding: 0; margin: 0; width: 32px; height: 32px; cursor: n-resize;}
+
+#guru {position: absolute; visibility: visible; left: 0px; top: 0px; padding: 4px; width: 99%; height: auto; text-align: center; background-color: black; z-index: 10;}
+#guru div {border: solid 3px red; padding: 4px; font-family: monospace; font-size: 60%; width: auto; height: auto; color: red; text-align: center;}
+
+/*
+#currentSlide {white-space: nowrap; text-align: center; margin-bottom: -0.5em; font-size: 0.5em; background-color: transparent; color: #999;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 0; padding: 0; font: bold 2em Verdana, Arial, Helvetica, sans-serif; font-variant: small-caps; text-shadow: 0.1em 0.1em 0.1em #666; white-space: normal; color: #222; background-color: transparent;}
+#slide0 h2 {font: bold italic 1em Arial, Helvetica, sans-serif; margin: 0.25em;}
+#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+*/
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.external {border-bottom: 1px dotted gray;}
+html>body .external {border-bottom: none;}
+.external:after {content: " \274F"; font-size: smaller; color: #999;}
+
+.incremental, .incremental *, .incremental *:after {color: #ccc; visibility: visible;}
+img.incremental, canvas.incremental {visibility: hidden;}
+.slide .current {color: #B02;}
+
+/* diagnostics
+li:after {content: " [" attr(class) "]"; color: #F88;}
+*/
+
+table.piechart, table.barchart, table.linechart { border-spacing: 0.3em 0.15em; }
+table.piechart tr th, table.barchart tr th, table.linechart tr th { white-space: nowrap; }
+table.piechart tr td, table.barchart tr td, table.linechart tr td { vertical-align: top; white-space: nowrap; }
+table.piechart tr td.col, table.barchart tr td.col, table.linechart tr td.col { border-bottom: 1px solid #555; border-right: 1px solid #555; }
+table.fs90 tr td, table.fs90 tr th, div.fs90, pre.fs90, p.fs90 ,ul.fs90 {font-size: 0.9em; }
+table.fs75 tr td, table.fs75 tr th, div.fs75, pre.fs75, p.fs75 ,ul.fs75 {font-size: 0.75em; }
+table.fs66 tr td, table.fs66 tr th, div.fs66, pre.fs66, p.fs66 ,ul.fs66 {font-size: 0.66em; }
+table.fs50 tr td, table.fs50 tr th, div.fs50, pre.fs50, p.fs50 ,ul.fs50 {font-size: 0.5em; }
+
+#soundmanager-debug {position:fixed; top:0px; right:0px; width:30em; height:20em; overflow:auto; border:1px solid red; padding:1em; margin:2em; font-family:"sans serif"; font-size: 12px;color: black; background-color:#f6f6f6; z-index: 100;}
+#soundmanager-debug code {font-size: 11px;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/prev_link.png
new file mode 100644
index 000000000..c31d21350
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/prev_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/prev_over.png
new file mode 100644
index 000000000..6fef4fa52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/prev_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/print.css
new file mode 100755
index 000000000..220083260
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/print.css
@@ -0,0 +1 @@
+/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul { page-break-inside: avoid; visibility: visible !important; } h1 { page-break-after: avoid; } html { width:100%; overflow:hidden; } body { font-size: 12pt; background: white; width:100%; } * { color: black; } #slide0 h1 { font-size: 200%; border: none; margin: 0.5em 0 0.25em; } #slide0 h3 { margin: 0; padding: 0; } #slide0 h4 { margin: 0 0 0.5em; padding: 0; } #slide0 { margin-bottom: 3em; } h1 { border-top: 2pt solid gray; border-bottom: 1px dotted silver; padding:0.2em 0 0.3em 0; } .extra { background: transparent !important; } div.extra, pre.extra, .example { font-size: 10pt; color: #333; } ul.extra a { font-weight: bold; } p.example { display: none; } #header { display: none; } #footer h1 { margin: 0; border-bottom: 1px solid; color: gray; font-style: italic; } #footer h2, #controls { display: none; } div.handout { display:block; border-top: 2px dotted #ccc; background:url(pics/back-handout-print.png) top right no-repeat #fff; min-height:6em; padding-right:6em; margin-bottom:1em; } .slide { display:block; background:url(pics/back-slide-print.png) top right no-repeat #fff; min-height:6em; margin-bottom:1em; } table { display:block; /* display:none; */ font-size:90%; overflow:hidden; margin-top:1em; margin-bottom:1em; } pre , code { margin:0; font-size:1pt; overflow:auto; } img { max-width:100% !important; } /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .layout, .layout * { display: none !important; } \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/s5-core.css
new file mode 100755
index 000000000..86444e041
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/s5-core.css
@@ -0,0 +1,9 @@
+/* Do not edit or override these styles! The system will likely break if you do. */
+
+div#header, div#footer, div#controls, .slide {position: absolute;}
+html>body div#header, html>body div#footer,
+ html>body div#controls, html>body .slide {position: fixed;}
+.handout {display: none;}
+.layout {display: block;}
+.slide, .hideme, .incremental {visibility: hidden;}
+#slide0 {visibility: visible;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/slides.css
new file mode 100755
index 000000000..0786d7dbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/slides.css
@@ -0,0 +1,3 @@
+@import url(s5-core.css); /* required to make the slide show run at all */
+@import url(framing.css); /* sets basic placement and size of slide components */
+@import url(pretty.css); /* stuff that makes the slides look better than blah */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/slides.js
new file mode 100644
index 000000000..510a04c0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/slides.js
@@ -0,0 +1,2812 @@
+// S5 1.3beta7 (18-Apr-2007) advanced version by C. Effenberger
+// Please see http://s5.netzgesta.de/ for more information
+// based on S5 v1.2a1 slides.js -- released into the Public Domain
+// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
+// about all the wonderful and talented contributors to this code!
+// audio extension: soundmanager2 is NOT Public Domain
+// Please see http://www.schillmania.com/projects/soundmanager2/ for information
+
+var undef;
+var slideCSS = '';
+var snum = 0;
+var smax = 1;
+var incpos = 0;
+var number = undef;
+var firstTime = 1;
+var s5mode = true;
+var helpmode = false;
+var defaultView = 'slideshow'; //outline
+var controlVis = 'visible';
+var s5Path = 'lib/plugins/s5reloaded/';
+
+// scalable images extension
+var empx = 0;
+var images = new Array();
+var canvas = new Array();
+var medias = new Array();
+var piecharts = new Array();
+var barcharts = new Array();
+var linecharts = new Array();
+// scalable images extension
+
+// transition extension
+var tranSitions = false;
+var fadeModus = false;
+var fadeDuration = 500;
+var incrDuration = 250;
+var opac = 1;
+var cid = '';
+var nid = '';
+var tid = '';
+var jl = '';
+// transition extension
+
+// autoplay extension
+var autoMatic = false;
+var playLoop = false;
+var playPause = false;
+var autoRun = false;
+var playDelay = 5000;
+var remainDer = 0;
+var incrDelay = 0;
+// autoplay extension
+
+// audio extension
+var sound = new Array();
+var audioSupport = false;
+var audioVolume = 100;
+var audioError = false;
+var swfUnloaded = true;
+var bgSoundItem = 9999;
+var curSoundID = -1;
+// audio extension
+
+// panel extension
+var imgWidth = 32;
+var imgHeight = 32;
+// panel extension
+
+// canvas chart extension
+var canvasSupport = false;
+var ChartData = new Array();
+var colorSlice = new Array();
+var font = document.createElement("img");
+font.setAttribute("src", s5Path+"ui/graphic_support/numeric.png");
+signs = {
+ '0': {sx: 0, sy: 0, sw: 48, sh: 64},
+ '1': {sx: 48, sy: 0, sw: 48, sh: 64},
+ '2': {sx: 96, sy: 0, sw: 48, sh: 64},
+ '3': {sx: 144, sy: 0, sw: 48, sh: 64},
+ '4': {sx: 192, sy: 0, sw: 48, sh: 64},
+ '5': {sx: 240, sy: 0, sw: 48, sh: 64},
+ '6': {sx: 288, sy: 0, sw: 48, sh: 64},
+ '7': {sx: 336, sy: 0, sw: 48, sh: 64},
+ '8': {sx: 384, sy: 0, sw: 48, sh: 64},
+ '9': {sx: 432, sy: 0, sw: 48, sh: 64},
+ '%': {sx: 480, sy: 0, sw: 48, sh: 64},
+ '.': {sx: 528, sy: 0, sw: 24, sh: 64}
+};
+var colorNames= new Array();
+colorNames["black"]="#000000"; colorNames["maroon"]="#800000";
+colorNames["green"]="#008000"; colorNames["olive"]="#808000";
+colorNames["navy"]="#000080"; colorNames["purple"]="#800080";
+colorNames["teal"]="#008080"; colorNames["gray"]="#808080";
+colorNames["silver"]="#C0C0C0"; colorNames["red"]="#FF0000";
+colorNames["lime"]="#00FF00"; colorNames["yellow"]="#FFFF00";
+colorNames["blue"]="#0000FF"; colorNames["fuchsia"]="#FF00FF";
+colorNames["aqua"]="#00FFFF"; colorNames["white"]="#FFFFFF";
+colorNames["aliceblue"]="#F0F8FF"; colorNames["antiquewhite"]="#FAEBD7";
+colorNames["aquamarine"]="#7FFFD4"; colorNames["azure"]="#F0FFFF";
+colorNames["beige"]="#F5F5DC"; colorNames["blueviolet"]="#8A2BE2";
+colorNames["brown"]="#A52A2A"; colorNames["burlywood"]="#DEB887";
+colorNames["cadetblue"]="#5F9EA0"; colorNames["chartreuse"]="#7FFF00";
+colorNames["chocolate"]="#D2691E"; colorNames["coral"]="#FF7F50";
+colorNames["cornflowerblue"]="#6495ED"; colorNames["cornsilk"]="#FFF8DC";
+colorNames["crimson"]="#DC143C"; colorNames["darkblue"]="#00008B";
+colorNames["darkcyan"]="#008B8B"; colorNames["darkgoldenrod"]="#B8860B";
+colorNames["darkgray"]="#A9A9A9"; colorNames["darkgreen"]="#006400";
+colorNames["darkkhaki"]="#BDB76B"; colorNames["darkmagenta"]="#8B008B";
+colorNames["darkolivegreen"]="#556B2F"; colorNames["darkorange"]="#FF8C00";
+colorNames["darkorchid"]="#9932CC"; colorNames["darkred"]="#8B0000";
+colorNames["darksalmon"]="#E9967A"; colorNames["darkseagreen"]="#8FBC8F";
+colorNames["darkslateblue"]="#483D8B"; colorNames["darkslategray"]="#2F4F4F";
+colorNames["darkturquoise"]="#00CED1"; colorNames["darkviolet"]="#9400D3";
+colorNames["deeppink"]="#FF1493"; colorNames["deepskyblue"]="#00BFFF";
+colorNames["dimgray"]="#696969"; colorNames["dodgerblue"]="#1E90FF";
+colorNames["firebrick"]="#B22222"; colorNames["floralwhite"]="#FFFAF0";
+colorNames["forestgreen"]="#228B22"; colorNames["gainsboro"]="#DCDCDC";
+colorNames["ghostwhite"]="#F8F8FF"; colorNames["gold"]="#FFD700";
+colorNames["goldenrod"]="#DAA520"; colorNames["greenyellow"]="#ADFF2F";
+colorNames["honeydew"]="#F0FFF0"; colorNames["hotpink"]="#FF69B4";
+colorNames["indianred"]="#CD5C5C"; colorNames["indigo"]="#4B0082";
+colorNames["ivory"]="#FFFFF0"; colorNames["khaki"]="#F0E68C";
+colorNames["lavender"]="#E6E6FA"; colorNames["lavenderblush"]="#FFF0F5";
+colorNames["lawngreen"]="#7CFC00"; colorNames["lemonchiffon"]="#FFFACD";
+colorNames["lightblue"]="#ADD8E6"; colorNames["lightcoral"]="#F08080";
+colorNames["lightcyan"]="#E0FFFF"; colorNames["lightgoldenrodyellow"]="#FAFAD2";
+colorNames["lightgreen"]="#90EE90"; colorNames["lightgrey"]="#D3D3D3";
+colorNames["lightpink"]="#FFB6C1"; colorNames["lightsalmon"]="#FFA07A";
+colorNames["lightseagreen"]="#20B2AA"; colorNames["lightskyblue"]="#87CEFA";
+colorNames["lightslategray"]="#778899"; colorNames["lightsteelblue"]="#B0C4DE";
+colorNames["lightyellow"]="#FFFFE0"; colorNames["limegreen"]="#32CD32";
+colorNames["linen"]="#FAF0E6"; colorNames["mediumaquamarine"]="#66CDAA";
+colorNames["mediumblue"]="#0000CD"; colorNames["mediumorchid"]="#BA55D3";
+colorNames["ediumpurple"]="#9370D"; colorNames["mediumseagreen"]="#3CB371";
+colorNames["mediumslateblue"]="#7B68EE"; colorNames["mediumspringgreen"]="#00FA9A";
+colorNames["mediumturquoise"]="#48D1CC"; colorNames["mediumvioletred"]="#C71585";
+colorNames["midnightblue"]="#191970"; colorNames["mintcream"]="#F5FFFA";
+colorNames["mistyrose"]="#FFE4E1"; colorNames["moccasin"]="#FFE4B5";
+colorNames["navajowhite"]="#FFDEAD"; colorNames["oldlace"]="#FDF5E6";
+colorNames["olivedrab"]="#6B8E23"; colorNames["orange"]="#FFA500";
+colorNames["orangered"]="#FF4500"; colorNames["orchid"]="#DA70D6";
+colorNames["palegoldenrod"]="#EEE8AA"; colorNames["palegreen"]="#98FB98";
+colorNames["paleturquoise"]="#AFEEEE"; colorNames["palevioletred"]="#DB7093";
+colorNames["papayawhip"]="#FFEFD5"; colorNames["peachpuff"]="#FFDAB9";
+colorNames["peru"]="#CD853F"; colorNames["pink"]="#FFC0CB";
+colorNames["plum"]="#DDA0DD"; colorNames["powderblue"]="#B0E0E6";
+colorNames["rosybrown"]="#BC8F8F"; colorNames["royalblue"]="#4169E1";
+colorNames["saddlebrown"]="#8B4513"; colorNames["salmon"]="#FA8072";
+colorNames["sandybrown"]="#F4A460"; colorNames["seagreen"]="#2E8B57";
+colorNames["seashell"]="#FFF5EE"; colorNames["sienna"]="#A0522D";
+colorNames["skyblue"]="#87CEEB"; colorNames["slateblue"]="#6A5ACD";
+colorNames["slategray"]="#708090"; colorNames["snow"]="#FFFAFA";
+colorNames["springgreen"]="#00FF7F"; colorNames["steelblue"]="#4682B4";
+colorNames["tan"]="#D2B48C"; colorNames["thistle"]="#D8BFD8";
+colorNames["tomato"]="#FF6347"; colorNames["turquoise"]="#40E0D0";
+colorNames["violet"]="#EE82EE"; colorNames["wheat"]="#F5DEB3";
+colorNames["whitesmoke"]="#F5F5F5"; colorNames["yellowgreen"]="#9ACD32";
+var canvas_bgcolor = "";
+var canvas_width = 200;
+var canvas_height = 200;
+var canvas_noshade = 0;
+var canvas_nofill = 0;
+var canvas_noshadow = 0;
+var canvas_htmltext = 0;
+var canvas_imgtext = 0;
+var canvas_notext = 0;
+// canvas chart extension
+
+var s5NotesWindow;
+var s5NotesWindowLoaded = false;
+var previousSlide = 0;
+var presentationStart = new Date();
+var slideStart = new Date();
+
+var countdown = {
+ timer: 0,
+ state: 'pause',
+ start: new Date(),
+ end: 0,
+ remaining: 0
+};
+
+var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
+if(isIE) var notIE7 = parseInt(navigator.appVersion) < 7 ? 1 : 0;
+var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
+var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
+var isS2 = navigator.userAgent.indexOf('Safari') >= 2 ? 1 : 0;
+
+function hasClass(object, className) {
+ if (!object.className) return false;
+ return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
+}
+
+function hasValue(object, value) {
+ if (!object) return false;
+ return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
+}
+
+function removeClass(object,className) {
+ if (!object || !hasClass(object,className)) return;
+ object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
+}
+
+function addClass(object,className) {
+ if (!object || hasClass(object, className)) return;
+ if (object.className) {
+ object.className += ' '+className;
+ } else {
+ object.className = className;
+ }
+}
+
+function changeClass(object,className) {
+ if (!object) return;
+ object.firstChild.className = className;
+}
+
+function GetElementsWithClassName(elementName,className) {
+ var allElements = document.getElementsByTagName(elementName);
+ var elemColl = new Array();
+ for (var i = 0; i< allElements.length; i++) {
+ if (hasClass(allElements[i], className)) {
+ elemColl[elemColl.length] = allElements[i];
+ }
+ }
+ return elemColl;
+}
+
+function isParentOrSelf(element, id) {
+ if (element == null || element.nodeName=='BODY') return false;
+ else if (element.id == id) return true;
+ else return isParentOrSelf(element.parentNode, id);
+}
+
+function nodeValue(node) {
+ var result = "";
+ if (node.nodeType == 1) {
+ var children = node.childNodes;
+ for (var i = 0; i < children.length; ++i) {
+ result += nodeValue(children[i]);
+ }
+ }
+ else if (node.nodeType == 3) {
+ result = node.nodeValue;
+ }
+ return(result);
+}
+
+function slideLabel() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var list = document.getElementById('jumplist');
+ smax = slideColl.length;
+ for (var n = 0; n < smax; n++) {
+ var obj = slideColl[n];
+ var did = 'slide' + n.toString();
+ obj.setAttribute('id',did);
+ var otext = '';
+ var menu = obj.firstChild;
+ if (!menu) continue; // to cope with empty slides
+ while (menu && menu.nodeType == 3) {
+ menu = menu.nextSibling;
+ }
+ if (!menu) continue; // to cope with slides with only text nodes
+ var menunodes = menu.childNodes;
+ for (var o = 0; o < menunodes.length; o++) {
+ otext += nodeValue(menunodes[o]);
+ }
+ list.options[list.length] = new Option(n + ' : ' + otext, n);
+ }
+}
+
+function currentSlide() {
+ var cs, at, fd, ss;
+ if (document.getElementById) {
+ cs = document.getElementById('currentSlide');
+ } else {
+ cs = document.currentSlide;
+ }
+ fd = fadeModus?"F":"&ndash;";
+ ss = audioSupport?"S":"&ndash;";
+ at = (autoMatic?(playPause?"||":(playLoop?"&gt;0":"&gt;|")):"&ndash;&ndash;");
+ cs.innerHTML = '<div id="plink" nowrap="nowrap">' +
+ '<span id="csFade">[' + fd + ss + ']<\/span>&nbsp;' +
+ '<span id="csHere"><strong>' + snum + '<\/strong><\/span>' +
+ '<span id="csSep">\/<\/span>' +
+ '<span id="csTotal">' + (smax-1) + '<\/span>&nbsp;' +
+ '<span id="csAuto">[' + at + ']<\/span>' +
+ '<\/div>';
+
+ if (snum == 0) {
+ cs.style.visibility = 'hidden';
+ } else {
+ cs.style.visibility = 'visible';
+ }
+}
+
+function go(step) {
+ if (document.getElementById('slideProj').disabled || step == 0) return;
+ jl = document.getElementById('jumplist');
+ cid = 'slide' + snum;
+ var ce = document.getElementById(cid);
+ if (incrementals[snum].length > 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ removeClass(incrementals[snum][i], 'current');
+ removeClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ if (step != 'j') {
+ snum += step;
+ lmax = smax - 1;
+ if (snum > lmax) snum = lmax;
+ if (snum < 0) snum = 0;
+ }else {
+ snum = parseInt(jl.value);
+ }
+ nid = 'slide' + snum;
+ var ne = document.getElementById(nid);
+ if (!ne) {
+ ne = document.getElementById('slide0');
+ nid = 'slide0';
+ snum = 0;
+ }
+ if (step < 0) {
+ incpos = incrementals[snum].length
+ }else {
+ incpos = 0;
+ }
+ if (incrementals[snum].length > 0 && incpos == 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ if (hasClass(incrementals[snum][i], 'current')) {
+ incpos = i + 1;
+ }else {
+ addClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ }
+ if (incrementals[snum].length > 0 && incpos > 0) {
+ addClass(incrementals[snum][incpos - 1], 'current');
+ }
+ var guru = document.getElementById('guru');
+ if(guru && snum==0) {
+ guru.style.visibility = 'visible';
+ }else if(guru && snum>0) {
+ guru.style.visibility = 'hidden';
+ }
+ if(tranSitions && s5mode && fadeModus) {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {fadeoutSound(curSoundID,true); } // audio support
+ }
+ changeOpac(0,nid);
+ changeOpac(100,cid);
+ ce.style.visibility = 'visible';
+ shiftOpacity(cid,fadeDuration);
+ window.setTimeout("changeSlides()",fadeDuration);
+ }else {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {stopSound(curSoundID); } // audio support
+ }
+ ce.style.visibility = 'hidden';
+ if (isOp) location.hash = nid;
+ ne.style.visibility = 'visible';
+ finishSlides();
+ }
+}
+
+function changeSlides() {
+ if(nid != cid) changeOpac(100,cid);
+ document.getElementById(cid).style.visibility = 'hidden';
+ document.getElementById(nid).style.visibility = 'visible';
+ if (isOp) location.hash = nid;
+ shiftOpacity(nid,fadeDuration);
+ window.setTimeout("finishSlides()",fadeDuration);
+}
+
+function finishSlides() {
+ jl.selectedIndex = snum;
+ currentSlide();
+ loadNote();
+ permaLink();
+ number = undef;
+ if(sound[getSoundID(nid)]) {
+ playSound(nid); // audio support
+ }else if(sound[bgSoundItem] && curSoundID != bgSoundItem) {
+ playSound(bgSoundItem); // audio support
+ }
+}
+
+function goTo(target) {
+ if (target >= smax || target == snum) return;
+ go(target - snum);
+}
+
+function subgo(step) {
+ if (step > 0) {
+ removeClass(incrementals[snum][incpos - 1],'current');
+ removeClass(incrementals[snum][incpos], 'incremental');
+ if(tranSitions && s5mode && fadeModus) {
+ if(!incrementals[snum][incpos].id) {
+ var tmp = new Date(); tid = "inc" + String(tmp.getTime());
+ incrementals[snum][incpos].id = tid;
+ }else {
+ tid = incrementals[snum][incpos].id;
+ }
+ if(typeof(incrementals[snum][incpos].src) != "undefined" || incrementals[snum][incpos].getContext) {
+ changeOpac(0,tid);
+ addClass(incrementals[snum][incpos],'current');
+ shiftOpacity(tid,incrDuration);
+ setTimeout("nextInc()",incrDuration);
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ } else {
+ incpos--;
+ removeClass(incrementals[snum][incpos],'current');
+ addClass(incrementals[snum][incpos], 'incremental');
+ addClass(incrementals[snum][incpos - 1],'current');
+ loadNote();
+ }
+}
+
+function nextInc() {
+ incpos++;
+ loadNote();
+}
+
+function toggle() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ var guru = document.getElementById('guru');
+ if (!slides.disabled) {
+ stopPlay();
+ if(audioSupport && !swfUnloaded) stopAllSounds();
+ slides.disabled = true;
+ outline.disabled = false;
+ s5mode = false;
+ fontSize(1,'em');
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'visible';
+ }
+ if(guru) guru.style.visibility = 'hidden';
+ } else {
+ slides.disabled = false;
+ outline.disabled = true;
+ s5mode = true;
+ fontScale();
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'hidden';
+ }
+ slideColl[snum].style.visibility = 'visible';
+ if(guru && snum==0) guru.style.visibility = 'visible';
+ }
+}
+
+function showHide(action) {
+ var obj = GetElementsWithClassName('*','hideme')[0];
+ switch (action) {
+ case 's':
+ obj.style.visibility = 'visible';
+ break;
+ case 'h':
+ obj.style.visibility = 'hidden';
+ break;
+ case 'k':
+ if (obj.style.visibility != 'visible') {
+ obj.style.visibility = 'visible';
+ } else {
+ obj.style.visibility = 'hidden';
+ }
+ break;
+ }
+}
+
+function keys(key) {
+ if (!key) {
+ key = event;
+ key.which = key.keyCode;
+ }
+ if (helpmode) {
+ dumpHelpReq();
+ return;
+ }
+ if (key.which == 84 && !isOp) {
+ toggle();
+ return;
+ }
+ if (s5mode) {
+ if (autoMatic) {
+ switch (key.which) {
+ case 70: // f/ading on/off
+ switchFade();
+ break;
+ case 83: // s/ound on/off
+ toggleSounds();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 65: // a/utoplay on/off
+ stopPlay();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 80: // p/ause
+ case 32: // spacebar
+ pausePlay();
+ break;
+ }
+ }else {
+ switch (key.which) {
+ case 8: // backspace = HELP
+ createHelpReq();
+ break;
+ case 10: // return
+ case 13: // enter
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ if(number != undef) {
+ goTo(number);
+ break;
+ }
+ case 32: // spacebar
+ case 34: // page down
+ case 39: // rightkey
+ case 40: // downkey
+ if(number != undef) {
+ go(number);
+ } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ break;
+ case 33: // page up
+ case 37: // leftkey
+ case 38: // upkey
+ if(number != undef) {
+ go(-1 * number);
+ } else if (!incrementals[snum] || incpos <= 0) {
+ go(-1);
+ } else {
+ subgo(-1);
+ }
+ break;
+ case 65: // a/utoplay
+ startPlay();
+ break;
+ case 72: // h
+ case 36: // home
+ goTo(0);
+ break;
+ case 69: // e
+ case 35: // end
+ goTo(smax-1);
+ break;
+ case 70: // f/ade transitions on/off
+ switchFade();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 83: // s/ound support on/off
+ toggleSounds();
+ break;
+ case 27: // escape
+ case 81: // q
+ if(!isOp) byby();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 78: // n
+ createNotesWindow();
+ break;
+ }
+ if (key.which < 48 || key.which > 57) {
+ number = undef;
+ } else {
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
+ }
+ }
+ }
+ return false;
+}
+
+function clicker(e) {
+ number = undef;
+ var target;
+ if (window.event) {
+ target = window.event.srcElement;
+ e = window.event;
+ } else {
+ target = e.target;
+ }
+ if (target.href != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
+ if (!helpmode) {
+ if (!e.which || e.which == 1) {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ }
+ } else {
+ dumpHelpReq();
+ }
+}
+
+function findSlide(hash) {
+ var target = null;
+ var slides = GetElementsWithClassName('*','slide');
+ for (var i = 0; i < slides.length; i++) {
+ var targetSlide = slides[i];
+ if ( (targetSlide.name && targetSlide.name == hash)
+ || (targetSlide.id && targetSlide.id == hash) ) {
+ target = targetSlide;
+ break;
+ }
+ }
+ while(target != null && target.nodeName != 'BODY') {
+ if (hasClass(target, 'slide')) {
+ return parseInt(target.id.slice(5));
+ }
+ target = target.parentNode;
+ }
+ return null;
+}
+
+function slideJump() {
+ if (window.location.hash == null) return;
+ var sregex = /^#slide(\d+)$/;
+ var matches = sregex.exec(window.location.hash);
+ var dest = null;
+ if (matches != null) {
+ dest = parseInt(matches[1]);
+ } else {
+ dest = findSlide(window.location.hash.slice(1));
+ }
+ if (dest != null)
+ go(dest - snum);
+}
+
+function fixLinks() {
+ var thisUri = window.location.href;
+ thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
+ var aelements = document.getElementsByTagName('A');
+ for (var i = 0; i < aelements.length; i++) {
+ var a = aelements[i].href;
+ var slideID = a.match('\#slide[0-9]{1,2}');
+ if ((slideID) && (slideID[0].slice(0,1) == '#')) {
+ var dest = findSlide(slideID[0].slice(1));
+ if (dest != null) {
+ if (aelements[i].addEventListener) {
+ aelements[i].addEventListener("click", new Function("e",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "if (e.preventDefault) e.preventDefault();"), true);
+ } else if (aelements[i].attachEvent) {
+ aelements[i].attachEvent("onclick", new Function("",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "event.returnValue = false;"));
+ }
+ }
+ }
+ }
+}
+
+function externalLinks() {
+ if (!document.getElementsByTagName) return;
+ var anchors = document.getElementsByTagName('a');
+ for (var i=0; i<anchors.length; i++) {
+ var anchor = anchors[i];
+ if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
+ anchor.target = '_blank';
+ addClass(anchor,'external');
+ }
+ }
+}
+
+function permaLink() {
+ document.getElementById('plink').href = window.location.pathname + '#slide' + snum;
+}
+
+function createControls() {
+ var controlsDiv = document.getElementById("controls");
+ if (!controlsDiv) return;
+ var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
+ var hideDiv, hideList = '';
+ if (controlVis == 'hidden') {
+ hideDiv = hider;
+ } else {
+ hideList = hider;
+ }
+ if(isOp) {
+ var str = '';
+ }else {
+ var str = '<a accesskey="t" id="sheet" title="toggle CSS" href="javascript:toggle();">&plusmn;<\/a>';
+ }
+ if(isIE) {
+ var tmp = "move around&xA0;until the color&xA0;change to red!";
+ }else if(isS2) {
+ var tmp = "move around\r\nuntil the color\r\nchange to red!";
+ }else {
+ var tmp = "move around until color change to red!";
+ }
+ if(isIE) {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] for keyboard help!"><ul>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst" style="vertical-align: middle; width: 160px;"><select style="cursor: auto; width: 160px; height: auto;" id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del" style="vertical-align: middle; width: 52px;"><select style="cursor: auto; width: 52px; height: auto;" id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul><\/div><\/form>';
+ }else {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] or double click this area for keyboard help!" ondblclick="createHelpReq();"><ul>' +
+ '<li id="exit"><a href="javascript:byby();" accesskey="q" title="exit Show"><\/a><\/li>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li class="vr"><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst"><a id="list" style="cursor:wait;" title="' + tmp + '"><\/a><select id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="fadeLinks" class="vr"><\/li>' +
+ '<li id="fade"><a class="isoff" href="javascript:switchFade();" accesskey="f" title="Transions"><\/a><\/li>' +
+ '<li id="audioLinks" class="vr"><\/li>' +
+ '<li id="audio"><a class="isoff" href="javascript:toggleSounds();" accesskey="s" title="Sounds" ><\/a><\/li>' +
+ '<li id="vol"><a id="volume" style="cursor:wait;" title="' + tmp + '"><\/a><select id="volumelist" title="select Volume" onchange="setVolume();"><option value="100">100<\/option><option value="90">90<\/option><option value="80">80<\/option><option value="70">70<\/option><option value="60">60<\/option><option value="50">50<\/option><option value="40">40<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="10">10<\/option><option value="0">0<\/option><\/select><\/li>' +
+ '<li id="autoLinks" class="vr"><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del"><a id="delay" style="cursor:wait;" title="' + tmp + '"><\/a><select id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul>' +
+ '<a href="http://s5.netzgesta.de" target="_blank" title="S5 Reloaded"><img style="position: absolute; right: 0; bottom: 0;" src="data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAYAAAASYli2AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAYpSURBVHjaYvz//z8DOYCRkZEZRAEx0Ij/f2HiAAHEgqYIpACkkB1J7g8Q/wLRIJ1QNSB5fiDmAOLvQKHPQPoHSB4ggFiQDGMCUnxALAPECkAsBLIdiD8A8SMgfghU8wlqkTgQK1ZVVWldv3792fr16y8D+c9AhgMEECPIy1DDRIDYAojdzMzMWNXV1UG2/v/y5Qvzw4cPP587d24/kH8Gar/uwoULQ+/cufNFXFyciZmZ+UVmZuZKoFmvAQII5kJOIDbi4uKK2Llz53EbG5vP6GGWn5+vMWnSpJtA5jcg5v327Rtnc3PzfSD79+rVq2WBNBtIHUAAwQzkAWKzBQsWnIUZFhISovXmzZsfkpKSDD09PY8kJCR+QtWCguGvrKwsz7Rp07Q4ODh+srCwgILiH0gSIIBgBrICsUBoaCgorBiANgqvXbtWDMg8AcQf9+7d+x0o9xbI/gJV/3fVqlUvmJiY/gIdcaWhoYETahEDQADBDPwNxO9h3gNpBiq6f/HiRbWjR4+yvnr16grQNbeh6kCWsxkYGIhClT8yNDQUgyYhBoAAYoIKfgXi06mpqUowQ+vr6x+uW7fu0suXL8+uWbOGS0BAwB7kC6jXvqmoqLDIyclxzZo1S4udnR2WtBgAAggWyyCXSgOxZUxMjGpWVtY7S0vLr8iRsnnzZl4/P7/DQCYoYtSA2DApKUkVGNNPDh06dBrIvwU06xNAAMEM5AIKqAOxCjQsmHl5eXWdnJx4N2zYcB4prd4CUpfwJRuAAGJCimULoGYpbm5uZ5DBnz9/5tq4caPWkSNHeJEc+g0aTFzfv3/nACabjzk5OW8FBQVloLmHASCAYJECUiTg7+//HJiQTzY2NsrfvXv3n7m5+T5YMgJGEkjDS2gY/pKRkeHt7Ow0Bsb0v9+/fz+HxTJAAMG8DHKFLTC9aRUXF79BT9Qgw4CWHAAy70FdYgjEDgkJCTpWVlYMQBfeAaaMPqBZbwECCGYgMzQGQSleCehS0X///jEDvf9lxYoVoOTyAIjfANX+BqrlBrL1gLFf09vb+0FaWvoHMBctA6USUKQABBAjrPiCliKg7AOKIG5ougLlju9Ipc1foDJWqMWGhYWFtsBg4RISEnrg5uY2BWQgQACxIBkGMkQKijmRfPwXWuI8ASp7DQ1vEP4DDO8PwBzzDJheT0CLPQaAAEJOh0o8zAzeihwMiv+gGZ0B4sz/bIwM797/YTh1/wfDIWj5qAfMmtFnzpz5ICIiwqKoqPgjKChoOtCs5wABhJyXpUCGzddgOIethJ71jEFi1nNwgQrKz8zv37//097eDop15qVLl0pAzWAACCAWhEMYOJFdduELA++b3wxsTIwMfzmYGH6xMDG8gYYpKAg+cnJy/gB6VwuYZFiA7E+wvAwQQCy46ozexwzG17+BYx6UVE4B8Vmo68CRFR0dDQo3UAHBBUwJ4lCLGAACCNnAv4zQxAkCxbIMZ0EuBIYb98EPDFo3voGTzjOogVzArGf969cvNmC2+wssHD7BDAQIIBakmHwPDPy3MAMNeBhgpfbbVEkGhqQbDJaXvjI8BPJB4jz79u37DcwlP+fPn38NuTwECCBkA1+8+8Nwtusxg+STHwwcP/8z8EuwMXA1KjBcBSlwEmRgBhrID/U2O7QMBIEHxsbGkrAwBAggmIGgNMT64AfDWyB+By0EQMVZlC0/wwsXQYa38hzgCGGBWv5ZU1OT4c+fP8yLFi1SA3r5Haw8BAggmIGg5KBpJ8BgeOYTg8S3f2DN/OxMDNwgw0AKnv0EJ+avsITu7u6+EZqzQEHwHFqaMwAEEAtShS/pLcTwrU+Z4QwsyQANOwIL06tfGV5BqwmQWoGKigoLYJnJvWPHjhstLS169vb2M0DqAAIIVh6CXHT/9ndIawEUITCXgUDrQwbGbe8YjkJdAzZQVVVV/t69e8LAgtUYaNgxWKQABBByacMHzfTK9gIMYkBZpj//GT4c+8gAKm1AsfseqPYPtHTXAtaEacBqlgHoyq+srKw3XV1dFwHlvwEEECNyYwmp3cIJjbUf0DbLP7RGEg+0bcMCjQxQzH8BWQgQQIzktr5wAYAAYmKgMgAIMAAp8Fx3osz1lgAAAABJRU5ErkJggg==" width="20" height="32" alt="S5" \/><\/a>' +
+ '<\/div><\/form>';
+ }
+ if (controlVis == 'hidden') {
+ var hidden = document.getElementById('navLinks');
+ } else {
+ var hidden = document.getElementById('jumplist');
+ }
+ addClass(hidden,'hideme');
+}
+
+function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
+ if (!s5mode && !isOp) return false;
+ var hScreen = screen.width; var vScreen = screen.height;
+ var vWindow = window.outerHeight; var hWindow = window.outerWidth;
+ if (isOp && s5mode && defaultView=='slideshow' && ((hScreen != hWindow) || (vScreen != vWindow))) {
+ toggle();
+ return false;
+ }
+ if (isOp && !s5mode && ((hScreen != hWindow) || (vScreen != vWindow))) return false;
+ if (isOp && !s5mode && (hScreen == hWindow) && (vScreen == vWindow)) toggle();
+ var vScale = 48; // both yield 16 (the usual browser default) at 1024x768
+ var hScale = 64; // perhaps should auto-calculate based on theme's declared value?
+ if (window.innerHeight) {
+ var vSize = window.innerHeight;
+ var hSize = window.innerWidth;
+ } else if (document.documentElement.clientHeight) {
+ var vSize = document.documentElement.clientHeight;
+ var hSize = document.documentElement.clientWidth;
+ } else if (document.body.clientHeight) {
+ var vSize = document.body.clientHeight;
+ var hSize = document.body.clientWidth;
+ } else {
+ var vSize = 700; // assuming 1024x768, minus chrome and such equals 8:5
+ var hSize = 1024; // these do not account for kiosk mode or Opera Show
+ }
+ var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
+ extendImgSizes(newSize); // scalable images extension
+ extendCanSizes(newSize); // scalable canvas extension
+ extendObjSizes(newSize); // scalable object extension
+ fontSize(newSize,"px");
+ if(!isS2 || firstTime==0) {
+ generateCanvas(); // dynamic canvas extension
+ }
+ if (isGe) { // hack to counter incremental reflow bugs
+ var obj = document.getElementsByTagName('body')[0];
+ obj.style.visibility = 'hidden';
+ obj.style.display = 'none';
+ obj.style.display = 'block';
+ obj.style.visibility = 'visible';
+ changeOpac(100,'slide' + snum);
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("fixReflow()",10);
+ }else {
+ setListPos(); // invisible select extension
+ }
+}
+
+function fixReflow() {
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("finishReflow()",10);
+}
+function finishReflow() {
+ setListPos(); // invisible select extension
+}
+
+function fontSize(val,fmt) {
+ var value = val + fmt;
+ if (!(s5ss = document.getElementById('s5ss'))) {
+ if (!document.createStyleSheet) {
+ document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
+ s5ss.setAttribute('media','screen, projection');
+ s5ss.setAttribute('id','s5ss');
+ } else {
+ document.createStyleSheet();
+ document.s5ss = document.styleSheets[document.styleSheets.length - 1];
+ }
+ }
+ if (!(document.s5ss && document.s5ss.addRule)) {
+ while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
+ s5ss.appendChild(document.createTextNode('html {font-size: ' + value + ' !important;}'));
+ } else {
+ document.s5ss.addRule('html','font-size: ' + value + ' !important;');
+ }
+}
+
+function windowChange() {
+ fontScale();
+}
+
+function notOperaFix() {
+ slideCSS = document.getElementById('slideProj').href;
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ slides.setAttribute('media','screen');
+ outline.disabled = true;
+ if (isGe) {
+ slides.setAttribute('href','null'); // Gecko fix
+ slides.setAttribute('href',slideCSS); // Gecko fix
+ }
+ if ((isIE && notIE7) && document.styleSheets && document.styleSheets[0]) {
+ document.styleSheets[0].addRule('img', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('div', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('.slide', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ }
+}
+
+function getIncrementals(obj) {
+ var incrementals = new Array();
+ if (!obj)
+ return incrementals;
+ var children = obj.childNodes;
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ if (hasClass(child, 'incremental')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'incremental');
+ for (var j = 0; j < child.childNodes.length; j++) {
+ if (child.childNodes[j].nodeType == 1) {
+ addClass(child.childNodes[j], 'incremental');
+ }
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ removeClass(child,'incremental');
+ }
+ }
+ if (hasClass(child, 'show-first')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'show-first');
+ if (child.childNodes[isGe].nodeType == 1) {
+ removeClass(child.childNodes[isGe], 'incremental');
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ }
+ }
+ incrementals = incrementals.concat(getIncrementals(child));
+ }
+ return incrementals;
+}
+
+function createIncrementals() {
+ var incrementals = new Array();
+ for (var i = 0; i < smax; i++) {
+ incrementals[i] = getIncrementals(document.getElementById('slide'+i));
+ }
+ return incrementals;
+}
+
+function trap(e) {
+ if (!e) {
+ e = event;
+ e.which = e.keyCode;
+ }
+ try {
+ modifierKey = e.ctrlKey || e.altKey || e.metaKey;
+ }
+ catch(e) {
+ modifierKey = false;
+ }
+ return modifierKey || e.which == 0;
+}
+
+// notes extension
+function noteLabel() { // Gives notes id's to match parent slides
+ var notes = GetElementsWithClassName('div','notes');
+ for (var i = 0; i < notes.length; i++) {
+ var note = notes[i];
+ var id = 'note' + note.parentNode.id.substring(5);
+ note.setAttribute('id',id);
+ }
+ resetElapsedSlide();
+ resetRemainingTime();
+ window.setInterval('updateElaspedTime()', 1000);
+}
+
+function createNotesWindow() { // creates a window for our notes
+ if (!s5NotesWindow || s5NotesWindow.closed) { // Create the window if it doesn't exist
+ s5NotesWindowLoaded = false;
+ // Note: Safari has a tendency to ignore window options preferring to default to the settings of the parent window, grr.
+ s5NotesWindow = window.open(s5Path+'ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0');
+ }
+ if (s5NotesWindowLoaded) { // Load the current note if the Note HTML has loaded
+ loadNote();
+ } else { // Keep trying...
+ window.setTimeout('createNotesWindow()', 50);
+ }
+}
+
+function loadNote() {
+// Loads a note into the note window
+ var notes = nextNotes = '<em class="disclaimer">There are no notes for this slide.</em>';
+ if (document.getElementById('note' + snum)) {
+ notes = document.getElementById('note' + snum).innerHTML;
+ }
+ if (document.getElementById('note' + (snum + 1))) {
+ nextNotes = document.getElementById('note' + (snum + 1)).innerHTML;
+ }
+
+ var jl = document.getElementById('jumplist');
+ var slideTitle = jl.options[jl.selectedIndex].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex) ? ' (' + jl.selectedIndex + '/' + (smax - 1) + ')' : '');
+ if (incrementals[snum].length > 0) {
+ slideTitle += ' <small>[' + incpos + '/' + incrementals[snum].length + ']</small>';
+ }
+ if (jl.selectedIndex < smax - 1) {
+ var nextTitle = jl.options[jl.selectedIndex + 1].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex + 1) ? ' (' + (jl.selectedIndex + 1) + '/' + (smax - 1) + ')' : '');
+ } else {
+ var nextTitle = '[end of slide show]';
+ }
+
+ if (s5NotesWindow && !s5NotesWindow.closed && s5NotesWindow.document) {
+ s5NotesWindow.document.getElementById('slide').innerHTML = slideTitle;
+ s5NotesWindow.document.getElementById('notes').innerHTML = notes;
+ s5NotesWindow.document.getElementById('next').innerHTML = nextTitle;
+ s5NotesWindow.document.getElementById('nextnotes').innerHTML = nextNotes;
+ }
+ resetElapsedSlide();
+}
+
+function minimizeTimer(id) {
+ var obj = s5NotesWindow.document.getElementById(id);
+ if (hasClass(obj,'collapsed')) {
+ removeClass(obj,'collapsed');
+ } else {
+ addClass(obj,'collapsed');
+ }
+}
+
+function resetElapsedTime() {
+ presentationStart = new Date();
+ slideStart = new Date();
+ updateElaspedTime();
+}
+
+function resetElapsedSlide() {
+ if (snum != previousSlide) {
+ slideStart = new Date();
+ previousSlide = snum;
+ updateElaspedTime();
+ }
+}
+
+function updateElaspedTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var now = new Date();
+ var ep = s5NotesWindow.document.getElementById('elapsed-presentation');
+ var es = s5NotesWindow.document.getElementById('elapsed-slide');
+ ep.innerHTML = formatTime(now.valueOf() - presentationStart.valueOf());
+ es.innerHTML = formatTime(now.valueOf() - slideStart.valueOf());
+}
+
+function resetRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var startField = s5NotesWindow.document.getElementById('startFrom');
+ startFrom = readTime(startField.value);
+ countdown.remaining = startFrom * 60000; // convert to msecs
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var timeLeft = formatTime(countdown.remaining);
+ tl.innerHTML = timeLeft;
+}
+
+function updateRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var now = new Date();
+ if (countdown.state == 'run') {
+ countdown.remaining = countdown.end - now;
+ }
+ tl.style.color = '';
+ tl.style.backgroundColor = '';
+ if (countdown.remaining >= 0) {
+ var timeLeft = formatTime(countdown.remaining);
+ removeClass(tl,'overtime');
+ if (countdown.remaining < 300000) {
+ tl.style.color = 'rgb(' + (255-Math.round(countdown.remaining/2000)) + ',0,0)';
+ tl.style.backgroundColor = 'rgb(255,255,' + (Math.round(countdown.remaining/2000)) + ')';
+ }
+ } else {
+ var timeLeft = '-' + formatTime(-countdown.remaining);
+ addClass(tl,'overtime');
+ }
+ tl.innerHTML = timeLeft;
+}
+
+function toggleRemainingTime() {
+ if (countdown.state == 'pause') countdown.state = 'run'; else countdown.state = 'pause';
+ if (countdown.state == 'pause') {
+ window.clearInterval(countdown.timer);
+ }
+ if (countdown.state == 'run') {
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ countdown.timer = window.setInterval('updateRemainingTime()', 1000);
+ }
+}
+
+function alterRemainingTime(amt) {
+ var change = amt * 60000; // convert to msecs
+ countdown.end += change;
+ countdown.remaining += change;
+ updateRemainingTime();
+}
+
+function formatTime(msecs) {
+ var time = new Date(msecs);
+
+ var hrs = time.getUTCHours() + ((time.getUTCDate() -1) * 24); // I doubt anyone will spend more than 24 hours on a presentation or single slide but just in case...
+ hrs = (hrs < 10) ? '0'+hrs : hrs;
+ if (hrs == 'NaN' || isNaN(hrs)) hrs = '--';
+
+ var min = time.getUTCMinutes();
+ min = (min < 10) ? '0'+min : min;
+ if (min == 'NaN' || isNaN(min)) min = '--';
+
+ var sec = time.getUTCSeconds();
+ sec = (sec < 10) ? '0'+sec : sec;
+ if (sec == 'NaN' || isNaN(sec)) sec = '--';
+
+ return hrs + ':' + min + ':' + sec;
+}
+
+function readTime(val) {
+ var sregex = /:/;
+ var matches = sregex.exec(val);
+ if (matches == null) {
+ return val;
+ } else {
+ var times = val.split(':');
+ var hours = parseInt(times[0]);
+ var mins = parseInt(times[1]);
+ var total = (hours * 60) + mins;
+ return total;
+ }
+}
+// notes extension
+
+// startup process
+function createSlideShow() {
+ defaultCheck();
+ if(!isIE) createDetector(); // (degrade IE) scalable images extension
+ if(opac!=0 || isIE) { // &&!isIE (degrade IE)
+ tranSitions = false;
+ fadeModus = false;
+ }
+ if(tranSitions && document.getElementById && document.createElement){
+ createProgress();
+ var nop=document.getElementById('StartupControl');
+ nop.onload = dumpProgress;
+ }else {
+ startup();
+ showAll();
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+ }
+}
+
+function defaultCheck() {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'defaultView') {
+ defaultView = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'controlVis') {
+ controlVis = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'tranSitions') {
+ tranSitions = (allMetas[i].content == "true") ? true : false;
+ fadeModus = (tranSitions == true) ? true : false;
+ }
+ if (allMetas[i].name == 'fadeDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ fadeDuration = Math.max(200,Math.min(tmp,2000));
+ }
+ if (allMetas[i].name == 'incrDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ incrDuration = Math.max(50,Math.min(tmp,500));
+ }
+ if (allMetas[i].name == 'autoMatic') {
+ autoMatic = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playLoop') {
+ playLoop = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playDelay') {
+ var tmp = parseInt(allMetas[i].content);
+ playDelay = Math.max(5,Math.min(tmp,90))*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ }
+ if (allMetas[i].name == 'audioSupport') {
+ audioSupport = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'audioVolume') {
+ var tmp = parseInt(allMetas[i].content);
+ audioVolume = Math.max(0,Math.min(tmp,100));
+ }
+ if (allMetas[i].name == 'audioError') {
+ audioError = (allMetas[i].content == "true") ? true : false;
+ }
+ }
+}
+
+function createProgress() {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "StartupProgress";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=100)";
+ }else {
+ pg.style.opacity = 1.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/progress.gif)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+
+ var im = document.createElement('img');
+ im.id = "StartupControl";
+ im.src = s5Path+"ui/graphic_support/blank.gif?" + new Date().valueOf();
+ document.getElementsByTagName("body")[0].appendChild(im);
+}
+
+function startup() {
+ createControls(); // hallvord
+ slideLabel();
+ incrementals = createIncrementals();
+ noteLabel(); // [SI:060104] must follow slideLabel()
+ loadNote();
+ fixLinks();
+ externalLinks();
+ fontScale();
+ if (!isOp) {
+ if(isIE) {
+ document.getElementById('lst').style.backgroundImage = 'none';
+ document.getElementById('del').style.backgroundImage = 'none';
+ }else {
+ document.getElementById('audio').style.backgroundImage = 'none';
+ }
+ notOperaFix();
+ }else if(isOp) {
+ var obj = document.getElementById('exit');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('exit').style.opacity = 0.5;
+ obj = document.getElementById('toggle');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('toggle').style.opacity = 0.5;
+ document.getElementById('jumplist').style.visibility = 'hidden';
+ document.getElementById('list').style.visibility = 'hidden';
+ document.getElementById('lst').style.opacity = 0.5;
+ obj = document.getElementById('audio');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('audio').style.opacity = 0.5;
+ document.getElementById('volumelist').style.visibility = 'hidden';
+ document.getElementById('volume').style.visibility = 'hidden';
+ document.getElementById('vol').style.opacity = 0.5;
+ document.getElementById('delaylist').style.visibility = 'hidden';
+ document.getElementById('delay').style.visibility = 'hidden';
+ document.getElementById('del').style.opacity = 0.5;
+ }
+ slideJump();
+ if (defaultView == 'outline') toggle();
+ document.onkeyup = keys;
+ document.onkeypress = trap;
+ document.onclick = clicker;
+}
+
+function preloadImgages() {
+ var temp = '';
+ var objects = document.getElementsByTagName('img');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].src != '') {
+ temp = new Image();
+ temp.src = objects[i].src;
+ }
+ }
+}
+
+function showAll() {
+ var obj1 = GetElementsWithClassName('div','presentation')[0];
+ if(!obj1) var obj1 = GetElementsWithClassName('ol','presentation')[0];
+ var obj2 = GetElementsWithClassName('div','layout')[0];
+ if(!obj1){}else {obj1.style.display = 'block'};
+ if(!obj2){}else {obj2.style.display = 'block'};
+}
+
+function dumpProgress() {
+ document.body.removeChild(document.getElementById('StartupControl'));
+ startup();
+ preloadImgages();
+ showAll();
+ createSoundManagerScript();
+ shiftOpacity('StartupProgress',1000);
+ window.setTimeout("removeProgress()",1000);
+}
+
+function removeProgress() {
+ document.body.removeChild(document.getElementById('StartupProgress'));
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+}
+function panelSetup() {
+ if(playPause) {
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ if(playLoop) {
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ if(audioSupport && !isIE && !isOp) {
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ }
+ if(fadeModus && !isIE) {
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ if(autoMatic) {
+ var obj = document.getElementById('auto'); changeClass(obj,'ison');
+ startPlay();
+ }
+ if(audioVolume && !isIE && !isOp) {
+ var idx = 0;
+ if(audioVolume >= 95 && audioVolume <= 100) {idx = 0;}
+ else if(audioVolume >= 85 && audioVolume < 95) {idx = 1;}
+ else if(audioVolume >= 75 && audioVolume < 85) {idx = 2;}
+ else if(audioVolume >= 65 && audioVolume < 75) {idx = 3;}
+ else if(audioVolume >= 55 && audioVolume < 65) {idx = 4;}
+ else if(audioVolume >= 45 && audioVolume < 55) {idx = 5;}
+ else if(audioVolume >= 35 && audioVolume < 45) {idx = 6;}
+ else if(audioVolume >= 25 && audioVolume < 35) {idx = 7;}
+ else if(audioVolume >= 15 && audioVolume < 25) {idx = 8;}
+ else if(audioVolume >= 5 && audioVolume < 15) {idx = 9;}
+ else {idx = 10;}
+ document.getElementById('volumelist').selectedIndex = idx;
+ }
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+}
+// startup process
+
+// shutdown process
+function byby() {
+ stopPlay();
+ if(tranSitions && fadeModus && s5mode && !isOp) {
+ fadeoutSound(curSoundID,true); // audio support
+ var pg = document.createElement('div');
+ pg.id = "GoodBy";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=0)";
+ }else {
+ pg.style.opacity = 0.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/finish.gif)";
+ document.getElementsByTagName("body")[0].appendChild(pg);
+ shiftOpacity('GoodBy',1000);
+ window.setTimeout("history.back()",1000);
+ }else {
+ stopSound(curSoundID);
+ history.back();
+ }
+}
+// shutdown process
+
+// scalable images extension
+function createDetector() {
+ var em = document.createElement('div');
+ em.id='EMSizeControl'; em.style.position="absolute"; em.style.left="-999px";
+ em.style.width="1em"; em.style.height="1em"; em.style.opacity=0.0;
+ document.getElementsByTagName("body")[0].appendChild(em);
+ var nop=document.getElementById('EMSizeControl');
+ if(!nop||findPosX(nop)!=-999) {}else {
+ opac=document.getElementById('EMSizeControl').style.opacity;
+ empx=document.getElementById('EMSizeControl').offsetHeight;
+ document.body.removeChild(document.getElementById('EMSizeControl'));
+ var objects = document.getElementsByTagName('img');
+ var j = 0; var i = 0; var k = 0; var d; var obj;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ images[j] = objects[i];
+ ++j;
+ }
+ }
+ var objects = document.getElementsByTagName('canvas'); j = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ canvas[objects[i].id] = objects[i];
+ if(j==0) {
+ if(objects[i].getContext) {
+ canvasSupport = true;
+ }
+ ++j;
+ }
+ }
+ }
+ if(canvasSupport!=true) {
+ for (d in canvas) {
+ try {
+ canvas[d].setAttribute("width",1);
+ canvas[d].setAttribute("height",1);
+ } catch (e) {
+ }
+ }
+ }
+ var objects = document.getElementsByTagName('table');
+ j = 0; k = 0; l = 0; var w; var h; var tmp; var cnt;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^piechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ piecharts[j] = objects[i];
+ em = piecharts[j].getAttribute("summary");
+ if(em != "") em = "," + em;
+ piecharts[j].setAttribute("summary", w + "," + h + em);
+ ++j;
+ }
+ }
+ }
+ if(objects[i].className.match(/^barchart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ barcharts[k] = objects[i];
+ em = barcharts[k].getAttribute("summary");
+ if(em != "") em = "," + em;
+ barcharts[k].setAttribute("summary", w + "," + h + em);
+ ++k;
+ }
+ }
+ }
+ if(objects[i].className.match(/^linechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ linecharts[l] = objects[i];
+ em = linecharts[l].getAttribute("summary");
+ if(em != "") em = "," + em;
+ linecharts[l].setAttribute("summary", w + "," + h + em);
+ ++l;
+ }
+ }
+ }
+ }
+ objects = document.getElementsByTagName('object'); j = 0; i = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ medias[j] = objects[i]; ++j;
+ if(!isIE) {
+ if(objects[i].getAttributeNode("classid")) objects[i].removeAttributeNode(objects[i].getAttributeNode("classid"));
+ if(objects[i].getAttributeNode("codebase")) objects[i].removeAttributeNode(objects[i].getAttributeNode("codebase"));
+ }
+ }
+ }
+ }
+}
+function extendImgSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < images.length; i++) {
+ w=images[i].getAttribute("width",0);
+ h=images[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ images[i].style.width=Math.floor(w*q)+"px";
+ images[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+
+function extendCanSizes(f) {
+ if(empx>0 && canvasSupport) {
+ var q = (f/empx); var w = 0; var h = 0; var tmp = ""; var cnt; var obj;
+ for(var i=0; i < piecharts.length; i++) {
+ if(piecharts[i].getAttribute("summary")) {
+ tmp = piecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = piecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < barcharts.length; i++) {
+ if(barcharts[i].getAttribute("summary")) {
+ tmp = barcharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = barcharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < linecharts.length; i++) {
+ if(linecharts[i].getAttribute("summary")) {
+ tmp = linecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = linecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ }
+}
+function extendObjSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < medias.length; i++) {
+ w=medias[i].getAttribute("width",0);
+ h=medias[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ medias[i].style.width=Math.floor(w*q)+"px";
+ medias[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+function findPosX(obj) {
+ var posLeft = 0;
+ while (obj.offsetParent) {
+ posLeft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ return posLeft;
+}
+function findPosY(obj) {
+ var posTop = 0;
+ while (obj.offsetParent) {
+ posTop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ return posTop;
+}
+// scalable images extension
+
+// canvas chart extension
+function deg2rad(degrees) {
+ return Math.PI *degrees/180;
+}
+function rad2deg(radians) {
+ return 180.0 *radians/Math.PI;
+}
+function circle_point_x(radians, diameter) {
+ var x = Math.cos(radians)*(diameter/2);
+ return x;
+}
+function circle_point_y(radians, diameter) {
+ var y = Math.sin(radians)*(diameter/2);
+ return y;
+}
+function roundTo(val,dig) {
+ var num = val;
+ if (val > 8191 && val < 10485) {
+ val = val-5000;
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ num = num+5000;
+ } else {
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ }
+ return num;
+}
+function searchColor(value) {
+ for (var dat in colorNames) {
+ if(dat==value) return colorNames[dat];
+ }
+ return false;
+}
+function scanColor(value) {
+ if(value.match(/^#[0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var val1 = value.substr(1,1).toLowerCase();
+ var val2 = value.substr(2,1).toLowerCase();
+ var val3 = value.substr(3,1).toLowerCase();
+ value = '#' + val1 + val1 + val2 + val2 + val3 + val3;
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var tmp = searchColor(value.toLowerCase());
+ if(!tmp) {}else{value = tmp;}
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ value = '#000000';
+ }
+ return value.toLowerCase();
+}
+function hex2rgb(val,trans) {
+ if(val.length==7) {
+ var tp1 = Math.max(0,Math.min(parseInt(val.substr(1,2),16),255));
+ var tp2 = Math.max(0,Math.min(parseInt(val.substr(3,2),16),255));
+ var tp3 = Math.max(0,Math.min(parseInt(val.substr(5,2),16),255));
+ return 'rgba(' + tp1 + ',' + tp2 + ',' + tp3 + ',' + trans + ')';
+ }
+}
+function trim(str) {
+ return (str.replace(/\s+$/,"").replace(/^\s+/,""));
+}
+function roundedRect(ctx,x,y,width,height,radius){
+ ctx.beginPath();
+ ctx.moveTo(x,y+radius);
+ ctx.lineTo(x,y+height-radius);
+ ctx.quadraticCurveTo(x,y+height,x+radius,y+height);
+ ctx.lineTo(x+width-radius,y+height);
+ ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius);
+ ctx.lineTo(x+width,y+radius);
+ ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
+ ctx.lineTo(x+radius,y);
+ ctx.quadraticCurveTo(x,y,x,y+radius);
+ ctx.closePath();
+}
+function drawString(ctx, text, fc, tx, ty) {
+ var xp = 0; var c = "";
+ ctx.beginPath();
+ for (var i = 0; i < text.length; i++) {
+ c = text[i];
+ ctx.drawImage(font, signs[c].sx, signs[c].sy, signs[c].sw, signs[c].sh, tx+xp, ty, signs[c].sw*fc, signs[c].sh*fc);
+ xp += (signs[c].sw*fc);
+ }
+ ctx.closePath();
+}
+function strokeString(ctx, txt, col, fh, tx, ty) {
+ var fw = fh*0.666666; var lw = fh*0.125;
+ var ls = lw/2; var cr = lw; var xp = 0;
+ ctx.lineCap = "round"; ctx.lineJoin = "round"
+ ctx.lineWidth = lw; ctx.strokeStyle = col;
+ for (var i = 0; i < txt.length; i++) {
+ strokeSymbol(ctx, txt[i], ls, tx+xp, ty, fw, fh);
+ xp += (txt[i]!="."?fw+cr:(fw/2)+cr);
+ }
+}
+function strokeSymbol(ctx, symbol, fc, cx, cy, cw, ch) {
+ ctx.beginPath();
+ switch (symbol) {
+ case "0":
+ ctx.moveTo(cx+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+(cw/2),(cw/2)-fc,deg2rad(180),0, false);
+ ctx.arc(cx+(cw/2),(cy+ch)-(cw/2),(cw/2)-fc,0,deg2rad(180), false);
+ ctx.closePath();
+ break;
+ case "1":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.moveTo(cx+(cw*0.666666),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.666666),cy+fc);
+ ctx.lineTo(cx+(cw*0.25),cy+(ch*0.25));
+ break;
+ case "2":
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.8));
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+fc,cy+ch-fc);
+ ctx.arc(cx+(cw/2),cy+(cw*0.425),(cw*0.425)-fc,deg2rad(45),deg2rad(-180), true);
+ break;
+ case "3":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-90),deg2rad(180), false);
+ break;
+ case "4":
+ ctx.moveTo(cx+(cw*0.75),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.5),cy+ch-fc);
+ break;
+ case "5":
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-80),deg2rad(180), false);
+ break;
+ case "6":
+ ctx.moveTo(cx+fc,cy+ch-(cw*0.5)-fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-180),deg2rad(180), false);
+ ctx.bezierCurveTo(cx+fc,cy+fc,cx+fc,cy+fc,cx+(cw*0.9)-fc,cy+fc);
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ break;
+ case "7":
+ ctx.moveTo(cx+(cw*0.5),cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.25)-fc);
+ break;
+ case "8":
+ ctx.moveTo(cx+(cw*0.92)-fc,cy+(cw*0.59));
+ ctx.arc(cx+(cw/2),cy+(cw*0.45),(cw*0.45)-fc,deg2rad(25),deg2rad(-205), true);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-135),deg2rad(-45), true);
+ ctx.closePath();
+ ctx.moveTo(cx+(cw*0.79),cy+(ch*0.47));
+ ctx.lineTo(cx+(cw*0.21),cy+(ch*0.47));
+ break;
+ case "9":
+ ctx.moveTo(cx+cw-fc,cy+(cw*0.5));
+ ctx.arc(cx+(cw/2),cy+(cw*0.5),(cw*0.5)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.bezierCurveTo(cx+cw-fc,cy+ch-fc,cx+cw-fc,cy+ch-fc,cx+(cw*0.1)+fc,cy+ch-fc);
+ break;
+ case "%":
+ ctx.moveTo(cx+fc,cy+(ch*0.75));
+ ctx.lineTo(cx+cw-fc,cy+(ch*0.25));
+ ctx.moveTo(cx+(cw*0.505),cy+(cw*0.3));
+ ctx.arc(cx+(cw*0.3),cy+(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.moveTo(cx+(cw*0.905),cy+ch-(cw*0.3));
+ ctx.arc(cx+(cw*0.7),cy+ch-(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ break;
+ case ".":
+ ctx.moveTo(cx+(cw*0.25),cy+ch-fc-fc);
+ ctx.arc(cx+(cw*0.25),cy+ch-fc-fc,fc,deg2rad(0),deg2rad(360), false);
+ ctx.closePath();
+ break;
+ default:
+ break;
+ }
+ ctx.stroke();
+}
+function drawBar(ctx,x,y,width,height,color,value,textdiv){
+ var rw = width/2; var rh = rw/2;
+ height = Math.max(height,rw);
+ var dh = Math.max(height-(2*rh),0.1); var S2L;
+ var xx = rw/8; var yy = rh/4;
+ var yo = rh/2; y = y - yy;
+ if(canvas_noshadow <= 0 && canvas_noshade <= 0) {
+ ctx.save();
+ S2L = ctx.createRadialGradient(x+rw+rh,y+height-rw+yy+rh,0,x+rw,y+height-rw+yy,rw);
+ S2L.addColorStop(0, 'rgba(0,0,0,0.5)');
+ S2L.addColorStop(0.7, 'rgba(0,0,0,0.25)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = S2L;
+ ctx.scale(1,0.5);
+ ctx.translate(xx,y+height+yy);
+ if(isOp){
+ ctx.fillRect(x,y+yy+height-width,width,width);
+ }else {
+ ctx.arc(x+rw,y+yy+height-width,width,0,deg2rad(360), false);
+ ctx.fill();
+ }
+ ctx.restore();
+ }else if(canvas_noshadow <= 0 && canvas_noshade >= 1) {
+ ctx.fillStyle = 'rgba(0,0,0,0.2)';
+ ctx.fillRect(x+yo,y+rh+yo+yo,width,dh);
+ }
+
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x,y+(height/2),x+width,y+(height/2));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.75)');
+ S2L.addColorStop(0.2, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.3, 'rgba(0,0,0,0)');
+ S2L.addColorStop(0.5, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.35)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.1)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.strokeStyle = S2L;
+ ctx.stroke();
+ }else {
+ ctx.fillStyle = color;
+ ctx.fillRect(x,y+rh+yo,width,dh);
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var bw = width; var bh = bw/4;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ var c; var w;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,x+(width/2)-(bw/2),y,bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext <= 0) {
+ strokeString(ctx, value + "%","rgba(48,48,48,1)", th, x+(width/2)-(w/2), y+((bh-th)/2));
+ }else {
+ drawString(ctx, value + "%", tf, x+(width/2)-(w/2), y+((bh-th)/2.2));
+ }
+ }else {
+ var bh = bw/3; var th = roundTo(bh*0.75,0);
+ roundedRect(ctx,x,y,bw,bh,bh/4);
+ ctx.fill();
+ var obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = x + "px";
+ obj.style.top = y+((bh-th)/2.2) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+
+ }
+}
+function drawLine(ctx,x,y,width,height,dist,array,factor,color,fill){
+ if(fill <= 0){
+ var style = hex2rgb(color,0.5);
+ ctx.lineJoin = "miter";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height);
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.lineTo(x+width,y+height);
+ ctx.lineTo(x,y+height);
+ ctx.closePath();
+ ctx.fillStyle = style;
+ ctx.fill();
+ }
+ ctx.lineJoin = "round";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height-(array[0]*factor));
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.strokeStyle = color;
+ ctx.stroke();
+}
+function setDataURL(cid) {
+ if(cid.toDataURL) {
+ var obj = document.getElementById(cid.id + "_link");
+ if(obj) {
+ obj.setAttribute("title", "To Data URL");
+ obj.setAttribute("target", "_blank");
+ obj.setAttribute("href", cid.toDataURL());
+ }
+ }
+}
+function get_input(dataobj,canvasobj,linechart) {
+ var table = document.getElementById(dataobj);
+ var canvas = document.getElementById(canvasobj);
+ var row; var clm; var cnt = 0; var val = 0; var nme = ""; var col = "";
+ if(canvas.getContext) {
+ canvas_width = parseInt(canvas.style.width);
+ canvas_height = parseInt(canvas.style.height);
+ if(canvas_width >= 16 && canvas_height >= 16) {
+ var tmp = table.getAttribute("summary");
+ canvas_noshade = 0; canvas_noshadow = 0;
+ canvas_notext = 0; canvas_imgtext = 0;
+ canvas_htmltext = 0; canvas_nofill = 0;
+ if(tmp.search(/noshadow/) != -1) canvas_noshadow = 1;
+ if(tmp.search(/noshade/) != -1) canvas_noshade = 1;
+ if(tmp.search(/nofill/) != -1) canvas_nofill = 1;
+ if(tmp.search(/notext/) != -1) canvas_notext = 1;
+ if(tmp.search(/htmltext/) != -1) canvas_htmltext = 1;
+ if(tmp.search(/imgtext/) != -1) canvas_imgtext = 1;
+ if(table.getAttribute("bgcolor")) {
+ canvas_bgcolor = scanColor(table.getAttribute("bgcolor"));
+ }
+ ChartData = new Array(); colorSlice = new Array();
+ if(table.getElementsByTagName("tr")[0].getElementsByTagName("th")[0]) cnt = 1;
+ for(var r = cnt; r < table.getElementsByTagName("tr").length; r++) {
+ row = table.getElementsByTagName("tr")[r];
+ clm = row.getElementsByTagName("td").length;
+ if(row.getElementsByTagName("td")[0].getAttribute("bgcolor")) {
+ col = scanColor(row.getElementsByTagName("td")[0].getAttribute("bgcolor")); val = 0;
+ nme = trim(row.getElementsByTagName("td")[1].innerHTML.replace(/<[^>]+>/g,""));
+ if(!linechart) {
+ if(clm > 3) {
+ for(var z = 2; z < clm; z++) {
+ val += parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ }else {
+ val = parseFloat(row.getElementsByTagName("td")[2].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ if(!isNaN(val) && val > 0 && nme != '') {
+ colorSlice[r-cnt] = col; ChartData[nme] = Math.abs(val);
+ }else {
+ break;
+ }
+ }else {
+ val = 0; i = 0;
+ if(clm > 3 && nme != '') {
+ ChartData[r-cnt] = new Array();
+ colorSlice[r-cnt] = col;
+ for(var z = 2; z < clm; z++) {
+ val = Math.abs(parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,"")));
+ if(!isNaN(val) && val >= 0) {
+ ChartData[r-cnt][i] = val; i++;
+ }else {
+ ChartData[r-cnt][i] = 0; i++;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }
+ }
+}
+function setPieChart(canvasobj,textobj) {
+ var cd = (Math.min(canvas_width,canvas_height)/110)*100;
+ var cp = cd*0.1; var cr = cd/2;
+ var sr = cr*0.93; var cw = cd+cp; var ch = cw;
+ var cx = (cd/2)+(cp/2); var cy = cx; var ct = 0;
+ for (var data in ChartData) {
+ ct += ChartData[data];
+ }
+ var poc = ct/100;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ }
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,cw,ch);
+ }else {
+ ctx.clearRect(0,0,cw,ch);
+ }
+ if(canvas_noshadow <= 0) {
+ if(!isOp) {
+ ctx.beginPath();
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),cr,cx+(cr*0.1),cy+(cr*0.1),sr*0.9);
+ B2B.addColorStop(0, 'rgba(0,0,0,0)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.arc(cx+(cr*0.1),cy+(cr*0.1),cr,0,deg2rad(360), false);
+ ctx.closePath();
+ ctx.fillStyle = B2B;
+ ctx.fill();
+ }else {
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),0,cx+(cr*0.1),cy+(cr*0.1),cr);
+ B2B.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(0.87, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = B2B;
+ ctx.fillRect(0,0,cw,ch);
+ }
+ }
+ var val = 0; var deg = 0; var idx = 0; var data;
+ for (data in ChartData) {
+ val = ChartData[data]; sdeg = deg;
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ ctx.beginPath();
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr,sdeg,edeg, false);
+ ctx.lineTo(cx,cy);
+ ctx.closePath();
+ ctx.fillStyle = colorSlice[(idx++)];
+ ctx.fill();
+ }
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ var W2T = ctx.createLinearGradient(cp*2,cp*2,cx,cy);
+ W2T.addColorStop(0, 'rgba(255,255,255,0.8)');
+ W2T.addColorStop(1, 'rgba(255,255,255,0)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.fillStyle = W2T;
+ ctx.fill();
+ ctx.beginPath();
+ var T2B = ctx.createLinearGradient(cx,cy,cw-(cp*2),ch-(cp*2));
+ T2B.addColorStop(0, 'rgba(0,0,0,0)');
+ T2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.fillStyle = T2B;
+ ctx.fill();
+ ctx.beginPath();
+ var B2T = ctx.createLinearGradient(cx,cy,cw-(cp*1.9),ch-(cp*1.9));
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.strokeStyle = B2T;
+ ctx.stroke();
+ ctx.beginPath();
+ var T2W = ctx.createLinearGradient(cx,cy,(cp*1.9),(cp*1.9));
+ T2W.addColorStop(0, 'rgba(255,255,255,0)');
+ T2W.addColorStop(1, 'rgba(255,255,255,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.strokeStyle = T2W;
+ ctx.stroke();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var mpos = 0; var per = 0; var gx = 0;
+ var gy = 0; var tx = 0; var ty = 0;
+ var obj = ""; var w = 0; var c = 0;
+ var bw = cr*0.45; var bh = cr*0.125;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext >= 1) {
+ bw = (cr*0.365);
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ for (data in ChartData) {
+ val = ChartData[data];
+ sdeg = deg; mpos = deg+(((val/2)/ct)*deg2rad(360));
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ per = roundTo(val/poc,2);
+ gx = circle_point_x(mpos, cd);
+ gy = circle_point_y(mpos, cd);
+ tx = parseFloat((cx+(2*Math.floor(cx + gx)))/3);
+ ty = (cy+(2*Math.floor(cy + gy)))/3;
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext >= 1) {
+ drawString(ctx, per + "%", tf, tx-(w/2), ty-(th/1.8));
+ }else {
+ strokeString(ctx, per + "%","rgba(48,48,48,1)", th, tx-(w/2), ty-(th/2));
+ }
+ }else {
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = (tx-(bw/2)) + "px";
+ obj.style.top = ty-(th/1.8) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+ }
+ }
+ }
+}
+function setBarChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9; var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05; var ph = canvas_height*0.05;
+ var cm = 0; var ct = 0;
+ for (var data in ChartData) {
+ cm = Math.max(cm,ChartData[data]);
+ ct += ChartData[data];
+ }
+ var hf = ih/cm; var bs = colorSlice.length;
+ var bw = iw/(bs*1.1); var poc = ct/100;
+ var th = roundTo((bw/3)*0.75,0);
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ var obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ var cc = ""; var bh = 0; var idx = 0; var t = 0; per = 0;
+ for (var data in ChartData) {
+ per = roundTo(ChartData[data]/poc,2);
+ bh = ChartData[data]*hf;
+ drawBar(ctx,pw+(t*(bw*1.1)),ph+ih-bh,bw,bh,colorSlice[(idx++)],per,textdiv);
+ t++;
+ }
+ }
+}
+function setLineChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9;
+ var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05;
+ var ph = canvas_height*0.05;
+ var cm = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ cm = Math.max(cm,ChartData[i][j]);
+ }
+ }
+ var hf = (ih*0.95)/cm; var bw = iw;
+ var dw = iw/(ChartData[0].length-1)
+ var dh = ih/(ChartData[0].length-1)
+ var ps = Math.min(pw,ph); lw = ps/4;
+ var B2T;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_noshadow <= 0) {
+ B2T = ctx.createLinearGradient(pw+ps,ph+ih+1,pw+ps+ps,ph+ih+1);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps,ph+ih);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.lineTo(pw+ps+ps,ph+ih);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+ps+ps,ph+ih,pw+ps+ps,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps+ps,ph+ih);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+ps+iw,ph+ih+ps);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.closePath();
+ ctx.fill();
+ var B2T = ctx.createLinearGradient(pw+iw+1,ph+ps,pw+iw+1,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.35)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps);
+ ctx.lineTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+iw,ph+ps+ps,pw+iw+ps,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.35)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+iw+ps,ph+ih+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = lw/2;
+ ctx.strokeStyle = "rgba(255,255,255,0.25)";
+ if(canvas_nofill <= 0) {
+ ctx.fillStyle = "rgba(240,240,240,0.8)";
+ ctx.strokeStyle = "rgba(255,255,255,1)";
+ ctx.fillRect(pw,ph,iw,ih);
+ }
+ for (var i = 0; i < ChartData[0].length-1; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph);
+ ctx.lineTo(pw+(i*dw),ph+ih);
+ ctx.stroke();
+ }
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw,ph+(i*dh));
+ ctx.lineTo(pw+iw,ph+(i*dh));
+ ctx.stroke();
+ }
+ ctx.lineWidth = lw;
+ var cc = ""; var bh = 0; var idx = 0; var t = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ t = Math.max(t,ChartData[i][j]);
+ }
+ bh = t*hf; cc = colorSlice[(idx++)];
+ drawLine(ctx,pw,ph+ih-bh,bw,bh,dw,ChartData[i],hf,cc,canvas_nofill);
+ }
+ ctx.beginPath();
+ ctx.moveTo(pw,ph);
+ ctx.lineTo(pw,ph+ih);
+ ctx.lineTo(pw+iw+(lw/2),ph+ih);
+ ctx.strokeStyle = "rgba(48,48,48,1)";
+ ctx.stroke();
+ ctx.lineWidth = lw/2;
+ B2T = ctx.createLinearGradient(pw,ph+ih,pw,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,1)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.strokeStyle = B2T;
+ for (var i = 0; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph+ih);
+ ctx.lineTo(pw+(i*dw),ph+ih+ps);
+ ctx.stroke();
+ }
+ B2T = ctx.createLinearGradient(pw-ps,ph,pw,ph);
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,1)');
+ ctx.strokeStyle = B2T;
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw-ps,ph+(i*dh));
+ ctx.lineTo(pw,ph+(i*dh));
+ ctx.stroke();
+ }
+ }
+}
+function generateCanvas() {
+ if(canvasSupport) {
+ var canvasID; var tdataID; var textID;
+ var tmp; var dat; var i; var j;
+ for(i=0; i < piecharts.length; i++) {
+ tmp = piecharts[i].id.split("_");
+ tdataID = piecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setPieChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < barcharts.length; i++) {
+ tmp = barcharts[i].id.split("_");
+ tdataID = barcharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setBarChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < linecharts.length; i++) {
+ tmp = linecharts[i].id.split("_");
+ tdataID = linecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID,true);
+ if(colorSlice.length > 0) {
+ if(ChartData.length == colorSlice.length) {
+ setLineChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ }
+}
+// canvas chart extension
+
+// invisible select extension
+function setListPos(opt) {
+ if(!isIE) { //(degrade IE)
+ var ref = document.getElementById('list');
+ var x = findPosX(ref); var y = findPosY(ref);
+ var obj = document.getElementById('jumplist');
+ obj.style.position = 'fixed'; obj.style.left = x + 'px'; obj.style.top = y + 'px';
+ var vol = document.getElementById('volumelist');
+ ref = document.getElementById('volume');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ vol.style.position = 'fixed'; vol.style.left = x + 'px'; vol.style.top = y + 'px';
+ var del = document.getElementById('delaylist');
+ ref = document.getElementById('delay');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ del.style.position = 'fixed'; del.style.left = x + 'px'; del.style.top = y + 'px';
+ var pnl = document.getElementById('navLinks');
+ }
+ if(opt) {
+ if(isIE) {
+ //(degrade IE)
+ //pnl.style.filter = "alpha(opacity=80)";
+ }else {
+ obj.style.opacity = 0.0;
+ vol.style.opacity = 0.0;
+ del.style.opacity = 0.0;
+ pnl.style.opacity = 0.8;
+ }
+ }
+}
+// invisible select extension
+
+// transition extension
+function switchFade() {
+ if(tranSitions && s5mode && fadeModus) {
+ fadeModus = false;
+ playDelay = playDelay-(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'isoff');
+ }else if(tranSitions && s5mode && !fadeModus) {
+ fadeModus = true;
+ playDelay = playDelay+(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ currentSlide();
+}
+function opacity(ids, opacStart, opacEnd, millisec) {
+ var speed = Math.round(millisec / 100);
+ var timer = 0;
+ if(opacStart > opacEnd) {
+ for(var i = opacStart; i >= opacEnd; i--) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ } else if(opacStart < opacEnd) {
+ for(var i = opacStart; i <= opacEnd; i++) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ }
+}
+function changeOpac(opacity, ids) {
+ var obj = document.getElementById(ids);
+ if (isIE) {
+ obj.style.filter = "alpha(opacity=" + opacity + ")";
+ } else {
+ obj.style.opacity = (opacity / 100);
+ }
+}
+function shiftOpacity(ids, millisec) {
+ if(document.getElementById(ids).style.opacity != '') {
+ var currentOpac = document.getElementById(ids).style.opacity * 100;
+ } else {
+ var currentOpac = 0;
+ }
+ if(currentOpac == 0) {
+ opacity(ids, currentOpac, 100, millisec);
+ } else if(currentOpac > 0) {
+ opacity(ids, currentOpac, 0, millisec);
+ }
+}
+// transition extension
+
+// autoplay extension
+function autoPlay() {
+ if (s5mode && autoMatic && !playPause) {
+ if ((snum >= (smax-1)) && playLoop) {
+ goTo(0);
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }else if ((snum >= (smax-1)) && !playLoop) {
+ stopPlay();
+ }else {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ if (incrementals[snum].length >0) {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = parseInt(playDelay/(incrementals[snum].length+1));
+ remainDer = parseInt(playDelay-(incrDelay*incrementals[snum].length));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ } else {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = incrDuration;
+ remainDer = parseInt(playDelay-(incrementals[snum].length*incrDuration));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }
+ }
+}
+function autoPlayIncr() {
+ if (incpos < incrementals[snum].length) {
+ subgo(1);
+ autoRun = setTimeout('autoPlayIncr();',incrDelay);
+ }else {
+ autoRun = setTimeout('nop();',remainDer);
+ }
+}
+function nop() {
+ // no operation dummy
+}
+function togglePlay() {
+ if (autoRun && s5mode) {
+ stopPlay();
+ }else if (!autoRun && s5mode) {
+ startPlay();
+ }
+}
+function stopPlay() {
+ if (autoRun && s5mode) {
+ clearTimeout(autoRun); autoRun = null;
+ autoMatic = false; playPause = false; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'isoff');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ currentSlide();
+ }
+}
+function startPlay() {
+ if (!autoRun && s5mode) {
+ playPause = false; autoMatic = true; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'ison');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ autoRun = setTimeout('autoPlay();',playDelay);
+ currentSlide();
+ }
+}
+function pausePlay() {
+ if (s5mode && autoMatic) {
+ if (playPause) {
+ playPause = false; autoRun = setTimeout('autoPlay();',playDelay);
+ var obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ }else {
+ if (autoRun){
+ clearTimeout(autoRun); autoRun = null; playPause = true;
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+ }
+}
+function switchLoop() {
+ if(s5mode) {
+ if (playLoop) {
+ playLoop = false;
+ var obj = document.getElementById('loop'); changeClass(obj,'isoff');
+ }else {
+ playLoop = true;
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+}
+function setDelay() {
+ var val = document.getElementById('delaylist');
+ if(s5mode) {
+ var delay = Math.max(5,Math.min(parseInt(val.value),300));
+ playDelay = (fadeModus == true) ? ((delay*1000)+(2*fadeDuration)) : (delay*1000);
+ }
+}
+// autoplay extension
+
+// audio extension
+function createSoundManagerScript() {
+ if(typeof soundManager=="undefined") {
+ onerrorSM2();
+ }else {
+ var script=document.createElement('SCRIPT');
+ var tx=document.createTextNode("soundManager.createMovie();");
+ script.appendChild(tx);
+ document.getElementsByTagName("body")[0].appendChild(script);
+ }
+}
+//soundManager.onload = function() {
+function onloadSM2() {
+ if(!isIE) { //(degrade IE)
+ swfUnloaded = false;
+ preloadSounds();
+ }
+}
+//soundManager.onerror = function() {
+function onerrorSM2() {
+ if(typeof soundManager!="undefined") {
+ soundManager.destruct;
+ delete soundManager;
+ }
+ audioSupport = false; swfUnloaded = true;
+ if(audioError && !isIE && !isOp) {
+ var dv = document.createElement('div'); dv.id = "guru";
+ var d2=document.createElement('div'); dv.appendChild(d2);
+ var tx=document.createTextNode('Guru Meditation - SoundManager failed to load/initialize!');
+ d2.appendChild(tx); document.getElementById('slide0').appendChild(dv);
+ }
+}
+function audioSetup() {
+ if(sound[0]) {
+ playSound(0);
+ }else if(sound[bgSoundItem] && !sound[0]) {
+ playSound(bgSoundItem);
+ }
+}
+function fadeoutSound(ids, option) {
+ if(curSoundID >= 0 && !swfUnloaded) {
+ if(isNaN(ids)) {
+ if(ids == "bgSound") {
+ var cnum = parseInt(bgSoundItem);
+ }else {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && ids == sound[i]["id"]) {
+ var cnum = i;
+ break;
+ }
+ }
+ }
+ }else {
+ var cnum = ids;
+ ids = sound[cnum]["id"];
+ }
+ var vol = getMaxVolume(sound[cnum]["volume"]);
+ var millisec = fadeDuration;
+ var speed = Math.round(millisec / vol);
+ var timer = 0;
+ for(var i = vol; i > 0; i--) {
+ setTimeout("fadeout(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ if(option) setTimeout("stopSound('"+ids+"')",millisec);
+ }
+}
+function fadeout(volume, id) {
+ soundManager.setVolume(id,volume);
+}
+function stopSound(ids) {
+ var sid;
+ if(isNaN(ids)) {
+ sid = ids;
+ }else if(sound[ids]) {
+ sid = sound[ids]["id"];
+ }
+ if(sid!='' && curSoundID >= 0) {
+ soundManager.stop(sid);
+ curSoundID = -1;
+ }
+}
+function toggleSounds() {
+ if(audioSupport && !swfUnloaded) {
+ stopAllSounds();
+ }else if (!audioSupport && !swfUnloaded) {
+ allowSounds();
+ }
+}
+function allowSounds() {
+ if(!swfUnloaded) {
+ audioSupport = true;
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ currentSlide();
+ }
+}
+function stopAllSounds() {
+ if(curSoundID >= 0) {
+ stopSound(curSoundID);
+ }else {
+ soundManager.stopAll();
+ curSoundID = -1;
+ }
+ audioSupport = false;
+ var obj = document.getElementById('audio'); changeClass(obj,'isoff');
+ currentSlide();
+}
+function playSound(id) {
+ if(audioSupport && !swfUnloaded) {
+ var url, sid, vol, lps, cnum;
+ if(isNaN(id)) {
+ sid = id;
+ if(sid == "bgSound") {
+ cnum = parseInt(bgSoundItem);
+ }else {
+ cnum = getSoundID(id);
+ }
+ }else {
+ cnum = parseInt(id);
+ if(sound[cnum]) sid = sound[cnum]["id"];
+ }
+ if(sound[cnum] && sound[cnum]["url"]!='' && sid!=''){
+ url = sound[cnum]["url"];
+ vol = (sound[cnum]["volume"]!='')?getMaxVolume(sound[cnum]["volume"]):getMaxVolume(100);
+ lps = (sound[cnum]["loops"])?true:false;
+ if(lps) {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){soundManager.play(sid,{volume:getMaxVolume(sound[cnum]["volume"])});}});
+ }else {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){curSoundID=-1;}});
+ }
+ }
+ }
+}
+function getSoundID(str) {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && str == sound[i]["id"]) {
+ var id = i;
+ break;
+ }
+ }
+ return id;
+}
+function setVolume() {
+ var vol = document.getElementById('volumelist');
+ if(audioSupport && !swfUnloaded) {
+ audioVolume = parseInt(vol.value);
+ if(curSoundID >= 0) {
+ if(sound[curSoundID]) {
+ var sid = sound[curSoundID]["id"];
+ var vid = getMaxVolume(sound[curSoundID]["volume"]);
+ soundManager.setVolume(sid,vid);
+ }
+ }
+ }
+}
+function getMaxVolume(value) {
+ if(audioVolume>0) {var factor = audioVolume/100;}else {var factor = 0;}
+ return Math.max(0,Math.min(parseInt(value*factor),audioVolume));
+}
+function preloadSounds() {
+ var temp = ''; var parm = ''; var t = ''; var cl = '';
+ var objects = document.getElementsByTagName('object');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].type.toLowerCase() == 'audio/mp3' && objects[i].data != '') {
+ objects[i].width = 0; objects[i].height = 0;
+ if(objects[i].parentNode.tagName == 'DIV') {
+ cl = objects[i].parentNode.className.toLowerCase();
+ if(cl == 'presentation' || cl == 'slide') {
+ if(cl == 'presentation') {
+ t = parseInt(bgSoundItem);
+ }else {
+ t = parseInt(objects[i].parentNode.id.slice(5, objects[i].parentNode.id.length));
+ }
+ sound[t] = new Object();
+ if(t < bgSoundItem) {
+ sound[t]["id"] = objects[i].parentNode.id;
+ }else {
+ sound[t]["id"] = "bgSound";
+ }
+ sound[t]["url"] = objects[i].data;
+ sound[t]["volume"] = 100; sound[t]["loops"] = false;
+ if(objects[i].archive != '') {
+ parm = objects[i].archive.toLowerCase().split(',');
+ for (var j=0; j < parm.length; j++) {
+ if(parm[j] == 'loop') sound[t]["loops"] = true;
+ if(parm[j].search(/^volume/) != -1) {
+ var tmp = parm[j].split(':');
+ sound[t]["volume"] = parseInt(tmp[1]);
+ }
+ }
+ }
+ soundManager.createSound(sound[t]["id"],sound[t]["url"]);
+ }
+ }
+ }
+ }
+}
+// audio extension
+
+// help extension
+function createHelpReq() {
+ if(!document.getElementById("HelpReq")) {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "HelpReq";
+ if (pg.addEventListener) {
+ pg.addEventListener("onclick",dumpHelpReq,false);
+ } else if (pg.attachEvent) {
+ pg.attachEvent("onclick",dumpHelpReq);
+ }
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=90)";
+ } else {
+ pg.style.opacity = 0.9;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(64,64,64)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/help.jpg)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+ if(document.getElementById("HelpReq")) {
+ helpmode = true;
+ }
+ }
+}
+function dumpHelpReq() {
+ if(document.getElementById("HelpReq")) {
+ document.body.removeChild(document.getElementById('HelpReq'));
+ helpmode = false;
+ }
+}
+// help extension
+
+//DEBUG
+function ConsoleLog(value) {
+ if(window.console) {
+ window.console.log(value);
+ }
+}
+//DEBUG
+
+document.write('<style type="text/css" media="screen" id="blockStyle">.presentation, .layout {display: none; }</style>');
+
+if(!isIE && !isOp) {
+ document.write('<script type="text/javascript" src="'+s5Path+'ui/audio_support/soundmanager2.js"></script>');
+ if(typeof soundManager!="undefined") {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'audioDebug') {
+ var audioDebug = (allMetas[i].content == "true") ? true : false;
+ soundManager.defaultOptions.debugMode = audioDebug;
+ }
+ }
+ }
+}
+
+window.onload = createSlideShow;
+window.onresize = function(){setTimeout('windowChange()',5);} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/toggle_link.png
new file mode 100644
index 000000000..4588e2514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/toggle_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/toggle_over.png
new file mode 100644
index 000000000..400f613b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/toggle_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/volume_link.png
new file mode 100644
index 000000000..f362acd1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/volume_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/wrap.css
new file mode 100644
index 000000000..a37315552
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/wrap.css
@@ -0,0 +1,410 @@
+/********************************************************************
+Screen and Print Styles for the Wrap Plugin
+********************************************************************/
+
+/* tables in columns and boxes should span the whole width */
+.wrap_column table,
+.wrap_left table, .wrap_right table, .wrap_center table,
+.wrap_box table,
+.wrap_info table, .wrap_important table, .wrap_alert table, .wrap_tip table, .wrap_help table, .wrap_todo table, .wrap_download table {
+ width: 100%;
+}
+/* emulate a headline */
+.wrap_column em strong,
+.wrap_left em strong, .wrap_right em strong, .wrap_center em strong,
+.wrap_box em strong,
+.wrap_info em strong, .wrap_important em strong, .wrap_alert em strong, .wrap_tip em strong, .wrap_help em strong, .wrap_todo em strong, .wrap_download em strong {
+ font-size: 130%;
+ font-weight: bold;
+ font-style: normal;
+ display: block;
+}
+/* emulate a bigger headline with a bottom border */
+.wrap_column em strong em.u,
+.wrap_left em strong em.u, .wrap_right em strong em.u, .wrap_center em strong em.u,
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ font-size: 115%;
+ border-bottom: 1px solid __border__;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+}
+/* different bigger headline for safety notes */
+.wrap_danger em strong em.u, .wrap_warning em strong em.u, .wrap_caution em strong em.u, .wrap_notice em strong em.u, .wrap_safety em strong em.u {
+ font-size: 115%;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+ text-transform: uppercase;
+ border-bottom-width: 0;
+}
+/* change border colour of emulated headlines inside boxes to something more neutral
+ (to match all the different background colours) */
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ border-bottom-color: #999;
+}
+
+
+/* columns
+********************************************************************/
+
+.wrap_left,
+.wrap_column {
+ float: left;
+ margin-right: 1.5em;
+}
+.wrap_right {
+ float: right;
+ margin-left: 1.5em;
+}
+.wrap_center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+/*
+.wrap_column,
+.wrap_left,
+.wrap_right {
+ overflow: hidden;
+}
+*/
+.wrap_container {
+ margin-right: -1.5em;
+}
+
+
+/* alignments
+********************************************************************/
+
+.wrap_leftalign {
+ text-align: left;
+}
+.wrap_centeralign {
+ text-align: center;
+}
+.wrap_rightalign {
+ text-align: right;
+}
+.wrap_justify {
+ text-align: justify;
+}
+
+
+/* box
+********************************************************************/
+
+/* see styles for boxes and notes with icons in style.css */
+
+/*____________ rounded corners ____________*/
+/* (only for modern browsers) */
+
+div.wrap_round {
+ border-radius: 20px;
+ -moz-border-radius: 20px;
+ -webkit-border-radius: 20px;
+ -khtml-border-radius: 20px;
+}
+span.wrap_round {
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -khtml-border-radius: 2px;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_lo {
+ color: __text_neu__;
+ font-size: 85%;
+}
+div.wrap_em {
+ color: #c00;
+ font-weight: bold;
+}
+
+/* see styles for highlighted text in style.css */
+
+
+/* typography
+********************************************************************/
+
+/*____________ fonts ____________*/
+
+div.wrap_sansserif {
+ font-family: Verdana,Tahoma,Geneva,"DejaVu Sans","Bitstream Vera Sans","Liberation Sans", Arial,Helvetica,FreeSans,"Liberation Sans","Nimbus Sans L", sans-serif;
+}
+div.wrap_serif {
+ font-family: Georgia,Garamond,"Palatino Linotype","Book Antiqua",Palatino,Palladio,"URW Palladio L","Liberation Serif",Didot,Gentium,"Bitstream Charter","Century Schoolbook L", "Times New Roman",Times,"Nimbus Roman No9 L","FreeSerif", serif;
+}
+div.wrap_monospace {
+ font-family: Courier,"Courier New",FreeMono,"Nimbus Mono L","Liberation Mono", "Lucida Console",Monaco,"DejaVu Sans Mono","Bitstream Vera Sans Mono", monospace;
+}
+
+/*____________ font size ____________*/
+
+div.wrap_bigger {
+ font-size: 125%;
+}
+div.wrap_muchbigger {
+ font-size: 200%;
+}
+div.wrap_smaller {
+ font-size: 75%;
+}
+
+/*____________ font colours ____________*/
+
+div.wrap_fgred {
+ color: #900;
+}
+div.wrap_fggreen {
+ color: #090;
+}
+div.wrap_fgblue {
+ color: #009;
+}
+div.wrap_fgcyan {
+ color: #099;
+}
+div.wrap_fgviolet {
+ color: #909;
+}
+div.wrap_fgyellow {
+ color: #990;
+}
+div.wrap_fggrey {
+ color: #666;
+}
+div.wrap_fgblack {
+ color: #000;
+}
+
+/* see styles for background colours and white font colour in style.css */
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ indent ____________*/
+
+div.wrap_indent {
+ padding-left: 1.5em;
+}
+
+/*____________ outdent ____________*/
+
+div.wrap_outdent {
+ margin-left: -1.5em;
+}
+
+/*____________ word wrapping in pre ____________*/
+
+divdiv.wrap_prewrap pre {
+ white-space: pre-wrap;
+ word-wrap: break-word;/* for IE < 8 */
+ /* white-space: -moz-pre-wrap; for FF < 3 */
+}
+
+/*____________ spoiler ____________*/
+
+divdiv.wrap_spoiler {
+ margin-bottom: 1.5em;
+}
+/* see rest of spoiler styles in style.css */
+
+/*____________ clear float ____________*/
+
+div.wrap_clear {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ font-size: 1px;
+ visibility: hidden;
+ overflow: hidden;
+}
+
+/*____________ hide ____________*/
+
+div.wrap_hide {
+ display: none;
+}
+
+
+/* STYLE.CSS */
+
+/* box
+********************************************************************/
+
+.wrap_box {
+ background: __background_alt__;
+ color: __text__;
+/*
+ overflow: hidden;
+*/
+}
+div.wrap_box,
+div.wrap_danger, div.wrap_warning, div.wrap_caution, div.wrap_notice, div.wrap_safety {
+ padding: 1em 1em .5em;
+ margin-bottom: 1.5em;
+}
+span.wrap_box,
+span.wrap_danger, span.wrap_warning, span.wrap_caution, span.wrap_notice, span.wrap_safety {
+ padding: 0 .3em;
+}
+
+/*____________ notes with icons ____________*/
+
+/* general styles for all note divs */
+div.wrap_info, div.wrap_important, div.wrap_alert, div.wrap_tip, div.wrap_help, div.wrap_todo, div.wrap_download {
+ padding: 1em 1em .5em 70px;
+ margin-bottom: 1.5em;
+ min-height: 68px;
+ background-position: 10px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html div.wrap_info, * html div.wrap_important, * html div.wrap_alert, * html div.wrap_tip, * html div.wrap_help, * html div.wrap_todo, * html div.wrap_download {
+ height: 68px;
+}
+/* general styles for all note spans */
+span.wrap_info, span.wrap_important, span.wrap_alert, span.wrap_tip, span.wrap_help, span.wrap_todo, span.wrap_download {
+ padding: 0 2px 0 20px;
+ min-height: 20px;
+ background-position: 2px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html span.wrap_info, * html span.wrap_important, * html span.wrap_alert, * html span.wrap_tip, * html span.wrap_help, * html span.wrap_todo, * html span.wrap_download {
+ height: 20px;
+}
+
+/*____________ info ____________*/
+.wrap_info { background-color: #d1d7df; }
+div.wrap_info { background-image: url(../../../wrap/images/note/48/info.png); }
+span.wrap_info { background-image: url(../../../wrap/images/note/16/info.png); }
+
+/*____________ important ____________*/
+.wrap_important { background-color: #ffd39f; }
+div.wrap_important { background-image: url(../../../wrap/images/note/48/important.png); }
+span.wrap_important { background-image: url(../../../wrap/images/note/16/important.png); }
+
+/*____________ alert ____________*/
+.wrap_alert { background-color: #ffbcaf; }
+div.wrap_alert { background-image: url(../../../wrap/images/note/48/alert.png); }
+span.wrap_alert { background-image: url(../../../wrap/images/note/16/alert.png); }
+
+/*____________ tip ____________*/
+.wrap_tip { background-color: #fff79f; }
+div.wrap_tip { background-image: url(../../../wrap/images/note/48/tip.png); }
+span.wrap_tip { background-image: url(../../../wrap/images/note/16/tip.png); }
+
+/*____________ help ____________*/
+.wrap_help { background-color: #dcc2ef; }
+div.wrap_help { background-image: url(../../../wrap/images/note/48/help.png); }
+span.wrap_help { background-image: url(../../../wrap/images/note/16/help.png); }
+
+/*____________ todo ____________*/
+.wrap_todo { background-color: #c2efdd; }
+div.wrap_todo { background-image: url(../../../wrap/images/note/48/todo.png); }
+span.wrap_todo { background-image: url(../../../wrap/images/note/16/todo.png); }
+
+/*____________ download ____________*/
+.wrap_download { background-color: #d6efc2; }
+div.wrap_download { background-image: url(../../../wrap/images/note/48/download.png); }
+span.wrap_download { background-image: url(../../../wrap/images/note/16/download.png); }
+
+
+/*____________ safety notes ____________*/
+
+.wrap_danger {
+ background-color: #c00;
+ color: #fff;
+}
+.wrap_warning {
+ background-color: #f60;
+ color: #000;
+}
+.wrap_caution {
+ background-color: #ff0;
+ color: #000;
+}
+.wrap_notice {
+ background-color: #06f;
+ color: #fff;
+}
+.wrap_safety {
+ background-color: #090;
+ color: #fff;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_hi {
+ background-color: #ff9;
+}
+
+/* typography
+********************************************************************/
+
+/*____________ font colours ____________*/
+
+div.wrap_fgwhite {
+ color: #fff;
+}
+
+/*____________ background colours ____________*/
+
+div.wrap_bgred {
+ background-color: #fcc;
+}
+div.wrap_bggreen {
+ background-color: #cfc;
+}
+div.wrap_bgblue {
+ background-color: #ccf;
+}
+div.wrap_bgcyan {
+ background-color: #9ff;
+}
+div.wrap_bgviolet {
+ background-color: #f9f;
+}
+div.wrap_bgyellow {
+ background-color: #ff9;
+}
+div.wrap_bggrey {
+ background-color: #ccc;
+}
+div.wrap_bgwhite {
+ background-color: #fff;
+}
+div.wrap_bgblack {
+ background-color: #000;
+}
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ spoiler ____________*/
+
+div.wrap_spoiler {
+ background-color: __background__ !important;
+ color: __background__ !important;
+ border: 1px dotted red;
+}
+
+/*____________ only print ____________*/
+
+div.wrap_onlyprint {
+ display: none;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/zero_link.png
new file mode 100644
index 000000000..5610884d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/zero_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/zero_over.png
new file mode 100644
index 000000000..3a14a577e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/zero_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/s5-notes.html b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/s5-notes.html
new file mode 100644
index 000000000..902901b1d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/s5-notes.html
@@ -0,0 +1,157 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<!-- Do not edit this document! The system will likely break if you do. -->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>Notes</title>
+<style type="text/css" media="all">
+body {
+ margin: 0;
+ padding: 1.0em;
+ background: #333;
+ color: #FFF;
+ font: 2em/1.4em 'Lucida Grande', Verdana, sans-serif;
+}
+div.timers {
+ background: #FFF;
+ color: #333;
+ border: 0.08em solid #222;
+ border-top-width: 1px;
+ border-left-width: 1px;
+ float: left;
+ padding: 0.2em;
+ margin: 0 0 0.5em;
+ position: relative;
+}
+div.timers h1 {
+ text-align: left;
+ font-size: 0.6em;
+ line-height: 1.4em;
+ background-color: #FF9;
+ padding: 0 0.75em;
+ margin: 0.25em 0 0;
+ border: 1px solid #EE8;
+}
+div.timers div.controls {
+ position: absolute;
+ right: 0.25em;
+ top: 0.1em;
+ line-height: 1em;
+}
+div.timers h1 a {
+ text-decoration: none;
+ color: #000;
+}
+div.timers div.controls a {
+ font-size: 0.5em;
+ padding: 0;
+ color: #330;
+}
+div.timers a.control {
+ position: absolute;
+ text-decoration: none;
+ padding: 0 0.25em;
+ color: #AAA;
+ outline: 0;
+}
+a.headctrl {
+ outline: none;
+ text-decoration: none;
+ font-weight: bold;
+}
+#minus {left: 0.25em;}
+#plus {right: 0.25em;}
+.overtime {
+ background: yellow;
+ color: red;
+ border: 3px solid;
+ padding: 0.1em 0.25em;
+ font-weight: bold;
+}
+div.timers h2 {
+ font-size: 0.6em;
+ line-height: 1.0em;
+ font-weight: normal;
+ margin: 0 0 -0.25em;
+ padding-top: 0.5em;
+ color: #666;
+}
+div.timers p {margin: 0; padding: 0 0.5em;}
+div.timers form {margin: 0;}
+div.timers span.clock {font-family: monospace;}
+div.timers ul {margin: 0; padding: 0; list-style: none;}
+div.timers li {float: left; width: 5em; margin: 0; padding: 0 0.5em; text-align: center;}
+div#elapsed {width: 12.1em;}
+div#remaining {clear: left; width: 12.1em;}
+div#remaining p {text-align: center;}
+#slide, #next, #notes, #nextnotes {
+ font-size: 0.75em;
+ line-height: 1.4em;
+ clear: left;
+/* max-width: 30.0em; */
+ text-shadow: 0.1em 0.1em 0.1em #111;
+}
+#next {margin-top: 2.5em;}
+#next, #nextnotes {color: #999; font-size: 0.66em;}
+em.disclaimer {color: #666;}
+div.collapsed h1 {display: block; font-size: 0.33em;}
+div.collapsed h1 a {display: inline;}
+div.collapsed * {display: none;}
+</style>
+<script type="text/javascript">
+// <![CDATA[
+ document.onkeyup = opener.keys;
+ document.onkeypress = opener.trap;
+ document.onclick = opener.clicker;
+// ]]>
+</script>
+</head>
+
+<body onload="opener.s5NotesWindowLoaded=true;" onunload="opener.s5NotesWindowLoaded=false;">
+
+
+<div class="timers" id="elapsed">
+<h1>
+<a href="#" onclick="opener.minimizeTimer('elapsed'); return false;">Elapsed Time</a>
+</h1>
+<ul>
+<li>
+<h2>Presentation</h2>
+<span class="clock" id="elapsed-presentation">00:00:00</span>
+</li>
+<li>
+<h2>Current Slide</h2>
+<span class="clock" id="elapsed-slide">00:00:00</span>
+</li>
+</ul>
+<div class="controls">
+<a href="#reset-elapsed" class="headctrl" onclick="opener.resetElapsedTime(); return false;" title="Reset Elapsed Time">|&lt;</a>
+</div>
+</div>
+
+<div class="timers" id="remaining">
+<h1>
+<a href="#" onclick="opener.minimizeTimer('remaining'); return false;">Remaining Time</a>
+</h1>
+<p>
+<a href="#subtract-remaining" class="control" id="minus" onclick="opener.alterRemainingTime('-5'); return false;" title="Subtract 5 Minutes">-</a>
+<span class="clock" id="timeLeft">00:00:00</span>
+<a href="#add-remaining" class="control" id="plus" onclick="opener.alterRemainingTime('5'); return false;" title="Add 5 Minutes">+</a>
+</p>
+<div class="controls">
+<form action="#" onsubmit="opener.resetRemainingTime(); return false;">
+<input type="text" class="text" id="startFrom" value="0" size="4" maxlength="4" />
+<a href="#toggle-remaining" class="headctrl" onclick="opener.toggleRemainingTime(); return false;" title="Pause/Run Remaining Time">||</a>
+<a href="#reset-remaining" class="headctrl" onclick="opener.resetRemainingTime(); return false;" title="Reset Remaining Time">|&lt;</a>
+</form>
+</div>
+</div>
+
+<h2 id="slide">...</h2>
+<div id="notes"></div>
+
+<h2 id="next">...</h2>
+<div id="nextnotes"></div>
+
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/audio_link.png
new file mode 100644
index 000000000..daa740c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/audio_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/audio_on.png
new file mode 100644
index 000000000..cd590aae9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/audio_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/audio_over.png
new file mode 100644
index 000000000..cf537a008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/audio_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/auto_link.png
new file mode 100644
index 000000000..1c2ca4817
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/auto_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/auto_on.png
new file mode 100644
index 000000000..4b0c923b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/auto_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/auto_over.png
new file mode 100644
index 000000000..dbea88975
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/auto_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/backgrnd.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/backgrnd.jpg
new file mode 100644
index 000000000..0602a0249
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/backgrnd.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/backgrnd.png
new file mode 100644
index 000000000..0e48413d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/backgrnd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/blank.gif
new file mode 100755
index 000000000..75b945d25
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/blank.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/chalks.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/chalks.png
new file mode 100644
index 000000000..5ba8d53db
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/chalks.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/delay_link.png
new file mode 100644
index 000000000..c4d99cd57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/delay_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/exit_link.png
new file mode 100644
index 000000000..1bfd38790
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/exit_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/exit_over.png
new file mode 100644
index 000000000..0fdd1c605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/exit_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/fade_link.png
new file mode 100644
index 000000000..482e4d53e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/fade_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/fade_on.png
new file mode 100644
index 000000000..e12561fb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/fade_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/fade_over.png
new file mode 100644
index 000000000..fb8943c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/fade_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/footer.jpg
new file mode 100644
index 000000000..49370dbba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/footer.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/footer.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/footer.png
new file mode 100644
index 000000000..804e16147
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/footer.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/framing.css
new file mode 100644
index 000000000..e54061c3e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/framing.css
@@ -0,0 +1,22 @@
+/* The following styles size, place, and layer the slide components.
+ Edit these if you want to change the overall slide layout.
+ The commented lines can be uncommented (and modified, if necessary)
+ to help you with the rearrangement process. */
+
+/* target = 1024x768 */
+
+div#header, div#footer, .slide {width: 100%; top: 0; left: 0;}
+div#header {top: 0; height: 3em; z-index: 1;}
+div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;}
+.slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;}
+div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;}
+div#controls form {text-align: right; width: 100%; margin: 0;}
+#currentSlide {position: absolute; width: 12%; left: 44%; bottom: 1em; z-index: 10;}
+html>body #currentSlide {position: fixed;}
+
+/*
+div#header {background: #FCC;}
+div#footer {background: #CCF;}
+div#controls {background: #BBD;}
+div#currentSlide {background: #FFC;}
+*/
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/header.png
new file mode 100644
index 000000000..8453dc395
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/iepngfix.htc
new file mode 100755
index 000000000..bba2db756
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/iepngfix.htc
@@ -0,0 +1,42 @@
+<public:component>
+<public:attach event="onpropertychange" onevent="doFix()" />
+
+<script>
+
+// IE5.5+ PNG Alpha Fix v1.0 by Angus Turnbull http://www.twinhelix.com
+// Free usage permitted as long as this notice remains intact.
+
+// This must be a path to a blank image. That's all the configuration you need here.
+var blankImg = 'ui/default/blank.gif';
+
+var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
+
+function filt(s, m) {
+ if (filters[f]) {
+ filters[f].enabled = s ? true : false;
+ if (s) with (filters[f]) { src = s; sizingMethod = m }
+ } else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")';
+}
+
+function doFix() {
+ if ((parseFloat(navigator.userAgent.match(/MSIE (\S+)/)[1]) < 5.5) ||
+ (event && !/(background|src)/.test(event.propertyName))) return;
+
+ if (tagName == 'IMG') {
+ if ((/\.png$/i).test(src)) {
+ filt(src, 'image'); // was 'scale'
+ src = blankImg;
+ } else if (src.indexOf(blankImg) < 0) filt();
+ } else if (style.backgroundImage) {
+ if (style.backgroundImage.match(/^url[("']+(.*\.png)[)"']+$/i)) {
+ var s = RegExp.$1;
+ style.backgroundImage = '';
+ filt(s, 'crop');
+ } else filt();
+ }
+}
+
+doFix();
+
+</script>
+</public:component> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/index.html
new file mode 100755
index 000000000..39d8f46ad
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/index.html
@@ -0,0 +1,100 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es-es" >
+
+
+<head>
+
+ <title>[Título de la presentación aquí]</title>
+ <!-- metadata -->
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta http-equiv="content-language" content="es" />
+
+ <!--titulo y datos de publicación de la presentación-->
+
+ <meta name="description" content="[Título de la presentación aquí]" />
+
+ <meta name="keywords" content="[keywords aquí]" />
+ <meta name="presdate" content="[Aquí la fecha de publicación en formato aaaammdd]" />
+
+ <meta name="author" lang="es" content="[Nombre del autor de la presentación aquí]" />
+ <meta name="company" content="[Organización del autor de la presentación aquí]" />
+
+ <link rel="shortcut icon" href="ui/default/pics/favicon.ico" />
+
+ <meta name="generator" content="S5" />
+ <meta name="progid" content="quanta+" />
+ <meta name="version" content="S5 · jEsuSdA · 1.1" />
+ <!--Versión adaptada del estandard S5 1.1 por jEsuSdA-->
+
+ <meta name="robots" content="all" />
+
+ <!-- configuration parameters -->
+ <meta name="defaultView" content="slideshow" />
+ <meta name="controlVis" content="hidden" />
+
+ <!-- style sheet links -->
+ <link rel="stylesheet" href="ui/default/slides.css" type="text/css" media="projection" id="slideProj" />
+ <link rel="stylesheet" href="ui/default/outline.css" type="text/css" media="screen" id="outlineStyle" />
+ <link rel="stylesheet" href="ui/default/print.css" type="text/css" media="print" id="slidePrint" />
+ <link rel="stylesheet" href="ui/default/opera.css" type="text/css" media="projection" id="operaFix" />
+
+ <!-- S5 JS -->
+ <script src="ui/default/slides.js" type="text/javascript"></script>
+
+</head>
+
+<body>
+
+ <div class="layout">
+ <div id="controls"><!-- NO EDITAR --></div>
+ <div id="currentSlide"><!-- NO EDITAR --></div>
+
+ <div id="header">
+ <div id="logo"><!-- NO EDITAR --></div>
+ </div>
+
+ </div>
+
+ <div id="footer">
+ <h1>[Lugar/Fecha de la presentación aquí]</h1>
+ <h2>[Título de la presentación aquí]</h2>
+ </div>
+
+
+
+
+<div class="presentation">
+
+ <div class="slide">
+ <h1>[Título de la presentación aquí]</h1>
+ <h3>[Nombre del ponente aquí]</h3>
+ <h4>[Datos extra aquí]</h4>
+ </div>
+
+
+ <div class="slide">
+ <h1>[Título de la diapositiva]</h1>
+
+ <ul>
+ <li>[Punto uno]</li>
+ <li>[Punto dos]</li>
+ <li>[Punto tres]</li>
+ <li>[Punto cuatro]</li>
+ <li>[Punto cinco]</li>
+ </ul>
+
+ <div class="handout">
+
+ [Añade aquí cualquier nota o información que desees mostrar en la versión impresa, pero no en la versión en pantalla]
+
+ </div>
+
+ </div>
+ <!--fin slide-->
+
+</div>
+
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/last_link.png
new file mode 100644
index 000000000..4f158d35d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/last_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/last_over.png
new file mode 100644
index 000000000..a7b629995
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/last_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/list_link.png
new file mode 100644
index 000000000..7e299bb50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/list_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/loop_link.png
new file mode 100644
index 000000000..41e12cb15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/loop_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/loop_on.png
new file mode 100644
index 000000000..2ffcacae1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/loop_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/loop_over.png
new file mode 100644
index 000000000..9fe420153
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/loop_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/next_link.png
new file mode 100644
index 000000000..2b9f44c4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/next_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/next_over.png
new file mode 100644
index 000000000..25788124d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/next_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/notes_link.png
new file mode 100644
index 000000000..bb4a8ae37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/notes_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/notes_over.png
new file mode 100644
index 000000000..c6bfe69fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/notes_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/opera.css
new file mode 100644
index 000000000..9e9d2a3c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/opera.css
@@ -0,0 +1,7 @@
+/* DO NOT CHANGE THESE unless you really want to break Opera Show */
+.slide {
+ visibility: visible !important;
+ position: static !important;
+ page-break-before: always;
+}
+#slide0 {page-break-before: avoid;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/outline.css
new file mode 100644
index 000000000..c04f5006a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/outline.css
@@ -0,0 +1,14 @@
+/* don't change this unless you want the layout stuff to show up in the outline view! */
+
+.hide, .layout div, #footer *, #controlForm * {display: none;}
+#footer, #controls, #controlForm, #navLinks, #sheet {display: block; visibility: visible; margin: 0; padding: 0;}
+#sheet {float: right; padding: 0.5em;}
+html>body #sheet {position: fixed; top: 0; right: 0;}
+
+
+/* making the outline look pretty-ish */
+
+#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
+#slide0 h1 {padding-top: 1.5em;}
+.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em; border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
+#sheet {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pause_link.png
new file mode 100644
index 000000000..2561cb4a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pause_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pause_on.png
new file mode 100644
index 000000000..2fc9c4a4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pause_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pause_over.png
new file mode 100644
index 000000000..7a7c80ddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pause_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pretty.css
new file mode 100644
index 000000000..41a5f5b3d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pretty.css
@@ -0,0 +1,162 @@
+/* Following are the presentation styles -- edit away! */
+
+body {background: #FFF url(backgrnd.jpg) repeat fixed; color: #cfc; font-family: 'Comic Sans MS', 'Comic Sans', Arial, Helvetica, sans-serif; font-size: 2.25em;}
+a:link, a:visited {text-decoration: none; color: #F93;}
+a:focus, a:hover {color: #f33 !important;}
+
+h1, h2, h3, h4 {font-size: 100%; margin: 0; padding: 0; font-weight: inherit;}
+h1 {text-shadow: 0.1em 0.1em 0.1em #363; background-color: transparent;}
+
+ul, pre {margin: 0; line-height: 1em;}
+html, body {margin: 0; padding: 0;}
+
+blockquote, q {font-style: italic;}
+blockquote {padding: 0 2em 0.5em; margin: 0 1.5em 0.5em; text-align: center; font-size: 1em;}
+blockquote p {margin: 0;}
+blockquote i {font-style: normal;}
+blockquote b {display: block; margin-top: 0.5em; font-weight: normal; font-size: smaller; font-style: normal;}
+blockquote b i {font-style: italic;}
+
+img {border: 0; }
+kbd {font-weight: bold; font-size: 1em;}
+sup {font-size: smaller; line-height: 1px;}
+
+.slide code {padding: 2px 0.25em; font-weight: bold; color: #533;}
+.slide code.bad, code del {color: red;}
+.slide code.old {color: silver;}
+.slide pre {padding: 0; margin: 0.25em 0 0.5em 0.5em; color: #533; font-size: 90%;}
+.slide pre code {display: block;}
+.slide ul {margin-left: 5%; margin-right: 7%; list-style: disc;}
+.slide li {margin-top: 0.75em; margin-right: 0;}
+.slide ul ul {line-height: 1;}
+.slide ul ul li {margin: .2em; font-size: 85%; list-style: square;}
+.slide img.leader {display: block; margin: 0 auto;}
+
+div#header, div#footer {background: transparent; color: #AAA; font-family: Verdana, Arial, Helvetica, sans-serif;}
+div#header {background: transparent url(header.png) bottom; line-height: 1px;}
+div#footer {background: transparent url(footer.png) top; color: #fff; font-size: 0.5em; font-weight: bold; padding: 1em 0;}
+#footer h1, #footer h2 {display: block; padding: 0; position:absolute; bottom:0.5em;}
+#footer h1 {left:1em; text-shadow: 0.2em 0.2em #000;}
+#footer h2 {right:1em; text-shadow: 0.2em 0.2em #000; font-style: italic;}
+
+div#logo
+{
+ position:absolute;
+ top:0%;
+ left:0%;
+ background:transparent url(triangle.png) 50% 50% no-repeat;
+ height:456px;
+ width:240px;
+}
+div#logo_bottom
+{
+ position:absolute;
+ bottom:50%;
+ right:0%;
+ background:url(chalks.png) 25% 25% no-repeat;
+ height:20px;
+ width:160px;
+}
+
+div.long {font-size: 0.75em;}
+.slide h1 {position: absolute; top: 0.9em; left: 1.25em; z-index: 1; margin: 0; padding: 0.35em 0 0 50px; white-space: nowrap; font: bold 150%/1em 'Comic Sans MS', 'Comic Sans', Verdana, Arial, Helvetica, sans-serif; text-transform: capitalize; color: #DDD; background-color: transparent;}
+.slide h3 {font-size: 130%;}
+h1 abbr {font-variant: small-caps;}
+
+div#controls {position: absolute; left: 0; bottom: 0; width: 100%; text-align: center; font: bold 1em Verdana, Arial, Helvetica, sans-serif;}
+html>body div#controls {background: transparent; position: fixed; padding: 0; top: auto; text-align: center;}
+#controls #sheet {display: none;}
+#controls #controlForm {height: 32px; width: 100%; text-align: center; vertical-align: middle;}
+#controls #navLinks {border-top: 1px solid #999; overflow: hidden; padding: 0; margin: 0; height: 32px; width: 100%; background-color: #808080; text-align: center; vertical-align: middle; white-space: nowrap;}
+#controls #navLinks ul {margin: 0 auto; padding: 0; height: 32px; width: 500px; white-space: nowrap; text-align: center;}
+#controls #navLinks ul li {list-style: none; display: inline; margin: 0; padding: 0; float: left; height: 32px; width: 32px; text-align: center; background-color: transparent;}
+#controls #navLinks ul li.vr {list-style: none; display: inline; margin: 0px 2px; padding: 0; float: left; height: 32px; width: 1px; text-align: center; background-color: #606060;}
+#controls #navLinks ul li a {margin: 0; padding: 0; float: left; height: 32px; width: 32px; background-color: transparent;}
+
+#controls #navLinks ul li#exit {background: url(exit_link.png) no-repeat top left;}
+#controls #navLinks ul li#exit a:hover {background: url(exit_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#toggle {background: url(toggle_link.png) no-repeat top left;}
+#controls #navLinks ul li#toggle a:hover {background: url(toggle_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#show-notes {background: url(notes_link.png) no-repeat top left;}
+#controls #navLinks ul li#show-notes a:hover {background: url(notes_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#zero {background: url(zero_link.png) no-repeat top left;}
+#controls #navLinks ul li#zero a:hover {background: url(zero_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#prev {background: url(prev_link.png) no-repeat top left;}
+#controls #navLinks ul li#prev a:hover {background: url(prev_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#next {background: url(next_link.png) no-repeat top left;}
+#controls #navLinks ul li#next a:hover {background: url(next_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#last {background: url(last_link.png) no-repeat top left;}
+#controls #navLinks ul li#last a:hover {background: url(last_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#lst {background: url(list_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#fade a.isoff {background: url(fade_link.png) no-repeat top left;}
+#controls #navLinks ul li#fade a.ison {background: url(fade_on.png) no-repeat top right;}
+#controls #navLinks ul li#fade a:hover {background: url(fade_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#audio {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.isoff {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.ison {background: url(audio_on.png) no-repeat top right;}
+#controls #navLinks ul li#audio a:hover {background: url(audio_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#vol {background: url(volume_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#auto a.isoff {background: url(auto_link.png) no-repeat top left;}
+#controls #navLinks ul li#auto a.ison {background: url(auto_on.png) no-repeat top right;}
+#controls #navLinks ul li#auto a:hover {background: url(auto_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#pause a.isoff {background: url(pause_link.png) no-repeat top left;}
+#controls #navLinks ul li#pause a.ison {background: url(pause_on.png) no-repeat top right;}
+#controls #navLinks ul li#pause a:hover {background: url(pause_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#loop a.isoff {background: url(loop_link.png) no-repeat top left;}
+#controls #navLinks ul li#loop a.ison {background: url(loop_on.png) no-repeat top right;}
+#controls #navLinks ul li#loop a:hover {background: url(loop_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#del {background: url(delay_link.png) no-repeat top left;}
+
+#jumplist, #volumelist, #delaylist {padding: 0; margin: 0; width: 32px; height: 32px; cursor: n-resize;}
+
+#currentSlide {white-space: nowrap; text-align: center; margin-bottom: -0.5em; font-size: 0.5em; background-color: transparent; color: #ccc;}
+
+#guru {position: absolute; visibility: visible; left: 0px; top: 0px; padding: 4px; width: 99%; height: auto; text-align: center; background-color: black; z-index: 10;}
+#guru div {border: solid 3px red; padding: 4px; font-family: monospace; font-size: 60%; width: auto; height: auto; color: red; text-align: center;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 0; padding: 0; font: bold 3em Verdana, Arial, Helvetica, sans-serif; font-variant: small-caps; text-shadow: 0.1em 0.1em 0.1em #363; white-space: normal; color: #000; background-color: transparent;}
+#slide0 h2 {font: bold italic 1em Arial, Helvetica, sans-serif; margin: 0.25em;}
+#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.note {display: none;}
+.external {border-bottom: 1px dotted gray;}
+html>body .external {border-bottom: none;}
+.external:after {content: " \274F"; font-size: smaller; color: #F93;}
+
+.incremental, .incremental *, .incremental *:after {color: #2A5A36; visibility: visible;}
+img.incremental, canvas.incremental {visibility: hidden;}
+.slide .current {color: #0F6;}
+
+/* diagnostics
+li:after {content: " [" attr(class) "]"; color: #F88;}
+*/
+
+table.piechart, table.barchart, table.linechart { border-spacing: 0.3em 0.15em; }
+table.piechart tr th, table.barchart tr th, table.linechart tr th { white-space: nowrap; }
+table.piechart tr td, table.barchart tr td, table.linechart tr td { vertical-align: top; white-space: nowrap; }
+table.piechart tr td.col, table.barchart tr td.col, table.linechart tr td.col { border-bottom: 1px solid #555; border-right: 1px solid #555; }
+table.fs90 tr td, table.fs90 tr th, div.fs90, pre.fs90, p.fs90 ,ul.fs90 {font-size: 0.9em; }
+table.fs75 tr td, table.fs75 tr th, div.fs75, pre.fs75, p.fs75 ,ul.fs75 {font-size: 0.75em; }
+table.fs66 tr td, table.fs66 tr th, div.fs66, pre.fs66, p.fs66 ,ul.fs66 {font-size: 0.66em; }
+table.fs50 tr td, table.fs50 tr th, div.fs50, pre.fs50, p.fs50 ,ul.fs50 {font-size: 0.5em; }
+
+#soundmanager-debug {position:fixed; top:0px; right:0px; width:30em; height:20em; overflow:auto; border:1px solid red; padding:1em; margin:2em; font-family:"sans serif"; font-size: 12px;color: black; background-color:#f6f6f6; z-index: 100;}
+#soundmanager-debug code {font-size: 11px;} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/prev_link.png
new file mode 100644
index 000000000..c31d21350
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/prev_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/prev_over.png
new file mode 100644
index 000000000..6fef4fa52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/prev_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/print.css
new file mode 100644
index 000000000..5affe5da6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/print.css
@@ -0,0 +1,3 @@
+/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul, p {page-break-inside: avoid; visibility: visible !important;} h1 {page-break-after: avoid;}
+img {page-break-inside: avoid; page-break-after: avoid;}
+/*.slide {page-break-after: always;}*/ body {font-size: 12pt; background: white;} * {color: black;} #slide0 h1 {font-size: 200%; border: none; margin: 0.5em 0 0.25em;} #slide0 h3 {margin: 0; padding: 0;} #slide0 h4 {margin: 0 0 0.5em; padding: 0;} #slide0 {margin-bottom: 3em;} h1 {border-top: 2pt solid gray; border-bottom: 1px dotted silver;} .extra {background: transparent !important;} div.extra, pre.extra, .example {font-size: 10pt; color: #333;} ul.extra a {font-weight: bold;} p.example {display: none;} #header {display: none;} #footer h1 {margin: 0; border-bottom: 1px solid; color: gray; font-style: italic;} #footer h2, #controls {display: none;} /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .hide, .layout, .layout * {display: none !important;} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/s5-core.css
new file mode 100644
index 000000000..8ed9c1e20
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/s5-core.css
@@ -0,0 +1,8 @@
+/* Do not edit or override these styles! The system will likely break if you do. */
+
+div#header, div#footer, div#controls, .slide {position: absolute;}
+html>body div#header, html>body div#footer, html>body div#controls, html>body .slide {position: fixed;}
+.handout, .notes, .hide {display: none;}
+.layout {display: block;}
+.slide, .hideme, .incremental {visibility: hidden;}
+#slide0 {visibility: visible;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/slides.css
new file mode 100644
index 000000000..0786d7dbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/slides.css
@@ -0,0 +1,3 @@
+@import url(s5-core.css); /* required to make the slide show run at all */
+@import url(framing.css); /* sets basic placement and size of slide components */
+@import url(pretty.css); /* stuff that makes the slides look better than blah */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/slides.js
new file mode 100644
index 000000000..510a04c0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/slides.js
@@ -0,0 +1,2812 @@
+// S5 1.3beta7 (18-Apr-2007) advanced version by C. Effenberger
+// Please see http://s5.netzgesta.de/ for more information
+// based on S5 v1.2a1 slides.js -- released into the Public Domain
+// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
+// about all the wonderful and talented contributors to this code!
+// audio extension: soundmanager2 is NOT Public Domain
+// Please see http://www.schillmania.com/projects/soundmanager2/ for information
+
+var undef;
+var slideCSS = '';
+var snum = 0;
+var smax = 1;
+var incpos = 0;
+var number = undef;
+var firstTime = 1;
+var s5mode = true;
+var helpmode = false;
+var defaultView = 'slideshow'; //outline
+var controlVis = 'visible';
+var s5Path = 'lib/plugins/s5reloaded/';
+
+// scalable images extension
+var empx = 0;
+var images = new Array();
+var canvas = new Array();
+var medias = new Array();
+var piecharts = new Array();
+var barcharts = new Array();
+var linecharts = new Array();
+// scalable images extension
+
+// transition extension
+var tranSitions = false;
+var fadeModus = false;
+var fadeDuration = 500;
+var incrDuration = 250;
+var opac = 1;
+var cid = '';
+var nid = '';
+var tid = '';
+var jl = '';
+// transition extension
+
+// autoplay extension
+var autoMatic = false;
+var playLoop = false;
+var playPause = false;
+var autoRun = false;
+var playDelay = 5000;
+var remainDer = 0;
+var incrDelay = 0;
+// autoplay extension
+
+// audio extension
+var sound = new Array();
+var audioSupport = false;
+var audioVolume = 100;
+var audioError = false;
+var swfUnloaded = true;
+var bgSoundItem = 9999;
+var curSoundID = -1;
+// audio extension
+
+// panel extension
+var imgWidth = 32;
+var imgHeight = 32;
+// panel extension
+
+// canvas chart extension
+var canvasSupport = false;
+var ChartData = new Array();
+var colorSlice = new Array();
+var font = document.createElement("img");
+font.setAttribute("src", s5Path+"ui/graphic_support/numeric.png");
+signs = {
+ '0': {sx: 0, sy: 0, sw: 48, sh: 64},
+ '1': {sx: 48, sy: 0, sw: 48, sh: 64},
+ '2': {sx: 96, sy: 0, sw: 48, sh: 64},
+ '3': {sx: 144, sy: 0, sw: 48, sh: 64},
+ '4': {sx: 192, sy: 0, sw: 48, sh: 64},
+ '5': {sx: 240, sy: 0, sw: 48, sh: 64},
+ '6': {sx: 288, sy: 0, sw: 48, sh: 64},
+ '7': {sx: 336, sy: 0, sw: 48, sh: 64},
+ '8': {sx: 384, sy: 0, sw: 48, sh: 64},
+ '9': {sx: 432, sy: 0, sw: 48, sh: 64},
+ '%': {sx: 480, sy: 0, sw: 48, sh: 64},
+ '.': {sx: 528, sy: 0, sw: 24, sh: 64}
+};
+var colorNames= new Array();
+colorNames["black"]="#000000"; colorNames["maroon"]="#800000";
+colorNames["green"]="#008000"; colorNames["olive"]="#808000";
+colorNames["navy"]="#000080"; colorNames["purple"]="#800080";
+colorNames["teal"]="#008080"; colorNames["gray"]="#808080";
+colorNames["silver"]="#C0C0C0"; colorNames["red"]="#FF0000";
+colorNames["lime"]="#00FF00"; colorNames["yellow"]="#FFFF00";
+colorNames["blue"]="#0000FF"; colorNames["fuchsia"]="#FF00FF";
+colorNames["aqua"]="#00FFFF"; colorNames["white"]="#FFFFFF";
+colorNames["aliceblue"]="#F0F8FF"; colorNames["antiquewhite"]="#FAEBD7";
+colorNames["aquamarine"]="#7FFFD4"; colorNames["azure"]="#F0FFFF";
+colorNames["beige"]="#F5F5DC"; colorNames["blueviolet"]="#8A2BE2";
+colorNames["brown"]="#A52A2A"; colorNames["burlywood"]="#DEB887";
+colorNames["cadetblue"]="#5F9EA0"; colorNames["chartreuse"]="#7FFF00";
+colorNames["chocolate"]="#D2691E"; colorNames["coral"]="#FF7F50";
+colorNames["cornflowerblue"]="#6495ED"; colorNames["cornsilk"]="#FFF8DC";
+colorNames["crimson"]="#DC143C"; colorNames["darkblue"]="#00008B";
+colorNames["darkcyan"]="#008B8B"; colorNames["darkgoldenrod"]="#B8860B";
+colorNames["darkgray"]="#A9A9A9"; colorNames["darkgreen"]="#006400";
+colorNames["darkkhaki"]="#BDB76B"; colorNames["darkmagenta"]="#8B008B";
+colorNames["darkolivegreen"]="#556B2F"; colorNames["darkorange"]="#FF8C00";
+colorNames["darkorchid"]="#9932CC"; colorNames["darkred"]="#8B0000";
+colorNames["darksalmon"]="#E9967A"; colorNames["darkseagreen"]="#8FBC8F";
+colorNames["darkslateblue"]="#483D8B"; colorNames["darkslategray"]="#2F4F4F";
+colorNames["darkturquoise"]="#00CED1"; colorNames["darkviolet"]="#9400D3";
+colorNames["deeppink"]="#FF1493"; colorNames["deepskyblue"]="#00BFFF";
+colorNames["dimgray"]="#696969"; colorNames["dodgerblue"]="#1E90FF";
+colorNames["firebrick"]="#B22222"; colorNames["floralwhite"]="#FFFAF0";
+colorNames["forestgreen"]="#228B22"; colorNames["gainsboro"]="#DCDCDC";
+colorNames["ghostwhite"]="#F8F8FF"; colorNames["gold"]="#FFD700";
+colorNames["goldenrod"]="#DAA520"; colorNames["greenyellow"]="#ADFF2F";
+colorNames["honeydew"]="#F0FFF0"; colorNames["hotpink"]="#FF69B4";
+colorNames["indianred"]="#CD5C5C"; colorNames["indigo"]="#4B0082";
+colorNames["ivory"]="#FFFFF0"; colorNames["khaki"]="#F0E68C";
+colorNames["lavender"]="#E6E6FA"; colorNames["lavenderblush"]="#FFF0F5";
+colorNames["lawngreen"]="#7CFC00"; colorNames["lemonchiffon"]="#FFFACD";
+colorNames["lightblue"]="#ADD8E6"; colorNames["lightcoral"]="#F08080";
+colorNames["lightcyan"]="#E0FFFF"; colorNames["lightgoldenrodyellow"]="#FAFAD2";
+colorNames["lightgreen"]="#90EE90"; colorNames["lightgrey"]="#D3D3D3";
+colorNames["lightpink"]="#FFB6C1"; colorNames["lightsalmon"]="#FFA07A";
+colorNames["lightseagreen"]="#20B2AA"; colorNames["lightskyblue"]="#87CEFA";
+colorNames["lightslategray"]="#778899"; colorNames["lightsteelblue"]="#B0C4DE";
+colorNames["lightyellow"]="#FFFFE0"; colorNames["limegreen"]="#32CD32";
+colorNames["linen"]="#FAF0E6"; colorNames["mediumaquamarine"]="#66CDAA";
+colorNames["mediumblue"]="#0000CD"; colorNames["mediumorchid"]="#BA55D3";
+colorNames["ediumpurple"]="#9370D"; colorNames["mediumseagreen"]="#3CB371";
+colorNames["mediumslateblue"]="#7B68EE"; colorNames["mediumspringgreen"]="#00FA9A";
+colorNames["mediumturquoise"]="#48D1CC"; colorNames["mediumvioletred"]="#C71585";
+colorNames["midnightblue"]="#191970"; colorNames["mintcream"]="#F5FFFA";
+colorNames["mistyrose"]="#FFE4E1"; colorNames["moccasin"]="#FFE4B5";
+colorNames["navajowhite"]="#FFDEAD"; colorNames["oldlace"]="#FDF5E6";
+colorNames["olivedrab"]="#6B8E23"; colorNames["orange"]="#FFA500";
+colorNames["orangered"]="#FF4500"; colorNames["orchid"]="#DA70D6";
+colorNames["palegoldenrod"]="#EEE8AA"; colorNames["palegreen"]="#98FB98";
+colorNames["paleturquoise"]="#AFEEEE"; colorNames["palevioletred"]="#DB7093";
+colorNames["papayawhip"]="#FFEFD5"; colorNames["peachpuff"]="#FFDAB9";
+colorNames["peru"]="#CD853F"; colorNames["pink"]="#FFC0CB";
+colorNames["plum"]="#DDA0DD"; colorNames["powderblue"]="#B0E0E6";
+colorNames["rosybrown"]="#BC8F8F"; colorNames["royalblue"]="#4169E1";
+colorNames["saddlebrown"]="#8B4513"; colorNames["salmon"]="#FA8072";
+colorNames["sandybrown"]="#F4A460"; colorNames["seagreen"]="#2E8B57";
+colorNames["seashell"]="#FFF5EE"; colorNames["sienna"]="#A0522D";
+colorNames["skyblue"]="#87CEEB"; colorNames["slateblue"]="#6A5ACD";
+colorNames["slategray"]="#708090"; colorNames["snow"]="#FFFAFA";
+colorNames["springgreen"]="#00FF7F"; colorNames["steelblue"]="#4682B4";
+colorNames["tan"]="#D2B48C"; colorNames["thistle"]="#D8BFD8";
+colorNames["tomato"]="#FF6347"; colorNames["turquoise"]="#40E0D0";
+colorNames["violet"]="#EE82EE"; colorNames["wheat"]="#F5DEB3";
+colorNames["whitesmoke"]="#F5F5F5"; colorNames["yellowgreen"]="#9ACD32";
+var canvas_bgcolor = "";
+var canvas_width = 200;
+var canvas_height = 200;
+var canvas_noshade = 0;
+var canvas_nofill = 0;
+var canvas_noshadow = 0;
+var canvas_htmltext = 0;
+var canvas_imgtext = 0;
+var canvas_notext = 0;
+// canvas chart extension
+
+var s5NotesWindow;
+var s5NotesWindowLoaded = false;
+var previousSlide = 0;
+var presentationStart = new Date();
+var slideStart = new Date();
+
+var countdown = {
+ timer: 0,
+ state: 'pause',
+ start: new Date(),
+ end: 0,
+ remaining: 0
+};
+
+var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
+if(isIE) var notIE7 = parseInt(navigator.appVersion) < 7 ? 1 : 0;
+var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
+var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
+var isS2 = navigator.userAgent.indexOf('Safari') >= 2 ? 1 : 0;
+
+function hasClass(object, className) {
+ if (!object.className) return false;
+ return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
+}
+
+function hasValue(object, value) {
+ if (!object) return false;
+ return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
+}
+
+function removeClass(object,className) {
+ if (!object || !hasClass(object,className)) return;
+ object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
+}
+
+function addClass(object,className) {
+ if (!object || hasClass(object, className)) return;
+ if (object.className) {
+ object.className += ' '+className;
+ } else {
+ object.className = className;
+ }
+}
+
+function changeClass(object,className) {
+ if (!object) return;
+ object.firstChild.className = className;
+}
+
+function GetElementsWithClassName(elementName,className) {
+ var allElements = document.getElementsByTagName(elementName);
+ var elemColl = new Array();
+ for (var i = 0; i< allElements.length; i++) {
+ if (hasClass(allElements[i], className)) {
+ elemColl[elemColl.length] = allElements[i];
+ }
+ }
+ return elemColl;
+}
+
+function isParentOrSelf(element, id) {
+ if (element == null || element.nodeName=='BODY') return false;
+ else if (element.id == id) return true;
+ else return isParentOrSelf(element.parentNode, id);
+}
+
+function nodeValue(node) {
+ var result = "";
+ if (node.nodeType == 1) {
+ var children = node.childNodes;
+ for (var i = 0; i < children.length; ++i) {
+ result += nodeValue(children[i]);
+ }
+ }
+ else if (node.nodeType == 3) {
+ result = node.nodeValue;
+ }
+ return(result);
+}
+
+function slideLabel() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var list = document.getElementById('jumplist');
+ smax = slideColl.length;
+ for (var n = 0; n < smax; n++) {
+ var obj = slideColl[n];
+ var did = 'slide' + n.toString();
+ obj.setAttribute('id',did);
+ var otext = '';
+ var menu = obj.firstChild;
+ if (!menu) continue; // to cope with empty slides
+ while (menu && menu.nodeType == 3) {
+ menu = menu.nextSibling;
+ }
+ if (!menu) continue; // to cope with slides with only text nodes
+ var menunodes = menu.childNodes;
+ for (var o = 0; o < menunodes.length; o++) {
+ otext += nodeValue(menunodes[o]);
+ }
+ list.options[list.length] = new Option(n + ' : ' + otext, n);
+ }
+}
+
+function currentSlide() {
+ var cs, at, fd, ss;
+ if (document.getElementById) {
+ cs = document.getElementById('currentSlide');
+ } else {
+ cs = document.currentSlide;
+ }
+ fd = fadeModus?"F":"&ndash;";
+ ss = audioSupport?"S":"&ndash;";
+ at = (autoMatic?(playPause?"||":(playLoop?"&gt;0":"&gt;|")):"&ndash;&ndash;");
+ cs.innerHTML = '<div id="plink" nowrap="nowrap">' +
+ '<span id="csFade">[' + fd + ss + ']<\/span>&nbsp;' +
+ '<span id="csHere"><strong>' + snum + '<\/strong><\/span>' +
+ '<span id="csSep">\/<\/span>' +
+ '<span id="csTotal">' + (smax-1) + '<\/span>&nbsp;' +
+ '<span id="csAuto">[' + at + ']<\/span>' +
+ '<\/div>';
+
+ if (snum == 0) {
+ cs.style.visibility = 'hidden';
+ } else {
+ cs.style.visibility = 'visible';
+ }
+}
+
+function go(step) {
+ if (document.getElementById('slideProj').disabled || step == 0) return;
+ jl = document.getElementById('jumplist');
+ cid = 'slide' + snum;
+ var ce = document.getElementById(cid);
+ if (incrementals[snum].length > 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ removeClass(incrementals[snum][i], 'current');
+ removeClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ if (step != 'j') {
+ snum += step;
+ lmax = smax - 1;
+ if (snum > lmax) snum = lmax;
+ if (snum < 0) snum = 0;
+ }else {
+ snum = parseInt(jl.value);
+ }
+ nid = 'slide' + snum;
+ var ne = document.getElementById(nid);
+ if (!ne) {
+ ne = document.getElementById('slide0');
+ nid = 'slide0';
+ snum = 0;
+ }
+ if (step < 0) {
+ incpos = incrementals[snum].length
+ }else {
+ incpos = 0;
+ }
+ if (incrementals[snum].length > 0 && incpos == 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ if (hasClass(incrementals[snum][i], 'current')) {
+ incpos = i + 1;
+ }else {
+ addClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ }
+ if (incrementals[snum].length > 0 && incpos > 0) {
+ addClass(incrementals[snum][incpos - 1], 'current');
+ }
+ var guru = document.getElementById('guru');
+ if(guru && snum==0) {
+ guru.style.visibility = 'visible';
+ }else if(guru && snum>0) {
+ guru.style.visibility = 'hidden';
+ }
+ if(tranSitions && s5mode && fadeModus) {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {fadeoutSound(curSoundID,true); } // audio support
+ }
+ changeOpac(0,nid);
+ changeOpac(100,cid);
+ ce.style.visibility = 'visible';
+ shiftOpacity(cid,fadeDuration);
+ window.setTimeout("changeSlides()",fadeDuration);
+ }else {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {stopSound(curSoundID); } // audio support
+ }
+ ce.style.visibility = 'hidden';
+ if (isOp) location.hash = nid;
+ ne.style.visibility = 'visible';
+ finishSlides();
+ }
+}
+
+function changeSlides() {
+ if(nid != cid) changeOpac(100,cid);
+ document.getElementById(cid).style.visibility = 'hidden';
+ document.getElementById(nid).style.visibility = 'visible';
+ if (isOp) location.hash = nid;
+ shiftOpacity(nid,fadeDuration);
+ window.setTimeout("finishSlides()",fadeDuration);
+}
+
+function finishSlides() {
+ jl.selectedIndex = snum;
+ currentSlide();
+ loadNote();
+ permaLink();
+ number = undef;
+ if(sound[getSoundID(nid)]) {
+ playSound(nid); // audio support
+ }else if(sound[bgSoundItem] && curSoundID != bgSoundItem) {
+ playSound(bgSoundItem); // audio support
+ }
+}
+
+function goTo(target) {
+ if (target >= smax || target == snum) return;
+ go(target - snum);
+}
+
+function subgo(step) {
+ if (step > 0) {
+ removeClass(incrementals[snum][incpos - 1],'current');
+ removeClass(incrementals[snum][incpos], 'incremental');
+ if(tranSitions && s5mode && fadeModus) {
+ if(!incrementals[snum][incpos].id) {
+ var tmp = new Date(); tid = "inc" + String(tmp.getTime());
+ incrementals[snum][incpos].id = tid;
+ }else {
+ tid = incrementals[snum][incpos].id;
+ }
+ if(typeof(incrementals[snum][incpos].src) != "undefined" || incrementals[snum][incpos].getContext) {
+ changeOpac(0,tid);
+ addClass(incrementals[snum][incpos],'current');
+ shiftOpacity(tid,incrDuration);
+ setTimeout("nextInc()",incrDuration);
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ } else {
+ incpos--;
+ removeClass(incrementals[snum][incpos],'current');
+ addClass(incrementals[snum][incpos], 'incremental');
+ addClass(incrementals[snum][incpos - 1],'current');
+ loadNote();
+ }
+}
+
+function nextInc() {
+ incpos++;
+ loadNote();
+}
+
+function toggle() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ var guru = document.getElementById('guru');
+ if (!slides.disabled) {
+ stopPlay();
+ if(audioSupport && !swfUnloaded) stopAllSounds();
+ slides.disabled = true;
+ outline.disabled = false;
+ s5mode = false;
+ fontSize(1,'em');
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'visible';
+ }
+ if(guru) guru.style.visibility = 'hidden';
+ } else {
+ slides.disabled = false;
+ outline.disabled = true;
+ s5mode = true;
+ fontScale();
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'hidden';
+ }
+ slideColl[snum].style.visibility = 'visible';
+ if(guru && snum==0) guru.style.visibility = 'visible';
+ }
+}
+
+function showHide(action) {
+ var obj = GetElementsWithClassName('*','hideme')[0];
+ switch (action) {
+ case 's':
+ obj.style.visibility = 'visible';
+ break;
+ case 'h':
+ obj.style.visibility = 'hidden';
+ break;
+ case 'k':
+ if (obj.style.visibility != 'visible') {
+ obj.style.visibility = 'visible';
+ } else {
+ obj.style.visibility = 'hidden';
+ }
+ break;
+ }
+}
+
+function keys(key) {
+ if (!key) {
+ key = event;
+ key.which = key.keyCode;
+ }
+ if (helpmode) {
+ dumpHelpReq();
+ return;
+ }
+ if (key.which == 84 && !isOp) {
+ toggle();
+ return;
+ }
+ if (s5mode) {
+ if (autoMatic) {
+ switch (key.which) {
+ case 70: // f/ading on/off
+ switchFade();
+ break;
+ case 83: // s/ound on/off
+ toggleSounds();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 65: // a/utoplay on/off
+ stopPlay();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 80: // p/ause
+ case 32: // spacebar
+ pausePlay();
+ break;
+ }
+ }else {
+ switch (key.which) {
+ case 8: // backspace = HELP
+ createHelpReq();
+ break;
+ case 10: // return
+ case 13: // enter
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ if(number != undef) {
+ goTo(number);
+ break;
+ }
+ case 32: // spacebar
+ case 34: // page down
+ case 39: // rightkey
+ case 40: // downkey
+ if(number != undef) {
+ go(number);
+ } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ break;
+ case 33: // page up
+ case 37: // leftkey
+ case 38: // upkey
+ if(number != undef) {
+ go(-1 * number);
+ } else if (!incrementals[snum] || incpos <= 0) {
+ go(-1);
+ } else {
+ subgo(-1);
+ }
+ break;
+ case 65: // a/utoplay
+ startPlay();
+ break;
+ case 72: // h
+ case 36: // home
+ goTo(0);
+ break;
+ case 69: // e
+ case 35: // end
+ goTo(smax-1);
+ break;
+ case 70: // f/ade transitions on/off
+ switchFade();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 83: // s/ound support on/off
+ toggleSounds();
+ break;
+ case 27: // escape
+ case 81: // q
+ if(!isOp) byby();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 78: // n
+ createNotesWindow();
+ break;
+ }
+ if (key.which < 48 || key.which > 57) {
+ number = undef;
+ } else {
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
+ }
+ }
+ }
+ return false;
+}
+
+function clicker(e) {
+ number = undef;
+ var target;
+ if (window.event) {
+ target = window.event.srcElement;
+ e = window.event;
+ } else {
+ target = e.target;
+ }
+ if (target.href != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
+ if (!helpmode) {
+ if (!e.which || e.which == 1) {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ }
+ } else {
+ dumpHelpReq();
+ }
+}
+
+function findSlide(hash) {
+ var target = null;
+ var slides = GetElementsWithClassName('*','slide');
+ for (var i = 0; i < slides.length; i++) {
+ var targetSlide = slides[i];
+ if ( (targetSlide.name && targetSlide.name == hash)
+ || (targetSlide.id && targetSlide.id == hash) ) {
+ target = targetSlide;
+ break;
+ }
+ }
+ while(target != null && target.nodeName != 'BODY') {
+ if (hasClass(target, 'slide')) {
+ return parseInt(target.id.slice(5));
+ }
+ target = target.parentNode;
+ }
+ return null;
+}
+
+function slideJump() {
+ if (window.location.hash == null) return;
+ var sregex = /^#slide(\d+)$/;
+ var matches = sregex.exec(window.location.hash);
+ var dest = null;
+ if (matches != null) {
+ dest = parseInt(matches[1]);
+ } else {
+ dest = findSlide(window.location.hash.slice(1));
+ }
+ if (dest != null)
+ go(dest - snum);
+}
+
+function fixLinks() {
+ var thisUri = window.location.href;
+ thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
+ var aelements = document.getElementsByTagName('A');
+ for (var i = 0; i < aelements.length; i++) {
+ var a = aelements[i].href;
+ var slideID = a.match('\#slide[0-9]{1,2}');
+ if ((slideID) && (slideID[0].slice(0,1) == '#')) {
+ var dest = findSlide(slideID[0].slice(1));
+ if (dest != null) {
+ if (aelements[i].addEventListener) {
+ aelements[i].addEventListener("click", new Function("e",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "if (e.preventDefault) e.preventDefault();"), true);
+ } else if (aelements[i].attachEvent) {
+ aelements[i].attachEvent("onclick", new Function("",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "event.returnValue = false;"));
+ }
+ }
+ }
+ }
+}
+
+function externalLinks() {
+ if (!document.getElementsByTagName) return;
+ var anchors = document.getElementsByTagName('a');
+ for (var i=0; i<anchors.length; i++) {
+ var anchor = anchors[i];
+ if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
+ anchor.target = '_blank';
+ addClass(anchor,'external');
+ }
+ }
+}
+
+function permaLink() {
+ document.getElementById('plink').href = window.location.pathname + '#slide' + snum;
+}
+
+function createControls() {
+ var controlsDiv = document.getElementById("controls");
+ if (!controlsDiv) return;
+ var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
+ var hideDiv, hideList = '';
+ if (controlVis == 'hidden') {
+ hideDiv = hider;
+ } else {
+ hideList = hider;
+ }
+ if(isOp) {
+ var str = '';
+ }else {
+ var str = '<a accesskey="t" id="sheet" title="toggle CSS" href="javascript:toggle();">&plusmn;<\/a>';
+ }
+ if(isIE) {
+ var tmp = "move around&xA0;until the color&xA0;change to red!";
+ }else if(isS2) {
+ var tmp = "move around\r\nuntil the color\r\nchange to red!";
+ }else {
+ var tmp = "move around until color change to red!";
+ }
+ if(isIE) {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] for keyboard help!"><ul>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst" style="vertical-align: middle; width: 160px;"><select style="cursor: auto; width: 160px; height: auto;" id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del" style="vertical-align: middle; width: 52px;"><select style="cursor: auto; width: 52px; height: auto;" id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul><\/div><\/form>';
+ }else {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] or double click this area for keyboard help!" ondblclick="createHelpReq();"><ul>' +
+ '<li id="exit"><a href="javascript:byby();" accesskey="q" title="exit Show"><\/a><\/li>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li class="vr"><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst"><a id="list" style="cursor:wait;" title="' + tmp + '"><\/a><select id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="fadeLinks" class="vr"><\/li>' +
+ '<li id="fade"><a class="isoff" href="javascript:switchFade();" accesskey="f" title="Transions"><\/a><\/li>' +
+ '<li id="audioLinks" class="vr"><\/li>' +
+ '<li id="audio"><a class="isoff" href="javascript:toggleSounds();" accesskey="s" title="Sounds" ><\/a><\/li>' +
+ '<li id="vol"><a id="volume" style="cursor:wait;" title="' + tmp + '"><\/a><select id="volumelist" title="select Volume" onchange="setVolume();"><option value="100">100<\/option><option value="90">90<\/option><option value="80">80<\/option><option value="70">70<\/option><option value="60">60<\/option><option value="50">50<\/option><option value="40">40<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="10">10<\/option><option value="0">0<\/option><\/select><\/li>' +
+ '<li id="autoLinks" class="vr"><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del"><a id="delay" style="cursor:wait;" title="' + tmp + '"><\/a><select id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul>' +
+ '<a href="http://s5.netzgesta.de" target="_blank" title="S5 Reloaded"><img style="position: absolute; right: 0; bottom: 0;" src="data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAYAAAASYli2AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAYpSURBVHjaYvz//z8DOYCRkZEZRAEx0Ij/f2HiAAHEgqYIpACkkB1J7g8Q/wLRIJ1QNSB5fiDmAOLvQKHPQPoHSB4ggFiQDGMCUnxALAPECkAsBLIdiD8A8SMgfghU8wlqkTgQK1ZVVWldv3792fr16y8D+c9AhgMEECPIy1DDRIDYAojdzMzMWNXV1UG2/v/y5Qvzw4cPP587d24/kH8Gar/uwoULQ+/cufNFXFyciZmZ+UVmZuZKoFmvAQII5kJOIDbi4uKK2Llz53EbG5vP6GGWn5+vMWnSpJtA5jcg5v327Rtnc3PzfSD79+rVq2WBNBtIHUAAwQzkAWKzBQsWnIUZFhISovXmzZsfkpKSDD09PY8kJCR+QtWCguGvrKwsz7Rp07Q4ODh+srCwgILiH0gSIIBgBrICsUBoaCgorBiANgqvXbtWDMg8AcQf9+7d+x0o9xbI/gJV/3fVqlUvmJiY/gIdcaWhoYETahEDQADBDPwNxO9h3gNpBiq6f/HiRbWjR4+yvnr16grQNbeh6kCWsxkYGIhClT8yNDQUgyYhBoAAYoIKfgXi06mpqUowQ+vr6x+uW7fu0suXL8+uWbOGS0BAwB7kC6jXvqmoqLDIyclxzZo1S4udnR2WtBgAAggWyyCXSgOxZUxMjGpWVtY7S0vLr8iRsnnzZl4/P7/DQCYoYtSA2DApKUkVGNNPDh06dBrIvwU06xNAAMEM5AIKqAOxCjQsmHl5eXWdnJx4N2zYcB4prd4CUpfwJRuAAGJCimULoGYpbm5uZ5DBnz9/5tq4caPWkSNHeJEc+g0aTFzfv3/nACabjzk5OW8FBQVloLmHASCAYJECUiTg7+//HJiQTzY2NsrfvXv3n7m5+T5YMgJGEkjDS2gY/pKRkeHt7Ow0Bsb0v9+/fz+HxTJAAMG8DHKFLTC9aRUXF79BT9Qgw4CWHAAy70FdYgjEDgkJCTpWVlYMQBfeAaaMPqBZbwECCGYgMzQGQSleCehS0X///jEDvf9lxYoVoOTyAIjfANX+BqrlBrL1gLFf09vb+0FaWvoHMBctA6USUKQABBAjrPiCliKg7AOKIG5ougLlju9Ipc1foDJWqMWGhYWFtsBg4RISEnrg5uY2BWQgQACxIBkGMkQKijmRfPwXWuI8ASp7DQ1vEP4DDO8PwBzzDJheT0CLPQaAAEJOh0o8zAzeihwMiv+gGZ0B4sz/bIwM797/YTh1/wfDIWj5qAfMmtFnzpz5ICIiwqKoqPgjKChoOtCs5wABhJyXpUCGzddgOIethJ71jEFi1nNwgQrKz8zv37//097eDop15qVLl0pAzWAACCAWhEMYOJFdduELA++b3wxsTIwMfzmYGH6xMDG8gYYpKAg+cnJy/gB6VwuYZFiA7E+wvAwQQCy46ozexwzG17+BYx6UVE4B8Vmo68CRFR0dDQo3UAHBBUwJ4lCLGAACCNnAv4zQxAkCxbIMZ0EuBIYb98EPDFo3voGTzjOogVzArGf969cvNmC2+wssHD7BDAQIIBakmHwPDPy3MAMNeBhgpfbbVEkGhqQbDJaXvjI8BPJB4jz79u37DcwlP+fPn38NuTwECCBkA1+8+8Nwtusxg+STHwwcP/8z8EuwMXA1KjBcBSlwEmRgBhrID/U2O7QMBIEHxsbGkrAwBAggmIGgNMT64AfDWyB+By0EQMVZlC0/wwsXQYa38hzgCGGBWv5ZU1OT4c+fP8yLFi1SA3r5Haw8BAggmIGg5KBpJ8BgeOYTg8S3f2DN/OxMDNwgw0AKnv0EJ+avsITu7u6+EZqzQEHwHFqaMwAEEAtShS/pLcTwrU+Z4QwsyQANOwIL06tfGV5BqwmQWoGKigoLYJnJvWPHjhstLS169vb2M0DqAAIIVh6CXHT/9ndIawEUITCXgUDrQwbGbe8YjkJdAzZQVVVV/t69e8LAgtUYaNgxWKQABBByacMHzfTK9gIMYkBZpj//GT4c+8gAKm1AsfseqPYPtHTXAtaEacBqlgHoyq+srKw3XV1dFwHlvwEEECNyYwmp3cIJjbUf0DbLP7RGEg+0bcMCjQxQzH8BWQgQQIzktr5wAYAAYmKgMgAIMAAp8Fx3osz1lgAAAABJRU5ErkJggg==" width="20" height="32" alt="S5" \/><\/a>' +
+ '<\/div><\/form>';
+ }
+ if (controlVis == 'hidden') {
+ var hidden = document.getElementById('navLinks');
+ } else {
+ var hidden = document.getElementById('jumplist');
+ }
+ addClass(hidden,'hideme');
+}
+
+function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
+ if (!s5mode && !isOp) return false;
+ var hScreen = screen.width; var vScreen = screen.height;
+ var vWindow = window.outerHeight; var hWindow = window.outerWidth;
+ if (isOp && s5mode && defaultView=='slideshow' && ((hScreen != hWindow) || (vScreen != vWindow))) {
+ toggle();
+ return false;
+ }
+ if (isOp && !s5mode && ((hScreen != hWindow) || (vScreen != vWindow))) return false;
+ if (isOp && !s5mode && (hScreen == hWindow) && (vScreen == vWindow)) toggle();
+ var vScale = 48; // both yield 16 (the usual browser default) at 1024x768
+ var hScale = 64; // perhaps should auto-calculate based on theme's declared value?
+ if (window.innerHeight) {
+ var vSize = window.innerHeight;
+ var hSize = window.innerWidth;
+ } else if (document.documentElement.clientHeight) {
+ var vSize = document.documentElement.clientHeight;
+ var hSize = document.documentElement.clientWidth;
+ } else if (document.body.clientHeight) {
+ var vSize = document.body.clientHeight;
+ var hSize = document.body.clientWidth;
+ } else {
+ var vSize = 700; // assuming 1024x768, minus chrome and such equals 8:5
+ var hSize = 1024; // these do not account for kiosk mode or Opera Show
+ }
+ var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
+ extendImgSizes(newSize); // scalable images extension
+ extendCanSizes(newSize); // scalable canvas extension
+ extendObjSizes(newSize); // scalable object extension
+ fontSize(newSize,"px");
+ if(!isS2 || firstTime==0) {
+ generateCanvas(); // dynamic canvas extension
+ }
+ if (isGe) { // hack to counter incremental reflow bugs
+ var obj = document.getElementsByTagName('body')[0];
+ obj.style.visibility = 'hidden';
+ obj.style.display = 'none';
+ obj.style.display = 'block';
+ obj.style.visibility = 'visible';
+ changeOpac(100,'slide' + snum);
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("fixReflow()",10);
+ }else {
+ setListPos(); // invisible select extension
+ }
+}
+
+function fixReflow() {
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("finishReflow()",10);
+}
+function finishReflow() {
+ setListPos(); // invisible select extension
+}
+
+function fontSize(val,fmt) {
+ var value = val + fmt;
+ if (!(s5ss = document.getElementById('s5ss'))) {
+ if (!document.createStyleSheet) {
+ document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
+ s5ss.setAttribute('media','screen, projection');
+ s5ss.setAttribute('id','s5ss');
+ } else {
+ document.createStyleSheet();
+ document.s5ss = document.styleSheets[document.styleSheets.length - 1];
+ }
+ }
+ if (!(document.s5ss && document.s5ss.addRule)) {
+ while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
+ s5ss.appendChild(document.createTextNode('html {font-size: ' + value + ' !important;}'));
+ } else {
+ document.s5ss.addRule('html','font-size: ' + value + ' !important;');
+ }
+}
+
+function windowChange() {
+ fontScale();
+}
+
+function notOperaFix() {
+ slideCSS = document.getElementById('slideProj').href;
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ slides.setAttribute('media','screen');
+ outline.disabled = true;
+ if (isGe) {
+ slides.setAttribute('href','null'); // Gecko fix
+ slides.setAttribute('href',slideCSS); // Gecko fix
+ }
+ if ((isIE && notIE7) && document.styleSheets && document.styleSheets[0]) {
+ document.styleSheets[0].addRule('img', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('div', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('.slide', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ }
+}
+
+function getIncrementals(obj) {
+ var incrementals = new Array();
+ if (!obj)
+ return incrementals;
+ var children = obj.childNodes;
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ if (hasClass(child, 'incremental')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'incremental');
+ for (var j = 0; j < child.childNodes.length; j++) {
+ if (child.childNodes[j].nodeType == 1) {
+ addClass(child.childNodes[j], 'incremental');
+ }
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ removeClass(child,'incremental');
+ }
+ }
+ if (hasClass(child, 'show-first')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'show-first');
+ if (child.childNodes[isGe].nodeType == 1) {
+ removeClass(child.childNodes[isGe], 'incremental');
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ }
+ }
+ incrementals = incrementals.concat(getIncrementals(child));
+ }
+ return incrementals;
+}
+
+function createIncrementals() {
+ var incrementals = new Array();
+ for (var i = 0; i < smax; i++) {
+ incrementals[i] = getIncrementals(document.getElementById('slide'+i));
+ }
+ return incrementals;
+}
+
+function trap(e) {
+ if (!e) {
+ e = event;
+ e.which = e.keyCode;
+ }
+ try {
+ modifierKey = e.ctrlKey || e.altKey || e.metaKey;
+ }
+ catch(e) {
+ modifierKey = false;
+ }
+ return modifierKey || e.which == 0;
+}
+
+// notes extension
+function noteLabel() { // Gives notes id's to match parent slides
+ var notes = GetElementsWithClassName('div','notes');
+ for (var i = 0; i < notes.length; i++) {
+ var note = notes[i];
+ var id = 'note' + note.parentNode.id.substring(5);
+ note.setAttribute('id',id);
+ }
+ resetElapsedSlide();
+ resetRemainingTime();
+ window.setInterval('updateElaspedTime()', 1000);
+}
+
+function createNotesWindow() { // creates a window for our notes
+ if (!s5NotesWindow || s5NotesWindow.closed) { // Create the window if it doesn't exist
+ s5NotesWindowLoaded = false;
+ // Note: Safari has a tendency to ignore window options preferring to default to the settings of the parent window, grr.
+ s5NotesWindow = window.open(s5Path+'ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0');
+ }
+ if (s5NotesWindowLoaded) { // Load the current note if the Note HTML has loaded
+ loadNote();
+ } else { // Keep trying...
+ window.setTimeout('createNotesWindow()', 50);
+ }
+}
+
+function loadNote() {
+// Loads a note into the note window
+ var notes = nextNotes = '<em class="disclaimer">There are no notes for this slide.</em>';
+ if (document.getElementById('note' + snum)) {
+ notes = document.getElementById('note' + snum).innerHTML;
+ }
+ if (document.getElementById('note' + (snum + 1))) {
+ nextNotes = document.getElementById('note' + (snum + 1)).innerHTML;
+ }
+
+ var jl = document.getElementById('jumplist');
+ var slideTitle = jl.options[jl.selectedIndex].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex) ? ' (' + jl.selectedIndex + '/' + (smax - 1) + ')' : '');
+ if (incrementals[snum].length > 0) {
+ slideTitle += ' <small>[' + incpos + '/' + incrementals[snum].length + ']</small>';
+ }
+ if (jl.selectedIndex < smax - 1) {
+ var nextTitle = jl.options[jl.selectedIndex + 1].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex + 1) ? ' (' + (jl.selectedIndex + 1) + '/' + (smax - 1) + ')' : '');
+ } else {
+ var nextTitle = '[end of slide show]';
+ }
+
+ if (s5NotesWindow && !s5NotesWindow.closed && s5NotesWindow.document) {
+ s5NotesWindow.document.getElementById('slide').innerHTML = slideTitle;
+ s5NotesWindow.document.getElementById('notes').innerHTML = notes;
+ s5NotesWindow.document.getElementById('next').innerHTML = nextTitle;
+ s5NotesWindow.document.getElementById('nextnotes').innerHTML = nextNotes;
+ }
+ resetElapsedSlide();
+}
+
+function minimizeTimer(id) {
+ var obj = s5NotesWindow.document.getElementById(id);
+ if (hasClass(obj,'collapsed')) {
+ removeClass(obj,'collapsed');
+ } else {
+ addClass(obj,'collapsed');
+ }
+}
+
+function resetElapsedTime() {
+ presentationStart = new Date();
+ slideStart = new Date();
+ updateElaspedTime();
+}
+
+function resetElapsedSlide() {
+ if (snum != previousSlide) {
+ slideStart = new Date();
+ previousSlide = snum;
+ updateElaspedTime();
+ }
+}
+
+function updateElaspedTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var now = new Date();
+ var ep = s5NotesWindow.document.getElementById('elapsed-presentation');
+ var es = s5NotesWindow.document.getElementById('elapsed-slide');
+ ep.innerHTML = formatTime(now.valueOf() - presentationStart.valueOf());
+ es.innerHTML = formatTime(now.valueOf() - slideStart.valueOf());
+}
+
+function resetRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var startField = s5NotesWindow.document.getElementById('startFrom');
+ startFrom = readTime(startField.value);
+ countdown.remaining = startFrom * 60000; // convert to msecs
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var timeLeft = formatTime(countdown.remaining);
+ tl.innerHTML = timeLeft;
+}
+
+function updateRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var now = new Date();
+ if (countdown.state == 'run') {
+ countdown.remaining = countdown.end - now;
+ }
+ tl.style.color = '';
+ tl.style.backgroundColor = '';
+ if (countdown.remaining >= 0) {
+ var timeLeft = formatTime(countdown.remaining);
+ removeClass(tl,'overtime');
+ if (countdown.remaining < 300000) {
+ tl.style.color = 'rgb(' + (255-Math.round(countdown.remaining/2000)) + ',0,0)';
+ tl.style.backgroundColor = 'rgb(255,255,' + (Math.round(countdown.remaining/2000)) + ')';
+ }
+ } else {
+ var timeLeft = '-' + formatTime(-countdown.remaining);
+ addClass(tl,'overtime');
+ }
+ tl.innerHTML = timeLeft;
+}
+
+function toggleRemainingTime() {
+ if (countdown.state == 'pause') countdown.state = 'run'; else countdown.state = 'pause';
+ if (countdown.state == 'pause') {
+ window.clearInterval(countdown.timer);
+ }
+ if (countdown.state == 'run') {
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ countdown.timer = window.setInterval('updateRemainingTime()', 1000);
+ }
+}
+
+function alterRemainingTime(amt) {
+ var change = amt * 60000; // convert to msecs
+ countdown.end += change;
+ countdown.remaining += change;
+ updateRemainingTime();
+}
+
+function formatTime(msecs) {
+ var time = new Date(msecs);
+
+ var hrs = time.getUTCHours() + ((time.getUTCDate() -1) * 24); // I doubt anyone will spend more than 24 hours on a presentation or single slide but just in case...
+ hrs = (hrs < 10) ? '0'+hrs : hrs;
+ if (hrs == 'NaN' || isNaN(hrs)) hrs = '--';
+
+ var min = time.getUTCMinutes();
+ min = (min < 10) ? '0'+min : min;
+ if (min == 'NaN' || isNaN(min)) min = '--';
+
+ var sec = time.getUTCSeconds();
+ sec = (sec < 10) ? '0'+sec : sec;
+ if (sec == 'NaN' || isNaN(sec)) sec = '--';
+
+ return hrs + ':' + min + ':' + sec;
+}
+
+function readTime(val) {
+ var sregex = /:/;
+ var matches = sregex.exec(val);
+ if (matches == null) {
+ return val;
+ } else {
+ var times = val.split(':');
+ var hours = parseInt(times[0]);
+ var mins = parseInt(times[1]);
+ var total = (hours * 60) + mins;
+ return total;
+ }
+}
+// notes extension
+
+// startup process
+function createSlideShow() {
+ defaultCheck();
+ if(!isIE) createDetector(); // (degrade IE) scalable images extension
+ if(opac!=0 || isIE) { // &&!isIE (degrade IE)
+ tranSitions = false;
+ fadeModus = false;
+ }
+ if(tranSitions && document.getElementById && document.createElement){
+ createProgress();
+ var nop=document.getElementById('StartupControl');
+ nop.onload = dumpProgress;
+ }else {
+ startup();
+ showAll();
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+ }
+}
+
+function defaultCheck() {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'defaultView') {
+ defaultView = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'controlVis') {
+ controlVis = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'tranSitions') {
+ tranSitions = (allMetas[i].content == "true") ? true : false;
+ fadeModus = (tranSitions == true) ? true : false;
+ }
+ if (allMetas[i].name == 'fadeDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ fadeDuration = Math.max(200,Math.min(tmp,2000));
+ }
+ if (allMetas[i].name == 'incrDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ incrDuration = Math.max(50,Math.min(tmp,500));
+ }
+ if (allMetas[i].name == 'autoMatic') {
+ autoMatic = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playLoop') {
+ playLoop = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playDelay') {
+ var tmp = parseInt(allMetas[i].content);
+ playDelay = Math.max(5,Math.min(tmp,90))*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ }
+ if (allMetas[i].name == 'audioSupport') {
+ audioSupport = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'audioVolume') {
+ var tmp = parseInt(allMetas[i].content);
+ audioVolume = Math.max(0,Math.min(tmp,100));
+ }
+ if (allMetas[i].name == 'audioError') {
+ audioError = (allMetas[i].content == "true") ? true : false;
+ }
+ }
+}
+
+function createProgress() {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "StartupProgress";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=100)";
+ }else {
+ pg.style.opacity = 1.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/progress.gif)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+
+ var im = document.createElement('img');
+ im.id = "StartupControl";
+ im.src = s5Path+"ui/graphic_support/blank.gif?" + new Date().valueOf();
+ document.getElementsByTagName("body")[0].appendChild(im);
+}
+
+function startup() {
+ createControls(); // hallvord
+ slideLabel();
+ incrementals = createIncrementals();
+ noteLabel(); // [SI:060104] must follow slideLabel()
+ loadNote();
+ fixLinks();
+ externalLinks();
+ fontScale();
+ if (!isOp) {
+ if(isIE) {
+ document.getElementById('lst').style.backgroundImage = 'none';
+ document.getElementById('del').style.backgroundImage = 'none';
+ }else {
+ document.getElementById('audio').style.backgroundImage = 'none';
+ }
+ notOperaFix();
+ }else if(isOp) {
+ var obj = document.getElementById('exit');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('exit').style.opacity = 0.5;
+ obj = document.getElementById('toggle');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('toggle').style.opacity = 0.5;
+ document.getElementById('jumplist').style.visibility = 'hidden';
+ document.getElementById('list').style.visibility = 'hidden';
+ document.getElementById('lst').style.opacity = 0.5;
+ obj = document.getElementById('audio');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('audio').style.opacity = 0.5;
+ document.getElementById('volumelist').style.visibility = 'hidden';
+ document.getElementById('volume').style.visibility = 'hidden';
+ document.getElementById('vol').style.opacity = 0.5;
+ document.getElementById('delaylist').style.visibility = 'hidden';
+ document.getElementById('delay').style.visibility = 'hidden';
+ document.getElementById('del').style.opacity = 0.5;
+ }
+ slideJump();
+ if (defaultView == 'outline') toggle();
+ document.onkeyup = keys;
+ document.onkeypress = trap;
+ document.onclick = clicker;
+}
+
+function preloadImgages() {
+ var temp = '';
+ var objects = document.getElementsByTagName('img');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].src != '') {
+ temp = new Image();
+ temp.src = objects[i].src;
+ }
+ }
+}
+
+function showAll() {
+ var obj1 = GetElementsWithClassName('div','presentation')[0];
+ if(!obj1) var obj1 = GetElementsWithClassName('ol','presentation')[0];
+ var obj2 = GetElementsWithClassName('div','layout')[0];
+ if(!obj1){}else {obj1.style.display = 'block'};
+ if(!obj2){}else {obj2.style.display = 'block'};
+}
+
+function dumpProgress() {
+ document.body.removeChild(document.getElementById('StartupControl'));
+ startup();
+ preloadImgages();
+ showAll();
+ createSoundManagerScript();
+ shiftOpacity('StartupProgress',1000);
+ window.setTimeout("removeProgress()",1000);
+}
+
+function removeProgress() {
+ document.body.removeChild(document.getElementById('StartupProgress'));
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+}
+function panelSetup() {
+ if(playPause) {
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ if(playLoop) {
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ if(audioSupport && !isIE && !isOp) {
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ }
+ if(fadeModus && !isIE) {
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ if(autoMatic) {
+ var obj = document.getElementById('auto'); changeClass(obj,'ison');
+ startPlay();
+ }
+ if(audioVolume && !isIE && !isOp) {
+ var idx = 0;
+ if(audioVolume >= 95 && audioVolume <= 100) {idx = 0;}
+ else if(audioVolume >= 85 && audioVolume < 95) {idx = 1;}
+ else if(audioVolume >= 75 && audioVolume < 85) {idx = 2;}
+ else if(audioVolume >= 65 && audioVolume < 75) {idx = 3;}
+ else if(audioVolume >= 55 && audioVolume < 65) {idx = 4;}
+ else if(audioVolume >= 45 && audioVolume < 55) {idx = 5;}
+ else if(audioVolume >= 35 && audioVolume < 45) {idx = 6;}
+ else if(audioVolume >= 25 && audioVolume < 35) {idx = 7;}
+ else if(audioVolume >= 15 && audioVolume < 25) {idx = 8;}
+ else if(audioVolume >= 5 && audioVolume < 15) {idx = 9;}
+ else {idx = 10;}
+ document.getElementById('volumelist').selectedIndex = idx;
+ }
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+}
+// startup process
+
+// shutdown process
+function byby() {
+ stopPlay();
+ if(tranSitions && fadeModus && s5mode && !isOp) {
+ fadeoutSound(curSoundID,true); // audio support
+ var pg = document.createElement('div');
+ pg.id = "GoodBy";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=0)";
+ }else {
+ pg.style.opacity = 0.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/finish.gif)";
+ document.getElementsByTagName("body")[0].appendChild(pg);
+ shiftOpacity('GoodBy',1000);
+ window.setTimeout("history.back()",1000);
+ }else {
+ stopSound(curSoundID);
+ history.back();
+ }
+}
+// shutdown process
+
+// scalable images extension
+function createDetector() {
+ var em = document.createElement('div');
+ em.id='EMSizeControl'; em.style.position="absolute"; em.style.left="-999px";
+ em.style.width="1em"; em.style.height="1em"; em.style.opacity=0.0;
+ document.getElementsByTagName("body")[0].appendChild(em);
+ var nop=document.getElementById('EMSizeControl');
+ if(!nop||findPosX(nop)!=-999) {}else {
+ opac=document.getElementById('EMSizeControl').style.opacity;
+ empx=document.getElementById('EMSizeControl').offsetHeight;
+ document.body.removeChild(document.getElementById('EMSizeControl'));
+ var objects = document.getElementsByTagName('img');
+ var j = 0; var i = 0; var k = 0; var d; var obj;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ images[j] = objects[i];
+ ++j;
+ }
+ }
+ var objects = document.getElementsByTagName('canvas'); j = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ canvas[objects[i].id] = objects[i];
+ if(j==0) {
+ if(objects[i].getContext) {
+ canvasSupport = true;
+ }
+ ++j;
+ }
+ }
+ }
+ if(canvasSupport!=true) {
+ for (d in canvas) {
+ try {
+ canvas[d].setAttribute("width",1);
+ canvas[d].setAttribute("height",1);
+ } catch (e) {
+ }
+ }
+ }
+ var objects = document.getElementsByTagName('table');
+ j = 0; k = 0; l = 0; var w; var h; var tmp; var cnt;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^piechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ piecharts[j] = objects[i];
+ em = piecharts[j].getAttribute("summary");
+ if(em != "") em = "," + em;
+ piecharts[j].setAttribute("summary", w + "," + h + em);
+ ++j;
+ }
+ }
+ }
+ if(objects[i].className.match(/^barchart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ barcharts[k] = objects[i];
+ em = barcharts[k].getAttribute("summary");
+ if(em != "") em = "," + em;
+ barcharts[k].setAttribute("summary", w + "," + h + em);
+ ++k;
+ }
+ }
+ }
+ if(objects[i].className.match(/^linechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ linecharts[l] = objects[i];
+ em = linecharts[l].getAttribute("summary");
+ if(em != "") em = "," + em;
+ linecharts[l].setAttribute("summary", w + "," + h + em);
+ ++l;
+ }
+ }
+ }
+ }
+ objects = document.getElementsByTagName('object'); j = 0; i = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ medias[j] = objects[i]; ++j;
+ if(!isIE) {
+ if(objects[i].getAttributeNode("classid")) objects[i].removeAttributeNode(objects[i].getAttributeNode("classid"));
+ if(objects[i].getAttributeNode("codebase")) objects[i].removeAttributeNode(objects[i].getAttributeNode("codebase"));
+ }
+ }
+ }
+ }
+}
+function extendImgSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < images.length; i++) {
+ w=images[i].getAttribute("width",0);
+ h=images[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ images[i].style.width=Math.floor(w*q)+"px";
+ images[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+
+function extendCanSizes(f) {
+ if(empx>0 && canvasSupport) {
+ var q = (f/empx); var w = 0; var h = 0; var tmp = ""; var cnt; var obj;
+ for(var i=0; i < piecharts.length; i++) {
+ if(piecharts[i].getAttribute("summary")) {
+ tmp = piecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = piecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < barcharts.length; i++) {
+ if(barcharts[i].getAttribute("summary")) {
+ tmp = barcharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = barcharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < linecharts.length; i++) {
+ if(linecharts[i].getAttribute("summary")) {
+ tmp = linecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = linecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ }
+}
+function extendObjSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < medias.length; i++) {
+ w=medias[i].getAttribute("width",0);
+ h=medias[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ medias[i].style.width=Math.floor(w*q)+"px";
+ medias[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+function findPosX(obj) {
+ var posLeft = 0;
+ while (obj.offsetParent) {
+ posLeft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ return posLeft;
+}
+function findPosY(obj) {
+ var posTop = 0;
+ while (obj.offsetParent) {
+ posTop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ return posTop;
+}
+// scalable images extension
+
+// canvas chart extension
+function deg2rad(degrees) {
+ return Math.PI *degrees/180;
+}
+function rad2deg(radians) {
+ return 180.0 *radians/Math.PI;
+}
+function circle_point_x(radians, diameter) {
+ var x = Math.cos(radians)*(diameter/2);
+ return x;
+}
+function circle_point_y(radians, diameter) {
+ var y = Math.sin(radians)*(diameter/2);
+ return y;
+}
+function roundTo(val,dig) {
+ var num = val;
+ if (val > 8191 && val < 10485) {
+ val = val-5000;
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ num = num+5000;
+ } else {
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ }
+ return num;
+}
+function searchColor(value) {
+ for (var dat in colorNames) {
+ if(dat==value) return colorNames[dat];
+ }
+ return false;
+}
+function scanColor(value) {
+ if(value.match(/^#[0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var val1 = value.substr(1,1).toLowerCase();
+ var val2 = value.substr(2,1).toLowerCase();
+ var val3 = value.substr(3,1).toLowerCase();
+ value = '#' + val1 + val1 + val2 + val2 + val3 + val3;
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var tmp = searchColor(value.toLowerCase());
+ if(!tmp) {}else{value = tmp;}
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ value = '#000000';
+ }
+ return value.toLowerCase();
+}
+function hex2rgb(val,trans) {
+ if(val.length==7) {
+ var tp1 = Math.max(0,Math.min(parseInt(val.substr(1,2),16),255));
+ var tp2 = Math.max(0,Math.min(parseInt(val.substr(3,2),16),255));
+ var tp3 = Math.max(0,Math.min(parseInt(val.substr(5,2),16),255));
+ return 'rgba(' + tp1 + ',' + tp2 + ',' + tp3 + ',' + trans + ')';
+ }
+}
+function trim(str) {
+ return (str.replace(/\s+$/,"").replace(/^\s+/,""));
+}
+function roundedRect(ctx,x,y,width,height,radius){
+ ctx.beginPath();
+ ctx.moveTo(x,y+radius);
+ ctx.lineTo(x,y+height-radius);
+ ctx.quadraticCurveTo(x,y+height,x+radius,y+height);
+ ctx.lineTo(x+width-radius,y+height);
+ ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius);
+ ctx.lineTo(x+width,y+radius);
+ ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
+ ctx.lineTo(x+radius,y);
+ ctx.quadraticCurveTo(x,y,x,y+radius);
+ ctx.closePath();
+}
+function drawString(ctx, text, fc, tx, ty) {
+ var xp = 0; var c = "";
+ ctx.beginPath();
+ for (var i = 0; i < text.length; i++) {
+ c = text[i];
+ ctx.drawImage(font, signs[c].sx, signs[c].sy, signs[c].sw, signs[c].sh, tx+xp, ty, signs[c].sw*fc, signs[c].sh*fc);
+ xp += (signs[c].sw*fc);
+ }
+ ctx.closePath();
+}
+function strokeString(ctx, txt, col, fh, tx, ty) {
+ var fw = fh*0.666666; var lw = fh*0.125;
+ var ls = lw/2; var cr = lw; var xp = 0;
+ ctx.lineCap = "round"; ctx.lineJoin = "round"
+ ctx.lineWidth = lw; ctx.strokeStyle = col;
+ for (var i = 0; i < txt.length; i++) {
+ strokeSymbol(ctx, txt[i], ls, tx+xp, ty, fw, fh);
+ xp += (txt[i]!="."?fw+cr:(fw/2)+cr);
+ }
+}
+function strokeSymbol(ctx, symbol, fc, cx, cy, cw, ch) {
+ ctx.beginPath();
+ switch (symbol) {
+ case "0":
+ ctx.moveTo(cx+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+(cw/2),(cw/2)-fc,deg2rad(180),0, false);
+ ctx.arc(cx+(cw/2),(cy+ch)-(cw/2),(cw/2)-fc,0,deg2rad(180), false);
+ ctx.closePath();
+ break;
+ case "1":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.moveTo(cx+(cw*0.666666),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.666666),cy+fc);
+ ctx.lineTo(cx+(cw*0.25),cy+(ch*0.25));
+ break;
+ case "2":
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.8));
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+fc,cy+ch-fc);
+ ctx.arc(cx+(cw/2),cy+(cw*0.425),(cw*0.425)-fc,deg2rad(45),deg2rad(-180), true);
+ break;
+ case "3":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-90),deg2rad(180), false);
+ break;
+ case "4":
+ ctx.moveTo(cx+(cw*0.75),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.5),cy+ch-fc);
+ break;
+ case "5":
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-80),deg2rad(180), false);
+ break;
+ case "6":
+ ctx.moveTo(cx+fc,cy+ch-(cw*0.5)-fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-180),deg2rad(180), false);
+ ctx.bezierCurveTo(cx+fc,cy+fc,cx+fc,cy+fc,cx+(cw*0.9)-fc,cy+fc);
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ break;
+ case "7":
+ ctx.moveTo(cx+(cw*0.5),cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.25)-fc);
+ break;
+ case "8":
+ ctx.moveTo(cx+(cw*0.92)-fc,cy+(cw*0.59));
+ ctx.arc(cx+(cw/2),cy+(cw*0.45),(cw*0.45)-fc,deg2rad(25),deg2rad(-205), true);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-135),deg2rad(-45), true);
+ ctx.closePath();
+ ctx.moveTo(cx+(cw*0.79),cy+(ch*0.47));
+ ctx.lineTo(cx+(cw*0.21),cy+(ch*0.47));
+ break;
+ case "9":
+ ctx.moveTo(cx+cw-fc,cy+(cw*0.5));
+ ctx.arc(cx+(cw/2),cy+(cw*0.5),(cw*0.5)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.bezierCurveTo(cx+cw-fc,cy+ch-fc,cx+cw-fc,cy+ch-fc,cx+(cw*0.1)+fc,cy+ch-fc);
+ break;
+ case "%":
+ ctx.moveTo(cx+fc,cy+(ch*0.75));
+ ctx.lineTo(cx+cw-fc,cy+(ch*0.25));
+ ctx.moveTo(cx+(cw*0.505),cy+(cw*0.3));
+ ctx.arc(cx+(cw*0.3),cy+(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.moveTo(cx+(cw*0.905),cy+ch-(cw*0.3));
+ ctx.arc(cx+(cw*0.7),cy+ch-(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ break;
+ case ".":
+ ctx.moveTo(cx+(cw*0.25),cy+ch-fc-fc);
+ ctx.arc(cx+(cw*0.25),cy+ch-fc-fc,fc,deg2rad(0),deg2rad(360), false);
+ ctx.closePath();
+ break;
+ default:
+ break;
+ }
+ ctx.stroke();
+}
+function drawBar(ctx,x,y,width,height,color,value,textdiv){
+ var rw = width/2; var rh = rw/2;
+ height = Math.max(height,rw);
+ var dh = Math.max(height-(2*rh),0.1); var S2L;
+ var xx = rw/8; var yy = rh/4;
+ var yo = rh/2; y = y - yy;
+ if(canvas_noshadow <= 0 && canvas_noshade <= 0) {
+ ctx.save();
+ S2L = ctx.createRadialGradient(x+rw+rh,y+height-rw+yy+rh,0,x+rw,y+height-rw+yy,rw);
+ S2L.addColorStop(0, 'rgba(0,0,0,0.5)');
+ S2L.addColorStop(0.7, 'rgba(0,0,0,0.25)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = S2L;
+ ctx.scale(1,0.5);
+ ctx.translate(xx,y+height+yy);
+ if(isOp){
+ ctx.fillRect(x,y+yy+height-width,width,width);
+ }else {
+ ctx.arc(x+rw,y+yy+height-width,width,0,deg2rad(360), false);
+ ctx.fill();
+ }
+ ctx.restore();
+ }else if(canvas_noshadow <= 0 && canvas_noshade >= 1) {
+ ctx.fillStyle = 'rgba(0,0,0,0.2)';
+ ctx.fillRect(x+yo,y+rh+yo+yo,width,dh);
+ }
+
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x,y+(height/2),x+width,y+(height/2));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.75)');
+ S2L.addColorStop(0.2, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.3, 'rgba(0,0,0,0)');
+ S2L.addColorStop(0.5, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.35)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.1)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.strokeStyle = S2L;
+ ctx.stroke();
+ }else {
+ ctx.fillStyle = color;
+ ctx.fillRect(x,y+rh+yo,width,dh);
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var bw = width; var bh = bw/4;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ var c; var w;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,x+(width/2)-(bw/2),y,bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext <= 0) {
+ strokeString(ctx, value + "%","rgba(48,48,48,1)", th, x+(width/2)-(w/2), y+((bh-th)/2));
+ }else {
+ drawString(ctx, value + "%", tf, x+(width/2)-(w/2), y+((bh-th)/2.2));
+ }
+ }else {
+ var bh = bw/3; var th = roundTo(bh*0.75,0);
+ roundedRect(ctx,x,y,bw,bh,bh/4);
+ ctx.fill();
+ var obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = x + "px";
+ obj.style.top = y+((bh-th)/2.2) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+
+ }
+}
+function drawLine(ctx,x,y,width,height,dist,array,factor,color,fill){
+ if(fill <= 0){
+ var style = hex2rgb(color,0.5);
+ ctx.lineJoin = "miter";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height);
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.lineTo(x+width,y+height);
+ ctx.lineTo(x,y+height);
+ ctx.closePath();
+ ctx.fillStyle = style;
+ ctx.fill();
+ }
+ ctx.lineJoin = "round";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height-(array[0]*factor));
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.strokeStyle = color;
+ ctx.stroke();
+}
+function setDataURL(cid) {
+ if(cid.toDataURL) {
+ var obj = document.getElementById(cid.id + "_link");
+ if(obj) {
+ obj.setAttribute("title", "To Data URL");
+ obj.setAttribute("target", "_blank");
+ obj.setAttribute("href", cid.toDataURL());
+ }
+ }
+}
+function get_input(dataobj,canvasobj,linechart) {
+ var table = document.getElementById(dataobj);
+ var canvas = document.getElementById(canvasobj);
+ var row; var clm; var cnt = 0; var val = 0; var nme = ""; var col = "";
+ if(canvas.getContext) {
+ canvas_width = parseInt(canvas.style.width);
+ canvas_height = parseInt(canvas.style.height);
+ if(canvas_width >= 16 && canvas_height >= 16) {
+ var tmp = table.getAttribute("summary");
+ canvas_noshade = 0; canvas_noshadow = 0;
+ canvas_notext = 0; canvas_imgtext = 0;
+ canvas_htmltext = 0; canvas_nofill = 0;
+ if(tmp.search(/noshadow/) != -1) canvas_noshadow = 1;
+ if(tmp.search(/noshade/) != -1) canvas_noshade = 1;
+ if(tmp.search(/nofill/) != -1) canvas_nofill = 1;
+ if(tmp.search(/notext/) != -1) canvas_notext = 1;
+ if(tmp.search(/htmltext/) != -1) canvas_htmltext = 1;
+ if(tmp.search(/imgtext/) != -1) canvas_imgtext = 1;
+ if(table.getAttribute("bgcolor")) {
+ canvas_bgcolor = scanColor(table.getAttribute("bgcolor"));
+ }
+ ChartData = new Array(); colorSlice = new Array();
+ if(table.getElementsByTagName("tr")[0].getElementsByTagName("th")[0]) cnt = 1;
+ for(var r = cnt; r < table.getElementsByTagName("tr").length; r++) {
+ row = table.getElementsByTagName("tr")[r];
+ clm = row.getElementsByTagName("td").length;
+ if(row.getElementsByTagName("td")[0].getAttribute("bgcolor")) {
+ col = scanColor(row.getElementsByTagName("td")[0].getAttribute("bgcolor")); val = 0;
+ nme = trim(row.getElementsByTagName("td")[1].innerHTML.replace(/<[^>]+>/g,""));
+ if(!linechart) {
+ if(clm > 3) {
+ for(var z = 2; z < clm; z++) {
+ val += parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ }else {
+ val = parseFloat(row.getElementsByTagName("td")[2].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ if(!isNaN(val) && val > 0 && nme != '') {
+ colorSlice[r-cnt] = col; ChartData[nme] = Math.abs(val);
+ }else {
+ break;
+ }
+ }else {
+ val = 0; i = 0;
+ if(clm > 3 && nme != '') {
+ ChartData[r-cnt] = new Array();
+ colorSlice[r-cnt] = col;
+ for(var z = 2; z < clm; z++) {
+ val = Math.abs(parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,"")));
+ if(!isNaN(val) && val >= 0) {
+ ChartData[r-cnt][i] = val; i++;
+ }else {
+ ChartData[r-cnt][i] = 0; i++;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }
+ }
+}
+function setPieChart(canvasobj,textobj) {
+ var cd = (Math.min(canvas_width,canvas_height)/110)*100;
+ var cp = cd*0.1; var cr = cd/2;
+ var sr = cr*0.93; var cw = cd+cp; var ch = cw;
+ var cx = (cd/2)+(cp/2); var cy = cx; var ct = 0;
+ for (var data in ChartData) {
+ ct += ChartData[data];
+ }
+ var poc = ct/100;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ }
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,cw,ch);
+ }else {
+ ctx.clearRect(0,0,cw,ch);
+ }
+ if(canvas_noshadow <= 0) {
+ if(!isOp) {
+ ctx.beginPath();
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),cr,cx+(cr*0.1),cy+(cr*0.1),sr*0.9);
+ B2B.addColorStop(0, 'rgba(0,0,0,0)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.arc(cx+(cr*0.1),cy+(cr*0.1),cr,0,deg2rad(360), false);
+ ctx.closePath();
+ ctx.fillStyle = B2B;
+ ctx.fill();
+ }else {
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),0,cx+(cr*0.1),cy+(cr*0.1),cr);
+ B2B.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(0.87, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = B2B;
+ ctx.fillRect(0,0,cw,ch);
+ }
+ }
+ var val = 0; var deg = 0; var idx = 0; var data;
+ for (data in ChartData) {
+ val = ChartData[data]; sdeg = deg;
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ ctx.beginPath();
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr,sdeg,edeg, false);
+ ctx.lineTo(cx,cy);
+ ctx.closePath();
+ ctx.fillStyle = colorSlice[(idx++)];
+ ctx.fill();
+ }
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ var W2T = ctx.createLinearGradient(cp*2,cp*2,cx,cy);
+ W2T.addColorStop(0, 'rgba(255,255,255,0.8)');
+ W2T.addColorStop(1, 'rgba(255,255,255,0)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.fillStyle = W2T;
+ ctx.fill();
+ ctx.beginPath();
+ var T2B = ctx.createLinearGradient(cx,cy,cw-(cp*2),ch-(cp*2));
+ T2B.addColorStop(0, 'rgba(0,0,0,0)');
+ T2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.fillStyle = T2B;
+ ctx.fill();
+ ctx.beginPath();
+ var B2T = ctx.createLinearGradient(cx,cy,cw-(cp*1.9),ch-(cp*1.9));
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.strokeStyle = B2T;
+ ctx.stroke();
+ ctx.beginPath();
+ var T2W = ctx.createLinearGradient(cx,cy,(cp*1.9),(cp*1.9));
+ T2W.addColorStop(0, 'rgba(255,255,255,0)');
+ T2W.addColorStop(1, 'rgba(255,255,255,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.strokeStyle = T2W;
+ ctx.stroke();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var mpos = 0; var per = 0; var gx = 0;
+ var gy = 0; var tx = 0; var ty = 0;
+ var obj = ""; var w = 0; var c = 0;
+ var bw = cr*0.45; var bh = cr*0.125;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext >= 1) {
+ bw = (cr*0.365);
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ for (data in ChartData) {
+ val = ChartData[data];
+ sdeg = deg; mpos = deg+(((val/2)/ct)*deg2rad(360));
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ per = roundTo(val/poc,2);
+ gx = circle_point_x(mpos, cd);
+ gy = circle_point_y(mpos, cd);
+ tx = parseFloat((cx+(2*Math.floor(cx + gx)))/3);
+ ty = (cy+(2*Math.floor(cy + gy)))/3;
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext >= 1) {
+ drawString(ctx, per + "%", tf, tx-(w/2), ty-(th/1.8));
+ }else {
+ strokeString(ctx, per + "%","rgba(48,48,48,1)", th, tx-(w/2), ty-(th/2));
+ }
+ }else {
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = (tx-(bw/2)) + "px";
+ obj.style.top = ty-(th/1.8) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+ }
+ }
+ }
+}
+function setBarChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9; var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05; var ph = canvas_height*0.05;
+ var cm = 0; var ct = 0;
+ for (var data in ChartData) {
+ cm = Math.max(cm,ChartData[data]);
+ ct += ChartData[data];
+ }
+ var hf = ih/cm; var bs = colorSlice.length;
+ var bw = iw/(bs*1.1); var poc = ct/100;
+ var th = roundTo((bw/3)*0.75,0);
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ var obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ var cc = ""; var bh = 0; var idx = 0; var t = 0; per = 0;
+ for (var data in ChartData) {
+ per = roundTo(ChartData[data]/poc,2);
+ bh = ChartData[data]*hf;
+ drawBar(ctx,pw+(t*(bw*1.1)),ph+ih-bh,bw,bh,colorSlice[(idx++)],per,textdiv);
+ t++;
+ }
+ }
+}
+function setLineChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9;
+ var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05;
+ var ph = canvas_height*0.05;
+ var cm = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ cm = Math.max(cm,ChartData[i][j]);
+ }
+ }
+ var hf = (ih*0.95)/cm; var bw = iw;
+ var dw = iw/(ChartData[0].length-1)
+ var dh = ih/(ChartData[0].length-1)
+ var ps = Math.min(pw,ph); lw = ps/4;
+ var B2T;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_noshadow <= 0) {
+ B2T = ctx.createLinearGradient(pw+ps,ph+ih+1,pw+ps+ps,ph+ih+1);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps,ph+ih);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.lineTo(pw+ps+ps,ph+ih);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+ps+ps,ph+ih,pw+ps+ps,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps+ps,ph+ih);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+ps+iw,ph+ih+ps);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.closePath();
+ ctx.fill();
+ var B2T = ctx.createLinearGradient(pw+iw+1,ph+ps,pw+iw+1,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.35)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps);
+ ctx.lineTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+iw,ph+ps+ps,pw+iw+ps,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.35)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+iw+ps,ph+ih+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = lw/2;
+ ctx.strokeStyle = "rgba(255,255,255,0.25)";
+ if(canvas_nofill <= 0) {
+ ctx.fillStyle = "rgba(240,240,240,0.8)";
+ ctx.strokeStyle = "rgba(255,255,255,1)";
+ ctx.fillRect(pw,ph,iw,ih);
+ }
+ for (var i = 0; i < ChartData[0].length-1; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph);
+ ctx.lineTo(pw+(i*dw),ph+ih);
+ ctx.stroke();
+ }
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw,ph+(i*dh));
+ ctx.lineTo(pw+iw,ph+(i*dh));
+ ctx.stroke();
+ }
+ ctx.lineWidth = lw;
+ var cc = ""; var bh = 0; var idx = 0; var t = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ t = Math.max(t,ChartData[i][j]);
+ }
+ bh = t*hf; cc = colorSlice[(idx++)];
+ drawLine(ctx,pw,ph+ih-bh,bw,bh,dw,ChartData[i],hf,cc,canvas_nofill);
+ }
+ ctx.beginPath();
+ ctx.moveTo(pw,ph);
+ ctx.lineTo(pw,ph+ih);
+ ctx.lineTo(pw+iw+(lw/2),ph+ih);
+ ctx.strokeStyle = "rgba(48,48,48,1)";
+ ctx.stroke();
+ ctx.lineWidth = lw/2;
+ B2T = ctx.createLinearGradient(pw,ph+ih,pw,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,1)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.strokeStyle = B2T;
+ for (var i = 0; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph+ih);
+ ctx.lineTo(pw+(i*dw),ph+ih+ps);
+ ctx.stroke();
+ }
+ B2T = ctx.createLinearGradient(pw-ps,ph,pw,ph);
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,1)');
+ ctx.strokeStyle = B2T;
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw-ps,ph+(i*dh));
+ ctx.lineTo(pw,ph+(i*dh));
+ ctx.stroke();
+ }
+ }
+}
+function generateCanvas() {
+ if(canvasSupport) {
+ var canvasID; var tdataID; var textID;
+ var tmp; var dat; var i; var j;
+ for(i=0; i < piecharts.length; i++) {
+ tmp = piecharts[i].id.split("_");
+ tdataID = piecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setPieChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < barcharts.length; i++) {
+ tmp = barcharts[i].id.split("_");
+ tdataID = barcharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setBarChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < linecharts.length; i++) {
+ tmp = linecharts[i].id.split("_");
+ tdataID = linecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID,true);
+ if(colorSlice.length > 0) {
+ if(ChartData.length == colorSlice.length) {
+ setLineChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ }
+}
+// canvas chart extension
+
+// invisible select extension
+function setListPos(opt) {
+ if(!isIE) { //(degrade IE)
+ var ref = document.getElementById('list');
+ var x = findPosX(ref); var y = findPosY(ref);
+ var obj = document.getElementById('jumplist');
+ obj.style.position = 'fixed'; obj.style.left = x + 'px'; obj.style.top = y + 'px';
+ var vol = document.getElementById('volumelist');
+ ref = document.getElementById('volume');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ vol.style.position = 'fixed'; vol.style.left = x + 'px'; vol.style.top = y + 'px';
+ var del = document.getElementById('delaylist');
+ ref = document.getElementById('delay');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ del.style.position = 'fixed'; del.style.left = x + 'px'; del.style.top = y + 'px';
+ var pnl = document.getElementById('navLinks');
+ }
+ if(opt) {
+ if(isIE) {
+ //(degrade IE)
+ //pnl.style.filter = "alpha(opacity=80)";
+ }else {
+ obj.style.opacity = 0.0;
+ vol.style.opacity = 0.0;
+ del.style.opacity = 0.0;
+ pnl.style.opacity = 0.8;
+ }
+ }
+}
+// invisible select extension
+
+// transition extension
+function switchFade() {
+ if(tranSitions && s5mode && fadeModus) {
+ fadeModus = false;
+ playDelay = playDelay-(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'isoff');
+ }else if(tranSitions && s5mode && !fadeModus) {
+ fadeModus = true;
+ playDelay = playDelay+(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ currentSlide();
+}
+function opacity(ids, opacStart, opacEnd, millisec) {
+ var speed = Math.round(millisec / 100);
+ var timer = 0;
+ if(opacStart > opacEnd) {
+ for(var i = opacStart; i >= opacEnd; i--) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ } else if(opacStart < opacEnd) {
+ for(var i = opacStart; i <= opacEnd; i++) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ }
+}
+function changeOpac(opacity, ids) {
+ var obj = document.getElementById(ids);
+ if (isIE) {
+ obj.style.filter = "alpha(opacity=" + opacity + ")";
+ } else {
+ obj.style.opacity = (opacity / 100);
+ }
+}
+function shiftOpacity(ids, millisec) {
+ if(document.getElementById(ids).style.opacity != '') {
+ var currentOpac = document.getElementById(ids).style.opacity * 100;
+ } else {
+ var currentOpac = 0;
+ }
+ if(currentOpac == 0) {
+ opacity(ids, currentOpac, 100, millisec);
+ } else if(currentOpac > 0) {
+ opacity(ids, currentOpac, 0, millisec);
+ }
+}
+// transition extension
+
+// autoplay extension
+function autoPlay() {
+ if (s5mode && autoMatic && !playPause) {
+ if ((snum >= (smax-1)) && playLoop) {
+ goTo(0);
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }else if ((snum >= (smax-1)) && !playLoop) {
+ stopPlay();
+ }else {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ if (incrementals[snum].length >0) {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = parseInt(playDelay/(incrementals[snum].length+1));
+ remainDer = parseInt(playDelay-(incrDelay*incrementals[snum].length));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ } else {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = incrDuration;
+ remainDer = parseInt(playDelay-(incrementals[snum].length*incrDuration));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }
+ }
+}
+function autoPlayIncr() {
+ if (incpos < incrementals[snum].length) {
+ subgo(1);
+ autoRun = setTimeout('autoPlayIncr();',incrDelay);
+ }else {
+ autoRun = setTimeout('nop();',remainDer);
+ }
+}
+function nop() {
+ // no operation dummy
+}
+function togglePlay() {
+ if (autoRun && s5mode) {
+ stopPlay();
+ }else if (!autoRun && s5mode) {
+ startPlay();
+ }
+}
+function stopPlay() {
+ if (autoRun && s5mode) {
+ clearTimeout(autoRun); autoRun = null;
+ autoMatic = false; playPause = false; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'isoff');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ currentSlide();
+ }
+}
+function startPlay() {
+ if (!autoRun && s5mode) {
+ playPause = false; autoMatic = true; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'ison');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ autoRun = setTimeout('autoPlay();',playDelay);
+ currentSlide();
+ }
+}
+function pausePlay() {
+ if (s5mode && autoMatic) {
+ if (playPause) {
+ playPause = false; autoRun = setTimeout('autoPlay();',playDelay);
+ var obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ }else {
+ if (autoRun){
+ clearTimeout(autoRun); autoRun = null; playPause = true;
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+ }
+}
+function switchLoop() {
+ if(s5mode) {
+ if (playLoop) {
+ playLoop = false;
+ var obj = document.getElementById('loop'); changeClass(obj,'isoff');
+ }else {
+ playLoop = true;
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+}
+function setDelay() {
+ var val = document.getElementById('delaylist');
+ if(s5mode) {
+ var delay = Math.max(5,Math.min(parseInt(val.value),300));
+ playDelay = (fadeModus == true) ? ((delay*1000)+(2*fadeDuration)) : (delay*1000);
+ }
+}
+// autoplay extension
+
+// audio extension
+function createSoundManagerScript() {
+ if(typeof soundManager=="undefined") {
+ onerrorSM2();
+ }else {
+ var script=document.createElement('SCRIPT');
+ var tx=document.createTextNode("soundManager.createMovie();");
+ script.appendChild(tx);
+ document.getElementsByTagName("body")[0].appendChild(script);
+ }
+}
+//soundManager.onload = function() {
+function onloadSM2() {
+ if(!isIE) { //(degrade IE)
+ swfUnloaded = false;
+ preloadSounds();
+ }
+}
+//soundManager.onerror = function() {
+function onerrorSM2() {
+ if(typeof soundManager!="undefined") {
+ soundManager.destruct;
+ delete soundManager;
+ }
+ audioSupport = false; swfUnloaded = true;
+ if(audioError && !isIE && !isOp) {
+ var dv = document.createElement('div'); dv.id = "guru";
+ var d2=document.createElement('div'); dv.appendChild(d2);
+ var tx=document.createTextNode('Guru Meditation - SoundManager failed to load/initialize!');
+ d2.appendChild(tx); document.getElementById('slide0').appendChild(dv);
+ }
+}
+function audioSetup() {
+ if(sound[0]) {
+ playSound(0);
+ }else if(sound[bgSoundItem] && !sound[0]) {
+ playSound(bgSoundItem);
+ }
+}
+function fadeoutSound(ids, option) {
+ if(curSoundID >= 0 && !swfUnloaded) {
+ if(isNaN(ids)) {
+ if(ids == "bgSound") {
+ var cnum = parseInt(bgSoundItem);
+ }else {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && ids == sound[i]["id"]) {
+ var cnum = i;
+ break;
+ }
+ }
+ }
+ }else {
+ var cnum = ids;
+ ids = sound[cnum]["id"];
+ }
+ var vol = getMaxVolume(sound[cnum]["volume"]);
+ var millisec = fadeDuration;
+ var speed = Math.round(millisec / vol);
+ var timer = 0;
+ for(var i = vol; i > 0; i--) {
+ setTimeout("fadeout(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ if(option) setTimeout("stopSound('"+ids+"')",millisec);
+ }
+}
+function fadeout(volume, id) {
+ soundManager.setVolume(id,volume);
+}
+function stopSound(ids) {
+ var sid;
+ if(isNaN(ids)) {
+ sid = ids;
+ }else if(sound[ids]) {
+ sid = sound[ids]["id"];
+ }
+ if(sid!='' && curSoundID >= 0) {
+ soundManager.stop(sid);
+ curSoundID = -1;
+ }
+}
+function toggleSounds() {
+ if(audioSupport && !swfUnloaded) {
+ stopAllSounds();
+ }else if (!audioSupport && !swfUnloaded) {
+ allowSounds();
+ }
+}
+function allowSounds() {
+ if(!swfUnloaded) {
+ audioSupport = true;
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ currentSlide();
+ }
+}
+function stopAllSounds() {
+ if(curSoundID >= 0) {
+ stopSound(curSoundID);
+ }else {
+ soundManager.stopAll();
+ curSoundID = -1;
+ }
+ audioSupport = false;
+ var obj = document.getElementById('audio'); changeClass(obj,'isoff');
+ currentSlide();
+}
+function playSound(id) {
+ if(audioSupport && !swfUnloaded) {
+ var url, sid, vol, lps, cnum;
+ if(isNaN(id)) {
+ sid = id;
+ if(sid == "bgSound") {
+ cnum = parseInt(bgSoundItem);
+ }else {
+ cnum = getSoundID(id);
+ }
+ }else {
+ cnum = parseInt(id);
+ if(sound[cnum]) sid = sound[cnum]["id"];
+ }
+ if(sound[cnum] && sound[cnum]["url"]!='' && sid!=''){
+ url = sound[cnum]["url"];
+ vol = (sound[cnum]["volume"]!='')?getMaxVolume(sound[cnum]["volume"]):getMaxVolume(100);
+ lps = (sound[cnum]["loops"])?true:false;
+ if(lps) {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){soundManager.play(sid,{volume:getMaxVolume(sound[cnum]["volume"])});}});
+ }else {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){curSoundID=-1;}});
+ }
+ }
+ }
+}
+function getSoundID(str) {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && str == sound[i]["id"]) {
+ var id = i;
+ break;
+ }
+ }
+ return id;
+}
+function setVolume() {
+ var vol = document.getElementById('volumelist');
+ if(audioSupport && !swfUnloaded) {
+ audioVolume = parseInt(vol.value);
+ if(curSoundID >= 0) {
+ if(sound[curSoundID]) {
+ var sid = sound[curSoundID]["id"];
+ var vid = getMaxVolume(sound[curSoundID]["volume"]);
+ soundManager.setVolume(sid,vid);
+ }
+ }
+ }
+}
+function getMaxVolume(value) {
+ if(audioVolume>0) {var factor = audioVolume/100;}else {var factor = 0;}
+ return Math.max(0,Math.min(parseInt(value*factor),audioVolume));
+}
+function preloadSounds() {
+ var temp = ''; var parm = ''; var t = ''; var cl = '';
+ var objects = document.getElementsByTagName('object');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].type.toLowerCase() == 'audio/mp3' && objects[i].data != '') {
+ objects[i].width = 0; objects[i].height = 0;
+ if(objects[i].parentNode.tagName == 'DIV') {
+ cl = objects[i].parentNode.className.toLowerCase();
+ if(cl == 'presentation' || cl == 'slide') {
+ if(cl == 'presentation') {
+ t = parseInt(bgSoundItem);
+ }else {
+ t = parseInt(objects[i].parentNode.id.slice(5, objects[i].parentNode.id.length));
+ }
+ sound[t] = new Object();
+ if(t < bgSoundItem) {
+ sound[t]["id"] = objects[i].parentNode.id;
+ }else {
+ sound[t]["id"] = "bgSound";
+ }
+ sound[t]["url"] = objects[i].data;
+ sound[t]["volume"] = 100; sound[t]["loops"] = false;
+ if(objects[i].archive != '') {
+ parm = objects[i].archive.toLowerCase().split(',');
+ for (var j=0; j < parm.length; j++) {
+ if(parm[j] == 'loop') sound[t]["loops"] = true;
+ if(parm[j].search(/^volume/) != -1) {
+ var tmp = parm[j].split(':');
+ sound[t]["volume"] = parseInt(tmp[1]);
+ }
+ }
+ }
+ soundManager.createSound(sound[t]["id"],sound[t]["url"]);
+ }
+ }
+ }
+ }
+}
+// audio extension
+
+// help extension
+function createHelpReq() {
+ if(!document.getElementById("HelpReq")) {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "HelpReq";
+ if (pg.addEventListener) {
+ pg.addEventListener("onclick",dumpHelpReq,false);
+ } else if (pg.attachEvent) {
+ pg.attachEvent("onclick",dumpHelpReq);
+ }
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=90)";
+ } else {
+ pg.style.opacity = 0.9;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(64,64,64)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/help.jpg)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+ if(document.getElementById("HelpReq")) {
+ helpmode = true;
+ }
+ }
+}
+function dumpHelpReq() {
+ if(document.getElementById("HelpReq")) {
+ document.body.removeChild(document.getElementById('HelpReq'));
+ helpmode = false;
+ }
+}
+// help extension
+
+//DEBUG
+function ConsoleLog(value) {
+ if(window.console) {
+ window.console.log(value);
+ }
+}
+//DEBUG
+
+document.write('<style type="text/css" media="screen" id="blockStyle">.presentation, .layout {display: none; }</style>');
+
+if(!isIE && !isOp) {
+ document.write('<script type="text/javascript" src="'+s5Path+'ui/audio_support/soundmanager2.js"></script>');
+ if(typeof soundManager!="undefined") {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'audioDebug') {
+ var audioDebug = (allMetas[i].content == "true") ? true : false;
+ soundManager.defaultOptions.debugMode = audioDebug;
+ }
+ }
+ }
+}
+
+window.onload = createSlideShow;
+window.onresize = function(){setTimeout('windowChange()',5);} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/toggle_link.png
new file mode 100644
index 000000000..4588e2514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/toggle_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/toggle_over.png
new file mode 100644
index 000000000..400f613b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/toggle_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/triangle.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/triangle.png
new file mode 100644
index 000000000..79a243385
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/triangle.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/volume_link.png
new file mode 100644
index 000000000..f362acd1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/volume_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/wrap.css
new file mode 100644
index 000000000..a37315552
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/wrap.css
@@ -0,0 +1,410 @@
+/********************************************************************
+Screen and Print Styles for the Wrap Plugin
+********************************************************************/
+
+/* tables in columns and boxes should span the whole width */
+.wrap_column table,
+.wrap_left table, .wrap_right table, .wrap_center table,
+.wrap_box table,
+.wrap_info table, .wrap_important table, .wrap_alert table, .wrap_tip table, .wrap_help table, .wrap_todo table, .wrap_download table {
+ width: 100%;
+}
+/* emulate a headline */
+.wrap_column em strong,
+.wrap_left em strong, .wrap_right em strong, .wrap_center em strong,
+.wrap_box em strong,
+.wrap_info em strong, .wrap_important em strong, .wrap_alert em strong, .wrap_tip em strong, .wrap_help em strong, .wrap_todo em strong, .wrap_download em strong {
+ font-size: 130%;
+ font-weight: bold;
+ font-style: normal;
+ display: block;
+}
+/* emulate a bigger headline with a bottom border */
+.wrap_column em strong em.u,
+.wrap_left em strong em.u, .wrap_right em strong em.u, .wrap_center em strong em.u,
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ font-size: 115%;
+ border-bottom: 1px solid __border__;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+}
+/* different bigger headline for safety notes */
+.wrap_danger em strong em.u, .wrap_warning em strong em.u, .wrap_caution em strong em.u, .wrap_notice em strong em.u, .wrap_safety em strong em.u {
+ font-size: 115%;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+ text-transform: uppercase;
+ border-bottom-width: 0;
+}
+/* change border colour of emulated headlines inside boxes to something more neutral
+ (to match all the different background colours) */
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ border-bottom-color: #999;
+}
+
+
+/* columns
+********************************************************************/
+
+.wrap_left,
+.wrap_column {
+ float: left;
+ margin-right: 1.5em;
+}
+.wrap_right {
+ float: right;
+ margin-left: 1.5em;
+}
+.wrap_center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+/*
+.wrap_column,
+.wrap_left,
+.wrap_right {
+ overflow: hidden;
+}
+*/
+.wrap_container {
+ margin-right: -1.5em;
+}
+
+
+/* alignments
+********************************************************************/
+
+.wrap_leftalign {
+ text-align: left;
+}
+.wrap_centeralign {
+ text-align: center;
+}
+.wrap_rightalign {
+ text-align: right;
+}
+.wrap_justify {
+ text-align: justify;
+}
+
+
+/* box
+********************************************************************/
+
+/* see styles for boxes and notes with icons in style.css */
+
+/*____________ rounded corners ____________*/
+/* (only for modern browsers) */
+
+div.wrap_round {
+ border-radius: 20px;
+ -moz-border-radius: 20px;
+ -webkit-border-radius: 20px;
+ -khtml-border-radius: 20px;
+}
+span.wrap_round {
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -khtml-border-radius: 2px;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_lo {
+ color: __text_neu__;
+ font-size: 85%;
+}
+div.wrap_em {
+ color: #c00;
+ font-weight: bold;
+}
+
+/* see styles for highlighted text in style.css */
+
+
+/* typography
+********************************************************************/
+
+/*____________ fonts ____________*/
+
+div.wrap_sansserif {
+ font-family: Verdana,Tahoma,Geneva,"DejaVu Sans","Bitstream Vera Sans","Liberation Sans", Arial,Helvetica,FreeSans,"Liberation Sans","Nimbus Sans L", sans-serif;
+}
+div.wrap_serif {
+ font-family: Georgia,Garamond,"Palatino Linotype","Book Antiqua",Palatino,Palladio,"URW Palladio L","Liberation Serif",Didot,Gentium,"Bitstream Charter","Century Schoolbook L", "Times New Roman",Times,"Nimbus Roman No9 L","FreeSerif", serif;
+}
+div.wrap_monospace {
+ font-family: Courier,"Courier New",FreeMono,"Nimbus Mono L","Liberation Mono", "Lucida Console",Monaco,"DejaVu Sans Mono","Bitstream Vera Sans Mono", monospace;
+}
+
+/*____________ font size ____________*/
+
+div.wrap_bigger {
+ font-size: 125%;
+}
+div.wrap_muchbigger {
+ font-size: 200%;
+}
+div.wrap_smaller {
+ font-size: 75%;
+}
+
+/*____________ font colours ____________*/
+
+div.wrap_fgred {
+ color: #900;
+}
+div.wrap_fggreen {
+ color: #090;
+}
+div.wrap_fgblue {
+ color: #009;
+}
+div.wrap_fgcyan {
+ color: #099;
+}
+div.wrap_fgviolet {
+ color: #909;
+}
+div.wrap_fgyellow {
+ color: #990;
+}
+div.wrap_fggrey {
+ color: #666;
+}
+div.wrap_fgblack {
+ color: #000;
+}
+
+/* see styles for background colours and white font colour in style.css */
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ indent ____________*/
+
+div.wrap_indent {
+ padding-left: 1.5em;
+}
+
+/*____________ outdent ____________*/
+
+div.wrap_outdent {
+ margin-left: -1.5em;
+}
+
+/*____________ word wrapping in pre ____________*/
+
+divdiv.wrap_prewrap pre {
+ white-space: pre-wrap;
+ word-wrap: break-word;/* for IE < 8 */
+ /* white-space: -moz-pre-wrap; for FF < 3 */
+}
+
+/*____________ spoiler ____________*/
+
+divdiv.wrap_spoiler {
+ margin-bottom: 1.5em;
+}
+/* see rest of spoiler styles in style.css */
+
+/*____________ clear float ____________*/
+
+div.wrap_clear {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ font-size: 1px;
+ visibility: hidden;
+ overflow: hidden;
+}
+
+/*____________ hide ____________*/
+
+div.wrap_hide {
+ display: none;
+}
+
+
+/* STYLE.CSS */
+
+/* box
+********************************************************************/
+
+.wrap_box {
+ background: __background_alt__;
+ color: __text__;
+/*
+ overflow: hidden;
+*/
+}
+div.wrap_box,
+div.wrap_danger, div.wrap_warning, div.wrap_caution, div.wrap_notice, div.wrap_safety {
+ padding: 1em 1em .5em;
+ margin-bottom: 1.5em;
+}
+span.wrap_box,
+span.wrap_danger, span.wrap_warning, span.wrap_caution, span.wrap_notice, span.wrap_safety {
+ padding: 0 .3em;
+}
+
+/*____________ notes with icons ____________*/
+
+/* general styles for all note divs */
+div.wrap_info, div.wrap_important, div.wrap_alert, div.wrap_tip, div.wrap_help, div.wrap_todo, div.wrap_download {
+ padding: 1em 1em .5em 70px;
+ margin-bottom: 1.5em;
+ min-height: 68px;
+ background-position: 10px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html div.wrap_info, * html div.wrap_important, * html div.wrap_alert, * html div.wrap_tip, * html div.wrap_help, * html div.wrap_todo, * html div.wrap_download {
+ height: 68px;
+}
+/* general styles for all note spans */
+span.wrap_info, span.wrap_important, span.wrap_alert, span.wrap_tip, span.wrap_help, span.wrap_todo, span.wrap_download {
+ padding: 0 2px 0 20px;
+ min-height: 20px;
+ background-position: 2px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html span.wrap_info, * html span.wrap_important, * html span.wrap_alert, * html span.wrap_tip, * html span.wrap_help, * html span.wrap_todo, * html span.wrap_download {
+ height: 20px;
+}
+
+/*____________ info ____________*/
+.wrap_info { background-color: #d1d7df; }
+div.wrap_info { background-image: url(../../../wrap/images/note/48/info.png); }
+span.wrap_info { background-image: url(../../../wrap/images/note/16/info.png); }
+
+/*____________ important ____________*/
+.wrap_important { background-color: #ffd39f; }
+div.wrap_important { background-image: url(../../../wrap/images/note/48/important.png); }
+span.wrap_important { background-image: url(../../../wrap/images/note/16/important.png); }
+
+/*____________ alert ____________*/
+.wrap_alert { background-color: #ffbcaf; }
+div.wrap_alert { background-image: url(../../../wrap/images/note/48/alert.png); }
+span.wrap_alert { background-image: url(../../../wrap/images/note/16/alert.png); }
+
+/*____________ tip ____________*/
+.wrap_tip { background-color: #fff79f; }
+div.wrap_tip { background-image: url(../../../wrap/images/note/48/tip.png); }
+span.wrap_tip { background-image: url(../../../wrap/images/note/16/tip.png); }
+
+/*____________ help ____________*/
+.wrap_help { background-color: #dcc2ef; }
+div.wrap_help { background-image: url(../../../wrap/images/note/48/help.png); }
+span.wrap_help { background-image: url(../../../wrap/images/note/16/help.png); }
+
+/*____________ todo ____________*/
+.wrap_todo { background-color: #c2efdd; }
+div.wrap_todo { background-image: url(../../../wrap/images/note/48/todo.png); }
+span.wrap_todo { background-image: url(../../../wrap/images/note/16/todo.png); }
+
+/*____________ download ____________*/
+.wrap_download { background-color: #d6efc2; }
+div.wrap_download { background-image: url(../../../wrap/images/note/48/download.png); }
+span.wrap_download { background-image: url(../../../wrap/images/note/16/download.png); }
+
+
+/*____________ safety notes ____________*/
+
+.wrap_danger {
+ background-color: #c00;
+ color: #fff;
+}
+.wrap_warning {
+ background-color: #f60;
+ color: #000;
+}
+.wrap_caution {
+ background-color: #ff0;
+ color: #000;
+}
+.wrap_notice {
+ background-color: #06f;
+ color: #fff;
+}
+.wrap_safety {
+ background-color: #090;
+ color: #fff;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_hi {
+ background-color: #ff9;
+}
+
+/* typography
+********************************************************************/
+
+/*____________ font colours ____________*/
+
+div.wrap_fgwhite {
+ color: #fff;
+}
+
+/*____________ background colours ____________*/
+
+div.wrap_bgred {
+ background-color: #fcc;
+}
+div.wrap_bggreen {
+ background-color: #cfc;
+}
+div.wrap_bgblue {
+ background-color: #ccf;
+}
+div.wrap_bgcyan {
+ background-color: #9ff;
+}
+div.wrap_bgviolet {
+ background-color: #f9f;
+}
+div.wrap_bgyellow {
+ background-color: #ff9;
+}
+div.wrap_bggrey {
+ background-color: #ccc;
+}
+div.wrap_bgwhite {
+ background-color: #fff;
+}
+div.wrap_bgblack {
+ background-color: #000;
+}
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ spoiler ____________*/
+
+div.wrap_spoiler {
+ background-color: __background__ !important;
+ color: __background__ !important;
+ border: 1px dotted red;
+}
+
+/*____________ only print ____________*/
+
+div.wrap_onlyprint {
+ display: none;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/zero_link.png
new file mode 100644
index 000000000..5610884d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/zero_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/zero_over.png
new file mode 100644
index 000000000..3a14a577e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/zero_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/audio_link.png
new file mode 100644
index 000000000..daa740c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/audio_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/audio_on.png
new file mode 100644
index 000000000..cd590aae9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/audio_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/audio_over.png
new file mode 100644
index 000000000..cf537a008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/audio_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/auto_link.png
new file mode 100644
index 000000000..1c2ca4817
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/auto_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/auto_on.png
new file mode 100644
index 000000000..4b0c923b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/auto_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/auto_over.png
new file mode 100644
index 000000000..dbea88975
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/auto_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/backgrnd.png
new file mode 100644
index 000000000..e28d6f102
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/backgrnd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/bank.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/bank.png
new file mode 100644
index 000000000..063973f7f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/bank.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/blank.gif
new file mode 100755
index 000000000..75b945d25
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/blank.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/delay_link.png
new file mode 100644
index 000000000..c4d99cd57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/delay_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/exit_link.png
new file mode 100644
index 000000000..1bfd38790
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/exit_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/exit_over.png
new file mode 100644
index 000000000..0fdd1c605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/exit_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/fade_link.png
new file mode 100644
index 000000000..482e4d53e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/fade_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/fade_on.png
new file mode 100644
index 000000000..e12561fb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/fade_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/fade_over.png
new file mode 100644
index 000000000..fb8943c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/fade_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/footer.jpg
new file mode 100644
index 000000000..49370dbba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/footer.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/footer.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/footer.png
new file mode 100644
index 000000000..4f3ba14c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/footer.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/framing.css
new file mode 100644
index 000000000..5f0f5daa4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/framing.css
@@ -0,0 +1,22 @@
+/* The following styles size, place, and layer the slide components.
+ Edit these if you want to change the overall slide layout.
+ The commented lines can be uncommented (and modified, if necessary)
+ to help you with the rearrangement process. */
+
+/* target = 1024x768 */
+
+div#header, div#footer, .slide {width: 100%; top: 0; left: 0;}
+div#header {top: 0; height: 3em; z-index: 1;}
+div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;}
+.slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;}
+div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;}
+div#controls form {text-align: right; width: 100%; margin: 0;}
+#currentSlide {position: absolute; width: 14%; left: 43%; bottom: 1em; z-index: 10;}
+html>body #currentSlide {position: fixed;}
+
+/*
+div#header {background: #FCC;}
+div#footer {background: #CCF;}
+div#controls {background: #BBD;}
+div#currentSlide {background: #FFC;}
+*/
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/header.png
new file mode 100644
index 000000000..929dabba1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/iepngfix.htc
new file mode 100755
index 000000000..bba2db756
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/iepngfix.htc
@@ -0,0 +1,42 @@
+<public:component>
+<public:attach event="onpropertychange" onevent="doFix()" />
+
+<script>
+
+// IE5.5+ PNG Alpha Fix v1.0 by Angus Turnbull http://www.twinhelix.com
+// Free usage permitted as long as this notice remains intact.
+
+// This must be a path to a blank image. That's all the configuration you need here.
+var blankImg = 'ui/default/blank.gif';
+
+var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
+
+function filt(s, m) {
+ if (filters[f]) {
+ filters[f].enabled = s ? true : false;
+ if (s) with (filters[f]) { src = s; sizingMethod = m }
+ } else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")';
+}
+
+function doFix() {
+ if ((parseFloat(navigator.userAgent.match(/MSIE (\S+)/)[1]) < 5.5) ||
+ (event && !/(background|src)/.test(event.propertyName))) return;
+
+ if (tagName == 'IMG') {
+ if ((/\.png$/i).test(src)) {
+ filt(src, 'image'); // was 'scale'
+ src = blankImg;
+ } else if (src.indexOf(blankImg) < 0) filt();
+ } else if (style.backgroundImage) {
+ if (style.backgroundImage.match(/^url[("']+(.*\.png)[)"']+$/i)) {
+ var s = RegExp.$1;
+ style.backgroundImage = '';
+ filt(s, 'crop');
+ } else filt();
+ }
+}
+
+doFix();
+
+</script>
+</public:component> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/index.html
new file mode 100755
index 000000000..39d8f46ad
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/index.html
@@ -0,0 +1,100 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es-es" >
+
+
+<head>
+
+ <title>[Título de la presentación aquí]</title>
+ <!-- metadata -->
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta http-equiv="content-language" content="es" />
+
+ <!--titulo y datos de publicación de la presentación-->
+
+ <meta name="description" content="[Título de la presentación aquí]" />
+
+ <meta name="keywords" content="[keywords aquí]" />
+ <meta name="presdate" content="[Aquí la fecha de publicación en formato aaaammdd]" />
+
+ <meta name="author" lang="es" content="[Nombre del autor de la presentación aquí]" />
+ <meta name="company" content="[Organización del autor de la presentación aquí]" />
+
+ <link rel="shortcut icon" href="ui/default/pics/favicon.ico" />
+
+ <meta name="generator" content="S5" />
+ <meta name="progid" content="quanta+" />
+ <meta name="version" content="S5 · jEsuSdA · 1.1" />
+ <!--Versión adaptada del estandard S5 1.1 por jEsuSdA-->
+
+ <meta name="robots" content="all" />
+
+ <!-- configuration parameters -->
+ <meta name="defaultView" content="slideshow" />
+ <meta name="controlVis" content="hidden" />
+
+ <!-- style sheet links -->
+ <link rel="stylesheet" href="ui/default/slides.css" type="text/css" media="projection" id="slideProj" />
+ <link rel="stylesheet" href="ui/default/outline.css" type="text/css" media="screen" id="outlineStyle" />
+ <link rel="stylesheet" href="ui/default/print.css" type="text/css" media="print" id="slidePrint" />
+ <link rel="stylesheet" href="ui/default/opera.css" type="text/css" media="projection" id="operaFix" />
+
+ <!-- S5 JS -->
+ <script src="ui/default/slides.js" type="text/javascript"></script>
+
+</head>
+
+<body>
+
+ <div class="layout">
+ <div id="controls"><!-- NO EDITAR --></div>
+ <div id="currentSlide"><!-- NO EDITAR --></div>
+
+ <div id="header">
+ <div id="logo"><!-- NO EDITAR --></div>
+ </div>
+
+ </div>
+
+ <div id="footer">
+ <h1>[Lugar/Fecha de la presentación aquí]</h1>
+ <h2>[Título de la presentación aquí]</h2>
+ </div>
+
+
+
+
+<div class="presentation">
+
+ <div class="slide">
+ <h1>[Título de la presentación aquí]</h1>
+ <h3>[Nombre del ponente aquí]</h3>
+ <h4>[Datos extra aquí]</h4>
+ </div>
+
+
+ <div class="slide">
+ <h1>[Título de la diapositiva]</h1>
+
+ <ul>
+ <li>[Punto uno]</li>
+ <li>[Punto dos]</li>
+ <li>[Punto tres]</li>
+ <li>[Punto cuatro]</li>
+ <li>[Punto cinco]</li>
+ </ul>
+
+ <div class="handout">
+
+ [Añade aquí cualquier nota o información que desees mostrar en la versión impresa, pero no en la versión en pantalla]
+
+ </div>
+
+ </div>
+ <!--fin slide-->
+
+</div>
+
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/last_link.png
new file mode 100644
index 000000000..4f158d35d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/last_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/last_over.png
new file mode 100644
index 000000000..a7b629995
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/last_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/list_link.png
new file mode 100644
index 000000000..7e299bb50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/list_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/loop_link.png
new file mode 100644
index 000000000..41e12cb15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/loop_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/loop_on.png
new file mode 100644
index 000000000..2ffcacae1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/loop_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/loop_over.png
new file mode 100644
index 000000000..9fe420153
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/loop_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/next_link.png
new file mode 100644
index 000000000..2b9f44c4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/next_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/next_over.png
new file mode 100644
index 000000000..25788124d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/next_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/notes_link.png
new file mode 100644
index 000000000..bb4a8ae37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/notes_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/notes_over.png
new file mode 100644
index 000000000..c6bfe69fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/notes_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/opera.css
new file mode 100644
index 000000000..9e9d2a3c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/opera.css
@@ -0,0 +1,7 @@
+/* DO NOT CHANGE THESE unless you really want to break Opera Show */
+.slide {
+ visibility: visible !important;
+ position: static !important;
+ page-break-before: always;
+}
+#slide0 {page-break-before: avoid;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/outline.css
new file mode 100644
index 000000000..c04f5006a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/outline.css
@@ -0,0 +1,14 @@
+/* don't change this unless you want the layout stuff to show up in the outline view! */
+
+.hide, .layout div, #footer *, #controlForm * {display: none;}
+#footer, #controls, #controlForm, #navLinks, #sheet {display: block; visibility: visible; margin: 0; padding: 0;}
+#sheet {float: right; padding: 0.5em;}
+html>body #sheet {position: fixed; top: 0; right: 0;}
+
+
+/* making the outline look pretty-ish */
+
+#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
+#slide0 h1 {padding-top: 1.5em;}
+.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em; border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
+#sheet {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pattern.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pattern.png
new file mode 100644
index 000000000..6258f024b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pattern.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pause_link.png
new file mode 100644
index 000000000..2561cb4a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pause_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pause_on.png
new file mode 100644
index 000000000..2fc9c4a4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pause_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pause_over.png
new file mode 100644
index 000000000..7a7c80ddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pause_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pretty.css
new file mode 100755
index 000000000..866b03735
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pretty.css
@@ -0,0 +1,163 @@
+/* Following are the presentation styles -- edit away! */
+/* S5 1.3beta7 (29-Mar-2007) advanced version by C. Effenberger */
+
+body {background: #FFF url(backgrnd.png) repeat-x fixed; color: #333; font-family: Georgia, "Times New Roman", Times, serif; font-size: 2.25em;}
+a:link, a:visited {text-decoration: none; color: #F93; text-shadow: 0.1em 0.1em 0.1em #000;}
+a:focus, a:hover {color: #f33 !important;}
+
+h1, h2, h3, h4 {font-size: 100%; margin: 0; padding: 0; font-weight: inherit;}
+h1 {text-shadow: 0.1em 0.1em 0.1em #333; background-color: transparent;}
+
+ul, pre {margin: 0; line-height: 1em;}
+html, body {margin: 0; padding: 0;}
+
+blockquote, q {font-style: italic;}
+blockquote {padding: 0 2em 0.5em; margin: 0 1.5em 0.5em; text-align: center; font-size: 1em;}
+blockquote p {margin: 0;}
+blockquote i {font-style: normal;}
+blockquote b {display: block; margin-top: 0.5em; font-weight: normal; font-size: smaller; font-style: normal;}
+blockquote b i {font-style: italic;}
+
+img {border: 0; }
+kbd {font-weight: bold; font-size: 1em;}
+sup {font-size: smaller; line-height: 1px;}
+
+.slide code {padding: 2px 0.25em; font-weight: bold; color: green;}
+.slide code.bad, code del {color: red;}
+.slide code.old {color: silver;}
+.slide pre {padding: 0; margin: 0.25em 0 0.5em 0.5em; color: green; font-size: 90%;}
+.slide pre code {display: block;}
+.slide ul {margin-left: 5%; margin-right: 7%; list-style: disc;}
+.slide li {margin-top: 0.75em; margin-right: 0;}
+.slide ul ul {line-height: 1;}
+.slide ul ul li {margin: .2em; font-size: 85%; list-style: square;}
+.slide img.leader {display: block; margin: 0 auto;}
+
+div#header, div#footer {background: transparent; color: #AAA; font-family: Verdana, Arial, Helvetica, sans-serif;}
+div#header {line-height: 1px;}
+div#footer {background: transparent url(footer.png) top; color: #fff; font-size: 0.5em; font-weight: bold; padding: 1em 0;}
+#footer h1, #footer h2 {display: block; padding: 0; position:absolute; bottom:0.5em;}
+#footer h1 {left:1em; text-shadow: 0.2em 0.2em #000;}
+#footer h2 {right:1em; text-shadow: 0.2em 0.2em #000; font-style: italic;}
+
+div#logo
+{
+ position:absolute;
+ top:0%;
+ left:0%;
+ background:url(sun.png) 50% 50% no-repeat;
+ height:256px;
+ width:256px;
+}
+div#logo_bottom
+{
+ position:absolute;
+ bottom:50%;
+ right:0%;
+ background:url(bank.png) 50% 50% no-repeat;
+ height:205px;
+ width:138px;
+}
+
+div.long {font-size: 0.75em;}
+.slide h1 {position: absolute; top: 0.9em; left: 1.25em; z-index: 1; margin: 0; padding: 0.35em 0 0 50px; white-space: nowrap; font: bold 150%/1em Verdana, Arial, Helvetica, sans-serif; text-transform: capitalize; color: #DDD; background-color: transparent;}
+.slide h3 {font-size: 130%;}
+h1 abbr {font-variant: small-caps;}
+
+div#controls {position: absolute; left: 0; bottom: 0; width: 100%; text-align: center; font: bold 1em Verdana, Arial, Helvetica, sans-serif;}
+html>body div#controls {background: transparent; position: fixed; padding: 0; top: auto; text-align: center;}
+#controls #sheet {display: none;}
+#controls #controlForm {height: 32px; width: 100%; text-align: center; vertical-align: middle;}
+#controls #navLinks {border-top: 1px solid #999; overflow: hidden; padding: 0; margin: 0; height: 32px; width: 100%; background-color: #808080; text-align: center; vertical-align: middle; white-space: nowrap;}
+#controls #navLinks ul {margin: 0 auto; padding: 0; height: 32px; width: 500px; white-space: nowrap; text-align: center;}
+#controls #navLinks ul li {list-style: none; display: inline; margin: 0; padding: 0; float: left; height: 32px; width: 32px; text-align: center; background-color: transparent;}
+#controls #navLinks ul li.vr {list-style: none; display: inline; margin: 0px 2px; padding: 0; float: left; height: 32px; width: 1px; text-align: center; background-color: #606060;}
+#controls #navLinks ul li a {margin: 0; padding: 0; float: left; height: 32px; width: 32px; background-color: transparent;}
+
+#controls #navLinks ul li#exit {background: url(exit_link.png) no-repeat top left;}
+#controls #navLinks ul li#exit a:hover {background: url(exit_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#toggle {background: url(toggle_link.png) no-repeat top left;}
+#controls #navLinks ul li#toggle a:hover {background: url(toggle_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#show-notes {background: url(notes_link.png) no-repeat top left;}
+#controls #navLinks ul li#show-notes a:hover {background: url(notes_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#zero {background: url(zero_link.png) no-repeat top left;}
+#controls #navLinks ul li#zero a:hover {background: url(zero_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#prev {background: url(prev_link.png) no-repeat top left;}
+#controls #navLinks ul li#prev a:hover {background: url(prev_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#next {background: url(next_link.png) no-repeat top left;}
+#controls #navLinks ul li#next a:hover {background: url(next_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#last {background: url(last_link.png) no-repeat top left;}
+#controls #navLinks ul li#last a:hover {background: url(last_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#lst {background: url(list_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#fade a.isoff {background: url(fade_link.png) no-repeat top left;}
+#controls #navLinks ul li#fade a.ison {background: url(fade_on.png) no-repeat top right;}
+#controls #navLinks ul li#fade a:hover {background: url(fade_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#audio {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.isoff {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.ison {background: url(audio_on.png) no-repeat top right;}
+#controls #navLinks ul li#audio a:hover {background: url(audio_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#vol {background: url(volume_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#auto a.isoff {background: url(auto_link.png) no-repeat top left;}
+#controls #navLinks ul li#auto a.ison {background: url(auto_on.png) no-repeat top right;}
+#controls #navLinks ul li#auto a:hover {background: url(auto_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#pause a.isoff {background: url(pause_link.png) no-repeat top left;}
+#controls #navLinks ul li#pause a.ison {background: url(pause_on.png) no-repeat top right;}
+#controls #navLinks ul li#pause a:hover {background: url(pause_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#loop a.isoff {background: url(loop_link.png) no-repeat top left;}
+#controls #navLinks ul li#loop a.ison {background: url(loop_on.png) no-repeat top right;}
+#controls #navLinks ul li#loop a:hover {background: url(loop_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#del {background: url(delay_link.png) no-repeat top left;}
+
+#jumplist, #volumelist, #delaylist {padding: 0; margin: 0; width: 32px; height: 32px; cursor: n-resize;}
+
+#currentSlide {white-space: nowrap; text-align: center; margin-bottom: -0.5em; font-size: 0.5em; background-color: #7BB81B; color: #fff;}
+
+#guru {position: absolute; visibility: visible; left: 0px; top: 0px; padding: 4px; width: 99%; height: auto; text-align: center; background-color: black; z-index: 10;}
+#guru div {border: solid 3px red; padding: 4px; font-family: monospace; font-size: 60%; width: auto; height: auto; color: red; text-align: center;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 0; padding: 0; font: bold 3em Verdana, Arial, Helvetica, sans-serif; font-variant: small-caps; text-shadow: 0.1em 0.1em 0.1em #666; white-space: normal; color: #222; background-color: transparent;}
+#slide0 h2 {font: bold italic 1em Arial, Helvetica, sans-serif; margin: 0.25em;}
+#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.note {display: none;}
+.external {border-bottom: 1px dotted gray;}
+html>body .external {border-bottom: none;}
+.external:after {content: " \274F"; font-size: smaller; color: #F93;}
+
+.incremental, .incremental *, .incremental *:after {color: #39f; visibility: visible;}
+img.incremental, canvas.incremental {visibility: hidden;}
+.slide .current {color: #B02;}
+
+/* diagnostics
+li:after {content: " [" attr(class) "]"; color: #F88;}
+*/
+
+table.piechart, table.barchart, table.linechart { border-spacing: 0.3em 0.15em; }
+table.piechart tr th, table.barchart tr th, table.linechart tr th { white-space: nowrap; }
+table.piechart tr td, table.barchart tr td, table.linechart tr td { vertical-align: top; white-space: nowrap; }
+table.piechart tr td.col, table.barchart tr td.col, table.linechart tr td.col { border-bottom: 1px solid #555; border-right: 1px solid #555; }
+table.fs90 tr td, table.fs90 tr th, div.fs90, pre.fs90, p.fs90 ,ul.fs90 {font-size: 0.9em; }
+table.fs75 tr td, table.fs75 tr th, div.fs75, pre.fs75, p.fs75 ,ul.fs75 {font-size: 0.75em; }
+table.fs66 tr td, table.fs66 tr th, div.fs66, pre.fs66, p.fs66 ,ul.fs66 {font-size: 0.66em; }
+table.fs50 tr td, table.fs50 tr th, div.fs50, pre.fs50, p.fs50 ,ul.fs50 {font-size: 0.5em; }
+
+#soundmanager-debug {position:fixed; top:0px; right:0px; width:30em; height:20em; overflow:auto; border:1px solid red; padding:1em; margin:2em; font-family:"sans serif"; font-size: 12px;color: black; background-color:#f6f6f6; z-index: 100;}
+#soundmanager-debug code {font-size: 11px;} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/prev_link.png
new file mode 100644
index 000000000..c31d21350
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/prev_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/prev_over.png
new file mode 100644
index 000000000..6fef4fa52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/prev_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/print.css
new file mode 100644
index 000000000..5affe5da6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/print.css
@@ -0,0 +1,3 @@
+/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul, p {page-break-inside: avoid; visibility: visible !important;} h1 {page-break-after: avoid;}
+img {page-break-inside: avoid; page-break-after: avoid;}
+/*.slide {page-break-after: always;}*/ body {font-size: 12pt; background: white;} * {color: black;} #slide0 h1 {font-size: 200%; border: none; margin: 0.5em 0 0.25em;} #slide0 h3 {margin: 0; padding: 0;} #slide0 h4 {margin: 0 0 0.5em; padding: 0;} #slide0 {margin-bottom: 3em;} h1 {border-top: 2pt solid gray; border-bottom: 1px dotted silver;} .extra {background: transparent !important;} div.extra, pre.extra, .example {font-size: 10pt; color: #333;} ul.extra a {font-weight: bold;} p.example {display: none;} #header {display: none;} #footer h1 {margin: 0; border-bottom: 1px solid; color: gray; font-style: italic;} #footer h2, #controls {display: none;} /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .hide, .layout, .layout * {display: none !important;} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/s5-core.css
new file mode 100644
index 000000000..8ed9c1e20
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/s5-core.css
@@ -0,0 +1,8 @@
+/* Do not edit or override these styles! The system will likely break if you do. */
+
+div#header, div#footer, div#controls, .slide {position: absolute;}
+html>body div#header, html>body div#footer, html>body div#controls, html>body .slide {position: fixed;}
+.handout, .notes, .hide {display: none;}
+.layout {display: block;}
+.slide, .hideme, .incremental {visibility: hidden;}
+#slide0 {visibility: visible;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/slides.css
new file mode 100644
index 000000000..0786d7dbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/slides.css
@@ -0,0 +1,3 @@
+@import url(s5-core.css); /* required to make the slide show run at all */
+@import url(framing.css); /* sets basic placement and size of slide components */
+@import url(pretty.css); /* stuff that makes the slides look better than blah */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/slides.js
new file mode 100644
index 000000000..510a04c0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/slides.js
@@ -0,0 +1,2812 @@
+// S5 1.3beta7 (18-Apr-2007) advanced version by C. Effenberger
+// Please see http://s5.netzgesta.de/ for more information
+// based on S5 v1.2a1 slides.js -- released into the Public Domain
+// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
+// about all the wonderful and talented contributors to this code!
+// audio extension: soundmanager2 is NOT Public Domain
+// Please see http://www.schillmania.com/projects/soundmanager2/ for information
+
+var undef;
+var slideCSS = '';
+var snum = 0;
+var smax = 1;
+var incpos = 0;
+var number = undef;
+var firstTime = 1;
+var s5mode = true;
+var helpmode = false;
+var defaultView = 'slideshow'; //outline
+var controlVis = 'visible';
+var s5Path = 'lib/plugins/s5reloaded/';
+
+// scalable images extension
+var empx = 0;
+var images = new Array();
+var canvas = new Array();
+var medias = new Array();
+var piecharts = new Array();
+var barcharts = new Array();
+var linecharts = new Array();
+// scalable images extension
+
+// transition extension
+var tranSitions = false;
+var fadeModus = false;
+var fadeDuration = 500;
+var incrDuration = 250;
+var opac = 1;
+var cid = '';
+var nid = '';
+var tid = '';
+var jl = '';
+// transition extension
+
+// autoplay extension
+var autoMatic = false;
+var playLoop = false;
+var playPause = false;
+var autoRun = false;
+var playDelay = 5000;
+var remainDer = 0;
+var incrDelay = 0;
+// autoplay extension
+
+// audio extension
+var sound = new Array();
+var audioSupport = false;
+var audioVolume = 100;
+var audioError = false;
+var swfUnloaded = true;
+var bgSoundItem = 9999;
+var curSoundID = -1;
+// audio extension
+
+// panel extension
+var imgWidth = 32;
+var imgHeight = 32;
+// panel extension
+
+// canvas chart extension
+var canvasSupport = false;
+var ChartData = new Array();
+var colorSlice = new Array();
+var font = document.createElement("img");
+font.setAttribute("src", s5Path+"ui/graphic_support/numeric.png");
+signs = {
+ '0': {sx: 0, sy: 0, sw: 48, sh: 64},
+ '1': {sx: 48, sy: 0, sw: 48, sh: 64},
+ '2': {sx: 96, sy: 0, sw: 48, sh: 64},
+ '3': {sx: 144, sy: 0, sw: 48, sh: 64},
+ '4': {sx: 192, sy: 0, sw: 48, sh: 64},
+ '5': {sx: 240, sy: 0, sw: 48, sh: 64},
+ '6': {sx: 288, sy: 0, sw: 48, sh: 64},
+ '7': {sx: 336, sy: 0, sw: 48, sh: 64},
+ '8': {sx: 384, sy: 0, sw: 48, sh: 64},
+ '9': {sx: 432, sy: 0, sw: 48, sh: 64},
+ '%': {sx: 480, sy: 0, sw: 48, sh: 64},
+ '.': {sx: 528, sy: 0, sw: 24, sh: 64}
+};
+var colorNames= new Array();
+colorNames["black"]="#000000"; colorNames["maroon"]="#800000";
+colorNames["green"]="#008000"; colorNames["olive"]="#808000";
+colorNames["navy"]="#000080"; colorNames["purple"]="#800080";
+colorNames["teal"]="#008080"; colorNames["gray"]="#808080";
+colorNames["silver"]="#C0C0C0"; colorNames["red"]="#FF0000";
+colorNames["lime"]="#00FF00"; colorNames["yellow"]="#FFFF00";
+colorNames["blue"]="#0000FF"; colorNames["fuchsia"]="#FF00FF";
+colorNames["aqua"]="#00FFFF"; colorNames["white"]="#FFFFFF";
+colorNames["aliceblue"]="#F0F8FF"; colorNames["antiquewhite"]="#FAEBD7";
+colorNames["aquamarine"]="#7FFFD4"; colorNames["azure"]="#F0FFFF";
+colorNames["beige"]="#F5F5DC"; colorNames["blueviolet"]="#8A2BE2";
+colorNames["brown"]="#A52A2A"; colorNames["burlywood"]="#DEB887";
+colorNames["cadetblue"]="#5F9EA0"; colorNames["chartreuse"]="#7FFF00";
+colorNames["chocolate"]="#D2691E"; colorNames["coral"]="#FF7F50";
+colorNames["cornflowerblue"]="#6495ED"; colorNames["cornsilk"]="#FFF8DC";
+colorNames["crimson"]="#DC143C"; colorNames["darkblue"]="#00008B";
+colorNames["darkcyan"]="#008B8B"; colorNames["darkgoldenrod"]="#B8860B";
+colorNames["darkgray"]="#A9A9A9"; colorNames["darkgreen"]="#006400";
+colorNames["darkkhaki"]="#BDB76B"; colorNames["darkmagenta"]="#8B008B";
+colorNames["darkolivegreen"]="#556B2F"; colorNames["darkorange"]="#FF8C00";
+colorNames["darkorchid"]="#9932CC"; colorNames["darkred"]="#8B0000";
+colorNames["darksalmon"]="#E9967A"; colorNames["darkseagreen"]="#8FBC8F";
+colorNames["darkslateblue"]="#483D8B"; colorNames["darkslategray"]="#2F4F4F";
+colorNames["darkturquoise"]="#00CED1"; colorNames["darkviolet"]="#9400D3";
+colorNames["deeppink"]="#FF1493"; colorNames["deepskyblue"]="#00BFFF";
+colorNames["dimgray"]="#696969"; colorNames["dodgerblue"]="#1E90FF";
+colorNames["firebrick"]="#B22222"; colorNames["floralwhite"]="#FFFAF0";
+colorNames["forestgreen"]="#228B22"; colorNames["gainsboro"]="#DCDCDC";
+colorNames["ghostwhite"]="#F8F8FF"; colorNames["gold"]="#FFD700";
+colorNames["goldenrod"]="#DAA520"; colorNames["greenyellow"]="#ADFF2F";
+colorNames["honeydew"]="#F0FFF0"; colorNames["hotpink"]="#FF69B4";
+colorNames["indianred"]="#CD5C5C"; colorNames["indigo"]="#4B0082";
+colorNames["ivory"]="#FFFFF0"; colorNames["khaki"]="#F0E68C";
+colorNames["lavender"]="#E6E6FA"; colorNames["lavenderblush"]="#FFF0F5";
+colorNames["lawngreen"]="#7CFC00"; colorNames["lemonchiffon"]="#FFFACD";
+colorNames["lightblue"]="#ADD8E6"; colorNames["lightcoral"]="#F08080";
+colorNames["lightcyan"]="#E0FFFF"; colorNames["lightgoldenrodyellow"]="#FAFAD2";
+colorNames["lightgreen"]="#90EE90"; colorNames["lightgrey"]="#D3D3D3";
+colorNames["lightpink"]="#FFB6C1"; colorNames["lightsalmon"]="#FFA07A";
+colorNames["lightseagreen"]="#20B2AA"; colorNames["lightskyblue"]="#87CEFA";
+colorNames["lightslategray"]="#778899"; colorNames["lightsteelblue"]="#B0C4DE";
+colorNames["lightyellow"]="#FFFFE0"; colorNames["limegreen"]="#32CD32";
+colorNames["linen"]="#FAF0E6"; colorNames["mediumaquamarine"]="#66CDAA";
+colorNames["mediumblue"]="#0000CD"; colorNames["mediumorchid"]="#BA55D3";
+colorNames["ediumpurple"]="#9370D"; colorNames["mediumseagreen"]="#3CB371";
+colorNames["mediumslateblue"]="#7B68EE"; colorNames["mediumspringgreen"]="#00FA9A";
+colorNames["mediumturquoise"]="#48D1CC"; colorNames["mediumvioletred"]="#C71585";
+colorNames["midnightblue"]="#191970"; colorNames["mintcream"]="#F5FFFA";
+colorNames["mistyrose"]="#FFE4E1"; colorNames["moccasin"]="#FFE4B5";
+colorNames["navajowhite"]="#FFDEAD"; colorNames["oldlace"]="#FDF5E6";
+colorNames["olivedrab"]="#6B8E23"; colorNames["orange"]="#FFA500";
+colorNames["orangered"]="#FF4500"; colorNames["orchid"]="#DA70D6";
+colorNames["palegoldenrod"]="#EEE8AA"; colorNames["palegreen"]="#98FB98";
+colorNames["paleturquoise"]="#AFEEEE"; colorNames["palevioletred"]="#DB7093";
+colorNames["papayawhip"]="#FFEFD5"; colorNames["peachpuff"]="#FFDAB9";
+colorNames["peru"]="#CD853F"; colorNames["pink"]="#FFC0CB";
+colorNames["plum"]="#DDA0DD"; colorNames["powderblue"]="#B0E0E6";
+colorNames["rosybrown"]="#BC8F8F"; colorNames["royalblue"]="#4169E1";
+colorNames["saddlebrown"]="#8B4513"; colorNames["salmon"]="#FA8072";
+colorNames["sandybrown"]="#F4A460"; colorNames["seagreen"]="#2E8B57";
+colorNames["seashell"]="#FFF5EE"; colorNames["sienna"]="#A0522D";
+colorNames["skyblue"]="#87CEEB"; colorNames["slateblue"]="#6A5ACD";
+colorNames["slategray"]="#708090"; colorNames["snow"]="#FFFAFA";
+colorNames["springgreen"]="#00FF7F"; colorNames["steelblue"]="#4682B4";
+colorNames["tan"]="#D2B48C"; colorNames["thistle"]="#D8BFD8";
+colorNames["tomato"]="#FF6347"; colorNames["turquoise"]="#40E0D0";
+colorNames["violet"]="#EE82EE"; colorNames["wheat"]="#F5DEB3";
+colorNames["whitesmoke"]="#F5F5F5"; colorNames["yellowgreen"]="#9ACD32";
+var canvas_bgcolor = "";
+var canvas_width = 200;
+var canvas_height = 200;
+var canvas_noshade = 0;
+var canvas_nofill = 0;
+var canvas_noshadow = 0;
+var canvas_htmltext = 0;
+var canvas_imgtext = 0;
+var canvas_notext = 0;
+// canvas chart extension
+
+var s5NotesWindow;
+var s5NotesWindowLoaded = false;
+var previousSlide = 0;
+var presentationStart = new Date();
+var slideStart = new Date();
+
+var countdown = {
+ timer: 0,
+ state: 'pause',
+ start: new Date(),
+ end: 0,
+ remaining: 0
+};
+
+var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
+if(isIE) var notIE7 = parseInt(navigator.appVersion) < 7 ? 1 : 0;
+var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
+var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
+var isS2 = navigator.userAgent.indexOf('Safari') >= 2 ? 1 : 0;
+
+function hasClass(object, className) {
+ if (!object.className) return false;
+ return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
+}
+
+function hasValue(object, value) {
+ if (!object) return false;
+ return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
+}
+
+function removeClass(object,className) {
+ if (!object || !hasClass(object,className)) return;
+ object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
+}
+
+function addClass(object,className) {
+ if (!object || hasClass(object, className)) return;
+ if (object.className) {
+ object.className += ' '+className;
+ } else {
+ object.className = className;
+ }
+}
+
+function changeClass(object,className) {
+ if (!object) return;
+ object.firstChild.className = className;
+}
+
+function GetElementsWithClassName(elementName,className) {
+ var allElements = document.getElementsByTagName(elementName);
+ var elemColl = new Array();
+ for (var i = 0; i< allElements.length; i++) {
+ if (hasClass(allElements[i], className)) {
+ elemColl[elemColl.length] = allElements[i];
+ }
+ }
+ return elemColl;
+}
+
+function isParentOrSelf(element, id) {
+ if (element == null || element.nodeName=='BODY') return false;
+ else if (element.id == id) return true;
+ else return isParentOrSelf(element.parentNode, id);
+}
+
+function nodeValue(node) {
+ var result = "";
+ if (node.nodeType == 1) {
+ var children = node.childNodes;
+ for (var i = 0; i < children.length; ++i) {
+ result += nodeValue(children[i]);
+ }
+ }
+ else if (node.nodeType == 3) {
+ result = node.nodeValue;
+ }
+ return(result);
+}
+
+function slideLabel() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var list = document.getElementById('jumplist');
+ smax = slideColl.length;
+ for (var n = 0; n < smax; n++) {
+ var obj = slideColl[n];
+ var did = 'slide' + n.toString();
+ obj.setAttribute('id',did);
+ var otext = '';
+ var menu = obj.firstChild;
+ if (!menu) continue; // to cope with empty slides
+ while (menu && menu.nodeType == 3) {
+ menu = menu.nextSibling;
+ }
+ if (!menu) continue; // to cope with slides with only text nodes
+ var menunodes = menu.childNodes;
+ for (var o = 0; o < menunodes.length; o++) {
+ otext += nodeValue(menunodes[o]);
+ }
+ list.options[list.length] = new Option(n + ' : ' + otext, n);
+ }
+}
+
+function currentSlide() {
+ var cs, at, fd, ss;
+ if (document.getElementById) {
+ cs = document.getElementById('currentSlide');
+ } else {
+ cs = document.currentSlide;
+ }
+ fd = fadeModus?"F":"&ndash;";
+ ss = audioSupport?"S":"&ndash;";
+ at = (autoMatic?(playPause?"||":(playLoop?"&gt;0":"&gt;|")):"&ndash;&ndash;");
+ cs.innerHTML = '<div id="plink" nowrap="nowrap">' +
+ '<span id="csFade">[' + fd + ss + ']<\/span>&nbsp;' +
+ '<span id="csHere"><strong>' + snum + '<\/strong><\/span>' +
+ '<span id="csSep">\/<\/span>' +
+ '<span id="csTotal">' + (smax-1) + '<\/span>&nbsp;' +
+ '<span id="csAuto">[' + at + ']<\/span>' +
+ '<\/div>';
+
+ if (snum == 0) {
+ cs.style.visibility = 'hidden';
+ } else {
+ cs.style.visibility = 'visible';
+ }
+}
+
+function go(step) {
+ if (document.getElementById('slideProj').disabled || step == 0) return;
+ jl = document.getElementById('jumplist');
+ cid = 'slide' + snum;
+ var ce = document.getElementById(cid);
+ if (incrementals[snum].length > 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ removeClass(incrementals[snum][i], 'current');
+ removeClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ if (step != 'j') {
+ snum += step;
+ lmax = smax - 1;
+ if (snum > lmax) snum = lmax;
+ if (snum < 0) snum = 0;
+ }else {
+ snum = parseInt(jl.value);
+ }
+ nid = 'slide' + snum;
+ var ne = document.getElementById(nid);
+ if (!ne) {
+ ne = document.getElementById('slide0');
+ nid = 'slide0';
+ snum = 0;
+ }
+ if (step < 0) {
+ incpos = incrementals[snum].length
+ }else {
+ incpos = 0;
+ }
+ if (incrementals[snum].length > 0 && incpos == 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ if (hasClass(incrementals[snum][i], 'current')) {
+ incpos = i + 1;
+ }else {
+ addClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ }
+ if (incrementals[snum].length > 0 && incpos > 0) {
+ addClass(incrementals[snum][incpos - 1], 'current');
+ }
+ var guru = document.getElementById('guru');
+ if(guru && snum==0) {
+ guru.style.visibility = 'visible';
+ }else if(guru && snum>0) {
+ guru.style.visibility = 'hidden';
+ }
+ if(tranSitions && s5mode && fadeModus) {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {fadeoutSound(curSoundID,true); } // audio support
+ }
+ changeOpac(0,nid);
+ changeOpac(100,cid);
+ ce.style.visibility = 'visible';
+ shiftOpacity(cid,fadeDuration);
+ window.setTimeout("changeSlides()",fadeDuration);
+ }else {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {stopSound(curSoundID); } // audio support
+ }
+ ce.style.visibility = 'hidden';
+ if (isOp) location.hash = nid;
+ ne.style.visibility = 'visible';
+ finishSlides();
+ }
+}
+
+function changeSlides() {
+ if(nid != cid) changeOpac(100,cid);
+ document.getElementById(cid).style.visibility = 'hidden';
+ document.getElementById(nid).style.visibility = 'visible';
+ if (isOp) location.hash = nid;
+ shiftOpacity(nid,fadeDuration);
+ window.setTimeout("finishSlides()",fadeDuration);
+}
+
+function finishSlides() {
+ jl.selectedIndex = snum;
+ currentSlide();
+ loadNote();
+ permaLink();
+ number = undef;
+ if(sound[getSoundID(nid)]) {
+ playSound(nid); // audio support
+ }else if(sound[bgSoundItem] && curSoundID != bgSoundItem) {
+ playSound(bgSoundItem); // audio support
+ }
+}
+
+function goTo(target) {
+ if (target >= smax || target == snum) return;
+ go(target - snum);
+}
+
+function subgo(step) {
+ if (step > 0) {
+ removeClass(incrementals[snum][incpos - 1],'current');
+ removeClass(incrementals[snum][incpos], 'incremental');
+ if(tranSitions && s5mode && fadeModus) {
+ if(!incrementals[snum][incpos].id) {
+ var tmp = new Date(); tid = "inc" + String(tmp.getTime());
+ incrementals[snum][incpos].id = tid;
+ }else {
+ tid = incrementals[snum][incpos].id;
+ }
+ if(typeof(incrementals[snum][incpos].src) != "undefined" || incrementals[snum][incpos].getContext) {
+ changeOpac(0,tid);
+ addClass(incrementals[snum][incpos],'current');
+ shiftOpacity(tid,incrDuration);
+ setTimeout("nextInc()",incrDuration);
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ } else {
+ incpos--;
+ removeClass(incrementals[snum][incpos],'current');
+ addClass(incrementals[snum][incpos], 'incremental');
+ addClass(incrementals[snum][incpos - 1],'current');
+ loadNote();
+ }
+}
+
+function nextInc() {
+ incpos++;
+ loadNote();
+}
+
+function toggle() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ var guru = document.getElementById('guru');
+ if (!slides.disabled) {
+ stopPlay();
+ if(audioSupport && !swfUnloaded) stopAllSounds();
+ slides.disabled = true;
+ outline.disabled = false;
+ s5mode = false;
+ fontSize(1,'em');
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'visible';
+ }
+ if(guru) guru.style.visibility = 'hidden';
+ } else {
+ slides.disabled = false;
+ outline.disabled = true;
+ s5mode = true;
+ fontScale();
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'hidden';
+ }
+ slideColl[snum].style.visibility = 'visible';
+ if(guru && snum==0) guru.style.visibility = 'visible';
+ }
+}
+
+function showHide(action) {
+ var obj = GetElementsWithClassName('*','hideme')[0];
+ switch (action) {
+ case 's':
+ obj.style.visibility = 'visible';
+ break;
+ case 'h':
+ obj.style.visibility = 'hidden';
+ break;
+ case 'k':
+ if (obj.style.visibility != 'visible') {
+ obj.style.visibility = 'visible';
+ } else {
+ obj.style.visibility = 'hidden';
+ }
+ break;
+ }
+}
+
+function keys(key) {
+ if (!key) {
+ key = event;
+ key.which = key.keyCode;
+ }
+ if (helpmode) {
+ dumpHelpReq();
+ return;
+ }
+ if (key.which == 84 && !isOp) {
+ toggle();
+ return;
+ }
+ if (s5mode) {
+ if (autoMatic) {
+ switch (key.which) {
+ case 70: // f/ading on/off
+ switchFade();
+ break;
+ case 83: // s/ound on/off
+ toggleSounds();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 65: // a/utoplay on/off
+ stopPlay();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 80: // p/ause
+ case 32: // spacebar
+ pausePlay();
+ break;
+ }
+ }else {
+ switch (key.which) {
+ case 8: // backspace = HELP
+ createHelpReq();
+ break;
+ case 10: // return
+ case 13: // enter
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ if(number != undef) {
+ goTo(number);
+ break;
+ }
+ case 32: // spacebar
+ case 34: // page down
+ case 39: // rightkey
+ case 40: // downkey
+ if(number != undef) {
+ go(number);
+ } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ break;
+ case 33: // page up
+ case 37: // leftkey
+ case 38: // upkey
+ if(number != undef) {
+ go(-1 * number);
+ } else if (!incrementals[snum] || incpos <= 0) {
+ go(-1);
+ } else {
+ subgo(-1);
+ }
+ break;
+ case 65: // a/utoplay
+ startPlay();
+ break;
+ case 72: // h
+ case 36: // home
+ goTo(0);
+ break;
+ case 69: // e
+ case 35: // end
+ goTo(smax-1);
+ break;
+ case 70: // f/ade transitions on/off
+ switchFade();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 83: // s/ound support on/off
+ toggleSounds();
+ break;
+ case 27: // escape
+ case 81: // q
+ if(!isOp) byby();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 78: // n
+ createNotesWindow();
+ break;
+ }
+ if (key.which < 48 || key.which > 57) {
+ number = undef;
+ } else {
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
+ }
+ }
+ }
+ return false;
+}
+
+function clicker(e) {
+ number = undef;
+ var target;
+ if (window.event) {
+ target = window.event.srcElement;
+ e = window.event;
+ } else {
+ target = e.target;
+ }
+ if (target.href != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
+ if (!helpmode) {
+ if (!e.which || e.which == 1) {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ }
+ } else {
+ dumpHelpReq();
+ }
+}
+
+function findSlide(hash) {
+ var target = null;
+ var slides = GetElementsWithClassName('*','slide');
+ for (var i = 0; i < slides.length; i++) {
+ var targetSlide = slides[i];
+ if ( (targetSlide.name && targetSlide.name == hash)
+ || (targetSlide.id && targetSlide.id == hash) ) {
+ target = targetSlide;
+ break;
+ }
+ }
+ while(target != null && target.nodeName != 'BODY') {
+ if (hasClass(target, 'slide')) {
+ return parseInt(target.id.slice(5));
+ }
+ target = target.parentNode;
+ }
+ return null;
+}
+
+function slideJump() {
+ if (window.location.hash == null) return;
+ var sregex = /^#slide(\d+)$/;
+ var matches = sregex.exec(window.location.hash);
+ var dest = null;
+ if (matches != null) {
+ dest = parseInt(matches[1]);
+ } else {
+ dest = findSlide(window.location.hash.slice(1));
+ }
+ if (dest != null)
+ go(dest - snum);
+}
+
+function fixLinks() {
+ var thisUri = window.location.href;
+ thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
+ var aelements = document.getElementsByTagName('A');
+ for (var i = 0; i < aelements.length; i++) {
+ var a = aelements[i].href;
+ var slideID = a.match('\#slide[0-9]{1,2}');
+ if ((slideID) && (slideID[0].slice(0,1) == '#')) {
+ var dest = findSlide(slideID[0].slice(1));
+ if (dest != null) {
+ if (aelements[i].addEventListener) {
+ aelements[i].addEventListener("click", new Function("e",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "if (e.preventDefault) e.preventDefault();"), true);
+ } else if (aelements[i].attachEvent) {
+ aelements[i].attachEvent("onclick", new Function("",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "event.returnValue = false;"));
+ }
+ }
+ }
+ }
+}
+
+function externalLinks() {
+ if (!document.getElementsByTagName) return;
+ var anchors = document.getElementsByTagName('a');
+ for (var i=0; i<anchors.length; i++) {
+ var anchor = anchors[i];
+ if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
+ anchor.target = '_blank';
+ addClass(anchor,'external');
+ }
+ }
+}
+
+function permaLink() {
+ document.getElementById('plink').href = window.location.pathname + '#slide' + snum;
+}
+
+function createControls() {
+ var controlsDiv = document.getElementById("controls");
+ if (!controlsDiv) return;
+ var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
+ var hideDiv, hideList = '';
+ if (controlVis == 'hidden') {
+ hideDiv = hider;
+ } else {
+ hideList = hider;
+ }
+ if(isOp) {
+ var str = '';
+ }else {
+ var str = '<a accesskey="t" id="sheet" title="toggle CSS" href="javascript:toggle();">&plusmn;<\/a>';
+ }
+ if(isIE) {
+ var tmp = "move around&xA0;until the color&xA0;change to red!";
+ }else if(isS2) {
+ var tmp = "move around\r\nuntil the color\r\nchange to red!";
+ }else {
+ var tmp = "move around until color change to red!";
+ }
+ if(isIE) {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] for keyboard help!"><ul>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst" style="vertical-align: middle; width: 160px;"><select style="cursor: auto; width: 160px; height: auto;" id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del" style="vertical-align: middle; width: 52px;"><select style="cursor: auto; width: 52px; height: auto;" id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul><\/div><\/form>';
+ }else {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] or double click this area for keyboard help!" ondblclick="createHelpReq();"><ul>' +
+ '<li id="exit"><a href="javascript:byby();" accesskey="q" title="exit Show"><\/a><\/li>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li class="vr"><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst"><a id="list" style="cursor:wait;" title="' + tmp + '"><\/a><select id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="fadeLinks" class="vr"><\/li>' +
+ '<li id="fade"><a class="isoff" href="javascript:switchFade();" accesskey="f" title="Transions"><\/a><\/li>' +
+ '<li id="audioLinks" class="vr"><\/li>' +
+ '<li id="audio"><a class="isoff" href="javascript:toggleSounds();" accesskey="s" title="Sounds" ><\/a><\/li>' +
+ '<li id="vol"><a id="volume" style="cursor:wait;" title="' + tmp + '"><\/a><select id="volumelist" title="select Volume" onchange="setVolume();"><option value="100">100<\/option><option value="90">90<\/option><option value="80">80<\/option><option value="70">70<\/option><option value="60">60<\/option><option value="50">50<\/option><option value="40">40<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="10">10<\/option><option value="0">0<\/option><\/select><\/li>' +
+ '<li id="autoLinks" class="vr"><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del"><a id="delay" style="cursor:wait;" title="' + tmp + '"><\/a><select id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul>' +
+ '<a href="http://s5.netzgesta.de" target="_blank" title="S5 Reloaded"><img style="position: absolute; right: 0; bottom: 0;" src="data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAYAAAASYli2AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAYpSURBVHjaYvz//z8DOYCRkZEZRAEx0Ij/f2HiAAHEgqYIpACkkB1J7g8Q/wLRIJ1QNSB5fiDmAOLvQKHPQPoHSB4ggFiQDGMCUnxALAPECkAsBLIdiD8A8SMgfghU8wlqkTgQK1ZVVWldv3792fr16y8D+c9AhgMEECPIy1DDRIDYAojdzMzMWNXV1UG2/v/y5Qvzw4cPP587d24/kH8Gar/uwoULQ+/cufNFXFyciZmZ+UVmZuZKoFmvAQII5kJOIDbi4uKK2Llz53EbG5vP6GGWn5+vMWnSpJtA5jcg5v327Rtnc3PzfSD79+rVq2WBNBtIHUAAwQzkAWKzBQsWnIUZFhISovXmzZsfkpKSDD09PY8kJCR+QtWCguGvrKwsz7Rp07Q4ODh+srCwgILiH0gSIIBgBrICsUBoaCgorBiANgqvXbtWDMg8AcQf9+7d+x0o9xbI/gJV/3fVqlUvmJiY/gIdcaWhoYETahEDQADBDPwNxO9h3gNpBiq6f/HiRbWjR4+yvnr16grQNbeh6kCWsxkYGIhClT8yNDQUgyYhBoAAYoIKfgXi06mpqUowQ+vr6x+uW7fu0suXL8+uWbOGS0BAwB7kC6jXvqmoqLDIyclxzZo1S4udnR2WtBgAAggWyyCXSgOxZUxMjGpWVtY7S0vLr8iRsnnzZl4/P7/DQCYoYtSA2DApKUkVGNNPDh06dBrIvwU06xNAAMEM5AIKqAOxCjQsmHl5eXWdnJx4N2zYcB4prd4CUpfwJRuAAGJCimULoGYpbm5uZ5DBnz9/5tq4caPWkSNHeJEc+g0aTFzfv3/nACabjzk5OW8FBQVloLmHASCAYJECUiTg7+//HJiQTzY2NsrfvXv3n7m5+T5YMgJGEkjDS2gY/pKRkeHt7Ow0Bsb0v9+/fz+HxTJAAMG8DHKFLTC9aRUXF79BT9Qgw4CWHAAy70FdYgjEDgkJCTpWVlYMQBfeAaaMPqBZbwECCGYgMzQGQSleCehS0X///jEDvf9lxYoVoOTyAIjfANX+BqrlBrL1gLFf09vb+0FaWvoHMBctA6USUKQABBAjrPiCliKg7AOKIG5ougLlju9Ipc1foDJWqMWGhYWFtsBg4RISEnrg5uY2BWQgQACxIBkGMkQKijmRfPwXWuI8ASp7DQ1vEP4DDO8PwBzzDJheT0CLPQaAAEJOh0o8zAzeihwMiv+gGZ0B4sz/bIwM797/YTh1/wfDIWj5qAfMmtFnzpz5ICIiwqKoqPgjKChoOtCs5wABhJyXpUCGzddgOIethJ71jEFi1nNwgQrKz8zv37//097eDop15qVLl0pAzWAACCAWhEMYOJFdduELA++b3wxsTIwMfzmYGH6xMDG8gYYpKAg+cnJy/gB6VwuYZFiA7E+wvAwQQCy46ozexwzG17+BYx6UVE4B8Vmo68CRFR0dDQo3UAHBBUwJ4lCLGAACCNnAv4zQxAkCxbIMZ0EuBIYb98EPDFo3voGTzjOogVzArGf969cvNmC2+wssHD7BDAQIIBakmHwPDPy3MAMNeBhgpfbbVEkGhqQbDJaXvjI8BPJB4jz79u37DcwlP+fPn38NuTwECCBkA1+8+8Nwtusxg+STHwwcP/8z8EuwMXA1KjBcBSlwEmRgBhrID/U2O7QMBIEHxsbGkrAwBAggmIGgNMT64AfDWyB+By0EQMVZlC0/wwsXQYa38hzgCGGBWv5ZU1OT4c+fP8yLFi1SA3r5Haw8BAggmIGg5KBpJ8BgeOYTg8S3f2DN/OxMDNwgw0AKnv0EJ+avsITu7u6+EZqzQEHwHFqaMwAEEAtShS/pLcTwrU+Z4QwsyQANOwIL06tfGV5BqwmQWoGKigoLYJnJvWPHjhstLS169vb2M0DqAAIIVh6CXHT/9ndIawEUITCXgUDrQwbGbe8YjkJdAzZQVVVV/t69e8LAgtUYaNgxWKQABBByacMHzfTK9gIMYkBZpj//GT4c+8gAKm1AsfseqPYPtHTXAtaEacBqlgHoyq+srKw3XV1dFwHlvwEEECNyYwmp3cIJjbUf0DbLP7RGEg+0bcMCjQxQzH8BWQgQQIzktr5wAYAAYmKgMgAIMAAp8Fx3osz1lgAAAABJRU5ErkJggg==" width="20" height="32" alt="S5" \/><\/a>' +
+ '<\/div><\/form>';
+ }
+ if (controlVis == 'hidden') {
+ var hidden = document.getElementById('navLinks');
+ } else {
+ var hidden = document.getElementById('jumplist');
+ }
+ addClass(hidden,'hideme');
+}
+
+function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
+ if (!s5mode && !isOp) return false;
+ var hScreen = screen.width; var vScreen = screen.height;
+ var vWindow = window.outerHeight; var hWindow = window.outerWidth;
+ if (isOp && s5mode && defaultView=='slideshow' && ((hScreen != hWindow) || (vScreen != vWindow))) {
+ toggle();
+ return false;
+ }
+ if (isOp && !s5mode && ((hScreen != hWindow) || (vScreen != vWindow))) return false;
+ if (isOp && !s5mode && (hScreen == hWindow) && (vScreen == vWindow)) toggle();
+ var vScale = 48; // both yield 16 (the usual browser default) at 1024x768
+ var hScale = 64; // perhaps should auto-calculate based on theme's declared value?
+ if (window.innerHeight) {
+ var vSize = window.innerHeight;
+ var hSize = window.innerWidth;
+ } else if (document.documentElement.clientHeight) {
+ var vSize = document.documentElement.clientHeight;
+ var hSize = document.documentElement.clientWidth;
+ } else if (document.body.clientHeight) {
+ var vSize = document.body.clientHeight;
+ var hSize = document.body.clientWidth;
+ } else {
+ var vSize = 700; // assuming 1024x768, minus chrome and such equals 8:5
+ var hSize = 1024; // these do not account for kiosk mode or Opera Show
+ }
+ var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
+ extendImgSizes(newSize); // scalable images extension
+ extendCanSizes(newSize); // scalable canvas extension
+ extendObjSizes(newSize); // scalable object extension
+ fontSize(newSize,"px");
+ if(!isS2 || firstTime==0) {
+ generateCanvas(); // dynamic canvas extension
+ }
+ if (isGe) { // hack to counter incremental reflow bugs
+ var obj = document.getElementsByTagName('body')[0];
+ obj.style.visibility = 'hidden';
+ obj.style.display = 'none';
+ obj.style.display = 'block';
+ obj.style.visibility = 'visible';
+ changeOpac(100,'slide' + snum);
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("fixReflow()",10);
+ }else {
+ setListPos(); // invisible select extension
+ }
+}
+
+function fixReflow() {
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("finishReflow()",10);
+}
+function finishReflow() {
+ setListPos(); // invisible select extension
+}
+
+function fontSize(val,fmt) {
+ var value = val + fmt;
+ if (!(s5ss = document.getElementById('s5ss'))) {
+ if (!document.createStyleSheet) {
+ document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
+ s5ss.setAttribute('media','screen, projection');
+ s5ss.setAttribute('id','s5ss');
+ } else {
+ document.createStyleSheet();
+ document.s5ss = document.styleSheets[document.styleSheets.length - 1];
+ }
+ }
+ if (!(document.s5ss && document.s5ss.addRule)) {
+ while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
+ s5ss.appendChild(document.createTextNode('html {font-size: ' + value + ' !important;}'));
+ } else {
+ document.s5ss.addRule('html','font-size: ' + value + ' !important;');
+ }
+}
+
+function windowChange() {
+ fontScale();
+}
+
+function notOperaFix() {
+ slideCSS = document.getElementById('slideProj').href;
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ slides.setAttribute('media','screen');
+ outline.disabled = true;
+ if (isGe) {
+ slides.setAttribute('href','null'); // Gecko fix
+ slides.setAttribute('href',slideCSS); // Gecko fix
+ }
+ if ((isIE && notIE7) && document.styleSheets && document.styleSheets[0]) {
+ document.styleSheets[0].addRule('img', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('div', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('.slide', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ }
+}
+
+function getIncrementals(obj) {
+ var incrementals = new Array();
+ if (!obj)
+ return incrementals;
+ var children = obj.childNodes;
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ if (hasClass(child, 'incremental')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'incremental');
+ for (var j = 0; j < child.childNodes.length; j++) {
+ if (child.childNodes[j].nodeType == 1) {
+ addClass(child.childNodes[j], 'incremental');
+ }
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ removeClass(child,'incremental');
+ }
+ }
+ if (hasClass(child, 'show-first')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'show-first');
+ if (child.childNodes[isGe].nodeType == 1) {
+ removeClass(child.childNodes[isGe], 'incremental');
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ }
+ }
+ incrementals = incrementals.concat(getIncrementals(child));
+ }
+ return incrementals;
+}
+
+function createIncrementals() {
+ var incrementals = new Array();
+ for (var i = 0; i < smax; i++) {
+ incrementals[i] = getIncrementals(document.getElementById('slide'+i));
+ }
+ return incrementals;
+}
+
+function trap(e) {
+ if (!e) {
+ e = event;
+ e.which = e.keyCode;
+ }
+ try {
+ modifierKey = e.ctrlKey || e.altKey || e.metaKey;
+ }
+ catch(e) {
+ modifierKey = false;
+ }
+ return modifierKey || e.which == 0;
+}
+
+// notes extension
+function noteLabel() { // Gives notes id's to match parent slides
+ var notes = GetElementsWithClassName('div','notes');
+ for (var i = 0; i < notes.length; i++) {
+ var note = notes[i];
+ var id = 'note' + note.parentNode.id.substring(5);
+ note.setAttribute('id',id);
+ }
+ resetElapsedSlide();
+ resetRemainingTime();
+ window.setInterval('updateElaspedTime()', 1000);
+}
+
+function createNotesWindow() { // creates a window for our notes
+ if (!s5NotesWindow || s5NotesWindow.closed) { // Create the window if it doesn't exist
+ s5NotesWindowLoaded = false;
+ // Note: Safari has a tendency to ignore window options preferring to default to the settings of the parent window, grr.
+ s5NotesWindow = window.open(s5Path+'ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0');
+ }
+ if (s5NotesWindowLoaded) { // Load the current note if the Note HTML has loaded
+ loadNote();
+ } else { // Keep trying...
+ window.setTimeout('createNotesWindow()', 50);
+ }
+}
+
+function loadNote() {
+// Loads a note into the note window
+ var notes = nextNotes = '<em class="disclaimer">There are no notes for this slide.</em>';
+ if (document.getElementById('note' + snum)) {
+ notes = document.getElementById('note' + snum).innerHTML;
+ }
+ if (document.getElementById('note' + (snum + 1))) {
+ nextNotes = document.getElementById('note' + (snum + 1)).innerHTML;
+ }
+
+ var jl = document.getElementById('jumplist');
+ var slideTitle = jl.options[jl.selectedIndex].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex) ? ' (' + jl.selectedIndex + '/' + (smax - 1) + ')' : '');
+ if (incrementals[snum].length > 0) {
+ slideTitle += ' <small>[' + incpos + '/' + incrementals[snum].length + ']</small>';
+ }
+ if (jl.selectedIndex < smax - 1) {
+ var nextTitle = jl.options[jl.selectedIndex + 1].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex + 1) ? ' (' + (jl.selectedIndex + 1) + '/' + (smax - 1) + ')' : '');
+ } else {
+ var nextTitle = '[end of slide show]';
+ }
+
+ if (s5NotesWindow && !s5NotesWindow.closed && s5NotesWindow.document) {
+ s5NotesWindow.document.getElementById('slide').innerHTML = slideTitle;
+ s5NotesWindow.document.getElementById('notes').innerHTML = notes;
+ s5NotesWindow.document.getElementById('next').innerHTML = nextTitle;
+ s5NotesWindow.document.getElementById('nextnotes').innerHTML = nextNotes;
+ }
+ resetElapsedSlide();
+}
+
+function minimizeTimer(id) {
+ var obj = s5NotesWindow.document.getElementById(id);
+ if (hasClass(obj,'collapsed')) {
+ removeClass(obj,'collapsed');
+ } else {
+ addClass(obj,'collapsed');
+ }
+}
+
+function resetElapsedTime() {
+ presentationStart = new Date();
+ slideStart = new Date();
+ updateElaspedTime();
+}
+
+function resetElapsedSlide() {
+ if (snum != previousSlide) {
+ slideStart = new Date();
+ previousSlide = snum;
+ updateElaspedTime();
+ }
+}
+
+function updateElaspedTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var now = new Date();
+ var ep = s5NotesWindow.document.getElementById('elapsed-presentation');
+ var es = s5NotesWindow.document.getElementById('elapsed-slide');
+ ep.innerHTML = formatTime(now.valueOf() - presentationStart.valueOf());
+ es.innerHTML = formatTime(now.valueOf() - slideStart.valueOf());
+}
+
+function resetRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var startField = s5NotesWindow.document.getElementById('startFrom');
+ startFrom = readTime(startField.value);
+ countdown.remaining = startFrom * 60000; // convert to msecs
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var timeLeft = formatTime(countdown.remaining);
+ tl.innerHTML = timeLeft;
+}
+
+function updateRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var now = new Date();
+ if (countdown.state == 'run') {
+ countdown.remaining = countdown.end - now;
+ }
+ tl.style.color = '';
+ tl.style.backgroundColor = '';
+ if (countdown.remaining >= 0) {
+ var timeLeft = formatTime(countdown.remaining);
+ removeClass(tl,'overtime');
+ if (countdown.remaining < 300000) {
+ tl.style.color = 'rgb(' + (255-Math.round(countdown.remaining/2000)) + ',0,0)';
+ tl.style.backgroundColor = 'rgb(255,255,' + (Math.round(countdown.remaining/2000)) + ')';
+ }
+ } else {
+ var timeLeft = '-' + formatTime(-countdown.remaining);
+ addClass(tl,'overtime');
+ }
+ tl.innerHTML = timeLeft;
+}
+
+function toggleRemainingTime() {
+ if (countdown.state == 'pause') countdown.state = 'run'; else countdown.state = 'pause';
+ if (countdown.state == 'pause') {
+ window.clearInterval(countdown.timer);
+ }
+ if (countdown.state == 'run') {
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ countdown.timer = window.setInterval('updateRemainingTime()', 1000);
+ }
+}
+
+function alterRemainingTime(amt) {
+ var change = amt * 60000; // convert to msecs
+ countdown.end += change;
+ countdown.remaining += change;
+ updateRemainingTime();
+}
+
+function formatTime(msecs) {
+ var time = new Date(msecs);
+
+ var hrs = time.getUTCHours() + ((time.getUTCDate() -1) * 24); // I doubt anyone will spend more than 24 hours on a presentation or single slide but just in case...
+ hrs = (hrs < 10) ? '0'+hrs : hrs;
+ if (hrs == 'NaN' || isNaN(hrs)) hrs = '--';
+
+ var min = time.getUTCMinutes();
+ min = (min < 10) ? '0'+min : min;
+ if (min == 'NaN' || isNaN(min)) min = '--';
+
+ var sec = time.getUTCSeconds();
+ sec = (sec < 10) ? '0'+sec : sec;
+ if (sec == 'NaN' || isNaN(sec)) sec = '--';
+
+ return hrs + ':' + min + ':' + sec;
+}
+
+function readTime(val) {
+ var sregex = /:/;
+ var matches = sregex.exec(val);
+ if (matches == null) {
+ return val;
+ } else {
+ var times = val.split(':');
+ var hours = parseInt(times[0]);
+ var mins = parseInt(times[1]);
+ var total = (hours * 60) + mins;
+ return total;
+ }
+}
+// notes extension
+
+// startup process
+function createSlideShow() {
+ defaultCheck();
+ if(!isIE) createDetector(); // (degrade IE) scalable images extension
+ if(opac!=0 || isIE) { // &&!isIE (degrade IE)
+ tranSitions = false;
+ fadeModus = false;
+ }
+ if(tranSitions && document.getElementById && document.createElement){
+ createProgress();
+ var nop=document.getElementById('StartupControl');
+ nop.onload = dumpProgress;
+ }else {
+ startup();
+ showAll();
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+ }
+}
+
+function defaultCheck() {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'defaultView') {
+ defaultView = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'controlVis') {
+ controlVis = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'tranSitions') {
+ tranSitions = (allMetas[i].content == "true") ? true : false;
+ fadeModus = (tranSitions == true) ? true : false;
+ }
+ if (allMetas[i].name == 'fadeDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ fadeDuration = Math.max(200,Math.min(tmp,2000));
+ }
+ if (allMetas[i].name == 'incrDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ incrDuration = Math.max(50,Math.min(tmp,500));
+ }
+ if (allMetas[i].name == 'autoMatic') {
+ autoMatic = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playLoop') {
+ playLoop = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playDelay') {
+ var tmp = parseInt(allMetas[i].content);
+ playDelay = Math.max(5,Math.min(tmp,90))*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ }
+ if (allMetas[i].name == 'audioSupport') {
+ audioSupport = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'audioVolume') {
+ var tmp = parseInt(allMetas[i].content);
+ audioVolume = Math.max(0,Math.min(tmp,100));
+ }
+ if (allMetas[i].name == 'audioError') {
+ audioError = (allMetas[i].content == "true") ? true : false;
+ }
+ }
+}
+
+function createProgress() {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "StartupProgress";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=100)";
+ }else {
+ pg.style.opacity = 1.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/progress.gif)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+
+ var im = document.createElement('img');
+ im.id = "StartupControl";
+ im.src = s5Path+"ui/graphic_support/blank.gif?" + new Date().valueOf();
+ document.getElementsByTagName("body")[0].appendChild(im);
+}
+
+function startup() {
+ createControls(); // hallvord
+ slideLabel();
+ incrementals = createIncrementals();
+ noteLabel(); // [SI:060104] must follow slideLabel()
+ loadNote();
+ fixLinks();
+ externalLinks();
+ fontScale();
+ if (!isOp) {
+ if(isIE) {
+ document.getElementById('lst').style.backgroundImage = 'none';
+ document.getElementById('del').style.backgroundImage = 'none';
+ }else {
+ document.getElementById('audio').style.backgroundImage = 'none';
+ }
+ notOperaFix();
+ }else if(isOp) {
+ var obj = document.getElementById('exit');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('exit').style.opacity = 0.5;
+ obj = document.getElementById('toggle');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('toggle').style.opacity = 0.5;
+ document.getElementById('jumplist').style.visibility = 'hidden';
+ document.getElementById('list').style.visibility = 'hidden';
+ document.getElementById('lst').style.opacity = 0.5;
+ obj = document.getElementById('audio');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('audio').style.opacity = 0.5;
+ document.getElementById('volumelist').style.visibility = 'hidden';
+ document.getElementById('volume').style.visibility = 'hidden';
+ document.getElementById('vol').style.opacity = 0.5;
+ document.getElementById('delaylist').style.visibility = 'hidden';
+ document.getElementById('delay').style.visibility = 'hidden';
+ document.getElementById('del').style.opacity = 0.5;
+ }
+ slideJump();
+ if (defaultView == 'outline') toggle();
+ document.onkeyup = keys;
+ document.onkeypress = trap;
+ document.onclick = clicker;
+}
+
+function preloadImgages() {
+ var temp = '';
+ var objects = document.getElementsByTagName('img');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].src != '') {
+ temp = new Image();
+ temp.src = objects[i].src;
+ }
+ }
+}
+
+function showAll() {
+ var obj1 = GetElementsWithClassName('div','presentation')[0];
+ if(!obj1) var obj1 = GetElementsWithClassName('ol','presentation')[0];
+ var obj2 = GetElementsWithClassName('div','layout')[0];
+ if(!obj1){}else {obj1.style.display = 'block'};
+ if(!obj2){}else {obj2.style.display = 'block'};
+}
+
+function dumpProgress() {
+ document.body.removeChild(document.getElementById('StartupControl'));
+ startup();
+ preloadImgages();
+ showAll();
+ createSoundManagerScript();
+ shiftOpacity('StartupProgress',1000);
+ window.setTimeout("removeProgress()",1000);
+}
+
+function removeProgress() {
+ document.body.removeChild(document.getElementById('StartupProgress'));
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+}
+function panelSetup() {
+ if(playPause) {
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ if(playLoop) {
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ if(audioSupport && !isIE && !isOp) {
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ }
+ if(fadeModus && !isIE) {
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ if(autoMatic) {
+ var obj = document.getElementById('auto'); changeClass(obj,'ison');
+ startPlay();
+ }
+ if(audioVolume && !isIE && !isOp) {
+ var idx = 0;
+ if(audioVolume >= 95 && audioVolume <= 100) {idx = 0;}
+ else if(audioVolume >= 85 && audioVolume < 95) {idx = 1;}
+ else if(audioVolume >= 75 && audioVolume < 85) {idx = 2;}
+ else if(audioVolume >= 65 && audioVolume < 75) {idx = 3;}
+ else if(audioVolume >= 55 && audioVolume < 65) {idx = 4;}
+ else if(audioVolume >= 45 && audioVolume < 55) {idx = 5;}
+ else if(audioVolume >= 35 && audioVolume < 45) {idx = 6;}
+ else if(audioVolume >= 25 && audioVolume < 35) {idx = 7;}
+ else if(audioVolume >= 15 && audioVolume < 25) {idx = 8;}
+ else if(audioVolume >= 5 && audioVolume < 15) {idx = 9;}
+ else {idx = 10;}
+ document.getElementById('volumelist').selectedIndex = idx;
+ }
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+}
+// startup process
+
+// shutdown process
+function byby() {
+ stopPlay();
+ if(tranSitions && fadeModus && s5mode && !isOp) {
+ fadeoutSound(curSoundID,true); // audio support
+ var pg = document.createElement('div');
+ pg.id = "GoodBy";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=0)";
+ }else {
+ pg.style.opacity = 0.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/finish.gif)";
+ document.getElementsByTagName("body")[0].appendChild(pg);
+ shiftOpacity('GoodBy',1000);
+ window.setTimeout("history.back()",1000);
+ }else {
+ stopSound(curSoundID);
+ history.back();
+ }
+}
+// shutdown process
+
+// scalable images extension
+function createDetector() {
+ var em = document.createElement('div');
+ em.id='EMSizeControl'; em.style.position="absolute"; em.style.left="-999px";
+ em.style.width="1em"; em.style.height="1em"; em.style.opacity=0.0;
+ document.getElementsByTagName("body")[0].appendChild(em);
+ var nop=document.getElementById('EMSizeControl');
+ if(!nop||findPosX(nop)!=-999) {}else {
+ opac=document.getElementById('EMSizeControl').style.opacity;
+ empx=document.getElementById('EMSizeControl').offsetHeight;
+ document.body.removeChild(document.getElementById('EMSizeControl'));
+ var objects = document.getElementsByTagName('img');
+ var j = 0; var i = 0; var k = 0; var d; var obj;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ images[j] = objects[i];
+ ++j;
+ }
+ }
+ var objects = document.getElementsByTagName('canvas'); j = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ canvas[objects[i].id] = objects[i];
+ if(j==0) {
+ if(objects[i].getContext) {
+ canvasSupport = true;
+ }
+ ++j;
+ }
+ }
+ }
+ if(canvasSupport!=true) {
+ for (d in canvas) {
+ try {
+ canvas[d].setAttribute("width",1);
+ canvas[d].setAttribute("height",1);
+ } catch (e) {
+ }
+ }
+ }
+ var objects = document.getElementsByTagName('table');
+ j = 0; k = 0; l = 0; var w; var h; var tmp; var cnt;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^piechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ piecharts[j] = objects[i];
+ em = piecharts[j].getAttribute("summary");
+ if(em != "") em = "," + em;
+ piecharts[j].setAttribute("summary", w + "," + h + em);
+ ++j;
+ }
+ }
+ }
+ if(objects[i].className.match(/^barchart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ barcharts[k] = objects[i];
+ em = barcharts[k].getAttribute("summary");
+ if(em != "") em = "," + em;
+ barcharts[k].setAttribute("summary", w + "," + h + em);
+ ++k;
+ }
+ }
+ }
+ if(objects[i].className.match(/^linechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ linecharts[l] = objects[i];
+ em = linecharts[l].getAttribute("summary");
+ if(em != "") em = "," + em;
+ linecharts[l].setAttribute("summary", w + "," + h + em);
+ ++l;
+ }
+ }
+ }
+ }
+ objects = document.getElementsByTagName('object'); j = 0; i = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ medias[j] = objects[i]; ++j;
+ if(!isIE) {
+ if(objects[i].getAttributeNode("classid")) objects[i].removeAttributeNode(objects[i].getAttributeNode("classid"));
+ if(objects[i].getAttributeNode("codebase")) objects[i].removeAttributeNode(objects[i].getAttributeNode("codebase"));
+ }
+ }
+ }
+ }
+}
+function extendImgSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < images.length; i++) {
+ w=images[i].getAttribute("width",0);
+ h=images[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ images[i].style.width=Math.floor(w*q)+"px";
+ images[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+
+function extendCanSizes(f) {
+ if(empx>0 && canvasSupport) {
+ var q = (f/empx); var w = 0; var h = 0; var tmp = ""; var cnt; var obj;
+ for(var i=0; i < piecharts.length; i++) {
+ if(piecharts[i].getAttribute("summary")) {
+ tmp = piecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = piecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < barcharts.length; i++) {
+ if(barcharts[i].getAttribute("summary")) {
+ tmp = barcharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = barcharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < linecharts.length; i++) {
+ if(linecharts[i].getAttribute("summary")) {
+ tmp = linecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = linecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ }
+}
+function extendObjSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < medias.length; i++) {
+ w=medias[i].getAttribute("width",0);
+ h=medias[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ medias[i].style.width=Math.floor(w*q)+"px";
+ medias[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+function findPosX(obj) {
+ var posLeft = 0;
+ while (obj.offsetParent) {
+ posLeft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ return posLeft;
+}
+function findPosY(obj) {
+ var posTop = 0;
+ while (obj.offsetParent) {
+ posTop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ return posTop;
+}
+// scalable images extension
+
+// canvas chart extension
+function deg2rad(degrees) {
+ return Math.PI *degrees/180;
+}
+function rad2deg(radians) {
+ return 180.0 *radians/Math.PI;
+}
+function circle_point_x(radians, diameter) {
+ var x = Math.cos(radians)*(diameter/2);
+ return x;
+}
+function circle_point_y(radians, diameter) {
+ var y = Math.sin(radians)*(diameter/2);
+ return y;
+}
+function roundTo(val,dig) {
+ var num = val;
+ if (val > 8191 && val < 10485) {
+ val = val-5000;
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ num = num+5000;
+ } else {
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ }
+ return num;
+}
+function searchColor(value) {
+ for (var dat in colorNames) {
+ if(dat==value) return colorNames[dat];
+ }
+ return false;
+}
+function scanColor(value) {
+ if(value.match(/^#[0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var val1 = value.substr(1,1).toLowerCase();
+ var val2 = value.substr(2,1).toLowerCase();
+ var val3 = value.substr(3,1).toLowerCase();
+ value = '#' + val1 + val1 + val2 + val2 + val3 + val3;
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var tmp = searchColor(value.toLowerCase());
+ if(!tmp) {}else{value = tmp;}
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ value = '#000000';
+ }
+ return value.toLowerCase();
+}
+function hex2rgb(val,trans) {
+ if(val.length==7) {
+ var tp1 = Math.max(0,Math.min(parseInt(val.substr(1,2),16),255));
+ var tp2 = Math.max(0,Math.min(parseInt(val.substr(3,2),16),255));
+ var tp3 = Math.max(0,Math.min(parseInt(val.substr(5,2),16),255));
+ return 'rgba(' + tp1 + ',' + tp2 + ',' + tp3 + ',' + trans + ')';
+ }
+}
+function trim(str) {
+ return (str.replace(/\s+$/,"").replace(/^\s+/,""));
+}
+function roundedRect(ctx,x,y,width,height,radius){
+ ctx.beginPath();
+ ctx.moveTo(x,y+radius);
+ ctx.lineTo(x,y+height-radius);
+ ctx.quadraticCurveTo(x,y+height,x+radius,y+height);
+ ctx.lineTo(x+width-radius,y+height);
+ ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius);
+ ctx.lineTo(x+width,y+radius);
+ ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
+ ctx.lineTo(x+radius,y);
+ ctx.quadraticCurveTo(x,y,x,y+radius);
+ ctx.closePath();
+}
+function drawString(ctx, text, fc, tx, ty) {
+ var xp = 0; var c = "";
+ ctx.beginPath();
+ for (var i = 0; i < text.length; i++) {
+ c = text[i];
+ ctx.drawImage(font, signs[c].sx, signs[c].sy, signs[c].sw, signs[c].sh, tx+xp, ty, signs[c].sw*fc, signs[c].sh*fc);
+ xp += (signs[c].sw*fc);
+ }
+ ctx.closePath();
+}
+function strokeString(ctx, txt, col, fh, tx, ty) {
+ var fw = fh*0.666666; var lw = fh*0.125;
+ var ls = lw/2; var cr = lw; var xp = 0;
+ ctx.lineCap = "round"; ctx.lineJoin = "round"
+ ctx.lineWidth = lw; ctx.strokeStyle = col;
+ for (var i = 0; i < txt.length; i++) {
+ strokeSymbol(ctx, txt[i], ls, tx+xp, ty, fw, fh);
+ xp += (txt[i]!="."?fw+cr:(fw/2)+cr);
+ }
+}
+function strokeSymbol(ctx, symbol, fc, cx, cy, cw, ch) {
+ ctx.beginPath();
+ switch (symbol) {
+ case "0":
+ ctx.moveTo(cx+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+(cw/2),(cw/2)-fc,deg2rad(180),0, false);
+ ctx.arc(cx+(cw/2),(cy+ch)-(cw/2),(cw/2)-fc,0,deg2rad(180), false);
+ ctx.closePath();
+ break;
+ case "1":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.moveTo(cx+(cw*0.666666),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.666666),cy+fc);
+ ctx.lineTo(cx+(cw*0.25),cy+(ch*0.25));
+ break;
+ case "2":
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.8));
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+fc,cy+ch-fc);
+ ctx.arc(cx+(cw/2),cy+(cw*0.425),(cw*0.425)-fc,deg2rad(45),deg2rad(-180), true);
+ break;
+ case "3":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-90),deg2rad(180), false);
+ break;
+ case "4":
+ ctx.moveTo(cx+(cw*0.75),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.5),cy+ch-fc);
+ break;
+ case "5":
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-80),deg2rad(180), false);
+ break;
+ case "6":
+ ctx.moveTo(cx+fc,cy+ch-(cw*0.5)-fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-180),deg2rad(180), false);
+ ctx.bezierCurveTo(cx+fc,cy+fc,cx+fc,cy+fc,cx+(cw*0.9)-fc,cy+fc);
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ break;
+ case "7":
+ ctx.moveTo(cx+(cw*0.5),cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.25)-fc);
+ break;
+ case "8":
+ ctx.moveTo(cx+(cw*0.92)-fc,cy+(cw*0.59));
+ ctx.arc(cx+(cw/2),cy+(cw*0.45),(cw*0.45)-fc,deg2rad(25),deg2rad(-205), true);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-135),deg2rad(-45), true);
+ ctx.closePath();
+ ctx.moveTo(cx+(cw*0.79),cy+(ch*0.47));
+ ctx.lineTo(cx+(cw*0.21),cy+(ch*0.47));
+ break;
+ case "9":
+ ctx.moveTo(cx+cw-fc,cy+(cw*0.5));
+ ctx.arc(cx+(cw/2),cy+(cw*0.5),(cw*0.5)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.bezierCurveTo(cx+cw-fc,cy+ch-fc,cx+cw-fc,cy+ch-fc,cx+(cw*0.1)+fc,cy+ch-fc);
+ break;
+ case "%":
+ ctx.moveTo(cx+fc,cy+(ch*0.75));
+ ctx.lineTo(cx+cw-fc,cy+(ch*0.25));
+ ctx.moveTo(cx+(cw*0.505),cy+(cw*0.3));
+ ctx.arc(cx+(cw*0.3),cy+(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.moveTo(cx+(cw*0.905),cy+ch-(cw*0.3));
+ ctx.arc(cx+(cw*0.7),cy+ch-(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ break;
+ case ".":
+ ctx.moveTo(cx+(cw*0.25),cy+ch-fc-fc);
+ ctx.arc(cx+(cw*0.25),cy+ch-fc-fc,fc,deg2rad(0),deg2rad(360), false);
+ ctx.closePath();
+ break;
+ default:
+ break;
+ }
+ ctx.stroke();
+}
+function drawBar(ctx,x,y,width,height,color,value,textdiv){
+ var rw = width/2; var rh = rw/2;
+ height = Math.max(height,rw);
+ var dh = Math.max(height-(2*rh),0.1); var S2L;
+ var xx = rw/8; var yy = rh/4;
+ var yo = rh/2; y = y - yy;
+ if(canvas_noshadow <= 0 && canvas_noshade <= 0) {
+ ctx.save();
+ S2L = ctx.createRadialGradient(x+rw+rh,y+height-rw+yy+rh,0,x+rw,y+height-rw+yy,rw);
+ S2L.addColorStop(0, 'rgba(0,0,0,0.5)');
+ S2L.addColorStop(0.7, 'rgba(0,0,0,0.25)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = S2L;
+ ctx.scale(1,0.5);
+ ctx.translate(xx,y+height+yy);
+ if(isOp){
+ ctx.fillRect(x,y+yy+height-width,width,width);
+ }else {
+ ctx.arc(x+rw,y+yy+height-width,width,0,deg2rad(360), false);
+ ctx.fill();
+ }
+ ctx.restore();
+ }else if(canvas_noshadow <= 0 && canvas_noshade >= 1) {
+ ctx.fillStyle = 'rgba(0,0,0,0.2)';
+ ctx.fillRect(x+yo,y+rh+yo+yo,width,dh);
+ }
+
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x,y+(height/2),x+width,y+(height/2));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.75)');
+ S2L.addColorStop(0.2, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.3, 'rgba(0,0,0,0)');
+ S2L.addColorStop(0.5, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.35)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.1)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.strokeStyle = S2L;
+ ctx.stroke();
+ }else {
+ ctx.fillStyle = color;
+ ctx.fillRect(x,y+rh+yo,width,dh);
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var bw = width; var bh = bw/4;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ var c; var w;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,x+(width/2)-(bw/2),y,bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext <= 0) {
+ strokeString(ctx, value + "%","rgba(48,48,48,1)", th, x+(width/2)-(w/2), y+((bh-th)/2));
+ }else {
+ drawString(ctx, value + "%", tf, x+(width/2)-(w/2), y+((bh-th)/2.2));
+ }
+ }else {
+ var bh = bw/3; var th = roundTo(bh*0.75,0);
+ roundedRect(ctx,x,y,bw,bh,bh/4);
+ ctx.fill();
+ var obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = x + "px";
+ obj.style.top = y+((bh-th)/2.2) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+
+ }
+}
+function drawLine(ctx,x,y,width,height,dist,array,factor,color,fill){
+ if(fill <= 0){
+ var style = hex2rgb(color,0.5);
+ ctx.lineJoin = "miter";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height);
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.lineTo(x+width,y+height);
+ ctx.lineTo(x,y+height);
+ ctx.closePath();
+ ctx.fillStyle = style;
+ ctx.fill();
+ }
+ ctx.lineJoin = "round";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height-(array[0]*factor));
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.strokeStyle = color;
+ ctx.stroke();
+}
+function setDataURL(cid) {
+ if(cid.toDataURL) {
+ var obj = document.getElementById(cid.id + "_link");
+ if(obj) {
+ obj.setAttribute("title", "To Data URL");
+ obj.setAttribute("target", "_blank");
+ obj.setAttribute("href", cid.toDataURL());
+ }
+ }
+}
+function get_input(dataobj,canvasobj,linechart) {
+ var table = document.getElementById(dataobj);
+ var canvas = document.getElementById(canvasobj);
+ var row; var clm; var cnt = 0; var val = 0; var nme = ""; var col = "";
+ if(canvas.getContext) {
+ canvas_width = parseInt(canvas.style.width);
+ canvas_height = parseInt(canvas.style.height);
+ if(canvas_width >= 16 && canvas_height >= 16) {
+ var tmp = table.getAttribute("summary");
+ canvas_noshade = 0; canvas_noshadow = 0;
+ canvas_notext = 0; canvas_imgtext = 0;
+ canvas_htmltext = 0; canvas_nofill = 0;
+ if(tmp.search(/noshadow/) != -1) canvas_noshadow = 1;
+ if(tmp.search(/noshade/) != -1) canvas_noshade = 1;
+ if(tmp.search(/nofill/) != -1) canvas_nofill = 1;
+ if(tmp.search(/notext/) != -1) canvas_notext = 1;
+ if(tmp.search(/htmltext/) != -1) canvas_htmltext = 1;
+ if(tmp.search(/imgtext/) != -1) canvas_imgtext = 1;
+ if(table.getAttribute("bgcolor")) {
+ canvas_bgcolor = scanColor(table.getAttribute("bgcolor"));
+ }
+ ChartData = new Array(); colorSlice = new Array();
+ if(table.getElementsByTagName("tr")[0].getElementsByTagName("th")[0]) cnt = 1;
+ for(var r = cnt; r < table.getElementsByTagName("tr").length; r++) {
+ row = table.getElementsByTagName("tr")[r];
+ clm = row.getElementsByTagName("td").length;
+ if(row.getElementsByTagName("td")[0].getAttribute("bgcolor")) {
+ col = scanColor(row.getElementsByTagName("td")[0].getAttribute("bgcolor")); val = 0;
+ nme = trim(row.getElementsByTagName("td")[1].innerHTML.replace(/<[^>]+>/g,""));
+ if(!linechart) {
+ if(clm > 3) {
+ for(var z = 2; z < clm; z++) {
+ val += parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ }else {
+ val = parseFloat(row.getElementsByTagName("td")[2].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ if(!isNaN(val) && val > 0 && nme != '') {
+ colorSlice[r-cnt] = col; ChartData[nme] = Math.abs(val);
+ }else {
+ break;
+ }
+ }else {
+ val = 0; i = 0;
+ if(clm > 3 && nme != '') {
+ ChartData[r-cnt] = new Array();
+ colorSlice[r-cnt] = col;
+ for(var z = 2; z < clm; z++) {
+ val = Math.abs(parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,"")));
+ if(!isNaN(val) && val >= 0) {
+ ChartData[r-cnt][i] = val; i++;
+ }else {
+ ChartData[r-cnt][i] = 0; i++;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }
+ }
+}
+function setPieChart(canvasobj,textobj) {
+ var cd = (Math.min(canvas_width,canvas_height)/110)*100;
+ var cp = cd*0.1; var cr = cd/2;
+ var sr = cr*0.93; var cw = cd+cp; var ch = cw;
+ var cx = (cd/2)+(cp/2); var cy = cx; var ct = 0;
+ for (var data in ChartData) {
+ ct += ChartData[data];
+ }
+ var poc = ct/100;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ }
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,cw,ch);
+ }else {
+ ctx.clearRect(0,0,cw,ch);
+ }
+ if(canvas_noshadow <= 0) {
+ if(!isOp) {
+ ctx.beginPath();
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),cr,cx+(cr*0.1),cy+(cr*0.1),sr*0.9);
+ B2B.addColorStop(0, 'rgba(0,0,0,0)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.arc(cx+(cr*0.1),cy+(cr*0.1),cr,0,deg2rad(360), false);
+ ctx.closePath();
+ ctx.fillStyle = B2B;
+ ctx.fill();
+ }else {
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),0,cx+(cr*0.1),cy+(cr*0.1),cr);
+ B2B.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(0.87, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = B2B;
+ ctx.fillRect(0,0,cw,ch);
+ }
+ }
+ var val = 0; var deg = 0; var idx = 0; var data;
+ for (data in ChartData) {
+ val = ChartData[data]; sdeg = deg;
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ ctx.beginPath();
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr,sdeg,edeg, false);
+ ctx.lineTo(cx,cy);
+ ctx.closePath();
+ ctx.fillStyle = colorSlice[(idx++)];
+ ctx.fill();
+ }
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ var W2T = ctx.createLinearGradient(cp*2,cp*2,cx,cy);
+ W2T.addColorStop(0, 'rgba(255,255,255,0.8)');
+ W2T.addColorStop(1, 'rgba(255,255,255,0)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.fillStyle = W2T;
+ ctx.fill();
+ ctx.beginPath();
+ var T2B = ctx.createLinearGradient(cx,cy,cw-(cp*2),ch-(cp*2));
+ T2B.addColorStop(0, 'rgba(0,0,0,0)');
+ T2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.fillStyle = T2B;
+ ctx.fill();
+ ctx.beginPath();
+ var B2T = ctx.createLinearGradient(cx,cy,cw-(cp*1.9),ch-(cp*1.9));
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.strokeStyle = B2T;
+ ctx.stroke();
+ ctx.beginPath();
+ var T2W = ctx.createLinearGradient(cx,cy,(cp*1.9),(cp*1.9));
+ T2W.addColorStop(0, 'rgba(255,255,255,0)');
+ T2W.addColorStop(1, 'rgba(255,255,255,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.strokeStyle = T2W;
+ ctx.stroke();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var mpos = 0; var per = 0; var gx = 0;
+ var gy = 0; var tx = 0; var ty = 0;
+ var obj = ""; var w = 0; var c = 0;
+ var bw = cr*0.45; var bh = cr*0.125;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext >= 1) {
+ bw = (cr*0.365);
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ for (data in ChartData) {
+ val = ChartData[data];
+ sdeg = deg; mpos = deg+(((val/2)/ct)*deg2rad(360));
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ per = roundTo(val/poc,2);
+ gx = circle_point_x(mpos, cd);
+ gy = circle_point_y(mpos, cd);
+ tx = parseFloat((cx+(2*Math.floor(cx + gx)))/3);
+ ty = (cy+(2*Math.floor(cy + gy)))/3;
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext >= 1) {
+ drawString(ctx, per + "%", tf, tx-(w/2), ty-(th/1.8));
+ }else {
+ strokeString(ctx, per + "%","rgba(48,48,48,1)", th, tx-(w/2), ty-(th/2));
+ }
+ }else {
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = (tx-(bw/2)) + "px";
+ obj.style.top = ty-(th/1.8) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+ }
+ }
+ }
+}
+function setBarChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9; var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05; var ph = canvas_height*0.05;
+ var cm = 0; var ct = 0;
+ for (var data in ChartData) {
+ cm = Math.max(cm,ChartData[data]);
+ ct += ChartData[data];
+ }
+ var hf = ih/cm; var bs = colorSlice.length;
+ var bw = iw/(bs*1.1); var poc = ct/100;
+ var th = roundTo((bw/3)*0.75,0);
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ var obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ var cc = ""; var bh = 0; var idx = 0; var t = 0; per = 0;
+ for (var data in ChartData) {
+ per = roundTo(ChartData[data]/poc,2);
+ bh = ChartData[data]*hf;
+ drawBar(ctx,pw+(t*(bw*1.1)),ph+ih-bh,bw,bh,colorSlice[(idx++)],per,textdiv);
+ t++;
+ }
+ }
+}
+function setLineChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9;
+ var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05;
+ var ph = canvas_height*0.05;
+ var cm = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ cm = Math.max(cm,ChartData[i][j]);
+ }
+ }
+ var hf = (ih*0.95)/cm; var bw = iw;
+ var dw = iw/(ChartData[0].length-1)
+ var dh = ih/(ChartData[0].length-1)
+ var ps = Math.min(pw,ph); lw = ps/4;
+ var B2T;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_noshadow <= 0) {
+ B2T = ctx.createLinearGradient(pw+ps,ph+ih+1,pw+ps+ps,ph+ih+1);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps,ph+ih);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.lineTo(pw+ps+ps,ph+ih);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+ps+ps,ph+ih,pw+ps+ps,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps+ps,ph+ih);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+ps+iw,ph+ih+ps);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.closePath();
+ ctx.fill();
+ var B2T = ctx.createLinearGradient(pw+iw+1,ph+ps,pw+iw+1,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.35)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps);
+ ctx.lineTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+iw,ph+ps+ps,pw+iw+ps,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.35)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+iw+ps,ph+ih+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = lw/2;
+ ctx.strokeStyle = "rgba(255,255,255,0.25)";
+ if(canvas_nofill <= 0) {
+ ctx.fillStyle = "rgba(240,240,240,0.8)";
+ ctx.strokeStyle = "rgba(255,255,255,1)";
+ ctx.fillRect(pw,ph,iw,ih);
+ }
+ for (var i = 0; i < ChartData[0].length-1; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph);
+ ctx.lineTo(pw+(i*dw),ph+ih);
+ ctx.stroke();
+ }
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw,ph+(i*dh));
+ ctx.lineTo(pw+iw,ph+(i*dh));
+ ctx.stroke();
+ }
+ ctx.lineWidth = lw;
+ var cc = ""; var bh = 0; var idx = 0; var t = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ t = Math.max(t,ChartData[i][j]);
+ }
+ bh = t*hf; cc = colorSlice[(idx++)];
+ drawLine(ctx,pw,ph+ih-bh,bw,bh,dw,ChartData[i],hf,cc,canvas_nofill);
+ }
+ ctx.beginPath();
+ ctx.moveTo(pw,ph);
+ ctx.lineTo(pw,ph+ih);
+ ctx.lineTo(pw+iw+(lw/2),ph+ih);
+ ctx.strokeStyle = "rgba(48,48,48,1)";
+ ctx.stroke();
+ ctx.lineWidth = lw/2;
+ B2T = ctx.createLinearGradient(pw,ph+ih,pw,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,1)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.strokeStyle = B2T;
+ for (var i = 0; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph+ih);
+ ctx.lineTo(pw+(i*dw),ph+ih+ps);
+ ctx.stroke();
+ }
+ B2T = ctx.createLinearGradient(pw-ps,ph,pw,ph);
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,1)');
+ ctx.strokeStyle = B2T;
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw-ps,ph+(i*dh));
+ ctx.lineTo(pw,ph+(i*dh));
+ ctx.stroke();
+ }
+ }
+}
+function generateCanvas() {
+ if(canvasSupport) {
+ var canvasID; var tdataID; var textID;
+ var tmp; var dat; var i; var j;
+ for(i=0; i < piecharts.length; i++) {
+ tmp = piecharts[i].id.split("_");
+ tdataID = piecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setPieChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < barcharts.length; i++) {
+ tmp = barcharts[i].id.split("_");
+ tdataID = barcharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setBarChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < linecharts.length; i++) {
+ tmp = linecharts[i].id.split("_");
+ tdataID = linecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID,true);
+ if(colorSlice.length > 0) {
+ if(ChartData.length == colorSlice.length) {
+ setLineChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ }
+}
+// canvas chart extension
+
+// invisible select extension
+function setListPos(opt) {
+ if(!isIE) { //(degrade IE)
+ var ref = document.getElementById('list');
+ var x = findPosX(ref); var y = findPosY(ref);
+ var obj = document.getElementById('jumplist');
+ obj.style.position = 'fixed'; obj.style.left = x + 'px'; obj.style.top = y + 'px';
+ var vol = document.getElementById('volumelist');
+ ref = document.getElementById('volume');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ vol.style.position = 'fixed'; vol.style.left = x + 'px'; vol.style.top = y + 'px';
+ var del = document.getElementById('delaylist');
+ ref = document.getElementById('delay');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ del.style.position = 'fixed'; del.style.left = x + 'px'; del.style.top = y + 'px';
+ var pnl = document.getElementById('navLinks');
+ }
+ if(opt) {
+ if(isIE) {
+ //(degrade IE)
+ //pnl.style.filter = "alpha(opacity=80)";
+ }else {
+ obj.style.opacity = 0.0;
+ vol.style.opacity = 0.0;
+ del.style.opacity = 0.0;
+ pnl.style.opacity = 0.8;
+ }
+ }
+}
+// invisible select extension
+
+// transition extension
+function switchFade() {
+ if(tranSitions && s5mode && fadeModus) {
+ fadeModus = false;
+ playDelay = playDelay-(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'isoff');
+ }else if(tranSitions && s5mode && !fadeModus) {
+ fadeModus = true;
+ playDelay = playDelay+(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ currentSlide();
+}
+function opacity(ids, opacStart, opacEnd, millisec) {
+ var speed = Math.round(millisec / 100);
+ var timer = 0;
+ if(opacStart > opacEnd) {
+ for(var i = opacStart; i >= opacEnd; i--) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ } else if(opacStart < opacEnd) {
+ for(var i = opacStart; i <= opacEnd; i++) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ }
+}
+function changeOpac(opacity, ids) {
+ var obj = document.getElementById(ids);
+ if (isIE) {
+ obj.style.filter = "alpha(opacity=" + opacity + ")";
+ } else {
+ obj.style.opacity = (opacity / 100);
+ }
+}
+function shiftOpacity(ids, millisec) {
+ if(document.getElementById(ids).style.opacity != '') {
+ var currentOpac = document.getElementById(ids).style.opacity * 100;
+ } else {
+ var currentOpac = 0;
+ }
+ if(currentOpac == 0) {
+ opacity(ids, currentOpac, 100, millisec);
+ } else if(currentOpac > 0) {
+ opacity(ids, currentOpac, 0, millisec);
+ }
+}
+// transition extension
+
+// autoplay extension
+function autoPlay() {
+ if (s5mode && autoMatic && !playPause) {
+ if ((snum >= (smax-1)) && playLoop) {
+ goTo(0);
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }else if ((snum >= (smax-1)) && !playLoop) {
+ stopPlay();
+ }else {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ if (incrementals[snum].length >0) {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = parseInt(playDelay/(incrementals[snum].length+1));
+ remainDer = parseInt(playDelay-(incrDelay*incrementals[snum].length));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ } else {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = incrDuration;
+ remainDer = parseInt(playDelay-(incrementals[snum].length*incrDuration));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }
+ }
+}
+function autoPlayIncr() {
+ if (incpos < incrementals[snum].length) {
+ subgo(1);
+ autoRun = setTimeout('autoPlayIncr();',incrDelay);
+ }else {
+ autoRun = setTimeout('nop();',remainDer);
+ }
+}
+function nop() {
+ // no operation dummy
+}
+function togglePlay() {
+ if (autoRun && s5mode) {
+ stopPlay();
+ }else if (!autoRun && s5mode) {
+ startPlay();
+ }
+}
+function stopPlay() {
+ if (autoRun && s5mode) {
+ clearTimeout(autoRun); autoRun = null;
+ autoMatic = false; playPause = false; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'isoff');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ currentSlide();
+ }
+}
+function startPlay() {
+ if (!autoRun && s5mode) {
+ playPause = false; autoMatic = true; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'ison');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ autoRun = setTimeout('autoPlay();',playDelay);
+ currentSlide();
+ }
+}
+function pausePlay() {
+ if (s5mode && autoMatic) {
+ if (playPause) {
+ playPause = false; autoRun = setTimeout('autoPlay();',playDelay);
+ var obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ }else {
+ if (autoRun){
+ clearTimeout(autoRun); autoRun = null; playPause = true;
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+ }
+}
+function switchLoop() {
+ if(s5mode) {
+ if (playLoop) {
+ playLoop = false;
+ var obj = document.getElementById('loop'); changeClass(obj,'isoff');
+ }else {
+ playLoop = true;
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+}
+function setDelay() {
+ var val = document.getElementById('delaylist');
+ if(s5mode) {
+ var delay = Math.max(5,Math.min(parseInt(val.value),300));
+ playDelay = (fadeModus == true) ? ((delay*1000)+(2*fadeDuration)) : (delay*1000);
+ }
+}
+// autoplay extension
+
+// audio extension
+function createSoundManagerScript() {
+ if(typeof soundManager=="undefined") {
+ onerrorSM2();
+ }else {
+ var script=document.createElement('SCRIPT');
+ var tx=document.createTextNode("soundManager.createMovie();");
+ script.appendChild(tx);
+ document.getElementsByTagName("body")[0].appendChild(script);
+ }
+}
+//soundManager.onload = function() {
+function onloadSM2() {
+ if(!isIE) { //(degrade IE)
+ swfUnloaded = false;
+ preloadSounds();
+ }
+}
+//soundManager.onerror = function() {
+function onerrorSM2() {
+ if(typeof soundManager!="undefined") {
+ soundManager.destruct;
+ delete soundManager;
+ }
+ audioSupport = false; swfUnloaded = true;
+ if(audioError && !isIE && !isOp) {
+ var dv = document.createElement('div'); dv.id = "guru";
+ var d2=document.createElement('div'); dv.appendChild(d2);
+ var tx=document.createTextNode('Guru Meditation - SoundManager failed to load/initialize!');
+ d2.appendChild(tx); document.getElementById('slide0').appendChild(dv);
+ }
+}
+function audioSetup() {
+ if(sound[0]) {
+ playSound(0);
+ }else if(sound[bgSoundItem] && !sound[0]) {
+ playSound(bgSoundItem);
+ }
+}
+function fadeoutSound(ids, option) {
+ if(curSoundID >= 0 && !swfUnloaded) {
+ if(isNaN(ids)) {
+ if(ids == "bgSound") {
+ var cnum = parseInt(bgSoundItem);
+ }else {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && ids == sound[i]["id"]) {
+ var cnum = i;
+ break;
+ }
+ }
+ }
+ }else {
+ var cnum = ids;
+ ids = sound[cnum]["id"];
+ }
+ var vol = getMaxVolume(sound[cnum]["volume"]);
+ var millisec = fadeDuration;
+ var speed = Math.round(millisec / vol);
+ var timer = 0;
+ for(var i = vol; i > 0; i--) {
+ setTimeout("fadeout(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ if(option) setTimeout("stopSound('"+ids+"')",millisec);
+ }
+}
+function fadeout(volume, id) {
+ soundManager.setVolume(id,volume);
+}
+function stopSound(ids) {
+ var sid;
+ if(isNaN(ids)) {
+ sid = ids;
+ }else if(sound[ids]) {
+ sid = sound[ids]["id"];
+ }
+ if(sid!='' && curSoundID >= 0) {
+ soundManager.stop(sid);
+ curSoundID = -1;
+ }
+}
+function toggleSounds() {
+ if(audioSupport && !swfUnloaded) {
+ stopAllSounds();
+ }else if (!audioSupport && !swfUnloaded) {
+ allowSounds();
+ }
+}
+function allowSounds() {
+ if(!swfUnloaded) {
+ audioSupport = true;
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ currentSlide();
+ }
+}
+function stopAllSounds() {
+ if(curSoundID >= 0) {
+ stopSound(curSoundID);
+ }else {
+ soundManager.stopAll();
+ curSoundID = -1;
+ }
+ audioSupport = false;
+ var obj = document.getElementById('audio'); changeClass(obj,'isoff');
+ currentSlide();
+}
+function playSound(id) {
+ if(audioSupport && !swfUnloaded) {
+ var url, sid, vol, lps, cnum;
+ if(isNaN(id)) {
+ sid = id;
+ if(sid == "bgSound") {
+ cnum = parseInt(bgSoundItem);
+ }else {
+ cnum = getSoundID(id);
+ }
+ }else {
+ cnum = parseInt(id);
+ if(sound[cnum]) sid = sound[cnum]["id"];
+ }
+ if(sound[cnum] && sound[cnum]["url"]!='' && sid!=''){
+ url = sound[cnum]["url"];
+ vol = (sound[cnum]["volume"]!='')?getMaxVolume(sound[cnum]["volume"]):getMaxVolume(100);
+ lps = (sound[cnum]["loops"])?true:false;
+ if(lps) {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){soundManager.play(sid,{volume:getMaxVolume(sound[cnum]["volume"])});}});
+ }else {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){curSoundID=-1;}});
+ }
+ }
+ }
+}
+function getSoundID(str) {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && str == sound[i]["id"]) {
+ var id = i;
+ break;
+ }
+ }
+ return id;
+}
+function setVolume() {
+ var vol = document.getElementById('volumelist');
+ if(audioSupport && !swfUnloaded) {
+ audioVolume = parseInt(vol.value);
+ if(curSoundID >= 0) {
+ if(sound[curSoundID]) {
+ var sid = sound[curSoundID]["id"];
+ var vid = getMaxVolume(sound[curSoundID]["volume"]);
+ soundManager.setVolume(sid,vid);
+ }
+ }
+ }
+}
+function getMaxVolume(value) {
+ if(audioVolume>0) {var factor = audioVolume/100;}else {var factor = 0;}
+ return Math.max(0,Math.min(parseInt(value*factor),audioVolume));
+}
+function preloadSounds() {
+ var temp = ''; var parm = ''; var t = ''; var cl = '';
+ var objects = document.getElementsByTagName('object');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].type.toLowerCase() == 'audio/mp3' && objects[i].data != '') {
+ objects[i].width = 0; objects[i].height = 0;
+ if(objects[i].parentNode.tagName == 'DIV') {
+ cl = objects[i].parentNode.className.toLowerCase();
+ if(cl == 'presentation' || cl == 'slide') {
+ if(cl == 'presentation') {
+ t = parseInt(bgSoundItem);
+ }else {
+ t = parseInt(objects[i].parentNode.id.slice(5, objects[i].parentNode.id.length));
+ }
+ sound[t] = new Object();
+ if(t < bgSoundItem) {
+ sound[t]["id"] = objects[i].parentNode.id;
+ }else {
+ sound[t]["id"] = "bgSound";
+ }
+ sound[t]["url"] = objects[i].data;
+ sound[t]["volume"] = 100; sound[t]["loops"] = false;
+ if(objects[i].archive != '') {
+ parm = objects[i].archive.toLowerCase().split(',');
+ for (var j=0; j < parm.length; j++) {
+ if(parm[j] == 'loop') sound[t]["loops"] = true;
+ if(parm[j].search(/^volume/) != -1) {
+ var tmp = parm[j].split(':');
+ sound[t]["volume"] = parseInt(tmp[1]);
+ }
+ }
+ }
+ soundManager.createSound(sound[t]["id"],sound[t]["url"]);
+ }
+ }
+ }
+ }
+}
+// audio extension
+
+// help extension
+function createHelpReq() {
+ if(!document.getElementById("HelpReq")) {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "HelpReq";
+ if (pg.addEventListener) {
+ pg.addEventListener("onclick",dumpHelpReq,false);
+ } else if (pg.attachEvent) {
+ pg.attachEvent("onclick",dumpHelpReq);
+ }
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=90)";
+ } else {
+ pg.style.opacity = 0.9;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(64,64,64)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/help.jpg)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+ if(document.getElementById("HelpReq")) {
+ helpmode = true;
+ }
+ }
+}
+function dumpHelpReq() {
+ if(document.getElementById("HelpReq")) {
+ document.body.removeChild(document.getElementById('HelpReq'));
+ helpmode = false;
+ }
+}
+// help extension
+
+//DEBUG
+function ConsoleLog(value) {
+ if(window.console) {
+ window.console.log(value);
+ }
+}
+//DEBUG
+
+document.write('<style type="text/css" media="screen" id="blockStyle">.presentation, .layout {display: none; }</style>');
+
+if(!isIE && !isOp) {
+ document.write('<script type="text/javascript" src="'+s5Path+'ui/audio_support/soundmanager2.js"></script>');
+ if(typeof soundManager!="undefined") {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'audioDebug') {
+ var audioDebug = (allMetas[i].content == "true") ? true : false;
+ soundManager.defaultOptions.debugMode = audioDebug;
+ }
+ }
+ }
+}
+
+window.onload = createSlideShow;
+window.onresize = function(){setTimeout('windowChange()',5);} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/sun.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/sun.png
new file mode 100644
index 000000000..f06b1d393
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/sun.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/toggle_link.png
new file mode 100644
index 000000000..4588e2514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/toggle_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/toggle_over.png
new file mode 100644
index 000000000..400f613b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/toggle_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/volume_link.png
new file mode 100644
index 000000000..f362acd1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/volume_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/wrap.css
new file mode 100644
index 000000000..a37315552
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/wrap.css
@@ -0,0 +1,410 @@
+/********************************************************************
+Screen and Print Styles for the Wrap Plugin
+********************************************************************/
+
+/* tables in columns and boxes should span the whole width */
+.wrap_column table,
+.wrap_left table, .wrap_right table, .wrap_center table,
+.wrap_box table,
+.wrap_info table, .wrap_important table, .wrap_alert table, .wrap_tip table, .wrap_help table, .wrap_todo table, .wrap_download table {
+ width: 100%;
+}
+/* emulate a headline */
+.wrap_column em strong,
+.wrap_left em strong, .wrap_right em strong, .wrap_center em strong,
+.wrap_box em strong,
+.wrap_info em strong, .wrap_important em strong, .wrap_alert em strong, .wrap_tip em strong, .wrap_help em strong, .wrap_todo em strong, .wrap_download em strong {
+ font-size: 130%;
+ font-weight: bold;
+ font-style: normal;
+ display: block;
+}
+/* emulate a bigger headline with a bottom border */
+.wrap_column em strong em.u,
+.wrap_left em strong em.u, .wrap_right em strong em.u, .wrap_center em strong em.u,
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ font-size: 115%;
+ border-bottom: 1px solid __border__;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+}
+/* different bigger headline for safety notes */
+.wrap_danger em strong em.u, .wrap_warning em strong em.u, .wrap_caution em strong em.u, .wrap_notice em strong em.u, .wrap_safety em strong em.u {
+ font-size: 115%;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+ text-transform: uppercase;
+ border-bottom-width: 0;
+}
+/* change border colour of emulated headlines inside boxes to something more neutral
+ (to match all the different background colours) */
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ border-bottom-color: #999;
+}
+
+
+/* columns
+********************************************************************/
+
+.wrap_left,
+.wrap_column {
+ float: left;
+ margin-right: 1.5em;
+}
+.wrap_right {
+ float: right;
+ margin-left: 1.5em;
+}
+.wrap_center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+/*
+.wrap_column,
+.wrap_left,
+.wrap_right {
+ overflow: hidden;
+}
+*/
+.wrap_container {
+ margin-right: -1.5em;
+}
+
+
+/* alignments
+********************************************************************/
+
+.wrap_leftalign {
+ text-align: left;
+}
+.wrap_centeralign {
+ text-align: center;
+}
+.wrap_rightalign {
+ text-align: right;
+}
+.wrap_justify {
+ text-align: justify;
+}
+
+
+/* box
+********************************************************************/
+
+/* see styles for boxes and notes with icons in style.css */
+
+/*____________ rounded corners ____________*/
+/* (only for modern browsers) */
+
+div.wrap_round {
+ border-radius: 20px;
+ -moz-border-radius: 20px;
+ -webkit-border-radius: 20px;
+ -khtml-border-radius: 20px;
+}
+span.wrap_round {
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -khtml-border-radius: 2px;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_lo {
+ color: __text_neu__;
+ font-size: 85%;
+}
+div.wrap_em {
+ color: #c00;
+ font-weight: bold;
+}
+
+/* see styles for highlighted text in style.css */
+
+
+/* typography
+********************************************************************/
+
+/*____________ fonts ____________*/
+
+div.wrap_sansserif {
+ font-family: Verdana,Tahoma,Geneva,"DejaVu Sans","Bitstream Vera Sans","Liberation Sans", Arial,Helvetica,FreeSans,"Liberation Sans","Nimbus Sans L", sans-serif;
+}
+div.wrap_serif {
+ font-family: Georgia,Garamond,"Palatino Linotype","Book Antiqua",Palatino,Palladio,"URW Palladio L","Liberation Serif",Didot,Gentium,"Bitstream Charter","Century Schoolbook L", "Times New Roman",Times,"Nimbus Roman No9 L","FreeSerif", serif;
+}
+div.wrap_monospace {
+ font-family: Courier,"Courier New",FreeMono,"Nimbus Mono L","Liberation Mono", "Lucida Console",Monaco,"DejaVu Sans Mono","Bitstream Vera Sans Mono", monospace;
+}
+
+/*____________ font size ____________*/
+
+div.wrap_bigger {
+ font-size: 125%;
+}
+div.wrap_muchbigger {
+ font-size: 200%;
+}
+div.wrap_smaller {
+ font-size: 75%;
+}
+
+/*____________ font colours ____________*/
+
+div.wrap_fgred {
+ color: #900;
+}
+div.wrap_fggreen {
+ color: #090;
+}
+div.wrap_fgblue {
+ color: #009;
+}
+div.wrap_fgcyan {
+ color: #099;
+}
+div.wrap_fgviolet {
+ color: #909;
+}
+div.wrap_fgyellow {
+ color: #990;
+}
+div.wrap_fggrey {
+ color: #666;
+}
+div.wrap_fgblack {
+ color: #000;
+}
+
+/* see styles for background colours and white font colour in style.css */
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ indent ____________*/
+
+div.wrap_indent {
+ padding-left: 1.5em;
+}
+
+/*____________ outdent ____________*/
+
+div.wrap_outdent {
+ margin-left: -1.5em;
+}
+
+/*____________ word wrapping in pre ____________*/
+
+divdiv.wrap_prewrap pre {
+ white-space: pre-wrap;
+ word-wrap: break-word;/* for IE < 8 */
+ /* white-space: -moz-pre-wrap; for FF < 3 */
+}
+
+/*____________ spoiler ____________*/
+
+divdiv.wrap_spoiler {
+ margin-bottom: 1.5em;
+}
+/* see rest of spoiler styles in style.css */
+
+/*____________ clear float ____________*/
+
+div.wrap_clear {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ font-size: 1px;
+ visibility: hidden;
+ overflow: hidden;
+}
+
+/*____________ hide ____________*/
+
+div.wrap_hide {
+ display: none;
+}
+
+
+/* STYLE.CSS */
+
+/* box
+********************************************************************/
+
+.wrap_box {
+ background: __background_alt__;
+ color: __text__;
+/*
+ overflow: hidden;
+*/
+}
+div.wrap_box,
+div.wrap_danger, div.wrap_warning, div.wrap_caution, div.wrap_notice, div.wrap_safety {
+ padding: 1em 1em .5em;
+ margin-bottom: 1.5em;
+}
+span.wrap_box,
+span.wrap_danger, span.wrap_warning, span.wrap_caution, span.wrap_notice, span.wrap_safety {
+ padding: 0 .3em;
+}
+
+/*____________ notes with icons ____________*/
+
+/* general styles for all note divs */
+div.wrap_info, div.wrap_important, div.wrap_alert, div.wrap_tip, div.wrap_help, div.wrap_todo, div.wrap_download {
+ padding: 1em 1em .5em 70px;
+ margin-bottom: 1.5em;
+ min-height: 68px;
+ background-position: 10px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html div.wrap_info, * html div.wrap_important, * html div.wrap_alert, * html div.wrap_tip, * html div.wrap_help, * html div.wrap_todo, * html div.wrap_download {
+ height: 68px;
+}
+/* general styles for all note spans */
+span.wrap_info, span.wrap_important, span.wrap_alert, span.wrap_tip, span.wrap_help, span.wrap_todo, span.wrap_download {
+ padding: 0 2px 0 20px;
+ min-height: 20px;
+ background-position: 2px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html span.wrap_info, * html span.wrap_important, * html span.wrap_alert, * html span.wrap_tip, * html span.wrap_help, * html span.wrap_todo, * html span.wrap_download {
+ height: 20px;
+}
+
+/*____________ info ____________*/
+.wrap_info { background-color: #d1d7df; }
+div.wrap_info { background-image: url(../../../wrap/images/note/48/info.png); }
+span.wrap_info { background-image: url(../../../wrap/images/note/16/info.png); }
+
+/*____________ important ____________*/
+.wrap_important { background-color: #ffd39f; }
+div.wrap_important { background-image: url(../../../wrap/images/note/48/important.png); }
+span.wrap_important { background-image: url(../../../wrap/images/note/16/important.png); }
+
+/*____________ alert ____________*/
+.wrap_alert { background-color: #ffbcaf; }
+div.wrap_alert { background-image: url(../../../wrap/images/note/48/alert.png); }
+span.wrap_alert { background-image: url(../../../wrap/images/note/16/alert.png); }
+
+/*____________ tip ____________*/
+.wrap_tip { background-color: #fff79f; }
+div.wrap_tip { background-image: url(../../../wrap/images/note/48/tip.png); }
+span.wrap_tip { background-image: url(../../../wrap/images/note/16/tip.png); }
+
+/*____________ help ____________*/
+.wrap_help { background-color: #dcc2ef; }
+div.wrap_help { background-image: url(../../../wrap/images/note/48/help.png); }
+span.wrap_help { background-image: url(../../../wrap/images/note/16/help.png); }
+
+/*____________ todo ____________*/
+.wrap_todo { background-color: #c2efdd; }
+div.wrap_todo { background-image: url(../../../wrap/images/note/48/todo.png); }
+span.wrap_todo { background-image: url(../../../wrap/images/note/16/todo.png); }
+
+/*____________ download ____________*/
+.wrap_download { background-color: #d6efc2; }
+div.wrap_download { background-image: url(../../../wrap/images/note/48/download.png); }
+span.wrap_download { background-image: url(../../../wrap/images/note/16/download.png); }
+
+
+/*____________ safety notes ____________*/
+
+.wrap_danger {
+ background-color: #c00;
+ color: #fff;
+}
+.wrap_warning {
+ background-color: #f60;
+ color: #000;
+}
+.wrap_caution {
+ background-color: #ff0;
+ color: #000;
+}
+.wrap_notice {
+ background-color: #06f;
+ color: #fff;
+}
+.wrap_safety {
+ background-color: #090;
+ color: #fff;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_hi {
+ background-color: #ff9;
+}
+
+/* typography
+********************************************************************/
+
+/*____________ font colours ____________*/
+
+div.wrap_fgwhite {
+ color: #fff;
+}
+
+/*____________ background colours ____________*/
+
+div.wrap_bgred {
+ background-color: #fcc;
+}
+div.wrap_bggreen {
+ background-color: #cfc;
+}
+div.wrap_bgblue {
+ background-color: #ccf;
+}
+div.wrap_bgcyan {
+ background-color: #9ff;
+}
+div.wrap_bgviolet {
+ background-color: #f9f;
+}
+div.wrap_bgyellow {
+ background-color: #ff9;
+}
+div.wrap_bggrey {
+ background-color: #ccc;
+}
+div.wrap_bgwhite {
+ background-color: #fff;
+}
+div.wrap_bgblack {
+ background-color: #000;
+}
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ spoiler ____________*/
+
+div.wrap_spoiler {
+ background-color: __background__ !important;
+ color: __background__ !important;
+ border: 1px dotted red;
+}
+
+/*____________ only print ____________*/
+
+div.wrap_onlyprint {
+ display: none;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/zero_link.png
new file mode 100644
index 000000000..5610884d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/zero_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/zero_over.png
new file mode 100644
index 000000000..3a14a577e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/zero_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/LEEME.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/LEEME.txt
new file mode 100755
index 000000000..db32b3854
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/LEEME.txt
@@ -0,0 +1,31 @@
+TANGO
+
+Tema para S5, creado originalmente por jEsuSdA 8)
+http://www.jesusda.com
+
+Más temas en: http://www.jesusda.com/projects/presentaciones_s5
+
+
+
+Para customizar este tema modifica el archivo CSS:
+
+s5-ultraviolet/ui/default/pretty.css
+
+
+
+Los archivos gráficos referentes al tema están en la carpeta:
+
+/ui/default/pics
+
+
+Puedes personalizar el favicon copiando el tuyo en la carpeta:
+
+/ui/default/pics
+
+con el nombre favicon.ico
+
+
+
+Para cualquier sugerencia e idea, por favor, contacta conmigo a través de mi web. ;)
+
+--jEsuSdA 8) \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/audio_link.png
new file mode 100644
index 000000000..daa740c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/audio_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/audio_on.png
new file mode 100644
index 000000000..cd590aae9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/audio_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/audio_over.png
new file mode 100644
index 000000000..cf537a008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/audio_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/auto_link.png
new file mode 100644
index 000000000..1c2ca4817
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/auto_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/auto_on.png
new file mode 100644
index 000000000..4b0c923b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/auto_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/auto_over.png
new file mode 100644
index 000000000..dbea88975
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/auto_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/backgrnd.png
new file mode 100644
index 000000000..0e48413d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/backgrnd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/blank.gif
new file mode 100755
index 000000000..75b945d25
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/blank.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/delay_link.png
new file mode 100644
index 000000000..c4d99cd57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/delay_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/exit_link.png
new file mode 100644
index 000000000..1bfd38790
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/exit_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/exit_over.png
new file mode 100644
index 000000000..0fdd1c605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/exit_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/fade_link.png
new file mode 100644
index 000000000..482e4d53e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/fade_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/fade_on.png
new file mode 100644
index 000000000..e12561fb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/fade_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/fade_over.png
new file mode 100644
index 000000000..fb8943c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/fade_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/footer.jpg
new file mode 100644
index 000000000..49370dbba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/footer.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/framing.css
new file mode 100755
index 000000000..14d8509e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/framing.css
@@ -0,0 +1,23 @@
+/* The following styles size, place, and layer the slide components.
+ Edit these if you want to change the overall slide layout.
+ The commented lines can be uncommented (and modified, if necessary)
+ to help you with the rearrangement process. */
+
+/* target = 1024x768 */
+
+div#header, div#footer, .slide {width: 100%; top: 0; left: 0;}
+div#header {top: 0; height: 3em; z-index: 1;}
+div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;}
+.slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;}
+div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;}
+div#controls form {position: absolute; bottom: 0; right: 0; width: 100%;
+ margin: 0;}
+#currentSlide {position: absolute; width: 10%; left: 45%; bottom: 1em; z-index: 10;}
+html>body #currentSlide {position: fixed;}
+
+/*
+div#header {background: #FCC;}
+div#footer {background: #CCF;}
+div#controls {background: #BBD;}
+div#currentSlide {background: #FFC;}
+*/
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/header.png
new file mode 100644
index 000000000..929dabba1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/iepngfix.htc
new file mode 100755
index 000000000..bba2db756
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/iepngfix.htc
@@ -0,0 +1,42 @@
+<public:component>
+<public:attach event="onpropertychange" onevent="doFix()" />
+
+<script>
+
+// IE5.5+ PNG Alpha Fix v1.0 by Angus Turnbull http://www.twinhelix.com
+// Free usage permitted as long as this notice remains intact.
+
+// This must be a path to a blank image. That's all the configuration you need here.
+var blankImg = 'ui/default/blank.gif';
+
+var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
+
+function filt(s, m) {
+ if (filters[f]) {
+ filters[f].enabled = s ? true : false;
+ if (s) with (filters[f]) { src = s; sizingMethod = m }
+ } else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")';
+}
+
+function doFix() {
+ if ((parseFloat(navigator.userAgent.match(/MSIE (\S+)/)[1]) < 5.5) ||
+ (event && !/(background|src)/.test(event.propertyName))) return;
+
+ if (tagName == 'IMG') {
+ if ((/\.png$/i).test(src)) {
+ filt(src, 'image'); // was 'scale'
+ src = blankImg;
+ } else if (src.indexOf(blankImg) < 0) filt();
+ } else if (style.backgroundImage) {
+ if (style.backgroundImage.match(/^url[("']+(.*\.png)[)"']+$/i)) {
+ var s = RegExp.$1;
+ style.backgroundImage = '';
+ filt(s, 'crop');
+ } else filt();
+ }
+}
+
+doFix();
+
+</script>
+</public:component> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/index.html
new file mode 100755
index 000000000..39d8f46ad
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/index.html
@@ -0,0 +1,100 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es-es" >
+
+
+<head>
+
+ <title>[Título de la presentación aquí]</title>
+ <!-- metadata -->
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta http-equiv="content-language" content="es" />
+
+ <!--titulo y datos de publicación de la presentación-->
+
+ <meta name="description" content="[Título de la presentación aquí]" />
+
+ <meta name="keywords" content="[keywords aquí]" />
+ <meta name="presdate" content="[Aquí la fecha de publicación en formato aaaammdd]" />
+
+ <meta name="author" lang="es" content="[Nombre del autor de la presentación aquí]" />
+ <meta name="company" content="[Organización del autor de la presentación aquí]" />
+
+ <link rel="shortcut icon" href="ui/default/pics/favicon.ico" />
+
+ <meta name="generator" content="S5" />
+ <meta name="progid" content="quanta+" />
+ <meta name="version" content="S5 · jEsuSdA · 1.1" />
+ <!--Versión adaptada del estandard S5 1.1 por jEsuSdA-->
+
+ <meta name="robots" content="all" />
+
+ <!-- configuration parameters -->
+ <meta name="defaultView" content="slideshow" />
+ <meta name="controlVis" content="hidden" />
+
+ <!-- style sheet links -->
+ <link rel="stylesheet" href="ui/default/slides.css" type="text/css" media="projection" id="slideProj" />
+ <link rel="stylesheet" href="ui/default/outline.css" type="text/css" media="screen" id="outlineStyle" />
+ <link rel="stylesheet" href="ui/default/print.css" type="text/css" media="print" id="slidePrint" />
+ <link rel="stylesheet" href="ui/default/opera.css" type="text/css" media="projection" id="operaFix" />
+
+ <!-- S5 JS -->
+ <script src="ui/default/slides.js" type="text/javascript"></script>
+
+</head>
+
+<body>
+
+ <div class="layout">
+ <div id="controls"><!-- NO EDITAR --></div>
+ <div id="currentSlide"><!-- NO EDITAR --></div>
+
+ <div id="header">
+ <div id="logo"><!-- NO EDITAR --></div>
+ </div>
+
+ </div>
+
+ <div id="footer">
+ <h1>[Lugar/Fecha de la presentación aquí]</h1>
+ <h2>[Título de la presentación aquí]</h2>
+ </div>
+
+
+
+
+<div class="presentation">
+
+ <div class="slide">
+ <h1>[Título de la presentación aquí]</h1>
+ <h3>[Nombre del ponente aquí]</h3>
+ <h4>[Datos extra aquí]</h4>
+ </div>
+
+
+ <div class="slide">
+ <h1>[Título de la diapositiva]</h1>
+
+ <ul>
+ <li>[Punto uno]</li>
+ <li>[Punto dos]</li>
+ <li>[Punto tres]</li>
+ <li>[Punto cuatro]</li>
+ <li>[Punto cinco]</li>
+ </ul>
+
+ <div class="handout">
+
+ [Añade aquí cualquier nota o información que desees mostrar en la versión impresa, pero no en la versión en pantalla]
+
+ </div>
+
+ </div>
+ <!--fin slide-->
+
+</div>
+
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/last_link.png
new file mode 100644
index 000000000..4f158d35d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/last_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/last_over.png
new file mode 100644
index 000000000..a7b629995
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/last_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/list_link.png
new file mode 100644
index 000000000..7e299bb50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/list_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/loop_link.png
new file mode 100644
index 000000000..41e12cb15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/loop_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/loop_on.png
new file mode 100644
index 000000000..2ffcacae1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/loop_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/loop_over.png
new file mode 100644
index 000000000..9fe420153
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/loop_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/next_link.png
new file mode 100644
index 000000000..2b9f44c4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/next_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/next_over.png
new file mode 100644
index 000000000..25788124d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/next_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/notes_link.png
new file mode 100644
index 000000000..bb4a8ae37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/notes_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/notes_over.png
new file mode 100644
index 000000000..c6bfe69fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/notes_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/opera.css
new file mode 100755
index 000000000..9e9d2a3c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/opera.css
@@ -0,0 +1,7 @@
+/* DO NOT CHANGE THESE unless you really want to break Opera Show */
+.slide {
+ visibility: visible !important;
+ position: static !important;
+ page-break-before: always;
+}
+#slide0 {page-break-before: avoid;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/outline.css
new file mode 100755
index 000000000..62db519ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/outline.css
@@ -0,0 +1,15 @@
+/* don't change this unless you want the layout stuff to show up in the outline view! */
+
+.layout div, #footer *, #controlForm * {display: none;}
+#footer, #controls, #controlForm, #navLinks, #toggle {
+ display: block; visibility: visible; margin: 0; padding: 0;}
+#toggle {float: right; padding: 0.5em;}
+html>body #toggle {position: fixed; top: 0; right: 0;}
+
+/* making the outline look pretty-ish */
+
+#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
+#slide0 h1 {padding-top: 1.5em;}
+.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em;
+ border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
+#toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pause_link.png
new file mode 100644
index 000000000..2561cb4a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pause_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pause_on.png
new file mode 100644
index 000000000..2fc9c4a4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pause_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pause_over.png
new file mode 100644
index 000000000..7a7c80ddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pause_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/back-handout-print.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/back-handout-print.png
new file mode 100755
index 000000000..9e49dd625
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/back-handout-print.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/back-slide-print.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/back-slide-print.png
new file mode 100755
index 000000000..e8b5f9d82
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/back-slide-print.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/back_console.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/back_console.png
new file mode 100755
index 000000000..ac1708379
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/back_console.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/background-foot.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/background-foot.png
new file mode 100755
index 000000000..c44e44f2c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/background-foot.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/background-head.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/background-head.png
new file mode 100755
index 000000000..713900b92
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/background-head.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/background-main.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/background-main.png
new file mode 100755
index 000000000..c7e1d71b7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/background-main.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/favicon.ico b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/favicon.ico
new file mode 100755
index 000000000..138568ed4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/favicon.ico
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/logo.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/logo.png
new file mode 100755
index 000000000..662b919f1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/logo.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/table-background.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/table-background.png
new file mode 100755
index 000000000..89a7e4fa2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/table-background.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/table-header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/table-header.png
new file mode 100755
index 000000000..4c3a86b44
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/table-header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pretty.css
new file mode 100755
index 000000000..8e807b108
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pretty.css
@@ -0,0 +1,583 @@
+/* Following are the presentation styles -- edit away! */
+
+body
+{
+ background: #FFF url(pics/background-main.png) top left repeat;
+ color: #000; font-size: 2em;
+/* font-family: Trebuchet MS, Arial, Helvetica, sans-serif; */
+ font-family: Arial, Helvetica, sans-serif;
+
+}
+
+:link, :visited
+{
+ text-decoration: none;
+ color: #00C;
+}
+
+
+
+h1, h2, h3, h4
+{
+ font-size: 100%;
+ margin: 0;
+ padding: 0;
+ font-weight: inherit;
+}
+
+h1 abbr
+{
+ font-variant: small-caps;
+}
+
+ul, pre
+{
+ margin: 0;
+ line-height: 1em;
+}
+
+html, body
+{
+ margin: 0;
+ padding: 0;
+}
+
+blockquote, q
+{
+ font-style: italic;
+}
+
+blockquote
+{
+ padding: 0 2em 0.5em;
+ margin: 0 1.5em 0.5em;
+ text-align: center;
+ font-size: 1em;
+}
+
+blockquote p
+{
+ margin: 0;
+}
+
+blockquote i
+{
+ font-style: normal;
+}
+
+blockquote b
+{
+ display: block;
+ margin-top: 0.5em;
+ font-weight: normal;
+ font-size: smaller;
+ font-style: normal;
+}
+
+blockquote b i
+{
+ font-style: italic;
+}
+
+kbd
+{
+ font-weight: bold;
+ font-size: 1em;
+}
+
+sup
+{
+ font-size: smaller;
+ line-height: 1px;
+}
+
+
+ul.urls
+{
+ list-style: none;
+ display: inline;
+ margin: 0;
+}
+
+.urls li
+{
+ display: inline;
+ margin: 0;
+}
+
+.notes
+{
+ display: none;
+}
+
+.external
+{
+ border-bottom: 1px dotted gray;
+}
+
+html>body .external
+{
+ border-bottom: none;
+}
+
+.external:after
+{
+ content: " \274F";
+ font-size: smaller;
+ color: #fff;
+}
+
+.incremental, .incremental *, .incremental *:after
+{
+ color: #fff;
+ visibility: visible;
+}
+
+img.incremental
+{
+ visibility: hidden;
+}
+
+.slide .current
+{
+ color: #fff;
+}
+
+
+/* ============== */
+/* === SLIDES === */
+/* ============== */
+
+.slide code
+{
+ padding: 2px 0.25em;
+ font-weight: bold;
+}
+
+.slide code.bad, code del
+{
+ color: red;
+}
+
+.slide code.old
+{
+ color: silver;
+}
+
+.slide pre
+{
+
+ color: #ffca00;
+ display:block;
+ font-weight:bold;
+ font-family: Arial, Sans-Serif !important;
+ font-size:41.5%;
+ line-height:1.5em;
+ background:#2e3436 url(pics/back_console.png) right bottom no-repeat ;
+ border:5px solid #ccc;
+ padding:1em 1em 1em 1em;
+
+
+}
+
+.slide pre code
+{
+ font-family: Arial, Sans-Serif !important;
+ display:block;
+ margin:0;
+ padding:0;
+}
+
+
+
+.slide ul
+{
+ margin-left: 5%;
+ margin-right: 7%;
+ list-style: disc;
+}
+
+.slide li
+{
+ margin-top: 0.75em;
+ margin-right: 0;
+}
+
+.slide ul ul
+{
+ line-height: 1;
+}
+
+.slide ul ul li
+{
+ margin: .2em;
+ font-size: 85%;
+ list-style: square;
+}
+
+.slide img.leader
+{
+ display: block;
+ margin: 0 auto;
+}
+
+
+/* ========================= */
+/* === HEADER AND FOOTER === */
+/* ========================= */
+
+div#logo
+{
+ position:absolute;
+ top:0%;
+ right:0%;
+ background:url(pics/logo.png) 50% 50% no-repeat;
+ height:200%;
+ width:150px;
+}
+
+div#header, div#footer
+{
+ background: #a80231;
+ color: #FFF;
+}
+
+
+div#header
+{
+ background:#7ea1c9 url(pics/background-head.png) bottom left repeat-x;
+ line-height: 1px;
+}
+
+div#footer
+{
+ background:#7ea1c9 url(pics/background-foot.png) top left repeat-x;
+ font-size: 0.5em;
+ font-weight: bold;
+ padding: 1em 0;
+}
+
+
+
+
+
+#footer h1, #footer h2
+{
+ display: block;
+ padding: 0 1em;
+}
+
+#footer h2
+{
+ font-style: italic;
+}
+
+
+
+/* ============== */
+/* === CLASES === */
+/* ============== */
+
+div.long
+{
+ font-size: 0.75em;
+}
+
+.slide h1
+{
+ position: absolute;
+ top: 0.7em;
+ left: 87px;
+ z-index: 1;
+ margin: 0;
+ padding: 0.3em 0 0 50px;
+ white-space: nowrap;
+ font-weight: bold;
+ font-size: 150%/1em;
+
+ text-transform: capitalize;
+ color: #fff;
+ background: transparent;
+}
+
+.slide h3
+{
+ font-size: 130%;
+}
+
+/* ================ */
+/* === CONTROLS === */
+/* ================ */
+
+#currentSlide
+{
+ text-align: center;
+ font-size: 0.6em;
+ font-weight:bold;
+ color: #fff;
+}
+
+#slide0
+{
+ padding-top: 3.5em;
+ font-size: 90%;
+}
+
+#slide0 h1
+{
+ position: static;
+ margin: 1em 0 0;
+ padding: 0;
+/* font: bold 2em Helvetica, sans-serif; */
+ font-weight: bold;
+ font-size:2em;
+ white-space: normal;
+ color: #000;
+ background: transparent;
+}
+
+#slide0 h2
+{
+ font-weight: bold;
+ font-style: italic;
+ font-size: 1em;
+ margin: 0.25em;
+}
+
+#slide0 h3
+{
+ margin-top: 1.5em;
+ font-size: 1.5em;
+}
+
+#slide0 h4
+{
+ margin-top: 0;
+ font-size: 1em;
+}
+
+/* ================ */
+/* === JESUSDA === */
+/* ================ */
+
+.first-pic
+{
+
+ float:right;
+ margin-top:-2em;
+}
+
+/* ================ */
+
+.align-center
+{
+ text-align:center;
+}
+/* ================ */
+
+.float-left , .left-column
+{
+ float:left !important;
+ width:49% !important;
+}
+
+.float-right , .right-column
+{
+ float:right !important;
+ width:49% !important;
+}
+/* ================ */
+.fullscreen
+{
+ z-index:1000 !important;
+ position:fixed !important;
+ top:0;
+ left:0;
+ width:100% !important;
+ height:100% !important;
+
+ background: #fff url(pics/background-main.png) top left no-repeat;
+
+ text-align:center;
+ margin-left:-1.65em;
+
+}
+
+.fullscreen h1
+{
+ display:none;
+}
+
+.rotulo
+{
+ font-size:800%;
+ text-align:center;
+ margin-top:-0.05em;
+
+}
+
+.rotulo2
+{
+ font-size:200%;
+ text-align:center;
+ font-weight:bolder;
+ margin-top:-0.05em;
+
+}
+
+.align-center img
+{
+ margin:auto;
+ text-align:center;
+ margin:0;
+}
+
+/* ========================= */
+/* === TABLAS === */
+/* ========================= */
+
+table
+{
+ background:url(pics/table-background.png) bottom left repeat-x #fff;
+ margin-right:1em;
+ font-size:70%;
+ border:1px solid #31447b !important;
+ border-spacing: 0;
+ text-align:center;
+}
+
+table td
+{
+ padding:0.5em;
+ font-size:90%;
+ border:1px solid #31447b !important;
+ border-spacing: 0;
+ text-align:center;
+}
+
+th
+{
+ background:url(pics/table-header.png) top left repeat-x #7ea1c9;
+ color:#fff;
+}
+
+th a
+{
+ color:#fff !important;
+}
+
+
+
+table caption
+{
+ margin-bottom:1em;
+ margin-top:1em;
+ margin-left:-7em;
+
+
+}
+
+
+display-none
+{
+ display:none;
+}
+
+div#controls {position: absolute; left: 0; bottom: 0; width: 100%; text-align: center; font: bold 1em Verdana, Arial, Helvetica, sans-serif;}
+html>body div#controls {background: transparent; position: fixed; padding: 0; top: auto; text-align: center;}
+#controls #sheet {display: none;}
+#controls #controlForm {height: 32px; width: 100%; text-align: center; vertical-align: middle;}
+#controls #navLinks {border-top: 1px solid #999; overflow: hidden; padding: 0; margin: 0; height: 32px; width: 100%; background-color: #808080; text-align: center; vertical-align: middle; white-space: nowrap;}
+#controls #navLinks ul {margin: 0 auto; padding: 0; height: 32px; width: 500px; white-space: nowrap; text-align: center;}
+#controls #navLinks ul li {list-style: none; display: inline; margin: 0; padding: 0; float: left; height: 32px; width: 32px; text-align: center; background-color: transparent;}
+#controls #navLinks ul li.vr {list-style: none; display: inline; margin: 0px 2px; padding: 0; float: left; height: 32px; width: 1px; text-align: center; background-color: #606060;}
+#controls #navLinks ul li a {margin: 0; padding: 0; float: left; height: 32px; width: 32px; background-color: transparent;}
+
+#controls #navLinks ul li#exit {background: url(exit_link.png) no-repeat top left;}
+#controls #navLinks ul li#exit a:hover {background: url(exit_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#toggle {background: url(toggle_link.png) no-repeat top left;}
+#controls #navLinks ul li#toggle a:hover {background: url(toggle_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#show-notes {background: url(notes_link.png) no-repeat top left;}
+#controls #navLinks ul li#show-notes a:hover {background: url(notes_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#zero {background: url(zero_link.png) no-repeat top left;}
+#controls #navLinks ul li#zero a:hover {background: url(zero_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#prev {background: url(prev_link.png) no-repeat top left;}
+#controls #navLinks ul li#prev a:hover {background: url(prev_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#next {background: url(next_link.png) no-repeat top left;}
+#controls #navLinks ul li#next a:hover {background: url(next_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#last {background: url(last_link.png) no-repeat top left;}
+#controls #navLinks ul li#last a:hover {background: url(last_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#lst {background: url(list_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#fade a.isoff {background: url(fade_link.png) no-repeat top left;}
+#controls #navLinks ul li#fade a.ison {background: url(fade_on.png) no-repeat top right;}
+#controls #navLinks ul li#fade a:hover {background: url(fade_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#audio {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.isoff {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.ison {background: url(audio_on.png) no-repeat top right;}
+#controls #navLinks ul li#audio a:hover {background: url(audio_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#vol {background: url(volume_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#auto a.isoff {background: url(auto_link.png) no-repeat top left;}
+#controls #navLinks ul li#auto a.ison {background: url(auto_on.png) no-repeat top right;}
+#controls #navLinks ul li#auto a:hover {background: url(auto_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#pause a.isoff {background: url(pause_link.png) no-repeat top left;}
+#controls #navLinks ul li#pause a.ison {background: url(pause_on.png) no-repeat top right;}
+#controls #navLinks ul li#pause a:hover {background: url(pause_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#loop a.isoff {background: url(loop_link.png) no-repeat top left;}
+#controls #navLinks ul li#loop a.ison {background: url(loop_on.png) no-repeat top right;}
+#controls #navLinks ul li#loop a:hover {background: url(loop_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#del {background: url(delay_link.png) no-repeat top left;}
+
+#jumplist, #volumelist, #delaylist {padding: 0; margin: 0; width: 32px; height: 32px; cursor: n-resize;}
+
+#guru {position: absolute; visibility: visible; left: 0px; top: 0px; padding: 4px; width: 99%; height: auto; text-align: center; background-color: black; z-index: 10;}
+#guru div {border: solid 3px red; padding: 4px; font-family: monospace; font-size: 60%; width: auto; height: auto; color: red; text-align: center;}
+
+/*
+#currentSlide {white-space: nowrap; text-align: center; margin-bottom: -0.5em; font-size: 0.5em; background-color: transparent; color: #999;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 0; padding: 0; font: bold 2em Verdana, Arial, Helvetica, sans-serif; font-variant: small-caps; text-shadow: 0.1em 0.1em 0.1em #666; white-space: normal; color: #222; background-color: transparent;}
+#slide0 h2 {font: bold italic 1em Arial, Helvetica, sans-serif; margin: 0.25em;}
+#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+*/
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.external {border-bottom: 1px dotted gray;}
+html>body .external {border-bottom: none;}
+.external:after {content: " \274F"; font-size: smaller; color: #999;}
+
+.incremental, .incremental *, .incremental *:after {color: #ccc; visibility: visible;}
+img.incremental, canvas.incremental {visibility: hidden;}
+.slide .current {color: #B02;}
+
+/* diagnostics
+li:after {content: " [" attr(class) "]"; color: #F88;}
+*/
+
+table.piechart, table.barchart, table.linechart { border-spacing: 0.3em 0.15em; }
+table.piechart tr th, table.barchart tr th, table.linechart tr th { white-space: nowrap; }
+table.piechart tr td, table.barchart tr td, table.linechart tr td { vertical-align: top; white-space: nowrap; }
+table.piechart tr td.col, table.barchart tr td.col, table.linechart tr td.col { border-bottom: 1px solid #555; border-right: 1px solid #555; }
+table.fs90 tr td, table.fs90 tr th, div.fs90, pre.fs90, p.fs90 ,ul.fs90 {font-size: 0.9em; }
+table.fs75 tr td, table.fs75 tr th, div.fs75, pre.fs75, p.fs75 ,ul.fs75 {font-size: 0.75em; }
+table.fs66 tr td, table.fs66 tr th, div.fs66, pre.fs66, p.fs66 ,ul.fs66 {font-size: 0.66em; }
+table.fs50 tr td, table.fs50 tr th, div.fs50, pre.fs50, p.fs50 ,ul.fs50 {font-size: 0.5em; }
+
+#soundmanager-debug {position:fixed; top:0px; right:0px; width:30em; height:20em; overflow:auto; border:1px solid red; padding:1em; margin:2em; font-family:"sans serif"; font-size: 12px;color: black; background-color:#f6f6f6; z-index: 100;}
+#soundmanager-debug code {font-size: 11px;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/prev_link.png
new file mode 100644
index 000000000..c31d21350
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/prev_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/prev_over.png
new file mode 100644
index 000000000..6fef4fa52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/prev_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/print.css
new file mode 100755
index 000000000..220083260
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/print.css
@@ -0,0 +1 @@
+/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul { page-break-inside: avoid; visibility: visible !important; } h1 { page-break-after: avoid; } html { width:100%; overflow:hidden; } body { font-size: 12pt; background: white; width:100%; } * { color: black; } #slide0 h1 { font-size: 200%; border: none; margin: 0.5em 0 0.25em; } #slide0 h3 { margin: 0; padding: 0; } #slide0 h4 { margin: 0 0 0.5em; padding: 0; } #slide0 { margin-bottom: 3em; } h1 { border-top: 2pt solid gray; border-bottom: 1px dotted silver; padding:0.2em 0 0.3em 0; } .extra { background: transparent !important; } div.extra, pre.extra, .example { font-size: 10pt; color: #333; } ul.extra a { font-weight: bold; } p.example { display: none; } #header { display: none; } #footer h1 { margin: 0; border-bottom: 1px solid; color: gray; font-style: italic; } #footer h2, #controls { display: none; } div.handout { display:block; border-top: 2px dotted #ccc; background:url(pics/back-handout-print.png) top right no-repeat #fff; min-height:6em; padding-right:6em; margin-bottom:1em; } .slide { display:block; background:url(pics/back-slide-print.png) top right no-repeat #fff; min-height:6em; margin-bottom:1em; } table { display:block; /* display:none; */ font-size:90%; overflow:hidden; margin-top:1em; margin-bottom:1em; } pre , code { margin:0; font-size:1pt; overflow:auto; } img { max-width:100% !important; } /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .layout, .layout * { display: none !important; } \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/s5-core.css
new file mode 100755
index 000000000..86444e041
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/s5-core.css
@@ -0,0 +1,9 @@
+/* Do not edit or override these styles! The system will likely break if you do. */
+
+div#header, div#footer, div#controls, .slide {position: absolute;}
+html>body div#header, html>body div#footer,
+ html>body div#controls, html>body .slide {position: fixed;}
+.handout {display: none;}
+.layout {display: block;}
+.slide, .hideme, .incremental {visibility: hidden;}
+#slide0 {visibility: visible;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/slides.css
new file mode 100755
index 000000000..0786d7dbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/slides.css
@@ -0,0 +1,3 @@
+@import url(s5-core.css); /* required to make the slide show run at all */
+@import url(framing.css); /* sets basic placement and size of slide components */
+@import url(pretty.css); /* stuff that makes the slides look better than blah */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/slides.js
new file mode 100644
index 000000000..510a04c0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/slides.js
@@ -0,0 +1,2812 @@
+// S5 1.3beta7 (18-Apr-2007) advanced version by C. Effenberger
+// Please see http://s5.netzgesta.de/ for more information
+// based on S5 v1.2a1 slides.js -- released into the Public Domain
+// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
+// about all the wonderful and talented contributors to this code!
+// audio extension: soundmanager2 is NOT Public Domain
+// Please see http://www.schillmania.com/projects/soundmanager2/ for information
+
+var undef;
+var slideCSS = '';
+var snum = 0;
+var smax = 1;
+var incpos = 0;
+var number = undef;
+var firstTime = 1;
+var s5mode = true;
+var helpmode = false;
+var defaultView = 'slideshow'; //outline
+var controlVis = 'visible';
+var s5Path = 'lib/plugins/s5reloaded/';
+
+// scalable images extension
+var empx = 0;
+var images = new Array();
+var canvas = new Array();
+var medias = new Array();
+var piecharts = new Array();
+var barcharts = new Array();
+var linecharts = new Array();
+// scalable images extension
+
+// transition extension
+var tranSitions = false;
+var fadeModus = false;
+var fadeDuration = 500;
+var incrDuration = 250;
+var opac = 1;
+var cid = '';
+var nid = '';
+var tid = '';
+var jl = '';
+// transition extension
+
+// autoplay extension
+var autoMatic = false;
+var playLoop = false;
+var playPause = false;
+var autoRun = false;
+var playDelay = 5000;
+var remainDer = 0;
+var incrDelay = 0;
+// autoplay extension
+
+// audio extension
+var sound = new Array();
+var audioSupport = false;
+var audioVolume = 100;
+var audioError = false;
+var swfUnloaded = true;
+var bgSoundItem = 9999;
+var curSoundID = -1;
+// audio extension
+
+// panel extension
+var imgWidth = 32;
+var imgHeight = 32;
+// panel extension
+
+// canvas chart extension
+var canvasSupport = false;
+var ChartData = new Array();
+var colorSlice = new Array();
+var font = document.createElement("img");
+font.setAttribute("src", s5Path+"ui/graphic_support/numeric.png");
+signs = {
+ '0': {sx: 0, sy: 0, sw: 48, sh: 64},
+ '1': {sx: 48, sy: 0, sw: 48, sh: 64},
+ '2': {sx: 96, sy: 0, sw: 48, sh: 64},
+ '3': {sx: 144, sy: 0, sw: 48, sh: 64},
+ '4': {sx: 192, sy: 0, sw: 48, sh: 64},
+ '5': {sx: 240, sy: 0, sw: 48, sh: 64},
+ '6': {sx: 288, sy: 0, sw: 48, sh: 64},
+ '7': {sx: 336, sy: 0, sw: 48, sh: 64},
+ '8': {sx: 384, sy: 0, sw: 48, sh: 64},
+ '9': {sx: 432, sy: 0, sw: 48, sh: 64},
+ '%': {sx: 480, sy: 0, sw: 48, sh: 64},
+ '.': {sx: 528, sy: 0, sw: 24, sh: 64}
+};
+var colorNames= new Array();
+colorNames["black"]="#000000"; colorNames["maroon"]="#800000";
+colorNames["green"]="#008000"; colorNames["olive"]="#808000";
+colorNames["navy"]="#000080"; colorNames["purple"]="#800080";
+colorNames["teal"]="#008080"; colorNames["gray"]="#808080";
+colorNames["silver"]="#C0C0C0"; colorNames["red"]="#FF0000";
+colorNames["lime"]="#00FF00"; colorNames["yellow"]="#FFFF00";
+colorNames["blue"]="#0000FF"; colorNames["fuchsia"]="#FF00FF";
+colorNames["aqua"]="#00FFFF"; colorNames["white"]="#FFFFFF";
+colorNames["aliceblue"]="#F0F8FF"; colorNames["antiquewhite"]="#FAEBD7";
+colorNames["aquamarine"]="#7FFFD4"; colorNames["azure"]="#F0FFFF";
+colorNames["beige"]="#F5F5DC"; colorNames["blueviolet"]="#8A2BE2";
+colorNames["brown"]="#A52A2A"; colorNames["burlywood"]="#DEB887";
+colorNames["cadetblue"]="#5F9EA0"; colorNames["chartreuse"]="#7FFF00";
+colorNames["chocolate"]="#D2691E"; colorNames["coral"]="#FF7F50";
+colorNames["cornflowerblue"]="#6495ED"; colorNames["cornsilk"]="#FFF8DC";
+colorNames["crimson"]="#DC143C"; colorNames["darkblue"]="#00008B";
+colorNames["darkcyan"]="#008B8B"; colorNames["darkgoldenrod"]="#B8860B";
+colorNames["darkgray"]="#A9A9A9"; colorNames["darkgreen"]="#006400";
+colorNames["darkkhaki"]="#BDB76B"; colorNames["darkmagenta"]="#8B008B";
+colorNames["darkolivegreen"]="#556B2F"; colorNames["darkorange"]="#FF8C00";
+colorNames["darkorchid"]="#9932CC"; colorNames["darkred"]="#8B0000";
+colorNames["darksalmon"]="#E9967A"; colorNames["darkseagreen"]="#8FBC8F";
+colorNames["darkslateblue"]="#483D8B"; colorNames["darkslategray"]="#2F4F4F";
+colorNames["darkturquoise"]="#00CED1"; colorNames["darkviolet"]="#9400D3";
+colorNames["deeppink"]="#FF1493"; colorNames["deepskyblue"]="#00BFFF";
+colorNames["dimgray"]="#696969"; colorNames["dodgerblue"]="#1E90FF";
+colorNames["firebrick"]="#B22222"; colorNames["floralwhite"]="#FFFAF0";
+colorNames["forestgreen"]="#228B22"; colorNames["gainsboro"]="#DCDCDC";
+colorNames["ghostwhite"]="#F8F8FF"; colorNames["gold"]="#FFD700";
+colorNames["goldenrod"]="#DAA520"; colorNames["greenyellow"]="#ADFF2F";
+colorNames["honeydew"]="#F0FFF0"; colorNames["hotpink"]="#FF69B4";
+colorNames["indianred"]="#CD5C5C"; colorNames["indigo"]="#4B0082";
+colorNames["ivory"]="#FFFFF0"; colorNames["khaki"]="#F0E68C";
+colorNames["lavender"]="#E6E6FA"; colorNames["lavenderblush"]="#FFF0F5";
+colorNames["lawngreen"]="#7CFC00"; colorNames["lemonchiffon"]="#FFFACD";
+colorNames["lightblue"]="#ADD8E6"; colorNames["lightcoral"]="#F08080";
+colorNames["lightcyan"]="#E0FFFF"; colorNames["lightgoldenrodyellow"]="#FAFAD2";
+colorNames["lightgreen"]="#90EE90"; colorNames["lightgrey"]="#D3D3D3";
+colorNames["lightpink"]="#FFB6C1"; colorNames["lightsalmon"]="#FFA07A";
+colorNames["lightseagreen"]="#20B2AA"; colorNames["lightskyblue"]="#87CEFA";
+colorNames["lightslategray"]="#778899"; colorNames["lightsteelblue"]="#B0C4DE";
+colorNames["lightyellow"]="#FFFFE0"; colorNames["limegreen"]="#32CD32";
+colorNames["linen"]="#FAF0E6"; colorNames["mediumaquamarine"]="#66CDAA";
+colorNames["mediumblue"]="#0000CD"; colorNames["mediumorchid"]="#BA55D3";
+colorNames["ediumpurple"]="#9370D"; colorNames["mediumseagreen"]="#3CB371";
+colorNames["mediumslateblue"]="#7B68EE"; colorNames["mediumspringgreen"]="#00FA9A";
+colorNames["mediumturquoise"]="#48D1CC"; colorNames["mediumvioletred"]="#C71585";
+colorNames["midnightblue"]="#191970"; colorNames["mintcream"]="#F5FFFA";
+colorNames["mistyrose"]="#FFE4E1"; colorNames["moccasin"]="#FFE4B5";
+colorNames["navajowhite"]="#FFDEAD"; colorNames["oldlace"]="#FDF5E6";
+colorNames["olivedrab"]="#6B8E23"; colorNames["orange"]="#FFA500";
+colorNames["orangered"]="#FF4500"; colorNames["orchid"]="#DA70D6";
+colorNames["palegoldenrod"]="#EEE8AA"; colorNames["palegreen"]="#98FB98";
+colorNames["paleturquoise"]="#AFEEEE"; colorNames["palevioletred"]="#DB7093";
+colorNames["papayawhip"]="#FFEFD5"; colorNames["peachpuff"]="#FFDAB9";
+colorNames["peru"]="#CD853F"; colorNames["pink"]="#FFC0CB";
+colorNames["plum"]="#DDA0DD"; colorNames["powderblue"]="#B0E0E6";
+colorNames["rosybrown"]="#BC8F8F"; colorNames["royalblue"]="#4169E1";
+colorNames["saddlebrown"]="#8B4513"; colorNames["salmon"]="#FA8072";
+colorNames["sandybrown"]="#F4A460"; colorNames["seagreen"]="#2E8B57";
+colorNames["seashell"]="#FFF5EE"; colorNames["sienna"]="#A0522D";
+colorNames["skyblue"]="#87CEEB"; colorNames["slateblue"]="#6A5ACD";
+colorNames["slategray"]="#708090"; colorNames["snow"]="#FFFAFA";
+colorNames["springgreen"]="#00FF7F"; colorNames["steelblue"]="#4682B4";
+colorNames["tan"]="#D2B48C"; colorNames["thistle"]="#D8BFD8";
+colorNames["tomato"]="#FF6347"; colorNames["turquoise"]="#40E0D0";
+colorNames["violet"]="#EE82EE"; colorNames["wheat"]="#F5DEB3";
+colorNames["whitesmoke"]="#F5F5F5"; colorNames["yellowgreen"]="#9ACD32";
+var canvas_bgcolor = "";
+var canvas_width = 200;
+var canvas_height = 200;
+var canvas_noshade = 0;
+var canvas_nofill = 0;
+var canvas_noshadow = 0;
+var canvas_htmltext = 0;
+var canvas_imgtext = 0;
+var canvas_notext = 0;
+// canvas chart extension
+
+var s5NotesWindow;
+var s5NotesWindowLoaded = false;
+var previousSlide = 0;
+var presentationStart = new Date();
+var slideStart = new Date();
+
+var countdown = {
+ timer: 0,
+ state: 'pause',
+ start: new Date(),
+ end: 0,
+ remaining: 0
+};
+
+var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
+if(isIE) var notIE7 = parseInt(navigator.appVersion) < 7 ? 1 : 0;
+var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
+var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
+var isS2 = navigator.userAgent.indexOf('Safari') >= 2 ? 1 : 0;
+
+function hasClass(object, className) {
+ if (!object.className) return false;
+ return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
+}
+
+function hasValue(object, value) {
+ if (!object) return false;
+ return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
+}
+
+function removeClass(object,className) {
+ if (!object || !hasClass(object,className)) return;
+ object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
+}
+
+function addClass(object,className) {
+ if (!object || hasClass(object, className)) return;
+ if (object.className) {
+ object.className += ' '+className;
+ } else {
+ object.className = className;
+ }
+}
+
+function changeClass(object,className) {
+ if (!object) return;
+ object.firstChild.className = className;
+}
+
+function GetElementsWithClassName(elementName,className) {
+ var allElements = document.getElementsByTagName(elementName);
+ var elemColl = new Array();
+ for (var i = 0; i< allElements.length; i++) {
+ if (hasClass(allElements[i], className)) {
+ elemColl[elemColl.length] = allElements[i];
+ }
+ }
+ return elemColl;
+}
+
+function isParentOrSelf(element, id) {
+ if (element == null || element.nodeName=='BODY') return false;
+ else if (element.id == id) return true;
+ else return isParentOrSelf(element.parentNode, id);
+}
+
+function nodeValue(node) {
+ var result = "";
+ if (node.nodeType == 1) {
+ var children = node.childNodes;
+ for (var i = 0; i < children.length; ++i) {
+ result += nodeValue(children[i]);
+ }
+ }
+ else if (node.nodeType == 3) {
+ result = node.nodeValue;
+ }
+ return(result);
+}
+
+function slideLabel() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var list = document.getElementById('jumplist');
+ smax = slideColl.length;
+ for (var n = 0; n < smax; n++) {
+ var obj = slideColl[n];
+ var did = 'slide' + n.toString();
+ obj.setAttribute('id',did);
+ var otext = '';
+ var menu = obj.firstChild;
+ if (!menu) continue; // to cope with empty slides
+ while (menu && menu.nodeType == 3) {
+ menu = menu.nextSibling;
+ }
+ if (!menu) continue; // to cope with slides with only text nodes
+ var menunodes = menu.childNodes;
+ for (var o = 0; o < menunodes.length; o++) {
+ otext += nodeValue(menunodes[o]);
+ }
+ list.options[list.length] = new Option(n + ' : ' + otext, n);
+ }
+}
+
+function currentSlide() {
+ var cs, at, fd, ss;
+ if (document.getElementById) {
+ cs = document.getElementById('currentSlide');
+ } else {
+ cs = document.currentSlide;
+ }
+ fd = fadeModus?"F":"&ndash;";
+ ss = audioSupport?"S":"&ndash;";
+ at = (autoMatic?(playPause?"||":(playLoop?"&gt;0":"&gt;|")):"&ndash;&ndash;");
+ cs.innerHTML = '<div id="plink" nowrap="nowrap">' +
+ '<span id="csFade">[' + fd + ss + ']<\/span>&nbsp;' +
+ '<span id="csHere"><strong>' + snum + '<\/strong><\/span>' +
+ '<span id="csSep">\/<\/span>' +
+ '<span id="csTotal">' + (smax-1) + '<\/span>&nbsp;' +
+ '<span id="csAuto">[' + at + ']<\/span>' +
+ '<\/div>';
+
+ if (snum == 0) {
+ cs.style.visibility = 'hidden';
+ } else {
+ cs.style.visibility = 'visible';
+ }
+}
+
+function go(step) {
+ if (document.getElementById('slideProj').disabled || step == 0) return;
+ jl = document.getElementById('jumplist');
+ cid = 'slide' + snum;
+ var ce = document.getElementById(cid);
+ if (incrementals[snum].length > 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ removeClass(incrementals[snum][i], 'current');
+ removeClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ if (step != 'j') {
+ snum += step;
+ lmax = smax - 1;
+ if (snum > lmax) snum = lmax;
+ if (snum < 0) snum = 0;
+ }else {
+ snum = parseInt(jl.value);
+ }
+ nid = 'slide' + snum;
+ var ne = document.getElementById(nid);
+ if (!ne) {
+ ne = document.getElementById('slide0');
+ nid = 'slide0';
+ snum = 0;
+ }
+ if (step < 0) {
+ incpos = incrementals[snum].length
+ }else {
+ incpos = 0;
+ }
+ if (incrementals[snum].length > 0 && incpos == 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ if (hasClass(incrementals[snum][i], 'current')) {
+ incpos = i + 1;
+ }else {
+ addClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ }
+ if (incrementals[snum].length > 0 && incpos > 0) {
+ addClass(incrementals[snum][incpos - 1], 'current');
+ }
+ var guru = document.getElementById('guru');
+ if(guru && snum==0) {
+ guru.style.visibility = 'visible';
+ }else if(guru && snum>0) {
+ guru.style.visibility = 'hidden';
+ }
+ if(tranSitions && s5mode && fadeModus) {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {fadeoutSound(curSoundID,true); } // audio support
+ }
+ changeOpac(0,nid);
+ changeOpac(100,cid);
+ ce.style.visibility = 'visible';
+ shiftOpacity(cid,fadeDuration);
+ window.setTimeout("changeSlides()",fadeDuration);
+ }else {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {stopSound(curSoundID); } // audio support
+ }
+ ce.style.visibility = 'hidden';
+ if (isOp) location.hash = nid;
+ ne.style.visibility = 'visible';
+ finishSlides();
+ }
+}
+
+function changeSlides() {
+ if(nid != cid) changeOpac(100,cid);
+ document.getElementById(cid).style.visibility = 'hidden';
+ document.getElementById(nid).style.visibility = 'visible';
+ if (isOp) location.hash = nid;
+ shiftOpacity(nid,fadeDuration);
+ window.setTimeout("finishSlides()",fadeDuration);
+}
+
+function finishSlides() {
+ jl.selectedIndex = snum;
+ currentSlide();
+ loadNote();
+ permaLink();
+ number = undef;
+ if(sound[getSoundID(nid)]) {
+ playSound(nid); // audio support
+ }else if(sound[bgSoundItem] && curSoundID != bgSoundItem) {
+ playSound(bgSoundItem); // audio support
+ }
+}
+
+function goTo(target) {
+ if (target >= smax || target == snum) return;
+ go(target - snum);
+}
+
+function subgo(step) {
+ if (step > 0) {
+ removeClass(incrementals[snum][incpos - 1],'current');
+ removeClass(incrementals[snum][incpos], 'incremental');
+ if(tranSitions && s5mode && fadeModus) {
+ if(!incrementals[snum][incpos].id) {
+ var tmp = new Date(); tid = "inc" + String(tmp.getTime());
+ incrementals[snum][incpos].id = tid;
+ }else {
+ tid = incrementals[snum][incpos].id;
+ }
+ if(typeof(incrementals[snum][incpos].src) != "undefined" || incrementals[snum][incpos].getContext) {
+ changeOpac(0,tid);
+ addClass(incrementals[snum][incpos],'current');
+ shiftOpacity(tid,incrDuration);
+ setTimeout("nextInc()",incrDuration);
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ } else {
+ incpos--;
+ removeClass(incrementals[snum][incpos],'current');
+ addClass(incrementals[snum][incpos], 'incremental');
+ addClass(incrementals[snum][incpos - 1],'current');
+ loadNote();
+ }
+}
+
+function nextInc() {
+ incpos++;
+ loadNote();
+}
+
+function toggle() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ var guru = document.getElementById('guru');
+ if (!slides.disabled) {
+ stopPlay();
+ if(audioSupport && !swfUnloaded) stopAllSounds();
+ slides.disabled = true;
+ outline.disabled = false;
+ s5mode = false;
+ fontSize(1,'em');
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'visible';
+ }
+ if(guru) guru.style.visibility = 'hidden';
+ } else {
+ slides.disabled = false;
+ outline.disabled = true;
+ s5mode = true;
+ fontScale();
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'hidden';
+ }
+ slideColl[snum].style.visibility = 'visible';
+ if(guru && snum==0) guru.style.visibility = 'visible';
+ }
+}
+
+function showHide(action) {
+ var obj = GetElementsWithClassName('*','hideme')[0];
+ switch (action) {
+ case 's':
+ obj.style.visibility = 'visible';
+ break;
+ case 'h':
+ obj.style.visibility = 'hidden';
+ break;
+ case 'k':
+ if (obj.style.visibility != 'visible') {
+ obj.style.visibility = 'visible';
+ } else {
+ obj.style.visibility = 'hidden';
+ }
+ break;
+ }
+}
+
+function keys(key) {
+ if (!key) {
+ key = event;
+ key.which = key.keyCode;
+ }
+ if (helpmode) {
+ dumpHelpReq();
+ return;
+ }
+ if (key.which == 84 && !isOp) {
+ toggle();
+ return;
+ }
+ if (s5mode) {
+ if (autoMatic) {
+ switch (key.which) {
+ case 70: // f/ading on/off
+ switchFade();
+ break;
+ case 83: // s/ound on/off
+ toggleSounds();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 65: // a/utoplay on/off
+ stopPlay();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 80: // p/ause
+ case 32: // spacebar
+ pausePlay();
+ break;
+ }
+ }else {
+ switch (key.which) {
+ case 8: // backspace = HELP
+ createHelpReq();
+ break;
+ case 10: // return
+ case 13: // enter
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ if(number != undef) {
+ goTo(number);
+ break;
+ }
+ case 32: // spacebar
+ case 34: // page down
+ case 39: // rightkey
+ case 40: // downkey
+ if(number != undef) {
+ go(number);
+ } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ break;
+ case 33: // page up
+ case 37: // leftkey
+ case 38: // upkey
+ if(number != undef) {
+ go(-1 * number);
+ } else if (!incrementals[snum] || incpos <= 0) {
+ go(-1);
+ } else {
+ subgo(-1);
+ }
+ break;
+ case 65: // a/utoplay
+ startPlay();
+ break;
+ case 72: // h
+ case 36: // home
+ goTo(0);
+ break;
+ case 69: // e
+ case 35: // end
+ goTo(smax-1);
+ break;
+ case 70: // f/ade transitions on/off
+ switchFade();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 83: // s/ound support on/off
+ toggleSounds();
+ break;
+ case 27: // escape
+ case 81: // q
+ if(!isOp) byby();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 78: // n
+ createNotesWindow();
+ break;
+ }
+ if (key.which < 48 || key.which > 57) {
+ number = undef;
+ } else {
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
+ }
+ }
+ }
+ return false;
+}
+
+function clicker(e) {
+ number = undef;
+ var target;
+ if (window.event) {
+ target = window.event.srcElement;
+ e = window.event;
+ } else {
+ target = e.target;
+ }
+ if (target.href != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
+ if (!helpmode) {
+ if (!e.which || e.which == 1) {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ }
+ } else {
+ dumpHelpReq();
+ }
+}
+
+function findSlide(hash) {
+ var target = null;
+ var slides = GetElementsWithClassName('*','slide');
+ for (var i = 0; i < slides.length; i++) {
+ var targetSlide = slides[i];
+ if ( (targetSlide.name && targetSlide.name == hash)
+ || (targetSlide.id && targetSlide.id == hash) ) {
+ target = targetSlide;
+ break;
+ }
+ }
+ while(target != null && target.nodeName != 'BODY') {
+ if (hasClass(target, 'slide')) {
+ return parseInt(target.id.slice(5));
+ }
+ target = target.parentNode;
+ }
+ return null;
+}
+
+function slideJump() {
+ if (window.location.hash == null) return;
+ var sregex = /^#slide(\d+)$/;
+ var matches = sregex.exec(window.location.hash);
+ var dest = null;
+ if (matches != null) {
+ dest = parseInt(matches[1]);
+ } else {
+ dest = findSlide(window.location.hash.slice(1));
+ }
+ if (dest != null)
+ go(dest - snum);
+}
+
+function fixLinks() {
+ var thisUri = window.location.href;
+ thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
+ var aelements = document.getElementsByTagName('A');
+ for (var i = 0; i < aelements.length; i++) {
+ var a = aelements[i].href;
+ var slideID = a.match('\#slide[0-9]{1,2}');
+ if ((slideID) && (slideID[0].slice(0,1) == '#')) {
+ var dest = findSlide(slideID[0].slice(1));
+ if (dest != null) {
+ if (aelements[i].addEventListener) {
+ aelements[i].addEventListener("click", new Function("e",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "if (e.preventDefault) e.preventDefault();"), true);
+ } else if (aelements[i].attachEvent) {
+ aelements[i].attachEvent("onclick", new Function("",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "event.returnValue = false;"));
+ }
+ }
+ }
+ }
+}
+
+function externalLinks() {
+ if (!document.getElementsByTagName) return;
+ var anchors = document.getElementsByTagName('a');
+ for (var i=0; i<anchors.length; i++) {
+ var anchor = anchors[i];
+ if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
+ anchor.target = '_blank';
+ addClass(anchor,'external');
+ }
+ }
+}
+
+function permaLink() {
+ document.getElementById('plink').href = window.location.pathname + '#slide' + snum;
+}
+
+function createControls() {
+ var controlsDiv = document.getElementById("controls");
+ if (!controlsDiv) return;
+ var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
+ var hideDiv, hideList = '';
+ if (controlVis == 'hidden') {
+ hideDiv = hider;
+ } else {
+ hideList = hider;
+ }
+ if(isOp) {
+ var str = '';
+ }else {
+ var str = '<a accesskey="t" id="sheet" title="toggle CSS" href="javascript:toggle();">&plusmn;<\/a>';
+ }
+ if(isIE) {
+ var tmp = "move around&xA0;until the color&xA0;change to red!";
+ }else if(isS2) {
+ var tmp = "move around\r\nuntil the color\r\nchange to red!";
+ }else {
+ var tmp = "move around until color change to red!";
+ }
+ if(isIE) {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] for keyboard help!"><ul>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst" style="vertical-align: middle; width: 160px;"><select style="cursor: auto; width: 160px; height: auto;" id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del" style="vertical-align: middle; width: 52px;"><select style="cursor: auto; width: 52px; height: auto;" id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul><\/div><\/form>';
+ }else {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] or double click this area for keyboard help!" ondblclick="createHelpReq();"><ul>' +
+ '<li id="exit"><a href="javascript:byby();" accesskey="q" title="exit Show"><\/a><\/li>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li class="vr"><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst"><a id="list" style="cursor:wait;" title="' + tmp + '"><\/a><select id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="fadeLinks" class="vr"><\/li>' +
+ '<li id="fade"><a class="isoff" href="javascript:switchFade();" accesskey="f" title="Transions"><\/a><\/li>' +
+ '<li id="audioLinks" class="vr"><\/li>' +
+ '<li id="audio"><a class="isoff" href="javascript:toggleSounds();" accesskey="s" title="Sounds" ><\/a><\/li>' +
+ '<li id="vol"><a id="volume" style="cursor:wait;" title="' + tmp + '"><\/a><select id="volumelist" title="select Volume" onchange="setVolume();"><option value="100">100<\/option><option value="90">90<\/option><option value="80">80<\/option><option value="70">70<\/option><option value="60">60<\/option><option value="50">50<\/option><option value="40">40<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="10">10<\/option><option value="0">0<\/option><\/select><\/li>' +
+ '<li id="autoLinks" class="vr"><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del"><a id="delay" style="cursor:wait;" title="' + tmp + '"><\/a><select id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul>' +
+ '<a href="http://s5.netzgesta.de" target="_blank" title="S5 Reloaded"><img style="position: absolute; right: 0; bottom: 0;" src="data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAYAAAASYli2AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAYpSURBVHjaYvz//z8DOYCRkZEZRAEx0Ij/f2HiAAHEgqYIpACkkB1J7g8Q/wLRIJ1QNSB5fiDmAOLvQKHPQPoHSB4ggFiQDGMCUnxALAPECkAsBLIdiD8A8SMgfghU8wlqkTgQK1ZVVWldv3792fr16y8D+c9AhgMEECPIy1DDRIDYAojdzMzMWNXV1UG2/v/y5Qvzw4cPP587d24/kH8Gar/uwoULQ+/cufNFXFyciZmZ+UVmZuZKoFmvAQII5kJOIDbi4uKK2Llz53EbG5vP6GGWn5+vMWnSpJtA5jcg5v327Rtnc3PzfSD79+rVq2WBNBtIHUAAwQzkAWKzBQsWnIUZFhISovXmzZsfkpKSDD09PY8kJCR+QtWCguGvrKwsz7Rp07Q4ODh+srCwgILiH0gSIIBgBrICsUBoaCgorBiANgqvXbtWDMg8AcQf9+7d+x0o9xbI/gJV/3fVqlUvmJiY/gIdcaWhoYETahEDQADBDPwNxO9h3gNpBiq6f/HiRbWjR4+yvnr16grQNbeh6kCWsxkYGIhClT8yNDQUgyYhBoAAYoIKfgXi06mpqUowQ+vr6x+uW7fu0suXL8+uWbOGS0BAwB7kC6jXvqmoqLDIyclxzZo1S4udnR2WtBgAAggWyyCXSgOxZUxMjGpWVtY7S0vLr8iRsnnzZl4/P7/DQCYoYtSA2DApKUkVGNNPDh06dBrIvwU06xNAAMEM5AIKqAOxCjQsmHl5eXWdnJx4N2zYcB4prd4CUpfwJRuAAGJCimULoGYpbm5uZ5DBnz9/5tq4caPWkSNHeJEc+g0aTFzfv3/nACabjzk5OW8FBQVloLmHASCAYJECUiTg7+//HJiQTzY2NsrfvXv3n7m5+T5YMgJGEkjDS2gY/pKRkeHt7Ow0Bsb0v9+/fz+HxTJAAMG8DHKFLTC9aRUXF79BT9Qgw4CWHAAy70FdYgjEDgkJCTpWVlYMQBfeAaaMPqBZbwECCGYgMzQGQSleCehS0X///jEDvf9lxYoVoOTyAIjfANX+BqrlBrL1gLFf09vb+0FaWvoHMBctA6USUKQABBAjrPiCliKg7AOKIG5ougLlju9Ipc1foDJWqMWGhYWFtsBg4RISEnrg5uY2BWQgQACxIBkGMkQKijmRfPwXWuI8ASp7DQ1vEP4DDO8PwBzzDJheT0CLPQaAAEJOh0o8zAzeihwMiv+gGZ0B4sz/bIwM797/YTh1/wfDIWj5qAfMmtFnzpz5ICIiwqKoqPgjKChoOtCs5wABhJyXpUCGzddgOIethJ71jEFi1nNwgQrKz8zv37//097eDop15qVLl0pAzWAACCAWhEMYOJFdduELA++b3wxsTIwMfzmYGH6xMDG8gYYpKAg+cnJy/gB6VwuYZFiA7E+wvAwQQCy46ozexwzG17+BYx6UVE4B8Vmo68CRFR0dDQo3UAHBBUwJ4lCLGAACCNnAv4zQxAkCxbIMZ0EuBIYb98EPDFo3voGTzjOogVzArGf969cvNmC2+wssHD7BDAQIIBakmHwPDPy3MAMNeBhgpfbbVEkGhqQbDJaXvjI8BPJB4jz79u37DcwlP+fPn38NuTwECCBkA1+8+8Nwtusxg+STHwwcP/8z8EuwMXA1KjBcBSlwEmRgBhrID/U2O7QMBIEHxsbGkrAwBAggmIGgNMT64AfDWyB+By0EQMVZlC0/wwsXQYa38hzgCGGBWv5ZU1OT4c+fP8yLFi1SA3r5Haw8BAggmIGg5KBpJ8BgeOYTg8S3f2DN/OxMDNwgw0AKnv0EJ+avsITu7u6+EZqzQEHwHFqaMwAEEAtShS/pLcTwrU+Z4QwsyQANOwIL06tfGV5BqwmQWoGKigoLYJnJvWPHjhstLS169vb2M0DqAAIIVh6CXHT/9ndIawEUITCXgUDrQwbGbe8YjkJdAzZQVVVV/t69e8LAgtUYaNgxWKQABBByacMHzfTK9gIMYkBZpj//GT4c+8gAKm1AsfseqPYPtHTXAtaEacBqlgHoyq+srKw3XV1dFwHlvwEEECNyYwmp3cIJjbUf0DbLP7RGEg+0bcMCjQxQzH8BWQgQQIzktr5wAYAAYmKgMgAIMAAp8Fx3osz1lgAAAABJRU5ErkJggg==" width="20" height="32" alt="S5" \/><\/a>' +
+ '<\/div><\/form>';
+ }
+ if (controlVis == 'hidden') {
+ var hidden = document.getElementById('navLinks');
+ } else {
+ var hidden = document.getElementById('jumplist');
+ }
+ addClass(hidden,'hideme');
+}
+
+function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
+ if (!s5mode && !isOp) return false;
+ var hScreen = screen.width; var vScreen = screen.height;
+ var vWindow = window.outerHeight; var hWindow = window.outerWidth;
+ if (isOp && s5mode && defaultView=='slideshow' && ((hScreen != hWindow) || (vScreen != vWindow))) {
+ toggle();
+ return false;
+ }
+ if (isOp && !s5mode && ((hScreen != hWindow) || (vScreen != vWindow))) return false;
+ if (isOp && !s5mode && (hScreen == hWindow) && (vScreen == vWindow)) toggle();
+ var vScale = 48; // both yield 16 (the usual browser default) at 1024x768
+ var hScale = 64; // perhaps should auto-calculate based on theme's declared value?
+ if (window.innerHeight) {
+ var vSize = window.innerHeight;
+ var hSize = window.innerWidth;
+ } else if (document.documentElement.clientHeight) {
+ var vSize = document.documentElement.clientHeight;
+ var hSize = document.documentElement.clientWidth;
+ } else if (document.body.clientHeight) {
+ var vSize = document.body.clientHeight;
+ var hSize = document.body.clientWidth;
+ } else {
+ var vSize = 700; // assuming 1024x768, minus chrome and such equals 8:5
+ var hSize = 1024; // these do not account for kiosk mode or Opera Show
+ }
+ var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
+ extendImgSizes(newSize); // scalable images extension
+ extendCanSizes(newSize); // scalable canvas extension
+ extendObjSizes(newSize); // scalable object extension
+ fontSize(newSize,"px");
+ if(!isS2 || firstTime==0) {
+ generateCanvas(); // dynamic canvas extension
+ }
+ if (isGe) { // hack to counter incremental reflow bugs
+ var obj = document.getElementsByTagName('body')[0];
+ obj.style.visibility = 'hidden';
+ obj.style.display = 'none';
+ obj.style.display = 'block';
+ obj.style.visibility = 'visible';
+ changeOpac(100,'slide' + snum);
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("fixReflow()",10);
+ }else {
+ setListPos(); // invisible select extension
+ }
+}
+
+function fixReflow() {
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("finishReflow()",10);
+}
+function finishReflow() {
+ setListPos(); // invisible select extension
+}
+
+function fontSize(val,fmt) {
+ var value = val + fmt;
+ if (!(s5ss = document.getElementById('s5ss'))) {
+ if (!document.createStyleSheet) {
+ document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
+ s5ss.setAttribute('media','screen, projection');
+ s5ss.setAttribute('id','s5ss');
+ } else {
+ document.createStyleSheet();
+ document.s5ss = document.styleSheets[document.styleSheets.length - 1];
+ }
+ }
+ if (!(document.s5ss && document.s5ss.addRule)) {
+ while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
+ s5ss.appendChild(document.createTextNode('html {font-size: ' + value + ' !important;}'));
+ } else {
+ document.s5ss.addRule('html','font-size: ' + value + ' !important;');
+ }
+}
+
+function windowChange() {
+ fontScale();
+}
+
+function notOperaFix() {
+ slideCSS = document.getElementById('slideProj').href;
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ slides.setAttribute('media','screen');
+ outline.disabled = true;
+ if (isGe) {
+ slides.setAttribute('href','null'); // Gecko fix
+ slides.setAttribute('href',slideCSS); // Gecko fix
+ }
+ if ((isIE && notIE7) && document.styleSheets && document.styleSheets[0]) {
+ document.styleSheets[0].addRule('img', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('div', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('.slide', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ }
+}
+
+function getIncrementals(obj) {
+ var incrementals = new Array();
+ if (!obj)
+ return incrementals;
+ var children = obj.childNodes;
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ if (hasClass(child, 'incremental')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'incremental');
+ for (var j = 0; j < child.childNodes.length; j++) {
+ if (child.childNodes[j].nodeType == 1) {
+ addClass(child.childNodes[j], 'incremental');
+ }
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ removeClass(child,'incremental');
+ }
+ }
+ if (hasClass(child, 'show-first')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'show-first');
+ if (child.childNodes[isGe].nodeType == 1) {
+ removeClass(child.childNodes[isGe], 'incremental');
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ }
+ }
+ incrementals = incrementals.concat(getIncrementals(child));
+ }
+ return incrementals;
+}
+
+function createIncrementals() {
+ var incrementals = new Array();
+ for (var i = 0; i < smax; i++) {
+ incrementals[i] = getIncrementals(document.getElementById('slide'+i));
+ }
+ return incrementals;
+}
+
+function trap(e) {
+ if (!e) {
+ e = event;
+ e.which = e.keyCode;
+ }
+ try {
+ modifierKey = e.ctrlKey || e.altKey || e.metaKey;
+ }
+ catch(e) {
+ modifierKey = false;
+ }
+ return modifierKey || e.which == 0;
+}
+
+// notes extension
+function noteLabel() { // Gives notes id's to match parent slides
+ var notes = GetElementsWithClassName('div','notes');
+ for (var i = 0; i < notes.length; i++) {
+ var note = notes[i];
+ var id = 'note' + note.parentNode.id.substring(5);
+ note.setAttribute('id',id);
+ }
+ resetElapsedSlide();
+ resetRemainingTime();
+ window.setInterval('updateElaspedTime()', 1000);
+}
+
+function createNotesWindow() { // creates a window for our notes
+ if (!s5NotesWindow || s5NotesWindow.closed) { // Create the window if it doesn't exist
+ s5NotesWindowLoaded = false;
+ // Note: Safari has a tendency to ignore window options preferring to default to the settings of the parent window, grr.
+ s5NotesWindow = window.open(s5Path+'ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0');
+ }
+ if (s5NotesWindowLoaded) { // Load the current note if the Note HTML has loaded
+ loadNote();
+ } else { // Keep trying...
+ window.setTimeout('createNotesWindow()', 50);
+ }
+}
+
+function loadNote() {
+// Loads a note into the note window
+ var notes = nextNotes = '<em class="disclaimer">There are no notes for this slide.</em>';
+ if (document.getElementById('note' + snum)) {
+ notes = document.getElementById('note' + snum).innerHTML;
+ }
+ if (document.getElementById('note' + (snum + 1))) {
+ nextNotes = document.getElementById('note' + (snum + 1)).innerHTML;
+ }
+
+ var jl = document.getElementById('jumplist');
+ var slideTitle = jl.options[jl.selectedIndex].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex) ? ' (' + jl.selectedIndex + '/' + (smax - 1) + ')' : '');
+ if (incrementals[snum].length > 0) {
+ slideTitle += ' <small>[' + incpos + '/' + incrementals[snum].length + ']</small>';
+ }
+ if (jl.selectedIndex < smax - 1) {
+ var nextTitle = jl.options[jl.selectedIndex + 1].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex + 1) ? ' (' + (jl.selectedIndex + 1) + '/' + (smax - 1) + ')' : '');
+ } else {
+ var nextTitle = '[end of slide show]';
+ }
+
+ if (s5NotesWindow && !s5NotesWindow.closed && s5NotesWindow.document) {
+ s5NotesWindow.document.getElementById('slide').innerHTML = slideTitle;
+ s5NotesWindow.document.getElementById('notes').innerHTML = notes;
+ s5NotesWindow.document.getElementById('next').innerHTML = nextTitle;
+ s5NotesWindow.document.getElementById('nextnotes').innerHTML = nextNotes;
+ }
+ resetElapsedSlide();
+}
+
+function minimizeTimer(id) {
+ var obj = s5NotesWindow.document.getElementById(id);
+ if (hasClass(obj,'collapsed')) {
+ removeClass(obj,'collapsed');
+ } else {
+ addClass(obj,'collapsed');
+ }
+}
+
+function resetElapsedTime() {
+ presentationStart = new Date();
+ slideStart = new Date();
+ updateElaspedTime();
+}
+
+function resetElapsedSlide() {
+ if (snum != previousSlide) {
+ slideStart = new Date();
+ previousSlide = snum;
+ updateElaspedTime();
+ }
+}
+
+function updateElaspedTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var now = new Date();
+ var ep = s5NotesWindow.document.getElementById('elapsed-presentation');
+ var es = s5NotesWindow.document.getElementById('elapsed-slide');
+ ep.innerHTML = formatTime(now.valueOf() - presentationStart.valueOf());
+ es.innerHTML = formatTime(now.valueOf() - slideStart.valueOf());
+}
+
+function resetRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var startField = s5NotesWindow.document.getElementById('startFrom');
+ startFrom = readTime(startField.value);
+ countdown.remaining = startFrom * 60000; // convert to msecs
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var timeLeft = formatTime(countdown.remaining);
+ tl.innerHTML = timeLeft;
+}
+
+function updateRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var now = new Date();
+ if (countdown.state == 'run') {
+ countdown.remaining = countdown.end - now;
+ }
+ tl.style.color = '';
+ tl.style.backgroundColor = '';
+ if (countdown.remaining >= 0) {
+ var timeLeft = formatTime(countdown.remaining);
+ removeClass(tl,'overtime');
+ if (countdown.remaining < 300000) {
+ tl.style.color = 'rgb(' + (255-Math.round(countdown.remaining/2000)) + ',0,0)';
+ tl.style.backgroundColor = 'rgb(255,255,' + (Math.round(countdown.remaining/2000)) + ')';
+ }
+ } else {
+ var timeLeft = '-' + formatTime(-countdown.remaining);
+ addClass(tl,'overtime');
+ }
+ tl.innerHTML = timeLeft;
+}
+
+function toggleRemainingTime() {
+ if (countdown.state == 'pause') countdown.state = 'run'; else countdown.state = 'pause';
+ if (countdown.state == 'pause') {
+ window.clearInterval(countdown.timer);
+ }
+ if (countdown.state == 'run') {
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ countdown.timer = window.setInterval('updateRemainingTime()', 1000);
+ }
+}
+
+function alterRemainingTime(amt) {
+ var change = amt * 60000; // convert to msecs
+ countdown.end += change;
+ countdown.remaining += change;
+ updateRemainingTime();
+}
+
+function formatTime(msecs) {
+ var time = new Date(msecs);
+
+ var hrs = time.getUTCHours() + ((time.getUTCDate() -1) * 24); // I doubt anyone will spend more than 24 hours on a presentation or single slide but just in case...
+ hrs = (hrs < 10) ? '0'+hrs : hrs;
+ if (hrs == 'NaN' || isNaN(hrs)) hrs = '--';
+
+ var min = time.getUTCMinutes();
+ min = (min < 10) ? '0'+min : min;
+ if (min == 'NaN' || isNaN(min)) min = '--';
+
+ var sec = time.getUTCSeconds();
+ sec = (sec < 10) ? '0'+sec : sec;
+ if (sec == 'NaN' || isNaN(sec)) sec = '--';
+
+ return hrs + ':' + min + ':' + sec;
+}
+
+function readTime(val) {
+ var sregex = /:/;
+ var matches = sregex.exec(val);
+ if (matches == null) {
+ return val;
+ } else {
+ var times = val.split(':');
+ var hours = parseInt(times[0]);
+ var mins = parseInt(times[1]);
+ var total = (hours * 60) + mins;
+ return total;
+ }
+}
+// notes extension
+
+// startup process
+function createSlideShow() {
+ defaultCheck();
+ if(!isIE) createDetector(); // (degrade IE) scalable images extension
+ if(opac!=0 || isIE) { // &&!isIE (degrade IE)
+ tranSitions = false;
+ fadeModus = false;
+ }
+ if(tranSitions && document.getElementById && document.createElement){
+ createProgress();
+ var nop=document.getElementById('StartupControl');
+ nop.onload = dumpProgress;
+ }else {
+ startup();
+ showAll();
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+ }
+}
+
+function defaultCheck() {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'defaultView') {
+ defaultView = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'controlVis') {
+ controlVis = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'tranSitions') {
+ tranSitions = (allMetas[i].content == "true") ? true : false;
+ fadeModus = (tranSitions == true) ? true : false;
+ }
+ if (allMetas[i].name == 'fadeDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ fadeDuration = Math.max(200,Math.min(tmp,2000));
+ }
+ if (allMetas[i].name == 'incrDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ incrDuration = Math.max(50,Math.min(tmp,500));
+ }
+ if (allMetas[i].name == 'autoMatic') {
+ autoMatic = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playLoop') {
+ playLoop = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playDelay') {
+ var tmp = parseInt(allMetas[i].content);
+ playDelay = Math.max(5,Math.min(tmp,90))*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ }
+ if (allMetas[i].name == 'audioSupport') {
+ audioSupport = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'audioVolume') {
+ var tmp = parseInt(allMetas[i].content);
+ audioVolume = Math.max(0,Math.min(tmp,100));
+ }
+ if (allMetas[i].name == 'audioError') {
+ audioError = (allMetas[i].content == "true") ? true : false;
+ }
+ }
+}
+
+function createProgress() {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "StartupProgress";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=100)";
+ }else {
+ pg.style.opacity = 1.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/progress.gif)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+
+ var im = document.createElement('img');
+ im.id = "StartupControl";
+ im.src = s5Path+"ui/graphic_support/blank.gif?" + new Date().valueOf();
+ document.getElementsByTagName("body")[0].appendChild(im);
+}
+
+function startup() {
+ createControls(); // hallvord
+ slideLabel();
+ incrementals = createIncrementals();
+ noteLabel(); // [SI:060104] must follow slideLabel()
+ loadNote();
+ fixLinks();
+ externalLinks();
+ fontScale();
+ if (!isOp) {
+ if(isIE) {
+ document.getElementById('lst').style.backgroundImage = 'none';
+ document.getElementById('del').style.backgroundImage = 'none';
+ }else {
+ document.getElementById('audio').style.backgroundImage = 'none';
+ }
+ notOperaFix();
+ }else if(isOp) {
+ var obj = document.getElementById('exit');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('exit').style.opacity = 0.5;
+ obj = document.getElementById('toggle');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('toggle').style.opacity = 0.5;
+ document.getElementById('jumplist').style.visibility = 'hidden';
+ document.getElementById('list').style.visibility = 'hidden';
+ document.getElementById('lst').style.opacity = 0.5;
+ obj = document.getElementById('audio');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('audio').style.opacity = 0.5;
+ document.getElementById('volumelist').style.visibility = 'hidden';
+ document.getElementById('volume').style.visibility = 'hidden';
+ document.getElementById('vol').style.opacity = 0.5;
+ document.getElementById('delaylist').style.visibility = 'hidden';
+ document.getElementById('delay').style.visibility = 'hidden';
+ document.getElementById('del').style.opacity = 0.5;
+ }
+ slideJump();
+ if (defaultView == 'outline') toggle();
+ document.onkeyup = keys;
+ document.onkeypress = trap;
+ document.onclick = clicker;
+}
+
+function preloadImgages() {
+ var temp = '';
+ var objects = document.getElementsByTagName('img');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].src != '') {
+ temp = new Image();
+ temp.src = objects[i].src;
+ }
+ }
+}
+
+function showAll() {
+ var obj1 = GetElementsWithClassName('div','presentation')[0];
+ if(!obj1) var obj1 = GetElementsWithClassName('ol','presentation')[0];
+ var obj2 = GetElementsWithClassName('div','layout')[0];
+ if(!obj1){}else {obj1.style.display = 'block'};
+ if(!obj2){}else {obj2.style.display = 'block'};
+}
+
+function dumpProgress() {
+ document.body.removeChild(document.getElementById('StartupControl'));
+ startup();
+ preloadImgages();
+ showAll();
+ createSoundManagerScript();
+ shiftOpacity('StartupProgress',1000);
+ window.setTimeout("removeProgress()",1000);
+}
+
+function removeProgress() {
+ document.body.removeChild(document.getElementById('StartupProgress'));
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+}
+function panelSetup() {
+ if(playPause) {
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ if(playLoop) {
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ if(audioSupport && !isIE && !isOp) {
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ }
+ if(fadeModus && !isIE) {
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ if(autoMatic) {
+ var obj = document.getElementById('auto'); changeClass(obj,'ison');
+ startPlay();
+ }
+ if(audioVolume && !isIE && !isOp) {
+ var idx = 0;
+ if(audioVolume >= 95 && audioVolume <= 100) {idx = 0;}
+ else if(audioVolume >= 85 && audioVolume < 95) {idx = 1;}
+ else if(audioVolume >= 75 && audioVolume < 85) {idx = 2;}
+ else if(audioVolume >= 65 && audioVolume < 75) {idx = 3;}
+ else if(audioVolume >= 55 && audioVolume < 65) {idx = 4;}
+ else if(audioVolume >= 45 && audioVolume < 55) {idx = 5;}
+ else if(audioVolume >= 35 && audioVolume < 45) {idx = 6;}
+ else if(audioVolume >= 25 && audioVolume < 35) {idx = 7;}
+ else if(audioVolume >= 15 && audioVolume < 25) {idx = 8;}
+ else if(audioVolume >= 5 && audioVolume < 15) {idx = 9;}
+ else {idx = 10;}
+ document.getElementById('volumelist').selectedIndex = idx;
+ }
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+}
+// startup process
+
+// shutdown process
+function byby() {
+ stopPlay();
+ if(tranSitions && fadeModus && s5mode && !isOp) {
+ fadeoutSound(curSoundID,true); // audio support
+ var pg = document.createElement('div');
+ pg.id = "GoodBy";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=0)";
+ }else {
+ pg.style.opacity = 0.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/finish.gif)";
+ document.getElementsByTagName("body")[0].appendChild(pg);
+ shiftOpacity('GoodBy',1000);
+ window.setTimeout("history.back()",1000);
+ }else {
+ stopSound(curSoundID);
+ history.back();
+ }
+}
+// shutdown process
+
+// scalable images extension
+function createDetector() {
+ var em = document.createElement('div');
+ em.id='EMSizeControl'; em.style.position="absolute"; em.style.left="-999px";
+ em.style.width="1em"; em.style.height="1em"; em.style.opacity=0.0;
+ document.getElementsByTagName("body")[0].appendChild(em);
+ var nop=document.getElementById('EMSizeControl');
+ if(!nop||findPosX(nop)!=-999) {}else {
+ opac=document.getElementById('EMSizeControl').style.opacity;
+ empx=document.getElementById('EMSizeControl').offsetHeight;
+ document.body.removeChild(document.getElementById('EMSizeControl'));
+ var objects = document.getElementsByTagName('img');
+ var j = 0; var i = 0; var k = 0; var d; var obj;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ images[j] = objects[i];
+ ++j;
+ }
+ }
+ var objects = document.getElementsByTagName('canvas'); j = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ canvas[objects[i].id] = objects[i];
+ if(j==0) {
+ if(objects[i].getContext) {
+ canvasSupport = true;
+ }
+ ++j;
+ }
+ }
+ }
+ if(canvasSupport!=true) {
+ for (d in canvas) {
+ try {
+ canvas[d].setAttribute("width",1);
+ canvas[d].setAttribute("height",1);
+ } catch (e) {
+ }
+ }
+ }
+ var objects = document.getElementsByTagName('table');
+ j = 0; k = 0; l = 0; var w; var h; var tmp; var cnt;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^piechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ piecharts[j] = objects[i];
+ em = piecharts[j].getAttribute("summary");
+ if(em != "") em = "," + em;
+ piecharts[j].setAttribute("summary", w + "," + h + em);
+ ++j;
+ }
+ }
+ }
+ if(objects[i].className.match(/^barchart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ barcharts[k] = objects[i];
+ em = barcharts[k].getAttribute("summary");
+ if(em != "") em = "," + em;
+ barcharts[k].setAttribute("summary", w + "," + h + em);
+ ++k;
+ }
+ }
+ }
+ if(objects[i].className.match(/^linechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ linecharts[l] = objects[i];
+ em = linecharts[l].getAttribute("summary");
+ if(em != "") em = "," + em;
+ linecharts[l].setAttribute("summary", w + "," + h + em);
+ ++l;
+ }
+ }
+ }
+ }
+ objects = document.getElementsByTagName('object'); j = 0; i = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ medias[j] = objects[i]; ++j;
+ if(!isIE) {
+ if(objects[i].getAttributeNode("classid")) objects[i].removeAttributeNode(objects[i].getAttributeNode("classid"));
+ if(objects[i].getAttributeNode("codebase")) objects[i].removeAttributeNode(objects[i].getAttributeNode("codebase"));
+ }
+ }
+ }
+ }
+}
+function extendImgSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < images.length; i++) {
+ w=images[i].getAttribute("width",0);
+ h=images[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ images[i].style.width=Math.floor(w*q)+"px";
+ images[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+
+function extendCanSizes(f) {
+ if(empx>0 && canvasSupport) {
+ var q = (f/empx); var w = 0; var h = 0; var tmp = ""; var cnt; var obj;
+ for(var i=0; i < piecharts.length; i++) {
+ if(piecharts[i].getAttribute("summary")) {
+ tmp = piecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = piecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < barcharts.length; i++) {
+ if(barcharts[i].getAttribute("summary")) {
+ tmp = barcharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = barcharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < linecharts.length; i++) {
+ if(linecharts[i].getAttribute("summary")) {
+ tmp = linecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = linecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ }
+}
+function extendObjSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < medias.length; i++) {
+ w=medias[i].getAttribute("width",0);
+ h=medias[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ medias[i].style.width=Math.floor(w*q)+"px";
+ medias[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+function findPosX(obj) {
+ var posLeft = 0;
+ while (obj.offsetParent) {
+ posLeft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ return posLeft;
+}
+function findPosY(obj) {
+ var posTop = 0;
+ while (obj.offsetParent) {
+ posTop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ return posTop;
+}
+// scalable images extension
+
+// canvas chart extension
+function deg2rad(degrees) {
+ return Math.PI *degrees/180;
+}
+function rad2deg(radians) {
+ return 180.0 *radians/Math.PI;
+}
+function circle_point_x(radians, diameter) {
+ var x = Math.cos(radians)*(diameter/2);
+ return x;
+}
+function circle_point_y(radians, diameter) {
+ var y = Math.sin(radians)*(diameter/2);
+ return y;
+}
+function roundTo(val,dig) {
+ var num = val;
+ if (val > 8191 && val < 10485) {
+ val = val-5000;
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ num = num+5000;
+ } else {
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ }
+ return num;
+}
+function searchColor(value) {
+ for (var dat in colorNames) {
+ if(dat==value) return colorNames[dat];
+ }
+ return false;
+}
+function scanColor(value) {
+ if(value.match(/^#[0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var val1 = value.substr(1,1).toLowerCase();
+ var val2 = value.substr(2,1).toLowerCase();
+ var val3 = value.substr(3,1).toLowerCase();
+ value = '#' + val1 + val1 + val2 + val2 + val3 + val3;
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var tmp = searchColor(value.toLowerCase());
+ if(!tmp) {}else{value = tmp;}
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ value = '#000000';
+ }
+ return value.toLowerCase();
+}
+function hex2rgb(val,trans) {
+ if(val.length==7) {
+ var tp1 = Math.max(0,Math.min(parseInt(val.substr(1,2),16),255));
+ var tp2 = Math.max(0,Math.min(parseInt(val.substr(3,2),16),255));
+ var tp3 = Math.max(0,Math.min(parseInt(val.substr(5,2),16),255));
+ return 'rgba(' + tp1 + ',' + tp2 + ',' + tp3 + ',' + trans + ')';
+ }
+}
+function trim(str) {
+ return (str.replace(/\s+$/,"").replace(/^\s+/,""));
+}
+function roundedRect(ctx,x,y,width,height,radius){
+ ctx.beginPath();
+ ctx.moveTo(x,y+radius);
+ ctx.lineTo(x,y+height-radius);
+ ctx.quadraticCurveTo(x,y+height,x+radius,y+height);
+ ctx.lineTo(x+width-radius,y+height);
+ ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius);
+ ctx.lineTo(x+width,y+radius);
+ ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
+ ctx.lineTo(x+radius,y);
+ ctx.quadraticCurveTo(x,y,x,y+radius);
+ ctx.closePath();
+}
+function drawString(ctx, text, fc, tx, ty) {
+ var xp = 0; var c = "";
+ ctx.beginPath();
+ for (var i = 0; i < text.length; i++) {
+ c = text[i];
+ ctx.drawImage(font, signs[c].sx, signs[c].sy, signs[c].sw, signs[c].sh, tx+xp, ty, signs[c].sw*fc, signs[c].sh*fc);
+ xp += (signs[c].sw*fc);
+ }
+ ctx.closePath();
+}
+function strokeString(ctx, txt, col, fh, tx, ty) {
+ var fw = fh*0.666666; var lw = fh*0.125;
+ var ls = lw/2; var cr = lw; var xp = 0;
+ ctx.lineCap = "round"; ctx.lineJoin = "round"
+ ctx.lineWidth = lw; ctx.strokeStyle = col;
+ for (var i = 0; i < txt.length; i++) {
+ strokeSymbol(ctx, txt[i], ls, tx+xp, ty, fw, fh);
+ xp += (txt[i]!="."?fw+cr:(fw/2)+cr);
+ }
+}
+function strokeSymbol(ctx, symbol, fc, cx, cy, cw, ch) {
+ ctx.beginPath();
+ switch (symbol) {
+ case "0":
+ ctx.moveTo(cx+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+(cw/2),(cw/2)-fc,deg2rad(180),0, false);
+ ctx.arc(cx+(cw/2),(cy+ch)-(cw/2),(cw/2)-fc,0,deg2rad(180), false);
+ ctx.closePath();
+ break;
+ case "1":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.moveTo(cx+(cw*0.666666),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.666666),cy+fc);
+ ctx.lineTo(cx+(cw*0.25),cy+(ch*0.25));
+ break;
+ case "2":
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.8));
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+fc,cy+ch-fc);
+ ctx.arc(cx+(cw/2),cy+(cw*0.425),(cw*0.425)-fc,deg2rad(45),deg2rad(-180), true);
+ break;
+ case "3":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-90),deg2rad(180), false);
+ break;
+ case "4":
+ ctx.moveTo(cx+(cw*0.75),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.5),cy+ch-fc);
+ break;
+ case "5":
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-80),deg2rad(180), false);
+ break;
+ case "6":
+ ctx.moveTo(cx+fc,cy+ch-(cw*0.5)-fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-180),deg2rad(180), false);
+ ctx.bezierCurveTo(cx+fc,cy+fc,cx+fc,cy+fc,cx+(cw*0.9)-fc,cy+fc);
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ break;
+ case "7":
+ ctx.moveTo(cx+(cw*0.5),cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.25)-fc);
+ break;
+ case "8":
+ ctx.moveTo(cx+(cw*0.92)-fc,cy+(cw*0.59));
+ ctx.arc(cx+(cw/2),cy+(cw*0.45),(cw*0.45)-fc,deg2rad(25),deg2rad(-205), true);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-135),deg2rad(-45), true);
+ ctx.closePath();
+ ctx.moveTo(cx+(cw*0.79),cy+(ch*0.47));
+ ctx.lineTo(cx+(cw*0.21),cy+(ch*0.47));
+ break;
+ case "9":
+ ctx.moveTo(cx+cw-fc,cy+(cw*0.5));
+ ctx.arc(cx+(cw/2),cy+(cw*0.5),(cw*0.5)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.bezierCurveTo(cx+cw-fc,cy+ch-fc,cx+cw-fc,cy+ch-fc,cx+(cw*0.1)+fc,cy+ch-fc);
+ break;
+ case "%":
+ ctx.moveTo(cx+fc,cy+(ch*0.75));
+ ctx.lineTo(cx+cw-fc,cy+(ch*0.25));
+ ctx.moveTo(cx+(cw*0.505),cy+(cw*0.3));
+ ctx.arc(cx+(cw*0.3),cy+(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.moveTo(cx+(cw*0.905),cy+ch-(cw*0.3));
+ ctx.arc(cx+(cw*0.7),cy+ch-(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ break;
+ case ".":
+ ctx.moveTo(cx+(cw*0.25),cy+ch-fc-fc);
+ ctx.arc(cx+(cw*0.25),cy+ch-fc-fc,fc,deg2rad(0),deg2rad(360), false);
+ ctx.closePath();
+ break;
+ default:
+ break;
+ }
+ ctx.stroke();
+}
+function drawBar(ctx,x,y,width,height,color,value,textdiv){
+ var rw = width/2; var rh = rw/2;
+ height = Math.max(height,rw);
+ var dh = Math.max(height-(2*rh),0.1); var S2L;
+ var xx = rw/8; var yy = rh/4;
+ var yo = rh/2; y = y - yy;
+ if(canvas_noshadow <= 0 && canvas_noshade <= 0) {
+ ctx.save();
+ S2L = ctx.createRadialGradient(x+rw+rh,y+height-rw+yy+rh,0,x+rw,y+height-rw+yy,rw);
+ S2L.addColorStop(0, 'rgba(0,0,0,0.5)');
+ S2L.addColorStop(0.7, 'rgba(0,0,0,0.25)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = S2L;
+ ctx.scale(1,0.5);
+ ctx.translate(xx,y+height+yy);
+ if(isOp){
+ ctx.fillRect(x,y+yy+height-width,width,width);
+ }else {
+ ctx.arc(x+rw,y+yy+height-width,width,0,deg2rad(360), false);
+ ctx.fill();
+ }
+ ctx.restore();
+ }else if(canvas_noshadow <= 0 && canvas_noshade >= 1) {
+ ctx.fillStyle = 'rgba(0,0,0,0.2)';
+ ctx.fillRect(x+yo,y+rh+yo+yo,width,dh);
+ }
+
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x,y+(height/2),x+width,y+(height/2));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.75)');
+ S2L.addColorStop(0.2, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.3, 'rgba(0,0,0,0)');
+ S2L.addColorStop(0.5, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.35)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.1)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.strokeStyle = S2L;
+ ctx.stroke();
+ }else {
+ ctx.fillStyle = color;
+ ctx.fillRect(x,y+rh+yo,width,dh);
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var bw = width; var bh = bw/4;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ var c; var w;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,x+(width/2)-(bw/2),y,bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext <= 0) {
+ strokeString(ctx, value + "%","rgba(48,48,48,1)", th, x+(width/2)-(w/2), y+((bh-th)/2));
+ }else {
+ drawString(ctx, value + "%", tf, x+(width/2)-(w/2), y+((bh-th)/2.2));
+ }
+ }else {
+ var bh = bw/3; var th = roundTo(bh*0.75,0);
+ roundedRect(ctx,x,y,bw,bh,bh/4);
+ ctx.fill();
+ var obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = x + "px";
+ obj.style.top = y+((bh-th)/2.2) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+
+ }
+}
+function drawLine(ctx,x,y,width,height,dist,array,factor,color,fill){
+ if(fill <= 0){
+ var style = hex2rgb(color,0.5);
+ ctx.lineJoin = "miter";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height);
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.lineTo(x+width,y+height);
+ ctx.lineTo(x,y+height);
+ ctx.closePath();
+ ctx.fillStyle = style;
+ ctx.fill();
+ }
+ ctx.lineJoin = "round";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height-(array[0]*factor));
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.strokeStyle = color;
+ ctx.stroke();
+}
+function setDataURL(cid) {
+ if(cid.toDataURL) {
+ var obj = document.getElementById(cid.id + "_link");
+ if(obj) {
+ obj.setAttribute("title", "To Data URL");
+ obj.setAttribute("target", "_blank");
+ obj.setAttribute("href", cid.toDataURL());
+ }
+ }
+}
+function get_input(dataobj,canvasobj,linechart) {
+ var table = document.getElementById(dataobj);
+ var canvas = document.getElementById(canvasobj);
+ var row; var clm; var cnt = 0; var val = 0; var nme = ""; var col = "";
+ if(canvas.getContext) {
+ canvas_width = parseInt(canvas.style.width);
+ canvas_height = parseInt(canvas.style.height);
+ if(canvas_width >= 16 && canvas_height >= 16) {
+ var tmp = table.getAttribute("summary");
+ canvas_noshade = 0; canvas_noshadow = 0;
+ canvas_notext = 0; canvas_imgtext = 0;
+ canvas_htmltext = 0; canvas_nofill = 0;
+ if(tmp.search(/noshadow/) != -1) canvas_noshadow = 1;
+ if(tmp.search(/noshade/) != -1) canvas_noshade = 1;
+ if(tmp.search(/nofill/) != -1) canvas_nofill = 1;
+ if(tmp.search(/notext/) != -1) canvas_notext = 1;
+ if(tmp.search(/htmltext/) != -1) canvas_htmltext = 1;
+ if(tmp.search(/imgtext/) != -1) canvas_imgtext = 1;
+ if(table.getAttribute("bgcolor")) {
+ canvas_bgcolor = scanColor(table.getAttribute("bgcolor"));
+ }
+ ChartData = new Array(); colorSlice = new Array();
+ if(table.getElementsByTagName("tr")[0].getElementsByTagName("th")[0]) cnt = 1;
+ for(var r = cnt; r < table.getElementsByTagName("tr").length; r++) {
+ row = table.getElementsByTagName("tr")[r];
+ clm = row.getElementsByTagName("td").length;
+ if(row.getElementsByTagName("td")[0].getAttribute("bgcolor")) {
+ col = scanColor(row.getElementsByTagName("td")[0].getAttribute("bgcolor")); val = 0;
+ nme = trim(row.getElementsByTagName("td")[1].innerHTML.replace(/<[^>]+>/g,""));
+ if(!linechart) {
+ if(clm > 3) {
+ for(var z = 2; z < clm; z++) {
+ val += parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ }else {
+ val = parseFloat(row.getElementsByTagName("td")[2].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ if(!isNaN(val) && val > 0 && nme != '') {
+ colorSlice[r-cnt] = col; ChartData[nme] = Math.abs(val);
+ }else {
+ break;
+ }
+ }else {
+ val = 0; i = 0;
+ if(clm > 3 && nme != '') {
+ ChartData[r-cnt] = new Array();
+ colorSlice[r-cnt] = col;
+ for(var z = 2; z < clm; z++) {
+ val = Math.abs(parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,"")));
+ if(!isNaN(val) && val >= 0) {
+ ChartData[r-cnt][i] = val; i++;
+ }else {
+ ChartData[r-cnt][i] = 0; i++;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }
+ }
+}
+function setPieChart(canvasobj,textobj) {
+ var cd = (Math.min(canvas_width,canvas_height)/110)*100;
+ var cp = cd*0.1; var cr = cd/2;
+ var sr = cr*0.93; var cw = cd+cp; var ch = cw;
+ var cx = (cd/2)+(cp/2); var cy = cx; var ct = 0;
+ for (var data in ChartData) {
+ ct += ChartData[data];
+ }
+ var poc = ct/100;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ }
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,cw,ch);
+ }else {
+ ctx.clearRect(0,0,cw,ch);
+ }
+ if(canvas_noshadow <= 0) {
+ if(!isOp) {
+ ctx.beginPath();
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),cr,cx+(cr*0.1),cy+(cr*0.1),sr*0.9);
+ B2B.addColorStop(0, 'rgba(0,0,0,0)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.arc(cx+(cr*0.1),cy+(cr*0.1),cr,0,deg2rad(360), false);
+ ctx.closePath();
+ ctx.fillStyle = B2B;
+ ctx.fill();
+ }else {
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),0,cx+(cr*0.1),cy+(cr*0.1),cr);
+ B2B.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(0.87, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = B2B;
+ ctx.fillRect(0,0,cw,ch);
+ }
+ }
+ var val = 0; var deg = 0; var idx = 0; var data;
+ for (data in ChartData) {
+ val = ChartData[data]; sdeg = deg;
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ ctx.beginPath();
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr,sdeg,edeg, false);
+ ctx.lineTo(cx,cy);
+ ctx.closePath();
+ ctx.fillStyle = colorSlice[(idx++)];
+ ctx.fill();
+ }
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ var W2T = ctx.createLinearGradient(cp*2,cp*2,cx,cy);
+ W2T.addColorStop(0, 'rgba(255,255,255,0.8)');
+ W2T.addColorStop(1, 'rgba(255,255,255,0)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.fillStyle = W2T;
+ ctx.fill();
+ ctx.beginPath();
+ var T2B = ctx.createLinearGradient(cx,cy,cw-(cp*2),ch-(cp*2));
+ T2B.addColorStop(0, 'rgba(0,0,0,0)');
+ T2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.fillStyle = T2B;
+ ctx.fill();
+ ctx.beginPath();
+ var B2T = ctx.createLinearGradient(cx,cy,cw-(cp*1.9),ch-(cp*1.9));
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.strokeStyle = B2T;
+ ctx.stroke();
+ ctx.beginPath();
+ var T2W = ctx.createLinearGradient(cx,cy,(cp*1.9),(cp*1.9));
+ T2W.addColorStop(0, 'rgba(255,255,255,0)');
+ T2W.addColorStop(1, 'rgba(255,255,255,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.strokeStyle = T2W;
+ ctx.stroke();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var mpos = 0; var per = 0; var gx = 0;
+ var gy = 0; var tx = 0; var ty = 0;
+ var obj = ""; var w = 0; var c = 0;
+ var bw = cr*0.45; var bh = cr*0.125;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext >= 1) {
+ bw = (cr*0.365);
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ for (data in ChartData) {
+ val = ChartData[data];
+ sdeg = deg; mpos = deg+(((val/2)/ct)*deg2rad(360));
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ per = roundTo(val/poc,2);
+ gx = circle_point_x(mpos, cd);
+ gy = circle_point_y(mpos, cd);
+ tx = parseFloat((cx+(2*Math.floor(cx + gx)))/3);
+ ty = (cy+(2*Math.floor(cy + gy)))/3;
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext >= 1) {
+ drawString(ctx, per + "%", tf, tx-(w/2), ty-(th/1.8));
+ }else {
+ strokeString(ctx, per + "%","rgba(48,48,48,1)", th, tx-(w/2), ty-(th/2));
+ }
+ }else {
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = (tx-(bw/2)) + "px";
+ obj.style.top = ty-(th/1.8) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+ }
+ }
+ }
+}
+function setBarChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9; var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05; var ph = canvas_height*0.05;
+ var cm = 0; var ct = 0;
+ for (var data in ChartData) {
+ cm = Math.max(cm,ChartData[data]);
+ ct += ChartData[data];
+ }
+ var hf = ih/cm; var bs = colorSlice.length;
+ var bw = iw/(bs*1.1); var poc = ct/100;
+ var th = roundTo((bw/3)*0.75,0);
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ var obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ var cc = ""; var bh = 0; var idx = 0; var t = 0; per = 0;
+ for (var data in ChartData) {
+ per = roundTo(ChartData[data]/poc,2);
+ bh = ChartData[data]*hf;
+ drawBar(ctx,pw+(t*(bw*1.1)),ph+ih-bh,bw,bh,colorSlice[(idx++)],per,textdiv);
+ t++;
+ }
+ }
+}
+function setLineChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9;
+ var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05;
+ var ph = canvas_height*0.05;
+ var cm = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ cm = Math.max(cm,ChartData[i][j]);
+ }
+ }
+ var hf = (ih*0.95)/cm; var bw = iw;
+ var dw = iw/(ChartData[0].length-1)
+ var dh = ih/(ChartData[0].length-1)
+ var ps = Math.min(pw,ph); lw = ps/4;
+ var B2T;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_noshadow <= 0) {
+ B2T = ctx.createLinearGradient(pw+ps,ph+ih+1,pw+ps+ps,ph+ih+1);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps,ph+ih);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.lineTo(pw+ps+ps,ph+ih);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+ps+ps,ph+ih,pw+ps+ps,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps+ps,ph+ih);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+ps+iw,ph+ih+ps);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.closePath();
+ ctx.fill();
+ var B2T = ctx.createLinearGradient(pw+iw+1,ph+ps,pw+iw+1,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.35)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps);
+ ctx.lineTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+iw,ph+ps+ps,pw+iw+ps,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.35)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+iw+ps,ph+ih+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = lw/2;
+ ctx.strokeStyle = "rgba(255,255,255,0.25)";
+ if(canvas_nofill <= 0) {
+ ctx.fillStyle = "rgba(240,240,240,0.8)";
+ ctx.strokeStyle = "rgba(255,255,255,1)";
+ ctx.fillRect(pw,ph,iw,ih);
+ }
+ for (var i = 0; i < ChartData[0].length-1; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph);
+ ctx.lineTo(pw+(i*dw),ph+ih);
+ ctx.stroke();
+ }
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw,ph+(i*dh));
+ ctx.lineTo(pw+iw,ph+(i*dh));
+ ctx.stroke();
+ }
+ ctx.lineWidth = lw;
+ var cc = ""; var bh = 0; var idx = 0; var t = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ t = Math.max(t,ChartData[i][j]);
+ }
+ bh = t*hf; cc = colorSlice[(idx++)];
+ drawLine(ctx,pw,ph+ih-bh,bw,bh,dw,ChartData[i],hf,cc,canvas_nofill);
+ }
+ ctx.beginPath();
+ ctx.moveTo(pw,ph);
+ ctx.lineTo(pw,ph+ih);
+ ctx.lineTo(pw+iw+(lw/2),ph+ih);
+ ctx.strokeStyle = "rgba(48,48,48,1)";
+ ctx.stroke();
+ ctx.lineWidth = lw/2;
+ B2T = ctx.createLinearGradient(pw,ph+ih,pw,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,1)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.strokeStyle = B2T;
+ for (var i = 0; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph+ih);
+ ctx.lineTo(pw+(i*dw),ph+ih+ps);
+ ctx.stroke();
+ }
+ B2T = ctx.createLinearGradient(pw-ps,ph,pw,ph);
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,1)');
+ ctx.strokeStyle = B2T;
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw-ps,ph+(i*dh));
+ ctx.lineTo(pw,ph+(i*dh));
+ ctx.stroke();
+ }
+ }
+}
+function generateCanvas() {
+ if(canvasSupport) {
+ var canvasID; var tdataID; var textID;
+ var tmp; var dat; var i; var j;
+ for(i=0; i < piecharts.length; i++) {
+ tmp = piecharts[i].id.split("_");
+ tdataID = piecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setPieChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < barcharts.length; i++) {
+ tmp = barcharts[i].id.split("_");
+ tdataID = barcharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setBarChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < linecharts.length; i++) {
+ tmp = linecharts[i].id.split("_");
+ tdataID = linecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID,true);
+ if(colorSlice.length > 0) {
+ if(ChartData.length == colorSlice.length) {
+ setLineChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ }
+}
+// canvas chart extension
+
+// invisible select extension
+function setListPos(opt) {
+ if(!isIE) { //(degrade IE)
+ var ref = document.getElementById('list');
+ var x = findPosX(ref); var y = findPosY(ref);
+ var obj = document.getElementById('jumplist');
+ obj.style.position = 'fixed'; obj.style.left = x + 'px'; obj.style.top = y + 'px';
+ var vol = document.getElementById('volumelist');
+ ref = document.getElementById('volume');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ vol.style.position = 'fixed'; vol.style.left = x + 'px'; vol.style.top = y + 'px';
+ var del = document.getElementById('delaylist');
+ ref = document.getElementById('delay');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ del.style.position = 'fixed'; del.style.left = x + 'px'; del.style.top = y + 'px';
+ var pnl = document.getElementById('navLinks');
+ }
+ if(opt) {
+ if(isIE) {
+ //(degrade IE)
+ //pnl.style.filter = "alpha(opacity=80)";
+ }else {
+ obj.style.opacity = 0.0;
+ vol.style.opacity = 0.0;
+ del.style.opacity = 0.0;
+ pnl.style.opacity = 0.8;
+ }
+ }
+}
+// invisible select extension
+
+// transition extension
+function switchFade() {
+ if(tranSitions && s5mode && fadeModus) {
+ fadeModus = false;
+ playDelay = playDelay-(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'isoff');
+ }else if(tranSitions && s5mode && !fadeModus) {
+ fadeModus = true;
+ playDelay = playDelay+(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ currentSlide();
+}
+function opacity(ids, opacStart, opacEnd, millisec) {
+ var speed = Math.round(millisec / 100);
+ var timer = 0;
+ if(opacStart > opacEnd) {
+ for(var i = opacStart; i >= opacEnd; i--) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ } else if(opacStart < opacEnd) {
+ for(var i = opacStart; i <= opacEnd; i++) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ }
+}
+function changeOpac(opacity, ids) {
+ var obj = document.getElementById(ids);
+ if (isIE) {
+ obj.style.filter = "alpha(opacity=" + opacity + ")";
+ } else {
+ obj.style.opacity = (opacity / 100);
+ }
+}
+function shiftOpacity(ids, millisec) {
+ if(document.getElementById(ids).style.opacity != '') {
+ var currentOpac = document.getElementById(ids).style.opacity * 100;
+ } else {
+ var currentOpac = 0;
+ }
+ if(currentOpac == 0) {
+ opacity(ids, currentOpac, 100, millisec);
+ } else if(currentOpac > 0) {
+ opacity(ids, currentOpac, 0, millisec);
+ }
+}
+// transition extension
+
+// autoplay extension
+function autoPlay() {
+ if (s5mode && autoMatic && !playPause) {
+ if ((snum >= (smax-1)) && playLoop) {
+ goTo(0);
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }else if ((snum >= (smax-1)) && !playLoop) {
+ stopPlay();
+ }else {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ if (incrementals[snum].length >0) {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = parseInt(playDelay/(incrementals[snum].length+1));
+ remainDer = parseInt(playDelay-(incrDelay*incrementals[snum].length));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ } else {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = incrDuration;
+ remainDer = parseInt(playDelay-(incrementals[snum].length*incrDuration));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }
+ }
+}
+function autoPlayIncr() {
+ if (incpos < incrementals[snum].length) {
+ subgo(1);
+ autoRun = setTimeout('autoPlayIncr();',incrDelay);
+ }else {
+ autoRun = setTimeout('nop();',remainDer);
+ }
+}
+function nop() {
+ // no operation dummy
+}
+function togglePlay() {
+ if (autoRun && s5mode) {
+ stopPlay();
+ }else if (!autoRun && s5mode) {
+ startPlay();
+ }
+}
+function stopPlay() {
+ if (autoRun && s5mode) {
+ clearTimeout(autoRun); autoRun = null;
+ autoMatic = false; playPause = false; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'isoff');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ currentSlide();
+ }
+}
+function startPlay() {
+ if (!autoRun && s5mode) {
+ playPause = false; autoMatic = true; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'ison');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ autoRun = setTimeout('autoPlay();',playDelay);
+ currentSlide();
+ }
+}
+function pausePlay() {
+ if (s5mode && autoMatic) {
+ if (playPause) {
+ playPause = false; autoRun = setTimeout('autoPlay();',playDelay);
+ var obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ }else {
+ if (autoRun){
+ clearTimeout(autoRun); autoRun = null; playPause = true;
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+ }
+}
+function switchLoop() {
+ if(s5mode) {
+ if (playLoop) {
+ playLoop = false;
+ var obj = document.getElementById('loop'); changeClass(obj,'isoff');
+ }else {
+ playLoop = true;
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+}
+function setDelay() {
+ var val = document.getElementById('delaylist');
+ if(s5mode) {
+ var delay = Math.max(5,Math.min(parseInt(val.value),300));
+ playDelay = (fadeModus == true) ? ((delay*1000)+(2*fadeDuration)) : (delay*1000);
+ }
+}
+// autoplay extension
+
+// audio extension
+function createSoundManagerScript() {
+ if(typeof soundManager=="undefined") {
+ onerrorSM2();
+ }else {
+ var script=document.createElement('SCRIPT');
+ var tx=document.createTextNode("soundManager.createMovie();");
+ script.appendChild(tx);
+ document.getElementsByTagName("body")[0].appendChild(script);
+ }
+}
+//soundManager.onload = function() {
+function onloadSM2() {
+ if(!isIE) { //(degrade IE)
+ swfUnloaded = false;
+ preloadSounds();
+ }
+}
+//soundManager.onerror = function() {
+function onerrorSM2() {
+ if(typeof soundManager!="undefined") {
+ soundManager.destruct;
+ delete soundManager;
+ }
+ audioSupport = false; swfUnloaded = true;
+ if(audioError && !isIE && !isOp) {
+ var dv = document.createElement('div'); dv.id = "guru";
+ var d2=document.createElement('div'); dv.appendChild(d2);
+ var tx=document.createTextNode('Guru Meditation - SoundManager failed to load/initialize!');
+ d2.appendChild(tx); document.getElementById('slide0').appendChild(dv);
+ }
+}
+function audioSetup() {
+ if(sound[0]) {
+ playSound(0);
+ }else if(sound[bgSoundItem] && !sound[0]) {
+ playSound(bgSoundItem);
+ }
+}
+function fadeoutSound(ids, option) {
+ if(curSoundID >= 0 && !swfUnloaded) {
+ if(isNaN(ids)) {
+ if(ids == "bgSound") {
+ var cnum = parseInt(bgSoundItem);
+ }else {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && ids == sound[i]["id"]) {
+ var cnum = i;
+ break;
+ }
+ }
+ }
+ }else {
+ var cnum = ids;
+ ids = sound[cnum]["id"];
+ }
+ var vol = getMaxVolume(sound[cnum]["volume"]);
+ var millisec = fadeDuration;
+ var speed = Math.round(millisec / vol);
+ var timer = 0;
+ for(var i = vol; i > 0; i--) {
+ setTimeout("fadeout(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ if(option) setTimeout("stopSound('"+ids+"')",millisec);
+ }
+}
+function fadeout(volume, id) {
+ soundManager.setVolume(id,volume);
+}
+function stopSound(ids) {
+ var sid;
+ if(isNaN(ids)) {
+ sid = ids;
+ }else if(sound[ids]) {
+ sid = sound[ids]["id"];
+ }
+ if(sid!='' && curSoundID >= 0) {
+ soundManager.stop(sid);
+ curSoundID = -1;
+ }
+}
+function toggleSounds() {
+ if(audioSupport && !swfUnloaded) {
+ stopAllSounds();
+ }else if (!audioSupport && !swfUnloaded) {
+ allowSounds();
+ }
+}
+function allowSounds() {
+ if(!swfUnloaded) {
+ audioSupport = true;
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ currentSlide();
+ }
+}
+function stopAllSounds() {
+ if(curSoundID >= 0) {
+ stopSound(curSoundID);
+ }else {
+ soundManager.stopAll();
+ curSoundID = -1;
+ }
+ audioSupport = false;
+ var obj = document.getElementById('audio'); changeClass(obj,'isoff');
+ currentSlide();
+}
+function playSound(id) {
+ if(audioSupport && !swfUnloaded) {
+ var url, sid, vol, lps, cnum;
+ if(isNaN(id)) {
+ sid = id;
+ if(sid == "bgSound") {
+ cnum = parseInt(bgSoundItem);
+ }else {
+ cnum = getSoundID(id);
+ }
+ }else {
+ cnum = parseInt(id);
+ if(sound[cnum]) sid = sound[cnum]["id"];
+ }
+ if(sound[cnum] && sound[cnum]["url"]!='' && sid!=''){
+ url = sound[cnum]["url"];
+ vol = (sound[cnum]["volume"]!='')?getMaxVolume(sound[cnum]["volume"]):getMaxVolume(100);
+ lps = (sound[cnum]["loops"])?true:false;
+ if(lps) {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){soundManager.play(sid,{volume:getMaxVolume(sound[cnum]["volume"])});}});
+ }else {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){curSoundID=-1;}});
+ }
+ }
+ }
+}
+function getSoundID(str) {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && str == sound[i]["id"]) {
+ var id = i;
+ break;
+ }
+ }
+ return id;
+}
+function setVolume() {
+ var vol = document.getElementById('volumelist');
+ if(audioSupport && !swfUnloaded) {
+ audioVolume = parseInt(vol.value);
+ if(curSoundID >= 0) {
+ if(sound[curSoundID]) {
+ var sid = sound[curSoundID]["id"];
+ var vid = getMaxVolume(sound[curSoundID]["volume"]);
+ soundManager.setVolume(sid,vid);
+ }
+ }
+ }
+}
+function getMaxVolume(value) {
+ if(audioVolume>0) {var factor = audioVolume/100;}else {var factor = 0;}
+ return Math.max(0,Math.min(parseInt(value*factor),audioVolume));
+}
+function preloadSounds() {
+ var temp = ''; var parm = ''; var t = ''; var cl = '';
+ var objects = document.getElementsByTagName('object');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].type.toLowerCase() == 'audio/mp3' && objects[i].data != '') {
+ objects[i].width = 0; objects[i].height = 0;
+ if(objects[i].parentNode.tagName == 'DIV') {
+ cl = objects[i].parentNode.className.toLowerCase();
+ if(cl == 'presentation' || cl == 'slide') {
+ if(cl == 'presentation') {
+ t = parseInt(bgSoundItem);
+ }else {
+ t = parseInt(objects[i].parentNode.id.slice(5, objects[i].parentNode.id.length));
+ }
+ sound[t] = new Object();
+ if(t < bgSoundItem) {
+ sound[t]["id"] = objects[i].parentNode.id;
+ }else {
+ sound[t]["id"] = "bgSound";
+ }
+ sound[t]["url"] = objects[i].data;
+ sound[t]["volume"] = 100; sound[t]["loops"] = false;
+ if(objects[i].archive != '') {
+ parm = objects[i].archive.toLowerCase().split(',');
+ for (var j=0; j < parm.length; j++) {
+ if(parm[j] == 'loop') sound[t]["loops"] = true;
+ if(parm[j].search(/^volume/) != -1) {
+ var tmp = parm[j].split(':');
+ sound[t]["volume"] = parseInt(tmp[1]);
+ }
+ }
+ }
+ soundManager.createSound(sound[t]["id"],sound[t]["url"]);
+ }
+ }
+ }
+ }
+}
+// audio extension
+
+// help extension
+function createHelpReq() {
+ if(!document.getElementById("HelpReq")) {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "HelpReq";
+ if (pg.addEventListener) {
+ pg.addEventListener("onclick",dumpHelpReq,false);
+ } else if (pg.attachEvent) {
+ pg.attachEvent("onclick",dumpHelpReq);
+ }
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=90)";
+ } else {
+ pg.style.opacity = 0.9;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(64,64,64)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/help.jpg)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+ if(document.getElementById("HelpReq")) {
+ helpmode = true;
+ }
+ }
+}
+function dumpHelpReq() {
+ if(document.getElementById("HelpReq")) {
+ document.body.removeChild(document.getElementById('HelpReq'));
+ helpmode = false;
+ }
+}
+// help extension
+
+//DEBUG
+function ConsoleLog(value) {
+ if(window.console) {
+ window.console.log(value);
+ }
+}
+//DEBUG
+
+document.write('<style type="text/css" media="screen" id="blockStyle">.presentation, .layout {display: none; }</style>');
+
+if(!isIE && !isOp) {
+ document.write('<script type="text/javascript" src="'+s5Path+'ui/audio_support/soundmanager2.js"></script>');
+ if(typeof soundManager!="undefined") {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'audioDebug') {
+ var audioDebug = (allMetas[i].content == "true") ? true : false;
+ soundManager.defaultOptions.debugMode = audioDebug;
+ }
+ }
+ }
+}
+
+window.onload = createSlideShow;
+window.onresize = function(){setTimeout('windowChange()',5);} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/toggle_link.png
new file mode 100644
index 000000000..4588e2514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/toggle_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/toggle_over.png
new file mode 100644
index 000000000..400f613b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/toggle_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/volume_link.png
new file mode 100644
index 000000000..f362acd1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/volume_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/wrap.css
new file mode 100644
index 000000000..a37315552
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/wrap.css
@@ -0,0 +1,410 @@
+/********************************************************************
+Screen and Print Styles for the Wrap Plugin
+********************************************************************/
+
+/* tables in columns and boxes should span the whole width */
+.wrap_column table,
+.wrap_left table, .wrap_right table, .wrap_center table,
+.wrap_box table,
+.wrap_info table, .wrap_important table, .wrap_alert table, .wrap_tip table, .wrap_help table, .wrap_todo table, .wrap_download table {
+ width: 100%;
+}
+/* emulate a headline */
+.wrap_column em strong,
+.wrap_left em strong, .wrap_right em strong, .wrap_center em strong,
+.wrap_box em strong,
+.wrap_info em strong, .wrap_important em strong, .wrap_alert em strong, .wrap_tip em strong, .wrap_help em strong, .wrap_todo em strong, .wrap_download em strong {
+ font-size: 130%;
+ font-weight: bold;
+ font-style: normal;
+ display: block;
+}
+/* emulate a bigger headline with a bottom border */
+.wrap_column em strong em.u,
+.wrap_left em strong em.u, .wrap_right em strong em.u, .wrap_center em strong em.u,
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ font-size: 115%;
+ border-bottom: 1px solid __border__;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+}
+/* different bigger headline for safety notes */
+.wrap_danger em strong em.u, .wrap_warning em strong em.u, .wrap_caution em strong em.u, .wrap_notice em strong em.u, .wrap_safety em strong em.u {
+ font-size: 115%;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+ text-transform: uppercase;
+ border-bottom-width: 0;
+}
+/* change border colour of emulated headlines inside boxes to something more neutral
+ (to match all the different background colours) */
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ border-bottom-color: #999;
+}
+
+
+/* columns
+********************************************************************/
+
+.wrap_left,
+.wrap_column {
+ float: left;
+ margin-right: 1.5em;
+}
+.wrap_right {
+ float: right;
+ margin-left: 1.5em;
+}
+.wrap_center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+/*
+.wrap_column,
+.wrap_left,
+.wrap_right {
+ overflow: hidden;
+}
+*/
+.wrap_container {
+ margin-right: -1.5em;
+}
+
+
+/* alignments
+********************************************************************/
+
+.wrap_leftalign {
+ text-align: left;
+}
+.wrap_centeralign {
+ text-align: center;
+}
+.wrap_rightalign {
+ text-align: right;
+}
+.wrap_justify {
+ text-align: justify;
+}
+
+
+/* box
+********************************************************************/
+
+/* see styles for boxes and notes with icons in style.css */
+
+/*____________ rounded corners ____________*/
+/* (only for modern browsers) */
+
+div.wrap_round {
+ border-radius: 20px;
+ -moz-border-radius: 20px;
+ -webkit-border-radius: 20px;
+ -khtml-border-radius: 20px;
+}
+span.wrap_round {
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -khtml-border-radius: 2px;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_lo {
+ color: __text_neu__;
+ font-size: 85%;
+}
+div.wrap_em {
+ color: #c00;
+ font-weight: bold;
+}
+
+/* see styles for highlighted text in style.css */
+
+
+/* typography
+********************************************************************/
+
+/*____________ fonts ____________*/
+
+div.wrap_sansserif {
+ font-family: Verdana,Tahoma,Geneva,"DejaVu Sans","Bitstream Vera Sans","Liberation Sans", Arial,Helvetica,FreeSans,"Liberation Sans","Nimbus Sans L", sans-serif;
+}
+div.wrap_serif {
+ font-family: Georgia,Garamond,"Palatino Linotype","Book Antiqua",Palatino,Palladio,"URW Palladio L","Liberation Serif",Didot,Gentium,"Bitstream Charter","Century Schoolbook L", "Times New Roman",Times,"Nimbus Roman No9 L","FreeSerif", serif;
+}
+div.wrap_monospace {
+ font-family: Courier,"Courier New",FreeMono,"Nimbus Mono L","Liberation Mono", "Lucida Console",Monaco,"DejaVu Sans Mono","Bitstream Vera Sans Mono", monospace;
+}
+
+/*____________ font size ____________*/
+
+div.wrap_bigger {
+ font-size: 125%;
+}
+div.wrap_muchbigger {
+ font-size: 200%;
+}
+div.wrap_smaller {
+ font-size: 75%;
+}
+
+/*____________ font colours ____________*/
+
+div.wrap_fgred {
+ color: #900;
+}
+div.wrap_fggreen {
+ color: #090;
+}
+div.wrap_fgblue {
+ color: #009;
+}
+div.wrap_fgcyan {
+ color: #099;
+}
+div.wrap_fgviolet {
+ color: #909;
+}
+div.wrap_fgyellow {
+ color: #990;
+}
+div.wrap_fggrey {
+ color: #666;
+}
+div.wrap_fgblack {
+ color: #000;
+}
+
+/* see styles for background colours and white font colour in style.css */
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ indent ____________*/
+
+div.wrap_indent {
+ padding-left: 1.5em;
+}
+
+/*____________ outdent ____________*/
+
+div.wrap_outdent {
+ margin-left: -1.5em;
+}
+
+/*____________ word wrapping in pre ____________*/
+
+divdiv.wrap_prewrap pre {
+ white-space: pre-wrap;
+ word-wrap: break-word;/* for IE < 8 */
+ /* white-space: -moz-pre-wrap; for FF < 3 */
+}
+
+/*____________ spoiler ____________*/
+
+divdiv.wrap_spoiler {
+ margin-bottom: 1.5em;
+}
+/* see rest of spoiler styles in style.css */
+
+/*____________ clear float ____________*/
+
+div.wrap_clear {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ font-size: 1px;
+ visibility: hidden;
+ overflow: hidden;
+}
+
+/*____________ hide ____________*/
+
+div.wrap_hide {
+ display: none;
+}
+
+
+/* STYLE.CSS */
+
+/* box
+********************************************************************/
+
+.wrap_box {
+ background: __background_alt__;
+ color: __text__;
+/*
+ overflow: hidden;
+*/
+}
+div.wrap_box,
+div.wrap_danger, div.wrap_warning, div.wrap_caution, div.wrap_notice, div.wrap_safety {
+ padding: 1em 1em .5em;
+ margin-bottom: 1.5em;
+}
+span.wrap_box,
+span.wrap_danger, span.wrap_warning, span.wrap_caution, span.wrap_notice, span.wrap_safety {
+ padding: 0 .3em;
+}
+
+/*____________ notes with icons ____________*/
+
+/* general styles for all note divs */
+div.wrap_info, div.wrap_important, div.wrap_alert, div.wrap_tip, div.wrap_help, div.wrap_todo, div.wrap_download {
+ padding: 1em 1em .5em 70px;
+ margin-bottom: 1.5em;
+ min-height: 68px;
+ background-position: 10px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html div.wrap_info, * html div.wrap_important, * html div.wrap_alert, * html div.wrap_tip, * html div.wrap_help, * html div.wrap_todo, * html div.wrap_download {
+ height: 68px;
+}
+/* general styles for all note spans */
+span.wrap_info, span.wrap_important, span.wrap_alert, span.wrap_tip, span.wrap_help, span.wrap_todo, span.wrap_download {
+ padding: 0 2px 0 20px;
+ min-height: 20px;
+ background-position: 2px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html span.wrap_info, * html span.wrap_important, * html span.wrap_alert, * html span.wrap_tip, * html span.wrap_help, * html span.wrap_todo, * html span.wrap_download {
+ height: 20px;
+}
+
+/*____________ info ____________*/
+.wrap_info { background-color: #d1d7df; }
+div.wrap_info { background-image: url(../../../wrap/images/note/48/info.png); }
+span.wrap_info { background-image: url(../../../wrap/images/note/16/info.png); }
+
+/*____________ important ____________*/
+.wrap_important { background-color: #ffd39f; }
+div.wrap_important { background-image: url(../../../wrap/images/note/48/important.png); }
+span.wrap_important { background-image: url(../../../wrap/images/note/16/important.png); }
+
+/*____________ alert ____________*/
+.wrap_alert { background-color: #ffbcaf; }
+div.wrap_alert { background-image: url(../../../wrap/images/note/48/alert.png); }
+span.wrap_alert { background-image: url(../../../wrap/images/note/16/alert.png); }
+
+/*____________ tip ____________*/
+.wrap_tip { background-color: #fff79f; }
+div.wrap_tip { background-image: url(../../../wrap/images/note/48/tip.png); }
+span.wrap_tip { background-image: url(../../../wrap/images/note/16/tip.png); }
+
+/*____________ help ____________*/
+.wrap_help { background-color: #dcc2ef; }
+div.wrap_help { background-image: url(../../../wrap/images/note/48/help.png); }
+span.wrap_help { background-image: url(../../../wrap/images/note/16/help.png); }
+
+/*____________ todo ____________*/
+.wrap_todo { background-color: #c2efdd; }
+div.wrap_todo { background-image: url(../../../wrap/images/note/48/todo.png); }
+span.wrap_todo { background-image: url(../../../wrap/images/note/16/todo.png); }
+
+/*____________ download ____________*/
+.wrap_download { background-color: #d6efc2; }
+div.wrap_download { background-image: url(../../../wrap/images/note/48/download.png); }
+span.wrap_download { background-image: url(../../../wrap/images/note/16/download.png); }
+
+
+/*____________ safety notes ____________*/
+
+.wrap_danger {
+ background-color: #c00;
+ color: #fff;
+}
+.wrap_warning {
+ background-color: #f60;
+ color: #000;
+}
+.wrap_caution {
+ background-color: #ff0;
+ color: #000;
+}
+.wrap_notice {
+ background-color: #06f;
+ color: #fff;
+}
+.wrap_safety {
+ background-color: #090;
+ color: #fff;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_hi {
+ background-color: #ff9;
+}
+
+/* typography
+********************************************************************/
+
+/*____________ font colours ____________*/
+
+div.wrap_fgwhite {
+ color: #fff;
+}
+
+/*____________ background colours ____________*/
+
+div.wrap_bgred {
+ background-color: #fcc;
+}
+div.wrap_bggreen {
+ background-color: #cfc;
+}
+div.wrap_bgblue {
+ background-color: #ccf;
+}
+div.wrap_bgcyan {
+ background-color: #9ff;
+}
+div.wrap_bgviolet {
+ background-color: #f9f;
+}
+div.wrap_bgyellow {
+ background-color: #ff9;
+}
+div.wrap_bggrey {
+ background-color: #ccc;
+}
+div.wrap_bgwhite {
+ background-color: #fff;
+}
+div.wrap_bgblack {
+ background-color: #000;
+}
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ spoiler ____________*/
+
+div.wrap_spoiler {
+ background-color: __background__ !important;
+ color: __background__ !important;
+ border: 1px dotted red;
+}
+
+/*____________ only print ____________*/
+
+div.wrap_onlyprint {
+ display: none;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/zero_link.png
new file mode 100644
index 000000000..5610884d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/zero_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/zero_over.png
new file mode 100644
index 000000000..3a14a577e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/zero_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/LEEME.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/LEEME.txt
new file mode 100755
index 000000000..fb08e2004
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/LEEME.txt
@@ -0,0 +1,36 @@
+TANGO-DEVWEB
+
+Tema para S5, creado originalmente por jEsuSdA 8)
+http://www.jesusda.com
+
+Modificaciones a partir del tema TANGO por john Edisson Ortiz Roman (laguaza AT gmail.com)
+
+
+
+
+Más temas en: http://www.jesusda.com/projects/presentaciones_s5
+
+
+
+Para customizar este tema modifica el archivo CSS:
+
+s5-ultraviolet/ui/default/pretty.css
+
+
+
+Los archivos gráficos referentes al tema están en la carpeta:
+
+/ui/default/pics
+
+
+Puedes personalizar el favicon copiando el tuyo en la carpeta:
+
+/ui/default/pics
+
+con el nombre favicon.ico
+
+
+
+Para cualquier sugerencia e idea, por favor, contacta conmigo a través de mi web. ;)
+
+--jEsuSdA 8) \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/audio_link.png
new file mode 100644
index 000000000..daa740c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/audio_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/audio_on.png
new file mode 100644
index 000000000..cd590aae9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/audio_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/audio_over.png
new file mode 100644
index 000000000..cf537a008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/audio_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/auto_link.png
new file mode 100644
index 000000000..1c2ca4817
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/auto_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/auto_on.png
new file mode 100644
index 000000000..4b0c923b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/auto_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/auto_over.png
new file mode 100644
index 000000000..dbea88975
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/auto_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/backgrnd.png
new file mode 100644
index 000000000..0e48413d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/backgrnd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/blank.gif
new file mode 100755
index 000000000..75b945d25
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/blank.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/delay_link.png
new file mode 100644
index 000000000..c4d99cd57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/delay_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/exit_link.png
new file mode 100644
index 000000000..1bfd38790
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/exit_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/exit_over.png
new file mode 100644
index 000000000..0fdd1c605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/exit_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/fade_link.png
new file mode 100644
index 000000000..482e4d53e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/fade_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/fade_on.png
new file mode 100644
index 000000000..e12561fb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/fade_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/fade_over.png
new file mode 100644
index 000000000..fb8943c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/fade_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/footer.jpg
new file mode 100644
index 000000000..49370dbba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/footer.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/framing.css
new file mode 100755
index 000000000..14d8509e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/framing.css
@@ -0,0 +1,23 @@
+/* The following styles size, place, and layer the slide components.
+ Edit these if you want to change the overall slide layout.
+ The commented lines can be uncommented (and modified, if necessary)
+ to help you with the rearrangement process. */
+
+/* target = 1024x768 */
+
+div#header, div#footer, .slide {width: 100%; top: 0; left: 0;}
+div#header {top: 0; height: 3em; z-index: 1;}
+div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;}
+.slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;}
+div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;}
+div#controls form {position: absolute; bottom: 0; right: 0; width: 100%;
+ margin: 0;}
+#currentSlide {position: absolute; width: 10%; left: 45%; bottom: 1em; z-index: 10;}
+html>body #currentSlide {position: fixed;}
+
+/*
+div#header {background: #FCC;}
+div#footer {background: #CCF;}
+div#controls {background: #BBD;}
+div#currentSlide {background: #FFC;}
+*/
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/header.png
new file mode 100644
index 000000000..929dabba1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/iepngfix.htc
new file mode 100755
index 000000000..bba2db756
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/iepngfix.htc
@@ -0,0 +1,42 @@
+<public:component>
+<public:attach event="onpropertychange" onevent="doFix()" />
+
+<script>
+
+// IE5.5+ PNG Alpha Fix v1.0 by Angus Turnbull http://www.twinhelix.com
+// Free usage permitted as long as this notice remains intact.
+
+// This must be a path to a blank image. That's all the configuration you need here.
+var blankImg = 'ui/default/blank.gif';
+
+var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
+
+function filt(s, m) {
+ if (filters[f]) {
+ filters[f].enabled = s ? true : false;
+ if (s) with (filters[f]) { src = s; sizingMethod = m }
+ } else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")';
+}
+
+function doFix() {
+ if ((parseFloat(navigator.userAgent.match(/MSIE (\S+)/)[1]) < 5.5) ||
+ (event && !/(background|src)/.test(event.propertyName))) return;
+
+ if (tagName == 'IMG') {
+ if ((/\.png$/i).test(src)) {
+ filt(src, 'image'); // was 'scale'
+ src = blankImg;
+ } else if (src.indexOf(blankImg) < 0) filt();
+ } else if (style.backgroundImage) {
+ if (style.backgroundImage.match(/^url[("']+(.*\.png)[)"']+$/i)) {
+ var s = RegExp.$1;
+ style.backgroundImage = '';
+ filt(s, 'crop');
+ } else filt();
+ }
+}
+
+doFix();
+
+</script>
+</public:component> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/index.html
new file mode 100755
index 000000000..39d8f46ad
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/index.html
@@ -0,0 +1,100 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es-es" >
+
+
+<head>
+
+ <title>[Título de la presentación aquí]</title>
+ <!-- metadata -->
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta http-equiv="content-language" content="es" />
+
+ <!--titulo y datos de publicación de la presentación-->
+
+ <meta name="description" content="[Título de la presentación aquí]" />
+
+ <meta name="keywords" content="[keywords aquí]" />
+ <meta name="presdate" content="[Aquí la fecha de publicación en formato aaaammdd]" />
+
+ <meta name="author" lang="es" content="[Nombre del autor de la presentación aquí]" />
+ <meta name="company" content="[Organización del autor de la presentación aquí]" />
+
+ <link rel="shortcut icon" href="ui/default/pics/favicon.ico" />
+
+ <meta name="generator" content="S5" />
+ <meta name="progid" content="quanta+" />
+ <meta name="version" content="S5 · jEsuSdA · 1.1" />
+ <!--Versión adaptada del estandard S5 1.1 por jEsuSdA-->
+
+ <meta name="robots" content="all" />
+
+ <!-- configuration parameters -->
+ <meta name="defaultView" content="slideshow" />
+ <meta name="controlVis" content="hidden" />
+
+ <!-- style sheet links -->
+ <link rel="stylesheet" href="ui/default/slides.css" type="text/css" media="projection" id="slideProj" />
+ <link rel="stylesheet" href="ui/default/outline.css" type="text/css" media="screen" id="outlineStyle" />
+ <link rel="stylesheet" href="ui/default/print.css" type="text/css" media="print" id="slidePrint" />
+ <link rel="stylesheet" href="ui/default/opera.css" type="text/css" media="projection" id="operaFix" />
+
+ <!-- S5 JS -->
+ <script src="ui/default/slides.js" type="text/javascript"></script>
+
+</head>
+
+<body>
+
+ <div class="layout">
+ <div id="controls"><!-- NO EDITAR --></div>
+ <div id="currentSlide"><!-- NO EDITAR --></div>
+
+ <div id="header">
+ <div id="logo"><!-- NO EDITAR --></div>
+ </div>
+
+ </div>
+
+ <div id="footer">
+ <h1>[Lugar/Fecha de la presentación aquí]</h1>
+ <h2>[Título de la presentación aquí]</h2>
+ </div>
+
+
+
+
+<div class="presentation">
+
+ <div class="slide">
+ <h1>[Título de la presentación aquí]</h1>
+ <h3>[Nombre del ponente aquí]</h3>
+ <h4>[Datos extra aquí]</h4>
+ </div>
+
+
+ <div class="slide">
+ <h1>[Título de la diapositiva]</h1>
+
+ <ul>
+ <li>[Punto uno]</li>
+ <li>[Punto dos]</li>
+ <li>[Punto tres]</li>
+ <li>[Punto cuatro]</li>
+ <li>[Punto cinco]</li>
+ </ul>
+
+ <div class="handout">
+
+ [Añade aquí cualquier nota o información que desees mostrar en la versión impresa, pero no en la versión en pantalla]
+
+ </div>
+
+ </div>
+ <!--fin slide-->
+
+</div>
+
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/last_link.png
new file mode 100644
index 000000000..4f158d35d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/last_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/last_over.png
new file mode 100644
index 000000000..a7b629995
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/last_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/list_link.png
new file mode 100644
index 000000000..7e299bb50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/list_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/loop_link.png
new file mode 100644
index 000000000..41e12cb15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/loop_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/loop_on.png
new file mode 100644
index 000000000..2ffcacae1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/loop_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/loop_over.png
new file mode 100644
index 000000000..9fe420153
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/loop_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/next_link.png
new file mode 100644
index 000000000..2b9f44c4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/next_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/next_over.png
new file mode 100644
index 000000000..25788124d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/next_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/notes_link.png
new file mode 100644
index 000000000..bb4a8ae37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/notes_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/notes_over.png
new file mode 100644
index 000000000..c6bfe69fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/notes_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/opera.css
new file mode 100755
index 000000000..9e9d2a3c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/opera.css
@@ -0,0 +1,7 @@
+/* DO NOT CHANGE THESE unless you really want to break Opera Show */
+.slide {
+ visibility: visible !important;
+ position: static !important;
+ page-break-before: always;
+}
+#slide0 {page-break-before: avoid;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/outline.css
new file mode 100755
index 000000000..62db519ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/outline.css
@@ -0,0 +1,15 @@
+/* don't change this unless you want the layout stuff to show up in the outline view! */
+
+.layout div, #footer *, #controlForm * {display: none;}
+#footer, #controls, #controlForm, #navLinks, #toggle {
+ display: block; visibility: visible; margin: 0; padding: 0;}
+#toggle {float: right; padding: 0.5em;}
+html>body #toggle {position: fixed; top: 0; right: 0;}
+
+/* making the outline look pretty-ish */
+
+#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
+#slide0 h1 {padding-top: 1.5em;}
+.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em;
+ border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
+#toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pause_link.png
new file mode 100644
index 000000000..2561cb4a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pause_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pause_on.png
new file mode 100644
index 000000000..2fc9c4a4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pause_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pause_over.png
new file mode 100644
index 000000000..7a7c80ddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pause_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/background-foot.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/background-foot.png
new file mode 100755
index 000000000..5b29fb303
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/background-foot.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/background-head.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/background-head.png
new file mode 100755
index 000000000..f36ad1acb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/background-head.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/background-main.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/background-main.png
new file mode 100755
index 000000000..cb5106987
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/background-main.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/favicon.ico b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/favicon.ico
new file mode 100755
index 000000000..8de7eb42b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/favicon.ico
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/logo.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/logo.png
new file mode 100755
index 000000000..51e5173be
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/logo.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/table-background.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/table-background.png
new file mode 100755
index 000000000..89a7e4fa2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/table-background.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/table-header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/table-header.png
new file mode 100755
index 000000000..4c3a86b44
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/table-header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pretty.css
new file mode 100755
index 000000000..8e807b108
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pretty.css
@@ -0,0 +1,583 @@
+/* Following are the presentation styles -- edit away! */
+
+body
+{
+ background: #FFF url(pics/background-main.png) top left repeat;
+ color: #000; font-size: 2em;
+/* font-family: Trebuchet MS, Arial, Helvetica, sans-serif; */
+ font-family: Arial, Helvetica, sans-serif;
+
+}
+
+:link, :visited
+{
+ text-decoration: none;
+ color: #00C;
+}
+
+
+
+h1, h2, h3, h4
+{
+ font-size: 100%;
+ margin: 0;
+ padding: 0;
+ font-weight: inherit;
+}
+
+h1 abbr
+{
+ font-variant: small-caps;
+}
+
+ul, pre
+{
+ margin: 0;
+ line-height: 1em;
+}
+
+html, body
+{
+ margin: 0;
+ padding: 0;
+}
+
+blockquote, q
+{
+ font-style: italic;
+}
+
+blockquote
+{
+ padding: 0 2em 0.5em;
+ margin: 0 1.5em 0.5em;
+ text-align: center;
+ font-size: 1em;
+}
+
+blockquote p
+{
+ margin: 0;
+}
+
+blockquote i
+{
+ font-style: normal;
+}
+
+blockquote b
+{
+ display: block;
+ margin-top: 0.5em;
+ font-weight: normal;
+ font-size: smaller;
+ font-style: normal;
+}
+
+blockquote b i
+{
+ font-style: italic;
+}
+
+kbd
+{
+ font-weight: bold;
+ font-size: 1em;
+}
+
+sup
+{
+ font-size: smaller;
+ line-height: 1px;
+}
+
+
+ul.urls
+{
+ list-style: none;
+ display: inline;
+ margin: 0;
+}
+
+.urls li
+{
+ display: inline;
+ margin: 0;
+}
+
+.notes
+{
+ display: none;
+}
+
+.external
+{
+ border-bottom: 1px dotted gray;
+}
+
+html>body .external
+{
+ border-bottom: none;
+}
+
+.external:after
+{
+ content: " \274F";
+ font-size: smaller;
+ color: #fff;
+}
+
+.incremental, .incremental *, .incremental *:after
+{
+ color: #fff;
+ visibility: visible;
+}
+
+img.incremental
+{
+ visibility: hidden;
+}
+
+.slide .current
+{
+ color: #fff;
+}
+
+
+/* ============== */
+/* === SLIDES === */
+/* ============== */
+
+.slide code
+{
+ padding: 2px 0.25em;
+ font-weight: bold;
+}
+
+.slide code.bad, code del
+{
+ color: red;
+}
+
+.slide code.old
+{
+ color: silver;
+}
+
+.slide pre
+{
+
+ color: #ffca00;
+ display:block;
+ font-weight:bold;
+ font-family: Arial, Sans-Serif !important;
+ font-size:41.5%;
+ line-height:1.5em;
+ background:#2e3436 url(pics/back_console.png) right bottom no-repeat ;
+ border:5px solid #ccc;
+ padding:1em 1em 1em 1em;
+
+
+}
+
+.slide pre code
+{
+ font-family: Arial, Sans-Serif !important;
+ display:block;
+ margin:0;
+ padding:0;
+}
+
+
+
+.slide ul
+{
+ margin-left: 5%;
+ margin-right: 7%;
+ list-style: disc;
+}
+
+.slide li
+{
+ margin-top: 0.75em;
+ margin-right: 0;
+}
+
+.slide ul ul
+{
+ line-height: 1;
+}
+
+.slide ul ul li
+{
+ margin: .2em;
+ font-size: 85%;
+ list-style: square;
+}
+
+.slide img.leader
+{
+ display: block;
+ margin: 0 auto;
+}
+
+
+/* ========================= */
+/* === HEADER AND FOOTER === */
+/* ========================= */
+
+div#logo
+{
+ position:absolute;
+ top:0%;
+ right:0%;
+ background:url(pics/logo.png) 50% 50% no-repeat;
+ height:200%;
+ width:150px;
+}
+
+div#header, div#footer
+{
+ background: #a80231;
+ color: #FFF;
+}
+
+
+div#header
+{
+ background:#7ea1c9 url(pics/background-head.png) bottom left repeat-x;
+ line-height: 1px;
+}
+
+div#footer
+{
+ background:#7ea1c9 url(pics/background-foot.png) top left repeat-x;
+ font-size: 0.5em;
+ font-weight: bold;
+ padding: 1em 0;
+}
+
+
+
+
+
+#footer h1, #footer h2
+{
+ display: block;
+ padding: 0 1em;
+}
+
+#footer h2
+{
+ font-style: italic;
+}
+
+
+
+/* ============== */
+/* === CLASES === */
+/* ============== */
+
+div.long
+{
+ font-size: 0.75em;
+}
+
+.slide h1
+{
+ position: absolute;
+ top: 0.7em;
+ left: 87px;
+ z-index: 1;
+ margin: 0;
+ padding: 0.3em 0 0 50px;
+ white-space: nowrap;
+ font-weight: bold;
+ font-size: 150%/1em;
+
+ text-transform: capitalize;
+ color: #fff;
+ background: transparent;
+}
+
+.slide h3
+{
+ font-size: 130%;
+}
+
+/* ================ */
+/* === CONTROLS === */
+/* ================ */
+
+#currentSlide
+{
+ text-align: center;
+ font-size: 0.6em;
+ font-weight:bold;
+ color: #fff;
+}
+
+#slide0
+{
+ padding-top: 3.5em;
+ font-size: 90%;
+}
+
+#slide0 h1
+{
+ position: static;
+ margin: 1em 0 0;
+ padding: 0;
+/* font: bold 2em Helvetica, sans-serif; */
+ font-weight: bold;
+ font-size:2em;
+ white-space: normal;
+ color: #000;
+ background: transparent;
+}
+
+#slide0 h2
+{
+ font-weight: bold;
+ font-style: italic;
+ font-size: 1em;
+ margin: 0.25em;
+}
+
+#slide0 h3
+{
+ margin-top: 1.5em;
+ font-size: 1.5em;
+}
+
+#slide0 h4
+{
+ margin-top: 0;
+ font-size: 1em;
+}
+
+/* ================ */
+/* === JESUSDA === */
+/* ================ */
+
+.first-pic
+{
+
+ float:right;
+ margin-top:-2em;
+}
+
+/* ================ */
+
+.align-center
+{
+ text-align:center;
+}
+/* ================ */
+
+.float-left , .left-column
+{
+ float:left !important;
+ width:49% !important;
+}
+
+.float-right , .right-column
+{
+ float:right !important;
+ width:49% !important;
+}
+/* ================ */
+.fullscreen
+{
+ z-index:1000 !important;
+ position:fixed !important;
+ top:0;
+ left:0;
+ width:100% !important;
+ height:100% !important;
+
+ background: #fff url(pics/background-main.png) top left no-repeat;
+
+ text-align:center;
+ margin-left:-1.65em;
+
+}
+
+.fullscreen h1
+{
+ display:none;
+}
+
+.rotulo
+{
+ font-size:800%;
+ text-align:center;
+ margin-top:-0.05em;
+
+}
+
+.rotulo2
+{
+ font-size:200%;
+ text-align:center;
+ font-weight:bolder;
+ margin-top:-0.05em;
+
+}
+
+.align-center img
+{
+ margin:auto;
+ text-align:center;
+ margin:0;
+}
+
+/* ========================= */
+/* === TABLAS === */
+/* ========================= */
+
+table
+{
+ background:url(pics/table-background.png) bottom left repeat-x #fff;
+ margin-right:1em;
+ font-size:70%;
+ border:1px solid #31447b !important;
+ border-spacing: 0;
+ text-align:center;
+}
+
+table td
+{
+ padding:0.5em;
+ font-size:90%;
+ border:1px solid #31447b !important;
+ border-spacing: 0;
+ text-align:center;
+}
+
+th
+{
+ background:url(pics/table-header.png) top left repeat-x #7ea1c9;
+ color:#fff;
+}
+
+th a
+{
+ color:#fff !important;
+}
+
+
+
+table caption
+{
+ margin-bottom:1em;
+ margin-top:1em;
+ margin-left:-7em;
+
+
+}
+
+
+display-none
+{
+ display:none;
+}
+
+div#controls {position: absolute; left: 0; bottom: 0; width: 100%; text-align: center; font: bold 1em Verdana, Arial, Helvetica, sans-serif;}
+html>body div#controls {background: transparent; position: fixed; padding: 0; top: auto; text-align: center;}
+#controls #sheet {display: none;}
+#controls #controlForm {height: 32px; width: 100%; text-align: center; vertical-align: middle;}
+#controls #navLinks {border-top: 1px solid #999; overflow: hidden; padding: 0; margin: 0; height: 32px; width: 100%; background-color: #808080; text-align: center; vertical-align: middle; white-space: nowrap;}
+#controls #navLinks ul {margin: 0 auto; padding: 0; height: 32px; width: 500px; white-space: nowrap; text-align: center;}
+#controls #navLinks ul li {list-style: none; display: inline; margin: 0; padding: 0; float: left; height: 32px; width: 32px; text-align: center; background-color: transparent;}
+#controls #navLinks ul li.vr {list-style: none; display: inline; margin: 0px 2px; padding: 0; float: left; height: 32px; width: 1px; text-align: center; background-color: #606060;}
+#controls #navLinks ul li a {margin: 0; padding: 0; float: left; height: 32px; width: 32px; background-color: transparent;}
+
+#controls #navLinks ul li#exit {background: url(exit_link.png) no-repeat top left;}
+#controls #navLinks ul li#exit a:hover {background: url(exit_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#toggle {background: url(toggle_link.png) no-repeat top left;}
+#controls #navLinks ul li#toggle a:hover {background: url(toggle_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#show-notes {background: url(notes_link.png) no-repeat top left;}
+#controls #navLinks ul li#show-notes a:hover {background: url(notes_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#zero {background: url(zero_link.png) no-repeat top left;}
+#controls #navLinks ul li#zero a:hover {background: url(zero_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#prev {background: url(prev_link.png) no-repeat top left;}
+#controls #navLinks ul li#prev a:hover {background: url(prev_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#next {background: url(next_link.png) no-repeat top left;}
+#controls #navLinks ul li#next a:hover {background: url(next_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#last {background: url(last_link.png) no-repeat top left;}
+#controls #navLinks ul li#last a:hover {background: url(last_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#lst {background: url(list_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#fade a.isoff {background: url(fade_link.png) no-repeat top left;}
+#controls #navLinks ul li#fade a.ison {background: url(fade_on.png) no-repeat top right;}
+#controls #navLinks ul li#fade a:hover {background: url(fade_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#audio {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.isoff {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.ison {background: url(audio_on.png) no-repeat top right;}
+#controls #navLinks ul li#audio a:hover {background: url(audio_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#vol {background: url(volume_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#auto a.isoff {background: url(auto_link.png) no-repeat top left;}
+#controls #navLinks ul li#auto a.ison {background: url(auto_on.png) no-repeat top right;}
+#controls #navLinks ul li#auto a:hover {background: url(auto_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#pause a.isoff {background: url(pause_link.png) no-repeat top left;}
+#controls #navLinks ul li#pause a.ison {background: url(pause_on.png) no-repeat top right;}
+#controls #navLinks ul li#pause a:hover {background: url(pause_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#loop a.isoff {background: url(loop_link.png) no-repeat top left;}
+#controls #navLinks ul li#loop a.ison {background: url(loop_on.png) no-repeat top right;}
+#controls #navLinks ul li#loop a:hover {background: url(loop_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#del {background: url(delay_link.png) no-repeat top left;}
+
+#jumplist, #volumelist, #delaylist {padding: 0; margin: 0; width: 32px; height: 32px; cursor: n-resize;}
+
+#guru {position: absolute; visibility: visible; left: 0px; top: 0px; padding: 4px; width: 99%; height: auto; text-align: center; background-color: black; z-index: 10;}
+#guru div {border: solid 3px red; padding: 4px; font-family: monospace; font-size: 60%; width: auto; height: auto; color: red; text-align: center;}
+
+/*
+#currentSlide {white-space: nowrap; text-align: center; margin-bottom: -0.5em; font-size: 0.5em; background-color: transparent; color: #999;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 0; padding: 0; font: bold 2em Verdana, Arial, Helvetica, sans-serif; font-variant: small-caps; text-shadow: 0.1em 0.1em 0.1em #666; white-space: normal; color: #222; background-color: transparent;}
+#slide0 h2 {font: bold italic 1em Arial, Helvetica, sans-serif; margin: 0.25em;}
+#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+*/
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.external {border-bottom: 1px dotted gray;}
+html>body .external {border-bottom: none;}
+.external:after {content: " \274F"; font-size: smaller; color: #999;}
+
+.incremental, .incremental *, .incremental *:after {color: #ccc; visibility: visible;}
+img.incremental, canvas.incremental {visibility: hidden;}
+.slide .current {color: #B02;}
+
+/* diagnostics
+li:after {content: " [" attr(class) "]"; color: #F88;}
+*/
+
+table.piechart, table.barchart, table.linechart { border-spacing: 0.3em 0.15em; }
+table.piechart tr th, table.barchart tr th, table.linechart tr th { white-space: nowrap; }
+table.piechart tr td, table.barchart tr td, table.linechart tr td { vertical-align: top; white-space: nowrap; }
+table.piechart tr td.col, table.barchart tr td.col, table.linechart tr td.col { border-bottom: 1px solid #555; border-right: 1px solid #555; }
+table.fs90 tr td, table.fs90 tr th, div.fs90, pre.fs90, p.fs90 ,ul.fs90 {font-size: 0.9em; }
+table.fs75 tr td, table.fs75 tr th, div.fs75, pre.fs75, p.fs75 ,ul.fs75 {font-size: 0.75em; }
+table.fs66 tr td, table.fs66 tr th, div.fs66, pre.fs66, p.fs66 ,ul.fs66 {font-size: 0.66em; }
+table.fs50 tr td, table.fs50 tr th, div.fs50, pre.fs50, p.fs50 ,ul.fs50 {font-size: 0.5em; }
+
+#soundmanager-debug {position:fixed; top:0px; right:0px; width:30em; height:20em; overflow:auto; border:1px solid red; padding:1em; margin:2em; font-family:"sans serif"; font-size: 12px;color: black; background-color:#f6f6f6; z-index: 100;}
+#soundmanager-debug code {font-size: 11px;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/prev_link.png
new file mode 100644
index 000000000..c31d21350
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/prev_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/prev_over.png
new file mode 100644
index 000000000..6fef4fa52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/prev_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/print.css
new file mode 100755
index 000000000..220083260
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/print.css
@@ -0,0 +1 @@
+/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul { page-break-inside: avoid; visibility: visible !important; } h1 { page-break-after: avoid; } html { width:100%; overflow:hidden; } body { font-size: 12pt; background: white; width:100%; } * { color: black; } #slide0 h1 { font-size: 200%; border: none; margin: 0.5em 0 0.25em; } #slide0 h3 { margin: 0; padding: 0; } #slide0 h4 { margin: 0 0 0.5em; padding: 0; } #slide0 { margin-bottom: 3em; } h1 { border-top: 2pt solid gray; border-bottom: 1px dotted silver; padding:0.2em 0 0.3em 0; } .extra { background: transparent !important; } div.extra, pre.extra, .example { font-size: 10pt; color: #333; } ul.extra a { font-weight: bold; } p.example { display: none; } #header { display: none; } #footer h1 { margin: 0; border-bottom: 1px solid; color: gray; font-style: italic; } #footer h2, #controls { display: none; } div.handout { display:block; border-top: 2px dotted #ccc; background:url(pics/back-handout-print.png) top right no-repeat #fff; min-height:6em; padding-right:6em; margin-bottom:1em; } .slide { display:block; background:url(pics/back-slide-print.png) top right no-repeat #fff; min-height:6em; margin-bottom:1em; } table { display:block; /* display:none; */ font-size:90%; overflow:hidden; margin-top:1em; margin-bottom:1em; } pre , code { margin:0; font-size:1pt; overflow:auto; } img { max-width:100% !important; } /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .layout, .layout * { display: none !important; } \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/s5-core.css
new file mode 100755
index 000000000..86444e041
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/s5-core.css
@@ -0,0 +1,9 @@
+/* Do not edit or override these styles! The system will likely break if you do. */
+
+div#header, div#footer, div#controls, .slide {position: absolute;}
+html>body div#header, html>body div#footer,
+ html>body div#controls, html>body .slide {position: fixed;}
+.handout {display: none;}
+.layout {display: block;}
+.slide, .hideme, .incremental {visibility: hidden;}
+#slide0 {visibility: visible;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/slides.css
new file mode 100755
index 000000000..0786d7dbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/slides.css
@@ -0,0 +1,3 @@
+@import url(s5-core.css); /* required to make the slide show run at all */
+@import url(framing.css); /* sets basic placement and size of slide components */
+@import url(pretty.css); /* stuff that makes the slides look better than blah */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/slides.js
new file mode 100644
index 000000000..510a04c0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/slides.js
@@ -0,0 +1,2812 @@
+// S5 1.3beta7 (18-Apr-2007) advanced version by C. Effenberger
+// Please see http://s5.netzgesta.de/ for more information
+// based on S5 v1.2a1 slides.js -- released into the Public Domain
+// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
+// about all the wonderful and talented contributors to this code!
+// audio extension: soundmanager2 is NOT Public Domain
+// Please see http://www.schillmania.com/projects/soundmanager2/ for information
+
+var undef;
+var slideCSS = '';
+var snum = 0;
+var smax = 1;
+var incpos = 0;
+var number = undef;
+var firstTime = 1;
+var s5mode = true;
+var helpmode = false;
+var defaultView = 'slideshow'; //outline
+var controlVis = 'visible';
+var s5Path = 'lib/plugins/s5reloaded/';
+
+// scalable images extension
+var empx = 0;
+var images = new Array();
+var canvas = new Array();
+var medias = new Array();
+var piecharts = new Array();
+var barcharts = new Array();
+var linecharts = new Array();
+// scalable images extension
+
+// transition extension
+var tranSitions = false;
+var fadeModus = false;
+var fadeDuration = 500;
+var incrDuration = 250;
+var opac = 1;
+var cid = '';
+var nid = '';
+var tid = '';
+var jl = '';
+// transition extension
+
+// autoplay extension
+var autoMatic = false;
+var playLoop = false;
+var playPause = false;
+var autoRun = false;
+var playDelay = 5000;
+var remainDer = 0;
+var incrDelay = 0;
+// autoplay extension
+
+// audio extension
+var sound = new Array();
+var audioSupport = false;
+var audioVolume = 100;
+var audioError = false;
+var swfUnloaded = true;
+var bgSoundItem = 9999;
+var curSoundID = -1;
+// audio extension
+
+// panel extension
+var imgWidth = 32;
+var imgHeight = 32;
+// panel extension
+
+// canvas chart extension
+var canvasSupport = false;
+var ChartData = new Array();
+var colorSlice = new Array();
+var font = document.createElement("img");
+font.setAttribute("src", s5Path+"ui/graphic_support/numeric.png");
+signs = {
+ '0': {sx: 0, sy: 0, sw: 48, sh: 64},
+ '1': {sx: 48, sy: 0, sw: 48, sh: 64},
+ '2': {sx: 96, sy: 0, sw: 48, sh: 64},
+ '3': {sx: 144, sy: 0, sw: 48, sh: 64},
+ '4': {sx: 192, sy: 0, sw: 48, sh: 64},
+ '5': {sx: 240, sy: 0, sw: 48, sh: 64},
+ '6': {sx: 288, sy: 0, sw: 48, sh: 64},
+ '7': {sx: 336, sy: 0, sw: 48, sh: 64},
+ '8': {sx: 384, sy: 0, sw: 48, sh: 64},
+ '9': {sx: 432, sy: 0, sw: 48, sh: 64},
+ '%': {sx: 480, sy: 0, sw: 48, sh: 64},
+ '.': {sx: 528, sy: 0, sw: 24, sh: 64}
+};
+var colorNames= new Array();
+colorNames["black"]="#000000"; colorNames["maroon"]="#800000";
+colorNames["green"]="#008000"; colorNames["olive"]="#808000";
+colorNames["navy"]="#000080"; colorNames["purple"]="#800080";
+colorNames["teal"]="#008080"; colorNames["gray"]="#808080";
+colorNames["silver"]="#C0C0C0"; colorNames["red"]="#FF0000";
+colorNames["lime"]="#00FF00"; colorNames["yellow"]="#FFFF00";
+colorNames["blue"]="#0000FF"; colorNames["fuchsia"]="#FF00FF";
+colorNames["aqua"]="#00FFFF"; colorNames["white"]="#FFFFFF";
+colorNames["aliceblue"]="#F0F8FF"; colorNames["antiquewhite"]="#FAEBD7";
+colorNames["aquamarine"]="#7FFFD4"; colorNames["azure"]="#F0FFFF";
+colorNames["beige"]="#F5F5DC"; colorNames["blueviolet"]="#8A2BE2";
+colorNames["brown"]="#A52A2A"; colorNames["burlywood"]="#DEB887";
+colorNames["cadetblue"]="#5F9EA0"; colorNames["chartreuse"]="#7FFF00";
+colorNames["chocolate"]="#D2691E"; colorNames["coral"]="#FF7F50";
+colorNames["cornflowerblue"]="#6495ED"; colorNames["cornsilk"]="#FFF8DC";
+colorNames["crimson"]="#DC143C"; colorNames["darkblue"]="#00008B";
+colorNames["darkcyan"]="#008B8B"; colorNames["darkgoldenrod"]="#B8860B";
+colorNames["darkgray"]="#A9A9A9"; colorNames["darkgreen"]="#006400";
+colorNames["darkkhaki"]="#BDB76B"; colorNames["darkmagenta"]="#8B008B";
+colorNames["darkolivegreen"]="#556B2F"; colorNames["darkorange"]="#FF8C00";
+colorNames["darkorchid"]="#9932CC"; colorNames["darkred"]="#8B0000";
+colorNames["darksalmon"]="#E9967A"; colorNames["darkseagreen"]="#8FBC8F";
+colorNames["darkslateblue"]="#483D8B"; colorNames["darkslategray"]="#2F4F4F";
+colorNames["darkturquoise"]="#00CED1"; colorNames["darkviolet"]="#9400D3";
+colorNames["deeppink"]="#FF1493"; colorNames["deepskyblue"]="#00BFFF";
+colorNames["dimgray"]="#696969"; colorNames["dodgerblue"]="#1E90FF";
+colorNames["firebrick"]="#B22222"; colorNames["floralwhite"]="#FFFAF0";
+colorNames["forestgreen"]="#228B22"; colorNames["gainsboro"]="#DCDCDC";
+colorNames["ghostwhite"]="#F8F8FF"; colorNames["gold"]="#FFD700";
+colorNames["goldenrod"]="#DAA520"; colorNames["greenyellow"]="#ADFF2F";
+colorNames["honeydew"]="#F0FFF0"; colorNames["hotpink"]="#FF69B4";
+colorNames["indianred"]="#CD5C5C"; colorNames["indigo"]="#4B0082";
+colorNames["ivory"]="#FFFFF0"; colorNames["khaki"]="#F0E68C";
+colorNames["lavender"]="#E6E6FA"; colorNames["lavenderblush"]="#FFF0F5";
+colorNames["lawngreen"]="#7CFC00"; colorNames["lemonchiffon"]="#FFFACD";
+colorNames["lightblue"]="#ADD8E6"; colorNames["lightcoral"]="#F08080";
+colorNames["lightcyan"]="#E0FFFF"; colorNames["lightgoldenrodyellow"]="#FAFAD2";
+colorNames["lightgreen"]="#90EE90"; colorNames["lightgrey"]="#D3D3D3";
+colorNames["lightpink"]="#FFB6C1"; colorNames["lightsalmon"]="#FFA07A";
+colorNames["lightseagreen"]="#20B2AA"; colorNames["lightskyblue"]="#87CEFA";
+colorNames["lightslategray"]="#778899"; colorNames["lightsteelblue"]="#B0C4DE";
+colorNames["lightyellow"]="#FFFFE0"; colorNames["limegreen"]="#32CD32";
+colorNames["linen"]="#FAF0E6"; colorNames["mediumaquamarine"]="#66CDAA";
+colorNames["mediumblue"]="#0000CD"; colorNames["mediumorchid"]="#BA55D3";
+colorNames["ediumpurple"]="#9370D"; colorNames["mediumseagreen"]="#3CB371";
+colorNames["mediumslateblue"]="#7B68EE"; colorNames["mediumspringgreen"]="#00FA9A";
+colorNames["mediumturquoise"]="#48D1CC"; colorNames["mediumvioletred"]="#C71585";
+colorNames["midnightblue"]="#191970"; colorNames["mintcream"]="#F5FFFA";
+colorNames["mistyrose"]="#FFE4E1"; colorNames["moccasin"]="#FFE4B5";
+colorNames["navajowhite"]="#FFDEAD"; colorNames["oldlace"]="#FDF5E6";
+colorNames["olivedrab"]="#6B8E23"; colorNames["orange"]="#FFA500";
+colorNames["orangered"]="#FF4500"; colorNames["orchid"]="#DA70D6";
+colorNames["palegoldenrod"]="#EEE8AA"; colorNames["palegreen"]="#98FB98";
+colorNames["paleturquoise"]="#AFEEEE"; colorNames["palevioletred"]="#DB7093";
+colorNames["papayawhip"]="#FFEFD5"; colorNames["peachpuff"]="#FFDAB9";
+colorNames["peru"]="#CD853F"; colorNames["pink"]="#FFC0CB";
+colorNames["plum"]="#DDA0DD"; colorNames["powderblue"]="#B0E0E6";
+colorNames["rosybrown"]="#BC8F8F"; colorNames["royalblue"]="#4169E1";
+colorNames["saddlebrown"]="#8B4513"; colorNames["salmon"]="#FA8072";
+colorNames["sandybrown"]="#F4A460"; colorNames["seagreen"]="#2E8B57";
+colorNames["seashell"]="#FFF5EE"; colorNames["sienna"]="#A0522D";
+colorNames["skyblue"]="#87CEEB"; colorNames["slateblue"]="#6A5ACD";
+colorNames["slategray"]="#708090"; colorNames["snow"]="#FFFAFA";
+colorNames["springgreen"]="#00FF7F"; colorNames["steelblue"]="#4682B4";
+colorNames["tan"]="#D2B48C"; colorNames["thistle"]="#D8BFD8";
+colorNames["tomato"]="#FF6347"; colorNames["turquoise"]="#40E0D0";
+colorNames["violet"]="#EE82EE"; colorNames["wheat"]="#F5DEB3";
+colorNames["whitesmoke"]="#F5F5F5"; colorNames["yellowgreen"]="#9ACD32";
+var canvas_bgcolor = "";
+var canvas_width = 200;
+var canvas_height = 200;
+var canvas_noshade = 0;
+var canvas_nofill = 0;
+var canvas_noshadow = 0;
+var canvas_htmltext = 0;
+var canvas_imgtext = 0;
+var canvas_notext = 0;
+// canvas chart extension
+
+var s5NotesWindow;
+var s5NotesWindowLoaded = false;
+var previousSlide = 0;
+var presentationStart = new Date();
+var slideStart = new Date();
+
+var countdown = {
+ timer: 0,
+ state: 'pause',
+ start: new Date(),
+ end: 0,
+ remaining: 0
+};
+
+var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
+if(isIE) var notIE7 = parseInt(navigator.appVersion) < 7 ? 1 : 0;
+var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
+var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
+var isS2 = navigator.userAgent.indexOf('Safari') >= 2 ? 1 : 0;
+
+function hasClass(object, className) {
+ if (!object.className) return false;
+ return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
+}
+
+function hasValue(object, value) {
+ if (!object) return false;
+ return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
+}
+
+function removeClass(object,className) {
+ if (!object || !hasClass(object,className)) return;
+ object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
+}
+
+function addClass(object,className) {
+ if (!object || hasClass(object, className)) return;
+ if (object.className) {
+ object.className += ' '+className;
+ } else {
+ object.className = className;
+ }
+}
+
+function changeClass(object,className) {
+ if (!object) return;
+ object.firstChild.className = className;
+}
+
+function GetElementsWithClassName(elementName,className) {
+ var allElements = document.getElementsByTagName(elementName);
+ var elemColl = new Array();
+ for (var i = 0; i< allElements.length; i++) {
+ if (hasClass(allElements[i], className)) {
+ elemColl[elemColl.length] = allElements[i];
+ }
+ }
+ return elemColl;
+}
+
+function isParentOrSelf(element, id) {
+ if (element == null || element.nodeName=='BODY') return false;
+ else if (element.id == id) return true;
+ else return isParentOrSelf(element.parentNode, id);
+}
+
+function nodeValue(node) {
+ var result = "";
+ if (node.nodeType == 1) {
+ var children = node.childNodes;
+ for (var i = 0; i < children.length; ++i) {
+ result += nodeValue(children[i]);
+ }
+ }
+ else if (node.nodeType == 3) {
+ result = node.nodeValue;
+ }
+ return(result);
+}
+
+function slideLabel() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var list = document.getElementById('jumplist');
+ smax = slideColl.length;
+ for (var n = 0; n < smax; n++) {
+ var obj = slideColl[n];
+ var did = 'slide' + n.toString();
+ obj.setAttribute('id',did);
+ var otext = '';
+ var menu = obj.firstChild;
+ if (!menu) continue; // to cope with empty slides
+ while (menu && menu.nodeType == 3) {
+ menu = menu.nextSibling;
+ }
+ if (!menu) continue; // to cope with slides with only text nodes
+ var menunodes = menu.childNodes;
+ for (var o = 0; o < menunodes.length; o++) {
+ otext += nodeValue(menunodes[o]);
+ }
+ list.options[list.length] = new Option(n + ' : ' + otext, n);
+ }
+}
+
+function currentSlide() {
+ var cs, at, fd, ss;
+ if (document.getElementById) {
+ cs = document.getElementById('currentSlide');
+ } else {
+ cs = document.currentSlide;
+ }
+ fd = fadeModus?"F":"&ndash;";
+ ss = audioSupport?"S":"&ndash;";
+ at = (autoMatic?(playPause?"||":(playLoop?"&gt;0":"&gt;|")):"&ndash;&ndash;");
+ cs.innerHTML = '<div id="plink" nowrap="nowrap">' +
+ '<span id="csFade">[' + fd + ss + ']<\/span>&nbsp;' +
+ '<span id="csHere"><strong>' + snum + '<\/strong><\/span>' +
+ '<span id="csSep">\/<\/span>' +
+ '<span id="csTotal">' + (smax-1) + '<\/span>&nbsp;' +
+ '<span id="csAuto">[' + at + ']<\/span>' +
+ '<\/div>';
+
+ if (snum == 0) {
+ cs.style.visibility = 'hidden';
+ } else {
+ cs.style.visibility = 'visible';
+ }
+}
+
+function go(step) {
+ if (document.getElementById('slideProj').disabled || step == 0) return;
+ jl = document.getElementById('jumplist');
+ cid = 'slide' + snum;
+ var ce = document.getElementById(cid);
+ if (incrementals[snum].length > 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ removeClass(incrementals[snum][i], 'current');
+ removeClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ if (step != 'j') {
+ snum += step;
+ lmax = smax - 1;
+ if (snum > lmax) snum = lmax;
+ if (snum < 0) snum = 0;
+ }else {
+ snum = parseInt(jl.value);
+ }
+ nid = 'slide' + snum;
+ var ne = document.getElementById(nid);
+ if (!ne) {
+ ne = document.getElementById('slide0');
+ nid = 'slide0';
+ snum = 0;
+ }
+ if (step < 0) {
+ incpos = incrementals[snum].length
+ }else {
+ incpos = 0;
+ }
+ if (incrementals[snum].length > 0 && incpos == 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ if (hasClass(incrementals[snum][i], 'current')) {
+ incpos = i + 1;
+ }else {
+ addClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ }
+ if (incrementals[snum].length > 0 && incpos > 0) {
+ addClass(incrementals[snum][incpos - 1], 'current');
+ }
+ var guru = document.getElementById('guru');
+ if(guru && snum==0) {
+ guru.style.visibility = 'visible';
+ }else if(guru && snum>0) {
+ guru.style.visibility = 'hidden';
+ }
+ if(tranSitions && s5mode && fadeModus) {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {fadeoutSound(curSoundID,true); } // audio support
+ }
+ changeOpac(0,nid);
+ changeOpac(100,cid);
+ ce.style.visibility = 'visible';
+ shiftOpacity(cid,fadeDuration);
+ window.setTimeout("changeSlides()",fadeDuration);
+ }else {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {stopSound(curSoundID); } // audio support
+ }
+ ce.style.visibility = 'hidden';
+ if (isOp) location.hash = nid;
+ ne.style.visibility = 'visible';
+ finishSlides();
+ }
+}
+
+function changeSlides() {
+ if(nid != cid) changeOpac(100,cid);
+ document.getElementById(cid).style.visibility = 'hidden';
+ document.getElementById(nid).style.visibility = 'visible';
+ if (isOp) location.hash = nid;
+ shiftOpacity(nid,fadeDuration);
+ window.setTimeout("finishSlides()",fadeDuration);
+}
+
+function finishSlides() {
+ jl.selectedIndex = snum;
+ currentSlide();
+ loadNote();
+ permaLink();
+ number = undef;
+ if(sound[getSoundID(nid)]) {
+ playSound(nid); // audio support
+ }else if(sound[bgSoundItem] && curSoundID != bgSoundItem) {
+ playSound(bgSoundItem); // audio support
+ }
+}
+
+function goTo(target) {
+ if (target >= smax || target == snum) return;
+ go(target - snum);
+}
+
+function subgo(step) {
+ if (step > 0) {
+ removeClass(incrementals[snum][incpos - 1],'current');
+ removeClass(incrementals[snum][incpos], 'incremental');
+ if(tranSitions && s5mode && fadeModus) {
+ if(!incrementals[snum][incpos].id) {
+ var tmp = new Date(); tid = "inc" + String(tmp.getTime());
+ incrementals[snum][incpos].id = tid;
+ }else {
+ tid = incrementals[snum][incpos].id;
+ }
+ if(typeof(incrementals[snum][incpos].src) != "undefined" || incrementals[snum][incpos].getContext) {
+ changeOpac(0,tid);
+ addClass(incrementals[snum][incpos],'current');
+ shiftOpacity(tid,incrDuration);
+ setTimeout("nextInc()",incrDuration);
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ } else {
+ incpos--;
+ removeClass(incrementals[snum][incpos],'current');
+ addClass(incrementals[snum][incpos], 'incremental');
+ addClass(incrementals[snum][incpos - 1],'current');
+ loadNote();
+ }
+}
+
+function nextInc() {
+ incpos++;
+ loadNote();
+}
+
+function toggle() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ var guru = document.getElementById('guru');
+ if (!slides.disabled) {
+ stopPlay();
+ if(audioSupport && !swfUnloaded) stopAllSounds();
+ slides.disabled = true;
+ outline.disabled = false;
+ s5mode = false;
+ fontSize(1,'em');
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'visible';
+ }
+ if(guru) guru.style.visibility = 'hidden';
+ } else {
+ slides.disabled = false;
+ outline.disabled = true;
+ s5mode = true;
+ fontScale();
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'hidden';
+ }
+ slideColl[snum].style.visibility = 'visible';
+ if(guru && snum==0) guru.style.visibility = 'visible';
+ }
+}
+
+function showHide(action) {
+ var obj = GetElementsWithClassName('*','hideme')[0];
+ switch (action) {
+ case 's':
+ obj.style.visibility = 'visible';
+ break;
+ case 'h':
+ obj.style.visibility = 'hidden';
+ break;
+ case 'k':
+ if (obj.style.visibility != 'visible') {
+ obj.style.visibility = 'visible';
+ } else {
+ obj.style.visibility = 'hidden';
+ }
+ break;
+ }
+}
+
+function keys(key) {
+ if (!key) {
+ key = event;
+ key.which = key.keyCode;
+ }
+ if (helpmode) {
+ dumpHelpReq();
+ return;
+ }
+ if (key.which == 84 && !isOp) {
+ toggle();
+ return;
+ }
+ if (s5mode) {
+ if (autoMatic) {
+ switch (key.which) {
+ case 70: // f/ading on/off
+ switchFade();
+ break;
+ case 83: // s/ound on/off
+ toggleSounds();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 65: // a/utoplay on/off
+ stopPlay();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 80: // p/ause
+ case 32: // spacebar
+ pausePlay();
+ break;
+ }
+ }else {
+ switch (key.which) {
+ case 8: // backspace = HELP
+ createHelpReq();
+ break;
+ case 10: // return
+ case 13: // enter
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ if(number != undef) {
+ goTo(number);
+ break;
+ }
+ case 32: // spacebar
+ case 34: // page down
+ case 39: // rightkey
+ case 40: // downkey
+ if(number != undef) {
+ go(number);
+ } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ break;
+ case 33: // page up
+ case 37: // leftkey
+ case 38: // upkey
+ if(number != undef) {
+ go(-1 * number);
+ } else if (!incrementals[snum] || incpos <= 0) {
+ go(-1);
+ } else {
+ subgo(-1);
+ }
+ break;
+ case 65: // a/utoplay
+ startPlay();
+ break;
+ case 72: // h
+ case 36: // home
+ goTo(0);
+ break;
+ case 69: // e
+ case 35: // end
+ goTo(smax-1);
+ break;
+ case 70: // f/ade transitions on/off
+ switchFade();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 83: // s/ound support on/off
+ toggleSounds();
+ break;
+ case 27: // escape
+ case 81: // q
+ if(!isOp) byby();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 78: // n
+ createNotesWindow();
+ break;
+ }
+ if (key.which < 48 || key.which > 57) {
+ number = undef;
+ } else {
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
+ }
+ }
+ }
+ return false;
+}
+
+function clicker(e) {
+ number = undef;
+ var target;
+ if (window.event) {
+ target = window.event.srcElement;
+ e = window.event;
+ } else {
+ target = e.target;
+ }
+ if (target.href != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
+ if (!helpmode) {
+ if (!e.which || e.which == 1) {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ }
+ } else {
+ dumpHelpReq();
+ }
+}
+
+function findSlide(hash) {
+ var target = null;
+ var slides = GetElementsWithClassName('*','slide');
+ for (var i = 0; i < slides.length; i++) {
+ var targetSlide = slides[i];
+ if ( (targetSlide.name && targetSlide.name == hash)
+ || (targetSlide.id && targetSlide.id == hash) ) {
+ target = targetSlide;
+ break;
+ }
+ }
+ while(target != null && target.nodeName != 'BODY') {
+ if (hasClass(target, 'slide')) {
+ return parseInt(target.id.slice(5));
+ }
+ target = target.parentNode;
+ }
+ return null;
+}
+
+function slideJump() {
+ if (window.location.hash == null) return;
+ var sregex = /^#slide(\d+)$/;
+ var matches = sregex.exec(window.location.hash);
+ var dest = null;
+ if (matches != null) {
+ dest = parseInt(matches[1]);
+ } else {
+ dest = findSlide(window.location.hash.slice(1));
+ }
+ if (dest != null)
+ go(dest - snum);
+}
+
+function fixLinks() {
+ var thisUri = window.location.href;
+ thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
+ var aelements = document.getElementsByTagName('A');
+ for (var i = 0; i < aelements.length; i++) {
+ var a = aelements[i].href;
+ var slideID = a.match('\#slide[0-9]{1,2}');
+ if ((slideID) && (slideID[0].slice(0,1) == '#')) {
+ var dest = findSlide(slideID[0].slice(1));
+ if (dest != null) {
+ if (aelements[i].addEventListener) {
+ aelements[i].addEventListener("click", new Function("e",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "if (e.preventDefault) e.preventDefault();"), true);
+ } else if (aelements[i].attachEvent) {
+ aelements[i].attachEvent("onclick", new Function("",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "event.returnValue = false;"));
+ }
+ }
+ }
+ }
+}
+
+function externalLinks() {
+ if (!document.getElementsByTagName) return;
+ var anchors = document.getElementsByTagName('a');
+ for (var i=0; i<anchors.length; i++) {
+ var anchor = anchors[i];
+ if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
+ anchor.target = '_blank';
+ addClass(anchor,'external');
+ }
+ }
+}
+
+function permaLink() {
+ document.getElementById('plink').href = window.location.pathname + '#slide' + snum;
+}
+
+function createControls() {
+ var controlsDiv = document.getElementById("controls");
+ if (!controlsDiv) return;
+ var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
+ var hideDiv, hideList = '';
+ if (controlVis == 'hidden') {
+ hideDiv = hider;
+ } else {
+ hideList = hider;
+ }
+ if(isOp) {
+ var str = '';
+ }else {
+ var str = '<a accesskey="t" id="sheet" title="toggle CSS" href="javascript:toggle();">&plusmn;<\/a>';
+ }
+ if(isIE) {
+ var tmp = "move around&xA0;until the color&xA0;change to red!";
+ }else if(isS2) {
+ var tmp = "move around\r\nuntil the color\r\nchange to red!";
+ }else {
+ var tmp = "move around until color change to red!";
+ }
+ if(isIE) {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] for keyboard help!"><ul>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst" style="vertical-align: middle; width: 160px;"><select style="cursor: auto; width: 160px; height: auto;" id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del" style="vertical-align: middle; width: 52px;"><select style="cursor: auto; width: 52px; height: auto;" id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul><\/div><\/form>';
+ }else {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] or double click this area for keyboard help!" ondblclick="createHelpReq();"><ul>' +
+ '<li id="exit"><a href="javascript:byby();" accesskey="q" title="exit Show"><\/a><\/li>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li class="vr"><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst"><a id="list" style="cursor:wait;" title="' + tmp + '"><\/a><select id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="fadeLinks" class="vr"><\/li>' +
+ '<li id="fade"><a class="isoff" href="javascript:switchFade();" accesskey="f" title="Transions"><\/a><\/li>' +
+ '<li id="audioLinks" class="vr"><\/li>' +
+ '<li id="audio"><a class="isoff" href="javascript:toggleSounds();" accesskey="s" title="Sounds" ><\/a><\/li>' +
+ '<li id="vol"><a id="volume" style="cursor:wait;" title="' + tmp + '"><\/a><select id="volumelist" title="select Volume" onchange="setVolume();"><option value="100">100<\/option><option value="90">90<\/option><option value="80">80<\/option><option value="70">70<\/option><option value="60">60<\/option><option value="50">50<\/option><option value="40">40<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="10">10<\/option><option value="0">0<\/option><\/select><\/li>' +
+ '<li id="autoLinks" class="vr"><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del"><a id="delay" style="cursor:wait;" title="' + tmp + '"><\/a><select id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul>' +
+ '<a href="http://s5.netzgesta.de" target="_blank" title="S5 Reloaded"><img style="position: absolute; right: 0; bottom: 0;" src="data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAYAAAASYli2AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAYpSURBVHjaYvz//z8DOYCRkZEZRAEx0Ij/f2HiAAHEgqYIpACkkB1J7g8Q/wLRIJ1QNSB5fiDmAOLvQKHPQPoHSB4ggFiQDGMCUnxALAPECkAsBLIdiD8A8SMgfghU8wlqkTgQK1ZVVWldv3792fr16y8D+c9AhgMEECPIy1DDRIDYAojdzMzMWNXV1UG2/v/y5Qvzw4cPP587d24/kH8Gar/uwoULQ+/cufNFXFyciZmZ+UVmZuZKoFmvAQII5kJOIDbi4uKK2Llz53EbG5vP6GGWn5+vMWnSpJtA5jcg5v327Rtnc3PzfSD79+rVq2WBNBtIHUAAwQzkAWKzBQsWnIUZFhISovXmzZsfkpKSDD09PY8kJCR+QtWCguGvrKwsz7Rp07Q4ODh+srCwgILiH0gSIIBgBrICsUBoaCgorBiANgqvXbtWDMg8AcQf9+7d+x0o9xbI/gJV/3fVqlUvmJiY/gIdcaWhoYETahEDQADBDPwNxO9h3gNpBiq6f/HiRbWjR4+yvnr16grQNbeh6kCWsxkYGIhClT8yNDQUgyYhBoAAYoIKfgXi06mpqUowQ+vr6x+uW7fu0suXL8+uWbOGS0BAwB7kC6jXvqmoqLDIyclxzZo1S4udnR2WtBgAAggWyyCXSgOxZUxMjGpWVtY7S0vLr8iRsnnzZl4/P7/DQCYoYtSA2DApKUkVGNNPDh06dBrIvwU06xNAAMEM5AIKqAOxCjQsmHl5eXWdnJx4N2zYcB4prd4CUpfwJRuAAGJCimULoGYpbm5uZ5DBnz9/5tq4caPWkSNHeJEc+g0aTFzfv3/nACabjzk5OW8FBQVloLmHASCAYJECUiTg7+//HJiQTzY2NsrfvXv3n7m5+T5YMgJGEkjDS2gY/pKRkeHt7Ow0Bsb0v9+/fz+HxTJAAMG8DHKFLTC9aRUXF79BT9Qgw4CWHAAy70FdYgjEDgkJCTpWVlYMQBfeAaaMPqBZbwECCGYgMzQGQSleCehS0X///jEDvf9lxYoVoOTyAIjfANX+BqrlBrL1gLFf09vb+0FaWvoHMBctA6USUKQABBAjrPiCliKg7AOKIG5ougLlju9Ipc1foDJWqMWGhYWFtsBg4RISEnrg5uY2BWQgQACxIBkGMkQKijmRfPwXWuI8ASp7DQ1vEP4DDO8PwBzzDJheT0CLPQaAAEJOh0o8zAzeihwMiv+gGZ0B4sz/bIwM797/YTh1/wfDIWj5qAfMmtFnzpz5ICIiwqKoqPgjKChoOtCs5wABhJyXpUCGzddgOIethJ71jEFi1nNwgQrKz8zv37//097eDop15qVLl0pAzWAACCAWhEMYOJFdduELA++b3wxsTIwMfzmYGH6xMDG8gYYpKAg+cnJy/gB6VwuYZFiA7E+wvAwQQCy46ozexwzG17+BYx6UVE4B8Vmo68CRFR0dDQo3UAHBBUwJ4lCLGAACCNnAv4zQxAkCxbIMZ0EuBIYb98EPDFo3voGTzjOogVzArGf969cvNmC2+wssHD7BDAQIIBakmHwPDPy3MAMNeBhgpfbbVEkGhqQbDJaXvjI8BPJB4jz79u37DcwlP+fPn38NuTwECCBkA1+8+8Nwtusxg+STHwwcP/8z8EuwMXA1KjBcBSlwEmRgBhrID/U2O7QMBIEHxsbGkrAwBAggmIGgNMT64AfDWyB+By0EQMVZlC0/wwsXQYa38hzgCGGBWv5ZU1OT4c+fP8yLFi1SA3r5Haw8BAggmIGg5KBpJ8BgeOYTg8S3f2DN/OxMDNwgw0AKnv0EJ+avsITu7u6+EZqzQEHwHFqaMwAEEAtShS/pLcTwrU+Z4QwsyQANOwIL06tfGV5BqwmQWoGKigoLYJnJvWPHjhstLS169vb2M0DqAAIIVh6CXHT/9ndIawEUITCXgUDrQwbGbe8YjkJdAzZQVVVV/t69e8LAgtUYaNgxWKQABBByacMHzfTK9gIMYkBZpj//GT4c+8gAKm1AsfseqPYPtHTXAtaEacBqlgHoyq+srKw3XV1dFwHlvwEEECNyYwmp3cIJjbUf0DbLP7RGEg+0bcMCjQxQzH8BWQgQQIzktr5wAYAAYmKgMgAIMAAp8Fx3osz1lgAAAABJRU5ErkJggg==" width="20" height="32" alt="S5" \/><\/a>' +
+ '<\/div><\/form>';
+ }
+ if (controlVis == 'hidden') {
+ var hidden = document.getElementById('navLinks');
+ } else {
+ var hidden = document.getElementById('jumplist');
+ }
+ addClass(hidden,'hideme');
+}
+
+function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
+ if (!s5mode && !isOp) return false;
+ var hScreen = screen.width; var vScreen = screen.height;
+ var vWindow = window.outerHeight; var hWindow = window.outerWidth;
+ if (isOp && s5mode && defaultView=='slideshow' && ((hScreen != hWindow) || (vScreen != vWindow))) {
+ toggle();
+ return false;
+ }
+ if (isOp && !s5mode && ((hScreen != hWindow) || (vScreen != vWindow))) return false;
+ if (isOp && !s5mode && (hScreen == hWindow) && (vScreen == vWindow)) toggle();
+ var vScale = 48; // both yield 16 (the usual browser default) at 1024x768
+ var hScale = 64; // perhaps should auto-calculate based on theme's declared value?
+ if (window.innerHeight) {
+ var vSize = window.innerHeight;
+ var hSize = window.innerWidth;
+ } else if (document.documentElement.clientHeight) {
+ var vSize = document.documentElement.clientHeight;
+ var hSize = document.documentElement.clientWidth;
+ } else if (document.body.clientHeight) {
+ var vSize = document.body.clientHeight;
+ var hSize = document.body.clientWidth;
+ } else {
+ var vSize = 700; // assuming 1024x768, minus chrome and such equals 8:5
+ var hSize = 1024; // these do not account for kiosk mode or Opera Show
+ }
+ var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
+ extendImgSizes(newSize); // scalable images extension
+ extendCanSizes(newSize); // scalable canvas extension
+ extendObjSizes(newSize); // scalable object extension
+ fontSize(newSize,"px");
+ if(!isS2 || firstTime==0) {
+ generateCanvas(); // dynamic canvas extension
+ }
+ if (isGe) { // hack to counter incremental reflow bugs
+ var obj = document.getElementsByTagName('body')[0];
+ obj.style.visibility = 'hidden';
+ obj.style.display = 'none';
+ obj.style.display = 'block';
+ obj.style.visibility = 'visible';
+ changeOpac(100,'slide' + snum);
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("fixReflow()",10);
+ }else {
+ setListPos(); // invisible select extension
+ }
+}
+
+function fixReflow() {
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("finishReflow()",10);
+}
+function finishReflow() {
+ setListPos(); // invisible select extension
+}
+
+function fontSize(val,fmt) {
+ var value = val + fmt;
+ if (!(s5ss = document.getElementById('s5ss'))) {
+ if (!document.createStyleSheet) {
+ document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
+ s5ss.setAttribute('media','screen, projection');
+ s5ss.setAttribute('id','s5ss');
+ } else {
+ document.createStyleSheet();
+ document.s5ss = document.styleSheets[document.styleSheets.length - 1];
+ }
+ }
+ if (!(document.s5ss && document.s5ss.addRule)) {
+ while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
+ s5ss.appendChild(document.createTextNode('html {font-size: ' + value + ' !important;}'));
+ } else {
+ document.s5ss.addRule('html','font-size: ' + value + ' !important;');
+ }
+}
+
+function windowChange() {
+ fontScale();
+}
+
+function notOperaFix() {
+ slideCSS = document.getElementById('slideProj').href;
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ slides.setAttribute('media','screen');
+ outline.disabled = true;
+ if (isGe) {
+ slides.setAttribute('href','null'); // Gecko fix
+ slides.setAttribute('href',slideCSS); // Gecko fix
+ }
+ if ((isIE && notIE7) && document.styleSheets && document.styleSheets[0]) {
+ document.styleSheets[0].addRule('img', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('div', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('.slide', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ }
+}
+
+function getIncrementals(obj) {
+ var incrementals = new Array();
+ if (!obj)
+ return incrementals;
+ var children = obj.childNodes;
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ if (hasClass(child, 'incremental')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'incremental');
+ for (var j = 0; j < child.childNodes.length; j++) {
+ if (child.childNodes[j].nodeType == 1) {
+ addClass(child.childNodes[j], 'incremental');
+ }
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ removeClass(child,'incremental');
+ }
+ }
+ if (hasClass(child, 'show-first')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'show-first');
+ if (child.childNodes[isGe].nodeType == 1) {
+ removeClass(child.childNodes[isGe], 'incremental');
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ }
+ }
+ incrementals = incrementals.concat(getIncrementals(child));
+ }
+ return incrementals;
+}
+
+function createIncrementals() {
+ var incrementals = new Array();
+ for (var i = 0; i < smax; i++) {
+ incrementals[i] = getIncrementals(document.getElementById('slide'+i));
+ }
+ return incrementals;
+}
+
+function trap(e) {
+ if (!e) {
+ e = event;
+ e.which = e.keyCode;
+ }
+ try {
+ modifierKey = e.ctrlKey || e.altKey || e.metaKey;
+ }
+ catch(e) {
+ modifierKey = false;
+ }
+ return modifierKey || e.which == 0;
+}
+
+// notes extension
+function noteLabel() { // Gives notes id's to match parent slides
+ var notes = GetElementsWithClassName('div','notes');
+ for (var i = 0; i < notes.length; i++) {
+ var note = notes[i];
+ var id = 'note' + note.parentNode.id.substring(5);
+ note.setAttribute('id',id);
+ }
+ resetElapsedSlide();
+ resetRemainingTime();
+ window.setInterval('updateElaspedTime()', 1000);
+}
+
+function createNotesWindow() { // creates a window for our notes
+ if (!s5NotesWindow || s5NotesWindow.closed) { // Create the window if it doesn't exist
+ s5NotesWindowLoaded = false;
+ // Note: Safari has a tendency to ignore window options preferring to default to the settings of the parent window, grr.
+ s5NotesWindow = window.open(s5Path+'ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0');
+ }
+ if (s5NotesWindowLoaded) { // Load the current note if the Note HTML has loaded
+ loadNote();
+ } else { // Keep trying...
+ window.setTimeout('createNotesWindow()', 50);
+ }
+}
+
+function loadNote() {
+// Loads a note into the note window
+ var notes = nextNotes = '<em class="disclaimer">There are no notes for this slide.</em>';
+ if (document.getElementById('note' + snum)) {
+ notes = document.getElementById('note' + snum).innerHTML;
+ }
+ if (document.getElementById('note' + (snum + 1))) {
+ nextNotes = document.getElementById('note' + (snum + 1)).innerHTML;
+ }
+
+ var jl = document.getElementById('jumplist');
+ var slideTitle = jl.options[jl.selectedIndex].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex) ? ' (' + jl.selectedIndex + '/' + (smax - 1) + ')' : '');
+ if (incrementals[snum].length > 0) {
+ slideTitle += ' <small>[' + incpos + '/' + incrementals[snum].length + ']</small>';
+ }
+ if (jl.selectedIndex < smax - 1) {
+ var nextTitle = jl.options[jl.selectedIndex + 1].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex + 1) ? ' (' + (jl.selectedIndex + 1) + '/' + (smax - 1) + ')' : '');
+ } else {
+ var nextTitle = '[end of slide show]';
+ }
+
+ if (s5NotesWindow && !s5NotesWindow.closed && s5NotesWindow.document) {
+ s5NotesWindow.document.getElementById('slide').innerHTML = slideTitle;
+ s5NotesWindow.document.getElementById('notes').innerHTML = notes;
+ s5NotesWindow.document.getElementById('next').innerHTML = nextTitle;
+ s5NotesWindow.document.getElementById('nextnotes').innerHTML = nextNotes;
+ }
+ resetElapsedSlide();
+}
+
+function minimizeTimer(id) {
+ var obj = s5NotesWindow.document.getElementById(id);
+ if (hasClass(obj,'collapsed')) {
+ removeClass(obj,'collapsed');
+ } else {
+ addClass(obj,'collapsed');
+ }
+}
+
+function resetElapsedTime() {
+ presentationStart = new Date();
+ slideStart = new Date();
+ updateElaspedTime();
+}
+
+function resetElapsedSlide() {
+ if (snum != previousSlide) {
+ slideStart = new Date();
+ previousSlide = snum;
+ updateElaspedTime();
+ }
+}
+
+function updateElaspedTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var now = new Date();
+ var ep = s5NotesWindow.document.getElementById('elapsed-presentation');
+ var es = s5NotesWindow.document.getElementById('elapsed-slide');
+ ep.innerHTML = formatTime(now.valueOf() - presentationStart.valueOf());
+ es.innerHTML = formatTime(now.valueOf() - slideStart.valueOf());
+}
+
+function resetRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var startField = s5NotesWindow.document.getElementById('startFrom');
+ startFrom = readTime(startField.value);
+ countdown.remaining = startFrom * 60000; // convert to msecs
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var timeLeft = formatTime(countdown.remaining);
+ tl.innerHTML = timeLeft;
+}
+
+function updateRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var now = new Date();
+ if (countdown.state == 'run') {
+ countdown.remaining = countdown.end - now;
+ }
+ tl.style.color = '';
+ tl.style.backgroundColor = '';
+ if (countdown.remaining >= 0) {
+ var timeLeft = formatTime(countdown.remaining);
+ removeClass(tl,'overtime');
+ if (countdown.remaining < 300000) {
+ tl.style.color = 'rgb(' + (255-Math.round(countdown.remaining/2000)) + ',0,0)';
+ tl.style.backgroundColor = 'rgb(255,255,' + (Math.round(countdown.remaining/2000)) + ')';
+ }
+ } else {
+ var timeLeft = '-' + formatTime(-countdown.remaining);
+ addClass(tl,'overtime');
+ }
+ tl.innerHTML = timeLeft;
+}
+
+function toggleRemainingTime() {
+ if (countdown.state == 'pause') countdown.state = 'run'; else countdown.state = 'pause';
+ if (countdown.state == 'pause') {
+ window.clearInterval(countdown.timer);
+ }
+ if (countdown.state == 'run') {
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ countdown.timer = window.setInterval('updateRemainingTime()', 1000);
+ }
+}
+
+function alterRemainingTime(amt) {
+ var change = amt * 60000; // convert to msecs
+ countdown.end += change;
+ countdown.remaining += change;
+ updateRemainingTime();
+}
+
+function formatTime(msecs) {
+ var time = new Date(msecs);
+
+ var hrs = time.getUTCHours() + ((time.getUTCDate() -1) * 24); // I doubt anyone will spend more than 24 hours on a presentation or single slide but just in case...
+ hrs = (hrs < 10) ? '0'+hrs : hrs;
+ if (hrs == 'NaN' || isNaN(hrs)) hrs = '--';
+
+ var min = time.getUTCMinutes();
+ min = (min < 10) ? '0'+min : min;
+ if (min == 'NaN' || isNaN(min)) min = '--';
+
+ var sec = time.getUTCSeconds();
+ sec = (sec < 10) ? '0'+sec : sec;
+ if (sec == 'NaN' || isNaN(sec)) sec = '--';
+
+ return hrs + ':' + min + ':' + sec;
+}
+
+function readTime(val) {
+ var sregex = /:/;
+ var matches = sregex.exec(val);
+ if (matches == null) {
+ return val;
+ } else {
+ var times = val.split(':');
+ var hours = parseInt(times[0]);
+ var mins = parseInt(times[1]);
+ var total = (hours * 60) + mins;
+ return total;
+ }
+}
+// notes extension
+
+// startup process
+function createSlideShow() {
+ defaultCheck();
+ if(!isIE) createDetector(); // (degrade IE) scalable images extension
+ if(opac!=0 || isIE) { // &&!isIE (degrade IE)
+ tranSitions = false;
+ fadeModus = false;
+ }
+ if(tranSitions && document.getElementById && document.createElement){
+ createProgress();
+ var nop=document.getElementById('StartupControl');
+ nop.onload = dumpProgress;
+ }else {
+ startup();
+ showAll();
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+ }
+}
+
+function defaultCheck() {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'defaultView') {
+ defaultView = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'controlVis') {
+ controlVis = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'tranSitions') {
+ tranSitions = (allMetas[i].content == "true") ? true : false;
+ fadeModus = (tranSitions == true) ? true : false;
+ }
+ if (allMetas[i].name == 'fadeDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ fadeDuration = Math.max(200,Math.min(tmp,2000));
+ }
+ if (allMetas[i].name == 'incrDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ incrDuration = Math.max(50,Math.min(tmp,500));
+ }
+ if (allMetas[i].name == 'autoMatic') {
+ autoMatic = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playLoop') {
+ playLoop = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playDelay') {
+ var tmp = parseInt(allMetas[i].content);
+ playDelay = Math.max(5,Math.min(tmp,90))*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ }
+ if (allMetas[i].name == 'audioSupport') {
+ audioSupport = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'audioVolume') {
+ var tmp = parseInt(allMetas[i].content);
+ audioVolume = Math.max(0,Math.min(tmp,100));
+ }
+ if (allMetas[i].name == 'audioError') {
+ audioError = (allMetas[i].content == "true") ? true : false;
+ }
+ }
+}
+
+function createProgress() {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "StartupProgress";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=100)";
+ }else {
+ pg.style.opacity = 1.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/progress.gif)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+
+ var im = document.createElement('img');
+ im.id = "StartupControl";
+ im.src = s5Path+"ui/graphic_support/blank.gif?" + new Date().valueOf();
+ document.getElementsByTagName("body")[0].appendChild(im);
+}
+
+function startup() {
+ createControls(); // hallvord
+ slideLabel();
+ incrementals = createIncrementals();
+ noteLabel(); // [SI:060104] must follow slideLabel()
+ loadNote();
+ fixLinks();
+ externalLinks();
+ fontScale();
+ if (!isOp) {
+ if(isIE) {
+ document.getElementById('lst').style.backgroundImage = 'none';
+ document.getElementById('del').style.backgroundImage = 'none';
+ }else {
+ document.getElementById('audio').style.backgroundImage = 'none';
+ }
+ notOperaFix();
+ }else if(isOp) {
+ var obj = document.getElementById('exit');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('exit').style.opacity = 0.5;
+ obj = document.getElementById('toggle');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('toggle').style.opacity = 0.5;
+ document.getElementById('jumplist').style.visibility = 'hidden';
+ document.getElementById('list').style.visibility = 'hidden';
+ document.getElementById('lst').style.opacity = 0.5;
+ obj = document.getElementById('audio');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('audio').style.opacity = 0.5;
+ document.getElementById('volumelist').style.visibility = 'hidden';
+ document.getElementById('volume').style.visibility = 'hidden';
+ document.getElementById('vol').style.opacity = 0.5;
+ document.getElementById('delaylist').style.visibility = 'hidden';
+ document.getElementById('delay').style.visibility = 'hidden';
+ document.getElementById('del').style.opacity = 0.5;
+ }
+ slideJump();
+ if (defaultView == 'outline') toggle();
+ document.onkeyup = keys;
+ document.onkeypress = trap;
+ document.onclick = clicker;
+}
+
+function preloadImgages() {
+ var temp = '';
+ var objects = document.getElementsByTagName('img');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].src != '') {
+ temp = new Image();
+ temp.src = objects[i].src;
+ }
+ }
+}
+
+function showAll() {
+ var obj1 = GetElementsWithClassName('div','presentation')[0];
+ if(!obj1) var obj1 = GetElementsWithClassName('ol','presentation')[0];
+ var obj2 = GetElementsWithClassName('div','layout')[0];
+ if(!obj1){}else {obj1.style.display = 'block'};
+ if(!obj2){}else {obj2.style.display = 'block'};
+}
+
+function dumpProgress() {
+ document.body.removeChild(document.getElementById('StartupControl'));
+ startup();
+ preloadImgages();
+ showAll();
+ createSoundManagerScript();
+ shiftOpacity('StartupProgress',1000);
+ window.setTimeout("removeProgress()",1000);
+}
+
+function removeProgress() {
+ document.body.removeChild(document.getElementById('StartupProgress'));
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+}
+function panelSetup() {
+ if(playPause) {
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ if(playLoop) {
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ if(audioSupport && !isIE && !isOp) {
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ }
+ if(fadeModus && !isIE) {
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ if(autoMatic) {
+ var obj = document.getElementById('auto'); changeClass(obj,'ison');
+ startPlay();
+ }
+ if(audioVolume && !isIE && !isOp) {
+ var idx = 0;
+ if(audioVolume >= 95 && audioVolume <= 100) {idx = 0;}
+ else if(audioVolume >= 85 && audioVolume < 95) {idx = 1;}
+ else if(audioVolume >= 75 && audioVolume < 85) {idx = 2;}
+ else if(audioVolume >= 65 && audioVolume < 75) {idx = 3;}
+ else if(audioVolume >= 55 && audioVolume < 65) {idx = 4;}
+ else if(audioVolume >= 45 && audioVolume < 55) {idx = 5;}
+ else if(audioVolume >= 35 && audioVolume < 45) {idx = 6;}
+ else if(audioVolume >= 25 && audioVolume < 35) {idx = 7;}
+ else if(audioVolume >= 15 && audioVolume < 25) {idx = 8;}
+ else if(audioVolume >= 5 && audioVolume < 15) {idx = 9;}
+ else {idx = 10;}
+ document.getElementById('volumelist').selectedIndex = idx;
+ }
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+}
+// startup process
+
+// shutdown process
+function byby() {
+ stopPlay();
+ if(tranSitions && fadeModus && s5mode && !isOp) {
+ fadeoutSound(curSoundID,true); // audio support
+ var pg = document.createElement('div');
+ pg.id = "GoodBy";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=0)";
+ }else {
+ pg.style.opacity = 0.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/finish.gif)";
+ document.getElementsByTagName("body")[0].appendChild(pg);
+ shiftOpacity('GoodBy',1000);
+ window.setTimeout("history.back()",1000);
+ }else {
+ stopSound(curSoundID);
+ history.back();
+ }
+}
+// shutdown process
+
+// scalable images extension
+function createDetector() {
+ var em = document.createElement('div');
+ em.id='EMSizeControl'; em.style.position="absolute"; em.style.left="-999px";
+ em.style.width="1em"; em.style.height="1em"; em.style.opacity=0.0;
+ document.getElementsByTagName("body")[0].appendChild(em);
+ var nop=document.getElementById('EMSizeControl');
+ if(!nop||findPosX(nop)!=-999) {}else {
+ opac=document.getElementById('EMSizeControl').style.opacity;
+ empx=document.getElementById('EMSizeControl').offsetHeight;
+ document.body.removeChild(document.getElementById('EMSizeControl'));
+ var objects = document.getElementsByTagName('img');
+ var j = 0; var i = 0; var k = 0; var d; var obj;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ images[j] = objects[i];
+ ++j;
+ }
+ }
+ var objects = document.getElementsByTagName('canvas'); j = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ canvas[objects[i].id] = objects[i];
+ if(j==0) {
+ if(objects[i].getContext) {
+ canvasSupport = true;
+ }
+ ++j;
+ }
+ }
+ }
+ if(canvasSupport!=true) {
+ for (d in canvas) {
+ try {
+ canvas[d].setAttribute("width",1);
+ canvas[d].setAttribute("height",1);
+ } catch (e) {
+ }
+ }
+ }
+ var objects = document.getElementsByTagName('table');
+ j = 0; k = 0; l = 0; var w; var h; var tmp; var cnt;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^piechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ piecharts[j] = objects[i];
+ em = piecharts[j].getAttribute("summary");
+ if(em != "") em = "," + em;
+ piecharts[j].setAttribute("summary", w + "," + h + em);
+ ++j;
+ }
+ }
+ }
+ if(objects[i].className.match(/^barchart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ barcharts[k] = objects[i];
+ em = barcharts[k].getAttribute("summary");
+ if(em != "") em = "," + em;
+ barcharts[k].setAttribute("summary", w + "," + h + em);
+ ++k;
+ }
+ }
+ }
+ if(objects[i].className.match(/^linechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ linecharts[l] = objects[i];
+ em = linecharts[l].getAttribute("summary");
+ if(em != "") em = "," + em;
+ linecharts[l].setAttribute("summary", w + "," + h + em);
+ ++l;
+ }
+ }
+ }
+ }
+ objects = document.getElementsByTagName('object'); j = 0; i = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ medias[j] = objects[i]; ++j;
+ if(!isIE) {
+ if(objects[i].getAttributeNode("classid")) objects[i].removeAttributeNode(objects[i].getAttributeNode("classid"));
+ if(objects[i].getAttributeNode("codebase")) objects[i].removeAttributeNode(objects[i].getAttributeNode("codebase"));
+ }
+ }
+ }
+ }
+}
+function extendImgSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < images.length; i++) {
+ w=images[i].getAttribute("width",0);
+ h=images[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ images[i].style.width=Math.floor(w*q)+"px";
+ images[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+
+function extendCanSizes(f) {
+ if(empx>0 && canvasSupport) {
+ var q = (f/empx); var w = 0; var h = 0; var tmp = ""; var cnt; var obj;
+ for(var i=0; i < piecharts.length; i++) {
+ if(piecharts[i].getAttribute("summary")) {
+ tmp = piecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = piecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < barcharts.length; i++) {
+ if(barcharts[i].getAttribute("summary")) {
+ tmp = barcharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = barcharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < linecharts.length; i++) {
+ if(linecharts[i].getAttribute("summary")) {
+ tmp = linecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = linecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ }
+}
+function extendObjSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < medias.length; i++) {
+ w=medias[i].getAttribute("width",0);
+ h=medias[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ medias[i].style.width=Math.floor(w*q)+"px";
+ medias[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+function findPosX(obj) {
+ var posLeft = 0;
+ while (obj.offsetParent) {
+ posLeft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ return posLeft;
+}
+function findPosY(obj) {
+ var posTop = 0;
+ while (obj.offsetParent) {
+ posTop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ return posTop;
+}
+// scalable images extension
+
+// canvas chart extension
+function deg2rad(degrees) {
+ return Math.PI *degrees/180;
+}
+function rad2deg(radians) {
+ return 180.0 *radians/Math.PI;
+}
+function circle_point_x(radians, diameter) {
+ var x = Math.cos(radians)*(diameter/2);
+ return x;
+}
+function circle_point_y(radians, diameter) {
+ var y = Math.sin(radians)*(diameter/2);
+ return y;
+}
+function roundTo(val,dig) {
+ var num = val;
+ if (val > 8191 && val < 10485) {
+ val = val-5000;
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ num = num+5000;
+ } else {
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ }
+ return num;
+}
+function searchColor(value) {
+ for (var dat in colorNames) {
+ if(dat==value) return colorNames[dat];
+ }
+ return false;
+}
+function scanColor(value) {
+ if(value.match(/^#[0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var val1 = value.substr(1,1).toLowerCase();
+ var val2 = value.substr(2,1).toLowerCase();
+ var val3 = value.substr(3,1).toLowerCase();
+ value = '#' + val1 + val1 + val2 + val2 + val3 + val3;
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var tmp = searchColor(value.toLowerCase());
+ if(!tmp) {}else{value = tmp;}
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ value = '#000000';
+ }
+ return value.toLowerCase();
+}
+function hex2rgb(val,trans) {
+ if(val.length==7) {
+ var tp1 = Math.max(0,Math.min(parseInt(val.substr(1,2),16),255));
+ var tp2 = Math.max(0,Math.min(parseInt(val.substr(3,2),16),255));
+ var tp3 = Math.max(0,Math.min(parseInt(val.substr(5,2),16),255));
+ return 'rgba(' + tp1 + ',' + tp2 + ',' + tp3 + ',' + trans + ')';
+ }
+}
+function trim(str) {
+ return (str.replace(/\s+$/,"").replace(/^\s+/,""));
+}
+function roundedRect(ctx,x,y,width,height,radius){
+ ctx.beginPath();
+ ctx.moveTo(x,y+radius);
+ ctx.lineTo(x,y+height-radius);
+ ctx.quadraticCurveTo(x,y+height,x+radius,y+height);
+ ctx.lineTo(x+width-radius,y+height);
+ ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius);
+ ctx.lineTo(x+width,y+radius);
+ ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
+ ctx.lineTo(x+radius,y);
+ ctx.quadraticCurveTo(x,y,x,y+radius);
+ ctx.closePath();
+}
+function drawString(ctx, text, fc, tx, ty) {
+ var xp = 0; var c = "";
+ ctx.beginPath();
+ for (var i = 0; i < text.length; i++) {
+ c = text[i];
+ ctx.drawImage(font, signs[c].sx, signs[c].sy, signs[c].sw, signs[c].sh, tx+xp, ty, signs[c].sw*fc, signs[c].sh*fc);
+ xp += (signs[c].sw*fc);
+ }
+ ctx.closePath();
+}
+function strokeString(ctx, txt, col, fh, tx, ty) {
+ var fw = fh*0.666666; var lw = fh*0.125;
+ var ls = lw/2; var cr = lw; var xp = 0;
+ ctx.lineCap = "round"; ctx.lineJoin = "round"
+ ctx.lineWidth = lw; ctx.strokeStyle = col;
+ for (var i = 0; i < txt.length; i++) {
+ strokeSymbol(ctx, txt[i], ls, tx+xp, ty, fw, fh);
+ xp += (txt[i]!="."?fw+cr:(fw/2)+cr);
+ }
+}
+function strokeSymbol(ctx, symbol, fc, cx, cy, cw, ch) {
+ ctx.beginPath();
+ switch (symbol) {
+ case "0":
+ ctx.moveTo(cx+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+(cw/2),(cw/2)-fc,deg2rad(180),0, false);
+ ctx.arc(cx+(cw/2),(cy+ch)-(cw/2),(cw/2)-fc,0,deg2rad(180), false);
+ ctx.closePath();
+ break;
+ case "1":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.moveTo(cx+(cw*0.666666),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.666666),cy+fc);
+ ctx.lineTo(cx+(cw*0.25),cy+(ch*0.25));
+ break;
+ case "2":
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.8));
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+fc,cy+ch-fc);
+ ctx.arc(cx+(cw/2),cy+(cw*0.425),(cw*0.425)-fc,deg2rad(45),deg2rad(-180), true);
+ break;
+ case "3":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-90),deg2rad(180), false);
+ break;
+ case "4":
+ ctx.moveTo(cx+(cw*0.75),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.5),cy+ch-fc);
+ break;
+ case "5":
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-80),deg2rad(180), false);
+ break;
+ case "6":
+ ctx.moveTo(cx+fc,cy+ch-(cw*0.5)-fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-180),deg2rad(180), false);
+ ctx.bezierCurveTo(cx+fc,cy+fc,cx+fc,cy+fc,cx+(cw*0.9)-fc,cy+fc);
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ break;
+ case "7":
+ ctx.moveTo(cx+(cw*0.5),cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.25)-fc);
+ break;
+ case "8":
+ ctx.moveTo(cx+(cw*0.92)-fc,cy+(cw*0.59));
+ ctx.arc(cx+(cw/2),cy+(cw*0.45),(cw*0.45)-fc,deg2rad(25),deg2rad(-205), true);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-135),deg2rad(-45), true);
+ ctx.closePath();
+ ctx.moveTo(cx+(cw*0.79),cy+(ch*0.47));
+ ctx.lineTo(cx+(cw*0.21),cy+(ch*0.47));
+ break;
+ case "9":
+ ctx.moveTo(cx+cw-fc,cy+(cw*0.5));
+ ctx.arc(cx+(cw/2),cy+(cw*0.5),(cw*0.5)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.bezierCurveTo(cx+cw-fc,cy+ch-fc,cx+cw-fc,cy+ch-fc,cx+(cw*0.1)+fc,cy+ch-fc);
+ break;
+ case "%":
+ ctx.moveTo(cx+fc,cy+(ch*0.75));
+ ctx.lineTo(cx+cw-fc,cy+(ch*0.25));
+ ctx.moveTo(cx+(cw*0.505),cy+(cw*0.3));
+ ctx.arc(cx+(cw*0.3),cy+(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.moveTo(cx+(cw*0.905),cy+ch-(cw*0.3));
+ ctx.arc(cx+(cw*0.7),cy+ch-(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ break;
+ case ".":
+ ctx.moveTo(cx+(cw*0.25),cy+ch-fc-fc);
+ ctx.arc(cx+(cw*0.25),cy+ch-fc-fc,fc,deg2rad(0),deg2rad(360), false);
+ ctx.closePath();
+ break;
+ default:
+ break;
+ }
+ ctx.stroke();
+}
+function drawBar(ctx,x,y,width,height,color,value,textdiv){
+ var rw = width/2; var rh = rw/2;
+ height = Math.max(height,rw);
+ var dh = Math.max(height-(2*rh),0.1); var S2L;
+ var xx = rw/8; var yy = rh/4;
+ var yo = rh/2; y = y - yy;
+ if(canvas_noshadow <= 0 && canvas_noshade <= 0) {
+ ctx.save();
+ S2L = ctx.createRadialGradient(x+rw+rh,y+height-rw+yy+rh,0,x+rw,y+height-rw+yy,rw);
+ S2L.addColorStop(0, 'rgba(0,0,0,0.5)');
+ S2L.addColorStop(0.7, 'rgba(0,0,0,0.25)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = S2L;
+ ctx.scale(1,0.5);
+ ctx.translate(xx,y+height+yy);
+ if(isOp){
+ ctx.fillRect(x,y+yy+height-width,width,width);
+ }else {
+ ctx.arc(x+rw,y+yy+height-width,width,0,deg2rad(360), false);
+ ctx.fill();
+ }
+ ctx.restore();
+ }else if(canvas_noshadow <= 0 && canvas_noshade >= 1) {
+ ctx.fillStyle = 'rgba(0,0,0,0.2)';
+ ctx.fillRect(x+yo,y+rh+yo+yo,width,dh);
+ }
+
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x,y+(height/2),x+width,y+(height/2));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.75)');
+ S2L.addColorStop(0.2, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.3, 'rgba(0,0,0,0)');
+ S2L.addColorStop(0.5, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.35)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.1)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.strokeStyle = S2L;
+ ctx.stroke();
+ }else {
+ ctx.fillStyle = color;
+ ctx.fillRect(x,y+rh+yo,width,dh);
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var bw = width; var bh = bw/4;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ var c; var w;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,x+(width/2)-(bw/2),y,bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext <= 0) {
+ strokeString(ctx, value + "%","rgba(48,48,48,1)", th, x+(width/2)-(w/2), y+((bh-th)/2));
+ }else {
+ drawString(ctx, value + "%", tf, x+(width/2)-(w/2), y+((bh-th)/2.2));
+ }
+ }else {
+ var bh = bw/3; var th = roundTo(bh*0.75,0);
+ roundedRect(ctx,x,y,bw,bh,bh/4);
+ ctx.fill();
+ var obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = x + "px";
+ obj.style.top = y+((bh-th)/2.2) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+
+ }
+}
+function drawLine(ctx,x,y,width,height,dist,array,factor,color,fill){
+ if(fill <= 0){
+ var style = hex2rgb(color,0.5);
+ ctx.lineJoin = "miter";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height);
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.lineTo(x+width,y+height);
+ ctx.lineTo(x,y+height);
+ ctx.closePath();
+ ctx.fillStyle = style;
+ ctx.fill();
+ }
+ ctx.lineJoin = "round";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height-(array[0]*factor));
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.strokeStyle = color;
+ ctx.stroke();
+}
+function setDataURL(cid) {
+ if(cid.toDataURL) {
+ var obj = document.getElementById(cid.id + "_link");
+ if(obj) {
+ obj.setAttribute("title", "To Data URL");
+ obj.setAttribute("target", "_blank");
+ obj.setAttribute("href", cid.toDataURL());
+ }
+ }
+}
+function get_input(dataobj,canvasobj,linechart) {
+ var table = document.getElementById(dataobj);
+ var canvas = document.getElementById(canvasobj);
+ var row; var clm; var cnt = 0; var val = 0; var nme = ""; var col = "";
+ if(canvas.getContext) {
+ canvas_width = parseInt(canvas.style.width);
+ canvas_height = parseInt(canvas.style.height);
+ if(canvas_width >= 16 && canvas_height >= 16) {
+ var tmp = table.getAttribute("summary");
+ canvas_noshade = 0; canvas_noshadow = 0;
+ canvas_notext = 0; canvas_imgtext = 0;
+ canvas_htmltext = 0; canvas_nofill = 0;
+ if(tmp.search(/noshadow/) != -1) canvas_noshadow = 1;
+ if(tmp.search(/noshade/) != -1) canvas_noshade = 1;
+ if(tmp.search(/nofill/) != -1) canvas_nofill = 1;
+ if(tmp.search(/notext/) != -1) canvas_notext = 1;
+ if(tmp.search(/htmltext/) != -1) canvas_htmltext = 1;
+ if(tmp.search(/imgtext/) != -1) canvas_imgtext = 1;
+ if(table.getAttribute("bgcolor")) {
+ canvas_bgcolor = scanColor(table.getAttribute("bgcolor"));
+ }
+ ChartData = new Array(); colorSlice = new Array();
+ if(table.getElementsByTagName("tr")[0].getElementsByTagName("th")[0]) cnt = 1;
+ for(var r = cnt; r < table.getElementsByTagName("tr").length; r++) {
+ row = table.getElementsByTagName("tr")[r];
+ clm = row.getElementsByTagName("td").length;
+ if(row.getElementsByTagName("td")[0].getAttribute("bgcolor")) {
+ col = scanColor(row.getElementsByTagName("td")[0].getAttribute("bgcolor")); val = 0;
+ nme = trim(row.getElementsByTagName("td")[1].innerHTML.replace(/<[^>]+>/g,""));
+ if(!linechart) {
+ if(clm > 3) {
+ for(var z = 2; z < clm; z++) {
+ val += parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ }else {
+ val = parseFloat(row.getElementsByTagName("td")[2].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ if(!isNaN(val) && val > 0 && nme != '') {
+ colorSlice[r-cnt] = col; ChartData[nme] = Math.abs(val);
+ }else {
+ break;
+ }
+ }else {
+ val = 0; i = 0;
+ if(clm > 3 && nme != '') {
+ ChartData[r-cnt] = new Array();
+ colorSlice[r-cnt] = col;
+ for(var z = 2; z < clm; z++) {
+ val = Math.abs(parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,"")));
+ if(!isNaN(val) && val >= 0) {
+ ChartData[r-cnt][i] = val; i++;
+ }else {
+ ChartData[r-cnt][i] = 0; i++;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }
+ }
+}
+function setPieChart(canvasobj,textobj) {
+ var cd = (Math.min(canvas_width,canvas_height)/110)*100;
+ var cp = cd*0.1; var cr = cd/2;
+ var sr = cr*0.93; var cw = cd+cp; var ch = cw;
+ var cx = (cd/2)+(cp/2); var cy = cx; var ct = 0;
+ for (var data in ChartData) {
+ ct += ChartData[data];
+ }
+ var poc = ct/100;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ }
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,cw,ch);
+ }else {
+ ctx.clearRect(0,0,cw,ch);
+ }
+ if(canvas_noshadow <= 0) {
+ if(!isOp) {
+ ctx.beginPath();
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),cr,cx+(cr*0.1),cy+(cr*0.1),sr*0.9);
+ B2B.addColorStop(0, 'rgba(0,0,0,0)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.arc(cx+(cr*0.1),cy+(cr*0.1),cr,0,deg2rad(360), false);
+ ctx.closePath();
+ ctx.fillStyle = B2B;
+ ctx.fill();
+ }else {
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),0,cx+(cr*0.1),cy+(cr*0.1),cr);
+ B2B.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(0.87, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = B2B;
+ ctx.fillRect(0,0,cw,ch);
+ }
+ }
+ var val = 0; var deg = 0; var idx = 0; var data;
+ for (data in ChartData) {
+ val = ChartData[data]; sdeg = deg;
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ ctx.beginPath();
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr,sdeg,edeg, false);
+ ctx.lineTo(cx,cy);
+ ctx.closePath();
+ ctx.fillStyle = colorSlice[(idx++)];
+ ctx.fill();
+ }
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ var W2T = ctx.createLinearGradient(cp*2,cp*2,cx,cy);
+ W2T.addColorStop(0, 'rgba(255,255,255,0.8)');
+ W2T.addColorStop(1, 'rgba(255,255,255,0)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.fillStyle = W2T;
+ ctx.fill();
+ ctx.beginPath();
+ var T2B = ctx.createLinearGradient(cx,cy,cw-(cp*2),ch-(cp*2));
+ T2B.addColorStop(0, 'rgba(0,0,0,0)');
+ T2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.fillStyle = T2B;
+ ctx.fill();
+ ctx.beginPath();
+ var B2T = ctx.createLinearGradient(cx,cy,cw-(cp*1.9),ch-(cp*1.9));
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.strokeStyle = B2T;
+ ctx.stroke();
+ ctx.beginPath();
+ var T2W = ctx.createLinearGradient(cx,cy,(cp*1.9),(cp*1.9));
+ T2W.addColorStop(0, 'rgba(255,255,255,0)');
+ T2W.addColorStop(1, 'rgba(255,255,255,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.strokeStyle = T2W;
+ ctx.stroke();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var mpos = 0; var per = 0; var gx = 0;
+ var gy = 0; var tx = 0; var ty = 0;
+ var obj = ""; var w = 0; var c = 0;
+ var bw = cr*0.45; var bh = cr*0.125;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext >= 1) {
+ bw = (cr*0.365);
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ for (data in ChartData) {
+ val = ChartData[data];
+ sdeg = deg; mpos = deg+(((val/2)/ct)*deg2rad(360));
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ per = roundTo(val/poc,2);
+ gx = circle_point_x(mpos, cd);
+ gy = circle_point_y(mpos, cd);
+ tx = parseFloat((cx+(2*Math.floor(cx + gx)))/3);
+ ty = (cy+(2*Math.floor(cy + gy)))/3;
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext >= 1) {
+ drawString(ctx, per + "%", tf, tx-(w/2), ty-(th/1.8));
+ }else {
+ strokeString(ctx, per + "%","rgba(48,48,48,1)", th, tx-(w/2), ty-(th/2));
+ }
+ }else {
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = (tx-(bw/2)) + "px";
+ obj.style.top = ty-(th/1.8) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+ }
+ }
+ }
+}
+function setBarChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9; var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05; var ph = canvas_height*0.05;
+ var cm = 0; var ct = 0;
+ for (var data in ChartData) {
+ cm = Math.max(cm,ChartData[data]);
+ ct += ChartData[data];
+ }
+ var hf = ih/cm; var bs = colorSlice.length;
+ var bw = iw/(bs*1.1); var poc = ct/100;
+ var th = roundTo((bw/3)*0.75,0);
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ var obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ var cc = ""; var bh = 0; var idx = 0; var t = 0; per = 0;
+ for (var data in ChartData) {
+ per = roundTo(ChartData[data]/poc,2);
+ bh = ChartData[data]*hf;
+ drawBar(ctx,pw+(t*(bw*1.1)),ph+ih-bh,bw,bh,colorSlice[(idx++)],per,textdiv);
+ t++;
+ }
+ }
+}
+function setLineChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9;
+ var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05;
+ var ph = canvas_height*0.05;
+ var cm = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ cm = Math.max(cm,ChartData[i][j]);
+ }
+ }
+ var hf = (ih*0.95)/cm; var bw = iw;
+ var dw = iw/(ChartData[0].length-1)
+ var dh = ih/(ChartData[0].length-1)
+ var ps = Math.min(pw,ph); lw = ps/4;
+ var B2T;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_noshadow <= 0) {
+ B2T = ctx.createLinearGradient(pw+ps,ph+ih+1,pw+ps+ps,ph+ih+1);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps,ph+ih);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.lineTo(pw+ps+ps,ph+ih);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+ps+ps,ph+ih,pw+ps+ps,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps+ps,ph+ih);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+ps+iw,ph+ih+ps);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.closePath();
+ ctx.fill();
+ var B2T = ctx.createLinearGradient(pw+iw+1,ph+ps,pw+iw+1,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.35)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps);
+ ctx.lineTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+iw,ph+ps+ps,pw+iw+ps,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.35)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+iw+ps,ph+ih+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = lw/2;
+ ctx.strokeStyle = "rgba(255,255,255,0.25)";
+ if(canvas_nofill <= 0) {
+ ctx.fillStyle = "rgba(240,240,240,0.8)";
+ ctx.strokeStyle = "rgba(255,255,255,1)";
+ ctx.fillRect(pw,ph,iw,ih);
+ }
+ for (var i = 0; i < ChartData[0].length-1; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph);
+ ctx.lineTo(pw+(i*dw),ph+ih);
+ ctx.stroke();
+ }
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw,ph+(i*dh));
+ ctx.lineTo(pw+iw,ph+(i*dh));
+ ctx.stroke();
+ }
+ ctx.lineWidth = lw;
+ var cc = ""; var bh = 0; var idx = 0; var t = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ t = Math.max(t,ChartData[i][j]);
+ }
+ bh = t*hf; cc = colorSlice[(idx++)];
+ drawLine(ctx,pw,ph+ih-bh,bw,bh,dw,ChartData[i],hf,cc,canvas_nofill);
+ }
+ ctx.beginPath();
+ ctx.moveTo(pw,ph);
+ ctx.lineTo(pw,ph+ih);
+ ctx.lineTo(pw+iw+(lw/2),ph+ih);
+ ctx.strokeStyle = "rgba(48,48,48,1)";
+ ctx.stroke();
+ ctx.lineWidth = lw/2;
+ B2T = ctx.createLinearGradient(pw,ph+ih,pw,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,1)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.strokeStyle = B2T;
+ for (var i = 0; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph+ih);
+ ctx.lineTo(pw+(i*dw),ph+ih+ps);
+ ctx.stroke();
+ }
+ B2T = ctx.createLinearGradient(pw-ps,ph,pw,ph);
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,1)');
+ ctx.strokeStyle = B2T;
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw-ps,ph+(i*dh));
+ ctx.lineTo(pw,ph+(i*dh));
+ ctx.stroke();
+ }
+ }
+}
+function generateCanvas() {
+ if(canvasSupport) {
+ var canvasID; var tdataID; var textID;
+ var tmp; var dat; var i; var j;
+ for(i=0; i < piecharts.length; i++) {
+ tmp = piecharts[i].id.split("_");
+ tdataID = piecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setPieChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < barcharts.length; i++) {
+ tmp = barcharts[i].id.split("_");
+ tdataID = barcharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setBarChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < linecharts.length; i++) {
+ tmp = linecharts[i].id.split("_");
+ tdataID = linecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID,true);
+ if(colorSlice.length > 0) {
+ if(ChartData.length == colorSlice.length) {
+ setLineChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ }
+}
+// canvas chart extension
+
+// invisible select extension
+function setListPos(opt) {
+ if(!isIE) { //(degrade IE)
+ var ref = document.getElementById('list');
+ var x = findPosX(ref); var y = findPosY(ref);
+ var obj = document.getElementById('jumplist');
+ obj.style.position = 'fixed'; obj.style.left = x + 'px'; obj.style.top = y + 'px';
+ var vol = document.getElementById('volumelist');
+ ref = document.getElementById('volume');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ vol.style.position = 'fixed'; vol.style.left = x + 'px'; vol.style.top = y + 'px';
+ var del = document.getElementById('delaylist');
+ ref = document.getElementById('delay');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ del.style.position = 'fixed'; del.style.left = x + 'px'; del.style.top = y + 'px';
+ var pnl = document.getElementById('navLinks');
+ }
+ if(opt) {
+ if(isIE) {
+ //(degrade IE)
+ //pnl.style.filter = "alpha(opacity=80)";
+ }else {
+ obj.style.opacity = 0.0;
+ vol.style.opacity = 0.0;
+ del.style.opacity = 0.0;
+ pnl.style.opacity = 0.8;
+ }
+ }
+}
+// invisible select extension
+
+// transition extension
+function switchFade() {
+ if(tranSitions && s5mode && fadeModus) {
+ fadeModus = false;
+ playDelay = playDelay-(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'isoff');
+ }else if(tranSitions && s5mode && !fadeModus) {
+ fadeModus = true;
+ playDelay = playDelay+(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ currentSlide();
+}
+function opacity(ids, opacStart, opacEnd, millisec) {
+ var speed = Math.round(millisec / 100);
+ var timer = 0;
+ if(opacStart > opacEnd) {
+ for(var i = opacStart; i >= opacEnd; i--) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ } else if(opacStart < opacEnd) {
+ for(var i = opacStart; i <= opacEnd; i++) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ }
+}
+function changeOpac(opacity, ids) {
+ var obj = document.getElementById(ids);
+ if (isIE) {
+ obj.style.filter = "alpha(opacity=" + opacity + ")";
+ } else {
+ obj.style.opacity = (opacity / 100);
+ }
+}
+function shiftOpacity(ids, millisec) {
+ if(document.getElementById(ids).style.opacity != '') {
+ var currentOpac = document.getElementById(ids).style.opacity * 100;
+ } else {
+ var currentOpac = 0;
+ }
+ if(currentOpac == 0) {
+ opacity(ids, currentOpac, 100, millisec);
+ } else if(currentOpac > 0) {
+ opacity(ids, currentOpac, 0, millisec);
+ }
+}
+// transition extension
+
+// autoplay extension
+function autoPlay() {
+ if (s5mode && autoMatic && !playPause) {
+ if ((snum >= (smax-1)) && playLoop) {
+ goTo(0);
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }else if ((snum >= (smax-1)) && !playLoop) {
+ stopPlay();
+ }else {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ if (incrementals[snum].length >0) {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = parseInt(playDelay/(incrementals[snum].length+1));
+ remainDer = parseInt(playDelay-(incrDelay*incrementals[snum].length));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ } else {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = incrDuration;
+ remainDer = parseInt(playDelay-(incrementals[snum].length*incrDuration));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }
+ }
+}
+function autoPlayIncr() {
+ if (incpos < incrementals[snum].length) {
+ subgo(1);
+ autoRun = setTimeout('autoPlayIncr();',incrDelay);
+ }else {
+ autoRun = setTimeout('nop();',remainDer);
+ }
+}
+function nop() {
+ // no operation dummy
+}
+function togglePlay() {
+ if (autoRun && s5mode) {
+ stopPlay();
+ }else if (!autoRun && s5mode) {
+ startPlay();
+ }
+}
+function stopPlay() {
+ if (autoRun && s5mode) {
+ clearTimeout(autoRun); autoRun = null;
+ autoMatic = false; playPause = false; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'isoff');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ currentSlide();
+ }
+}
+function startPlay() {
+ if (!autoRun && s5mode) {
+ playPause = false; autoMatic = true; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'ison');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ autoRun = setTimeout('autoPlay();',playDelay);
+ currentSlide();
+ }
+}
+function pausePlay() {
+ if (s5mode && autoMatic) {
+ if (playPause) {
+ playPause = false; autoRun = setTimeout('autoPlay();',playDelay);
+ var obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ }else {
+ if (autoRun){
+ clearTimeout(autoRun); autoRun = null; playPause = true;
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+ }
+}
+function switchLoop() {
+ if(s5mode) {
+ if (playLoop) {
+ playLoop = false;
+ var obj = document.getElementById('loop'); changeClass(obj,'isoff');
+ }else {
+ playLoop = true;
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+}
+function setDelay() {
+ var val = document.getElementById('delaylist');
+ if(s5mode) {
+ var delay = Math.max(5,Math.min(parseInt(val.value),300));
+ playDelay = (fadeModus == true) ? ((delay*1000)+(2*fadeDuration)) : (delay*1000);
+ }
+}
+// autoplay extension
+
+// audio extension
+function createSoundManagerScript() {
+ if(typeof soundManager=="undefined") {
+ onerrorSM2();
+ }else {
+ var script=document.createElement('SCRIPT');
+ var tx=document.createTextNode("soundManager.createMovie();");
+ script.appendChild(tx);
+ document.getElementsByTagName("body")[0].appendChild(script);
+ }
+}
+//soundManager.onload = function() {
+function onloadSM2() {
+ if(!isIE) { //(degrade IE)
+ swfUnloaded = false;
+ preloadSounds();
+ }
+}
+//soundManager.onerror = function() {
+function onerrorSM2() {
+ if(typeof soundManager!="undefined") {
+ soundManager.destruct;
+ delete soundManager;
+ }
+ audioSupport = false; swfUnloaded = true;
+ if(audioError && !isIE && !isOp) {
+ var dv = document.createElement('div'); dv.id = "guru";
+ var d2=document.createElement('div'); dv.appendChild(d2);
+ var tx=document.createTextNode('Guru Meditation - SoundManager failed to load/initialize!');
+ d2.appendChild(tx); document.getElementById('slide0').appendChild(dv);
+ }
+}
+function audioSetup() {
+ if(sound[0]) {
+ playSound(0);
+ }else if(sound[bgSoundItem] && !sound[0]) {
+ playSound(bgSoundItem);
+ }
+}
+function fadeoutSound(ids, option) {
+ if(curSoundID >= 0 && !swfUnloaded) {
+ if(isNaN(ids)) {
+ if(ids == "bgSound") {
+ var cnum = parseInt(bgSoundItem);
+ }else {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && ids == sound[i]["id"]) {
+ var cnum = i;
+ break;
+ }
+ }
+ }
+ }else {
+ var cnum = ids;
+ ids = sound[cnum]["id"];
+ }
+ var vol = getMaxVolume(sound[cnum]["volume"]);
+ var millisec = fadeDuration;
+ var speed = Math.round(millisec / vol);
+ var timer = 0;
+ for(var i = vol; i > 0; i--) {
+ setTimeout("fadeout(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ if(option) setTimeout("stopSound('"+ids+"')",millisec);
+ }
+}
+function fadeout(volume, id) {
+ soundManager.setVolume(id,volume);
+}
+function stopSound(ids) {
+ var sid;
+ if(isNaN(ids)) {
+ sid = ids;
+ }else if(sound[ids]) {
+ sid = sound[ids]["id"];
+ }
+ if(sid!='' && curSoundID >= 0) {
+ soundManager.stop(sid);
+ curSoundID = -1;
+ }
+}
+function toggleSounds() {
+ if(audioSupport && !swfUnloaded) {
+ stopAllSounds();
+ }else if (!audioSupport && !swfUnloaded) {
+ allowSounds();
+ }
+}
+function allowSounds() {
+ if(!swfUnloaded) {
+ audioSupport = true;
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ currentSlide();
+ }
+}
+function stopAllSounds() {
+ if(curSoundID >= 0) {
+ stopSound(curSoundID);
+ }else {
+ soundManager.stopAll();
+ curSoundID = -1;
+ }
+ audioSupport = false;
+ var obj = document.getElementById('audio'); changeClass(obj,'isoff');
+ currentSlide();
+}
+function playSound(id) {
+ if(audioSupport && !swfUnloaded) {
+ var url, sid, vol, lps, cnum;
+ if(isNaN(id)) {
+ sid = id;
+ if(sid == "bgSound") {
+ cnum = parseInt(bgSoundItem);
+ }else {
+ cnum = getSoundID(id);
+ }
+ }else {
+ cnum = parseInt(id);
+ if(sound[cnum]) sid = sound[cnum]["id"];
+ }
+ if(sound[cnum] && sound[cnum]["url"]!='' && sid!=''){
+ url = sound[cnum]["url"];
+ vol = (sound[cnum]["volume"]!='')?getMaxVolume(sound[cnum]["volume"]):getMaxVolume(100);
+ lps = (sound[cnum]["loops"])?true:false;
+ if(lps) {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){soundManager.play(sid,{volume:getMaxVolume(sound[cnum]["volume"])});}});
+ }else {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){curSoundID=-1;}});
+ }
+ }
+ }
+}
+function getSoundID(str) {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && str == sound[i]["id"]) {
+ var id = i;
+ break;
+ }
+ }
+ return id;
+}
+function setVolume() {
+ var vol = document.getElementById('volumelist');
+ if(audioSupport && !swfUnloaded) {
+ audioVolume = parseInt(vol.value);
+ if(curSoundID >= 0) {
+ if(sound[curSoundID]) {
+ var sid = sound[curSoundID]["id"];
+ var vid = getMaxVolume(sound[curSoundID]["volume"]);
+ soundManager.setVolume(sid,vid);
+ }
+ }
+ }
+}
+function getMaxVolume(value) {
+ if(audioVolume>0) {var factor = audioVolume/100;}else {var factor = 0;}
+ return Math.max(0,Math.min(parseInt(value*factor),audioVolume));
+}
+function preloadSounds() {
+ var temp = ''; var parm = ''; var t = ''; var cl = '';
+ var objects = document.getElementsByTagName('object');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].type.toLowerCase() == 'audio/mp3' && objects[i].data != '') {
+ objects[i].width = 0; objects[i].height = 0;
+ if(objects[i].parentNode.tagName == 'DIV') {
+ cl = objects[i].parentNode.className.toLowerCase();
+ if(cl == 'presentation' || cl == 'slide') {
+ if(cl == 'presentation') {
+ t = parseInt(bgSoundItem);
+ }else {
+ t = parseInt(objects[i].parentNode.id.slice(5, objects[i].parentNode.id.length));
+ }
+ sound[t] = new Object();
+ if(t < bgSoundItem) {
+ sound[t]["id"] = objects[i].parentNode.id;
+ }else {
+ sound[t]["id"] = "bgSound";
+ }
+ sound[t]["url"] = objects[i].data;
+ sound[t]["volume"] = 100; sound[t]["loops"] = false;
+ if(objects[i].archive != '') {
+ parm = objects[i].archive.toLowerCase().split(',');
+ for (var j=0; j < parm.length; j++) {
+ if(parm[j] == 'loop') sound[t]["loops"] = true;
+ if(parm[j].search(/^volume/) != -1) {
+ var tmp = parm[j].split(':');
+ sound[t]["volume"] = parseInt(tmp[1]);
+ }
+ }
+ }
+ soundManager.createSound(sound[t]["id"],sound[t]["url"]);
+ }
+ }
+ }
+ }
+}
+// audio extension
+
+// help extension
+function createHelpReq() {
+ if(!document.getElementById("HelpReq")) {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "HelpReq";
+ if (pg.addEventListener) {
+ pg.addEventListener("onclick",dumpHelpReq,false);
+ } else if (pg.attachEvent) {
+ pg.attachEvent("onclick",dumpHelpReq);
+ }
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=90)";
+ } else {
+ pg.style.opacity = 0.9;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(64,64,64)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/help.jpg)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+ if(document.getElementById("HelpReq")) {
+ helpmode = true;
+ }
+ }
+}
+function dumpHelpReq() {
+ if(document.getElementById("HelpReq")) {
+ document.body.removeChild(document.getElementById('HelpReq'));
+ helpmode = false;
+ }
+}
+// help extension
+
+//DEBUG
+function ConsoleLog(value) {
+ if(window.console) {
+ window.console.log(value);
+ }
+}
+//DEBUG
+
+document.write('<style type="text/css" media="screen" id="blockStyle">.presentation, .layout {display: none; }</style>');
+
+if(!isIE && !isOp) {
+ document.write('<script type="text/javascript" src="'+s5Path+'ui/audio_support/soundmanager2.js"></script>');
+ if(typeof soundManager!="undefined") {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'audioDebug') {
+ var audioDebug = (allMetas[i].content == "true") ? true : false;
+ soundManager.defaultOptions.debugMode = audioDebug;
+ }
+ }
+ }
+}
+
+window.onload = createSlideShow;
+window.onresize = function(){setTimeout('windowChange()',5);} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/toggle_link.png
new file mode 100644
index 000000000..4588e2514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/toggle_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/toggle_over.png
new file mode 100644
index 000000000..400f613b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/toggle_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/volume_link.png
new file mode 100644
index 000000000..f362acd1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/volume_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/wrap.css
new file mode 100644
index 000000000..a37315552
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/wrap.css
@@ -0,0 +1,410 @@
+/********************************************************************
+Screen and Print Styles for the Wrap Plugin
+********************************************************************/
+
+/* tables in columns and boxes should span the whole width */
+.wrap_column table,
+.wrap_left table, .wrap_right table, .wrap_center table,
+.wrap_box table,
+.wrap_info table, .wrap_important table, .wrap_alert table, .wrap_tip table, .wrap_help table, .wrap_todo table, .wrap_download table {
+ width: 100%;
+}
+/* emulate a headline */
+.wrap_column em strong,
+.wrap_left em strong, .wrap_right em strong, .wrap_center em strong,
+.wrap_box em strong,
+.wrap_info em strong, .wrap_important em strong, .wrap_alert em strong, .wrap_tip em strong, .wrap_help em strong, .wrap_todo em strong, .wrap_download em strong {
+ font-size: 130%;
+ font-weight: bold;
+ font-style: normal;
+ display: block;
+}
+/* emulate a bigger headline with a bottom border */
+.wrap_column em strong em.u,
+.wrap_left em strong em.u, .wrap_right em strong em.u, .wrap_center em strong em.u,
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ font-size: 115%;
+ border-bottom: 1px solid __border__;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+}
+/* different bigger headline for safety notes */
+.wrap_danger em strong em.u, .wrap_warning em strong em.u, .wrap_caution em strong em.u, .wrap_notice em strong em.u, .wrap_safety em strong em.u {
+ font-size: 115%;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+ text-transform: uppercase;
+ border-bottom-width: 0;
+}
+/* change border colour of emulated headlines inside boxes to something more neutral
+ (to match all the different background colours) */
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ border-bottom-color: #999;
+}
+
+
+/* columns
+********************************************************************/
+
+.wrap_left,
+.wrap_column {
+ float: left;
+ margin-right: 1.5em;
+}
+.wrap_right {
+ float: right;
+ margin-left: 1.5em;
+}
+.wrap_center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+/*
+.wrap_column,
+.wrap_left,
+.wrap_right {
+ overflow: hidden;
+}
+*/
+.wrap_container {
+ margin-right: -1.5em;
+}
+
+
+/* alignments
+********************************************************************/
+
+.wrap_leftalign {
+ text-align: left;
+}
+.wrap_centeralign {
+ text-align: center;
+}
+.wrap_rightalign {
+ text-align: right;
+}
+.wrap_justify {
+ text-align: justify;
+}
+
+
+/* box
+********************************************************************/
+
+/* see styles for boxes and notes with icons in style.css */
+
+/*____________ rounded corners ____________*/
+/* (only for modern browsers) */
+
+div.wrap_round {
+ border-radius: 20px;
+ -moz-border-radius: 20px;
+ -webkit-border-radius: 20px;
+ -khtml-border-radius: 20px;
+}
+span.wrap_round {
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -khtml-border-radius: 2px;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_lo {
+ color: __text_neu__;
+ font-size: 85%;
+}
+div.wrap_em {
+ color: #c00;
+ font-weight: bold;
+}
+
+/* see styles for highlighted text in style.css */
+
+
+/* typography
+********************************************************************/
+
+/*____________ fonts ____________*/
+
+div.wrap_sansserif {
+ font-family: Verdana,Tahoma,Geneva,"DejaVu Sans","Bitstream Vera Sans","Liberation Sans", Arial,Helvetica,FreeSans,"Liberation Sans","Nimbus Sans L", sans-serif;
+}
+div.wrap_serif {
+ font-family: Georgia,Garamond,"Palatino Linotype","Book Antiqua",Palatino,Palladio,"URW Palladio L","Liberation Serif",Didot,Gentium,"Bitstream Charter","Century Schoolbook L", "Times New Roman",Times,"Nimbus Roman No9 L","FreeSerif", serif;
+}
+div.wrap_monospace {
+ font-family: Courier,"Courier New",FreeMono,"Nimbus Mono L","Liberation Mono", "Lucida Console",Monaco,"DejaVu Sans Mono","Bitstream Vera Sans Mono", monospace;
+}
+
+/*____________ font size ____________*/
+
+div.wrap_bigger {
+ font-size: 125%;
+}
+div.wrap_muchbigger {
+ font-size: 200%;
+}
+div.wrap_smaller {
+ font-size: 75%;
+}
+
+/*____________ font colours ____________*/
+
+div.wrap_fgred {
+ color: #900;
+}
+div.wrap_fggreen {
+ color: #090;
+}
+div.wrap_fgblue {
+ color: #009;
+}
+div.wrap_fgcyan {
+ color: #099;
+}
+div.wrap_fgviolet {
+ color: #909;
+}
+div.wrap_fgyellow {
+ color: #990;
+}
+div.wrap_fggrey {
+ color: #666;
+}
+div.wrap_fgblack {
+ color: #000;
+}
+
+/* see styles for background colours and white font colour in style.css */
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ indent ____________*/
+
+div.wrap_indent {
+ padding-left: 1.5em;
+}
+
+/*____________ outdent ____________*/
+
+div.wrap_outdent {
+ margin-left: -1.5em;
+}
+
+/*____________ word wrapping in pre ____________*/
+
+divdiv.wrap_prewrap pre {
+ white-space: pre-wrap;
+ word-wrap: break-word;/* for IE < 8 */
+ /* white-space: -moz-pre-wrap; for FF < 3 */
+}
+
+/*____________ spoiler ____________*/
+
+divdiv.wrap_spoiler {
+ margin-bottom: 1.5em;
+}
+/* see rest of spoiler styles in style.css */
+
+/*____________ clear float ____________*/
+
+div.wrap_clear {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ font-size: 1px;
+ visibility: hidden;
+ overflow: hidden;
+}
+
+/*____________ hide ____________*/
+
+div.wrap_hide {
+ display: none;
+}
+
+
+/* STYLE.CSS */
+
+/* box
+********************************************************************/
+
+.wrap_box {
+ background: __background_alt__;
+ color: __text__;
+/*
+ overflow: hidden;
+*/
+}
+div.wrap_box,
+div.wrap_danger, div.wrap_warning, div.wrap_caution, div.wrap_notice, div.wrap_safety {
+ padding: 1em 1em .5em;
+ margin-bottom: 1.5em;
+}
+span.wrap_box,
+span.wrap_danger, span.wrap_warning, span.wrap_caution, span.wrap_notice, span.wrap_safety {
+ padding: 0 .3em;
+}
+
+/*____________ notes with icons ____________*/
+
+/* general styles for all note divs */
+div.wrap_info, div.wrap_important, div.wrap_alert, div.wrap_tip, div.wrap_help, div.wrap_todo, div.wrap_download {
+ padding: 1em 1em .5em 70px;
+ margin-bottom: 1.5em;
+ min-height: 68px;
+ background-position: 10px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html div.wrap_info, * html div.wrap_important, * html div.wrap_alert, * html div.wrap_tip, * html div.wrap_help, * html div.wrap_todo, * html div.wrap_download {
+ height: 68px;
+}
+/* general styles for all note spans */
+span.wrap_info, span.wrap_important, span.wrap_alert, span.wrap_tip, span.wrap_help, span.wrap_todo, span.wrap_download {
+ padding: 0 2px 0 20px;
+ min-height: 20px;
+ background-position: 2px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html span.wrap_info, * html span.wrap_important, * html span.wrap_alert, * html span.wrap_tip, * html span.wrap_help, * html span.wrap_todo, * html span.wrap_download {
+ height: 20px;
+}
+
+/*____________ info ____________*/
+.wrap_info { background-color: #d1d7df; }
+div.wrap_info { background-image: url(../../../wrap/images/note/48/info.png); }
+span.wrap_info { background-image: url(../../../wrap/images/note/16/info.png); }
+
+/*____________ important ____________*/
+.wrap_important { background-color: #ffd39f; }
+div.wrap_important { background-image: url(../../../wrap/images/note/48/important.png); }
+span.wrap_important { background-image: url(../../../wrap/images/note/16/important.png); }
+
+/*____________ alert ____________*/
+.wrap_alert { background-color: #ffbcaf; }
+div.wrap_alert { background-image: url(../../../wrap/images/note/48/alert.png); }
+span.wrap_alert { background-image: url(../../../wrap/images/note/16/alert.png); }
+
+/*____________ tip ____________*/
+.wrap_tip { background-color: #fff79f; }
+div.wrap_tip { background-image: url(../../../wrap/images/note/48/tip.png); }
+span.wrap_tip { background-image: url(../../../wrap/images/note/16/tip.png); }
+
+/*____________ help ____________*/
+.wrap_help { background-color: #dcc2ef; }
+div.wrap_help { background-image: url(../../../wrap/images/note/48/help.png); }
+span.wrap_help { background-image: url(../../../wrap/images/note/16/help.png); }
+
+/*____________ todo ____________*/
+.wrap_todo { background-color: #c2efdd; }
+div.wrap_todo { background-image: url(../../../wrap/images/note/48/todo.png); }
+span.wrap_todo { background-image: url(../../../wrap/images/note/16/todo.png); }
+
+/*____________ download ____________*/
+.wrap_download { background-color: #d6efc2; }
+div.wrap_download { background-image: url(../../../wrap/images/note/48/download.png); }
+span.wrap_download { background-image: url(../../../wrap/images/note/16/download.png); }
+
+
+/*____________ safety notes ____________*/
+
+.wrap_danger {
+ background-color: #c00;
+ color: #fff;
+}
+.wrap_warning {
+ background-color: #f60;
+ color: #000;
+}
+.wrap_caution {
+ background-color: #ff0;
+ color: #000;
+}
+.wrap_notice {
+ background-color: #06f;
+ color: #fff;
+}
+.wrap_safety {
+ background-color: #090;
+ color: #fff;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_hi {
+ background-color: #ff9;
+}
+
+/* typography
+********************************************************************/
+
+/*____________ font colours ____________*/
+
+div.wrap_fgwhite {
+ color: #fff;
+}
+
+/*____________ background colours ____________*/
+
+div.wrap_bgred {
+ background-color: #fcc;
+}
+div.wrap_bggreen {
+ background-color: #cfc;
+}
+div.wrap_bgblue {
+ background-color: #ccf;
+}
+div.wrap_bgcyan {
+ background-color: #9ff;
+}
+div.wrap_bgviolet {
+ background-color: #f9f;
+}
+div.wrap_bgyellow {
+ background-color: #ff9;
+}
+div.wrap_bggrey {
+ background-color: #ccc;
+}
+div.wrap_bgwhite {
+ background-color: #fff;
+}
+div.wrap_bgblack {
+ background-color: #000;
+}
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ spoiler ____________*/
+
+div.wrap_spoiler {
+ background-color: __background__ !important;
+ color: __background__ !important;
+ border: 1px dotted red;
+}
+
+/*____________ only print ____________*/
+
+div.wrap_onlyprint {
+ display: none;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/zero_link.png
new file mode 100644
index 000000000..5610884d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/zero_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/zero_over.png
new file mode 100644
index 000000000..3a14a577e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/zero_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/LEEME.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/LEEME.txt
new file mode 100755
index 000000000..5c00e8abd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/LEEME.txt
@@ -0,0 +1,31 @@
+EXECUTIVE
+
+Tema para S5, creado originalmente por jEsuSdA 8)
+http://www.jesusda.com
+
+Más temas en: http://www.jesusda.com/projects/presentaciones_s5
+
+
+
+Para customizar este tema modifica el archivo CSS:
+
+s5-ultraviolet/ui/default/pretty.css
+
+
+
+Los archivos gráficos referentes al tema están en la carpeta:
+
+/ui/default/pics
+
+
+Puedes personalizar el favicon copiando el tuyo en la carpeta:
+
+/ui/default/pics
+
+con el nombre favicon.ico
+
+
+
+Para cualquier sugerencia e idea, por favor, contacta conmigo a través de mi web. ;)
+
+--jEsuSdA 8) \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/audio_link.png
new file mode 100644
index 000000000..daa740c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/audio_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/audio_on.png
new file mode 100644
index 000000000..cd590aae9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/audio_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/audio_over.png
new file mode 100644
index 000000000..cf537a008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/audio_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/auto_link.png
new file mode 100644
index 000000000..1c2ca4817
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/auto_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/auto_on.png
new file mode 100644
index 000000000..4b0c923b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/auto_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/auto_over.png
new file mode 100644
index 000000000..dbea88975
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/auto_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/backgrnd.png
new file mode 100644
index 000000000..0e48413d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/backgrnd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/blank.gif
new file mode 100755
index 000000000..75b945d25
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/blank.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/delay_link.png
new file mode 100644
index 000000000..c4d99cd57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/delay_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/exit_link.png
new file mode 100644
index 000000000..1bfd38790
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/exit_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/exit_over.png
new file mode 100644
index 000000000..0fdd1c605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/exit_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/fade_link.png
new file mode 100644
index 000000000..482e4d53e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/fade_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/fade_on.png
new file mode 100644
index 000000000..e12561fb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/fade_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/fade_over.png
new file mode 100644
index 000000000..fb8943c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/fade_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/footer.jpg
new file mode 100644
index 000000000..49370dbba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/footer.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/framing.css
new file mode 100755
index 000000000..14d8509e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/framing.css
@@ -0,0 +1,23 @@
+/* The following styles size, place, and layer the slide components.
+ Edit these if you want to change the overall slide layout.
+ The commented lines can be uncommented (and modified, if necessary)
+ to help you with the rearrangement process. */
+
+/* target = 1024x768 */
+
+div#header, div#footer, .slide {width: 100%; top: 0; left: 0;}
+div#header {top: 0; height: 3em; z-index: 1;}
+div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;}
+.slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;}
+div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;}
+div#controls form {position: absolute; bottom: 0; right: 0; width: 100%;
+ margin: 0;}
+#currentSlide {position: absolute; width: 10%; left: 45%; bottom: 1em; z-index: 10;}
+html>body #currentSlide {position: fixed;}
+
+/*
+div#header {background: #FCC;}
+div#footer {background: #CCF;}
+div#controls {background: #BBD;}
+div#currentSlide {background: #FFC;}
+*/
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/header.png
new file mode 100644
index 000000000..929dabba1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/iepngfix.htc
new file mode 100755
index 000000000..bba2db756
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/iepngfix.htc
@@ -0,0 +1,42 @@
+<public:component>
+<public:attach event="onpropertychange" onevent="doFix()" />
+
+<script>
+
+// IE5.5+ PNG Alpha Fix v1.0 by Angus Turnbull http://www.twinhelix.com
+// Free usage permitted as long as this notice remains intact.
+
+// This must be a path to a blank image. That's all the configuration you need here.
+var blankImg = 'ui/default/blank.gif';
+
+var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
+
+function filt(s, m) {
+ if (filters[f]) {
+ filters[f].enabled = s ? true : false;
+ if (s) with (filters[f]) { src = s; sizingMethod = m }
+ } else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")';
+}
+
+function doFix() {
+ if ((parseFloat(navigator.userAgent.match(/MSIE (\S+)/)[1]) < 5.5) ||
+ (event && !/(background|src)/.test(event.propertyName))) return;
+
+ if (tagName == 'IMG') {
+ if ((/\.png$/i).test(src)) {
+ filt(src, 'image'); // was 'scale'
+ src = blankImg;
+ } else if (src.indexOf(blankImg) < 0) filt();
+ } else if (style.backgroundImage) {
+ if (style.backgroundImage.match(/^url[("']+(.*\.png)[)"']+$/i)) {
+ var s = RegExp.$1;
+ style.backgroundImage = '';
+ filt(s, 'crop');
+ } else filt();
+ }
+}
+
+doFix();
+
+</script>
+</public:component> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/index.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/index.php
new file mode 100755
index 000000000..c920d452b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/index.php
@@ -0,0 +1,102 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es-es" >
+
+
+<head>
+
+ <title>[Título de la presentación aquí]</title>
+ <!-- metadata -->
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta http-equiv="content-language" content="es" />
+
+ <!--titulo y datos de publicación de la presentación-->
+
+ <meta name="description" content="[Título de la presentación aquí]" />
+
+ <meta name="keywords" content="[keywords aquí]" />
+ <meta name="presdate" content="[Aquí la fecha de publicación en formato aaaammdd]" />
+
+ <meta name="author" lang="es" content="[Nombre del autor de la presentación aquí]" />
+ <meta name="company" content="[Organización del autor de la presentación aquí]" />
+
+ <link rel="shortcut icon" href="ui/default/pics/favicon.ico" />
+
+ <meta name="generator" content="S5" />
+ <meta name="progid" content="quanta+" />
+ <meta name="version" content="S5 · jEsuSdA · 1.1" />
+ <!--Versión adaptada del estandard S5 1.1 por jEsuSdA-->
+
+ <meta name="robots" content="all" />
+
+ <!-- configuration parameters -->
+ <meta name="defaultView" content="slideshow" />
+ <meta name="controlVis" content="hidden" />
+
+ <!-- style sheet links -->
+ <link rel="stylesheet" href="ui/default/slides.css" type="text/css" media="projection" id="slideProj" />
+ <link rel="stylesheet" href="ui/default/outline.css" type="text/css" media="screen" id="outlineStyle" />
+ <link rel="stylesheet" href="ui/default/print.css" type="text/css" media="print" id="slidePrint" />
+ <link rel="stylesheet" href="ui/default/opera.css" type="text/css" media="projection" id="operaFix" />
+
+ <!-- S5 JS -->
+ <script src="ui/default/slides.js" type="text/javascript"></script>
+
+</head>
+<?php
+$page_owner = elgg_get_page_owner_entity();
+?>
+<body>
+
+ <div class="layout">
+ <div id="controls"><!-- NO EDITAR --></div>
+ <div id="currentSlide"><!-- NO EDITAR --></div>
+
+ <div id="header">
+ <div id="logo" style="background:url(<?php echo $page_owner->getIcon('medium'); ?>) no-repeat;"><!-- NO EDITAR --></div>
+ </div>
+
+ </div>
+
+ <div id="footer">
+ <h1>[Lugar/Fecha de la presentación aquí]</h1>
+ <h2>[Título de la presentación aquí]</h2>
+ </div>
+
+
+
+
+<div class="presentation">
+
+ <div class="slide">
+ <h1>[Título de la presentación aquí]</h1>
+ <h3>[Nombre del ponente aquí]</h3>
+ <h4>[Datos extra aquí]</h4>
+ </div>
+
+
+ <div class="slide">
+ <h1>[Título de la diapositiva]</h1>
+
+ <ul>
+ <li>[Punto uno]</li>
+ <li>[Punto dos]</li>
+ <li>[Punto tres]</li>
+ <li>[Punto cuatro]</li>
+ <li>[Punto cinco]</li>
+ </ul>
+
+ <div class="handout">
+
+ [Añade aquí cualquier nota o información que desees mostrar en la versión impresa, pero no en la versión en pantalla]
+
+ </div>
+
+ </div>
+ <!--fin slide-->
+
+</div>
+
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/last_link.png
new file mode 100644
index 000000000..4f158d35d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/last_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/last_over.png
new file mode 100644
index 000000000..a7b629995
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/last_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/list_link.png
new file mode 100644
index 000000000..7e299bb50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/list_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/loop_link.png
new file mode 100644
index 000000000..41e12cb15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/loop_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/loop_on.png
new file mode 100644
index 000000000..2ffcacae1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/loop_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/loop_over.png
new file mode 100644
index 000000000..9fe420153
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/loop_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/next_link.png
new file mode 100644
index 000000000..2b9f44c4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/next_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/next_over.png
new file mode 100644
index 000000000..25788124d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/next_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/notes_link.png
new file mode 100644
index 000000000..bb4a8ae37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/notes_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/notes_over.png
new file mode 100644
index 000000000..c6bfe69fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/notes_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/opera.css
new file mode 100755
index 000000000..9e9d2a3c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/opera.css
@@ -0,0 +1,7 @@
+/* DO NOT CHANGE THESE unless you really want to break Opera Show */
+.slide {
+ visibility: visible !important;
+ position: static !important;
+ page-break-before: always;
+}
+#slide0 {page-break-before: avoid;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/outline.css
new file mode 100755
index 000000000..62db519ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/outline.css
@@ -0,0 +1,15 @@
+/* don't change this unless you want the layout stuff to show up in the outline view! */
+
+.layout div, #footer *, #controlForm * {display: none;}
+#footer, #controls, #controlForm, #navLinks, #toggle {
+ display: block; visibility: visible; margin: 0; padding: 0;}
+#toggle {float: right; padding: 0.5em;}
+html>body #toggle {position: fixed; top: 0; right: 0;}
+
+/* making the outline look pretty-ish */
+
+#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
+#slide0 h1 {padding-top: 1.5em;}
+.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em;
+ border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
+#toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pause_link.png
new file mode 100644
index 000000000..2561cb4a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pause_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pause_on.png
new file mode 100644
index 000000000..2fc9c4a4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pause_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pause_over.png
new file mode 100644
index 000000000..7a7c80ddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pause_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/back-handout-print.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/back-handout-print.png
new file mode 100755
index 000000000..9e49dd625
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/back-handout-print.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/back-slide-print.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/back-slide-print.png
new file mode 100755
index 000000000..e8b5f9d82
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/back-slide-print.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/back_console.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/back_console.png
new file mode 100755
index 000000000..ac1708379
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/back_console.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-foot.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-foot.png
new file mode 100755
index 000000000..811b676bf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-foot.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-head.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-head.png
new file mode 100755
index 000000000..c1df59a15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-head.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-head.xcf b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-head.xcf
new file mode 100755
index 000000000..ff6497417
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-head.xcf
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-main.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-main.png
new file mode 100755
index 000000000..9ed390d97
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-main.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/favicon.ico b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/favicon.ico
new file mode 100755
index 000000000..10ee10936
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/favicon.ico
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/logo.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/logo.jpg
new file mode 100644
index 000000000..923639a20
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/logo.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/table-background.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/table-background.png
new file mode 100755
index 000000000..89a7e4fa2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/table-background.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/table-header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/table-header.png
new file mode 100755
index 000000000..1001624dd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/table-header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pretty.css
new file mode 100755
index 000000000..a4bddd7fb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pretty.css
@@ -0,0 +1,525 @@
+/* Following are the presentation styles -- edit away! */
+
+body
+{
+ background: #FFF url(pics/background-main.png) top left repeat;
+ color: #000; font-size: 2em;
+/* font-family: Trebuchet MS, Arial, Helvetica, sans-serif; */
+ font-family: Arial, Helvetica, sans-serif;
+}
+
+:link, :visited
+{
+ text-decoration: none;
+ color: #00C;
+}
+
+
+
+h1, h2, h3, h4
+{
+ font-size: 100%;
+ margin: 0;
+ padding: 0;
+ font-weight: inherit;
+}
+
+h1 abbr
+{
+ font-variant: small-caps;
+}
+
+ul, pre
+{
+ margin: 0;
+ line-height: 1em;
+}
+
+html, body
+{
+ margin: 0;
+ padding: 0;
+}
+
+blockquote, q
+{
+ font-style: italic;
+}
+
+blockquote
+{
+ padding: 0 2em 0.5em;
+ margin: 0 1.5em 0.5em;
+ text-align: center;
+ font-size: 1em;
+}
+
+blockquote p
+{
+ margin: 0;
+}
+
+blockquote i
+{
+ font-style: normal;
+}
+
+blockquote b
+{
+ display: block;
+ margin-top: 0.5em;
+ font-weight: normal;
+ font-size: smaller;
+ font-style: normal;
+}
+
+blockquote b i
+{
+ font-style: italic;
+}
+
+kbd
+{
+ font-weight: bold;
+ font-size: 1em;
+}
+
+sup
+{
+ font-size: smaller;
+ line-height: 1px;
+}
+
+
+ul.urls
+{
+ list-style: none;
+ display: inline;
+ margin: 0;
+}
+
+.urls li
+{
+ display: inline;
+ margin: 0;
+}
+
+.notes
+{
+ display: none;
+}
+
+.external
+{
+ border-bottom: 1px dotted gray;
+}
+
+html>body .external
+{
+ border-bottom: none;
+}
+
+.external:after
+{
+ content: " \274F";
+ font-size: smaller;
+ color: #fff;
+}
+
+.incremental, .incremental *, .incremental *:after
+{
+ color: #fff;
+ visibility: visible;
+}
+
+img.incremental
+{
+ visibility: hidden;
+}
+
+
+
+/* ============== */
+/* === SLIDES === */
+/* ============== */
+
+.slide code
+{
+ padding: 2px 0.25em;
+ font-weight: bold;
+}
+
+.slide code.bad, code del
+{
+ color: red;
+}
+
+.slide code.old
+{
+ color: silver;
+}
+
+.slide pre
+{
+
+ color: #ffca00;
+ display:block;
+ font-weight:bold;
+ font-family: Arial, Sans-Serif !important;
+ font-size:41.5%;
+ line-height:1.5em;
+ background:#2e3436 url(pics/back_console.png) right bottom no-repeat ;
+ border:5px solid #ccc;
+ padding:1em 1em 1em 1em;
+
+
+}
+
+.slide pre code
+{
+ font-family: Arial, Sans-Serif !important;
+ display:block;
+ margin:0;
+ padding:0;
+}
+
+
+
+.slide ul
+{
+ margin-left: 5%;
+ margin-right: 7%;
+ list-style: disc;
+}
+
+.slide li
+{
+ margin-top: 0.75em;
+ margin-right: 0;
+}
+
+.slide ul ul
+{
+ line-height: 1;
+}
+
+.slide ul ul li
+{
+ margin: .2em;
+ font-size: 85%;
+ list-style: square;
+}
+
+.slide img.leader
+{
+ display: block;
+ margin: 0 auto;
+}
+
+
+/* ========================= */
+/* === HEADER AND FOOTER === */
+/* ========================= */
+
+div#logo
+{
+ position:absolute;
+ top:5%;
+ right:1%;
+ /*background:url(pics/logo.jpg) no-repeat;*/
+ height:96px;
+ width:96px;
+}
+
+div#header, div#footer
+{
+ background: #a80231;
+ color: #FFF;
+}
+
+
+div#header
+{
+ background:#000 url(pics/background-head.png) bottom left repeat-x;
+ line-height: 1px;
+ height: 10%;
+}
+
+#currentSlide {position:absolute; left: 33%; text-align: right; top: 1%; font-size: 0.75em; width: 54%; height:100px; background-color: transparent; color: #999;}
+
+div#footer {background:#000 url(pics/background-foot.png) top left repeat-x; color: #fff; font-size: 0.5em; font-weight: bold; padding: 1em 0; height: 2%;}
+#footer h1, #footer h2, #footer h3 {display: block; padding: 0; position:absolute; bottom:0.7em;}
+#footer h1 {left:1em; text-shadow: 0.2em 0.2em #000;}
+#footer h2 {right:1em; text-shadow: 0.2em 0.2em #000; font-style: italic; visibility: hidden;}
+#footer h3 {right:1em; text-shadow: 0.2em 0.2em #000; font-style: italic; visibility: visible;}
+
+
+/* ============== */
+/* === CLASES === */
+/* ============== */
+
+div.long
+{
+ font-size: 0.75em;
+}
+
+.slide {padding-top: 2em;}
+
+.slide h1
+{
+ position: absolute;
+ top: 0.3em;
+ left: 0px;
+ z-index: 1;
+ margin: 0;
+ padding: 0.3em 0 0 50px;
+ white-space: nowrap;
+ font-weight: bold;
+ font-size: 1.2em;
+
+ text-transform: capitalize;
+ color: #fff;
+ background: transparent;
+}
+
+.slide h3
+{
+ font-size: 130%;
+}
+
+/* ================ */
+/* === CONTROLS === */
+/* ================ */
+
+#controls :active
+{
+ color: #fff !important;
+}
+
+#controls :focus
+{
+ outline: 1px dotted #227;
+}
+
+
+/* ================ */
+/* === JESUSDA === */
+/* ================ */
+
+.first-pic
+{
+
+ float:right;
+ margin-top:-2em;
+}
+
+/* ================ */
+
+.align-center
+{
+ text-align:center;
+}
+/* ================ */
+
+.float-left , .left-column
+{
+ float:left !important;
+ width:49% !important;
+}
+
+.float-right , .right-column
+{
+ float:right !important;
+ width:49% !important;
+}
+/* ================ */
+.fullscreen
+{
+ z-index:1000 !important;
+ position:fixed !important;
+ top:0;
+ left:0;
+ width:100% !important;
+ height:100% !important;
+
+ background: #fff url(pics/background-main.png) top left no-repeat;
+
+ text-align:center;
+ margin-left:-1.65em;
+
+}
+
+.fullscreen h1
+{
+ display:none;
+}
+
+.rotulo
+{
+ font-size:800%;
+ text-align:center;
+ margin-top:-0.05em;
+
+}
+
+.rotulo2
+{
+ font-size:200%;
+ text-align:center;
+ font-weight:bolder;
+ margin-top:-0.05em;
+
+}
+
+.align-center img
+{
+ margin:auto;
+ text-align:center;
+ margin:0;
+}
+
+/* ========================= */
+/* === TABLAS === */
+/* ========================= */
+
+table
+{
+ background:url(pics/table-background.png) bottom left repeat-x #fff;
+ margin-right:1em;
+ font-size:70%;
+ border:1px solid #d2d7cf !important;
+ border-spacing: 0;
+ text-align:center;
+}
+
+table td
+{
+ padding:0.5em;
+ font-size:90%;
+ border:1px solid #d2d7cf !important;
+ border-spacing: 0;
+ text-align:center;
+}
+
+th
+{
+ background:url(pics/table-header.png) bottom left repeat-x #000;
+ color:#fff;
+}
+
+th a
+{
+ color:#fff !important;
+}
+
+
+
+table caption
+{
+ margin-bottom:1em;
+ margin-top:1em;
+ margin-left:-7em;
+
+
+}
+
+
+display-none
+{
+ display:none;
+}
+
+div#controls {position: absolute; left: 0; bottom: 0; width: 100%; text-align: center; font: bold 1em Verdana, Arial, Helvetica, sans-serif;}
+html>body div#controls {background: transparent; position: fixed; padding: 0; top: auto; text-align: center;}
+#controls #sheet {display: none;}
+#controls #controlForm {height: 32px; width: 100%; text-align: center; vertical-align: middle;}
+#controls #navLinks {border-top: 1px solid #999; overflow: hidden; padding: 0; margin: 0; height: 32px; width: 100%; background-color: #808080; text-align: center; vertical-align: middle; white-space: nowrap;}
+#controls #navLinks ul {margin: 0 auto; padding: 0; height: 32px; width: 500px; white-space: nowrap; text-align: center;}
+#controls #navLinks ul li {list-style: none; display: inline; margin: 0; padding: 0; float: left; height: 32px; width: 32px; text-align: center; background-color: transparent;}
+#controls #navLinks ul li.vr {list-style: none; display: inline; margin: 0px 2px; padding: 0; float: left; height: 32px; width: 1px; text-align: center; background-color: #606060;}
+#controls #navLinks ul li a {margin: 0; padding: 0; float: left; height: 32px; width: 32px; background-color: transparent;}
+
+#controls #navLinks ul li#exit {background: url(exit_link.png) no-repeat top left;}
+#controls #navLinks ul li#exit a:hover {background: url(exit_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#toggle {background: url(toggle_link.png) no-repeat top left;}
+#controls #navLinks ul li#toggle a:hover {background: url(toggle_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#show-notes {background: url(notes_link.png) no-repeat top left;}
+#controls #navLinks ul li#show-notes a:hover {background: url(notes_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#zero {background: url(zero_link.png) no-repeat top left;}
+#controls #navLinks ul li#zero a:hover {background: url(zero_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#prev {background: url(prev_link.png) no-repeat top left;}
+#controls #navLinks ul li#prev a:hover {background: url(prev_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#next {background: url(next_link.png) no-repeat top left;}
+#controls #navLinks ul li#next a:hover {background: url(next_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#last {background: url(last_link.png) no-repeat top left;}
+#controls #navLinks ul li#last a:hover {background: url(last_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#lst {background: url(list_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#fade a.isoff {background: url(fade_link.png) no-repeat top left;}
+#controls #navLinks ul li#fade a.ison {background: url(fade_on.png) no-repeat top right;}
+#controls #navLinks ul li#fade a:hover {background: url(fade_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#audio {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.isoff {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.ison {background: url(audio_on.png) no-repeat top right;}
+#controls #navLinks ul li#audio a:hover {background: url(audio_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#vol {background: url(volume_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#auto a.isoff {background: url(auto_link.png) no-repeat top left;}
+#controls #navLinks ul li#auto a.ison {background: url(auto_on.png) no-repeat top right;}
+#controls #navLinks ul li#auto a:hover {background: url(auto_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#pause a.isoff {background: url(pause_link.png) no-repeat top left;}
+#controls #navLinks ul li#pause a.ison {background: url(pause_on.png) no-repeat top right;}
+#controls #navLinks ul li#pause a:hover {background: url(pause_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#loop a.isoff {background: url(loop_link.png) no-repeat top left;}
+#controls #navLinks ul li#loop a.ison {background: url(loop_on.png) no-repeat top right;}
+#controls #navLinks ul li#loop a:hover {background: url(loop_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#del {background: url(delay_link.png) no-repeat top left;}
+
+#jumplist, #volumelist, #delaylist {padding: 0; margin: 0; width: 32px; height: 32px; cursor: n-resize;}
+
+#guru {position: absolute; visibility: visible; left: 0px; top: 0px; padding: 4px; width: 99%; height: auto; text-align: center; background-color: black; z-index: 10;}
+#guru div {border: solid 3px red; padding: 4px; font-family: monospace; font-size: 60%; width: auto; height: auto; color: red; text-align: center;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 0; padding: 0; font: bold 2em Verdana, Arial, Helvetica, sans-serif; font-variant: small-caps; text-shadow: 0.1em 0.1em 0.1em #666; white-space: normal; color: #222; background-color: transparent;}
+#slide0 h2 {font: bold italic 1em Arial, Helvetica, sans-serif; margin: 0.25em;}
+#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.external {border-bottom: 1px dotted gray;}
+html>body .external {border-bottom: none;}
+.external:after {content: " \274F"; font-size: smaller; color: #999;}
+
+.incremental, .incremental *, .incremental *:after {color: #ccc; visibility: visible;}
+img.incremental, canvas.incremental {visibility: hidden;}
+.slide .current {color: #B02;}
+
+/* diagnostics
+li:after {content: " [" attr(class) "]"; color: #F88;}
+*/
+
+table.piechart, table.barchart, table.linechart { border-spacing: 0.3em 0.15em; }
+table.piechart tr th, table.barchart tr th, table.linechart tr th { white-space: nowrap; }
+table.piechart tr td, table.barchart tr td, table.linechart tr td { vertical-align: top; white-space: nowrap; }
+table.piechart tr td.col, table.barchart tr td.col, table.linechart tr td.col { border-bottom: 1px solid #555; border-right: 1px solid #555; }
+table.fs90 tr td, table.fs90 tr th, div.fs90, pre.fs90, p.fs90 ,ul.fs90 {font-size: 0.9em; }
+table.fs75 tr td, table.fs75 tr th, div.fs75, pre.fs75, p.fs75 ,ul.fs75 {font-size: 0.75em; }
+table.fs66 tr td, table.fs66 tr th, div.fs66, pre.fs66, p.fs66 ,ul.fs66 {font-size: 0.66em; }
+table.fs50 tr td, table.fs50 tr th, div.fs50, pre.fs50, p.fs50 ,ul.fs50 {font-size: 0.5em; }
+
+#soundmanager-debug {position:fixed; top:0px; right:0px; width:30em; height:20em; overflow:auto; border:1px solid red; padding:1em; margin:2em; font-family:"sans serif"; font-size: 12px;color: black; background-color:#f6f6f6; z-index: 100;}
+#soundmanager-debug code {font-size: 11px;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/prev_link.png
new file mode 100644
index 000000000..c31d21350
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/prev_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/prev_over.png
new file mode 100644
index 000000000..6fef4fa52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/prev_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/print.css
new file mode 100755
index 000000000..220083260
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/print.css
@@ -0,0 +1 @@
+/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul { page-break-inside: avoid; visibility: visible !important; } h1 { page-break-after: avoid; } html { width:100%; overflow:hidden; } body { font-size: 12pt; background: white; width:100%; } * { color: black; } #slide0 h1 { font-size: 200%; border: none; margin: 0.5em 0 0.25em; } #slide0 h3 { margin: 0; padding: 0; } #slide0 h4 { margin: 0 0 0.5em; padding: 0; } #slide0 { margin-bottom: 3em; } h1 { border-top: 2pt solid gray; border-bottom: 1px dotted silver; padding:0.2em 0 0.3em 0; } .extra { background: transparent !important; } div.extra, pre.extra, .example { font-size: 10pt; color: #333; } ul.extra a { font-weight: bold; } p.example { display: none; } #header { display: none; } #footer h1 { margin: 0; border-bottom: 1px solid; color: gray; font-style: italic; } #footer h2, #controls { display: none; } div.handout { display:block; border-top: 2px dotted #ccc; background:url(pics/back-handout-print.png) top right no-repeat #fff; min-height:6em; padding-right:6em; margin-bottom:1em; } .slide { display:block; background:url(pics/back-slide-print.png) top right no-repeat #fff; min-height:6em; margin-bottom:1em; } table { display:block; /* display:none; */ font-size:90%; overflow:hidden; margin-top:1em; margin-bottom:1em; } pre , code { margin:0; font-size:1pt; overflow:auto; } img { max-width:100% !important; } /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .layout, .layout * { display: none !important; } \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/s5-core.css
new file mode 100755
index 000000000..86444e041
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/s5-core.css
@@ -0,0 +1,9 @@
+/* Do not edit or override these styles! The system will likely break if you do. */
+
+div#header, div#footer, div#controls, .slide {position: absolute;}
+html>body div#header, html>body div#footer,
+ html>body div#controls, html>body .slide {position: fixed;}
+.handout {display: none;}
+.layout {display: block;}
+.slide, .hideme, .incremental {visibility: hidden;}
+#slide0 {visibility: visible;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/slides.css
new file mode 100755
index 000000000..0786d7dbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/slides.css
@@ -0,0 +1,3 @@
+@import url(s5-core.css); /* required to make the slide show run at all */
+@import url(framing.css); /* sets basic placement and size of slide components */
+@import url(pretty.css); /* stuff that makes the slides look better than blah */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/slides.js
new file mode 100644
index 000000000..7cb810d51
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/slides.js
@@ -0,0 +1,2846 @@
+// S5 1.3beta7 (18-Apr-2007) advanced version by C. Effenberger
+// Please see http://s5.netzgesta.de/ for more information
+// based on S5 v1.2a1 slides.js -- released into the Public Domain
+// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
+// about all the wonderful and talented contributors to this code!
+// audio extension: soundmanager2 is NOT Public Domain
+// Please see http://www.schillmania.com/projects/soundmanager2/ for information
+
+var undef;
+var slideCSS = '';
+var snum = 0;
+var smax = 1;
+var incpos = 0;
+var number = undef;
+var firstTime = 1;
+var s5mode = true;
+var helpmode = false;
+var defaultView = 'slideshow'; //outline
+var controlVis = 'visible';
+var s5Path = 'lib/plugins/s5reloaded/';
+
+// scalable images extension
+var empx = 0;
+var images = new Array();
+var canvas = new Array();
+var medias = new Array();
+var piecharts = new Array();
+var barcharts = new Array();
+var linecharts = new Array();
+// scalable images extension
+
+// transition extension
+var tranSitions = false;
+var fadeModus = false;
+var fadeDuration = 500;
+var incrDuration = 250;
+var opac = 1;
+var cid = '';
+var nid = '';
+var tid = '';
+var jl = '';
+// transition extension
+
+// autoplay extension
+var autoMatic = false;
+var playLoop = false;
+var playPause = false;
+var autoRun = false;
+var playDelay = 5000;
+var remainDer = 0;
+var incrDelay = 0;
+// autoplay extension
+
+// audio extension
+var sound = new Array();
+var audioSupport = false;
+var audioVolume = 100;
+var audioError = false;
+var swfUnloaded = true;
+var bgSoundItem = 9999;
+var curSoundID = -1;
+// audio extension
+
+// panel extension
+var imgWidth = 32;
+var imgHeight = 32;
+// panel extension
+
+// canvas chart extension
+var canvasSupport = false;
+var ChartData = new Array();
+var colorSlice = new Array();
+var font = document.createElement("img");
+font.setAttribute("src", s5Path+"ui/graphic_support/numeric.png");
+signs = {
+ '0': {sx: 0, sy: 0, sw: 48, sh: 64},
+ '1': {sx: 48, sy: 0, sw: 48, sh: 64},
+ '2': {sx: 96, sy: 0, sw: 48, sh: 64},
+ '3': {sx: 144, sy: 0, sw: 48, sh: 64},
+ '4': {sx: 192, sy: 0, sw: 48, sh: 64},
+ '5': {sx: 240, sy: 0, sw: 48, sh: 64},
+ '6': {sx: 288, sy: 0, sw: 48, sh: 64},
+ '7': {sx: 336, sy: 0, sw: 48, sh: 64},
+ '8': {sx: 384, sy: 0, sw: 48, sh: 64},
+ '9': {sx: 432, sy: 0, sw: 48, sh: 64},
+ '%': {sx: 480, sy: 0, sw: 48, sh: 64},
+ '.': {sx: 528, sy: 0, sw: 24, sh: 64}
+};
+var colorNames= new Array();
+colorNames["black"]="#000000"; colorNames["maroon"]="#800000";
+colorNames["green"]="#008000"; colorNames["olive"]="#808000";
+colorNames["navy"]="#000080"; colorNames["purple"]="#800080";
+colorNames["teal"]="#008080"; colorNames["gray"]="#808080";
+colorNames["silver"]="#C0C0C0"; colorNames["red"]="#FF0000";
+colorNames["lime"]="#00FF00"; colorNames["yellow"]="#FFFF00";
+colorNames["blue"]="#0000FF"; colorNames["fuchsia"]="#FF00FF";
+colorNames["aqua"]="#00FFFF"; colorNames["white"]="#FFFFFF";
+colorNames["aliceblue"]="#F0F8FF"; colorNames["antiquewhite"]="#FAEBD7";
+colorNames["aquamarine"]="#7FFFD4"; colorNames["azure"]="#F0FFFF";
+colorNames["beige"]="#F5F5DC"; colorNames["blueviolet"]="#8A2BE2";
+colorNames["brown"]="#A52A2A"; colorNames["burlywood"]="#DEB887";
+colorNames["cadetblue"]="#5F9EA0"; colorNames["chartreuse"]="#7FFF00";
+colorNames["chocolate"]="#D2691E"; colorNames["coral"]="#FF7F50";
+colorNames["cornflowerblue"]="#6495ED"; colorNames["cornsilk"]="#FFF8DC";
+colorNames["crimson"]="#DC143C"; colorNames["darkblue"]="#00008B";
+colorNames["darkcyan"]="#008B8B"; colorNames["darkgoldenrod"]="#B8860B";
+colorNames["darkgray"]="#A9A9A9"; colorNames["darkgreen"]="#006400";
+colorNames["darkkhaki"]="#BDB76B"; colorNames["darkmagenta"]="#8B008B";
+colorNames["darkolivegreen"]="#556B2F"; colorNames["darkorange"]="#FF8C00";
+colorNames["darkorchid"]="#9932CC"; colorNames["darkred"]="#8B0000";
+colorNames["darksalmon"]="#E9967A"; colorNames["darkseagreen"]="#8FBC8F";
+colorNames["darkslateblue"]="#483D8B"; colorNames["darkslategray"]="#2F4F4F";
+colorNames["darkturquoise"]="#00CED1"; colorNames["darkviolet"]="#9400D3";
+colorNames["deeppink"]="#FF1493"; colorNames["deepskyblue"]="#00BFFF";
+colorNames["dimgray"]="#696969"; colorNames["dodgerblue"]="#1E90FF";
+colorNames["firebrick"]="#B22222"; colorNames["floralwhite"]="#FFFAF0";
+colorNames["forestgreen"]="#228B22"; colorNames["gainsboro"]="#DCDCDC";
+colorNames["ghostwhite"]="#F8F8FF"; colorNames["gold"]="#FFD700";
+colorNames["goldenrod"]="#DAA520"; colorNames["greenyellow"]="#ADFF2F";
+colorNames["honeydew"]="#F0FFF0"; colorNames["hotpink"]="#FF69B4";
+colorNames["indianred"]="#CD5C5C"; colorNames["indigo"]="#4B0082";
+colorNames["ivory"]="#FFFFF0"; colorNames["khaki"]="#F0E68C";
+colorNames["lavender"]="#E6E6FA"; colorNames["lavenderblush"]="#FFF0F5";
+colorNames["lawngreen"]="#7CFC00"; colorNames["lemonchiffon"]="#FFFACD";
+colorNames["lightblue"]="#ADD8E6"; colorNames["lightcoral"]="#F08080";
+colorNames["lightcyan"]="#E0FFFF"; colorNames["lightgoldenrodyellow"]="#FAFAD2";
+colorNames["lightgreen"]="#90EE90"; colorNames["lightgrey"]="#D3D3D3";
+colorNames["lightpink"]="#FFB6C1"; colorNames["lightsalmon"]="#FFA07A";
+colorNames["lightseagreen"]="#20B2AA"; colorNames["lightskyblue"]="#87CEFA";
+colorNames["lightslategray"]="#778899"; colorNames["lightsteelblue"]="#B0C4DE";
+colorNames["lightyellow"]="#FFFFE0"; colorNames["limegreen"]="#32CD32";
+colorNames["linen"]="#FAF0E6"; colorNames["mediumaquamarine"]="#66CDAA";
+colorNames["mediumblue"]="#0000CD"; colorNames["mediumorchid"]="#BA55D3";
+colorNames["ediumpurple"]="#9370D"; colorNames["mediumseagreen"]="#3CB371";
+colorNames["mediumslateblue"]="#7B68EE"; colorNames["mediumspringgreen"]="#00FA9A";
+colorNames["mediumturquoise"]="#48D1CC"; colorNames["mediumvioletred"]="#C71585";
+colorNames["midnightblue"]="#191970"; colorNames["mintcream"]="#F5FFFA";
+colorNames["mistyrose"]="#FFE4E1"; colorNames["moccasin"]="#FFE4B5";
+colorNames["navajowhite"]="#FFDEAD"; colorNames["oldlace"]="#FDF5E6";
+colorNames["olivedrab"]="#6B8E23"; colorNames["orange"]="#FFA500";
+colorNames["orangered"]="#FF4500"; colorNames["orchid"]="#DA70D6";
+colorNames["palegoldenrod"]="#EEE8AA"; colorNames["palegreen"]="#98FB98";
+colorNames["paleturquoise"]="#AFEEEE"; colorNames["palevioletred"]="#DB7093";
+colorNames["papayawhip"]="#FFEFD5"; colorNames["peachpuff"]="#FFDAB9";
+colorNames["peru"]="#CD853F"; colorNames["pink"]="#FFC0CB";
+colorNames["plum"]="#DDA0DD"; colorNames["powderblue"]="#B0E0E6";
+colorNames["rosybrown"]="#BC8F8F"; colorNames["royalblue"]="#4169E1";
+colorNames["saddlebrown"]="#8B4513"; colorNames["salmon"]="#FA8072";
+colorNames["sandybrown"]="#F4A460"; colorNames["seagreen"]="#2E8B57";
+colorNames["seashell"]="#FFF5EE"; colorNames["sienna"]="#A0522D";
+colorNames["skyblue"]="#87CEEB"; colorNames["slateblue"]="#6A5ACD";
+colorNames["slategray"]="#708090"; colorNames["snow"]="#FFFAFA";
+colorNames["springgreen"]="#00FF7F"; colorNames["steelblue"]="#4682B4";
+colorNames["tan"]="#D2B48C"; colorNames["thistle"]="#D8BFD8";
+colorNames["tomato"]="#FF6347"; colorNames["turquoise"]="#40E0D0";
+colorNames["violet"]="#EE82EE"; colorNames["wheat"]="#F5DEB3";
+colorNames["whitesmoke"]="#F5F5F5"; colorNames["yellowgreen"]="#9ACD32";
+var canvas_bgcolor = "";
+var canvas_width = 200;
+var canvas_height = 200;
+var canvas_noshade = 0;
+var canvas_nofill = 0;
+var canvas_noshadow = 0;
+var canvas_htmltext = 0;
+var canvas_imgtext = 0;
+var canvas_notext = 0;
+// canvas chart extension
+
+var s5NotesWindow;
+var s5NotesWindowLoaded = false;
+var previousSlide = 0;
+var presentationStart = new Date();
+var slideStart = new Date();
+
+var countdown = {
+ timer: 0,
+ state: 'pause',
+ start: new Date(),
+ end: 0,
+ remaining: 0
+};
+
+var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
+if(isIE) var notIE7 = parseInt(navigator.appVersion) < 7 ? 1 : 0;
+var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
+var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
+var isS2 = navigator.userAgent.indexOf('Safari') >= 2 ? 1 : 0;
+
+function hasClass(object, className) {
+ if (!object.className) return false;
+ return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
+}
+
+function hasValue(object, value) {
+ if (!object) return false;
+ return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
+}
+
+function removeClass(object,className) {
+ if (!object || !hasClass(object,className)) return;
+ object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
+}
+
+function addClass(object,className) {
+ if (!object || hasClass(object, className)) return;
+ if (object.className) {
+ object.className += ' '+className;
+ } else {
+ object.className = className;
+ }
+}
+
+function changeClass(object,className) {
+ if (!object) return;
+ object.firstChild.className = className;
+}
+
+function GetElementsWithClassName(elementName,className) {
+ var allElements = document.getElementsByTagName(elementName);
+ var elemColl = new Array();
+ for (var i = 0; i< allElements.length; i++) {
+ if (hasClass(allElements[i], className)) {
+ elemColl[elemColl.length] = allElements[i];
+ }
+ }
+ return elemColl;
+}
+
+function isParentOrSelf(element, id) {
+ if (element == null || element.nodeName=='BODY') return false;
+ else if (element.id == id) return true;
+ else return isParentOrSelf(element.parentNode, id);
+}
+
+function nodeValue(node) {
+ var result = "";
+ if (node.nodeType == 1) {
+ var children = node.childNodes;
+ for (var i = 0; i < children.length; ++i) {
+ result += nodeValue(children[i]);
+ }
+ }
+ else if (node.nodeType == 3) {
+ result = node.nodeValue;
+ }
+ return(result);
+}
+
+function slideLabel() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var list = document.getElementById('jumplist');
+ smax = slideColl.length;
+ for (var n = 0; n < smax; n++) {
+ var obj = slideColl[n];
+ var did = 'slide' + n.toString();
+ obj.setAttribute('id',did);
+ var otext = '';
+ var menu = obj.firstChild;
+ if (!menu) continue; // to cope with empty slides
+ while (menu && menu.nodeType == 3) {
+ menu = menu.nextSibling;
+ }
+ if (!menu) continue; // to cope with slides with only text nodes
+ var menunodes = menu.childNodes;
+ for (var o = 0; o < menunodes.length; o++) {
+ otext += nodeValue(menunodes[o]);
+ }
+ list.options[list.length] = new Option(n + ' : ' + otext, n);
+ }
+}
+var sectionNames= new Array();
+var sectionTimes= new Array();
+var sectionTitle = "";
+function currentSlide() {
+ var cs, at, fd, ss;
+ if (document.getElementById) {
+ cs = document.getElementById('currentSlide');
+ } else {
+ cs = document.currentSlide;
+ }
+ fd = fadeModus?"F":"&ndash;";
+ ss = audioSupport?"S":"&ndash;";
+ at = (autoMatic?(playPause?"||":(playLoop?"&gt;0":"&gt;|")):"&ndash;&ndash;");
+
+ fd = "";
+ ss = "";
+ at = "";
+ try {
+ for (var dat in sectionNames) {
+ if(dat==snum) sectionTitle = sectionNames[dat];
+ }
+ } catch (exc1) {}
+ try {
+ for (var dat in sectionTimes) {
+ if(dat==snum+1) {
+ playDelay = parseInt(sectionTimes[dat])*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+ }
+ }
+ } catch (exc2) {}
+ var secTitle = sectionTitle;
+ if (secTitle != "") secTitle += "<BR>";
+ cs.innerHTML = secTitle+'<div id="plink" nowrap="nowrap">' +
+ '<span id="csFade">' + fd + ss + '<\/span>' +
+ '<span id="csHere"><strong>' + snum + '<\/strong><\/span>' +
+ '<span id="csSep">\/<\/span>' +
+ '<span id="csTotal">' + (smax-1) + '<\/span>' +
+ '<span id="csAuto">' + at + '<\/span>' +
+ '<\/div>';
+
+ if (snum == 0) {
+ cs.style.visibility = 'hidden';
+ } else {
+ cs.style.visibility = 'visible';
+ }
+}
+
+function go(step) {
+ if (document.getElementById('slideProj').disabled || step == 0) return;
+ jl = document.getElementById('jumplist');
+ cid = 'slide' + snum;
+ var ce = document.getElementById(cid);
+ if (incrementals[snum].length > 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ removeClass(incrementals[snum][i], 'current');
+ removeClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ if (step != 'j') {
+ snum += step;
+ lmax = smax - 1;
+ if (snum > lmax) snum = lmax;
+ if (snum < 0) snum = 0;
+ }else {
+ snum = parseInt(jl.value);
+ }
+ nid = 'slide' + snum;
+ var ne = document.getElementById(nid);
+ if (!ne) {
+ ne = document.getElementById('slide0');
+ nid = 'slide0';
+ snum = 0;
+ }
+ if (step < 0) {
+ incpos = incrementals[snum].length
+ }else {
+ incpos = 0;
+ }
+ if (incrementals[snum].length > 0 && incpos == 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ if (hasClass(incrementals[snum][i], 'current')) {
+ incpos = i + 1;
+ }else {
+ addClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ }
+ if (incrementals[snum].length > 0 && incpos > 0) {
+ addClass(incrementals[snum][incpos - 1], 'current');
+ }
+ var guru = document.getElementById('guru');
+ if(guru && snum==0) {
+ guru.style.visibility = 'visible';
+ }else if(guru && snum>0) {
+ guru.style.visibility = 'hidden';
+ }
+ if(tranSitions && s5mode && fadeModus) {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {fadeoutSound(curSoundID,true); } // audio support
+ }
+ changeOpac(0,nid);
+ changeOpac(100,cid);
+ ce.style.visibility = 'visible';
+ shiftOpacity(cid,fadeDuration);
+ window.setTimeout("changeSlides()",fadeDuration);
+ }else {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {stopSound(curSoundID); } // audio support
+ }
+ ce.style.visibility = 'hidden';
+ if (isOp) location.hash = nid;
+ ne.style.visibility = 'visible';
+ finishSlides();
+ }
+}
+
+function changeSlides() {
+ if(nid != cid) changeOpac(100,cid);
+ document.getElementById(cid).style.visibility = 'hidden';
+ document.getElementById(nid).style.visibility = 'visible';
+ if (isOp) location.hash = nid;
+ shiftOpacity(nid,fadeDuration);
+ window.setTimeout("finishSlides()",fadeDuration);
+}
+
+function finishSlides() {
+ jl.selectedIndex = snum;
+ currentSlide();
+ loadNote();
+ permaLink();
+ number = undef;
+ if(sound[getSoundID(nid)]) {
+ playSound(nid); // audio support
+ }else if(sound[bgSoundItem] && curSoundID != bgSoundItem) {
+ playSound(bgSoundItem); // audio support
+ }
+}
+
+function goTo(target) {
+ if (target >= smax || target == snum) return;
+ go(target - snum);
+}
+
+function subgo(step) {
+ if (step > 0) {
+ removeClass(incrementals[snum][incpos - 1],'current');
+ removeClass(incrementals[snum][incpos], 'incremental');
+ if(tranSitions && s5mode && fadeModus) {
+ if(!incrementals[snum][incpos].id) {
+ var tmp = new Date(); tid = "inc" + String(tmp.getTime());
+ incrementals[snum][incpos].id = tid;
+ }else {
+ tid = incrementals[snum][incpos].id;
+ }
+ if(typeof(incrementals[snum][incpos].src) != "undefined" || incrementals[snum][incpos].getContext) {
+ changeOpac(0,tid);
+ addClass(incrementals[snum][incpos],'current');
+ shiftOpacity(tid,incrDuration);
+ setTimeout("nextInc()",incrDuration);
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ } else {
+ incpos--;
+ removeClass(incrementals[snum][incpos],'current');
+ addClass(incrementals[snum][incpos], 'incremental');
+ addClass(incrementals[snum][incpos - 1],'current');
+ loadNote();
+ }
+}
+
+function nextInc() {
+ incpos++;
+ loadNote();
+}
+
+function toggle() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ var guru = document.getElementById('guru');
+ if (!slides.disabled) {
+ stopPlay();
+ if(audioSupport && !swfUnloaded) stopAllSounds();
+ slides.disabled = true;
+ outline.disabled = false;
+ s5mode = false;
+ fontSize(1,'em');
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'visible';
+ }
+ if(guru) guru.style.visibility = 'hidden';
+ } else {
+ slides.disabled = false;
+ outline.disabled = true;
+ s5mode = true;
+ fontScale();
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'hidden';
+ }
+ slideColl[snum].style.visibility = 'visible';
+ if(guru && snum==0) guru.style.visibility = 'visible';
+ }
+}
+
+function showHide(action) {
+ var obj = GetElementsWithClassName('*','hideme')[0];
+ switch (action) {
+ case 's':
+ obj.style.visibility = 'visible';
+ break;
+ case 'h':
+ obj.style.visibility = 'hidden';
+ break;
+ case 'k':
+ if (obj.style.visibility != 'visible') {
+ obj.style.visibility = 'visible';
+ } else {
+ obj.style.visibility = 'hidden';
+ }
+ break;
+ }
+}
+
+function keys(key) {
+ if (!key) {
+ key = event;
+ key.which = key.keyCode;
+ }
+ if (helpmode) {
+ dumpHelpReq();
+ return;
+ }
+ if (key.which == 84 && !isOp) {
+ toggle();
+ return;
+ }
+ if (s5mode) {
+ if (autoMatic) {
+ switch (key.which) {
+ case 70: // f/ading on/off
+ switchFade();
+ break;
+ case 83: // s/ound on/off
+ toggleSounds();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 65: // a/utoplay on/off
+ stopPlay();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 80: // p/ause
+ case 32: // spacebar
+ pausePlay();
+ break;
+ }
+ }else {
+ switch (key.which) {
+ case 8: // backspace = HELP
+ createHelpReq();
+ break;
+ case 10: // return
+ case 13: // enter
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ if(number != undef) {
+ goTo(number);
+ break;
+ }
+ case 32: // spacebar
+ case 34: // page down
+ case 39: // rightkey
+ case 40: // downkey
+ if(number != undef) {
+ go(number);
+ } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ break;
+ case 33: // page up
+ case 37: // leftkey
+ case 38: // upkey
+ if(number != undef) {
+ go(-1 * number);
+ } else if (!incrementals[snum] || incpos <= 0) {
+ go(-1);
+ } else {
+ subgo(-1);
+ }
+ break;
+ case 65: // a/utoplay
+ startPlay();
+ break;
+ case 72: // h
+ case 36: // home
+ goTo(0);
+ break;
+ case 69: // e
+ case 35: // end
+ goTo(smax-1);
+ break;
+ case 70: // f/ade transitions on/off
+ switchFade();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 83: // s/ound support on/off
+ toggleSounds();
+ break;
+ case 27: // escape
+ case 81: // q
+ if(!isOp) byby();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 78: // n
+ createNotesWindow();
+ break;
+ }
+ if (key.which < 48 || key.which > 57) {
+ number = undef;
+ } else {
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
+ }
+ }
+ }
+ return false;
+}
+
+function clicker(e) {
+ number = undef;
+ var target;
+ if (window.event) {
+ target = window.event.srcElement;
+ e = window.event;
+ } else {
+ target = e.target;
+ }
+ if (target.href != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
+ if (!helpmode) {
+ if (!e.which || e.which == 1) {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ }
+ } else {
+ dumpHelpReq();
+ }
+}
+
+function findSlide(hash) {
+ var target = null;
+ var slides = GetElementsWithClassName('*','slide');
+ for (var i = 0; i < slides.length; i++) {
+ var targetSlide = slides[i];
+ if ( (targetSlide.name && targetSlide.name == hash)
+ || (targetSlide.id && targetSlide.id == hash) ) {
+ target = targetSlide;
+ break;
+ }
+ }
+ while(target != null && target.nodeName != 'BODY') {
+ if (hasClass(target, 'slide')) {
+ return parseInt(target.id.slice(5));
+ }
+ target = target.parentNode;
+ }
+ return null;
+}
+
+function slideJump() {
+ if (window.location.hash == null) return;
+ var sregex = /^#slide(\d+)$/;
+ var matches = sregex.exec(window.location.hash);
+ var dest = null;
+ if (matches != null) {
+ dest = parseInt(matches[1]);
+ } else {
+ dest = findSlide(window.location.hash.slice(1));
+ }
+ if (dest != null)
+ go(dest - snum);
+}
+
+function fixLinks() {
+ var thisUri = window.location.href;
+ thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
+ var aelements = document.getElementsByTagName('A');
+ for (var i = 0; i < aelements.length; i++) {
+ var a = aelements[i].href;
+ var slideID = a.match('\#slide[0-9]{1,2}');
+ if ((slideID) && (slideID[0].slice(0,1) == '#')) {
+ var dest = findSlide(slideID[0].slice(1));
+ if (dest != null) {
+ if (aelements[i].addEventListener) {
+ aelements[i].addEventListener("click", new Function("e",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "if (e.preventDefault) e.preventDefault();"), true);
+ } else if (aelements[i].attachEvent) {
+ aelements[i].attachEvent("onclick", new Function("",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "event.returnValue = false;"));
+ }
+ }
+ }
+ }
+}
+
+function externalLinks() {
+ if (!document.getElementsByTagName) return;
+ var anchors = document.getElementsByTagName('a');
+ for (var i=0; i<anchors.length; i++) {
+ var anchor = anchors[i];
+ if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
+ anchor.target = '_blank';
+ addClass(anchor,'external');
+ }
+ }
+}
+
+function permaLink() {
+ document.getElementById('plink').href = window.location.pathname + '#slide' + snum;
+}
+
+function createControls() {
+ var controlsDiv = document.getElementById("controls");
+ if (!controlsDiv) return;
+ var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
+ var hideDiv, hideList = '';
+ if (controlVis == 'hidden') {
+ hideDiv = hider;
+ } else {
+ hideList = hider;
+ }
+ if(isOp) {
+ var str = '';
+ }else {
+ var str = '<a accesskey="t" id="sheet" title="toggle CSS" href="javascript:toggle();">&plusmn;<\/a>';
+ }
+ if(isIE) {
+ var tmp = "move around&xA0;until the color&xA0;change to red!";
+ }else if(isS2) {
+ var tmp = "move around\r\nuntil the color\r\nchange to red!";
+ }else {
+ var tmp = "move around until color change to red!";
+ }
+ if(isIE) {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] for keyboard help!"><ul>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst" style="vertical-align: middle; width: 160px;"><select style="cursor: auto; width: 160px; height: auto;" id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del" style="vertical-align: middle; width: 52px;"><select style="cursor: auto; width: 52px; height: auto;" id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul><\/div><\/form>';
+ }else {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] or double click this area for keyboard help!" ondblclick="createHelpReq();"><ul>' +
+ '<li id="exit"><a href="javascript:byby();" accesskey="q" title="exit Show"><\/a><\/li>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li class="vr"><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst"><a id="list" style="cursor:wait;" title="' + tmp + '"><\/a><select id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="fadeLinks" class="vr"><\/li>' +
+ '<li id="fade"><a class="isoff" href="javascript:switchFade();" accesskey="f" title="Transions"><\/a><\/li>' +
+ '<li id="audioLinks" class="vr"><\/li>' +
+ '<li id="audio"><a class="isoff" href="javascript:toggleSounds();" accesskey="s" title="Sounds" ><\/a><\/li>' +
+ '<li id="vol"><a id="volume" style="cursor:wait;" title="' + tmp + '"><\/a><select id="volumelist" title="select Volume" onchange="setVolume();"><option value="100">100<\/option><option value="90">90<\/option><option value="80">80<\/option><option value="70">70<\/option><option value="60">60<\/option><option value="50">50<\/option><option value="40">40<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="10">10<\/option><option value="0">0<\/option><\/select><\/li>' +
+ '<li id="autoLinks" class="vr"><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del"><a id="delay" style="cursor:wait;" title="' + tmp + '"><\/a><select id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul>' +
+ '<a href="http://s5.netzgesta.de" target="_blank" title="S5 Reloaded"><img style="position: absolute; right: 0; bottom: 0;" src="data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAYAAAASYli2AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAYpSURBVHjaYvz//z8DOYCRkZEZRAEx0Ij/f2HiAAHEgqYIpACkkB1J7g8Q/wLRIJ1QNSB5fiDmAOLvQKHPQPoHSB4ggFiQDGMCUnxALAPECkAsBLIdiD8A8SMgfghU8wlqkTgQK1ZVVWldv3792fr16y8D+c9AhgMEECPIy1DDRIDYAojdzMzMWNXV1UG2/v/y5Qvzw4cPP587d24/kH8Gar/uwoULQ+/cufNFXFyciZmZ+UVmZuZKoFmvAQII5kJOIDbi4uKK2Llz53EbG5vP6GGWn5+vMWnSpJtA5jcg5v327Rtnc3PzfSD79+rVq2WBNBtIHUAAwQzkAWKzBQsWnIUZFhISovXmzZsfkpKSDD09PY8kJCR+QtWCguGvrKwsz7Rp07Q4ODh+srCwgILiH0gSIIBgBrICsUBoaCgorBiANgqvXbtWDMg8AcQf9+7d+x0o9xbI/gJV/3fVqlUvmJiY/gIdcaWhoYETahEDQADBDPwNxO9h3gNpBiq6f/HiRbWjR4+yvnr16grQNbeh6kCWsxkYGIhClT8yNDQUgyYhBoAAYoIKfgXi06mpqUowQ+vr6x+uW7fu0suXL8+uWbOGS0BAwB7kC6jXvqmoqLDIyclxzZo1S4udnR2WtBgAAggWyyCXSgOxZUxMjGpWVtY7S0vLr8iRsnnzZl4/P7/DQCYoYtSA2DApKUkVGNNPDh06dBrIvwU06xNAAMEM5AIKqAOxCjQsmHl5eXWdnJx4N2zYcB4prd4CUpfwJRuAAGJCimULoGYpbm5uZ5DBnz9/5tq4caPWkSNHeJEc+g0aTFzfv3/nACabjzk5OW8FBQVloLmHASCAYJECUiTg7+//HJiQTzY2NsrfvXv3n7m5+T5YMgJGEkjDS2gY/pKRkeHt7Ow0Bsb0v9+/fz+HxTJAAMG8DHKFLTC9aRUXF79BT9Qgw4CWHAAy70FdYgjEDgkJCTpWVlYMQBfeAaaMPqBZbwECCGYgMzQGQSleCehS0X///jEDvf9lxYoVoOTyAIjfANX+BqrlBrL1gLFf09vb+0FaWvoHMBctA6USUKQABBAjrPiCliKg7AOKIG5ougLlju9Ipc1foDJWqMWGhYWFtsBg4RISEnrg5uY2BWQgQACxIBkGMkQKijmRfPwXWuI8ASp7DQ1vEP4DDO8PwBzzDJheT0CLPQaAAEJOh0o8zAzeihwMiv+gGZ0B4sz/bIwM797/YTh1/wfDIWj5qAfMmtFnzpz5ICIiwqKoqPgjKChoOtCs5wABhJyXpUCGzddgOIethJ71jEFi1nNwgQrKz8zv37//097eDop15qVLl0pAzWAACCAWhEMYOJFdduELA++b3wxsTIwMfzmYGH6xMDG8gYYpKAg+cnJy/gB6VwuYZFiA7E+wvAwQQCy46ozexwzG17+BYx6UVE4B8Vmo68CRFR0dDQo3UAHBBUwJ4lCLGAACCNnAv4zQxAkCxbIMZ0EuBIYb98EPDFo3voGTzjOogVzArGf969cvNmC2+wssHD7BDAQIIBakmHwPDPy3MAMNeBhgpfbbVEkGhqQbDJaXvjI8BPJB4jz79u37DcwlP+fPn38NuTwECCBkA1+8+8Nwtusxg+STHwwcP/8z8EuwMXA1KjBcBSlwEmRgBhrID/U2O7QMBIEHxsbGkrAwBAggmIGgNMT64AfDWyB+By0EQMVZlC0/wwsXQYa38hzgCGGBWv5ZU1OT4c+fP8yLFi1SA3r5Haw8BAggmIGg5KBpJ8BgeOYTg8S3f2DN/OxMDNwgw0AKnv0EJ+avsITu7u6+EZqzQEHwHFqaMwAEEAtShS/pLcTwrU+Z4QwsyQANOwIL06tfGV5BqwmQWoGKigoLYJnJvWPHjhstLS169vb2M0DqAAIIVh6CXHT/9ndIawEUITCXgUDrQwbGbe8YjkJdAzZQVVVV/t69e8LAgtUYaNgxWKQABBByacMHzfTK9gIMYkBZpj//GT4c+8gAKm1AsfseqPYPtHTXAtaEacBqlgHoyq+srKw3XV1dFwHlvwEEECNyYwmp3cIJjbUf0DbLP7RGEg+0bcMCjQxQzH8BWQgQQIzktr5wAYAAYmKgMgAIMAAp8Fx3osz1lgAAAABJRU5ErkJggg==" width="20" height="32" alt="S5" \/><\/a>' +
+ '<\/div><\/form>';
+ }
+ if (controlVis == 'hidden') {
+ var hidden = document.getElementById('navLinks');
+ } else {
+ var hidden = document.getElementById('jumplist');
+ }
+ addClass(hidden,'hideme');
+}
+
+function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
+ if (!s5mode && !isOp) return false;
+ var hScreen = screen.width; var vScreen = screen.height;
+ var vWindow = window.outerHeight; var hWindow = window.outerWidth;
+ if (isOp && s5mode && defaultView=='slideshow' && ((hScreen != hWindow) || (vScreen != vWindow))) {
+ toggle();
+ return false;
+ }
+ if (isOp && !s5mode && ((hScreen != hWindow) || (vScreen != vWindow))) return false;
+ if (isOp && !s5mode && (hScreen == hWindow) && (vScreen == vWindow)) toggle();
+ var vScale = 48; // both yield 16 (the usual browser default) at 1024x768
+ var hScale = 64; // perhaps should auto-calculate based on theme's declared value?
+ if (window.innerHeight) {
+ var vSize = window.innerHeight;
+ var hSize = window.innerWidth;
+ } else if (document.documentElement.clientHeight) {
+ var vSize = document.documentElement.clientHeight;
+ var hSize = document.documentElement.clientWidth;
+ } else if (document.body.clientHeight) {
+ var vSize = document.body.clientHeight;
+ var hSize = document.body.clientWidth;
+ } else {
+ var vSize = 700; // assuming 1024x768, minus chrome and such equals 8:5
+ var hSize = 1024; // these do not account for kiosk mode or Opera Show
+ }
+ var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
+ extendImgSizes(newSize); // scalable images extension
+ extendCanSizes(newSize); // scalable canvas extension
+ extendObjSizes(newSize); // scalable object extension
+ fontSize(newSize,"px");
+ if(!isS2 || firstTime==0) {
+ generateCanvas(); // dynamic canvas extension
+ }
+ if (isGe) { // hack to counter incremental reflow bugs
+ var obj = document.getElementsByTagName('body')[0];
+ obj.style.visibility = 'hidden';
+ obj.style.display = 'none';
+ obj.style.display = 'block';
+ obj.style.visibility = 'visible';
+ changeOpac(100,'slide' + snum);
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("fixReflow()",10);
+ }else {
+ setListPos(); // invisible select extension
+ }
+}
+
+function fixReflow() {
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("finishReflow()",10);
+}
+function finishReflow() {
+ setListPos(); // invisible select extension
+}
+
+function fontSize(val,fmt) {
+ var value = val + fmt;
+ if (!(s5ss = document.getElementById('s5ss'))) {
+ if (!document.createStyleSheet) {
+ document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
+ s5ss.setAttribute('media','screen, projection');
+ s5ss.setAttribute('id','s5ss');
+ } else {
+ document.createStyleSheet();
+ document.s5ss = document.styleSheets[document.styleSheets.length - 1];
+ }
+ }
+ if (!(document.s5ss && document.s5ss.addRule)) {
+ while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
+ s5ss.appendChild(document.createTextNode('html {font-size: ' + value + ' !important;}'));
+ } else {
+ document.s5ss.addRule('html','font-size: ' + value + ' !important;');
+ }
+}
+
+function windowChange() {
+ fontScale();
+}
+
+function notOperaFix() {
+ slideCSS = document.getElementById('slideProj').href;
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ slides.setAttribute('media','screen');
+ outline.disabled = true;
+ if (isGe) {
+ slides.setAttribute('href','null'); // Gecko fix
+ slides.setAttribute('href',slideCSS); // Gecko fix
+ }
+ if ((isIE && notIE7) && document.styleSheets && document.styleSheets[0]) {
+ document.styleSheets[0].addRule('img', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('div', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('.slide', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ }
+}
+
+function getIncrementals(obj) {
+ var incrementals = new Array();
+ if (!obj)
+ return incrementals;
+ var children = obj.childNodes;
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ if (hasClass(child, 'incremental')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'incremental');
+ for (var j = 0; j < child.childNodes.length; j++) {
+ if (child.childNodes[j].nodeType == 1) {
+ addClass(child.childNodes[j], 'incremental');
+ }
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ removeClass(child,'incremental');
+ }
+ }
+ if (hasClass(child, 'show-first')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'show-first');
+ if (child.childNodes[isGe].nodeType == 1) {
+ removeClass(child.childNodes[isGe], 'incremental');
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ }
+ }
+ incrementals = incrementals.concat(getIncrementals(child));
+ }
+ return incrementals;
+}
+
+function createIncrementals() {
+ var incrementals = new Array();
+ for (var i = 0; i < smax; i++) {
+ incrementals[i] = getIncrementals(document.getElementById('slide'+i));
+ }
+ return incrementals;
+}
+
+function trap(e) {
+ if (!e) {
+ e = event;
+ e.which = e.keyCode;
+ }
+ try {
+ modifierKey = e.ctrlKey || e.altKey || e.metaKey;
+ }
+ catch(e) {
+ modifierKey = false;
+ }
+ return modifierKey || e.which == 0;
+}
+
+// notes extension
+function noteLabel() { // Gives notes id's to match parent slides
+ var notes = GetElementsWithClassName('div','notes');
+ for (var i = 0; i < notes.length; i++) {
+ var note = notes[i];
+ var id = 'note' + note.parentNode.id.substring(5);
+ note.setAttribute('id',id);
+ }
+ resetElapsedSlide();
+ resetRemainingTime();
+ window.setInterval('updateElaspedTime()', 1000);
+}
+
+function createNotesWindow() { // creates a window for our notes
+ if (!s5NotesWindow || s5NotesWindow.closed) { // Create the window if it doesn't exist
+ s5NotesWindowLoaded = false;
+ // Note: Safari has a tendency to ignore window options preferring to default to the settings of the parent window, grr.
+ s5NotesWindow = window.open(s5Path+'ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0');
+ }
+ if (s5NotesWindowLoaded) { // Load the current note if the Note HTML has loaded
+ loadNote();
+ } else { // Keep trying...
+ window.setTimeout('createNotesWindow()', 50);
+ }
+}
+
+function loadNote() {
+// Loads a note into the note window
+ var notes = nextNotes = '<em class="disclaimer">There are no notes for this slide.</em>';
+ if (document.getElementById('note' + snum)) {
+ notes = document.getElementById('note' + snum).innerHTML;
+ }
+ if (document.getElementById('note' + (snum + 1))) {
+ nextNotes = document.getElementById('note' + (snum + 1)).innerHTML;
+ }
+
+ var jl = document.getElementById('jumplist');
+ var slideTitle = jl.options[jl.selectedIndex].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex) ? ' (' + jl.selectedIndex + '/' + (smax - 1) + ')' : '');
+ if (incrementals[snum].length > 0) {
+ slideTitle += ' <small>[' + incpos + '/' + incrementals[snum].length + ']</small>';
+ }
+ if (jl.selectedIndex < smax - 1) {
+ var nextTitle = jl.options[jl.selectedIndex + 1].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex + 1) ? ' (' + (jl.selectedIndex + 1) + '/' + (smax - 1) + ')' : '');
+ } else {
+ var nextTitle = '[end of slide show]';
+ }
+
+ if (s5NotesWindow && !s5NotesWindow.closed && s5NotesWindow.document) {
+ s5NotesWindow.document.getElementById('slide').innerHTML = slideTitle;
+ s5NotesWindow.document.getElementById('notes').innerHTML = notes;
+ s5NotesWindow.document.getElementById('next').innerHTML = nextTitle;
+ s5NotesWindow.document.getElementById('nextnotes').innerHTML = nextNotes;
+ }
+ resetElapsedSlide();
+}
+
+function minimizeTimer(id) {
+ var obj = s5NotesWindow.document.getElementById(id);
+ if (hasClass(obj,'collapsed')) {
+ removeClass(obj,'collapsed');
+ } else {
+ addClass(obj,'collapsed');
+ }
+}
+
+function resetElapsedTime() {
+ presentationStart = new Date();
+ slideStart = new Date();
+ updateElaspedTime();
+}
+
+function resetElapsedSlide() {
+ if (snum != previousSlide) {
+ slideStart = new Date();
+ previousSlide = snum;
+ updateElaspedTime();
+ }
+}
+
+function updateElaspedTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var now = new Date();
+ var ep = s5NotesWindow.document.getElementById('elapsed-presentation');
+ var es = s5NotesWindow.document.getElementById('elapsed-slide');
+ ep.innerHTML = formatTime(now.valueOf() - presentationStart.valueOf());
+ es.innerHTML = formatTime(now.valueOf() - slideStart.valueOf());
+}
+
+function resetRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var startField = s5NotesWindow.document.getElementById('startFrom');
+ startFrom = readTime(startField.value);
+ countdown.remaining = startFrom * 60000; // convert to msecs
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var timeLeft = formatTime(countdown.remaining);
+ tl.innerHTML = timeLeft;
+}
+
+function updateRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var now = new Date();
+ if (countdown.state == 'run') {
+ countdown.remaining = countdown.end - now;
+ }
+ tl.style.color = '';
+ tl.style.backgroundColor = '';
+ if (countdown.remaining >= 0) {
+ var timeLeft = formatTime(countdown.remaining);
+ removeClass(tl,'overtime');
+ if (countdown.remaining < 300000) {
+ tl.style.color = 'rgb(' + (255-Math.round(countdown.remaining/2000)) + ',0,0)';
+ tl.style.backgroundColor = 'rgb(255,255,' + (Math.round(countdown.remaining/2000)) + ')';
+ }
+ } else {
+ var timeLeft = '-' + formatTime(-countdown.remaining);
+ addClass(tl,'overtime');
+ }
+ tl.innerHTML = timeLeft;
+}
+
+function toggleRemainingTime() {
+ if (countdown.state == 'pause') countdown.state = 'run'; else countdown.state = 'pause';
+ if (countdown.state == 'pause') {
+ window.clearInterval(countdown.timer);
+ }
+ if (countdown.state == 'run') {
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ countdown.timer = window.setInterval('updateRemainingTime()', 1000);
+ }
+}
+
+function alterRemainingTime(amt) {
+ var change = amt * 60000; // convert to msecs
+ countdown.end += change;
+ countdown.remaining += change;
+ updateRemainingTime();
+}
+
+function formatTime(msecs) {
+ var time = new Date(msecs);
+
+ var hrs = time.getUTCHours() + ((time.getUTCDate() -1) * 24); // I doubt anyone will spend more than 24 hours on a presentation or single slide but just in case...
+ hrs = (hrs < 10) ? '0'+hrs : hrs;
+ if (hrs == 'NaN' || isNaN(hrs)) hrs = '--';
+
+ var min = time.getUTCMinutes();
+ min = (min < 10) ? '0'+min : min;
+ if (min == 'NaN' || isNaN(min)) min = '--';
+
+ var sec = time.getUTCSeconds();
+ sec = (sec < 10) ? '0'+sec : sec;
+ if (sec == 'NaN' || isNaN(sec)) sec = '--';
+
+ return hrs + ':' + min + ':' + sec;
+}
+
+function readTime(val) {
+ var sregex = /:/;
+ var matches = sregex.exec(val);
+ if (matches == null) {
+ return val;
+ } else {
+ var times = val.split(':');
+ var hours = parseInt(times[0]);
+ var mins = parseInt(times[1]);
+ var total = (hours * 60) + mins;
+ return total;
+ }
+}
+// notes extension
+
+// startup process
+function createSlideShow() {
+ defaultCheck();
+ if(!isIE) createDetector(); // (degrade IE) scalable images extension
+ if(opac!=0 || isIE) { // &&!isIE (degrade IE)
+ tranSitions = false;
+ fadeModus = false;
+ }
+ if(tranSitions && document.getElementById && document.createElement){
+ createProgress();
+ var nop=document.getElementById('StartupControl');
+ nop.onload = dumpProgress;
+ }else {
+ startup();
+ showAll();
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+ }
+}
+
+function defaultCheck() {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'defaultView') {
+ defaultView = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'controlVis') {
+ controlVis = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'tranSitions') {
+ tranSitions = (allMetas[i].content == "true") ? true : false;
+ fadeModus = (tranSitions == true) ? true : false;
+ }
+ if (allMetas[i].name == 'fadeDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ fadeDuration = Math.max(200,Math.min(tmp,2000));
+ }
+ if (allMetas[i].name == 'incrDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ incrDuration = Math.max(50,Math.min(tmp,500));
+ }
+ if (allMetas[i].name == 'autoMatic') {
+ autoMatic = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playLoop') {
+ playLoop = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playDelay') {
+ var tmp = parseInt(allMetas[i].content);
+ playDelay = Math.max(5,Math.min(tmp,90))*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ }
+ if (allMetas[i].name == 'audioSupport') {
+ audioSupport = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'audioVolume') {
+ var tmp = parseInt(allMetas[i].content);
+ audioVolume = Math.max(0,Math.min(tmp,100));
+ }
+ if (allMetas[i].name == 'audioError') {
+ audioError = (allMetas[i].content == "true") ? true : false;
+ }
+ }
+}
+
+function createProgress() {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "StartupProgress";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=100)";
+ }else {
+ pg.style.opacity = 1.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/progress.gif)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+
+ var im = document.createElement('img');
+ im.id = "StartupControl";
+ im.src = s5Path+"ui/graphic_support/blank.gif?" + new Date().valueOf();
+ document.getElementsByTagName("body")[0].appendChild(im);
+}
+
+function startup() {
+ createControls(); // hallvord
+ slideLabel();
+ incrementals = createIncrementals();
+ noteLabel(); // [SI:060104] must follow slideLabel()
+ loadNote();
+ fixLinks();
+ externalLinks();
+ fontScale();
+ if (!isOp) {
+ if(isIE) {
+ document.getElementById('lst').style.backgroundImage = 'none';
+ document.getElementById('del').style.backgroundImage = 'none';
+ }else {
+ document.getElementById('audio').style.backgroundImage = 'none';
+ }
+ notOperaFix();
+ }else if(isOp) {
+ var obj = document.getElementById('exit');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('exit').style.opacity = 0.5;
+ obj = document.getElementById('toggle');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('toggle').style.opacity = 0.5;
+ document.getElementById('jumplist').style.visibility = 'hidden';
+ document.getElementById('list').style.visibility = 'hidden';
+ document.getElementById('lst').style.opacity = 0.5;
+ obj = document.getElementById('audio');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('audio').style.opacity = 0.5;
+ document.getElementById('volumelist').style.visibility = 'hidden';
+ document.getElementById('volume').style.visibility = 'hidden';
+ document.getElementById('vol').style.opacity = 0.5;
+ document.getElementById('delaylist').style.visibility = 'hidden';
+ document.getElementById('delay').style.visibility = 'hidden';
+ document.getElementById('del').style.opacity = 0.5;
+ }
+ slideJump();
+ if (defaultView == 'outline') toggle();
+ document.onkeyup = keys;
+ document.onkeypress = trap;
+ document.onclick = clicker;
+}
+
+function preloadImgages() {
+ var temp = '';
+ var objects = document.getElementsByTagName('img');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].src != '') {
+ temp = new Image();
+ temp.src = objects[i].src;
+ }
+ }
+}
+
+function showAll() {
+ var obj1 = GetElementsWithClassName('div','presentation')[0];
+ if(!obj1) var obj1 = GetElementsWithClassName('ol','presentation')[0];
+ var obj2 = GetElementsWithClassName('div','layout')[0];
+ if(!obj1){}else {obj1.style.display = 'block'};
+ if(!obj2){}else {obj2.style.display = 'block'};
+}
+
+function dumpProgress() {
+ document.body.removeChild(document.getElementById('StartupControl'));
+ startup();
+ preloadImgages();
+ showAll();
+ createSoundManagerScript();
+ shiftOpacity('StartupProgress',1000);
+ window.setTimeout("removeProgress()",1000);
+}
+
+function removeProgress() {
+ document.body.removeChild(document.getElementById('StartupProgress'));
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+}
+function panelSetup() {
+ if(playPause) {
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ if(playLoop) {
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ if(audioSupport && !isIE && !isOp) {
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ }
+ if(fadeModus && !isIE) {
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ if(autoMatic) {
+ var obj = document.getElementById('auto'); changeClass(obj,'ison');
+ startPlay();
+ }
+ if(audioVolume && !isIE && !isOp) {
+ var idx = 0;
+ if(audioVolume >= 95 && audioVolume <= 100) {idx = 0;}
+ else if(audioVolume >= 85 && audioVolume < 95) {idx = 1;}
+ else if(audioVolume >= 75 && audioVolume < 85) {idx = 2;}
+ else if(audioVolume >= 65 && audioVolume < 75) {idx = 3;}
+ else if(audioVolume >= 55 && audioVolume < 65) {idx = 4;}
+ else if(audioVolume >= 45 && audioVolume < 55) {idx = 5;}
+ else if(audioVolume >= 35 && audioVolume < 45) {idx = 6;}
+ else if(audioVolume >= 25 && audioVolume < 35) {idx = 7;}
+ else if(audioVolume >= 15 && audioVolume < 25) {idx = 8;}
+ else if(audioVolume >= 5 && audioVolume < 15) {idx = 9;}
+ else {idx = 10;}
+ document.getElementById('volumelist').selectedIndex = idx;
+ }
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+}
+// startup process
+
+// shutdown process
+function byby() {
+ stopPlay();
+ if(tranSitions && fadeModus && s5mode && !isOp) {
+ fadeoutSound(curSoundID,true); // audio support
+ var pg = document.createElement('div');
+ pg.id = "GoodBy";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=0)";
+ }else {
+ pg.style.opacity = 0.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/finish.gif)";
+ document.getElementsByTagName("body")[0].appendChild(pg);
+ shiftOpacity('GoodBy',1000);
+ window.setTimeout("history.back()",1000);
+ }else {
+ stopSound(curSoundID);
+ history.back();
+ }
+}
+// shutdown process
+
+// scalable images extension
+function createDetector() {
+ var em = document.createElement('div');
+ em.id='EMSizeControl'; em.style.position="absolute"; em.style.left="-999px";
+ em.style.width="1em"; em.style.height="1em"; em.style.opacity=0.0;
+ document.getElementsByTagName("body")[0].appendChild(em);
+ var nop=document.getElementById('EMSizeControl');
+ if(!nop||findPosX(nop)!=-999) {}else {
+ opac=document.getElementById('EMSizeControl').style.opacity;
+ empx=document.getElementById('EMSizeControl').offsetHeight;
+ document.body.removeChild(document.getElementById('EMSizeControl'));
+ var objects = document.getElementsByTagName('img');
+ var j = 0; var i = 0; var k = 0; var d; var obj;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ images[j] = objects[i];
+ ++j;
+ }
+ }
+ var objects = document.getElementsByTagName('canvas'); j = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ canvas[objects[i].id] = objects[i];
+ if(j==0) {
+ if(objects[i].getContext) {
+ canvasSupport = true;
+ }
+ ++j;
+ }
+ }
+ }
+ if(canvasSupport!=true) {
+ for (d in canvas) {
+ try {
+ canvas[d].setAttribute("width",1);
+ canvas[d].setAttribute("height",1);
+ } catch (e) {
+ }
+ }
+ }
+ var objects = document.getElementsByTagName('table');
+ j = 0; k = 0; l = 0; var w; var h; var tmp; var cnt;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^piechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ piecharts[j] = objects[i];
+ em = piecharts[j].getAttribute("summary");
+ if(em != "") em = "," + em;
+ piecharts[j].setAttribute("summary", w + "," + h + em);
+ ++j;
+ }
+ }
+ }
+ if(objects[i].className.match(/^barchart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ barcharts[k] = objects[i];
+ em = barcharts[k].getAttribute("summary");
+ if(em != "") em = "," + em;
+ barcharts[k].setAttribute("summary", w + "," + h + em);
+ ++k;
+ }
+ }
+ }
+ if(objects[i].className.match(/^linechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ linecharts[l] = objects[i];
+ em = linecharts[l].getAttribute("summary");
+ if(em != "") em = "," + em;
+ linecharts[l].setAttribute("summary", w + "," + h + em);
+ ++l;
+ }
+ }
+ }
+ }
+ objects = document.getElementsByTagName('object'); j = 0; i = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ medias[j] = objects[i]; ++j;
+ if(!isIE) {
+ if(objects[i].getAttributeNode("classid")) objects[i].removeAttributeNode(objects[i].getAttributeNode("classid"));
+ if(objects[i].getAttributeNode("codebase")) objects[i].removeAttributeNode(objects[i].getAttributeNode("codebase"));
+ }
+ }
+ }
+ }
+}
+function extendImgSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < images.length; i++) {
+ w=images[i].getAttribute("width",0);
+ h=images[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ images[i].style.width=Math.floor(w*q)+"px";
+ images[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+
+function extendCanSizes(f) {
+ if(empx>0 && canvasSupport) {
+ var q = (f/empx); var w = 0; var h = 0; var tmp = ""; var cnt; var obj;
+ for(var i=0; i < piecharts.length; i++) {
+ if(piecharts[i].getAttribute("summary")) {
+ tmp = piecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = piecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < barcharts.length; i++) {
+ if(barcharts[i].getAttribute("summary")) {
+ tmp = barcharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = barcharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < linecharts.length; i++) {
+ if(linecharts[i].getAttribute("summary")) {
+ tmp = linecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = linecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ }
+}
+function extendObjSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < medias.length; i++) {
+ w=medias[i].getAttribute("width",0);
+ h=medias[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ medias[i].style.width=Math.floor(w*q)+"px";
+ medias[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+function findPosX(obj) {
+ var posLeft = 0;
+ while (obj.offsetParent) {
+ posLeft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ return posLeft;
+}
+function findPosY(obj) {
+ var posTop = 0;
+ while (obj.offsetParent) {
+ posTop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ return posTop;
+}
+// scalable images extension
+
+// canvas chart extension
+function deg2rad(degrees) {
+ return Math.PI *degrees/180;
+}
+function rad2deg(radians) {
+ return 180.0 *radians/Math.PI;
+}
+function circle_point_x(radians, diameter) {
+ var x = Math.cos(radians)*(diameter/2);
+ return x;
+}
+function circle_point_y(radians, diameter) {
+ var y = Math.sin(radians)*(diameter/2);
+ return y;
+}
+function roundTo(val,dig) {
+ var num = val;
+ if (val > 8191 && val < 10485) {
+ val = val-5000;
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ num = num+5000;
+ } else {
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ }
+ return num;
+}
+function searchColor(value) {
+ for (var dat in colorNames) {
+ if(dat==value) return colorNames[dat];
+ }
+ return false;
+}
+function scanColor(value) {
+ if(value.match(/^#[0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var val1 = value.substr(1,1).toLowerCase();
+ var val2 = value.substr(2,1).toLowerCase();
+ var val3 = value.substr(3,1).toLowerCase();
+ value = '#' + val1 + val1 + val2 + val2 + val3 + val3;
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var tmp = searchColor(value.toLowerCase());
+ if(!tmp) {}else{value = tmp;}
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ value = '#000000';
+ }
+ return value.toLowerCase();
+}
+function hex2rgb(val,trans) {
+ if(val.length==7) {
+ var tp1 = Math.max(0,Math.min(parseInt(val.substr(1,2),16),255));
+ var tp2 = Math.max(0,Math.min(parseInt(val.substr(3,2),16),255));
+ var tp3 = Math.max(0,Math.min(parseInt(val.substr(5,2),16),255));
+ return 'rgba(' + tp1 + ',' + tp2 + ',' + tp3 + ',' + trans + ')';
+ }
+}
+function trim(str) {
+ return (str.replace(/\s+$/,"").replace(/^\s+/,""));
+}
+function roundedRect(ctx,x,y,width,height,radius){
+ ctx.beginPath();
+ ctx.moveTo(x,y+radius);
+ ctx.lineTo(x,y+height-radius);
+ ctx.quadraticCurveTo(x,y+height,x+radius,y+height);
+ ctx.lineTo(x+width-radius,y+height);
+ ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius);
+ ctx.lineTo(x+width,y+radius);
+ ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
+ ctx.lineTo(x+radius,y);
+ ctx.quadraticCurveTo(x,y,x,y+radius);
+ ctx.closePath();
+}
+function drawString(ctx, text, fc, tx, ty) {
+ var xp = 0; var c = "";
+ ctx.beginPath();
+ for (var i = 0; i < text.length; i++) {
+ c = text[i];
+ ctx.drawImage(font, signs[c].sx, signs[c].sy, signs[c].sw, signs[c].sh, tx+xp, ty, signs[c].sw*fc, signs[c].sh*fc);
+ xp += (signs[c].sw*fc);
+ }
+ ctx.closePath();
+}
+function strokeString(ctx, txt, col, fh, tx, ty) {
+ var fw = fh*0.666666; var lw = fh*0.125;
+ var ls = lw/2; var cr = lw; var xp = 0;
+ ctx.lineCap = "round"; ctx.lineJoin = "round"
+ ctx.lineWidth = lw; ctx.strokeStyle = col;
+ for (var i = 0; i < txt.length; i++) {
+ strokeSymbol(ctx, txt[i], ls, tx+xp, ty, fw, fh);
+ xp += (txt[i]!="."?fw+cr:(fw/2)+cr);
+ }
+}
+function strokeSymbol(ctx, symbol, fc, cx, cy, cw, ch) {
+ ctx.beginPath();
+ switch (symbol) {
+ case "0":
+ ctx.moveTo(cx+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+(cw/2),(cw/2)-fc,deg2rad(180),0, false);
+ ctx.arc(cx+(cw/2),(cy+ch)-(cw/2),(cw/2)-fc,0,deg2rad(180), false);
+ ctx.closePath();
+ break;
+ case "1":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.moveTo(cx+(cw*0.666666),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.666666),cy+fc);
+ ctx.lineTo(cx+(cw*0.25),cy+(ch*0.25));
+ break;
+ case "2":
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.8));
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+fc,cy+ch-fc);
+ ctx.arc(cx+(cw/2),cy+(cw*0.425),(cw*0.425)-fc,deg2rad(45),deg2rad(-180), true);
+ break;
+ case "3":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-90),deg2rad(180), false);
+ break;
+ case "4":
+ ctx.moveTo(cx+(cw*0.75),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.5),cy+ch-fc);
+ break;
+ case "5":
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-80),deg2rad(180), false);
+ break;
+ case "6":
+ ctx.moveTo(cx+fc,cy+ch-(cw*0.5)-fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-180),deg2rad(180), false);
+ ctx.bezierCurveTo(cx+fc,cy+fc,cx+fc,cy+fc,cx+(cw*0.9)-fc,cy+fc);
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ break;
+ case "7":
+ ctx.moveTo(cx+(cw*0.5),cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.25)-fc);
+ break;
+ case "8":
+ ctx.moveTo(cx+(cw*0.92)-fc,cy+(cw*0.59));
+ ctx.arc(cx+(cw/2),cy+(cw*0.45),(cw*0.45)-fc,deg2rad(25),deg2rad(-205), true);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-135),deg2rad(-45), true);
+ ctx.closePath();
+ ctx.moveTo(cx+(cw*0.79),cy+(ch*0.47));
+ ctx.lineTo(cx+(cw*0.21),cy+(ch*0.47));
+ break;
+ case "9":
+ ctx.moveTo(cx+cw-fc,cy+(cw*0.5));
+ ctx.arc(cx+(cw/2),cy+(cw*0.5),(cw*0.5)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.bezierCurveTo(cx+cw-fc,cy+ch-fc,cx+cw-fc,cy+ch-fc,cx+(cw*0.1)+fc,cy+ch-fc);
+ break;
+ case "%":
+ ctx.moveTo(cx+fc,cy+(ch*0.75));
+ ctx.lineTo(cx+cw-fc,cy+(ch*0.25));
+ ctx.moveTo(cx+(cw*0.505),cy+(cw*0.3));
+ ctx.arc(cx+(cw*0.3),cy+(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.moveTo(cx+(cw*0.905),cy+ch-(cw*0.3));
+ ctx.arc(cx+(cw*0.7),cy+ch-(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ break;
+ case ".":
+ ctx.moveTo(cx+(cw*0.25),cy+ch-fc-fc);
+ ctx.arc(cx+(cw*0.25),cy+ch-fc-fc,fc,deg2rad(0),deg2rad(360), false);
+ ctx.closePath();
+ break;
+ default:
+ break;
+ }
+ ctx.stroke();
+}
+function drawBar(ctx,x,y,width,height,color,value,textdiv){
+ var rw = width/2; var rh = rw/2;
+ height = Math.max(height,rw);
+ var dh = Math.max(height-(2*rh),0.1); var S2L;
+ var xx = rw/8; var yy = rh/4;
+ var yo = rh/2; y = y - yy;
+ if(canvas_noshadow <= 0 && canvas_noshade <= 0) {
+ ctx.save();
+ S2L = ctx.createRadialGradient(x+rw+rh,y+height-rw+yy+rh,0,x+rw,y+height-rw+yy,rw);
+ S2L.addColorStop(0, 'rgba(0,0,0,0.5)');
+ S2L.addColorStop(0.7, 'rgba(0,0,0,0.25)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = S2L;
+ ctx.scale(1,0.5);
+ ctx.translate(xx,y+height+yy);
+ if(isOp){
+ ctx.fillRect(x,y+yy+height-width,width,width);
+ }else {
+ ctx.arc(x+rw,y+yy+height-width,width,0,deg2rad(360), false);
+ ctx.fill();
+ }
+ ctx.restore();
+ }else if(canvas_noshadow <= 0 && canvas_noshade >= 1) {
+ ctx.fillStyle = 'rgba(0,0,0,0.2)';
+ ctx.fillRect(x+yo,y+rh+yo+yo,width,dh);
+ }
+
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x,y+(height/2),x+width,y+(height/2));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.75)');
+ S2L.addColorStop(0.2, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.3, 'rgba(0,0,0,0)');
+ S2L.addColorStop(0.5, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.35)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.1)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.strokeStyle = S2L;
+ ctx.stroke();
+ }else {
+ ctx.fillStyle = color;
+ ctx.fillRect(x,y+rh+yo,width,dh);
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var bw = width; var bh = bw/4;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ var c; var w;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,x+(width/2)-(bw/2),y,bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext <= 0) {
+ strokeString(ctx, value + "%","rgba(48,48,48,1)", th, x+(width/2)-(w/2), y+((bh-th)/2));
+ }else {
+ drawString(ctx, value + "%", tf, x+(width/2)-(w/2), y+((bh-th)/2.2));
+ }
+ }else {
+ var bh = bw/3; var th = roundTo(bh*0.75,0);
+ roundedRect(ctx,x,y,bw,bh,bh/4);
+ ctx.fill();
+ var obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = x + "px";
+ obj.style.top = y+((bh-th)/2.2) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+
+ }
+}
+function drawLine(ctx,x,y,width,height,dist,array,factor,color,fill){
+ if(fill <= 0){
+ var style = hex2rgb(color,0.5);
+ ctx.lineJoin = "miter";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height);
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.lineTo(x+width,y+height);
+ ctx.lineTo(x,y+height);
+ ctx.closePath();
+ ctx.fillStyle = style;
+ ctx.fill();
+ }
+ ctx.lineJoin = "round";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height-(array[0]*factor));
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.strokeStyle = color;
+ ctx.stroke();
+}
+function setDataURL(cid) {
+ if(cid.toDataURL) {
+ var obj = document.getElementById(cid.id + "_link");
+ if(obj) {
+ obj.setAttribute("title", "To Data URL");
+ obj.setAttribute("target", "_blank");
+ obj.setAttribute("href", cid.toDataURL());
+ }
+ }
+}
+function get_input(dataobj,canvasobj,linechart) {
+ var table = document.getElementById(dataobj);
+ var canvas = document.getElementById(canvasobj);
+ var row; var clm; var cnt = 0; var val = 0; var nme = ""; var col = "";
+ if(canvas.getContext) {
+ canvas_width = parseInt(canvas.style.width);
+ canvas_height = parseInt(canvas.style.height);
+ if(canvas_width >= 16 && canvas_height >= 16) {
+ var tmp = table.getAttribute("summary");
+ canvas_noshade = 0; canvas_noshadow = 0;
+ canvas_notext = 0; canvas_imgtext = 0;
+ canvas_htmltext = 0; canvas_nofill = 0;
+ if(tmp.search(/noshadow/) != -1) canvas_noshadow = 1;
+ if(tmp.search(/noshade/) != -1) canvas_noshade = 1;
+ if(tmp.search(/nofill/) != -1) canvas_nofill = 1;
+ if(tmp.search(/notext/) != -1) canvas_notext = 1;
+ if(tmp.search(/htmltext/) != -1) canvas_htmltext = 1;
+ if(tmp.search(/imgtext/) != -1) canvas_imgtext = 1;
+ if(table.getAttribute("bgcolor")) {
+ canvas_bgcolor = scanColor(table.getAttribute("bgcolor"));
+ }
+ ChartData = new Array(); colorSlice = new Array();
+ if(table.getElementsByTagName("tr")[0].getElementsByTagName("th")[0]) cnt = 1;
+ for(var r = cnt; r < table.getElementsByTagName("tr").length; r++) {
+ row = table.getElementsByTagName("tr")[r];
+ clm = row.getElementsByTagName("td").length;
+ if(row.getElementsByTagName("td")[0].getAttribute("bgcolor")) {
+ col = scanColor(row.getElementsByTagName("td")[0].getAttribute("bgcolor")); val = 0;
+ nme = trim(row.getElementsByTagName("td")[1].innerHTML.replace(/<[^>]+>/g,""));
+ if(!linechart) {
+ if(clm > 3) {
+ for(var z = 2; z < clm; z++) {
+ val += parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ }else {
+ val = parseFloat(row.getElementsByTagName("td")[2].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ if(!isNaN(val) && val > 0 && nme != '') {
+ colorSlice[r-cnt] = col; ChartData[nme] = Math.abs(val);
+ }else {
+ break;
+ }
+ }else {
+ val = 0; i = 0;
+ if(clm > 3 && nme != '') {
+ ChartData[r-cnt] = new Array();
+ colorSlice[r-cnt] = col;
+ for(var z = 2; z < clm; z++) {
+ val = Math.abs(parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,"")));
+ if(!isNaN(val) && val >= 0) {
+ ChartData[r-cnt][i] = val; i++;
+ }else {
+ ChartData[r-cnt][i] = 0; i++;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }
+ }
+}
+function setPieChart(canvasobj,textobj) {
+ var cd = (Math.min(canvas_width,canvas_height)/110)*100;
+ var cp = cd*0.1; var cr = cd/2;
+ var sr = cr*0.93; var cw = cd+cp; var ch = cw;
+ var cx = (cd/2)+(cp/2); var cy = cx; var ct = 0;
+ for (var data in ChartData) {
+ ct += ChartData[data];
+ }
+ var poc = ct/100;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ }
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,cw,ch);
+ }else {
+ ctx.clearRect(0,0,cw,ch);
+ }
+ if(canvas_noshadow <= 0) {
+ if(!isOp) {
+ ctx.beginPath();
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),cr,cx+(cr*0.1),cy+(cr*0.1),sr*0.9);
+ B2B.addColorStop(0, 'rgba(0,0,0,0)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.arc(cx+(cr*0.1),cy+(cr*0.1),cr,0,deg2rad(360), false);
+ ctx.closePath();
+ ctx.fillStyle = B2B;
+ ctx.fill();
+ }else {
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),0,cx+(cr*0.1),cy+(cr*0.1),cr);
+ B2B.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(0.87, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = B2B;
+ ctx.fillRect(0,0,cw,ch);
+ }
+ }
+ var val = 0; var deg = 0; var idx = 0; var data;
+ for (data in ChartData) {
+ val = ChartData[data]; sdeg = deg;
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ ctx.beginPath();
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr,sdeg,edeg, false);
+ ctx.lineTo(cx,cy);
+ ctx.closePath();
+ ctx.fillStyle = colorSlice[(idx++)];
+ ctx.fill();
+ }
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ var W2T = ctx.createLinearGradient(cp*2,cp*2,cx,cy);
+ W2T.addColorStop(0, 'rgba(255,255,255,0.8)');
+ W2T.addColorStop(1, 'rgba(255,255,255,0)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.fillStyle = W2T;
+ ctx.fill();
+ ctx.beginPath();
+ var T2B = ctx.createLinearGradient(cx,cy,cw-(cp*2),ch-(cp*2));
+ T2B.addColorStop(0, 'rgba(0,0,0,0)');
+ T2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.fillStyle = T2B;
+ ctx.fill();
+ ctx.beginPath();
+ var B2T = ctx.createLinearGradient(cx,cy,cw-(cp*1.9),ch-(cp*1.9));
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.strokeStyle = B2T;
+ ctx.stroke();
+ ctx.beginPath();
+ var T2W = ctx.createLinearGradient(cx,cy,(cp*1.9),(cp*1.9));
+ T2W.addColorStop(0, 'rgba(255,255,255,0)');
+ T2W.addColorStop(1, 'rgba(255,255,255,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.strokeStyle = T2W;
+ ctx.stroke();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var mpos = 0; var per = 0; var gx = 0;
+ var gy = 0; var tx = 0; var ty = 0;
+ var obj = ""; var w = 0; var c = 0;
+ var bw = cr*0.45; var bh = cr*0.125;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext >= 1) {
+ bw = (cr*0.365);
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ for (data in ChartData) {
+ val = ChartData[data];
+ sdeg = deg; mpos = deg+(((val/2)/ct)*deg2rad(360));
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ per = roundTo(val/poc,2);
+ gx = circle_point_x(mpos, cd);
+ gy = circle_point_y(mpos, cd);
+ tx = parseFloat((cx+(2*Math.floor(cx + gx)))/3);
+ ty = (cy+(2*Math.floor(cy + gy)))/3;
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext >= 1) {
+ drawString(ctx, per + "%", tf, tx-(w/2), ty-(th/1.8));
+ }else {
+ strokeString(ctx, per + "%","rgba(48,48,48,1)", th, tx-(w/2), ty-(th/2));
+ }
+ }else {
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = (tx-(bw/2)) + "px";
+ obj.style.top = ty-(th/1.8) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+ }
+ }
+ }
+}
+function setBarChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9; var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05; var ph = canvas_height*0.05;
+ var cm = 0; var ct = 0;
+ for (var data in ChartData) {
+ cm = Math.max(cm,ChartData[data]);
+ ct += ChartData[data];
+ }
+ var hf = ih/cm; var bs = colorSlice.length;
+ var bw = iw/(bs*1.1); var poc = ct/100;
+ var th = roundTo((bw/3)*0.75,0);
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ var obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ var cc = ""; var bh = 0; var idx = 0; var t = 0; per = 0;
+ for (var data in ChartData) {
+ per = roundTo(ChartData[data]/poc,2);
+ bh = ChartData[data]*hf;
+ drawBar(ctx,pw+(t*(bw*1.1)),ph+ih-bh,bw,bh,colorSlice[(idx++)],per,textdiv);
+ t++;
+ }
+ }
+}
+function setLineChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9;
+ var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05;
+ var ph = canvas_height*0.05;
+ var cm = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ cm = Math.max(cm,ChartData[i][j]);
+ }
+ }
+ var hf = (ih*0.95)/cm; var bw = iw;
+ var dw = iw/(ChartData[0].length-1)
+ var dh = ih/(ChartData[0].length-1)
+ var ps = Math.min(pw,ph); lw = ps/4;
+ var B2T;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_noshadow <= 0) {
+ B2T = ctx.createLinearGradient(pw+ps,ph+ih+1,pw+ps+ps,ph+ih+1);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps,ph+ih);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.lineTo(pw+ps+ps,ph+ih);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+ps+ps,ph+ih,pw+ps+ps,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps+ps,ph+ih);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+ps+iw,ph+ih+ps);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.closePath();
+ ctx.fill();
+ var B2T = ctx.createLinearGradient(pw+iw+1,ph+ps,pw+iw+1,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.35)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps);
+ ctx.lineTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+iw,ph+ps+ps,pw+iw+ps,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.35)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+iw+ps,ph+ih+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = lw/2;
+ ctx.strokeStyle = "rgba(255,255,255,0.25)";
+ if(canvas_nofill <= 0) {
+ ctx.fillStyle = "rgba(240,240,240,0.8)";
+ ctx.strokeStyle = "rgba(255,255,255,1)";
+ ctx.fillRect(pw,ph,iw,ih);
+ }
+ for (var i = 0; i < ChartData[0].length-1; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph);
+ ctx.lineTo(pw+(i*dw),ph+ih);
+ ctx.stroke();
+ }
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw,ph+(i*dh));
+ ctx.lineTo(pw+iw,ph+(i*dh));
+ ctx.stroke();
+ }
+ ctx.lineWidth = lw;
+ var cc = ""; var bh = 0; var idx = 0; var t = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ t = Math.max(t,ChartData[i][j]);
+ }
+ bh = t*hf; cc = colorSlice[(idx++)];
+ drawLine(ctx,pw,ph+ih-bh,bw,bh,dw,ChartData[i],hf,cc,canvas_nofill);
+ }
+ ctx.beginPath();
+ ctx.moveTo(pw,ph);
+ ctx.lineTo(pw,ph+ih);
+ ctx.lineTo(pw+iw+(lw/2),ph+ih);
+ ctx.strokeStyle = "rgba(48,48,48,1)";
+ ctx.stroke();
+ ctx.lineWidth = lw/2;
+ B2T = ctx.createLinearGradient(pw,ph+ih,pw,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,1)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.strokeStyle = B2T;
+ for (var i = 0; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph+ih);
+ ctx.lineTo(pw+(i*dw),ph+ih+ps);
+ ctx.stroke();
+ }
+ B2T = ctx.createLinearGradient(pw-ps,ph,pw,ph);
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,1)');
+ ctx.strokeStyle = B2T;
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw-ps,ph+(i*dh));
+ ctx.lineTo(pw,ph+(i*dh));
+ ctx.stroke();
+ }
+ }
+}
+function generateCanvas() {
+ if(canvasSupport) {
+ var canvasID; var tdataID; var textID;
+ var tmp; var dat; var i; var j;
+ for(i=0; i < piecharts.length; i++) {
+ tmp = piecharts[i].id.split("_");
+ tdataID = piecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setPieChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < barcharts.length; i++) {
+ tmp = barcharts[i].id.split("_");
+ tdataID = barcharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setBarChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < linecharts.length; i++) {
+ tmp = linecharts[i].id.split("_");
+ tdataID = linecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID,true);
+ if(colorSlice.length > 0) {
+ if(ChartData.length == colorSlice.length) {
+ setLineChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ }
+}
+// canvas chart extension
+
+// invisible select extension
+function setListPos(opt) {
+ if(!isIE) { //(degrade IE)
+ var ref = document.getElementById('list');
+ var x = findPosX(ref); var y = findPosY(ref);
+ var obj = document.getElementById('jumplist');
+ obj.style.position = 'fixed'; obj.style.left = x + 'px'; obj.style.top = y + 'px';
+ var vol = document.getElementById('volumelist');
+ ref = document.getElementById('volume');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ vol.style.position = 'fixed'; vol.style.left = x + 'px'; vol.style.top = y + 'px';
+ var del = document.getElementById('delaylist');
+ ref = document.getElementById('delay');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ del.style.position = 'fixed'; del.style.left = x + 'px'; del.style.top = y + 'px';
+ var pnl = document.getElementById('navLinks');
+ }
+ if(opt) {
+ if(isIE) {
+ //(degrade IE)
+ //pnl.style.filter = "alpha(opacity=80)";
+ }else {
+ obj.style.opacity = 0.0;
+ vol.style.opacity = 0.0;
+ del.style.opacity = 0.0;
+ pnl.style.opacity = 0.8;
+ }
+ }
+}
+// invisible select extension
+
+// transition extension
+function switchFade() {
+ if(tranSitions && s5mode && fadeModus) {
+ fadeModus = false;
+ playDelay = playDelay-(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'isoff');
+ }else if(tranSitions && s5mode && !fadeModus) {
+ fadeModus = true;
+ playDelay = playDelay+(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ currentSlide();
+}
+function opacity(ids, opacStart, opacEnd, millisec) {
+ var speed = Math.round(millisec / 100);
+ var timer = 0;
+ if(opacStart > opacEnd) {
+ for(var i = opacStart; i >= opacEnd; i--) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ } else if(opacStart < opacEnd) {
+ for(var i = opacStart; i <= opacEnd; i++) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ }
+}
+function changeOpac(opacity, ids) {
+ var obj = document.getElementById(ids);
+ if (isIE) {
+ obj.style.filter = "alpha(opacity=" + opacity + ")";
+ } else {
+ obj.style.opacity = (opacity / 100);
+ }
+}
+function shiftOpacity(ids, millisec) {
+ if(document.getElementById(ids).style.opacity != '') {
+ var currentOpac = document.getElementById(ids).style.opacity * 100;
+ } else {
+ var currentOpac = 0;
+ }
+ if(currentOpac == 0) {
+ opacity(ids, currentOpac, 100, millisec);
+ } else if(currentOpac > 0) {
+ opacity(ids, currentOpac, 0, millisec);
+ }
+}
+// transition extension
+
+// autoplay extension
+function autoPlay() {
+ if (s5mode && autoMatic && !playPause) {
+ if ((snum >= (smax-1)) && playLoop) {
+ goTo(0);
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }else if ((snum >= (smax-1)) && !playLoop) {
+ stopPlay();
+ }else {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ if (incrementals[snum].length >0) {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = parseInt(playDelay/(incrementals[snum].length+1));
+ remainDer = parseInt(playDelay-(incrDelay*incrementals[snum].length));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ } else {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = incrDuration;
+ remainDer = parseInt(playDelay-(incrementals[snum].length*incrDuration));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }
+ }
+}
+function autoPlayIncr() {
+ if (incpos < incrementals[snum].length) {
+ subgo(1);
+ autoRun = setTimeout('autoPlayIncr();',incrDelay);
+ }else {
+ autoRun = setTimeout('nop();',remainDer);
+ }
+}
+function nop() {
+ // no operation dummy
+}
+function togglePlay() {
+ if (autoRun && s5mode) {
+ stopPlay();
+ }else if (!autoRun && s5mode) {
+ startPlay();
+ }
+}
+function stopPlay() {
+ if (autoRun && s5mode) {
+ clearTimeout(autoRun); autoRun = null;
+ autoMatic = false; playPause = false; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'isoff');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ currentSlide();
+ }
+}
+function startPlay() {
+ if (!autoRun && s5mode) {
+ playPause = false; autoMatic = true; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'ison');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ autoRun = setTimeout('autoPlay();',playDelay);
+ currentSlide();
+ }
+}
+function pausePlay() {
+ if (s5mode && autoMatic) {
+ if (playPause) {
+ playPause = false; autoRun = setTimeout('autoPlay();',playDelay);
+ var obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ }else {
+ if (autoRun){
+ clearTimeout(autoRun); autoRun = null; playPause = true;
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+ }
+}
+function switchLoop() {
+ if(s5mode) {
+ if (playLoop) {
+ playLoop = false;
+ var obj = document.getElementById('loop'); changeClass(obj,'isoff');
+ }else {
+ playLoop = true;
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+}
+function setDelay() {
+ var val = document.getElementById('delaylist');
+ if(s5mode) {
+ var delay = Math.max(5,Math.min(parseInt(val.value),300));
+ playDelay = (fadeModus == true) ? ((delay*1000)+(2*fadeDuration)) : (delay*1000);
+ }
+}
+// autoplay extension
+
+// audio extension
+function createSoundManagerScript() {
+ if(typeof soundManager=="undefined") {
+ onerrorSM2();
+ }else {
+ var script=document.createElement('SCRIPT');
+ var tx=document.createTextNode("soundManager.createMovie();");
+ script.appendChild(tx);
+ document.getElementsByTagName("body")[0].appendChild(script);
+ }
+}
+//soundManager.onload = function() {
+function onloadSM2() {
+ if(!isIE) { //(degrade IE)
+ swfUnloaded = false;
+ preloadSounds();
+ }
+}
+//soundManager.onerror = function() {
+function onerrorSM2() {
+ if(typeof soundManager!="undefined") {
+ soundManager.destruct;
+ delete soundManager;
+ }
+ audioSupport = false; swfUnloaded = true;
+ if(audioError && !isIE && !isOp) {
+ var dv = document.createElement('div'); dv.id = "guru";
+ var d2=document.createElement('div'); dv.appendChild(d2);
+ var tx=document.createTextNode('Guru Meditation - SoundManager failed to load/initialize!');
+ d2.appendChild(tx); document.getElementById('slide0').appendChild(dv);
+ }
+}
+function audioSetup() {
+ if(sound[0]) {
+ playSound(0);
+ }else if(sound[bgSoundItem] && !sound[0]) {
+ playSound(bgSoundItem);
+ }
+}
+function fadeoutSound(ids, option) {
+ if(curSoundID >= 0 && !swfUnloaded) {
+ if(isNaN(ids)) {
+ if(ids == "bgSound") {
+ var cnum = parseInt(bgSoundItem);
+ }else {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && ids == sound[i]["id"]) {
+ var cnum = i;
+ break;
+ }
+ }
+ }
+ }else {
+ var cnum = ids;
+ ids = sound[cnum]["id"];
+ }
+ var vol = getMaxVolume(sound[cnum]["volume"]);
+ var millisec = fadeDuration;
+ var speed = Math.round(millisec / vol);
+ var timer = 0;
+ for(var i = vol; i > 0; i--) {
+ setTimeout("fadeout(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ if(option) setTimeout("stopSound('"+ids+"')",millisec);
+ }
+}
+function fadeout(volume, id) {
+ soundManager.setVolume(id,volume);
+}
+function stopSound(ids) {
+ var sid;
+ if(isNaN(ids)) {
+ sid = ids;
+ }else if(sound[ids]) {
+ sid = sound[ids]["id"];
+ }
+ if(sid!='' && curSoundID >= 0) {
+ soundManager.stop(sid);
+ curSoundID = -1;
+ }
+}
+function toggleSounds() {
+ if(audioSupport && !swfUnloaded) {
+ stopAllSounds();
+ }else if (!audioSupport && !swfUnloaded) {
+ allowSounds();
+ }
+}
+function allowSounds() {
+ if(!swfUnloaded) {
+ audioSupport = true;
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ currentSlide();
+ }
+}
+function stopAllSounds() {
+ if(curSoundID >= 0) {
+ stopSound(curSoundID);
+ }else {
+ soundManager.stopAll();
+ curSoundID = -1;
+ }
+ audioSupport = false;
+ var obj = document.getElementById('audio'); changeClass(obj,'isoff');
+ currentSlide();
+}
+function playSound(id) {
+ if(audioSupport && !swfUnloaded) {
+ var url, sid, vol, lps, cnum;
+ if(isNaN(id)) {
+ sid = id;
+ if(sid == "bgSound") {
+ cnum = parseInt(bgSoundItem);
+ }else {
+ cnum = getSoundID(id);
+ }
+ }else {
+ cnum = parseInt(id);
+ if(sound[cnum]) sid = sound[cnum]["id"];
+ }
+ if(sound[cnum] && sound[cnum]["url"]!='' && sid!=''){
+ url = sound[cnum]["url"];
+ vol = (sound[cnum]["volume"]!='')?getMaxVolume(sound[cnum]["volume"]):getMaxVolume(100);
+ lps = (sound[cnum]["loops"])?true:false;
+ if(lps) {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){soundManager.play(sid,{volume:getMaxVolume(sound[cnum]["volume"])});}});
+ }else {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){curSoundID=-1;}});
+ }
+ }
+ }
+}
+function getSoundID(str) {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && str == sound[i]["id"]) {
+ var id = i;
+ break;
+ }
+ }
+ return id;
+}
+function setVolume() {
+ var vol = document.getElementById('volumelist');
+ if(audioSupport && !swfUnloaded) {
+ audioVolume = parseInt(vol.value);
+ if(curSoundID >= 0) {
+ if(sound[curSoundID]) {
+ var sid = sound[curSoundID]["id"];
+ var vid = getMaxVolume(sound[curSoundID]["volume"]);
+ soundManager.setVolume(sid,vid);
+ }
+ }
+ }
+}
+function getMaxVolume(value) {
+ if(audioVolume>0) {var factor = audioVolume/100;}else {var factor = 0;}
+ return Math.max(0,Math.min(parseInt(value*factor),audioVolume));
+}
+function preloadSounds() {
+ var temp = ''; var parm = ''; var t = ''; var cl = '';
+ var objects = document.getElementsByTagName('object');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].type.toLowerCase() == 'audio/mp3' && objects[i].data != '') {
+ objects[i].width = 0; objects[i].height = 0;
+ if(objects[i].parentNode.tagName == 'DIV') {
+ cl = objects[i].parentNode.className.toLowerCase();
+ if(cl == 'presentation' || cl == 'slide') {
+ if(cl == 'presentation') {
+ t = parseInt(bgSoundItem);
+ }else {
+ t = parseInt(objects[i].parentNode.id.slice(5, objects[i].parentNode.id.length));
+ }
+ sound[t] = new Object();
+ if(t < bgSoundItem) {
+ sound[t]["id"] = objects[i].parentNode.id;
+ }else {
+ sound[t]["id"] = "bgSound";
+ }
+ sound[t]["url"] = objects[i].data;
+ sound[t]["volume"] = 100; sound[t]["loops"] = false;
+ if(objects[i].archive != '') {
+ parm = objects[i].archive.toLowerCase().split(',');
+ for (var j=0; j < parm.length; j++) {
+ if(parm[j] == 'loop') sound[t]["loops"] = true;
+ if(parm[j].search(/^volume/) != -1) {
+ var tmp = parm[j].split(':');
+ sound[t]["volume"] = parseInt(tmp[1]);
+ }
+ }
+ }
+ soundManager.createSound(sound[t]["id"],sound[t]["url"]);
+ }
+ }
+ }
+ }
+}
+// audio extension
+
+// help extension
+function createHelpReq() {
+ if(!document.getElementById("HelpReq")) {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "HelpReq";
+ if (pg.addEventListener) {
+ pg.addEventListener("onclick",dumpHelpReq,false);
+ } else if (pg.attachEvent) {
+ pg.attachEvent("onclick",dumpHelpReq);
+ }
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=90)";
+ } else {
+ pg.style.opacity = 0.9;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(64,64,64)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/help.jpg)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+ if(document.getElementById("HelpReq")) {
+ helpmode = true;
+ }
+ }
+}
+function dumpHelpReq() {
+ if(document.getElementById("HelpReq")) {
+ document.body.removeChild(document.getElementById('HelpReq'));
+ helpmode = false;
+ }
+}
+// help extension
+
+//DEBUG
+function ConsoleLog(value) {
+ if(window.console) {
+ window.console.log(value);
+ }
+}
+//DEBUG
+
+document.write('<style type="text/css" media="screen" id="blockStyle">.presentation, .layout {display: none; }</style>');
+
+if(!isIE && !isOp) {
+ document.write('<script type="text/javascript" src="'+s5Path+'ui/audio_support/soundmanager2.js"></script>');
+ if(typeof soundManager!="undefined") {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'audioDebug') {
+ var audioDebug = (allMetas[i].content == "true") ? true : false;
+ soundManager.defaultOptions.debugMode = audioDebug;
+ }
+ }
+ }
+}
+
+window.onload = createSlideShow;
+window.onresize = function(){setTimeout('windowChange()',5);} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/toggle_link.png
new file mode 100644
index 000000000..4588e2514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/toggle_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/toggle_over.png
new file mode 100644
index 000000000..400f613b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/toggle_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/volume_link.png
new file mode 100644
index 000000000..f362acd1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/volume_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/wrap.css
new file mode 100644
index 000000000..a37315552
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/wrap.css
@@ -0,0 +1,410 @@
+/********************************************************************
+Screen and Print Styles for the Wrap Plugin
+********************************************************************/
+
+/* tables in columns and boxes should span the whole width */
+.wrap_column table,
+.wrap_left table, .wrap_right table, .wrap_center table,
+.wrap_box table,
+.wrap_info table, .wrap_important table, .wrap_alert table, .wrap_tip table, .wrap_help table, .wrap_todo table, .wrap_download table {
+ width: 100%;
+}
+/* emulate a headline */
+.wrap_column em strong,
+.wrap_left em strong, .wrap_right em strong, .wrap_center em strong,
+.wrap_box em strong,
+.wrap_info em strong, .wrap_important em strong, .wrap_alert em strong, .wrap_tip em strong, .wrap_help em strong, .wrap_todo em strong, .wrap_download em strong {
+ font-size: 130%;
+ font-weight: bold;
+ font-style: normal;
+ display: block;
+}
+/* emulate a bigger headline with a bottom border */
+.wrap_column em strong em.u,
+.wrap_left em strong em.u, .wrap_right em strong em.u, .wrap_center em strong em.u,
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ font-size: 115%;
+ border-bottom: 1px solid __border__;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+}
+/* different bigger headline for safety notes */
+.wrap_danger em strong em.u, .wrap_warning em strong em.u, .wrap_caution em strong em.u, .wrap_notice em strong em.u, .wrap_safety em strong em.u {
+ font-size: 115%;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+ text-transform: uppercase;
+ border-bottom-width: 0;
+}
+/* change border colour of emulated headlines inside boxes to something more neutral
+ (to match all the different background colours) */
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ border-bottom-color: #999;
+}
+
+
+/* columns
+********************************************************************/
+
+.wrap_left,
+.wrap_column {
+ float: left;
+ margin-right: 1.5em;
+}
+.wrap_right {
+ float: right;
+ margin-left: 1.5em;
+}
+.wrap_center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+/*
+.wrap_column,
+.wrap_left,
+.wrap_right {
+ overflow: hidden;
+}
+*/
+.wrap_container {
+ margin-right: -1.5em;
+}
+
+
+/* alignments
+********************************************************************/
+
+.wrap_leftalign {
+ text-align: left;
+}
+.wrap_centeralign {
+ text-align: center;
+}
+.wrap_rightalign {
+ text-align: right;
+}
+.wrap_justify {
+ text-align: justify;
+}
+
+
+/* box
+********************************************************************/
+
+/* see styles for boxes and notes with icons in style.css */
+
+/*____________ rounded corners ____________*/
+/* (only for modern browsers) */
+
+div.wrap_round {
+ border-radius: 20px;
+ -moz-border-radius: 20px;
+ -webkit-border-radius: 20px;
+ -khtml-border-radius: 20px;
+}
+span.wrap_round {
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -khtml-border-radius: 2px;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_lo {
+ color: __text_neu__;
+ font-size: 85%;
+}
+div.wrap_em {
+ color: #c00;
+ font-weight: bold;
+}
+
+/* see styles for highlighted text in style.css */
+
+
+/* typography
+********************************************************************/
+
+/*____________ fonts ____________*/
+
+div.wrap_sansserif {
+ font-family: Verdana,Tahoma,Geneva,"DejaVu Sans","Bitstream Vera Sans","Liberation Sans", Arial,Helvetica,FreeSans,"Liberation Sans","Nimbus Sans L", sans-serif;
+}
+div.wrap_serif {
+ font-family: Georgia,Garamond,"Palatino Linotype","Book Antiqua",Palatino,Palladio,"URW Palladio L","Liberation Serif",Didot,Gentium,"Bitstream Charter","Century Schoolbook L", "Times New Roman",Times,"Nimbus Roman No9 L","FreeSerif", serif;
+}
+div.wrap_monospace {
+ font-family: Courier,"Courier New",FreeMono,"Nimbus Mono L","Liberation Mono", "Lucida Console",Monaco,"DejaVu Sans Mono","Bitstream Vera Sans Mono", monospace;
+}
+
+/*____________ font size ____________*/
+
+div.wrap_bigger {
+ font-size: 125%;
+}
+div.wrap_muchbigger {
+ font-size: 200%;
+}
+div.wrap_smaller {
+ font-size: 75%;
+}
+
+/*____________ font colours ____________*/
+
+div.wrap_fgred {
+ color: #900;
+}
+div.wrap_fggreen {
+ color: #090;
+}
+div.wrap_fgblue {
+ color: #009;
+}
+div.wrap_fgcyan {
+ color: #099;
+}
+div.wrap_fgviolet {
+ color: #909;
+}
+div.wrap_fgyellow {
+ color: #990;
+}
+div.wrap_fggrey {
+ color: #666;
+}
+div.wrap_fgblack {
+ color: #000;
+}
+
+/* see styles for background colours and white font colour in style.css */
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ indent ____________*/
+
+div.wrap_indent {
+ padding-left: 1.5em;
+}
+
+/*____________ outdent ____________*/
+
+div.wrap_outdent {
+ margin-left: -1.5em;
+}
+
+/*____________ word wrapping in pre ____________*/
+
+divdiv.wrap_prewrap pre {
+ white-space: pre-wrap;
+ word-wrap: break-word;/* for IE < 8 */
+ /* white-space: -moz-pre-wrap; for FF < 3 */
+}
+
+/*____________ spoiler ____________*/
+
+divdiv.wrap_spoiler {
+ margin-bottom: 1.5em;
+}
+/* see rest of spoiler styles in style.css */
+
+/*____________ clear float ____________*/
+
+div.wrap_clear {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ font-size: 1px;
+ visibility: hidden;
+ overflow: hidden;
+}
+
+/*____________ hide ____________*/
+
+div.wrap_hide {
+ display: none;
+}
+
+
+/* STYLE.CSS */
+
+/* box
+********************************************************************/
+
+.wrap_box {
+ background: __background_alt__;
+ color: __text__;
+/*
+ overflow: hidden;
+*/
+}
+div.wrap_box,
+div.wrap_danger, div.wrap_warning, div.wrap_caution, div.wrap_notice, div.wrap_safety {
+ padding: 1em 1em .5em;
+ margin-bottom: 1.5em;
+}
+span.wrap_box,
+span.wrap_danger, span.wrap_warning, span.wrap_caution, span.wrap_notice, span.wrap_safety {
+ padding: 0 .3em;
+}
+
+/*____________ notes with icons ____________*/
+
+/* general styles for all note divs */
+div.wrap_info, div.wrap_important, div.wrap_alert, div.wrap_tip, div.wrap_help, div.wrap_todo, div.wrap_download {
+ padding: 1em 1em .5em 70px;
+ margin-bottom: 1.5em;
+ min-height: 68px;
+ background-position: 10px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html div.wrap_info, * html div.wrap_important, * html div.wrap_alert, * html div.wrap_tip, * html div.wrap_help, * html div.wrap_todo, * html div.wrap_download {
+ height: 68px;
+}
+/* general styles for all note spans */
+span.wrap_info, span.wrap_important, span.wrap_alert, span.wrap_tip, span.wrap_help, span.wrap_todo, span.wrap_download {
+ padding: 0 2px 0 20px;
+ min-height: 20px;
+ background-position: 2px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html span.wrap_info, * html span.wrap_important, * html span.wrap_alert, * html span.wrap_tip, * html span.wrap_help, * html span.wrap_todo, * html span.wrap_download {
+ height: 20px;
+}
+
+/*____________ info ____________*/
+.wrap_info { background-color: #d1d7df; }
+div.wrap_info { background-image: url(../../../wrap/images/note/48/info.png); }
+span.wrap_info { background-image: url(../../../wrap/images/note/16/info.png); }
+
+/*____________ important ____________*/
+.wrap_important { background-color: #ffd39f; }
+div.wrap_important { background-image: url(../../../wrap/images/note/48/important.png); }
+span.wrap_important { background-image: url(../../../wrap/images/note/16/important.png); }
+
+/*____________ alert ____________*/
+.wrap_alert { background-color: #ffbcaf; }
+div.wrap_alert { background-image: url(../../../wrap/images/note/48/alert.png); }
+span.wrap_alert { background-image: url(../../../wrap/images/note/16/alert.png); }
+
+/*____________ tip ____________*/
+.wrap_tip { background-color: #fff79f; }
+div.wrap_tip { background-image: url(../../../wrap/images/note/48/tip.png); }
+span.wrap_tip { background-image: url(../../../wrap/images/note/16/tip.png); }
+
+/*____________ help ____________*/
+.wrap_help { background-color: #dcc2ef; }
+div.wrap_help { background-image: url(../../../wrap/images/note/48/help.png); }
+span.wrap_help { background-image: url(../../../wrap/images/note/16/help.png); }
+
+/*____________ todo ____________*/
+.wrap_todo { background-color: #c2efdd; }
+div.wrap_todo { background-image: url(../../../wrap/images/note/48/todo.png); }
+span.wrap_todo { background-image: url(../../../wrap/images/note/16/todo.png); }
+
+/*____________ download ____________*/
+.wrap_download { background-color: #d6efc2; }
+div.wrap_download { background-image: url(../../../wrap/images/note/48/download.png); }
+span.wrap_download { background-image: url(../../../wrap/images/note/16/download.png); }
+
+
+/*____________ safety notes ____________*/
+
+.wrap_danger {
+ background-color: #c00;
+ color: #fff;
+}
+.wrap_warning {
+ background-color: #f60;
+ color: #000;
+}
+.wrap_caution {
+ background-color: #ff0;
+ color: #000;
+}
+.wrap_notice {
+ background-color: #06f;
+ color: #fff;
+}
+.wrap_safety {
+ background-color: #090;
+ color: #fff;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_hi {
+ background-color: #ff9;
+}
+
+/* typography
+********************************************************************/
+
+/*____________ font colours ____________*/
+
+div.wrap_fgwhite {
+ color: #fff;
+}
+
+/*____________ background colours ____________*/
+
+div.wrap_bgred {
+ background-color: #fcc;
+}
+div.wrap_bggreen {
+ background-color: #cfc;
+}
+div.wrap_bgblue {
+ background-color: #ccf;
+}
+div.wrap_bgcyan {
+ background-color: #9ff;
+}
+div.wrap_bgviolet {
+ background-color: #f9f;
+}
+div.wrap_bgyellow {
+ background-color: #ff9;
+}
+div.wrap_bggrey {
+ background-color: #ccc;
+}
+div.wrap_bgwhite {
+ background-color: #fff;
+}
+div.wrap_bgblack {
+ background-color: #000;
+}
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ spoiler ____________*/
+
+div.wrap_spoiler {
+ background-color: __background__ !important;
+ color: __background__ !important;
+ border: 1px dotted red;
+}
+
+/*____________ only print ____________*/
+
+div.wrap_onlyprint {
+ display: none;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/zero_link.png
new file mode 100644
index 000000000..5610884d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/zero_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/zero_over.png
new file mode 100644
index 000000000..3a14a577e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/zero_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/LEEME.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/LEEME.txt
new file mode 100755
index 000000000..4c601efec
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/LEEME.txt
@@ -0,0 +1,32 @@
+ULTRAVIOLET
+
+Tema para S5, creado originalmente por jEsuSdA 8)
+http://www.jesusda.com
+
+Más temas en: http://www.jesusda.com/projects/presentaciones_s5
+
+
+
+Para customizar este tema modifica el archivo CSS:
+
+s5-ultraviolet/ui/default/pretty.css
+
+
+
+Los archivos gráficos referentes al tema están en la carpeta:
+
+s5-ultraviolet/ui/default/pics
+
+
+Puedes personalizar el favicon copiando el tuyo en la carpeta:
+
+s5-ultraviolet/images/
+
+con el nombre favicon.ico
+
+
+Te recomiendo que pongas todas las imágenes que uses en tu presentación dentro de esa misma carpteta.
+
+Para cualquier sugerencia e idea, por favor, contacta conmigo a través de mi web. ;)
+
+--jEsuSdA 8) \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/audio_link.png
new file mode 100644
index 000000000..daa740c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/audio_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/audio_on.png
new file mode 100644
index 000000000..cd590aae9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/audio_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/audio_over.png
new file mode 100644
index 000000000..cf537a008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/audio_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/auto_link.png
new file mode 100644
index 000000000..1c2ca4817
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/auto_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/auto_on.png
new file mode 100644
index 000000000..4b0c923b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/auto_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/auto_over.png
new file mode 100644
index 000000000..dbea88975
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/auto_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/backgrnd.png
new file mode 100644
index 000000000..0e48413d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/backgrnd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/blank.gif
new file mode 100755
index 000000000..75b945d25
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/blank.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/delay_link.png
new file mode 100644
index 000000000..c4d99cd57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/delay_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/exit_link.png
new file mode 100644
index 000000000..1bfd38790
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/exit_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/exit_over.png
new file mode 100644
index 000000000..0fdd1c605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/exit_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/fade_link.png
new file mode 100644
index 000000000..482e4d53e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/fade_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/fade_on.png
new file mode 100644
index 000000000..e12561fb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/fade_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/fade_over.png
new file mode 100644
index 000000000..fb8943c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/fade_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/footer.jpg
new file mode 100644
index 000000000..49370dbba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/footer.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/framing.css
new file mode 100755
index 000000000..14d8509e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/framing.css
@@ -0,0 +1,23 @@
+/* The following styles size, place, and layer the slide components.
+ Edit these if you want to change the overall slide layout.
+ The commented lines can be uncommented (and modified, if necessary)
+ to help you with the rearrangement process. */
+
+/* target = 1024x768 */
+
+div#header, div#footer, .slide {width: 100%; top: 0; left: 0;}
+div#header {top: 0; height: 3em; z-index: 1;}
+div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;}
+.slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;}
+div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;}
+div#controls form {position: absolute; bottom: 0; right: 0; width: 100%;
+ margin: 0;}
+#currentSlide {position: absolute; width: 10%; left: 45%; bottom: 1em; z-index: 10;}
+html>body #currentSlide {position: fixed;}
+
+/*
+div#header {background: #FCC;}
+div#footer {background: #CCF;}
+div#controls {background: #BBD;}
+div#currentSlide {background: #FFC;}
+*/
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/header.png
new file mode 100644
index 000000000..929dabba1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/iepngfix.htc
new file mode 100755
index 000000000..bba2db756
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/iepngfix.htc
@@ -0,0 +1,42 @@
+<public:component>
+<public:attach event="onpropertychange" onevent="doFix()" />
+
+<script>
+
+// IE5.5+ PNG Alpha Fix v1.0 by Angus Turnbull http://www.twinhelix.com
+// Free usage permitted as long as this notice remains intact.
+
+// This must be a path to a blank image. That's all the configuration you need here.
+var blankImg = 'ui/default/blank.gif';
+
+var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
+
+function filt(s, m) {
+ if (filters[f]) {
+ filters[f].enabled = s ? true : false;
+ if (s) with (filters[f]) { src = s; sizingMethod = m }
+ } else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")';
+}
+
+function doFix() {
+ if ((parseFloat(navigator.userAgent.match(/MSIE (\S+)/)[1]) < 5.5) ||
+ (event && !/(background|src)/.test(event.propertyName))) return;
+
+ if (tagName == 'IMG') {
+ if ((/\.png$/i).test(src)) {
+ filt(src, 'image'); // was 'scale'
+ src = blankImg;
+ } else if (src.indexOf(blankImg) < 0) filt();
+ } else if (style.backgroundImage) {
+ if (style.backgroundImage.match(/^url[("']+(.*\.png)[)"']+$/i)) {
+ var s = RegExp.$1;
+ style.backgroundImage = '';
+ filt(s, 'crop');
+ } else filt();
+ }
+}
+
+doFix();
+
+</script>
+</public:component> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/images/favicon.ico b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/images/favicon.ico
new file mode 100755
index 000000000..61ab58a16
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/images/favicon.ico
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/index.html
new file mode 100755
index 000000000..ffa2037aa
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/index.html
@@ -0,0 +1,100 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es-es" >
+
+
+<head>
+
+ <title>[Título de la presentación aquí]</title>
+ <!-- metadata -->
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta http-equiv="content-language" content="es" />
+
+ <!--titulo y datos de publicación de la presentación-->
+
+ <meta name="description" content="[Título de la presentación aquí]" />
+
+ <meta name="keywords" content="[keywords aquí]" />
+ <meta name="presdate" content="[Aquí la fecha de publicación en formato aaaammdd]" />
+
+ <meta name="author" lang="es" content="[Nombre del autor de la presentación aquí]" />
+ <meta name="company" content="[Organización del autor de la presentación aquí]" />
+
+ <link rel="shortcut icon" href="images/favicon.ico" />
+
+ <meta name="generator" content="S5" />
+ <meta name="progid" content="quanta+" />
+ <meta name="version" content="S5 · jEsuSdA · 1.1" />
+ <!--Versión adaptada del estandard S5 1.1 por jEsuSdA-->
+
+ <meta name="robots" content="all" />
+
+ <!-- configuration parameters -->
+ <meta name="defaultView" content="slideshow" />
+ <meta name="controlVis" content="hidden" />
+
+ <!-- style sheet links -->
+ <link rel="stylesheet" href="ui/default/slides.css" type="text/css" media="projection" id="slideProj" />
+ <link rel="stylesheet" href="ui/default/outline.css" type="text/css" media="screen" id="outlineStyle" />
+ <link rel="stylesheet" href="ui/default/print.css" type="text/css" media="print" id="slidePrint" />
+ <link rel="stylesheet" href="ui/default/opera.css" type="text/css" media="projection" id="operaFix" />
+
+ <!-- S5 JS -->
+ <script src="ui/default/slides.js" type="text/javascript"></script>
+
+</head>
+
+<body>
+
+ <div class="layout">
+ <div id="controls"><!-- NO EDITAR --></div>
+ <div id="currentSlide"><!-- NO EDITAR --></div>
+
+ <div id="header">
+ <div id="logo"><!-- DO NOT EDIT --></div>
+ </div>
+
+ </div>
+
+ <div id="footer">
+ <h1>[Lugar/Fecha de la presentación aquí]</h1>
+ <h2>[Título de la presentación aquí]</h2>
+ </div>
+
+
+
+
+<div class="presentation">
+
+ <div class="slide">
+ <h1>[Título de la presentación aquí]</h1>
+ <h3>[Nombre del ponente aquí]</h3>
+ <h4>[Datos extra aquí]</h4>
+ </div>
+
+
+ <div class="slide">
+ <h1>[Título de la diapositiva]</h1>
+
+ <ul>
+ <li>[Punto uno]</li>
+ <li>[Punto dos]</li>
+ <li>[Punto tres]</li>
+ <li>[Punto cuatro]</li>
+ <li>[Punto cinco]</li>
+ </ul>
+
+ <div class="handout">
+
+ [Añade aquí cualquier nota o información que desees mostrar en la versión impresa, pero no en la versión en pantalla]
+
+ </div>
+
+ </div>
+ <!--fin slide-->
+
+</div>
+
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/last_link.png
new file mode 100644
index 000000000..4f158d35d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/last_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/last_over.png
new file mode 100644
index 000000000..a7b629995
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/last_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/list_link.png
new file mode 100644
index 000000000..7e299bb50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/list_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/loop_link.png
new file mode 100644
index 000000000..41e12cb15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/loop_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/loop_on.png
new file mode 100644
index 000000000..2ffcacae1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/loop_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/loop_over.png
new file mode 100644
index 000000000..9fe420153
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/loop_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/next_link.png
new file mode 100644
index 000000000..2b9f44c4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/next_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/next_over.png
new file mode 100644
index 000000000..25788124d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/next_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/notes_link.png
new file mode 100644
index 000000000..bb4a8ae37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/notes_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/notes_over.png
new file mode 100644
index 000000000..c6bfe69fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/notes_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/opera.css
new file mode 100755
index 000000000..9e9d2a3c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/opera.css
@@ -0,0 +1,7 @@
+/* DO NOT CHANGE THESE unless you really want to break Opera Show */
+.slide {
+ visibility: visible !important;
+ position: static !important;
+ page-break-before: always;
+}
+#slide0 {page-break-before: avoid;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/outline.css
new file mode 100755
index 000000000..62db519ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/outline.css
@@ -0,0 +1,15 @@
+/* don't change this unless you want the layout stuff to show up in the outline view! */
+
+.layout div, #footer *, #controlForm * {display: none;}
+#footer, #controls, #controlForm, #navLinks, #toggle {
+ display: block; visibility: visible; margin: 0; padding: 0;}
+#toggle {float: right; padding: 0.5em;}
+html>body #toggle {position: fixed; top: 0; right: 0;}
+
+/* making the outline look pretty-ish */
+
+#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
+#slide0 h1 {padding-top: 1.5em;}
+.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em;
+ border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
+#toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pause_link.png
new file mode 100644
index 000000000..2561cb4a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pause_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pause_on.png
new file mode 100644
index 000000000..2fc9c4a4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pause_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pause_over.png
new file mode 100644
index 000000000..7a7c80ddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pause_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/background-foot.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/background-foot.png
new file mode 100755
index 000000000..a1de38829
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/background-foot.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/background-head.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/background-head.png
new file mode 100755
index 000000000..d64801d93
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/background-head.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/background-main.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/background-main.png
new file mode 100755
index 000000000..7a5ce5971
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/background-main.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/dot.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/dot.png
new file mode 100755
index 000000000..4f466baaf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/dot.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/dot2.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/dot2.png
new file mode 100755
index 000000000..77c1eb9bc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/dot2.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/h1icon.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/h1icon.png
new file mode 100755
index 000000000..ff68fc4f5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/h1icon.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/link.png
new file mode 100755
index 000000000..c51f5d675
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/logo.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/logo.png
new file mode 100755
index 000000000..0f5e534d5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/logo.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/mail.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/mail.png
new file mode 100755
index 000000000..09f67dbd9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/mail.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pretty.css
new file mode 100755
index 000000000..ac95cf929
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pretty.css
@@ -0,0 +1,543 @@
+/* Following are the presentation styles -- edit away! */
+
+body
+{
+ background: #FFF url(pics/background-main.png) top left no-repeat;
+ color: #000; font-size: 2em;
+ font-family: Trebuchet MS, Arial, Helvetica, sans-serif;
+/* font-family: Arial, Helvetica, sans-serif; */
+
+}
+
+:link, :visited
+{
+ text-decoration: none;
+ color: #00C;
+}
+
+
+
+h1, h2, h3, h4
+{
+ font-size: 100%;
+ margin: 0;
+ padding: 0;
+ font-weight: inherit;
+}
+
+h1 abbr
+{
+ font-variant: small-caps;
+}
+
+ul, pre
+{
+ margin: 0;
+ line-height: 1em;
+}
+
+html, body
+{
+ margin: 0;
+ padding: 0;
+}
+
+blockquote, q
+{
+ font-style: italic;
+}
+
+blockquote
+{
+ padding: 0 2em 0.5em;
+ margin: 0 1.5em 0.5em;
+ text-align: center;
+ font-size: 1em;
+}
+
+blockquote p
+{
+ margin: 0;
+}
+
+blockquote i
+{
+ font-style: normal;
+}
+
+blockquote b
+{
+ display: block;
+ margin-top: 0.5em;
+ font-weight: normal;
+ font-size: smaller;
+ font-style: normal;
+}
+
+blockquote b i
+{
+ font-style: italic;
+}
+
+kbd
+{
+ font-weight: bold;
+ font-size: 1em;
+}
+
+sup
+{
+ font-size: smaller;
+ line-height: 1px;
+}
+
+
+ul.urls
+{
+ list-style: none;
+ display: inline;
+ margin: 0;
+}
+
+.urls li
+{
+ display: inline;
+ margin: 0;
+}
+
+.notes
+{
+ display: none;
+}
+
+.external
+{
+/* border-bottom: 1px dashed #0404cd !important; */
+ border-bottom: 1px dashed #0404cd;
+
+ background:url(pics/link.png) right bottom no-repeat;
+ padding-right:0.5em;
+}
+
+html>body .external
+{
+ border-bottom: none;
+}
+
+.external:after
+{
+
+/* content: " \274F"; */
+ font-size: smaller;
+ color: #8f89c0;
+}
+
+.mail
+{
+ background:url(pics/mail.png) right bottom no-repeat;
+ padding-right:0.8em;
+
+}
+
+.incremental, .incremental * , .incremental *:after
+{
+ color: #fff;
+ visibility: visible;
+ list-style: none !important;
+}
+
+img.incremental
+{
+ visibility: hidden;
+}
+
+.slide .current
+{
+ color: #fff;
+/* visibility: hidden; */
+ /*jesusda añadido */
+}
+
+
+/* ============== */
+/* === SLIDES === */
+/* ============== */
+
+.slide code
+{
+ padding: 2px 0.25em;
+ font-weight: bold;
+ color: #533;
+}
+
+.slide code.bad, code del
+{
+ color: red;
+}
+
+.slide code.old
+{
+ color: silver;
+}
+
+.slide pre
+{
+ padding: 0;
+ margin: 0.25em 0 0.5em 0.5em;
+ color: #533;
+ font-size: 90%;
+}
+
+.slide pre code
+{
+ display: block;
+}
+
+.slide ul
+{
+ margin-left: 5%;
+ margin-right: 7%;
+ margin-top:1em;
+ list-style: disc;
+}
+
+.slide li
+{
+ margin-top: 0.75em;
+ margin-right: 0;
+ list-style-image:url(pics/dot.png);
+}
+
+.slide ul ul
+{
+ line-height: 1.5;
+}
+
+.slide ul ul li
+{
+ margin: .2em;
+ font-size: 85%;
+/* list-style: square; */
+ list-style-image:url(pics/dot2.png);
+
+}
+
+.slide img.leader
+{
+ display: block;
+ margin: 0 auto;
+}
+
+
+/* ========================= */
+/* === HEADER AND FOOTER === */
+/* ========================= */
+
+div#logo
+{
+ position:absolute;
+ top:0%;
+ right:0%;
+ background:url(pics/logo.png) 50% 50% no-repeat;
+ height:250%;
+ width:250px;
+}
+
+div#header, div#footer
+{
+ background: #a80231;
+ color: #FFF;
+}
+
+
+div#header
+{
+ background:#5c3566 url(pics/background-head.png) bottom left repeat-x;
+ line-height: 1px;
+}
+
+div#footer
+{
+ background:#5c3566 url(pics/background-foot.png) top left repeat-x;
+ font-size: 0.5em;
+ font-weight: bold;
+ padding: 1em 0;
+}
+
+
+
+
+
+#footer h1, #footer h2
+{
+ display: block;
+ padding: 0 1em;
+}
+
+#footer h2
+{
+ font-style: italic;
+}
+
+
+
+/* ============== */
+/* === CLASES === */
+/* ============== */
+
+div.long
+{
+ font-size: 0.75em;
+}
+
+.slide h1
+{
+ position: absolute;
+ top: 0.7em;
+ left: 87px;
+ z-index: 1;
+ margin: 0;
+ padding: 0.3em 0 0 50px;
+ white-space: nowrap;
+ font-weight: bold;
+ font-size: 150%/1em;
+
+ text-transform: capitalize;
+ color: #fff;
+
+ background: url(pics/h1icon.png) left bottom no-repeat transparent;
+
+
+}
+
+.slide h2
+{
+ font-size: 130%;
+ color:#5b3566;
+}
+
+
+.slide h3
+{
+ font-size: 130%;
+}
+
+/* ================ */
+/* === CONTROLS === */
+/* ================ */
+
+#currentSlide
+{
+ text-align: center;
+ font-size: 0.6em;
+ font-weight:bold;
+ color: #fff;
+
+}
+
+#slide0
+{
+ padding-top: 3.5em;
+ font-size: 90%;
+}
+
+#slide0 h1
+{
+ position: static;
+ margin: 1em 0 0;
+ padding: 0;
+ /*font: bold 2em Helvetica, sans-serif;*/
+ font-weight: bold;
+ font-size:2em;
+ white-space: normal;
+ color: #000;
+ background: transparent;
+}
+
+#slide0 h2
+{
+ font-weight: bold;
+ font-style: italic;
+ font-size: 1em;
+ margin: 0.25em;
+}
+
+#slide0 h3
+{
+ margin-top: 1.5em;
+ font-size: 1.5em;
+}
+
+#slide0 h4
+{
+ margin-top: 0;
+ font-size: 1em;
+}
+
+/* ================ */
+/* === JESUSDA === */
+/* ================ */
+
+.first-pic
+{
+
+ float:right;
+ margin-top:-2em;
+}
+
+/* ================ */
+
+.align-center
+{
+ text-align:center;
+}
+/* ================ */
+
+.float-left , .left-column
+{
+ float:left !important;
+ width:49% !important;
+}
+
+.float-right , .right-column
+{
+ float:right !important;
+ width:49% !important;
+}
+/* ================ */
+.fullscreen
+{
+ z-index:1000 !important;
+ position:fixed !important;
+ top:0;
+ left:0;
+ width:100% !important;
+ height:100% !important;
+
+ background: #fff url(pics/background-main.png) top left no-repeat;
+
+ text-align:center;
+ margin-left:-1.65em;
+
+}
+
+.fullscreen h1
+{
+ display:none;
+}
+
+.rotulo
+{
+ font-size:800%;
+ text-align:center;
+ margin-top:-0.05em;
+
+}
+
+.align-center img
+{
+ margin:auto;
+ text-align:center;
+}
+
+/* ================ */
+
+
+div#controls {position: absolute; left: 0; bottom: 0; width: 100%; text-align: center; font: bold 1em Verdana, Arial, Helvetica, sans-serif;}
+html>body div#controls {background: transparent; position: fixed; padding: 0; top: auto; text-align: center;}
+#controls #sheet {display: none;}
+#controls #controlForm {height: 32px; width: 100%; text-align: center; vertical-align: middle;}
+#controls #navLinks {border-top: 1px solid #999; overflow: hidden; padding: 0; margin: 0; height: 32px; width: 100%; background-color: #808080; text-align: center; vertical-align: middle; white-space: nowrap;}
+#controls #navLinks ul {margin: 0 auto; padding: 0; height: 32px; width: 500px; white-space: nowrap; text-align: center;}
+#controls #navLinks ul li {list-style: none; display: inline; margin: 0; padding: 0; float: left; height: 32px; width: 32px; text-align: center; background-color: transparent;}
+#controls #navLinks ul li.vr {list-style: none; display: inline; margin: 0px 2px; padding: 0; float: left; height: 32px; width: 1px; text-align: center; background-color: #606060;}
+#controls #navLinks ul li a {margin: 0; padding: 0; float: left; height: 32px; width: 32px; background-color: transparent;}
+
+#controls #navLinks ul li#exit {background: url(exit_link.png) no-repeat top left;}
+#controls #navLinks ul li#exit a:hover {background: url(exit_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#toggle {background: url(toggle_link.png) no-repeat top left;}
+#controls #navLinks ul li#toggle a:hover {background: url(toggle_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#show-notes {background: url(notes_link.png) no-repeat top left;}
+#controls #navLinks ul li#show-notes a:hover {background: url(notes_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#zero {background: url(zero_link.png) no-repeat top left;}
+#controls #navLinks ul li#zero a:hover {background: url(zero_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#prev {background: url(prev_link.png) no-repeat top left;}
+#controls #navLinks ul li#prev a:hover {background: url(prev_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#next {background: url(next_link.png) no-repeat top left;}
+#controls #navLinks ul li#next a:hover {background: url(next_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#last {background: url(last_link.png) no-repeat top left;}
+#controls #navLinks ul li#last a:hover {background: url(last_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#lst {background: url(list_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#fade a.isoff {background: url(fade_link.png) no-repeat top left;}
+#controls #navLinks ul li#fade a.ison {background: url(fade_on.png) no-repeat top right;}
+#controls #navLinks ul li#fade a:hover {background: url(fade_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#audio {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.isoff {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.ison {background: url(audio_on.png) no-repeat top right;}
+#controls #navLinks ul li#audio a:hover {background: url(audio_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#vol {background: url(volume_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#auto a.isoff {background: url(auto_link.png) no-repeat top left;}
+#controls #navLinks ul li#auto a.ison {background: url(auto_on.png) no-repeat top right;}
+#controls #navLinks ul li#auto a:hover {background: url(auto_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#pause a.isoff {background: url(pause_link.png) no-repeat top left;}
+#controls #navLinks ul li#pause a.ison {background: url(pause_on.png) no-repeat top right;}
+#controls #navLinks ul li#pause a:hover {background: url(pause_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#loop a.isoff {background: url(loop_link.png) no-repeat top left;}
+#controls #navLinks ul li#loop a.ison {background: url(loop_on.png) no-repeat top right;}
+#controls #navLinks ul li#loop a:hover {background: url(loop_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#del {background: url(delay_link.png) no-repeat top left;}
+
+#jumplist, #volumelist, #delaylist {padding: 0; margin: 0; width: 32px; height: 32px; cursor: n-resize;}
+
+#guru {position: absolute; visibility: visible; left: 0px; top: 0px; padding: 4px; width: 99%; height: auto; text-align: center; background-color: black; z-index: 10;}
+#guru div {border: solid 3px red; padding: 4px; font-family: monospace; font-size: 60%; width: auto; height: auto; color: red; text-align: center;}
+
+/*
+#currentSlide {white-space: nowrap; text-align: center; margin-bottom: -0.5em; font-size: 0.5em; background-color: transparent; color: #999;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 0; padding: 0; font: bold 2em Verdana, Arial, Helvetica, sans-serif; font-variant: small-caps; text-shadow: 0.1em 0.1em 0.1em #666; white-space: normal; color: #222; background-color: transparent;}
+#slide0 h2 {font: bold italic 1em Arial, Helvetica, sans-serif; margin: 0.25em;}
+#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+*/
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.external {border-bottom: 1px dotted gray;}
+html>body .external {border-bottom: none;}
+.external:after {content: " \274F"; font-size: smaller; color: #999;}
+
+.incremental, .incremental *, .incremental *:after {color: #ccc; visibility: visible;}
+img.incremental, canvas.incremental {visibility: hidden;}
+.slide .current {color: #B02;}
+
+/* diagnostics
+li:after {content: " [" attr(class) "]"; color: #F88;}
+*/
+
+table.piechart, table.barchart, table.linechart { border-spacing: 0.3em 0.15em; }
+table.piechart tr th, table.barchart tr th, table.linechart tr th { white-space: nowrap; }
+table.piechart tr td, table.barchart tr td, table.linechart tr td { vertical-align: top; white-space: nowrap; }
+table.piechart tr td.col, table.barchart tr td.col, table.linechart tr td.col { border-bottom: 1px solid #555; border-right: 1px solid #555; }
+table.fs90 tr td, table.fs90 tr th, div.fs90, pre.fs90, p.fs90 ,ul.fs90 {font-size: 0.9em; }
+table.fs75 tr td, table.fs75 tr th, div.fs75, pre.fs75, p.fs75 ,ul.fs75 {font-size: 0.75em; }
+table.fs66 tr td, table.fs66 tr th, div.fs66, pre.fs66, p.fs66 ,ul.fs66 {font-size: 0.66em; }
+table.fs50 tr td, table.fs50 tr th, div.fs50, pre.fs50, p.fs50 ,ul.fs50 {font-size: 0.5em; }
+
+#soundmanager-debug {position:fixed; top:0px; right:0px; width:30em; height:20em; overflow:auto; border:1px solid red; padding:1em; margin:2em; font-family:"sans serif"; font-size: 12px;color: black; background-color:#f6f6f6; z-index: 100;}
+#soundmanager-debug code {font-size: 11px;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/prev_link.png
new file mode 100644
index 000000000..c31d21350
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/prev_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/prev_over.png
new file mode 100644
index 000000000..6fef4fa52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/prev_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/print.css
new file mode 100755
index 000000000..e7a71d145
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/print.css
@@ -0,0 +1 @@
+/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul {page-break-inside: avoid; visibility: visible !important;} h1 {page-break-after: avoid;} body {font-size: 12pt; background: white;} * {color: black;} #slide0 h1 {font-size: 200%; border: none; margin: 0.5em 0 0.25em;} #slide0 h3 {margin: 0; padding: 0;} #slide0 h4 {margin: 0 0 0.5em; padding: 0;} #slide0 {margin-bottom: 3em;} h1 {border-top: 2pt solid gray; border-bottom: 1px dotted silver;} .extra {background: transparent !important;} div.extra, pre.extra, .example {font-size: 10pt; color: #333;} ul.extra a {font-weight: bold;} p.example {display: none;} #header {display: none;} #footer h1 {margin: 0; border-bottom: 1px solid; color: gray; font-style: italic;} #footer h2, #controls {display: none;} /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .layout, .layout * {display: none !important;} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/s5-core.css
new file mode 100755
index 000000000..86444e041
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/s5-core.css
@@ -0,0 +1,9 @@
+/* Do not edit or override these styles! The system will likely break if you do. */
+
+div#header, div#footer, div#controls, .slide {position: absolute;}
+html>body div#header, html>body div#footer,
+ html>body div#controls, html>body .slide {position: fixed;}
+.handout {display: none;}
+.layout {display: block;}
+.slide, .hideme, .incremental {visibility: hidden;}
+#slide0 {visibility: visible;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/slides.css
new file mode 100755
index 000000000..0786d7dbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/slides.css
@@ -0,0 +1,3 @@
+@import url(s5-core.css); /* required to make the slide show run at all */
+@import url(framing.css); /* sets basic placement and size of slide components */
+@import url(pretty.css); /* stuff that makes the slides look better than blah */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/slides.js
new file mode 100644
index 000000000..510a04c0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/slides.js
@@ -0,0 +1,2812 @@
+// S5 1.3beta7 (18-Apr-2007) advanced version by C. Effenberger
+// Please see http://s5.netzgesta.de/ for more information
+// based on S5 v1.2a1 slides.js -- released into the Public Domain
+// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
+// about all the wonderful and talented contributors to this code!
+// audio extension: soundmanager2 is NOT Public Domain
+// Please see http://www.schillmania.com/projects/soundmanager2/ for information
+
+var undef;
+var slideCSS = '';
+var snum = 0;
+var smax = 1;
+var incpos = 0;
+var number = undef;
+var firstTime = 1;
+var s5mode = true;
+var helpmode = false;
+var defaultView = 'slideshow'; //outline
+var controlVis = 'visible';
+var s5Path = 'lib/plugins/s5reloaded/';
+
+// scalable images extension
+var empx = 0;
+var images = new Array();
+var canvas = new Array();
+var medias = new Array();
+var piecharts = new Array();
+var barcharts = new Array();
+var linecharts = new Array();
+// scalable images extension
+
+// transition extension
+var tranSitions = false;
+var fadeModus = false;
+var fadeDuration = 500;
+var incrDuration = 250;
+var opac = 1;
+var cid = '';
+var nid = '';
+var tid = '';
+var jl = '';
+// transition extension
+
+// autoplay extension
+var autoMatic = false;
+var playLoop = false;
+var playPause = false;
+var autoRun = false;
+var playDelay = 5000;
+var remainDer = 0;
+var incrDelay = 0;
+// autoplay extension
+
+// audio extension
+var sound = new Array();
+var audioSupport = false;
+var audioVolume = 100;
+var audioError = false;
+var swfUnloaded = true;
+var bgSoundItem = 9999;
+var curSoundID = -1;
+// audio extension
+
+// panel extension
+var imgWidth = 32;
+var imgHeight = 32;
+// panel extension
+
+// canvas chart extension
+var canvasSupport = false;
+var ChartData = new Array();
+var colorSlice = new Array();
+var font = document.createElement("img");
+font.setAttribute("src", s5Path+"ui/graphic_support/numeric.png");
+signs = {
+ '0': {sx: 0, sy: 0, sw: 48, sh: 64},
+ '1': {sx: 48, sy: 0, sw: 48, sh: 64},
+ '2': {sx: 96, sy: 0, sw: 48, sh: 64},
+ '3': {sx: 144, sy: 0, sw: 48, sh: 64},
+ '4': {sx: 192, sy: 0, sw: 48, sh: 64},
+ '5': {sx: 240, sy: 0, sw: 48, sh: 64},
+ '6': {sx: 288, sy: 0, sw: 48, sh: 64},
+ '7': {sx: 336, sy: 0, sw: 48, sh: 64},
+ '8': {sx: 384, sy: 0, sw: 48, sh: 64},
+ '9': {sx: 432, sy: 0, sw: 48, sh: 64},
+ '%': {sx: 480, sy: 0, sw: 48, sh: 64},
+ '.': {sx: 528, sy: 0, sw: 24, sh: 64}
+};
+var colorNames= new Array();
+colorNames["black"]="#000000"; colorNames["maroon"]="#800000";
+colorNames["green"]="#008000"; colorNames["olive"]="#808000";
+colorNames["navy"]="#000080"; colorNames["purple"]="#800080";
+colorNames["teal"]="#008080"; colorNames["gray"]="#808080";
+colorNames["silver"]="#C0C0C0"; colorNames["red"]="#FF0000";
+colorNames["lime"]="#00FF00"; colorNames["yellow"]="#FFFF00";
+colorNames["blue"]="#0000FF"; colorNames["fuchsia"]="#FF00FF";
+colorNames["aqua"]="#00FFFF"; colorNames["white"]="#FFFFFF";
+colorNames["aliceblue"]="#F0F8FF"; colorNames["antiquewhite"]="#FAEBD7";
+colorNames["aquamarine"]="#7FFFD4"; colorNames["azure"]="#F0FFFF";
+colorNames["beige"]="#F5F5DC"; colorNames["blueviolet"]="#8A2BE2";
+colorNames["brown"]="#A52A2A"; colorNames["burlywood"]="#DEB887";
+colorNames["cadetblue"]="#5F9EA0"; colorNames["chartreuse"]="#7FFF00";
+colorNames["chocolate"]="#D2691E"; colorNames["coral"]="#FF7F50";
+colorNames["cornflowerblue"]="#6495ED"; colorNames["cornsilk"]="#FFF8DC";
+colorNames["crimson"]="#DC143C"; colorNames["darkblue"]="#00008B";
+colorNames["darkcyan"]="#008B8B"; colorNames["darkgoldenrod"]="#B8860B";
+colorNames["darkgray"]="#A9A9A9"; colorNames["darkgreen"]="#006400";
+colorNames["darkkhaki"]="#BDB76B"; colorNames["darkmagenta"]="#8B008B";
+colorNames["darkolivegreen"]="#556B2F"; colorNames["darkorange"]="#FF8C00";
+colorNames["darkorchid"]="#9932CC"; colorNames["darkred"]="#8B0000";
+colorNames["darksalmon"]="#E9967A"; colorNames["darkseagreen"]="#8FBC8F";
+colorNames["darkslateblue"]="#483D8B"; colorNames["darkslategray"]="#2F4F4F";
+colorNames["darkturquoise"]="#00CED1"; colorNames["darkviolet"]="#9400D3";
+colorNames["deeppink"]="#FF1493"; colorNames["deepskyblue"]="#00BFFF";
+colorNames["dimgray"]="#696969"; colorNames["dodgerblue"]="#1E90FF";
+colorNames["firebrick"]="#B22222"; colorNames["floralwhite"]="#FFFAF0";
+colorNames["forestgreen"]="#228B22"; colorNames["gainsboro"]="#DCDCDC";
+colorNames["ghostwhite"]="#F8F8FF"; colorNames["gold"]="#FFD700";
+colorNames["goldenrod"]="#DAA520"; colorNames["greenyellow"]="#ADFF2F";
+colorNames["honeydew"]="#F0FFF0"; colorNames["hotpink"]="#FF69B4";
+colorNames["indianred"]="#CD5C5C"; colorNames["indigo"]="#4B0082";
+colorNames["ivory"]="#FFFFF0"; colorNames["khaki"]="#F0E68C";
+colorNames["lavender"]="#E6E6FA"; colorNames["lavenderblush"]="#FFF0F5";
+colorNames["lawngreen"]="#7CFC00"; colorNames["lemonchiffon"]="#FFFACD";
+colorNames["lightblue"]="#ADD8E6"; colorNames["lightcoral"]="#F08080";
+colorNames["lightcyan"]="#E0FFFF"; colorNames["lightgoldenrodyellow"]="#FAFAD2";
+colorNames["lightgreen"]="#90EE90"; colorNames["lightgrey"]="#D3D3D3";
+colorNames["lightpink"]="#FFB6C1"; colorNames["lightsalmon"]="#FFA07A";
+colorNames["lightseagreen"]="#20B2AA"; colorNames["lightskyblue"]="#87CEFA";
+colorNames["lightslategray"]="#778899"; colorNames["lightsteelblue"]="#B0C4DE";
+colorNames["lightyellow"]="#FFFFE0"; colorNames["limegreen"]="#32CD32";
+colorNames["linen"]="#FAF0E6"; colorNames["mediumaquamarine"]="#66CDAA";
+colorNames["mediumblue"]="#0000CD"; colorNames["mediumorchid"]="#BA55D3";
+colorNames["ediumpurple"]="#9370D"; colorNames["mediumseagreen"]="#3CB371";
+colorNames["mediumslateblue"]="#7B68EE"; colorNames["mediumspringgreen"]="#00FA9A";
+colorNames["mediumturquoise"]="#48D1CC"; colorNames["mediumvioletred"]="#C71585";
+colorNames["midnightblue"]="#191970"; colorNames["mintcream"]="#F5FFFA";
+colorNames["mistyrose"]="#FFE4E1"; colorNames["moccasin"]="#FFE4B5";
+colorNames["navajowhite"]="#FFDEAD"; colorNames["oldlace"]="#FDF5E6";
+colorNames["olivedrab"]="#6B8E23"; colorNames["orange"]="#FFA500";
+colorNames["orangered"]="#FF4500"; colorNames["orchid"]="#DA70D6";
+colorNames["palegoldenrod"]="#EEE8AA"; colorNames["palegreen"]="#98FB98";
+colorNames["paleturquoise"]="#AFEEEE"; colorNames["palevioletred"]="#DB7093";
+colorNames["papayawhip"]="#FFEFD5"; colorNames["peachpuff"]="#FFDAB9";
+colorNames["peru"]="#CD853F"; colorNames["pink"]="#FFC0CB";
+colorNames["plum"]="#DDA0DD"; colorNames["powderblue"]="#B0E0E6";
+colorNames["rosybrown"]="#BC8F8F"; colorNames["royalblue"]="#4169E1";
+colorNames["saddlebrown"]="#8B4513"; colorNames["salmon"]="#FA8072";
+colorNames["sandybrown"]="#F4A460"; colorNames["seagreen"]="#2E8B57";
+colorNames["seashell"]="#FFF5EE"; colorNames["sienna"]="#A0522D";
+colorNames["skyblue"]="#87CEEB"; colorNames["slateblue"]="#6A5ACD";
+colorNames["slategray"]="#708090"; colorNames["snow"]="#FFFAFA";
+colorNames["springgreen"]="#00FF7F"; colorNames["steelblue"]="#4682B4";
+colorNames["tan"]="#D2B48C"; colorNames["thistle"]="#D8BFD8";
+colorNames["tomato"]="#FF6347"; colorNames["turquoise"]="#40E0D0";
+colorNames["violet"]="#EE82EE"; colorNames["wheat"]="#F5DEB3";
+colorNames["whitesmoke"]="#F5F5F5"; colorNames["yellowgreen"]="#9ACD32";
+var canvas_bgcolor = "";
+var canvas_width = 200;
+var canvas_height = 200;
+var canvas_noshade = 0;
+var canvas_nofill = 0;
+var canvas_noshadow = 0;
+var canvas_htmltext = 0;
+var canvas_imgtext = 0;
+var canvas_notext = 0;
+// canvas chart extension
+
+var s5NotesWindow;
+var s5NotesWindowLoaded = false;
+var previousSlide = 0;
+var presentationStart = new Date();
+var slideStart = new Date();
+
+var countdown = {
+ timer: 0,
+ state: 'pause',
+ start: new Date(),
+ end: 0,
+ remaining: 0
+};
+
+var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
+if(isIE) var notIE7 = parseInt(navigator.appVersion) < 7 ? 1 : 0;
+var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
+var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
+var isS2 = navigator.userAgent.indexOf('Safari') >= 2 ? 1 : 0;
+
+function hasClass(object, className) {
+ if (!object.className) return false;
+ return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
+}
+
+function hasValue(object, value) {
+ if (!object) return false;
+ return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
+}
+
+function removeClass(object,className) {
+ if (!object || !hasClass(object,className)) return;
+ object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
+}
+
+function addClass(object,className) {
+ if (!object || hasClass(object, className)) return;
+ if (object.className) {
+ object.className += ' '+className;
+ } else {
+ object.className = className;
+ }
+}
+
+function changeClass(object,className) {
+ if (!object) return;
+ object.firstChild.className = className;
+}
+
+function GetElementsWithClassName(elementName,className) {
+ var allElements = document.getElementsByTagName(elementName);
+ var elemColl = new Array();
+ for (var i = 0; i< allElements.length; i++) {
+ if (hasClass(allElements[i], className)) {
+ elemColl[elemColl.length] = allElements[i];
+ }
+ }
+ return elemColl;
+}
+
+function isParentOrSelf(element, id) {
+ if (element == null || element.nodeName=='BODY') return false;
+ else if (element.id == id) return true;
+ else return isParentOrSelf(element.parentNode, id);
+}
+
+function nodeValue(node) {
+ var result = "";
+ if (node.nodeType == 1) {
+ var children = node.childNodes;
+ for (var i = 0; i < children.length; ++i) {
+ result += nodeValue(children[i]);
+ }
+ }
+ else if (node.nodeType == 3) {
+ result = node.nodeValue;
+ }
+ return(result);
+}
+
+function slideLabel() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var list = document.getElementById('jumplist');
+ smax = slideColl.length;
+ for (var n = 0; n < smax; n++) {
+ var obj = slideColl[n];
+ var did = 'slide' + n.toString();
+ obj.setAttribute('id',did);
+ var otext = '';
+ var menu = obj.firstChild;
+ if (!menu) continue; // to cope with empty slides
+ while (menu && menu.nodeType == 3) {
+ menu = menu.nextSibling;
+ }
+ if (!menu) continue; // to cope with slides with only text nodes
+ var menunodes = menu.childNodes;
+ for (var o = 0; o < menunodes.length; o++) {
+ otext += nodeValue(menunodes[o]);
+ }
+ list.options[list.length] = new Option(n + ' : ' + otext, n);
+ }
+}
+
+function currentSlide() {
+ var cs, at, fd, ss;
+ if (document.getElementById) {
+ cs = document.getElementById('currentSlide');
+ } else {
+ cs = document.currentSlide;
+ }
+ fd = fadeModus?"F":"&ndash;";
+ ss = audioSupport?"S":"&ndash;";
+ at = (autoMatic?(playPause?"||":(playLoop?"&gt;0":"&gt;|")):"&ndash;&ndash;");
+ cs.innerHTML = '<div id="plink" nowrap="nowrap">' +
+ '<span id="csFade">[' + fd + ss + ']<\/span>&nbsp;' +
+ '<span id="csHere"><strong>' + snum + '<\/strong><\/span>' +
+ '<span id="csSep">\/<\/span>' +
+ '<span id="csTotal">' + (smax-1) + '<\/span>&nbsp;' +
+ '<span id="csAuto">[' + at + ']<\/span>' +
+ '<\/div>';
+
+ if (snum == 0) {
+ cs.style.visibility = 'hidden';
+ } else {
+ cs.style.visibility = 'visible';
+ }
+}
+
+function go(step) {
+ if (document.getElementById('slideProj').disabled || step == 0) return;
+ jl = document.getElementById('jumplist');
+ cid = 'slide' + snum;
+ var ce = document.getElementById(cid);
+ if (incrementals[snum].length > 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ removeClass(incrementals[snum][i], 'current');
+ removeClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ if (step != 'j') {
+ snum += step;
+ lmax = smax - 1;
+ if (snum > lmax) snum = lmax;
+ if (snum < 0) snum = 0;
+ }else {
+ snum = parseInt(jl.value);
+ }
+ nid = 'slide' + snum;
+ var ne = document.getElementById(nid);
+ if (!ne) {
+ ne = document.getElementById('slide0');
+ nid = 'slide0';
+ snum = 0;
+ }
+ if (step < 0) {
+ incpos = incrementals[snum].length
+ }else {
+ incpos = 0;
+ }
+ if (incrementals[snum].length > 0 && incpos == 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ if (hasClass(incrementals[snum][i], 'current')) {
+ incpos = i + 1;
+ }else {
+ addClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ }
+ if (incrementals[snum].length > 0 && incpos > 0) {
+ addClass(incrementals[snum][incpos - 1], 'current');
+ }
+ var guru = document.getElementById('guru');
+ if(guru && snum==0) {
+ guru.style.visibility = 'visible';
+ }else if(guru && snum>0) {
+ guru.style.visibility = 'hidden';
+ }
+ if(tranSitions && s5mode && fadeModus) {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {fadeoutSound(curSoundID,true); } // audio support
+ }
+ changeOpac(0,nid);
+ changeOpac(100,cid);
+ ce.style.visibility = 'visible';
+ shiftOpacity(cid,fadeDuration);
+ window.setTimeout("changeSlides()",fadeDuration);
+ }else {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {stopSound(curSoundID); } // audio support
+ }
+ ce.style.visibility = 'hidden';
+ if (isOp) location.hash = nid;
+ ne.style.visibility = 'visible';
+ finishSlides();
+ }
+}
+
+function changeSlides() {
+ if(nid != cid) changeOpac(100,cid);
+ document.getElementById(cid).style.visibility = 'hidden';
+ document.getElementById(nid).style.visibility = 'visible';
+ if (isOp) location.hash = nid;
+ shiftOpacity(nid,fadeDuration);
+ window.setTimeout("finishSlides()",fadeDuration);
+}
+
+function finishSlides() {
+ jl.selectedIndex = snum;
+ currentSlide();
+ loadNote();
+ permaLink();
+ number = undef;
+ if(sound[getSoundID(nid)]) {
+ playSound(nid); // audio support
+ }else if(sound[bgSoundItem] && curSoundID != bgSoundItem) {
+ playSound(bgSoundItem); // audio support
+ }
+}
+
+function goTo(target) {
+ if (target >= smax || target == snum) return;
+ go(target - snum);
+}
+
+function subgo(step) {
+ if (step > 0) {
+ removeClass(incrementals[snum][incpos - 1],'current');
+ removeClass(incrementals[snum][incpos], 'incremental');
+ if(tranSitions && s5mode && fadeModus) {
+ if(!incrementals[snum][incpos].id) {
+ var tmp = new Date(); tid = "inc" + String(tmp.getTime());
+ incrementals[snum][incpos].id = tid;
+ }else {
+ tid = incrementals[snum][incpos].id;
+ }
+ if(typeof(incrementals[snum][incpos].src) != "undefined" || incrementals[snum][incpos].getContext) {
+ changeOpac(0,tid);
+ addClass(incrementals[snum][incpos],'current');
+ shiftOpacity(tid,incrDuration);
+ setTimeout("nextInc()",incrDuration);
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ } else {
+ incpos--;
+ removeClass(incrementals[snum][incpos],'current');
+ addClass(incrementals[snum][incpos], 'incremental');
+ addClass(incrementals[snum][incpos - 1],'current');
+ loadNote();
+ }
+}
+
+function nextInc() {
+ incpos++;
+ loadNote();
+}
+
+function toggle() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ var guru = document.getElementById('guru');
+ if (!slides.disabled) {
+ stopPlay();
+ if(audioSupport && !swfUnloaded) stopAllSounds();
+ slides.disabled = true;
+ outline.disabled = false;
+ s5mode = false;
+ fontSize(1,'em');
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'visible';
+ }
+ if(guru) guru.style.visibility = 'hidden';
+ } else {
+ slides.disabled = false;
+ outline.disabled = true;
+ s5mode = true;
+ fontScale();
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'hidden';
+ }
+ slideColl[snum].style.visibility = 'visible';
+ if(guru && snum==0) guru.style.visibility = 'visible';
+ }
+}
+
+function showHide(action) {
+ var obj = GetElementsWithClassName('*','hideme')[0];
+ switch (action) {
+ case 's':
+ obj.style.visibility = 'visible';
+ break;
+ case 'h':
+ obj.style.visibility = 'hidden';
+ break;
+ case 'k':
+ if (obj.style.visibility != 'visible') {
+ obj.style.visibility = 'visible';
+ } else {
+ obj.style.visibility = 'hidden';
+ }
+ break;
+ }
+}
+
+function keys(key) {
+ if (!key) {
+ key = event;
+ key.which = key.keyCode;
+ }
+ if (helpmode) {
+ dumpHelpReq();
+ return;
+ }
+ if (key.which == 84 && !isOp) {
+ toggle();
+ return;
+ }
+ if (s5mode) {
+ if (autoMatic) {
+ switch (key.which) {
+ case 70: // f/ading on/off
+ switchFade();
+ break;
+ case 83: // s/ound on/off
+ toggleSounds();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 65: // a/utoplay on/off
+ stopPlay();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 80: // p/ause
+ case 32: // spacebar
+ pausePlay();
+ break;
+ }
+ }else {
+ switch (key.which) {
+ case 8: // backspace = HELP
+ createHelpReq();
+ break;
+ case 10: // return
+ case 13: // enter
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ if(number != undef) {
+ goTo(number);
+ break;
+ }
+ case 32: // spacebar
+ case 34: // page down
+ case 39: // rightkey
+ case 40: // downkey
+ if(number != undef) {
+ go(number);
+ } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ break;
+ case 33: // page up
+ case 37: // leftkey
+ case 38: // upkey
+ if(number != undef) {
+ go(-1 * number);
+ } else if (!incrementals[snum] || incpos <= 0) {
+ go(-1);
+ } else {
+ subgo(-1);
+ }
+ break;
+ case 65: // a/utoplay
+ startPlay();
+ break;
+ case 72: // h
+ case 36: // home
+ goTo(0);
+ break;
+ case 69: // e
+ case 35: // end
+ goTo(smax-1);
+ break;
+ case 70: // f/ade transitions on/off
+ switchFade();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 83: // s/ound support on/off
+ toggleSounds();
+ break;
+ case 27: // escape
+ case 81: // q
+ if(!isOp) byby();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 78: // n
+ createNotesWindow();
+ break;
+ }
+ if (key.which < 48 || key.which > 57) {
+ number = undef;
+ } else {
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
+ }
+ }
+ }
+ return false;
+}
+
+function clicker(e) {
+ number = undef;
+ var target;
+ if (window.event) {
+ target = window.event.srcElement;
+ e = window.event;
+ } else {
+ target = e.target;
+ }
+ if (target.href != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
+ if (!helpmode) {
+ if (!e.which || e.which == 1) {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ }
+ } else {
+ dumpHelpReq();
+ }
+}
+
+function findSlide(hash) {
+ var target = null;
+ var slides = GetElementsWithClassName('*','slide');
+ for (var i = 0; i < slides.length; i++) {
+ var targetSlide = slides[i];
+ if ( (targetSlide.name && targetSlide.name == hash)
+ || (targetSlide.id && targetSlide.id == hash) ) {
+ target = targetSlide;
+ break;
+ }
+ }
+ while(target != null && target.nodeName != 'BODY') {
+ if (hasClass(target, 'slide')) {
+ return parseInt(target.id.slice(5));
+ }
+ target = target.parentNode;
+ }
+ return null;
+}
+
+function slideJump() {
+ if (window.location.hash == null) return;
+ var sregex = /^#slide(\d+)$/;
+ var matches = sregex.exec(window.location.hash);
+ var dest = null;
+ if (matches != null) {
+ dest = parseInt(matches[1]);
+ } else {
+ dest = findSlide(window.location.hash.slice(1));
+ }
+ if (dest != null)
+ go(dest - snum);
+}
+
+function fixLinks() {
+ var thisUri = window.location.href;
+ thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
+ var aelements = document.getElementsByTagName('A');
+ for (var i = 0; i < aelements.length; i++) {
+ var a = aelements[i].href;
+ var slideID = a.match('\#slide[0-9]{1,2}');
+ if ((slideID) && (slideID[0].slice(0,1) == '#')) {
+ var dest = findSlide(slideID[0].slice(1));
+ if (dest != null) {
+ if (aelements[i].addEventListener) {
+ aelements[i].addEventListener("click", new Function("e",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "if (e.preventDefault) e.preventDefault();"), true);
+ } else if (aelements[i].attachEvent) {
+ aelements[i].attachEvent("onclick", new Function("",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "event.returnValue = false;"));
+ }
+ }
+ }
+ }
+}
+
+function externalLinks() {
+ if (!document.getElementsByTagName) return;
+ var anchors = document.getElementsByTagName('a');
+ for (var i=0; i<anchors.length; i++) {
+ var anchor = anchors[i];
+ if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
+ anchor.target = '_blank';
+ addClass(anchor,'external');
+ }
+ }
+}
+
+function permaLink() {
+ document.getElementById('plink').href = window.location.pathname + '#slide' + snum;
+}
+
+function createControls() {
+ var controlsDiv = document.getElementById("controls");
+ if (!controlsDiv) return;
+ var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
+ var hideDiv, hideList = '';
+ if (controlVis == 'hidden') {
+ hideDiv = hider;
+ } else {
+ hideList = hider;
+ }
+ if(isOp) {
+ var str = '';
+ }else {
+ var str = '<a accesskey="t" id="sheet" title="toggle CSS" href="javascript:toggle();">&plusmn;<\/a>';
+ }
+ if(isIE) {
+ var tmp = "move around&xA0;until the color&xA0;change to red!";
+ }else if(isS2) {
+ var tmp = "move around\r\nuntil the color\r\nchange to red!";
+ }else {
+ var tmp = "move around until color change to red!";
+ }
+ if(isIE) {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] for keyboard help!"><ul>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst" style="vertical-align: middle; width: 160px;"><select style="cursor: auto; width: 160px; height: auto;" id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del" style="vertical-align: middle; width: 52px;"><select style="cursor: auto; width: 52px; height: auto;" id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul><\/div><\/form>';
+ }else {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] or double click this area for keyboard help!" ondblclick="createHelpReq();"><ul>' +
+ '<li id="exit"><a href="javascript:byby();" accesskey="q" title="exit Show"><\/a><\/li>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li class="vr"><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst"><a id="list" style="cursor:wait;" title="' + tmp + '"><\/a><select id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="fadeLinks" class="vr"><\/li>' +
+ '<li id="fade"><a class="isoff" href="javascript:switchFade();" accesskey="f" title="Transions"><\/a><\/li>' +
+ '<li id="audioLinks" class="vr"><\/li>' +
+ '<li id="audio"><a class="isoff" href="javascript:toggleSounds();" accesskey="s" title="Sounds" ><\/a><\/li>' +
+ '<li id="vol"><a id="volume" style="cursor:wait;" title="' + tmp + '"><\/a><select id="volumelist" title="select Volume" onchange="setVolume();"><option value="100">100<\/option><option value="90">90<\/option><option value="80">80<\/option><option value="70">70<\/option><option value="60">60<\/option><option value="50">50<\/option><option value="40">40<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="10">10<\/option><option value="0">0<\/option><\/select><\/li>' +
+ '<li id="autoLinks" class="vr"><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del"><a id="delay" style="cursor:wait;" title="' + tmp + '"><\/a><select id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul>' +
+ '<a href="http://s5.netzgesta.de" target="_blank" title="S5 Reloaded"><img style="position: absolute; right: 0; bottom: 0;" src="data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAYAAAASYli2AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAYpSURBVHjaYvz//z8DOYCRkZEZRAEx0Ij/f2HiAAHEgqYIpACkkB1J7g8Q/wLRIJ1QNSB5fiDmAOLvQKHPQPoHSB4ggFiQDGMCUnxALAPECkAsBLIdiD8A8SMgfghU8wlqkTgQK1ZVVWldv3792fr16y8D+c9AhgMEECPIy1DDRIDYAojdzMzMWNXV1UG2/v/y5Qvzw4cPP587d24/kH8Gar/uwoULQ+/cufNFXFyciZmZ+UVmZuZKoFmvAQII5kJOIDbi4uKK2Llz53EbG5vP6GGWn5+vMWnSpJtA5jcg5v327Rtnc3PzfSD79+rVq2WBNBtIHUAAwQzkAWKzBQsWnIUZFhISovXmzZsfkpKSDD09PY8kJCR+QtWCguGvrKwsz7Rp07Q4ODh+srCwgILiH0gSIIBgBrICsUBoaCgorBiANgqvXbtWDMg8AcQf9+7d+x0o9xbI/gJV/3fVqlUvmJiY/gIdcaWhoYETahEDQADBDPwNxO9h3gNpBiq6f/HiRbWjR4+yvnr16grQNbeh6kCWsxkYGIhClT8yNDQUgyYhBoAAYoIKfgXi06mpqUowQ+vr6x+uW7fu0suXL8+uWbOGS0BAwB7kC6jXvqmoqLDIyclxzZo1S4udnR2WtBgAAggWyyCXSgOxZUxMjGpWVtY7S0vLr8iRsnnzZl4/P7/DQCYoYtSA2DApKUkVGNNPDh06dBrIvwU06xNAAMEM5AIKqAOxCjQsmHl5eXWdnJx4N2zYcB4prd4CUpfwJRuAAGJCimULoGYpbm5uZ5DBnz9/5tq4caPWkSNHeJEc+g0aTFzfv3/nACabjzk5OW8FBQVloLmHASCAYJECUiTg7+//HJiQTzY2NsrfvXv3n7m5+T5YMgJGEkjDS2gY/pKRkeHt7Ow0Bsb0v9+/fz+HxTJAAMG8DHKFLTC9aRUXF79BT9Qgw4CWHAAy70FdYgjEDgkJCTpWVlYMQBfeAaaMPqBZbwECCGYgMzQGQSleCehS0X///jEDvf9lxYoVoOTyAIjfANX+BqrlBrL1gLFf09vb+0FaWvoHMBctA6USUKQABBAjrPiCliKg7AOKIG5ougLlju9Ipc1foDJWqMWGhYWFtsBg4RISEnrg5uY2BWQgQACxIBkGMkQKijmRfPwXWuI8ASp7DQ1vEP4DDO8PwBzzDJheT0CLPQaAAEJOh0o8zAzeihwMiv+gGZ0B4sz/bIwM797/YTh1/wfDIWj5qAfMmtFnzpz5ICIiwqKoqPgjKChoOtCs5wABhJyXpUCGzddgOIethJ71jEFi1nNwgQrKz8zv37//097eDop15qVLl0pAzWAACCAWhEMYOJFdduELA++b3wxsTIwMfzmYGH6xMDG8gYYpKAg+cnJy/gB6VwuYZFiA7E+wvAwQQCy46ozexwzG17+BYx6UVE4B8Vmo68CRFR0dDQo3UAHBBUwJ4lCLGAACCNnAv4zQxAkCxbIMZ0EuBIYb98EPDFo3voGTzjOogVzArGf969cvNmC2+wssHD7BDAQIIBakmHwPDPy3MAMNeBhgpfbbVEkGhqQbDJaXvjI8BPJB4jz79u37DcwlP+fPn38NuTwECCBkA1+8+8Nwtusxg+STHwwcP/8z8EuwMXA1KjBcBSlwEmRgBhrID/U2O7QMBIEHxsbGkrAwBAggmIGgNMT64AfDWyB+By0EQMVZlC0/wwsXQYa38hzgCGGBWv5ZU1OT4c+fP8yLFi1SA3r5Haw8BAggmIGg5KBpJ8BgeOYTg8S3f2DN/OxMDNwgw0AKnv0EJ+avsITu7u6+EZqzQEHwHFqaMwAEEAtShS/pLcTwrU+Z4QwsyQANOwIL06tfGV5BqwmQWoGKigoLYJnJvWPHjhstLS169vb2M0DqAAIIVh6CXHT/9ndIawEUITCXgUDrQwbGbe8YjkJdAzZQVVVV/t69e8LAgtUYaNgxWKQABBByacMHzfTK9gIMYkBZpj//GT4c+8gAKm1AsfseqPYPtHTXAtaEacBqlgHoyq+srKw3XV1dFwHlvwEEECNyYwmp3cIJjbUf0DbLP7RGEg+0bcMCjQxQzH8BWQgQQIzktr5wAYAAYmKgMgAIMAAp8Fx3osz1lgAAAABJRU5ErkJggg==" width="20" height="32" alt="S5" \/><\/a>' +
+ '<\/div><\/form>';
+ }
+ if (controlVis == 'hidden') {
+ var hidden = document.getElementById('navLinks');
+ } else {
+ var hidden = document.getElementById('jumplist');
+ }
+ addClass(hidden,'hideme');
+}
+
+function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
+ if (!s5mode && !isOp) return false;
+ var hScreen = screen.width; var vScreen = screen.height;
+ var vWindow = window.outerHeight; var hWindow = window.outerWidth;
+ if (isOp && s5mode && defaultView=='slideshow' && ((hScreen != hWindow) || (vScreen != vWindow))) {
+ toggle();
+ return false;
+ }
+ if (isOp && !s5mode && ((hScreen != hWindow) || (vScreen != vWindow))) return false;
+ if (isOp && !s5mode && (hScreen == hWindow) && (vScreen == vWindow)) toggle();
+ var vScale = 48; // both yield 16 (the usual browser default) at 1024x768
+ var hScale = 64; // perhaps should auto-calculate based on theme's declared value?
+ if (window.innerHeight) {
+ var vSize = window.innerHeight;
+ var hSize = window.innerWidth;
+ } else if (document.documentElement.clientHeight) {
+ var vSize = document.documentElement.clientHeight;
+ var hSize = document.documentElement.clientWidth;
+ } else if (document.body.clientHeight) {
+ var vSize = document.body.clientHeight;
+ var hSize = document.body.clientWidth;
+ } else {
+ var vSize = 700; // assuming 1024x768, minus chrome and such equals 8:5
+ var hSize = 1024; // these do not account for kiosk mode or Opera Show
+ }
+ var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
+ extendImgSizes(newSize); // scalable images extension
+ extendCanSizes(newSize); // scalable canvas extension
+ extendObjSizes(newSize); // scalable object extension
+ fontSize(newSize,"px");
+ if(!isS2 || firstTime==0) {
+ generateCanvas(); // dynamic canvas extension
+ }
+ if (isGe) { // hack to counter incremental reflow bugs
+ var obj = document.getElementsByTagName('body')[0];
+ obj.style.visibility = 'hidden';
+ obj.style.display = 'none';
+ obj.style.display = 'block';
+ obj.style.visibility = 'visible';
+ changeOpac(100,'slide' + snum);
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("fixReflow()",10);
+ }else {
+ setListPos(); // invisible select extension
+ }
+}
+
+function fixReflow() {
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("finishReflow()",10);
+}
+function finishReflow() {
+ setListPos(); // invisible select extension
+}
+
+function fontSize(val,fmt) {
+ var value = val + fmt;
+ if (!(s5ss = document.getElementById('s5ss'))) {
+ if (!document.createStyleSheet) {
+ document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
+ s5ss.setAttribute('media','screen, projection');
+ s5ss.setAttribute('id','s5ss');
+ } else {
+ document.createStyleSheet();
+ document.s5ss = document.styleSheets[document.styleSheets.length - 1];
+ }
+ }
+ if (!(document.s5ss && document.s5ss.addRule)) {
+ while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
+ s5ss.appendChild(document.createTextNode('html {font-size: ' + value + ' !important;}'));
+ } else {
+ document.s5ss.addRule('html','font-size: ' + value + ' !important;');
+ }
+}
+
+function windowChange() {
+ fontScale();
+}
+
+function notOperaFix() {
+ slideCSS = document.getElementById('slideProj').href;
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ slides.setAttribute('media','screen');
+ outline.disabled = true;
+ if (isGe) {
+ slides.setAttribute('href','null'); // Gecko fix
+ slides.setAttribute('href',slideCSS); // Gecko fix
+ }
+ if ((isIE && notIE7) && document.styleSheets && document.styleSheets[0]) {
+ document.styleSheets[0].addRule('img', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('div', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('.slide', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ }
+}
+
+function getIncrementals(obj) {
+ var incrementals = new Array();
+ if (!obj)
+ return incrementals;
+ var children = obj.childNodes;
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ if (hasClass(child, 'incremental')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'incremental');
+ for (var j = 0; j < child.childNodes.length; j++) {
+ if (child.childNodes[j].nodeType == 1) {
+ addClass(child.childNodes[j], 'incremental');
+ }
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ removeClass(child,'incremental');
+ }
+ }
+ if (hasClass(child, 'show-first')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'show-first');
+ if (child.childNodes[isGe].nodeType == 1) {
+ removeClass(child.childNodes[isGe], 'incremental');
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ }
+ }
+ incrementals = incrementals.concat(getIncrementals(child));
+ }
+ return incrementals;
+}
+
+function createIncrementals() {
+ var incrementals = new Array();
+ for (var i = 0; i < smax; i++) {
+ incrementals[i] = getIncrementals(document.getElementById('slide'+i));
+ }
+ return incrementals;
+}
+
+function trap(e) {
+ if (!e) {
+ e = event;
+ e.which = e.keyCode;
+ }
+ try {
+ modifierKey = e.ctrlKey || e.altKey || e.metaKey;
+ }
+ catch(e) {
+ modifierKey = false;
+ }
+ return modifierKey || e.which == 0;
+}
+
+// notes extension
+function noteLabel() { // Gives notes id's to match parent slides
+ var notes = GetElementsWithClassName('div','notes');
+ for (var i = 0; i < notes.length; i++) {
+ var note = notes[i];
+ var id = 'note' + note.parentNode.id.substring(5);
+ note.setAttribute('id',id);
+ }
+ resetElapsedSlide();
+ resetRemainingTime();
+ window.setInterval('updateElaspedTime()', 1000);
+}
+
+function createNotesWindow() { // creates a window for our notes
+ if (!s5NotesWindow || s5NotesWindow.closed) { // Create the window if it doesn't exist
+ s5NotesWindowLoaded = false;
+ // Note: Safari has a tendency to ignore window options preferring to default to the settings of the parent window, grr.
+ s5NotesWindow = window.open(s5Path+'ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0');
+ }
+ if (s5NotesWindowLoaded) { // Load the current note if the Note HTML has loaded
+ loadNote();
+ } else { // Keep trying...
+ window.setTimeout('createNotesWindow()', 50);
+ }
+}
+
+function loadNote() {
+// Loads a note into the note window
+ var notes = nextNotes = '<em class="disclaimer">There are no notes for this slide.</em>';
+ if (document.getElementById('note' + snum)) {
+ notes = document.getElementById('note' + snum).innerHTML;
+ }
+ if (document.getElementById('note' + (snum + 1))) {
+ nextNotes = document.getElementById('note' + (snum + 1)).innerHTML;
+ }
+
+ var jl = document.getElementById('jumplist');
+ var slideTitle = jl.options[jl.selectedIndex].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex) ? ' (' + jl.selectedIndex + '/' + (smax - 1) + ')' : '');
+ if (incrementals[snum].length > 0) {
+ slideTitle += ' <small>[' + incpos + '/' + incrementals[snum].length + ']</small>';
+ }
+ if (jl.selectedIndex < smax - 1) {
+ var nextTitle = jl.options[jl.selectedIndex + 1].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex + 1) ? ' (' + (jl.selectedIndex + 1) + '/' + (smax - 1) + ')' : '');
+ } else {
+ var nextTitle = '[end of slide show]';
+ }
+
+ if (s5NotesWindow && !s5NotesWindow.closed && s5NotesWindow.document) {
+ s5NotesWindow.document.getElementById('slide').innerHTML = slideTitle;
+ s5NotesWindow.document.getElementById('notes').innerHTML = notes;
+ s5NotesWindow.document.getElementById('next').innerHTML = nextTitle;
+ s5NotesWindow.document.getElementById('nextnotes').innerHTML = nextNotes;
+ }
+ resetElapsedSlide();
+}
+
+function minimizeTimer(id) {
+ var obj = s5NotesWindow.document.getElementById(id);
+ if (hasClass(obj,'collapsed')) {
+ removeClass(obj,'collapsed');
+ } else {
+ addClass(obj,'collapsed');
+ }
+}
+
+function resetElapsedTime() {
+ presentationStart = new Date();
+ slideStart = new Date();
+ updateElaspedTime();
+}
+
+function resetElapsedSlide() {
+ if (snum != previousSlide) {
+ slideStart = new Date();
+ previousSlide = snum;
+ updateElaspedTime();
+ }
+}
+
+function updateElaspedTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var now = new Date();
+ var ep = s5NotesWindow.document.getElementById('elapsed-presentation');
+ var es = s5NotesWindow.document.getElementById('elapsed-slide');
+ ep.innerHTML = formatTime(now.valueOf() - presentationStart.valueOf());
+ es.innerHTML = formatTime(now.valueOf() - slideStart.valueOf());
+}
+
+function resetRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var startField = s5NotesWindow.document.getElementById('startFrom');
+ startFrom = readTime(startField.value);
+ countdown.remaining = startFrom * 60000; // convert to msecs
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var timeLeft = formatTime(countdown.remaining);
+ tl.innerHTML = timeLeft;
+}
+
+function updateRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var now = new Date();
+ if (countdown.state == 'run') {
+ countdown.remaining = countdown.end - now;
+ }
+ tl.style.color = '';
+ tl.style.backgroundColor = '';
+ if (countdown.remaining >= 0) {
+ var timeLeft = formatTime(countdown.remaining);
+ removeClass(tl,'overtime');
+ if (countdown.remaining < 300000) {
+ tl.style.color = 'rgb(' + (255-Math.round(countdown.remaining/2000)) + ',0,0)';
+ tl.style.backgroundColor = 'rgb(255,255,' + (Math.round(countdown.remaining/2000)) + ')';
+ }
+ } else {
+ var timeLeft = '-' + formatTime(-countdown.remaining);
+ addClass(tl,'overtime');
+ }
+ tl.innerHTML = timeLeft;
+}
+
+function toggleRemainingTime() {
+ if (countdown.state == 'pause') countdown.state = 'run'; else countdown.state = 'pause';
+ if (countdown.state == 'pause') {
+ window.clearInterval(countdown.timer);
+ }
+ if (countdown.state == 'run') {
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ countdown.timer = window.setInterval('updateRemainingTime()', 1000);
+ }
+}
+
+function alterRemainingTime(amt) {
+ var change = amt * 60000; // convert to msecs
+ countdown.end += change;
+ countdown.remaining += change;
+ updateRemainingTime();
+}
+
+function formatTime(msecs) {
+ var time = new Date(msecs);
+
+ var hrs = time.getUTCHours() + ((time.getUTCDate() -1) * 24); // I doubt anyone will spend more than 24 hours on a presentation or single slide but just in case...
+ hrs = (hrs < 10) ? '0'+hrs : hrs;
+ if (hrs == 'NaN' || isNaN(hrs)) hrs = '--';
+
+ var min = time.getUTCMinutes();
+ min = (min < 10) ? '0'+min : min;
+ if (min == 'NaN' || isNaN(min)) min = '--';
+
+ var sec = time.getUTCSeconds();
+ sec = (sec < 10) ? '0'+sec : sec;
+ if (sec == 'NaN' || isNaN(sec)) sec = '--';
+
+ return hrs + ':' + min + ':' + sec;
+}
+
+function readTime(val) {
+ var sregex = /:/;
+ var matches = sregex.exec(val);
+ if (matches == null) {
+ return val;
+ } else {
+ var times = val.split(':');
+ var hours = parseInt(times[0]);
+ var mins = parseInt(times[1]);
+ var total = (hours * 60) + mins;
+ return total;
+ }
+}
+// notes extension
+
+// startup process
+function createSlideShow() {
+ defaultCheck();
+ if(!isIE) createDetector(); // (degrade IE) scalable images extension
+ if(opac!=0 || isIE) { // &&!isIE (degrade IE)
+ tranSitions = false;
+ fadeModus = false;
+ }
+ if(tranSitions && document.getElementById && document.createElement){
+ createProgress();
+ var nop=document.getElementById('StartupControl');
+ nop.onload = dumpProgress;
+ }else {
+ startup();
+ showAll();
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+ }
+}
+
+function defaultCheck() {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'defaultView') {
+ defaultView = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'controlVis') {
+ controlVis = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'tranSitions') {
+ tranSitions = (allMetas[i].content == "true") ? true : false;
+ fadeModus = (tranSitions == true) ? true : false;
+ }
+ if (allMetas[i].name == 'fadeDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ fadeDuration = Math.max(200,Math.min(tmp,2000));
+ }
+ if (allMetas[i].name == 'incrDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ incrDuration = Math.max(50,Math.min(tmp,500));
+ }
+ if (allMetas[i].name == 'autoMatic') {
+ autoMatic = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playLoop') {
+ playLoop = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playDelay') {
+ var tmp = parseInt(allMetas[i].content);
+ playDelay = Math.max(5,Math.min(tmp,90))*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ }
+ if (allMetas[i].name == 'audioSupport') {
+ audioSupport = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'audioVolume') {
+ var tmp = parseInt(allMetas[i].content);
+ audioVolume = Math.max(0,Math.min(tmp,100));
+ }
+ if (allMetas[i].name == 'audioError') {
+ audioError = (allMetas[i].content == "true") ? true : false;
+ }
+ }
+}
+
+function createProgress() {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "StartupProgress";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=100)";
+ }else {
+ pg.style.opacity = 1.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/progress.gif)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+
+ var im = document.createElement('img');
+ im.id = "StartupControl";
+ im.src = s5Path+"ui/graphic_support/blank.gif?" + new Date().valueOf();
+ document.getElementsByTagName("body")[0].appendChild(im);
+}
+
+function startup() {
+ createControls(); // hallvord
+ slideLabel();
+ incrementals = createIncrementals();
+ noteLabel(); // [SI:060104] must follow slideLabel()
+ loadNote();
+ fixLinks();
+ externalLinks();
+ fontScale();
+ if (!isOp) {
+ if(isIE) {
+ document.getElementById('lst').style.backgroundImage = 'none';
+ document.getElementById('del').style.backgroundImage = 'none';
+ }else {
+ document.getElementById('audio').style.backgroundImage = 'none';
+ }
+ notOperaFix();
+ }else if(isOp) {
+ var obj = document.getElementById('exit');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('exit').style.opacity = 0.5;
+ obj = document.getElementById('toggle');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('toggle').style.opacity = 0.5;
+ document.getElementById('jumplist').style.visibility = 'hidden';
+ document.getElementById('list').style.visibility = 'hidden';
+ document.getElementById('lst').style.opacity = 0.5;
+ obj = document.getElementById('audio');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('audio').style.opacity = 0.5;
+ document.getElementById('volumelist').style.visibility = 'hidden';
+ document.getElementById('volume').style.visibility = 'hidden';
+ document.getElementById('vol').style.opacity = 0.5;
+ document.getElementById('delaylist').style.visibility = 'hidden';
+ document.getElementById('delay').style.visibility = 'hidden';
+ document.getElementById('del').style.opacity = 0.5;
+ }
+ slideJump();
+ if (defaultView == 'outline') toggle();
+ document.onkeyup = keys;
+ document.onkeypress = trap;
+ document.onclick = clicker;
+}
+
+function preloadImgages() {
+ var temp = '';
+ var objects = document.getElementsByTagName('img');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].src != '') {
+ temp = new Image();
+ temp.src = objects[i].src;
+ }
+ }
+}
+
+function showAll() {
+ var obj1 = GetElementsWithClassName('div','presentation')[0];
+ if(!obj1) var obj1 = GetElementsWithClassName('ol','presentation')[0];
+ var obj2 = GetElementsWithClassName('div','layout')[0];
+ if(!obj1){}else {obj1.style.display = 'block'};
+ if(!obj2){}else {obj2.style.display = 'block'};
+}
+
+function dumpProgress() {
+ document.body.removeChild(document.getElementById('StartupControl'));
+ startup();
+ preloadImgages();
+ showAll();
+ createSoundManagerScript();
+ shiftOpacity('StartupProgress',1000);
+ window.setTimeout("removeProgress()",1000);
+}
+
+function removeProgress() {
+ document.body.removeChild(document.getElementById('StartupProgress'));
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+}
+function panelSetup() {
+ if(playPause) {
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ if(playLoop) {
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ if(audioSupport && !isIE && !isOp) {
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ }
+ if(fadeModus && !isIE) {
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ if(autoMatic) {
+ var obj = document.getElementById('auto'); changeClass(obj,'ison');
+ startPlay();
+ }
+ if(audioVolume && !isIE && !isOp) {
+ var idx = 0;
+ if(audioVolume >= 95 && audioVolume <= 100) {idx = 0;}
+ else if(audioVolume >= 85 && audioVolume < 95) {idx = 1;}
+ else if(audioVolume >= 75 && audioVolume < 85) {idx = 2;}
+ else if(audioVolume >= 65 && audioVolume < 75) {idx = 3;}
+ else if(audioVolume >= 55 && audioVolume < 65) {idx = 4;}
+ else if(audioVolume >= 45 && audioVolume < 55) {idx = 5;}
+ else if(audioVolume >= 35 && audioVolume < 45) {idx = 6;}
+ else if(audioVolume >= 25 && audioVolume < 35) {idx = 7;}
+ else if(audioVolume >= 15 && audioVolume < 25) {idx = 8;}
+ else if(audioVolume >= 5 && audioVolume < 15) {idx = 9;}
+ else {idx = 10;}
+ document.getElementById('volumelist').selectedIndex = idx;
+ }
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+}
+// startup process
+
+// shutdown process
+function byby() {
+ stopPlay();
+ if(tranSitions && fadeModus && s5mode && !isOp) {
+ fadeoutSound(curSoundID,true); // audio support
+ var pg = document.createElement('div');
+ pg.id = "GoodBy";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=0)";
+ }else {
+ pg.style.opacity = 0.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/finish.gif)";
+ document.getElementsByTagName("body")[0].appendChild(pg);
+ shiftOpacity('GoodBy',1000);
+ window.setTimeout("history.back()",1000);
+ }else {
+ stopSound(curSoundID);
+ history.back();
+ }
+}
+// shutdown process
+
+// scalable images extension
+function createDetector() {
+ var em = document.createElement('div');
+ em.id='EMSizeControl'; em.style.position="absolute"; em.style.left="-999px";
+ em.style.width="1em"; em.style.height="1em"; em.style.opacity=0.0;
+ document.getElementsByTagName("body")[0].appendChild(em);
+ var nop=document.getElementById('EMSizeControl');
+ if(!nop||findPosX(nop)!=-999) {}else {
+ opac=document.getElementById('EMSizeControl').style.opacity;
+ empx=document.getElementById('EMSizeControl').offsetHeight;
+ document.body.removeChild(document.getElementById('EMSizeControl'));
+ var objects = document.getElementsByTagName('img');
+ var j = 0; var i = 0; var k = 0; var d; var obj;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ images[j] = objects[i];
+ ++j;
+ }
+ }
+ var objects = document.getElementsByTagName('canvas'); j = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ canvas[objects[i].id] = objects[i];
+ if(j==0) {
+ if(objects[i].getContext) {
+ canvasSupport = true;
+ }
+ ++j;
+ }
+ }
+ }
+ if(canvasSupport!=true) {
+ for (d in canvas) {
+ try {
+ canvas[d].setAttribute("width",1);
+ canvas[d].setAttribute("height",1);
+ } catch (e) {
+ }
+ }
+ }
+ var objects = document.getElementsByTagName('table');
+ j = 0; k = 0; l = 0; var w; var h; var tmp; var cnt;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^piechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ piecharts[j] = objects[i];
+ em = piecharts[j].getAttribute("summary");
+ if(em != "") em = "," + em;
+ piecharts[j].setAttribute("summary", w + "," + h + em);
+ ++j;
+ }
+ }
+ }
+ if(objects[i].className.match(/^barchart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ barcharts[k] = objects[i];
+ em = barcharts[k].getAttribute("summary");
+ if(em != "") em = "," + em;
+ barcharts[k].setAttribute("summary", w + "," + h + em);
+ ++k;
+ }
+ }
+ }
+ if(objects[i].className.match(/^linechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ linecharts[l] = objects[i];
+ em = linecharts[l].getAttribute("summary");
+ if(em != "") em = "," + em;
+ linecharts[l].setAttribute("summary", w + "," + h + em);
+ ++l;
+ }
+ }
+ }
+ }
+ objects = document.getElementsByTagName('object'); j = 0; i = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ medias[j] = objects[i]; ++j;
+ if(!isIE) {
+ if(objects[i].getAttributeNode("classid")) objects[i].removeAttributeNode(objects[i].getAttributeNode("classid"));
+ if(objects[i].getAttributeNode("codebase")) objects[i].removeAttributeNode(objects[i].getAttributeNode("codebase"));
+ }
+ }
+ }
+ }
+}
+function extendImgSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < images.length; i++) {
+ w=images[i].getAttribute("width",0);
+ h=images[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ images[i].style.width=Math.floor(w*q)+"px";
+ images[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+
+function extendCanSizes(f) {
+ if(empx>0 && canvasSupport) {
+ var q = (f/empx); var w = 0; var h = 0; var tmp = ""; var cnt; var obj;
+ for(var i=0; i < piecharts.length; i++) {
+ if(piecharts[i].getAttribute("summary")) {
+ tmp = piecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = piecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < barcharts.length; i++) {
+ if(barcharts[i].getAttribute("summary")) {
+ tmp = barcharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = barcharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < linecharts.length; i++) {
+ if(linecharts[i].getAttribute("summary")) {
+ tmp = linecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = linecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ }
+}
+function extendObjSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < medias.length; i++) {
+ w=medias[i].getAttribute("width",0);
+ h=medias[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ medias[i].style.width=Math.floor(w*q)+"px";
+ medias[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+function findPosX(obj) {
+ var posLeft = 0;
+ while (obj.offsetParent) {
+ posLeft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ return posLeft;
+}
+function findPosY(obj) {
+ var posTop = 0;
+ while (obj.offsetParent) {
+ posTop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ return posTop;
+}
+// scalable images extension
+
+// canvas chart extension
+function deg2rad(degrees) {
+ return Math.PI *degrees/180;
+}
+function rad2deg(radians) {
+ return 180.0 *radians/Math.PI;
+}
+function circle_point_x(radians, diameter) {
+ var x = Math.cos(radians)*(diameter/2);
+ return x;
+}
+function circle_point_y(radians, diameter) {
+ var y = Math.sin(radians)*(diameter/2);
+ return y;
+}
+function roundTo(val,dig) {
+ var num = val;
+ if (val > 8191 && val < 10485) {
+ val = val-5000;
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ num = num+5000;
+ } else {
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ }
+ return num;
+}
+function searchColor(value) {
+ for (var dat in colorNames) {
+ if(dat==value) return colorNames[dat];
+ }
+ return false;
+}
+function scanColor(value) {
+ if(value.match(/^#[0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var val1 = value.substr(1,1).toLowerCase();
+ var val2 = value.substr(2,1).toLowerCase();
+ var val3 = value.substr(3,1).toLowerCase();
+ value = '#' + val1 + val1 + val2 + val2 + val3 + val3;
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var tmp = searchColor(value.toLowerCase());
+ if(!tmp) {}else{value = tmp;}
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ value = '#000000';
+ }
+ return value.toLowerCase();
+}
+function hex2rgb(val,trans) {
+ if(val.length==7) {
+ var tp1 = Math.max(0,Math.min(parseInt(val.substr(1,2),16),255));
+ var tp2 = Math.max(0,Math.min(parseInt(val.substr(3,2),16),255));
+ var tp3 = Math.max(0,Math.min(parseInt(val.substr(5,2),16),255));
+ return 'rgba(' + tp1 + ',' + tp2 + ',' + tp3 + ',' + trans + ')';
+ }
+}
+function trim(str) {
+ return (str.replace(/\s+$/,"").replace(/^\s+/,""));
+}
+function roundedRect(ctx,x,y,width,height,radius){
+ ctx.beginPath();
+ ctx.moveTo(x,y+radius);
+ ctx.lineTo(x,y+height-radius);
+ ctx.quadraticCurveTo(x,y+height,x+radius,y+height);
+ ctx.lineTo(x+width-radius,y+height);
+ ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius);
+ ctx.lineTo(x+width,y+radius);
+ ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
+ ctx.lineTo(x+radius,y);
+ ctx.quadraticCurveTo(x,y,x,y+radius);
+ ctx.closePath();
+}
+function drawString(ctx, text, fc, tx, ty) {
+ var xp = 0; var c = "";
+ ctx.beginPath();
+ for (var i = 0; i < text.length; i++) {
+ c = text[i];
+ ctx.drawImage(font, signs[c].sx, signs[c].sy, signs[c].sw, signs[c].sh, tx+xp, ty, signs[c].sw*fc, signs[c].sh*fc);
+ xp += (signs[c].sw*fc);
+ }
+ ctx.closePath();
+}
+function strokeString(ctx, txt, col, fh, tx, ty) {
+ var fw = fh*0.666666; var lw = fh*0.125;
+ var ls = lw/2; var cr = lw; var xp = 0;
+ ctx.lineCap = "round"; ctx.lineJoin = "round"
+ ctx.lineWidth = lw; ctx.strokeStyle = col;
+ for (var i = 0; i < txt.length; i++) {
+ strokeSymbol(ctx, txt[i], ls, tx+xp, ty, fw, fh);
+ xp += (txt[i]!="."?fw+cr:(fw/2)+cr);
+ }
+}
+function strokeSymbol(ctx, symbol, fc, cx, cy, cw, ch) {
+ ctx.beginPath();
+ switch (symbol) {
+ case "0":
+ ctx.moveTo(cx+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+(cw/2),(cw/2)-fc,deg2rad(180),0, false);
+ ctx.arc(cx+(cw/2),(cy+ch)-(cw/2),(cw/2)-fc,0,deg2rad(180), false);
+ ctx.closePath();
+ break;
+ case "1":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.moveTo(cx+(cw*0.666666),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.666666),cy+fc);
+ ctx.lineTo(cx+(cw*0.25),cy+(ch*0.25));
+ break;
+ case "2":
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.8));
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+fc,cy+ch-fc);
+ ctx.arc(cx+(cw/2),cy+(cw*0.425),(cw*0.425)-fc,deg2rad(45),deg2rad(-180), true);
+ break;
+ case "3":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-90),deg2rad(180), false);
+ break;
+ case "4":
+ ctx.moveTo(cx+(cw*0.75),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.5),cy+ch-fc);
+ break;
+ case "5":
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-80),deg2rad(180), false);
+ break;
+ case "6":
+ ctx.moveTo(cx+fc,cy+ch-(cw*0.5)-fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-180),deg2rad(180), false);
+ ctx.bezierCurveTo(cx+fc,cy+fc,cx+fc,cy+fc,cx+(cw*0.9)-fc,cy+fc);
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ break;
+ case "7":
+ ctx.moveTo(cx+(cw*0.5),cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.25)-fc);
+ break;
+ case "8":
+ ctx.moveTo(cx+(cw*0.92)-fc,cy+(cw*0.59));
+ ctx.arc(cx+(cw/2),cy+(cw*0.45),(cw*0.45)-fc,deg2rad(25),deg2rad(-205), true);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-135),deg2rad(-45), true);
+ ctx.closePath();
+ ctx.moveTo(cx+(cw*0.79),cy+(ch*0.47));
+ ctx.lineTo(cx+(cw*0.21),cy+(ch*0.47));
+ break;
+ case "9":
+ ctx.moveTo(cx+cw-fc,cy+(cw*0.5));
+ ctx.arc(cx+(cw/2),cy+(cw*0.5),(cw*0.5)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.bezierCurveTo(cx+cw-fc,cy+ch-fc,cx+cw-fc,cy+ch-fc,cx+(cw*0.1)+fc,cy+ch-fc);
+ break;
+ case "%":
+ ctx.moveTo(cx+fc,cy+(ch*0.75));
+ ctx.lineTo(cx+cw-fc,cy+(ch*0.25));
+ ctx.moveTo(cx+(cw*0.505),cy+(cw*0.3));
+ ctx.arc(cx+(cw*0.3),cy+(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.moveTo(cx+(cw*0.905),cy+ch-(cw*0.3));
+ ctx.arc(cx+(cw*0.7),cy+ch-(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ break;
+ case ".":
+ ctx.moveTo(cx+(cw*0.25),cy+ch-fc-fc);
+ ctx.arc(cx+(cw*0.25),cy+ch-fc-fc,fc,deg2rad(0),deg2rad(360), false);
+ ctx.closePath();
+ break;
+ default:
+ break;
+ }
+ ctx.stroke();
+}
+function drawBar(ctx,x,y,width,height,color,value,textdiv){
+ var rw = width/2; var rh = rw/2;
+ height = Math.max(height,rw);
+ var dh = Math.max(height-(2*rh),0.1); var S2L;
+ var xx = rw/8; var yy = rh/4;
+ var yo = rh/2; y = y - yy;
+ if(canvas_noshadow <= 0 && canvas_noshade <= 0) {
+ ctx.save();
+ S2L = ctx.createRadialGradient(x+rw+rh,y+height-rw+yy+rh,0,x+rw,y+height-rw+yy,rw);
+ S2L.addColorStop(0, 'rgba(0,0,0,0.5)');
+ S2L.addColorStop(0.7, 'rgba(0,0,0,0.25)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = S2L;
+ ctx.scale(1,0.5);
+ ctx.translate(xx,y+height+yy);
+ if(isOp){
+ ctx.fillRect(x,y+yy+height-width,width,width);
+ }else {
+ ctx.arc(x+rw,y+yy+height-width,width,0,deg2rad(360), false);
+ ctx.fill();
+ }
+ ctx.restore();
+ }else if(canvas_noshadow <= 0 && canvas_noshade >= 1) {
+ ctx.fillStyle = 'rgba(0,0,0,0.2)';
+ ctx.fillRect(x+yo,y+rh+yo+yo,width,dh);
+ }
+
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x,y+(height/2),x+width,y+(height/2));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.75)');
+ S2L.addColorStop(0.2, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.3, 'rgba(0,0,0,0)');
+ S2L.addColorStop(0.5, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.35)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.1)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.strokeStyle = S2L;
+ ctx.stroke();
+ }else {
+ ctx.fillStyle = color;
+ ctx.fillRect(x,y+rh+yo,width,dh);
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var bw = width; var bh = bw/4;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ var c; var w;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,x+(width/2)-(bw/2),y,bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext <= 0) {
+ strokeString(ctx, value + "%","rgba(48,48,48,1)", th, x+(width/2)-(w/2), y+((bh-th)/2));
+ }else {
+ drawString(ctx, value + "%", tf, x+(width/2)-(w/2), y+((bh-th)/2.2));
+ }
+ }else {
+ var bh = bw/3; var th = roundTo(bh*0.75,0);
+ roundedRect(ctx,x,y,bw,bh,bh/4);
+ ctx.fill();
+ var obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = x + "px";
+ obj.style.top = y+((bh-th)/2.2) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+
+ }
+}
+function drawLine(ctx,x,y,width,height,dist,array,factor,color,fill){
+ if(fill <= 0){
+ var style = hex2rgb(color,0.5);
+ ctx.lineJoin = "miter";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height);
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.lineTo(x+width,y+height);
+ ctx.lineTo(x,y+height);
+ ctx.closePath();
+ ctx.fillStyle = style;
+ ctx.fill();
+ }
+ ctx.lineJoin = "round";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height-(array[0]*factor));
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.strokeStyle = color;
+ ctx.stroke();
+}
+function setDataURL(cid) {
+ if(cid.toDataURL) {
+ var obj = document.getElementById(cid.id + "_link");
+ if(obj) {
+ obj.setAttribute("title", "To Data URL");
+ obj.setAttribute("target", "_blank");
+ obj.setAttribute("href", cid.toDataURL());
+ }
+ }
+}
+function get_input(dataobj,canvasobj,linechart) {
+ var table = document.getElementById(dataobj);
+ var canvas = document.getElementById(canvasobj);
+ var row; var clm; var cnt = 0; var val = 0; var nme = ""; var col = "";
+ if(canvas.getContext) {
+ canvas_width = parseInt(canvas.style.width);
+ canvas_height = parseInt(canvas.style.height);
+ if(canvas_width >= 16 && canvas_height >= 16) {
+ var tmp = table.getAttribute("summary");
+ canvas_noshade = 0; canvas_noshadow = 0;
+ canvas_notext = 0; canvas_imgtext = 0;
+ canvas_htmltext = 0; canvas_nofill = 0;
+ if(tmp.search(/noshadow/) != -1) canvas_noshadow = 1;
+ if(tmp.search(/noshade/) != -1) canvas_noshade = 1;
+ if(tmp.search(/nofill/) != -1) canvas_nofill = 1;
+ if(tmp.search(/notext/) != -1) canvas_notext = 1;
+ if(tmp.search(/htmltext/) != -1) canvas_htmltext = 1;
+ if(tmp.search(/imgtext/) != -1) canvas_imgtext = 1;
+ if(table.getAttribute("bgcolor")) {
+ canvas_bgcolor = scanColor(table.getAttribute("bgcolor"));
+ }
+ ChartData = new Array(); colorSlice = new Array();
+ if(table.getElementsByTagName("tr")[0].getElementsByTagName("th")[0]) cnt = 1;
+ for(var r = cnt; r < table.getElementsByTagName("tr").length; r++) {
+ row = table.getElementsByTagName("tr")[r];
+ clm = row.getElementsByTagName("td").length;
+ if(row.getElementsByTagName("td")[0].getAttribute("bgcolor")) {
+ col = scanColor(row.getElementsByTagName("td")[0].getAttribute("bgcolor")); val = 0;
+ nme = trim(row.getElementsByTagName("td")[1].innerHTML.replace(/<[^>]+>/g,""));
+ if(!linechart) {
+ if(clm > 3) {
+ for(var z = 2; z < clm; z++) {
+ val += parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ }else {
+ val = parseFloat(row.getElementsByTagName("td")[2].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ if(!isNaN(val) && val > 0 && nme != '') {
+ colorSlice[r-cnt] = col; ChartData[nme] = Math.abs(val);
+ }else {
+ break;
+ }
+ }else {
+ val = 0; i = 0;
+ if(clm > 3 && nme != '') {
+ ChartData[r-cnt] = new Array();
+ colorSlice[r-cnt] = col;
+ for(var z = 2; z < clm; z++) {
+ val = Math.abs(parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,"")));
+ if(!isNaN(val) && val >= 0) {
+ ChartData[r-cnt][i] = val; i++;
+ }else {
+ ChartData[r-cnt][i] = 0; i++;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }
+ }
+}
+function setPieChart(canvasobj,textobj) {
+ var cd = (Math.min(canvas_width,canvas_height)/110)*100;
+ var cp = cd*0.1; var cr = cd/2;
+ var sr = cr*0.93; var cw = cd+cp; var ch = cw;
+ var cx = (cd/2)+(cp/2); var cy = cx; var ct = 0;
+ for (var data in ChartData) {
+ ct += ChartData[data];
+ }
+ var poc = ct/100;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ }
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,cw,ch);
+ }else {
+ ctx.clearRect(0,0,cw,ch);
+ }
+ if(canvas_noshadow <= 0) {
+ if(!isOp) {
+ ctx.beginPath();
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),cr,cx+(cr*0.1),cy+(cr*0.1),sr*0.9);
+ B2B.addColorStop(0, 'rgba(0,0,0,0)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.arc(cx+(cr*0.1),cy+(cr*0.1),cr,0,deg2rad(360), false);
+ ctx.closePath();
+ ctx.fillStyle = B2B;
+ ctx.fill();
+ }else {
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),0,cx+(cr*0.1),cy+(cr*0.1),cr);
+ B2B.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(0.87, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = B2B;
+ ctx.fillRect(0,0,cw,ch);
+ }
+ }
+ var val = 0; var deg = 0; var idx = 0; var data;
+ for (data in ChartData) {
+ val = ChartData[data]; sdeg = deg;
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ ctx.beginPath();
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr,sdeg,edeg, false);
+ ctx.lineTo(cx,cy);
+ ctx.closePath();
+ ctx.fillStyle = colorSlice[(idx++)];
+ ctx.fill();
+ }
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ var W2T = ctx.createLinearGradient(cp*2,cp*2,cx,cy);
+ W2T.addColorStop(0, 'rgba(255,255,255,0.8)');
+ W2T.addColorStop(1, 'rgba(255,255,255,0)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.fillStyle = W2T;
+ ctx.fill();
+ ctx.beginPath();
+ var T2B = ctx.createLinearGradient(cx,cy,cw-(cp*2),ch-(cp*2));
+ T2B.addColorStop(0, 'rgba(0,0,0,0)');
+ T2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.fillStyle = T2B;
+ ctx.fill();
+ ctx.beginPath();
+ var B2T = ctx.createLinearGradient(cx,cy,cw-(cp*1.9),ch-(cp*1.9));
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.strokeStyle = B2T;
+ ctx.stroke();
+ ctx.beginPath();
+ var T2W = ctx.createLinearGradient(cx,cy,(cp*1.9),(cp*1.9));
+ T2W.addColorStop(0, 'rgba(255,255,255,0)');
+ T2W.addColorStop(1, 'rgba(255,255,255,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.strokeStyle = T2W;
+ ctx.stroke();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var mpos = 0; var per = 0; var gx = 0;
+ var gy = 0; var tx = 0; var ty = 0;
+ var obj = ""; var w = 0; var c = 0;
+ var bw = cr*0.45; var bh = cr*0.125;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext >= 1) {
+ bw = (cr*0.365);
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ for (data in ChartData) {
+ val = ChartData[data];
+ sdeg = deg; mpos = deg+(((val/2)/ct)*deg2rad(360));
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ per = roundTo(val/poc,2);
+ gx = circle_point_x(mpos, cd);
+ gy = circle_point_y(mpos, cd);
+ tx = parseFloat((cx+(2*Math.floor(cx + gx)))/3);
+ ty = (cy+(2*Math.floor(cy + gy)))/3;
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext >= 1) {
+ drawString(ctx, per + "%", tf, tx-(w/2), ty-(th/1.8));
+ }else {
+ strokeString(ctx, per + "%","rgba(48,48,48,1)", th, tx-(w/2), ty-(th/2));
+ }
+ }else {
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = (tx-(bw/2)) + "px";
+ obj.style.top = ty-(th/1.8) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+ }
+ }
+ }
+}
+function setBarChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9; var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05; var ph = canvas_height*0.05;
+ var cm = 0; var ct = 0;
+ for (var data in ChartData) {
+ cm = Math.max(cm,ChartData[data]);
+ ct += ChartData[data];
+ }
+ var hf = ih/cm; var bs = colorSlice.length;
+ var bw = iw/(bs*1.1); var poc = ct/100;
+ var th = roundTo((bw/3)*0.75,0);
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ var obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ var cc = ""; var bh = 0; var idx = 0; var t = 0; per = 0;
+ for (var data in ChartData) {
+ per = roundTo(ChartData[data]/poc,2);
+ bh = ChartData[data]*hf;
+ drawBar(ctx,pw+(t*(bw*1.1)),ph+ih-bh,bw,bh,colorSlice[(idx++)],per,textdiv);
+ t++;
+ }
+ }
+}
+function setLineChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9;
+ var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05;
+ var ph = canvas_height*0.05;
+ var cm = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ cm = Math.max(cm,ChartData[i][j]);
+ }
+ }
+ var hf = (ih*0.95)/cm; var bw = iw;
+ var dw = iw/(ChartData[0].length-1)
+ var dh = ih/(ChartData[0].length-1)
+ var ps = Math.min(pw,ph); lw = ps/4;
+ var B2T;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_noshadow <= 0) {
+ B2T = ctx.createLinearGradient(pw+ps,ph+ih+1,pw+ps+ps,ph+ih+1);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps,ph+ih);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.lineTo(pw+ps+ps,ph+ih);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+ps+ps,ph+ih,pw+ps+ps,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps+ps,ph+ih);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+ps+iw,ph+ih+ps);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.closePath();
+ ctx.fill();
+ var B2T = ctx.createLinearGradient(pw+iw+1,ph+ps,pw+iw+1,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.35)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps);
+ ctx.lineTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+iw,ph+ps+ps,pw+iw+ps,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.35)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+iw+ps,ph+ih+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = lw/2;
+ ctx.strokeStyle = "rgba(255,255,255,0.25)";
+ if(canvas_nofill <= 0) {
+ ctx.fillStyle = "rgba(240,240,240,0.8)";
+ ctx.strokeStyle = "rgba(255,255,255,1)";
+ ctx.fillRect(pw,ph,iw,ih);
+ }
+ for (var i = 0; i < ChartData[0].length-1; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph);
+ ctx.lineTo(pw+(i*dw),ph+ih);
+ ctx.stroke();
+ }
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw,ph+(i*dh));
+ ctx.lineTo(pw+iw,ph+(i*dh));
+ ctx.stroke();
+ }
+ ctx.lineWidth = lw;
+ var cc = ""; var bh = 0; var idx = 0; var t = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ t = Math.max(t,ChartData[i][j]);
+ }
+ bh = t*hf; cc = colorSlice[(idx++)];
+ drawLine(ctx,pw,ph+ih-bh,bw,bh,dw,ChartData[i],hf,cc,canvas_nofill);
+ }
+ ctx.beginPath();
+ ctx.moveTo(pw,ph);
+ ctx.lineTo(pw,ph+ih);
+ ctx.lineTo(pw+iw+(lw/2),ph+ih);
+ ctx.strokeStyle = "rgba(48,48,48,1)";
+ ctx.stroke();
+ ctx.lineWidth = lw/2;
+ B2T = ctx.createLinearGradient(pw,ph+ih,pw,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,1)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.strokeStyle = B2T;
+ for (var i = 0; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph+ih);
+ ctx.lineTo(pw+(i*dw),ph+ih+ps);
+ ctx.stroke();
+ }
+ B2T = ctx.createLinearGradient(pw-ps,ph,pw,ph);
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,1)');
+ ctx.strokeStyle = B2T;
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw-ps,ph+(i*dh));
+ ctx.lineTo(pw,ph+(i*dh));
+ ctx.stroke();
+ }
+ }
+}
+function generateCanvas() {
+ if(canvasSupport) {
+ var canvasID; var tdataID; var textID;
+ var tmp; var dat; var i; var j;
+ for(i=0; i < piecharts.length; i++) {
+ tmp = piecharts[i].id.split("_");
+ tdataID = piecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setPieChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < barcharts.length; i++) {
+ tmp = barcharts[i].id.split("_");
+ tdataID = barcharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setBarChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < linecharts.length; i++) {
+ tmp = linecharts[i].id.split("_");
+ tdataID = linecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID,true);
+ if(colorSlice.length > 0) {
+ if(ChartData.length == colorSlice.length) {
+ setLineChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ }
+}
+// canvas chart extension
+
+// invisible select extension
+function setListPos(opt) {
+ if(!isIE) { //(degrade IE)
+ var ref = document.getElementById('list');
+ var x = findPosX(ref); var y = findPosY(ref);
+ var obj = document.getElementById('jumplist');
+ obj.style.position = 'fixed'; obj.style.left = x + 'px'; obj.style.top = y + 'px';
+ var vol = document.getElementById('volumelist');
+ ref = document.getElementById('volume');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ vol.style.position = 'fixed'; vol.style.left = x + 'px'; vol.style.top = y + 'px';
+ var del = document.getElementById('delaylist');
+ ref = document.getElementById('delay');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ del.style.position = 'fixed'; del.style.left = x + 'px'; del.style.top = y + 'px';
+ var pnl = document.getElementById('navLinks');
+ }
+ if(opt) {
+ if(isIE) {
+ //(degrade IE)
+ //pnl.style.filter = "alpha(opacity=80)";
+ }else {
+ obj.style.opacity = 0.0;
+ vol.style.opacity = 0.0;
+ del.style.opacity = 0.0;
+ pnl.style.opacity = 0.8;
+ }
+ }
+}
+// invisible select extension
+
+// transition extension
+function switchFade() {
+ if(tranSitions && s5mode && fadeModus) {
+ fadeModus = false;
+ playDelay = playDelay-(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'isoff');
+ }else if(tranSitions && s5mode && !fadeModus) {
+ fadeModus = true;
+ playDelay = playDelay+(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ currentSlide();
+}
+function opacity(ids, opacStart, opacEnd, millisec) {
+ var speed = Math.round(millisec / 100);
+ var timer = 0;
+ if(opacStart > opacEnd) {
+ for(var i = opacStart; i >= opacEnd; i--) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ } else if(opacStart < opacEnd) {
+ for(var i = opacStart; i <= opacEnd; i++) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ }
+}
+function changeOpac(opacity, ids) {
+ var obj = document.getElementById(ids);
+ if (isIE) {
+ obj.style.filter = "alpha(opacity=" + opacity + ")";
+ } else {
+ obj.style.opacity = (opacity / 100);
+ }
+}
+function shiftOpacity(ids, millisec) {
+ if(document.getElementById(ids).style.opacity != '') {
+ var currentOpac = document.getElementById(ids).style.opacity * 100;
+ } else {
+ var currentOpac = 0;
+ }
+ if(currentOpac == 0) {
+ opacity(ids, currentOpac, 100, millisec);
+ } else if(currentOpac > 0) {
+ opacity(ids, currentOpac, 0, millisec);
+ }
+}
+// transition extension
+
+// autoplay extension
+function autoPlay() {
+ if (s5mode && autoMatic && !playPause) {
+ if ((snum >= (smax-1)) && playLoop) {
+ goTo(0);
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }else if ((snum >= (smax-1)) && !playLoop) {
+ stopPlay();
+ }else {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ if (incrementals[snum].length >0) {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = parseInt(playDelay/(incrementals[snum].length+1));
+ remainDer = parseInt(playDelay-(incrDelay*incrementals[snum].length));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ } else {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = incrDuration;
+ remainDer = parseInt(playDelay-(incrementals[snum].length*incrDuration));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }
+ }
+}
+function autoPlayIncr() {
+ if (incpos < incrementals[snum].length) {
+ subgo(1);
+ autoRun = setTimeout('autoPlayIncr();',incrDelay);
+ }else {
+ autoRun = setTimeout('nop();',remainDer);
+ }
+}
+function nop() {
+ // no operation dummy
+}
+function togglePlay() {
+ if (autoRun && s5mode) {
+ stopPlay();
+ }else if (!autoRun && s5mode) {
+ startPlay();
+ }
+}
+function stopPlay() {
+ if (autoRun && s5mode) {
+ clearTimeout(autoRun); autoRun = null;
+ autoMatic = false; playPause = false; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'isoff');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ currentSlide();
+ }
+}
+function startPlay() {
+ if (!autoRun && s5mode) {
+ playPause = false; autoMatic = true; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'ison');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ autoRun = setTimeout('autoPlay();',playDelay);
+ currentSlide();
+ }
+}
+function pausePlay() {
+ if (s5mode && autoMatic) {
+ if (playPause) {
+ playPause = false; autoRun = setTimeout('autoPlay();',playDelay);
+ var obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ }else {
+ if (autoRun){
+ clearTimeout(autoRun); autoRun = null; playPause = true;
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+ }
+}
+function switchLoop() {
+ if(s5mode) {
+ if (playLoop) {
+ playLoop = false;
+ var obj = document.getElementById('loop'); changeClass(obj,'isoff');
+ }else {
+ playLoop = true;
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+}
+function setDelay() {
+ var val = document.getElementById('delaylist');
+ if(s5mode) {
+ var delay = Math.max(5,Math.min(parseInt(val.value),300));
+ playDelay = (fadeModus == true) ? ((delay*1000)+(2*fadeDuration)) : (delay*1000);
+ }
+}
+// autoplay extension
+
+// audio extension
+function createSoundManagerScript() {
+ if(typeof soundManager=="undefined") {
+ onerrorSM2();
+ }else {
+ var script=document.createElement('SCRIPT');
+ var tx=document.createTextNode("soundManager.createMovie();");
+ script.appendChild(tx);
+ document.getElementsByTagName("body")[0].appendChild(script);
+ }
+}
+//soundManager.onload = function() {
+function onloadSM2() {
+ if(!isIE) { //(degrade IE)
+ swfUnloaded = false;
+ preloadSounds();
+ }
+}
+//soundManager.onerror = function() {
+function onerrorSM2() {
+ if(typeof soundManager!="undefined") {
+ soundManager.destruct;
+ delete soundManager;
+ }
+ audioSupport = false; swfUnloaded = true;
+ if(audioError && !isIE && !isOp) {
+ var dv = document.createElement('div'); dv.id = "guru";
+ var d2=document.createElement('div'); dv.appendChild(d2);
+ var tx=document.createTextNode('Guru Meditation - SoundManager failed to load/initialize!');
+ d2.appendChild(tx); document.getElementById('slide0').appendChild(dv);
+ }
+}
+function audioSetup() {
+ if(sound[0]) {
+ playSound(0);
+ }else if(sound[bgSoundItem] && !sound[0]) {
+ playSound(bgSoundItem);
+ }
+}
+function fadeoutSound(ids, option) {
+ if(curSoundID >= 0 && !swfUnloaded) {
+ if(isNaN(ids)) {
+ if(ids == "bgSound") {
+ var cnum = parseInt(bgSoundItem);
+ }else {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && ids == sound[i]["id"]) {
+ var cnum = i;
+ break;
+ }
+ }
+ }
+ }else {
+ var cnum = ids;
+ ids = sound[cnum]["id"];
+ }
+ var vol = getMaxVolume(sound[cnum]["volume"]);
+ var millisec = fadeDuration;
+ var speed = Math.round(millisec / vol);
+ var timer = 0;
+ for(var i = vol; i > 0; i--) {
+ setTimeout("fadeout(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ if(option) setTimeout("stopSound('"+ids+"')",millisec);
+ }
+}
+function fadeout(volume, id) {
+ soundManager.setVolume(id,volume);
+}
+function stopSound(ids) {
+ var sid;
+ if(isNaN(ids)) {
+ sid = ids;
+ }else if(sound[ids]) {
+ sid = sound[ids]["id"];
+ }
+ if(sid!='' && curSoundID >= 0) {
+ soundManager.stop(sid);
+ curSoundID = -1;
+ }
+}
+function toggleSounds() {
+ if(audioSupport && !swfUnloaded) {
+ stopAllSounds();
+ }else if (!audioSupport && !swfUnloaded) {
+ allowSounds();
+ }
+}
+function allowSounds() {
+ if(!swfUnloaded) {
+ audioSupport = true;
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ currentSlide();
+ }
+}
+function stopAllSounds() {
+ if(curSoundID >= 0) {
+ stopSound(curSoundID);
+ }else {
+ soundManager.stopAll();
+ curSoundID = -1;
+ }
+ audioSupport = false;
+ var obj = document.getElementById('audio'); changeClass(obj,'isoff');
+ currentSlide();
+}
+function playSound(id) {
+ if(audioSupport && !swfUnloaded) {
+ var url, sid, vol, lps, cnum;
+ if(isNaN(id)) {
+ sid = id;
+ if(sid == "bgSound") {
+ cnum = parseInt(bgSoundItem);
+ }else {
+ cnum = getSoundID(id);
+ }
+ }else {
+ cnum = parseInt(id);
+ if(sound[cnum]) sid = sound[cnum]["id"];
+ }
+ if(sound[cnum] && sound[cnum]["url"]!='' && sid!=''){
+ url = sound[cnum]["url"];
+ vol = (sound[cnum]["volume"]!='')?getMaxVolume(sound[cnum]["volume"]):getMaxVolume(100);
+ lps = (sound[cnum]["loops"])?true:false;
+ if(lps) {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){soundManager.play(sid,{volume:getMaxVolume(sound[cnum]["volume"])});}});
+ }else {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){curSoundID=-1;}});
+ }
+ }
+ }
+}
+function getSoundID(str) {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && str == sound[i]["id"]) {
+ var id = i;
+ break;
+ }
+ }
+ return id;
+}
+function setVolume() {
+ var vol = document.getElementById('volumelist');
+ if(audioSupport && !swfUnloaded) {
+ audioVolume = parseInt(vol.value);
+ if(curSoundID >= 0) {
+ if(sound[curSoundID]) {
+ var sid = sound[curSoundID]["id"];
+ var vid = getMaxVolume(sound[curSoundID]["volume"]);
+ soundManager.setVolume(sid,vid);
+ }
+ }
+ }
+}
+function getMaxVolume(value) {
+ if(audioVolume>0) {var factor = audioVolume/100;}else {var factor = 0;}
+ return Math.max(0,Math.min(parseInt(value*factor),audioVolume));
+}
+function preloadSounds() {
+ var temp = ''; var parm = ''; var t = ''; var cl = '';
+ var objects = document.getElementsByTagName('object');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].type.toLowerCase() == 'audio/mp3' && objects[i].data != '') {
+ objects[i].width = 0; objects[i].height = 0;
+ if(objects[i].parentNode.tagName == 'DIV') {
+ cl = objects[i].parentNode.className.toLowerCase();
+ if(cl == 'presentation' || cl == 'slide') {
+ if(cl == 'presentation') {
+ t = parseInt(bgSoundItem);
+ }else {
+ t = parseInt(objects[i].parentNode.id.slice(5, objects[i].parentNode.id.length));
+ }
+ sound[t] = new Object();
+ if(t < bgSoundItem) {
+ sound[t]["id"] = objects[i].parentNode.id;
+ }else {
+ sound[t]["id"] = "bgSound";
+ }
+ sound[t]["url"] = objects[i].data;
+ sound[t]["volume"] = 100; sound[t]["loops"] = false;
+ if(objects[i].archive != '') {
+ parm = objects[i].archive.toLowerCase().split(',');
+ for (var j=0; j < parm.length; j++) {
+ if(parm[j] == 'loop') sound[t]["loops"] = true;
+ if(parm[j].search(/^volume/) != -1) {
+ var tmp = parm[j].split(':');
+ sound[t]["volume"] = parseInt(tmp[1]);
+ }
+ }
+ }
+ soundManager.createSound(sound[t]["id"],sound[t]["url"]);
+ }
+ }
+ }
+ }
+}
+// audio extension
+
+// help extension
+function createHelpReq() {
+ if(!document.getElementById("HelpReq")) {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "HelpReq";
+ if (pg.addEventListener) {
+ pg.addEventListener("onclick",dumpHelpReq,false);
+ } else if (pg.attachEvent) {
+ pg.attachEvent("onclick",dumpHelpReq);
+ }
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=90)";
+ } else {
+ pg.style.opacity = 0.9;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(64,64,64)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/help.jpg)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+ if(document.getElementById("HelpReq")) {
+ helpmode = true;
+ }
+ }
+}
+function dumpHelpReq() {
+ if(document.getElementById("HelpReq")) {
+ document.body.removeChild(document.getElementById('HelpReq'));
+ helpmode = false;
+ }
+}
+// help extension
+
+//DEBUG
+function ConsoleLog(value) {
+ if(window.console) {
+ window.console.log(value);
+ }
+}
+//DEBUG
+
+document.write('<style type="text/css" media="screen" id="blockStyle">.presentation, .layout {display: none; }</style>');
+
+if(!isIE && !isOp) {
+ document.write('<script type="text/javascript" src="'+s5Path+'ui/audio_support/soundmanager2.js"></script>');
+ if(typeof soundManager!="undefined") {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'audioDebug') {
+ var audioDebug = (allMetas[i].content == "true") ? true : false;
+ soundManager.defaultOptions.debugMode = audioDebug;
+ }
+ }
+ }
+}
+
+window.onload = createSlideShow;
+window.onresize = function(){setTimeout('windowChange()',5);} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/toggle_link.png
new file mode 100644
index 000000000..4588e2514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/toggle_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/toggle_over.png
new file mode 100644
index 000000000..400f613b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/toggle_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/volume_link.png
new file mode 100644
index 000000000..f362acd1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/volume_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/wrap.css
new file mode 100644
index 000000000..a37315552
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/wrap.css
@@ -0,0 +1,410 @@
+/********************************************************************
+Screen and Print Styles for the Wrap Plugin
+********************************************************************/
+
+/* tables in columns and boxes should span the whole width */
+.wrap_column table,
+.wrap_left table, .wrap_right table, .wrap_center table,
+.wrap_box table,
+.wrap_info table, .wrap_important table, .wrap_alert table, .wrap_tip table, .wrap_help table, .wrap_todo table, .wrap_download table {
+ width: 100%;
+}
+/* emulate a headline */
+.wrap_column em strong,
+.wrap_left em strong, .wrap_right em strong, .wrap_center em strong,
+.wrap_box em strong,
+.wrap_info em strong, .wrap_important em strong, .wrap_alert em strong, .wrap_tip em strong, .wrap_help em strong, .wrap_todo em strong, .wrap_download em strong {
+ font-size: 130%;
+ font-weight: bold;
+ font-style: normal;
+ display: block;
+}
+/* emulate a bigger headline with a bottom border */
+.wrap_column em strong em.u,
+.wrap_left em strong em.u, .wrap_right em strong em.u, .wrap_center em strong em.u,
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ font-size: 115%;
+ border-bottom: 1px solid __border__;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+}
+/* different bigger headline for safety notes */
+.wrap_danger em strong em.u, .wrap_warning em strong em.u, .wrap_caution em strong em.u, .wrap_notice em strong em.u, .wrap_safety em strong em.u {
+ font-size: 115%;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+ text-transform: uppercase;
+ border-bottom-width: 0;
+}
+/* change border colour of emulated headlines inside boxes to something more neutral
+ (to match all the different background colours) */
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ border-bottom-color: #999;
+}
+
+
+/* columns
+********************************************************************/
+
+.wrap_left,
+.wrap_column {
+ float: left;
+ margin-right: 1.5em;
+}
+.wrap_right {
+ float: right;
+ margin-left: 1.5em;
+}
+.wrap_center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+/*
+.wrap_column,
+.wrap_left,
+.wrap_right {
+ overflow: hidden;
+}
+*/
+.wrap_container {
+ margin-right: -1.5em;
+}
+
+
+/* alignments
+********************************************************************/
+
+.wrap_leftalign {
+ text-align: left;
+}
+.wrap_centeralign {
+ text-align: center;
+}
+.wrap_rightalign {
+ text-align: right;
+}
+.wrap_justify {
+ text-align: justify;
+}
+
+
+/* box
+********************************************************************/
+
+/* see styles for boxes and notes with icons in style.css */
+
+/*____________ rounded corners ____________*/
+/* (only for modern browsers) */
+
+div.wrap_round {
+ border-radius: 20px;
+ -moz-border-radius: 20px;
+ -webkit-border-radius: 20px;
+ -khtml-border-radius: 20px;
+}
+span.wrap_round {
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -khtml-border-radius: 2px;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_lo {
+ color: __text_neu__;
+ font-size: 85%;
+}
+div.wrap_em {
+ color: #c00;
+ font-weight: bold;
+}
+
+/* see styles for highlighted text in style.css */
+
+
+/* typography
+********************************************************************/
+
+/*____________ fonts ____________*/
+
+div.wrap_sansserif {
+ font-family: Verdana,Tahoma,Geneva,"DejaVu Sans","Bitstream Vera Sans","Liberation Sans", Arial,Helvetica,FreeSans,"Liberation Sans","Nimbus Sans L", sans-serif;
+}
+div.wrap_serif {
+ font-family: Georgia,Garamond,"Palatino Linotype","Book Antiqua",Palatino,Palladio,"URW Palladio L","Liberation Serif",Didot,Gentium,"Bitstream Charter","Century Schoolbook L", "Times New Roman",Times,"Nimbus Roman No9 L","FreeSerif", serif;
+}
+div.wrap_monospace {
+ font-family: Courier,"Courier New",FreeMono,"Nimbus Mono L","Liberation Mono", "Lucida Console",Monaco,"DejaVu Sans Mono","Bitstream Vera Sans Mono", monospace;
+}
+
+/*____________ font size ____________*/
+
+div.wrap_bigger {
+ font-size: 125%;
+}
+div.wrap_muchbigger {
+ font-size: 200%;
+}
+div.wrap_smaller {
+ font-size: 75%;
+}
+
+/*____________ font colours ____________*/
+
+div.wrap_fgred {
+ color: #900;
+}
+div.wrap_fggreen {
+ color: #090;
+}
+div.wrap_fgblue {
+ color: #009;
+}
+div.wrap_fgcyan {
+ color: #099;
+}
+div.wrap_fgviolet {
+ color: #909;
+}
+div.wrap_fgyellow {
+ color: #990;
+}
+div.wrap_fggrey {
+ color: #666;
+}
+div.wrap_fgblack {
+ color: #000;
+}
+
+/* see styles for background colours and white font colour in style.css */
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ indent ____________*/
+
+div.wrap_indent {
+ padding-left: 1.5em;
+}
+
+/*____________ outdent ____________*/
+
+div.wrap_outdent {
+ margin-left: -1.5em;
+}
+
+/*____________ word wrapping in pre ____________*/
+
+divdiv.wrap_prewrap pre {
+ white-space: pre-wrap;
+ word-wrap: break-word;/* for IE < 8 */
+ /* white-space: -moz-pre-wrap; for FF < 3 */
+}
+
+/*____________ spoiler ____________*/
+
+divdiv.wrap_spoiler {
+ margin-bottom: 1.5em;
+}
+/* see rest of spoiler styles in style.css */
+
+/*____________ clear float ____________*/
+
+div.wrap_clear {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ font-size: 1px;
+ visibility: hidden;
+ overflow: hidden;
+}
+
+/*____________ hide ____________*/
+
+div.wrap_hide {
+ display: none;
+}
+
+
+/* STYLE.CSS */
+
+/* box
+********************************************************************/
+
+.wrap_box {
+ background: __background_alt__;
+ color: __text__;
+/*
+ overflow: hidden;
+*/
+}
+div.wrap_box,
+div.wrap_danger, div.wrap_warning, div.wrap_caution, div.wrap_notice, div.wrap_safety {
+ padding: 1em 1em .5em;
+ margin-bottom: 1.5em;
+}
+span.wrap_box,
+span.wrap_danger, span.wrap_warning, span.wrap_caution, span.wrap_notice, span.wrap_safety {
+ padding: 0 .3em;
+}
+
+/*____________ notes with icons ____________*/
+
+/* general styles for all note divs */
+div.wrap_info, div.wrap_important, div.wrap_alert, div.wrap_tip, div.wrap_help, div.wrap_todo, div.wrap_download {
+ padding: 1em 1em .5em 70px;
+ margin-bottom: 1.5em;
+ min-height: 68px;
+ background-position: 10px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html div.wrap_info, * html div.wrap_important, * html div.wrap_alert, * html div.wrap_tip, * html div.wrap_help, * html div.wrap_todo, * html div.wrap_download {
+ height: 68px;
+}
+/* general styles for all note spans */
+span.wrap_info, span.wrap_important, span.wrap_alert, span.wrap_tip, span.wrap_help, span.wrap_todo, span.wrap_download {
+ padding: 0 2px 0 20px;
+ min-height: 20px;
+ background-position: 2px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html span.wrap_info, * html span.wrap_important, * html span.wrap_alert, * html span.wrap_tip, * html span.wrap_help, * html span.wrap_todo, * html span.wrap_download {
+ height: 20px;
+}
+
+/*____________ info ____________*/
+.wrap_info { background-color: #d1d7df; }
+div.wrap_info { background-image: url(../../../wrap/images/note/48/info.png); }
+span.wrap_info { background-image: url(../../../wrap/images/note/16/info.png); }
+
+/*____________ important ____________*/
+.wrap_important { background-color: #ffd39f; }
+div.wrap_important { background-image: url(../../../wrap/images/note/48/important.png); }
+span.wrap_important { background-image: url(../../../wrap/images/note/16/important.png); }
+
+/*____________ alert ____________*/
+.wrap_alert { background-color: #ffbcaf; }
+div.wrap_alert { background-image: url(../../../wrap/images/note/48/alert.png); }
+span.wrap_alert { background-image: url(../../../wrap/images/note/16/alert.png); }
+
+/*____________ tip ____________*/
+.wrap_tip { background-color: #fff79f; }
+div.wrap_tip { background-image: url(../../../wrap/images/note/48/tip.png); }
+span.wrap_tip { background-image: url(../../../wrap/images/note/16/tip.png); }
+
+/*____________ help ____________*/
+.wrap_help { background-color: #dcc2ef; }
+div.wrap_help { background-image: url(../../../wrap/images/note/48/help.png); }
+span.wrap_help { background-image: url(../../../wrap/images/note/16/help.png); }
+
+/*____________ todo ____________*/
+.wrap_todo { background-color: #c2efdd; }
+div.wrap_todo { background-image: url(../../../wrap/images/note/48/todo.png); }
+span.wrap_todo { background-image: url(../../../wrap/images/note/16/todo.png); }
+
+/*____________ download ____________*/
+.wrap_download { background-color: #d6efc2; }
+div.wrap_download { background-image: url(../../../wrap/images/note/48/download.png); }
+span.wrap_download { background-image: url(../../../wrap/images/note/16/download.png); }
+
+
+/*____________ safety notes ____________*/
+
+.wrap_danger {
+ background-color: #c00;
+ color: #fff;
+}
+.wrap_warning {
+ background-color: #f60;
+ color: #000;
+}
+.wrap_caution {
+ background-color: #ff0;
+ color: #000;
+}
+.wrap_notice {
+ background-color: #06f;
+ color: #fff;
+}
+.wrap_safety {
+ background-color: #090;
+ color: #fff;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_hi {
+ background-color: #ff9;
+}
+
+/* typography
+********************************************************************/
+
+/*____________ font colours ____________*/
+
+div.wrap_fgwhite {
+ color: #fff;
+}
+
+/*____________ background colours ____________*/
+
+div.wrap_bgred {
+ background-color: #fcc;
+}
+div.wrap_bggreen {
+ background-color: #cfc;
+}
+div.wrap_bgblue {
+ background-color: #ccf;
+}
+div.wrap_bgcyan {
+ background-color: #9ff;
+}
+div.wrap_bgviolet {
+ background-color: #f9f;
+}
+div.wrap_bgyellow {
+ background-color: #ff9;
+}
+div.wrap_bggrey {
+ background-color: #ccc;
+}
+div.wrap_bgwhite {
+ background-color: #fff;
+}
+div.wrap_bgblack {
+ background-color: #000;
+}
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ spoiler ____________*/
+
+div.wrap_spoiler {
+ background-color: __background__ !important;
+ color: __background__ !important;
+ border: 1px dotted red;
+}
+
+/*____________ only print ____________*/
+
+div.wrap_onlyprint {
+ display: none;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/zero_link.png
new file mode 100644
index 000000000..5610884d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/zero_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/zero_over.png
new file mode 100644
index 000000000..3a14a577e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/zero_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/audio_link.png
new file mode 100644
index 000000000..daa740c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/audio_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/audio_on.png
new file mode 100644
index 000000000..cd590aae9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/audio_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/audio_over.png
new file mode 100644
index 000000000..cf537a008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/audio_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/auto_link.png
new file mode 100644
index 000000000..1c2ca4817
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/auto_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/auto_on.png
new file mode 100644
index 000000000..4b0c923b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/auto_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/auto_over.png
new file mode 100644
index 000000000..dbea88975
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/auto_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/bkgr.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/bkgr.jpg
new file mode 100644
index 000000000..bf03b4ece
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/bkgr.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/blank.gif
new file mode 100644
index 000000000..75b945d25
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/blank.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/bodybg.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/bodybg.gif
new file mode 100644
index 000000000..5f448a16f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/bodybg.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/buzzsaw.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/buzzsaw.gif
new file mode 100644
index 000000000..24f086168
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/buzzsaw.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/buzzsaw.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/buzzsaw.png
new file mode 100644
index 000000000..4b2864ea2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/buzzsaw.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/delay_link.png
new file mode 100644
index 000000000..c4d99cd57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/delay_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/exit_link.png
new file mode 100644
index 000000000..1bfd38790
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/exit_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/exit_over.png
new file mode 100644
index 000000000..0fdd1c605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/exit_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/fade_link.png
new file mode 100644
index 000000000..482e4d53e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/fade_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/fade_on.png
new file mode 100644
index 000000000..e12561fb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/fade_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/fade_over.png
new file mode 100644
index 000000000..fb8943c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/fade_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/framing.css
new file mode 100644
index 000000000..14d8509e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/framing.css
@@ -0,0 +1,23 @@
+/* The following styles size, place, and layer the slide components.
+ Edit these if you want to change the overall slide layout.
+ The commented lines can be uncommented (and modified, if necessary)
+ to help you with the rearrangement process. */
+
+/* target = 1024x768 */
+
+div#header, div#footer, .slide {width: 100%; top: 0; left: 0;}
+div#header {top: 0; height: 3em; z-index: 1;}
+div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;}
+.slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;}
+div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;}
+div#controls form {position: absolute; bottom: 0; right: 0; width: 100%;
+ margin: 0;}
+#currentSlide {position: absolute; width: 10%; left: 45%; bottom: 1em; z-index: 10;}
+html>body #currentSlide {position: fixed;}
+
+/*
+div#header {background: #FCC;}
+div#footer {background: #CCF;}
+div#controls {background: #BBD;}
+div#currentSlide {background: #FFC;}
+*/
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/iepngfix.htc
new file mode 100644
index 000000000..bba2db756
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/iepngfix.htc
@@ -0,0 +1,42 @@
+<public:component>
+<public:attach event="onpropertychange" onevent="doFix()" />
+
+<script>
+
+// IE5.5+ PNG Alpha Fix v1.0 by Angus Turnbull http://www.twinhelix.com
+// Free usage permitted as long as this notice remains intact.
+
+// This must be a path to a blank image. That's all the configuration you need here.
+var blankImg = 'ui/default/blank.gif';
+
+var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
+
+function filt(s, m) {
+ if (filters[f]) {
+ filters[f].enabled = s ? true : false;
+ if (s) with (filters[f]) { src = s; sizingMethod = m }
+ } else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")';
+}
+
+function doFix() {
+ if ((parseFloat(navigator.userAgent.match(/MSIE (\S+)/)[1]) < 5.5) ||
+ (event && !/(background|src)/.test(event.propertyName))) return;
+
+ if (tagName == 'IMG') {
+ if ((/\.png$/i).test(src)) {
+ filt(src, 'image'); // was 'scale'
+ src = blankImg;
+ } else if (src.indexOf(blankImg) < 0) filt();
+ } else if (style.backgroundImage) {
+ if (style.backgroundImage.match(/^url[("']+(.*\.png)[)"']+$/i)) {
+ var s = RegExp.$1;
+ style.backgroundImage = '';
+ filt(s, 'crop');
+ } else filt();
+ }
+}
+
+doFix();
+
+</script>
+</public:component> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/last_link.png
new file mode 100644
index 000000000..4f158d35d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/last_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/last_over.png
new file mode 100644
index 000000000..a7b629995
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/last_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/list_link.png
new file mode 100644
index 000000000..7e299bb50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/list_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/loop_link.png
new file mode 100644
index 000000000..41e12cb15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/loop_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/loop_on.png
new file mode 100644
index 000000000..2ffcacae1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/loop_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/loop_over.png
new file mode 100644
index 000000000..9fe420153
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/loop_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/next_link.png
new file mode 100644
index 000000000..2b9f44c4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/next_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/next_over.png
new file mode 100644
index 000000000..25788124d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/next_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/notes_link.png
new file mode 100644
index 000000000..bb4a8ae37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/notes_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/notes_over.png
new file mode 100644
index 000000000..c6bfe69fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/notes_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/opera.css
new file mode 100644
index 000000000..9e9d2a3c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/opera.css
@@ -0,0 +1,7 @@
+/* DO NOT CHANGE THESE unless you really want to break Opera Show */
+.slide {
+ visibility: visible !important;
+ position: static !important;
+ page-break-before: always;
+}
+#slide0 {page-break-before: avoid;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/outline.css
new file mode 100644
index 000000000..62db519ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/outline.css
@@ -0,0 +1,15 @@
+/* don't change this unless you want the layout stuff to show up in the outline view! */
+
+.layout div, #footer *, #controlForm * {display: none;}
+#footer, #controls, #controlForm, #navLinks, #toggle {
+ display: block; visibility: visible; margin: 0; padding: 0;}
+#toggle {float: right; padding: 0.5em;}
+html>body #toggle {position: fixed; top: 0; right: 0;}
+
+/* making the outline look pretty-ish */
+
+#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
+#slide0 h1 {padding-top: 1.5em;}
+.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em;
+ border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
+#toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pause_link.png
new file mode 100644
index 000000000..2561cb4a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pause_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pause_on.png
new file mode 100644
index 000000000..2fc9c4a4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pause_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pause_over.png
new file mode 100644
index 000000000..7a7c80ddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pause_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pretty.css
new file mode 100644
index 000000000..1fe145578
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pretty.css
@@ -0,0 +1 @@
+/* Following are the presentation styles -- edit away! */ body {background: #F6EAD2 url(bkgr.jpg) left top no-repeat; color: #000; font-size: 2em;} :link, :visited {text-decoration: none; color: #00C;} #controls :active {color: #88A !important;} #controls :focus {outline: 1px dotted #227;} h1, h2, h3, h4 {font-size: 100%; margin: 0; padding: 0; font-weight: inherit;} ul, pre {margin: 0; line-height: 1em;} html, body {margin: 0; padding: 0;} blockquote, q {font-style: italic;} blockquote {padding: 0 2em 0.5em; margin: 0 1.5em 0.5em; text-align: center; font-size: 1em;} blockquote p {margin: 0;} blockquote i {font-style: normal;} blockquote b {display: block; margin-top: 0.5em; font-weight: normal; font-size: smaller; font-style: normal;} blockquote b i {font-style: italic;} kbd {font-weight: bold; font-size: 1em;} sup {font-size: smaller; line-height: 1px;} .slide code {padding: 2px 0.25em; font-weight: bold; color: #533;} .slide code.bad, code del {color: red;} .slide code.old {color: silver;} .slide pre {padding: 0; margin: 0.25em 0 0.5em 0.5em; color: #533; font-size: 90%;} .slide pre code {display: block;} .slide ul {margin-left: 5%; margin-right: 7%; list-style: disc;} .slide li {margin-top: 0.75em; margin-right: 0;} .slide ul ul {line-height: 1;} .slide ul ul li {margin: .2em; font-size: 85%; list-style: square;} .slide img.leader {display: block; margin: 0 auto;} div#header, div#footer {background: #000; color: #fdf6e7; font-family: Verdana, Helvetica, sans-serif;} div#header {background: #000 url(buzzsaw.gif) left top no-repeat; line-height: 1px;} div#footer {font-size: 0.5em; font-weight: bold; padding: 1em 0;} #footer h1, #footer h2 {display: block; padding: 0 1em;} #footer h2 {} div.long {font-size: 0.75em;} .slide h1 {position: absolute; top: 0.4em; left: 150px; z-index: 1; margin: 0; padding: 0.3em 0 0 50px; white-space: nowrap; font: bold 150%/1em Helvetica, sans-serif; text-transform: capitalize; color: #DDE; background: #000;} .slide h3 {font-size: 130%;} h1 abbr {font-variant: small-caps;} div#controls {position: absolute; left: 0; bottom: 0; width: 100%; text-align: center; font: bold 1em Verdana, Arial, Helvetica, sans-serif;} html>body div#controls {background: transparent; position: fixed; padding: 0; top: auto; text-align: center;} #controls #sheet {display: none;} #controls #controlForm {height: 32px; width: 100%; text-align: center; vertical-align: middle;} #controls #navLinks {border-top: 1px solid #999; overflow: hidden; padding: 0; margin: 0; height: 32px; width: 100%; background-color: #808080; text-align: center; vertical-align: middle; white-space: nowrap;} #controls #navLinks ul {margin: 0 auto; padding: 0; height: 32px; width: 500px; white-space: nowrap; text-align: center;} #controls #navLinks ul li {list-style: none; display: inline; margin: 0; padding: 0; float: left; height: 32px; width: 32px; text-align: center; background-color: transparent;} #controls #navLinks ul li.vr {list-style: none; display: inline; margin: 0px 2px; padding: 0; float: left; height: 32px; width: 1px; text-align: center; background-color: #606060;} #controls #navLinks ul li a {margin: 0; padding: 0; float: left; height: 32px; width: 32px; background-color: transparent;} #controls #navLinks ul li#exit {background: url(exit_link.png) no-repeat top left;} #controls #navLinks ul li#exit a:hover {background: url(exit_over.png) no-repeat bottom left;} #controls #navLinks ul li#toggle {background: url(toggle_link.png) no-repeat top left;} #controls #navLinks ul li#toggle a:hover {background: url(toggle_over.png) no-repeat bottom left;} #controls #navLinks ul li#show-notes {background: url(notes_link.png) no-repeat top left;} #controls #navLinks ul li#show-notes a:hover {background: url(notes_over.png) no-repeat bottom left;} #controls #navLinks ul li#zero {background: url(zero_link.png) no-repeat top left;} #controls #navLinks ul li#zero a:hover {background: url(zero_over.png) no-repeat bottom left;} #controls #navLinks ul li#prev {background: url(prev_link.png) no-repeat top left;} #controls #navLinks ul li#prev a:hover {background: url(prev_over.png) no-repeat bottom left;} #controls #navLinks ul li#next {background: url(next_link.png) no-repeat top left;} #controls #navLinks ul li#next a:hover {background: url(next_over.png) no-repeat bottom left;} #controls #navLinks ul li#last {background: url(last_link.png) no-repeat top left;} #controls #navLinks ul li#last a:hover {background: url(last_over.png) no-repeat bottom left;} #controls #navLinks ul li#lst {background: url(list_link.png) no-repeat top left;} #controls #navLinks ul li#fade a.isoff {background: url(fade_link.png) no-repeat top left;} #controls #navLinks ul li#fade a.ison {background: url(fade_on.png) no-repeat top right;} #controls #navLinks ul li#fade a:hover {background: url(fade_over.png) no-repeat bottom left;} #controls #navLinks ul li#audio {background: url(audio_link.png) no-repeat top left;} #controls #navLinks ul li#audio a.isoff {background: url(audio_link.png) no-repeat top left;} #controls #navLinks ul li#audio a.ison {background: url(audio_on.png) no-repeat top right;} #controls #navLinks ul li#audio a:hover {background: url(audio_over.png) no-repeat bottom left;} #controls #navLinks ul li#vol {background: url(volume_link.png) no-repeat top left;} #controls #navLinks ul li#auto a.isoff {background: url(auto_link.png) no-repeat top left;} #controls #navLinks ul li#auto a.ison {background: url(auto_on.png) no-repeat top right;} #controls #navLinks ul li#auto a:hover {background: url(auto_over.png) no-repeat bottom left;} #controls #navLinks ul li#pause a.isoff {background: url(pause_link.png) no-repeat top left;} #controls #navLinks ul li#pause a.ison {background: url(pause_on.png) no-repeat top right;} #controls #navLinks ul li#pause a:hover {background: url(pause_over.png) no-repeat bottom left;} #controls #navLinks ul li#loop a.isoff {background: url(loop_link.png) no-repeat top left;} #controls #navLinks ul li#loop a.ison {background: url(loop_on.png) no-repeat top right;} #controls #navLinks ul li#loop a:hover {background: url(loop_over.png) no-repeat bottom left;} #controls #navLinks ul li#del {background: url(delay_link.png) no-repeat top left;} #jumplist, #volumelist, #delaylist {padding: 0; margin: 0; width: 32px; height: 32px; cursor: n-resize;} #currentSlide {white-space: nowrap; text-align: center; margin-bottom: -0.5em; font-size: 0.5em; background-color: transparent; color: #999;} #guru {position: absolute; visibility: visible; left: 0px; top: 0px; padding: 4px; width: 99%; height: auto; text-align: center; background-color: black; z-index: 10;} #guru div {border: solid 3px red; padding: 4px; font-family: monospace; font-size: 60%; width: auto; height: auto; color: red; text-align: center;} #slide0 {padding-top: 3.5em; font-size: 90%;} #slide0 h1 {position: static; margin: 1em 0 0; padding: 0; font: bold 2em Verdana, Arial, Helvetica, sans-serif; font-variant: small-caps; text-shadow: 0.1em 0.1em 0.1em #666; white-space: normal; color: #222; background-color: transparent;} #slide0 h2 {font: bold italic 1em Arial, Helvetica, sans-serif; margin: 0.25em;} #slide0 h3 {margin-top: 1.5em; font-size: 1.5em;} #slide0 h4 {margin-top: 0; font-size: 1em;} ul.urls {list-style: none; display: inline; margin: 0;} .urls li {display: inline; margin: 0;} .external {border-bottom: 1px dotted gray;} html>body .external {border-bottom: none;} .external:after {content: " \274F"; font-size: smaller; color: #999;} .incremental, .incremental *, .incremental *:after {color: #ccc; visibility: visible;} img.incremental, canvas.incremental {visibility: hidden;} .slide .current {color: #B02;} /* diagnostics li:after {content: " [" attr(class) "]"; color: #F88;} */ table.piechart, table.barchart, table.linechart { border-spacing: 0.3em 0.15em; } table.piechart tr th, table.barchart tr th, table.linechart tr th { white-space: nowrap; } table.piechart tr td, table.barchart tr td, table.linechart tr td { vertical-align: top; white-space: nowrap; } table.piechart tr td.col, table.barchart tr td.col, table.linechart tr td.col { border-bottom: 1px solid #555; border-right: 1px solid #555; } table.fs90 tr td, table.fs90 tr th, div.fs90, pre.fs90, p.fs90 ,ul.fs90 {font-size: 0.9em; } table.fs75 tr td, table.fs75 tr th, div.fs75, pre.fs75, p.fs75 ,ul.fs75 {font-size: 0.75em; } table.fs66 tr td, table.fs66 tr th, div.fs66, pre.fs66, p.fs66 ,ul.fs66 {font-size: 0.66em; } table.fs50 tr td, table.fs50 tr th, div.fs50, pre.fs50, p.fs50 ,ul.fs50 {font-size: 0.5em; } #soundmanager-debug {position:fixed; top:0px; right:0px; width:30em; height:20em; overflow:auto; border:1px solid red; padding:1em; margin:2em; font-family:"sans serif"; font-size: 12px;color: black; background-color:#f6f6f6; z-index: 100;} #soundmanager-debug code {font-size: 11px;} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/prev_link.png
new file mode 100644
index 000000000..c31d21350
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/prev_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/prev_over.png
new file mode 100644
index 000000000..6fef4fa52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/prev_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/print.css
new file mode 100644
index 000000000..e7a71d145
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/print.css
@@ -0,0 +1 @@
+/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul {page-break-inside: avoid; visibility: visible !important;} h1 {page-break-after: avoid;} body {font-size: 12pt; background: white;} * {color: black;} #slide0 h1 {font-size: 200%; border: none; margin: 0.5em 0 0.25em;} #slide0 h3 {margin: 0; padding: 0;} #slide0 h4 {margin: 0 0 0.5em; padding: 0;} #slide0 {margin-bottom: 3em;} h1 {border-top: 2pt solid gray; border-bottom: 1px dotted silver;} .extra {background: transparent !important;} div.extra, pre.extra, .example {font-size: 10pt; color: #333;} ul.extra a {font-weight: bold;} p.example {display: none;} #header {display: none;} #footer h1 {margin: 0; border-bottom: 1px solid; color: gray; font-style: italic;} #footer h2, #controls {display: none;} /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .layout, .layout * {display: none !important;} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/s5-core.css
new file mode 100644
index 000000000..86444e041
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/s5-core.css
@@ -0,0 +1,9 @@
+/* Do not edit or override these styles! The system will likely break if you do. */
+
+div#header, div#footer, div#controls, .slide {position: absolute;}
+html>body div#header, html>body div#footer,
+ html>body div#controls, html>body .slide {position: fixed;}
+.handout {display: none;}
+.layout {display: block;}
+.slide, .hideme, .incremental {visibility: hidden;}
+#slide0 {visibility: visible;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/slides.css
new file mode 100644
index 000000000..0786d7dbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/slides.css
@@ -0,0 +1,3 @@
+@import url(s5-core.css); /* required to make the slide show run at all */
+@import url(framing.css); /* sets basic placement and size of slide components */
+@import url(pretty.css); /* stuff that makes the slides look better than blah */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/slides.js
new file mode 100644
index 000000000..510a04c0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/slides.js
@@ -0,0 +1,2812 @@
+// S5 1.3beta7 (18-Apr-2007) advanced version by C. Effenberger
+// Please see http://s5.netzgesta.de/ for more information
+// based on S5 v1.2a1 slides.js -- released into the Public Domain
+// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
+// about all the wonderful and talented contributors to this code!
+// audio extension: soundmanager2 is NOT Public Domain
+// Please see http://www.schillmania.com/projects/soundmanager2/ for information
+
+var undef;
+var slideCSS = '';
+var snum = 0;
+var smax = 1;
+var incpos = 0;
+var number = undef;
+var firstTime = 1;
+var s5mode = true;
+var helpmode = false;
+var defaultView = 'slideshow'; //outline
+var controlVis = 'visible';
+var s5Path = 'lib/plugins/s5reloaded/';
+
+// scalable images extension
+var empx = 0;
+var images = new Array();
+var canvas = new Array();
+var medias = new Array();
+var piecharts = new Array();
+var barcharts = new Array();
+var linecharts = new Array();
+// scalable images extension
+
+// transition extension
+var tranSitions = false;
+var fadeModus = false;
+var fadeDuration = 500;
+var incrDuration = 250;
+var opac = 1;
+var cid = '';
+var nid = '';
+var tid = '';
+var jl = '';
+// transition extension
+
+// autoplay extension
+var autoMatic = false;
+var playLoop = false;
+var playPause = false;
+var autoRun = false;
+var playDelay = 5000;
+var remainDer = 0;
+var incrDelay = 0;
+// autoplay extension
+
+// audio extension
+var sound = new Array();
+var audioSupport = false;
+var audioVolume = 100;
+var audioError = false;
+var swfUnloaded = true;
+var bgSoundItem = 9999;
+var curSoundID = -1;
+// audio extension
+
+// panel extension
+var imgWidth = 32;
+var imgHeight = 32;
+// panel extension
+
+// canvas chart extension
+var canvasSupport = false;
+var ChartData = new Array();
+var colorSlice = new Array();
+var font = document.createElement("img");
+font.setAttribute("src", s5Path+"ui/graphic_support/numeric.png");
+signs = {
+ '0': {sx: 0, sy: 0, sw: 48, sh: 64},
+ '1': {sx: 48, sy: 0, sw: 48, sh: 64},
+ '2': {sx: 96, sy: 0, sw: 48, sh: 64},
+ '3': {sx: 144, sy: 0, sw: 48, sh: 64},
+ '4': {sx: 192, sy: 0, sw: 48, sh: 64},
+ '5': {sx: 240, sy: 0, sw: 48, sh: 64},
+ '6': {sx: 288, sy: 0, sw: 48, sh: 64},
+ '7': {sx: 336, sy: 0, sw: 48, sh: 64},
+ '8': {sx: 384, sy: 0, sw: 48, sh: 64},
+ '9': {sx: 432, sy: 0, sw: 48, sh: 64},
+ '%': {sx: 480, sy: 0, sw: 48, sh: 64},
+ '.': {sx: 528, sy: 0, sw: 24, sh: 64}
+};
+var colorNames= new Array();
+colorNames["black"]="#000000"; colorNames["maroon"]="#800000";
+colorNames["green"]="#008000"; colorNames["olive"]="#808000";
+colorNames["navy"]="#000080"; colorNames["purple"]="#800080";
+colorNames["teal"]="#008080"; colorNames["gray"]="#808080";
+colorNames["silver"]="#C0C0C0"; colorNames["red"]="#FF0000";
+colorNames["lime"]="#00FF00"; colorNames["yellow"]="#FFFF00";
+colorNames["blue"]="#0000FF"; colorNames["fuchsia"]="#FF00FF";
+colorNames["aqua"]="#00FFFF"; colorNames["white"]="#FFFFFF";
+colorNames["aliceblue"]="#F0F8FF"; colorNames["antiquewhite"]="#FAEBD7";
+colorNames["aquamarine"]="#7FFFD4"; colorNames["azure"]="#F0FFFF";
+colorNames["beige"]="#F5F5DC"; colorNames["blueviolet"]="#8A2BE2";
+colorNames["brown"]="#A52A2A"; colorNames["burlywood"]="#DEB887";
+colorNames["cadetblue"]="#5F9EA0"; colorNames["chartreuse"]="#7FFF00";
+colorNames["chocolate"]="#D2691E"; colorNames["coral"]="#FF7F50";
+colorNames["cornflowerblue"]="#6495ED"; colorNames["cornsilk"]="#FFF8DC";
+colorNames["crimson"]="#DC143C"; colorNames["darkblue"]="#00008B";
+colorNames["darkcyan"]="#008B8B"; colorNames["darkgoldenrod"]="#B8860B";
+colorNames["darkgray"]="#A9A9A9"; colorNames["darkgreen"]="#006400";
+colorNames["darkkhaki"]="#BDB76B"; colorNames["darkmagenta"]="#8B008B";
+colorNames["darkolivegreen"]="#556B2F"; colorNames["darkorange"]="#FF8C00";
+colorNames["darkorchid"]="#9932CC"; colorNames["darkred"]="#8B0000";
+colorNames["darksalmon"]="#E9967A"; colorNames["darkseagreen"]="#8FBC8F";
+colorNames["darkslateblue"]="#483D8B"; colorNames["darkslategray"]="#2F4F4F";
+colorNames["darkturquoise"]="#00CED1"; colorNames["darkviolet"]="#9400D3";
+colorNames["deeppink"]="#FF1493"; colorNames["deepskyblue"]="#00BFFF";
+colorNames["dimgray"]="#696969"; colorNames["dodgerblue"]="#1E90FF";
+colorNames["firebrick"]="#B22222"; colorNames["floralwhite"]="#FFFAF0";
+colorNames["forestgreen"]="#228B22"; colorNames["gainsboro"]="#DCDCDC";
+colorNames["ghostwhite"]="#F8F8FF"; colorNames["gold"]="#FFD700";
+colorNames["goldenrod"]="#DAA520"; colorNames["greenyellow"]="#ADFF2F";
+colorNames["honeydew"]="#F0FFF0"; colorNames["hotpink"]="#FF69B4";
+colorNames["indianred"]="#CD5C5C"; colorNames["indigo"]="#4B0082";
+colorNames["ivory"]="#FFFFF0"; colorNames["khaki"]="#F0E68C";
+colorNames["lavender"]="#E6E6FA"; colorNames["lavenderblush"]="#FFF0F5";
+colorNames["lawngreen"]="#7CFC00"; colorNames["lemonchiffon"]="#FFFACD";
+colorNames["lightblue"]="#ADD8E6"; colorNames["lightcoral"]="#F08080";
+colorNames["lightcyan"]="#E0FFFF"; colorNames["lightgoldenrodyellow"]="#FAFAD2";
+colorNames["lightgreen"]="#90EE90"; colorNames["lightgrey"]="#D3D3D3";
+colorNames["lightpink"]="#FFB6C1"; colorNames["lightsalmon"]="#FFA07A";
+colorNames["lightseagreen"]="#20B2AA"; colorNames["lightskyblue"]="#87CEFA";
+colorNames["lightslategray"]="#778899"; colorNames["lightsteelblue"]="#B0C4DE";
+colorNames["lightyellow"]="#FFFFE0"; colorNames["limegreen"]="#32CD32";
+colorNames["linen"]="#FAF0E6"; colorNames["mediumaquamarine"]="#66CDAA";
+colorNames["mediumblue"]="#0000CD"; colorNames["mediumorchid"]="#BA55D3";
+colorNames["ediumpurple"]="#9370D"; colorNames["mediumseagreen"]="#3CB371";
+colorNames["mediumslateblue"]="#7B68EE"; colorNames["mediumspringgreen"]="#00FA9A";
+colorNames["mediumturquoise"]="#48D1CC"; colorNames["mediumvioletred"]="#C71585";
+colorNames["midnightblue"]="#191970"; colorNames["mintcream"]="#F5FFFA";
+colorNames["mistyrose"]="#FFE4E1"; colorNames["moccasin"]="#FFE4B5";
+colorNames["navajowhite"]="#FFDEAD"; colorNames["oldlace"]="#FDF5E6";
+colorNames["olivedrab"]="#6B8E23"; colorNames["orange"]="#FFA500";
+colorNames["orangered"]="#FF4500"; colorNames["orchid"]="#DA70D6";
+colorNames["palegoldenrod"]="#EEE8AA"; colorNames["palegreen"]="#98FB98";
+colorNames["paleturquoise"]="#AFEEEE"; colorNames["palevioletred"]="#DB7093";
+colorNames["papayawhip"]="#FFEFD5"; colorNames["peachpuff"]="#FFDAB9";
+colorNames["peru"]="#CD853F"; colorNames["pink"]="#FFC0CB";
+colorNames["plum"]="#DDA0DD"; colorNames["powderblue"]="#B0E0E6";
+colorNames["rosybrown"]="#BC8F8F"; colorNames["royalblue"]="#4169E1";
+colorNames["saddlebrown"]="#8B4513"; colorNames["salmon"]="#FA8072";
+colorNames["sandybrown"]="#F4A460"; colorNames["seagreen"]="#2E8B57";
+colorNames["seashell"]="#FFF5EE"; colorNames["sienna"]="#A0522D";
+colorNames["skyblue"]="#87CEEB"; colorNames["slateblue"]="#6A5ACD";
+colorNames["slategray"]="#708090"; colorNames["snow"]="#FFFAFA";
+colorNames["springgreen"]="#00FF7F"; colorNames["steelblue"]="#4682B4";
+colorNames["tan"]="#D2B48C"; colorNames["thistle"]="#D8BFD8";
+colorNames["tomato"]="#FF6347"; colorNames["turquoise"]="#40E0D0";
+colorNames["violet"]="#EE82EE"; colorNames["wheat"]="#F5DEB3";
+colorNames["whitesmoke"]="#F5F5F5"; colorNames["yellowgreen"]="#9ACD32";
+var canvas_bgcolor = "";
+var canvas_width = 200;
+var canvas_height = 200;
+var canvas_noshade = 0;
+var canvas_nofill = 0;
+var canvas_noshadow = 0;
+var canvas_htmltext = 0;
+var canvas_imgtext = 0;
+var canvas_notext = 0;
+// canvas chart extension
+
+var s5NotesWindow;
+var s5NotesWindowLoaded = false;
+var previousSlide = 0;
+var presentationStart = new Date();
+var slideStart = new Date();
+
+var countdown = {
+ timer: 0,
+ state: 'pause',
+ start: new Date(),
+ end: 0,
+ remaining: 0
+};
+
+var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
+if(isIE) var notIE7 = parseInt(navigator.appVersion) < 7 ? 1 : 0;
+var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
+var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
+var isS2 = navigator.userAgent.indexOf('Safari') >= 2 ? 1 : 0;
+
+function hasClass(object, className) {
+ if (!object.className) return false;
+ return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
+}
+
+function hasValue(object, value) {
+ if (!object) return false;
+ return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
+}
+
+function removeClass(object,className) {
+ if (!object || !hasClass(object,className)) return;
+ object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
+}
+
+function addClass(object,className) {
+ if (!object || hasClass(object, className)) return;
+ if (object.className) {
+ object.className += ' '+className;
+ } else {
+ object.className = className;
+ }
+}
+
+function changeClass(object,className) {
+ if (!object) return;
+ object.firstChild.className = className;
+}
+
+function GetElementsWithClassName(elementName,className) {
+ var allElements = document.getElementsByTagName(elementName);
+ var elemColl = new Array();
+ for (var i = 0; i< allElements.length; i++) {
+ if (hasClass(allElements[i], className)) {
+ elemColl[elemColl.length] = allElements[i];
+ }
+ }
+ return elemColl;
+}
+
+function isParentOrSelf(element, id) {
+ if (element == null || element.nodeName=='BODY') return false;
+ else if (element.id == id) return true;
+ else return isParentOrSelf(element.parentNode, id);
+}
+
+function nodeValue(node) {
+ var result = "";
+ if (node.nodeType == 1) {
+ var children = node.childNodes;
+ for (var i = 0; i < children.length; ++i) {
+ result += nodeValue(children[i]);
+ }
+ }
+ else if (node.nodeType == 3) {
+ result = node.nodeValue;
+ }
+ return(result);
+}
+
+function slideLabel() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var list = document.getElementById('jumplist');
+ smax = slideColl.length;
+ for (var n = 0; n < smax; n++) {
+ var obj = slideColl[n];
+ var did = 'slide' + n.toString();
+ obj.setAttribute('id',did);
+ var otext = '';
+ var menu = obj.firstChild;
+ if (!menu) continue; // to cope with empty slides
+ while (menu && menu.nodeType == 3) {
+ menu = menu.nextSibling;
+ }
+ if (!menu) continue; // to cope with slides with only text nodes
+ var menunodes = menu.childNodes;
+ for (var o = 0; o < menunodes.length; o++) {
+ otext += nodeValue(menunodes[o]);
+ }
+ list.options[list.length] = new Option(n + ' : ' + otext, n);
+ }
+}
+
+function currentSlide() {
+ var cs, at, fd, ss;
+ if (document.getElementById) {
+ cs = document.getElementById('currentSlide');
+ } else {
+ cs = document.currentSlide;
+ }
+ fd = fadeModus?"F":"&ndash;";
+ ss = audioSupport?"S":"&ndash;";
+ at = (autoMatic?(playPause?"||":(playLoop?"&gt;0":"&gt;|")):"&ndash;&ndash;");
+ cs.innerHTML = '<div id="plink" nowrap="nowrap">' +
+ '<span id="csFade">[' + fd + ss + ']<\/span>&nbsp;' +
+ '<span id="csHere"><strong>' + snum + '<\/strong><\/span>' +
+ '<span id="csSep">\/<\/span>' +
+ '<span id="csTotal">' + (smax-1) + '<\/span>&nbsp;' +
+ '<span id="csAuto">[' + at + ']<\/span>' +
+ '<\/div>';
+
+ if (snum == 0) {
+ cs.style.visibility = 'hidden';
+ } else {
+ cs.style.visibility = 'visible';
+ }
+}
+
+function go(step) {
+ if (document.getElementById('slideProj').disabled || step == 0) return;
+ jl = document.getElementById('jumplist');
+ cid = 'slide' + snum;
+ var ce = document.getElementById(cid);
+ if (incrementals[snum].length > 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ removeClass(incrementals[snum][i], 'current');
+ removeClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ if (step != 'j') {
+ snum += step;
+ lmax = smax - 1;
+ if (snum > lmax) snum = lmax;
+ if (snum < 0) snum = 0;
+ }else {
+ snum = parseInt(jl.value);
+ }
+ nid = 'slide' + snum;
+ var ne = document.getElementById(nid);
+ if (!ne) {
+ ne = document.getElementById('slide0');
+ nid = 'slide0';
+ snum = 0;
+ }
+ if (step < 0) {
+ incpos = incrementals[snum].length
+ }else {
+ incpos = 0;
+ }
+ if (incrementals[snum].length > 0 && incpos == 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ if (hasClass(incrementals[snum][i], 'current')) {
+ incpos = i + 1;
+ }else {
+ addClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ }
+ if (incrementals[snum].length > 0 && incpos > 0) {
+ addClass(incrementals[snum][incpos - 1], 'current');
+ }
+ var guru = document.getElementById('guru');
+ if(guru && snum==0) {
+ guru.style.visibility = 'visible';
+ }else if(guru && snum>0) {
+ guru.style.visibility = 'hidden';
+ }
+ if(tranSitions && s5mode && fadeModus) {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {fadeoutSound(curSoundID,true); } // audio support
+ }
+ changeOpac(0,nid);
+ changeOpac(100,cid);
+ ce.style.visibility = 'visible';
+ shiftOpacity(cid,fadeDuration);
+ window.setTimeout("changeSlides()",fadeDuration);
+ }else {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {stopSound(curSoundID); } // audio support
+ }
+ ce.style.visibility = 'hidden';
+ if (isOp) location.hash = nid;
+ ne.style.visibility = 'visible';
+ finishSlides();
+ }
+}
+
+function changeSlides() {
+ if(nid != cid) changeOpac(100,cid);
+ document.getElementById(cid).style.visibility = 'hidden';
+ document.getElementById(nid).style.visibility = 'visible';
+ if (isOp) location.hash = nid;
+ shiftOpacity(nid,fadeDuration);
+ window.setTimeout("finishSlides()",fadeDuration);
+}
+
+function finishSlides() {
+ jl.selectedIndex = snum;
+ currentSlide();
+ loadNote();
+ permaLink();
+ number = undef;
+ if(sound[getSoundID(nid)]) {
+ playSound(nid); // audio support
+ }else if(sound[bgSoundItem] && curSoundID != bgSoundItem) {
+ playSound(bgSoundItem); // audio support
+ }
+}
+
+function goTo(target) {
+ if (target >= smax || target == snum) return;
+ go(target - snum);
+}
+
+function subgo(step) {
+ if (step > 0) {
+ removeClass(incrementals[snum][incpos - 1],'current');
+ removeClass(incrementals[snum][incpos], 'incremental');
+ if(tranSitions && s5mode && fadeModus) {
+ if(!incrementals[snum][incpos].id) {
+ var tmp = new Date(); tid = "inc" + String(tmp.getTime());
+ incrementals[snum][incpos].id = tid;
+ }else {
+ tid = incrementals[snum][incpos].id;
+ }
+ if(typeof(incrementals[snum][incpos].src) != "undefined" || incrementals[snum][incpos].getContext) {
+ changeOpac(0,tid);
+ addClass(incrementals[snum][incpos],'current');
+ shiftOpacity(tid,incrDuration);
+ setTimeout("nextInc()",incrDuration);
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ } else {
+ incpos--;
+ removeClass(incrementals[snum][incpos],'current');
+ addClass(incrementals[snum][incpos], 'incremental');
+ addClass(incrementals[snum][incpos - 1],'current');
+ loadNote();
+ }
+}
+
+function nextInc() {
+ incpos++;
+ loadNote();
+}
+
+function toggle() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ var guru = document.getElementById('guru');
+ if (!slides.disabled) {
+ stopPlay();
+ if(audioSupport && !swfUnloaded) stopAllSounds();
+ slides.disabled = true;
+ outline.disabled = false;
+ s5mode = false;
+ fontSize(1,'em');
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'visible';
+ }
+ if(guru) guru.style.visibility = 'hidden';
+ } else {
+ slides.disabled = false;
+ outline.disabled = true;
+ s5mode = true;
+ fontScale();
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'hidden';
+ }
+ slideColl[snum].style.visibility = 'visible';
+ if(guru && snum==0) guru.style.visibility = 'visible';
+ }
+}
+
+function showHide(action) {
+ var obj = GetElementsWithClassName('*','hideme')[0];
+ switch (action) {
+ case 's':
+ obj.style.visibility = 'visible';
+ break;
+ case 'h':
+ obj.style.visibility = 'hidden';
+ break;
+ case 'k':
+ if (obj.style.visibility != 'visible') {
+ obj.style.visibility = 'visible';
+ } else {
+ obj.style.visibility = 'hidden';
+ }
+ break;
+ }
+}
+
+function keys(key) {
+ if (!key) {
+ key = event;
+ key.which = key.keyCode;
+ }
+ if (helpmode) {
+ dumpHelpReq();
+ return;
+ }
+ if (key.which == 84 && !isOp) {
+ toggle();
+ return;
+ }
+ if (s5mode) {
+ if (autoMatic) {
+ switch (key.which) {
+ case 70: // f/ading on/off
+ switchFade();
+ break;
+ case 83: // s/ound on/off
+ toggleSounds();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 65: // a/utoplay on/off
+ stopPlay();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 80: // p/ause
+ case 32: // spacebar
+ pausePlay();
+ break;
+ }
+ }else {
+ switch (key.which) {
+ case 8: // backspace = HELP
+ createHelpReq();
+ break;
+ case 10: // return
+ case 13: // enter
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ if(number != undef) {
+ goTo(number);
+ break;
+ }
+ case 32: // spacebar
+ case 34: // page down
+ case 39: // rightkey
+ case 40: // downkey
+ if(number != undef) {
+ go(number);
+ } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ break;
+ case 33: // page up
+ case 37: // leftkey
+ case 38: // upkey
+ if(number != undef) {
+ go(-1 * number);
+ } else if (!incrementals[snum] || incpos <= 0) {
+ go(-1);
+ } else {
+ subgo(-1);
+ }
+ break;
+ case 65: // a/utoplay
+ startPlay();
+ break;
+ case 72: // h
+ case 36: // home
+ goTo(0);
+ break;
+ case 69: // e
+ case 35: // end
+ goTo(smax-1);
+ break;
+ case 70: // f/ade transitions on/off
+ switchFade();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 83: // s/ound support on/off
+ toggleSounds();
+ break;
+ case 27: // escape
+ case 81: // q
+ if(!isOp) byby();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 78: // n
+ createNotesWindow();
+ break;
+ }
+ if (key.which < 48 || key.which > 57) {
+ number = undef;
+ } else {
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
+ }
+ }
+ }
+ return false;
+}
+
+function clicker(e) {
+ number = undef;
+ var target;
+ if (window.event) {
+ target = window.event.srcElement;
+ e = window.event;
+ } else {
+ target = e.target;
+ }
+ if (target.href != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
+ if (!helpmode) {
+ if (!e.which || e.which == 1) {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ }
+ } else {
+ dumpHelpReq();
+ }
+}
+
+function findSlide(hash) {
+ var target = null;
+ var slides = GetElementsWithClassName('*','slide');
+ for (var i = 0; i < slides.length; i++) {
+ var targetSlide = slides[i];
+ if ( (targetSlide.name && targetSlide.name == hash)
+ || (targetSlide.id && targetSlide.id == hash) ) {
+ target = targetSlide;
+ break;
+ }
+ }
+ while(target != null && target.nodeName != 'BODY') {
+ if (hasClass(target, 'slide')) {
+ return parseInt(target.id.slice(5));
+ }
+ target = target.parentNode;
+ }
+ return null;
+}
+
+function slideJump() {
+ if (window.location.hash == null) return;
+ var sregex = /^#slide(\d+)$/;
+ var matches = sregex.exec(window.location.hash);
+ var dest = null;
+ if (matches != null) {
+ dest = parseInt(matches[1]);
+ } else {
+ dest = findSlide(window.location.hash.slice(1));
+ }
+ if (dest != null)
+ go(dest - snum);
+}
+
+function fixLinks() {
+ var thisUri = window.location.href;
+ thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
+ var aelements = document.getElementsByTagName('A');
+ for (var i = 0; i < aelements.length; i++) {
+ var a = aelements[i].href;
+ var slideID = a.match('\#slide[0-9]{1,2}');
+ if ((slideID) && (slideID[0].slice(0,1) == '#')) {
+ var dest = findSlide(slideID[0].slice(1));
+ if (dest != null) {
+ if (aelements[i].addEventListener) {
+ aelements[i].addEventListener("click", new Function("e",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "if (e.preventDefault) e.preventDefault();"), true);
+ } else if (aelements[i].attachEvent) {
+ aelements[i].attachEvent("onclick", new Function("",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "event.returnValue = false;"));
+ }
+ }
+ }
+ }
+}
+
+function externalLinks() {
+ if (!document.getElementsByTagName) return;
+ var anchors = document.getElementsByTagName('a');
+ for (var i=0; i<anchors.length; i++) {
+ var anchor = anchors[i];
+ if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
+ anchor.target = '_blank';
+ addClass(anchor,'external');
+ }
+ }
+}
+
+function permaLink() {
+ document.getElementById('plink').href = window.location.pathname + '#slide' + snum;
+}
+
+function createControls() {
+ var controlsDiv = document.getElementById("controls");
+ if (!controlsDiv) return;
+ var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
+ var hideDiv, hideList = '';
+ if (controlVis == 'hidden') {
+ hideDiv = hider;
+ } else {
+ hideList = hider;
+ }
+ if(isOp) {
+ var str = '';
+ }else {
+ var str = '<a accesskey="t" id="sheet" title="toggle CSS" href="javascript:toggle();">&plusmn;<\/a>';
+ }
+ if(isIE) {
+ var tmp = "move around&xA0;until the color&xA0;change to red!";
+ }else if(isS2) {
+ var tmp = "move around\r\nuntil the color\r\nchange to red!";
+ }else {
+ var tmp = "move around until color change to red!";
+ }
+ if(isIE) {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] for keyboard help!"><ul>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst" style="vertical-align: middle; width: 160px;"><select style="cursor: auto; width: 160px; height: auto;" id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del" style="vertical-align: middle; width: 52px;"><select style="cursor: auto; width: 52px; height: auto;" id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul><\/div><\/form>';
+ }else {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] or double click this area for keyboard help!" ondblclick="createHelpReq();"><ul>' +
+ '<li id="exit"><a href="javascript:byby();" accesskey="q" title="exit Show"><\/a><\/li>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li class="vr"><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst"><a id="list" style="cursor:wait;" title="' + tmp + '"><\/a><select id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="fadeLinks" class="vr"><\/li>' +
+ '<li id="fade"><a class="isoff" href="javascript:switchFade();" accesskey="f" title="Transions"><\/a><\/li>' +
+ '<li id="audioLinks" class="vr"><\/li>' +
+ '<li id="audio"><a class="isoff" href="javascript:toggleSounds();" accesskey="s" title="Sounds" ><\/a><\/li>' +
+ '<li id="vol"><a id="volume" style="cursor:wait;" title="' + tmp + '"><\/a><select id="volumelist" title="select Volume" onchange="setVolume();"><option value="100">100<\/option><option value="90">90<\/option><option value="80">80<\/option><option value="70">70<\/option><option value="60">60<\/option><option value="50">50<\/option><option value="40">40<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="10">10<\/option><option value="0">0<\/option><\/select><\/li>' +
+ '<li id="autoLinks" class="vr"><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del"><a id="delay" style="cursor:wait;" title="' + tmp + '"><\/a><select id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul>' +
+ '<a href="http://s5.netzgesta.de" target="_blank" title="S5 Reloaded"><img style="position: absolute; right: 0; bottom: 0;" src="data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAYAAAASYli2AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAYpSURBVHjaYvz//z8DOYCRkZEZRAEx0Ij/f2HiAAHEgqYIpACkkB1J7g8Q/wLRIJ1QNSB5fiDmAOLvQKHPQPoHSB4ggFiQDGMCUnxALAPECkAsBLIdiD8A8SMgfghU8wlqkTgQK1ZVVWldv3792fr16y8D+c9AhgMEECPIy1DDRIDYAojdzMzMWNXV1UG2/v/y5Qvzw4cPP587d24/kH8Gar/uwoULQ+/cufNFXFyciZmZ+UVmZuZKoFmvAQII5kJOIDbi4uKK2Llz53EbG5vP6GGWn5+vMWnSpJtA5jcg5v327Rtnc3PzfSD79+rVq2WBNBtIHUAAwQzkAWKzBQsWnIUZFhISovXmzZsfkpKSDD09PY8kJCR+QtWCguGvrKwsz7Rp07Q4ODh+srCwgILiH0gSIIBgBrICsUBoaCgorBiANgqvXbtWDMg8AcQf9+7d+x0o9xbI/gJV/3fVqlUvmJiY/gIdcaWhoYETahEDQADBDPwNxO9h3gNpBiq6f/HiRbWjR4+yvnr16grQNbeh6kCWsxkYGIhClT8yNDQUgyYhBoAAYoIKfgXi06mpqUowQ+vr6x+uW7fu0suXL8+uWbOGS0BAwB7kC6jXvqmoqLDIyclxzZo1S4udnR2WtBgAAggWyyCXSgOxZUxMjGpWVtY7S0vLr8iRsnnzZl4/P7/DQCYoYtSA2DApKUkVGNNPDh06dBrIvwU06xNAAMEM5AIKqAOxCjQsmHl5eXWdnJx4N2zYcB4prd4CUpfwJRuAAGJCimULoGYpbm5uZ5DBnz9/5tq4caPWkSNHeJEc+g0aTFzfv3/nACabjzk5OW8FBQVloLmHASCAYJECUiTg7+//HJiQTzY2NsrfvXv3n7m5+T5YMgJGEkjDS2gY/pKRkeHt7Ow0Bsb0v9+/fz+HxTJAAMG8DHKFLTC9aRUXF79BT9Qgw4CWHAAy70FdYgjEDgkJCTpWVlYMQBfeAaaMPqBZbwECCGYgMzQGQSleCehS0X///jEDvf9lxYoVoOTyAIjfANX+BqrlBrL1gLFf09vb+0FaWvoHMBctA6USUKQABBAjrPiCliKg7AOKIG5ougLlju9Ipc1foDJWqMWGhYWFtsBg4RISEnrg5uY2BWQgQACxIBkGMkQKijmRfPwXWuI8ASp7DQ1vEP4DDO8PwBzzDJheT0CLPQaAAEJOh0o8zAzeihwMiv+gGZ0B4sz/bIwM797/YTh1/wfDIWj5qAfMmtFnzpz5ICIiwqKoqPgjKChoOtCs5wABhJyXpUCGzddgOIethJ71jEFi1nNwgQrKz8zv37//097eDop15qVLl0pAzWAACCAWhEMYOJFdduELA++b3wxsTIwMfzmYGH6xMDG8gYYpKAg+cnJy/gB6VwuYZFiA7E+wvAwQQCy46ozexwzG17+BYx6UVE4B8Vmo68CRFR0dDQo3UAHBBUwJ4lCLGAACCNnAv4zQxAkCxbIMZ0EuBIYb98EPDFo3voGTzjOogVzArGf969cvNmC2+wssHD7BDAQIIBakmHwPDPy3MAMNeBhgpfbbVEkGhqQbDJaXvjI8BPJB4jz79u37DcwlP+fPn38NuTwECCBkA1+8+8Nwtusxg+STHwwcP/8z8EuwMXA1KjBcBSlwEmRgBhrID/U2O7QMBIEHxsbGkrAwBAggmIGgNMT64AfDWyB+By0EQMVZlC0/wwsXQYa38hzgCGGBWv5ZU1OT4c+fP8yLFi1SA3r5Haw8BAggmIGg5KBpJ8BgeOYTg8S3f2DN/OxMDNwgw0AKnv0EJ+avsITu7u6+EZqzQEHwHFqaMwAEEAtShS/pLcTwrU+Z4QwsyQANOwIL06tfGV5BqwmQWoGKigoLYJnJvWPHjhstLS169vb2M0DqAAIIVh6CXHT/9ndIawEUITCXgUDrQwbGbe8YjkJdAzZQVVVV/t69e8LAgtUYaNgxWKQABBByacMHzfTK9gIMYkBZpj//GT4c+8gAKm1AsfseqPYPtHTXAtaEacBqlgHoyq+srKw3XV1dFwHlvwEEECNyYwmp3cIJjbUf0DbLP7RGEg+0bcMCjQxQzH8BWQgQQIzktr5wAYAAYmKgMgAIMAAp8Fx3osz1lgAAAABJRU5ErkJggg==" width="20" height="32" alt="S5" \/><\/a>' +
+ '<\/div><\/form>';
+ }
+ if (controlVis == 'hidden') {
+ var hidden = document.getElementById('navLinks');
+ } else {
+ var hidden = document.getElementById('jumplist');
+ }
+ addClass(hidden,'hideme');
+}
+
+function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
+ if (!s5mode && !isOp) return false;
+ var hScreen = screen.width; var vScreen = screen.height;
+ var vWindow = window.outerHeight; var hWindow = window.outerWidth;
+ if (isOp && s5mode && defaultView=='slideshow' && ((hScreen != hWindow) || (vScreen != vWindow))) {
+ toggle();
+ return false;
+ }
+ if (isOp && !s5mode && ((hScreen != hWindow) || (vScreen != vWindow))) return false;
+ if (isOp && !s5mode && (hScreen == hWindow) && (vScreen == vWindow)) toggle();
+ var vScale = 48; // both yield 16 (the usual browser default) at 1024x768
+ var hScale = 64; // perhaps should auto-calculate based on theme's declared value?
+ if (window.innerHeight) {
+ var vSize = window.innerHeight;
+ var hSize = window.innerWidth;
+ } else if (document.documentElement.clientHeight) {
+ var vSize = document.documentElement.clientHeight;
+ var hSize = document.documentElement.clientWidth;
+ } else if (document.body.clientHeight) {
+ var vSize = document.body.clientHeight;
+ var hSize = document.body.clientWidth;
+ } else {
+ var vSize = 700; // assuming 1024x768, minus chrome and such equals 8:5
+ var hSize = 1024; // these do not account for kiosk mode or Opera Show
+ }
+ var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
+ extendImgSizes(newSize); // scalable images extension
+ extendCanSizes(newSize); // scalable canvas extension
+ extendObjSizes(newSize); // scalable object extension
+ fontSize(newSize,"px");
+ if(!isS2 || firstTime==0) {
+ generateCanvas(); // dynamic canvas extension
+ }
+ if (isGe) { // hack to counter incremental reflow bugs
+ var obj = document.getElementsByTagName('body')[0];
+ obj.style.visibility = 'hidden';
+ obj.style.display = 'none';
+ obj.style.display = 'block';
+ obj.style.visibility = 'visible';
+ changeOpac(100,'slide' + snum);
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("fixReflow()",10);
+ }else {
+ setListPos(); // invisible select extension
+ }
+}
+
+function fixReflow() {
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("finishReflow()",10);
+}
+function finishReflow() {
+ setListPos(); // invisible select extension
+}
+
+function fontSize(val,fmt) {
+ var value = val + fmt;
+ if (!(s5ss = document.getElementById('s5ss'))) {
+ if (!document.createStyleSheet) {
+ document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
+ s5ss.setAttribute('media','screen, projection');
+ s5ss.setAttribute('id','s5ss');
+ } else {
+ document.createStyleSheet();
+ document.s5ss = document.styleSheets[document.styleSheets.length - 1];
+ }
+ }
+ if (!(document.s5ss && document.s5ss.addRule)) {
+ while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
+ s5ss.appendChild(document.createTextNode('html {font-size: ' + value + ' !important;}'));
+ } else {
+ document.s5ss.addRule('html','font-size: ' + value + ' !important;');
+ }
+}
+
+function windowChange() {
+ fontScale();
+}
+
+function notOperaFix() {
+ slideCSS = document.getElementById('slideProj').href;
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ slides.setAttribute('media','screen');
+ outline.disabled = true;
+ if (isGe) {
+ slides.setAttribute('href','null'); // Gecko fix
+ slides.setAttribute('href',slideCSS); // Gecko fix
+ }
+ if ((isIE && notIE7) && document.styleSheets && document.styleSheets[0]) {
+ document.styleSheets[0].addRule('img', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('div', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('.slide', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ }
+}
+
+function getIncrementals(obj) {
+ var incrementals = new Array();
+ if (!obj)
+ return incrementals;
+ var children = obj.childNodes;
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ if (hasClass(child, 'incremental')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'incremental');
+ for (var j = 0; j < child.childNodes.length; j++) {
+ if (child.childNodes[j].nodeType == 1) {
+ addClass(child.childNodes[j], 'incremental');
+ }
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ removeClass(child,'incremental');
+ }
+ }
+ if (hasClass(child, 'show-first')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'show-first');
+ if (child.childNodes[isGe].nodeType == 1) {
+ removeClass(child.childNodes[isGe], 'incremental');
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ }
+ }
+ incrementals = incrementals.concat(getIncrementals(child));
+ }
+ return incrementals;
+}
+
+function createIncrementals() {
+ var incrementals = new Array();
+ for (var i = 0; i < smax; i++) {
+ incrementals[i] = getIncrementals(document.getElementById('slide'+i));
+ }
+ return incrementals;
+}
+
+function trap(e) {
+ if (!e) {
+ e = event;
+ e.which = e.keyCode;
+ }
+ try {
+ modifierKey = e.ctrlKey || e.altKey || e.metaKey;
+ }
+ catch(e) {
+ modifierKey = false;
+ }
+ return modifierKey || e.which == 0;
+}
+
+// notes extension
+function noteLabel() { // Gives notes id's to match parent slides
+ var notes = GetElementsWithClassName('div','notes');
+ for (var i = 0; i < notes.length; i++) {
+ var note = notes[i];
+ var id = 'note' + note.parentNode.id.substring(5);
+ note.setAttribute('id',id);
+ }
+ resetElapsedSlide();
+ resetRemainingTime();
+ window.setInterval('updateElaspedTime()', 1000);
+}
+
+function createNotesWindow() { // creates a window for our notes
+ if (!s5NotesWindow || s5NotesWindow.closed) { // Create the window if it doesn't exist
+ s5NotesWindowLoaded = false;
+ // Note: Safari has a tendency to ignore window options preferring to default to the settings of the parent window, grr.
+ s5NotesWindow = window.open(s5Path+'ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0');
+ }
+ if (s5NotesWindowLoaded) { // Load the current note if the Note HTML has loaded
+ loadNote();
+ } else { // Keep trying...
+ window.setTimeout('createNotesWindow()', 50);
+ }
+}
+
+function loadNote() {
+// Loads a note into the note window
+ var notes = nextNotes = '<em class="disclaimer">There are no notes for this slide.</em>';
+ if (document.getElementById('note' + snum)) {
+ notes = document.getElementById('note' + snum).innerHTML;
+ }
+ if (document.getElementById('note' + (snum + 1))) {
+ nextNotes = document.getElementById('note' + (snum + 1)).innerHTML;
+ }
+
+ var jl = document.getElementById('jumplist');
+ var slideTitle = jl.options[jl.selectedIndex].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex) ? ' (' + jl.selectedIndex + '/' + (smax - 1) + ')' : '');
+ if (incrementals[snum].length > 0) {
+ slideTitle += ' <small>[' + incpos + '/' + incrementals[snum].length + ']</small>';
+ }
+ if (jl.selectedIndex < smax - 1) {
+ var nextTitle = jl.options[jl.selectedIndex + 1].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex + 1) ? ' (' + (jl.selectedIndex + 1) + '/' + (smax - 1) + ')' : '');
+ } else {
+ var nextTitle = '[end of slide show]';
+ }
+
+ if (s5NotesWindow && !s5NotesWindow.closed && s5NotesWindow.document) {
+ s5NotesWindow.document.getElementById('slide').innerHTML = slideTitle;
+ s5NotesWindow.document.getElementById('notes').innerHTML = notes;
+ s5NotesWindow.document.getElementById('next').innerHTML = nextTitle;
+ s5NotesWindow.document.getElementById('nextnotes').innerHTML = nextNotes;
+ }
+ resetElapsedSlide();
+}
+
+function minimizeTimer(id) {
+ var obj = s5NotesWindow.document.getElementById(id);
+ if (hasClass(obj,'collapsed')) {
+ removeClass(obj,'collapsed');
+ } else {
+ addClass(obj,'collapsed');
+ }
+}
+
+function resetElapsedTime() {
+ presentationStart = new Date();
+ slideStart = new Date();
+ updateElaspedTime();
+}
+
+function resetElapsedSlide() {
+ if (snum != previousSlide) {
+ slideStart = new Date();
+ previousSlide = snum;
+ updateElaspedTime();
+ }
+}
+
+function updateElaspedTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var now = new Date();
+ var ep = s5NotesWindow.document.getElementById('elapsed-presentation');
+ var es = s5NotesWindow.document.getElementById('elapsed-slide');
+ ep.innerHTML = formatTime(now.valueOf() - presentationStart.valueOf());
+ es.innerHTML = formatTime(now.valueOf() - slideStart.valueOf());
+}
+
+function resetRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var startField = s5NotesWindow.document.getElementById('startFrom');
+ startFrom = readTime(startField.value);
+ countdown.remaining = startFrom * 60000; // convert to msecs
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var timeLeft = formatTime(countdown.remaining);
+ tl.innerHTML = timeLeft;
+}
+
+function updateRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var now = new Date();
+ if (countdown.state == 'run') {
+ countdown.remaining = countdown.end - now;
+ }
+ tl.style.color = '';
+ tl.style.backgroundColor = '';
+ if (countdown.remaining >= 0) {
+ var timeLeft = formatTime(countdown.remaining);
+ removeClass(tl,'overtime');
+ if (countdown.remaining < 300000) {
+ tl.style.color = 'rgb(' + (255-Math.round(countdown.remaining/2000)) + ',0,0)';
+ tl.style.backgroundColor = 'rgb(255,255,' + (Math.round(countdown.remaining/2000)) + ')';
+ }
+ } else {
+ var timeLeft = '-' + formatTime(-countdown.remaining);
+ addClass(tl,'overtime');
+ }
+ tl.innerHTML = timeLeft;
+}
+
+function toggleRemainingTime() {
+ if (countdown.state == 'pause') countdown.state = 'run'; else countdown.state = 'pause';
+ if (countdown.state == 'pause') {
+ window.clearInterval(countdown.timer);
+ }
+ if (countdown.state == 'run') {
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ countdown.timer = window.setInterval('updateRemainingTime()', 1000);
+ }
+}
+
+function alterRemainingTime(amt) {
+ var change = amt * 60000; // convert to msecs
+ countdown.end += change;
+ countdown.remaining += change;
+ updateRemainingTime();
+}
+
+function formatTime(msecs) {
+ var time = new Date(msecs);
+
+ var hrs = time.getUTCHours() + ((time.getUTCDate() -1) * 24); // I doubt anyone will spend more than 24 hours on a presentation or single slide but just in case...
+ hrs = (hrs < 10) ? '0'+hrs : hrs;
+ if (hrs == 'NaN' || isNaN(hrs)) hrs = '--';
+
+ var min = time.getUTCMinutes();
+ min = (min < 10) ? '0'+min : min;
+ if (min == 'NaN' || isNaN(min)) min = '--';
+
+ var sec = time.getUTCSeconds();
+ sec = (sec < 10) ? '0'+sec : sec;
+ if (sec == 'NaN' || isNaN(sec)) sec = '--';
+
+ return hrs + ':' + min + ':' + sec;
+}
+
+function readTime(val) {
+ var sregex = /:/;
+ var matches = sregex.exec(val);
+ if (matches == null) {
+ return val;
+ } else {
+ var times = val.split(':');
+ var hours = parseInt(times[0]);
+ var mins = parseInt(times[1]);
+ var total = (hours * 60) + mins;
+ return total;
+ }
+}
+// notes extension
+
+// startup process
+function createSlideShow() {
+ defaultCheck();
+ if(!isIE) createDetector(); // (degrade IE) scalable images extension
+ if(opac!=0 || isIE) { // &&!isIE (degrade IE)
+ tranSitions = false;
+ fadeModus = false;
+ }
+ if(tranSitions && document.getElementById && document.createElement){
+ createProgress();
+ var nop=document.getElementById('StartupControl');
+ nop.onload = dumpProgress;
+ }else {
+ startup();
+ showAll();
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+ }
+}
+
+function defaultCheck() {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'defaultView') {
+ defaultView = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'controlVis') {
+ controlVis = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'tranSitions') {
+ tranSitions = (allMetas[i].content == "true") ? true : false;
+ fadeModus = (tranSitions == true) ? true : false;
+ }
+ if (allMetas[i].name == 'fadeDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ fadeDuration = Math.max(200,Math.min(tmp,2000));
+ }
+ if (allMetas[i].name == 'incrDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ incrDuration = Math.max(50,Math.min(tmp,500));
+ }
+ if (allMetas[i].name == 'autoMatic') {
+ autoMatic = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playLoop') {
+ playLoop = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playDelay') {
+ var tmp = parseInt(allMetas[i].content);
+ playDelay = Math.max(5,Math.min(tmp,90))*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ }
+ if (allMetas[i].name == 'audioSupport') {
+ audioSupport = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'audioVolume') {
+ var tmp = parseInt(allMetas[i].content);
+ audioVolume = Math.max(0,Math.min(tmp,100));
+ }
+ if (allMetas[i].name == 'audioError') {
+ audioError = (allMetas[i].content == "true") ? true : false;
+ }
+ }
+}
+
+function createProgress() {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "StartupProgress";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=100)";
+ }else {
+ pg.style.opacity = 1.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/progress.gif)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+
+ var im = document.createElement('img');
+ im.id = "StartupControl";
+ im.src = s5Path+"ui/graphic_support/blank.gif?" + new Date().valueOf();
+ document.getElementsByTagName("body")[0].appendChild(im);
+}
+
+function startup() {
+ createControls(); // hallvord
+ slideLabel();
+ incrementals = createIncrementals();
+ noteLabel(); // [SI:060104] must follow slideLabel()
+ loadNote();
+ fixLinks();
+ externalLinks();
+ fontScale();
+ if (!isOp) {
+ if(isIE) {
+ document.getElementById('lst').style.backgroundImage = 'none';
+ document.getElementById('del').style.backgroundImage = 'none';
+ }else {
+ document.getElementById('audio').style.backgroundImage = 'none';
+ }
+ notOperaFix();
+ }else if(isOp) {
+ var obj = document.getElementById('exit');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('exit').style.opacity = 0.5;
+ obj = document.getElementById('toggle');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('toggle').style.opacity = 0.5;
+ document.getElementById('jumplist').style.visibility = 'hidden';
+ document.getElementById('list').style.visibility = 'hidden';
+ document.getElementById('lst').style.opacity = 0.5;
+ obj = document.getElementById('audio');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('audio').style.opacity = 0.5;
+ document.getElementById('volumelist').style.visibility = 'hidden';
+ document.getElementById('volume').style.visibility = 'hidden';
+ document.getElementById('vol').style.opacity = 0.5;
+ document.getElementById('delaylist').style.visibility = 'hidden';
+ document.getElementById('delay').style.visibility = 'hidden';
+ document.getElementById('del').style.opacity = 0.5;
+ }
+ slideJump();
+ if (defaultView == 'outline') toggle();
+ document.onkeyup = keys;
+ document.onkeypress = trap;
+ document.onclick = clicker;
+}
+
+function preloadImgages() {
+ var temp = '';
+ var objects = document.getElementsByTagName('img');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].src != '') {
+ temp = new Image();
+ temp.src = objects[i].src;
+ }
+ }
+}
+
+function showAll() {
+ var obj1 = GetElementsWithClassName('div','presentation')[0];
+ if(!obj1) var obj1 = GetElementsWithClassName('ol','presentation')[0];
+ var obj2 = GetElementsWithClassName('div','layout')[0];
+ if(!obj1){}else {obj1.style.display = 'block'};
+ if(!obj2){}else {obj2.style.display = 'block'};
+}
+
+function dumpProgress() {
+ document.body.removeChild(document.getElementById('StartupControl'));
+ startup();
+ preloadImgages();
+ showAll();
+ createSoundManagerScript();
+ shiftOpacity('StartupProgress',1000);
+ window.setTimeout("removeProgress()",1000);
+}
+
+function removeProgress() {
+ document.body.removeChild(document.getElementById('StartupProgress'));
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+}
+function panelSetup() {
+ if(playPause) {
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ if(playLoop) {
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ if(audioSupport && !isIE && !isOp) {
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ }
+ if(fadeModus && !isIE) {
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ if(autoMatic) {
+ var obj = document.getElementById('auto'); changeClass(obj,'ison');
+ startPlay();
+ }
+ if(audioVolume && !isIE && !isOp) {
+ var idx = 0;
+ if(audioVolume >= 95 && audioVolume <= 100) {idx = 0;}
+ else if(audioVolume >= 85 && audioVolume < 95) {idx = 1;}
+ else if(audioVolume >= 75 && audioVolume < 85) {idx = 2;}
+ else if(audioVolume >= 65 && audioVolume < 75) {idx = 3;}
+ else if(audioVolume >= 55 && audioVolume < 65) {idx = 4;}
+ else if(audioVolume >= 45 && audioVolume < 55) {idx = 5;}
+ else if(audioVolume >= 35 && audioVolume < 45) {idx = 6;}
+ else if(audioVolume >= 25 && audioVolume < 35) {idx = 7;}
+ else if(audioVolume >= 15 && audioVolume < 25) {idx = 8;}
+ else if(audioVolume >= 5 && audioVolume < 15) {idx = 9;}
+ else {idx = 10;}
+ document.getElementById('volumelist').selectedIndex = idx;
+ }
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+}
+// startup process
+
+// shutdown process
+function byby() {
+ stopPlay();
+ if(tranSitions && fadeModus && s5mode && !isOp) {
+ fadeoutSound(curSoundID,true); // audio support
+ var pg = document.createElement('div');
+ pg.id = "GoodBy";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=0)";
+ }else {
+ pg.style.opacity = 0.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/finish.gif)";
+ document.getElementsByTagName("body")[0].appendChild(pg);
+ shiftOpacity('GoodBy',1000);
+ window.setTimeout("history.back()",1000);
+ }else {
+ stopSound(curSoundID);
+ history.back();
+ }
+}
+// shutdown process
+
+// scalable images extension
+function createDetector() {
+ var em = document.createElement('div');
+ em.id='EMSizeControl'; em.style.position="absolute"; em.style.left="-999px";
+ em.style.width="1em"; em.style.height="1em"; em.style.opacity=0.0;
+ document.getElementsByTagName("body")[0].appendChild(em);
+ var nop=document.getElementById('EMSizeControl');
+ if(!nop||findPosX(nop)!=-999) {}else {
+ opac=document.getElementById('EMSizeControl').style.opacity;
+ empx=document.getElementById('EMSizeControl').offsetHeight;
+ document.body.removeChild(document.getElementById('EMSizeControl'));
+ var objects = document.getElementsByTagName('img');
+ var j = 0; var i = 0; var k = 0; var d; var obj;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ images[j] = objects[i];
+ ++j;
+ }
+ }
+ var objects = document.getElementsByTagName('canvas'); j = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ canvas[objects[i].id] = objects[i];
+ if(j==0) {
+ if(objects[i].getContext) {
+ canvasSupport = true;
+ }
+ ++j;
+ }
+ }
+ }
+ if(canvasSupport!=true) {
+ for (d in canvas) {
+ try {
+ canvas[d].setAttribute("width",1);
+ canvas[d].setAttribute("height",1);
+ } catch (e) {
+ }
+ }
+ }
+ var objects = document.getElementsByTagName('table');
+ j = 0; k = 0; l = 0; var w; var h; var tmp; var cnt;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^piechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ piecharts[j] = objects[i];
+ em = piecharts[j].getAttribute("summary");
+ if(em != "") em = "," + em;
+ piecharts[j].setAttribute("summary", w + "," + h + em);
+ ++j;
+ }
+ }
+ }
+ if(objects[i].className.match(/^barchart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ barcharts[k] = objects[i];
+ em = barcharts[k].getAttribute("summary");
+ if(em != "") em = "," + em;
+ barcharts[k].setAttribute("summary", w + "," + h + em);
+ ++k;
+ }
+ }
+ }
+ if(objects[i].className.match(/^linechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ linecharts[l] = objects[i];
+ em = linecharts[l].getAttribute("summary");
+ if(em != "") em = "," + em;
+ linecharts[l].setAttribute("summary", w + "," + h + em);
+ ++l;
+ }
+ }
+ }
+ }
+ objects = document.getElementsByTagName('object'); j = 0; i = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ medias[j] = objects[i]; ++j;
+ if(!isIE) {
+ if(objects[i].getAttributeNode("classid")) objects[i].removeAttributeNode(objects[i].getAttributeNode("classid"));
+ if(objects[i].getAttributeNode("codebase")) objects[i].removeAttributeNode(objects[i].getAttributeNode("codebase"));
+ }
+ }
+ }
+ }
+}
+function extendImgSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < images.length; i++) {
+ w=images[i].getAttribute("width",0);
+ h=images[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ images[i].style.width=Math.floor(w*q)+"px";
+ images[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+
+function extendCanSizes(f) {
+ if(empx>0 && canvasSupport) {
+ var q = (f/empx); var w = 0; var h = 0; var tmp = ""; var cnt; var obj;
+ for(var i=0; i < piecharts.length; i++) {
+ if(piecharts[i].getAttribute("summary")) {
+ tmp = piecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = piecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < barcharts.length; i++) {
+ if(barcharts[i].getAttribute("summary")) {
+ tmp = barcharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = barcharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < linecharts.length; i++) {
+ if(linecharts[i].getAttribute("summary")) {
+ tmp = linecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = linecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ }
+}
+function extendObjSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < medias.length; i++) {
+ w=medias[i].getAttribute("width",0);
+ h=medias[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ medias[i].style.width=Math.floor(w*q)+"px";
+ medias[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+function findPosX(obj) {
+ var posLeft = 0;
+ while (obj.offsetParent) {
+ posLeft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ return posLeft;
+}
+function findPosY(obj) {
+ var posTop = 0;
+ while (obj.offsetParent) {
+ posTop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ return posTop;
+}
+// scalable images extension
+
+// canvas chart extension
+function deg2rad(degrees) {
+ return Math.PI *degrees/180;
+}
+function rad2deg(radians) {
+ return 180.0 *radians/Math.PI;
+}
+function circle_point_x(radians, diameter) {
+ var x = Math.cos(radians)*(diameter/2);
+ return x;
+}
+function circle_point_y(radians, diameter) {
+ var y = Math.sin(radians)*(diameter/2);
+ return y;
+}
+function roundTo(val,dig) {
+ var num = val;
+ if (val > 8191 && val < 10485) {
+ val = val-5000;
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ num = num+5000;
+ } else {
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ }
+ return num;
+}
+function searchColor(value) {
+ for (var dat in colorNames) {
+ if(dat==value) return colorNames[dat];
+ }
+ return false;
+}
+function scanColor(value) {
+ if(value.match(/^#[0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var val1 = value.substr(1,1).toLowerCase();
+ var val2 = value.substr(2,1).toLowerCase();
+ var val3 = value.substr(3,1).toLowerCase();
+ value = '#' + val1 + val1 + val2 + val2 + val3 + val3;
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var tmp = searchColor(value.toLowerCase());
+ if(!tmp) {}else{value = tmp;}
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ value = '#000000';
+ }
+ return value.toLowerCase();
+}
+function hex2rgb(val,trans) {
+ if(val.length==7) {
+ var tp1 = Math.max(0,Math.min(parseInt(val.substr(1,2),16),255));
+ var tp2 = Math.max(0,Math.min(parseInt(val.substr(3,2),16),255));
+ var tp3 = Math.max(0,Math.min(parseInt(val.substr(5,2),16),255));
+ return 'rgba(' + tp1 + ',' + tp2 + ',' + tp3 + ',' + trans + ')';
+ }
+}
+function trim(str) {
+ return (str.replace(/\s+$/,"").replace(/^\s+/,""));
+}
+function roundedRect(ctx,x,y,width,height,radius){
+ ctx.beginPath();
+ ctx.moveTo(x,y+radius);
+ ctx.lineTo(x,y+height-radius);
+ ctx.quadraticCurveTo(x,y+height,x+radius,y+height);
+ ctx.lineTo(x+width-radius,y+height);
+ ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius);
+ ctx.lineTo(x+width,y+radius);
+ ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
+ ctx.lineTo(x+radius,y);
+ ctx.quadraticCurveTo(x,y,x,y+radius);
+ ctx.closePath();
+}
+function drawString(ctx, text, fc, tx, ty) {
+ var xp = 0; var c = "";
+ ctx.beginPath();
+ for (var i = 0; i < text.length; i++) {
+ c = text[i];
+ ctx.drawImage(font, signs[c].sx, signs[c].sy, signs[c].sw, signs[c].sh, tx+xp, ty, signs[c].sw*fc, signs[c].sh*fc);
+ xp += (signs[c].sw*fc);
+ }
+ ctx.closePath();
+}
+function strokeString(ctx, txt, col, fh, tx, ty) {
+ var fw = fh*0.666666; var lw = fh*0.125;
+ var ls = lw/2; var cr = lw; var xp = 0;
+ ctx.lineCap = "round"; ctx.lineJoin = "round"
+ ctx.lineWidth = lw; ctx.strokeStyle = col;
+ for (var i = 0; i < txt.length; i++) {
+ strokeSymbol(ctx, txt[i], ls, tx+xp, ty, fw, fh);
+ xp += (txt[i]!="."?fw+cr:(fw/2)+cr);
+ }
+}
+function strokeSymbol(ctx, symbol, fc, cx, cy, cw, ch) {
+ ctx.beginPath();
+ switch (symbol) {
+ case "0":
+ ctx.moveTo(cx+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+(cw/2),(cw/2)-fc,deg2rad(180),0, false);
+ ctx.arc(cx+(cw/2),(cy+ch)-(cw/2),(cw/2)-fc,0,deg2rad(180), false);
+ ctx.closePath();
+ break;
+ case "1":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.moveTo(cx+(cw*0.666666),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.666666),cy+fc);
+ ctx.lineTo(cx+(cw*0.25),cy+(ch*0.25));
+ break;
+ case "2":
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.8));
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+fc,cy+ch-fc);
+ ctx.arc(cx+(cw/2),cy+(cw*0.425),(cw*0.425)-fc,deg2rad(45),deg2rad(-180), true);
+ break;
+ case "3":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-90),deg2rad(180), false);
+ break;
+ case "4":
+ ctx.moveTo(cx+(cw*0.75),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.5),cy+ch-fc);
+ break;
+ case "5":
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-80),deg2rad(180), false);
+ break;
+ case "6":
+ ctx.moveTo(cx+fc,cy+ch-(cw*0.5)-fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-180),deg2rad(180), false);
+ ctx.bezierCurveTo(cx+fc,cy+fc,cx+fc,cy+fc,cx+(cw*0.9)-fc,cy+fc);
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ break;
+ case "7":
+ ctx.moveTo(cx+(cw*0.5),cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.25)-fc);
+ break;
+ case "8":
+ ctx.moveTo(cx+(cw*0.92)-fc,cy+(cw*0.59));
+ ctx.arc(cx+(cw/2),cy+(cw*0.45),(cw*0.45)-fc,deg2rad(25),deg2rad(-205), true);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-135),deg2rad(-45), true);
+ ctx.closePath();
+ ctx.moveTo(cx+(cw*0.79),cy+(ch*0.47));
+ ctx.lineTo(cx+(cw*0.21),cy+(ch*0.47));
+ break;
+ case "9":
+ ctx.moveTo(cx+cw-fc,cy+(cw*0.5));
+ ctx.arc(cx+(cw/2),cy+(cw*0.5),(cw*0.5)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.bezierCurveTo(cx+cw-fc,cy+ch-fc,cx+cw-fc,cy+ch-fc,cx+(cw*0.1)+fc,cy+ch-fc);
+ break;
+ case "%":
+ ctx.moveTo(cx+fc,cy+(ch*0.75));
+ ctx.lineTo(cx+cw-fc,cy+(ch*0.25));
+ ctx.moveTo(cx+(cw*0.505),cy+(cw*0.3));
+ ctx.arc(cx+(cw*0.3),cy+(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.moveTo(cx+(cw*0.905),cy+ch-(cw*0.3));
+ ctx.arc(cx+(cw*0.7),cy+ch-(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ break;
+ case ".":
+ ctx.moveTo(cx+(cw*0.25),cy+ch-fc-fc);
+ ctx.arc(cx+(cw*0.25),cy+ch-fc-fc,fc,deg2rad(0),deg2rad(360), false);
+ ctx.closePath();
+ break;
+ default:
+ break;
+ }
+ ctx.stroke();
+}
+function drawBar(ctx,x,y,width,height,color,value,textdiv){
+ var rw = width/2; var rh = rw/2;
+ height = Math.max(height,rw);
+ var dh = Math.max(height-(2*rh),0.1); var S2L;
+ var xx = rw/8; var yy = rh/4;
+ var yo = rh/2; y = y - yy;
+ if(canvas_noshadow <= 0 && canvas_noshade <= 0) {
+ ctx.save();
+ S2L = ctx.createRadialGradient(x+rw+rh,y+height-rw+yy+rh,0,x+rw,y+height-rw+yy,rw);
+ S2L.addColorStop(0, 'rgba(0,0,0,0.5)');
+ S2L.addColorStop(0.7, 'rgba(0,0,0,0.25)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = S2L;
+ ctx.scale(1,0.5);
+ ctx.translate(xx,y+height+yy);
+ if(isOp){
+ ctx.fillRect(x,y+yy+height-width,width,width);
+ }else {
+ ctx.arc(x+rw,y+yy+height-width,width,0,deg2rad(360), false);
+ ctx.fill();
+ }
+ ctx.restore();
+ }else if(canvas_noshadow <= 0 && canvas_noshade >= 1) {
+ ctx.fillStyle = 'rgba(0,0,0,0.2)';
+ ctx.fillRect(x+yo,y+rh+yo+yo,width,dh);
+ }
+
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x,y+(height/2),x+width,y+(height/2));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.75)');
+ S2L.addColorStop(0.2, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.3, 'rgba(0,0,0,0)');
+ S2L.addColorStop(0.5, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.35)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.1)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.strokeStyle = S2L;
+ ctx.stroke();
+ }else {
+ ctx.fillStyle = color;
+ ctx.fillRect(x,y+rh+yo,width,dh);
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var bw = width; var bh = bw/4;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ var c; var w;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,x+(width/2)-(bw/2),y,bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext <= 0) {
+ strokeString(ctx, value + "%","rgba(48,48,48,1)", th, x+(width/2)-(w/2), y+((bh-th)/2));
+ }else {
+ drawString(ctx, value + "%", tf, x+(width/2)-(w/2), y+((bh-th)/2.2));
+ }
+ }else {
+ var bh = bw/3; var th = roundTo(bh*0.75,0);
+ roundedRect(ctx,x,y,bw,bh,bh/4);
+ ctx.fill();
+ var obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = x + "px";
+ obj.style.top = y+((bh-th)/2.2) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+
+ }
+}
+function drawLine(ctx,x,y,width,height,dist,array,factor,color,fill){
+ if(fill <= 0){
+ var style = hex2rgb(color,0.5);
+ ctx.lineJoin = "miter";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height);
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.lineTo(x+width,y+height);
+ ctx.lineTo(x,y+height);
+ ctx.closePath();
+ ctx.fillStyle = style;
+ ctx.fill();
+ }
+ ctx.lineJoin = "round";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height-(array[0]*factor));
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.strokeStyle = color;
+ ctx.stroke();
+}
+function setDataURL(cid) {
+ if(cid.toDataURL) {
+ var obj = document.getElementById(cid.id + "_link");
+ if(obj) {
+ obj.setAttribute("title", "To Data URL");
+ obj.setAttribute("target", "_blank");
+ obj.setAttribute("href", cid.toDataURL());
+ }
+ }
+}
+function get_input(dataobj,canvasobj,linechart) {
+ var table = document.getElementById(dataobj);
+ var canvas = document.getElementById(canvasobj);
+ var row; var clm; var cnt = 0; var val = 0; var nme = ""; var col = "";
+ if(canvas.getContext) {
+ canvas_width = parseInt(canvas.style.width);
+ canvas_height = parseInt(canvas.style.height);
+ if(canvas_width >= 16 && canvas_height >= 16) {
+ var tmp = table.getAttribute("summary");
+ canvas_noshade = 0; canvas_noshadow = 0;
+ canvas_notext = 0; canvas_imgtext = 0;
+ canvas_htmltext = 0; canvas_nofill = 0;
+ if(tmp.search(/noshadow/) != -1) canvas_noshadow = 1;
+ if(tmp.search(/noshade/) != -1) canvas_noshade = 1;
+ if(tmp.search(/nofill/) != -1) canvas_nofill = 1;
+ if(tmp.search(/notext/) != -1) canvas_notext = 1;
+ if(tmp.search(/htmltext/) != -1) canvas_htmltext = 1;
+ if(tmp.search(/imgtext/) != -1) canvas_imgtext = 1;
+ if(table.getAttribute("bgcolor")) {
+ canvas_bgcolor = scanColor(table.getAttribute("bgcolor"));
+ }
+ ChartData = new Array(); colorSlice = new Array();
+ if(table.getElementsByTagName("tr")[0].getElementsByTagName("th")[0]) cnt = 1;
+ for(var r = cnt; r < table.getElementsByTagName("tr").length; r++) {
+ row = table.getElementsByTagName("tr")[r];
+ clm = row.getElementsByTagName("td").length;
+ if(row.getElementsByTagName("td")[0].getAttribute("bgcolor")) {
+ col = scanColor(row.getElementsByTagName("td")[0].getAttribute("bgcolor")); val = 0;
+ nme = trim(row.getElementsByTagName("td")[1].innerHTML.replace(/<[^>]+>/g,""));
+ if(!linechart) {
+ if(clm > 3) {
+ for(var z = 2; z < clm; z++) {
+ val += parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ }else {
+ val = parseFloat(row.getElementsByTagName("td")[2].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ if(!isNaN(val) && val > 0 && nme != '') {
+ colorSlice[r-cnt] = col; ChartData[nme] = Math.abs(val);
+ }else {
+ break;
+ }
+ }else {
+ val = 0; i = 0;
+ if(clm > 3 && nme != '') {
+ ChartData[r-cnt] = new Array();
+ colorSlice[r-cnt] = col;
+ for(var z = 2; z < clm; z++) {
+ val = Math.abs(parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,"")));
+ if(!isNaN(val) && val >= 0) {
+ ChartData[r-cnt][i] = val; i++;
+ }else {
+ ChartData[r-cnt][i] = 0; i++;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }
+ }
+}
+function setPieChart(canvasobj,textobj) {
+ var cd = (Math.min(canvas_width,canvas_height)/110)*100;
+ var cp = cd*0.1; var cr = cd/2;
+ var sr = cr*0.93; var cw = cd+cp; var ch = cw;
+ var cx = (cd/2)+(cp/2); var cy = cx; var ct = 0;
+ for (var data in ChartData) {
+ ct += ChartData[data];
+ }
+ var poc = ct/100;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ }
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,cw,ch);
+ }else {
+ ctx.clearRect(0,0,cw,ch);
+ }
+ if(canvas_noshadow <= 0) {
+ if(!isOp) {
+ ctx.beginPath();
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),cr,cx+(cr*0.1),cy+(cr*0.1),sr*0.9);
+ B2B.addColorStop(0, 'rgba(0,0,0,0)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.arc(cx+(cr*0.1),cy+(cr*0.1),cr,0,deg2rad(360), false);
+ ctx.closePath();
+ ctx.fillStyle = B2B;
+ ctx.fill();
+ }else {
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),0,cx+(cr*0.1),cy+(cr*0.1),cr);
+ B2B.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(0.87, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = B2B;
+ ctx.fillRect(0,0,cw,ch);
+ }
+ }
+ var val = 0; var deg = 0; var idx = 0; var data;
+ for (data in ChartData) {
+ val = ChartData[data]; sdeg = deg;
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ ctx.beginPath();
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr,sdeg,edeg, false);
+ ctx.lineTo(cx,cy);
+ ctx.closePath();
+ ctx.fillStyle = colorSlice[(idx++)];
+ ctx.fill();
+ }
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ var W2T = ctx.createLinearGradient(cp*2,cp*2,cx,cy);
+ W2T.addColorStop(0, 'rgba(255,255,255,0.8)');
+ W2T.addColorStop(1, 'rgba(255,255,255,0)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.fillStyle = W2T;
+ ctx.fill();
+ ctx.beginPath();
+ var T2B = ctx.createLinearGradient(cx,cy,cw-(cp*2),ch-(cp*2));
+ T2B.addColorStop(0, 'rgba(0,0,0,0)');
+ T2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.fillStyle = T2B;
+ ctx.fill();
+ ctx.beginPath();
+ var B2T = ctx.createLinearGradient(cx,cy,cw-(cp*1.9),ch-(cp*1.9));
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.strokeStyle = B2T;
+ ctx.stroke();
+ ctx.beginPath();
+ var T2W = ctx.createLinearGradient(cx,cy,(cp*1.9),(cp*1.9));
+ T2W.addColorStop(0, 'rgba(255,255,255,0)');
+ T2W.addColorStop(1, 'rgba(255,255,255,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.strokeStyle = T2W;
+ ctx.stroke();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var mpos = 0; var per = 0; var gx = 0;
+ var gy = 0; var tx = 0; var ty = 0;
+ var obj = ""; var w = 0; var c = 0;
+ var bw = cr*0.45; var bh = cr*0.125;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext >= 1) {
+ bw = (cr*0.365);
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ for (data in ChartData) {
+ val = ChartData[data];
+ sdeg = deg; mpos = deg+(((val/2)/ct)*deg2rad(360));
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ per = roundTo(val/poc,2);
+ gx = circle_point_x(mpos, cd);
+ gy = circle_point_y(mpos, cd);
+ tx = parseFloat((cx+(2*Math.floor(cx + gx)))/3);
+ ty = (cy+(2*Math.floor(cy + gy)))/3;
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext >= 1) {
+ drawString(ctx, per + "%", tf, tx-(w/2), ty-(th/1.8));
+ }else {
+ strokeString(ctx, per + "%","rgba(48,48,48,1)", th, tx-(w/2), ty-(th/2));
+ }
+ }else {
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = (tx-(bw/2)) + "px";
+ obj.style.top = ty-(th/1.8) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+ }
+ }
+ }
+}
+function setBarChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9; var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05; var ph = canvas_height*0.05;
+ var cm = 0; var ct = 0;
+ for (var data in ChartData) {
+ cm = Math.max(cm,ChartData[data]);
+ ct += ChartData[data];
+ }
+ var hf = ih/cm; var bs = colorSlice.length;
+ var bw = iw/(bs*1.1); var poc = ct/100;
+ var th = roundTo((bw/3)*0.75,0);
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ var obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ var cc = ""; var bh = 0; var idx = 0; var t = 0; per = 0;
+ for (var data in ChartData) {
+ per = roundTo(ChartData[data]/poc,2);
+ bh = ChartData[data]*hf;
+ drawBar(ctx,pw+(t*(bw*1.1)),ph+ih-bh,bw,bh,colorSlice[(idx++)],per,textdiv);
+ t++;
+ }
+ }
+}
+function setLineChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9;
+ var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05;
+ var ph = canvas_height*0.05;
+ var cm = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ cm = Math.max(cm,ChartData[i][j]);
+ }
+ }
+ var hf = (ih*0.95)/cm; var bw = iw;
+ var dw = iw/(ChartData[0].length-1)
+ var dh = ih/(ChartData[0].length-1)
+ var ps = Math.min(pw,ph); lw = ps/4;
+ var B2T;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_noshadow <= 0) {
+ B2T = ctx.createLinearGradient(pw+ps,ph+ih+1,pw+ps+ps,ph+ih+1);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps,ph+ih);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.lineTo(pw+ps+ps,ph+ih);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+ps+ps,ph+ih,pw+ps+ps,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps+ps,ph+ih);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+ps+iw,ph+ih+ps);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.closePath();
+ ctx.fill();
+ var B2T = ctx.createLinearGradient(pw+iw+1,ph+ps,pw+iw+1,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.35)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps);
+ ctx.lineTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+iw,ph+ps+ps,pw+iw+ps,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.35)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+iw+ps,ph+ih+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = lw/2;
+ ctx.strokeStyle = "rgba(255,255,255,0.25)";
+ if(canvas_nofill <= 0) {
+ ctx.fillStyle = "rgba(240,240,240,0.8)";
+ ctx.strokeStyle = "rgba(255,255,255,1)";
+ ctx.fillRect(pw,ph,iw,ih);
+ }
+ for (var i = 0; i < ChartData[0].length-1; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph);
+ ctx.lineTo(pw+(i*dw),ph+ih);
+ ctx.stroke();
+ }
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw,ph+(i*dh));
+ ctx.lineTo(pw+iw,ph+(i*dh));
+ ctx.stroke();
+ }
+ ctx.lineWidth = lw;
+ var cc = ""; var bh = 0; var idx = 0; var t = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ t = Math.max(t,ChartData[i][j]);
+ }
+ bh = t*hf; cc = colorSlice[(idx++)];
+ drawLine(ctx,pw,ph+ih-bh,bw,bh,dw,ChartData[i],hf,cc,canvas_nofill);
+ }
+ ctx.beginPath();
+ ctx.moveTo(pw,ph);
+ ctx.lineTo(pw,ph+ih);
+ ctx.lineTo(pw+iw+(lw/2),ph+ih);
+ ctx.strokeStyle = "rgba(48,48,48,1)";
+ ctx.stroke();
+ ctx.lineWidth = lw/2;
+ B2T = ctx.createLinearGradient(pw,ph+ih,pw,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,1)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.strokeStyle = B2T;
+ for (var i = 0; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph+ih);
+ ctx.lineTo(pw+(i*dw),ph+ih+ps);
+ ctx.stroke();
+ }
+ B2T = ctx.createLinearGradient(pw-ps,ph,pw,ph);
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,1)');
+ ctx.strokeStyle = B2T;
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw-ps,ph+(i*dh));
+ ctx.lineTo(pw,ph+(i*dh));
+ ctx.stroke();
+ }
+ }
+}
+function generateCanvas() {
+ if(canvasSupport) {
+ var canvasID; var tdataID; var textID;
+ var tmp; var dat; var i; var j;
+ for(i=0; i < piecharts.length; i++) {
+ tmp = piecharts[i].id.split("_");
+ tdataID = piecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setPieChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < barcharts.length; i++) {
+ tmp = barcharts[i].id.split("_");
+ tdataID = barcharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setBarChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < linecharts.length; i++) {
+ tmp = linecharts[i].id.split("_");
+ tdataID = linecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID,true);
+ if(colorSlice.length > 0) {
+ if(ChartData.length == colorSlice.length) {
+ setLineChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ }
+}
+// canvas chart extension
+
+// invisible select extension
+function setListPos(opt) {
+ if(!isIE) { //(degrade IE)
+ var ref = document.getElementById('list');
+ var x = findPosX(ref); var y = findPosY(ref);
+ var obj = document.getElementById('jumplist');
+ obj.style.position = 'fixed'; obj.style.left = x + 'px'; obj.style.top = y + 'px';
+ var vol = document.getElementById('volumelist');
+ ref = document.getElementById('volume');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ vol.style.position = 'fixed'; vol.style.left = x + 'px'; vol.style.top = y + 'px';
+ var del = document.getElementById('delaylist');
+ ref = document.getElementById('delay');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ del.style.position = 'fixed'; del.style.left = x + 'px'; del.style.top = y + 'px';
+ var pnl = document.getElementById('navLinks');
+ }
+ if(opt) {
+ if(isIE) {
+ //(degrade IE)
+ //pnl.style.filter = "alpha(opacity=80)";
+ }else {
+ obj.style.opacity = 0.0;
+ vol.style.opacity = 0.0;
+ del.style.opacity = 0.0;
+ pnl.style.opacity = 0.8;
+ }
+ }
+}
+// invisible select extension
+
+// transition extension
+function switchFade() {
+ if(tranSitions && s5mode && fadeModus) {
+ fadeModus = false;
+ playDelay = playDelay-(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'isoff');
+ }else if(tranSitions && s5mode && !fadeModus) {
+ fadeModus = true;
+ playDelay = playDelay+(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ currentSlide();
+}
+function opacity(ids, opacStart, opacEnd, millisec) {
+ var speed = Math.round(millisec / 100);
+ var timer = 0;
+ if(opacStart > opacEnd) {
+ for(var i = opacStart; i >= opacEnd; i--) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ } else if(opacStart < opacEnd) {
+ for(var i = opacStart; i <= opacEnd; i++) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ }
+}
+function changeOpac(opacity, ids) {
+ var obj = document.getElementById(ids);
+ if (isIE) {
+ obj.style.filter = "alpha(opacity=" + opacity + ")";
+ } else {
+ obj.style.opacity = (opacity / 100);
+ }
+}
+function shiftOpacity(ids, millisec) {
+ if(document.getElementById(ids).style.opacity != '') {
+ var currentOpac = document.getElementById(ids).style.opacity * 100;
+ } else {
+ var currentOpac = 0;
+ }
+ if(currentOpac == 0) {
+ opacity(ids, currentOpac, 100, millisec);
+ } else if(currentOpac > 0) {
+ opacity(ids, currentOpac, 0, millisec);
+ }
+}
+// transition extension
+
+// autoplay extension
+function autoPlay() {
+ if (s5mode && autoMatic && !playPause) {
+ if ((snum >= (smax-1)) && playLoop) {
+ goTo(0);
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }else if ((snum >= (smax-1)) && !playLoop) {
+ stopPlay();
+ }else {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ if (incrementals[snum].length >0) {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = parseInt(playDelay/(incrementals[snum].length+1));
+ remainDer = parseInt(playDelay-(incrDelay*incrementals[snum].length));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ } else {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = incrDuration;
+ remainDer = parseInt(playDelay-(incrementals[snum].length*incrDuration));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }
+ }
+}
+function autoPlayIncr() {
+ if (incpos < incrementals[snum].length) {
+ subgo(1);
+ autoRun = setTimeout('autoPlayIncr();',incrDelay);
+ }else {
+ autoRun = setTimeout('nop();',remainDer);
+ }
+}
+function nop() {
+ // no operation dummy
+}
+function togglePlay() {
+ if (autoRun && s5mode) {
+ stopPlay();
+ }else if (!autoRun && s5mode) {
+ startPlay();
+ }
+}
+function stopPlay() {
+ if (autoRun && s5mode) {
+ clearTimeout(autoRun); autoRun = null;
+ autoMatic = false; playPause = false; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'isoff');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ currentSlide();
+ }
+}
+function startPlay() {
+ if (!autoRun && s5mode) {
+ playPause = false; autoMatic = true; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'ison');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ autoRun = setTimeout('autoPlay();',playDelay);
+ currentSlide();
+ }
+}
+function pausePlay() {
+ if (s5mode && autoMatic) {
+ if (playPause) {
+ playPause = false; autoRun = setTimeout('autoPlay();',playDelay);
+ var obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ }else {
+ if (autoRun){
+ clearTimeout(autoRun); autoRun = null; playPause = true;
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+ }
+}
+function switchLoop() {
+ if(s5mode) {
+ if (playLoop) {
+ playLoop = false;
+ var obj = document.getElementById('loop'); changeClass(obj,'isoff');
+ }else {
+ playLoop = true;
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+}
+function setDelay() {
+ var val = document.getElementById('delaylist');
+ if(s5mode) {
+ var delay = Math.max(5,Math.min(parseInt(val.value),300));
+ playDelay = (fadeModus == true) ? ((delay*1000)+(2*fadeDuration)) : (delay*1000);
+ }
+}
+// autoplay extension
+
+// audio extension
+function createSoundManagerScript() {
+ if(typeof soundManager=="undefined") {
+ onerrorSM2();
+ }else {
+ var script=document.createElement('SCRIPT');
+ var tx=document.createTextNode("soundManager.createMovie();");
+ script.appendChild(tx);
+ document.getElementsByTagName("body")[0].appendChild(script);
+ }
+}
+//soundManager.onload = function() {
+function onloadSM2() {
+ if(!isIE) { //(degrade IE)
+ swfUnloaded = false;
+ preloadSounds();
+ }
+}
+//soundManager.onerror = function() {
+function onerrorSM2() {
+ if(typeof soundManager!="undefined") {
+ soundManager.destruct;
+ delete soundManager;
+ }
+ audioSupport = false; swfUnloaded = true;
+ if(audioError && !isIE && !isOp) {
+ var dv = document.createElement('div'); dv.id = "guru";
+ var d2=document.createElement('div'); dv.appendChild(d2);
+ var tx=document.createTextNode('Guru Meditation - SoundManager failed to load/initialize!');
+ d2.appendChild(tx); document.getElementById('slide0').appendChild(dv);
+ }
+}
+function audioSetup() {
+ if(sound[0]) {
+ playSound(0);
+ }else if(sound[bgSoundItem] && !sound[0]) {
+ playSound(bgSoundItem);
+ }
+}
+function fadeoutSound(ids, option) {
+ if(curSoundID >= 0 && !swfUnloaded) {
+ if(isNaN(ids)) {
+ if(ids == "bgSound") {
+ var cnum = parseInt(bgSoundItem);
+ }else {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && ids == sound[i]["id"]) {
+ var cnum = i;
+ break;
+ }
+ }
+ }
+ }else {
+ var cnum = ids;
+ ids = sound[cnum]["id"];
+ }
+ var vol = getMaxVolume(sound[cnum]["volume"]);
+ var millisec = fadeDuration;
+ var speed = Math.round(millisec / vol);
+ var timer = 0;
+ for(var i = vol; i > 0; i--) {
+ setTimeout("fadeout(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ if(option) setTimeout("stopSound('"+ids+"')",millisec);
+ }
+}
+function fadeout(volume, id) {
+ soundManager.setVolume(id,volume);
+}
+function stopSound(ids) {
+ var sid;
+ if(isNaN(ids)) {
+ sid = ids;
+ }else if(sound[ids]) {
+ sid = sound[ids]["id"];
+ }
+ if(sid!='' && curSoundID >= 0) {
+ soundManager.stop(sid);
+ curSoundID = -1;
+ }
+}
+function toggleSounds() {
+ if(audioSupport && !swfUnloaded) {
+ stopAllSounds();
+ }else if (!audioSupport && !swfUnloaded) {
+ allowSounds();
+ }
+}
+function allowSounds() {
+ if(!swfUnloaded) {
+ audioSupport = true;
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ currentSlide();
+ }
+}
+function stopAllSounds() {
+ if(curSoundID >= 0) {
+ stopSound(curSoundID);
+ }else {
+ soundManager.stopAll();
+ curSoundID = -1;
+ }
+ audioSupport = false;
+ var obj = document.getElementById('audio'); changeClass(obj,'isoff');
+ currentSlide();
+}
+function playSound(id) {
+ if(audioSupport && !swfUnloaded) {
+ var url, sid, vol, lps, cnum;
+ if(isNaN(id)) {
+ sid = id;
+ if(sid == "bgSound") {
+ cnum = parseInt(bgSoundItem);
+ }else {
+ cnum = getSoundID(id);
+ }
+ }else {
+ cnum = parseInt(id);
+ if(sound[cnum]) sid = sound[cnum]["id"];
+ }
+ if(sound[cnum] && sound[cnum]["url"]!='' && sid!=''){
+ url = sound[cnum]["url"];
+ vol = (sound[cnum]["volume"]!='')?getMaxVolume(sound[cnum]["volume"]):getMaxVolume(100);
+ lps = (sound[cnum]["loops"])?true:false;
+ if(lps) {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){soundManager.play(sid,{volume:getMaxVolume(sound[cnum]["volume"])});}});
+ }else {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){curSoundID=-1;}});
+ }
+ }
+ }
+}
+function getSoundID(str) {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && str == sound[i]["id"]) {
+ var id = i;
+ break;
+ }
+ }
+ return id;
+}
+function setVolume() {
+ var vol = document.getElementById('volumelist');
+ if(audioSupport && !swfUnloaded) {
+ audioVolume = parseInt(vol.value);
+ if(curSoundID >= 0) {
+ if(sound[curSoundID]) {
+ var sid = sound[curSoundID]["id"];
+ var vid = getMaxVolume(sound[curSoundID]["volume"]);
+ soundManager.setVolume(sid,vid);
+ }
+ }
+ }
+}
+function getMaxVolume(value) {
+ if(audioVolume>0) {var factor = audioVolume/100;}else {var factor = 0;}
+ return Math.max(0,Math.min(parseInt(value*factor),audioVolume));
+}
+function preloadSounds() {
+ var temp = ''; var parm = ''; var t = ''; var cl = '';
+ var objects = document.getElementsByTagName('object');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].type.toLowerCase() == 'audio/mp3' && objects[i].data != '') {
+ objects[i].width = 0; objects[i].height = 0;
+ if(objects[i].parentNode.tagName == 'DIV') {
+ cl = objects[i].parentNode.className.toLowerCase();
+ if(cl == 'presentation' || cl == 'slide') {
+ if(cl == 'presentation') {
+ t = parseInt(bgSoundItem);
+ }else {
+ t = parseInt(objects[i].parentNode.id.slice(5, objects[i].parentNode.id.length));
+ }
+ sound[t] = new Object();
+ if(t < bgSoundItem) {
+ sound[t]["id"] = objects[i].parentNode.id;
+ }else {
+ sound[t]["id"] = "bgSound";
+ }
+ sound[t]["url"] = objects[i].data;
+ sound[t]["volume"] = 100; sound[t]["loops"] = false;
+ if(objects[i].archive != '') {
+ parm = objects[i].archive.toLowerCase().split(',');
+ for (var j=0; j < parm.length; j++) {
+ if(parm[j] == 'loop') sound[t]["loops"] = true;
+ if(parm[j].search(/^volume/) != -1) {
+ var tmp = parm[j].split(':');
+ sound[t]["volume"] = parseInt(tmp[1]);
+ }
+ }
+ }
+ soundManager.createSound(sound[t]["id"],sound[t]["url"]);
+ }
+ }
+ }
+ }
+}
+// audio extension
+
+// help extension
+function createHelpReq() {
+ if(!document.getElementById("HelpReq")) {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "HelpReq";
+ if (pg.addEventListener) {
+ pg.addEventListener("onclick",dumpHelpReq,false);
+ } else if (pg.attachEvent) {
+ pg.attachEvent("onclick",dumpHelpReq);
+ }
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=90)";
+ } else {
+ pg.style.opacity = 0.9;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(64,64,64)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/help.jpg)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+ if(document.getElementById("HelpReq")) {
+ helpmode = true;
+ }
+ }
+}
+function dumpHelpReq() {
+ if(document.getElementById("HelpReq")) {
+ document.body.removeChild(document.getElementById('HelpReq'));
+ helpmode = false;
+ }
+}
+// help extension
+
+//DEBUG
+function ConsoleLog(value) {
+ if(window.console) {
+ window.console.log(value);
+ }
+}
+//DEBUG
+
+document.write('<style type="text/css" media="screen" id="blockStyle">.presentation, .layout {display: none; }</style>');
+
+if(!isIE && !isOp) {
+ document.write('<script type="text/javascript" src="'+s5Path+'ui/audio_support/soundmanager2.js"></script>');
+ if(typeof soundManager!="undefined") {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'audioDebug') {
+ var audioDebug = (allMetas[i].content == "true") ? true : false;
+ soundManager.defaultOptions.debugMode = audioDebug;
+ }
+ }
+ }
+}
+
+window.onload = createSlideShow;
+window.onresize = function(){setTimeout('windowChange()',5);} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/toggle_link.png
new file mode 100644
index 000000000..4588e2514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/toggle_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/toggle_over.png
new file mode 100644
index 000000000..400f613b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/toggle_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/volume_link.png
new file mode 100644
index 000000000..f362acd1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/volume_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/wrap.css
new file mode 100644
index 000000000..a37315552
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/wrap.css
@@ -0,0 +1,410 @@
+/********************************************************************
+Screen and Print Styles for the Wrap Plugin
+********************************************************************/
+
+/* tables in columns and boxes should span the whole width */
+.wrap_column table,
+.wrap_left table, .wrap_right table, .wrap_center table,
+.wrap_box table,
+.wrap_info table, .wrap_important table, .wrap_alert table, .wrap_tip table, .wrap_help table, .wrap_todo table, .wrap_download table {
+ width: 100%;
+}
+/* emulate a headline */
+.wrap_column em strong,
+.wrap_left em strong, .wrap_right em strong, .wrap_center em strong,
+.wrap_box em strong,
+.wrap_info em strong, .wrap_important em strong, .wrap_alert em strong, .wrap_tip em strong, .wrap_help em strong, .wrap_todo em strong, .wrap_download em strong {
+ font-size: 130%;
+ font-weight: bold;
+ font-style: normal;
+ display: block;
+}
+/* emulate a bigger headline with a bottom border */
+.wrap_column em strong em.u,
+.wrap_left em strong em.u, .wrap_right em strong em.u, .wrap_center em strong em.u,
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ font-size: 115%;
+ border-bottom: 1px solid __border__;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+}
+/* different bigger headline for safety notes */
+.wrap_danger em strong em.u, .wrap_warning em strong em.u, .wrap_caution em strong em.u, .wrap_notice em strong em.u, .wrap_safety em strong em.u {
+ font-size: 115%;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+ text-transform: uppercase;
+ border-bottom-width: 0;
+}
+/* change border colour of emulated headlines inside boxes to something more neutral
+ (to match all the different background colours) */
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ border-bottom-color: #999;
+}
+
+
+/* columns
+********************************************************************/
+
+.wrap_left,
+.wrap_column {
+ float: left;
+ margin-right: 1.5em;
+}
+.wrap_right {
+ float: right;
+ margin-left: 1.5em;
+}
+.wrap_center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+/*
+.wrap_column,
+.wrap_left,
+.wrap_right {
+ overflow: hidden;
+}
+*/
+.wrap_container {
+ margin-right: -1.5em;
+}
+
+
+/* alignments
+********************************************************************/
+
+.wrap_leftalign {
+ text-align: left;
+}
+.wrap_centeralign {
+ text-align: center;
+}
+.wrap_rightalign {
+ text-align: right;
+}
+.wrap_justify {
+ text-align: justify;
+}
+
+
+/* box
+********************************************************************/
+
+/* see styles for boxes and notes with icons in style.css */
+
+/*____________ rounded corners ____________*/
+/* (only for modern browsers) */
+
+div.wrap_round {
+ border-radius: 20px;
+ -moz-border-radius: 20px;
+ -webkit-border-radius: 20px;
+ -khtml-border-radius: 20px;
+}
+span.wrap_round {
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -khtml-border-radius: 2px;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_lo {
+ color: __text_neu__;
+ font-size: 85%;
+}
+div.wrap_em {
+ color: #c00;
+ font-weight: bold;
+}
+
+/* see styles for highlighted text in style.css */
+
+
+/* typography
+********************************************************************/
+
+/*____________ fonts ____________*/
+
+div.wrap_sansserif {
+ font-family: Verdana,Tahoma,Geneva,"DejaVu Sans","Bitstream Vera Sans","Liberation Sans", Arial,Helvetica,FreeSans,"Liberation Sans","Nimbus Sans L", sans-serif;
+}
+div.wrap_serif {
+ font-family: Georgia,Garamond,"Palatino Linotype","Book Antiqua",Palatino,Palladio,"URW Palladio L","Liberation Serif",Didot,Gentium,"Bitstream Charter","Century Schoolbook L", "Times New Roman",Times,"Nimbus Roman No9 L","FreeSerif", serif;
+}
+div.wrap_monospace {
+ font-family: Courier,"Courier New",FreeMono,"Nimbus Mono L","Liberation Mono", "Lucida Console",Monaco,"DejaVu Sans Mono","Bitstream Vera Sans Mono", monospace;
+}
+
+/*____________ font size ____________*/
+
+div.wrap_bigger {
+ font-size: 125%;
+}
+div.wrap_muchbigger {
+ font-size: 200%;
+}
+div.wrap_smaller {
+ font-size: 75%;
+}
+
+/*____________ font colours ____________*/
+
+div.wrap_fgred {
+ color: #900;
+}
+div.wrap_fggreen {
+ color: #090;
+}
+div.wrap_fgblue {
+ color: #009;
+}
+div.wrap_fgcyan {
+ color: #099;
+}
+div.wrap_fgviolet {
+ color: #909;
+}
+div.wrap_fgyellow {
+ color: #990;
+}
+div.wrap_fggrey {
+ color: #666;
+}
+div.wrap_fgblack {
+ color: #000;
+}
+
+/* see styles for background colours and white font colour in style.css */
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ indent ____________*/
+
+div.wrap_indent {
+ padding-left: 1.5em;
+}
+
+/*____________ outdent ____________*/
+
+div.wrap_outdent {
+ margin-left: -1.5em;
+}
+
+/*____________ word wrapping in pre ____________*/
+
+divdiv.wrap_prewrap pre {
+ white-space: pre-wrap;
+ word-wrap: break-word;/* for IE < 8 */
+ /* white-space: -moz-pre-wrap; for FF < 3 */
+}
+
+/*____________ spoiler ____________*/
+
+divdiv.wrap_spoiler {
+ margin-bottom: 1.5em;
+}
+/* see rest of spoiler styles in style.css */
+
+/*____________ clear float ____________*/
+
+div.wrap_clear {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ font-size: 1px;
+ visibility: hidden;
+ overflow: hidden;
+}
+
+/*____________ hide ____________*/
+
+div.wrap_hide {
+ display: none;
+}
+
+
+/* STYLE.CSS */
+
+/* box
+********************************************************************/
+
+.wrap_box {
+ background: __background_alt__;
+ color: __text__;
+/*
+ overflow: hidden;
+*/
+}
+div.wrap_box,
+div.wrap_danger, div.wrap_warning, div.wrap_caution, div.wrap_notice, div.wrap_safety {
+ padding: 1em 1em .5em;
+ margin-bottom: 1.5em;
+}
+span.wrap_box,
+span.wrap_danger, span.wrap_warning, span.wrap_caution, span.wrap_notice, span.wrap_safety {
+ padding: 0 .3em;
+}
+
+/*____________ notes with icons ____________*/
+
+/* general styles for all note divs */
+div.wrap_info, div.wrap_important, div.wrap_alert, div.wrap_tip, div.wrap_help, div.wrap_todo, div.wrap_download {
+ padding: 1em 1em .5em 70px;
+ margin-bottom: 1.5em;
+ min-height: 68px;
+ background-position: 10px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html div.wrap_info, * html div.wrap_important, * html div.wrap_alert, * html div.wrap_tip, * html div.wrap_help, * html div.wrap_todo, * html div.wrap_download {
+ height: 68px;
+}
+/* general styles for all note spans */
+span.wrap_info, span.wrap_important, span.wrap_alert, span.wrap_tip, span.wrap_help, span.wrap_todo, span.wrap_download {
+ padding: 0 2px 0 20px;
+ min-height: 20px;
+ background-position: 2px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html span.wrap_info, * html span.wrap_important, * html span.wrap_alert, * html span.wrap_tip, * html span.wrap_help, * html span.wrap_todo, * html span.wrap_download {
+ height: 20px;
+}
+
+/*____________ info ____________*/
+.wrap_info { background-color: #d1d7df; }
+div.wrap_info { background-image: url(../../../wrap/images/note/48/info.png); }
+span.wrap_info { background-image: url(../../../wrap/images/note/16/info.png); }
+
+/*____________ important ____________*/
+.wrap_important { background-color: #ffd39f; }
+div.wrap_important { background-image: url(../../../wrap/images/note/48/important.png); }
+span.wrap_important { background-image: url(../../../wrap/images/note/16/important.png); }
+
+/*____________ alert ____________*/
+.wrap_alert { background-color: #ffbcaf; }
+div.wrap_alert { background-image: url(../../../wrap/images/note/48/alert.png); }
+span.wrap_alert { background-image: url(../../../wrap/images/note/16/alert.png); }
+
+/*____________ tip ____________*/
+.wrap_tip { background-color: #fff79f; }
+div.wrap_tip { background-image: url(../../../wrap/images/note/48/tip.png); }
+span.wrap_tip { background-image: url(../../../wrap/images/note/16/tip.png); }
+
+/*____________ help ____________*/
+.wrap_help { background-color: #dcc2ef; }
+div.wrap_help { background-image: url(../../../wrap/images/note/48/help.png); }
+span.wrap_help { background-image: url(../../../wrap/images/note/16/help.png); }
+
+/*____________ todo ____________*/
+.wrap_todo { background-color: #c2efdd; }
+div.wrap_todo { background-image: url(../../../wrap/images/note/48/todo.png); }
+span.wrap_todo { background-image: url(../../../wrap/images/note/16/todo.png); }
+
+/*____________ download ____________*/
+.wrap_download { background-color: #d6efc2; }
+div.wrap_download { background-image: url(../../../wrap/images/note/48/download.png); }
+span.wrap_download { background-image: url(../../../wrap/images/note/16/download.png); }
+
+
+/*____________ safety notes ____________*/
+
+.wrap_danger {
+ background-color: #c00;
+ color: #fff;
+}
+.wrap_warning {
+ background-color: #f60;
+ color: #000;
+}
+.wrap_caution {
+ background-color: #ff0;
+ color: #000;
+}
+.wrap_notice {
+ background-color: #06f;
+ color: #fff;
+}
+.wrap_safety {
+ background-color: #090;
+ color: #fff;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_hi {
+ background-color: #ff9;
+}
+
+/* typography
+********************************************************************/
+
+/*____________ font colours ____________*/
+
+div.wrap_fgwhite {
+ color: #fff;
+}
+
+/*____________ background colours ____________*/
+
+div.wrap_bgred {
+ background-color: #fcc;
+}
+div.wrap_bggreen {
+ background-color: #cfc;
+}
+div.wrap_bgblue {
+ background-color: #ccf;
+}
+div.wrap_bgcyan {
+ background-color: #9ff;
+}
+div.wrap_bgviolet {
+ background-color: #f9f;
+}
+div.wrap_bgyellow {
+ background-color: #ff9;
+}
+div.wrap_bggrey {
+ background-color: #ccc;
+}
+div.wrap_bgwhite {
+ background-color: #fff;
+}
+div.wrap_bgblack {
+ background-color: #000;
+}
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ spoiler ____________*/
+
+div.wrap_spoiler {
+ background-color: __background__ !important;
+ color: __background__ !important;
+ border: 1px dotted red;
+}
+
+/*____________ only print ____________*/
+
+div.wrap_onlyprint {
+ display: none;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/zero_link.png
new file mode 100644
index 000000000..5610884d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/zero_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/zero_over.png
new file mode 100644
index 000000000..3a14a577e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/zero_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/audio_link.png
new file mode 100644
index 000000000..daa740c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/audio_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/audio_on.png
new file mode 100644
index 000000000..cd590aae9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/audio_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/audio_over.png
new file mode 100644
index 000000000..cf537a008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/audio_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/auto_link.png
new file mode 100644
index 000000000..1c2ca4817
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/auto_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/auto_on.png
new file mode 100644
index 000000000..4b0c923b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/auto_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/auto_over.png
new file mode 100644
index 000000000..dbea88975
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/auto_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/backgrnd.png
new file mode 100644
index 000000000..0e48413d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/backgrnd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/bodybg.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/bodybg.gif
new file mode 100644
index 000000000..941489d40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/bodybg.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/button.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/button.gif
new file mode 100644
index 000000000..af280dea2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/button.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/delay_link.png
new file mode 100644
index 000000000..c4d99cd57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/delay_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/exit_link.png
new file mode 100644
index 000000000..1bfd38790
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/exit_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/exit_over.png
new file mode 100644
index 000000000..0fdd1c605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/exit_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/fade_link.png
new file mode 100644
index 000000000..482e4d53e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/fade_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/fade_on.png
new file mode 100644
index 000000000..e12561fb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/fade_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/fade_over.png
new file mode 100644
index 000000000..fb8943c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/fade_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/footer.jpg
new file mode 100644
index 000000000..49370dbba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/footer.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/framing.css
new file mode 100755
index 000000000..14d8509e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/framing.css
@@ -0,0 +1,23 @@
+/* The following styles size, place, and layer the slide components.
+ Edit these if you want to change the overall slide layout.
+ The commented lines can be uncommented (and modified, if necessary)
+ to help you with the rearrangement process. */
+
+/* target = 1024x768 */
+
+div#header, div#footer, .slide {width: 100%; top: 0; left: 0;}
+div#header {top: 0; height: 3em; z-index: 1;}
+div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;}
+.slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;}
+div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;}
+div#controls form {position: absolute; bottom: 0; right: 0; width: 100%;
+ margin: 0;}
+#currentSlide {position: absolute; width: 10%; left: 45%; bottom: 1em; z-index: 10;}
+html>body #currentSlide {position: fixed;}
+
+/*
+div#header {background: #FCC;}
+div#footer {background: #CCF;}
+div#controls {background: #BBD;}
+div#currentSlide {background: #FFC;}
+*/
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/head.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/head.gif
new file mode 100644
index 000000000..cd6910106
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/head.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/header.png
new file mode 100644
index 000000000..929dabba1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/last_link.png
new file mode 100644
index 000000000..4f158d35d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/last_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/last_over.png
new file mode 100644
index 000000000..a7b629995
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/last_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/list_link.png
new file mode 100644
index 000000000..7e299bb50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/list_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/loop_link.png
new file mode 100644
index 000000000..41e12cb15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/loop_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/loop_on.png
new file mode 100644
index 000000000..2ffcacae1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/loop_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/loop_over.png
new file mode 100644
index 000000000..9fe420153
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/loop_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/next_link.png
new file mode 100644
index 000000000..2b9f44c4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/next_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/next_over.png
new file mode 100644
index 000000000..25788124d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/next_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/notes_link.png
new file mode 100644
index 000000000..bb4a8ae37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/notes_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/notes_over.png
new file mode 100644
index 000000000..c6bfe69fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/notes_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/opera.css
new file mode 100755
index 000000000..9e9d2a3c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/opera.css
@@ -0,0 +1,7 @@
+/* DO NOT CHANGE THESE unless you really want to break Opera Show */
+.slide {
+ visibility: visible !important;
+ position: static !important;
+ page-break-before: always;
+}
+#slide0 {page-break-before: avoid;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/outline.css
new file mode 100755
index 000000000..62db519ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/outline.css
@@ -0,0 +1,15 @@
+/* don't change this unless you want the layout stuff to show up in the outline view! */
+
+.layout div, #footer *, #controlForm * {display: none;}
+#footer, #controls, #controlForm, #navLinks, #toggle {
+ display: block; visibility: visible; margin: 0; padding: 0;}
+#toggle {float: right; padding: 0.5em;}
+html>body #toggle {position: fixed; top: 0; right: 0;}
+
+/* making the outline look pretty-ish */
+
+#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
+#slide0 h1 {padding-top: 1.5em;}
+.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em;
+ border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
+#toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pause_link.png
new file mode 100644
index 000000000..2561cb4a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pause_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pause_on.png
new file mode 100644
index 000000000..2fc9c4a4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pause_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pause_over.png
new file mode 100644
index 000000000..7a7c80ddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pause_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pretty.css
new file mode 100644
index 000000000..75f69c3f7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pretty.css
@@ -0,0 +1,221 @@
+/* Following are the presentation styles -- edit away!
+ Note that the 'body' font size may have to be changed if the resolution is
+ different than expected. */
+
+body {background: #f3f3f3 url(bodybg.gif); color: #000; font-size: 2em; font-family: Verdana, Arial, sans-serif;}
+
+a {
+ color: #c30;
+ text-decoration: none;
+}
+
+a:hover {
+ text-decoration: underline;
+}
+
+:link, :visited {text-decoration: none;}
+#controls :active {color: #333 !important;}
+#controls :focus {outline: none;}
+h1, h2, h3, h4 {font-size: 100%; margin: 0; padding: 0; font-weight: inherit;}
+ul, pre {margin: 0; line-height: 1em;}
+html, body {margin: 0; padding: 0;}
+
+blockquote, q {font-style: italic;}
+blockquote {padding: 0 2em 0.5em; margin: 0 1.5em 0.5em; text-align: center; font-size: 1em;}
+blockquote p {margin: 0;}
+blockquote i {font-style: normal;}
+blockquote b {display: block; margin-top: 0.5em; font-weight: normal; font-size: smaller; font-style: normal;}
+blockquote b i {font-style: italic;}
+
+kbd {font-weight: bold; font-size: 1em;}
+sup {font-size: smaller; line-height: 1px;}
+
+code {padding: 2px 0.25em; font-weight: bold; color: #555;}
+code.bad, code del {color: red;}
+code.old {color: silver;}
+pre {font-size: .7em;
+ margin: 0 auto;
+ background-color: #f3f3f3;
+ border: 1px solid #d5d5d5;
+ width: 80%;
+ padding: 20px;}
+pre code {display: block;}
+pre code span {
+ font-weight: normal;
+ font-size: 0.98em;
+}
+ul {margin-left: 85px; margin-right: 3%; list-style: disc; padding: 0;}
+li {margin-top: 5px; margin-right: 0;}
+ul ul {line-height: 1;}
+ul ul li {margin: .2em; font-size: 85%; list-style: square;}
+p, li {
+ line-height: 1.2;
+}
+img.leader {display: block; margin: 0 auto;}
+
+
+div#header, div#footer {color: #AAB;
+ font-family: Verdana, Helvetica, sans-serif;}
+div#header {background: #f3f3f3 url(head.gif) repeat-x top;
+ line-height: 1px;}
+div#footer {font-size: 0.5em; font-weight: bold; padding: 1em 0; color: #666;}
+#footer h1, #footer h2 {display: block; padding: 0 1em;}
+#footer h2 {margin-top: 0.5em;}
+
+div.long {font-size: 0.75em;}
+.slide h1 {position: absolute; top: 0.8em; left: 0; z-index: 1;
+ margin-left: 85px; padding: 0; white-space: nowrap;
+ font-weight: bold; font-size: 150%; line-height: 1;
+ color: #f3f3f3;}
+.slide h3 {font-size: 130%;}
+h1 abbr {font-variant: small-caps;}
+
+#toggle, #prev, #next {
+ display: block;
+ width: 35px; height: 35px;
+ line-height: 35px;
+ float: left;
+ background: url(button.gif) no-repeat 0 0;
+}
+#toggle {
+
+}
+#next {
+ text-align: left;
+}
+
+#currentSlide {text-align: center; font-size: 0.5em; color: #666; font-weight: bold;}
+#currentSlide span {display: none;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 1.33em; padding: 5px 0 5px 20px;
+ font: bold 2.2em Arial, Verdana, sans-serif; white-space: normal;
+ color: #000; background: transparent url(slide0h1.gif) no-repeat left bottom;
+ text-transform: none; }
+#slide0 h3 {margin-top: 0.3em; font-size: 1.2em;}
+#slide0 h4 {margin:0; font-size: 0.9em;}
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.notes {display: none;}
+
+acronym {
+ font-size: 90%;
+}
+
+div.image {
+ margin: 0 auto;
+ text-align: center;
+ background-color: #f3f3f3;
+ border: 1px solid #000;
+ font-size: 0.66%;
+ width: 400px;
+ padding: 20px;
+}
+
+p {
+ margin-left: 85px;
+}
+
+div.image p, #slide0 p {
+ margin-left: 0;
+}
+
+div#controls {position: absolute; left: 0; bottom: 0; width: 100%; text-align: center; font: bold 1em Verdana, Arial, Helvetica, sans-serif;}
+html>body div#controls {background: transparent; position: fixed; padding: 0; top: auto; text-align: center;}
+#controls #sheet {display: none;}
+#controls #controlForm {height: 32px; width: 100%; text-align: center; vertical-align: middle;}
+#controls #navLinks {border-top: 1px solid #999; overflow: hidden; padding: 0; margin: 0; height: 32px; width: 100%; background-color: #808080; text-align: center; vertical-align: middle; white-space: nowrap;}
+#controls #navLinks ul {margin: 0 auto; padding: 0; height: 32px; width: 500px; white-space: nowrap; text-align: center;}
+#controls #navLinks ul li {list-style: none; display: inline; margin: 0; padding: 0; float: left; height: 32px; width: 32px; text-align: center; background-color: transparent;}
+#controls #navLinks ul li.vr {list-style: none; display: inline; margin: 0px 2px; padding: 0; float: left; height: 32px; width: 1px; text-align: center; background-color: #606060;}
+#controls #navLinks ul li a {margin: 0; padding: 0; float: left; height: 32px; width: 32px; background-color: transparent;}
+
+#controls #navLinks ul li#exit {background: url(exit_link.png) no-repeat top left;}
+#controls #navLinks ul li#exit a:hover {background: url(exit_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#toggle {background: url(toggle_link.png) no-repeat top left;}
+#controls #navLinks ul li#toggle a:hover {background: url(toggle_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#show-notes {background: url(notes_link.png) no-repeat top left;}
+#controls #navLinks ul li#show-notes a:hover {background: url(notes_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#zero {background: url(zero_link.png) no-repeat top left;}
+#controls #navLinks ul li#zero a:hover {background: url(zero_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#prev {background: url(prev_link.png) no-repeat top left;}
+#controls #navLinks ul li#prev a:hover {background: url(prev_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#next {background: url(next_link.png) no-repeat top left;}
+#controls #navLinks ul li#next a:hover {background: url(next_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#last {background: url(last_link.png) no-repeat top left;}
+#controls #navLinks ul li#last a:hover {background: url(last_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#lst {background: url(list_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#fade a.isoff {background: url(fade_link.png) no-repeat top left;}
+#controls #navLinks ul li#fade a.ison {background: url(fade_on.png) no-repeat top right;}
+#controls #navLinks ul li#fade a:hover {background: url(fade_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#audio {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.isoff {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.ison {background: url(audio_on.png) no-repeat top right;}
+#controls #navLinks ul li#audio a:hover {background: url(audio_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#vol {background: url(volume_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#auto a.isoff {background: url(auto_link.png) no-repeat top left;}
+#controls #navLinks ul li#auto a.ison {background: url(auto_on.png) no-repeat top right;}
+#controls #navLinks ul li#auto a:hover {background: url(auto_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#pause a.isoff {background: url(pause_link.png) no-repeat top left;}
+#controls #navLinks ul li#pause a.ison {background: url(pause_on.png) no-repeat top right;}
+#controls #navLinks ul li#pause a:hover {background: url(pause_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#loop a.isoff {background: url(loop_link.png) no-repeat top left;}
+#controls #navLinks ul li#loop a.ison {background: url(loop_on.png) no-repeat top right;}
+#controls #navLinks ul li#loop a:hover {background: url(loop_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#del {background: url(delay_link.png) no-repeat top left;}
+
+#jumplist, #volumelist, #delaylist {padding: 0; margin: 0; width: 32px; height: 32px; cursor: n-resize;}
+
+#guru {position: absolute; visibility: visible; left: 0px; top: 0px; padding: 4px; width: 99%; height: auto; text-align: center; background-color: black; z-index: 10;}
+#guru div {border: solid 3px red; padding: 4px; font-family: monospace; font-size: 60%; width: auto; height: auto; color: red; text-align: center;}
+
+/*
+#currentSlide {white-space: nowrap; text-align: center; margin-bottom: -0.5em; font-size: 0.5em; background-color: transparent; color: #999;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 0; padding: 0; font: bold 2em Verdana, Arial, Helvetica, sans-serif; font-variant: small-caps; text-shadow: 0.1em 0.1em 0.1em #666; white-space: normal; color: #222; background-color: transparent;}
+#slide0 h2 {font: bold italic 1em Arial, Helvetica, sans-serif; margin: 0.25em;}
+#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+*/
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.external {border-bottom: 1px dotted gray;}
+html>body .external {border-bottom: none;}
+.external:after {content: " \274F"; font-size: smaller; color: #999;}
+
+.incremental, .incremental *, .incremental *:after {color: #ccc; visibility: visible;}
+img.incremental, canvas.incremental {visibility: hidden;}
+.slide .current {color: #B02;}
+
+/* diagnostics
+li:after {content: " [" attr(class) "]"; color: #F88;}
+*/
+
+table.piechart, table.barchart, table.linechart { border-spacing: 0.3em 0.15em; }
+table.piechart tr th, table.barchart tr th, table.linechart tr th { white-space: nowrap; }
+table.piechart tr td, table.barchart tr td, table.linechart tr td { vertical-align: top; white-space: nowrap; }
+table.piechart tr td.col, table.barchart tr td.col, table.linechart tr td.col { border-bottom: 1px solid #555; border-right: 1px solid #555; }
+table.fs90 tr td, table.fs90 tr th, div.fs90, pre.fs90, p.fs90 ,ul.fs90 {font-size: 0.9em; }
+table.fs75 tr td, table.fs75 tr th, div.fs75, pre.fs75, p.fs75 ,ul.fs75 {font-size: 0.75em; }
+table.fs66 tr td, table.fs66 tr th, div.fs66, pre.fs66, p.fs66 ,ul.fs66 {font-size: 0.66em; }
+table.fs50 tr td, table.fs50 tr th, div.fs50, pre.fs50, p.fs50 ,ul.fs50 {font-size: 0.5em; }
+
+#soundmanager-debug {position:fixed; top:0px; right:0px; width:30em; height:20em; overflow:auto; border:1px solid red; padding:1em; margin:2em; font-family:"sans serif"; font-size: 12px;color: black; background-color:#f6f6f6; z-index: 100;}
+#soundmanager-debug code {font-size: 11px;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/prev_link.png
new file mode 100644
index 000000000..c31d21350
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/prev_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/prev_over.png
new file mode 100644
index 000000000..6fef4fa52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/prev_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/print.css
new file mode 100755
index 000000000..220083260
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/print.css
@@ -0,0 +1 @@
+/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul { page-break-inside: avoid; visibility: visible !important; } h1 { page-break-after: avoid; } html { width:100%; overflow:hidden; } body { font-size: 12pt; background: white; width:100%; } * { color: black; } #slide0 h1 { font-size: 200%; border: none; margin: 0.5em 0 0.25em; } #slide0 h3 { margin: 0; padding: 0; } #slide0 h4 { margin: 0 0 0.5em; padding: 0; } #slide0 { margin-bottom: 3em; } h1 { border-top: 2pt solid gray; border-bottom: 1px dotted silver; padding:0.2em 0 0.3em 0; } .extra { background: transparent !important; } div.extra, pre.extra, .example { font-size: 10pt; color: #333; } ul.extra a { font-weight: bold; } p.example { display: none; } #header { display: none; } #footer h1 { margin: 0; border-bottom: 1px solid; color: gray; font-style: italic; } #footer h2, #controls { display: none; } div.handout { display:block; border-top: 2px dotted #ccc; background:url(pics/back-handout-print.png) top right no-repeat #fff; min-height:6em; padding-right:6em; margin-bottom:1em; } .slide { display:block; background:url(pics/back-slide-print.png) top right no-repeat #fff; min-height:6em; margin-bottom:1em; } table { display:block; /* display:none; */ font-size:90%; overflow:hidden; margin-top:1em; margin-bottom:1em; } pre , code { margin:0; font-size:1pt; overflow:auto; } img { max-width:100% !important; } /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .layout, .layout * { display: none !important; } \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/s5-core.css
new file mode 100755
index 000000000..86444e041
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/s5-core.css
@@ -0,0 +1,9 @@
+/* Do not edit or override these styles! The system will likely break if you do. */
+
+div#header, div#footer, div#controls, .slide {position: absolute;}
+html>body div#header, html>body div#footer,
+ html>body div#controls, html>body .slide {position: fixed;}
+.handout {display: none;}
+.layout {display: block;}
+.slide, .hideme, .incremental {visibility: hidden;}
+#slide0 {visibility: visible;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/slide0h1.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/slide0h1.gif
new file mode 100644
index 000000000..886235eb9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/slide0h1.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/slides.css
new file mode 100755
index 000000000..0786d7dbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/slides.css
@@ -0,0 +1,3 @@
+@import url(s5-core.css); /* required to make the slide show run at all */
+@import url(framing.css); /* sets basic placement and size of slide components */
+@import url(pretty.css); /* stuff that makes the slides look better than blah */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/slides.js
new file mode 100644
index 000000000..510a04c0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/slides.js
@@ -0,0 +1,2812 @@
+// S5 1.3beta7 (18-Apr-2007) advanced version by C. Effenberger
+// Please see http://s5.netzgesta.de/ for more information
+// based on S5 v1.2a1 slides.js -- released into the Public Domain
+// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
+// about all the wonderful and talented contributors to this code!
+// audio extension: soundmanager2 is NOT Public Domain
+// Please see http://www.schillmania.com/projects/soundmanager2/ for information
+
+var undef;
+var slideCSS = '';
+var snum = 0;
+var smax = 1;
+var incpos = 0;
+var number = undef;
+var firstTime = 1;
+var s5mode = true;
+var helpmode = false;
+var defaultView = 'slideshow'; //outline
+var controlVis = 'visible';
+var s5Path = 'lib/plugins/s5reloaded/';
+
+// scalable images extension
+var empx = 0;
+var images = new Array();
+var canvas = new Array();
+var medias = new Array();
+var piecharts = new Array();
+var barcharts = new Array();
+var linecharts = new Array();
+// scalable images extension
+
+// transition extension
+var tranSitions = false;
+var fadeModus = false;
+var fadeDuration = 500;
+var incrDuration = 250;
+var opac = 1;
+var cid = '';
+var nid = '';
+var tid = '';
+var jl = '';
+// transition extension
+
+// autoplay extension
+var autoMatic = false;
+var playLoop = false;
+var playPause = false;
+var autoRun = false;
+var playDelay = 5000;
+var remainDer = 0;
+var incrDelay = 0;
+// autoplay extension
+
+// audio extension
+var sound = new Array();
+var audioSupport = false;
+var audioVolume = 100;
+var audioError = false;
+var swfUnloaded = true;
+var bgSoundItem = 9999;
+var curSoundID = -1;
+// audio extension
+
+// panel extension
+var imgWidth = 32;
+var imgHeight = 32;
+// panel extension
+
+// canvas chart extension
+var canvasSupport = false;
+var ChartData = new Array();
+var colorSlice = new Array();
+var font = document.createElement("img");
+font.setAttribute("src", s5Path+"ui/graphic_support/numeric.png");
+signs = {
+ '0': {sx: 0, sy: 0, sw: 48, sh: 64},
+ '1': {sx: 48, sy: 0, sw: 48, sh: 64},
+ '2': {sx: 96, sy: 0, sw: 48, sh: 64},
+ '3': {sx: 144, sy: 0, sw: 48, sh: 64},
+ '4': {sx: 192, sy: 0, sw: 48, sh: 64},
+ '5': {sx: 240, sy: 0, sw: 48, sh: 64},
+ '6': {sx: 288, sy: 0, sw: 48, sh: 64},
+ '7': {sx: 336, sy: 0, sw: 48, sh: 64},
+ '8': {sx: 384, sy: 0, sw: 48, sh: 64},
+ '9': {sx: 432, sy: 0, sw: 48, sh: 64},
+ '%': {sx: 480, sy: 0, sw: 48, sh: 64},
+ '.': {sx: 528, sy: 0, sw: 24, sh: 64}
+};
+var colorNames= new Array();
+colorNames["black"]="#000000"; colorNames["maroon"]="#800000";
+colorNames["green"]="#008000"; colorNames["olive"]="#808000";
+colorNames["navy"]="#000080"; colorNames["purple"]="#800080";
+colorNames["teal"]="#008080"; colorNames["gray"]="#808080";
+colorNames["silver"]="#C0C0C0"; colorNames["red"]="#FF0000";
+colorNames["lime"]="#00FF00"; colorNames["yellow"]="#FFFF00";
+colorNames["blue"]="#0000FF"; colorNames["fuchsia"]="#FF00FF";
+colorNames["aqua"]="#00FFFF"; colorNames["white"]="#FFFFFF";
+colorNames["aliceblue"]="#F0F8FF"; colorNames["antiquewhite"]="#FAEBD7";
+colorNames["aquamarine"]="#7FFFD4"; colorNames["azure"]="#F0FFFF";
+colorNames["beige"]="#F5F5DC"; colorNames["blueviolet"]="#8A2BE2";
+colorNames["brown"]="#A52A2A"; colorNames["burlywood"]="#DEB887";
+colorNames["cadetblue"]="#5F9EA0"; colorNames["chartreuse"]="#7FFF00";
+colorNames["chocolate"]="#D2691E"; colorNames["coral"]="#FF7F50";
+colorNames["cornflowerblue"]="#6495ED"; colorNames["cornsilk"]="#FFF8DC";
+colorNames["crimson"]="#DC143C"; colorNames["darkblue"]="#00008B";
+colorNames["darkcyan"]="#008B8B"; colorNames["darkgoldenrod"]="#B8860B";
+colorNames["darkgray"]="#A9A9A9"; colorNames["darkgreen"]="#006400";
+colorNames["darkkhaki"]="#BDB76B"; colorNames["darkmagenta"]="#8B008B";
+colorNames["darkolivegreen"]="#556B2F"; colorNames["darkorange"]="#FF8C00";
+colorNames["darkorchid"]="#9932CC"; colorNames["darkred"]="#8B0000";
+colorNames["darksalmon"]="#E9967A"; colorNames["darkseagreen"]="#8FBC8F";
+colorNames["darkslateblue"]="#483D8B"; colorNames["darkslategray"]="#2F4F4F";
+colorNames["darkturquoise"]="#00CED1"; colorNames["darkviolet"]="#9400D3";
+colorNames["deeppink"]="#FF1493"; colorNames["deepskyblue"]="#00BFFF";
+colorNames["dimgray"]="#696969"; colorNames["dodgerblue"]="#1E90FF";
+colorNames["firebrick"]="#B22222"; colorNames["floralwhite"]="#FFFAF0";
+colorNames["forestgreen"]="#228B22"; colorNames["gainsboro"]="#DCDCDC";
+colorNames["ghostwhite"]="#F8F8FF"; colorNames["gold"]="#FFD700";
+colorNames["goldenrod"]="#DAA520"; colorNames["greenyellow"]="#ADFF2F";
+colorNames["honeydew"]="#F0FFF0"; colorNames["hotpink"]="#FF69B4";
+colorNames["indianred"]="#CD5C5C"; colorNames["indigo"]="#4B0082";
+colorNames["ivory"]="#FFFFF0"; colorNames["khaki"]="#F0E68C";
+colorNames["lavender"]="#E6E6FA"; colorNames["lavenderblush"]="#FFF0F5";
+colorNames["lawngreen"]="#7CFC00"; colorNames["lemonchiffon"]="#FFFACD";
+colorNames["lightblue"]="#ADD8E6"; colorNames["lightcoral"]="#F08080";
+colorNames["lightcyan"]="#E0FFFF"; colorNames["lightgoldenrodyellow"]="#FAFAD2";
+colorNames["lightgreen"]="#90EE90"; colorNames["lightgrey"]="#D3D3D3";
+colorNames["lightpink"]="#FFB6C1"; colorNames["lightsalmon"]="#FFA07A";
+colorNames["lightseagreen"]="#20B2AA"; colorNames["lightskyblue"]="#87CEFA";
+colorNames["lightslategray"]="#778899"; colorNames["lightsteelblue"]="#B0C4DE";
+colorNames["lightyellow"]="#FFFFE0"; colorNames["limegreen"]="#32CD32";
+colorNames["linen"]="#FAF0E6"; colorNames["mediumaquamarine"]="#66CDAA";
+colorNames["mediumblue"]="#0000CD"; colorNames["mediumorchid"]="#BA55D3";
+colorNames["ediumpurple"]="#9370D"; colorNames["mediumseagreen"]="#3CB371";
+colorNames["mediumslateblue"]="#7B68EE"; colorNames["mediumspringgreen"]="#00FA9A";
+colorNames["mediumturquoise"]="#48D1CC"; colorNames["mediumvioletred"]="#C71585";
+colorNames["midnightblue"]="#191970"; colorNames["mintcream"]="#F5FFFA";
+colorNames["mistyrose"]="#FFE4E1"; colorNames["moccasin"]="#FFE4B5";
+colorNames["navajowhite"]="#FFDEAD"; colorNames["oldlace"]="#FDF5E6";
+colorNames["olivedrab"]="#6B8E23"; colorNames["orange"]="#FFA500";
+colorNames["orangered"]="#FF4500"; colorNames["orchid"]="#DA70D6";
+colorNames["palegoldenrod"]="#EEE8AA"; colorNames["palegreen"]="#98FB98";
+colorNames["paleturquoise"]="#AFEEEE"; colorNames["palevioletred"]="#DB7093";
+colorNames["papayawhip"]="#FFEFD5"; colorNames["peachpuff"]="#FFDAB9";
+colorNames["peru"]="#CD853F"; colorNames["pink"]="#FFC0CB";
+colorNames["plum"]="#DDA0DD"; colorNames["powderblue"]="#B0E0E6";
+colorNames["rosybrown"]="#BC8F8F"; colorNames["royalblue"]="#4169E1";
+colorNames["saddlebrown"]="#8B4513"; colorNames["salmon"]="#FA8072";
+colorNames["sandybrown"]="#F4A460"; colorNames["seagreen"]="#2E8B57";
+colorNames["seashell"]="#FFF5EE"; colorNames["sienna"]="#A0522D";
+colorNames["skyblue"]="#87CEEB"; colorNames["slateblue"]="#6A5ACD";
+colorNames["slategray"]="#708090"; colorNames["snow"]="#FFFAFA";
+colorNames["springgreen"]="#00FF7F"; colorNames["steelblue"]="#4682B4";
+colorNames["tan"]="#D2B48C"; colorNames["thistle"]="#D8BFD8";
+colorNames["tomato"]="#FF6347"; colorNames["turquoise"]="#40E0D0";
+colorNames["violet"]="#EE82EE"; colorNames["wheat"]="#F5DEB3";
+colorNames["whitesmoke"]="#F5F5F5"; colorNames["yellowgreen"]="#9ACD32";
+var canvas_bgcolor = "";
+var canvas_width = 200;
+var canvas_height = 200;
+var canvas_noshade = 0;
+var canvas_nofill = 0;
+var canvas_noshadow = 0;
+var canvas_htmltext = 0;
+var canvas_imgtext = 0;
+var canvas_notext = 0;
+// canvas chart extension
+
+var s5NotesWindow;
+var s5NotesWindowLoaded = false;
+var previousSlide = 0;
+var presentationStart = new Date();
+var slideStart = new Date();
+
+var countdown = {
+ timer: 0,
+ state: 'pause',
+ start: new Date(),
+ end: 0,
+ remaining: 0
+};
+
+var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
+if(isIE) var notIE7 = parseInt(navigator.appVersion) < 7 ? 1 : 0;
+var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
+var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
+var isS2 = navigator.userAgent.indexOf('Safari') >= 2 ? 1 : 0;
+
+function hasClass(object, className) {
+ if (!object.className) return false;
+ return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
+}
+
+function hasValue(object, value) {
+ if (!object) return false;
+ return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
+}
+
+function removeClass(object,className) {
+ if (!object || !hasClass(object,className)) return;
+ object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
+}
+
+function addClass(object,className) {
+ if (!object || hasClass(object, className)) return;
+ if (object.className) {
+ object.className += ' '+className;
+ } else {
+ object.className = className;
+ }
+}
+
+function changeClass(object,className) {
+ if (!object) return;
+ object.firstChild.className = className;
+}
+
+function GetElementsWithClassName(elementName,className) {
+ var allElements = document.getElementsByTagName(elementName);
+ var elemColl = new Array();
+ for (var i = 0; i< allElements.length; i++) {
+ if (hasClass(allElements[i], className)) {
+ elemColl[elemColl.length] = allElements[i];
+ }
+ }
+ return elemColl;
+}
+
+function isParentOrSelf(element, id) {
+ if (element == null || element.nodeName=='BODY') return false;
+ else if (element.id == id) return true;
+ else return isParentOrSelf(element.parentNode, id);
+}
+
+function nodeValue(node) {
+ var result = "";
+ if (node.nodeType == 1) {
+ var children = node.childNodes;
+ for (var i = 0; i < children.length; ++i) {
+ result += nodeValue(children[i]);
+ }
+ }
+ else if (node.nodeType == 3) {
+ result = node.nodeValue;
+ }
+ return(result);
+}
+
+function slideLabel() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var list = document.getElementById('jumplist');
+ smax = slideColl.length;
+ for (var n = 0; n < smax; n++) {
+ var obj = slideColl[n];
+ var did = 'slide' + n.toString();
+ obj.setAttribute('id',did);
+ var otext = '';
+ var menu = obj.firstChild;
+ if (!menu) continue; // to cope with empty slides
+ while (menu && menu.nodeType == 3) {
+ menu = menu.nextSibling;
+ }
+ if (!menu) continue; // to cope with slides with only text nodes
+ var menunodes = menu.childNodes;
+ for (var o = 0; o < menunodes.length; o++) {
+ otext += nodeValue(menunodes[o]);
+ }
+ list.options[list.length] = new Option(n + ' : ' + otext, n);
+ }
+}
+
+function currentSlide() {
+ var cs, at, fd, ss;
+ if (document.getElementById) {
+ cs = document.getElementById('currentSlide');
+ } else {
+ cs = document.currentSlide;
+ }
+ fd = fadeModus?"F":"&ndash;";
+ ss = audioSupport?"S":"&ndash;";
+ at = (autoMatic?(playPause?"||":(playLoop?"&gt;0":"&gt;|")):"&ndash;&ndash;");
+ cs.innerHTML = '<div id="plink" nowrap="nowrap">' +
+ '<span id="csFade">[' + fd + ss + ']<\/span>&nbsp;' +
+ '<span id="csHere"><strong>' + snum + '<\/strong><\/span>' +
+ '<span id="csSep">\/<\/span>' +
+ '<span id="csTotal">' + (smax-1) + '<\/span>&nbsp;' +
+ '<span id="csAuto">[' + at + ']<\/span>' +
+ '<\/div>';
+
+ if (snum == 0) {
+ cs.style.visibility = 'hidden';
+ } else {
+ cs.style.visibility = 'visible';
+ }
+}
+
+function go(step) {
+ if (document.getElementById('slideProj').disabled || step == 0) return;
+ jl = document.getElementById('jumplist');
+ cid = 'slide' + snum;
+ var ce = document.getElementById(cid);
+ if (incrementals[snum].length > 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ removeClass(incrementals[snum][i], 'current');
+ removeClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ if (step != 'j') {
+ snum += step;
+ lmax = smax - 1;
+ if (snum > lmax) snum = lmax;
+ if (snum < 0) snum = 0;
+ }else {
+ snum = parseInt(jl.value);
+ }
+ nid = 'slide' + snum;
+ var ne = document.getElementById(nid);
+ if (!ne) {
+ ne = document.getElementById('slide0');
+ nid = 'slide0';
+ snum = 0;
+ }
+ if (step < 0) {
+ incpos = incrementals[snum].length
+ }else {
+ incpos = 0;
+ }
+ if (incrementals[snum].length > 0 && incpos == 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ if (hasClass(incrementals[snum][i], 'current')) {
+ incpos = i + 1;
+ }else {
+ addClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ }
+ if (incrementals[snum].length > 0 && incpos > 0) {
+ addClass(incrementals[snum][incpos - 1], 'current');
+ }
+ var guru = document.getElementById('guru');
+ if(guru && snum==0) {
+ guru.style.visibility = 'visible';
+ }else if(guru && snum>0) {
+ guru.style.visibility = 'hidden';
+ }
+ if(tranSitions && s5mode && fadeModus) {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {fadeoutSound(curSoundID,true); } // audio support
+ }
+ changeOpac(0,nid);
+ changeOpac(100,cid);
+ ce.style.visibility = 'visible';
+ shiftOpacity(cid,fadeDuration);
+ window.setTimeout("changeSlides()",fadeDuration);
+ }else {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {stopSound(curSoundID); } // audio support
+ }
+ ce.style.visibility = 'hidden';
+ if (isOp) location.hash = nid;
+ ne.style.visibility = 'visible';
+ finishSlides();
+ }
+}
+
+function changeSlides() {
+ if(nid != cid) changeOpac(100,cid);
+ document.getElementById(cid).style.visibility = 'hidden';
+ document.getElementById(nid).style.visibility = 'visible';
+ if (isOp) location.hash = nid;
+ shiftOpacity(nid,fadeDuration);
+ window.setTimeout("finishSlides()",fadeDuration);
+}
+
+function finishSlides() {
+ jl.selectedIndex = snum;
+ currentSlide();
+ loadNote();
+ permaLink();
+ number = undef;
+ if(sound[getSoundID(nid)]) {
+ playSound(nid); // audio support
+ }else if(sound[bgSoundItem] && curSoundID != bgSoundItem) {
+ playSound(bgSoundItem); // audio support
+ }
+}
+
+function goTo(target) {
+ if (target >= smax || target == snum) return;
+ go(target - snum);
+}
+
+function subgo(step) {
+ if (step > 0) {
+ removeClass(incrementals[snum][incpos - 1],'current');
+ removeClass(incrementals[snum][incpos], 'incremental');
+ if(tranSitions && s5mode && fadeModus) {
+ if(!incrementals[snum][incpos].id) {
+ var tmp = new Date(); tid = "inc" + String(tmp.getTime());
+ incrementals[snum][incpos].id = tid;
+ }else {
+ tid = incrementals[snum][incpos].id;
+ }
+ if(typeof(incrementals[snum][incpos].src) != "undefined" || incrementals[snum][incpos].getContext) {
+ changeOpac(0,tid);
+ addClass(incrementals[snum][incpos],'current');
+ shiftOpacity(tid,incrDuration);
+ setTimeout("nextInc()",incrDuration);
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ } else {
+ incpos--;
+ removeClass(incrementals[snum][incpos],'current');
+ addClass(incrementals[snum][incpos], 'incremental');
+ addClass(incrementals[snum][incpos - 1],'current');
+ loadNote();
+ }
+}
+
+function nextInc() {
+ incpos++;
+ loadNote();
+}
+
+function toggle() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ var guru = document.getElementById('guru');
+ if (!slides.disabled) {
+ stopPlay();
+ if(audioSupport && !swfUnloaded) stopAllSounds();
+ slides.disabled = true;
+ outline.disabled = false;
+ s5mode = false;
+ fontSize(1,'em');
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'visible';
+ }
+ if(guru) guru.style.visibility = 'hidden';
+ } else {
+ slides.disabled = false;
+ outline.disabled = true;
+ s5mode = true;
+ fontScale();
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'hidden';
+ }
+ slideColl[snum].style.visibility = 'visible';
+ if(guru && snum==0) guru.style.visibility = 'visible';
+ }
+}
+
+function showHide(action) {
+ var obj = GetElementsWithClassName('*','hideme')[0];
+ switch (action) {
+ case 's':
+ obj.style.visibility = 'visible';
+ break;
+ case 'h':
+ obj.style.visibility = 'hidden';
+ break;
+ case 'k':
+ if (obj.style.visibility != 'visible') {
+ obj.style.visibility = 'visible';
+ } else {
+ obj.style.visibility = 'hidden';
+ }
+ break;
+ }
+}
+
+function keys(key) {
+ if (!key) {
+ key = event;
+ key.which = key.keyCode;
+ }
+ if (helpmode) {
+ dumpHelpReq();
+ return;
+ }
+ if (key.which == 84 && !isOp) {
+ toggle();
+ return;
+ }
+ if (s5mode) {
+ if (autoMatic) {
+ switch (key.which) {
+ case 70: // f/ading on/off
+ switchFade();
+ break;
+ case 83: // s/ound on/off
+ toggleSounds();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 65: // a/utoplay on/off
+ stopPlay();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 80: // p/ause
+ case 32: // spacebar
+ pausePlay();
+ break;
+ }
+ }else {
+ switch (key.which) {
+ case 8: // backspace = HELP
+ createHelpReq();
+ break;
+ case 10: // return
+ case 13: // enter
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ if(number != undef) {
+ goTo(number);
+ break;
+ }
+ case 32: // spacebar
+ case 34: // page down
+ case 39: // rightkey
+ case 40: // downkey
+ if(number != undef) {
+ go(number);
+ } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ break;
+ case 33: // page up
+ case 37: // leftkey
+ case 38: // upkey
+ if(number != undef) {
+ go(-1 * number);
+ } else if (!incrementals[snum] || incpos <= 0) {
+ go(-1);
+ } else {
+ subgo(-1);
+ }
+ break;
+ case 65: // a/utoplay
+ startPlay();
+ break;
+ case 72: // h
+ case 36: // home
+ goTo(0);
+ break;
+ case 69: // e
+ case 35: // end
+ goTo(smax-1);
+ break;
+ case 70: // f/ade transitions on/off
+ switchFade();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 83: // s/ound support on/off
+ toggleSounds();
+ break;
+ case 27: // escape
+ case 81: // q
+ if(!isOp) byby();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 78: // n
+ createNotesWindow();
+ break;
+ }
+ if (key.which < 48 || key.which > 57) {
+ number = undef;
+ } else {
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
+ }
+ }
+ }
+ return false;
+}
+
+function clicker(e) {
+ number = undef;
+ var target;
+ if (window.event) {
+ target = window.event.srcElement;
+ e = window.event;
+ } else {
+ target = e.target;
+ }
+ if (target.href != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
+ if (!helpmode) {
+ if (!e.which || e.which == 1) {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ }
+ } else {
+ dumpHelpReq();
+ }
+}
+
+function findSlide(hash) {
+ var target = null;
+ var slides = GetElementsWithClassName('*','slide');
+ for (var i = 0; i < slides.length; i++) {
+ var targetSlide = slides[i];
+ if ( (targetSlide.name && targetSlide.name == hash)
+ || (targetSlide.id && targetSlide.id == hash) ) {
+ target = targetSlide;
+ break;
+ }
+ }
+ while(target != null && target.nodeName != 'BODY') {
+ if (hasClass(target, 'slide')) {
+ return parseInt(target.id.slice(5));
+ }
+ target = target.parentNode;
+ }
+ return null;
+}
+
+function slideJump() {
+ if (window.location.hash == null) return;
+ var sregex = /^#slide(\d+)$/;
+ var matches = sregex.exec(window.location.hash);
+ var dest = null;
+ if (matches != null) {
+ dest = parseInt(matches[1]);
+ } else {
+ dest = findSlide(window.location.hash.slice(1));
+ }
+ if (dest != null)
+ go(dest - snum);
+}
+
+function fixLinks() {
+ var thisUri = window.location.href;
+ thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
+ var aelements = document.getElementsByTagName('A');
+ for (var i = 0; i < aelements.length; i++) {
+ var a = aelements[i].href;
+ var slideID = a.match('\#slide[0-9]{1,2}');
+ if ((slideID) && (slideID[0].slice(0,1) == '#')) {
+ var dest = findSlide(slideID[0].slice(1));
+ if (dest != null) {
+ if (aelements[i].addEventListener) {
+ aelements[i].addEventListener("click", new Function("e",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "if (e.preventDefault) e.preventDefault();"), true);
+ } else if (aelements[i].attachEvent) {
+ aelements[i].attachEvent("onclick", new Function("",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "event.returnValue = false;"));
+ }
+ }
+ }
+ }
+}
+
+function externalLinks() {
+ if (!document.getElementsByTagName) return;
+ var anchors = document.getElementsByTagName('a');
+ for (var i=0; i<anchors.length; i++) {
+ var anchor = anchors[i];
+ if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
+ anchor.target = '_blank';
+ addClass(anchor,'external');
+ }
+ }
+}
+
+function permaLink() {
+ document.getElementById('plink').href = window.location.pathname + '#slide' + snum;
+}
+
+function createControls() {
+ var controlsDiv = document.getElementById("controls");
+ if (!controlsDiv) return;
+ var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
+ var hideDiv, hideList = '';
+ if (controlVis == 'hidden') {
+ hideDiv = hider;
+ } else {
+ hideList = hider;
+ }
+ if(isOp) {
+ var str = '';
+ }else {
+ var str = '<a accesskey="t" id="sheet" title="toggle CSS" href="javascript:toggle();">&plusmn;<\/a>';
+ }
+ if(isIE) {
+ var tmp = "move around&xA0;until the color&xA0;change to red!";
+ }else if(isS2) {
+ var tmp = "move around\r\nuntil the color\r\nchange to red!";
+ }else {
+ var tmp = "move around until color change to red!";
+ }
+ if(isIE) {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] for keyboard help!"><ul>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst" style="vertical-align: middle; width: 160px;"><select style="cursor: auto; width: 160px; height: auto;" id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del" style="vertical-align: middle; width: 52px;"><select style="cursor: auto; width: 52px; height: auto;" id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul><\/div><\/form>';
+ }else {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] or double click this area for keyboard help!" ondblclick="createHelpReq();"><ul>' +
+ '<li id="exit"><a href="javascript:byby();" accesskey="q" title="exit Show"><\/a><\/li>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li class="vr"><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst"><a id="list" style="cursor:wait;" title="' + tmp + '"><\/a><select id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="fadeLinks" class="vr"><\/li>' +
+ '<li id="fade"><a class="isoff" href="javascript:switchFade();" accesskey="f" title="Transions"><\/a><\/li>' +
+ '<li id="audioLinks" class="vr"><\/li>' +
+ '<li id="audio"><a class="isoff" href="javascript:toggleSounds();" accesskey="s" title="Sounds" ><\/a><\/li>' +
+ '<li id="vol"><a id="volume" style="cursor:wait;" title="' + tmp + '"><\/a><select id="volumelist" title="select Volume" onchange="setVolume();"><option value="100">100<\/option><option value="90">90<\/option><option value="80">80<\/option><option value="70">70<\/option><option value="60">60<\/option><option value="50">50<\/option><option value="40">40<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="10">10<\/option><option value="0">0<\/option><\/select><\/li>' +
+ '<li id="autoLinks" class="vr"><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del"><a id="delay" style="cursor:wait;" title="' + tmp + '"><\/a><select id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul>' +
+ '<a href="http://s5.netzgesta.de" target="_blank" title="S5 Reloaded"><img style="position: absolute; right: 0; bottom: 0;" src="data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAYAAAASYli2AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAYpSURBVHjaYvz//z8DOYCRkZEZRAEx0Ij/f2HiAAHEgqYIpACkkB1J7g8Q/wLRIJ1QNSB5fiDmAOLvQKHPQPoHSB4ggFiQDGMCUnxALAPECkAsBLIdiD8A8SMgfghU8wlqkTgQK1ZVVWldv3792fr16y8D+c9AhgMEECPIy1DDRIDYAojdzMzMWNXV1UG2/v/y5Qvzw4cPP587d24/kH8Gar/uwoULQ+/cufNFXFyciZmZ+UVmZuZKoFmvAQII5kJOIDbi4uKK2Llz53EbG5vP6GGWn5+vMWnSpJtA5jcg5v327Rtnc3PzfSD79+rVq2WBNBtIHUAAwQzkAWKzBQsWnIUZFhISovXmzZsfkpKSDD09PY8kJCR+QtWCguGvrKwsz7Rp07Q4ODh+srCwgILiH0gSIIBgBrICsUBoaCgorBiANgqvXbtWDMg8AcQf9+7d+x0o9xbI/gJV/3fVqlUvmJiY/gIdcaWhoYETahEDQADBDPwNxO9h3gNpBiq6f/HiRbWjR4+yvnr16grQNbeh6kCWsxkYGIhClT8yNDQUgyYhBoAAYoIKfgXi06mpqUowQ+vr6x+uW7fu0suXL8+uWbOGS0BAwB7kC6jXvqmoqLDIyclxzZo1S4udnR2WtBgAAggWyyCXSgOxZUxMjGpWVtY7S0vLr8iRsnnzZl4/P7/DQCYoYtSA2DApKUkVGNNPDh06dBrIvwU06xNAAMEM5AIKqAOxCjQsmHl5eXWdnJx4N2zYcB4prd4CUpfwJRuAAGJCimULoGYpbm5uZ5DBnz9/5tq4caPWkSNHeJEc+g0aTFzfv3/nACabjzk5OW8FBQVloLmHASCAYJECUiTg7+//HJiQTzY2NsrfvXv3n7m5+T5YMgJGEkjDS2gY/pKRkeHt7Ow0Bsb0v9+/fz+HxTJAAMG8DHKFLTC9aRUXF79BT9Qgw4CWHAAy70FdYgjEDgkJCTpWVlYMQBfeAaaMPqBZbwECCGYgMzQGQSleCehS0X///jEDvf9lxYoVoOTyAIjfANX+BqrlBrL1gLFf09vb+0FaWvoHMBctA6USUKQABBAjrPiCliKg7AOKIG5ougLlju9Ipc1foDJWqMWGhYWFtsBg4RISEnrg5uY2BWQgQACxIBkGMkQKijmRfPwXWuI8ASp7DQ1vEP4DDO8PwBzzDJheT0CLPQaAAEJOh0o8zAzeihwMiv+gGZ0B4sz/bIwM797/YTh1/wfDIWj5qAfMmtFnzpz5ICIiwqKoqPgjKChoOtCs5wABhJyXpUCGzddgOIethJ71jEFi1nNwgQrKz8zv37//097eDop15qVLl0pAzWAACCAWhEMYOJFdduELA++b3wxsTIwMfzmYGH6xMDG8gYYpKAg+cnJy/gB6VwuYZFiA7E+wvAwQQCy46ozexwzG17+BYx6UVE4B8Vmo68CRFR0dDQo3UAHBBUwJ4lCLGAACCNnAv4zQxAkCxbIMZ0EuBIYb98EPDFo3voGTzjOogVzArGf969cvNmC2+wssHD7BDAQIIBakmHwPDPy3MAMNeBhgpfbbVEkGhqQbDJaXvjI8BPJB4jz79u37DcwlP+fPn38NuTwECCBkA1+8+8Nwtusxg+STHwwcP/8z8EuwMXA1KjBcBSlwEmRgBhrID/U2O7QMBIEHxsbGkrAwBAggmIGgNMT64AfDWyB+By0EQMVZlC0/wwsXQYa38hzgCGGBWv5ZU1OT4c+fP8yLFi1SA3r5Haw8BAggmIGg5KBpJ8BgeOYTg8S3f2DN/OxMDNwgw0AKnv0EJ+avsITu7u6+EZqzQEHwHFqaMwAEEAtShS/pLcTwrU+Z4QwsyQANOwIL06tfGV5BqwmQWoGKigoLYJnJvWPHjhstLS169vb2M0DqAAIIVh6CXHT/9ndIawEUITCXgUDrQwbGbe8YjkJdAzZQVVVV/t69e8LAgtUYaNgxWKQABBByacMHzfTK9gIMYkBZpj//GT4c+8gAKm1AsfseqPYPtHTXAtaEacBqlgHoyq+srKw3XV1dFwHlvwEEECNyYwmp3cIJjbUf0DbLP7RGEg+0bcMCjQxQzH8BWQgQQIzktr5wAYAAYmKgMgAIMAAp8Fx3osz1lgAAAABJRU5ErkJggg==" width="20" height="32" alt="S5" \/><\/a>' +
+ '<\/div><\/form>';
+ }
+ if (controlVis == 'hidden') {
+ var hidden = document.getElementById('navLinks');
+ } else {
+ var hidden = document.getElementById('jumplist');
+ }
+ addClass(hidden,'hideme');
+}
+
+function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
+ if (!s5mode && !isOp) return false;
+ var hScreen = screen.width; var vScreen = screen.height;
+ var vWindow = window.outerHeight; var hWindow = window.outerWidth;
+ if (isOp && s5mode && defaultView=='slideshow' && ((hScreen != hWindow) || (vScreen != vWindow))) {
+ toggle();
+ return false;
+ }
+ if (isOp && !s5mode && ((hScreen != hWindow) || (vScreen != vWindow))) return false;
+ if (isOp && !s5mode && (hScreen == hWindow) && (vScreen == vWindow)) toggle();
+ var vScale = 48; // both yield 16 (the usual browser default) at 1024x768
+ var hScale = 64; // perhaps should auto-calculate based on theme's declared value?
+ if (window.innerHeight) {
+ var vSize = window.innerHeight;
+ var hSize = window.innerWidth;
+ } else if (document.documentElement.clientHeight) {
+ var vSize = document.documentElement.clientHeight;
+ var hSize = document.documentElement.clientWidth;
+ } else if (document.body.clientHeight) {
+ var vSize = document.body.clientHeight;
+ var hSize = document.body.clientWidth;
+ } else {
+ var vSize = 700; // assuming 1024x768, minus chrome and such equals 8:5
+ var hSize = 1024; // these do not account for kiosk mode or Opera Show
+ }
+ var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
+ extendImgSizes(newSize); // scalable images extension
+ extendCanSizes(newSize); // scalable canvas extension
+ extendObjSizes(newSize); // scalable object extension
+ fontSize(newSize,"px");
+ if(!isS2 || firstTime==0) {
+ generateCanvas(); // dynamic canvas extension
+ }
+ if (isGe) { // hack to counter incremental reflow bugs
+ var obj = document.getElementsByTagName('body')[0];
+ obj.style.visibility = 'hidden';
+ obj.style.display = 'none';
+ obj.style.display = 'block';
+ obj.style.visibility = 'visible';
+ changeOpac(100,'slide' + snum);
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("fixReflow()",10);
+ }else {
+ setListPos(); // invisible select extension
+ }
+}
+
+function fixReflow() {
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("finishReflow()",10);
+}
+function finishReflow() {
+ setListPos(); // invisible select extension
+}
+
+function fontSize(val,fmt) {
+ var value = val + fmt;
+ if (!(s5ss = document.getElementById('s5ss'))) {
+ if (!document.createStyleSheet) {
+ document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
+ s5ss.setAttribute('media','screen, projection');
+ s5ss.setAttribute('id','s5ss');
+ } else {
+ document.createStyleSheet();
+ document.s5ss = document.styleSheets[document.styleSheets.length - 1];
+ }
+ }
+ if (!(document.s5ss && document.s5ss.addRule)) {
+ while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
+ s5ss.appendChild(document.createTextNode('html {font-size: ' + value + ' !important;}'));
+ } else {
+ document.s5ss.addRule('html','font-size: ' + value + ' !important;');
+ }
+}
+
+function windowChange() {
+ fontScale();
+}
+
+function notOperaFix() {
+ slideCSS = document.getElementById('slideProj').href;
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ slides.setAttribute('media','screen');
+ outline.disabled = true;
+ if (isGe) {
+ slides.setAttribute('href','null'); // Gecko fix
+ slides.setAttribute('href',slideCSS); // Gecko fix
+ }
+ if ((isIE && notIE7) && document.styleSheets && document.styleSheets[0]) {
+ document.styleSheets[0].addRule('img', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('div', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('.slide', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ }
+}
+
+function getIncrementals(obj) {
+ var incrementals = new Array();
+ if (!obj)
+ return incrementals;
+ var children = obj.childNodes;
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ if (hasClass(child, 'incremental')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'incremental');
+ for (var j = 0; j < child.childNodes.length; j++) {
+ if (child.childNodes[j].nodeType == 1) {
+ addClass(child.childNodes[j], 'incremental');
+ }
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ removeClass(child,'incremental');
+ }
+ }
+ if (hasClass(child, 'show-first')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'show-first');
+ if (child.childNodes[isGe].nodeType == 1) {
+ removeClass(child.childNodes[isGe], 'incremental');
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ }
+ }
+ incrementals = incrementals.concat(getIncrementals(child));
+ }
+ return incrementals;
+}
+
+function createIncrementals() {
+ var incrementals = new Array();
+ for (var i = 0; i < smax; i++) {
+ incrementals[i] = getIncrementals(document.getElementById('slide'+i));
+ }
+ return incrementals;
+}
+
+function trap(e) {
+ if (!e) {
+ e = event;
+ e.which = e.keyCode;
+ }
+ try {
+ modifierKey = e.ctrlKey || e.altKey || e.metaKey;
+ }
+ catch(e) {
+ modifierKey = false;
+ }
+ return modifierKey || e.which == 0;
+}
+
+// notes extension
+function noteLabel() { // Gives notes id's to match parent slides
+ var notes = GetElementsWithClassName('div','notes');
+ for (var i = 0; i < notes.length; i++) {
+ var note = notes[i];
+ var id = 'note' + note.parentNode.id.substring(5);
+ note.setAttribute('id',id);
+ }
+ resetElapsedSlide();
+ resetRemainingTime();
+ window.setInterval('updateElaspedTime()', 1000);
+}
+
+function createNotesWindow() { // creates a window for our notes
+ if (!s5NotesWindow || s5NotesWindow.closed) { // Create the window if it doesn't exist
+ s5NotesWindowLoaded = false;
+ // Note: Safari has a tendency to ignore window options preferring to default to the settings of the parent window, grr.
+ s5NotesWindow = window.open(s5Path+'ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0');
+ }
+ if (s5NotesWindowLoaded) { // Load the current note if the Note HTML has loaded
+ loadNote();
+ } else { // Keep trying...
+ window.setTimeout('createNotesWindow()', 50);
+ }
+}
+
+function loadNote() {
+// Loads a note into the note window
+ var notes = nextNotes = '<em class="disclaimer">There are no notes for this slide.</em>';
+ if (document.getElementById('note' + snum)) {
+ notes = document.getElementById('note' + snum).innerHTML;
+ }
+ if (document.getElementById('note' + (snum + 1))) {
+ nextNotes = document.getElementById('note' + (snum + 1)).innerHTML;
+ }
+
+ var jl = document.getElementById('jumplist');
+ var slideTitle = jl.options[jl.selectedIndex].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex) ? ' (' + jl.selectedIndex + '/' + (smax - 1) + ')' : '');
+ if (incrementals[snum].length > 0) {
+ slideTitle += ' <small>[' + incpos + '/' + incrementals[snum].length + ']</small>';
+ }
+ if (jl.selectedIndex < smax - 1) {
+ var nextTitle = jl.options[jl.selectedIndex + 1].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex + 1) ? ' (' + (jl.selectedIndex + 1) + '/' + (smax - 1) + ')' : '');
+ } else {
+ var nextTitle = '[end of slide show]';
+ }
+
+ if (s5NotesWindow && !s5NotesWindow.closed && s5NotesWindow.document) {
+ s5NotesWindow.document.getElementById('slide').innerHTML = slideTitle;
+ s5NotesWindow.document.getElementById('notes').innerHTML = notes;
+ s5NotesWindow.document.getElementById('next').innerHTML = nextTitle;
+ s5NotesWindow.document.getElementById('nextnotes').innerHTML = nextNotes;
+ }
+ resetElapsedSlide();
+}
+
+function minimizeTimer(id) {
+ var obj = s5NotesWindow.document.getElementById(id);
+ if (hasClass(obj,'collapsed')) {
+ removeClass(obj,'collapsed');
+ } else {
+ addClass(obj,'collapsed');
+ }
+}
+
+function resetElapsedTime() {
+ presentationStart = new Date();
+ slideStart = new Date();
+ updateElaspedTime();
+}
+
+function resetElapsedSlide() {
+ if (snum != previousSlide) {
+ slideStart = new Date();
+ previousSlide = snum;
+ updateElaspedTime();
+ }
+}
+
+function updateElaspedTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var now = new Date();
+ var ep = s5NotesWindow.document.getElementById('elapsed-presentation');
+ var es = s5NotesWindow.document.getElementById('elapsed-slide');
+ ep.innerHTML = formatTime(now.valueOf() - presentationStart.valueOf());
+ es.innerHTML = formatTime(now.valueOf() - slideStart.valueOf());
+}
+
+function resetRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var startField = s5NotesWindow.document.getElementById('startFrom');
+ startFrom = readTime(startField.value);
+ countdown.remaining = startFrom * 60000; // convert to msecs
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var timeLeft = formatTime(countdown.remaining);
+ tl.innerHTML = timeLeft;
+}
+
+function updateRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var now = new Date();
+ if (countdown.state == 'run') {
+ countdown.remaining = countdown.end - now;
+ }
+ tl.style.color = '';
+ tl.style.backgroundColor = '';
+ if (countdown.remaining >= 0) {
+ var timeLeft = formatTime(countdown.remaining);
+ removeClass(tl,'overtime');
+ if (countdown.remaining < 300000) {
+ tl.style.color = 'rgb(' + (255-Math.round(countdown.remaining/2000)) + ',0,0)';
+ tl.style.backgroundColor = 'rgb(255,255,' + (Math.round(countdown.remaining/2000)) + ')';
+ }
+ } else {
+ var timeLeft = '-' + formatTime(-countdown.remaining);
+ addClass(tl,'overtime');
+ }
+ tl.innerHTML = timeLeft;
+}
+
+function toggleRemainingTime() {
+ if (countdown.state == 'pause') countdown.state = 'run'; else countdown.state = 'pause';
+ if (countdown.state == 'pause') {
+ window.clearInterval(countdown.timer);
+ }
+ if (countdown.state == 'run') {
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ countdown.timer = window.setInterval('updateRemainingTime()', 1000);
+ }
+}
+
+function alterRemainingTime(amt) {
+ var change = amt * 60000; // convert to msecs
+ countdown.end += change;
+ countdown.remaining += change;
+ updateRemainingTime();
+}
+
+function formatTime(msecs) {
+ var time = new Date(msecs);
+
+ var hrs = time.getUTCHours() + ((time.getUTCDate() -1) * 24); // I doubt anyone will spend more than 24 hours on a presentation or single slide but just in case...
+ hrs = (hrs < 10) ? '0'+hrs : hrs;
+ if (hrs == 'NaN' || isNaN(hrs)) hrs = '--';
+
+ var min = time.getUTCMinutes();
+ min = (min < 10) ? '0'+min : min;
+ if (min == 'NaN' || isNaN(min)) min = '--';
+
+ var sec = time.getUTCSeconds();
+ sec = (sec < 10) ? '0'+sec : sec;
+ if (sec == 'NaN' || isNaN(sec)) sec = '--';
+
+ return hrs + ':' + min + ':' + sec;
+}
+
+function readTime(val) {
+ var sregex = /:/;
+ var matches = sregex.exec(val);
+ if (matches == null) {
+ return val;
+ } else {
+ var times = val.split(':');
+ var hours = parseInt(times[0]);
+ var mins = parseInt(times[1]);
+ var total = (hours * 60) + mins;
+ return total;
+ }
+}
+// notes extension
+
+// startup process
+function createSlideShow() {
+ defaultCheck();
+ if(!isIE) createDetector(); // (degrade IE) scalable images extension
+ if(opac!=0 || isIE) { // &&!isIE (degrade IE)
+ tranSitions = false;
+ fadeModus = false;
+ }
+ if(tranSitions && document.getElementById && document.createElement){
+ createProgress();
+ var nop=document.getElementById('StartupControl');
+ nop.onload = dumpProgress;
+ }else {
+ startup();
+ showAll();
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+ }
+}
+
+function defaultCheck() {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'defaultView') {
+ defaultView = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'controlVis') {
+ controlVis = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'tranSitions') {
+ tranSitions = (allMetas[i].content == "true") ? true : false;
+ fadeModus = (tranSitions == true) ? true : false;
+ }
+ if (allMetas[i].name == 'fadeDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ fadeDuration = Math.max(200,Math.min(tmp,2000));
+ }
+ if (allMetas[i].name == 'incrDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ incrDuration = Math.max(50,Math.min(tmp,500));
+ }
+ if (allMetas[i].name == 'autoMatic') {
+ autoMatic = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playLoop') {
+ playLoop = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playDelay') {
+ var tmp = parseInt(allMetas[i].content);
+ playDelay = Math.max(5,Math.min(tmp,90))*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ }
+ if (allMetas[i].name == 'audioSupport') {
+ audioSupport = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'audioVolume') {
+ var tmp = parseInt(allMetas[i].content);
+ audioVolume = Math.max(0,Math.min(tmp,100));
+ }
+ if (allMetas[i].name == 'audioError') {
+ audioError = (allMetas[i].content == "true") ? true : false;
+ }
+ }
+}
+
+function createProgress() {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "StartupProgress";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=100)";
+ }else {
+ pg.style.opacity = 1.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/progress.gif)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+
+ var im = document.createElement('img');
+ im.id = "StartupControl";
+ im.src = s5Path+"ui/graphic_support/blank.gif?" + new Date().valueOf();
+ document.getElementsByTagName("body")[0].appendChild(im);
+}
+
+function startup() {
+ createControls(); // hallvord
+ slideLabel();
+ incrementals = createIncrementals();
+ noteLabel(); // [SI:060104] must follow slideLabel()
+ loadNote();
+ fixLinks();
+ externalLinks();
+ fontScale();
+ if (!isOp) {
+ if(isIE) {
+ document.getElementById('lst').style.backgroundImage = 'none';
+ document.getElementById('del').style.backgroundImage = 'none';
+ }else {
+ document.getElementById('audio').style.backgroundImage = 'none';
+ }
+ notOperaFix();
+ }else if(isOp) {
+ var obj = document.getElementById('exit');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('exit').style.opacity = 0.5;
+ obj = document.getElementById('toggle');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('toggle').style.opacity = 0.5;
+ document.getElementById('jumplist').style.visibility = 'hidden';
+ document.getElementById('list').style.visibility = 'hidden';
+ document.getElementById('lst').style.opacity = 0.5;
+ obj = document.getElementById('audio');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('audio').style.opacity = 0.5;
+ document.getElementById('volumelist').style.visibility = 'hidden';
+ document.getElementById('volume').style.visibility = 'hidden';
+ document.getElementById('vol').style.opacity = 0.5;
+ document.getElementById('delaylist').style.visibility = 'hidden';
+ document.getElementById('delay').style.visibility = 'hidden';
+ document.getElementById('del').style.opacity = 0.5;
+ }
+ slideJump();
+ if (defaultView == 'outline') toggle();
+ document.onkeyup = keys;
+ document.onkeypress = trap;
+ document.onclick = clicker;
+}
+
+function preloadImgages() {
+ var temp = '';
+ var objects = document.getElementsByTagName('img');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].src != '') {
+ temp = new Image();
+ temp.src = objects[i].src;
+ }
+ }
+}
+
+function showAll() {
+ var obj1 = GetElementsWithClassName('div','presentation')[0];
+ if(!obj1) var obj1 = GetElementsWithClassName('ol','presentation')[0];
+ var obj2 = GetElementsWithClassName('div','layout')[0];
+ if(!obj1){}else {obj1.style.display = 'block'};
+ if(!obj2){}else {obj2.style.display = 'block'};
+}
+
+function dumpProgress() {
+ document.body.removeChild(document.getElementById('StartupControl'));
+ startup();
+ preloadImgages();
+ showAll();
+ createSoundManagerScript();
+ shiftOpacity('StartupProgress',1000);
+ window.setTimeout("removeProgress()",1000);
+}
+
+function removeProgress() {
+ document.body.removeChild(document.getElementById('StartupProgress'));
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+}
+function panelSetup() {
+ if(playPause) {
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ if(playLoop) {
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ if(audioSupport && !isIE && !isOp) {
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ }
+ if(fadeModus && !isIE) {
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ if(autoMatic) {
+ var obj = document.getElementById('auto'); changeClass(obj,'ison');
+ startPlay();
+ }
+ if(audioVolume && !isIE && !isOp) {
+ var idx = 0;
+ if(audioVolume >= 95 && audioVolume <= 100) {idx = 0;}
+ else if(audioVolume >= 85 && audioVolume < 95) {idx = 1;}
+ else if(audioVolume >= 75 && audioVolume < 85) {idx = 2;}
+ else if(audioVolume >= 65 && audioVolume < 75) {idx = 3;}
+ else if(audioVolume >= 55 && audioVolume < 65) {idx = 4;}
+ else if(audioVolume >= 45 && audioVolume < 55) {idx = 5;}
+ else if(audioVolume >= 35 && audioVolume < 45) {idx = 6;}
+ else if(audioVolume >= 25 && audioVolume < 35) {idx = 7;}
+ else if(audioVolume >= 15 && audioVolume < 25) {idx = 8;}
+ else if(audioVolume >= 5 && audioVolume < 15) {idx = 9;}
+ else {idx = 10;}
+ document.getElementById('volumelist').selectedIndex = idx;
+ }
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+}
+// startup process
+
+// shutdown process
+function byby() {
+ stopPlay();
+ if(tranSitions && fadeModus && s5mode && !isOp) {
+ fadeoutSound(curSoundID,true); // audio support
+ var pg = document.createElement('div');
+ pg.id = "GoodBy";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=0)";
+ }else {
+ pg.style.opacity = 0.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/finish.gif)";
+ document.getElementsByTagName("body")[0].appendChild(pg);
+ shiftOpacity('GoodBy',1000);
+ window.setTimeout("history.back()",1000);
+ }else {
+ stopSound(curSoundID);
+ history.back();
+ }
+}
+// shutdown process
+
+// scalable images extension
+function createDetector() {
+ var em = document.createElement('div');
+ em.id='EMSizeControl'; em.style.position="absolute"; em.style.left="-999px";
+ em.style.width="1em"; em.style.height="1em"; em.style.opacity=0.0;
+ document.getElementsByTagName("body")[0].appendChild(em);
+ var nop=document.getElementById('EMSizeControl');
+ if(!nop||findPosX(nop)!=-999) {}else {
+ opac=document.getElementById('EMSizeControl').style.opacity;
+ empx=document.getElementById('EMSizeControl').offsetHeight;
+ document.body.removeChild(document.getElementById('EMSizeControl'));
+ var objects = document.getElementsByTagName('img');
+ var j = 0; var i = 0; var k = 0; var d; var obj;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ images[j] = objects[i];
+ ++j;
+ }
+ }
+ var objects = document.getElementsByTagName('canvas'); j = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ canvas[objects[i].id] = objects[i];
+ if(j==0) {
+ if(objects[i].getContext) {
+ canvasSupport = true;
+ }
+ ++j;
+ }
+ }
+ }
+ if(canvasSupport!=true) {
+ for (d in canvas) {
+ try {
+ canvas[d].setAttribute("width",1);
+ canvas[d].setAttribute("height",1);
+ } catch (e) {
+ }
+ }
+ }
+ var objects = document.getElementsByTagName('table');
+ j = 0; k = 0; l = 0; var w; var h; var tmp; var cnt;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^piechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ piecharts[j] = objects[i];
+ em = piecharts[j].getAttribute("summary");
+ if(em != "") em = "," + em;
+ piecharts[j].setAttribute("summary", w + "," + h + em);
+ ++j;
+ }
+ }
+ }
+ if(objects[i].className.match(/^barchart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ barcharts[k] = objects[i];
+ em = barcharts[k].getAttribute("summary");
+ if(em != "") em = "," + em;
+ barcharts[k].setAttribute("summary", w + "," + h + em);
+ ++k;
+ }
+ }
+ }
+ if(objects[i].className.match(/^linechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ linecharts[l] = objects[i];
+ em = linecharts[l].getAttribute("summary");
+ if(em != "") em = "," + em;
+ linecharts[l].setAttribute("summary", w + "," + h + em);
+ ++l;
+ }
+ }
+ }
+ }
+ objects = document.getElementsByTagName('object'); j = 0; i = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ medias[j] = objects[i]; ++j;
+ if(!isIE) {
+ if(objects[i].getAttributeNode("classid")) objects[i].removeAttributeNode(objects[i].getAttributeNode("classid"));
+ if(objects[i].getAttributeNode("codebase")) objects[i].removeAttributeNode(objects[i].getAttributeNode("codebase"));
+ }
+ }
+ }
+ }
+}
+function extendImgSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < images.length; i++) {
+ w=images[i].getAttribute("width",0);
+ h=images[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ images[i].style.width=Math.floor(w*q)+"px";
+ images[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+
+function extendCanSizes(f) {
+ if(empx>0 && canvasSupport) {
+ var q = (f/empx); var w = 0; var h = 0; var tmp = ""; var cnt; var obj;
+ for(var i=0; i < piecharts.length; i++) {
+ if(piecharts[i].getAttribute("summary")) {
+ tmp = piecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = piecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < barcharts.length; i++) {
+ if(barcharts[i].getAttribute("summary")) {
+ tmp = barcharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = barcharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < linecharts.length; i++) {
+ if(linecharts[i].getAttribute("summary")) {
+ tmp = linecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = linecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ }
+}
+function extendObjSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < medias.length; i++) {
+ w=medias[i].getAttribute("width",0);
+ h=medias[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ medias[i].style.width=Math.floor(w*q)+"px";
+ medias[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+function findPosX(obj) {
+ var posLeft = 0;
+ while (obj.offsetParent) {
+ posLeft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ return posLeft;
+}
+function findPosY(obj) {
+ var posTop = 0;
+ while (obj.offsetParent) {
+ posTop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ return posTop;
+}
+// scalable images extension
+
+// canvas chart extension
+function deg2rad(degrees) {
+ return Math.PI *degrees/180;
+}
+function rad2deg(radians) {
+ return 180.0 *radians/Math.PI;
+}
+function circle_point_x(radians, diameter) {
+ var x = Math.cos(radians)*(diameter/2);
+ return x;
+}
+function circle_point_y(radians, diameter) {
+ var y = Math.sin(radians)*(diameter/2);
+ return y;
+}
+function roundTo(val,dig) {
+ var num = val;
+ if (val > 8191 && val < 10485) {
+ val = val-5000;
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ num = num+5000;
+ } else {
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ }
+ return num;
+}
+function searchColor(value) {
+ for (var dat in colorNames) {
+ if(dat==value) return colorNames[dat];
+ }
+ return false;
+}
+function scanColor(value) {
+ if(value.match(/^#[0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var val1 = value.substr(1,1).toLowerCase();
+ var val2 = value.substr(2,1).toLowerCase();
+ var val3 = value.substr(3,1).toLowerCase();
+ value = '#' + val1 + val1 + val2 + val2 + val3 + val3;
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var tmp = searchColor(value.toLowerCase());
+ if(!tmp) {}else{value = tmp;}
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ value = '#000000';
+ }
+ return value.toLowerCase();
+}
+function hex2rgb(val,trans) {
+ if(val.length==7) {
+ var tp1 = Math.max(0,Math.min(parseInt(val.substr(1,2),16),255));
+ var tp2 = Math.max(0,Math.min(parseInt(val.substr(3,2),16),255));
+ var tp3 = Math.max(0,Math.min(parseInt(val.substr(5,2),16),255));
+ return 'rgba(' + tp1 + ',' + tp2 + ',' + tp3 + ',' + trans + ')';
+ }
+}
+function trim(str) {
+ return (str.replace(/\s+$/,"").replace(/^\s+/,""));
+}
+function roundedRect(ctx,x,y,width,height,radius){
+ ctx.beginPath();
+ ctx.moveTo(x,y+radius);
+ ctx.lineTo(x,y+height-radius);
+ ctx.quadraticCurveTo(x,y+height,x+radius,y+height);
+ ctx.lineTo(x+width-radius,y+height);
+ ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius);
+ ctx.lineTo(x+width,y+radius);
+ ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
+ ctx.lineTo(x+radius,y);
+ ctx.quadraticCurveTo(x,y,x,y+radius);
+ ctx.closePath();
+}
+function drawString(ctx, text, fc, tx, ty) {
+ var xp = 0; var c = "";
+ ctx.beginPath();
+ for (var i = 0; i < text.length; i++) {
+ c = text[i];
+ ctx.drawImage(font, signs[c].sx, signs[c].sy, signs[c].sw, signs[c].sh, tx+xp, ty, signs[c].sw*fc, signs[c].sh*fc);
+ xp += (signs[c].sw*fc);
+ }
+ ctx.closePath();
+}
+function strokeString(ctx, txt, col, fh, tx, ty) {
+ var fw = fh*0.666666; var lw = fh*0.125;
+ var ls = lw/2; var cr = lw; var xp = 0;
+ ctx.lineCap = "round"; ctx.lineJoin = "round"
+ ctx.lineWidth = lw; ctx.strokeStyle = col;
+ for (var i = 0; i < txt.length; i++) {
+ strokeSymbol(ctx, txt[i], ls, tx+xp, ty, fw, fh);
+ xp += (txt[i]!="."?fw+cr:(fw/2)+cr);
+ }
+}
+function strokeSymbol(ctx, symbol, fc, cx, cy, cw, ch) {
+ ctx.beginPath();
+ switch (symbol) {
+ case "0":
+ ctx.moveTo(cx+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+(cw/2),(cw/2)-fc,deg2rad(180),0, false);
+ ctx.arc(cx+(cw/2),(cy+ch)-(cw/2),(cw/2)-fc,0,deg2rad(180), false);
+ ctx.closePath();
+ break;
+ case "1":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.moveTo(cx+(cw*0.666666),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.666666),cy+fc);
+ ctx.lineTo(cx+(cw*0.25),cy+(ch*0.25));
+ break;
+ case "2":
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.8));
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+fc,cy+ch-fc);
+ ctx.arc(cx+(cw/2),cy+(cw*0.425),(cw*0.425)-fc,deg2rad(45),deg2rad(-180), true);
+ break;
+ case "3":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-90),deg2rad(180), false);
+ break;
+ case "4":
+ ctx.moveTo(cx+(cw*0.75),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.5),cy+ch-fc);
+ break;
+ case "5":
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-80),deg2rad(180), false);
+ break;
+ case "6":
+ ctx.moveTo(cx+fc,cy+ch-(cw*0.5)-fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-180),deg2rad(180), false);
+ ctx.bezierCurveTo(cx+fc,cy+fc,cx+fc,cy+fc,cx+(cw*0.9)-fc,cy+fc);
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ break;
+ case "7":
+ ctx.moveTo(cx+(cw*0.5),cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.25)-fc);
+ break;
+ case "8":
+ ctx.moveTo(cx+(cw*0.92)-fc,cy+(cw*0.59));
+ ctx.arc(cx+(cw/2),cy+(cw*0.45),(cw*0.45)-fc,deg2rad(25),deg2rad(-205), true);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-135),deg2rad(-45), true);
+ ctx.closePath();
+ ctx.moveTo(cx+(cw*0.79),cy+(ch*0.47));
+ ctx.lineTo(cx+(cw*0.21),cy+(ch*0.47));
+ break;
+ case "9":
+ ctx.moveTo(cx+cw-fc,cy+(cw*0.5));
+ ctx.arc(cx+(cw/2),cy+(cw*0.5),(cw*0.5)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.bezierCurveTo(cx+cw-fc,cy+ch-fc,cx+cw-fc,cy+ch-fc,cx+(cw*0.1)+fc,cy+ch-fc);
+ break;
+ case "%":
+ ctx.moveTo(cx+fc,cy+(ch*0.75));
+ ctx.lineTo(cx+cw-fc,cy+(ch*0.25));
+ ctx.moveTo(cx+(cw*0.505),cy+(cw*0.3));
+ ctx.arc(cx+(cw*0.3),cy+(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.moveTo(cx+(cw*0.905),cy+ch-(cw*0.3));
+ ctx.arc(cx+(cw*0.7),cy+ch-(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ break;
+ case ".":
+ ctx.moveTo(cx+(cw*0.25),cy+ch-fc-fc);
+ ctx.arc(cx+(cw*0.25),cy+ch-fc-fc,fc,deg2rad(0),deg2rad(360), false);
+ ctx.closePath();
+ break;
+ default:
+ break;
+ }
+ ctx.stroke();
+}
+function drawBar(ctx,x,y,width,height,color,value,textdiv){
+ var rw = width/2; var rh = rw/2;
+ height = Math.max(height,rw);
+ var dh = Math.max(height-(2*rh),0.1); var S2L;
+ var xx = rw/8; var yy = rh/4;
+ var yo = rh/2; y = y - yy;
+ if(canvas_noshadow <= 0 && canvas_noshade <= 0) {
+ ctx.save();
+ S2L = ctx.createRadialGradient(x+rw+rh,y+height-rw+yy+rh,0,x+rw,y+height-rw+yy,rw);
+ S2L.addColorStop(0, 'rgba(0,0,0,0.5)');
+ S2L.addColorStop(0.7, 'rgba(0,0,0,0.25)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = S2L;
+ ctx.scale(1,0.5);
+ ctx.translate(xx,y+height+yy);
+ if(isOp){
+ ctx.fillRect(x,y+yy+height-width,width,width);
+ }else {
+ ctx.arc(x+rw,y+yy+height-width,width,0,deg2rad(360), false);
+ ctx.fill();
+ }
+ ctx.restore();
+ }else if(canvas_noshadow <= 0 && canvas_noshade >= 1) {
+ ctx.fillStyle = 'rgba(0,0,0,0.2)';
+ ctx.fillRect(x+yo,y+rh+yo+yo,width,dh);
+ }
+
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x,y+(height/2),x+width,y+(height/2));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.75)');
+ S2L.addColorStop(0.2, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.3, 'rgba(0,0,0,0)');
+ S2L.addColorStop(0.5, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.35)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.1)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.strokeStyle = S2L;
+ ctx.stroke();
+ }else {
+ ctx.fillStyle = color;
+ ctx.fillRect(x,y+rh+yo,width,dh);
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var bw = width; var bh = bw/4;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ var c; var w;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,x+(width/2)-(bw/2),y,bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext <= 0) {
+ strokeString(ctx, value + "%","rgba(48,48,48,1)", th, x+(width/2)-(w/2), y+((bh-th)/2));
+ }else {
+ drawString(ctx, value + "%", tf, x+(width/2)-(w/2), y+((bh-th)/2.2));
+ }
+ }else {
+ var bh = bw/3; var th = roundTo(bh*0.75,0);
+ roundedRect(ctx,x,y,bw,bh,bh/4);
+ ctx.fill();
+ var obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = x + "px";
+ obj.style.top = y+((bh-th)/2.2) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+
+ }
+}
+function drawLine(ctx,x,y,width,height,dist,array,factor,color,fill){
+ if(fill <= 0){
+ var style = hex2rgb(color,0.5);
+ ctx.lineJoin = "miter";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height);
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.lineTo(x+width,y+height);
+ ctx.lineTo(x,y+height);
+ ctx.closePath();
+ ctx.fillStyle = style;
+ ctx.fill();
+ }
+ ctx.lineJoin = "round";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height-(array[0]*factor));
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.strokeStyle = color;
+ ctx.stroke();
+}
+function setDataURL(cid) {
+ if(cid.toDataURL) {
+ var obj = document.getElementById(cid.id + "_link");
+ if(obj) {
+ obj.setAttribute("title", "To Data URL");
+ obj.setAttribute("target", "_blank");
+ obj.setAttribute("href", cid.toDataURL());
+ }
+ }
+}
+function get_input(dataobj,canvasobj,linechart) {
+ var table = document.getElementById(dataobj);
+ var canvas = document.getElementById(canvasobj);
+ var row; var clm; var cnt = 0; var val = 0; var nme = ""; var col = "";
+ if(canvas.getContext) {
+ canvas_width = parseInt(canvas.style.width);
+ canvas_height = parseInt(canvas.style.height);
+ if(canvas_width >= 16 && canvas_height >= 16) {
+ var tmp = table.getAttribute("summary");
+ canvas_noshade = 0; canvas_noshadow = 0;
+ canvas_notext = 0; canvas_imgtext = 0;
+ canvas_htmltext = 0; canvas_nofill = 0;
+ if(tmp.search(/noshadow/) != -1) canvas_noshadow = 1;
+ if(tmp.search(/noshade/) != -1) canvas_noshade = 1;
+ if(tmp.search(/nofill/) != -1) canvas_nofill = 1;
+ if(tmp.search(/notext/) != -1) canvas_notext = 1;
+ if(tmp.search(/htmltext/) != -1) canvas_htmltext = 1;
+ if(tmp.search(/imgtext/) != -1) canvas_imgtext = 1;
+ if(table.getAttribute("bgcolor")) {
+ canvas_bgcolor = scanColor(table.getAttribute("bgcolor"));
+ }
+ ChartData = new Array(); colorSlice = new Array();
+ if(table.getElementsByTagName("tr")[0].getElementsByTagName("th")[0]) cnt = 1;
+ for(var r = cnt; r < table.getElementsByTagName("tr").length; r++) {
+ row = table.getElementsByTagName("tr")[r];
+ clm = row.getElementsByTagName("td").length;
+ if(row.getElementsByTagName("td")[0].getAttribute("bgcolor")) {
+ col = scanColor(row.getElementsByTagName("td")[0].getAttribute("bgcolor")); val = 0;
+ nme = trim(row.getElementsByTagName("td")[1].innerHTML.replace(/<[^>]+>/g,""));
+ if(!linechart) {
+ if(clm > 3) {
+ for(var z = 2; z < clm; z++) {
+ val += parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ }else {
+ val = parseFloat(row.getElementsByTagName("td")[2].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ if(!isNaN(val) && val > 0 && nme != '') {
+ colorSlice[r-cnt] = col; ChartData[nme] = Math.abs(val);
+ }else {
+ break;
+ }
+ }else {
+ val = 0; i = 0;
+ if(clm > 3 && nme != '') {
+ ChartData[r-cnt] = new Array();
+ colorSlice[r-cnt] = col;
+ for(var z = 2; z < clm; z++) {
+ val = Math.abs(parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,"")));
+ if(!isNaN(val) && val >= 0) {
+ ChartData[r-cnt][i] = val; i++;
+ }else {
+ ChartData[r-cnt][i] = 0; i++;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }
+ }
+}
+function setPieChart(canvasobj,textobj) {
+ var cd = (Math.min(canvas_width,canvas_height)/110)*100;
+ var cp = cd*0.1; var cr = cd/2;
+ var sr = cr*0.93; var cw = cd+cp; var ch = cw;
+ var cx = (cd/2)+(cp/2); var cy = cx; var ct = 0;
+ for (var data in ChartData) {
+ ct += ChartData[data];
+ }
+ var poc = ct/100;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ }
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,cw,ch);
+ }else {
+ ctx.clearRect(0,0,cw,ch);
+ }
+ if(canvas_noshadow <= 0) {
+ if(!isOp) {
+ ctx.beginPath();
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),cr,cx+(cr*0.1),cy+(cr*0.1),sr*0.9);
+ B2B.addColorStop(0, 'rgba(0,0,0,0)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.arc(cx+(cr*0.1),cy+(cr*0.1),cr,0,deg2rad(360), false);
+ ctx.closePath();
+ ctx.fillStyle = B2B;
+ ctx.fill();
+ }else {
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),0,cx+(cr*0.1),cy+(cr*0.1),cr);
+ B2B.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(0.87, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = B2B;
+ ctx.fillRect(0,0,cw,ch);
+ }
+ }
+ var val = 0; var deg = 0; var idx = 0; var data;
+ for (data in ChartData) {
+ val = ChartData[data]; sdeg = deg;
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ ctx.beginPath();
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr,sdeg,edeg, false);
+ ctx.lineTo(cx,cy);
+ ctx.closePath();
+ ctx.fillStyle = colorSlice[(idx++)];
+ ctx.fill();
+ }
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ var W2T = ctx.createLinearGradient(cp*2,cp*2,cx,cy);
+ W2T.addColorStop(0, 'rgba(255,255,255,0.8)');
+ W2T.addColorStop(1, 'rgba(255,255,255,0)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.fillStyle = W2T;
+ ctx.fill();
+ ctx.beginPath();
+ var T2B = ctx.createLinearGradient(cx,cy,cw-(cp*2),ch-(cp*2));
+ T2B.addColorStop(0, 'rgba(0,0,0,0)');
+ T2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.fillStyle = T2B;
+ ctx.fill();
+ ctx.beginPath();
+ var B2T = ctx.createLinearGradient(cx,cy,cw-(cp*1.9),ch-(cp*1.9));
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.strokeStyle = B2T;
+ ctx.stroke();
+ ctx.beginPath();
+ var T2W = ctx.createLinearGradient(cx,cy,(cp*1.9),(cp*1.9));
+ T2W.addColorStop(0, 'rgba(255,255,255,0)');
+ T2W.addColorStop(1, 'rgba(255,255,255,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.strokeStyle = T2W;
+ ctx.stroke();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var mpos = 0; var per = 0; var gx = 0;
+ var gy = 0; var tx = 0; var ty = 0;
+ var obj = ""; var w = 0; var c = 0;
+ var bw = cr*0.45; var bh = cr*0.125;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext >= 1) {
+ bw = (cr*0.365);
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ for (data in ChartData) {
+ val = ChartData[data];
+ sdeg = deg; mpos = deg+(((val/2)/ct)*deg2rad(360));
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ per = roundTo(val/poc,2);
+ gx = circle_point_x(mpos, cd);
+ gy = circle_point_y(mpos, cd);
+ tx = parseFloat((cx+(2*Math.floor(cx + gx)))/3);
+ ty = (cy+(2*Math.floor(cy + gy)))/3;
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext >= 1) {
+ drawString(ctx, per + "%", tf, tx-(w/2), ty-(th/1.8));
+ }else {
+ strokeString(ctx, per + "%","rgba(48,48,48,1)", th, tx-(w/2), ty-(th/2));
+ }
+ }else {
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = (tx-(bw/2)) + "px";
+ obj.style.top = ty-(th/1.8) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+ }
+ }
+ }
+}
+function setBarChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9; var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05; var ph = canvas_height*0.05;
+ var cm = 0; var ct = 0;
+ for (var data in ChartData) {
+ cm = Math.max(cm,ChartData[data]);
+ ct += ChartData[data];
+ }
+ var hf = ih/cm; var bs = colorSlice.length;
+ var bw = iw/(bs*1.1); var poc = ct/100;
+ var th = roundTo((bw/3)*0.75,0);
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ var obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ var cc = ""; var bh = 0; var idx = 0; var t = 0; per = 0;
+ for (var data in ChartData) {
+ per = roundTo(ChartData[data]/poc,2);
+ bh = ChartData[data]*hf;
+ drawBar(ctx,pw+(t*(bw*1.1)),ph+ih-bh,bw,bh,colorSlice[(idx++)],per,textdiv);
+ t++;
+ }
+ }
+}
+function setLineChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9;
+ var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05;
+ var ph = canvas_height*0.05;
+ var cm = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ cm = Math.max(cm,ChartData[i][j]);
+ }
+ }
+ var hf = (ih*0.95)/cm; var bw = iw;
+ var dw = iw/(ChartData[0].length-1)
+ var dh = ih/(ChartData[0].length-1)
+ var ps = Math.min(pw,ph); lw = ps/4;
+ var B2T;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_noshadow <= 0) {
+ B2T = ctx.createLinearGradient(pw+ps,ph+ih+1,pw+ps+ps,ph+ih+1);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps,ph+ih);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.lineTo(pw+ps+ps,ph+ih);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+ps+ps,ph+ih,pw+ps+ps,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps+ps,ph+ih);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+ps+iw,ph+ih+ps);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.closePath();
+ ctx.fill();
+ var B2T = ctx.createLinearGradient(pw+iw+1,ph+ps,pw+iw+1,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.35)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps);
+ ctx.lineTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+iw,ph+ps+ps,pw+iw+ps,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.35)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+iw+ps,ph+ih+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = lw/2;
+ ctx.strokeStyle = "rgba(255,255,255,0.25)";
+ if(canvas_nofill <= 0) {
+ ctx.fillStyle = "rgba(240,240,240,0.8)";
+ ctx.strokeStyle = "rgba(255,255,255,1)";
+ ctx.fillRect(pw,ph,iw,ih);
+ }
+ for (var i = 0; i < ChartData[0].length-1; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph);
+ ctx.lineTo(pw+(i*dw),ph+ih);
+ ctx.stroke();
+ }
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw,ph+(i*dh));
+ ctx.lineTo(pw+iw,ph+(i*dh));
+ ctx.stroke();
+ }
+ ctx.lineWidth = lw;
+ var cc = ""; var bh = 0; var idx = 0; var t = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ t = Math.max(t,ChartData[i][j]);
+ }
+ bh = t*hf; cc = colorSlice[(idx++)];
+ drawLine(ctx,pw,ph+ih-bh,bw,bh,dw,ChartData[i],hf,cc,canvas_nofill);
+ }
+ ctx.beginPath();
+ ctx.moveTo(pw,ph);
+ ctx.lineTo(pw,ph+ih);
+ ctx.lineTo(pw+iw+(lw/2),ph+ih);
+ ctx.strokeStyle = "rgba(48,48,48,1)";
+ ctx.stroke();
+ ctx.lineWidth = lw/2;
+ B2T = ctx.createLinearGradient(pw,ph+ih,pw,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,1)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.strokeStyle = B2T;
+ for (var i = 0; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph+ih);
+ ctx.lineTo(pw+(i*dw),ph+ih+ps);
+ ctx.stroke();
+ }
+ B2T = ctx.createLinearGradient(pw-ps,ph,pw,ph);
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,1)');
+ ctx.strokeStyle = B2T;
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw-ps,ph+(i*dh));
+ ctx.lineTo(pw,ph+(i*dh));
+ ctx.stroke();
+ }
+ }
+}
+function generateCanvas() {
+ if(canvasSupport) {
+ var canvasID; var tdataID; var textID;
+ var tmp; var dat; var i; var j;
+ for(i=0; i < piecharts.length; i++) {
+ tmp = piecharts[i].id.split("_");
+ tdataID = piecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setPieChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < barcharts.length; i++) {
+ tmp = barcharts[i].id.split("_");
+ tdataID = barcharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setBarChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < linecharts.length; i++) {
+ tmp = linecharts[i].id.split("_");
+ tdataID = linecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID,true);
+ if(colorSlice.length > 0) {
+ if(ChartData.length == colorSlice.length) {
+ setLineChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ }
+}
+// canvas chart extension
+
+// invisible select extension
+function setListPos(opt) {
+ if(!isIE) { //(degrade IE)
+ var ref = document.getElementById('list');
+ var x = findPosX(ref); var y = findPosY(ref);
+ var obj = document.getElementById('jumplist');
+ obj.style.position = 'fixed'; obj.style.left = x + 'px'; obj.style.top = y + 'px';
+ var vol = document.getElementById('volumelist');
+ ref = document.getElementById('volume');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ vol.style.position = 'fixed'; vol.style.left = x + 'px'; vol.style.top = y + 'px';
+ var del = document.getElementById('delaylist');
+ ref = document.getElementById('delay');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ del.style.position = 'fixed'; del.style.left = x + 'px'; del.style.top = y + 'px';
+ var pnl = document.getElementById('navLinks');
+ }
+ if(opt) {
+ if(isIE) {
+ //(degrade IE)
+ //pnl.style.filter = "alpha(opacity=80)";
+ }else {
+ obj.style.opacity = 0.0;
+ vol.style.opacity = 0.0;
+ del.style.opacity = 0.0;
+ pnl.style.opacity = 0.8;
+ }
+ }
+}
+// invisible select extension
+
+// transition extension
+function switchFade() {
+ if(tranSitions && s5mode && fadeModus) {
+ fadeModus = false;
+ playDelay = playDelay-(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'isoff');
+ }else if(tranSitions && s5mode && !fadeModus) {
+ fadeModus = true;
+ playDelay = playDelay+(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ currentSlide();
+}
+function opacity(ids, opacStart, opacEnd, millisec) {
+ var speed = Math.round(millisec / 100);
+ var timer = 0;
+ if(opacStart > opacEnd) {
+ for(var i = opacStart; i >= opacEnd; i--) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ } else if(opacStart < opacEnd) {
+ for(var i = opacStart; i <= opacEnd; i++) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ }
+}
+function changeOpac(opacity, ids) {
+ var obj = document.getElementById(ids);
+ if (isIE) {
+ obj.style.filter = "alpha(opacity=" + opacity + ")";
+ } else {
+ obj.style.opacity = (opacity / 100);
+ }
+}
+function shiftOpacity(ids, millisec) {
+ if(document.getElementById(ids).style.opacity != '') {
+ var currentOpac = document.getElementById(ids).style.opacity * 100;
+ } else {
+ var currentOpac = 0;
+ }
+ if(currentOpac == 0) {
+ opacity(ids, currentOpac, 100, millisec);
+ } else if(currentOpac > 0) {
+ opacity(ids, currentOpac, 0, millisec);
+ }
+}
+// transition extension
+
+// autoplay extension
+function autoPlay() {
+ if (s5mode && autoMatic && !playPause) {
+ if ((snum >= (smax-1)) && playLoop) {
+ goTo(0);
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }else if ((snum >= (smax-1)) && !playLoop) {
+ stopPlay();
+ }else {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ if (incrementals[snum].length >0) {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = parseInt(playDelay/(incrementals[snum].length+1));
+ remainDer = parseInt(playDelay-(incrDelay*incrementals[snum].length));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ } else {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = incrDuration;
+ remainDer = parseInt(playDelay-(incrementals[snum].length*incrDuration));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }
+ }
+}
+function autoPlayIncr() {
+ if (incpos < incrementals[snum].length) {
+ subgo(1);
+ autoRun = setTimeout('autoPlayIncr();',incrDelay);
+ }else {
+ autoRun = setTimeout('nop();',remainDer);
+ }
+}
+function nop() {
+ // no operation dummy
+}
+function togglePlay() {
+ if (autoRun && s5mode) {
+ stopPlay();
+ }else if (!autoRun && s5mode) {
+ startPlay();
+ }
+}
+function stopPlay() {
+ if (autoRun && s5mode) {
+ clearTimeout(autoRun); autoRun = null;
+ autoMatic = false; playPause = false; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'isoff');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ currentSlide();
+ }
+}
+function startPlay() {
+ if (!autoRun && s5mode) {
+ playPause = false; autoMatic = true; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'ison');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ autoRun = setTimeout('autoPlay();',playDelay);
+ currentSlide();
+ }
+}
+function pausePlay() {
+ if (s5mode && autoMatic) {
+ if (playPause) {
+ playPause = false; autoRun = setTimeout('autoPlay();',playDelay);
+ var obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ }else {
+ if (autoRun){
+ clearTimeout(autoRun); autoRun = null; playPause = true;
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+ }
+}
+function switchLoop() {
+ if(s5mode) {
+ if (playLoop) {
+ playLoop = false;
+ var obj = document.getElementById('loop'); changeClass(obj,'isoff');
+ }else {
+ playLoop = true;
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+}
+function setDelay() {
+ var val = document.getElementById('delaylist');
+ if(s5mode) {
+ var delay = Math.max(5,Math.min(parseInt(val.value),300));
+ playDelay = (fadeModus == true) ? ((delay*1000)+(2*fadeDuration)) : (delay*1000);
+ }
+}
+// autoplay extension
+
+// audio extension
+function createSoundManagerScript() {
+ if(typeof soundManager=="undefined") {
+ onerrorSM2();
+ }else {
+ var script=document.createElement('SCRIPT');
+ var tx=document.createTextNode("soundManager.createMovie();");
+ script.appendChild(tx);
+ document.getElementsByTagName("body")[0].appendChild(script);
+ }
+}
+//soundManager.onload = function() {
+function onloadSM2() {
+ if(!isIE) { //(degrade IE)
+ swfUnloaded = false;
+ preloadSounds();
+ }
+}
+//soundManager.onerror = function() {
+function onerrorSM2() {
+ if(typeof soundManager!="undefined") {
+ soundManager.destruct;
+ delete soundManager;
+ }
+ audioSupport = false; swfUnloaded = true;
+ if(audioError && !isIE && !isOp) {
+ var dv = document.createElement('div'); dv.id = "guru";
+ var d2=document.createElement('div'); dv.appendChild(d2);
+ var tx=document.createTextNode('Guru Meditation - SoundManager failed to load/initialize!');
+ d2.appendChild(tx); document.getElementById('slide0').appendChild(dv);
+ }
+}
+function audioSetup() {
+ if(sound[0]) {
+ playSound(0);
+ }else if(sound[bgSoundItem] && !sound[0]) {
+ playSound(bgSoundItem);
+ }
+}
+function fadeoutSound(ids, option) {
+ if(curSoundID >= 0 && !swfUnloaded) {
+ if(isNaN(ids)) {
+ if(ids == "bgSound") {
+ var cnum = parseInt(bgSoundItem);
+ }else {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && ids == sound[i]["id"]) {
+ var cnum = i;
+ break;
+ }
+ }
+ }
+ }else {
+ var cnum = ids;
+ ids = sound[cnum]["id"];
+ }
+ var vol = getMaxVolume(sound[cnum]["volume"]);
+ var millisec = fadeDuration;
+ var speed = Math.round(millisec / vol);
+ var timer = 0;
+ for(var i = vol; i > 0; i--) {
+ setTimeout("fadeout(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ if(option) setTimeout("stopSound('"+ids+"')",millisec);
+ }
+}
+function fadeout(volume, id) {
+ soundManager.setVolume(id,volume);
+}
+function stopSound(ids) {
+ var sid;
+ if(isNaN(ids)) {
+ sid = ids;
+ }else if(sound[ids]) {
+ sid = sound[ids]["id"];
+ }
+ if(sid!='' && curSoundID >= 0) {
+ soundManager.stop(sid);
+ curSoundID = -1;
+ }
+}
+function toggleSounds() {
+ if(audioSupport && !swfUnloaded) {
+ stopAllSounds();
+ }else if (!audioSupport && !swfUnloaded) {
+ allowSounds();
+ }
+}
+function allowSounds() {
+ if(!swfUnloaded) {
+ audioSupport = true;
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ currentSlide();
+ }
+}
+function stopAllSounds() {
+ if(curSoundID >= 0) {
+ stopSound(curSoundID);
+ }else {
+ soundManager.stopAll();
+ curSoundID = -1;
+ }
+ audioSupport = false;
+ var obj = document.getElementById('audio'); changeClass(obj,'isoff');
+ currentSlide();
+}
+function playSound(id) {
+ if(audioSupport && !swfUnloaded) {
+ var url, sid, vol, lps, cnum;
+ if(isNaN(id)) {
+ sid = id;
+ if(sid == "bgSound") {
+ cnum = parseInt(bgSoundItem);
+ }else {
+ cnum = getSoundID(id);
+ }
+ }else {
+ cnum = parseInt(id);
+ if(sound[cnum]) sid = sound[cnum]["id"];
+ }
+ if(sound[cnum] && sound[cnum]["url"]!='' && sid!=''){
+ url = sound[cnum]["url"];
+ vol = (sound[cnum]["volume"]!='')?getMaxVolume(sound[cnum]["volume"]):getMaxVolume(100);
+ lps = (sound[cnum]["loops"])?true:false;
+ if(lps) {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){soundManager.play(sid,{volume:getMaxVolume(sound[cnum]["volume"])});}});
+ }else {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){curSoundID=-1;}});
+ }
+ }
+ }
+}
+function getSoundID(str) {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && str == sound[i]["id"]) {
+ var id = i;
+ break;
+ }
+ }
+ return id;
+}
+function setVolume() {
+ var vol = document.getElementById('volumelist');
+ if(audioSupport && !swfUnloaded) {
+ audioVolume = parseInt(vol.value);
+ if(curSoundID >= 0) {
+ if(sound[curSoundID]) {
+ var sid = sound[curSoundID]["id"];
+ var vid = getMaxVolume(sound[curSoundID]["volume"]);
+ soundManager.setVolume(sid,vid);
+ }
+ }
+ }
+}
+function getMaxVolume(value) {
+ if(audioVolume>0) {var factor = audioVolume/100;}else {var factor = 0;}
+ return Math.max(0,Math.min(parseInt(value*factor),audioVolume));
+}
+function preloadSounds() {
+ var temp = ''; var parm = ''; var t = ''; var cl = '';
+ var objects = document.getElementsByTagName('object');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].type.toLowerCase() == 'audio/mp3' && objects[i].data != '') {
+ objects[i].width = 0; objects[i].height = 0;
+ if(objects[i].parentNode.tagName == 'DIV') {
+ cl = objects[i].parentNode.className.toLowerCase();
+ if(cl == 'presentation' || cl == 'slide') {
+ if(cl == 'presentation') {
+ t = parseInt(bgSoundItem);
+ }else {
+ t = parseInt(objects[i].parentNode.id.slice(5, objects[i].parentNode.id.length));
+ }
+ sound[t] = new Object();
+ if(t < bgSoundItem) {
+ sound[t]["id"] = objects[i].parentNode.id;
+ }else {
+ sound[t]["id"] = "bgSound";
+ }
+ sound[t]["url"] = objects[i].data;
+ sound[t]["volume"] = 100; sound[t]["loops"] = false;
+ if(objects[i].archive != '') {
+ parm = objects[i].archive.toLowerCase().split(',');
+ for (var j=0; j < parm.length; j++) {
+ if(parm[j] == 'loop') sound[t]["loops"] = true;
+ if(parm[j].search(/^volume/) != -1) {
+ var tmp = parm[j].split(':');
+ sound[t]["volume"] = parseInt(tmp[1]);
+ }
+ }
+ }
+ soundManager.createSound(sound[t]["id"],sound[t]["url"]);
+ }
+ }
+ }
+ }
+}
+// audio extension
+
+// help extension
+function createHelpReq() {
+ if(!document.getElementById("HelpReq")) {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "HelpReq";
+ if (pg.addEventListener) {
+ pg.addEventListener("onclick",dumpHelpReq,false);
+ } else if (pg.attachEvent) {
+ pg.attachEvent("onclick",dumpHelpReq);
+ }
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=90)";
+ } else {
+ pg.style.opacity = 0.9;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(64,64,64)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/help.jpg)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+ if(document.getElementById("HelpReq")) {
+ helpmode = true;
+ }
+ }
+}
+function dumpHelpReq() {
+ if(document.getElementById("HelpReq")) {
+ document.body.removeChild(document.getElementById('HelpReq'));
+ helpmode = false;
+ }
+}
+// help extension
+
+//DEBUG
+function ConsoleLog(value) {
+ if(window.console) {
+ window.console.log(value);
+ }
+}
+//DEBUG
+
+document.write('<style type="text/css" media="screen" id="blockStyle">.presentation, .layout {display: none; }</style>');
+
+if(!isIE && !isOp) {
+ document.write('<script type="text/javascript" src="'+s5Path+'ui/audio_support/soundmanager2.js"></script>');
+ if(typeof soundManager!="undefined") {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'audioDebug') {
+ var audioDebug = (allMetas[i].content == "true") ? true : false;
+ soundManager.defaultOptions.debugMode = audioDebug;
+ }
+ }
+ }
+}
+
+window.onload = createSlideShow;
+window.onresize = function(){setTimeout('windowChange()',5);} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/toggle.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/toggle.gif
new file mode 100644
index 000000000..1e531e9dd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/toggle.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/toggle_link.png
new file mode 100644
index 000000000..4588e2514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/toggle_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/toggle_over.png
new file mode 100644
index 000000000..400f613b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/toggle_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/volume_link.png
new file mode 100644
index 000000000..f362acd1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/volume_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/wrap.css
new file mode 100644
index 000000000..a37315552
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/wrap.css
@@ -0,0 +1,410 @@
+/********************************************************************
+Screen and Print Styles for the Wrap Plugin
+********************************************************************/
+
+/* tables in columns and boxes should span the whole width */
+.wrap_column table,
+.wrap_left table, .wrap_right table, .wrap_center table,
+.wrap_box table,
+.wrap_info table, .wrap_important table, .wrap_alert table, .wrap_tip table, .wrap_help table, .wrap_todo table, .wrap_download table {
+ width: 100%;
+}
+/* emulate a headline */
+.wrap_column em strong,
+.wrap_left em strong, .wrap_right em strong, .wrap_center em strong,
+.wrap_box em strong,
+.wrap_info em strong, .wrap_important em strong, .wrap_alert em strong, .wrap_tip em strong, .wrap_help em strong, .wrap_todo em strong, .wrap_download em strong {
+ font-size: 130%;
+ font-weight: bold;
+ font-style: normal;
+ display: block;
+}
+/* emulate a bigger headline with a bottom border */
+.wrap_column em strong em.u,
+.wrap_left em strong em.u, .wrap_right em strong em.u, .wrap_center em strong em.u,
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ font-size: 115%;
+ border-bottom: 1px solid __border__;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+}
+/* different bigger headline for safety notes */
+.wrap_danger em strong em.u, .wrap_warning em strong em.u, .wrap_caution em strong em.u, .wrap_notice em strong em.u, .wrap_safety em strong em.u {
+ font-size: 115%;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+ text-transform: uppercase;
+ border-bottom-width: 0;
+}
+/* change border colour of emulated headlines inside boxes to something more neutral
+ (to match all the different background colours) */
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ border-bottom-color: #999;
+}
+
+
+/* columns
+********************************************************************/
+
+.wrap_left,
+.wrap_column {
+ float: left;
+ margin-right: 1.5em;
+}
+.wrap_right {
+ float: right;
+ margin-left: 1.5em;
+}
+.wrap_center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+/*
+.wrap_column,
+.wrap_left,
+.wrap_right {
+ overflow: hidden;
+}
+*/
+.wrap_container {
+ margin-right: -1.5em;
+}
+
+
+/* alignments
+********************************************************************/
+
+.wrap_leftalign {
+ text-align: left;
+}
+.wrap_centeralign {
+ text-align: center;
+}
+.wrap_rightalign {
+ text-align: right;
+}
+.wrap_justify {
+ text-align: justify;
+}
+
+
+/* box
+********************************************************************/
+
+/* see styles for boxes and notes with icons in style.css */
+
+/*____________ rounded corners ____________*/
+/* (only for modern browsers) */
+
+div.wrap_round {
+ border-radius: 20px;
+ -moz-border-radius: 20px;
+ -webkit-border-radius: 20px;
+ -khtml-border-radius: 20px;
+}
+span.wrap_round {
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -khtml-border-radius: 2px;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_lo {
+ color: __text_neu__;
+ font-size: 85%;
+}
+div.wrap_em {
+ color: #c00;
+ font-weight: bold;
+}
+
+/* see styles for highlighted text in style.css */
+
+
+/* typography
+********************************************************************/
+
+/*____________ fonts ____________*/
+
+div.wrap_sansserif {
+ font-family: Verdana,Tahoma,Geneva,"DejaVu Sans","Bitstream Vera Sans","Liberation Sans", Arial,Helvetica,FreeSans,"Liberation Sans","Nimbus Sans L", sans-serif;
+}
+div.wrap_serif {
+ font-family: Georgia,Garamond,"Palatino Linotype","Book Antiqua",Palatino,Palladio,"URW Palladio L","Liberation Serif",Didot,Gentium,"Bitstream Charter","Century Schoolbook L", "Times New Roman",Times,"Nimbus Roman No9 L","FreeSerif", serif;
+}
+div.wrap_monospace {
+ font-family: Courier,"Courier New",FreeMono,"Nimbus Mono L","Liberation Mono", "Lucida Console",Monaco,"DejaVu Sans Mono","Bitstream Vera Sans Mono", monospace;
+}
+
+/*____________ font size ____________*/
+
+div.wrap_bigger {
+ font-size: 125%;
+}
+div.wrap_muchbigger {
+ font-size: 200%;
+}
+div.wrap_smaller {
+ font-size: 75%;
+}
+
+/*____________ font colours ____________*/
+
+div.wrap_fgred {
+ color: #900;
+}
+div.wrap_fggreen {
+ color: #090;
+}
+div.wrap_fgblue {
+ color: #009;
+}
+div.wrap_fgcyan {
+ color: #099;
+}
+div.wrap_fgviolet {
+ color: #909;
+}
+div.wrap_fgyellow {
+ color: #990;
+}
+div.wrap_fggrey {
+ color: #666;
+}
+div.wrap_fgblack {
+ color: #000;
+}
+
+/* see styles for background colours and white font colour in style.css */
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ indent ____________*/
+
+div.wrap_indent {
+ padding-left: 1.5em;
+}
+
+/*____________ outdent ____________*/
+
+div.wrap_outdent {
+ margin-left: -1.5em;
+}
+
+/*____________ word wrapping in pre ____________*/
+
+divdiv.wrap_prewrap pre {
+ white-space: pre-wrap;
+ word-wrap: break-word;/* for IE < 8 */
+ /* white-space: -moz-pre-wrap; for FF < 3 */
+}
+
+/*____________ spoiler ____________*/
+
+divdiv.wrap_spoiler {
+ margin-bottom: 1.5em;
+}
+/* see rest of spoiler styles in style.css */
+
+/*____________ clear float ____________*/
+
+div.wrap_clear {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ font-size: 1px;
+ visibility: hidden;
+ overflow: hidden;
+}
+
+/*____________ hide ____________*/
+
+div.wrap_hide {
+ display: none;
+}
+
+
+/* STYLE.CSS */
+
+/* box
+********************************************************************/
+
+.wrap_box {
+ background: __background_alt__;
+ color: __text__;
+/*
+ overflow: hidden;
+*/
+}
+div.wrap_box,
+div.wrap_danger, div.wrap_warning, div.wrap_caution, div.wrap_notice, div.wrap_safety {
+ padding: 1em 1em .5em;
+ margin-bottom: 1.5em;
+}
+span.wrap_box,
+span.wrap_danger, span.wrap_warning, span.wrap_caution, span.wrap_notice, span.wrap_safety {
+ padding: 0 .3em;
+}
+
+/*____________ notes with icons ____________*/
+
+/* general styles for all note divs */
+div.wrap_info, div.wrap_important, div.wrap_alert, div.wrap_tip, div.wrap_help, div.wrap_todo, div.wrap_download {
+ padding: 1em 1em .5em 70px;
+ margin-bottom: 1.5em;
+ min-height: 68px;
+ background-position: 10px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html div.wrap_info, * html div.wrap_important, * html div.wrap_alert, * html div.wrap_tip, * html div.wrap_help, * html div.wrap_todo, * html div.wrap_download {
+ height: 68px;
+}
+/* general styles for all note spans */
+span.wrap_info, span.wrap_important, span.wrap_alert, span.wrap_tip, span.wrap_help, span.wrap_todo, span.wrap_download {
+ padding: 0 2px 0 20px;
+ min-height: 20px;
+ background-position: 2px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html span.wrap_info, * html span.wrap_important, * html span.wrap_alert, * html span.wrap_tip, * html span.wrap_help, * html span.wrap_todo, * html span.wrap_download {
+ height: 20px;
+}
+
+/*____________ info ____________*/
+.wrap_info { background-color: #d1d7df; }
+div.wrap_info { background-image: url(../../../wrap/images/note/48/info.png); }
+span.wrap_info { background-image: url(../../../wrap/images/note/16/info.png); }
+
+/*____________ important ____________*/
+.wrap_important { background-color: #ffd39f; }
+div.wrap_important { background-image: url(../../../wrap/images/note/48/important.png); }
+span.wrap_important { background-image: url(../../../wrap/images/note/16/important.png); }
+
+/*____________ alert ____________*/
+.wrap_alert { background-color: #ffbcaf; }
+div.wrap_alert { background-image: url(../../../wrap/images/note/48/alert.png); }
+span.wrap_alert { background-image: url(../../../wrap/images/note/16/alert.png); }
+
+/*____________ tip ____________*/
+.wrap_tip { background-color: #fff79f; }
+div.wrap_tip { background-image: url(../../../wrap/images/note/48/tip.png); }
+span.wrap_tip { background-image: url(../../../wrap/images/note/16/tip.png); }
+
+/*____________ help ____________*/
+.wrap_help { background-color: #dcc2ef; }
+div.wrap_help { background-image: url(../../../wrap/images/note/48/help.png); }
+span.wrap_help { background-image: url(../../../wrap/images/note/16/help.png); }
+
+/*____________ todo ____________*/
+.wrap_todo { background-color: #c2efdd; }
+div.wrap_todo { background-image: url(../../../wrap/images/note/48/todo.png); }
+span.wrap_todo { background-image: url(../../../wrap/images/note/16/todo.png); }
+
+/*____________ download ____________*/
+.wrap_download { background-color: #d6efc2; }
+div.wrap_download { background-image: url(../../../wrap/images/note/48/download.png); }
+span.wrap_download { background-image: url(../../../wrap/images/note/16/download.png); }
+
+
+/*____________ safety notes ____________*/
+
+.wrap_danger {
+ background-color: #c00;
+ color: #fff;
+}
+.wrap_warning {
+ background-color: #f60;
+ color: #000;
+}
+.wrap_caution {
+ background-color: #ff0;
+ color: #000;
+}
+.wrap_notice {
+ background-color: #06f;
+ color: #fff;
+}
+.wrap_safety {
+ background-color: #090;
+ color: #fff;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_hi {
+ background-color: #ff9;
+}
+
+/* typography
+********************************************************************/
+
+/*____________ font colours ____________*/
+
+div.wrap_fgwhite {
+ color: #fff;
+}
+
+/*____________ background colours ____________*/
+
+div.wrap_bgred {
+ background-color: #fcc;
+}
+div.wrap_bggreen {
+ background-color: #cfc;
+}
+div.wrap_bgblue {
+ background-color: #ccf;
+}
+div.wrap_bgcyan {
+ background-color: #9ff;
+}
+div.wrap_bgviolet {
+ background-color: #f9f;
+}
+div.wrap_bgyellow {
+ background-color: #ff9;
+}
+div.wrap_bggrey {
+ background-color: #ccc;
+}
+div.wrap_bgwhite {
+ background-color: #fff;
+}
+div.wrap_bgblack {
+ background-color: #000;
+}
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ spoiler ____________*/
+
+div.wrap_spoiler {
+ background-color: __background__ !important;
+ color: __background__ !important;
+ border: 1px dotted red;
+}
+
+/*____________ only print ____________*/
+
+div.wrap_onlyprint {
+ display: none;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/zero_link.png
new file mode 100644
index 000000000..5610884d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/zero_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/zero_over.png
new file mode 100644
index 000000000..3a14a577e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/zero_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/syntax.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/syntax.php
new file mode 100644
index 000000000..633e001d2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/syntax.php
@@ -0,0 +1,281 @@
+<?php
+/**
+ * Syntax Plugin Prototype
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+// must be run within Dokuwiki
+if(!defined('DOKU_INC')) die();
+
+if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
+require_once(DOKU_INC.'inc/parser/parser.php');
+
+/**
+ * All DokuWiki plugins to extend the parser/rendering mechanism
+ * need to inherit from this class
+ */
+class DokuWiki_Syntax_Plugin extends Doku_Parser_Mode {
+
+ var $allowedModesSetup = false;
+ var $localised = false; // set to true by setupLocale() after loading language dependent strings
+ var $lang = array(); // array to hold language dependent strings, best accessed via ->getLang()
+ var $configloaded = false; // set to true by loadConfig() after loading plugin configuration variables
+ var $conf = array(); // array to hold plugin settings, best accessed via ->getConf()
+
+ /**
+ * General Info
+ *
+ * Needs to return a associative array with the following values:
+ *
+ * author - Author of the plugin
+ * email - Email address to contact the author
+ * date - Last modified date of the plugin in YYYY-MM-DD format
+ * name - Name of the plugin
+ * desc - Short description of the plugin (Text only)
+ * url - Website with more information on the plugin (eg. syntax description)
+ */
+ function getInfo(){
+ $parts = explode('_',get_class($this));
+ $info = DOKU_PLUGIN.'/'.$parts[2].'/plugin.info.txt';
+ if(@file_exists($info)) return confToHash($info);
+ trigger_error('getInfo() not implemented in '.get_class($this).' and '.$info.' not found', E_USER_WARNING);
+ }
+
+ /**
+ * Syntax Type
+ *
+ * Needs to return one of the mode types defined in $PARSER_MODES in parser.php
+ */
+ function getType(){
+ trigger_error('getType() not implemented in '.get_class($this), E_USER_WARNING);
+ }
+
+ /**
+ * Allowed Mode Types
+ *
+ * Defines the mode types for other dokuwiki markup that maybe nested within the
+ * plugin's own markup. Needs to return an array of one or more of the mode types
+ * defined in $PARSER_MODES in parser.php
+ */
+ function getAllowedTypes() {
+ return array();
+ }
+
+ /**
+ * Paragraph Type
+ *
+ * Defines how this syntax is handled regarding paragraphs. This is important
+ * for correct XHTML nesting. Should return one of the following:
+ *
+ * 'normal' - The plugin can be used inside paragraphs
+ * 'block' - Open paragraphs need to be closed before plugin output
+ * 'stack' - Special case. Plugin wraps other paragraphs.
+ *
+ * @see Doku_Handler_Block
+ */
+ function getPType(){
+ return 'normal';
+ }
+
+ /**
+ * Handler to prepare matched data for the rendering process
+ *
+ * This function can only pass data to render() via its return value - render()
+ * may be not be run during the object's current life.
+ *
+ * Usually you should only need the $match param.
+ *
+ * @param $match string The text matched by the patterns
+ * @param $state int The lexer state for the match
+ * @param $pos int The character position of the matched text
+ * @param $handler ref Reference to the Doku_Handler object
+ * @return array Return an array with all data you want to use in render
+ */
+ function handle($match, $state, $pos, &$handler){
+ trigger_error('handle() not implemented in '.get_class($this), E_USER_WARNING);
+ }
+
+ /**
+ * Handles the actual output creation.
+ *
+ * The function must not assume any other of the classes methods have been run
+ * during the object's current life. The only reliable data it receives are its
+ * parameters.
+ *
+ * The function should always check for the given output format and return false
+ * when a format isn't supported.
+ *
+ * $renderer contains a reference to the renderer object which is
+ * currently handling the rendering. You need to use it for writing
+ * the output. How this is done depends on the renderer used (specified
+ * by $format
+ *
+ * The contents of the $data array depends on what the handler() function above
+ * created
+ *
+ * @param $format string output format being rendered
+ * @param $renderer ref reference to the current renderer object
+ * @param $data array data created by handler()
+ * @return boolean rendered correctly?
+ */
+ function render($format, &$renderer, $data) {
+ trigger_error('render() not implemented in '.get_class($this), E_USER_WARNING);
+
+ }
+
+ /**
+ * There should be no need to override these functions
+ */
+ function accepts($mode) {
+
+ if (!$this->allowedModesSetup) {
+ global $PARSER_MODES;
+
+ $allowedModeTypes = $this->getAllowedTypes();
+ foreach($allowedModeTypes as $mt) {
+ $this->allowedModes = array_merge($this->allowedModes, $PARSER_MODES[$mt]);
+ }
+
+ $idx = array_search(substr(get_class($this), 7), (array) $this->allowedModes);
+ if ($idx !== false) {
+ unset($this->allowedModes[$idx]);
+ }
+ $this->allowedModesSetup = true;
+ }
+
+ return parent::accepts($mode);
+ }
+
+ // plugin introspection methods
+ // extract from class name, format = <plugin type>_plugin_<name>[_<component name>]
+ function getPluginType() { list($t) = explode('_', get_class($this), 2); return $t; }
+ function getPluginName() { list($t, $p, $n) = explode('_', get_class($this), 4); return $n; }
+ function getPluginComponent() { list($t, $p, $n, $c) = explode('_', get_class($this), 4); return (isset($c)?$c:''); }
+
+ // localisation methods
+ /**
+ * getLang($id)
+ *
+ * use this function to access plugin language strings
+ * to try to minimise unnecessary loading of the strings when the plugin doesn't require them
+ * e.g. when info plugin is querying plugins for information about themselves.
+ *
+ * @param $id id of the string to be retrieved
+ * @return string string in appropriate language or english if not available
+ */
+ function getLang($id) {
+ if (!$this->localised) $this->setupLocale();
+
+ return (isset($this->lang[$id]) ? $this->lang[$id] : '');
+ }
+
+ /**
+ * locale_xhtml($id)
+ *
+ * retrieve a language dependent wiki page and pass to xhtml renderer for display
+ * plugin equivalent of p_locale_xhtml()
+ *
+ * @param $id id of language dependent wiki page
+ * @return string parsed contents of the wiki page in xhtml format
+ */
+ function locale_xhtml($id) {
+ return p_cached_output($this->localFN($id));
+ }
+
+ /**
+ * localFN($id)
+ * prepends appropriate path for a language dependent filename
+ * plugin equivalent of localFN()
+ */
+ function localFN($id) {
+ global $conf;
+ $plugin = $this->getPluginName();
+ $file = DOKU_PLUGIN.$plugin.'/lang/'.$conf['lang'].'/'.$id.'.txt';
+ if(!@file_exists($file)){
+ //fall back to english
+ $file = DOKU_PLUGIN.$plugin.'/lang/en/'.$id.'.txt';
+ }
+ return $file;
+ }
+
+ /**
+ * setupLocale()
+ * reads all the plugins language dependent strings into $this->lang
+ * this function is automatically called by getLang()
+ */
+ function setupLocale() {
+ if ($this->localised) return;
+
+ global $conf; // definitely don't invoke "global $lang"
+ $path = DOKU_PLUGIN.$this->getPluginName().'/lang/';
+
+ // don't include once, in case several plugin components require the same language file
+ @include($path.'en/lang.php');
+ if ($conf['lang'] != 'en') @include($path.$conf['lang'].'/lang.php');
+
+ $this->lang = $lang;
+ $this->localised = true;
+ }
+
+ // configuration methods
+ /**
+ * getConf($setting)
+ *
+ * use this function to access plugin configuration variables
+ */
+ function getConf($setting){
+
+ if (!$this->configloaded){ $this->loadConfig(); }
+
+ return $this->conf[$setting];
+ }
+
+ /**
+ * loadConfig()
+ * merges the plugin's default settings with any local settings
+ * this function is automatically called through getConf()
+ */
+ function loadConfig(){
+ global $conf;
+
+ $defaults = $this->readDefaultSettings();
+ $plugin = $this->getPluginName();
+
+ foreach ($defaults as $key => $value) {
+ if (isset($conf['plugin'][$plugin][$key])) continue;
+ $conf['plugin'][$plugin][$key] = $value;
+ }
+
+ $this->configloaded = true;
+ $this->conf =& $conf['plugin'][$plugin];
+ }
+
+ /**
+ * read the plugin's default configuration settings from conf/default.php
+ * this function is automatically called through getConf()
+ *
+ * @return array setting => value
+ */
+ function readDefaultSettings() {
+
+ $path = DOKU_PLUGIN.$this->getPluginName().'/conf/';
+ $conf = array();
+
+ if (@file_exists($path.'default.php')) {
+ include($path.'default.php');
+ }
+
+ return $conf;
+ }
+
+ /**
+ * Allow the plugin to prevent DokuWiki creating a second instance of itself
+ *
+ * @return bool true if the plugin can not be instantiated more than once
+ */
+ function isSingleton() {
+ return false;
+ }
+}
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/tbt/script.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/tbt/script.js
new file mode 100644
index 000000000..96989731c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/tbt/script.js
@@ -0,0 +1,207 @@
+// TBT javascript extensions: rgareus 2008
+// TBT javascript prototype: Jaromil 2007
+// reference javascript typewriter documentation: F. Permadi 2002
+// GNU GPL
+
+
+function TBT() {
+ this.setRowCarriageReturn = setRowCarriageReturn;
+ this.setXhtml = setXhtml;
+ this.setSpeed = setSpeed;
+ this.startTyping = startTyping;
+ this.feed = feed;
+ var currentChar;
+ var destination;
+ var cur_x;
+ var cur_y;
+ var row;
+ var col;
+ var text;
+ var render_text;
+ var rowsize;
+ var colsize;
+ var recording;
+ var cr;
+ var cc;
+ var rowcr=0; // config option; do a CR (\r) when moving the cursor up/down
+ var xhtml=0; // html or xhtml
+ var speed=1; // time factor.
+
+ function setSpeed(s) {
+ if (s> 0.01 && s< 20) this.speed=s;
+ else speed=1.0;
+ }
+
+ function setXhtml(onoff) {
+ xhtml=onoff?true:false;
+ }
+
+ function setRowCarriageReturn(onoff) {
+ rowcr=onoff?true:false;
+ }
+
+ function startTyping(destinationParam, tbtrecord) {
+ currentChar = 0;
+ destination = destinationParam;
+ recording = tbtrecord;
+
+ // global text positions
+ row = 0;
+ col = 0;
+ // cursor positions
+ cur_x = 0;
+ cur_y = 0;
+ // length counters
+ rowsize = 0;
+ colsize = 0;
+ cr = 0;
+ cc = 0;
+
+ // text bidimensional array
+ text = new Array();
+ text[0] = new Array();
+ // text render buffer
+ render_text = "";
+
+ setTimeout(this.feed, speed*recording[currentChar][1] );
+ }
+
+ function feed() {
+ var dest = document.getElementById(destination);
+
+ if (dest) {
+ // && dest.innerHTML)
+
+ /* TODO: handle movement keys:
+ KEY_BACKSPACE 275, 127, 272
+ KEY_PAGE_UP 261 ; KEY_PAGE_DOWN 262
+ KEY_HOME 263 ; KEY_DELETE 275
+ port the abstract_console from slw in js
+ */
+
+ // get the next char
+ switch( recording[currentChar][0] ) {
+ case 10: // NEWLINE
+ case 13: // RETURN
+ cur_y++; row++;
+ cur_x = 0; col = 0;
+ if(row >= text.length) {
+ text[row] = new Array();
+ }
+ break;
+
+ case 8: // standard ASCII BACKSPACE
+ case 127: // other low level BACKSPACE codes
+ case 272: // (APPLE BACKSPACE)
+ case 275: // (SOMETIMES!?)
+
+ if(col > 0) // delete if not at the beginning of line
+ text[row].splice(col-1,1);
+
+ if(cur_x > 0) {
+ cur_x--;
+ col--;
+ } else { // backspace at the beginning of a line
+ // move everything up one line
+ // TODO
+ }
+ break;
+
+ case 257: // UP
+ if(row <= 0) break;
+ cur_y--; row--;
+ if (rowcr) { col=0; cur_x=0; }
+ break;
+ case 258: // DOWN
+ if(row >= text.length) break;
+ cur_y++; row++;
+ if (rowcr) { col=0; cur_x=0; }
+ break;
+ case 259: // LEFT
+ if(cur_x <= 0) break;
+ cur_x--;
+ col--;
+ break;
+ case 260: // RIGHT
+ // if(cur_x >= text[row].length) break;
+ cur_x++;
+ col++;
+ break;
+
+ default:
+ if (!text[row]) text[row] = new Array();
+ text[row].splice(col,0,recording[currentChar][0]);
+ cur_x++; col++;
+ break;
+ }
+
+ // RENDER TEXT
+ render_text = "";
+
+ rowsize = text.length;
+ for(cr = 0; cr < rowsize; cr++) {
+
+ colsize = text[cr].length;
+
+ if(cur_y == cr) { // cursor row
+
+ for(cc = 0; cc < colsize; cc++) {
+
+ if(cur_x == cc) { // draw cursor
+ render_text += "<u>";
+ render_text += String.fromCharCode( text[cr][cc] );
+ render_text += "</u>";
+ } else // not yet on cursor
+ render_text += String.fromCharCode( text[cr][cc] );
+
+ }
+
+ // draw cursor at the end of line
+ if(cur_x >= colsize) render_text += "_";
+
+ } else // no need to draw the cursor
+ for(cc = 0; cc < colsize; cc++)
+ render_text += String.fromCharCode( text[cr][cc] );
+
+
+ // newline
+ render_text += xhtml?"<br/>":"<br>";
+ }
+
+ // render_text += String.fromCharCode( recording[currentChar][0] );
+ dest.innerHTML = render_text;
+
+
+
+ // DOM compliant alternative:
+ // var textNode=document.createTextNode(text);
+ // dest.replaceChild(textNode, dest.childNodes[0]);
+
+
+
+ // go to the next entry
+ currentChar++;
+
+
+ if (currentChar >= recording.length) {
+
+ // end of record, restart after 5 seconds
+ currentChar=0;
+ render_text="";
+
+ // clear all text buffer
+ for(cr=0; cr < text.length; cr++)
+ delete text[cr];
+ delete text;
+
+ // end of text
+
+ } else {
+
+ // RECURSION IS TIME -jrml 31jan2007
+ setTimeout(feed, speed*recording[currentChar][1] );
+ }
+ }
+ }
+};
+//Setup VIM: ex: sw=4 ts=8 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/tbt/style.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/tbt/style.css
new file mode 100644
index 000000000..50c672d78
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/tbt/style.css
@@ -0,0 +1,7 @@
+div.dokuwiki div.tbtdest {
+ font-family:monospace;
+}
+div.dokuwiki span.tbtbutton {
+ border-width:2px !important;
+ cursor:pointer;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/tbt/syntax.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/tbt/syntax.php
new file mode 100644
index 000000000..28c4363e8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/tbt/syntax.php
@@ -0,0 +1,79 @@
+<?php
+/**
+ * render time based text
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Robin Gareus <robin@gareus.org>
+ */
+
+if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/');
+if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
+require_once(DOKU_PLUGIN.'syntax.php');
+require_once(DOKU_INC.'inc/search.php');
+require_once(DOKU_INC.'inc/JpegMeta.php');
+
+class syntax_plugin_tbt extends DokuWiki_Syntax_Plugin {
+ /**
+ * return some info
+ */
+ function getInfo(){
+ return array(
+ 'author' => 'Robin Gareus',
+ 'email' => 'robin@gareus.org',
+ 'date' => '2008-12-28',
+ 'name' => 'tbt',
+ 'desc' => 'render time based text.',
+ 'url' => 'http://mir.dnsalias.com/wiki/tbt',
+ );
+ }
+
+ function getType(){ return 'substition'; }
+ function getPType(){ return 'block'; }
+ function getSort(){ return 301; }
+
+ /**
+ * Connect pattern to lexer
+ */
+ function connectTo($mode) {
+ $this->Lexer->addSpecialPattern('\{\{tbt>[^}]*\}\}',$mode,'plugin_tbt');
+ }
+
+
+ /**
+ * Handle the match
+ */
+ function handle($match, $state, $pos, &$handler){
+ $data = array();
+
+ if (!strncasecmp($match,"{{tbt>",6) ) {
+ $match = substr($match,6,-2);
+ }
+ $data['tbt'] = $match;
+ return $data;
+ }
+
+ /**
+ * Create output
+ */
+ function render($mode, &$renderer, $data) {
+ global $myfckinguniqid;
+ if (empty($myfckinguniqid))$myfckinguniqid=1;
+ else $myfckinguniqid++;
+ $uid=$myfckinguniqid;
+
+ if($mode == 'xhtml'){
+ $renderer->doc .= '<span onclick="tbt_'.$uid.'.startTyping(\'textDestination_'.$uid.'\', TimeBasedText_'.$uid.');" class="toc_close tbtbutton">Restart</span><br/><br/>'."\n";
+ $renderer->doc .= '<div id="textDestination_'.$uid.'" class="tbtdest"> </div>';
+ $renderer->doc .= '<script language="JavaScript"><!--'."\n";
+ $renderer->doc .= 'var TimeBasedText_'.$uid.'='.$data['tbt'].";\n\n";
+ $renderer->doc .= 'var tbt_'.$uid.' = new TBT();'."\n";
+ $renderer->doc .= 'tbt_'.$uid.'.setRowCarriageReturn(1);'."\n";
+ $renderer->doc .= 'tbt_'.$uid.'.setXhtml(1);'."\n";
+ $renderer->doc .= 'tbt_'.$uid.'.startTyping("textDestination_'.$uid.'", TimeBasedText_'.$uid.');'."\n";
+ $renderer->doc .= '//--></script>'."\n";
+ return true;
+ }
+ return false;
+ }
+}
+//Setup VIM: ex: et sw=2 ts=2 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/admin.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/admin.php
new file mode 100644
index 000000000..da6029bbf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/admin.php
@@ -0,0 +1,627 @@
+<?php
+/*
+ * User Manager
+ *
+ * Dokuwiki Admin Plugin
+ *
+ * This version of the user manager has been modified to only work with
+ * objectified version of auth system
+ *
+ * @author neolao <neolao@neolao.com>
+ * @author Chris Smith <chris@jalakai.co.uk>
+ */
+// must be run within Dokuwiki
+if(!defined('DOKU_INC')) die();
+
+if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
+if(!defined('DOKU_PLUGIN_IMAGES')) define('DOKU_PLUGIN_IMAGES',DOKU_BASE.'lib/plugins/usermanager/images/');
+require_once(DOKU_PLUGIN.'admin.php');
+
+/**
+ * All DokuWiki plugins to extend the admin function
+ * need to inherit from this class
+ */
+class admin_plugin_usermanager extends DokuWiki_Admin_Plugin {
+
+ var $_auth = null; // auth object
+ var $_user_total = 0; // number of registered users
+ var $_filter = array(); // user selection filter(s)
+ var $_start = 0; // index of first user to be displayed
+ var $_last = 0; // index of the last user to be displayed
+ var $_pagesize = 20; // number of users to list on one page
+ var $_edit_user = ''; // set to user selected for editing
+ var $_edit_userdata = array();
+ var $_disabled = ''; // if disabled set to explanatory string
+
+ /**
+ * Constructor
+ */
+ function admin_plugin_usermanager(){
+ global $auth;
+
+ $this->setupLocale();
+
+ if (!isset($auth)) {
+ $this->disabled = $this->lang['noauth'];
+ } else if (!$auth->canDo('getUsers')) {
+ $this->disabled = $this->lang['nosupport'];
+ } else {
+
+ // we're good to go
+ $this->_auth = & $auth;
+
+ }
+ }
+
+ /**
+ * return some info
+ */
+ function getInfo(){
+
+ return array(
+ 'author' => 'Chris Smith',
+ 'email' => 'chris@jalakai.co.uk',
+ 'date' => '2008-09-17',
+ 'name' => 'User Manager',
+ 'desc' => 'Manage users '.$this->disabled,
+ 'url' => 'http://dokuwiki.org/plugin:usermanager',
+ );
+ }
+ /**
+ * return prompt for admin menu
+ */
+ function getMenuText($language) {
+
+ if (!is_null($this->_auth))
+ return parent::getMenuText($language);
+
+ return $this->getLang('menu').' '.$this->disabled;
+ }
+
+ /**
+ * return sort order for position in admin menu
+ */
+ function getMenuSort() {
+ return 2;
+ }
+
+ /**
+ * handle user request
+ */
+ function handle() {
+ global $ID;
+
+ if (is_null($this->_auth)) return false;
+
+ // extract the command and any specific parameters
+ // submit button name is of the form - fn[cmd][param(s)]
+ $fn = $_REQUEST['fn'];
+
+ if (is_array($fn)) {
+ $cmd = key($fn);
+ $param = is_array($fn[$cmd]) ? key($fn[$cmd]) : null;
+ } else {
+ $cmd = $fn;
+ $param = null;
+ }
+
+ if ($cmd != "search") {
+ if (!empty($_REQUEST['start']))
+ $this->_start = $_REQUEST['start'];
+ $this->_filter = $this->_retrieveFilter();
+ }
+
+ switch($cmd){
+ case "add" : $this->_addUser(); break;
+ case "delete" : $this->_deleteUser(); break;
+ case "modify" : $this->_modifyUser(); break;
+ case "edit" : $this->_editUser($param); break;
+ case "search" : $this->_setFilter($param);
+ $this->_start = 0;
+ break;
+ }
+
+ $this->_user_total = $this->_auth->canDo('getUserCount') ? $this->_auth->getUserCount($this->_filter) : -1;
+
+ // page handling
+ switch($cmd){
+ case 'start' : $this->_start = 0; break;
+ case 'prev' : $this->_start -= $this->_pagesize; break;
+ case 'next' : $this->_start += $this->_pagesize; break;
+ case 'last' : $this->_start = $this->_user_total; break;
+ }
+ $this->_validatePagination();
+ }
+
+ /**
+ * output appropriate html
+ */
+ function html() {
+ global $ID;
+
+ if(is_null($this->_auth)) {
+ print $this->lang['badauth'];
+ return false;
+ }
+
+ $user_list = $this->_auth->retrieveUsers($this->_start, $this->_pagesize, $this->_filter);
+ $users = array_keys($user_list);
+
+ $page_buttons = $this->_pagination();
+ $delete_disable = $this->_auth->canDo('delUser') ? '' : 'disabled="disabled"';
+
+ $editable = $this->_auth->canDo('UserMod');
+
+ print $this->locale_xhtml('intro');
+ print $this->locale_xhtml('list');
+
+ ptln("<div id=\"user__manager\">");
+ ptln("<div class=\"level2\">");
+
+ if ($this->_user_total > 0) {
+ ptln("<p>".sprintf($this->lang['summary'],$this->_start+1,$this->_last,$this->_user_total,$this->_auth->getUserCount())."</p>");
+ } else {
+ ptln("<p>".sprintf($this->lang['nonefound'],$this->_auth->getUserCount())."</p>");
+ }
+ ptln("<form action=\"".wl($ID)."\" method=\"post\">");
+ formSecurityToken();
+ ptln(" <table class=\"inline\">");
+ ptln(" <thead>");
+ ptln(" <tr>");
+ ptln(" <th>&nbsp;</th><th>".$this->lang["user_id"]."</th><th>".$this->lang["user_name"]."</th><th>".$this->lang["user_mail"]."</th><th>".$this->lang["user_groups"]."</th>");
+ ptln(" </tr>");
+
+ ptln(" <tr>");
+ ptln(" <td class=\"rightalign\"><input type=\"image\" src=\"".DOKU_PLUGIN_IMAGES."search.png\" name=\"fn[search][new]\" title=\"".$this->lang['search_prompt']."\" alt=\"".$this->lang['search']."\" class=\"button\" /></td>");
+ ptln(" <td><input type=\"text\" name=\"userid\" class=\"edit\" value=\"".$this->_htmlFilter('user')."\" /></td>");
+ ptln(" <td><input type=\"text\" name=\"username\" class=\"edit\" value=\"".$this->_htmlFilter('name')."\" /></td>");
+ ptln(" <td><input type=\"text\" name=\"usermail\" class=\"edit\" value=\"".$this->_htmlFilter('mail')."\" /></td>");
+ ptln(" <td><input type=\"text\" name=\"usergroups\" class=\"edit\" value=\"".$this->_htmlFilter('grps')."\" /></td>");
+ ptln(" </tr>");
+ ptln(" </thead>");
+
+ if ($this->_user_total) {
+ ptln(" <tbody>");
+ foreach ($user_list as $user => $userinfo) {
+ extract($userinfo);
+ $groups = join(', ',$grps);
+ ptln(" <tr class=\"user_info\">");
+ ptln(" <td class=\"centeralign\"><input type=\"checkbox\" name=\"delete[".$user."]\" ".$delete_disable." /></td>");
+ if ($editable) {
+ ptln(" <td><a href=\"".wl($ID,array('fn[edit]['.hsc($user).']' => 1,
+ 'do' => 'admin',
+ 'page' => 'usermanager',
+ 'sectok' => getSecurityToken())).
+ "\" title=\"".$this->lang['edit_prompt']."\">".hsc($user)."</a></td>");
+ } else {
+ ptln(" <td>".hsc($user)."</td>");
+ }
+ ptln(" <td>".hsc($name)."</td><td>".hsc($mail)."</td><td>".hsc($groups)."</td>");
+ ptln(" </tr>");
+ }
+ ptln(" </tbody>");
+ }
+
+ ptln(" <tbody>");
+ ptln(" <tr><td colspan=\"5\" class=\"centeralign\">");
+ ptln(" <span class=\"medialeft\">");
+ ptln(" <input type=\"submit\" name=\"fn[delete]\" ".$delete_disable." class=\"button\" value=\"".$this->lang['delete_selected']."\" id=\"usrmgr__del\" />");
+ ptln(" </span>");
+ ptln(" <span class=\"mediaright\">");
+ ptln(" <input type=\"submit\" name=\"fn[start]\" ".$page_buttons['start']." class=\"button\" value=\"".$this->lang['start']."\" />");
+ ptln(" <input type=\"submit\" name=\"fn[prev]\" ".$page_buttons['prev']." class=\"button\" value=\"".$this->lang['prev']."\" />");
+ ptln(" <input type=\"submit\" name=\"fn[next]\" ".$page_buttons['next']." class=\"button\" value=\"".$this->lang['next']."\" />");
+ ptln(" <input type=\"submit\" name=\"fn[last]\" ".$page_buttons['last']." class=\"button\" value=\"".$this->lang['last']."\" />");
+ ptln(" </span>");
+ ptln(" <input type=\"submit\" name=\"fn[search][clear]\" class=\"button\" value=\"".$this->lang['clear']."\" />");
+ ptln(" <input type=\"hidden\" name=\"do\" value=\"admin\" />");
+ ptln(" <input type=\"hidden\" name=\"page\" value=\"usermanager\" />");
+
+ $this->_htmlFilterSettings(2);
+
+ ptln(" </td></tr>");
+ ptln(" </tbody>");
+ ptln(" </table>");
+
+ ptln("</form>");
+ ptln("</div>");
+
+ $style = $this->_edit_user ? " class=\"edit_user\"" : "";
+
+ if ($this->_auth->canDo('addUser')) {
+ ptln("<div".$style.">");
+ print $this->locale_xhtml('add');
+ ptln(" <div class=\"level2\">");
+
+ $this->_htmlUserForm('add',null,array(),4);
+
+ ptln(" </div>");
+ ptln("</div>");
+ }
+
+ if($this->_edit_user && $this->_auth->canDo('UserMod')){
+ ptln("<div".$style." id=\"scroll__here\">");
+ print $this->locale_xhtml('edit');
+ ptln(" <div class=\"level2\">");
+
+ $this->_htmlUserForm('modify',$this->_edit_user,$this->_edit_userdata,4);
+
+ ptln(" </div>");
+ ptln("</div>");
+ }
+ ptln("</div>");
+ }
+
+
+ /**
+ * @todo disable fields which the backend can't change
+ */
+ function _htmlUserForm($cmd,$user='',$userdata=array(),$indent=0) {
+ global $conf;
+ global $ID;
+
+ $name = $mail = $groups = '';
+ $notes = array();
+
+ if ($user) {
+ extract($userdata);
+ if (!empty($grps)) $groups = join(',',$grps);
+ } else {
+ $notes[] = sprintf($this->lang['note_group'],$conf['defaultgroup']);
+ }
+
+ ptln("<form action=\"".wl($ID)."\" method=\"post\">",$indent);
+ formSecurityToken();
+ ptln(" <table class=\"inline\">",$indent);
+ ptln(" <thead>",$indent);
+ ptln(" <tr><th>".$this->lang["field"]."</th><th>".$this->lang["value"]."</th></tr>",$indent);
+ ptln(" </thead>",$indent);
+ ptln(" <tbody>",$indent);
+
+ $this->_htmlInputField($cmd."_userid", "userid", $this->lang["user_id"], $user, $this->_auth->canDo("modLogin"), $indent+6);
+ $this->_htmlInputField($cmd."_userpass", "userpass", $this->lang["user_pass"], "", $this->_auth->canDo("modPass"), $indent+6);
+ $this->_htmlInputField($cmd."_username", "username", $this->lang["user_name"], $name, $this->_auth->canDo("modName"), $indent+6);
+ $this->_htmlInputField($cmd."_usermail", "usermail", $this->lang["user_mail"], $mail, $this->_auth->canDo("modMail"), $indent+6);
+ $this->_htmlInputField($cmd."_usergroups","usergroups",$this->lang["user_groups"],$groups,$this->_auth->canDo("modGroups"),$indent+6);
+
+ if ($this->_auth->canDo("modPass")) {
+ $notes[] = $this->lang['note_pass'];
+ if ($user) {
+ $notes[] = $this->lang['note_notify'];
+ }
+
+ ptln("<tr><td><label for=\"".$cmd."_usernotify\" >".$this->lang["user_notify"].": </label></td><td><input type=\"checkbox\" id=\"".$cmd."_usernotify\" name=\"usernotify\" value=\"1\" /></td></tr>", $indent);
+ }
+
+ ptln(" </tbody>",$indent);
+ ptln(" <tbody>",$indent);
+ ptln(" <tr>",$indent);
+ ptln(" <td colspan=\"2\">",$indent);
+ ptln(" <input type=\"hidden\" name=\"do\" value=\"admin\" />",$indent);
+ ptln(" <input type=\"hidden\" name=\"page\" value=\"usermanager\" />",$indent);
+
+ // save current $user, we need this to access details if the name is changed
+ if ($user)
+ ptln(" <input type=\"hidden\" name=\"userid_old\" value=\"".$user."\" />",$indent);
+
+ $this->_htmlFilterSettings($indent+10);
+
+ ptln(" <input type=\"submit\" name=\"fn[".$cmd."]\" class=\"button\" value=\"".$this->lang[$cmd]."\" />",$indent);
+ ptln(" </td>",$indent);
+ ptln(" </tr>",$indent);
+ ptln(" </tbody>",$indent);
+ ptln(" </table>",$indent);
+
+ foreach ($notes as $note)
+ ptln("<div class=\"fn\">".$note."</div>",$indent);
+
+ ptln("</form>",$indent);
+ }
+
+ function _htmlInputField($id, $name, $label, $value, $cando, $indent=0) {
+ $class = $cando ? '' : ' class="disabled"';
+ $disabled = $cando ? '' : ' disabled="disabled"';
+ echo str_pad('',$indent);
+
+ $fieldtype = ($name == "userpass") ? 'password' : 'text';
+
+ echo "<tr $class>";
+ echo "<td><label for=\"$id\" >$label: </label></td>";
+ echo "<td>";
+ if($cando){
+ echo "<input type=\"$fieldtype\" id=\"$id\" name=\"$name\" value=\"$value\" class=\"edit\" />";
+ }else{
+ echo "<input type=\"hidden\" name=\"$name\" value=\"$value\" />";
+ echo "<input type=\"$fieldtype\" id=\"$id\" name=\"$name\" value=\"$value\" class=\"edit disabled\" disabled=\"disabled\" />";
+ }
+ echo "</td>";
+ echo "</tr>";
+ }
+
+ function _htmlFilter($key) {
+ if (empty($this->_filter)) return '';
+ return (isset($this->_filter[$key]) ? hsc($this->_filter[$key]) : '');
+ }
+
+ function _htmlFilterSettings($indent=0) {
+
+ ptln("<input type=\"hidden\" name=\"start\" value=\"".$this->_start."\" />",$indent);
+
+ foreach ($this->_filter as $key => $filter) {
+ ptln("<input type=\"hidden\" name=\"filter[".$key."]\" value=\"".hsc($filter)."\" />",$indent);
+ }
+ }
+
+ function _addUser(){
+ if (!checkSecurityToken()) return false;
+ if (!$this->_auth->canDo('addUser')) return false;
+
+ list($user,$pass,$name,$mail,$grps) = $this->_retrieveUser();
+ if (empty($user)) return false;
+
+ if ($this->_auth->canDo('modPass')){
+ if (empty($pass)){
+ if(!empty($_REQUEST['usernotify'])){
+ $pass = auth_pwgen();
+ } else {
+ msg($this->lang['add_fail'], -1);
+ return false;
+ }
+ }
+ } else {
+ if (!empty($pass)){
+ msg($this->lang['add_fail'], -1);
+ return false;
+ }
+ }
+
+ if ($this->_auth->canDo('modName')){
+ if (empty($name)){
+ msg($this->lang['add_fail'], -1);
+ return false;
+ }
+ } else {
+ if (!empty($name)){
+ return false;
+ }
+ }
+
+ if ($this->_auth->canDo('modMail')){
+ if (empty($mail)){
+ msg($this->lang['add_fail'], -1);
+ return false;
+ }
+ } else {
+ if (!empty($mail)){
+ return false;
+ }
+ }
+
+ if ($ok = $this->_auth->triggerUserMod('create', array($user,$pass,$name,$mail,$grps))) {
+
+ msg($this->lang['add_ok'], 1);
+
+ if (!empty($_REQUEST['usernotify']) && $pass) {
+ $this->_notifyUser($user,$pass);
+ }
+ } else {
+ msg($this->lang['add_fail'], -1);
+ }
+
+ return $ok;
+ }
+
+ /**
+ * Delete user
+ */
+ function _deleteUser(){
+ global $conf;
+
+ if (!checkSecurityToken()) return false;
+ if (!$this->_auth->canDo('delUser')) return false;
+
+ $selected = $_REQUEST['delete'];
+ if (!is_array($selected) || empty($selected)) return false;
+ $selected = array_keys($selected);
+
+ if(in_array($_SERVER['REMOTE_USER'], $selected)) {
+ msg("You can't delete yourself!", -1);
+ return false;
+ }
+
+ $count = $this->_auth->triggerUserMod('delete', array($selected));
+ if ($count == count($selected)) {
+ $text = str_replace('%d', $count, $this->lang['delete_ok']);
+ msg("$text.", 1);
+ } else {
+ $part1 = str_replace('%d', $count, $this->lang['delete_ok']);
+ $part2 = str_replace('%d', (count($selected)-$count), $this->lang['delete_fail']);
+ msg("$part1, $part2",-1);
+ }
+
+ // invalidate all sessions
+ io_saveFile($conf['cachedir'].'/sessionpurge',time());
+
+ return true;
+ }
+
+ /**
+ * Edit user (a user has been selected for editing)
+ */
+ function _editUser($param) {
+ if (!checkSecurityToken()) return false;
+ if (!$this->_auth->canDo('UserMod')) return false;
+
+ $user = cleanID(preg_replace('/.*:/','',$param));
+ $userdata = $this->_auth->getUserData($user);
+
+ // no user found?
+ if (!$userdata) {
+ msg($this->lang['edit_usermissing'],-1);
+ return false;
+ }
+
+ $this->_edit_user = $user;
+ $this->_edit_userdata = $userdata;
+
+ return true;
+ }
+
+ /**
+ * Modify user (modified user data has been recieved)
+ */
+ function _modifyUser(){
+ global $conf;
+
+ if (!checkSecurityToken()) return false;
+ if (!$this->_auth->canDo('UserMod')) return false;
+
+ // get currently valid user data
+ $olduser = cleanID(preg_replace('/.*:/','',$_REQUEST['userid_old']));
+ $oldinfo = $this->_auth->getUserData($olduser);
+
+ // get new user data subject to change
+ list($newuser,$newpass,$newname,$newmail,$newgrps) = $this->_retrieveUser();
+ if (empty($newuser)) return false;
+
+ $changes = array();
+ if ($newuser != $olduser) {
+
+ if (!$this->_auth->canDo('modLogin')) { // sanity check, shouldn't be possible
+ msg($this->lang['update_fail'],-1);
+ return false;
+ }
+
+ // check if $newuser already exists
+ if ($this->_auth->getUserData($newuser)) {
+ msg(sprintf($this->lang['update_exists'],$newuser),-1);
+ $re_edit = true;
+ } else {
+ $changes['user'] = $newuser;
+ }
+ }
+
+ if (!empty($newpass) && $this->_auth->canDo('modPass'))
+ $changes['pass'] = $newpass;
+ if (!empty($newname) && $this->_auth->canDo('modName') && $newname != $oldinfo['name'])
+ $changes['name'] = $newname;
+ if (!empty($newmail) && $this->_auth->canDo('modMail') && $newmail != $oldinfo['mail'])
+ $changes['mail'] = $newmail;
+ if (!empty($newgrps) && $this->_auth->canDo('modGroups') && $newgrps != $oldinfo['grps'])
+ $changes['grps'] = $newgrps;
+
+ if ($ok = $this->_auth->triggerUserMod('modify', array($olduser, $changes))) {
+ msg($this->lang['update_ok'],1);
+
+ if (!empty($_REQUEST['usernotify']) && $newpass) {
+ $notify = empty($changes['user']) ? $olduser : $newuser;
+ $this->_notifyUser($notify,$newpass);
+ }
+
+ // invalidate all sessions
+ io_saveFile($conf['cachedir'].'/sessionpurge',time());
+
+ } else {
+ msg($this->lang['update_fail'],-1);
+ }
+
+ if (!empty($re_edit)) {
+ $this->_editUser($olduser);
+ }
+
+ return $ok;
+ }
+
+ /**
+ * send password change notification email
+ */
+ function _notifyUser($user, $password) {
+
+ if ($sent = auth_sendPassword($user,$password)) {
+ msg($this->lang['notify_ok'], 1);
+ } else {
+ msg($this->lang['notify_fail'], -1);
+ }
+
+ return $sent;
+ }
+
+ /**
+ * retrieve & clean user data from the form
+ *
+ * @return array(user, password, full name, email, array(groups))
+ */
+ function _retrieveUser($clean=true) {
+
+ $user[0] = ($clean) ? cleanID(preg_replace('/.*:/','',$_REQUEST['userid'])) : $_REQUEST['userid'];
+ $user[1] = $_REQUEST['userpass'];
+ $user[2] = $_REQUEST['username'];
+ $user[3] = $_REQUEST['usermail'];
+ $user[4] = preg_split('/\s*,\s*/',$_REQUEST['usergroups'],-1,PREG_SPLIT_NO_EMPTY);
+
+ if (empty($user[4]) || (is_array($user[4]) && (count($user[4]) == 1) && (trim($user[4][0]) == ''))) {
+ $user[4] = null;
+ }
+
+ return $user;
+ }
+
+ function _setFilter($op) {
+
+ $this->_filter = array();
+
+ if ($op == 'new') {
+ list($user,$pass,$name,$mail,$grps) = $this->_retrieveUser(false);
+
+ if (!empty($user)) $this->_filter['user'] = $user;
+ if (!empty($name)) $this->_filter['name'] = $name;
+ if (!empty($mail)) $this->_filter['mail'] = $mail;
+ if (!empty($grps)) $this->_filter['grps'] = join('|',$grps);
+ }
+ }
+
+ function _retrieveFilter() {
+
+ $t_filter = $_REQUEST['filter'];
+ if (!is_array($t_filter)) return array();
+
+ // messy, but this way we ensure we aren't getting any additional crap from malicious users
+ $filter = array();
+
+ if (isset($t_filter['user'])) $filter['user'] = $t_filter['user'];
+ if (isset($t_filter['name'])) $filter['name'] = $t_filter['name'];
+ if (isset($t_filter['mail'])) $filter['mail'] = $t_filter['mail'];
+ if (isset($t_filter['grps'])) $filter['grps'] = $t_filter['grps'];
+
+ return $filter;
+ }
+
+ function _validatePagination() {
+
+ if ($this->_start >= $this->_user_total) {
+ $this->_start = $this->_user_total - $this->_pagesize;
+ }
+ if ($this->_start < 0) $this->_start = 0;
+
+ $this->_last = min($this->_user_total, $this->_start + $this->_pagesize);
+ }
+
+ /*
+ * return an array of strings to enable/disable pagination buttons
+ */
+ function _pagination() {
+
+ $disabled = 'disabled="disabled"';
+
+ $buttons['start'] = $buttons['prev'] = ($this->_start == 0) ? $disabled : '';
+
+ if ($this->_user_total == -1) {
+ $buttons['last'] = $disabled;
+ $buttons['next'] = '';
+ } else {
+ $buttons['last'] = $buttons['next'] = (($this->_start + $this->_pagesize) >= $this->_user_total) ? $disabled : '';
+ }
+
+ return $buttons;
+ }
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/images/search.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/images/search.png
new file mode 100644
index 000000000..1aa445f03
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/images/search.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/af/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/af/lang.php
new file mode 100644
index 000000000..9a6c5666d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/af/lang.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * Afrikaans language file
+ *
+ */
+$lang['user_pass'] = 'Wagwoord';
+$lang['user_name'] = 'Regte Naam';
+$lang['user_mail'] = 'E-pos';
+$lang['edit'] = 'Verander';
+$lang['search'] = 'Soek';
+$lang['start'] = 'begin';
+$lang['prev'] = 'voorigste';
+$lang['next'] = 'volgende';
+$lang['last'] = 'einde';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/add.txt
new file mode 100644
index 000000000..14a10a27d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/add.txt
@@ -0,0 +1 @@
+==== إضاÙØ© حساب ==== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/delete.txt
new file mode 100644
index 000000000..d44bb9fda
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/delete.txt
@@ -0,0 +1 @@
+==== حذ٠الحساب ==== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/edit.txt
new file mode 100644
index 000000000..5db2ce031
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/edit.txt
@@ -0,0 +1 @@
+==== تعديل الحساب ==== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/lang.php
new file mode 100644
index 000000000..88a115de2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/lang.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Arabic language file
+ *
+ * @author Yaman Hokan <always.smile.yh@hotmail.com>
+ */
+$lang['user_id'] = 'اسم المستخدم';
+$lang['user_pass'] = 'كلمة السر';
+$lang['user_name'] = 'الاسم الحقيقي';
+$lang['user_mail'] = 'البريد الالكتروني';
+$lang['user_groups'] = 'المجموعات';
+$lang['field'] = 'حقل';
+$lang['value'] = 'القيمة';
+$lang['add'] = 'إضاÙØ©';
+$lang['delete'] = 'حذÙ';
+$lang['delete_selected'] = 'حذ٠المختار';
+$lang['edit'] = 'تحرير';
+$lang['modify'] = 'Ø­Ùظ التعديلات';
+$lang['search'] = 'بحث';
+$lang['update_exists'] = 'لقد Ùشل تغيير اسم المستخدم , اسم المستخدم المحدد (%s) غير متاح . ( سيتم تطبيق أي تغييرات أخرى )';
+$lang['start'] = 'ابدأ';
+$lang['prev'] = 'السابق';
+$lang['next'] = 'التالي';
+$lang['last'] = 'الأخير';
+$lang['add_ok'] = 'تم بنجاح ضاÙØ© الحساب';
+$lang['add_fail'] = 'Ùشلت إضاÙØ© الحساب';
+$lang['notify_ok'] = 'تم إرسال رسالة الإشعار';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/add.txt
new file mode 100644
index 000000000..e0678198b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/add.txt
@@ -0,0 +1 @@
+===== ДобавÑне на потребител =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/delete.txt
new file mode 100644
index 000000000..aa60fc3df
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/delete.txt
@@ -0,0 +1 @@
+===== Изтриване на потребител =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/edit.txt
new file mode 100644
index 000000000..652d03617
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/edit.txt
@@ -0,0 +1 @@
+===== Редактиране на потребител =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/intro.txt
new file mode 100644
index 000000000..0a9afd513
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/intro.txt
@@ -0,0 +1 @@
+====== Управление на потребителите ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/lang.php
new file mode 100644
index 000000000..58c8453f2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/lang.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * bulgarian language file
+ *
+ * @author Nikolay Vladimirov <nikolay@vladimiroff.com>
+ * @author Viktor Usunov <usun0v@mail.bg>
+ */
+$lang['menu'] = 'Управление на потребителите';
+$lang['noauth'] = '(идентифицирането на потребителите е недоÑтъпно)';
+$lang['nosupport'] = '(не Ñе поддържа управление на потребители)';
+$lang['badauth'] = 'невалиден механизъм при идентификациÑ';
+$lang['user_id'] = 'Потребител';
+$lang['user_pass'] = 'Парола';
+$lang['user_name'] = 'ИÑтинÑко име';
+$lang['user_mail'] = 'Електронна поща';
+$lang['user_groups'] = 'Групи';
+$lang['field'] = 'Поле';
+$lang['value'] = 'СтойноÑÑ‚';
+$lang['add'] = 'ДобавÑне';
+$lang['delete'] = 'Изтриване';
+$lang['delete_selected'] = 'Изтриване на избраните';
+$lang['edit'] = 'Редактиране';
+$lang['edit_prompt'] = 'Редактиране на потребителÑ';
+$lang['modify'] = 'Ð—Ð°Ð¿Ð¸Ñ Ð½Ð° промените';
+$lang['search'] = 'ТърÑене';
+$lang['search_prompt'] = 'ТърÑене';
+$lang['clear'] = 'ОбновÑване на Ñ‚ÑŠÑ€Ñенето';
+$lang['filter'] = 'Филтър';
+$lang['summary'] = 'Показване на потребители %1$d-%2$d от %3$d намерени. %4$d потребители общо.';
+$lang['nonefound'] = 'ÐÑма намерени потребители. Общо %d потребители.';
+$lang['delete_ok'] = '%d потребители изтрити';
+$lang['delete_fail'] = '%d не бÑха изтрити';
+$lang['update_ok'] = 'ОбновÑването на Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ñ Ð±Ðµ уÑпешно';
+$lang['update_fail'] = 'ОбновÑването на Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ñ Ð±Ðµ неуÑпешно';
+$lang['update_exists'] = 'СмÑната на потребителÑкото име бе невъзможна, оказаното потребителÑко име (%s) вече ÑъщеÑтвува (вÑÑкакви други промени ще бъдат приложени).';
+$lang['start'] = 'начало';
+$lang['prev'] = 'предишно';
+$lang['next'] = 'Ñледващо';
+$lang['last'] = 'поÑледно';
+$lang['edit_usermissing'] = 'ИзбраниÑÑ‚ потребител не бе намерен, оказаното потребителÑко име може да е изтрито или променено другаде.';
+$lang['user_notify'] = 'ОÑведомÑване на потребителÑ';
+$lang['note_notify'] = 'ОÑведомителната e-поща Ñе праща Ñамо, ако на Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ñ Ðµ дадена нова парола.';
+$lang['note_group'] = 'Ðовите потребители ще бъдат добавÑни към групата (%s) ако не бъде поÑочена друга.';
+$lang['note_pass'] = 'Паролата ще бъде генерирана автоматично, ако полето е оÑтавено празно и функциÑта за уведомÑване на Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ñ Ðµ включена.';
+$lang['add_ok'] = 'ДобавÑнето на Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ñ Ð±Ðµ уÑпешно';
+$lang['add_fail'] = 'ДобавÑнето на Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ñ Ð±Ðµ неуÑпешно';
+$lang['notify_ok'] = 'ОÑведомително е-пиÑмо бе изпратено';
+$lang['notify_fail'] = 'Пращането на оÑведомително е-пиÑмо е невъзможно';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/list.txt
new file mode 100644
index 000000000..e90205fe6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/list.txt
@@ -0,0 +1 @@
+===== СпиÑък Ñ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ð¸Ñ‚Ðµ =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/add.txt
new file mode 100644
index 000000000..df5ba9235
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/add.txt
@@ -0,0 +1 @@
+===== Afegir usuari =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/delete.txt
new file mode 100644
index 000000000..f386b589a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/delete.txt
@@ -0,0 +1 @@
+===== Borrar usuari =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/edit.txt
new file mode 100644
index 000000000..6b78c127f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/edit.txt
@@ -0,0 +1 @@
+===== Editar usuari =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/intro.txt
new file mode 100644
index 000000000..540a0702e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/intro.txt
@@ -0,0 +1 @@
+====== Gestor d'usuaris ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/lang.php
new file mode 100644
index 000000000..5b0c628ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/lang.php
@@ -0,0 +1,49 @@
+<?php
+/**
+ * Valencian language file
+ *
+ * @author Bernat Arlandis i Mañó <berarma@ya.com>
+ * @author Bernat Arlandis <berarma@ya.com>
+ * @author Bernat Arlandis <berarma@llenguaitecnologia.com>
+ */
+$lang['menu'] = 'Gestor d\'usuaris';
+$lang['noauth'] = '(autenticació d\'usuaris no disponible)';
+$lang['nosupport'] = '(gestió d\'usuaris no admesa)';
+$lang['badauth'] = 'mecanisme d\'autenticació no vàlit';
+$lang['user_id'] = 'Usuari';
+$lang['user_pass'] = 'Contrasenya';
+$lang['user_name'] = 'Nom real';
+$lang['user_mail'] = 'Correu electrònic';
+$lang['user_groups'] = 'Grups';
+$lang['field'] = 'Camp';
+$lang['value'] = 'Valor';
+$lang['add'] = 'Afegir';
+$lang['delete'] = 'Borrar';
+$lang['delete_selected'] = 'Borrar seleccionats';
+$lang['edit'] = 'Editar';
+$lang['edit_prompt'] = 'Editar est usuari';
+$lang['modify'] = 'Guardar canvis';
+$lang['search'] = 'Buscar';
+$lang['search_prompt'] = 'Començar busca';
+$lang['clear'] = 'Reiniciar filtre de busques';
+$lang['filter'] = 'Filtre';
+$lang['summary'] = 'Mostrant usuaris %1$d-%2$d de %3$d trobats. %4$d usuaris totals.';
+$lang['nonefound'] = 'No s\'han trobat usuaris. %d usuaris totals.';
+$lang['delete_ok'] = '%d usuaris borrats';
+$lang['delete_fail'] = 'Erro borrant %d.';
+$lang['update_ok'] = 'Usuari actualisat correctament';
+$lang['update_fail'] = 'Erro actualisant usuari';
+$lang['update_exists'] = 'Erro canviant el nom de l\'usuari, el nom d\'usuari que ha donat ya existix (els demés canvis s\'aplicaran).';
+$lang['start'] = 'primera';
+$lang['prev'] = 'anterior';
+$lang['next'] = 'següent';
+$lang['last'] = 'última';
+$lang['edit_usermissing'] = 'L\'usuari seleccionat no existix, pot haver segut borrat o modificat des d\'un atre lloc.';
+$lang['user_notify'] = 'Notificar a l\'usuari';
+$lang['note_notify'] = 'Els correus de notificació només s\'envien si a l\'usuari se li assigna una contrasenya nova.';
+$lang['note_group'] = 'Els usuaris nous s\'afegiran al grup predeterminat (%s) si no se n\'especifica atre.';
+$lang['note_pass'] = 'Si es deixa el camp buit i la notificació a l\'usuari està desactivada s\'autogenerarà la contrasenya.';
+$lang['add_ok'] = 'Usuari afegit correctament';
+$lang['add_fail'] = 'Erro afegint usuari';
+$lang['notify_ok'] = 'Correu de notificació enviat';
+$lang['notify_fail'] = 'Erro enviant el correu de notificació';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/list.txt
new file mode 100644
index 000000000..15af2d56f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/list.txt
@@ -0,0 +1 @@
+===== Llista d'usuaris =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/add.txt
new file mode 100644
index 000000000..07c599476
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/add.txt
@@ -0,0 +1 @@
+===== Nou usuari ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/delete.txt
new file mode 100644
index 000000000..90878e563
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/delete.txt
@@ -0,0 +1 @@
+===== Supressió d'usuari ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/edit.txt
new file mode 100644
index 000000000..f7dc8cb8e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/edit.txt
@@ -0,0 +1 @@
+===== Edició d'usuari ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/intro.txt
new file mode 100644
index 000000000..864aa1008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/intro.txt
@@ -0,0 +1 @@
+======= Gestió d'usuaris ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/lang.php
new file mode 100644
index 000000000..445556973
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/lang.php
@@ -0,0 +1,50 @@
+<?php
+/**
+ * Catalan language file
+ *
+ * @author Carles Bellver <carles.bellver@gmail.com>
+ * @author carles.bellver@gmail.com
+ * @author carles.bellver@cent.uji.es
+ * @author Carles Bellver <carles.bellver@cent.uji.es>
+ */
+$lang['menu'] = 'Gestió d\'usuaris';
+$lang['noauth'] = '(l\'autenticació d\'usuaris no està disponible)';
+$lang['nosupport'] = '(la gestió d\'usuaris no funciona)';
+$lang['badauth'] = 'el mecanisme d\'autenticació no és vàlid';
+$lang['user_id'] = 'Usuari';
+$lang['user_pass'] = 'Contrasenya';
+$lang['user_name'] = 'Nom real';
+$lang['user_mail'] = 'Correu electrònic';
+$lang['user_groups'] = 'Grups';
+$lang['field'] = 'Camp';
+$lang['value'] = 'Valor';
+$lang['add'] = 'Afegeix';
+$lang['delete'] = 'Suprimeix';
+$lang['delete_selected'] = 'Suprimeix els seleccionats';
+$lang['edit'] = 'Edita';
+$lang['edit_prompt'] = 'Edita aquest usuari';
+$lang['modify'] = 'Desa els canvis';
+$lang['search'] = 'Cerca';
+$lang['search_prompt'] = 'Fes la cerca';
+$lang['clear'] = 'Reinicia el filtre de cerca';
+$lang['filter'] = 'Filtre';
+$lang['summary'] = 'Visualització d\'usuaris %1$d-%2$d de %3$d trobats. %4$d usuaris en total.';
+$lang['nonefound'] = 'No s\'han trobat usuaris. %d usuaris en total.';
+$lang['delete_ok'] = 'S\'han suprimit %d usuaris';
+$lang['delete_fail'] = 'No s\'han pogut suprimir %d.';
+$lang['update_ok'] = 'L\'usuari ha estat actualitzat amb èxit';
+$lang['update_fail'] = 'Ha fallat l\'actualització de l\'usuari';
+$lang['update_exists'] = 'No s\'ha pogut canviar el nom de l\'usuari. El nom d\'usuari especificat (%s) ja existeix (qualsevol altre canvi sí que serà efectiu).';
+$lang['start'] = 'inici';
+$lang['prev'] = 'anterior';
+$lang['next'] = 'següent';
+$lang['last'] = 'final';
+$lang['edit_usermissing'] = 'L\'usuari seleccionat no s\'ha pogut trobar. Potser el nom d\'usuari especificat s\'ha suprimit o modificat des d\'un altre lloc.';
+$lang['user_notify'] = 'Notificació a l\'usuari';
+$lang['note_notify'] = 'Els correus de notificació només s\'envien si es canvia la contrasenya de l\'usuari.';
+$lang['note_group'] = 'Els nous usuaris s\'afegeixen al grup per defecte (%s) si no s\'especifica un altre grup.';
+$lang['note_pass'] = 'La contrasenya es generarà automàticament si el camp es deixa en blanc i les notificacions estan habilitades per a aquest usuari.';
+$lang['add_ok'] = 'L\'usuari s\'ha afegit amb èxit';
+$lang['add_fail'] = 'No s\'ha pogut afegir l\'usuari';
+$lang['notify_ok'] = 'S\'ha enviat el correu de notificació';
+$lang['notify_fail'] = 'No s\'ha pogut enviar el correu de notificació';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/list.txt
new file mode 100644
index 000000000..22e1587f4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/list.txt
@@ -0,0 +1 @@
+===== Llista d'usuaris ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/add.txt
new file mode 100644
index 000000000..39b14d554
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/add.txt
@@ -0,0 +1 @@
+===== Přidat uživatele =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/delete.txt
new file mode 100644
index 000000000..a8790d87d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/delete.txt
@@ -0,0 +1 @@
+===== Smazat uživatele =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/edit.txt
new file mode 100644
index 000000000..d8ba38605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/edit.txt
@@ -0,0 +1 @@
+===== Upravit uživatele =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/intro.txt
new file mode 100644
index 000000000..5b8f6e90b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/intro.txt
@@ -0,0 +1 @@
+====== Správa uživatelů ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/lang.php
new file mode 100644
index 000000000..6f368bd0f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/lang.php
@@ -0,0 +1,50 @@
+<?php
+/**
+ * Czech language file
+ *
+ * @author Tomas Valenta <t.valenta@sh.cvut.cz>
+ * @author Zbynek Krivka <zbynek.krivka@seznam.cz>
+ * @author Bohumir Zamecnik <bohumir@zamecnik.org>
+ * @author tomas@valenta.cz
+ */
+$lang['menu'] = 'Správa uživatelů';
+$lang['noauth'] = '(autentizace uživatelů není k dispozici)';
+$lang['nosupport'] = '(správa uživatelů není podporována)';
+$lang['badauth'] = 'chybná metoda autentizace';
+$lang['user_id'] = 'Uživatel';
+$lang['user_pass'] = 'Heslo';
+$lang['user_name'] = 'Celé jméno';
+$lang['user_mail'] = 'E-mail';
+$lang['user_groups'] = 'Skupiny';
+$lang['field'] = 'Položka';
+$lang['value'] = 'Hodnota';
+$lang['add'] = 'Přidat';
+$lang['delete'] = 'Smazat';
+$lang['delete_selected'] = 'Smazat vybrané';
+$lang['edit'] = 'Upravit';
+$lang['edit_prompt'] = 'Upravit uživatele';
+$lang['modify'] = 'Uložit změny';
+$lang['search'] = 'Hledání';
+$lang['search_prompt'] = 'Prohledat';
+$lang['clear'] = 'Zrušit vyhledávací filtr';
+$lang['filter'] = 'Filtr';
+$lang['summary'] = 'Zobrazuji uživatele %1$d-%2$d z %3$d nalezených. Celkem %4$d uživatelů.';
+$lang['nonefound'] = 'Žadný uživatel nenalezen. Celkem %d uživatelů.';
+$lang['delete_ok'] = '%d uživatelů smazáno';
+$lang['delete_fail'] = '%d uživatelů nelze smazat.';
+$lang['update_ok'] = 'Uživatel upraven';
+$lang['update_fail'] = 'Úprava uživatele selhala';
+$lang['update_exists'] = 'Jméno nelze změnit, jelikož zadané uživatelské jméno (%s) již existuje (ostatní změny ale budou provedeny).';
+$lang['start'] = 'první';
+$lang['prev'] = 'předchozí';
+$lang['next'] = 'další';
+$lang['last'] = 'poslední';
+$lang['edit_usermissing'] = 'Vybraný uživatel nebyl nalezen, zadané uživatelského mohlo být smazáno nebo změněno.';
+$lang['user_notify'] = 'Upozornit uživatele';
+$lang['note_notify'] = 'Maily s upozorněním se budou posílat pouze, když uživatel dostává nové heslo.';
+$lang['note_group'] = 'Noví uživatelé budou přidáváni do této výchozí skupiny (%s), pokud pro ně není uvedena žádná skupina.';
+$lang['note_pass'] = 'Heslo bude automaticky vygenerováno pokud je pole ponacháno prázdné a je zapnutá notifikace uživatele.';
+$lang['add_ok'] = 'Uživatel úspěšně vytvořen';
+$lang['add_fail'] = 'Vytvoření uživatele selhalo';
+$lang['notify_ok'] = 'Odeslán mail s upozorněním';
+$lang['notify_fail'] = 'Mail s upozorněním nebylo možno odeslat';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/list.txt
new file mode 100644
index 000000000..36b87fed9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/list.txt
@@ -0,0 +1 @@
+===== Seznam uživatelů =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/add.txt
new file mode 100644
index 000000000..d97de4248
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/add.txt
@@ -0,0 +1 @@
+===== Tilføj bruger =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/delete.txt
new file mode 100644
index 000000000..dff05454c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/delete.txt
@@ -0,0 +1 @@
+===== Slet bruger =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/edit.txt
new file mode 100644
index 000000000..05d63b7b0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/edit.txt
@@ -0,0 +1 @@
+===== Rediger bruger =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/intro.txt
new file mode 100644
index 000000000..3f597a243
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/intro.txt
@@ -0,0 +1 @@
+====== Brugerstyring ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/lang.php
new file mode 100644
index 000000000..42bdcb7c3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/lang.php
@@ -0,0 +1,52 @@
+<?php
+/**
+ * Danish language file
+ *
+ * @author Lars Næsbye Christensen <larsnaesbye@stud.ku.dk>
+ * @author Kalle Sommer Nielsen <kalle@php.net>
+ * @author Esben Laursen <hyber@hyber.dk>
+ * @author Harith <haj@berlingske.dk>
+ * @author Daniel Ejsing-Duun <dokuwiki@zilvador.dk>
+ * @author Erik Bjørn Pedersen <erik.pedersen@shaw.ca>
+ */
+$lang['menu'] = 'Brugerstyring';
+$lang['noauth'] = '(Brugervalidering er ikke tilgængelig)';
+$lang['nosupport'] = '(Brugerstyring er ikke understøttet)';
+$lang['badauth'] = 'Ugyldig brugerbekræftelsesfunktion';
+$lang['user_id'] = 'Bruger';
+$lang['user_pass'] = 'Adgangskode';
+$lang['user_name'] = 'Navn';
+$lang['user_mail'] = 'E-mail';
+$lang['user_groups'] = 'Grupper';
+$lang['field'] = 'Felt';
+$lang['value'] = 'Værdi';
+$lang['add'] = 'Tilføj';
+$lang['delete'] = 'Slet';
+$lang['delete_selected'] = 'Slet valgte';
+$lang['edit'] = 'Rediger';
+$lang['edit_prompt'] = 'Rediger denne bruger';
+$lang['modify'] = 'Gem ændringer';
+$lang['search'] = 'Søg';
+$lang['search_prompt'] = 'Udfør søgning';
+$lang['clear'] = 'Nulstil søgefilter';
+$lang['filter'] = 'Filter';
+$lang['summary'] = 'Viser brugerne %1$d-%2$d ud af %3$d fundne. %4$d brugere totalt.';
+$lang['nonefound'] = 'Ingen brugere fundet. %d brugere totalt.';
+$lang['delete_ok'] = '%d brugere slettet';
+$lang['delete_fail'] = '%d kunne ikke slettes.';
+$lang['update_ok'] = 'Bruger opdateret korrekt';
+$lang['update_fail'] = 'Brugeropdatering mislykkedes';
+$lang['update_exists'] = 'Ændring af brugernavn mislykkedes, det valgte brugernavn (%s) er allerede optaget (andre ændringer vil blive udført).';
+$lang['start'] = 'begynde';
+$lang['prev'] = 'forrige';
+$lang['next'] = 'næste';
+$lang['last'] = 'sidste';
+$lang['edit_usermissing'] = 'Den valgte bruger blev ikke fundet. Brugernavnet kan være slettet eller ændret andetsteds.';
+$lang['user_notify'] = 'Meddel bruger';
+$lang['note_notify'] = 'Meddelelser bliver kun sendt, hvis brugeren får givet et nyt adgangskode.';
+$lang['note_group'] = 'Nye brugere vil blive tilføjet til standardgruppen (%s), hvis ingen gruppe er opgivet.';
+$lang['note_pass'] = 'Adgangskoden vil blive dannet automatisk, hvis feltet er tomt og underretning af brugeren er aktiveret.';
+$lang['add_ok'] = 'Bruger tilføjet uden fejl.';
+$lang['add_fail'] = 'Tilføjelse af bruger mislykkedes';
+$lang['notify_ok'] = 'Meddelelse sendt';
+$lang['notify_fail'] = 'Meddelelse kunne ikke sendes';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/list.txt
new file mode 100644
index 000000000..11d1710a0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/list.txt
@@ -0,0 +1 @@
+===== Brugerliste =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/add.txt
new file mode 100644
index 000000000..1fc34c968
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/add.txt
@@ -0,0 +1 @@
+===== Benutzer hinzufügen ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/delete.txt
new file mode 100644
index 000000000..778396aa0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/delete.txt
@@ -0,0 +1 @@
+===== Benutzer gelöscht ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/edit.txt
new file mode 100644
index 000000000..291b0f19d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/edit.txt
@@ -0,0 +1 @@
+===== Benutzer bearbeiten ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/intro.txt
new file mode 100644
index 000000000..a5927a89d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/intro.txt
@@ -0,0 +1 @@
+===== Benutzerverwaltung ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/lang.php
new file mode 100644
index 000000000..d9011468b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/lang.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * German (informal) language file
+ *
+ * @author Alexander Fischer <tbanus@os-forge.net>
+ * @author Juergen Schwarzer <jschwarzer@freenet.de>
+ */
+$lang['menu'] = 'Benutzerverwalter';
+$lang['noauth'] = '(Benutzeranmeldung ist nicht verfügbar)';
+$lang['nosupport'] = '(Benutzerverwaltung wird nicht unterstützt)';
+$lang['badauth'] = 'Ungültige Authentifizerung';
+$lang['user_id'] = 'Benutzer';
+$lang['user_pass'] = 'Passwort';
+$lang['user_name'] = 'Echter Name';
+$lang['user_mail'] = 'Email';
+$lang['user_groups'] = 'Gruppen';
+$lang['field'] = 'Feld';
+$lang['value'] = 'Wert';
+$lang['add'] = 'Zufügen';
+$lang['delete'] = 'Löschen';
+$lang['delete_selected'] = 'Lösche ausgewähltes';
+$lang['edit'] = 'Editieren';
+$lang['edit_prompt'] = 'Editiere den Benutzer';
+$lang['modify'] = 'Änderungen speichern';
+$lang['search'] = 'Suchen';
+$lang['search_prompt'] = 'Suche ausführen';
+$lang['clear'] = 'Suchfilter zurücksetzen';
+$lang['filter'] = 'Filter';
+$lang['summary'] = 'Zeige Benutzer %1$d-%2$d von %3$d gefundenen. %4$d Benutzer insgesamt.';
+$lang['nonefound'] = 'Keinen Benutzer gefunden. Insgesamt %d Benutzer.';
+$lang['delete_ok'] = '%d Benutzer wurden gelöscht';
+$lang['delete_fail'] = '%d konnte nicht gelöscht werden';
+$lang['update_ok'] = 'Benutzer wurde erfolgreich aktualisiert';
+$lang['update_fail'] = 'Aktualisierung des Benutzers ist fehlgeschlagen';
+$lang['update_exists'] = 'Benutzername konnte nicht geändert werden, der angegebene Benutzername (%s) existiert bereits (alle anderen Änderungen werden angewandt).';
+$lang['start'] = 'Start';
+$lang['prev'] = 'vorige';
+$lang['next'] = 'nächste';
+$lang['last'] = 'letzte';
+$lang['edit_usermissing'] = 'Der gewählte Benutzer wurde nicht gefunden. Der angegebene Benutzername könnte gelöscht oder an anderer Stelle geändert worden sein.';
+$lang['user_notify'] = 'Benutzer benachrichtigen';
+$lang['note_notify'] = 'Benachrichtigungsemails werden nur versandt, wenn der Benutzer ein neues Kennwort erhält.';
+$lang['note_group'] = 'Neue Benutzer werden zur Standardgruppe (%s) hinzugefügt, wenn keine Gruppe angegeben wird.';
+$lang['note_pass'] = 'Das Passwort wird automatisch erzeugt, wenn das Feld freigelassen wird und der Benutzer Benachrichtigungen aktiviert hat.';
+$lang['add_ok'] = 'Benutzer erfolgreich hinzugefügt';
+$lang['add_fail'] = 'Hinzufügen des Benutzers fehlgeschlagen';
+$lang['notify_ok'] = 'Benachrichtigungsemail wurde versendet';
+$lang['notify_fail'] = 'Benachrichtigungsemail konnte nicht gesendet werden';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/list.txt
new file mode 100644
index 000000000..0a62012e5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/list.txt
@@ -0,0 +1 @@
+===== Benutzerliste ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/add.txt
new file mode 100644
index 000000000..925fa5042
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/add.txt
@@ -0,0 +1 @@
+===== Benutzer hinzufügen =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/delete.txt
new file mode 100644
index 000000000..4f3bbbd03
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/delete.txt
@@ -0,0 +1 @@
+===== Benutzer löschen =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/edit.txt
new file mode 100644
index 000000000..9419200dd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/edit.txt
@@ -0,0 +1 @@
+===== Benutzer ändern =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/intro.txt
new file mode 100644
index 000000000..a5837b8c7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/intro.txt
@@ -0,0 +1 @@
+====== Benutzer-Manager ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/lang.php
new file mode 100644
index 000000000..913537f06
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/lang.php
@@ -0,0 +1,56 @@
+<?php
+/**
+ * German language file
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Michael Klier <chi@chimeric.de>
+ * @author Leo Moll <leo@yeasoft.com>
+ * @author Florian Anderiasch <fa@art-core.org>
+ * @author Robin Kluth <commi1993@gmail.com>
+ * @author Arne Pelka <mail@arnepelka.de>
+ * @author Dirk Einecke <dirk@dirkeinecke.de>
+ * @author Blitzi94@gmx.de
+ * @author Robert Bogenschneider <robog@GMX.de>
+ */
+$lang['menu'] = 'Benutzerverwaltung';
+$lang['noauth'] = '(Authentifizierungssystem nicht verfügbar)';
+$lang['nosupport'] = '(Benutzerverwaltung nicht unterstützt)';
+$lang['badauth'] = 'Ungültige Methode zur Authentifizierung';
+$lang['user_id'] = 'Benutzername';
+$lang['user_pass'] = 'Passwort';
+$lang['user_name'] = 'Voller Name';
+$lang['user_mail'] = 'E-Mail';
+$lang['user_groups'] = 'Gruppen';
+$lang['field'] = 'Feld';
+$lang['value'] = 'Wert';
+$lang['add'] = 'Hinzufügen';
+$lang['delete'] = 'Löschen';
+$lang['delete_selected'] = 'Ausgewählte löschen';
+$lang['edit'] = 'Ändern';
+$lang['edit_prompt'] = 'Benutzerdaten ändern';
+$lang['modify'] = 'Speichern';
+$lang['search'] = 'Suchen';
+$lang['search_prompt'] = 'Benutzerdaten filtern';
+$lang['clear'] = 'Filter zurücksetzen';
+$lang['filter'] = 'Filter';
+$lang['summary'] = 'Zeige Benutzer %1$d-%2$d von %3$d gefundenen. %4$d Benutzer insgesamt.';
+$lang['nonefound'] = 'Keine Benutzer gefunden. %d Benutzer insgesamt.';
+$lang['delete_ok'] = '%d Benutzer gelöscht';
+$lang['delete_fail'] = '%d konnten nicht gelöscht werden.';
+$lang['update_ok'] = 'Benutzerdaten erfolgreich geändert.';
+$lang['update_fail'] = 'Änderung der Benutzerdaten fehlgeschlagen.';
+$lang['update_exists'] = 'Nutzername konnte nicht geändert werden, weil der angegebene Nutzer (%s) bereits existiert (alle anderen Änderungen wurden durchgeführt).';
+$lang['start'] = 'Anfang';
+$lang['prev'] = 'Vorherige';
+$lang['next'] = 'Nächste';
+$lang['last'] = 'Ende';
+$lang['edit_usermissing'] = 'Der ausgewählte Nutzer wurde nicht gefunden. Möglicherweise wurde er gelöscht oder der Nutzer wurde anderswo geändert.';
+$lang['user_notify'] = 'Nutzer benachrichtigen';
+$lang['note_notify'] = 'Benachrichtigungs-E-Mails werden nur versandt, wenn ein neues Passwort vergeben wurde.';
+$lang['note_group'] = 'Neue Nutzer werden der Standard-Gruppe (%s) hinzugefügt, wenn keine Gruppe angegeben wurde.';
+$lang['note_pass'] = 'Das Password wird automatisch generiert, wenn das entsprechende Feld leergelassen wird und die Benachrichtigung des Nutzers aktiviert ist.';
+$lang['add_ok'] = 'Nutzer erfolgreich angelegt';
+$lang['add_fail'] = 'Nutzer konnte nicht angelegt werden';
+$lang['notify_ok'] = 'Benachrichtigungsmail wurde versandt';
+$lang['notify_fail'] = 'Benachrichtigungsmail konnte nicht versandt werden';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/list.txt
new file mode 100644
index 000000000..8d6d5fb46
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/list.txt
@@ -0,0 +1 @@
+===== Benutzerliste =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/add.txt
new file mode 100644
index 000000000..0616f8c53
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/add.txt
@@ -0,0 +1 @@
+===== ΠÏοσθήκη ΧÏήστη =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/delete.txt
new file mode 100644
index 000000000..baf9bc054
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/delete.txt
@@ -0,0 +1 @@
+===== ΔιαγÏαφή ΧÏήστη =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/edit.txt
new file mode 100644
index 000000000..dec59efd7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/edit.txt
@@ -0,0 +1 @@
+===== ΤÏοποποίηση ΧÏήστη =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/intro.txt
new file mode 100644
index 000000000..874c13b57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/intro.txt
@@ -0,0 +1 @@
+====== ΔιαχείÏιση ΧÏηστών ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/lang.php
new file mode 100644
index 000000000..3c5c9b902
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/lang.php
@@ -0,0 +1,53 @@
+<?php
+/**
+ * Greek language file
+ *
+ * Based on DokuWiki Version rc2007-05-24 english language file
+ * Original english language file contents included for reference
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ * @author Thanos Massias <tm@thriasio.gr>
+ * @author Αθανάσιος Îταής <homunculus@wana.gr>
+ * @author Konstantinos Koryllos <koryllos@gmail.com>
+ */
+$lang['menu'] = 'ΔιαχείÏιση ΧÏηστών';
+$lang['noauth'] = '(η είσοδος χÏηστών δεν είναι δυνατή)';
+$lang['nosupport'] = '(δεν υποστηÏίζεται η διαχείÏιση χÏηστών)';
+$lang['badauth'] = 'μη επιτÏεπτός μηχανισμός πιστοποίησης';
+$lang['user_id'] = 'ΧÏήστης';
+$lang['user_pass'] = 'Κωδικός';
+$lang['user_name'] = 'ΠλήÏες όνομα';
+$lang['user_mail'] = 'e-mail';
+$lang['user_groups'] = 'Ομάδες';
+$lang['field'] = 'Πεδίο';
+$lang['value'] = 'Τιμή';
+$lang['add'] = 'ΠÏοσθήκη';
+$lang['delete'] = 'ΔιαγÏαφή';
+$lang['delete_selected'] = 'ΔιαγÏαφή επιλεγμένων χÏηστών';
+$lang['edit'] = 'ΤÏοποποίηση';
+$lang['edit_prompt'] = 'ΤÏοποποίηση χÏήστη';
+$lang['modify'] = 'Αποθήκευση αλλαγών';
+$lang['search'] = 'Αναζήτηση';
+$lang['search_prompt'] = 'Εκκίνηση αναζήτησης';
+$lang['clear'] = 'ΚαθαÏισμός φίλτÏων';
+$lang['filter'] = 'ΦίλτÏο';
+$lang['summary'] = 'Εμφάνιση χÏηστών %1$d-%2$d από %3$d σχετικοÏÏ‚. %4$d χÏήστες συνολικά.';
+$lang['nonefound'] = 'Δεν βÏέθηκαν σχετικοί χÏήστες. %d χÏήστες συνολικά.';
+$lang['delete_ok'] = '%d χÏήστες διεγÏάφησαν';
+$lang['delete_fail'] = '%d χÏήστες δεν διεγÏάφησαν.';
+$lang['update_ok'] = 'Επιτυχημένη Ï„Ïοποποίηση Ï€Ïοφίλ χÏήστη';
+$lang['update_fail'] = 'Αποτυχημένη Ï„Ïοποποίηση Ï€Ïοφίλ χÏήστη';
+$lang['update_exists'] = 'Η αλλαγή ονόματος χÏήστη απέτυχε -- το νέο όνομα χÏήστη (%s) ήδη υπάÏχει (τυχόν άλλες αλλαγές θα εφαÏμοστοÏν).';
+$lang['start'] = 'αÏχή';
+$lang['prev'] = 'Ï€ÏοηγοÏμενα';
+$lang['next'] = 'επόμενα';
+$lang['last'] = 'τέλος';
+$lang['edit_usermissing'] = 'Ο επιλεγμένος χÏήστης δεν βÏέθηκε. Πιθανόν να διαγÏάφηκε στο μεταξÏ.';
+$lang['user_notify'] = 'Ειδοποίηση χÏήστη';
+$lang['note_notify'] = 'Τα ενημεÏωτικά e-mails στέλνονται μόνο όταν δίνεται νέος κωδικός στον χÏήστη.';
+$lang['note_group'] = 'Οι νέοι χÏήστες θα ανήκουν στην ομάδα (%s) αν δεν οÏιστεί άλλη ομάδα.';
+$lang['note_pass'] = 'Ο κωδικός θα δημιουÏγηθεί αυτόματα εάν το πεδίο μείνει κενό και έχει επιλεγεί η αποστολή ειδοποίησης χÏήστη.';
+$lang['add_ok'] = 'Επιτυχημένη εγγÏαφή χÏήστη';
+$lang['add_fail'] = 'Η εγγÏαφή του χÏήστη απέτυχε';
+$lang['notify_ok'] = 'Εστάλη ενημεÏωτικό e-mail';
+$lang['notify_fail'] = 'Δεν ήταν δυνατή η αποστολή του ενημεÏÏ‰Ï„Î¹ÎºÎ¿Ï e-mail';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/list.txt
new file mode 100644
index 000000000..adb5c210b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/list.txt
@@ -0,0 +1 @@
+===== Κατάλογος ΧÏηστών =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/add.txt
new file mode 100644
index 000000000..9afecb5cd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/add.txt
@@ -0,0 +1 @@
+===== Add user =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/delete.txt
new file mode 100644
index 000000000..c3ca90dbb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/delete.txt
@@ -0,0 +1 @@
+===== Delete user =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/edit.txt
new file mode 100644
index 000000000..4d02dfddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/edit.txt
@@ -0,0 +1 @@
+===== Edit user =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/intro.txt
new file mode 100644
index 000000000..73bf55613
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/intro.txt
@@ -0,0 +1 @@
+====== User Manager ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/lang.php
new file mode 100644
index 000000000..189a1db20
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/lang.php
@@ -0,0 +1,58 @@
+<?php
+/**
+ * English language file
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ */
+
+$lang['menu'] = 'User Manager';
+
+// custom language strings for the plugin
+$lang['noauth'] = '(user authentication not available)';
+$lang['nosupport'] = '(user management not supported)';
+
+$lang['badauth'] = 'invalid auth mechanism'; // should never be displayed!
+
+$lang['user_id'] = 'User';
+$lang['user_pass'] = 'Password';
+$lang['user_name'] = 'Real Name';
+$lang['user_mail'] = 'Email';
+$lang['user_groups'] = 'Groups';
+
+$lang['field'] = 'Field';
+$lang['value'] = 'Value';
+$lang['add'] = 'Add';
+$lang['delete'] = 'Delete';
+$lang['delete_selected'] = 'Delete Selected';
+$lang['edit'] = 'Edit';
+$lang['edit_prompt'] = 'Edit this user';
+$lang['modify'] = 'Save Changes';
+$lang['search'] = 'Search';
+$lang['search_prompt'] = 'Perform search';
+$lang['clear'] = 'Reset Search Filter';
+$lang['filter'] = 'Filter';
+
+$lang['summary'] = 'Displaying users %1$d-%2$d of %3$d found. %4$d users total.';
+$lang['nonefound'] = 'No users found. %d users total.';
+$lang['delete_ok'] = '%d users deleted';
+$lang['delete_fail'] = '%d failed deleting.';
+$lang['update_ok'] = 'User updated successfully';
+$lang['update_fail'] = 'User update failed';
+$lang['update_exists'] = 'User name change failed, the specified user name (%s) already exists (any other changes will be applied).';
+
+$lang['start'] = 'start';
+$lang['prev'] = 'previous';
+$lang['next'] = 'next';
+$lang['last'] = 'last';
+
+// added after 2006-03-09 release
+$lang['edit_usermissing'] = 'Selected user not found, the specified user name may have been deleted or changed elsewhere.';
+$lang['user_notify'] = 'Notify user';
+$lang['note_notify'] = 'Notification emails are only sent if the user is given a new password.';
+$lang['note_group'] = 'New users will be added to the default group (%s) if no group is specified.';
+$lang['note_pass'] = 'The password will be autogenerated if the field is left empty and notification of the user is enabled.';
+$lang['add_ok'] = 'User added successfully';
+$lang['add_fail'] = 'User addition failed';
+$lang['notify_ok'] = 'Notification email sent';
+$lang['notify_fail'] = 'Notification email could not be sent';
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/list.txt
new file mode 100644
index 000000000..54c45caf7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/list.txt
@@ -0,0 +1 @@
+===== User List =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/add.txt
new file mode 100644
index 000000000..8775ff85d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/add.txt
@@ -0,0 +1 @@
+===== Aldoni uzanton ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/delete.txt
new file mode 100644
index 000000000..0d94f8122
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/delete.txt
@@ -0,0 +1 @@
+===== Forigi uzanton ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/edit.txt
new file mode 100644
index 000000000..2ced16e7c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/edit.txt
@@ -0,0 +1 @@
+===== Modifi uzanton ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/intro.txt
new file mode 100644
index 000000000..2ef373f66
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/intro.txt
@@ -0,0 +1 @@
+====== Administrado de Uzantoj ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/lang.php
new file mode 100644
index 000000000..0eb99b862
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/lang.php
@@ -0,0 +1,54 @@
+<?php
+/**
+ * Esperantolanguage file
+ *
+ * @author Felipe Castro <fefcas@uol.com.br>
+ * @author Felipe Castro <fefcas@gmail.com>
+ * @author Felipe Castro <fefcas (cxe) gmail (punkto) com>
+ * @author Felipo Kastro <fefcas@gmail.com>
+ * @author Robert Bogenschneider <robog@gmx.de>
+ * @author Erik Pedersen <erik pedersen@shaw.ca>
+ * @author Erik Pedersen <erik.pedersen@shaw.ca>
+ * @author Robert Bogenschneider <robog@GMX.de>
+ */
+$lang['menu'] = 'Administrado de Uzantoj';
+$lang['noauth'] = '(identiÄo de uzantoj ne disponeblas)';
+$lang['nosupport'] = '(administro de uzantoj ne estas subtenata)';
+$lang['badauth'] = 'tiu identiÄa procezo ne validas';
+$lang['user_id'] = 'Uzanto';
+$lang['user_pass'] = 'Pasvorto';
+$lang['user_name'] = 'Vera nomo';
+$lang['user_mail'] = 'Retadreso';
+$lang['user_groups'] = 'Grupoj';
+$lang['field'] = 'Kampo';
+$lang['value'] = 'Valoro';
+$lang['add'] = 'Aldoni';
+$lang['delete'] = 'Forigi';
+$lang['delete_selected'] = 'Forigi elektitan';
+$lang['edit'] = 'Modifi';
+$lang['edit_prompt'] = 'Modifi tiun ĉi uzanton';
+$lang['modify'] = 'Registri modifojn';
+$lang['search'] = 'Serĉi';
+$lang['search_prompt'] = 'Fari serĉon';
+$lang['clear'] = 'Refari serĉan filtron';
+$lang['filter'] = 'Filtro';
+$lang['summary'] = 'MontriÄas uzantoj %1$d-%2$d el %3$d trovitaj. %4$d uzantoj entute.';
+$lang['nonefound'] = 'Neniu uzantoj troviÄas. %d uzantoj entute.';
+$lang['delete_ok'] = '%d uzantoj estis forigitaj';
+$lang['delete_fail'] = '%d malsukcesis esti forigitaj.';
+$lang['update_ok'] = 'Tiu uzanto estis sukcese Äisdatigita';
+$lang['update_fail'] = 'Malsukceso okazis por Äisdatigi tiun uzanton';
+$lang['update_exists'] = 'Malsukceso okazis por ÅanÄi la nomon de tiu uzanto: la enmetita nomo (%s) jam ekzistas (ĉiuj aliaj ÅanÄoj estos aplikitaj)';
+$lang['start'] = 'Ekigi';
+$lang['prev'] = 'antaÅ­e';
+$lang['next'] = 'sekve';
+$lang['last'] = 'laste';
+$lang['edit_usermissing'] = 'La elektita uzanto ne estis trovita: tiu nomo povis esti forigita aÅ­ ÅanÄita aliloke.';
+$lang['user_notify'] = 'Avizi uzanton';
+$lang['note_notify'] = 'Avizantaj mesaÄoj estos sendataj nur se la uzanto ekhavos novan pasvorton.';
+$lang['note_group'] = 'Novaj uzantoj estos aldonitaj al la komuna grupo (%s) se neniu alia estos specifita.';
+$lang['note_pass'] = 'La pasvorto estos aÅ­tomate kreita se la kampo estos lasita malplena kaj \'aviso al uzantoj\' estos ebligita.';
+$lang['add_ok'] = 'La uzanto estis sukcese aldonita';
+$lang['add_fail'] = 'Malsukceso okazis por aldoni uzulon';
+$lang['notify_ok'] = 'Avizanta mesaÄo estis sendita';
+$lang['notify_fail'] = 'La avizanta mesaÄo ne povis esti sendita';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/list.txt
new file mode 100644
index 000000000..714671afb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/list.txt
@@ -0,0 +1 @@
+===== Listo de Uzantoj ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/add.txt
new file mode 100644
index 000000000..90c56e31d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/add.txt
@@ -0,0 +1 @@
+===== Agregar un usuario =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/delete.txt
new file mode 100644
index 000000000..4c552a9c1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/delete.txt
@@ -0,0 +1 @@
+===== Eliminar un usuario =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/edit.txt
new file mode 100644
index 000000000..ccdd26f86
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/edit.txt
@@ -0,0 +1 @@
+===== Editar datos del usuario =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/intro.txt
new file mode 100644
index 000000000..e558d3a28
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/intro.txt
@@ -0,0 +1 @@
+====== Administración de usuarios ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/lang.php
new file mode 100644
index 000000000..c11ebcd93
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/lang.php
@@ -0,0 +1,60 @@
+<?php
+/**
+ * Spanish language file
+ *
+ * @author Miguel Pagano <miguel.pagano>
+ * @author Oscar M. Lage <r0sk10@gmail.com>
+ * @author Gabriel Castillo <gch@pumas.ii.unam.mx>
+ * @author oliver@samera.com.py
+ * @author Enrico Nicoletto <liverig@gmail.com>
+ * @author Manuel Meco <manuel.meco@gmail.com>
+ * @author VictorCastelan <victorcastelan@gmail.com>
+ * @author Jordan Mero hack.jord@gmail.com
+ * @author Felipe Martinez <metalmartinez@gmail.com>
+ * @author Javier Aranda <internet@javierav.com>
+ * @author Zerial <fernando@zerial.org>
+ * @author Marvin Ortega <maty1206@maryanlinux.com>
+ * @author Daniel Castro Alvarado <dancas2@gmail.com>
+ * @author Fernando J. Gómez <fjgomez@gmail.com>
+ */
+$lang['menu'] = 'Administración de usuarios';
+$lang['noauth'] = '(la autenticación de usuarios no está disponible)';
+$lang['nosupport'] = '(la administración de usuarios no está habilitada)';
+$lang['badauth'] = 'Mecanismo de autenticación inválido';
+$lang['user_id'] = 'Usuario';
+$lang['user_pass'] = 'Contraseña';
+$lang['user_name'] = 'Nombre';
+$lang['user_mail'] = 'Correo electrónico';
+$lang['user_groups'] = 'Grupos';
+$lang['field'] = 'Campo';
+$lang['value'] = 'Valor';
+$lang['add'] = 'Agregar';
+$lang['delete'] = 'Eliminar';
+$lang['delete_selected'] = 'Eliminar seleccionados';
+$lang['edit'] = 'Editar';
+$lang['edit_prompt'] = 'Editar datos de este usuario';
+$lang['modify'] = 'Guardar los cambios';
+$lang['search'] = 'Buscar';
+$lang['search_prompt'] = 'Realizar la búsqueda';
+$lang['clear'] = 'Limpiar los filtros de la búsqueda';
+$lang['filter'] = 'Filtrar';
+$lang['summary'] = 'Mostrando los usuarios %1$d-%2$d de %3$d encontrados. Cantidad total de usuarios %4$d.';
+$lang['nonefound'] = 'No se encontraron usuarios que coincidan con los párametros de la búsqueda. Cantidad total de usuarios %d.';
+$lang['delete_ok'] = '%d usuarios eliminados';
+$lang['delete_fail'] = '%d no se pudieron eliminar.';
+$lang['update_ok'] = 'Los datos del usuario se actualizaron exitosamente ';
+$lang['update_fail'] = 'Los datos del usuario no se actualizaron';
+$lang['update_exists'] = 'El cambio de nombre de usuario falló, el nombre especificado ($s) ya está en uso (los otros cambios se aplicaron).';
+$lang['start'] = 'primera';
+$lang['prev'] = 'anterior';
+$lang['next'] = 'siguiente';
+$lang['last'] = 'última';
+$lang['edit_usermissing'] = 'El usuario seleccionado no ha sido encontrado; el usuario especificado puede haber sido eliminado o cambiado en algún otro lugar.';
+$lang['user_notify'] = 'Notificar al usuario';
+$lang['note_notify'] = 'El correo electrónico de notificación sólo será enviado si se actualizo la contraseña del usuario.';
+$lang['note_group'] = 'Si no se especifica ningún grupo, los nuevos usuarios serán agregados al grupo por defecto (%s).';
+$lang['note_pass'] = 'Se generará una clave automáticamente si el campo izquierdo es vacío y se esta activo la notificación de usuario. ';
+$lang['add_ok'] = 'El usuario fue creado exitosamente';
+$lang['add_fail'] = 'Falló la creación del usuario';
+$lang['notify_ok'] = 'Se envió la notificación por correo electrónico';
+$lang['notify_fail'] = 'No se pudo enviar la notificación por correo electrónico';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/list.txt
new file mode 100644
index 000000000..d0d32b913
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/list.txt
@@ -0,0 +1 @@
+===== Lista de usuarios =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/add.txt
new file mode 100644
index 000000000..855c43218
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/add.txt
@@ -0,0 +1 @@
+===== Erabiltzailea gehitu ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/delete.txt
new file mode 100644
index 000000000..987b98f20
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/delete.txt
@@ -0,0 +1 @@
+===== Erabiltzailea ezabatu ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/edit.txt
new file mode 100644
index 000000000..82b92afe7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/edit.txt
@@ -0,0 +1 @@
+====== Editatu erabiltzailea ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/intro.txt
new file mode 100644
index 000000000..848b3da05
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/intro.txt
@@ -0,0 +1 @@
+====== Erabiltzaile Kudeatzailea ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/lang.php
new file mode 100644
index 000000000..b6e04f7c4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/lang.php
@@ -0,0 +1,47 @@
+<?php
+/**
+ * Basque language file
+ *
+ * @author Inko Illarramendi <inko.i.a@gmail.com>
+ */
+$lang['menu'] = 'Erabiltzaile Kudeatzailea';
+$lang['noauth'] = '(erabiltzaile kautotzea ez dago erabilgarri)';
+$lang['nosupport'] = '(erabiltzaile kudeaketa ez dago erabilgarri)';
+$lang['badauth'] = 'kautotze mekanismo baliogabea';
+$lang['user_id'] = 'Erabiltzailea';
+$lang['user_pass'] = 'Pasahitza';
+$lang['user_name'] = 'Benetako Izena';
+$lang['user_mail'] = 'Posta-e';
+$lang['user_groups'] = 'Taldeak';
+$lang['field'] = 'Eremu';
+$lang['value'] = 'Balioa';
+$lang['add'] = 'Gehitu';
+$lang['delete'] = 'Ezabatu';
+$lang['delete_selected'] = 'Ezabatu Hautatutakoak';
+$lang['edit'] = 'Editatu';
+$lang['edit_prompt'] = 'Editatu erabiltzaile hau';
+$lang['modify'] = 'Gorde Aldaketak';
+$lang['search'] = 'Bilatu';
+$lang['search_prompt'] = 'Egin bilaketa';
+$lang['clear'] = 'Berrasieratu Bilaketa Iragazkia';
+$lang['filter'] = 'Iragazi';
+$lang['summary'] = 'Erakusten diren erabiltzaileak %1$d-%2$d bilatutako %3$d erabiltzailetatik. %4$d erabiltzaile guztira.';
+$lang['nonefound'] = 'Ez da erabiltzailerik aurkitu. %d erabiltzaile guztira.';
+$lang['delete_ok'] = '%d erabiltzaile ezabatuak';
+$lang['delete_fail'] = '%d huts ezabatzean.';
+$lang['update_ok'] = 'Erabiltzailea arrakastaz eguneratuak';
+$lang['update_fail'] = 'Erabiltzaile eguneratzeak huts egin du ';
+$lang['update_exists'] = 'Erabiltzaile izen aldaketak huts egin du, zehaztutako erabiltzaile izena (%s) lehendik existitzen zen (beste edozein aldaketa ezarri egingo da).';
+$lang['start'] = 'hasi';
+$lang['prev'] = 'aurrekoa';
+$lang['next'] = 'hurrengoa';
+$lang['last'] = 'azkena';
+$lang['edit_usermissing'] = 'Aukeratutako erabiltzailea ez da aurkitu, zehaztutako erabiltzaile izena beste nonbait ezabatua edo aldatua izana gerta zitekeen.';
+$lang['user_notify'] = 'Erabiltzailea jakinarazi';
+$lang['note_notify'] = 'Jakinarazpen postak erabiltzaileari pasahitz berria ematen bazaio bakarrik bidaltzen dira.';
+$lang['note_group'] = 'Erabiltzaile berriak (%s) talde lehenetsira gehituko dira ez bada talderik zehazten.';
+$lang['note_pass'] = 'Pasahitza automatikoki sortuko da eremua hutsik uzten bada eta erabiltzailearen jakinarazpena gaitua badago.';
+$lang['add_ok'] = 'Erabiltzailea arrakastaz gehitua';
+$lang['add_fail'] = 'Erabiltzaile gehitzeak huts egin du';
+$lang['notify_ok'] = 'Jakinarazpen posta-e bidalia';
+$lang['notify_fail'] = 'Jakinarazpen posta-e ezin izan da bidali';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/list.txt
new file mode 100644
index 000000000..fb80b14be
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/list.txt
@@ -0,0 +1 @@
+====== Erabiltzaile zerrenda ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/add.txt
new file mode 100644
index 000000000..32d604e43
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/add.txt
@@ -0,0 +1 @@
+===== اÙزودن کاربر ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/delete.txt
new file mode 100644
index 000000000..f8a59ff10
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/delete.txt
@@ -0,0 +1 @@
+===== حذ٠کاربر ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/edit.txt
new file mode 100644
index 000000000..33fe5b517
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/edit.txt
@@ -0,0 +1 @@
+===== ویرایش کاربر ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/intro.txt
new file mode 100644
index 000000000..ffb850109
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/intro.txt
@@ -0,0 +1 @@
+===== مدیریت کاربران ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/lang.php
new file mode 100644
index 000000000..f9e973b9c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/lang.php
@@ -0,0 +1,51 @@
+<?php
+/**
+ * Persian language file
+ *
+ * @author behrad eslamifar <behrad_es@yahoo.com)
+ * @author Mohsen Firoozmandan <info@mambolearn.com>
+ * @author omidmr@gmail.com
+ * @author Omid Mottaghi <omidmr@gmail.com>
+ * @author Mohammad Reza Shoaei <shoaei@gmail.com>
+ */
+$lang['menu'] = 'مدیریت کاربر';
+$lang['noauth'] = '(معتبرسازی کاربر ممکن نیست)';
+$lang['nosupport'] = '(مدیریت کاربر پشتیبانی نمی‌شود)';
+$lang['badauth'] = 'روش معتبرسازی اشتباه است';
+$lang['user_id'] = 'کاربر';
+$lang['user_pass'] = 'گذرواژه';
+$lang['user_name'] = 'نام حقیقی';
+$lang['user_mail'] = 'ایمیل';
+$lang['user_groups'] = 'گروه‌ها';
+$lang['field'] = 'Ùیلد';
+$lang['value'] = 'ارزش';
+$lang['add'] = 'اضاÙÙ‡ کردن';
+$lang['delete'] = 'حذÙ';
+$lang['delete_selected'] = 'حذ٠انتخاب شده‌ها';
+$lang['edit'] = 'ویرایش';
+$lang['edit_prompt'] = 'ویرایش این کاربر';
+$lang['modify'] = 'ذخیره تغییرات';
+$lang['search'] = 'جستجو';
+$lang['search_prompt'] = 'انجام جستجو';
+$lang['clear'] = 'بازنویسی Ùیلترهای جستجو';
+$lang['filter'] = 'Ùیلتر';
+$lang['summary'] = 'نمایش کاربر %1$d-%2$d از %3$d. در کل %4$d کاربر.';
+$lang['nonefound'] = 'هیچ کاربری یاÙت نشد. در Ú©Ù„ %d کاربر.';
+$lang['delete_ok'] = '%d کاربر حذ٠شد';
+$lang['delete_fail'] = 'حذ٠%d کاربر با مشکل مواجه شد.';
+$lang['update_ok'] = 'کاربر با موÙقیت به روز رسانی شد.';
+$lang['update_fail'] = 'به روز رسانی کاربر با مشکل مواجه شد';
+$lang['update_exists'] = 'تغییر نام کاربری ممکن نیست، نام کاربری مورد نظر (%s) قبلن وجود داشته (مابقی تغییرات اعمال شده است)';
+$lang['start'] = 'شروع';
+$lang['prev'] = 'قبلی';
+$lang['next'] = 'بعدی';
+$lang['last'] = 'آخرین';
+$lang['edit_usermissing'] = 'کاربر انتخاب شده یاÙت نشد، نام کاربری مورد نظر در جایی دیگر حذ٠شده یا تغییر کرده.';
+$lang['user_notify'] = 'آگاه کردن کاربر';
+$lang['note_notify'] = 'ایمیلی برای آگاهی، Ùقط در زمان تغییر گذرواژه‌ ارسال می‌شود.';
+$lang['note_group'] = 'اگر گروهی انتخاب نشود، کاربران جدید به گروه پیش‌Ùرض (%s) اÙزوده خواهند شد.';
+$lang['note_pass'] = 'اگر Ùیلد گذرواژه خالی گذاشته شود، گذرواژه به طور خودکار تولید Ùˆ ایمیلی برای کاربر ارسال خواهد شد.';
+$lang['add_ok'] = 'کاربر با موÙقیت اÙزوده شد';
+$lang['add_fail'] = 'اÙزودن کاربر با مشکل مواجه شد';
+$lang['notify_ok'] = 'ایمیل آگاهی دهنده ارسال شد';
+$lang['notify_fail'] = 'ارسال ایمیل آگاهی دهنده با مشکل مواجه شد';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/list.txt
new file mode 100644
index 000000000..b539bf18a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/list.txt
@@ -0,0 +1 @@
+===== لیست کاربران ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/add.txt
new file mode 100644
index 000000000..5c4ee0a41
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/add.txt
@@ -0,0 +1 @@
+===== Lisää käyttäjä ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/delete.txt
new file mode 100644
index 000000000..2203a20f8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/delete.txt
@@ -0,0 +1 @@
+===== Poista käyttäjä ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/edit.txt
new file mode 100644
index 000000000..53e0b41ab
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/edit.txt
@@ -0,0 +1 @@
+===== Muokkaa käyttäjää ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/intro.txt
new file mode 100644
index 000000000..2ef0bb509
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/intro.txt
@@ -0,0 +1 @@
+====== Käyttäjähallinta ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/lang.php
new file mode 100644
index 000000000..6eeb4c3e8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/lang.php
@@ -0,0 +1,49 @@
+<?php
+/**
+ * Finnish language file
+ *
+ * @author otto@valjakko.net
+ * @author Otto Vainio <otto@valjakko.net>
+ * @author Teemu Mattila <ghcsystems@gmail.com>
+ */
+$lang['menu'] = 'Käyttäjähallinta';
+$lang['noauth'] = '(autentikointi ei ole käytössä)';
+$lang['nosupport'] = '(käyttäjähallinta ei ole tuettu)';
+$lang['badauth'] = 'Viallinen autentikointimenetelmä';
+$lang['user_id'] = 'Käyttäjä';
+$lang['user_pass'] = 'Salasana';
+$lang['user_name'] = 'Oikea nimi';
+$lang['user_mail'] = 'Sähköposti';
+$lang['user_groups'] = 'Ryhmät';
+$lang['field'] = 'Kenttä';
+$lang['value'] = 'Arvo';
+$lang['add'] = 'Lisää';
+$lang['delete'] = 'Poista';
+$lang['delete_selected'] = 'Poista valittu';
+$lang['edit'] = 'Muokkaa';
+$lang['edit_prompt'] = 'Muokkaa ryhmää';
+$lang['modify'] = 'Tallenna muutokset';
+$lang['search'] = 'Hae';
+$lang['search_prompt'] = 'Tee haku';
+$lang['clear'] = 'Tyhjennä hakusuodatin';
+$lang['filter'] = 'Suodatin';
+$lang['summary'] = 'Näytetään käyttäjät %1$d-%2$d / %3$d löytynyttä. %4$d käyttäjää yhteensä.';
+$lang['nonefound'] = 'Ei löytynyt käyttäjiä. %d käyttäjää yhteensä.';
+$lang['delete_ok'] = '%d käyttäjää poistettu';
+$lang['delete_fail'] = '%d poistoa epäonnistui';
+$lang['update_ok'] = 'Käyttäjän päivitys onnistui';
+$lang['update_fail'] = 'Käyttäjän päivitys epäonnistui';
+$lang['update_exists'] = 'Käyttäjän nimen vaihto epäonnistui. Nimi (%s) on jo olemassa (muut muutokset onnistuivat)';
+$lang['start'] = 'alku';
+$lang['prev'] = 'edellinen';
+$lang['next'] = 'seuraava';
+$lang['last'] = 'viimeinen';
+$lang['edit_usermissing'] = 'Valittua käyttäjää ei löytynyt. Käyttäjä on voitu päivittää tai poistaa muualta.';
+$lang['user_notify'] = 'Tiedota käyttäjälle';
+$lang['note_notify'] = 'Tiedotus lähetetään vain, jos käyttäjälle on määritelty uusi salasana.';
+$lang['note_group'] = 'Uudelle käyttäjälle määritellään oletusryhmä (%s), jos ryhmää ei erikseen määritellä.';
+$lang['note_pass'] = 'Salasana luodaan automaattisesti, mikäli kenttä jätetään tyhjäksi ja jos käyttäjän tiedotus on päällä.';
+$lang['add_ok'] = 'Käyttäjä lisätty onnistuneesti';
+$lang['add_fail'] = 'Käyttäjän lisäys epäonnistui';
+$lang['notify_ok'] = 'Ilmoitus sähköpostilla lähetetty';
+$lang['notify_fail'] = 'Ilmoitusta sähköpostilla ei voitu lähettää';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/list.txt
new file mode 100644
index 000000000..5ecf2ff7b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/list.txt
@@ -0,0 +1 @@
+===== Käyttäjälista ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/add.txt
new file mode 100644
index 000000000..e60b8b894
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/add.txt
@@ -0,0 +1 @@
+===== Ajouter un utilisateur =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/delete.txt
new file mode 100644
index 000000000..778f44192
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/delete.txt
@@ -0,0 +1 @@
+===== Supprimer un utilisateur =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/edit.txt
new file mode 100644
index 000000000..ec193eb5a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/edit.txt
@@ -0,0 +1 @@
+===== Modifier les informations d'un utilisateur =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/intro.txt
new file mode 100644
index 000000000..84987b0bf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/intro.txt
@@ -0,0 +1 @@
+====== Gestion des utilisateurs ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/lang.php
new file mode 100644
index 000000000..9229ee8e8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/lang.php
@@ -0,0 +1,55 @@
+<?php
+/**
+ * french language file
+ *
+ * @author Guy Brand <gb@isis.u-strasbg.fr>
+ * @author Delassaux Julien <julien@delassaux.fr>
+ * @author Maurice A. LeBlanc <leblancma@cooptel.qc.ca>
+ * @author gb@isis.u-strasbg.fr
+ * @author stephane.gully@gmail.com
+ * @author Guillaume Turri <guillaume.turri@gmail.com>
+ * @author Erik Pedersen <erik.pedersen@shaw.ca>
+ * @author olivier duperray <duperray.olivier@laposte.net>
+ * @author Vincent Feltz <psycho@feltzv.fr>
+ */
+$lang['menu'] = 'Gestion des utilisateurs';
+$lang['noauth'] = '(authentification utilisateur non disponible)';
+$lang['nosupport'] = '(gestion utilisateur non supportée)';
+$lang['badauth'] = 'mécanisme d\'authentification invalide';
+$lang['user_id'] = 'Identifiant ';
+$lang['user_pass'] = 'Mot de passe ';
+$lang['user_name'] = 'Nom ';
+$lang['user_mail'] = 'Courriel ';
+$lang['user_groups'] = 'Groupes ';
+$lang['field'] = 'Champ';
+$lang['value'] = 'Valeur';
+$lang['add'] = 'Ajouter';
+$lang['delete'] = 'Supprimer';
+$lang['delete_selected'] = 'Supprimer la sélection';
+$lang['edit'] = 'Éditer';
+$lang['edit_prompt'] = 'Éditer cet utilisateur';
+$lang['modify'] = 'Enregistrer les modifications';
+$lang['search'] = 'Rechercher';
+$lang['search_prompt'] = 'Effectuer la recherche';
+$lang['clear'] = 'Réinitialiser la recherche';
+$lang['filter'] = 'Filtre';
+$lang['summary'] = 'Affichage des utilisateurs %1$d-%2$d parmi %3$d trouvé(s). %4$d utilisateur(s) au total.';
+$lang['nonefound'] = 'Aucun utilisateur trouvé. %d utilisateur(s) au total.';
+$lang['delete_ok'] = '%d utilisateurs effacés';
+$lang['delete_fail'] = '%d effacement échoué.';
+$lang['update_ok'] = 'utilisateur mis à jour avec succès';
+$lang['update_fail'] = 'échec de la mise à jour utilisateur';
+$lang['update_exists'] = 'échec du changement de nom d\'utilisateur, le nom spécifié (%s) existe déjà (toutes les autres modifications seront effectuées).';
+$lang['start'] = 'Démarrage';
+$lang['prev'] = 'Précédent';
+$lang['next'] = 'Suivant';
+$lang['last'] = 'Dernier';
+$lang['edit_usermissing'] = 'Utilisateur sélectionné non trouvé, cet utilisateur a peut-être été supprimé ou modifié ailleurs.';
+$lang['user_notify'] = 'Notifier l\'utilisateur ';
+$lang['note_notify'] = 'Envoi de notification par courriel uniquement lorsqu\'un nouveau mot de passe est attribué à l\'utilisateur.';
+$lang['note_group'] = 'Les nouveaux utilisateurs seront ajoutés au groupe par défaut (%s) si aucun groupe n\'est spécifié.';
+$lang['note_pass'] = 'Le mot de passe sera généré automatiquement si le champ est laissé vide et si la notification de l\'utilisateur est activée.';
+$lang['add_ok'] = 'Utilisateur ajouté avec succès';
+$lang['add_fail'] = 'Échec de l\'ajout de l\'utilisateur';
+$lang['notify_ok'] = 'Courriel de notification expédié';
+$lang['notify_fail'] = 'Échec de l\'expédition du courriel de notification';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/list.txt
new file mode 100644
index 000000000..2d708fe43
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/list.txt
@@ -0,0 +1 @@
+===== Liste des utilisateurs =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/add.txt
new file mode 100644
index 000000000..cd1c487ff
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/add.txt
@@ -0,0 +1 @@
+===== Engadir unha persoa usuaria =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/delete.txt
new file mode 100644
index 000000000..f13133d6f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/delete.txt
@@ -0,0 +1 @@
+===== Eliminar unha persoa usuaria =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/edit.txt
new file mode 100644
index 000000000..d33f9c335
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/edit.txt
@@ -0,0 +1 @@
+===== Editar unha persoa usuaria =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/intro.txt
new file mode 100644
index 000000000..9b05a0c5e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/intro.txt
@@ -0,0 +1 @@
+====== Xestor de persoas usuarias ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/lang.php
new file mode 100644
index 000000000..b6909c100
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/lang.php
@@ -0,0 +1,49 @@
+<?php
+/**
+ * Galicianlanguage file
+ *
+ * @author CiberIrmandade da Fala <infoxeral@ciberirmandade.org>
+ * @author Tagen Ata <localizacion@tagenata.com>
+ * @author Leandro Regueiro <leandro.regueiro@gmail.com>
+ */
+$lang['menu'] = 'Xestor de persoas usuarias';
+$lang['noauth'] = '(a autenticación de persoas usuarias non está dispoñíbel)';
+$lang['nosupport'] = '(a xestión de persoas usuarias non está soportada)';
+$lang['badauth'] = 'o mecanismo de autenticación non é válido';
+$lang['user_id'] = 'Usuaria/o';
+$lang['user_pass'] = 'Contrasinal';
+$lang['user_name'] = 'Nome real';
+$lang['user_mail'] = 'Correo';
+$lang['user_groups'] = 'Grupos';
+$lang['field'] = 'Campo';
+$lang['value'] = 'Valor';
+$lang['add'] = 'Engadir';
+$lang['delete'] = 'Eliminar';
+$lang['delete_selected'] = 'Eliminar as seleccionadas';
+$lang['edit'] = 'Editar';
+$lang['edit_prompt'] = 'Editar esta persoa usuaria';
+$lang['modify'] = 'Gardar os cambios';
+$lang['search'] = 'Procurar';
+$lang['search_prompt'] = 'Facer unha procura';
+$lang['clear'] = 'Reiniciar o filtro de procura';
+$lang['filter'] = 'Filtro';
+$lang['summary'] = 'A mostrar as persoas usuarias %1$d-%2$d de %3$d encontradas. %4$d persoas usuarias en total.';
+$lang['nonefound'] = 'Non se encontraron persoas usuarias. %d persoas usuarias en total.';
+$lang['delete_ok'] = '%d persoas usuarias foron eliminadas';
+$lang['delete_fail'] = '%d non puideron ser eliminadas.';
+$lang['update_ok'] = 'A persoa usuaria foi actualizada correctamente';
+$lang['update_fail'] = 'Non se puido actualizar a persoa usuaria';
+$lang['update_exists'] = 'Non se puido mudar o nome da persoa usuaria; o nome especificado (%s) xa existe (o resto de cambios aplicaranse sen problemas).';
+$lang['start'] = 'comezo';
+$lang['prev'] = 'anterior';
+$lang['next'] = 'seguinte';
+$lang['last'] = 'última';
+$lang['edit_usermissing'] = 'Non se encontrou a persoa usuaria seleccionada; pode que o nome de usuaria/o teña sido eliminado ou alterado nalgún momento.';
+$lang['user_notify'] = 'Notificar á/ao usuaria/o';
+$lang['note_notify'] = 'Os correos de notificación envíanse só se a persoa usuaria obtén un contrasinal novo.';
+$lang['note_group'] = 'As persoas usuarias novas serán engadidas ao grupo predeterminado (%s) se non se especifica outro.';
+$lang['note_pass'] = 'Se deixa o campo baleiro e a notificación á/ao usuaria/o está activada, xerarase automaticamente o contrasinal.';
+$lang['add_ok'] = 'A persoa usuaria foi engadida correctamente';
+$lang['add_fail'] = 'Non se puido engadir a/o usuaria/o';
+$lang['notify_ok'] = 'O correo de notificación foi enviado';
+$lang['notify_fail'] = 'Non se puido enviar o correo de notificación';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/list.txt
new file mode 100644
index 000000000..792afd7d1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/list.txt
@@ -0,0 +1 @@
+===== Listaxe de persoas usuarias =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/add.txt
new file mode 100644
index 000000000..e2d1cb775
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/add.txt
@@ -0,0 +1 @@
+===== הוספת משתמש =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/delete.txt
new file mode 100644
index 000000000..42d738b1d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/delete.txt
@@ -0,0 +1 @@
+===== מחיקת משתמש =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/edit.txt
new file mode 100644
index 000000000..af90af359
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/edit.txt
@@ -0,0 +1 @@
+===== עריכת משתמש =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/intro.txt
new file mode 100644
index 000000000..232c5153b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/intro.txt
@@ -0,0 +1 @@
+====== מנהל ×ž×©×ª×ž×©×™× ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/lang.php
new file mode 100644
index 000000000..85f5274e8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/lang.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * hebrew language file
+ *
+ * @author DoK <kamberd@yahoo.com>
+ * @author Dotan Kamber <kamberd@yahoo.com>
+ * @author Moshe Kaplan <mokplan@gmail.com>
+ */
+$lang['menu'] = 'מנהל משתמשי×';
+$lang['noauth'] = '(×ימות ×ž×©×ª×ž×©×™× ×ינו זמין)';
+$lang['nosupport'] = '(ניהול ×ž×©×ª×ž×©×™× ×ינו נתמך)';
+$lang['badauth'] = 'מנגנון ×ימות ×œ× ×ª×§×£';
+$lang['user_id'] = '×©× ×ž×©×ª×ž×©';
+$lang['user_pass'] = 'סיסמה';
+$lang['user_name'] = '×©× ×מיתי';
+$lang['user_mail'] = 'דו×"ל';
+$lang['user_groups'] = 'קבוצות';
+$lang['field'] = 'שדה';
+$lang['value'] = 'ערך';
+$lang['add'] = 'הוספה';
+$lang['delete'] = 'מחיקה';
+$lang['delete_selected'] = 'מחיקת הבחירה';
+$lang['edit'] = 'עריכה';
+$lang['edit_prompt'] = 'עריכת משתמש זה';
+$lang['modify'] = 'שמירת שינוי×';
+$lang['search'] = 'חיפוש';
+$lang['search_prompt'] = 'בצע חיפוש';
+$lang['clear'] = '×תחל סינון חיפוש';
+$lang['filter'] = 'סינון';
+$lang['summary'] = 'מציג ×ž×©×ª×ž×©×™× %1$d-%2$d מתוך %3$d שנמצ×ו. %4$d בסך הכל.';
+$lang['nonefound'] = '×œ× × ×ž×¦×ו משתמשי×. סך כל ×”×ž×©×ª×ž×©×™× %d.';
+$lang['delete_ok'] = '%d ×ž×©×ª×ž×©×™× × ×ž×—×§×•';
+$lang['delete_fail'] = '%d כשל במחיקה.';
+$lang['update_ok'] = 'משתמש עודכן בהצלחה';
+$lang['update_fail'] = 'עידכון המשתמש כשל';
+$lang['update_exists'] = 'שינוי ×©× ×”×ž×©×ª×ž×© כשל, ×©× ×”×©×ž×ª×ž×© שצויין (%s) כבר × ×ž×¦× (כל ×”×©×™× ×•×™×™× ×”××—×¨×™× ×™×•×—×œ×•).';
+$lang['start'] = 'התחלה';
+$lang['prev'] = 'קוד×';
+$lang['next'] = 'הב×';
+$lang['last'] = 'סוף';
+$lang['edit_usermissing'] = 'המשתמש שנבחר ×œ× × ×ž×¦×, ייתכן ×›×™ ×©× ×”×ž×©×ª×ž×© שצויין נמחק ×ו השתנה ×‘×ž×§×•× ×חר.';
+$lang['user_notify'] = 'הודע למשתמש';
+$lang['note_notify'] = 'הודעות בדו×"ל נשלחות רק במקרה שהמשתמש מקבל סיסמה חדשה.';
+$lang['note_group'] = '×ž×©×ª×ž×©×™× ×—×“×©×™× ×™×•×¡×¤×• לקבוצת ברירת המחדל (%s) ×× ×œ× ×¦×•×™× ×” קבוצה ×חרת.';
+$lang['add_ok'] = 'משתמש הוסף בהצלחה';
+$lang['add_fail'] = 'הוספת המשתמש כשלה';
+$lang['notify_ok'] = 'הודעה נשלחה';
+$lang['notify_fail'] = '×œ× × ×™×ª×Ÿ ×”×™×” לשלוח הודעה';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/list.txt
new file mode 100644
index 000000000..9308fbebb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/list.txt
@@ -0,0 +1 @@
+===== רשימת ×ž×©×ª×ž×©×™× =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hi/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hi/lang.php
new file mode 100644
index 000000000..d8630a281
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hi/lang.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * Hindi language file
+ *
+ * @author Abhinav Tyagi <abhinavtyagi11@gmail.com>
+ */
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hr/lang.php
new file mode 100644
index 000000000..d2094b77b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hr/lang.php
@@ -0,0 +1,7 @@
+<?php
+/**
+ * Croatian language file
+ *
+ * @author Branko Rihtman <theney@gmail.com>
+ * @author Dražen Odobašić <dodobasic@gmail.com>
+ */
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/add.txt
new file mode 100644
index 000000000..70a44c41d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/add.txt
@@ -0,0 +1,2 @@
+===== Felhasználó hozzáadása =====
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/delete.txt
new file mode 100644
index 000000000..963d2e7b3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/delete.txt
@@ -0,0 +1,2 @@
+===== Felhasználó törlése =====
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/edit.txt
new file mode 100644
index 000000000..f82746094
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/edit.txt
@@ -0,0 +1,2 @@
+===== Felhasználó szerkesztése =====
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/intro.txt
new file mode 100644
index 000000000..150aff848
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/intro.txt
@@ -0,0 +1,2 @@
+====== Felhasználók kezelése ======
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/lang.php
new file mode 100644
index 000000000..b9f35cfc7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/lang.php
@@ -0,0 +1,49 @@
+<?php
+/**
+ * Hungarian language file
+ *
+ * @author Sandor TIHANYI <stihanyi+dw@gmail.com>
+ * @author Siaynoq Mage <siaynoqmage@gmail.com>
+ * @author schilling.janos@gmail.com
+ */
+$lang['menu'] = 'Felhasználók kezelése';
+$lang['noauth'] = '(A felhasználói azonosítás nem működik.)';
+$lang['nosupport'] = '(A felhasználók kezelése nem támogatott.)';
+$lang['badauth'] = 'nem érvényes autentikációs technika';
+$lang['user_id'] = 'Felhasználó azonosító';
+$lang['user_pass'] = 'Jelszó';
+$lang['user_name'] = 'Név';
+$lang['user_mail'] = 'E-mail';
+$lang['user_groups'] = 'Csoportok';
+$lang['field'] = 'Mező';
+$lang['value'] = 'Érték';
+$lang['add'] = 'Hozzáadás';
+$lang['delete'] = 'Törlés';
+$lang['delete_selected'] = 'Kiválasztottak törlése';
+$lang['edit'] = 'Szerkesztés';
+$lang['edit_prompt'] = 'A felhasználó szerkesztése';
+$lang['modify'] = 'Változások mentése';
+$lang['search'] = 'Keresés';
+$lang['search_prompt'] = 'Keresés';
+$lang['clear'] = 'Keresési szűrés törlése';
+$lang['filter'] = 'Szűrés';
+$lang['summary'] = '%1$d-%2$d. felhasználókat mutatom a(z) %3$d megtalált felhasználóból. %4$d felhasználó van összesen.';
+$lang['nonefound'] = 'Nem találtam ilyen felhasználót. %d felhasználó van összesen.';
+$lang['delete_ok'] = '%d felhasználó törölve.';
+$lang['delete_fail'] = '%d felhasználót nem sikerült törölni.';
+$lang['update_ok'] = 'A felhasználó adatait sikeresen elmentettem.';
+$lang['update_fail'] = 'A felhasználó adatainak mentése nem sikerült.';
+$lang['update_exists'] = 'A felhasználói azonosító változtatása nem sikerült, a megadott azonosító (%s) már létezik. (A többi változtatás mentve.)';
+$lang['start'] = 'első';
+$lang['prev'] = 'előző';
+$lang['next'] = 'következő';
+$lang['last'] = 'utolsó';
+$lang['edit_usermissing'] = 'A kiválasztott felhasználót nem találom, a felhasználói nevét törölték vagy megváltoztatták.';
+$lang['user_notify'] = 'Felhasználó értesítése';
+$lang['note_notify'] = 'Csak akkor küld értesítő e-mailt, ha a felhasználó új jelszót kapott.';
+$lang['note_group'] = 'Ha nincs csoport meghatározva, az új felhasználó az alapértelmezett csoportba (%s) kerül.';
+$lang['note_pass'] = 'Ha a baloldali mező üres, és a felhasználó értesítés aktív, akkor generált jelszó lesz.';
+$lang['add_ok'] = 'A felhasználó sikeresen hozzáadva.';
+$lang['add_fail'] = 'A felhasználó hozzáadása nem sikerült.';
+$lang['notify_ok'] = 'Értesítő levél elküldve.';
+$lang['notify_fail'] = 'Nem sikerült az értesítő levelet elküldeni.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/list.txt
new file mode 100644
index 000000000..9da7320c6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/list.txt
@@ -0,0 +1,2 @@
+===== Felhasználók listája =====
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id-ni/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id-ni/lang.php
new file mode 100644
index 000000000..d367340b7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id-ni/lang.php
@@ -0,0 +1,7 @@
+<?php
+/**
+ * idni language file
+ *
+ * @author Harefa <fidelis@harefa.com>
+ * @author Yustinus Waruwu <juswaruwu@gmail.com>
+ */
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/add.txt
new file mode 100644
index 000000000..eae407c04
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/add.txt
@@ -0,0 +1 @@
+===== Tambah User ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/delete.txt
new file mode 100644
index 000000000..99e53c9ef
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/delete.txt
@@ -0,0 +1 @@
+===== Hapus User ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/edit.txt
new file mode 100644
index 000000000..6d14f4fde
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/edit.txt
@@ -0,0 +1 @@
+===== Edit User ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/intro.txt
new file mode 100644
index 000000000..de053f2ae
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/intro.txt
@@ -0,0 +1 @@
+===== Manajemen User ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/lang.php
new file mode 100644
index 000000000..457ad4963
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/lang.php
@@ -0,0 +1,47 @@
+<?php
+/**
+ * Indonesian language file
+ *
+ * @author Irwan Butar Butar <irwansah.putra@gmail.com>
+ * @author Yustinus Waruwu <juswaruwu@gmail.com>
+ */
+$lang['menu'] = 'Manajemen User';
+$lang['noauth'] = '(autentikasi tidak tersedia)';
+$lang['nosupport'] = '(manajemen user tidak didukung)';
+$lang['badauth'] = 'mekanisme autentikasi invali';
+$lang['user_id'] = 'User';
+$lang['user_pass'] = 'Password';
+$lang['user_name'] = 'Nama Lengkap';
+$lang['user_mail'] = 'Email';
+$lang['user_groups'] = 'Grup';
+$lang['field'] = 'Field';
+$lang['value'] = 'Nilai';
+$lang['add'] = 'Tambah';
+$lang['delete'] = 'Hapus';
+$lang['delete_selected'] = 'Hapus pilihan';
+$lang['edit'] = 'Edit';
+$lang['edit_prompt'] = 'Edit user ini';
+$lang['modify'] = 'Simpan Perubahan';
+$lang['search'] = 'Pencarian';
+$lang['search_prompt'] = 'Lakukan pencarian';
+$lang['clear'] = 'Reset Filter Pencarian';
+$lang['filter'] = 'Filter';
+$lang['summary'] = 'Menampilkan user %1$d-%2$d dari %3$d user yang ditemukan. Total semua user %4$d.';
+$lang['nonefound'] = 'User tidak ditemukan. Total semua user %d. ';
+$lang['delete_ok'] = 'User %d dihapus';
+$lang['delete_fail'] = 'User %d tidak berhasil dihapus';
+$lang['update_ok'] = 'User berhasil diubah';
+$lang['update_fail'] = 'Perubahan user tidak berhasil';
+$lang['update_exists'] = 'Perubahan username tidak berhasil, Username (%s) sudah ada (perubahan lain tetap dilakukan)';
+$lang['start'] = 'awal';
+$lang['prev'] = 'sebelumnya';
+$lang['next'] = 'berikutnya';
+$lang['last'] = 'terakhir';
+$lang['edit_usermissing'] = 'User yang dipilih tida ditemukan, username tersebut mungkin sudah dihapus atau diubah ditempat lain.';
+$lang['user_notify'] = 'Beritahu user';
+$lang['note_notify'] = 'Email notifikasi hanya dikirim jika user diberikan password baru';
+$lang['note_group'] = 'User baru akan ditambahkan ke grup default (%s) jika tidak ada grup yang diisi.';
+$lang['add_ok'] = 'User telah berhasil ditambahkan';
+$lang['add_fail'] = 'Penambahan user tidak berhasil.';
+$lang['notify_ok'] = 'Email notifikasi berhasil terkirim.';
+$lang['notify_fail'] = 'Email notifikasi tidak berhasil terkirim.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/list.txt
new file mode 100644
index 000000000..9b70bc157
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/list.txt
@@ -0,0 +1 @@
+===== Daftar User ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/is/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/is/delete.txt
new file mode 100644
index 000000000..564006584
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/is/delete.txt
@@ -0,0 +1 @@
+===== Eyða notanda ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/is/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/is/lang.php
new file mode 100644
index 000000000..cabf83d64
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/is/lang.php
@@ -0,0 +1,18 @@
+<?php
+/**
+ * Icelandic language file
+ *
+ * @author Hrannar Baldursson <hrannar.baldursson@gmail.com>
+ * @author Ólafur Gunnlaugsson <oli@audiotools.com>
+ * @author Erik Bjørn Pedersen <erik.pedersen@shaw.ca>
+ */
+$lang['user_id'] = 'Notandi';
+$lang['user_pass'] = 'Aðgangsorð';
+$lang['user_name'] = 'Raunnafn';
+$lang['user_groups'] = 'Hópar';
+$lang['field'] = 'Svæði';
+$lang['delete'] = 'Eyða';
+$lang['add_ok'] = 'Notandinn var bætt við';
+$lang['add_fail'] = 'Bæta við nýjum notanda mistókst';
+$lang['notify_ok'] = 'Tilkynning var sendast með tölvupósti';
+$lang['notify_fail'] = 'Ekki hægt að senda tilkynning með tölvupósti';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/add.txt
new file mode 100644
index 000000000..9ce4c6e38
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/add.txt
@@ -0,0 +1 @@
+===== Aggiungi utente =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/delete.txt
new file mode 100644
index 000000000..fc36212af
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/delete.txt
@@ -0,0 +1 @@
+===== Cancella utente =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/edit.txt
new file mode 100644
index 000000000..39767bfdc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/edit.txt
@@ -0,0 +1 @@
+===== Modifica utente =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/intro.txt
new file mode 100644
index 000000000..3421709d6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/intro.txt
@@ -0,0 +1 @@
+====== Gestione Utenti ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/lang.php
new file mode 100644
index 000000000..67b17e9ec
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/lang.php
@@ -0,0 +1,54 @@
+<?php
+/**
+ * Italian language file
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ * @author Silvia Sargentoni <polinnia@tin.it>
+ * @author Pietro Battiston toobaz@email.it
+ * @author Diego Pierotto ita.translations@tiscali.it
+ * @author ita.translations@tiscali.it
+ * @author Lorenzo Breda <lbreda@gmail.com>
+ * @author snarchio@alice.it
+ * @author robocap <robocap1@gmail.com>
+ */
+$lang['menu'] = 'Gestione Utenti';
+$lang['noauth'] = '(autenticazione non disponibile)';
+$lang['nosupport'] = '(gestione utenti non supportata)';
+$lang['badauth'] = 'sistema di autenticazione non valido';
+$lang['user_id'] = 'User ID';
+$lang['user_pass'] = 'Password';
+$lang['user_name'] = 'Nome completo';
+$lang['user_mail'] = 'E-mail';
+$lang['user_groups'] = 'Gruppi';
+$lang['field'] = 'Campo';
+$lang['value'] = 'Valore';
+$lang['add'] = 'Aggiungi';
+$lang['delete'] = 'Cancella';
+$lang['delete_selected'] = 'Cancella selezionati';
+$lang['edit'] = 'Modifica';
+$lang['edit_prompt'] = 'Modifica questo utente';
+$lang['modify'] = 'Salva modifiche';
+$lang['search'] = 'Cerca';
+$lang['search_prompt'] = 'Esegui ricerca';
+$lang['clear'] = 'Azzera filtro di ricerca';
+$lang['filter'] = 'Filtro';
+$lang['summary'] = 'Visualizzazione utenti %1$d-%2$d di %3$d trovati. %4$d utenti totali.';
+$lang['nonefound'] = 'Nessun utente trovato. %d utenti totali.';
+$lang['delete_ok'] = '%d utenti cancellati';
+$lang['delete_fail'] = 'Cancellazione %d fallita.';
+$lang['update_ok'] = 'Aggiornamento utente riuscito';
+$lang['update_fail'] = 'Aggiornamento utente fallito';
+$lang['update_exists'] = 'Modifica nome utente fallita, il nome utente specificato (%s) esiste già (qualunque altra modifica sarà applicata).';
+$lang['start'] = 'primo';
+$lang['prev'] = 'precedente';
+$lang['next'] = 'successivo';
+$lang['last'] = 'ultimo';
+$lang['edit_usermissing'] = 'Utente selezionato non trovato, il nome utente specificato potrebbe essere stato cancellato o modificato altrove.';
+$lang['user_notify'] = 'Notifica utente';
+$lang['note_notify'] = 'Le email di notifica sono inviate soltanto se all\'utente è stata assegnata una nuova password.';
+$lang['note_group'] = 'Se non si specifica alcun gruppo, i nuovi utenti saranno aggiunti al gruppo di default (%s).';
+$lang['note_pass'] = 'La password verrà generata automaticamente qualora il campo di inserimento relatvivo venisse lasciato vuoto e le notifiche all\'utente fossero abilitate.';
+$lang['add_ok'] = 'Utente aggiunto correttamente';
+$lang['add_fail'] = 'Aggiunta utente fallita';
+$lang['notify_ok'] = 'Email di notifica inviata';
+$lang['notify_fail'] = 'L\'email di notifica non può essere inviata';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/list.txt
new file mode 100644
index 000000000..91e27a9de
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/list.txt
@@ -0,0 +1 @@
+===== Elenco Utenti =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/add.txt
new file mode 100644
index 000000000..87b30e0a0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/add.txt
@@ -0,0 +1 @@
+===== ãƒ¦ãƒ¼ã‚¶ãƒ¼ä½œæˆ =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/delete.txt
new file mode 100644
index 000000000..67ef23e23
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/delete.txt
@@ -0,0 +1 @@
+===== ユーザー削除 =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/edit.txt
new file mode 100644
index 000000000..e7695e307
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/edit.txt
@@ -0,0 +1 @@
+===== ユーザー編集 =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/intro.txt
new file mode 100644
index 000000000..5dbe51c8c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/intro.txt
@@ -0,0 +1 @@
+====== ãƒ¦ãƒ¼ã‚¶ãƒ¼ç®¡ç† ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/lang.php
new file mode 100644
index 000000000..321bbafe8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/lang.php
@@ -0,0 +1,50 @@
+<?php
+/**
+ * japanese language file
+ * @author Yuji Takenaka <webmaster@davilin.com>
+ * @author Chris Smith <chris@jalakai.co.uk>
+ * @author Ikuo Obataya <i.obataya@gmail.com>
+ * @author Daniel Dupriest <kououken@gmail.com>
+ * @author Kazutaka Miyasaka <kazmiya@gmail.com>
+ */
+$lang['menu'] = 'ユーザー管ç†';
+$lang['noauth'] = '(ユーザーèªè¨¼ãŒç„¡åŠ¹ã§ã™ï¼‰';
+$lang['nosupport'] = '(ユーザー管ç†ã¯ã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã¾ã›ã‚“)';
+$lang['badauth'] = 'èªè¨¼ã®ãƒ¡ã‚«ãƒ‹ã‚ºãƒ ãŒç„¡åŠ¹ã§ã™';
+$lang['user_id'] = 'ユーザー';
+$lang['user_pass'] = 'パスワード';
+$lang['user_name'] = 'æ°å';
+$lang['user_mail'] = 'メールアドレス';
+$lang['user_groups'] = 'グループ';
+$lang['field'] = 'é …ç›®';
+$lang['value'] = '値';
+$lang['add'] = '追加';
+$lang['delete'] = '削除';
+$lang['delete_selected'] = 'é¸æŠžã—ãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’削除';
+$lang['edit'] = '編集';
+$lang['edit_prompt'] = 'ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’編集';
+$lang['modify'] = '変更をä¿å­˜';
+$lang['search'] = '検索';
+$lang['search_prompt'] = '検索を実行';
+$lang['clear'] = '検索フィルターをリセット';
+$lang['filter'] = 'フィルター';
+$lang['summary'] = 'ユーザー %1$d-%2$d / %3$d, ç·ãƒ¦ãƒ¼ã‚¶ãƒ¼æ•° %4$d';
+$lang['nonefound'] = 'ユーザーãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“, ç·ãƒ¦ãƒ¼ã‚¶ãƒ¼æ•° %d';
+$lang['delete_ok'] = '%d ユーザーãŒå‰Šé™¤ã•ã‚Œã¾ã—ãŸ';
+$lang['delete_fail'] = '%d ユーザーã®å‰Šé™¤ã«å¤±æ•—ã—ã¾ã—ãŸ';
+$lang['update_ok'] = 'ユーザーã¯æ›´æ–°ã•ã‚Œã¾ã—ãŸ';
+$lang['update_fail'] = 'ユーザーã®æ›´æ–°ã«å¤±æ•—ã—ã¾ã—ãŸ';
+$lang['update_exists'] = 'ユーザーå(%s)ã¯æ—¢ã«å­˜åœ¨ã™ã‚‹ãŸã‚ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼åã®å¤‰æ›´ã«å¤±æ•—ã—ã¾ã—ãŸï¼ˆãã®ä»–ã®é …ç›®ã¯å¤‰æ›´ã•ã‚Œã¾ã—ãŸï¼‰ã€‚';
+$lang['start'] = '最åˆ';
+$lang['prev'] = 'å‰ã¸';
+$lang['next'] = '次ã¸';
+$lang['last'] = '最後';
+$lang['edit_usermissing'] = 'é¸æŠžã—ãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。削除もã—ãã¯å¤‰æ›´ã•ã‚ŒãŸå¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚';
+$lang['user_notify'] = '通知ã™ã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼';
+$lang['note_notify'] = 'ユーザーãŒæ–°ã—ã„パスワードを設定ã—ãŸå ´åˆã®ã¿ã€é€šçŸ¥ãƒ¡ãƒ¼ãƒ«ãŒé€ä¿¡ã•ã‚Œã¾ã™ã€‚';
+$lang['note_group'] = 'グループを指定ã—ãªã„å ´åˆã¯ã€æ—¢å®šã®ã‚°ãƒ«ãƒ¼ãƒ—(%s)ã«ç™»éŒ²ã•ã‚Œã„ã¾ã™ã€‚';
+$lang['note_pass'] = 'パスワードを空欄ã¨ã—ãŸå ´åˆã¯ã€ãƒ‘スワードを自動的ã«ç”Ÿæˆã—ã¾ã™ã€‚ã“ã®å ´åˆã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¸ã®é€šçŸ¥ãŒæœ‰åŠ¹ã¨ãªã‚Šã¾ã™ã€‚';
+$lang['add_ok'] = 'ユーザーを登録ã—ã¾ã—ãŸ';
+$lang['add_fail'] = 'ユーザーã®ç™»éŒ²ã«å¤±æ•—ã—ã¾ã—ãŸ';
+$lang['notify_ok'] = '通知メールをé€ä¿¡ã—ã¾ã—ãŸ';
+$lang['notify_fail'] = '通知メールをé€ä¿¡ã§ãã¾ã›ã‚“ã§ã—ãŸ';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/list.txt
new file mode 100644
index 000000000..182cc198c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/list.txt
@@ -0,0 +1 @@
+===== ユーザーリスト =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/add.txt
new file mode 100644
index 000000000..578ba5636
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/add.txt
@@ -0,0 +1 @@
+===== ì‚¬ìš©ìž ì¶”ê°€ =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/delete.txt
new file mode 100644
index 000000000..1e9c0ba73
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/delete.txt
@@ -0,0 +1 @@
+===== ì‚¬ìš©ìž ì‚­ì œ =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/edit.txt
new file mode 100644
index 000000000..b8b13c5c8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/edit.txt
@@ -0,0 +1 @@
+===== ì‚¬ìš©ìž ì •ë³´ 수정 =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/intro.txt
new file mode 100644
index 000000000..8c8bfa5b9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/intro.txt
@@ -0,0 +1 @@
+====== ì‚¬ìš©ìž ê´€ë¦¬ ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/lang.php
new file mode 100644
index 000000000..eeb8eb791
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/lang.php
@@ -0,0 +1,50 @@
+<?php
+/**
+ * korean language file
+ *
+ * @author jk Lee
+ * @author dongnak@gmail.com
+ * @author Song Younghwan <purluno@gmail.com>
+ * @author SONG Younghwan <purluno@gmail.com>
+ */
+$lang['menu'] = 'ì‚¬ìš©ìž ê´€ë¦¬ìž';
+$lang['noauth'] = '(ì‚¬ìš©ìž ì¸ì¦ì´ 불가능합니다.)';
+$lang['nosupport'] = '(ì‚¬ìš©ìž ê´€ë¦¬ê°€ 지ì›ë˜ì§€ 않습니다.)';
+$lang['badauth'] = '유효하지 ì•Šì€ ì¸ì¦ 메카니즘입니다.';
+$lang['user_id'] = '사용ìž';
+$lang['user_pass'] = '패스워드';
+$lang['user_name'] = '실제 ì´ë¦„';
+$lang['user_mail'] = 'ì´ë©”ì¼ ';
+$lang['user_groups'] = '그룹들';
+$lang['field'] = '항목';
+$lang['value'] = 'ê°’';
+$lang['add'] = '추가';
+$lang['delete'] = '삭제';
+$lang['delete_selected'] = 'ì‚­ì œ ì„ íƒ';
+$lang['edit'] = '수정';
+$lang['edit_prompt'] = 'ì´ ì‚¬ìš©ìž ìˆ˜ì •';
+$lang['modify'] = '변경 저장';
+$lang['search'] = '검색';
+$lang['search_prompt'] = '검색 실행';
+$lang['clear'] = '검색 필터 초기화';
+$lang['filter'] = 'í•„í„°';
+$lang['summary'] = 'ê²€ìƒ‰ëœ ì‚¬ìš©ìžë“¤ 보기(%1$d-%2$d 중 %3$d). ì „ì²´ ì‚¬ìš©ìž %4$d 명.';
+$lang['nonefound'] = 'ê²€ìƒ‰ëœ ì‚¬ìš©ìžê°€ 없습니다. ì „ì²´ ì‚¬ìš©ìž %d 명.';
+$lang['delete_ok'] = '%d ëª…ì˜ ì‚¬ìš©ìžê°€ ì‚­ì œë˜ì—ˆìŠµë‹ˆë‹¤.';
+$lang['delete_fail'] = '%d ëª…ì˜ ì‚¬ìš©ìžì˜ 삭제가 실패했습니다.';
+$lang['update_ok'] = 'ì‚¬ìš©ìž ê°±ì‹ ì´ ì„±ê³µí–ˆìŠµë‹ˆë‹¤.';
+$lang['update_fail'] = 'ì‚¬ìš©ìž ê°±ì‹ ì´ ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤.';
+$lang['update_exists'] = 'ì‚¬ìš©ìž ì´ë¦„ ë³€ê²½ì´ ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤. ì‚¬ìš©ìž ì´ë¦„(%s)ì´ ì´ë¯¸ 존재합니다. (다른 í•­ëª©ë“¤ì˜ ë³€ê²½ì€ ì ìš©ë©ë‹ˆë‹¤.)';
+$lang['start'] = '시작';
+$lang['prev'] = 'ì´ì „';
+$lang['next'] = '다ìŒ';
+$lang['last'] = '마지막';
+$lang['edit_usermissing'] = 'ì„ íƒëœ 사용ìžë¥¼ ì°¾ì„ ìˆ˜ 없습니다, ì‚¬ìš©ìž ì´ë¦„ì´ ì‚­ì œë˜ê±°ë‚˜ 변경ëì„ ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤.';
+$lang['user_notify'] = '사용ìžì—게 알림';
+$lang['note_notify'] = '사용ìžì—게 새로운 암호를 준 경우ì—만 알림 ì´ë©”ì¼ì´ 보내집니다.';
+$lang['note_group'] = '새로운 사용ìžë“¤ì€ ì–´ë–¤ ê·¸ë£¹ë„ ì„¤ì •í•˜ì§€ ì•Šì€ ê²½ìš°ì— ê¸°ë³¸ 그룹(%s)ì— ì¶”ê°€ë©ë‹ˆë‹¤.';
+$lang['note_pass'] = 'ì‚¬ìš©ìž í†µì§€ê°€ 지정ë˜ì–´ 있ì„ë•Œ, í•„ë“œì— ì•„ë¬´ê°’ë„ ìž…ë ¥í•˜ì§€ 않으면 암호가 ìžë™ ìƒì„± ë©ë‹ˆë‹¤.';
+$lang['add_ok'] = '사용ìžê°€ 성공ì ìœ¼ë¡œ 추가ë˜ì—ˆìŠµë‹ˆë‹¤.';
+$lang['add_fail'] = 'ì‚¬ìš©ìž ì¶”ê°€ê°€ 실패했습니다.';
+$lang['notify_ok'] = '알림 ì´ë©”ì¼ì´ 성공ì ìœ¼ë¡œ 발송ë˜ì—ˆìŠµë‹ˆë‹¤. ';
+$lang['notify_fail'] = '알림 ì´ë©”ì¼ ë°œì†¡ì´ ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/list.txt
new file mode 100644
index 000000000..93fa3d6f2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/list.txt
@@ -0,0 +1 @@
+===== ì‚¬ìš©ìž ëª©ë¡ =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/add.txt
new file mode 100644
index 000000000..32681ade7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/add.txt
@@ -0,0 +1,2 @@
+===== PridÄ—ti vartotojÄ… =====
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/delete.txt
new file mode 100644
index 000000000..262713c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/delete.txt
@@ -0,0 +1,2 @@
+===== IÅ¡trinti vartotojÄ… =====
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/edit.txt
new file mode 100644
index 000000000..da57ea380
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/edit.txt
@@ -0,0 +1,2 @@
+===== Redaguoti vartotojÄ… =====
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/intro.txt
new file mode 100644
index 000000000..61f80d52e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/intro.txt
@@ -0,0 +1,2 @@
+====== Vartotojų administravimas ======
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/lang.php
new file mode 100644
index 000000000..db3cf2d32
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/lang.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * Lithuanian language file
+ *
+ * @author grawity <grawity@gmail.com>
+ * @author audrius.klevas@gmail.com
+ * @author Arunas Vaitekunas <aras@fan.lt>
+ */
+$lang['menu'] = 'Vartotojų administravimas';
+$lang['noauth'] = '(vartotojų autentifikacija neprieinama)';
+$lang['nosupport'] = '(vartotojų administravimas nepalaikomas)';
+$lang['badauth'] = 'neteisingas autentifikacijos būdas';
+$lang['user_id'] = 'Vartotojas';
+$lang['user_pass'] = 'Slaptažodis';
+$lang['user_name'] = 'Vardas';
+$lang['user_mail'] = 'El.paštas';
+$lang['user_groups'] = 'GrupÄ—s';
+$lang['field'] = 'Laukas';
+$lang['value'] = 'Turinys';
+$lang['add'] = 'PridÄ—ti';
+$lang['delete'] = 'Pašalinti';
+$lang['delete_selected'] = 'Pašalinti pažymėtus';
+$lang['edit'] = 'Redaguoti';
+$lang['edit_prompt'] = 'Redaguoti šį vartotoją';
+$lang['modify'] = 'IÅ¡saugoti';
+$lang['search'] = 'Paieška';
+$lang['search_prompt'] = 'Ieškoti';
+$lang['clear'] = 'Panaikinti filtrÄ…';
+$lang['filter'] = 'Filtras';
+$lang['summary'] = 'Rodomi vartotojai %1$d-%2$d iš %3$d rastų. Iš viso %4$d vartotojų.';
+$lang['nonefound'] = 'Vartotojų nerasta. Iš viso %d vartotojų.';
+$lang['delete_ok'] = 'Pašalinta %d vartotojų';
+$lang['delete_fail'] = '%d nepavyko pašalinti.';
+$lang['update_ok'] = 'Vartotojas sÄ—kmingai pakeistas';
+$lang['update_fail'] = 'Vartotojo pakeitimas nepavyko';
+$lang['update_exists'] = 'Vartotojo vardo pakeitimas nepavyko, nes nurodytas vartotojo vardas (%s) jau yra (kiti pakeitimai įvykdyti).';
+$lang['start'] = 'pradžia';
+$lang['prev'] = 'atgal';
+$lang['next'] = 'pirmyn';
+$lang['last'] = 'pabaiga';
+$lang['edit_usermissing'] = 'Pasirinktas vartotojas nerastas, nurodytas vartotojo vardas galėjo būti pašalintas ar pakeistas kitur.';
+$lang['user_notify'] = 'Įspėti vartotoją';
+$lang['note_notify'] = 'Ä®spÄ—jimas siunÄiamas tik tada, kai vartotojui priskiriamas naujas slaptažodis.';
+$lang['note_group'] = 'Jei grupė nenurodyta, nauji vartotojai pridedami į pagrindinę grupę (%s).';
+$lang['add_ok'] = 'Vartotojas sÄ—kmingai pridÄ—tas';
+$lang['add_fail'] = 'Vartotojo pridÄ—jimas nepavyko';
+$lang['notify_ok'] = 'Įspėjimo el.laiškas išsiųstas';
+$lang['notify_fail'] = 'Įspėjimo el.laiško išsiųsti nepavyko';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/list.txt
new file mode 100644
index 000000000..87be62843
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/list.txt
@@ -0,0 +1,2 @@
+===== Vartotojų sąrašas =====
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/add.txt
new file mode 100644
index 000000000..06fd70002
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/add.txt
@@ -0,0 +1 @@
+===== Pievienot lietotÄju =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/delete.txt
new file mode 100644
index 000000000..5f59af7b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/delete.txt
@@ -0,0 +1 @@
+===== DzÄ“st lietotÄju =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/edit.txt
new file mode 100644
index 000000000..efb0b04d7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/edit.txt
@@ -0,0 +1 @@
+===== Labot lietotÄju =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/intro.txt
new file mode 100644
index 000000000..b248ddcb7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/intro.txt
@@ -0,0 +1 @@
+====== LietotÄju pÄrvaldnieks ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/lang.php
new file mode 100644
index 000000000..620678ff5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/lang.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * Latvian language file
+ *
+ * @author Aivars Miška <allefm@gmail.lv>
+ * @author Aivars Miška <allefm@gmail.com>
+ */
+$lang['menu'] = 'LietotÄju pÄrvaldnieks';
+$lang['noauth'] = '(lietotÄju autentifikÄcijas nav)';
+$lang['nosupport'] = '(lietotÄju pÄrvaldÄ«ba netiek uzturÄ“ta)';
+$lang['badauth'] = 'nederÄ«gs autentifikÄcijas mehÄnisms';
+$lang['user_id'] = 'LietotÄjs';
+$lang['user_pass'] = 'Parole';
+$lang['user_name'] = 'VÄrds/uzvÄrds';
+$lang['user_mail'] = 'Epasts';
+$lang['user_groups'] = 'Grupas';
+$lang['field'] = 'Lauks';
+$lang['value'] = 'Vērtība';
+$lang['add'] = 'Pielikt';
+$lang['delete'] = 'Dzēst';
+$lang['delete_selected'] = 'Dzēst izvēlēto';
+$lang['edit'] = 'Labot';
+$lang['edit_prompt'] = 'Labot Å¡o lietotÄju';
+$lang['modify'] = 'SaglabÄt izmaiņas';
+$lang['search'] = 'Meklēšana';
+$lang['search_prompt'] = 'Meklēt';
+$lang['clear'] = 'Noņemt meklēšanas filtru';
+$lang['filter'] = 'Filtrs';
+$lang['summary'] = 'LietotÄji %1$d.- %2$d. no %3$d atrastajiem. Pavisam %4$d lietotÄji.';
+$lang['nonefound'] = 'Neviens nav atrasts. Pavisam %d lietotÄju.';
+$lang['delete_ok'] = 'DzÄ“sti %d lietotÄji';
+$lang['delete_fail'] = '%d neizdevÄs izdzÄ“st.';
+$lang['update_ok'] = 'LietotÄja dati saglabÄti';
+$lang['update_fail'] = 'LietotÄja dati nav saglabÄti';
+$lang['update_exists'] = 'LietotÄja vÄrds nav nomainÄ«ts, norÄdÄ«to vÄrdu (%s) kÄds jau izmanto (pÄrÄ“jÄs izmaiņas tiks saglabÄtas).';
+$lang['start'] = 'sÄkums';
+$lang['prev'] = 'iepriekšējais';
+$lang['next'] = 'nÄkamais';
+$lang['last'] = 'pēdējais';
+$lang['edit_usermissing'] = 'NorÄdÄ«tais lietotÄjs nav atrasts, varbÅ«t tas ir dzÄ“st vai mainÄ«ts citur.';
+$lang['user_notify'] = 'Paziņot lietotÄjam';
+$lang['note_notify'] = 'Paziņojumus izsÅ«ta tikai tad, ja lietotÄjam dod jaunu paroli.';
+$lang['note_group'] = 'Ja nenorÄda grupu, lietotÄju pievieno noklusÄ“tajai grupai (%s).';
+$lang['note_pass'] = 'Ja paroles lauku atstÄj tukÅ¡u un atzÄ«mÄ“ paziņoÅ¡anu lietotÄjam, parole tiks Ä£enerÄ“ta automÄtiski.';
+$lang['add_ok'] = 'LietotÄjs veiksmÄ«gi pievienots';
+$lang['add_fail'] = 'LietotÄjs nav pievienots.';
+$lang['notify_ok'] = 'Paziņojums izsūtīts.';
+$lang['notify_fail'] = 'Nevar izsūtīt paziņojumu.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/list.txt
new file mode 100644
index 000000000..44a10d94c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/list.txt
@@ -0,0 +1 @@
+===== LietotÄju saraksts =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/add.txt
new file mode 100644
index 000000000..fc3a87737
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/add.txt
@@ -0,0 +1 @@
+====== सदसà¥à¤¯ नोंद करा ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/delete.txt
new file mode 100644
index 000000000..cf0e48551
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/delete.txt
@@ -0,0 +1 @@
+====== सदसà¥à¤¯ डिलीट करा ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/edit.txt
new file mode 100644
index 000000000..2d3d64915
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/edit.txt
@@ -0,0 +1 @@
+====== सदसà¥à¤¯ बदला ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/intro.txt
new file mode 100644
index 000000000..9253b323e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/intro.txt
@@ -0,0 +1 @@
+====== सदसà¥à¤¯ वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤• ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/lang.php
new file mode 100644
index 000000000..8915678cc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/lang.php
@@ -0,0 +1,50 @@
+<?php
+/**
+ * Marathi language file
+ *
+ * @author ghatothkach@hotmail.com
+ * @author Padmanabh Kulkarni <kulkarnipadmanabh@gmail.com>
+ * @author Padmanabh Kulkarni<kulkarnipadmanabh@gmail.com>
+ * @author shantanoo@gmail.com
+ */
+$lang['menu'] = 'सदसà¥à¤¯ वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤•';
+$lang['noauth'] = '( सदसà¥à¤¯ अधिकृत करणà¥à¤¯à¤¾à¤šà¥€ सà¥à¤µà¤¿à¤§à¤¾ नाही )';
+$lang['nosupport'] = '( सदसà¥à¤¯ वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤¨ उपलबà¥à¤§ नाही )';
+$lang['badauth'] = 'अधिकृत करणà¥à¤¯à¤¾à¤šà¥€ वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾ अवैध';
+$lang['user_id'] = 'सदसà¥à¤¯';
+$lang['user_pass'] = 'पासवरà¥à¤¡';
+$lang['user_name'] = 'खरे नाव';
+$lang['user_mail'] = 'ईमेल';
+$lang['user_groups'] = 'गट';
+$lang['field'] = 'रकाना';
+$lang['value'] = 'किमà¥à¤®à¤¤';
+$lang['add'] = 'जोड़ा';
+$lang['delete'] = 'डिलीट';
+$lang['delete_selected'] = 'निवडलेले डिलीट करा';
+$lang['edit'] = 'संपादन';
+$lang['edit_prompt'] = 'या सदसà¥à¤¯à¤¾à¤šà¥€ माहिती बदला';
+$lang['modify'] = 'बदल सà¥à¤°à¤•à¥à¤·à¤¿à¤¤ करा';
+$lang['search'] = 'शोध';
+$lang['search_prompt'] = 'शोध करा';
+$lang['clear'] = 'शोधाचे निकष बदला';
+$lang['filter'] = 'निकष';
+$lang['summary'] = 'सापडलेलà¥à¤¯à¤¾ %3$d सदसà¥à¤¯à¤¾à¤ªà¥ˆà¤•à¥€ %1$d ते %2$d दाखवले आहेत. à¤à¤•à¥‚ण सदसà¥à¤¯à¤¾ %4$d.';
+$lang['nonefound'] = 'à¤à¤•à¤¹à¥€ सदसà¥à¤¯ मिळाला नाही. à¤à¤•à¥‚ण सदसà¥à¤¯ %d.';
+$lang['delete_ok'] = '%d सदसà¥à¤¯ डिलीट केले.';
+$lang['delete_fail'] = '%d डिलीट करू शकलो नाही.';
+$lang['update_ok'] = 'सदसà¥à¤¯à¤¾à¤šà¥€ माहिती यशसà¥à¤µà¥€à¤°à¥€à¤¤à¥à¤¯à¤¾ बदलली आहे';
+$lang['update_fail'] = 'सदसà¥à¤¯à¤¾à¤šà¥€ माहिती बदलता आली नाही';
+$lang['update_exists'] = 'सदसà¥à¤¯à¤¾à¤šà¥‡ नाव बदलू शकलो नाही. %s हे नाव आधीच असà¥à¤¤à¤¿à¤¤à¥à¤µà¤¾à¤¤ आहे. ( इतर सरà¥à¤µ बदल केले जातील )';
+$lang['start'] = 'सà¥à¤°à¥à¤µà¤¾à¤¤';
+$lang['prev'] = 'आधीचं';
+$lang['next'] = 'पà¥à¤¢à¤šà¤‚';
+$lang['last'] = 'शेवटचं';
+$lang['edit_usermissing'] = 'दिलेला सदसà¥à¤¯ सापडला नाही. तो कदाचित डिलीट à¤à¤¾à¤²à¤¾ असेल किंवा बदलला गेला असेल.';
+$lang['user_notify'] = 'सदसà¥à¤¯à¤¾à¤²à¤¾ सूचित करा.';
+$lang['note_notify'] = 'सदसà¥à¤¯à¤¾à¤²à¤¾ नवीन पासवरà¥à¤¡ दिला तरच सूचनेचे ईमेल पाठवले जातात.';
+$lang['note_group'] = 'नवीन सदसà¥à¤¯ जर गट निवडला नसेल तर %s या गटात टाकले जातील.';
+$lang['note_pass'] = 'पासवरà¥à¤¡à¤šà¤¾ रकाना रिकामा ठेवलà¥à¤¯à¤¾à¤¸ व सदसà¥à¤¯ सूचना वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾ चालू असलà¥à¤¯à¤¾à¤¸ पासवरà¥à¤¡ आपोआप तयार केला जाईल.';
+$lang['add_ok'] = 'सदसà¥à¤¯ यशसà¥à¤µà¥€à¤°à¥€à¤¤à¥à¤¯à¤¾ नोंद à¤à¤¾à¤²à¤¾';
+$lang['add_fail'] = 'सदसà¥à¤¯à¤¾à¤šà¥€ नोंद à¤à¤¾à¤²à¥€ नाही';
+$lang['notify_ok'] = 'सूचनेचा ईमेल पाठवला';
+$lang['notify_fail'] = 'सूचनेचा ईमेल पाठवला गेला नाही';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/list.txt
new file mode 100644
index 000000000..ab6906771
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/list.txt
@@ -0,0 +1 @@
+====== सदसà¥à¤¯ यादी ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/add.txt
new file mode 100644
index 000000000..868b12ab1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/add.txt
@@ -0,0 +1 @@
+=====पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ थपà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/delete.txt
new file mode 100644
index 000000000..4441c8349
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/delete.txt
@@ -0,0 +1 @@
+===== पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ मेटà¥à¤¨à¥à¤¹à¥‹à¤¸ ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/edit.txt
new file mode 100644
index 000000000..040d2697d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/edit.txt
@@ -0,0 +1 @@
+===== पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ समà¥à¤ªà¤¾à¤¦à¤¨ गरà¥à¤¨à¥à¤¹à¥‹à¤¸===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/intro.txt
new file mode 100644
index 000000000..de08e483d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/intro.txt
@@ -0,0 +1 @@
+====== पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤• ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/lang.php
new file mode 100644
index 000000000..f68ed2074
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/lang.php
@@ -0,0 +1,49 @@
+<?php
+/**
+ * Nepali language file
+ *
+ * @author Saroj Kumar Dhakal <lotusnagarkot@gmail.com>
+ * @author SarojKumar Dhakal <lotusnagarkot@yahoo.com>
+ * @author Saroj Dhakal<lotusnagarkot@yahoo.com>
+ */
+$lang['menu'] = 'पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤•';
+$lang['noauth'] = '(पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ पà¥à¤°à¤®à¤¾à¤£à¤¿à¤•à¤°à¤£ उपलबà¥à¤§ छैन)';
+$lang['nosupport'] = '(पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤¨ समरà¥à¤¥à¤¿à¤¤ छैन)';
+$lang['badauth'] = 'अमानà¥à¤¯ पà¥à¤°à¤®à¤¾à¤£à¤¿à¤•à¤°à¤£ विधि';
+$lang['user_id'] = 'पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾';
+$lang['user_pass'] = 'पà¥à¤°à¤µà¥‡à¤¶à¤¶à¤¬à¥à¤¦';
+$lang['user_name'] = 'वासà¥à¤¤à¤µà¤¿à¤• नाम';
+$lang['user_mail'] = 'इमेल';
+$lang['user_groups'] = 'समूह ';
+$lang['field'] = 'कà¥à¤·à¥‡à¤¤à¥à¤°';
+$lang['value'] = 'मान ';
+$lang['add'] = 'थपà¥à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['delete'] = 'मेटà¥à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['delete_selected'] = 'सेलेकà¥à¤Ÿ गरिà¤à¤•à¥‹ मेटà¥à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['edit'] = 'समà¥à¤ªà¤¾à¤¦à¤¨ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['edit_prompt'] = 'यो पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ समà¥à¤ªà¤¾à¤¦à¤¨ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ ';
+$lang['modify'] = 'परिवरà¥à¤¤à¤¨ वचत गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['search'] = 'खोज';
+$lang['search_prompt'] = 'खोजà¥à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['clear'] = 'खोज फिलà¥à¤Ÿà¤° पूरà¥à¤µà¤°à¥à¤ªà¤®à¤¾ फरà¥à¤•à¤¾à¤‰à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['filter'] = 'फिलà¥à¤Ÿà¤° ';
+$lang['summary'] = 'देखाउदै %1$d-%2$d of %3$d भेटिà¤à¤•à¤¾ %4$d कà¥à¤² पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ मधà¥à¤¯à¥‡à¤¬à¤¾à¤Ÿ ।';
+$lang['nonefound'] = '%d कà¥à¤² पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾à¥¤ कà¥à¤¨à¥ˆ पनि पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ भेटिà¤à¤¨ ।';
+$lang['delete_ok'] = '%d पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ मेटिà¤';
+$lang['delete_fail'] = '%d पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ हटाउन सकिà¤à¤¨ ';
+$lang['update_ok'] = 'पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ सफलतापूरà¥à¤µà¤• अधà¥à¤¯à¤¾à¤µà¤§à¤¿à¤• गरियो ';
+$lang['update_fail'] = 'पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ अधà¥à¤¯à¤¾à¤µà¤§à¤¿à¤• कारà¥à¤¯ असफल';
+$lang['update_exists'] = 'परà¥à¤¯à¤¯à¥‹à¤—करà¥à¤¤à¤¾à¤•à¥‹ नाम परिवरà¥à¤¤à¤¨ असफल, दिइà¤à¤•à¥‹ पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ नाम( %s) पहिले देखि रहेको छ। ( यसबाहेकका परिवरà¥à¤°à¤¨à¤¹à¤°à¥‚ गरिà¤à¤•à¤¾ छनà¥)';
+$lang['start'] = 'सà¥à¤°à¥ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['prev'] = 'पहिलेको ';
+$lang['next'] = 'पछिको';
+$lang['last'] = 'अनà¥à¤¤à¤¿à¤®';
+$lang['edit_usermissing'] = 'छानिà¤à¤•à¥‹ पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ भेटिà¤à¤¨, खà¥à¤²à¤¾à¤‡à¤à¤•à¥‹ पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ मेटिà¤à¤•à¥‹ या कतै परिवरà¥à¤¤à¤¨ गरिà¤à¤•à¥‹ हà¥à¤¨à¤¸à¤•à¥à¤›à¥¤';
+$lang['user_notify'] = 'पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾à¤²à¤¾à¤ˆ जानकारी दिनà¥à¤¹à¥‹à¤¸à¥ ';
+$lang['note_notify'] = 'जानकारी इमेल तब मातà¥à¤° पठाइनà¥à¤› जब पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾à¤²à¤¾à¤ˆ नयाठपà¥à¤°à¤µà¥‡à¤¶ शबà¥à¤¦ दिइनà¥à¤›à¥¤';
+$lang['note_group'] = 'नयाठपà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾à¤²à¤¾à¤ˆ पूरà¥à¤µà¤¨à¤¿à¤°à¥à¤§à¤¾à¤°à¤¿à¤¤ समूह नखà¥à¤²à¤¾à¤à¤®à¤¾ (%s) मा समावेश गराइनेछ ।';
+$lang['note_pass'] = 'पà¥à¤°à¤µà¥‡à¤¶ शवà¥à¤¦ कà¥à¤·à¥‡à¤¤à¥à¤° खाली राखेमा पà¥à¤°à¤µà¥‡à¤¶ शवà¥à¤¦ सà¥à¤µà¤¤: निरà¥à¤®à¤¾à¤£ हà¥à¤¨à¥‡à¤› र पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾à¤²à¤¾à¤ˆ जानकारी पठइने छ ।';
+$lang['add_ok'] = 'पà¥à¤°à¥‹à¤—करà¥à¤¤à¤¾ सफलतापूरà¥à¤µà¤• थपियो';
+$lang['add_fail'] = 'पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ थपà¥à¤¨à¥‡ कारà¥à¤¯ असफल';
+$lang['notify_ok'] = 'जानकारी पतà¥à¤° पठाइयो';
+$lang['notify_fail'] = 'जानकारी पतà¥à¤° पठाउन सकिà¤à¤¨ ';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/list.txt
new file mode 100644
index 000000000..ece94b388
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/list.txt
@@ -0,0 +1 @@
+===== पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ सà¥à¤šà¥€ ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/add.txt
new file mode 100644
index 000000000..992d9f300
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/add.txt
@@ -0,0 +1 @@
+===== Nieuwe gebruiker ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/delete.txt
new file mode 100644
index 000000000..ad26e058f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/delete.txt
@@ -0,0 +1 @@
+===== Verwijder gebruiker ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/edit.txt
new file mode 100644
index 000000000..0d58e48f3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/edit.txt
@@ -0,0 +1 @@
+===== Gebruiker wijzigen ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/intro.txt
new file mode 100644
index 000000000..7df09dbab
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/intro.txt
@@ -0,0 +1 @@
+==== Gebruikersmanager ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/lang.php
new file mode 100644
index 000000000..d4f0eaad9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/lang.php
@@ -0,0 +1,53 @@
+<?php
+/**
+ * Dutch language file
+ *
+ * @author Wouter Schoot <wouter@schoot.org>
+ * @author John de Graaff <john@de-graaff.net>
+ * @author Niels Schoot <niels.schoot@quintiq.com>
+ * @author Dion Nicolaas <dion@nicolaas.net>
+ * @author Danny Rotsaert <danny.rotsaert@edpnet.be>
+ * @author Marijn Hofstra hofstra.m@gmail.com
+ * @author Matthias Carchon webmaster@c-mattic.be
+ */
+$lang['menu'] = 'Gebruikersmanager';
+$lang['noauth'] = '(gebruikersauthenticatie niet beschikbaar)';
+$lang['nosupport'] = '(gebruikersmanagement niet ondersteund)';
+$lang['badauth'] = 'ongeldige authenticatiemethode';
+$lang['user_id'] = 'Gebruiker';
+$lang['user_pass'] = 'Wachtwoord';
+$lang['user_name'] = 'Volledige naam';
+$lang['user_mail'] = 'E-mail';
+$lang['user_groups'] = 'Groepen';
+$lang['field'] = 'Veld';
+$lang['value'] = 'Waarde';
+$lang['add'] = 'Toevoegen';
+$lang['delete'] = 'Verwijder';
+$lang['delete_selected'] = 'Verwijder geselecteerden';
+$lang['edit'] = 'Wijzigen';
+$lang['edit_prompt'] = 'Wijzig deze gebruiker';
+$lang['modify'] = 'Wijzigingen opslaan';
+$lang['search'] = 'Zoek';
+$lang['search_prompt'] = 'Voer zoekopdracht uit';
+$lang['clear'] = 'Verwijder zoekfilter';
+$lang['filter'] = 'Filter';
+$lang['summary'] = 'Weergegeven gebruikers %1$d-%2$d van %3$d gevonden. %4$d gebruikers in totaal.';
+$lang['nonefound'] = 'Geen gebruikers gevonden. %d gebruikers in totaal.';
+$lang['delete_ok'] = '%d gebruikers verwijderd';
+$lang['delete_fail'] = '%d kon niet worden verwijderd.';
+$lang['update_ok'] = 'Gebruiker succesvol gewijzigd';
+$lang['update_fail'] = 'Gebruiker wijzigen mislukt';
+$lang['update_exists'] = 'Gebruikersnaam veranderen mislukt, de opgegeven gebruikersnaam (%s) bestaat reeds (overige aanpassingen worden wel doorgevoerd).';
+$lang['start'] = 'start';
+$lang['prev'] = 'vorige';
+$lang['next'] = 'volgende';
+$lang['last'] = 'laatste';
+$lang['edit_usermissing'] = 'Geselecteerde gebruiker niet gevonden, de opgegeven gebruikersnaam kan verwijderd zijn of elders aangepast.';
+$lang['user_notify'] = 'Gebruiker notificeren';
+$lang['note_notify'] = 'Notificatie-e-mails worden alleen verstuurd wanneer de gebruiker een nieuw wachtwoord wordt toegekend.';
+$lang['note_group'] = 'Nieuwe gebruikers zullen aan de standaard groep (%s) worden toegevoegd als er geen groep opgegeven is.';
+$lang['note_pass'] = 'Het wachtwoord wordt automatisch gegenereerd als het veld wordt leeggelaten en gebruikersnotificaties aanstaan.';
+$lang['add_ok'] = 'Gebruiker succesvol toegevoegd';
+$lang['add_fail'] = 'Gebruiker kon niet worden toegevoegd';
+$lang['notify_ok'] = 'Notificatie-e-mail verzonden';
+$lang['notify_fail'] = 'Notificatie-e-mail kon niet worden verzonden';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/list.txt
new file mode 100644
index 000000000..a9aac845d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/list.txt
@@ -0,0 +1 @@
+===== Gebruikerslijst ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/add.txt
new file mode 100644
index 000000000..4fb9cf271
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/add.txt
@@ -0,0 +1 @@
+===== Legg til bruker ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/delete.txt
new file mode 100644
index 000000000..55010182f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/delete.txt
@@ -0,0 +1 @@
+===== Slett bruker ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/edit.txt
new file mode 100644
index 000000000..3dff0c92e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/edit.txt
@@ -0,0 +1 @@
+===== Rediger bruker ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/intro.txt
new file mode 100644
index 000000000..c9e1e5b8c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/intro.txt
@@ -0,0 +1 @@
+===== Behandle brukere ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/lang.php
new file mode 100644
index 000000000..df38de1b0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/lang.php
@@ -0,0 +1,56 @@
+<?php
+/**
+ * Norwegianlanguage file
+ *
+ * @author Thomas Nygreen <nygreen@gmail.com>
+ * @author Arild Burud <arildb@met.no>
+ * @author Torkill Bruland <torkar-b@online.no>
+ * @author Rune M. Andersen <rune.andersen@gmail.com>
+ * @author Jakob Vad Nielsen (me@jakobnielsen.net)
+ * @author Kjell Tore Næsgaard <kjell.t.nasgaard@ntnu.no>
+ * @author Knut Staring <knutst@gmail.com>
+ * @author Lisa Ditlefsen <lisa@vervesearch.com>
+ * @author Erik Pedersen <erik.pedersen@shaw.ca>
+ * @author Erik Bjørn Pedersen <erik.pedersen@shaw.ca>
+ */
+$lang['menu'] = 'Behandle brukere';
+$lang['noauth'] = '(autentisering av brukere ikke tilgjengelig)';
+$lang['nosupport'] = '(behandling av brukere støttes ikke)';
+$lang['badauth'] = 'ugyldig autentiseringsmekanisme';
+$lang['user_id'] = 'Bruker';
+$lang['user_pass'] = 'Passord';
+$lang['user_name'] = 'Fullt navn';
+$lang['user_mail'] = 'E-post';
+$lang['user_groups'] = 'Grupper';
+$lang['field'] = 'Felt';
+$lang['value'] = 'Verdi';
+$lang['add'] = 'Legg til';
+$lang['delete'] = 'Slett';
+$lang['delete_selected'] = 'Slett utvalgte';
+$lang['edit'] = 'Rediger';
+$lang['edit_prompt'] = 'Rediger denne brukeren';
+$lang['modify'] = 'Lagre endringer';
+$lang['search'] = 'Søk';
+$lang['search_prompt'] = 'Start søk';
+$lang['clear'] = 'Tilbakestill søkefilter';
+$lang['filter'] = 'Filter';
+$lang['summary'] = 'Viser brukere %1$d-%2$d av %3$d. %4$d users total.';
+$lang['nonefound'] = 'Ingen brukere funnet. %d brukere totalt.';
+$lang['delete_ok'] = '%d brukere slettet.';
+$lang['delete_fail'] = '%d kunne ikke slettes.';
+$lang['update_ok'] = 'Brukeren ble oppdatert';
+$lang['update_fail'] = 'Oppdatering av brukeren feilet';
+$lang['update_exists'] = 'Endring av brukernavn feilet. Det oppgitte brukernavnet (%s) eksisterer allerede (alle andre endringer vil bli gjort).';
+$lang['start'] = 'første';
+$lang['prev'] = 'forrige';
+$lang['next'] = 'neste';
+$lang['last'] = 'siste';
+$lang['edit_usermissing'] = 'Fant ikke valgte brukere. Det oppgitte brukernavnet kan ha blitt slettet eller endret et annet sted.';
+$lang['user_notify'] = 'Varsle bruker';
+$lang['note_notify'] = 'E-post med varsling blir bare sendt hvis brukeren blir gitt nytt passord.';
+$lang['note_group'] = 'Nye brukere vil bli lagt til standardgruppen (%s) hvis ingen gruppe oppgis.';
+$lang['note_pass'] = 'Passordet vil bli autogenerert dersom feltet er tomt og varsle bruker er valgt.';
+$lang['add_ok'] = 'Brukeren ble lagt til';
+$lang['add_fail'] = 'Brukeren kunne ikke legges til';
+$lang['notify_ok'] = 'Varsling sendt';
+$lang['notify_fail'] = 'Varsling kunne ikke sendes';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/list.txt
new file mode 100644
index 000000000..40de64b01
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/list.txt
@@ -0,0 +1 @@
+===== Brukerliste ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/add.txt
new file mode 100644
index 000000000..a33f3baa7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/add.txt
@@ -0,0 +1 @@
+===== Dodawanie użytkownika =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/delete.txt
new file mode 100644
index 000000000..72dd338f3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/delete.txt
@@ -0,0 +1 @@
+===== Usuwanie użytkownika =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/edit.txt
new file mode 100644
index 000000000..3c9d89835
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/edit.txt
@@ -0,0 +1 @@
+===== Edycja użytkownika =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/intro.txt
new file mode 100644
index 000000000..da1cfeac0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/intro.txt
@@ -0,0 +1 @@
+====== Menadżer użytkowników ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/lang.php
new file mode 100644
index 000000000..3db83b9b3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/lang.php
@@ -0,0 +1,50 @@
+<?php
+/**
+ * polish language file
+ *
+ * @author Grzegorz Żur <grzegorz.zur@gmail.com>
+ * @author Mariusz Kujawski <marinespl@gmail.com>
+ * @author Maciej Kurczewski <pipijajko@gmail.com>
+ * @author SÅ‚awomir Boczek <slawkens@gmail.com>
+ */
+$lang['menu'] = 'Menadżer użytkowników';
+$lang['noauth'] = '(uwierzytelnienie użytkownika niemożliwe)';
+$lang['nosupport'] = '(zarządzanie użytkownikami niemożliwe)';
+$lang['badauth'] = 'błędny mechanizm uwierzytelniania';
+$lang['user_id'] = 'Nazwa użytkownika';
+$lang['user_pass'] = 'Hasło';
+$lang['user_name'] = 'Użytkownik';
+$lang['user_mail'] = 'E-mail';
+$lang['user_groups'] = 'Grupy';
+$lang['field'] = 'Pole';
+$lang['value'] = 'Wartość';
+$lang['add'] = 'Dodaj';
+$lang['delete'] = 'Usuń';
+$lang['delete_selected'] = 'Usuń zaznaczone';
+$lang['edit'] = 'Edytuj';
+$lang['edit_prompt'] = 'Edytuj użytkownika';
+$lang['modify'] = 'Zapisz zmiany';
+$lang['search'] = 'Szukaj';
+$lang['search_prompt'] = 'Rozpocznij przeszukiwanie';
+$lang['clear'] = 'Resetuj filtr przeszukiwania';
+$lang['filter'] = 'Filtr';
+$lang['summary'] = 'Użytkownicy %1$d-%2$d z %3$d znalezionych. Całkowita ilość użytkowników %4$d.';
+$lang['nonefound'] = 'Nie znaleziono użytkowników. Całkowita ilość użytkowników %d.';
+$lang['delete_ok'] = 'Usunięto %d użytkowników.';
+$lang['delete_fail'] = 'Błąd przy usuwaniu %d użytkowników.';
+$lang['update_ok'] = 'Dane użytkownika zostały zmienione!';
+$lang['update_fail'] = 'Błąd przy zmianie danych użytkownika!';
+$lang['update_exists'] = 'Błąd przy zmianie nazwy użytkownika, użytkownik o tej nazwie (%s) już istnieje (inne zmiany zostały wprowadzone).';
+$lang['start'] = 'poczÄ…tek';
+$lang['prev'] = 'poprzedni';
+$lang['next'] = 'następny';
+$lang['last'] = 'ostatni';
+$lang['edit_usermissing'] = 'Nie znaleziono wybranego użytkownika, nazwa użytkownika mogła zostać zmieniona lub usunięta.';
+$lang['user_notify'] = 'Powiadamianie użytkownika';
+$lang['note_notify'] = 'Powiadomienia wysyłane są tylko jeżeli zmieniono hasło użytkownika.';
+$lang['note_group'] = 'Nowy użytkownik zostanie dodany do grupy domyślnej (%s) jeśli nie podano innej grupy.';
+$lang['note_pass'] = 'Jeśli pole będzie puste i powiadamianie użytkownika jest włączone, hasło zostanie automatyczne wygenerowane.';
+$lang['add_ok'] = 'Dodano użytkownika';
+$lang['add_fail'] = 'Dodawanie użytkownika nie powiodło się';
+$lang['notify_ok'] = 'Powiadomienie zostało wysłane';
+$lang['notify_fail'] = 'Wysyłanie powiadomienia nie powiodło się';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/list.txt
new file mode 100644
index 000000000..57da2e605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/list.txt
@@ -0,0 +1 @@
+===== Lista użytkowników =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/add.txt
new file mode 100644
index 000000000..759ed688b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/add.txt
@@ -0,0 +1 @@
+===== Adicionar usuário ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/delete.txt
new file mode 100644
index 000000000..9d18d58ff
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/delete.txt
@@ -0,0 +1 @@
+===== Excluir usuário ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/edit.txt
new file mode 100644
index 000000000..a1be1c8b7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/edit.txt
@@ -0,0 +1 @@
+===== Editar usuário ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/intro.txt
new file mode 100644
index 000000000..5f3399653
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/intro.txt
@@ -0,0 +1 @@
+====== Gerenciamento de Usuários ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/lang.php
new file mode 100644
index 000000000..cf7e48ea7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/lang.php
@@ -0,0 +1,57 @@
+<?php
+/**
+ * Portuguese language file
+ *
+ * @author Frederico Gonçalves Guimarães <frederico@teia.bio.br>
+ * @author Felipe Castro <fefcas@gmail.com>
+ * @author Lucien Raven <lucienraven@yahoo.com.br>
+ * @author Enrico Nicoletto <liverig@gmail.com>
+ * @author Flávio Veras <flaviove@gmail.com>
+ * @author Jeferson Propheta <jeferson.propheta@gmail.com>
+ * @author jair.henrique@gmail.com
+ * @author Luis Dantas <luis@dantas.com>
+ * @author Frederico Guimarães <frederico@teia.bio.br>
+ * @author Jair Henrique <jair.henrique@gmail.com>
+ * @author Luis Dantas <luisdantas@gmail.com>
+ */
+$lang['menu'] = 'Gerenciamento de Usuários';
+$lang['noauth'] = '(o gerenciamento de usuários não está disponível)';
+$lang['nosupport'] = '(o gerenciamento de usuários não é suportado)';
+$lang['badauth'] = 'mecanismo de autenticação inválido';
+$lang['user_id'] = 'Usuário';
+$lang['user_pass'] = 'Senha';
+$lang['user_name'] = 'Nome real';
+$lang['user_mail'] = 'E-mail';
+$lang['user_groups'] = 'Grupos';
+$lang['field'] = 'Campo';
+$lang['value'] = 'Valor';
+$lang['add'] = 'Adicionar';
+$lang['delete'] = 'Excluir';
+$lang['delete_selected'] = 'Excluir a seleção';
+$lang['edit'] = 'Editar';
+$lang['edit_prompt'] = 'Editar esse usuário';
+$lang['modify'] = 'Salvar as alterações';
+$lang['search'] = 'Pesquisar';
+$lang['search_prompt'] = 'Executar a pesquisa';
+$lang['clear'] = 'Limpar o filtro de pesquisa';
+$lang['filter'] = 'Filtro';
+$lang['summary'] = 'Exibindo usuários %1$d-%2$d de %3$d encontrados. %4$d usuários no total.';
+$lang['nonefound'] = 'Nenhum usuário encontrado. %d usuários no total.';
+$lang['delete_ok'] = '%d usuários excluídos';
+$lang['delete_fail'] = 'Erro na exclusão de %d usuários.';
+$lang['update_ok'] = 'Usuário atualizado com sucesso';
+$lang['update_fail'] = 'Não foi possível atualizar o usuário';
+$lang['update_exists'] = 'Não foi possível mudar o nome do usuário. O nome especificado (%s) já existe (as outras mudanças serão aplicadas).';
+$lang['start'] = 'primeira';
+$lang['prev'] = 'anterior';
+$lang['next'] = 'próxima';
+$lang['last'] = 'última';
+$lang['edit_usermissing'] = 'O usuário selecionado não foi encontrado, ele foi excluído ou teve o seu nome modificado.';
+$lang['user_notify'] = 'Notificar o usuário';
+$lang['note_notify'] = 'E-mails de notificação são enviados apenas se o usuário digitar uma nova senha.';
+$lang['note_group'] = 'Novos usuários serão adicionados ao grupo padrão (%s), caso nenhum grupo seja especificado.';
+$lang['note_pass'] = 'A senha será gerada automaticamente se o campo for deixado em branco e a notificação de usuário estiver habilitada.';
+$lang['add_ok'] = 'O usuário foi adicionado com sucesso';
+$lang['add_fail'] = 'O usuário não foi adicionado';
+$lang['notify_ok'] = 'O e-mail de notificação foi enviado';
+$lang['notify_fail'] = 'Não foi possível enviar o e-mail de notificação';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/list.txt
new file mode 100644
index 000000000..e5f79fb8d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/list.txt
@@ -0,0 +1 @@
+===== Lista de usuários ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/add.txt
new file mode 100644
index 000000000..a4c2672c7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/add.txt
@@ -0,0 +1 @@
+===== Adicionar Utilizador ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/delete.txt
new file mode 100644
index 000000000..95bffc1e3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/delete.txt
@@ -0,0 +1 @@
+===== Remover Utilizador ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/edit.txt
new file mode 100644
index 000000000..176798454
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/edit.txt
@@ -0,0 +1 @@
+===== Editar Utilizador ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/intro.txt
new file mode 100644
index 000000000..27985ded6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/intro.txt
@@ -0,0 +1 @@
+===== Gerir Utilizadores ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/lang.php
new file mode 100644
index 000000000..8c4607922
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/lang.php
@@ -0,0 +1,50 @@
+<?php
+/**
+ * Portugueselanguage file
+ *
+ * @author José Monteiro <Jose.Monteiro@DoWeDo-IT.com>
+ * @author Enrico Nicoletto <liverig@gmail.com>
+ * @author Fil <fil@meteopt.com>
+ * @author André Neves <drakferion@gmail.com>
+ */
+$lang['menu'] = 'Gestor de Perfis';
+$lang['noauth'] = '(autenticação indisponível)';
+$lang['nosupport'] = '(gestão de utilizadores não suportada)';
+$lang['badauth'] = 'Mecanismo de autenticação inválido';
+$lang['user_id'] = 'Utilizador';
+$lang['user_pass'] = 'Senha';
+$lang['user_name'] = 'Nome Real';
+$lang['user_mail'] = 'E-mail';
+$lang['user_groups'] = 'Grupos';
+$lang['field'] = 'Campo';
+$lang['value'] = 'Valor';
+$lang['add'] = 'Adicionar';
+$lang['delete'] = 'Remover';
+$lang['delete_selected'] = 'Remover Seleccionado(s)';
+$lang['edit'] = 'Editar';
+$lang['edit_prompt'] = 'Editar utilizador';
+$lang['modify'] = 'Gravar Alterações';
+$lang['search'] = 'Pesquisar';
+$lang['search_prompt'] = 'Pesquisar';
+$lang['clear'] = 'Limpar Filtro de Pesquisa';
+$lang['filter'] = 'Filtro';
+$lang['summary'] = 'Apresentar utilizadores %1$d-%2$d de %3$d encontrados. %4$d inscritos.';
+$lang['nonefound'] = 'Nenhum utilizador encontrado. %d inscritos.';
+$lang['delete_ok'] = '%d utilizadores removidos';
+$lang['delete_fail'] = '%d remoções falhadas.';
+$lang['update_ok'] = 'Utilizador actualizado';
+$lang['update_fail'] = 'Utilizador não actualizado';
+$lang['update_exists'] = 'Falhou a alteração do nome, porque o utilizador (%s) já existe (as restantes alterações serão aplicadas).';
+$lang['start'] = 'primeiro';
+$lang['prev'] = 'anterior';
+$lang['next'] = 'seguinte';
+$lang['last'] = 'último';
+$lang['edit_usermissing'] = 'Utilizador seleccionado não encontrado. Terá já sido removido ou alterado entretanto?';
+$lang['user_notify'] = 'Notificar utilizador';
+$lang['note_notify'] = 'Notificações só são enviadas se for atribuída uma nova senha ao utilizador.';
+$lang['note_group'] = 'Os novos utilizadores são adicionados ao grupo por omissão (%s) se não for especificado nenhum grupo.';
+$lang['note_pass'] = 'A password será automáticamente gerada se o campo esquerdo estiver vazio e a notificação de utilizador estiver activada.';
+$lang['add_ok'] = 'Utilizador adicionado.';
+$lang['add_fail'] = 'Utilizador não adicionado.';
+$lang['notify_ok'] = 'Mensagem de notificação enviada.';
+$lang['notify_fail'] = 'Não foi possível enviar mensagem de notificação';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/list.txt
new file mode 100644
index 000000000..01a0460aa
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/list.txt
@@ -0,0 +1 @@
+===== Lista de Utilizadores ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/add.txt
new file mode 100644
index 000000000..9a5c45eef
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/add.txt
@@ -0,0 +1 @@
+===== Adaugă utilizator ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/delete.txt
new file mode 100644
index 000000000..ea65fa984
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/delete.txt
@@ -0,0 +1 @@
+===== Åžterge utilizator ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/edit.txt
new file mode 100644
index 000000000..b7f8a4213
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/edit.txt
@@ -0,0 +1 @@
+===== Editează utilizator ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/intro.txt
new file mode 100644
index 000000000..f3c66266d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/intro.txt
@@ -0,0 +1 @@
+===== Manager Utilizatori ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/lang.php
new file mode 100644
index 000000000..260814aed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/lang.php
@@ -0,0 +1,52 @@
+<?php
+/**
+ * Romanian language file
+ *
+ * @author Sergiu Baltariu <s_baltariu@yahoo.com>
+ * @author s_baltariu@yahoo.com
+ * @author Emanuel-Emeric Andrasi <n30@mandrivausers.ro>
+ * @author Emanuel-Emeric Andrași <n30@mandrivausers.ro>
+ * @author Emanuel-Emeric AndraÅŸi <em.andrasi@mandrivausers.ro>
+ * @author Emanuel-Emeric Andrasi <em.andrasi@mandrivausers.ro>
+ */
+$lang['menu'] = 'Manager Utilizatori';
+$lang['noauth'] = '(autentificarea utilizatorilor nu este disponibilă)';
+$lang['nosupport'] = '(menegementul utilizatorilor nu e suportat)';
+$lang['badauth'] = 'mecanism de autentificare invalid';
+$lang['user_id'] = 'Utilizator';
+$lang['user_pass'] = 'Parolă';
+$lang['user_name'] = 'Nume Real';
+$lang['user_mail'] = 'Email';
+$lang['user_groups'] = 'Grupuri';
+$lang['field'] = 'Câmp';
+$lang['value'] = 'Valoare';
+$lang['add'] = 'Adaugă';
+$lang['delete'] = 'Åžterge';
+$lang['delete_selected'] = 'Şterge selecţia';
+$lang['edit'] = 'Editează';
+$lang['edit_prompt'] = 'Editează acest utilizator';
+$lang['modify'] = 'Salvează Modificările';
+$lang['search'] = 'Caută';
+$lang['search_prompt'] = 'Se caută';
+$lang['clear'] = 'Resetează Filtrul de Căutare';
+$lang['filter'] = 'Filtru';
+$lang['summary'] = 'Afişarea utilizatorilor %1$d-%2$d din %3$d găsită. %4$d utilizatori în total.';
+$lang['nonefound'] = 'Nici un utilizator nu a fost găsit. %d utilizatori în total.';
+$lang['delete_ok'] = '%d utilizatori ÅŸterÅŸi';
+$lang['delete_fail'] = '%d eÅŸuat la ÅŸtergere.';
+$lang['update_ok'] = 'Utilizatorul a fost actualizat cu succes';
+$lang['update_fail'] = 'Actualizarea utilizatorului a eÅŸuat';
+$lang['update_exists'] = 'Modificarea numelui de utilizator a eşuat. Numele de utilizator specificat (%s) există deja (orice altă modificare se va aplica)';
+$lang['start'] = 'început';
+$lang['prev'] = 'anterior';
+$lang['next'] = 'urmator';
+$lang['last'] = 'sfârşit';
+$lang['edit_usermissing'] = 'Utilizatorul selectat nu a fost găsit. E posibil ca numele de utilizator specificat să fi fost şters sau modificat în altă parte.';
+$lang['user_notify'] = 'Notificare utilizator';
+$lang['note_notify'] = 'Emailurile de notificare sunt trimise numai dacă utilizatorului îi este dată o nouă parolă.';
+$lang['note_group'] = 'Noii utilizatori vor fi adăugaţi la grupul implicit (%s) dacă nu se specifică grupul.';
+$lang['note_pass'] = 'Parola va fi regenerată automat dacă câmpul este lăsat gol şi notificarea utilizatorului este activată.';
+$lang['add_ok'] = 'Utilizator adăugat cu succes';
+$lang['add_fail'] = 'Adăugarea utilizatorului a eşuat';
+$lang['notify_ok'] = 'Emailul de notificare a fost trimis';
+$lang['notify_fail'] = 'Emailul de notificare nu a putut fi trimis';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/list.txt
new file mode 100644
index 000000000..6c0563444
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/list.txt
@@ -0,0 +1 @@
+===== Listă utilizatori ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/add.txt
new file mode 100644
index 000000000..3cb4264e7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/add.txt
@@ -0,0 +1 @@
+===== Добавить Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/delete.txt
new file mode 100644
index 000000000..80f874e05
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/delete.txt
@@ -0,0 +1 @@
+===== Удалить Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/edit.txt
new file mode 100644
index 000000000..d447c4005
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/edit.txt
@@ -0,0 +1 @@
+===== Редактировать Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/intro.txt
new file mode 100644
index 000000000..3a3e2607d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/intro.txt
@@ -0,0 +1 @@
+====== Управление пользователÑми ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/lang.php
new file mode 100644
index 000000000..7bfe3410d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/lang.php
@@ -0,0 +1,56 @@
+<?php
+/**
+ * Russian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Denis Simakov <akinoame1@gmail.com>
+ * @author Andrew Pleshakov <beotiger@mail.ru>
+ * @author Змей ЭтерийÑкий evil_snake@eternion.ru
+ * @author Hikaru Nakajima <jisatsu@mail.ru>
+ * @author Alexei Tereschenko <alexeitlex@yahoo.com>
+ * @author Irina Ponomareva irinaponomareva@webperfectionist.com
+ * @author Alexander Sorkin <kibizoid@gmail.com>
+ * @author Kirill Krasnov <krasnovforum@gmail.com>
+ * @author Vlad Tsybenko <vlad.development@gmail.com>
+ */
+$lang['menu'] = 'Управление пользователÑми';
+$lang['noauth'] = '(Ð°Ð²Ñ‚Ð¾Ñ€Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÐµÐ¹ недоÑтупна)';
+$lang['nosupport'] = '(управление пользователÑми не поддерживаетÑÑ)';
+$lang['badauth'] = 'некорректный механизм аутентификации';
+$lang['user_id'] = 'Логин';
+$lang['user_pass'] = 'Пароль';
+$lang['user_name'] = 'Полное имÑ';
+$lang['user_mail'] = 'Е-мÑйл';
+$lang['user_groups'] = 'Группы';
+$lang['field'] = 'Поле';
+$lang['value'] = 'Значение';
+$lang['add'] = 'Добавить';
+$lang['delete'] = 'Удалить';
+$lang['delete_selected'] = 'Удалить выбранные';
+$lang['edit'] = 'Редактировать';
+$lang['edit_prompt'] = 'Редактировать Ñтого пользователÑ';
+$lang['modify'] = 'Сохранить изменениÑ';
+$lang['search'] = 'ПоиÑк';
+$lang['search_prompt'] = 'ИÑкать';
+$lang['clear'] = 'Ð¡Ð±Ñ€Ð¾Ñ Ñ„Ð¸Ð»ÑŒÑ‚Ñ€Ð° поиÑка';
+$lang['filter'] = 'Фильтр';
+$lang['summary'] = 'Показаны пользователи %1$d-%2$d из %3$d найденных. Ð’Ñего пользователей: %4$d.';
+$lang['nonefound'] = 'Ðе найдено ни одного пользователÑ. Ð’Ñего пользователей: %d.';
+$lang['delete_ok'] = 'Удалено пользователей: %d';
+$lang['delete_fail'] = 'Ðе удалоÑÑŒ удалить %d.';
+$lang['update_ok'] = 'Пользователь уÑпешно обновлен';
+$lang['update_fail'] = 'Ðе удалоÑÑŒ обновить пользователÑ';
+$lang['update_exists'] = 'Ðе удалоÑÑŒ изменить Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ, такой пользователь (%s) уже ÑущеÑтвует (вÑе оÑтальные Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð±ÑƒÐ´ÑƒÑ‚ применены).';
+$lang['start'] = 'в начало';
+$lang['prev'] = 'назад';
+$lang['next'] = 'вперед';
+$lang['last'] = 'в конец';
+$lang['edit_usermissing'] = 'Выбранный пользователь не найден. Возможно, указанный логин был удален или изменен извне.';
+$lang['user_notify'] = 'Сообщить пользователю';
+$lang['note_notify'] = 'Е-мÑйлы Ñ ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸ÐµÐ¼ поÑылаютÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ в Ñлучае Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ паролÑ.';
+$lang['note_group'] = 'ЕÑли группа не указана, новые пользователи будут добавлены в группу по умолчанию (%s).';
+$lang['note_pass'] = 'Пароль будет Ñгенерирован автоматичеÑки, еÑли поле оÑтавлено пуÑтым и включено уведомление пользователÑ.';
+$lang['add_ok'] = 'Пользователь уÑпешно добавлен';
+$lang['add_fail'] = 'Ðе удалоÑÑŒ добавить пользователÑ';
+$lang['notify_ok'] = 'Е-мÑйл Ñ ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸ÐµÐ¼ был поÑлан';
+$lang['notify_fail'] = 'Ðе удалоÑÑŒ поÑлать е-мÑйл Ñ ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸ÐµÐ¼';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/list.txt
new file mode 100644
index 000000000..26c0cbead
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/list.txt
@@ -0,0 +1 @@
+===== СпиÑок пользователей =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/add.txt
new file mode 100644
index 000000000..e2e106089
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/add.txt
@@ -0,0 +1,2 @@
+===== Pridanie užívateľa =====
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/delete.txt
new file mode 100644
index 000000000..c7d6a3cc2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/delete.txt
@@ -0,0 +1,2 @@
+===== Zmazanie užívateľa =====
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/edit.txt
new file mode 100644
index 000000000..28af5b53c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/edit.txt
@@ -0,0 +1,2 @@
+===== Zmena užívateľa =====
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/intro.txt
new file mode 100644
index 000000000..0a626de52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/intro.txt
@@ -0,0 +1,2 @@
+====== Správa používateľov ======
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/lang.php
new file mode 100644
index 000000000..8b309bc71
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/lang.php
@@ -0,0 +1,50 @@
+<?php
+/**
+ * Slovak language file
+ *
+ * @author Ondrej Végh <ov@vsieti.sk>
+ * @author Michal Mesko <michal.mesko@gmail.com>
+ * @author exusik@gmail.com
+ * @author Martin Michalek <michalek.dev@gmail.com>
+ */
+$lang['menu'] = 'Správa používateľov';
+$lang['noauth'] = '(autentifikácia užívateľov nie je dostupná)';
+$lang['nosupport'] = '(správa užívateľov nie je podporovaná)';
+$lang['badauth'] = 'vadný autorizaÄný mechanizmus';
+$lang['user_id'] = 'Užívateľ';
+$lang['user_pass'] = 'Heslo';
+$lang['user_name'] = 'SkutoÄné meno';
+$lang['user_mail'] = 'Email';
+$lang['user_groups'] = 'Skupiny';
+$lang['field'] = 'Pole';
+$lang['value'] = 'Hodnota';
+$lang['add'] = 'Pridať';
+$lang['delete'] = 'Zmazať';
+$lang['delete_selected'] = 'Zmazať vybrané';
+$lang['edit'] = 'Zmeniť';
+$lang['edit_prompt'] = 'Zmeniť tohoto užívateľa';
+$lang['modify'] = 'Uložiť zmeny';
+$lang['search'] = 'Hľadať';
+$lang['search_prompt'] = 'Vykonať vyhľadávanie';
+$lang['clear'] = 'Vynulovať vyhľadávací filter';
+$lang['filter'] = 'Filter';
+$lang['summary'] = 'Zobrazenie užívateľov %1$d-%2$d z %3$d nájdených. %4$d užívateľov celkom.';
+$lang['nonefound'] = 'Žiadni užívatelia nenájdení. %d užívateľov celkom.';
+$lang['delete_ok'] = '%d užívateľov zmazaných';
+$lang['delete_fail'] = '%d chýb vymazania.';
+$lang['update_ok'] = 'Užívateľ úspešne zmenený';
+$lang['update_fail'] = 'Chyba zmeny užívateľa';
+$lang['update_exists'] = 'Chyba zmeny užívateľa, užívateľské meno (%s) už existuje (iné zmeny budú zaznamenané).';
+$lang['start'] = 'prvé';
+$lang['prev'] = 'predošlé';
+$lang['next'] = 'ÄalÅ¡ie';
+$lang['last'] = 'posledné';
+$lang['edit_usermissing'] = 'Vybraný užívateľ nebol nájdený, mohol byť zmazaný, alebo zmenený iným spôsobom.';
+$lang['user_notify'] = 'Upozorniť užívateľa';
+$lang['note_notify'] = 'NotifikaÄné e-maily iba vtedy, ak dostane užívateľ nové heslo';
+$lang['note_group'] = 'Noví užívatelia budú pridaní do východej skupiny (%s), ak nie je pre nich špecifikovaná iná skupina.';
+$lang['note_pass'] = 'Heslo bude vygenegované automaticky, ak bude pole prázdne a je zapnutá notifikácia používateľa.';
+$lang['add_ok'] = 'Používateľ úspešne pridaný';
+$lang['add_fail'] = 'Pridávanie užívateľa nebolo úspešné';
+$lang['notify_ok'] = 'NotifikaÄný e-mail bol poslaný';
+$lang['notify_fail'] = 'NotifikaÄný e-mail nemohol byÅ¥ poslaný';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/list.txt
new file mode 100644
index 000000000..6f15331e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/list.txt
@@ -0,0 +1,2 @@
+===== Zoznam užívateľov =====
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/add.txt
new file mode 100644
index 000000000..985fa607e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/add.txt
@@ -0,0 +1 @@
+===== Dodaj uporabnika ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/delete.txt
new file mode 100644
index 000000000..515b343e5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/delete.txt
@@ -0,0 +1 @@
+===== Izbriši uporabnika ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/edit.txt
new file mode 100644
index 000000000..23aeb0c3b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/edit.txt
@@ -0,0 +1 @@
+===== Uredi uporabnika ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/lang.php
new file mode 100644
index 000000000..e31f8ff1a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/lang.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Slovenian language file
+ *
+ * @author Dejan Levec <webphp@gmail.com>
+ * @author BoÅ¡tjan SeniÄar <senicar@gmail.com>
+ */
+$lang['user_id'] = 'Uporabnik';
+$lang['user_pass'] = 'Geslo';
+$lang['user_mail'] = 'Email';
+$lang['user_groups'] = 'Skupine';
+$lang['add'] = 'Dodaj';
+$lang['delete'] = 'Izbriši';
+$lang['delete_selected'] = 'Izbriši izbrano';
+$lang['edit'] = 'Uredi';
+$lang['modify'] = 'Shrani spremembe';
+$lang['search'] = 'Iskanje';
+$lang['prev'] = 'Prejšnji';
+$lang['next'] = 'Naslednji';
+$lang['last'] = 'Zadnji';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/list.txt
new file mode 100644
index 000000000..1aa8b7a7c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/list.txt
@@ -0,0 +1 @@
+===== Seznam uporabnikov ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/add.txt
new file mode 100644
index 000000000..1de9a50e4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/add.txt
@@ -0,0 +1 @@
+===== Додај кориÑника ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/delete.txt
new file mode 100644
index 000000000..9b50365be
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/delete.txt
@@ -0,0 +1 @@
+===== Обриши кориÑника ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/edit.txt
new file mode 100644
index 000000000..11e22e2f5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/edit.txt
@@ -0,0 +1 @@
+===== Измени кориÑника ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/intro.txt
new file mode 100644
index 000000000..6c6ac9a5c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/intro.txt
@@ -0,0 +1 @@
+====== Управљач кориÑницима ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/lang.php
new file mode 100644
index 000000000..ab64c925a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/lang.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * Serbian language file
+ *
+ * @author Иван Петровић petrovicivan@ubuntusrbija.org
+ * @author Ivan Petrovic <petrovicivan@ubuntusrbija.org>
+ */
+$lang['menu'] = 'Управљач кориÑницима';
+$lang['noauth'] = '(кориÑничка провера није доÑтупна)';
+$lang['nosupport'] = '(уптављање кориÑницима није подржано)';
+$lang['badauth'] = 'неиÑправан механизам провере';
+$lang['user_id'] = 'КориÑник';
+$lang['user_pass'] = 'Лозинка';
+$lang['user_name'] = 'Име и презиме';
+$lang['user_mail'] = 'Е-адреÑа';
+$lang['user_groups'] = 'Групе';
+$lang['field'] = 'Поље';
+$lang['value'] = 'ВредноÑÑ‚';
+$lang['add'] = 'Додај';
+$lang['delete'] = 'Обриши';
+$lang['delete_selected'] = 'Обриши одабране';
+$lang['edit'] = 'Измени';
+$lang['edit_prompt'] = 'Измени кориÑника';
+$lang['modify'] = 'Сачувај измене';
+$lang['search'] = 'Претрага';
+$lang['search_prompt'] = 'Изведи претрагу';
+$lang['clear'] = 'Поништи филтер претраге';
+$lang['filter'] = 'Филтер';
+$lang['summary'] = 'Приказ %1$d-%2$d од %3$d пронађена кориÑника. Укупно има %4$d кориÑника.';
+$lang['nonefound'] = 'Ðије пронађен кориÑник. Укупно има %d кориÑника.';
+$lang['delete_ok'] = '%d кориÑника је обриÑано';
+$lang['delete_fail'] = '%d бриÑања није уÑпело.';
+$lang['update_ok'] = 'КориÑнички налог је ажуриран';
+$lang['update_fail'] = 'КориÑнички налог није ажуриран';
+$lang['update_exists'] = 'Измена кориÑничког имена није уÑпела, наведени кориÑник (%s) већ поÑтоји (оÑтале измене ће бити примењене).';
+$lang['start'] = 'почетак';
+$lang['prev'] = 'претходна';
+$lang['next'] = 'Ñледећа';
+$lang['last'] = 'крај';
+$lang['edit_usermissing'] = 'Одабрани кориÑник не поÑтоји, наведено кориÑничко име је можда обриÑано или је измењено негде другде.';
+$lang['user_notify'] = 'ОбавеÑти кориÑника';
+$lang['note_notify'] = 'Потврдна порука ће бити поÑлата једино ако је кориÑнику додељена нова лозинка.';
+$lang['note_group'] = 'Ðови кориÑници ће бити додељени подразумеваној групи (%s) ако није другачије назначено.';
+$lang['note_pass'] = 'Ðко Ñте оÑтавили поље празно и укључили обавештавање кориÑника лозинка ће бити аутоматÑки генериÑана.';
+$lang['add_ok'] = 'КориÑник је уÑпешно додат';
+$lang['add_fail'] = 'Додавање кориÑника није уÑпело';
+$lang['notify_ok'] = 'Порука Ñа обавештењен је поÑлата';
+$lang['notify_fail'] = 'Порука Ñа обавештењен није поÑлата';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/list.txt
new file mode 100644
index 000000000..948444245
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/list.txt
@@ -0,0 +1 @@
+===== СпиÑак кориÑника ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/add.txt
new file mode 100644
index 000000000..2ff1ee640
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/add.txt
@@ -0,0 +1 @@
+===== Lägg till användare =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/delete.txt
new file mode 100644
index 000000000..5664a5906
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/delete.txt
@@ -0,0 +1 @@
+===== Radera användare =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/edit.txt
new file mode 100644
index 000000000..f1a7f4a22
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/edit.txt
@@ -0,0 +1 @@
+===== Redigera användare =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/intro.txt
new file mode 100644
index 000000000..bd13b8157
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/intro.txt
@@ -0,0 +1 @@
+====== Hantera användare ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/lang.php
new file mode 100644
index 000000000..cedd30d1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/lang.php
@@ -0,0 +1,58 @@
+<?php
+/**
+ * Swedish language file
+ *
+ * @author Per Foreby <per@foreby.se>
+ * @author Nicklas Henriksson <nicklas[at]nihe.se>
+ * @author HÃ¥kan Sandell <hakan.sandell[at]mydata.se>
+ * @author Dennis Karlsson
+ * @author Tormod Otter Johansson <tormod@latast.se>
+ * @author emil@sys.nu
+ * @author Pontus Bergendahl <pontus.bergendahl@gmail.com>
+ * @author Tormod Johansson tormod.otter.johansson@gmail.com
+ * @author Emil Lind <emil@sys.nu>
+ * @author Bogge Bogge <bogge@bogge.com>
+ * @author Peter Åström <eaustreum@gmail.com>
+ * @author HÃ¥kan Sandell <hakan.sandell@home.se>
+ */
+$lang['menu'] = 'Hantera användare';
+$lang['noauth'] = '(användarautentisering ej tillgänlig)';
+$lang['nosupport'] = '(användarhantering stödjs ej)';
+$lang['badauth'] = 'ogiltig autentiseringsmekanism';
+$lang['user_id'] = 'Användare';
+$lang['user_pass'] = 'Lösenord';
+$lang['user_name'] = 'Namn';
+$lang['user_mail'] = 'E-post';
+$lang['user_groups'] = 'Grupper';
+$lang['field'] = 'Fält';
+$lang['value'] = 'Värde';
+$lang['add'] = 'Lägg till';
+$lang['delete'] = 'Radera';
+$lang['delete_selected'] = 'Radera markerade';
+$lang['edit'] = 'Redigera';
+$lang['edit_prompt'] = 'Redigera användaren';
+$lang['modify'] = 'Spara ändringar';
+$lang['search'] = 'Sök';
+$lang['search_prompt'] = 'Utför sökning';
+$lang['clear'] = 'Återställ sökfilter';
+$lang['filter'] = 'Filter';
+$lang['summary'] = 'Visar användare %1$d-%2$d av %3$d funna. %4$d användare totalt.';
+$lang['nonefound'] = 'Inga användare hittades. %d användare totalt.';
+$lang['delete_ok'] = '%d användare raderade';
+$lang['delete_fail'] = '%d kunde inte raderas.';
+$lang['update_ok'] = 'Användaren uppdaterad';
+$lang['update_fail'] = 'Användaruppdatering misslyckades';
+$lang['update_exists'] = 'Kunde inte ändra användarnamn,, det angivna användarnamnet (%s) finns redan (andra ändringar kommer att utföras).';
+$lang['start'] = 'start';
+$lang['prev'] = 'föregående';
+$lang['next'] = 'nästa';
+$lang['last'] = 'sista';
+$lang['edit_usermissing'] = 'Vald användare hittades inte. Den angivna användaren kan ha blivit raderad, eller ändrats någon annanstans.';
+$lang['user_notify'] = 'Meddela användaren';
+$lang['note_notify'] = 'E-postmeddelanden skickas bara om användaren har fått ett nytt lösenord.';
+$lang['note_group'] = 'Nya användare läggs till i standardgruppen (%s) om inga grupper anges.';
+$lang['note_pass'] = 'Lösenordet kommer att autogenereras om fältet är tomt och e-postmeddelanden till användaren är påslaget.';
+$lang['add_ok'] = 'Användaren tillagd';
+$lang['add_fail'] = 'Användare kunde inte läggas till';
+$lang['notify_ok'] = 'E-postmeddelande skickat';
+$lang['notify_fail'] = 'E-postmeddelande kunde inte skickas';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/list.txt
new file mode 100644
index 000000000..e07c45277
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/list.txt
@@ -0,0 +1 @@
+===== Användarlista =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/add.txt
new file mode 100644
index 000000000..6a5f09855
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/add.txt
@@ -0,0 +1 @@
+====== เพิ่มผู้ใช้ ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/delete.txt
new file mode 100644
index 000000000..4dbc82bf9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/delete.txt
@@ -0,0 +1 @@
+====== ลบผู้ใช้ ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/edit.txt
new file mode 100644
index 000000000..c36e8ddf8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/edit.txt
@@ -0,0 +1 @@
+====== à¹à¸à¹‰à¹„ขผู้ใช้ ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/intro.txt
new file mode 100644
index 000000000..0f6a0c3b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/intro.txt
@@ -0,0 +1 @@
+====== ตัวจัดà¸à¸²à¸£à¸œà¸¹à¹‰à¹ƒà¸Šà¹‰ ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/lang.php
new file mode 100644
index 000000000..eb88d7b91
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/lang.php
@@ -0,0 +1,47 @@
+<?php
+/**
+ * Thai language file
+ *
+ * @author Komgrit Niyomrath <n.komgrit@gmail.com>
+ * @author Kittithat Arnontavilas mrtomyum@gmail.com
+ * @author Kittithat Arnontavilas <mrtomyum@gmail.com>
+ * @author Thanasak Sompaisansin <jombthep@gmail.com>
+ */
+$lang['menu'] = 'ตัวจัดà¸à¸²à¸£à¸šà¸±à¸à¸Šà¸µà¸œà¸¹à¹‰à¹ƒà¸Šà¹‰';
+$lang['user_id'] = 'ผู้ใช้';
+$lang['user_pass'] = 'รหัสผ่าน';
+$lang['user_name'] = 'ชื่อจริง';
+$lang['user_mail'] = 'อีเมล';
+$lang['user_groups'] = 'à¸à¸¥à¸¸à¹ˆà¸¡';
+$lang['field'] = 'ฟิลด์';
+$lang['value'] = 'ค่า';
+$lang['add'] = 'เพิ่ม';
+$lang['delete'] = 'ลบ';
+$lang['delete_selected'] = 'ลบที่เลือà¸';
+$lang['edit'] = 'à¹à¸à¹‰à¹„ข';
+$lang['edit_prompt'] = 'à¹à¸à¹‰à¹„ขผู้ใช้คนนี้';
+$lang['modify'] = 'บันทึà¸à¸à¸²à¸£à¹à¸à¹‰à¹„ข';
+$lang['search'] = 'สืบค้น';
+$lang['search_prompt'] = 'ทำà¸à¸²à¸£à¸ªà¸·à¸šà¸„้น';
+$lang['clear'] = 'รีเซ็ทตัวà¸à¸£à¸­à¸‡à¸„ำค้น';
+$lang['filter'] = 'ตัวà¸à¸£à¸­à¸‡';
+$lang['summary'] = 'à¹à¸ªà¸”งผู้ใช้ %1$d-%2$d จาà¸à¸—ี่พบ %3$d คน, จาà¸à¸—ั้งหมด %4$d คน';
+$lang['nonefound'] = 'ไม่พบผู้ใช้ จาà¸à¸—ั้งหมด %d คน';
+$lang['delete_ok'] = 'ลบชื่อผู้ใช้ %d คน';
+$lang['delete_fail'] = 'ไม่สามารถลบได้ %d คน';
+$lang['update_ok'] = 'ปรับปรุงข้อมูลผู้ใช้ สำเร็จ';
+$lang['update_fail'] = 'ปรับปรุงข้อมูลผู้ใช้ **ไม่สำเร็จ**';
+$lang['update_exists'] = 'ไม่สามารถเปลี่นชื่อผู้ใช้ได้ ชื่อผู้ใช้ที่ระบุ (%s) มีอยู่à¹à¸¥à¹‰à¸§ (à¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸™à¸™à¹à¸›à¸¥à¸‡à¸­à¸·à¹ˆà¸™à¹† ยังคงทำได้)';
+$lang['start'] = 'เริ่ม';
+$lang['prev'] = 'à¸à¹ˆà¸­à¸™à¸«à¸™à¹‰à¸²';
+$lang['next'] = 'ถัดไป';
+$lang['last'] = 'สุดท้าย';
+$lang['edit_usermissing'] = 'หาผู้ใช้ที่เลือà¸à¹„ม่พบ, ชื่อผุ้ใช้ที่ระบุอาจจะถูà¸à¸¥à¸š หรือเปลี่ยนเป็นอย่างอื่น';
+$lang['user_notify'] = 'à¹à¸ˆà¹‰à¸‡à¹€à¸•à¸·à¸­à¸™à¸œà¸¹à¹‰à¹ƒà¸Šà¹‰';
+$lang['note_notify'] = 'จดหมายà¹à¸ˆà¹‰à¸‡à¹€à¸•à¸·à¸­à¸™à¸–ูà¸à¸ªà¹ˆà¸‡à¸à¹‡à¸•à¹ˆà¸­à¹€à¸¡à¸·à¹ˆà¸­à¸œà¸¹à¹‰à¹ƒà¸Šà¹‰à¹„ด้รับมอบรหัสผ่านใหม่';
+$lang['note_group'] = 'ผู้ใช้ใหม่จะถูà¸à¹€à¸žà¸´à¹ˆà¸¡à¹€à¸‚้าไปยังà¸à¸¥à¸¸à¹ˆà¸¡à¸›à¸£à¸´à¸¢à¸²à¸¢ (%s) หาà¸à¸¡à¸´à¹„ด้ระบุà¸à¸¥à¸¸à¹ˆà¸¡à¹€à¸­à¸²à¹„ว้';
+$lang['note_pass'] = 'รหัสผ่านจะถูà¸à¸ªà¸£à¹‰à¸²à¸‡à¹‚ดยอัตโนมัติ ถ้าเว้นว่างช่องà¸à¸£à¸­à¸ à¹à¸¥à¸°à¹€à¸›à¸´à¸”à¸à¸²à¸£à¹à¸ˆà¹‰à¸‡à¹€à¸•à¸·à¸­à¸™à¸œà¸¹à¹‰à¹ƒà¸Šà¹‰à¹€à¸­à¸²à¹„ว้';
+$lang['add_ok'] = 'à¸à¸²à¸£à¹€à¸žà¸´à¹ˆà¸¡à¸œà¸¹à¹‰à¹ƒà¸Šà¹‰à¸ªà¸³à¹€à¸£à¹‡à¸ˆ';
+$lang['add_fail'] = 'à¸à¸²à¸£à¹€à¸žà¸´à¹ˆà¸¡à¸œà¸¹à¹‰à¹ƒà¸Šà¹‰à¸¥à¹‰à¸¡à¹€à¸«à¸¥à¸§';
+$lang['notify_ok'] = 'ส่งจดหมายà¹à¸ˆà¹‰à¸‡à¹€à¸•à¸·à¸­à¸™à¹„ปà¹à¸¥à¹‰à¸§';
+$lang['notify_fail'] = 'ไม่สามารถส่งจดหมายà¹à¸ˆà¹‰à¸‡à¹€à¸•à¸·à¸­à¸™';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/list.txt
new file mode 100644
index 000000000..fdf65b555
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/list.txt
@@ -0,0 +1 @@
+====== รายชื่อผู้ใช้ ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/add.txt
new file mode 100644
index 000000000..beedc0be0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/add.txt
@@ -0,0 +1 @@
+===== Kullanıcı ekleme ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/delete.txt
new file mode 100644
index 000000000..adb8e91e4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/delete.txt
@@ -0,0 +1 @@
+===== Kullanıcı silme ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/edit.txt
new file mode 100644
index 000000000..d9f3b7125
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/edit.txt
@@ -0,0 +1 @@
+===== Kullanıcı Düzenleme ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/intro.txt
new file mode 100644
index 000000000..1edcb2ce0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/intro.txt
@@ -0,0 +1 @@
+====== Kullanıcı Yöneticisi ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/lang.php
new file mode 100644
index 000000000..28127d9d0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/lang.php
@@ -0,0 +1,51 @@
+<?php
+/**
+ * Turkish language file
+ *
+ * @author Aydın Coşkuner aydinweb@gmail.com
+ * @author Aydın Coşkuner <aydinweb@gmail.com>
+ * @author yavuzselim@gmail.com
+ * @author Cihan Kahveci kahvecicihan@gmail.com
+ * @author Yavuz Selim <yavuzselim@gmail.com>
+ */
+$lang['menu'] = 'Kullanıcı Yönetimi';
+$lang['noauth'] = '(kullanıcı onaylaması yoktur)';
+$lang['nosupport'] = '(kullanıcı yönetimi desteklenmemektedir)';
+$lang['badauth'] = 'yanlış onaylama metodu';
+$lang['user_id'] = 'Kullanıcı';
+$lang['user_pass'] = 'Åžifre';
+$lang['user_name'] = 'Gerçek İsim';
+$lang['user_mail'] = 'Email';
+$lang['user_groups'] = 'Gruplar';
+$lang['field'] = 'Alan';
+$lang['value'] = 'DeÄŸer';
+$lang['add'] = 'Ekle';
+$lang['delete'] = 'Sil';
+$lang['delete_selected'] = 'Seçilenleri Sil';
+$lang['edit'] = 'Düzenle';
+$lang['edit_prompt'] = 'Bu kullanıcıyı düzenle';
+$lang['modify'] = 'DeÄŸiÅŸiklikleri kaydet';
+$lang['search'] = 'Arama';
+$lang['search_prompt'] = 'Aramayı Gerçekleştir';
+$lang['clear'] = 'Arama ayarlarını sıfırla';
+$lang['filter'] = 'Filtre';
+$lang['summary'] = 'Bulunan %3$d kullanıcının %1$d-%2$d gösterilmektedir. Toplam %4$d kullanıcı bulunmaktadır.';
+$lang['nonefound'] = 'Hiç kullanıcı bulunamadı. Toplam %d kullanıcı bulunmaktadır.';
+$lang['delete_ok'] = '%d kullanıcılar silindi';
+$lang['delete_fail'] = '%d silinemedi.';
+$lang['update_ok'] = 'Kullanıcı başarı ile güncelleştirildi';
+$lang['update_fail'] = 'Kullanıcı güncelleştirilemedi';
+$lang['update_exists'] = 'Kullanıcı adı değiştirilemedi. Belirtilen kullanıcı adı (%s) zaten bulunmaktadır (yapılan diğer değişiklikler uygulanacaktır).';
+$lang['start'] = 'baÅŸla';
+$lang['prev'] = 'önceki';
+$lang['next'] = 'sonraki';
+$lang['last'] = 'sonuncu';
+$lang['edit_usermissing'] = 'Seçili kullanıcılar bulunamadı, belirtilen kullanıcı silinmiş ya da değiştirilmiş olabilir.';
+$lang['user_notify'] = 'Kullanıcıyı bilgilendir';
+$lang['note_notify'] = 'Bilgilendirme e-postaları sadece kullanıcıya yeni bir parola verildiğinde gönderilmektedir.';
+$lang['note_group'] = 'Yeni kullanıcılar bir grup belirtilmezse varsayılan (%s) gruba eklenecektir.';
+$lang['note_pass'] = 'Eğer alan boş bırakılırsa parola otomatik oluşturulacaktır ve kullanıcı bilgilendirme etkinleştirilecektir. ';
+$lang['add_ok'] = 'Kullanıcı başarı ile eklendi';
+$lang['add_fail'] = 'Kullanıcı ekleme başarısız';
+$lang['notify_ok'] = 'Bildirim emaili gönderildi';
+$lang['notify_fail'] = 'Bildirim emaili gönderilemedi';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/list.txt
new file mode 100644
index 000000000..2314eb22f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/list.txt
@@ -0,0 +1 @@
+===== Kullanıcı Listesi ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/add.txt
new file mode 100644
index 000000000..bc3469714
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/add.txt
@@ -0,0 +1 @@
+===== Додати кориÑтувача =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/delete.txt
new file mode 100644
index 000000000..739340b19
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/delete.txt
@@ -0,0 +1 @@
+===== Ð’Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ ÐºÐ¾Ñ€Ð¸Ñтувача =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/edit.txt
new file mode 100644
index 000000000..e359f748c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/edit.txt
@@ -0,0 +1 @@
+===== Змінити кориÑтувача =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/intro.txt
new file mode 100644
index 000000000..b658affe5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/intro.txt
@@ -0,0 +1 @@
+====== ÐšÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ¾Ñ€Ð¸Ñтувачами ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/lang.php
new file mode 100644
index 000000000..7e9f9167e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/lang.php
@@ -0,0 +1,52 @@
+<?php
+/**
+ * ukrainian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Oleksiy Voronin <ovoronin@gmail.com>
+ * @author serg_stetsuk@ukr.net
+ * @author okunia@gmail.com
+ * @author Oleksandr Kunytsia <okunia@gmail.com>
+ * @author Uko uko@uar.net
+ */
+$lang['menu'] = 'ÐšÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ¾Ñ€Ð¸Ñтувачами';
+$lang['noauth'] = '(Ð°Ð²Ñ‚ÐµÐ½Ñ‚Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ ÐºÐ¾Ñ€Ð¸Ñтувачів не доÑтупна)';
+$lang['nosupport'] = '(ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ¾Ñ€Ð¸Ñтувачами не підтримуєтьÑÑ)';
+$lang['badauth'] = 'невірний механізм автентифікації';
+$lang['user_id'] = 'Ð†Ð¼â€™Ñ ÐºÐ¾Ñ€Ð¸Ñтувача';
+$lang['user_pass'] = 'Пароль';
+$lang['user_name'] = 'Повне ім’Ñ';
+$lang['user_mail'] = 'E-mail';
+$lang['user_groups'] = 'Групи';
+$lang['field'] = 'Поле';
+$lang['value'] = 'ЗначеннÑ';
+$lang['add'] = 'Додати';
+$lang['delete'] = 'Видалити';
+$lang['delete_selected'] = 'Видалити вибраних';
+$lang['edit'] = 'Змінити';
+$lang['edit_prompt'] = 'Змінити цього кориÑтувача';
+$lang['modify'] = 'Зберегти зміни';
+$lang['search'] = 'Пошук';
+$lang['search_prompt'] = 'Шукати';
+$lang['clear'] = 'ОчиÑтити фільтр пошуку';
+$lang['filter'] = 'Фільтр';
+$lang['summary'] = 'Показано кориÑтувачі %1$d-%2$d з %3$d знайдених. Ð’Ñього кориÑтувачів: %4$d.';
+$lang['nonefound'] = 'Ðе знайдено жодного кориÑтувача. Ð’Ñього кориÑтувачів: %d.';
+$lang['delete_ok'] = 'Видалено кориÑтувачів: %d';
+$lang['delete_fail'] = 'Ðе вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ %d.';
+$lang['update_ok'] = 'Дані кориÑтувача оновлено';
+$lang['update_fail'] = 'Ðе вдалоÑÑ Ð¾Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ дані кориÑтувача';
+$lang['update_exists'] = 'Ðе вдалоÑÑ Ð·Ð¼Ñ–Ð½Ð¸Ñ‚Ð¸ Ñ–Ð¼â€™Ñ ÐºÐ¾Ñ€Ð¸Ñтувача, такий кориÑтувач (%s) вже Ñ–Ñнує (вÑÑ– інші зміни будуть заÑтоÑовані).';
+$lang['start'] = 'на початок';
+$lang['prev'] = 'назад';
+$lang['next'] = 'вперед';
+$lang['last'] = 'в кінець';
+$lang['edit_usermissing'] = 'Обраного кориÑтувача не знайдено, можливо його було вилучено або змінено ще деÑÑŒ.';
+$lang['user_notify'] = 'Повідомити кориÑтувача';
+$lang['note_notify'] = 'ЛиÑти з повідомленнÑми відÑилаютьÑÑ Ð»Ð¸ÑˆÐµ у випадку видачі нового Ð¿Ð°Ñ€Ð¾Ð»Ñ ÐºÐ¾Ñ€Ð¸Ñтувачу.';
+$lang['note_group'] = 'Якщо не визначено групи, то нові кориÑтувачі будуть автоматично додані до групи за замовчуваннÑм (%s).';
+$lang['note_pass'] = 'Пароль буде згенеровано автоматично, Ñкщо поле Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð½Ðµ заповнено Ñ– увімкнено прапорець "повідомити кориÑтувача".';
+$lang['add_ok'] = 'КориÑтувача додано';
+$lang['add_fail'] = 'Ðеможливо додати кориÑтувача';
+$lang['notify_ok'] = 'ЛиÑта з повідомленнÑм надіÑлано';
+$lang['notify_fail'] = 'Ðеможливо виÑлати лиÑта з повідомленнÑм';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/list.txt
new file mode 100644
index 000000000..76013a9b7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/list.txt
@@ -0,0 +1 @@
+===== СпиÑок кориÑтувачів =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/add.txt
new file mode 100644
index 000000000..6e25f1719
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/add.txt
@@ -0,0 +1 @@
+===== 增加帳號 =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/delete.txt
new file mode 100644
index 000000000..1a29ba349
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/delete.txt
@@ -0,0 +1 @@
+===== 刪除帳號 =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/edit.txt
new file mode 100644
index 000000000..ec1c5d5ec
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/edit.txt
@@ -0,0 +1 @@
+===== 修改帳號 =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/intro.txt
new file mode 100644
index 000000000..9c499d862
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/intro.txt
@@ -0,0 +1 @@
+====== 帳號管ç†å“¡(User Manager) ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/lang.php
new file mode 100644
index 000000000..26c87205d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/lang.php
@@ -0,0 +1,52 @@
+<?php
+/**
+ * English language file
+ *
+ * @author chinsan <chinsan.tw@gmail.com>
+ * @author Li-Jiun Huang <ljhuang.tw@gmail.com>
+ * @author http://www.chinese-tools.com/tools/converter-simptrad.html
+ * @author Wayne San <waynesan@zerozone.tw>
+ * @author Li-Jiun Huang <ljhuang.tw@gmai.com>
+ * @author Cheng-Wei Chien <e.cwchien@gmail.com>
+ */
+$lang['menu'] = '帳號管ç†å“¡(User Manager)';
+$lang['noauth'] = '(帳號èªè­‰å°šæœªé–‹æ”¾)';
+$lang['nosupport'] = '(å°šä¸æ”¯æ´å¸³è™Ÿç®¡ç†)';
+$lang['badauth'] = '錯誤的èªè­‰æ©Ÿåˆ¶';
+$lang['user_id'] = '帳號';
+$lang['user_pass'] = '密碼';
+$lang['user_name'] = '真實姓å';
+$lang['user_mail'] = 'E-mail';
+$lang['user_groups'] = '群組';
+$lang['field'] = '欄ä½';
+$lang['value'] = '設定值';
+$lang['add'] = '增加';
+$lang['delete'] = '刪除';
+$lang['delete_selected'] = '刪除所é¸çš„';
+$lang['edit'] = '修改';
+$lang['edit_prompt'] = '修改該帳號';
+$lang['modify'] = '儲存變更';
+$lang['search'] = 'æœå°‹';
+$lang['search_prompt'] = '開始æœå°‹';
+$lang['clear'] = 'é‡æ–°è¨­å®šæœå°‹çš„æ¢ä»¶';
+$lang['filter'] = '篩é¸æ¢ä»¶(Filter)';
+$lang['summary'] = '顯示帳號 %1$d 至 %2$d å…± %3$d 筆符åˆ. 總共有 %4$d 個帳號';
+$lang['nonefound'] = '找ä¸åˆ°è©²ç”¨æˆ¶(å…± %d 帳號)。';
+$lang['delete_ok'] = '已刪除 %d 個帳號';
+$lang['delete_fail'] = '%d 個帳號刪除失敗';
+$lang['update_ok'] = 'æˆåŠŸæ›´æ–°è©²å¸³è™Ÿ';
+$lang['update_fail'] = '更新該帳號時失敗';
+$lang['update_exists'] = '變更帳號å稱 (%s) 時失敗,應該是已有åŒå的帳號,ä¸éŽé™¤äº†å¸³è™Ÿå稱之外的其他修改ä»æœƒå„²å­˜ã€‚';
+$lang['start'] = '開始';
+$lang['prev'] = '上一步';
+$lang['next'] = '下一步';
+$lang['last'] = '最後步驟';
+$lang['edit_usermissing'] = '找ä¸åˆ°æ‰€é¸çš„帳號,該帳號å¯èƒ½å·²ç¶“被刪除或是改為其他å稱喔。';
+$lang['user_notify'] = '通知使用者';
+$lang['note_notify'] = '通知信åªæœ‰åœ¨çµ¦äºˆä½¿ç”¨è€…新密碼時寄é€ã€‚';
+$lang['note_group'] = '如果沒有指定群組,新使用者將會被加入到é è¨­ç¾¤çµ„(%s)當中。';
+$lang['note_pass'] = '如果沒有輸入這個欄ä½è€Œä¸”有勾é¸é€šçŸ¥ä½¿ç”¨è€…,則會自動產生一組密碼。';
+$lang['add_ok'] = '新增使用者æˆåŠŸ';
+$lang['add_fail'] = '新增使用者失敗';
+$lang['notify_ok'] = '通知信已寄出';
+$lang['notify_fail'] = '通知信無法被寄出';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/list.txt
new file mode 100644
index 000000000..1e539bd41
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/list.txt
@@ -0,0 +1 @@
+===== 帳號清單 =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/add.txt
new file mode 100644
index 000000000..fd3b1e581
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/add.txt
@@ -0,0 +1 @@
+===== 添加用户 =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/delete.txt
new file mode 100644
index 000000000..dc6b7fcc7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/delete.txt
@@ -0,0 +1 @@
+===== 删除用户 =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/edit.txt
new file mode 100644
index 000000000..83b72dff7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/edit.txt
@@ -0,0 +1 @@
+===== 编辑用户 =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/intro.txt
new file mode 100644
index 000000000..5f254be72
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/intro.txt
@@ -0,0 +1 @@
+====== 用户管ç†å™¨ ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/lang.php
new file mode 100644
index 000000000..55044ce65
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/lang.php
@@ -0,0 +1,51 @@
+<?php
+/**
+ * English language file
+ *
+ * @author ZDYX <zhangduyixiong@gmail.com>
+ * @author http://www.chinese-tools.com/tools/converter-tradsimp.html
+ * @author George Sheraton guxd@163.com
+ * @author Simon zhan <simonzhan@21cn.com>
+ * @author mr.jinyi@gmail.com
+ */
+$lang['menu'] = '用户管ç†å™¨';
+$lang['noauth'] = '(用户认è¯ä¸å¯ç”¨ï¼‰';
+$lang['nosupport'] = '(用户管ç†ä¸æ”¯æŒï¼‰';
+$lang['badauth'] = 'éžæ³•çš„认è¯ç»“æž„';
+$lang['user_id'] = '用户å';
+$lang['user_pass'] = '密ç ';
+$lang['user_name'] = '真实姓å';
+$lang['user_mail'] = 'Email';
+$lang['user_groups'] = '组 *';
+$lang['field'] = 'æ ç›®';
+$lang['value'] = '值';
+$lang['add'] = '添加';
+$lang['delete'] = '删除';
+$lang['delete_selected'] = '删除选中的';
+$lang['edit'] = '编辑';
+$lang['edit_prompt'] = '编辑该用户';
+$lang['modify'] = 'ä¿å­˜æ›´æ”¹';
+$lang['search'] = 'æœç´¢';
+$lang['search_prompt'] = '进行æœç´¢';
+$lang['clear'] = 'é‡ç½®æœç´¢è¿‡æ»¤å™¨';
+$lang['filter'] = '过滤器';
+$lang['summary'] = '找到 %3$d å用户,显示其中第 %1$d 至 %2$d ä½ç”¨æˆ·ã€‚æ•°æ®åº“中共有 %4$d å用户。';
+$lang['nonefound'] = '没有找到用户。数æ®åº“中共有 %d å用户。';
+$lang['delete_ok'] = '用户 %d 已删除';
+$lang['delete_fail'] = '用户 %d 删除失败。';
+$lang['update_ok'] = '用户更新æˆåŠŸ';
+$lang['update_fail'] = '用户更新失败';
+$lang['update_exists'] = '用户å更改失败,您指定的用户å(%s)已存在(其他更改将立å³ç”Ÿæ•ˆï¼‰ã€‚';
+$lang['start'] = '第一页';
+$lang['prev'] = 'å‰ä¸€é¡µ';
+$lang['next'] = 'åŽä¸€é¡µ';
+$lang['last'] = '最åŽä¸€é¡µ';
+$lang['edit_usermissing'] = '您指定的用户没有找到,å¯èƒ½ç”¨æˆ·å·²è¢«åˆ é™¤æˆ–用户å已更改。';
+$lang['user_notify'] = '通知用户';
+$lang['note_notify'] = '通知邮件åªæœ‰åœ¨ç”¨æˆ·èŽ·å¾—新密ç æ—¶æ‰ä¼šå‘é€ã€‚';
+$lang['note_group'] = '* 如果没有指定组,新用户将被添加到默认的组(%s)中。';
+$lang['note_pass'] = '如果输入框留空则自动生æˆå£ä»¤ï¼Œå¹¶ä¼šé€šçŸ¥ç”¨æˆ·ã€‚';
+$lang['add_ok'] = '用户添加æˆåŠŸ';
+$lang['add_fail'] = '用户添加失败';
+$lang['notify_ok'] = '通知邮件已å‘é€';
+$lang['notify_fail'] = '通知邮件无法å‘é€';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/list.txt
new file mode 100644
index 000000000..e62a85bd0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/list.txt
@@ -0,0 +1 @@
+===== 用户列表 =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/script.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/script.js
new file mode 100644
index 000000000..875e4297b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/script.js
@@ -0,0 +1,9 @@
+/**
+ * Add JavaScript confirmation to the User Delete button
+ */
+function usrmgr_delconfirm(){
+ if(DOKUid('usrmgr__del')){
+ addEvent( DOKUid('usrmgr__del'),'click',function(){ return confirm(reallyDel); } );
+ }
+};
+addInitEvent(usrmgr_delconfirm);
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/style.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/style.css
new file mode 100644
index 000000000..ff8e5d9d1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/style.css
@@ -0,0 +1,20 @@
+/* User Manager specific styles */
+#user__manager tr.disabled {
+ color: #6f6f6f;
+ background: #e4e4e4;
+}
+#user__manager tr.user_info {
+ vertical-align: top;
+}
+#user__manager div.edit_user {
+ width: 46%;
+ float: left;
+}
+#user__manager table {
+ margin-bottom: 1em;
+}
+#user__manager input.button[disabled] {
+ color: #ccc!important;
+ border-color: #ccc!important;
+}
+/* IE won't understand but doesn't require it */
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/scripts/ajax.js b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/ajax.js
new file mode 100644
index 000000000..a2a48a996
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/ajax.js
@@ -0,0 +1,68 @@
+/**
+ * AJAX functions for the pagename quicksearch
+ *
+ * We're using a global object with self referencing methods
+ * here to make callbacks work
+ *
+ * @license GPL2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+//prepare class
+function ajax_qsearch_class(){
+ this.sack = null;
+ this.inObj = null;
+ this.outObj = null;
+ this.timer = null;
+}
+
+//create global object and add functions
+var ajax_qsearch = new ajax_qsearch_class();
+ajax_qsearch.sack = new sack(DOKU_BASE + 'lib/exe/ajax.php');
+ajax_qsearch.sack.AjaxFailedAlert = '';
+ajax_qsearch.sack.encodeURIString = false;
+
+ajax_qsearch.init = function(inID,outID){
+ ajax_qsearch.inObj = document.getElementById(inID);
+ ajax_qsearch.outObj = document.getElementById(outID);
+
+ // objects found?
+ if(ajax_qsearch.inObj === null){ return; }
+ if(ajax_qsearch.outObj === null){ return; }
+
+ // attach eventhandler to search field
+ addEvent(ajax_qsearch.inObj,'keyup',ajax_qsearch.call);
+
+ // attach eventhandler to output field
+ addEvent(ajax_qsearch.outObj,'click',function(){ ajax_qsearch.outObj.style.display='none'; });
+};
+
+ajax_qsearch.clear = function(){
+ ajax_qsearch.outObj.style.display = 'none';
+ ajax_qsearch.outObj.innerHTML = '';
+ if(ajax_qsearch.timer !== null){
+ window.clearTimeout(ajax_qsearch.timer);
+ ajax_qsearch.timer = null;
+ }
+};
+
+ajax_qsearch.exec = function(){
+ ajax_qsearch.clear();
+ var value = ajax_qsearch.inObj.value;
+ if(value === ''){ return; }
+ ajax_qsearch.sack.runAJAX('call=qsearch&q='+encodeURI(value));
+};
+
+ajax_qsearch.sack.onCompletion = function(){
+ var data = ajax_qsearch.sack.response;
+ if(data === ''){ return; }
+
+ ajax_qsearch.outObj.innerHTML = data;
+ ajax_qsearch.outObj.style.display = 'block';
+};
+
+ajax_qsearch.call = function(){
+ ajax_qsearch.clear();
+ ajax_qsearch.timer = window.setTimeout("ajax_qsearch.exec()",500);
+};
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/scripts/cookie.js b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/cookie.js
new file mode 100644
index 000000000..d7e6b3550
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/cookie.js
@@ -0,0 +1,112 @@
+/**
+ * Handles the cookie used by several JavaScript functions
+ *
+ * Only a single cookie is written and read. You may only save
+ * sime name-value pairs - no complex types!
+ *
+ * You should only use the getValue and setValue methods
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+DokuCookie = {
+ data: Array(),
+ name: 'DOKU_PREFS',
+
+ /**
+ * Save a value to the cookie
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ setValue: function(key,val){
+ DokuCookie.init();
+ DokuCookie.data[key] = val;
+
+ // prepare expire date
+ var now = new Date();
+ DokuCookie.fixDate(now);
+ now.setTime(now.getTime() + 365 * 24 * 60 * 60 * 1000); //expire in a year
+
+ //save the whole data array
+ var text = '';
+ for(var key in DokuCookie.data){
+ if (!DokuCookie.data.hasOwnProperty(key)) continue;
+ text += '#'+escape(key)+'#'+DokuCookie.data[key];
+ }
+ DokuCookie.setCookie(DokuCookie.name,text.substr(1),now,DOKU_BASE);
+ },
+
+ /**
+ * Get a Value from the Cookie
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ getValue: function(key){
+ DokuCookie.init();
+ return DokuCookie.data[key];
+ },
+
+ /**
+ * Loads the current set cookie
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ init: function(){
+ if(DokuCookie.data.length) return;
+ var text = DokuCookie.getCookie(DokuCookie.name);
+ if(text){
+ var parts = text.split('#');
+ for(var i=0; i<parts.length; i+=2){
+ DokuCookie.data[unescape(parts[i])] = unescape(parts[i+1]);
+ }
+ }
+ },
+
+ /**
+ * This sets a cookie by JavaScript
+ *
+ * @link http://www.webreference.com/js/column8/functions.html
+ */
+ setCookie: function(name, value, expires, path, domain, secure) {
+ var curCookie = name + "=" + escape(value) +
+ ((expires) ? "; expires=" + expires.toGMTString() : "") +
+ ((path) ? "; path=" + path : "") +
+ ((domain) ? "; domain=" + domain : "") +
+ ((secure) ? "; secure" : "");
+ document.cookie = curCookie;
+ },
+
+ /**
+ * This reads a cookie by JavaScript
+ *
+ * @link http://www.webreference.com/js/column8/functions.html
+ */
+ getCookie: function(name) {
+ var dc = document.cookie;
+ var prefix = name + "=";
+ var begin = dc.indexOf("; " + prefix);
+ if (begin == -1) {
+ begin = dc.indexOf(prefix);
+ if (begin !== 0){ return null; }
+ } else {
+ begin += 2;
+ }
+ var end = document.cookie.indexOf(";", begin);
+ if (end == -1){
+ end = dc.length;
+ }
+ return unescape(dc.substring(begin + prefix.length, end));
+ },
+
+ /**
+ * This is needed for the cookie functions
+ *
+ * @link http://www.webreference.com/js/column8/functions.html
+ */
+ fixDate: function(date) {
+ var base = new Date(0);
+ var skew = base.getTime();
+ if (skew > 0){
+ date.setTime(date.getTime() - skew);
+ }
+ }
+};
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/scripts/drag.js b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/drag.js
new file mode 100644
index 000000000..908ab670c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/drag.js
@@ -0,0 +1,99 @@
+/**
+ * Makes a DOM object draggable
+ *
+ * This is currently for movable DOM dialogs only. If needed it could be
+ * extended to execute callbacks on special events...
+ *
+ * @link http://nofunc.org/Drag_Drop/
+ */
+var drag = {
+ obj: null,
+ handle: null,
+ oX: 0, // object X position
+ oY: 0, // object Y position
+ eX: 0, // event X delta
+ eY: 0, // event Y delta
+
+ /**
+ * Attaches the needed handlers to the given object
+ *
+ * This can be called for multiple objects, the right one is later
+ * determined from the event itself. The handle is optional
+ *
+ * @param DOMObject obj The object that should be draggable
+ * @param DOMObject handle A handle on which the obj can be dragged
+ */
+ attach: function (obj,handle) {
+ if(handle){
+ handle.dragobject = obj;
+ addEvent(DOKUid(handle),'mousedown',drag.start);
+ }else{
+ addEvent(DOKUid(obj),'mousedown',drag.start);
+ }
+ },
+
+ /**
+ * Starts the dragging operation
+ */
+ start: function (e){
+ drag.handle = e.target;
+ if(drag.handle.dragobject){
+ drag.obj = drag.handle.dragobject;
+ }else{
+ drag.obj = drag.handle;
+ }
+
+ drag.handle.className += ' ondrag';
+ drag.obj.className += ' ondrag';
+
+ drag.oX = parseInt(drag.obj.style.left);
+ drag.oY = parseInt(drag.obj.style.top);
+ drag.eX = drag.evX(e);
+ drag.eY = drag.evY(e);
+
+ addEvent(document,'mousemove',drag.drag);
+ addEvent(document,'mouseup',drag.stop);
+
+ e.preventDefault();
+ e.stopPropagation();
+ return false;
+ },
+
+ /**
+ * Ends the dragging operation
+ */
+ stop: function(){
+ drag.handle.className = drag.handle.className.replace(/ ?ondrag/,'');
+ drag.obj.className = drag.obj.className.replace(/ ?ondrag/,'');
+ removeEvent(document,'mousemove',drag.drag);
+ removeEvent(document,'mouseup',drag.stop);
+ drag.obj = null;
+ drag.handle = null;
+ },
+
+ /**
+ * Moves the object during the dragging operation
+ */
+ drag: function(e) {
+ if(drag.obj) {
+ drag.obj.style.top = (drag.evY(e)+drag.oY-drag.eY+'px');
+ drag.obj.style.left = (drag.evX(e)+drag.oX-drag.eX+'px');
+ }
+ },
+
+ /**
+ * Returns the X position of the given event.
+ */
+ evX: function(e){
+ return (e.pageX) ? e.pageX : e.clientX + document.body.scrollTop; //fixme shouldn't this be scrollLeft?
+ },
+
+ /**
+ * Returns the Y position of the given event.
+ */
+ evY: function(e){
+ return (e.pageY) ? e.pageY : e.clientY + document.body.scrollTop;
+ }
+
+};
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/scripts/edit.js b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/edit.js
new file mode 100644
index 000000000..6494a925f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/edit.js
@@ -0,0 +1,442 @@
+/**
+ * Functions for text editing (toolbar stuff)
+ *
+ * @todo most of the stuff in here should be revamped and then moved to toolbar.js
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+/**
+ * Creates a toolbar button through the DOM
+ *
+ * Style the buttons through the toolbutton class
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function createToolButton(icon,label,key,id){
+ var btn = document.createElement('button');
+ var ico = document.createElement('img');
+
+ // preapare the basic button stuff
+ btn.className = 'toolbutton';
+ btn.title = label;
+ if(key){
+ btn.title += ' ['+key.toUpperCase()+']';
+ btn.accessKey = key;
+ }
+
+ // set IDs if given
+ if(id){
+ btn.id = id;
+ ico.id = id+'_ico';
+ }
+
+ // create the icon and add it to the button
+ if(icon.substr(0,1) == '/'){
+ ico.src = icon;
+ }else{
+ ico.src = DOKU_MEDIA+'lib/images/toolbar/'+icon;
+ }
+ btn.appendChild(ico);
+
+ return btn;
+}
+
+/**
+ * Creates a picker window for inserting text
+ *
+ * The given list can be an associative array with text,icon pairs
+ * or a simple list of text. Style the picker window through the picker
+ * class or the picker buttons with the pickerbutton class. Picker
+ * windows are appended to the body and created invisible.
+ *
+ * @param string id the ID to assign to the picker
+ * @param array props the properties for the picker
+ * @param string edid the ID of the textarea
+ * @rteurn DOMobject the created picker
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function createPicker(id,props,edid){
+ var icobase = props['icobase'];
+ var list = props['list'];
+
+ // create the wrapping div
+ var picker = document.createElement('div');
+ picker.className = 'picker';
+ if(props['class']){
+ picker.className += ' '+props['class'];
+ }
+ picker.id = id;
+ picker.style.position = 'absolute';
+ picker.style.marginLeft = '-10000px'; // no display:none, to keep access keys working
+
+ for(var key in list){
+ if (!list.hasOwnProperty(key)) continue;
+
+ if(isNaN(key)){
+ // associative array -> treat as image/value pairs
+ var btn = document.createElement('button');
+ btn.className = 'pickerbutton';
+ var ico = document.createElement('img');
+ if(list[key].substr(0,1) == '/'){
+ ico.src = list[key];
+ }else{
+ ico.src = DOKU_MEDIA+'lib/images/'+icobase+'/'+list[key];
+ }
+ btn.title = key;
+ btn.appendChild(ico);
+ addEvent(btn,'click',bind(pickerInsert,key,edid));
+ picker.appendChild(btn);
+ }else if(isString(list[key])){
+ // a list of text -> treat as text picker
+ var btn = document.createElement('button');
+ btn.className = 'pickerbutton';
+ var txt = document.createTextNode(list[key]);
+ btn.title = list[key];
+ btn.appendChild(txt);
+ addEvent(btn,'click',bind(pickerInsert,list[key],edid));
+ picker.appendChild(btn);
+ }else{
+ // a list of lists -> treat it as subtoolbar
+ initToolbar(picker,edid,list);
+ break; // all buttons handled already
+ }
+
+ }
+ var body = document.getElementsByTagName('body')[0];
+ body.appendChild(picker);
+ return picker;
+}
+
+/**
+ * Called by picker buttons to insert Text and close the picker again
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function pickerInsert(text,edid){
+ insertAtCarret(edid,text);
+ pickerClose();
+}
+
+/**
+ * Add button action for signature button
+ *
+ * @param DOMElement btn Button element to add the action to
+ * @param array props Associative array of button properties
+ * @param string edid ID of the editor textarea
+ * @return boolean If button should be appended
+ * @author Gabriel Birke <birke@d-scribe.de>
+ */
+function addBtnActionSignature(btn, props, edid) {
+ if(typeof(SIG) != 'undefined' && SIG != ''){
+ addEvent(btn,'click',bind(insertAtCarret,edid,SIG));
+ return true;
+ }
+ return false;
+}
+
+/**
+ * Make intended formattings easier to handle
+ *
+ * Listens to all key inputs and handle indentions
+ * of lists and code blocks
+ *
+ * Currently handles space, backspce and enter presses
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @fixme handle tabs
+ */
+function keyHandler(e){
+ if(e.keyCode != 13 &&
+ e.keyCode != 8 &&
+ e.keyCode != 32) return;
+ var field = e.target;
+ var selection = getSelection(field);
+ var search = "\n"+field.value.substr(0,selection.start);
+ var linestart = Math.max(search.lastIndexOf("\n"),
+ search.lastIndexOf("\r")); //IE workaround
+ search = search.substr(linestart);
+
+
+ if(e.keyCode == 13){ // Enter
+ // keep current indention for lists and code
+ var match = search.match(/(\n +([\*-] ?)?)/);
+ if(match){
+ var scroll = field.scrollHeight;
+ insertAtCarret(field.id,match[1]);
+ field.scrollTop += (field.scrollHeight - scroll);
+ e.preventDefault(); // prevent enter key
+ return false;
+ }
+ }else if(e.keyCode == 8){ // Backspace
+ // unindent lists
+ var match = search.match(/(\n +)([*-] ?)$/);
+ if(match){
+ var spaces = match[1].length-1;
+
+ if(spaces > 3){ // unindent one level
+ field.value = field.value.substr(0,linestart)+
+ field.value.substr(linestart+2);
+ selection.start = selection.start - 2;
+ selection.end = selection.start;
+ }else{ // delete list point
+ field.value = field.value.substr(0,linestart)+
+ field.value.substr(selection.start);
+ selection.start = linestart;
+ selection.end = linestart;
+ }
+ setSelection(selection);
+ e.preventDefault(); // prevent backspace
+ return false;
+ }
+ }else if(e.keyCode == 32){ // Space
+ // intend list item
+ var match = search.match(/(\n +)([*-] )$/);
+ if(match){
+ field.value = field.value.substr(0,linestart)+' '+
+ field.value.substr(linestart);
+ selection.start = selection.start + 2;
+ selection.end = selection.start;
+ setSelection(selection);
+ e.preventDefault(); // prevent space
+ return false;
+ }
+ }
+}
+
+//FIXME consolidate somewhere else
+addInitEvent(function(){
+ var field = DOKUid('wiki__text');
+ if(!field) return;
+ addEvent(field,'keydown',keyHandler);
+});
+
+/**
+ * Determine the current section level while editing
+ *
+ * @author Andreas Gohr <gohr@cosmocode.de>
+ */
+function currentHeadlineLevel(textboxId){
+ var field = DOKUid(textboxId);
+ var selection = getSelection(field);
+ var search = "\n"+field.value.substr(0,selection.start);
+ var lasthl = search.lastIndexOf("\n==");
+ if(lasthl == -1 && field.form.prefix){
+ // we need to look in prefix context
+ search = field.form.prefix.value;
+ lasthl = search.lastIndexOf("\n==");
+ }
+ search = search.substr(lasthl+1,6);
+
+ if(search == '======') return 1;
+ if(search.substr(0,5) == '=====') return 2;
+ if(search.substr(0,4) == '====') return 3;
+ if(search.substr(0,3) == '===') return 4;
+ if(search.substr(0,2) == '==') return 5;
+
+ return 0;
+}
+
+
+/**
+ * global var used for not saved yet warning
+ */
+var textChanged = false;
+
+/**
+ * Check for changes before leaving the page
+ */
+function changeCheck(msg){
+ if(textChanged){
+ var ok = confirm(msg);
+ if(ok){
+ // remove a possibly saved draft using ajax
+ var dwform = DOKUid('dw__editform');
+ if(dwform){
+ var params = 'call=draftdel';
+ params += '&id='+encodeURIComponent(dwform.elements.id.value);
+
+ var sackobj = new sack(DOKU_BASE + 'lib/exe/ajax.php');
+ sackobj.AjaxFailedAlert = '';
+ sackobj.encodeURIString = false;
+ sackobj.runAJAX(params);
+ // we send this request blind without waiting for
+ // and handling the returned data
+ }
+ }
+ return ok;
+ }else{
+ return true;
+ }
+}
+
+/**
+ * Add changeCheck to all Links and Forms (except those with a
+ * JSnocheck class), add handlers to monitor changes
+ *
+ * Sets focus to the editbox as well
+ *
+ * @fixme this is old and crappy code. needs to be redone
+ */
+function initChangeCheck(msg){
+ var edit_text = document.getElementById('wiki__text');
+ if(!edit_text) return;
+ if(edit_text.readOnly) return;
+ if(!DOKUid('dw__editform')) return;
+
+ // add change check for links
+ var links = document.getElementsByTagName('a');
+ for(var i=0; i < links.length; i++){
+ if(links[i].className.indexOf('JSnocheck') == -1){
+ links[i].onclick = function(){
+ var rc = changeCheck(msg);
+ if(window.event) window.event.returnValue = rc;
+ return rc;
+ };
+ }
+ }
+ // add change check for forms
+ var forms = document.forms;
+ for(i=0; i < forms.length; i++){
+ if(forms[i].className.indexOf('JSnocheck') == -1){
+ forms[i].onsubmit = function(){
+ var rc = changeCheck(msg);
+ if(window.event) window.event.returnValue = rc;
+ return rc;
+ };
+ }
+ }
+
+ // reset change memory var on submit
+ var btn_save = document.getElementById('edbtn__save');
+ btn_save.onclick = function(){ textChanged = false; };
+ var btn_prev = document.getElementById('edbtn__preview');
+ btn_prev.onclick = function(){ textChanged = false; };
+
+ // add change memory setter
+ edit_text.onchange = function(){
+ textChanged = true; //global var
+ summaryCheck();
+ };
+ var summary = document.getElementById('edit__summary');
+ addEvent(summary, 'change', summaryCheck);
+ addEvent(summary, 'keyup', summaryCheck);
+ if (textChanged) summaryCheck();
+
+ // set focus
+ edit_text.focus();
+}
+
+/**
+ * Checks if a summary was entered - if not the style is changed
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function summaryCheck(){
+ var sum = document.getElementById('edit__summary');
+ if(sum.value === ''){
+ sum.className='missing';
+ }else{
+ sum.className='edit';
+ }
+}
+
+
+/**
+ * Class managing the timer to display a warning on a expiring lock
+ */
+function locktimer_class(){
+ this.sack = null;
+ this.timeout = 0;
+ this.timerID = null;
+ this.lasttime = null;
+ this.msg = '';
+ this.pageid = '';
+};
+var locktimer = new locktimer_class();
+ locktimer.init = function(timeout,msg,draft){
+ // init values
+ locktimer.timeout = timeout*1000;
+ locktimer.msg = msg;
+ locktimer.draft = draft;
+ locktimer.lasttime = new Date();
+
+ if(!DOKUid('dw__editform')) return;
+ locktimer.pageid = DOKUid('dw__editform').elements.id.value;
+ if(!locktimer.pageid) return;
+
+ // init ajax component
+ locktimer.sack = new sack(DOKU_BASE + 'lib/exe/ajax.php');
+ locktimer.sack.AjaxFailedAlert = '';
+ locktimer.sack.encodeURIString = false;
+ locktimer.sack.onCompletion = locktimer.refreshed;
+
+ // register refresh event
+ addEvent(DOKUid('dw__editform').elements.wikitext,'keypress',function(){locktimer.refresh();});
+
+ // start timer
+ locktimer.reset();
+ };
+
+ /**
+ * (Re)start the warning timer
+ */
+ locktimer.reset = function(){
+ locktimer.clear();
+ locktimer.timerID = window.setTimeout("locktimer.warning()", locktimer.timeout);
+ };
+
+ /**
+ * Display the warning about the expiring lock
+ */
+ locktimer.warning = function(){
+ locktimer.clear();
+ alert(locktimer.msg);
+ };
+
+ /**
+ * Remove the current warning timer
+ */
+ locktimer.clear = function(){
+ if(locktimer.timerID !== null){
+ window.clearTimeout(locktimer.timerID);
+ locktimer.timerID = null;
+ }
+ };
+
+ /**
+ * Refresh the lock via AJAX
+ *
+ * Called on keypresses in the edit area
+ */
+ locktimer.refresh = function(){
+ var now = new Date();
+ // refresh every minute only
+ if(now.getTime() - locktimer.lasttime.getTime() > 30*1000){ //FIXME decide on time
+ var params = 'call=lock&id='+encodeURIComponent(locktimer.pageid);
+ if(locktimer.draft){
+ var dwform = DOKUid('dw__editform');
+ params += '&prefix='+encodeURIComponent(dwform.elements.prefix.value);
+ params += '&wikitext='+encodeURIComponent(dwform.elements.wikitext.value);
+ params += '&suffix='+encodeURIComponent(dwform.elements.suffix.value);
+ params += '&date='+encodeURIComponent(dwform.elements.date.value);
+ }
+ locktimer.sack.runAJAX(params);
+ locktimer.lasttime = now;
+ }
+ };
+
+
+ /**
+ * Callback. Resets the warning timer
+ */
+ locktimer.refreshed = function(){
+ var data = this.response;
+ var error = data.charAt(0);
+ data = data.substring(1);
+
+ DOKUid('draft__status').innerHTML=data;
+ if(error != '1') return; // locking failed
+ locktimer.reset();
+ };
+// end of locktimer class functions
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/scripts/events.js b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/events.js
new file mode 100644
index 000000000..e7526ced7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/events.js
@@ -0,0 +1,176 @@
+// written by Dean Edwards, 2005
+// with input from Tino Zijdel
+
+// http://dean.edwards.name/weblog/2005/10/add-event/
+
+function addEvent(element, type, handler) {
+ // assign each event handler a unique ID
+ if (!handler.$$guid) handler.$$guid = addEvent.guid++;
+ // create a hash table of event types for the element
+ if (!element.events) element.events = {};
+ // create a hash table of event handlers for each element/event pair
+ var handlers = element.events[type];
+ if (!handlers) {
+ handlers = element.events[type] = {};
+ // store the existing event handler (if there is one)
+ if (element["on" + type]) {
+ handlers[0] = element["on" + type];
+ }
+ }
+ // store the event handler in the hash table
+ handlers[handler.$$guid] = handler;
+ // assign a global event handler to do all the work
+ element["on" + type] = handleEvent;
+};
+// a counter used to create unique IDs
+addEvent.guid = 1;
+
+function removeEvent(element, type, handler) {
+ // delete the event handler from the hash table
+ if (element.events && element.events[type]) {
+ delete element.events[type][handler.$$guid];
+ }
+};
+
+function handleEvent(event) {
+ var returnValue = true;
+ // grab the event object (IE uses a global event object)
+ event = event || fixEvent(window.event);
+ // get a reference to the hash table of event handlers
+ var handlers = this.events[event.type];
+ // execute each event handler
+ for (var i in handlers) {
+ if (!handlers.hasOwnProperty(i)) continue;
+ this.$$handleEvent = handlers[i];
+ if (this.$$handleEvent(event) === false) {
+ returnValue = false;
+ }
+ }
+ return returnValue;
+};
+
+function fixEvent(event) {
+ // add W3C standard event methods
+ event.preventDefault = fixEvent.preventDefault;
+ event.stopPropagation = fixEvent.stopPropagation;
+ // fix target
+ event.target = event.srcElement;
+ return event;
+};
+fixEvent.preventDefault = function() {
+ this.returnValue = false;
+};
+fixEvent.stopPropagation = function() {
+ this.cancelBubble = true;
+};
+
+
+/**
+ * Pseudo event handler to be fired after the DOM was parsed or
+ * on window load at last.
+ *
+ * @author based upon some code by Dean Edwards
+ * @author Dean Edwards
+ * @link http://dean.edwards.name/weblog/2006/06/again/
+ */
+window.fireoninit = function() {
+ // quit if this function has already been called
+ if (arguments.callee.done) return;
+ // flag this function so we don't do the same thing twice
+ arguments.callee.done = true;
+ // kill the timer
+ if (_timer) {
+ clearInterval(_timer);
+ _timer = null;
+ }
+
+ if (typeof window.oninit == 'function') {
+ window.oninit();
+ }
+};
+
+/**
+ * Run the fireoninit function as soon as possible after
+ * the DOM was loaded, using different methods for different
+ * Browsers
+ *
+ * @author Dean Edwards
+ * @link http://dean.edwards.name/weblog/2006/06/again/
+ */
+ // for Mozilla
+ if (document.addEventListener) {
+ document.addEventListener("DOMContentLoaded", window.fireoninit, null);
+ }
+
+ // for Internet Explorer (using conditional comments)
+ /*@cc_on @*/
+ /*@if (@_win32)
+ document.write("<scr" + "ipt id=\"__ie_init\" defer=\"true\" src=\"//:\"><\/script>");
+ var script = document.getElementById("__ie_init");
+ script.onreadystatechange = function() {
+ if (this.readyState == "complete") {
+ window.fireoninit(); // call the onload handler
+ }
+ };
+ /*@end @*/
+
+ // for Safari
+ if (/WebKit/i.test(navigator.userAgent)) { // sniff
+ var _timer = setInterval(function() {
+ if (/loaded|complete/.test(document.readyState)) {
+ window.fireoninit(); // call the onload handler
+ }
+ }, 10);
+ }
+
+ // for other browsers
+ window.onload = window.fireoninit;
+
+
+/**
+ * This is a pseudo Event that will be fired by the fireoninit
+ * function above.
+ *
+ * Use addInitEvent to bind to this event!
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @see fireoninit()
+ */
+window.oninit = function(){};
+
+/**
+ * Bind a function to the window.init pseudo event
+ *
+ * @author Simon Willison
+ * @see http://simon.incutio.com/archive/2004/05/26/addLoadEvent
+ */
+function addInitEvent(func) {
+ var oldoninit = window.oninit;
+ if (typeof window.oninit != 'function') {
+ window.oninit = func;
+ } else {
+ window.oninit = function() {
+ oldoninit();
+ func();
+ };
+ }
+}
+
+/**
+ * Bind variables to a function call creating a closure
+ *
+ * Use this to circumvent variable scope problems when creating closures
+ * inside a loop
+ *
+ * @author Adrian Lang <lang@cosmocode.de>
+ * @link http://www.cosmocode.de/en/blog/gohr/2009-10/15-javascript-fixing-the-closure-scope-in-loops
+ * @param functionref fnc - the function to be called
+ * @param mixed - any arguments to be passed to the function
+ * @returns functionref
+ */
+function bind (fnc) {
+ var args = Array.prototype.slice.call(arguments, 1);
+ return function() {
+ return fnc.apply(this, args);
+ }
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/scripts/helpers.js b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/helpers.js
new file mode 100644
index 000000000..8d4f3ea78
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/helpers.js
@@ -0,0 +1,146 @@
+/**
+ * Differrent helper functions
+ *
+ * @author Ilya Lebedev <ilya@lebedev.net>
+ * @license LGPL
+ */
+//-----------------------------------------------------------------------------
+// Variable/property checks
+//-----------------------------------------------------------------------------
+/**
+ * Checks if property is undefined
+ *
+ * @param {Object} prop value to check
+ * @return {Boolean} true if matched
+ * @scope public
+ */
+function isUndefined (prop /* :Object */) /* :Boolean */ {
+ return (typeof prop == 'undefined');
+}
+/**
+ * Checks if property is function
+ *
+ * @param {Object} prop value to check
+ * @return {Boolean} true if matched
+ * @scope public
+ */
+function isFunction (prop /* :Object */) /* :Boolean */ {
+ return (typeof prop == 'function');
+}
+/**
+ * Checks if property is string
+ *
+ * @param {Object} prop value to check
+ * @return {Boolean} true if matched
+ * @scope public
+ */
+function isString (prop /* :Object */) /* :Boolean */ {
+ return (typeof prop == 'string');
+}
+/**
+ * Checks if property is number
+ *
+ * @param {Object} prop value to check
+ * @return {Boolean} true if matched
+ * @scope public
+ */
+function isNumber (prop /* :Object */) /* :Boolean */ {
+ return (typeof prop == 'number');
+}
+/**
+ * Checks if property is the calculable number
+ *
+ * @param {Object} prop value to check
+ * @return {Boolean} true if matched
+ * @scope public
+ */
+function isNumeric (prop /* :Object */) /* :Boolean */ {
+ return isNumber(prop)&&!isNaN(prop)&&isFinite(prop);
+}
+/**
+ * Checks if property is array
+ *
+ * @param {Object} prop value to check
+ * @return {Boolean} true if matched
+ * @scope public
+ */
+function isArray (prop /* :Object */) /* :Boolean */ {
+ return (prop instanceof Array);
+}
+/**
+ * Checks if property is regexp
+ *
+ * @param {Object} prop value to check
+ * @return {Boolean} true if matched
+ * @scope public
+ */
+function isRegExp (prop /* :Object */) /* :Boolean */ {
+ return (prop instanceof RegExp);
+}
+/**
+ * Checks if property is a boolean value
+ *
+ * @param {Object} prop value to check
+ * @return {Boolean} true if matched
+ * @scope public
+ */
+function isBoolean (prop /* :Object */) /* :Boolean */ {
+ return ('boolean' == typeof prop);
+}
+/**
+ * Checks if property is a scalar value (value that could be used as the hash key)
+ *
+ * @param {Object} prop value to check
+ * @return {Boolean} true if matched
+ * @scope public
+ */
+function isScalar (prop /* :Object */) /* :Boolean */ {
+ return isNumeric(prop)||isString(prop);
+}
+/**
+ * Checks if property is empty
+ *
+ * @param {Object} prop value to check
+ * @return {Boolean} true if matched
+ * @scope public
+ */
+function isEmpty (prop /* :Object */) /* :Boolean */ {
+ if (isBoolean(prop)) return false;
+ if (isRegExp(prop) && new RegExp("").toString() == prop.toString()) return true;
+ if (isString(prop) || isNumber(prop)) return !prop;
+ if (Boolean(prop)&&false != prop) {
+ for (var i in prop) if(prop.hasOwnProperty(i)) return false
+ }
+ return true;
+}
+
+/**
+ * Checks if property is derived from prototype, applies method if it is not exists
+ *
+ * @param string property name
+ * @return bool true if prototyped
+ * @access public
+ */
+if ('undefined' == typeof Object.hasOwnProperty) {
+ Object.prototype.hasOwnProperty = function (prop) {
+ return !('undefined' == typeof this[prop] || this.constructor && this.constructor.prototype[prop] && this[prop] === this.constructor.prototype[prop]);
+ }
+}
+
+/**
+ * Very simplistic Flash plugin check, probably works for Flash 8 and higher only
+ */
+function hasFlash(version){
+ var ver = 0;
+ try{
+ if(navigator.plugins != null && navigator.plugins.length > 0){
+ ver = navigator.plugins["Shockwave Flash"].description.split(' ')[2].split('.')[0];
+ }else{
+ var axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
+ ver = axo.GetVariable("$version").split(' ')[1].split(',')[0];
+ }
+ }catch(e){ }
+
+ if(ver >= version) return true;
+ return false;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/scripts/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/index.html
new file mode 100644
index 000000000..d614603ac
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/index.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="refresh" content="0; URL=../../" />
+<meta name="robots" content="noindex" />
+<title>nothing here...</title>
+</head>
+<body>
+<!-- this is just here to prevent directory browsing -->
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/scripts/index.js b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/index.js
new file mode 100644
index 000000000..16b00c0ab
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/index.js
@@ -0,0 +1,116 @@
+/**
+ * Javascript for index view
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+var index = {
+
+ /**
+ * Delay in ms before showing the throbber.
+ * Used to skip the throbber for fast AJAX calls.
+ */
+ throbber_delay: 500,
+
+ /**
+ * Attach event handlers to all "folders" below the given element
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ treeattach: function(obj){
+ if(!obj) return;
+
+ var items = getElementsByClass('idx_dir',obj,'a');
+ for(var i=0; i<items.length; i++){
+ var elem = items[i];
+
+ // attach action to make the link clickable by AJAX
+ addEvent(elem,'click',function(e){ return index.toggle(e,this); });
+
+ // get the listitem the elem belongs to
+ var listitem = elem.parentNode;
+ while (listitem.tagName != 'LI') {
+ listitem = listitem.parentNode;
+ }
+ //when there are uls under this listitem mark this listitem as opened
+ if (listitem.getElementsByTagName('ul').length) {
+ listitem.open = true;
+ }
+ }
+ },
+
+ /**
+ * Open or close a subtree using AJAX
+ * The contents of subtrees are "cached" untill the page is reloaded.
+ * A "loading" indicator is shown only when the AJAX call is slow.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Ben Coburn <btcoburn@silicodon.net>
+ */
+ toggle: function(e,clicky){
+ var listitem = clicky.parentNode.parentNode;
+
+ listitem.open = !listitem.open;
+ // listitem.open represents now the action to be done
+
+ // if already open, close by removing the sublist
+ var sublists = listitem.getElementsByTagName('ul');
+ if(!listitem.open){
+ if (sublists.length) {
+ sublists[0].style.display='none';
+ }
+ listitem.className='closed';
+ e.preventDefault();
+ return false;
+ }
+
+ // just show if already loaded
+ if(sublists.length && listitem.open){
+ sublists[0].style.display='';
+ listitem.className='open';
+ e.preventDefault();
+ return false;
+ }
+
+ // prepare an AJAX call to fetch the subtree
+ var ajax = new sack(DOKU_BASE + 'lib/exe/ajax.php');
+ ajax.AjaxFailedAlert = '';
+ ajax.encodeURIString = false;
+ if(ajax.failed) return true;
+
+ //prepare the new ul
+ var ul = document.createElement('ul');
+ ul.className = 'idx';
+ timeout = window.setTimeout(function(){
+ // show the throbber as needed
+ if (listitem.open) {
+ ul.innerHTML = '<li><img src="'+DOKU_BASE+'lib/images/throbber.gif" alt="loading..." title="loading..." /></li>';
+ listitem.appendChild(ul);
+ listitem.className='open';
+ }
+ }, this.throbber_delay);
+ ajax.elementObj = ul;
+ ajax.afterCompletion = function(){
+ window.clearTimeout(timeout);
+ index.treeattach(ul);
+ if (listitem.className!='open') {
+ if (!listitem.open) {
+ ul.style.display='none';
+ }
+ listitem.appendChild(ul);
+ if (listitem.open) {
+ listitem.className='open';
+ }
+ }
+ };
+ ajax.runAJAX(clicky.search.substr(1)+'&call=index');
+ e.preventDefault();
+ return false;
+ }
+};
+
+
+addInitEvent(function(){
+ if (DOKUid('index__tree'))
+ index.treeattach(DOKUid('index__tree'));
+});
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/scripts/linkwiz.js b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/linkwiz.js
new file mode 100644
index 000000000..55469c158
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/linkwiz.js
@@ -0,0 +1,282 @@
+/**
+ * The Link Wizard
+ *
+ * @author Andreas Gohr <gohr@cosmocode.de>
+ */
+var linkwiz = {
+ wiz: null,
+ entry: null,
+ result: null,
+ timer: null,
+ sack: null,
+ textArea: null,
+ selected: -1,
+ selection: null,
+
+ /**
+ * Initialize the linkwizard by creating the needed HTML
+ * and attaching the eventhandlers
+ */
+ init: function(textArea){
+ // prepare AJAX object
+ linkwiz.sack = new sack(DOKU_BASE + 'lib/exe/ajax.php');
+ linkwiz.sack.AjaxFailedAlert = '';
+ linkwiz.sack.encodeURIString = false;
+
+ // create HTML Structure
+ linkwiz.wiz = document.createElement('div');
+ linkwiz.wiz.id = 'link__wiz';
+ linkwiz.wiz.className = 'picker';
+ linkwiz.wiz.style.top = (findPosY(textArea)+20)+'px';
+ linkwiz.wiz.style.left = (findPosX(textArea)+80)+'px';
+ linkwiz.wiz.style.marginLeft = '-10000px';
+
+ linkwiz.wiz.innerHTML =
+ '<div id="link__wiz_header">'+
+ '<img src="'+DOKU_BASE+'lib/images/close.png" width="16" height="16" align="right" alt="" id="link__wiz_close" />'+
+ LANG['linkwiz']+'</div>'+
+ '<div>'+LANG['linkto']+' <input type="text" class="edit" id="link__wiz_entry" autocomplete="off" /></div>'+
+ '<div id="link__wiz_result"></div>';
+ textArea.form.parentNode.appendChild(linkwiz.wiz);
+ linkwiz.textArea = textArea;
+ linkwiz.result = DOKUid('link__wiz_result');
+ linkwiz.entry = DOKUid('link__wiz_entry');
+
+ // attach event handlers
+ var obj;
+ obj = DOKUid('link__wiz_close');
+ obj.onclick = linkwiz.hide;
+
+ linkwiz.sack.elementObj = linkwiz.result;
+ addEvent(linkwiz.entry,'keyup',linkwiz.onEntry);
+ addEvent(linkwiz.result,'click',linkwiz.onResultClick);
+ drag.attach(linkwiz.wiz,DOKUid('link__wiz_header'));
+ },
+
+ /**
+ * handle all keyup events in the entry field
+ */
+ onEntry: function(e){
+ if(e.keyCode == 37 || e.keyCode == 39){ //left/right
+ return true; //ignore
+ }
+ if(e.keyCode == 27){
+ linkwiz.hide();
+ e.preventDefault();
+ e.stopPropagation();
+ return false;
+ }
+ if(e.keyCode == 38){ //Up
+ linkwiz.select(linkwiz.selected -1);
+ e.preventDefault();
+ e.stopPropagation();
+ return false;
+ }
+ if(e.keyCode == 40){ //Down
+ linkwiz.select(linkwiz.selected +1);
+ e.preventDefault();
+ e.stopPropagation();
+ return false;
+ }
+ if(e.keyCode == 13){ //Enter
+ if(linkwiz.selected > -1){
+ var obj = linkwiz.getResult(linkwiz.selected);
+ if(obj){
+ var a = obj.getElementsByTagName('A')[0];
+ linkwiz.resultClick(a);
+ }
+ }else if(linkwiz.entry.value){
+ linkwiz.insertLink(linkwiz.entry.value);
+ }
+
+ e.preventDefault();
+ e.stopPropagation();
+ return false;
+ }
+ linkwiz.autocomplete();
+ },
+
+ /**
+ * Get one of the result by index
+ *
+ * @param int result div to return
+ * @returns DOMObject or null
+ */
+ getResult: function(num){
+ var obj;
+ var childs = linkwiz.result.getElementsByTagName('DIV');
+ obj = childs[num];
+ if(obj){
+ return obj;
+ }else{
+ return null;
+ }
+ },
+
+ /**
+ * Select the given result
+ */
+ select: function(num){
+ if(num < 0){
+ linkwiz.deselect();
+ return;
+ }
+
+ var obj = linkwiz.getResult(num);
+ if(obj){
+ linkwiz.deselect();
+ obj.className += ' selected';
+
+ // make sure the item is viewable in the scroll view
+ // FIXME check IE compatibility
+ if(obj.offsetTop > linkwiz.result.scrollTop + linkwiz.result.clientHeight){
+ linkwiz.result.scrollTop += obj.clientHeight;
+ }else if(obj.offsetTop - linkwiz.result.clientHeight < linkwiz.result.scrollTop){ // this works but isn't quite right, fixes welcome
+ linkwiz.result.scrollTop -= obj.clientHeight;
+ }
+ // now recheck - if still not in view, the user used the mouse to scroll
+ if( (obj.offsetTop > linkwiz.result.scrollTop + linkwiz.result.clientHeight) ||
+ (obj.offsetTop < linkwiz.result.scrollTop) ){
+ obj.scrollIntoView();
+ }
+
+ linkwiz.selected = num;
+ }
+ },
+
+ /**
+ * deselect a result if any is selected
+ */
+ deselect: function(){
+ if(linkwiz.selected > -1){
+ var obj = linkwiz.getResult(linkwiz.selected);
+ if(obj){
+ obj.className = obj.className.replace(/ ?selected/,'');
+ }
+ }
+ linkwiz.selected = -1;
+ },
+
+ /**
+ * Handle clicks in the result set an dispatch them to
+ * resultClick()
+ */
+ onResultClick: function(e){
+ if(e.target.tagName != 'A') return;
+ e.stopPropagation();
+ e.preventDefault();
+ linkwiz.resultClick(e.target);
+ return false;
+ },
+
+ /**
+ * Handles the "click" on a given result anchor
+ */
+ resultClick: function(a){
+ var id = a.title;
+ if(id == '' || id.substr(id.length-1) == ':'){
+ linkwiz.entry.value = id;
+ linkwiz.autocomplete_exec();
+ }else{
+ linkwiz.entry.value = id;
+ if(a.nextSibling && a.nextSibling.tagName == 'SPAN'){
+ linkwiz.insertLink(a.nextSibling.innerHTML);
+ }else{
+ linkwiz.insertLink('');
+ }
+ }
+ },
+
+ /**
+ * Insert the id currently in the entry box to the textarea,
+ * replacing the current selection or at the curso postion.
+ * When no selection is available the given title will be used
+ * as link title instead
+ */
+ insertLink: function(title){
+ if(!linkwiz.entry.value) return;
+
+ var sel = getSelection(linkwiz.textArea);
+ if(sel.start == 0 && sel.end == 0) sel = linkwiz.selection;
+
+ var stxt = sel.getText();
+ if(!stxt && !DOKU_UHC) stxt=title;
+
+ // prepend colon inside namespaces for non namespace pages
+ if(linkwiz.textArea.form['id'].value.indexOf(':') != -1 &&
+ linkwiz.entry.value.indexOf(':') == -1){
+ linkwiz.entry.value = ':'+linkwiz.entry.value;
+ }
+
+ var link = '[['+linkwiz.entry.value+'|';
+ if(stxt) link += stxt;
+ link += ']]';
+
+ var so = linkwiz.entry.value.length+3;
+ var eo = 2;
+
+ pasteText(sel,link,{startofs: so, endofs: eo});
+ linkwiz.hide();
+ },
+
+ /**
+ * Start the page/namespace lookup timer
+ *
+ * Calls autocomplete_exec when the timer runs out
+ */
+ autocomplete: function(){
+ if(linkwiz.timer !== null){
+ window.clearTimeout(linkwiz.timer);
+ linkwiz.timer = null;
+ }
+
+ linkwiz.timer = window.setTimeout(linkwiz.autocomplete_exec,350);
+ },
+
+ /**
+ * Executes the AJAX call for the page/namespace lookup
+ */
+ autocomplete_exec: function(){
+ linkwiz.deselect();
+ linkwiz.result.innerHTML = '<img src="'+DOKU_BASE+'lib/images/throbber.gif" alt="" width="16" height="16" />';
+ linkwiz.sack.runAJAX('call=linkwiz&q='+encodeURI(linkwiz.entry.value));
+ },
+
+ /**
+ * Clears the result area
+ */
+ clear: function(){
+ linkwiz.result.innerHTML = 'Search for a matching page name above, or browse through the pages on the right';
+ linkwiz.entry.value = '';
+ },
+
+ /**
+ * Show the linkwizard
+ */
+ show: function(){
+ linkwiz.selection = getSelection(linkwiz.textArea);
+ linkwiz.wiz.style.marginLeft = '0px';
+ linkwiz.entry.focus();
+ linkwiz.autocomplete();
+ },
+
+ /**
+ * Hide the link wizard
+ */
+ hide: function(){
+ linkwiz.wiz.style.marginLeft = '-10000px';
+ linkwiz.textArea.focus();
+ },
+
+ /**
+ * Toggle the link wizard
+ */
+ toggle: function(){
+ if(linkwiz.wiz.style.marginLeft == '-10000px'){
+ linkwiz.show();
+ }else{
+ linkwiz.hide();
+ }
+ }
+};
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/scripts/media.js b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/media.js
new file mode 100644
index 000000000..598fb61f4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/media.js
@@ -0,0 +1,351 @@
+/**
+ * JavaScript functionalitiy for the media management popup
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+var media_manager = {
+ keepopen: false,
+ hide: false,
+
+ /**
+ * Attach event handlers to all "folders" below the given element
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ treeattach: function(obj){
+ if(!obj) return;
+ var items = obj.getElementsByTagName('li');
+ for(var i=0; i<items.length; i++){
+ var elem = items[i];
+
+ // attach action to make the +/- clickable
+ var clicky = elem.getElementsByTagName('img')[0];
+ clicky.style.cursor = 'pointer';
+ addEvent(clicky,'click',function(event){ return media_manager.toggle(event,this); });
+
+ // attach action load folder list via AJAX
+ var link = elem.getElementsByTagName('a')[0];
+ link.style.cursor = 'pointer';
+ addEvent(link,'click',function(event){ return media_manager.list(event,this); });
+ }
+ },
+
+ /**
+ * Attach the image selector action to all links below the given element
+ * also add the action to autofill the "upload as" field
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ selectorattach: function(obj){
+ if(!obj) return;
+
+ var items = getElementsByClass('select',obj,'a');
+ for(var i=0; i<items.length; i++){
+ var elem = items[i];
+ elem.style.cursor = 'pointer';
+ addEvent(elem,'click',function(event){ return media_manager.select(event,this); });
+ }
+
+ // hide syntax example
+ items = getElementsByClass('example',obj,'div');
+ for(var i=0; i<items.length; i++){
+ elem = items[i];
+ elem.style.display = 'none';
+ }
+
+ var file = DOKUid('upload__file');
+ if(!file) return;
+ addEvent(file,'change',media_manager.suggest);
+ },
+
+ /**
+ * Attach deletion confirmation dialog to the delete buttons.
+ *
+ * Michael Klier <chi@chimeric.de>
+ */
+ confirmattach: function(obj){
+ if(!obj) return;
+
+ items = getElementsByClass('btn_media_delete',obj,'a');
+ for(var i=0; i<items.length; i++){
+ var elem = items[i];
+ addEvent(elem,'click',function(e){
+ if(e.target.tagName == 'IMG'){
+ var name = e.target.parentNode.title;
+ }else{
+ var name = e.target.title;
+ }
+ if(!confirm(LANG['del_confirm'] + "\n" + name)) {
+ e.preventDefault();
+ return false;
+ } else {
+ return true;
+ }
+ });
+ }
+ },
+
+ /**
+ * Creates checkboxes for additional options
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ attachoptions: function(obj){
+ if(!obj) return;
+
+ // keep open
+ if(opener){
+ var kobox = document.createElement('input');
+ kobox.type = 'checkbox';
+ kobox.id = 'media__keepopen';
+ if(DokuCookie.getValue('keepopen')){
+ kobox.checked = true;
+ kobox.defaultChecked = true; //IE wants this
+ media_manager.keepopen = true;
+ }
+ addEvent(kobox,'click',function(event){ return media_manager.togglekeepopen(event,this); });
+
+ var kolbl = document.createElement('label');
+ kolbl.htmlFor = 'media__keepopen';
+ kolbl.innerHTML = LANG['keepopen'];
+
+ var kobr = document.createElement('br');
+
+ obj.appendChild(kobox);
+ obj.appendChild(kolbl);
+ obj.appendChild(kobr);
+ }
+
+ // hide details
+ var hdbox = document.createElement('input');
+ hdbox.type = 'checkbox';
+ hdbox.id = 'media__hide';
+ if(DokuCookie.getValue('hide')){
+ hdbox.checked = true;
+ hdbox.defaultChecked = true; //IE wants this
+ media_manager.hide = true;
+ }
+ addEvent(hdbox,'click',function(event){ return media_manager.togglehide(event,this); });
+
+ var hdlbl = document.createElement('label');
+ hdlbl.htmlFor = 'media__hide';
+ hdlbl.innerHTML = LANG['hidedetails'];
+
+ var hdbr = document.createElement('br');
+
+ obj.appendChild(hdbox);
+ obj.appendChild(hdlbl);
+ obj.appendChild(hdbr);
+ media_manager.updatehide();
+ },
+
+ /**
+ * Opens the searchfield
+ *
+ * @author Tobias Sarnowski <sarnowski@cosmocode.de>
+ */
+ showsearchfield: function(event,link){
+ // prepare an AJAX call to fetch the search
+ var ajax = new sack(DOKU_BASE + 'lib/exe/ajax.php');
+ ajax.AjaxFailedAlert = '';
+ ajax.encodeURIString = false;
+ if(ajax.failed) return true;
+
+ cleanMsgArea();
+
+ var content = DOKUid('media__content');
+ content.innerHTML = '<img src="'+DOKU_MEDIA+'lib/images/loading.gif" alt="..." class="load" />';
+
+ ajax.elementObj = content;
+ ajax.afterCompletion = function(){
+ media_manager.selectorattach(content);
+ media_manager.confirmattach(content);
+ media_manager.updatehide();
+ };
+ ajax.runAJAX(link.search.substr(1)+'&call=mediasearchlist');
+ return false;
+ },
+
+ /**
+ * Toggles the keep open state
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ togglekeepopen: function(event,cb){
+ if(cb.checked){
+ DokuCookie.setValue('keepopen',1);
+ media_manager.keepopen = true;
+ }else{
+ DokuCookie.setValue('keepopen','');
+ media_manager.keepopen = false;
+ }
+ },
+
+ /**
+ * Toggles the hide details state
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ togglehide: function(event,cb){
+ if(cb.checked){
+ DokuCookie.setValue('hide',1);
+ media_manager.hide = true;
+ }else{
+ DokuCookie.setValue('hide','');
+ media_manager.hide = false;
+ }
+ media_manager.updatehide();
+ },
+
+ /**
+ * Sets the visibility of the image details accordingly to the
+ * chosen hide state
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ updatehide: function(){
+ var obj = DOKUid('media__content');
+ if(!obj) return;
+ var details = getElementsByClass('detail',obj,'div');
+ for(var i=0; i<details.length; i++){
+ if(media_manager.hide){
+ details[i].style.display = 'none';
+ }else{
+ details[i].style.display = '';
+ }
+ }
+ },
+
+ /**
+ * Insert the clicked image into the opener's textarea
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ select: function(event,link){
+ var id = link.name.substr(2);
+
+ if(!opener){
+ // if we don't run in popup display example
+ var ex = DOKUid('ex_'+id.replace(/:/g,'_'));
+ if(ex.style.display == ''){
+ ex.style.display = 'none';
+ }else{
+ ex.style.display = '';
+ }
+ return false;
+ }
+ opener.insertTags('wiki__text','{{'+id+'|','}}','');
+
+ if(!media_manager.keepopen) window.close();
+ opener.focus();
+ return false;
+ },
+
+ /**
+ * list the content of a namespace using AJAX
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ list: function(event,link){
+ // prepare an AJAX call to fetch the subtree
+ var ajax = new sack(DOKU_BASE + 'lib/exe/ajax.php');
+ ajax.AjaxFailedAlert = '';
+ ajax.encodeURIString = false;
+ if(ajax.failed) return true;
+
+ cleanMsgArea();
+
+ var content = DOKUid('media__content');
+ content.innerHTML = '<img src="'+DOKU_MEDIA+'lib/images/loading.gif" alt="..." class="load" />';
+
+ ajax.elementObj = content;
+ ajax.afterCompletion = function(){
+ media_manager.selectorattach(content);
+ media_manager.confirmattach(content);
+ media_manager.updatehide();
+ media_manager.initFlashUpload();
+ };
+ ajax.runAJAX(link.search.substr(1)+'&call=medialist');
+ return false;
+ },
+
+
+ /**
+ * Open or close a subtree using AJAX
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ toggle: function(event,clicky){
+ var listitem = clicky.parentNode;
+
+ // if already open, close by removing the sublist
+ var sublists = listitem.getElementsByTagName('ul');
+ if(sublists.length){
+ listitem.removeChild(sublists[0]);
+ clicky.src = DOKU_MEDIA+'lib/images/plus.gif';
+ return false;
+ }
+
+ // get the enclosed link (is always the first one)
+ var link = listitem.getElementsByTagName('a')[0];
+
+ // prepare an AJAX call to fetch the subtree
+ var ajax = new sack(DOKU_BASE + 'lib/exe/ajax.php');
+ ajax.AjaxFailedAlert = '';
+ ajax.encodeURIString = false;
+ if(ajax.failed) return true;
+
+ //prepare the new ul
+ var ul = document.createElement('ul');
+ //fixme add classname here
+ listitem.appendChild(ul);
+ ajax.elementObj = ul;
+ ajax.afterCompletion = function(){ media_manager.treeattach(ul); };
+ ajax.runAJAX(link.search.substr(1)+'&call=medians');
+ clicky.src = DOKU_MEDIA+'lib/images/minus.gif';
+ return false;
+ },
+
+ /**
+ * Prefills the wikiname.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ suggest: function(){
+ var file = DOKUid('upload__file');
+ var name = DOKUid('upload__name');
+ if(!file || !name) return;
+
+ var text = file.value;
+ text = text.substr(text.lastIndexOf('/')+1);
+ text = text.substr(text.lastIndexOf('\\')+1);
+ name.value = text;
+ },
+
+
+ initFlashUpload: function(){
+ if(!hasFlash(8)) return;
+ var oform = DOKUid('dw__upload');
+ var oflash = DOKUid('dw__flashupload');
+ if(!oform || !oflash) return;
+
+ var clicky = document.createElement('img');
+ clicky.src = DOKU_MEDIA+'lib/images/multiupload.png';
+ clicky.title = LANG['mu_btn'];
+ clicky.alt = LANG['mu_btn'];
+ clicky.style.cursor = 'pointer';
+ clicky.onclick = function(){
+ oform.style.display = 'none';
+ oflash.style.display = '';
+ };
+ oform.appendChild(clicky);
+ }
+};
+
+addInitEvent(function(){
+ media_manager.treeattach(DOKUid('media__tree'));
+ media_manager.selectorattach(DOKUid('media__content'));
+ media_manager.confirmattach(DOKUid('media__content'));
+ media_manager.attachoptions(DOKUid('media__opts'));
+ media_manager.initFlashUpload();
+});
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/scripts/pngbehavior.htc b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/pngbehavior.htc
new file mode 100644
index 000000000..d1db8e765
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/pngbehavior.htc
@@ -0,0 +1,53 @@
+// this is an ugly fix to make Internet Explorer work with transparent
+// PNG images - do your self a favour and use a real browser!
+
+<public:component>
+<public:attach event="onpropertychange" onevent="propertyChanged()" />
+<script>
+
+var supported = /MSIE (5\.5)|[6789]/.test(navigator.userAgent) && navigator.platform == "Win32";
+var realSrc;
+var blankSrc = DOKU_BASE+"lib/images/blank.gif";
+
+if (supported) fixImage();
+
+function propertyChanged() {
+ if (!supported) return;
+
+ var pName = event.propertyName;
+ if (pName != "src") return;
+ // if not set to blank
+ if ( ! new RegExp(blankSrc).test(src))
+ fixImage();
+};
+
+function fixImage() {
+ // get src
+ var src = element.src;
+
+ // check for real change
+ if (src == realSrc) {
+ element.src = blankSrc;
+ return;
+ }
+
+ if ( ! new RegExp(blankSrc).test(src)) {
+ // backup old src
+ realSrc = src;
+ }
+
+ // test for png
+ if ( /\.png$/.test( realSrc.toLowerCase() ) ) {
+ // set blank image
+ element.src = blankSrc;
+ // set filter
+ element.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "',sizingMethod='scale')";
+ }
+ else {
+ // remove filter
+ element.runtimeStyle.filter = "";
+ }
+}
+
+</script>
+</public:component>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/scripts/script.js b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/script.js
new file mode 100644
index 000000000..491794f13
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/script.js
@@ -0,0 +1,561 @@
+/**
+ * Some of these scripts were taken from wikipedia.org and were modified for DokuWiki
+ */
+
+/**
+ * Some browser detection
+ */
+var clientPC = navigator.userAgent.toLowerCase(); // Get client info
+var is_macos = navigator.appVersion.indexOf('Mac') != -1;
+var is_gecko = ((clientPC.indexOf('gecko')!=-1) && (clientPC.indexOf('spoofer')==-1) &&
+ (clientPC.indexOf('khtml') == -1) && (clientPC.indexOf('netscape/7.0')==-1));
+var is_safari = ((clientPC.indexOf('AppleWebKit')!=-1) && (clientPC.indexOf('spoofer')==-1));
+var is_khtml = (navigator.vendor == 'KDE' || ( document.childNodes && !document.all && !navigator.taintEnabled ));
+if (clientPC.indexOf('opera')!=-1) {
+ var is_opera = true;
+ var is_opera_preseven = (window.opera && !document.childNodes);
+ var is_opera_seven = (window.opera && document.childNodes);
+}
+
+/**
+ * Handy shortcut to document.getElementById
+ *
+ * This function was taken from the prototype library
+ *
+ * @link http://prototype.conio.net/
+ */
+function DOKUid() {
+ var elements = new Array();
+
+ for (var i = 0; i < arguments.length; i++) {
+ var element = arguments[i];
+ if (typeof element == 'string')
+ element = document.getElementById(element);
+
+ if (arguments.length == 1)
+ return element;
+
+ elements.push(element);
+ }
+
+ return elements;
+}
+
+/**
+ * Simple function to check if a global var is defined
+ *
+ * @author Kae Verens
+ * @link http://verens.com/archives/2005/07/25/isset-for-javascript/#comment-2835
+ */
+function isset(varname){
+ return(typeof(window[varname])!='undefined');
+}
+
+/**
+ * Select elements by their class name
+ *
+ * @author Dustin Diaz <dustin [at] dustindiaz [dot] com>
+ * @link http://www.dustindiaz.com/getelementsbyclass/
+ */
+function getElementsByClass(searchClass,node,tag) {
+ var classElements = new Array();
+ if ( node == null )
+ node = document;
+ if ( tag == null )
+ tag = '*';
+ var els = node.getElementsByTagName(tag);
+ var elsLen = els.length;
+ var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
+ for (var i = 0, j = 0; i < elsLen; i++) {
+ if ( pattern.test(els[i].className) ) {
+ classElements[j] = els[i];
+ j++;
+ }
+ }
+ return classElements;
+}
+
+/**
+ * Get the X offset of the top left corner of the given object
+ *
+ * @link http://www.quirksmode.org/index.html?/js/findpos.html
+ */
+function findPosX(object){
+ var curleft = 0;
+ var obj = DOKUid(object);
+ if (obj.offsetParent){
+ while (obj.offsetParent){
+ curleft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ }
+ else if (obj.x){
+ curleft += obj.x;
+ }
+ return curleft;
+} //end findPosX function
+
+/**
+ * Get the Y offset of the top left corner of the given object
+ *
+ * @link http://www.quirksmode.org/index.html?/js/findpos.html
+ */
+function findPosY(object){
+ var curtop = 0;
+ var obj = DOKUid(object);
+ if (obj.offsetParent){
+ while (obj.offsetParent){
+ curtop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ }
+ else if (obj.y){
+ curtop += obj.y;
+ }
+ return curtop;
+} //end findPosY function
+
+/**
+ * Escape special chars in JavaScript
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function jsEscape(text){
+ var re=new RegExp("\\\\","g");
+ text=text.replace(re,"\\\\");
+ re=new RegExp("'","g");
+ text=text.replace(re,"\\'");
+ re=new RegExp('"',"g");
+ text=text.replace(re,'&quot;');
+ re=new RegExp("\\\\\\\\n","g");
+ text=text.replace(re,"\\n");
+ return text;
+}
+
+/**
+ * This function escapes some special chars
+ * @deprecated by above function
+ */
+function escapeQuotes(text) {
+ var re=new RegExp("'","g");
+ text=text.replace(re,"\\'");
+ re=new RegExp('"',"g");
+ text=text.replace(re,'&quot;');
+ re=new RegExp("\\n","g");
+ text=text.replace(re,"\\n");
+ return text;
+}
+
+/**
+ * Adds a node as the first childenode to the given parent
+ *
+ * @see appendChild()
+ */
+function prependChild(parent,element) {
+ if(!parent.firstChild){
+ parent.appendChild(element);
+ }else{
+ parent.insertBefore(element,parent.firstChild);
+ }
+}
+
+/**
+ * Prints a animated gif to show the search is performed
+ *
+ * Because we need to modify the DOM here before the document is loaded
+ * and parsed completely we have to rely on document.write()
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function showLoadBar(){
+
+ document.write('<img src="'+DOKU_MEDIA+'lib/images/loading.gif" '+
+ 'width="150" height="12" alt="..." />');
+
+ /* this does not work reliable in IE
+ obj = DOKUid(id);
+
+ if(obj){
+ obj.innerHTML = '<img src="'+DOKU_BASE+'lib/images/loading.gif" '+
+ 'width="150" height="12" alt="..." />';
+ obj.style.display="block";
+ }
+ */
+}
+
+/**
+ * Disables the animated gif to show the search is done
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function hideLoadBar(id){
+ obj = DOKUid(id);
+ if(obj) obj.style.display="none";
+}
+
+/**
+ * Adds the toggle switch to the TOC
+ */
+function addTocToggle() {
+ if(!document.getElementById) return;
+ var header = DOKUid('toc__header');
+ if(!header) return;
+ var toc = DOKUid('toc__inside');
+
+ var obj = document.createElement('span');
+ obj.id = 'toc__toggle';
+ obj.style.cursor = 'pointer';
+ if (toc && toc.style.display == 'none') {
+ obj.innerHTML = '<span>+</span>';
+ obj.className = 'toc_open';
+ } else {
+ obj.innerHTML = '<span>&minus;</span>';
+ obj.className = 'toc_close';
+ }
+
+ prependChild(header,obj);
+ obj.parentNode.onclick = toggleToc;
+ try {
+ obj.parentNode.style.cursor = 'pointer';
+ obj.parentNode.style.cursor = 'hand';
+ }catch(e){}
+}
+
+/**
+ * This toggles the visibility of the Table of Contents
+ */
+function toggleToc() {
+ var toc = DOKUid('toc__inside');
+ var obj = DOKUid('toc__toggle');
+ if(toc.style.display == 'none') {
+ toc.style.display = '';
+ obj.innerHTML = '<span>&minus;</span>';
+ obj.className = 'toc_close';
+ } else {
+ toc.style.display = 'none';
+ obj.innerHTML = '<span>+</span>';
+ obj.className = 'toc_open';
+ }
+}
+
+/**
+ * Display an insitu footnote popup
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Chris Smith <chris@jalakai.co.uk>
+ */
+function footnote(e){
+ var obj = e.target;
+ var id = obj.id.substr(5);
+
+ // get or create the footnote popup div
+ var fndiv = DOKUid('insitu__fn');
+ if(!fndiv){
+ fndiv = document.createElement('div');
+ fndiv.id = 'insitu__fn';
+ fndiv.className = 'insitu-footnote JSpopup dokuwiki';
+
+ // autoclose on mouseout - ignoring bubbled up events
+ addEvent(fndiv,'mouseout',function(e){
+ if(e.target != fndiv){
+ e.stopPropagation();
+ return;
+ }
+ // check if the element was really left
+ if(e.pageX){ // Mozilla
+ var bx1 = findPosX(fndiv);
+ var bx2 = bx1 + fndiv.offsetWidth;
+ var by1 = findPosY(fndiv);
+ var by2 = by1 + fndiv.offsetHeight;
+ var x = e.pageX;
+ var y = e.pageY;
+ if(x > bx1 && x < bx2 && y > by1 && y < by2){
+ // we're still inside boundaries
+ e.stopPropagation();
+ return;
+ }
+ }else{ // IE
+ if(e.offsetX > 0 && e.offsetX < fndiv.offsetWidth-1 &&
+ e.offsetY > 0 && e.offsetY < fndiv.offsetHeight-1){
+ // we're still inside boundaries
+ e.stopPropagation();
+ return;
+ }
+ }
+ // okay, hide it
+ fndiv.style.display='none';
+ });
+ document.body.appendChild(fndiv);
+ }
+
+ // locate the footnote anchor element
+ var a = DOKUid( "fn__"+id );
+ if (!a){ return; }
+
+ // anchor parent is the footnote container, get its innerHTML
+ var content = new String (a.parentNode.parentNode.innerHTML);
+
+ // strip the leading content anchors and their comma separators
+ content = content.replace(/<sup>.*<\/sup>/gi, '');
+ content = content.replace(/^\s+(,\s+)+/,'');
+
+ // prefix ids on any elements with "insitu__" to ensure they remain unique
+ content = content.replace(/\bid=\"(.*?)\"/gi,'id="insitu__$1');
+
+ // now put the content into the wrapper
+ fndiv.innerHTML = content;
+
+ // position the div and make it visible
+ var x; var y;
+ if(e.pageX){ // Mozilla
+ x = e.pageX;
+ y = e.pageY;
+ }else{ // IE
+ x = e.offsetX;
+ y = e.offsetY;
+ }
+ fndiv.style.position = 'absolute';
+ fndiv.style.left = (x+2)+'px';
+ fndiv.style.top = (y+2)+'px';
+ fndiv.style.display = '';
+}
+
+/**
+ * Add the event handlers to footnotes
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+addInitEvent(function(){
+ var elems = getElementsByClass('fn_top',null,'a');
+ for(var i=0; i<elems.length; i++){
+ addEvent(elems[i],'mouseover',function(e){footnote(e);});
+ }
+});
+
+/**
+ * Add the edit window size controls
+ */
+function initSizeCtl(ctlid,edid){
+ if(!document.getElementById){ return; }
+
+ var ctl = DOKUid(ctlid);
+ var textarea = DOKUid(edid);
+ if(!ctl || !textarea) return;
+
+ var hgt = DokuCookie.getValue('sizeCtl');
+ if(hgt){
+ textarea.style.height = hgt;
+ }else{
+ textarea.style.height = '300px';
+ }
+
+ var wrp = DokuCookie.getValue('wrapCtl');
+ if(wrp){
+ setWrap(textarea, wrp);
+ } // else use default value
+
+ var l = document.createElement('img');
+ var s = document.createElement('img');
+ var w = document.createElement('img');
+ l.src = DOKU_MEDIA+'lib/images/larger.gif';
+ s.src = DOKU_MEDIA+'lib/images/smaller.gif';
+ w.src = DOKU_MEDIA+'lib/images/wrap.gif';
+ addEvent(l,'click',function(){sizeCtl(edid,100);});
+ addEvent(s,'click',function(){sizeCtl(edid,-100);});
+ addEvent(w,'click',function(){toggleWrap(edid);});
+ ctl.appendChild(l);
+ ctl.appendChild(s);
+ ctl.appendChild(w);
+}
+
+/**
+ * This sets the vertical size of the editbox
+ */
+function sizeCtl(edid,val){
+ var textarea = DOKUid(edid);
+ var height = parseInt(textarea.style.height.substr(0,textarea.style.height.length-2));
+ height += val;
+ textarea.style.height = height+'px';
+
+ DokuCookie.setValue('sizeCtl',textarea.style.height);
+}
+
+/**
+ * Toggle the wrapping mode of a textarea
+ */
+function toggleWrap(edid){
+ var textarea = DOKUid(edid);
+ var wrap = textarea.getAttribute('wrap');
+ if(wrap && wrap.toLowerCase() == 'off'){
+ setWrap(textarea, 'soft');
+ }else{
+ setWrap(textarea, 'off');
+ }
+
+ DokuCookie.setValue('wrapCtl',textarea.getAttribute('wrap'));
+}
+
+/**
+ * Set the wrapping mode of a textarea
+ *
+ * @author Fluffy Convict <fluffyconvict@hotmail.com>
+ * @author <shutdown@flashmail.com>
+ * @link http://news.hping.org/comp.lang.javascript.archive/12265.html
+ * @link https://bugzilla.mozilla.org/show_bug.cgi?id=41464
+ */
+function setWrap(textarea, wrapAttrValue){
+ textarea.setAttribute('wrap', wrapAttrValue);
+
+ // Fix display for mozilla
+ var parNod = textarea.parentNode;
+ var nxtSib = textarea.nextSibling;
+ parNod.removeChild(textarea);
+ parNod.insertBefore(textarea, nxtSib);
+}
+
+/**
+ * Handler to close all open Popups
+ */
+function closePopups(){
+ if(!document.getElementById){ return; }
+
+ var divs = document.getElementsByTagName('div');
+ for(var i=0; i < divs.length; i++){
+ if(divs[i].className.indexOf('JSpopup') != -1){
+ divs[i].style.display = 'none';
+ }
+ }
+}
+
+/**
+ * Looks for an element with the ID scroll__here at scrolls to it
+ */
+function scrollToMarker(){
+ var obj = DOKUid('scroll__here');
+ if(obj) obj.scrollIntoView();
+}
+
+/**
+ * Looks for an element with the ID focus__this at sets focus to it
+ */
+function focusMarker(){
+ var obj = DOKUid('focus__this');
+ if(obj) obj.focus();
+}
+
+/**
+ * Remove messages
+ */
+function cleanMsgArea(){
+ var elems = getElementsByClass('(success|info|error)',document,'div');
+ if(elems){
+ for(var i=0; i<elems.length; i++){
+ elems[i].style.display = 'none';
+ }
+ }
+}
+
+/**
+ * disable multiple revisions checkboxes if two are checked
+ *
+ * @author Anika Henke <anika@selfthinker.org>
+ */
+addInitEvent(function(){
+ var revForm = DOKUid('page__revisions');
+ if (!revForm) return;
+ var elems = revForm.elements;
+ var countTicks = 0;
+ for (var i=0; i<elems.length; i++) {
+ var input1 = elems[i];
+ if (input1.type=='checkbox') {
+ addEvent(input1,'click',function(e){
+ if (this.checked) countTicks++;
+ else countTicks--;
+ for (var j=0; j<elems.length; j++) {
+ var input2 = elems[j];
+ if (countTicks >= 2) input2.disabled = (input2.type=='checkbox' && !input2.checked);
+ else input2.disabled = (input2.type!='checkbox');
+ }
+ });
+ input1.checked = false; // chrome reselects on back button which messes up the logic
+ } else if(input1.type=='submit'){
+ input1.disabled = true;
+ }
+ }
+});
+
+/**
+ * Add the event handler to the actiondropdown
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+addInitEvent(function(){
+ var selector = DOKUid('action__selector');
+ if(!selector) return;
+
+ addEvent(selector,'change',function(e){
+ this.form.submit();
+ });
+
+ DOKUid('action__selectorbtn').style.display = 'none';
+});
+
+/**
+ * Display error for Windows Shares on browsers other than IE
+ *
+ * @author Michael Klier <chi@chimeric.de>
+ */
+function checkWindowsShares() {
+ if(!LANG['nosmblinks']) return true;
+ var elems = getElementsByClass('windows',document,'a');
+ if(elems){
+ for(var i=0; i<elems.length; i++){
+ var share = elems[i];
+ addEvent(share,'click',function(){
+ if(document.all == null) {
+ alert(LANG['nosmblinks']);
+ }
+ });
+ }
+ }
+}
+
+/**
+ * Add the event handler for the Windows Shares check
+ *
+ * @author Michael Klier <chi@chimeric.de>
+ */
+addInitEvent(function(){
+ checkWindowsShares();
+});
+
+/**
+ * Highlight the section when hovering over the appropriate section edit button
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+addInitEvent(function(){
+ var break_classes = new RegExp('secedit|toc|page');
+ var btns = getElementsByClass('btn_secedit',document,'form');
+ for(var i=0; i<btns.length; i++){
+ addEvent(btns[i],'mouseover',function(e){
+ var tgt = e.target;
+ if(tgt.form) tgt = tgt.form;
+ tgt = tgt.parentNode.previousSibling;
+ if(tgt.nodeName != "DIV") tgt = tgt.previousSibling;
+ while(!break_classes.test(tgt.className)) {
+ tgt.className += ' section_highlight';
+ if (tgt.tagName == 'H1') break;
+ tgt = (tgt.previousSibling != null) ? tgt.previousSibling : tgt.parentNode;
+ }
+ });
+
+ addEvent(btns[i],'mouseout',function(e){
+ var secs = getElementsByClass('section_highlight');
+ for(var j=0; j<secs.length; j++){
+ secs[j].className = secs[j].className.replace(/section_highlight/,'');
+ }
+ var secs = getElementsByClass('section_highlight');
+ });
+ }
+});
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/scripts/textselection.js b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/textselection.js
new file mode 100644
index 000000000..39dd4cc41
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/textselection.js
@@ -0,0 +1,226 @@
+/**
+ * Text selection related functions.
+ */
+
+/**
+ * selection prototype
+ *
+ * Object that capsulates the selection in a textarea. Returned by getSelection.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function selection_class(){
+ this.start = 0;
+ this.end = 0;
+ this.obj = null;
+ this.rangeCopy = null;
+ this.scroll = 0;
+ this.fix = 0;
+
+ this.getLength = function(){
+ return this.end - this.start;
+ };
+
+ this.getText = function(){
+ if(!this.obj) return '';
+ return this.obj.value.substring(this.start,this.end);
+ }
+}
+
+/**
+ * Get current selection/cursor position in a given textArea
+ *
+ * @link http://groups.drupal.org/node/1210
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @link http://linebyline.blogspot.com/2006/11/textarea-cursor-position-in-internet.html
+ * @returns object - a selection object
+ */
+function getSelection(textArea) {
+ var sel = new selection_class();
+
+ sel.obj = textArea;
+ sel.start = textArea.value.length;
+ sel.end = textArea.value.length;
+
+ textArea.focus();
+ if(document.getSelection) { // Mozilla et al.
+ sel.start = textArea.selectionStart;
+ sel.end = textArea.selectionEnd;
+ sel.scroll = textArea.scrollTop;
+ } else if(document.selection) { // MSIE
+ /*
+ * This huge lump of code is neccessary to work around two MSIE bugs:
+ *
+ * 1. Selections trim newlines at the end of the code
+ * 2. Selections count newlines as two characters
+ */
+
+ // The current selection
+ sel.rangeCopy = document.selection.createRange().duplicate();
+
+ var before_range = document.body.createTextRange();
+ before_range.moveToElementText(textArea); // Selects all the text
+ before_range.setEndPoint("EndToStart", sel.rangeCopy); // Moves the end where we need it
+
+ var before_finished = false, selection_finished = false;
+ var before_text, selection_text;
+ // Load the text values we need to compare
+ before_text = before_range.text;
+ selection_text = sel.rangeCopy.text;
+
+ sel.start = before_text.length;
+ sel.end = sel.start + selection_text.length;
+
+ // Check each range for trimmed newlines by shrinking the range by 1 character and seeing
+ // if the text property has changed. If it has not changed then we know that IE has trimmed
+ // a \r\n from the end.
+ do {
+ if (!before_finished) {
+ if (before_range.compareEndPoints("StartToEnd", before_range) == 0) {
+ before_finished = true;
+ } else {
+ before_range.moveEnd("character", -1);
+ if (before_range.text == before_text) {
+ sel.start += 2;
+ sel.end += 2;
+ } else {
+ before_finished = true;
+ }
+ }
+ }
+ if (!selection_finished) {
+ if (sel.rangeCopy.compareEndPoints("StartToEnd", sel.rangeCopy) == 0) {
+ selection_finished = true;
+ } else {
+ sel.rangeCopy.moveEnd("character", -1);
+ if (sel.rangeCopy.text == selection_text) {
+ sel.end += 2;
+ } else {
+ selection_finished = true;
+ }
+ }
+ }
+ } while ((!before_finished || !selection_finished));
+
+
+ // count number of newlines in str to work around stupid IE selection bug
+ var countNL = function(str) {
+ var m = str.split("\r\n");
+ if (!m || !m.length) return 0;
+ return m.length-1;
+ };
+ sel.fix = countNL(sel.obj.value.substring(0,sel.start));
+
+ }
+ return sel;
+}
+
+/**
+ * Set the selection
+ *
+ * You need to get a selection object via getSelection() first, then modify the
+ * start and end properties and pass it back to this function.
+ *
+ * @link http://groups.drupal.org/node/1210
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @param object selection - a selection object as returned by getSelection()
+ */
+function setSelection(selection){
+ if(document.getSelection){ // FF
+ // what a pleasure in FF ;)
+ selection.obj.setSelectionRange(selection.start,selection.end);
+ if(selection.scroll) selection.obj.scrollTop = selection.scroll;
+ } else if(document.selection) { // IE
+ selection.rangeCopy.collapse(true);
+ selection.rangeCopy.moveStart('character',selection.start - selection.fix);
+ selection.rangeCopy.moveEnd('character',selection.end - selection.start);
+ selection.rangeCopy.select();
+ }
+}
+
+/**
+ * Inserts the given text at the current cursor position or replaces the current
+ * selection
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @param string text - the new text to be pasted
+ * @param objct selecttion - selection object returned by getSelection
+ * @param int opts.startofs - number of charcters at the start to skip from new selection
+ * @param int opts.endofs - number of characters at the end to skip from new selection
+ * @param bool opts.nosel - set true if new text should not be selected
+ */
+function pasteText(selection,text,opts){
+ if(!opts) opts = {};
+ // replace the content
+
+ selection.obj.value =
+ selection.obj.value.substring(0, selection.start) + text +
+ selection.obj.value.substring(selection.end, selection.obj.value.length);
+
+ // set new selection
+ selection.end = selection.start + text.length;
+
+ // modify the new selection if wanted
+ if(opts.startofs) selection.start += opts.startofs;
+ if(opts.endofs) selection.end -= opts.endofs;
+
+ // no selection wanted? set cursor to end position
+ if(opts.nosel) selection.start = selection.end;
+
+ setSelection(selection);
+}
+
+
+/**
+ * Format selection
+ *
+ * Apply tagOpen/tagClose to selection in textarea, use sampleText instead
+ * of selection if there is none.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function insertTags(textAreaID, tagOpen, tagClose, sampleText){
+ var txtarea = DOKUid(textAreaID);
+
+ var selection = getSelection(txtarea);
+ var text = selection.getText();
+ var opts;
+
+ // don't include trailing space in selection
+ if(text.charAt(text.length - 1) == ' '){
+ selection.end--;
+ text = selection.getText();
+ }
+
+ if(!text){
+ // nothing selected, use the sample text and select it
+ text = sampleText;
+ opts = {
+ startofs: tagOpen.length,
+ endofs: tagClose.length
+ };
+ }else{
+ // place cursor at the end
+ opts = {
+ nosel: true
+ };
+ }
+
+ // surround with tags
+ text = tagOpen + text + tagClose;
+
+ // do it
+ pasteText(selection,text,opts);
+}
+
+/**
+ * Wraps around pasteText() for backward compatibility
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function insertAtCarret(textAreaID, text){
+ var txtarea = DOKUid(textAreaID);
+ var selection = getSelection(txtarea);
+ pasteText(selection,text,{nosel: true});
+}
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/scripts/toolbar.js b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/toolbar.js
new file mode 100644
index 000000000..d9633ef2d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/toolbar.js
@@ -0,0 +1,252 @@
+
+// used to identify pickers
+var pickercounter=0;
+
+/**
+ * Create a toolbar
+ *
+ * @param string tbid ID of the element where to insert the toolbar
+ * @param string edid ID of the editor textarea
+ * @param array tb Associative array defining the buttons
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function initToolbar(tbid,edid,tb){
+ var toolbar = DOKUid(tbid);
+ if(!toolbar) return;
+ var edit = DOKUid(edid);
+ if(!edit) return;
+ if(edit.readOnly) return;
+
+ //empty the toolbar area:
+ toolbar.innerHTML='';
+
+ var cnt = tb.length;
+ for(var i=0; i<cnt; i++){
+ var actionFunc;
+
+ // create new button
+ var btn = createToolButton(tb[i]['icon'],
+ tb[i]['title'],
+ tb[i]['key']);
+
+
+ // type is a tb function -> assign it as onclick
+ actionFunc = 'tb_'+tb[i]['type'];
+ if( isFunction(window[actionFunc]) ){
+ addEvent(btn,'click', bind(window[actionFunc],btn,tb[i],edid));
+ toolbar.appendChild(btn);
+ continue;
+ }
+
+ // type is a init function -> execute it
+ actionFunc = 'addBtnAction'+tb[i]['type'].charAt(0).toUpperCase()+tb[i]['type'].substring(1);
+ if( isFunction(window[actionFunc]) ){
+ if(window[actionFunc](btn, tb[i], edid)){
+ toolbar.appendChild(btn);
+ }
+ continue;
+ }
+
+ alert('unknown toolbar type: '+tb[i]['type']+' '+actionFunc);
+ } // end for
+
+}
+
+/**
+ * Button action for format buttons
+ *
+ * @param DOMElement btn Button element to add the action to
+ * @param array props Associative array of button properties
+ * @param string edid ID of the editor textarea
+ * @author Gabriel Birke <birke@d-scribe.de>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function tb_format(btn, props, edid) {
+ var sample = props['title'];
+ if(props['sample']){
+ sample = props['sample'];
+ }
+ insertTags(edid,
+ fixtxt(props['open']),
+ fixtxt(props['close']),
+ fixtxt(sample));
+ pickerClose();
+ return false;
+}
+
+/**
+ * Button action for format buttons
+ *
+ * This works exactly as tb_format() except that, if multiple lines
+ * are selected, each line will be formatted seperately
+ *
+ * @param DOMElement btn Button element to add the action to
+ * @param array props Associative array of button properties
+ * @param string edid ID of the editor textarea
+ * @author Gabriel Birke <birke@d-scribe.de>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function tb_formatln(btn, props, edid) {
+ var sample = props['title'];
+ if(props['sample']){
+ sample = props['sample'];
+ }
+ sample = fixtxt(sample);
+
+ props['open'] = fixtxt(props['open']);
+ props['close'] = fixtxt(props['close']);
+
+ // is something selected?
+ var opts;
+ var selection = getSelection(DOKUid(edid));
+ if(selection.getLength()){
+ sample = selection.getText();
+ opts = {nosel: true};
+ }else{
+ opts = {
+ startofs: props['open'].length,
+ endofs: props['close'].length
+ };
+ }
+
+ sample = sample.split("\n").join(props['close']+"\n"+props['open']);
+ sample = props['open']+sample+props['close'];
+
+ pasteText(selection,sample,opts);
+
+ pickerClose();
+ return false;
+}
+
+/**
+ * Button action for insert buttons
+ *
+ * @param DOMElement btn Button element to add the action to
+ * @param array props Associative array of button properties
+ * @param string edid ID of the editor textarea
+ * @author Gabriel Birke <birke@d-scribe.de>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function tb_insert(btn, props, edid) {
+ insertAtCarret(edid,fixtxt(props['insert']));
+ pickerClose();
+ return false;
+}
+
+/**
+ * Button action for the media popup
+ *
+ * @param DOMElement btn Button element to add the action to
+ * @param array props Associative array of button properties
+ * @param string edid ID of the editor textarea
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function tb_mediapopup(btn, props, edid) {
+ window.open(
+ DOKU_BASE+props['url']+encodeURIComponent(NS),
+ props['name'],
+ props['options']);
+ return false;
+}
+
+/**
+ * Button action for automatic headlines
+ *
+ * Insert a new headline based on the current section level
+ *
+ * @param DOMElement btn Button element to add the action to
+ * @param array props Associative array of button properties
+ * @param string edid ID of the editor textarea
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function tb_autohead(btn, props, edid){
+ var lvl = currentHeadlineLevel(edid);
+
+ // determine new level
+ lvl += props['mod'];
+ if(lvl < 1) lvl = 1;
+ if(lvl > 5) lvl = 5;
+
+ var tags = '=';
+ for(var i=0; i<=5-lvl; i++) tags += '=';
+ insertTags(edid, tags+' ', ' '+tags+"\n", props['text']);
+ pickerClose();
+ return false;
+}
+
+
+/**
+ * Add button action for picker buttons and create picker element
+ *
+ * @param DOMElement btn Button element to add the action to
+ * @param array props Associative array of button properties
+ * @param string edid ID of the editor textarea
+ * @return boolean If button should be appended
+ * @author Gabriel Birke <birke@d-scribe.de>
+ */
+function addBtnActionPicker(btn, props, edid) {
+ var pickerid = 'picker'+(pickercounter++);
+ createPicker(pickerid, props, edid);
+ addEvent(btn,'click',function(){
+ pickerToggle(pickerid,btn);
+ return false;
+ });
+ return true;
+}
+
+/**
+ * Add button action for the link wizard button
+ *
+ * @param DOMElement btn Button element to add the action to
+ * @param array props Associative array of button properties
+ * @param string edid ID of the editor textarea
+ * @return boolean If button should be appended
+ * @author Andreas Gohr <gohr@cosmocode.de>
+ */
+function addBtnActionLinkwiz(btn, props, edid) {
+ linkwiz.init(DOKUid(edid));
+ addEvent(btn,'click',function(){
+ linkwiz.toggle();
+ return false;
+ });
+ return true;
+}
+
+/**
+ * Show/Hide a previosly created picker window
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function pickerToggle(pickerid,btn){
+ var picker = DOKUid(pickerid);
+ if(picker.style.marginLeft == '-10000px'){
+ var x = findPosX(btn);
+ var y = findPosY(btn);
+ picker.style.left = (x+3)+'px';
+ picker.style.top = (y+btn.offsetHeight+3)+'px';
+ picker.style.marginLeft = '0px';
+ }else{
+ picker.style.marginLeft = '-10000px';
+ }
+}
+
+/**
+ * Close all open pickers
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function pickerClose(){
+ var pobjs = getElementsByClass('picker');
+ for(var i=0; i<pobjs.length; i++){
+ pobjs[i].style.marginLeft = '-10000px';
+ }
+}
+
+
+/**
+ * Replaces \n with linebreaks
+ */
+function fixtxt(str){
+ return str.replace(/\\n/g,"\n");
+}
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/scripts/tw-sack.js b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/tw-sack.js
new file mode 100644
index 000000000..cfcbe0ea9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/tw-sack.js
@@ -0,0 +1,136 @@
+/* Simple AJAX Code-Kit (SACK) */
+/* ©2005 Gregory Wild-Smith */
+/* www.twilightuniverse.com */
+/* Software licenced under a modified X11 licence, see documentation or authors website for more details */
+
+function sack(file){
+ this.AjaxFailedAlert = "Your browser does not support the enhanced functionality of this website, and therefore you will have an experience that differs from the intended one.\n";
+ this.requestFile = file;
+ this.method = "POST";
+ this.URLString = "";
+ this.encodeURIString = true;
+ this.execute = false;
+
+ this.onLoading = function() { };
+ this.onLoaded = function() { };
+ this.onInteractive = function() { };
+ this.onCompletion = function() { };
+ this.afterCompletion = function() { };
+
+ this.createAJAX = function() {
+ try {
+ this.xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
+ } catch (e) {
+ try {
+ this.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
+ } catch (err) {
+ this.xmlhttp = null;
+ }
+ }
+ if(!this.xmlhttp && typeof XMLHttpRequest != "undefined"){
+ this.xmlhttp = new XMLHttpRequest();
+ }
+ if (!this.xmlhttp){
+ this.failed = true;
+ }
+ };
+
+ this.setVar = function(name, value){
+ if (this.URLString.length < 3){
+ this.URLString = name + "=" + value;
+ } else {
+ this.URLString += "&" + name + "=" + value;
+ }
+ };
+
+ this.encVar = function(name, value){
+ var varString = encodeURIComponent(name) + "=" + encodeURIComponent(value);
+ return varString;
+ };
+
+ this.encodeURLString = function(string){
+ varArray = string.split('&');
+ for (i = 0; i < varArray.length; i++){
+ urlVars = varArray[i].split('=');
+ if (urlVars[0].indexOf('amp;') != -1){
+ urlVars[0] = urlVars[0].substring(4);
+ }
+ varArray[i] = this.encVar(urlVars[0],urlVars[1]);
+ }
+ return varArray.join('&');
+ };
+
+ this.runResponse = function(){
+ eval(this.response);
+ };
+
+ this.runAJAX = function(urlstring){
+ this.responseStatus = new Array(2);
+ if(this.failed && this.AjaxFailedAlert){
+ alert(this.AjaxFailedAlert);
+ } else {
+ if (urlstring){
+ if (this.URLString.length){
+ this.URLString = this.URLString + "&" + urlstring;
+ } else {
+ this.URLString = urlstring;
+ }
+ }
+ if (this.encodeURIString){
+ var timeval = new Date().getTime();
+ this.URLString = this.encodeURLString(this.URLString);
+ this.setVar("rndval", timeval);
+ }
+ if (this.element) { this.elementObj = document.getElementById(this.element); }
+ if (this.xmlhttp) {
+ var self = this;
+ if (this.method == "GET") {
+ var totalurlstring = this.requestFile + "?" + this.URLString;
+ this.xmlhttp.open(this.method, totalurlstring, true);
+ } else {
+ this.xmlhttp.open(this.method, this.requestFile, true);
+ }
+ if (this.method == "POST"){
+ try {
+ this.xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=UTF-8');
+ } catch (e) {}
+ }
+
+ this.xmlhttp.onreadystatechange = function() {
+ switch (self.xmlhttp.readyState){
+ case 1:
+ self.onLoading();
+ break;
+ case 2:
+ self.onLoaded();
+ break;
+ case 3:
+ self.onInteractive();
+ break;
+ case 4:
+ self.response = self.xmlhttp.responseText;
+ self.responseXML = self.xmlhttp.responseXML;
+ self.responseStatus[0] = self.xmlhttp.status;
+ self.responseStatus[1] = self.xmlhttp.statusText;
+ self.onCompletion();
+ if(self.execute){ self.runResponse(); }
+ if (self.elementObj) {
+ var elemNodeName = self.elementObj.nodeName;
+ elemNodeName.toLowerCase();
+ if (elemNodeName == "input" || elemNodeName == "select" || elemNodeName == "option" || elemNodeName == "textarea"){
+ self.elementObj.value = self.response;
+ } else {
+ self.elementObj.innerHTML = self.response;
+ }
+ }
+ self.afterCompletion();
+ self.URLString = "";
+ break;
+ }
+ };
+ this.xmlhttp.send(this.URLString);
+ }
+ }
+ };
+this.createAJAX();
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/styles/feed.css b/mod/dokuwiki/vendors/dokuwiki/lib/styles/feed.css
new file mode 100644
index 000000000..44b72d770
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/styles/feed.css
@@ -0,0 +1,63 @@
+rss channel, feed, RDF {
+ font: 80% "Lucida Grande", Verdana, Lucida, Helvetica, Arial, sans-serif;
+ background-color: __background__;
+ color: __text__;
+ margin: 0;
+ padding: 0;
+}
+
+
+link, description, language, managingEditor, copyright, lastBuildDate, date,
+pubDate, generator, webMaster, ttl, docs, tagline, author, copyright,
+generator, content, created, issued, modified, subject, id, format, creator,
+category, image {
+ display: none;
+}
+
+item link, entry id {
+ display: block;
+ color: __extern__;
+ text-decoration: underline;
+}
+
+channel title, feed title {
+ display: block;
+ font-size: 200%;
+ font-weight: bolder;
+ color: __extern__;
+ text-decoration: none;
+ border-bottom: 20px solid __background_alt__;
+}
+
+:root:before {
+ content: "This data file is meant to be read in a XML feed reader. See document source."
+}
+
+item, entry {
+ display: block;
+ margin: 1em 180px 1em 1em;
+ border-bottom: 1px solid __border__;
+ padding-bottom: 1em;
+}
+
+item title, entry title {
+ display: block;
+ background: transparent none;
+ border: 0px solid __background_other__;
+ padding: 0;
+ color: __text_alt__;
+ font-size: 1.4em;
+ font-weight: bold;
+}
+
+item pubDate, entry modified, item date {
+ display: inline;
+ color: __text_neu__;
+ font: 1em trebuchet ms, arial, helvetica, sans-serif;
+}
+
+item description, entry summary {
+ display: block;
+ clear: both;
+ padding-top: 0.5em;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/styles/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/styles/index.html
new file mode 100644
index 000000000..d614603ac
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/styles/index.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="refresh" content="0; URL=../../" />
+<meta name="robots" content="noindex" />
+<title>nothing here...</title>
+</head>
+<body>
+<!-- this is just here to prevent directory browsing -->
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/styles/style.css b/mod/dokuwiki/vendors/dokuwiki/lib/styles/style.css
new file mode 100644
index 000000000..814191615
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/styles/style.css
@@ -0,0 +1,113 @@
+/**
+ * Basic styles. These styles are needed for basic DokuWiki functions
+ * regardless of the used template. Templates can override them of course
+ */
+
+div.clearer {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ overflow: hidden;
+}
+
+div.no {
+ display: inline;
+ margin: 0;
+ padding: 0;
+}
+
+.hidden {
+ display: none;
+}
+
+div.error {
+ background: #fcc url(../images/error.png) 0.5em 0px no-repeat;
+ color: #000;
+ border-bottom: 1px solid #faa;
+ font-size: 90%;
+ margin: 0;
+ padding-left: 3em;
+ overflow: hidden;
+}
+
+div.info {
+ background: #ccf url(../images/info.png) 0.5em 0px no-repeat;
+ color: #000;
+ border-bottom: 1px solid #aaf;
+ font-size: 90%;
+ margin: 0;
+ padding-left: 3em;
+ overflow: hidden;
+}
+
+div.success {
+ background: #cfc url(../images/success.png) 0.5em 0px no-repeat;
+ color: #000;
+ border-bottom: 1px solid #afa;
+ font-size: 90%;
+ margin: 0;
+ padding-left: 3em;
+ overflow: hidden;
+}
+
+div.notify {
+ background: #ffc url(../images/notify.png) 0.5em 0px no-repeat;
+ color: #000;
+ border-bottom: 1px solid #ffa;
+ font-size: 90%;
+ margin: 0;
+ padding-left: 3em;
+ overflow: hidden;
+}
+
+
+/* image alignment */
+.medialeft {
+ float: left;
+}
+.mediaright {
+ float: right;
+}
+.mediacenter {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+.leftalign { text-align: left; }
+.centeralign { text-align: center; }
+.rightalign { text-align: right; }
+
+em.u {
+ font-style: normal;
+ text-decoration: underline;
+}
+em em.u {
+ font-style: italic;
+}
+
+
+/* syntax highlighting code */
+.code .br0 { color: #66cc66; }
+.code .co0 { color: #808080; font-style: italic; }
+.code .co1 { color: #808080; font-style: italic; }
+.code .co2 { color: #808080; font-style: italic; }
+.code .co3 { color: #808080; }
+.code .coMULTI { color: #808080; font-style: italic; }
+.code .es0 { color: #000099; font-weight: bold; }
+.code .kw1 { color: #b1b100; }
+.code .kw2 { color: #000000; font-weight: bold; }
+.code .kw3 { color: #000066; }
+.code .kw4 { color: #993333; }
+.code .kw5 { color: #0000ff; }
+.code .me1 { color: #006600; }
+.code .me2 { color: #006600; }
+.code .nu0 { color: #cc66cc; }
+.code .re0 { color: #0000ff; }
+.code .re1 { color: #0000ff; }
+.code .re2 { color: #0000ff; }
+.code .re3 { color: #ff3333; font-weight:bold; }
+.code .re4 { color: #009999; }
+.code .st0 { color: #ff0000; }
+.code .sy0 { color: #66cc66; }
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/conf/default.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/conf/default.php
new file mode 100644
index 000000000..37a6110ec
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/conf/default.php
@@ -0,0 +1,8 @@
+<?php
+// sidebar configuration settings
+$conf['enable'] = 1; // 1 or true to enable sidebar functionality, 0 or false to disable it
+$conf['page'] = 'sidebar'; // name of sidebar page
+$conf['layout'] = 'inside'; // inside (between button bars) or outside (full height of dokuwiki)
+$conf['orientation'] = 'left'; // left or right
+$conf['showeditbtn'] = 1; // show a sidebar edit button IF USER HAS EDIT PERMISSION FOR SIDEBAR
+$conf['editbtntxt'] = 'edit sidebar';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/conf/metadata.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/conf/metadata.php
new file mode 100644
index 000000000..f37e32c60
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/conf/metadata.php
@@ -0,0 +1,9 @@
+<?php
+// sidebar configuration settings
+$meta['enable'] = array('onoff');
+$meta['page'] = array('string');
+$meta['layout'] = array('multichoice', '_choices' => array('inside','outside'));
+$meta['orientation'] = array('multichoice', '_choices' => array('left','right'));
+//$meta['showeditbtn'] = array('onoff');
+//$meta['editbtntxt'] = array('string');
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/design.css b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/design.css
new file mode 100644
index 000000000..2611daad0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/design.css
@@ -0,0 +1,796 @@
+/**
+ * Design elements for default Template
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Anika Henke <anika@selfthinker.org>
+ */
+
+/* -------------- general elements --------------- */
+
+* { padding: 0; margin: 0; }
+
+/*body {
+ font: 80% "Lucida Grande", Verdana, Lucida, Helvetica, Arial, sans-serif;
+ background-color: __background__;
+ color: __text__;
+}*/
+
+/* the document */
+div.dokuwiki div.page {
+ margin: 4px 2em 0 1em;
+ text-align: justify;
+}
+
+div.dokuwiki table {
+ font-size: 100%;
+}
+
+div.dokuwiki tr,
+div.dokuwiki td,
+div.dokuwiki th {
+}
+
+div.dokuwiki img {
+ border: 0;
+}
+
+div.dokuwiki p,
+div.dokuwiki blockquote,
+div.dokuwiki table,
+div.dokuwiki pre {
+ margin: 0 0 1.0em 0;
+}
+
+div.dokuwiki hr {
+ border: 0px;
+ border-top: 1px solid __border__;
+ text-align: center;
+ height: 0px;
+}
+
+div.dokuwiki div.nothing {
+ text-align: center;
+ margin: 2em;
+}
+
+/* ---------------- forms ------------------------ */
+
+div.dokuwiki form {
+ border: none;
+ display: inline;
+}
+
+div.dokuwiki label.block {
+ display: block;
+ text-align: right;
+ font-weight: bold;
+}
+
+div.dokuwiki label.simple {
+ display: block;
+ text-align: left;
+ font-weight: normal;
+}
+
+div.dokuwiki label.block input.edit {
+ width: 50%;
+}
+
+div.dokuwiki fieldset {
+ width: 300px;
+ text-align: center;
+ border: 1px solid __border__;
+ padding: 0.5em;
+ margin: auto;
+}
+
+div.dokuwiki textarea.edit {
+ font-family: monospace;
+ font-size: 14px;
+ color: __text__;
+ background-color: __background__;
+ border: 1px solid __border__;
+ padding: 0.3em 0 0 0.3em;
+ width: 100%;
+}
+
+/* nice alphatransparency background except for IE <7 */
+html>body div.dokuwiki textarea.edit {
+ background: __background__ url(images/inputshadow.png) repeat-x top;
+}
+
+div.dokuwiki input.edit,
+div.dokuwiki select.edit {
+ font-size: 100%;
+ border: 1px solid __border__;
+ color: __text__;
+ background-color: __background__;
+ vertical-align: middle;
+ margin: 1px;
+ padding: 0.20em 0.3em;
+ display: inline;
+}
+
+/* nice alphatransparency background except for IE <7 */
+html>body div.dokuwiki input.edit,
+html>body div.dokuwiki select.edit {
+ background: __background__ url(images/inputshadow.png) repeat-x top;
+}
+
+div.dokuwiki select.edit {
+ padding: 0.1em 0;
+}
+
+div.dokuwiki input.missing {
+ font-size: 100%;
+ border: 1px solid __border__;
+ color: __text__;
+ background-color: #ffcccc;
+ vertical-align: middle;
+ margin: 1px;
+ padding: 0.20em 0.3em;
+ display: inline;
+}
+
+/* disabled style - not understood by IE */
+div.dokuwiki textarea.edit[disabled],
+div.dokuwiki textarea.edit[readonly],
+div.dokuwiki input.edit[disabled],
+div.dokuwiki input.edit[readonly],
+div.dokuwiki select.edit[disabled] {
+ background-color: __background_neu__!important;
+ color: __text_neu__!important;
+}
+
+/* edit form */
+div.dokuwiki div.toolbar,
+div.dokuwiki div#wiki__editbar {
+ margin: 2px 0;
+ text-align: left;
+}
+div.dokuwiki div#size__ctl {
+ float: right;
+ width: 60px;
+ height: 2.7em;
+}
+div.dokuwiki #size__ctl img {
+ cursor: pointer;
+}
+div.dokuwiki div#wiki__editbar div.editButtons {
+ float: left;
+ padding: 0 1.0em 0.7em 0;
+}
+div.dokuwiki div#wiki__editbar div.summary {
+ float: left;
+}
+div.dokuwiki .nowrap {
+ white-space: nowrap;
+}
+div.dokuwiki div#draft__status {
+ float: right;
+ color: __text_alt__;
+}
+
+div.dokuwiki form#dw__editform div.license {
+ clear: left;
+ font-size: 90%;
+}
+
+div.dokuwiki p.license {
+ font-size: 90%;
+ text-align: center;
+}
+
+/* --------- buttons ------------------- */
+
+div.dokuwiki input.button,
+div.dokuwiki button.button {
+ border: 1px solid __border__;
+ color: __text__;
+ background-color: __background__;
+ vertical-align: middle;
+ text-decoration: none;
+ font-size: 100%;
+ cursor: pointer;
+ margin: 1px;
+ padding: 0.125em 0.4em;
+}
+
+/* nice alphatransparency background except for IE <7 */
+html>body div.dokuwiki input.button,
+html>body div.dokuwiki button.button {
+ background: __background__ url(images/buttonshadow.png) repeat-x bottom;
+}
+
+* html div.dokuwiki input.button,
+* html div.dokuwiki button.button {
+ height: 1.8em;
+}
+
+div.dokuwiki div.secedit input.button {
+ border: 1px solid __border__;
+ color: __text__;
+ background-color: __background__;
+ vertical-align: middle;
+ text-decoration: none;
+ margin: 0;
+ padding: 0;
+ font-size: 10px;
+ cursor: pointer;
+ float: right;
+ display: inline;
+}
+
+/* ----------- page navigator ------------- */
+
+div.dokuwiki div.pagenav {
+ margin: 1em 0 0 0;
+}
+
+div.dokuwiki div.pagenav-prev {
+ text-align: right;
+ float: left;
+ width: 49%
+}
+
+div.dokuwiki div.pagenav-next {
+ text-align: left;
+ float: right;
+ width: 49%
+}
+
+/* --------------- Links ------------------ */
+
+div.dokuwiki a:link,
+div.dokuwiki a:visited {
+ color: __extern__;
+ text-decoration: none;
+}
+div.dokuwiki a:hover,
+div.dokuwiki a:active {
+ color: __text__;
+ text-decoration: underline;
+}
+
+div.dokuwiki h1 a,
+div.dokuwiki h2 a,
+div.dokuwiki h3 a,
+div.dokuwiki h4 a,
+div.dokuwiki h5 a,
+div.dokuwiki a.nolink {
+ color: __text__ !important;
+ text-decoration: none !important;
+}
+
+/* external link */
+div.dokuwiki a.urlextern {
+ background: transparent url(images/link_icon.gif) 0px 1px no-repeat;
+ padding: 1px 0px 1px 16px;
+}
+
+/* windows share */
+div.dokuwiki a.windows {
+ background: transparent url(images/windows.gif) 0px 1px no-repeat;
+ padding: 1px 0px 1px 16px;
+}
+
+/* interwiki link (icon are set by dokuwiki) */
+div.dokuwiki a.interwiki {
+}
+
+/* link to some embedded media */
+div.dokuwiki a.media {
+}
+
+div.dokuwiki a.urlextern:link,
+div.dokuwiki a.windows:link,
+div.dokuwiki a.interwiki:link {
+ color: __extern__;
+}
+
+div.dokuwiki a.urlextern:visited,
+div.dokuwiki a.windows:visited,
+div.dokuwiki a.interwiki:visited {
+ color: purple;
+}
+div.dokuwiki a.urlextern:hover,
+div.dokuwiki a.urlextern:active,
+div.dokuwiki a.windows:hover,
+div.dokuwiki a.windows:active,
+div.dokuwiki a.interwiki:hover,
+div.dokuwiki a.interwiki:active {
+ color: __text__;
+}
+
+/* email link */
+div.dokuwiki a.mail {
+ background: transparent url(images/mail_icon.gif) 0px 1px no-repeat;
+ padding: 1px 0px 1px 16px;
+}
+
+/* existing wikipage */
+div.dokuwiki a.wikilink1 {
+ color: __existing__ !important;
+}
+
+/* not existing wikipage */
+div.dokuwiki a.wikilink2 {
+ color: __missing__ !important;
+ text-decoration: none !important;
+ border-bottom: dashed 1px __missing__ !important;
+}
+
+/* ------------- Page elements ----------------- */
+
+div.dokuwiki div.preview {
+ background-color: __background_neu__;
+ margin: 0 0 0 2em;
+ padding: 4px;
+ border: 1px dashed __text__;
+}
+
+div.dokuwiki div.breadcrumbs {
+ background-color: __background_neu__;
+ color: __text_neu__;
+ font-size: 80%;
+ padding: 0 0 0 4px;
+}
+
+div.dokuwiki span.user {
+ color: __text_other__;
+ font-size: 90%;
+}
+
+div.dokuwiki li.minor {
+ color: __text_neu__;
+ font-style: italic;
+}
+
+/* embedded images */
+div.dokuwiki img.media {
+ margin: 3px;
+}
+
+div.dokuwiki img.medialeft {
+ border: 0;
+ float: left;
+ margin: 0 1.5em 0 0;
+}
+
+div.dokuwiki img.mediaright {
+ border: 0;
+ float: right;
+ margin: 0 0 0 1.5em;
+}
+
+div.dokuwiki img.mediacenter {
+ border: 0;
+ display: block;
+ margin: 0 auto;
+}
+
+/* smileys */
+div.dokuwiki img.middle {
+ vertical-align: middle;
+}
+
+div.dokuwiki acronym {
+ cursor: help;
+ border-bottom: 1px dotted __text__;
+}
+
+/* general headline setup */
+div.dokuwiki h1,
+div.dokuwiki h2,
+div.dokuwiki h3,
+div.dokuwiki h4,
+div.dokuwiki h5 {
+ color: __text__;
+ background-color: inherit;
+ font-size: 100%;
+ font-weight: normal;
+ margin: 0 0 1em 0;
+ padding: 0.5em 0 0 0;
+ border-bottom: 1px solid __border__;
+ clear: left;
+}
+
+/* special headlines */
+div.dokuwiki h1 {font-size: 160%; margin-left: 0px; font-weight: bold;}
+div.dokuwiki h2 {font-size: 150%; margin-left: 20px;}
+div.dokuwiki h3 {font-size: 140%; margin-left: 40px; border-bottom: none; font-weight: bold;}
+div.dokuwiki h4 {font-size: 120%; margin-left: 60px; border-bottom: none; font-weight: bold;}
+div.dokuwiki h5 {font-size: 100%; margin-left: 80px; border-bottom: none; font-weight: bold;}
+
+/* indent different sections */
+div.dokuwiki div.level1 {margin-left: 3px;}
+div.dokuwiki div.level2 {margin-left: 23px;}
+div.dokuwiki div.level3 {margin-left: 43px;}
+div.dokuwiki div.level4 {margin-left: 63px;}
+div.dokuwiki div.level5 {margin-left: 83px;}
+
+/* unordered lists */
+div.dokuwiki ul {
+ line-height: 1.5em;
+ list-style-type: square;
+ list-style-image: none;
+ margin: 0 0 1em 3.5em;
+ color: __text_alt__;
+}
+
+/* ordered lists */
+div.dokuwiki ol {
+ line-height: 1.5em;
+ list-style-image: none;
+ margin: 0 0 1em 3.5em;
+ color: __text_alt__;
+ font-weight: bold;
+}
+
+/* no gap in between nested lists */
+div.dokuwiki li ul {
+ margin-bottom: 0;
+}
+div.dokuwiki li ol {
+ margin-bottom: 0;
+}
+
+/* the list items overriding the ul/ol definition */
+div.dokuwiki .li {
+ color: __text__;
+ font-weight: normal;
+}
+
+div.dokuwiki ol {list-style-type: decimal}
+div.dokuwiki ol ol {list-style-type: upper-roman}
+div.dokuwiki ol ol ol {list-style-type: lower-alpha}
+div.dokuwiki ol ol ol ol {list-style-type: lower-greek}
+
+div.dokuwiki li.open {
+ list-style-image: url(images/open.gif);
+ /*list-style-type: circle;*/
+}
+
+div.dokuwiki li.closed {
+ list-style-image: url(images/closed.gif);
+ /*list-style-type: disc;*/
+}
+
+div.dokuwiki blockquote {
+ border-left: 2px solid __border__;
+ padding-left: 3px;
+}
+
+div.dokuwiki pre {
+ font-size: 120%;
+ padding: 0.5em;
+ border: 1px dashed __border__;
+ color: __text__;
+ overflow: auto;
+}
+
+/* code blocks by indention */
+div.dokuwiki pre.pre {
+ background-color: __background_other__;
+}
+
+/* code blocks by code tag */
+div.dokuwiki pre.code {
+ background-color: __background_other__;
+}
+
+/* inline code words */
+div.dokuwiki code {
+ font-size: 120%;
+}
+
+/* code blocks by file tag */
+div.dokuwiki pre.file {
+ background-color: __background_alt__;
+}
+
+/* inline tables */
+div.dokuwiki table.inline {
+ background-color: __background__;
+ border-spacing: 0px;
+ border-collapse: collapse;
+}
+
+div.dokuwiki table.inline th {
+ padding: 3px;
+ border: 1px solid __border__;
+ background-color: __background_alt__;
+}
+
+div.dokuwiki table.inline td {
+ padding: 3px;
+ border: 1px solid __border__;
+}
+
+/* ---------- table of contents ------------------- */
+
+div.dokuwiki div.toc {
+ margin: 1.2em 0 0 2em;
+ float: right;
+ width: 200px;
+ font-size: 80%;
+ clear: both;
+}
+
+div.dokuwiki div.tocheader {
+ border: 1px solid __border__;
+ background-color: __background_alt__;
+ text-align: left;
+ font-weight: bold;
+ padding: 3px;
+ margin-bottom: 2px;
+}
+
+div.dokuwiki span.toc_open,
+div.dokuwiki span.toc_close {
+ border: 0.4em solid __background_alt__;
+ float: right;
+ display: block;
+ margin: 0.4em 3px 0 0;
+}
+
+div.dokuwiki span.toc_open span,
+div.dokuwiki span.toc_close span {
+ display: none;
+}
+
+div.dokuwiki span.toc_open {
+ margin-top: 0.4em;
+ border-top: 0.4em solid __text__;
+}
+
+div.dokuwiki span.toc_close {
+ margin-top: 0;
+ border-bottom: 0.4em solid __text__;
+}
+
+div.dokuwiki #toc__inside {
+ border: 1px solid __border__;
+ background-color: __background__;
+ text-align: left;
+ padding: 0.5em 0 0.7em 0;
+}
+
+div.dokuwiki ul.toc {
+ list-style-type: none;
+ list-style-image: none;
+ line-height: 1.2em;
+ padding-left: 1em;
+ margin: 0;
+}
+
+div.dokuwiki ul.toc li {
+ background: transparent url(images/tocdot2.gif) 0 0.6em no-repeat;
+ padding-left: 0.4em;
+}
+
+div.dokuwiki ul.toc li.clear {
+ background-image: none;
+ padding-left: 0.4em;
+}
+
+div.dokuwiki a.toc:link,
+div.dokuwiki a.toc:visited {
+ color: __extern__;
+}
+
+div.dokuwiki a.toc:hover,
+div.dokuwiki a.toc:active {
+ color: __text__;
+}
+
+/* ---------------------------- Diff rendering --------------------------*/
+div.dokuwiki table.diff {
+ background-color: __background__;
+ width: 100%;
+}
+div.dokuwiki td.diff-blockheader {
+ font-weight: bold;
+}
+div.dokuwiki table.diff th {
+ border-bottom: 1px solid __border__;
+ font-size: 110%;
+ width: 50%;
+ font-weight: normal;
+ text-align: left;
+}
+div.dokuwiki table.diff th a {
+ font-weight: bold;
+}
+div.dokuwiki table.diff th span.user {
+ color: __text__;
+ font-size: 80%;
+}
+div.dokuwiki table.diff th span.sum {
+ font-size: 80%;
+ font-weight: bold;
+}
+div.dokuwiki table.diff th.minor {
+ font-style: italic;
+}
+div.dokuwiki table.diff td {
+ font-family: monospace;
+ font-size: 100%;
+}
+div.dokuwiki td.diff-addedline {
+ background-color: #ddffdd;
+}
+div.dokuwiki td.diff-deletedline {
+ background-color: #ffffbb;
+}
+div.dokuwiki td.diff-context {
+ background-color: __background_neu__;
+}
+div.dokuwiki table.diff td.diff-addedline strong,
+div.dokuwiki table.diff td.diff-deletedline strong {
+ color: red;
+}
+
+/* --------------------- footnotes -------------------------------- */
+
+div.dokuwiki div.footnotes {
+ clear: both;
+ border-top: 1px solid __border__;
+ padding-left: 1em;
+ margin-top: 1em;
+}
+
+div.dokuwiki div.fn {
+ font-size: 90%;
+}
+
+div.dokuwiki a.fn_bot {
+ font-weight: bold;
+}
+
+/* insitu-footnotes */
+div.insitu-footnote {
+ font-size: 80%;
+ line-height: 1.2em;
+ border: 1px solid __border__;
+ background-color: __background_other__;
+ text-align: left;
+ padding: 4px;
+ max-width: 40%; /* IE's width is handled in javascript */
+}
+
+/* overcome IE issue with one line code or file boxes which require h. scrolling */
+* html .insitu-footnote pre.code,
+* html .insitu-footnote pre.file {
+ padding-bottom: 18px;
+}
+
+/* --------------- search result formating --------------- */
+div.dokuwiki .search_result {
+ margin-bottom: 6px;
+ padding: 0 10px 0 30px;
+}
+
+div.dokuwiki .search_snippet {
+ color: __text_other__;
+ font-size: 12px;
+ margin-left: 20px;
+}
+
+div.dokuwiki .search_sep {
+ color: __text__;
+}
+
+div.dokuwiki .search_hit {
+ color: __text__;
+ background-color: __highlight__;
+}
+div.dokuwiki strong.search_hit {
+ font-weight: normal;
+}
+
+div.dokuwiki div.search_quickresult {
+ margin: 0 0 15px 30px;
+ padding: 0 10px 10px 0;
+ border-bottom: 1px dashed __border__;
+}
+div.dokuwiki div.search_quickresult h3 {
+ margin: 0 0 1.0em 0;
+ font-size: 1em;
+ font-weight: bold;
+}
+
+div.dokuwiki ul.search_quickhits {
+ margin: 0 0 0.5em 1.0em;
+}
+
+div.dokuwiki ul.search_quickhits li {
+ margin: 0 1.0em 0 1.0em;
+ float:left;
+ width: 30%;
+}
+
+/* ------------------ Additional ---------------------- */
+
+div.footerinc {
+ text-align: center;
+}
+.footerinc a img {
+ opacity: 0.5;
+ border: 0;
+}
+
+.footerinc a:hover img {
+ opacity: 1;
+}
+
+/* ---------- AJAX quicksearch ----------- */
+
+div.dokuwiki div.ajax_qsearch {
+ position: absolute;
+ right: 237px;;
+ width: 200px;
+ opacity: 0.9;
+ display: none;
+ font-size: 80%;
+ line-height: 1.2em;
+ border: 1px solid __border__;
+ background-color: __background_other__;
+ text-align: left;
+ padding: 4px;
+}
+
+/* --------- Toolbar -------------------- */
+button.toolbutton {
+ background-color: __background__;
+ padding: 0px;
+ margin: 0 1px 0 0;
+ border: 1px solid __border__;
+ cursor: pointer;
+}
+
+/* nice alphatransparency background except for IE <7 */
+html>body button.toolbutton {
+ background: __background__ url(images/buttonshadow.png) repeat-x bottom;
+}
+
+div.picker {
+ width: 250px;
+ border: 1px solid __border__;
+ background-color: __background_alt__;
+}
+
+button.pickerbutton {
+ padding: 0px;
+ margin: 0 1px 1px 0;
+ border: 0;
+ background-color: transparent;
+ font-size: 80%;
+ cursor: pointer;
+}
+
+/* --------------- Image Details ----------------- */
+
+div.dokuwiki div.img_big {
+ float: left;
+ margin-right: 0.5em;
+}
+
+div.dokuwiki dl.img_tags dt {
+ font-weight: bold;
+ background-color: __background_alt__;
+}
+div.dokuwiki dl.img_tags dd {
+ background-color: __background_neu__;
+}
+
+div.dokuwiki div.imagemeta {
+ color: __text_neu__;
+ font-size: 70%;
+ line-height: 95%;
+}
+
+div.dokuwiki div.imagemeta img.thumb {
+ float:left;
+ margin-right: 0.1em;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/detail.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/detail.php
new file mode 100644
index 000000000..765358568
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/detail.php
@@ -0,0 +1,89 @@
+<?php
+/**
+ * DokuWiki Image Detail Template
+ *
+ * This is the template for displaying image details
+ *
+ * You should leave the doctype at the very top - It should
+ * always be the very first line of a document.
+ *
+ * @link http://dokuwiki.org/templates
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+// must be run from within DokuWiki
+if (!defined('DOKU_INC')) die();
+
+?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $conf['lang']?>" lang="<?php echo $conf['lang']?>" dir="ltr">
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>
+ <?php echo hsc(tpl_img_getTag('IPTC.Headline',$IMG))?>
+ [<?php echo strip_tags($conf['title'])?>]
+ </title>
+
+ <?php tpl_metaheaders()?>
+
+ <link rel="shortcut icon" href="<?php echo DOKU_TPL?>images/favicon.ico" />
+</head>
+
+<body>
+<div class="dokuwiki">
+ <?php html_msgarea()?>
+
+ <div class="page">
+ <?php if($ERROR){ print $ERROR; }else{ ?>
+
+ <h1><?php echo hsc(tpl_img_getTag('IPTC.Headline',$IMG))?></h1>
+
+ <div class="img_big">
+ <?php tpl_img(900,700) ?>
+ </div>
+
+ <div class="img_detail">
+ <p class="img_caption">
+ <?php print nl2br(hsc(tpl_img_getTag('simple.title'))); ?>
+ </p>
+
+ <p>&larr; <?php echo $lang['img_backto']?> <?php tpl_pagelink($ID)?></p>
+
+ <dl class="img_tags">
+ <?php
+ $t = tpl_img_getTag('Date.EarliestTime');
+ if($t) print '<dt>'.$lang['img_date'].':</dt><dd>'.strftime($conf['dformat'],$t).'</dd>';
+
+ $t = tpl_img_getTag('File.Name');
+ if($t) print '<dt>'.$lang['img_fname'].':</dt><dd>'.hsc($t).'</dd>';
+
+ $t = tpl_img_getTag(array('Iptc.Byline','Exif.TIFFArtist','Exif.Artist','Iptc.Credit'));
+ if($t) print '<dt>'.$lang['img_artist'].':</dt><dd>'.hsc($t).'</dd>';
+
+ $t = tpl_img_getTag(array('Iptc.CopyrightNotice','Exif.TIFFCopyright','Exif.Copyright'));
+ if($t) print '<dt>'.$lang['img_copyr'].':</dt><dd>'.hsc($t).'</dd>';
+
+ $t = tpl_img_getTag('File.Format');
+ if($t) print '<dt>'.$lang['img_format'].':</dt><dd>'.hsc($t).'</dd>';
+
+ $t = tpl_img_getTag('File.NiceSize');
+ if($t) print '<dt>'.$lang['img_fsize'].':</dt><dd>'.hsc($t).'</dd>';
+
+ $t = tpl_img_getTag('Simple.Camera');
+ if($t) print '<dt>'.$lang['img_camera'].':</dt><dd>'.hsc($t).'</dd>';
+
+ $t = tpl_img_getTag(array('IPTC.Keywords','IPTC.Category','xmp.dc:subject'));
+ if($t) print '<dt>'.$lang['img_keywords'].':</dt><dd>'.hsc($t).'</dd>';
+
+ ?>
+ </dl>
+ <?php //Comment in for Debug// dbg(tpl_img_getTag('Simple.Raw'));?>
+ </div>
+
+ <?php } ?>
+ </div>
+</div>
+</body>
+</html>
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/footer.html b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/footer.html
new file mode 100644
index 000000000..38aab7216
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/footer.html
@@ -0,0 +1,41 @@
+<?php
+/**
+ * Example footer include
+ *
+ * This file shows you how to use the include hooks. However I recommend to
+ * create your own complete new template instead.
+ */
+
+$tgt = ($conf['target']['extern']) ? 'target="'.$conf['target']['extern'].'"' : '';
+?>
+
+<div class="footerinc">
+
+ <a <?php echo $tgt?> href="<?php echo DOKU_BASE; ?>feed.php" title="Recent changes RSS feed"><img src="<?php echo DOKU_TPL; ?>images/button-rss.png" width="80" height="15" alt="Recent changes RSS feed" /></a>
+
+ <?php
+ $lic = license_img('button');
+ if($lic){
+ ?>
+ <a <?php echo $tgt?> href="<?php echo $license[$conf['license']]['url']?>" rel="license" title="<?php echo $license[$conf['license']]['name']?>"><img src="<?php echo DOKU_BASE.$lic ?>" width="80" height="15" alt="" /></a>
+ <?php } ?>
+
+ <a <?php echo $tgt?> href="http://www.dokuwiki.org/donate" title="Donate"><img src="<?php echo DOKU_TPL; ?>images/button-donate.gif" alt="Donate" width="80" height="15" /></a>
+
+ <a <?php echo $tgt?> href="http://www.php.net" title="Powered by PHP"><img src="<?php echo DOKU_TPL; ?>images/button-php.gif" width="80" height="15" alt="Powered by PHP" /></a>
+
+ <a <?php echo $tgt?> href="http://validator.w3.org/check/referer" title="Valid XHTML 1.0"><img src="<?php echo DOKU_TPL; ?>images/button-xhtml.png" width="80" height="15" alt="Valid XHTML 1.0" /></a>
+
+ <a <?php echo $tgt?> href="http://jigsaw.w3.org/css-validator/check/referer?profile=css3" title="Valid CSS"><img src="<?php echo DOKU_TPL; ?>images/button-css.png" width="80" height="15" alt="Valid CSS" /></a>
+
+ <a <?php echo $tgt?> href="http://dokuwiki.org/" title="Driven by DokuWiki"><img src="<?php echo DOKU_TPL; ?>images/button-dw.png" width="80" height="15" alt="Driven by DokuWiki" /></a>
+
+<?php
+if ($conf['allowdebug']) {
+ echo '<!-- page made in '.round(delta_time(DOKU_START_TIME), 3).' seconds -->';
+}
+?>
+
+
+</div>
+<?php include(dirname(__FILE__).'/dwtb.html') ?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/bullet.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/bullet.gif
new file mode 100644
index 000000000..b43de48a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/bullet.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-cc.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-cc.gif
new file mode 100644
index 000000000..5861d637f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-cc.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-css.png b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-css.png
new file mode 100644
index 000000000..706325e1c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-css.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-donate.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-donate.gif
new file mode 100644
index 000000000..bba284e21
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-donate.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-dw.png b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-dw.png
new file mode 100644
index 000000000..39d5f56a9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-dw.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-php.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-php.gif
new file mode 100644
index 000000000..28f329aaa
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-php.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-rss.png b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-rss.png
new file mode 100644
index 000000000..b036f7152
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-rss.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-xhtml.png b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-xhtml.png
new file mode 100644
index 000000000..ec686442c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-xhtml.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/buttonshadow.png b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/buttonshadow.png
new file mode 100644
index 000000000..f60be309f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/buttonshadow.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/closed.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/closed.gif
new file mode 100644
index 000000000..8414d4d69
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/closed.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/favicon.ico b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/favicon.ico
new file mode 100644
index 000000000..8b9616abb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/favicon.ico
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/inputshadow.png b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/inputshadow.png
new file mode 100644
index 000000000..d286beb22
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/inputshadow.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/link_icon.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/link_icon.gif
new file mode 100644
index 000000000..815ccb1b1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/link_icon.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/mail_icon.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/mail_icon.gif
new file mode 100644
index 000000000..50a87a9a0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/mail_icon.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/open.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/open.gif
new file mode 100644
index 000000000..f5d5c7e56
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/open.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/sidebar-border.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/sidebar-border.gif
new file mode 100644
index 000000000..fc4b78e8c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/sidebar-border.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/tocdot2.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/tocdot2.gif
new file mode 100644
index 000000000..3d39c2e73
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/tocdot2.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/windows.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/windows.gif
new file mode 100644
index 000000000..4f12acce1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/windows.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/layout.css b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/layout.css
new file mode 100644
index 000000000..ca4b52756
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/layout.css
@@ -0,0 +1,79 @@
+/**
+ * Tableless Layout for default template
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author moraes <moraes@tipos.com.br>
+ */
+
+/* -------------- top row --------------- */
+div.dokuwiki .header {
+ padding: 3px 0 0 2px;
+}
+
+div.dokuwiki .pagename {
+ float: left;
+ font-size: 200%;
+ font-weight: bolder;
+ color: __background_alt__;
+ text-align: left;
+ vertical-align: middle;
+}
+
+div.dokuwiki .pagename a {
+ color: __extern__ !important;
+ text-decoration: none !important;
+}
+
+div.dokuwiki .logo {
+ float: right;
+ font-size: 220%;
+ font-weight: bolder;
+ text-align: right;
+ vertical-align: middle;
+}
+
+div.dokuwiki .logo a {
+ color: __background_alt__ !important;
+ text-decoration: none !important;
+ font-variant: small-caps;
+ letter-spacing: 2pt;
+}
+
+/* --------------- top and bottom bar ---------------- */
+div.dokuwiki .bar {
+ border-top: 1px solid __border__;
+ border-bottom: 1px solid __border__;
+ background: __background_alt__;
+ padding: 0.1em 0.15em;
+ clear: both;
+}
+
+div.dokuwiki .bar-left {
+ float: left;
+}
+
+div.dokuwiki .bar-right {
+ float: right;
+ text-align: right;
+}
+
+div.dokuwiki #bar__bottom {
+ margin-bottom:3px;
+}
+
+/* ------------- File Metadata ----------------------- */
+
+div.dokuwiki div.meta {
+ clear: both;
+ margin-top: 1em;
+ color: __text_alt__;
+ font-size: 70%;
+}
+
+div.dokuwiki div.meta div.user {
+ float: left;
+}
+
+div.dokuwiki div.meta div.doc {
+ text-align: right;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/main.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/main.php
new file mode 100644
index 000000000..11c4ea967
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/main.php
@@ -0,0 +1,69 @@
+<?php
+/**
+ * DokuWiki Default Template
+ *
+ * This is the template you need to change for the overall look
+ * of DokuWiki.
+ *
+ * You should leave the doctype at the very top - It should
+ * always be the very first line of a document.
+ *
+ * @link http://dokuwiki.org/templates
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+// must be run from within DokuWiki
+if (!defined('DOKU_INC')) die();
+
+
+$sidebar_inline = get_input("inline_sidebar");
+$page_inline = get_input("inline_page");
+
+if (empty($sidebar_inline)) {
+ob_start();
+include(dirname(__FILE__).'/main_index.php');
+$content = ob_get_clean();
+}
+
+if (empty($page_inline)) {
+// include functions that provide sidebar functionality
+@require_once(dirname(__FILE__).'/tplfn_sidebar.php');
+ob_start();
+include(dirname(__FILE__).'/sidebar.php');
+$sidebar = ob_get_clean();
+}
+
+if (empty($sidebar_inline) && empty($page_inline)) {
+
+ elgg_push_breadcrumb(elgg_echo('dokuwiki'), 'dokuwiki/all');
+ elgg_push_breadcrumb(sprintf(elgg_echo('dokuwiki:wikifrom'), elgg_get_page_owner_entity()->name));
+
+ $title = sprintf(elgg_echo('dokuwiki:wikifrom'), elgg_get_page_owner_entity()->name);
+
+ $sidebar = elgg_view_module('aside', elgg_echo('dokuwiki:sidebar'), $sidebar);
+
+ $body = elgg_view_layout('content', array(
+ 'filter' => '',
+ 'content' => $content,
+ 'title' => $title,
+ 'sidebar' => $sidebar,
+ ));
+
+ echo elgg_view_page($title, $body);
+}
+else {
+ $all_link = elgg_get_site_url().'dokuwiki/'.elgg_get_page_owner_guid();
+ $all_text = elgg_echo('link:view:all');
+ $all_link = "<a href=\"$all_link\">$all_text</a>";
+
+ echo elgg_view('groups/profile/module', array(
+ 'title' => $content ? elgg_echo('dokuwiki:group') : elgg_echo('dokuwiki:sidebar'),
+ 'content' => $content . $sidebar,
+ 'all_link' => $all_link,
+ ));
+}
+
+
+//echo $content;
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/main_index.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/main_index.php
new file mode 100644
index 000000000..31a7ebafb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/main_index.php
@@ -0,0 +1,135 @@
+<?php
+/**
+ * DokuWiki Sidebar Template
+ * This template is the Dokuwiki Default Template with
+ * a configurable sidebar facility.
+ *
+ * @link http://wiki.jalakai.co.uk/dokuwiki
+ * @link http://dokuwiki.org/template/sidebar
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ * @date 2009-01-27
+ *
+ * Default template by ...
+ *
+ * @link http://dokuwiki.org/templates
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+// must be run from within DokuWiki
+if (!defined('DOKU_INC')) die();
+
+$page_inline = get_input("inline_page");
+// include functions that provide sidebar functionality
+//@require_once(dirname(__FILE__).'/tplfn_sidebar.php');
+?>
+ <?php //tpl_metaheaders()?>
+
+ <?php /*old includehook @include(dirname(__FILE__).'/meta.html') */ ?>
+
+<?php /*old includehook @include(dirname(__FILE__).'/topheader.html') */ ?>
+<div class="dokuwiki">
+ <?php html_msgarea()?>
+
+ <div class="stylehead">
+
+ <?php if (empty($page_inline)) { ?>
+ <div class="header">
+ <div class="pagename">
+ [[<?php tpl_link(wl($ID,'do=backlink'),tpl_pagetitle($ID,true),'title="'.$lang['btn_backlink'].'"')?>]]
+ </div>
+ <div class="logo">
+ <?php tpl_link(wl(),$conf['title'],'name="dokuwiki__top" id="dokuwiki__top" accesskey="h" title="[H]"')?>
+ </div>
+
+ <div class="clearer"></div>
+ </div>
+ <?php }?>
+
+ <?php /*old includehook*/ @include(dirname(__FILE__).'/header.html')?>
+
+ <?php if (empty($page_inline)) { ?>
+ <div class="bar" id="bar__top">
+ <div class="bar-left" id="bar__topleft">
+ <?php tpl_button('edit')?>
+ <?php tpl_button('history')?>
+ </div>
+
+ <div class="bar-right" id="bar__topright">
+ <?php tpl_button('recent')?>
+ <?php tpl_searchform()?>&nbsp;
+ </div>
+
+ <div class="clearer"></div>
+ </div>
+ <?php } ?>
+
+ <?php if($conf['breadcrumbs']){?>
+ <div class="breadcrumbs">
+ <?php tpl_breadcrumbs()?>
+ <?php //tpl_youarehere() //(some people prefer this)?>
+ </div>
+ <?php }?>
+
+ <?php if($conf['youarehere']){?>
+ <div class="breadcrumbs">
+ <?php tpl_youarehere() ?>
+ </div>
+ <?php }?>
+
+ </div>
+ <?php flush()?>
+
+ <?php /*old includehook*/ @include(dirname(__FILE__).'/pageheader.html')?>
+
+ <div class="page">
+ <!-- wikipage start -->
+ <?php tpl_content()?>
+ <!-- wikipage stop -->
+ </div>
+
+ <?php if (empty($page_inline)) { ?>
+ <div class="clearer">&nbsp;</div>
+
+ <?php flush()?>
+
+ <div class="stylefoot">
+
+ <div class="meta">
+ <div class="user">
+ <?php tpl_userinfo()?>
+ </div>
+ <div class="doc">
+ <?php tpl_pageinfo()?>
+ </div>
+ </div>
+
+ <?php /*old includehook*/ @include(dirname(__FILE__).'/pagefooter.html')?>
+
+ </div>
+ <?php } ?>
+ <div class="bar" id="bar__bottom">
+ <div class="bar-left" id="bar__bottomleft">
+ <?php tpl_button('edit')?>
+ <?php tpl_button('history')?>
+ </div>
+ <div class="bar-right" id="bar__bottomright">
+ <?php tpl_button('subscribe')?>
+ <?php tpl_button('subscribens')?>
+ <?php tpl_button('admin')?>
+ <?php tpl_button('profile')?>
+ <?php tpl_button('login')?>
+ <?php tpl_button('index')?>
+ <?php tpl_button('top')?>&nbsp;
+ </div>
+ <div class="clearer"></div>
+ </div>
+ <?php if (empty($page_inline)) { ?>
+
+ </div>
+ <?php } ?>
+
+ <?php/* tpl_license(false);*/?>
+
+<?php /*old includehook @include(dirname(__FILE__).'/footer.html')*/ ?>
+
+<div class="no"><?php /* provide DokuWiki housekeeping, required in all templates */ tpl_indexerWebBug()?></div>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/media.css b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/media.css
new file mode 100644
index 000000000..27d0b1d33
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/media.css
@@ -0,0 +1,205 @@
+/**
+ * The CSS in here cotrols the appearance of the media manager
+ */
+
+#media__manager {
+ height: 100%;
+ overflow: hidden;
+}
+
+#media__left {
+ width: 30%;
+ border-right: solid 1px __border__;
+
+ height: 100%;
+ overflow: auto;
+ position: absolute;
+ left: 0;
+}
+
+#media__right {
+ width: 69.7%;
+
+ height: 100%;
+ overflow: auto;
+ position: absolute;
+ right: 0;
+}
+
+#media__manager h1 {
+ margin: 0;
+ padding: 0;
+ margin-bottom: 0.5em;
+}
+
+/* --- Tree formatting --- */
+
+#media__tree img {
+ float:left;
+ padding: 0.5em 0.3em 0 0;
+}
+
+#media__tree ul {
+ list-style-type: none;
+ list-style-image: none;
+ margin-left: 1.5em;
+}
+
+#media__tree li {
+ clear: left;
+ list-style-type: none;
+ list-style-image: none;
+}
+*+html #media__tree li,
+* html #media__tree li {
+ border: 1px solid __background__;
+}/* I don't understand this, but this fixes a style bug in IE;
+it's dirty, so any "real" fixes are welcome */
+
+/* --- options --- */
+
+#media__opts {
+ padding-left: 1em;
+ margin-bottom: 0.5em;
+}
+
+#media__opts input {
+ float: left;
+ display: block;
+ margin-top: 4px;
+ position: absolute;
+}
+*+html #media__opts input,
+* html #media__opts input {
+ position: static;
+}
+
+#media__opts label {
+ display: block;
+ float: left;
+ margin-left: 20px;
+ margin-bottom: 4px;
+}
+*+html #media__opts label,
+* html #media__opts label {
+ margin-left: 10px;
+}
+
+#media__opts br {
+ clear: left;
+}
+
+/* --- file list --- */
+
+#media__content img.load {
+ margin: 1em auto;
+}
+
+#media__content #scroll__here {
+ border: 1px dashed __border__;
+}
+
+#media__content .odd {
+ background-color: __background_other__;
+ padding: 0.4em;
+}
+
+#media__content .even {
+ padding: 0.4em;
+}
+
+#media__content a.mediafile {
+ margin-right: 1.5em;
+ font-weight: bold;
+}
+
+#media__content div.detail {
+ padding: 0.3em 0 0.3em 2em;
+}
+
+#media__content div.detail div.thumb {
+ float: left;
+ width: 130px;
+ text-align: center;
+ margin-right: 0.4em;
+}
+
+
+#media__content img.btn {
+ vertical-align: text-bottom;
+}
+
+#media__content div.example {
+ color: __text_neu__;
+ margin-left: 1em;
+}
+
+/* --- upload form --- */
+
+#media__content div.upload {
+ font-size: 90%;
+ padding: 0 0.5em 0.5em 0.5em;
+}
+
+#media__content form#dw__upload,
+#media__content div#dw__flashupload {
+ display: block;
+ border-bottom: solid 1px __border__;
+ padding: 0 0.5em 1em 0.5em;
+}
+#media__content form#dw__upload fieldset {
+ padding: 0;
+ margin: 0;
+ border: none;
+ width: auto;
+}
+#media__content form#dw__upload p {
+ text-align: left;
+ padding: 0.25em 0;
+ margin: 0;
+ line-height: 1.0em;
+}
+#media__content form#dw__upload label.check {
+ float: none;
+ width: auto;
+ margin-left: 11.5em;
+}
+
+/* --- meta edit form --- */
+
+#media__content form.meta {
+ display: block;
+ padding: 0 0 1em 0;
+}
+
+#media__content form.meta label {
+ display: block;
+ width: 25%;
+ float: left;
+ font-weight: bold;
+ margin-left: 1em;
+ clear: left;
+}
+
+#media__content form.meta .edit {
+ font: 100% "Lucida Grande", Verdana, Lucida, Helvetica, Arial, sans-serif;
+ float: left;
+ width: 70%;
+ padding-right: 0;
+ padding-left: 0.2em;
+ margin: 2px;
+}
+
+#media__content form.meta textarea.edit {
+ height: 8em;
+}
+
+#media__content form.meta div.metafield {
+ clear: left;
+}
+
+#media__content form.meta div.buttons {
+ clear: left;
+ margin-left: 20%;
+ padding-left: 1em;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/media.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/media.php
new file mode 100644
index 000000000..c464597bb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/media.php
@@ -0,0 +1,54 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<?php
+/**
+ * DokuWiki Default Template
+ *
+ * This is the template for the media selection popup.
+ *
+ * You should leave the doctype at the very top - It should
+ * always be the very first line of a document.
+ *
+ * @link http://wiki.splitbrain.org/wiki:tpl:templates
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $conf['lang']?>" lang="<?php echo $conf['lang']?>" dir="ltr">
+<head>
+ <title><?php echo hsc($lang['mediaselect'])?> [<?php echo hsc($conf['title'])?>]</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+
+ <?php tpl_metaheaders()?>
+
+ <link rel="shortcut icon" href="<?php echo DOKU_TPL?>images/favicon.ico" />
+
+</head>
+
+<body>
+<div class="dokuwiki">
+ <?php html_msgarea()?>
+
+ <h1><?php echo hsc($lang['mediaselect'])?> <code><?php echo hsc($NS)?></code></h1>
+
+ <div class="mediaselect">
+
+ <div class="mediaselect-left">
+ <strong><a href="<?php echo DOKU_BASE?>lib/exe/media.php?ns="><?php echo hsc($lang['namespaces'])?></a></strong>
+
+ <?php tpl_medianamespaces()?>
+ </div>
+
+ <div class="mediaselect-right">
+ <?php tpl_mediafilelist()?>
+
+ <div class="uploadform">
+ <?php tpl_mediauploadform()?>
+ </div>
+ </div>
+
+ </div>
+
+</div>
+</body>
+</html>
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/mediaedit.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/mediaedit.php
new file mode 100644
index 000000000..66d40ad5e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/mediaedit.php
@@ -0,0 +1,88 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<?php
+/**
+ * DokuWiki Default Template
+ *
+ * This is the template for editing image meta data.
+ * It is displayed in the media popup.
+ *
+ * You should leave the doctype at the very top - It should
+ * always be the very first line of a document.
+ *
+ * @link http://wiki.splitbrain.org/wiki:tpl:templates
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $conf['lang']?>" lang="<?php echo $conf['lang']?>" dir="ltr">
+<head>
+ <title><?php echo hsc($lang['mediaselect'])?> [<?php echo hsc($conf['title'])?>]</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+
+ <?php tpl_metaheaders()?>
+
+ <link rel="shortcut icon" href="<?php echo DOKU_TPL?>images/favicon.ico" />
+</head>
+
+<body>
+<div class="dokuwiki">
+ <?php html_msgarea()?>
+
+ <h1><?php echo hsc($lang['metaedit'])?> <code><?php echo hsc(noNS($IMG))?></code></h1>
+
+ <div class="mediaedit">
+ <?php/* everything in meta array is tried to save and read */?>
+
+ <div class="data">
+ <form action="<?php echo DOKU_BASE?>lib/exe/media.php" accept-charset="utf-8" method="post">
+ <input type="hidden" name="edit" value="<?php echo hsc($IMG)?>" />
+ <input type="hidden" name="save" value="1" />
+
+ <label class="block" for="img__title"><?php echo $lang['img_title']?></label>
+ <input type="text" name="meta[Iptc.Headline]" id="img__title" class="edit"
+ value="<?php echo hsc(tpl_img_getTag('IPTC.Headline'))?>" /><br />
+
+ <label class="block" for="img__caption"><?php echo $lang['img_caption']?></label>
+ <textarea name="meta[Iptc.Caption]" id="img__caption" class="edit" rows="5"><?php
+ echo hsc(tpl_img_getTag(array('IPTC.Caption',
+ 'EXIF.UserComment',
+ 'EXIF.TIFFImageDescription',
+ 'EXIF.TIFFUserComment')));
+ ?></textarea><br />
+
+ <label class="block" for="img__artist"><?php echo $lang['img_artist']?></label>
+ <input type="text" name="meta[Iptc.Byline]" id="img__artist" class="edit"
+ value="<?php echo hsc(tpl_img_getTag(array('Iptc.Byline',
+ 'Exif.TIFFArtist',
+ 'Exif.Artist',
+ 'Iptc.Credit')))?>" /><br />
+
+ <label class="block" for="img__copy"><?php echo $lang['img_copyr']?></label>
+ <input type="text" name="meta[Iptc.CopyrightNotice]" id="img__copy" class="edit"
+ value="<?php echo hsc(tpl_img_getTag(array('Iptc.CopyrightNotice','Exif.TIFFCopyright','Exif.Copyright')))?>" /><br />
+
+
+ <label class="block" for="img__keywords"><?php echo $lang['img_keywords']?></label>
+ <textarea name="meta[Iptc.Keywords]" id="img__keywords" class="edit"><?php
+ echo hsc(tpl_img_getTag(array('IPTC.Keywords',
+ 'EXIF.Category')));
+ ?></textarea><br />
+
+
+ <input type="submit" value="<?php echo $lang['btn_save']?>" title="ALT+S"
+ accesskey="s" class="button" />
+
+ </form>
+ </div>
+
+
+ <div class="footer">
+ <hr>
+ <?php tpl_button('backtomedia')?>
+ </div>
+ </div>
+
+</div>
+</body>
+</html>
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/mediamanager.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/mediamanager.php
new file mode 100644
index 000000000..7b7fe8675
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/mediamanager.php
@@ -0,0 +1,44 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<?php
+/**
+ * DokuWiki Default Template
+ *
+ * This is the template for the media manager popup
+ *
+ * You should leave the doctype at the very top - It should
+ * always be the very first line of a document.
+ *
+ * @link http://dokuwiki.org/templates
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $conf['lang']?>" lang="<?php echo $conf['lang']?>" dir="ltr">
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>
+ <?php echo hsc($lang['mediaselect'])?>
+ [<?php echo strip_tags($conf['title'])?>]
+ </title>
+ <?php tpl_metaheaders()?>
+ <link rel="shortcut icon" href="<?php echo DOKU_TPL?>images/favicon.ico" />
+</head>
+
+<body>
+<div id="media__manager" class="dokuwiki">
+ <div id="media__left">
+ <?php html_msgarea()?>
+ <h1><?php echo hsc($lang['mediaselect'])?></h1>
+
+ <?php /* keep the id! additional elements are inserted via JS here */?>
+ <div id="media__opts"></div>
+
+ <?php tpl_mediaTree() ?>
+ </div>
+
+ <div id="media__right">
+ <?php tpl_mediaContent() ?>
+ </div>
+</div>
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/mediaref.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/mediaref.php
new file mode 100644
index 000000000..4651b5667
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/mediaref.php
@@ -0,0 +1,50 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<?php
+/**
+ * DokuWiki Default Template
+ *
+ * This is the template for displaying references to a media file.
+ * It is displayed in the media popup.
+ *
+ * You should leave the doctype at the very top - It should
+ * always be the very first line of a document.
+ *
+ * @link http://wiki.splitbrain.org/wiki:tpl:templates
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $conf['lang']?>" lang="<?php echo $conf['lang']?>" dir="ltr">
+<head>
+ <title><?php echo hsc($lang['mediaselect'])?> [<?php echo hsc($conf['title'])?>]</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+
+ <?php tpl_metaheaders()?>
+
+ <link rel="shortcut icon" href="<?php echo DOKU_TPL?>images/favicon.ico" />
+
+</head>
+
+<body>
+<div class="dokuwiki">
+ <?php html_msgarea()?>
+
+ <h1><?php echo hsc($lang['reference'])?> <code><?php echo hsc(noNS($DEL))?></code></h1>
+
+ <div class="mediaref">
+ <div class="mediaref_head">
+ <p><?php echo hsc($lang['ref_inuse'])?></p>
+ </div>
+
+ <?php tpl_showreferences($mediareferences)?>
+
+ <div class="mediaref_footer">
+ <hr>
+ <?php tpl_button('backtomedia')?>
+ </div>
+ </div>
+
+</div>
+</body>
+</html>
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/print.css
new file mode 100644
index 000000000..0491a7ba0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/print.css
@@ -0,0 +1,238 @@
+
+body {
+ font: 10pt "Lucida Grande", Verdana, Lucida, Helvetica, Arial, sans-serif;
+ background-color: White;
+ color: Black;
+}
+
+table {
+ font-size: 100%;
+ padding:0;
+ margin:0;
+}
+
+tr,td,th {padding:0; margin:0;}
+
+img {border:0}
+
+a {
+ color:#000000;
+ text-decoration:none;
+ background: none !important;
+}
+
+
+div.meta {
+ clear:both;
+ margin-top: 1em;
+ font-size:70%;
+ text-align:right;
+}
+
+
+div.notify,
+div.info,
+div.success,
+div.error,
+div.breadcrumbs,
+div.secedit {
+ display:none;
+}
+
+/* --------------------- Text formating -------------------------------- */
+
+/* external link */
+a.urlextern:after {
+ content: " [" attr(href) "]";
+ font-size: 90%;
+}
+
+/* interwiki link */
+a.interwiki:after {
+ content: " [" attr(href) "]";
+ font-size: 90%;
+}
+
+/* email link */
+a.mail:after {
+ content: " [" attr(href) "]";
+ font-size: 90%;
+}
+
+/* existing wikilink */
+a.wikilink1 {text-decoration:underline }
+
+/* the document */
+div.page {
+ text-align: justify;
+}
+
+/* general headline setup */
+h1, h2, h3, h4, h5 {
+ color: Black;
+ background-color: transparent;
+ font-family: "Lucida Grande", Verdana, Lucida, Helvetica, Arial, sans-serif;
+ font-size: 100%;
+ font-weight: normal;
+ margin-left: 0;
+ margin-right: 0;
+ margin-top: 0;
+ margin-bottom: 1em;
+ padding-left: 0;
+ padding-right: 0;
+ padding-top: 0.5em;
+ padding-bottom: 0;
+ border-bottom: 1px solid #000000;
+ clear:left;
+}
+
+/* special headlines */
+h1 {font-size: 160%; font-weight: bold;}
+h2 {font-size: 150%; }
+h3 {font-size: 140%; border-bottom: none; }
+h4 {font-size: 120%; border-bottom: none; }
+h5 {font-size: 100%; border-bottom: none; }
+
+/* embedded images */
+img.media {
+ margin: 3px;
+}
+
+img.medialeft {
+ border: 0;
+ float: left;
+ margin: 0 1.5em 0 0;
+}
+
+img.mediaright {
+ border: 0;
+ float: right;
+ margin: 0 0 0 1.5em;
+}
+
+/* unordered lists */
+ul {
+ line-height: 1.5em;
+ list-style-type: square;
+ margin: 0 0 1em 3.5em;
+ padding: 0;
+}
+
+/* ordered lists */
+ol {
+ line-height: 1.5em;
+ margin: 0 0 1em 3.5em;
+ padding: 0;
+ font-weight: normal;
+}
+
+div.dokuwiki li ul {
+ margin-bottom: 0;
+}
+div.dokuwiki li ol {
+ margin-bottom: 0;
+}
+
+div.dokuwiki ol {list-style-type: decimal}
+div.dokuwiki ol ol {list-style-type: upper-roman}
+div.dokuwiki ol ol ol {list-style-type: lower-alpha}
+div.dokuwiki ol ol ol ol {list-style-type: lower-greek}
+
+/* the list items overriding the ol definition */
+span.li {
+ font-weight: normal;
+}
+
+/* code blocks by indention */
+pre.pre {
+ font-size: 8pt;
+ padding: 0.5em;
+ border: 1px dashed #000000;
+ color: Black;
+ overflow: visible;
+}
+
+/* code blocks by code tag */
+pre.code {
+ font-size: 8pt;
+ padding: 0.5em;
+ border: 1px dashed #000000;
+ color: Black;
+ overflow: visible;
+}
+
+/* inline code words */
+code {
+ font-size: 120%;
+}
+
+/* code blocks by file tag */
+pre.file {
+ font-size: 8pt;
+ padding: 0.5em;
+ border: 1px dotted #000000;
+ color: Black;
+ overflow: visible;
+}
+
+/* footnotes */
+div.footnotes{
+ clear:both;
+ border-top: 1px solid #000000;
+ padding-left: 1em;
+ margin-top: 1em;
+}
+
+div.fn{
+ font-size:90%;
+}
+
+a.fn_top{
+ vertical-align:super;
+ font-size:80%;
+}
+
+a.fn_bot{
+ vertical-align:super;
+ font-size:80%;
+ font-weight:bold;
+}
+
+acronym{
+ border: 0;
+}
+
+/* ---------- inline tables ------------------- */
+
+table.inline {
+ font-size: 80%;
+ background-color: #ffffff;
+ border-spacing: 0px;
+ border-collapse: collapse;
+}
+
+table.inline th {
+ padding: 3px;
+ border: 1px solid #000000;
+ border-bottom: 2px solid #000000;
+}
+
+table.inline td {
+ padding: 3px;
+ border: 1px solid #000000;
+}
+
+.leftalign{
+ text-align: left;
+}
+
+.centeralign{
+ text-align: center;
+}
+
+.rightalign{
+ text-align: right;
+}
+
+.toc, .footerinc, .header, .bar, .user {display:none}
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/rtl.css b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/rtl.css
new file mode 100644
index 000000000..4678c3059
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/rtl.css
@@ -0,0 +1,119 @@
+/**
+ * Layout and dedsign corrections for right-to-left languages
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Dotan Kamber <kamberd@yahoo.com>
+ */
+
+.bar-left {
+ float: right;
+ text-align: right;
+}
+
+.bar-right {
+ float: left;
+ text-align: left;
+}
+
+.pagename {
+ float: right;
+ text-align: right;
+}
+
+.logo {
+ float: left;
+ text-align: left;
+}
+
+label {
+ text-align: left;
+}
+
+label.simple {
+ text-align: right;
+}
+
+div.meta div.user {
+ float: right
+}
+
+div.meta div.doc {
+ text-align: left;
+}
+
+/* ------------------ Design corrections --------------------------------- */
+
+div.dokuwiki ul,
+div.dokuwiki ol {
+ margin: 0.5em 1.5em 0.5em 0;
+}
+
+div.dokuwiki a.urlextern,
+div.dokuwiki a.interwiki,
+div.dokuwiki a.windows,
+div.dokuwiki a.mail,
+div.dokuwiki a.mail.JSnocheck {
+ /* should work but doesn't - so we just disable icons here*/
+ /*
+ background-position: right 1px;
+ padding-right: 16px;
+ */
+ background-image: none !important;
+ padding: 0px 0px 0px 0px;
+}
+
+div.dokuwiki div.secedit input.button {
+ float: left;
+}
+
+/* headlines */
+div.dokuwiki h1, div.dokuwiki h2, div.dokuwiki h3, div.dokuwiki h4, div.dokuwiki h5 {
+ clear: right;
+}
+
+/* special headlines */
+div.dokuwiki h1 {margin-left: 0px; margin-right: 0px;}
+div.dokuwiki h2 {margin-left: 0px; margin-right: 20px;}
+div.dokuwiki h3 {margin-left: 0px; margin-right: 40px;}
+div.dokuwiki h4 {margin-left: 0px; margin-right: 60px;}
+div.dokuwiki h5 {margin-left: 0px; margin-right: 80px;}
+
+/* indent different sections */
+div.dokuwiki div.level1 {margin-left: 0px; margin-right: 3px;}
+div.dokuwiki div.level2 {margin-left: 0px; margin-right: 23px;}
+div.dokuwiki div.level3 {margin-left: 0px; margin-right: 43px;}
+div.dokuwiki div.level4 {margin-left: 0px; margin-right: 63px;}
+div.dokuwiki div.level5 {margin-left: 0px; margin-right: 83px;}
+
+/* TOC control */
+div.dokuwiki div.toc {
+ float: left;
+}
+
+div.dokuwiki div.tocheader {
+ text-align: right;
+}
+
+div.dokuwiki #toc__inside {
+ text-align: right;
+}
+
+div.dokuwiki ul.toc {
+ padding: 0;
+ padding-right: 1em;
+}
+
+div.dokuwiki ul.toc li {
+ background-position: right 0.6em;
+ padding-right:0.4em;
+ direction: rtl;
+}
+
+div.dokuwiki ul.toc li.clear {
+ padding-right:0.4em;
+}
+
+div.dokuwiki pre {
+ text-align: left;
+}
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/sidebar.css b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/sidebar.css
new file mode 100644
index 000000000..5af3c95cb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/sidebar.css
@@ -0,0 +1,189 @@
+/**
+ * Extra styles for sidebar template
+ *
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ */
+
+/* dokuwiki containers & styles */
+
+/* sidebar orientation and position */
+#sidebar {
+ width:20%;
+ margin:0;
+ padding:0;
+ position: relative;
+}
+
+#sidebartop {
+ position: absolute;
+ top: -1.2em;
+ width: 100%;
+ height: 1.2em;
+ background: __background_neu__;
+}
+
+.sidebar_inside_left #sidebar {
+ float:left;
+}
+
+.sidebar_inside_right #sidebar {
+ float:right;
+}
+
+.sidebar_inside_left .dokuwiki div.breadcrumbs {
+ float: right;
+ width: 78%;
+ padding: 0 1% 0 0.9%;
+}
+
+.sidebar_inside_left .dokuwiki .page, .sidebar_inside_left .dokuwiki .meta {
+ float:right;
+ width:77%; /* also see IE Win fix below */
+ margin-right: 1%;
+ margin-left:0;
+}
+
+.sidebar_inside_right .dokuwiki .page, .sidebar_inside_right .dokuwiki .meta, .sidebar_inside_right .dokuwiki div.breadcrumbs {
+ float:left;
+ width:77%;
+ margin-left: 1%;
+ margin-right: 0;
+}
+
+.sidebar_outside_left #sidebar {
+ position:absolute;
+ top:0;
+ left:0;
+}
+
+.sidebar_outside_right #sidebar {
+ position:absolute;
+ top:0;
+ right:0;
+}
+
+.sidebar_outside_left .dokuwiki {
+ padding-left:21%;
+}
+
+.sidebar_outside_right .dokuwiki {
+ padding-right:21%;
+}
+
+.sidebar_outside_left .footerinc {
+ padding-left: 21%;
+}
+
+.sidebar_outside_right .footerinc {
+ padding-right: 21%;
+}
+
+/* sidebar presentation */
+/* the following three styles use a faux-column image to place a separating line
+ between the sidebar and dokuwiku */
+.sidebar_outside_left .dokuwiki, .sidebar_inside_left .dokuwiki {
+ background: url(images/sidebar-border.gif) repeat-y 20%;
+}
+
+.sidebar_outside_right .dokuwiki, .sidebar_inside_right .dokuwiki {
+ background: url(images/sidebar-border.gif) repeat-y 80%;
+}
+
+/* hide the line where it passes through .stylehead */
+.stylehead {
+}
+
+/* sidebar contents */
+#sidebar {
+ font-size:10px;
+}
+
+#sidebar a {
+ color: __existing__;
+}
+
+#sidebar a.wikilink2 {
+ color: __text_neu__;
+}
+
+#sidebar a.wikilink2:hover {
+ text-decoration:none;
+ cursor:default;
+}
+
+#sidebar h1 {
+ font-size:140%;
+ margin-left: 0px;
+ padding-left: 2px;
+ font-weight:bold;
+ padding-bottom:0;
+ background-color: __background_alt__;
+}
+#sidebar h2 {
+ font-size:120%;
+ margin-left: 4px;
+ font-weight:bold;
+ padding-bottom:0;
+}
+#sidebar h3 {
+ font-size:120%;
+ margin-left: 8px;
+ font-weight:normal;
+ padding-bottom:0;
+}
+#sidebar h4 {
+ font-size:100%;
+ margin-left: 12px;
+ font-weight:bold;
+ padding-bottom:0;
+}
+#sidebar h5 {
+ font-size:100%;
+ margin-left: 16px;
+ font-weight:normal;
+ padding-bottom:0;
+}
+#sidebar .toc {
+ display:none;
+}
+
+#sidebar_content .toc {
+ display:none;
+}
+#sidebar .secedit {
+}
+
+/* reduced section indentation */
+#sidebar div.level1 {margin-left: 2px;}
+#sidebar div.level2 {margin-left: 6px;}
+#sidebar div.level3 {margin-left: 10px;}
+#sidebar div.level4 {margin-left: 14px;}
+#sidebar div.level5 {margin-left: 18px;}
+
+/* IE fixes (hide from IE Mac) \*/
+
+* html .page .toc {height:1px} /* General Dokuwiki fix. IE needs this to always display TOC contents \*/
+* html pre {width:95%;} /* General Dokuwiki fix - very important for Sidebar. IE needs this to get the overflow:auto style to kick in \*/
+* html .stylehead {height:1px;} /* Get IE in hasLayout mode to ensure the background covers the whole element \*/
+
+* html .sidebar_inside_left .page, * html .sidebar_inside_right .page,
+* html .sidebar_inside_left .meta, * html .sidebar_inside_right .meta {
+ width: 77%; /* IE needs extra gap to ensure #sidebar & .page float next to each other \*/
+ overflow-x: auto; /* IE proprietary property to prevent wide images in wiki page forcing sidebar down below wiki page \*/
+ /* 'overflow-x:auto;' maybe replaced by 'overflow:auto;' to ensure template passes w3c validation \*/
+}
+
+/* (end IE Mac hiding) */
+
+/* duplicate standard DW styles with increased specificity to counter some sidebar styles */
+.sidebar_outside_left .insitu-footnote, .sidebar_inside_left .insitu-footnote {
+ background-color: __background_other__;
+}
+/* counteract some inappropriate DW styling */
+.sidebar div.dokuwiki #bar__bottom {
+ margin-bottom: 0;
+}
+.sidebar div.dokuwiki p.license {
+ background-color: __background_other__;
+ padding-top: 3px;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/sidebar.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/sidebar.php
new file mode 100644
index 000000000..b5c157b39
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/sidebar.php
@@ -0,0 +1,9 @@
+<div id="owner_block">
+<div id="sidebartop"> </div>
+<!--<div id="sidebartop"> <?php tpl_sidebar_editbtn(); ?></div>-->
+ <div id="sidebar_content">
+ <?php tpl_sidebar_content(); ?>
+ </div>
+ <div class="clearer">&nbsp;</div>
+</div>
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/sidebar_print.css b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/sidebar_print.css
new file mode 100644
index 000000000..42332062b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/sidebar_print.css
@@ -0,0 +1,9 @@
+/**
+ * Extra styles for sidebar template
+ *
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ */
+
+/* prevent the sidebar being included when printing wiki pages */
+ #sidebar {display:none;}
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/style.ini b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/style.ini
new file mode 100644
index 000000000..291cfd259
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/style.ini
@@ -0,0 +1,67 @@
+; Please see http://www.php.net/manual/en/function.parse-ini-file.php
+; for limitations of the ini format used here
+
+; Define the stylesheets your template uses here. The second value
+; defines for which output media the style should be loaded. Currently
+; print, screen and rtl are supported. rtl styles are loaded additionally
+; to screen styles if a right-to-left language is selected (eg. hebrew)
+[stylesheets]
+layout.css = screen
+design.css = screen
+style.css = screen
+
+media.css = screen
+
+rtl.css = rtl
+print.css = print
+sidebar.css = screen
+sidebar_print.css = print
+
+; This section is used to configure some placeholder values used in
+; the stylesheets. Changing this file is the simplest method to
+; give your wiki a new look.
+[replacements]
+
+;--------------------------------------------------------------------------
+;------ guaranteed dokuwiki color placeholders that every plugin can use
+; main text and background colors
+__text__ = "#000"
+__background__ = "#fff"
+; alternative text and background colors
+__text_alt__ = "#638c9c"
+__background_alt__ = "#dee7ec"
+; neutral text and background colors
+__text_neu__ = "#666"
+__background_neu__ = "#f5f5f5"
+; border color
+__border__ = "#8cacbb"
+;--------------------------------------------------------------------------
+
+; other text and background colors
+__text_other__ = "#ccc"
+__background_other__ = "#f7f9fa"
+
+; these are used for links
+__extern__ = "#436976"
+__existing__ = "#090"
+__missing__ = "#f30"
+
+; highlighting search snippets
+__highlight__ = "#ff9"
+
+
+;--------------------------------------------------------------------------
+;------ for keeping old templates and plugins compatible to the old pattern
+; (to be deleted at the next or after next release)
+__white__ = "#fff"
+__lightgray__ = "#f5f5f5"
+__mediumgray__ = "#ccc"
+__darkgray__ = "#666"
+__black__ = "#000"
+
+; these are the shades of blue
+__lighter__ = "#f7f9fa"
+__light__ = "#eef3f8"
+__medium__ = "#dee7ec"
+__dark__ = "#8cacbb"
+__darker__ = "#638c9c"
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/tplfn_sidebar.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/tplfn_sidebar.php
new file mode 100644
index 000000000..6c378c385
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/tplfn_sidebar.php
@@ -0,0 +1,98 @@
+<?php
+/*
+ * Provide navigation sidebar functionality to Dokuwiki Templates
+ *
+ * This is not currently part of the official Dokuwiki release
+ *
+ * @link http://wiki.jalakai.co.uk/dokuwiki/doku.php?id=tutorials:dev:navigation_sidebar
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ */
+
+// sidebar configuration settings
+tpl_loadConfig();
+
+// determine the sidebar class
+$sidebar_class = "sidebar sidebar_".tpl_getConf('layout').'_'.tpl_getConf('orientation');
+
+// recursive function to establish best sidebar file to be used
+function getSidebarFN($ns, $file) {
+
+ // check for wiki page = $ns:$file (or $file where no namespace)
+ $nsFile = ($ns) ? "$ns:$file" : $file;
+ if (file_exists(wikiFN($nsFile)) && auth_quickaclcheck($nsFile)) return $nsFile;
+
+// remove deepest namespace level and call function recursively
+
+ // no namespace left, exit with no file found
+ if (!$ns) return '';
+
+ $i = strrpos($ns, ":");
+ $ns = ($i) ? substr($ns, 0, $i) : false;
+ return getSidebarFN($ns, $file);
+}
+
+// print a sidebar edit button - if appropriate
+function tpl_sidebar_editbtn() {
+ global $ID, $conf, $lang;
+
+ // check sidebar configuration
+ if (!tpl_getConf('showeditbtn') || !tpl_getConf('page')) return;
+
+ // check sidebar page exists
+ $fileSidebar = getSidebarFN(getNS($ID), tpl_getConf('page'));
+ if (!$fileSidebar) return;
+
+ // check user has edit permission for the sidebar page
+ if (auth_quickaclcheck($fileSidebar) < AUTH_EDIT) return;
+
+?>
+ <div class="secedit">
+ <form class="button" method="post" action="<?php echo wl($fileSidebar,'do=edit'); ?>" onsubmit="return svchk()">
+ <input type="hidden" name="do" value="edit" />
+ <input type="hidden" name="rev" value="" />
+ <input type="hidden" name="id" value="<?php echo $fileSidebar; ?>" />
+ <input type="submit" value="<?php echo $lang['btn_sidebaredit']; ?>" class="button" />
+ </form>
+ </div>
+<?php
+}
+
+// display the sidebar
+function tpl_sidebar_content() {
+ global $ID, $REV, $ACT, $conf;
+
+ // save globals
+ $saveID = $ID;
+ $saveREV = $REV;
+ $saveACT = $ACT;
+
+ // discover file to be displayed in navigation sidebar
+ $fileSidebar = '';
+
+ if (tpl_getConf('page')) {
+ $fileSidebar = getSidebarFN(getNS($ID), tpl_getConf('page'));
+ }
+
+ // determine what to display
+ if ($fileSidebar) {
+ $ID = $fileSidebar;
+ $REV = '';
+ $ACT = 'show';
+# print p_wiki_xhtml($fileSidebar,'',false);
+ tpl_content();
+ }
+ else {
+# global $IDX;
+# html_index($IDX);
+# $ID = getNS($ID);
+ $REV = '';
+ $ACT = 'index';
+
+ tpl_content();
+ }
+
+ // restore globals
+ $ID = $saveID;
+ $REV = $saveREV;
+ $ACT = $saveACT;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/_admin.css b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/_admin.css
new file mode 100644
index 000000000..f34d8aba3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/_admin.css
@@ -0,0 +1,43 @@
+
+.dokuwiki ul.admin_tasks {
+ font-size: 115%;
+ float: left;
+ width: 40%;
+ list-style-type: none;
+}
+
+.dokuwiki ul.admin_tasks li {
+ line-height: 22px;
+ padding-left: 35px;
+ margin: 1em 0;
+ background: transparent none no-repeat scroll 0 0;
+ text-align: left;
+}
+
+.dokuwiki ul.admin_tasks li div.li {
+ font-weight: bold;
+}
+
+.dokuwiki ul.admin_tasks li.admin_acl {
+ background-image: url(../../images/admin/acl.png);
+}
+
+.dokuwiki ul.admin_tasks li.admin_usermanager {
+ background-image: url(../../images/admin/usermanager.png);
+}
+
+.dokuwiki ul.admin_tasks li.admin_plugin {
+ background-image: url(../../images/admin/plugin.png);
+}
+
+.dokuwiki ul.admin_tasks li.admin_config {
+ background-image: url(../../images/admin/config.png);
+}
+
+.dokuwiki ul.admin_tasks li.admin_revert {
+ background-image: url(../../images/admin/revert.png);
+}
+
+.dokuwiki ul.admin_tasks li.admin_popularity {
+ background-image: url(../../images/admin/popularity.png);
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/_linkwiz.css b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/_linkwiz.css
new file mode 100644
index 000000000..060707377
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/_linkwiz.css
@@ -0,0 +1,68 @@
+#link__wiz {
+ position: absolute;
+ display: block;
+ z-index: 99;
+ width: 300px;
+ height: 250px;
+ padding: 0;
+ margin: 0;
+ overflow: hidden;
+ border: 1px solid __border__;
+ background-color: __background_neu__;
+ text-align: center;
+}
+
+#link__wiz_header {
+ background-color: __background_alt__;
+ height: 16px;
+ margin-bottom: 5px;
+}
+
+#link__wiz_close {
+ cursor: pointer;
+ margin: 0;
+}
+
+#link__wiz_result {
+ background-color: __background__;
+ width: 293px;
+ height: 193px;
+ overflow: auto;
+ border: 1px solid __border__;
+ margin: 3px auto;
+ text-align: left;
+}
+
+#link__wiz_result div.type_u {
+ padding: 3px 3px 3px 22px;
+ background: transparent url(../../images/up.png) 3px 3px no-repeat;
+}
+
+#link__wiz_result div.type_f {
+ padding: 3px 3px 3px 22px;
+ background: transparent url(../../images/page.png) 3px 3px no-repeat;
+}
+
+#link__wiz_result div.type_d {
+ padding: 3px 3px 3px 22px;
+ background: transparent url(../../images/ns.png) 3px 3px no-repeat;
+}
+
+#link__wiz_result div.even {
+ background-color: __background_neu__;
+}
+
+#link__wiz_result div.selected {
+ background-color: __background_alt__;
+}
+
+#link__wiz_result span {
+ display: block;
+ color: __text_neu__;
+}
+
+/*FIXME maybe move to a more general style sheet*/
+.ondrag {
+ cursor: move;
+ opacity: 0.8;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/design.css b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/design.css
new file mode 100644
index 000000000..4830a9e2c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/design.css
@@ -0,0 +1,835 @@
+/**
+ * Design elements for default Template
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Anika Henke <anika@selfthinker.org>
+ */
+
+/* -------------- general elements --------------- */
+
+* { padding: 0; margin: 0; }
+
+body {
+ font: 80% "Lucida Grande", Verdana, Lucida, Helvetica, Arial, sans-serif;
+ background-color: __background__;
+ color: __text__;
+}
+
+/* the document */
+div.dokuwiki div.page {
+ margin: 4px 2em 0 1em;
+ text-align: justify;
+}
+
+div.dokuwiki table {
+ font-size: 100%;
+}
+
+div.dokuwiki tr,
+div.dokuwiki td,
+div.dokuwiki th {
+}
+
+div.dokuwiki img {
+ border: 0;
+}
+
+div.dokuwiki p,
+div.dokuwiki blockquote,
+div.dokuwiki table,
+div.dokuwiki pre {
+ margin: 0 0 1.0em 0;
+}
+
+div.dokuwiki hr {
+ border: 0px;
+ border-top: 1px solid __border__;
+ text-align: center;
+ height: 0px;
+}
+
+div.dokuwiki div.nothing {
+ text-align: center;
+ margin: 2em;
+}
+
+/* ---------------- forms ------------------------ */
+
+div.dokuwiki form {
+ border: none;
+ display: inline;
+}
+
+div.dokuwiki label.block {
+ display: block;
+ text-align: right;
+ font-weight: bold;
+}
+
+div.dokuwiki label.simple {
+ display: block;
+ text-align: left;
+ font-weight: normal;
+}
+
+div.dokuwiki label.block input.edit {
+ width: 50%;
+}
+
+div.dokuwiki fieldset {
+ width: 300px;
+ text-align: center;
+ border: 1px solid __border__;
+ padding: 0.5em;
+ margin: auto;
+}
+
+div.dokuwiki textarea.edit {
+ font-family: monospace;
+ font-size: 14px;
+ color: __text__;
+ background-color: __background__;
+ border: 1px solid __border__;
+ padding: 0.3em 0 0 0.3em;
+ width: 100%;
+}
+
+/* nice alphatransparency background except for IE <7 */
+html>body div.dokuwiki textarea.edit {
+ background: __background__ url(images/inputshadow.png) repeat-x top;
+}
+
+div.dokuwiki input.edit,
+div.dokuwiki select.edit {
+ font-size: 100%;
+ border: 1px solid __border__;
+ color: __text__;
+ background-color: __background__;
+ vertical-align: middle;
+ margin: 1px;
+ padding: 0.20em 0.3em;
+ display: inline;
+}
+
+/* nice alphatransparency background except for IE <7 */
+html>body div.dokuwiki input.edit,
+html>body div.dokuwiki select.edit {
+ background: __background__ url(images/inputshadow.png) repeat-x top;
+}
+
+div.dokuwiki select.edit {
+ padding: 0.1em 0;
+}
+
+div.dokuwiki input.missing {
+ font-size: 100%;
+ border: 1px solid __border__;
+ color: __text__;
+ background-color: #ffcccc;
+ vertical-align: middle;
+ margin: 1px;
+ padding: 0.20em 0.3em;
+ display: inline;
+}
+
+/* disabled style - not understood by IE */
+div.dokuwiki textarea.edit[disabled],
+div.dokuwiki textarea.edit[readonly],
+div.dokuwiki input.edit[disabled],
+div.dokuwiki input.edit[readonly],
+div.dokuwiki input.button[disabled],
+div.dokuwiki select.edit[disabled] {
+ background-color: __background_neu__!important;
+ color: __text_neu__!important;
+}
+
+/* edit form */
+div.dokuwiki div.toolbar,
+div.dokuwiki div#wiki__editbar {
+ margin: 2px 0;
+ text-align: left;
+}
+div.dokuwiki div#size__ctl {
+ float: right;
+ width: 60px;
+ height: 2.7em;
+}
+div.dokuwiki #size__ctl img {
+ cursor: pointer;
+}
+div.dokuwiki div#wiki__editbar div.editButtons {
+ float: left;
+ padding: 0 1.0em 0.7em 0;
+}
+div.dokuwiki div#wiki__editbar div.summary {
+ float: left;
+}
+div.dokuwiki .nowrap {
+ white-space: nowrap;
+}
+div.dokuwiki div#draft__status {
+ float: right;
+ color: __text_alt__;
+}
+
+div.dokuwiki div.license {
+ padding: 0.5em;
+ font-size: 90%;
+ text-align: center;
+}
+
+div.dokuwiki form#dw__editform div.license {
+ clear: left;
+ font-size: 90%;
+}
+
+/* --------- buttons ------------------- */
+
+div.dokuwiki input.button,
+div.dokuwiki button.button {
+ border: 1px solid __border__;
+ color: __text__;
+ background-color: __background__;
+ vertical-align: middle;
+ text-decoration: none;
+ font-size: 100%;
+ cursor: pointer;
+ margin: 1px;
+ padding: 0.125em 0.4em;
+}
+
+/* nice alphatransparency background except for IE <7 */
+html>body div.dokuwiki input.button,
+html>body div.dokuwiki button.button {
+ background: __background__ url(images/buttonshadow.png) repeat-x bottom;
+}
+
+* html div.dokuwiki input.button,
+* html div.dokuwiki button.button {
+ height: 1.8em;
+}
+
+div.dokuwiki div.secedit input.button {
+ border: 1px solid __border__;
+ color: __text__;
+ background-color: __background__;
+ vertical-align: middle;
+ text-decoration: none;
+ margin: 0;
+ padding: 0;
+ font-size: 10px;
+ cursor: pointer;
+ float: right;
+ display: inline;
+}
+
+/* ----------- page navigator ------------- */
+
+div.dokuwiki div.pagenav {
+ margin: 1em 0 0 0;
+}
+
+div.dokuwiki div.pagenav-prev {
+ text-align: right;
+ float: left;
+ width: 49%
+}
+
+div.dokuwiki div.pagenav-next {
+ text-align: left;
+ float: right;
+ width: 49%
+}
+
+/* --------------- Links ------------------ */
+
+div.dokuwiki a:link,
+div.dokuwiki a:visited {
+ color: __extern__;
+ text-decoration: none;
+}
+div.dokuwiki a:hover,
+div.dokuwiki a:active {
+ color: __text__;
+ text-decoration: underline;
+}
+
+div.dokuwiki h1 a,
+div.dokuwiki h2 a,
+div.dokuwiki h3 a,
+div.dokuwiki h4 a,
+div.dokuwiki h5 a,
+div.dokuwiki a.nolink {
+ color: __text__ !important;
+ text-decoration: none !important;
+}
+
+/* external link */
+div.dokuwiki a.urlextern {
+ background: transparent url(images/link_icon.gif) 0px 1px no-repeat;
+ padding: 1px 0px 1px 16px;
+}
+
+/* windows share */
+div.dokuwiki a.windows {
+ background: transparent url(images/windows.gif) 0px 1px no-repeat;
+ padding: 1px 0px 1px 16px;
+}
+
+/* interwiki link (icon are set by dokuwiki) */
+div.dokuwiki a.interwiki {
+}
+
+/* link to some embedded media */
+div.dokuwiki a.media {
+}
+
+div.dokuwiki a.urlextern:link,
+div.dokuwiki a.windows:link,
+div.dokuwiki a.interwiki:link {
+ color: __extern__;
+}
+
+div.dokuwiki a.urlextern:visited,
+div.dokuwiki a.windows:visited,
+div.dokuwiki a.interwiki:visited {
+ color: purple;
+}
+div.dokuwiki a.urlextern:hover,
+div.dokuwiki a.urlextern:active,
+div.dokuwiki a.windows:hover,
+div.dokuwiki a.windows:active,
+div.dokuwiki a.interwiki:hover,
+div.dokuwiki a.interwiki:active {
+ color: __text__;
+}
+
+/* email link */
+div.dokuwiki a.mail {
+ background: transparent url(images/mail_icon.gif) 0px 1px no-repeat;
+ padding: 1px 0px 1px 16px;
+}
+
+/* existing wikipage */
+div.dokuwiki a.wikilink1 {
+ color: __existing__ !important;
+}
+
+/* not existing wikipage */
+div.dokuwiki a.wikilink2 {
+ color: __missing__ !important;
+ text-decoration: none !important;
+ border-bottom: dashed 1px __missing__ !important;
+}
+
+/* ------------- Page elements ----------------- */
+
+div.dokuwiki div.preview {
+ background-color: __background_neu__;
+ margin: 0 0 0 2em;
+ padding: 4px;
+ border: 1px dashed __text__;
+}
+
+div.dokuwiki div.breadcrumbs {
+ background-color: __background_neu__;
+ color: __text_neu__;
+ font-size: 80%;
+ padding: 0 0 0 4px;
+}
+
+div.dokuwiki span.user {
+ color: __text_other__;
+ font-size: 90%;
+}
+
+div.dokuwiki li.minor {
+ color: __text_neu__;
+ font-style: italic;
+}
+
+/* embedded images */
+div.dokuwiki img.media {
+ margin: 3px;
+}
+
+div.dokuwiki img.medialeft {
+ border: 0;
+ float: left;
+ margin: 0 1.5em 0 0;
+}
+
+div.dokuwiki img.mediaright {
+ border: 0;
+ float: right;
+ margin: 0 0 0 1.5em;
+}
+
+div.dokuwiki img.mediacenter {
+ border: 0;
+ display: block;
+ margin: 0 auto;
+}
+
+/* smileys */
+div.dokuwiki img.middle {
+ vertical-align: middle;
+}
+
+div.dokuwiki acronym {
+ cursor: help;
+ border-bottom: 1px dotted __text__;
+}
+
+/* general headline setup */
+div.dokuwiki h1,
+div.dokuwiki h2,
+div.dokuwiki h3,
+div.dokuwiki h4,
+div.dokuwiki h5 {
+ color: __text__;
+ background-color: inherit;
+ font-size: 100%;
+ font-weight: normal;
+ margin: 0 0 1em 0;
+ padding: 0.5em 0 0 0;
+ border-bottom: 1px solid __border__;
+ clear: left;
+}
+
+/* special headlines */
+div.dokuwiki h1 {font-size: 160%; margin-left: 0px; font-weight: bold;}
+div.dokuwiki h2 {font-size: 150%; margin-left: 20px;}
+div.dokuwiki h3 {font-size: 140%; margin-left: 40px; border-bottom: none; font-weight: bold;}
+div.dokuwiki h4 {font-size: 120%; margin-left: 60px; border-bottom: none; font-weight: bold;}
+div.dokuwiki h5 {font-size: 100%; margin-left: 80px; border-bottom: none; font-weight: bold;}
+
+/* indent different sections */
+div.dokuwiki div.level1 { margin-left: 3px; }
+div.dokuwiki div.level2 { margin-left: 23px; }
+div.dokuwiki div.level3 { margin-left: 43px; }
+div.dokuwiki div.level4 { margin-left: 63px; }
+div.dokuwiki div.level5 { margin-left: 83px; }
+
+/* unordered lists */
+div.dokuwiki ul {
+ line-height: 1.5em;
+ list-style-type: square;
+ list-style-image: none;
+ margin: 0 0 1em 3.5em;
+ color: __text_alt__;
+}
+
+/* ordered lists */
+div.dokuwiki ol {
+ line-height: 1.5em;
+ list-style-image: none;
+ margin: 0 0 1em 3.5em;
+ color: __text_alt__;
+ font-weight: bold;
+}
+
+/* no bottom gap in between and smaller left margin for nested lists */
+div.dokuwiki li ul,
+div.dokuwiki li ol {
+ margin: 0 0 0 1.5em;
+}
+
+/* the list items overriding the ul/ol definition */
+div.dokuwiki .li {
+ color: __text__;
+ font-weight: normal;
+}
+
+div.dokuwiki ol { list-style-type: decimal; }
+div.dokuwiki ol ol { list-style-type: upper-roman; }
+div.dokuwiki ol ol ol { list-style-type: lower-alpha; }
+div.dokuwiki ol ol ol ol { list-style-type: lower-greek; }
+
+div.dokuwiki li.open {
+ list-style-image: url(images/open.gif);
+ /*list-style-type: circle;*/
+}
+
+div.dokuwiki li.closed {
+ list-style-image: url(images/closed.gif);
+ /*list-style-type: disc;*/
+}
+
+div.dokuwiki blockquote {
+ border-left: 2px solid __border__;
+ padding-left: 3px;
+}
+
+div.dokuwiki pre {
+ font-size: 120%;
+ padding: 0.5em;
+ border: 1px dashed __border__;
+ color: __text__;
+ overflow: auto;
+}
+
+/* code blocks by indention */
+div.dokuwiki pre.pre {
+ background-color: __background_other__;
+}
+
+/* code blocks by code tag */
+div.dokuwiki pre.code {
+ background-color: __background_other__;
+}
+
+/* code blocks by file tag */
+div.dokuwiki pre.file {
+ background-color: __background_alt__;
+}
+
+/* filenames for file and code blocks */
+div.dokuwiki dl.file,
+div.dokuwiki dl.code {
+ margin-top: 2em;
+ margin-bottom: 2.5em;
+}
+
+div.dokuwiki dl.file dt,
+div.dokuwiki dl.code dt {
+ border: 1px dashed __border__;
+ display: inline;
+ padding: 0.1em 1em;
+ margin-left: 2em;
+}
+
+div.dokuwiki dl.code dt a,
+div.dokuwiki dl.file dt a {
+ color: __text__;
+}
+
+div.dokuwiki dl.code dt {
+ background-color: __background_other__;
+ border-bottom: 1px solid __background_other__;
+}
+
+div.dokuwiki dl.file dt {
+ background-color: __background_alt__;
+ border-bottom: 1px solid __background_alt__;
+}
+
+
+/* inline code words */
+div.dokuwiki code {
+ font-size: 120%;
+}
+
+/* inline tables */
+div.dokuwiki table.inline {
+ background-color: __background__;
+ border-spacing: 0px;
+ border-collapse: collapse;
+}
+
+div.dokuwiki table.inline th {
+ padding: 3px;
+ border: 1px solid __border__;
+ background-color: __background_alt__;
+}
+
+div.dokuwiki table.inline td {
+ padding: 3px;
+ border: 1px solid __border__;
+}
+
+/* ---------- table of contents ------------------- */
+
+div.dokuwiki div.toc {
+ margin: 1.2em 0 0 2em;
+ float: right;
+ width: 200px;
+ font-size: 80%;
+ clear: both;
+}
+
+div.dokuwiki div.tocheader {
+ border: 1px solid __border__;
+ background-color: __background_alt__;
+ text-align: left;
+ font-weight: bold;
+ padding: 3px;
+ margin-bottom: 2px;
+}
+
+div.dokuwiki span.toc_open,
+div.dokuwiki span.toc_close {
+ border: 0.4em solid __background_alt__;
+ float: right;
+ display: block;
+ margin: 0.4em 3px 0 0;
+}
+
+div.dokuwiki span.toc_open span,
+div.dokuwiki span.toc_close span {
+ display: none;
+}
+
+div.dokuwiki span.toc_open {
+ margin-top: 0.4em;
+ border-top: 0.4em solid __text__;
+}
+
+div.dokuwiki span.toc_close {
+ margin-top: 0;
+ border-bottom: 0.4em solid __text__;
+}
+
+div.dokuwiki #toc__inside {
+ border: 1px solid __border__;
+ background-color: __background__;
+ text-align: left;
+ padding: 0.5em 0 0.7em 0;
+}
+
+div.dokuwiki ul.toc {
+ list-style-type: none;
+ list-style-image: none;
+ line-height: 1.2em;
+ padding-left: 1em;
+ margin: 0;
+}
+
+div.dokuwiki ul.toc li {
+ background: transparent url(images/tocdot2.gif) 0 0.6em no-repeat;
+ padding-left: 0.4em;
+}
+
+div.dokuwiki ul.toc li.clear {
+ background-image: none;
+ padding-left: 0.4em;
+}
+
+div.dokuwiki a.toc:link,
+div.dokuwiki a.toc:visited {
+ color: __extern__;
+}
+
+div.dokuwiki a.toc:hover,
+div.dokuwiki a.toc:active {
+ color: __text__;
+}
+
+/* ---------------------------- Diff rendering --------------------------*/
+div.dokuwiki table.diff {
+ background-color: __background__;
+ width: 100%;
+}
+div.dokuwiki td.diff-blockheader {
+ font-weight: bold;
+}
+div.dokuwiki table.diff th {
+ border-bottom: 1px solid __border__;
+ font-size: 110%;
+ width: 50%;
+ font-weight: normal;
+ text-align: left;
+}
+div.dokuwiki table.diff th a {
+ font-weight: bold;
+}
+div.dokuwiki table.diff th span.user {
+ color: __text__;
+ font-size: 80%;
+}
+div.dokuwiki table.diff th span.sum {
+ font-size: 80%;
+ font-weight: bold;
+}
+div.dokuwiki table.diff th.minor {
+ font-style: italic;
+}
+div.dokuwiki table.diff td {
+ font-family: monospace;
+ font-size: 100%;
+}
+div.dokuwiki td.diff-addedline {
+ background-color: #ddffdd;
+}
+div.dokuwiki td.diff-deletedline {
+ background-color: #ffffbb;
+}
+div.dokuwiki td.diff-context {
+ background-color: __background_neu__;
+}
+div.dokuwiki table.diff td.diff-addedline strong,
+div.dokuwiki table.diff td.diff-deletedline strong {
+ color: red;
+}
+
+/* --------------------- footnotes -------------------------------- */
+
+div.dokuwiki div.footnotes {
+ clear: both;
+ border-top: 1px solid __border__;
+ padding-left: 1em;
+ margin-top: 1em;
+}
+
+div.dokuwiki div.fn {
+ font-size: 90%;
+}
+
+div.dokuwiki a.fn_bot {
+ font-weight: bold;
+}
+
+/* insitu-footnotes */
+div.insitu-footnote {
+ font-size: 80%;
+ line-height: 1.2em;
+ border: 1px solid __border__;
+ background-color: __background_other__;
+ text-align: left;
+ padding: 4px;
+ max-width: 40%; /* IE's width is handled in javascript */
+}
+
+/* overcome IE issue with one line code or file boxes which require h. scrolling */
+* html .insitu-footnote pre.code,
+* html .insitu-footnote pre.file {
+ padding-bottom: 18px;
+}
+
+/* --------------- search result formating --------------- */
+div.dokuwiki .search_result {
+ margin-bottom: 6px;
+ padding: 0 10px 0 30px;
+}
+
+div.dokuwiki .search_snippet {
+ color: __text_other__;
+ font-size: 12px;
+ margin-left: 20px;
+}
+
+div.dokuwiki .search_sep {
+ color: __text__;
+}
+
+div.dokuwiki .search_hit {
+ color: __text__;
+ background-color: __highlight__;
+}
+div.dokuwiki strong.search_hit {
+ font-weight: normal;
+}
+
+div.dokuwiki div.search_quickresult {
+ margin: 0 0 15px 30px;
+ padding: 0 10px 10px 0;
+ border-bottom: 1px dashed __border__;
+}
+div.dokuwiki div.search_quickresult h3 {
+ margin: 0 0 1.0em 0;
+ font-size: 1em;
+ font-weight: bold;
+}
+
+div.dokuwiki ul.search_quickhits {
+ margin: 0 0 0.5em 1.0em;
+}
+
+div.dokuwiki ul.search_quickhits li {
+ margin: 0 1.0em 0 1.0em;
+ float: left;
+ width: 30%;
+}
+
+div.dokuwiki div.section_highlight {
+ background-color: __background_alt__;
+}
+
+/* ------------------ Additional ---------------------- */
+
+div.footerinc {
+ text-align: center;
+}
+.footerinc a img {
+ opacity: 0.5;
+ border: 0;
+}
+
+.footerinc a:hover img {
+ opacity: 1;
+}
+
+/* ---------- AJAX quicksearch ----------- */
+
+div.dokuwiki div.ajax_qsearch {
+ position: absolute;
+ right: 237px;;
+ width: 200px;
+ opacity: 0.9;
+ display: none;
+ font-size: 80%;
+ line-height: 1.2em;
+ border: 1px solid __border__;
+ background-color: __background_other__;
+ text-align: left;
+ padding: 4px;
+}
+
+/* --------- Toolbar -------------------- */
+button.toolbutton {
+ background-color: __background__;
+ padding: 0px;
+ margin: 0 1px 0 0;
+ border: 1px solid __border__;
+ cursor: pointer;
+}
+
+/* nice alphatransparency background except for IE <7 */
+html>body button.toolbutton {
+ background: __background__ url(images/buttonshadow.png) repeat-x bottom;
+}
+
+div.picker {
+ width: 250px;
+ border: 1px solid __border__;
+ background-color: __background_alt__;
+}
+
+div.pk_hl {
+ width: 125px;
+}
+
+button.pickerbutton {
+ padding: 0px;
+ margin: 0 1px 1px 0;
+ border: 0;
+ background-color: transparent;
+ font-size: 80%;
+ cursor: pointer;
+}
+
+/* --------------- Image Details ----------------- */
+
+div.dokuwiki div.img_big {
+ float: left;
+ margin-right: 0.5em;
+}
+
+div.dokuwiki dl.img_tags dt {
+ font-weight: bold;
+ background-color: __background_alt__;
+}
+div.dokuwiki dl.img_tags dd {
+ background-color: __background_neu__;
+}
+
+div.dokuwiki div.imagemeta {
+ color: __text_neu__;
+ font-size: 70%;
+ line-height: 95%;
+}
+
+div.dokuwiki div.imagemeta img.thumb {
+ float: left;
+ margin-right: 0.1em;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/detail.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/detail.php
new file mode 100644
index 000000000..4f42b116e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/detail.php
@@ -0,0 +1,89 @@
+<?php
+/**
+ * DokuWiki Image Detail Template
+ *
+ * This is the template for displaying image details
+ *
+ * You should leave the doctype at the very top - It should
+ * always be the very first line of a document.
+ *
+ * @link http://dokuwiki.org/templates
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+// must be run from within DokuWiki
+if (!defined('DOKU_INC')) die();
+
+?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $conf['lang']?>" lang="<?php echo $conf['lang']?>" dir="ltr">
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>
+ <?php echo hsc(tpl_img_getTag('IPTC.Headline',$IMG))?>
+ [<?php echo strip_tags($conf['title'])?>]
+ </title>
+
+ <?php tpl_metaheaders()?>
+
+ <link rel="shortcut icon" href="<?php echo DOKU_TPL?>images/favicon.ico" />
+</head>
+
+<body>
+<div class="dokuwiki">
+ <?php html_msgarea()?>
+
+ <div class="page">
+ <?php if($ERROR){ print $ERROR; }else{ ?>
+
+ <h1><?php echo hsc(tpl_img_getTag('IPTC.Headline',$IMG))?></h1>
+
+ <div class="img_big">
+ <?php tpl_img(900,700) ?>
+ </div>
+
+ <div class="img_detail">
+ <p class="img_caption">
+ <?php print nl2br(hsc(tpl_img_getTag('simple.title'))); ?>
+ </p>
+
+ <p>&larr; <?php echo $lang['img_backto']?> <?php tpl_pagelink($ID)?></p>
+
+ <dl class="img_tags">
+ <?php
+ $t = tpl_img_getTag('Date.EarliestTime');
+ if($t) print '<dt>'.$lang['img_date'].':</dt><dd>'.dformat($t).'</dd>';
+
+ $t = tpl_img_getTag('File.Name');
+ if($t) print '<dt>'.$lang['img_fname'].':</dt><dd>'.hsc($t).'</dd>';
+
+ $t = tpl_img_getTag(array('Iptc.Byline','Exif.TIFFArtist','Exif.Artist','Iptc.Credit'));
+ if($t) print '<dt>'.$lang['img_artist'].':</dt><dd>'.hsc($t).'</dd>';
+
+ $t = tpl_img_getTag(array('Iptc.CopyrightNotice','Exif.TIFFCopyright','Exif.Copyright'));
+ if($t) print '<dt>'.$lang['img_copyr'].':</dt><dd>'.hsc($t).'</dd>';
+
+ $t = tpl_img_getTag('File.Format');
+ if($t) print '<dt>'.$lang['img_format'].':</dt><dd>'.hsc($t).'</dd>';
+
+ $t = tpl_img_getTag('File.NiceSize');
+ if($t) print '<dt>'.$lang['img_fsize'].':</dt><dd>'.hsc($t).'</dd>';
+
+ $t = tpl_img_getTag('Simple.Camera');
+ if($t) print '<dt>'.$lang['img_camera'].':</dt><dd>'.hsc($t).'</dd>';
+
+ $t = tpl_img_getTag(array('IPTC.Keywords','IPTC.Category','xmp.dc:subject'));
+ if($t) print '<dt>'.$lang['img_keywords'].':</dt><dd>'.hsc($t).'</dd>';
+
+ ?>
+ </dl>
+ <?php //Comment in for Debug// dbg(tpl_img_getTag('Simple.Raw'));?>
+ </div>
+
+ <?php } ?>
+ </div>
+</div>
+</body>
+</html>
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/footer.html b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/footer.html
new file mode 100644
index 000000000..38aab7216
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/footer.html
@@ -0,0 +1,41 @@
+<?php
+/**
+ * Example footer include
+ *
+ * This file shows you how to use the include hooks. However I recommend to
+ * create your own complete new template instead.
+ */
+
+$tgt = ($conf['target']['extern']) ? 'target="'.$conf['target']['extern'].'"' : '';
+?>
+
+<div class="footerinc">
+
+ <a <?php echo $tgt?> href="<?php echo DOKU_BASE; ?>feed.php" title="Recent changes RSS feed"><img src="<?php echo DOKU_TPL; ?>images/button-rss.png" width="80" height="15" alt="Recent changes RSS feed" /></a>
+
+ <?php
+ $lic = license_img('button');
+ if($lic){
+ ?>
+ <a <?php echo $tgt?> href="<?php echo $license[$conf['license']]['url']?>" rel="license" title="<?php echo $license[$conf['license']]['name']?>"><img src="<?php echo DOKU_BASE.$lic ?>" width="80" height="15" alt="" /></a>
+ <?php } ?>
+
+ <a <?php echo $tgt?> href="http://www.dokuwiki.org/donate" title="Donate"><img src="<?php echo DOKU_TPL; ?>images/button-donate.gif" alt="Donate" width="80" height="15" /></a>
+
+ <a <?php echo $tgt?> href="http://www.php.net" title="Powered by PHP"><img src="<?php echo DOKU_TPL; ?>images/button-php.gif" width="80" height="15" alt="Powered by PHP" /></a>
+
+ <a <?php echo $tgt?> href="http://validator.w3.org/check/referer" title="Valid XHTML 1.0"><img src="<?php echo DOKU_TPL; ?>images/button-xhtml.png" width="80" height="15" alt="Valid XHTML 1.0" /></a>
+
+ <a <?php echo $tgt?> href="http://jigsaw.w3.org/css-validator/check/referer?profile=css3" title="Valid CSS"><img src="<?php echo DOKU_TPL; ?>images/button-css.png" width="80" height="15" alt="Valid CSS" /></a>
+
+ <a <?php echo $tgt?> href="http://dokuwiki.org/" title="Driven by DokuWiki"><img src="<?php echo DOKU_TPL; ?>images/button-dw.png" width="80" height="15" alt="Driven by DokuWiki" /></a>
+
+<?php
+if ($conf['allowdebug']) {
+ echo '<!-- page made in '.round(delta_time(DOKU_START_TIME), 3).' seconds -->';
+}
+?>
+
+
+</div>
+<?php include(dirname(__FILE__).'/dwtb.html') ?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/UWEB.png b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/UWEB.png
new file mode 100644
index 000000000..ea03aec94
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/UWEB.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/UWEBshadow.png b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/UWEBshadow.png
new file mode 100644
index 000000000..212444f0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/UWEBshadow.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/bullet.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/bullet.gif
new file mode 100644
index 000000000..b43de48a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/bullet.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-cc.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-cc.gif
new file mode 100644
index 000000000..5861d637f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-cc.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-css.png b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-css.png
new file mode 100644
index 000000000..706325e1c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-css.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-donate.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-donate.gif
new file mode 100644
index 000000000..bba284e21
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-donate.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-dw.png b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-dw.png
new file mode 100644
index 000000000..39d5f56a9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-dw.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-php.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-php.gif
new file mode 100644
index 000000000..19aefb08f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-php.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-rss.png b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-rss.png
new file mode 100644
index 000000000..b036f7152
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-rss.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-xhtml.png b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-xhtml.png
new file mode 100644
index 000000000..ec686442c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-xhtml.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/buttonshadow.png b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/buttonshadow.png
new file mode 100644
index 000000000..f60be309f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/buttonshadow.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/closed.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/closed.gif
new file mode 100644
index 000000000..8414d4d69
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/closed.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/favicon.ico b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/favicon.ico
new file mode 100644
index 000000000..8b9616abb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/favicon.ico
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/inputshadow.png b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/inputshadow.png
new file mode 100644
index 000000000..d286beb22
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/inputshadow.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/link_icon.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/link_icon.gif
new file mode 100644
index 000000000..815ccb1b1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/link_icon.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/mail_icon.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/mail_icon.gif
new file mode 100644
index 000000000..50a87a9a0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/mail_icon.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/open.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/open.gif
new file mode 100644
index 000000000..f5d5c7e56
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/open.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/tocdot2.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/tocdot2.gif
new file mode 100644
index 000000000..3d39c2e73
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/tocdot2.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/windows.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/windows.gif
new file mode 100644
index 000000000..4f12acce1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/windows.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/layout.css b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/layout.css
new file mode 100644
index 000000000..ded2d87a2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/layout.css
@@ -0,0 +1,79 @@
+/**
+ * Tableless Layout for default template
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author moraes <moraes@tipos.com.br>
+ */
+
+/* -------------- top row --------------- */
+div.dokuwiki .header {
+ padding: 3px 0 0 2px;
+}
+
+div.dokuwiki .pagename {
+ float: left;
+ font-size: 200%;
+ font-weight: bolder;
+ color: __background_alt__;
+ text-align: left;
+ vertical-align: middle;
+}
+
+div.dokuwiki .pagename a {
+ color: __extern__ !important;
+ text-decoration: none !important;
+}
+
+div.dokuwiki .logo {
+ float: right;
+ font-size: 220%;
+ font-weight: bolder;
+ text-align: right;
+ vertical-align: middle;
+}
+
+div.dokuwiki .logo a {
+ color: __background_alt__ !important;
+ text-decoration: none !important;
+ font-variant: small-caps;
+ letter-spacing: 2pt;
+}
+
+/* --------------- top and bottom bar ---------------- */
+div.dokuwiki .bar {
+ border-top: 1px solid __border__;
+ border-bottom: 1px solid __border__;
+ background: __background_alt__;
+ padding: 0.1em 0.15em;
+ clear: both;
+}
+
+div.dokuwiki .bar-left {
+ float: left;
+}
+
+div.dokuwiki .bar-right {
+ float: right;
+ text-align: right;
+}
+
+div.dokuwiki #bar__bottom {
+ margin-bottom: 3px;
+}
+
+/* ------------- File Metadata ----------------------- */
+
+div.dokuwiki div.meta {
+ clear: both;
+ margin-top: 1em;
+ color: __text_alt__;
+ font-size: 70%;
+}
+
+div.dokuwiki div.meta div.user {
+ float: left;
+}
+
+div.dokuwiki div.meta div.doc {
+ text-align: right;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/main.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/main.php
new file mode 100644
index 000000000..be03b3be2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/main.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * DokuWiki Default Template
+ *
+ * This is the template you need to change for the overall look
+ * of DokuWiki.
+ *
+ * You should leave the doctype at the very top - It should
+ * always be the very first line of a document.
+ *
+ * @link http://dokuwiki.org/templates
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+// must be run from within DokuWiki
+if (!defined('DOKU_INC')) die();
+
+ob_start();
+
+include(dirname(__FILE__).'/main_index.php');
+
+$content = ob_get_clean();
+
+echo $content;
+
+?>
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/main_index.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/main_index.php
new file mode 100644
index 000000000..976d139ce
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/main_index.php
@@ -0,0 +1,121 @@
+<?php
+/**
+ * DokuWiki Default Template
+ *
+ * This is the template you need to change for the overall look
+ * of DokuWiki.
+ *
+ * You should leave the doctype at the very top - It should
+ * always be the very first line of a document.
+ *
+ * @link http://dokuwiki.org/templates
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+// must be run from within DokuWiki
+if (!defined('DOKU_INC')) die();
+
+?>
+ <?php tpl_metaheaders()?>
+ <?php /*old includehook*/ @include(dirname(__FILE__).'/meta.html')?>
+
+<?php /*old includehook*/ @include(dirname(__FILE__).'/topheader.html')?>
+<div class="dokuwiki">
+ <?php html_msgarea()?>
+
+ <div class="stylehead">
+
+ <div class="header">
+ <div class="pagename">
+ [[<?php tpl_link(wl($ID,'do=backlink'),tpl_pagetitle($ID,true),'title="'.$lang['btn_backlink'].'"')?>]]
+ </div>
+ <div class="logo">
+ <?php tpl_link(wl(),$conf['title'],'name="dokuwiki__top" id="dokuwiki__top" accesskey="h" title="[H]"')?>
+ </div>
+
+ <div class="clearer"></div>
+ </div>
+
+ <?php /*old includehook*/ @include(dirname(__FILE__).'/header.html')?>
+
+ <div class="bar" id="bar__top">
+ <div class="bar-left" id="bar__topleft">
+ <?php tpl_button('edit')?>
+ <?php tpl_button('history')?>
+ </div>
+
+ <div class="bar-right" id="bar__topright">
+ <?php tpl_button('recent')?>
+ <?php tpl_searchform()?>&nbsp;
+ </div>
+
+ <div class="clearer"></div>
+ </div>
+
+ <?php if($conf['breadcrumbs']){?>
+ <div class="breadcrumbs">
+ <?php tpl_breadcrumbs()?>
+ <?php //tpl_youarehere() //(some people prefer this)?>
+ </div>
+ <?php }?>
+
+ <?php if($conf['youarehere']){?>
+ <div class="breadcrumbs">
+ <?php tpl_youarehere() ?>
+ </div>
+ <?php }?>
+
+ </div>
+ <?php flush()?>
+
+ <?php /*old includehook*/ @include(dirname(__FILE__).'/pageheader.html')?>
+
+ <div class="page">
+ <!-- wikipage start -->
+ <?php tpl_content()?>
+ <!-- wikipage stop -->
+ </div>
+
+ <div class="clearer">&nbsp;</div>
+
+ <?php flush()?>
+
+ <div class="stylefoot">
+
+ <div class="meta">
+ <div class="user">
+ <?php tpl_userinfo()?>
+ </div>
+ <div class="doc">
+ <?php tpl_pageinfo()?>
+ </div>
+ </div>
+
+ <?php /*old includehook*/ @include(dirname(__FILE__).'/pagefooter.html')?>
+
+ <div class="bar" id="bar__bottom">
+ <div class="bar-left" id="bar__bottomleft">
+ <?php tpl_button('edit')?>
+ <?php tpl_button('history')?>
+ <?php tpl_button('revert')?>
+ </div>
+ <div class="bar-right" id="bar__bottomright">
+ <?php tpl_button('subscribe')?>
+ <?php tpl_button('subscribens')?>
+ <?php tpl_button('admin')?>
+ <?php tpl_button('profile')?>
+ <?php tpl_button('login')?>
+ <?php tpl_button('index')?>
+ <?php tpl_button('top')?>&nbsp;
+ </div>
+ <div class="clearer"></div>
+ </div>
+
+ </div>
+
+ <?php tpl_license(false);?>
+
+</div>
+<?php /*old includehook*/ @include(dirname(__FILE__).'/footer.html')?>
+
+<div class="no"><?php /* provide DokuWiki housekeeping, required in all templates */ tpl_indexerWebBug()?></div>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/media.css b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/media.css
new file mode 100644
index 000000000..2831c984f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/media.css
@@ -0,0 +1,205 @@
+/**
+ * The CSS in here cotrols the appearance of the media manager
+ */
+
+#media__manager {
+ height: 100%;
+ overflow: hidden;
+}
+
+#media__left {
+ width: 30%;
+ border-right: solid 1px __border__;
+
+ height: 100%;
+ overflow: auto;
+ position: absolute;
+ left: 0;
+}
+
+#media__right {
+ width: 69.7%;
+
+ height: 100%;
+ overflow: auto;
+ position: absolute;
+ right: 0;
+}
+
+#media__manager h1 {
+ margin: 0;
+ padding: 0;
+ margin-bottom: 0.5em;
+}
+
+/* --- Tree formatting --- */
+
+#media__tree img {
+ float: left;
+ padding: 0.5em 0.3em 0 0;
+}
+
+#media__tree ul {
+ list-style-type: none;
+ list-style-image: none;
+ margin-left: 1.5em;
+}
+
+#media__tree li {
+ clear: left;
+ list-style-type: none;
+ list-style-image: none;
+}
+*+html #media__tree li,
+* html #media__tree li {
+ border: 1px solid __background__;
+}/* I don't understand this, but this fixes a style bug in IE;
+it's dirty, so any "real" fixes are welcome */
+
+/* --- options --- */
+
+#media__opts {
+ padding-left: 1em;
+ margin-bottom: 0.5em;
+}
+
+#media__opts input {
+ float: left;
+ display: block;
+ margin-top: 4px;
+ position: absolute;
+}
+*+html #media__opts input,
+* html #media__opts input {
+ position: static;
+}
+
+#media__opts label {
+ display: block;
+ float: left;
+ margin-left: 20px;
+ margin-bottom: 4px;
+}
+*+html #media__opts label,
+* html #media__opts label {
+ margin-left: 10px;
+}
+
+#media__opts br {
+ clear: left;
+}
+
+/* --- file list --- */
+
+#media__content img.load {
+ margin: 1em auto;
+}
+
+#media__content #scroll__here {
+ border: 1px dashed __border__;
+}
+
+#media__content .odd {
+ background-color: __background_other__;
+ padding: 0.4em;
+}
+
+#media__content .even {
+ padding: 0.4em;
+}
+
+#media__content a.mediafile {
+ margin-right: 1.5em;
+ font-weight: bold;
+}
+
+#media__content div.detail {
+ padding: 0.3em 0 0.3em 2em;
+}
+
+#media__content div.detail div.thumb {
+ float: left;
+ width: 130px;
+ text-align: center;
+ margin-right: 0.4em;
+}
+
+
+#media__content img.btn {
+ vertical-align: text-bottom;
+}
+
+#media__content div.example {
+ color: __text_neu__;
+ margin-left: 1em;
+}
+
+/* --- upload form --- */
+
+#media__content div.upload {
+ font-size: 90%;
+ padding: 0 0.5em 0.5em 0.5em;
+}
+
+#media__content form#dw__upload,
+#media__content div#dw__flashupload {
+ display: block;
+ border-bottom: solid 1px __border__;
+ padding: 0 0.5em 1em 0.5em;
+}
+#media__content form#dw__upload fieldset {
+ padding: 0;
+ margin: 0;
+ border: none;
+ width: auto;
+}
+#media__content form#dw__upload p {
+ text-align: left;
+ padding: 0.25em 0;
+ margin: 0;
+ line-height: 1.0em;
+}
+#media__content form#dw__upload label.check {
+ float: none;
+ width: auto;
+ margin-left: 11.5em;
+}
+
+/* --- meta edit form --- */
+
+#media__content form.meta {
+ display: block;
+ padding: 0 0 1em 0;
+}
+
+#media__content form.meta label {
+ display: block;
+ width: 25%;
+ float: left;
+ font-weight: bold;
+ margin-left: 1em;
+ clear: left;
+}
+
+#media__content form.meta .edit {
+ font: 100% "Lucida Grande", Verdana, Lucida, Helvetica, Arial, sans-serif;
+ float: left;
+ width: 70%;
+ padding-right: 0;
+ padding-left: 0.2em;
+ margin: 2px;
+}
+
+#media__content form.meta textarea.edit {
+ height: 8em;
+}
+
+#media__content form.meta div.metafield {
+ clear: left;
+}
+
+#media__content form.meta div.buttons {
+ clear: left;
+ margin-left: 20%;
+ padding-left: 1em;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/mediamanager.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/mediamanager.php
new file mode 100644
index 000000000..7b7fe8675
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/mediamanager.php
@@ -0,0 +1,44 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<?php
+/**
+ * DokuWiki Default Template
+ *
+ * This is the template for the media manager popup
+ *
+ * You should leave the doctype at the very top - It should
+ * always be the very first line of a document.
+ *
+ * @link http://dokuwiki.org/templates
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $conf['lang']?>" lang="<?php echo $conf['lang']?>" dir="ltr">
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>
+ <?php echo hsc($lang['mediaselect'])?>
+ [<?php echo strip_tags($conf['title'])?>]
+ </title>
+ <?php tpl_metaheaders()?>
+ <link rel="shortcut icon" href="<?php echo DOKU_TPL?>images/favicon.ico" />
+</head>
+
+<body>
+<div id="media__manager" class="dokuwiki">
+ <div id="media__left">
+ <?php html_msgarea()?>
+ <h1><?php echo hsc($lang['mediaselect'])?></h1>
+
+ <?php /* keep the id! additional elements are inserted via JS here */?>
+ <div id="media__opts"></div>
+
+ <?php tpl_mediaTree() ?>
+ </div>
+
+ <div id="media__right">
+ <?php tpl_mediaContent() ?>
+ </div>
+</div>
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/print.css
new file mode 100644
index 000000000..1d6e0756f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/print.css
@@ -0,0 +1,238 @@
+
+body {
+ font: 10pt "Lucida Grande", Verdana, Lucida, Helvetica, Arial, sans-serif;
+ background-color: White;
+ color: Black;
+}
+
+table {
+ font-size: 100%;
+ padding: 0;
+ margin: 0;
+}
+
+tr,td,th { padding: 0; margin: 0; }
+
+img { border: 0; }
+
+a {
+ color: #000000;
+ text-decoration: none;
+ background: none !important;
+}
+
+
+div.meta {
+ clear: both;
+ margin-top: 1em;
+ font-size: 70%;
+ text-align: right;
+}
+
+
+div.notify,
+div.info,
+div.success,
+div.error,
+div.breadcrumbs,
+div.secedit {
+ display: none;
+}
+
+/* --------------------- Text formating -------------------------------- */
+
+/* external link */
+a.urlextern:after {
+ content: " [" attr(href) "]";
+ font-size: 90%;
+}
+
+/* interwiki link */
+a.interwiki:after {
+ content: " [" attr(href) "]";
+ font-size: 90%;
+}
+
+/* email link */
+a.mail:after {
+ content: " [" attr(href) "]";
+ font-size: 90%;
+}
+
+/* existing wikilink */
+a.wikilink1 { text-decoration: underline; }
+
+/* the document */
+div.page {
+ text-align: justify;
+}
+
+/* general headline setup */
+h1, h2, h3, h4, h5 {
+ color: Black;
+ background-color: transparent;
+ font-family: "Lucida Grande", Verdana, Lucida, Helvetica, Arial, sans-serif;
+ font-size: 100%;
+ font-weight: normal;
+ margin-left: 0;
+ margin-right: 0;
+ margin-top: 0;
+ margin-bottom: 1em;
+ padding-left: 0;
+ padding-right: 0;
+ padding-top: 0.5em;
+ padding-bottom: 0;
+ border-bottom: 1px solid #000000;
+ clear: left;
+}
+
+/* special headlines */
+h1 { font-size: 160%; font-weight: bold; }
+h2 { font-size: 150%; }
+h3 { font-size: 140%; border-bottom: none; }
+h4 { font-size: 120%; border-bottom: none; }
+h5 { font-size: 100%; border-bottom: none; }
+
+/* embedded images */
+img.media {
+ margin: 3px;
+}
+
+img.medialeft {
+ border: 0;
+ float: left;
+ margin: 0 1.5em 0 0;
+}
+
+img.mediaright {
+ border: 0;
+ float: right;
+ margin: 0 0 0 1.5em;
+}
+
+/* unordered lists */
+ul {
+ line-height: 1.5em;
+ list-style-type: square;
+ margin: 0 0 1em 3.5em;
+ padding: 0;
+}
+
+/* ordered lists */
+ol {
+ line-height: 1.5em;
+ margin: 0 0 1em 3.5em;
+ padding: 0;
+ font-weight: normal;
+}
+
+div.dokuwiki li ul {
+ margin-bottom: 0;
+}
+div.dokuwiki li ol {
+ margin-bottom: 0;
+}
+
+div.dokuwiki ol { list-style-type: decimal; }
+div.dokuwiki ol ol { list-style-type: upper-roman; }
+div.dokuwiki ol ol ol { list-style-type: lower-alpha; }
+div.dokuwiki ol ol ol ol { list-style-type: lower-greek; }
+
+/* the list items overriding the ol definition */
+span.li {
+ font-weight: normal;
+}
+
+/* code blocks by indention */
+pre.pre {
+ font-size: 8pt;
+ padding: 0.5em;
+ border: 1px dashed #000000;
+ color: Black;
+ overflow: visible;
+}
+
+/* code blocks by code tag */
+pre.code {
+ font-size: 8pt;
+ padding: 0.5em;
+ border: 1px dashed #000000;
+ color: Black;
+ overflow: visible;
+}
+
+/* inline code words */
+code {
+ font-size: 120%;
+}
+
+/* code blocks by file tag */
+pre.file {
+ font-size: 8pt;
+ padding: 0.5em;
+ border: 1px dotted #000000;
+ color: Black;
+ overflow: visible;
+}
+
+/* footnotes */
+div.footnotes {
+ clear: both;
+ border-top: 1px solid #000000;
+ padding-left: 1em;
+ margin-top: 1em;
+}
+
+div.fn {
+ font-size: 90%;
+}
+
+a.fn_top {
+ vertical-align: super;
+ font-size: 80%;
+}
+
+a.fn_bot {
+ vertical-align: super;
+ font-size: 80%;
+ font-weight: bold;
+}
+
+acronym {
+ border: 0;
+}
+
+/* ---------- inline tables ------------------- */
+
+table.inline {
+ font-size: 80%;
+ background-color: #ffffff;
+ border-spacing: 0px;
+ border-collapse: collapse;
+}
+
+table.inline th {
+ padding: 3px;
+ border: 1px solid #000000;
+ border-bottom: 2px solid #000000;
+}
+
+table.inline td {
+ padding: 3px;
+ border: 1px solid #000000;
+}
+
+.leftalign {
+ text-align: left;
+}
+
+.centeralign {
+ text-align: center;
+}
+
+.rightalign {
+ text-align: right;
+}
+
+.toc, .footerinc, .header, .bar, .user { display: none; }
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/rtl.css b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/rtl.css
new file mode 100644
index 000000000..af3793f7d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/rtl.css
@@ -0,0 +1,119 @@
+/**
+ * Layout and dedsign corrections for right-to-left languages
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Dotan Kamber <kamberd@yahoo.com>
+ */
+
+.bar-left {
+ float: right;
+ text-align: right;
+}
+
+.bar-right {
+ float: left;
+ text-align: left;
+}
+
+.pagename {
+ float: right;
+ text-align: right;
+}
+
+.logo {
+ float: left;
+ text-align: left;
+}
+
+label {
+ text-align: left;
+}
+
+label.simple {
+ text-align: right;
+}
+
+div.meta div.user {
+ float: right;
+}
+
+div.meta div.doc {
+ text-align: left;
+}
+
+/* ------------------ Design corrections --------------------------------- */
+
+div.dokuwiki ul,
+div.dokuwiki ol {
+ margin: 0.5em 1.5em 0.5em 0;
+}
+
+div.dokuwiki a.urlextern,
+div.dokuwiki a.interwiki,
+div.dokuwiki a.windows,
+div.dokuwiki a.mail,
+div.dokuwiki a.mail.JSnocheck {
+ /* should work but doesn't - so we just disable icons here*/
+ /*
+ background-position: right 1px;
+ padding-right: 16px;
+ */
+ background-image: none !important;
+ padding: 0px 0px 0px 0px;
+}
+
+div.dokuwiki div.secedit input.button {
+ float: left;
+}
+
+/* headlines */
+div.dokuwiki h1, div.dokuwiki h2, div.dokuwiki h3, div.dokuwiki h4, div.dokuwiki h5 {
+ clear: right;
+}
+
+/* special headlines */
+div.dokuwiki h1 { margin-left: 0px; margin-right: 0px; }
+div.dokuwiki h2 { margin-left: 0px; margin-right: 20px; }
+div.dokuwiki h3 { margin-left: 0px; margin-right: 40px; }
+div.dokuwiki h4 { margin-left: 0px; margin-right: 60px; }
+div.dokuwiki h5 { margin-left: 0px; margin-right: 80px; }
+
+/* indent different sections */
+div.dokuwiki div.level1 { margin-left: 0px; margin-right: 3px; }
+div.dokuwiki div.level2 { margin-left: 0px; margin-right: 23px; }
+div.dokuwiki div.level3 { margin-left: 0px; margin-right: 43px; }
+div.dokuwiki div.level4 { margin-left: 0px; margin-right: 63px; }
+div.dokuwiki div.level5 { margin-left: 0px; margin-right: 83px; }
+
+/* TOC control */
+div.dokuwiki div.toc {
+ float: left;
+}
+
+div.dokuwiki div.tocheader {
+ text-align: right;
+}
+
+div.dokuwiki #toc__inside {
+ text-align: right;
+}
+
+div.dokuwiki ul.toc {
+ padding: 0;
+ padding-right: 1em;
+}
+
+div.dokuwiki ul.toc li {
+ background-position: right 0.6em;
+ padding-right: 0.4em;
+ direction: rtl;
+}
+
+div.dokuwiki ul.toc li.clear {
+ padding-right: 0.4em;
+}
+
+div.dokuwiki pre {
+ text-align: left;
+}
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/style.ini b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/style.ini
new file mode 100644
index 000000000..dfd5500fa
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/style.ini
@@ -0,0 +1,67 @@
+; Please see http://www.php.net/manual/en/function.parse-ini-file.php
+; for limitations of the ini format used here
+
+; Define the stylesheets your template uses here. The second value
+; defines for which output media the style should be loaded. Currently
+; print, screen and rtl are supported. rtl styles are loaded additionally
+; to screen styles if a right-to-left language is selected (eg. hebrew)
+[stylesheets]
+layout.css = screen
+design.css = screen
+style.css = screen
+
+media.css = screen
+_admin.css = screen
+_linkwiz.css = screen
+
+rtl.css = rtl
+print.css = print
+
+; This section is used to configure some placeholder values used in
+; the stylesheets. Changing this file is the simplest method to
+; give your wiki a new look.
+[replacements]
+
+;--------------------------------------------------------------------------
+;------ guaranteed dokuwiki color placeholders that every plugin can use
+; main text and background colors
+__text__ = "#000"
+__background__ = "#fff"
+; alternative text and background colors
+__text_alt__ = "#638c9c"
+__background_alt__ = "#dee7ec"
+; neutral text and background colors
+__text_neu__ = "#666"
+__background_neu__ = "#f5f5f5"
+; border color
+__border__ = "#8cacbb"
+;--------------------------------------------------------------------------
+
+; other text and background colors
+__text_other__ = "#ccc"
+__background_other__ = "#f7f9fa"
+
+; these are used for links
+__extern__ = "#436976"
+__existing__ = "#090"
+__missing__ = "#f30"
+
+; highlighting search snippets
+__highlight__ = "#ff9"
+
+
+;--------------------------------------------------------------------------
+;------ for keeping old templates and plugins compatible to the old pattern
+; (to be deleted at the next or after next release)
+__white__ = "#fff"
+__lightgray__ = "#f5f5f5"
+__mediumgray__ = "#ccc"
+__darkgray__ = "#666"
+__black__ = "#000"
+
+; these are the shades of blue
+__lighter__ = "#f7f9fa"
+__light__ = "#eef3f8"
+__medium__ = "#dee7ec"
+__dark__ = "#8cacbb"
+__darker__ = "#638c9c"
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/index.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/index.php
new file mode 100644
index 000000000..a55081738
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/index.php
@@ -0,0 +1,68 @@
+<?php
+/**
+ * This file reads the style.ini of the used template and displays the
+ * replacements defined in it. Color replacements will be displayed
+ * visually. This should help with adjusting and using the styles
+ * specified in the style.ini
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Anika Henke <anika@selfthinker.org>
+ */
+?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" dir="ltr">
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>Template Replacements</title>
+ <style type="text/css">
+ body {
+ background-color: #fff;
+ color: #000;
+ }
+ caption {
+ font-weight: bold;
+ }
+ td {
+ margin: 0;
+ padding: 0.5em 2em;
+ font-family: monospace;
+ font-size: 120%;
+ border: 1px solid #fff;
+ }
+ tr:hover td {
+ border: 1px solid #ccc;
+ }
+ .color {
+ padding: 0.25em 1em;
+ border: 1px #000 solid;
+ }
+ </style>
+</head>
+<body>
+<?php
+if(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/../../');
+require_once(DOKU_INC.'inc/init.php');
+
+$ini = @parse_ini_file($conf['template'].'/style.ini',true);
+if ($ini) {
+ echo '<table>';
+ echo "<caption>".htmlspecialchars($conf['template'])."'s style.ini</caption>";
+ foreach($ini['replacements'] as $key => $val){
+ echo '<tr>';
+ echo '<td>'.htmlspecialchars($key).'</td>';
+ echo '<td>'.htmlspecialchars($val).'</td>';
+ echo '<td>';
+ if(preg_match('/^#[0-f]{3,6}$/i',$val)){
+ echo '<div class="color" style="background-color:'.$val.';">&nbsp;</div>';
+ }
+ echo '</td>';
+ echo '</tr>';
+ }
+ echo '</table>';
+} else {
+ echo "<p>Non-existent template: <strong>".htmlspecialchars($conf['template'])."</strong></p>";
+}
+?>
+</body>
+</html>
diff --git a/mod/dokuwiki/views/default/dokuwiki/css.php b/mod/dokuwiki/views/default/dokuwiki/css.php
new file mode 100644
index 000000000..6753e79dc
--- /dev/null
+++ b/mod/dokuwiki/views/default/dokuwiki/css.php
@@ -0,0 +1,12 @@
+div.dokuwiki input {
+ width: auto;
+}
+
+div.dokuwiki .header {
+ margin-bottom: 10px;
+}
+
+#sidebartop {
+ position: relative !important;
+ display: none;
+}
diff --git a/mod/dokuwiki/views/default/dokuwiki/grouppage.php b/mod/dokuwiki/views/default/dokuwiki/grouppage.php
new file mode 100644
index 000000000..c095dfa2a
--- /dev/null
+++ b/mod/dokuwiki/views/default/dokuwiki/grouppage.php
@@ -0,0 +1,9 @@
+<?php
+
+$group = elgg_get_page_owner_entity();
+if ($group->dokuwiki_enable == 'yes' && $group->dokuwiki_frontpage_enable == 'yes') {
+ set_input("inline_page", true);
+ dokuwiki_page_handler(array($group->guid));
+}
+
+?>
diff --git a/mod/dokuwiki/views/default/dokuwiki/index.php b/mod/dokuwiki/views/default/dokuwiki/index.php
new file mode 100644
index 000000000..424f1109b
--- /dev/null
+++ b/mod/dokuwiki/views/default/dokuwiki/index.php
@@ -0,0 +1,13 @@
+<?php
+ global $CONFIG;
+ $destfile = $CONFIG->pluginspath.'dokuwiki/vendors/dokuwiki/'.$vars['page'];
+ if (file_exists($destfile)) {
+ if (strpos($destfile, ".png") === FALSE)
+ {
+ include($destfile);
+ } else {
+ header("Content-type: image");
+ echo file_get_contents($destfile);
+ }
+ }
+?>
diff --git a/mod/dokuwiki/views/default/dokuwiki/metatags.php b/mod/dokuwiki/views/default/dokuwiki/metatags.php
new file mode 100644
index 000000000..50cb9041b
--- /dev/null
+++ b/mod/dokuwiki/views/default/dokuwiki/metatags.php
@@ -0,0 +1,5 @@
+<?php
+if (elgg_get_context() == "dokuwiki") {
+ tpl_metaheaders();
+}
+?>
diff --git a/mod/dokuwiki/views/default/dokuwiki/sidebar.php b/mod/dokuwiki/views/default/dokuwiki/sidebar.php
new file mode 100644
index 000000000..e9a7c89ab
--- /dev/null
+++ b/mod/dokuwiki/views/default/dokuwiki/sidebar.php
@@ -0,0 +1,10 @@
+<?php
+
+$group = elgg_get_page_owner_entity();
+if ($group->dokuwiki_enable == 'yes' && $group->dokuwiki_frontsidebar_enable == 'yes') {
+ set_input("inline_sidebar", true);
+ set_input("inline_page", false);
+ dokuwiki_page_handler(array($group->guid));
+ }
+
+?>
diff --git a/mod/dokuwiki/views/default/object/dokuwiki.php b/mod/dokuwiki/views/default/object/dokuwiki.php
new file mode 100644
index 000000000..12063b9da
--- /dev/null
+++ b/mod/dokuwiki/views/default/object/dokuwiki.php
@@ -0,0 +1,19 @@
+<?php
+ $entity = $vars['entity'];
+ $owner_guid = $entity->container_guid;
+ $owner = get_entity($owner_guid);
+
+ $icon = elgg_view_entity_icon($owner, 'tiny');
+
+ if ($owner) {
+ $directory = elgg_get_data_path()."wikis/".$owner_guid."/pages";
+ $filecount = count(glob("" . $directory . "/*"));
+ $list_body = "<h3><a href='".$entity->getURL()."'>".sprintf(elgg_echo('dokuwiki:wikifrom'),$owner->name)."</a></h3>";
+ $list_body .= sprintf(elgg_echo("dokuwiki:pages"), $filecount);
+ echo elgg_view_image_block($icon, $list_body);
+ }
+ else {
+ // shouldn't show wikis from groups you can't see :-P
+ echo elgg_view_image_block("", "");
+ }
+?>
diff --git a/mod/dokuwiki/views/default/river/dokuwiki.php b/mod/dokuwiki/views/default/river/dokuwiki.php
new file mode 100644
index 000000000..67e6f60e7
--- /dev/null
+++ b/mod/dokuwiki/views/default/river/dokuwiki.php
@@ -0,0 +1,17 @@
+<?php
+ // 'action_type'=>$action_type, 'subject_guid'=>$subject_guid, 'object_guid' =>$object_guid, 'item'=>$res
+ $user = get_entity($vars['item']->subject_guid);
+ $wiki = get_entity($vars['item']->object_guid);
+ $parts = explode("/", $vars['item']->action_type);
+ $id = $wiki->container_guid;
+ $namespace = "<a href='".$wiki->getURL()."?id=".$parts[2]."'>".$parts[2]."</a>";
+ if ($wiki_owner = get_entity($wiki->container_guid))
+ $wikifrom = sprintf(elgg_echo("dokuwiki:wikifrom"), $wiki_owner->name);
+ else
+ $wikifrom = elgg_echo("dokuwiki:sitewiki");
+ if ($wiki)
+ $wikiname = "<a href='".$wiki->getURL()."'>".$wikifrom."</a>";
+ if ($user)
+ $user_node = "<a href='".$user->getURL()."'>" . $user->name . "</a>";
+ echo sprintf(elgg_echo("dokuwiki:river:modified"), $user_node, $namespace, $wikiname);
+?>